ZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vTWFrZWFzbS5hbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vTWFrZWFzbS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDczMDZjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9NYWtlYXNtLmFtCkBAIC0wLDAgKzEsMTE4IEBACisjIyBBdXRvbWFrZSBhc20gZmlsZSBydWxlcy4KKworIyBDb3B5cmlnaHQgMTk5NiwgMTk5OC0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorIworIyAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisjCisjICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyMgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorIyAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjICBvcgorIworIyAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyAgICAgIGxhdGVyIHZlcnNpb24uCisjCisjICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorIworIyAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyAgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKKyMgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKKyMgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCisjIENPTVBJTEUgbWludXMgQ0MuCisjCitDT01QSUxFX0ZMQUdTID0gJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpICQoQVNNRkxBR1MpCisKKyMgRmxhZ3MgdXNlZCBmb3IgcHJlcHJvY2Vzc2luZyAoaW4gYW5zaTJrbnIgcnVsZXMpLgorIworUFJFUFJPQ0VTU19GTEFHUyA9ICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCisJJChDUFBGTEFHUykKKworCisjIFJlY2VudCB2ZXJzaW9ucyBvZiBhdXRvbWFrZSAoMS41IGFuZCB1cCBmb3IgaW5zdGFuY2UpIGFwcGVuZCBhdXRvbWFrZQorIyBnZW5lcmF0ZWQgc3VmZml4ZXMgdG8gdGhpcyAkKFNVRkZJWEVTKSBsaXN0LiAgVGhpcyBpcyBlc3NlbnRpYWwgZm9yIHVzLAorIyBzaW5jZSAuYyBtdXN0IGNvbWUgYWZ0ZXIgLnMsIC5TIGFuZCAuYXNtLiAgSWYgLmMgaXMgYmVmb3JlIC5zLCBmb3IKKyMgaW5zdGFuY2UsIHRoZW4gaW4gdGhlIG1wbiBkaXJlY3RvcnkgIm1ha2UiIHdpbGwgc2VlIGFkZF9uLmMgbWVudGlvbmVkIGluCisjIGFuIGV4cGxpY2l0IHJ1bGUgKHRoZSBhbnNpMmtuciBzdHVmZikgYW5kIGRlY2lkZSBpdCBtdXN0IGhhdmUgYWRkX24uYywKKyMgZXZlbiBpZiBhZGRfbi5jIGRvZXNuJ3QgZXhpc3QgYnV0IGFkZF9uLnMgZG9lcy4gIFNlZSBHTlUgbWFrZQorIyBkb2N1bWVudGF0aW9uICIobWFrZSlJbXBsaWNpdCBSdWxlIFNlYXJjaCIsIHBhcnQgNWMuCisjCisjIE9uIElSSVggNiBuYXRpdmUgbWFrZSB0aGlzIGRvZXNuJ3Qgd29yayBwcm9wZXJseSB0aG91Z2guICBTb21laG93IC5jCisjIHJlbWFpbnMgYWhlYWQgb2YgLnMsIHBlcmhhcHMgYmVjYXVzZSAuYy5zIGlzIGEgYnVpbHRpbiBydWxlLiAgLmFzbSB3b3JrcworIyBmaW5lIHRob3VnaCwgYW5kIG1wbi9taXBzMyB1c2VzIHRoaXMuCisjCitTVUZGSVhFUyA9IC5zIC5TIC5hc20KKworCisjIC5zIGFzc2VtYmxlciwgbm8gcHJlcHJvY2Vzc2luZy4KKyMKKy5zLm86CisJJChDQ0FTKSAkKENPTVBJTEVfRkxBR1MpIGB0ZXN0IC1mICckPCcgfHwgZWNobyAnJChzcmNkaXIpLydgJDwKKy5zLm9iajoKKwkkKENDQVMpICQoQ09NUElMRV9GTEFHUykgYGlmIHRlc3QgLWYgJyQ8JzsgdGhlbiAkKENZR1BBVEhfVykgJyQ8JzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kPCc7IGZpYAorLnMubG86CisJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAtLXRhZz1DQyAkKENDQVMpICQoQ09NUElMRV9GTEFHUykgYHRlc3QgLWYgJyQ8JyB8fCBlY2hvICckKHNyY2RpcikvJ2AkPAorCisKKyMgY2FuIGJlIG92ZXJyaWRkZW4gZHVyaW5nIGRldmVsb3BtZW50LCBlZy4gIm1ha2UgUk1fVE1QPTogbXVsXzEubG8iCitSTV9UTVAgPSBybSAtZgorCisKKyMgLlMgYXNzZW1ibGVyLCBwcmVwcm9jZXNzZWQgd2l0aCBjcHAuCisjCisjIEl0J3MgbmVjZXNzYXJ5IHRvIHJ1biAkKENQUCkgc2VwYXJhdGVseSwgc2luY2UgaXQgc2VlbXMgbm90IGFsbCBjb21waWxlcnMKKyMgcmVjb2duaXNlIC5TIGZpbGVzLCBpbiBwYXJ0aWN1bGFyICJjYyIgb24gSFAtVVggMTAgYW5kIDExIGRvZXNuJ3QgKGFuZAorIyB3aWxsIHNpbGVudGx5IGRvIG5vdGhpbmcgaWYgZ2l2ZW4gYSAuUykuCisjCisjIEZvciAubG8gd2UgbmVlZCBhIGhlbHBlciBzY3JpcHQsIGFzIGRlc2NyaWJlZCBiZWxvdyBmb3IgLmFzbS5sby4KKyMKKy5TLm86CisJJChDUFApICQoUFJFUFJPQ0VTU19GTEFHUykgYHRlc3QgLWYgJyQ8JyB8fCBlY2hvICckKHNyY2RpcikvJ2AkPCB8IGdyZXAgLXYgJ14jJyA+dG1wLSQqLnMKKwkkKENDQVMpICQoQ09NUElMRV9GTEFHUykgdG1wLSQqLnMgLW8gJEAKKwkkKFJNX1RNUCkgdG1wLSQqLnMKKy5TLm9iajoKKwkkKENQUCkgJChQUkVQUk9DRVNTX0ZMQUdTKSBgaWYgdGVzdCAtZiAnJDwnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJDwnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQ8JzsgZmlgIHwgZ3JlcCAtdiAnXiMnID50bXAtJCoucworCSQoQ0NBUykgJChDT01QSUxFX0ZMQUdTKSB0bXAtJCoucyAtbyAkQAorCSQoUk1fVE1QKSB0bXAtJCoucworLlMubG86CisJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAtLXRhZz1DQyAkKHRvcF9zcmNkaXIpL21wbi9jcHAtY2NhcyAtLWNwcD0iJChDUFApICQoUFJFUFJPQ0VTU19GTEFHUykiICQoQ0NBUykgJChDT01QSUxFX0ZMQUdTKSBgdGVzdCAtZiAnJDwnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQ8CisKKworIyAuYXNtIGFzc2VtYmxlciwgcHJlcHJvY2Vzc2VkIHdpdGggbTQuCisjCisjIC5vIGFuZCAub2JqIGFyZSBub24tUElDIGFuZCBqdXN0IG5lZWQgbTQgZm9sbG93ZWQgYnkgYSBjb21waWxlLgorIworIyAubG8gaXMgYSBiaXQgdHJpY2t5LiAgTGlidG9vbCAoYXMgb2YgdmVyc2lvbiAxLjUpIGhhcyBmb28ubG8gYXMgYSBsaXR0bGUKKyMgdGV4dCBmaWxlLCBhbmQgLmxpYnMvZm9vLm8gYW5kIGZvby5vIGFzIHRoZSBQSUMgYW5kIG5vbi1QSUMgb2JqZWN0cywKKyMgcmVzcGVjdGl2ZWx5LiAgSXQnZCBiZSBhc2tpbmcgZm9yIGxvdHMgb2YgdHJvdWJsZSB0byB0cnkgdG8gY3JlYXRlIGZvby5sbworIyBvdXJzZWx2ZXMsIHNvIGluc3RlYWQgYXJyYW5nZSB0byBpbnZva2UgbGlidG9vbCBsaWtlIGEgLS1tb2RlPWNvbXBpbGUsIGJ1dAorIyB3aXRoIGEgc3BlY2lhbCBtNC1jY2FzIHNjcmlwdCB3aGljaCBmaXJzdCBtNCBwcmVwcm9jZXNzZXMsIHRoZW4gY29tcGlsZXMuCisjIC0tdGFnPUNDIGlzIG5lY2Vzc2FyeSBzaW5jZSBmb28uYXNtIGlzIG90aGVyd2lzZSB1bmtub3duIHRvIGxpYnRvb2wuCisjCisjIExpYnRvb2wgYWRkcyAtRFBJQyB3aGVuIGJ1aWxkaW5nIGEgc2hhcmVkIG9iamVjdCBhbmQgdGhlIC5hc20gZmlsZXMgbG9vaworIyBmb3IgdGhhdC4gIEJ1dCBpdCBzaG91bGQgYmUgbm90ZWQgdGhhdCB0aGUgb3RoZXIgUElDIGZsYWdzIGFyZSBvbiBvY2Nhc2lvbgorIyBpbXBvcnRhbnQgdG9vLCBpbiBwYXJ0aWN1bGFyIEZyZWVCU0QgMi4yLjggZ2FzIDEuOTIuMyByZXF1aXJlcyAtayBiZWZvcmUKKyMgaXQgYWNjZXB0cyBQSUMgY29uc3RydWN0cyBsaWtlIEBHT1QsIGFuZCBnY2MgYWRkcyB0aGF0IGZsYWcgb25seSB1bmRlcgorIyAtZlBJQy4gIChMYXRlciB2ZXJzaW9ucyBvZiBnYXMgYXJlIGhhcHB5IHRvIGFjY2VwdCBQSUMgc3R1ZmYgYW55IHRpbWUuKQorIworLmFzbS5vOgorCSQoTTQpIC1ET1BFUkFUSU9OXyQqIGB0ZXN0IC1mICckPCcgfHwgZWNobyAnJChzcmNkaXIpLydgJDwgPnRtcC0kKi5zCisJJChDQ0FTKSAkKENPTVBJTEVfRkxBR1MpIHRtcC0kKi5zIC1vICRACisJJChSTV9UTVApIHRtcC0kKi5zCisuYXNtLm9iajoKKwkkKE00KSAtRE9QRVJBVElPTl8kKiBgaWYgdGVzdCAtZiAnJDwnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJDwnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQ8JzsgZmlgID50bXAtJCoucworCSQoQ0NBUykgJChDT01QSUxFX0ZMQUdTKSB0bXAtJCoucyAtbyAkQAorCSQoUk1fVE1QKSB0bXAtJCoucworLmFzbS5sbzoKKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlIC0tdGFnPUNDICQodG9wX3NyY2RpcikvbXBuL200LWNjYXMgLS1tND0iJChNNCkiICQoQ0NBUykgJChDT01QSUxFX0ZMQUdTKSBgdGVzdCAtZiAnJDwnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQ8CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL01ha2VmaWxlLmFtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWI0MDA2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDU5IEBACisjIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIGdlbmVyYXRlIE1ha2VmaWxlLmluCisKKyMgQ29weXJpZ2h0IDE5OTYsIDE5OTgtMjAwMiwgMjAwNSwgMjAxMSwgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKyMKKyMgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorIworIyAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisjICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyMgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyAgb3IKKyMKKyMgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgICAgICBsYXRlciB2ZXJzaW9uLgorIworIyAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKyMKKyMgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgIGZvciBtb3JlIGRldGFpbHMuCisjCisjICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCisjICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCisjICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworQU1fQ1BQRkxBR1MgPSAtRF9fR01QX1dJVEhJTl9HTVAgLUkkKHRvcF9zcmNkaXIpIFwKKyAgLURPUEVSQVRJT05fYGVjaG8gJCogfCBzZWQgJ3MvXyQkLy8nYAorCitPRklMRVMgPSBAbXBuX29iamVjdHNACisKK25vaW5zdF9MVExJQlJBUklFUyA9IGxpYm1wbi5sYQorbm9kaXN0X2xpYm1wbl9sYV9TT1VSQ0VTID0gZmliX3RhYmxlLmMgbXBfYmFzZXMuYworbGlibXBuX2xhX0xJQkFERCA9ICQoT0ZJTEVTKQorbGlibXBuX2xhX0RFUEVOREVOQ0lFUyA9ICQoT0ZJTEVTKQorCitUQVJHX0RJU1QgPSBhbHBoYSBhcm0gYXJtNjQgY3JheSBnZW5lcmljIGlhNjQgbGlzcCBtNjhrIG04OGsgXAorICBtaW5pdGhyZXMgbWlwczMyIG1pcHM2NCBwYTMyIHBhNjQgcG93ZXIgcG93ZXJwYzMyIHBvd2VycGM2NCBcCisgIHJpc2N2IHMzOTBfMzIgczM5MF82NCBzaCBzcGFyYzMyIHNwYXJjNjQgdGh1bWIgdmF4IHg4NiB4ODZfNjQKKworRVhUUkFfRElTVCA9IGFzbS1kZWZzLm00IGNwcC1jY2FzIG00LWNjYXMgJChUQVJHX0RJU1QpCisKKworIyBUaGVzZSBhcmUgQlVJTFRfU09VUkNFUyBhdCB0aGUgdG9wLWxldmVsLCBzbyBub3JtYWxseSB0aGV5J3JlIGJ1aWx0IGJlZm9yZQorIyByZWN1cnNpbmcgaW50byB0aGlzIGRpcmVjdG9yeS4KKyMKK2ZpYl90YWJsZS5jOgorCWNkIC4uOyAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBtcG4vZmliX3RhYmxlLmMKK21wX2Jhc2VzLmM6CisJY2QgLi47ICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIG1wbi9tcF9iYXNlcy5jCitwZXJmc3FyLmg6CisJY2QgLi47ICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIG1wbi9wZXJmc3FyLmgKKworaW5jbHVkZSBNYWtlYXNtLmFtCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL01ha2VmaWxlLmluIGIvdGhpcmRfcGFydHkvZ21wL21wbi9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTkzOTY5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDc3MiBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKKyMgQ29weXJpZ2h0IDE5OTYsIDE5OTgtMjAwMiwgMjAwNSwgMjAxMSwgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKyMKKyMgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorIworIyAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisjICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyMgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyAgb3IKKyMKKyMgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgICAgICBsYXRlciB2ZXJzaW9uLgorIworIyAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKyMKKyMgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgIGZvciBtb3JlIGRldGFpbHMuCisjCisjICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCisjICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCisjICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKyMgQ29weXJpZ2h0IDE5OTYsIDE5OTgtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKyMKKyMgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorIworIyAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisjICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyMgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyAgb3IKKyMKKyMgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgICAgICBsYXRlciB2ZXJzaW9uLgorIworIyAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKyMKKyMgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgIGZvciBtb3JlIGRldGFpbHMuCisjCisjICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCisjICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCisjICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK1ZQQVRIID0gQHNyY2RpckAKK2FtX19pc19nbnVfbWFrZSA9IHsgXAorICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKKyAgICBmYWxzZTsgXAorICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAorICAgIHRydWU7IFwKKyAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAorICAgIHRydWU7IFwKKyAgZWxzZSBcCisgICAgZmFsc2U7IFwKKyAgZmk7IFwKK30KK2FtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCisgIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKKyAgICAgID8pIDs7IFwKKyAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCisgICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCisgICAgICAgICBleGl0IDE7OyBcCisgIGVzYWM7IFwKKyAgaGFzX29wdD1ubzsgXAorICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAorICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAorICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCisgIGVsc2UgXAorICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAorICAgICAgKlxcW1wgXAldKikgXAorICAgICAgICBicz1cXDsgXAorICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKKyAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKKyAgICBlc2FjOyBcCisgIGZpOyBcCisgIHNraXBfbmV4dD1ubzsgXAorICBzdHJpcF90cmFpbG9wdCAoKSBcCisgIHsgXAorICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCisgIH07IFwKKyAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCisgICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKKyAgICBjYXNlICQkZmxnIGluIFwKKyAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAorICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKKyAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCisgICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAorICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKKyAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCisgICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAorICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKKyAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAorICAgIGVzYWM7IFwKKyAgICBjYXNlICQkZmxnIGluIFwKKyAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCisgICAgZXNhYzsgXAorICBkb25lOyBcCisgIHRlc3QgJCRoYXNfb3B0ID0geWVzCithbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQorYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK3N1YmRpciA9IG1wbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvYWNpbmNsdWRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKGFtX19ESVNUX0NPTU1PTikKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KK0xUTElCUkFSSUVTID0gJChub2luc3RfTFRMSUJSQVJJRVMpCithbV9fREVQRU5ERU5DSUVTXzEgPQorbm9kaXN0X2xpYm1wbl9sYV9PQkpFQ1RTID0gZmliX3RhYmxlLmxvIG1wX2Jhc2VzLmxvCitsaWJtcG5fbGFfT0JKRUNUUyA9ICQobm9kaXN0X2xpYm1wbl9sYV9PQkpFQ1RTKQorQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQorYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKK2FtX192X2x0XzAgPSAtLXNpbGVudAorYW1fX3ZfbHRfMSA9IAorQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKK2FtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfUF8wID0gZmFsc2UKK2FtX192X1BfMSA9IDoKK0FNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7CithbV9fdl9HRU5fMSA9IAorQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKK2FtX192X2F0XzAgPSBACithbV9fdl9hdF8xID0gCitERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQorZGVwY29tcCA9CithbV9fZGVwZmlsZXNfbWF5YmUgPQorQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCisJJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAorCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAorCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0FNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKK2FtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCithbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOworYW1fX3ZfQ0NfMSA9IAorQ0NMRCA9ICQoQ0MpCitMSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCisJJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACitBTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQorYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCithbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7CithbV9fdl9DQ0xEXzEgPSAKK1NPVVJDRVMgPSAkKG5vZGlzdF9saWJtcG5fbGFfU09VUkNFUykKK0RJU1RfU09VUkNFUyA9CithbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKKyAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCisgICAgbnxub3xOTykgZmFsc2U7OyBcCisgICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKKyAgZXNhYworYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKKyMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKKyMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcworIyAqbm90KiBwcmVzZXJ2ZWQuCithbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKKyAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAorICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKKycKKyMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKKyMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcworIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KK2FtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCisgIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCisgIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisgIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCithbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWFzbS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gUkVBRE1FCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUJJID0gQEFCSUAKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACitBUiA9IEBBUkAKK0FTID0gQEFTQAorQVNNRkxBR1MgPSBAQVNNRkxBR1NACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0NBTExJTkdfQ09OVkVOVElPTlNfT0JKUyA9IEBDQUxMSU5HX0NPTlZFTlRJT05TX09CSlNACitDQyA9IEBDQ0AKK0NDQVMgPSBAQ0NBU0AKK0NDX0ZPUl9CVUlMRCA9IEBDQ19GT1JfQlVJTERACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1BQX0ZPUl9CVUlMRCA9IEBDUFBfRk9SX0JVSUxEQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitERUZOX0xPTkdfTE9OR19MSU1CID0gQERFRk5fTE9OR19MT05HX0xJTUJACitERUZTID0gQERFRlNACitETExUT09MID0gQERMTFRPT0xACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0VYRUVYVF9GT1JfQlVJTEQgPSBARVhFRVhUX0ZPUl9CVUlMREAKK0ZHUkVQID0gQEZHUkVQQAorR01QX0xERkxBR1MgPSBAR01QX0xERkxBR1NACitHTVBfTElNQl9CSVRTID0gQEdNUF9MSU1CX0JJVFNACitHTVBfTkFJTF9CSVRTID0gQEdNUF9OQUlMX0JJVFNACitHUkVQID0gQEdSRVBACitIQVZFX0NMT0NLXzAxID0gQEhBVkVfQ0xPQ0tfMDFACitIQVZFX0NQVVRJTUVfMDEgPSBASEFWRV9DUFVUSU1FXzAxQAorSEFWRV9HRVRSVVNBR0VfMDEgPSBASEFWRV9HRVRSVVNBR0VfMDFACitIQVZFX0dFVFRJTUVPRkRBWV8wMSA9IEBIQVZFX0dFVFRJTUVPRkRBWV8wMUAKK0hBVkVfSE9TVF9DUFVfRkFNSUxZX3Bvd2VyID0gQEhBVkVfSE9TVF9DUFVfRkFNSUxZX3Bvd2VyQAorSEFWRV9IT1NUX0NQVV9GQU1JTFlfcG93ZXJwYyA9IEBIQVZFX0hPU1RfQ1BVX0ZBTUlMWV9wb3dlcnBjQAorSEFWRV9TSUdBQ1RJT05fMDEgPSBASEFWRV9TSUdBQ1RJT05fMDFACitIQVZFX1NJR0FMVFNUQUNLXzAxID0gQEhBVkVfU0lHQUxUU1RBQ0tfMDFACitIQVZFX1NJR1NUQUNLXzAxID0gQEhBVkVfU0lHU1RBQ0tfMDFACitIQVZFX1NUQUNLX1RfMDEgPSBASEFWRV9TVEFDS19UXzAxQAorSEFWRV9TWVNfUkVTT1VSQ0VfSF8wMSA9IEBIQVZFX1NZU19SRVNPVVJDRV9IXzAxQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xFWCA9IEBMRVhACitMRVhMSUIgPSBATEVYTElCQAorTEVYX09VVFBVVF9ST09UID0gQExFWF9PVVRQVVRfUk9PVEAKK0xJQkNVUlNFUyA9IEBMSUJDVVJTRVNACitMSUJHTVBYWF9MREZMQUdTID0gQExJQkdNUFhYX0xERkxBR1NACitMSUJHTVBfRExMID0gQExJQkdNUF9ETExACitMSUJHTVBfTERGTEFHUyA9IEBMSUJHTVBfTERGTEFHU0AKK0xJQk0gPSBATElCTUAKK0xJQk1fRk9SX0JVSUxEID0gQExJQk1fRk9SX0JVSUxEQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUkVBRExJTkUgPSBATElCUkVBRExJTkVACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAorTTQgPSBATTRACitNQUlOVCA9IEBNQUlOVEAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTUEVFRF9DWUNMRUNPVU5URVJfT0JKID0gQFNQRUVEX0NZQ0xFQ09VTlRFUl9PQkpACitTVFJJUCA9IEBTVFJJUEAKK1RBTF9PQkpFQ1QgPSBAVEFMX09CSkVDVEAKK1RVTkVfTElCUyA9IEBUVU5FX0xJQlNACitUVU5FX1NRUl9PQkogPSBAVFVORV9TUVJfT0JKQAorVV9GT1JfQlVJTEQgPSBAVV9GT1JfQlVJTERACitWRVJTSU9OID0gQFZFUlNJT05ACitXSVRIX1JFQURMSU5FXzAxID0gQFdJVEhfUkVBRExJTkVfMDFACitZQUNDID0gQFlBQ0NACitZRkxBR1MgPSBAWUZMQUdTQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQVIgPSBAYWNfY3RfQVJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAorZ21wX3NyY2xpbmtzID0gQGdtcF9zcmNsaW5rc0AKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACittcG5fb2JqZWN0cyA9IEBtcG5fb2JqZWN0c0AKK21wbl9vYmpzX2luX2xpYmdtcCA9IEBtcG5fb2Jqc19pbl9saWJnbXBACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitBTV9DUFBGTEFHUyA9IC1EX19HTVBfV0lUSElOX0dNUCAtSSQodG9wX3NyY2RpcikgXAorICAtRE9QRVJBVElPTl9gZWNobyAkKiB8IHNlZCAncy9fJCQvLydgCisKK09GSUxFUyA9IEBtcG5fb2JqZWN0c0AKK25vaW5zdF9MVExJQlJBUklFUyA9IGxpYm1wbi5sYQorbm9kaXN0X2xpYm1wbl9sYV9TT1VSQ0VTID0gZmliX3RhYmxlLmMgbXBfYmFzZXMuYworbGlibXBuX2xhX0xJQkFERCA9ICQoT0ZJTEVTKQorbGlibXBuX2xhX0RFUEVOREVOQ0lFUyA9ICQoT0ZJTEVTKQorVEFSR19ESVNUID0gYWxwaGEgYXJtIGFybTY0IGNyYXkgZ2VuZXJpYyBpYTY0IGxpc3AgbTY4ayBtODhrIFwKKyAgbWluaXRocmVzIG1pcHMzMiBtaXBzNjQgcGEzMiBwYTY0IHBvd2VyIHBvd2VycGMzMiBwb3dlcnBjNjQgXAorICByaXNjdiBzMzkwXzMyIHMzOTBfNjQgc2ggc3BhcmMzMiBzcGFyYzY0IHRodW1iIHZheCB4ODYgeDg2XzY0CisKK0VYVFJBX0RJU1QgPSBhc20tZGVmcy5tNCBjcHAtY2NhcyBtNC1jY2FzICQoVEFSR19ESVNUKQorCisjIENPTVBJTEUgbWludXMgQ0MuCisjCitDT01QSUxFX0ZMQUdTID0gJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpICQoQVNNRkxBR1MpCisKKworIyBGbGFncyB1c2VkIGZvciBwcmVwcm9jZXNzaW5nIChpbiBhbnNpMmtuciBydWxlcykuCisjCitQUkVQUk9DRVNTX0ZMQUdTID0gJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKQorCisKKyMgUmVjZW50IHZlcnNpb25zIG9mIGF1dG9tYWtlICgxLjUgYW5kIHVwIGZvciBpbnN0YW5jZSkgYXBwZW5kIGF1dG9tYWtlCisjIGdlbmVyYXRlZCBzdWZmaXhlcyB0byB0aGlzICQoU1VGRklYRVMpIGxpc3QuICBUaGlzIGlzIGVzc2VudGlhbCBmb3IgdXMsCisjIHNpbmNlIC5jIG11c3QgY29tZSBhZnRlciAucywgLlMgYW5kIC5hc20uICBJZiAuYyBpcyBiZWZvcmUgLnMsIGZvcgorIyBpbnN0YW5jZSwgdGhlbiBpbiB0aGUgbXBuIGRpcmVjdG9yeSAibWFrZSIgd2lsbCBzZWUgYWRkX24uYyBtZW50aW9uZWQgaW4KKyMgYW4gZXhwbGljaXQgcnVsZSAodGhlIGFuc2kya25yIHN0dWZmKSBhbmQgZGVjaWRlIGl0IG11c3QgaGF2ZSBhZGRfbi5jLAorIyBldmVuIGlmIGFkZF9uLmMgZG9lc24ndCBleGlzdCBidXQgYWRkX24ucyBkb2VzLiAgU2VlIEdOVSBtYWtlCisjIGRvY3VtZW50YXRpb24gIihtYWtlKUltcGxpY2l0IFJ1bGUgU2VhcmNoIiwgcGFydCA1Yy4KKyMKKyMgT24gSVJJWCA2IG5hdGl2ZSBtYWtlIHRoaXMgZG9lc24ndCB3b3JrIHByb3Blcmx5IHRob3VnaC4gIFNvbWVob3cgLmMKKyMgcmVtYWlucyBhaGVhZCBvZiAucywgcGVyaGFwcyBiZWNhdXNlIC5jLnMgaXMgYSBidWlsdGluIHJ1bGUuICAuYXNtIHdvcmtzCisjIGZpbmUgdGhvdWdoLCBhbmQgbXBuL21pcHMzIHVzZXMgdGhpcy4KKyMKK1NVRkZJWEVTID0gLnMgLlMgLmFzbQorCisjIGNhbiBiZSBvdmVycmlkZGVuIGR1cmluZyBkZXZlbG9wbWVudCwgZWcuICJtYWtlIFJNX1RNUD06IG11bF8xLmxvIgorUk1fVE1QID0gcm0gLWYKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLnMgLlMgLmFzbSAuYyAubG8gLm8gLm9iagorJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWFzbS5hbSAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSAtLWlnbm9yZS1kZXBzIG1wbi9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWdudSAtLWlnbm9yZS1kZXBzIG1wbi9NYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CiskKHNyY2RpcikvTWFrZWFzbS5hbSAkKGFtX19lbXB0eSk6CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKKworY2xlYW4tbm9pbnN0TFRMSUJSQVJJRVM6CisJLXRlc3QgLXogIiQobm9pbnN0X0xUTElCUkFSSUVTKSIgfHwgcm0gLWYgJChub2luc3RfTFRMSUJSQVJJRVMpCisJQGxpc3Q9JyQobm9pbnN0X0xUTElCUkFSSUVTKSc7IFwKKwlsb2NzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgXAorCSAgICAgIHNlZCAnc3xeW14vXSokJHwufDsgc3wvW14vXSokJHx8OyBzfCQkfC9zb19sb2NhdGlvbnN8JyB8IFwKKwkgICAgICBzb3J0IC11YDsgXAorCXRlc3QgLXogIiQkbG9jcyIgfHwgeyBcCisJICBlY2hvIHJtIC1mICQke2xvY3N9OyBcCisJICBybSAtZiAkJHtsb2NzfTsgXAorCX0KKworbGlibXBuLmxhOiAkKGxpYm1wbl9sYV9PQkpFQ1RTKSAkKGxpYm1wbl9sYV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGlibXBuX2xhX0RFUEVOREVOQ0lFUykgCisJJChBTV9WX0NDTEQpJChMSU5LKSAgJChsaWJtcG5fbGFfT0JKRUNUUykgJChsaWJtcG5fbGFfTElCQUREKSAkKExJQlMpCisKK21vc3RseWNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICouJChPQkpFWFQpCisKK2Rpc3RjbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLnRhYi5jCisKKy5jLm86CisJJChBTV9WX0NDKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKKworLmMub2JqOgorCSQoQU1fVl9DQykkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmMubG86CisJJChBTV9WX0NDKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCitJRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQorCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogdGFncy1hbQorVEFHUzogdGFncworCit0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCisJc2V0IHg7IFwKKwloZXJlPWBwd2RgOyBcCisJJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAorCXNoaWZ0OyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCisJICBlbHNlIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICQkdW5pcXVlOyBcCisJICBmaTsgXAorCWZpCitjdGFnczogY3RhZ3MtYW0KKworQ1RBR1M6IGN0YWdzCitjdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQorCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCitjc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCisKK2NzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKKwlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAorCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAorCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAorCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKKwllc2FjOyBcCisJZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKKwkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKKwkgIGVsc2UgXAorCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAorCSAgZmk7IFwKKwlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykKK2luc3RhbGxkaXJzOgoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICAgICAgaW5zdGFsbDsgXAorCWVsc2UgXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCisJZmkKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdExUTElCUkFSSUVTIFwKKwltb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06CisKKy5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCisJY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RMVExJQlJBUklFUyBjc2NvcGVsaXN0LWFtIGN0YWdzIFwKKwljdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKKwlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKKwlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKKwlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAorCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCisJaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIFwKKwlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCisJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgXAorCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKKwl0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQorCisuUFJFQ0lPVVM6IE1ha2VmaWxlCisKKworIyBUaGVzZSBhcmUgQlVJTFRfU09VUkNFUyBhdCB0aGUgdG9wLWxldmVsLCBzbyBub3JtYWxseSB0aGV5J3JlIGJ1aWx0IGJlZm9yZQorIyByZWN1cnNpbmcgaW50byB0aGlzIGRpcmVjdG9yeS4KKyMKK2ZpYl90YWJsZS5jOgorCWNkIC4uOyAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBtcG4vZmliX3RhYmxlLmMKK21wX2Jhc2VzLmM6CisJY2QgLi47ICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIG1wbi9tcF9iYXNlcy5jCitwZXJmc3FyLmg6CisJY2QgLi47ICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIG1wbi9wZXJmc3FyLmgKKworIyAucyBhc3NlbWJsZXIsIG5vIHByZXByb2Nlc3NpbmcuCisjCisucy5vOgorCSQoQ0NBUykgJChDT01QSUxFX0ZMQUdTKSBgdGVzdCAtZiAnJDwnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQ8Cisucy5vYmo6CisJJChDQ0FTKSAkKENPTVBJTEVfRkxBR1MpIGBpZiB0ZXN0IC1mICckPCc7IHRoZW4gJChDWUdQQVRIX1cpICckPCc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJDwnOyBmaWAKKy5zLmxvOgorCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgLS10YWc9Q0MgJChDQ0FTKSAkKENPTVBJTEVfRkxBR1MpIGB0ZXN0IC1mICckPCcgfHwgZWNobyAnJChzcmNkaXIpLydgJDwKKworIyAuUyBhc3NlbWJsZXIsIHByZXByb2Nlc3NlZCB3aXRoIGNwcC4KKyMKKyMgSXQncyBuZWNlc3NhcnkgdG8gcnVuICQoQ1BQKSBzZXBhcmF0ZWx5LCBzaW5jZSBpdCBzZWVtcyBub3QgYWxsIGNvbXBpbGVycworIyByZWNvZ25pc2UgLlMgZmlsZXMsIGluIHBhcnRpY3VsYXIgImNjIiBvbiBIUC1VWCAxMCBhbmQgMTEgZG9lc24ndCAoYW5kCisjIHdpbGwgc2lsZW50bHkgZG8gbm90aGluZyBpZiBnaXZlbiBhIC5TKS4KKyMKKyMgRm9yIC5sbyB3ZSBuZWVkIGEgaGVscGVyIHNjcmlwdCwgYXMgZGVzY3JpYmVkIGJlbG93IGZvciAuYXNtLmxvLgorIworLlMubzoKKwkkKENQUCkgJChQUkVQUk9DRVNTX0ZMQUdTKSBgdGVzdCAtZiAnJDwnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQ8IHwgZ3JlcCAtdiAnXiMnID50bXAtJCoucworCSQoQ0NBUykgJChDT01QSUxFX0ZMQUdTKSB0bXAtJCoucyAtbyAkQAorCSQoUk1fVE1QKSB0bXAtJCoucworLlMub2JqOgorCSQoQ1BQKSAkKFBSRVBST0NFU1NfRkxBR1MpIGBpZiB0ZXN0IC1mICckPCc7IHRoZW4gJChDWUdQQVRIX1cpICckPCc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJDwnOyBmaWAgfCBncmVwIC12ICdeIycgPnRtcC0kKi5zCisJJChDQ0FTKSAkKENPTVBJTEVfRkxBR1MpIHRtcC0kKi5zIC1vICRACisJJChSTV9UTVApIHRtcC0kKi5zCisuUy5sbzoKKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlIC0tdGFnPUNDICQodG9wX3NyY2RpcikvbXBuL2NwcC1jY2FzIC0tY3BwPSIkKENQUCkgJChQUkVQUk9DRVNTX0ZMQUdTKSIgJChDQ0FTKSAkKENPTVBJTEVfRkxBR1MpIGB0ZXN0IC1mICckPCcgfHwgZWNobyAnJChzcmNkaXIpLydgJDwKKworIyAuYXNtIGFzc2VtYmxlciwgcHJlcHJvY2Vzc2VkIHdpdGggbTQuCisjCisjIC5vIGFuZCAub2JqIGFyZSBub24tUElDIGFuZCBqdXN0IG5lZWQgbTQgZm9sbG93ZWQgYnkgYSBjb21waWxlLgorIworIyAubG8gaXMgYSBiaXQgdHJpY2t5LiAgTGlidG9vbCAoYXMgb2YgdmVyc2lvbiAxLjUpIGhhcyBmb28ubG8gYXMgYSBsaXR0bGUKKyMgdGV4dCBmaWxlLCBhbmQgLmxpYnMvZm9vLm8gYW5kIGZvby5vIGFzIHRoZSBQSUMgYW5kIG5vbi1QSUMgb2JqZWN0cywKKyMgcmVzcGVjdGl2ZWx5LiAgSXQnZCBiZSBhc2tpbmcgZm9yIGxvdHMgb2YgdHJvdWJsZSB0byB0cnkgdG8gY3JlYXRlIGZvby5sbworIyBvdXJzZWx2ZXMsIHNvIGluc3RlYWQgYXJyYW5nZSB0byBpbnZva2UgbGlidG9vbCBsaWtlIGEgLS1tb2RlPWNvbXBpbGUsIGJ1dAorIyB3aXRoIGEgc3BlY2lhbCBtNC1jY2FzIHNjcmlwdCB3aGljaCBmaXJzdCBtNCBwcmVwcm9jZXNzZXMsIHRoZW4gY29tcGlsZXMuCisjIC0tdGFnPUNDIGlzIG5lY2Vzc2FyeSBzaW5jZSBmb28uYXNtIGlzIG90aGVyd2lzZSB1bmtub3duIHRvIGxpYnRvb2wuCisjCisjIExpYnRvb2wgYWRkcyAtRFBJQyB3aGVuIGJ1aWxkaW5nIGEgc2hhcmVkIG9iamVjdCBhbmQgdGhlIC5hc20gZmlsZXMgbG9vaworIyBmb3IgdGhhdC4gIEJ1dCBpdCBzaG91bGQgYmUgbm90ZWQgdGhhdCB0aGUgb3RoZXIgUElDIGZsYWdzIGFyZSBvbiBvY2Nhc2lvbgorIyBpbXBvcnRhbnQgdG9vLCBpbiBwYXJ0aWN1bGFyIEZyZWVCU0QgMi4yLjggZ2FzIDEuOTIuMyByZXF1aXJlcyAtayBiZWZvcmUKKyMgaXQgYWNjZXB0cyBQSUMgY29uc3RydWN0cyBsaWtlIEBHT1QsIGFuZCBnY2MgYWRkcyB0aGF0IGZsYWcgb25seSB1bmRlcgorIyAtZlBJQy4gIChMYXRlciB2ZXJzaW9ucyBvZiBnYXMgYXJlIGhhcHB5IHRvIGFjY2VwdCBQSUMgc3R1ZmYgYW55IHRpbWUuKQorIworLmFzbS5vOgorCSQoTTQpIC1ET1BFUkFUSU9OXyQqIGB0ZXN0IC1mICckPCcgfHwgZWNobyAnJChzcmNkaXIpLydgJDwgPnRtcC0kKi5zCisJJChDQ0FTKSAkKENPTVBJTEVfRkxBR1MpIHRtcC0kKi5zIC1vICRACisJJChSTV9UTVApIHRtcC0kKi5zCisuYXNtLm9iajoKKwkkKE00KSAtRE9QRVJBVElPTl8kKiBgaWYgdGVzdCAtZiAnJDwnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJDwnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQ8JzsgZmlgID50bXAtJCoucworCSQoQ0NBUykgJChDT01QSUxFX0ZMQUdTKSB0bXAtJCoucyAtbyAkQAorCSQoUk1fVE1QKSB0bXAtJCoucworLmFzbS5sbzoKKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlIC0tdGFnPUNDICQodG9wX3NyY2RpcikvbXBuL200LWNjYXMgLS1tND0iJChNNCkiICQoQ0NBUykgJChDT01QSUxFX0ZMQUdTKSBgdGVzdCAtZiAnJDwnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQ8CisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vUkVBRE1FIGIvdGhpcmRfcGFydHkvZ21wL21wbi9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMwNDZiZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vUkVBRE1FCkBAIC0wLDAgKzEsNDQgQEAKK0NvcHlyaWdodCAxOTk2LCAxOTk5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworCisKK1RoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGFsbCBjb2RlIGZvciB0aGUgbXBuIGxheWVyIG9mIEdNUC4KKworTW9zdCBzdWJkaXJlY3RvcmllcyBjb250YWluIG1hY2hpbmUtZGVwZW5kZW50IGNvZGUsIHdyaXR0ZW4gaW4gYXNzZW1ibHkgb3IgQy4KK1RoZSBgZ2VuZXJpYycgc3ViZGlyZWN0b3J5IGNvbnRhaW5zIGRlZmF1bHQgY29kZSwgdXNlZCB3aGVuIHRoZXJlIGlzIG5vCittYWNoaW5lLWRlcGVuZGVudCByZXBsYWNlbWVudCBmb3IgYSBwYXJ0aWN1bGFyIG1hY2hpbmUuCisKK1RoZXJlIGlzIG9uZSBzdWJkaXJlY3RvcnkgZm9yIGVhY2ggSVNBIGZhbWlseS4gIE5vdGUgdGhhdCBlLmcuLCAzMi1iaXQgU1BBUkMKK2FuZCA2NC1iaXQgU1BBUkMgYXJlIHZlcnkgZGlmZmVyZW50IElTQSdzLCBhbmQgdGh1cyBjYW5ub3Qgc2hhcmUgYW55IGNvZGUuCisKK0EgcGFydGljdWxhciBjb21waWxlIHdpbGwgb25seSB1c2UgY29kZSBmcm9tIG9uZSBzdWJkaXJlY3RvcnksIGFuZCB0aGUKK2BnZW5lcmljJyBzdWJkaXJlY3RvcnkuICBUaGUgSVNBLXNwZWNpZmljIHN1YmRpcmVjdG9yaWVzIGNvbnRhaW4gaGllcmFjaGllcyBvZgorZGlyZWN0b3JpZXMgZm9yIHZhcmlvdXMgYXJjaGl0ZWN0dXJlIHZhcmlhbnRzIGFuZCBpbXBsZW1lbnRhdGlvbnM7IHRoZQordG9wLW1vc3QgbGV2ZWwgY29udGFpbnMgY29kZSB0aGF0IHJ1bnMgY29ycmVjdGx5IG9uIGFsbCB2YXJpYW50cy4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvUkVBRE1FIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDljMmYwNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvUkVBRE1FCkBAIC0wLDAgKzEsMjA4IEBACitDb3B5cmlnaHQgMTk5NiwgMTk5NywgMTk5OS0yMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworCisKKworVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgbXBuIGZ1bmN0aW9ucyBvcHRpbWl6ZWQgZm9yIERFQyBBbHBoYSBwcm9jZXNzb3JzLgorCitBTFBIQSBBU1NFTUJMWSBSVUxFUyBBTkQgUkVHVUxBVElPTlMKKworVGhlIGAucHJvbG9ndWUgTicgcHNldWRvIG9wIG1hcmtzIHRoZSBlbmQgb2YgaW5zdHJ1Y3Rpb24gdGhhdCBuZWVkcyBzcGVjaWFsCitoYW5kbGluZyBieSB1bndpbmRpbmcuICBJdCBhbHNvIHNheXMgd2hldGhlciAkMjcgaXMgcmVhbGx5IG5lZWRlZCBmb3IgY29tcHV0aW5nCit0aGUgZ3AuICBUaGUgYC5tYXNrIE0nIHBzZXVkbyBvcCBzYXlzIHdoaWNoIHJlZ2lzdGVycyBhcmUgc2F2ZWQgb24gdGhlIHN0YWNrLAorYW5kIGF0IHdoYXQgb2Zmc2V0IGluIHRoZSBmcmFtZS4KKworQ3JheSBUMyBjb2RlIGlzIHZlcnkgdmVyeSBkaWZmZXJlbnQuLi4KKworIiQ2IiAvICIkZjYiIGV0YyBpcyB0aGUgdXN1YWwgc3ludGF4IGZvciByZWdpc3RlcnMsIGJ1dCBvbiBVbmljb3MgaW5zdGVhZCAicjYiCisvICJmNiIgaXMgcmVxdWlyZWQuICBXZSB1c2UgdGhlICJyNiIgLyAiZjYiIGZvcm1zLCBhbmQgaGF2ZSBtNCBkZWZpbmVzIGV4cGFuZAordGhlbSB0byAiJDYiIG9yICIkZjYiIHdoZXJlIG5lY2Vzc2FyeS4KKworIjB4IiBpbnRyb2R1Y2VzIGEgaGV4IGNvbnN0YW50IGluIGdhcyBhbmQgREVDIGFzLCBidXQgb24gVW5pY29zICJeWCIgaXMKK3JlcXVpcmVkLiAgVGhlIFgoKSBtYWNybyBhY2NvbW1vZGF0ZXMgdGhpcyBkaWZmZXJlbmNlLgorCisiY3Z0dHFjIiBpcyByZXF1aXJlZCBieSBERUMgYXMsICJjdnR0cS9jIiBpcyByZXF1aXJlZCBieSBVbmljb3MsIGFuZCBnYXMgd2lsbAorYWNjZXB0IGVpdGhlci4gIFdlIHVzZSBjdnR0cWMgYW5kIGhhdmUgYW4gbTQgZGVmaW5lIGV4cGFuZCB0byBjdnR0cS9jIHdoZXJlCituZWNlc3NhcnkuCisKKyJub3QiIGFzIGFuIGFsaWFzIGZvciAib3Jub3QgcjMxLCAuLi4iIGlzIGF2YWlsYWJsZSBpbiBnYXMgYW5kIERFQyBhcywgYnV0IG5vdAordGhlIFVuaWNvcyBhc3NlbWJsZXIuICBUaGUgZnVsbCAib3Jub3QiIG11c3QgYmUgdXNlZC4KKworInVub3AiIGlzIG5vdCBhdmFpbGFibGUgaW4gVW5pY29zLiAgV2UgbWFrZSBhbiBtNCBkZWZpbmUgdG8gdGhlIHVzdWFsICJsZHFfdQorcjMxLDAocjMwKSIsIGFuZCBpbiBmYWN0IHVzZSB0aGF0IGRlZmluZSBvbiBhbGwgc3lzdGVtcyBzaW5jZSBpdCBjb21lcyBvdXQgdGhlCitzYW1lLgorCisiIWxpdGVyYWwhMTIzIiBldGMgZXhwbGljaXQgcmVsb2NhdGlvbnMgYXMgcGVyIFRydTY0IDQuMCBhcmUgYXBwYXJlbnRseSBub3QKK2F2YWlsYWJsZSBpbiBvbGRlciBhbHBoYSBhc3NlbWJsZXJzIChpbmNsdWRpbmcgZ2FzIHByaW9yIHRvIDIuMTIpLCBhY2NvcmRpbmcgdG8KK3RoZSBHQ0MgbWFudWFsLCBzbyB0aGUgYXNzZW1ibGVyIG1hY3JvIGZvcm1zIG11c3QgYmUgdXNlZCAoZWcuIGxkZ3ApLgorCisKKworUkVMRVZBTlQgT1BUSU1JWkFUSU9OIElTU1VFUworCitFVjQKKworMS4gVGhpcyBjaGlwIGhhcyB2ZXJ5IGxpbWl0ZWQgc3RvcmUgYmFuZHdpZHRoLiAgVGhlIG9uLWNoaXAgTDEgY2FjaGUgaXMgd3JpdGUtCisgICB0aHJvdWdoLCBhbmQgYSBjYWNoZSBsaW5lIGlzIHRyYW5zZmVycmVkIGZyb20gdGhlIHN0b3JlIGJ1ZmZlciB0byB0aGUgb2ZmLQorICAgY2hpcCBMMiBpbiBhcyBtdWNoIDE1IGN5Y2xlcyBvbiBtb3N0IHN5c3RlbXMuICBUaGlzIGRlbGF5IGh1cnRzIG1wbl9hZGRfbiwKKyAgIG1wbl9zdWJfbiwgbXBuX2xzaGlmdCwgYW5kIG1wbl9yc2hpZnQuCisKKzIuIFBhaXJpbmcgaXMgcG9zc2libGUgYmV0d2VlbiBtZW1vcnkgaW5zdHJ1Y3Rpb25zIGFuZCBpbnRlZ2VyIGFyaXRobWV0aWMKKyAgIGluc3RydWN0aW9ucy4KKworMy4gbXVscSBhbmQgdW11bGggYXJlIGRvY3VtZW50ZWQgdG8gaGF2ZSBhIGxhdGVuY3kgb2YgMjMgY3ljbGVzLCBidXQgMiBvZiB0aGVzZQorICAgY3ljbGVzIGFyZSBwaXBlbGluZWQuICBUaHVzLCBtdWx0aXBseSBpbnN0cnVjdGlvbnMgY2FuIGJlIGlzc3VlZCBhdCBhIHJhdGUKKyAgIG9mIG9uZSBlYWNoIDIxc3QgY3ljbGUuCisKK0VWNQorCisxLiBUaGUgbWVtb3J5IGJhbmR3aWR0aCBvZiB0aGlzIGNoaXAgaXMgZ29vZCwgYm90aCBmb3IgbG9hZHMgYW5kIHN0b3Jlcy4gIFRoZQorICAgTDEgY2FjaGUgY2FuIGhhbmRsZSB0d28gbG9hZHMgb3Igb25lIHN0b3JlIHBlciBjeWNsZSwgYnV0IHR3byBjeWNsZXMgYWZ0ZXIgYQorICAgc3RvcmUsIG5vIGxkIGNhbiBpc3N1ZS4KKworMi4gbXVscSBoYXMgYSBsYXRlbmN5IG9mIDEyIGN5Y2xlcyBhbmQgYW4gaXNzdWUgcmF0ZSBvZiAxIGVhY2ggOHRoIGN5Y2xlLgorICAgdW11bGggaGFzIGEgbGF0ZW5jeSBvZiAxNCBjeWNsZXMgYW5kIGFuIGlzc3VlIHJhdGUgb2YgMSBlYWNoIDEwdGggY3ljbGUuCisgICAoTm90ZSB0aGF0IHB1Ymxpc2hlZCBkb2N1bWVudGF0aW9uIGdldHMgdGhlc2UgbnVtYmVycyBzbGlnaHRseSB3cm9uZy4pCisKKzMuIG1wbl9hZGRfbi4gIFdpdGggNC1mb2xkIHVucm9sbGluZywgd2UgbmVlZCAzNyBpbnN0cnVjdGlvbnMsIHdoZXJlb2YgMTIKKyAgIGFyZSBtZW1vcnkgb3BlcmF0aW9ucy4gIFRoaXMgd2lsbCB0YWtlIGF0IGxlYXN0CisJY2VpbCgzNy8yKSBbZHVhbCBpc3N1ZV0gKyAxIFt0YWtlbiBicmFuY2hdID0gMTkgY3ljbGVzCisgICBXZSBoYXZlIDEyIG1lbW9yeSBjeWNsZXMsIHBsdXMgNCBhZnRlci1zdG9yZSBjb25mbGljdCBjeWNsZXMsIG9yIDE2IGRhdGEKKyAgIGNhY2hlIGN5Y2xlcywgd2hpY2ggc2hvdWxkIGJlIGNvbXBsZXRlbHkgaGlkZGVuIGluIHRoZSAxOSBpc3N1ZSBjeWNsZXMuCisgICBUaGUgY29tcHV0YXRpb24gaXMgaW5oZXJlbnRseSBzZXJpYWwsIHdpdGggdGhlc2UgZGVwZW5kZW5jaWVzOgorCisJICAgICAgIGxkcSAgbGRxCisJCSBcICAvXAorCSAgKG9yKSAgIGFkZHEgfAorCSAgIHxcICAgLyAgIFwgfAorCSAgIHwgYWRkcSAgY21wdWx0CisJICAgIFwgIHwgICAgIHwKKwkgICAgIGNtcHVsdCAgfAorCQkgXCAgLworCQkgIG9yCisKKyAgIEkuZS4sIDMgb3BlcmF0aW9ucyBhcmUgbmVlZGVkIGJldHdlZW4gY2FycnktaW4gYW5kIGNhcnJ5LW91dCwgbWFraW5nIDEyCisgICBjeWNsZXMgdGhlIGFic29sdXRlIG1pbmltdW0gZm9yIHRoZSA0IGxpbWJzLiAgV2UgY291bGQgcmVwbGFjZSB0aGUgYG9yJyB3aXRoCisgICBhIGNtb3ZlcS9jbW92bmUsIHdoaWNoIGNvdWxkIGlzc3VlIG9uZSBjeWNsZSBlYXJsaWVyIHRoYXQgdGhlIGBvcicsIGJ1dCB0aGF0CisgICBtaWdodCB3YXN0ZSBhIGN5Y2xlIG9uIEVWNC4gIFRoZSB0b3RhbCBkZXB0aCByZW1haW4gdW5hZmZlY3RlZCwgc2luY2UgY21vdgorICAgaGFzIGEgbGF0ZW5jeSBvZiAyIGN5Y2xlcy4KKworICAgICBhZGRxCisgICAgIC8gICBcCisgICBhZGRxICBjbXB1bHQKKyAgICAgfCAgICAgIFwKKyAgIGNtcHVsdCAtPiBjbW92bmUKKworICBNb250Z29tZXJ5IGhhcyBhIHNsaWdodGx5IGRpZmZlcmVudCB3YXkgb2YgY29tcHV0aW5nIGNhcnJ5IHRoYXQgcmVxdWlyZXMgb25lCisgIGxlc3MgaW5zdHJ1Y3Rpb24sIGJ1dCBoYXMgZGVwdGggNCAoaW5zdGVhZCBvZiB0aGUgY3VycmVudCAzKS4gIFNpbmNlIHRoZSBjb2RlCisgIGlzIGN1cnJlbnRseSBpbnN0cnVjdGlvbiBpc3N1ZSBib3VuZCwgTW9udGdvbWVyeSdzIGlkZWEgc2hvdWxkIHNhdmUgdXMgMS8yCisgIGN5Y2xlIHBlciBsaW1iLCBvciBicmluZyB1cyBkb3duIHRvIGEgdG90YWwgb2YgMTcgY3ljbGVzIG9yIDQuMjUgY3ljbGVzL2xpbWIuCisgIFVuZm9ydHVuYXRlbHksIHRoaXMgbWV0aG9kIHdpbGwgbm90IGJlIGdvb2QgZm9yIHRoZSBFVjYuCisKKzQuIGFkZG11bF8xIGFuZCBmcmllbmRzOiBXZSBwcmV2aW91c2x5IGhhZCBhIHNjaGVtZSBmb3Igc3BsaXR0aW5nIHRoZSBzaW5nbGUtCisgICBsaW1iIG9wZXJhbmQgaW4gMjEtYml0cyBjaHVua3MgYW5kIHRoZSBtdWx0aS1saW1iIG9wZXJhbmQgaW4gMzItYml0IGNodW5rcywKKyAgIGFuZCB0aGVuIHVzZSBGUCBvcGVyYXRpb25zIGZvciBldmVyeSAybmQgbXVsdGlwbHksIGFuZCBpbnRlZ2VyIG9wZXJhdGlvbnMKKyAgIGZvciBldmVyeSAybmQgbXVsdGlwbHkuCisKKyAgIEJ1dCBpdCBzZWVtcyBtdWNoIGJldHRlciB0byBzcGxpdCB0aGUgc2luZ2xlLWxpbWIgb3BlcmFuZCBpbiAxNi1iaXQgY2h1bmtzLAorICAgc2luY2Ugd2Ugc2F2ZSBtYW55IGludGVnZXIgc2hpZnRzIGFuZCBhZGRzIHRoYXQgd2F5LiAgU2VlIHBvd2VycGM2NC9SRUFETUUKKyAgIGZvciBzb21lIG1vcmUgZGV0YWlscy4KKworRVY2CisKK0hlcmUgd2UgaGF2ZSBhIHJlYWxseSBwYXJhbGxlbCBwaXBlbGluZSwgY2FwYWJsZSBvZiBpc3N1aW5nIHVwIHRvIDQgaW50ZWdlcgoraW5zdHJ1Y3Rpb25zIHBlciBjeWNsZS4gIEluIGFjdHVhbCBwcmFjdGljZSwgaXQgaXMgbmV2ZXIgcG9zc2libGUgdG8gc3VzdGFpbgorbW9yZSB0aGFuIDMuNSBpbnRlZ2VyIGluc25zL2N5Y2xlIGR1ZSB0byByZW5hbWUgcmVnaXN0ZXIgc2hvcnRhZ2UuICBPbmUgaW50ZWdlcgorbXVsdGlwbHkgaW5zdHJ1Y3Rpb24gY2FuIGlzc3VlIGVhY2ggY3ljbGUuICBUbyBnZXQgb3B0aW1hbCBzcGVlZCwgd2UgbmVlZCB0bworcHJldGVuZCB3ZSBhcmUgdmVjdG9yaXppbmcgdGhlIGNvZGUsIGkuZS4sIG1pbmltaXplIHRoZSBkZXB0aCBvZiByZWN1cnJlbmNlcy4KKworVGhlcmUgYXJlIHR3byBkZXBlbmRlbmNpZXMgdG8gd2F0Y2ggb3V0IGZvci4gIDEpIEFkZHJlc3MgYXJpdGhtZXRpYworZGVwZW5kZW5jaWVzLCBhbmQgMikgY2FycnkgcHJvcGFnYXRpb24gZGVwZW5kZW5jaWVzLgorCitXZSBjYW4gYXZvaWQgc2VyaWFsaXppbmcgZHVlIHRvIGFkZHJlc3MgYXJpdGhtZXRpYyBieSB1bnJvbGxpbmcgbG9vcHMsIHNvIHRoYXQKK2FkZHJlc3NlcyBkb24ndCBkZXBlbmQgaGVhdmlseSBvbiBhbiBpbmRleCB2YXJpYWJsZS4gIEF2b2lkaW5nIHNlcmlhbGl6aW5nCitiZWNhdXNlIG9mIGNhcnJ5IHByb3BhZ2F0aW9uIGlzIHRyaWNraWVyOyB0aGUgdWx0aW1hdGUgcGVyZm9ybWFuY2Ugb2YgdGhlIGNvZGUKK3dpbGwgYmUgZGV0ZXJtaW5lZCBvZiB0aGUgbnVtYmVyIG9mIGxhdGVuY3kgY3ljbGVzIGl0IHRha2VzIGZyb20gYWNjZXB0aW5nCitjYXJyeS1pbiB0byBhIHZlY3RvciBwb2ludCB1bnRpbCB3ZSBjYW4gZ2VuZXJhdGUgY2Fycnktb3V0LgorCitNb3N0IGludGVnZXIgaW5zdHJ1Y3Rpb25zIGNhbiBleGVjdXRlIGluIGVpdGhlciB0aGUgTDAsIFUwLCBMMSwgb3IgVTEKK3BpcGVsaW5lcy4gIFNoaWZ0cyBvbmx5IGV4ZWN1dGUgaW4gVTAgYW5kIFUxLCBhbmQgbXVsdGlwbHkgb25seSBpbiBVMS4KKworQ01PViBpbnN0cnVjdGlvbnMgc3BsaXQgaW50byB0d28gaW50ZXJuYWwgaW5zdHJ1Y3Rpb25zLCBDTU9WMSBhbmQgQ01PVjIuICBDTU9WCitzcGxpdCB0aGUgbWFwcGluZyBwcm9jZXNzIChzZWUgcGcgMi0yNiBpbiBjbXB3cmdkLnBkZiksIHN1Z2dlc3RpbmcgdGhlIENNT1YKK3Nob3VsZCBhbHdheXMgYmUgcGxhY2VkIGFzIHRoZSBsYXN0IGluc3RydWN0aW9uIG9mIGFuIGFsaWduZWQgNCBpbnN0cnVjdGlvbgorYmxvY2ssIG9yIHBlcmhhcHMgc2ltcGx5IGF2b2lkZWQuCisKK1BlcmhhcHMgdGhlIG1vc3QgaW1wb3J0YW50IGlzc3VlIGlzIHRoZSBsYXRlbmN5IGJldHdlZW4gdGhlIEwwL1UwIGFuZCBMMS9VMQorY2x1c3RlcnM7IGEgcmVzdWx0IG9idGFpbmVkIG9uIGVpdGhlciBjbHVzdGVyIGhhcyBhbiBleHRyYSBjeWNsZSBvZiBsYXRlbmN5IGZvcgorY29uc3VtZXJzIGluIHRoZSBvcHBvc2l0ZSBjbHVzdGVyLiAgQmVjYXVzZSBvZiB0aGUgZHluYW1pYyBuYXR1cmUgb2YgdGhlCitpbXBsZW1lbnRhdGlvbiwgaXQgaXMgaGFyZCB0byBwcmVkaWN0IHdoZXJlIGFuIGluc3RydWN0aW9uIHdpbGwgZXhlY3V0ZS4KKworCisKK1JFRkVSRU5DRVMKKworIkFscGhhIEFyY2hpdGVjdHVyZSBIYW5kYm9vayIsIHZlcnNpb24gNCwgQ29tcGFxLCBPY3RvYmVyIDE5OTgsIG9yZGVyIG51bWJlcgorRUMtUUQyS0MtVEUuCisKKyJBbHBoYSAyMTE2NCBNaWNyb3Byb2Nlc3NvciBIYXJkd2FyZSBSZWZlcmVuY2UgTWFudWFsIiwgQ29tcGFxLCBEZWNlbWJlciAxOTk4LAorb3JkZXIgbnVtYmVyIEVDLVFQOTlDLVRFLgorCisiQWxwaGEgMjEyNjQvRVY2NyBNaWNyb3Byb2Nlc3NvciBIYXJkd2FyZSBSZWZlcmVuY2UgTWFudWFsIiwgcmV2aXNpb24gMS40LAorQ29tcGFxLCBTZXB0ZW1iZXIgMjAwMCwgb3JkZXIgbnVtYmVyIERTLTAwMjhCLVRFLgorCisiQ29tcGlsZXIgV3JpdGVyJ3MgR3VpZGUgZm9yIHRoZSBBbHBoYSAyMTI2NCIsIENvbXBhcSwgSnVuZSAxOTk5LCBvcmRlciBudW1iZXIKK0VDLVJKNjZBLVRFLgorCitBbGwgb2YgdGhlIGFib3ZlIGFyZSBhdmFpbGFibGUgb25saW5lIGZyb20KKworICBodHRwOi8vZnRwLmRpZ2l0YWwuY29tL3B1Yi9EaWdpdGFsL2luZm8vc2VtaWNvbmR1Y3Rvci9saXRlcmF0dXJlL2RzYy1saWJyYXJ5Lmh0bWwKKyAgZnRwOi8vZnRwLmNvbXBhcS5jb20vcHViL3Byb2R1Y3RzL2FscGhhQ1BVZG9jcworCisiVHJ1NjQgVW5peCBBc3NlbWJseSBMYW5ndWFnZSBQcm9ncmFtbWVyJ3MgR3VpZGUiLCBDb21wYXEsIE1hcmNoIDE5OTYsIHBhcnQKK251bWJlciBBQS1QUzMxRC1URS4KKworIkRpZ2l0YWwgVU5JWCBDYWxsaW5nIFN0YW5kYXJkIGZvciBBbHBoYSBTeXN0ZW1zIiwgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycCwKK01hcmNoIDE5OTYsIHBhcnQgbnVtYmVyIEFBLVBZOEFDLVRFLgorCitUaGUgYWJvdmUgYXJlIGF2YWlsYWJsZSBvbmxpbmUsCisKKyAgaHR0cDovL2gzMDA5Ny53d3czLmhwLmNvbS9kb2NzL3B1Yl9wYWdlL1Y0MEZfRE9DUy5IVE0KKworKER1bm5vIHdoYXQgaDMwMDk3IG1lYW5zIGluIHRoaXMgVVJMLCBidXQgaWYgaXQgbW92ZXMgdHJ5IHNlYXJjaGluZyBmb3IgInRydTY0CitvbmxpbmUgZG9jdW1lbnRhdGlvbiIgZnJvbSB0aGUgbWFpbiB3d3cuaHAuY29tIHBhZ2UuKQorCisKKworLS0tLS0tLS0tLS0tLS0tLQorTG9jYWwgdmFyaWFibGVzOgorbW9kZTogdGV4dAorZmlsbC1jb2x1bW46IDc5CitFbmQ6CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL2FkZF9uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvYWRkX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNTcyYTUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL2FkZF9uLmFzbQpAQCAtMCwwICsxLDE2NCBAQAorZG5sICBBbHBoYSBtcG5fYWRkX24gLS0gQWRkIHR3byBsaW1iIHZlY3RvcnMgb2YgdGhlIHNhbWUgbGVuZ3RoID4gMCBhbmQKK2RubCAgc3RvcmUgc3VtIGluIGEgdGhpcmQgbGltYiB2ZWN0b3IuCisKK2RubCAgQ29weXJpZ2h0IDE5OTUsIDE5OTksIDIwMDAsIDIwMDUsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgIGN5Y2xlcy9saW1iCitDIEVWNDogICAgID8KK0MgRVY1OiAgICAgNC43NQorQyBFVjY6ICAgICAzCisKK2RubCAgSU5QVVQgUEFSQU1FVEVSUworZG5sICByZXNfcHRyCXIxNgorZG5sICBzMV9wdHIJcjE3CitkbmwgIHMyX3B0cglyMTgKK2RubCAgc2l6ZQlyMTkKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9hZGRfbmMpCisJYmlzCXIyMCxyMzEscjI1CisJYnIJTChjb20pCitFUElMT0dVRSgpCitQUk9MT0dVRShtcG5fYWRkX24pCisJYmlzCXIzMSxyMzEscjI1CQlDIGNsZWFyIGN5CitMKGNvbSk6CXN1YnEJcjE5LDQscjE5CQlDIGRlY3IgbG9vcCBjbnQKKwlibHQJcjE5LCRMZW5kMgkJQyBpZiBsZXNzIHRoYW4gNCBsaW1icywgZ290byAybmQgbG9vcAorQyBTdGFydCBzb2Z0d2FyZSBwaXBlbGluZSBmb3IgMXN0IGxvb3AKKwlsZHEJcjAsMChyMTgpCisJbGRxCXI0LDAocjE3KQorCWxkcQlyMSw4KHIxOCkKKwlsZHEJcjUsOChyMTcpCisJYWRkcQlyMTcsMzIscjE3CQlDIHVwZGF0ZSBzMV9wdHIKKwlhZGRxCXIwLHI0LHIyOAkJQyAxc3QgbWFpbiBhZGQKKwlsZHEJcjIsMTYocjE4KQorCWFkZHEJcjI1LHIyOCxyMjAJCUMgMXN0IGNhcnJ5IGFkZAorCWxkcQlyMywyNChyMTgpCisJY21wdWx0CXIyOCxyNCxyOAkJQyBjb21wdXRlIGN5IGZyb20gbGFzdCBhZGQKKwlsZHEJcjYsLTE2KHIxNykKKwljbXB1bHQJcjIwLHIyOCxyMjUJCUMgY29tcHV0ZSBjeSBmcm9tIGxhc3QgYWRkCisJbGRxCXI3LC04KHIxNykKKwliaXMJcjgscjI1LHIyNQkJQyBjb21iaW5lIGN5IGZyb20gdGhlIHR3byBhZGRzCisJc3VicQlyMTksNCxyMTkJCUMgZGVjciBsb29wIGNudAorCWFkZHEJcjEscjUscjI4CQlDIDJuZCBtYWluIGFkZAorCWFkZHEJcjE4LDMyLHIxOAkJQyB1cGRhdGUgczJfcHRyCisJYWRkcQlyMjgscjI1LHIyMQkJQyAybmQgY2FycnkgYWRkCisJY21wdWx0CXIyOCxyNSxyOAkJQyBjb21wdXRlIGN5IGZyb20gbGFzdCBhZGQKKwlibHQJcjE5LCRMZW5kMQkJQyBpZiBsZXNzIHRoYW4gNCBsaW1icyByZW1haW4sIGp1bXAKK0MgMXN0IGxvb3AgaGFuZGxlcyBncm91cHMgb2YgNCBsaW1icyBpbiBhIHNvZnR3YXJlIHBpcGVsaW5lCisJQUxJR04oMTYpCiskTG9vcDoJY21wdWx0CXIyMSxyMjgscjI1CQlDIGNvbXB1dGUgY3kgZnJvbSBsYXN0IGFkZAorCWxkcQlyMCwwKHIxOCkKKwliaXMJcjgscjI1LHIyNQkJQyBjb21iaW5lIGN5IGZyb20gdGhlIHR3byBhZGRzCisJbGRxCXIxLDgocjE4KQorCWFkZHEJcjIscjYscjI4CQlDIDNyZCBtYWluIGFkZAorCWxkcQlyNCwwKHIxNykKKwlhZGRxCXIyOCxyMjUscjIyCQlDIDNyZCBjYXJyeSBhZGQKKwlsZHEJcjUsOChyMTcpCisJY21wdWx0CXIyOCxyNixyOAkJQyBjb21wdXRlIGN5IGZyb20gbGFzdCBhZGQKKwljbXB1bHQJcjIyLHIyOCxyMjUJCUMgY29tcHV0ZSBjeSBmcm9tIGxhc3QgYWRkCisJc3RxCXIyMCwwKHIxNikKKwliaXMJcjgscjI1LHIyNQkJQyBjb21iaW5lIGN5IGZyb20gdGhlIHR3byBhZGRzCisJc3RxCXIyMSw4KHIxNikKKwlhZGRxCXIzLHI3LHIyOAkJQyA0dGggbWFpbiBhZGQKKwlhZGRxCXIyOCxyMjUscjIzCQlDIDR0aCBjYXJyeSBhZGQKKwljbXB1bHQJcjI4LHI3LHI4CQlDIGNvbXB1dGUgY3kgZnJvbSBsYXN0IGFkZAorCWNtcHVsdAlyMjMscjI4LHIyNQkJQyBjb21wdXRlIGN5IGZyb20gbGFzdCBhZGQKKwkJYWRkcQlyMTcsMzIscjE3CQlDIHVwZGF0ZSBzMV9wdHIKKwliaXMJcjgscjI1LHIyNQkJQyBjb21iaW5lIGN5IGZyb20gdGhlIHR3byBhZGRzCisJCWFkZHEJcjE2LDMyLHIxNgkJQyB1cGRhdGUgcmVzX3B0cgorCWFkZHEJcjAscjQscjI4CQlDIDFzdCBtYWluIGFkZAorCWxkcQlyMiwxNihyMTgpCisJYWRkcQlyMjUscjI4LHIyMAkJQyAxc3QgY2FycnkgYWRkCisJbGRxCXIzLDI0KHIxOCkKKwljbXB1bHQJcjI4LHI0LHI4CQlDIGNvbXB1dGUgY3kgZnJvbSBsYXN0IGFkZAorCWxkcQlyNiwtMTYocjE3KQorCWNtcHVsdAlyMjAscjI4LHIyNQkJQyBjb21wdXRlIGN5IGZyb20gbGFzdCBhZGQKKwlsZHEJcjcsLTgocjE3KQorCWJpcwlyOCxyMjUscjI1CQlDIGNvbWJpbmUgY3kgZnJvbSB0aGUgdHdvIGFkZHMKKwlzdWJxCXIxOSw0LHIxOQkJQyBkZWNyIGxvb3AgY250CisJc3RxCXIyMiwtMTYocjE2KQorCWFkZHEJcjEscjUscjI4CQlDIDJuZCBtYWluIGFkZAorCXN0cQlyMjMsLTgocjE2KQorCWFkZHEJcjI1LHIyOCxyMjEJCUMgMm5kIGNhcnJ5IGFkZAorCQlhZGRxCXIxOCwzMixyMTgJCUMgdXBkYXRlIHMyX3B0cgorCWNtcHVsdAlyMjgscjUscjgJCUMgY29tcHV0ZSBjeSBmcm9tIGxhc3QgYWRkCisJYmdlCXIxOSwkTG9vcAorQyBGaW5pc2ggc29mdHdhcmUgcGlwZWxpbmUgZm9yIDFzdCBsb29wCiskTGVuZDE6CWNtcHVsdAlyMjEscjI4LHIyNQkJQyBjb21wdXRlIGN5IGZyb20gbGFzdCBhZGQKKwliaXMJcjgscjI1LHIyNQkJQyBjb21iaW5lIGN5IGZyb20gdGhlIHR3byBhZGRzCisJYWRkcQlyMixyNixyMjgJCUMgM3JkIG1haW4gYWRkCisJYWRkcQlyMjgscjI1LHIyMgkJQyAzcmQgY2FycnkgYWRkCisJY21wdWx0CXIyOCxyNixyOAkJQyBjb21wdXRlIGN5IGZyb20gbGFzdCBhZGQKKwljbXB1bHQJcjIyLHIyOCxyMjUJCUMgY29tcHV0ZSBjeSBmcm9tIGxhc3QgYWRkCisJc3RxCXIyMCwwKHIxNikKKwliaXMJcjgscjI1LHIyNQkJQyBjb21iaW5lIGN5IGZyb20gdGhlIHR3byBhZGRzCisJc3RxCXIyMSw4KHIxNikKKwlhZGRxCXIzLHI3LHIyOAkJQyA0dGggbWFpbiBhZGQKKwlhZGRxCXIyOCxyMjUscjIzCQlDIDR0aCBjYXJyeSBhZGQKKwljbXB1bHQJcjI4LHI3LHI4CQlDIGNvbXB1dGUgY3kgZnJvbSBsYXN0IGFkZAorCWNtcHVsdAlyMjMscjI4LHIyNQkJQyBjb21wdXRlIGN5IGZyb20gbGFzdCBhZGQKKwliaXMJcjgscjI1LHIyNQkJQyBjb21iaW5lIGN5IGZyb20gdGhlIHR3byBhZGRzCisJYWRkcQlyMTYsMzIscjE2CQlDIHVwZGF0ZSByZXNfcHRyCisJc3RxCXIyMiwtMTYocjE2KQorCXN0cQlyMjMsLTgocjE2KQorJExlbmQyOglhZGRxCXIxOSw0LHIxOQkJQyByZXN0b3JlIGxvb3AgY250CisJYmVxCXIxOSwkTHJldAorQyBTdGFydCBzb2Z0d2FyZSBwaXBlbGluZSBmb3IgMm5kIGxvb3AKKwlsZHEJcjAsMChyMTgpCisJbGRxCXI0LDAocjE3KQorCXN1YnEJcjE5LDEscjE5CisJYmVxCXIxOSwkTGVuZDAKK0MgMm5kIGxvb3AgaGFuZGxlcyByZW1haW5pbmcgMS0zIGxpbWJzCisJQUxJR04oMTYpCiskTG9vcDA6CWFkZHEJcjAscjQscjI4CQlDIG1haW4gYWRkCisJbGRxCXIwLDgocjE4KQorCWNtcHVsdAlyMjgscjQscjgJCUMgY29tcHV0ZSBjeSBmcm9tIGxhc3QgYWRkCisJbGRxCXI0LDgocjE3KQorCWFkZHEJcjI4LHIyNSxyMjAJCUMgY2FycnkgYWRkCisJYWRkcQlyMTgsOCxyMTgKKwlhZGRxCXIxNyw4LHIxNworCXN0cQlyMjAsMChyMTYpCisJY21wdWx0CXIyMCxyMjgscjI1CQlDIGNvbXB1dGUgY3kgZnJvbSBsYXN0IGFkZAorCXN1YnEJcjE5LDEscjE5CQlDIGRlY3IgbG9vcCBjbnQKKwliaXMJcjgscjI1LHIyNQkJQyBjb21iaW5lIGN5IGZyb20gdGhlIHR3byBhZGRzCisJYWRkcQlyMTYsOCxyMTYKKwlibmUJcjE5LCRMb29wMAorJExlbmQwOglhZGRxCXIwLHI0LHIyOAkJQyBtYWluIGFkZAorCWFkZHEJcjI4LHIyNSxyMjAJCUMgY2FycnkgYWRkCisJY21wdWx0CXIyOCxyNCxyOAkJQyBjb21wdXRlIGN5IGZyb20gbGFzdCBhZGQKKwljbXB1bHQJcjIwLHIyOCxyMjUJCUMgY29tcHV0ZSBjeSBmcm9tIGxhc3QgYWRkCisJc3RxCXIyMCwwKHIxNikKKwliaXMJcjgscjI1LHIyNQkJQyBjb21iaW5lIGN5IGZyb20gdGhlIHR3byBhZGRzCisKKyRMcmV0OgliaXMJcjI1LHIzMSxyMAkJQyByZXR1cm4gY3kKKwlyZXQJcjMxLChyMjYpLDEKK0VQSUxPR1VFKCkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9hZGRtdWxfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL2FkZG11bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGU2ODM0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9hZGRtdWxfMS5hc20KQEAgLTAsMCArMSw5OSBAQAorZG5sIEFscGhhIG1wbl9hZGRtdWxfMSAtLSBNdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYSBsaW1iIGFuZCBhZGQgdGhlCitkbmwgcmVzdWx0IHRvIGEgc2Vjb25kIGxpbWIgdmVjdG9yLgorCitkbmwgIENvcHlyaWdodCAxOTkyLCAxOTk0LCAxOTk1LCAyMDAwLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICBjeWNsZXMvbGltYgorQyBFVjQ6ICAgICA0MgorQyBFVjU6ICAgICAxOAorQyBFVjY6ICAgICAgNworCitDICBJTlBVVCBQQVJBTUVURVJTCitDICBycAlyMTYKK0MgIHVwCXIxNworQyAgbglyMTgKK0MgIHZsCXIxOQorCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fYWRkbXVsXzEpCisJbGRxCXIyLDAocjE3KQlDIHIyID0gczFfbGltYgorCWFkZHEJcjE3LDgscjE3CUMgczFfcHRyKysKKwlzdWJxCXIxOCwxLHIxOAlDIHNpemUtLQorCW11bHEJcjIscjE5LHIzCUMgcjMgPSBwcm9kX2xvdworCWxkcQlyNSwwKHIxNikJQyByNSA9ICpyZXNfcHRyCisJdW11bGgJcjIscjE5LHIwCUMgcjAgPSBwcm9kX2hpZ2gKKwliZXEJcjE4LCRMZW5kMQlDIGp1bXAgaWYgc2l6ZSB3YXMgPT0gMQorCWxkcQlyMiwwKHIxNykJQyByMiA9IHMxX2xpbWIKKwlhZGRxCXIxNyw4LHIxNwlDIHMxX3B0cisrCisJc3VicQlyMTgsMSxyMTgJQyBzaXplLS0KKwlhZGRxCXI1LHIzLHIzCisJY21wdWx0CXIzLHI1LHI0CisJc3RxCXIzLDAocjE2KQorCWFkZHEJcjE2LDgscjE2CUMgcmVzX3B0cisrCisJYmVxCXIxOCwkTGVuZDIJQyBqdW1wIGlmIHNpemUgd2FzID09IDIKKworCUFMSUdOKDgpCiskTG9vcDoJbXVscQlyMixyMTkscjMJQyByMyA9IHByb2RfbG93CisJbGRxCXI1LDAocjE2KQlDIHI1ID0gKnJlc19wdHIKKwlhZGRxCXI0LHIwLHIwCUMgY3lfbGltYiA9IGN5X2xpbWIgKyAnY3knCisJc3VicQlyMTgsMSxyMTgJQyBzaXplLS0KKwl1bXVsaAlyMixyMTkscjQJQyByNCA9IGN5X2xpbWIKKwlsZHEJcjIsMChyMTcpCUMgcjIgPSBzMV9saW1iCisJYWRkcQlyMTcsOCxyMTcJQyBzMV9wdHIrKworCWFkZHEJcjMscjAscjMJQyByMyA9IGN5X2xpbWIgKyBwcm9kX2xvdworCWNtcHVsdAlyMyxyMCxyMAlDIHIwID0gY2FycnkgZnJvbSAoY3lfbGltYiArIHByb2RfbG93KQorCWFkZHEJcjUscjMscjMKKwljbXB1bHQJcjMscjUscjUKKwlzdHEJcjMsMChyMTYpCisJYWRkcQlyMTYsOCxyMTYJQyByZXNfcHRyKysKKwlhZGRxCXI1LHIwLHIwCUMgY29tYmluZSBjYXJyaWVzCisJYm5lCXIxOCwkTG9vcAorCiskTGVuZDI6CW11bHEJcjIscjE5LHIzCUMgcjMgPSBwcm9kX2xvdworCWxkcQlyNSwwKHIxNikJQyByNSA9ICpyZXNfcHRyCisJYWRkcQlyNCxyMCxyMAlDIGN5X2xpbWIgPSBjeV9saW1iICsgJ2N5JworCXVtdWxoCXIyLHIxOSxyNAlDIHI0ID0gY3lfbGltYgorCWFkZHEJcjMscjAscjMJQyByMyA9IGN5X2xpbWIgKyBwcm9kX2xvdworCWNtcHVsdAlyMyxyMCxyMAlDIHIwID0gY2FycnkgZnJvbSAoY3lfbGltYiArIHByb2RfbG93KQorCWFkZHEJcjUscjMscjMKKwljbXB1bHQJcjMscjUscjUKKwlzdHEJcjMsMChyMTYpCisJYWRkcQlyNSxyMCxyMAlDIGNvbWJpbmUgY2FycmllcworCWFkZHEJcjQscjAscjAJQyBjeV9saW1iID0gcHJvZF9oaWdoICsgY3kKKwlyZXQJcjMxLChyMjYpLDEKKyRMZW5kMToJYWRkcQlyNSxyMyxyMworCWNtcHVsdAlyMyxyNSxyNQorCXN0cQlyMywwKHIxNikKKwlhZGRxCXIwLHI1LHIwCisJcmV0CXIzMSwocjI2KSwxCitFUElMT0dVRShtcG5fYWRkbXVsXzEpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvYWxwaGEtZGVmcy5tNCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvYWxwaGEtZGVmcy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjM0YzkyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9hbHBoYS1kZWZzLm00CkBAIC0wLDAgKzEsMTA3IEBACitkaXZlcnQoLTEpCisKK2RubCAgbTQgbWFjcm9zIGZvciBBbHBoYSBhc3NlbWJsZXIuCisKK2RubCAgQ29weXJpZ2h0IDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCitkbmwgIFVzYWdlOiBBU1NFUlQoW3JlZ10gWyxjb2RlXSkKK2RubAorZG5sICBSZXF1aXJlIHRoYXQgdGhlIGdpdmVuIHJlZyBpcyBub24temVybyBhZnRlciBleGVjdXRpbmcgdGhlIHRlc3QgY29kZS4KK2RubCAgRm9yIGV4YW1wbGUsCitkbmwKK2RubCAgICAgICAgIEFTU0VSVChyOCwKK2RubCAgICAgICAgIGAgICAgICAgY21wdWx0IHIxNiwgcjE3LCByOCcpCitkbmwKK2RubCAgSWYgdGhlIHJlZ2lzdGVyIGFyZ3VtZW50IGlzIGVtcHR5IHRoZW4gbm90aGluZyBpcyB0ZXN0ZWQsIHRoZSBjb2RlIGlzCitkbmwgIGp1c3QgZXhlY3V0ZWQuICBUaGlzIGNhbiBiZSB1c2VkIGZvciBzZXR1cHMgcmVxdWlyZWQgYnkgbGF0ZXIgQVNTRVJUcy4KK2RubCAgSWYgdGhlIGNvZGUgYXJndW1lbnQgaXMgb21pdHRlZCB0aGVuIHRoZSByZWdpc3RlciBpcyBqdXN0IHRlc3RlZCwgd2l0aAorZG5sICBubyBzcGVjaWFsIHNldHVwIGNvZGUuCisKK2RlZmluZShBU1NFUlQsCittNF9hc3NlcnRfbnVtYXJnc19yYW5nZSgxLDIpCittNF9hc3NlcnRfZGVmaW5lZChgV0FOVF9BU1NFUlQnKQorYGlmZWxzZShXQU5UX0FTU0VSVCwxLAorYGlmZWxzZShgJDInLCwsYCQyJykKK2lmZWxzZShgJDEnLCwsCitgCWJuZQkkMSwgTChBU1NFUlRva2AnQVNTRVJUX2xhYmVsX2NvdW50ZXIpCisJLmxvbmcJMAlDIGhhbHQKK0woQVNTRVJUb2tgJ0FTU0VSVF9sYWJlbF9jb3VudGVyKToKK2RlZmluZShgQVNTRVJUX2xhYmVsX2NvdW50ZXInLGV2YWwoQVNTRVJUX2xhYmVsX2NvdW50ZXIrMSkpCisnKQorJyknKQorZGVmaW5lKGBBU1NFUlRfbGFiZWxfY291bnRlcicsMSkKKworCitkbmwgIFVzYWdlOiBiaWdlbmQoYGNvZGUnKQorZG5sCitkbmwgIEVtaXQgdGhlIGdpdmVuIGNvZGUgb25seSBmb3IgYSBiaWctZW5kaWFuIHN5c3RlbSwgbGlrZSBVbmljb3MuICBUaGlzCitkbmwgIGNhbiBiZSB1c2VkIGZvciBpbnN0YW5jZSBmb3IgZXh0cmEgc3R1ZmYgbmVlZGVkIGJ5IGV4dHdsLgorCitkZWZpbmUoYmlnZW5kLAorbTRfYXNzZXJ0X251bWFyZ3MoMSkKK2BpZmRlZihgSEFWRV9MSU1CX0JJR19FTkRJQU4nLGAkMScsCitgaWZkZWYoYEhBVkVfTElNQl9MSVRUTEVfRU5ESUFOJyxgJywKK2BtNF9lcnJvcihgQ2Fubm90IGFzc2VtYmxlLCB1bmtub3duIGxpbWIgZW5kaWFubmVzcycpJyknKScpCisKKworZG5sICBVc2FnZTogYnd4X2F2YWlsYWJsZV9wCitkbmwKK2RubCAgRXZhbHVhdGUgdG8gMSBpZiB0aGUgQldYIGJ5dGUgbWVtb3J5IGluc3RydWN0aW9ucyBhcmUgYXZhaWxhYmxlLCBvciB0bworZG5sICAwIGlmIG5vdC4KK2RubAorZG5sICBMaXN0aW5nIHRoZSBjaGlwcyB3aGljaCBkbyBoYXZlIEJXWCBtZWFucyBhbnl0aGluZyB3ZSBoYXZlbid0IGxvb2tlZCBhdAorZG5sICB3aWxsIHVzZSBzYWZlIG5vbi1CV1ggY29kZS4gIFRoZSBvbmx5IHRhcmdldHMgd2l0aG91dCBCV1ggY3VycmVudGx5IGFyZQorZG5sICBwbGFpbiBhbHBoYSAoaWUuIGV2NCkgYW5kIGFscGhhZXY1LgorCitkZWZpbmUoYnd4X2F2YWlsYWJsZV9wLAorbTRfYXNzZXJ0X251bWFyZ3MoLTEpCitgbTRfaWZkZWZfYW55b2ZfcCgKKwlgSEFWRV9IT1NUX0NQVV9hbHBoYWV2NTYnLAorCWBIQVZFX0hPU1RfQ1BVX2FscGhhcGNhNTYnLAorCWBIQVZFX0hPU1RfQ1BVX2FscGhhcGNhNTcnLAorCWBIQVZFX0hPU1RfQ1BVX2FscGhhZXY2JywKKwlgSEFWRV9IT1NUX0NQVV9hbHBoYWV2NjcnLAorCWBIQVZFX0hPU1RfQ1BVX2FscGhhZXY2OCcsCisJYEhBVkVfSE9TVF9DUFVfYWxwaGFldjY5JywKKwlgSEFWRV9IT1NUX0NQVV9hbHBoYWV2NycsCisJYEhBVkVfSE9TVF9DUFVfYWxwaGFldjc5JyknKQorCisKK2RubCAgVXNhZ2U6IHVub3AKK2RubAorZG5sICBUaGUgQ3JheSBVbmljb3MgYXNzZW1ibGVyIGxhY2tzIHVub3AsIHNvIGdpdmUgdGhlIGVxdWl2YWxlbnQgbGRxX3UKK2RubCAgZXhwbGljaXRseS4KKworZGVmaW5lKHVub3AsCittNF9hc3NlcnRfbnVtYXJncygtMSkKK2BsZHFfdQlyMzEsIDAocjMwKScpCisKKworZGl2ZXJ0CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL2FvcnNsc2gxX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9hb3JzbHNoMV9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTI1ZTY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9hb3JzbHNoMV9uLmFzbQpAQCAtMCwwICsxLDE2NCBAQAorZG5sICBBbHBoYSBtcG5fYWRkbHNoMV9uL21wbl9zdWJsc2gxX24gLS0gcnBbXSA9IHVwW10gKy0gKHZwW10gPDwgMSkuCisKK2RubCAgQ29weXJpZ2h0IDIwMDMsIDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgIGN5Y2xlcy9saW1iCitDIEVWNDogICAgID8KK0MgRVY1OiAgICAgNi4yNQorQyBFVjY6ICAgICA0LjUKKworZGVmaW5lKGBycCcsYHIxNicpCitkZWZpbmUoYHVwJyxgcjE3JykKK2RlZmluZShgdnAnLGByMTgnKQorZGVmaW5lKGBuJywgYHIxOScpCisKK2RlZmluZShgdTAnLCBgcjgnKQorZGVmaW5lKGB1MScsIGByMScpCitkZWZpbmUoYHYwJywgYHI0JykKK2RlZmluZShgdjEnLCBgcjUnKQorCitkZWZpbmUoYGN5MCcsIGByMCcpCitkZWZpbmUoYGN5MScsIGByMjAnKQorZGVmaW5lKGBjeScsIGByMjInKQorZGVmaW5lKGBycicsIGByMjQnKQorZGVmaW5lKGBwcycsIGByMjUnKQorZGVmaW5lKGBzbCcsIGByMjgnKQorCitpZmRlZihgT1BFUkFUSU9OX2FkZGxzaDFfbicsYAorICBkZWZpbmUoQUREU1VCLCAgICAgICBhZGRxKQorICBkZWZpbmUoQ0FSUlksICAgICAgIGBjbXB1bHQgJDEsJDIsJDMnKQorICBkZWZpbmUoZnVuYywgbXBuX2FkZGxzaDFfbikKKycpCitpZmRlZihgT1BFUkFUSU9OX3N1YmxzaDFfbicsYAorICBkZWZpbmUoQUREU1VCLCAgICAgICBzdWJxKQorICBkZWZpbmUoQ0FSUlksICAgICAgIGBjbXB1bHQgJDIsJDEsJDMnKQorICBkZWZpbmUoZnVuYywgbXBuX3N1YmxzaDFfbikKKycpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FkZGxzaDFfbiBtcG5fc3VibHNoMV9uKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUoZnVuYykKKwlhbmQJbiwgMiwgY3kwCisJYmxicwluLCBMKGJ4MSkKK0woYngwKToJbGRxCXYxLCAwKHZwKQorCWxkcQl1MSwgMCh1cCkKKwlub3AKKwlibmUJY3kwLCBMKGIxMCkKKworTChiMDApOglsZGEJdnAsIDQ4KHZwKQorCWxkYQl1cCwgLTE2KHVwKQorCWxkYQlycCwgLTgocnApCisJYnIJcjMxLCBMKGxvMCkKKworTChiMTApOglsZGEJdnAsIDMyKHZwKQorCWxkYQlycCwgOChycCkKKwlsZGEJY3kwLCAwKHIzMSkKKwlicglyMzEsIEwobG8yKQorCitMKGJ4MSk6CWxkcQl2MCwgMCh2cCkKKwlsZHEJdTAsIDAodXApCisJbGRhCWN5MSwgMChyMzEpCisJYmVxCWN5MCwgTChiMDEpCisKK0woYjExKToJbGRhCXZwLCA0MCh2cCkKKwlsZGEJdXAsIC0yNCh1cCkKKwlsZGEJcnAsIDE2KHJwKQorCWJyCXIzMSwgTChsbzMpCisKK0woYjAxKToJbGRhCW4sIC00KG4pCisJYmxlCW4sIEwoZW5kKQorCWxkYQl2cCwgMjQodnApCisJbGRhCXVwLCAtOCh1cCkKKworCUFMSUdOKDE2KQorTCh0b3ApOglhZGRxCXYwLCB2MCwgc2wJQyBsZWZ0IHNoaWZ0IHZsaW1iCisJbGRxCXYxLCAtMTYodnApCisJQUREU1VCCXUwLCBzbCwgcHMJQyB1bGltYiArICh2bGltYiA8PCAxKQorCWNtcGx0CXYwLCByMzEsIGN5MAlDIGNhcnJ5IG91dCAjMQorCWxkcQl1MSwgMTYodXApCisJQUREU1VCCXBzLCBjeTEsIHJyCUMgY29uc3VtZSBjYXJyeSBmcm9tIHByZXZpb3VzIG9wZXJhdGlvbgorCUNBUlJZKAlwcywgdTAsIGN5KQlDIGNhcnJ5IG91dCAjMgorCXN0cQlyciwgMChycCkKKwlhZGRxCWN5LCBjeTAsIGN5MAlDIGNvbWJpbmUgY2Fycnkgb3V0ICMxIGFuZCAjMgorCUNBUlJZKAlyciwgcHMsIGN5KQlDIGNhcnJ5IG91dCAjMworCWFkZHEJY3ksIGN5MCwgY3kwCUMgZmluYWwgY2Fycnkgb3V0CisJbGRhCXZwLCAzMih2cCkJQyBib29ra2VlcGluZworTChsbzApOglhZGRxCXYxLCB2MSwgc2wKKwlsZHEJdjAsIC00MCh2cCkKKwlBRERTVUIJdTEsIHNsLCBwcworCWNtcGx0CXYxLCByMzEsIGN5MQorCWxkcQl1MCwgMjQodXApCisJQUREU1VCCXBzLCBjeTAsIHJyCisJQ0FSUlkoCXBzLCB1MSwgY3kpCisJc3RxCXJyLCA4KHJwKQorCWFkZHEJY3ksIGN5MSwgY3kxCisJQ0FSUlkoCXJyLCBwcywgY3kpCisJYWRkcQljeSwgY3kxLCBjeTEKKwlsZGEJcnAsIDMyKHJwKQlDIGJvb2trZWVwaW5nCitMKGxvMyk6CWFkZHEJdjAsIHYwLCBzbAorCWxkcQl2MSwgLTMyKHZwKQorCUFERFNVQgl1MCwgc2wsIHBzCisJY21wbHQJdjAsIHIzMSwgY3kwCisJbGRxCXUxLCAzMih1cCkKKwlBRERTVUIJcHMsIGN5MSwgcnIKKwlDQVJSWSgJcHMsIHUwLCBjeSkKKwlzdHEJcnIsIC0xNihycCkKKwlhZGRxCWN5LCBjeTAsIGN5MAorCUNBUlJZKAlyciwgcHMsIGN5KQorCWFkZHEJY3ksIGN5MCwgY3kwCisJbGRhCXVwLCAzMih1cCkJQyBib29ra2VlcGluZworTChsbzIpOglhZGRxCXYxLCB2MSwgc2wKKwlsZHEJdjAsIC0yNCh2cCkKKwlBRERTVUIJdTEsIHNsLCBwcworCWNtcGx0CXYxLCByMzEsIGN5MQorCWxkcQl1MCwgOCh1cCkKKwlBRERTVUIJcHMsIGN5MCwgcnIKKwlDQVJSWSgJcHMsIHUxLCBjeSkKKwlzdHEJcnIsIC04KHJwKQorCWFkZHEJY3ksIGN5MSwgY3kxCisJQ0FSUlkoCXJyLCBwcywgY3kpCisJYWRkcQljeSwgY3kxLCBjeTEKKwlsZGEJbiwgLTQobikJQyBib29ra2VlcGluZworCWJndAluLCBMKHRvcCkKKworTChlbmQpOglhZGRxCXYwLCB2MCwgc2wKKwlBRERTVUIJdTAsIHNsLCBwcworCUFERFNVQglwcywgY3kxLCBycgorCWNtcGx0CXYwLCByMzEsIGN5MAorCUNBUlJZKAlwcywgdTAsIGN5KQorCXN0cQlyciwgMChycCkKKwlhZGRxCWN5LCBjeTAsIGN5MAorCUNBUlJZKAlyciwgcHMsIGN5KQorCWFkZHEJY3ksIGN5MCwgcjAKKwlyZXQJcjMxLChyMjYpLDEKK0VQSUxPR1VFKCkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9hb3JzbHNoMl9uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvYW9yc2xzaDJfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRlZTFkNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvYW9yc2xzaDJfbi5hc20KQEAgLTAsMCArMSwxNjcgQEAKK2RubCAgQWxwaGEgbXBuX2FkZGxzaDJfbi9tcG5fc3VibHNoMl9uIC0tIHJwW10gPSB1cFtdICstICh2cFtdIDw8IDIpLgorCitkbmwgIENvcHlyaWdodCAyMDAzLCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICBjeWNsZXMvbGltYgorQyBFVjQ6ICAgICA/CitDIEVWNTogICAgIDYKK0MgRVY2OiAgICAgMy43NQorCitDIFRPRE8KK0MgICogVHVuZSB0byByZWFjaCAzLjUgYy9sIG9uIGV2NiBhbmQgNS43NSBjL2wgb24gZXY1LgorCitkZWZpbmUoYHJwJyxgcjE2JykKK2RlZmluZShgdXAnLGByMTcnKQorZGVmaW5lKGB2cCcsYHIxOCcpCitkZWZpbmUoYG4nLCBgcjE5JykKKworZGVmaW5lKGB1MCcsIGByOCcpCitkZWZpbmUoYHUxJywgYHIxJykKK2RlZmluZShgdjAnLCBgcjQnKQorZGVmaW5lKGB2MScsIGByNScpCisKK2RlZmluZShgY3kwJywgYHIwJykKK2RlZmluZShgY3kxJywgYHIyMCcpCitkZWZpbmUoYGN5JywgYHIyMicpCitkZWZpbmUoYHJyJywgYHIyNCcpCitkZWZpbmUoYHBzJywgYHIyNScpCitkZWZpbmUoYHNsJywgYHIyOCcpCisKK2lmZGVmKGBPUEVSQVRJT05fYWRkbHNoMl9uJyxgCisgIGRlZmluZShBRERTVUIsICAgICAgIGFkZHEpCisgIGRlZmluZShDQVJSWSwgICAgICAgYGNtcHVsdCAkMSwkMiwkMycpCisgIGRlZmluZShmdW5jLCBtcG5fYWRkbHNoMl9uKQorJykKK2lmZGVmKGBPUEVSQVRJT05fc3VibHNoMl9uJyxgCisgIGRlZmluZShBRERTVUIsICAgICAgIHN1YnEpCisgIGRlZmluZShDQVJSWSwgICAgICAgYGNtcHVsdCAkMiwkMSwkMycpCisgIGRlZmluZShmdW5jLCBtcG5fc3VibHNoMl9uKQorJykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fYWRkbHNoMl9uIG1wbl9zdWJsc2gyX24pCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShmdW5jKQorCWFuZAluLCAyLCBjeTAKKwlibGJzCW4sIEwoYngxKQorTChieDApOglsZHEJdjEsIDAodnApCisJbGRxCXUxLCAwKHVwKQorCWJpcwlyMzEsIHIzMSwgcjIKKwlibmUJY3kwLCBMKGIxMCkKKworTChiMDApOglsZGEJdnAsIDQ4KHZwKQorCWxkYQl1cCwgLTE2KHVwKQorCWxkYQlycCwgLTgocnApCisJczRhZGRxCXYxLCByMzEsIHNsCisJYnIJcjMxLCBMKGxvMCkKKworTChiMTApOglsZGEJdnAsIDMyKHZwKQorCWxkYQlycCwgOChycCkKKwlsZGEJY3kwLCAwKHIzMSkKKwlicglyMzEsIEwobG8yKQorCitMKGJ4MSk6CWxkcQl2MCwgMCh2cCkKKwlsZHEJdTAsIDAodXApCisJbGRhCWN5MSwgMChyMzEpCisJYmlzCXIzMSwgcjMxLCByMworCW5vcAorCWJlcQljeTAsIEwoYjAxKQorCitMKGIxMSk6CWxkYQl2cCwgNDAodnApCisJbGRhCXVwLCAtMjQodXApCisJbGRhCXJwLCAxNihycCkKKwlicglyMzEsIEwobG8zKQorCitMKGIwMSk6CWxkYQluLCAtNChuKQorCWJsZQluLCBMKGVuZCkKKwlsZGEJdnAsIDI0KHZwKQorCWxkYQl1cCwgLTgodXApCisKKwlBTElHTigxNikKK0wodG9wKToJczRhZGRxCXYwLCByMywgc2wJQyBjb21iaW5lZCB2bGltYgorCWxkcQl2MSwgLTE2KHZwKQorCUFERFNVQgl1MCwgc2wsIHBzCUMgdWxpbWIgKyAodmxpbWIgPDwgMSkKKwlsZHEJdTEsIDE2KHVwKQorCXNybAl2MCwgNjIsIHIyCUMgaGlnaCB2IGJpdHMKKwlBRERTVUIJcHMsIGN5MSwgcnIJQyBjb25zdW1lIGNhcnJ5IGZyb20gcHJldmlvdXMgb3BlcmF0aW9uCisJQ0FSUlkoCXBzLCB1MCwgY3kwKQlDIGNhcnJ5IG91dCAjMgorCXN0cQlyciwgMChycCkKKwlDQVJSWSgJcnIsIHBzLCBjeSkJQyBjYXJyeSBvdXQgIzMKKwlsZGEJdnAsIDMyKHZwKQlDIGJvb2trZWVwaW5nCisJYWRkcQljeSwgY3kwLCBjeTAJQyBmaW5hbCBjYXJyeSBvdXQKKwlzNGFkZHEJdjEsIHIyLCBzbAorTChsbzApOglsZHEJdjAsIC00MCh2cCkKKwlBRERTVUIJdTEsIHNsLCBwcworCWxkcQl1MCwgMjQodXApCisJc3JsCXYxLCA2MiwgcjMKKwlBRERTVUIJcHMsIGN5MCwgcnIKKwlDQVJSWSgJcHMsIHUxLCBjeTEpCisJc3RxCXJyLCA4KHJwKQorCUNBUlJZKAlyciwgcHMsIGN5KQorCWxkYQlycCwgMzIocnApCUMgYm9va2tlZXBpbmcKKwlhZGRxCWN5LCBjeTEsIGN5MQorTChsbzMpOglzNGFkZHEJdjAsIHIzLCBzbAorCWxkcQl2MSwgLTMyKHZwKQorCUFERFNVQgl1MCwgc2wsIHBzCisJbGRxCXUxLCAzMih1cCkKKwlzcmwJdjAsIDYyLCByMgorCUFERFNVQglwcywgY3kxLCBycgorCUNBUlJZKAlwcywgdTAsIGN5MCkKKwlzdHEJcnIsIC0xNihycCkKKwlDQVJSWSgJcnIsIHBzLCBjeSkKKwlsZGEJdXAsIDMyKHVwKQlDIGJvb2trZWVwaW5nCisJYWRkcQljeSwgY3kwLCBjeTAKK0wobG8yKToJczRhZGRxCXYxLCByMiwgc2wKKwlsZHEJdjAsIC0yNCh2cCkKKwlBRERTVUIJdTEsIHNsLCBwcworCWxkcQl1MCwgOCh1cCkKKwlzcmwJdjEsIDYyLCByMworCUFERFNVQglwcywgY3kwLCBycgorCUNBUlJZKAlwcywgdTEsIGN5MSkKKwlzdHEJcnIsIC04KHJwKQorCUNBUlJZKAlyciwgcHMsIGN5KQorCWxkYQluLCAtNChuKQlDIGJvb2trZWVwaW5nCisJYWRkcQljeSwgY3kxLCBjeTEKKwliZ3QJbiwgTCh0b3ApCisKK0woZW5kKToJczRhZGRxCXYwLCByMywgc2wKKwlBRERTVUIJdTAsIHNsLCBwcworCXNybAl2MCwgNjIsIHIyCisJQUREU1VCCXBzLCBjeTEsIHJyCisJQ0FSUlkoCXBzLCB1MCwgY3kwKQorCXN0cQlyciwgMChycCkKKwlDQVJSWSgJcnIsIHBzLCBjeSkKKwlhZGRxCWN5LCBjeTAsIGN5MAorCWFkZHEJY3kwLCByMiwgcjAKKworCXJldAlyMzEsKHIyNiksMQorRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL2JkaXZfZGJtMWMuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9iZGl2X2RibTFjLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzI5NjZjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9iZGl2X2RibTFjLmFzbQpAQCAtMCwwICsxLDI4MiBAQAorZG5sICBBbHBoYSBtcG5fYmRpdl9kYm0xYy4KKworZG5sICBDb3B5cmlnaHQgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgY3ljbGVzL2xpbWIKK0MgRVY0OiAgICAgNDIKK0MgRVY1OiAgICAgMTgKK0MgRVY2OiAgICAgIDMKKworQyBUT0RPCitDICAqIFRyeSBsZXNzIHVucm9sbGluZywgMi13YXkgc2hvdWxkIGdpdmUgdGhlIHNhbWUgcGVyZm9ybWFuY2UuCitDICAqIE9wdGltaXplIGZlZWQtaW4gYW5kIHdpbmQtZG93biBjb2RlLCBmb3Igc3BlZWQsIGFuZCBwZXJoYXBzIGZ1cnRoZXIgZm9yCitDICAgIGNvZGUgc2l6ZS4KK0MgICogVGhpcyBydW5zIG9wdGltYWxseSBnaXZlbiB0aGUgYWxnb3JpdGhtLCByOCBpcyBvbiBhIDMgb3BlcmF0aW9uIHJlY3VycmVuY3kKK0MgICAgcGF0aC4gIFdlIGhhdmUgbm90IHRyaWVkIHZlcnkgaGFyZCB0byBmaW5kIGEgYmV0dGVyIGFsZ29yaXRobS4gIFBlcmhhcHMKK0MgICAgaXQgd291bGQgYmUgYSBnb29kIHRhc2sgZm9yIHRoZSBHTlUgc3VwZXJvcHRpbWl6ZXIuCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsIGByMTYnKQorZGVmaW5lKGB1cCcsIGByMTcnKQorZGVmaW5lKGBuJywgIGByMTgnKQorZGVmaW5lKGBiZCcsIGByMTknKQorZGVmaW5lKGBjeScsIGByMTknKQorCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fYmRpdl9kYm0xYykKKwltb3YJcjIwLCByOAorCisJbGRxCXIyNCwgMChyMTcpCisJYW5kCXIxOCwgMywgcjI4CisJbGRhCXIxOCwgLTQocjE4KQorCWJlcQlyMjgsIEwoYjApCisJY21wZXEJcjI4LCAxLCByMjEKKwlibmUJcjIxLCBMKGIxKQorCWNtcGVxCXIyOCwgMiwgcjIxCisJYm5lCXIyMSwgTChiMikKKworCitMKGIzKToJbGRxCXIyLCA4KHIxNykKKwlsZHEJcjMsIDE2KHIxNykKKwliZ3QJcjE4LCBMKGd0MykKKworCW11bHEJcjI0LCByMTksIHI1CUMgVTEKKwl1bXVsaAlyMjQsIHIxOSwgcjIxCUMgVTEKKwltdWxxCXIyLCByMTksIHI2CUMgVTEKKwl1bXVsaAlyMiwgcjE5LCByMjIJQyBVMQorCW11bHEJcjMsIHIxOSwgcjcJQyBVMQorCXVtdWxoCXIzLCByMTksIHIyMwlDIFUxCisJbGRhCXIxNiwgLTMyKHIxNikKKwlicglMKGNqMykKKworTChndDMpOglsZHEJcjAsIDI0KHIxNykKKwltdWxxCXIyNCwgcjE5LCByNQlDIFUxCisJdW11bGgJcjI0LCByMTksIHIyMQlDIFUxCisJbGRxCXIxLCAzMihyMTcpCisJbXVscQlyMiwgcjE5LCByNglDIFUxCisJdW11bGgJcjIsIHIxOSwgcjIyCUMgVTEKKwlsZHEJcjIsIDQwKHIxNykKKwltdWxxCXIzLCByMTksIHI3CUMgVTEKKwl1bXVsaAlyMywgcjE5LCByMjMJQyBVMQorCWxkcQlyMywgNDgocjE3KQorCWxkYQlyMTgsIC00KHIxOCkKKwlsZGEJcjE3LCA1NihyMTcpCisJbXVscQlyMCwgcjE5LCByNAlDIFUxCisJYmd0CXIxOCwgTChMMykKKworCWJyCUwoY2o3KQorCisKK0woYjIpOglsZHEJcjMsIDgocjE3KQorCWJndAlyMTgsIEwoZ3QyKQorCisJbXVscQlyMjQsIHIxOSwgcjYJQyBVMQorCXVtdWxoCXIyNCwgcjE5LCByMjIJQyBVMQorCW11bHEJcjMsIHIxOSwgcjcJQyBVMQorCXVtdWxoCXIzLCByMTksIHIyMwlDIFUxCisJbGRhCXIxNiwgLTQwKHIxNikKKwlicglMKGNqMikKKworTChndDIpOglsZHEJcjAsIDE2KHIxNykKKwlsZHEJcjEsIDI0KHIxNykKKwltdWxxCXIyNCwgcjE5LCByNglDIFUxCisJdW11bGgJcjI0LCByMTksIHIyMglDIFUxCisJbGRxCXIyLCAzMihyMTcpCisJbXVscQlyMywgcjE5LCByNwlDIFUxCisJdW11bGgJcjMsIHIxOSwgcjIzCUMgVTEKKwlsZHEJcjMsIDQwKHIxNykKKwlsZGEJcjE4LCAtNChyMTgpCisJbGRhCXIxNywgNDgocjE3KQorCW11bHEJcjAsIHIxOSwgcjQJQyBVMQorCXVtdWxoCXIwLCByMTksIHIyMAlDIFUxCisJbGRhCXIxNiwgLTgocjE2KQorCWJndAlyMTgsIEwoZ3Q2KQorCisJbXVscQlyMSwgcjE5LCByNQlDIFUxCisJYnIJTChjajYpCisKK0woZ3Q2KToJbGRxCXIwLCAwKHIxNykKKwltdWxxCXIxLCByMTksIHI1CUMgVTEKKwlicglMKEwyKQorCisKK0woYjEpOgliZ3QJcjE4LCBMKGd0MSkKKworCW11bHEJcjI0LCByMTksIHI3CUMgVTEKKwl1bXVsaAlyMjQsIHIxOSwgcjIzCUMgVTEKKwlsZGEJcjE2LCAtNDgocjE2KQorCWJyCUwoY2oxKQorCitMKGd0MSk6CWxkcQlyMCwgOChyMTcpCisJbGRxCXIxLCAxNihyMTcpCisJbGRxCXIyLCAyNChyMTcpCisJbXVscQlyMjQsIHIxOSwgcjcJQyBVMQorCXVtdWxoCXIyNCwgcjE5LCByMjMJQyBVMQorCWxkcQlyMywgMzIocjE3KQorCWxkYQlyMTgsIC00KHIxOCkKKwlsZGEJcjE3LCA0MChyMTcpCisJbXVscQlyMCwgcjE5LCByNAlDIFUxCisJdW11bGgJcjAsIHIxOSwgcjIwCUMgVTEKKwlsZGEJcjE2LCAtMTYocjE2KQorCWJndAlyMTgsIEwoZ3Q1KQorCisJbXVscQlyMSwgcjE5LCByNQlDIFUxCisJdW11bGgJcjEsIHIxOSwgcjIxCUMgVTEKKwltdWxxCXIyLCByMTksIHI2CUMgVTEKKwlicglMKGNqNSkKKworTChndDUpOglsZHEJcjAsIDAocjE3KQorCW11bHEJcjEsIHIxOSwgcjUJQyBVMQorCXVtdWxoCXIxLCByMTksIHIyMQlDIFUxCisJbGRxCXIxLCA4KHIxNykKKwltdWxxCXIyLCByMTksIHI2CUMgVTEKKwlicglMKEwxKQorCisKK0woYjApOglsZHEJcjEsIDgocjE3KQorCWxkcQlyMiwgMTYocjE3KQorCWxkcQlyMywgMjQocjE3KQorCWxkYQlyMTcsIDMyKHIxNykKKwlsZGEJcjE2LCAtMjQocjE2KQorCW11bHEJcjI0LCByMTksIHI0CUMgVTEKKwl1bXVsaAlyMjQsIHIxOSwgcjIwCUMgVTEKKwliZ3QJcjE4LCBMKGd0NCkKKworCW11bHEJcjEsIHIxOSwgcjUJQyBVMQorCXVtdWxoCXIxLCByMTksIHIyMQlDIFUxCisJbXVscQlyMiwgcjE5LCByNglDIFUxCisJdW11bGgJcjIsIHIxOSwgcjIyCUMgVTEKKwltdWxxCXIzLCByMTksIHI3CUMgVTEKKwlicglMKGNqNCkKKworTChndDQpOglsZHEJcjAsIDAocjE3KQorCW11bHEJcjEsIHIxOSwgcjUJQyBVMQorCXVtdWxoCXIxLCByMTksIHIyMQlDIFUxCisJbGRxCXIxLCA4KHIxNykKKwltdWxxCXIyLCByMTksIHI2CUMgVTEKKwl1bXVsaAlyMiwgcjE5LCByMjIJQyBVMQorCWxkcQlyMiwgMTYocjE3KQorCW11bHEJcjMsIHIxOSwgcjcJQyBVMQorCWJyCUwoTDApCisKK0MgKioqIE1BSU4gTE9PUCBTVEFSVCAqKioKKwlBTElHTigxNikKK0wodG9wKToJbXVscQlyMCwgcjE5LCByNAlDIFUxCisJc3VicQlyOCwgcjI4LCByOAorTChMMyk6CXVtdWxoCXIwLCByMTksIHIyMAlDIFUxCisJY21wdWx0CXI4LCByNSwgcjI4CisJbGRxCXIwLCAwKHIxNykKKwlzdWJxCXI4LCByNSwgcjgKKwlhZGRxCXIyMSwgcjI4LCByMjgKKwlzdHEJcjgsIDAocjE2KQorCisJbXVscQlyMSwgcjE5LCByNQlDIFUxCisJc3VicQlyOCwgcjI4LCByOAorTChMMik6CXVtdWxoCXIxLCByMTksIHIyMQlDIFUxCisJY21wdWx0CXI4LCByNiwgcjI4CisJbGRxCXIxLCA4KHIxNykKKwlzdWJxCXI4LCByNiwgcjgKKwlhZGRxCXIyMiwgcjI4LCByMjgKKwlzdHEJcjgsIDgocjE2KQorCisJbXVscQlyMiwgcjE5LCByNglDIFUxCisJc3VicQlyOCwgcjI4LCByOAorTChMMSk6CXVtdWxoCXIyLCByMTksIHIyMglDIFUxCisJY21wdWx0CXI4LCByNywgcjI4CisJbGRxCXIyLCAxNihyMTcpCisJc3VicQlyOCwgcjcsIHI4CisJYWRkcQlyMjMsIHIyOCwgcjI4CisJc3RxCXI4LCAxNihyMTYpCisKKwltdWxxCXIzLCByMTksIHI3CUMgVTEKKwlzdWJxCXI4LCByMjgsIHI4CitMKEwwKToJdW11bGgJcjMsIHIxOSwgcjIzCUMgVTEKKwljbXB1bHQJcjgsIHI0LCByMjgKKwlsZHEJcjMsIDI0KHIxNykKKwlzdWJxCXI4LCByNCwgcjgKKwlhZGRxCXIyMCwgcjI4LCByMjgKKwlzdHEJcjgsIDI0KHIxNikKKworCWxkYQlyMTgsIC00KHIxOCkKKwlsZGEJcjE3LCAzMihyMTcpCisJbGRhCXIxNiwgMzIocjE2KQorCWJndAlyMTgsIEwodG9wKQorQyAqKiogTUFJTiBMT09QIEVORCAqKioKKworCW11bHEJcjAsIHIxOSwgcjQJQyBVMQorCXN1YnEJcjgsIHIyOCwgcjgKK0woY2o3KToJdW11bGgJcjAsIHIxOSwgcjIwCUMgVTEKKwljbXB1bHQJcjgsIHI1LCByMjgKKwlzdWJxCXI4LCByNSwgcjgKKwlhZGRxCXIyMSwgcjI4LCByMjgKKwlzdHEJcjgsIDAocjE2KQorCW11bHEJcjEsIHIxOSwgcjUJQyBVMQorCXN1YnEJcjgsIHIyOCwgcjgKK0woY2o2KToJdW11bGgJcjEsIHIxOSwgcjIxCUMgVTEKKwljbXB1bHQJcjgsIHI2LCByMjgKKwlzdWJxCXI4LCByNiwgcjgKKwlhZGRxCXIyMiwgcjI4LCByMjgKKwlzdHEJcjgsIDgocjE2KQorCW11bHEJcjIsIHIxOSwgcjYJQyBVMQorCXN1YnEJcjgsIHIyOCwgcjgKK0woY2o1KToJdW11bGgJcjIsIHIxOSwgcjIyCUMgVTEKKwljbXB1bHQJcjgsIHI3LCByMjgKKwlzdWJxCXI4LCByNywgcjgKKwlhZGRxCXIyMywgcjI4LCByMjgKKwlzdHEJcjgsIDE2KHIxNikKKwltdWxxCXIzLCByMTksIHI3CUMgVTEKKwlzdWJxCXI4LCByMjgsIHI4CitMKGNqNCk6CXVtdWxoCXIzLCByMTksIHIyMwlDIFUxCisJY21wdWx0CXI4LCByNCwgcjI4CisJc3VicQlyOCwgcjQsIHI4CisJYWRkcQlyMjAsIHIyOCwgcjI4CisJc3RxCXI4LCAyNChyMTYpCisJc3VicQlyOCwgcjI4LCByOAorTChjajMpOgljbXB1bHQJcjgsIHI1LCByMjgKKwlzdWJxCXI4LCByNSwgcjgKKwlhZGRxCXIyMSwgcjI4LCByMjgKKwlzdHEJcjgsIDMyKHIxNikKKwlzdWJxCXI4LCByMjgsIHI4CitMKGNqMik6CWNtcHVsdAlyOCwgcjYsIHIyOAorCXN1YnEJcjgsIHI2LCByOAorCWFkZHEJcjIyLCByMjgsIHIyOAorCXN0cQlyOCwgNDAocjE2KQorCXN1YnEJcjgsIHIyOCwgcjgKK0woY2oxKToJY21wdWx0CXI4LCByNywgcjI4CisJc3VicQlyOCwgcjcsIHI4CisJYWRkcQlyMjMsIHIyOCwgcjI4CisJc3RxCXI4LCA0OChyMTYpCisJc3VicQlyOCwgcjI4LCByMAorCXJldAlyMzEsIChyMjYpLCAxCisKK0VQSUxPR1VFKCkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9jbnRsei5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL2NudGx6LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWFmMTliCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9jbnRsei5hc20KQEAgLTAsMCArMSw1NSBAQAorZG5sICBBbHBoYSBhdXhpbGlhcnkgZm9yIGxvbmdsb25nLmgncyBjb3VudF9sZWFkaW5nX3plcm9zCisKK2RubCAgQ29weXJpZ2h0IDE5OTcsIDIwMDAsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitBU01fU1RBUlQoKQorRVhURVJOKF9fY2x6X3RhYikKK1BST0xPR1VFKG1wbl9jb3VudF9sZWFkaW5nX3plcm9zLGdwKQorCWNtcGJnZQlyMzEsICByMTYsIHIxCisJTEVBKHIzLF9fY2x6X3RhYikKKwlzcmEJcjEsICAgMSwgICByMQorCXhvcglyMSwgICAxMjcsIHIxCisJc3JsCXIxNiwgIDEsICAgcjE2CisJYWRkcQlyMSwgICByMywgIHIxCisJbGRxX3UJcjAsICAgMChyMSkKKwlsZGEJcjIsICAgNjQKKwlleHRibAlyMCwgICByMSwgICByMAorCXM4c3VibAlyMCwgICA4LCAgICByMAorCXNybAlyMTYsICByMCwgICByMTYKKwlhZGRxCXIxNiwgIHIzLCAgIHIxNgorCWxkcV91CXIxLCAgIDAocjE2KQorCWV4dGJsCXIxLCAgIHIxNiwgIHIxCisJc3VicQlyMiwgICByMSwgICByMgorCXN1YnEJcjIsICAgcjAsICAgcjAKKwlyZXQJcjMxLCAgKHIyNiksMQorRVBJTE9HVUUobXBuX2NvdW50X2xlYWRpbmdfemVyb3MpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvY29tLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvY29tLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDg0YWI1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9jb20uYXNtCkBAIC0wLDAgKzEsMTc2IEBACitkbmwgIEFscGhhIG1wbl9jb20gLS0gbXBuIG9uZSdzIGNvbXBsZW1lbnQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDICAgICAgY3ljbGVzL2xpbWIKK0MgRVY0OiAgICA0Ljc1CitDIEVWNTogICAgMi4wCitDIEVWNjogICAgMS41CisKKworQyBtcF9saW1iX3QgbXBuX2NvbSAobXBfcHRyIGRzdCwgbXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUpOworQworQyBGb3IgZXY1IHRoZSBtYWluIGxvb3AgaXMgNyBjeWNsZXMgcGx1cyAxIHRha2VuIGJyYW5jaCBidWJibGUsIGZvciBhIHRvdGFsCitDIDIuMCBjL2wuICBJbiBnZW5lcmFsLCBhIHBhdHRlcm4gbGlrZSB0aGlzIHVucm9sbGVkIHRvIE4gbGltYnMgcGVyIGxvb3AKK0Mgd2lsbCBiZSAxLjUrMi9OIGMvbC4KK0MKK0MgMiBjeWNsZXMgb2YgbG9vcCBjb250cm9sIGFyZSB1bmF2b2lkYWJsZSwgZm9yIHBvaW50ZXIgdXBkYXRlcyBhbmQgdGhlCitDIHRha2VuIGJyYW5jaCBidWJibGUsIGJ1dCBhbHNvIHNpbmNlIGxkcSBjYW5ub3QgaXNzdWUgdHdvIGN5Y2xlcyBhZnRlciBzdHEKK0MgKGFuZCB3aXRoIGEgcnVuIG9mIHN0cXMgdGhhdCBtZWFucyBuZWl0aGVyIG9mIHR3byBjeWNsZXMgYXQgdGhlIGVuZCBvZiB0aGUKK0MgbG9vcC4KK0MKK0MgVGhlIGZiZXEgaXMgZm9yY2VkIGludG8gdGhlIHNlY29uZCBjeWNsZSBvZiB0aGUgbG9vcCB1c2luZyB1bm9wcywgc2luY2UKK0MgdGhlIGZpcnN0IHRpbWUgdGhyb3VnaCBpdCBtdXN0IHdhaXQgZm9yIHRoZSBjdnRxdCByZXN1bHQuICBPbmNlIHRoYXQKK0MgcmVzdWx0IGlzIHJlYWR5IChhIDEgY3ljbGUgc3RhbGwpIHRoZW4gYm90aCB0aGUgYnJhbmNoIGFuZCBmb2xsb3dpbmcgbG9hZHMKK0MgY2FuIGlzc3VlIHRvZ2V0aGVyLgorQworQyBUaGUgbWFpbiBsb29wIGhhbmRsZXMgYW4gb2RkIGNvdW50IG9mIGxpbWJzLCBiZWluZyB0d28gbGltYnMgbG9hZGVkIGJlZm9yZQorQyBlYWNoIHNpemUgdGVzdCwgcGx1cyBvbmUgcGlwZWxpbmVkIGFyb3VuZCBmcm9tIHRoZSBwcmV2aW91cyBpdGVyYXRpb24gKG9yCitDIHNldHVwIGluIHRoZSBlbnRyeSBzZXF1ZW5jZSkuCitDCitDIEFuIGV2ZW4gbnVtYmVyIG9mIGxpbWJzIGlzIGhhbmRsZWQgYnkgYW4gZXhwbGljaXQgZHN0WzBdPX5zcmNbMF0gaW4gdGhlCitDIGVudHJ5IHNlcXVlbmNlLCBhbmQgYW4gaW5jcmVtZW50IG9mIHRoZSBwb2ludGVycy4gIEZvciBhbiBvZGQgc2l6ZSB0aGVyZSdzCitDIG5vIGluY3JlbWVudCBhbmQgdGhlIGZpcnN0IHN0b3JlIGluIHRoZSBsb29wIChyMjQpIGlzIGEgcmVwZWF0IG9mIGRzdFswXS4KK0MKK0MgTm90ZSB0aGF0IHRoZSBsb2FkIGZvciByMjQgYWZ0ZXIgdGhlIHBvc3NpYmxlIHBvaW50ZXIgaW5jcmVtZW50IGlzIGRvbmUKK0MgYmVmb3JlIHRoZSBleHBsaWNpdCBzdG9yZSB0byBkc3RbMF0sIGluIGNhc2Ugc3JjPT1kc3QuCisKKworQVNNX1NUQVJUKCkKKworRkxPQVQ2NChMKGRhdCksIDIuMCkKKworCUFMSUdOKDE2KQorCitQUk9MT0dVRShtcG5fY29tLGdwKQorCisJQyByMTYJZHN0CisJQyByMTcJc3JjCisJQyByMTgJc2l6ZQorCisJbGRhCXIzMCwgLTE2KHIzMCkJCUMgdGVtcG9yYXJ5IHN0YWNrIHNwYWNlCisJbGRhCXI3LCAtMyhyMTgpCQlDIHNpemUgLSAzCisKKwlsZHEJcjIwLCAwKHIxNykJCUMgc3JjWzBdCisJc3JsCXI3LCAxLCByNgkJQyAoc2l6ZS0zKS8yCisKKwlzdHEJcjYsIDgocjMwKQkJQyAoc2l6ZS0zKS8yCisJYW5kCXI3LCAxLCByNQkJQyAxIGlmIHNpemUgZXZlbgorCisJTEVBKAlyOCwgTChkYXQpKQorCXM4YWRkcQlyNSwgcjE3LCByMTcJCUMgc2tpcCBzcmNbMF0gaWYgZXZlbgorCisJb3Jub3QJcjMxLCByMjAsIHIyMAkJQyB+c3JjWzBdCisJdW5vcAorCisJbGR0CWYwLCA4KHIzMCkJCUMgKHNpemUtMykvMgorCWxkcQlyMjQsIDAocjE3KQkJQyBzcmNbMCBvciAxXQorCisJc3RxCXIyMCwgMChyMTYpCQlDIGRzdFswXQorCXM4YWRkcQlyNSwgcjE2LCByMTkJCUMgc2tpcCBkc3RbMF0gaWYgZXZlbgorCisJbGR0CWYxLCAwKHI4KQkJQyBkYXRhIDIuMAorCWxkYQlyMzAsIDE2KHIzMCkJCUMgcmVzdG9yZSBzdGFjaworCXVub3AKKwljdnRxdAlmMCwgZjAJCQlDIChzaXplLTMpLzIgYXMgZmxvYXQKKworCW9ybm90CXIzMSwgcjI0LCByMjQKKwlibHQJcjcsIEwoZG9uZV8xKQkJQyBpZiBzaXplPD0yCisJdW5vcAorCXVub3AKKworCisJQyAxNi1ieXRlIGFsaWdubWVudCBoZXJlCitMKHRvcCk6CisJQyByMTcJc3JjLCBpbmNyZW1lbnRpbmcKKwlDIHIxOQlkc3QsIGluY3JlbWVudGluZworCUMgcjI0CWRzdFtpXSByZXN1bHQsIHJlYWR5IHRvIHN0b3JlCisJQyBmMAkoc2l6ZS0zKS8yLCBkZWNyZW1lbnRpbmcKKwlDIGYxCTIuMAorCisJbGRxCXIyMCwgOChyMTcpCQlDIHNyY1tpKzFdCisJbGRxCXIyMSwgMTYocjE3KQkJQyBzcmNbaSsyXQorCXVub3AKKwl1bm9wCisKKwlmYmVxCWYwLCBMKGRvbmVfMikKKwl1bm9wCisJbGRxCXIyMiwgMjQocjE3KQkJQyBzcmNbaSszXQorCWxkcQlyMjMsIDMyKHIxNykJCUMgc3JjW2krNF0KKworCXN0cQlyMjQsIDAocjE5KQkJQyBkc3RbaV0KKwlvcm5vdAlyMzEsIHIyMCwgcjIwCisJc3VidAlmMCwgZjEsIGYwCQlDIGNvdW50IC09IDIKKwl1bm9wCisKKwlzdHEJcjIwLCA4KHIxOSkJCUMgZHN0W2krMV0KKwlvcm5vdAlyMzEsIHIyMSwgcjIxCisJdW5vcAorCXVub3AKKworCXN0cQlyMjEsIDE2KHIxOSkJCUMgZHN0W2krMl0KKwlvcm5vdAlyMzEsIHIyMiwgcjIyCisKKwlzdHEJcjIyLCAyNChyMTkpCQlDIGRzdFtpKzNdCisJb3Jub3QJcjMxLCByMjMsIHIyNAorCisJbGRhCXIxNywgMzIocjE3KQkJQyBzcmMgKz0gNAorCWxkYQlyMTksIDMyKHIxOSkJCUMgZHN0ICs9IDQKKwl1bm9wCisJZmJnZQlmMCwgTCh0b3ApCisKKworTChkb25lXzEpOgorCUMgcjE5CSZkc3Rbc2l6ZS0xXQorCUMgcjI0CXJlc3VsdCBmb3IgZHN0W3NpemUtMV0KKworCXN0cQlyMjQsIDAocjE5KQkJQyBkc3Rbc2l6ZS0xXQorCXJldAlyMzEsIChyMjYpLCAxCisKKworTChkb25lXzIpOgorCUMgcjE5CSZkc3Rbc2l6ZS0zXQorCUMgcjIwCXNyY1tzaXplLTJdCisJQyByMjEJc3JjW3NpemUtMV0KKwlDIHIyNAlyZXN1bHQgZm9yIGRzdFtzaXplLTNdCisKKwlzdHEJcjI0LCAwKHIxOSkJCUMgZHN0W3NpemUtM10KKwlvcm5vdAlyMzEsIHIyMCwgcjIwCisKKwlzdHEJcjIwLCA4KHIxOSkJCUMgZHN0W3NpemUtMl0KKwlvcm5vdAlyMzEsIHIyMSwgcjIxCisKKwlzdHEJcjIxLCAxNihyMTkpCQlDIGRzdFtzaXplLTFdCisJcmV0CXIzMSwgKHIyNiksIDEKKworRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL2NvcHlkLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvY29weWQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MWI1MzYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL2NvcHlkLmFzbQpAQCAtMCwwICsxLDg4IEBACitkbmwgIEFscGhhIG1wbl9jb3B5ZCAtLSBjb3B5LCBkZWNyZW1lbnRpbmcuCisKK2RubCAgQ29weXJpZ2h0IDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgIGN5Y2xlcy9saW1iCitDIEVWNDogICAgIDQKK0MgRVY1OiAgICAgMS43NQorQyBFVjY6ICAgICAxCisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyBycAlyMTYKK0MgdXAJcjE3CitDIG4JcjE4CisKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9jb3B5ZCkKKwlzOGFkZHEJcjE4LHIxNixyMTYJCUMgRTAKKwlzOGFkZHEJcjE4LHIxNyxyMTcJCUMgRTEKKwlsZGEJcjE4LC04KHIxOCkJCUMgRTAKKwlibHQJcjE4LCRMZW5kCQlDIEUxCiskTG9vcDoJbGRxCXIwLC04KHIxNykJCUMgRTAKKwlsZHEJcjEsLTE2KHIxNykJCUMgRTEKKwlsZHEJcjIsLTI0KHIxNykJCUMgRTAKKwlsZHEJcjMsLTMyKHIxNykJCUMgRTEKKwlsZHEJcjQsLTQwKHIxNykJCUMgRTAKKwlsZHEJcjUsLTQ4KHIxNykJCUMgRTEKKwlsZHEJcjYsLTU2KHIxNykJCUMgRTAKKwlsZHEJcjcsLTY0KHIxNykJCUMgRTEKKwlzdHEJcjAsLTgocjE2KQkJQyBFMAorCWxkYQlyMTcsLTY0KHIxNykJCUMgRTEKKwlzdHEJcjEsLTE2KHIxNikJCUMgRTAKKwliaXMJcjMxLCByMzEsIHIzMQkJQyBFMQorCXN0cQlyMiwtMjQocjE2KQkJQyBFMAorCWxkYQlyMTgsLTgocjE4KQkJQyBFMQorCXN0cQlyMywtMzIocjE2KQkJQyBFMAorCWJpcwlyMzEsIHIzMSwgcjMxCQlDIEUxCisJc3RxCXI0LC00MChyMTYpCQlDIEUwCisJYmlzCXIzMSwgcjMxLCByMzEJCUMgRTEKKwlzdHEJcjUsLTQ4KHIxNikJCUMgRTAKKwliaXMJcjMxLCByMzEsIHIzMQkJQyBFMQorCXN0cQlyNiwtNTYocjE2KQkJQyBFMAorCWJpcwlyMzEsIHIzMSwgcjMxCQlDIEUxCisJc3RxCXI3LC02NChyMTYpCQlDIEUwCisJbGRhCXIxNiwtNjQocjE2KQkJQyBFMQorCWJnZQlyMTgsJExvb3AJCUMgRTEKKyRMZW5kOglsZGEJcjE4LDcocjE4KQkJQyBFMAorCWJsdAlyMTgsJExyZXQJCUMgRTEKKwlsZHEJcjAsLTgocjE3KQkJQyBFMAorCWJlcQlyMTgsJExlbmQwCQlDIEUxCiskTG9vcDA6CXN0cQlyMCwtOChyMTYpCQlDIEUwCisJbGRhCXIxNiwtOChyMTYpCQlDIEUxCisJbGRxCXIwLC0xNihyMTcpCQlDIEUwCisJbGRhCXIxOCwtMShyMTgpCQlDIEUxCisJbGRhCXIxNywtOChyMTcpCQlDIEUwCisJYmd0CXIxOCwkTG9vcDAJCUMgRTEKKyRMZW5kMDoJc3RxCXIwLC04KHIxNikJCUMgRTAKKyRMcmV0OglyZXQJcjMxLChyMjYpLDEJCUMgRTEKK0VQSUxPR1VFKG1wbl9jb3B5ZCkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9jb3B5aS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL2NvcHlpLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2UyYWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9jb3B5aS5hc20KQEAgLTAsMCArMSw4NiBAQAorZG5sICBBbHBoYSBtcG5fY29weWkgLS0gY29weSwgaW5jcmVtZW50aW5nLgorCitkbmwgIENvcHlyaWdodCAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICBjeWNsZXMvbGltYgorQyBFVjQ6ICAgICA0CitDIEVWNTogICAgIDEuNzUKK0MgRVY2OiAgICAgMQorCitDIElOUFVUIFBBUkFNRVRFUlMKK0MgcnAJcjE2CitDIHVwCXIxNworQyBuCXIxOAorCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fY29weWkpCisJbGRhCXIxOCwtOChyMTgpCQlDIEUwCisJYmx0CXIxOCwkTGVuZAkJQyBFMQorJExvb3A6CWxkcQlyMCwwKHIxNykJCUMgRTAKKwlsZHEJcjEsOChyMTcpCQlDIEUxCisJbGRxCXIyLDE2KHIxNykJCUMgRTAKKwlsZHEJcjMsMjQocjE3KQkJQyBFMQorCWxkcQlyNCwzMihyMTcpCQlDIEUwCisJbGRxCXI1LDQwKHIxNykJCUMgRTEKKwlsZHEJcjYsNDgocjE3KQkJQyBFMAorCWxkcQlyNyw1NihyMTcpCQlDIEUxCisJc3RxCXIwLDAocjE2KQkJQyBFMAorCWxkYQlyMTcsNjQocjE3KQkJQyBFMQorCXN0cQlyMSw4KHIxNikJCUMgRTAKKwliaXMJcjMxLCByMzEsIHIzMQkJQyBFMQorCXN0cQlyMiwxNihyMTYpCQlDIEUwCisJbGRhCXIxOCwtOChyMTgpCQlDIEUxCisJc3RxCXIzLDI0KHIxNikJCUMgRTAKKwliaXMJcjMxLCByMzEsIHIzMQkJQyBFMQorCXN0cQlyNCwzMihyMTYpCQlDIEUwCisJYmlzCXIzMSwgcjMxLCByMzEJCUMgRTEKKwlzdHEJcjUsNDAocjE2KQkJQyBFMAorCWJpcwlyMzEsIHIzMSwgcjMxCQlDIEUxCisJc3RxCXI2LDQ4KHIxNikJCUMgRTAKKwliaXMJcjMxLCByMzEsIHIzMQkJQyBFMQorCXN0cQlyNyw1NihyMTYpCQlDIEUwCisJbGRhCXIxNiw2NChyMTYpCQlDIEUxCisJYmdlCXIxOCwkTG9vcAkJQyBFMQorJExlbmQ6CWxkYQlyMTgsNyhyMTgpCQlDIEUwCisJYmx0CXIxOCwkTHJldAkJQyBFMQorCWxkcQlyMCwwKHIxNykJCUMgRTAKKwliZXEJcjE4LCRMZW5kMAkJQyBFMQorJExvb3AwOglzdHEJcjAsMChyMTYpCQlDIEUwCisJbGRhCXIxNiw4KHIxNikJCUMgRTEKKwlsZHEJcjAsOChyMTcpCQlDIEUwCisJbGRhCXIxOCwtMShyMTgpCQlDIEUxCisJbGRhCXIxNyw4KHIxNykJCUMgRTAKKwliZ3QJcjE4LCRMb29wMAkJQyBFMQorJExlbmQwOglzdHEJcjAsMChyMTYpCQlDIEUwCiskTHJldDoJcmV0CXIzMSwocjI2KSwxCQlDIEUxCitFUElMT0dVRShtcG5fY29weWkpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvZGVmYXVsdC5tNCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvZGVmYXVsdC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmU3YzRlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9kZWZhdWx0Lm00CkBAIC0wLDAgKzEsMTI3IEBACitkaXZlcnQoLTEpCisKK2RubCAgbTQgbWFjcm9zIGZvciBhbHBoYSBhc3NlbWJsZXIgKGV2ZXJ5d2hlcmUgZXhjZXB0IHVuaWNvcykuCisKKworZG5sICBDb3B5cmlnaHQgMjAwMCwgMjAwMi0yMDA0LCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworZG5sICBVc2FnZTogQVNNX1NUQVJUKCkKK2RlZmluZShgQVNNX1NUQVJUJywKK200X2Fzc2VydF9udW1hcmdzKDApCitgCS5zZXQgbm9yZW9yZGVyCisJLnNldCBub2F0JykKKworZG5sICBVc2FnZTogWCh2YWx1ZSkKK2RlZmluZShgWCcsCittNF9hc3NlcnRfbnVtYXJncygxKQorYDB4JDEnKQorCitkbmwgIFVzYWdlOiBGTE9BVDY0KGxhYmVsLHZhbHVlKQorZGVmaW5lKGBGTE9BVDY0JywKK200X2Fzc2VydF9udW1hcmdzKDIpCitgCS5hbGlnbgkzCiskMToJLnRfZmxvYXRpbmcgJDInKQorCisKK2RubCAgQ2FsbGVkOiBQUk9MT0dVRV9jcHUoR1NZTV9QUkVGSVhgJ2Zvb1ssZ3B8bm9hbGlnbl0pCitkbmwgICAgICAgICAgRVBJTE9HVUVfY3B1KEdTWU1fUFJFRklYYCdmb28pCisKK2RlZmluZShgUFJPTE9HVUVfY3B1JywKK200X2Fzc2VydF9udW1hcmdzX3JhbmdlKDEsMikKK2BpZmVsc2UoYCQyJyxncCwsCitgaWZlbHNlKGAkMicsbm9hbGlnbiwsCitgaWZlbHNlKGAkMicsLCxgbTRfZXJyb3IoYFVucmVjb2duaXNlZCBQUk9MT0dVRSBwYXJhbWV0ZXIKKycpJyknKScpZG5sCisJLnRleHQKK2lmZWxzZShgJDInLG5vYWxpZ24sLGAJQUxJR04oMTYpJykKKwkuZ2xvYmwJJDEKKwkuZW50CSQxCiskMToKKwkuZnJhbWUgcjMwLDAscjI2LDAKK2lmZWxzZShgJDInLGdwLGAJbGRncAlyMjksIDAocjI3KQorYCQnJDEuLm5nOicpCisJLnByb2xvZ3VlIGlmZWxzZShgJDInLGdwLDEsMCknKQorCitkZWZpbmUoYEVQSUxPR1VFX2NwdScsCittNF9hc3NlcnRfbnVtYXJncygxKQorYAkuZW5kCSQxJykKKworCitkbmwgIFVzYWdlOiBMREdQKGRzdCxzcmMpCitkbmwKK2RubCAgRW1pdCBhbiAibGRncCBkc3Qsc3JjIiwgYnV0IG9ubHkgaWYgdGhlIHN5c3RlbSB1c2VzIGEgR09ULgorCitkZWZpbmUoTERHUCwKK200X2Fzc2VydF9udW1hcmdzKDIpCitgbGRncAlgJDEnLCBgJDInJykKKworCitkbmwgIFVzYWdlOiBFWFRFUk4odmFyaWFibGVfbmFtZSkKK2RlZmluZShgRVhURVJOJywKK200X2Fzc2VydF9udW1hcmdzKDEpCispCisKK2RubCAgVXNhZ2U6IHIwIC4uLiByMzEKK2RubCAgICAgICAgIGYwIC4uLiBmMzEKK2RubAorZG5sICBNYXAgcmVnaXN0ZXIgbmFtZXMgcjAgdG8gJDAsIGFuZCBmMCB0byAkZjAsIGV0Yy4KK2RubCAgVGhpcyBpcyBuZWVkZWQgb24gYWxsIHN5c3RlbXMgYnV0IFVuaWNvcworZG5sCitkbmwgIGRlZnJlZygpIGlzIHVzZWQgdG8gcHJvdGVjdCB0aGUgJCBpbiAkMCAob3RoZXJ3aXNlIGl0IHdvdWxkIHJlcHJlc2VudCBhCitkbmwgIG1hY3JvIGFyZ3VtZW50KS4gIERvdWJsZSBxdW90aW5nIGlzIHVzZWQgdG8gcHJvdGVjdCB0aGUgZjAgaW4gJGYwCitkbmwgIChvdGhlcndpc2UgaXQgd291bGQgYmUgYW4gaW5maW5pdGUgcmVjdXJzaW9uKS4KKworZm9ybG9vcChpLDAsMzEsYGRlZnJlZyhgcidpLCRpKScpCitmb3Jsb29wKGksMCwzMSxgZGVmbGl0KGBmJ2ksYGAkZicnaSknKQorCisKK2RubCAgVXNhZ2U6IERBVEFTVEFSVChuYW1lLGFsaWduKSAgb3IgIERBVEFTVEFSVChuYW1lKQorZG5sICAgICAgICAgREFUQUVORCgpCisKK2RlZmluZShgREFUQVNUQVJUJywKK200X2Fzc2VydF9udW1hcmdzX3JhbmdlKDEsMikKK2AJUk9EQVRBCisJQUxJR04oaWZlbHNlKCQjLDEsMiwkMikpCiskMTonKQorZGVmaW5lKGBEQVRBRU5EJywKK200X2Fzc2VydF9udW1hcmdzKDApCispCisKK2RubCAgTG9hZCBhIHN5bWJvbGljIGFkZHJlc3MgaW50byBhIHJlZ2lzdGVyCitkZWZpbmUoYExFQScsCittNF9hc3NlcnRfbnVtYXJncygyKQorYGxkYQkkMSwgJDInKQorCitkbmwgIFVzYWdlOiBBU01fRU5EKCkKK2RlZmluZShgQVNNX0VORCcsCittNF9hc3NlcnRfbnVtYXJncygwKQorKQorCitkaXZlcnQKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvZGl2ZV8xLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL2RpdmVfMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0OWQ1ODEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL2RpdmVfMS5jCkBAIC0wLDAgKzEsMTE0IEBACisvKiBBbHBoYSBtcG5fZGl2ZXhhY3RfMSAtLSBtcG4gYnkgbGltYiBleGFjdCBkaXZpc2lvbi4KKworICAgVEhFIEZVTkNUSU9OUyBJTiBUSElTIEZJTEUgQVJFIEZPUiBJTlRFUk5BTCBVU0UgT05MWS4gIFRIRVknUkUgQUxNT1NUCisgICBDRVJUQUlOIFRPIEJFIFNVQkpFQ1QgVE8gSU5DT01QQVRJQkxFIENIQU5HRVMgT1IgRElTQVBQRUFSIENPTVBMRVRFTFkgSU4KKyAgIEZVVFVSRSBHTlUgTVAgUkVMRUFTRVMuCisKK0NvcHlyaWdodCAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorI2luY2x1ZGUgImxvbmdsb25nLmgiCisKKworLyogICAgICBjeWNsZXMvbGltYgorICAgRVY0OiAgICA0Ny4wCisgICBFVjU6ICAgIDMwLjAKKyAgIEVWNjogICAgMTUuMAorKi8KKworCisvKiBUaGUgZGVwZW5kZW50IGNoYWluIGlzIGFzIGZvbGxvd3MgKHRoZSBzYW1lIGFzIG1vZGV4YWN0KSwgYW5kIHRoaXMgaXMKKyAgIHdoYXQgdGhlIGNvZGUgcnVucyBhcy4KKworICAgICAgIGV2NCAgICBldjUgICBldjYKKyAgICAgICAgMSAgICAgIDEgICAgIDEgICAgc3ViICAgIHkgPSB4IC0gaAorICAgICAgIDIzICAgICAxMyAgICAgNyAgICBtdWxxICAgcSA9IHkgKiBpbnZlcnNlCisgICAgICAgMjMgICAgIDE1ICAgICA3ICAgIHVtdWxoICBoID0gaGlnaCAocSAqIGQpCisgICAgICAgLS0gICAgIC0tICAgIC0tCisgICAgICAgNDcgICAgIDMwICAgIDE1CisKKyAgIFRoZSB0aW1lIHRvIGxvYWQgc3JjW2krMV0gYW5kIGVzdGFibGlzaCB4IGhpZGVzIHVuZGVyIHRoZSB1bXVsaCBsYXRlbmN5LiAgKi8KKwordm9pZAorbXBuX2RpdmV4YWN0XzEgKG1wX3B0ciBkc3QsIG1wX3NyY3B0ciBzcmMsIG1wX3NpemVfdCBzaXplLCBtcF9saW1iX3QgZGl2aXNvcikKK3sKKyAgbXBfbGltYl90ICBpbnZlcnNlLCBsc2hpZnRfbWFzaywgcywgc3IsIHNfbmV4dCwgYywgaCwgeCwgeSwgcSwgZHVtbXk7CisgIHVuc2lnbmVkICAgcnNoaWZ0LCBsc2hpZnQ7CisKKyAgQVNTRVJUIChzaXplID49IDEpOworICBBU1NFUlQgKGRpdmlzb3IgIT0gMCk7CisgIEFTU0VSVCAoTVBOX1NBTUVfT1JfU0VQQVJBVEVfUCAoZHN0LCBzcmMsIHNpemUpKTsKKyAgQVNTRVJUX01QTiAoc3JjLCBzaXplKTsKKyAgQVNTRVJUX0xJTUIgKGRpdmlzb3IpOworCisgIHNfbmV4dCA9ICpzcmMrKzsgICAvKiBzcmNbMF0gKi8KKworICByc2hpZnQgPSAwOworICBsc2hpZnRfbWFzayA9IDA7CisgIGlmICgoZGl2aXNvciAmIDEpID09IDApCisgICAgeworICAgICAgY291bnRfdHJhaWxpbmdfemVyb3MgKHJzaGlmdCwgZGl2aXNvcik7CisgICAgICBsc2hpZnRfbWFzayA9IE1QX0xJTUJfVF9NQVg7CisgICAgICBkaXZpc29yID4+PSByc2hpZnQ7CisgICAgfQorCisgIGJpbnZlcnRfbGltYiAoaW52ZXJzZSwgZGl2aXNvcik7CisgIGxzaGlmdCA9IDY0IC0gcnNoaWZ0OworCisgIGMgPSAwOworICBoID0gMDsKKyAgc3IgPSBzX25leHQgPj4gcnNoaWZ0OworCisgIHNpemUtLTsKKyAgaWYgKExJS0VMWSAoc2l6ZSAhPSAwKSkKKyAgICB7CisgICAgICBkbworICAgICAgICB7CisgICAgICAgICAgc19uZXh0ID0gKnNyYysrOyAgICAgIC8qIHNyY1tpKzFdICovCisgICAgICAgICAgcyA9IHNyIHwgKChzX25leHQgPDwgbHNoaWZ0KSAmIGxzaGlmdF9tYXNrKTsKKyAgICAgICAgICB4ID0gcyAtIGM7CisgICAgICAgICAgYyA9IHMgPCBjOworICAgICAgICAgIHNyID0gc19uZXh0ID4+IHJzaGlmdDsKKworICAgICAgICAgIHkgPSB4IC0gaDsKKyAgICAgICAgICBjICs9ICh4IDwgaCk7CisgICAgICAgICAgcSA9IHkgKiBpbnZlcnNlOworICAgICAgICAgICpkc3QrKyA9IHE7CisgICAgICAgICAgdW11bF9wcG1tIChoLCBkdW1teSwgcSwgZGl2aXNvcik7CisKKyAgICAgICAgICBzaXplLS07CisgICAgICAgIH0KKyAgICAgIHdoaWxlIChzaXplICE9IDApOworICAgIH0KKworICB4ID0gc3IgLSBjOworICB5ID0geCAtIGg7CisgIHEgPSB5ICogaW52ZXJzZTsKKyAgKmRzdCA9IHE7ICAgICAgICAgLyogZHN0W3NpemUtMV0gKi8KK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvZGl2cmVtXzIuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9kaXZyZW1fMi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ2YjI0NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvZGl2cmVtXzIuYXNtCkBAIC0wLDAgKzEsMTc3IEBACitkbmwgIEFscGhhIG1wbl9kaXZyZW1fMiAtLSBEaXZpZGUgYW4gbXBuIG51bWJlciBieSBhIG5vcm1hbGl6ZWQgMi1saW1iIG51bWJlci4KKworZG5sICBDb3B5cmlnaHQgMjAwNywgMjAwOCwgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCQlub3JtCWZyYWMKK0MgZXY0CitDIGV2NQkJNzAJNzAKK0MgZXY2CQkyOQkyOQorCitDIFRPRE8KK0MgICogUGVyaGFwcyBpbmxpbmUgbXBuX2ludmVydF9saW1iLCB0aGF0IHdvdWxkIGFsbG93IHVzIHRvIG5vdCBzYXZlL3Jlc3RvcmUKK0MgICAgYW55IHJlZ2lzdGVycyAodGh1cyBzYXZlIH4xMCBjeWNsZXMgcGVyIGNhbGwpLgorQyAgKiBVc2UgbmVnYXRlZCBkMSBhbmQvb3IgZDAgdG8gc3BlZWQgY2FycnkgcHJvcGFnYXRpb24uICBNaWdodCBzYXZlIGEgY3ljbGUKK0MgICAgb3IgdHdvLgorQyAgKiBDaGVjayBjbHVzdGVyIGRlbGF5cyAoZm9yIGV2NikuICBXZSB2ZXJ5IGxpa2VseSBjb3VsZCBzYXZlIHNvbWUgY3ljbGVzLgorQyAgKiBVc2UgYnJhbmNoLWZyZWUgY29kZSBmb3IgY29tcHV0aW5nIGRpLgorQyAgKiBDQVZFQVQ6IFdlIHJlbHkgb24gcjE5IG5vdCBiZWluZyBjbG9iYmVyZWQgYnkgbXBuX2ludmVydF9saW1iIGNhbGwuCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBxcCcsCQlgcjE2JykKK2RlZmluZShgZm4nLAkJYHIxNycpCitkZWZpbmUoYHVwX3BhcmFtJywJYHIxOCcpCitkZWZpbmUoYHVuX3BhcmFtJywJYHIxOScpCitkZWZpbmUoYGRwJywJCWByMjAnKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2RpdnJlbV8yLGdwKQorCWxkYQlyMzAsIC04MChyMzApCisJc3RxCXIyNiwgMChyMzApCisJc3RxCXI5LCA4KHIzMCkKKwlzdHEJcjEwLCAxNihyMzApCisJc3RxCXIxMSwgMjQocjMwKQorCXN0cQlyMTIsIDMyKHIzMCkKKwlzdHEJcjEzLCA0MChyMzApCitDCXN0cQlyMTQsIDQ4KHIzMCkKKwlzdHEJcjE1LCA1NihyMzApCisJLnByb2xvZ3VlCTEKKwlzdHEJcjE2LCA2NChyMzApCisJYmlzCXIzMSwgcjE3LCByMTUKKwlzOGFkZHEJcjE5LCByMTgsIHIxMworCWxkYQlyMTMsIC0yNChyMTMpCisJbGRxCXIxMiwgOChyMjApCisJbGRxCXIxMCwgMChyMjApCisJbGRxCXIxMSwgMTYocjEzKQorCWxkcQlyOSwgOChyMTMpCisKKwliaXMJcjMxLCByMzEsIHIzCQlDIG1vc3Rfc2lnbmlmaWNhbnRfcV9saW1iID0gMAorCWNtcHVsdAlyMTEsIHIxMiwgcjEKKwlibmUJcjEsIEwoTDgpCisJY21wdWxlCXIxMSwgcjEyLCByMQorCWNtcHVsdAlyOSwgcjEwLCByMgorCWFuZAlyMSwgcjIsIHIxCisJYm5lCXIxLCBMKEw4KQorCXN1YnEJcjExLCByMTIsIHIxMQorCXN1YnEJcjExLCByMiwgcjExCisJc3VicQlyOSwgcjEwLCByOQorCWxkYQlyMywgMShyMzEpCQlDIG1vc3Rfc2lnbmlmaWNhbnRfcV9saW1iID0gMQorTChMOCk6CXN0cQlyMywgNzIocjMwKQorCisJYWRkcQlyMTUsIHIxOSwgcjE5CisJbGRhCXIxOSwgLTMocjE5KQorCWJsdAlyMTksIEwoTDEwKQorCWJpcwlyMzEsIHIxMiwgcjE2CisJanNyCXIyNiwgbXBuX2ludmVydF9saW1iCisJTERHUCgJcjI5LCAwKHIyNikpCisJbXVscQlyMCwgcjEyLCByNAkJQyB0MCA9IExPKGRpICogZDEpCisJdW11bGgJcjAsIHIxMCwgcjIJCUMgczEgPSBISShkaSAqIGQwKQorCWFkZHEJcjQsIHIxMCwgcjQJCUMgdDAgKz0gZDAKKwljbXB1bGUJcjEwLCByNCwgcjcJCUMgKHQwIDwgZDApCisJYWRkcQlyNCwgcjIsIHI0CQlDIHQwICs9IHMxCisJY21wdWx0CXI0LCByMiwgcjEKKwlzdWJxCXIxLCByNywgcjcJCUMgdDEgKC0xLCAwLCBvciAxKQorCWJsdAlyNywgTChMNDIpCitMKEwyMik6CisJbGRhCXIwLCAtMShyMCkJCUMgZGktLQorCWNtcHVsdAlyNCwgcjEyLCByMQkJQyBjeSBmb3I6IHQwIC09IGQxIChiZWxvdykKKwlzdWJxCXI3LCByMSwgcjcJCUMgdDEgLT0gY3kKKwlzdWJxCXI0LCByMTIsIHI0CQlDIHQwIC09IGQxCisJYmdlCXI3LCBMKEwyMikKK0woTDQyKToKKwlsZHEJcjE2LCA2NChyMzApCisJczhhZGRxCXIxOSwgcjE2LCByMTYKKwlBTElHTigxNikKK0wobG9vcCk6CisJbXVscQlyMTEsIHIwLCByNQkJQyBxMCAoZWFybHkpCisJdW11bGgJcjExLCByMCwgcjYJCUMgcSAgKGVhcmx5KQorCWFkZHEJcjUsIHI5LCByOAkJQyBxMCArPSBuMQorCWFkZHEJcjYsIHIxMSwgcjYJCUMgcSAgKz0gbjIKKwljbXB1bHQJcjgsIHI1LCByMQkJQyBjeSBmb3I6IHEwICs9IG4xCisJYWRkcQlyNiwgcjEsIHI2CQlDIHEgICs9IGN5CisJdW5vcAorCW11bHEJcjEyLCByNiwgcjEJCUMgTE8oZDEgKiBxKQorCXVtdWxoCXIxMCwgcjYsIHI3CQlDIHQxID0gSEkoZDAgKiBxKQorCXN1YnEJcjksIHIxLCByOQkJQyBuMSAtPSBMTyhkMSAqIHEpCisJbXVscQlyMTAsIHI2LCByNAkJQyB0MCA9IExPKGQwICogcSkKKwl1bm9wCisJY21wbGUJcjE1LCByMTksIHI1CQlDIGNvbmRpdGlvbiBhbmQgbjAuLi4KKwliZXEJcjUsIEwoTDMxKQorCWxkcQlyNSwgMChyMTMpCisJbGRhCXIxMywgLTgocjEzKQorTChMMzEpOglzdWJxCXI5LCByMTIsIHI5CQlDIG4xIC09IGQxCisJY21wdWx0CXI1LCByMTAsIHIxCQlDCisJc3VicQlyOSwgcjEsIHI5CQlDCisJc3VicQlyNSwgcjEwLCByNQkJQyBuMCAtPSBkMAorCXN1YnEJcjksIHI3LCByOQkJQyBuMSAtPSB0MAorCWNtcHVsdAlyNSwgcjQsIHIxCQlDCisJc3VicQlyOSwgcjEsIHIyCQlDCisJc3VicQlyNSwgcjQsIHI1CQlDIG4wIC09IHQxCisJY21wdWx0CXIyLCByOCwgcjEJCUMgKG4xIDwgcTApCisJYWRkcQlyNiwgcjEsIHI2CQlDIHEgKz0gY29uZAorCWxkYQlyMSwgLTEocjEpCQlDIC0objEgPj0gcTApCisJYW5kCXIxLCByMTAsIHI0CQlDCisJYWRkcQlyNSwgcjQsIHI5CQlDIG4wICs9IG1hc2sgJiBkMAorCWFuZAlyMSwgcjEyLCByMQkJQworCWNtcHVsdAlyOSwgcjUsIHIxMQkJQyBjeSBmb3I6IG4wICs9IG1hc2sgJiBkMAorCWFkZHEJcjIsIHIxLCByMQkJQyBuMSArPSBtYXNrICYgZDEKKwlhZGRxCXIxLCByMTEsIHIxMQkJQyBuMSArPSBjeQorCWNtcHVsdAlyMTEsIHIxMiwgcjEJCUMKKwliZXEJcjEsIEwoZml4KQkJQworTChiY2spOglzdHEJcjYsIDAocjE2KQorCWxkYQlyMTYsIC04KHIxNikKKwlsZGEJcjE5LCAtMShyMTkpCisJYmdlCXIxOSwgTChsb29wKQorCitMKEwxMCk6CXN0cQlyOSwgOChyMTMpCisJc3RxCXIxMSwgMTYocjEzKQorCWxkcQlyMCwgNzIocjMwKQorCWxkcQlyMjYsIDAocjMwKQorCWxkcQlyOSwgOChyMzApCisJbGRxCXIxMCwgMTYocjMwKQorCWxkcQlyMTEsIDI0KHIzMCkKKwlsZHEJcjEyLCAzMihyMzApCisJbGRxCXIxMywgNDAocjMwKQorQwlsZHEJcjE0LCA0OChyMzApCisJbGRxCXIxNSwgNTYocjMwKQorCWxkYQlyMzAsIDgwKHIzMCkKKwlyZXQJcjMxLCAocjI2KSwgMQorCitMKGZpeCk6CWNtcHVsZQlyMTEsIHIxMiwgcjEKKwljbXB1bHQJcjksIHIxMCwgcjIKKwlhbmQJcjEsIHIyLCByMQorCWJuZQlyMSwgTChiY2spCisJc3VicQlyMTEsIHIxMiwgcjExCisJc3VicQlyMTEsIHIyLCByMTEKKwlzdWJxCXI5LCByMTAsIHI5CisJbGRhCXI2LCAxKHI2KQorCWJyCUwoYmNrKQorRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL2V2NS9kaXZlYnkzLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvZXY1L2RpdmVieTMuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NTgxODgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL2V2NS9kaXZlYnkzLmFzbQpAQCAtMCwwICsxLDMzMiBAQAorZG5sICBBbHBoYSBtcG5fZGl2ZXhhY3RfYnkzYyAtLSBtcG4gZGl2aXNpb24gYnkgMywgZXhwZWN0aW5nIG5vIHJlbWFpbmRlci4KKworZG5sICBDb3B5cmlnaHQgMjAwNCwgMjAwNSwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgY3ljbGVzL2xpbWIKK0MgRVY0OiAgICAyMgorQyBFVjU6ICAgIDExLjUKK0MgRVY2OiAgICAgNi4zCQlOb3RlIHRoYXQgbXBuX2JkaXZfZGJtMWMgaXMgZmFzdGVyCisKK0MgVE9ETworQyAgKiBSZW1vdmUgdGhlIHVub3BzLCB0aGV5IGJlbmVmaXQganVzdCBldjYsIHdoaWNoIG5vIGxvbmdlciB1c2VzIHRoaXMgZmlsZS4KK0MgICogVHJ5IHByZWZldGNoIGZvciBkZXN0aW5hdGlvbiwgdXNpbmcgbGRzLgorQyAgKiBJbXByb3ZlIGZlZWQtaW4gY29kZSwgYnkgbW92aW5nIGluaXRpYWwgbXVscSBlYXJsaWVyOyBtYWtlIGluaXRpYWwgbG9hZAorQyAgICB0byB1MC91MCB0byBzYXZlIHNvbWUgY29weWluZy4KK0MgICogQ29tYmluZSB1MCBhbmQgdTIsIHUxIGFuZCB1My4KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywJYHIxNicpCitkZWZpbmUoYHVwJywJYHIxNycpCitkZWZpbmUoYG4nLAlgcjE4JykKK2RlZmluZShgY3knLAlgcjE5JykKKworQVNNX1NUQVJUKCkKKworREFUQVNUQVJUKEwoTEMpLDgpCisJLnF1YWQJMHhBQUFBQUFBQUFBQUFBQUFCCisJLnF1YWQJMHg1NTU1NTU1NTU1NTU1NTU1CisJLnF1YWQJMHhBQUFBQUFBQUFBQUFBQUFBCitEQVRBRU5EKCkKKworZGVmaW5lKGB4QUFBQUFBQUFBQUFBQUFBQicsCWByMjAnKQorZGVmaW5lKGB4NTU1NTU1NTU1NTU1NTU1NScsCWByMjEnKQorZGVmaW5lKGB4QUFBQUFBQUFBQUFBQUFBQScsCWByMjInKQorZGVmaW5lKGB1MCcsCWByMCcpCWRlZmluZShgdTEnLAlgcjEnKQorZGVmaW5lKGB1MicsCWByMicpCWRlZmluZShgdTMnLAlgcjMnKQorZGVmaW5lKGBsMCcsCWByMjUnKQlkZWZpbmUoYHgnLAlgcjgnKQorZGVmaW5lKGBxMCcsCWByNCcpCWRlZmluZShgcTEnLAlgcjUnKQorZGVmaW5lKGBwNicsCWByNicpCWRlZmluZShgcDcnLAlgcjcnKQorZGVmaW5lKGB0MCcsCWByMjMnKQlkZWZpbmUoYHQxJywJYHIyNCcpCitkZWZpbmUoYGN5bWFzaycsYHIyOCcpCisKKworUFJPTE9HVUUobXBuX2RpdmV4YWN0X2J5M2MsZ3ApCisKKwlsZHEJcjI4LCAwKHVwKQkJCUMgbG9hZCBmaXJzdCBsaW1iIGVhcmx5CisKK0MgUHV0IG1hZ2ljIGNvbnN0YW50cyBpbiByZWdpc3RlcnMKKwlsZGEJcjAsIEwoTEMpCisJbGRxCXhBQUFBQUFBQUFBQUFBQUFCLCAwKHIwKQorCWxkcQl4NTU1NTU1NTU1NTU1NTU1NSwgOChyMCkKKwlsZHEJeEFBQUFBQUFBQUFBQUFBQUEsIDE2KHIwKQorCitDIENvbXB1dGUgaW5pdGlhbCBsMCB2YWx1ZQorCWNtcGVxCWN5LCAxLCBwNgorCWNtcGVxCWN5LCAyLCBwNworCW5lZ3EJcDYsIHA2CisJYW5kCXA2LCB4NTU1NTU1NTU1NTU1NTU1NSwgbDAKKwljbW92bmUJcDcsIHhBQUFBQUFBQUFBQUFBQUFBLCBsMAorCitDIEZlZWQtaW4gZGVwZW5kaW5nIG9uIChuIG1vZCA0KQorCWFuZAluLCAzLCByOAorCWxkYQluLCAtMyhuKQorCWNtcGVxCXI4LCAxLCByNAorCWNtcGVxCXI4LCAyLCByNQorCWJuZQlyNCwgJExiMDEKKwlibmUJcjUsICRMYjEwCisJYmVxCXI4LCAkTGIwMAorCiskTGIxMToJbGRxCXUzLCA4KHVwKQorCWxkYQl1cCwgLTI0KHVwKQorCWxkYQlycCwgLTI0KHJwKQorCW11bHEJcjI4LCB4QUFBQUFBQUFBQUFBQUFBQiwgcTAKKwltb3YJcjI4LCB1MgorCWJyCXIzMSwgJEwxMQorCiskTGIwMDoJbGRxCXUyLCA4KHVwKQorCWxkYQl1cCwgLTE2KHVwKQorCWxkYQlycCwgLTE2KHJwKQorCW11bHEJcjI4LCB4QUFBQUFBQUFBQUFBQUFBQiwgcTEKKwltb3YJcjI4LCB1MQorCWJyCXIzMSwgJEwwMAorCiskTGIwMToJbGRhCXJwLCAtOChycCkKKwltdWxxCXIyOCwgeEFBQUFBQUFBQUFBQUFBQUIsIHEwCisJbW92CXIyOCwgdTAKKwlibHQJbiwgJExjajEKKwlsZHEJdTEsIDgodXApCisJbGRhCXVwLCAtOCh1cCkKKwlicglyMzEsICRMMDEKKworJExiMTA6CWxkcQl1MCwgOCh1cCkKKwltdWxxCXIyOCwgeEFBQUFBQUFBQUFBQUFBQUIsIHExCisJbW92CXIyOCwgdTMKKwlibHQJbiwgJExlbmQKKworCUFMSUdOKDE2KQorJEx0b3A6CitDIDAKKwljbXB1bHQJdTMsIGN5LCBjeQkJCUMgTDAKKwltdWxxCXUwLCB4QUFBQUFBQUFBQUFBQUFBQiwgcTAJQyBVMQorCWxkcQl1MSwgMTYodXApCQkJQyBMMQorCWFkZHEJcTEsIGwwLCB4CQkJQyBVMAorQyAxCisJbmVncQljeSwgY3ltYXNrCQkJQyBMMAorCXVub3AJCQkJCUMgVTEKKwl1bm9wCQkJCQlDIEwxCisJY21wdWx0CXg1NTU1NTU1NTU1NTU1NTU1LCB4LCBwNglDIFUwCitDIDIKKwljbXB1bHQJeEFBQUFBQUFBQUFBQUFBQUEsIHgsIHA3CUMgVTEKKwl1bm9wCisJdW5vcAorCW5lZ3EJcDYsIHQwCQkJCUMgTDAKK0MgMworCW5lZ3EJcDcsIHQxCQkJCUMgTDAKKwlhbmQJY3ltYXNrLCB4NTU1NTU1NTU1NTU1NTU1NSwgbDAJQyBVMQorCWFkZHEJcDYsIGN5LCBjeQorCWFuZAl0MCwgeDU1NTU1NTU1NTU1NTU1NTUsIHQwCitDIDQKKwlhbmQJdDEsIHg1NTU1NTU1NTU1NTU1NTU1LCB0MQorCWFkZHEJcDcsIGN5LCBjeQorCXVub3AKKwlhZGRxCXQwLCBsMCwgbDAKK0MgNQorCWFkZHEJdDEsIGwwLCBsMAorCXVub3AKKwlzdHEJeCwgMChycCkJCQlDIEwxCisJdW5vcAorJEwwMToKK0MgMAorCWNtcHVsdAl1MCwgY3ksIGN5CQkJQyBMMAorCW11bHEJdTEsIHhBQUFBQUFBQUFBQUFBQUFCLCBxMQlDIFUxCisJbGRxCXUyLCAyNCh1cCkJCQlDIEwxCisJYWRkcQlxMCwgbDAsIHgJCQlDIFUwCitDIDEKKwluZWdxCWN5LCBjeW1hc2sJCQlDIEwwCisJdW5vcAkJCQkJQyBVMQorCXVub3AJCQkJCUMgTDEKKwljbXB1bHQJeDU1NTU1NTU1NTU1NTU1NTUsIHgsIHA2CUMgVTAKK0MgMgorCWNtcHVsdAl4QUFBQUFBQUFBQUFBQUFBQSwgeCwgcDcJQyBVMQorCXVub3AKKwl1bm9wCisJbmVncQlwNiwgdDAJCQkJQyBMMAorQyAzCisJbmVncQlwNywgdDEJCQkJQyBMMAorCWFuZAljeW1hc2ssIHg1NTU1NTU1NTU1NTU1NTU1LCBsMAlDIFUxCisJYWRkcQlwNiwgY3ksIGN5CisJYW5kCXQwLCB4NTU1NTU1NTU1NTU1NTU1NSwgdDAKK0MgNAorCWFuZAl0MSwgeDU1NTU1NTU1NTU1NTU1NTUsIHQxCisJYWRkcQlwNywgY3ksIGN5CisJdW5vcAorCWFkZHEJdDAsIGwwLCBsMAorQyA1CisJYWRkcQl0MSwgbDAsIGwwCisJdW5vcAorCXN0cQl4LCA4KHJwKQkJCUMgTDEKKwl1bm9wCiskTDAwOgorQyAwCisJY21wdWx0CXUxLCBjeSwgY3kJCQlDIEwwCisJbXVscQl1MiwgeEFBQUFBQUFBQUFBQUFBQUIsIHEwCUMgVTEKKwlsZHEJdTMsIDMyKHVwKQkJCUMgTDEKKwlhZGRxCXExLCBsMCwgeAkJCUMgVTAKK0MgMQorCW5lZ3EJY3ksIGN5bWFzawkJCUMgTDAKKwl1bm9wCQkJCQlDIFUxCisJdW5vcAkJCQkJQyBMMQorCWNtcHVsdAl4NTU1NTU1NTU1NTU1NTU1NSwgeCwgcDYJQyBVMAorQyAyCisJY21wdWx0CXhBQUFBQUFBQUFBQUFBQUFBLCB4LCBwNwlDIFUxCisJdW5vcAorCXVub3AKKwluZWdxCXA2LCB0MAkJCQlDIEwwCitDIDMKKwluZWdxCXA3LCB0MQkJCQlDIEwwCisJYW5kCWN5bWFzaywgeDU1NTU1NTU1NTU1NTU1NTUsIGwwCUMgVTEKKwlhZGRxCXA2LCBjeSwgY3kKKwlhbmQJdDAsIHg1NTU1NTU1NTU1NTU1NTU1LCB0MAorQyA0CisJYW5kCXQxLCB4NTU1NTU1NTU1NTU1NTU1NSwgdDEKKwlhZGRxCXA3LCBjeSwgY3kKKwl1bm9wCisJYWRkcQl0MCwgbDAsIGwwCitDIDUKKwlhZGRxCXQxLCBsMCwgbDAKKwl1bm9wCisJc3RxCXgsIDE2KHJwKQkJCUMgTDEKKwl1bm9wCiskTDExOgorQyAwCisJY21wdWx0CXUyLCBjeSwgY3kJCQlDIEwwCisJbXVscQl1MywgeEFBQUFBQUFBQUFBQUFBQUIsIHExCUMgVTEKKwlsZHEJdTAsIDQwKHVwKQkJCUMgTDEKKwlhZGRxCXEwLCBsMCwgeAkJCUMgVTAKK0MgMQorCW5lZ3EJY3ksIGN5bWFzawkJCUMgTDAKKwl1bm9wCQkJCQlDIFUxCisJdW5vcAkJCQkJQyBMMQorCWNtcHVsdAl4NTU1NTU1NTU1NTU1NTU1NSwgeCwgcDYJQyBVMAorQyAyCisJY21wdWx0CXhBQUFBQUFBQUFBQUFBQUFBLCB4LCBwNwlDIFUxCisJbGRhCW4sIC00KG4pCQkJQyBMMSBib29ra2VlcGluZworCXVub3AKKwluZWdxCXA2LCB0MAkJCQlDIEwwCitDIDMKKwluZWdxCXA3LCB0MQkJCQlDIEwwCisJYW5kCWN5bWFzaywgeDU1NTU1NTU1NTU1NTU1NTUsIGwwCUMgVTEKKwlhZGRxCXA2LCBjeSwgY3kKKwlhbmQJdDAsIHg1NTU1NTU1NTU1NTU1NTU1LCB0MAorQyA0CisJYW5kCXQxLCB4NTU1NTU1NTU1NTU1NTU1NSwgdDEKKwlhZGRxCXA3LCBjeSwgY3kKKwl1bm9wCisJYWRkcQl0MCwgbDAsIGwwCitDIDUKKwlhZGRxCXQxLCBsMCwgbDAKKwl1bm9wCisJc3RxCXgsIDI0KHJwKQkJCUMgTDEKKwlsZGEJdXAsIDMyKHVwKQorQworCWxkbAlyMzEsIDI1Nih1cCkJCQlDIHByZWZldGNoCisJdW5vcAorCWxkYQlycCwgMzIocnApCisJYmdlCW4sICRMdG9wCQkJQyBVMQorQyAqKiogTUFJTiBMT09QIEVORCAqKioKKyRMZW5kOgorCisJY21wdWx0CXUzLCBjeSwgY3kJCQlDIEwwCisJbXVscQl1MCwgeEFBQUFBQUFBQUFBQUFBQUIsIHEwCUMgVTEKKwl1bm9wCisJYWRkcQlxMSwgbDAsIHgJCQlDIFUwCitDIDEKKwluZWdxCWN5LCBjeW1hc2sJCQlDIEwwCisJdW5vcAkJCQkJQyBVMQorCXVub3AJCQkJCUMgTDEKKwljbXB1bHQJeDU1NTU1NTU1NTU1NTU1NTUsIHgsIHA2CUMgVTAKK0MgMgorCWNtcHVsdAl4QUFBQUFBQUFBQUFBQUFBQSwgeCwgcDcJQyBVMQorCXVub3AKKwl1bm9wCisJbmVncQlwNiwgdDAJCQkJQyBMMAorQyAzCisJbmVncQlwNywgdDEJCQkJQyBMMAorCWFuZAljeW1hc2ssIHg1NTU1NTU1NTU1NTU1NTU1LCBsMAlDIFUxCisJYWRkcQlwNiwgY3ksIGN5CisJYW5kCXQwLCB4NTU1NTU1NTU1NTU1NTU1NSwgdDAKK0MgNAorCWFuZAl0MSwgeDU1NTU1NTU1NTU1NTU1NTUsIHQxCisJYWRkcQlwNywgY3ksIGN5CisJdW5vcAorCWFkZHEJdDAsIGwwLCBsMAorQyA1CisJYWRkcQl0MSwgbDAsIGwwCisJdW5vcAorCXN0cQl4LCAwKHJwKQkJCUMgTDEKKwl1bm9wCiskTGNqMToKKwljbXB1bHQJdTAsIGN5LCBjeQkJCUMgTDAKKwlhZGRxCXEwLCBsMCwgeAkJCUMgVTAKKwljbXB1bHQJeDU1NTU1NTU1NTU1NTU1NTUsIHgsIHA2CUMgVTAKKwljbXB1bHQJeEFBQUFBQUFBQUFBQUFBQUEsIHgsIHA3CUMgVTEKKwlhZGRxCXA2LCBjeSwgY3kKKwlhZGRxCXA3LCBjeSwgcjAKKwlzdHEJeCwgOChycCkJCQlDIEwxCisKKwlyZXQJcjMxLChyMjYpLDEKK0VQSUxPR1VFKCkKK0FTTV9FTkQoKQorCitDIFRoaXMgaXMgdXNlZnVsIGZvciBwbGF5aW5nIHdpdGggdmFyaW91cyBzY2hlZHVsZXMuCitDIEV4cGFuZCBhczogb25lKDApb25lKDEpb25lKDIpb25lKDMpCitkZWZpbmUoYG9uZScsYAorQyAwCisJY21wdWx0CWAkJ2V2YWwoKCQxKzMpJTQpLCBjeSwgY3kJCUMgTDAKKwltdWxxCWAkJyQxLCB4QUFBQUFBQUFBQUFBQUFBQiwgYCQnZXZhbCg0KyQxJTIpIEMgVTEKKwlsZHEJYCQnZXZhbCgoJDErMSklNCksIGV2YWwoJDEqOCsxNikodXApCUMgTDEKKwlhZGRxCWAkJ2V2YWwoNCsoJDErMSklMiksIGwwLCB4CQlDIFUwCitDIDEKKwluZWdxCWN5LCBjeW1hc2sJCQkJQyBMMAorCXVub3AJCQkJCQlDIFUxCisJdW5vcAkJCQkJCUMgTDEKKwljbXB1bHQJeDU1NTU1NTU1NTU1NTU1NTUsIHgsIHA2CQlDIFUwCitDIDIKKwljbXB1bHQJeEFBQUFBQUFBQUFBQUFBQUEsIHgsIHA3CQlDIFUxCisJdW5vcAorCXVub3AKKwluZWdxCXA2LCB0MAkJCQkJQyBMMAorQyAzCisJbmVncQlwNywgdDEJCQkJCUMgTDAKKwlhbmQJY3ltYXNrLCB4NTU1NTU1NTU1NTU1NTU1NSwgbDAJCUMgVTEKKwlhZGRxCXA2LCBjeSwgY3kKKwlhbmQJdDAsIHg1NTU1NTU1NTU1NTU1NTU1LCB0MAorQyA0CisJYW5kCXQxLCB4NTU1NTU1NTU1NTU1NTU1NSwgdDEKKwlhZGRxCXA3LCBjeSwgY3kKKwl1bm9wCisJYWRkcQl0MCwgbDAsIGwwCitDIDUKKwlhZGRxCXQxLCBsMCwgbDAKKwl1bm9wCisJc3RxCXgsIGV2YWwoJDEqOCkocnApCQkJQyBMMQorCXVub3AKKycpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL2V2NS9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL2V2NS9nbXAtbXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU3NWEyOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvZXY1L2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDE5MSBAQAorLyogQWxwaGEgRVY1IGdtcC1tcGFyYW0uaCAtLSBDb21waWxlci9tYWNoaW5lIHBhcmFtZXRlciBoZWFkZXIgZmlsZS4KKworQ29weXJpZ2h0IDE5OTEtMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2RlZmluZSBHTVBfTElNQl9CSVRTIDY0CisjZGVmaW5lIEdNUF9MSU1CX0JZVEVTIDgKKworLyogNjAwIE1IeiAyMTE2NEEgKi8KKy8qIEZGVCB0dW5pbmcgbGltaXQgPSA1MDAwMDAwICovCisvKiBHZW5lcmF0ZWQgYnkgdHVuZXVwLmMsIDIwMTctMDItMDIsIGdjYyA0LjkgKi8KKworI2RlZmluZSBESVZSRU1fMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgMCAgLyogcHJlaW52IGFsd2F5cyAqLworI2RlZmluZSBESVZSRU1fMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PRF8xXzFQX01FVEhPRCAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAxMAorI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNworI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAyMgorI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICAgICAgMCAgLyogbmV2ZXIgbXBuX21vZF8xc18ycCAqLworI2RlZmluZSBQUkVJTlZfTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAyMAorI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgICAgICAgICAgICAgICAgMSAgLyogcHJlaW52IGFsd2F5cyAqLworI2RlZmluZSBESVZfUVJfMU5fUEkxX01FVEhPRCAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBESVZfUVJfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICBNUF9TSVpFX1RfTUFYICAvKiBuZXZlciAqLworI2RlZmluZSBESVZfUVJfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICBNUF9TSVpFX1RfTUFYICAvKiBuZXZlciAqLworI2RlZmluZSBESVZfUVJfMl9QSTJfVEhSRVNIT0xEICAgICAgICAgICBNUF9TSVpFX1RfTUFYICAvKiBuZXZlciAqLworI2RlZmluZSBESVZFWEFDVF8xX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIEJNT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgICAgICAgIDY5CisKKyNkZWZpbmUgRElWXzFfVlNfTVVMXzFfUEVSQ0VOVCAgICAgICAgICAgICAxODEKKworI2RlZmluZSBNVUxfVE9PTTIyX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBNVUxfVE9PTTMzX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA1MAorI2RlZmluZSBNVUxfVE9PTTQ0X1RIUkVTSE9MRCAgICAgICAgICAgICAgIDExOAorI2RlZmluZSBNVUxfVE9PTTZIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE3MworI2RlZmluZSBNVUxfVE9PTThIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDIzNgorCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTQzX1RIUkVTSE9MRCAgICAgIDQ5CisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgIDg0CisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgIDgxCisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTYzX1RIUkVTSE9MRCAgICAgIDUzCisjZGVmaW5lIE1VTF9UT09NNDNfVE9fVE9PTTU0X1RIUkVTSE9MRCAgICAgIDcwCisKKyNkZWZpbmUgU1FSX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBTUVJfVE9PTTJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAyMgorI2RlZmluZSBTUVJfVE9PTTNfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA2OQorI2RlZmluZSBTUVJfVE9PTTRfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE3OAorI2RlZmluZSBTUVJfVE9PTTZfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE4OQorI2RlZmluZSBTUVJfVE9PTThfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDM1NworCisjZGVmaW5lIE1VTE1JRF9UT09NNDJfVEhSRVNIT0xEICAgICAgICAgICAgIDE4CisKKyNkZWZpbmUgTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgU1FSTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTIKKworI2RlZmluZSBNVUxfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDI4NCAgLyogayA9IDUgKi8KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDI4NCwgNX0sIHsgICAgIDExLCA2fSwgeyAgICAgIDYsIDV9LCB7ICAgICAxMywgNn0sIFwKKyAgICB7ICAgICAgNywgNX0sIHsgICAgIDE1LCA2fSwgeyAgICAgMTMsIDd9LCB7ICAgICAgNywgNn0sIFwKKyAgICB7ICAgICAxNSwgN30sIHsgICAgICA4LCA2fSwgeyAgICAgMTcsIDd9LCB7ICAgICAxMywgOH0sIFwKKyAgICB7ICAgICAgNywgN30sIHsgICAgIDE3LCA4fSwgeyAgICAgIDksIDd9LCB7ICAgICAyMCwgOH0sIFwKKyAgICB7ICAgICAxMSwgN30sIHsgICAgIDIzLCA4fSwgeyAgICAgMTMsIDl9LCB7ICAgICAgNywgOH0sIFwKKyAgICB7ICAgICAxOSwgOX0sIHsgICAgIDExLCA4fSwgeyAgICAgMjUsMTB9LCB7ICAgICAgNywgOX0sIFwKKyAgICB7ICAgICAxNSwgOH0sIHsgICAgIDMzLCA5fSwgeyAgICAgMTksIDh9LCB7ICAgICAzOSwgOX0sIFwKKyAgICB7ICAgICAyMywgOH0sIHsgICAgIDQ3LDEwfSwgeyAgICAgMTUsIDl9LCB7ICAgICAzOSwxMH0sIFwKKyAgICB7ICAgICAyMywgOX0sIHsgICAgIDQ3LDExfSwgeyAgICAgMTUsMTB9LCB7ICAgICAzMSwgOX0sIFwKKyAgICB7ICAgICA2NywxMH0sIHsgICAgIDM5LCA5fSwgeyAgICAgNzksMTB9LCB7ICAgICA0NywgOX0sIFwKKyAgICB7ICAgICA5NSwxMH0sIHsgICAgIDU1LDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA2MywgOH0sIFwKKyAgICB7ICAgIDI1NSwgN30sIHsgICAgNTExLDEwfSwgeyAgICAgNzEsIDl9LCB7ICAgIDE0MywgOH0sIFwKKyAgICB7ICAgIDI4NywgN30sIHsgICAgNTc1LCA5fSwgeyAgICAxNTksIDh9LCB7ICAgIDMxOSwxMX0sIFwKKyAgICB7ICAgICA0NywxMn0sIHsgICAgIDMxLDExfSwgeyAgICAgNjMsIDl9LCB7ICAgIDI1NSwgOH0sIFwKKyAgICB7ICAgIDUxMSwxMH0sIHsgICAgMTQzLCA5fSwgeyAgICAyODcsMTF9LCB7ICAgICA3OSwxMH0sIFwKKyAgICB7ICAgIDE1OSwgOX0sIHsgICAgMzE5LDEwfSwgeyAgICAxNzUsIDl9LCB7ICAgIDM1MSwgOH0sIFwKKyAgICB7ICAgIDcwMywxMH0sIHsgICAgMTkxLCA5fSwgeyAgICAzODMsMTB9LCB7ICAgIDIwNywgOX0sIFwKKyAgICB7ICAgIDQxNSwxMn0sIHsgICAgIDYzLDEwfSwgeyAgICAyNTUsMTF9LCB7ICAgIDE0MywxMH0sIFwKKyAgICB7ICAgIDI4NywgOX0sIHsgICAgNTc1LDExfSwgeyAgICAxNTksMTB9LCB7ICAgIDMxOSwgOX0sIFwKKyAgICB7ICAgIDYzOSwxMX0sIHsgICAgMTc1LDEyfSwgeyAgICAgOTUsMTF9LCB7ICAgIDE5MSwxMH0sIFwKKyAgICB7ICAgIDM4MywxMX0sIHsgICAgMjA3LDEwfSwgeyAgICA0MTUsMTF9LCB7ICAgIDIyMywxM30sIFwKKyAgICB7ICAgICA2MywxMX0sIHsgICAgMjg3LDEwfSwgeyAgICA1NzUsMTJ9LCB7ICAgIDE1OSwxMX0sIFwKKyAgICB7ICAgIDMxOSwxMH0sIHsgICAgNjM5LDExfSwgeyAgICAzNTEsMTJ9LCB7ICAgIDE5MSwxMX0sIFwKKyAgICB7ICAgIDQxNSwxMn0sIHsgICAgMjIzLDExfSwgeyAgICA0NDcsMTB9LCB7ICAgIDg5NSwxMX0sIFwKKyAgICB7ICAgIDQ3OSwxMn0sIHsgICAgMjg3LDExfSwgeyAgICA1NzUsMTJ9LCB7ICAgIDM1MSwxM30sIFwKKyAgICB7ICAgIDE5MSwxMn0sIHsgICAgNDc5LDEzfSwgeyAgICAyNTUsMTJ9LCB7ICAgIDU3NSwxM30sIFwKKyAgICB7ICAgIDMxOSwxMn0sIHsgICAgNzAzLDEzfSwgeyAgICAzODMsMTJ9LCB7ICAgIDgzMSwxM30sIFwKKyAgICB7ICAgIDQ0NywxNH0sIHsgICAgMjU1LDEzfSwgeyAgIDgxOTIsMTR9LCB7ICAxNjM4NCwxNX0sIFwKKyAgICB7ICAzMjc2OCwxNn0sIHsgIDY1NTM2LDE3fSwgeyAxMzEwNzIsMTh9LCB7IDI2MjE0NCwxOX0sIFwKKyAgICB7IDUyNDI4OCwyMH0sIHsxMDQ4NTc2LDIxfSwgezIwOTcxNTIsMjJ9LCB7NDE5NDMwNCwyM30sIFwKKyAgICB7ODM4ODYwOCwyNH0gfQorI2RlZmluZSBNVUxfRkZUX1RBQkxFM19TSVpFIDEyMQorI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNDIyNAorCisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgMjQwICAvKiBrID0gNSAqLworI2RlZmluZSBTUVJfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgMjQwLCA1fSwgeyAgICAgMTMsIDZ9LCB7ICAgICAgNywgNX0sIHsgICAgIDE1LCA2fSwgXAorICAgIHsgICAgIDE0LCA1fSwgeyAgICAgMjksIDd9LCB7ICAgICAgOSwgNn0sIHsgICAgIDE5LCA3fSwgXAorICAgIHsgICAgIDEzLCA2fSwgeyAgICAgMjcsIDh9LCB7ICAgICAgNywgN30sIHsgICAgIDIxLCA4fSwgXAorICAgIHsgICAgIDExLCA3fSwgeyAgICAgMjksIDh9LCB7ICAgICAxOSwgOX0sIHsgICAgIDExLCA4fSwgXAorICAgIHsgICAgIDI3LDEwfSwgeyAgICAgIDcsIDl9LCB7ICAgICAxNSwgOH0sIHsgICAgIDMzLCA5fSwgXAorICAgIHsgICAgIDE5LCA4fSwgeyAgICAgMzksIDl9LCB7ICAgICAyMywgOH0sIHsgICAgIDQ3LDEwfSwgXAorICAgIHsgICAgIDE1LCA5fSwgeyAgICAgMzksMTB9LCB7ICAgICAyMywgOX0sIHsgICAgIDQ3LDExfSwgXAorICAgIHsgICAgIDE1LDEwfSwgeyAgICAgMzEsIDl9LCB7ICAgICA2NywxMH0sIHsgICAgIDM5LCA5fSwgXAorICAgIHsgICAgIDc5LDEwfSwgeyAgICAgNDcsMTF9LCB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA5fSwgXAorICAgIHsgICAgMTI3LCA4fSwgeyAgICAyNTUsMTB9LCB7ICAgICA3MSwgOX0sIHsgICAgMTQzLCA4fSwgXAorICAgIHsgICAgMjg3LDEwfSwgeyAgICAgNzksMTF9LCB7ICAgICA0NywxMn0sIHsgICAgIDMxLDExfSwgXAorICAgIHsgICAgIDYzLDEwfSwgeyAgICAxMjcsIDl9LCB7ICAgIDI1NSwxMH0sIHsgICAgMTQzLCA5fSwgXAorICAgIHsgICAgMjg3LDExfSwgeyAgICAgNzksMTB9LCB7ICAgIDE1OSwgOX0sIHsgICAgMzE5LDEwfSwgXAorICAgIHsgICAgMTc1LDExfSwgeyAgICAgOTUsMTB9LCB7ICAgIDE5MSwgOX0sIHsgICAgMzgzLDEwfSwgXAorICAgIHsgICAgMjA3LCA5fSwgeyAgICA0MTUsMTF9LCB7ICAgIDExMSwxMH0sIHsgICAgMjIzLDEyfSwgXAorICAgIHsgICAgIDYzLDExfSwgeyAgICAxNzUsMTJ9LCB7ICAgICA5NSwxMX0sIHsgICAgMjA3LDEzfSwgXAorICAgIHsgICAgIDYzLDEyfSwgeyAgICAxMjcsMTF9LCB7ICAgIDI4NywxMn0sIHsgICAgMTU5LDExfSwgXAorICAgIHsgICAgMzUxLDEyfSwgeyAgICAxOTEsMTF9LCB7ICAgIDQxNSwxMn0sIHsgICAgMjIzLDExfSwgXAorICAgIHsgICAgNDQ3LDEzfSwgeyAgICAxMjcsMTJ9LCB7ICAgIDM1MSwxM30sIHsgICAgMTkxLDEyfSwgXAorICAgIHsgICAgMzgzLDExfSwgeyAgICA3NjcsMTJ9LCB7ICAgIDQxNSwxMX0sIHsgICAgODMxLDEyfSwgXAorICAgIHsgICAgNDQ3LDE0fSwgeyAgICAxMjcsMTN9LCB7ICAgIDI1NSwxMn0sIHsgICAgNTExLDExfSwgXAorICAgIHsgICAxMDg3LDEyfSwgeyAgICA1NzUsMTN9LCB7ICAgIDMxOSwxMn0sIHsgICAgNzAzLDEzfSwgXAorICAgIHsgICAgMzgzLDEyfSwgeyAgICA4MzEsMTN9LCB7ICAgIDQ0NywxNH0sIHsgICAgMjU1LDEzfSwgXAorICAgIHsgICAgNTExLDEyfSwgeyAgIDEwMjMsMTN9LCB7ICAgODE5MiwxNH0sIHsgIDE2Mzg0LDE1fSwgXAorICAgIHsgIDMyNzY4LDE2fSwgeyAgNjU1MzYsMTd9LCB7IDEzMTA3MiwxOH0sIHsgMjYyMTQ0LDE5fSwgXAorICAgIHsgNTI0Mjg4LDIwfSwgezEwNDg1NzYsMjF9LCB7MjA5NzE1MiwyMn0sIHs0MTk0MzA0LDIzfSwgXAorICAgIHs4Mzg4NjA4LDI0fSB9CisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzX1NJWkUgMTA1CisjZGVmaW5lIFNRUl9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAzOTY4CisKKyNkZWZpbmUgTVVMTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNVUxMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICA1MAorI2RlZmluZSBNVUxMT19NVUxfTl9USFJFU0hPTEQgICAgICAgICAgICAgNTU1OAorI2RlZmluZSBTUVJMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIFNRUkxPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDc4CisjZGVmaW5lIFNRUkxPX1NRUl9USFJFU0hPTEQgICAgICAgICAgICAgICAzNTk3CisKKyNkZWZpbmUgRENfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNDcKKyNkZWZpbmUgRENfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAxNjcKKyNkZWZpbmUgRENfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNDcKKyNkZWZpbmUgRENfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMTAKKworI2RlZmluZSBJTlZfTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAzMAorI2RlZmluZSBJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE4MQorI2RlZmluZSBJTlZfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDE3MworCisjZGVmaW5lIEJJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTgyCisjZGVmaW5lIFJFRENfMV9UT19SRURDX05fVEhSRVNIT0xEICAgICAgICAgIDQ3CisKKyNkZWZpbmUgTVVfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA5NzkKKyNkZWZpbmUgTVVfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgIDExNDIKKyNkZWZpbmUgTVVQSV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgOTAKKyNkZWZpbmUgTVVfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICA3NDgKKyNkZWZpbmUgTVVfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA5NzkKKworI2RlZmluZSBQT1dNX1NFQ19UQUJMRSAgMSwxNiw5MCwzODYsMjE3NworCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgIDI2CisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgMzYzCisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAxMjAxCisKKyNkZWZpbmUgRkFDX0RTQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAzNDIKKyNkZWZpbmUgRkFDX09ERF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworCisjZGVmaW5lIE1BVFJJWDIyX1NUUkFTU0VOX1RIUkVTSE9MRCAgICAgICAgIDEzCisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAgMTA1CisjZGVmaW5lIEhHQ0RfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTA4CisjZGVmaW5lIEhHQ0RfUkVEVUNFX1RIUkVTSE9MRCAgICAgICAgICAgICAxNjc5CisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgMjM4CisjZGVmaW5lIEdDREVYVF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTk5CisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAgICAyCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL2V2Ni9hZGRfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL2V2Ni9hZGRfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI2MWYzMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvZXY2L2FkZF9uLmFzbQpAQCAtMCwwICsxLDI4MyBAQAorZG5sICBBbHBoYSBldjYgbXBuX2FkZF9uIC0tIEFkZCB0d28gbGltYiB2ZWN0b3JzIG9mIHRoZSBzYW1lIGxlbmd0aCA+IDAgYW5kCitkbmwgIHN0b3JlIHN1bSBpbiBhIHRoaXJkIGxpbWIgdmVjdG9yLgorCitkbmwgIENvcHlyaWdodCAyMDAwLCAyMDAzLCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICBjeWNsZXMvbGltYgorQyBFVjQ6ICAgICA/CitDIEVWNTogICAgIDUuNAorQyBFVjY6ICAgICAyLjEyNQorCitDICBJTlBVVCBQQVJBTUVURVJTCitDICBycAlyMTYKK0MgIHVwCXIxNworQyAgdnAJcjE4CitDICBuCXIxOQorQyAgY3kJcjIwICAgKGZvciBtcG5fYWRkX25jKQorCitDIFRPRE8KK0MgICBGaW5pc2ggY2xlYW5pbmcgdXAgY3kgcmVnaXN0ZXJzIHIyMiwgcjIzIChtYWtlIHRoZW0gdXNlIGN5MC9jeTEpCitDICAgVXNlIG11bHRpLXByb25nZWQgZmVlZC1pbi4KK0MgICBQZXJmb3JtIGFkZGl0aW9uYWwgbWljcm8tdHVuaW5nCisKK0MgIFRoaXMgY29kZSB3YXMgd3JpdHRlbiBpbiBjb29wZXJhdGlvbiB3aXRoIGV2NiBwaXBlbGluZSBleHBlcnQgU3RldmUgUm9vdC4KKworQyAgUGFpciBsb2FkcyBhbmQgc3RvcmVzIHdoZXJlIHBvc3NpYmxlCitDICBTdG9yZSBwYWlycyBvY3QtYWxpZ25lZCB3aGVyZSBwb3NzaWJsZSAoZGlkbid0IG5lZWQgaXQgaGVyZSkKK0MgIFN0b3JlcyBhcmUgZGVsYXllZCBldmVyeSB0aGlyZCBjeWNsZQorQyAgTG9hZHMgYW5kIHN0b3JlcyBhcmUgZGVsYXllZCBieSBmaWxscworQyAgVSBzdGF5cyBzdGlsbCwgcHV0IGNvZGUgdGhlcmUgd2hlcmUgcG9zc2libGUgKG5vdGUgYWx0ZXJuYXRpb24gb2YgVTEgYW5kIFUwKQorQyAgTCBtb3ZlcyBiZWNhdXNlIG9mIGxvYWRzIGFuZCBzdG9yZXMKK0MgIE5vdGUgZGFtcGVycyBpbiBMIHRvIGxpbWl0IGRhbWFnZQorCitDICBUaGlzIG9kZC1sb29raW5nIG9wdGltaXphdGlvbiBleHBlY3RzIHRoYXQgd2VyZSBoYXZpbmcgcmFuZG9tIGJpdHMgaW4gb3VyCitDICBkYXRhLCBzbyB0aGF0IGEgcHVyZSB6ZXJvIHJlc3VsdCBpcyB1bmxpa2VseS4gc28gd2UgcGVuYWxpemUgdGhlIHVubGlrZWx5CitDICBjYXNlIHRvIGhlbHAgdGhlIGNvbW1vbiBjYXNlLgorCitkZWZpbmUoYHUwJywgYHIwJykgIGRlZmluZShgdTEnLCBgcjMnKQorZGVmaW5lKGB2MCcsIGByMScpICBkZWZpbmUoYHYxJywgYHI0JykKKworZGVmaW5lKGBjeTAnLCBgcjIwJykgIGRlZmluZShgY3kxJywgYHIyMScpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FkZF9uIG1wbl9hZGRfbmMpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fYWRkX25jKQorCWJyCXIzMSwJJGVudHJ5CitFUElMT0dVRSgpCitQUk9MT0dVRShtcG5fYWRkX24pCisJYmlzCXIzMSwJcjMxLAljeTAJQyBjbGVhciBjYXJyeSBpbgorJGVudHJ5OgljbXB1bHQJcjE5LAk1LAlyMjIJQyBMMSBtb3ZlIGNvdW50ZXIKKwlsZHEJdTEsCTAocjE3KQkJQyBMMCBnZXQgbmV4dCBvbmVzCisJbGRxCXYxLAkwKHIxOCkJCUMgTDEKKwlibmUJcjIyLAkkTHNtYWxsCisKKwlsZHEJdTAsCTgocjE3KQkJQyBMMCBnZXQgbmV4dCBvbmVzCisJbGRxCXYwLAk4KHIxOCkJCUMgTDEKKwlhZGRxCXUxLAl2MSwJcjUJQyBVMCBhZGQgdHdvIGRhdGEKKworCWNtcHVsdAlyNSwJdjEsCXIyMwlDIFUwIGRpZCBpdCBjYXJyeQorCWxkcQl1MSwJMTYocjE3KQkJQyBMMCBnZXQgbmV4dCBvbmVzCisJbGRxCXYxLAkxNihyMTgpCQlDIEwxCisKKwlhZGRxCXUwLAl2MCwJcjgJQyBVMSBhZGQgdHdvIGRhdGEKKwlhZGRxCXI1LAljeTAsCXI1CUMgVTAgY2FycnkgaW4KKworCWNtcHVsdAlyOCwJdjAsCXIyMglDIFUxIGRpZCBpdCBjYXJyeQorCWJlcQlyNSwJJGZpeDVmCQlDIFUwIGZpeCBleGFjdCB6ZXJvCiskcmV0NWY6CWxkcQl1MCwJMjQocjE3KQkJQyBMMCBnZXQgbmV4dCBvbmVzCisJbGRxCXYwLAkyNChyMTgpCQlDIEwxCisKKwlhZGRxCXI4LAlyMjMsCXI4CUMgVTEgY2FycnkgZnJvbSBsYXN0CisJYWRkcQl1MSwJdjEsCXI3CUMgVTAgYWRkIHR3byBkYXRhCisKKwliZXEJcjgsCSRmaXg2ZgkJQyBVMSBmaXggZXhhY3QgemVybworJHJldDZmOgljbXB1bHQJcjcsCXYxLAlyMjMJQyBVMCBkaWQgaXQgY2FycnkKKwlsZHEJdTEsCTMyKHIxNykJCUMgTDAgZ2V0IG5leHQgb25lcworCWxkcQl2MSwJMzIocjE4KQkJQyBMMQorCisJbGRhCXIxNywJNDAocjE3KQkJQyBMMCBtb3ZlIHBvaW50ZXIKKwlsZGEJcjE4LAk0MChyMTgpCQlDIEwxIG1vdmUgcG9pbnRlcgorCisJbGRhCXIxNiwJLTgocjE2KQorCWxkYQlyMTksCS0xMyhyMTkpCUMgTDEgbW92ZSBjb3VudGVyCisJYmx0CXIxOSwJJExlbmQJCUMgVTEgbG9vcCBjb250cm9sCisKKworQyBNYWluIGxvb3AuICA4LXdheSB1bnJvbGxlZC4KKwlBTElHTigxNikKKyRMb29wOglhZGRxCXUwLAl2MCwJcjIJQyBVMSBhZGQgdHdvIGRhdGEKKwlhZGRxCXI3LAlyMjIsCXI3CUMgVTAgYWRkIGluIGNhcnJ5CisJc3RxCXI1LAk4KHIxNikJCUMgTDAgcHV0IGFuIGFuc3dlcgorCXN0cQlyOCwJMTYocjE2KQkJQyBMMSBwYWlyCisKKwljbXB1bHQJcjIsCXYwLAljeTEJQyBVMSBkaWQgaXQgY2FycnkKKwliZXEJcjcsCSRmaXg3CQlDIFUwIGZpeCBleGFjdCAwCiskcmV0NzoJbGRxCXUwLAkwKHIxNykJCUMgTDAgZ2V0IG5leHQgb25lcworCWxkcQl2MCwJMChyMTgpCQlDIEwxCisKKwliaXMJcjMxLAlyMzEsCXIzMQlDIEwgIGRhbXAgb3V0CisJYWRkcQlyMiwJcjIzLAlyMglDIFUxIGNhcnJ5IGZyb20gbGFzdAorCWJpcwlyMzEsCXIzMSwJcjMxCUMgTCAgbW92ZXMgaW4gTCAhCisJYWRkcQl1MSwJdjEsCXI1CUMgVTAgYWRkIHR3byBkYXRhCisKKwliZXEJcjIsCSRmaXgwCQlDIFUxIGZpeCBleGFjdCB6ZXJvCiskcmV0MDoJY21wdWx0CXI1LAl2MSwJY3kwCUMgVTAgZGlkIGl0IGNhcnJ5CisJbGRxCXUxLAk4KHIxNykJCUMgTDAgZ2V0IG5leHQgb25lcworCWxkcQl2MSwJOChyMTgpCQlDIEwxCisKKwlhZGRxCXUwLAl2MCwJcjgJQyBVMSBhZGQgdHdvIGRhdGEKKwlhZGRxCXI1LAljeTEsCXI1CUMgVTAgY2FycnkgZnJvbSBsYXN0CisJc3RxCXI3LAkyNChyMTYpCQlDIEwwIHN0b3JlIHBhaXIKKwlzdHEJcjIsCTMyKHIxNikJCUMgTDEKKworCWNtcHVsdAlyOCwJdjAsCXIyMglDIFUxIGRpZCBpdCBjYXJyeQorCWJlcQlyNSwJJGZpeDEJCUMgVTAgZml4IGV4YWN0IHplcm8KKyRyZXQxOglsZHEJdTAsCTE2KHIxNykJCUMgTDAgZ2V0IG5leHQgb25lcworCWxkcQl2MCwJMTYocjE4KQkJQyBMMQorCisJbGRhCXIxNiwJNjQocjE2KQkJQyBMMCBtb3ZlIHBvaW50ZXIKKwlhZGRxCXI4LAljeTAsCXI4CUMgVTEgY2FycnkgZnJvbSBsYXN0CisJbGRhCXIxOSwJLTgocjE5KQkJQyBMMSBtb3ZlIGNvdW50ZXIKKwlhZGRxCXUxLAl2MSwJcjcJQyBVMCBhZGQgdHdvIGRhdGEKKworCWJlcQlyOCwJJGZpeDIJCUMgVTEgZml4IGV4YWN0IHplcm8KKyRyZXQyOgljbXB1bHQJcjcsCXYxLAlyMjMJQyBVMCBkaWQgaXQgY2FycnkKKwlsZHEJdTEsCTI0KHIxNykJCUMgTDAgZ2V0IG5leHQgb25lcworCWxkcQl2MSwJMjQocjE4KQkJQyBMMQorCisJYWRkcQl1MCwJdjAsCXIyCUMgVTEgYWRkIHR3byBkYXRhCisJYWRkcQlyNywJcjIyLAlyNwlDIFUwIGFkZCBpbiBjYXJyeQorCXN0cQlyNSwJLTI0KHIxNikJQyBMMCBwdXQgYW4gYW5zd2VyCisJc3RxCXI4LAktMTYocjE2KQlDIEwxIHBhaXIKKworCWNtcHVsdAlyMiwJdjAsCWN5MQlDIFUxIGRpZCBpdCBjYXJyeQorCWJlcQlyNywJJGZpeDMJCUMgVTAgZml4IGV4YWN0IDAKKyRyZXQzOglsZHEJdTAsCTMyKHIxNykJCUMgTDAgZ2V0IG5leHQgb25lcworCWxkcQl2MCwJMzIocjE4KQkJQyBMMQorCisJYmlzCXIzMSwJcjMxLAlyMzEJQyBMICBkYW1wIG91dAorCWFkZHEJcjIsCXIyMywJcjIJQyBVMSBjYXJyeSBmcm9tIGxhc3QKKwliaXMJcjMxLAlyMzEsCXIzMQlDIEwgIG1vdmVzIGluIEwgIQorCWFkZHEJdTEsCXYxLAlyNQlDIFUwIGFkZCB0d28gZGF0YQorCisJYmVxCXIyLAkkZml4NAkJQyBVMSBmaXggZXhhY3QgemVybworJHJldDQ6CWNtcHVsdAlyNSwJdjEsCWN5MAlDIFUwIGRpZCBpdCBjYXJyeQorCWxkcQl1MSwJNDAocjE3KQkJQyBMMCBnZXQgbmV4dCBvbmVzCisJbGRxCXYxLAk0MChyMTgpCQlDIEwxCisKKwlhZGRxCXUwLAl2MCwJcjgJQyBVMSBhZGQgdHdvIGRhdGEKKwlhZGRxCXI1LAljeTEsCXI1CUMgVTAgY2FycnkgZnJvbSBsYXN0CisJc3RxCXI3LAktOChyMTYpCQlDIEwwIHN0b3JlIHBhaXIKKwlzdHEJcjIsCTAocjE2KQkJQyBMMQorCisJY21wdWx0CXI4LAl2MCwJcjIyCUMgVTEgZGlkIGl0IGNhcnJ5CisJYmVxCXI1LAkkZml4NQkJQyBVMCBmaXggZXhhY3QgemVybworJHJldDU6CWxkcQl1MCwJNDgocjE3KQkJQyBMMCBnZXQgbmV4dCBvbmVzCisJbGRxCXYwLAk0OChyMTgpCQlDIEwxCisKKwlsZGwJcjMxLCAyNTYocjE3KQkJQyBMMCBwcmVmZXRjaAorCWFkZHEJcjgsCWN5MCwJcjgJQyBVMSBjYXJyeSBmcm9tIGxhc3QKKwlsZGwJcjMxLCAyNTYocjE4KQkJQyBMMSBwcmVmZXRjaAorCWFkZHEJdTEsCXYxLAlyNwlDIFUwIGFkZCB0d28gZGF0YQorCisJYmVxCXI4LAkkZml4NgkJQyBVMSBmaXggZXhhY3QgemVybworJHJldDY6CWNtcHVsdAlyNywJdjEsCXIyMwlDIFUwIGRpZCBpdCBjYXJyeQorCWxkcQl1MSwJNTYocjE3KQkJQyBMMCBnZXQgbmV4dCBvbmVzCisJbGRxCXYxLAk1NihyMTgpCQlDIEwxCisKKwlsZGEJcjE3LAk2NChyMTcpCQlDIEwwIG1vdmUgcG9pbnRlcgorCWJpcwlyMzEsCXIzMSwJcjMxCUMgVQorCWxkYQlyMTgsCTY0KHIxOCkJCUMgTDEgbW92ZSBwb2ludGVyCisJYmdlCXIxOSwJJExvb3AJCUMgVTEgbG9vcCBjb250cm9sCitDID09PT0gbWFpbiBsb29wIGVuZAorCiskTGVuZDoJYWRkcQl1MCwJdjAsCXIyCUMgVTEgYWRkIHR3byBkYXRhCisJYWRkcQlyNywJcjIyLAlyNwlDIFUwIGFkZCBpbiBjYXJyeQorCXN0cQlyNSwJOChyMTYpCQlDIEwwIHB1dCBhbiBhbnN3ZXIKKwlzdHEJcjgsCTE2KHIxNikJCUMgTDEgcGFpcgorCWNtcHVsdAlyMiwJdjAsCWN5MQlDIFUxIGRpZCBpdCBjYXJyeQorCWJlcQlyNywJJGZpeDdjCQlDIFUwIGZpeCBleGFjdCAwCiskcmV0N2M6CWFkZHEJcjIsCXIyMywJcjIJQyBVMSBjYXJyeSBmcm9tIGxhc3QKKwlhZGRxCXUxLAl2MSwJcjUJQyBVMCBhZGQgdHdvIGRhdGEKKwliZXEJcjIsCSRmaXgwYwkJQyBVMSBmaXggZXhhY3QgemVybworJHJldDBjOgljbXB1bHQJcjUsCXYxLAljeTAJQyBVMCBkaWQgaXQgY2FycnkKKwlhZGRxCXI1LAljeTEsCXI1CUMgVTAgY2FycnkgZnJvbSBsYXN0CisJc3RxCXI3LAkyNChyMTYpCQlDIEwwIHN0b3JlIHBhaXIKKwlzdHEJcjIsCTMyKHIxNikJCUMgTDEKKwliZXEJcjUsCSRmaXgxYwkJQyBVMCBmaXggZXhhY3QgemVybworJHJldDFjOglzdHEJcjUsCTQwKHIxNikJCUMgTDAgcHV0IGFuIGFuc3dlcgorCWxkYQlyMTYsCTQ4KHIxNikJCUMgTDAgbW92ZSBwb2ludGVyCisKKwlsZGEJcjE5LAk4KHIxOSkKKwliZXEJcjE5LAkkTHJldAorCisJbGRxCXUxLAkwKHIxNykKKwlsZHEJdjEsCTAocjE4KQorJExzbWFsbDoKKwlsZGEJcjE5LAktMShyMTkpCisJYmVxCXIxOSwJJExlbmQwCisKKwlBTElHTig4KQorJExvb3AwOglhZGRxCXUxLAl2MSwJcjIJQyBtYWluIGFkZAorCWNtcHVsdAlyMiwJdjEsCXI4CUMgY29tcHV0ZSBjeSBmcm9tIGxhc3QgYWRkCisJbGRxCXUxLAk4KHIxNykKKwlsZHEJdjEsCTgocjE4KQorCWFkZHEJcjIsCWN5MCwJcjUJQyBjYXJyeSBhZGQKKwlsZGEJcjE3LAk4KHIxNykKKwlsZGEJcjE4LAk4KHIxOCkKKwlzdHEJcjUsCTAocjE2KQorCWNtcHVsdAlyNSwJcjIsCWN5MAlDIGNvbXB1dGUgY3kgZnJvbSBsYXN0IGFkZAorCWxkYQlyMTksCS0xKHIxOSkJCUMgZGVjciBsb29wIGNudAorCWJpcwlyOCwJY3kwLAljeTAJQyBjb21iaW5lIGN5IGZyb20gdGhlIHR3byBhZGRzCisJbGRhCXIxNiwJOChyMTYpCisJYm5lCXIxOSwJJExvb3AwCiskTGVuZDA6CWFkZHEJdTEsCXYxLAlyMglDIG1haW4gYWRkCisJYWRkcQlyMiwJY3kwLAlyNQlDIGNhcnJ5IGFkZAorCWNtcHVsdAlyMiwJdjEsCXI4CUMgY29tcHV0ZSBjeSBmcm9tIGxhc3QgYWRkCisJY21wdWx0CXI1LAlyMiwJY3kwCUMgY29tcHV0ZSBjeSBmcm9tIGxhc3QgYWRkCisJc3RxCXI1LAkwKHIxNikKKwliaXMJcjgsCWN5MCwJcjAJQyBjb21iaW5lIGN5IGZyb20gdGhlIHR3byBhZGRzCisJcmV0CXIzMSwocjI2KSwxCisKKwlBTElHTig4KQorJExyZXQ6CWxkYQlyMCwJMChjeTApCQlDIGNvcHkgY2FycnkgaW50byByZXR1cm4gcmVnaXN0ZXIKKwlyZXQJcjMxLChyMjYpLDEKKworJGZpeDVmOgliaXMJcjIzLAljeTAsCXIyMwlDIGJyaW5nIGZvcndhcmQgY2FycnkKKwlicglyMzEsCSRyZXQ1ZgorJGZpeDZmOgliaXMJcjIyLAlyMjMsCXIyMglDIGJyaW5nIGZvcndhcmQgY2FycnkKKwlicglyMzEsCSRyZXQ2ZgorJGZpeDA6CWJpcwljeTEsCXIyMywJY3kxCUMgYnJpbmcgZm9yd2FyZCBjYXJyeQorCWJyCXIzMSwJJHJldDAKKyRmaXgxOgliaXMJY3kwLAljeTEsCWN5MAlDIGJyaW5nIGZvcndhcmQgY2FycnkKKwlicglyMzEsCSRyZXQxCiskZml4MjoJYmlzCXIyMiwJY3kwLAlyMjIJQyBicmluZyBmb3J3YXJkIGNhcnJ5CisJYnIJcjMxLAkkcmV0MgorJGZpeDM6CWJpcwlyMjMsCXIyMiwJcjIzCUMgYnJpbmcgZm9yd2FyZCBjYXJyeQorCWJyCXIzMSwJJHJldDMKKyRmaXg0OgliaXMJY3kxLAlyMjMsCWN5MQlDIGJyaW5nIGZvcndhcmQgY2FycnkKKwlicglyMzEsCSRyZXQ0CiskZml4NToJYmlzCWN5MSwJY3kwLAljeTAJQyBicmluZyBmb3J3YXJkIGNhcnJ5CisJYnIJcjMxLAkkcmV0NQorJGZpeDY6CWJpcwlyMjIsCWN5MCwJcjIyCUMgYnJpbmcgZm9yd2FyZCBjYXJyeQorCWJyCXIzMSwJJHJldDYKKyRmaXg3OgliaXMJcjIzLAlyMjIsCXIyMwlDIGJyaW5nIGZvcndhcmQgY2FycnkKKwlicglyMzEsCSRyZXQ3CiskZml4MGM6CWJpcwljeTEsCXIyMywJY3kxCUMgYnJpbmcgZm9yd2FyZCBjYXJyeQorCWJyCXIzMSwJJHJldDBjCiskZml4MWM6CWJpcwljeTAsCWN5MSwJY3kwCUMgYnJpbmcgZm9yd2FyZCBjYXJyeQorCWJyCXIzMSwJJHJldDFjCiskZml4N2M6CWJpcwlyMjMsCXIyMiwJcjIzCUMgYnJpbmcgZm9yd2FyZCBjYXJyeQorCWJyCXIzMSwJJHJldDdjCisKK0VQSUxPR1VFKCkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9ldjYvYW9yc2xzaDFfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL2V2Ni9hb3JzbHNoMV9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjk2NmNlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9ldjYvYW9yc2xzaDFfbi5hc20KQEAgLTAsMCArMSwxNzIgQEAKK2RubCAgQWxwaGEgbXBuX2FkZGxzaDFfbi9tcG5fc3VibHNoMV9uIC0tIHJwW10gPSB1cFtdICstICh2cFtdIDw8IDEpLgorCitkbmwgIENvcHlyaWdodCAyMDAzLCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICBjeWNsZXMvbGltYgorQyBFVjQ6ICAgICA/CitDIEVWNTogICAgIDcKK0MgRVY2OiAgICAgNAorCitDIFRPRE8KK0MgICogVHVuZSB0byByZWFjaCAzLjc1IGMvbCBvbiBldjYuCisKK2RlZmluZShgcnAnLGByMTYnKQorZGVmaW5lKGB1cCcsYHIxNycpCitkZWZpbmUoYHZwJyxgcjE4JykKK2RlZmluZShgbicsIGByMTknKQorCitkZWZpbmUoYHUwJywgYHI4JykKK2RlZmluZShgdTEnLCBgcjEnKQorZGVmaW5lKGB2MCcsIGByNCcpCitkZWZpbmUoYHYxJywgYHI1JykKKworZGVmaW5lKGBjeTAnLCBgcjAnKQorZGVmaW5lKGBjeTEnLCBgcjIwJykKK2RlZmluZShgY3knLCBgcjIyJykKK2RlZmluZShgcnInLCBgcjI0JykKK2RlZmluZShgcHMnLCBgcjI1JykKK2RlZmluZShgc2wnLCBgcjI4JykKKworaWZkZWYoYE9QRVJBVElPTl9hZGRsc2gxX24nLGAKKyAgZGVmaW5lKEFERFNVQiwgICAgICAgYWRkcSkKKyAgZGVmaW5lKENBUlJZLCAgICAgICBgY21wdWx0ICQxLCQyLCQzJykKKyAgZGVmaW5lKGZ1bmMsIG1wbl9hZGRsc2gxX24pCisnKQoraWZkZWYoYE9QRVJBVElPTl9zdWJsc2gxX24nLGAKKyAgZGVmaW5lKEFERFNVQiwgICAgICAgc3VicSkKKyAgZGVmaW5lKENBUlJZLCAgICAgICBgY21wdWx0ICQyLCQxLCQzJykKKyAgZGVmaW5lKGZ1bmMsIG1wbl9zdWJsc2gxX24pCisnKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRsc2gxX24gbXBuX3N1YmxzaDFfbikKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKGZ1bmMpCisJYW5kCW4sIDIsIGN5MAorCWJsYnMJbiwgTChieDEpCitMKGJ4MCk6CWxkcQl2MSwgMCh2cCkKKwlsZHEJdTEsIDAodXApCisJbGRhCXIyLCAwKHIzMSkKKwlibmUJY3kwLCBMKGIxMCkKKworTChiMDApOglsZGEJdnAsIDQ4KHZwKQorCWxkYQl1cCwgLTE2KHVwKQorCWxkYQlycCwgLTgocnApCisJbGRhCWN5MCwgMChyMzEpCisJYnIJcjMxLCBMKGxvMCkKKworTChiMTApOglsZGEJdnAsIDMyKHZwKQorCWxkYQlycCwgOChycCkKKwlsZGEJY3kwLCAwKHIzMSkKKwlicglyMzEsIEwobG8yKQorCitMKGJ4MSk6CWxkcQl2MCwgMCh2cCkKKwlsZHEJdTAsIDAodXApCisJbGRhCXIzLCAwKHIzMSkKKwliZXEJY3kwLCBMKGIwMSkKKworTChiMTEpOglsZGEJdnAsIDQwKHZwKQorCWxkYQl1cCwgLTI0KHVwKQorCWxkYQlycCwgMTYocnApCisJbGRhCWN5MSwgMChyMzEpCisJYnIJcjMxLCBMKGxvMykKKworTChiMDEpOglsZGEJbiwgLTQobikKKwlsZGEJY3kxLCAwKHIzMSkKKwlibGUJbiwgTChlbmQpCisJbGRhCXZwLCAyNCh2cCkKKwlsZGEJdXAsIC04KHVwKQorCisJQUxJR04oMTYpCitMKHRvcCk6CWFkZHEJdjAsIHYwLCByNgorCWxkcQl2MSwgLTE2KHZwKQorCWFkZHEJcjYsIHIzLCBzbAlDIGNvbWJpbmVkIHZsaW1iCisJbGRxCXUxLCAxNih1cCkKKwlBRERTVUIJdTAsIHNsLCBwcwlDIHVsaW1iICsgKHZsaW1iIDw8IDEpCisJY21wbHQJdjAsIHIzMSwgcjIJQyBoaWdoIHYgYml0cworCUFERFNVQglwcywgY3kxLCBycglDIGNvbnN1bWUgY2FycnkgZnJvbSBwcmV2aW91cyBvcGVyYXRpb24KKwlDQVJSWSgJcHMsIHUwLCBjeTApCUMgY2Fycnkgb3V0ICMyCisJc3RxCXJyLCAwKHJwKQorCUNBUlJZKAlyciwgcHMsIGN5KQlDIGNhcnJ5IG91dCAjMworCWxkYQl2cCwgMzIodnApCUMgYm9va2tlZXBpbmcKKwlhZGRxCWN5LCBjeTAsIGN5MAlDIGZpbmFsIGNhcnJ5IG91dAorTChsbzApOglhZGRxCXYxLCB2MSwgcjcKKwlsZHEJdjAsIC00MCh2cCkKKwlhZGRxCXI3LCByMiwgc2wKKwlsZHEJdTAsIDI0KHVwKQorCUFERFNVQgl1MSwgc2wsIHBzCisJY21wbHQJdjEsIHIzMSwgcjMKKwlBRERTVUIJcHMsIGN5MCwgcnIKKwlDQVJSWSgJcHMsIHUxLCBjeTEpCisJc3RxCXJyLCA4KHJwKQorCUNBUlJZKAlyciwgcHMsIGN5KQorCWxkYQlycCwgMzIocnApCUMgYm9va2tlZXBpbmcKKwlhZGRxCWN5LCBjeTEsIGN5MQorTChsbzMpOglhZGRxCXYwLCB2MCwgcjYKKwlsZHEJdjEsIC0zMih2cCkKKwlhZGRxCXI2LCByMywgc2wKKwlsZHEJdTEsIDMyKHVwKQorCUFERFNVQgl1MCwgc2wsIHBzCisJY21wbHQJdjAsIHIzMSwgcjIKKwlBRERTVUIJcHMsIGN5MSwgcnIKKwlDQVJSWSgJcHMsIHUwLCBjeTApCisJc3RxCXJyLCAtMTYocnApCisJQ0FSUlkoCXJyLCBwcywgY3kpCisJbGRhCXVwLCAzMih1cCkJQyBib29ra2VlcGluZworCWFkZHEJY3ksIGN5MCwgY3kwCitMKGxvMik6CWFkZHEJdjEsIHYxLCByNworCWxkcQl2MCwgLTI0KHZwKQorCWFkZHEJcjcsIHIyLCBzbAorCWxkcQl1MCwgOCh1cCkKKwlBRERTVUIJdTEsIHNsLCBwcworCWNtcGx0CXYxLCByMzEsIHIzCisJQUREU1VCCXBzLCBjeTAsIHJyCisJQ0FSUlkoCXBzLCB1MSwgY3kxKQorCXN0cQlyciwgLTgocnApCisJQ0FSUlkoCXJyLCBwcywgY3kpCisJbGRhCW4sIC00KG4pCUMgYm9va2tlZXBpbmcKKwlhZGRxCWN5LCBjeTEsIGN5MQorCWJndAluLCBMKHRvcCkKKworTChlbmQpOglhZGRxCXYwLCB2MCwgcjYKKwlhZGRxCXI2LCByMywgc2wKKwlBRERTVUIJdTAsIHNsLCBwcworCWNtcGx0CXYwLCByMzEsIHIyCisJQUREU1VCCXBzLCBjeTEsIHJyCisJQ0FSUlkoCXBzLCB1MCwgY3kwKQorCXN0cQlyciwgMChycCkKKwlDQVJSWSgJcnIsIHBzLCBjeSkKKwlhZGRxCWN5LCBjeTAsIGN5MAorCWFkZHEJY3kwLCByMiwgcjAKKworCXJldAlyMzEsKHIyNiksMQorRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL2V2Ni9hb3JzbXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9ldjYvYW9yc211bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTY4ZTZlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9ldjYvYW9yc211bF8xLmFzbQpAQCAtMCwwICsxLDM5OCBAQAorZG5sICBBbHBoYSBldjYgbXBuX2FkZG11bF8xIGFuZCBtcG5fc3VibXVsXzEuCisKK2RubCAgQ29weXJpZ2h0IDIwMDAsIDIwMDMtMjAwNSwgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgY3ljbGVzL2xpbWIKK0MgRVY0OiAgICA0MgorQyBFVjU6ICAgIDE4CitDIEVWNjogICAgIDMuNQorCitDICBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywJYHIxNicpCitkZWZpbmUoYHVwJywJYHIxNycpCitkZWZpbmUoYG4nLAlgcjE4JykKK2RlZmluZShgdjAnLAlgcjE5JykKKworZG5sICBUaGlzIGNvZGUgd2FzIHdyaXR0ZW4gaW4gY29vcGVyYXRpb24gd2l0aCBldjYgcGlwZWxpbmUgZXhwZXJ0IFN0ZXZlIFJvb3QuCisKK2RubCAgVGhlIHN0b3JlcyBjYW4gaXNzdWUgYSBjeWNsZSBsYXRlIHNvIHdlIGhhdmUgcGFpcmVkIG5vLW9wJ3MgdG8gJ2NhdGNoJworZG5sICB0aGVtLCBzbyB0aGF0IGZ1cnRoZXIgZGlzdHVyYmFuY2UgdG8gdGhlIHNjaGVkdWxlIGlzIGRhbXBlZC4KKworZG5sICBXZSBjb3VsZG4ndCBwYWlyIHRoZSBsb2FkcywgYmVjYXVzZSB0aGUgZW50YW5nbGVkIHNjaGVkdWxlIG9mIHRoZSBjYXJyeSdzCitkbmwgIGhhcyB0byBoYXBwZW4gb24gb25lIHNpZGUgezB9IG9mIHRoZSBtYWNoaW5lLgorCitkbmwgIFRoaXMgaXMgYSBncmVhdCBzY2hlZHVsZSBmb3IgdGhlIGRfY2FjaGUsIGEgcG9vciBzY2hlZHVsZSBmb3IgdGhlIGJfY2FjaGUuCitkbmwgIFRoZSBsb2NrdXAgb24gVTAgbWVhbnMgdGhhdCBhbnkgc3RhbGwgY2FuJ3QgYmUgcmVjb3ZlcmVkIGZyb20uICBDb25zaWRlciBhCitkbmwgIGxkcSBpbiBMMSwgc2F5IHRoYXQgbG9hZCBnZXRzIHN0YWxsZWQgYmVjYXVzZSBpdCBjb2xsaWRlcyB3aXRoIGEgZmlsbCBmcm9tCitkbmwgIHRoZSBiX2NhY2hlLiAgT24gdGhlIG5leHQgY3ljbGUsIHRoaXMgbG9hZCBnZXRzIHByaW9yaXR5LiAgSWYgZmlyc3QgbG9va3MKK2RubCAgYXQgTDAsIGFuZCBnb2VzIHRoZXJlLiAgVGhlIGluc3RydWN0aW9uIHdlIGludGVuZGVkIGZvciBMMCBnZXRzIHRvIGxvb2sgYXQKK2RubCAgTDEsIHdoaWNoIGlzIE5PVCB3aGVyZSB3ZSB3YW50IGl0LiAgSXQgZWl0aGVyIHN0YWxscyAxLCBiZWNhdXNlIGl0IGNhbid0CitkbmwgIGdvIGluIEwwLCBvciBnb2VzIHRoZXJlLCBhbmQgY2F1c2VzIGEgZnVydGhlciBpbnN0cnVjdGlvbiB0byBzdGFsbC4KKworZG5sICBTbyBmb3IgYl9jYWNoZSwgd2UncmUgbGlrZWx5IGdvaW5nIHRvIHdhbnQgdG8gcHV0IG9uZSBvciBtb3JlIGN5Y2xlcyBiYWNrCitkbmwgIGludG8gdGhlIGNvZGUhIEFuZCwgb2YgY291cnNlLCBwdXQgaW4gbGRzIHByZWZldGNoIGZvciB0aGUgcnBbXSBvcGVyYW5kLgorZG5sICBBdCBhIHBsYWNlIHdoZXJlIHdlIGhhdmUgYW4gbXQgZm9sbG93ZWQgYnkgYSBib29ra2VlcGluZywgcHV0IHRoZQorZG5sICBib29ra2VlcGluZyBpbiB1cHBlciwgYW5kIHRoZSBwcmVmZXRjaCBpbnRvIGxvd2VyLgorCitkbmwgIE5vdGUsIHRoZSBsZHEncyBhbmQgc3RxJ3MgYXJlIGF0IHRoZSBlbmQgb2YgdGhlIHF1YWRwYWNrcy4gIE5vdGUsIHdlJ2QKK2RubCAgbGlrZSBub3QgdG8gaGF2ZSBhbiBsZHEgb3IgYW4gc3RxIHRvIHByZWNlZGVkIGEgY29uZGl0aW9uYWwgYnJhbmNoIGluIGEKK2RubCAgcXVhZHBhY2suICBUaGUgY29uZGl0aW9uYWwgYnJhbmNoIG1vdmVzIHRoZSByZXRpcmUgcG9pbnRlciBvbmUgY3ljbGUKK2RubCAgbGF0ZXIuCisKK2lmZGVmKGBPUEVSQVRJT05fYWRkbXVsXzEnLGAKKyAgICBkZWZpbmUoYEFERFNVQicsCWBhZGRxJykKKyAgICBkZWZpbmUoYENNUENZJywJYGNtcHVsdAkkMiwkMScpCisgICAgZGVmaW5lKGBmdW5jJywJYG1wbl9hZGRtdWxfMScpCisnKQoraWZkZWYoYE9QRVJBVElPTl9zdWJtdWxfMScsYAorICAgIGRlZmluZShgQUREU1VCJywJYHN1YnEnKQorICAgIGRlZmluZShgQ01QQ1knLAlgY21wdWx0CSQxLCQyJykKKyAgICBkZWZpbmUoYGZ1bmMnLAlgbXBuX3N1Ym11bF8xJykKKycpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FkZG11bF8xIG1wbl9zdWJtdWxfMSkKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKGZ1bmMpCisJbGRxCXIzLAkwKHVwKQkJQworCWFuZAlyMTgsCTcsCXIyMAlDCisJbGRhCXIxOCwJLTkocjE4KQkJQworCWNtcGVxCXIyMCwJMSwJcjIxCUMKKwliZXEJcjIxLAkkTDEJCUMKKworJDFtb2Q4OglsZHEJcjUsCTAocnApCQlDCisJbXVscQl2MCwJcjMsCXI3CUMKKwl1bXVsaAl2MCwJcjMsCXI4CUMKKwlBRERTVUIJcjUsCXI3LAlyMjMJQworCUNNUENZKAlyNSwJcjIzKSwJcjIwCUMKKwlhZGRxCXI4LAlyMjAsCXIwCUMKKwlzdHEJcjIzLAkwKHJwKQkJQworCWJnZQlyMTgsCSRlbnQxCQlDCisJcmV0CXIzMSwJKHIyNiksCTEJQworCiskTDE6CWxkYQlyOCwJMChyMzEpCQlDIHplcm8gY2FycnkgcmVnCisJbGRhCXIyNCwJMChyMzEpCQlDIHplcm8gY2FycnkgcmVnCisJY21wZXEJcjIwLAkyLAlyMjEJQworCWJuZQlyMjEsCSQybW9kOAkJQworCWNtcGVxCXIyMCwJMywJcjIxCUMKKwlibmUJcjIxLAkkM21vZDgJCUMKKwljbXBlcQlyMjAsCTQsCXIyMQlDCisJYm5lCXIyMSwJJDRtb2Q4CQlDCisJY21wZXEJcjIwLAk1LAlyMjEJQworCWJuZQlyMjEsCSQ1bW9kOAkJQworCWNtcGVxCXIyMCwJNiwJcjIxCUMKKwlibmUJcjIxLAkkNm1vZDgJCUMKKwljbXBlcQlyMjAsCTcsCXIyMQlDCisJYmVxCXIyMSwJJDBtb2Q4CQlDCisKKyQ3bW9kODoJbGRxCXI1LAkwKHJwKQkJQworCWxkYQl1cCwJOCh1cCkJCUMKKwltdWxxCXYwLAlyMywJcjcJQworCXVtdWxoCXYwLAlyMywJcjI0CUMKKwlBRERTVUIJcjUsCXI3LAlyMjMJQworCUNNUENZKAlyNSwJcjIzKSwJcjIwCUMKKwlhZGRxCXIyNCwJcjIwLAlyMjQJQworCXN0cQlyMjMsCTAocnApCQlDCisJbGRhCXJwLAk4KHJwKQkJQworCWxkcQlyMywJMCh1cCkJCUMKKyQ2bW9kODoJbGRxCXIxLAk4KHVwKQkJQworCW11bHEJdjAsCXIzLAlyMjUJQworCXVtdWxoCXYwLAlyMywJcjMJQworCW11bHEJdjAsCXIxLAlyMjgJQworCWxkcQlyMCwJMTYodXApCQlDCisJbGRxCXI0LAkwKHJwKQkJQworCXVtdWxoCXYwLAlyMSwJcjgJQworCWxkcQlyMSwJMjQodXApCQlDCisJbGRhCXVwLAk0OCh1cCkJCUMgTDEgYm9va2tlZXBpbmcKKwltdWxxCXYwLAlyMCwJcjIJQworCWxkcQlyNSwJOChycCkJCUMKKwlsZGEJcnAsCS0zMihycCkJCUMgTDEgYm9va2tlZXBpbmcKKwl1bXVsaAl2MCwJcjAsCXI2CUMKKwlBRERTVUIJcjQsCXIyNSwJcjI1CUMgbG8gKyBhY2MKKwltdWxxCXYwLAlyMSwJcjcJQworCWJyCXIzMSwJJGVudDYJCUMKKworJGVudDE6CWxkYQl1cCwJOCh1cCkJCUMKKwlsZGEJcnAsCTgocnApCQlDCisJbGRhCXI4LAkwKHIwKQkJQworCWxkcQlyMywJMCh1cCkJCUMKKyQwbW9kODoJbGRxCXIxLAk4KHVwKQkJQworCW11bHEJdjAsCXIzLAlyMglDCisJdW11bGgJdjAsCXIzLAlyNglDCisJbXVscQl2MCwJcjEsCXI3CUMKKwlsZHEJcjAsCTE2KHVwKQkJQworCWxkcQlyNCwJMChycCkJCUMKKwl1bXVsaAl2MCwJcjEsCXIyNAlDCisJbGRxCXIxLAkyNCh1cCkJCUMKKwltdWxxCXYwLAlyMCwJcjI1CUMKKwlsZHEJcjUsCTgocnApCQlDCisJdW11bGgJdjAsCXIwLAlyMwlDCisJQUREU1VCCXI0LAlyMiwJcjIJQyBsbyArIGFjYworCW11bHEJdjAsCXIxLAlyMjgJQworCWxkYQlycCwJLTE2KHJwKQkJQworCWJyCXIzMSwJJGVudDAJCUMKKworJDNtb2Q4OglsZHEJcjUsCTAocnApCQlDCisJbGRhCXVwLAk4KHVwKQkJQworCW11bHEJdjAsCXIzLAlyNwlDCisJdW11bGgJdjAsCXIzLAlyOAlDCisJQUREU1VCCXI1LAlyNywJcjIzCUMKKwlDTVBDWSgJcjUsCXIyMyksCXIyMAlDCisJYWRkcQlyOCwJcjIwLAlyMjQJQworCXN0cQlyMjMsCTAocnApCQlDCisJbGRhCXJwLAk4KHJwKQkJQworCWxkcQlyMywJMCh1cCkJCUMKKyQybW9kODoJbGRxCXIxLAk4KHVwKQkJQworCW11bHEJdjAsCXIzLAlyMjUJQworCXVtdWxoCXYwLAlyMywJcjMJQworCW11bHEJdjAsCXIxLAlyMjgJQworCWJsZQlyMTgsCSRuMjMJCUMKKwlsZHEJcjAsCTE2KHVwKQkJQworCWxkcQlyNCwJMChycCkJCUMKKwl1bXVsaAl2MCwJcjEsCXI4CUMKKwlsZHEJcjEsCTI0KHVwKQkJQworCWxkYQl1cCwJMTYodXApCQlDIEwxIGJvb2trZWVwaW5nCisJbXVscQl2MCwJcjAsCXIyCUMKKwlsZHEJcjUsCTgocnApCQlDCisJbGRhCXJwLAkwKHJwKQkJQyBMMSBib29ra2VlcGluZworCXVtdWxoCXYwLAlyMCwJcjYJQworCUFERFNVQglyNCwJcjI1LAlyMjUJQyBsbyArIGFjYworCW11bHEJdjAsCXIxLAlyNwlDCisJYnIJcjMxLAkkZW50MgkJQworCiskNW1vZDg6CWxkcQlyNSwJMChycCkJCUMKKwlsZGEJdXAsCTgodXApCQlDCisJbXVscQl2MCwJcjMsCXI3CUMKKwl1bXVsaAl2MCwJcjMsCXIyNAlDCisJQUREU1VCCXI1LAlyNywJcjIzCUMKKwlDTVBDWSgJcjUsCXIyMyksCXIyMAlDCisJYWRkcQlyMjQsCXIyMCwJcjgJQworCXN0cQlyMjMsCTAocnApCQlDCisJbGRhCXJwLAk4KHJwKQkJQworCWxkcQlyMywJMCh1cCkJCUMKKyQ0bW9kODoJbGRxCXIxLAk4KHVwKQkJQworCW11bHEJdjAsCXIzLAlyMglDCisJdW11bGgJdjAsCXIzLAlyNglDCisJbXVscQl2MCwJcjEsCXI3CUMKKwlsZHEJcjAsCTE2KHVwKQkJQworCWxkcQlyNCwJMChycCkJCUMKKwl1bXVsaAl2MCwJcjEsCXIyNAlDCisJbGRxCXIxLAkyNCh1cCkJCUMKKwlsZGEJdXAsCTMyKHVwKQkJQyBMMSBib29ra2VlcGluZworCW11bHEJdjAsCXIwLAlyMjUJQworCWxkcQlyNSwJOChycCkJCUMKKwlsZGEJcnAsCTE2KHJwKQkJQyBMMSBib29ra2VlcGluZworCXVtdWxoCXYwLAlyMCwJcjMJQworCUFERFNVQglyNCwJcjIsCXIyCUMgbG8gKyBhY2MKKwltdWxxCXYwLAlyMSwJcjI4CUMKKwlDTVBDWSgJcjQsCXIyKSwJcjIwCUMgTDAgbG8gYWRkID0+IGNhcnJ5CisJQUREU1VCCXIyLAlyOCwJcjIyCUMgVTAgaGkgYWRkID0+IGFuc3dlcgorCWJsZQlyMTgsCSRMZW5kCQlDCisJQUxJR04oMTYpCiskTG9vcDoKKwliaXMJcjMxLAlyMzEsCXIzMQlDIFUxIG10CisJQ01QQ1koCXIyLAlyMjIpLAlyMjEJQyBMMCBoaSBhZGQgPT4gY2FycnkKKwlhZGRxCXI2LAlyMjAsCXI2CUMgVTAgaGkgbXVsICsgY2FycnkKKwlsZHEJcjAsCTAodXApCQlDCisKKwliaXMJcjMxLAlyMzEsCXIzMQlDIFUxIG10CisJQUREU1VCCXI1LAlyNywJcjcJQyBMMCBsbyArIGFjYworCWFkZHEJcjYsCXIyMSwJcjYJQyBVMCBoaSBtdWwgKyBjYXJyeQorCWxkcQlyNCwJMChycCkJCUMgTDEKKworCXVtdWxoCXYwLAlyMSwJcjgJQyBVMQorCUNNUENZKAlyNSwJcjcpLAlyMjAJQyBMMCBsbyBhZGQgPT4gY2FycnkKKwlBRERTVUIJcjcsCXI2LAlyMjMJQyBVMCBoaSBhZGQgPT4gYW5zd2VyCisJbGRxCXIxLAk4KHVwKQkJQyBMMQorCisJbXVscQl2MCwJcjAsCXIyCUMgVTEKKwlDTVBDWSgJcjcsCXIyMyksCXIyMQlDIEwwIGhpIGFkZCA9PiBjYXJyeQorCWFkZHEJcjI0LAlyMjAsCXIyNAlDIFUwIGhpIG11bCArIGNhcnJ5CisJbGRxCXI1LAk4KHJwKQkJQyBMMQorCisJdW11bGgJdjAsCXIwLAlyNglDIFUxCisJQUREU1VCCXI0LAlyMjUsCXIyNQlDIFUwIGxvICsgYWNjCisJc3RxCXIyMiwJLTE2KHJwKQkJQyBMMAorCXN0cQlyMjMsCS04KHJwKQkJQyBMMQorCisJYmlzCXIzMSwJcjMxLAlyMzEJQyBMMCBzdCBzbG9zaAorCW11bHEJdjAsCXIxLAlyNwlDIFUxCisJYmlzCXIzMSwJcjMxLAlyMzEJQyBMMSBzdCBzbG9zaAorCWFkZHEJcjI0LAlyMjEsCXIyNAlDIFUwIGhpIG11bCArIGNhcnJ5CiskZW50MjoKKwlDTVBDWSgJcjQsCXIyNSksCXIyMAlDIEwwIGxvIGFkZCA9PiBjYXJyeQorCWJpcwlyMzEsCXIzMSwJcjMxCUMgVTEgbXQKKwlsZGEJcjE4LAktOChyMTgpCQlDIEwxIGJvb2trZWVwaW5nCisJQUREU1VCCXIyNSwJcjI0LAlyMjIJQyBVMCBoaSBhZGQgPT4gYW5zd2VyCisKKwliaXMJcjMxLAlyMzEsCXIzMQlDIFUxIG10CisJQ01QQ1koCXIyNSwJcjIyKSwJcjIxCUMgTDAgaGkgYWRkID0+IGNhcnJ5CisJYWRkcQlyMywJcjIwLAlyMwlDIFUwIGhpIG11bCArIGNhcnJ5CisJbGRxCXIwLAkxNih1cCkJCUMgTDEKKworCWJpcwlyMzEsCXIzMSwJcjMxCUMgVTEgbXQKKwlBRERTVUIJcjUsCXIyOCwJcjI4CUMgTDAgbG8gKyBhY2MKKwlhZGRxCXIzLAlyMjEsCXIzCUMgVTAgaGkgbXVsICsgY2FycnkKKwlsZHEJcjQsCTE2KHJwKQkJQyBMMQorCisJdW11bGgJdjAsCXIxLAlyMjQJQyBVMQorCUNNUENZKAlyNSwJcjI4KSwJcjIwCUMgTDAgbG8gYWRkID0+IGNhcnJ5CisJQUREU1VCCXIyOCwJcjMsCXIyMwlDIFUwIGhpIGFkZCA9PiBhbnN3ZXIKKwlsZHEJcjEsCTI0KHVwKQkJQyBMMQorCisJbXVscQl2MCwJcjAsCXIyNQlDIFUxCisJQ01QQ1koCXIyOCwJcjIzKSwJcjIxCUMgTDAgaGkgYWRkID0+IGNhcnJ5CisJYWRkcQlyOCwJcjIwLAlyOAlDIFUwIGhpIG11bCArIGNhcnJ5CisJbGRxCXI1LAkyNChycCkJCUMgTDEKKworCXVtdWxoCXYwLAlyMCwJcjMJQyBVMQorCUFERFNVQglyNCwJcjIsCXIyCUMgVTAgbG8gKyBhY2MKKwlzdHEJcjIyLAkwKHJwKQkJQyBMMAorCXN0cQlyMjMsCTgocnApCQlDIEwxCisKKwliaXMJcjMxLAlyMzEsCXIzMQlDIEwwIHN0IHNsb3NoCisJbXVscQl2MCwJcjEsCXIyOAlDIFUxCisJYmlzCXIzMSwJcjMxLAlyMzEJQyBMMSBzdCBzbG9zaAorCWFkZHEJcjgsCXIyMSwJcjgJQyBVMCBoaSBtdWwgKyBjYXJyeQorJGVudDA6CisJQ01QQ1koCXI0LAlyMiksCXIyMAlDIEwwIGxvIGFkZCA9PiBjYXJyeQorCWJpcwlyMzEsCXIzMSwJcjMxCUMgVTEgbXQKKwlsZGEJdXAsCTY0KHVwKQkJQyBMMSBib29ra2VlcGluZworCUFERFNVQglyMiwJcjgsCXIyMglDIFUwIGhpIGFkZCA9PiBhbnN3ZXIKKworCWJpcwlyMzEsCXIzMSwJcjMxCUMgVTEgbXQKKwlDTVBDWSgJcjIsCXIyMiksCXIyMQlDIEwwIGhpIGFkZCA9PiBjYXJyeQorCWFkZHEJcjYsCXIyMCwJcjYJQyBVMCBoaSBtdWwgKyBjYXJyeQorCWxkcQlyMCwJLTMyKHVwKQkJQyBMMQorCisJYmlzCXIzMSwJcjMxLAlyMzEJQyBVMSBtdAorCUFERFNVQglyNSwJcjcsCXI3CUMgTDAgbG8gKyBhY2MKKwlhZGRxCXI2LAlyMjEsCXI2CUMgVTAgaGkgbXVsICsgY2FycnkKKwlsZHEJcjQsCTMyKHJwKQkJQyBMMQorCisJdW11bGgJdjAsCXIxLAlyOAlDIFUxCisJQ01QQ1koCXI1LAlyNyksCXIyMAlDIEwwIGxvIGFkZCA9PiBjYXJyeQorCUFERFNVQglyNywJcjYsCXIyMwlDIFUwIGhpIGFkZCA9PiBhbnN3ZXIKKwlsZHEJcjEsCS0yNCh1cCkJCUMgTDEKKworCW11bHEJdjAsCXIwLAlyMglDIFUxCisJQ01QQ1koCXI3LAlyMjMpLAlyMjEJQyBMMCBoaSBhZGQgPT4gY2FycnkKKwlhZGRxCXIyNCwJcjIwLAlyMjQJQyBVMCBoaSBtdWwgKyBjYXJyeQorCWxkcQlyNSwJNDAocnApCQlDIEwxCisKKwl1bXVsaAl2MCwJcjAsCXI2CUMgVTEKKwlBRERTVUIJcjQsCXIyNSwJcjI1CUMgVTAgbG8gKyBhY2MKKwlzdHEJcjIyLAkxNihycCkJCUMgTDAKKwlzdHEJcjIzLAkyNChycCkJCUMgTDEKKworCWJpcwlyMzEsCXIzMSwJcjMxCUMgTDAgc3Qgc2xvc2gKKwltdWxxCXYwLAlyMSwJcjcJQyBVMQorCWJpcwlyMzEsCXIzMSwJcjMxCUMgTDEgc3Qgc2xvc2gKKwlhZGRxCXIyNCwJcjIxLAlyMjQJQyBVMCBoaSBtdWwgKyBjYXJyeQorJGVudDY6CisJQ01QQ1koCXI0LAlyMjUpLAlyMjAJQyBMMCBsbyBhZGQgPT4gY2FycnkKKwliaXMJcjMxLAlyMzEsCXIzMQlDIFUxIG10CisJbGRhCXJwLAk2NChycCkJCUMgTDEgYm9va2tlZXBpbmcKKwlBRERTVUIJcjI1LAlyMjQsCXIyMglDIFUwIGhpIGFkZCA9PiBhbnN3ZXIKKworCWJpcwlyMzEsCXIzMSwJcjMxCUMgVTEgbXQKKwlDTVBDWSgJcjI1LAlyMjIpLAlyMjEJQyBMMCBoaSBhZGQgPT4gY2FycnkKKwlhZGRxCXIzLAlyMjAsCXIzCUMgVTAgaGkgbXVsICsgY2FycnkKKwlsZHEJcjAsCS0xNih1cCkJCUMgTDEKKworCWJpcwlyMzEsCXIzMSwJcjMxCUMgVTEgbXQKKwlBRERTVUIJcjUsCXIyOCwJcjI4CUMgTDAgbG8gKyBhY2MKKwlhZGRxCXIzLAlyMjEsCXIzCUMgVTAgaGkgbXVsICsgY2FycnkKKwlsZHEJcjQsCS0xNihycCkJCUMgTDEKKworCXVtdWxoCXYwLAlyMSwJcjI0CUMgVTEKKwlDTVBDWSgJcjUsCXIyOCksCXIyMAlDIEwwIGxvIGFkZCA9PiBjYXJyeQorCUFERFNVQglyMjgsCXIzLAlyMjMJQyBVMCBoaSBhZGQgPT4gYW5zd2VyCisJbGRxCXIxLAktOCh1cCkJCUMgTDEKKworCW11bHEJdjAsCXIwLAlyMjUJQyBVMQorCUNNUENZKAlyMjgsCXIyMyksCXIyMQlDIEwwIGhpIGFkZCA9PiBjYXJyeQorCWFkZHEJcjgsCXIyMCwJcjgJQyBVMCBoaSBtdWwgKyBjYXJyeQorCWxkcQlyNSwJLTgocnApCQlDIEwxCisKKwl1bXVsaAl2MCwJcjAsCXIzCUMgVTEKKwlBRERTVUIJcjQsCXIyLAlyMglDIFUwIGxvICsgYWNjCisJc3RxCXIyMiwJLTMyKHJwKQkJQyBMMAorCXN0cQlyMjMsCS0yNChycCkJCUMgTDEKKworCWJpcwlyMzEsCXIzMSwJcjMxCUMgTDAgc3Qgc2xvc2gKKwltdWxxCXYwLAlyMSwJcjI4CUMgVTEKKwliaXMJcjMxLAlyMzEsCXIzMQlDIEwxIHN0IHNsb3NoCisJYWRkcQlyOCwJcjIxLAlyOAlDIFUwIGhpIG11bCArIGNhcnJ5CisKKwlDTVBDWSgJcjQsCXIyKSwJcjIwCUMgTDAgbG8gYWRkID0+IGNhcnJ5CisJQUREU1VCCXIyLAlyOCwJcjIyCUMgVTAgaGkgYWRkID0+IGFuc3dlcgorCWxkbAlyMzEsCTI1Nih1cCkJCUMgcHJlZmV0Y2ggdXBbXQorCWJndAlyMTgsCSRMb29wCQlDIFUxIGJvb2trZWVwaW5nCisKKyRMZW5kOglDTVBDWSgJcjIsCXIyMiksCXIyMQlDCisJYWRkcQlyNiwJcjIwLAlyNglDCisJQUREU1VCCXI1LAlyNywJcjcJQworCWFkZHEJcjYsCXIyMSwJcjYJQworCWxkcQlyNCwJMChycCkJCUMKKwl1bXVsaAl2MCwJcjEsCXI4CUMKKwlDTVBDWSgJcjUsCXI3KSwJcjIwCUMKKwlBRERTVUIJcjcsCXI2LAlyMjMJQworCUNNUENZKHI3LAlyMjMpLAlyMjEJQworCWFkZHEJcjI0LAlyMjAsCXIyNAlDCisJbGRxCXI1LAk4KHJwKQkJQworCUFERFNVQglyNCwJcjI1LAlyMjUJQworCXN0cQlyMjIsCS0xNihycCkJCUMKKwlzdHEJcjIzLAktOChycCkJCUMKKwlhZGRxCXIyNCwJcjIxLAlyMjQJQworCWJyCUwoeCkKKworCUFMSUdOKDE2KQorJG4yMzoJbGRxCXI0LAkwKHJwKQkJQworCWxkcQlyNSwJOChycCkJCUMKKwl1bXVsaAl2MCwJcjEsCXI4CUMKKwlBRERTVUIJcjQsCXIyNSwJcjI1CUMKK0woeCk6CUNNUENZKAlyNCwJcjI1KSwJcjIwCUMKKwlBRERTVUIJcjI1LAlyMjQsCXIyMglDCisJQ01QQ1koCXIyNSwJcjIyKSwJcjIxCUMKKwlhZGRxCXIzLAlyMjAsCXIzCUMKKwlBRERTVUIJcjUsCXIyOCwJcjI4CUMKKwlhZGRxCXIzLAlyMjEsCXIzCUMKKwlDTVBDWSgJcjUsCXIyOCksCXIyMAlDCisJQUREU1VCCXIyOCwJcjMsCXIyMwlDCisJQ01QQ1koCXIyOCwJcjIzKSwJcjIxCUMKKwlhZGRxCXI4LAlyMjAsCXI4CUMKKwlzdHEJcjIyLAkwKHJwKQkJQworCXN0cQlyMjMsCTgocnApCQlDCisJYWRkcQlyOCwJcjIxLAlyMAlDCisJcmV0CXIzMSwJKHIyNiksCTEJQworRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL2V2Ni9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL2V2Ni9nbXAtbXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUxZDZiMAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvZXY2L2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDIwOSBAQAorLyogZ21wLW1wYXJhbS5oIC0tIENvbXBpbGVyL21hY2hpbmUgcGFyYW1ldGVyIGhlYWRlciBmaWxlLgorCitDb3B5cmlnaHQgMTk5MSwgMTk5MywgMTk5NCwgMTk5OS0yMDAyLCAyMDA0LCAyMDA1LCAyMDA4LTIwMTAsIDIwMTQgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgNjQKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgOAorCisjZGVmaW5lIERJVkVYQUNUX0JZM19NRVRIT0QgMAkvKiBvdmVycmlkZSAuLi9kaXZlYnkzLmFzbSAqLworCisvKiA1MDAgTUh6IDIxMTY0IChhZ25lc2kubWF0aC5zdS5zZSkgKi8KKy8qIEZGVCB0dW5pbmcgbGltaXQgPSAyMDAwMDAwMCAqLworLyogR2VuZXJhdGVkIGJ5IHR1bmV1cC5jLCAyMDE0LTAzLTE0LCBnY2MgMy4zICovCisKKyNkZWZpbmUgRElWUkVNXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgIDAgIC8qIHByZWludiBhbHdheXMgKi8KKyNkZWZpbmUgRElWUkVNXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMV8xUF9NRVRIT0QgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBNT0RfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PRF8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFOX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgIDQKKyNkZWZpbmUgTU9EXzFVX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgIDIKKyNkZWZpbmUgTU9EXzFfMV9UT19NT0RfMV8yX1RIUkVTSE9MRCAgICAgICAgMTAKKyNkZWZpbmUgTU9EXzFfMl9UT19NT0RfMV80X1RIUkVTSE9MRCAgICAgICAgMjEKKyNkZWZpbmUgUFJFSU5WX01PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgIDcKKyNkZWZpbmUgVVNFX1BSRUlOVl9ESVZSRU1fMSAgICAgICAgICAgICAgICAgIDEgIC8qIHByZWludiBhbHdheXMgKi8KKyNkZWZpbmUgRElWX1FSXzFOX1BJMV9NRVRIT0QgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRElWX1FSXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRElWX1FSXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgIDEKKyNkZWZpbmUgRElWX1FSXzJfUEkyX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRElWRVhBQ1RfMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBCTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgICAgICAyMAorCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTE3CisjZGVmaW5lIE1VTF9UT09NNDRfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTI0CisjZGVmaW5lIE1VTF9UT09NNkhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjMwCisjZGVmaW5lIE1VTF9UT09NOEhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMzU3CisKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNDNfVEhSRVNIT0xEICAgICAgOTcKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxMDcKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNTNfVEhSRVNIT0xEICAgICAgODgKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNjNfVEhSRVNIT0xEICAgICAxMDUKKyNkZWZpbmUgTVVMX1RPT000M19UT19UT09NNTRfVEhSRVNIT0xEICAgICAxMzYKKworI2RlZmluZSBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDU5CisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTIzCisjZGVmaW5lIFNRUl9UT09NNF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTYzCisjZGVmaW5lIFNRUl9UT09NNl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMzMzCisjZGVmaW5lIFNRUl9UT09NOF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKworI2RlZmluZSBNVUxNSURfVE9PTTQyX1RIUkVTSE9MRCAgICAgICAgICAgICA1MgorCisjZGVmaW5lIE1VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE5CisjZGVmaW5lIFNRUk1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA1CisKKyNkZWZpbmUgTVVMX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICA0NjggIC8qIGsgPSA1ICovCisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICA0NjgsIDV9LCB7ICAgICAxOSwgNn0sIHsgICAgIDEwLCA1fSwgeyAgICAgMjEsIDZ9LCBcCisgICAgeyAgICAgMTEsIDV9LCB7ICAgICAyMywgNn0sIHsgICAgIDE5LCA3fSwgeyAgICAgMTAsIDZ9LCBcCisgICAgeyAgICAgMjQsIDd9LCB7ICAgICAxMywgNn0sIHsgICAgIDI3LCA3fSwgeyAgICAgMTQsIDZ9LCBcCisgICAgeyAgICAgMjksIDd9LCB7ICAgICAxNywgNn0sIHsgICAgIDM1LCA3fSwgeyAgICAgMjksIDh9LCBcCisgICAgeyAgICAgMTUsIDd9LCB7ICAgICAzMiwgOH0sIHsgICAgIDE3LCA3fSwgeyAgICAgMzUsIDh9LCBcCisgICAgeyAgICAgMTksIDd9LCB7ICAgICAzOSwgOH0sIHsgICAgIDI5LCA5fSwgeyAgICAgMTUsIDh9LCBcCisgICAgeyAgICAgMzUsIDl9LCB7ICAgICAxOSwgOH0sIHsgICAgIDQxLCA5fSwgeyAgICAgMjMsIDh9LCBcCisgICAgeyAgICAgNTEsIDl9LCB7ICAgICAyNywgOH0sIHsgICAgIDU1LCA5fSwgeyAgICAgMzUsIDh9LCBcCisgICAgeyAgICAgNzEsIDl9LCB7ICAgICAzOSwxMH0sIHsgICAgIDIzLCA5fSwgeyAgICAgNTUsMTB9LCBcCisgICAgeyAgICAgMzEsIDl9LCB7ICAgICA2NywxMH0sIHsgICAgIDM5LCA5fSwgeyAgICAgNzksMTB9LCBcCisgICAgeyAgICAgNDcsIDl9LCB7ICAgICA5NSwxMH0sIHsgICAgIDU1LDExfSwgeyAgICAgMzEsMTB9LCBcCisgICAgeyAgICAgNzksMTF9LCB7ICAgICA0NywxMH0sIHsgICAgMTAzLDEyfSwgeyAgICAgMzEsMTF9LCBcCisgICAgeyAgICAgNjMsMTB9LCB7ICAgIDEzNSwxMX0sIHsgICAgIDc5LDEwfSwgeyAgICAxNjcsMTF9LCBcCisgICAgeyAgICAgOTUsMTB9LCB7ICAgIDE5OSwxMX0sIHsgICAgMTExLDEyfSwgeyAgICAgNjMsMTF9LCBcCisgICAgeyAgICAxNDMsMTB9LCB7ICAgIDI4NywgOX0sIHsgICAgNTc1LDExfSwgeyAgICAxNTksMTB9LCBcCisgICAgeyAgICAzMTksMTJ9LCB7ICAgICA5NSwxMX0sIHsgICAgMTkxLDEwfSwgeyAgICAzODMsMTF9LCBcCisgICAgeyAgICAyMDcsMTN9LCB7ICAgICA2MywxMn0sIHsgICAgMTI3LDExfSwgeyAgICAyNTUsMTB9LCBcCisgICAgeyAgICA1MTEsMTF9LCB7ICAgIDI3MSwxMH0sIHsgICAgNTQzLDExfSwgeyAgICAyODcsMTB9LCBcCisgICAgeyAgICA1NzUsMTJ9LCB7ICAgIDE1OSwxMX0sIHsgICAgMzE5LDEwfSwgeyAgICA2MzksMTF9LCBcCisgICAgeyAgICAzMzUsMTB9LCB7ICAgIDY3MSwxMX0sIHsgICAgMzUxLDEwfSwgeyAgICA3MDMsMTJ9LCBcCisgICAgeyAgICAxOTEsMTF9LCB7ICAgIDM4MywxMH0sIHsgICAgNzY3LDExfSwgeyAgICA0MTUsMTJ9LCBcCisgICAgeyAgICAyMjMsMTF9LCB7ICAgIDQ0NywxM30sIHsgICAgMTI3LDEyfSwgeyAgICAyNTUsMTF9LCBcCisgICAgeyAgICA1NDMsMTJ9LCB7ICAgIDI4NywxMX0sIHsgICAgNTc1LDEwfSwgeyAgIDExNTEsMTF9LCBcCisgICAgeyAgICA2MDcsMTJ9LCB7ICAgIDMxOSwxMX0sIHsgICAgNjcxLDEyfSwgeyAgICAzNTEsMTF9LCBcCisgICAgeyAgICA3MDMsMTN9LCB7ICAgIDE5MSwxMn0sIHsgICAgMzgzLDExfSwgeyAgICA3NjcsMTJ9LCBcCisgICAgeyAgICA0MTUsMTF9LCB7ICAgIDgzMSwxMn0sIHsgICAgNDQ3LDE0fSwgeyAgICAxMjcsMTN9LCBcCisgICAgeyAgICAyNTUsMTJ9LCB7ICAgIDU3NSwxMX0sIHsgICAxMTUxLDEyfSwgeyAgICA2MDcsMTN9LCBcCisgICAgeyAgICAzMTksMTJ9LCB7ICAgIDczNSwxM30sIHsgICAgMzgzLDEyfSwgeyAgICA3NjcsMTF9LCBcCisgICAgeyAgIDE1MzUsMTJ9LCB7ICAgIDgzMSwxM30sIHsgICAgNDQ3LDEyfSwgeyAgICA5NTksMTR9LCBcCisgICAgeyAgICAyNTUsMTN9LCB7ICAgIDUxMSwxMn0sIHsgICAxMDg3LDEzfSwgeyAgICA1NzUsMTJ9LCBcCisgICAgeyAgIDEyMTUsMTN9LCB7ICAgIDYzOSwxMn0sIHsgICAxMzQzLDEzfSwgeyAgICA3MDMsMTJ9LCBcCisgICAgeyAgIDE0MDcsMTR9LCB7ICAgIDM4MywxM30sIHsgICAgNzY3LDEyfSwgeyAgIDE1MzUsMTN9LCBcCisgICAgeyAgICA4MzEsMTJ9LCB7ICAgMTY2MywxM30sIHsgICAgOTU5LDE1fSwgeyAgICAyNTUsMTR9LCBcCisgICAgeyAgICA1MTEsMTN9LCB7ICAgMTIxNSwxNH0sIHsgICAgNjM5LDEzfSwgeyAgIDE0MDcsMTR9LCBcCisgICAgeyAgICA3NjcsMTN9LCB7ICAgMTY2MywxNH0sIHsgICAgODk1LDEzfSwgeyAgIDE4NTUsMTV9LCBcCisgICAgeyAgICA1MTEsMTR9LCB7ICAxNjM4NCwxNX0sIHsgIDMyNzY4LDE2fSwgeyAgNjU1MzYsMTd9LCBcCisgICAgeyAxMzEwNzIsMTh9LCB7IDI2MjE0NCwxOX0sIHsgNTI0Mjg4LDIwfSwgezEwNDg1NzYsMjF9LCBcCisgICAgezIwOTcxNTIsMjJ9LCB7NDE5NDMwNCwyM30sIHs4Mzg4NjA4LDI0fSB9CisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzX1NJWkUgMTUxCisjZGVmaW5lIE1VTF9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA1NzYwCisKKyNkZWZpbmUgU1FSX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICA0MTIgIC8qIGsgPSA1ICovCisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICA0MTIsIDV9LCB7ICAgICAxOSwgNn0sIHsgICAgIDEwLCA1fSwgeyAgICAgMjEsIDZ9LCBcCisgICAgeyAgICAgMTEsIDV9LCB7ICAgICAyMywgNn0sIHsgICAgIDEyLCA1fSwgeyAgICAgMjUsIDZ9LCBcCisgICAgeyAgICAgMjcsIDd9LCB7ICAgICAxNCwgNn0sIHsgICAgIDI5LCA3fSwgeyAgICAgMjgsIDh9LCBcCisgICAgeyAgICAgMTUsIDd9LCB7ICAgICAzMSwgOH0sIHsgICAgIDE3LCA3fSwgeyAgICAgMzYsIDh9LCBcCisgICAgeyAgICAgMTksIDd9LCB7ICAgICAzOSwgOH0sIHsgICAgIDI5LCA5fSwgeyAgICAgMTUsIDh9LCBcCisgICAgeyAgICAgMzUsIDl9LCB7ICAgICAxOSwgOH0sIHsgICAgIDQxLCA5fSwgeyAgICAgMjMsIDh9LCBcCisgICAgeyAgICAgNDksIDl9LCB7ICAgICAyNywxMH0sIHsgICAgIDE1LCA5fSwgeyAgICAgMzksMTB9LCBcCisgICAgeyAgICAgMjMsIDl9LCB7ICAgICA1MSwxMX0sIHsgICAgIDE1LDEwfSwgeyAgICAgMzEsIDl9LCBcCisgICAgeyAgICAgNjcsMTB9LCB7ICAgICAzOSwgOX0sIHsgICAgIDc5LDEwfSwgeyAgICAgNDcsIDl9LCBcCisgICAgeyAgICAgOTUsMTB9LCB7ICAgICA1NSwxMX0sIHsgICAgIDMxLDEwfSwgeyAgICAgNzksMTF9LCBcCisgICAgeyAgICAgNDcsMTB9LCB7ICAgICA5NSwxMn0sIHsgICAgIDMxLDExfSwgeyAgICAgNjMsMTB9LCBcCisgICAgeyAgICAxMjcsIDl9LCB7ICAgIDI1NSwxMX0sIHsgICAgIDc5LDEwfSwgeyAgICAxNTksIDl9LCBcCisgICAgeyAgICAzMTksMTB9LCB7ICAgIDE2NywxMX0sIHsgICAgIDk1LDEwfSwgeyAgICAxOTEsIDl9LCBcCisgICAgeyAgICAzODMsMTF9LCB7ICAgIDExMSwxMn0sIHsgICAgIDYzLDExfSwgeyAgICAxMjcsMTB9LCBcCisgICAgeyAgICAyNzEsMTF9LCB7ICAgIDE0MywxMH0sIHsgICAgMjg3LCA5fSwgeyAgICA1NzUsMTB9LCBcCisgICAgeyAgICAzMDMsMTF9LCB7ICAgIDE1OSwxMH0sIHsgICAgMzE5LDEyfSwgeyAgICAgOTUsMTF9LCBcCisgICAgeyAgICAxOTEsMTB9LCB7ICAgIDM4MywxMX0sIHsgICAgMjA3LDEzfSwgeyAgICAgNjMsMTJ9LCBcCisgICAgeyAgICAxMjcsMTF9LCB7ICAgIDI1NSwxMH0sIHsgICAgNTExLDExfSwgeyAgICAyNzEsMTB9LCBcCisgICAgeyAgICA1NDMsMTF9LCB7ICAgIDI4NywxMH0sIHsgICAgNTc1LDExfSwgeyAgICAzMDMsMTJ9LCBcCisgICAgeyAgICAxNTksMTF9LCB7ICAgIDMxOSwxMH0sIHsgICAgNjM5LDExfSwgeyAgICAzMzUsMTB9LCBcCisgICAgeyAgICA2NzEsMTF9LCB7ICAgIDM1MSwxMH0sIHsgICAgNzAzLDExfSwgeyAgICAzNjcsMTJ9LCBcCisgICAgeyAgICAxOTEsMTF9LCB7ICAgIDM4MywxMH0sIHsgICAgNzY3LDExfSwgeyAgICA0MTUsMTJ9LCBcCisgICAgeyAgICAyMjMsMTF9LCB7ICAgIDQ0NywxM30sIHsgICAgMTI3LDEyfSwgeyAgICAyNTUsMTF9LCBcCisgICAgeyAgICA1NDMsMTJ9LCB7ICAgIDI4NywxMX0sIHsgICAgNTc1LDEwfSwgeyAgIDExNTEsMTF9LCBcCisgICAgeyAgICA2MDcsMTJ9LCB7ICAgIDMxOSwxMX0sIHsgICAgNjM5LDEwfSwgeyAgIDEyNzksMTF9LCBcCisgICAgeyAgICA2NzEsMTJ9LCB7ICAgIDM1MSwxMX0sIHsgICAgNzAzLDEzfSwgeyAgICAxOTEsMTJ9LCBcCisgICAgeyAgICAzODMsMTF9LCB7ICAgIDc2NywxMn0sIHsgICAgNDE1LDExfSwgeyAgICA4MzEsMTJ9LCBcCisgICAgeyAgICA0NDcsMTF9LCB7ICAgIDg5NSwxMn0sIHsgICAgNDc5LDE0fSwgeyAgICAxMjcsMTN9LCBcCisgICAgeyAgICAyNTUsMTJ9LCB7ICAgIDU3NSwxMX0sIHsgICAxMTUxLDEyfSwgeyAgICA2MDcsMTN9LCBcCisgICAgeyAgICAzMTksMTJ9LCB7ICAgIDcwMywxMX0sIHsgICAxNDA3LDEyfSwgeyAgICA3MzUsMTN9LCBcCisgICAgeyAgICAzODMsMTJ9LCB7ICAgIDgzMSwxM30sIHsgICAgNDQ3LDEyfSwgeyAgICA5NTksMTR9LCBcCisgICAgeyAgICAyNTUsMTN9LCB7ICAgIDUxMSwxMn0sIHsgICAxMDg3LDEzfSwgeyAgICA1NzUsMTJ9LCBcCisgICAgeyAgIDExNTEsMTN9LCB7ICAgIDYzOSwxMn0sIHsgICAxMjc5LDEzfSwgeyAgICA3MDMsMTJ9LCBcCisgICAgeyAgIDE0MDcsMTR9LCB7ICAgIDM4MywxM30sIHsgICAgNzY3LDEyfSwgeyAgIDE1MzUsMTN9LCBcCisgICAgeyAgICA4MzEsMTJ9LCB7ICAgMTY2MywxM30sIHsgICAgOTU5LDE1fSwgeyAgICAyNTUsMTR9LCBcCisgICAgeyAgICA1MTEsMTN9LCB7ICAgMTIxNSwxNH0sIHsgICAgNjM5LDEzfSwgeyAgIDE0MDcsMTR9LCBcCisgICAgeyAgICA3NjcsMTN9LCB7ICAgMTY2MywxNH0sIHsgICAgODk1LDEzfSwgeyAgIDE3OTEsMTV9LCBcCisgICAgeyAgICA1MTEsMTR9LCB7ICAxNjM4NCwxNX0sIHsgIDMyNzY4LDE2fSwgeyAgNjU1MzYsMTd9LCBcCisgICAgeyAxMzEwNzIsMTh9LCB7IDI2MjE0NCwxOX0sIHsgNTI0Mjg4LDIwfSwgezEwNDg1NzYsMjF9LCBcCisgICAgezIwOTcxNTIsMjJ9LCB7NDE5NDMwNCwyM30sIHs4Mzg4NjA4LDI0fSB9CisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzX1NJWkUgMTU5CisjZGVmaW5lIFNRUl9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA1MDU2CisKKyNkZWZpbmUgTVVMTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNVUxMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgIDEwMAorI2RlZmluZSBNVUxMT19NVUxfTl9USFJFU0hPTEQgICAgICAgICAgICAxMTM1NQorCisjZGVmaW5lIERDX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTI0CisjZGVmaW5lIERDX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAgNDM4CisjZGVmaW5lIERDX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTUzCisjZGVmaW5lIERDX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAgMzE4CisKKyNkZWZpbmUgSU5WX01VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgNjIKKyNkZWZpbmUgSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgICAzODQKKyNkZWZpbmUgSU5WX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA0MDIKKworI2RlZmluZSBCSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgIDM4MQorI2RlZmluZSBSRURDXzFfVE9fUkVEQ19OX1RIUkVTSE9MRCAgICAgICAgIDExMAorCisjZGVmaW5lIE1VX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAxNzUyCisjZGVmaW5lIE1VX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAxODk1CisjZGVmaW5lIE1VUElfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTc0CisjZGVmaW5lIE1VX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAxMzg3CisjZGVmaW5lIE1VX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAxNzg3CisKKyNkZWZpbmUgUE9XTV9TRUNfVEFCTEUgIDEsMTMsNjYsODIsNTc5CisKKyNkZWZpbmUgTUFUUklYMjJfU1RSQVNTRU5fVEhSRVNIT0xEICAgICAgICAgMTUKKyNkZWZpbmUgSEdDRF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgICAzMTgKKyNkZWZpbmUgSEdDRF9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzNjMKKyNkZWZpbmUgSEdDRF9SRURVQ0VfVEhSRVNIT0xEICAgICAgICAgICAgIDIzODQKKyNkZWZpbmUgR0NEX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDI1MDQKKyNkZWZpbmUgR0NERVhUX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA2NzEKKyNkZWZpbmUgSkFDT0JJX0JBU0VfTUVUSE9EICAgICAgICAgICAgICAgICAgIDMKKworI2RlZmluZSBHRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBHRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgICAyNQorI2RlZmluZSBTRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgMzc1NAorI2RlZmluZSBTRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgODA5NworCisjZGVmaW5lIEZBQ19EU0NfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgOTUxCisjZGVmaW5lIEZBQ19PRERfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDI0CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL2V2Ni9tb2RfMV80LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvZXY2L21vZF8xXzQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYzQyYWUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL2V2Ni9tb2RfMV80LmFzbQpAQCAtMCwwICsxLDMzNiBAQAorZG5sIEFscGhhIG1wbl9tb2RfMXNfNHAKKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBUT0RPOgorQyAgKiBPcHRpbWlzZS4gIDIuNzUgYy9sIHNob3VsZCBiZSBwb3NzaWJsZS4KK0MgICogV3JpdGUgYSBwcm9wZXIgbXBuX21vZF8xc180cF9jcHMuICBUaGUgY29kZSBiZWxvdyB3YXMgY29tcGlsZXIgZ2VuZXJhdGVkLgorQyAgKiBPcHRpbWlzZSBmZWVkLWluIGNvZGUsIHN0YXJ0aW5nIHRoZSBzdyBwaXBlbGluZSBpbiBzd2l0Y2ggY29kZS4KK0MgICogU2hvcnRlbiBzb2Z0d2FyZSBwaXBlbGluZS4gIFRoZSBtdWwgaW5zdHJ1Y3Rpb25zIGFyZSBzY2hlZHVsZWQgdG9vIGZhcgorQyAgICBmcm9tIHRoZWlyIHVzZXJzLiAgRml4aW5nIHRoaXMgd2lsbCBhbGxvdyB1cyB0byB1c2UgZmV3ZXIgcmVnaXN0ZXJzLgorQyAgKiBJZiB3ZSBjYW5ub3QgcmVkdWNlIHJlZ2lzdGVyIHVzYWdlLCB3cml0ZSBwZXJoYXBzIHNtYWxsLW4gYmFzZWNhc2UuCitDICAqIERvZXMgdGhpcyB3b3JrIGZvciBQSUM/CisKK0MgICAgICBjeWNsZXMvbGltYgorQyBFVjQ6ICAgICA/CitDIEVWNTogICAgMjMKK0MgRVY2OiAgICAgMworCitkZWZpbmUoYGFwJywgICAgIGByMTYnKQorZGVmaW5lKGBuJywgICAgICBgcjE3JykKK2RlZmluZShgcGwnLCAgICAgYHIyNCcpCitkZWZpbmUoYHBoJywgICAgIGByMjUnKQorZGVmaW5lKGBybCcsICAgICBgcjYnKQorZGVmaW5lKGByaCcsICAgICBgcjcnKQorZGVmaW5lKGBCMW1vZGInLCBgcjEnKQorZGVmaW5lKGBCMm1vZGInLCBgcjInKQorZGVmaW5lKGBCM21vZGInLCBgcjMnKQorZGVmaW5lKGBCNG1vZGInLCBgcjQnKQorZGVmaW5lKGBCNW1vZGInLCBgcjUnKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX21vZF8xc180cCkKKwlsZGEJcjMwLCAtNjQocjMwKQorCXN0cQlyOSwgOChyMzApCisJbGRxCUIxbW9kYiwgMTYocjE5KQorCXN0cQlyMTAsIDE2KHIzMCkKKwlsZHEJQjJtb2RiLCAyNChyMTkpCisJc3RxCXIxMSwgMjQocjMwKQorCWxkcQlCM21vZGIsIDMyKHIxOSkKKwlzdHEJcjEyLCAzMihyMzApCisJbGRxCUI0bW9kYiwgNDAocjE5KQorCXN0cQlyMTMsIDQwKHIzMCkKKwlsZHEJQjVtb2RiLCA0OChyMTkpCisJczhhZGRxCW4sIGFwLCBhcAkJQyBwb2ludCBhcCBhdCB2ZWN0b3IgZW5kCisKKwlhbmQJbiwgMywgcjAKKwlsZGEJbiwgLTQobikKKwliZXEJcjAsIEwoYjApCisJbGRhCXI2LCAtMihyMCkKKwlibHQJcjYsIEwoYjEpCisJYmVxCXI2LCBMKGIyKQorCitMKGIzKToJbGRxCXIyMSwgLTE2KGFwKQorCWxkcQlyMjIsIC04KGFwKQorCWxkcQlyMjAsIC0yNChhcCkKKwltdWxxCXIyMSwgQjFtb2RiLCByOAorCXVtdWxoCXIyMSwgQjFtb2RiLCByMTIKKwltdWxxCXIyMiwgQjJtb2RiLCByOQorCXVtdWxoCXIyMiwgQjJtb2RiLCByMTMKKwlhZGRxCXI4LCByMjAsIHBsCisJY21wdWx0CXBsLCByOCwgcjAKKwlhZGRxCXIwLCByMTIsIHBoCisJYWRkcQlyOSwgcGwsIHJsCisJY21wdWx0CXJsLCByOSwgcjAKKwlhZGRxCXIxMywgcGgsIHBoCisJYWRkcQlyMCwgcGgsIHJoCisJbGRhCWFwLCAtNTYoYXApCisJYnIJTChjb20pCisKK0woYjApOglsZHEJcjIxLCAtMjQoYXApCisJbGRxCXIyMiwgLTE2KGFwKQorCWxkcQlyMjMsIC04KGFwKQorCWxkcQlyMjAsIC0zMihhcCkKKwltdWxxCXIyMSwgQjFtb2RiLCByOAorCXVtdWxoCXIyMSwgQjFtb2RiLCByMTIKKwltdWxxCXIyMiwgQjJtb2RiLCByOQorCXVtdWxoCXIyMiwgQjJtb2RiLCByMTMKKwltdWxxCXIyMywgQjNtb2RiLCByMTAKKwl1bXVsaAlyMjMsIEIzbW9kYiwgcjI3CisJYWRkcQlyOCwgcjIwLCBwbAorCWNtcHVsdAlwbCwgcjgsIHIwCisJYWRkcQlyMCwgcjEyLCBwaAorCWFkZHEJcjksIHBsLCBwbAorCWNtcHVsdAlwbCwgcjksIHIwCisJYWRkcQlyMTMsIHBoLCBwaAorCWFkZHEJcjAsIHBoLCBwaAorCWFkZHEJcjEwLCBwbCwgcmwKKwljbXB1bHQJcmwsIHIxMCwgcjAKKwlhZGRxCXIyNywgcGgsIHBoCisJYWRkcQlyMCwgcGgsIHJoCisJbGRhCWFwLCAtNjQoYXApCisJYnIJTChjb20pCisKK0woYjEpOgliaXMJcjMxLCByMzEsIHJoCisJbGRxCXJsLCAtOChhcCkKKwlsZGEJYXAsIC00MChhcCkKKwlicglMKGNvbSkKKworTChiMik6CWxkcQlyaCwgLTgoYXApCisJbGRxCXJsLCAtMTYoYXApCisJbGRhCWFwLCAtNDgoYXApCisKK0woY29tKToJYmxlCW4sIEwoZWQzKQorCWxkcQlyMjEsIDgoYXApCisJbGRxCXIyMiwgMTYoYXApCisJbGRxCXIyMywgMjQoYXApCisJbGRxCXIyMCwgMChhcCkKKwlsZGEJbiwgLTQobikKKwlsZGEJYXAsIC0zMihhcCkKKwltdWxxCXIyMSwgQjFtb2RiLCByOAorCXVtdWxoCXIyMSwgQjFtb2RiLCByMTIKKwltdWxxCXIyMiwgQjJtb2RiLCByOQorCXVtdWxoCXIyMiwgQjJtb2RiLCByMTMKKwltdWxxCXIyMywgQjNtb2RiLCByMTAKKwl1bXVsaAlyMjMsIEIzbW9kYiwgcjI3CisJbXVscQlybCwgQjRtb2RiLCByMTEKKwl1bXVsaAlybCwgQjRtb2RiLCByMjgKKwlibGUJbiwgTChlZDIpCisKKwlBTElHTigxNikKK0wodG9wKToJbGRxCXIyMSwgOChhcCkKKwltdWxxCXJoLCBCNW1vZGIsIHJsCisJYWRkcQlyOCwgcjIwLCBwbAorCWxkcQlyMjIsIDE2KGFwKQorCWNtcHVsdAlwbCwgcjgsIHIwCisJdW11bGgJcmgsIEI1bW9kYiwgcmgKKwlsZHEJcjIzLCAyNChhcCkKKwlhZGRxCXIwLCByMTIsIHBoCisJYWRkcQlyOSwgcGwsIHBsCisJbXVscQlyMjEsIEIxbW9kYiwgcjgKKwljbXB1bHQJcGwsIHI5LCByMAorCWFkZHEJcjEzLCBwaCwgcGgKKwl1bXVsaAlyMjEsIEIxbW9kYiwgcjEyCisJbGRhCWFwLCAtMzIoYXApCisJYWRkcQlyMCwgcGgsIHBoCisJYWRkcQlyMTAsIHBsLCBwbAorCW11bHEJcjIyLCBCMm1vZGIsIHI5CisJY21wdWx0CXBsLCByMTAsIHIwCisJYWRkcQlyMjcsIHBoLCBwaAorCWFkZHEJcjExLCBwbCwgcGwKKwl1bXVsaAlyMjIsIEIybW9kYiwgcjEzCisJYWRkcQlyMCwgcGgsIHBoCisJY21wdWx0CXBsLCByMTEsIHIwCisJYWRkcQlyMjgsIHBoLCBwaAorCW11bHEJcjIzLCBCM21vZGIsIHIxMAorCWxkcQlyMjAsIDMyKGFwKQorCWFkZHEJcGwsIHJsLCBybAorCXVtdWxoCXIyMywgQjNtb2RiLCByMjcKKwlhZGRxCXIwLCBwaCwgcGgKKwljbXB1bHQJcmwsIHBsLCByMAorCW11bHEJcmwsIEI0bW9kYiwgcjExCisJYWRkcQlwaCwgcmgsIHJoCisJdW11bGgJcmwsIEI0bW9kYiwgcjI4CisJYWRkcQlyMCwgcmgsIHJoCisJbGRhCW4sIC00KG4pCisJYmd0CW4sIEwodG9wKQorCitMKGVkMik6CW11bHEJcmgsIEI1bW9kYiwgcmwKKwlhZGRxCXI4LCByMjAsIHBsCisJdW11bGgJcmgsIEI1bW9kYiwgcmgKKwljbXB1bHQJcGwsIHI4LCByMAorCWFkZHEJcjAsIHIxMiwgcGgKKwlhZGRxCXI5LCBwbCwgcGwKKwljbXB1bHQJcGwsIHI5LCByMAorCWFkZHEJcjEzLCBwaCwgcGgKKwlhZGRxCXIwLCBwaCwgcGgKKwlhZGRxCXIxMCwgcGwsIHBsCisJY21wdWx0CXBsLCByMTAsIHIwCisJYWRkcQlyMjcsIHBoLCBwaAorCWFkZHEJcjExLCBwbCwgcGwKKwlhZGRxCXIwLCBwaCwgcGgKKwljbXB1bHQJcGwsIHIxMSwgcjAKKwlhZGRxCXIyOCwgcGgsIHBoCisJYWRkcQlwbCwgcmwsIHJsCisJYWRkcQlyMCwgcGgsIHBoCisJY21wdWx0CXJsLCBwbCwgcjAKKwlhZGRxCXBoLCByaCwgcmgKKwlhZGRxCXIwLCByaCwgcmgKKworTChlZDMpOgltdWxxCXJoLCBCMW1vZGIsIHI4CisJdW11bGgJcmgsIEIxbW9kYiwgcmgKKwlhZGRxCXI4LCBybCwgcmwKKwljbXB1bHQJcmwsIHI4LCByMAorCWFkZHEJcjAsIHJoLCByaAorCisJbGRxCXIyNCwgOChyMTkpCQlDIGNudAorCXNsbAlyaCwgcjI0LCByaAorCXN1YnEJcjMxLCByMjQsIHIyNQorCXNybAlybCwgcjI1LCByMgorCXNsbAlybCwgcjI0LCBybAorCW9yCXIyLCByaCwgcmgKKworCWxkcQlyMjMsIDAocjE5KQkJQyBiaQorCW11bHEJcmgsIHIyMywgcjgKKwl1bXVsaAlyaCwgcjIzLCByOQorCWFkZHEJcmgsIDEsIHI3CisJYWRkcQlyOCwgcmwsIHI4CQlDIHFsCisJY21wdWx0CXI4LCBybCwgcjAKKwlhZGRxCXI5LCByNywgcjkKKwlhZGRxCXIwLCByOSwgcjkJCUMgcWgKKwltdWxxCXI5LCByMTgsIHIyMQkJQyBxaCAqIGIKKwlzdWJxCXJsLCByMjEsIHJsCisJY21wdWx0CXI4LCBybCwgcjAJCUMgcmwgPiBxbAorCW5lZ3EJcjAsIHIwCisJYW5kCXIwLCByMTgsIHIwCisJYWRkcQlybCwgcjAsIHJsCisJY21wdWxlCXIxOCwgcmwsIHIwCQlDIHJsID49IGIKKwluZWdxCXIwLCByMAorCWFuZAlyMCwgcjE4LCByMAorCXN1YnEJcmwsIHIwLCBybAorCisJc3JsCXJsLCByMjQsIHIwCisKKwlsZHEJcjksIDgocjMwKQorCWxkcQlyMTAsIDE2KHIzMCkKKwlsZHEJcjExLCAyNChyMzApCisJbGRxCXIxMiwgMzIocjMwKQorCWxkcQlyMTMsIDQwKHIzMCkKKwlsZGEJcjMwLCA2NChyMzApCisJcmV0CXIzMSwgKHIyNiksIDEKK0VQSUxPR1VFKCkKKworUFJPTE9HVUUobXBuX21vZF8xc180cF9jcHMsZ3ApCisJbGRhCXIzMCwgLTMyKHIzMCkKKwlzdHEJcjI2LCAwKHIzMCkKKwlzdHEJcjksIDgocjMwKQorCXN0cQlyMTAsIDE2KHIzMCkKKwlzdHEJcjExLCAyNChyMzApCisJbW92CXIxNiwgcjExCisJTEVBKAlyNCwgX19jbHpfdGFiKQorCWxkYQlyMTAsIDY1KHIzMSkKKwljbXBiZ2UJcjMxLCByMTcsIHIxCisJc3JsCXIxLCAxLCByMQorCXhvcglyMSwgMTI3LCByMQorCWFkZHEJcjEsIHI0LCByMQorCWxkcV91CXIyLCAwKHIxKQorCWV4dGJsCXIyLCByMSwgcjIKKwlzOHN1YnEJcjIsIDcsIHIyCisJc3JsCXIxNywgcjIsIHIzCisJc3VicQlyMTAsIHIyLCByMTAKKwlhZGRxCXIzLCByNCwgcjMKKwlsZHFfdQlyMSwgMChyMykKKwlleHRibAlyMSwgcjMsIHIxCisJc3VicQlyMTAsIHIxLCByMTAKKwlzbGwJcjE3LCByMTAsIHI5CisJbW92CXI5LCByMTYKKwlqc3IJcjI2LCBtcG5faW52ZXJ0X2xpbWIKKwlMREdQKAlyMjksIDAocjI2KSkKKwlzdWJxCXIzMSwgcjEwLCByMgorCWxkYQlyMSwgMShyMzEpCisJc2xsCXIxLCByMTAsIHIxCisJc3VicQlyMzEsIHI5LCByMworCXNybAlyMCwgcjIsIHIyCisJbGRxCXIyNiwgMChyMzApCisJYmlzCXIyLCByMSwgcjIKKwlzdHEJcjAsIDAocjExKQorCXN0cQlyMTAsIDgocjExKQorCW11bHEJcjIsIHIzLCByMgorCXNybAlyMiwgcjEwLCByMworCXVtdWxoCXIyLCByMCwgcjEKKwlzdHEJcjMsIDE2KHIxMSkKKwltdWxxCXIyLCByMCwgcjMKKwlvcm5vdAlyMzEsIHIxLCByMQorCXN1YnEJcjEsIHIyLCByMQorCW11bHEJcjEsIHI5LCByMQorCWFkZHEJcjEsIHI5LCByMgorCWNtcHVsZQlyMSwgcjMsIHIzCisJY21vdmVxCXIzLCByMiwgcjEKKwlzcmwJcjEsIHIxMCwgcjMKKwl1bXVsaAlyMSwgcjAsIHIyCisJc3RxCXIzLCAyNChyMTEpCisJbXVscQlyMSwgcjAsIHIzCisJb3Jub3QJcjMxLCByMiwgcjIKKwlzdWJxCXIyLCByMSwgcjIKKwltdWxxCXIyLCByOSwgcjIKKwlhZGRxCXIyLCByOSwgcjEKKwljbXB1bGUJcjIsIHIzLCByMworCWNtb3ZlcQlyMywgcjEsIHIyCisJc3JsCXIyLCByMTAsIHIxCisJdW11bGgJcjIsIHIwLCByMworCXN0cQlyMSwgMzIocjExKQorCW11bHEJcjIsIHIwLCByMQorCW9ybm90CXIzMSwgcjMsIHIzCisJc3VicQlyMywgcjIsIHIzCisJbXVscQlyMywgcjksIHIzCisJYWRkcQlyMywgcjksIHIyCisJY21wdWxlCXIzLCByMSwgcjEKKwljbW92ZXEJcjEsIHIyLCByMworCXNybAlyMywgcjEwLCByMgorCXVtdWxoCXIzLCByMCwgcjEKKwlzdHEJcjIsIDQwKHIxMSkKKwltdWxxCXIzLCByMCwgcjAKKwlvcm5vdAlyMzEsIHIxLCByMQorCXN1YnEJcjEsIHIzLCByMQorCW11bHEJcjEsIHI5LCByMQorCWFkZHEJcjEsIHI5LCByOQorCWNtcHVsZQlyMSwgcjAsIHIwCisJY21vdmVxCXIwLCByOSwgcjEKKwlsZHEJcjksIDgocjMwKQorCXNybAlyMSwgcjEwLCByMQorCWxkcQlyMTAsIDE2KHIzMCkKKwlzdHEJcjEsIDQ4KHIxMSkKKwlsZHEJcjExLCAyNChyMzApCisJbGRhCXIzMCwgMzIocjMwKQorCXJldAlyMzEsIChyMjYpLCAxCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL2V2Ni9tdWxfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL2V2Ni9tdWxfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVlMTljZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvZXY2L211bF8xLmFzbQpAQCAtMCwwICsxLDQ5NiBAQAorZG5sICBBbHBoYSBldjYgbXBuX211bF8xIC0tIE11bHRpcGx5IGEgbGltYiB2ZWN0b3Igd2l0aCBhIGxpbWIgYW5kIHN0b3JlIHRoZQorZG5sICByZXN1bHQgaW4gYSBzZWNvbmQgbGltYiB2ZWN0b3IuCisKK2RubCAgQ29weXJpZ2h0IDIwMDAsIDIwMDEsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBJTlBVVCBQQVJBTUVURVJTCitDIHJlc19wdHIJcjE2CitDIHMxX3B0cglyMTcKK0Mgc2l6ZQkJcjE4CitDIHMyX2xpbWIJcjE5CisKK0MgVGhpcyBjb2RlIHJ1bnMgYXQgMi4yNSBjeWNsZXMvbGltYiBvbiBFVjYuCisKK0MgVGhpcyBjb2RlIHdhcyB3cml0dGVuIGluIGNsb3NlIGNvb3BlcmF0aW9uIHdpdGggZXY2IHBpcGVsaW5lIGV4cGVydAorQyBTdGV2ZSBSb290LiAgQW55IGVycm9ycyBhcmUgdGVnZSdzIGZhdWx0LCB0aG91Z2guCisKK0MgQ29kZSBzdHJ1Y3R1cmU6CisKK0MgIGNvZGUgZm9yIG4gPCA4CitDICBjb2RlIGZvciBuID4gOAljb2RlIGZvciAobiBtb2QgOCkKK0MJCQljb2RlIGZvciAobiBkaXYgOCkJZmVlZC1pbiBjb2RlCitDCQkJCQkJOC13YXkgdW5yb2xsZWQgbG9vcAorQwkJCQkJCXdpbmQtZG93biBjb2RlCisKK0MgU29tZSBub3RlcyBhYm91dCB1bnJvbGxlZCBsb29wOgorQworQyAgIHIxLXI4ICAgICBtdWx0aXBsaWVzIGFuZCB3b3JrdXAKK0MgICByMjEtcjI4ICAgbXVsdGlwbGllcyBhbmQgd29ya3VwCitDICAgcjktcjEyICAgIGxvYWRzCitDICAgcjAgICAgICAgLTEKK0MgICByMjAscjI5LHIxMy1yMTUgIHNjcmFtYmxlCitDCitDICAgV2UncmUgZG9pbmcgNyBvZiB0aGUgOCBjYXJyeSBwcm9wYWdhdGlvbnMgd2l0aCBhIGJyIGZpeHVwIGNvZGUgYW5kIDEgd2l0aCBhCitDICAgcHV0LXRoZS1jYXJyeS1pbnRvLWhpLiAgVGhlIGlkZWEgaXMgdGhhdCB0aGVzZSBicmFuY2hlcyBhcmUgdmVyeSByYXJlbHkKK0MgICB0YWtlbiwgYW5kIHNpbmNlIGEgbm9uLXRha2VuIGJyYW5jaCBjb25zdW1lcyBubyByZXNvdXJjZXMsIHRoYXQgaXMgYmV0dGVyCitDICAgdGhhbiBhbiBhZGRxLgorQworQyAgIFNvZnR3YXJlIHBpcGVsaW5lOiBhIGxvYWQgaW4gY3ljbGUgIzA5LCBmZWVkcyBhIG11bCBpbiBjeWNsZSAjMTYsIGZlZWRzIGFuCitDICAgYWRkIE5FWFQgY3ljbGUgIzA5IHdoaWNoIGZlZWRzIGEgc3RvcmUgaW4gTkVYVCBjeWNsZSAjMDIKKworQyBUaGUgY29kZSBjb3VsZCB1c2Ugc29tZSBmdXJ0aGVyIHdvcms6CitDICAgMS4gU3BlZWQgdXAgcmVhbGx5IHNtYWxsIG11bHRpcGxpZXMuICBUaGUgZGVmYXVsdCBhbHBoYS9tdWxfMS5hc20gY29kZSBpcworQyAgICAgIGZhc3RlciB0aGFuIHRoaXMgZm9yIHNpemUgPCAzLgorQyAgIDIuIEltcHJvdmUgZmVlZC1pbiBjb2RlLCBwZXJoYXBzIHdpdGggdGhlIGVxdWl2YWxlbnQgb2Ygc3dpdGNoKG4lOCkgdW5sZXNzCitDICAgICAgdGhhdCBpcyB0b28gY29zdGx5LgorQyAgIDMuIENvbnNpZGVyIHVzaW5nIDQtd2F5IHVucm9sbGluZywgZXZlbiBpZiB0aGF0IHJ1bnMgc2xvd2VyLgorQyAgIDQuIFJlZHVjZSByZWdpc3RlciB1c2FnZS4gIEluIHBhcnRpY3VsYXIsIHRyeSB0byBhdm9pZCB1c2luZyByMjkuCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fbXVsXzEpCisJY21wdWx0CXIxOCwJOCwJcjEKKwliZXEJcjEsCSRMYXJnZQorJExzbWFsbDoKKwlsZHEJcjIsMChyMTcpCUMgcjIgPSBzMV9saW1iCisJbGRhCXIxOCwtMShyMTgpCUMgc2l6ZS0tCisJbXVscQlyMixyMTkscjMJQyByMyA9IHByb2RfbG93CisJYmljCXIzMSxyMzEscjQJQyBjbGVhciBjeV9saW1iCisJdW11bGgJcjIscjE5LHIwCUMgcjAgPSBwcm9kX2hpZ2gKKwliZXEJcjE4LCRMZTFhCUMganVtcCBpZiBzaXplIHdhcyA9PSAxCisJbGRxCXIyLDgocjE3KQlDIHIyID0gczFfbGltYgorCWxkYQlyMTgsLTEocjE4KQlDIHNpemUtLQorCXN0cQlyMywwKHIxNikKKwliZXEJcjE4LCRMZTJhCUMganVtcCBpZiBzaXplIHdhcyA9PSAyCisJQUxJR04oOCkKKyRMb3BhOgltdWxxCXIyLHIxOSxyMwlDIHIzID0gcHJvZF9sb3cKKwlhZGRxCXI0LHIwLHIwCUMgY3lfbGltYiA9IGN5X2xpbWIgKyAnY3knCisJbGRhCXIxOCwtMShyMTgpCUMgc2l6ZS0tCisJdW11bGgJcjIscjE5LHI0CUMgcjQgPSBjeV9saW1iCisJbGRxCXIyLDE2KHIxNykJQyByMiA9IHMxX2xpbWIKKwlsZGEJcjE3LDgocjE3KQlDIHMxX3B0cisrCisJYWRkcQlyMyxyMCxyMwlDIHIzID0gY3lfbGltYiArIHByb2RfbG93CisJc3RxCXIzLDgocjE2KQorCWNtcHVsdAlyMyxyMCxyMAlDIHIwID0gY2FycnkgZnJvbSAoY3lfbGltYiArIHByb2RfbG93KQorCWxkYQlyMTYsOChyMTYpCUMgcmVzX3B0cisrCisJYm5lCXIxOCwkTG9wYQorCiskTGUyYToJbXVscQlyMixyMTkscjMJQyByMyA9IHByb2RfbG93CisJYWRkcQlyNCxyMCxyMAlDIGN5X2xpbWIgPSBjeV9saW1iICsgJ2N5JworCXVtdWxoCXIyLHIxOSxyNAlDIHI0ID0gY3lfbGltYgorCWFkZHEJcjMscjAscjMJQyByMyA9IGN5X2xpbWIgKyBwcm9kX2xvdworCWNtcHVsdAlyMyxyMCxyMAlDIHIwID0gY2FycnkgZnJvbSAoY3lfbGltYiArIHByb2RfbG93KQorCXN0cQlyMyw4KHIxNikKKwlhZGRxCXI0LHIwLHIwCUMgY3lfbGltYiA9IHByb2RfaGlnaCArIGN5CisJcmV0CXIzMSwocjI2KSwxCiskTGUxYToJc3RxCXIzLDAocjE2KQorCXJldAlyMzEsKHIyNiksMQorCiskTGFyZ2U6CisJbGRhCXIzMCwJLTIyNChyMzApCisJc3RxCXIyNiwJMChyMzApCisJc3RxCXI5LAk4KHIzMCkKKwlzdHEJcjEwLAkxNihyMzApCisJc3RxCXIxMSwJMjQocjMwKQorCXN0cQlyMTIsCTMyKHIzMCkKKwlzdHEJcjEzLAk0MChyMzApCisJc3RxCXIxNCwJNDgocjMwKQorCXN0cQlyMTUsCTU2KHIzMCkKKwlzdHEJcjI5LAk2NChyMzApCisKKwlhbmQJcjE4LAk3LAlyMjAJQyBjb3VudCBmb3IgdGhlIGZpcnN0IGxvb3AsIDAtNworCXNybAlyMTgsCTMsCXIxOAlDIGNvdW50IGZvciB1bnJvbGxlZCBsb29wCisJYmlzCXIzMSwJcjMxLAlyMjEKKwliZXEJcjIwLAkkTF84X29yX21vcmUJQyBza2lwIGZpcnN0IGxvb3AKKworJExfOV9vcl9tb3JlOgorCWxkcQlyMiwwKHIxNykJQyByMiA9IHMxX2xpbWIKKwlsZGEJcjE3LDgocjE3KQlDIHMxX3B0cisrCisJbGRhCXIyMCwtMShyMjApCUMgc2l6ZS0tCisJbXVscQlyMixyMTkscjMJQyByMyA9IHByb2RfbG93CisJdW11bGgJcjIscjE5LHIyMQlDIHIyMSA9IHByb2RfaGlnaAorCWJlcQlyMjAsJExlMWIJQyBqdW1wIGlmIHNpemUgd2FzID09IDEKKwliaXMJcjMxLCByMzEsIHIwCUMgRklYTUU6IHNob3VsZG4ndCBuZWVkIHRoaXMKKwlsZHEJcjIsMChyMTcpCUMgcjIgPSBzMV9saW1iCisJbGRhCXIxNyw4KHIxNykJQyBzMV9wdHIrKworCWxkYQlyMjAsLTEocjIwKQlDIHNpemUtLQorCXN0cQlyMywwKHIxNikKKwlsZGEJcjE2LDgocjE2KQlDIHJlc19wdHIrKworCWJlcQlyMjAsJExlMmIJQyBqdW1wIGlmIHNpemUgd2FzID09IDIKKwlBTElHTig4KQorJExvcGI6CW11bHEJcjIscjE5LHIzCUMgcjMgPSBwcm9kX2xvdworCWFkZHEJcjIxLHIwLHIwCUMgY3lfbGltYiA9IGN5X2xpbWIgKyAnY3knCisJbGRhCXIyMCwtMShyMjApCUMgc2l6ZS0tCisJdW11bGgJcjIscjE5LHIyMQlDIHIyMSA9IHByb2RfaGlnaAorCWxkcQlyMiwwKHIxNykJQyByMiA9IHMxX2xpbWIKKwlsZGEJcjE3LDgocjE3KQlDIHMxX3B0cisrCisJYWRkcQlyMyxyMCxyMwlDIHIzID0gY3lfbGltYiArIHByb2RfbG93CisJc3RxCXIzLDAocjE2KQorCWNtcHVsdAlyMyxyMCxyMAlDIHIwID0gY2FycnkgZnJvbSAoY3lfbGltYiArIHByb2RfbG93KQorCWxkYQlyMTYsOChyMTYpCUMgcmVzX3B0cisrCisJYm5lCXIyMCwkTG9wYgorCiskTGUyYjoJbXVscQlyMixyMTkscjMJQyByMyA9IHByb2RfbG93CisJYWRkcQlyMjEscjAscjAJQyBjeV9saW1iID0gY3lfbGltYiArICdjeScKKwl1bXVsaAlyMixyMTkscjIxCUMgcjIxID0gcHJvZF9oaWdoCisJYWRkcQlyMyxyMCxyMwlDIHIzID0gY3lfbGltYiArIHByb2RfbG93CisJY21wdWx0CXIzLHIwLHIwCUMgcjAgPSBjYXJyeSBmcm9tIChjeV9saW1iICsgcHJvZF9sb3cpCisJc3RxCXIzLDAocjE2KQorCWxkYQlyMTYsOChyMTYpCUMgcmVzX3B0cisrCisJYWRkcQlyMjEscjAscjIxCUMgY3lfbGltYiA9IHByb2RfaGlnaCArIGN5CisJYnIJcjMxLAkkTF84X29yX21vcmUKKyRMZTFiOglzdHEJcjMsMChyMTYpCisJbGRhCXIxNiw4KHIxNikJQyByZXNfcHRyKysKKworJExfOF9vcl9tb3JlOgorCWxkYQlyMCwJLTEocjMxKQkJQyBwdXQgLTEgaW4gcjAsIGZvciB0cmlja3kgbG9vcCBjb250cm9sCisJbGRhCXIxNywJLTMyKHIxNykJQyBMMSBib29ra2VlcGluZworCWxkYQlyMTgsCS0xKHIxOCkJCUMgZGVjcmVtZW50IGNvdW50CisKKwlsZHEJcjksCTMyKHIxNykJCUMgTDEKKwlsZHEJcjEwLAk0MChyMTcpCQlDIEwxCisJbXVscQlyOSwJcjE5LAlyMjIJQyBVMSAjMDcKKwlsZHEJcjExLAk0OChyMTcpCQlDIEwxCisJdW11bGgJcjksCXIxOSwJcjIzCUMgVTEgIzA4CisJbGRxCXIxMiwJNTYocjE3KQkJQyBMMQorCW11bHEJcjEwLAlyMTksCXIyNAlDIFUxICMwOQorCWxkcQlyOSwJNjQocjE3KQkJQyBMMQorCisJbGRhCXIxNywJNjQocjE3KQkJQyBMMSBib29ra2VlcGluZworCisJdW11bGgJcjEwLAlyMTksCXIyNQlDIFUxICMxMQorCW11bHEJcjExLAlyMTksCXIyNglDIFUxICMxMgorCXVtdWxoCXIxMSwJcjE5LAlyMjcJQyBVMSAjMTMKKwltdWxxCXIxMiwJcjE5LAlyMjgJQyBVMSAjMTQKKwlsZHEJcjEwLAk4KHIxNykJCUMgTDEKKwl1bXVsaAlyMTIsCXIxOSwJcjEJQyBVMSAjMTUKKwlsZHEJcjExLAkxNihyMTcpCQlDIEwxCisJbXVscQlyOSwJcjE5LAlyMglDIFUxICMxNgorCWxkcQlyMTIsCTI0KHIxNykJCUMgTDEKKwl1bXVsaAlyOSwJcjE5LAlyMwlDIFUxICMxNworCWFkZHEJcjIxLAlyMjIsCXIxMwlDIEwxIG1vdgorCW11bHEJcjEwLAlyMTksCXI0CUMgVTEgIzE4CisJYWRkcQlyMjMsCXIyNCwJcjIyCUMgTDAgc3VtIDIgbXVsJ3MKKwljbXB1bHQJcjEzLAlyMjEsCXIxNAlDIEwxIGNhcnJ5IGZyb20gc3VtCisJYmd0CXIxOCwJJExfMTZfb3JfbW9yZQorCisJY21wdWx0CXIyMiwJcjI0LAlyMjQJQyBVMCBjYXJyeSBmcm9tIHN1bQorCXVtdWxoCXIxMCwJcjE5LAlyNQlDIFUxICMwMgorCWFkZHEJcjI1LAlyMjYsCXIyMwlDIFUwIHN1bSAyIG11bCdzCisJbXVscQlyMTEsCXIxOSwJcjYJQyBVMSAjMDMKKwljbXB1bHQJcjIzLAlyMjYsCXIyNQlDIFUwIGNhcnJ5IGZyb20gc3VtCisJdW11bGgJcjExLAlyMTksCXI3CUMgVTEgIzA0CisJYWRkcQlyMjcsCXIyOCwJcjI4CUMgVTAgc3VtIDIgbXVsJ3MKKwltdWxxCXIxMiwJcjE5LAlyOAlDIFUxICMwNQorCWNtcHVsdAlyMjgsCXIyNywJcjE1CUMgTDAgY2FycnkgZnJvbSBzdW0KKwlsZGEJcjE2LAkzMihyMTYpCQlDIEwxIGJvb2trZWVwaW5nCisJYWRkcQlyMTMsCXIzMSwJcjEzCUMgVTAgc3RhcnQgY2FycnkgY2FzY2FkZQorCXVtdWxoCXIxMiwJcjE5LAlyMjEJQyBVMSAjMDYKKwlicglyMzEsCSRyZXQwYworCiskTF8xNl9vcl9tb3JlOgorQyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlzdWJxCXIxOCwxLHIxOAorCWNtcHVsdAlyMjIsCXIyNCwJcjI0CUMgVTAgY2FycnkgZnJvbSBzdW0KKwlsZHEJcjksCTMyKHIxNykJCUMgTDEKKworCXVtdWxoCXIxMCwJcjE5LAlyNQlDIFUxICMwMgorCWFkZHEJcjI1LAlyMjYsCXIyMwlDIFUwIHN1bSAyIG11bCdzCisJbXVscQlyMTEsCXIxOSwJcjYJQyBVMSAjMDMKKwljbXB1bHQJcjIzLAlyMjYsCXIyNQlDIFUwIGNhcnJ5IGZyb20gc3VtCisJdW11bGgJcjExLAlyMTksCXI3CUMgVTEgIzA0CisJYWRkcQlyMjcsCXIyOCwJcjI4CUMgVTAgc3VtIDIgbXVsJ3MKKwltdWxxCXIxMiwJcjE5LAlyOAlDIFUxICMwNQorCWNtcHVsdAlyMjgsCXIyNywJcjE1CUMgTDAgY2FycnkgZnJvbSBzdW0KKwlsZGEJcjE2LAkzMihyMTYpCQlDIEwxIGJvb2trZWVwaW5nCisJYWRkcQlyMTMsCXIzMSwJcjEzCUMgVTAgc3RhcnQgY2FycnkgY2FzY2FkZQorCisJdW11bGgJcjEyLAlyMTksCXIyMQlDIFUxICMwNgorQwliZXEJcjEzLAkkZml4MHcJCUMgVTAKKyRyZXQwdzoJYWRkcQlyMjIsCXIxNCwJcjI2CUMgTDAKKwlsZHEJcjEwLAk0MChyMTcpCQlDIEwxCisKKwltdWxxCXI5LAlyMTksCXIyMglDIFUxICMwNworCWJlcQlyMjYsCSRmaXgxdwkJQyBVMAorJHJldDF3OglhZGRxCXIyMywJcjI0LAlyMjcJQyBMMAorCWxkcQlyMTEsCTQ4KHIxNykJCUMgTDEKKworCXVtdWxoCXI5LAlyMTksCXIyMwlDIFUxICMwOAorCWJlcQlyMjcsCSRmaXgydwkJQyBVMAorJHJldDJ3OglhZGRxCXIyOCwJcjI1LAlyMjgJQyBMMAorCWxkcQlyMTIsCTU2KHIxNykJCUMgTDEKKworCW11bHEJcjEwLAlyMTksCXIyNAlDIFUxICMwOQorCWJlcQlyMjgsCSRmaXgzdwkJQyBVMAorJHJldDN3OglhZGRxCXIxLAlyMiwJcjIwCUMgTDAgc3VtIDIgbXVsJ3MKKwlsZHEJcjksCTY0KHIxNykJCUMgTDEKKworCWFkZHEJcjMsCXI0LAlyMglDIEwwICMxMCAyIG11bCdzCisJbGRhCXIxNywJNjQocjE3KQkJQyBMMSBib29ra2VlcGluZworCWNtcHVsdAlyMjAsCXIxLAlyMjkJQyBVMCBjYXJyeSBmcm9tIHN1bQorCisJdW11bGgJcjEwLAlyMTksCXIyNQlDIFUxICMxMQorCWNtcHVsdAlyMiwJcjQsCXI0CUMgVTAgY2FycnkgZnJvbSBzdW0KKwlzdHEJcjEzLAktMzIocjE2KQlDIEwwCisJc3RxCXIyNiwJLTI0KHIxNikJQyBMMQorCisJbXVscQlyMTEsCXIxOSwJcjI2CUMgVTEgIzEyCisJYWRkcQlyNSwJcjYsCXIxNAlDIFUwIHN1bSAyIG11bCdzCisJc3RxCXIyNywJLTE2KHIxNikJQyBMMAorCXN0cQlyMjgsCS04KHIxNikJCUMgTDEKKworCXVtdWxoCXIxMSwJcjE5LAlyMjcJQyBVMSAjMTMKKwljbXB1bHQJcjE0LAlyNiwJcjMJQyBVMCBjYXJyeSBmcm9tIHN1bQorQyBjb3VsZCBkbyBjcm9zcy1qdW1waW5nIGhlcmU6CitDCWJyYQkkTF9taWRkbGVfb2ZfdW5yb2xsZWRfbG9vcAorCW11bHEJcjEyLAlyMTksCXIyOAlDIFUxICMxNAorCWFkZHEJcjcsCXIzLAlyNQlDIEwwIGVhdCBjYXJyeQorCWFkZHEJcjIwLAlyMTUsCXIyMAlDIFUwIGNhcnJ5IGNhc2NhZGUKKwlsZHEJcjEwLAk4KHIxNykJCUMgTDEKKworCXVtdWxoCXIxMiwJcjE5LAlyMQlDIFUxICMxNQorCWJlcQlyMjAsCSRmaXg0CQlDIFUwCiskcmV0NHc6CWFkZHEJcjIsCXIyOSwJcjYJQyBMMAorCWxkcQlyMTEsCTE2KHIxNykJCUMgTDEKKworCW11bHEJcjksCXIxOSwJcjIJQyBVMSAjMTYKKwliZXEJcjYsCSRmaXg1CQlDIFUwCiskcmV0NXc6CWFkZHEJcjE0LAlyNCwJcjcJQyBMMAorCWxkcQlyMTIsCTI0KHIxNykJCUMgTDEKKworCXVtdWxoCXI5LAlyMTksCXIzCUMgVTEgIzE3CisJYmVxCXI3LAkkZml4NgkJQyBVMAorJHJldDZ3OglhZGRxCXI1LAlyOCwJcjgJQyBMMCBzdW0gMgorCWFkZHEJcjIxLAlyMjIsCXIxMwlDIEwxIHN1bSAyIG11bCdzCisKKwltdWxxCXIxMCwJcjE5LAlyNAlDIFUxICMxOAorCWFkZHEJcjIzLAlyMjQsCXIyMglDIEwwIHN1bSAyIG11bCdzCisJY21wdWx0CXIxMywJcjIxLAlyMTQJQyBMMSBjYXJyeSBmcm9tIHN1bQorCWJsZQlyMTgsCSRMZW5kCQlDIFUwCitDIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUFMSUdOKDE2KQorJExvb3A6CisJdW11bGgJcjAsCXIxOCwJcjE4CUMgVTEgIzAxIGRlY3JlbWVudCByMTghCisJY21wdWx0CXI4LAlyNSwJcjI5CUMgTDAgY2FycnkgZnJvbSBsYXN0IGJ1bmNoCisJY21wdWx0CXIyMiwJcjI0LAlyMjQJQyBVMCBjYXJyeSBmcm9tIHN1bQorCWxkcQlyOSwJMzIocjE3KQkJQyBMMQorCisJdW11bGgJcjEwLAlyMTksCXI1CUMgVTEgIzAyCisJYWRkcQlyMjUsCXIyNiwJcjIzCUMgVTAgc3VtIDIgbXVsJ3MKKwlzdHEJcjIwLAkwKHIxNikJCUMgTDAKKwlzdHEJcjYsCTgocjE2KQkJQyBMMQorCisJbXVscQlyMTEsCXIxOSwJcjYJQyBVMSAjMDMKKwljbXB1bHQJcjIzLAlyMjYsCXIyNQlDIFUwIGNhcnJ5IGZyb20gc3VtCisJc3RxCXI3LAkxNihyMTYpCQlDIEwwCisJc3RxCXI4LAkyNChyMTYpCQlDIEwxCisKKwl1bXVsaAlyMTEsCXIxOSwJcjcJQyBVMSAjMDQKKwliaXMJcjMxLAlyMzEsCXIzMQlDIEwwIHN0IHNsb3NoCisJYmlzCXIzMSwJcjMxLAlyMzEJQyBMMSBzdCBzbG9zaAorCWFkZHEJcjI3LAlyMjgsCXIyOAlDIFUwIHN1bSAyIG11bCdzCisKKwltdWxxCXIxMiwJcjE5LAlyOAlDIFUxICMwNQorCWNtcHVsdAlyMjgsCXIyNywJcjE1CUMgTDAgY2FycnkgZnJvbSBzdW0KKwlsZGEJcjE2LAk2NChyMTYpCQlDIEwxIGJvb2trZWVwaW5nCisJYWRkcQlyMTMsCXIyOSwJcjEzCUMgVTAgc3RhcnQgY2FycnkgY2FzY2FkZQorCisJdW11bGgJcjEyLAlyMTksCXIyMQlDIFUxICMwNgorCWJlcQlyMTMsCSRmaXgwCQlDIFUwCiskcmV0MDoJYWRkcQlyMjIsCXIxNCwJcjI2CUMgTDAKKwlsZHEJcjEwLAk0MChyMTcpCQlDIEwxCisKKwltdWxxCXI5LAlyMTksCXIyMglDIFUxICMwNworCWJlcQlyMjYsCSRmaXgxCQlDIFUwCiskcmV0MToJYWRkcQlyMjMsCXIyNCwJcjI3CUMgTDAKKwlsZHEJcjExLAk0OChyMTcpCQlDIEwxCisKKwl1bXVsaAlyOSwJcjE5LAlyMjMJQyBVMSAjMDgKKwliZXEJcjI3LAkkZml4MgkJQyBVMAorJHJldDI6CWFkZHEJcjI4LAlyMjUsCXIyOAlDIEwwCisJbGRxCXIxMiwJNTYocjE3KQkJQyBMMQorCisJbXVscQlyMTAsCXIxOSwJcjI0CUMgVTEgIzA5CisJYmVxCXIyOCwJJGZpeDMJCUMgVTAKKyRyZXQzOglhZGRxCXIxLAlyMiwJcjIwCUMgTDAgc3VtIDIgbXVsJ3MKKwlsZHEJcjksCTY0KHIxNykJCUMgTDEKKworCWFkZHEJcjMsCXI0LAlyMglDIEwwICMxMCAyIG11bCdzCisJYmlzCXIzMSwJcjMxLAlyMzEJQyBVMSBtdWwgaG9sZQorCWxkYQlyMTcsCTY0KHIxNykJCUMgTDEgYm9va2tlZXBpbmcKKwljbXB1bHQJcjIwLAlyMSwJcjI5CUMgVTAgY2FycnkgZnJvbSBzdW0KKworCXVtdWxoCXIxMCwJcjE5LAlyMjUJQyBVMSAjMTEKKwljbXB1bHQJcjIsCXI0LAlyNAlDIFUwIGNhcnJ5IGZyb20gc3VtCisJc3RxCXIxMywJLTMyKHIxNikJQyBMMAorCXN0cQlyMjYsCS0yNChyMTYpCUMgTDEKKworCW11bHEJcjExLAlyMTksCXIyNglDIFUxICMxMgorCWFkZHEJcjUsCXI2LAlyMTQJQyBVMCBzdW0gMiBtdWwncworCXN0cQlyMjcsCS0xNihyMTYpCUMgTDAKKwlzdHEJcjI4LAktOChyMTYpCQlDIEwxCisKKwl1bXVsaAlyMTEsCXIxOSwJcjI3CUMgVTEgIzEzCisJYmlzCXIzMSwJcjMxLAlyMzEJQyBMMCBzdCBzbG9zaAorCWJpcwlyMzEsCXIzMSwJcjMxCUMgTDEgc3Qgc2xvc2gKKwljbXB1bHQJcjE0LAlyNiwJcjMJQyBVMCBjYXJyeSBmcm9tIHN1bQorJExfbWlkZGxlX29mX3Vucm9sbGVkX2xvb3A6CisJbXVscQlyMTIsCXIxOSwJcjI4CUMgVTEgIzE0CisJYWRkcQlyNywJcjMsCXI1CUMgTDAgZWF0IGNhcnJ5CisJYWRkcQlyMjAsCXIxNSwJcjIwCUMgVTAgY2FycnkgY2FzY2FkZQorCWxkcQlyMTAsCTgocjE3KQkJQyBMMQorCisJdW11bGgJcjEyLAlyMTksCXIxCUMgVTEgIzE1CisJYmVxCXIyMCwJJGZpeDQJCUMgVTAKKyRyZXQ0OglhZGRxCXIyLAlyMjksCXI2CUMgTDAKKwlsZHEJcjExLAkxNihyMTcpCQlDIEwxCisKKwltdWxxCXI5LAlyMTksCXIyCUMgVTEgIzE2CisJYmVxCXI2LAkkZml4NQkJQyBVMAorJHJldDU6CWFkZHEJcjE0LAlyNCwJcjcJQyBMMAorCWxkcQlyMTIsCTI0KHIxNykJCUMgTDEKKworCXVtdWxoCXI5LAlyMTksCXIzCUMgVTEgIzE3CisJYmVxCXI3LAkkZml4NgkJQyBVMAorJHJldDY6CWFkZHEJcjUsCXI4LAlyOAlDIEwwIHN1bSAyCisJYWRkcQlyMjEsCXIyMiwJcjEzCUMgTDEgc3VtIDIgbXVsJ3MKKworCW11bHEJcjEwLAlyMTksCXI0CUMgVTEgIzE4CisJYWRkcQlyMjMsCXIyNCwJcjIyCUMgTDAgc3VtIDIgbXVsJ3MKKwljbXB1bHQJcjEzLAlyMjEsCXIxNAlDIEwxIGNhcnJ5IGZyb20gc3VtCisJYmd0CXIxOCwJJExvb3AJCUMgVTAKK0MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskTGVuZDoKKwljbXB1bHQJcjgsCXI1LAlyMjkJQyBMMCBjYXJyeSBmcm9tIGxhc3QgYnVuY2gKKwljbXB1bHQJcjIyLAlyMjQsCXIyNAlDIFUwIGNhcnJ5IGZyb20gc3VtCisKKwl1bXVsaAlyMTAsCXIxOSwJcjUJQyBVMSAjMDIKKwlhZGRxCXIyNSwJcjI2LAlyMjMJQyBVMCBzdW0gMiBtdWwncworCXN0cQlyMjAsCTAocjE2KQkJQyBMMAorCXN0cQlyNiwJOChyMTYpCQlDIEwxCisKKwltdWxxCXIxMSwJcjE5LAlyNglDIFUxICMwMworCWNtcHVsdAlyMjMsCXIyNiwJcjI1CUMgVTAgY2FycnkgZnJvbSBzdW0KKwlzdHEJcjcsCTE2KHIxNikJCUMgTDAKKwlzdHEJcjgsCTI0KHIxNikJCUMgTDEKKworCXVtdWxoCXIxMSwJcjE5LAlyNwlDIFUxICMwNAorCWFkZHEJcjI3LAlyMjgsCXIyOAlDIFUwIHN1bSAyIG11bCdzCisKKwltdWxxCXIxMiwJcjE5LAlyOAlDIFUxICMwNQorCWNtcHVsdAlyMjgsCXIyNywJcjE1CUMgTDAgY2FycnkgZnJvbSBzdW0KKwlsZGEJcjE2LAk2NChyMTYpCQlDIEwxIGJvb2trZWVwaW5nCisJYWRkcQlyMTMsCXIyOSwJcjEzCUMgVTAgc3RhcnQgY2FycnkgY2FzY2FkZQorCisJdW11bGgJcjEyLAlyMTksCXIyMQlDIFUxICMwNgorCWJlcQlyMTMsCSRmaXgwYwkJQyBVMAorJHJldDBjOglhZGRxCXIyMiwJcjE0LAlyMjYJQyBMMAorCWJlcQlyMjYsCSRmaXgxYwkJQyBVMAorJHJldDFjOglhZGRxCXIyMywJcjI0LAlyMjcJQyBMMAorCWJlcQlyMjcsCSRmaXgyYwkJQyBVMAorJHJldDJjOglhZGRxCXIyOCwJcjI1LAlyMjgJQyBMMAorCWJlcQlyMjgsCSRmaXgzYwkJQyBVMAorJHJldDNjOglhZGRxCXIxLAlyMiwJcjIwCUMgTDAgc3VtIDIgbXVsJ3MKKwlhZGRxCXIzLAlyNCwJcjIJQyBMMCAjMTAgMiBtdWwncworCWxkYQlyMTcsCTY0KHIxNykJCUMgTDEgYm9va2tlZXBpbmcKKwljbXB1bHQJcjIwLAlyMSwJcjI5CUMgVTAgY2FycnkgZnJvbSBzdW0KKwljbXB1bHQJcjIsCXI0LAlyNAlDIFUwIGNhcnJ5IGZyb20gc3VtCisJc3RxCXIxMywJLTMyKHIxNikJQyBMMAorCXN0cQlyMjYsCS0yNChyMTYpCUMgTDEKKwlhZGRxCXI1LAlyNiwJcjE0CUMgVTAgc3VtIDIgbXVsJ3MKKwlzdHEJcjI3LAktMTYocjE2KQlDIEwwCisJc3RxCXIyOCwJLTgocjE2KQkJQyBMMQorCWNtcHVsdAlyMTQsCXI2LAlyMwlDIFUwIGNhcnJ5IGZyb20gc3VtCisJYWRkcQlyNywJcjMsCXI1CUMgTDAgZWF0IGNhcnJ5CisJYWRkcQlyMjAsCXIxNSwJcjIwCUMgVTAgY2FycnkgY2FzY2FkZQorCWJlcQlyMjAsCSRmaXg0YwkJQyBVMAorJHJldDRjOglhZGRxCXIyLAlyMjksCXI2CUMgTDAKKwliZXEJcjYsCSRmaXg1YwkJQyBVMAorJHJldDVjOglhZGRxCXIxNCwJcjQsCXI3CUMgTDAKKwliZXEJcjcsCSRmaXg2YwkJQyBVMAorJHJldDZjOglhZGRxCXI1LAlyOCwJcjgJQyBMMCBzdW0gMgorCWNtcHVsdAlyOCwJcjUsCXIyOQlDIEwwIGNhcnJ5IGZyb20gbGFzdCBidW5jaAorCXN0cQlyMjAsCTAocjE2KQkJQyBMMAorCXN0cQlyNiwJOChyMTYpCQlDIEwxCisJc3RxCXI3LAkxNihyMTYpCQlDIEwwCisJc3RxCXI4LAkyNChyMTYpCQlDIEwxCisJYWRkcQlyMjksCXIyMSwJcjAKKworCWxkcQlyMjYsCTAocjMwKQorCWxkcQlyOSwJOChyMzApCisJbGRxCXIxMCwJMTYocjMwKQorCWxkcQlyMTEsCTI0KHIzMCkKKwlsZHEJcjEyLAkzMihyMzApCisJbGRxCXIxMywJNDAocjMwKQorCWxkcQlyMTQsCTQ4KHIzMCkKKwlsZHEJcjE1LAk1NihyMzApCisJbGRxCXIyOSwJNjQocjMwKQorCWxkYQlyMzAsCTIyNChyMzApCisJcmV0CXIzMSwJKHIyNiksCTEKKworQyAkZml4MHc6CWJpcwlyMTQsCXIyOSwJcjE0CUMgam9pbiBjYXJyaWVzCitDCWJyCXIzMSwJJHJldDB3CiskZml4MXc6CWJpcwlyMjQsCXIxNCwJcjI0CUMgam9pbiBjYXJyaWVzCisJYnIJcjMxLAkkcmV0MXcKKyRmaXgydzoJYmlzCXIyNSwJcjI0LAlyMjUJQyBqb2luIGNhcnJpZXMKKwlicglyMzEsCSRyZXQydworJGZpeDN3OgliaXMJcjE1LAlyMjUsCXIxNQlDIGpvaW4gY2FycmllcworCWJyCXIzMSwJJHJldDN3CiskZml4MDoJYmlzCXIxNCwJcjI5LAlyMTQJQyBqb2luIGNhcnJpZXMKKwlicglyMzEsCSRyZXQwCiskZml4MToJYmlzCXIyNCwJcjE0LAlyMjQJQyBqb2luIGNhcnJpZXMKKwlicglyMzEsCSRyZXQxCiskZml4MjoJYmlzCXIyNSwJcjI0LAlyMjUJQyBqb2luIGNhcnJpZXMKKwlicglyMzEsCSRyZXQyCiskZml4MzoJYmlzCXIxNSwJcjI1LAlyMTUJQyBqb2luIGNhcnJpZXMKKwlicglyMzEsCSRyZXQzCiskZml4NDoJYmlzCXIyOSwJcjE1LAlyMjkJQyBqb2luIGNhcnJpZXMKKwlicglyMzEsCSRyZXQ0CiskZml4NToJYmlzCXI0LAlyMjksCXI0CUMgam9pbiBjYXJyaWVzCisJYnIJcjMxLAkkcmV0NQorJGZpeDY6CWFkZHEJcjUsCXI0LAlyNQlDIGNhbid0IGNhcnJ5IHR3aWNlIQorCWJyCXIzMSwJJHJldDYKKyRmaXgwYzoJYmlzCXIxNCwJcjI5LAlyMTQJQyBqb2luIGNhcnJpZXMKKwlicglyMzEsCSRyZXQwYworJGZpeDFjOgliaXMJcjI0LAlyMTQsCXIyNAlDIGpvaW4gY2FycmllcworCWJyCXIzMSwJJHJldDFjCiskZml4MmM6CWJpcwlyMjUsCXIyNCwJcjI1CUMgam9pbiBjYXJyaWVzCisJYnIJcjMxLAkkcmV0MmMKKyRmaXgzYzoJYmlzCXIxNSwJcjI1LAlyMTUJQyBqb2luIGNhcnJpZXMKKwlicglyMzEsCSRyZXQzYworJGZpeDRjOgliaXMJcjI5LAlyMTUsCXIyOQlDIGpvaW4gY2FycmllcworCWJyCXIzMSwJJHJldDRjCiskZml4NWM6CWJpcwlyNCwJcjI5LAlyNAlDIGpvaW4gY2FycmllcworCWJyCXIzMSwJJHJldDVjCiskZml4NmM6CWFkZHEJcjUsCXI0LAlyNQlDIGNhbid0IGNhcnJ5IHR3aWNlIQorCWJyCXIzMSwJJHJldDZjCisKK0VQSUxPR1VFKG1wbl9tdWxfMSkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9ldjYvbmFpbHMvUkVBRE1FIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9ldjYvbmFpbHMvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMTRhYzUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL2V2Ni9uYWlscy9SRUFETUUKQEAgLTAsMCArMSw2NSBAQAorQ29weXJpZ2h0IDIwMDIsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCisKKworCitUaGlzIGRpcmVjdG9yeSBjb250YWlucyBhc3NlbWJseSBjb2RlIGZvciBuYWlscy1lbmFibGVkIDIxMjY0LiAgVGhlIGNvZGUgaXMgbm90Cit2ZXJ5IHdlbGwgb3B0aW1pemVkLgorCitGb3IgYWRkbXVsX04sIGFzIE4gZ3Jvd3MgbGFyZ2VyLCB3ZSBjb3VsZCBtYWtlIG11bHRpcGxlIGxvYWRzIHRvZ2V0aGVyLCB0aGVuIGRvCithYm91dCAzLjMgaS9jLiAgMTAgY3ljbGVzIGFmdGVyIHRoZSBsYXN0IGxvYWQsIHdlIGNhbiBpbmNyZWFzZSB0byA0IGkvYy4gIFRoaXMKK3dvdWxkIHN1cmVseSBhbGxvdyBhZGRtdWxfNCB0byBydW4gYXQgMiBjL2wsIGJ1dCB0aGUgc2FtZSBzaG91bGQgYmUgcG9zc2libGUKK2Fsc28gZm9yIGFkZG11bF8zIGFuZCBwZXJoYXBzIGV2ZW4gYWRkbXVsXzIuCisKKworCQljdXJyZW50CQlmYWlyCQliZXN0CitSb3V0aW5lCQljL2wgIHVucm9sbAljL2wgIHVucm9sbAljL2wgIGkvYworbXVsXzEJCTMuMjUJCTIuNzUJCTIuNzUgMy4yNzMKK2FkZG11bF8xCTQuMAk0CTMuNQk0IDE0CTMuMjUgMy4zODUKK2FkZG11bF8yCTQuMAkxCTIuNQkyIDEwCTIuMjUgMy4zMzMKK2FkZG11bF8zCTMuMAkxCTIuMzMJMiAxNAkyICAgIDMuMzMzCithZGRtdWxfNAkyLjUJMQkyLjEyNQkyIDE3CTIgICAgMy4xMzUKKworYWRkbXVsXzUJCQkyCTEgMTAKK2FkZG11bF82CQkJMgkxIDEyCithZGRtdWxfNwkJCTIJMSAxNAorCisoVGhlICJiZXN0IiBjb2x1bW4gZG9lc24ndCBhY2NvdW50IGZvciBib29ra2VlcGluZyBpbnN0cnVjdGlvbnMgYW5kCit0aGVyZWJ5IGFzc3VtZXMgaW5maW5pdGUgdW5yb2xsaW5nLikKKworQmFzZWNhc2UgdXNhZ2VzOgorCisxCSBhZGRtdWxfMQorMgkgYWRkbXVsXzIKKzMJIGFkZG11bF8zCis0CSBhZGRtdWxfNAorNQkgYWRkbXVsXzMgKyBhZGRtdWxfMgkyLjM5OTgKKzYJIGFkZG11bF80ICsgYWRkbXVsXzIKKzcJIGFkZG11bF80ICsgYWRkbXVsXzMKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvZXY2L25haWxzL2FkZG11bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvZXY2L25haWxzL2FkZG11bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTFkNGU2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9ldjYvbmFpbHMvYWRkbXVsXzEuYXNtCkBAIC0wLDAgKzEsMzk2IEBACitkbmwgIEFscGhhIGV2NiBuYWlscyBtcG5fYWRkbXVsXzEuCisKK2RubCAgQ29weXJpZ2h0IDIwMDIsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgIGN5Y2xlcy9saW1iCitDIEVWNDogICAgNDIKK0MgRVY1OiAgICAxOAorQyBFVjY6ICAgICA0CisKK0MgVE9ETworQyAgKiBSZXJvbGwgbG9vcCBmb3IgMy43NSBjL2wgd2l0aCBjdXJyZW50IDQtd2F5IHVucm9sbGluZy4KK0MgICogVGhlIGxvb3AgaXMgb3ZlcnNjaGVkdWxlZCB3cnQgbG9hZHMgYW5kIHdydCBtdWx0aXBsaWVzLCBpbiBwYXJ0aWN1bGFyCitDICAgIHVtdWxoLgorQyAgKiBVc2UgRlAgbG9vcCBjb3VudCBhbmQgbXVsdGlwbGUgZXhpdCBwb2ludHMsIHRoYXQgd291bGQgc2ltcGxpZnkgZmVlZC1pbiBscDAKK0MgICAgYW5kIHdvdWxkIHdvcmsgc2luY2UgdGhlIGxvb3Agc3RydWN0dXJlIGlzIHJlYWxseSByZWd1bGFyLgorCitDICBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJyxgcjE2JykKK2RlZmluZShgdXAnLGByMTcnKQorZGVmaW5lKGBuJywgYHIxOCcpCitkZWZpbmUoYHZsMCcsYHIxOScpCisKK2RlZmluZShgbnVtYl9tYXNrJyxgcjYnKQorCitkZWZpbmUoYG0wYScsYHIwJykKK2RlZmluZShgbTBiJyxgcjEnKQorZGVmaW5lKGBtMWEnLGByMicpCitkZWZpbmUoYG0xYicsYHIzJykKK2RlZmluZShgbTJhJyxgcjIwJykKK2RlZmluZShgbTJiJyxgcjIxJykKK2RlZmluZShgbTNhJyxgcjIyJykKK2RlZmluZShgbTNiJyxgcjIzJykKKworZGVmaW5lKGBhY2MwJyxgcjI1JykKK2RlZmluZShgYWNjMScsYHIyNycpCisKK2RlZmluZShgdWwwJyxgcjQnKQorZGVmaW5lKGB1bDEnLGByNScpCitkZWZpbmUoYHVsMicsYHI0JykKK2RlZmluZShgdWwzJyxgcjUnKQorCitkZWZpbmUoYHJsMCcsYHIyNCcpCitkZWZpbmUoYHJsMScsYHIyNCcpCitkZWZpbmUoYHJsMicsYHIyNCcpCitkZWZpbmUoYHJsMycsYHIyNCcpCisKK2RlZmluZShgdDAnLGByNycpCitkZWZpbmUoYHQxJyxgcjgnKQorCitkZWZpbmUoYE5BSUxfQklUUycsYEdNUF9OQUlMX0JJVFMnKQorZGVmaW5lKGBOVU1CX0JJVFMnLGBHTVBfTlVNQl9CSVRTJykKKworZG5sICBUaGlzIGRlY2xhcmF0aW9uIGlzIG11bmdlZCBieSBjb25maWd1cmUKK05BSUxTX1NVUFBPUlQoMi02MykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9hZGRtdWxfMSkKKwlzbGwJdmwwLCBOQUlMX0JJVFMsIHZsMAorCWxkYQludW1iX21hc2ssIC0xKHIzMSkKKwlzcmwJbnVtYl9tYXNrLCBOQUlMX0JJVFMsIG51bWJfbWFzaworCisJYW5kCW4sCTMsCXIyNQorCWNtcGVxCXIyNSwJMSwJcjIxCisJYm5lCXIyMSwJTCgxbTQpCisJY21wZXEJcjI1LAkyLAlyMjEKKwlibmUJcjIxLAlMKDJtNCkKKwliZXEJcjI1LAlMKDBtNCkKKworTCgzbTQpOglsZHEJdWwzLAkwKHVwKQorCWxkYQluLAktNChuKQorCWxkcQl1bDAsCTgodXApCisJbXVscQl2bDAsCXVsMywJbTNhCisJdW11bGgJdmwwLAl1bDMsCW0zYgorCWxkcQl1bDEsCTE2KHVwKQorCWxkYQl1cCwJMjQodXApCisJbGRhCXJwLAktOChycCkKKwltdWxxCXZsMCwJdWwwLAltMGEKKwl1bXVsaAl2bDAsCXVsMCwJbTBiCisJYmdlCW4sCUwoZ2UzKQorCisJbXVscQl2bDAsCXVsMSwJbTFhCisJdW11bGgJdmwwLAl1bDEsCW0xYgorCWxkcQlybDMsCTgocnApCisJc3JsCW0zYSxOQUlMX0JJVFMsCXQwCisJYWRkcQl0MCwJcjMxLAlhY2MxCisJYWRkcQlybDMsCWFjYzEsCWFjYzEKKwlsZHEJcmwwLAkxNihycCkKKwlzcmwJbTBhLE5BSUxfQklUUywJdDAKKwlhZGRxCXQwLAltM2IsCWFjYzAKKwlzcmwJYWNjMSxOVU1CX0JJVFMsCXQxCisJYnIJcjMxLAlMKHRhMykKKworTChnZTMpOglsZHEJdWwyLAkwKHVwKQorCW11bHEJdmwwLAl1bDEsCW0xYQorCXVtdWxoCXZsMCwJdWwxLAltMWIKKwlsZHEJcmwzLAk4KHJwKQorCXNybAltM2EsTkFJTF9CSVRTLAl0MAorCWxkcQl1bDMsCTgodXApCisJbGRhCW4sCS00KG4pCisJbXVscQl2bDAsCXVsMiwJbTJhCisJYWRkcQl0MCwJcjMxLAlhY2MxCisJdW11bGgJdmwwLAl1bDIsCW0yYgorCWFkZHEJcmwzLAlhY2MxLAlhY2MxCisJbGRxCXJsMCwJMTYocnApCisJc3JsCW0wYSxOQUlMX0JJVFMsCXQwCisJbGRxCXVsMCwJMTYodXApCisJbXVscQl2bDAsCXVsMywJbTNhCisJYWRkcQl0MCwJbTNiLAlhY2MwCisJc3JsCWFjYzEsTlVNQl9CSVRTLAl0MQorCWJyCXIzMSwJTChlbDMpCisKK0woMG00KToJbGRhCW4sCS04KG4pCisJbGRxCXVsMiwJMCh1cCkKKwlsZHEJdWwzLAk4KHVwKQorCW11bHEJdmwwLAl1bDIsCW0yYQorCXVtdWxoCXZsMCwJdWwyLAltMmIKKwlsZHEJdWwwLAkxNih1cCkKKwltdWxxCXZsMCwJdWwzLAltM2EKKwl1bXVsaAl2bDAsCXVsMywJbTNiCisJbGRxCXVsMSwJMjQodXApCisJbGRhCXVwLAkzMih1cCkKKwltdWxxCXZsMCwJdWwwLAltMGEKKwl1bXVsaAl2bDAsCXVsMCwJbTBiCisJYmdlCW4sCUwoZ2U0KQorCisJbGRxCXJsMiwJMChycCkKKwlzcmwJbTJhLE5BSUxfQklUUywJdDAKKwltdWxxCXZsMCwJdWwxLAltMWEKKwlhZGRxCXQwLAlyMzEsCWFjYzAKKwl1bXVsaAl2bDAsCXVsMSwJbTFiCisJYWRkcQlybDIsCWFjYzAsCWFjYzAKKwlsZHEJcmwzLAk4KHJwKQorCXNybAltM2EsTkFJTF9CSVRTLAl0MAorCWFkZHEJdDAsCW0yYiwJYWNjMQorCXNybAlhY2MwLE5VTUJfQklUUywJdDEKKwlicglyMzEsCUwodGE0KQorCitMKGdlNCk6CWxkcQlybDIsCTAocnApCisJc3JsCW0yYSxOQUlMX0JJVFMsCXQwCisJbGRxCXVsMiwJMCh1cCkKKwltdWxxCXZsMCwJdWwxLAltMWEKKwlhZGRxCXQwLAlyMzEsCWFjYzAKKwl1bXVsaAl2bDAsCXVsMSwJbTFiCisJYWRkcQlybDIsCWFjYzAsCWFjYzAKKwlsZHEJcmwzLAk4KHJwKQorCXNybAltM2EsTkFJTF9CSVRTLAl0MAorCWxkcQl1bDMsCTgodXApCisJbGRhCW4sCS00KG4pCisJbXVscQl2bDAsCXVsMiwJbTJhCisJYWRkcQl0MCwJbTJiLAlhY2MxCisJc3JsCWFjYzAsTlVNQl9CSVRTLAl0MQorCWJyCXIzMSwJTChlbDApCisKK0woMm00KToJbGRhCW4sCS00KG4pCisJbGRxCXVsMCwJMCh1cCkKKwlsZHEJdWwxLAk4KHVwKQorCWxkYQl1cCwJMTYodXApCisJbGRhCXJwLAktMTYocnApCisJbXVscQl2bDAsCXVsMCwJbTBhCisJdW11bGgJdmwwLAl1bDAsCW0wYgorCWJnZQluLAlMKGdlMikKKworCW11bHEJdmwwLAl1bDEsCW0xYQorCXVtdWxoCXZsMCwJdWwxLAltMWIKKwlsZHEJcmwwLAkxNihycCkKKwlzcmwJbTBhLE5BSUxfQklUUywJdDAKKwlhZGRxCXQwLAlyMzEsCWFjYzAKKwlhZGRxCXJsMCwJYWNjMCwJYWNjMAorCWxkcQlybDEsCTI0KHJwKQorCXNybAltMWEsTkFJTF9CSVRTLAl0MAorCWFkZHEJdDAsCW0wYiwJYWNjMQorCXNybAlhY2MwLE5VTUJfQklUUywJdDEKKwlicglyMzEsCUwodGEyKQorCitMKGdlMik6CWxkcQl1bDIsCTAodXApCisJbXVscQl2bDAsCXVsMSwJbTFhCisJdW11bGgJdmwwLAl1bDEsCW0xYgorCWxkcQl1bDMsCTgodXApCisJbGRhCW4sCS00KG4pCisJbXVscQl2bDAsCXVsMiwJbTJhCisJdW11bGgJdmwwLAl1bDIsCW0yYgorCWxkcQlybDAsCTE2KHJwKQorCXNybAltMGEsTkFJTF9CSVRTLAl0MAorCWxkcQl1bDAsCTE2KHVwKQorCW11bHEJdmwwLAl1bDMsCW0zYQorCWFkZHEJdDAsCXIzMSwJYWNjMAorCXVtdWxoCXZsMCwJdWwzLAltM2IKKwlhZGRxCXJsMCwJYWNjMCwJYWNjMAorCWxkcQlybDEsCTI0KHJwKQorCXNybAltMWEsTkFJTF9CSVRTLAl0MAorCWxkcQl1bDEsCTI0KHVwKQorCWxkYQl1cCwJMzIodXApCisJbGRhCXJwLAkzMihycCkKKwltdWxxCXZsMCwJdWwwLAltMGEKKwlhZGRxCXQwLAltMGIsCWFjYzEKKwlzcmwJYWNjMCxOVU1CX0JJVFMsCXQxCisJYmdlCW4sCUwoZWwyKQorCisJYnIJcjMxLAlMKHRhNikKKworTCgxbTQpOglsZGEJbiwJLTQobikKKwlsZHEJdWwxLAkwKHVwKQorCWxkYQl1cCwJOCh1cCkKKwlsZGEJcnAsCS0yNChycCkKKwliZ2UJbiwJTChnZTEpCisKKwltdWxxCXZsMCwJdWwxLAltMWEKKwl1bXVsaAl2bDAsCXVsMSwJbTFiCisJbGRxCXJsMSwJMjQocnApCisJc3JsCW0xYSxOQUlMX0JJVFMsCXQwCisJYWRkcQlybDEsCXQwLAlhY2MxCisJYW5kCWFjYzEsbnVtYl9tYXNrLAlyMjgKKwlzcmwJYWNjMSxOVU1CX0JJVFMsCXQxCisJc3RxCXIyOCwJMjQocnApCisJYWRkcQl0MSwJbTFiLAlyMAorCXJldAlyMzEsCShyMjYpLAkxCisKK0woZ2UxKToJbGRxCXVsMiwJMCh1cCkKKwltdWxxCXZsMCwJdWwxLAltMWEKKwl1bXVsaAl2bDAsCXVsMSwJbTFiCisJbGRxCXVsMywJOCh1cCkKKwlsZGEJbiwJLTQobikKKwltdWxxCXZsMCwJdWwyLAltMmEKKwl1bXVsaAl2bDAsCXVsMiwJbTJiCisJbGRxCXVsMCwJMTYodXApCisJbXVscQl2bDAsCXVsMywJbTNhCisJdW11bGgJdmwwLAl1bDMsCW0zYgorCWxkcQlybDEsCTI0KHJwKQorCXNybAltMWEsTkFJTF9CSVRTLAl0MAorCWxkcQl1bDEsCTI0KHVwKQorCWxkYQl1cCwJMzIodXApCisJbGRhCXJwLAkzMihycCkKKwltdWxxCXZsMCwJdWwwLAltMGEKKwlhZGRxCXQwLAlyMzEsCWFjYzEKKwl1bXVsaAl2bDAsCXVsMCwJbTBiCisJYWRkcQlybDEsCWFjYzEsCWFjYzEKKwlsZHEJcmwyLAkwKHJwKQorCXNybAltMmEsTkFJTF9CSVRTLAl0MAorCW11bHEJdmwwLAl1bDEsCW0xYQorCWFkZHEJdDAsCW0xYiwJYWNjMAorCXNybAlhY2MxLE5VTUJfQklUUywJdDEKKwlibHQJbiwJTCh0YTUpCisKK0woZ2U1KToJbGRxCXVsMiwJMCh1cCkKKwlicglyMzEsCUwoZWwxKQorCisJQUxJR04oMTYpCitMKHRvcCk6CW11bHEJdmwwLAl1bDAsCW0wYQkJQyBVMQorCWFkZHEJdDAsCW0wYiwJYWNjMQkJQyBMMAorCXNybAlhY2MwLE5VTUJfQklUUywJdDEJCUMgVTAKKwlzdHEJcjI4LAktMjQocnApCQkJQyBMMQorQworTChlbDIpOgl1bXVsaAl2bDAsCXVsMCwJbTBiCQlDIFUxCisJYW5kCWFjYzAsbnVtYl9tYXNrLAlyMjgJCUMgTDAKKwlhZGRxCXJsMSwJYWNjMSwJYWNjMQkJQyBVMAorCWxkcQlybDIsCTAocnApCQkJQyBMMQorQworCXVub3AJCQkJCUMgVTEKKwlhZGRxCXQxLAlhY2MxLAlhY2MxCQlDIEwwCisJc3JsCW0yYSxOQUlMX0JJVFMsCXQwCQlDIFUwCisJbGRxCXVsMiwJMCh1cCkJCQlDIEwxCitDCisJbXVscQl2bDAsCXVsMSwJbTFhCQlDIFUxCisJYWRkcQl0MCwJbTFiLAlhY2MwCQlDIEwwCisJc3JsCWFjYzEsTlVNQl9CSVRTLAl0MQkJQyBVMAorCXN0cQlyMjgsCS0xNihycCkJCQlDIEwxCitDCitMKGVsMSk6CXVtdWxoCXZsMCwJdWwxLAltMWIJCUMgVTEKKwlhbmQJYWNjMSxudW1iX21hc2ssCXIyOAkJQyBMMAorCWFkZHEJcmwyLAlhY2MwLAlhY2MwCQlDIFUwCisJbGRxCXJsMywJOChycCkJCQlDIEwxCitDCisJbGRhCW4sCS00KG4pCQkJQyBMMQorCWFkZHEJdDEsCWFjYzAsCWFjYzAJCUMgTDAKKwlzcmwJbTNhLE5BSUxfQklUUywJdDAJCUMgVTAKKwlsZHEJdWwzLAk4KHVwKQkJCUMgTDEKK0MKKwltdWxxCXZsMCwJdWwyLAltMmEJCUMgVTEKKwlhZGRxCXQwLAltMmIsCWFjYzEJCUMgTDAKKwlzcmwJYWNjMCxOVU1CX0JJVFMsCXQxCQlDIFUwCisJc3RxCXIyOCwJLTgocnApCQkJQyBMMQorQworTChlbDApOgl1bXVsaAl2bDAsCXVsMiwJbTJiCQlDIFUxCisJYW5kCWFjYzAsbnVtYl9tYXNrLAlyMjgJCUMgTDAKKwlhZGRxCXJsMywJYWNjMSwJYWNjMQkJQyBVMAorCWxkcQlybDAsCTE2KHJwKQkJCUMgTDEKK0MKKwl1bm9wCQkJCQlDIFUxCisJYWRkcQl0MSwJYWNjMSwJYWNjMQkJQyBMMAorCXNybAltMGEsTkFJTF9CSVRTLAl0MAkJQyBVMAorCWxkcQl1bDAsCTE2KHVwKQkJCUMgTDEKK0MKKwltdWxxCXZsMCwJdWwzLAltM2EJCUMgVTEKKwlhZGRxCXQwLAltM2IsCWFjYzAJCUMgTDAKKwlzcmwJYWNjMSxOVU1CX0JJVFMsCXQxCQlDIFUwCisJc3RxCXIyOCwJMChycCkJCQlDIEwxCitDCitMKGVsMyk6CXVtdWxoCXZsMCwJdWwzLAltM2IJCUMgVTEKKwlhbmQJYWNjMSxudW1iX21hc2ssCXIyOAkJQyBMMAorCWFkZHEJcmwwLAlhY2MwLAlhY2MwCQlDIFUwCisJbGRxCXJsMSwJMjQocnApCQkJQyBMMQorQworCXVub3AJCQkJCUMgVTEKKwlhZGRxCXQxLAlhY2MwLAlhY2MwCQlDIEwwCisJc3JsCW0xYSxOQUlMX0JJVFMsCXQwCQlDIFUwCisJbGRxCXVsMSwJMjQodXApCQkJQyBMMQorQworCWxkYQl1cCwJMzIodXApCQkJQyBMMAorCXVub3AJCQkJCUMgVTEKKwlsZGEJcnAsCTMyKHJwKQkJCUMgTDEKKwliZ2UJbiwJTCh0b3ApCQkJQyBVMAorCitMKGVuZCk6CW11bHEJdmwwLAl1bDAsCW0wYQorCWFkZHEJdDAsCW0wYiwJYWNjMQorCXNybAlhY2MwLE5VTUJfQklUUywJdDEKKwlzdHEJcjI4LAktMjQocnApCitMKHRhNik6CXVtdWxoCXZsMCwJdWwwLAltMGIKKwlhbmQJYWNjMCxudW1iX21hc2ssCXIyOAorCWFkZHEJcmwxLAlhY2MxLAlhY2MxCisJbGRxCXJsMiwJMChycCkKKwlhZGRxCXQxLAlhY2MxLAlhY2MxCisJc3JsCW0yYSxOQUlMX0JJVFMsCXQwCisJbXVscQl2bDAsCXVsMSwJbTFhCisJYWRkcQl0MCwJbTFiLAlhY2MwCisJc3JsCWFjYzEsTlVNQl9CSVRTLAl0MQorCXN0cQlyMjgsCS0xNihycCkKK0wodGE1KToJdW11bGgJdmwwLAl1bDEsCW0xYgorCWFuZAlhY2MxLG51bWJfbWFzaywJcjI4CisJYWRkcQlybDIsCWFjYzAsCWFjYzAKKwlsZHEJcmwzLAk4KHJwKQorCWFkZHEJdDEsCWFjYzAsCWFjYzAKKwlzcmwJbTNhLE5BSUxfQklUUywJdDAKKwlhZGRxCXQwLAltMmIsCWFjYzEKKwlzcmwJYWNjMCxOVU1CX0JJVFMsCXQxCisJc3RxCXIyOCwJLTgocnApCisJdW5vcAorCUFMSUdOKDE2KQorTCh0YTQpOglhbmQJYWNjMCxudW1iX21hc2ssCXIyOAorCWFkZHEJcmwzLAlhY2MxLAlhY2MxCisJbGRxCXJsMCwJMTYocnApCisJYWRkcQl0MSwJYWNjMSwJYWNjMQorCXNybAltMGEsTkFJTF9CSVRTLAl0MAorCWFkZHEJdDAsCW0zYiwJYWNjMAorCXNybAlhY2MxLE5VTUJfQklUUywJdDEKKwlzdHEJcjI4LAkwKHJwKQorCXVub3AKKwlBTElHTigxNikKK0wodGEzKToJYW5kCWFjYzEsbnVtYl9tYXNrLAlyMjgKKwlhZGRxCXJsMCwJYWNjMCwJYWNjMAorCWxkcQlybDEsCTI0KHJwKQorCWFkZHEJdDEsCWFjYzAsCWFjYzAKKwlzcmwJbTFhLE5BSUxfQklUUywJdDAKKwlhZGRxCXQwLAltMGIsCWFjYzEKKwlzcmwJYWNjMCxOVU1CX0JJVFMsCXQxCisJc3RxCXIyOCwJOChycCkKKwl1bm9wCisJQUxJR04oMTYpCitMKHRhMik6CWFuZAlhY2MwLG51bWJfbWFzaywJcjI4CisJYWRkcQlybDEsCWFjYzEsCWFjYzEKKwlhZGRxCXQxLAlhY2MxLAlhY2MxCisJc3JsCWFjYzEsTlVNQl9CSVRTLAl0MQorCXN0cQlyMjgsCTE2KHJwKQorCWFuZAlhY2MxLG51bWJfbWFzaywJcjI4CisJYWRkcQl0MSwJbTFiLAlyMAorCXN0cQlyMjgsCTI0KHJwKQorCXJldAlyMzEsCShyMjYpLAkxCitFUElMT0dVRSgpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvZXY2L25haWxzL2FkZG11bF8yLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvZXY2L25haWxzL2FkZG11bF8yLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmY2YjNhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9ldjYvbmFpbHMvYWRkbXVsXzIuYXNtCkBAIC0wLDAgKzEsMTQ2IEBACitkbmwgIEFscGhhIGV2NiBuYWlscyBtcG5fYWRkbXVsXzIuCisKK2RubCAgQ29weXJpZ2h0IDIwMDIsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBSdW5zIGF0IDQuMCBjeWNsZXMvbGltYi4KKworQyBXZSBjb3VsZCBlaXRoZXIgZ28gZm9yIDItd2F5IHVucm9sbGluZyBvdmVyIDExIGN5Y2xlcywgb3IgMi43NSBjL2wsCitDIG9yIDQtd2F5IHVucm9sbGluZyBvdmVyIDIwIGN5Y2xlcywgZm9yIDIuNSBjL2wuCisKKworQyAgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsYHIxNicpCitkZWZpbmUoYHVwJyxgcjE3JykKK2RlZmluZShgbicsYHIxOCcpCitkZWZpbmUoYHZwJyxgcjE5JykKKworQyAgVXNlZnVsIHJlZ2lzdGVyIGFsaWFzZXMKK2RlZmluZShgbnVtYl9tYXNrJyxgcjI0JykKK2RlZmluZShgdWxpbWInLGByMjUnKQorZGVmaW5lKGBybGltYicsYHIyNycpCisKK2RlZmluZShgbTBhJyxgcjAnKQorZGVmaW5lKGBtMGInLGByMScpCitkZWZpbmUoYG0xYScsYHIyJykKK2RlZmluZShgbTFiJyxgcjMnKQorCitkZWZpbmUoYGFjYzAnLGByNCcpCitkZWZpbmUoYGFjYzEnLGByNScpCisKK2RlZmluZShgdjAnLGByNicpCitkZWZpbmUoYHYxJyxgcjcnKQorCitDIFVzZWQgZm9yIHRlbXBzOiByOCByMTkgcjI4CisKK2RlZmluZShgTkFJTF9CSVRTJyxgR01QX05BSUxfQklUUycpCitkZWZpbmUoYE5VTUJfQklUUycsYEdNUF9OVU1CX0JJVFMnKQorCitDICBUaGlzIGRlY2xhcmF0aW9uIGlzIG11bmdlZCBieSBjb25maWd1cmUKK05BSUxTX1NVUFBPUlQoMy02MykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9hZGRtdWxfMikKKwlsZGEJbnVtYl9tYXNrLC0xKHIzMSkKKwlzcmwJbnVtYl9tYXNrLE5BSUxfQklUUyxudW1iX21hc2sKKworCWxkcQl2MCwJMCh2cCkKKwlsZHEJdjEsCTgodnApCisKKwliaXMJcjMxLAlyMzEsCWFjYzAJCUMJemVybyBhY2MwCisJc2xsCXYwLE5BSUxfQklUUywJdjAKKwliaXMJcjMxLAlyMzEsCWFjYzEJCUMJemVybyBhY2MxCisJc2xsCXYxLE5BSUxfQklUUywJdjEKKwliaXMJcjMxLAlyMzEsCXIxOQorCisJbGRxCXVsaW1iLAkwKHVwKQorCWxkYQl1cCwJOCh1cCkKKwltdWxxCXYwLAl1bGltYiwJbTBhCQlDIFUxCisJdW11bGgJdjAsCXVsaW1iLAltMGIJCUMgVTEKKwltdWxxCXYxLAl1bGltYiwJbTFhCQlDIFUxCisJdW11bGgJdjEsCXVsaW1iLAltMWIJCUMgVTEKKwlsZGEJbiwJLTEobikKKwliZXEJbiwJTChlbmQpCQkJQyBVMAorCisJQUxJR04oMTYpCitMKHRvcCk6CWJpcwlyMzEsCXIzMSwJcjMxCQlDIFUxCW5vcAorCWFkZHEJcjE5LAlhY2MwLAlhY2MwCQlDIFUwCXByb3BhZ2F0ZSBuYWlsCisJbGRxCXJsaW1iLAkwKHJwKQkJCUMgTDAKKwlsZHEJdWxpbWIsCTAodXApCQkJQyBMMQorCisJbGRhCXJwLAk4KHJwKQkJCUMgTDEKKwlzcmwJbTBhLE5BSUxfQklUUywJcjgJCUMgVTAKKwlsZGEJdXAsCTgodXApCQkJQyBMMAorCW11bHEJdjAsCXVsaW1iLAltMGEJCUMgVTEKKworCWFkZHEJcjgsCWFjYzAsCXIxOQkJQyBVMAorCWFkZHEJbTBiLAlhY2MxLAlhY2MwCQlDIEwxCisJdW11bGgJdjAsCXVsaW1iLAltMGIJCUMgVTEKKwliaXMJcjMxLAlyMzEsCXIzMQkJQyBMMAlub3AKKworCWFkZHEJcmxpbWIsCXIxOSwJcjE5CQlDIEwxCUZJTkFMIFBST0QtU1VNCisJc3JsCW0xYSxOQUlMX0JJVFMsCXI4CQlDIFUwCisJbGRhCW4sCS0xKG4pCQkJQyBMMAorCW11bHEJdjEsCXVsaW1iLAltMWEJCUMgVTEKKworCWFkZHEJcjgsCWFjYzAsCWFjYzAJCUMgVTAKKwliaXMJcjMxLAltMWIsCWFjYzEJCUMgTDEKKwl1bXVsaAl2MSwJdWxpbWIsCW0xYgkJQyBVMQorCWFuZAlyMTksbnVtYl9tYXNrLAlyMjgJCUMgTDAJZXh0cmFjdCBudW1iIHBhcnQKKworCXVub3AKKwlzcmwJcjE5LE5VTUJfQklUUywJcjE5CQlDIFUxCWV4dHJhY3QgbmFpbCBwYXJ0CisJc3RxCXIyOCwJLTgocnApCQkJQyBMMQorCWJuZQluLAlMKHRvcCkJCQlDIFUwCisKK0woZW5kKToJbGRxCXJsaW1iLAkwKHJwKQorCWFkZHEJcjE5LAlhY2MwLAlhY2MwCQlDCXByb3BhZ2F0ZSBuYWlsCisJbGRhCXJwLAk4KHJwKQorCXNybAltMGEsTkFJTF9CSVRTLAlyOAkJQyBVMAorCWFkZHEJcjgsCWFjYzAsCXIxOQorCWFkZHEJbTBiLAlhY2MxLAlhY2MwCisJYWRkcQlybGltYiwJcjE5LAlyMTkKKwlzcmwJbTFhLE5BSUxfQklUUywJcjgJCUMgVTAKKwlhZGRxCXI4LAlhY2MwLAlhY2MwCisJYmlzCXIzMSwJbTFiLAlhY2MxCisJYW5kCXIxOSxudW1iX21hc2ssCXIyOAkJQyBleHRyYWN0IGxpbWIKKworCXNybAlyMTksTlVNQl9CSVRTLAlyMTkJCUMgZXh0cmFjdCBuYWlsCisJc3RxCXIyOCwJLTgocnApCisKKwlhZGRxCXIxOSwJYWNjMCwJYWNjMAkJQyBwcm9wYWdhdGUgbmFpbAorCWFuZAlhY2MwLG51bWJfbWFzaywJcjI4CisJc3RxCXIyOCwJMChycCkKKwlzcmwJYWNjMCxOVU1CX0JJVFMsCXIxOQorCWFkZHEJcjE5LAlhY2MxLAlyMAorCisJcmV0CXIzMSwJKHIyNiksCTEKK0VQSUxPR1VFKCkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9ldjYvbmFpbHMvYWRkbXVsXzMuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9ldjYvbmFpbHMvYWRkbXVsXzMuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZmZiNjgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL2V2Ni9uYWlscy9hZGRtdWxfMy5hc20KQEAgLTAsMCArMSwxNjkgQEAKK2RubCAgQWxwaGEgZXY2IG5haWxzIG1wbl9hZGRtdWxfMy4KKworZG5sICBDb3B5cmlnaHQgMjAwMiwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDIFJ1bnMgYXQgMy4wIGN5Y2xlcy9saW1iLgorCitDIFdpdGggMi13YXkgdW5yb2xsaW5nLCB3ZSBjb3VsZCBwcm9iYWJseSByZWFjaCAyLjI1IGMvbCAoMy4zMyBpL2MpLgorCisKK0MgIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLGByMTYnKQorZGVmaW5lKGB1cCcsYHIxNycpCitkZWZpbmUoYG4nLGByMTgnKQorZGVmaW5lKGB2cCcsYHIxOScpCisKK0MgIFVzZWZ1bCByZWdpc3RlciBhbGlhc2VzCitkZWZpbmUoYG51bWJfbWFzaycsYHIyNCcpCitkZWZpbmUoYHVsaW1iJyxgcjI1JykKK2RlZmluZShgcmxpbWInLGByMjcnKQorCitkZWZpbmUoYG0wYScsYHIwJykKK2RlZmluZShgbTBiJyxgcjEnKQorZGVmaW5lKGBtMWEnLGByMicpCitkZWZpbmUoYG0xYicsYHIzJykKK2RlZmluZShgbTJhJyxgcjIwJykKK2RlZmluZShgbTJiJyxgcjIxJykKKworZGVmaW5lKGBhY2MwJyxgcjQnKQorZGVmaW5lKGBhY2MxJyxgcjUnKQorZGVmaW5lKGBhY2MyJyxgcjIyJykKKworZGVmaW5lKGB2MCcsYHI2JykKK2RlZmluZShgdjEnLGByNycpCitkZWZpbmUoYHYyJyxgcjIzJykKKworQyBVc2VkIGZvciB0ZW1wczogcjggcjE5IHIyOAorCitkZWZpbmUoYE5BSUxfQklUUycsYEdNUF9OQUlMX0JJVFMnKQorZGVmaW5lKGBOVU1CX0JJVFMnLGBHTVBfTlVNQl9CSVRTJykKKworQyAgVGhpcyBkZWNsYXJhdGlvbiBpcyBtdW5nZWQgYnkgY29uZmlndXJlCitOQUlMU19TVVBQT1JUKDMtNjMpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fYWRkbXVsXzMpCisJbGRhCW51bWJfbWFzaywtMShyMzEpCisJc3JsCW51bWJfbWFzayxOQUlMX0JJVFMsbnVtYl9tYXNrCisKKwlsZHEJdjAsCTAodnApCisJbGRxCXYxLAk4KHZwKQorCWxkcQl2MiwJMTYodnApCisKKwliaXMJcjMxLAlyMzEsCWFjYzAJCUMJemVybyBhY2MwCisJc2xsCXYwLE5BSUxfQklUUywJdjAKKwliaXMJcjMxLAlyMzEsCWFjYzEJCUMJemVybyBhY2MxCisJc2xsCXYxLE5BSUxfQklUUywJdjEKKwliaXMJcjMxLAlyMzEsCWFjYzIJCUMJemVybyBhY2MyCisJc2xsCXYyLE5BSUxfQklUUywJdjIKKwliaXMJcjMxLAlyMzEsCXIxOQorCisJbGRxCXVsaW1iLAkwKHVwKQorCWxkYQl1cCwJOCh1cCkKKwltdWxxCXYwLAl1bGltYiwJbTBhCQlDIFUxCisJdW11bGgJdjAsCXVsaW1iLAltMGIJCUMgVTEKKwltdWxxCXYxLAl1bGltYiwJbTFhCQlDIFUxCisJdW11bGgJdjEsCXVsaW1iLAltMWIJCUMgVTEKKwlsZGEJbiwJLTEobikKKwltdWxxCXYyLAl1bGltYiwJbTJhCQlDIFUxCisJdW11bGgJdjIsCXVsaW1iLAltMmIJCUMgVTEKKwliZXEJbiwJTChlbmQpCQkJQyBVMAorCisJQUxJR04oMTYpCitMKHRvcCk6CWxkcQlybGltYiwJMChycCkJCQlDIEwxCisJbGRxCXVsaW1iLAkwKHVwKQkJCUMgTDAKKwliaXMJcjMxLAlyMzEsCXIzMQkJQyBVMAlub3AKKwlhZGRxCXIxOSwJYWNjMCwJYWNjMAkJQyBVMQlwcm9wYWdhdGUgbmFpbAorCisJbGRhCXJwLAk4KHJwKQkJCUMgTDEKKwlzcmwJbTBhLE5BSUxfQklUUywJcjgJCUMgVTAKKwlsZGEJdXAsCTgodXApCQkJQyBMMAorCW11bHEJdjAsCXVsaW1iLAltMGEJCUMgVTEKKworCWFkZHEJcjgsCWFjYzAsCXIxOQkJQyBVMAorCWFkZHEJbTBiLAlhY2MxLAlhY2MwCQlDIEwxCisJdW11bGgJdjAsCXVsaW1iLAltMGIJCUMgVTEKKwliaXMJcjMxLAlyMzEsCXIzMQkJQyBMMAlub3AKKworCWFkZHEJcmxpbWIsCXIxOSwJcjE5CQlDIEwxCisJc3JsCW0xYSxOQUlMX0JJVFMsCXI4CQlDIFUwCisJYmlzCXIzMSwJcjMxLAlyMzEJCUMgTDAJbm9wCisJbXVscQl2MSwJdWxpbWIsCW0xYQkJQyBVMQorCisJYWRkcQlyOCwJYWNjMCwJYWNjMAkJQyBVMAorCWFkZHEJbTFiLAlhY2MyLAlhY2MxCQlDIEwxCisJdW11bGgJdjEsCXVsaW1iLAltMWIJCUMgVTEKKwlhbmQJcjE5LG51bWJfbWFzaywJcjI4CQlDIEwwCWV4dHJhY3QgbnVtYiBwYXJ0CisKKwliaXMJcjMxLAlyMzEsCXIzMQkJQyBMMQlub3AKKwlzcmwJbTJhLE5BSUxfQklUUywJcjgJCUMgVTAKKwlsZGEJbiwJLTEobikJCQlDIEwwCisJbXVscQl2MiwJdWxpbWIsCW0yYQkJQyBVMQorCisJYWRkcQlyOCwJYWNjMSwJYWNjMQkJQyBMMAorCWJpcwlyMzEsCW0yYiwJYWNjMgkJQyBMMQorCXVtdWxoCXYyLAl1bGltYiwJbTJiCQlDIFUxCisJc3JsCXIxOSxOVU1CX0JJVFMsCXIxOQkJQyBVMAlleHRyYWN0IG5haWwgcGFydAorCisJc3RxCXIyOCwJLTgocnApCQkJQyBMCisJYm5lCW4sCUwodG9wKQkJCUMgVTAKKworTChlbmQpOglsZHEJcmxpbWIsCTAocnApCisJYWRkcQlyMTksCWFjYzAsCWFjYzAJCUMJcHJvcGFnYXRlIG5haWwKKwlsZGEJcnAsCTgocnApCisJc3JsCW0wYSxOQUlMX0JJVFMsCXI4CQlDIFUwCisJYWRkcQlyOCwJYWNjMCwJcjE5CisJYWRkcQltMGIsCWFjYzEsCWFjYzAKKwlhZGRxCXJsaW1iLAlyMTksCXIxOQorCXNybAltMWEsTkFJTF9CSVRTLAlyOAkJQyBVMAorCWFkZHEJcjgsCWFjYzAsCWFjYzAKKwlhZGRxCW0xYiwJYWNjMiwJYWNjMQorCWFuZAlyMTksbnVtYl9tYXNrLAlyMjgJCUMgZXh0cmFjdCBsaW1iCisJc3JsCW0yYSxOQUlMX0JJVFMsCXI4CQlDIFUwCisJYWRkcQlyOCwJYWNjMSwJYWNjMQorCWJpcwlyMzEsCW0yYiwJYWNjMgorCXNybAlyMTksTlVNQl9CSVRTLAlyMTkJCUMgZXh0cmFjdCBuYWlsCisJc3RxCXIyOCwJLTgocnApCisKKwlhZGRxCXIxOSwJYWNjMCwJYWNjMAkJQyBwcm9wYWdhdGUgbmFpbAorCWFuZAlhY2MwLG51bWJfbWFzaywJcjI4CisJc3RxCXIyOCwJMChycCkKKwlzcmwJYWNjMCxOVU1CX0JJVFMsCXIxOQorCWFkZHEJcjE5LAlhY2MxLAlhY2MxCisKKwlhbmQJYWNjMSxudW1iX21hc2ssCXIyOAorCXN0cQlyMjgsCTgocnApCisJc3JsCWFjYzEsTlVNQl9CSVRTLAlyMTkKKwlhZGRxCXIxOSwJYWNjMiwJbTBhCisKKwlyZXQJcjMxLAkocjI2KSwJMQorRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL2V2Ni9uYWlscy9hZGRtdWxfNC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL2V2Ni9uYWlscy9hZGRtdWxfNC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdlMDJhNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvZXY2L25haWxzL2FkZG11bF80LmFzbQpAQCAtMCwwICsxLDIxMCBAQAorZG5sICBBbHBoYSBldjYgbmFpbHMgbXBuX2FkZG11bF80LgorCitkbmwgIENvcHlyaWdodCAyMDAyLCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgUnVucyBhdCAyLjUgY3ljbGVzL2xpbWIuCisKK0MgV2Ugc2hvdWxkIGdvIGZvciAyLXdheSB1bnJvbGxpbmcgb3ZlciAxNyBjeWNsZXMsIGZvciAyLjEyNSBjL2wgY29ycmVzcG9uZGluZworQyB0byAzLjI0IGluc24vY3ljbGUuCisKKworQyAgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsYHIxNicpCitkZWZpbmUoYHVwJyxgcjE3JykKK2RlZmluZShgbicsYHIxOCcpCitkZWZpbmUoYHZwJyxgcjE5JykKKworQyAgVXNlZnVsIHJlZ2lzdGVyIGFsaWFzZXMKK2RlZmluZShgbnVtYl9tYXNrJyxgcjI0JykKK2RlZmluZShgdWxpbWInLGByMjUnKQorZGVmaW5lKGBybGltYicsYHIyNycpCisKK2RlZmluZShgbTBhJyxgcjAnKQorZGVmaW5lKGBtMGInLGByMScpCitkZWZpbmUoYG0xYScsYHIyJykKK2RlZmluZShgbTFiJyxgcjMnKQorZGVmaW5lKGBtMmEnLGByMjAnKQorZGVmaW5lKGBtMmInLGByMjEnKQorZGVmaW5lKGBtM2EnLGByMTInKQorZGVmaW5lKGBtM2InLGByMTMnKQorCitkZWZpbmUoYGFjYzAnLGByNCcpCitkZWZpbmUoYGFjYzEnLGByNScpCitkZWZpbmUoYGFjYzInLGByMjInKQorZGVmaW5lKGBhY2MzJyxgcjE0JykKKworZGVmaW5lKGB2MCcsYHI2JykKK2RlZmluZShgdjEnLGByNycpCitkZWZpbmUoYHYyJyxgcjIzJykKK2RlZmluZShgdjMnLGByMTUnKQorCitDIFVzZWQgZm9yIHRlbXBzOiByOCByMTkgcjI4CisKK2RlZmluZShgTkFJTF9CSVRTJyxgR01QX05BSUxfQklUUycpCitkZWZpbmUoYE5VTUJfQklUUycsYEdNUF9OVU1CX0JJVFMnKQorCitDICBUaGlzIGRlY2xhcmF0aW9uIGlzIG11bmdlZCBieSBjb25maWd1cmUKK05BSUxTX1NVUFBPUlQoNC02MykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9hZGRtdWxfNCkKKwlsZGEJcjMwLAktMjQwKHIzMCkKKwlzdHEJcjEyLAkzMihyMzApCisJc3RxCXIxMywJNDAocjMwKQorCXN0cQlyMTQsCTQ4KHIzMCkKKwlzdHEJcjE1LAk1NihyMzApCisKKwlsZGEJbnVtYl9tYXNrLC0xKHIzMSkKKwlzcmwJbnVtYl9tYXNrLE5BSUxfQklUUyxudW1iX21hc2sKKworCWxkcQl2MCwJMCh2cCkKKwlsZHEJdjEsCTgodnApCisJbGRxCXYyLAkxNih2cCkKKwlsZHEJdjMsCTI0KHZwKQorCisJYmlzCXIzMSwJcjMxLAlhY2MwCQlDCXplcm8gYWNjMAorCXNsbAl2MCxOQUlMX0JJVFMsCXYwCisJYmlzCXIzMSwJcjMxLAlhY2MxCQlDCXplcm8gYWNjMQorCXNsbAl2MSxOQUlMX0JJVFMsCXYxCisJYmlzCXIzMSwJcjMxLAlhY2MyCQlDCXplcm8gYWNjMgorCXNsbAl2MixOQUlMX0JJVFMsCXYyCisJYmlzCXIzMSwJcjMxLAlhY2MzCQlDCXplcm8gYWNjMworCXNsbAl2MyxOQUlMX0JJVFMsCXYzCisJYmlzCXIzMSwJcjMxLAlyMTkKKworCWxkcQl1bGltYiwJMCh1cCkKKwlsZGEJdXAsCTgodXApCisJbXVscQl2MCwJdWxpbWIsCW0wYQkJQyBVMQorCXVtdWxoCXYwLAl1bGltYiwJbTBiCQlDIFUxCisJbXVscQl2MSwJdWxpbWIsCW0xYQkJQyBVMQorCXVtdWxoCXYxLAl1bGltYiwJbTFiCQlDIFUxCisJbGRhCW4sCS0xKG4pCisJbXVscQl2MiwJdWxpbWIsCW0yYQkJQyBVMQorCXVtdWxoCXYyLAl1bGltYiwJbTJiCQlDIFUxCisJbXVscQl2MywJdWxpbWIsCW0zYQkJQyBVMQorCXVtdWxoCXYzLAl1bGltYiwJbTNiCQlDIFUxCisJYmVxCW4sCUwoZW5kKQkJCUMgVTAKKworCUFMSUdOKDE2KQorTCh0b3ApOgliaXMJcjMxLAlyMzEsCXIzMQkJQyBVMQlub3AKKwlsZHEJcmxpbWIsCTAocnApCQkJQyBMMAorCWxkcQl1bGltYiwJMCh1cCkJCQlDIEwxCisJYWRkcQlyMTksCWFjYzAsCWFjYzAJCUMgVTAJcHJvcGFnYXRlIG5haWwKKworCWJpcwlyMzEsCXIzMSwJcjMxCQlDIEwwCW5vcAorCWJpcwlyMzEsCXIzMSwJcjMxCQlDIFUxCW5vcAorCWJpcwlyMzEsCXIzMSwJcjMxCQlDIEwxCW5vcAorCWJpcwlyMzEsCXIzMSwJcjMxCQlDIFUwCW5vcAorCisJbGRhCXJwLAk4KHJwKQkJCUMgTDAKKwlzcmwJbTBhLE5BSUxfQklUUywJcjgJCUMgVTAKKwlsZGEJdXAsCTgodXApCQkJQyBMMQorCW11bHEJdjAsCXVsaW1iLAltMGEJCUMgVTEKKworCWFkZHEJcjgsCWFjYzAsCXIxOQkJQyBVMAorCWFkZHEJbTBiLAlhY2MxLAlhY2MwCQlDIEwwCisJdW11bGgJdjAsCXVsaW1iLAltMGIJCUMgVTEKKwliaXMJcjMxLAlyMzEsCXIzMQkJQyBMMQlub3AKKworCWFkZHEJcmxpbWIsCXIxOSwJcjE5CQlDIEwwCisJc3JsCW0xYSxOQUlMX0JJVFMsCXI4CQlDIFUwCisJYmlzCXIzMSwJcjMxLAlyMzEJCUMgTDEJbm9wCisJbXVscQl2MSwJdWxpbWIsCW0xYQkJQyBVMQorCisJYWRkcQlyOCwJYWNjMCwJYWNjMAkJQyBVMAorCWFkZHEJbTFiLAlhY2MyLAlhY2MxCQlDIEwwCisJdW11bGgJdjEsCXVsaW1iLAltMWIJCUMgVTEKKwlhbmQJcjE5LG51bWJfbWFzaywJcjI4CQlDIEwxCWV4dHJhY3QgbnVtYiBwYXJ0CisKKwliaXMJcjMxLAlyMzEsCXIzMQkJQyBMMAlub3AKKwlzcmwJbTJhLE5BSUxfQklUUywJcjgJCUMgVTAKKwlsZGEJbiwJLTEobikJCQlDIEwxCisJbXVscQl2MiwJdWxpbWIsCW0yYQkJQyBVMQorCisJYWRkcQlyOCwJYWNjMSwJYWNjMQkJQyBMMQorCWFkZHEJbTJiLAlhY2MzLAlhY2MyCQlDIEwwCisJdW11bGgJdjIsCXVsaW1iLAltMmIJCUMgVTEKKwlzcmwJcjE5LE5VTUJfQklUUywJcjE5CQlDIFUwCWV4dHJhY3QgbmFpbCBwYXJ0CisKKwliaXMJcjMxLAlyMzEsCXIzMQkJQyBMMAlub3AKKwlzcmwJbTNhLE5BSUxfQklUUywJcjgJCUMgVTAKKwlzdHEJcjI4LAktOChycCkJCQlDIEwxCisJbXVscQl2MywJdWxpbWIsCW0zYQkJQyBVMQorCisJYWRkcQlyOCwJYWNjMiwJYWNjMgkJQyBMMAorCWJpcwlyMzEsCW0zYiwJYWNjMwkJQyBMMQorCXVtdWxoCXYzLAl1bGltYiwJbTNiCQlDIFUxCisJYm5lCW4sCUwodG9wKQkJCUMgVTAKKworTChlbmQpOglsZHEJcmxpbWIsCTAocnApCisJYWRkcQlyMTksCWFjYzAsCWFjYzAJCUMJcHJvcGFnYXRlIG5haWwKKwlsZGEJcnAsCTgocnApCQkJQyBGSVhNRTogREVMRVRFCisJc3JsCW0wYSxOQUlMX0JJVFMsCXI4CQlDIFUwCisJYWRkcQlyOCwJYWNjMCwJcjE5CisJYWRkcQltMGIsCWFjYzEsCWFjYzAKKwlhZGRxCXJsaW1iLAlyMTksCXIxOQorCXNybAltMWEsTkFJTF9CSVRTLAlyOAkJQyBVMAorCWFkZHEJcjgsCWFjYzAsCWFjYzAKKwlhZGRxCW0xYiwJYWNjMiwJYWNjMQorCWFuZAlyMTksbnVtYl9tYXNrLAlyMjgJCUMgZXh0cmFjdCBsaW1iCisJc3JsCW0yYSxOQUlMX0JJVFMsCXI4CQlDIFUwCisJYWRkcQlyOCwJYWNjMSwJYWNjMQorCWFkZHEJbTJiLAlhY2MzLAlhY2MyCisJc3JsCXIxOSxOVU1CX0JJVFMsCXIxOQkJQyBleHRyYWN0IG5haWwKKwlzcmwJbTNhLE5BSUxfQklUUywJcjgJCUMgVTAKKwlzdHEJcjI4LAktOChycCkKKwlhZGRxCXI4LAlhY2MyLAlhY2MyCisJYmlzCXIzMSwJbTNiLAlhY2MzCisKKwlhZGRxCXIxOSwJYWNjMCwJYWNjMAkJQyBwcm9wYWdhdGUgbmFpbAorCWFuZAlhY2MwLG51bWJfbWFzaywJcjI4CisJc3RxCXIyOCwJMChycCkKKwlzcmwJYWNjMCxOVU1CX0JJVFMsCXIxOQorCWFkZHEJcjE5LAlhY2MxLAlhY2MxCisKKwlhbmQJYWNjMSxudW1iX21hc2ssCXIyOAorCXN0cQlyMjgsCTgocnApCisJc3JsCWFjYzEsTlVNQl9CSVRTLAlyMTkKKwlhZGRxCXIxOSwJYWNjMiwJYWNjMgorCisJYW5kCWFjYzIsbnVtYl9tYXNrLAlyMjgKKwlzdHEJcjI4LAkxNihycCkKKwlzcmwJYWNjMixOVU1CX0JJVFMsCXIxOQorCWFkZHEJcjE5LAlhY2MzLAlyMAorCisJbGRxCXIxMiwJMzIocjMwKQorCWxkcQlyMTMsCTQwKHIzMCkKKwlsZHEJcjE0LAk0OChyMzApCisJbGRxCXIxNSwJNTYocjMwKQorCWxkYQlyMzAsCTI0MChyMzApCisJcmV0CXIzMSwJKHIyNiksCTEKK0VQSUxPR1VFKCkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9ldjYvbmFpbHMvYW9yc19uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvZXY2L25haWxzL2FvcnNfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY1ODY3NwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvZXY2L25haWxzL2FvcnNfbi5hc20KQEAgLTAsMCArMSwyMzMgQEAKK2RubCAgQWxwaGEgZXY2IG5haWxzIG1wbl9hZGRfbiBhbmQgbXBuX3N1Yl9uLgorCitkbmwgIENvcHlyaWdodCAyMDAyLCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworZG5sICBSdW5zIGF0IDIuNSBjeWNsZXMvbGltYi4gIEl0IHdvdWxkIGJlIHBvc3NpYmxlIHRvIHJlYWNoIDIuMCBjeWNsZXMvbGltYgorZG5sICB3aXRoIDgtd2F5IHVucm9sbGluZy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworZG5sICBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJyxgcjE2JykKK2RlZmluZShgdXAnLGByMTcnKQorZGVmaW5lKGB2cCcsYHIxOCcpCitkZWZpbmUoYG4nLGByMTknKQorCitkZWZpbmUoYHJsMCcsYHIwJykKK2RlZmluZShgcmwxJyxgcjEnKQorZGVmaW5lKGBybDInLGByMicpCitkZWZpbmUoYHJsMycsYHIzJykKKworZGVmaW5lKGB1bDAnLGByNCcpCitkZWZpbmUoYHVsMScsYHI1JykKK2RlZmluZShgdWwyJyxgcjYnKQorZGVmaW5lKGB1bDMnLGByNycpCisKK2RlZmluZShgdmwwJyxgcjIyJykKK2RlZmluZShgdmwxJyxgcjIzJykKK2RlZmluZShgdmwyJyxgcjI0JykKK2RlZmluZShgdmwzJyxgcjI1JykKKworZGVmaW5lKGBudW1iX21hc2snLGByMjEnKQorCitkZWZpbmUoYE5BSUxfQklUUycsYEdNUF9OQUlMX0JJVFMnKQorZGVmaW5lKGBDWVNIJyxgR01QX05VTUJfQklUUycpCisKK2RubCAgVGhpcyBkZWNsYXJhdGlvbiBpcyBtdW5nZWQgYnkgY29uZmlndXJlCitOQUlMU19TVVBQT1JUKDEtNjMpCisKK2lmZGVmKGBPUEVSQVRJT05fYWRkX24nLCBgCisJZGVmaW5lKGBPUCcsICAgICAgICBhZGRxKQorCWRlZmluZShgQ1lTSCcsYEdNUF9OVU1CX0JJVFMnKQorCWRlZmluZShgZnVuYycsICBtcG5fYWRkX24pJykKK2lmZGVmKGBPUEVSQVRJT05fc3ViX24nLCBgCisJZGVmaW5lKGBPUCcsICAgICAgICBzdWJxKQorCWRlZmluZShgQ1lTSCcsNjMpCisJZGVmaW5lKGBmdW5jJywgIG1wbl9zdWJfbiknKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRfbiBtcG5fc3ViX24pCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShmdW5jKQorCWxkYQludW1iX21hc2ssIC0xKHIzMSkKKwlzcmwJbnVtYl9tYXNrLCBOQUlMX0JJVFMsIG51bWJfbWFzaworCWJpcwlyMzEsCXIzMSwJcjIwCisKKwlhbmQJbiwJMywJcjI1CisJbGRhCW4sCS00KG4pCisJYmVxCXIyNSwJTChnZTQpCisKK0wobHAwKToJbGRxCXVsMCwJMCh1cCkKKwlsZGEJdXAsCTgodXApCisJbGRxCXZsMCwJMCh2cCkKKwlsZGEJdnAsCTgodnApCisJbGRhCXJwLAk4KHJwKQorCWxkYQlyMjUsCS0xKHIyNSkKKwlPUAl1bDAsCXZsMCwJcmwwCisJT1AJcmwwLAlyMjAsCXJsMAorCWFuZAlybDAsIG51bWJfbWFzaywJcjI4CisJc3RxCXIyOCwJLTgocnApCisJc3JsCXJsMCwJQ1lTSCwJcjIwCisJYm5lCXIyNSwJTChscDApCisKKwlibHQJbiwJTChyZXQpCisKK0woZ2U0KToJbGRxCXVsMCwJMCh1cCkKKwlsZHEJdmwwLAkwKHZwKQorCWxkcQl1bDEsCTgodXApCisJbGRxCXZsMSwJOCh2cCkKKwlsZHEJdWwyLAkxNih1cCkKKwlsZHEJdmwyLAkxNih2cCkKKwlsZHEJdWwzLAkyNCh1cCkKKwlsZHEJdmwzLAkyNCh2cCkKKwlsZGEJdXAsCTMyKHVwKQorCWxkYQl2cCwJMzIodnApCisJbGRhCW4sCS00KG4pCisJYmdlCW4sCUwoZ2U4KQorCisJT1AJdWwwLAl2bDAsCXJsMAlDCQltYWluLWFkZCAwCisJT1AJcmwwLAlyMjAsCXJsMAlDCQljeS1hZGQgMAorCU9QCXVsMSwJdmwxLAlybDEJQwkJbWFpbi1hZGQgMQorCXNybAlybDAsCUNZU0gsCXIyMAlDCQlnZW4gY3kgMAorCU9QCXJsMSwJcjIwLAlybDEJQwkJY3ktYWRkIDEKKwlhbmQJcmwwLG51bWJfbWFzaywJcjI3CisJYnIJcjMxLAlMKGNqMCkKKworTChnZTgpOglPUAl1bDAsCXZsMCwJcmwwCUMJCW1haW4tYWRkIDAKKwlsZHEJdWwwLAkwKHVwKQorCWxkcQl2bDAsCTAodnApCisJT1AJcmwwLAlyMjAsCXJsMAlDCQljeS1hZGQgMAorCU9QCXVsMSwJdmwxLAlybDEJQwkJbWFpbi1hZGQgMQorCXNybAlybDAsCUNZU0gsCXIyMAlDCQlnZW4gY3kgMAorCWxkcQl1bDEsCTgodXApCisJbGRxCXZsMSwJOCh2cCkKKwlPUAlybDEsCXIyMCwJcmwxCUMJCWN5LWFkZCAxCisJYW5kCXJsMCxudW1iX21hc2ssCXIyNworCU9QCXVsMiwJdmwyLAlybDIJQwkJbWFpbi1hZGQgMgorCXNybAlybDEsCUNZU0gsCXIyMAlDCQlnZW4gY3kgMQorCWxkcQl1bDIsCTE2KHVwKQorCWxkcQl2bDIsCTE2KHZwKQorCU9QCXJsMiwJcjIwLAlybDIJQwkJY3ktYWRkIDIKKwlhbmQJcmwxLG51bWJfbWFzaywJcjI4CisJc3RxCXIyNywJMChycCkKKwlPUAl1bDMsCXZsMywJcmwzCUMJCW1haW4tYWRkIDMKKwlzcmwJcmwyLAlDWVNILAlyMjAJQwkJZ2VuIGN5IDIKKwlsZHEJdWwzLAkyNCh1cCkKKwlsZHEJdmwzLAkyNCh2cCkKKwlPUAlybDMsCXIyMCwJcmwzCUMJCWN5LWFkZCAzCisJYW5kCXJsMixudW1iX21hc2ssCXIyNworCXN0cQlyMjgsCTgocnApCisJbGRhCXJwLAkzMihycCkKKwlsZGEJdXAsCTMyKHVwKQorCWxkYQl2cCwJMzIodnApCisJbGRhCW4sCS00KG4pCisJYmx0CW4sCUwoZW5kKQorCisJQUxJR04oMzIpCitMKHRvcCk6CU9QCXVsMCwJdmwwLAlybDAJQwkJbWFpbi1hZGQgMAorCXNybAlybDMsCUNZU0gsCXIyMAlDCQlnZW4gY3kgMworCWxkcQl1bDAsCTAodXApCisJbGRxCXZsMCwJMCh2cCkKKworCU9QCXJsMCwJcjIwLAlybDAJQwkJY3ktYWRkIDAKKwlhbmQJcmwzLG51bWJfbWFzaywJcjI4CisJc3RxCXIyNywJLTE2KHJwKQorCWJpcwlyMzEsCXIzMSwJcjMxCisKKwlPUAl1bDEsCXZsMSwJcmwxCUMJCW1haW4tYWRkIDEKKwlzcmwJcmwwLAlDWVNILAlyMjAJQwkJZ2VuIGN5IDAKKwlsZHEJdWwxLAk4KHVwKQorCWxkcQl2bDEsCTgodnApCisKKwlPUAlybDEsCXIyMCwJcmwxCUMJCWN5LWFkZCAxCisJYW5kCXJsMCxudW1iX21hc2ssCXIyNworCXN0cQlyMjgsCS04KHJwKQorCWJpcwlyMzEsCXIzMSwJcjMxCisKKwlPUAl1bDIsCXZsMiwJcmwyCUMJCW1haW4tYWRkIDIKKwlzcmwJcmwxLAlDWVNILAlyMjAJQwkJZ2VuIGN5IDEKKwlsZHEJdWwyLAkxNih1cCkKKwlsZHEJdmwyLAkxNih2cCkKKworCU9QCXJsMiwJcjIwLAlybDIJQwkJY3ktYWRkIDIKKwlhbmQJcmwxLG51bWJfbWFzaywJcjI4CisJc3RxCXIyNywJMChycCkKKwliaXMJcjMxLAlyMzEsCXIzMQorCisJT1AJdWwzLAl2bDMsCXJsMwlDCQltYWluLWFkZCAzCisJc3JsCXJsMiwJQ1lTSCwJcjIwCUMJCWdlbiBjeSAyCisJbGRxCXVsMywJMjQodXApCisJbGRxCXZsMywJMjQodnApCisKKwlPUAlybDMsCXIyMCwJcmwzCUMJCWN5LWFkZCAzCisJYW5kCXJsMixudW1iX21hc2ssCXIyNworCXN0cQlyMjgsCTgocnApCisJYmlzCXIzMSwJcjMxLAlyMzEKKworCWJpcwlyMzEsCXIzMSwJcjMxCisJbGRhCW4sCS00KG4pCisJbGRhCXVwLAkzMih1cCkKKwlsZGEJdnAsCTMyKHZwKQorCisJYmlzCXIzMSwJcjMxLAlyMzEKKwliaXMJcjMxLAlyMzEsCXIzMQorCWxkYQlycCwJMzIocnApCisJYmdlCW4sCUwodG9wKQorCitMKGVuZCk6CU9QCXVsMCwJdmwwLAlybDAJQwkJbWFpbi1hZGQgMAorCXNybAlybDMsCUNZU0gsCXIyMAlDCQlnZW4gY3kgMworCU9QCXJsMCwJcjIwLAlybDAJQwkJY3ktYWRkIDAKKwlhbmQJcmwzLG51bWJfbWFzaywJcjI4CisJc3RxCXIyNywJLTE2KHJwKQorCU9QCXVsMSwJdmwxLAlybDEJQwkJbWFpbi1hZGQgMQorCXNybAlybDAsCUNZU0gsCXIyMAlDCQlnZW4gY3kgMAorCU9QCXJsMSwJcjIwLAlybDEJQwkJY3ktYWRkIDEKKwlhbmQJcmwwLG51bWJfbWFzaywJcjI3CisJc3RxCXIyOCwJLTgocnApCitMKGNqMCk6CU9QCXVsMiwJdmwyLAlybDIJQwkJbWFpbi1hZGQgMgorCXNybAlybDEsCUNZU0gsCXIyMAlDCQlnZW4gY3kgMQorCU9QCXJsMiwJcjIwLAlybDIJQwkJY3ktYWRkIDIKKwlhbmQJcmwxLG51bWJfbWFzaywJcjI4CisJc3RxCXIyNywJMChycCkKKwlPUAl1bDMsCXZsMywJcmwzCUMJCW1haW4tYWRkIDMKKwlzcmwJcmwyLAlDWVNILAlyMjAJQwkJZ2VuIGN5IDIKKwlPUAlybDMsCXIyMCwJcmwzCUMJCWN5LWFkZCAzCisJYW5kCXJsMixudW1iX21hc2ssCXIyNworCXN0cQlyMjgsCTgocnApCisKKwlzcmwJcmwzLAlDWVNILAlyMjAJQwkJZ2VuIGN5IDMKKwlhbmQJcmwzLG51bWJfbWFzaywJcjI4CisJc3RxCXIyNywJMTYocnApCisJc3RxCXIyOCwJMjQocnApCisKK0wocmV0KToJYW5kCXIyMCwJMSwJcjAKKwlyZXQJcjMxLAkocjI2KSwJMQorRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL2V2Ni9uYWlscy9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL2V2Ni9uYWlscy9nbXAtbXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk0OWZlOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvZXY2L25haWxzL2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDcyIEBACisvKiBnbXAtbXBhcmFtLmggLS0gQ29tcGlsZXIvbWFjaGluZSBwYXJhbWV0ZXIgaGVhZGVyIGZpbGUuCisKK0NvcHlyaWdodCAxOTkxLCAxOTkzLCAxOTk0LCAxOTk5LTIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNkZWZpbmUgR01QX0xJTUJfQklUUyA2NAorI2RlZmluZSBHTVBfTElNQl9CWVRFUyA4CisKKy8qIEdlbmVyYXRlZCBieSB0dW5ldXAuYywgMjAwNC0wMi0wNywgZ2NjIDMuMyAqLworCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgIDQwCisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgMjM2CisKKyNkZWZpbmUgU1FSX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgIDcgIC8qIGthcmF0c3ViYSAqLworI2RlZmluZSBTUVJfVE9PTTJfVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogbmV2ZXIgc3FyX2Jhc2VjYXNlICovCisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgMTIwCisKKyNkZWZpbmUgRElWX1NCX1BSRUlOVl9USFJFU0hPTEQgICAgICAgTVBfU0laRV9UX01BWCAgLyogbm8gcHJlaW52IHdpdGggbmFpbHMgKi8KKyNkZWZpbmUgRElWX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNDgKKyNkZWZpbmUgUE9XTV9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAxMTMKKworI2RlZmluZSBIR0NEX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICA3OAorI2RlZmluZSBHQ0RfQUNDRUxfVEhSRVNIT0xEICAgICAgICAgICAgICAgMworI2RlZmluZSBHQ0RfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDM5MgorI2RlZmluZSBKQUNPQklfQkFTRV9NRVRIT0QgICAgICAgICAgICAgICAgMQorCisjZGVmaW5lIERJVlJFTV8xX05PUk1fVEhSRVNIT0xEICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5vIHByZWludiB3aXRoIG5haWxzICovCisjZGVmaW5lIERJVlJFTV8xX1VOTk9STV9USFJFU0hPTEQgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5vIHByZWludiB3aXRoIG5haWxzICovCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5vIHByZWludiB3aXRoIG5haWxzICovCisjZGVmaW5lIE1PRF8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5vIHByZWludiB3aXRoIG5haWxzICovCisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAwICAvKiBubyBwcmVpbnYgd2l0aCBuYWlscyAqLworI2RlZmluZSBVU0VfUFJFSU5WX01PRF8xICAgICAgICAgICAgICAgICAgMCAgLyogbm8gcHJlaW52IHdpdGggbmFpbHMgKi8KKyNkZWZpbmUgRElWUkVNXzJfVEhSRVNIT0xEICAgICAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbm8gcHJlaW52IHdpdGggbmFpbHMgKi8KKyNkZWZpbmUgRElWRVhBQ1RfMV9USFJFU0hPTEQgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RFWEFDVF8xX09ERF9USFJFU0hPTEQgICAgICAgICAgMCAgLyogYWx3YXlzICovCisKKyNkZWZpbmUgR0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgMTUKKyNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgMjQKKyNkZWZpbmUgU0VUX1NUUl9USFJFU0hPTEQgICAgICAgICAgICAgIDYzMzYKKworI2RlZmluZSBNVUxfRkZUX1RBQkxFICB7IDY4OCwgMTQ0MCwgMzY0OCwgNjQwMCwgMjU2MDAsIDAgfQorI2RlZmluZSBNVUxfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgIDQ4OAorI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgMzcxMgorCisjZGVmaW5lIFNRUl9GRlRfVEFCTEUgIHsgNDMyLCA4NjQsIDMxMzYsIDY0MDAsIDI1NjAwLCAwIH0KKyNkZWZpbmUgU1FSX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICA0ODAKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgIDI5NzYKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvZXY2L25haWxzL211bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvZXY2L25haWxzL211bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTJlZTNkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9ldjYvbmFpbHMvbXVsXzEuYXNtCkBAIC0wLDAgKzEsMzY0IEBACitkbmwgIEFscGhhIGV2NiBuYWlscyBtcG5fbXVsXzEuCisKK2RubCAgQ29weXJpZ2h0IDIwMDIsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgIGN5Y2xlcy9saW1iCitDIEVWNDogICAgNDIKK0MgRVY1OiAgICAxOAorQyBFVjY6ICAgICAzLjI1CisKK0MgVE9ETworQyAgKiBSZXJvbGwgbG9vcCBmb3IgMy4wIGMvbCB3aXRoIGN1cnJlbnQgNC13YXkgdW5yb2xsaW5nLgorQyAgKiBUaGUgbG9vcCBpcyBvdmVyc2NoZWR1bGVkIHdydCBsb2FkcyBhbmQgd3J0IG11bHRpcGxpZXMsIGluIHBhcnRpY3VsYXIKK0MgICAgdW11bGguCitDICAqIFVzZSBGUCBsb29wIGNvdW50IGFuZCBtdWx0aXBsZSBleGl0IHBvaW50cywgdGhhdCB3b3VsZCBzaW1wbGlmeSBmZWVkLWluIGxwMAorQyAgICBhbmQgd291bGQgd29yayBzaW5jZSB0aGUgbG9vcCBzdHJ1Y3R1cmUgaXMgcmVhbGx5IHJlZ3VsYXIuCisKK0MgIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLGByMTYnKQorZGVmaW5lKGB1cCcsYHIxNycpCitkZWZpbmUoYG4nLCBgcjE4JykKK2RlZmluZShgdmwwJyxgcjE5JykKKworZGVmaW5lKGBudW1iX21hc2snLGByNicpCisKK2RlZmluZShgbTBhJyxgcjAnKQorZGVmaW5lKGBtMGInLGByMScpCitkZWZpbmUoYG0xYScsYHIyJykKK2RlZmluZShgbTFiJyxgcjMnKQorZGVmaW5lKGBtMmEnLGByMjAnKQorZGVmaW5lKGBtMmInLGByMjEnKQorZGVmaW5lKGBtM2EnLGByMjInKQorZGVmaW5lKGBtM2InLGByMjMnKQorCitkZWZpbmUoYGFjYzAnLGByMjUnKQorZGVmaW5lKGBhY2MxJyxgcjI3JykKKworZGVmaW5lKGB1bDAnLGByNCcpCitkZWZpbmUoYHVsMScsYHI1JykKK2RlZmluZShgdWwyJyxgcjQnKQorZGVmaW5lKGB1bDMnLGByNScpCisKK2RlZmluZShgcmwwJyxgcjI0JykKK2RlZmluZShgcmwxJyxgcjI0JykKK2RlZmluZShgcmwyJyxgcjI0JykKK2RlZmluZShgcmwzJyxgcjI0JykKKworZGVmaW5lKGB0MCcsYHI3JykKK2RlZmluZShgdDEnLGByOCcpCisKK2RlZmluZShgTkFJTF9CSVRTJyxgR01QX05BSUxfQklUUycpCitkZWZpbmUoYE5VTUJfQklUUycsYEdNUF9OVU1CX0JJVFMnKQorCitkbmwgIFRoaXMgZGVjbGFyYXRpb24gaXMgbXVuZ2VkIGJ5IGNvbmZpZ3VyZQorTkFJTFNfU1VQUE9SVCgxLTYzKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX211bF8xKQorCXNsbAl2bDAsIE5BSUxfQklUUywgdmwwCisJbGRhCW51bWJfbWFzaywgLTEocjMxKQorCXNybAludW1iX21hc2ssIE5BSUxfQklUUywgbnVtYl9tYXNrCisKKwlhbmQJbiwJMywJcjI1CisJY21wZXEJcjI1LAkxLAlyMjEKKwlibmUJcjIxLAlMKDFtNCkKKwljbXBlcQlyMjUsCTIsCXIyMQorCWJuZQlyMjEsCUwoMm00KQorCWJlcQlyMjUsCUwoMG00KQorCitMKDNtNCk6CWxkcQl1bDMsCTAodXApCisJbGRhCW4sCS00KG4pCisJbGRxCXVsMCwJOCh1cCkKKwltdWxxCXZsMCwJdWwzLAltM2EKKwl1bXVsaAl2bDAsCXVsMywJbTNiCisJbGRxCXVsMSwJMTYodXApCisJbGRhCXVwLAkyNCh1cCkKKwlsZGEJcnAsCS04KHJwKQorCW11bHEJdmwwLAl1bDAsCW0wYQorCXVtdWxoCXZsMCwJdWwwLAltMGIKKwliZ2UJbiwJTChnZTMpCisKKwltdWxxCXZsMCwJdWwxLAltMWEKKwl1bXVsaAl2bDAsCXVsMSwJbTFiCisJc3JsCW0zYSxOQUlMX0JJVFMsCXQwCisJYWRkcQl0MCwJcjMxLAlhY2MxCisJc3JsCW0wYSxOQUlMX0JJVFMsCXQwCisJYWRkcQl0MCwJbTNiLAlhY2MwCisJc3JsCWFjYzEsTlVNQl9CSVRTLAl0MQorCWJyCXIzMSwJTCh0YTMpCisKK0woZ2UzKToJbGRxCXVsMiwJMCh1cCkKKwltdWxxCXZsMCwJdWwxLAltMWEKKwl1bXVsaAl2bDAsCXVsMSwJbTFiCisJc3JsCW0zYSxOQUlMX0JJVFMsCXQwCisJbGRxCXVsMywJOCh1cCkKKwlsZGEJbiwJLTQobikKKwltdWxxCXZsMCwJdWwyLAltMmEKKwlhZGRxCXQwLAlyMzEsCWFjYzEKKwl1bXVsaAl2bDAsCXVsMiwJbTJiCisJc3JsCW0wYSxOQUlMX0JJVFMsCXQwCisJbGRxCXVsMCwJMTYodXApCisJbXVscQl2bDAsCXVsMywJbTNhCisJYWRkcQl0MCwJbTNiLAlhY2MwCisJc3JsCWFjYzEsTlVNQl9CSVRTLAl0MQorCWJyCXIzMSwJTChlbDMpCisKK0woMG00KToJbGRhCW4sCS04KG4pCisJbGRxCXVsMiwJMCh1cCkKKwlsZHEJdWwzLAk4KHVwKQorCW11bHEJdmwwLAl1bDIsCW0yYQorCXVtdWxoCXZsMCwJdWwyLAltMmIKKwlsZHEJdWwwLAkxNih1cCkKKwltdWxxCXZsMCwJdWwzLAltM2EKKwl1bXVsaAl2bDAsCXVsMywJbTNiCisJbGRxCXVsMSwJMjQodXApCisJbGRhCXVwLAkzMih1cCkKKwltdWxxCXZsMCwJdWwwLAltMGEKKwl1bXVsaAl2bDAsCXVsMCwJbTBiCisJYmdlCW4sCUwoZ2U0KQorCisJc3JsCW0yYSxOQUlMX0JJVFMsCXQwCisJbXVscQl2bDAsCXVsMSwJbTFhCisJYWRkcQl0MCwJcjMxLAlhY2MwCisJdW11bGgJdmwwLAl1bDEsCW0xYgorCXNybAltM2EsTkFJTF9CSVRTLAl0MAorCWFkZHEJdDAsCW0yYiwJYWNjMQorCXNybAlhY2MwLE5VTUJfQklUUywJdDEKKwlicglyMzEsCUwodGE0KQorCitMKGdlNCk6CXNybAltMmEsTkFJTF9CSVRTLAl0MAorCWxkcQl1bDIsCTAodXApCisJbXVscQl2bDAsCXVsMSwJbTFhCisJYWRkcQl0MCwJcjMxLAlhY2MwCisJdW11bGgJdmwwLAl1bDEsCW0xYgorCXNybAltM2EsTkFJTF9CSVRTLAl0MAorCWxkcQl1bDMsCTgodXApCisJbGRhCW4sCS00KG4pCisJbXVscQl2bDAsCXVsMiwJbTJhCisJYWRkcQl0MCwJbTJiLAlhY2MxCisJc3JsCWFjYzAsTlVNQl9CSVRTLAl0MQorCWJyCXIzMSwJTChlbDApCisKK0woMm00KToJbGRhCW4sCS00KG4pCisJbGRxCXVsMCwJMCh1cCkKKwlsZHEJdWwxLAk4KHVwKQorCWxkYQl1cCwJMTYodXApCisJbGRhCXJwLAktMTYocnApCisJbXVscQl2bDAsCXVsMCwJbTBhCisJdW11bGgJdmwwLAl1bDAsCW0wYgorCWJnZQluLAlMKGdlMikKKworCW11bHEJdmwwLAl1bDEsCW0xYQorCXVtdWxoCXZsMCwJdWwxLAltMWIKKwlzcmwJbTBhLE5BSUxfQklUUywJdDAKKwlhZGRxCXQwLAlyMzEsCWFjYzAKKwlzcmwJbTFhLE5BSUxfQklUUywJdDAKKwlhZGRxCXQwLAltMGIsCWFjYzEKKwlzcmwJYWNjMCxOVU1CX0JJVFMsCXQxCisJYnIJcjMxLAlMKHRhMikKKworTChnZTIpOglsZHEJdWwyLAkwKHVwKQorCW11bHEJdmwwLAl1bDEsCW0xYQorCXVtdWxoCXZsMCwJdWwxLAltMWIKKwlsZHEJdWwzLAk4KHVwKQorCWxkYQluLAktNChuKQorCW11bHEJdmwwLAl1bDIsCW0yYQorCXVtdWxoCXZsMCwJdWwyLAltMmIKKwlzcmwJbTBhLE5BSUxfQklUUywJdDAKKwlsZHEJdWwwLAkxNih1cCkKKwltdWxxCXZsMCwJdWwzLAltM2EKKwlhZGRxCXQwLAlyMzEsCWFjYzAKKwl1bXVsaAl2bDAsCXVsMywJbTNiCisJc3JsCW0xYSxOQUlMX0JJVFMsCXQwCisJbGRxCXVsMSwJMjQodXApCisJbGRhCXVwLAkzMih1cCkKKwlsZGEJcnAsCTMyKHJwKQorCW11bHEJdmwwLAl1bDAsCW0wYQorCWFkZHEJdDAsCW0wYiwJYWNjMQorCXNybAlhY2MwLE5VTUJfQklUUywJdDEKKwliZ2UJbiwJTChlbDIpCisKKwlicglyMzEsCUwodGE2KQorCitMKDFtNCk6CWxkYQluLAktNChuKQorCWxkcQl1bDEsCTAodXApCisJbGRhCXVwLAk4KHVwKQorCWxkYQlycCwJLTI0KHJwKQorCWJnZQluLAlMKGdlMSkKKworCW11bHEJdmwwLAl1bDEsCW0xYQorCXVtdWxoCXZsMCwJdWwxLAltMWIKKwlzcmwJbTFhLE5BSUxfQklUUywJdDAKKwlhZGRxCXQwLAlyMzEsCWFjYzEKKwlhbmQJYWNjMSxudW1iX21hc2ssCXIyOAorCXNybAlhY2MxLE5VTUJfQklUUywJdDEKKwlzdHEJcjI4LAkyNChycCkKKwlhZGRxCXQxLAltMWIsCXIwCisJcmV0CXIzMSwJKHIyNiksCTEKKworTChnZTEpOglsZHEJdWwyLAkwKHVwKQorCW11bHEJdmwwLAl1bDEsCW0xYQorCXVtdWxoCXZsMCwJdWwxLAltMWIKKwlsZHEJdWwzLAk4KHVwKQorCWxkYQluLAktNChuKQorCW11bHEJdmwwLAl1bDIsCW0yYQorCXVtdWxoCXZsMCwJdWwyLAltMmIKKwlsZHEJdWwwLAkxNih1cCkKKwltdWxxCXZsMCwJdWwzLAltM2EKKwl1bXVsaAl2bDAsCXVsMywJbTNiCisJc3JsCW0xYSxOQUlMX0JJVFMsCXQwCisJbGRxCXVsMSwJMjQodXApCisJbGRhCXVwLAkzMih1cCkKKwlsZGEJcnAsCTMyKHJwKQorCW11bHEJdmwwLAl1bDAsCW0wYQorCWFkZHEJdDAsCXIzMSwJYWNjMQorCXVtdWxoCXZsMCwJdWwwLAltMGIKKwlzcmwJbTJhLE5BSUxfQklUUywJdDAKKwltdWxxCXZsMCwJdWwxLAltMWEKKwlhZGRxCXQwLAltMWIsCWFjYzAKKwlzcmwJYWNjMSxOVU1CX0JJVFMsCXQxCisJYmx0CW4sCUwodGE1KQorCitMKGdlNSk6CWxkcQl1bDIsCTAodXApCisJYnIJcjMxLAlMKGVsMSkKKworCUFMSUdOKDE2KQorTCh0b3ApOgltdWxxCXZsMCwJdWwwLAltMGEJCUMgVTEKKwlhZGRxCXQwLAltMGIsCWFjYzEJCUMgTDAKKwlzcmwJYWNjMCxOVU1CX0JJVFMsCXQxCQlDIFUwCisJc3RxCXIyOCwJLTI0KHJwKQkJCUMgTDEKK0MKK0woZWwyKToJdW11bGgJdmwwLAl1bDAsCW0wYgkJQyBVMQorCWFuZAlhY2MwLG51bWJfbWFzaywJcjI4CQlDIEwwCisJdW5vcAkJCQkJQyBVMAorCXVub3AJCQkJCUMgTDEKK0MKKwl1bm9wCQkJCQlDIFUxCisJYWRkcQl0MSwJYWNjMSwJYWNjMQkJQyBMMAorCXNybAltMmEsTkFJTF9CSVRTLAl0MAkJQyBVMAorCWxkcQl1bDIsCTAodXApCQkJQyBMMQorQworCW11bHEJdmwwLAl1bDEsCW0xYQkJQyBVMQorCWFkZHEJdDAsCW0xYiwJYWNjMAkJQyBMMAorCXNybAlhY2MxLE5VTUJfQklUUywJdDEJCUMgVTAKKwlzdHEJcjI4LAktMTYocnApCQkJQyBMMQorQworTChlbDEpOgl1bXVsaAl2bDAsCXVsMSwJbTFiCQlDIFUxCisJYW5kCWFjYzEsbnVtYl9tYXNrLAlyMjgJCUMgTDAKKwl1bm9wCQkJCQlDIFUwCisJbGRhCW4sCS00KG4pCQkJQyBMMQorQworCXVub3AJCQkJCUMgVTEKKwlhZGRxCXQxLAlhY2MwLAlhY2MwCQlDIEwwCisJc3JsCW0zYSxOQUlMX0JJVFMsCXQwCQlDIFUwCisJbGRxCXVsMywJOCh1cCkJCQlDIEwxCitDCisJbXVscQl2bDAsCXVsMiwJbTJhCQlDIFUxCisJYWRkcQl0MCwJbTJiLAlhY2MxCQlDIEwwCisJc3JsCWFjYzAsTlVNQl9CSVRTLAl0MQkJQyBVMAorCXN0cQlyMjgsCS04KHJwKQkJCUMgTDEKK0MKK0woZWwwKToJdW11bGgJdmwwLAl1bDIsCW0yYgkJQyBVMQorCWFuZAlhY2MwLG51bWJfbWFzaywJcjI4CQlDIEwwCisJdW5vcAkJCQkJQyBVMAorCXVub3AJCQkJCUMgTDEKK0MKKwl1bm9wCQkJCQlDIFUxCisJYWRkcQl0MSwJYWNjMSwJYWNjMQkJQyBMMAorCXNybAltMGEsTkFJTF9CSVRTLAl0MAkJQyBVMAorCWxkcQl1bDAsCTE2KHVwKQkJCUMgTDEKK0MKKwltdWxxCXZsMCwJdWwzLAltM2EJCUMgVTEKKwlhZGRxCXQwLAltM2IsCWFjYzAJCUMgTDAKKwlzcmwJYWNjMSxOVU1CX0JJVFMsCXQxCQlDIFUwCisJc3RxCXIyOCwJMChycCkJCQlDIEwxCitDCitMKGVsMyk6CXVtdWxoCXZsMCwJdWwzLAltM2IJCUMgVTEKKwlhbmQJYWNjMSxudW1iX21hc2ssCXIyOAkJQyBMMAorCXVub3AJCQkJCUMgVTAKKwl1bm9wCQkJCQlDIEwxCitDCisJdW5vcAkJCQkJQyBVMQorCWFkZHEJdDEsCWFjYzAsCWFjYzAJCUMgTDAKKwlzcmwJbTFhLE5BSUxfQklUUywJdDAJCUMgVTAKKwlsZHEJdWwxLAkyNCh1cCkJCQlDIEwxCitDCisJbGRhCXVwLAkzMih1cCkJCQlDIEwwCisJdW5vcAkJCQkJQyBVMQorCWxkYQlycCwJMzIocnApCQkJQyBMMQorCWJnZQluLAlMKHRvcCkJCQlDIFUwCisKK0woZW5kKToJbXVscQl2bDAsCXVsMCwJbTBhCisJYWRkcQl0MCwJbTBiLAlhY2MxCisJc3JsCWFjYzAsTlVNQl9CSVRTLAl0MQorCXN0cQlyMjgsCS0yNChycCkKK0wodGE2KToJdW11bGgJdmwwLAl1bDAsCW0wYgorCWFuZAlhY2MwLG51bWJfbWFzaywJcjI4CisJYWRkcQl0MSwJYWNjMSwJYWNjMQorCXNybAltMmEsTkFJTF9CSVRTLAl0MAorCW11bHEJdmwwLAl1bDEsCW0xYQorCWFkZHEJdDAsCW0xYiwJYWNjMAorCXNybAlhY2MxLE5VTUJfQklUUywJdDEKKwlzdHEJcjI4LAktMTYocnApCitMKHRhNSk6CXVtdWxoCXZsMCwJdWwxLAltMWIKKwlhbmQJYWNjMSxudW1iX21hc2ssCXIyOAorCWFkZHEJdDEsCWFjYzAsCWFjYzAKKwlzcmwJbTNhLE5BSUxfQklUUywJdDAKKwlhZGRxCXQwLAltMmIsCWFjYzEKKwlzcmwJYWNjMCxOVU1CX0JJVFMsCXQxCisJc3RxCXIyOCwJLTgocnApCisJQUxJR04oMTYpCitMKHRhNCk6CWFuZAlhY2MwLG51bWJfbWFzaywJcjI4CisJYWRkcQl0MSwJYWNjMSwJYWNjMQorCXNybAltMGEsTkFJTF9CSVRTLAl0MAorCWFkZHEJdDAsCW0zYiwJYWNjMAorCXNybAlhY2MxLE5VTUJfQklUUywJdDEKKwlzdHEJcjI4LAkwKHJwKQorCXVub3AKKwlBTElHTigxNikKK0wodGEzKToJYW5kCWFjYzEsbnVtYl9tYXNrLAlyMjgKKwlhZGRxCXQxLAlhY2MwLAlhY2MwCisJc3JsCW0xYSxOQUlMX0JJVFMsCXQwCisJYWRkcQl0MCwJbTBiLAlhY2MxCisJc3JsCWFjYzAsTlVNQl9CSVRTLAl0MQorCXN0cQlyMjgsCTgocnApCisJdW5vcAorCUFMSUdOKDE2KQorTCh0YTIpOglhbmQJYWNjMCxudW1iX21hc2ssCXIyOAorCWFkZHEJdDEsCWFjYzEsCWFjYzEKKwlzcmwJYWNjMSxOVU1CX0JJVFMsCXQxCisJc3RxCXIyOCwJMTYocnApCisJYW5kCWFjYzEsbnVtYl9tYXNrLAlyMjgKKwlhZGRxCXQxLAltMWIsCXIwCisJc3RxCXIyOCwJMjQocnApCisJcmV0CXIzMSwJKHIyNiksCTEKK0VQSUxPR1VFKCkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9ldjYvbmFpbHMvc3VibXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9ldjYvbmFpbHMvc3VibXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NzNhNTkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL2V2Ni9uYWlscy9zdWJtdWxfMS5hc20KQEAgLTAsMCArMSwzOTYgQEAKK2RubCAgQWxwaGEgZXY2IG5haWxzIG1wbl9zdWJtdWxfMS4KKworZG5sICBDb3B5cmlnaHQgMjAwMiwgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgY3ljbGVzL2xpbWIKK0MgRVY0OiAgICA0MgorQyBFVjU6ICAgIDE4CitDIEVWNjogICAgIDQKKworQyBUT0RPCitDICAqIFJlcm9sbCBsb29wIGZvciAzLjc1IGMvbCB3aXRoIGN1cnJlbnQgNC13YXkgdW5yb2xsaW5nLgorQyAgKiBUaGUgbG9vcCBpcyBvdmVyc2NoZWR1bGVkIHdydCBsb2FkcyBhbmQgd3J0IG11bHRpcGxpZXMsIGluIHBhcnRpY3VsYXIKK0MgICAgdW11bGguCitDICAqIFVzZSBGUCBsb29wIGNvdW50IGFuZCBtdWx0aXBsZSBleGl0IHBvaW50cywgdGhhdCB3b3VsZCBzaW1wbGlmeSBmZWVkLWluIGxwMAorQyAgICBhbmQgd291bGQgd29yayBzaW5jZSB0aGUgbG9vcCBzdHJ1Y3R1cmUgaXMgcmVhbGx5IHJlZ3VsYXIuCisKK0MgIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLGByMTYnKQorZGVmaW5lKGB1cCcsYHIxNycpCitkZWZpbmUoYG4nLCBgcjE4JykKK2RlZmluZShgdmwwJyxgcjE5JykKKworZGVmaW5lKGBudW1iX21hc2snLGByNicpCisKK2RlZmluZShgbTBhJyxgcjAnKQorZGVmaW5lKGBtMGInLGByMScpCitkZWZpbmUoYG0xYScsYHIyJykKK2RlZmluZShgbTFiJyxgcjMnKQorZGVmaW5lKGBtMmEnLGByMjAnKQorZGVmaW5lKGBtMmInLGByMjEnKQorZGVmaW5lKGBtM2EnLGByMjInKQorZGVmaW5lKGBtM2InLGByMjMnKQorCitkZWZpbmUoYGFjYzAnLGByMjUnKQorZGVmaW5lKGBhY2MxJyxgcjI3JykKKworZGVmaW5lKGB1bDAnLGByNCcpCitkZWZpbmUoYHVsMScsYHI1JykKK2RlZmluZShgdWwyJyxgcjQnKQorZGVmaW5lKGB1bDMnLGByNScpCisKK2RlZmluZShgcmwwJyxgcjI0JykKK2RlZmluZShgcmwxJyxgcjI0JykKK2RlZmluZShgcmwyJyxgcjI0JykKK2RlZmluZShgcmwzJyxgcjI0JykKKworZGVmaW5lKGB0MCcsYHI3JykKK2RlZmluZShgdDEnLGByOCcpCisKK2RlZmluZShgTkFJTF9CSVRTJyxgR01QX05BSUxfQklUUycpCitkZWZpbmUoYE5VTUJfQklUUycsYEdNUF9OVU1CX0JJVFMnKQorCitkbmwgIFRoaXMgZGVjbGFyYXRpb24gaXMgbXVuZ2VkIGJ5IGNvbmZpZ3VyZQorTkFJTFNfU1VQUE9SVCgyLTYzKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX3N1Ym11bF8xKQorCXNsbAl2bDAsIE5BSUxfQklUUywgdmwwCisJbGRhCW51bWJfbWFzaywgLTEocjMxKQorCXNybAludW1iX21hc2ssIE5BSUxfQklUUywgbnVtYl9tYXNrCisKKwlhbmQJbiwJMywJcjI1CisJY21wZXEJcjI1LAkxLAlyMjEKKwlibmUJcjIxLAlMKDFtNCkKKwljbXBlcQlyMjUsCTIsCXIyMQorCWJuZQlyMjEsCUwoMm00KQorCWJlcQlyMjUsCUwoMG00KQorCitMKDNtNCk6CWxkcQl1bDMsCTAodXApCisJbGRhCW4sCS00KG4pCisJbGRxCXVsMCwJOCh1cCkKKwltdWxxCXZsMCwJdWwzLAltM2EKKwl1bXVsaAl2bDAsCXVsMywJbTNiCisJbGRxCXVsMSwJMTYodXApCisJbGRhCXVwLAkyNCh1cCkKKwlsZGEJcnAsCS04KHJwKQorCW11bHEJdmwwLAl1bDAsCW0wYQorCXVtdWxoCXZsMCwJdWwwLAltMGIKKwliZ2UJbiwJTChnZTMpCisKKwltdWxxCXZsMCwJdWwxLAltMWEKKwl1bXVsaAl2bDAsCXVsMSwJbTFiCisJbGRxCXJsMywJOChycCkKKwlzcmwJbTNhLE5BSUxfQklUUywJdDAKKwlhZGRxCXQwLAlyMzEsCWFjYzEKKwlzdWJxCXJsMywJYWNjMSwJYWNjMQorCWxkcQlybDAsCTE2KHJwKQorCXNybAltMGEsTkFJTF9CSVRTLAl0MAorCWFkZHEJdDAsCW0zYiwJYWNjMAorCXNyYQlhY2MxLE5VTUJfQklUUywJdDEKKwlicglyMzEsCUwodGEzKQorCitMKGdlMyk6CWxkcQl1bDIsCTAodXApCisJbXVscQl2bDAsCXVsMSwJbTFhCisJdW11bGgJdmwwLAl1bDEsCW0xYgorCWxkcQlybDMsCTgocnApCisJc3JsCW0zYSxOQUlMX0JJVFMsCXQwCisJbGRxCXVsMywJOCh1cCkKKwlsZGEJbiwJLTQobikKKwltdWxxCXZsMCwJdWwyLAltMmEKKwlhZGRxCXQwLAlyMzEsCWFjYzEKKwl1bXVsaAl2bDAsCXVsMiwJbTJiCisJc3VicQlybDMsCWFjYzEsCWFjYzEKKwlsZHEJcmwwLAkxNihycCkKKwlzcmwJbTBhLE5BSUxfQklUUywJdDAKKwlsZHEJdWwwLAkxNih1cCkKKwltdWxxCXZsMCwJdWwzLAltM2EKKwlhZGRxCXQwLAltM2IsCWFjYzAKKwlzcmEJYWNjMSxOVU1CX0JJVFMsCXQxCisJYnIJcjMxLAlMKGVsMykKKworTCgwbTQpOglsZGEJbiwJLTgobikKKwlsZHEJdWwyLAkwKHVwKQorCWxkcQl1bDMsCTgodXApCisJbXVscQl2bDAsCXVsMiwJbTJhCisJdW11bGgJdmwwLAl1bDIsCW0yYgorCWxkcQl1bDAsCTE2KHVwKQorCW11bHEJdmwwLAl1bDMsCW0zYQorCXVtdWxoCXZsMCwJdWwzLAltM2IKKwlsZHEJdWwxLAkyNCh1cCkKKwlsZGEJdXAsCTMyKHVwKQorCW11bHEJdmwwLAl1bDAsCW0wYQorCXVtdWxoCXZsMCwJdWwwLAltMGIKKwliZ2UJbiwJTChnZTQpCisKKwlsZHEJcmwyLAkwKHJwKQorCXNybAltMmEsTkFJTF9CSVRTLAl0MAorCW11bHEJdmwwLAl1bDEsCW0xYQorCWFkZHEJdDAsCXIzMSwJYWNjMAorCXVtdWxoCXZsMCwJdWwxLAltMWIKKwlzdWJxCXJsMiwJYWNjMCwJYWNjMAorCWxkcQlybDMsCTgocnApCisJc3JsCW0zYSxOQUlMX0JJVFMsCXQwCisJYWRkcQl0MCwJbTJiLAlhY2MxCisJc3JhCWFjYzAsTlVNQl9CSVRTLAl0MQorCWJyCXIzMSwJTCh0YTQpCisKK0woZ2U0KToJbGRxCXJsMiwJMChycCkKKwlzcmwJbTJhLE5BSUxfQklUUywJdDAKKwlsZHEJdWwyLAkwKHVwKQorCW11bHEJdmwwLAl1bDEsCW0xYQorCWFkZHEJdDAsCXIzMSwJYWNjMAorCXVtdWxoCXZsMCwJdWwxLAltMWIKKwlzdWJxCXJsMiwJYWNjMCwJYWNjMAorCWxkcQlybDMsCTgocnApCisJc3JsCW0zYSxOQUlMX0JJVFMsCXQwCisJbGRxCXVsMywJOCh1cCkKKwlsZGEJbiwJLTQobikKKwltdWxxCXZsMCwJdWwyLAltMmEKKwlhZGRxCXQwLAltMmIsCWFjYzEKKwlzcmEJYWNjMCxOVU1CX0JJVFMsCXQxCisJYnIJcjMxLAlMKGVsMCkKKworTCgybTQpOglsZGEJbiwJLTQobikKKwlsZHEJdWwwLAkwKHVwKQorCWxkcQl1bDEsCTgodXApCisJbGRhCXVwLAkxNih1cCkKKwlsZGEJcnAsCS0xNihycCkKKwltdWxxCXZsMCwJdWwwLAltMGEKKwl1bXVsaAl2bDAsCXVsMCwJbTBiCisJYmdlCW4sCUwoZ2UyKQorCisJbXVscQl2bDAsCXVsMSwJbTFhCisJdW11bGgJdmwwLAl1bDEsCW0xYgorCWxkcQlybDAsCTE2KHJwKQorCXNybAltMGEsTkFJTF9CSVRTLAl0MAorCWFkZHEJdDAsCXIzMSwJYWNjMAorCXN1YnEJcmwwLAlhY2MwLAlhY2MwCisJbGRxCXJsMSwJMjQocnApCisJc3JsCW0xYSxOQUlMX0JJVFMsCXQwCisJYWRkcQl0MCwJbTBiLAlhY2MxCisJc3JhCWFjYzAsTlVNQl9CSVRTLAl0MQorCWJyCXIzMSwJTCh0YTIpCisKK0woZ2UyKToJbGRxCXVsMiwJMCh1cCkKKwltdWxxCXZsMCwJdWwxLAltMWEKKwl1bXVsaAl2bDAsCXVsMSwJbTFiCisJbGRxCXVsMywJOCh1cCkKKwlsZGEJbiwJLTQobikKKwltdWxxCXZsMCwJdWwyLAltMmEKKwl1bXVsaAl2bDAsCXVsMiwJbTJiCisJbGRxCXJsMCwJMTYocnApCisJc3JsCW0wYSxOQUlMX0JJVFMsCXQwCisJbGRxCXVsMCwJMTYodXApCisJbXVscQl2bDAsCXVsMywJbTNhCisJYWRkcQl0MCwJcjMxLAlhY2MwCisJdW11bGgJdmwwLAl1bDMsCW0zYgorCXN1YnEJcmwwLAlhY2MwLAlhY2MwCisJbGRxCXJsMSwJMjQocnApCisJc3JsCW0xYSxOQUlMX0JJVFMsCXQwCisJbGRxCXVsMSwJMjQodXApCisJbGRhCXVwLAkzMih1cCkKKwlsZGEJcnAsCTMyKHJwKQorCW11bHEJdmwwLAl1bDAsCW0wYQorCWFkZHEJdDAsCW0wYiwJYWNjMQorCXNyYQlhY2MwLE5VTUJfQklUUywJdDEKKwliZ2UJbiwJTChlbDIpCisKKwlicglyMzEsCUwodGE2KQorCitMKDFtNCk6CWxkYQluLAktNChuKQorCWxkcQl1bDEsCTAodXApCisJbGRhCXVwLAk4KHVwKQorCWxkYQlycCwJLTI0KHJwKQorCWJnZQluLAlMKGdlMSkKKworCW11bHEJdmwwLAl1bDEsCW0xYQorCXVtdWxoCXZsMCwJdWwxLAltMWIKKwlsZHEJcmwxLAkyNChycCkKKwlzcmwJbTFhLE5BSUxfQklUUywJdDAKKwlzdWJxCXJsMSwJdDAsCWFjYzEKKwlhbmQJYWNjMSxudW1iX21hc2ssCXIyOAorCXNyYQlhY2MxLE5VTUJfQklUUywJdDEKKwlzdHEJcjI4LAkyNChycCkKKwlzdWJxCW0xYiwJdDEsCXIwCisJcmV0CXIzMSwJKHIyNiksCTEKKworTChnZTEpOglsZHEJdWwyLAkwKHVwKQorCW11bHEJdmwwLAl1bDEsCW0xYQorCXVtdWxoCXZsMCwJdWwxLAltMWIKKwlsZHEJdWwzLAk4KHVwKQorCWxkYQluLAktNChuKQorCW11bHEJdmwwLAl1bDIsCW0yYQorCXVtdWxoCXZsMCwJdWwyLAltMmIKKwlsZHEJdWwwLAkxNih1cCkKKwltdWxxCXZsMCwJdWwzLAltM2EKKwl1bXVsaAl2bDAsCXVsMywJbTNiCisJbGRxCXJsMSwJMjQocnApCisJc3JsCW0xYSxOQUlMX0JJVFMsCXQwCisJbGRxCXVsMSwJMjQodXApCisJbGRhCXVwLAkzMih1cCkKKwlsZGEJcnAsCTMyKHJwKQorCW11bHEJdmwwLAl1bDAsCW0wYQorCWFkZHEJdDAsCXIzMSwJYWNjMQorCXVtdWxoCXZsMCwJdWwwLAltMGIKKwlzdWJxCXJsMSwJYWNjMSwJYWNjMQorCWxkcQlybDIsCTAocnApCisJc3JsCW0yYSxOQUlMX0JJVFMsCXQwCisJbXVscQl2bDAsCXVsMSwJbTFhCisJYWRkcQl0MCwJbTFiLAlhY2MwCisJc3JhCWFjYzEsTlVNQl9CSVRTLAl0MQorCWJsdAluLAlMKHRhNSkKKworTChnZTUpOglsZHEJdWwyLAkwKHVwKQorCWJyCXIzMSwJTChlbDEpCisKKwlBTElHTigxNikKK0wodG9wKToJbXVscQl2bDAsCXVsMCwJbTBhCQlDIFUxCisJYWRkcQl0MCwJbTBiLAlhY2MxCQlDIEwwCisJc3JhCWFjYzAsTlVNQl9CSVRTLAl0MQkJQyBVMAorCXN0cQlyMjgsCS0yNChycCkJCQlDIEwxCitDCitMKGVsMik6CXVtdWxoCXZsMCwJdWwwLAltMGIJCUMgVTEKKwlhbmQJYWNjMCxudW1iX21hc2ssCXIyOAkJQyBMMAorCXN1YnEJcmwxLAlhY2MxLAlhY2MxCQlDIFUwCisJbGRxCXJsMiwJMChycCkJCQlDIEwxCitDCisJdW5vcAkJCQkJQyBVMQorCWFkZHEJdDEsCWFjYzEsCWFjYzEJCUMgTDAKKwlzcmwJbTJhLE5BSUxfQklUUywJdDAJCUMgVTAKKwlsZHEJdWwyLAkwKHVwKQkJCUMgTDEKK0MKKwltdWxxCXZsMCwJdWwxLAltMWEJCUMgVTEKKwlhZGRxCXQwLAltMWIsCWFjYzAJCUMgTDAKKwlzcmEJYWNjMSxOVU1CX0JJVFMsCXQxCQlDIFUwCisJc3RxCXIyOCwJLTE2KHJwKQkJCUMgTDEKK0MKK0woZWwxKToJdW11bGgJdmwwLAl1bDEsCW0xYgkJQyBVMQorCWFuZAlhY2MxLG51bWJfbWFzaywJcjI4CQlDIEwwCisJc3VicQlybDIsCWFjYzAsCWFjYzAJCUMgVTAKKwlsZHEJcmwzLAk4KHJwKQkJCUMgTDEKK0MKKwlsZGEJbiwJLTQobikJCQlDIEwxCisJYWRkcQl0MSwJYWNjMCwJYWNjMAkJQyBMMAorCXNybAltM2EsTkFJTF9CSVRTLAl0MAkJQyBVMAorCWxkcQl1bDMsCTgodXApCQkJQyBMMQorQworCW11bHEJdmwwLAl1bDIsCW0yYQkJQyBVMQorCWFkZHEJdDAsCW0yYiwJYWNjMQkJQyBMMAorCXNyYQlhY2MwLE5VTUJfQklUUywJdDEJCUMgVTAKKwlzdHEJcjI4LAktOChycCkJCQlDIEwxCitDCitMKGVsMCk6CXVtdWxoCXZsMCwJdWwyLAltMmIJCUMgVTEKKwlhbmQJYWNjMCxudW1iX21hc2ssCXIyOAkJQyBMMAorCXN1YnEJcmwzLAlhY2MxLAlhY2MxCQlDIFUwCisJbGRxCXJsMCwJMTYocnApCQkJQyBMMQorQworCXVub3AJCQkJCUMgVTEKKwlhZGRxCXQxLAlhY2MxLAlhY2MxCQlDIEwwCisJc3JsCW0wYSxOQUlMX0JJVFMsCXQwCQlDIFUwCisJbGRxCXVsMCwJMTYodXApCQkJQyBMMQorQworCW11bHEJdmwwLAl1bDMsCW0zYQkJQyBVMQorCWFkZHEJdDAsCW0zYiwJYWNjMAkJQyBMMAorCXNyYQlhY2MxLE5VTUJfQklUUywJdDEJCUMgVTAKKwlzdHEJcjI4LAkwKHJwKQkJCUMgTDEKK0MKK0woZWwzKToJdW11bGgJdmwwLAl1bDMsCW0zYgkJQyBVMQorCWFuZAlhY2MxLG51bWJfbWFzaywJcjI4CQlDIEwwCisJc3VicQlybDAsCWFjYzAsCWFjYzAJCUMgVTAKKwlsZHEJcmwxLAkyNChycCkJCQlDIEwxCitDCisJdW5vcAkJCQkJQyBVMQorCWFkZHEJdDEsCWFjYzAsCWFjYzAJCUMgTDAKKwlzcmwJbTFhLE5BSUxfQklUUywJdDAJCUMgVTAKKwlsZHEJdWwxLAkyNCh1cCkJCQlDIEwxCitDCisJbGRhCXVwLAkzMih1cCkJCQlDIEwwCisJdW5vcAkJCQkJQyBVMQorCWxkYQlycCwJMzIocnApCQkJQyBMMQorCWJnZQluLAlMKHRvcCkJCQlDIFUwCisKK0woZW5kKToJbXVscQl2bDAsCXVsMCwJbTBhCisJYWRkcQl0MCwJbTBiLAlhY2MxCisJc3JhCWFjYzAsTlVNQl9CSVRTLAl0MQorCXN0cQlyMjgsCS0yNChycCkKK0wodGE2KToJdW11bGgJdmwwLAl1bDAsCW0wYgorCWFuZAlhY2MwLG51bWJfbWFzaywJcjI4CisJc3VicQlybDEsCWFjYzEsCWFjYzEKKwlsZHEJcmwyLAkwKHJwKQorCWFkZHEJdDEsCWFjYzEsCWFjYzEKKwlzcmwJbTJhLE5BSUxfQklUUywJdDAKKwltdWxxCXZsMCwJdWwxLAltMWEKKwlhZGRxCXQwLAltMWIsCWFjYzAKKwlzcmEJYWNjMSxOVU1CX0JJVFMsCXQxCisJc3RxCXIyOCwJLTE2KHJwKQorTCh0YTUpOgl1bXVsaAl2bDAsCXVsMSwJbTFiCisJYW5kCWFjYzEsbnVtYl9tYXNrLAlyMjgKKwlzdWJxCXJsMiwJYWNjMCwJYWNjMAorCWxkcQlybDMsCTgocnApCisJYWRkcQl0MSwJYWNjMCwJYWNjMAorCXNybAltM2EsTkFJTF9CSVRTLAl0MAorCWFkZHEJdDAsCW0yYiwJYWNjMQorCXNyYQlhY2MwLE5VTUJfQklUUywJdDEKKwlzdHEJcjI4LAktOChycCkKKwl1bm9wCisJQUxJR04oMTYpCitMKHRhNCk6CWFuZAlhY2MwLG51bWJfbWFzaywJcjI4CisJc3VicQlybDMsCWFjYzEsCWFjYzEKKwlsZHEJcmwwLAkxNihycCkKKwlhZGRxCXQxLAlhY2MxLAlhY2MxCisJc3JsCW0wYSxOQUlMX0JJVFMsCXQwCisJYWRkcQl0MCwJbTNiLAlhY2MwCisJc3JhCWFjYzEsTlVNQl9CSVRTLAl0MQorCXN0cQlyMjgsCTAocnApCisJdW5vcAorCUFMSUdOKDE2KQorTCh0YTMpOglhbmQJYWNjMSxudW1iX21hc2ssCXIyOAorCXN1YnEJcmwwLAlhY2MwLAlhY2MwCisJbGRxCXJsMSwJMjQocnApCisJYWRkcQl0MSwJYWNjMCwJYWNjMAorCXNybAltMWEsTkFJTF9CSVRTLAl0MAorCWFkZHEJdDAsCW0wYiwJYWNjMQorCXNyYQlhY2MwLE5VTUJfQklUUywJdDEKKwlzdHEJcjI4LAk4KHJwKQorCXVub3AKKwlBTElHTigxNikKK0wodGEyKToJYW5kCWFjYzAsbnVtYl9tYXNrLAlyMjgKKwlzdWJxCXJsMSwJYWNjMSwJYWNjMQorCWFkZHEJdDEsCWFjYzEsCWFjYzEKKwlzcmEJYWNjMSxOVU1CX0JJVFMsCXQxCisJc3RxCXIyOCwJMTYocnApCisJYW5kCWFjYzEsbnVtYl9tYXNrLAlyMjgKKwlzdWJxCW0xYiwJdDEsCXIwCisJc3RxCXIyOCwJMjQocnApCisJcmV0CXIzMSwJKHIyNiksCTEKK0VQSUxPR1VFKCkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9ldjYvc2xvdC5wbCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvZXY2L3Nsb3QucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTRjOGEzNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvZXY2L3Nsb3QucGwKQEAgLTAsMCArMSwzMTggQEAKKyMhL3Vzci9iaW4vcGVybCAtdworCisjIENvcHlyaWdodCAyMDAwLCAyMDAxLCAyMDAzLTIwMDUsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisjCisjICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKyMKKyMgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorIyAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisjICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgIG9yCisjCisjICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjICAgICAgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisjCisjICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjICBmb3IgbW9yZSBkZXRhaWxzLgorIworIyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorIyAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorIyAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKKyMgVXNhZ2U6IHNsb3QucGwgW2ZpbGVuYW1lLm9dLi4uCisjCisjIFJ1biAib2JqZHVtcCIgdG8gcHJvZHVjZSBhIGRpc2Fzc2VtYmx5IG9mIHRoZSBnaXZlbiBvYmplY3QgZmlsZShzKSBhbmQKKyMgYW5ub3RhdGUgdGhlIG91dHB1dCB3aXRoICJVIiBvciAiTCIgc2xvdHRpbmcgd2hpY2ggQWxwaGEgRVY2IHdpbGwgdXNlLgorIworIyBXaGVuIGFuIGluc3RydWN0aW9uIGlzIEUgKGllLiBlaXRoZXIgVSBvciBMKSwgYW4gImVVIiBvciAiZUwiIGlzIHNob3duLCBhcworIyBhIHJlbWluZGVyIHRoYXQgaXQgd2Fzbid0IGEgZml4ZWQgcmVxdWlyZW1lbnQgdGhhdCBnYXZlIHRoZSBVIG9yIEwsIGJ1dAorIyB0aGUgb2N0YXdvcmQgc2xvdHRpbmcgcnVsZXMuCisjCisjIElmIGFuIGluc3RydWN0aW9uIGlzIG5vdCByZWNvZ25pc2VkLCB0aGF0IG9jdGF3b3JkIGRvZXMgbm90IGdldCBhbnkgVS9MCisjIHNob3duLCBvbmx5IGxvd2VyLWNhc2UgInUiLCAibCIgb3IgImUiIGZvciB0aGUgaW5zdHJ1Y3Rpb25zIHdoaWNoIGFyZQorIyBrbm93bi4gIEFkZCBhbnkgdW5rbm93biBpbnN0cnVjdGlvbnMgdG8gJW9wdGFibGUgYmVsb3cuCisKKwordXNlIHN0cmljdDsKKworIyBUaGUgVSBvciBMIHdoaWNoIHZhcmlvdXMgaW5zdHJ1Y3Rpb25zIGRlbWFuZCwgb3IgRSBpZiBlaXRoZXIuCisjCitteSAlb3B0YWJsZSA9CisgICgKKyAgICdhZGRxJyAgID0+ICdFJywKKyAgICdhbmQnICAgID0+ICdFJywKKyAgICdhbmRub3QnID0+ICdFJywKKyAgICdiZXEnICAgID0+ICdVJywKKyAgICdiZ2UnICAgID0+ICdVJywKKyAgICdiZ3QnICAgID0+ICdVJywKKyAgICdiaWMnICAgID0+ICdFJywKKyAgICdiaXMnICAgID0+ICdFJywKKyAgICdibHQnICAgID0+ICdVJywKKyAgICdibmUnICAgID0+ICdVJywKKyAgICdicicgICAgID0+ICdMJywKKyAgICdjbHInICAgID0+ICdFJywKKyAgICdjbXB1bGUnID0+ICdFJywKKyAgICdjbXB1bHQnID0+ICdFJywKKyAgICdjbXBlcScgID0+ICdFJywKKyAgICdjbW92ZXEnID0+ICdFJywKKyAgICdjbW92bmUnID0+ICdFJywKKyAgICdjdHBvcCcgID0+ICdVJywKKyAgICdjdGx6JyAgID0+ICdVJywKKyAgICdjdHR6JyAgID0+ICdVJywKKyAgICdleHRibCcgID0+ICdVJywKKyAgICdleHRsaCcgID0+ICdVJywKKyAgICdleHRsbCcgID0+ICdVJywKKyAgICdleHRxaCcgID0+ICdVJywKKyAgICdleHRxbCcgID0+ICdVJywKKyAgICdleHR3aCcgID0+ICdVJywKKyAgICdleHR3bCcgID0+ICdVJywKKyAgICdqc3InICAgID0+ICdMJywKKyAgICdsZGEnICAgID0+ICdFJywKKyAgICdsZGFoJyAgID0+ICdFJywKKyAgICdsZGJ1JyAgID0+ICdMJywKKyAgICdsZGwnICAgID0+ICdMJywKKyAgICdsZHEnICAgID0+ICdMJywKKyAgICdsZHQnICAgID0+ICdMJywKKyAgICdyZXQnICAgID0+ICdMJywKKyAgICdtb3YnICAgID0+ICdFJywKKyAgICdtdWxsJyAgID0+ICdVJywKKyAgICdtdWxxJyAgID0+ICdVJywKKyAgICduZWdxJyAgID0+ICdFJywKKyAgICdub3AnICAgID0+ICdFJywKKyAgICdub3QnICAgID0+ICdFJywKKyAgICdzOGFkZHEnID0+ICdFJywKKyAgICdzOHN1YnEnID0+ICdFJywKKyAgICMgJ3NleHRiJyAgPT4gPworICAgIyAnc2V4dGwnICA9PiA/CisgICAnc2xsJyAgICA9PiAnVScsCisgICAnc3JsJyAgICA9PiAnVScsCisgICAnc3RxJyAgICA9PiAnTCcsCisgICAnc3VicScgICA9PiAnRScsCisgICAndW11bGgnICA9PiAnVScsCisgICAndW5vcCcgICA9PiAnRScsCisgICAneG9yJyAgICA9PiAnRScsCisgICk7CisKKyMgU2xvdHRpbmdzIHVzZWQgZm9yIGEgZ2l2ZW4gcGF0dGVybiBvZiBVL0wvRSBpbiBhbiBvY3Rhd29yZC4gIFRoaXMgaXMgYXMKKyMgcGVyIHRoZSAiRWJveCBTbG90dGluZyIgc2VjdGlvbiBvZiB0aGUgRVY2IGhhcmR3YXJlIHJlZmVyZW5jZSBtYW51YWwuCisjCitteSAlc2xvdHRhYmxlID0KKyAgKAorICAgJ0VFRUUnID0+ICdVTFVMJywKKyAgICdFRUVMJyA9PiAnVUxVTCcsCisgICAnRUVFVScgPT4gJ1VMTFUnLAorICAgJ0VFTEUnID0+ICdVTExVJywKKyAgICdFRUxMJyA9PiAnVVVMTCcsCisgICAnRUVMVScgPT4gJ1VMTFUnLAorICAgJ0VFVUUnID0+ICdVTFVMJywKKyAgICdFRVVMJyA9PiAnVUxVTCcsCisgICAnRUVVVScgPT4gJ0xMVVUnLAorICAgJ0VMRUUnID0+ICdVTFVMJywKKyAgICdFTEVMJyA9PiAnVUxVTCcsCisgICAnRUxFVScgPT4gJ1VMTFUnLAorICAgJ0VMTEUnID0+ICdVTExVJywKKyAgICdFTExMJyA9PiAnVUxMTCcsCisgICAnRUxMVScgPT4gJ1VMTFUnLAorICAgJ0VMVUUnID0+ICdVTFVMJywKKyAgICdFTFVMJyA9PiAnVUxVTCcsCisKKyAgICdMTExMJyA9PiAnTExMTCcsCisgICAnTExMVScgPT4gJ0xMTFUnLAorICAgJ0xMVUUnID0+ICdMTFVVJywKKyAgICdMTFVMJyA9PiAnTExVTCcsCisgICAnTExVVScgPT4gJ0xMVVUnLAorICAgJ0xVRUUnID0+ICdMVUxVJywKKyAgICdMVUVMJyA9PiAnTFVVTCcsCisgICAnTFVFVScgPT4gJ0xVTFUnLAorICAgJ0xVTEUnID0+ICdMVUxVJywKKyAgICdMVUxMJyA9PiAnTFVMTCcsCisgICAnTFVMVScgPT4gJ0xVTFUnLAorICAgJ0xVVUUnID0+ICdMVVVMJywKKyAgICdMVVVMJyA9PiAnTFVVTCcsCisgICAnTFVVVScgPT4gJ0xVVVUnLAorICAgJ1VFRUUnID0+ICdVTFVMJywKKyAgICdVRUVMJyA9PiAnVUxVTCcsCisgICAnVUVFVScgPT4gJ1VMTFUnLAorCisgICAnRUxVVScgPT4gJ0xMVVUnLAorICAgJ0VVRUUnID0+ICdMVUxVJywKKyAgICdFVUVMJyA9PiAnTFVVTCcsCisgICAnRVVFVScgPT4gJ0xVTFUnLAorICAgJ0VVTEUnID0+ICdMVUxVJywKKyAgICdFVUxMJyA9PiAnVVVMTCcsCisgICAnRVVMVScgPT4gJ0xVTFUnLAorICAgJ0VVVUUnID0+ICdMVVVMJywKKyAgICdFVVVMJyA9PiAnTFVVTCcsCisgICAnRVVVVScgPT4gJ0xVVVUnLAorICAgJ0xFRUUnID0+ICdMVUxVJywKKyAgICdMRUVMJyA9PiAnTFVVTCcsCisgICAnTEVFVScgPT4gJ0xVTFUnLAorICAgJ0xFTEUnID0+ICdMVUxVJywKKyAgICdMRUxMJyA9PiAnTFVMTCcsCisgICAnTEVMVScgPT4gJ0xVTFUnLAorICAgJ0xFVUUnID0+ICdMVVVMJywKKyAgICdMRVVMJyA9PiAnTFVVTCcsCisgICAnTEVVVScgPT4gJ0xMVVUnLAorICAgJ0xMRUUnID0+ICdMTFVVJywKKyAgICdMTEVMJyA9PiAnTExVTCcsCisgICAnTExFVScgPT4gJ0xMVVUnLAorICAgJ0xMTEUnID0+ICdMTExVJywKKworICAgJ1VFTEUnID0+ICdVTExVJywKKyAgICdVRUxMJyA9PiAnVVVMTCcsCisgICAnVUVMVScgPT4gJ1VMTFUnLAorICAgJ1VFVUUnID0+ICdVTFVMJywKKyAgICdVRVVMJyA9PiAnVUxVTCcsCisgICAnVUVVVScgPT4gJ1VMVVUnLAorICAgJ1VMRUUnID0+ICdVTFVMJywKKyAgICdVTEVMJyA9PiAnVUxVTCcsCisgICAnVUxFVScgPT4gJ1VMTFUnLAorICAgJ1VMTEUnID0+ICdVTExVJywKKyAgICdVTExMJyA9PiAnVUxMTCcsCisgICAnVUxMVScgPT4gJ1VMTFUnLAorICAgJ1VMVUUnID0+ICdVTFVMJywKKyAgICdVTFVMJyA9PiAnVUxVTCcsCisgICAnVUxVVScgPT4gJ1VMVVUnLAorICAgJ1VVRUUnID0+ICdVVUxMJywKKyAgICdVVUVMJyA9PiAnVVVMTCcsCisgICAnVVVFVScgPT4gJ1VVTFUnLAorICAgJ1VVTEUnID0+ICdVVUxMJywKKyAgICdVVUxMJyA9PiAnVVVMTCcsCisgICAnVVVMVScgPT4gJ1VVTFUnLAorICAgJ1VVVUUnID0+ICdVVVVMJywKKyAgICdVVVVMJyA9PiAnVVVVTCcsCisgICAnVVVVVScgPT4gJ1VVVVUnLAorICApOworCisjIENoZWNrIGFsbCBjb21iaW5hdGlvbnMgb2YgVS9ML0UgYXJlIHByZXNlbnQgaW4gJXNsb3R0YWJsZS4KK3N1YiBjb3ZlcmFnZSB7CisgIGZvcmVhY2ggbXkgJGEgKCdVJywgJ0wnLCAnRScpIHsKKyAgICBmb3JlYWNoIG15ICRiICgnVScsICdMJywgJ0UnKSB7CisgICAgICBmb3JlYWNoIG15ICRjICgnVScsICdMJywgJ0UnKSB7CisgICAgICAgIGZvcmVhY2ggbXkgJGQgKCdVJywgJ0wnLCAnRScpIHsKKyAgICAgICAgICBteSAkeCA9ICRhIC4gJGIgLiAkYyAuICRkOworICAgICAgICAgIGlmICghIGRlZmluZWQgJHNsb3R0YWJsZXskeH0pIHsKKyAgICAgICAgICAgIHByaW50ICJzbG90dGFibGUgbWlzc2luZzogJHhcbiIKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworIyBDZXJ0YWluIGNvbnNpc3RlbmN5IGNoZWNrcyBmb3IgJXNsb3R0YWJsZS4KK3N1YiBjaGVjayB7CisgIGZvcmVhY2ggbXkgJHggKGtleXMgJXNsb3R0YWJsZSkgeworICAgIG15ICRhID0gc3Vic3RyKCR4LDAsMSk7CisgICAgbXkgJGIgPSBzdWJzdHIoJHgsMSwxKTsKKyAgICBteSAkYyA9IHN1YnN0cigkeCwyLDEpOworICAgIG15ICRkID0gc3Vic3RyKCR4LDMsMSk7CisgICAgbXkgJGVzID0gKCRhIGVxICdFJykgKyAoJGIgZXEgJ0UnKSArICgkYyBlcSAnRScpICsgKCRkIGVxICdFJyk7CisgICAgbXkgJGxzID0gKCRhIGVxICdMJykgKyAoJGIgZXEgJ0wnKSArICgkYyBlcSAnTCcpICsgKCRkIGVxICdMJyk7CisgICAgbXkgJHVzID0gKCRhIGVxICdVJykgKyAoJGIgZXEgJ1UnKSArICgkYyBlcSAnVScpICsgKCRkIGVxICdVJyk7CisKKyAgICBteSAkZ290ID0gJHNsb3R0YWJsZXskeH07CisgICAgbXkgJHdhbnQgPSAkeDsKKworICAgIGlmICgkZXMgPT0gMCkgeworCisgICAgfSBlbHNpZiAoJGVzID09IDEpIHsKKyAgICAgICMgd2hlbiBvbmx5IG9uZSBFLCBpdCdzIG1hcHBlZCB0byB3aGljaGV2ZXIgb2YgVSBvciBMIGlzIG90aGVyd2lzZQorICAgICAgIyB1c2VkIHRoZSBsZWFzdAorICAgICAgaWYgKCRscyA+ICR1cykgeworICAgICAgICAkd2FudCA9fiBzL0UvVS87CisgICAgICB9IGVsc2UgeworICAgICAgICAkd2FudCA9fiBzL0UvTC87CisgICAgICB9CisgICAgfSBlbHNpZiAoJGVzID09IDIpIHsKKyAgICAgICMgd2hlbiB0d28gRSdzIGFuZCB0d28gVSwgdGhlbiB0aGUgRSdzIG1hcCB0byBMOyB2aWNlIHZlcnNhIGZvciB0d28gRQorICAgICAgIyBhbmQgdHdvIEwKKyAgICAgIGlmICgkbHMgPT0gMikgeworICAgICAgICAkd2FudCA9fiBzL0UvVS9nOworICAgICAgfSBlbHNpZiAoJHVzID09IDIpIHsKKyAgICAgICAgJHdhbnQgPX4gcy9FL0wvZzsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIG5leHQ7CisgICAgICB9CisgICAgfSBlbHNpZiAoJGVzID09IDMpIHsKKyAgICAgIG5leHQ7CisKKyAgICB9IGVsc2UgeyAjICRlcyA9PSA0CisgICAgICBuZXh0OworICAgIH0KKworICAgIGlmICgkd2FudCBuZSAkZ290KSB7CisgICAgICBwcmludCAic2xvdHRhYmxlICR4IHdhbnQgJHdhbnQgZ290ICRnb3RcbiI7CisgICAgfQorICB9Cit9CisKK3N1YiBkaXNhc3NlbWJsZSB7CisgIG15ICgkZmlsZSkgPSBAXzsKKworICBvcGVuIChJTiwgIm9iamR1bXAgLVNyZmggJGZpbGUgfCIpIHx8IGRpZSAiQ2Fubm90IG9wZW4gcGlwZSBmcm9tIG9iamR1bXBcbiI7CisKKyAgbXkgKCVwcmUsICVwb3N0LCAldHlwZSk7CisgIHdoaWxlICg8SU4+KSB7CisgICAgbXkgJGxpbmUgPSAkXyAuICIiOworCisgICAgaWYgKCRsaW5lID1+IC8oXlsgXHRdKlswLTlhLWZdKihbMC05YS1mXSk6WyBcdF0qWzAtOWEtZl1bMC05YS1mXSBbMC05YS1mXVswLTlhLWZdIFswLTlhLWZdWzAtOWEtZl0gWzAtOWEtZl1bMC05YS1mXSApXHQoKFthLXowLTldKykuKikvKSB7CisgICAgICBteSAoJHRoaXNfcHJlLCAkYWRkciwgJHRoaXNfcG9zdCwgJG9wY29kZSkgPSAoJDEsICQyLCAkMywgJDQpOworCisgICAgICBteSAkdGhpc190eXBlID0gJG9wdGFibGV7JG9wY29kZX07CisgICAgICBpZiAoISBkZWZpbmVkICgkdGhpc190eXBlKSkgeyAkdGhpc190eXBlID0gJyAnOyB9CisKKyAgICAgICRwcmV7JGFkZHJ9ID0gJHRoaXNfcHJlOworICAgICAgJHBvc3R7JGFkZHJ9ID0gJHRoaXNfcG9zdDsKKyAgICAgICR0eXBleyRhZGRyfSA9ICR0aGlzX3R5cGU7CisKKyAgICAgIGlmICgkYWRkciBlcSAnYycpIHsKKyAgICAgICAgbXkgJXNsb3QgPSAoJzAnPT4nICcsICc0Jz0+JyAnLCAnOCc9PicgJywgJ2MnPT4nICcpOworCisgICAgICAgIG15ICRzdHIgPSAkdHlwZXsnYyd9IC4gJHR5cGV7JzgnfSAuICR0eXBleyc0J30gLiAkdHlwZXsnMCd9OworICAgICAgICAkc3RyID0gJHNsb3R0YWJsZXskc3RyfTsKKyAgICAgICAgaWYgKGRlZmluZWQgJHN0cikgeworICAgICAgICAgICRzbG90eydjJ30gPSBzdWJzdHIoJHN0ciwwLDEpOworICAgICAgICAgICRzbG90eyc4J30gPSBzdWJzdHIoJHN0ciwxLDEpOworICAgICAgICAgICRzbG90eyc0J30gPSBzdWJzdHIoJHN0ciwyLDEpOworICAgICAgICAgICRzbG90eycwJ30gPSBzdWJzdHIoJHN0ciwzLDEpOworICAgICAgICB9CisKKyAgICAgICAgZm9yZWFjaCBteSAkaSAoJzAnLCAnNCcsICc4JywgJ2MnKSB7CisgICAgICAgICAgaWYgKCRzbG90eyRpfSBlcSAkdHlwZXskaX0pIHsgJHR5cGV7JGl9ID0gJyAnOyB9CisgICAgICAgICAgcHJpbnQgJHByZXskaX0sICcgJywgbGMoJHR5cGV7JGl9KSwkc2xvdHskaX0sICcgICcsICRwb3N0eyRpfSwgIlxuIjsKKyAgICAgICAgfQorCisgICAgICAgICVwcmUgPSAoKTsKKyAgICAgICAgJXR5cGUgPSAoKTsKKyAgICAgICAgJXBvc3QgPSAoKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBjbG9zZSBJTiB8fCBkaWUgIkVycm9yIGZyb20gb2JqZHVtcCAob3Igb2JqZHVtcCBub3QgYXZhaWxhYmxlKVxuIjsKK30KKworY292ZXJhZ2UoKTsKK2NoZWNrKCk7CisKK215IEBmaWxlczsKK2lmICgkI0FSR1YgPj0gMCkgeworICBAZmlsZXMgPSBAQVJHVjsKK30gZWxzZSB7CisgIGRpZQorfQorCitmb3JlYWNoIChAZmlsZXMpICB7CisgICAgZGlzYXNzZW1ibGUoJF8pOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9ldjYvc3ViX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9ldjYvc3ViX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNWJhNDAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL2V2Ni9zdWJfbi5hc20KQEAgLTAsMCArMSwyODMgQEAKK2RubCAgQWxwaGEgZXY2IG1wbl9zdWJfbiAtLSBTdWJ0cmFjdCB0d28gbGltYiB2ZWN0b3JzIG9mIHRoZSBzYW1lIGxlbmd0aCA+IDAKK2RubCAgYW5kIHN0b3JlIGRpZmZlcmVuY2UgaW4gYSB0aGlyZCBsaW1iIHZlY3Rvci4KKworZG5sICBDb3B5cmlnaHQgMjAwMCwgMjAwMywgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgY3ljbGVzL2xpbWIKK0MgRVY0OiAgICAgPworQyBFVjU6ICAgICA1LjQKK0MgRVY2OiAgICAgMi4xMjUKKworQyAgSU5QVVQgUEFSQU1FVEVSUworQyAgcnAJcjE2CitDICB1cAlyMTcKK0MgIHZwCXIxOAorQyAgbglyMTkKK0MgIGN5CXIyMCAgIChmb3IgbXBuX2FkZF9uYykKKworQyBUT0RPCitDICAgRmluaXNoIGNsZWFuaW5nIHVwIGN5IHJlZ2lzdGVycyByMjIsIHIyMyAobWFrZSB0aGVtIHVzZSBjeTAvY3kxKQorQyAgIFVzZSBtdWx0aS1wcm9uZ2VkIGZlZWQtaW4uCitDICAgUGVyZm9ybSBhZGRpdGlvbmFsIG1pY3JvLXR1bmluZworCitDICBUaGlzIGNvZGUgd2FzIHdyaXR0ZW4gaW4gY29vcGVyYXRpb24gd2l0aCBldjYgcGlwZWxpbmUgZXhwZXJ0IFN0ZXZlIFJvb3QuCisKK0MgIFBhaXIgbG9hZHMgYW5kIHN0b3JlcyB3aGVyZSBwb3NzaWJsZQorQyAgU3RvcmUgcGFpcnMgb2N0LWFsaWduZWQgd2hlcmUgcG9zc2libGUgKGRpZG4ndCBuZWVkIGl0IGhlcmUpCitDICBTdG9yZXMgYXJlIGRlbGF5ZWQgZXZlcnkgdGhpcmQgY3ljbGUKK0MgIExvYWRzIGFuZCBzdG9yZXMgYXJlIGRlbGF5ZWQgYnkgZmlsbHMKK0MgIFUgc3RheXMgc3RpbGwsIHB1dCBjb2RlIHRoZXJlIHdoZXJlIHBvc3NpYmxlIChub3RlIGFsdGVybmF0aW9uIG9mIFUxIGFuZCBVMCkKK0MgIEwgbW92ZXMgYmVjYXVzZSBvZiBsb2FkcyBhbmQgc3RvcmVzCitDICBOb3RlIGRhbXBlcnMgaW4gTCB0byBsaW1pdCBkYW1hZ2UKKworQyAgVGhpcyBvZGQtbG9va2luZyBvcHRpbWl6YXRpb24gZXhwZWN0cyB0aGF0IHdlcmUgaGF2aW5nIHJhbmRvbSBiaXRzIGluIG91cgorQyAgZGF0YSwgc28gdGhhdCBhIHB1cmUgemVybyByZXN1bHQgaXMgdW5saWtlbHkuIHNvIHdlIHBlbmFsaXplIHRoZSB1bmxpa2VseQorQyAgY2FzZSB0byBoZWxwIHRoZSBjb21tb24gY2FzZS4KKworZGVmaW5lKGB1MCcsIGByMCcpICBkZWZpbmUoYHUxJywgYHIzJykKK2RlZmluZShgdjAnLCBgcjEnKSAgZGVmaW5lKGB2MScsIGByNCcpCisKK2RlZmluZShgY3kwJywgYHIyMCcpICBkZWZpbmUoYGN5MScsIGByMjEnKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9zdWJfbiBtcG5fc3ViX25jKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX3N1Yl9uYykKKwlicglyMzEsCSRlbnRyeQorRVBJTE9HVUUoKQorUFJPTE9HVUUobXBuX3N1Yl9uKQorCWJpcwlyMzEsCXIzMSwJY3kwCUMgY2xlYXIgY2FycnkgaW4KKyRlbnRyeToJY21wdWx0CXIxOSwJNSwJcjIyCUMgTDEgbW92ZSBjb3VudGVyCisJbGRxCXUxLAkwKHIxNykJCUMgTDAgZ2V0IG5leHQgb25lcworCWxkcQl2MSwJMChyMTgpCQlDIEwxCisJYm5lCXIyMiwJJExzbWFsbAorCisJbGRxCXUwLAk4KHIxNykJCUMgTDAgZ2V0IG5leHQgb25lcworCWxkcQl2MCwJOChyMTgpCQlDIEwxCisJc3VicQl1MSwJdjEsCXI1CUMgVTAgc3ViIHR3byBkYXRhCisKKwljbXB1bHQJdTEsCXYxLAlyMjMJQyBVMCBkaWQgaXQgYm9ycm93CisJbGRxCXUxLAkxNihyMTcpCQlDIEwwIGdldCBuZXh0IG9uZXMKKwlsZHEJdjEsCTE2KHIxOCkJCUMgTDEKKworCXN1YnEJdTAsCXYwLAlyOAlDIFUxIHN1YiB0d28gZGF0YQorCXN1YnEJcjUsCWN5MCwJcjI0CUMgVTAgYm9ycm93IGluCisKKwljbXB1bHQJdTAsCXYwLAlyMjIJQyBVMSBkaWQgaXQgYm9ycm93CisJYmVxCXI1LAkkZml4NWYJCUMgVTAgZml4IGV4YWN0IHplcm8KKyRyZXQ1ZjoJbGRxCXUwLAkyNChyMTcpCQlDIEwwIGdldCBuZXh0IG9uZXMKKwlsZHEJdjAsCTI0KHIxOCkJCUMgTDEKKworCXN1YnEJcjgsCXIyMywJcjI1CUMgVTEgYm9ycm93IGZyb20gbGFzdAorCXN1YnEJdTEsCXYxLAlyNwlDIFUwIHN1YiB0d28gZGF0YQorCisJYmVxCXI4LAkkZml4NmYJCUMgVTEgZml4IGV4YWN0IHplcm8KKyRyZXQ2ZjoJY21wdWx0CXUxLAl2MSwJcjIzCUMgVTAgZGlkIGl0IGJvcnJvdworCWxkcQl1MSwJMzIocjE3KQkJQyBMMCBnZXQgbmV4dCBvbmVzCisJbGRxCXYxLAkzMihyMTgpCQlDIEwxCisKKwlsZGEJcjE3LAk0MChyMTcpCQlDIEwwIG1vdmUgcG9pbnRlcgorCWxkYQlyMTgsCTQwKHIxOCkJCUMgTDEgbW92ZSBwb2ludGVyCisKKwlsZGEJcjE2LAktOChyMTYpCisJbGRhCXIxOSwJLTEzKHIxOSkJQyBMMSBtb3ZlIGNvdW50ZXIKKwlibHQJcjE5LAkkTGVuZAkJQyBVMSBsb29wIGNvbnRyb2wKKworCitDIE1haW4gbG9vcC4gIDgtd2F5IHVucm9sbGVkLgorCUFMSUdOKDE2KQorJExvb3A6CXN1YnEJdTAsCXYwLAlyMglDIFUxIHN1YiB0d28gZGF0YQorCXN0cQlyMjQsCTgocjE2KQkJQyBMMCBwdXQgYW4gYW5zd2VyCisJc3VicQlyNywJcjIyLAlyMjQJQyBVMCBib3Jyb3cgZnJvbSBsYXN0CisJc3RxCXIyNSwJMTYocjE2KQkJQyBMMSBwYWlyCisKKwljbXB1bHQJdTAsCXYwLAljeTEJQyBVMSBkaWQgaXQgYm9ycm93CisJYmVxCXI3LAkkZml4NwkJQyBVMCBmaXggZXhhY3QgMAorJHJldDc6CWxkcQl1MCwJMChyMTcpCQlDIEwwIGdldCBuZXh0IG9uZXMKKwlsZHEJdjAsCTAocjE4KQkJQyBMMQorCisJYmlzCXIzMSwJcjMxLAlyMzEJQyBMICBkYW1wIG91dAorCXN1YnEJcjIsCXIyMywJcjI1CUMgVTEgYm9ycm93IGZyb20gbGFzdAorCWJpcwlyMzEsCXIzMSwJcjMxCUMgTCAgbW92ZXMgaW4gTCAhCisJc3VicQl1MSwJdjEsCXI1CUMgVTAgc3ViIHR3byBkYXRhCisKKwliZXEJcjIsCSRmaXgwCQlDIFUxIGZpeCBleGFjdCB6ZXJvCiskcmV0MDoJY21wdWx0CXUxLAl2MSwJY3kwCUMgVTAgZGlkIGl0IGJvcnJvdworCWxkcQl1MSwJOChyMTcpCQlDIEwwIGdldCBuZXh0IG9uZXMKKwlsZHEJdjEsCTgocjE4KQkJQyBMMQorCisJc3VicQl1MCwJdjAsCXI4CUMgVTEgc3ViIHR3byBkYXRhCisJc3RxCXIyNCwJMjQocjE2KQkJQyBMMCBzdG9yZSBwYWlyCisJc3VicQlyNSwJY3kxLAlyMjQJQyBVMCBib3Jyb3cgZnJvbSBsYXN0CisJc3RxCXIyNSwJMzIocjE2KQkJQyBMMQorCisJY21wdWx0CXUwLAl2MCwJcjIyCUMgVTEgZGlkIGl0IGJvcnJvdworCWJlcQlyNSwJJGZpeDEJCUMgVTAgZml4IGV4YWN0IHplcm8KKyRyZXQxOglsZHEJdTAsCTE2KHIxNykJCUMgTDAgZ2V0IG5leHQgb25lcworCWxkcQl2MCwJMTYocjE4KQkJQyBMMQorCisJbGRhCXIxNiwJNjQocjE2KQkJQyBMMCBtb3ZlIHBvaW50ZXIKKwlzdWJxCXI4LAljeTAsCXIyNQlDIFUxIGJvcnJvdyBmcm9tIGxhc3QKKwlsZGEJcjE5LAktOChyMTkpCQlDIEwxIG1vdmUgY291bnRlcgorCXN1YnEJdTEsCXYxLAlyNwlDIFUwIHN1YiB0d28gZGF0YQorCisJYmVxCXI4LAkkZml4MgkJQyBVMSBmaXggZXhhY3QgemVybworJHJldDI6CWNtcHVsdAl1MSwJdjEsCXIyMwlDIFUwIGRpZCBpdCBib3Jyb3cKKwlsZHEJdTEsCTI0KHIxNykJCUMgTDAgZ2V0IG5leHQgb25lcworCWxkcQl2MSwJMjQocjE4KQkJQyBMMQorCisJc3VicQl1MCwJdjAsCXIyCUMgVTEgc3ViIHR3byBkYXRhCisJc3RxCXIyNCwJLTI0KHIxNikJQyBMMCBwdXQgYW4gYW5zd2VyCisJc3VicQlyNywJcjIyLAlyMjQJQyBVMCBib3Jyb3cgZnJvbSBsYXN0CisJc3RxCXIyNSwJLTE2KHIxNikJQyBMMSBwYWlyCisKKwljbXB1bHQJdTAsCXYwLAljeTEJQyBVMSBkaWQgaXQgYm9ycm93CisJYmVxCXI3LAkkZml4MwkJQyBVMCBmaXggZXhhY3QgMAorJHJldDM6CWxkcQl1MCwJMzIocjE3KQkJQyBMMCBnZXQgbmV4dCBvbmVzCisJbGRxCXYwLAkzMihyMTgpCQlDIEwxCisKKwliaXMJcjMxLAlyMzEsCXIzMQlDIEwgIGRhbXAgb3V0CisJc3VicQlyMiwJcjIzLAlyMjUJQyBVMSBib3Jyb3cgZnJvbSBsYXN0CisJYmlzCXIzMSwJcjMxLAlyMzEJQyBMICBtb3ZlcyBpbiBMICEKKwlzdWJxCXUxLAl2MSwJcjUJQyBVMCBzdWIgdHdvIGRhdGEKKworCWJlcQlyMiwJJGZpeDQJCUMgVTEgZml4IGV4YWN0IHplcm8KKyRyZXQ0OgljbXB1bHQJdTEsCXYxLAljeTAJQyBVMCBkaWQgaXQgYm9ycm93CisJbGRxCXUxLAk0MChyMTcpCQlDIEwwIGdldCBuZXh0IG9uZXMKKwlsZHEJdjEsCTQwKHIxOCkJCUMgTDEKKworCXN1YnEJdTAsCXYwLAlyOAlDIFUxIHN1YiB0d28gZGF0YQorCXN0cQlyMjQsCS04KHIxNikJCUMgTDAgc3RvcmUgcGFpcgorCXN1YnEJcjUsCWN5MSwJcjI0CUMgVTAgYm9ycm93IGZyb20gbGFzdAorCXN0cQlyMjUsCTAocjE2KQkJQyBMMQorCisJY21wdWx0CXUwLAl2MCwJcjIyCUMgVTEgZGlkIGl0IGJvcnJvdworCWJlcQlyNSwJJGZpeDUJCUMgVTAgZml4IGV4YWN0IHplcm8KKyRyZXQ1OglsZHEJdTAsCTQ4KHIxNykJCUMgTDAgZ2V0IG5leHQgb25lcworCWxkcQl2MCwJNDgocjE4KQkJQyBMMQorCisJbGRsCXIzMSwgMjU2KHIxNykJCUMgTDAgcHJlZmV0Y2gKKwlzdWJxCXI4LAljeTAsCXIyNQlDIFUxIGJvcnJvdyBmcm9tIGxhc3QKKwlsZGwJcjMxLCAyNTYocjE4KQkJQyBMMSBwcmVmZXRjaAorCXN1YnEJdTEsCXYxLAlyNwlDIFUwIHN1YiB0d28gZGF0YQorCisJYmVxCXI4LAkkZml4NgkJQyBVMSBmaXggZXhhY3QgemVybworJHJldDY6CWNtcHVsdAl1MSwJdjEsCXIyMwlDIFUwIGRpZCBpdCBib3Jyb3cKKwlsZHEJdTEsCTU2KHIxNykJCUMgTDAgZ2V0IG5leHQgb25lcworCWxkcQl2MSwJNTYocjE4KQkJQyBMMQorCisJbGRhCXIxNywJNjQocjE3KQkJQyBMMCBtb3ZlIHBvaW50ZXIKKwliaXMJcjMxLAlyMzEsCXIzMQlDIFUKKwlsZGEJcjE4LAk2NChyMTgpCQlDIEwxIG1vdmUgcG9pbnRlcgorCWJnZQlyMTksCSRMb29wCQlDIFUxIGxvb3AgY29udHJvbAorQyA9PT09IG1haW4gbG9vcCBlbmQKKworJExlbmQ6CXN1YnEJdTAsCXYwLAlyMglDIFUxIHN1YiB0d28gZGF0YQorCXN0cQlyMjQsCTgocjE2KQkJQyBMMCBwdXQgYW4gYW5zd2VyCisJc3VicQlyNywJcjIyLAlyMjQJQyBVMCBib3Jyb3cgZnJvbSBsYXN0CisJc3RxCXIyNSwJMTYocjE2KQkJQyBMMSBwYWlyCisJY21wdWx0CXUwLAl2MCwJY3kxCUMgVTEgZGlkIGl0IGJvcnJvdworCWJlcQlyNywJJGZpeDdjCQlDIFUwIGZpeCBleGFjdCAwCiskcmV0N2M6CXN1YnEJcjIsCXIyMywJcjI1CUMgVTEgYm9ycm93IGZyb20gbGFzdAorCXN1YnEJdTEsCXYxLAlyNQlDIFUwIHN1YiB0d28gZGF0YQorCWJlcQlyMiwJJGZpeDBjCQlDIFUxIGZpeCBleGFjdCB6ZXJvCiskcmV0MGM6CWNtcHVsdAl1MSwJdjEsCWN5MAlDIFUwIGRpZCBpdCBib3Jyb3cKKwlzdHEJcjI0LAkyNChyMTYpCQlDIEwwIHN0b3JlIHBhaXIKKwlzdWJxCXI1LAljeTEsCXIyNAlDIFUwIGJvcnJvdyBmcm9tIGxhc3QKKwlzdHEJcjI1LAkzMihyMTYpCQlDIEwxCisJYmVxCXI1LAkkZml4MWMJCUMgVTAgZml4IGV4YWN0IHplcm8KKyRyZXQxYzoJc3RxCXIyNCwJNDAocjE2KQkJQyBMMCBwdXQgYW4gYW5zd2VyCisJbGRhCXIxNiwJNDgocjE2KQkJQyBMMCBtb3ZlIHBvaW50ZXIKKworCWxkYQlyMTksCTgocjE5KQorCWJlcQlyMTksCSRMcmV0CisKKwlsZHEJdTEsCTAocjE3KQorCWxkcQl2MSwJMChyMTgpCiskTHNtYWxsOgorCWxkYQlyMTksCS0xKHIxOSkKKwliZXEJcjE5LAkkTGVuZDAKKworCUFMSUdOKDgpCiskTG9vcDA6CXN1YnEJdTEsCXYxLAlyMglDIG1haW4gc3ViCisJY21wdWx0CXUxLAl2MSwJcjgJQyBjb21wdXRlIGJ3IGZyb20gbGFzdCBzdWIKKwlsZHEJdTEsCTgocjE3KQorCWxkcQl2MSwJOChyMTgpCisJc3VicQlyMiwJY3kwLAlyNQlDIGJvcnJvdyBzdWIKKwlsZGEJcjE3LAk4KHIxNykKKwlsZGEJcjE4LAk4KHIxOCkKKwlzdHEJcjUsCTAocjE2KQorCWNtcHVsdAlyMiwJY3kwLAljeTAJQyBjb21wdXRlIGJ3IGZyb20gbGFzdCBzdWIKKwlsZGEJcjE5LAktMShyMTkpCQlDIGRlY3IgbG9vcCBjbnQKKwliaXMJcjgsCWN5MCwJY3kwCUMgY29tYmluZSBidyBmcm9tIHRoZSB0d28gc3VicworCWxkYQlyMTYsCTgocjE2KQorCWJuZQlyMTksCSRMb29wMAorJExlbmQwOglzdWJxCXUxLAl2MSwJcjIJQyBtYWluIHN1YgorCXN1YnEJcjIsCWN5MCwJcjUJQyBib3Jyb3cgc3ViCisJY21wdWx0CXUxLAl2MSwJcjgJQyBjb21wdXRlIGJ3IGZyb20gbGFzdCBzdWIKKwljbXB1bHQJcjIsCWN5MCwJY3kwCUMgY29tcHV0ZSBidyBmcm9tIGxhc3Qgc3ViCisJc3RxCXI1LAkwKHIxNikKKwliaXMJcjgsCWN5MCwJcjAJQyBjb21iaW5lIGJ3IGZyb20gdGhlIHR3byBzdWJzCisJcmV0CXIzMSwocjI2KSwxCisKKwlBTElHTig4KQorJExyZXQ6CWxkYQlyMCwJMChjeTApCQlDIGNvcHkgYm9ycm93IGludG8gcmV0dXJuIHJlZ2lzdGVyCisJcmV0CXIzMSwocjI2KSwxCisKKyRmaXg1ZjoJYmlzCXIyMywJY3kwLAlyMjMJQyBicmluZyBmb3J3YXJkIGJvcnJvdworCWJyCXIzMSwJJHJldDVmCiskZml4NmY6CWJpcwlyMjIsCXIyMywJcjIyCUMgYnJpbmcgZm9yd2FyZCBib3Jyb3cKKwlicglyMzEsCSRyZXQ2ZgorJGZpeDA6CWJpcwljeTEsCXIyMywJY3kxCUMgYnJpbmcgZm9yd2FyZCBib3Jyb3cKKwlicglyMzEsCSRyZXQwCiskZml4MToJYmlzCWN5MCwJY3kxLAljeTAJQyBicmluZyBmb3J3YXJkIGJvcnJvdworCWJyCXIzMSwJJHJldDEKKyRmaXgyOgliaXMJcjIyLAljeTAsCXIyMglDIGJyaW5nIGZvcndhcmQgYm9ycm93CisJYnIJcjMxLAkkcmV0MgorJGZpeDM6CWJpcwlyMjMsCXIyMiwJcjIzCUMgYnJpbmcgZm9yd2FyZCBib3Jyb3cKKwlicglyMzEsCSRyZXQzCiskZml4NDoJYmlzCWN5MSwJcjIzLAljeTEJQyBicmluZyBmb3J3YXJkIGJvcnJvdworCWJyCXIzMSwJJHJldDQKKyRmaXg1OgliaXMJY3kxLAljeTAsCWN5MAlDIGJyaW5nIGZvcndhcmQgYm9ycm93CisJYnIJcjMxLAkkcmV0NQorJGZpeDY6CWJpcwlyMjIsCWN5MCwJcjIyCUMgYnJpbmcgZm9yd2FyZCBib3Jyb3cKKwlicglyMzEsCSRyZXQ2CiskZml4NzoJYmlzCXIyMywJcjIyLAlyMjMJQyBicmluZyBmb3J3YXJkIGJvcnJvdworCWJyCXIzMSwJJHJldDcKKyRmaXgwYzoJYmlzCWN5MSwJcjIzLAljeTEJQyBicmluZyBmb3J3YXJkIGJvcnJvdworCWJyCXIzMSwJJHJldDBjCiskZml4MWM6CWJpcwljeTAsCWN5MSwJY3kwCUMgYnJpbmcgZm9yd2FyZCBib3Jyb3cKKwlicglyMzEsCSRyZXQxYworJGZpeDdjOgliaXMJcjIzLAlyMjIsCXIyMwlDIGJyaW5nIGZvcndhcmQgYm9ycm93CisJYnIJcjMxLAkkcmV0N2MKKworRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL2V2NjcvZ2NkXzExLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvZXY2Ny9nY2RfMTEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYzIzNGIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL2V2NjcvZ2NkXzExLmFzbQpAQCAtMCwwICsxLDc5IEBACitkbmwgIEFscGhhIGV2NjcgbXBuX2djZF8xMSAtLSBOeDEgZ3JlYXRlc3QgY29tbW9uIGRpdmlzb3IuCisKK2RubCAgQ29weXJpZ2h0IDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDIGV2Njc6IDMuNCBjeWNsZXMvYml0cGFpciBmb3IgMXgxIHBhcnQKKworCitDIG1wX2xpbWJfdCBtcG5fZ2NkXzEgKG1wX3NyY3B0ciB4cCwgbXBfc2l6ZV90IHhzaXplLCBtcF9saW1iX3QgeSk7CitDCitDIEluIHRoZSAxeDEgcGFydCwgdGhlIGFsZ29yaXRobSBpcyB0byBjaGFuZ2UgeCx5IHRvIGFicyh4LXkpLG1pbih4LHkpIGFuZAorQyBzdHJpcCB0cmFpbGluZyB6ZXJvcyBmcm9tIGFicyh4LXkpIHRvIG1haW50YWluIHggYW5kIHkgYm90aCBvZGQuCitDCitDIFRoZSB0cmFpbGluZyB6ZXJvcyBhcmUgY2FsY3VsYXRlZCBmcm9tIGp1c3QgeC15LCBzaW5jZSBpbiB0d29zLWNvbXBsZW1lbnQKK0MgdGhlcmUncyB0aGUgc2FtZSBudW1iZXIgb2YgdHJhaWxpbmcgemVyb3Mgb24gZCBvciAtZC4gIFRoaXMgbWVhbnMgdGhlIGN0dHoKK0MgcnVucyBpbiBwYXJhbGxlbCB3aXRoIGFicyh4LXkpLgorQworQyBUaGUgbG9vcCB0YWtlcyA1IGN5Y2xlcywgYW5kIGF0IDAuNjggaXRlcmF0aW9ucyBwZXIgYml0IGZvciB0d28gTi1iaXQKK0Mgb3BlcmFuZHMgd2l0aCB0aGlzIGFsZ29yaXRobSBnaXZlcyB0aGUgbWVhc3VyZWQgMy40IGMvbC4KK0MKK0MgVGhlIHNsb3R0aW5ncyBzaG93biBhcmUgZm9yIFNWUjQgc3R5bGUgc3lzdGVtcywgVW5pY29zIGRpZmZlcnMgaW4gdGhlCitDIGluaXRpYWwgZ3Agc2V0dXAgYW5kIHRoZSBMRUEuCisKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9nY2RfMTEpCisJbW92CXIxNiwgcjAKKwltb3YJcjE3LCByMQorCisJQUxJR04oMTYpCitMKHRvcCk6CXN1YnEJcjAsIHIxLCByNwkJQyBsMCAgZCA9IHggLSB5CisJY21wdWx0CXIwLCByMSwgcjE2CQlDIHUwICB0ZXN0IHggPj0geQorCisJc3VicQlyMSwgcjAsIHI0CQlDIGwwICBuZXdfeCA9IHkgLSB4CisJY3R0eglyNywgcjgJCQlDIFUwICBkIHR3b3MKKworCWNtb3ZlcQlyMTYsIHI3LCByNAkJQyBsMCAgbmV3X3ggPSBkIGlmIHg+PXkKKwljbW92bmUJcjE2LCByMCwgcjEJCUMgdTAgIHkgPSB4IGlmIHg8eQorCXVub3AJCQkJQyBsICAgXCBmb3JjZSBjbW92ZXEgaW50byBsMAorCXVub3AJCQkJQyB1ICAgLworCisJQwkJCQlDIGNtb3ZlcTIgTDAsIGNtb3ZuZTIgVTAKKworCXNybAlyNCwgcjgsIHIwCQlDIFUwICB4ID0gbmV3X3ggPj4gdHdvcworCWJuZQlyNywgTCh0b3ApCQlDIFUxICBzdG9wIHdoZW4gZD09MAorCisKK0woZW5kKToJbW92CXIxLCByMAkJCUMgVTAgIHJldHVybiB5IDw8IGNvbW1vbl90d29zCisJcmV0CXIzMSwgKHIyNiksIDEJCUMgTDAKK0VQSUxPR1VFKCkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9ldjY3L2hhbWRpc3QuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9ldjY3L2hhbWRpc3QuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMTNlOWYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL2V2NjcvaGFtZGlzdC5hc20KQEAgLTAsMCArMSwxMTEgQEAKK2RubCAgQWxwaGEgZXY2NyBtcG5faGFtZGlzdCAtLSBtcG4gaGFtbWluZyBkaXN0YW5jZS4KKworZG5sICBDb3B5cmlnaHQgMjAwMywgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MgZXY2NzogMi41IGN5Y2xlcy9saW1iCisKKworQyB1bnNpZ25lZCBsb25nIG1wbl9oYW1kaXN0IChtcF9zcmNwdHIgeHAsIG1wX3NyY3B0ciB5cCwgbXBfc2l6ZV90IHNpemUpOworQworQyBUaGUgaG9wZSB3YXMgZm9yIDIuMCBjL2wgaGVyZSwgYnV0IHRoYXQgaXNuJ3QgYWNoaWV2ZWQuICBXZSdyZSBsaW1pdGVkIGJ5CitDIHJlbmFtaW5nIHJlZ2lzdGVyIHNob3J0YWdlLiAgU2luY2Ugd2UgbmVlZCA1IGluc3RydWN0aW9ucyBwZXIgbGltYiwgZnVydGhlcgorQyB1bnJvbGxpbmcgY291bGQgYXBwcm9hY2ggMS41IGMvbC4KK0MKK0MgVGhlIG1haW4gbG9vcCBwcm9jZXNzZXMgdHdvIGxpbWJzIGZyb20gZWFjaCBvcGVyYW5kIG9uIGVhY2ggaXRlcmF0aW9uLiAgQW4KK0Mgb2RkIHNpemUgaXMgaGFuZGxlZCBieSBwcm9jZXNzaW5nIHhwWzBdXnlwWzBdIGF0IHRoZSBzdGFydC4gIElmIHRoZSBzaXplCitDIGlzIGV2ZW4gdGhhdCByZXN1bHQgaXMgZGlzY2FyZGVkLCBhbmQgaXMgcmVwZWF0ZWQgYnkgdGhlIG1haW4gbG9vcC4KK0MKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9oYW1kaXN0KQorCisJQyByMTYJeHAKKwlDIHIxNwl5cAorCUMgcjE4CXNpemUKKworCWxkcQlyMSwgMChyMTYpCQlDIEwwICB4cFswXQorCWxkcQlyMiwgMChyMTcpCQlDIEwxICB5cFswXQorCWFuZAlyMTgsIDEsIHI4CQlDIFUxICAxIGlmIHNpemUgb2RkCisJc3JsCXIxOCwgMSwgcjE4CQlDIFUwICBzaXplLCBsaW1iIHBhaXJzCisKKwljbHIJcjAJCQlDIEwwICBpbml0aWFsIHRvdGFsCisJczhhZGRxCXI4LCByMTcsIHIxNwkJQyBVMSAgeXArKyBpZiBzaXplIG9kZAorCXM4YWRkcQlyOCwgcjE2LCByMTYJCUMgTDEgIHhwKysgaWYgc2l6ZSBvZGQKKwljbHIJcjYJCQlDIFUwICBkdW1teSBpbml0aWFsIHhvciAxCisKKwl4b3IJcjEsIHIyLCByNQkJQyBMICAgaW5pdGlhbCB4b3IgMAorCWJlcQlyMTgsIEwob25lKQkJQyBVICAgaWYgc2l6ZT09MQorCisJY21vdmVxCXI4LCByMzEsIHI1CQlDIEwgICBkaXNjYXJkIGZpcnN0IGxpbWIgaWYgc2l6ZSBldmVuCisJdW5vcAkJCQlDIFUKKworCisJQUxJR04oMTYpCitMKHRvcCk6CisJQyByMAl0b3RhbCBhY2N1bXVsYXRpbmcKKwlDIHI3CXhvciAwCisJQyByOAl4b3IgMQorCUMgcjE2CXhwLCBpbmNyZW1lbnRpbmcKKwlDIHIxNwl5cCwgaW5jcmVtZW50aW5nCisJQyByMTgJc2l6ZSwgbGltYiBwYWlycywgZGVjcmVtZW50aW5nCisKKwlsZHEJcjEsIDAocjE2KQkJQyBMCisJbGRxCXIyLCAwKHIxNykJCUMgTAorCWN0cG9wCXI1LCByNwkJCUMgVTAKKwlsZGEJcjE2LCAxNihyMTYpCQlDIFUKKworCWxkcQlyMywgLTgocjE2KQkJQyBMCisJbGRxCXI0LCA4KHIxNykJCUMgTAorCWN0cG9wCXI2LCByOAkJCUMgVTAKKwlsZGEJcjE3LCAxNihyMTcpCQlDIFUKKworCWxkbAlyMzEsIDI1NihyMTYpCQlDIEwJcHJlZmV0Y2gKKwlsZGwJcjMxLCAyNTYocjE3KQkJQyBMCXByZWZldGNoCisJeG9yCXIxLCByMiwgcjUJCUMgVQorCWxkYQlyMTgsIC0xKHIxOCkJCUMgVQorCisJeG9yCXIzLCByNCwgcjYJCUMgVQorCWFkZHEJcjAsIHI3LCByMAkJQyBMCisJYWRkcQlyMCwgcjgsIHIwCQlDIEwKKwlibmUJcjE4LCBMKHRvcCkJCUMgVQorCisKKwljdHBvcAlyNiwgcjgJCQlDIFUwCisJYWRkcQlyMCwgcjgsIHIwCQlDIEwKK0wob25lKToKKwljdHBvcAlyNSwgcjcJCQlDIFUwCisJYWRkcQlyMCwgcjcsIHIwCQlDIEwKKworCXJldAlyMzEsIChyMjYpLCAxCQlDIEwwCisKK0VQSUxPR1VFKCkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9ldjY3L3BvcGNvdW50LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvZXY2Ny9wb3Bjb3VudC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ5YzFjZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvZXY2Ny9wb3Bjb3VudC5hc20KQEAgLTAsMCArMSwxMDEgQEAKK2RubCAgQWxwaGEgZXY2NyBtcG5fcG9wY291bnQgLS0gbXBuIGJpdCBwb3B1bGF0aW9uIGNvdW50LgorCitkbmwgIENvcHlyaWdodCAyMDAzLCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQyBldjY3OiAxLjUgY3ljbGVzL2xpbWIKKworCitDIHVuc2lnbmVkIGxvbmcgbXBuX3BvcGNvdW50IChtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSk7CitDCitDIFRoaXMgc2NoZWR1bGUgc2VlbXMgbmVjZXNzYXJ5IGZvciB0aGUgZnVsbCAxLjUgYy9sLCB0aGUgSVEgY2FuJ3QgcXVpdGUgaGlkZQorQyBhbGwgbGF0ZW5jaWVzLCB0aGUgYWRkcSdzIG11c3QgYmUgZGVmZXJyZWQgdG8gdGhlIG5leHQgaXRlcmF0aW9uLgorQworQyBTaW5jZSB3ZSBuZWVkIGp1c3QgMyBpbnN0cnVjdGlvbnMgcGVyIGxpbWIsIGZ1cnRoZXIgdW5yb2xsaW5nIGNvdWxkIGFwcHJvYWNoCitDIDEuMCBjL2wuCitDCitDIFRoZSBtYWluIGxvb3AgcHJvY2Vzc2VzIHR3byBsaW1icyBhdCBhIHRpbWUuICBBbiBvZGQgc2l6ZSBpcyBoYW5kbGVkIGJ5CitDIHByb2Nlc3Npbmcgc3JjWzBdIGF0IHRoZSBzdGFydC4gIElmIHRoZSBzaXplIGlzIGV2ZW4gdGhhdCByZXN1bHQgaXMKK0MgZGlzY2FyZGVkLCBhbmQgc3JjWzBdIGlzIHJlcGVhdGVkIGJ5IHRoZSBtYWluIGxvb3AuCitDCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fcG9wY291bnQpCisKKwlDIHIxNglzcmMKKwlDIHIxNwlzaXplCisKKwlsZHEJcjAsIDAocjE2KQkJQyBMMCAgc3JjWzBdCisJYW5kCXIxNywgMSwgcjgJCUMgVTEgIDEgaWYgc2l6ZSBvZGQKKwlzcmwJcjE3LCAxLCByMTcJCUMgVTAgIHNpemUsIGxpbWIgcGFpcnMKKworCXM4YWRkcQlyOCwgcjE2LCByMTYJCUMgTDEgIHNyYysrIGlmIHNpemUgb2RkCisJY3Rwb3AJcjAsIHIwCQkJQyBVMAorCWJlcQlyMTcsIEwob25lKQkJQyBVMSAgaWYgc2l6ZT09MQorCisJY21vdmVxCXI4LCByMzEsIHIwCQlDIEwgICBkaXNjYXJkIGZpcnN0IGxpbWIgaWYgc2l6ZSBldmVuCisJY2xyCXIzCQkJQyBMCisKKwljbHIJcjQJCQlDIEwKKwl1bm9wCQkJCUMgVQorCXVub3AJCQkJQyBMCisJdW5vcAkJCQlDIFUKKworCisJQUxJR04oMTYpCitMKHRvcCk6CisJQyByMAl0b3RhbCBhY2N1bXVsYXRpbmcKKwlDIHIzCXBvcCAwCisJQyByNAlwb3AgMQorCUMgcjE2CXNyYywgaW5jcmVtZW50aW5nCisJQyByMTcJc2l6ZSwgZGVjcmVtZW50aW5nCisKKwlsZHEJcjEsIDAocjE2KQkJQyBMCisJbGRxCXIyLCA4KHIxNikJCUMgTAorCWxkYQlyMTYsIDE2KHIxNikJCUMgVQorCWxkYQlyMTcsIC0xKHIxNykJCUMgVQorCisJYWRkcQlyMCwgcjMsIHIwCQlDIEwKKwlhZGRxCXIwLCByNCwgcjAJCUMgTAorCWN0cG9wCXIxLCByMwkJCUMgVTAKKwljdHBvcAlyMiwgcjQJCQlDIFUwCisKKwlsZGwJcjMxLCA1MTIocjE2KQkJQyBMCXByZWZldGNoCisJYm5lCXIxNywgTCh0b3ApCQlDIFUKKworCisJYWRkcQlyMCwgcjMsIHIwCQlDIEwKKwlhZGRxCXIwLCByNCwgcjAJCUMgVQorTChvbmUpOgorCXJldAlyMzEsIChyMjYpLCAxCQlDIEwwCisKK0VQSUxPR1VFKCkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODUwYmQyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9nbXAtbXBhcmFtLmgKQEAgLTAsMCArMSw4NiBAQAorLyogQWxwaGEgRVY0IGdtcC1tcGFyYW0uaCAtLSBDb21waWxlci9tYWNoaW5lIHBhcmFtZXRlciBoZWFkZXIgZmlsZS4KKworQ29weXJpZ2h0IDE5OTEsIDE5OTMsIDE5OTQsIDE5OTktMjAwMiwgMjAwNCwgMjAwNSwgMjAwOSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNkZWZpbmUgR01QX0xJTUJfQklUUyA2NAorI2RlZmluZSBHTVBfTElNQl9CWVRFUyA4CisKKworLyogMTc1TUh6IDIxMDY0ICovCisKKy8qIEdlbmVyYXRlZCBieSB0dW5ldXAuYywgMjAwOS0wMS0xNSwgZ2NjIDMuMiAqLworCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgIDEyCisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgIDY5CisjZGVmaW5lIE1VTF9UT09NNDRfVEhSRVNIT0xEICAgICAgICAgICAgIDg4CisKKyNkZWZpbmUgU1FSX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgIDQKKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAgNjIKKyNkZWZpbmUgU1FSX1RPT000X1RIUkVTSE9MRCAgICAgICAgICAgICAxNTUKKworI2RlZmluZSBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDQwCisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgMjAyCisKKyNkZWZpbmUgRElWX1NCX1BSRUlOVl9USFJFU0hPTEQgICAgICAgICAgIDAgIC8qIHByZWludiBhbHdheXMgKi8KKyNkZWZpbmUgRElWX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMzgKKyNkZWZpbmUgUE9XTV9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgNjAKKworI2RlZmluZSBNQVRSSVgyMl9TVFJBU1NFTl9USFJFU0hPTEQgICAgICAxNworI2RlZmluZSBIR0NEX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICA4MAorI2RlZmluZSBHQ0RfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDIzNworI2RlZmluZSBHQ0RFWFRfRENfVEhSRVNIT0xEICAgICAgICAgICAgIDE5OAorI2RlZmluZSBKQUNPQklfQkFTRV9NRVRIT0QgICAgICAgICAgICAgICAgMgorCisjZGVmaW5lIERJVlJFTV8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAwICAvKiBwcmVpbnYgYWx3YXlzICovCisjZGVmaW5lIERJVlJFTV8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIE1PRF8xXzJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIE1PRF8xXzRfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAxICAvKiBwcmVpbnYgYWx3YXlzICovCisjZGVmaW5lIFVTRV9QUkVJTlZfTU9EXzEgICAgICAgICAgICAgICAgICAxICAvKiBwcmVpbnYgYWx3YXlzICovCisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9ERVhBQ1RfMV9PRERfVEhSRVNIT0xEICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgIDIwCisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgIDM3CisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgNzQ2CisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAxMzMyCisKKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRSAgeyAyNDAsIDQ4MCwgMTM0NCwgMjMwNCwgNTEyMCwgMjA0ODAsIDQ5MTUyLCAwIH0KKyNkZWZpbmUgTVVMX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAyMzIKKyNkZWZpbmUgTVVMX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgIDE2NjQKKworI2RlZmluZSBTUVJfRkZUX1RBQkxFICB7IDI0MCwgNDgwLCAxMjE2LCAyMzA0LCA1MTIwLCAxMjI4OCwgNDkxNTIsIDAgfQorI2RlZmluZSBTUVJfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgIDIzMgorI2RlZmluZSBTUVJfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTQwOApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9pbnZlcnRfbGltYi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL2ludmVydF9saW1iLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmMwMTBmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9pbnZlcnRfbGltYi5hc20KQEAgLTAsMCArMSw5NSBAQAorZG5sICBBbHBoYSBtcG5faW52ZXJ0X2xpbWIgLS0gSW52ZXJ0IGEgbm9ybWFsaXplZCBsaW1iLgorCitkbmwgIENvcHlyaWdodCAxOTk2LCAyMDAwLTIwMDMsIDIwMDcsIDIwMTEsIDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgIGN5Y2xlcy9saW1iCitDIEVWNDogICAgID8KK0MgRVY1OiAgIDEzNy8xNDAgICh3aXRoIEJXWC93aXRob3V0IEJXWCkKK0MgRVY2OiAgICA3MS83MiAgICh3aXRoIEJXWC93aXRob3V0IEJXWCkKKworQyBUaGlzIHdhcyBjb21waWxlciBnZW5lcmF0ZWQsIHdpdGggbWluaW1hbCBtYW51YWwgZWRpdHMuICBTdXJlbHkgc2V2ZXJhbAorQyBjeWNsZXMgY291bGQgYmUgY3V0IHdpdGggc29tZSB0aG91Z2h0LgorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2ludmVydF9saW1iLGdwKQorCUxFQSgJcjIsIGFwcHJveF90YWIpCisJc3JsCXIxNiwgNTQsIHIxCisJc3JsCXIxNiwgMjQsIHI0CisJYW5kCXIxNiwgMSwgcjUKKwliaWMJcjEsIDEsIHI3CisJbGRhCXI0LCAxKHI0KQorCXNybAlyMTYsIDEsIHIzCisJYWRkcQlyNywgcjIsIHIxCitpZmVsc2UoYnd4X2F2YWlsYWJsZV9wLDEsYAorCWxkd3UJcjAsIC01MTIocjEpCisnLGAKKwlsZHFfdQlyMCwgLTUxMihyMSkKKwlleHR3bAlyMCwgcjcsIHIwCisnKQorCWFkZHEJcjMsIHI1LCByMworCW11bGwJcjAsIHIwLCByMQorCXNsbAlyMCwgMTEsIHIwCisJbXVscQlyMSwgcjQsIHIxCisJc3JsCXIxLCA0MCwgcjEKKwlzdWJxCXIwLCByMSwgcjAKKwlsZGEJcjAsIC0xKHIwKQorCW11bHEJcjAsIHIwLCByMgorCXNsbAlyMCwgNjAsIHIxCisJc2xsCXIwLCAxMywgcjAKKwltdWxxCXIyLCByNCwgcjIKKwlzdWJxCXIxLCByMiwgcjEKKwlzcmwJcjEsIDQ3LCByMQorCWFkZHEJcjAsIHIxLCByMAorCW11bHEJcjAsIHIzLCByMworCXNybAlyMCwgMSwgcjEKKwljbW92ZXEJcjUsIDAsIHIxCisJc3VicQlyMSwgcjMsIHIxCisJdW11bGgJcjEsIHIwLCByMworCXNsbAlyMCwgMzEsIHIwCisJc3JsCXIzLCAxLCByMQorCWFkZHEJcjAsIHIxLCByMAorCW11bHEJcjAsIHIxNiwgcjIKKwl1bXVsaAlyMCwgcjE2LCByMworCWFkZHEJcjIsIHIxNiwgcjEKKwlhZGRxCXIzLCByMTYsIHIxNgorCWNtcHVsdAlyMSwgcjIsIHIxCisJYWRkcQlyMTYsIHIxLCByMworCXN1YnEJcjAsIHIzLCByMAorCXJldAlyMzEsIChyMjYpLCAxCitFUElMT0dVRSgpCitEQVRBU1RBUlQoYXBwcm94X3RhYiw4KQorZm9ybG9vcChpLDI1Niw1MTItMSxkbmwKK2AJLndvcmQJZXZhbCgweDdmZDAwL2kpCisnKWRubAorCVNJWkUoYXBwcm94X3RhYiwgNTEyKQorCVRZUEUoYXBwcm94X3RhYiwgb2JqZWN0KQorREFUQUVORCgpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvbHNoaWZ0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvbHNoaWZ0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjJhODU2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9sc2hpZnQuYXNtCkBAIC0wLDAgKzEsMTgyIEBACitkbmwgIEFscGhhIG1wbl9sc2hpZnQgLS0gU2hpZnQgYSBudW1iZXIgbGVmdC4KKworZG5sICBDb3B5cmlnaHQgMTk5NCwgMTk5NSwgMjAwMCwgMjAwMywgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgY3ljbGVzL2xpbWIKK0MgRVY0OiAgICAgPworQyBFVjU6ICAgICAzLjI1CitDIEVWNjogICAgIDEuNzUKKworQyAgSU5QVVQgUEFSQU1FVEVSUworQyAgcnAJcjE2CitDICB1cAlyMTcKK0MgIG4JcjE4CitDICBjbnQJcjE5CisKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9sc2hpZnQpCisJczhhZGRxCXIxOCxyMTcscjE3CUMgbWFrZSByMTcgcG9pbnQgYXQgZW5kIG9mIHMxCisJbGRxCXI0LC04KHIxNykJQyBsb2FkIGZpcnN0IGxpbWIKKwlzdWJxCXIzMSxyMTkscjIwCisJczhhZGRxCXIxOCxyMTYscjE2CUMgbWFrZSByMTYgcG9pbnQgYXQgZW5kIG9mIFJFUworCXN1YnEJcjE4LDEscjE4CisJYW5kCXIxOCw0LTEscjI4CUMgbnVtYmVyIG9mIGxpbWJzIGluIGZpcnN0IGxvb3AKKwlzcmwJcjQscjIwLHIwCUMgY29tcHV0ZSBmdW5jdGlvbiByZXN1bHQKKworCWJlcQlyMjgsTChMMCkKKwlzdWJxCXIxOCxyMjgscjE4CisKKwlBTElHTig4KQorTCh0b3AwKToKKwlsZHEJcjMsLTE2KHIxNykKKwlzdWJxCXIxNiw4LHIxNgorCXNsbAlyNCxyMTkscjUKKwlzdWJxCXIxNyw4LHIxNworCXN1YnEJcjI4LDEscjI4CisJc3JsCXIzLHIyMCxyNgorCWJpcwlyMyxyMyxyNAorCWJpcwlyNSxyNixyOAorCXN0cQlyOCwwKHIxNikKKwlibmUJcjI4LEwodG9wMCkKKworTChMMCk6CXNsbAlyNCxyMTkscjI0CisJYmVxCXIxOCxMKGVuZCkKK0Mgd2FybSB1cCBwaGFzZSAxCisJbGRxCXIxLC0xNihyMTcpCisJc3VicQlyMTgsNCxyMTgKKwlsZHEJcjIsLTI0KHIxNykKKwlsZHEJcjMsLTMyKHIxNykKKwlsZHEJcjQsLTQwKHIxNykKK0Mgd2FybSB1cCBwaGFzZSAyCisJc3JsCXIxLHIyMCxyNworCXNsbAlyMSxyMTkscjIxCisJc3JsCXIyLHIyMCxyOAorCWJlcQlyMTgsTChlbmQxKQorCWxkcQlyMSwtNDgocjE3KQorCXNsbAlyMixyMTkscjIyCisJbGRxCXIyLC01NihyMTcpCisJc3JsCXIzLHIyMCxyNQorCWJpcwlyNyxyMjQscjcKKwlzbGwJcjMscjE5LHIyMworCWJpcwlyOCxyMjEscjgKKwlzcmwJcjQscjIwLHI2CisJbGRxCXIzLC02NChyMTcpCisJc2xsCXI0LHIxOSxyMjQKKwlsZHEJcjQsLTcyKHIxNykKKwlzdWJxCXIxOCw0LHIxOAorCWJlcQlyMTgsTChlbmQyKQorCUFMSUdOKDE2KQorQyBtYWluIGxvb3AKK0wodG9wKToJc3RxCXI3LC04KHIxNikKKwliaXMJcjUscjIyLHI1CisJc3RxCXI4LC0xNihyMTYpCisJYmlzCXI2LHIyMyxyNgorCisJc3JsCXIxLHIyMCxyNworCXN1YnEJcjE4LDQscjE4CisJc2xsCXIxLHIxOSxyMjEKKwl1bm9wCUMgbGRxCXIzMSwtOTYocjE3KQorCisJc3JsCXIyLHIyMCxyOAorCWxkcQlyMSwtODAocjE3KQorCXNsbAlyMixyMTkscjIyCisJbGRxCXIyLC04OChyMTcpCisKKwlzdHEJcjUsLTI0KHIxNikKKwliaXMJcjcscjI0LHI3CisJc3RxCXI2LC0zMihyMTYpCisJYmlzCXI4LHIyMSxyOAorCisJc3JsCXIzLHIyMCxyNQorCXVub3AJQyBsZHEJcjMxLC05NihyMTcpCisJc2xsCXIzLHIxOSxyMjMKKwlzdWJxCXIxNiwzMixyMTYKKworCXNybAlyNCxyMjAscjYKKwlsZHEJcjMsLTk2KHIxNykKKwlzbGwJcjQscjE5LHIyNAorCWxkcQlyNCwtMTA0KHIxNykKKworCXN1YnEJcjE3LDMyLHIxNworCWJuZQlyMTgsTCh0b3ApCitDIGNvb2wgZG93biBwaGFzZSAyLzEKK0woZW5kMik6CisJc3RxCXI3LC04KHIxNikKKwliaXMJcjUscjIyLHI1CisJc3RxCXI4LC0xNihyMTYpCisJYmlzCXI2LHIyMyxyNgorCXNybAlyMSxyMjAscjcKKwlzbGwJcjEscjE5LHIyMQorCXNybAlyMixyMjAscjgKKwlzbGwJcjIscjE5LHIyMgorCXN0cQlyNSwtMjQocjE2KQorCWJpcwlyNyxyMjQscjcKKwlzdHEJcjYsLTMyKHIxNikKKwliaXMJcjgscjIxLHI4CisJc3JsCXIzLHIyMCxyNQorCXNsbAlyMyxyMTkscjIzCisJc3JsCXI0LHIyMCxyNgorCXNsbAlyNCxyMTkscjI0CitDIGNvb2wgZG93biBwaGFzZSAyLzIKKwlzdHEJcjcsLTQwKHIxNikKKwliaXMJcjUscjIyLHI1CisJc3RxCXI4LC00OChyMTYpCisJYmlzCXI2LHIyMyxyNgorCXN0cQlyNSwtNTYocjE2KQorCXN0cQlyNiwtNjQocjE2KQorQyBjb29sIGRvd24gcGhhc2UgMi8zCisJc3RxCXIyNCwtNzIocjE2KQorCXJldAlyMzEsKHIyNiksMQorCitDIGNvb2wgZG93biBwaGFzZSAxLzEKK0woZW5kMSk6CisJc2xsCXIyLHIxOSxyMjIKKwlzcmwJcjMscjIwLHI1CisJYmlzCXI3LHIyNCxyNworCXNsbAlyMyxyMTkscjIzCisJYmlzCXI4LHIyMSxyOAorCXNybAlyNCxyMjAscjYKKwlzbGwJcjQscjE5LHIyNAorQyBjb29sIGRvd24gcGhhc2UgMS8yCisJc3RxCXI3LC04KHIxNikKKwliaXMJcjUscjIyLHI1CisJc3RxCXI4LC0xNihyMTYpCisJYmlzCXI2LHIyMyxyNgorCXN0cQlyNSwtMjQocjE2KQorCXN0cQlyNiwtMzIocjE2KQorCXN0cQlyMjQsLTQwKHIxNikKKwlyZXQJcjMxLChyMjYpLDEKKworTChlbmQpOglzdHEJcjI0LC04KHIxNikKKwlyZXQJcjMxLChyMjYpLDEKK0VQSUxPR1VFKG1wbl9sc2hpZnQpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvbW9kXzM0bHN1YjEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9tb2RfMzRsc3ViMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIwM2I2MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvbW9kXzM0bHN1YjEuYXNtCkBAIC0wLDAgKzEsMTY0IEBACitkbmwgQWxwaGEgbXBuX21vZF8zNGxzdWIxLgorCitkbmwgIENvcHlyaWdodCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICBjeWNsZXMvbGltYgorQyBFVjQ6ICAgICA0ICg/KQorQyBFVjU6ICAgICAyLjY3CitDIEVWNjogICAgIDEuNjcKKworCitkbmwgIElOUFVUIFBBUkFNRVRFUlMKK2RubCAgdXAJCXIxNgorZG5sICBuCQlyMTcKKworZGVmaW5lKGBsMCcsYHIxOCcpCitkZWZpbmUoYGwxJyxgcjE5JykKK2RlZmluZShgbDInLGByMjAnKQorZGVmaW5lKGBhMCcsYHIyMScpCitkZWZpbmUoYGExJyxgcjIyJykKK2RlZmluZShgYTInLGByMjMnKQorZGVmaW5lKGBjMCcsYHIyNCcpCitkZWZpbmUoYGMxJyxgcjUnKQorZGVmaW5lKGBjMicsYHI2JykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9tb2RfMzRsc3ViMSkKKwliaXMJcjMxLCByMzEsIGMwCisJYmlzCXIzMSwgcjMxLCBjMQorCWJpcwlyMzEsIHIzMSwgYzIKKworCWxkYQlyMTcsIC0zKHIxNykKKwliZ2UJcjE3LCAkTF8zX29yX21vcmUKKwliaXMJcjMxLCByMzEsIGEwCisJYmlzCXIzMSwgcjMxLCBhMQorCWJpcwlyMzEsIHIzMSwgYTIKKwlicglyMzEsICRMXzAxMgorCiskTF8zX29yX21vcmU6CisJbGRxCWEwLCAwKHIxNikKKwlsZHEJYTEsIDgocjE2KQorCWxkcQlhMiwgMTYocjE2KQorCWxkYQlyMTYsIDI0KHIxNikKKwlsZGEJcjE3LCAtMyhyMTcpCisJYmx0CXIxNywgJExfMDEyCisKKyRMXzZfb3JfbW9yZToKKwlsZHEJbDAsIDAocjE2KQorCWxkcQlsMSwgOChyMTYpCisJbGRxCWwyLCAxNihyMTYpCisJYWRkcQlsMCwgYTAsIGEwCisKKwlsZGEJcjE2LCAyNChyMTYpCisJbGRhCXIxNywgLTMocjE3KQorCWJsdAlyMTcsICRMX2VuZAorCisJQUxJR04oMTYpCitDIE1haW4gbG9vcAorJExfOV9vcl9tb3JlOgorJExvb3A6CWNtcHVsdAlhMCwgbDAsIHIwCisJbGRxCWwwLCAwKHIxNikKKwlhZGRxCXIwLCBjMCwgYzAKKwlhZGRxCWwxLCBhMSwgYTEKKwljbXB1bHQJYTEsIGwxLCByMAorCWxkcQlsMSwgOChyMTYpCisJYWRkcQlyMCwgYzEsIGMxCisJYWRkcQlsMiwgYTIsIGEyCisJY21wdWx0CWEyLCBsMiwgcjAKKwlsZHEJbDIsIDE2KHIxNikKKwlhZGRxCXIwLCBjMiwgYzIKKwlhZGRxCWwwLCBhMCwgYTAKKwlsZGEJcjE2LCAyNChyMTYpCisJbGRhCXIxNywgLTMocjE3KQorCWJnZQlyMTcsICRMb29wCisKKyRMX2VuZDoJY21wdWx0CWEwLCBsMCwgcjAKKwlhZGRxCXIwLCBjMCwgYzAKKwlhZGRxCWwxLCBhMSwgYTEKKwljbXB1bHQJYTEsIGwxLCByMAorCWFkZHEJcjAsIGMxLCBjMQorCWFkZHEJbDIsIGEyLCBhMgorCWNtcHVsdAlhMiwgbDIsIHIwCisJYWRkcQlyMCwgYzIsIGMyCisKK0MgSGFuZGxlIHRoZSBsYXN0IChuIG1vZCAzKSBsaW1icworJExfMDEyOglsZGEJcjE3LCAyKHIxNykKKwlibHQJcjE3LCAkTF8wCisJbGRxCWwwLCAwKHIxNikKKwlhZGRxCWwwLCBhMCwgYTAKKwljbXB1bHQJYTAsIGwwLCByMAorCWFkZHEJcjAsIGMwLCBjMAorCWJlcQlyMTcsICRMXzAKKwlsZHEJbDEsIDgocjE2KQorCWFkZHEJbDEsIGExLCBhMQorCWNtcHVsdAlhMSwgbDEsIHIwCisJYWRkcQlyMCwgYzEsIGMxCisKK0MgQWxpZ24gYW5kIHN1bSBvdXIgMyBtYWluIGFjY3VtdWxhdG9ycyBhbmQgMyBjYXJyeSBhY2N1bXVsYXRvcnMKKyRMXzA6CXNybAlhMCwgNDgsIHIyCisJc3JsCWExLCAzMiwgcjQKK2lmZGVmKGBIQVZFX0xJTUJfTElUVExFX0VORElBTicsCitgCWluc2xsCWExLCAyLCByMScsCQlDIChhMSAmIDB4ZmZmZmZmZmYpIDw8IDE2CitgCXphcG5vdAlhMSwgMTUsIHIyNQorCXNsbAlyMjUsIDE2LCByMScpCisJemFwbm90CWEwLCA2MywgcjAJCUMgYTAgJiAweGZmZmZmZmZmZmZmZgorCXNybAlhMiwgMTYsIGExCitpZmRlZihgSEFWRV9MSU1CX0xJVFRMRV9FTkRJQU4nLAorYAlpbnN3bAlhMiwgNCwgcjMnLAkJQyAoYTIgJiAweGZmZmYpIDw8IDMyCitgCXphcG5vdAlhMiwgMywgcjI1CisJc2xsCXIyNSwgMzIsIHIzJykKKwlhZGRxCXIxLCByNCwgcjEKKwlhZGRxCXIwLCByMiwgcjAKKwlzcmwJYzAsIDMyLCBhMgoraWZkZWYoYEhBVkVfTElNQl9MSVRUTEVfRU5ESUFOJywKK2AJaW5zbGwJYzAsIDIsIHI0JywJCUMgKGMwICYgMHhmZmZmZmZmZikgPDwgMTYKK2AJemFwbm90CWMwLCAxNSwgcjI1CisJc2xsCXIyNSwgMTYsIHI0JykKKwlhZGRxCXIwLCByMSwgcjAKKwlhZGRxCXIzLCBhMSwgcjMKKwlhZGRxCXIwLCByMywgcjAKKwlzcmwJYzEsIDE2LCBjMAoraWZkZWYoYEhBVkVfTElNQl9MSVRUTEVfRU5ESUFOJywKK2AJaW5zd2wJYzEsIDQsIHIyJywJCUMgKGMxICYgMHhmZmZmKSA8PCAzMgorYAl6YXBub3QJYzEsIDMsIHIyNQorCXNsbAlyMjUsIDMyLCByMicpCisJYWRkcQlyNCwgYTIsIHI0CitDCXNybAljMiwgNDgsIHIzCQlDIFRoaXMgd2lsbCBiZSAwIGluIHByYWN0aXNlCisJemFwbm90CWMyLCA2MywgcjEJCUMgcjEgPSBjMiAmIDB4ZmZmZmZmZmZmZmZmCisJYWRkcQlyMCwgcjQsIHIwCisJYWRkcQlyMiwgYzAsIHIyCisJYWRkcQlyMCwgcjIsIHIwCitDCWFkZHEJcjEsIHIzLCByMQorCWFkZHEJcjAsIHIxLCByMAorCisJcmV0CXIzMSwgKHIyNiksIDEKK0VQSUxPR1VFKG1wbl9tb2RfMzRsc3ViMSkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9tb2RlMW8uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9tb2RlMW8uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZGNjYzcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL21vZGUxby5hc20KQEAgLTAsMCArMSwyMDkgQEAKK2RubCAgQWxwaGEgbXBuX21vZGV4YWN0XzFjX29kZCAtLSBtcG4gZXhhY3QgcmVtYWluZGVyCisKK2RubCAgQ29weXJpZ2h0IDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDICAgICAgY3ljbGVzL2xpbWIKK0MgRVY0OiAgICA0NworQyBFVjU6ICAgIDMwCitDIEVWNjogICAgMTUKKworCitDIG1wX2xpbWJfdCBtcG5fbW9kZXhhY3RfMWNfb2RkIChtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSwgbXBfbGltYl90IGQsCitDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcF9saW1iX3QgYykKK0MKK0MgVGhpcyBjb2RlIGZvbGxvd3MgdGhlICJhbHRlcm5hdGUiIGNvZGUgaW4gbXBuL2dlbmVyaWMvbW9kZTFvLmMsCitDIGVsaW1pbmF0aW5nIGNiaXQrY2xpbWIgZnJvbSB0aGUgZGVwZW5kZW50IGNoYWluLiAgVGhpcyBsZWF2ZXMsCitDCitDICAgICAgICBldjQgICBldjUgICBldjYKK0MgICAgICAgICAxICAgICAzICAgICAxICAgIHN1YnEgICB5ID0geCAtIGgKK0MgICAgICAgIDIzICAgIDEzICAgICA3ICAgIG11bHEgICBxID0geSAqIGludmVyc2UKK0MgICAgICAgIDIzICAgIDE0ICAgICA3ICAgIHVtdWxoICBoID0gaGlnaCAocSAqIGQpCitDICAgICAgICAtLSAgICAtLSAgICAtLQorQyAgICAgICAgNDcgICAgMzAgICAgMTUKK0MKK0MgSW4gZWFjaCBjYXNlLCB0aGUgbG9hZCBsYXRlbmN5LCBsb29wIGNvbnRyb2wsIGFuZCBleHRyYSBjYXJyeSBiaXQgaGFuZGxpbmcKK0MgaGlkZSB1bmRlciB0aGUgbXVsdGlwbHkgbGF0ZW5jaWVzLiAgVGhvc2UgbGF0ZW5jaWVzIGFyZSBsb25nIGVub3VnaCB0aGF0CitDIHdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgYWxpZ25tZW50IG9yIHBhaXJpbmcgdG8gc3F1ZWV6ZSBvdXQKK0MgcGVyZm9ybWFuY2UuCitDCitDIEZvciB0aGUgZmlyc3QgbGltYiwgc29tZSBvZiB0aGUgbG9vcCBjb2RlIGlzIGJyb2tlbiBvdXQgYW5kIHNjaGVkdWxlZCBiYWNrCitDIHNpbmNlIGl0IGNhbiBiZSBkb25lIGVhcmxpZXIuCitDCitDICAgLSBUaGUgZmlyc3QgbGRxIHNyY1swXSBpcyBuZWFyIHRoZSBzdGFydCBvZiB0aGUgcm91dGluZSwgZm9yIG1heGltdW0KK0MgICAgIHRpbWUgZnJvbSBtZW1vcnkuCitDCitDICAgLSBUaGUgc3VicSB5PXgtY2xpbWIgY2FuIGJlIGRvbmUgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgaW52ZXJzZS4KK0MKK0MgICAtIFRoZSBtdWxxIHkqaW52ZXJzZSBpcyByZXBsaWNhdGVkIGFmdGVyIHRoZSBmaW5hbCBzdWJxIGZvciB0aGUgaW52ZXJzZSwKK0MgICAgIGluc3RlYWQgb2YgYnJhbmNoaW5nIHRvIHRoZSBtdWxxIGluIHRoZSBtYWluIGxvb3AuICBPbiBldjQgYSBicmFuY2gKK0MgICAgIHRoZXJlIHdvdWxkIGNvc3QgY3ljbGVzLCBidXQgd2UgY2FuIGhpZGUgdGhlbSB1bmRlciB0aGUgbXVscSBsYXRlbmN5LgorQworQyBGb3IgdGhlIGxhc3QgbGltYiwgaGlnaDxkaXZpc29yIGlzIHRlc3RlZCBhbmQgaWYgdGhhdCdzIHRydWUgYSBzdWJ0cmFjdAorQyBhbmQgYWRkYmFjayBpcyBkb25lLCBhcyBwZXIgdGhlIG1haW4gbXBuL2dlbmVyaWMvbW9kZTFvLmMgY29kZS4gIFRoaXMgaXMgYQorQyBkYXRhLWRlcGVuZGVudCBicmFuY2gsIGJ1dCB3ZSdyZSB3YWl0aW5nIGZvciB1bXVsaCBzbyBhbnkgcGVuYWx0eSBzaG91bGQKK0MgaGlkZSB0aGVyZS4gIFRoZSBtdWx0aXBsaWVzIHNhdmVkIHdvdWxkIGJlIHdvcnRoIHRoZSBjb3N0IGFueXdheS4KK0MKK0MgRW5oYW5jZW1lbnRzOgorQworQyBGb3Igc2l6ZT09MSwgYSBwbGFpbiBkaXZpc2lvbiAoZG9uZSBiaXR3aXNlIHNheSkgbWlnaHQgYmUgZmFzdGVyIHRoYW4KK0MgY2FsY3VsYXRpbmcgYW4gaW52ZXJzZSwgdGhlIGxhdHRlciB0YWtpbmcgYWJvdXQgMTMwIGN5Y2xlcyBvbiBldjQgb3IgNzAgb24KK0MgZXY1LiAgQSBjYWxsIHRvIGdjYyBfX3JlbXF1IG1pZ2h0IGJlIGEgcG9zc2liaWxpdHkuCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fbW9kZXhhY3RfMWNfb2RkLGdwKQorCisJQyByMTYJc3JjCisJQyByMTcJc2l6ZQorCUMgcjE4CWQKKwlDIHIxOQljCisKKwlMRUEocjAsIGJpbnZlcnRfbGltYl90YWJsZSkKKwlzcmwJcjE4LCAxLCByMjAJCUMgZCA+PiAxCisKKwlhbmQJcjIwLCAxMjcsIHIyMAkJQyBpZHggPSBkPj4xICYgMHg3RgorCisJYWRkcQlyMCwgcjIwLCByMjEJCUMgdGFibGUgKyBpZHgKKworaWZlbHNlKGJ3eF9hdmFpbGFibGVfcCwxLAorYAlsZGJ1CXIyMCwgMChyMjEpCQlDIHRhYmxlW2lkeF0sIGludmVyc2UgOCBiaXRzCisnLGAKKwlsZHFfdQlyMjAsIDAocjIxKQkJQyB0YWJsZVtpZHhdIHF3b3JkCisJZXh0YmwJcjIwLCByMjEsIHIyMAkJQyB0YWJsZVtpZHhdLCBpbnZlcnNlIDggYml0cworJykKKworCW11bGwJcjIwLCByMjAsIHI3CQlDIGkqaQorCWFkZHEJcjIwLCByMjAsIHIyMAkJQyAyKmkKKworCWxkcQlyMiwgMChyMTYpCQlDIHggPSBzID0gc3JjWzBdCisJbGRhCXIxNywgLTEocjE3KQkJQyBzaXplLS0KKwljbHIJcjAJCQlDIGluaXRpYWwgY2JpdD0wCisKKwltdWxsCXI3LCByMTgsIHI3CQlDIGkqaSpkCisKKwlzdWJxCXIyMCwgcjcsIHIyMAkJQyAyKmktaSppKmQsIGludmVyc2UgMTYgYml0cworCisJbXVsbAlyMjAsIHIyMCwgcjcJCUMgaSppCisJYWRkcQlyMjAsIHIyMCwgcjIwCQlDIDIqaQorCisJbXVsbAlyNywgcjE4LCByNwkJQyBpKmkqZAorCisJc3VicQlyMjAsIHI3LCByMjAJCUMgMippLWkqaSpkLCBpbnZlcnNlIDMyIGJpdHMKKworCW11bHEJcjIwLCByMjAsIHI3CQlDIGkqaQorCWFkZHEJcjIwLCByMjAsIHIyMAkJQyAyKmkKKworCW11bHEJcjcsIHIxOCwgcjcJCUMgaSppKmQKKwlzdWJxCXIyLCByMTksIHIzCQlDIHkgPSB4IC0gY2xpbWIKKworCXN1YnEJcjIwLCByNywgcjIwCQlDIGludiA9IDIqaS1pKmkqZCwgaW52ZXJzZSA2NCBiaXRzCisKK0FTU0VSVChyNywgQyBzaG91bGQgaGF2ZSBkKmludj09MSBtb2QgMl42NAorYAltdWxxCXIxOCwgcjIwLCByNworCWNtcGVxCXI3LCAxLCByNycpCisKKwltdWxxCXIzLCByMjAsIHI0CQlDIGZpcnN0IHEgPSB5ICogaW52CisKKwliZXEJcjE3LCBMKG9uZSkJCUMgaWYgc2l6ZT09MQorCWJyCUwoZW50cnkpCisKKworTCh0b3ApOgorCUMgcjAJY2JpdAorCUMgcjE2CXNyYywgaW5jcmVtZW50aW5nCisJQyByMTcJc2l6ZSwgZGVjcmVtZW50aW5nCisJQyByMTgJZAorCUMgcjE5CWNsaW1iCisJQyByMjAJaW52CisKKwlsZHEJcjEsIDAocjE2KQkJQyBzID0gc3JjW2ldCisJc3VicQlyMSwgcjAsIHIyCQlDIHggPSBzIC0gY2JpdAorCWNtcHVsdAlyMSwgcjAsIHIwCQlDIG5ldyBjYml0ID0gcyA8IGNiaXQKKworCXN1YnEJcjIsIHIxOSwgcjMJCUMgeSA9IHggLSBjbGltYgorCisJbXVscQlyMywgcjIwLCByNAkJQyBxID0geSAqIGludgorTChlbnRyeSk6CisJY21wdWx0CXIyLCByMTksIHI1CQlDIGNiaXQyID0geCA8IGNsaW1iCisJYWRkcQlyNSwgcjAsIHIwCQlDIGNiaXQgKz0gY2JpdDIKKwlsZGEJcjE2LCA4KHIxNikJCUMgc3JjKysKKwlsZGEJcjE3LCAtMShyMTcpCQlDIHNpemUtLQorCisJdW11bGgJcjQsIHIxOCwgcjE5CQlDIGNsaW1iID0gcSAqIGQKKwlibmUJcjE3LCBMKHRvcCkJCUMgd2hpbGUgMiBvciBtb3JlIGxpbWJzIGxlZnQKKworCisKKwlDIHIwCWNiaXQKKwlDIHIxOAlkCisJQyByMTkJY2xpbWIKKwlDIHIyMAlpbnYKKworCWxkcQlyMSwgMChyMTYpCQlDIHMgPSBzcmNbc2l6ZS0xXSBoaWdoIGxpbWIKKworCWNtcHVsdAlyMSwgcjE4LCByMgkJQyB0ZXN0IGhpZ2g8ZGl2aXNvcgorCWJuZQlyMiwgTChza2lwKQkJQyBza2lwIGlmIHNvCisKKwlDIGNhbid0IHNraXAgYSBkaXZpc2lvbiwgcmVwZWF0IGxvb3AgY29kZQorCisJc3VicQlyMSwgcjAsIHIyCQlDIHggPSBzIC0gY2JpdAorCWNtcHVsdAlyMSwgcjAsIHIwCQlDIG5ldyBjYml0ID0gcyA8IGNiaXQKKworCXN1YnEJcjIsIHIxOSwgcjMJCUMgeSA9IHggLSBjbGltYgorCisJbXVscQlyMywgcjIwLCByNAkJQyBxID0geSAqIGludgorTChvbmUpOgorCWNtcHVsdAlyMiwgcjE5LCByNQkJQyBjYml0MiA9IHggPCBjbGltYgorCWFkZHEJcjUsIHIwLCByMAkJQyBjYml0ICs9IGNiaXQyCisKKwl1bXVsaAlyNCwgcjE4LCByMTkJCUMgY2xpbWIgPSBxICogZAorCisJYWRkcQlyMTksIHIwLCByMAkJQyByZXR1cm4gY2xpbWIgKyBjYml0CisJcmV0CXIzMSwgKHIyNiksIDEKKworCisJQUxJR04oOCkKK0woc2tpcCk6CisJQyB3aXRoIGhpZ2g8ZGl2aXNvciwgdGhlIGZpbmFsIHN0ZXAgY2FuIGJlIGp1c3QgKGNiaXQrY2xpbWIpLXMgYW5kCisJQyBhbiBhZGRiYWNrIG9mIGQgaWYgdGhhdCB1bmRlcmZsb3dzCisKKwlhZGRxCXIxOSwgcjAsIHIxOQkJQyBjID0gY2xpbWIgKyBjYml0CisKKwlzdWJxCXIxOSwgcjEsIHIyCQlDIGMgLSBzCisJY21wdWx0CXIxOSwgcjEsIHIzCQlDIGMgPCBzCisKKwlhZGRxCXIyLCByMTgsIHIwCQlDIHJldHVybiBjLXMgKyBkaXZpc29yCisKKwljbW92ZXEJcjMsIHIyLCByMAkJQyByZXR1cm4gYy1zIGlmIG5vIHVuZGVyZmxvdworCXJldAlyMzEsIChyMjYpLCAxCisKK0VQSUxPR1VFKCkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9tdWxfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL211bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2NkYmNmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9tdWxfMS5hc20KQEAgLTAsMCArMSwxMDIgQEAKK2RubCAgQWxwaGEgbXBuX211bF8xIC0tIE11bHRpcGx5IGEgbGltYiB2ZWN0b3Igd2l0aCBhIGxpbWIgYW5kIHN0b3JlCitkbmwgIHRoZSByZXN1bHQgaW4gYSBzZWNvbmQgbGltYiB2ZWN0b3IuCisKK2RubCAgQ29weXJpZ2h0IDE5OTIsIDE5OTQsIDE5OTUsIDIwMDAsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgIGN5Y2xlcy9saW1iCitDIEVWNDogICAgIDQyCitDIEVWNTogICAgIDE4CitDIEVWNjogICAgICA3CisKK0MgIElOUFVUIFBBUkFNRVRFUlMKK0MgIHJwCXIxNgorQyAgdXAJcjE3CitDICBuCXIxOAorQyAgdmwJcjE5CitDICBjbAlyMjAKKworCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX211bF8xYykKKwlsZHEJcjIsMChyMTcpCUMgcjIgPSBzMV9saW1iCisJbGRhCXIxOCwtMShyMTgpCUMgc2l6ZS0tCisJbXVscQlyMixyMTkscjMJQyByMyA9IHByb2RfbG93CisJdW11bGgJcjIscjE5LHI0CUMgcjQgPSBwcm9kX2hpZ2gKKwliZXEJcjE4LCRMZTFjCUMganVtcCBpZiBzaXplIHdhcyA9PSAxCisJbGRxCXIyLDgocjE3KQlDIHIyID0gczFfbGltYgorCWxkYQlyMTgsLTEocjE4KQlDIHNpemUtLQorCWFkZHEJcjMscjIwLHIzCUMgcjMgPSBjeV9saW1iICsgY2wKKwlzdHEJcjMsMChyMTYpCisJY21wdWx0CXIzLHIyMCxyMAlDIHIwID0gY2FycnkgZnJvbSAoY3lfbGltYiArIGNsKQorCWJuZQlyMTgsJExvb3AJQyBqdW1wIGlmIHNpemUgd2FzID09IDIKKwlicglyMzEsJExlMgorJExlMWM6CWFkZHEJcjMscjIwLHIzCUMgcjMgPSBjeV9saW1iICsgY2wKKwljbXB1bHQJcjMscjIwLHIwCUMgcjAgPSBjYXJyeSBmcm9tIChjeV9saW1iICsgY2wpCiskTGUxOglzdHEJcjMsMChyMTYpCisJYWRkcQlyNCxyMCxyMAorCXJldAlyMzEsKHIyNiksMQorRVBJTE9HVUUobXBuX211bF8xYykKKworUFJPTE9HVUUobXBuX211bF8xKQorCWxkcQlyMiwwKHIxNykJQyByMiA9IHMxX2xpbWIKKwlsZGEJcjE4LC0xKHIxOCkJQyBzaXplLS0KKwltdWxxCXIyLHIxOSxyMwlDIHIzID0gcHJvZF9sb3cKKwliaWMJcjMxLHIzMSxyMAlDIGNsZWFyIGN5X2xpbWIKKwl1bXVsaAlyMixyMTkscjQJQyByNCA9IHByb2RfaGlnaAorCWJlcQlyMTgsJExlMQlDIGp1bXAgaWYgc2l6ZSB3YXMgPT0gMQorCWxkcQlyMiw4KHIxNykJQyByMiA9IHMxX2xpbWIKKwlsZGEJcjE4LC0xKHIxOCkJQyBzaXplLS0KKwlzdHEJcjMsMChyMTYpCisJYmVxCXIxOCwkTGUyCUMganVtcCBpZiBzaXplIHdhcyA9PSAyCisKKwlBTElHTig4KQorJExvb3A6CW11bHEJcjIscjE5LHIzCUMgcjMgPSBwcm9kX2xvdworCWFkZHEJcjQscjAscjAJQyBjeV9saW1iID0gY3lfbGltYiArICdjeScKKwlsZGEJcjE4LC0xKHIxOCkJQyBzaXplLS0KKwl1bXVsaAlyMixyMTkscjQJQyByNCA9IHByb2RfaGlnaAorCWxkcQlyMiwxNihyMTcpCUMgcjIgPSBzMV9saW1iCisJbGRhCXIxNyw4KHIxNykJQyBzMV9wdHIrKworCWFkZHEJcjMscjAscjMJQyByMyA9IGN5X2xpbWIgKyBwcm9kX2xvdworCXN0cQlyMyw4KHIxNikKKwljbXB1bHQJcjMscjAscjAJQyByMCA9IGNhcnJ5IGZyb20gKGN5X2xpbWIgKyBwcm9kX2xvdykKKwlsZGEJcjE2LDgocjE2KQlDIHJlc19wdHIrKworCWJuZQlyMTgsJExvb3AKKworJExlMjoJbXVscQlyMixyMTkscjMJQyByMyA9IHByb2RfbG93CisJYWRkcQlyNCxyMCxyMAlDIGN5X2xpbWIgPSBjeV9saW1iICsgJ2N5JworCXVtdWxoCXIyLHIxOSxyNAlDIHI0ID0gcHJvZF9oaWdoCisJYWRkcQlyMyxyMCxyMwlDIHIzID0gY3lfbGltYiArIHByb2RfbG93CisJY21wdWx0CXIzLHIwLHIwCUMgcjAgPSBjYXJyeSBmcm9tIChjeV9saW1iICsgcHJvZF9sb3cpCisJc3RxCXIzLDgocjE2KQorCWFkZHEJcjQscjAscjAJQyBjeV9saW1iID0gcHJvZF9oaWdoICsgY3kKKwlyZXQJcjMxLChyMjYpLDEKK0VQSUxPR1VFKG1wbl9tdWxfMSkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9yc2hpZnQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9yc2hpZnQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMWUyMTQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL3JzaGlmdC5hc20KQEAgLTAsMCArMSwxODAgQEAKK2RubCAgQWxwaGEgbXBuX3JzaGlmdCAtLSBTaGlmdCBhIG51bWJlciByaWdodC4KKworZG5sICBDb3B5cmlnaHQgMTk5NCwgMTk5NSwgMjAwMCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgY3ljbGVzL2xpbWIKK0MgRVY0OiAgICAgPworQyBFVjU6ICAgICAzLjI1CitDIEVWNjogICAgIDEuNzUKKworQyAgSU5QVVQgUEFSQU1FVEVSUworQyAgcnAJcjE2CitDICB1cAlyMTcKK0MgIG4JcjE4CitDICBjbnQJcjE5CisKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9yc2hpZnQpCisJbGRxCXI0LDAocjE3KQlDIGxvYWQgZmlyc3QgbGltYgorCXN1YnEJcjMxLHIxOSxyMjAKKwlzdWJxCXIxOCwxLHIxOAorCWFuZAlyMTgsNC0xLHIyOAlDIG51bWJlciBvZiBsaW1icyBpbiBmaXJzdCBsb29wCisJc2xsCXI0LHIyMCxyMAlDIGNvbXB1dGUgZnVuY3Rpb24gcmVzdWx0CisKKwliZXEJcjI4LEwoTDApCisJc3VicQlyMTgscjI4LHIxOAorCisJQUxJR04oOCkKK0wodG9wMCk6CisJbGRxCXIzLDgocjE3KQorCWFkZHEJcjE2LDgscjE2CisJc3JsCXI0LHIxOSxyNQorCWFkZHEJcjE3LDgscjE3CisJc3VicQlyMjgsMSxyMjgKKwlzbGwJcjMscjIwLHI2CisJYmlzCXIzLHIzLHI0CisJYmlzCXI1LHI2LHI4CisJc3RxCXI4LC04KHIxNikKKwlibmUJcjI4LEwodG9wMCkKKworTChMMCk6CXNybAlyNCxyMTkscjI0CisJYmVxCXIxOCxMKGVuZCkKK0Mgd2FybSB1cCBwaGFzZSAxCisJbGRxCXIxLDgocjE3KQorCXN1YnEJcjE4LDQscjE4CisJbGRxCXIyLDE2KHIxNykKKwlsZHEJcjMsMjQocjE3KQorCWxkcQlyNCwzMihyMTcpCitDIHdhcm0gdXAgcGhhc2UgMgorCXNsbAlyMSxyMjAscjcKKwlzcmwJcjEscjE5LHIyMQorCXNsbAlyMixyMjAscjgKKwliZXEJcjE4LEwoZW5kMSkKKwlsZHEJcjEsNDAocjE3KQorCXNybAlyMixyMTkscjIyCisJbGRxCXIyLDQ4KHIxNykKKwlzbGwJcjMscjIwLHI1CisJYmlzCXI3LHIyNCxyNworCXNybAlyMyxyMTkscjIzCisJYmlzCXI4LHIyMSxyOAorCXNsbAlyNCxyMjAscjYKKwlsZHEJcjMsNTYocjE3KQorCXNybAlyNCxyMTkscjI0CisJbGRxCXI0LDY0KHIxNykKKwlzdWJxCXIxOCw0LHIxOAorCWJlcQlyMTgsTChlbmQyKQorCUFMSUdOKDE2KQorQyBtYWluIGxvb3AKK0wodG9wKToJc3RxCXI3LDAocjE2KQorCWJpcwlyNSxyMjIscjUKKwlzdHEJcjgsOChyMTYpCisJYmlzCXI2LHIyMyxyNgorCisJc2xsCXIxLHIyMCxyNworCXN1YnEJcjE4LDQscjE4CisJc3JsCXIxLHIxOSxyMjEKKwl1bm9wCUMgbGRxCXIzMSwtOTYocjE3KQorCisJc2xsCXIyLHIyMCxyOAorCWxkcQlyMSw3MihyMTcpCisJc3JsCXIyLHIxOSxyMjIKKwlsZHEJcjIsODAocjE3KQorCisJc3RxCXI1LDE2KHIxNikKKwliaXMJcjcscjI0LHI3CisJc3RxCXI2LDI0KHIxNikKKwliaXMJcjgscjIxLHI4CisKKwlzbGwJcjMscjIwLHI1CisJdW5vcAlDIGxkcQlyMzEsLTk2KHIxNykKKwlzcmwJcjMscjE5LHIyMworCWFkZHEJcjE2LDMyLHIxNgorCisJc2xsCXI0LHIyMCxyNgorCWxkcQlyMyw4OChyMTcpCisJc3JsCXI0LHIxOSxyMjQKKwlsZHEJcjQsOTYocjE3KQorCisJYWRkcQlyMTcsMzIscjE3CisJYm5lCXIxOCxMKHRvcCkKK0MgY29vbCBkb3duIHBoYXNlIDIvMQorTChlbmQyKToKKwlzdHEJcjcsMChyMTYpCisJYmlzCXI1LHIyMixyNQorCXN0cQlyOCw4KHIxNikKKwliaXMJcjYscjIzLHI2CisJc2xsCXIxLHIyMCxyNworCXNybAlyMSxyMTkscjIxCisJc2xsCXIyLHIyMCxyOAorCXNybAlyMixyMTkscjIyCisJc3RxCXI1LDE2KHIxNikKKwliaXMJcjcscjI0LHI3CisJc3RxCXI2LDI0KHIxNikKKwliaXMJcjgscjIxLHI4CisJc2xsCXIzLHIyMCxyNQorCXNybAlyMyxyMTkscjIzCisJc2xsCXI0LHIyMCxyNgorCXNybAlyNCxyMTkscjI0CitDIGNvb2wgZG93biBwaGFzZSAyLzIKKwlzdHEJcjcsMzIocjE2KQorCWJpcwlyNSxyMjIscjUKKwlzdHEJcjgsNDAocjE2KQorCWJpcwlyNixyMjMscjYKKwlzdHEJcjUsNDgocjE2KQorCXN0cQlyNiw1NihyMTYpCitDIGNvb2wgZG93biBwaGFzZSAyLzMKKwlzdHEJcjI0LDY0KHIxNikKKwlyZXQJcjMxLChyMjYpLDEKKworQyBjb29sIGRvd24gcGhhc2UgMS8xCitMKGVuZDEpOgorCXNybAlyMixyMTkscjIyCisJc2xsCXIzLHIyMCxyNQorCWJpcwlyNyxyMjQscjcKKwlzcmwJcjMscjE5LHIyMworCWJpcwlyOCxyMjEscjgKKwlzbGwJcjQscjIwLHI2CisJc3JsCXI0LHIxOSxyMjQKK0MgY29vbCBkb3duIHBoYXNlIDEvMgorCXN0cQlyNywwKHIxNikKKwliaXMJcjUscjIyLHI1CisJc3RxCXI4LDgocjE2KQorCWJpcwlyNixyMjMscjYKKwlzdHEJcjUsMTYocjE2KQorCXN0cQlyNiwyNChyMTYpCisJc3RxCXIyNCwzMihyMTYpCisJcmV0CXIzMSwocjI2KSwxCisKK0woZW5kKToJc3RxCXIyNCwwKHIxNikKKwlyZXQJcjMxLChyMjYpLDEKK0VQSUxPR1VFKG1wbl9yc2hpZnQpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvc2VjX3RhYnNlbGVjdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL3NlY190YWJzZWxlY3QuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3OWIxNjkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL3NlY190YWJzZWxlY3QuYXNtCkBAIC0wLDAgKzEsMTM3IEBACitkbmwgIEFscGhhIG1wbl9zZWNfdGFic2VsZWN0LgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgY3ljbGVzL2xpbWIKK0MgRVY0OiAgICAgID8KK0MgRVY1OiAgICAgIDIuMjUKK0MgRVY2OiAgICAgIDEuNjQKKworZGVmaW5lKGBycCcsICAgICBgcjE2JykKK2RlZmluZShgdHAnLCAgICAgYHIxNycpCitkZWZpbmUoYG4nLCAgICAgIGByMTgnKQorZGVmaW5lKGBuZW50cycsICBgcjE5JykKK2RlZmluZShgd2hpY2gnLCAgYHIyMCcpCisKK2RlZmluZShgaScsICAgICAgYHIyMScpCitkZWZpbmUoYGonLCAgICAgIGByMjInKQorZGVmaW5lKGBzdHJpZGUnLCBgcjIzJykKK2RlZmluZShgbWFzaycsICAgYHIyNCcpCitkZWZpbmUoYGsnLCAgICAgIGByMjUnKQorCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fc2VjX3RhYnNlbGVjdCkKKwlzdWJxCW4sIDQsIGoJCQlDIG91dGVyIGxvb3AgaW5kdWN0aW9uIHZhcmlhYmxlCisKKwlibHQJaiwgTChvdXRlcl9lbmQpCitMKG91dGVyX3RvcCk6CisJbW92CXRwLCByOAorCWxkYQlyMCwgMChyMzEpCisJbGRhCXIxLCAwKHIzMSkKKwlsZGEJcjIsIDAocjMxKQorCWxkYQlyMywgMChyMzEpCisJc3VicQlqLCA0LCBqCQkJQyBvdXRlciBsb29wIGluZHVjdGlvbiB2YXJpYWJsZQorCXN1YnEJbmVudHMsIHdoaWNoLCBrCisJbW92CW5lbnRzLCBpCisKKwlBTElHTigxNikKK0wodG9wKToJbGRxCXI0LCAwKHRwKQorCWxkcQlyNSwgOCh0cCkKKwljbXBlcQlrLCBpLCBtYXNrCisJc3VicQlpLCAxLCBpCisJc3VicQlyMzEsIG1hc2ssIG1hc2sKKwlsZHEJcjYsIDE2KHRwKQorCWxkcQlyNywgMjQodHApCisJYW5kCXI0LCBtYXNrLCByNAorCWFuZAlyNSwgbWFzaywgcjUKKwlvcglyMCwgcjQsIHIwCisJb3IJcjEsIHI1LCByMQorCWFuZAlyNiwgbWFzaywgcjYKKwlhbmQJcjcsIG1hc2ssIHI3CisJb3IJcjIsIHI2LCByMgorCW9yCXIzLCByNywgcjMKKwlzOGFkZHEJbiwgdHAsIHRwCisJYm5lCWksIEwodG9wKQorCisJc3RxCXIwLCAwKHJwKQorCXN0cQlyMSwgOChycCkKKwlzdHEJcjIsIDE2KHJwKQorCXN0cQlyMywgMjQocnApCisJYWRkcQlyOCwgMzIsIHRwCisJYWRkcQlycCwgMzIsIHJwCisJYmdlCWosIEwob3V0ZXJfdG9wKQorTChvdXRlcl9lbmQpOgorCisJYW5kCW4sIDIsIHIwCisJYmVxCXIwLCBMKGIweCkKK0woYjF4KToJbW92CXRwLCByOAorCWxkYQlyMCwgMChyMzEpCisJbGRhCXIxLCAwKHIzMSkKKwlzdWJxCW5lbnRzLCB3aGljaCwgaworCW1vdgluZW50cywgaQorCUFMSUdOKDE2KQorTCh0cDIpOglsZHEJcjQsIDAodHApCisJbGRxCXI1LCA4KHRwKQorCWNtcGVxCWssIGksIG1hc2sKKwlzdWJxCWksIDEsIGkKKwlzdWJxCXIzMSwgbWFzaywgbWFzaworCWFuZAlyNCwgbWFzaywgcjQKKwlhbmQJcjUsIG1hc2ssIHI1CisJb3IJcjAsIHI0LCByMAorCW9yCXIxLCByNSwgcjEKKwlzOGFkZHEJbiwgdHAsIHRwCisJYm5lCWksIEwodHAyKQorCXN0cQlyMCwgMChycCkKKwlzdHEJcjEsIDgocnApCisJYWRkcQlyOCwgMTYsIHRwCisJYWRkcQlycCwgMTYsIHJwCisKK0woYjB4KToJYW5kCW4sIDEsIHIwCisJYmVxCXIwLCBMKGIwMCkKK0woYjAxKToJbGRhCXIwLCAwKHIzMSkKKwlzdWJxCW5lbnRzLCB3aGljaCwgaworCW1vdgluZW50cywgaQorCUFMSUdOKDE2KQorTCh0cDEpOglsZHEJcjQsIDAodHApCisJY21wZXEJaywgaSwgbWFzaworCXN1YnEJaSwgMSwgaQorCXN1YnEJcjMxLCBtYXNrLCBtYXNrCisJYW5kCXI0LCBtYXNrLCByNAorCW9yCXIwLCByNCwgcjAKKwlzOGFkZHEJbiwgdHAsIHRwCisJYm5lCWksIEwodHAxKQorCXN0cQlyMCwgMChycCkKKworTChiMDApOglyZXQJcjMxLCAocjI2KSwgMQorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9zcXJfZGlhZ19hZGRsc2gxLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvc3FyX2RpYWdfYWRkbHNoMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUyMTllZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvc3FyX2RpYWdfYWRkbHNoMS5hc20KQEAgLTAsMCArMSw5MyBAQAorZG5sICBBbHBoYSBtcG5fc3FyX2RpYWdfYWRkbHNoMS4KKworZG5sICBDb3B5cmlnaHQgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgY3ljbGVzL2xpbWIKK0MgRVY0OiAgICAgID8KK0MgRVY1OiAgICAgMTAuMgorQyBFVjY6ICAgICAgNC41CisKK0MgSWRlYWxseSwgb25lLXdheSBjb2RlIGNvdWxkIHJ1biBhdCA5IGMvbCAobGltaXRlZCBieSBtdWxxK3VtdWxoKSBvbiBldjUgYW5kCitDIGFib3V0IDMuNzUgYy9sIG9uIGV2Ni4gIFR3by13YXkgY29kZSBjb3VsZCBydW4gYXQgYWJvdXQgMy4yNSBjL2wgb24gZXY2LgorCitDIEFsZ29yaXRobTogV2UgYWxsb3cgb3Vyc2VsdmVzIHRvIHByb3BhZ2F0ZSBjYXJyeSB0byBhIHByb2R1Y3QgaGlnaCB3b3JkCitDIHdpdGhvdXQgd29ycnlpbmcgZm9yIGNhcnJ5IG91dCwgc2luY2UgKEItMSleMiA9IEJeMi0yQisxIGhhcyBhIGhpZ2ggd29yZCBvZgorQyBCLTIsIGkuZSwgd2lsbCBub3Qgc3BpbGwuICBXZSBwcm9wYWdhdGUgY2Fycnkgc2ltaWxhcmx5IHRvIGEgcHJvZHVjdCBsb3cgd29yZAorQyBzaW5jZSB0aGUgcHJvYmxlbSB2YWx1ZSBCLTEgaXMgYSBxdWFkcmF0aWMgbm9uLXJlc2lkdWUgbW9kIEIsIGJ1dCBvdXIKK0MgcHJvZHVjdHMgYXJlIHNxdWFyZXMuCisKK2RlZmluZShgcnAnLAlgcjE2JykKK2RlZmluZShgdHAnLAlgcjE3JykKK2RlZmluZShgdXAnLAlgcjE4JykKK2RlZmluZShgbicsCWByMTknKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX3Nxcl9kaWFnX2FkZGxzaDEpCisJbGRxCXIwLCAwKHVwKQorCWJpcwlyMzEsIHIzMSwgcjIxCisJYmlzCXIzMSwgcjMxLCByMworCW11bHEJcjAsIHIwLCByNworCXN0cQlyNywgMChycCkKKwl1bXVsaAlyMCwgcjAsIHI2CisJbGRhCW4sIC0xKG4pCisKKwlBTElHTigxNikKK0wodG9wKToJbGRxCXIwLCA4KHVwKQorCWxkYQl1cCwgOCh1cCkKKwlsZHEJcjgsIDAodHApCisJbGRxCXIyMCwgOCh0cCkKKwltdWxxCXIwLCByMCwgcjcKKwlsZGEJdHAsIDE2KHRwKQorCXNsbAlyOCwgMSwgcjIzCisJc3JsCXI4LCA2MywgcjIyCisJb3IJcjIxLCByMjMsIHIyMworCXNsbAlyMjAsIDEsIHIyNAorCWFkZHEJcjMsIHI2LCByNgkJQyBjYW5ub3QgY2FycnkgcGVyIGNvbW1lbnQgYWJvdmUKKwlvcglyMjIsIHIyNCwgcjI0CisJYWRkcQlyMjMsIHI2LCByMjEKKwl1bXVsaAlyMCwgcjAsIHI2CisJY21wdWx0CXIyMSwgcjIzLCByMQorCWFkZHEJcjEsIHI3LCByNwkJQyBjYW5ub3QgY2FycnkgcGVyIGNvbW1lbnQgYWJvdmUKKwlzdHEJcjIxLCA4KHJwKQorCWFkZHEJcjI0LCByNywgcjIyCisJc3RxCXIyMiwgMTYocnApCisJbGRhCW4sIC0xKG4pCisJY21wdWx0CXIyMiwgcjcsIHIzCisJc3JsCXIyMCwgNjMsIHIyMQorCWxkYQlycCwgMTYocnApCisJYm5lCW4sIEwodG9wKQorCisJYWRkcQlyMywgcjYsIHI2CQlDIGNhbm5vdCBjYXJyeSBwZXIgY29tbWVudCBhYm92ZQorCWFkZHEJcjIxLCByNiwgcjIxCisJc3RxCXIyMSwgOChycCkKKwlyZXQJcjMxLCAocjI2KSwgMQorRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL3N1Yl9uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvc3ViX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiYjcyMjYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL3N1Yl9uLmFzbQpAQCAtMCwwICsxLDE2NCBAQAorZG5sICBBbHBoYSBtcG5fc3ViX24gLS0gU3VidHJhY3QgdHdvIGxpbWIgdmVjdG9ycyBvZiB0aGUgc2FtZSBsZW5ndGggPiAwCitkbmwgIGFuZCBzdG9yZSBkaWZmZXJlbmNlIGluIGEgdGhpcmQgbGltYiB2ZWN0b3IuCisKK2RubCAgQ29weXJpZ2h0IDE5OTUsIDE5OTksIDIwMDAsIDIwMDUsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgIGN5Y2xlcy9saW1iCitDIEVWNDogICAgID8KK0MgRVY1OiAgICAgNC43NQorQyBFVjY6ICAgICAzCisKK2RubCAgSU5QVVQgUEFSQU1FVEVSUworZG5sICByZXNfcHRyCXIxNgorZG5sICBzMV9wdHIJcjE3CitkbmwgIHMyX3B0cglyMTgKK2RubCAgc2l6ZQlyMTkKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9zdWJfbmMpCisJYmlzCXIzMSxyMjAscjI1CisJYnIJTChjb20pCitFUElMT0dVRSgpCitQUk9MT0dVRShtcG5fc3ViX24pCisJYmlzCXIzMSxyMzEscjI1CQlDIGNsZWFyIGN5CitMKGNvbSk6CXN1YnEJcjE5LDQscjE5CQlDIGRlY3IgbG9vcCBjbnQKKwlibHQJcjE5LCRMZW5kMgkJQyBpZiBsZXNzIHRoYW4gNCBsaW1icywgZ290byAybmQgbG9vcAorQyBTdGFydCBzb2Z0d2FyZSBwaXBlbGluZSBmb3IgMXN0IGxvb3AKKwlsZHEJcjAsMChyMTgpCisJbGRxCXI0LDAocjE3KQorCWxkcQlyMSw4KHIxOCkKKwlsZHEJcjUsOChyMTcpCisJYWRkcQlyMTcsMzIscjE3CQlDIHVwZGF0ZSBzMV9wdHIKKwlzdWJxCXI0LHIwLHIyOAkJQyAxc3QgbWFpbiBzdWJ0cmFjdAorCWxkcQlyMiwxNihyMTgpCisJc3VicQlyMjgscjI1LHIyMAkJQyAxc3QgY2Fycnkgc3VidHJhY3QKKwlsZHEJcjMsMjQocjE4KQorCWNtcHVsdAlyNCxyMCxyOAkJQyBjb21wdXRlIGN5IGZyb20gbGFzdCBzdWJ0cmFjdAorCWxkcQlyNiwtMTYocjE3KQorCWNtcHVsdAlyMjgscjI1LHIyNQkJQyBjb21wdXRlIGN5IGZyb20gbGFzdCBzdWJ0cmFjdAorCWxkcQlyNywtOChyMTcpCisJYmlzCXI4LHIyNSxyMjUJCUMgY29tYmluZSBjeSBmcm9tIHRoZSB0d28gc3VidHJhY3RzCisJc3VicQlyMTksNCxyMTkJCUMgZGVjciBsb29wIGNudAorCXN1YnEJcjUscjEscjI4CQlDIDJuZCBtYWluIHN1YnRyYWN0CisJYWRkcQlyMTgsMzIscjE4CQlDIHVwZGF0ZSBzMl9wdHIKKwlzdWJxCXIyOCxyMjUscjIxCQlDIDJuZCBjYXJyeSBzdWJ0cmFjdAorCWNtcHVsdAlyNSxyMSxyOAkJQyBjb21wdXRlIGN5IGZyb20gbGFzdCBzdWJ0cmFjdAorCWJsdAlyMTksJExlbmQxCQlDIGlmIGxlc3MgdGhhbiA0IGxpbWJzIHJlbWFpbiwganVtcAorQyAxc3QgbG9vcCBoYW5kbGVzIGdyb3VwcyBvZiA0IGxpbWJzIGluIGEgc29mdHdhcmUgcGlwZWxpbmUKKwlBTElHTigxNikKKyRMb29wOgljbXB1bHQJcjI4LHIyNSxyMjUJCUMgY29tcHV0ZSBjeSBmcm9tIGxhc3Qgc3VidHJhY3QKKwlsZHEJcjAsMChyMTgpCisJYmlzCXI4LHIyNSxyMjUJCUMgY29tYmluZSBjeSBmcm9tIHRoZSB0d28gc3VidHJhY3RzCisJbGRxCXIxLDgocjE4KQorCXN1YnEJcjYscjIscjI4CQlDIDNyZCBtYWluIHN1YnRyYWN0CisJbGRxCXI0LDAocjE3KQorCXN1YnEJcjI4LHIyNSxyMjIJCUMgM3JkIGNhcnJ5IHN1YnRyYWN0CisJbGRxCXI1LDgocjE3KQorCWNtcHVsdAlyNixyMixyOAkJQyBjb21wdXRlIGN5IGZyb20gbGFzdCBzdWJ0cmFjdAorCWNtcHVsdAlyMjgscjI1LHIyNQkJQyBjb21wdXRlIGN5IGZyb20gbGFzdCBzdWJ0cmFjdAorCXN0cQlyMjAsMChyMTYpCisJYmlzCXI4LHIyNSxyMjUJCUMgY29tYmluZSBjeSBmcm9tIHRoZSB0d28gc3VidHJhY3RzCisJc3RxCXIyMSw4KHIxNikKKwlzdWJxCXI3LHIzLHIyOAkJQyA0dGggbWFpbiBzdWJ0cmFjdAorCXN1YnEJcjI4LHIyNSxyMjMJCUMgNHRoIGNhcnJ5IHN1YnRyYWN0CisJY21wdWx0CXI3LHIzLHI4CQlDIGNvbXB1dGUgY3kgZnJvbSBsYXN0IHN1YnRyYWN0CisJY21wdWx0CXIyOCxyMjUscjI1CQlDIGNvbXB1dGUgY3kgZnJvbSBsYXN0IHN1YnRyYWN0CisJCWFkZHEJcjE3LDMyLHIxNwkJQyB1cGRhdGUgczFfcHRyCisJYmlzCXI4LHIyNSxyMjUJCUMgY29tYmluZSBjeSBmcm9tIHRoZSB0d28gc3VidHJhY3RzCisJCWFkZHEJcjE2LDMyLHIxNgkJQyB1cGRhdGUgcmVzX3B0cgorCXN1YnEJcjQscjAscjI4CQlDIDFzdCBtYWluIHN1YnRyYWN0CisJbGRxCXIyLDE2KHIxOCkKKwlzdWJxCXIyOCxyMjUscjIwCQlDIDFzdCBjYXJyeSBzdWJ0cmFjdAorCWxkcQlyMywyNChyMTgpCisJY21wdWx0CXI0LHIwLHI4CQlDIGNvbXB1dGUgY3kgZnJvbSBsYXN0IHN1YnRyYWN0CisJbGRxCXI2LC0xNihyMTcpCisJY21wdWx0CXIyOCxyMjUscjI1CQlDIGNvbXB1dGUgY3kgZnJvbSBsYXN0IHN1YnRyYWN0CisJbGRxCXI3LC04KHIxNykKKwliaXMJcjgscjI1LHIyNQkJQyBjb21iaW5lIGN5IGZyb20gdGhlIHR3byBzdWJ0cmFjdHMKKwlzdWJxCXIxOSw0LHIxOQkJQyBkZWNyIGxvb3AgY250CisJc3RxCXIyMiwtMTYocjE2KQorCXN1YnEJcjUscjEscjI4CQlDIDJuZCBtYWluIHN1YnRyYWN0CisJc3RxCXIyMywtOChyMTYpCisJc3VicQlyMjgscjI1LHIyMQkJQyAybmQgY2Fycnkgc3VidHJhY3QKKwkJYWRkcQlyMTgsMzIscjE4CQlDIHVwZGF0ZSBzMl9wdHIKKwljbXB1bHQJcjUscjEscjgJCUMgY29tcHV0ZSBjeSBmcm9tIGxhc3Qgc3VidHJhY3QKKwliZ2UJcjE5LCRMb29wCitDIEZpbmlzaCBzb2Z0d2FyZSBwaXBlbGluZSBmb3IgMXN0IGxvb3AKKyRMZW5kMToJY21wdWx0CXIyOCxyMjUscjI1CQlDIGNvbXB1dGUgY3kgZnJvbSBsYXN0IHN1YnRyYWN0CisJYmlzCXI4LHIyNSxyMjUJCUMgY29tYmluZSBjeSBmcm9tIHRoZSB0d28gc3VidHJhY3RzCisJc3VicQlyNixyMixyMjgJCUMgY3kgYWRkCisJc3VicQlyMjgscjI1LHIyMgkJQyAzcmQgbWFpbiBzdWJ0cmFjdAorCWNtcHVsdAlyNixyMixyOAkJQyBjb21wdXRlIGN5IGZyb20gbGFzdCBzdWJ0cmFjdAorCWNtcHVsdAlyMjgscjI1LHIyNQkJQyBjb21wdXRlIGN5IGZyb20gbGFzdCBzdWJ0cmFjdAorCXN0cQlyMjAsMChyMTYpCisJYmlzCXI4LHIyNSxyMjUJCUMgY29tYmluZSBjeSBmcm9tIHRoZSB0d28gc3VidHJhY3RzCisJc3RxCXIyMSw4KHIxNikKKwlzdWJxCXI3LHIzLHIyOAkJQyBjeSBhZGQKKwlzdWJxCXIyOCxyMjUscjIzCQlDIDR0aCBtYWluIHN1YnRyYWN0CisJY21wdWx0CXI3LHIzLHI4CQlDIGNvbXB1dGUgY3kgZnJvbSBsYXN0IHN1YnRyYWN0CisJY21wdWx0CXIyOCxyMjUscjI1CQlDIGNvbXB1dGUgY3kgZnJvbSBsYXN0IHN1YnRyYWN0CisJYmlzCXI4LHIyNSxyMjUJCUMgY29tYmluZSBjeSBmcm9tIHRoZSB0d28gc3VidHJhY3RzCisJYWRkcQlyMTYsMzIscjE2CQlDIHVwZGF0ZSByZXNfcHRyCisJc3RxCXIyMiwtMTYocjE2KQorCXN0cQlyMjMsLTgocjE2KQorJExlbmQyOglhZGRxCXIxOSw0LHIxOQkJQyByZXN0b3JlIGxvb3AgY250CisJYmVxCXIxOSwkTHJldAorQyBTdGFydCBzb2Z0d2FyZSBwaXBlbGluZSBmb3IgMm5kIGxvb3AKKwlsZHEJcjAsMChyMTgpCisJbGRxCXI0LDAocjE3KQorCXN1YnEJcjE5LDEscjE5CisJYmVxCXIxOSwkTGVuZDAKK0MgMm5kIGxvb3AgaGFuZGxlcyByZW1haW5pbmcgMS0zIGxpbWJzCisJQUxJR04oMTYpCiskTG9vcDA6CXN1YnEJcjQscjAscjI4CQlDIG1haW4gc3VidHJhY3QKKwljbXB1bHQJcjQscjAscjgJCUMgY29tcHV0ZSBjeSBmcm9tIGxhc3Qgc3VidHJhY3QKKwlsZHEJcjAsOChyMTgpCisJbGRxCXI0LDgocjE3KQorCXN1YnEJcjI4LHIyNSxyMjAJCUMgY2Fycnkgc3VidHJhY3QKKwlhZGRxCXIxOCw4LHIxOAorCWFkZHEJcjE3LDgscjE3CisJc3RxCXIyMCwwKHIxNikKKwljbXB1bHQJcjI4LHIyNSxyMjUJCUMgY29tcHV0ZSBjeSBmcm9tIGxhc3Qgc3VidHJhY3QKKwlzdWJxCXIxOSwxLHIxOQkJQyBkZWNyIGxvb3AgY250CisJYmlzCXI4LHIyNSxyMjUJCUMgY29tYmluZSBjeSBmcm9tIHRoZSB0d28gc3VidHJhY3RzCisJYWRkcQlyMTYsOCxyMTYKKwlibmUJcjE5LCRMb29wMAorJExlbmQwOglzdWJxCXI0LHIwLHIyOAkJQyBtYWluIHN1YnRyYWN0CisJc3VicQlyMjgscjI1LHIyMAkJQyBjYXJyeSBzdWJ0cmFjdAorCWNtcHVsdAlyNCxyMCxyOAkJQyBjb21wdXRlIGN5IGZyb20gbGFzdCBzdWJ0cmFjdAorCWNtcHVsdAlyMjgscjI1LHIyNQkJQyBjb21wdXRlIGN5IGZyb20gbGFzdCBzdWJ0cmFjdAorCXN0cQlyMjAsMChyMTYpCisJYmlzCXI4LHIyNSxyMjUJCUMgY29tYmluZSBjeSBmcm9tIHRoZSB0d28gc3VidHJhY3RzCisKKyRMcmV0OgliaXMJcjI1LHIzMSxyMAkJQyByZXR1cm4gY3kKKwlyZXQJcjMxLChyMjYpLDEKK0VQSUxPR1VFKCkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9zdWJtdWxfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL3N1Ym11bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjYzYjUyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS9zdWJtdWxfMS5hc20KQEAgLTAsMCArMSw5OSBAQAorZG5sICBBbHBoYSBtcG5fc3VibXVsXzEgLS0gTXVsdGlwbHkgYSBsaW1iIHZlY3RvciB3aXRoIGEgbGltYiBhbmQgc3VidHJhY3QKK2RubCAgdGhlIHJlc3VsdCBmcm9tIGEgc2Vjb25kIGxpbWIgdmVjdG9yLgorCitkbmwgIENvcHlyaWdodCAxOTkyLCAxOTk0LCAxOTk1LCAyMDAwLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICBjeWNsZXMvbGltYgorQyBFVjQ6ICAgICA0MgorQyBFVjU6ICAgICAxOAorQyBFVjY6ICAgICAgNworCitDICBJTlBVVCBQQVJBTUVURVJTCitDICBycAlyMTYKK0MgIHVwCXIxNworQyAgbglyMTgKK0MgIGxpbWIJcjE5CisKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9zdWJtdWxfMSkKKwlsZHEJcjIsMChyMTcpCUMgcjIgPSBzMV9saW1iCisJYWRkcQlyMTcsOCxyMTcJQyBzMV9wdHIrKworCXN1YnEJcjE4LDEscjE4CUMgc2l6ZS0tCisJbXVscQlyMixyMTkscjMJQyByMyA9IHByb2RfbG93CisJbGRxCXI1LDAocjE2KQlDIHI1ID0gKnJlc19wdHIKKwl1bXVsaAlyMixyMTkscjAJQyByMCA9IHByb2RfaGlnaAorCWJlcQlyMTgsJExlbmQxCUMganVtcCBpZiBzaXplIHdhcyA9PSAxCisJbGRxCXIyLDAocjE3KQlDIHIyID0gczFfbGltYgorCWFkZHEJcjE3LDgscjE3CUMgczFfcHRyKysKKwlzdWJxCXIxOCwxLHIxOAlDIHNpemUtLQorCXN1YnEJcjUscjMscjMKKwljbXB1bHQJcjUscjMscjQKKwlzdHEJcjMsMChyMTYpCisJYWRkcQlyMTYsOCxyMTYJQyByZXNfcHRyKysKKwliZXEJcjE4LCRMZW5kMglDIGp1bXAgaWYgc2l6ZSB3YXMgPT0gMgorCisJQUxJR04oOCkKKyRMb29wOgltdWxxCXIyLHIxOSxyMwlDIHIzID0gcHJvZF9sb3cKKwlsZHEJcjUsMChyMTYpCUMgcjUgPSAqcmVzX3B0cgorCWFkZHEJcjQscjAscjAJQyBjeV9saW1iID0gY3lfbGltYiArICdjeScKKwlzdWJxCXIxOCwxLHIxOAlDIHNpemUtLQorCXVtdWxoCXIyLHIxOSxyNAlDIHI0ID0gY3lfbGltYgorCWxkcQlyMiwwKHIxNykJQyByMiA9IHMxX2xpbWIKKwlhZGRxCXIxNyw4LHIxNwlDIHMxX3B0cisrCisJYWRkcQlyMyxyMCxyMwlDIHIzID0gY3lfbGltYiArIHByb2RfbG93CisJY21wdWx0CXIzLHIwLHIwCUMgcjAgPSBjYXJyeSBmcm9tIChjeV9saW1iICsgcHJvZF9sb3cpCisJc3VicQlyNSxyMyxyMworCWNtcHVsdAlyNSxyMyxyNQorCXN0cQlyMywwKHIxNikKKwlhZGRxCXIxNiw4LHIxNglDIHJlc19wdHIrKworCWFkZHEJcjUscjAscjAJQyBjb21iaW5lIGNhcnJpZXMKKwlibmUJcjE4LCRMb29wCisKKyRMZW5kMjoJbXVscQlyMixyMTkscjMJQyByMyA9IHByb2RfbG93CisJbGRxCXI1LDAocjE2KQlDIHI1ID0gKnJlc19wdHIKKwlhZGRxCXI0LHIwLHIwCUMgY3lfbGltYiA9IGN5X2xpbWIgKyAnY3knCisJdW11bGgJcjIscjE5LHI0CUMgcjQgPSBjeV9saW1iCisJYWRkcQlyMyxyMCxyMwlDIHIzID0gY3lfbGltYiArIHByb2RfbG93CisJY21wdWx0CXIzLHIwLHIwCUMgcjAgPSBjYXJyeSBmcm9tIChjeV9saW1iICsgcHJvZF9sb3cpCisJc3VicQlyNSxyMyxyMworCWNtcHVsdAlyNSxyMyxyNQorCXN0cQlyMywwKHIxNikKKwlhZGRxCXI1LHIwLHIwCUMgY29tYmluZSBjYXJyaWVzCisJYWRkcQlyNCxyMCxyMAlDIGN5X2xpbWIgPSBwcm9kX2hpZ2ggKyBjeQorCXJldAlyMzEsKHIyNiksMQorJExlbmQxOglzdWJxCXI1LHIzLHIzCisJY21wdWx0CXI1LHIzLHI1CisJc3RxCXIzLDAocjE2KQorCWFkZHEJcjAscjUscjAKKwlyZXQJcjMxLChyMjYpLDEKK0VQSUxPR1VFKG1wbl9zdWJtdWxfMSkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS91bXVsLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvdW11bC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM5MDgxZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYWxwaGEvdW11bC5hc20KQEAgLTAsMCArMSw0NCBAQAorZG5sICBtcG5fdW11bF9wcG1tIC0tIDF4MS0+MiBsaW1iIG11bHRpcGxpY2F0aW9uCisKK2RubCAgQ29weXJpZ2h0IDE5OTksIDIwMDAsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDIG1wX2xpbWJfdCBtcG5fdW11bF9wcG1tIChtcF9saW1iX3QgKmxvd3B0ciwgbXBfbGltYl90IG0xLCBtcF9saW1iX3QgbTIpOworQworCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX3VtdWxfcHBtbSkKKwltdWxxCXIxNywgcjE4LCByMQorCXVtdWxoCXIxNywgcjE4LCByMAorCXN0cQlyMSwgMChyMTYpCisJcmV0CXIzMSwgKHIyNiksIDEKK0VQSUxPR1VFKCkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS91bmljb3MubTQgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FscGhhL3VuaWNvcy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDVjZjVjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hbHBoYS91bmljb3MubTQKQEAgLTAsMCArMSwxMzEgQEAKK2RpdmVydCgtMSkKKworZG5sICBtNCBtYWNyb3MgZm9yIGFscGhhIGFzc2VtYmxlciBvbiB1bmljb3MuCisKKworZG5sICBDb3B5cmlnaHQgMjAwMCwgMjAwMi0yMDA0LCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworZG5sICBOb3RlIHRoYXQgbm9uZSBvZiB0aGUgc3RhbmRhcmQgR01QX0FTTV8gYXV0b2NvbmYgdGVzdHMgYXJlIGRvbmUgZm9yCitkbmwgIHVuaWNvcywgc28gbm9uZSBvZiB0aGUgY29uZmlnLm00IHJlc3VsdHMgY2FuIGJlIHVzZWQgaGVyZS4KKworZG5sICBObyB1bmRlcnNjb3JlcyBvbiB1bmljb3MKK2RlZmluZShgR1NZTV9QUkVGSVgnKQorCitkZWZpbmUoYEFTTV9TVEFSVCcsCittNF9hc3NlcnRfbnVtYXJncygwKQorYAkuaWRlbnQJZHVtbXknKQorCitkZWZpbmUoYFgnLAorbTRfYXNzZXJ0X251bWFyZ3MoMSkKK2BeWCQxJykKKworZGVmaW5lKGBGTE9BVDY0JywKK200X2Fzc2VydF9udW1hcmdzKDIpCitgCS5wc2VjdAkkMUBjcnVkLGRhdGEKKyQxOgkudF9mbG9hdGluZyAkMgorCS5lbmRwJykKKworZG5sICBDYWxsZWQ6IFBST0xPR1VFX2NwdShHU1lNX1BSRUZJWGAnZm9vWyxncHxub2FsaWduXSkKK2RubCAgICAgICAgICBFUElMT0dVRV9jcHUoR1NZTV9QUkVGSVhgJ2ZvbykKKworZGVmaW5lKGBQUk9MT0dVRV9jcHUnLAorbTRfYXNzZXJ0X251bWFyZ3NfcmFuZ2UoMSwyKQorYGlmZWxzZShgJDInLGdwLCwKK2BpZmVsc2UoYCQyJyxub2FsaWduLCwKK2BpZmVsc2UoYCQyJywsLGBtNF9lcnJvcihgVW5yZWNvZ25pc2VkIFBST0xPR1VFIHBhcmFtZXRlcgorJyknKScpJylkbmwKKwkuc3RhY2sJMTkyCQk7IFdoYXQgZG9lcyB0aGlzIG1lYW4/ICBPbmx5IENyYXkga25vd3MuCisJLnBzZWN0CSQxQGNvZGUsY29kZSxjYWNoZQorJDE6OicpCisKK2RlZmluZShgRVBJTE9HVUVfY3B1JywKK200X2Fzc2VydF9udW1hcmdzKDEpCitgCS5lbmRwJykKKworCitkbmwgIFVzYWdlOiBMREdQKGRzdCxzcmMpCitkbmwKK2RubCAgRW1pdCBhbiAibGRncCBkc3Qsc3JjIiwgYnV0IG9ubHkgb24gc3lzdGVtcyB1c2luZyBhIEdPVCAod2hpY2ggdW5pY29zCitkbmwgIGRvZXNuJ3QpLgorCitkZWZpbmUoTERHUCwKK200X2Fzc2VydF9udW1hcmdzKDIpCispCisKKworZG5sICBVc2FnZTogRVhURVJOKHZhcmlhYmxlX25hbWUpCitkZWZpbmUoYEVYVEVSTicsCittNF9hc3NlcnRfbnVtYXJncygxKQorYAkuZXh0ZXJuCSQxJykKKworZGVmaW5lKGBEQVRBU1RBUlQnLAorbTRfYXNzZXJ0X251bWFyZ3NfcmFuZ2UoMSwyKQorYAkucHNlY3QJJDFAY3J1ZCxkYXRhCisJQUxJR04oaWZlbHNlKCQjLDEsMiwkMikpCiskMTonKQorCitkZWZpbmUoYERBVEFFTkQnLAorbTRfYXNzZXJ0X251bWFyZ3MoMCkKK2AJLmVuZHAnKQorCitkZWZpbmUoYEFTTV9FTkQnLAorbTRfYXNzZXJ0X251bWFyZ3MoMCkKK2AJLmVuZCcpCisKK2RlZmluZShgY3Z0dHFjJywKK200X2Fzc2VydF9udW1hcmdzKC0xKQorYGN2dHRxL2MnKQorCitkbmwgIExvYWQgYSBzeW1ib2xpYyBhZGRyZXNzIGludG8gYSByZWdpc3RlcgorZGVmaW5lKGBMRUEnLAorbTRfYXNzZXJ0X251bWFyZ3MoMikKKwlgbGF1bQkkMSwgICQyKHIzMSkKKwlzbGwJJDEsICAzMiwgICAkMQorCWxhbG0JJDEsICAkMigkMSkKKwlsYWwJJDEsICAkMigkMSknKQorCisKK2RubCAgVXNhZ2U6IEFMSUdOKGJ5dGVzKQorZG5sCitkbmwgIFVuaWNvcyBhc3NlbWJsZXIgLmFsaWduIGVtaXRzIHplcm9zLCBldmVuIGluIGNvZGUgc2VnbWVudHMsIHNvIGRpc2FibGUKK2RubCAgYWxpZ25pbmcuCitkbmwKK2RubCAgR0NDIHVzZXMgYSBtYWNybyBlbWl0aW5nIG5vcHMgdW50aWwgdGhlIGRlc2lyZWQgYWxpZ25tZW50IGlzIHJlYWNoZWQKK2RubCAgKHNlZSB1bmljb3Nta19maWxlX3N0YXJ0IGluIGFscGhhLmMpLiAgQ291bGQgZG8gc29tZXRoaW5nIGxpa2UgdGhhdCBpZgorZG5sICB3ZSBjYXJlZC4gIFRoZSBtYXhpbXVtIGRlc2lyZWQgYWxpZ25tZW50IG11c3QgYmUgZXN0YWJsaXNoZWQgYXQgdGhlCitkbmwgIHN0YXJ0IG9mIHRoZSBzZWN0aW9uIHRob3VnaCwgc2luY2Ugb2YgY291cnNlIGVtaXR0aW5nIG5vcHMgb25seQorZG5sICBhZHZhbmNlcyByZWxhdGl2ZSB0byB0aGUgc2VjdGlvbiBiZWdpbm5pbmcuCisKK2RlZmluZShgQUxJR04nLAorbTRfYXNzZXJ0X251bWFyZ3MoMSkKKykKKworCitkaXZlcnQKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL1JFQURNRSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2M3MjE0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vUkVBRE1FCkBAIC0wLDAgKzEsMzUgQEAKK0NvcHlyaWdodCAyMDAyLCAyMDEyLCAyMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworCisKKworVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgbXBuIGZ1bmN0aW9ucyBmb3IgQVJNIHByb2Nlc3NvcnMuICBJdCBoYXMgYmVlbgorb3B0aW1pc2VkIG1haW5seSBmb3IgQ29ydGV4LUE5IGFuZCBDb3J0ZXgtQTE1LCBidXQgdGhlIGNvZGUgaW4gdGhlIHRvcC1sZXZlbAorZGlyZWN0b3J5IHNob3VsZCBydW4gb24gYWxsIEFSTSBwcm9jZXNzb3JzIGF0IGFyY2hpdGVjdHVyZSBsZXZlbCB2NCBvciBsYXRlci4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL2FvcnNfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS9hb3JzX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYWQ5ZjcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS9hb3JzX24uYXNtCkBAIC0wLDAgKzEsMTEyIEBACitkbmwgIEFSTSBtcG5fYWRkX24gYW5kIG1wbl9zdWJfbgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBSb2JlcnQgSGFybGV5LgorCitkbmwgIENvcHlyaWdodCAxOTk3LCAyMDAwLCAyMDAxLCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBTdHJvbmdBUk0JID8KK0MgWFNjYWxlCSA/CitDIENvcnRleC1BNwkgPworQyBDb3J0ZXgtQTgJID8KK0MgQ29ydGV4LUE5CSAyLjUJc2xpZ2h0bHkgZmx1Y3R1YXRpbmcKK0MgQ29ydGV4LUExNQkgMi4yNQorCitkZWZpbmUoYHJwJywgYHIwJykKK2RlZmluZShgdXAnLCBgcjEnKQorZGVmaW5lKGB2cCcsIGByMicpCitkZWZpbmUoYG4nLCAgYHIzJykKKworaWZkZWYoYE9QRVJBVElPTl9hZGRfbicsIGAKKyAgZGVmaW5lKGBBRERTVUInLAlhZGRzKQorICBkZWZpbmUoYEFERFNVQkMnLAlhZGNzKQorICBkZWZpbmUoYENMUkNZJywJYGNtbglyMCwgIzAnKQorICBkZWZpbmUoYFNFVENZJywJYGNtcAkkMSwgIzEnKQorICBkZWZpbmUoYFJFVFZBTCcsCWBhZGMJcjAsIG4sICMwJykKKyAgZGVmaW5lKGBmdW5jJywJbXBuX2FkZF9uKQorICBkZWZpbmUoYGZ1bmNfbmMnLAltcG5fYWRkX25jKScpCitpZmRlZihgT1BFUkFUSU9OX3N1Yl9uJywgYAorICBkZWZpbmUoYEFERFNVQicsCXN1YnMpCisgIGRlZmluZShgQUREU1VCQycsCXNiY3MpCisgIGRlZmluZShgQ0xSQ1knLAlgY21wCXIwLCByMCcpCisgIGRlZmluZShgU0VUQ1knLAlgcnNicwkkMSwgJDEsICMwJykKKyAgZGVmaW5lKGBSRVRWQUwnLAlgc2JjCXIwLCByMCwgcjAKKwkJCWFuZAlyMCwgcjAsICMxJykKKyAgZGVmaW5lKGBmdW5jJywJbXBuX3N1Yl9uKQorICBkZWZpbmUoYGZ1bmNfbmMnLAltcG5fc3ViX25jKScpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FkZF9uIG1wbl9hZGRfbmMgbXBuX3N1Yl9uIG1wbl9zdWJfbmMpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShmdW5jX25jKQorCWxkcglyMTIsIFtzcCwgIzBdCisJc3RtZmQJc3AhLCB7IHI4LCByOSwgbHIgfQorCVNFVENZKAlyMTIpCisJYglMKGVudCkKK0VQSUxPR1VFKCkKK1BST0xPR1VFKGZ1bmMpCisJc3RtZmQJc3AhLCB7IHI4LCByOSwgbHIgfQorCUNMUkNZKAlyMTIpCitMKGVudCk6CXRzdAluLCAjMQorCWJlcQlMKHNraXAxKQorCWxkcglyMTIsIFt1cF0sICM0CisJbGRyCWxyLCBbdnBdLCAjNAorCUFERFNVQkMJcjEyLCByMTIsIGxyCisJc3RyCXIxMiwgW3JwXSwgIzQKK0woc2tpcDEpOgorCXRzdAluLCAjMgorCWJlcQlMKHNraXAyKQorCWxkbWlhCXVwISwgeyByOCwgcjkgfQorCWxkbWlhCXZwISwgeyByMTIsIGxyIH0KKwlBRERTVUJDCXI4LCByOCwgcjEyCisJQUREU1VCQwlyOSwgcjksIGxyCisJc3RtaWEJcnAhLCB7IHI4LCByOSB9CitMKHNraXAyKToKKwliaWNzCW4sIG4sICMzCisJYmVxCUwocnRuKQorCXN0bWZkCXNwISwgeyByNCwgcjUsIHI2LCByNyB9CisKK0wodG9wKToJbGRtaWEJdXAhLCB7IHI0LCByNSwgcjYsIHI3IH0KKwlsZG1pYQl2cCEsIHsgcjgsIHI5LCByMTIsIGxyIH0KKwlBRERTVUJDCXI0LCByNCwgcjgKKwlzdWIJbiwgbiwgIzQKKwlBRERTVUJDCXI1LCByNSwgcjkKKwlBRERTVUJDCXI2LCByNiwgcjEyCisJQUREU1VCQwlyNywgcjcsIGxyCisJc3RtaWEJcnAhLCB7IHI0LCByNSwgcjYsIHI3IH0KKwl0ZXEJbiwgIzAKKwlibmUJTCh0b3ApCisKKwlsZG1mZAlzcCEsIHsgcjQsIHI1LCByNiwgcjcgfQorCitMKHJ0bik6CVJFVFZBTAorCWxkbWZkCXNwISwgeyByOCwgcjksIHBjIH0KK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL2FvcnNsc2gxX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vYW9yc2xzaDFfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg5ZTY1NAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL2FvcnNsc2gxX24uYXNtCkBAIC0wLDAgKzEsMTY3IEBACitkbmwgIEFSTSBtcG5fYWRkbHNoMV9uIGFuZCBtcG5fc3VibHNoMV9uCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqw7ZybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgIGFkZGxzaDFfbiAgICAgICBzdWJsc2gxX24KK0MJICAgICBjeWNsZXMvbGltYiAgICAgY3ljbGVzL2xpbWIKK0MgU3Ryb25nQVJNCSA/CQkgPworQyBYU2NhbGUJID8JCSA/CitDIENvcnRleC1BNwkgPwkJID8KK0MgQ29ydGV4LUE4CSA/CQkgPworQyBDb3J0ZXgtQTkJIDMuMTIJCSAzLjcKK0MgQ29ydGV4LUExNQkgPwkJID8KKworQyBUT0RPCitDICAqIFRoZSBhZGRsc2gxX24gY29kZSBydW5zIHdlbGwsIGJ1dCBpcyBvbmx5IGJhcmVseSBmYXN0ZXIgdGhhbiBtcG5fYWRkbXVsXzEuCitDICAgIFRoZSBzdWJsc2gxX24gY29kZSBjb3VsZCBzdXJlbHkgYmUgdHdlYWtlZCwgaXRzIFJFVkNZIHNsb3dzIGRvd24gdGhpbmdzCitDICAgIHZlcnkgbXVjaC4gIElmIHR3byBpbnNucyBhcmUgcmVhbGx5IG5lZWRlZCwgaXQgbWlnaHQgaGVscCB0byBzZXBhcmF0ZSB0aGVtCitDICAgIGZvciBiZXR0ZXIgbWljcm8tcGFyYWxsZWxpc20uCisKK2RlZmluZShgcnAnLCBgcjAnKQorZGVmaW5lKGB1cCcsIGByMScpCitkZWZpbmUoYHZwJywgYHIyJykKK2RlZmluZShgbicsICBgcjMnKQorCitpZmRlZihgT1BFUkFUSU9OX2FkZGxzaDFfbicsIGAKKyAgZGVmaW5lKGBBRERTVUInLAlhZGRzKQorICBkZWZpbmUoYEFERFNVQkMnLAlhZGNzKQorICBkZWZpbmUoYFNFVENZJywJYGNtcAkkMSwgIzEnKQorICBkZWZpbmUoYFJFVFZBTCcsCWBhZGMJcjAsICQxLCAjMicpCisgIGRlZmluZShgU0FWRUNZJywJYHNiYwkkMSwgJDIsICMwJykKKyAgZGVmaW5lKGBSRVNUQ1knLAlgY21uCSQxLCAjMScpCisgIGRlZmluZShgUkVWQ1knLAlgJykKKyAgZGVmaW5lKGBJTklDWVInLAlgbW92CSQxLCAjMCcpCisgIGRlZmluZShgcjEwcjExJywJYHIxMScpCisgIGRlZmluZShgZnVuYycsCW1wbl9hZGRsc2gxX24pCisgIGRlZmluZShgZnVuY19uYycsCW1wbl9hZGRsc2gxX25jKScpCitpZmRlZihgT1BFUkFUSU9OX3N1YmxzaDFfbicsIGAKKyAgZGVmaW5lKGBBRERTVUInLAlzdWJzKQorICBkZWZpbmUoYEFERFNVQkMnLAlzYmNzKQorICBkZWZpbmUoYFNFVENZJywJYHJzYnMJJDEsICQxLCAjMCcpCisgIGRlZmluZShgUkVUVkFMJywJYGFkYwlyMCwgJDEsICMxJykKKyAgZGVmaW5lKGBTQVZFQ1knLAlgc2JjCSQxLCAkMSwgJDEnKQorICBkZWZpbmUoYFJFU1RDWScsCWBjbW4JJDEsICMxJykKKyAgZGVmaW5lKGBSRVZDWScsCWBzYmMJJDEsICQxLCAkMQorCQkJY21uCSQxLCAjMScpCisgIGRlZmluZShgSU5JQ1lSJywJYG12bgkkMSwgIzAnKQorICBkZWZpbmUoYHIxMHIxMScsCWByMTAnKQorICBkZWZpbmUoYGZ1bmMnLAltcG5fc3VibHNoMV9uKQorICBkZWZpbmUoYGZ1bmNfbmMnLAltcG5fc3VibHNoMV9uYyknKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRsc2gxX24gbXBuX3N1YmxzaDFfbikKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKGZ1bmMpCisJcHVzaAl7cjQtcjEwcjExLCByMTR9CisKK2lmZGVmKGBPUEVSQVRJT05fYWRkbHNoMV9uJywgYAorCW12bglyMTEsICMwCisnKQorCUlOSUNZUigJcjE0KQorCXN1YnMJbiwgbiwgIzMKKwlibHQJTChsZTIpCQkJQyBjYXJyeSBjbGVhciBvbiBicmFuY2ggcGF0aAorCisJY21uCXIwLCAjMAkJCUMgY2xlYXIgY2FycnkKKwlsZG1pYQl2cCEsIHtyOCwgcjksIHIxMH0KKwliCUwobWlkKQorCitMKHRvcCk6CVJFU1RDWSgJcjE0KQorCUFERFNVQkMJcjQsIHI0LCByOAorCUFERFNVQkMJcjUsIHI1LCByOQorCUFERFNVQkMJcjYsIHI2LCByMTAKKwlsZG1pYQl2cCEsIHtyOCwgcjksIHIxMH0KKwlzdG1pYQlycCEsIHtyNCwgcjUsIHI2fQorCVJFVkNZKHIxNCkKKwlhZGNzCXI4LCByOCwgcjgKKwlhZGNzCXI5LCByOSwgcjkKKwlhZGNzCXIxMCwgcjEwLCByMTAKKwlsZG1pYQl1cCEsIHtyNCwgcjUsIHI2fQorCVNBVkVDWSgJcjE0LCByMTEpCisJc3VicwluLCBuLCAjMworCWJsdAlMKGV4aSkKKwlSRVNUQ1koCXIxMikKKwlBRERTVUJDCXI0LCByNCwgcjgKKwlBRERTVUJDCXI1LCByNSwgcjkKKwlBRERTVUJDCXI2LCByNiwgcjEwCisJbGRtaWEJdnAhLCB7cjgsIHI5LCByMTB9CisJc3RtaWEJcnAhLCB7cjQsIHI1LCByNn0KKwlSRVZDWShyMTIpCitMKG1pZCk6CWFkY3MJcjgsIHI4LCByOAorCWFkY3MJcjksIHI5LCByOQorCWFkY3MJcjEwLCByMTAsIHIxMAorCWxkbWlhCXVwISwge3I0LCByNSwgcjZ9CisJU0FWRUNZKAlyMTIsIHIxMSkKKwlzdWJzCW4sIG4sICMzCisJYmdlCUwodG9wKQorCisJbW92CXI3LCByMTIJCQlDIHN3YXAgYWx0ZXJuYXRpbmcuLi4KKwltb3YJcjEyLCByMTQJCUMgLi4uY2Fycnktc2F2ZS4uLgorCW1vdglyMTQsIHI3CQkJQyAuLi5yZWdpc3RlcnMKKworTChleGkpOglSRVNUQ1koCXIxMikKKwlBRERTVUJDCXI0LCByNCwgcjgKKwlBRERTVUJDCXI1LCByNSwgcjkKKwlBRERTVUJDCXI2LCByNiwgcjEwCisJc3RtaWEJcnAhLCB7cjQsIHI1LCByNn0KKworCVJFVkNZKHIxMikKK0wobGUyKToJdHN0CW4sICMxCQkJQyBuID0gey0xLC0yLC0zfSBtYXAgdG8gWzJdLCBbMV0sIFswXQorCWJlcQlMKGUxKQorCitMKGUwMik6CXRzdAluLCAjMgorCWJlcQlMKHJ0MCkKKwlsZG0JdnAsIHtyOCwgcjl9CisJYWRjcwlyOCwgcjgsIHI4CisJYWRjcwlyOSwgcjksIHI5CisJbGRtCXVwLCB7cjQsIHI1fQorCVNBVkVDWSgJcjEyLCByMTEpCisJUkVTVENZKAlyMTQpCisJQUREU1VCQwlyNCwgcjQsIHI4CisJQUREU1VCQwlyNSwgcjUsIHI5CisJc3RtCXJwLCB7cjQsIHI1fQorCWIJTChydDEpCisKK0woZTEpOglsZHIJcjgsIFt2cF0KKwlhZGNzCXI4LCByOCwgcjgKKwlsZHIJcjQsIFt1cF0KKwlTQVZFQ1koCXIxMiwgcjExKQorCVJFU1RDWSgJcjE0KQorCUFERFNVQkMJcjQsIHI0LCByOAorCXN0cglyNCwgW3JwXQorCitMKHJ0MSk6CW1vdglyMTQsIHIxMgorCVJFVkNZKHIxMikKK0wocnQwKToJUkVUVkFMKAlyMTQpCisJcG9wCXtyNC1yMTByMTEsIHIxNH0KKwlyZXR1cm4JcjE0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS9hb3JzbXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vYW9yc211bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDJmYmIzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vYW9yc211bF8xLmFzbQpAQCAtMCwwICsxLDEzNSBAQAorZG5sICBBUk0gbXBuX2FkZG11bF8xIGFuZCBtcG5fc3VibXVsXzEuCisKK2RubCAgQ29weXJpZ2h0IDE5OTgsIDIwMDAsIDIwMDEsIDIwMDMsIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIFN0cm9uZ0FSTTogICAgID8KK0MgWFNjYWxlCSA/CitDIENvcnRleC1BNwkgPworQyBDb3J0ZXgtQTgJID8KK0MgQ29ydGV4LUE5CSA1LjI1CitDIENvcnRleC1BMTUJIDQKKworZGVmaW5lKGBycCcsIGByMCcpCitkZWZpbmUoYHVwJywgYHIxJykKK2RlZmluZShgbicsICBgcjInKQorZGVmaW5lKGB2bCcsIGByMycpCitkZWZpbmUoYHJsJywgYHIxMicpCitkZWZpbmUoYHVsJywgYHI2JykKK2RlZmluZShgcicsICBgbHInKQorCitpZmRlZihgT1BFUkFUSU9OX2FkZG11bF8xJywgYAorICBkZWZpbmUoYEFERFNVQicsCWFkZHMpCisgIGRlZmluZShgQUREU1VCQycsCWFkY3MpCisgIGRlZmluZShgQ0xSUkNZJywJYG1vdgkkMSwgIzAKKwkJCWFkZHMJcjAsIHIwLCAjMCcpCisgIGRlZmluZShgUkVUVkFMJywJYGFkYwlyMCwgcjQsICMwJykKKyAgZGVmaW5lKGBmdW5jJywJbXBuX2FkZG11bF8xKScpCitpZmRlZihgT1BFUkFUSU9OX3N1Ym11bF8xJywgYAorICBkZWZpbmUoYEFERFNVQicsCXN1YnMpCisgIGRlZmluZShgQUREU1VCQycsCXNiY3MpCisgIGRlZmluZShgQ0xSUkNZJywJYHN1YnMJJDEsIHIwLCByMCcpCisgIGRlZmluZShgUkVUVkFMJywJYHNiYwlyMCwgcjAsIHIwCisJCQlzdWIJcjAsICQxLCByMCcpCisgIGRlZmluZShgZnVuYycsCW1wbl9zdWJtdWxfMSknKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRtdWxfMSBtcG5fc3VibXVsXzEpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShmdW5jKQorCXN0bWZkCXNwISwgeyByNC1yNiwgbHIgfQorCUNMUlJDWSgJcjQpCisJdHN0CW4sICMxCisJYmVxCUwoc2tpcDEpCisJbGRyCXVsLCBbdXBdLCAjNAorCWxkcglybCwgW3JwLCAjMF0KKwl1bXVsbAlyNSwgcjQsIHVsLCB2bAorCUFERFNVQglyLCBybCwgcjUKKwlzdHIJciwgW3JwXSwgIzQKK0woc2tpcDEpOgorCXRzdAluLCAjMgorCWJlcQlMKHNraXAyKQorCWxkcgl1bCwgW3VwXSwgIzQKKwlsZHIJcmwsIFtycCwgIzBdCisJbW92CXI1LCAjMAorCXVtbGFsCXI0LCByNSwgdWwsIHZsCisJbGRyCXVsLCBbdXBdLCAjNAorCUFERFNVQkMJciwgcmwsIHI0CisJbGRyCXJsLCBbcnAsICM0XQorCW1vdglyNCwgIzAKKwl1bWxhbAlyNSwgcjQsIHVsLCB2bAorCXN0cglyLCBbcnBdLCAjNAorCUFERFNVQkMJciwgcmwsIHI1CisJc3RyCXIsIFtycF0sICM0CitMKHNraXAyKToKKwliaWNzCW4sIG4sICMzCisJYmVxCUwocnRuKQorCisJbGRyCXVsLCBbdXBdLCAjNAorCWxkcglybCwgW3JwLCAjMF0KKwltb3YJcjUsICMwCisJdW1sYWwJcjQsIHI1LCB1bCwgdmwKKwliCUwoaW4pCisKK0wodG9wKToJbGRyCXVsLCBbdXBdLCAjNAorCUFERFNVQkMJciwgcmwsIHI1CisJbGRyCXJsLCBbcnAsICM0XQorCW1vdglyNSwgIzAKKwl1bWxhbAlyNCwgcjUsIHVsLCB2bAorCXN0cglyLCBbcnBdLCAjNAorTChpbik6CWxkcgl1bCwgW3VwXSwgIzQKKwlBRERTVUJDCXIsIHJsLCByNAorCWxkcglybCwgW3JwLCAjNF0KKwltb3YJcjQsICMwCisJdW1sYWwJcjUsIHI0LCB1bCwgdmwKKwlzdHIJciwgW3JwXSwgIzQKKwlsZHIJdWwsIFt1cF0sICM0CisJQUREU1VCQwlyLCBybCwgcjUKKwlsZHIJcmwsIFtycCwgIzRdCisJbW92CXI1LCAjMAorCXVtbGFsCXI0LCByNSwgdWwsIHZsCisJc3RyCXIsIFtycF0sICM0CisJbGRyCXVsLCBbdXBdLCAjNAorCUFERFNVQkMJciwgcmwsIHI0CisJbGRyCXJsLCBbcnAsICM0XQorCW1vdglyNCwgIzAKKwl1bWxhbAlyNSwgcjQsIHVsLCB2bAorCXN1YgluLCBuLCAjNAorCXRzdAluLCBuCisJc3RyCXIsIFtycF0sICM0CisJYm5lCUwodG9wKQorCisJQUREU1VCQwlyLCBybCwgcjUKKwlzdHIJciwgW3JwXQorCitMKHJ0bik6CVJFVFZBTCgJcjQpCisJbGRtZmQJc3AhLCB7IHI0LXI2LCBwYyB9CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS9hcm0tZGVmcy5tNCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL2FybS1kZWZzLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNGZhMGIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS9hcm0tZGVmcy5tNApAQCAtMCwwICsxLDEwMCBAQAorZGl2ZXJ0KC0xKQorCitkbmwgIG00IG1hY3JvcyBmb3IgQVJNIGFzc2VtYmxlci4KKworZG5sICBDb3B5cmlnaHQgMjAwMSwgMjAxMi0yMDE2LCAyMDE4LTIwMTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCitkbmwgIFN0YW5kYXJkIGNvbW1lbnRpbmcgaXMgd2l0aCBALCB0aGUgZGVmYXVsdCBtNCAjIGlzIGZvciBjb25zdGFudHMgYW5kIHdlCitkbmwgIGRvbid0IHdhbnQgdG8gZGlzYWJsZSBtYWNybyBleHBhbnNpb25zIGluIG9yIGFmdGVyIHRoZW0uCisKK2NoYW5nZWNvbShAJiokKQorCitkZWZpbmUoYEFTTV9TVEFSVCcsCittNF9hc3NlcnRfbnVtYXJnc19yYW5nZSgwLDEpCitgaWZlbHNlKCQxLGBuZW9uJyxgLmZwdQluZW9uJywKKyAgICAgICAgJDEsLGAnLAorICAgICAgICAxLDEsYG00X2Vycm9yKGAkMCBnb3QgaW52YWxpZCBhcmd1bWVudCAkMScpJyknKQorCitkbmwgIEFQQ1MgcmVnaXN0ZXIgbmFtZXMuCisKK2RlZmxpdChhMSxyMCkKK2RlZmxpdChhMixyMSkKK2RlZmxpdChhMyxyMikKK2RlZmxpdChhNCxyMykKK2RubCBkZWZsaXQodjEscjQpCitkbmwgZGVmbGl0KHYyLHI1KQorZG5sIGRlZmxpdCh2MyxyNikKK2RubCBkZWZsaXQodjQscjcpCitkbmwgZGVmbGl0KHY1LHI4KQorZG5sIGRlZmxpdCh2NixyOSkKK2RlZmxpdChzYixyOSkKK2RubCBkZWZsaXQodjcscjEwKQorZGVmbGl0KHNsLHIxMCkKK2RlZmxpdChmcCxyMTEpCitkZWZsaXQoaXAscjEyKQorZG5sIGRlZmxpdChzcCxyMTMpCitkZWZsaXQobHIscjE0KQorZGVmbGl0KHBjLHIxNSkKKworCitkZWZpbmUoYGxlYV9saXN0JywgYCcpCitkZWZpbmUoYGxlYV9udW0nLDApCisKK2RubCAgTEVBKHJlZyxnbXBfc3ltYm9sKQorZG5sCitkbmwgIExvYWQgdGhlIGFkZHJlc3Mgb2YgZ21wX3N5bWJvbCBpbnRvIGEgcmVnaXN0ZXIuICBUaGUgZ21wX3N5bWJvbCBtdXN0IGJlCitkbmwgIGVpdGhlciBsb2NhbCBvciBwcm90ZWN0ZWQvaGlkZGVuLCBzaW5jZSB3ZSBhc3N1bWUgaXQgaGFzIGEgZml4ZWQgZGlzdGFuY2UKK2RubCAgZnJvbSB0aGUgcG9pbnQgb2YgdXNlLgorCitkZWZpbmUoYExFQScsYGRubAorbGRyCSQxLCBMKHB0cmAnbGVhX251bSkKK2lmZGVmKGBQSUMnLGRubAorYGRubAorTChiYXNgJ2xlYV9udW0pOmRubAorCWFkZAkkMSwgJDEsIHBjYCdkbmwKKwltNGFwcGVuZChgbGVhX2xpc3QnLGAKK0wocHRyJ2xlYV9udW1gKToJLndvcmQJR1NZTV9QUkVGSVhgJyQyLUwoYmFzJ2xlYV9udW1gKS04JykKKwlkZWZpbmUoYGxlYV9udW0nLCBldmFsKGxlYV9udW0rMSkpZG5sCisnLGBkbmwKKwltNGFwcGVuZChgbGVhX2xpc3QnLGAKK0wocHRyJ2xlYV9udW1gKToJLndvcmQJR1NZTV9QUkVGSVhgJyQyJykKKwlkZWZpbmUoYGxlYV9udW0nLCBldmFsKGxlYV9udW0rMSkpZG5sCisnKWRubAorJykKKworZGVmaW5lKGByZXR1cm4nLGBpZmRlZihgTk9USFVNQicsYG1vdglwYywgJyxgYngnKScpCisKKworZGVmaW5lKGBFUElMT0dVRV9jcHUnLAorYGxlYV9saXN0CisJU0laRShgJDEnLC4tYCQxJyknCitgZGVmaW5lKGBsZWFfbGlzdCcsIGAnKScpCisKK2RpdmVydApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vYmRpdl9kYm0xYy5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS9iZGl2X2RibTFjLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTE5ZGM0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vYmRpdl9kYm0xYy5hc20KQEAgLTAsMCArMSwxMTMgQEAKK2RubCAgQVJNIG1wbl9iZGl2X2RibTFjLgorCitkbmwgIENvcHlyaWdodCAyMDA4LCAyMDExLCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBTdHJvbmdBUk0JID8KK0MgWFNjYWxlCSA/CitDIENvcnRleC1BNwkgPworQyBDb3J0ZXgtQTgJID8KK0MgQ29ydGV4LUE5CSA0LjI1CitDIENvcnRleC1BMTUJIDIuNQorCitDIFRPRE8KK0MgICogVHJ5IHVzaW5nIHVtbGFsIG9yIHVtYWFsLgorQyAgKiBUcnkgdXNpbmcgbGRtL3N0bS4KKworZGVmaW5lKGBxcCcsCSAgYHIwJykKK2RlZmluZShgdXAnLAkgIGByMScpCitkZWZpbmUoYG4nLAkgIGByMicpCitkZWZpbmUoYGJkJywJICBgcjMnKQorZGVmaW5lKGBjeScsCSAgYHNwLCMwJykKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMTYpCitQUk9MT0dVRShtcG5fYmRpdl9kYm0xYykKKwlwdXNoCXtyNCwgcjUsIHI2LCByNywgcjh9CisJbGRyCXI0LCBbdXBdLCAjNAorCWxkcglyNSwgW3NwLCAjMjBdCisJYW5kcwlyMTIsIG4sICMzCisJYmVxCUwoZmkwKQorCWNtcAlyMTIsICMyCisJYmNjCUwoZmkxKQorCWJlcQlMKGZpMikKKworTChmaTMpOgl1bXVsbAlyOCwgcjEyLCByNCwgYmQKKwlsZHIJcjQsIFt1cF0sICM0CisJYglMKGxvMykKKworTChmaTApOgl1bXVsbAlyNiwgcjcsIHI0LCBiZAorCWxkcglyNCwgW3VwXSwgIzQKKwliCUwobG8wKQorCitMKGZpMSk6CXN1YnMJbiwgbiwgIzEKKwl1bXVsbAlyOCwgcjEyLCByNCwgYmQKKwlibHMJTCh3ZDEpCisJbGRyCXI0LCBbdXBdLCAjNAorCWIJTChsbzEpCisKK0woZmkyKToJdW11bGwJcjYsIHI3LCByNCwgYmQKKwlsZHIJcjQsIFt1cF0sICM0CisJYglMKGxvMikKKworTCh0b3ApOglsZHIJcjQsIFt1cF0sICM0CisJc3VicwlyNSwgcjUsIHI2CisJc3RyCXI1LCBbcXBdLCAjNAorCXNiYwlyNSwgcjUsIHI3CitMKGxvMSk6CXVtdWxsCXI2LCByNywgcjQsIGJkCisJbGRyCXI0LCBbdXBdLCAjNAorCXN1YnMJcjUsIHI1LCByOAorCXN0cglyNSwgW3FwXSwgIzQKKwlzYmMJcjUsIHI1LCByMTIKK0wobG8wKToJdW11bGwJcjgsIHIxMiwgcjQsIGJkCisJbGRyCXI0LCBbdXBdLCAjNAorCXN1YnMJcjUsIHI1LCByNgorCXN0cglyNSwgW3FwXSwgIzQKKwlzYmMJcjUsIHI1LCByNworTChsbzMpOgl1bXVsbAlyNiwgcjcsIHI0LCBiZAorCWxkcglyNCwgW3VwXSwgIzQKKwlzdWJzCXI1LCByNSwgcjgKKwlzdHIJcjUsIFtxcF0sICM0CisJc2JjCXI1LCByNSwgcjEyCitMKGxvMik6CXN1YnMJbiwgbiwgIzQKKwl1bXVsbAlyOCwgcjEyLCByNCwgYmQKKwliaGkJTCh0b3ApCisKK0wod2QyKToJc3VicwlyNSwgcjUsIHI2CisJc3RyCXI1LCBbcXBdLCAjNAorCXNiYwlyNSwgcjUsIHI3CitMKHdkMSk6CXN1YnMJcjUsIHI1LCByOAorCXN0cglyNSwgW3FwXQorCXNiYwlyMCwgcjUsIHIxMgorCXBvcAl7cjQsIHI1LCByNiwgcjcsIHI4fQorCXJldHVybglscgorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vYmRpdl9xXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vYmRpdl9xXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMzk1ZDEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS9iZGl2X3FfMS5hc20KQEAgLTAsMCArMSwxNjIgQEAKK2RubCAgQVJNIHY0IG1wbl9iZGl2X3FfMSwgbXBuX3BpMV9iZGl2X3FfMSAtLSBIZW5zZWwgZGl2aXNpb24gYnkgMS1saW1iIGRpdmlzb3IuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqw7ZybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAxMiwgMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgICAgICAgICAgICAgICBub3JtICAgdW5vcm0KK0MgMTE3NgkJMTMJMTgKK0MgQ29ydGV4LUE1CSA4CTEyCitDIENvcnRleC1BNwkxMC41CTE4CitDIENvcnRleC1BOAkxNAkxNQorQyBDb3J0ZXgtQTkJMTAJMTIJCW5vdCBtZWFzdXJlZCBzaW5jZSBsYXRlc3QgZWRpdHMKK0MgQ29ydGV4LUExNQkgOQkgOQorQyBDb3J0ZXgtQTUzCTE0CTIwCisKK0MgQXJjaGl0ZWN0dXJlIHJlcXVpcmVtZW50czoKK0MgdjUJLQorQyB2NXQJLQorQyB2NXRlCS0KK0MgdjYJLQorQyB2NnQyCS0KK0MgdjdhCS0KKworZGVmaW5lKGBycCcsICBgcjAnKQorZGVmaW5lKGB1cCcsICBgcjEnKQorZGVmaW5lKGBuJywgICBgcjInKQorZGVmaW5lKGBkJywgICBgcjMnKQorZGVmaW5lKGBkaV9hcmcnLCAgYHNwWzBdJykJCUMJanVzdCBtcG5fcGkxX2JkaXZfcV8xCitkZWZpbmUoYGNudF9hcmcnLCBgc3BbNF0nKQkJQwlqdXN0IG1wbl9waTFfYmRpdl9xXzEKKworZGVmaW5lKGBjeScsICBgcjcnKQorZGVmaW5lKGBjbnQnLCBgcjYnKQorZGVmaW5lKGB0bmMnLCBgcjgnKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2JkaXZfcV8xKQorCXRzdAlkLCAjMQorCXB1c2gJe3I2LXIxMX0KKwltb3YJY250LCAjMAorCWJuZQlMKGludikKKworQyBjb3VudCB0cmFpbGluZyB6ZXJvcworCW1vdnMJcjEwLCBkLCBsc2wgIzE2CisJbW92ZXEJZCwgZCwgbHNyICMxNgorCW1vdmVxCWNudCwgIzE2CisJdHN0CWQsICMweGZmCisJbW92ZXEJZCwgZCwgbHNyICM4CisJYWRkZXEJY250LCBjbnQsICM4CisJTEVBKAlyMTAsIGN0el90YWIpCisJYW5kCXIxMSwgZCwgIzB4ZmYKKwlsZHJiCXIxMCwgW3IxMCwgcjExXQorCW1vdglkLCBkLCBsc3IgcjEwCisJYWRkCWNudCwgY250LCByMTAKKworQyBiaW52ZXJ0IGxpbWIKK0woaW52KToJTEVBKAlyMTAsIGJpbnZlcnRfbGltYl90YWJsZSkKKwlhbmQJcjEyLCBkLCAjMjU0CisJbGRyYglyMTAsIFtyMTAsIHIxMiwgbHNyICMxXQorCW11bAlyMTIsIHIxMCwgcjEwCisJbXVsCXIxMiwgZCwgcjEyCisJcnNiCXIxMiwgcjEyLCByMTAsIGxzbCAjMQorCW11bAlyMTAsIHIxMiwgcjEyCisJbXVsCXIxMCwgZCwgcjEwCisJcnNiCXIxMCwgcjEwLCByMTIsIGxzbCAjMQlDIHIxMCA9IGludmVyc2UKKwliCUwocGkxKQorRVBJTE9HVUUoKQorCitQUk9MT0dVRShtcG5fcGkxX2JkaXZfcV8xKQorCXB1c2gJe3I2LXIxMX0KKworCWxkcgljbnQsIFtzcCwgIzI4XQorCWxkcglyMTAsIFtzcCwgIzI0XQorCitMKHBpMSk6CWxkcglyMTEsIFt1cF0sICM0CQlDIHVwWzBdCisJY21wCWNudCwgIzAKKwltb3YJY3ksICMwCisJYm5lCUwodW5vcm0pCisKK0wobm9ybSk6CisJc3VicwluLCBuLCAjMQkJQyBzZXQgY2FycnkgYXMgc2lkZS1lZmZlY3QKKwliZXEJTChlZG4pCisKKwlBTElHTigxNikKK0wodHBuKToJc2JjcwljeSwgcjExLCBjeQorCWxkcglyMTEsIFt1cF0sICM0CisJc3ViCW4sIG4sICMxCisJbXVsCXI5LCByMTAsIGN5CisJdHN0CW4sIG4KKwl1bXVsbAlyMTIsIGN5LCBkLCByOQorCXN0cglyOSwgW3JwXSwgIzQKKwlibmUJTCh0cG4pCisKK0woZWRuKToJc2JjCWN5LCByMTEsIGN5CisJbXVsCXI5LCByMTAsIGN5CisJc3RyCXI5LCBbcnBdCisJcG9wCXtyNi1yMTF9CisJcmV0dXJuCXIxNAorCitMKHVub3JtKToKKwlyc2IJdG5jLCBjbnQsICMzMgorCW1vdglyMTEsIHIxMSwgbHNyIGNudAorCXN1YnMJbiwgbiwgIzEJCUMgc2V0IGNhcnJ5IGFzIHNpZGUtZWZmZWN0CisJYmVxCUwoZWR1KQorCisJQUxJR04oMTYpCitMKHRwdSk6CWxkcglyMTIsIFt1cF0sICM0CisJb3JyCXI5LCByMTEsIHIxMiwgbHNsIHRuYworCW1vdglyMTEsIHIxMiwgbHNyIGNudAorCXNiY3MJY3ksIHI5LCBjeQkJQyBjcml0aWNhbCBwYXRoIC0+Y3ktPmN5LT4KKwlzdWIJbiwgbiwgIzEKKwltdWwJcjksIHIxMCwgY3kJCUMgY3JpdGljYWwgcGF0aCAtPmN5LT5yOS0+CisJdHN0CW4sIG4KKwl1bXVsbAlyMTIsIGN5LCBkLCByOQkJQyBjcml0aWNhbCBwYXRoIC0+cjktPmN5LT4KKwlzdHIJcjksIFtycF0sICM0CisJYm5lCUwodHB1KQorCitMKGVkdSk6CXNiYwljeSwgcjExLCBjeQorCW11bAlyOSwgcjEwLCBjeQorCXN0cglyOSwgW3JwXQorCXBvcAl7cjYtcjExfQorCXJldHVybglyMTQKK0VQSUxPR1VFKCkKKworCVJPREFUQQorY3R6X3RhYjoKKwkuYnl0ZQk4LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKKwkuYnl0ZQk1LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKKwkuYnl0ZQk2LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKKwkuYnl0ZQk1LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKKwkuYnl0ZQk3LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKKwkuYnl0ZQk1LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKKwkuYnl0ZQk2LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKKwkuYnl0ZQk1LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL2NuZF9hb3JzX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vY25kX2FvcnNfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ3OWYwZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL2NuZF9hb3JzX24uYXNtCkBAIC0wLDAgKzEsMTM0IEBACitkbmwgIEFSTSBtcG5fY25kX2FkZF9uLCBtcG5fY25kX3N1Yl9uCisKK2RubCAgQ29weXJpZ2h0IDIwMTIsIDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIFN0cm9uZ0FSTQkgPworQyBYU2NhbGUJID8KK0MgQ29ydGV4LUE3CSA/CitDIENvcnRleC1BOAkgPworQyBDb3J0ZXgtQTkJIDMKK0MgQ29ydGV4LUExNQkgMi41CisKK2RlZmluZShgY25kJywJYHIwJykKK2RlZmluZShgcnAnLAlgcjEnKQorZGVmaW5lKGB1cCcsCWByMicpCitkZWZpbmUoYHZwJywJYHIzJykKKworZGVmaW5lKGBuJywJYHIxMicpCisKKworaWZkZWYoYE9QRVJBVElPTl9jbmRfYWRkX24nLCBgCisJZGVmaW5lKGBBRERTVUInLCAgICAgIGFkZHMpCisJZGVmaW5lKGBBRERTVUJDJywgICAgICBhZGNzKQorCWRlZmluZShgSU5JVENZJywgICAgICBgY21uCXIwLCAjMCcpCisJZGVmaW5lKGBSRVRWQUwnLCAgICAgIGBhZGMJcjAsIG4sICMwJykKKwlkZWZpbmUoZnVuYywJICAgICAgbXBuX2NuZF9hZGRfbiknKQoraWZkZWYoYE9QRVJBVElPTl9jbmRfc3ViX24nLCBgCisJZGVmaW5lKGBBRERTVUInLCAgICAgIHN1YnMpCisJZGVmaW5lKGBBRERTVUJDJywgICAgICBzYmNzKQorCWRlZmluZShgSU5JVENZJywgICAgICBgY21wCXIwLCAjMCcpCisJZGVmaW5lKGBSRVRWQUwnLCAgICAgIGBhZGMJcjAsIG4sICMwCisJCQkgICAgICByc2IJcjAsIHIwLCAjMScpCisJZGVmaW5lKGZ1bmMsCSAgICAgIG1wbl9jbmRfc3ViX24pJykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fY25kX2FkZF9uIG1wbl9jbmRfc3ViX24pCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShmdW5jKQorCXB1c2gJe3I0LXIxMX0KKwlsZHIJbiwgW3NwLCAjMzJdCisKKwljbXAJY25kLCAjMQorCXNiYwljbmQsIGNuZCwgY25kCQlDIGNvbmRpdGlvbmFsbHkgc2V0IHRvIDB4ZmZmZmZmZmYKKworCUlOSVRDWQkJCQlDIHJlYWxseSBvbmx5IG5lZWRlZCBmb3IgbiA9IDAgKG1vZCA0KQorCisJYW5kcwlyNCwgbiwgIzMKKwliZXEJTCh0b3ApCisJY21wCXI0LCAjMgorCWJjYwlMKGIxKQorCWJlcQlMKGIyKQorCitMKGIzKToJbGRtCXZwISwge3I0LHI1LHI2fQorCWxkbQl1cCEsIHtyOCxyOSxyMTB9CisJYmljCXI0LCByNCwgY25kCisJYmljCXI1LCByNSwgY25kCisJYmljCXI2LCByNiwgY25kCisJQUREU1VCCXI4LCByOCwgcjQKKwlBRERTVUJDCXI5LCByOSwgcjUKKwlBRERTVUJDCXIxMCwgcjEwLCByNgorCXN0bQlycCEsIHtyOCxyOSxyMTB9CisJc3ViCW4sIG4sICMzCisJdGVxCW4sICMwCisJYm5lCUwodG9wKQorCWIJTChlbmQpCisKK0woYjIpOglsZG0JdnAhLCB7cjQscjV9CisJbGRtCXVwISwge3I4LHI5fQorCWJpYwlyNCwgcjQsIGNuZAorCWJpYwlyNSwgcjUsIGNuZAorCUFERFNVQglyOCwgcjgsIHI0CisJQUREU1VCQwlyOSwgcjksIHI1CisJc3RtCXJwISwge3I4LHI5fQorCXN1YgluLCBuLCAjMgorCXRlcQluLCAjMAorCWJuZQlMKHRvcCkKKwliCUwoZW5kKQorCitMKGIxKToJbGRyCXI0LCBbdnBdLCAjNAorCWxkcglyOCwgW3VwXSwgIzQKKwliaWMJcjQsIHI0LCBjbmQKKwlBRERTVUIJcjgsIHI4LCByNAorCXN0cglyOCwgW3JwXSwgIzQKKwlzdWIJbiwgbiwgIzEKKwl0ZXEJbiwgIzAKKwliZXEJTChlbmQpCisKK0wodG9wKToJbGRtCXZwISwge3I0LHI1LHI2LHI3fQorCWxkbQl1cCEsIHtyOCxyOSxyMTAscjExfQorCWJpYwlyNCwgcjQsIGNuZAorCWJpYwlyNSwgcjUsIGNuZAorCWJpYwlyNiwgcjYsIGNuZAorCWJpYwlyNywgcjcsIGNuZAorCUFERFNVQkMJcjgsIHI4LCByNAorCUFERFNVQkMJcjksIHI5LCByNQorCUFERFNVQkMJcjEwLCByMTAsIHI2CisJQUREU1VCQwlyMTEsIHIxMSwgcjcKKwlzdWIJbiwgbiwgIzQKKwlzdG0JcnAhLCB7cjgscjkscjEwLHIxMX0KKwl0ZXEJbiwgIzAKKwlibmUJTCh0b3ApCisKK0woZW5kKToJUkVUVkFMCisJcG9wCXtyNC1yMTF9CisJcmV0dXJuCXIxNAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vY29tLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL2NvbS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUwYjEwYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL2NvbS5hc20KQEAgLTAsMCArMSw3NSBAQAorZG5sICBBUk0gbXBuX2NvbS4KKworZG5sICBDb3B5cmlnaHQgMjAwMywgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIKK0MgU3Ryb25nQVJNCSA/CitDIFhTY2FsZQkgPworQyBDb3J0ZXgtQTcJID8KK0MgQ29ydGV4LUE4CSA/CitDIENvcnRleC1BOQkgMi4wCitDIENvcnRleC1BMTUJIDEuNzUKKworZGVmaW5lKGBycCcsIGByMCcpCitkZWZpbmUoYHVwJywgYHIxJykKK2RlZmluZShgbicsICBgcjInKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2NvbSkKKwl0c3QJbiwgIzEKKwliZXEJTChza2lwMSkKKwlsZHIJcjMsIFt1cF0sICM0CisJbXZuCXIzLCByMworCXN0cglyMywgW3JwXSwgIzQKK0woc2tpcDEpOgorCXRzdAluLCAjMgorCWJlcQlMKHNraXAyKQorCWxkbWlhCXVwISwgeyByMywgcjEyIH0JCUMgbG9hZCAyIGxpbWJzCisJbXZuCXIzLCByMworCW12bglyMTIsIHIxMgorCXN0bWlhCXJwISwgeyByMywgcjEyIH0JCUMgc3RvcmUgMiBsaW1icworTChza2lwMik6CisJYmljcwluLCBuLCAjMworCWJlcQlMKHJ0bikKKwlzdG1mZAlzcCEsIHsgcjcsIHI4LCByOSB9CQlDIHNhdmUgcmVncyBvbiBzdGFjaworCitMKHRvcCk6CWxkbWlhCXVwISwgeyByMywgcjgsIHI5LCByMTIgfQlDIGxvYWQgNCBsaW1icworCXN1YnMJbiwgbiwgIzQKKwltdm4JcjMsIHIzCisJbXZuCXI4LCByOAorCW12bglyOSwgcjkKKwltdm4JcjEyLCByMTIKKwlzdG1pYQlycCEsIHsgcjMsIHI4LCByOSwgcjEyIH0JQyBzdG9yZSA0IGxpbWJzCisJYm5lCUwodG9wKQorCisJbGRtZmQJc3AhLCB7IHI3LCByOCwgcjkgfQkJQyByZXN0b3JlIHJlZ3MgZnJvbSBzdGFjaworTChydG4pOglyZXR1cm4JbHIKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL2NvcHlkLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL2NvcHlkLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2FkOThkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vY29weWQuYXNtCkBAIC0wLDAgKzEsODQgQEAKK2RubCAgQVJNIG1wbl9jb3B5ZC4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgUm9iZXJ0IEhhcmxleSBhbmQgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDAzLCAyMDEyLCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBTdHJvbmdBUk0JID8KK0MgWFNjYWxlCSA/CitDIENvcnRleC1BNwkgPworQyBDb3J0ZXgtQTgJID8KK0MgQ29ydGV4LUE5CSAxLjI1LTEuNQorQyBDb3J0ZXgtQTE1CSAxLjI1CisKK0MgVE9ETworQyAgKiBDb25zaWRlciB3aWRlciB1bnJvbGxpbmcuICBBbmFsb2dvdXMgOC13YXkgY29kZSBydW5zIDEwJSBmYXN0ZXIgb24gYm90aCBBOQorQyAgICBhbmQgQTE1LiAgQnV0IGl0IHByb2JhYmx5IHNsb3dzIHRoaW5ncyBkb3duIGZvciA4IDw9IG4gPCBhIGZldyBkb3plbi4KKworZGVmaW5lKGBycCcsIGByMCcpCitkZWZpbmUoYHVwJywgYHIxJykKK2RlZmluZShgbicsICBgcjInKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2NvcHlkKQorCW1vdglyMTIsIG4sIGxzbCAjMgorCXN1YglyMTIsIHIxMiwgIzQKKwlhZGQJcnAsIHJwLCByMTIKKwlhZGQJdXAsIHVwLCByMTIKKworCXRzdAluLCAjMQorCWJlcQlMKHNraXAxKQorCWxkcglyMywgW3VwXSwgIy00CisJc3RyCXIzLCBbcnBdLCAjLTQKK0woc2tpcDEpOgorCXRzdAluLCAjMgorCWJlcQlMKHNraXAyKQorCWxkbWRhCXVwISwgeyByMyxyMTIgfQorCXN0bWRhCXJwISwgeyByMyxyMTIgfQorTChza2lwMik6CisJYmljcwluLCBuLCAjMworCWJlcQlMKHJ0bikKKworCXB1c2gJeyByNC1yNSB9CisJc3VicwluLCBuLCAjNAorCWxkbWRhCXVwISwgeyByMyxyNCxyNSxyMTIgfQorCWJlcQlMKGVuZCkKKworTCh0b3ApOglzdWJzCW4sIG4sICM0CisJc3RtZGEJcnAhLCB7IHIzLHI0LHI1LHIxMiB9CisJbGRtZGEJdXAhLCB7IHIzLHI0LHI1LHIxMiB9CisJYm5lCUwodG9wKQorCitMKGVuZCk6CXN0bWRhCXJwLCB7IHIzLHI0LHI1LHIxMiB9CisJcG9wCXsgcjQtcjUgfQorTChydG4pOglyZXR1cm4JbHIKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL2NvcHlpLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL2NvcHlpLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjE5MzBmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vY29weWkuYXNtCkBAIC0wLDAgKzEsNzkgQEAKK2RubCAgQVJNIG1wbl9jb3B5aS4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgUm9iZXJ0IEhhcmxleSBhbmQgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDAzLCAyMDEyLCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBTdHJvbmdBUk0JID8KK0MgWFNjYWxlCSA/CitDIENvcnRleC1BNwkgPworQyBDb3J0ZXgtQTgJID8KK0MgQ29ydGV4LUE5CSAxLjI1LTEuNQorQyBDb3J0ZXgtQTE1CSAxLjI1CisKK0MgVE9ETworQyAgKiBDb25zaWRlciB3aWRlciB1bnJvbGxpbmcuICBBbmFsb2dvdXMgOC13YXkgY29kZSBydW5zIDEwJSBmYXN0ZXIgb24gYm90aCBBOQorQyAgICBhbmQgQTE1LiAgQnV0IGl0IHByb2JhYmx5IHNsb3dzIHRoaW5ncyBkb3duIGZvciA4IDw9IG4gPCBhIGZldyBkb3plbi4KKworZGVmaW5lKGBycCcsIGByMCcpCitkZWZpbmUoYHVwJywgYHIxJykKK2RlZmluZShgbicsICBgcjInKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2NvcHlpKQorCXRzdAluLCAjMQorCWJlcQlMKHNraXAxKQorCWxkcglyMywgW3VwXSwgIzQKKwlzdHIJcjMsIFtycF0sICM0CitMKHNraXAxKToKKwl0c3QJbiwgIzIKKwliZXEJTChza2lwMikKKwlsZG1pYQl1cCEsIHsgcjMscjEyIH0KKwlzdG1pYQlycCEsIHsgcjMscjEyIH0KK0woc2tpcDIpOgorCWJpY3MJbiwgbiwgIzMKKwliZXEJTChydG4pCisKKwlwdXNoCXsgcjQtcjUgfQorCXN1YnMJbiwgbiwgIzQKKwlsZG1pYQl1cCEsIHsgcjMscjQscjUscjEyIH0KKwliZXEJTChlbmQpCisKK0wodG9wKToJc3VicwluLCBuLCAjNAorCXN0bWlhCXJwISwgeyByMyxyNCxyNSxyMTIgfQorCWxkbWlhCXVwISwgeyByMyxyNCxyNSxyMTIgfQorCWJuZQlMKHRvcCkKKworTChlbmQpOglzdG0JcnAsIHsgcjMscjQscjUscjEyIH0KKwlwb3AJeyByNC1yNSB9CitMKHJ0bik6CXJldHVybglscgorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vZGl2ZV8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL2RpdmVfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJmZmIwYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL2RpdmVfMS5hc20KQEAgLTAsMCArMSwxNTEgQEAKK2RubCAgQVJNIHY0IG1wbl9kaXZleGFjdF8xLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3Jiam9ybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgICAgICAgY3ljbGVzL2xpbWIgICAgICAgY3ljbGVzL2xpbWIKK0MgICAgICAgICAgICAgICBub3JtICAgIHVub3JtICAgIG1vZGV4YWN0XzFjX29kZAorQyBTdHJvbmdBUk0JID8KK0MgWFNjYWxlCSA/CitDIENvcnRleC1BNwkgPworQyBDb3J0ZXgtQTgJID8KK0MgQ29ydGV4LUE5CTEwCTEyCitDIENvcnRleC1BMTUJIDkJIDkKKworQyBBcmNoaXRlY3R1cmUgcmVxdWlyZW1lbnRzOgorQyB2NQktCitDIHY1dAktCitDIHY1dGUJLQorQyB2NgktCitDIHY2dDIJLQorQyB2N2EJLQorCitkZWZpbmUoYHJwJywgYHIwJykKK2RlZmluZShgdXAnLCBgcjEnKQorZGVmaW5lKGBuJywgIGByMicpCitkZWZpbmUoYGQnLCAgYHIzJykKKworZGVmaW5lKGBjeScsIGByNycpCitkZWZpbmUoYGNudCcsIGByNicpCitkZWZpbmUoYHRuYycsIGByOCcpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fZGl2ZXhhY3RfMSkKKwl0c3QJZCwgIzEKKwlwdXNoCXtyNC1yOX0KKwltb3YJY250LCAjMAorCWJuZQlMKGludikKKworQyBjb3VudCB0cmFpbGluZyB6ZXJvcworCW1vdnMJcjQsIGQsIGxzbCAjMTYKKwltb3ZlcQlkLCBkLCBsc3IgIzE2CisJbW92ZXEJY250LCAjMTYKKwl0c3QJZCwgIzB4ZmYKKwltb3ZlcQlkLCBkLCBsc3IgIzgKKwlhZGRlcQljbnQsIGNudCwgIzgKKwlMRUEoCXI0LCBjdHpfdGFiKQorCWFuZAlyNSwgZCwgIzB4ZmYKKwlsZHJiCXI0LCBbcjQsIHI1XQorCW1vdglkLCBkLCBsc3IgcjQKKwlhZGQJY250LCBjbnQsIHI0CisKK0MgYmludmVydCBsaW1iCitMKGludik6CUxFQSgJcjQsIGJpbnZlcnRfbGltYl90YWJsZSkKKwlhbmQJcjEyLCBkLCAjMjU0CisJbGRyYglyNCwgW3I0LCByMTIsIGxzciAjMV0KKwltdWwJcjEyLCByNCwgcjQKKwltdWwJcjEyLCBkLCByMTIKKwlyc2IJcjEyLCByMTIsIHI0LCBsc2wgIzEKKwltdWwJcjQsIHIxMiwgcjEyCisJbXVsCXI0LCBkLCByNAorCXJzYglyNCwgcjQsIHIxMiwgbHNsICMxCUMgcjQgPSBpbnZlcnNlCisKKwl0c3QJY250LCBjbnQKKwlsZHIJcjUsIFt1cF0sICM0CQlDIHVwWzBdCisJbW92CWN5LCAjMAorCWJuZQlMKHVubm9ybSkKKworTChub3JtKToKKwlzdWJzCW4sIG4sICMxCQlDIHNldCBjYXJyeSBhcyBzaWRlLWVmZmVjdAorCWJlcQlMKGVkbikKKworCUFMSUdOKDE2KQorTCh0cG4pOglzYmNzCWN5LCByNSwgY3kKKwlsZHIJcjUsIFt1cF0sICM0CisJc3ViCW4sIG4sICMxCisJbXVsCXI5LCByNCwgY3kKKwl0c3QJbiwgbgorCXVtdWxsCXIxMiwgY3ksIGQsIHI5CisJc3RyCXI5LCBbcnBdLCAjNAorCWJuZQlMKHRwbikKKworTChlZG4pOglzYmMJY3ksIHI1LCBjeQorCW11bAlyOSwgcjQsIGN5CisJc3RyCXI5LCBbcnBdCisJcG9wCXtyNC1yOX0KKwlyZXR1cm4JcjE0CisKK0wodW5ub3JtKToKKwlyc2IJdG5jLCBjbnQsICMzMgorCW1vdglyNSwgcjUsIGxzciBjbnQKKwlzdWJzCW4sIG4sICMxCQlDIHNldCBjYXJyeSBhcyBzaWRlLWVmZmVjdAorCWJlcQlMKGVkdSkKKworCUFMSUdOKDE2KQorTCh0cHUpOglsZHIJcjEyLCBbdXBdLCAjNAorCW9ycglyOSwgcjUsIHIxMiwgbHNsIHRuYworCW1vdglyNSwgcjEyLCBsc3IgY250CisJc2JjcwljeSwgcjksIGN5CQlDIGNyaXRpY2FsIHBhdGggLT5jeS0+Y3ktPgorCXN1YgluLCBuLCAjMQorCW11bAlyOSwgcjQsIGN5CQlDIGNyaXRpY2FsIHBhdGggLT5jeS0+cjktPgorCXRzdAluLCBuCisJdW11bGwJcjEyLCBjeSwgZCwgcjkJCUMgY3JpdGljYWwgcGF0aCAtPnI5LT5jeS0+CisJc3RyCXI5LCBbcnBdLCAjNAorCWJuZQlMKHRwdSkKKworTChlZHUpOglzYmMJY3ksIHI1LCBjeQorCW11bAlyOSwgcjQsIGN5CisJc3RyCXI5LCBbcnBdCisJcG9wCXtyNC1yOX0KKwlyZXR1cm4JcjE0CitFUElMT0dVRSgpCisKKwlST0RBVEEKK2N0el90YWI6CisJLmJ5dGUJOCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCisJLmJ5dGUJNSwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCisJLmJ5dGUJNiwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCisJLmJ5dGUJNSwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCisJLmJ5dGUJNywwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCisJLmJ5dGUJNSwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCisJLmJ5dGUJNiwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCisJLmJ5dGUJNSwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS9nbXAtbXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdlZWMzYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDEyNyBAQAorLyogZ21wLW1wYXJhbS5oIC0tIENvbXBpbGVyL21hY2hpbmUgcGFyYW1ldGVyIGhlYWRlciBmaWxlLgorCitDb3B5cmlnaHQgMTk5MSwgMTk5MywgMTk5NCwgMTk5OS0yMDAzLCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2RlZmluZSBHTVBfTElNQl9CSVRTIDMyCisjZGVmaW5lIEdNUF9MSU1CX0JZVEVTIDQKKworLyogMTE5M01IeiBBUk0gKGdjYzU1LmZzZmZyYW5jZS5vcmcpICovCisKKyNkZWZpbmUgRElWUkVNXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgIDAgIC8qIHByZWludiBhbHdheXMgKi8KKyNkZWZpbmUgRElWUkVNXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PRF8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFOX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgNTYKKyNkZWZpbmUgTU9EXzFVX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgMTEKKyNkZWZpbmUgTU9EXzFfMV9UT19NT0RfMV8yX1RIUkVTSE9MRCAgICAgICAgIDAgIC8qIG5ldmVyIG1wbl9tb2RfMV8xcCAqLworI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICBNUF9TSVpFX1RfTUFYCisjZGVmaW5lIFBSRUlOVl9NT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgIDcxCisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAgICAxICAvKiBwcmVpbnYgYWx3YXlzICovCisjZGVmaW5lIERJVlJFTV8yX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAwICAvKiBwcmVpbnYgYWx3YXlzICovCisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgICAgICAgNDEKKworI2RlZmluZSBNVUxfVE9PTTIyX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzNgorI2RlZmluZSBNVUxfVE9PTTMzX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDEyNQorI2RlZmluZSBNVUxfVE9PTTQ0X1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE5MworI2RlZmluZSBNVUxfVE9PTTZIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDMwMworI2RlZmluZSBNVUxfVE9PTThIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDQxOAorCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTQzX1RIUkVTSE9MRCAgICAgMTI1CisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgMTc2CisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgMTE0CisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTYzX1RIUkVTSE9MRCAgICAgMTI5CisKKyNkZWZpbmUgU1FSX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNzgKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMzcKKyNkZWZpbmUgU1FSX1RPT000X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyMTIKKyNkZWZpbmUgU1FSX1RPT002X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzMDYKKyNkZWZpbmUgU1FSX1RPT004X1RIUkVTSE9MRCAgICAgICAgICAgICAgICA0MjIKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAyMAorI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAyNgorCisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgNDM2ICAvKiBrID0gNSAqLworI2RlZmluZSBNVUxfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgNDM2LCA1fSwgeyAgICAgMjcsIDZ9LCB7ICAgICAyOCwgN30sIHsgICAgIDE1LCA2fSwgXAorICAgIHsgICAgIDMyLCA3fSwgeyAgICAgMTcsIDZ9LCB7ICAgICAzNSwgN30sIHsgICAgIDE5LCA2fSwgXAorICAgIHsgICAgIDM5LCA3fSwgeyAgICAgMjksIDh9LCB7ICAgICAxNSwgN30sIHsgICAgIDM1LCA4fSwgXAorICAgIHsgICAgIDE5LCA3fSwgeyAgICAgNDEsIDh9LCB7ICAgICAyMywgN30sIHsgICAgIDQ5LCA4fSwgXAorICAgIHsgICAgIDI3LCA5fSwgeyAgICAgMTUsIDh9LCB7ICAgICAzMSwgN30sIHsgICAgIDYzLCA4fSwgXAorICAgIHsgICAgMjU2LCA5fSwgeyAgICA1MTIsMTB9LCB7ICAgMTAyNCwxMX0sIHsgICAyMDQ4LDEyfSwgXAorICAgIHsgICA0MDk2LDEzfSwgeyAgIDgxOTIsMTR9LCB7ICAxNjM4NCwxNX0sIHsgIDMyNzY4LDE2fSB9CisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzX1NJWkUgMjgKKyNkZWZpbmUgTVVMX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDU3NjAKKworI2RlZmluZSBTUVJfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDQwNCAgLyogayA9IDUgKi8KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDQwNCwgNX0sIHsgICAgIDEzLCA0fSwgeyAgICAgMjcsIDV9LCB7ICAgICAyNywgNn0sIFwKKyAgICB7ICAgICAyOCwgN30sIHsgICAgIDE1LCA2fSwgeyAgICAgMzIsIDd9LCB7ICAgICAxNywgNn0sIFwKKyAgICB7ICAgICAzNSwgN30sIHsgICAgIDI5LCA4fSwgeyAgICAgMTUsIDd9LCB7ICAgICAzNSwgOH0sIFwKKyAgICB7ICAgICAxOSwgN30sIHsgICAgIDQxLCA4fSwgeyAgICAgMjMsIDd9LCB7ICAgICA0NywgOH0sIFwKKyAgICB7ICAgICAyNywgOX0sIHsgICAgIDE1LCA4fSwgeyAgICAgMzksIDl9LCB7ICAgIDUxMiwxMH0sIFwKKyAgICB7ICAgMTAyNCwxMX0sIHsgICAyMDQ4LDEyfSwgeyAgIDQwOTYsMTN9LCB7ICAgODE5MiwxNH0sIFwKKyAgICB7ICAxNjM4NCwxNX0sIHsgIDMyNzY4LDE2fSB9CisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzX1NJWkUgMjYKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDM3NzYKKworI2RlZmluZSBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTM3CisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgIDExNDc5CisKKyNkZWZpbmUgRENfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNTAKKyNkZWZpbmUgRENfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICA0OTQKKyNkZWZpbmUgRENfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAxNDgKKyNkZWZpbmUgRENfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzNDUKKworI2RlZmluZSBJTlZfTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICA3MAorI2RlZmluZSBJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDQ3NAorI2RlZmluZSBJTlZfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDQ3OAorCisjZGVmaW5lIEJJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgNTQyCisjZGVmaW5lIFJFRENfMV9UT19SRURDX05fVEhSRVNIT0xEICAgICAgICAgMTE3CisKKyNkZWZpbmUgTVVfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDIwODkKKyNkZWZpbmUgTVVfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgIDIxNzIKKyNkZWZpbmUgTVVQSV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAyMjUKKyNkZWZpbmUgTVVfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgIDE1MjgKKyNkZWZpbmUgTVVfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDIwODkKKworI2RlZmluZSBNQVRSSVgyMl9TVFJBU1NFTl9USFJFU0hPTEQgICAgICAgICAxNgorI2RlZmluZSBIR0NEX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgIDE5NworI2RlZmluZSBHQ0RfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDkwMgorI2RlZmluZSBHQ0RFWFRfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDY1MAorI2RlZmluZSBKQUNPQklfQkFTRV9NRVRIT0QgICAgICAgICAgICAgICAgICAgMgorCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgIDM5CisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAxMDQ1CisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAyMTQ3CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS9pbnZlcnRfbGltYi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS9pbnZlcnRfbGltYi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY3NTAyZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL2ludmVydF9saW1iLmFzbQpAQCAtMCwwICsxLDkzIEBACitkbmwgIEFSTSBtcG5faW52ZXJ0X2xpbWIgLS0gSW52ZXJ0IGEgbm9ybWFsaXplZCBsaW1iLgorCitkbmwgIENvcHlyaWdodCAyMDAxLCAyMDA5LCAyMDExLCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5faW52ZXJ0X2xpbWIpCisJTEVBKAlyMiwgYXBwcm94X3RhYi01MTIpCisJbW92CXIzLCByMCwgbHNyICMyMworCW1vdglyMywgcjMsIGFzbCAjMQorCWxkcmgJcjMsIFtyMywgcjJdCisJbW92CXIxLCByMywgYXNsICMxNworCW11bAlyMTIsIHIzLCByMworCXVtdWxsCXIzLCByMiwgcjEyLCByMAorCXN1YglyMSwgcjEsIHIyLCBhc2wgIzEKKwl1bXVsbAlyMywgcjIsIHIxLCByMQorCXVtdWxsCXIxMiwgcjMsIHIwLCByMworCXVtdWxsCXIyLCByMTIsIHIwLCByMgorCWFkZHMJcjIsIHIyLCByMworCWFkYwlyMTIsIHIxMiwgIzAKKwlyc2IJcjEsIHIxMiwgcjEKKwltdm4JcjIsIHIyLCBsc3IgIzMwCisJYWRkCXIyLCByMiwgcjEsIGFzbCAjMgorCXVtdWxsCXIxMiwgcjMsIHIwLCByMgorCWFkZHMJcjEsIHIxMiwgcjAKKwlhZGMJcjMsIHIzLCByMAorCXJzYglyMCwgcjMsIHIyCisJcmV0dXJuCWxyCitFUElMT0dVRSgpCisKKwlST0RBVEEKKwlBTElHTigyKQorYXBwcm94X3RhYjoKKwkuc2hvcnQgICAgMHhmZmMwLDB4ZmVjMCwweGZkYzAsMHhmY2MwLDB4ZmJjMCwweGZhYzAsMHhmYTAwLDB4ZjkwMAorCS5zaG9ydCAgICAweGY4MDAsMHhmNzAwLDB4ZjY0MCwweGY1NDAsMHhmNDQwLDB4ZjM4MCwweGYyODAsMHhmMTgwCisJLnNob3J0ICAgIDB4ZjBjMCwweGVmYzAsMHhlZjAwLDB4ZWUwMCwweGVkNDAsMHhlYzQwLDB4ZWI4MCwweGVhYzAKKwkuc2hvcnQgICAgMHhlOWMwLDB4ZTkwMCwweGU4NDAsMHhlNzQwLDB4ZTY4MCwweGU1YzAsMHhlNTAwLDB4ZTQwMAorCS5zaG9ydCAgICAweGUzNDAsMHhlMjgwLDB4ZTFjMCwweGUxMDAsMHhlMDQwLDB4ZGY4MCwweGRlYzAsMHhkZTAwCisJLnNob3J0ICAgIDB4ZGQ0MCwweGRjODAsMHhkYmMwLDB4ZGIwMCwweGRhNDAsMHhkOTgwLDB4ZDhjMCwweGQ4MDAKKwkuc2hvcnQgICAgMHhkNzQwLDB4ZDY4MCwweGQ2MDAsMHhkNTQwLDB4ZDQ4MCwweGQzYzAsMHhkMzQwLDB4ZDI4MAorCS5zaG9ydCAgICAweGQxYzAsMHhkMTQwLDB4ZDA4MCwweGNmYzAsMHhjZjQwLDB4Y2U4MCwweGNkYzAsMHhjZDQwCisJLnNob3J0ICAgIDB4Y2M4MCwweGNjMDAsMHhjYjQwLDB4Y2FjMCwweGNhMDAsMHhjOTgwLDB4YzhjMCwweGM4NDAKKwkuc2hvcnQgICAgMHhjNzgwLDB4YzcwMCwweGM2NDAsMHhjNWMwLDB4YzU0MCwweGM0ODAsMHhjNDAwLDB4YzM4MAorCS5zaG9ydCAgICAweGMyYzAsMHhjMjQwLDB4YzFjMCwweGMxMDAsMHhjMDgwLDB4YzAwMCwweGJmODAsMHhiZWMwCisJLnNob3J0ICAgIDB4YmU0MCwweGJkYzAsMHhiZDQwLDB4YmM4MCwweGJjMDAsMHhiYjgwLDB4YmIwMCwweGJhODAKKwkuc2hvcnQgICAgMHhiYTAwLDB4Yjk4MCwweGI5MDAsMHhiODQwLDB4YjdjMCwweGI3NDAsMHhiNmMwLDB4YjY0MAorCS5zaG9ydCAgICAweGI1YzAsMHhiNTQwLDB4YjRjMCwweGI0NDAsMHhiM2MwLDB4YjM0MCwweGIyYzAsMHhiMjQwCisJLnNob3J0ICAgIDB4YjFjMCwweGIxNDAsMHhiMGMwLDB4YjA4MCwweGIwMDAsMHhhZjgwLDB4YWYwMCwweGFlODAKKwkuc2hvcnQgICAgMHhhZTAwLDB4YWQ4MCwweGFkNDAsMHhhY2MwLDB4YWM0MCwweGFiYzAsMHhhYjQwLDB4YWFjMAorCS5zaG9ydCAgICAweGFhODAsMHhhYTAwLDB4YTk4MCwweGE5MDAsMHhhOGMwLDB4YTg0MCwweGE3YzAsMHhhNzQwCisJLnNob3J0ICAgIDB4YTcwMCwweGE2ODAsMHhhNjAwLDB4YTVjMCwweGE1NDAsMHhhNGMwLDB4YTQ4MCwweGE0MDAKKwkuc2hvcnQgICAgMHhhMzgwLDB4YTM0MCwweGEyYzAsMHhhMjQwLDB4YTIwMCwweGExODAsMHhhMTQwLDB4YTBjMAorCS5zaG9ydCAgICAweGEwODAsMHhhMDAwLDB4OWY4MCwweDlmNDAsMHg5ZWMwLDB4OWU4MCwweDllMDAsMHg5ZGMwCisJLnNob3J0ICAgIDB4OWQ0MCwweDlkMDAsMHg5YzgwLDB4OWM0MCwweDliYzAsMHg5YjgwLDB4OWIwMCwweDlhYzAKKwkuc2hvcnQgICAgMHg5YTQwLDB4OWEwMCwweDk5ODAsMHg5OTQwLDB4OThjMCwweDk4ODAsMHg5ODQwLDB4OTdjMAorCS5zaG9ydCAgICAweDk3ODAsMHg5NzAwLDB4OTZjMCwweDk2ODAsMHg5NjAwLDB4OTVjMCwweDk1ODAsMHg5NTAwCisJLnNob3J0ICAgIDB4OTRjMCwweDk0NDAsMHg5NDAwLDB4OTNjMCwweDkzNDAsMHg5MzAwLDB4OTJjMCwweDkyNDAKKwkuc2hvcnQgICAgMHg5MjAwLDB4OTFjMCwweDkxODAsMHg5MTAwLDB4OTBjMCwweDkwODAsMHg5MDAwLDB4OGZjMAorCS5zaG9ydCAgICAweDhmODAsMHg4ZjQwLDB4OGVjMCwweDhlODAsMHg4ZTQwLDB4OGUwMCwweDhkODAsMHg4ZDQwCisJLnNob3J0ICAgIDB4OGQwMCwweDhjYzAsMHg4YzgwLDB4OGMwMCwweDhiYzAsMHg4YjgwLDB4OGI0MCwweDhiMDAKKwkuc2hvcnQgICAgMHg4YTgwLDB4OGE0MCwweDhhMDAsMHg4OWMwLDB4ODk4MCwweDg5NDAsMHg4OGMwLDB4ODg4MAorCS5zaG9ydCAgICAweDg4NDAsMHg4ODAwLDB4ODdjMCwweDg3ODAsMHg4NzQwLDB4ODcwMCwweDg2ODAsMHg4NjQwCisJLnNob3J0ICAgIDB4ODYwMCwweDg1YzAsMHg4NTgwLDB4ODU0MCwweDg1MDAsMHg4NGMwLDB4ODQ4MCwweDg0NDAKKwkuc2hvcnQgICAgMHg4NDAwLDB4ODM4MCwweDgzNDAsMHg4MzAwLDB4ODJjMCwweDgyODAsMHg4MjQwLDB4ODIwMAorCS5zaG9ydCAgICAweDgxYzAsMHg4MTgwLDB4ODE0MCwweDgxMDAsMHg4MGMwLDB4ODA4MCwweDgwNDAsMHg4MDAwCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL2xvZ29wc19uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL2xvZ29wc19uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTA0MTY1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vbG9nb3BzX24uYXNtCkBAIC0wLDAgKzEsMTM5IEBACitkbmwgIEFSTSBtcG5fYW5kX24sIG1wbl9hbmRuX24uIG1wbl9uYW5kX24sIGV0Yy4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAxOTk3LCAyMDAwLCAyMDAxLCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICAgICBjeWNsZXMvbGltYiAgICAgICAgICAgICBjeWNsZXMvbGltYgorQyAgICAgICAgICBhbmQgYW5kbiBpb3IgeG9yICAgICAgICAgbmFuZCBpb3JuIG5pb3IgeG5vcgorQyBTdHJvbmdBUk0JID8JCQkgPworQyBYU2NhbGUJID8JCQkgPworQyBDb3J0ZXgtQTcJID8JCQkgPworQyBDb3J0ZXgtQTgJID8JCQkgPworQyBDb3J0ZXgtQTkJMi41LTIuNzIJCTIuNzUtMworQyBDb3J0ZXgtQTE1CTIuMjUJCQkyLjc1CisKK0MgVE9ETworQyAgKiBJdCBzZWVtcyB0aGF0IDIuMjUgYy9sIGFuZCAyLjc1IGMvbCBpcyBwb3NzaWJsZSBmb3IgQTkuCitDICAqIERlYnVnIHBvcHBpbmcgaXNzdWUsIHNlZSBjb21tZW50IGJlbG93LgorCitkZWZpbmUoYHJwJywgYHIwJykKK2RlZmluZShgdXAnLCBgcjEnKQorZGVmaW5lKGB2cCcsIGByMicpCitkZWZpbmUoYG4nLCAgYHIzJykKKworZGVmaW5lKGBQT1NUT1AnKQorCitpZmRlZihgT1BFUkFUSU9OX2FuZF9uJyxgCisgIGRlZmluZShgZnVuYycsICAgIGBtcG5fYW5kX24nKQorICBkZWZpbmUoYExPR09QJywgICBgYW5kCSQxLCAkMiwgJDMnKScpCitpZmRlZihgT1BFUkFUSU9OX2FuZG5fbicsYAorICBkZWZpbmUoYGZ1bmMnLCAgICBgbXBuX2FuZG5fbicpCisgIGRlZmluZShgTE9HT1AnLCAgIGBiaWMJJDEsICQyLCAkMycpJykKK2lmZGVmKGBPUEVSQVRJT05fbmFuZF9uJyxgCisgIGRlZmluZShgZnVuYycsICAgIGBtcG5fbmFuZF9uJykKKyAgZGVmaW5lKGBQT1NUT1AnLCAgYG12bgkkMSwgJDEnKQorICBkZWZpbmUoYExPR09QJywgICBgYW5kCSQxLCAkMiwgJDMnKScpCitpZmRlZihgT1BFUkFUSU9OX2lvcl9uJyxgCisgIGRlZmluZShgZnVuYycsICAgIGBtcG5faW9yX24nKQorICBkZWZpbmUoYExPR09QJywgICBgb3JyCSQxLCAkMiwgJDMnKScpCitpZmRlZihgT1BFUkFUSU9OX2lvcm5fbicsYAorICBkZWZpbmUoYGZ1bmMnLCAgICBgbXBuX2lvcm5fbicpCisgIGRlZmluZShgUE9TVE9QJywgIGBtdm4JJDEsICQxJykKKyAgZGVmaW5lKGBMT0dPUCcsICAgYGJpYwkkMSwgJDMsICQyJyknKQoraWZkZWYoYE9QRVJBVElPTl9uaW9yX24nLGAKKyAgZGVmaW5lKGBmdW5jJywgICAgYG1wbl9uaW9yX24nKQorICBkZWZpbmUoYFBPU1RPUCcsICBgbXZuCSQxLCAkMScpCisgIGRlZmluZShgTE9HT1AnLCAgIGBvcnIJJDEsICQyLCAkMycpJykKK2lmZGVmKGBPUEVSQVRJT05feG9yX24nLGAKKyAgZGVmaW5lKGBmdW5jJywgICAgYG1wbl94b3JfbicpCisgIGRlZmluZShgTE9HT1AnLCAgIGBlb3IJJDEsICQyLCAkMycpJykKK2lmZGVmKGBPUEVSQVRJT05feG5vcl9uJyxgCisgIGRlZmluZShgZnVuYycsICAgIGBtcG5feG5vcl9uJykKKyAgZGVmaW5lKGBQT1NUT1AnLCAgYG12bgkkMSwgJDEnKQorICBkZWZpbmUoYExPR09QJywgICBgZW9yCSQxLCAkMiwgJDMnKScpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FuZF9uIG1wbl9hbmRuX24gbXBuX25hbmRfbiBtcG5faW9yX24gbXBuX2lvcm5fbiBtcG5fbmlvcl9uIG1wbl94b3JfbiBtcG5feG5vcl9uKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUoZnVuYykKKwlwdXNoCXsgcjgsIHI5LCByMTAgfQorCXRzdAluLCAjMQorCWJlcQlMKHNraXAxKQorCWxkcglyMTAsIFt2cF0sICM0CisJbGRyCXIxMiwgW3VwXSwgIzQKKwlMT0dPUCgJcjEyLCByMTIsIHIxMCkKKwlQT1NUT1AoCXIxMikKKwlzdHIJcjEyLCBbcnBdLCAjNAorTChza2lwMSk6CisJdHN0CW4sICMyCisJYmVxCUwoc2tpcDIpCisJbGRtaWEJdnAhLCB7IHIxMCwgcjEyIH0KKwlsZG1pYQl1cCEsIHsgcjgsIHI5IH0KKwlMT0dPUCgJcjgsIHI4LCByMTApCisJTE9HT1AoCXI5LCByOSwgcjEyKQorCVBPU1RPUCgJcjgpCisJUE9TVE9QKAlyOSkKKwlzdG1pYQlycCEsIHsgcjgsIHI5IH0KK0woc2tpcDIpOgorCWJpY3MJbiwgbiwgIzMKKwliZXEJTChydG4pCisJcHVzaAl7IHI0LCByNSwgcjYsIHI3IH0KKworCWxkbWlhCXZwISwgeyByOCwgcjksIHIxMCwgcjEyIH0KKwliCUwobWlkKQorCitMKHRvcCk6CWxkbWlhCXZwISwgeyByOCwgcjksIHIxMCwgcjEyIH0KKwlQT1NUT1AoCXI0KQorCVBPU1RPUCgJcjUpCisJUE9TVE9QKAlyNikKKwlQT1NUT1AoCXI3KQorCXN0bWlhCXJwISwgeyByNCwgcjUsIHI2LCByNyB9CitMKG1pZCk6CXN1YgluLCBuLCAjNAorCWxkbWlhCXVwISwgeyByNCwgcjUsIHI2LCByNyB9CisJdGVxCW4sICMwCisJTE9HT1AoCXI0LCByNCwgcjgpCisJTE9HT1AoCXI1LCByNSwgcjkpCisJTE9HT1AoCXI2LCByNiwgcjEwKQorCUxPR09QKAlyNywgcjcsIHIxMikKKwlibmUJTCh0b3ApCisKKwlQT1NUT1AoCXI0KQorCVBPU1RPUCgJcjUpCisJUE9TVE9QKAlyNikKKwlQT1NUT1AoCXI3KQorCXN0bWlhCXJwISwgeyByNCwgcjUsIHI2LCByNyB9CisKKwlwb3AJeyByNCwgcjUsIHI2LCByNyB9CUMgcG9wcGluZyByOC1yMTAgaGVyZSBzdHJhbmdlbHkgZmFpbHMKKworTChydG4pOglwb3AJeyByOCwgcjksIHIxMCB9CisJcmV0dXJuCXIxNAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vbHNoaWZ0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL2xzaGlmdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ1Y2UwYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL2xzaGlmdC5hc20KQEAgLTAsMCArMSw4OCBAQAorZG5sICBBUk0gbXBuX2xzaGlmdC4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBTdHJvbmdBUk0JID8KK0MgWFNjYWxlCSA/CitDIENvcnRleC1BNwkgPworQyBDb3J0ZXgtQTgJID8KK0MgQ29ydGV4LUE5CSAzLjUKK0MgQ29ydGV4LUExNQkgPworCitkZWZpbmUoYHJwJywgIGByMCcpCitkZWZpbmUoYHVwJywgIGByMScpCitkZWZpbmUoYG4nLCAgIGByMicpCitkZWZpbmUoYGNudCcsIGByMycpCitkZWZpbmUoYHRuYycsIGByMTInKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2xzaGlmdCkKKwlhZGQJdXAsIHVwLCBuLCBsc2wgIzIKKwlwdXNoCXtyNCwgcjYsIHI3LCByOH0KKwlsZHIJcjQsIFt1cCwgIy00XSEKKwlhZGQJcnAsIHJwLCBuLCBsc2wgIzIKKwlyc2IJdG5jLCBjbnQsICMzMgorCisJbW92CXI3LCByNCwgbHNsIGNudAorCXRzdAluLCAjMQorCWJlcQlMKGV2bikJCQlDIG4gZXZlbgorCitMKG9kZCk6CXN1YnMJbiwgbiwgIzIKKwliY2MJTCgxKQkJCUMgbiA9IDEKKwlsZHIJcjgsIFt1cCwgIy00XSEKKwliCUwobWlkKQorCitMKGV2bik6CWxkcglyNiwgW3VwLCAjLTRdIQorCXN1YnMJbiwgbiwgIzIKKwliZXEJTChlbmQpCisKK0wodG9wKToJbGRyCXI4LCBbdXAsICMtNF0hCisJb3JyCXI3LCByNywgcjYsIGxzciB0bmMKKwlzdHIJcjcsIFtycCwgIy00XSEKKwltb3YJcjcsIHI2LCBsc2wgY250CitMKG1pZCk6CWxkcglyNiwgW3VwLCAjLTRdIQorCW9ycglyNywgcjcsIHI4LCBsc3IgdG5jCisJc3RyCXI3LCBbcnAsICMtNF0hCisJbW92CXI3LCByOCwgbHNsIGNudAorCXN1YnMJbiwgbiwgIzIKKwliZ3QJTCh0b3ApCisKK0woZW5kKToJb3JyCXI3LCByNywgcjYsIGxzciB0bmMKKwlzdHIJcjcsIFtycCwgIy00XSEKKwltb3YJcjcsIHI2LCBsc2wgY250CitMKDEpOglzdHIJcjcsIFtycCwgIy00XQorCW1vdglyMCwgcjQsIGxzciB0bmMKKwlwb3AJe3I0LCByNiwgcjcsIHI4fQorCXJldHVybglyMTQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL2xzaGlmdGMuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vbHNoaWZ0Yy5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTViNTJkZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL2xzaGlmdGMuYXNtCkBAIC0wLDAgKzEsOTUgQEAKK2RubCAgQVJNIG1wbl9sc2hpZnRjLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIFN0cm9uZ0FSTQkgPworQyBYU2NhbGUJID8KK0MgQ29ydGV4LUE3CSA/CitDIENvcnRleC1BOAkgPworQyBDb3J0ZXgtQTkJIDQuMAorQyBDb3J0ZXgtQTE1CSA/CisKK2RlZmluZShgcnAnLCAgYHIwJykKK2RlZmluZShgdXAnLCAgYHIxJykKK2RlZmluZShgbicsICAgYHIyJykKK2RlZmluZShgY250JywgYHIzJykKK2RlZmluZShgdG5jJywgYHIxMicpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fbHNoaWZ0YykKKwlhZGQJdXAsIHVwLCBuLCBsc2wgIzIKKwlwdXNoCXtyNCwgcjYsIHI3LCByOH0KKwlsZHIJcjQsIFt1cCwgIy00XSEKKwlhZGQJcnAsIHJwLCBuLCBsc2wgIzIKKwlyc2IJdG5jLCBjbnQsICMzMgorCW12bglyNiwgcjQKKworCW1vdglyNywgcjYsIGxzbCBjbnQKKwl0c3QJbiwgIzEKKwliZXEJTChldm4pCQkJQyBuIGV2ZW4KKworTChvZGQpOglzdWJzCW4sIG4sICMyCisJYmNjCUwoMSkJCQlDIG4gPSAxCisJbGRyCXI4LCBbdXAsICMtNF0hCisJbXZuCXI4LCByOAorCWIJTChtaWQpCisKK0woZXZuKToJbGRyCXI2LCBbdXAsICMtNF0hCisJbXZuCXI2LCByNgorCXN1YnMJbiwgbiwgIzIKKwliZXEJTChlbmQpCisKK0wodG9wKToJbGRyCXI4LCBbdXAsICMtNF0hCisJb3JyCXI3LCByNywgcjYsIGxzciB0bmMKKwlzdHIJcjcsIFtycCwgIy00XSEKKwltdm4JcjgsIHI4CisJbW92CXI3LCByNiwgbHNsIGNudAorTChtaWQpOglsZHIJcjYsIFt1cCwgIy00XSEKKwlvcnIJcjcsIHI3LCByOCwgbHNyIHRuYworCXN0cglyNywgW3JwLCAjLTRdIQorCW12bglyNiwgcjYKKwltb3YJcjcsIHI4LCBsc2wgY250CisJc3VicwluLCBuLCAjMgorCWJndAlMKHRvcCkKKworTChlbmQpOglvcnIJcjcsIHI3LCByNiwgbHNyIHRuYworCXN0cglyNywgW3JwLCAjLTRdIQorCW1vdglyNywgcjYsIGxzbCBjbnQKK0woMSk6CW12bglyNiwgIzAKKwlvcnIJcjcsIHI3LCByNiwgbHNyIHRuYworCXN0cglyNywgW3JwLCAjLTRdCisJbW92CXIwLCByNCwgbHNyIHRuYworCXBvcAl7cjQsIHI2LCByNywgcjh9CisJcmV0dXJuCXIxNAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vbW9kXzM0bHN1YjEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vbW9kXzM0bHN1YjEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NmNkM2MKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS9tb2RfMzRsc3ViMS5hc20KQEAgLTAsMCArMSwxMjQgQEAKK2RubCAgQVJNIG1wbl9tb2RfMzRsc3ViMSAtLSByZW1haW5kZXIgbW9kdWxvIDJeMjQtMS4KKworZG5sICBDb3B5cmlnaHQgMjAxMiwgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIKK0MgU3Ryb25nQVJNCSA/CitDIFhTY2FsZQkgPworQyBDb3J0ZXgtQTUJIDIuNjcKK0MgQ29ydGV4LUE3CSAyLjM1CitDIENvcnRleC1BOAkgMi4wCitDIENvcnRleC1BOQkgMS4zMworQyBDb3J0ZXgtQTE1CSAxLjMzCitDIENvcnRleC1BMTcJIDMuMzQKK0MgQ29ydGV4LUE1MwkgMi4wCisKK2RlZmluZShgYXAnLAlyMCkKK2RlZmluZShgbicsCXIxKQorCitDIG1wX2xpbWJfdCBtcG5fbW9kXzM0bHN1YjEgKG1wX3NyY3B0ciB1cCwgbXBfc2l6ZV90IG4pCisKK0MgVE9ETworQyAgKiBXcml0ZSBjbGV2ZXJlciBzdW1tYXRpb24gY29kZS4KK0MgICogQ29uc2lkZXIgbG9hZGluZyA2IDY0LWJpdCBhbGlnbmVkIHJlZ2lzdGVycyBhdCBhIHRpbWUsIHRvIGFwcHJvYWNoIDEgYy9sLgorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigzMikKK1BST0xPR1VFKG1wbl9tb2RfMzRsc3ViMSkKKwlwdXNoCXsgcjQsIHI1LCByNiwgcjcgfQorCisJc3VicwluLCBuLCAjMworCW1vdglyNywgIzAKKwlibHQJTChsZTIpCQkJQyBuIDw9IDIKKworCWxkbWlhCWFwISwgeyByMiwgcjMsIHIxMiB9CisJc3VicwluLCBuLCAjMworCWJsdAlMKHN1bSkJCQlDIG4gPD0gNQorCWNtbglyMCwgIzAJCQlDIGNsZWFyIGNhcnJ5CisJc3ViCW4sIG4sICMzCisJYglMKG1pZCkKKworTCh0b3ApOglhZGNzCXIyLCByMiwgcjQKKwlhZGNzCXIzLCByMywgcjUKKwlhZGNzCXIxMiwgcjEyLCByNgorTChtaWQpOglsZG1pYQlhcCEsIHsgcjQsIHI1LCByNiB9CisJdHN0CW4sIG4KKwlzdWIJbiwgbiwgIzMKKwlicGwJTCh0b3ApCisKKwlhZGQJbiwgbiwgIzMKKworCWFkY3MJcjIsIHIyLCByNAorCWFkY3MJcjMsIHIzLCByNQorCWFkY3MJcjEyLCByMTIsIHI2CisJbW92Y3MJcjcsICMxCQkJQyByNyA8PSAxCisKK0woc3VtKToJY21uCW4sICMyCisJbW92bG8JcjQsICMwCisJbGRyaHMJcjQsIFthcF0sICM0CisJbW92bHMJcjUsICMwCisJbGRyaGkJcjUsIFthcF0sICM0CisKKwlhZGRzCXIyLCByMiwgcjQKKwlhZGNzCXIzLCByMywgcjUKKwlhZGNzCXIxMiwgcjEyLCAjMAorCWFkYwlyNywgcjcsICMwCQlDIHI3IDw9IDIKKworTChzdW0yKToKKwliaWMJcjAsIHIyLCAjMHhmZjAwMDAwMAorCWFkZAlyMCwgcjAsIHIyLCBsc3IgIzI0CisJYWRkCXIwLCByMCwgcjcKKworCW1vdglyNywgcjMsIGxzbCAjOAorCWJpYwlyMSwgcjcsICMweGZmMDAwMDAwCisJYWRkCXIwLCByMCwgcjEKKwlhZGQJcjAsIHIwLCByMywgbHNyICMxNgorCisJbW92CXI3LCByMTIsIGxzbCAjMTYKKwliaWMJcjEsIHI3LCAjMHhmZjAwMDAwMAorCWFkZAlyMCwgcjAsIHIxCisJYWRkCXIwLCByMCwgcjEyLCBsc3IgIzgKKworCXBvcAl7IHI0LCByNSwgcjYsIHI3IH0KKwlyZXR1cm4JbHIKKworTChsZTIpOgljbW4JbiwgIzEKKwlibmUJTCgxKQorCWxkbWlhCWFwISwgeyByMiwgcjMgfQorCW1vdglyMTIsICMwCisJYglMKHN1bTIpCitMKDEpOglsZHIJcjIsIFthcF0KKwliaWMJcjAsIHIyLCAjMHhmZjAwMDAwMAorCWFkZAlyMCwgcjAsIHIyLCBsc3IgIzI0CisJcG9wCXsgcjQsIHI1LCByNiwgcjcgfQorCXJldHVybglscgorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vbW9kZTFvLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL21vZGUxby5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNhN2YzNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL21vZGUxby5hc20KQEAgLTAsMCArMSw5MiBAQAorZG5sICBBUk0gbXBuX21vZGV4YWN0XzFjX29kZAorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIFN0cm9uZ0FSTQkgPworQyBYU2NhbGUJID8KK0MgQ29ydGV4LUE3CSA/CitDIENvcnRleC1BOAkgPworQyBDb3J0ZXgtQTkJMTAKK0MgQ29ydGV4LUExNQkgOQorCitDIEFyY2hpdGVjdHVyZSByZXF1aXJlbWVudHM6CitDIHY1CS0KK0MgdjV0CS0KK0MgdjV0ZQktCitDIHY2CS0KK0MgdjZ0MgktCitDIHY3YQktCisKK2RlZmluZShgdXAnLCBgcjAnKQorZGVmaW5lKGBuJywgIGByMScpCitkZWZpbmUoYGQnLCAgYHIyJykKK2RlZmluZShgY3knLCBgcjMnKQorCisJLnByb3RlY3RlZAliaW52ZXJ0X2xpbWJfdGFibGUKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fbW9kZXhhY3RfMWNfb2RkKQorCXN0bWZkCXNwISwge3I0LCByNX0KKworCUxFQSgJcjQsIGJpbnZlcnRfbGltYl90YWJsZSkKKworCWxkcglyNSwgW3VwXSwgIzQJCUMgdXBbMF0KKworCWFuZAlyMTIsIGQsICMyNTQKKwlsZHJiCXI0LCBbcjQsIHIxMiwgbHNyICMxXQorCW11bAlyMTIsIHI0LCByNAorCW11bAlyMTIsIGQsIHIxMgorCXJzYglyMTIsIHIxMiwgcjQsIGFzbCAjMQorCW11bAlyNCwgcjEyLCByMTIKKwltdWwJcjQsIGQsIHI0CisJcnNiCXI0LCByNCwgcjEyLCBhc2wgIzEJQyByNCA9IGludmVyc2UKKworCXN1YnMJbiwgbiwgIzEJCUMgc2V0IGNhcnJ5IGFzIHNpZGUtZWZmZWN0CisJYmVxCUwoZW5kKQorCitMKHRvcCk6CXNiY3MJY3ksIHI1LCBjeQorCWxkcglyNSwgW3VwXSwgIzQKKwlzdWIJbiwgbiwgIzEKKwltdWwJcjEyLCByNCwgY3kKKwl0c3QJbiwgbgorCXVtdWxsCXIxMiwgY3ksIGQsIHIxMgorCWJuZQlMKHRvcCkKKworTChlbmQpOglzYmNzCWN5LCByNSwgY3kKKwltdWwJcjEyLCByNCwgY3kKKwl1bXVsbAlyMTIsIHIwLCBkLCByMTIKKwlhZGRjYwlyMCwgcjAsICMxCisKKwlsZG1mZAlzcCEsIHtyNCwgcjV9CisJcmV0dXJuCXIxNAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vbXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vbXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3YmMxYmMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS9tdWxfMS5hc20KQEAgLTAsMCArMSw5NCBAQAorZG5sICBBUk0gbXBuX211bF8xIC0tIE11bHRpcGx5IGEgbGltYiB2ZWN0b3Igd2l0aCBhIGxpbWIgYW5kIHN0b3JlIHRoZSByZXN1bHQKK2RubCAgaW4gYSBzZWNvbmQgbGltYiB2ZWN0b3IuCitkbmwgIENvbnRyaWJ1dGVkIGJ5IFJvYmVydCBIYXJsZXkuCisKK2RubCAgQ29weXJpZ2h0IDE5OTgsIDIwMDAsIDIwMDEsIDIwMDMsIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIFN0cm9uZ0FSTQk2LTgKK0MgWFNjYWxlCSA/CitDIENvcnRleC1BNwkgPworQyBDb3J0ZXgtQTgJID8KK0MgQ29ydGV4LUE5CSA0Ljc1CitDIENvcnRleC1BMTUJID8KKworQyBXZSBzaG91bGQgcmV3cml0ZSB0aGlzIGFsb25nIHRoZSBsaW5lcyBvZiBhZGRtdWxfMS5hc20uICBUaGF0IHNob3VsZCBzYXZlIGEKK0MgY3ljbGUgb24gU3Ryb25nQVJNLCBhbmQgc2V2ZXJhbCBjeWNsZXMgb24gWFNjYWxlLgorCitkZWZpbmUoYHJwJyxgcjAnKQorZGVmaW5lKGB1cCcsYHIxJykKK2RlZmluZShgbicsYHIyJykKK2RlZmluZShgdmwnLGByMycpCisKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9tdWxfMSkKKwlzdG1mZAlzcCEsIHsgcjgsIHI5LCBsciB9CisJYW5kcwlyMTIsIG4sICMxCisJYmVxCUwoc2tpcDEpCisJbGRyCWxyLCBbdXBdLCAjNAorCXVtdWxsCXI5LCByMTIsIGxyLCB2bAorCXN0cglyOSwgW3JwXSwgIzQKK0woc2tpcDEpOgorCXRzdAluLCAjMgorCWJlcQlMKHNraXAyKQorCW1vdglyOCwgcjEyCisJbGRtaWEJdXAhLCB7IHIxMiwgbHIgfQorCW1vdglyOSwgIzAKKwl1bWxhbAlyOCwgcjksIHIxMiwgdmwKKwltb3YJcjEyLCAjMAorCXVtbGFsCXI5LCByMTIsIGxyLCB2bAorCXN0bWlhCXJwISwgeyByOCwgcjkgfQorTChza2lwMik6CisJYmljcwluLCBuLCAjMworCWJlcQlMKHJ0bikKKwlzdG1mZAlzcCEsIHsgcjYsIHI3IH0KKworTCh0b3ApOgltb3YJcjYsIHIxMgorCWxkbWlhCXVwISwgeyByOCwgcjksIHIxMiwgbHIgfQorCWxkcglyNywgW3JwLCAjMTJdCQkJQyBjYWNoZSBhbGxvY2F0ZQorCW1vdglyNywgIzAKKwl1bWxhbAlyNiwgcjcsIHI4LCB2bAorCW1vdglyOCwgIzAKKwl1bWxhbAlyNywgcjgsIHI5LCB2bAorCW1vdglyOSwgIzAKKwl1bWxhbAlyOCwgcjksIHIxMiwgdmwKKwltb3YJcjEyLCAjMAorCXVtbGFsCXI5LCByMTIsIGxyLCB2bAorCXN1YnMJbiwgbiwgIzQKKwlzdG1pYQlycCEsIHsgcjYsIHI3LCByOCwgcjkgfQorCWJuZQlMKHRvcCkKKworCWxkbWZkCXNwISwgeyByNiwgcjcgfQorCitMKHJ0bik6CW1vdglyMCwgcjEyCisJbGRtZmQJc3AhLCB7IHI4LCByOSwgcGMgfQorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vbmVvbi9SRUFETUUgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS9uZW9uL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWUzYjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vbmVvbi9SRUFETUUKQEAgLTAsMCArMSwyIEBACitUaGlzIGRpcmVjdG9yeSBjb250YWlucyBOZW9uIGNvZGUgd2hpY2ggcnVucyBhbmQgaXMgZWZmaWNpZW50IG9uIGFsbAorQVJNIENQVXMgd2hpY2ggc3VwcG9ydCBOZW9uLgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vbmVvbi9oYW1kaXN0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL25lb24vaGFtZGlzdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMyMDg5NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL25lb24vaGFtZGlzdC5hc20KQEAgLTAsMCArMSwxOTQgQEAKK2RubCAgQVJNIE5lb24gbXBuX2hhbWRpc3QgLS0gbXBuIGJpdCBoYW1taW5nIGRpc3RhbmNlLgorCitkbmwgIENvcHlyaWdodCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBTdHJvbmdBUk06CSAtCitDIFhTY2FsZQkgLQorQyBDb3J0ZXgtQTcJID8KK0MgQ29ydGV4LUE4CSA/CitDIENvcnRleC1BOQkgMS44OQorQyBDb3J0ZXgtQTE1CSAwLjk1CisKK0MgVE9ETworQyAgKiBFeHBsb3JlIHVzaW5nIHZsZHIgYW5kIHZsZG0uICBEb2VzIGl0IGhlbHAgb24gQTk/ICAoVGhlc2UgbG9hZHMgZG8KK0MgICAgNjQtYml0cy1hdC1hLXRpbWUsIHdoaWNoIHdpbGwgbWVzcyB1cCBpbiBiaWctZW5kaWFuIG1vZGUuICBFeGNlcHQgbm90IGZvcgorQyAgICBwb3Bjb3VudC4gRXhjZXB0IHBlcmhhcHMgYWxzbyBmb3IgcG9wY291bnQgZm9yIHRoZSBlZGdlIGxvYWRzLikKK0MgICogQXJyYW5nZSB0byBhbGlnbiB0aGUgcG9pbnRlciwgaWYgdGhhdCBoZWxwcyBwZXJmb3JtYW5jZS4gIFVzZSB0aGUgc2FtZQorQyAgICByZWFkLWFuZC1tYXNrIHRyaWNrIHdlIHVzZSBvbiBQQ3MsIGZvciBzaW1wbGljaXR5IGFuZCBwZXJmb3JtYW5jZS4gIChTb3JyeQorQyAgICB2YWxncmluZCEpCitDICAqIEV4cGxvcmUgaWYgZXhwbGljaXQgYWxpZ24gZGlyZWN0aXZlcywgZS5nLiwgIltwdHI6MTI4XSIgaGVscC4KK0MgICogU2VlIHJ0aCdzIGdtcC1kZXZlbCAyMDEzLTAyLzAzIG1lc3NhZ2VzIGFib3V0IGZpbmFsIHN1bW1hdGlvbiB0cmlja3MuCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBhcCcsIHIwKQorZGVmaW5lKGBicCcsIHIxKQorZGVmaW5lKGBuJywgIHIyKQorCitDIFdlIHN1bSBpbnRvIDE2IDE2LWJpdCBjb3VudGVycyBpbiBxOCxxOSwgYnV0IGF0IHRoZSBlbmQgd2Ugc3VtIHRoZW0gYW5kIGVuZAorQyB1cCB3aXRoIDggMTYtYml0IGNvdW50ZXJzLiAgVGhlcmVmb3JlLCB3ZSBjYW4gc3VtIHRvIDgoMl4xNi0xKSBiaXRzLCBvcgorQyAoOCoyXjE2LTEpLzMyID0gMHgzZmZmIGxpbWJzLiAgV2UgdXNlIGEgY2h1bmtzaXplIGNsb3NlIHRvIHRoYXQsIGJ1dCB3aGljaAorQyBjYW4gYmUgcmVwcmVzZW50ZWQgYXMgYSA4LWJpdCBBUk0gY29uc3RhbnQuCitDCitkZWZpbmUoYGNodW5rc2l6ZScsMHgzZjgwKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2hhbWRpc3QpCisKKwljbXAJbiwgI2NodW5rc2l6ZQorCWJoaQlMKGd0MTZrKQorCitMKGx0MTZrKToKKwl2bW92Lmk2NCAgIHE4LCAjMAkJQyBjbGVhciBzdW1tYXRpb24gcmVnaXN0ZXIKKwl2bW92Lmk2NCAgIHE5LCAjMAkJQyBjbGVhciBzdW1tYXRpb24gcmVnaXN0ZXIKKworCXRzdAkgICBuLCAjMQorCWJlcQkgICBMKHh4eDApCisJdm1vdi5pNjQgICBkMCwgIzAKKwl2bW92Lmk2NCAgIGQyMCwgIzAKKwlzdWIJICAgbiwgbiwgIzEKKwl2bGQxLjMyICAge2QwWzBdfSwgW2FwXSEJQyBsb2FkIDEgbGltYgorCXZsZDEuMzIgICB7ZDIwWzBdfSwgW2JwXSEJQyBsb2FkIDEgbGltYgorCXZlb3IJICAgZDAsIGQwLCBkMjAKKwl2Y250LjgJICAgZDI0LCBkMAorCXZwYWRhbC51OCAgZDE2LCBkMjQJCUMgZDE2L3E4ID0gMDsgY291bGQganVzdCBzcGxhdAorCitMKHh4eDApOnRzdAkgICBuLCAjMgorCWJlcQkgICBMKHh4MDApCisJc3ViCSAgIG4sIG4sICMyCisJdmxkMS4zMiAgICB7ZDB9LCBbYXBdIQkJQyBsb2FkIDIgbGltYnMKKwl2bGQxLjMyICAgIHtkMjB9LCBbYnBdIQkJQyBsb2FkIDIgbGltYnMKKwl2ZW9yCSAgIGQwLCBkMCwgZDIwCisJdmNudC44CSAgIGQyNCwgZDAKKwl2cGFkYWwudTggIGQxNiwgZDI0CisKK0woeHgwMCk6dHN0CSAgIG4sICM0CisJYmVxCSAgIEwoeDAwMCkKKwlzdWIJICAgbiwgbiwgIzQKKwl2bGQxLjMyICAgIHtxMH0sIFthcF0hCQlDIGxvYWQgNCBsaW1icworCXZsZDEuMzIgICAge3ExMH0sIFticF0hCQlDIGxvYWQgNCBsaW1icworCXZlb3IJICAgcTAsIHEwLCBxMTAKKwl2Y250LjgJICAgcTEyLCBxMAorCXZwYWRhbC51OCAgcTgsIHExMgorCitMKHgwMDApOnRzdAkgICBuLCAjOAorCWJlcQkgICBMKDAwMDApCisKKwlzdWJzCSAgIG4sIG4sICM4CisJdmxkMS4zMiAgICB7cTAscTF9LCBbYXBdIQlDIGxvYWQgOCBsaW1icworCXZsZDEuMzIgICAge3ExMCxxMTF9LCBbYnBdIQlDIGxvYWQgOCBsaW1icworCWJscwkgICBMKHN1bSkKKworTChndDgpOgl2bGQxLjMyICAgIHtxMixxM30sIFthcF0hCUMgbG9hZCA4IGxpbWJzCisJdmxkMS4zMiAgICB7cTE0LHExNX0sIFticF0hCUMgbG9hZCA4IGxpbWJzCisJdmVvcgkgICBxMCwgcTAsIHExMAorCXZlb3IJICAgcTEsIHExLCBxMTEKKwlzdWIJICAgbiwgbiwgIzgKKwl2Y250LjgJICAgcTEyLCBxMAorCXZjbnQuOAkgICBxMTMsIHExCisJYgkgICBMKG1pZCkKKworTCgwMDAwKTpzdWJzCSAgIG4sIG4sICMxNgorCWJsbwkgICBMKGUwKQorCisJdmxkMS4zMiAgICB7cTIscTN9LCBbYXBdIQlDIGxvYWQgOCBsaW1icworCXZsZDEuMzIgICAge3EwLHExfSwgW2FwXSEJQyBsb2FkIDggbGltYnMKKwl2bGQxLjMyICAgIHtxMTQscTE1fSwgW2JwXSEJQyBsb2FkIDggbGltYnMKKwl2bGQxLjMyICAgIHtxMTAscTExfSwgW2JwXSEJQyBsb2FkIDggbGltYnMKKwl2ZW9yCSAgIHEyLCBxMiwgcTE0CisJdmVvcgkgICBxMywgcTMsIHExNQorCXZjbnQuOAkgICBxMTIsIHEyCisJdmNudC44CSAgIHExMywgcTMKKwlzdWJzCSAgIG4sIG4sICMxNgorCWJsbwkgICBMKGVuZCkKKworTCh0b3ApOgl2bGQxLjMyICAgIHtxMixxM30sIFthcF0hCUMgbG9hZCA4IGxpbWJzCisJdmxkMS4zMiAgICB7cTE0LHExNX0sIFticF0hCUMgbG9hZCA4IGxpbWJzCisJdmVvcgkgICBxMCwgcTAsIHExMAorCXZlb3IJICAgcTEsIHExLCBxMTEKKwl2cGFkYWwudTggIHE4LCBxMTIKKwl2Y250LjgJICAgcTEyLCBxMAorCXZwYWRhbC51OCAgcTksIHExMworCXZjbnQuOAkgICBxMTMsIHExCitMKG1pZCk6CXZsZDEuMzIgICAge3EwLHExfSwgW2FwXSEJQyBsb2FkIDggbGltYnMKKwl2bGQxLjMyICAgIHtxMTAscTExfSwgW2JwXSEJQyBsb2FkIDggbGltYnMKKwl2ZW9yCSAgIHEyLCBxMiwgcTE0CisJdmVvcgkgICBxMywgcTMsIHExNQorCXN1YnMJICAgbiwgbiwgIzE2CisJdnBhZGFsLnU4ICBxOCwgcTEyCisJdmNudC44CSAgIHExMiwgcTIKKwl2cGFkYWwudTggIHE5LCBxMTMKKwl2Y250LjgJICAgcTEzLCBxMworCWJocwkgICBMKHRvcCkKKworTChlbmQpOgl2cGFkYWwudTggIHE4LCBxMTIKKwl2cGFkYWwudTggIHE5LCBxMTMKK0woc3VtKToJdmVvcgkgICBxMCwgcTAsIHExMAorCXZlb3IJICAgcTEsIHExLCBxMTEKKwl2Y250LjgJICAgcTEyLCBxMAorCXZjbnQuOAkgICBxMTMsIHExCisJdnBhZGFsLnU4ICBxOCwgcTEyCisJdnBhZGFsLnU4ICBxOSwgcTEzCisJdmFkZC5pMTYgICBxOCwgcTgsIHE5CisJCQkJCUMgd2UgaGF2ZSA4IDE2LWJpdCBjb3VudHMKK0woZTApOgl2cGFkZGwudTE2IHE4LCBxOAkJQyB3ZSBoYXZlIDQgMzItYml0IGNvdW50cworCXZwYWRkbC51MzIgcTgsIHE4CQlDIHdlIGhhdmUgMiA2NC1iaXQgY291bnRzCisJdm1vdi4zMiAgICByMCwgZDE2WzBdCisJdm1vdi4zMiAgICByMSwgZDE3WzBdCisJYWRkCSAgIHIwLCByMCwgcjEKKwlieAlscgorCitDIENvZGUgZm9yIGxhcmdlIGNvdW50LiAgU3BsaXRzIG9wZXJhbmQgYW5kIGNhbGxzIGFib3ZlIGNvZGUuCitkZWZpbmUoYGFwMicsIHI1KQorZGVmaW5lKGBicDInLCByNikKK0woZ3QxNmspOgorCXB1c2gJe3I0LHI1LHI2LHIxNH0KKwltb3YJYXAyLCBhcAorCW1vdglicDIsIGJwCisJbW92CXIzLCBuCQkJQyBmdWxsIGNvdW50CisJbW92CXI0LCAjMAkJCUMgdG90YWwgc3VtCisKKzE6CW1vdgluLCAjY2h1bmtzaXplCQlDIGNvdW50IGZvciB0aGlzIGludm9jYXRpb24KKwlibAlMKGx0MTZrKQkJQyBjb3VsZCBqdW1wIGRlZXAgaW5zaWRlIGNvZGUKKwlhZGQJYXAyLCBhcDIsICNjaHVua3NpemUqNAlDIHBvaW50IGF0IG5leHQgY2h1bmsKKwlhZGQJYnAyLCBicDIsICNjaHVua3NpemUqNAlDIHBvaW50IGF0IG5leHQgY2h1bmsKKwlhZGQJcjQsIHI0LCByMAorCW1vdglhcCwgYXAyCQkJQyBwdXQgY2h1bmsgcG9pbnRlciBpbiBwbGFjZSBmb3IgY2FsbAorCW1vdglicCwgYnAyCQkJQyBwdXQgY2h1bmsgcG9pbnRlciBpbiBwbGFjZSBmb3IgY2FsbAorCXN1YglyMywgcjMsICNjaHVua3NpemUKKwljbXAJcjMsICNjaHVua3NpemUKKwliaGkJMWIKKworCW1vdgluLCByMwkJCUMgY291bnQgZm9yIGZpbmFsIGludm9jYXRpb24KKwlibAlMKGx0MTZrKQorCWFkZAlyMCwgcjQsIHIwCisJcG9wCXtyNCxyNSxyNixwY30KK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL25lb24vbG9ycnNoaWZ0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL25lb24vbG9ycnNoaWZ0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWJjNzgwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vbmVvbi9sb3Jyc2hpZnQuYXNtCkBAIC0wLDAgKzEsMjc5IEBACitkbmwgIEFSTSBOZW9uIG1wbl9sc2hpZnQgYW5kIG1wbl9yc2hpZnQuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqw7ZybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIgICAgIGN5Y2xlcy9saW1iICAgICBjeWNsZXMvbGltYiAgICAgIGdvb2QKK0MgICAgICAgICAgICAgIGFsaWduZWQJICAgICAgdW5hbGlnbmVkCSAgICAgIGJlc3Qgc2VlbgkgICAgIGZvciBjcHU/CitDIFN0cm9uZ0FSTQkgLQkJIC0KK0MgWFNjYWxlCSAtCQkgLQorQyBDb3J0ZXgtQTcJID8JCSA/CitDIENvcnRleC1BOAkgPwkJID8KK0MgQ29ydGV4LUE5CSAzCQkgMwkJCQlZCitDIENvcnRleC1BMTUJIDEuNQkJIDEuNQkJCQlZCisKKworQyBXZSByZWFkIDY0IGJpdHMgYXQgYSB0aW1lIGF0IDMyLWJpdCBhbGlnbmVkIGFkZHJlc3NlcywgYW5kIGV4Y2VwdCBmb3IgdGhlCitDIGZpcnN0IGFuZCBsYXN0IHN0b3JlLCB3ZSB3cml0ZSB1c2luZyA2NC1iaXQgYWxpZ25lZCBhZGRyZXNzZXMuICBBbGwgc2hpZnRpbmcKK0MgaXMgZG9uZSBvbiA2NC1iaXQgd29yZHMgaW4gJ2V4dGVuc2lvbicgcmVnaXN0ZXJzLgorQworQyBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gcmVhZCBhbHNvIHVzaW5nIDY0LWJpdCBhbGlnbm1lbnQsIGJ5IG1hbmlwdWxhdGluZworQyB0aGUgc2hpZnQgY291bnQgZm9yIHVuYWxpZ25lZCBvcGVyYW5kcy4gIE5vdCBkb25lLCBzaW5jZSBpdCBkb2VzIG5vdCBzZWVtIHRvCitDIG1hdHRlciBmb3IgQTkgb3IgQTE1LgorQworQyBUaGlzIHdpbGwgbm90IHdvcmsgaW4gYmlnLWVuZGlhbiBtb2RlLgorCitDIFRPRE8KK0MgICogVHJ5IHVzaW5nIDEyOC1iaXQgb3BlcmF0aW9ucy4gIE5vdGUgdGhhdCBOZW9uIGxhY2tzIHB1cmUgMTI4LWJpdCBzaGlmdHMsCitDICAgIHdoaWNoIG1pZ2h0IG1ha2UgaXQgdHJpY2t5LgorQyAgKiBDbGVhbiB1cCBhbmQgc2ltcGxpZnkuCitDICAqIENvbnNpZGVyIHNoYXJpbmcgbW9zdCBvZiB0aGUgY29kZSBmb3IgbHNoaWZ0IGFuZCByc2hpZnQsIHNpbmNlIHRoZSBmZWVkLWluCitDICAgIGNvZGUsIHRoZSBsb29wLCBhbmQgbW9zdCBvZiB0aGUgd2luZC1kb3duIGNvZGUgYXJlIGlkZW50aWNhbC4KK0MgICogUmVwbGFjZSB0aGUgYmFzZWNhc2UgY29kZSB3aXRoIGNvZGUgdXNpbmcgJ2V4dGVuc2lvbicgcmVnaXN0ZXJzLgorQyAgKiBPcHRpbWlzZS4gIEl0IGlzIG5vdCBjbGVhciB0aGF0IHRoaXMgbG9vcCBpbnNuIHBlcm11dGF0aW9uIGlzIG9wdGltYWwgZm9yCitDICAgIGVpdGhlciBBOSBvciBBMTUuCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsICBgcjAnKQorZGVmaW5lKGBhcCcsICBgcjEnKQorZGVmaW5lKGBuJywgICBgcjInKQorZGVmaW5lKGBjbnQnLCBgcjMnKQorCitpZmRlZihgT1BFUkFUSU9OX2xzaGlmdCcsYAorCWRlZmluZShgSUZMU0gnLCBgJDEnKQorCWRlZmluZShgSUZSU0gnLCBgJykKKwlkZWZpbmUoYFgnLGAwJykKKwlkZWZpbmUoYFknLGAxJykKKwlkZWZpbmUoYGZ1bmMnLGBtcG5fbHNoaWZ0JykKKycpCitpZmRlZihgT1BFUkFUSU9OX3JzaGlmdCcsYAorCWRlZmluZShgSUZMU0gnLCBgJykKKwlkZWZpbmUoYElGUlNIJywgYCQxJykKKwlkZWZpbmUoYFgnLGAxJykKKwlkZWZpbmUoYFknLGAwJykKKwlkZWZpbmUoYGZ1bmMnLGBtcG5fcnNoaWZ0JykKKycpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2xzaGlmdCBtcG5fcnNoaWZ0KQorCitBU01fU1RBUlQobmVvbikKKwlURVhUCisJQUxJR04oNjQpCitQUk9MT0dVRShmdW5jKQorSUZMU0goYAltb3YJcjEyLCBuLCBsc2wgIzIJJykKK0lGTFNIKGAJYWRkCXJwLCBycCwgcjEyCScpCitJRkxTSChgCWFkZAlhcCwgYXAsIHIxMgknKQorCisJY21wCW4sICM0CQkJQyBTSU1EIGNvZGUgbiBsaW1pdAorCWJsZQlMKGJhc2UpCisKK2lmZGVmKGBPUEVSQVRJT05fbHNoaWZ0JyxgCisJdmR1cC4zMglkNiwgcjMJCQlDIGxlZnQgc2hpZnQgY291bnQgaXMgcG9zaXRpdmUKKwlzdWIJcjMsIHIzLCAjNjQJCUMgcmlnaHQgc2hpZnQgY291bnQgaXMgbmVnYXRpdmUKKwl2ZHVwLjMyCWQ3LCByMworCW1vdglyMTIsICMtOCcpCQlDIGxzaGlmdCBwb2ludGVyIHVwZGF0ZSBvZmZzZXQKK2lmZGVmKGBPUEVSQVRJT05fcnNoaWZ0JyxgCisJcnNiCXIzLCByMywgIzAJCUMgcmlnaHQgc2hpZnQgY291bnQgaXMgbmVnYXRpdmUKKwl2ZHVwLjMyCWQ2LCByMworCWFkZAlyMywgcjMsICM2NAkJQyBsZWZ0IHNoaWZ0IGNvdW50IGlzIHBvc2l0aXZlCisJdmR1cC4zMglkNywgcjMKKwltb3YJcjEyLCAjOCcpCQlDIHJzaGlmdCBwb2ludGVyIHVwZGF0ZSBvZmZzZXQKKworSUZMU0goYAlzdWIJYXAsIGFwLCAjOAknKQorCXZsZDEuMzIJe2QxOX0sIFthcF0sIHIxMglDIGxvYWQgaW5pdGlhbCAyIGxpbWJzCisJdnNobC51NjQgZDE4LCBkMTksIGQ3CQlDIHJldHZhbAorCisJdHN0CXJwLCAjNAkJCUMgaXMgcnAgNjQtYml0IGFsaWduZWQgYWxyZWFkeT8KKwliZXEJTChycF9hbGlnbmVkKQkJQyB5ZXMsIHNraXAKK0lGTFNIKGAJYWRkCWFwLCBhcCwgIzQJJykJQyBtb3ZlIGJhY2sgYXAgcG9pbnRlcgorSUZSU0goYAlzdWIJYXAsIGFwLCAjNAknKQlDIG1vdmUgYmFjayBhcCBwb2ludGVyCisJdnNobC51NjQgZDQsIGQxOSwgZDYKKwlzdWIJbiwgbiwgIzEJCUMgZmlyc3QgbGltYiBoYW5kbGVkCitJRkxTSChgCXN1YgkgcnAsIHJwLCAjNAknKQorCXZzdDEuMzIJIHtkNFtZXX0sIFtycF1JRlJTSCghKQlDIHN0b3JlIGZpcnN0IGxpbWIsIHJwIGdldHMgYWxpZ25lZAorCXZsZDEuMzIJIHtkMTl9LCBbYXBdLCByMTIJQyBsb2FkIGFwWzFdIGFuZCBhcFsyXQorCitMKHJwX2FsaWduZWQpOgorSUZMU0goYAlzdWIJcnAsIHJwLCAjOAknKQorCXN1YnMJbiwgbiwgIzYKKwlibHQJTCh0d29fb3JfdGhyZWVfbW9yZSkKKwl0c3QJbiwgIzIKKwliZXEJTCgyKQorCitMKDEpOgl2bGQxLjMyCSB7ZDE3fSwgW2FwXSwgcjEyCisJdnNobC51NjQgZDUsIGQxOSwgZDYKKwl2bGQxLjMyCSB7ZDE2fSwgW2FwXSwgcjEyCisJdnNobC51NjQgZDAsIGQxNywgZDcKKwl2c2hsLnU2NCBkNCwgZDE3LCBkNgorCXN1YgluLCBuLCAjMgorCWIJIEwobWlkKQorCitMKDIpOgl2bGQxLjMyCSB7ZDE2fSwgW2FwXSwgcjEyCisJdnNobC51NjQgZDQsIGQxOSwgZDYKKwl2bGQxLjMyCSB7ZDE3fSwgW2FwXSwgcjEyCisJdnNobC51NjQgZDEsIGQxNiwgZDcKKwl2c2hsLnU2NCBkNSwgZDE2LCBkNgorCXN1YnMJbiwgbiwgIzQKKwlibHQJTChlbmQpCisKK0wodG9wKToJdmxkMS4zMgkge2QxNn0sIFthcF0sIHIxMgorCXZvcnIJIGQyLCBkNCwgZDEKKwl2c2hsLnU2NCBkMCwgZDE3LCBkNworCXZzaGwudTY0IGQ0LCBkMTcsIGQ2CisJdnN0MS4zMgkge2QyfSwgW3JwOjY0XSwgcjEyCitMKG1pZCk6CXZsZDEuMzIJIHtkMTd9LCBbYXBdLCByMTIKKwl2b3JyCSBkMywgZDUsIGQwCisJdnNobC51NjQgZDEsIGQxNiwgZDcKKwl2c2hsLnU2NCBkNSwgZDE2LCBkNgorCXZzdDEuMzIJIHtkM30sIFtycDo2NF0sIHIxMgorCXN1YnMJbiwgbiwgIzQKKwliZ2UJTCh0b3ApCisKK0woZW5kKToJdHN0CSBuLCAjMQorCWJlcQkgTChldm4pCisKKwl2b3JyCSBkMiwgZDQsIGQxCisJdnN0MS4zMgkge2QyfSwgW3JwOjY0XSwgcjEyCisJYgkgTChjajEpCisKK0woZXZuKToJdm9ycgkgZDIsIGQ0LCBkMQorCXZzaGwudTY0IGQwLCBkMTcsIGQ3CisJdnNobC51NjQgZDE2LCBkMTcsIGQ2CisJdnN0MS4zMgkge2QyfSwgW3JwOjY0XSwgcjEyCisJdm9ycgkgZDIsIGQ1LCBkMAorCWIJIEwoY2oyKQorCitDIExvYWQgbGFzdCAyIC0gMyBsaW1icywgc3RvcmUgbGFzdCA0IC0gNSBsaW1icworTCh0d29fb3JfdGhyZWVfbW9yZSk6CisJdHN0CW4sICMxCisJYmVxCUwobDIpCisKK0wobDMpOgl2c2hsLnU2NCBkNSwgZDE5LCBkNgorCXZsZDEuMzIJIHtkMTd9LCBbYXBdLCByMTIKK0woY2oxKToJdmVvcgkgZDE2LCBkMTYsIGQxNgorSUZMU0goYAlhZGQJIGFwLCBhcCwgIzQJJykKKwl2bGQxLjMyCSB7ZDE2W1ldfSwgW2FwXSwgcjEyCisJdnNobC51NjQgZDAsIGQxNywgZDcKKwl2c2hsLnU2NCBkNCwgZDE3LCBkNgorCXZvcnIJIGQzLCBkNSwgZDAKKwl2c2hsLnU2NCBkMSwgZDE2LCBkNworCXZzaGwudTY0IGQ1LCBkMTYsIGQ2CisJdnN0MS4zMgkge2QzfSwgW3JwOjY0XSwgcjEyCisJdm9ycgkgZDIsIGQ0LCBkMQorCXZzdDEuMzIJIHtkMn0sIFtycDo2NF0sIHIxMgorSUZMU0goYAlhZGQJIHJwLCBycCwgIzQJJykKKwl2c3QxLjMyCSB7ZDVbWV19LCBbcnBdCisJdm1vdi4zMgkgcjAsIGQxOFtYXQorCWJ4CWxyCisKK0wobDIpOgl2bGQxLjMyCSB7ZDE2fSwgW2FwXSwgcjEyCisJdnNobC51NjQgZDQsIGQxOSwgZDYKKwl2c2hsLnU2NCBkMSwgZDE2LCBkNworCXZzaGwudTY0IGQxNiwgZDE2LCBkNgorCXZvcnIJIGQyLCBkNCwgZDEKK0woY2oyKToJdnN0MS4zMgkge2QyfSwgW3JwOjY0XSwgcjEyCisJdnN0MS4zMgkge2QxNn0sIFtycF0KKwl2bW92LjMyCSByMCwgZDE4W1hdCisJYngJbHIKKworCitkZWZpbmUoYHRuYycsIGByMTInKQorTChiYXNlKToKKwlwdXNoCXtyNCwgcjYsIHI3LCByOH0KK2lmZGVmKGBPUEVSQVRJT05fbHNoaWZ0JyxgCisJbGRyCXI0LCBbYXAsICMtNF0hCisJcnNiCXRuYywgY250LCAjMzIKKworCW1vdglyNywgcjQsIGxzbCBjbnQKKwl0c3QJbiwgIzEKKwliZXEJTChldikJCQlDIG4gZXZlbgorCitMKG9kKToJc3VicwluLCBuLCAjMgorCWJjYwlMKGVkMSkJCQlDIG4gPSAxCisJbGRyCXI4LCBbYXAsICMtNF0hCisJYglMKG1kKQkJCUMgbiA9IDMKKworTChldik6CWxkcglyNiwgW2FwLCAjLTRdIQorCXN1YnMJbiwgbiwgIzIKKwliZXEJTChlZCkJCQlDIG4gPSAzCisJCQkJCUMgbiA9IDQKK0wodHApOglsZHIJcjgsIFthcCwgIy00XSEKKwlvcnIJcjcsIHI3LCByNiwgbHNyIHRuYworCXN0cglyNywgW3JwLCAjLTRdIQorCW1vdglyNywgcjYsIGxzbCBjbnQKK0wobWQpOglsZHIJcjYsIFthcCwgIy00XSEKKwlvcnIJcjcsIHI3LCByOCwgbHNyIHRuYworCXN0cglyNywgW3JwLCAjLTRdIQorCW1vdglyNywgcjgsIGxzbCBjbnQKKworTChlZCk6CW9ycglyNywgcjcsIHI2LCBsc3IgdG5jCisJc3RyCXI3LCBbcnAsICMtNF0hCisJbW92CXI3LCByNiwgbHNsIGNudAorTChlZDEpOglzdHIJcjcsIFtycCwgIy00XQorCW1vdglyMCwgcjQsIGxzciB0bmMKKycpCitpZmRlZihgT1BFUkFUSU9OX3JzaGlmdCcsYAorCWxkcglyNCwgW2FwXQorCXJzYgl0bmMsIGNudCwgIzMyCisKKwltb3YJcjcsIHI0LCBsc3IgY250CisJdHN0CW4sICMxCisJYmVxCUwoZXYpCQkJQyBuIGV2ZW4KKworTChvZCk6CXN1YnMJbiwgbiwgIzIKKwliY2MJTChlZDEpCQkJQyBuID0gMQorCWxkcglyOCwgW2FwLCAjNF0hCisJYglMKG1kKQkJCUMgbiA9IDMKKworTChldik6CWxkcglyNiwgW2FwLCAjNF0hCisJc3VicwluLCBuLCAjMgorCWJlcQlMKGVkKQkJCUMgbiA9IDIKKwkJCQkJQyBuID0gNAorCitMKHRwKToJbGRyCXI4LCBbYXAsICM0XSEKKwlvcnIJcjcsIHI3LCByNiwgbHNsIHRuYworCXN0cglyNywgW3JwXSwgIzQKKwltb3YJcjcsIHI2LCBsc3IgY250CitMKG1kKToJbGRyCXI2LCBbYXAsICM0XSEKKwlvcnIJcjcsIHI3LCByOCwgbHNsIHRuYworCXN0cglyNywgW3JwXSwgIzQKKwltb3YJcjcsIHI4LCBsc3IgY250CisKK0woZWQpOglvcnIJcjcsIHI3LCByNiwgbHNsIHRuYworCXN0cglyNywgW3JwXSwgIzQKKwltb3YJcjcsIHI2LCBsc3IgY250CitMKGVkMSk6CXN0cglyNywgW3JwXSwgIzQKKwltb3YJcjAsIHI0LCBsc2wgdG5jCisnKQorCXBvcAl7cjQsIHI2LCByNywgcjh9CisJYngJcjE0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS9uZW9uL2xzaGlmdGMuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vbmVvbi9sc2hpZnRjLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWJmMGRlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vbmVvbi9sc2hpZnRjLmFzbQpAQCAtMCwwICsxLDI0MiBAQAorZG5sICBBUk0gTmVvbiBtcG5fbHNoaWZ0Yy4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYiAgICAgY3ljbGVzL2xpbWIgICAgIGN5Y2xlcy9saW1iICAgICAgZ29vZAorQyAgICAgICAgICAgICAgYWxpZ25lZAkgICAgICB1bmFsaWduZWQJICAgICAgYmVzdCBzZWVuCSAgICAgZm9yIGNwdT8KK0MgU3Ryb25nQVJNCSAtCQkgLQorQyBYU2NhbGUJIC0JCSAtCitDIENvcnRleC1BNwkgPwkJID8KK0MgQ29ydGV4LUE4CSA/CQkgPworQyBDb3J0ZXgtQTkJIDMuNQkJIDMuNQkJCQlZCitDIENvcnRleC1BMTUJIDEuNzUJCSAxLjc1CQkJCVkKKworCitDIFdlIHJlYWQgNjQgYml0cyBhdCBhIHRpbWUgYXQgMzItYml0IGFsaWduZWQgYWRkcmVzc2VzLCBhbmQgZXhjZXB0IGZvciB0aGUKK0MgZmlyc3QgYW5kIGxhc3Qgc3RvcmUsIHdlIHdyaXRlIHVzaW5nIDY0LWJpdCBhbGlnbmVkIGFkZHJlc3Nlcy4gIEFsbCBzaGlmdGluZworQyBpcyBkb25lIG9uIDY0LWJpdCB3b3JkcyBpbiAnZXh0ZW5zaW9uJyByZWdpc3RlcnMuCitDCitDIEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byByZWFkIGFsc28gdXNpbmcgNjQtYml0IGFsaWdubWVudCwgYnkgbWFuaXB1bGF0aW5nCitDIHRoZSBzaGlmdCBjb3VudCBmb3IgdW5hbGlnbmVkIG9wZXJhbmRzLiAgTm90IGRvbmUsIHNpbmNlIGl0IGRvZXMgbm90IHNlZW0gdG8KK0MgbWF0dGVyIGZvciBBOSBvciBBMTUuCitDCitDIFRoaXMgd2lsbCBub3Qgd29yayBpbiBiaWctZW5kaWFuIG1vZGUuCisKK0MgVE9ETworQyAgKiBUcnkgdXNpbmcgMTI4LWJpdCBvcGVyYXRpb25zLiAgTm90ZSB0aGF0IE5lb24gbGFja3MgcHVyZSAxMjgtYml0IHNoaWZ0cywKK0MgICAgd2hpY2ggbWlnaHQgbWFrZSBpdCB0cmlja3kuCitDICAqIENsZWFuIHVwIGFuZCBzaW1wbGlmeS4KK0MgICogQ29uc2lkZXIgc2hhcmluZyBtb3N0IG9mIHRoZSBjb2RlIGZvciBsc2hpZnQgYW5kIHJzaGlmdCwgc2luY2UgdGhlIGZlZWQtaW4KK0MgICAgY29kZSwgdGhlIGxvb3AsIGFuZCBtb3N0IG9mIHRoZSB3aW5kLWRvd24gY29kZSBhcmUgaWRlbnRpY2FsLgorQyAgKiBSZXBsYWNlIHRoZSBiYXNlY2FzZSBjb2RlIHdpdGggY29kZSB1c2luZyAnZXh0ZW5zaW9uJyByZWdpc3RlcnMuCitDICAqIE9wdGltaXNlLiAgSXQgaXMgbm90IGNsZWFyIHRoYXQgdGhpcyBsb29wIGluc24gcGVybXV0YXRpb24gaXMgb3B0aW1hbCBmb3IKK0MgICAgZWl0aGVyIEE5IG9yIEExNS4KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywgIGByMCcpCitkZWZpbmUoYGFwJywgIGByMScpCitkZWZpbmUoYG4nLCAgIGByMicpCitkZWZpbmUoYGNudCcsIGByMycpCisKK0FTTV9TVEFSVChuZW9uKQorCVRFWFQKKwlBTElHTig2NCkKK1BST0xPR1VFKG1wbl9sc2hpZnRjKQorCW1vdglyMTIsIG4sIGxzbCAjMgorCWFkZAlycCwgcnAsIHIxMgorCWFkZAlhcCwgYXAsIHIxMgorCisJY21wCW4sICM0CQkJQyBTSU1EIGNvZGUgbiBsaW1pdAorCWJsZQlMKGJhc2UpCisKKwl2ZHVwLjMyCWQ2LCByMwkJCUMgbGVmdCBzaGlmdCBjb3VudCBpcyBwb3NpdGl2ZQorCXN1YglyMywgcjMsICM2NAkJQyByaWdodCBzaGlmdCBjb3VudCBpcyBuZWdhdGl2ZQorCXZkdXAuMzIJZDcsIHIzCisJbW92CXIxMiwgIy04CQlDIGxzaGlmdCBwb2ludGVyIHVwZGF0ZSBvZmZzZXQKKworCXN1YglhcCwgYXAsICM4CisJdmxkMS4zMgl7ZDE5fSwgW2FwXSwgcjEyCUMgbG9hZCBpbml0aWFsIDIgbGltYnMKKwl2c2hsLnU2NCBkMTgsIGQxOSwgZDcJCUMgcmV0dmFsCisKKwl0c3QJcnAsICM0CQkJQyBpcyBycCA2NC1iaXQgYWxpZ25lZCBhbHJlYWR5PworCWJlcQlMKHJwX2FsaWduZWQpCQlDIHllcywgc2tpcAorCXZtdm4JIGQxOSwgZDE5CisJYWRkCWFwLCBhcCwgIzQJCUMgbW92ZSBiYWNrIGFwIHBvaW50ZXIKKwl2c2hsLnU2NCBkNCwgZDE5LCBkNgorCXN1YgluLCBuLCAjMQkJQyBmaXJzdCBsaW1iIGhhbmRsZWQKKwlzdWIJIHJwLCBycCwgIzQKKwl2c3QxLjMyCSB7ZDRbMV19LCBbcnBdCQlDIHN0b3JlIGZpcnN0IGxpbWIsIHJwIGdldHMgYWxpZ25lZAorCXZsZDEuMzIJIHtkMTl9LCBbYXBdLCByMTIJQyBsb2FkIGFwWzFdIGFuZCBhcFsyXQorCitMKHJwX2FsaWduZWQpOgorCXN1YglycCwgcnAsICM4CisJc3VicwluLCBuLCAjNgorCXZtdm4JIGQxOSwgZDE5CisJYmx0CUwodHdvX29yX3RocmVlX21vcmUpCisJdHN0CW4sICMyCisJYmVxCUwoMikKKworTCgxKToJdmxkMS4zMgkge2QxN30sIFthcF0sIHIxMgorCXZzaGwudTY0IGQ1LCBkMTksIGQ2CisJdm12bgkgZDE3LCBkMTcKKwl2bGQxLjMyCSB7ZDE2fSwgW2FwXSwgcjEyCisJdnNobC51NjQgZDAsIGQxNywgZDcKKwl2c2hsLnU2NCBkNCwgZDE3LCBkNgorCXN1YgluLCBuLCAjMgorCWIJIEwobWlkKQorCitMKDIpOgl2bGQxLjMyCSB7ZDE2fSwgW2FwXSwgcjEyCisJdnNobC51NjQgZDQsIGQxOSwgZDYKKwl2bXZuCSBkMTYsIGQxNgorCXZsZDEuMzIJIHtkMTd9LCBbYXBdLCByMTIKKwl2c2hsLnU2NCBkMSwgZDE2LCBkNworCXZzaGwudTY0IGQ1LCBkMTYsIGQ2CisJc3VicwluLCBuLCAjNAorCWJsdAlMKGVuZCkKKworTCh0b3ApOgl2bXZuCSBkMTcsIGQxNworCXZsZDEuMzIJIHtkMTZ9LCBbYXBdLCByMTIKKwl2b3JyCSBkMiwgZDQsIGQxCisJdnNobC51NjQgZDAsIGQxNywgZDcKKwl2c2hsLnU2NCBkNCwgZDE3LCBkNgorCXZzdDEuMzIJIHtkMn0sIFtycDo2NF0sIHIxMgorTChtaWQpOgl2bXZuCSBkMTYsIGQxNgorCXZsZDEuMzIJIHtkMTd9LCBbYXBdLCByMTIKKwl2b3JyCSBkMywgZDUsIGQwCisJdnNobC51NjQgZDEsIGQxNiwgZDcKKwl2c2hsLnU2NCBkNSwgZDE2LCBkNgorCXZzdDEuMzIJIHtkM30sIFtycDo2NF0sIHIxMgorCXN1YnMJbiwgbiwgIzQKKwliZ2UJTCh0b3ApCisKK0woZW5kKToJdHN0CSBuLCAjMQorCWJlcQkgTChldm4pCisKKwl2b3JyCSBkMiwgZDQsIGQxCisJdnN0MS4zMgkge2QyfSwgW3JwOjY0XSwgcjEyCisJYgkgTChjajEpCisKK0woZXZuKToJdm12bgkgZDE3LCBkMTcKKwl2b3JyCSBkMiwgZDQsIGQxCisJdnNobC51NjQgZDAsIGQxNywgZDcKKwl2c2hsLnU2NCBkNCwgZDE3LCBkNgorCXZzdDEuMzIJIHtkMn0sIFtycDo2NF0sIHIxMgorCXZtb3YudTgJIGQxNywgIzI1NQorCXZvcnIJIGQyLCBkNSwgZDAKKwl2c2hsLnU2NCBkMCwgZDE3LCBkNworCXZvcnIJIGQzLCBkNCwgZDAKKwliCSBMKGNqMikKKworQyBMb2FkIGxhc3QgMiAtIDMgbGltYnMsIHN0b3JlIGxhc3QgNCAtIDUgbGltYnMKK0wodHdvX29yX3RocmVlX21vcmUpOgorCXRzdAluLCAjMQorCWJlcQlMKGwyKQorCitMKGwzKToJdnNobC51NjQgZDUsIGQxOSwgZDYKKwl2bGQxLjMyCSB7ZDE3fSwgW2FwXSwgcjEyCitMKGNqMSk6CXZtb3YudTgJIGQxNiwgIzAKKwlhZGQJIGFwLCBhcCwgIzQKKwl2bXZuCSBkMTcsIGQxNworCXZsZDEuMzIJIHtkMTZbMV19LCBbYXBdLCByMTIKKwl2c2hsLnU2NCBkMCwgZDE3LCBkNworCXZzaGwudTY0IGQ0LCBkMTcsIGQ2CisJdm12bgkgZDE2LCBkMTYKKwl2b3JyCSBkMywgZDUsIGQwCisJdnNobC51NjQgZDEsIGQxNiwgZDcKKwl2c2hsLnU2NCBkNSwgZDE2LCBkNgorCXZzdDEuMzIJIHtkM30sIFtycDo2NF0sIHIxMgorCXZvcnIJIGQyLCBkNCwgZDEKKwl2c3QxLjMyCSB7ZDJ9LCBbcnA6NjRdLCByMTIKKwlhZGQJIHJwLCBycCwgIzQKKwl2c3QxLjMyCSB7ZDVbMV19LCBbcnBdCisJdm1vdi4zMgkgcjAsIGQxOFswXQorCWJ4CWxyCisKK0wobDIpOgl2bGQxLjMyCSB7ZDE2fSwgW2FwXSwgcjEyCisJdnNobC51NjQgZDQsIGQxOSwgZDYKKwl2bXZuCSBkMTYsIGQxNgorCXZzaGwudTY0IGQxLCBkMTYsIGQ3CisJdnNobC51NjQgZDUsIGQxNiwgZDYKKwl2bW92LnU4CSBkMTcsICMyNTUKKwl2b3JyCSBkMiwgZDQsIGQxCisJdnNobC51NjQgZDAsIGQxNywgZDcKKwl2b3JyCSBkMywgZDUsIGQwCitMKGNqMik6CXZzdDEuMzIJIHtkMn0sIFtycDo2NF0sIHIxMgorCXZzdDEuMzIJIHtkM30sIFtycF0KKwl2bW92LjMyCSByMCwgZDE4WzBdCisJYngJbHIKKworCitkZWZpbmUoYHRuYycsIGByMTInKQorTChiYXNlKToKKwlwdXNoCXtyNCwgcjYsIHI3LCByOH0KKwlsZHIJcjQsIFthcCwgIy00XSEKKwlyc2IJdG5jLCBjbnQsICMzMgorCW12bglyNiwgcjQKKworCW1vdglyNywgcjYsIGxzbCBjbnQKKwl0c3QJbiwgIzEKKwliZXEJTChldikJCQlDIG4gZXZlbgorCitMKG9kKToJc3VicwluLCBuLCAjMgorCWJjYwlMKGVkMSkJCQlDIG4gPSAxCisJbGRyCXI4LCBbYXAsICMtNF0hCisJbXZuCXI4LCByOAorCWIJTChtZCkJCQlDIG4gPSAzCisKK0woZXYpOglsZHIJcjYsIFthcCwgIy00XSEKKwltdm4JcjYsIHI2CisJc3VicwluLCBuLCAjMgorCWJlcQlMKGVkKQkJCUMgbiA9IDMKKwkJCQkJQyBuID0gNAorTCh0cCk6CWxkcglyOCwgW2FwLCAjLTRdIQorCW9ycglyNywgcjcsIHI2LCBsc3IgdG5jCisJc3RyCXI3LCBbcnAsICMtNF0hCisJbXZuCXI4LCByOAorCW1vdglyNywgcjYsIGxzbCBjbnQKK0wobWQpOglsZHIJcjYsIFthcCwgIy00XSEKKwlvcnIJcjcsIHI3LCByOCwgbHNyIHRuYworCXN0cglyNywgW3JwLCAjLTRdIQorCW12bglyNiwgcjYKKwltb3YJcjcsIHI4LCBsc2wgY250CisKK0woZWQpOglvcnIJcjcsIHI3LCByNiwgbHNyIHRuYworCXN0cglyNywgW3JwLCAjLTRdIQorCW1vdglyNywgcjYsIGxzbCBjbnQKK0woZWQxKToJbXZuCXI2LCAjMAorCW9ycglyNywgcjcsIHI2LCBsc3IgdG5jCisJc3RyCXI3LCBbcnAsICMtNF0KKwltb3YJcjAsIHI0LCBsc3IgdG5jCisJcG9wCXtyNCwgcjYsIHI3LCByOH0KKwlieAlyMTQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL25lb24vcG9wY291bnQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vbmVvbi9wb3Bjb3VudC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY4ZjlhZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL25lb24vcG9wY291bnQuYXNtCkBAIC0wLDAgKzEsMTY2IEBACitkbmwgIEFSTSBOZW9uIG1wbl9wb3Bjb3VudCAtLSBtcG4gYml0IHBvcHVsYXRpb24gY291bnQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIFN0cm9uZ0FSTToJIC0KK0MgWFNjYWxlCSAtCitDIENvcnRleC1BNwkgPworQyBDb3J0ZXgtQTgJID8KK0MgQ29ydGV4LUE5CSAxLjEyNQorQyBDb3J0ZXgtQTE1CSAwLjU2CisKK0MgVE9ETworQyAgKiBFeHBsb3JlIHVzaW5nIHZsZHIgYW5kIHZsZG0uICBEb2VzIGl0IGhlbHAgb24gQTk/ICAoVGhlc2UgbG9hZHMgZG8KK0MgICAgNjQtYml0cy1hdC1hLXRpbWUsIHdoaWNoIHdpbGwgbWVzcyB1cCBpbiBiaWctZW5kaWFuIG1vZGUuICBFeGNlcHQgbm90IGZvcgorQyAgICBwb3Bjb3VudC4gRXhjZXB0IHBlcmhhcHMgYWxzbyBmb3IgcG9wY291bnQgZm9yIHRoZSBlZGdlIGxvYWRzLikKK0MgICogQXJyYW5nZSB0byBhbGlnbiB0aGUgcG9pbnRlciwgaWYgdGhhdCBoZWxwcyBwZXJmb3JtYW5jZS4gIFVzZSB0aGUgc2FtZQorQyAgICByZWFkLWFuZC1tYXNrIHRyaWNrIHdlIHVzZSBvbiBQQ3MsIGZvciBzaW1wbGljaXR5IGFuZCBwZXJmb3JtYW5jZS4gIChTb3JyeQorQyAgICB2YWxncmluZCEpCitDICAqIEV4cGxvcmUgaWYgZXhwbGljaXQgYWxpZ24gZGlyZWN0aXZlcywgZS5nLiwgIltwdHI6MTI4XSIgaGVscC4KK0MgICogU2VlIHJ0aCdzIGdtcC1kZXZlbCAyMDEzLTAyLzAzIG1lc3NhZ2VzIGFib3V0IGZpbmFsIHN1bW1hdGlvbiB0cmlja3MuCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBhcCcsIHIwKQorZGVmaW5lKGBuJywgIHIxKQorCitDIFdlIHN1bSBpbnRvIDE2IDE2LWJpdCBjb3VudGVycyBpbiBxOCxxOSwgYnV0IGF0IHRoZSBlbmQgd2Ugc3VtIHRoZW0gYW5kIGVuZAorQyB1cCB3aXRoIDggMTYtYml0IGNvdW50ZXJzLiAgVGhlcmVmb3JlLCB3ZSBjYW4gc3VtIHRvIDgoMl4xNi0xKSBiaXRzLCBvcgorQyAoOCoyXjE2LTEpLzMyID0gMHgzZmZmIGxpbWJzLiAgV2UgdXNlIGEgY2h1bmtzaXplIGNsb3NlIHRvIHRoYXQsIGJ1dCB3aGljaAorQyBjYW4gYmUgcmVwcmVzZW50ZWQgYXMgYSA4LWJpdCBBUk0gY29uc3RhbnQuCitDCitkZWZpbmUoYGNodW5rc2l6ZScsMHgzZjgwKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX3BvcGNvdW50KQorCisJY21wCW4sICNjaHVua3NpemUKKwliaGkJTChndDE2aykKKworTChsdDE2ayk6CisJdm1vdi5pNjQgICBxOCwgIzAJCUMgY2xlYXIgc3VtbWF0aW9uIHJlZ2lzdGVyCisJdm1vdi5pNjQgICBxOSwgIzAJCUMgY2xlYXIgc3VtbWF0aW9uIHJlZ2lzdGVyCisKKwl0c3QJICAgbiwgIzEKKwliZXEJICAgTCh4eHgwKQorCXZtb3YuaTY0ICAgZDAsICMwCisJc3ViCSAgIG4sIG4sICMxCisJdmxkMS4zMiAgIHtkMFswXX0sIFthcF0hCUMgbG9hZCAxIGxpbWIKKwl2Y250LjgJICAgZDI0LCBkMAorCXZwYWRhbC51OCAgZDE2LCBkMjQJCUMgZDE2L3E4ID0gMDsgY291bGQganVzdCBzcGxhdAorCitMKHh4eDApOnRzdAkgICBuLCAjMgorCWJlcQkgICBMKHh4MDApCisJc3ViCSAgIG4sIG4sICMyCisJdmxkMS4zMiAgICB7ZDB9LCBbYXBdIQkJQyBsb2FkIDIgbGltYnMKKwl2Y250LjgJICAgZDI0LCBkMAorCXZwYWRhbC51OCAgZDE2LCBkMjQKKworTCh4eDAwKTp0c3QJICAgbiwgIzQKKwliZXEJICAgTCh4MDAwKQorCXN1YgkgICBuLCBuLCAjNAorCXZsZDEuMzIgICAge3EwfSwgW2FwXSEJCUMgbG9hZCA0IGxpbWJzCisJdmNudC44CSAgIHExMiwgcTAKKwl2cGFkYWwudTggIHE4LCBxMTIKKworTCh4MDAwKTp0c3QJICAgbiwgIzgKKwliZXEJICAgTCgwMDAwKQorCisJc3VicwkgICBuLCBuLCAjOAorCXZsZDEuMzIgICAge3EwLHExfSwgW2FwXSEJQyBsb2FkIDggbGltYnMKKwlibHMJICAgTChzdW0pCisKK0woZ3Q4KToJdmxkMS4zMiAgICB7cTIscTN9LCBbYXBdIQlDIGxvYWQgOCBsaW1icworCXN1YgkgICBuLCBuLCAjOAorCXZjbnQuOAkgICBxMTIsIHEwCisJdmNudC44CSAgIHExMywgcTEKKwliCSAgIEwobWlkKQorCitMKDAwMDApOnN1YnMJICAgbiwgbiwgIzE2CisJYmxvCSAgIEwoZTApCisKKwl2bGQxLjMyICAgIHtxMixxM30sIFthcF0hCUMgbG9hZCA4IGxpbWJzCisJdmxkMS4zMiAgICB7cTAscTF9LCBbYXBdIQlDIGxvYWQgOCBsaW1icworCXZjbnQuOAkgICBxMTIsIHEyCisJdmNudC44CSAgIHExMywgcTMKKwlzdWJzCSAgIG4sIG4sICMxNgorCWJsbwkgICBMKGVuZCkKKworTCh0b3ApOgl2bGQxLjMyICAgIHtxMixxM30sIFthcF0hCUMgbG9hZCA4IGxpbWJzCisJdnBhZGFsLnU4ICBxOCwgcTEyCisJdmNudC44CSAgIHExMiwgcTAKKwl2cGFkYWwudTggIHE5LCBxMTMKKwl2Y250LjgJICAgcTEzLCBxMQorTChtaWQpOgl2bGQxLjMyICAgIHtxMCxxMX0sIFthcF0hCUMgbG9hZCA4IGxpbWJzCisJc3VicwkgICBuLCBuLCAjMTYKKwl2cGFkYWwudTggIHE4LCBxMTIKKwl2Y250LjgJICAgcTEyLCBxMgorCXZwYWRhbC51OCAgcTksIHExMworCXZjbnQuOAkgICBxMTMsIHEzCisJYmhzCSAgIEwodG9wKQorCitMKGVuZCk6CXZwYWRhbC51OCAgcTgsIHExMgorCXZwYWRhbC51OCAgcTksIHExMworTChzdW0pOgl2Y250LjgJICAgcTEyLCBxMAorCXZjbnQuOAkgICBxMTMsIHExCisJdnBhZGFsLnU4ICBxOCwgcTEyCisJdnBhZGFsLnU4ICBxOSwgcTEzCisJdmFkZC5pMTYgICBxOCwgcTgsIHE5CisJCQkJCUMgd2UgaGF2ZSA4IDE2LWJpdCBjb3VudHMKK0woZTApOgl2cGFkZGwudTE2IHE4LCBxOAkJQyB3ZSBoYXZlIDQgMzItYml0IGNvdW50cworCXZwYWRkbC51MzIgcTgsIHE4CQlDIHdlIGhhdmUgMiA2NC1iaXQgY291bnRzCisJdm1vdi4zMiAgICByMCwgZDE2WzBdCisJdm1vdi4zMiAgICByMSwgZDE3WzBdCisJYWRkCSAgIHIwLCByMCwgcjEKKwlieAlscgorCitDIENvZGUgZm9yIGxhcmdlIGNvdW50LiAgU3BsaXRzIG9wZXJhbmQgYW5kIGNhbGxzIGFib3ZlIGNvZGUuCitkZWZpbmUoYGFwMicsIHIyKQkJCUMgY2FsbGVyLXNhdmVzIHJlZyBub3QgdXNlZCBhYm92ZQorTChndDE2ayk6CisJcHVzaAl7cjQscjE0fQorCW1vdglhcDIsIGFwCisJbW92CXIzLCBuCQkJQyBmdWxsIGNvdW50CisJbW92CXI0LCAjMAkJCUMgdG90YWwgc3VtCisKKzE6CW1vdgluLCAjY2h1bmtzaXplCQlDIGNvdW50IGZvciB0aGlzIGludm9jYXRpb24KKwlibAlMKGx0MTZrKQkJQyBjb3VsZCBqdW1wIGRlZXAgaW5zaWRlIGNvZGUKKwlhZGQJYXAyLCBhcDIsICNjaHVua3NpemUqNAlDIHBvaW50IGF0IG5leHQgY2h1bmsKKwlhZGQJcjQsIHI0LCByMAorCW1vdglhcCwgYXAyCQkJQyBwdXQgY2h1bmsgcG9pbnRlciBpbiBwbGFjZSBmb3IgY2FsbAorCXN1YglyMywgcjMsICNjaHVua3NpemUKKwljbXAJcjMsICNjaHVua3NpemUKKwliaGkJMWIKKworCW1vdgluLCByMwkJCUMgY291bnQgZm9yIGZpbmFsIGludm9jYXRpb24KKwlibAlMKGx0MTZrKQorCWFkZAlyMCwgcjQsIHIwCisJcG9wCXtyNCxwY30KK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL25lb24vc2VjX3RhYnNlbGVjdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS9uZW9uL3NlY190YWJzZWxlY3QuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZmNlYjAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS9uZW9uL3NlY190YWJzZWxlY3QuYXNtCkBAIC0wLDAgKzEsMTQwIEBACitkbmwgIEFSTSBOZW9uIG1wbl9zZWNfdGFic2VsZWN0LgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBTdHJvbmdBUk0JIC0KK0MgWFNjYWxlCSAtCitDIENvcnRleC1BNwkgPworQyBDb3J0ZXgtQTgJID8KK0MgQ29ydGV4LUE5CSAxLjE1CitDIENvcnRleC1BMTUJIDAuNjUKKworZGVmaW5lKGBycCcsICAgICBgcjAnKQorZGVmaW5lKGB0cCcsICAgICBgcjEnKQorZGVmaW5lKGBuJywgICAgICBgcjInKQorZGVmaW5lKGBuZW50cycsICBgcjMnKQorQyBkZWZpbmUoYHdoaWNoJywgIG9uIHN0YWNrKQorCitkZWZpbmUoYGknLCAgICAgIGByNCcpCitkZWZpbmUoYGonLCAgICAgIGByNScpCisKK2RlZmluZShgbWFza3EnLCAgYHExMCcpCitkZWZpbmUoYG1hc2tkJywgIGBkMjAnKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX3NlY190YWJzZWxlY3QpCisJcHVzaAl7cjQtcjV9CisKKwlhZGQJICByNCwgc3AsICM4CisJdmxkMS4zMgkgIHtkMzBbXSwgZDMxW119LCBbcjRdCUMgNCBgd2hpY2gnIGNvcGllcworCXZtb3YuaTMyICBxMTQsICMxCQlDIDQgY29waWVzIG9mIDEKKworCXN1YnMJaiwgbiwgIzgKKwlibWkJTChvdXRlcl9lbmQpCisKK0wob3V0ZXJfdG9wKToKKwltb3YJICBpLCBuZW50cworCW1vdgkgIHIxMiwgdHAJCUMgcHJlc2VydmUgdHAKKwl2ZW9yCSAgcTEzLCBxMTMsIHExMwkJQyA0IGNvdW50ZXIgY29waWVzCisJdmVvcgkgIHEyLCBxMiwgcTIKKwl2ZW9yCSAgcTMsIHEzLCBxMworCUFMSUdOKDE2KQorTCh0b3ApOgl2Y2VxLmkzMiAgbWFza3EsIHExMywgcTE1CUMgY29tcGFyZSBpZHggY29waWVzIHRvIGB3aGljaCcgY29waWVzCisJdmxkMS4zMgkgIHtxMCxxMX0sIFt0cF0KKwl2YWRkLmkzMiAgcTEzLCBxMTMsIHExNAorCXZiaXQJICBxMiwgcTAsIG1hc2txCisJdmJpdAkgIHEzLCBxMSwgbWFza3EKKwlhZGQJICB0cCwgdHAsIG4sIGxzbCAjMgorCXN1YnMJICBpLCBpLCAjMQorCWJuZQkgIEwodG9wKQorCXZzdDEuMzIJICB7cTIscTN9LCBbcnBdIQorCWFkZAkgIHRwLCByMTIsICMzMgkJQyByZXN0b3JlIHRwLCBwb2ludCB0byBuZXh0IHNsaWNlCisJc3VicwkgIGosIGosICM4CisJYnBsCSAgTChvdXRlcl90b3ApCitMKG91dGVyX2VuZCk6CisKKwl0c3QJICBuLCAjNAorCWJlcQkgIEwoYjB4eCkKK0woYjF4eCk6bW92CSAgaSwgbmVudHMKKwltb3YJICByMTIsIHRwCisJdmVvcgkgIHExMywgcTEzLCBxMTMKKwl2ZW9yCSAgcTIsIHEyLCBxMgorCUFMSUdOKDE2KQorTCh0cDQpOgl2Y2VxLmkzMiAgbWFza3EsIHExMywgcTE1CisJdmxkMS4zMgkgIHtxMH0sIFt0cF0KKwl2YWRkLmkzMiAgcTEzLCBxMTMsIHExNAorCXZiaXQJICBxMiwgcTAsIG1hc2txCisJYWRkCSAgdHAsIHRwLCBuLCBsc2wgIzIKKwlzdWJzCSAgaSwgaSwgIzEKKwlibmUJICBMKHRwNCkKKwl2c3QxLjMyCSAge3EyfSwgW3JwXSEKKwlhZGQJICB0cCwgcjEyLCAjMTYKKworTChiMHh4KTp0c3QJICBuLCAjMgorCWJlcQkgIEwoYjAweCkKK0woYjAxeCk6bW92CSAgaSwgbmVudHMKKwltb3YJICByMTIsIHRwCisJdmVvcgkgIGQyNiwgZDI2LCBkMjYKKwl2ZW9yCSAgZDQsIGQ0LCBkNAorCUFMSUdOKDE2KQorTCh0cDIpOgl2Y2VxLmkzMiAgbWFza2QsIGQyNiwgZDMwCisJdmxkMS4zMgkgIHtkMH0sIFt0cF0KKwl2YWRkLmkzMiAgZDI2LCBkMjYsIGQyOAorCXZiaXQJICBkNCwgZDAsIG1hc2tkCisJYWRkCSAgdHAsIHRwLCBuLCBsc2wgIzIKKwlzdWJzCSAgaSwgaSwgIzEKKwlibmUJICBMKHRwMikKKwl2c3QxLjMyCSAge2Q0fSwgW3JwXSEKKwlhZGQJICB0cCwgcjEyLCAjOAorCitMKGIwMHgpOnRzdAkgIG4sICMxCisJYmVxCSAgTChiMDAwKQorTChiMDAxKTptb3YJICBpLCBuZW50cworCW1vdgkgIHIxMiwgdHAKKwl2ZW9yCSAgZDI2LCBkMjYsIGQyNgorCXZlb3IJICBkNCwgZDQsIGQ0CisJQUxJR04oMTYpCitMKHRwMSk6CXZjZXEuaTMyICBtYXNrZCwgZDI2LCBkMzAKKwl2bGQxLjMyCSAge2QwWzBdfSwgW3RwXQorCXZhZGQuaTMyICBkMjYsIGQyNiwgZDI4CisJdmJpdAkgIGQ0LCBkMCwgbWFza2QKKwlhZGQJICB0cCwgdHAsIG4sIGxzbCAjMgorCXN1YnMJICBpLCBpLCAjMQorCWJuZQkgIEwodHAxKQorCXZzdDEuMzIJICB7ZDRbMF19LCBbcnBdCisKK0woYjAwMCk6cG9wCXtyNC1yNX0KKwlieAlyMTQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL3JzaDFhb3JzX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vcnNoMWFvcnNfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJlMzAwNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL3JzaDFhb3JzX24uYXNtCkBAIC0wLDAgKzEsMTI0IEBACitkbmwgIEFSTSBtcG5fcnNoMWFkZF9uIGFuZCBtcG5fcnNoMXN1Yl9uLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIFN0cm9uZ0FSTQkgPworQyBYU2NhbGUJID8KK0MgQ29ydGV4LUE3CSA/CitDIENvcnRleC1BOAkgPworQyBDb3J0ZXgtQTkJMy42NC0zLjcKK0MgQ29ydGV4LUExNQkgMi41CisKK0MgVE9ETworQyAgKiBOb3Qgb3B0aW1pc2VkLgorCitkZWZpbmUoYHJwJywgYHIwJykKK2RlZmluZShgdXAnLCBgcjEnKQorZGVmaW5lKGB2cCcsIGByMicpCitkZWZpbmUoYG4nLCAgYHIzJykKKworaWZkZWYoYE9QRVJBVElPTl9yc2gxYWRkX24nLCBgCisgIGRlZmluZShgQUREU1VCJywJYWRkcykKKyAgZGVmaW5lKGBBRERTVUJDJywJYWRjcykKKyAgZGVmaW5lKGBSU1RDWScsCWBjbW4JJDEsICQxJykKKyAgZGVmaW5lKGBmdW5jJywJbXBuX3JzaDFhZGRfbikKKyAgZGVmaW5lKGBmdW5jX25jJywJbXBuX3JzaDFhZGRfbmMpJykKK2lmZGVmKGBPUEVSQVRJT05fcnNoMXN1Yl9uJywgYAorICBkZWZpbmUoYEFERFNVQicsCXN1YnMpCisgIGRlZmluZShgQUREU1VCQycsCXNiY3MpCisgIGRlZmluZShgUlNUQ1knLAorCWBtdm4JJDIsICMweDgwMDAwMDAwCisJY21wCSQyLCAkMScpCisgIGRlZmluZShgZnVuYycsCW1wbl9yc2gxc3ViX24pCisgIGRlZmluZShgZnVuY19uYycsCW1wbl9yc2gxc3ViX25jKScpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX3JzaDFhZGRfbiBtcG5fcnNoMXN1Yl9uKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUoZnVuYykKKwlwdXNoCXtyNC1yMTF9CisJbGRyCXI0LCBbdXBdLCAjNAorCWxkcglyOCwgW3ZwXSwgIzQKKwlBRERTVUIJcjQsIHI0LCByOAorCW1vdnMJcjEyLCByNywgcnJ4CisJYW5kCXIxMSwgcjQsICMxCUMgcmV0dXJuIHZhbHVlCisJc3VicwluLCBuLCAjNAorCWJsbwlMKGVuZCkKKworTCh0b3ApOglsZG1pYQl1cCEsIHtyNSxyNixyN30KKwlsZG1pYQl2cCEsIHtyOCxyOSxyMTB9CisJY21uCXIxMiwgcjEyCisJQUREU1VCQwlyNSwgcjUsIHI4CisJQUREU1VCQwlyNiwgcjYsIHI5CisJQUREU1VCQwlyNywgcjcsIHIxMAorCW1vdnMJcjEyLCByNywgcnJ4CisJbW92cwlyNiwgcjYsIHJyeAorCW1vdnMJcjUsIHI1LCBycngKKwltb3ZzCXI0LCByNCwgcnJ4CisJc3VicwluLCBuLCAjMworCXN0bWlhCXJwISwge3I0LHI1LHI2fQorCW1vdglyNCwgcjcKKwliaHMJTCh0b3ApCisKK0woZW5kKToJY21uCW4sICMyCisJYmxzCUwoZTIpCisJbGRtCXVwLCB7cjUscjZ9CisJbGRtCXZwLCB7cjgscjl9CisJY21uCXIxMiwgcjEyCisJQUREU1VCQwlyNSwgcjUsIHI4CisJQUREU1VCQwlyNiwgcjYsIHI5CisJbW92cwlyMTIsIHI2LCBycngKKwltb3ZzCXI1LCByNSwgcnJ4CisJbW92cwlyNCwgcjQsIHJyeAorCXN0bWlhCXJwISwge3I0LHI1fQorCW1vdglyNCwgcjYKKwliCUwoZTEpCisKK0woZTIpOglibmUJTChlMSkKKwlsZHIJcjUsIFt1cCwgIzBdCisJbGRyCXI4LCBbdnAsICMwXQorCWNtbglyMTIsIHIxMgorCUFERFNVQkMJcjUsIHI1LCByOAorCW1vdnMJcjEyLCByNSwgcnJ4CisJbW92cwlyNCwgcjQsIHJyeAorCXN0cglyNCwgW3JwXSwgIzQKKwltb3YJcjQsIHI1CisKK0woZTEpOglSU1RDWSgJcjEyLCByMSkKKwltb3YJcjQsIHI0LCBycngKKwlzdHIJcjQsIFtycCwgIzBdCisJbW92CXIwLCByMTEKKwlwb3AJe3I0LXIxMX0KKwlyZXR1cm4JcjE0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS9yc2hpZnQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vcnNoaWZ0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGRiYzJlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vcnNoaWZ0LmFzbQpAQCAtMCwwICsxLDg2IEBACitkbmwgIEFSTSBtcG5fcnNoaWZ0LgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDE5OTcsIDIwMDAsIDIwMDEsIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIFN0cm9uZ0FSTQkgPworQyBYU2NhbGUJID8KK0MgQ29ydGV4LUE3CSA/CitDIENvcnRleC1BOAkgPworQyBDb3J0ZXgtQTkJIDMuNQorQyBDb3J0ZXgtQTE1CSA/CisKK2RlZmluZShgcnAnLCAgYHIwJykKK2RlZmluZShgdXAnLCAgYHIxJykKK2RlZmluZShgbicsICAgYHIyJykKK2RlZmluZShgY250JywgYHIzJykKK2RlZmluZShgdG5jJywgYHIxMicpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fcnNoaWZ0KQorCXB1c2gJe3I0LCByNiwgcjcsIHI4fQorCWxkcglyNCwgW3VwXQorCXJzYgl0bmMsIGNudCwgIzMyCisKKwltb3YJcjcsIHI0LCBsc3IgY250CisJdHN0CW4sICMxCisJYmVxCUwoZXZuKQkJCUMgbiBldmVuCisKK0wob2RkKToJc3VicwluLCBuLCAjMgorCWJjYwlMKDEpCQkJQyBuID0gMQorCWxkcglyOCwgW3VwLCAjNF0hCisJYglMKG1pZCkKKworTChldm4pOglsZHIJcjYsIFt1cCwgIzRdIQorCXN1YnMJbiwgbiwgIzIKKwliZXEJTChlbmQpCisKK0wodG9wKToJbGRyCXI4LCBbdXAsICM0XSEKKwlvcnIJcjcsIHI3LCByNiwgbHNsIHRuYworCXN0cglyNywgW3JwXSwgIzQKKwltb3YJcjcsIHI2LCBsc3IgY250CitMKG1pZCk6CWxkcglyNiwgW3VwLCAjNF0hCisJb3JyCXI3LCByNywgcjgsIGxzbCB0bmMKKwlzdHIJcjcsIFtycF0sICM0CisJbW92CXI3LCByOCwgbHNyIGNudAorCXN1YnMJbiwgbiwgIzIKKwliZ3QJTCh0b3ApCisKK0woZW5kKToJb3JyCXI3LCByNywgcjYsIGxzbCB0bmMKKwlzdHIJcjcsIFtycF0sICM0CisJbW92CXI3LCByNiwgbHNyIGNudAorTCgxKToJc3RyCXI3LCBbcnBdCisJbW92CXIwLCByNCwgbHNsIHRuYworCXBvcAl7cjQsIHI2LCByNywgcjh9CisJcmV0dXJuCXIxNAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vc2VjX3RhYnNlbGVjdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS9zZWNfdGFic2VsZWN0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmE0MTJiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vc2VjX3RhYnNlbGVjdC5hc20KQEAgLTAsMCArMSwxMzEgQEAKK2RubCAgQVJNIG1wbl9zZWNfdGFic2VsZWN0CisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqw7ZybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIKK0MgU3Ryb25nQVJNCSA/CitDIFhTY2FsZQkgPworQyBDb3J0ZXgtQTcJID8KK0MgQ29ydGV4LUE4CSA/CitDIENvcnRleC1BOQkgMi4zMworQyBDb3J0ZXgtQTE1CSAyLjIKKworQyBUT0RPCitDICAqIENvbnNpZGVyIHVzaW5nIHNwZWNpYWwgY29kZSBmb3Igc21hbGwgbmVudHMsIGVpdGhlciBzd2FwcGluZyB0aGUgaW5uZXIgYW5kCitDICAgIG91dGVyIGxvb3BzLCBvciBwcm92aWRpbmcgYSBmZXcgY29tcGxldGVseSB1bnJvbGxpbmcgdGhlIGlubmVyIGxvb3BzLgorCitkZWZpbmUoYHJwJywgICAgYHIwJykKK2RlZmluZShgdHAnLCAgICBgcjEnKQorZGVmaW5lKGBuJywgICAgIGByMicpCitkZWZpbmUoYG5lbnRzJywgYHIzJykKK0MgICAgICB3aGljaCAgb24gc3RhY2sKKworZGVmaW5lKGBpJywgICAgIGByMTEnKQorZGVmaW5lKGBqJywgICAgIGByMTInKQorZGVmaW5lKGBjJywgICAgIGByMTQnKQorZGVmaW5lKGBtYXNrJywgIGByNycpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fc2VjX3RhYnNlbGVjdCkKKwlwdXNoCXtyNC1yMTEsIHIxNH0KKworCXN1YnMJaiwgbiwgIzMKKwlibWkJTChvdXRlcl9lbmQpCitMKG91dGVyX3RvcCk6CisJbGRyCWMsIFtzcCwgIzM2XQorCW1vdglpLCBuZW50cworCXB1c2gJe3RwfQorCisJbW92CXI4LCAjMAorCW1vdglyOSwgIzAKKwltb3YJcjEwLCAjMAorCitMKHRvcCk6CXN1YnMJYywgYywgIzEKKwlsZG0JdHAsIHtyNCxyNSxyNn0KKwlzYmMJbWFzaywgbWFzaywgbWFzaworCXN1YnMJaSwgaSwgIzEKKwlhZGQJdHAsIHRwLCBuLCBsc2wgIzIKKwlhbmQJcjQsIHI0LCBtYXNrCisJYW5kCXI1LCByNSwgbWFzaworCWFuZAlyNiwgcjYsIG1hc2sKKwlvcnIJcjgsIHI4LCByNAorCW9ycglyOSwgcjksIHI1CisJb3JyCXIxMCwgcjEwLCByNgorCWJnZQlMKHRvcCkKKworCXN0bWlhCXJwISwge3I4LHI5LHIxMH0KKwlwb3AJe3RwfQorCWFkZAl0cCwgdHAsICMxMgorCXN1YnMJaiwgaiwgIzMKKwlicGwJTChvdXRlcl90b3ApCitMKG91dGVyX2VuZCk6CisKKwljbXAJaiwgIy0xCisJYm5lCUwobjIpCisKKwlsZHIJYywgW3NwLCAjMzZdCisJbW92CWksIG5lbnRzCisJbW92CXI4LCAjMAorCW1vdglyOSwgIzAKK0wodHAyKToJc3VicwljLCBjLCAjMQorCXNiYwltYXNrLCBtYXNrLCBtYXNrCisJbGRtCXRwLCB7cjQscjV9CisJc3VicwlpLCBpLCAjMQorCWFkZAl0cCwgdHAsIG4sIGxzbCAjMgorCWFuZAlyNCwgcjQsIG1hc2sKKwlhbmQJcjUsIHI1LCBtYXNrCisJb3JyCXI4LCByOCwgcjQKKwlvcnIJcjksIHI5LCByNQorCWJnZQlMKHRwMikKKwlzdG1pYQlycCwge3I4LHI5fQorCXBvcAl7cjQtcjExLCByMTR9CisJcmV0dXJuCWxyCisKK0wobjIpOgljbXAJaiwgIy0yCisJYm5lCUwobjEpCisKKwlsZHIJYywgW3NwLCAjMzZdCisJbW92CWksIG5lbnRzCisJbW92CXI4LCAjMAorTCh0cDEpOglzdWJzCWMsIGMsICMxCisJc2JjCW1hc2ssIG1hc2ssIG1hc2sKKwlsZHIJcjQsIFt0cF0KKwlzdWJzCWksIGksICMxCisJYWRkCXRwLCB0cCwgbiwgbHNsICMyCisJYW5kCXI0LCByNCwgbWFzaworCW9ycglyOCwgcjgsIHI0CisJYmdlCUwodHAxKQorCXN0cglyOCwgW3JwXQorTChuMSk6CXBvcAl7cjQtcjExLCByMTR9CisJcmV0dXJuCWxyCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS91ZGl2LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL3VkaXYuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMDQ3ODkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS91ZGl2LmFzbQpAQCAtMCwwICsxLDEwNCBAQAorZG5sICBBUk0gbXBuX3VkaXZfcXJubmQgLS0gZGl2aWRlIGEgdHdvIGxpbWIgZGl2aWRlbmQgYW5kIGEgb25lIGxpbWIgZGl2aXNvci4KK2RubCAgUmV0dXJuIHF1b3RpZW50IGFuZCBzdG9yZSByZW1haW5kZXIgdGhyb3VnaCBhIHN1cHBsaWVkIHBvaW50ZXIuCisKK2RubCAgQ29weXJpZ2h0IDIwMDEsIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJlbV9wdHInLGByMCcpCitkZWZpbmUoYG4xJyxgcjEnKQorZGVmaW5lKGBuMCcsYHIyJykKK2RlZmluZShgZCcsYHIzJykKKworQyBkaXZzdGVwIC0tIGRldmVsb3Agb25lIHF1b3RpZW50IGJpdC4gIERpdmlkZW5kIGluICQxJDIsIGRpdmlzb3IgaW4gJDMuCitDIFF1b3RpZW50IGJpdCBpcyBzaGlmdGVkIGludG8gJDIuCitkZWZpbmUoYGRpdnN0ZXAnLAorICAgICAgIGBhZGNzCSQyLCAkMiwgJDIKKwlhZGMJJDEsICQxLCAkMQorCWNtcAkkMSwgJDMKKwlzdWJjcwkkMSwgJDEsICQzJykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl91ZGl2X3Fybm5kKQorCW1vdglyMTIsICM4CQkJQyBsb29wIGNvdW50ZXIgZm9yIGJvdGggbG9vcHMgYmVsb3cKKwljbXAJZCwgIzB4ODAwMDAwMDAJCUMgY2hlY2sgZGl2aXNvciBtc2IgYW5kIGNsZWFyIGNhcnJ5CisJYmNzCUwoX2xhcmdlX2Rpdmlzb3IpCisKK0wob29wKToJZGl2c3RlcChuMSxuMCxkKQorCWRpdnN0ZXAobjEsbjAsZCkKKwlkaXZzdGVwKG4xLG4wLGQpCisJZGl2c3RlcChuMSxuMCxkKQorCXN1YglyMTIsIHIxMiwgIzEKKwl0ZXEJcjEyLCAjMAorCWJuZQlMKG9vcCkKKworCXN0cgluMSwgW3JlbV9wdHJdCQlDIHN0b3JlIHJlbWFpbmRlcgorCWFkYwlyMCwgbjAsIG4wCQlDIHF1b3RpZW50OiBhZGQgbGFzdCBjYXJyeSBmcm9tIGRpdnN0ZXAKKwlyZXR1cm4JbHIKKworTChfbGFyZ2VfZGl2aXNvcik6CisJc3RtZmQJc3AhLCB7IHI4LCBsciB9CisKKwlhbmQJcjgsIG4wLCAjMQkJQyBzYXZlIGxzYiBvZiBkaXZpZGVuZAorCW1vdglsciwgbjEsIGxzbCAjMzEKKwlvcnJzCW4wLCBsciwgbjAsIGxzciAjMQlDIG4wID0gbG8objFuMCA+PiAxKQorCW1vdgluMSwgbjEsIGxzciAjMQkJQyBuMSA9IGhpKG4xbjAgPj4gMSkKKworCWFuZAlsciwgZCwgIzEJCUMgc2F2ZSBsc2Igb2YgZGl2aXNvcgorCW1vdnMJZCwgZCwgbHNyICMxCQlDIGQgPSBmbG9vcihvcmlnX2QgLyAyKQorCWFkYwlkLCBkLCAjMAkJQyBkID0gY2VpbChvcmlnX2QgLyAyKQorCitMKG9vcDIpOgorCWRpdnN0ZXAobjEsbjAsZCkKKwlkaXZzdGVwKG4xLG4wLGQpCisJZGl2c3RlcChuMSxuMCxkKQorCWRpdnN0ZXAobjEsbjAsZCkKKwlzdWIJcjEyLCByMTIsICMxCisJdGVxCXIxMiwgIzAKKwlibmUJTChvb3AyKQorCisJYWRjCW4wLCBuMCwgbjAJCUMgc2hpZnQgYW5kIGFkZCBsYXN0IGNhcnJ5IGZyb20gZGl2c3RlcAorCWFkZAluMSwgcjgsIG4xLCBsc2wgIzEJQyBzaGlmdCBpbiBvbWl0dGVkIGRpdmlkZW5kIGxzYgorCXRzdAlsciwgbHIJCQlDIHRlc3Qgc2F2ZWQgZGl2aXNvciBsc2IKKwliZXEJTChfZXZlbl9kaXZpc29yKQorCisJcnNiCWQsIGxyLCBkLCBsc2wgIzEJQyByZXN0b3JlIG9yaWcgZCB2YWx1ZQorCWFkZHMJbjEsIG4xLCBuMAkJQyBmaXggcmVtYWluZGVyIGZvciBvbWl0dGVkIGRpdmlzb3IgbHNiCisJYWRkY3MJbjAsIG4wLCAjMQkJQyBhZGp1c3QgcXVvdGllbnQgaWYgcmVtLiBmaXggY2FycmllZAorCXN1YmNzCW4xLCBuMSwgZAkJQyBhZGp1c3QgcmVtYWluZGVyIGFjY29yZGluZ2x5CisJY21wCW4xLCBkCQkJQyByZW1haW5kZXIgPj0gZGl2aXNvcj8KKwlzdWJjcwluMSwgbjEsIGQJCUMgYWRqdXN0IHJlbWFpbmRlcgorCWFkZGNzCW4wLCBuMCwgIzEJCUMgYWRqdXN0IHF1b3RpZW50CisKK0woX2V2ZW5fZGl2aXNvcik6CisJc3RyCW4xLCBbcmVtX3B0cl0JCUMgc3RvcmUgcmVtYWluZGVyCisJbW92CXIwLCBuMAkJCUMgcXVvdGllbnQKKwlsZG1mZAlzcCEsIHsgcjgsIHBjIH0KK0VQSUxPR1VFKG1wbl91ZGl2X3Fybm5kKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjUvZ2NkXzExLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL3Y1L2djZF8xMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MyYjQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL3Y1L2djZF8xMS5hc20KQEAgLTAsMCArMSw3MCBAQAorZG5sICBBUk0gdjUgbXBuX2djZF8xMS4KKworZG5sICBCYXNlZCBvbiB0aGUgSzcgZ2NkXzEuYXNtLCBieSBLZXZpbiBSeWRlLiAgUmVoYWNrZWQgZm9yIEFSTSBieSBUb3JiasO2cm4KK2RubCAgR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDAtMjAwMiwgMjAwNSwgMjAwOSwgMjAxMSwgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2JpdCAoYXBwcm94KQorQyBTdHJvbmdBUk0JIC0KK0MgWFNjYWxlCSA/CitDIENvcnRleC1BNQkgNi40NQlvYnNvbGV0ZQorQyBDb3J0ZXgtQTcJIDYuNDEJb2Jzb2xldGUKK0MgQ29ydGV4LUE4CSA1LjAJb2Jzb2xldGUKK0MgQ29ydGV4LUE5CSA1LjkJb2Jzb2xldGUKK0MgQ29ydGV4LUExNQkgNC40MAlvYnNvbGV0ZQorQyBDb3J0ZXgtQTE3CSA1LjY4CW9ic29sZXRlCitDIENvcnRleC1BNTMJIDQuMzcJb2Jzb2xldGUKK0MgTnVtYmVycyBtZWFzdXJlZCB3aXRoOiBzcGVlZCAtQ0QgLXM4LTMyIC10MjQgbXBuX2djZF8xCisKK2RlZmluZShgdTAnLCAgICBgcjAnKQorZGVmaW5lKGB2MCcsICAgIGByMScpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX2djZF8xMSkKKwlzdWJzCXIzLCB1MCwgdjAJQwkJCTAKKwliZXEJTChlbmQpCQlDCisKKwlBTElHTigxNikKK0wodG9wKToJc3ViCXIyLCB2MCwgdTAJQwkJCTAsNQorCWFuZAlyMTIsIHIyLCByMwlDCQkJMQorCWNseglyMTIsIHIxMglDCQkJMgorCXJzYglyMTIsIHIxMiwgIzMxCUMJCQkzCisJcnNiY2MJcjMsIHIzLCAjMAlDIHYgPSBhYnModS12KSwgZXZlbgkxCisJbW92Y3MJdTAsIHYwCQlDIHUgPSBtaW4odSx2KQkJMQorCWxzcgl2MCwgcjMsIHIxMglDCQkJNAorCXN1YnMJcjMsIHUwLCB2MAlDCQkJNQorCWJuZQlMKHRvcCkJCUMKKworTChlbmQpOglieAlscgorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjUvbW9kXzFfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92NS9tb2RfMV8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2YwY2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjUvbW9kXzFfMS5hc20KQEAgLTAsMCArMSwxMjkgQEAKK2RubCAgQVJNIG1wbl9tb2RfMV8xcAorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIFN0cm9uZ0FSTQkgLQorQyBYU2NhbGUJID8KK0MgQ29ydGV4LUE3CSA/CitDIENvcnRleC1BOAkgPworQyBDb3J0ZXgtQTkJIDcKK0MgQ29ydGV4LUExNQkgNgorCitkZWZpbmUoYGFwJywgYHIwJykKK2RlZmluZShgbicsICBgcjEnKQorZGVmaW5lKGBkJywgIGByMicpCitkZWZpbmUoYGNwcycsYHIzJykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9tb2RfMV8xcCkKKwlwdXNoCXtyNC1yMTB9CisJYWRkCXIwLCByMCwgcjEsIGFzbCAjMgorCWxkcglyNSwgW3IwLCAjLTRdIQorCWxkcglyMTIsIFtyMCwgIy00XSEKKwlzdWJzCXIxLCByMSwgIzIKKwlibGUJTCg0KQorCWxkcglyOCwgW3IzLCAjMTJdCisJbW92CXI0LCByMTIKKwltb3YJcjEwLCByNQorCXVtdWxsCXI3LCByNSwgcjEwLCByOAorCXN1YglyMSwgcjEsICMxCisJYglMKG1pZCkKKworTCh0b3ApOglhZGRzCXIxMiwgcjYsIHI3CisJYWRjcwlyMTAsIHI0LCByNQorCXN1YglyMSwgcjEsICMxCisJbW92CXI2LCAjMAorCW1vdmNzCXI2LCByOAorCXVtdWxsCXI3LCByNSwgcjEwLCByOAorCWFkZHMJcjQsIHIxMiwgcjYKKwlzdWJjcwlyNCwgcjQsIHIyCitMKG1pZCk6CWxkcglyNiwgW3IwLCAjLTRdIQorCXRlcQlyMSwgIzAKKwlibmUJTCh0b3ApCisKKwlhZGRzCXIxMiwgcjYsIHI3CisJYWRjcwlyNSwgcjQsIHI1CisJc3ViY3MJcjUsIHI1LCByMgorTCg0KToJbGRyCXIxLCBbcjMsICM0XQorCWNtcAlyMSwgIzAKKwliZXEJTCg3KQorCWxkcglyNCwgW3IzLCAjOF0KKwl1bXVsbAlyMCwgcjYsIHI1LCByNAorCWFkZHMJcjEyLCByMCwgcjEyCisJYWRkY3MJcjYsIHI2LCAjMQorCXJzYglyMCwgcjEsICMzMgorCW1vdglyMCwgcjEyLCBsc3IgcjAKKwlvcnIJcjUsIHIwLCByNiwgYXNsIHIxCisJbW92CXIxMiwgcjEyLCBhc2wgcjEKKwliCUwoOCkKK0woNyk6CWNtcAlyNSwgcjIKKwlzdWJjcwlyNSwgcjUsIHIyCitMKDgpOglsZHIJcjAsIFtyMywgIzBdCisJdW11bGwJcjQsIHIzLCByNSwgcjAKKwlhZGQJcjUsIHI1LCAjMQorCWFkZHMJcjAsIHI0LCByMTIKKwlhZGMJcjUsIHIzLCByNQorCW11bAlyNSwgcjIsIHI1CisJc3ViCXIxMiwgcjEyLCByNQorCWNtcAlyMTIsIHIwCisJYWRkaGkJcjEyLCByMTIsIHIyCisJY21wCXIyLCByMTIKKwlzdWJscwlyMTIsIHIxMiwgcjIKKwltb3YJcjAsIHIxMiwgbHNyIHIxCisJcG9wCXtyNC1yMTB9CisJYngJcjE0CitFUElMT0dVRSgpCisKK1BST0xPR1VFKG1wbl9tb2RfMV8xcF9jcHMpCisJc3RtZmQJc3AhLCB7cjQsIHI1LCByNiwgcjE0fQorCW1vdglyNSwgcjAKKwljbHoJcjQsIHIxCisJbW92CXIwLCByMSwgYXNsIHI0CisJcnNiCXI2LCByMCwgIzAKKwlibAltcG5faW52ZXJ0X2xpbWIKKwlzdHIJcjAsIFtyNSwgIzBdCisJc3RyCXI0LCBbcjUsICM0XQorCWNtcAlyNCwgIzAKKwliZXEJTCgyKQorCXJzYglyMSwgcjQsICMzMgorCW1vdglyMywgIzEKKwltb3YJcjMsIHIzLCBhc2wgcjQKKwlvcnIJcjMsIHIzLCByMCwgbHNyIHIxCisJbXVsCXIzLCByNiwgcjMKKwltb3YJcjQsIHIzLCBsc3IgcjQKKwlzdHIJcjQsIFtyNSwgIzhdCitMKDIpOgltdWwJcjAsIHI2LCByMAorCXN0cglyMCwgW3I1LCAjMTJdCisJbGRtZmQJc3AhLCB7cjQsIHI1LCByNiwgcGN9CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92NS9tb2RfMV8yLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL3Y1L21vZF8xXzIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMjZlY2IKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92NS9tb2RfMV8yLmFzbQpAQCAtMCwwICsxLDE1NiBAQAorZG5sICBBUk0gbXBuX21vZF8xc18ycAorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIFN0cm9uZ0FSTQkgLQorQyBYU2NhbGUJID8KK0MgQ29ydGV4LUE3CSA/CitDIENvcnRleC1BOAkgPworQyBDb3J0ZXgtQTkJIDQuMjUKK0MgQ29ydGV4LUExNQkgMworCitkZWZpbmUoYGFwJywgYHIwJykKK2RlZmluZShgbicsICBgcjEnKQorZGVmaW5lKGBkJywgIGByMicpCitkZWZpbmUoYGNwcycsYHIzJykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9tb2RfMXNfMnApCisJcHVzaAl7cjQtcjEwfQorCXRzdAluLCAjMQorCWFkZAlyNywgcjMsICM4CisJbGRtaWEJcjcsIHtyNywgcjgsIHIxMn0JQyBsb2FkIEIxLCBCMiwgQjMKKwlhZGQJYXAsIGFwLCBuLCBsc2wgIzIJQyBwdXQgYXAgYXQgb3BlcmFuZCBlbmQKKwliZXEJTChldm4pCisKK0wob2RkKToJc3VicwluLCBuLCAjMQorCWJlcQlMKDEpCisJbGRtZGIJYXAhLCB7cjQscjYscjl9CisJbW92CXIxMCwgIzAKKwl1bWxhbAlyNCwgcjEwLCByNiwgcjcKKwl1bWxhbAlyNCwgcjEwLCByOSwgcjgKKwliCUwoY29tKQorCitMKGV2bik6CWxkbWRiCWFwISwge3I0LHIxMH0KK0woY29tKToJc3VicwluLCBuLCAjMgorCWJsZQlMKGVuZCkKKwlsZG1kYglhcCEsIHtyNSxyNn0KKwliCUwobWlkKQorCitMKHRvcCk6CW1vdglyOSwgIzAKKwl1bWxhbAlyNSwgcjksIHI2LCByNwkJQyBCMQorCXVtbGFsCXI1LCByOSwgcjQsIHI4CQlDIEIyCisJbGRtZGIJYXAhLCB7cjQscjZ9CisJdW1sYWwJcjUsIHI5LCByMTAsIHIxMglDIEIzCisJYmxlCUwoeGl0KQorCW1vdglyMTAsICMwCisJdW1sYWwJcjQsIHIxMCwgcjYsIHI3CQlDIEIxCisJdW1sYWwJcjQsIHIxMCwgcjUsIHI4CQlDIEIyCisJbGRtZGIJYXAhLCB7cjUscjZ9CisJdW1sYWwJcjQsIHIxMCwgcjksIHIxMglDIEIzCitMKG1pZCk6CXN1YnMJbiwgbiwgIzQKKwliZ2UJTCh0b3ApCisKKwltb3YJcjksICMwCisJdW1sYWwJcjUsIHI5LCByNiwgcjcJCUMgQjEKKwl1bWxhbAlyNSwgcjksIHI0LCByOAkJQyBCMgorCXVtbGFsCXI1LCByOSwgcjEwLCByMTIJQyBCMworCW1vdglyNCwgcjUKKworTChlbmQpOgltb3ZnZQkgICByOSwgcjEwCQlDIGV4ZWN1dGVkIGlmZiBjb21pbmcgdmlhIHhpdAorCWxkcglyNiwgW3IzLCAjNF0JCUMgY3BzWzFdID0gY250CisJbW92CXI1LCAjMAorCXVtbGFsCXI0LCByNSwgcjksIHI3CisJbW92CXI3LCByNSwgbHNsIHI2CitMKHgpOglyc2IJcjEsIHI2LCAjMzIKKwlvcnIJcjgsIHI3LCByNCwgbHNyIHIxCisJbW92CXI5LCByNCwgbHNsIHI2CisJbGRyCXI1LCBbcjMsICMwXQorCWFkZAlyMCwgcjgsICMxCisJdW11bGwJcjEyLCByMSwgcjgsIHI1CisJYWRkcwlyNCwgcjEyLCByOQorCWFkYwlyMSwgcjEsIHIwCisJbXVsCXI1LCByMiwgcjEKKwlzdWIJcjksIHI5LCByNQorCWNtcAlyOSwgcjQKKwlhZGRoaQlyOSwgcjksIHIyCisJY21wCXIyLCByOQorCXN1YmxzCXI5LCByOSwgcjIKKwltb3YJcjAsIHI5LCBsc3IgcjYKKwlwb3AJe3I0LXIxMH0KKwlieAlyMTQKKworTCh4aXQpOgltb3YJcjEwLCAjMAorCXVtbGFsCXI0LCByMTAsIHI2LCByNwkJQyBCMQorCXVtbGFsCXI0LCByMTAsIHI1LCByOAkJQyBCMgorCXVtbGFsCXI0LCByMTAsIHI5LCByMTIJQyBCMworCWIJTChlbmQpCisKK0woMSk6CWxkcglyNiwgW3IzLCAjNF0JCUMgY3BzWzFdID0gY250CisJbGRyCXI0LCBbYXAsICMtNF0JCUMgYXBbMF0KKwltb3YJcjcsICMwCisJYglMKHgpCitFUElMT0dVRSgpCisKK1BST0xPR1VFKG1wbl9tb2RfMXNfMnBfY3BzKQorCXB1c2gJe3I0LXI4LCByMTR9CisJY2x6CXI0LCByMQorCW1vdglyNSwgcjEsIGxzbCByNAkJQyBiIDw8PSBjbnQKKwltb3YJcjYsIHIwCQkJQyByNiA9IGNwcworCW1vdglyMCwgcjUKKwlibAltcG5faW52ZXJ0X2xpbWIKKwlyc2IJcjMsIHI0LCAjMzIKKwltb3YJcjMsIHIwLCBsc3IgcjMKKwltb3YJcjIsICMxCisJb3JyCXIzLCByMywgcjIsIGxzbCByNAorCXJzYglyMSwgcjUsICMwCisJbXVsCXIyLCByMSwgcjMKKwl1bXVsbAlyMywgcjEyLCByMiwgcjAKKwlhZGQJcjEyLCByMiwgcjEyCisJbXZuCXIxMiwgcjEyCisJbXVsCXIxLCByNSwgcjEyCisJY21wCXIxLCByMworCWFkZGhpCXIxLCByMSwgcjUKKwl1bXVsbAlyMTIsIHI3LCByMSwgcjAKKwlhZGQJcjcsIHIxLCByNworCW12bglyNywgcjcKKwltdWwJcjMsIHI1LCByNworCWNtcAlyMywgcjEyCisJYWRkaGkJcjMsIHIzLCByNQorCW1vdglyNSwgcjIsIGxzciByNAorCW1vdglyNywgcjEsIGxzciByNAorCW1vdglyOCwgcjMsIGxzciByNAorCXN0bWlhCXI2LCB7cjAscjQscjUscjcscjh9CUMgZmlsbCBjcHMKKwlwb3AJe3I0LXI4LCBwY30KK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL3Y2L2FkZG11bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL3Y2L2FkZG11bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzhhZjU4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjYvYWRkbXVsXzEuYXNtCkBAIC0wLDAgKzEsMTEyIEBACitkbmwgIEFSTSBtcG5fYWRkbXVsXzEuCisKK2RubCAgQ29weXJpZ2h0IDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIFN0cm9uZ0FSTToJIC0KK0MgWFNjYWxlCSAtCitDIEFSTTExCQkgNi40CitDIENvcnRleC1BNwkgNS4yNQorQyBDb3J0ZXgtQTgJIDcKK0MgQ29ydGV4LUE5CSAzLjI1CitDIENvcnRleC1BMTUJIDQKKworQyBUT0RPCitDICAqIE1pY3JvLW9wdGltaXNlIGZlZWQtaW4gY29kZS4KK0MgICogT3B0aW1pc2UgZm9yIG49MSwyIGJ5IGRlbGF5aW5nIHJlZ2lzdGVyIHNhdmluZy4KK0MgICogVHJ5IHVzaW5nIGxkbS9zdG0uCisKK2RlZmluZShgcnAnLGByMCcpCitkZWZpbmUoYHVwJyxgcjEnKQorZGVmaW5lKGBuJywgYHIyJykKK2RlZmluZShgdjAnLGByMycpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fYWRkbXVsXzEpCisJc3RtZmQJc3AhLCB7IHI0LCByNSwgcjYsIHI3IH0KKworCWFuZHMJcjYsIG4sICMzCisJbW92CXIxMiwgIzAKKwliZXEJTChmaTApCisJY21wCXI2LCAjMgorCWJjYwlMKGZpMSkKKwliZXEJTChmaTIpCisKK0woZmkzKToJbGRyCXI0LCBbdXBdLCAjNAorCWxkcglyNiwgW3JwLCAjMF0KKwlsZHIJcjUsIFt1cF0sICM0CisJYglMKGxvMykKKworTChmaTApOglsZHIJcjUsIFt1cF0sICM0CisJbGRyCXI3LCBbcnBdLCAjNAorCWxkcglyNCwgW3VwXSwgIzQKKwliCUwobG8wKQorCitMKGZpMSk6CWxkcglyNCwgW3VwXSwgIzQKKwlsZHIJcjYsIFtycF0sICM4CisJc3VicwluLCBuLCAjMQorCWJlcQlMKDEpCisJbGRyCXI1LCBbdXBdLCAjNAorCWIJTChsbzEpCisKK0woZmkyKToJbGRyCXI1LCBbdXBdLCAjNAorCWxkcglyNywgW3JwXSwgIzEyCisJbGRyCXI0LCBbdXBdLCAjNAorCWIJTChsbzIpCisKKwlBTElHTigxNikKK0wodG9wKToJbGRyCXI2LCBbcnAsICMtOF0KKwlsZHIJcjUsIFt1cF0sICM0CisJc3RyCXI3LCBbcnAsICMtMTJdCitMKGxvMSk6CXVtYWFsCXI2LCByMTIsIHI0LCB2MAorCWxkcglyNywgW3JwLCAjLTRdCisJbGRyCXI0LCBbdXBdLCAjNAorCXN0cglyNiwgW3JwLCAjLThdCitMKGxvMCk6CXVtYWFsCXI3LCByMTIsIHI1LCB2MAorCWxkcglyNiwgW3JwLCAjMF0KKwlsZHIJcjUsIFt1cF0sICM0CisJc3RyCXI3LCBbcnAsICMtNF0KK0wobG8zKToJdW1hYWwJcjYsIHIxMiwgcjQsIHYwCisJbGRyCXI3LCBbcnAsICM0XQorCWxkcglyNCwgW3VwXSwgIzQKKwlzdHIJcjYsIFtycF0sICMxNgorTChsbzIpOgl1bWFhbAlyNywgcjEyLCByNSwgdjAKKwlzdWJzCW4sIG4sICM0CisJYmhpCUwodG9wKQorCisJbGRyCXI2LCBbcnAsICMtOF0KKwlzdHIJcjcsIFtycCwgIy0xMl0KK0woMSk6CXVtYWFsCXI2LCByMTIsIHI0LCB2MAorCXN0cglyNiwgW3JwLCAjLThdCisJbW92CXIwLCByMTIKKwlsZG1mZAlzcCEsIHsgcjQsIHI1LCByNiwgcjcgfQorCWJ4CWxyCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92Ni9hZGRtdWxfMi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92Ni9hZGRtdWxfMi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlkMGI4ZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL3Y2L2FkZG11bF8yLmFzbQpAQCAtMCwwICsxLDEyNSBAQAorZG5sICBBUk0gbXBuX2FkZG11bF8yLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTIsIDIwMTMsIDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIFN0cm9uZ0FSTToJIC0KK0MgWFNjYWxlCSAtCitDIEFSTTExCQkgNC42OAorQyBDb3J0ZXgtQTUJIDMuNjMKK0MgQ29ydGV4LUE3CSAzLjY1CitDIENvcnRleC1BOAkgNC4wCitDIENvcnRleC1BOQkgMi4yNQorQyBDb3J0ZXgtQTE1CSAyLjUKK0MgQ29ydGV4LUExNwkgMi4xMworQyBDb3J0ZXgtQTUzCSAzLjUKKworZGVmaW5lKGBycCcsYHIwJykKK2RlZmluZShgdXAnLGByMScpCitkZWZpbmUoYG4nLCBgcjInKQorZGVmaW5lKGB2cCcsYHIzJykKKworZGVmaW5lKGB2MCcsYHI2JykKK2RlZmluZShgdjEnLGByNycpCitkZWZpbmUoYHUwJyxgcjMnKQorZGVmaW5lKGB1MScsYHI5JykKKworZGVmaW5lKGBjeWEnLGByOCcpCitkZWZpbmUoYGN5YicsYHIxMicpCisKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9hZGRtdWxfMikKKwlwdXNoCXsgcjQtcjkgfQorCisJbGRyZAl2MCwgdjEsIFt2cCwgIzBdCisJbW92CWN5YSwgIzAKKwltb3YJY3liLCAjMAorCisJdHN0CW4sICMxCisJYmVxCUwoZXZuKQorCitMKG9kZCk6CWxkcgl1MSwgW3VwLCAjMF0KKwlsZHIJcjQsIFtycCwgIzBdCisJdHN0CW4sICMyCisJYmVxCUwoZmkxKQorTChmaTMpOglzdWIJdXAsIHVwLCAjOAorCXN1YglycCwgcnAsICM4CisJYglMKGxvMykKK0woZmkxKToJc3ViCW4sIG4sICMxCisJYglMKHRvcCkKKworTChldm4pOglsZHIJdTAsIFt1cCwgIzBdCisJbGRyCXI1LCBbcnAsICMwXQorCXRzdAluLCAjMgorCWJuZQlMKGZpMikKK0woZmkwKToJc3ViCXVwLCB1cCwgIzQKKwlzdWIJcnAsIHJwLCAjNAorCWIJTChsbzApCitMKGZpMik6CXN1Ygl1cCwgdXAsICMxMgorCXN1YglycCwgcnAsICMxMgorCWIJTChsbzIpCisKKwlBTElHTigxNikKK0wodG9wKToJbGRyCXI1LCBbcnAsICM0XQorCXVtYWFsCXI0LCBjeWEsIHUxLCB2MAorCWxkcgl1MCwgW3VwLCAjNF0KKwl1bWFhbAlyNSwgY3liLCB1MSwgdjEKKwlzdHIJcjQsIFtycCwgIzBdCitMKGxvMCk6CWxkcglyNCwgW3JwLCAjOF0KKwl1bWFhbAlyNSwgY3lhLCB1MCwgdjAKKwlsZHIJdTEsIFt1cCwgIzhdCisJdW1hYWwJcjQsIGN5YiwgdTAsIHYxCisJc3RyCXI1LCBbcnAsICM0XQorTChsbzMpOglsZHIJcjUsIFtycCwgIzEyXQorCXVtYWFsCXI0LCBjeWEsIHUxLCB2MAorCWxkcgl1MCwgW3VwLCAjMTJdCisJdW1hYWwJcjUsIGN5YiwgdTEsIHYxCisJc3RyCXI0LCBbcnAsICM4XQorTChsbzIpOglsZHIJcjQsIFtycCwgIzE2XSEKKwl1bWFhbAlyNSwgY3lhLCB1MCwgdjAKKwlsZHIJdTEsIFt1cCwgIzE2XSEKKwl1bWFhbAlyNCwgY3liLCB1MCwgdjEKKwlzdHIJcjUsIFtycCwgIy00XQorCXN1YnMJbiwgbiwgIzQKKwliaGkJTCh0b3ApCisKK0woZW5kKToJdW1hYWwJcjQsIGN5YSwgdTEsIHYwCisJdW1hYWwJY3lhLCBjeWIsIHUxLCB2MQorCXN0cglyNCwgW3JwLCAjMF0KKwlzdHIJY3lhLCBbcnAsICM0XQorCW1vdglyMCwgY3liCisKKwlwb3AJeyByNC1yOSB9CisJYngJcjE0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92Ni9hZGRtdWxfMy5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92Ni9hZGRtdWxfMy5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE0OTBjZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL3Y2L2FkZG11bF8zLmFzbQpAQCAtMCwwICsxLDE5MSBAQAorZG5sICBBUk0gbXBuX2FkZG11bF8zLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIFN0cm9uZ0FSTToJIC0KK0MgWFNjYWxlCSAtCitDIEFSTTExCQkgNC4zMworQyBDb3J0ZXgtQTUJIDMuMjgKK0MgQ29ydGV4LUE3CSAzLjI1CitDIENvcnRleC1BOAkgMy4xNworQyBDb3J0ZXgtQTkJIDIuMTI1CitDIENvcnRleC1BMTUJIDIKK0MgQ29ydGV4LUExNwkgMi4xMQorQyBDb3J0ZXgtQTUzCSA0LjE4CisKK0MgVE9ETworQyAgKiBVc2UgYSBmYXN0IHBhdGggZm9yIG4gPD0gS0FSQVRTVUJBX01VTF9USFJFU0hPTEQgdXNpbmcgYSBqdW1wIHRhYmxlLAorQyAgICBhdm9pZGluZyB0aGUgY3VycmVudCBtdWx0aXBseS4KK0MgICogU3RhcnQgdGhlIGZpcnN0IG11bHRpcGx5IG9yIG11bHRpcGxpZXMgZWFybHkuCisKK2RlZmluZShgcnAnLGByMCcpCitkZWZpbmUoYHVwJyxgcjEnKQorZGVmaW5lKGBuJywgYHIyJykKK2RlZmluZShgdnAnLGByMycpCisKK2RlZmluZShgdjAnLGByNCcpICBkZWZpbmUoYHYxJyxgcjUnKSAgZGVmaW5lKGB2MicsYHI2JykKK2RlZmluZShgdTAnLGByMycpICBkZWZpbmUoYHUxJyxgcjE0JykKK2RlZmluZShgdzAnLGByNycpICBkZWZpbmUoYHcxJyxgcjgnKSAgZGVmaW5lKGB3MicsYHI5JykKK2RlZmluZShgY3kwJyxgcjEwJykgIGRlZmluZShgY3kxJyxgcjExJykgZGVmaW5lKGBjeTInLGByMTInKQorCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fYWRkbXVsXzMpCisJcHVzaAl7IHI0LXIxMSwgcjE0IH0KKworCWxkcgl3MCwgPTB4YWFhYWFhYWIJCUMgM157LTF9IG1vZCAyXjMyCisJbGRtCXZwLCB7IHYwLHYxLHYyIH0KKwltb3YJY3kwLCAjMAorCW1vdgljeTEsICMwCisJbW92CWN5MiwgIzAKKworQyBUcmlja3kgbiBtb2QgNgorCW11bAl3MCwgdzAsIG4JCUMgbiAqIDNeey0xfSBtb2QgMl4zMgorCWFuZAl3MCwgdzAsICMweGMwMDAwMDAxCUMgcHNldWRvLUNSVCBtb2QgMywyCisJc3ViCW4sIG4sICMzCitpZmRlZihgUElDJyxgCisJYWRkCXBjLCBwYywgdzAsIHJvciAkMjgKKwlub3AKKwliCUwoYjApCisJYglMKGIyKQorCWIJTChiNCkKKwkud29yZAkweGU3ZjAwMGYwCUMgdWRmCisJYglMKGIzKQorCWIJTChiNSkKKwliCUwoYjEpCisnLGAKKwlsZHIJcGMsIFtwYywgdzAsIHJvciAkMjhdCisJbm9wCisJLndvcmQJTChiMCksIEwoYjIpLCBMKGI0KSwgMCwgTChiMyksIEwoYjUpLCBMKGIxKQorJykKKworTChiNSk6CWFkZAl1cCwgdXAsICMtOAorCWxkcgl3MSwgW3JwLCAjMF0KKwlsZHIJdzIsIFtycCwgIzRdCisJbGRyCXUxLCBbdXAsICM4XQorCWIJTChsbzUpCisKK0woYjQpOglhZGQJcnAsIHJwLCAjLTQKKwlhZGQJdXAsIHVwLCAjLTEyCisJbGRyCXcyLCBbcnAsICM0XQorCWxkcgl3MCwgW3JwLCAjOF0KKwlsZHIJdTAsIFt1cCwgIzEyXQorCWIJTChsbzQpCisKK0woYjMpOglhZGQJcnAsIHJwLCAjLTgKKwlhZGQJdXAsIHVwLCAjLTE2CisJbGRyCXcwLCBbcnAsICM4XQorCWxkcgl3MSwgW3JwLCAjMTJdCisJbGRyCXUxLCBbdXAsICMxNl0KKwliCUwobG8zKQorCitMKGIxKToJYWRkCXJwLCBycCwgIzgKKwlsZHIJdzIsIFtycCwgIy04XQorCWxkcgl3MCwgW3JwLCAjLTRdCisJbGRyCXUxLCBbdXAsICMwXQorCWIJTChsbzEpCisKK0woYjApOglhZGQJcnAsIHJwLCAjNAorCWFkZAl1cCwgdXAsICMtNAorCWxkcgl3MCwgW3JwLCAjLTRdCisJbGRyCXcxLCBbcnAsICMwXQorCWxkcgl1MCwgW3VwLCAjNF0KKwliCUwobG8wKQorCitMKGIyKToJYWRkCXJwLCBycCwgIzEyCisJYWRkCXVwLCB1cCwgIzQKKwlsZHIJdzEsIFtycCwgIy0xMl0KKwlsZHIJdzIsIFtycCwgIy04XQorCWxkcgl1MCwgW3VwLCAjLTRdCisKKwlBTElHTigxNikKK0wodG9wKToJbGRyCXcwLCBbcnAsICMtNF0KKwl1bWFhbAl3MSwgY3kwLCB1MCwgdjAKKwlsZHIJdTEsIFt1cCwgIzBdCisJdW1hYWwJdzIsIGN5MSwgdTAsIHYxCisJc3RyCXcxLCBbcnAsICMtMTJdCisJdW1hYWwJdzAsIGN5MiwgdTAsIHYyCitMKGxvMSk6CWxkcgl3MSwgW3JwLCAjMF0KKwl1bWFhbAl3MiwgY3kwLCB1MSwgdjAKKwlsZHIJdTAsIFt1cCwgIzRdCisJdW1hYWwJdzAsIGN5MSwgdTEsIHYxCisJc3RyCXcyLCBbcnAsICMtOF0KKwl1bWFhbAl3MSwgY3kyLCB1MSwgdjIKK0wobG8wKToJbGRyCXcyLCBbcnAsICM0XQorCXVtYWFsCXcwLCBjeTAsIHUwLCB2MAorCWxkcgl1MSwgW3VwLCAjOF0KKwl1bWFhbAl3MSwgY3kxLCB1MCwgdjEKKwlzdHIJdzAsIFtycCwgIy00XQorCXVtYWFsCXcyLCBjeTIsIHUwLCB2MgorTChsbzUpOglsZHIJdzAsIFtycCwgIzhdCisJdW1hYWwJdzEsIGN5MCwgdTEsIHYwCisJbGRyCXUwLCBbdXAsICMxMl0KKwl1bWFhbAl3MiwgY3kxLCB1MSwgdjEKKwlzdHIJdzEsIFtycCwgIzBdCisJdW1hYWwJdzAsIGN5MiwgdTEsIHYyCitMKGxvNCk6CWxkcgl3MSwgW3JwLCAjMTJdCisJdW1hYWwJdzIsIGN5MCwgdTAsIHYwCisJbGRyCXUxLCBbdXAsICMxNl0KKwl1bWFhbAl3MCwgY3kxLCB1MCwgdjEKKwlzdHIJdzIsIFtycCwgIzRdCisJdW1hYWwJdzEsIGN5MiwgdTAsIHYyCitMKGxvMyk6CWxkcgl3MiwgW3JwLCAjMTZdCisJdW1hYWwJdzAsIGN5MCwgdTEsIHYwCisJbGRyCXUwLCBbdXAsICMyMF0KKwl1bWFhbAl3MSwgY3kxLCB1MSwgdjEKKwlzdHIJdzAsIFtycCwgIzhdCisJdW1hYWwJdzIsIGN5MiwgdTEsIHYyCitMKGxvMik6CXN1YnMJbiwgbiwgIzYKKwlhZGQJdXAsIHVwLCAjMjQKKwlhZGQJcnAsIHJwLCAjMjQKKwliZ2UJTCh0b3ApCisKK0woZW5kKToJdW1hYWwJdzEsIGN5MCwgdTAsIHYwCisJbGRyCXUxLCBbdXAsICMwXQorCXVtYWFsCXcyLCBjeTEsIHUwLCB2MQorCXN0cgl3MSwgW3JwLCAjLTEyXQorCW1vdgl3MCwgIzAKKwl1bWFhbAl3MCwgY3kyLCB1MCwgdjIKKwl1bWFhbAl3MiwgY3kwLCB1MSwgdjAKKwl1bWFhbAl3MCwgY3kxLCB1MSwgdjEKKwlzdHIJdzIsIFtycCwgIy04XQorCXVtYWFsCWN5MSwgY3kyLCB1MSwgdjIKKwlhZGRzCXcwLCB3MCwgY3kwCisJc3RyCXcwLCBbcnAsICMtNF0KKwlhZGNzCXcxLCBjeTEsICMwCisJc3RyCXcxLCBbcnAsICMwXQorCWFkYwlyMCwgY3kyLCAjMAorCisJcG9wCXsgcjQtcjExLCBwYyB9CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92Ni9kaXZlXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjYvZGl2ZV8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmRlODE0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjYvZGl2ZV8xLmFzbQpAQCAtMCwwICsxLDE0OSBAQAorZG5sICBBUk0gdjYgbXBuX2RpdmV4YWN0XzEKKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDEyLCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICAgICAgICBjeWNsZXMvbGltYiAgICAgICBjeWNsZXMvbGltYgorQyAgICAgICAgICAgICAgIG5vcm0gICAgdW5vcm0gICAgbW9kZXhhY3RfMWNfb2RkCitDIFN0cm9uZ0FSTQkgLQkgLQorQyBYU2NhbGUJIC0JIC0KK0MgQ29ydGV4LUE3CSA/CSA/CitDIENvcnRleC1BOAkgPwkgPworQyBDb3J0ZXgtQTkJIDkJMTAJCSA5CitDIENvcnRleC1BMTUJIDcJIDcJCSA3CisKK0MgQXJjaGl0ZWN0dXJlIHJlcXVpcmVtZW50czoKK0MgdjUJLQorQyB2NXQJY2x6CitDIHY1dGUJLQorQyB2Ngl1bWFhbAorQyB2NnQyCS0KK0MgdjdhCS0KKworZGVmaW5lKGBycCcsIGByMCcpCitkZWZpbmUoYHVwJywgYHIxJykKK2RlZmluZShgbicsICBgcjInKQorZGVmaW5lKGBkJywgIGByMycpCisKK2RlZmluZShgY3knLCAgYHI3JykKK2RlZmluZShgY250JywgYHI2JykKK2RlZmluZShgdG5jJywgYHIxMCcpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fZGl2ZXhhY3RfMSkKKwlwdXNoCXtyNCxyNSxyNixyNyxyOCxyOX0KKworCXRzdAlkLCAjMQorCisJcnNiCXI0LCBkLCAjMAorCWFuZAlyNCwgcjQsIGQKKwljbHoJcjQsIHI0CisJcnNiCWNudCwgcjQsICMzMQkJQyBjb3VudF90cmFpbGluZ196ZXJvcworCW1vdglkLCBkLCBsc3IgY250CisKK0MgYmludmVydCBsaW1iCisJTEVBKAlyNCwgYmludmVydF9saW1iX3RhYmxlKQorCWFuZAlyMTIsIGQsICMyNTQKKwlsZHJiCXI0LCBbcjQsIHIxMiwgbHNyICMxXQorCW11bAlyMTIsIHI0LCByNAorCW11bAlyMTIsIGQsIHIxMgorCXJzYglyMTIsIHIxMiwgcjQsIGxzbCAjMQorCW11bAlyNCwgcjEyLCByMTIKKwltdWwJcjQsIGQsIHI0CisJcnNiCXI0LCByNCwgcjEyLCBsc2wgIzEJQyByNCA9IGludmVyc2UKKworCWxkcglyNSwgW3VwXSwgIzQJCUMgdXBbMF0KKwltb3YJY3ksICMwCisJcnNiCXI4LCByNCwgIzAJCUMgcjggPSAtaW52ZXJzZQorCWJlcQlMKHVubm9ybSkKKworTChub3JtKToKKwlzdWJzCW4sIG4sICMxCisJbXVsCXI1LCByNSwgcjQKKwliZXEJTChlbmQpCisKKwlBTElHTigxNikKK0wodG9wKToJbGRyCXI5LCBbdXBdLCAjNAorCW1vdglyMTIsICMwCisJc3RyCXI1LCBbcnBdLCAjNAorCXVtYWFsCXIxMiwgY3ksIHI1LCBkCisJbXVsCXI1LCByOSwgcjQKKwltbGEJcjUsIGN5LCByOCwgcjUKKwlzdWJzCW4sIG4sICMxCisJYm5lCUwodG9wKQorCitMKGVuZCk6CXN0cglyNSwgW3JwXQorCXBvcAl7cjQscjUscjYscjcscjgscjl9CisJYngJcjE0CisKK0wodW5ub3JtKToKKwlwdXNoCXtyMTAscjExfQorCXJzYgl0bmMsIGNudCwgIzMyCisJbW92CXIxMSwgcjUsIGxzciBjbnQKKwlzdWJzCW4sIG4sICMxCisJYmVxCUwoZWR4KQorCisJbGRyCXIxMiwgW3VwXSwgIzQKKwlvcnIJcjksIHIxMSwgcjEyLCBsc2wgdG5jCisJbW92CXIxMSwgcjEyLCBsc3IgY250CisJbXVsCXI1LCByOSwgcjQKKwlzdWJzCW4sIG4sICMxCisJYmVxCUwoZWR1KQorCisJQUxJR04oMTYpCitMKHRwdSk6CWxkcglyMTIsIFt1cF0sICM0CisJb3JyCXI5LCByMTEsIHIxMiwgbHNsIHRuYworCW1vdglyMTEsIHIxMiwgbHNyIGNudAorCW1vdglyMTIsICMwCisJc3RyCXI1LCBbcnBdLCAjNAorCXVtYWFsCXIxMiwgY3ksIHI1LCBkCisJbXVsCXI1LCByOSwgcjQKKwltbGEJcjUsIGN5LCByOCwgcjUKKwlzdWJzCW4sIG4sICMxCisJYm5lCUwodHB1KQorCitMKGVkdSk6CXN0cglyNSwgW3JwXSwgIzQKKwltb3YJcjEyLCAjMAorCXVtYWFsCXIxMiwgY3ksIHI1LCBkCisJbXVsCXI1LCByMTEsIHI0CisJbWxhCXI1LCBjeSwgcjgsIHI1CisJc3RyCXI1LCBbcnBdCisJcG9wCXtyMTAscjExfQorCXBvcAl7cjQscjUscjYscjcscjgscjl9CisJYngJcjE0CisKK0woZWR4KToJbXVsCXI1LCByMTEsIHI0CisJc3RyCXI1LCBbcnBdCisJcG9wCXtyMTAscjExfQorCXBvcAl7cjQscjUscjYscjcscjgscjl9CisJYngJcjE0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92Ni9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92Ni9nbXAtbXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVhN2M1NQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL3Y2L2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDE4NyBAQAorLyogZ21wLW1wYXJhbS5oIC0tIENvbXBpbGVyL21hY2hpbmUgcGFyYW1ldGVyIGhlYWRlciBmaWxlLgorCitDb3B5cmlnaHQgMjAxOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2RlZmluZSBHTVBfTElNQl9CSVRTIDMyCisjZGVmaW5lIEdNUF9MSU1CX0JZVEVTIDQKKworLyogNzAwIE1IeiBBUk0xMSAocmFzcGJlcnJ5IHBpKSAqLworLyogRkZUIHR1bmluZyBsaW1pdCA9IDgsMDg4LDc3NSAqLworLyogR2VuZXJhdGVkIGJ5IHR1bmV1cC5jLCAyMDE5LTEwLTIzLCBnY2MgOC4zICovCisKKyNkZWZpbmUgRElWUkVNXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgIDAgIC8qIHByZWludiBhbHdheXMgKi8KKyNkZWZpbmUgRElWUkVNXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PRF8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFOX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgIDcKKyNkZWZpbmUgTU9EXzFVX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgIDYKKyNkZWZpbmUgTU9EXzFfMV9UT19NT0RfMV8yX1RIUkVTSE9MRCAgICAgICAgIDAgIC8qIG5ldmVyIG1wbl9tb2RfMV8xcCAqLworI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICBNUF9TSVpFX1RfTUFYCisjZGVmaW5lIFBSRUlOVl9NT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgIDE5CisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAgICAxICAvKiBwcmVpbnYgYWx3YXlzICovCisjZGVmaW5lIERJVl9RUl8xTl9QSTFfTUVUSE9EICAgICAgICAgICAgICAgICAxICAvKiA3MS42MSUgZmFzdGVyIHRoYW4gMiAqLworI2RlZmluZSBESVZfUVJfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICBNUF9TSVpFX1RfTUFYICAvKiBuZXZlciAqLworI2RlZmluZSBESVZfUVJfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICBNUF9TSVpFX1RfTUFYICAvKiBuZXZlciAqLworI2RlZmluZSBESVZfUVJfMl9QSTJfVEhSRVNIT0xEICAgICAgICAgICBNUF9TSVpFX1RfTUFYICAvKiBuZXZlciAqLworI2RlZmluZSBESVZFWEFDVF8xX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIEJNT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgICAgICAgIDM4CisKKyNkZWZpbmUgRElWXzFfVlNfTVVMXzFfUEVSQ0VOVCAgICAgICAgICAgICAyNTEKKworI2RlZmluZSBNVUxfVE9PTTIyX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzOAorI2RlZmluZSBNVUxfVE9PTTMzX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDEzNAorI2RlZmluZSBNVUxfVE9PTTQ0X1RIUkVTSE9MRCAgICAgICAgICAgICAgIDUxMgorI2RlZmluZSBNVUxfVE9PTTZIX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1VTF9UT09NOEhfVEhSRVNIT0xEICAgICAgICAgICAgICAgNjIwCisKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNDNfVEhSRVNIT0xEICAgICAyMDkKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNTNfVEhSRVNIT0xEICAgICA2MjUKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNTNfVEhSRVNIT0xEICAgICAyMDkKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNjNfVEhSRVNIT0xEICAgICAyMTEKKyNkZWZpbmUgTVVMX1RPT000M19UT19UT09NNTRfVEhSRVNIT0xEICAgICAzMDAKKworI2RlZmluZSBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDU1CisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgICAgMjAwCisjZGVmaW5lIFNRUl9UT09NNF9USFJFU0hPTEQgICAgICAgICAgICAgICAgNDcwCisjZGVmaW5lIFNRUl9UT09NNl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNjE0CisjZGVmaW5lIFNRUl9UT09NOF9USFJFU0hPTEQgICAgICAgICAgICAgICAgODgyCisKKyNkZWZpbmUgTVVMTUlEX1RPT000Ml9USFJFU0hPTEQgICAgICAgICAgICAgNjIKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAyMworI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAyNgorCisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgNTY1ICAvKiBrID0gNSAqLworI2RlZmluZSBNVUxfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgNTY1LCA1fSwgeyAgICAgMjUsIDZ9LCB7ICAgICAxMywgNX0sIHsgICAgIDI3LCA2fSwgXAorICAgIHsgICAgIDE1LCA1fSwgeyAgICAgMzEsIDZ9LCB7ICAgICAyOCwgN30sIHsgICAgIDE1LCA2fSwgXAorICAgIHsgICAgIDMzLCA3fSwgeyAgICAgMTcsIDZ9LCB7ICAgICAzNSwgN30sIHsgICAgIDE5LCA2fSwgXAorICAgIHsgICAgIDM5LCA3fSwgeyAgICAgMjEsIDZ9LCB7ICAgICA0MywgN30sIHsgICAgIDIzLCA2fSwgXAorICAgIHsgICAgIDQ3LCA3fSwgeyAgICAgMjcsIDh9LCB7ICAgICAxNSwgN30sIHsgICAgIDM1LCA4fSwgXAorICAgIHsgICAgIDE5LCA3fSwgeyAgICAgNDMsIDh9LCB7ICAgICAyMywgN30sIHsgICAgIDUxLCA4fSwgXAorICAgIHsgICAgIDI3LCA3fSwgeyAgICAgNTUsIDh9LCB7ICAgICAzMSwgN30sIHsgICAgIDYzLCA4fSwgXAorICAgIHsgICAgIDQzLCA5fSwgeyAgICAgMjMsIDh9LCB7ICAgICA1NSwgOX0sIHsgICAgIDMxLCA4fSwgXAorICAgIHsgICAgIDcxLCA5fSwgeyAgICAgMzksIDh9LCB7ICAgICA4MywgOX0sIHsgICAgIDQ3LCA4fSwgXAorICAgIHsgICAgIDk5LCA5fSwgeyAgICAgNTUsMTB9LCB7ICAgICAzMSwgOX0sIHsgICAgIDc5LDEwfSwgXAorICAgIHsgICAgIDQ3LCA5fSwgeyAgICAxMDMsMTF9LCB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA5fSwgXAorICAgIHsgICAgMTM1LDEwfSwgeyAgICAgNzksIDl9LCB7ICAgIDE1OSwxMH0sIHsgICAgIDk1LCA5fSwgXAorICAgIHsgICAgMTkxLDEwfSwgeyAgICAxMTEsMTF9LCB7ICAgICA2MywxMH0sIHsgICAgMTU5LDExfSwgXAorICAgIHsgICAgIDk1LDEwfSwgeyAgICAyMDcsMTJ9LCB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgXAorICAgIHsgICAgMjU1LCA5fSwgeyAgICA1MTEsMTB9LCB7ICAgIDI3MSwxMX0sIHsgICAgMTU5LDEwfSwgXAorICAgIHsgICAgMzUxLDExfSwgeyAgICAxOTEsMTB9LCB7ICAgIDM5OSwxMX0sIHsgICAgMjIzLDEyfSwgXAorICAgIHsgICAgMTI3LDExfSwgeyAgICAyNTUsMTB9LCB7ICAgIDUxMSwxMX0sIHsgICAgMjg3LDEwfSwgXAorICAgIHsgICAgNjA3LDExfSwgeyAgICAzMTksMTB9LCB7ICAgIDYzOSwxMX0sIHsgICAgMzUxLDEyfSwgXAorICAgIHsgICAgMTkxLDExfSwgeyAgICA0MTUsMTN9LCB7ICAgIDEyNywxMn0sIHsgICAgMjU1LDExfSwgXAorICAgIHsgICAgNTc1LDEyfSwgeyAgICAzMTksMTF9LCB7ICAgIDY3MSwxMn0sIHsgICAgMzgzLDExfSwgXAorICAgIHsgICAgNzk5LDEyfSwgeyAgICA0NDcsMTN9LCB7ICAgIDI1NSwxMn0sIHsgICAgNTExLDExfSwgXAorICAgIHsgICAxMDIzLDEyfSwgeyAgICA3MDMsMTN9LCB7ICAgIDM4MywxMn0sIHsgICAgODk1LDE0fSwgXAorICAgIHsgICAgMjU1LDEzfSwgeyAgICA1MTEsMTJ9LCB7ICAgMTE1MSwxM30sIHsgICAgNjM5LDEyfSwgXAorICAgIHsgICAxMzQzLDEzfSwgeyAgICA3NjcsMTJ9LCB7ICAgMTU5OSwxM30sIHsgICAgODk1LDE0fSwgXAorICAgIHsgIDE2Mzg0LDE1fSwgeyAgMzI3NjgsMTZ9IH0KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTNfU0laRSA5OAorI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNTc2MAorCisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgNTMwICAvKiBrID0gNSAqLworI2RlZmluZSBTUVJfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgNTMwLCA1fSwgeyAgICAgMjUsIDZ9LCB7ICAgICAxMywgNX0sIHsgICAgIDI3LCA2fSwgXAorICAgIHsgICAgIDI4LCA3fSwgeyAgICAgMTUsIDZ9LCB7ICAgICAzMywgN30sIHsgICAgIDE3LCA2fSwgXAorICAgIHsgICAgIDM1LCA3fSwgeyAgICAgMTksIDZ9LCB7ICAgICAzOSwgN30sIHsgICAgIDIxLCA2fSwgXAorICAgIHsgICAgIDQzLCA3fSwgeyAgICAgMjMsIDZ9LCB7ICAgICA0NywgN30sIHsgICAgIDI5LCA4fSwgXAorICAgIHsgICAgIDE1LCA3fSwgeyAgICAgMzUsIDh9LCB7ICAgICAxOSwgN30sIHsgICAgIDQzLCA4fSwgXAorICAgIHsgICAgIDIzLCA3fSwgeyAgICAgNDksIDh9LCB7ICAgICAyNywgN30sIHsgICAgIDU1LCA4fSwgXAorICAgIHsgICAgIDMxLCA3fSwgeyAgICAgNjMsIDh9LCB7ICAgICA0MywgOX0sIHsgICAgIDIzLCA4fSwgXAorICAgIHsgICAgIDU1LCA5fSwgeyAgICAgMzEsIDh9LCB7ICAgICA3MSwgOX0sIHsgICAgIDM5LCA4fSwgXAorICAgIHsgICAgIDgzLCA5fSwgeyAgICAgNDcsIDh9LCB7ICAgICA5NSwgOX0sIHsgICAgIDU1LDEwfSwgXAorICAgIHsgICAgIDMxLCA5fSwgeyAgICAgNzksMTB9LCB7ICAgICA0NywgOX0sIHsgICAgMTAzLDExfSwgXAorICAgIHsgICAgIDMxLDEwfSwgeyAgICAgNjMsIDl9LCB7ICAgIDEzNSwxMH0sIHsgICAgIDc5LCA5fSwgXAorICAgIHsgICAgMTY3LDEwfSwgeyAgICAgOTUsIDl9LCB7ICAgIDE5MSwxMH0sIHsgICAgMTExLDExfSwgXAorICAgIHsgICAgIDYzLDEwfSwgeyAgICAxNDMsIDl9LCB7ICAgIDI4NywxMH0sIHsgICAgMTU5LDExfSwgXAorICAgIHsgICAgIDk1LDEwfSwgeyAgICAxOTEsIDl9LCB7ICAgIDM4MywxMn0sIHsgICAgIDYzLDExfSwgXAorICAgIHsgICAgMTI3LDEwfSwgeyAgICAyNTUsIDl9LCB7ICAgIDUxMSwxMH0sIHsgICAgMjcxLCA5fSwgXAorICAgIHsgICAgNTQzLDEwfSwgeyAgICAyODcsMTF9LCB7ICAgIDE1OSwxMH0sIHsgICAgMzUxLDExfSwgXAorICAgIHsgICAgMTkxLDEwfSwgeyAgICA0MTUsMTF9LCB7ICAgIDIyMywxMn0sIHsgICAgMTI3LDExfSwgXAorICAgIHsgICAgMjU1LDEwfSwgeyAgICA1NDMsMTF9LCB7ICAgIDI4NywxMH0sIHsgICAgNjA3LDExfSwgXAorICAgIHsgICAgMzE5LDEwfSwgeyAgICA2MzksMTF9LCB7ICAgIDM1MSwxMn0sIHsgICAgMTkxLDExfSwgXAorICAgIHsgICAgMzgzLDEwfSwgeyAgICA3NjcsMTF9LCB7ICAgIDQxNSwxM30sIHsgICAgMTI3LDEyfSwgXAorICAgIHsgICAgMjU1LDExfSwgeyAgICA2MDcsMTJ9LCB7ICAgIDMxOSwxMX0sIHsgICAgNzAzLDEyfSwgXAorICAgIHsgICAgMzgzLDExfSwgeyAgICA3OTksMTJ9LCB7ICAgIDQ0NywxMX0sIHsgICAgODk1LDEzfSwgXAorICAgIHsgICAgMjU1LDEyfSwgeyAgICA1MTEsMTF9LCB7ICAgMTAyMywxMn0sIHsgICAgNzAzLDEzfSwgXAorICAgIHsgICAgMzgzLDEyfSwgeyAgICA4OTUsMTR9LCB7ICAgIDI1NSwxM30sIHsgICAgNTExLDEyfSwgXAorICAgIHsgICAxMTUxLDEzfSwgeyAgICA2MzksMTJ9LCB7ICAgMTM0MywxM30sIHsgICAgNzY3LDEyfSwgXAorICAgIHsgICAxNTk5LDEzfSwgeyAgICA4OTUsMTR9LCB7ICAxNjM4NCwxNX0sIHsgIDMyNzY4LDE2fSB9CisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzX1NJWkUgMTA0CisjZGVmaW5lIFNRUl9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA0NDE2CisKKyNkZWZpbmUgTVVMTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNVUxMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICA1MQorI2RlZmluZSBNVUxMT19NVUxfTl9USFJFU0hPTEQgICAgICAgICAgICAxMTI3OAorI2RlZmluZSBTUVJMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAxMAorI2RlZmluZSBTUVJMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICA1NQorI2RlZmluZSBTUVJMT19TUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgODY0OAorCisjZGVmaW5lIERDX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDM2CisjZGVmaW5lIERDX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAgMTQ2CisjZGVmaW5lIERDX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDQ2CisjZGVmaW5lIERDX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTYwCisKKyNkZWZpbmUgSU5WX01VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgNzQKKyNkZWZpbmUgSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgICAxNDUKKyNkZWZpbmUgSU5WX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAxNDcKKworI2RlZmluZSBCSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgIDM3MgorI2RlZmluZSBSRURDXzFfVE9fUkVEQ18yX1RIUkVTSE9MRCAgICAgICAgICAgNgorI2RlZmluZSBSRURDXzJfVE9fUkVEQ19OX1RIUkVTSE9MRCAgICAgICAgIDE0MAorCisjZGVmaW5lIE1VX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAyODAxCisjZGVmaW5lIE1VX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAyODAxCisjZGVmaW5lIE1VUElfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDc5CisjZGVmaW5lIE1VX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAyNTQxCisjZGVmaW5lIE1VX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAyNzY0CisKKyNkZWZpbmUgUE9XTV9TRUNfVEFCTEUgIDMsMjAsMTM5LDczNAorCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgIDQ1CisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgMzQyCisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAxMjkwCisKKyNkZWZpbmUgRkFDX0RTQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAzOTAKKyNkZWZpbmUgRkFDX09ERF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICA0MzgKKworI2RlZmluZSBNQVRSSVgyMl9TVFJBU1NFTl9USFJFU0hPTEQgICAgICAgICAyNQorI2RlZmluZSBIR0NEMl9ESVYxX01FVEhPRCAgICAgICAgICAgICAgICAgICAgNSAgLyogMS4zMiUgZmFzdGVyIHRoYW4gMyAqLworI2RlZmluZSBIR0NEX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgICA4MgorI2RlZmluZSBIR0NEX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA4MQorI2RlZmluZSBIR0NEX1JFRFVDRV9USFJFU0hPTEQgICAgICAgICAgICAgNDYzMworI2RlZmluZSBHQ0RfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDM0NQorI2RlZmluZSBHQ0RFWFRfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDI2OAorI2RlZmluZSBKQUNPQklfQkFTRV9NRVRIT0QgICAgICAgICAgICAgICAgICAgMSAgLyogMy4zMCUgZmFzdGVyIHRoYW4gMiAqLworCisvKiBUdW5ldXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgdG9vayA0NTAxOCBzZWNvbmRzICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92Ni9tb2RlMW8uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjYvbW9kZTFvLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmY3N2E2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjYvbW9kZTFvLmFzbQpAQCAtMCwwICsxLDk1IEBACitkbmwgIEFSTSB2NiBtcG5fbW9kZXhhY3RfMWNfb2RkCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqw7ZybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIKK0MgU3Ryb25nQVJNCSAtCitDIFhTY2FsZQkgLQorQyBDb3J0ZXgtQTcJID8KK0MgQ29ydGV4LUE4CSA/CitDIENvcnRleC1BOQkgOQorQyBDb3J0ZXgtQTE1CSA3CisKK0MgQXJjaGl0ZWN0dXJlIHJlcXVpcmVtZW50czoKK0MgdjUJLQorQyB2NXQJLQorQyB2NXRlCXNtdWxiYgorQyB2Ngl1bWFhbAorQyB2NnQyCS0KK0MgdjdhCS0KKworZGVmaW5lKGB1cCcsIGByMCcpCitkZWZpbmUoYG4nLCAgYHIxJykKK2RlZmluZShgZCcsICBgcjInKQorZGVmaW5lKGBjeScsIGByMycpCisKKwkucHJvdGVjdGVkCWJpbnZlcnRfbGltYl90YWJsZQorQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9tb2RleGFjdF8xY19vZGQpCisJc3RtZmQJc3AhLCB7cjQsIHI1LCByNiwgcjd9CisKKwlMRUEoCXI0LCBiaW52ZXJ0X2xpbWJfdGFibGUpCisKKwlsZHIJcjYsIFt1cF0sICM0CQlDIHVwWzBdCisKKwlhbmQJcjEyLCBkLCAjMjU0CisJbGRyYglyNCwgW3I0LCByMTIsIGxzciAjMV0KKwlzbXVsYmIJcjEyLCByNCwgcjQKKwltdWwJcjEyLCBkLCByMTIKKwlyc2IJcjEyLCByMTIsIHI0LCBhc2wgIzEKKwltdWwJcjQsIHIxMiwgcjEyCisJbXVsCXI0LCBkLCByNAorCXJzYglyNCwgcjQsIHIxMiwgYXNsICMxCUMgcjQgPSBpbnZlcnNlCisKKwlzdWJzCW4sIG4sICMxCisJc3ViCXI2LCByNiwgY3kKKwltdWwJcjYsIHI2LCByNAorCWJlcQlMKGVuZCkKKworCXJzYglyNSwgcjQsICMwCQlDIHI1ID0gLWludmVyc2UKKworTCh0b3ApOglsZHIJcjcsIFt1cF0sICM0CisJbW92CXIxMiwgIzAKKwl1bWFhbAlyMTIsIGN5LCByNiwgZAorCW11bAlyNiwgcjcsIHI0CisJbWxhCXI2LCBjeSwgcjUsIHI2CisJc3VicwluLCBuLCAjMQorCWJuZQlMKHRvcCkKKworTChlbmQpOgltb3YJcjEyLCAjMAorCXVtYWFsCXIxMiwgY3ksIHI2LCBkCisJbW92CXIwLCBjeQorCisJbGRtZmQJc3AhLCB7cjQsIHI1LCByNiwgcjd9CisJYngJcjE0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92Ni9tdWxfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92Ni9tdWxfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M2ZWY5OQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL3Y2L211bF8xLmFzbQpAQCAtMCwwICsxLDExNSBAQAorZG5sICBBUk0gbXBuX211bF8xLgorCitkbmwgIENvcHlyaWdodCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBTdHJvbmdBUk06CSAtCitDIFhTY2FsZQkgLQorQyBBUk0xMQkJIDYuNAorQyBDb3J0ZXgtQTcJIDUuMjUKK0MgQ29ydGV4LUE4CSA3CitDIENvcnRleC1BOQkgMy4yNQorQyBDb3J0ZXgtQTE1CSA0CisKK0MgVE9ETworQyAgKiBNaWNyby1vcHRpbWlzZSBmZWVkLWluIGNvZGUuCitDICAqIE9wdGltaXNlIGZvciBuPTEsMiBieSBkZWxheWluZyByZWdpc3RlciBzYXZpbmcuCitDICAqIFRyeSB1c2luZyBsZG0vc3RtLgorCitkZWZpbmUoYHJwJyxgcjAnKQorZGVmaW5lKGB1cCcsYHIxJykKK2RlZmluZShgbicsIGByMicpCitkZWZpbmUoYHYwJyxgcjMnKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX211bF8xKQorCXN0bWZkCXNwISwgeyByNCwgcjUsIHI2LCByNyB9CisKKwlhbmRzCXI2LCBuLCAjMworCW1vdglyMTIsICMwCisJYmVxCUwoZmkwKQorCWNtcAlyNiwgIzIKKwliY2MJTChmaTEpCisJYmVxCUwoZmkyKQorCitMKGZpMyk6CWxkcglyNCwgW3VwXSwgIzQKKwltb3YJcjYsICMwCisJbGRyCXI1LCBbdXBdLCAjNAorCWIJTChsbzMpCisKK0woZmkwKToJbGRyCXI1LCBbdXBdLCAjNAorCWFkZAlycCwgcnAsICM0CisJbW92CXI3LCAjMAorCWxkcglyNCwgW3VwXSwgIzQKKwliCUwobG8wKQorCitMKGZpMSk6CWxkcglyNCwgW3VwXSwgIzQKKwltb3YJcjYsICMwCisJYWRkCXJwLCBycCwgIzgKKwlzdWJzCW4sIG4sICMxCisJYmVxCUwoMSkKKwlsZHIJcjUsIFt1cF0sICM0CisJYglMKGxvMSkKKworTChmaTIpOglsZHIJcjUsIFt1cF0sICM0CisJYWRkCXJwLCBycCwgIzEyCisJbW92CXI3LCAjMAorCWxkcglyNCwgW3VwXSwgIzQKKwliCUwobG8yKQorCisJQUxJR04oMTYpCitMKHRvcCk6CW1vdglyNiwgIzAKKwlsZHIJcjUsIFt1cF0sICM0CisJc3RyCXI3LCBbcnAsICMtMTJdCitMKGxvMSk6CXVtYWFsCXI2LCByMTIsIHI0LCB2MAorCW1vdglyNywgIzAKKwlsZHIJcjQsIFt1cF0sICM0CisJc3RyCXI2LCBbcnAsICMtOF0KK0wobG8wKToJdW1hYWwJcjcsIHIxMiwgcjUsIHYwCisJbW92CXI2LCAjMAorCWxkcglyNSwgW3VwXSwgIzQKKwlzdHIJcjcsIFtycCwgIy00XQorTChsbzMpOgl1bWFhbAlyNiwgcjEyLCByNCwgdjAKKwltb3YJcjcsICMwCisJbGRyCXI0LCBbdXBdLCAjNAorCXN0cglyNiwgW3JwXSwgIzE2CitMKGxvMik6CXVtYWFsCXI3LCByMTIsIHI1LCB2MAorCXN1YnMJbiwgbiwgIzQKKwliaGkJTCh0b3ApCisKKwltb3YJcjYsICMwCisJc3RyCXI3LCBbcnAsICMtMTJdCitMKDEpOgl1bWFhbAlyNiwgcjEyLCByNCwgdjAKKwlzdHIJcjYsIFtycCwgIy04XQorCW1vdglyMCwgcjEyCisJbGRtZmQJc3AhLCB7IHI0LCByNSwgcjYsIHI3IH0KKwlieAlscgorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjYvbXVsXzIuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjYvbXVsXzIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZDI3ZjMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92Ni9tdWxfMi5hc20KQEAgLTAsMCArMSwxMzUgQEAKK2RubCAgQVJNIG1wbl9tdWxfMi4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBTdHJvbmdBUk06CSAtCitDIFhTY2FsZQkgLQorQyBBUk0xMQkJIDUuMjUKK0MgQ29ydGV4LUE1CSAzLjYzCitDIENvcnRleC1BNwkgMy4xNQorQyBDb3J0ZXgtQTgJIDUuMAorQyBDb3J0ZXgtQTkJIDIuMjUKK0MgQ29ydGV4LUExNQkgMi41CitDIENvcnRleC1BMTcJIDIuMTMKK0MgQ29ydGV4LUE1MwkgMy41CisKK0MgVE9ETworQyAgKiBUaGlzIGlzIGEgdHJpdmlhbCBlZGl0IG9mIHRoZSBhZGRtdWxfMiBjb2RlLiAgQ2hlY2sgZm9yIHNpbXBsaWZpY2F0aW9ucywKK0MgICAgYW5kIHBvc3NpYmxlIHNwZWVkdXBzIHRvIDIuMCBjL2wuCisKK2RlZmluZShgcnAnLGByMCcpCitkZWZpbmUoYHVwJyxgcjEnKQorZGVmaW5lKGBuJywgYHIyJykKK2RlZmluZShgdnAnLGByMycpCisKK2RlZmluZShgdjAnLGByNicpCitkZWZpbmUoYHYxJyxgcjcnKQorZGVmaW5lKGB1MCcsYHIzJykKK2RlZmluZShgdTEnLGByOScpCisKK2RlZmluZShgY3lhJyxgcjgnKQorZGVmaW5lKGBjeWInLGByMTInKQorCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fbXVsXzIpCisJcHVzaAl7IHI0LCByNSwgcjYsIHI3LCByOCwgcjkgfQorCisJbGRtCXZwLCB7IHYwLCB2MSB9CisJbW92CWN5YSwgIzAKKwltb3YJY3liLCAjMAorCisJdHN0CW4sICMxCisJYmVxCUwoZXZuKQorTChvZGQpOgltb3YJcjUsICMwCisJbGRyCXUwLCBbdXAsICMwXQorCW1vdglyNCwgIzAKKwl0c3QJbiwgIzIKKwliZXEJTChmaTEpCitMKGZpMyk6CXN1Ygl1cCwgdXAsICMxMgorCXN1YglycCwgcnAsICMxNgorCWIJTChsbzMpCitMKGZpMSk6CXN1YgluLCBuLCAjMQorCXN1Ygl1cCwgdXAsICM0CisJc3ViCXJwLCBycCwgIzgKKwliCUwobG8xKQorTChldm4pOgltb3YJcjQsICMwCisJbGRyCXUxLCBbdXAsICMwXQorCW1vdglyNSwgIzAKKwl0c3QJbiwgIzIKKwlibmUJTChmaTIpCitMKGZpMCk6CXN1Ygl1cCwgdXAsICM4CisJc3ViCXJwLCBycCwgIzEyCisJYglMKGxvMCkKK0woZmkyKToJc3VicwluLCBuLCAjMgorCXN1YglycCwgcnAsICM0CisJYmxzCUwoZW5kKQorCisJQUxJR04oMTYpCitMKHRvcCk6CWxkcgl1MCwgW3VwLCAjNF0KKwl1bWFhbAlyNCwgY3lhLCB1MSwgdjAKKwlzdHIJcjQsIFtycCwgIzRdCisJbW92CXI0LCAjMAorCXVtYWFsCXI1LCBjeWIsIHUxLCB2MQorTChsbzEpOglsZHIJdTEsIFt1cCwgIzhdCisJdW1hYWwJcjUsIGN5YSwgdTAsIHYwCisJc3RyCXI1LCBbcnAsICM4XQorCW1vdglyNSwgIzAKKwl1bWFhbAlyNCwgY3liLCB1MCwgdjEKK0wobG8wKToJbGRyCXUwLCBbdXAsICMxMl0KKwl1bWFhbAlyNCwgY3lhLCB1MSwgdjAKKwlzdHIJcjQsIFtycCwgIzEyXQorCW1vdglyNCwgIzAKKwl1bWFhbAlyNSwgY3liLCB1MSwgdjEKK0wobG8zKToJbGRyCXUxLCBbdXAsICMxNl0hCisJdW1hYWwJcjUsIGN5YSwgdTAsIHYwCisJc3RyCXI1LCBbcnAsICMxNl0hCisJbW92CXI1LCAjMAorCXVtYWFsCXI0LCBjeWIsIHUwLCB2MQorCXN1YnMJbiwgbiwgIzQKKwliaGkJTCh0b3ApCisKK0woZW5kKToJdW1hYWwJcjQsIGN5YSwgdTEsIHYwCisJbGRyCXUwLCBbdXAsICM0XQorCXVtYWFsCXI1LCBjeWIsIHUxLCB2MQorCXN0cglyNCwgW3JwLCAjNF0KKwl1bWFhbAlyNSwgY3lhLCB1MCwgdjAKKwl1bWFhbAljeWEsIGN5YiwgdTAsIHYxCisJc3RyCXI1LCBbcnAsICM4XQorCXN0cgljeWEsIFtycCwgIzEyXQorCW1vdglyMCwgY3liCisKKwlwb3AJeyByNCwgcjUsIHI2LCByNywgcjgsIHI5IH0KKwlieAlyMTQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL3Y2L3BvcGhhbS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92Ni9wb3BoYW0uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNTQzNjgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92Ni9wb3BoYW0uYXNtCkBAIC0wLDAgKzEsMTM5IEBACitkbmwgIEFSTSBtcG5fcG9wY291bnQgYW5kIG1wbl9oYW1kaXN0LgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkJICAgICBwb3Bjb3VudAkgICAgICBoYW1kaXN0CitDCQkgICAgY3ljbGVzL2xpbWIJICAgIGN5Y2xlcy9saW1iCitDIFN0cm9uZ0FSTQkJIC0KK0MgWFNjYWxlCQkgLQorQyBDb3J0ZXgtQTcJCSA/CitDIENvcnRleC1BOAkJID8KK0MgQ29ydGV4LUE5CQkgOC45NAkJIDkuNDcKK0MgQ29ydGV4LUExNQkJIDUuNjcJCSA2LjQ0CisKK0MgQXJjaGl0ZWN0dXJlIHJlcXVpcmVtZW50czoKK0MgdjUJLQorQyB2NXQJLQorQyB2NXRlCWxkcmQgc3RyZAorQyB2Ngl1c2FkYTgKK0MgdjZ0MgktCitDIHY3YQktCisKK2lmZGVmKGBPUEVSQVRJT05fcG9wY291bnQnLGAKKyAgZGVmaW5lKGBmdW5jJyxgbXBuX3BvcGNvdW50JykKKyAgZGVmaW5lKGBhcCcsCQlgcjAnKQorICBkZWZpbmUoYG4nLAkJYHIxJykKKyAgZGVmaW5lKGBhMCcsCQlgcjInKQorICBkZWZpbmUoYGExJywJCWByMycpCisgIGRlZmluZShgcycsCQlgcjUnKQorICBkZWZpbmUoYGJfMDEwMTAxMDEnLAlgcjYnKQorICBkZWZpbmUoYGJfMDAxMTAwMTEnLAlgcjcnKQorICBkZWZpbmUoYGJfMDAwMDExMTEnLAlgcjgnKQorICBkZWZpbmUoYHplcm8nLAlgcjknKQorICBkZWZpbmUoYFBPUEMnLAlgJDEnKQorICBkZWZpbmUoYEhBTUQnLAlgZG5sJykKKycpCitpZmRlZihgT1BFUkFUSU9OX2hhbWRpc3QnLGAKKyAgZGVmaW5lKGBmdW5jJyxgbXBuX2hhbWRpc3QnKQorICBkZWZpbmUoYGFwJywJCWByMCcpCisgIGRlZmluZShgYnAnLAkJYHIxJykKKyAgZGVmaW5lKGBuJywJCWByMicpCisgIGRlZmluZShgYTAnLAkJYHI2JykKKyAgZGVmaW5lKGBhMScsCQlgcjcnKQorICBkZWZpbmUoYGIwJywJCWByNCcpCisgIGRlZmluZShgYjEnLAkJYHI1JykKKyAgZGVmaW5lKGBzJywJCWByMTEnKQorICBkZWZpbmUoYGJfMDEwMTAxMDEnLAlgcjgnKQorICBkZWZpbmUoYGJfMDAxMTAwMTEnLAlgcjknKQorICBkZWZpbmUoYGJfMDAwMDExMTEnLAlgcjEwJykKKyAgZGVmaW5lKGB6ZXJvJywJYHIzJykKKyAgZGVmaW5lKGBQT1BDJywJYGRubCcpCisgIGRlZmluZShgSEFNRCcsCWAkMScpCisnKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9wb3Bjb3VudCBtcG5faGFtZGlzdCkKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKGZ1bmMpCitQT1BDKGAJcHVzaAl7IHI0LXI5IH0JJykKK0hBTUQoYAlwdXNoCXsgcjQtcjExIH0JJykKKworCWxkcgliXzAxMDEwMTAxLCA9MHg1NTU1NTU1NQorCW1vdglyMTIsICMwCisJbGRyCWJfMDAxMTAwMTEsID0weDMzMzMzMzMzCisJbW92CXplcm8sICMwCisJbGRyCWJfMDAwMDExMTEsID0weDBmMGYwZjBmCisKKwl0c3QJbiwgIzEKKwliZXEJTChldm4pCisKK0wob2RkKToJbGRyCWExLCBbYXBdLCAjNAkJQyAxIHggMzIgMS1iaXQgYWNjdW11bGF0b3JzLCAwLTEKK0hBTUQoYAlsZHIJYjEsIFticF0sICM0CScpCUMgMSB4IDMyIDEtYml0IGFjY3VtdWxhdG9ycywgMC0xCitIQU1EKGAJZW9yCWExLCBhMSwgYjEJJykKKwlhbmQJcjQsIGJfMDEwMTAxMDEsIGExLCBsc3IgIzEKKwlzdWIJYTEsIGExLCByNAorCWFuZAlyNCwgYTEsIGJfMDAxMTAwMTEKKwliaWMJcjUsIGExLCBiXzAwMTEwMDExCisJYWRkCXI1LCByNCwgcjUsIGxzciAjMglDIDggNC1iaXQgYWNjdW11bGF0b3JzLCAwLTQKKwlzdWJzCW4sIG4sICMxCisJYglMKG1pZCkKKworTChldm4pOgltb3YJcywgIzAKKworTCh0b3ApOglsZHJkCWEwLCBhMSwgW2FwXSwgIzgJQyAyIHggMzIgMS1iaXQgYWNjdW11bGF0b3JzLCAwLTEKK0hBTUQoYAlsZHJkCWIwLCBiMSwgW2JwXSwgIzgnKQorSEFNRChgCWVvcglhMCwgYTAsIGIwCScpCitIQU1EKGAJZW9yCWExLCBhMSwgYjEJJykKKwlzdWJzCW4sIG4sICMyCisJdXNhZGE4CXIxMiwgcywgemVybywgcjEyCisJYW5kCXI0LCBiXzAxMDEwMTAxLCBhMCwgbHNyICMxCisJc3ViCWEwLCBhMCwgcjQKKwlhbmQJcjQsIGJfMDEwMTAxMDEsIGExLCBsc3IgIzEKKwlzdWIJYTEsIGExLCByNAorCWFuZAlyNCwgYTAsIGJfMDAxMTAwMTEKKwliaWMJcjUsIGEwLCBiXzAwMTEwMDExCisJYWRkCWEwLCByNCwgcjUsIGxzciAjMglDIDggNC1iaXQgYWNjdW11bGF0b3JzLCAwLTQKKwlhbmQJcjQsIGExLCBiXzAwMTEwMDExCisJYmljCXI1LCBhMSwgYl8wMDExMDAxMQorCWFkZAlhMSwgcjQsIHI1LCBsc3IgIzIJQyA4IDQtYml0IGFjY3VtdWxhdG9ycywgMC00CisJYWRkCXI1LCBhMCwgYTEJCUMgOCA0LWJpdCBhY2N1bXVsYXRvcnMsIDAtOAorTChtaWQpOglhbmQJcjQsIHI1LCBiXzAwMDAxMTExCisJYmljCXI1LCByNSwgYl8wMDAwMTExMQorCWFkZAlzLCByNCwgcjUsIGxzciAjNAlDIDQgOC1iaXQgYWNjdW11bGF0b3JzCisJYm5lCUwodG9wKQorCisJdXNhZGE4CXIwLCBzLCB6ZXJvLCByMTIKK1BPUEMoYAlwb3AJeyByNC1yOSB9CScpCitIQU1EKGAJcG9wCXsgcjQtcjExIH0JJykKKwlieAlyMTQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL3Y2L3Nxcl9iYXNlY2FzZS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92Ni9zcXJfYmFzZWNhc2UuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmYzRmMTMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92Ni9zcXJfYmFzZWNhc2UuYXNtCkBAIC0wLDAgKzEsNTQ0IEBACitkbmwgIEFSTSB2NiBtcG5fc3FyX2Jhc2VjYXNlLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTIsIDIwMTMsIDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBDb2RlIHN0cnVjdHVyZToKK0MKK0MKK0MgICAgICAgIG1fMigwbTQpICAgICAgICBtXzIoMm00KSAgICAgICAgbV8yKDFtNCkgICAgICAgIG1fMigzbTQpCitDICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8CitDICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8CitDICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8CitDICAgICAgICAgIFx8LyAgICAgICAgICAgICBcfC8gICAgICAgICAgICAgXHwvICAgICAgICAgICAgIFx8LworQyAgICAgICAgICAgICAgX19fX19fX19fX19fICAgICAgICAgICAgICAgICAgIF9fX19fX19fX19fXworQyAgICAgICAgICAgICAvICAgICAgICAgICAgXCAgICAgICAgICAgICAgICAgLyAgICAgICAgICAgIFwKK0MgICAgICAgICAgICBcfC8gICAgICAgICAgICBcICAgICAgICAgICAgICAgXHwvICAgICAgICAgICAgXAorQyAgICAgICAgIGFtXzIoM200KSAgICAgICBhbV8yKDFtNCkgICAgICAgYW1fMigwbTQpICAgICAgIGFtXzIoMm00KQorQyAgICAgICAgICAgIFwgICAgICAgICAgICAvfFwgICAgICAgICAgICAgICAgXCAgICAgICAgICAgIC98XAorQyAgICAgICAgICAgICBcX19fX19fX19fX19fLyAgICAgICAgICAgICAgICAgIFxfX19fX19fX19fX18vCitDICAgICAgICAgICAgICAgICAgICAgICBcICAgICAgICAgICAgICAgICAgICAgICAgLworQyAgICAgICAgICAgICAgICAgICAgICAgIFwgICAgICAgICAgICAgICAgICAgICAgLworQyAgICAgICAgICAgICAgICAgICAgICAgICBcICAgICAgICAgICAgICAgICAgICAvCitDICAgICAgICAgICAgICAgICAgICAgICAgIGNvcjMgICAgICAgICAgICAgY29yMgorQyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcICAgICAgICAgICAgICAvCitDICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcICAgICAgICAgICAgLworQyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcXJfZGlhZ19hZGRsc2gxCisKK0MgVE9ETworQyAgKiBBbGlnbiBtb3JlIGxhYmVscy4KK0MgICogRnVydGhlciB0d2VhayBjb3VudGVyIGFuZCB1cGRhdGVzIGluIG91dGVyIGxvb3BzLiAgKFRoaXMgY291bGQgc2F2ZQorQyAgICBwZXJoYXBzIDVuIGN5Y2xlcykuCitDICAqIEF2b2lkIHN1Yi13aXRoLWxzbCBpbiBvdXRlciBsb29wcy4gIFdlIGNvdWxkIGtlZXAgbiB1cC1zaGlmdGVkLCB0aGVuCitDICAgIGluaXRpYWxpc2UgbG9vcCBjb3VudGVyIGkgd2l0aCBhIHJpZ2h0IHNoaWZ0LgorQyAgKiBUcnkgdG8gdXNlIGZld2VyIHJlZ2lzdGVyLiAgUGVyaGFwcyBjb2FsZXNjZSByOSBicmFuY2ggdGFyZ2V0IGFuZCBuX3NhdmVkLgorQyAgICAoVGhpcyBjb3VsZCBzYXZlIDItMyBjeWNsZXMgZm9yIG4gPiA0LikKK0MgICogT3B0aW1pc2Ugc3FyX2RpYWdfYWRkbHNoMSBsb29wLiAgVGhlIGN1cnJlbnQgY29kZSB1c2VzIG9sZC1zdHlsZSBjYXJyeQorQyAgICBwcm9wYWdhdGlvbi4KK0MgICogU3RvcCBsb29wcyBlYXJsaWVyIHN1cHByZXNzaW5nIHdyaXRlcyBvZiB1cHBlci1tb3N0IHJwW10gdmFsdWVzLgorQyAgKiBUaGUgYWRkbXVsXzIgbG9vcHMgaGVyZSBydW5zIHdlbGwgb24gYWxsIGNvcmVzLCBidXQgbXVsXzIgcnVucyBwb29ybHkKK0MgICAgcGFydGljdWxhcmx5IG9uIENvcnRleC1BOC4KKworCitkZWZpbmUoYHJwJywgICAgICByMCkKK2RlZmluZShgdXAnLCAgICAgIHIxKQorZGVmaW5lKGBuJywgICAgICAgcjIpCisKK2RlZmluZShgdjAnLCAgICAgIHIzKQorZGVmaW5lKGB2MScsICAgICAgcjYpCitkZWZpbmUoYGknLCAgICAgICByOCkKK2RlZmluZShgbl9zYXZlZCcsIHIxNCkKK2RlZmluZShgY3lhJywgICAgIHIxMSkKK2RlZmluZShgY3liJywgICAgIHIxMikKK2RlZmluZShgdTAnLCAgICAgIHI3KQorZGVmaW5lKGB1MScsICAgICAgcjkpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fc3FyX2Jhc2VjYXNlKQorCWFuZAlyMTIsIG4sICMzCisJY21wCW4sICM0CisJYWRkZ3QJcjEyLCByMTIsICM0CisJYWRkCXBjLCBwYywgcjEyLCBsc2wgIzIKKwlub3AKKwliCUwoNCkKKwliCUwoMSkKKwliCUwoMikKKwliCUwoMykKKwliCUwoMG00KQorCWIJTCgxbTQpCisJYglMKDJtNCkKKwliCUwoM200KQorCisKK0woMW00KToJcHVzaAl7cjQtcjExLCByMTR9CisJbW92CW5fc2F2ZWQsIG4KKwlzdWIJaSwgbiwgIzQKKwlzdWIJbiwgbiwgIzIKKwlhZGQJcjEwLCBwYywgI0woYW0yXzJtNCktLi04CisJbGRtCXVwLCB7djAsdjEsdTB9CisJc3ViCXVwLCB1cCwgIzQKKwltb3YJY3liLCAjMAorCW1vdglyNSwgIzAKKwl1bXVsbAlyNCwgY3lhLCB2MSwgdjAKKwlzdHIJcjQsIFtycF0sICMtMTIKKwltb3YJcjQsICMwCisJYglMKGtvMCkKKworTCgzbTQpOglwdXNoCXtyNC1yMTEsIHIxNH0KKwltb3YJbl9zYXZlZCwgbgorCXN1YglpLCBuLCAjNAorCXN1YgluLCBuLCAjMgorCWFkZAlyMTAsIHBjLCAjTChhbTJfMG00KS0uLTgKKwlsZG0JdXAsIHt2MCx2MSx1MH0KKwlhZGQJdXAsIHVwLCAjNAorCW1vdgljeWIsICMwCisJbW92CXI1LCAjMAorCXVtdWxsCXI0LCBjeWEsIHYxLCB2MAorCXN0cglyNCwgW3JwXSwgIy00CisJbW92CXI0LCAjMAorCWIJTChrbzIpCisKK0woMm00KToJcHVzaAl7cjQtcjExLCByMTR9CisJbW92CW5fc2F2ZWQsIG4KKwlzdWIJaSwgbiwgIzQKKwlzdWIJbiwgbiwgIzIKKwlhZGQJcjEwLCBwYywgI0woYW0yXzNtNCktLi04CisJbGRtCXVwLCB7djAsdjEsdTF9CisJbW92CWN5YiwgIzAKKwltb3YJcjQsICMwCisJdW11bGwJcjUsIGN5YSwgdjEsIHYwCisJc3RyCXI1LCBbcnBdLCAjLTgKKwltb3YJcjUsICMwCisJYglMKGtvMSkKKworTCgwbTQpOglwdXNoCXtyNC1yMTEsIHIxNH0KKwltb3YJbl9zYXZlZCwgbgorCXN1YglpLCBuLCAjNAorCXN1YgluLCBuLCAjMgorCWFkZAlyMTAsIHBjLCAjTChhbTJfMW00KS0uLTgKKwlsZG0JdXAsIHt2MCx2MSx1MX0KKwltb3YJY3liLCAjMAorCW1vdglyNCwgIzAKKwlhZGQJdXAsIHVwLCAjOAorCXVtdWxsCXI1LCBjeWEsIHYxLCB2MAorCXN0cglyNSwgW3JwLCAjMF0KKwltb3YJcjUsICMwCisKK0wodG9wKToJbGRyCXUwLCBbdXAsICM0XQorCXVtYWFsCXI0LCBjeWEsIHUxLCB2MAorCXN0cglyNCwgW3JwLCAjNF0KKwltb3YJcjQsICMwCisJdW1hYWwJcjUsIGN5YiwgdTEsIHYxCitMKGtvMik6CWxkcgl1MSwgW3VwLCAjOF0KKwl1bWFhbAlyNSwgY3lhLCB1MCwgdjAKKwlzdHIJcjUsIFtycCwgIzhdCisJbW92CXI1LCAjMAorCXVtYWFsCXI0LCBjeWIsIHUwLCB2MQorTChrbzEpOglsZHIJdTAsIFt1cCwgIzEyXQorCXVtYWFsCXI0LCBjeWEsIHUxLCB2MAorCXN0cglyNCwgW3JwLCAjMTJdCisJbW92CXI0LCAjMAorCXVtYWFsCXI1LCBjeWIsIHUxLCB2MQorTChrbzApOglsZHIJdTEsIFt1cCwgIzE2XSEKKwl1bWFhbAlyNSwgY3lhLCB1MCwgdjAKKwlzdHIJcjUsIFtycCwgIzE2XSEKKwltb3YJcjUsICMwCisJdW1hYWwJcjQsIGN5YiwgdTAsIHYxCisJc3VicwlpLCBpLCAjNAorCWJoaQlMKHRvcCkKKworCXVtYWFsCXI0LCBjeWEsIHUxLCB2MAorCWxkcgl1MCwgW3VwLCAjNF0KKwl1bWFhbAlyNSwgY3liLCB1MSwgdjEKKwlzdHIJcjQsIFtycCwgIzRdCisJdW1hYWwJcjUsIGN5YSwgdTAsIHYwCisJdW1hYWwJY3lhLCBjeWIsIHUwLCB2MQorCXN0cglyNSwgW3JwLCAjOF0KKwlzdHIJY3lhLCBbcnAsICMxMl0KKwlzdHIJY3liLCBbcnAsICMxNl0KKworCWFkZAl1cCwgdXAsICM0CisJc3ViCW4sIG4sICMxCisJYWRkCXJwLCBycCwgIzgKKwlieAlyMTAKKworTChldm5sb29wKToKKwlzdWJzCWksIG4sICM2CisJc3ViCW4sIG4sICMyCisJYmx0CUwoY29yMikKKwlsZG0JdXAsIHt2MCx2MSx1MX0KKwlhZGQJdXAsIHVwLCAjOAorCW1vdgljeWEsICMwCisJbW92CWN5YiwgIzAKKwlsZHIJcjQsIFtycCwgIy00XQorCXVtYWFsCXI0LCBjeWEsIHYxLCB2MAorCXN0cglyNCwgW3JwLCAjLTRdCisJbGRyCXI0LCBbcnAsICMwXQorCisJQUxJR04oMTYpCitMKHVhMik6CWxkcglyNSwgW3JwLCAjNF0KKwl1bWFhbAlyNCwgY3lhLCB1MSwgdjAKKwlsZHIJdTAsIFt1cCwgIzRdCisJdW1hYWwJcjUsIGN5YiwgdTEsIHYxCisJc3RyCXI0LCBbcnAsICMwXQorCWxkcglyNCwgW3JwLCAjOF0KKwl1bWFhbAlyNSwgY3lhLCB1MCwgdjAKKwlsZHIJdTEsIFt1cCwgIzhdCisJdW1hYWwJcjQsIGN5YiwgdTAsIHYxCisJc3RyCXI1LCBbcnAsICM0XQorCWxkcglyNSwgW3JwLCAjMTJdCisJdW1hYWwJcjQsIGN5YSwgdTEsIHYwCisJbGRyCXUwLCBbdXAsICMxMl0KKwl1bWFhbAlyNSwgY3liLCB1MSwgdjEKKwlzdHIJcjQsIFtycCwgIzhdCisJbGRyCXI0LCBbcnAsICMxNl0hCisJdW1hYWwJcjUsIGN5YSwgdTAsIHYwCisJbGRyCXUxLCBbdXAsICMxNl0hCisJdW1hYWwJcjQsIGN5YiwgdTAsIHYxCisJc3RyCXI1LCBbcnAsICMtNF0KKwlzdWJzCWksIGksICM0CisJYmhzCUwodWEyKQorCisJdW1hYWwJcjQsIGN5YSwgdTEsIHYwCisJdW1hYWwJY3lhLCBjeWIsIHUxLCB2MQorCXN0cglyNCwgW3JwLCAjMF0KKwlzdHIJY3lhLCBbcnAsICM0XQorCXN0cgljeWIsIFtycCwgIzhdCitMKGFtMl8wbTQpOgorCXN1YglycCwgcnAsIG4sIGxzbCAjMgorCXN1Ygl1cCwgdXAsIG4sIGxzbCAjMgorCWFkZAlycCwgcnAsICM4CisKKwlzdWIJaSwgbiwgIzQKKwlzdWIJbiwgbiwgIzIKKwlsZG0JdXAsIHt2MCx2MSx1MX0KKwltb3YJY3lhLCAjMAorCW1vdgljeWIsICMwCisJbGRyCXI0LCBbcnAsICM0XQorCXVtYWFsCXI0LCBjeWEsIHYxLCB2MAorCXN0cglyNCwgW3JwLCAjNF0KKwlsZHIJcjQsIFtycCwgIzhdCisJYglMKGxvMCkKKworCUFMSUdOKDE2KQorTCh1YTApOglsZHIJcjUsIFtycCwgIzRdCisJdW1hYWwJcjQsIGN5YSwgdTEsIHYwCisJbGRyCXUwLCBbdXAsICM0XQorCXVtYWFsCXI1LCBjeWIsIHUxLCB2MQorCXN0cglyNCwgW3JwLCAjMF0KKwlsZHIJcjQsIFtycCwgIzhdCisJdW1hYWwJcjUsIGN5YSwgdTAsIHYwCisJbGRyCXUxLCBbdXAsICM4XQorCXVtYWFsCXI0LCBjeWIsIHUwLCB2MQorCXN0cglyNSwgW3JwLCAjNF0KK0wobG8wKToJbGRyCXI1LCBbcnAsICMxMl0KKwl1bWFhbAlyNCwgY3lhLCB1MSwgdjAKKwlsZHIJdTAsIFt1cCwgIzEyXQorCXVtYWFsCXI1LCBjeWIsIHUxLCB2MQorCXN0cglyNCwgW3JwLCAjOF0KKwlsZHIJcjQsIFtycCwgIzE2XSEKKwl1bWFhbAlyNSwgY3lhLCB1MCwgdjAKKwlsZHIJdTEsIFt1cCwgIzE2XSEKKwl1bWFhbAlyNCwgY3liLCB1MCwgdjEKKwlzdHIJcjUsIFtycCwgIy00XQorCXN1YnMJaSwgaSwgIzQKKwliaHMJTCh1YTApCisKKwl1bWFhbAlyNCwgY3lhLCB1MSwgdjAKKwl1bWFhbAljeWEsIGN5YiwgdTEsIHYxCisJc3RyCXI0LCBbcnAsICMwXQorCXN0cgljeWEsIFtycCwgIzRdCisJc3RyCWN5YiwgW3JwLCAjOF0KK0woYW0yXzJtNCk6CisJc3ViCXJwLCBycCwgbiwgbHNsICMyCisJc3ViCXVwLCB1cCwgbiwgbHNsICMyCisJYWRkCXJwLCBycCwgIzE2CisJYglMKGV2bmxvb3ApCisKKworTChvZGRsb29wKToKKwlzdWIJaSwgbiwgIzUKKwlzdWIJbiwgbiwgIzIKKwlsZG0JdXAsIHt2MCx2MSx1MH0KKwltb3YJY3lhLCAjMAorCW1vdgljeWIsICMwCisJbGRyCXI1LCBbcnAsICMwXQorCXVtYWFsCXI1LCBjeWEsIHYxLCB2MAorCXN0cglyNSwgW3JwLCAjMF0KKwlsZHIJcjUsIFtycCwgIzRdCisJYWRkCXVwLCB1cCwgIzQKKwliCUwobG8xKQorCisJQUxJR04oMTYpCitMKHVhMSk6CWxkcglyNSwgW3JwLCAjNF0KKwl1bWFhbAlyNCwgY3lhLCB1MSwgdjAKKwlsZHIJdTAsIFt1cCwgIzRdCisJdW1hYWwJcjUsIGN5YiwgdTEsIHYxCisJc3RyCXI0LCBbcnAsICMwXQorTChsbzEpOglsZHIJcjQsIFtycCwgIzhdCisJdW1hYWwJcjUsIGN5YSwgdTAsIHYwCisJbGRyCXUxLCBbdXAsICM4XQorCXVtYWFsCXI0LCBjeWIsIHUwLCB2MQorCXN0cglyNSwgW3JwLCAjNF0KKwlsZHIJcjUsIFtycCwgIzEyXQorCXVtYWFsCXI0LCBjeWEsIHUxLCB2MAorCWxkcgl1MCwgW3VwLCAjMTJdCisJdW1hYWwJcjUsIGN5YiwgdTEsIHYxCisJc3RyCXI0LCBbcnAsICM4XQorCWxkcglyNCwgW3JwLCAjMTZdIQorCXVtYWFsCXI1LCBjeWEsIHUwLCB2MAorCWxkcgl1MSwgW3VwLCAjMTZdIQorCXVtYWFsCXI0LCBjeWIsIHUwLCB2MQorCXN0cglyNSwgW3JwLCAjLTRdCisJc3VicwlpLCBpLCAjNAorCWJocwlMKHVhMSkKKworCXVtYWFsCXI0LCBjeWEsIHUxLCB2MAorCXVtYWFsCWN5YSwgY3liLCB1MSwgdjEKKwlzdHIJcjQsIFtycCwgIzBdCisJc3RyCWN5YSwgW3JwLCAjNF0KKwlzdHIJY3liLCBbcnAsICM4XQorTChhbTJfM200KToKKwlzdWIJcnAsIHJwLCBuLCBsc2wgIzIKKwlzdWIJdXAsIHVwLCBuLCBsc2wgIzIKKwlhZGQJcnAsIHJwLCAjNAorCisJc3VicwlpLCBuLCAjMworCWJlcQlMKGNvcjMpCisJc3ViCW4sIG4sICMyCisJbGRtCXVwLCB7djAsdjEsdTB9CisJbW92CWN5YSwgIzAKKwltb3YJY3liLCAjMAorCWxkcglyNSwgW3JwLCAjOF0KKwlzdWIJdXAsIHVwLCAjNAorCXVtYWFsCXI1LCBjeWEsIHYxLCB2MAorCXN0cglyNSwgW3JwLCAjOF0KKwlsZHIJcjUsIFtycCwgIzEyXQorCWIJTChsbzMpCisKKwlBTElHTigxNikKK0wodWEzKToJbGRyCXI1LCBbcnAsICM0XQorCXVtYWFsCXI0LCBjeWEsIHUxLCB2MAorCWxkcgl1MCwgW3VwLCAjNF0KKwl1bWFhbAlyNSwgY3liLCB1MSwgdjEKKwlzdHIJcjQsIFtycCwgIzBdCisJbGRyCXI0LCBbcnAsICM4XQorCXVtYWFsCXI1LCBjeWEsIHUwLCB2MAorCWxkcgl1MSwgW3VwLCAjOF0KKwl1bWFhbAlyNCwgY3liLCB1MCwgdjEKKwlzdHIJcjUsIFtycCwgIzRdCisJbGRyCXI1LCBbcnAsICMxMl0KKwl1bWFhbAlyNCwgY3lhLCB1MSwgdjAKKwlsZHIJdTAsIFt1cCwgIzEyXQorCXVtYWFsCXI1LCBjeWIsIHUxLCB2MQorCXN0cglyNCwgW3JwLCAjOF0KK0wobG8zKToJbGRyCXI0LCBbcnAsICMxNl0hCisJdW1hYWwJcjUsIGN5YSwgdTAsIHYwCisJbGRyCXUxLCBbdXAsICMxNl0hCisJdW1hYWwJcjQsIGN5YiwgdTAsIHYxCisJc3RyCXI1LCBbcnAsICMtNF0KKwlzdWJzCWksIGksICM0CisJYmhzCUwodWEzKQorCisJdW1hYWwJcjQsIGN5YSwgdTEsIHYwCisJdW1hYWwJY3lhLCBjeWIsIHUxLCB2MQorCXN0cglyNCwgW3JwLCAjMF0KKwlzdHIJY3lhLCBbcnAsICM0XQorCXN0cgljeWIsIFtycCwgIzhdCitMKGFtMl8xbTQpOgorCXN1YglycCwgcnAsIG4sIGxzbCAjMgorCXN1Ygl1cCwgdXAsIG4sIGxzbCAjMgorCWFkZAlycCwgcnAsICMxMgorCWIJTChvZGRsb29wKQorCisKK0woY29yMyk6bGRtCXVwLCB7djAsdjEsdTB9CisJbGRyCXI1LCBbcnAsICM4XQorCW1vdgljeWEsICMwCisJbW92CWN5YiwgIzAKKwl1bWFhbAlyNSwgY3lhLCB2MSwgdjAKKwlzdHIJcjUsIFtycCwgIzhdCisJbGRyCXI1LCBbcnAsICMxMl0KKwlsZHIJcjQsIFtycCwgIzE2XQorCXVtYWFsCXI1LCBjeWEsIHUwLCB2MAorCWxkcgl1MSwgW3VwLCAjMTJdCisJdW1hYWwJcjQsIGN5YiwgdTAsIHYxCisJc3RyCXI1LCBbcnAsICMxMl0KKwl1bWFhbAlyNCwgY3lhLCB1MSwgdjAKKwl1bWFhbAljeWEsIGN5YiwgdTEsIHYxCisJc3RyCXI0LCBbcnAsICMxNl0KKwlzdHIJY3lhLCBbcnAsICMyMF0KKwlzdHIJY3liLCBbcnAsICMyNF0KKwlhZGQJdXAsIHVwLCAjMTYKKwltb3YJY3lhLCBjeWIKKwlhZGRzCXJwLCBycCwgIzM2CQlDIGNsZWFyIGN5CisJbW92CWN5YiwgIzAKKwl1bWFhbAljeWEsIGN5YiwgdTEsIHUwCisJYglMKHNxcl9kaWFnX2FkZGxzaDEpCisKK0woY29yMik6CisJbGRtCXVwISwge3YwLHYxLHUwfQorCW1vdglyNCwgY3lhCisJbW92CXI1LCBjeWIKKwltb3YJY3lhLCAjMAorCXVtYWFsCXI0LCBjeWEsIHYxLCB2MAorCW1vdgljeWIsICMwCisJdW1hYWwJcjUsIGN5YSwgdTAsIHYwCisJc3RyZAlyNCwgcjUsIFtycCwgIy00XQorCXVtYWFsCWN5YSwgY3liLCB1MCwgdjEKKwlhZGQJcnAsIHJwLCAjMTYKK0MJYglMKHNxcl9kaWFnX2FkZGxzaDEpCisKKworZGVmaW5lKGB3MCcsICByNikKK2RlZmluZShgdzEnLCAgcjcpCitkZWZpbmUoYHcyJywgIHI4KQorZGVmaW5lKGByYngnLCByOSkKKworTChzcXJfZGlhZ19hZGRsc2gxKToKKwlzdHIJY3lhLCBbcnAsICMtMTJdCisJc3RyCWN5YiwgW3JwLCAjLThdCisJc3ViCW4sIG5fc2F2ZWQsICMxCisJc3ViCXVwLCB1cCwgbl9zYXZlZCwgbHNsICMyCisJc3ViCXJwLCBycCwgbl9zYXZlZCwgbHNsICMzCisJbGRyCXIzLCBbdXBdLCAjNAorCXVtdWxsCXcxLCByNSwgcjMsIHIzCisJbW92CXcyLCAjMAorCW1vdglyMTAsICMwCitDCWNtbglyMCwgIzAJCQlDIGNsZWFyIGN5IChhbHJlYWR5IGNsZWFyKQorCWIJTChsbSkKKworTCh0c2QpOglhZGRzCXcwLCB3MCwgcmJ4CisJYWRjcwl3MSwgdzEsIHI0CisJc3RyCXcwLCBbcnAsICMwXQorTChsbSk6CWxkcgl3MCwgW3JwLCAjNF0KKwlzdHIJdzEsIFtycCwgIzRdCisJbGRyCXcxLCBbcnAsICM4XSEKKwlhZGQJcmJ4LCByNSwgdzIKKwlhZGNzCXcwLCB3MCwgdzAKKwlsZHIJcjMsIFt1cF0sICM0CisJYWRjcwl3MSwgdzEsIHcxCisJYWRjCXcyLCByMTAsIHIxMAorCXVtdWxsCXI0LCByNSwgcjMsIHIzCisJc3VicwluLCBuLCAjMQorCWJuZQlMKHRzZCkKKworCWFkZHMJdzAsIHcwLCByYngKKwlhZGNzCXcxLCB3MSwgcjQKKwlhZGMJdzIsIHI1LCB3MgorCXN0bQlycCwge3cwLHcxLHcyfQorCisJcG9wCXtyNC1yMTEsIHBjfQorCisKK0MgU3RyYWlnaHQgbGluZSBjb2RlIGZvciBuIDw9IDQKKworTCgxKToJbGRyCXIzLCBbdXAsICMwXQorCXVtdWxsCXIxLCByMiwgcjMsIHIzCisJc3RtCXJwLCB7cjEscjJ9CisJYngJcjE0CisKK0woMik6CXB1c2gJe3I0LXI1fQorCWxkbQl1cCwge3I1LHIxMn0KKwl1bXVsbAlyMSwgcjIsIHI1LCByNQorCXVtdWxsCXIzLCByNCwgcjEyLCByMTIKKwl1bXVsbAlyNSwgcjEyLCByNSwgcjEyCisJYWRkcwlyNSwgcjUsIHI1CisJYWRjcwlyMTIsIHIxMiwgcjEyCisJYWRjCXI0LCByNCwgIzAKKwlhZGRzCXIyLCByMiwgcjUKKwlhZGNzCXIzLCByMywgcjEyCisJYWRjCXI0LCByNCwgIzAKKwlzdG0JcnAsIHtyMSxyMixyMyxyNH0KKwlwb3AJe3I0LXI1fQorCWJ4CXIxNAorCitMKDMpOglwdXNoCXtyNC1yMTF9CisJbGRtCXVwLCB7cjcscjgscjl9CisJdW11bGwJcjEsIHIyLCByNywgcjcKKwl1bXVsbAlyMywgcjQsIHI4LCByOAorCXVtdWxsCXI1LCByNiwgcjksIHI5CisJdW11bGwJcjEwLCByMTEsIHI3LCByOAorCW1vdglyMTIsICMwCisJdW1sYWwJcjExLCByMTIsIHI3LCByOQorCW1vdglyNywgIzAKKwl1bWxhbAlyMTIsIHI3LCByOCwgcjkKKwlhZGRzCXIxMCwgcjEwLCByMTAKKwlhZGNzCXIxMSwgcjExLCByMTEKKwlhZGNzCXIxMiwgcjEyLCByMTIKKwlhZGNzCXI3LCByNywgcjcKKwlhZGMJcjYsIHI2LCAjMAorCWFkZHMJcjIsIHIyLCByMTAKKwlhZGNzCXIzLCByMywgcjExCisJYWRjcwlyNCwgcjQsIHIxMgorCWFkY3MJcjUsIHI1LCByNworCWFkYwlyNiwgcjYsICMwCisJc3RtCXJwLCB7cjEscjIscjMscjQscjUscjZ9CisJcG9wCXtyNC1yMTF9CisJYngJcjE0CisKK0woNCk6CXB1c2gJe3I0LXIxMSwgcjE0fQorCWxkbQl1cCwge3I5LHIxMCxyMTEscjEyfQorCXVtdWxsCXIxLCByMiwgcjksIHI5CisJdW11bGwJcjMsIHI0LCByMTAsIHIxMAorCXVtdWxsCXI1LCByNiwgcjExLCByMTEKKwl1bXVsbAlyNywgcjgsIHIxMiwgcjEyCisJc3RtCXJwLCB7cjEscjIscjMscjQscjUscjYscjd9CisJdW11bGwJcjEsIHIyLCByOSwgcjEwCisJbW92CXIzLCAjMAorCXVtbGFsCXIyLCByMywgcjksIHIxMQorCW1vdglyNCwgIzAKKwl1bWxhbAlyMywgcjQsIHI5LCByMTIKKwltb3YJcjUsICMwCisJdW1sYWwJcjMsIHI1LCByMTAsIHIxMQorCXVtYWFsCXI0LCByNSwgcjEwLCByMTIKKwltb3YJcjYsICMwCisJdW1sYWwJcjUsIHI2LCByMTEsIHIxMgorCWFkZHMJcjEsIHIxLCByMQorCWFkY3MJcjIsIHIyLCByMgorCWFkY3MJcjMsIHIzLCByMworCWFkY3MJcjQsIHI0LCByNAorCWFkY3MJcjUsIHI1LCByNQorCWFkY3MJcjYsIHI2LCByNgorCWFkZAlycCwgcnAsICM0CisJYWRjCXI3LCByOCwgIzAKKwlsZG0JcnAsIHtyOCxyOSxyMTAscjExLHIxMixyMTR9CisJYWRkcwlyMSwgcjEsIHI4CisJYWRjcwlyMiwgcjIsIHI5CisJYWRjcwlyMywgcjMsIHIxMAorCWFkY3MJcjQsIHI0LCByMTEKKwlhZGNzCXI1LCByNSwgcjEyCisJYWRjcwlyNiwgcjYsIHIxNAorCWFkYwlyNywgcjcsICMwCisJc3RtCXJwLCB7cjEscjIscjMscjQscjUscjYscjd9CisJcG9wCXtyNC1yMTEsIHBjfQorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjYvc3VibXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjYvc3VibXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMjE3MzMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92Ni9zdWJtdWxfMS5hc20KQEAgLTAsMCArMSwxMjUgQEAKK2RubCAgQVJNIG1wbl9zdWJtdWxfMS4KKworZG5sICBDb3B5cmlnaHQgMjAxMiwgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIKK0MgU3Ryb25nQVJNOgkgLQorQyBYU2NhbGUJIC0KK0MgQ29ydGV4LUE3CSA/CitDIENvcnRleC1BOAkgPworQyBDb3J0ZXgtQTkJIDMuNzUKK0MgQ29ydGV4LUExNQkgNC4wCisKK0MgVGhpcyBsb29wIGNvbXBsZW1lbnRzIFUgb24gdGhlIGZseSwKK0MgICBVJyA9IEJebiAtIDEgLSBVCitDIGFuZCB0aGVuIHVzZXMgdGhhdAorQyAgIFIgLSBVKnYgPSBSICsgVScqdiArIHYgLSBCXm4gdgorCitDIFRPRE8KK0MgICogTWljcm8tb3B0aW1pc2UgZmVlZC1pbiBjb2RlLgorQyAgKiBPcHRpbWlzZSBmb3Igbj0xLDIgYnkgZGVsYXlpbmcgcmVnaXN0ZXIgc2F2aW5nLgorQyAgKiBUcnkgdXNpbmcgbGRtL3N0bS4KKworZGVmaW5lKGBycCcsYHIwJykKK2RlZmluZShgdXAnLGByMScpCitkZWZpbmUoYG4nLCBgcjInKQorZGVmaW5lKGB2MCcsYHIzJykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9zdWJtdWxfMSkKKwlzdG1mZAlzcCEsIHsgcjQsIHI1LCByNiwgcjcgfQorCisJYW5kcwlyNiwgbiwgIzMKKwltb3YJcjEyLCB2MAorCWJlcQlMKGZpMCkKKwljbXAJcjYsICMyCisJYmNjCUwoZmkxKQorCWJlcQlMKGZpMikKKworTChmaTMpOglsZHIJcjQsIFt1cF0sICMxMgorCW12bglyNCwgcjQKKwlsZHIJcjYsIFtycCwgIzBdCisJbGRyCXI1LCBbdXAsICMtOF0KKwliCUwobG8zKQorCitMKGZpMCk6CWxkcglyNSwgW3VwXSwgIzE2CisJbXZuCXI1LCByNQorCWxkcglyNywgW3JwXSwgIzQKKwlsZHIJcjQsIFt1cCwgIy0xMl0KKwliCUwobG8wKQorCitMKGZpMSk6CWxkcglyNCwgW3VwXSwgIzQKKwltdm4JcjQsIHI0CisJbGRyCXI2LCBbcnBdLCAjOAorCXN1YnMJbiwgbiwgIzEKKwliZXEJTCgxKQorCWxkcglyNSwgW3VwXQorCWIJTChsbzEpCisKK0woZmkyKToJbGRyCXI1LCBbdXBdLCAjOAorCW12bglyNSwgcjUKKwlsZHIJcjcsIFtycF0sICMxMgorCWxkcglyNCwgW3VwLCAjLTRdCisJYglMKGxvMikKKworCUFMSUdOKDE2KQorTCh0b3ApOglsZHIJcjYsIFtycCwgIy04XQorCWxkcglyNSwgW3VwXQorCXN0cglyNywgW3JwLCAjLTEyXQorTChsbzEpOgl1bWFhbAlyNiwgcjEyLCByNCwgdjAKKwlhZGQJdXAsIHVwLCAjMTYKKwltdm4JcjUsIHI1CisJbGRyCXI3LCBbcnAsICMtNF0KKwlsZHIJcjQsIFt1cCwgIy0xMl0KKwlzdHIJcjYsIFtycCwgIy04XQorTChsbzApOgl1bWFhbAlyNywgcjEyLCByNSwgdjAKKwltdm4JcjQsIHI0CisJbGRyCXI2LCBbcnAsICMwXQorCWxkcglyNSwgW3VwLCAjLThdCisJc3RyCXI3LCBbcnAsICMtNF0KK0wobG8zKToJdW1hYWwJcjYsIHIxMiwgcjQsIHYwCisJbXZuCXI1LCByNQorCWxkcglyNywgW3JwLCAjNF0KKwlsZHIJcjQsIFt1cCwgIy00XQorCXN0cglyNiwgW3JwXSwgIzE2CitMKGxvMik6CXVtYWFsCXI3LCByMTIsIHI1LCB2MAorCW12bglyNCwgcjQKKwlzdWJzCW4sIG4sICM0CisJYmhpCUwodG9wKQorCisJbGRyCXI2LCBbcnAsICMtOF0KKwlzdHIJcjcsIFtycCwgIy0xMl0KK0woMSk6CXVtYWFsCXI2LCByMTIsIHI0LCB2MAorCXN0cglyNiwgW3JwLCAjLThdCisJc3ViCXIwLCB2MCwgcjEyCisJbGRtZmQJc3AhLCB7IHI0LCByNSwgcjYsIHI3IH0KKwlieAlscgorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjZ0Mi9kaXZyZW1fMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92NnQyL2RpdnJlbV8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTI0NjE1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjZ0Mi9kaXZyZW1fMS5hc20KQEAgLTAsMCArMSwyMTIgQEAKK2RubCAgQVJNIHY2dDIgbXBuX2RpdnJlbV8xIGFuZCBtcG5fcHJlaW52X2RpdnJlbV8xLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkJbm9ybQl1bm9ybQlmcmFjCitDIFN0cm9uZ0FSTQkgLQkgLQkgLQorQyBYU2NhbGUJIC0JIC0JIC0KK0MgQ29ydGV4LUE3CSA/CSA/CSA/CitDIENvcnRleC1BOAkgPwkgPwkgPworQyBDb3J0ZXgtQTkJMTMJMTQJMTMKK0MgQ29ydGV4LUExNQkxMS40CTExLjgJMTEuMQorCitDIFRPRE8KK0MgICogT3B0aW1pc2UgaW5uZXItbG9vcHMgYmV0dGVyLCB0aGV5IGNvdWxkIGxpa2VseSBydW4gYSBjeWNsZSBvciB0d28gZmFzdGVyLgorQyAgKiBEZWNyZWFzZSByZWdpc3RlciB1c2FnZSwgc3RyZWFtbGluZSBub24tbG9vcCBjb2RlLgorCitkZWZpbmUoYHFwX2FyZycsICBgcjAnKQorZGVmaW5lKGBmbicsICAgICAgYHIxJykKK2RlZmluZShgdXBfYXJnJywgIGByMicpCitkZWZpbmUoYG5fYXJnJywgICBgcjMnKQorZGVmaW5lKGBkX2FyZycsICAgYDAnKQorZGVmaW5lKGBkaW52X2FyZycsYDQnKQorZGVmaW5lKGBjbnRfYXJnJywgYDgnKQorCitkZWZpbmUoYG4nLCAgICAgICBgcjknKQorZGVmaW5lKGBxcCcsICAgICAgYHI1JykKK2RlZmluZShgdXAnLCAgICAgIGByNicpCitkZWZpbmUoYGNudCcsICAgICBgcjcnKQorZGVmaW5lKGB0bmMnLCAgICAgYHIxMCcpCitkZWZpbmUoYGRpbnYnLCAgICBgcjAnKQorZGVmaW5lKGBkJywgICAgICAgYHI0JykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9wcmVpbnZfZGl2cmVtXzEpCisJc3RtZmQJc3AhLCB7cjQsIHI1LCByNiwgcjcsIHI4LCByOSwgcjEwLCByMTEsIGxyfQorCWxkcglkLCAgICBbc3AsICM5KjQrZF9hcmddCisJbGRyCWNudCwgIFtzcCwgIzkqNCtjbnRfYXJnXQorCXN0cglyMSwgW3NwLCAjOSo0K2RfYXJnXQlDIHJldXNlIGQgc3RhY2sgc2xvdCBmb3IgZm4KKwlzdWIJbiwgcjMsICMxCisJYWRkCXIzLCByMSwgbgorCWNtcAlkLCAjMAorCWFkZAlxcCwgcXBfYXJnLCByMywgbHNsICMyCUMgcHV0IHFwIGF0IFFbXSBlbmQKKwlhZGQJdXAsIHVwX2FyZywgbiwgbHNsICMyCUMgcHV0IHVwIGF0IFVbXSBlbmQKKwlsZHIJZGludiwgW3NwLCAjOSo0K2RpbnZfYXJnXQorCWJsdAlMKG5lbnQpCisJYglMKHVlbnQpCitFUElMT0dVRSgpCisKK1BST0xPR1VFKG1wbl9kaXZyZW1fMSkKKwlzdG1mZAlzcCEsIHtyNCwgcjUsIHI2LCByNywgcjgsIHI5LCByMTAsIHIxMSwgbHJ9CisJc3ViCW4sIHIzLCAjMQorCWxkcglkLCBbc3AsICM5KjQrZF9hcmddCUMgZAorCXN0cglyMSwgW3NwLCAjOSo0K2RfYXJnXQlDIHJldXNlIGQgc3RhY2sgc2xvdCBmb3IgZm4KKwlhZGQJcjMsIHIxLCBuCisJY21wCWQsICMwCisJYWRkCXFwLCBxcF9hcmcsIHIzLCBsc2wgIzIJQyBwdXQgcXAgYXQgUVtdIGVuZAorCWFkZAl1cCwgdXBfYXJnLCBuLCBsc2wgIzIJQyBwdXQgdXAgYXQgVVtdIGVuZAorCWJsdAlMKG5vcm1hbGlzZWQpCisKK0wodW5ub3JtKToKKwljbHoJY250LCBkCisJbW92CXIwLCBkLCBsc2wgY250CQlDIHBhc3MgZCA8PCBjbnQKKwlibAltcG5faW52ZXJ0X2xpbWIKK0wodWVudCk6CisJbW92CWQsIGQsIGxzbCBjbnQJCUMgZCA8PD0gY250CisJY21wCW4sICMwCisJbW92CXIxLCAjMAkJCUMgcgorCWJsdAlMKGZyYWMpCisKKwlsZHIJcjExLCBbdXAsICMwXQorCisJcnNiCXRuYywgY250LCAjMzIKKwltb3YJcjEsIHIxMSwgbHNyIHRuYworCW1vdglyMTEsIHIxMSwgbHNsIGNudAorCWJlcQlMKHVlbmQpCisKKwlsZHIJcjMsIFt1cCwgIy00XSEKKwlvcnIJcjIsIHIxMSwgcjMsIGxzciB0bmMKKwliCUwobWlkKQorCitMKHV0b3ApOgorCW1scwlyMSwgZCwgcjgsIHIxMQorCW1vdglyMTEsIHIzLCBsc2wgY250CisJbGRyCXIzLCBbdXAsICMtNF0hCisJY21wCXIxLCByMgorCWFkZGhpCXIxLCByMSwgZAorCXN1YmhpCXI4LCByOCwgIzEKKwlvcnIJcjIsIHIxMSwgcjMsIGxzciB0bmMKKwljbXAJcjEsIGQKKwliY3MJTCh1ZngpCitMKHVvayk6CXN0cglyOCwgW3FwXSwgIy00CitMKG1pZCk6CWFkZAlyOCwgcjEsICMxCisJbW92CXIxMSwgcjIKKwl1bWxhbAlyMiwgcjgsIHIxLCBkaW52CisJc3VicwluLCBuLCAjMQorCWJuZQlMKHV0b3ApCisKKwltbHMJcjEsIGQsIHI4LCByMTEKKwltb3YJcjExLCByMywgbHNsIGNudAorCWNtcAlyMSwgcjIKKwlhZGRoaQlyMSwgcjEsIGQKKwlzdWJoaQlyOCwgcjgsICMxCisJY21wCXIxLCBkCisJcnNiY3MJcjEsIGQsIHIxCisJYWRkY3MJcjgsIHI4LCAjMQorCXN0cglyOCwgW3FwXSwgIy00CisKK0wodWVuZCk6YWRkCXI4LCByMSwgIzEKKwltb3YJcjIsIHIxMQorCXVtbGFsCXIyLCByOCwgcjEsIGRpbnYKKwltbHMJcjEsIGQsIHI4LCByMTEKKwljbXAJcjEsIHIyCisJYWRkaGkJcjEsIHIxLCBkCisJc3ViaGkJcjgsIHI4LCAjMQorCWNtcAlyMSwgZAorCXJzYmNzCXIxLCBkLCByMQorCWFkZGNzCXI4LCByOCwgIzEKKwlzdHIJcjgsIFtxcF0sICMtNAorTChmcmFjKToKKwlsZHIJcjIsIFtzcCwgIzkqNCtkX2FyZ10JQyBmbgorCWNtcAlyMiwgIzAKKwliZXEJTChmZW5kKQorCitMKGZ0b3ApOm1vdglyNiwgIzAKKwlhZGQJcjMsIHIxLCAjMQorCXVtbGFsCXI2LCByMywgcjEsIGRpbnYKKwltb3YJcjgsICMwCisJbWxzCXIxLCBkLCByMywgcjgKKwljbXAJcjEsIHI2CisJYWRkaGkJcjEsIHIxLCBkCisJc3ViaGkJcjMsIHIzLCAjMQorCXN1YnMJcjIsIHIyLCAjMQorCXN0cglyMywgW3FwXSwgIy00CisJYm5lCUwoZnRvcCkKKworTChmZW5kKTptb3YJcjExLCByMSwgbHNyIGNudAorTChydG4pOgltb3YJcjAsIHIxMQorCWxkbWZkCXNwISwge3I0LCByNSwgcjYsIHI3LCByOCwgcjksIHIxMCwgcjExLCBwY30KKworTChub3JtYWxpc2VkKToKKwltb3YJcjAsIGQKKwlibAltcG5faW52ZXJ0X2xpbWIKK0wobmVudCk6CisJY21wCW4sICMwCisJbW92CXIxMSwgIzAJCQlDIHIKKwlibHQJTChuZW5kKQorCisJbGRyCXIxMSwgW3VwLCAjMF0KKwljbXAJcjExLCBkCisJbW92bG8JcjIsICMwCQkJQyBoaSBxIGxpbWIKKwltb3ZocwlyMiwgIzEJCQlDIGhpIHEgbGltYgorCXN1YmhzCXIxMSwgcjExLCBkCisKKwlzdHIJcjIsIFtxcF0sICMtNAorCWNtcAluLCAjMAorCWJlcQlMKG5lbmQpCisKK0wobnRvcCk6bGRyCXIxLCBbdXAsICMtNF0hCisJYWRkCXIxMiwgcjExLCAjMQorCXVtbGFsCXIxLCByMTIsIHIxMSwgZGludgorCWxkcglyMywgW3VwLCAjMF0KKwltbHMJcjExLCBkLCByMTIsIHIzCisJY21wCXIxMSwgcjEKKwlhZGRoaQlyMTEsIHIxMSwgZAorCXN1YmhpCXIxMiwgcjEyLCAjMQorCWNtcAlkLCByMTEKKwlibHMJTChuZngpCitMKG5vayk6CXN0cglyMTIsIFtxcF0sICMtNAorCXN1YnMJbiwgbiwgIzEKKwlibmUJTChudG9wKQorCitMKG5lbmQpOm1vdglyMSwgcjExCQkJQyByCisJbW92CWNudCwgIzAJCQlDIHNoaWZ0IGNudAorCWIJTChmcmFjKQorCitMKG5meCk6CWFkZAlyMTIsIHIxMiwgIzEKKwlyc2IJcjExLCBkLCByMTEKKwliCUwobm9rKQorTCh1ZngpOglyc2IJcjEsIGQsIHIxCisJYWRkCXI4LCByOCwgIzEKKwliCUwodW9rKQorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjZ0Mi9nY2RfMTEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjZ0Mi9nY2RfMTEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMzgzNTEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92NnQyL2djZF8xMS5hc20KQEAgLTAsMCArMSw2NSBAQAorZG5sICBBUk0gdjZ0MiBtcG5fZ2NkXzExLgorCitkbmwgIENvcHlyaWdodCAyMDAwLTIwMDIsIDIwMDUsIDIwMDksIDIwMTEsIDIwMTIsIDIwMTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorZG5sICBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9iaXQgKGFwcHJveCkKK0MgU3Ryb25nQVJNCSAtCitDIFhTY2FsZQkgLQorQyBDb3J0ZXgtQTUJIDUuMgorQyBDb3J0ZXgtQTcJIDUuMDQKK0MgQ29ydGV4LUE4CSAzLjU5CitDIENvcnRleC1BOQkgOS41CitDIENvcnRleC1BMTUJIDMuMgorQyBDb3J0ZXgtQTE3CSA1LjI1CitDIENvcnRleC1BNTMJIDMuNTcKKworZGVmaW5lKGB1MCcsICAgIGByMCcpCitkZWZpbmUoYHYwJywgICAgYHIxJykKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oNjQpCitQUk9MT0dVRShtcG5fZ2NkXzExKQorCXN1YnMJcjMsIHUwLCB2MAlDCQkJMAorCWJlcQlMKGVuZCkJCUMKKworCUFMSUdOKDE2KQorTCh0b3ApOglyYml0CXIxMiwgcjMJCUMJCQkxLDUKKwljbHoJcjEyLCByMTIJQwkJCTIKKwlyc2JjYwlyMywgcjMsICMwCUMgdiA9IGFicyh1LXYpLCBldmVuCTEKKwltb3Zjcwl1MCwgdjAJCUMgdSA9IG1pbih1LHYpCQkxCisJbHNyCXYwLCByMywgcjEyCUMJCQkzCisJc3VicwlyMywgdTAsIHYwCUMJCQk0CisJYm5lCUwodG9wKQkJQworCitMKGVuZCk6CWJ4CWxyCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92NnQyL2djZF8yMi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92NnQyL2djZF8yMi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IyMzgwOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL3Y2dDIvZ2NkXzIyLmFzbQpAQCAtMCwwICsxLDExMyBAQAorZG5sICBBUk0gdjZ0MiBtcG5fZ2NkXzIyLgorCitkbmwgIENvcHlyaWdodCAyMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQwkgICAgIGN5Y2xlcy9iaXQgKGFwcHJveCkKK0MgU3Ryb25nQVJNCSAtCitDIFhTY2FsZQkgLQorQyBDb3J0ZXgtQTUJMTAuMQorQyBDb3J0ZXgtQTcJIDkuMQorQyBDb3J0ZXgtQTgJIDYuMworQyBDb3J0ZXgtQTkJID8KK0MgQ29ydGV4LUExMgkgNy43CitDIENvcnRleC1BMTUJIDUuNworQyBDb3J0ZXgtQTE3CSA/CitDIENvcnRleC1BNTMJIDcuMAorCisKK2RlZmluZShgZ3AnLCAgICBgcjAnKQorCitkZWZpbmUoYHUxJywgICAgYHIxJykKK2RlZmluZShgdTAnLCAgICBgcjInKQorZGVmaW5lKGB2MScsICAgIGByMycpCitkZWZpbmUoYHYwJywgICAgYHI0JykKKworZGVmaW5lKGB0MCcsICAgIGByNScpCitkZWZpbmUoYHQxJywgICAgYHI2JykKK2RlZmluZShgY250JywgICBgcjcnKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2djZF8yMikKKwlwdXNoCXsgcjQtcjcgfQorCisJbGRyCXYwLCBbc3AsIzE2XQkJQworCitMKHRvcCk6CXN1YnMJdDAsIHUwLCB2MAkJQyAwIDcKKwliZXEJTChsb3d6KQorCXNiY3MJdDEsIHUxLCB2MQkJQyAxIDgKKworCXJiaXQJY250LCB0MAkJCUMgMQorCisJbmVnY2MJdDAsIHQwCisJbXZuY2MJdDEsIHQxCitMKGJjayk6CW1vdmNjCXYwLCB1MAorCW1vdmNjCXYxLCB1MQorCisJY2x6CWNudCwgY250CQlDIDIKKwlyc2IJcjEyLCBjbnQsICMzMgkJQyAzCisKKwlsc3IJdTAsIHQwLCBjbnQJCUMgMworCWxzbAlyMTIsIHQxLCByMTIJCUMgNAorCWxzcgl1MSwgdDEsIGNudAkJQyAzCisJb3JyCXUwLCB1MCwgcjEyCQlDIDUKKworCW9ycnMJcjEyLCB1MSwgdjEKKwlibmUJTCh0b3ApCisKKworCXN0cglyMTIsIFtncCwjNF0JCUMgaGlnaCByZXN1bHQgbGltYiA8PSAwCisKKwltb3YJcjYsIGdwCisJbW92CXIwLCB1MAkJCUMgcGFzcyAxc3QgYXJndW1lbnQKKwltb3YJcjEsIHYwCQkJQyBwYXNzIDJuZCBhcmd1bWVudAorCW1vdglyNywgcjE0CQkJQyBwcmVzZXJ2ZSBsaW5rIHJlZ2lzdGVyCisJYmwJbXBuX2djZF8xMQorCXN0cglyMCwgW3I2LCMwXQorCW1vdglyMTQsIHI3CisJcG9wCXsgcjQtcjcgfQorCWJ4CXIxNAorCitMKGxvd3opOkMgV2UgY29tZSBoZXJlIHdoZW4gdjAgLSB1MCA9IDAKKwlDIDEuIElmIHYxIC0gdTEgPSAwLCB0aGVuIGdjZCBpcyB1ID0gdi4KKwlDIDIuIEVsc2UgY29tcHV0ZSBnY2RfMjEoe3YxLHYwfSwgfHUxLXYxfCkKKwlzdWJzCXQwLCB1MSwgdjEKKwliZXEJTChlbmQpCisJbW92CXQxLCAjMAorCXJiaXQJY250LCB0MAkJCUMgMQorCW5lZ2NjCXQwLCB0MAorCWIJTChiY2spCisKK0woZW5kKToJc3RyCXYwLCBbZ3AsIzBdCisJc3RyCXYxLCBbZ3AsIzRdCisJcG9wCXsgcjQtcjcgfQorCWJ4CXIxNAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjdhL2NvcmExNS9hZGRtdWxfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92N2EvY29yYTE1L2FkZG11bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjI3N2IzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjdhL2NvcmExNS9hZGRtdWxfMS5hc20KQEAgLTAsMCArMSwxNDUgQEAKK2RubCAgQVJNIG1wbl9hZGRtdWxfMSBvcHRpbWlzZWQgZm9yIEExNS4KKworZG5sICBDb3B5cmlnaHQgMjAxMiwgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIJCWJlc3QKK0MgU3Ryb25nQVJNOiAgICAgLQorQyBYU2NhbGUJID8KK0MgQ29ydGV4LUE3CSA/CitDIENvcnRleC1BOAkgPworQyBDb3J0ZXgtQTkJIDYJCQkzLjI1CitDIENvcnRleC1BMTUJIDIJCQl0aGlzCisKK0MgVGhpcyBjb2RlIHVzZXMgdW1sYWwgZm9yIGFkZGluZyBpbiB0aGUgcnBbXSBkYXRhLCBrZWVwaW5nIHRoZSByZWN1cnJlbmN5IHBhdGgKK0Mgc2VwYXJhdGUgZnJvbSBhbnkgbXVsdGlwbHkgaW5zdHJ1Y3Rpb25zLiAgSXQgcGVyZm9ybXMgd2VsbCBvbiBBMTUsIGF0IHVtbGFsJ3MKK0MgYmFuZHdpZHRoLgorQworQyBBbiBBOSB2YXJpYW50IHNob3VsZCBwZXJoYXBzIHN0aWNrIHRvIDMtd2F5IHVucm9sbGluZywgYW5kIHVzZSBsZG0gYW5kIHN0bQorQyBmb3IgYWxsIGxvYWRzIGFuZCBzdG9yZXMuICBBbHRlcm5hdGl2ZWx5LCBpdCBjb3VsZCBkbyAyLXdheSBvciA0LXdheSwgYnV0CitDIHRoZW4gYWxpZ25tZW50IGF3YXJlIGNvZGUgd2lsbCBiZSBuZWNlc3NhcnkgKGFkZGluZyBPKDEpIGJvb2trZWVwaW5nCitDIG92ZXJoZWFkKS4KK0MKK0MgV2UgZG9uJ3QgdXNlIHIxMiBkdWUgdG8gbGRyZCBhbmQgc3RyZCBsaW1pdGF0aW9ucy4KKworQyBBcmNoaXRlY3R1cmUgcmVxdWlyZW1lbnRzOgorQyB2NQktCitDIHY1dAktCitDIHY1dGUJbGRyZCBzdHJkCitDIHY2CS0KK0MgdjZ0MgktCitDIHY3YQktCisKK2RlZmluZShgcnAnLCBgcjAnKQorZGVmaW5lKGB1cCcsIGByMScpCitkZWZpbmUoYG4nLCAgYHIyJykKK2RlZmluZShgdjAnLCBgcjMnKQorCitkZWZpbmUoYHcwJywgYHIxMCcpIGRlZmluZShgdzEnLCBgcjExJykKK2RlZmluZShgdTAnLCBgcjgnKSAgZGVmaW5lKGB1MScsIGByOScpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fYWRkbXVsXzEpCisJcHVzaAl7IHI0LXIxMSB9CisKKwlhbmRzCXI2LCBuLCAjMworCXN1YgluLCBuLCAjMworCWJlcQlMKGIwMCkKKwljbXAJcjYsICMyCisJYmNjCUwoYjAxKQorCWJlcQlMKGIxMCkKKworTChiMTEpOgltb3YJcjYsICMwCisJY21uCXIxMywgIzAJCQlDIGNhcnJ5IGNsZWFyCisJbGRyCXUxLCBbdXBdLCAjLTQKKwlsZHIJdzEsIFtycF0sICMtNAorCW1vdglyNywgIzAKKwliCUwobWlkKQorCitMKGIwMCk6CWxkcmQJdTAsIHUxLCBbdXBdCisJbGRyZAl3MCwgdzEsIFtycF0KKwltb3YJcjYsICMwCisJdW1sYWwJdzAsIHI2LCB1MCwgdjAKKwljbW4JcjEzLCAjMAkJCUMgY2FycnkgY2xlYXIKKwltb3YJcjcsICMwCisJc3RyCXcwLCBbcnBdCisJYglMKG1pZCkKKworTChiMTApOglsZHJkCXUwLCB1MSwgW3VwXSwgIzgKKwlsZHJkCXcwLCB3MSwgW3JwXQorCW1vdglyNCwgIzAKKwl1bWxhbAl3MCwgcjQsIHUwLCB2MAorCWNtbglyMTMsICMwCQkJQyBjYXJyeSBjbGVhcgorCW1vdglyNSwgIzAKKwlzdHIJdzAsIFtycF0sICM4CisJdW1sYWwJdzEsIHI1LCB1MSwgdjAKKwl0c3QJbiwgbgorCWJtaQlMKGVuZCkKKwliCUwodG9wKQorCitMKGIwMSk6CW1vdglyNCwgIzAKKwlsZHIJdTEsIFt1cF0sICM0CisJbGRyCXcxLCBbcnBdLCAjNAorCW1vdglyNSwgIzAKKwl1bWxhbAl3MSwgcjUsIHUxLCB2MAorCXRzdAluLCBuCisJYm1pCUwoZW5kKQorCisJQUxJR04oMTYpCitMKHRvcCk6CWxkcmQJdTAsIHUxLCBbdXAsICMwXQorCWFkY3MJcjQsIHI0LCB3MQorCWxkcmQJdzAsIHcxLCBbcnAsICMwXQorCW1vdglyNiwgIzAKKwl1bWxhbAl3MCwgcjYsIHUwLCB2MAkJQyAxIDIKKwlhZGNzCXI1LCByNSwgdzAKKwltb3YJcjcsICMwCisJc3RyZAlyNCwgcjUsIFtycCwgIy00XQorTChtaWQpOgl1bWxhbAl3MSwgcjcsIHUxLCB2MAkJQyAyIDMKKwlsZHJkCXUwLCB1MSwgW3VwLCAjOF0KKwlhZGNzCXI2LCByNiwgdzEKKwlsZHJkCXcwLCB3MSwgW3JwLCAjOF0KKwltb3YJcjQsICMwCisJdW1sYWwJdzAsIHI0LCB1MCwgdjAJCUMgMyA0CisJYWRjcwlyNywgcjcsIHcwCisJbW92CXI1LCAjMAorCXN0cmQJcjYsIHI3LCBbcnAsICM0XQorCXVtbGFsCXcxLCByNSwgdTEsIHYwCQlDIDAgMQorCXN1YgluLCBuLCAjNAorCWFkZAl1cCwgdXAsICMxNgorCWFkZAlycCwgcnAsICMxNgorCXRzdAluLCBuCisJYnBsCUwodG9wKQorCitMKGVuZCk6CWFkY3MJcjQsIHI0LCB3MQorCXN0cglyNCwgW3JwLCAjLTRdCisJYWRjCXIwLCByNSwgIzAKKwlwb3AJeyByNC1yMTEgfQorCWJ4CXIxNAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjdhL2NvcmExNS9hb3JzX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjdhL2NvcmExNS9hb3JzX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjM2Y4MzkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92N2EvY29yYTE1L2FvcnNfbi5hc20KQEAgLTAsMCArMSwxNjIgQEAKK2RubCAgQVJNIG1wbl9hZGRfbi9tcG5fc3ViX24gb3B0aW1pc2VkIGZvciBBMTUuCisKK2RubCAgQ29weXJpZ2h0IDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCQliZXN0CitDIFN0cm9uZ0FSTTogICAgIC0KK0MgWFNjYWxlCSA/CitDIENvcnRleC1BNwkgPworQyBDb3J0ZXgtQTgJID8KK0MgQ29ydGV4LUE5CSAzLjU1CQkJMi41CitDIENvcnRleC1BMTUJIDEuMjcJCQl0aGlzCisKK0MgVGhpcyB3YXMgYSBtYWpvciBpbXByb3ZlbWVudCBjb21wYXJlZCB0byB0aGUgY29kZSB3ZSBoYWQgYmVmb3JlLCBidXQgaXQgbWlnaHQKK0Mgbm90IGJlIHRoZSBiZXN0IDgtd2F5IGNvZGUgcG9zc2libGUuICBXZSd2ZSB0cmllZCBzb21lIHBlcm11dGF0aW9ucyBvZiBhdXRvLQorQyBpbmNyZW1lbnRzIGFuZCBzZXBhcmF0ZSBwb2ludGVyIHVwZGF0ZXMsIGJ1dCB0aGV5IGFsbCByYW4gYXQgdGhlIHNhbWUgc3BlZWQKK0Mgb24gQTE1LgorCitDIEFyY2hpdGVjdHVyZSByZXF1aXJlbWVudHM6CitDIHY1CS0KK0MgdjV0CS0KK0MgdjV0ZQlsZHJkIHN0cmQKK0MgdjYJLQorQyB2NnQyCS0KK0MgdjdhCS0KKworZGVmaW5lKGBycCcsIGByMCcpCitkZWZpbmUoYHVwJywgYHIxJykKK2RlZmluZShgdnAnLCBgcjInKQorZGVmaW5lKGBuJywgIGByMycpCisKK2lmZGVmKGBPUEVSQVRJT05fYWRkX24nLCBgCisgIGRlZmluZShgQUREU1VCQycsCWFkY3MpCisgIGRlZmluZShgSUZBREQnLAlgJDEnKQorICBkZWZpbmUoYFNFVENZJywJYGNtcAkkMSwgIzEnKQorICBkZWZpbmUoYFJFVFZBTCcsCWBhZGMJcjAsIG4sICMwJykKKyAgZGVmaW5lKGBSRVRWQUwyJywJYGFkYwlyMCwgbiwgIzEnKQorICBkZWZpbmUoYGZ1bmMnLAltcG5fYWRkX24pCisgIGRlZmluZShgZnVuY19uYycsCW1wbl9hZGRfbmMpJykKK2lmZGVmKGBPUEVSQVRJT05fc3ViX24nLCBgCisgIGRlZmluZShgQUREU1VCQycsCXNiY3MpCisgIGRlZmluZShgSUZBREQnLAlgJykKKyAgZGVmaW5lKGBTRVRDWScsCWByc2JzCSQxLCAkMSwgIzAnKQorICBkZWZpbmUoYFJFVFZBTCcsCWBzYmMJcjAsIHIwLCByMAorCQkJYW5kCXIwLCByMCwgIzEnKQorICBkZWZpbmUoYFJFVFZBTDInLAlgUkVUVkFMJykKKyAgZGVmaW5lKGBmdW5jJywJbXBuX3N1Yl9uKQorICBkZWZpbmUoYGZ1bmNfbmMnLAltcG5fc3ViX25jKScpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FkZF9uIG1wbl9hZGRfbmMgbXBuX3N1Yl9uIG1wbl9zdWJfbmMpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShmdW5jX25jKQorCWxkcglyMTIsIFtzcF0KKwliCUwoZW50KQorRVBJTE9HVUUoKQorUFJPTE9HVUUoZnVuYykKKwltb3YJcjEyLCAjMAorTChlbnQpOglwdXNoCXsgcjQtcjkgfQorCisJYW5kcwlyNiwgbiwgIzMKKwltb3YJbiwgbiwgbHNyICMyCisJYmVxCUwoYjAwKQorCWNtcAlyNiwgIzIKKwliY2MJTChiMDEpCisJYmVxCUwoYjEwKQorCitMKGIxMSk6CWxkcglyNSwgW3VwXSwgIzQKKwlsZHIJcjcsIFt2cF0sICM0CisJU0VUQ1koCXIxMikKKwlBRERTVUJDCXI5LCByNSwgcjcKKwlsZHJkCXI0LCByNSwgW3VwLCAjMF0KKwlsZHJkCXI2LCByNywgW3ZwLCAjMF0KKwlzdHIJcjksIFtycF0sICMtNAorCWIJTChsbykKKworTChiMDApOglsZHJkCXI0LCByNSwgW3VwXSwgIy04CisJbGRyZAlyNiwgcjcsIFt2cF0sICMtOAorCVNFVENZKAlyMTIpCisJc3ViCXJwLCBycCwgIzE2CisJYglMKG1pZCkKKworTChiMDEpOglsZHIJcjUsIFt1cF0sICMtNAorCWxkcglyNywgW3ZwXSwgIy00CisJU0VUQ1koCXIxMikKKwlBRERTVUJDCXI5LCByNSwgcjcKKwlzdHIJcjksIFtycF0sICMtMTIKKwl0c3QJbiwgbgorCWJlcQlMKHdkMSkKK0woZ3QxKToJbGRyZAlyNCwgcjUsIFt1cCwgIzhdCisJbGRyZAlyNiwgcjcsIFt2cCwgIzhdCisJYglMKG1pZCkKKworTChiMTApOglsZHJkCXI0LCByNSwgW3VwXQorCWxkcmQJcjYsIHI3LCBbdnBdCisJU0VUQ1koCXIxMikKKwlzdWIJcnAsIHJwLCAjOAorCWIJTChsbykKKworCUFMSUdOKDE2KQorTCh0b3ApOglsZHJkCXI0LCByNSwgW3VwLCAjOF0KKwlsZHJkCXI2LCByNywgW3ZwLCAjOF0KKwlzdHJkCXI4LCByOSwgW3JwLCAjOF0KK0wobWlkKToJQUREU1VCQwlyOCwgcjQsIHI2CisJQUREU1VCQwlyOSwgcjUsIHI3CisJbGRyZAlyNCwgcjUsIFt1cCwgIzE2XQorCWxkcmQJcjYsIHI3LCBbdnAsICMxNl0KKwlzdHJkCXI4LCByOSwgW3JwLCAjMTZdCisJQUREU1VCQwlyOCwgcjQsIHI2CisJQUREU1VCQwlyOSwgcjUsIHI3CisJc3ViCW4sIG4sICMyCisJdHN0CW4sIG4KKwlibWkJTChkbmUpCisJbGRyZAlyNCwgcjUsIFt1cCwgIzI0XQorCWxkcmQJcjYsIHI3LCBbdnAsICMyNF0KKwlzdHJkCXI4LCByOSwgW3JwLCAjMjRdCisJQUREU1VCQwlyOCwgcjQsIHI2CisJQUREU1VCQwlyOSwgcjUsIHI3CisJbGRyZAlyNCwgcjUsIFt1cCwgIzMyXSEKKwlsZHJkCXI2LCByNywgW3ZwLCAjMzJdIQorCXN0cmQJcjgsIHI5LCBbcnAsICMzMl0hCitMKGxvKToJQUREU1VCQwlyOCwgcjQsIHI2CisJQUREU1VCQwlyOSwgcjUsIHI3CisJdHN0CW4sIG4KKwlibmUJTCh0b3ApCisKK0woZW5kKToJc3RyZAlyOCwgcjksIFtycCwgIzhdCitMKHdkMSk6CVJFVFZBTAorCXBvcAl7IHI0LXI5IH0KKwlieAlyMTQKK0woZG5lKToJc3RyZAlyOCwgcjksIFtycCwgIzI0XQorCVJFVFZBTDIKKwlwb3AJeyByNC1yOSB9CisJYngJcjE0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92N2EvY29yYTE1L2JkaXZfcV8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL3Y3YS9jb3JhMTUvYmRpdl9xXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NWIzNzEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92N2EvY29yYTE1L2JkaXZfcV8xLmFzbQpAQCAtMCwwICsxLDM2IEBACitkbmwgIEFSTSBtcG5fYmRpdl9xXzEsIG1wbl9waTFfYmRpdl9xXzEgLS0gSGVuc2VsIGRpdmlzaW9uIGJ5IDEtbGltYiBkaXZpc29yLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTIsIDIwMTMsIDIwMTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fYmRpdl9xXzEgbXBuX3BpMV9iZGl2X3FfMSkKK2luY2x1ZGVfbXBuKGBhcm0vdjdhL2NvcmE4L2JkaXZfcV8xLmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92N2EvY29yYTE1L2NuZF9hb3JzX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjdhL2NvcmExNS9jbmRfYW9yc19uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWU1Y2QzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjdhL2NvcmExNS9jbmRfYW9yc19uLmFzbQpAQCAtMCwwICsxLDE1OCBAQAorZG5sICBBUk0gbXBuX2NuZF9hZGRfbi9tcG5fY25kX3N1Yl9uIG9wdGltaXNlZCBmb3IgQTE1LgorCitkbmwgIENvcHlyaWdodCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYgkJYmVzdAorQyBTdHJvbmdBUk06ICAgICAtCitDIFhTY2FsZQkgPworQyBDb3J0ZXgtQTcJID8KK0MgQ29ydGV4LUE4CSA/CitDIENvcnRleC1BOQkgMy43NQkJCSAzCitDIENvcnRleC1BMTUJIDEuNzgJCQl0aGlzCisKK0MgVGhpcyBjb2RlIGRvZXMgbm90IHJ1biBhcyB3ZWxsIGFzIG9uZSBjb3VsZCBoYXZlIGhvcGVkLCBzaW5jZSAxLjUgYy9sIHNlZW1zCitDIHJlYWxpc3RpYyBmb3IgdGhpcyBpbnNuIG1peC4KKworQyBBcmNoaXRlY3R1cmUgcmVxdWlyZW1lbnRzOgorQyB2NQktCitDIHY1dAktCitDIHY1dGUJbGRyZCBzdHJkCitDIHY2CS0KK0MgdjZ0MgktCitDIHY3YQktCisKK2RlZmluZShgY25kJyxgcjAnKQorZGVmaW5lKGBycCcsIGByMScpCitkZWZpbmUoYHVwJywgYHIyJykKK2RlZmluZShgdnAnLCBgcjMnKQorZGVmaW5lKGBuJywgIGByMTInKQorCitpZmRlZihgT1BFUkFUSU9OX2NuZF9hZGRfbicsIGAKKyAgZGVmaW5lKGBBRERTVUInLAlhZGRzKQorICBkZWZpbmUoYEFERFNVQkMnLAlhZGNzKQorICBkZWZpbmUoYElGQUREJywJYCQxJykKKyAgZGVmaW5lKGBJTklUQ1knLCAgICAgIGBjbW4JcjAsICMwJykKKyAgZGVmaW5lKGBSRVRWQUwnLAlgYWRjCXIwLCBuLCAjMCcpCisgIGRlZmluZShgUkVUVkFMMicsCWBhZGMJcjAsIG4sICMxJykKKyAgZGVmaW5lKGBmdW5jJywJbXBuX2NuZF9hZGRfbikKKyAgZGVmaW5lKGBmdW5jX25jJywJbXBuX2FkZF9uYyknKQoraWZkZWYoYE9QRVJBVElPTl9jbmRfc3ViX24nLCBgCisgIGRlZmluZShgQUREU1VCJywJc3VicykKKyAgZGVmaW5lKGBBRERTVUJDJywJc2JjcykKKyAgZGVmaW5lKGBJRkFERCcsCWAnKQorICBkZWZpbmUoYElOSVRDWScsICAgICAgYGNtcAlyMCwgIzAnKQorICBkZWZpbmUoYFJFVFZBTCcsCWBzYmMJcjAsIHIwLCByMAorCQkJYW5kCXIwLCByMCwgIzEnKQorICBkZWZpbmUoYFJFVFZBTDInLAlgUkVUVkFMJykKKyAgZGVmaW5lKGBmdW5jJywJbXBuX2NuZF9zdWJfbikKKyAgZGVmaW5lKGBmdW5jX25jJywJbXBuX3N1Yl9uYyknKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9jbmRfYWRkX24gbXBuX2NuZF9zdWJfbikKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKGZ1bmMpCisJbGRyCW4sIFtzcF0KKwlwdXNoCXsgcjQtcjkgfQorCisJY21wCWNuZCwgIzEKKwlzYmMJY25kLCBjbmQsIGNuZAkJQyBjb25kaXRpb25hbGx5IHNldCB0byAweGZmZmZmZmZmCisKKwlhbmRzCXI2LCBuLCAjMworCW1vdgluLCBuLCBsc3IgIzIKKwliZXEJTChiMDApCisJY21wCXI2LCAjMgorCWJjYwlMKGIwMSkKKwliZXEJTChiMTApCisKK0woYjExKToJbGRyCXI1LCBbdXBdLCAjNAorCWxkcglyNywgW3ZwXSwgIzQKKwliaWMJcjcsIHI3LCBjbmQKKwlBRERTVUIJcjksIHI1LCByNworCWxkcmQJcjQsIHI1LCBbdXAsICMwXQorCWxkcmQJcjYsIHI3LCBbdnAsICMwXQorCWJpYwlyNiwgcjYsIGNuZAorCWJpYwlyNywgcjcsIGNuZAorCXN0cglyOSwgW3JwXSwgIy00CisJYglMKGxvKQorCitMKGIwMCk6CWxkcmQJcjQsIHI1LCBbdXBdLCAjLTgKKwlsZHJkCXI2LCByNywgW3ZwXSwgIy04CisJYmljCXI2LCByNiwgY25kCisJYmljCXI3LCByNywgY25kCisJSU5JVENZCisJc3ViCXJwLCBycCwgIzE2CisJYglMKG1pZCkKKworTChiMDEpOglsZHIJcjUsIFt1cF0sICMtNAorCWxkcglyNywgW3ZwXSwgIy00CisJYmljCXI3LCByNywgY25kCisJQUREU1VCCXI5LCByNSwgcjcKKwlzdHIJcjksIFtycF0sICMtMTIKKwl0c3QJbiwgbgorCWJlcQlMKHdkMSkKK0woZ3QxKToJbGRyZAlyNCwgcjUsIFt1cCwgIzhdCisJbGRyZAlyNiwgcjcsIFt2cCwgIzhdCisJYmljCXI2LCByNiwgY25kCisJYmljCXI3LCByNywgY25kCisJYglMKG1pZCkKKworTChiMTApOglsZHJkCXI0LCByNSwgW3VwXQorCWxkcmQJcjYsIHI3LCBbdnBdCisJYmljCXI2LCByNiwgY25kCisJYmljCXI3LCByNywgY25kCisJSU5JVENZCisJc3ViCXJwLCBycCwgIzgKKwliCUwobG8pCisKKwlBTElHTigxNikKK0wodG9wKToJbGRyZAlyNiwgcjcsIFt2cCwgIzhdCisJbGRyZAlyNCwgcjUsIFt1cCwgIzhdCisJYmljCXI2LCByNiwgY25kCisJYmljCXI3LCByNywgY25kCisJc3RyZAlyOCwgcjksIFtycCwgIzhdCitMKG1pZCk6CUFERFNVQkMJcjgsIHI0LCByNgorCUFERFNVQkMJcjksIHI1LCByNworCWxkcmQJcjYsIHI3LCBbdnAsICMxNl0hCisJbGRyZAlyNCwgcjUsIFt1cCwgIzE2XSEKKwliaWMJcjYsIHI2LCBjbmQKKwliaWMJcjcsIHI3LCBjbmQKKwlzdWIJbiwgbiwgIzEKKwlzdHJkCXI4LCByOSwgW3JwLCAjMTZdIQorTChsbyk6CUFERFNVQkMJcjgsIHI0LCByNgorCUFERFNVQkMJcjksIHI1LCByNworCXRzdAluLCBuCisJYm5lCUwodG9wKQorCitMKGVuZCk6CXN0cmQJcjgsIHI5LCBbcnAsICM4XQorTCh3ZDEpOglSRVRWQUwKKwlwb3AJeyByNC1yOSB9CisJYngJcjE0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92N2EvY29yYTE1L2NvbS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92N2EvY29yYTE1L2NvbS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI1OGFmZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL3Y3YS9jb3JhMTUvY29tLmFzbQpAQCAtMCwwICsxLDE4MCBAQAorZG5sICBBUk0gbXBuX2NvbSBvcHRpbWlzZWQgZm9yIEExNS4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICAgICBjeWNsZXMvbGltYgorQyBTdHJvbmdBUk0JID8KK0MgWFNjYWxlCSA/CitDIENvcnRleC1BNwkgPworQyBDb3J0ZXgtQTgJID8KK0MgQ29ydGV4LUE5CTIuNQorQyBDb3J0ZXgtQTE1CTEuMAorCitDIFRoaXMgaXMgZ3JlYXQgQTE1IGNvcmUgcmVnaXN0ZXIgY29kZSwgYnV0IGl0IGlzIGEgYml0IGxhcmdlLgorQyBXZSB1c2UgRkVFRElOX1ZBUklBTlQgMSB0byBzYXZlIHNvbWUgc3BhY2UsIGJ1dCB1c2UgOC13YXkgdW5yb2xsaW5nLgorCitDIEFyY2hpdGVjdHVyZSByZXF1aXJlbWVudHM6CitDIHY1CS0KK0MgdjV0CS0KK0MgdjV0ZQlsZHJkIHN0cmQKK0MgdjYJLQorQyB2NnQyCS0KK0MgdjdhCS0KKworZGVmaW5lKGBGRUVESU5fVkFSSUFOVCcsIDEpCUMgYWx0ZXJuYXRpdmVzOiAwIDEgMgorZGVmaW5lKGBVTlJPTEwnLCA0eDIpCQlDIGFsdGVybmF0aXZlczogNCA0eDIKKworZGVmaW5lKGBycCcsIGByMCcpCitkZWZpbmUoYHVwJywgYHIxJykKK2RlZmluZShgbicsICBgcjInKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2NvbSkKKwlwdXNoCXsgcjQtcjUscjgtcjkgfQorCitpZmVsc2UoRkVFRElOX1ZBUklBTlQsMCxgCisJYW5kcwlyMTIsIG4sICMzCisJbW92CW4sIG4sIGxzciAjMgorCWJlcQlMKGIwMGEpCisJdHN0CXIxMiwgIzEKKwliZXEJTChieDApCisJbGRyCXI1LCBbdXBdLCAjNAorCW12bglyOSwgcjUKKwlzdHIJcjksIFtycF0sICM0CisJdHN0CXIxMiwgIzIKKwliZXEJTChiMDApCitMKGJ4MCk6CWxkcmQJcjQsIHI1LCBbdXAsICMwXQorCXN1YglycCwgcnAsICM4CisJYglMKGxvKQorTChiMDApOgl0c3QJbiwgbgorCWJlcQlMKHdkMSkKK0woYjAwYSk6bGRyZAlyNCwgcjUsIFt1cF0sICMtOAorCXN1YglycCwgcnAsICMxNgorCWIJTChtaWQpCisnKQoraWZlbHNlKEZFRURJTl9WQVJJQU5ULDEsYAorCWFuZAlyMTIsIG4sICMzCisJbW92CW4sIG4sIGxzciAjMgorCXRzdAlyMTIsICMxCisJYmVxCUwoYngwKQorCWxkcglyNSwgW3VwXSwgIzQKKwltdm4JcjksIHI1CisJc3RyCXI5LCBbcnBdLCAjNAorTChieDApOgl0c3QJcjEyLCAjMgorCWJlcQlMKGIwMCkKKwlsZHJkCXI0LCByNSwgW3VwLCAjMF0KKwlzdWIJcnAsIHJwLCAjOAorCWIJTChsbykKK0woYjAwKToJdHN0CW4sIG4KKwliZXEJTCh3ZDEpCisJbGRyZAlyNCwgcjUsIFt1cF0sICMtOAorCXN1YglycCwgcnAsICMxNgorCWIJTChtaWQpCisnKQoraWZlbHNlKEZFRURJTl9WQVJJQU5ULDIsYAorCWFuZHMJcjEyLCBuLCAjMworCW1vdgluLCBuLCBsc3IgIzIKKwliZXEJTChiMDApCisJY21wCXIxMiwgIzIKKwliY2MJTChiMDEpCisJYmVxCUwoYjEwKQorCitMKGIxMSk6CWxkcglyNSwgW3VwXSwgIzQKKwltdm4JcjksIHI1CisJbGRyZAlyNCwgcjUsIFt1cCwgIzBdCisJc3RyCXI5LCBbcnBdLCAjLTQKKwliCUwobG8pCisKK0woYjAwKToJbGRyZAlyNCwgcjUsIFt1cF0sICMtOAorCXN1YglycCwgcnAsICMxNgorCWIJTChtaWQpCisKK0woYjAxKToJbGRyCXI1LCBbdXBdLCAjLTQKKwltdm4JcjksIHI1CisJc3RyCXI5LCBbcnBdLCAjLTEyCisJdHN0CW4sIG4KKwliZXEJTCh3ZDEpCitMKGd0MSk6CWxkcmQJcjQsIHI1LCBbdXAsICM4XQorCWIJTChtaWQpCisKK0woYjEwKToJbGRyZAlyNCwgcjUsIFt1cF0KKwlzdWIJcnAsIHJwLCAjOAorCWIJTChsbykKKycpCisJQUxJR04oMTYpCitpZmVsc2UoVU5ST0xMLDQsYAorTCh0b3ApOglsZHJkCXI0LCByNSwgW3VwLCAjOF0KKwlzdHJkCXI4LCByOSwgW3JwLCAjOF0KK0wobWlkKToJbXZuCXI4LCByNAorCW12bglyOSwgcjUKKwlsZHJkCXI0LCByNSwgW3VwLCAjMTZdIQorCXN0cmQJcjgsIHI5LCBbcnAsICMxNl0hCisJc3ViCW4sIG4sICMxCitMKGxvKToJbXZuCXI4LCByNAorCW12bglyOSwgcjUKKwl0c3QJbiwgbgorCWJuZQlMKHRvcCkKKycpCitpZmVsc2UoVU5ST0xMLDR4MixgCitMKHRvcCk6CWxkcmQJcjQsIHI1LCBbdXAsICM4XQorCXN0cmQJcjgsIHI5LCBbcnAsICM4XQorTChtaWQpOgltdm4JcjgsIHI0CisJbXZuCXI5LCByNQorCWxkcmQJcjQsIHI1LCBbdXAsICMxNl0KKwlzdHJkCXI4LCByOSwgW3JwLCAjMTZdCisJbXZuCXI4LCByNAorCW12bglyOSwgcjUKKwlzdWIJbiwgbiwgIzIKKwl0c3QJbiwgbgorCWJtaQlMKGRuZSkKKwlsZHJkCXI0LCByNSwgW3VwLCAjMjRdCisJc3RyZAlyOCwgcjksIFtycCwgIzI0XQorCW12bglyOCwgcjQKKwltdm4JcjksIHI1CisJbGRyZAlyNCwgcjUsIFt1cCwgIzMyXSEKKwlzdHJkCXI4LCByOSwgW3JwLCAjMzJdIQorTChsbyk6CW12bglyOCwgcjQKKwltdm4JcjksIHI1CisJdHN0CW4sIG4KKwlibmUJTCh0b3ApCisnKQorCitMKGVuZCk6CXN0cmQJcjgsIHI5LCBbcnAsICM4XQorTCh3ZDEpOglwb3AJeyByNC1yNSxyOC1yOSB9CisJYngJcjE0CitpZmVsc2UoVU5ST0xMLDR4MixgCitMKGRuZSk6CXN0cmQJcjgsIHI5LCBbcnAsICMyNF0KKwlwb3AJeyByNC1yNSxyOC1yOSB9CisJYngJcjE0CisnKQorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjdhL2NvcmExNS9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92N2EvY29yYTE1L2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDljYmJiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjdhL2NvcmExNS9nbXAtbXBhcmFtLmgKQEAgLTAsMCArMSwyMTIgQEAKKy8qIGdtcC1tcGFyYW0uaCAtLSBDb21waWxlci9tYWNoaW5lIHBhcmFtZXRlciBoZWFkZXIgZmlsZS4KKworQ29weXJpZ2h0IDIwMTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNkZWZpbmUgR01QX0xJTUJfQklUUyAzMgorI2RlZmluZSBHTVBfTElNQl9CWVRFUyA0CisKKy8qIDIwMDAgTUh6IENvcnRleC1BMTUgd2l0aCBOZW9uIChpbiBzcGl0ZSBvZiBmaWxlIHBvc2l0aW9uKSAqLworLyogRkZUIHR1bmluZyBsaW1pdCA9IDUwLDczNiw2NjggKi8KKy8qIEdlbmVyYXRlZCBieSB0dW5ldXAuYywgMjAxOS0xMC0yMiwgZ2NjIDUuNCAqLworCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgMworI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgMgorI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAxMAorI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICBNUF9TSVpFX1RfTUFYCisjZGVmaW5lIFBSRUlOVl9NT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgICA4CisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAgICAxICAvKiBuYXRpdmUgKi8KKyNkZWZpbmUgRElWX1FSXzFOX1BJMV9NRVRIT0QgICAgICAgICAgICAgICAgIDEgIC8qIDQ5LjE0JSBmYXN0ZXIgdGhhbiAyICovCisjZGVmaW5lIERJVl9RUl8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVl9RUl8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVl9RUl8yX1BJMl9USFJFU0hPTEQgICAgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgICAgICAgMTcKKworI2RlZmluZSBESVZfMV9WU19NVUxfMV9QRVJDRU5UICAgICAgICAgICAgIDI2NworCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTE0CisjZGVmaW5lIE1VTF9UT09NNDRfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTc4CisjZGVmaW5lIE1VTF9UT09NNkhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjM4CisjZGVmaW5lIE1VTF9UT09NOEhfVEhSRVNIT0xEICAgICAgICAgICAgICAgNTk3CisKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNDNfVEhSRVNIT0xEICAgICAxMTMKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxMTUKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxMTUKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNjNfVEhSRVNIT0xEICAgICAxMTUKKyNkZWZpbmUgTVVMX1RPT000M19UT19UT09NNTRfVEhSRVNIT0xEICAgICAxNTQKKworI2RlZmluZSBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDM4CisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTI2CisjZGVmaW5lIFNRUl9UT09NNF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMzM2CisjZGVmaW5lIFNRUl9UT09NNl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNDQ2CisjZGVmaW5lIFNRUl9UT09NOF9USFJFU0hPTEQgICAgICAgICAgICAgICAgNjUwCisKKyNkZWZpbmUgTVVMTUlEX1RPT000Ml9USFJFU0hPTEQgICAgICAgICAgICAgNTIKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAyMworI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxNworCisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgNTc1ICAvKiBrID0gNSAqLworI2RlZmluZSBNVUxfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgNTc1LCA1fSwgeyAgICAgMjUsIDZ9LCB7ICAgICAxMywgNX0sIHsgICAgIDI3LCA2fSwgXAorICAgIHsgICAgIDI3LCA3fSwgeyAgICAgMTUsIDZ9LCB7ICAgICAzMSwgN30sIHsgICAgIDE5LCA2fSwgXAorICAgIHsgICAgIDM5LCA3fSwgeyAgICAgMjUsIDZ9LCB7ICAgICA1MSwgN30sIHsgICAgIDI3LCA4fSwgXAorICAgIHsgICAgIDE1LCA3fSwgeyAgICAgMzMsIDh9LCB7ICAgICAxOSwgN30sIHsgICAgIDQxLCA4fSwgXAorICAgIHsgICAgIDIzLCA3fSwgeyAgICAgNTEsIDh9LCB7ICAgICAyNywgOX0sIHsgICAgIDE1LCA4fSwgXAorICAgIHsgICAgIDMxLCA3fSwgeyAgICAgNjMsIDh9LCB7ICAgICAzOSwgOX0sIHsgICAgIDIzLCA4fSwgXAorICAgIHsgICAgIDU1LDEwfSwgeyAgICAgMTUsIDl9LCB7ICAgICAzMSwgOH0sIHsgICAgIDY3LCA5fSwgXAorICAgIHsgICAgIDM5LCA4fSwgeyAgICAgNzksIDl9LCB7ICAgICA0NywgOH0sIHsgICAgIDk1LCA5fSwgXAorICAgIHsgICAgIDU1LDEwfSwgeyAgICAgMzEsIDl9LCB7ICAgICA3MSwgOH0sIHsgICAgMTQzLCA5fSwgXAorICAgIHsgICAgIDg3LDEwfSwgeyAgICAgNDcsIDl9LCB7ICAgIDExMSwxMX0sIHsgICAgIDMxLDEwfSwgXAorICAgIHsgICAgIDYzLCA5fSwgeyAgICAxNDMsMTB9LCB7ICAgICA3OSwgOX0sIHsgICAgMTU5LDEwfSwgXAorICAgIHsgICAgIDk1LDExfSwgeyAgICAgNjMsMTB9LCB7ICAgIDE0MywgOX0sIHsgICAgMjg3LDEwfSwgXAorICAgIHsgICAgMTU5LDExfSwgeyAgICAgOTUsMTB9LCB7ICAgIDE5MSwxMn0sIHsgICAgIDYzLDExfSwgXAorICAgIHsgICAgMTI3LDEwfSwgeyAgICAyNTUsIDl9LCB7ICAgIDUxMSwxMH0sIHsgICAgMjcxLCA5fSwgXAorICAgIHsgICAgNTQzLDEwfSwgeyAgICAyODcsMTF9LCB7ICAgIDE1OSwxMH0sIHsgICAgMzM1LCA5fSwgXAorICAgIHsgICAgNjcxLDEwfSwgeyAgICAzNjcsIDl9LCB7ICAgIDczNSwxMX0sIHsgICAgMTkxLDEwfSwgXAorICAgIHsgICAgMzgzLCA5fSwgeyAgICA3OTksMTB9LCB7ICAgIDQxNSwxMX0sIHsgICAgMjIzLDEyfSwgXAorICAgIHsgICAgMTI3LDEwfSwgeyAgICA1NDMsMTF9LCB7ICAgIDI4NywxMH0sIHsgICAgNTc1LDExfSwgXAorICAgIHsgICAgMzE5LDEwfSwgeyAgICA2MzksMTF9LCB7ICAgIDM1MSwxMH0sIHsgICAgNzAzLDEyfSwgXAorICAgIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTB9LCB7ICAgIDc2NywxMX0sIHsgICAgNDE1LDEwfSwgXAorICAgIHsgICAgODMxLDExfSwgeyAgICA0NDcsMTN9LCB7ICAgIDEyNywxMn0sIHsgICAgMjU1LDExfSwgXAorICAgIHsgICAgNTQzLDEwfSwgeyAgIDEwODcsMTF9LCB7ICAgIDU3NSwxMn0sIHsgICAgMzE5LDExfSwgXAorICAgIHsgICAgNjcxLDEwfSwgeyAgIDEzNDMsMTF9LCB7ICAgIDczNSwxMn0sIHsgICAgMzgzLDExfSwgXAorICAgIHsgICAgODMxLDEyfSwgeyAgICA0NDcsMTF9LCB7ICAgIDk1OSwxM30sIHsgICAgMjU1LDEyfSwgXAorICAgIHsgICAgNTExLDExfSwgeyAgIDEwODcsMTJ9LCB7ICAgIDU3NSwxMX0sIHsgICAxMTUxLDEyfSwgXAorICAgIHsgICAgNjM5LDExfSwgeyAgIDEzNDMsMTJ9LCB7ICAgIDcwMywxM30sIHsgICAgMzgzLDEyfSwgXAorICAgIHsgICAgNzY3LDExfSwgeyAgIDE1OTksMTJ9LCB7ICAgIDg5NSwxNH0sIHsgICAgMjU1LDEzfSwgXAorICAgIHsgICAgNTExLDEyfSwgeyAgIDEwODcsMTN9LCB7ICAgIDYzOSwxMn0sIHsgICAxNDA3LDEzfSwgXAorICAgIHsgICAgNzY3LDEyfSwgeyAgIDE1OTksMTN9LCB7ICAgIDg5NSwxNH0sIHsgICAgNTExLDEzfSwgXAorICAgIHsgICAxMDIzLDEyfSwgeyAgIDIxMTEsMTN9LCB7ICAgMTE1MSwxMn0sIHsgICAyNDMxLDEzfSwgXAorICAgIHsgICAxMjc5LDEyfSwgeyAgIDI1NTksMTN9LCB7ICAgMTQwNywxNH0sIHsgICAgNzY3LDEzfSwgXAorICAgIHsgICAxNTM1LDEyfSwgeyAgIDMxMzUsMTN9LCB7ICAgMTY2MywxNX0sIHsgICAgNTExLDE0fSwgXAorICAgIHsgICAxMDIzLDEzfSwgeyAgIDIzMDMsMTR9LCB7ICAgMTI3OSwxM30sIHsgICAyNTU5LDEyfSwgXAorICAgIHsgICA1MTE5LDEzfSwgeyAgIDI2ODcsMTR9LCB7ICAgMTUzNSwxM30sIHsgICAzMDcxLDEyfSwgXAorICAgIHsgICA2MTQzLDEzfSwgeyAgIDMxOTksMTJ9LCB7ICAgNjM5OSwxNH0sIHsgICAxNzkxLDE1fSwgXAorICAgIHsgICAxMDIzLDE0fSwgeyAgIDIwNDcsMTN9LCB7ICAgNDA5NSwxNH0sIHsgICAyMzAzLDEzfSwgXAorICAgIHsgICA0NjA3LDEyfSwgeyAgIDkyMTUsMTN9LCB7ICAgNDg2MywxMn0sIHsgICA5NzI3LDE0fSwgXAorICAgIHsgICAyNTU5LDEzfSwgeyAgIDUxMTksMTV9LCB7ICAgMTUzNSwxNH0sIHsgICAzMDcxLDEzfSwgXAorICAgIHsgICA4MTkyLDE0fSwgeyAgMTYzODQsMTV9LCB7ICAzMjc2OCwxNn0gfQorI2RlZmluZSBNVUxfRkZUX1RBQkxFM19TSVpFIDE1NQorI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNTc2MAorCisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgNTI1ICAvKiBrID0gNSAqLworI2RlZmluZSBTUVJfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgNTI1LCA1fSwgeyAgICAgMjUsIDZ9LCB7ICAgICAyNywgN30sIHsgICAgIDE1LCA2fSwgXAorICAgIHsgICAgIDMxLCA3fSwgeyAgICAgMTcsIDZ9LCB7ICAgICAzNSwgN30sIHsgICAgIDE5LCA2fSwgXAorICAgIHsgICAgIDM5LCA3fSwgeyAgICAgMjUsIDZ9LCB7ICAgICA1MSwgN30sIHsgICAgIDI3LCA4fSwgXAorICAgIHsgICAgIDE1LCA3fSwgeyAgICAgMzMsIDh9LCB7ICAgICAxOSwgN30sIHsgICAgIDQxLCA4fSwgXAorICAgIHsgICAgIDIzLCA3fSwgeyAgICAgNTEsIDh9LCB7ICAgICAyNywgN30sIHsgICAgIDU1LCA5fSwgXAorICAgIHsgICAgIDE1LCA4fSwgeyAgICAgMzEsIDd9LCB7ICAgICA2MywgOH0sIHsgICAgIDM5LCA5fSwgXAorICAgIHsgICAgIDIzLCA4fSwgeyAgICAgNTEsMTB9LCB7ICAgICAxNSwgOX0sIHsgICAgIDMxLCA4fSwgXAorICAgIHsgICAgIDY3LCA5fSwgeyAgICAgMzksIDh9LCB7ICAgICA3OSwgOX0sIHsgICAgIDQ3LCA4fSwgXAorICAgIHsgICAgIDk5LCA5fSwgeyAgICAgNTUsMTB9LCB7ICAgICAzMSwgOX0sIHsgICAgIDc5LDEwfSwgXAorICAgIHsgICAgIDQ3LCA5fSwgeyAgICAgOTUsMTF9LCB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA5fSwgXAorICAgIHsgICAgMTM1LDEwfSwgeyAgICAgOTUsMTF9LCB7ICAgICA2MywxMH0sIHsgICAgMTQzLCA5fSwgXAorICAgIHsgICAgMjg3LCA4fSwgeyAgICA1NzUsIDl9LCB7ICAgIDMwMywxMH0sIHsgICAgMTU5LDExfSwgXAorICAgIHsgICAgIDk1LDEwfSwgeyAgICAxOTEsIDl9LCB7ICAgIDM4MywxMn0sIHsgICAgIDYzLDExfSwgXAorICAgIHsgICAgMTI3LDEwfSwgeyAgICAyNTUsIDl9LCB7ICAgIDUxMSwxMH0sIHsgICAgMjcxLCA5fSwgXAorICAgIHsgICAgNTQzLDEwfSwgeyAgICAyODcsMTF9LCB7ICAgIDE1OSwxMH0sIHsgICAgMzE5LCA5fSwgXAorICAgIHsgICAgNjM5LDEwfSwgeyAgICAzMzUsIDl9LCB7ICAgIDY3MSwxMH0sIHsgICAgMzUxLDExfSwgXAorICAgIHsgICAgMTkxLDEwfSwgeyAgICAzOTksIDl9LCB7ICAgIDc5OSwxMH0sIHsgICAgNDE1LCA5fSwgXAorICAgIHsgICAgODMxLDExfSwgeyAgICAyMjMsMTB9LCB7ICAgIDQ0NywxMn0sIHsgICAgMTI3LDEwfSwgXAorICAgIHsgICAgNTQzLDExfSwgeyAgICAyODcsMTB9LCB7ICAgIDU3NSwxMX0sIHsgICAgMzE5LDEwfSwgXAorICAgIHsgICAgNjM5LDExfSwgeyAgICAzNTEsMTB9LCB7ICAgIDcwMywxMn0sIHsgICAgMTkxLDExfSwgXAorICAgIHsgICAgMzgzLDEwfSwgeyAgICA3OTksMTF9LCB7ICAgIDQxNSwxMH0sIHsgICAgODMxLDExfSwgXAorICAgIHsgICAgNDQ3LDEzfSwgeyAgICAxMjcsMTF9LCB7ICAgIDU0MywxMH0sIHsgICAxMDg3LDExfSwgXAorICAgIHsgICAgNjA3LDEyfSwgeyAgICAzMTksMTF9LCB7ICAgIDczNSwxMn0sIHsgICAgMzgzLDExfSwgXAorICAgIHsgICAgODMxLDEyfSwgeyAgICA0NDcsMTF9LCB7ICAgIDk1OSwxMn0sIHsgICAgNTExLDExfSwgXAorICAgIHsgICAxMDIzLDEyfSwgeyAgICA1NzUsMTF9LCB7ICAgMTE1MSwxMn0sIHsgICAgNjM5LDExfSwgXAorICAgIHsgICAxMjc5LDEyfSwgeyAgICA3MDMsMTN9LCB7ICAgIDM4MywxMn0sIHsgICAgNzY3LDExfSwgXAorICAgIHsgICAxNTM1LDEyfSwgeyAgICA4MzEsMTF9LCB7ICAgMTY2MywxMn0sIHsgICAgODk1LDE0fSwgXAorICAgIHsgICAgMjU1LDEzfSwgeyAgICA1MTEsMTJ9LCB7ICAgMTA4NywxM30sIHsgICAgNjM5LDEyfSwgXAorICAgIHsgICAxMzQzLDEzfSwgeyAgICA3NjcsMTJ9LCB7ICAgMTU5OSwxM30sIHsgICAgODk1LDE0fSwgXAorICAgIHsgICAgNTExLDEzfSwgeyAgIDEwMjMsMTJ9LCB7ICAgMjExMSwxM30sIHsgICAxMTUxLDEyfSwgXAorICAgIHsgICAyMzAzLDEzfSwgeyAgIDEyNzksMTR9LCB7ICAgIDc2NywxM30sIHsgICAxNTM1LDEyfSwgXAorICAgIHsgICAzMTM1LDEzfSwgeyAgIDE2NjMsMTV9LCB7ICAgIDUxMSwxNH0sIHsgICAxMDIzLDEzfSwgXAorICAgIHsgICAyMDQ3LDEyfSwgeyAgIDQwOTUsMTN9LCB7ICAgMjMwMywxNH0sIHsgICAxMjc5LDEzfSwgXAorICAgIHsgICAyNTU5LDEyfSwgeyAgIDUxMTksMTR9LCB7ICAgMTUzNSwxM30sIHsgICAzMDcxLDEyfSwgXAorICAgIHsgICA2MTQzLDEzfSwgeyAgIDMxOTksMTJ9LCB7ICAgNjM5OSwxNH0sIHsgICAxNzkxLDE1fSwgXAorICAgIHsgICAxMDIzLDE0fSwgeyAgIDIwNDcsMTN9LCB7ICAgNDA5NSwxNH0sIHsgICAyMzAzLDEzfSwgXAorICAgIHsgICA0NjA3LDEyfSwgeyAgIDkyMTUsMTN9LCB7ICAgNDg2MywxMn0sIHsgICA5NzI3LDE0fSwgXAorICAgIHsgICAyNTU5LDE1fSwgeyAgIDE1MzUsMTR9LCB7ICAgMzA3MSwxM30sIHsgICA4MTkyLDE0fSwgXAorICAgIHsgIDE2Mzg0LDE1fSwgeyAgMzI3NjgsMTZ9IH0KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTNfU0laRSAxNTQKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDUzMTIKKworI2RlZmluZSBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDM4CisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgIDEwOTUwCisjZGVmaW5lIFNRUkxPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgIDEwCisjZGVmaW5lIFNRUkxPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDM1CisjZGVmaW5lIFNRUkxPX1NRUl9USFJFU0hPTEQgICAgICAgICAgICAgIDEwMzIzCisKKyNkZWZpbmUgRENfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNTcKKyNkZWZpbmUgRENfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAyNTQKKyNkZWZpbmUgRENfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNDgKKyNkZWZpbmUgRENfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyODYKKworI2RlZmluZSBJTlZfTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICA1NQorI2RlZmluZSBJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDI1MgorI2RlZmluZSBJTlZfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDI1MgorCisjZGVmaW5lIEJJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgMzcyCisjZGVmaW5lIFJFRENfMV9UT19SRURDXzJfVEhSRVNIT0xEICAgICAgICAgIDYxCisjZGVmaW5lIFJFRENfMl9UT19SRURDX05fVEhSRVNIT0xEICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKworI2RlZmluZSBNVV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTg1OAorI2RlZmluZSBNVV9ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgMTc4NworI2RlZmluZSBNVVBJX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgIDEyMgorI2RlZmluZSBNVV9CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTUyOAorI2RlZmluZSBNVV9CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTgzNgorCisjZGVmaW5lIFBPV01fU0VDX1RBQkxFICAxLDE0LDIwMCw0ODAsMTUzMgorCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgIDMzCisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTA0CisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAxMTIwCisKKyNkZWZpbmUgRkFDX0RTQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAxNjQKKyNkZWZpbmUgRkFDX09ERF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgMjcKKworI2RlZmluZSBNQVRSSVgyMl9TVFJBU1NFTl9USFJFU0hPTEQgICAgICAgICAxOQorI2RlZmluZSBIR0NEMl9ESVYxX01FVEhPRCAgICAgICAgICAgICAgICAgICAgMSAgLyogMy43MCUgZmFzdGVyIHRoYW4gMyAqLworI2RlZmluZSBIR0NEX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgIDEzNworI2RlZmluZSBIR0NEX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE1NworI2RlZmluZSBIR0NEX1JFRFVDRV9USFJFU0hPTEQgICAgICAgICAgICAgMzM4OQorI2RlZmluZSBHQ0RfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDYxMAorI2RlZmluZSBHQ0RFWFRfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDQ0MworI2RlZmluZSBKQUNPQklfQkFTRV9NRVRIT0QgICAgICAgICAgICAgICAgICAgNCAgLyogMTIuNjYlIGZhc3RlciB0aGFuIDEgKi8KKworLyogVHVuZXVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIHRvb2sgNjk3NTcgc2Vjb25kcyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjdhL2NvcmExNS9sb2dvcHNfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92N2EvY29yYTE1L2xvZ29wc19uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjAyNjE0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjdhL2NvcmExNS9sb2dvcHNfbi5hc20KQEAgLTAsMCArMSwyNTMgQEAKK2RubCAgQVJNIG1wbl9hbmRfbiwgbXBuX2FuZG5fbi4gbXBuX25hbmRfbiwgZXRjLCBvcHRpbWlzZWQgZm9yIEExNS4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICAgICBjeWNsZXMvbGltYiAgICAgICAgICAgICBjeWNsZXMvbGltYgorQyAgICAgICAgICBhbmQgYW5kbiBpb3IgeG9yICAgICAgICAgbmFuZCBpb3JuIG5pb3IgeG5vcgorQyBTdHJvbmdBUk0JID8JCQkgPworQyBYU2NhbGUJID8JCQkgPworQyBDb3J0ZXgtQTcJID8JCQkgPworQyBDb3J0ZXgtQTgJID8JCQkgPworQyBDb3J0ZXgtQTkJMy41CQkJMy41NgorQyBDb3J0ZXgtQTE1CTEuMjcJCQkxLjY0CisKK0MgVGhpcyBpcyBncmVhdCBBMTUgY29yZSByZWdpc3RlciBjb2RlLCBidXQgaXQgaXMgYSBiaXQgbGFyZ2UuCitDIFdlIHVzZSBGRUVESU5fVkFSSUFOVCAxIHRvIHNhdmUgc29tZSBzcGFjZSwgYnV0IHVzZSA4LXdheSB1bnJvbGxpbmcuCisKK0MgQXJjaGl0ZWN0dXJlIHJlcXVpcmVtZW50czoKK0MgdjUJLQorQyB2NXQJLQorQyB2NXRlCWxkcmQgc3RyZAorQyB2NgktCitDIHY2dDIJLQorQyB2N2EJLQorCitkZWZpbmUoYEZFRURJTl9WQVJJQU5UJywgMSkJQyBhbHRlcm5hdGl2ZXM6IDAgMSAyCitkZWZpbmUoYFVOUk9MTCcsIDR4MikJCUMgYWx0ZXJuYXRpdmVzOiA0IDR4MgorCitkZWZpbmUoYHJwJywgYHIwJykKK2RlZmluZShgdXAnLCBgcjEnKQorZGVmaW5lKGB2cCcsIGByMicpCitkZWZpbmUoYG4nLCAgYHIzJykKKworZGVmaW5lKGBQT1NUT1AnKQorCitpZmRlZihgT1BFUkFUSU9OX2FuZF9uJyxgCisgIGRlZmluZShgZnVuYycsICAgIGBtcG5fYW5kX24nKQorICBkZWZpbmUoYExPR09QJywgICBgYW5kCSQxLCAkMiwgJDMnKScpCitpZmRlZihgT1BFUkFUSU9OX2FuZG5fbicsYAorICBkZWZpbmUoYGZ1bmMnLCAgICBgbXBuX2FuZG5fbicpCisgIGRlZmluZShgTE9HT1AnLCAgIGBiaWMJJDEsICQyLCAkMycpJykKK2lmZGVmKGBPUEVSQVRJT05fbmFuZF9uJyxgCisgIGRlZmluZShgZnVuYycsICAgIGBtcG5fbmFuZF9uJykKKyAgZGVmaW5lKGBQT1NUT1AnLCAgYG12bgkkMSwgJDEnKQorICBkZWZpbmUoYExPR09QJywgICBgYW5kCSQxLCAkMiwgJDMnKScpCitpZmRlZihgT1BFUkFUSU9OX2lvcl9uJyxgCisgIGRlZmluZShgZnVuYycsICAgIGBtcG5faW9yX24nKQorICBkZWZpbmUoYExPR09QJywgICBgb3JyCSQxLCAkMiwgJDMnKScpCitpZmRlZihgT1BFUkFUSU9OX2lvcm5fbicsYAorICBkZWZpbmUoYGZ1bmMnLCAgICBgbXBuX2lvcm5fbicpCisgIGRlZmluZShgUE9TVE9QJywgIGBtdm4JJDEsICQxJykKKyAgZGVmaW5lKGBMT0dPUCcsICAgYGJpYwkkMSwgJDMsICQyJyknKQoraWZkZWYoYE9QRVJBVElPTl9uaW9yX24nLGAKKyAgZGVmaW5lKGBmdW5jJywgICAgYG1wbl9uaW9yX24nKQorICBkZWZpbmUoYFBPU1RPUCcsICBgbXZuCSQxLCAkMScpCisgIGRlZmluZShgTE9HT1AnLCAgIGBvcnIJJDEsICQyLCAkMycpJykKK2lmZGVmKGBPUEVSQVRJT05feG9yX24nLGAKKyAgZGVmaW5lKGBmdW5jJywgICAgYG1wbl94b3JfbicpCisgIGRlZmluZShgTE9HT1AnLCAgIGBlb3IJJDEsICQyLCAkMycpJykKK2lmZGVmKGBPUEVSQVRJT05feG5vcl9uJyxgCisgIGRlZmluZShgZnVuYycsICAgIGBtcG5feG5vcl9uJykKKyAgZGVmaW5lKGBQT1NUT1AnLCAgYG12bgkkMSwgJDEnKQorICBkZWZpbmUoYExPR09QJywgICBgZW9yCSQxLCAkMiwgJDMnKScpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FuZF9uIG1wbl9hbmRuX24gbXBuX25hbmRfbiBtcG5faW9yX24gbXBuX2lvcm5fbiBtcG5fbmlvcl9uIG1wbl94b3JfbiBtcG5feG5vcl9uKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUoZnVuYykKKwlwdXNoCXsgcjQtcjkgfQorCitpZmVsc2UoRkVFRElOX1ZBUklBTlQsMCxgCisJYW5kcwlyNiwgbiwgIzMKKwltb3YJbiwgbiwgbHNyICMyCisJYmVxCUwoYjAwYSkKKwl0c3QJcjYsICMxCisJYmVxCUwoYngwKQorCWxkcglyNSwgW3VwXSwgIzQKKwlsZHIJcjcsIFt2cF0sICM0CisJTE9HT1AoCXI5LCByNSwgcjcpCisJUE9TVE9QKAlyOSkKKwlzdHIJcjksIFtycF0sICM0CisJdHN0CXI2LCAjMgorCWJlcQlMKGIwMCkKK0woYngwKToJbGRyZAlyNCwgcjUsIFt1cCwgIzBdCisJbGRyZAlyNiwgcjcsIFt2cCwgIzBdCisJc3ViCXJwLCBycCwgIzgKKwliCUwobG8pCitMKGIwMCk6CXRzdAluLCBuCisJYmVxCUwod2QxKQorTChiMDBhKTpsZHJkCXI0LCByNSwgW3VwXSwgIy04CisJbGRyZAlyNiwgcjcsIFt2cF0sICMtOAorCXN1YglycCwgcnAsICMxNgorCWIJTChtaWQpCisnKQoraWZlbHNlKEZFRURJTl9WQVJJQU5ULDEsYAorCWFuZAlyNiwgbiwgIzMKKwltb3YJbiwgbiwgbHNyICMyCisJdHN0CXI2LCAjMQorCWJlcQlMKGJ4MCkKKwlsZHIJcjUsIFt1cF0sICM0CisJbGRyCXI3LCBbdnBdLCAjNAorCUxPR09QKAlyOSwgcjUsIHI3KQorCVBPU1RPUCgJcjkpCisJc3RyCXI5LCBbcnBdLCAjNAorTChieDApOgl0c3QJcjYsICMyCisJYmVxCUwoYjAwKQorCWxkcmQJcjQsIHI1LCBbdXAsICMwXQorCWxkcmQJcjYsIHI3LCBbdnAsICMwXQorCXN1YglycCwgcnAsICM4CisJYglMKGxvKQorTChiMDApOgl0c3QJbiwgbgorCWJlcQlMKHdkMSkKKwlsZHJkCXI0LCByNSwgW3VwXSwgIy04CisJbGRyZAlyNiwgcjcsIFt2cF0sICMtOAorCXN1YglycCwgcnAsICMxNgorCWIJTChtaWQpCisnKQoraWZlbHNlKEZFRURJTl9WQVJJQU5ULDIsYAorCWFuZHMJcjYsIG4sICMzCisJbW92CW4sIG4sIGxzciAjMgorCWJlcQlMKGIwMCkKKwljbXAJcjYsICMyCisJYmNjCUwoYjAxKQorCWJlcQlMKGIxMCkKKworTChiMTEpOglsZHIJcjUsIFt1cF0sICM0CisJbGRyCXI3LCBbdnBdLCAjNAorCUxPR09QKAlyOSwgcjUsIHI3KQorCWxkcmQJcjQsIHI1LCBbdXAsICMwXQorCWxkcmQJcjYsIHI3LCBbdnAsICMwXQorCVBPU1RPUCgJcjkpCisJc3RyCXI5LCBbcnBdLCAjLTQKKwliCUwobG8pCisKK0woYjAwKToJbGRyZAlyNCwgcjUsIFt1cF0sICMtOAorCWxkcmQJcjYsIHI3LCBbdnBdLCAjLTgKKwlzdWIJcnAsIHJwLCAjMTYKKwliCUwobWlkKQorCitMKGIwMSk6CWxkcglyNSwgW3VwXSwgIy00CisJbGRyCXI3LCBbdnBdLCAjLTQKKwlMT0dPUCgJcjksIHI1LCByNykKKwlQT1NUT1AoCXI5KQorCXN0cglyOSwgW3JwXSwgIy0xMgorCXRzdAluLCBuCisJYmVxCUwod2QxKQorTChndDEpOglsZHJkCXI0LCByNSwgW3VwLCAjOF0KKwlsZHJkCXI2LCByNywgW3ZwLCAjOF0KKwliCUwobWlkKQorCitMKGIxMCk6CWxkcmQJcjQsIHI1LCBbdXBdCisJbGRyZAlyNiwgcjcsIFt2cF0KKwlzdWIJcnAsIHJwLCAjOAorCWIJTChsbykKKycpCisJQUxJR04oMTYpCitpZmVsc2UoVU5ST0xMLDQsYAorTCh0b3ApOglsZHJkCXI0LCByNSwgW3VwLCAjOF0KKwlsZHJkCXI2LCByNywgW3ZwLCAjOF0KKwlQT1NUT1AoCXI4KQorCVBPU1RPUCgJcjkpCisJc3RyZAlyOCwgcjksIFtycCwgIzhdCitMKG1pZCk6CUxPR09QKAlyOCwgcjQsIHI2KQorCUxPR09QKAlyOSwgcjUsIHI3KQorCWxkcmQJcjQsIHI1LCBbdXAsICMxNl0hCisJbGRyZAlyNiwgcjcsIFt2cCwgIzE2XSEKKwlQT1NUT1AoCXI4KQorCVBPU1RPUCgJcjkpCisJc3RyZAlyOCwgcjksIFtycCwgIzE2XSEKKwlzdWIJbiwgbiwgIzEKK0wobG8pOglMT0dPUCgJcjgsIHI0LCByNikKKwlMT0dPUCgJcjksIHI1LCByNykKKwl0c3QJbiwgbgorCWJuZQlMKHRvcCkKKycpCitpZmVsc2UoVU5ST0xMLDR4MixgCitMKHRvcCk6CWxkcmQJcjQsIHI1LCBbdXAsICM4XQorCWxkcmQJcjYsIHI3LCBbdnAsICM4XQorCVBPU1RPUCgJcjgpCisJUE9TVE9QKAlyOSkKKwlzdHJkCXI4LCByOSwgW3JwLCAjOF0KK0wobWlkKToJTE9HT1AoCXI4LCByNCwgcjYpCisJTE9HT1AoCXI5LCByNSwgcjcpCisJbGRyZAlyNCwgcjUsIFt1cCwgIzE2XQorCWxkcmQJcjYsIHI3LCBbdnAsICMxNl0KKwlQT1NUT1AoCXI4KQorCVBPU1RPUCgJcjkpCisJc3RyZAlyOCwgcjksIFtycCwgIzE2XQorCUxPR09QKAlyOCwgcjQsIHI2KQorCUxPR09QKAlyOSwgcjUsIHI3KQorCXN1YgluLCBuLCAjMgorCXRzdAluLCBuCisJYm1pCUwoZG5lKQorCWxkcmQJcjQsIHI1LCBbdXAsICMyNF0KKwlsZHJkCXI2LCByNywgW3ZwLCAjMjRdCisJUE9TVE9QKAlyOCkKKwlQT1NUT1AoCXI5KQorCXN0cmQJcjgsIHI5LCBbcnAsICMyNF0KKwlMT0dPUCgJcjgsIHI0LCByNikKKwlMT0dPUCgJcjksIHI1LCByNykKKwlsZHJkCXI0LCByNSwgW3VwLCAjMzJdIQorCWxkcmQJcjYsIHI3LCBbdnAsICMzMl0hCisJUE9TVE9QKAlyOCkKKwlQT1NUT1AoCXI5KQorCXN0cmQJcjgsIHI5LCBbcnAsICMzMl0hCitMKGxvKToJTE9HT1AoCXI4LCByNCwgcjYpCisJTE9HT1AoCXI5LCByNSwgcjcpCisJdHN0CW4sIG4KKwlibmUJTCh0b3ApCisnKQorCitMKGVuZCk6CVBPU1RPUCgJcjgpCisJUE9TVE9QKAlyOSkKKwlzdHJkCXI4LCByOSwgW3JwLCAjOF0KK0wod2QxKToJcG9wCXsgcjQtcjkgfQorCWJ4CXIxNAoraWZlbHNlKFVOUk9MTCw0eDIsYAorTChkbmUpOglQT1NUT1AoCXI4KQorCVBPU1RPUCgJcjkpCisJc3RyZAlyOCwgcjksIFtycCwgIzI0XQorCXBvcAl7IHI0LXI5IH0KKwlieAlyMTQKKycpCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92N2EvY29yYTE1L211bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL3Y3YS9jb3JhMTUvbXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NmJhNWMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92N2EvY29yYTE1L211bF8xLmFzbQpAQCAtMCwwICsxLDEwNCBAQAorZG5sICBBUk0gbXBuX211bF8xIG9wdGltaXNlZCBmb3IgQTE1LgorCitkbmwgIENvcHlyaWdodCAyMDEyLCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYgkJYmVzdAorQyBTdHJvbmdBUk06CSAtCitDIFhTY2FsZQkgPworQyBDb3J0ZXgtQTcJID8KK0MgQ29ydGV4LUE4CSA/CitDIENvcnRleC1BOQkgNS4yNQkJCTMuMjUKK0MgQ29ydGV4LUExNQkgMi4yNQkJCXRoaXMKKworCitDIFRoaXMgcnVucyB3ZWxsIG9uIEExNSBidXQgdmVyeSBwb29ybHkgb24gQTkuICBCeSBzY2hlZHVsaW5nIGxvYWRzIGFuZCBhZGRzCitDIGl0IGlzIHBvc3NpYmxlIHRvIGdldCBnb29kIEE5IHBlcmZvcm1hbmNlIGFzIHdlbGwsIGJ1dCBhdCB0aGUgY29zdCBvZiB1c2luZworQyBtYW55IG1vcmUgKGNhbGxlZS1zYXZlcykgcmVnaXN0ZXJzLgorCitDIFRoaXMgaXMgYXJtdjUgY29kZSwgb3B0aW1pemVkIGZvciB0aGUgYXJtdjdhIGNwdSBBMTUuICBJdHMgbG9jYXRpb24gaW4gdGhlCitDIEdNUCBmaWxlIHN0cnVjdHVyZSBtaWdodCBiZSBtaXNsZWFkaW5nLgorCisKK2RlZmluZShgcnAnLCBgcjAnKQorZGVmaW5lKGB1cCcsIGByMScpCitkZWZpbmUoYG4nLCAgYHIyJykKK2RlZmluZShgdjAnLCBgcjMnKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX211bF8xYykKKwlsZHIJcjEyLCBbc3BdCisJYglMKGVudCkKK0VQSUxPR1VFKCkKK1BST0xPR1VFKG1wbl9tdWxfMSkKKwltb3YJcjEyLCAjMAorTChlbnQpOglwdXNoCXtyNC1yN30KKworCWxkcglyNiwgW3VwXSwgIzQKKwl0c3QJbiwgIzEKKwliZXEJTChieDApCisKK0woYngxKToJdW11bGwJcjQsIHI3LCByNiwgdjAKKwlhZGRzCXI0LCByNCwgcjEyCisJdHN0CW4sICMyCisJYmVxCUwobG8xKQorCWIJTChsbzMpCisKK0woYngwKToJdW11bGwJcjQsIHI1LCByNiwgdjAKKwlhZGRzCXI0LCByNCwgcjEyCisJdHN0CW4sICMyCisJYmVxCUwobG8wKQorCWIJTChsbzIpCisKK0wodG9wKToJbGRyCXI2LCBbdXBdLCAjNAorCXN0cglyNCwgW3JwXSwgIzQKKwl1bXVsbAlyNCwgcjUsIHI2LCB2MAorCWFkZHMJcjQsIHI0LCByNworTChsbzApOglsZHIJcjYsIFt1cF0sICM0CisJc3RyCXI0LCBbcnBdLCAjNAorCXVtdWxsCXI0LCByNywgcjYsIHYwCisJYWRjcwlyNCwgcjQsIHI1CitMKGxvMyk6CWxkcglyNiwgW3VwXSwgIzQKKwlzdHIJcjQsIFtycF0sICM0CisJdW11bGwJcjQsIHI1LCByNiwgdjAKKwlhZGNzCXI0LCByNCwgcjcKK0wobG8yKToJbGRyCXI2LCBbdXBdLCAjNAorCXN0cglyNCwgW3JwXSwgIzQKKwl1bXVsbAlyNCwgcjcsIHI2LCB2MAorCWFkY3MJcjQsIHI0LCByNQorTChsbzEpOglhZGMJcjcsIHI3LCAjMAorCXN1YnMJbiwgbiwgIzQKKwliZ3QJTCh0b3ApCisKKwlzdHIJcjQsIFtycF0KKwltb3YJcjAsIHI3CisJcG9wCXtyNC1yN30KKwlieAlscgorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjdhL2NvcmExNS9uZW9uL2FvcnNvcnJsc2gxX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjdhL2NvcmExNS9uZW9uL2FvcnNvcnJsc2gxX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4Y2ZlM2YKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92N2EvY29yYTE1L25lb24vYW9yc29ycmxzaDFfbi5hc20KQEAgLTAsMCArMSw0MyBAQAorZG5sICBBUk0gbXBuX2FkZGxzaENfbiwgbXBuX3N1YmxzaENfbiwgbXBuX3JzYmxzaENfbgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworZGVmaW5lKExTSCwJCTEpCisKK2lmZGVmKGBPUEVSQVRJT05fYWRkbHNoMV9uJyxgZGVmaW5lKGBET19hZGQnKScpCitpZmRlZihgT1BFUkFUSU9OX3N1YmxzaDFfbicsYGRlZmluZShgRE9fc3ViJyknKQoraWZkZWYoYE9QRVJBVElPTl9yc2Jsc2gxX24nLGBkZWZpbmUoYERPX3JzYicpJykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fYWRkbHNoMV9uIG1wbl9zdWJsc2gxX24gbXBuX3JzYmxzaDFfbikKKworaW5jbHVkZV9tcG4oYGFybS92N2EvY29yYTE1L25lb24vYW9yc29ycmxzaENfbi5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjdhL2NvcmExNS9uZW9uL2FvcnNvcnJsc2gyX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjdhL2NvcmExNS9uZW9uL2FvcnNvcnJsc2gyX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ODIwNGQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92N2EvY29yYTE1L25lb24vYW9yc29ycmxzaDJfbi5hc20KQEAgLTAsMCArMSw0MyBAQAorZG5sICBBUk0gbXBuX2FkZGxzaENfbiwgbXBuX3N1YmxzaENfbiwgbXBuX3JzYmxzaENfbgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworZGVmaW5lKExTSCwJCTIpCisKK2lmZGVmKGBPUEVSQVRJT05fYWRkbHNoMl9uJyxgZGVmaW5lKGBET19hZGQnKScpCitpZmRlZihgT1BFUkFUSU9OX3N1YmxzaDJfbicsYGRlZmluZShgRE9fc3ViJyknKQoraWZkZWYoYE9QRVJBVElPTl9yc2Jsc2gyX24nLGBkZWZpbmUoYERPX3JzYicpJykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fYWRkbHNoMl9uIG1wbl9zdWJsc2gyX24gbXBuX3JzYmxzaDJfbikKKworaW5jbHVkZV9tcG4oYGFybS92N2EvY29yYTE1L25lb24vYW9yc29ycmxzaENfbi5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjdhL2NvcmExNS9uZW9uL2FvcnNvcnJsc2hDX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjdhL2NvcmExNS9uZW9uL2FvcnNvcnJsc2hDX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxZjkzYzEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92N2EvY29yYTE1L25lb24vYW9yc29ycmxzaENfbi5hc20KQEAgLTAsMCArMSwxNDQgQEAKK2RubCAgQVJNIG1wbl9hZGRsc2hDX24sIG1wbl9zdWJsc2hDX24sIG1wbl9yc2Jsc2hDX24KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIFN0cm9uZ0FSTQkgLQorQyBYU2NhbGUJIC0KK0MgQ29ydGV4LUE3CSA/CitDIENvcnRleC1BOAkgPworQyBDb3J0ZXgtQTkJIDUuMjUKK0MgQ29ydGV4LUExNQkgMi4yNQorCitDIFRPRE8KK0MgICogQ29uc2lkZXIgdXNpbmcgNC13YXkgZmVlZC1pbiBjb2RlLgorQyAgKiBUaGlzIGlzIGFkLWhvYyBzY2hlZHVsZWQsIHBlcmhhcHMgdW5uZWNlc3NhcmlseSBzbyBmb3IgQTE1LCBhbmQgcGVyaGFwcworQyAgICBpbnN1ZmZpY2llbnRseSBmb3IgQTcgYW5kIEE4LgorCitkZWZpbmUoYHJwJywgYHIwJykKK2RlZmluZShgdXAnLCBgcjEnKQorZGVmaW5lKGB2cCcsIGByMicpCitkZWZpbmUoYG4nLCAgYHIzJykKKworaWZkZWYoYERPX2FkZCcsIGAKKyAgZGVmaW5lKGBBRENTQkNTJywJYGFkY3MJJDEsICQyLCAkMycpCisgIGRlZmluZShgQ0xSQ1knLAlgY21uCXIxMywgIzEnKQorICBkZWZpbmUoYFJFVFZBTCcsCWBhZGMJcjAsICQxLCAjMCcpCisgIGRlZmluZShgZnVuYycsCW1wbl9hZGRsc2hgJ0xTSGAnX24pJykKK2lmZGVmKGBET19zdWInLCBgCisgIGRlZmluZShgQURDU0JDUycsCWBzYmNzCSQxLCAkMiwgJDMnKQorICBkZWZpbmUoYENMUkNZJywJYGNtcAlyMTMsICMwJykKKyAgZGVmaW5lKGBSRVRWQUwnLAlgc2JjCSQyLCAkMiwgJDIKKwkJCWNtbgkkMiwgIzEKKwkJCWFkYwlyMCwgJDEsICMwJykKKyAgZGVmaW5lKGBmdW5jJywJbXBuX3N1YmxzaGAnTFNIYCdfbiknKQoraWZkZWYoYERPX3JzYicsIGAKKyAgZGVmaW5lKGBBRENTQkNTJywJYHNiY3MJJDEsICQzLCAkMicpCisgIGRlZmluZShgQ0xSQ1knLAlgY21wCXIxMywgIzAnKQorICBkZWZpbmUoYFJFVFZBTCcsCWBzYmMJcjAsICQxLCAjMCcpCisgIGRlZmluZShgZnVuYycsCW1wbl9yc2Jsc2hgJ0xTSGAnX24pJykKKworCitBU01fU1RBUlQoKQorUFJPTE9HVUUoZnVuYykKKwlwdXNoCSB7cjQtcjEwfQorCXZtb3YuaTgJIGQwLCAjMAkJCUMgY291bGQgZmVlZCBjYXJyeSB0aHJvdWdoIGhlcmUKKwlDTFJDWQorCXRzdAluLCAjMQorCWJlcQlMKGJiMCkKKworTChiYjEpOgl2bGQxLjMyCSB7ZDNbMF19LCBbdnBdIQorCXZzbGkudTMyIGQwLCBkMywgI0xTSAorCWxkcgkgcjEyLCBbdXBdLCAjNAorCXZtb3YuMzIJIHI1LCBkMFswXQorCXZzaHIudTMyIGQwLCBkMywgIzMyLUxTSAorCUFEQ1NCQ1MoIHIxMiwgcjEyLCByNSkKKwlzdHIJIHIxMiwgW3JwXSwgIzQKKwliaWNzCSBuLCBuLCAjMQorCWJlcQkgTChydG4pCisKK0woYmIwKToJdHN0CW4sICMyCisJYmVxCUwoYjAwKQorCitMKGIxMCk6CXZsZDEuMzIJIHtkM30sIFt2cF0hCisJdnNsaS51NjQgZDAsIGQzLCAjTFNICisJbGRtaWEJIHVwISwge3IxMCxyMTJ9CisJdm1vdgkgcjQsIHI1LCBkMAorCXZzaHIudTY0IGQwLCBkMywgIzY0LUxTSAorCUFEQ1NCQ1MoIHIxMCwgcjEwLCByNCkKKwlBRENTQkNTKCByMTIsIHIxMiwgcjUpCisJc3RtaWEJIHJwISwge3IxMCxyMTJ9CisJYmljcwkgbiwgbiwgIzIKKwliZXEJIEwocnRuKQorCitMKGIwMCk6CXZsZDEuMzIJIHtkMn0sIFt2cF0hCisJdnNsaS51NjQgZDAsIGQyLCAjTFNICisJdnNoci51NjQgZDEsIGQyLCAjNjQtTFNICisJdmxkMS4zMgkge2QzfSwgW3ZwXSEKKwl2c2xpLnU2NCBkMSwgZDMsICNMU0gKKwl2bW92CSByNiwgcjcsIGQwCisJdnNoci51NjQgZDAsIGQzLCAjNjQtTFNICisJc3ViCSBuLCBuLCAjNAorCXRzdAkgbiwgbgorCWJlcQkgTChlbmQpCisKKwlBTElHTigxNikKK0wodG9wKToJbGRtaWEJIHVwISwge3I4LHI5LHIxMCxyMTJ9CisJdmxkMS4zMgkge2QyfSwgW3ZwXSEKKwl2c2xpLnU2NCBkMCwgZDIsICNMU0gKKwl2bW92CSByNCwgcjUsIGQxCisJdnNoci51NjQgZDEsIGQyLCAjNjQtTFNICisJQURDU0JDUyggcjgsIHI4LCByNikKKwlBRENTQkNTKCByOSwgcjksIHI3KQorCXZsZDEuMzIJIHtkM30sIFt2cF0hCisJdnNsaS51NjQgZDEsIGQzLCAjTFNICisJdm1vdgkgcjYsIHI3LCBkMAorCXZzaHIudTY0IGQwLCBkMywgIzY0LUxTSAorCUFEQ1NCQ1MoIHIxMCwgcjEwLCByNCkKKwlBRENTQkNTKCByMTIsIHIxMiwgcjUpCisJc3RtaWEJIHJwISwge3I4LHI5LHIxMCxyMTJ9CisJc3ViCSBuLCBuLCAjNAorCXRzdAkgbiwgbgorCWJuZQkgTCh0b3ApCisKK0woZW5kKToJbGRtaWEJIHVwISwge3I4LHI5LHIxMCxyMTJ9CisJdm1vdgkgcjQsIHI1LCBkMQorCUFEQ1NCQ1MoIHI4LCByOCwgcjYpCisJQURDU0JDUyggcjksIHI5LCByNykKKwlBRENTQkNTKCByMTAsIHIxMCwgcjQpCisJQURDU0JDUyggcjEyLCByMTIsIHI1KQorCXN0bWlhCSBycCEsIHtyOCxyOSxyMTAscjEyfQorTChydG4pOgl2bW92LjMyCSByMCwgZDBbMF0KKwlSRVRWQUwoCSByMCwgcjEpCisJcG9wCSB7cjQtcjEwfQorCWJ4CSByMTQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL3Y3YS9jb3JhMTUvbmVvbi9jb20uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjdhL2NvcmExNS9uZW9uL2NvbS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU3YTYyOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL3Y3YS9jb3JhMTUvbmVvbi9jb20uYXNtCkBAIC0wLDAgKzEsOTcgQEAKK2RubCAgQVJNIE5lb24gbXBuX2NvbSBvcHRpbWlzZWQgZm9yIEExNS4KKworZG5sICBDb3B5cmlnaHQgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgU3Ryb25nQVJNCSA/CitDIFhTY2FsZQkgPworQyBDb3J0ZXgtQTgJID8KK0MgQ29ydGV4LUE5CSAyLjEKK0MgQ29ydGV4LUExNQkgMC42NQorCitkZWZpbmUoYHJwJywgYHIwJykKK2RlZmluZShgdXAnLCBgcjEnKQorZGVmaW5lKGBuJywgIGByMicpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fY29tKQorCWNtcAkJbiwgIzcKKwlibGUJCUwoYmMpCisKK0MgUGVyZm9ybSBhIGZldyBpbml0aWFsIG9wZXJhdGlvbiB1bnRpbCBycCBpcyAxMjgtYml0IGFsaWduZWQKKwl0c3QJCXJwLCAjNAorCWJlcQkJTChhbDEpCisJdmxkMS4zMgkJe2QwWzBdfSwgW3VwXSEKKwlzdWIJCW4sIG4sICMxCisJdm12bgkJZDAsIGQwCisJdnN0MS4zMgkJe2QwWzBdfSwgW3JwXSEKK0woYWwxKToJdHN0CQlycCwgIzgKKwliZXEJCUwoYWwyKQorCXZsZDEuMzIJCXtkMH0sIFt1cF0hCisJc3ViCQluLCBuLCAjMgorCXZtdm4JCWQwLCBkMAorCXZzdDEuMzIJCXtkMH0sIFtycDo2NF0hCitMKGFsMik6CXZsZDEuMzIJCXtxMn0sIFt1cF0hCisJc3VicwkJbiwgbiwgIzEyCisJYmx0CQlMKGVuZCkKKworCUFMSUdOKDE2KQorTCh0b3ApOgl2bGQxLjMyCQl7cTB9LCBbdXBdIQorCXZtdm4JCXEyLCBxMgorCXN1YnMJCW4sIG4sICM4CisJdnN0MS4zMgkJe3EyfSwgW3JwOjEyOF0hCisJdmxkMS4zMgkJe3EyfSwgW3VwXSEKKwl2bXZuCQlxMCwgcTAKKwl2c3QxLjMyCQl7cTB9LCBbcnA6MTI4XSEKKwliZ2UJTCh0b3ApCisKK0woZW5kKToJdm12bgkJcTIsIHEyCisJdnN0MS4zMgkJe3EyfSwgW3JwOjEyOF0hCisKK0MgSGFuZGxlIGxhc3QgMC03IGxpbWJzLiAgTm90ZSB0aGF0IHJwIGlzIGFsaWduZWQgYWZ0ZXIgbG9vcCwgYnV0IG5vdCB3aGVuIHdlCitDIGFycml2ZSBoZXJlIHZpYSBMKGJjKQorTChiYyk6CXRzdAkJbiwgIzQKKwliZXEJCUwodGwxKQorCXZsZDEuMzIJCXtxMH0sIFt1cF0hCisJdm12bgkJcTAsIHEwCisJdnN0MS4zMgkJe3EwfSwgW3JwXSEKK0wodGwxKToJdHN0CQluLCAjMgorCWJlcQkJTCh0bDIpCisJdmxkMS4zMgkJe2QwfSwgW3VwXSEKKwl2bXZuCQlkMCwgZDAKKwl2c3QxLjMyCQl7ZDB9LCBbcnBdIQorTCh0bDIpOgl0c3QJCW4sICMxCisJYmVxCQlMKHRsMykKKwl2bGQxLjMyCQl7ZDBbMF19LCBbdXBdCisJdm12bgkJZDAsIGQwCisJdnN0MS4zMgkJe2QwWzBdfSwgW3JwXQorTCh0bDMpOglieAkJbHIKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL3Y3YS9jb3JhMTUvbmVvbi9jb3B5ZC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92N2EvY29yYTE1L25lb24vY29weWQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4ZmU1MzUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92N2EvY29yYTE1L25lb24vY29weWQuYXNtCkBAIC0wLDAgKzEsMTEwIEBACitkbmwgIEFSTSBOZW9uIG1wbl9jb3B5ZCBvcHRpbWlzZWQgZm9yIEExNS4KKworZG5sICBDb3B5cmlnaHQgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIKK0MgU3Ryb25nQVJNCSAtCitDIFhTY2FsZQkgLQorQyBDb3J0ZXgtQTcJID8KK0MgQ29ydGV4LUE4CSA/CitDIENvcnRleC1BOQkgMS43NQkJc2xvd2VyIHRoYW4gY29yZSByZWdpc3RlciBjb2RlCitDIENvcnRleC1BMTUJIDAuNTIKKworZGVmaW5lKGBycCcsIGByMCcpCitkZWZpbmUoYHVwJywgYHIxJykKK2RlZmluZShgbicsICBgcjInKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2NvcHlkKQorCWFkZAlycCwgcnAsIG4sIGxzbCAjMgorCWFkZAl1cCwgdXAsIG4sIGxzbCAjMgorCisJY21wCW4sICM3CisJYmxlCUwoYmMpCisKK0MgQ29weSB1bnRpbCBycCBpcyAxMjgtYml0IGFsaWduZWQKKwl0c3QJcnAsICM0CisJYmVxCUwoYWwxKQorCXN1Ygl1cCwgdXAsICM0CisJdmxkMS4zMgl7ZDIyWzBdfSwgW3VwXQorCXN1YgluLCBuLCAjMQorCXN1YglycCwgcnAsICM0CisJdnN0MS4zMgl7ZDIyWzBdfSwgW3JwXQorTChhbDEpOgl0c3QJcnAsICM4CisJYmVxCUwoYWwyKQorCXN1Ygl1cCwgdXAsICM4CisJdmxkMS4zMgl7ZDIyfSwgW3VwXQorCXN1YgluLCBuLCAjMgorCXN1YglycCwgcnAsICM4CisJdnN0MS4zMgl7ZDIyfSwgW3JwOjY0XQorTChhbDIpOglzdWIJdXAsIHVwLCAjMTYKKwl2bGQxLjMyCXtkMjYtZDI3fSwgW3VwXQorCXN1YnMJbiwgbiwgIzEyCisJc3ViCXJwLCBycCwgIzE2CQkJQyBvZmZzZXQgcnAgZm9yIGxvb3AKKwlibHQJTChlbmQpCisKKwlzdWIJdXAsIHVwLCAjMTYJCQlDIG9mZnNldCB1cCBmb3IgbG9vcAorCW1vdglyMTIsICMtMTYKKworCUFMSUdOKDE2KQorTCh0b3ApOgl2bGQxLjMyCXtkMjItZDIzfSwgW3VwXSwgcjEyCisJdnN0MS4zMgl7ZDI2LWQyN30sIFtycDoxMjhdLCByMTIKKwl2bGQxLjMyCXtkMjYtZDI3fSwgW3VwXSwgcjEyCisJdnN0MS4zMgl7ZDIyLWQyM30sIFtycDoxMjhdLCByMTIKKwlzdWJzCW4sIG4sICM4CisJYmdlCUwodG9wKQorCisJYWRkCXVwLCB1cCwgIzE2CQkJQyB1bmRvIHVwIG9mZnNldAorCQkJCQkJQyBycCBvZmZzZXQgdW5kb2luZyBmb2xkZWQKK0woZW5kKToJdnN0MS4zMgl7ZDI2LWQyN30sIFtycDoxMjhdCisKK0MgQ29weSBsYXN0IDAtNyBsaW1icy4gIE5vdGUgdGhhdCBycCBpcyBhbGlnbmVkIGFmdGVyIGxvb3AsIGJ1dCBub3Qgd2hlbiB3ZQorQyBhcnJpdmUgaGVyZSB2aWEgTChiYykKK0woYmMpOgl0c3QJbiwgIzQKKwliZXEJTCh0bDEpCisJc3ViCXVwLCB1cCwgIzE2CisJdmxkMS4zMgl7ZDIyLWQyM30sIFt1cF0KKwlzdWIJcnAsIHJwLCAjMTYKKwl2c3QxLjMyCXtkMjItZDIzfSwgW3JwXQorTCh0bDEpOgl0c3QJbiwgIzIKKwliZXEJTCh0bDIpCisJc3ViCXVwLCB1cCwgIzgKKwl2bGQxLjMyCXtkMjJ9LCBbdXBdCisJc3ViCXJwLCBycCwgIzgKKwl2c3QxLjMyCXtkMjJ9LCBbcnBdCitMKHRsMik6CXRzdAluLCAjMQorCWJlcQlMKHRsMykKKwlzdWIJdXAsIHVwLCAjNAorCXZsZDEuMzIJe2QyMlswXX0sIFt1cF0KKwlzdWIJcnAsIHJwLCAjNAorCXZzdDEuMzIJe2QyMlswXX0sIFtycF0KK0wodGwzKToJYngJbHIKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL3Y3YS9jb3JhMTUvbmVvbi9jb3B5aS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92N2EvY29yYTE1L25lb24vY29weWkuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMDVhZmUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92N2EvY29yYTE1L25lb24vY29weWkuYXNtCkBAIC0wLDAgKzEsOTAgQEAKK2RubCAgQVJNIE5lb24gbXBuX2NvcHlpIG9wdGltaXNlZCBmb3IgQTE1LgorCitkbmwgIENvcHlyaWdodCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBTdHJvbmdBUk0JIC0KK0MgWFNjYWxlCSAtCitDIENvcnRleC1BNwkgPworQyBDb3J0ZXgtQTgJID8KK0MgQ29ydGV4LUE5CSAxLjc1CQlzbG93ZXIgdGhhbiBjb3JlIHJlZ2lzdGVyIGNvZGUKK0MgQ29ydGV4LUExNQkgMC41MgorCitkZWZpbmUoYHJwJywgYHIwJykKK2RlZmluZShgdXAnLCBgcjEnKQorZGVmaW5lKGBuJywgIGByMicpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fY29weWkpCisJY21wCW4sICM3CisJYmxlCUwoYmMpCisKK0MgQ29weSB1bnRpbCBycCBpcyAxMjgtYml0IGFsaWduZWQKKwl0c3QJcnAsICM0CisJYmVxCUwoYWwxKQorCXZsZDEuMzIJe2QyMlswXX0sIFt1cF0hCisJc3ViCW4sIG4sICMxCisJdnN0MS4zMgl7ZDIyWzBdfSwgW3JwXSEKK0woYWwxKToJdHN0CXJwLCAjOAorCWJlcQlMKGFsMikKKwl2bGQxLjMyCXtkMjJ9LCBbdXBdIQorCXN1YgluLCBuLCAjMgorCXZzdDEuMzIJe2QyMn0sIFtycDo2NF0hCitMKGFsMik6CXZsZDEuMzIJe2QyNi1kMjd9LCBbdXBdIQorCXN1YnMJbiwgbiwgIzEyCisJYmx0CUwoZW5kKQorCisJQUxJR04oMTYpCitMKHRvcCk6CXZsZDEuMzIJe2QyMi1kMjN9LCBbdXBdIQorCXZzdDEuMzIJe2QyNi1kMjd9LCBbcnA6MTI4XSEKKwl2bGQxLjMyCXtkMjYtZDI3fSwgW3VwXSEKKwl2c3QxLjMyCXtkMjItZDIzfSwgW3JwOjEyOF0hCisJc3VicwluLCBuLCAjOAorCWJnZQlMKHRvcCkKKworTChlbmQpOgl2c3QxLjMyCXtkMjYtZDI3fSwgW3JwOjEyOF0hCisKK0MgQ29weSBsYXN0IDAtNyBsaW1icy4gIE5vdGUgdGhhdCBycCBpcyBhbGlnbmVkIGFmdGVyIGxvb3AsIGJ1dCBub3Qgd2hlbiB3ZQorQyBhcnJpdmUgaGVyZSB2aWEgTChiYykKK0woYmMpOgl0c3QJbiwgIzQKKwliZXEJTCh0bDEpCisJdmxkMS4zMgl7ZDIyLWQyM30sIFt1cF0hCisJdnN0MS4zMgl7ZDIyLWQyM30sIFtycF0hCitMKHRsMSk6CXRzdAluLCAjMgorCWJlcQlMKHRsMikKKwl2bGQxLjMyCXtkMjJ9LCBbdXBdIQorCXZzdDEuMzIJe2QyMn0sIFtycF0hCitMKHRsMik6CXRzdAluLCAjMQorCWJlcQlMKHRsMykKKwl2bGQxLjMyCXtkMjJbMF19LCBbdXBdCisJdnN0MS4zMgl7ZDIyWzBdfSwgW3JwXQorTCh0bDMpOglieAlscgorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjdhL2NvcmExNS9uZW9uL3JzaDFhb3JzX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjdhL2NvcmExNS9uZW9uL3JzaDFhb3JzX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMTFkNmQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92N2EvY29yYTE1L25lb24vcnNoMWFvcnNfbi5hc20KQEAgLTAsMCArMSwxNzcgQEAKK2RubCAgQVJNIE5lb24gbXBuX3JzaDFhZGRfbiwgbXBuX3JzaDFzdWJfbi4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBTdHJvbmdBUk0JIC0KK0MgWFNjYWxlCSAtCitDIENvcnRleC1BNwkgPworQyBDb3J0ZXgtQTgJID8KK0MgQ29ydGV4LUE5CTQtNQorQyBDb3J0ZXgtQTE1CSAyLjUKKworQyBUT0RPCitDICAqIFRyeSB0byBtYWtlIHRoaXMgc21hbGxlciwgaXRzIHNpemUgKDM4NCBieXRlcykgaXMgZXhjZXNzaXZlLgorQyAgKiBUcnkgdG8gcmVhY2ggMi4yNSBjL2wgb24gQTE1LCB0byBtYXRjaCB0aGUgYWRkbHNoXzEgZmFtaWx5LgorQyAgKiBUaGlzIGlzIGFkLWhvYyBzY2hlZHVsZWQsIHBlcmhhcHMgdW5uZWNlc3NhcmlseSBzbyBmb3IgQTE1LCBhbmQgcGVyaGFwcworQyAgICBpbnN1ZmZpY2llbnRseSBmb3IgQTcgYW5kIEE4LgorCitkZWZpbmUoYHJwJywgYHIwJykKK2RlZmluZShgdXAnLCBgcjEnKQorZGVmaW5lKGB2cCcsIGByMicpCitkZWZpbmUoYG4nLCAgYHIzJykKKworaWZkZWYoYE9QRVJBVElPTl9yc2gxYWRkX24nLCBgCisgIGRlZmluZShgQUREU1VCUycsCWBhZGRzCSQxLCAkMiwgJDMnKQorICBkZWZpbmUoYEFEQ1NCQ1MnLAlgYWRjcwkkMSwgJDIsICQzJykKKyAgZGVmaW5lKGBJRkFERCcsCWAkMScpCisgIGRlZmluZShgSUZTVUInLAlgJykKKyAgZGVmaW5lKGBmdW5jJywJbXBuX3JzaDFhZGRfbiknKQoraWZkZWYoYE9QRVJBVElPTl9yc2gxc3ViX24nLCBgCisgIGRlZmluZShgQUREU1VCUycsCWBzdWJzCSQxLCAkMiwgJDMnKQorICBkZWZpbmUoYEFEQ1NCQ1MnLAlgc2JjcwkkMSwgJDIsICQzJykKKyAgZGVmaW5lKGBJRkFERCcsCWAnKQorICBkZWZpbmUoYElGU1VCJywJYCQxJykKKyAgZGVmaW5lKGBmdW5jJywJbXBuX3JzaDFzdWJfbiknKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9yc2gxYWRkX24gbXBuX3JzaDFzdWJfbikKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKGZ1bmMpCisJcHVzaAkge3I0LXIxMH0KKworCWFuZHMJcjQsIG4sICMzCisJYmVxCUwoYjAwKQorCWNtcAlyNCwgIzIKKwlibG8JTChiMDEpCisJYmVxCUwoYjEwKQorCitMKGIxMSk6CWxkbWlhCSB1cCEsIHtyOSxyMTAscjEyfQorCWxkbWlhCSB2cCEsIHtyNSxyNixyN30KKwlBRERTVUJTKCByOSwgcjksIHI1KQorCXZtb3YJIGQ0LCByOSwgcjkKKwlBRENTQkNTKCByMTAsIHIxMCwgcjYpCisJQURDU0JDUyggcjEyLCByMTIsIHI3KQorCXZzaHIudTY0IGQzLCBkNCwgIzEKKwl2bW92CSBkMSwgcjEwLCByMTIKKwl2c2xpLnU2NCBkMywgZDEsICMzMQorCXZzaHIudTY0IGQyLCBkMSwgIzEKKwl2c3QxLjMyCSBkM1swXSwgW3JwXSEKKwliaWNzCSBuLCBuLCAjMworCWJlcQkgTCh3ZDIpCitMKGd0Myk6CWxkbWlhCSB1cCEsIHtyOCxyOSxyMTAscjEyfQorCWxkbWlhCSB2cCEsIHtyNCxyNSxyNixyN30KKwliCSBMKG1pMCkKKworTChiMTApOglsZG1pYQkgdXAhLCB7cjEwLHIxMn0KKwlsZG1pYQkgdnAhLCB7cjYscjd9CisJQUREU1VCUyggcjEwLCByMTAsIHI2KQorCUFEQ1NCQ1MoIHIxMiwgcjEyLCByNykKKwl2bW92CSBkNCwgcjEwLCByMTIKKwliaWNzCSBuLCBuLCAjMgorCXZzaHIudTY0IGQyLCBkNCwgIzEKKwliZXEJIEwod2QyKQorTChndDIpOglsZG1pYQkgdXAhLCB7cjgscjkscjEwLHIxMn0KKwlsZG1pYQkgdnAhLCB7cjQscjUscjYscjd9CisJYgkgTChtaTApCisKK0woYjAxKToJbGRyCSByMTIsIFt1cF0sICM0CisJbGRyCSByNywgW3ZwXSwgIzQKKwlBRERTVUJTKCByMTIsIHIxMiwgcjcpCisJdm1vdgkgZDQsIHIxMiwgcjEyCisJYmljcwkgbiwgbiwgIzEKKwlibmUJIEwoZ3QxKQorCW1vdgkgcjUsIHIxMiwgbHNyICMxCitJRkFERChgCWFkYwkgcjEsIG4sICMwJykKK0lGU1VCKGAJYWRjCSByMSwgbiwgIzEnKQorCWJmaQkgcjUsIHIxLCAjMzEsICMxCisJc3RyCSByNSwgW3JwXQorCWFuZAkgcjAsIHIxMiwgIzEKKwlwb3AJIHtyNC1yMTB9CisJYngJIHIxNAorTChndDEpOglsZG1pYQkgdXAhLCB7cjgscjkscjEwLHIxMn0KKwlsZG1pYQkgdnAhLCB7cjQscjUscjYscjd9CisJdnNoci51NjQgZDIsIGQ0LCAjMQorCUFEQ1NCQ1MoIHI4LCByOCwgcjQpCisJQURDU0JDUyggcjksIHI5LCByNSkKKwl2bW92CSBkMCwgcjgsIHI5CisJQURDU0JDUyggcjEwLCByMTAsIHI2KQorCUFEQ1NCQ1MoIHIxMiwgcjEyLCByNykKKwl2c2xpLnU2NCBkMiwgZDAsICMzMQorCXZzaHIudTY0IGQzLCBkMCwgIzEKKwl2c3QxLjMyCSBkMlswXSwgW3JwXSEKKwliCSBMKG1pMSkKKworTChiMDApOglsZG1pYQkgdXAhLCB7cjgscjkscjEwLHIxMn0KKwlsZG1pYQkgdnAhLCB7cjQscjUscjYscjd9CisJQUREU1VCUyggcjgsIHI4LCByNCkKKwlBRENTQkNTKCByOSwgcjksIHI1KQorCXZtb3YJIGQ0LCByOCwgcjkKKwlBRENTQkNTKCByMTAsIHIxMCwgcjYpCisJQURDU0JDUyggcjEyLCByMTIsIHI3KQorCXZzaHIudTY0IGQzLCBkNCwgIzEKKwliCSBMKG1pMSkKKworCUFMSUdOKDE2KQorTCh0b3ApOglsZG1pYQkgdXAhLCB7cjgscjkscjEwLHIxMn0KKwlsZG1pYQkgdnAhLCB7cjQscjUscjYscjd9CisJdnNsaS51NjQgZDMsIGQxLCAjNjMKKwl2c2hyLnU2NCBkMiwgZDEsICMxCisJdnN0MS4zMgkgZDMsIFtycF0hCitMKG1pMCk6CUFEQ1NCQ1MoIHI4LCByOCwgcjQpCisJQURDU0JDUyggcjksIHI5LCByNSkKKwl2bW92CSBkMCwgcjgsIHI5CisJQURDU0JDUyggcjEwLCByMTAsIHI2KQorCUFEQ1NCQ1MoIHIxMiwgcjEyLCByNykKKwl2c2xpLnU2NCBkMiwgZDAsICM2MworCXZzaHIudTY0IGQzLCBkMCwgIzEKKwl2c3QxLjMyCSBkMiwgW3JwXSEKK0wobWkxKToJdm1vdgkgZDEsIHIxMCwgcjEyCisJc3ViCSBuLCBuLCAjNAorCXRzdAkgbiwgbgorCWJuZQkgTCh0b3ApCisKK0woZW5kKToJdnNsaS51NjQgZDMsIGQxLCAjNjMKKwl2c2hyLnU2NCBkMiwgZDEsICMxCisJdnN0MS4zMgkgZDMsIFtycF0hCitMKHdkMik6CXZtb3YJIHI0LCByNSwgZDIKK0lGQUREKGAJYWRjCSByMSwgbiwgIzAnKQorSUZTVUIoYAlhZGMJIHIxLCBuLCAjMScpCisJYmZpCSByNSwgcjEsICMzMSwgIzEKKwlzdG0JIHJwLCB7cjQscjV9CisKK0wocnRuKToJdm1vdi4zMgkgcjAsIGQ0WzBdCisJYW5kCSByMCwgcjAsICMxCisJcG9wCSB7cjQtcjEwfQorCWJ4CSByMTQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL3Y3YS9jb3JhMTUvc3VibXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjdhL2NvcmExNS9zdWJtdWxfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ3YmZlOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL3Y3YS9jb3JhMTUvc3VibXVsXzEuYXNtCkBAIC0wLDAgKzEsMTU5IEBACitkbmwgIEFSTSBtcG5fc3VibXVsXzEgb3B0aW1pc2VkIGZvciBBMTUuCisKK2RubCAgQ29weXJpZ2h0IDIwMTIsIDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCQliZXN0CitDIFN0cm9uZ0FSTTogICAgIC0KK0MgWFNjYWxlCSA/CitDIENvcnRleC1BNwkgPworQyBDb3J0ZXgtQTgJID8KK0MgQ29ydGV4LUE5CSA1Ljc1CQkJMy43NQorQyBDb3J0ZXgtQTE1CSAyLjMyCQkJdGhpcworCitDIFRoaXMgY29kZSB1c2VzIHVtbGFsIGFuZCB1bWFhbCBmb3IgYWRkaW5nIGluIHRoZSBycFtdIGRhdGEsIGtlZXBpbmcgdGhlCitDIHJlY3VycmVuY3kgcGF0aCBzZXBhcmF0ZSBmcm9tIGFueSBtdWx0aXBseSBpbnN0cnVjdGlvbnMuICBJdCBwZXJmb3JtcyB3ZWxsIG9uCitDIEExNSwgYnV0IG5vdCBxdWl0ZSBhdCB0aGUgbXVsdGlwbHkgYmFuZHdpZHRoIGxpa2UgdGhlIGNvcnJlc3BvbmRpbmcgYWRkbXVsXzEKK0MgY29kZS4KK0MKK0MgV2UgZG9uJ3QgdXNlIHIxMiBkdWUgdG8gbGRyZCBhbmQgc3RyZCBsaW1pdGF0aW9ucy4KK0MKK0MgVGhpcyBsb29wIGNvbXBsZW1lbnRzIFUgb24gdGhlIGZseSwKK0MgICBVJyA9IEJebiAtIDEgLSBVCitDIGFuZCB0aGVuIHVzZXMgdGhhdAorQyAgIFIgLSBVKnYgPSBSICsgVScqdiArIHYgLSBCXm4gdgorCitDIEFyY2hpdGVjdHVyZSByZXF1aXJlbWVudHM6CitDIHY1CS0KK0MgdjV0CS0KK0MgdjV0ZQlsZHJkIHN0cmQKK0MgdjYJdW1hYWwKK0MgdjZ0MgktCitDIHY3YQktCisKK2RlZmluZShgcnAnLCBgcjAnKQorZGVmaW5lKGB1cCcsIGByMScpCitkZWZpbmUoYG4nLCAgYHIyJykKK2RlZmluZShgdjAnLCBgcjMnKQorCitkZWZpbmUoYHcwJywgYHIxMCcpIGRlZmluZShgdzEnLCBgcjExJykKK2RlZmluZShgdTAnLCBgcjgnKSAgZGVmaW5lKGB1MScsIGByOScpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fc3VibXVsXzEpCisJc3ViCXNwLCBzcCwgIzMyCisJc3RyZAlyMTAsIHIxMSwgW3NwLCAjMjRdCisJc3RyZAlyOCwgcjksIFtzcCwgIzE2XQorCXN0cmQJcjYsIHI3LCBbc3AsICM4XQorCXN0cmQJcjQsIHI1LCBbc3AsICMwXQorQwlwdXNoCXsgcjQtcjExIH0KKworCWFuZHMJcjYsIG4sICMzCisJc3ViCW4sIG4sICMzCisJYmVxCUwoYjAwKQorCWNtcAlyNiwgIzIKKwliY2MJTChiMDEpCisJYmVxCUwoYjEwKQorCitMKGIxMSk6CW1vdglyNiwgIzAKKwlsZHIJdTEsIFt1cF0sICMtNAorCWxkcgl3MSwgW3JwXSwgIy0xNgorCW12bgl1MSwgdTEKKwlhZGRzCXI3LCB2MCwgIzAKKwliCUwobWlkKQorCitMKGIwMCk6CWxkcmQJdTAsIHUxLCBbdXBdCisJbGRyZAl3MCwgdzEsIFtycF0sICMtMTIKKwltdm4JdTAsIHUwCisJbXZuCXUxLCB1MQorCW1vdglyNiwgdjAKKwl1bWFhbAl3MCwgcjYsIHUwLCB2MAorCWNtbglyMTMsICMwCQkJQyBjYXJyeSBjbGVhcgorCW1vdglyNywgIzAKKwlzdHIJdzAsIFtycCwgIzEyXQorCWIJTChtaWQpCisKK0woYjEwKToJbGRyZAl1MCwgdTEsIFt1cF0sICM4CisJbGRyZAl3MCwgdzEsIFtycF0KKwltdm4JdTAsIHUwCisJbXZuCXUxLCB1MQorCW1vdglyNCwgdjAKKwl1bWFhbAl3MCwgcjQsIHUwLCB2MAorCW1vdglyNSwgIzAKKwlzdHIJdzAsIFtycF0sICMtNAorCXVtbGFsCXcxLCByNSwgdTEsIHYwCisJYWRkcwluLCBuLCAjMAorCWJtaQlMKGVuZCkKKwliCUwodG9wKQorCitMKGIwMSk6CWxkcgl1MSwgW3VwXSwgIzQKKwlsZHIJdzEsIFtycF0sICMtOAorCW12bgl1MSwgdTEKKwltb3YJcjUsIHYwCisJbW92CXI0LCAjMAorCXVtYWFsCXcxLCByNSwgdTEsIHYwCisJdHN0CW4sIG4KKwlibWkJTChlbmQpCisKK0MJQUxJR04oMTYpCitMKHRvcCk6CWxkcmQJdTAsIHUxLCBbdXAsICMwXQorCWFkY3MJcjQsIHI0LCB3MQorCW12bgl1MCwgdTAKKwlsZHJkCXcwLCB3MSwgW3JwLCAjMTJdCisJbXZuCXUxLCB1MQorCW1vdglyNiwgIzAKKwl1bWxhbAl3MCwgcjYsIHUwLCB2MAkJQyAxIDIKKwlhZGNzCXI1LCByNSwgdzAKKwltb3YJcjcsICMwCisJc3RyZAlyNCwgcjUsIFtycCwgIzhdCitMKG1pZCk6CXVtYWFsCXcxLCByNywgdTEsIHYwCQlDIDIgMworCWxkcmQJdTAsIHUxLCBbdXAsICM4XQorCWFkZAl1cCwgdXAsICMxNgorCWFkY3MJcjYsIHI2LCB3MQorCW12bgl1MCwgdTAKKwlsZHJkCXcwLCB3MSwgW3JwLCAjMjBdCisJbXZuCXUxLCB1MQorCW1vdglyNCwgIzAKKwl1bWxhbAl3MCwgcjQsIHUwLCB2MAkJQyAzIDQKKwlhZGNzCXI3LCByNywgdzAKKwltb3YJcjUsICMwCisJc3RyZAlyNiwgcjcsIFtycCwgIzE2XSEKKwlzdWIJbiwgbiwgIzQKKwl1bWxhbAl3MSwgcjUsIHUxLCB2MAkJQyAwIDEKKwl0c3QJbiwgbgorCWJwbAlMKHRvcCkKKworTChlbmQpOglhZGNzCXI0LCByNCwgdzEKKwlzdHIJcjQsIFtycCwgIzhdCisJYWRjCXIwLCByNSwgIzAKKwlzdWIJcjAsIHYwLCByMAorCXBvcAl7IHI0LXIxMSB9CisJYngJcjE0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92N2EvY29yYTE3L2FkZG11bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL3Y3YS9jb3JhMTcvYWRkbXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMWVkNDcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92N2EvY29yYTE3L2FkZG11bF8xLmFzbQpAQCAtMCwwICsxLDM0IEBACitkbmwgIEFSTSBtcG5fYWRkbXVsXzEKKworZG5sICBDb3B5cmlnaHQgMjAxOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRtdWxfMSkKK2luY2x1ZGVfbXBuKGBhcm0vdjYvYWRkbXVsXzEuYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL3Y3YS9jb3JhMTcvZ21wLW1wYXJhbS5oIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjdhL2NvcmExNy9nbXAtbXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQzZDRiYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL3Y3YS9jb3JhMTcvZ21wLW1wYXJhbS5oCkBAIC0wLDAgKzEsMjMzIEBACisvKiBnbXAtbXBhcmFtLmggLS0gQ29tcGlsZXIvbWFjaGluZSBwYXJhbWV0ZXIgaGVhZGVyIGZpbGUuCisKK0NvcHlyaWdodCAyMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgMzIKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgNAorCisvKiAxODAwIE1IeiBDb3J0ZXgtQTE3IHdpdGggTmVvbiAoaW4gc3BpdGUgb2YgZmlsZSBwb3NpdGlvbikgKi8KKy8qIEZGVCB0dW5pbmcgbGltaXQgPSA1MTI0Mzk3NSAqLworLyogR2VuZXJhdGVkIGJ5IHR1bmV1cC5jLCAyMDE5LTEwLTI5LCBnY2MgNi4zICovCisKKyNkZWZpbmUgTU9EXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PRF8xTl9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA1CisjZGVmaW5lIE1PRF8xVV9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICAzCisjZGVmaW5lIE1PRF8xXzFfVE9fTU9EXzFfMl9USFJFU0hPTEQgICAgICAgICA4CisjZGVmaW5lIE1PRF8xXzJfVE9fTU9EXzFfNF9USFJFU0hPTEQgICAgIE1QX1NJWkVfVF9NQVgKKyNkZWZpbmUgUFJFSU5WX01PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgMTIKKyNkZWZpbmUgVVNFX1BSRUlOVl9ESVZSRU1fMSAgICAgICAgICAgICAgICAgIDEgIC8qIG5hdGl2ZSAqLworI2RlZmluZSBESVZfUVJfMU5fUEkxX01FVEhPRCAgICAgICAgICAgICAgICAgMSAgLyogNTQuMDglIGZhc3RlciB0aGFuIDIgKi8KKyNkZWZpbmUgRElWX1FSXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWX1FSXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWX1FSXzJfUEkyX1RIUkVTSE9MRCAgICAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWRVhBQ1RfMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAobmF0aXZlKSAqLworI2RlZmluZSBCTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgICAgICA0NQorCisjZGVmaW5lIERJVl8xX1ZTX01VTF8xX1BFUkNFTlQgICAgICAgICAgICAgMjQ4CisKKyNkZWZpbmUgTVVMX1RPT00yMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMzgKKyNkZWZpbmUgTVVMX1RPT00zM19USFJFU0hPTEQgICAgICAgICAgICAgICAxMzIKKyNkZWZpbmUgTVVMX1RPT000NF9USFJFU0hPTEQgICAgICAgICAgICAgICAyMDAKKyNkZWZpbmUgTVVMX1RPT002SF9USFJFU0hPTEQgICAgICAgICAgICAgICAzMDMKKyNkZWZpbmUgTVVMX1RPT004SF9USFJFU0hPTEQgICAgICAgICAgICAgICA0NzgKKworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT000M19USFJFU0hPTEQgICAgIDEzNworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT001M19USFJFU0hPTEQgICAgIDE3OQorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT001M19USFJFU0hPTEQgICAgIDEzMgorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT002M19USFJFU0hPTEQgICAgIDE0NQorI2RlZmluZSBNVUxfVE9PTTQzX1RPX1RPT001NF9USFJFU0hPTEQgICAgIDE5MQorCisjZGVmaW5lIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNjIKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxODkKKyNkZWZpbmUgU1FSX1RPT000X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzNTQKKyNkZWZpbmUgU1FSX1RPT002X1RIUkVTSE9MRCAgICAgICAgICAgICAgICA0MjYKKyNkZWZpbmUgU1FSX1RPT004X1RIUkVTSE9MRCAgICAgICAgICAgICAgICA2MDgKKworI2RlZmluZSBNVUxNSURfVE9PTTQyX1RIUkVTSE9MRCAgICAgICAgICAgICA2MgorCisjZGVmaW5lIE1VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDIxCisjZGVmaW5lIFNRUk1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDI5CisKKyNkZWZpbmUgTVVMX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICA1OTUgIC8qIGsgPSA1ICovCisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICA1OTUsIDV9LCB7ICAgICAyOSwgNn0sIHsgICAgIDE1LCA1fSwgeyAgICAgMzEsIDZ9LCBcCisgICAgeyAgICAgMTYsIDV9LCB7ICAgICAzMywgNn0sIHsgICAgIDI5LCA3fSwgeyAgICAgMTUsIDZ9LCBcCisgICAgeyAgICAgMzMsIDd9LCB7ICAgICAxNywgNn0sIHsgICAgIDM2LCA3fSwgeyAgICAgMTksIDZ9LCBcCisgICAgeyAgICAgMzksIDd9LCB7ICAgICAyOSwgOH0sIHsgICAgIDE1LCA3fSwgeyAgICAgMzUsIDh9LCBcCisgICAgeyAgICAgMTksIDd9LCB7ICAgICA0MSwgOH0sIHsgICAgIDIzLCA3fSwgeyAgICAgNDksIDh9LCBcCisgICAgeyAgICAgMjcsIDd9LCB7ICAgICA1NSwgOX0sIHsgICAgIDE1LCA4fSwgeyAgICAgMzEsIDd9LCBcCisgICAgeyAgICAgNjMsIDh9LCB7ICAgICA0MywgOX0sIHsgICAgIDIzLCA4fSwgeyAgICAgNTUsIDl9LCBcCisgICAgeyAgICAgMzEsIDh9LCB7ICAgICA2MywgOX0sIHsgICAgIDM5LCA4fSwgeyAgICAgODMsIDl9LCBcCisgICAgeyAgICAgNDcsIDh9LCB7ICAgICA5NSwgOX0sIHsgICAgIDU1LDEwfSwgeyAgICAgMzEsIDl9LCBcCisgICAgeyAgICAgNzksMTB9LCB7ICAgICA0NywgOX0sIHsgICAgMTAzLDExfSwgeyAgICAgMzEsMTB9LCBcCisgICAgeyAgICAgNjMsIDl9LCB7ICAgIDEzNSwxMH0sIHsgICAgIDc5LCA5fSwgeyAgICAxNTksMTB9LCBcCisgICAgeyAgICAgOTUsIDl9LCB7ICAgIDE5MSwxMH0sIHsgICAgMTExLDExfSwgeyAgICAgNjMsMTB9LCBcCisgICAgeyAgICAxNDMsIDh9LCB7ICAgIDU3NSwxMH0sIHsgICAgMTU5LDExfSwgeyAgICAgOTUsMTB9LCBcCisgICAgeyAgICAxOTEsIDl9LCB7ICAgIDM4MywgOH0sIHsgICAgNzY3LCA5fSwgeyAgICAzOTksIDh9LCBcCisgICAgeyAgICA3OTksMTJ9LCB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgeyAgICAyNTUsIDl9LCBcCisgICAgeyAgICA1MTEsIDh9LCB7ICAgMTAyMywgOX0sIHsgICAgNTQzLCA4fSwgeyAgIDEwODcsIDl9LCBcCisgICAgeyAgICA1NzUsMTB9LCB7ICAgIDMwMywxMX0sIHsgICAgMTU5LDEwfSwgeyAgICAzMTksIDl9LCBcCisgICAgeyAgICA2MzksMTB9LCB7ICAgIDMzNSwgOX0sIHsgICAgNjcxLDEwfSwgeyAgICAzNTEsIDl9LCBcCisgICAgeyAgICA3MDMsMTB9LCB7ICAgIDM2NywgOX0sIHsgICAgNzM1LDExfSwgeyAgICAxOTEsMTB9LCBcCisgICAgeyAgICAzODMsIDl9LCB7ICAgIDc2NywxMH0sIHsgICAgMzk5LCA5fSwgeyAgICA3OTksMTB9LCBcCisgICAgeyAgICA0MTUsIDl9LCB7ICAgIDgzMSwxMH0sIHsgICAgNDMxLCA5fSwgeyAgICA4NjMsMTF9LCBcCisgICAgeyAgICAyMjMsMTB9LCB7ICAgIDQ0NywxMn0sIHsgICAgMTI3LDEwfSwgeyAgICA1MTEsIDl9LCBcCisgICAgeyAgIDEwMjMsMTB9LCB7ICAgIDU0MywgOX0sIHsgICAxMDg3LDEwfSwgeyAgICA2MDcsIDl9LCBcCisgICAgeyAgIDEyMTUsMTF9LCB7ICAgIDMxOSwxMH0sIHsgICAgNjcxLCA5fSwgeyAgIDEzNDMsMTF9LCBcCisgICAgeyAgICAzNTEsMTB9LCB7ICAgIDczNSwxMn0sIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTB9LCBcCisgICAgeyAgICA3OTksMTF9LCB7ICAgIDQxNSwxMH0sIHsgICAgODYzLDExfSwgeyAgICA0NDcsMTB9LCBcCisgICAgeyAgICA4OTUsMTN9LCB7ICAgIDEyNywxMX0sIHsgICAgNTExLDEwfSwgeyAgIDEwMjMsMTF9LCBcCisgICAgeyAgICA1NDMsMTB9LCB7ICAgMTA4NywxMX0sIHsgICAgNjA3LDEwfSwgeyAgIDEyMTUsMTJ9LCBcCisgICAgeyAgICAzMTksMTF9LCB7ICAgIDY3MSwxMH0sIHsgICAxMzQzLDExfSwgeyAgICA3MzUsMTB9LCBcCisgICAgeyAgIDE0NzEsMTJ9LCB7ICAgIDM4MywxMX0sIHsgICAgNzk5LDEwfSwgeyAgIDE1OTksMTF9LCBcCisgICAgeyAgICA4NjMsMTB9LCB7ICAgMTcyNywxMn0sIHsgICAgNDQ3LDExfSwgeyAgICA5OTEsMTB9LCBcCisgICAgeyAgIDE5ODMsMTJ9LCB7ICAgIDUxMSwxMX0sIHsgICAxMDg3LDEyfSwgeyAgICA1NzUsMTF9LCBcCisgICAgeyAgIDEyMTUsMTB9LCB7ICAgMjQzMSwxMn0sIHsgICAgNjM5LDExfSwgeyAgIDEzNDMsMTJ9LCBcCisgICAgeyAgICA3MDMsMTF9LCB7ICAgMTQ3MSwxM30sIHsgICAgMzgzLDEyfSwgeyAgICA3NjcsMTF9LCBcCisgICAgeyAgIDE1OTksMTJ9LCB7ICAgIDgzMSwxMX0sIHsgICAxNzI3LDEyfSwgeyAgICA5NTksMTF9LCBcCisgICAgeyAgIDE5ODMsMTN9LCB7ICAgIDUxMSwxMn0sIHsgICAxMDg3LDExfSwgeyAgIDIyMzksMTJ9LCBcCisgICAgeyAgIDEyMTUsMTF9LCB7ICAgMjQzMSwxM30sIHsgICAgNjM5LDEyfSwgeyAgIDE0NzEsMTF9LCBcCisgICAgeyAgIDI5NDMsMTN9LCB7ICAgIDc2NywxMn0sIHsgICAxNzI3LDEzfSwgeyAgICA4OTUsMTJ9LCBcCisgICAgeyAgIDE5ODMsMTR9LCB7ICAgIDUxMSwxM30sIHsgICAxMDIzLDEyfSwgeyAgIDIyMzksMTN9LCBcCisgICAgeyAgIDExNTEsMTJ9LCB7ICAgMjQ5NSwxM30sIHsgICAxMjc5LDEyfSwgeyAgIDI2MjMsMTN9LCBcCisgICAgeyAgIDE0MDcsMTJ9LCB7ICAgMjk0MywxNH0sIHsgICAgNzY3LDEzfSwgeyAgIDE1MzUsMTJ9LCBcCisgICAgeyAgIDMxMzUsMTN9LCB7ICAgMTY2MywxMn0sIHsgICAzNDU1LDEzfSwgeyAgIDE5MTksMTJ9LCBcCisgICAgeyAgIDM4MzksMTV9LCB7ICAgIDUxMSwxNH0sIHsgICAxMDIzLDEzfSwgeyAgIDIxNzUsMTJ9LCBcCisgICAgeyAgIDQ0NzksMTN9LCB7ICAgMjQzMSwxNH0sIHsgICAxMjc5LDEzfSwgeyAgIDI5NDMsMTJ9LCBcCisgICAgeyAgIDU4ODcsMTR9LCB7ICAgMTUzNSwxM30sIHsgICAzNDU1LDE0fSwgeyAgIDE3OTEsMTN9LCBcCisgICAgeyAgIDM5NjcsMTV9LCB7ICAgMTAyMywxNH0sIHsgICAyMDQ3LDEzfSwgeyAgIDQ0NzksMTR9LCBcCisgICAgeyAgIDIzMDMsMTN9LCB7ICAgNDk5MSwxMn0sIHsgICA5OTgzLDE0fSwgeyAgIDI1NTksMTN9LCBcCisgICAgeyAgIDUyNDcsMTR9LCB7ICAgMjgxNSwxM30sIHsgICA1ODg3LDE1fSwgeyAgIDE1MzUsMTR9LCBcCisgICAgeyAgMTYzODQsMTV9LCB7ICAzMjc2OCwxNn0gfQorI2RlZmluZSBNVUxfRkZUX1RBQkxFM19TSVpFIDE5NAorI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNjc4NAorCisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgNTAwICAvKiBrID0gNSAqLworI2RlZmluZSBTUVJfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgNTAwLCA1fSwgeyAgICAgMjksIDZ9LCB7ICAgICAxNSwgNX0sIHsgICAgIDMxLCA2fSwgXAorICAgIHsgICAgIDE2LCA1fSwgeyAgICAgMzMsIDZ9LCB7ICAgICAyOSwgN30sIHsgICAgIDE1LCA2fSwgXAorICAgIHsgICAgIDMyLCA3fSwgeyAgICAgMTcsIDZ9LCB7ICAgICAzNiwgN30sIHsgICAgIDE5LCA2fSwgXAorICAgIHsgICAgIDM5LCA3fSwgeyAgICAgMjksIDh9LCB7ICAgICAxNSwgN30sIHsgICAgIDM1LCA4fSwgXAorICAgIHsgICAgIDE5LCA3fSwgeyAgICAgNDEsIDh9LCB7ICAgICAyMywgN30sIHsgICAgIDQ5LCA4fSwgXAorICAgIHsgICAgIDI3LCA5fSwgeyAgICAgMTUsIDh9LCB7ICAgICAzMSwgN30sIHsgICAgIDYzLCA4fSwgXAorICAgIHsgICAgIDQzLCA5fSwgeyAgICAgMjMsIDh9LCB7ICAgICA1NSwxMH0sIHsgICAgIDE1LCA5fSwgXAorICAgIHsgICAgIDMxLCA4fSwgeyAgICAgNjcsIDl9LCB7ICAgICAzOSwgOH0sIHsgICAgIDc5LCA5fSwgXAorICAgIHsgICAgIDQ3LCA4fSwgeyAgICAgOTUsIDl9LCB7ICAgICA1NSwxMH0sIHsgICAgIDMxLCA5fSwgXAorICAgIHsgICAgIDc5LDEwfSwgeyAgICAgNDcsIDl9LCB7ICAgICA5NSwxMX0sIHsgICAgIDMxLDEwfSwgXAorICAgIHsgICAgIDYzLCA5fSwgeyAgICAxMzUsMTB9LCB7ICAgICA3OSwgOX0sIHsgICAgMTU5LDEwfSwgXAorICAgIHsgICAgIDk1LCA5fSwgeyAgICAxOTEsMTB9LCB7ICAgIDExMSwxMX0sIHsgICAgIDYzLDEwfSwgXAorICAgIHsgICAgMTI3LCA5fSwgeyAgICAyNTUsMTB9LCB7ICAgIDE0MywgOX0sIHsgICAgMjg3LDEwfSwgXAorICAgIHsgICAgMTU5LCA5fSwgeyAgICAzMTksMTF9LCB7ICAgICA5NSwxMH0sIHsgICAgMTkxLCA5fSwgXAorICAgIHsgICAgMzgzLCA4fSwgeyAgICA3NjcsIDl9LCB7ICAgIDM5OSwxMn0sIHsgICAgIDYzLDExfSwgXAorICAgIHsgICAgMTI3LDEwfSwgeyAgICAyNTUsIDl9LCB7ICAgIDUxMSwxMH0sIHsgICAgMjcxLCA5fSwgXAorICAgIHsgICAgNTQzLDEwfSwgeyAgICAyODcsIDl9LCB7ICAgIDU3NSwxMH0sIHsgICAgMzAzLDExfSwgXAorICAgIHsgICAgMTU5LDEwfSwgeyAgICAzMTksIDl9LCB7ICAgIDYzOSwxMH0sIHsgICAgMzM1LCA5fSwgXAorICAgIHsgICAgNjcxLDEwfSwgeyAgICAzNTEsIDl9LCB7ICAgIDcwMywxMH0sIHsgICAgMzY3LCA5fSwgXAorICAgIHsgICAgNzM1LDExfSwgeyAgICAxOTEsMTB9LCB7ICAgIDM4MywgOX0sIHsgICAgNzY3LDEwfSwgXAorICAgIHsgICAgMzk5LCA5fSwgeyAgICA3OTksMTB9LCB7ICAgIDQxNSwgOX0sIHsgICAgODMxLDEwfSwgXAorICAgIHsgICAgNDMxLCA5fSwgeyAgICA4NjMsMTB9LCB7ICAgIDQ0NywxMn0sIHsgICAgMTI3LDExfSwgXAorICAgIHsgICAgMjU1LDEwfSwgeyAgICA1MTEsIDl9LCB7ICAgMTAyMywxMH0sIHsgICAgNTQzLCA5fSwgXAorICAgIHsgICAxMDg3LDExfSwgeyAgICAyODcsMTB9LCB7ICAgIDYwNywgOX0sIHsgICAxMjE1LDExfSwgXAorICAgIHsgICAgMzE5LDEwfSwgeyAgICA2NzEsMTF9LCB7ICAgIDM1MSwxMH0sIHsgICAgNzM1LDEyfSwgXAorICAgIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTB9LCB7ICAgIDc5OSwxMX0sIHsgICAgNDE1LDEwfSwgXAorICAgIHsgICAgODYzLDExfSwgeyAgICA0NDcsMTB9LCB7ICAgIDg5NSwxM30sIHsgICAgMTI3LDEyfSwgXAorICAgIHsgICAgMjU1LDExfSwgeyAgICA1MTEsMTB9LCB7ICAgMTAyMywxMX0sIHsgICAgNTQzLDEwfSwgXAorICAgIHsgICAxMDg3LDExfSwgeyAgICA2MDcsMTB9LCB7ICAgMTIxNSwxMn0sIHsgICAgMzE5LDExfSwgXAorICAgIHsgICAgNjcxLDEwfSwgeyAgIDEzNDMsMTF9LCB7ICAgIDczNSwxMH0sIHsgICAxNDcxLDEyfSwgXAorICAgIHsgICAgMzgzLDExfSwgeyAgICA3OTksMTB9LCB7ICAgMTU5OSwxMX0sIHsgICAgODYzLDEyfSwgXAorICAgIHsgICAgNDQ3LDExfSwgeyAgICA5NTksMTB9LCB7ICAgMTkxOSwxMX0sIHsgICAgOTkxLDEzfSwgXAorICAgIHsgICAgMjU1LDEyfSwgeyAgICA1MTEsMTF9LCB7ICAgMTA4NywxMn0sIHsgICAgNTc1LDExfSwgXAorICAgIHsgICAxMjE1LDEwfSwgeyAgIDI0MzEsMTJ9LCB7ICAgIDYzOSwxMX0sIHsgICAxMzQzLDEyfSwgXAorICAgIHsgICAgNzAzLDExfSwgeyAgIDE0NzEsMTN9LCB7ICAgIDM4MywxMn0sIHsgICAgNzY3LDExfSwgXAorICAgIHsgICAxNTk5LDEyfSwgeyAgICA4MzEsMTF9LCB7ICAgMTcyNywxMn0sIHsgICAgOTU5LDExfSwgXAorICAgIHsgICAxOTE5LDE0fSwgeyAgICAyNTUsMTN9LCB7ICAgIDUxMSwxMn0sIHsgICAxMDg3LDExfSwgXAorICAgIHsgICAyMjM5LDEyfSwgeyAgIDEyMTUsMTF9LCB7ICAgMjQzMSwxM30sIHsgICAgNjM5LDEyfSwgXAorICAgIHsgICAxNDcxLDExfSwgeyAgIDI5NDMsMTN9LCB7ICAgIDc2NywxMn0sIHsgICAxNzI3LDEzfSwgXAorICAgIHsgICAgODk1LDEyfSwgeyAgIDE5ODMsMTR9LCB7ICAgIDUxMSwxM30sIHsgICAxMDIzLDEyfSwgXAorICAgIHsgICAyMjM5LDEzfSwgeyAgIDExNTEsMTJ9LCB7ICAgMjQ5NSwxM30sIHsgICAxMjc5LDEyfSwgXAorICAgIHsgICAyNjIzLDEzfSwgeyAgIDE0MDcsMTJ9LCB7ICAgMjk0MywxNH0sIHsgICAgNzY3LDEzfSwgXAorICAgIHsgICAxNTM1LDEyfSwgeyAgIDMwNzEsMTN9LCB7ICAgMTY2MywxMn0sIHsgICAzNDU1LDEzfSwgXAorICAgIHsgICAxOTE5LDEyfSwgeyAgIDM4MzksMTV9LCB7ICAgIDUxMSwxNH0sIHsgICAxMDIzLDEzfSwgXAorICAgIHsgICAyMTc1LDEyfSwgeyAgIDQ0NzksMTN9LCB7ICAgMjQzMSwxNH0sIHsgICAxMjc5LDEzfSwgXAorICAgIHsgICAyOTQzLDEyfSwgeyAgIDU4ODcsMTR9LCB7ICAgMTUzNSwxM30sIHsgICAzNDU1LDE0fSwgXAorICAgIHsgICAxNzkxLDEzfSwgeyAgIDM5NjcsMTV9LCB7ICAgMTAyMywxNH0sIHsgICAyMDQ3LDEzfSwgXAorICAgIHsgICA0NDc5LDE0fSwgeyAgIDIzMDMsMTN9LCB7ICAgNDk5MSwxMn0sIHsgICA5OTgzLDE0fSwgXAorICAgIHsgICAyNTU5LDEzfSwgeyAgIDUxMTksMTR9LCB7ICAgMjgxNSwxM30sIHsgICA1ODg3LDE1fSwgXAorICAgIHsgICAxNTM1LDE0fSwgeyAgMTYzODQsMTV9LCB7ICAzMjc2OCwxNn0gfQorI2RlZmluZSBTUVJfRkZUX1RBQkxFM19TSVpFIDE5OQorI2RlZmluZSBTUVJfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNDczNgorCisjZGVmaW5lIE1VTExPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTVVMTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgTVVMTE9fTVVMX05fVEhSRVNIT0xEICAgICAgICAgICAgMTM0NjMKKyNkZWZpbmUgU1FSTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBTUVJMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAyNgorI2RlZmluZSBTUVJMT19TUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgODkwNworCisjZGVmaW5lIERDX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDM4CisjZGVmaW5lIERDX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAgMTAzCisjZGVmaW5lIERDX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDQ0CisjZGVmaW5lIERDX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDk4CisKKyNkZWZpbmUgSU5WX01VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgNzgKKyNkZWZpbmUgSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgICAxNjUKKyNkZWZpbmUgSU5WX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAxMTUKKworI2RlZmluZSBCSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgIDI5NgorI2RlZmluZSBSRURDXzFfVE9fUkVEQ18yX1RIUkVTSE9MRCAgICAgICAgICAgMgorI2RlZmluZSBSRURDXzJfVE9fUkVEQ19OX1RIUkVTSE9MRCAgICAgICAgIDE0NworCisjZGVmaW5lIE1VX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAyMDg5CisjZGVmaW5lIE1VX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAyMDg5CisjZGVmaW5lIE1VUElfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDcwCisjZGVmaW5lIE1VX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAxNzE4CisjZGVmaW5lIE1VX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAyMDg5CisKKyNkZWZpbmUgUE9XTV9TRUNfVEFCTEUgIDcsMTksMTA3LDQ4MCwxNDg2CisKKyNkZWZpbmUgR0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICAgMjkKKyNkZWZpbmUgU0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAxMjYKKyNkZWZpbmUgU0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICA1NDEKKworI2RlZmluZSBGQUNfRFNDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDEzMgorI2RlZmluZSBGQUNfT0REX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAyOQorCisjZGVmaW5lIE1BVFJJWDIyX1NUUkFTU0VOX1RIUkVTSE9MRCAgICAgICAgIDMwCisjZGVmaW5lIEhHQ0QyX0RJVjFfTUVUSE9EICAgICAgICAgICAgICAgICAgICAxICAvKiA2LjU1JSBmYXN0ZXIgdGhhbiAzICovCisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAgIDU0CisjZGVmaW5lIEhHQ0RfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDUyCisjZGVmaW5lIEhHQ0RfUkVEVUNFX1RIUkVTSE9MRCAgICAgICAgICAgICAzNTI0CisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgMzAzCisjZGVmaW5lIEdDREVYVF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMjI1CisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAgICA0ICAvKiA5LjczJSBmYXN0ZXIgdGhhbiAxICovCisKKy8qIFR1bmV1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCB0b29rIDExMTQxOCBzZWNvbmRzICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92N2EvY29yYTE3L21vZF8zNGxzdWIxLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL3Y3YS9jb3JhMTcvbW9kXzM0bHN1YjEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZTVhMTUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92N2EvY29yYTE3L21vZF8zNGxzdWIxLmFzbQpAQCAtMCwwICsxLDEyMSBAQAorZG5sICBBUk0gbXBuX21vZF8zNGxzdWIxIC0tIHJlbWFpbmRlciBtb2R1bG8gMl4yNC0xLgorCitkbmwgIENvcHlyaWdodCAyMDEyLCAyMDEzLCAyMDE4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBTdHJvbmdBUk0JID8KK0MgWFNjYWxlCSA/CitDIENvcnRleC1BNQkgMi42NworQyBDb3J0ZXgtQTcJIDIuMzcKK0MgQ29ydGV4LUE4CSAyLjM0CitDIENvcnRleC1BOQkgPworQyBDb3J0ZXgtQTE1CSAxLjM5CitDIENvcnRleC1BMTcJIDEuNjAKK0MgQ29ydGV4LUE1MwkgMi41MQorCitkZWZpbmUoYGFwJywJcjApCitkZWZpbmUoYG4nLAlyMSkKKworQyBtcF9saW1iX3QgbXBuX21vZF8zNGxzdWIxIChtcF9zcmNwdHIgdXAsIG1wX3NpemVfdCBuKQorCitDIFRPRE8KK0MgICogV3JpdGUgY2xldmVyZXIgc3VtbWF0aW9uIGNvZGUuCitDICAqIENvbnNpZGVyIGxvYWRpbmcgNiA2NC1iaXQgYWxpZ25lZCByZWdpc3RlcnMgYXQgYSB0aW1lLCB0byBhcHByb2FjaCAxIGMvbC4KKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMzIpCitQUk9MT0dVRShtcG5fbW9kXzM0bHN1YjEpCisJcHVzaAl7IHI0LCByNSwgcjYsIHI3IH0KKworCXN1YnMJbiwgbiwgIzMKKwltb3YJcjcsICMwCisJYmx0CUwobGUyKQkJCUMgbiA8PSAyCisKKwlsZG1pYQlhcCEsIHsgcjIsIHIzLCByMTIgfQorCXN1YnMJbiwgbiwgIzMKKwlibHQJTChzdW0pCQkJQyBuIDw9IDUKKwltb3YJcjcsICMwCisJYglMKG1pZCkKKworTCh0b3ApOglhZGRzCXIyLCByMiwgcjQKKwlhZGNzCXIzLCByMywgcjUKKwlhZGNzCXIxMiwgcjEyLCByNgorCWFkYwlyNywgcjcsICMwCitMKG1pZCk6CWxkbWlhCWFwISwgeyByNCwgcjUsIHI2IH0KKwlzdWJzCW4sIG4sICMzCisJYnBsCUwodG9wKQorCisJYWRkcwlyMiwgcjIsIHI0CisJYWRjcwlyMywgcjMsIHI1CisJYWRjcwlyMTIsIHIxMiwgcjYKKwlhZGMJcjcsIHI3LCAjMAkJQyByNyA8PSAxCisKK0woc3VtKToJY21uCW4sICMyCisJbW92bG8JcjQsICMwCisJbGRyaHMJcjQsIFthcF0sICM0CisJbW92bHMJcjUsICMwCisJbGRyaGkJcjUsIFthcF0sICM0CisKKwlhZGRzCXIyLCByMiwgcjQKKwlhZGNzCXIzLCByMywgcjUKKwlhZGNzCXIxMiwgcjEyLCAjMAorCWFkYwlyNywgcjcsICMwCQlDIHI3IDw9IDIKKworTChzdW0yKToKKwliaWMJcjAsIHIyLCAjMHhmZjAwMDAwMAorCWFkZAlyMCwgcjAsIHIyLCBsc3IgIzI0CisJYWRkCXIwLCByMCwgcjcKKworCW1vdglyNywgcjMsIGxzbCAjOAorCWJpYwlyMiwgcjcsICMweGZmMDAwMDAwCisJYWRkCXIwLCByMCwgcjIKKwlhZGQJcjAsIHIwLCByMywgbHNyICMxNgorCisJbW92CXIyLCByMTIsIGxzbCAjMTYKKwliaWMJcjEsIHIyLCAjMHhmZjAwMDAwMAorCWFkZAlyMCwgcjAsIHIxCisJYWRkCXIwLCByMCwgcjEyLCBsc3IgIzgKKworCXBvcAl7IHI0LCByNSwgcjYsIHI3IH0KKwlyZXR1cm4JbHIKKworTChsZTIpOgljbW4JbiwgIzEKKwlibmUJTCgxKQorCWxkbWlhCWFwISwgeyByMiwgcjMgfQorCW1vdglyMTIsICMwCisJYglMKHN1bTIpCitMKDEpOglsZHIJcjIsIFthcF0KKwliaWMJcjAsIHIyLCAjMHhmZjAwMDAwMAorCWFkZAlyMCwgcjAsIHIyLCBsc3IgIzI0CisJcG9wCXsgcjQsIHI1LCByNiwgcjcgfQorCXJldHVybglscgorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjdhL2NvcmExNy9tdWxfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92N2EvY29yYTE3L211bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWI2MDQyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjdhL2NvcmExNy9tdWxfMS5hc20KQEAgLTAsMCArMSwzNCBAQAorZG5sICBBUk0gbXBuX211bF8xCisKK2RubCAgQ29weXJpZ2h0IDIwMTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fbXVsXzEpCitpbmNsdWRlX21wbihgYXJtL3Y2L211bF8xLmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92N2EvY29yYTE3L3N1Ym11bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL3Y3YS9jb3JhMTcvc3VibXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzZTgxMzkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92N2EvY29yYTE3L3N1Ym11bF8xLmFzbQpAQCAtMCwwICsxLDM0IEBACitkbmwgIEFSTSBtcG5fc3VibXVsXzEKKworZG5sICBDb3B5cmlnaHQgMjAxOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9zdWJtdWxfMSkKK2luY2x1ZGVfbXBuKGBhcm0vdjYvc3VibXVsXzEuYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL3Y3YS9jb3JhNS9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92N2EvY29yYTUvZ21wLW1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNTY0ZTAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92N2EvY29yYTUvZ21wLW1wYXJhbS5oCkBAIC0wLDAgKzEsMjA1IEBACisvKiBnbXAtbXBhcmFtLmggLS0gQ29tcGlsZXIvbWFjaGluZSBwYXJhbWV0ZXIgaGVhZGVyIGZpbGUuCisKK0NvcHlyaWdodCAyMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgMzIKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgNAorCisvKiAxNTAwIE1IeiBDb3J0ZXgtQTUgKG9kcm9pZCBjMSkgKi8KKy8qIEZGVCB0dW5pbmcgbGltaXQgPSAxOCwyMzUsNTYyICovCisvKiBHZW5lcmF0ZWQgYnkgdHVuZXVwLmMsIDIwMTktMTAtMjIsIGdjYyA0LjkgKi8KKworI2RlZmluZSBNT0RfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PRF8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFOX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgIDcKKyNkZWZpbmUgTU9EXzFVX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgIDcKKyNkZWZpbmUgTU9EXzFfMV9UT19NT0RfMV8yX1RIUkVTSE9MRCAgICAgICAgIDgKKyNkZWZpbmUgTU9EXzFfMl9UT19NT0RfMV80X1RIUkVTSE9MRCAgICAgTVBfU0laRV9UX01BWAorI2RlZmluZSBQUkVJTlZfTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAyMworI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgICAgICAgICAgICAgICAgMSAgLyogbmF0aXZlICovCisjZGVmaW5lIERJVl9RUl8xTl9QSTFfTUVUSE9EICAgICAgICAgICAgICAgICAxICAvKiAxMzIuNzklIGZhc3RlciB0aGFuIDIgKi8KKyNkZWZpbmUgRElWX1FSXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWX1FSXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWX1FSXzJfUEkyX1RIUkVTSE9MRCAgICAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWRVhBQ1RfMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAobmF0aXZlKSAqLworI2RlZmluZSBCTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgICAgICA1MgorCisjZGVmaW5lIERJVl8xX1ZTX01VTF8xX1BFUkNFTlQgICAgICAgICAgICAgMjEzCisKKyNkZWZpbmUgTVVMX1RPT00yMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNDgKKyNkZWZpbmUgTVVMX1RPT00zM19USFJFU0hPTEQgICAgICAgICAgICAgICAxNDMKKyNkZWZpbmUgTVVMX1RPT000NF9USFJFU0hPTEQgICAgICAgICAgICAgICAyNjIKKyNkZWZpbmUgTVVMX1RPT002SF9USFJFU0hPTEQgICAgICAgICAgICAgICA0MTQKKyNkZWZpbmUgTVVMX1RPT004SF9USFJFU0hPTEQgICAgICAgICAgICAgICA1MjcKKworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT000M19USFJFU0hPTEQgICAgIDE1MworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT001M19USFJFU0hPTEQgICAgIDE2OAorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT001M19USFJFU0hPTEQgICAgIDE1MgorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT002M19USFJFU0hPTEQgICAgIDE4MAorI2RlZmluZSBNVUxfVE9PTTQzX1RPX1RPT001NF9USFJFU0hPTEQgICAgIDIyNgorCisjZGVmaW5lIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNjYKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNDkKKyNkZWZpbmUgU1FSX1RPT000X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzNDgKKyNkZWZpbmUgU1FSX1RPT002X1RIUkVTSE9MRCAgICAgICAgICAgICAgICA1MTcKKyNkZWZpbmUgU1FSX1RPT004X1RIUkVTSE9MRCAgICAgICAgICAgICAgICA2MDgKKworI2RlZmluZSBNVUxNSURfVE9PTTQyX1RIUkVTSE9MRCAgICAgICAgICAgICA3MAorCisjZGVmaW5lIE1VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDI2CisjZGVmaW5lIFNRUk1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDI4CisKKyNkZWZpbmUgTVVMX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICA2NjAgIC8qIGsgPSA1ICovCisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICA2NjAsIDV9LCB7ICAgICAyOSwgNn0sIHsgICAgIDE1LCA1fSwgeyAgICAgMzMsIDZ9LCBcCisgICAgeyAgICAgMTcsIDV9LCB7ICAgICAzNSwgNn0sIHsgICAgIDI5LCA3fSwgeyAgICAgMTUsIDZ9LCBcCisgICAgeyAgICAgMzcsIDd9LCB7ICAgICAxOSwgNn0sIHsgICAgIDQwLCA3fSwgeyAgICAgMjEsIDZ9LCBcCisgICAgeyAgICAgNDMsIDd9LCB7ICAgICAzNywgOH0sIHsgICAgIDE5LCA3fSwgeyAgICAgNDMsIDh9LCBcCisgICAgeyAgICAgMjMsIDd9LCB7ICAgICA1MSwgOH0sIHsgICAgIDI3LCA3fSwgeyAgICAgNTUsIDh9LCBcCisgICAgeyAgICAgMzEsIDd9LCB7ICAgICA2MywgOH0sIHsgICAgIDQzLCA5fSwgeyAgICAgMjMsIDh9LCBcCisgICAgeyAgICAgNTUsIDl9LCB7ICAgICAzMSwgOH0sIHsgICAgIDcxLCA5fSwgeyAgICAgMzksIDh9LCBcCisgICAgeyAgICAgODMsIDl9LCB7ICAgICA0NywgOH0sIHsgICAgIDk5LCA5fSwgeyAgICAgNTUsMTB9LCBcCisgICAgeyAgICAgMzEsIDl9LCB7ICAgICA2MywgOH0sIHsgICAgMTI3LCA5fSwgeyAgICAgNzksMTB9LCBcCisgICAgeyAgICAgNDcsIDl9LCB7ICAgIDEwMywxMX0sIHsgICAgIDMxLDEwfSwgeyAgICAgNjMsIDl9LCBcCisgICAgeyAgICAxMzUsMTB9LCB7ICAgICA3OSwgOX0sIHsgICAgMTY3LDEwfSwgeyAgICAgOTUsIDl9LCBcCisgICAgeyAgICAxOTEsMTB9LCB7ICAgIDExMSwxMX0sIHsgICAgIDYzLDEwfSwgeyAgICAxNTksMTF9LCBcCisgICAgeyAgICAgOTUsMTB9LCB7ICAgIDE5MSwgOX0sIHsgICAgMzgzLDEyfSwgeyAgICAgNjMsMTF9LCBcCisgICAgeyAgICAxMjcsMTB9LCB7ICAgIDI1NSwgOX0sIHsgICAgNTExLDEwfSwgeyAgICAyNzEsMTF9LCBcCisgICAgeyAgICAxNTksMTB9LCB7ICAgIDMxOSwgOX0sIHsgICAgNjM5LDEwfSwgeyAgICAzMzUsIDl9LCBcCisgICAgeyAgICA2NzEsMTF9LCB7ICAgIDE5MSwxMH0sIHsgICAgMzgzLCA5fSwgeyAgICA3NjcsMTB9LCBcCisgICAgeyAgICAzOTksIDl9LCB7ICAgIDc5OSwxMH0sIHsgICAgNDE1LDExfSwgeyAgICAyMjMsMTJ9LCBcCisgICAgeyAgICAxMjcsMTF9LCB7ICAgIDI1NSwxMH0sIHsgICAgNTExLCA5fSwgeyAgIDEwMjMsMTB9LCBcCisgICAgeyAgICA1NDMsMTF9LCB7ICAgIDI4NywxMH0sIHsgICAgNjA3LDExfSwgeyAgICAzMTksMTB9LCBcCisgICAgeyAgICA2NzEsMTF9LCB7ICAgIDM1MSwxMn0sIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTB9LCBcCisgICAgeyAgICA3OTksMTF9LCB7ICAgIDQxNSwxMH0sIHsgICAgODMxLDEzfSwgeyAgICAxMjcsMTJ9LCBcCisgICAgeyAgICAyNTUsMTF9LCB7ICAgIDUxMSwxMH0sIHsgICAxMDIzLDExfSwgeyAgICA1NDMsMTB9LCBcCisgICAgeyAgIDEwODcsMTF9LCB7ICAgIDU3NSwxMH0sIHsgICAxMTUxLDExfSwgeyAgICA2MDcsMTJ9LCBcCisgICAgeyAgICAzMTksMTF9LCB7ICAgIDcwMywxMn0sIHsgICAgMzgzLDExfSwgeyAgICA4MzEsMTJ9LCBcCisgICAgeyAgICA0NDcsMTF9LCB7ICAgIDg5NSwxM30sIHsgICAgMjU1LDEyfSwgeyAgICA1MTEsMTF9LCBcCisgICAgeyAgIDEwODcsMTJ9LCB7ICAgIDU3NSwxMX0sIHsgICAxMTgzLDEyfSwgeyAgICA2MzksMTF9LCBcCisgICAgeyAgIDEyNzksMTJ9LCB7ICAgIDcwMywxM30sIHsgICAgMzgzLDEyfSwgeyAgICA3NjcsMTF9LCBcCisgICAgeyAgIDE1MzUsMTJ9LCB7ICAgIDg5NSwxNH0sIHsgICAgMjU1LDEzfSwgeyAgICA1MTEsMTJ9LCBcCisgICAgeyAgIDExNTEsMTN9LCB7ICAgIDYzOSwxMn0sIHsgICAxNDA3LDEzfSwgeyAgICA3NjcsMTJ9LCBcCisgICAgeyAgIDE1OTksMTN9LCB7ICAgIDg5NSwxMn0sIHsgICAxNzkxLDE0fSwgeyAgICA1MTEsMTN9LCBcCisgICAgeyAgIDEwMjMsMTJ9LCB7ICAgMjExMSwxM30sIHsgICAxMTUxLDEyfSwgeyAgIDIzNjcsMTN9LCBcCisgICAgeyAgIDEyNzksMTJ9LCB7ICAgMjU1OSwxM30sIHsgICAxNDA3LDE0fSwgeyAgICA3NjcsMTN9LCBcCisgICAgeyAgIDE1MzUsMTJ9LCB7ICAgMzA3MSwxM30sIHsgICAxNjYzLDEyfSwgeyAgIDMzMjcsMTN9LCBcCisgICAgeyAgIDE3OTEsMTV9LCB7ICAgIDUxMSwxNH0sIHsgICAxMDIzLDEzfSwgeyAgIDIxNzUsMTJ9LCBcCisgICAgeyAgIDQzNTEsMTN9LCB7ICAgODE5MiwxNH0sIHsgIDE2Mzg0LDE1fSwgeyAgMzI3NjgsMTZ9IH0KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTNfU0laRSAxNDAKKyNkZWZpbmUgTVVMX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDc1NTIKKworI2RlZmluZSBTUVJfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDU5MCAgLyogayA9IDUgKi8KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDU5MCwgNX0sIHsgICAgIDMzLCA2fSwgeyAgICAgMTcsIDV9LCB7ICAgICAzNSwgNn0sIFwKKyAgICB7ICAgICAzNiwgN30sIHsgICAgIDE5LCA2fSwgeyAgICAgNDAsIDd9LCB7ICAgICAyMSwgNn0sIFwKKyAgICB7ICAgICA0MywgN30sIHsgICAgIDIzLCA2fSwgeyAgICAgNDcsIDd9LCB7ICAgICAzNywgOH0sIFwKKyAgICB7ICAgICAxOSwgN30sIHsgICAgIDQzLCA4fSwgeyAgICAgMjMsIDd9LCB7ICAgICA0OSwgOH0sIFwKKyAgICB7ICAgICAyNywgN30sIHsgICAgIDU1LCA4fSwgeyAgICAgMzEsIDd9LCB7ICAgICA2MywgOH0sIFwKKyAgICB7ICAgICA0MywgOX0sIHsgICAgIDIzLCA4fSwgeyAgICAgNTUsIDl9LCB7ICAgICAzMSwgOH0sIFwKKyAgICB7ICAgICA2NywgOX0sIHsgICAgIDM5LCA4fSwgeyAgICAgODMsIDl9LCB7ICAgICA0NywgOH0sIFwKKyAgICB7ICAgICA5NSwgOX0sIHsgICAgIDU1LDEwfSwgeyAgICAgMzEsIDl9LCB7ICAgICA3OSwxMH0sIFwKKyAgICB7ICAgICA0NywgOX0sIHsgICAgMTAzLDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA2MywgOX0sIFwKKyAgICB7ICAgIDEzNSwxMH0sIHsgICAgIDc5LCA5fSwgeyAgICAxNjcsMTB9LCB7ICAgICA5NSwgOX0sIFwKKyAgICB7ICAgIDE5MSwxMH0sIHsgICAgMTExLDExfSwgeyAgICAgNjMsMTB9LCB7ICAgIDE1OSwxMX0sIFwKKyAgICB7ICAgICA5NSwxMH0sIHsgICAgMTkxLCA5fSwgeyAgICAzODMsMTJ9LCB7ICAgICA2MywxMX0sIFwKKyAgICB7ICAgIDEyNywxMH0sIHsgICAgMjU1LCA5fSwgeyAgICA1MTEsMTB9LCB7ICAgIDI3MSwgOX0sIFwKKyAgICB7ICAgIDU0MywxMX0sIHsgICAgMTU5LDEwfSwgeyAgICAzMTksIDl9LCB7ICAgIDYzOSwxMH0sIFwKKyAgICB7ICAgIDMzNSwgOX0sIHsgICAgNjcxLDEwfSwgeyAgICAzNTEsMTF9LCB7ICAgIDE5MSwxMH0sIFwKKyAgICB7ICAgIDM4MywgOX0sIHsgICAgNzY3LDEwfSwgeyAgICA0MTUsMTJ9LCB7ICAgIDEyNywxMX0sIFwKKyAgICB7ICAgIDI1NSwxMH0sIHsgICAgNTExLCA5fSwgeyAgIDEwMjMsMTB9LCB7ICAgIDU0MywgOX0sIFwKKyAgICB7ICAgMTA4NywxMX0sIHsgICAgMjg3LDEwfSwgeyAgICA1NzUsIDl9LCB7ICAgMTE1MSwxMH0sIFwKKyAgICB7ICAgIDYwNywxMX0sIHsgICAgMzE5LDEwfSwgeyAgICA2NzEsMTF9LCB7ICAgIDM1MSwxMn0sIFwKKyAgICB7ICAgIDE5MSwxMX0sIHsgICAgMzgzLDEwfSwgeyAgICA3OTksMTF9LCB7ICAgIDQxNSwxMH0sIFwKKyAgICB7ICAgIDgzMSwxM30sIHsgICAgMTI3LDEyfSwgeyAgICAyNTUsMTF9LCB7ICAgIDUxMSwxMH0sIFwKKyAgICB7ICAgMTAyMywxMX0sIHsgICAgNTQzLDEwfSwgeyAgIDEwODcsMTF9LCB7ICAgIDU3NSwxMH0sIFwKKyAgICB7ICAgMTE1MSwxMX0sIHsgICAgNjA3LDEyfSwgeyAgICAzMTksMTF9LCB7ICAgIDczNSwxMn0sIFwKKyAgICB7ICAgIDM4MywxMX0sIHsgICAgODMxLDEyfSwgeyAgICA0NDcsMTF9LCB7ICAgIDkyNywxM30sIFwKKyAgICB7ICAgIDI1NSwxMn0sIHsgICAgNTExLDExfSwgeyAgIDEwODcsMTJ9LCB7ICAgIDU3NSwxMX0sIFwKKyAgICB7ICAgMTE1MSwxMn0sIHsgICAgNjM5LDExfSwgeyAgIDEyNzksMTJ9LCB7ICAgIDcwMywxM30sIFwKKyAgICB7ICAgIDM4MywxMn0sIHsgICAgNzY3LDExfSwgeyAgIDE1MzUsMTJ9LCB7ICAgIDgzMSwxMX0sIFwKKyAgICB7ICAgMTY2MywxMn0sIHsgICAgODk1LDExfSwgeyAgIDE3OTEsMTJ9LCB7ICAgIDk1OSwxNH0sIFwKKyAgICB7ICAgIDI1NSwxM30sIHsgICAgNTExLDEyfSwgeyAgIDEwMjMsMTF9LCB7ICAgMjA0NywxMn0sIFwKKyAgICB7ICAgMTE1MSwxM30sIHsgICAgNjM5LDEyfSwgeyAgIDE0MDcsMTN9LCB7ICAgIDc2NywxMn0sIFwKKyAgICB7ICAgMTU5OSwxM30sIHsgICAgODk1LDEyfSwgeyAgIDE3OTEsMTR9LCB7ICAgIDUxMSwxM30sIFwKKyAgICB7ICAgMTAyMywxMn0sIHsgICAyMTExLDEzfSwgeyAgIDExNTEsMTJ9LCB7ICAgMjM2NywxM30sIFwKKyAgICB7ICAgMTI3OSwxMn0sIHsgICAyNTU5LDEzfSwgeyAgIDE0MDcsMTR9LCB7ICAgIDc2NywxM30sIFwKKyAgICB7ICAgMTUzNSwxMn0sIHsgICAzMDcxLDEzfSwgeyAgIDE2NjMsMTJ9LCB7ICAgMzMyNywxM30sIFwKKyAgICB7ICAgMTc5MSwxNX0sIHsgICAgNTExLDE0fSwgeyAgIDEwMjMsMTN9LCB7ICAgMjE3NSwxMn0sIFwKKyAgICB7ICAgNDM1MSwxM30sIHsgICA4MTkyLDE0fSwgeyAgMTYzODQsMTV9LCB7ICAzMjc2OCwxNn0gfQorI2RlZmluZSBTUVJfRkZUX1RBQkxFM19TSVpFIDE0NAorI2RlZmluZSBTUVJfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNTc2MAorCisjZGVmaW5lIE1VTExPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTVVMTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgMzkKKyNkZWZpbmUgTVVMTE9fTVVMX05fVEhSRVNIT0xEICAgICAgICAgICAgMTQ3MDkKKyNkZWZpbmUgU1FSTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDgKKyNkZWZpbmUgU1FSTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgMzMKKyNkZWZpbmUgU1FSTE9fU1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTEyNzgKKworI2RlZmluZSBEQ19ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAzNgorI2RlZmluZSBEQ19ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgIDExNgorI2RlZmluZSBEQ19CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA0OAorI2RlZmluZSBEQ19CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE0MAorCisjZGVmaW5lIElOVl9NVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgIDk1CisjZGVmaW5lIElOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAgMTgxCisjZGVmaW5lIElOVl9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTI1CisKKyNkZWZpbmUgQklOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAzMjcKKyNkZWZpbmUgUkVEQ18xX1RPX1JFRENfMl9USFJFU0hPTEQgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBSRURDXzJfVE9fUkVEQ19OX1RIUkVTSE9MRCAgICAgICAgIDE1MgorCisjZGVmaW5lIE1VX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAyMzUwCisjZGVmaW5lIE1VX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAyMTMwCisjZGVmaW5lIE1VUElfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDk4CisjZGVmaW5lIE1VX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAxOTcwCisjZGVmaW5lIE1VX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAyMTcyCisKKyNkZWZpbmUgUE9XTV9TRUNfVEFCTEUgIDYsMzcsMTA4LDYyNCwyMzUxCisKKyNkZWZpbmUgR0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICAgNDQKKyNkZWZpbmUgU0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAzMDkKKyNkZWZpbmUgU0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICA3NjIKKworI2RlZmluZSBGQUNfRFNDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDIzNgorI2RlZmluZSBGQUNfT0REX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAyOQorCisjZGVmaW5lIE1BVFJJWDIyX1NUUkFTU0VOX1RIUkVTSE9MRCAgICAgICAgIDI1CisjZGVmaW5lIEhHQ0QyX0RJVjFfTUVUSE9EICAgICAgICAgICAgICAgICAgICA1ICAvKiAyLjkyJSBmYXN0ZXIgdGhhbiAzICovCisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAgIDcwCisjZGVmaW5lIEhHQ0RfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDU5CisjZGVmaW5lIEhHQ0RfUkVEVUNFX1RIUkVTSE9MRCAgICAgICAgICAgICA0MTIwCisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgMjI5CisjZGVmaW5lIEdDREVYVF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMjMzCisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAgICAxICAvKiAxNy4wNyUgZmFzdGVyIHRoYW4gNCAqLworCisvKiBUdW5ldXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgdG9vayA0Nzg0NSBzZWNvbmRzICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92N2EvY29yYTcvZ21wLW1wYXJhbS5oIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjdhL2NvcmE3L2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGRlMDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjdhL2NvcmE3L2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDIwMiBAQAorLyogZ21wLW1wYXJhbS5oIC0tIENvbXBpbGVyL21hY2hpbmUgcGFyYW1ldGVyIGhlYWRlciBmaWxlLgorCitDb3B5cmlnaHQgMjAxOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2RlZmluZSBHTVBfTElNQl9CSVRTIDMyCisjZGVmaW5lIEdNUF9MSU1CX0JZVEVTIDQKKworLyogOTAwIE1IeiBDb3J0ZXgtQTcgKHJhc3BiZXJyeSBwaTIpICovCisvKiBGRlQgdHVuaW5nIGxpbWl0ID0gMjEsNTU5LDkyMSAqLworLyogR2VuZXJhdGVkIGJ5IHR1bmV1cC5jLCAyMDE5LTEwLTIyLCBnY2MgOC4zICovCisKKyNkZWZpbmUgTU9EXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PRF8xTl9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA3CisjZGVmaW5lIE1PRF8xVV9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA4CisjZGVmaW5lIE1PRF8xXzFfVE9fTU9EXzFfMl9USFJFU0hPTEQgICAgICAgICAwICAvKiBuZXZlciBtcG5fbW9kXzFfMXAgKi8KKyNkZWZpbmUgTU9EXzFfMl9UT19NT0RfMV80X1RIUkVTSE9MRCAgICAgTVBfU0laRV9UX01BWAorI2RlZmluZSBQUkVJTlZfTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAxOAorI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgICAgICAgICAgICAgICAgMSAgLyogbmF0aXZlICovCisjZGVmaW5lIERJVl9RUl8xTl9QSTFfTUVUSE9EICAgICAgICAgICAgICAgICAxICAvKiA2NC4xNiUgZmFzdGVyIHRoYW4gMiAqLworI2RlZmluZSBESVZfUVJfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICBNUF9TSVpFX1RfTUFYICAvKiBuZXZlciAqLworI2RlZmluZSBESVZfUVJfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICBNUF9TSVpFX1RfTUFYICAvKiBuZXZlciAqLworI2RlZmluZSBESVZfUVJfMl9QSTJfVEhSRVNIT0xEICAgICAgICAgICBNUF9TSVpFX1RfTUFYICAvKiBuZXZlciAqLworI2RlZmluZSBESVZFWEFDVF8xX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIEJNT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgICAgICAgIDQ4CisKKyNkZWZpbmUgRElWXzFfVlNfTVVMXzFfUEVSQ0VOVCAgICAgICAgICAgICAyMTYKKworI2RlZmluZSBNVUxfVE9PTTIyX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzOQorI2RlZmluZSBNVUxfVE9PTTMzX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDEyOQorI2RlZmluZSBNVUxfVE9PTTQ0X1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE5NgorI2RlZmluZSBNVUxfVE9PTTZIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDMyNworI2RlZmluZSBNVUxfVE9PTThIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDQ3OAorCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTQzX1RIUkVTSE9MRCAgICAgMTI5CisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgMTgzCisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgMTMyCisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTYzX1RIUkVTSE9MRCAgICAgMTQ0CisjZGVmaW5lIE1VTF9UT09NNDNfVE9fVE9PTTU0X1RIUkVTSE9MRCAgICAgMTkwCisKKyNkZWZpbmUgU1FSX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAobmF0aXZlKSAqLworI2RlZmluZSBTUVJfVE9PTTJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA1MgorI2RlZmluZSBTUVJfVE9PTTNfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE2MgorI2RlZmluZSBTUVJfVE9PTTRfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDI2OAorI2RlZmluZSBTUVJfVE9PTTZfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDM5OQorI2RlZmluZSBTUVJfVE9PTThfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDU0NworCisjZGVmaW5lIE1VTE1JRF9UT09NNDJfVEhSRVNIT0xEICAgICAgICAgICAgIDUwCisKKyNkZWZpbmUgTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgU1FSTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjUKKworI2RlZmluZSBNVUxfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDYzNiAgLyogayA9IDUgKi8KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDYzNiwgNX0sIHsgICAgIDI4LCA2fSwgeyAgICAgMTUsIDV9LCB7ICAgICAzMSwgNn0sIFwKKyAgICB7ICAgICAyOSwgN30sIHsgICAgIDE1LCA2fSwgeyAgICAgMzMsIDd9LCB7ICAgICAxNywgNn0sIFwKKyAgICB7ICAgICAzNSwgN30sIHsgICAgIDE5LCA2fSwgeyAgICAgMzksIDd9LCB7ICAgICAyOSwgOH0sIFwKKyAgICB7ICAgICAxNSwgN30sIHsgICAgIDM1LCA4fSwgeyAgICAgMTksIDd9LCB7ICAgICA0MywgOH0sIFwKKyAgICB7ICAgICAyMywgN30sIHsgICAgIDQ5LCA4fSwgeyAgICAgMjcsIDd9LCB7ICAgICA1NSwgOH0sIFwKKyAgICB7ICAgICAzMSwgN30sIHsgICAgIDYzLCA4fSwgeyAgICAgNDMsIDl9LCB7ICAgICAyMywgOH0sIFwKKyAgICB7ICAgICA1NSwgOX0sIHsgICAgIDMxLCA4fSwgeyAgICAgNjcsIDl9LCB7ICAgICAzOSwgOH0sIFwKKyAgICB7ICAgICA4MywgOX0sIHsgICAgIDQ3LCA4fSwgeyAgICAgOTUsIDl9LCB7ICAgICA1NSwxMH0sIFwKKyAgICB7ICAgICAzMSwgOX0sIHsgICAgIDc5LDEwfSwgeyAgICAgNDcsIDl9LCB7ICAgIDEwMywxMX0sIFwKKyAgICB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA5fSwgeyAgICAxMzUsMTB9LCB7ICAgICA3OSwgOX0sIFwKKyAgICB7ICAgIDE1OSwxMH0sIHsgICAgIDk1LCA5fSwgeyAgICAxOTEsMTB9LCB7ICAgIDExMSwxMX0sIFwKKyAgICB7ICAgICA2MywxMH0sIHsgICAgMTU5LDExfSwgeyAgICAgOTUsMTB9LCB7ICAgIDE5MSwxMn0sIFwKKyAgICB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgeyAgICAyNTUsIDl9LCB7ICAgIDUxMSwxMH0sIFwKKyAgICB7ICAgIDI3MSwgOX0sIHsgICAgNTQzLDExfSwgeyAgICAxNTksMTB9LCB7ICAgIDMxOSwgOX0sIFwKKyAgICB7ICAgIDYzOSwxMH0sIHsgICAgMzM1LCA5fSwgeyAgICA2NzEsMTB9LCB7ICAgIDM1MSwxMX0sIFwKKyAgICB7ICAgIDE5MSwxMH0sIHsgICAgMzgzLCA5fSwgeyAgICA3NjcsMTB9LCB7ICAgIDM5OSwgOX0sIFwKKyAgICB7ICAgIDc5OSwxMH0sIHsgICAgNDE1LDExfSwgeyAgICAyMjMsMTJ9LCB7ICAgIDEyNywxMX0sIFwKKyAgICB7ICAgIDI1NSwxMH0sIHsgICAgNTExLCA5fSwgeyAgIDEwMjMsMTB9LCB7ICAgIDU0MywxMX0sIFwKKyAgICB7ICAgIDI4NywxMH0sIHsgICAgNjA3LDExfSwgeyAgICAzMTksMTB9LCB7ICAgIDY3MSwxMX0sIFwKKyAgICB7ICAgIDM1MSwxMn0sIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTB9LCB7ICAgIDc5OSwxMX0sIFwKKyAgICB7ICAgIDQxNSwxMH0sIHsgICAgODMxLDEzfSwgeyAgICAxMjcsMTJ9LCB7ICAgIDI1NSwxMX0sIFwKKyAgICB7ICAgIDUxMSwxMH0sIHsgICAxMDIzLDExfSwgeyAgICA1NDMsMTB9LCB7ICAgMTA4NywxMX0sIFwKKyAgICB7ICAgIDYwNywxMn0sIHsgICAgMzE5LDExfSwgeyAgICA3MzUsMTJ9LCB7ICAgIDM4MywxMX0sIFwKKyAgICB7ICAgIDg2MywxMn0sIHsgICAgNDQ3LDExfSwgeyAgICA5NTksMTN9LCB7ICAgIDI1NSwxMn0sIFwKKyAgICB7ICAgIDUxMSwxMX0sIHsgICAxMDg3LDEyfSwgeyAgICA1NzUsMTF9LCB7ICAgMTIxNSwxMn0sIFwKKyAgICB7ICAgIDYzOSwxMX0sIHsgICAxMjc5LDEyfSwgeyAgICA3MDMsMTN9LCB7ICAgIDM4MywxMn0sIFwKKyAgICB7ICAgIDc2NywxMX0sIHsgICAxNTk5LDEyfSwgeyAgICA5NTksMTR9LCB7ICAgIDI1NSwxM30sIFwKKyAgICB7ICAgIDUxMSwxMn0sIHsgICAxMjE1LDEzfSwgeyAgICA2MzksMTJ9LCB7ICAgMTQ3MSwxM30sIFwKKyAgICB7ICAgIDc2NywxMn0sIHsgICAxNjYzLDEzfSwgeyAgICA4OTUsMTJ9LCB7ICAgMTg1NSwxNH0sIFwKKyAgICB7ICAgIDUxMSwxM30sIHsgICAxMDIzLDEyfSwgeyAgIDIxMTEsMTN9LCB7ICAgMTE1MSwxMn0sIFwKKyAgICB7ICAgMjQzMSwxM30sIHsgICAxNDA3LDE0fSwgeyAgICA3NjcsMTN9LCB7ICAgMTY2MywxMn0sIFwKKyAgICB7ICAgMzMyNywxM30sIHsgICAxNzkxLDE1fSwgeyAgICA1MTEsMTR9LCB7ICAgMTAyMywxM30sIFwKKyAgICB7ICAgMjQzMSwxNH0sIHsgICAxMjc5LDEzfSwgeyAgIDgxOTIsMTR9LCB7ICAxNjM4NCwxNX0sIFwKKyAgICB7ICAzMjc2OCwxNn0gfQorI2RlZmluZSBNVUxfRkZUX1RBQkxFM19TSVpFIDEzMworI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNjc4NAorCisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgNTM1ICAvKiBrID0gNSAqLworI2RlZmluZSBTUVJfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgNTM1LCA1fSwgeyAgICAgMjUsIDZ9LCB7ICAgICAxMywgNX0sIHsgICAgIDI4LCA2fSwgXAorICAgIHsgICAgIDE1LCA1fSwgeyAgICAgMzEsIDZ9LCB7ICAgICAyOSwgN30sIHsgICAgIDE1LCA2fSwgXAorICAgIHsgICAgIDMzLCA3fSwgeyAgICAgMTcsIDZ9LCB7ICAgICAzNiwgN30sIHsgICAgIDE5LCA2fSwgXAorICAgIHsgICAgIDM5LCA3fSwgeyAgICAgMjksIDh9LCB7ICAgICAxNSwgN30sIHsgICAgIDM3LCA4fSwgXAorICAgIHsgICAgIDE5LCA3fSwgeyAgICAgNDMsIDh9LCB7ICAgICAyMywgN30sIHsgICAgIDQ5LCA4fSwgXAorICAgIHsgICAgIDI3LCA3fSwgeyAgICAgNTUsIDh9LCB7ICAgICAzMSwgN30sIHsgICAgIDYzLCA4fSwgXAorICAgIHsgICAgIDQzLCA5fSwgeyAgICAgMjMsIDh9LCB7ICAgICA1NSwgOX0sIHsgICAgIDMxLCA4fSwgXAorICAgIHsgICAgIDY3LCA5fSwgeyAgICAgMzksIDh9LCB7ICAgICA3OSwgOX0sIHsgICAgIDQ3LCA4fSwgXAorICAgIHsgICAgIDk1LCA5fSwgeyAgICAgNTUsMTB9LCB7ICAgICAzMSwgOX0sIHsgICAgIDc5LDEwfSwgXAorICAgIHsgICAgIDQ3LCA5fSwgeyAgICAxMDMsMTF9LCB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA5fSwgXAorICAgIHsgICAgMTM1LDEwfSwgeyAgICAgNzksIDl9LCB7ICAgIDE1OSwxMH0sIHsgICAgIDk1LCA5fSwgXAorICAgIHsgICAgMTkxLDEwfSwgeyAgICAxMTEsMTF9LCB7ICAgICA2MywxMH0sIHsgICAgMTQzLCA5fSwgXAorICAgIHsgICAgMjg3LDEwfSwgeyAgICAxNTksMTF9LCB7ICAgICA5NSwxMH0sIHsgICAgMTkxLDEyfSwgXAorICAgIHsgICAgIDYzLDExfSwgeyAgICAxMjcsMTB9LCB7ICAgIDI1NSwgOX0sIHsgICAgNTExLDEwfSwgXAorICAgIHsgICAgMjcxLCA5fSwgeyAgICA1NDMsMTB9LCB7ICAgIDI4NywxMX0sIHsgICAgMTU5LDEwfSwgXAorICAgIHsgICAgMzE5LCA5fSwgeyAgICA2MzksMTB9LCB7ICAgIDMzNSwgOX0sIHsgICAgNjcxLDEwfSwgXAorICAgIHsgICAgMzUxLDExfSwgeyAgICAxOTEsMTB9LCB7ICAgIDM4MywgOX0sIHsgICAgNzY3LDEwfSwgXAorICAgIHsgICAgMzk5LCA5fSwgeyAgICA3OTksMTB9LCB7ICAgIDQxNSwgOX0sIHsgICAgODMxLDExfSwgXAorICAgIHsgICAgMjIzLDEyfSwgeyAgICAxMjcsMTB9LCB7ICAgIDU0MywxMX0sIHsgICAgMjg3LDEwfSwgXAorICAgIHsgICAgNjA3LDExfSwgeyAgICAzMTksMTB9LCB7ICAgIDY3MSwxMX0sIHsgICAgMzUxLDEwfSwgXAorICAgIHsgICAgNzAzLDEyfSwgeyAgICAxOTEsMTF9LCB7ICAgIDM4MywxMH0sIHsgICAgNzk5LDExfSwgXAorICAgIHsgICAgNDE1LDEwfSwgeyAgICA4MzEsMTN9LCB7ICAgIDEyNywxMX0sIHsgICAgNTExLDEwfSwgXAorICAgIHsgICAxMDIzLDExfSwgeyAgICA1NDMsMTB9LCB7ICAgMTA4NywxMX0sIHsgICAgNjA3LDEyfSwgXAorICAgIHsgICAgMzE5LDExfSwgeyAgICA3MzUsMTJ9LCB7ICAgIDM4MywxMX0sIHsgICAgODYzLDEyfSwgXAorICAgIHsgICAgNDQ3LDExfSwgeyAgICA5OTEsMTJ9LCB7ICAgIDUxMSwxMX0sIHsgICAxMDg3LDEyfSwgXAorICAgIHsgICAgNTc1LDExfSwgeyAgIDEyMTUsMTJ9LCB7ICAgIDYzOSwxMX0sIHsgICAxMjc5LDEyfSwgXAorICAgIHsgICAgNzAzLDEzfSwgeyAgICAzODMsMTJ9LCB7ICAgIDc2NywxMX0sIHsgICAxNTM1LDEyfSwgXAorICAgIHsgICAgODMxLDExfSwgeyAgIDE2NjMsMTJ9LCB7ICAgIDk1OSwxM30sIHsgICAgNTExLDEyfSwgXAorICAgIHsgICAxMjE1LDEzfSwgeyAgICA2MzksMTJ9LCB7ICAgMTQ3MSwxM30sIHsgICAgNzY3LDEyfSwgXAorICAgIHsgICAxNjYzLDEzfSwgeyAgICA4OTUsMTJ9LCB7ICAgMTg1NSwxNH0sIHsgICAgNTExLDEzfSwgXAorICAgIHsgICAxMDIzLDEyfSwgeyAgIDIxMTEsMTN9LCB7ICAgMTE1MSwxMn0sIHsgICAyNDMxLDEzfSwgXAorICAgIHsgICAxNDA3LDE0fSwgeyAgICA3NjcsMTN9LCB7ICAgMTc5MSwxNX0sIHsgICAgNTExLDE0fSwgXAorICAgIHsgICAxMDIzLDEzfSwgeyAgIDI0MzEsMTR9LCB7ICAgMTI3OSwxM30sIHsgICA4MTkyLDE0fSwgXAorICAgIHsgIDE2Mzg0LDE1fSwgeyAgMzI3NjgsMTZ9IH0KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTNfU0laRSAxMzQKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDQ3MzYKKworI2RlZmluZSBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgIDEzNDYzCisjZGVmaW5lIFNRUkxPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICA1CisjZGVmaW5lIFNRUkxPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIFNRUkxPX1NRUl9USFJFU0hPTEQgICAgICAgICAgICAgICA5NDQ5CisKKyNkZWZpbmUgRENfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgRENfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgOTAKKyNkZWZpbmUgRENfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgRENfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMTAKKworI2RlZmluZSBJTlZfTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICA3OAorI2RlZmluZSBJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDEzNAorI2RlZmluZSBJTlZfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgICA5OAorCisjZGVmaW5lIEJJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgMjc4CisjZGVmaW5lIFJFRENfMV9UT19SRURDXzJfVEhSRVNIT0xEICAgICAgICAgICA0CisjZGVmaW5lIFJFRENfMl9UT19SRURDX05fVEhSRVNIT0xEICAgICAgICAgMTIzCisKKyNkZWZpbmUgTVVfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE3MTgKKyNkZWZpbmUgTVVfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgIDE2ODUKKyNkZWZpbmUgTVVQSV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgNjIKKyNkZWZpbmUgTVVfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgIDE1MjgKKyNkZWZpbmUgTVVfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE3MTgKKworI2RlZmluZSBQT1dNX1NFQ19UQUJMRSAgMSwyMiw5NSw1NjMsMTk1NQorCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgIDUxCisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTgyCisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgNjM4CisKKyNkZWZpbmUgRkFDX0RTQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAxNTMKKyNkZWZpbmUgRkFDX09ERF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgNTYKKworI2RlZmluZSBNQVRSSVgyMl9TVFJBU1NFTl9USFJFU0hPTEQgICAgICAgICAyNQorI2RlZmluZSBIR0NEMl9ESVYxX01FVEhPRCAgICAgICAgICAgICAgICAgICAgMSAgLyogNS4wNCUgZmFzdGVyIHRoYW4gMyAqLworI2RlZmluZSBIR0NEX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgICA1NQorI2RlZmluZSBIR0NEX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA1MAorI2RlZmluZSBIR0NEX1JFRFVDRV9USFJFU0hPTEQgICAgICAgICAgICAgMzM4OQorI2RlZmluZSBHQ0RfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDE1MworI2RlZmluZSBHQ0RFWFRfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE4MAorI2RlZmluZSBKQUNPQklfQkFTRV9NRVRIT0QgICAgICAgICAgICAgICAgICAgMSAgLyogMzAuNjAlIGZhc3RlciB0aGFuIDQgKi8KKworLyogVHVuZXVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIHRvb2sgNzUyMDIgc2Vjb25kcyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjdhL2NvcmE4L2JkaXZfcV8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL3Y3YS9jb3JhOC9iZGl2X3FfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc0YjI2MAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL3Y3YS9jb3JhOC9iZGl2X3FfMS5hc20KQEAgLTAsMCArMSwxNTggQEAKK2RubCAgQVJNIHY2IG1wbl9iZGl2X3FfMSwgbXBuX3BpMV9iZGl2X3FfMSAtLSBIZW5zZWwgZGl2aXNpb24gYnkgMS1saW1iIGRpdmlzb3IuCitkbmwgIFRoaXMgaXMgdjYgY29kZSBidXQgaXQgcnVucyB3ZWxsIG9uIGp1c3QgdGhlIHY3YSBDb3J0ZXgtQTgsIEE5LCBhbmQgQTE1LgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTIsIDIwMTMsIDIwMTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgICAgICAgIGN5Y2xlcy9saW1iCitDICAgICAgICAgICAgICAgbm9ybSAgIHVub3JtCitDIDExNzYJCSAtCSAtCitDIENvcnRleC1BNQkgOQkxMworQyBDb3J0ZXgtQTcJMTIJMTgKK0MgQ29ydGV4LUE4CTEzCTE0CitDIENvcnRleC1BOQkgOQkxMAkJbm90IG1lYXN1cmVkIHNpbmNlIGxhdGVzdCBlZGl0cworQyBDb3J0ZXgtQTE1CSA3CSA3CitDIENvcnRleC1BNTMJMTYJMjQKKworQyBBcmNoaXRlY3R1cmUgcmVxdWlyZW1lbnRzOgorQyB2NQktCitDIHY1dAljbHoKK0MgdjV0ZQktCitDIHY2CXVtYWFsCitDIHY2dDIJLQorQyB2N2EJLQorCitkZWZpbmUoYHJwJywgIGByMCcpCitkZWZpbmUoYHVwJywgIGByMScpCitkZWZpbmUoYG4nLCAgIGByMicpCitkZWZpbmUoYGQnLCAgIGByMycpCitkZWZpbmUoYGRpX2FyZycsICBgc3BbMF0nKQkJQwlqdXN0IG1wbl9waTFfYmRpdl9xXzEKK2RlZmluZShgY250X2FyZycsIGBzcFs0XScpCQlDCWp1c3QgbXBuX3BpMV9iZGl2X3FfMQorCitkZWZpbmUoYGN5JywgIGByNycpCitkZWZpbmUoYGNudCcsIGByNicpCitkZWZpbmUoYHRuYycsIGByNCcpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fYmRpdl9xXzEpCisJcHVzaAl7cjYtcjExfQorCisJcnNiCXIxMCwgZCwgIzAKKwlhbmQJcjEwLCByMTAsIGQKKwljbHoJcjEwLCByMTAKKwlyc2JzCWNudCwgcjEwLCAjMzEJCUMgY291bnRfdHJhaWxpbmdfemVyb3MKKwltb3YJZCwgZCwgbHNyIGNudAorCitDIGJpbnZlcnQgbGltYgorCUxFQSgJcjEwLCBiaW52ZXJ0X2xpbWJfdGFibGUpCisJYW5kCXIxMiwgZCwgIzI1NAorCWxkcmIJcjEwLCBbcjEwLCByMTIsIGxzciAjMV0KKwltdWwJcjEyLCByMTAsIHIxMAorCW11bAlyMTIsIGQsIHIxMgorCXJzYglyMTIsIHIxMiwgcjEwLCBsc2wgIzEKKwltdWwJcjEwLCByMTIsIHIxMgorCW11bAlyMTAsIGQsIHIxMAorCXJzYglyMTAsIHIxMCwgcjEyLCBsc2wgIzEJQyByMTAgPSBpbnZlcnNlCisJYglMKHBpMSkKK0VQSUxPR1VFKCkKKworUFJPTE9HVUUobXBuX3BpMV9iZGl2X3FfMSkKKwlwdXNoCXtyNi1yMTF9CisKKwlsZHIJY250LCBbc3AsICMyOF0KKwlsZHIJcjEwLCBbc3AsICMyNF0KKwljbXAJY250LCAjMAorCitMKHBpMSk6CWxkcglyMTEsIFt1cF0sICM0CQlDIHVwWzBdCisJbW92CWN5LCAjMAorCXJzYglyOCwgcjEwLCAjMAkJQyByOCA9IC1pbnZlcnNlCisJYm5lCUwodW5vcm0pCisKK0wobm9ybSk6CisJc3VicwluLCBuLCAjMQorCW11bAlyMTEsIHIxMSwgcjEwCisJYmVxCUwoZWRuKQorCisJQUxJR04oMTYpCitMKHRwbik6CWxkcglyOSwgW3VwXSwgIzQKKwltb3YJcjEyLCAjMAorCXN0cglyMTEsIFtycF0sICM0CisJdW1hYWwJcjEyLCBjeSwgcjExLCBkCisJbXVsCXIxMSwgcjksIHIxMAorCW1sYQlyMTEsIGN5LCByOCwgcjExCisJc3VicwluLCBuLCAjMQorCWJuZQlMKHRwbikKKworTChlZG4pOglzdHIJcjExLCBbcnBdCisJcG9wCXtyNi1yMTF9CisJYngJcjE0CisKK0wodW5vcm0pOgorCXB1c2gJe3I0LXI1fQorCXJzYgl0bmMsIGNudCwgIzMyCisJbW92CXI1LCByMTEsIGxzciBjbnQKKwlzdWJzCW4sIG4sICMxCisJYmVxCUwoZWQxKQorCisJbGRyCXIxMiwgW3VwXSwgIzQKKwlvcnIJcjksIHI1LCByMTIsIGxzbCB0bmMKKwltb3YJcjUsIHIxMiwgbHNyIGNudAorCW11bAlyMTEsIHI5LCByMTAKKwlzdWJzCW4sIG4sICMxCisJYmVxCUwoZWR1KQorCisJQUxJR04oMTYpCitMKHRwdSk6CWxkcglyMTIsIFt1cF0sICM0CisJb3JyCXI5LCByNSwgcjEyLCBsc2wgdG5jCisJbW92CXI1LCByMTIsIGxzciBjbnQKKwltb3YJcjEyLCAjMAorCXN0cglyMTEsIFtycF0sICM0CisJdW1hYWwJcjEyLCBjeSwgcjExLCBkCisJbXVsCXIxMSwgcjksIHIxMAorCW1sYQlyMTEsIGN5LCByOCwgcjExCisJc3VicwluLCBuLCAjMQorCWJuZQlMKHRwdSkKKworTChlZHUpOglzdHIJcjExLCBbcnBdLCAjNAorCW1vdglyMTIsICMwCisJdW1hYWwJcjEyLCBjeSwgcjExLCBkCisJbXVsCXIxMSwgcjUsIHIxMAorCW1sYQlyMTEsIGN5LCByOCwgcjExCisJc3RyCXIxMSwgW3JwXQorCXBvcAl7cjQtcjExfQorCWJ4CXIxNAorCitMKGVkMSk6CW11bAlyMTEsIHI1LCByMTAKKwlzdHIJcjExLCBbcnBdCisJcG9wCXtyNC1yMTF9CisJYngJcjE0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92N2EvY29yYTgvZ21wLW1wYXJhbS5oIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjdhL2NvcmE4L2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODY0ODQxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm0vdjdhL2NvcmE4L2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDIwNyBAQAorLyogZ21wLW1wYXJhbS5oIC0tIENvbXBpbGVyL21hY2hpbmUgcGFyYW1ldGVyIGhlYWRlciBmaWxlLgorCitDb3B5cmlnaHQgMjAxOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2RlZmluZSBHTVBfTElNQl9CSVRTIDMyCisjZGVmaW5lIEdNUF9MSU1CX0JZVEVTIDQKKworLyogMTAwMCBNSHogQ29ydGV4LUE4IChiZWFnbGVib25lIGJsYWNrKSAqLworLyogRkZUIHR1bmluZyBsaW1pdCA9IDksNDY0LDM0OCAqLworLyogR2VuZXJhdGVkIGJ5IHR1bmV1cC5jLCAyMDE5LTEwLTIzLCBnY2MgNi4zICovCisKKyNkZWZpbmUgTU9EXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PRF8xTl9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA1CisjZGVmaW5lIE1PRF8xVV9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA1CisjZGVmaW5lIE1PRF8xXzFfVE9fTU9EXzFfMl9USFJFU0hPTEQgICAgIE1QX1NJWkVfVF9NQVgKKyNkZWZpbmUgTU9EXzFfMl9UT19NT0RfMV80X1RIUkVTSE9MRCAgICAgICAgIDAgIC8qIG5ldmVyIG1wbl9tb2RfMXNfMnAgKi8KKyNkZWZpbmUgUFJFSU5WX01PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgMTIKKyNkZWZpbmUgVVNFX1BSRUlOVl9ESVZSRU1fMSAgICAgICAgICAgICAgICAgIDEgIC8qIG5hdGl2ZSAqLworI2RlZmluZSBESVZfUVJfMU5fUEkxX01FVEhPRCAgICAgICAgICAgICAgICAgMSAgLyogNTAuNjUlIGZhc3RlciB0aGFuIDIgKi8KKyNkZWZpbmUgRElWX1FSXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWX1FSXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWX1FSXzJfUEkyX1RIUkVTSE9MRCAgICAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWRVhBQ1RfMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAobmF0aXZlKSAqLworI2RlZmluZSBCTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgICAgICAzMQorCisjZGVmaW5lIERJVl8xX1ZTX01VTF8xX1BFUkNFTlQgICAgICAgICAgICAgMTkyCisKKyNkZWZpbmUgTVVMX1RPT00yMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMzkKKyNkZWZpbmUgTVVMX1RPT00zM19USFJFU0hPTEQgICAgICAgICAgICAgICAxMjkKKyNkZWZpbmUgTVVMX1RPT000NF9USFJFU0hPTEQgICAgICAgICAgICAgICAyMjYKKyNkZWZpbmUgTVVMX1RPT002SF9USFJFU0hPTEQgICAgICAgICAgICAgICAzNjYKKyNkZWZpbmUgTVVMX1RPT004SF9USFJFU0hPTEQgICAgICAgICAgICAgICA2MjAKKworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT000M19USFJFU0hPTEQgICAgIDE0MQorI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT001M19USFJFU0hPTEQgICAgIDE4MworI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT001M19USFJFU0hPTEQgICAgIDE1NAorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT002M19USFJFU0hPTEQgICAgIDE2MAorI2RlZmluZSBNVUxfVE9PTTQzX1RPX1RPT001NF9USFJFU0hPTEQgICAgIDE5MworCisjZGVmaW5lIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNDYKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNDUKKyNkZWZpbmUgU1FSX1RPT000X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzNzUKKyNkZWZpbmUgU1FSX1RPT002X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBTUVJfVE9PTThfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDU0NworCisjZGVmaW5lIE1VTE1JRF9UT09NNDJfVEhSRVNIT0xEICAgICAgICAgICAgIDM4CisKKyNkZWZpbmUgTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgU1FSTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjMKKworI2RlZmluZSBNVUxfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDQ3NiAgLyogayA9IDUgKi8KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDQ3NiwgNX0sIHsgICAgIDI4LCA2fSwgeyAgICAgMTUsIDV9LCB7ICAgICAzMSwgNn0sIFwKKyAgICB7ICAgICAyOCwgN30sIHsgICAgIDE1LCA2fSwgeyAgICAgMzMsIDd9LCB7ICAgICAxOSwgNn0sIFwKKyAgICB7ICAgICAzOSwgN30sIHsgICAgIDI3LCA4fSwgeyAgICAgMTUsIDd9LCB7ICAgICAzNSwgOH0sIFwKKyAgICB7ICAgICAxOSwgN30sIHsgICAgIDQzLCA4fSwgeyAgICAgMjMsIDd9LCB7ICAgICA1MSwgOH0sIFwKKyAgICB7ICAgICAyNywgN30sIHsgICAgIDU1LCA4fSwgeyAgICAgMzEsIDd9LCB7ICAgICA2MywgOH0sIFwKKyAgICB7ICAgICA0MywgOX0sIHsgICAgIDIzLCA4fSwgeyAgICAgNTUsIDl9LCB7ICAgICAzMSwgOH0sIFwKKyAgICB7ICAgICA3MSwgOX0sIHsgICAgIDM5LCA4fSwgeyAgICAgODMsIDl9LCB7ICAgICA0NywgOH0sIFwKKyAgICB7ICAgICA5OSwgOX0sIHsgICAgIDU1LDEwfSwgeyAgICAgMzEsIDl9LCB7ICAgICA4NywxMH0sIFwKKyAgICB7ICAgICA0NywgOX0sIHsgICAgMTAzLDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA2MywgOX0sIFwKKyAgICB7ICAgIDEzNSwxMH0sIHsgICAgIDc5LCA5fSwgeyAgICAxNjcsMTB9LCB7ICAgICA5NSwgOX0sIFwKKyAgICB7ICAgIDE5OSwxMH0sIHsgICAgMTExLDExfSwgeyAgICAgNjMsMTB9LCB7ICAgIDEyNywgOX0sIFwKKyAgICB7ICAgIDI1NSwxMH0sIHsgICAgMTQzLCA5fSwgeyAgICAyODcsIDh9LCB7ICAgIDU3NSwxMH0sIFwKKyAgICB7ICAgIDE1OSwgOX0sIHsgICAgMzE5LDExfSwgeyAgICAgOTUsMTB9LCB7ICAgIDE5MSwgOX0sIFwKKyAgICB7ICAgIDM4MywgOH0sIHsgICAgNzY3LCA5fSwgeyAgICAzOTksMTB9LCB7ICAgIDIwNywxMn0sIFwKKyAgICB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgeyAgICAyNTUsIDl9LCB7ICAgIDUxMSwxMH0sIFwKKyAgICB7ICAgIDI3MSwgOX0sIHsgICAgNTQzLDEwfSwgeyAgICAyODcsIDl9LCB7ICAgIDU3NSwxMX0sIFwKKyAgICB7ICAgIDE1OSwxMH0sIHsgICAgMzE5LCA5fSwgeyAgICA2MzksMTB9LCB7ICAgIDMzNSwgOX0sIFwKKyAgICB7ICAgIDY3MSwxMH0sIHsgICAgMzUxLCA5fSwgeyAgICA3MDMsMTB9LCB7ICAgIDM2NywxMX0sIFwKKyAgICB7ICAgIDE5MSwxMH0sIHsgICAgMzk5LCA5fSwgeyAgICA3OTksMTB9LCB7ICAgIDQxNSwxMX0sIFwKKyAgICB7ICAgIDIyMywxMn0sIHsgICAgMTI3LDExfSwgeyAgICAyNTUsMTB9LCB7ICAgIDU0MywxMX0sIFwKKyAgICB7ICAgIDI4NywxMH0sIHsgICAgNjA3LCA5fSwgeyAgIDEyMTUsMTF9LCB7ICAgIDMxOSwxMH0sIFwKKyAgICB7ICAgIDY3MSwxMX0sIHsgICAgMzUxLDEwfSwgeyAgICA3MDMsMTJ9LCB7ICAgIDE5MSwxMX0sIFwKKyAgICB7ICAgIDM4MywxMH0sIHsgICAgNzk5LDExfSwgeyAgICA0MTUsMTB9LCB7ICAgIDg2MywxMX0sIFwKKyAgICB7ICAgIDQ0NywxM30sIHsgICAgMTI3LDEyfSwgeyAgICAyNTUsMTF9LCB7ICAgIDU0MywxMH0sIFwKKyAgICB7ICAgMTA4NywxMX0sIHsgICAgNjA3LDEyfSwgeyAgICAzMTksMTF9LCB7ICAgIDY3MSwxMH0sIFwKKyAgICB7ICAgMTM0MywxMX0sIHsgICAgNzM1LDEyfSwgeyAgICAzODMsMTF9LCB7ICAgIDc5OSwxMH0sIFwKKyAgICB7ICAgMTU5OSwxMX0sIHsgICAgODYzLDEyfSwgeyAgICA0NDcsMTF9LCB7ICAgIDk1OSwxM30sIFwKKyAgICB7ICAgIDI1NSwxMn0sIHsgICAgNTExLDExfSwgeyAgIDEwODcsMTJ9LCB7ICAgIDU3NSwxMX0sIFwKKyAgICB7ICAgMTIxNSwxMn0sIHsgICAgNjM5LDExfSwgeyAgIDEzNDMsMTJ9LCB7ICAgIDcwMywxM30sIFwKKyAgICB7ICAgIDM4MywxMn0sIHsgICAgNzY3LDExfSwgeyAgIDE1OTksMTJ9LCB7ICAgIDgzMSwxMX0sIFwKKyAgICB7ICAgMTY2MywxMn0sIHsgICAgOTU5LDE0fSwgeyAgICAyNTUsMTN9LCB7ICAgIDUxMSwxMn0sIFwKKyAgICB7ICAgMTIxNSwxM30sIHsgICAgNjM5LDEyfSwgeyAgIDE0MDcsMTN9LCB7ICAgIDc2NywxMn0sIFwKKyAgICB7ICAgMTY2MywxM30sIHsgICAgODk1LDEyfSwgeyAgIDE3OTEsMTR9LCB7ICAgIDUxMSwxM30sIFwKKyAgICB7ICAgMTAyMywxMn0sIHsgICAyMTExLDEzfSwgeyAgIDExNTEsMTJ9LCB7ICAgNDA5NiwxM30sIFwKKyAgICB7ICAgODE5MiwxNH0sIHsgIDE2Mzg0LDE1fSwgeyAgMzI3NjgsMTZ9IH0KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTNfU0laRSAxMzkKKyNkZWZpbmUgTVVMX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDY3ODQKKworI2RlZmluZSBTUVJfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDQzNiAgLyogayA9IDUgKi8KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDQzNiwgNX0sIHsgICAgIDI1LCA2fSwgeyAgICAgMTMsIDV9LCB7ICAgICAyNywgNn0sIFwKKyAgICB7ICAgICAyOCwgN30sIHsgICAgIDE1LCA2fSwgeyAgICAgMzIsIDd9LCB7ICAgICAxNywgNn0sIFwKKyAgICB7ICAgICAzNSwgN30sIHsgICAgIDE5LCA2fSwgeyAgICAgMzksIDd9LCB7ICAgICAyOSwgOH0sIFwKKyAgICB7ICAgICAxNSwgN30sIHsgICAgIDM1LCA4fSwgeyAgICAgMTksIDd9LCB7ICAgICA0MSwgOH0sIFwKKyAgICB7ICAgICAyMywgN30sIHsgICAgIDQ5LCA4fSwgeyAgICAgMjcsIDl9LCB7ICAgICAxNSwgOH0sIFwKKyAgICB7ICAgICA0MywgOX0sIHsgICAgIDIzLCA4fSwgeyAgICAgNTUsMTB9LCB7ICAgICAxNSwgOX0sIFwKKyAgICB7ICAgICAzMSwgOH0sIHsgICAgIDY3LCA5fSwgeyAgICAgMzksIDh9LCB7ICAgICA3OSwgOX0sIFwKKyAgICB7ICAgICA0NywgOH0sIHsgICAgIDk1LCA5fSwgeyAgICAgNTUsMTB9LCB7ICAgICAzMSwgOX0sIFwKKyAgICB7ICAgICA3OSwxMH0sIHsgICAgIDQ3LCA5fSwgeyAgICAxMDMsMTF9LCB7ICAgICAzMSwxMH0sIFwKKyAgICB7ICAgICA2MywgOX0sIHsgICAgMTM1LDEwfSwgeyAgICAgNzksIDl9LCB7ICAgIDE1OSwgOH0sIFwKKyAgICB7ICAgIDMxOSwgOX0sIHsgICAgMTY3LDEwfSwgeyAgICAgOTUsIDl9LCB7ICAgIDE5MSwxMH0sIFwKKyAgICB7ICAgIDExMSwxMX0sIHsgICAgIDYzLDEwfSwgeyAgICAxMjcsIDl9LCB7ICAgIDI1NSwgOH0sIFwKKyAgICB7ICAgIDUxMSwgOX0sIHsgICAgMjcxLDEwfSwgeyAgICAxNDMsIDl9LCB7ICAgIDI4NywgOH0sIFwKKyAgICB7ICAgIDU3NSwgOX0sIHsgICAgMzAzLDEwfSwgeyAgICAxNTksIDl9LCB7ICAgIDMxOSwxMX0sIFwKKyAgICB7ICAgICA5NSwxMH0sIHsgICAgMTkxLCA5fSwgeyAgICAzODMsIDh9LCB7ICAgIDc2NywgOX0sIFwKKyAgICB7ICAgIDM5OSwxMn0sIHsgICAgIDYzLDExfSwgeyAgICAxMjcsMTB9LCB7ICAgIDI1NSwgOX0sIFwKKyAgICB7ICAgIDUxMSwxMH0sIHsgICAgMjcxLCA5fSwgeyAgICA1NDMsMTB9LCB7ICAgIDI4NywgOX0sIFwKKyAgICB7ICAgIDU3NSwxMH0sIHsgICAgMzAzLDExfSwgeyAgICAxNTksMTB9LCB7ICAgIDMxOSwgOX0sIFwKKyAgICB7ICAgIDYzOSwxMH0sIHsgICAgMzM1LCA5fSwgeyAgICA2NzEsMTB9LCB7ICAgIDM1MSwgOX0sIFwKKyAgICB7ICAgIDcwMywxMH0sIHsgICAgMzY3LDExfSwgeyAgICAxOTEsMTB9LCB7ICAgIDM4MywgOX0sIFwKKyAgICB7ICAgIDc2NywxMH0sIHsgICAgMzk5LCA5fSwgeyAgICA3OTksMTB9LCB7ICAgIDQxNSwgOX0sIFwKKyAgICB7ICAgIDgzMSwxMX0sIHsgICAgMjIzLDEwfSwgeyAgICA0NDcsMTJ9LCB7ICAgIDEyNywxMX0sIFwKKyAgICB7ICAgIDI1NSwxMH0sIHsgICAgNTExLCA5fSwgeyAgIDEwMjMsMTB9LCB7ICAgIDU0MywxMX0sIFwKKyAgICB7ICAgIDI4NywxMH0sIHsgICAgNjA3LDExfSwgeyAgICAzMTksMTB9LCB7ICAgIDY3MSwxMX0sIFwKKyAgICB7ICAgIDM1MSwxMH0sIHsgICAgNzM1LDEyfSwgeyAgICAxOTEsMTF9LCB7ICAgIDM4MywxMH0sIFwKKyAgICB7ICAgIDc5OSwxMX0sIHsgICAgNDE1LDEwfSwgeyAgICA4NjMsMTF9LCB7ICAgIDQ0NywxMH0sIFwKKyAgICB7ICAgIDg5NSwxM30sIHsgICAgMTI3LDEyfSwgeyAgICAyNTUsMTF9LCB7ICAgIDUxMSwxMH0sIFwKKyAgICB7ICAgMTAyMywxMX0sIHsgICAgNTQzLDEwfSwgeyAgIDEwODcsMTF9LCB7ICAgIDYwNywxMn0sIFwKKyAgICB7ICAgIDMxOSwxMX0sIHsgICAgNjcxLDEwfSwgeyAgIDEzNDMsMTF9LCB7ICAgIDczNSwxMn0sIFwKKyAgICB7ICAgIDM4MywxMX0sIHsgICAgODYzLDEyfSwgeyAgICA0NDcsMTF9LCB7ICAgIDk1OSwxM30sIFwKKyAgICB7ICAgIDI1NSwxMn0sIHsgICAgNTExLDExfSwgeyAgIDEwODcsMTJ9LCB7ICAgIDU3NSwxMX0sIFwKKyAgICB7ICAgMTIxNSwxMn0sIHsgICAgNjM5LDExfSwgeyAgIDEzNDMsMTJ9LCB7ICAgIDcwMywxMX0sIFwKKyAgICB7ICAgMTQwNywxM30sIHsgICAgMzgzLDEyfSwgeyAgICA3NjcsMTF9LCB7ICAgMTU5OSwxMn0sIFwKKyAgICB7ICAgIDgzMSwxMX0sIHsgICAxNjYzLDEyfSwgeyAgICA5NTksMTR9LCB7ICAgIDI1NSwxM30sIFwKKyAgICB7ICAgIDUxMSwxMn0sIHsgICAxMjE1LDEzfSwgeyAgICA2MzksMTJ9LCB7ICAgMTQ3MSwxM30sIFwKKyAgICB7ICAgIDc2NywxMn0sIHsgICAxNjYzLDEzfSwgeyAgICA4OTUsMTJ9LCB7ICAgMTg1NSwxNH0sIFwKKyAgICB7ICAgIDUxMSwxM30sIHsgICAxMDIzLDEyfSwgeyAgIDIxMTEsMTN9LCB7ICAgMTE1MSwxMn0sIFwKKyAgICB7ICAgNDA5NiwxM30sIHsgICA4MTkyLDE0fSwgeyAgMTYzODQsMTV9LCB7ICAzMjc2OCwxNn0gfQorI2RlZmluZSBTUVJfRkZUX1RBQkxFM19TSVpFIDE1MgorI2RlZmluZSBTUVJfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMzcxMgorCisjZGVmaW5lIE1VTExPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgIDIxCisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAwICAvKiBuZXZlciBtcG5fbXVsbG9fYmFzZWNhc2UgKi8KKyNkZWZpbmUgTVVMTE9fTVVMX05fVEhSRVNIT0xEICAgICAgICAgICAgMTM0NjMKKyNkZWZpbmUgU1FSTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDkKKyNkZWZpbmUgU1FSTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgU1FSTE9fU1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDcyNDYKKworI2RlZmluZSBEQ19ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAyNworI2RlZmluZSBEQ19ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgICA3NAorI2RlZmluZSBEQ19CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyMQorI2RlZmluZSBEQ19CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA2NAorCisjZGVmaW5lIElOVl9NVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgIDc4CisjZGVmaW5lIElOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIElOVl9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDM3CisKKyNkZWZpbmUgQklOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAxNjcKKyNkZWZpbmUgUkVEQ18xX1RPX1JFRENfMl9USFJFU0hPTEQgICAgICAgICAgIDQKKyNkZWZpbmUgUkVEQ18yX1RPX1JFRENfTl9USFJFU0hPTEQgICAgICAgICAxOTgKKworI2RlZmluZSBNVV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTg1OAorI2RlZmluZSBNVV9ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgMTY4NQorI2RlZmluZSBNVVBJX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICA0MworI2RlZmluZSBNVV9CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTU4OQorI2RlZmluZSBNVV9CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTY4NQorCisjZGVmaW5lIFBPV01fU0VDX1RBQkxFICAxLDEzLDk2LDQ4NywxMzc4CisKKyNkZWZpbmUgR0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICAgMzYKKyNkZWZpbmUgU0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAxNDUKKyNkZWZpbmUgU0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICA1MDUKKworI2RlZmluZSBGQUNfRFNDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDEzNworI2RlZmluZSBGQUNfT0REX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAyOQorCisjZGVmaW5lIE1BVFJJWDIyX1NUUkFTU0VOX1RIUkVTSE9MRCAgICAgICAgIDI0CisjZGVmaW5lIEhHQ0QyX0RJVjFfTUVUSE9EICAgICAgICAgICAgICAgICAgICA1ICAvKiA0LjI5JSBmYXN0ZXIgdGhhbiA0ICovCisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAgIDM5CisjZGVmaW5lIEhHQ0RfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDUwCisjZGVmaW5lIEhHQ0RfUkVEVUNFX1RIUkVTSE9MRCAgICAgICAgICAgICAzNTI0CisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgMTE2CisjZGVmaW5lIEdDREVYVF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTI0CisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAgICA0ICAvKiA1Ljg5JSBmYXN0ZXIgdGhhbiAxICovCisKKy8qIFR1bmV1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCB0b29rIDQ4MjMwIHNlY29uZHMgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL3Y3YS9jb3JhOS9iZGl2X3FfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92N2EvY29yYTkvYmRpdl9xXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NWIzNzEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92N2EvY29yYTkvYmRpdl9xXzEuYXNtCkBAIC0wLDAgKzEsMzYgQEAKK2RubCAgQVJNIG1wbl9iZGl2X3FfMSwgbXBuX3BpMV9iZGl2X3FfMSAtLSBIZW5zZWwgZGl2aXNpb24gYnkgMS1saW1iIGRpdmlzb3IuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqw7ZybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAxMiwgMjAxMywgMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9iZGl2X3FfMSBtcG5fcGkxX2JkaXZfcV8xKQoraW5jbHVkZV9tcG4oYGFybS92N2EvY29yYTgvYmRpdl9xXzEuYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtL3Y3YS9jb3JhOS9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92N2EvY29yYTkvZ21wLW1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNTQwMTIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybS92N2EvY29yYTkvZ21wLW1wYXJhbS5oCkBAIC0wLDAgKzEsMjExIEBACisvKiBnbXAtbXBhcmFtLmggLS0gQ29tcGlsZXIvbWFjaGluZSBwYXJhbWV0ZXIgaGVhZGVyIGZpbGUuCisKK0NvcHlyaWdodCAxOTkxLCAxOTkzLCAxOTk0LCAxOTk5LTIwMDMsIDIwMDksIDIwMTAsIDIwMTItMjAxNSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNkZWZpbmUgR01QX0xJTUJfQklUUyAzMgorI2RlZmluZSBHTVBfTElNQl9CWVRFUyA0CisKKy8qIDEwMDAgTUh6IENvcnRleC1BOSAqLworLyogRkZUIHR1bmluZyBsaW1pdCA9IDI1IE0gKi8KKy8qIEdlbmVyYXRlZCBieSB0dW5ldXAuYywgMjAxNC0wMy0xMiwgZ2NjIDQuNiAqLworCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNQorI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNAorI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAgOAorI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICBNUF9TSVpFX1RfTUFYCisjZGVmaW5lIFBSRUlOVl9NT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgIDEyCisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAgICAxICAvKiBuYXRpdmUgKi8KKyNkZWZpbmUgRElWX1FSXzFOX1BJMV9NRVRIT0QgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgRElWX1FSXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRElWX1FSXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgIDEKKyNkZWZpbmUgRElWX1FSXzJfUEkyX1RIUkVTSE9MRCAgICAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWRVhBQ1RfMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAobmF0aXZlKSAqLworI2RlZmluZSBCTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgICAgICAyMAorCisjZGVmaW5lIERJVl8xX1ZTX01VTF8xX1BFUkNFTlQgICAgICAgICAgICAgMTkwCisKKyNkZWZpbmUgTVVMX1RPT00yMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNDUKKyNkZWZpbmUgTVVMX1RPT00zM19USFJFU0hPTEQgICAgICAgICAgICAgICAxMjkKKyNkZWZpbmUgTVVMX1RPT000NF9USFJFU0hPTEQgICAgICAgICAgICAgICAzODcKKyNkZWZpbmUgTVVMX1RPT002SF9USFJFU0hPTEQgICAgICAgICAgICAgICA1MzcKKyNkZWZpbmUgTVVMX1RPT004SF9USFJFU0hPTEQgICAgICAgICAgICAgICA3NzQKKworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT000M19USFJFU0hPTEQgICAgIDE0MQorI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT001M19USFJFU0hPTEQgICAgIDIzNworI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT001M19USFJFU0hPTEQgICAgIDE0MQorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT002M19USFJFU0hPTEQgICAgIDI1OAorI2RlZmluZSBNVUxfVE9PTTQzX1RPX1RPT001NF9USFJFU0hPTEQgICAgIDIxMQorCisjZGVmaW5lIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNjQKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxODkKKyNkZWZpbmUgU1FSX1RPT000X1RIUkVTSE9MRCAgICAgICAgICAgICAgICA1MTcKKyNkZWZpbmUgU1FSX1RPT002X1RIUkVTSE9MRCAgICAgICAgICAgICAgICA2NTYKKyNkZWZpbmUgU1FSX1RPT004X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworCisjZGVmaW5lIE1VTE1JRF9UT09NNDJfVEhSRVNIT0xEICAgICAgICAgICAgIDYyCisKKyNkZWZpbmUgTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjMKKyNkZWZpbmUgU1FSTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjgKKworI2RlZmluZSBNVUxfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDYzMCAgLyogayA9IDUgKi8KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDYzMCwgNX0sIHsgICAgIDI5LCA2fSwgeyAgICAgMTUsIDV9LCB7ICAgICAzMywgNn0sIFwKKyAgICB7ICAgICAxNywgNX0sIHsgICAgIDM1LCA2fSwgeyAgICAgMzYsIDd9LCB7ICAgICAxOSwgNn0sIFwKKyAgICB7ICAgICA0MCwgN30sIHsgICAgIDIxLCA2fSwgeyAgICAgNDMsIDd9LCB7ICAgICAyMywgNn0sIFwKKyAgICB7ICAgICA0NywgN30sIHsgICAgIDI1LCA2fSwgeyAgICAgNTEsIDd9LCB7ICAgICAyNywgNn0sIFwKKyAgICB7ICAgICA1NSwgN30sIHsgICAgIDI5LCA4fSwgeyAgICAgMTUsIDd9LCB7ICAgICAzNywgOH0sIFwKKyAgICB7ICAgICAxOSwgN30sIHsgICAgIDQzLCA4fSwgeyAgICAgMjMsIDd9LCB7ICAgICA1MSwgOH0sIFwKKyAgICB7ICAgICAyNywgN30sIHsgICAgIDU3LCA5fSwgeyAgICAgMTUsIDh9LCB7ICAgICAzMSwgN30sIFwKKyAgICB7ICAgICA2NSwgOH0sIHsgICAgIDM1LCA3fSwgeyAgICAgNzEsIDh9LCB7ICAgICA0MywgOX0sIFwKKyAgICB7ICAgICAyMywgOH0sIHsgICAgIDU1LCA5fSwgeyAgICAgMzEsIDh9LCB7ICAgICA3MSwgOX0sIFwKKyAgICB7ICAgICAzOSwgOH0sIHsgICAgIDgzLCA5fSwgeyAgICAgNDcsIDh9LCB7ICAgICA5OSwgOX0sIFwKKyAgICB7ICAgICA1NSwxMH0sIHsgICAgIDMxLCA5fSwgeyAgICAgNzksMTB9LCB7ICAgICA0NywgOX0sIFwKKyAgICB7ICAgIDEwMywxMX0sIHsgICAgIDMxLDEwfSwgeyAgICAgNjMsIDl9LCB7ICAgIDEzNSwxMH0sIFwKKyAgICB7ICAgICA3OSwgOX0sIHsgICAgMTY3LDEwfSwgeyAgICAgOTUsIDl9LCB7ICAgIDE5MSwxMH0sIFwKKyAgICB7ICAgIDExMSwxMX0sIHsgICAgIDYzLDEwfSwgeyAgICAxNTksMTF9LCB7ICAgICA5NSwxMH0sIFwKKyAgICB7ICAgIDE5MSwgOX0sIHsgICAgMzgzLDEyfSwgeyAgICAgNjMsMTF9LCB7ICAgIDEyNywxMH0sIFwKKyAgICB7ICAgIDI1NSwgOX0sIHsgICAgNTExLDEwfSwgeyAgICAyNzEsIDl9LCB7ICAgIDU0MywxMX0sIFwKKyAgICB7ICAgIDE1OSwxMH0sIHsgICAgMzE5LCA5fSwgeyAgICA2MzksMTB9LCB7ICAgIDMzNSwgOX0sIFwKKyAgICB7ICAgIDY3MSwxMX0sIHsgICAgMTkxLDEwfSwgeyAgICAzODMsIDl9LCB7ICAgIDc2NywxMH0sIFwKKyAgICB7ICAgIDM5OSwgOX0sIHsgICAgNzk5LDEwfSwgeyAgICA0MTUsMTF9LCB7ICAgIDIyMywxMn0sIFwKKyAgICB7ICAgIDEyNywxMX0sIHsgICAgMjU1LDEwfSwgeyAgICA1MTEsIDl9LCB7ICAgMTAyMywxMH0sIFwKKyAgICB7ICAgIDU0MywxMX0sIHsgICAgMjg3LDEwfSwgeyAgICA2MDcsMTF9LCB7ICAgIDMxOSwxMH0sIFwKKyAgICB7ICAgIDY3MSwxMX0sIHsgICAgMzUxLDEyfSwgeyAgICAxOTEsMTF9LCB7ICAgIDM4MywxMH0sIFwKKyAgICB7ICAgIDc5OSwxMX0sIHsgICAgNDE1LDEwfSwgeyAgICA4MzEsMTN9LCB7ICAgIDEyNywxMn0sIFwKKyAgICB7ICAgIDI1NSwxMX0sIHsgICAgNTExLDEwfSwgeyAgIDEwMjMsMTF9LCB7ICAgIDU0MywxMH0sIFwKKyAgICB7ICAgMTA4NywxMX0sIHsgICAgNjA3LDEyfSwgeyAgICAzMTksMTF9LCB7ICAgIDczNSwxMn0sIFwKKyAgICB7ICAgIDM4MywxMX0sIHsgICAgODMxLDEyfSwgeyAgICA0NDcsMTF9LCB7ICAgIDkyNywxM30sIFwKKyAgICB7ICAgIDI1NSwxMn0sIHsgICAgNTExLDExfSwgeyAgIDEwODcsMTJ9LCB7ICAgIDU3NSwxMX0sIFwKKyAgICB7ICAgMTIxNSwxMn0sIHsgICAgNjM5LDExfSwgeyAgIDEzNDMsMTJ9LCB7ICAgIDcwMywxM30sIFwKKyAgICB7ICAgIDM4MywxMn0sIHsgICAgNzY3LDExfSwgeyAgIDE1MzUsMTJ9LCB7ICAgIDgzMSwxMX0sIFwKKyAgICB7ICAgMTY2MywxMn0sIHsgICAgODk1LDE0fSwgeyAgICAyNTUsMTN9LCB7ICAgIDUxMSwxMn0sIFwKKyAgICB7ICAgMTAyMywxMX0sIHsgICAyMDQ3LDEyfSwgeyAgIDExNTEsMTN9LCB7ICAgIDYzOSwxMn0sIFwKKyAgICB7ICAgMTQwNywxM30sIHsgICAgNzY3LDEyfSwgeyAgIDE2NjMsMTN9LCB7ICAgIDg5NSwxMn0sIFwKKyAgICB7ICAgMTc5MSwxNH0sIHsgICAgNTExLDEzfSwgeyAgIDEwMjMsMTJ9LCB7ICAgMjExMSwxM30sIFwKKyAgICB7ICAgMTE1MSwxMn0sIHsgICAyNDMxLDEzfSwgeyAgIDEyNzksMTJ9LCB7ICAgMjU1OSwxM30sIFwKKyAgICB7ICAgMTQwNywxNH0sIHsgICAgNzY3LDEzfSwgeyAgIDE1MzUsMTJ9LCB7ICAgMzA3MSwxM30sIFwKKyAgICB7ICAgMTY2MywxMn0sIHsgICAzNDU1LDEzfSwgeyAgIDE3OTEsMTV9LCB7ICAgIDUxMSwxNH0sIFwKKyAgICB7ICAgMTAyMywxM30sIHsgICAyMDQ3LDEyfSwgeyAgIDQwOTUsMTN9LCB7ICAgMjE3NSwxMn0sIFwKKyAgICB7ICAgNDQ3OSwxM30sIHsgICAyNDMxLDE0fSwgeyAgIDEyNzksMTN9LCB7ICAgMjU1OSwxMn0sIFwKKyAgICB7ICAgNTExOSwxM30sIHsgICAyODE1LDEyfSwgeyAgIDU2MzEsMTR9LCB7ICAxNjM4NCwxNX0sIFwKKyAgICB7ICAzMjc2OCwxNn0gfQorI2RlZmluZSBNVUxfRkZUX1RBQkxFM19TSVpFIDE1NworI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNjc4NAorCisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgNTY1ICAvKiBrID0gNSAqLworI2RlZmluZSBTUVJfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgNTY1LCA1fSwgeyAgICAgMTksIDR9LCB7ICAgICA0MCwgNX0sIHsgICAgIDIxLCA0fSwgXAorICAgIHsgICAgIDQzLCA1fSwgeyAgICAgMjgsIDZ9LCB7ICAgICAxNSwgNX0sIHsgICAgIDM1LCA2fSwgXAorICAgIHsgICAgIDI5LCA3fSwgeyAgICAgMTUsIDZ9LCB7ICAgICAzNywgN30sIHsgICAgIDE5LCA2fSwgXAorICAgIHsgICAgIDM5LCA3fSwgeyAgICAgMjEsIDZ9LCB7ICAgICA0MywgN30sIHsgICAgIDIzLCA2fSwgXAorICAgIHsgICAgIDQ3LCA3fSwgeyAgICAgMjksIDh9LCB7ICAgICAxNSwgN30sIHsgICAgIDM3LCA4fSwgXAorICAgIHsgICAgIDE5LCA3fSwgeyAgICAgNDMsIDh9LCB7ICAgICAyMywgN30sIHsgICAgIDUxLCA4fSwgXAorICAgIHsgICAgIDI3LCA3fSwgeyAgICAgNTUsIDl9LCB7ICAgICAxNSwgOH0sIHsgICAgIDMxLCA3fSwgXAorICAgIHsgICAgIDY1LCA4fSwgeyAgICAgMzUsIDd9LCB7ICAgICA3MSwgOH0sIHsgICAgIDQzLCA5fSwgXAorICAgIHsgICAgIDIzLCA4fSwgeyAgICAgNTUsMTB9LCB7ICAgICAxNSwgOX0sIHsgICAgIDMxLCA4fSwgXAorICAgIHsgICAgIDcxLCA5fSwgeyAgICAgMzksIDh9LCB7ICAgICA4MywgOX0sIHsgICAgIDQ3LCA4fSwgXAorICAgIHsgICAgIDk1LCA5fSwgeyAgICAgNTUsMTB9LCB7ICAgICAzMSwgOX0sIHsgICAgIDc5LDEwfSwgXAorICAgIHsgICAgIDQ3LCA5fSwgeyAgICAxMDMsMTF9LCB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA5fSwgXAorICAgIHsgICAgMTM1LDEwfSwgeyAgICAgNzksIDl9LCB7ICAgIDE1OSwxMH0sIHsgICAgIDk1LCA5fSwgXAorICAgIHsgICAgMTkxLDEwfSwgeyAgICAxMTEsMTF9LCB7ICAgICA2MywxMH0sIHsgICAgMTU5LDExfSwgXAorICAgIHsgICAgIDk1LDEwfSwgeyAgICAxOTEsIDl9LCB7ICAgIDM4MywxMn0sIHsgICAgIDYzLDExfSwgXAorICAgIHsgICAgMTI3LDEwfSwgeyAgICAyNTUsIDl9LCB7ICAgIDUxMSwgOH0sIHsgICAxMDIzLCA5fSwgXAorICAgIHsgICAgNTI3LDEwfSwgeyAgICAyNzEsIDl9LCB7ICAgIDU0MywxMH0sIHsgICAgMjg3LDExfSwgXAorICAgIHsgICAgMTU5LCA5fSwgeyAgICA2MzksMTB9LCB7ICAgIDMzNSwgOX0sIHsgICAgNjcxLDEwfSwgXAorICAgIHsgICAgMzUxLDExfSwgeyAgICAxOTEsMTB9LCB7ICAgIDM4MywgOX0sIHsgICAgNzY3LDEwfSwgXAorICAgIHsgICAgMzk5LCA5fSwgeyAgICA3OTksMTB9LCB7ICAgIDQxNSwxMX0sIHsgICAgMjIzLDEyfSwgXAorICAgIHsgICAgMTI3LDExfSwgeyAgICAyNTUsMTB9LCB7ICAgIDUxMSwgOX0sIHsgICAxMDIzLDEwfSwgXAorICAgIHsgICAgNTQzLDExfSwgeyAgICAyODcsMTB9LCB7ICAgIDY3MSwxMX0sIHsgICAgMzUxLDEyfSwgXAorICAgIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTB9LCB7ICAgIDc5OSwxMX0sIHsgICAgNDE1LDEwfSwgXAorICAgIHsgICAgODMxLDEzfSwgeyAgICAxMjcsMTJ9LCB7ICAgIDI1NSwxMX0sIHsgICAgNTExLDEwfSwgXAorICAgIHsgICAxMDIzLDExfSwgeyAgICA1NDMsMTB9LCB7ICAgMTA4NywxMX0sIHsgICAgNzM1LDEyfSwgXAorICAgIHsgICAgMzgzLDExfSwgeyAgICA4MzEsMTJ9LCB7ICAgIDQ0NywxMX0sIHsgICAgOTI3LDEzfSwgXAorICAgIHsgICAgMjU1LDEyfSwgeyAgICA1MTEsMTF9LCB7ICAgMTA4NywxMn0sIHsgICAgNTc1LDExfSwgXAorICAgIHsgICAxMTUxLDEyfSwgeyAgICA2MzksMTF9LCB7ICAgMTM0MywxMn0sIHsgICAgNzAzLDEzfSwgXAorICAgIHsgICAgMzgzLDEyfSwgeyAgICA3NjcsMTF9LCB7ICAgMTUzNSwxMn0sIHsgICAgODMxLDExfSwgXAorICAgIHsgICAxNjYzLDEyfSwgeyAgICA5NTksMTN9LCB7ICAgIDUxMSwxMn0sIHsgICAxMDIzLDExfSwgXAorICAgIHsgICAyMDQ3LDEyfSwgeyAgIDExNTEsMTN9LCB7ICAgIDYzOSwxMn0sIHsgICAxNDA3LDEzfSwgXAorICAgIHsgICAgNzY3LDEyfSwgeyAgIDE1OTksMTN9LCB7ICAgIDg5NSwxMn0sIHsgICAxNzkxLDE0fSwgXAorICAgIHsgICAgNTExLDEzfSwgeyAgIDEwMjMsMTJ9LCB7ICAgMjExMSwxM30sIHsgICAxMTUxLDEyfSwgXAorICAgIHsgICAyNDMxLDEzfSwgeyAgIDEyNzksMTJ9LCB7ICAgMjU1OSwxM30sIHsgICAxNDA3LDE0fSwgXAorICAgIHsgICAgNzY3LDEzfSwgeyAgIDE1MzUsMTJ9LCB7ICAgMzA3MSwxM30sIHsgICAxNjYzLDEyfSwgXAorICAgIHsgICAzNDU1LDEzfSwgeyAgIDE3OTEsMTV9LCB7ICAgIDUxMSwxNH0sIHsgICAxMDIzLDEzfSwgXAorICAgIHsgICAyMDQ3LDEyfSwgeyAgIDQwOTUsMTN9LCB7ICAgMjE3NSwxMn0sIHsgICA0NDc5LDEzfSwgXAorICAgIHsgICAyMzAzLDE0fSwgeyAgIDEyNzksMTN9LCB7ICAgMjU1OSwxMn0sIHsgICA1MTE5LDEzfSwgXAorICAgIHsgICAyODE1LDE0fSwgeyAgMTYzODQsMTV9LCB7ICAzMjc2OCwxNn0gfQorI2RlZmluZSBTUVJfRkZUX1RBQkxFM19TSVpFIDE1NQorI2RlZmluZSBTUVJfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNTU2OAorCisjZGVmaW5lIE1VTExPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTVVMTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgMzcKKyNkZWZpbmUgTVVMTE9fTVVMX05fVEhSRVNIT0xEICAgICAgICAgICAgMTM0NjMKKyNkZWZpbmUgU1FSTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgMTIKKyNkZWZpbmUgU1FSTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgU1FSTE9fU1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTA5NTAKKworI2RlZmluZSBEQ19ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBEQ19ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgICA5OQorI2RlZmluZSBEQ19CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA0MworI2RlZmluZSBEQ19CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDEwMgorCisjZGVmaW5lIElOVl9NVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgIDg4CisjZGVmaW5lIElOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAgMTQxCisjZGVmaW5lIElOVl9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTExCisKKyNkZWZpbmUgQklOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAzMTIKKyNkZWZpbmUgUkVEQ18xX1RPX1JFRENfMl9USFJFU0hPTEQgICAgICAgICAgIDYKKyNkZWZpbmUgUkVEQ18yX1RPX1JFRENfTl9USFJFU0hPTEQgICAgICAgICAxNDAKKworI2RlZmluZSBNVV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjQ5MgorI2RlZmluZSBNVV9ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgMjEzMAorI2RlZmluZSBNVVBJX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICA1NQorI2RlZmluZSBNVV9CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgMjEzMAorI2RlZmluZSBNVV9CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjE3MgorCisjZGVmaW5lIFBPV01fU0VDX1RBQkxFICA0MCw1Myw1Niw3MSwxOTg1CisKKyNkZWZpbmUgR0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICAgMzMKKyNkZWZpbmUgU0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAxNzIKKyNkZWZpbmUgU0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICA2NzEKKworI2RlZmluZSBGQUNfRFNDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDMwOQorI2RlZmluZSBGQUNfT0REX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAyOQorCisjZGVmaW5lIE1BVFJJWDIyX1NUUkFTU0VOX1RIUkVTSE9MRCAgICAgICAgIDI0CisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAgIDYxCisjZGVmaW5lIEhHQ0RfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDUwCisjZGVmaW5lIEhHQ0RfUkVEVUNFX1RIUkVTSE9MRCAgICAgICAgICAgICA0MTIwCisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgNDA4CisjZGVmaW5lIEdDREVYVF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMzAzCisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAgICA0CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybTY0L2FvcnNfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybTY0L2FvcnNfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFmM2JiOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtNjQvYW9yc19uLmFzbQpAQCAtMCwwICsxLDEyNSBAQAorZG5sICBBUk02NCBtcG5fYWRkX24gYW5kIG1wbl9zdWJfbgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTMsIDIwMTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIENvcnRleC1BNTMJMi43NS0zLjI1CitDIENvcnRleC1BNTcJIDEuNQorQyBYLUdlbmUJIDIuMAorCitjaGFuZ2Vjb20oYmxhaCkKKworZGVmaW5lKGBycCcsIGB4MCcpCitkZWZpbmUoYHVwJywgYHgxJykKK2RlZmluZShgdnAnLCBgeDInKQorZGVmaW5lKGBuJywgIGB4MycpCisKK2lmZGVmKGBPUEVSQVRJT05fYWRkX24nLCBgCisgIGRlZmluZShgQUREU1VCQycsCWFkY3MpCisgIGRlZmluZShgQ0xSQ1knLAlgY21uCXh6ciwgeHpyJykKKyAgZGVmaW5lKGBTRVRDWScsCWBjbXAJJDEsICMxJykKKyAgZGVmaW5lKGBSRVRWQUwnLAlgY3NldAl4MCwgY3MnKQorICBkZWZpbmUoYGZ1bmNfbicsCW1wbl9hZGRfbikKKyAgZGVmaW5lKGBmdW5jX25jJywJbXBuX2FkZF9uYyknKQoraWZkZWYoYE9QRVJBVElPTl9zdWJfbicsIGAKKyAgZGVmaW5lKGBBRERTVUJDJywJc2JjcykKKyAgZGVmaW5lKGBDTFJDWScsCWBjbXAJeHpyLCB4enInKQorICBkZWZpbmUoYFNFVENZJywJYGNtcAl4enIsICQxJykKKyAgZGVmaW5lKGBSRVRWQUwnLAlgY3NldAl4MCwgY2MnKQorICBkZWZpbmUoYGZ1bmNfbicsCW1wbl9zdWJfbikKKyAgZGVmaW5lKGBmdW5jX25jJywJbXBuX3N1Yl9uYyknKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRfbiBtcG5fYWRkX25jIG1wbl9zdWJfbiBtcG5fc3ViX25jKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUoZnVuY19uYykKKwlTRVRDWSgJeDQpCisJYglMKGVudCkKK0VQSUxPR1VFKCkKK1BST0xPR1VFKGZ1bmNfbikKKwlDTFJDWQorTChlbnQpOglsc3IJeDE4LCBuLCAjMgorCXRiegluLCAjMCwgTChieDApCisKK0woYngxKToJbGRyCXg3LCBbdXBdCisJbGRyCXgxMSwgW3ZwXQorCUFERFNVQkMJeDEzLCB4NywgeDExCisJc3RyCXgxMywgW3JwXSwjOAorCXRibnoJbiwgIzEsIEwoYjExKQorCitMKGIwMSk6CWNiegl4MTgsIEwocmV0KQorCWxkcAl4NCwgeDUsIFt1cCwjOF0KKwlsZHAJeDgsIHg5LCBbdnAsIzhdCisJc3ViCXVwLCB1cCwgIzgKKwlzdWIJdnAsIHZwLCAjOAorCWIJTChtaWQpCisKK0woYjExKToJbGRwCXg2LCB4NywgW3VwLCM4XQorCWxkcAl4MTAsIHgxMSwgW3ZwLCM4XQorCWFkZAl1cCwgdXAsICM4CisJYWRkCXZwLCB2cCwgIzgKKwljYnoJeDE4LCBMKGVuZCkKKwliCUwodG9wKQorCitMKGJ4MCk6CXRibnoJbiwgIzEsIEwoYjEwKQorCitMKGIwMCk6CWxkcAl4NCwgeDUsIFt1cF0KKwlsZHAJeDgsIHg5LCBbdnBdCisJc3ViCXVwLCB1cCwgIzE2CisJc3ViCXZwLCB2cCwgIzE2CisJYglMKG1pZCkKKworTChiMTApOglsZHAJeDYsIHg3LCBbdXBdCisJbGRwCXgxMCwgeDExLCBbdnBdCisJY2J6CXgxOCwgTChlbmQpCisKKwlBTElHTigxNikKK0wodG9wKToJbGRwCXg0LCB4NSwgW3VwLCMxNl0KKwlsZHAJeDgsIHg5LCBbdnAsIzE2XQorCUFERFNVQkMJeDEyLCB4NiwgeDEwCisJQUREU1VCQwl4MTMsIHg3LCB4MTEKKwlzdHAJeDEyLCB4MTMsIFtycF0sIzE2CitMKG1pZCk6CWxkcAl4NiwgeDcsIFt1cCwjMzJdIQorCWxkcAl4MTAsIHgxMSwgW3ZwLCMzMl0hCisJQUREU1VCQwl4MTIsIHg0LCB4OAorCUFERFNVQkMJeDEzLCB4NSwgeDkKKwlzdHAJeDEyLCB4MTMsIFtycF0sIzE2CisJc3ViCXgxOCwgeDE4LCAjMQorCWNibnoJeDE4LCBMKHRvcCkKKworTChlbmQpOglBRERTVUJDCXgxMiwgeDYsIHgxMAorCUFERFNVQkMJeDEzLCB4NywgeDExCisJc3RwCXgxMiwgeDEzLCBbcnBdCitMKHJldCk6CVJFVFZBTAorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hcm02NC9hb3JzbXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm02NC9hb3JzbXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkM2MzNmUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybTY0L2FvcnNtdWxfMS5hc20KQEAgLTAsMCArMSwxNDAgQEAKK2RubCAgQVJNNjQgbXBuX2FkZG11bF8xIGFuZCBtcG5fc3VibXVsXzEKKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDEzLCAyMDE1LCAyMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBDb3J0ZXgtQTUzCTkuMy05LjgKK0MgQ29ydGV4LUE1NwkgNy4wCitDIFgtR2VuZQkgNS4wCisKK0MgTk9URVMKK0MgICogSXQgaXMgcG9zc2libGUgdG8ga2VlcCB0aGUgY2FycnkgY2hhaW4gYWxpdmUgYmV0d2VlbiB0aGUgYWRkaXRpb24gYmxvY2tzCitDICAgIGFuZCB0aHVzIGF2b2lkIGNzaW5jLCBidXQgb25seSBmb3IgYWRkbXVsXzEuICBTaW5jZSB0aGF0IHNhdmVzIG5vIHRpbWUKK0MgICAgb24gdGhlIHRlc3RlZCBwaXBlbGluZXMsIHdlIGtlZXAgYWRkbXVsXzEgYW5kIHN1Ym11bF8xIHNpbWlsYXIuCitDICAqIFdlIGNvdWxkIHNlcGFyYXRlIGZlZWQtaW4gaW50byA0IGJsb2Nrcywgb25lIGZvciBlYWNoIHJlc2lkdWUgKG1vZCA0KS4KK0MgICAgVGhhdCBpcyBsaWtlbHkgdG8gc2F2ZSBhIGZldyBjeWNsZXMuCisKK2NoYW5nZWNvbShibGFoKQorCitkZWZpbmUoYHJwJywgYHgwJykKK2RlZmluZShgdXAnLCBgeDEnKQorZGVmaW5lKGBuJywgIGB4MicpCitkZWZpbmUoYHYwJywgYHgzJykKKworaWZkZWYoYE9QRVJBVElPTl9hZGRtdWxfMScsIGAKKyAgZGVmaW5lKGBBRERTVUInLAlhZGRzKQorICBkZWZpbmUoYEFERFNVQkMnLAlhZGNzKQorICBkZWZpbmUoYENPTkQnLAlgY2MnKQorICBkZWZpbmUoYGZ1bmMnLAltcG5fYWRkbXVsXzEpJykKK2lmZGVmKGBPUEVSQVRJT05fc3VibXVsXzEnLCBgCisgIGRlZmluZShgQUREU1VCJywJc3VicykKKyAgZGVmaW5lKGBBRERTVUJDJywJc2JjcykKKyAgZGVmaW5lKGBDT05EJywJYGNzJykKKyAgZGVmaW5lKGBmdW5jJywJbXBuX3N1Ym11bF8xKScpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FkZG11bF8xIG1wbl9zdWJtdWxfMSkKKworUFJPTE9HVUUoZnVuYykKKwlhZGRzCXgxNSwgeHpyLCB4enIKKworCXRiegluLCAjMCwgTCgxKQorCisJbGRyCXg0LCBbdXBdLCM4CisJbXVsCXg4LCB4NCwgdjAKKwl1bXVsaAl4MTIsIHg0LCB2MAorCWxkcgl4NCwgW3JwXQorCUFERFNVQgl4OCwgeDQsIHg4CisJY3NpbmMJeDE1LCB4MTIsIHgxMiwgQ09ORAorCXN0cgl4OCwgW3JwXSwjOAorCitMKDEpOgl0YnoJbiwgIzEsIEwoMikKKworCWxkcAl4NCwgeDUsIFt1cF0sIzE2CisJbXVsCXg4LCB4NCwgdjAKKwl1bXVsaAl4MTIsIHg0LCB2MAorCW11bAl4OSwgeDUsIHYwCisJdW11bGgJeDEzLCB4NSwgdjAKKwlhZGRzCXg4LCB4OCwgeDE1CisJYWRjcwl4OSwgeDksIHgxMgorCWxkcAl4NCwgeDUsIFtycF0KKwlhZGMJeDE1LCB4MTMsIHh6cgorCUFERFNVQgl4OCwgeDQsIHg4CisJQUREU1VCQwl4OSwgeDUsIHg5CisJY3NpbmMJeDE1LCB4MTUsIHgxNSwgQ09ORAorCXN0cAl4OCwgeDksIFtycF0sIzE2CisKK0woMik6CWxzcgluLCBuLCAjMgorCWNiegluLCBMKGxlMykKKwlsZHAJeDQsIHg1LCBbdXBdLCMzMgorCWxkcAl4NiwgeDcsIFt1cCwjLTE2XQorCWIJTChtaWQpCitMKGxlMyk6CW1vdgl4MCwgeDE1CisJcmV0CisKKwlBTElHTigxNikKK0wodG9wKToJbGRwCXg0LCB4NSwgW3VwXSwjMzIKKwlsZHAJeDYsIHg3LCBbdXAsIy0xNl0KKwlBRERTVUIJeDgsIHgxNiwgeDgKKwlBRERTVUJDCXg5LCB4MTcsIHg5CisJc3RwCXg4LCB4OSwgW3JwXSwjMzIKKwlBRERTVUJDCXgxMCwgeDEyLCB4MTAKKwlBRERTVUJDCXgxMSwgeDEzLCB4MTEKKwlzdHAJeDEwLCB4MTEsIFtycCwjLTE2XQorCWNzaW5jCXgxNSwgeDE1LCB4MTUsIENPTkQKK0wobWlkKToJc3ViCW4sIG4sICMxCisJbXVsCXg4LCB4NCwgdjAKKwl1bXVsaAl4MTIsIHg0LCB2MAorCW11bAl4OSwgeDUsIHYwCisJdW11bGgJeDEzLCB4NSwgdjAKKwlhZGRzCXg4LCB4OCwgeDE1CisJbXVsCXgxMCwgeDYsIHYwCisJdW11bGgJeDE0LCB4NiwgdjAKKwlhZGNzCXg5LCB4OSwgeDEyCisJbXVsCXgxMSwgeDcsIHYwCisJdW11bGgJeDE1LCB4NywgdjAKKwlhZGNzCXgxMCwgeDEwLCB4MTMKKwlsZHAJeDE2LCB4MTcsIFtycF0KKwlhZGNzCXgxMSwgeDExLCB4MTQKKwlsZHAJeDEyLCB4MTMsIFtycCwjMTZdCisJYWRjCXgxNSwgeDE1LCB4enIKKwljYm56CW4sIEwodG9wKQorCisJQUREU1VCCXg4LCB4MTYsIHg4CisJQUREU1VCQwl4OSwgeDE3LCB4OQorCUFERFNVQkMJeDEwLCB4MTIsIHgxMAorCUFERFNVQkMJeDExLCB4MTMsIHgxMQorCXN0cAl4OCwgeDksIFtycF0KKwlzdHAJeDEwLCB4MTEsIFtycCwjMTZdCisJY3NpbmMJeDAsIHgxNSwgeDE1LCBDT05ECisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybTY0L2FvcnNvcnJsc2gxX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm02NC9hb3Jzb3JybHNoMV9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjE3YTY3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm02NC9hb3Jzb3JybHNoMV9uLmFzbQpAQCAtMCwwICsxLDQzIEBACitkbmwgIEFSTTY0IG1wbl9hZGRsc2gxX24sIG1wbl9zdWJsc2gxX24sIG1wbl9yc2Jsc2gxX24uCisKK2RubCAgQ29weXJpZ2h0IDIwMTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitkZWZpbmUoTFNILAkJMSkKK2RlZmluZShSU0gsCQk2MykKKworaWZkZWYoYE9QRVJBVElPTl9hZGRsc2gxX24nLGBkZWZpbmUoYERPX2FkZCcpJykKK2lmZGVmKGBPUEVSQVRJT05fc3VibHNoMV9uJyxgZGVmaW5lKGBET19zdWInKScpCitpZmRlZihgT1BFUkFUSU9OX3JzYmxzaDFfbicsYGRlZmluZShgRE9fcnNiJyknKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRsc2gxX24gbXBuX3N1YmxzaDFfbiBtcG5fcnNibHNoMV9uKQorCitpbmNsdWRlX21wbihgYXJtNjQvYW9yc29ycmxzaENfbi5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hcm02NC9hb3Jzb3JybHNoMl9uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtNjQvYW9yc29ycmxzaDJfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUyZDExNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtNjQvYW9yc29ycmxzaDJfbi5hc20KQEAgLTAsMCArMSw0MyBAQAorZG5sICBBUk02NCBtcG5fYWRkbHNoMl9uLCBtcG5fc3VibHNoMl9uLCBtcG5fcnNibHNoMl9uLgorCitkbmwgIENvcHlyaWdodCAyMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworZGVmaW5lKExTSCwJCTIpCitkZWZpbmUoUlNILAkJNjIpCisKK2lmZGVmKGBPUEVSQVRJT05fYWRkbHNoMl9uJyxgZGVmaW5lKGBET19hZGQnKScpCitpZmRlZihgT1BFUkFUSU9OX3N1YmxzaDJfbicsYGRlZmluZShgRE9fc3ViJyknKQoraWZkZWYoYE9QRVJBVElPTl9yc2Jsc2gyX24nLGBkZWZpbmUoYERPX3JzYicpJykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fYWRkbHNoMl9uIG1wbl9zdWJsc2gyX24gbXBuX3JzYmxzaDJfbikKKworaW5jbHVkZV9tcG4oYGFybTY0L2FvcnNvcnJsc2hDX24uYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtNjQvYW9yc29ycmxzaENfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybTY0L2FvcnNvcnJsc2hDX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2OGNhYWQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybTY0L2FvcnNvcnJsc2hDX24uYXNtCkBAIC0wLDAgKzEsMTM5IEBACitkbmwgIEFSTTY0IG1wbl9hZGRsc2hDX24sIG1wbl9zdWJsc2hDX24sIG1wbl9yc2Jsc2hDX24uCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqw7ZybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIKK0MgQ29ydGV4LUE1MwkzLjI1LTMuNzUKK0MgQ29ydGV4LUE1NwkgMi4xOAorQyBYLUdlbmUJIDIuNQorCitjaGFuZ2Vjb20oYmxhaCkKKworZGVmaW5lKGBycCcsIGB4MCcpCitkZWZpbmUoYHVwJywgYHgxJykKK2RlZmluZShgdnAnLCBgeDInKQorZGVmaW5lKGBuJywgIGB4MycpCisKK2lmZGVmKGBET19hZGQnLCBgCisgIGRlZmluZShgQUREU1VCJywJYGFkZHMJJDEsICQyLCAkMycpCisgIGRlZmluZShgQUREU1VCQycsCWBhZGNzCSQxLCAkMiwgJDMnKQorICBkZWZpbmUoYENMUlJDWScsCWBhZGRzCSQxLCB4enIsIHh6cicpCisgIGRlZmluZShgUkVUVkFMJywJYGFkYwl4MCwgJDEsIHh6cicpCisgIGRlZmluZShgZnVuY19uJywJbXBuX2FkZGxzaGAnTFNIYCdfbiknKQoraWZkZWYoYERPX3N1YicsIGAKKyAgZGVmaW5lKGBBRERTVUInLAlgc3VicwkkMSwgJDMsICQyJykKKyAgZGVmaW5lKGBBRERTVUJDJywJYHNiY3MJJDEsICQzLCAkMicpCisgIGRlZmluZShgQ0xSUkNZJywJYHN1YnMJJDEsIHh6ciwgeHpyJykKKyAgZGVmaW5lKGBSRVRWQUwnLAlgY2luYwl4MCwgJDEsIGNjJykKKyAgZGVmaW5lKGBmdW5jX24nLAltcG5fc3VibHNoYCdMU0hgJ19uKScpCitpZmRlZihgRE9fcnNiJywgYAorICBkZWZpbmUoYEFERFNVQicsCWBzdWJzCSQxLCAkMiwgJDMnKQorICBkZWZpbmUoYEFERFNVQkMnLAlgc2JjcwkkMSwgJDIsICQzJykKKyAgZGVmaW5lKGBDTFJSQ1knLAlgc3VicwkkMSwgeHpyLCB4enInKQorICBkZWZpbmUoYFJFVFZBTCcsCWBzYmMJeDAsICQxLCB4enInKQorICBkZWZpbmUoYGZ1bmNfbicsCW1wbl9yc2Jsc2hgJ0xTSGAnX24pJykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKGZ1bmNfbikKKwlsc3IJeDE4LCBuLCAjMgorCXRiegluLCAjMCwgTChieDApCisKK0woYngxKToJbGRyCXg1LCBbdXBdCisJdGJuegluLCAjMSwgTChiMTEpCisKK0woYjAxKToJbGRyCXgxMSwgW3ZwXQorCWNiegl4MTgsIEwoMSkKKwlsZHAJeDgsIHg5LCBbdnAsIzhdCisJbHNsCXgxMywgeDExLCAjTFNICisJQUREU1VCKAl4MTUsIHgxMywgeDUpCisJc3RyCXgxNSwgW3JwXSwjOAorCXN1Ygl1cCwgdXAsICMyNAorCXN1Ygl2cCwgdnAsICM4CisJYglMKG1pZCkKKworTCgxKToJbHNsCXgxMywgeDExLCAjTFNICisJQUREU1VCKAl4MTUsIHgxMywgeDUpCisJc3RyCXgxNSwgW3JwXQorCWxzcgl4MCwgeDExLCBSU0gKKwlSRVRWQUwoCSB4MCwgeDEpCisJcmV0CisKK0woYjExKToJbGRyCXg5LCBbdnBdCisJbGRwCXgxMCwgeDExLCBbdnAsIzhdIQorCWxzbAl4MTMsIHg5LCAjTFNICisJQUREU1VCKAl4MTcsIHgxMywgeDUpCisJc3RyCXgxNywgW3JwXSwjOAorCXN1Ygl1cCwgdXAsICM4CisJY2J6CXgxOCwgTChlbmQpCisJYglMKHRvcCkKKworTChieDApOgl0Ym56CW4sICMxLCBMKGIxMCkKKworTChiMDApOglDTFJSQ1koCXgxMSkKKwlsZHAJeDgsIHg5LCBbdnBdLCMtMTYKKwlzdWIJdXAsIHVwLCAjMzIKKwliCUwobWlkKQorCitMKGIxMCk6CUNMUlJDWSgJeDkpCisJbGRwCXgxMCwgeDExLCBbdnBdCisJc3ViCXVwLCB1cCwgIzE2CisJY2J6CXgxOCwgTChlbmQpCisKKwlBTElHTigxNikKK0wodG9wKToJbGRwCXg0LCB4NSwgW3VwLCMxNl0KKwlleHRyCXgxMiwgeDEwLCB4OSwgI1JTSAorCWxkcAl4OCwgeDksIFt2cCwjMTZdCisJZXh0cgl4MTMsIHgxMSwgeDEwLCAjUlNICisJQUREU1VCQyh4MTQsIHgxMiwgeDQpCisJQUREU1VCQyh4MTUsIHgxMywgeDUpCisJc3RwCXgxNCwgeDE1LCBbcnBdLCMxNgorTChtaWQpOglsZHAJeDQsIHg1LCBbdXAsIzMyXSEKKwlleHRyCXgxMiwgeDgsIHgxMSwgI1JTSAorCWxkcAl4MTAsIHgxMSwgW3ZwLCMzMl0hCisJZXh0cgl4MTMsIHg5LCB4OCwgI1JTSAorCUFERFNVQkMoeDE2LCB4MTIsIHg0KQorCUFERFNVQkMoeDE3LCB4MTMsIHg1KQorCXN0cAl4MTYsIHgxNywgW3JwXSwjMTYKKwlzdWIJeDE4LCB4MTgsICMxCisJY2Juegl4MTgsIEwodG9wKQorCitMKGVuZCk6CWxkcAl4NCwgeDUsIFt1cCwjMTZdCisJZXh0cgl4MTIsIHgxMCwgeDksICNSU0gKKwlleHRyCXgxMywgeDExLCB4MTAsICNSU0gKKwlBRERTVUJDKHgxNCwgeDEyLCB4NCkKKwlBRERTVUJDKHgxNSwgeDEzLCB4NSkKKwlzdHAJeDE0LCB4MTUsIFtycF0KKwlsc3IJeDAsIHgxMSwgUlNICisJUkVUVkFMKAkgeDAsIHgxKQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hcm02NC9iZGl2X2RibTFjLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtNjQvYmRpdl9kYm0xYy5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg5ODRiNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtNjQvYmRpdl9kYm0xYy5hc20KQEAgLTAsMCArMSwxMTEgQEAKK2RubCAgQVJNNjQgbXBuX2JkaXZfZGJtMWMuCisKK2RubCAgQ29weXJpZ2h0IDIwMDgsIDIwMTEsIDIwMTIsIDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIENvcnRleC1BNTMJIDgKK0MgQ29ydGV4LUE1NwkgNworQyBYLUdlbmUJIDQuMjUKKworZGVmaW5lKGBxcCcsCSAgYHgwJykKK2RlZmluZShgdXAnLAkgIGB4MScpCitkZWZpbmUoYG4nLAkgIGB4MicpCitkZWZpbmUoYGJkJywJICBgeDMnKQorZGVmaW5lKGBjeScsCSAgYHg0JykKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMTYpCitQUk9MT0dVRShtcG5fYmRpdl9kYm0xYykKKwlsZHIJeDUsIFt1cF0sICM4CisJYW5kcwl4NiwgbiwgIzMKKwliLmVxCUwoZmkwKQorCWNtcAl4NiwgIzIKKwliLmNjCUwoZmkxKQorCWIuZXEJTChmaTIpCisKK0woZmkzKToJbXVsCXgxMiwgeDUsIGJkCisJdW11bGgJeDEzLCB4NSwgYmQKKwlsZHIJeDUsIFt1cF0sICM4CisJYglMKGxvMykKKworTChmaTApOgltdWwJeDEwLCB4NSwgYmQKKwl1bXVsaAl4MTEsIHg1LCBiZAorCWxkcgl4NSwgW3VwXSwgIzgKKwliCUwobG8wKQorCitMKGZpMSk6CXN1YnMJbiwgbiwgIzEKKwltdWwJeDEyLCB4NSwgYmQKKwl1bXVsaAl4MTMsIHg1LCBiZAorCWIubHMJTCh3ZDEpCisJbGRyCXg1LCBbdXBdLCAjOAorCWIJTChsbzEpCisKK0woZmkyKToJbXVsCXgxMCwgeDUsIGJkCisJdW11bGgJeDExLCB4NSwgYmQKKwlsZHIJeDUsIFt1cF0sICM4CisJYglMKGxvMikKKworTCh0b3ApOglsZHIJeDUsIFt1cF0sICM4CisJc3Vicwl4NCwgeDQsIHgxMAorCXN0cgl4NCwgW3FwXSwgIzgKKwlzYmMJeDQsIHg0LCB4MTEKK0wobG8xKToJbXVsCXgxMCwgeDUsIGJkCisJdW11bGgJeDExLCB4NSwgYmQKKwlsZHIJeDUsIFt1cF0sICM4CisJc3Vicwl4NCwgeDQsIHgxMgorCXN0cgl4NCwgW3FwXSwgIzgKKwlzYmMJeDQsIHg0LCB4MTMKK0wobG8wKToJbXVsCXgxMiwgeDUsIGJkCisJdW11bGgJeDEzLCB4NSwgYmQKKwlsZHIJeDUsIFt1cF0sICM4CisJc3Vicwl4NCwgeDQsIHgxMAorCXN0cgl4NCwgW3FwXSwgIzgKKwlzYmMJeDQsIHg0LCB4MTEKK0wobG8zKToJbXVsCXgxMCwgeDUsIGJkCisJdW11bGgJeDExLCB4NSwgYmQKKwlsZHIJeDUsIFt1cF0sICM4CisJc3Vicwl4NCwgeDQsIHgxMgorCXN0cgl4NCwgW3FwXSwgIzgKKwlzYmMJeDQsIHg0LCB4MTMKK0wobG8yKToJc3VicwluLCBuLCAjNAorCW11bAl4MTIsIHg1LCBiZAorCXVtdWxoCXgxMywgeDUsIGJkCisJYi5oaQlMKHRvcCkKKworTCh3ZDIpOglzdWJzCXg0LCB4NCwgeDEwCisJc3RyCXg0LCBbcXBdLCAjOAorCXNiYwl4NCwgeDQsIHgxMQorTCh3ZDEpOglzdWJzCXg0LCB4NCwgeDEyCisJc3RyCXg0LCBbcXBdCisJc2JjCXgwLCB4NCwgeDEzCisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybTY0L2JkaXZfcV8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtNjQvYmRpdl9xXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMTg5YjgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybTY0L2JkaXZfcV8xLmFzbQpAQCAtMCwwICsxLDEyOCBAQAorZG5sICBBUk02NCBtcG5fYmRpdl9xXzEsIG1wbl9waTFfYmRpdl9xXzEgLS0gSGVuc2VsIGRpdmlzaW9uIGJ5IDEtbGltYiBkaXZpc29yLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTIsIDIwMTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgICAgICAgIGN5Y2xlcy9saW1iCitDICAgICAgICAgICAgICAgbm9ybSAgIHVub3JtCitDIENvcnRleC1BNTMJMTIJMTUKK0MgQ29ydGV4LUE1NwkxMgkxMgorQyBDb3J0ZXgtQTcyCitDIENvcnRleC1BNzMKK0MgWC1HZW5lCTExCTExCisKK0MgVE9ETworQyAgKiBTY2hlZHVsaW5nIG9mIHVtdWxoIGxhdGVyIGluIHRoZSB1bm9ybSBsb29wIGJyaW5ncyBBNTMgdGltZSB0byAxMiBjL2wuCitDICAgIFVuZm9ydHVuYXRlbHksIHRoYXQgcmVxdWlyZXMgc29mdHdhcmUgcGlwZWxpbmluZy4KKworZGVmaW5lKGBycCcsICBgeDAnKQorZGVmaW5lKGB1cCcsICBgeDEnKQorZGVmaW5lKGBuJywgICBgeDInKQorZGVmaW5lKGBkJywgICBgeDMnKQorZGVmaW5lKGBkaScsICBgeDQnKQkJQwlqdXN0IG1wbl9waTFfYmRpdl9xXzEKK2RlZmluZShgY250JywgYHg1JykJCUMJanVzdCBtcG5fcGkxX2JkaXZfcV8xCisKK2RlZmluZShgY3knLCAgYHI3JykKK2RlZmluZShgdG5jJywgYHg4JykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9iZGl2X3FfMSkKKworCXJiaXQJeDYsIGQKKwljbHoJY250LCB4NgorCWxzcglkLCBkLCBjbnQKKworaWZkZWYoYFBJQycsYAorCWFkcnAJeDcsIDpnb3Q6X19nbXBfYmludmVydF9saW1iX3RhYmxlCisJdWJmeAl4NiwgZCwgMSwgNworCWxkcgl4NywgW3g3LCAjOmdvdF9sbzEyOl9fZ21wX2JpbnZlcnRfbGltYl90YWJsZV0KKycsYAorCWFkcnAJeDcsIF9fZ21wX2JpbnZlcnRfbGltYl90YWJsZQorCXViZngJeDYsIGQsIDEsIDcKKwlhZGQJeDcsIHg3LCA6bG8xMjpfX2dtcF9iaW52ZXJ0X2xpbWJfdGFibGUKKycpCisJbGRyYgl3NiwgW3g3LCB4Nl0KKwl1YmZpegl4NywgeDYsIDEsIDgKKwl1bXVsbAl4NiwgdzYsIHc2CisJbXN1Ygl4NiwgeDYsIGQsIHg3CisJbHNsCXg3LCB4NiwgMQorCW11bAl4NiwgeDYsIHg2CisJbXN1Ygl4NiwgeDYsIGQsIHg3CisJbHNsCXg3LCB4NiwgMQorCW11bAl4NiwgeDYsIHg2CisJbXN1YglkaSwgeDYsIGQsIHg3CisKKwliCW1wbl9waTFfYmRpdl9xXzEKK0VQSUxPR1VFKCkKKworUFJPTE9HVUUobXBuX3BpMV9iZGl2X3FfMSkKKwlzdWIJbiwgbiwgIzEKKwlzdWJzCXg2LCB4NiwgeDYJCUMgY2xlYXIgcjYgYW5kIEMgZmxhZworCWxkcgl4OSwgW3VwXSwjOAorCWNiegljbnQsIEwobm9ybSkKKworTCh1bm9ybSk6CisJbHNyCXgxMiwgeDksIGNudAorCWNiegluLCBMKGV1MSkKKwlzdWIJdG5jLCB4enIsIGNudAorCitMKHRwdSk6CWxkcgl4OSwgW3VwXSwjOAorCWxzbAl4NywgeDksIHRuYworCW9ycgl4NywgeDcsIHgxMgorCXNiY3MJeDYsIHg3LCB4NgorCW11bAl4NywgeDYsIGRpCisJc3RyCXg3LCBbcnBdLCM4CisJbHNyCXgxMiwgeDksIGNudAorCXVtdWxoCXg2LCB4NywgZAorCXN1YgluLCBuLCAjMQorCWNibnoJbiwgTCh0cHUpCisKK0woZXUxKToJc2Jjcwl4NiwgeDEyLCB4NgorCW11bAl4NiwgeDYsIGRpCisJc3RyCXg2LCBbcnBdCisJcmV0CisKK0wobm9ybSk6CisJbXVsCXg1LCB4OSwgZGkKKwlzdHIJeDUsIFtycF0sIzgKKwljYnoJbiwgTChlbjEpCisKK0wodHBuKToJbGRyCXg5LCBbdXBdLCM4CisJdW11bGgJeDUsIHg1LCBkCisJc2Jjcwl4NSwgeDksIHg1CisJbXVsCXg1LCB4NSwgZGkKKwlzdHIJeDUsIFtycF0sIzgKKwlzdWIJbiwgbiwgIzEKKwljYm56CW4sIEwodHBuKQorCitMKGVuMSk6CXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hcm02NC9jbmRfYW9yc19uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtNjQvY25kX2FvcnNfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzllNmNkMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtNjQvY25kX2FvcnNfbi5hc20KQEAgLTAsMCArMSwxMjkgQEAKK2RubCAgQVJNNjQgbXBuX2NuZF9hZGRfbiwgbXBuX2NuZF9zdWJfbgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTIsIDIwMTMsIDIwMTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIENvcnRleC1BNTMJMy44Ny00LjM3CitDIENvcnRleC1BNTcJIDEuNzUKK0MgWC1HZW5lCSAyLjAKKworY2hhbmdlY29tKGJsYWgpCisKK2RlZmluZShgY25kJywJYHgwJykKK2RlZmluZShgcnAnLAlgeDEnKQorZGVmaW5lKGB1cCcsCWB4MicpCitkZWZpbmUoYHZwJywJYHgzJykKK2RlZmluZShgbicsCWB4NCcpCisKK2lmZGVmKGBPUEVSQVRJT05fY25kX2FkZF9uJywgYAorICBkZWZpbmUoYEFERFNVQkMnLAlhZGNzKQorICBkZWZpbmUoYENMUkNZJywJYGNtbgl4enIsIHh6cicpCisgIGRlZmluZShgUkVUVkFMJywJYGNzZXQJeDAsIGNzJykKKyAgZGVmaW5lKGBmdW5jJywJbXBuX2NuZF9hZGRfbiknKQoraWZkZWYoYE9QRVJBVElPTl9jbmRfc3ViX24nLCBgCisgIGRlZmluZShgQUREU1VCQycsCXNiY3MpCisgIGRlZmluZShgQ0xSQ1knLAlgY21wCXh6ciwgeHpyJykKKyAgZGVmaW5lKGBSRVRWQUwnLAlgY3NldAl4MCwgY2MnKQorICBkZWZpbmUoYGZ1bmMnLAltcG5fY25kX3N1Yl9uKScpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2NuZF9hZGRfbiBtcG5fY25kX3N1Yl9uKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUoZnVuYykKKwljbXAJY25kLCAjMQorCXNiYwljbmQsIGNuZCwgY25kCisKKwlDTFJDWQorCisJbHNyCXgxOCwgbiwgIzIKKwl0YnoJbiwgIzAsIEwoYngwKQorCitMKGJ4MSk6CWxkcgl4MTMsIFt2cF0KKwlsZHIJeDExLCBbdXBdCisJYmljCXg3LCB4MTMsIGNuZAorCUFERFNVQkMJeDksIHgxMSwgeDcKKwlzdHIJeDksIFtycF0KKwl0Ym56CW4sICMxLCBMKGIxMSkKKworTChiMDEpOgljYnoJeDE4LCBMKHJ0KQorCWxkcAl4MTIsIHgxMywgW3ZwLCM4XQorCWxkcAl4MTAsIHgxMSwgW3VwLCM4XQorCXN1Ygl1cCwgdXAsICM4CisJc3ViCXZwLCB2cCwgIzgKKwlzdWIJcnAsIHJwLCAjMjQKKwliCUwobWlkKQorCitMKGIxMSk6CWxkcAl4MTIsIHgxMywgW3ZwLCM4XSEKKwlsZHAJeDEwLCB4MTEsIFt1cCwjOF0hCisJc3ViCXJwLCBycCwgIzgKKwljYnoJeDE4LCBMKGVuZCkKKwliCUwodG9wKQorCitMKGJ4MCk6CWxkcAl4MTIsIHgxMywgW3ZwXQorCWxkcAl4MTAsIHgxMSwgW3VwXQorCXRibnoJbiwgIzEsIEwoYjEwKQorCitMKGIwMCk6CXN1Ygl1cCwgdXAsICMxNgorCXN1Ygl2cCwgdnAsICMxNgorCXN1YglycCwgcnAsICMzMgorCWIJTChtaWQpCisKK0woYjEwKToJc3ViCXJwLCBycCwgIzE2CisJY2J6CXgxOCwgTChlbmQpCisKKwlBTElHTigxNikKK0wodG9wKToJYmljCXg2LCB4MTIsIGNuZAorCWJpYwl4NywgeDEzLCBjbmQKKwlsZHAJeDEyLCB4MTMsIFt2cCwjMTZdCisJQUREU1VCQwl4OCwgeDEwLCB4NgorCUFERFNVQkMJeDksIHgxMSwgeDcKKwlsZHAJeDEwLCB4MTEsIFt1cCwjMTZdCisJc3RwCXg4LCB4OSwgW3JwLCMxNl0KK0wobWlkKToJYmljCXg2LCB4MTIsIGNuZAorCWJpYwl4NywgeDEzLCBjbmQKKwlsZHAJeDEyLCB4MTMsIFt2cCwjMzJdIQorCUFERFNVQkMJeDgsIHgxMCwgeDYKKwlBRERTVUJDCXg5LCB4MTEsIHg3CisJbGRwCXgxMCwgeDExLCBbdXAsIzMyXSEKKwlzdHAJeDgsIHg5LCBbcnAsIzMyXSEKKwlzdWIJeDE4LCB4MTgsICMxCisJY2Juegl4MTgsIEwodG9wKQorCitMKGVuZCk6CWJpYwl4NiwgeDEyLCBjbmQKKwliaWMJeDcsIHgxMywgY25kCisJQUREU1VCQwl4OCwgeDEwLCB4NgorCUFERFNVQkMJeDksIHgxMSwgeDcKKwlzdHAJeDgsIHg5LCBbcnAsIzE2XQorTChydCk6CVJFVFZBTAorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hcm02NC9jb20uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm02NC9jb20uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYWQyNDkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybTY0L2NvbS5hc20KQEAgLTAsMCArMSw4NCBAQAorZG5sICBBUk02NCBtcG5fY29tLgorCitkbmwgIENvcHlyaWdodCAyMDEzLCAyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBDb3J0ZXgtQTUzCSAyLjI1CitDIENvcnRleC1BNTcJIDEuMjUKK0MgWC1HZW5lCSAxLjc1CisKK2NoYW5nZWNvbShibGFoKQorCitkZWZpbmUoYHJwJywgYHgwJykKK2RlZmluZShgdXAnLCBgeDEnKQorZGVmaW5lKGBuJywgIGB4MicpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fY29tKQorCWNtcAluLCAjMworCWIubGUJTChiYykKKworQyBDb3B5IHVudGlsIHJwIGlzIDEyOC1iaXQgYWxpZ25lZAorCXRieglycCwgIzMsIEwoYWwyKQorCWxkMQl7djIyLjFkfSwgW3VwXSwgIzgKKwlzdWIJbiwgbiwgIzEKKwltdm4JdjIyLjhiLCB2MjIuOGIKKwlzdDEJe3YyMi4xZH0sIFtycF0sICM4CisKK0woYWwyKToJbGQxCXt2MjYuMmR9LCBbdXBdLCAjMTYKKwlzdWJzCW4sIG4sICM2CisJYi5sdAlMKGVuZCkKKworCUFMSUdOKDE2KQorTCh0b3ApOglsZDEJe3YyMi4yZH0sIFt1cF0sICMxNgorCW12bgl2MjYuMTZiLCB2MjYuMTZiCisJc3QxCXt2MjYuMmR9LCBbcnBdLCAjMTYKKwlsZDEJe3YyNi4yZH0sIFt1cF0sICMxNgorCW12bgl2MjIuMTZiLCB2MjIuMTZiCisJc3QxCXt2MjIuMmR9LCBbcnBdLCAjMTYKKwlzdWJzCW4sIG4sICM0CisJYi5nZQlMKHRvcCkKKworTChlbmQpOgltdm4JdjI2LjE2YiwgdjI2LjE2YgorCXN0MQl7djI2LjJkfSwgW3JwXSwgIzE2CisKK0MgQ29weSBsYXN0IDAtMyBsaW1icy4gIE5vdGUgdGhhdCBycCBpcyBhbGlnbmVkIGFmdGVyIGxvb3AsIGJ1dCBub3Qgd2hlbiB3ZQorQyBhcnJpdmUgaGVyZSB2aWEgTChiYykKK0woYmMpOgl0YnoJbiwgIzEsIEwodGwxKQorCWxkMQl7djIyLjJkfSwgW3VwXSwgIzE2CisJbXZuCXYyMi4xNmIsIHYyMi4xNmIKKwlzdDEJe3YyMi4yZH0sIFtycF0sICMxNgorTCh0bDEpOgl0YnoJbiwgIzAsIEwodGwyKQorCWxkMQl7djIyLjFkfSwgW3VwXQorCW12bgl2MjIuOGIsIHYyMi44YgorCXN0MQl7djIyLjFkfSwgW3JwXQorTCh0bDIpOglyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtNjQvY29weWQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm02NC9jb3B5ZC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgwMDFhMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtNjQvY29weWQuYXNtCkBAIC0wLDAgKzEsOTMgQEAKK2RubCAgQVJNNjQgbXBuX2NvcHlkLgorCitkbmwgIENvcHlyaWdodCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBDb3J0ZXgtQTUzCSA/CitDIENvcnRleC1BNTcJID8KKworY2hhbmdlY29tKGJsYWgpCisKK2RlZmluZShgcnAnLCBgeDAnKQorZGVmaW5lKGB1cCcsIGB4MScpCitkZWZpbmUoYG4nLCAgYHgyJykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9jb3B5ZCkKKwlhZGQJcnAsIHJwLCBuLCBsc2wgIzMKKwlhZGQJdXAsIHVwLCBuLCBsc2wgIzMKKworCWNtcAluLCAjMworCWIubGUJTChiYykKKworQyBDb3B5IHVudGlsIHJwIGlzIDEyOC1iaXQgYWxpZ25lZAorCXRieglycCwgIzMsIEwoYWwyKQorCXN1Ygl1cCwgdXAsICM4CisJbGQxCXt2MjIuMWR9LCBbdXBdCisJc3ViCW4sIG4sICMxCisJc3ViCXJwLCBycCwgIzgKKwlzdDEJe3YyMi4xZH0sIFtycF0KKworTChhbDIpOglzdWIJdXAsIHVwLCAjMTYKKwlsZDEJe3YyNi4yZH0sIFt1cF0KKwlzdWIJbiwgbiwgIzYKKwlzdWIJcnAsIHJwLCAjMTYJCQlDIG9mZnNldCBycCBmb3IgbG9vcAorCXRibnoJbiwgIzYzLCBMKGVuZCkKKworCXN1Ygl1cCwgdXAsICMxNgkJCUMgb2Zmc2V0IHVwIGZvciBsb29wCisJbW92CXgxMiwgIy0xNgorCisJQUxJR04oMTYpCitMKHRvcCk6CWxkMQl7djIyLjJkfSwgW3VwXSwgeDEyCisJc3QxCXt2MjYuMmR9LCBbcnBdLCB4MTIKKwlsZDEJe3YyNi4yZH0sIFt1cF0sIHgxMgorCXN0MQl7djIyLjJkfSwgW3JwXSwgeDEyCisJc3ViCW4sIG4sICM0CisJdGJ6CW4sICM2MywgTCh0b3ApCisKKwlhZGQJdXAsIHVwLCAjMTYJCQlDIHVuZG8gdXAgb2Zmc2V0CisKK0woZW5kKToJc3QxCXt2MjYuMmR9LCBbcnBdCisKK0MgQ29weSBsYXN0IDAtMyBsaW1icy4gIE5vdGUgdGhhdCBycCBpcyBhbGlnbmVkIGFmdGVyIGxvb3AsIGJ1dCBub3Qgd2hlbiB3ZQorQyBhcnJpdmUgaGVyZSB2aWEgTChiYykKK0woYmMpOgl0YnoJbiwgIzEsIEwodGwxKQorCXN1Ygl1cCwgdXAsICMxNgorCWxkMQl7djIyLjJkfSwgW3VwXQorCXN1YglycCwgcnAsICMxNgorCXN0MQl7djIyLjJkfSwgW3JwXQorTCh0bDEpOgl0YnoJbiwgIzAsIEwodGwyKQorCXN1Ygl1cCwgdXAsICM4CisJbGQxCXt2MjIuMWR9LCBbdXBdCisJc3ViCXJwLCBycCwgIzgKKwlzdDEJe3YyMi4xZH0sIFtycF0KK0wodGwyKToJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybTY0L2NvcHlpLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtNjQvY29weWkuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmYjkwYzcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybTY0L2NvcHlpLmFzbQpAQCAtMCwwICsxLDc4IEBACitkbmwgIEFSTTY0IG1wbl9jb3B5aS4KKworZG5sICBDb3B5cmlnaHQgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIKK0MgQ29ydGV4LUE1MwkgMgorQyBDb3J0ZXgtQTU3CSAxCitDIFgtR2VuZQkgMS4yNQorCitjaGFuZ2Vjb20oYmxhaCkKKworZGVmaW5lKGBycCcsIGB4MCcpCitkZWZpbmUoYHVwJywgYHgxJykKK2RlZmluZShgbicsICBgeDInKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2NvcHlpKQorCWNtcAluLCAjMworCWIubGUJTChiYykKKworQyBDb3B5IHVudGlsIHJwIGlzIDEyOC1iaXQgYWxpZ25lZAorCXRieglycCwgIzMsIEwoYWwyKQorCWxkMQl7djIyLjFkfSwgW3VwXSwgIzgKKwlzdWIJbiwgbiwgIzEKKwlzdDEJe3YyMi4xZH0sIFtycF0sICM4CisKK0woYWwyKToJbGQxCXt2MjYuMmR9LCBbdXBdLCAjMTYKKwlzdWIJbiwgbiwgIzYKKwl0Ym56CW4sICM2MywgTChlbmQpCisKKwlBTElHTigxNikKK0wodG9wKToJbGQxCXt2MjIuMmR9LCBbdXBdLCAjMTYKKwlzdDEJe3YyNi4yZH0sIFtycF0sICMxNgorCWxkMQl7djI2LjJkfSwgW3VwXSwgIzE2CisJc3QxCXt2MjIuMmR9LCBbcnBdLCAjMTYKKwlzdWIJbiwgbiwgIzQKKwl0YnoJbiwgIzYzLCBMKHRvcCkKKworTChlbmQpOglzdDEJe3YyNi4yZH0sIFtycF0sICMxNgorCitDIENvcHkgbGFzdCAwLTMgbGltYnMuICBOb3RlIHRoYXQgcnAgaXMgYWxpZ25lZCBhZnRlciBsb29wLCBidXQgbm90IHdoZW4gd2UKK0MgYXJyaXZlIGhlcmUgdmlhIEwoYmMpCitMKGJjKToJdGJ6CW4sICMxLCBMKHRsMSkKKwlsZDEJe3YyMi4yZH0sIFt1cF0sICMxNgorCXN0MQl7djIyLjJkfSwgW3JwXSwgIzE2CitMKHRsMSk6CXRiegluLCAjMCwgTCh0bDIpCisJbGQxCXt2MjIuMWR9LCBbdXBdCisJc3QxCXt2MjIuMWR9LCBbcnBdCitMKHRsMik6CXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hcm02NC9jb3JhNTMvY25kX2FvcnNfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybTY0L2NvcmE1My9jbmRfYW9yc19uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjIyN2RhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm02NC9jb3JhNTMvY25kX2FvcnNfbi5hc20KQEAgLTAsMCArMSw5OSBAQAorZG5sICBBUk02NCBtcG5fY25kX2FkZF9uLCBtcG5fY25kX3N1Yl9uCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqw7ZybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAxMiwgMjAxMywgMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIKK0MgQ29ydGV4LUE1MwkzLjUtNAorQyBDb3J0ZXgtQTU3CSAyLjI1CitDIFgtR2VuZQkgMy41CisKK2NoYW5nZWNvbShibGFoKQorCitkZWZpbmUoYGNuZCcsCWB4MCcpCitkZWZpbmUoYHJwJywJYHgxJykKK2RlZmluZShgdXAnLAlgeDInKQorZGVmaW5lKGB2cCcsCWB4MycpCitkZWZpbmUoYG4nLAlgeDQnKQorCitpZmRlZihgT1BFUkFUSU9OX2NuZF9hZGRfbicsIGAKKyAgZGVmaW5lKGBBRERTVUJDJywJYWRjcykKKyAgZGVmaW5lKGBDTFJDWScsCWBjbW4JeHpyLCB4enInKQorICBkZWZpbmUoYFJFVFZBTCcsCWBjc2V0CXgwLCBjcycpCisgIGRlZmluZShgZnVuYycsCW1wbl9jbmRfYWRkX24pJykKK2lmZGVmKGBPUEVSQVRJT05fY25kX3N1Yl9uJywgYAorICBkZWZpbmUoYEFERFNVQkMnLAlzYmNzKQorICBkZWZpbmUoYENMUkNZJywJYGNtcAl4enIsIHh6cicpCisgIGRlZmluZShgUkVUVkFMJywJYGNzZXQJeDAsIGNjJykKKyAgZGVmaW5lKGBmdW5jJywJbXBuX2NuZF9zdWJfbiknKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9jbmRfYWRkX24gbXBuX2NuZF9zdWJfbikKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKGZ1bmMpCisJY21wCWNuZCwgIzEKKwlzYmMJY25kLCBjbmQsIGNuZAorCisJQ0xSQ1kJCQkJQyByZWFsbHkgb25seSBuZWVkZWQgZm9yIG4gPSAwIChtb2QgNCkKKworCXRiegluLCAjMCwgTCgxKQorCWxkcgl4MTAsIFt1cF0sICM4CisJbGRyCXgxMiwgW3ZwXSwgIzgKKwliaWMJeDYsIHgxMiwgY25kCisJQUREU1VCQwl4OCwgeDEwLCB4NgorCXN1YgluLCBuLCAjMQorCXN0cgl4OCwgW3JwXSwgIzgKKwljYnoJbiwgTChydCkKKworTCgxKToJbGRwCXgxMCwgeDExLCBbdXBdLCAjMTYKKwlsZHAJeDEyLCB4MTMsIFt2cF0sICMxNgorCXN1YgluLCBuLCAjMgorCWNiegluLCBMKGVuZCkKKworTCh0b3ApOgliaWMJeDYsIHgxMiwgY25kCisJYmljCXg3LCB4MTMsIGNuZAorCWxkcAl4MTIsIHgxMywgW3ZwXSwgIzE2CisJQUREU1VCQwl4OCwgeDEwLCB4NgorCUFERFNVQkMJeDksIHgxMSwgeDcKKwlsZHAJeDEwLCB4MTEsIFt1cF0sICMxNgorCXN1YgluLCBuLCAjMgorCXN0cAl4OCwgeDksIFtycF0sICMxNgorCWNibnoJbiwgTCh0b3ApCisKK0woZW5kKToJYmljCXg2LCB4MTIsIGNuZAorCWJpYwl4NywgeDEzLCBjbmQKKwlBRERTVUJDCXg4LCB4MTAsIHg2CisJQUREU1VCQwl4OSwgeDExLCB4NworCXN0cAl4OCwgeDksIFtycF0KK0wocnQpOglSRVRWQUwKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtNjQvY29yYTUzL2dtcC1tcGFyYW0uaCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtNjQvY29yYTUzL2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGUyNThkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm02NC9jb3JhNTMvZ21wLW1wYXJhbS5oCkBAIC0wLDAgKzEsMjQyIEBACisvKiBnbXAtbXBhcmFtLmggLS0gQ29tcGlsZXIvbWFjaGluZSBwYXJhbWV0ZXIgaGVhZGVyIGZpbGUgZm9yIGE1My4KKworQ29weXJpZ2h0IDIwMTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNkZWZpbmUgR01QX0xJTUJfQklUUyA2NAorI2RlZmluZSBHTVBfTElNQl9CWVRFUyA4CisKKy8qIDE1MzYgTUh6IENvcnRleC1BNTMgKi8KKy8qIEZGVCB0dW5pbmcgbGltaXQgPSAyMSw1ODMsODAwICovCisvKiBHZW5lcmF0ZWQgYnkgdHVuZXVwLmMsIDIwMTktMTAtMjIsIGdjYyA1LjQgKi8KKworI2RlZmluZSBESVZSRU1fMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgMworI2RlZmluZSBESVZSRU1fMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgNAorI2RlZmluZSBNT0RfMV8xUF9NRVRIT0QgICAgICAgICAgICAgICAgICAgICAgMiAgLyogNC44NCUgZmFzdGVyIHRoYW4gMSAqLworI2RlZmluZSBNT0RfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMworI2RlZmluZSBNT0RfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgNAorI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNworI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNworI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAxMgorI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICAgICAxOAorI2RlZmluZSBQUkVJTlZfTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAyMgorI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBESVZfUVJfMU5fUEkxX01FVEhPRCAgICAgICAgICAgICAgICAgMSAgLyogMzkuMDUlIGZhc3RlciB0aGFuIDIgKi8KKyNkZWZpbmUgRElWX1FSXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgMjEKKyNkZWZpbmUgRElWX1FSXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgMjEKKyNkZWZpbmUgRElWX1FSXzJfUEkyX1RIUkVTSE9MRCAgICAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWRVhBQ1RfMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBCTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgICAgICAzOAorCisjZGVmaW5lIERJVl8xX1ZTX01VTF8xX1BFUkNFTlQgICAgICAgICAgICAgMTYxCisKKyNkZWZpbmUgTVVMX1RPT00yMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgTVVMX1RPT00zM19USFJFU0hPTEQgICAgICAgICAgICAgICAgNDkKKyNkZWZpbmUgTVVMX1RPT000NF9USFJFU0hPTEQgICAgICAgICAgICAgICAgNzMKKyNkZWZpbmUgTVVMX1RPT002SF9USFJFU0hPTEQgICAgICAgICAgICAgICAxNzMKKyNkZWZpbmUgTVVMX1RPT004SF9USFJFU0hPTEQgICAgICAgICAgICAgICAyMzYKKworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT000M19USFJFU0hPTEQgICAgICA4MQorI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT001M19USFJFU0hPTEQgICAgICA3NworI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT001M19USFJFU0hPTEQgICAgICA4MQorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT002M19USFJFU0hPTEQgICAgICA4OAorI2RlZmluZSBNVUxfVE9PTTQzX1RPX1RPT001NF9USFJFU0hPTEQgICAgICA2NQorCisjZGVmaW5lIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNjgKKyNkZWZpbmUgU1FSX1RPT000X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxODMKKyNkZWZpbmUgU1FSX1RPT002X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyMzAKKyNkZWZpbmUgU1FSX1RPT004X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzNTcKKworI2RlZmluZSBNVUxNSURfVE9PTTQyX1RIUkVTSE9MRCAgICAgICAgICAgICAyMworCisjZGVmaW5lIE1VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA5CisjZGVmaW5lIFNRUk1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDExCisKKyNkZWZpbmUgTVVMX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICAzMTYgIC8qIGsgPSA1ICovCisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICAzMTYsIDV9LCB7ICAgICAxMywgNn0sIHsgICAgICA3LCA1fSwgeyAgICAgMTUsIDZ9LCBcCisgICAgeyAgICAgMTMsIDd9LCB7ICAgICAgNywgNn0sIHsgICAgIDE1LCA3fSwgeyAgICAgIDgsIDZ9LCBcCisgICAgeyAgICAgMTcsIDd9LCB7ICAgICAgOSwgNn0sIHsgICAgIDE5LCA3fSwgeyAgICAgMTcsIDh9LCBcCisgICAgeyAgICAgIDksIDd9LCB7ICAgICAyMCwgOH0sIHsgICAgIDExLCA3fSwgeyAgICAgMjMsIDh9LCBcCisgICAgeyAgICAgMTMsIDl9LCB7ICAgICAgNywgOH0sIHsgICAgIDE5LCA5fSwgeyAgICAgMTEsIDh9LCBcCisgICAgeyAgICAgMjcsIDl9LCB7ICAgICAxNSwgOH0sIHsgICAgIDMzLCA5fSwgeyAgICAgMTksIDh9LCBcCisgICAgeyAgICAgNDEsIDl9LCB7ICAgICAyMywgOH0sIHsgICAgIDQ5LCA5fSwgeyAgICAgMjcsMTB9LCBcCisgICAgeyAgICAgMTUsIDl9LCB7ICAgICAzOSwxMH0sIHsgICAgIDIzLCA5fSwgeyAgICAgNTEsMTF9LCBcCisgICAgeyAgICAgMTUsMTB9LCB7ICAgICAzMSwgOX0sIHsgICAgIDcxLDEwfSwgeyAgICAgMzksIDl9LCBcCisgICAgeyAgICAgODMsMTB9LCB7ICAgICA0NywgOX0sIHsgICAgIDk5LDEwfSwgeyAgICAgNTUsMTF9LCBcCisgICAgeyAgICAgMzEsMTB9LCB7ICAgICA2MywgOH0sIHsgICAgMjU1LDEwfSwgeyAgICAgNzEsIDh9LCBcCisgICAgeyAgICAyODcsMTB9LCB7ICAgICA3OSwgOX0sIHsgICAgMTU5LCA4fSwgeyAgICAzMTksMTB9LCBcCisgICAgeyAgICAgODcsMTF9LCB7ICAgICA0NywxMH0sIHsgICAgIDk1LCA5fSwgeyAgICAxOTEsIDh9LCBcCisgICAgeyAgICAzODMsMTB9LCB7ICAgIDEwMywgOX0sIHsgICAgMjA3LCA4fSwgeyAgICA0MTUsMTB9LCBcCisgICAgeyAgICAxMTEsIDl9LCB7ICAgIDIyMywxMn0sIHsgICAgIDMxLDExfSwgeyAgICAgNjMsIDl9LCBcCisgICAgeyAgICAyNTUsIDh9LCB7ICAgIDUxMSwxMH0sIHsgICAgMTM1LCA5fSwgeyAgICAyODcsIDh9LCBcCisgICAgeyAgICA1NzUsMTF9LCB7ICAgICA3OSwxMH0sIHsgICAgMTU5LCA5fSwgeyAgICAzMTksIDh9LCBcCisgICAgeyAgICA2MzksMTB9LCB7ICAgIDE3NSwgOX0sIHsgICAgMzUxLCA4fSwgeyAgICA3MDMsMTF9LCBcCisgICAgeyAgICAgOTUsMTB9LCB7ICAgIDE5MSwgOX0sIHsgICAgMzgzLCA4fSwgeyAgICA3NjcsMTB9LCBcCisgICAgeyAgICAyMDcsIDl9LCB7ICAgIDQxNSwgOH0sIHsgICAgODMxLDEwfSwgeyAgICAyMjMsIDl9LCBcCisgICAgeyAgICA0NDcsMTJ9LCB7ICAgICA2MywxMH0sIHsgICAgMjU1LCA5fSwgeyAgICA1MTEsIDh9LCBcCisgICAgeyAgIDEwMjMsIDl9LCB7ICAgIDU0MywxMH0sIHsgICAgMjg3LCA5fSwgeyAgICA1NzUsIDh9LCBcCisgICAgeyAgIDExNTEsMTF9LCB7ICAgIDE1OSwxMH0sIHsgICAgMzE5LCA5fSwgeyAgICA2MzksMTF9LCBcCisgICAgeyAgICAxNzUsMTB9LCB7ICAgIDM1MSwgOX0sIHsgICAgNzAzLCA4fSwgeyAgIDE0MDcsMTJ9LCBcCisgICAgeyAgICAgOTUsMTF9LCB7ICAgIDE5MSwxMH0sIHsgICAgMzgzLCA5fSwgeyAgICA3NjcsMTF9LCBcCisgICAgeyAgICAyMDcsMTB9LCB7ICAgIDQxNSwgOX0sIHsgICAgODMxLDExfSwgeyAgICAyMjMsMTB9LCBcCisgICAgeyAgICA0NDcsMTN9LCB7ICAgICA2MywxMX0sIHsgICAgMjU1LDEwfSwgeyAgICA1NDMsMTF9LCBcCisgICAgeyAgICAyODcsMTB9LCB7ICAgIDU3NSwgOX0sIHsgICAxMTUxLDEyfSwgeyAgICAxNTksMTF9LCBcCisgICAgeyAgICAzMTksMTB9LCB7ICAgIDYzOSwxMX0sIHsgICAgMzUxLDEwfSwgeyAgICA3MDMsIDl9LCBcCisgICAgeyAgIDE0MDcsIDh9LCB7ICAgMjgxNSwxMn0sIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTB9LCBcCisgICAgeyAgICA3NjcsMTF9LCB7ICAgIDQxNSwxMH0sIHsgICAgODMxLDEyfSwgeyAgICAyMjMsMTF9LCBcCisgICAgeyAgICA0NDcsMTB9LCB7ICAgIDg5NSwxMX0sIHsgICAgNDc5LDEwfSwgeyAgICA5NTksIDl9LCBcCisgICAgeyAgIDE5MTksMTJ9LCB7ICAgIDI1NSwxMX0sIHsgICAgNTExLDEwfSwgeyAgIDEwMjMsMTF9LCBcCisgICAgeyAgICA1NDMsMTB9LCB7ICAgMTA4NywxMn0sIHsgICAgMjg3LDExfSwgeyAgICA1NzUsMTB9LCBcCisgICAgeyAgIDExNTEsMTJ9LCB7ICAgIDMxOSwxMX0sIHsgICAgNjM5LDEyfSwgeyAgICAzNTEsMTF9LCBcCisgICAgeyAgICA3MDMsMTB9LCB7ICAgMTQwNywgOX0sIHsgICAyODE1LDEzfSwgeyAgICAxOTEsMTJ9LCBcCisgICAgeyAgICAzODMsMTF9LCB7ICAgIDc2NywxMn0sIHsgICAgNDE1LDExfSwgeyAgICA4MzEsMTB9LCBcCisgICAgeyAgIDE2NjMsMTJ9LCB7ICAgIDQ0NywxMX0sIHsgICAgODk1LDEwfSwgeyAgIDE3OTEsMTJ9LCBcCisgICAgeyAgICA0NzksMTF9LCB7ICAgIDk1OSwxM30sIHsgICAgMjU1LDEyfSwgeyAgICA1MTEsMTF9LCBcCisgICAgeyAgIDEwMjMsMTJ9LCB7ICAgIDU0MywxMX0sIHsgICAxMDg3LDEyfSwgeyAgICA1NzUsMTF9LCBcCisgICAgeyAgIDExNTEsMTN9LCB7ICAgIDMxOSwxMn0sIHsgICAgNzAzLDExfSwgeyAgIDE0MDcsMTB9LCBcCisgICAgeyAgIDI4MTUsMTN9LCB7ICAgIDM4MywxMn0sIHsgICAgODMxLDExfSwgeyAgIDE2NjMsMTN9LCBcCisgICAgeyAgICA0NDcsMTJ9LCB7ICAgIDg5NSwxMX0sIHsgICAxNzkxLDEyfSwgeyAgICA5NTksMTF9LCBcCisgICAgeyAgIDE5MTksMTR9LCB7ICAgIDI1NSwxM30sIHsgICAgNTExLDEyfSwgeyAgIDEwODcsMTN9LCBcCisgICAgeyAgICA1NzUsMTJ9LCB7ICAgMTE1MSwxM30sIHsgICAgNzAzLDEyfSwgeyAgIDE0MDcsMTF9LCBcCisgICAgeyAgIDI4MTUsMTR9LCB7ICAgIDM4MywxM30sIHsgICAgODMxLDEyfSwgeyAgIDE2NjMsMTN9LCBcCisgICAgeyAgICA4OTUsMTJ9LCB7ICAgMTc5MSwxM30sIHsgICAgOTU5LDEyfSwgeyAgIDE5MTksMTV9LCBcCisgICAgeyAgICAyNTUsMTR9LCB7ICAgIDUxMSwxM30sIHsgICAxMDg3LDEyfSwgeyAgIDIxNzUsMTN9LCBcCisgICAgeyAgIDEyMTUsMTR9LCB7ICAgIDYzOSwxM30sIHsgICAxNDA3LDEyfSwgeyAgIDI4MTUsMTR9LCBcCisgICAgeyAgICA3NjcsMTN9LCB7ICAgMTY2MywxNH0sIHsgICAgODk1LDEzfSwgeyAgIDE5MTksMTJ9LCBcCisgICAgeyAgIDM4MzksMTV9LCB7ICAgIDUxMSwxNH0sIHsgICAxMDIzLDEzfSwgeyAgIDIxNzUsMTR9LCBcCisgICAgeyAgIDExNTEsMTN9LCB7ICAgMjQzMSwxMn0sIHsgICA0ODYzLDE0fSwgeyAgMTYzODQsMTV9LCBcCisgICAgeyAgMzI3NjgsMTZ9LCB7ICA2NTUzNiwxN30sIHsgMTMxMDcyLDE4fSwgeyAyNjIxNDQsMTl9LCBcCisgICAgeyA1MjQyODgsMjB9LCB7MTA0ODU3NiwyMX0sIHsyMDk3MTUyLDIyfSwgezQxOTQzMDQsMjN9LCBcCisgICAgezgzODg2MDgsMjR9IH0KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTNfU0laRSAyMTcKKyNkZWZpbmUgTVVMX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDMyMDAKKworI2RlZmluZSBTUVJfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDI3NiAgLyogayA9IDUgKi8KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDI3NiwgNX0sIHsgICAgIDEzLCA2fSwgeyAgICAgIDcsIDV9LCB7ICAgICAxNSwgNn0sIFwKKyAgICB7ICAgICAxNywgN30sIHsgICAgIDE3LCA4fSwgeyAgICAgIDksIDd9LCB7ICAgICAyMCwgOH0sIFwKKyAgICB7ICAgICAxMSwgN30sIHsgICAgIDIzLCA4fSwgeyAgICAgMTMsIDl9LCB7ICAgICAgNywgOH0sIFwKKyAgICB7ICAgICAxNSwgN30sIHsgICAgIDMxLCA4fSwgeyAgICAgMTksIDl9LCB7ICAgICAxMSwgOH0sIFwKKyAgICB7ICAgICAyNywgOX0sIHsgICAgIDE1LCA4fSwgeyAgICAgMzMsIDl9LCB7ICAgICAxOSwgOH0sIFwKKyAgICB7ICAgICAzOSwgOX0sIHsgICAgIDIzLCA4fSwgeyAgICAgNDcsIDl9LCB7ICAgICAyNywxMH0sIFwKKyAgICB7ICAgICAxNSwgOX0sIHsgICAgIDM5LDEwfSwgeyAgICAgMjMsIDl9LCB7ICAgICA0NywxMX0sIFwKKyAgICB7ICAgICAxNSwxMH0sIHsgICAgIDMxLCA5fSwgeyAgICAgNjcsMTB9LCB7ICAgICAzOSwgOX0sIFwKKyAgICB7ICAgICA3OSwxMH0sIHsgICAgIDQ3LCA5fSwgeyAgICAgOTUsIDh9LCB7ICAgIDE5MSwxMH0sIFwKKyAgICB7ICAgICA1NSwxMX0sIHsgICAgIDMxLDEwfSwgeyAgICAgNjMsIDh9LCB7ICAgIDI1NSwxMH0sIFwKKyAgICB7ICAgICA3MSwgOX0sIHsgICAgMTQzLCA4fSwgeyAgICAyODcsMTB9LCB7ICAgICA3OSwgOX0sIFwKKyAgICB7ICAgIDE1OSwxMX0sIHsgICAgIDQ3LDEwfSwgeyAgICAgOTUsIDl9LCB7ICAgIDE5MSwgOH0sIFwKKyAgICB7ICAgIDM4MywgN30sIHsgICAgNzY3LDEwfSwgeyAgICAxMDMsMTJ9LCB7ICAgICAzMSwxMX0sIFwKKyAgICB7ICAgICA2MywgOX0sIHsgICAgMjU1LCA4fSwgeyAgICA1MTEsIDd9LCB7ICAgMTAyMywxMH0sIFwKKyAgICB7ICAgIDE0MywgOX0sIHsgICAgMjg3LDExfSwgeyAgICAgNzksMTB9LCB7ICAgIDE1OSwgOX0sIFwKKyAgICB7ICAgIDMxOSwgOH0sIHsgICAgNjM5LDEwfSwgeyAgICAxNzUsIDl9LCB7ICAgIDM1MSwgOH0sIFwKKyAgICB7ICAgIDcwMywxMX0sIHsgICAgIDk1LDEwfSwgeyAgICAxOTEsIDl9LCB7ICAgIDM4MywgOH0sIFwKKyAgICB7ICAgIDc2NywxMH0sIHsgICAgMjA3LCA5fSwgeyAgICA0MTUsIDh9LCB7ICAgIDgzMSwxMH0sIFwKKyAgICB7ICAgIDIyMywgOX0sIHsgICAgNDQ3LDEyfSwgeyAgICAgNjMsMTB9LCB7ICAgIDI1NSwgOX0sIFwKKyAgICB7ICAgIDUxMSwgOH0sIHsgICAxMDIzLDExfSwgeyAgICAxNDMsMTB9LCB7ICAgIDI4NywgOX0sIFwKKyAgICB7ICAgIDU3NSwgOH0sIHsgICAxMTUxLDExfSwgeyAgICAxNTksMTB9LCB7ICAgIDMxOSwgOX0sIFwKKyAgICB7ICAgIDYzOSwxMX0sIHsgICAgMTc1LDEwfSwgeyAgICAzNTEsIDl9LCB7ICAgIDcwMywxMn0sIFwKKyAgICB7ICAgICA5NSwxMX0sIHsgICAgMTkxLDEwfSwgeyAgICAzODMsIDl9LCB7ICAgIDc2NywxMX0sIFwKKyAgICB7ICAgIDIwNywxMH0sIHsgICAgNDE1LCA5fSwgeyAgICA4MzEsMTF9LCB7ICAgIDIyMywxMH0sIFwKKyAgICB7ICAgIDQ0NywxM30sIHsgICAgIDYzLDExfSwgeyAgICAyNTUsMTB9LCB7ICAgIDUxMSwgOX0sIFwKKyAgICB7ICAgMTAyMywxMX0sIHsgICAgMjg3LDEwfSwgeyAgICA1NzUsIDl9LCB7ICAgMTE1MSwxMn0sIFwKKyAgICB7ICAgIDE1OSwxMX0sIHsgICAgMzE5LDEwfSwgeyAgICA2MzksMTF9LCB7ICAgIDM1MSwxMH0sIFwKKyAgICB7ICAgIDcwMywgOX0sIHsgICAxNDA3LDEyfSwgeyAgICAxOTEsMTF9LCB7ICAgIDM4MywxMH0sIFwKKyAgICB7ICAgIDc2NywxMX0sIHsgICAgNDE1LDEwfSwgeyAgICA4MzEsMTJ9LCB7ICAgIDIyMywxMX0sIFwKKyAgICB7ICAgIDQ0NywxMH0sIHsgICAgODk1LDExfSwgeyAgICA0NzksMTB9LCB7ICAgIDk1OSwxMn0sIFwKKyAgICB7ICAgIDI1NSwxMX0sIHsgICAgNTExLDEwfSwgeyAgIDEwMjMsMTJ9LCB7ICAgIDI4NywxMX0sIFwKKyAgICB7ICAgIDU3NSwxMH0sIHsgICAxMTUxLDEyfSwgeyAgICAzMTksMTF9LCB7ICAgIDYzOSwxMn0sIFwKKyAgICB7ICAgIDM1MSwxMX0sIHsgICAgNzAzLDEwfSwgeyAgIDE0MDcsMTN9LCB7ICAgIDE5MSwxMn0sIFwKKyAgICB7ICAgIDM4MywxMX0sIHsgICAgNzY3LDEyfSwgeyAgICA0MTUsMTF9LCB7ICAgIDgzMSwxMH0sIFwKKyAgICB7ICAgMTY2MywxMn0sIHsgICAgNDQ3LDExfSwgeyAgICA4OTUsMTJ9LCB7ICAgIDQ3OSwxMX0sIFwKKyAgICB7ICAgIDk1OSwxMH0sIHsgICAxOTE5LDEzfSwgeyAgICAyNTUsMTJ9LCB7ICAgIDUxMSwxMX0sIFwKKyAgICB7ICAgMTAyMywxMn0sIHsgICAgNTQzLDExfSwgeyAgIDEwODcsMTJ9LCB7ICAgIDU3NSwxMX0sIFwKKyAgICB7ICAgMTE1MSwxM30sIHsgICAgMzE5LDEyfSwgeyAgICA3MDMsMTF9LCB7ICAgMTQwNywxMH0sIFwKKyAgICB7ICAgMjgxNSwxM30sIHsgICAgMzgzLDEyfSwgeyAgICA4MzEsMTF9LCB7ICAgMTY2MywxM30sIFwKKyAgICB7ICAgIDQ0NywxMn0sIHsgICAgODk1LDExfSwgeyAgIDE3OTEsMTJ9LCB7ICAgIDk1OSwxNH0sIFwKKyAgICB7ICAgIDI1NSwxM30sIHsgICAgNTExLDEyfSwgeyAgIDEwODcsMTN9LCB7ICAgIDU3NSwxMn0sIFwKKyAgICB7ICAgMTE1MSwxM30sIHsgICAgNzAzLDEyfSwgeyAgIDE0MDcsMTF9LCB7ICAgMjgxNSwxNH0sIFwKKyAgICB7ICAgIDM4MywxM30sIHsgICAgODMxLDEyfSwgeyAgIDE2NjMsMTN9LCB7ICAgIDg5NSwxMn0sIFwKKyAgICB7ICAgMTc5MSwxM30sIHsgICAgOTU5LDEyfSwgeyAgIDE5MTksMTV9LCB7ICAgIDI1NSwxNH0sIFwKKyAgICB7ICAgIDUxMSwxM30sIHsgICAxMDg3LDEyfSwgeyAgIDIxNzUsMTN9LCB7ICAgMTE1MSwxNH0sIFwKKyAgICB7ICAgIDYzOSwxM30sIHsgICAxNDA3LDEyfSwgeyAgIDI4MTUsMTR9LCB7ICAgIDc2NywxM30sIFwKKyAgICB7ICAgMTY2MywxNH0sIHsgICAgODk1LDEzfSwgeyAgIDE5MTksMTJ9LCB7ICAgMzgzOSwxNX0sIFwKKyAgICB7ICAgIDUxMSwxNH0sIHsgICAxMDIzLDEzfSwgeyAgIDIxNzUsMTR9LCB7ICAgMTE1MSwxM30sIFwKKyAgICB7ICAgMjQzMSwxMn0sIHsgICA0ODYzLDE0fSwgeyAgMTYzODQsMTV9LCB7ICAzMjc2OCwxNn0sIFwKKyAgICB7ICA2NTUzNiwxN30sIHsgMTMxMDcyLDE4fSwgeyAyNjIxNDQsMTl9LCB7IDUyNDI4OCwyMH0sIFwKKyAgICB7MTA0ODU3NiwyMX0sIHsyMDk3MTUyLDIyfSwgezQxOTQzMDQsMjN9LCB7ODM4ODYwOCwyNH0gfQorI2RlZmluZSBTUVJfRkZUX1RBQkxFM19TSVpFIDIwNAorI2RlZmluZSBTUVJfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMjY4OAorCisjZGVmaW5lIE1VTExPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTVVMTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgMzgKKyNkZWZpbmUgTVVMTE9fTVVMX05fVEhSRVNIT0xEICAgICAgICAgICAgIDYyNTMKKyNkZWZpbmUgU1FSTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDQKKyNkZWZpbmUgU1FSTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgNjcKKyNkZWZpbmUgU1FSTE9fU1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDUyNDAKKworI2RlZmluZSBEQ19ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA0MworI2RlZmluZSBEQ19ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgIDE1NQorI2RlZmluZSBEQ19CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzOQorI2RlZmluZSBEQ19CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA4OQorCisjZGVmaW5lIElOVl9NVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgIDM0CisjZGVmaW5lIElOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAgMTYzCisjZGVmaW5lIElOVl9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTYxCisKKyNkZWZpbmUgQklOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAxOTYKKyNkZWZpbmUgUkVEQ18xX1RPX1JFRENfTl9USFJFU0hPTEQgICAgICAgICAgNDMKKworI2RlZmluZSBNVV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDk5OAorI2RlZmluZSBNVV9ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgIDk5OAorI2RlZmluZSBNVVBJX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICA5MQorI2RlZmluZSBNVV9CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDgwNworI2RlZmluZSBNVV9CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDkyNAorCisjZGVmaW5lIFBPV01fU0VDX1RBQkxFICA2LDMwLDEyNSw1NzksMTczMAorCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgIDMwCisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgODAyCisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAxODE1CisKKyNkZWZpbmUgRkFDX0RTQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAyNTgKKyNkZWZpbmUgRkFDX09ERF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgMjQKKworI2RlZmluZSBNQVRSSVgyMl9TVFJBU1NFTl9USFJFU0hPTEQgICAgICAgICAxMAorI2RlZmluZSBIR0NEMl9ESVYxX01FVEhPRCAgICAgICAgICAgICAgICAgICAgMSAgLyogNy4wNSUgZmFzdGVyIHRoYW4gMyAqLworI2RlZmluZSBIR0NEX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgIDEwNworI2RlZmluZSBIR0NEX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDExMgorI2RlZmluZSBIR0NEX1JFRFVDRV9USFJFU0hPTEQgICAgICAgICAgICAgMTY3OQorI2RlZmluZSBHQ0RfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDMyNAorI2RlZmluZSBHQ0RFWFRfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDI0MgorI2RlZmluZSBKQUNPQklfQkFTRV9NRVRIT0QgICAgICAgICAgICAgICAgICAgNCAgLyogMjIuNDElIGZhc3RlciB0aGFuIDEgKi8KKworLyogVHVuZXVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIHRvb2sgNjY2MjQgc2Vjb25kcyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hcm02NC9jb3JhNTcvZ21wLW1wYXJhbS5oIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm02NC9jb3JhNTcvZ21wLW1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMzg2MjEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybTY0L2NvcmE1Ny9nbXAtbXBhcmFtLmgKQEAgLTAsMCArMSwxODcgQEAKKy8qIGdtcC1tcGFyYW0uaCAtLSBDb21waWxlci9tYWNoaW5lIHBhcmFtZXRlciBoZWFkZXIgZmlsZSBmb3IgYTU3LCBhNzItYTc1LgorCitDb3B5cmlnaHQgMjAxOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2RlZmluZSBHTVBfTElNQl9CSVRTIDY0CisjZGVmaW5lIEdNUF9MSU1CX0JZVEVTIDgKKworLyogMTgwMCBNSHogQ29ydGV4LUE3MiAqLworLyogRkZUIHR1bmluZyBsaW1pdCA9IDAuNSBNICovCisvKiBHZW5lcmF0ZWQgYnkgdHVuZXVwLmMsIDIwMTktMTAtMDIsIGdjYyA3LjQgKi8KKworI2RlZmluZSBESVZSRU1fMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgMworI2RlZmluZSBESVZSRU1fMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgNAorI2RlZmluZSBNT0RfMV8xUF9NRVRIT0QgICAgICAgICAgICAgICAgICAgICAgMSAgLyogMi4yMSUgZmFzdGVyIHRoYW4gMiAqLworI2RlZmluZSBNT0RfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMworI2RlZmluZSBNT0RfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgNAorI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNgorI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNAorI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAgOAorI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICAgICA0MgorI2RlZmluZSBQUkVJTlZfTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAxNQorI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBESVZfUVJfMU5fUEkxX01FVEhPRCAgICAgICAgICAgICAgICAgMSAgLyogMzQuOTUlIGZhc3RlciB0aGFuIDIgKi8KKyNkZWZpbmUgRElWX1FSXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRElWX1FSXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgIDUKKyNkZWZpbmUgRElWX1FSXzJfUEkyX1RIUkVTSE9MRCAgICAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWRVhBQ1RfMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBCTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgICAgICAzMworCisjZGVmaW5lIERJVl8xX1ZTX01VTF8xX1BFUkNFTlQgICAgICAgICAgICAgMTY4CisKKyNkZWZpbmUgTVVMX1RPT00yMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgTVVMX1RPT00zM19USFJFU0hPTEQgICAgICAgICAgICAgICAgNDEKKyNkZWZpbmUgTVVMX1RPT000NF9USFJFU0hPTEQgICAgICAgICAgICAgICAgOTkKKyNkZWZpbmUgTVVMX1RPT002SF9USFJFU0hPTEQgICAgICAgICAgICAgICAxNDIKKyNkZWZpbmUgTVVMX1RPT004SF9USFJFU0hPTEQgICAgICAgICAgICAgICAxOTkKKworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT000M19USFJFU0hPTEQgICAgICA2NQorI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT001M19USFJFU0hPTEQgICAgICA2OQorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT001M19USFJFU0hPTEQgICAgICA2MworI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT002M19USFJFU0hPTEQgICAgICA2NgorI2RlZmluZSBNVUxfVE9PTTQzX1RPX1RPT001NF9USFJFU0hPTEQgICAgICA1NQorCisjZGVmaW5lIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNjUKKyNkZWZpbmUgU1FSX1RPT000X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNjYKKyNkZWZpbmUgU1FSX1RPT002X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyMjIKKyNkZWZpbmUgU1FSX1RPT004X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzMDkKKworI2RlZmluZSBNVUxNSURfVE9PTTQyX1RIUkVTSE9MRCAgICAgICAgICAgICAyMgorCisjZGVmaW5lIE1VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA3CisjZGVmaW5lIFNRUk1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDEyCisKKyNkZWZpbmUgTVVMX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICAyNzYgIC8qIGsgPSA1ICovCisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICAyNzYsIDV9LCB7ICAgICAxMywgNn0sIHsgICAgICA3LCA1fSwgeyAgICAgMTUsIDZ9LCBcCisgICAgeyAgICAgMTMsIDd9LCB7ICAgICAgNywgNn0sIHsgICAgIDE1LCA3fSwgeyAgICAgIDgsIDZ9LCBcCisgICAgeyAgICAgMTcsIDd9LCB7ICAgICAgOSwgNn0sIHsgICAgIDE5LCA3fSwgeyAgICAgMTMsIDh9LCBcCisgICAgeyAgICAgIDcsIDd9LCB7ICAgICAxNywgOH0sIHsgICAgICA5LCA3fSwgeyAgICAgMjAsIDh9LCBcCisgICAgeyAgICAgMTEsIDd9LCB7ICAgICAyMywgOH0sIHsgICAgIDEzLCA5fSwgeyAgICAgIDcsIDh9LCBcCisgICAgeyAgICAgMjEsIDl9LCB7ICAgICAxMSwgOH0sIHsgICAgIDI1LDEwfSwgeyAgICAgIDcsIDl9LCBcCisgICAgeyAgICAgMTUsIDh9LCB7ICAgICAzMywgOX0sIHsgICAgIDE5LCA4fSwgeyAgICAgMzksIDl9LCBcCisgICAgeyAgICAgMjMsIDh9LCB7ICAgICA0OSwgOX0sIHsgICAgIDI3LDEwfSwgeyAgICAgMTUsIDl9LCBcCisgICAgeyAgICAgMzksMTB9LCB7ICAgICAyMywgOX0sIHsgICAgIDUxLDExfSwgeyAgICAgMTUsMTB9LCBcCisgICAgeyAgICAgMzEsIDl9LCB7ICAgICA2NywxMH0sIHsgICAgIDM5LCA5fSwgeyAgICAgNzksMTB9LCBcCisgICAgeyAgICAgNDcsIDl9LCB7ICAgICA5OSwxMH0sIHsgICAgIDU1LDExfSwgeyAgICAgMzEsMTB9LCBcCisgICAgeyAgICAgNjMsIDh9LCB7ICAgIDI1NSwxMH0sIHsgICAgIDcxLCA5fSwgeyAgICAxNDMsIDh9LCBcCisgICAgeyAgICAyODcsMTB9LCB7ICAgICA3OSwgOX0sIHsgICAgMTU5LCA4fSwgeyAgICAzMTksMTF9LCBcCisgICAgeyAgICAgNDcsMTB9LCB7ICAgICA5NSwgOX0sIHsgICAgMTkxLDEwfSwgeyAgICAxMDMsMTJ9LCBcCisgICAgeyAgICAgMzEsMTF9LCB7ICAgICA2MywgOX0sIHsgICAgMjU1LCA4fSwgeyAgICA1MTEsMTB9LCBcCisgICAgeyAgICAxNDMsIDh9LCB7ICAgIDU3NSwxMX0sIHsgICAgIDc5LDEwfSwgeyAgICAxNTksIDl9LCBcCisgICAgeyAgICAzMTksMTB9LCB7ICAgIDE3NSwgOX0sIHsgICAgMzUxLCA4fSwgeyAgICA3MDMsMTF9LCBcCisgICAgeyAgICAgOTUsMTB9LCB7ICAgIDE5MSwgOX0sIHsgICAgMzgzLDEwfSwgeyAgICAyMDcsIDl9LCBcCisgICAgeyAgICA0MTUsMTB9LCB7ICAgIDIyMywgOX0sIHsgICAgNDQ3LCA4fSwgeyAgICA4OTUsMTJ9LCBcCisgICAgeyAgICAgNjMsMTB9LCB7ICAgIDI1NSwgOX0sIHsgICAgNTExLCA4fSwgeyAgIDEwMjMsIDl9LCBcCisgICAgeyAgICA1NDMsMTF9LCB7ICAgIDE0MywxMH0sIHsgICAgMjg3LCA5fSwgeyAgICA1NzUsIDh9LCBcCisgICAgeyAgIDExNTEsMTB9LCB7ICAgIDMxOSwgOX0sIHsgICAgNjM5LDExfSwgeyAgICAxNzUsMTB9LCBcCisgICAgeyAgICAzNTEsIDl9LCB7ICAgIDcwMywxMn0sIHsgICAgIDk1LDEwfSwgeyAgICAzODMsIDl9LCBcCisgICAgeyAgICA3NjcsMTF9LCB7ICAgIDIwNywgOX0sIHsgICAgODMxLDExfSwgeyAgICAyMjMsMTB9LCBcCisgICAgeyAgICA0NDcsIDl9LCB7ICAgIDg5NSwxM30sIHsgICA4MTkyLDE0fSwgeyAgMTYzODQsMTV9LCBcCisgICAgeyAgMzI3NjgsMTZ9LCB7ICA2NTUzNiwxN30sIHsgMTMxMDcyLDE4fSwgeyAyNjIxNDQsMTl9LCBcCisgICAgeyA1MjQyODgsMjB9LCB7MTA0ODU3NiwyMX0sIHsyMDk3MTUyLDIyfSwgezQxOTQzMDQsMjN9LCBcCisgICAgezgzODg2MDgsMjR9IH0KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTNfU0laRSAxMDkKKyNkZWZpbmUgTVVMX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDMyMDAKKworI2RlZmluZSBTUVJfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDI0NCAgLyogayA9IDUgKi8KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDI0NCwgNX0sIHsgICAgIDEzLCA2fSwgeyAgICAgIDcsIDV9LCB7ICAgICAxNSwgNn0sIFwKKyAgICB7ICAgICAgOCwgNX0sIHsgICAgIDE3LCA2fSwgeyAgICAgMTcsIDd9LCB7ICAgICAgOSwgNn0sIFwKKyAgICB7ICAgICAxOSwgN30sIHsgICAgIDE3LCA4fSwgeyAgICAgIDksIDd9LCB7ICAgICAyMCwgOH0sIFwKKyAgICB7ICAgICAxMSwgN30sIHsgICAgIDIzLCA4fSwgeyAgICAgMTMsIDl9LCB7ICAgICAgNywgOH0sIFwKKyAgICB7ICAgICAxOSwgOX0sIHsgICAgIDExLCA4fSwgeyAgICAgMjUsMTB9LCB7ICAgICAgNywgOX0sIFwKKyAgICB7ICAgICAxNSwgOH0sIHsgICAgIDMzLCA5fSwgeyAgICAgMTksIDh9LCB7ICAgICAzOSwgOX0sIFwKKyAgICB7ICAgICAyNywxMH0sIHsgICAgIDE1LCA5fSwgeyAgICAgMzksMTB9LCB7ICAgICAyMywgOX0sIFwKKyAgICB7ICAgICA0NywxMX0sIHsgICAgIDE1LDEwfSwgeyAgICAgMzEsIDl9LCB7ICAgICA2NywxMH0sIFwKKyAgICB7ICAgICAzOSwgOX0sIHsgICAgIDc5LDEwfSwgeyAgICAgNDcsIDl9LCB7ICAgICA5OSwxMH0sIFwKKyAgICB7ICAgICA1NSwxMX0sIHsgICAgIDMxLDEwfSwgeyAgICAgNjMsIDl9LCB7ICAgIDEyNywgOH0sIFwKKyAgICB7ICAgIDI1NSwxMH0sIHsgICAgIDcxLCA4fSwgeyAgICAyODcsIDd9LCB7ICAgIDU3NSwgOX0sIFwKKyAgICB7ICAgIDE1OSwgOH0sIHsgICAgMzE5LDExfSwgeyAgICAgNDcsMTB9LCB7ICAgICA5NSwgOX0sIFwKKyAgICB7ICAgIDE5MSwgOH0sIHsgICAgMzgzLDEyfSwgeyAgICAgMzEsMTF9LCB7ICAgICA2MywxMH0sIFwKKyAgICB7ICAgIDEyNywgOX0sIHsgICAgMjU1LDEwfSwgeyAgICAxNDMsIDl9LCB7ICAgIDI4NywgOH0sIFwKKyAgICB7ICAgIDU3NSwxMX0sIHsgICAgIDc5LDEwfSwgeyAgICAxNTksIDl9LCB7ICAgIDMxOSwgOH0sIFwKKyAgICB7ICAgIDYzOSwgOX0sIHsgICAgMzUxLDEwfSwgeyAgICAxOTEsIDl9LCB7ICAgIDM4MywxMH0sIFwKKyAgICB7ICAgIDIwNywgOX0sIHsgICAgNDE1LDEwfSwgeyAgICAyMzksMTJ9LCB7ICAgICA2MywxMH0sIFwKKyAgICB7ICAgIDI1NSwgOX0sIHsgICAgNTExLDEwfSwgeyAgICAyNzEsMTF9LCB7ICAgIDE0MywxMH0sIFwKKyAgICB7ICAgIDI4NywgOX0sIHsgICAgNTc1LDExfSwgeyAgICAxNTksMTB9LCB7ICAgIDMxOSwgOX0sIFwKKyAgICB7ICAgIDYzOSwxMH0sIHsgICAgMzUxLCA5fSwgeyAgICA3MDMsMTF9LCB7ICAgIDE5MSwxMH0sIFwKKyAgICB7ICAgIDM4MywgOX0sIHsgICAgNzY3LDExfSwgeyAgICAyMDcsMTB9LCB7ICAgIDQxNSwgOX0sIFwKKyAgICB7ICAgIDgzMSwxMX0sIHsgICAgMjIzLDEzfSwgeyAgIDgxOTIsMTR9LCB7ICAxNjM4NCwxNX0sIFwKKyAgICB7ICAzMjc2OCwxNn0sIHsgIDY1NTM2LDE3fSwgeyAxMzEwNzIsMTh9LCB7IDI2MjE0NCwxOX0sIFwKKyAgICB7IDUyNDI4OCwyMH0sIHsxMDQ4NTc2LDIxfSwgezIwOTcxNTIsMjJ9LCB7NDE5NDMwNCwyM30sIFwKKyAgICB7ODM4ODYwOCwyNH0gfQorI2RlZmluZSBTUVJfRkZUX1RBQkxFM19TSVpFIDk3CisjZGVmaW5lIFNRUl9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAyNDk2CisKKyNkZWZpbmUgTVVMTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNVUxMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAzOQorI2RlZmluZSBNVUxMT19NVUxfTl9USFJFU0hPTEQgICAgICAgICAgICAgNjI1MworI2RlZmluZSBTUVJMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgNAorI2RlZmluZSBTUVJMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICA1NgorI2RlZmluZSBTUVJMT19TUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgNDk0MAorCisjZGVmaW5lIERDX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDQxCisjZGVmaW5lIERDX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAgMTM2CisjZGVmaW5lIERDX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDM5CisjZGVmaW5lIERDX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDg5CisKKyNkZWZpbmUgSU5WX01VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgMjIKKyNkZWZpbmUgSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgICAxNTQKKyNkZWZpbmUgSU5WX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAxNDEKKworI2RlZmluZSBCSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgIDE4MgorI2RlZmluZSBSRURDXzFfVE9fUkVEQ19OX1RIUkVTSE9MRCAgICAgICAgICAzOQorCisjZGVmaW5lIE1VX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgOTc5CisjZGVmaW5lIE1VX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAxMDc4CisjZGVmaW5lIE1VUElfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDc1CisjZGVmaW5lIE1VX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgODcyCisjZGVmaW5lIE1VX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAgOTQyCisKKyNkZWZpbmUgUE9XTV9TRUNfVEFCTEUgIDEsMTksMTE3LDUzOSwxNzMwCisKKyNkZWZpbmUgR0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICAgMjEKKyNkZWZpbmUgU0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICA1NzIKKyNkZWZpbmUgU0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgIDEwMzYKKworI2RlZmluZSBGQUNfRFNDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDE0MgorI2RlZmluZSBGQUNfT0REX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAyMworCisjZGVmaW5lIE1BVFJJWDIyX1NUUkFTU0VOX1RIUkVTSE9MRCAgICAgICAgIDExCisjZGVmaW5lIEhHQ0QyX0RJVjFfTUVUSE9EICAgICAgICAgICAgICAgICAgICAxICAvKiA4LjgzJSBmYXN0ZXIgdGhhbiAzICovCisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAgIDgwCisjZGVmaW5lIEhHQ0RfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDcwCisjZGVmaW5lIEhHQ0RfUkVEVUNFX1RIUkVTSE9MRCAgICAgICAgICAgICAxOTYyCisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgMjczCisjZGVmaW5lIEdDREVYVF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTk4CisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAgICAxICAvKiA3LjQ5JSBmYXN0ZXIgdGhhbiA0ICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybTY0L2NvcmE3Mi9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybTY0L2NvcmE3Mi9nbXAtbXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM2NmZkMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtNjQvY29yYTcyL2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDI0MiBAQAorLyogZ21wLW1wYXJhbS5oIC0tIENvbXBpbGVyL21hY2hpbmUgcGFyYW1ldGVyIGhlYWRlciBmaWxlIGZvciBhNzIuCisKK0NvcHlyaWdodCAyMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgNjQKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgOAorCisvKiAxODAwIE1IeiBDb3J0ZXgtQTcyICovCisvKiBGRlQgdHVuaW5nIGxpbWl0ID0gNTAsODExLDk2MCAqLworLyogR2VuZXJhdGVkIGJ5IHR1bmV1cC5jLCAyMDE5LTEwLTIyLCBnY2MgNy4zICovCisKKyNkZWZpbmUgRElWUkVNXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgIDMKKyNkZWZpbmUgRElWUkVNXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgIDMKKyNkZWZpbmUgTU9EXzFfMVBfTUVUSE9EICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIDEyLjA5JSBmYXN0ZXIgdGhhbiAxICovCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIE1PRF8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICAzCisjZGVmaW5lIE1PRF8xTl9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA4CisjZGVmaW5lIE1PRF8xVV9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA1CisjZGVmaW5lIE1PRF8xXzFfVE9fTU9EXzFfMl9USFJFU0hPTEQgICAgICAgICAwICAvKiBuZXZlciBtcG5fbW9kXzFfMXAgKi8KKyNkZWZpbmUgTU9EXzFfMl9UT19NT0RfMV80X1RIUkVTSE9MRCAgICAgICAgMjYKKyNkZWZpbmUgUFJFSU5WX01PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgMTUKKyNkZWZpbmUgVVNFX1BSRUlOVl9ESVZSRU1fMSAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgRElWX1FSXzFOX1BJMV9NRVRIT0QgICAgICAgICAgICAgICAgIDEgIC8qIDEzLjQyJSBmYXN0ZXIgdGhhbiAyICovCisjZGVmaW5lIERJVl9RUl8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICA0CisjZGVmaW5lIERJVl9RUl8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICA0CisjZGVmaW5lIERJVl9RUl8yX1BJMl9USFJFU0hPTEQgICAgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgICAgICAgMzgKKworI2RlZmluZSBESVZfMV9WU19NVUxfMV9QRVJDRU5UICAgICAgICAgICAgIDE2OAorCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDU3CisjZGVmaW5lIE1VTF9UT09NNDRfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTUzCisjZGVmaW5lIE1VTF9UT09NNkhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjIyCisjZGVmaW5lIE1VTF9UT09NOEhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMzMzCisKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNDNfVEhSRVNIT0xEICAgICAgNTcKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxMDgKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxMDQKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNjNfVEhSRVNIT0xEICAgICAgNTYKKyNkZWZpbmUgTVVMX1RPT000M19UT19UT09NNTRfVEhSRVNIT0xEICAgICAgODIKKworI2RlZmluZSBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgICAgIDczCisjZGVmaW5lIFNRUl9UT09NNF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTU0CisjZGVmaW5lIFNRUl9UT09NNl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjA2CisjZGVmaW5lIFNRUl9UT09NOF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMzMzCisKKyNkZWZpbmUgTVVMTUlEX1RPT000Ml9USFJFU0hPTEQgICAgICAgICAgICAgMTgKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgOAorI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxMAorCisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgMjY4ICAvKiBrID0gNSAqLworI2RlZmluZSBNVUxfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgMjY4LCA1fSwgeyAgICAgMTEsIDZ9LCB7ICAgICAgNiwgNX0sIHsgICAgIDEzLCA2fSwgXAorICAgIHsgICAgIDE1LCA3fSwgeyAgICAgMTMsIDh9LCB7ICAgICAgNywgN30sIHsgICAgIDE2LCA4fSwgXAorICAgIHsgICAgICA5LCA3fSwgeyAgICAgMTksIDh9LCB7ICAgICAxMSwgN30sIHsgICAgIDIzLCA4fSwgXAorICAgIHsgICAgIDEzLCA5fSwgeyAgICAgIDcsIDh9LCB7ICAgICAxNSwgN30sIHsgICAgIDMxLCA4fSwgXAorICAgIHsgICAgIDE5LCA5fSwgeyAgICAgMTEsIDh9LCB7ICAgICAyNywxMH0sIHsgICAgICA3LCA5fSwgXAorICAgIHsgICAgIDE1LCA4fSwgeyAgICAgMzMsIDl9LCB7ICAgICAxOSwgOH0sIHsgICAgIDM5LCA5fSwgXAorICAgIHsgICAgIDI3LDEwfSwgeyAgICAgMTUsIDl9LCB7ICAgICAzOSwxMH0sIHsgICAgIDIzLCA5fSwgXAorICAgIHsgICAgIDUxLDExfSwgeyAgICAgMTUsMTB9LCB7ICAgICAzMSwgOX0sIHsgICAgIDcxLDEwfSwgXAorICAgIHsgICAgIDM5LCA5fSwgeyAgICAgNzksIDh9LCB7ICAgIDE1OSwgN30sIHsgICAgMzE5LCA5fSwgXAorICAgIHsgICAgIDgzLDEwfSwgeyAgICAgNDcsIDl9LCB7ICAgICA5NSwgN30sIHsgICAgMzgzLCA5fSwgXAorICAgIHsgICAgIDk5LDEwfSwgeyAgICAgNTUsMTF9LCB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA4fSwgXAorICAgIHsgICAgMjU1LCA3fSwgeyAgICA1MTEsIDl9LCB7ICAgIDEzMSwxMH0sIHsgICAgIDcxLCA5fSwgXAorICAgIHsgICAgMTQzLCA4fSwgeyAgICAyODcsIDd9LCB7ICAgIDU3NSwgNn0sIHsgICAxMTUxLDEwfSwgXAorICAgIHsgICAgIDc5LCA4fSwgeyAgICAzMTksIDd9LCB7ICAgIDYzOSwxMH0sIHsgICAgIDg3LCA4fSwgXAorICAgIHsgICAgMzUxLDExfSwgeyAgICAgNDcsMTB9LCB7ICAgICA5NSwgOH0sIHsgICAgMzgzLCA3fSwgXAorICAgIHsgICAgNzY3LDEwfSwgeyAgICAxMDMsIDh9LCB7ICAgIDQxNSwgN30sIHsgICAgODMxLCA2fSwgXAorICAgIHsgICAxNjYzLCA5fSwgeyAgICAyMjMsIDh9LCB7ICAgIDQ0NywxMn0sIHsgICAgIDMxLDExfSwgXAorICAgIHsgICAgIDYzLCA5fSwgeyAgICAyNTUsIDh9LCB7ICAgIDUxMSwgN30sIHsgICAxMDIzLCA5fSwgXAorICAgIHsgICAgMjg3LCA4fSwgeyAgICA1NzUsIDd9LCB7ICAgMTE1MSwgNn0sIHsgICAyMzAzLCA3fSwgXAorICAgIHsgICAxMjE1LDExfSwgeyAgICAgNzksIDl9LCB7ICAgIDMxOSwgOH0sIHsgICAgNjM5LCA3fSwgXAorICAgIHsgICAxMjc5LCA5fSwgeyAgICAzNTEsIDh9LCB7ICAgIDcwMywgN30sIHsgICAxNDA3LCA2fSwgXAorICAgIHsgICAyODE1LCA5fSwgeyAgICAzODMsIDh9LCB7ICAgIDgzMSwgN30sIHsgICAxNjYzLCA5fSwgXAorICAgIHsgICAgNDQ3LCA4fSwgeyAgICA4OTUsIDd9LCB7ICAgMTc5MSwgNn0sIHsgICAzNTgzLCA4fSwgXAorICAgIHsgICAgOTU5LCA2fSwgeyAgIDM4MzksIDV9LCB7ICAgNzY3OSwgOX0sIHsgICAgNTExLCA4fSwgXAorICAgIHsgICAxMDIzLCA3fSwgeyAgIDIxNzUsIDl9LCB7ICAgIDU3NSwgOH0sIHsgICAxMTUxLCA3fSwgXAorICAgIHsgICAyMzAzLCA4fSwgeyAgIDEyMTUsMTB9LCB7ICAgIDM1MSwgOX0sIHsgICAgNzAzLCA3fSwgXAorICAgIHsgICAzMDcxLCA4fSwgeyAgIDE2NjMsIDl9LCB7ICAgIDg5NSwgOH0sIHsgICAxNzkxLCA3fSwgXAorICAgIHsgICAzNTgzLCA4fSwgeyAgIDE5MTksIDZ9LCB7ICAgNzY3OSwgN30sIHsgICAzOTY3LCA5fSwgXAorICAgIHsgICAxMDIzLDEwfSwgeyAgICA1NzUsIDl9LCB7ICAgMTE1MSwgOH0sIHsgICAyNTU5LDEwfSwgXAorICAgIHsgICAgNzAzLCA4fSwgeyAgIDI4MTUsIDl9LCB7ICAgMTQ3MSwgN30sIHsgICA1ODg3LDEwfSwgXAorICAgIHsgICAgNzY3LDExfSwgeyAgICA0MTUsIDl9LCB7ICAgMTc5MSwgOH0sIHsgICAzNTgzLDExfSwgXAorICAgIHsgICAgNDc5LDEwfSwgeyAgICA5NTksIDh9LCB7ICAgMzk2NywxMX0sIHsgICAgNTExLCA5fSwgXAorICAgIHsgICAyMTc1LDEwfSwgeyAgIDExNTEsIDh9LCB7ICAgNDYwNywgOX0sIHsgICAyODE1LDEwfSwgXAorICAgIHsgICAxNDcxLCA5fSwgeyAgIDI5NDMsMTF9LCB7ICAgIDc2NywxMH0sIHsgICAxNTM1LDExfSwgXAorICAgIHsgICAgODMxLDEwfSwgeyAgIDE3OTEsMTF9LCB7ICAgIDk1OSwxMH0sIHsgICAxOTE5LCA5fSwgXAorICAgIHsgICAzODM5LCA4fSwgeyAgIDc2NzksMTB9LCB7ICAgMTk4MywxMn0sIHsgICAgNTExLDEwfSwgXAorICAgIHsgICAyMDQ3LDExfSwgeyAgIDEyMTUsMTJ9LCB7ICAgIDYzOSwxMX0sIHsgICAxNDA3LDEwfSwgXAorICAgIHsgICAyODE1LDExfSwgeyAgIDE0NzEsMTJ9LCB7ICAgIDc2NywxMX0sIHsgICAxNjYzLDEyfSwgXAorICAgIHsgICAgODk1LDExfSwgeyAgIDE3OTEsMTJ9LCB7ICAgIDk1OSwxMX0sIHsgICAxOTE5LDEwfSwgXAorICAgIHsgICAzODM5LDE0fSwgeyAgICAyNTUsMTN9LCB7ICAgIDUxMSwxMn0sIHsgICAxMDIzLDExfSwgXAorICAgIHsgICAyMDQ3LDEyfSwgeyAgIDEyMTUsMTN9LCB7ICAgIDYzOSwxMn0sIHsgICAxMjc5LDEzfSwgXAorICAgIHsgICAgNzAzLDEyfSwgeyAgIDE0MDcsMTF9LCB7ICAgMjgxNSwxM30sIHsgICAgNzY3LDEyfSwgXAorICAgIHsgICAxNTM1LDEzfSwgeyAgICA4MzEsMTJ9LCB7ICAgMTY2MywxM30sIHsgICAgODk1LDEyfSwgXAorICAgIHsgICAxNzkxLDExfSwgeyAgIDM1ODMsMTN9LCB7ICAgIDk1OSwxMn0sIHsgICAxOTE5LDExfSwgXAorICAgIHsgICAzODM5LDE0fSwgeyAgICA1MTEsMTN9LCB7ICAgMTAyMywxMn0sIHsgICAyMDQ3LDEzfSwgXAorICAgIHsgICAxMjE1LDEyfSwgeyAgIDI0MzEsMTR9LCB7ICAgIDYzOSwxM30sIHsgICAxNDA3LDEyfSwgXAorICAgIHsgICAyODE1LDEzfSwgeyAgIDE0NzEsMTJ9LCB7ICAgMjk0MywxNH0sIHsgICAgNzY3LDEzfSwgXAorICAgIHsgICAxNTM1LDEyfSwgeyAgIDMwNzEsMTN9LCB7ICAgMTc5MSwxMn0sIHsgICAzNTgzLDEzfSwgXAorICAgIHsgICAxOTE5LDE0fSwgeyAgIDEwMjMsMTN9LCB7ICAgMjE3NSwxNH0sIHsgICAxMTUxLDEzfSwgXAorICAgIHsgICAyNDMxLDE0fSwgeyAgIDEyNzksMTN9LCB7ICAgMjU1OSwxNX0sIHsgICAgNzY3LDE0fSwgXAorICAgIHsgICAxNzkxLDEzfSwgeyAgIDM4MzksMTV9LCB7ICAgMTAyMywxNH0sIHsgICAyNDMxLDEzfSwgXAorICAgIHsgICA0ODYzLDE1fSwgeyAgIDEyNzksMTR9LCB7ICAgMjk0MywxNX0sIHsgICAxNTM1LDE0fSwgXAorICAgIHsgIDE2Mzg0LDE1fSwgeyAgMzI3NjgsMTZ9LCB7ICA2NTUzNiwxN30sIHsgMTMxMDcyLDE4fSwgXAorICAgIHsgMjYyMTQ0LDE5fSwgeyA1MjQyODgsMjB9LCB7MTA0ODU3NiwyMX0sIHsyMDk3MTUyLDIyfSwgXAorICAgIHs0MTk0MzA0LDIzfSwgezgzODg2MDgsMjR9IH0KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTNfU0laRSAyMTgKKyNkZWZpbmUgTVVMX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDI2ODgKKworI2RlZmluZSBTUVJfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDIzNiAgLyogayA9IDUgKi8KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDIzNiwgNX0sIHsgICAgIDEzLCA2fSwgeyAgICAgIDcsIDV9LCB7ICAgICAxNSwgNn0sIFwKKyAgICB7ICAgICAxNSwgN30sIHsgICAgICA4LCA2fSwgeyAgICAgMTcsIDd9LCB7ICAgICAxMywgOH0sIFwKKyAgICB7ICAgICAgNywgN30sIHsgICAgIDE3LCA4fSwgeyAgICAgIDksIDd9LCB7ICAgICAyMCwgOH0sIFwKKyAgICB7ICAgICAxMSwgN30sIHsgICAgIDIzLCA4fSwgeyAgICAgMTMsIDl9LCB7ICAgICAgNywgOH0sIFwKKyAgICB7ICAgICAxOSwgOX0sIHsgICAgIDExLCA4fSwgeyAgICAgMjUsMTB9LCB7ICAgICAgNywgOX0sIFwKKyAgICB7ICAgICAxNSwgOH0sIHsgICAgIDMzLCA5fSwgeyAgICAgMTksIDh9LCB7ICAgICAzOSwgOX0sIFwKKyAgICB7ICAgICAyNywxMH0sIHsgICAgIDE1LCA5fSwgeyAgICAgMzksMTB9LCB7ICAgICAyMywgOX0sIFwKKyAgICB7ICAgICA0NywxMX0sIHsgICAgIDE1LDEwfSwgeyAgICAgMzEsIDl9LCB7ICAgICA2NywxMH0sIFwKKyAgICB7ICAgICAzOSwgOX0sIHsgICAgIDc5LCA4fSwgeyAgICAxNTksMTB9LCB7ICAgICA0NywgOX0sIFwKKyAgICB7ICAgICA5NSwgOH0sIHsgICAgMTkxLCA3fSwgeyAgICAzODMsMTB9LCB7ICAgICA1NSwxMX0sIFwKKyAgICB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA5fSwgeyAgICAxMjcsIDh9LCB7ICAgIDI1NSwgN30sIFwKKyAgICB7ICAgIDUxMSwxMH0sIHsgICAgIDcxLCA5fSwgeyAgICAxNDMsIDh9LCB7ICAgIDI4NywgN30sIFwKKyAgICB7ICAgIDU3NSwxMH0sIHsgICAgIDc5LCA4fSwgeyAgICAzMTksIDd9LCB7ICAgIDYzOSwxMX0sIFwKKyAgICB7ICAgICA0NywxMH0sIHsgICAgIDk1LCA4fSwgeyAgICAzODMsIDd9LCB7ICAgIDc2NywgOH0sIFwKKyAgICB7ICAgIDQxNSwxMn0sIHsgICAgIDMxLDExfSwgeyAgICAgNjMsMTB9LCB7ICAgIDEyNywgOX0sIFwKKyAgICB7ICAgIDI1NSwgOH0sIHsgICAgNTQzLCA5fSwgeyAgICAyODcsIDh9LCB7ICAgIDU3NSwgN30sIFwKKyAgICB7ICAgMTE1MSwgOX0sIHsgICAgMzE5LCA4fSwgeyAgICA2MzksIDl9LCB7ICAgIDM1MSwgOH0sIFwKKyAgICB7ICAgIDcwMywgN30sIHsgICAxNDA3LCA2fSwgeyAgIDI4MTUsMTB9LCB7ICAgIDE5MSwgOX0sIFwKKyAgICB7ICAgIDM4MywgOH0sIHsgICAgNzY3LCA5fSwgeyAgICA0MTUsIDh9LCB7ICAgIDgzMSwgN30sIFwKKyAgICB7ICAgMTY2MywxMH0sIHsgICAgMjIzLCA5fSwgeyAgICA0NDcsIDh9LCB7ICAgIDg5NSwgN30sIFwKKyAgICB7ICAgMTc5MSwgOX0sIHsgICAgNDc5LCA4fSwgeyAgICA5NTksMTJ9LCB7ICAgICA2MywxMX0sIFwKKyAgICB7ICAgIDEyNywgOX0sIHsgICAgNTQzLCA4fSwgeyAgIDEwODcsMTB9LCB7ICAgIDI4NywgOX0sIFwKKyAgICB7ICAgIDU3NSwgOH0sIHsgICAxMTUxLDEwfSwgeyAgICAzMTksIDl9LCB7ICAgIDYzOSwxMH0sIFwKKyAgICB7ICAgIDM1MSwgOX0sIHsgICAgNzAzLCA4fSwgeyAgIDE0MDcsIDd9LCB7ICAgMjgxNSwgOH0sIFwKKyAgICB7ICAgMTQ3MSwgNX0sIHsgIDExNzc1LCA5fSwgeyAgICA3NjcsIDh9LCB7ICAgMTUzNSwxMH0sIFwKKyAgICB7ICAgIDQxNSwgOX0sIHsgICAgODk1LCA4fSwgeyAgIDE5MTksIDZ9LCB7ICAgNzY3OSwgN30sIFwKKyAgICB7ICAgMzk2NywxMX0sIHsgICAgMjU1LDEwfSwgeyAgICA1NDMsIDl9LCB7ICAgMTA4NywgOH0sIFwKKyAgICB7ICAgMjE3NSwxMH0sIHsgICAgNTc1LCA5fSwgeyAgIDExNTEsIDh9LCB7ICAgMjQzMSwxMH0sIFwKKyAgICB7ICAgIDYzOSwgOX0sIHsgICAxMjc5LDEwfSwgeyAgICA3MDMsIDl9LCB7ICAgMTQwNywgOH0sIFwKKyAgICB7ICAgMjk0MywxMX0sIHsgICAgMzgzLDEwfSwgeyAgICA3NjcsMTF9LCB7ICAgIDQ0NywxMH0sIFwKKyAgICB7ICAgIDg5NSwxMX0sIHsgICAgNDc5LDEwfSwgeyAgICA5NTksIDl9LCB7ICAgMTkxOSwgOH0sIFwKKyAgICB7ICAgMzgzOSwxMH0sIHsgICAxMDIzLCA5fSwgeyAgIDIxNzUsMTB9LCB7ICAgMTIxNSwgOX0sIFwKKyAgICB7ICAgMjQzMSwxMX0sIHsgICAgNzAzLCA5fSwgeyAgIDI4MTUsMTB9LCB7ICAgMTQ3MSwxMX0sIFwKKyAgICB7ICAgIDc2NywxMH0sIHsgICAxNjYzLDExfSwgeyAgICA4OTUsMTB9LCB7ICAgMTc5MSwxMX0sIFwKKyAgICB7ICAgIDk1OSwgOX0sIHsgICAzODM5LDEyfSwgeyAgICA1MTEsMTF9LCB7ICAgMTA4NywxMH0sIFwKKyAgICB7ICAgMjE3NSwxMX0sIHsgICAxMjE1LDEwfSwgeyAgIDI0MzEsMTJ9LCB7ICAgIDYzOSwxMX0sIFwKKyAgICB7ICAgMTI3OSwxMn0sIHsgICAgNzAzLDExfSwgeyAgIDE0NzEsMTJ9LCB7ICAgIDc2NywxMX0sIFwKKyAgICB7ICAgMTY2MywxMn0sIHsgICAgODk1LDExfSwgeyAgIDE5MTksMTB9LCB7ICAgMzgzOSwxM30sIFwKKyAgICB7ICAgIDUxMSwxMn0sIHsgICAxMDg3LDExfSwgeyAgIDIxNzUsMTJ9LCB7ICAgMTIxNSwxMX0sIFwKKyAgICB7ICAgMjQzMSwxM30sIHsgICAgNjM5LDEyfSwgeyAgIDEyNzksMTN9LCB7ICAgIDcwMywxMn0sIFwKKyAgICB7ICAgMTQwNywxM30sIHsgICAgNzY3LDEyfSwgeyAgIDE1MzUsMTN9LCB7ICAgIDgzMSwxMn0sIFwKKyAgICB7ICAgMTc5MSwxM30sIHsgICAxMTUxLDEyfSwgeyAgIDIzMDMsMTN9LCB7ICAgMTIxNSwxNH0sIFwKKyAgICB7ICAgIDYzOSwxMn0sIHsgICAyNTU5LDEzfSwgeyAgIDE0MDcsMTR9LCB7ICAgIDc2NywxMn0sIFwKKyAgICB7ICAgMzA3MSwxNH0sIHsgICAgODk1LDEzfSwgeyAgIDE5MTksMTJ9LCB7ICAgMzgzOSwxNH0sIFwKKyAgICB7ICAgMTAyMywxM30sIHsgICAyMTc1LDE0fSwgeyAgIDExNTEsMTJ9LCB7ICAgNDYwNywxNH0sIFwKKyAgICB7ICAgMTI3OSwxM30sIHsgICAyNTU5LDE0fSwgeyAgIDE0MDcsMTN9LCB7ICAgMjk0MywxNX0sIFwKKyAgICB7ICAgIDc2NywxNH0sIHsgICAxNjYzLDEzfSwgeyAgIDM1ODMsMTR9LCB7ICAgMTkxOSwxNX0sIFwKKyAgICB7ICAgMTAyMywxNH0sIHsgICAyMDQ3LDEzfSwgeyAgIDQwOTUsMTR9LCB7ICAgMjk0MywxNX0sIFwKKyAgICB7ICAgMTUzNSwxNH0sIHsgIDE2Mzg0LDE1fSwgeyAgMzI3NjgsMTZ9LCB7ICA2NTUzNiwxN30sIFwKKyAgICB7IDEzMTA3MiwxOH0sIHsgMjYyMTQ0LDE5fSwgeyA1MjQyODgsMjB9LCB7MTA0ODU3NiwyMX0sIFwKKyAgICB7MjA5NzE1MiwyMn0sIHs0MTk0MzA0LDIzfSwgezgzODg2MDgsMjR9IH0KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTNfU0laRSAyMDMKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDIxNzYKKworI2RlZmluZSBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDMzCisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgICA1MjQwCisjZGVmaW5lIFNRUkxPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICA2CisjZGVmaW5lIFNRUkxPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDQ1CisjZGVmaW5lIFNRUkxPX1NRUl9USFJFU0hPTEQgICAgICAgICAgICAgICA0MjY1CisKKyNkZWZpbmUgRENfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMzgKKyNkZWZpbmUgRENfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAxMDgKKyNkZWZpbmUgRENfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMzYKKyNkZWZpbmUgRENfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNzEKKworI2RlZmluZSBJTlZfTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAxNAorI2RlZmluZSBJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDEzMgorI2RlZmluZSBJTlZfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDEyNAorCisjZGVmaW5lIEJJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTk5CisjZGVmaW5lIFJFRENfMV9UT19SRURDX05fVEhSRVNIT0xEICAgICAgICAgIDM0CisKKyNkZWZpbmUgTVVfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA5NzkKKyNkZWZpbmUgTVVfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICA5NzkKKyNkZWZpbmUgTVVQSV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgNjEKKyNkZWZpbmUgTVVfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICA3MzQKKyNkZWZpbmUgTVVfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA5NDIKKworI2RlZmluZSBQT1dNX1NFQ19UQUJMRSAgNiwzMCwxMTAsNTc5LDE3MzAKKworI2RlZmluZSBHRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBHRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgICAxOQorI2RlZmluZSBTRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDQ1OAorI2RlZmluZSBTRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgIDg3NQorCisjZGVmaW5lIEZBQ19EU0NfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgMTUzCisjZGVmaW5lIEZBQ19PRERfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDI0CisKKyNkZWZpbmUgTUFUUklYMjJfU1RSQVNTRU5fVEhSRVNIT0xEICAgICAgICAgMTUKKyNkZWZpbmUgSEdDRDJfRElWMV9NRVRIT0QgICAgICAgICAgICAgICAgICAgIDEgIC8qIDguNDElIGZhc3RlciB0aGFuIDMgKi8KKyNkZWZpbmUgSEdDRF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgICAgODEKKyNkZWZpbmUgSEdDRF9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgODAKKyNkZWZpbmUgSEdDRF9SRURVQ0VfVEhSRVNIT0xEICAgICAgICAgICAgIDE0OTQKKyNkZWZpbmUgR0NEX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAyNjgKKyNkZWZpbmUgR0NERVhUX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxODkKKyNkZWZpbmUgSkFDT0JJX0JBU0VfTUVUSE9EICAgICAgICAgICAgICAgICAgIDEgIC8qIDEwLjgwJSBmYXN0ZXIgdGhhbiA0ICovCisKKy8qIFR1bmV1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCB0b29rIDk2OTA2IHNlY29uZHMgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtNjQvY29yYTczL2dtcC1tcGFyYW0uaCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtNjQvY29yYTczL2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmM3ZjRlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm02NC9jb3JhNzMvZ21wLW1wYXJhbS5oCkBAIC0wLDAgKzEsMjI1IEBACisvKiBnbXAtbXBhcmFtLmggLS0gQ29tcGlsZXIvbWFjaGluZSBwYXJhbWV0ZXIgaGVhZGVyIGZpbGUgZm9yIGE3My4KKworQ29weXJpZ2h0IDIwMTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNkZWZpbmUgR01QX0xJTUJfQklUUyA2NAorI2RlZmluZSBHTVBfTElNQl9CWVRFUyA4CisKKy8qIDE4MDAgTUh6IENvcnRleC1BNzIgKi8KKy8qIEZGVCB0dW5pbmcgbGltaXQgPSA0OCw4MjAsMzM3ICovCisvKiBHZW5lcmF0ZWQgYnkgdHVuZXVwLmMsIDIwMTktMTAtMjIsIGdjYyA3LjQgKi8KKworI2RlZmluZSBESVZSRU1fMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgMworI2RlZmluZSBESVZSRU1fMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgMworI2RlZmluZSBNT0RfMV8xUF9NRVRIT0QgICAgICAgICAgICAgICAgICAgICAgMSAgLyogMi4yOCUgZmFzdGVyIHRoYW4gMiAqLworI2RlZmluZSBNT0RfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMworI2RlZmluZSBNT0RfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgNAorI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgOAorI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNQorI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAgOAorI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICAgICA0NAorI2RlZmluZSBQUkVJTlZfTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAxNgorI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBESVZfUVJfMU5fUEkxX01FVEhPRCAgICAgICAgICAgICAgICAgMSAgLyogMzUuMTMlIGZhc3RlciB0aGFuIDIgKi8KKyNkZWZpbmUgRElWX1FSXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRElWX1FSXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgIDUKKyNkZWZpbmUgRElWX1FSXzJfUEkyX1RIUkVTSE9MRCAgICAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWRVhBQ1RfMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBCTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgICAgICAzMworCisjZGVmaW5lIERJVl8xX1ZTX01VTF8xX1BFUkNFTlQgICAgICAgICAgICAgMTY4CisKKyNkZWZpbmUgTVVMX1RPT00yMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgTVVMX1RPT00zM19USFJFU0hPTEQgICAgICAgICAgICAgICAgNTcKKyNkZWZpbmUgTVVMX1RPT000NF9USFJFU0hPTEQgICAgICAgICAgICAgICAgODkKKyNkZWZpbmUgTVVMX1RPT002SF9USFJFU0hPTEQgICAgICAgICAgICAgICAxNDEKKyNkZWZpbmUgTVVMX1RPT004SF9USFJFU0hPTEQgICAgICAgICAgICAgICAxOTkKKworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT000M19USFJFU0hPTEQgICAgICA2MQorI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT001M19USFJFU0hPTEQgICAgICA2OQorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT001M19USFJFU0hPTEQgICAgICA2NQorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT002M19USFJFU0hPTEQgICAgICA2NgorI2RlZmluZSBNVUxfVE9PTTQzX1RPX1RPT001NF9USFJFU0hPTEQgICAgICA1OAorCisjZGVmaW5lIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNjIKKyNkZWZpbmUgU1FSX1RPT000X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNjYKKyNkZWZpbmUgU1FSX1RPT002X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyMjIKKyNkZWZpbmUgU1FSX1RPT004X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzMDkKKworI2RlZmluZSBNVUxNSURfVE9PTTQyX1RIUkVTSE9MRCAgICAgICAgICAgICAyMgorCisjZGVmaW5lIE1VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFNRUk1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDExCisKKyNkZWZpbmUgTVVMX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICAyNzYgIC8qIGsgPSA1ICovCisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICAyNzYsIDV9LCB7ICAgICAxMywgNn0sIHsgICAgICA3LCA1fSwgeyAgICAgMTUsIDZ9LCBcCisgICAgeyAgICAgMTUsIDd9LCB7ICAgICAgOCwgNn0sIHsgICAgIDE3LCA3fSwgeyAgICAgIDksIDZ9LCBcCisgICAgeyAgICAgMTksIDd9LCB7ICAgICAxMywgOH0sIHsgICAgICA3LCA3fSwgeyAgICAgMTcsIDh9LCBcCisgICAgeyAgICAgIDksIDd9LCB7ICAgICAxOSwgOH0sIHsgICAgIDExLCA3fSwgeyAgICAgMjMsIDh9LCBcCisgICAgeyAgICAgMTMsIDl9LCB7ICAgICAgNywgOH0sIHsgICAgIDE5LCA5fSwgeyAgICAgMTEsIDh9LCBcCisgICAgeyAgICAgMjcsMTB9LCB7ICAgICAgNywgOX0sIHsgICAgIDE1LCA4fSwgeyAgICAgMzMsIDl9LCBcCisgICAgeyAgICAgMTksIDh9LCB7ICAgICAzOSwgOX0sIHsgICAgIDIzLCA4fSwgeyAgICAgNDcsIDl9LCBcCisgICAgeyAgICAgMjcsMTB9LCB7ICAgICAxNSwgOX0sIHsgICAgIDQzLDEwfSwgeyAgICAgMjMsIDl9LCBcCisgICAgeyAgICAgNTEsMTF9LCB7ICAgICAxNSwxMH0sIHsgICAgIDMxLCA5fSwgeyAgICAgNjcsMTB9LCBcCisgICAgeyAgICAgMzksIDl9LCB7ICAgICA4MywxMH0sIHsgICAgIDQ3LCA5fSwgeyAgICAgOTksMTB9LCBcCisgICAgeyAgICAgNTUsMTF9LCB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA5fSwgeyAgICAxMjcsIDh9LCBcCisgICAgeyAgICAyNTUsIDl9LCB7ICAgIDEzMSwxMH0sIHsgICAgIDcxLCA5fSwgeyAgICAxNDMsIDh9LCBcCisgICAgeyAgICAyODcsMTB9LCB7ICAgICA3OSwgOX0sIHsgICAgMTU5LCA4fSwgeyAgICAzMTksMTF9LCBcCisgICAgeyAgICAgNDcsIDl9LCB7ICAgIDE5MSwgOH0sIHsgICAgMzgzLCA3fSwgeyAgICA3NjcsIDh9LCBcCisgICAgeyAgICA0MTUsMTJ9LCB7ICAgICAzMSwxMX0sIHsgICAgIDYzLCA5fSwgeyAgICAyNTUsIDh9LCBcCisgICAgeyAgICA1MTEsMTB9LCB7ICAgIDE0MywgOX0sIHsgICAgMjg3LCA4fSwgeyAgICA1NzUsMTF9LCBcCisgICAgeyAgICAgNzksMTB9LCB7ICAgIDE1OSwgOX0sIHsgICAgMzE5LDEwfSwgeyAgICAxNzUsIDl9LCBcCisgICAgeyAgICAzNTEsIDh9LCB7ICAgIDcwMywxMX0sIHsgICAgIDk1LDEwfSwgeyAgICAxOTEsIDl9LCBcCisgICAgeyAgICAzODMsIDh9LCB7ICAgIDc2NywxMH0sIHsgICAgMjA3LCA5fSwgeyAgICA0MTUsMTB9LCBcCisgICAgeyAgICAyMjMsIDl9LCB7ICAgIDQ0NywxMn0sIHsgICAgIDYzLDEwfSwgeyAgICAyNTUsIDl9LCBcCisgICAgeyAgICA1MTEsIDh9LCB7ICAgMTAyMywgOX0sIHsgICAgNTQzLDExfSwgeyAgICAxNDMsIDl9LCBcCisgICAgeyAgICA1NzUsMTB9LCB7ICAgIDMxOSwgOX0sIHsgICAgNjM5LDEwfSwgeyAgICAzNTEsIDl9LCBcCisgICAgeyAgICA3MDMsMTJ9LCB7ICAgICA5NSwxMX0sIHsgICAgMTkxLDEwfSwgeyAgICAzODMsMTF9LCBcCisgICAgeyAgICAyMDcsMTB9LCB7ICAgIDQxNSwxMX0sIHsgICAgMjIzLDEwfSwgeyAgICA0NDcsIDl9LCBcCisgICAgeyAgICA4OTUsMTN9LCB7ICAgICA2MywxMX0sIHsgICAgMjU1LDEwfSwgeyAgICA1MTEsMTF9LCBcCisgICAgeyAgICAyODcsMTB9LCB7ICAgIDU3NSwxMn0sIHsgICAgMTU5LDExfSwgeyAgICAzMTksMTB9LCBcCisgICAgeyAgICA2MzksMTF9LCB7ICAgIDM1MSwxMH0sIHsgICAgNzAzLCA5fSwgeyAgIDE0MDcsMTJ9LCBcCisgICAgeyAgICAxOTEsMTF9LCB7ICAgIDM4MywxMH0sIHsgICAgNzY3LDExfSwgeyAgICA0MTUsMTJ9LCBcCisgICAgeyAgICAyMjMsMTF9LCB7ICAgIDQ0NywxMH0sIHsgICAgODk1LDExfSwgeyAgICA0NzksMTB9LCBcCisgICAgeyAgICA5NTksMTJ9LCB7ICAgIDI1NSwxMX0sIHsgICAgNTQzLDEwfSwgeyAgIDEwODcsMTF9LCBcCisgICAgeyAgICA1NzUsMTJ9LCB7ICAgIDMxOSwxMX0sIHsgICAgNjM5LDEyfSwgeyAgICAzNTEsMTF9LCBcCisgICAgeyAgICA3MDMsMTN9LCB7ICAgIDE5MSwxMn0sIHsgICAgMzgzLDExfSwgeyAgICA3NjcsMTJ9LCBcCisgICAgeyAgICA0MTUsMTF9LCB7ICAgIDgzMSwxMn0sIHsgICAgNDQ3LDExfSwgeyAgICA4OTUsMTJ9LCBcCisgICAgeyAgICA0NzksMTN9LCB7ICAgIDI1NSwxMn0sIHsgICAgNTExLDExfSwgeyAgIDEwMjMsMTJ9LCBcCisgICAgeyAgICA1NzUsMTN9LCB7ICAgIDMxOSwxMn0sIHsgICAgNzAzLDEzfSwgeyAgICAzODMsMTJ9LCBcCisgICAgeyAgICA4MzEsMTN9LCB7ICAgIDQ0NywxMn0sIHsgICAgOTU5LDE0fSwgeyAgICAyNTUsMTN9LCBcCisgICAgeyAgICA1MTEsMTJ9LCB7ICAgMTAyMywxM30sIHsgICAgNTc1LDEyfSwgeyAgIDExNTEsMTN9LCBcCisgICAgeyAgICA3MDMsMTJ9LCB7ICAgMTQwNywxNH0sIHsgICAgMzgzLDEzfSwgeyAgICA4MzEsMTJ9LCBcCisgICAgeyAgIDE2NjMsMTN9LCB7ICAgIDk1OSwxNX0sIHsgICAgMjU1LDE0fSwgeyAgICA1MTEsMTN9LCBcCisgICAgeyAgIDExNTEsMTR9LCB7ICAgIDYzOSwxM30sIHsgICAxNDA3LDE0fSwgeyAgICA3NjcsMTN9LCBcCisgICAgeyAgIDE2NjMsMTR9LCB7ICAgIDg5NSwxM30sIHsgICAxNzkxLDE1fSwgeyAgICA1MTEsMTR9LCBcCisgICAgeyAgIDEwMjMsMTN9LCB7ICAgMjA0NywxNH0sIHsgICAxMTUxLDEzfSwgeyAgIDI0MzEsMTR9LCBcCisgICAgeyAgIDE0MDcsMTV9LCB7ICAgIDc2NywxNH0sIHsgICAxNzkxLDE2fSwgeyAgICA1MTEsMTV9LCBcCisgICAgeyAgIDEwMjMsMTR9LCB7ICAgMjQzMSwxNX0sIHsgICAxMjc5LDE0fSwgeyAgIDI4MTUsMTV9LCBcCisgICAgeyAgMzI3NjgsMTZ9LCB7ICA2NTUzNiwxN30sIHsgMTMxMDcyLDE4fSwgeyAyNjIxNDQsMTl9LCBcCisgICAgeyA1MjQyODgsMjB9LCB7MTA0ODU3NiwyMX0sIHsyMDk3MTUyLDIyfSwgezQxOTQzMDQsMjN9LCBcCisgICAgezgzODg2MDgsMjR9IH0KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTNfU0laRSAxODUKKyNkZWZpbmUgTVVMX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDMyMDAKKworI2RlZmluZSBTUVJfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDI0NCAgLyogayA9IDUgKi8KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDI0NCwgNX0sIHsgICAgIDEzLCA2fSwgeyAgICAgIDcsIDV9LCB7ICAgICAxNSwgNn0sIFwKKyAgICB7ICAgICAxNywgN30sIHsgICAgICA5LCA2fSwgeyAgICAgMTksIDd9LCB7ICAgICAxNywgOH0sIFwKKyAgICB7ICAgICAgOSwgN30sIHsgICAgIDIwLCA4fSwgeyAgICAgMTEsIDd9LCB7ICAgICAyMywgOH0sIFwKKyAgICB7ICAgICAxMywgOX0sIHsgICAgICA3LCA4fSwgeyAgICAgMTksIDl9LCB7ICAgICAxMSwgOH0sIFwKKyAgICB7ICAgICAyNSwxMH0sIHsgICAgICA3LCA5fSwgeyAgICAgMTUsIDh9LCB7ICAgICAzMSwgOX0sIFwKKyAgICB7ICAgICAxOSwgOH0sIHsgICAgIDM5LCA5fSwgeyAgICAgMjMsIDh9LCB7ICAgICA0NywxMH0sIFwKKyAgICB7ICAgICAxNSwgOX0sIHsgICAgIDM5LDEwfSwgeyAgICAgMjMsIDl9LCB7ICAgICA0NywxMX0sIFwKKyAgICB7ICAgICAxNSwxMH0sIHsgICAgIDMxLCA5fSwgeyAgICAgNjMsMTB9LCB7ICAgICAzOSwgOX0sIFwKKyAgICB7ICAgICA3OSwxMH0sIHsgICAgIDQ3LCA5fSwgeyAgICAgOTUsMTB9LCB7ICAgICA1NSwxMX0sIFwKKyAgICB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA4fSwgeyAgICAyNTUsMTB9LCB7ICAgICA3MSwgOX0sIFwKKyAgICB7ICAgIDE0MywgOH0sIHsgICAgMjg3LDEwfSwgeyAgICAgNzksIDl9LCB7ICAgIDE1OSwgOH0sIFwKKyAgICB7ICAgIDMxOSwxMX0sIHsgICAgIDQ3LDEwfSwgeyAgICAgOTUsIDl9LCB7ICAgIDE5MSwgOH0sIFwKKyAgICB7ICAgIDM4MywxMn0sIHsgICAgIDMxLDExfSwgeyAgICAgNjMsMTB9LCB7ICAgIDEyNywgOX0sIFwKKyAgICB7ICAgIDI4NywgOH0sIHsgICAgNTc1LDExfSwgeyAgICAgNzksMTB9LCB7ICAgIDE1OSwgOX0sIFwKKyAgICB7ICAgIDMxOSwgOH0sIHsgICAgNjM5LDEwfSwgeyAgICAxNzUsIDl9LCB7ICAgIDM1MSwgOH0sIFwKKyAgICB7ICAgIDcwMywxMX0sIHsgICAgIDk1LCA5fSwgeyAgICAzODMsIDh9LCB7ICAgIDc2NywxMH0sIFwKKyAgICB7ICAgIDIwNywgOX0sIHsgICAgNDE1LDEwfSwgeyAgICAyMjMsIDh9LCB7ICAgIDg5NSwxMH0sIFwKKyAgICB7ICAgIDIzOSwxMn0sIHsgICAgIDYzLDExfSwgeyAgICAxMjcsMTB9LCB7ICAgIDI1NSwgOX0sIFwKKyAgICB7ICAgIDUxMSwxMH0sIHsgICAgMjg3LCA5fSwgeyAgICA1NzUsMTF9LCB7ICAgIDE1OSwxMH0sIFwKKyAgICB7ICAgIDMxOSwgOX0sIHsgICAgNjM5LDExfSwgeyAgICAxNzUsMTB9LCB7ICAgIDM1MSwgOX0sIFwKKyAgICB7ICAgIDcwMywxMX0sIHsgICAgMTkxLDEwfSwgeyAgICAzODMsMTF9LCB7ICAgIDIwNywxMH0sIFwKKyAgICB7ICAgIDQxNSwxMX0sIHsgICAgMjIzLDEwfSwgeyAgICA0NzksMTF9LCB7ICAgIDI1NSwxMH0sIFwKKyAgICB7ICAgIDUxMSwxMX0sIHsgICAgMjg3LDEwfSwgeyAgICA1NzUsMTJ9LCB7ICAgIDE1OSwxMX0sIFwKKyAgICB7ICAgIDM1MSwxMn0sIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTB9LCB7ICAgIDc2NywxMn0sIFwKKyAgICB7ICAgIDIyMywxMX0sIHsgICAgNDQ3LDEwfSwgeyAgICA4OTUsMTF9LCB7ICAgIDQ3OSwxM30sIFwKKyAgICB7ICAgIDEyNywxMn0sIHsgICAgMjU1LDExfSwgeyAgICA1MTEsMTJ9LCB7ICAgIDI4NywxMH0sIFwKKyAgICB7ICAgMTE1MSwxMn0sIHsgICAgMzE5LDExfSwgeyAgICA2MzksMTJ9LCB7ICAgIDM1MSwxMX0sIFwKKyAgICB7ICAgIDcwMywxM30sIHsgICAgMTkxLDEyfSwgeyAgICAzODMsMTF9LCB7ICAgIDc2NywxMn0sIFwKKyAgICB7ICAgIDQxNSwxMX0sIHsgICAgODMxLDEyfSwgeyAgICA0NDcsMTF9LCB7ICAgIDg5NSwxMn0sIFwKKyAgICB7ICAgIDQ3OSwxMX0sIHsgICAgOTU5LDEyfSwgeyAgICA1MTEsMTF9LCB7ICAgMTAyMywxMn0sIFwKKyAgICB7ICAgIDU3NSwxMX0sIHsgICAxMTUxLDEzfSwgeyAgICAzMTksMTJ9LCB7ICAgIDYzOSwxMX0sIFwKKyAgICB7ICAgMTI3OSwxM30sIHsgICAgMzgzLDEyfSwgeyAgICA4MzEsMTN9LCB7ICAgIDQ0NywxMn0sIFwKKyAgICB7ICAgIDg5NSwxNH0sIHsgICAgMjU1LDEzfSwgeyAgICA1MTEsMTJ9LCB7ICAgMTAyMywxM30sIFwKKyAgICB7ICAgIDcwMywxNH0sIHsgICAgMzgzLDEzfSwgeyAgICA4MzEsMTJ9LCB7ICAgMTY2MywxM30sIFwKKyAgICB7ICAgIDg5NSwxNX0sIHsgICAgMjU1LDE0fSwgeyAgICA1MTEsMTN9LCB7ICAgMTE1MSwxNH0sIFwKKyAgICB7ICAgIDYzOSwxM30sIHsgICAxNDA3LDE0fSwgeyAgICA3NjcsMTN9LCB7ICAgMTUzNSwxNH0sIFwKKyAgICB7ICAgIDg5NSwxNX0sIHsgICAgNTExLDE0fSwgeyAgIDExNTEsMTN9LCB7ICAgMjQzMSwxNH0sIFwKKyAgICB7ICAgMTQwNywxNX0sIHsgICAgNzY3LDE0fSwgeyAgIDE3OTEsMTZ9LCB7ICAgIDUxMSwxNX0sIFwKKyAgICB7ICAgMTAyMywxNH0sIHsgICAyNDMxLDE1fSwgeyAgIDEyNzksMTR9LCB7ICAgMjgxNSwxNX0sIFwKKyAgICB7ICAzMjc2OCwxNn0sIHsgIDY1NTM2LDE3fSwgeyAxMzEwNzIsMTh9LCB7IDI2MjE0NCwxOX0sIFwKKyAgICB7IDUyNDI4OCwyMH0sIHsxMDQ4NTc2LDIxfSwgezIwOTcxNTIsMjJ9LCB7NDE5NDMwNCwyM30sIFwKKyAgICB7ODM4ODYwOCwyNH0gfQorI2RlZmluZSBTUVJfRkZUX1RBQkxFM19TSVpFIDE2NQorI2RlZmluZSBTUVJfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMjQ5NgorCisjZGVmaW5lIE1VTExPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTVVMTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgMzkKKyNkZWZpbmUgTVVMTE9fTVVMX05fVEhSRVNIT0xEICAgICAgICAgICAgIDYyNTMKKyNkZWZpbmUgU1FSTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDQKKyNkZWZpbmUgU1FSTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgNTYKKyNkZWZpbmUgU1FSTE9fU1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDQ5NDAKKworI2RlZmluZSBEQ19ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAzNgorI2RlZmluZSBEQ19ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgIDEzNgorI2RlZmluZSBEQ19CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzNQorI2RlZmluZSBEQ19CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA4OAorCisjZGVmaW5lIElOVl9NVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgIDMwCisjZGVmaW5lIElOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAgMTQ5CisjZGVmaW5lIElOVl9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTM5CisKKyNkZWZpbmUgQklOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAxNjYKKyNkZWZpbmUgUkVEQ18xX1RPX1JFRENfTl9USFJFU0hPTEQgICAgICAgICAgMzgKKworI2RlZmluZSBNVV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTEyMAorI2RlZmluZSBNVV9ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgMTA3OAorI2RlZmluZSBNVVBJX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICA2OAorI2RlZmluZSBNVV9CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDg4OQorI2RlZmluZSBNVV9CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDk0MgorCisjZGVmaW5lIFBPV01fU0VDX1RBQkxFICA0LDIyLDEwMiw0NzMsMTczMAorCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgIDIyCisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgMzgxCisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAxMDQyCisKKyNkZWZpbmUgRkFDX0RTQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAxNDAKKyNkZWZpbmUgRkFDX09ERF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgMjMKKworI2RlZmluZSBNQVRSSVgyMl9TVFJBU1NFTl9USFJFU0hPTEQgICAgICAgICAxMQorI2RlZmluZSBIR0NEMl9ESVYxX01FVEhPRCAgICAgICAgICAgICAgICAgICAgMSAgLyogNy44NCUgZmFzdGVyIHRoYW4gMyAqLworI2RlZmluZSBIR0NEX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgICA4MAorI2RlZmluZSBIR0NEX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA4MAorI2RlZmluZSBIR0NEX1JFRFVDRV9USFJFU0hPTEQgICAgICAgICAgICAgMTY3OQorI2RlZmluZSBHQ0RfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDI3MworI2RlZmluZSBHQ0RFWFRfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDIwMQorI2RlZmluZSBKQUNPQklfQkFTRV9NRVRIT0QgICAgICAgICAgICAgICAgICAgMSAgLyogMS4wMyUgZmFzdGVyIHRoYW4gNCAqLworCisvKiBUdW5ldXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgdG9vayA2NDk3MiBzZWNvbmRzICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybTY0L2djZF8xMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybTY0L2djZF8xMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhjYzNlMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtNjQvZ2NkXzExLmFzbQpAQCAtMCwwICsxLDcwIEBACitkbmwgIEFSTSB2OGEgbXBuX2djZF8xMS4KKworZG5sICBCYXNlZCBvbiB0aGUgSzcgZ2NkXzEuYXNtLCBieSBLZXZpbiBSeWRlLiAgUmVoYWNrZWQgZm9yIEFSTSBieSBUb3Jiam9ybgorZG5sICBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAwMC0yMDAyLCAyMDA1LCAyMDA5LCAyMDExLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworY2hhbmdlY29tKGJsYWgpCisKK0MJICAgICBjeWNsZXMvYml0IChhcHByb3gpCitDIENvcnRleC1BMzUJID8KK0MgQ29ydGV4LUE1MwkgPworQyBDb3J0ZXgtQTU1CSA/CitDIENvcnRleC1BNTcJID8KK0MgQ29ydGV4LUE3MgkgPworQyBDb3J0ZXgtQTczCSA/CitDIENvcnRleC1BNzUJID8KK0MgQ29ydGV4LUE3NgkgPworQyBDb3J0ZXgtQTc3CSA/CitDIE51bWJlcnMgbWVhc3VyZWQgd2l0aDogc3BlZWQgLUNEIC1zMTYtNjQgLXQ0OCBtcG5fZ2NkXzEKKworZGVmaW5lKGB1MCcsICAgIGB4MCcpCitkZWZpbmUoYHYwJywgICAgYHgxJykKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMTYpCitQUk9MT0dVRShtcG5fZ2NkXzExKQorCXN1YnMJeDMsIHUwLCB2MAkJQwkJCTAKKwliLmVxCUwoZW5kKQkJCUMKKworCUFMSUdOKDE2KQorTCh0b3ApOglyYml0CXgxMiwgeDMJCQlDCQkJMSw1CisJY2x6CXgxMiwgeDEyCQlDCQkJMgorCWNzbmVnCXgzLCB4MywgeDMsIGNzCQlDIHYgPSBhYnModS12KSwgZXZlbgkxCisJY3NlbAl1MCwgdjAsIHUwLCBjcwkJQyB1ID0gbWluKHUsdikJCTEKKwlsc3IJdjAsIHgzLCB4MTIJCUMJCQkzCisJc3Vicwl4MywgdTAsIHYwCQlDCQkJNAorCWIubmUJTCh0b3ApCQkJQworCitMKGVuZCk6CXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hcm02NC9nY2RfMjIuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm02NC9nY2RfMjIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNjdmZWEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybTY0L2djZF8yMi5hc20KQEAgLTAsMCArMSwxMTIgQEAKK2RubCAgQVJNIHY4YSBtcG5fZ2NkXzIyLgorCitkbmwgIENvcHlyaWdodCAyMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK2NoYW5nZWNvbShibGFoKQorCitDCSAgICAgY3ljbGVzL2JpdCAoYXBwcm94KQorQyBDb3J0ZXgtQTM1CSA/CitDIENvcnRleC1BNTMJIDcuMjYKK0MgQ29ydGV4LUE1NQkgPworQyBDb3J0ZXgtQTU3CSA/CitDIENvcnRleC1BNzIJIDUuNzIKK0MgQ29ydGV4LUE3MwkgNi40MworQyBDb3J0ZXgtQTc1CSA/CitDIENvcnRleC1BNzYJID8KK0MgQ29ydGV4LUE3NwkgPworCisKK2RlZmluZShgdTEnLCAgICBgeDAnKQorZGVmaW5lKGB1MCcsICAgIGB4MScpCitkZWZpbmUoYHYxJywgICAgYHgyJykKK2RlZmluZShgdjAnLCAgICBgeDMnKQorCitkZWZpbmUoYHQwJywgICAgYHg1JykKK2RlZmluZShgdDEnLCAgICBgeDYnKQorZGVmaW5lKGBjbnQnLCAgIGB4NycpCitkZWZpbmUoYHRuYycsICAgYHg4JykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9nY2RfMjIpCisKKwlBTElHTigxNikKK0wodG9wKToJc3Vicwl0MCwgdTAsIHYwCQlDIDAgNgorCWNiegl0MCwgTChsb3d6KQorCXNiY3MJdDEsIHUxLCB2MQkJQyAxIDcKKworCXJiaXQJY250LCB0MAkJCUMgMQorCisJY25lZwl0MCwgdDAsIGNjCQlDIDIKKwljaW52CXQxLCB0MSwgY2MJCUMgMiB1ID0gfHUgLSB2fAorTChiY2spOgljc2VsCXYwLCB2MCwgdTAsIGNzCQlDIDIKKwljc2VsCXYxLCB2MSwgdTEsIGNzCQlDIDIgdiA9IG1pbih1LHYpCisKKwljbHoJY250LCBjbnQJCUMgMgorCXN1Ygl0bmMsIHh6ciwgY250CQlDIDMKKworCWxzcgl1MCwgdDAsIGNudAkJQyAzCisJbHNsCXgxNCwgdDEsIHRuYwkJQyA0CisJbHNyCXUxLCB0MSwgY250CQlDIDMKKwlvcnIJdTAsIHUwLCB4MTQJCUMgNQorCisJb3JyCXgxMSwgdTEsIHYxCisJY2Juegl4MTEsIEwodG9wKQorCisKKwlzdWJzCXg0LCB1MCwgdjAJCUMJCQkwCisJYi5lcQlMKGVuZDEpCQkJQworCisJQUxJR04oMTYpCitMKHRvcDEpOnJiaXQJeDEyLCB4NAkJCUMJCQkxLDUKKwljbHoJeDEyLCB4MTIJCUMJCQkyCisJY3NuZWcJeDQsIHg0LCB4NCwgY3MJCUMgdiA9IGFicyh1LXYpLCBldmVuCTEKKwljc2VsCXUwLCB2MCwgdTAsIGNzCQlDIHUgPSBtaW4odSx2KQkJMQorCWxzcgl2MCwgeDQsIHgxMgkJQwkJCTMKKwlzdWJzCXg0LCB1MCwgdjAJCUMJCQk0CisJYi5uZQlMKHRvcDEpCQkJQworTChlbmQxKTptb3YJeDAsIHUwCisJbW92CXgxLCAjMAorCXJldAorCitMKGxvd3opOkMgV2UgY29tZSBoZXJlIHdoZW4gdjAgLSB1MCA9IDAKKwlDIDEuIElmIHYxIC0gdTEgPSAwLCB0aGVuIGdjZCBpcyB1ID0gdi4KKwlDIDIuIEVsc2UgY29tcHV0ZSBnY2RfMjEoe3YxLHYwfSwgfHUxLXYxfCkKKwlzdWJzCXQwLCB1MSwgdjEKKwliLmVxCUwoZW5kKQorCW1vdgl0MSwgIzAKKwlyYml0CWNudCwgdDAJCQlDIDEKKwljbmVnCXQwLCB0MCwgY2MJCUMgMgorCWIJTChiY2spCQkJQyBGSVhNRTogbWFrZSBjb25kaXRpb25hbAorCitMKGVuZCk6CW1vdgl4MCwgdjAKKwltb3YJeDEsIHYxCisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybTY0L2dtcC1tcGFyYW0uaCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtNjQvZ21wLW1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMGMxOTMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybTY0L2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDE5MiBAQAorLyogZ21wLW1wYXJhbS5oIC0tIENvbXBpbGVyL21hY2hpbmUgcGFyYW1ldGVyIGhlYWRlciBmaWxlLgorCitDb3B5cmlnaHQgMjAxOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2RlZmluZSBHTVBfTElNQl9CSVRTIDY0CisjZGVmaW5lIEdNUF9MSU1CX0JZVEVTIDgKKworLyogMTUzNiBNSHogQ29ydGV4LUE1MyAqLworLyogRkZUIHR1bmluZyBsaW1pdCA9IDAuNSBNICovCisvKiBHZW5lcmF0ZWQgYnkgdHVuZXVwLmMsIDIwMTktMDktMjksIGdjYyA1LjQgKi8KKworI2RlZmluZSBESVZSRU1fMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgMworI2RlZmluZSBESVZSRU1fMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgNAorI2RlZmluZSBNT0RfMV8xUF9NRVRIT0QgICAgICAgICAgICAgICAgICAgICAgMiAgLyogMi4wOCUgZmFzdGVyIHRoYW4gMSAqLworI2RlZmluZSBNT0RfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMworI2RlZmluZSBNT0RfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgNAorI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgOAorI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNgorI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAxMAorI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICAgICAyMAorI2RlZmluZSBQUkVJTlZfTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAyMQorI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBESVZfUVJfMU5fUEkxX01FVEhPRCAgICAgICAgICAgICAgICAgMSAgLyogMzguMjYlIGZhc3RlciB0aGFuIDIgKi8KKyNkZWZpbmUgRElWX1FSXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgMTMKKyNkZWZpbmUgRElWX1FSXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWX1FSXzJfUEkyX1RIUkVTSE9MRCAgICAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWRVhBQ1RfMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBCTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgICAgICA0MAorCisjZGVmaW5lIERJVl8xX1ZTX01VTF8xX1BFUkNFTlQgICAgICAgICAgICAgMTU5CisKKyNkZWZpbmUgTVVMX1RPT00yMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgTVVMX1RPT00zM19USFJFU0hPTEQgICAgICAgICAgICAgICAgNDkKKyNkZWZpbmUgTVVMX1RPT000NF9USFJFU0hPTEQgICAgICAgICAgICAgICAgODIKKyNkZWZpbmUgTVVMX1RPT002SF9USFJFU0hPTEQgICAgICAgICAgICAgICAxNzMKKyNkZWZpbmUgTVVMX1RPT004SF9USFJFU0hPTEQgICAgICAgICAgICAgICAyMzYKKworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT000M19USFJFU0hPTEQgICAgICA4MQorI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT001M19USFJFU0hPTEQgICAgICA3NgorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT001M19USFJFU0hPTEQgICAgICA4MQorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT002M19USFJFU0hPTEQgICAgICA4MAorI2RlZmluZSBNVUxfVE9PTTQzX1RPX1RPT001NF9USFJFU0hPTEQgICAgICA3NAorCisjZGVmaW5lIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNjcKKyNkZWZpbmUgU1FSX1RPT000X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNjYKKyNkZWZpbmUgU1FSX1RPT002X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyMjIKKyNkZWZpbmUgU1FSX1RPT004X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzMzMKKworI2RlZmluZSBNVUxNSURfVE9PTTQyX1RIUkVTSE9MRCAgICAgICAgICAgICAyMAorCisjZGVmaW5lIE1VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIFNRUk1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDExCisKKyNkZWZpbmUgTVVMX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICAzMTYgIC8qIGsgPSA1ICovCisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICAzMTYsIDV9LCB7ICAgICAxMywgNn0sIHsgICAgICA3LCA1fSwgeyAgICAgMTUsIDZ9LCBcCisgICAgeyAgICAgMTMsIDd9LCB7ICAgICAgNywgNn0sIHsgICAgIDE1LCA3fSwgeyAgICAgIDgsIDZ9LCBcCisgICAgeyAgICAgMTcsIDd9LCB7ICAgICAgOSwgNn0sIHsgICAgIDE5LCA3fSwgeyAgICAgMTcsIDh9LCBcCisgICAgeyAgICAgIDksIDd9LCB7ICAgICAyMCwgOH0sIHsgICAgIDExLCA3fSwgeyAgICAgMjMsIDh9LCBcCisgICAgeyAgICAgMTMsIDl9LCB7ICAgICAgNywgOH0sIHsgICAgIDE5LCA5fSwgeyAgICAgMTEsIDh9LCBcCisgICAgeyAgICAgMjcsIDl9LCB7ICAgICAxNSwgOH0sIHsgICAgIDMzLCA5fSwgeyAgICAgMTksIDh9LCBcCisgICAgeyAgICAgNDEsIDl9LCB7ICAgICAyMywgOH0sIHsgICAgIDQ5LCA5fSwgeyAgICAgMjcsMTB9LCBcCisgICAgeyAgICAgMTUsIDl9LCB7ICAgICAzOSwxMH0sIHsgICAgIDIzLCA5fSwgeyAgICAgNTEsMTF9LCBcCisgICAgeyAgICAgMTUsMTB9LCB7ICAgICAzMSwgOX0sIHsgICAgIDcxLDEwfSwgeyAgICAgMzksIDl9LCBcCisgICAgeyAgICAgODMsMTB9LCB7ICAgICA0NywgOX0sIHsgICAgIDk5LDEwfSwgeyAgICAgNTUsMTF9LCBcCisgICAgeyAgICAgMzEsMTB9LCB7ICAgICA2MywgOX0sIHsgICAgMTI3LCA4fSwgeyAgICAyNTUsIDl9LCBcCisgICAgeyAgICAxMzEsMTB9LCB7ICAgICA3MSwgOH0sIHsgICAgMjg3LDEwfSwgeyAgICAgNzksIDl9LCBcCisgICAgeyAgICAxNTksIDh9LCB7ICAgIDMxOSwxMH0sIHsgICAgIDg3LDExfSwgeyAgICAgNDcsMTB9LCBcCisgICAgeyAgICAgOTUsIDl9LCB7ICAgIDE5MSwgOH0sIHsgICAgMzgzLDEwfSwgeyAgICAxMDMsIDl9LCBcCisgICAgeyAgICAyMDcsIDh9LCB7ICAgIDQxNSwxMH0sIHsgICAgMTExLCA5fSwgeyAgICAyMjMsMTJ9LCBcCisgICAgeyAgICAgMzEsMTF9LCB7ICAgICA2MywgOX0sIHsgICAgMjU1LCA4fSwgeyAgICA1MTEsMTB9LCBcCisgICAgeyAgICAxMzUsIDl9LCB7ICAgIDI4NywgOH0sIHsgICAgNTc1LDExfSwgeyAgICAgNzksMTB9LCBcCisgICAgeyAgICAxNTksIDl9LCB7ICAgIDMxOSwgOH0sIHsgICAgNjM5LDEwfSwgeyAgICAxNzUsIDl9LCBcCisgICAgeyAgICAzNTEsIDh9LCB7ICAgIDcwMywxMX0sIHsgICAgIDk1LDEwfSwgeyAgICAxOTEsIDl9LCBcCisgICAgeyAgICAzODMsIDh9LCB7ICAgIDc2NywxMH0sIHsgICAgMjA3LCA5fSwgeyAgICA0MTUsMTF9LCBcCisgICAgeyAgICAxMTEsMTB9LCB7ICAgIDIyMywgOX0sIHsgICAgNDQ3LDEyfSwgeyAgICAgNjMsMTB9LCBcCisgICAgeyAgICAyNTUsIDl9LCB7ICAgIDUxMSwgOH0sIHsgICAxMDIzLCA5fSwgeyAgICA1NDMsMTB9LCBcCisgICAgeyAgICAyODcsIDl9LCB7ICAgIDU3NSwgOH0sIHsgICAxMTUxLDExfSwgeyAgICAxNTksMTB9LCBcCisgICAgeyAgICAzMTksIDl9LCB7ICAgIDYzOSwxMX0sIHsgICAgMTc1LDEwfSwgeyAgICAzNTEsIDl9LCBcCisgICAgeyAgICA3MDMsIDh9LCB7ICAgMTQwNywxMn0sIHsgICAgIDk1LDExfSwgeyAgICAxOTEsMTB9LCBcCisgICAgeyAgICAzODMsIDl9LCB7ICAgIDc2NywxMX0sIHsgICAgMjA3LDEwfSwgeyAgICA0MTUsIDl9LCBcCisgICAgeyAgICA4MzEsMTF9LCB7ICAgIDIyMywxMH0sIHsgICAgNDQ3LDEzfSwgeyAgIDgxOTIsMTR9LCBcCisgICAgeyAgMTYzODQsMTV9LCB7ICAzMjc2OCwxNn0sIHsgIDY1NTM2LDE3fSwgeyAxMzEwNzIsMTh9LCBcCisgICAgeyAyNjIxNDQsMTl9LCB7IDUyNDI4OCwyMH0sIHsxMDQ4NTc2LDIxfSwgezIwOTcxNTIsMjJ9LCBcCisgICAgezQxOTQzMDQsMjN9LCB7ODM4ODYwOCwyNH0gfQorI2RlZmluZSBNVUxfRkZUX1RBQkxFM19TSVpFIDExOAorI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMzIwMAorCisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgMjcyICAvKiBrID0gNSAqLworI2RlZmluZSBTUVJfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgMjcyLCA1fSwgeyAgICAgMTMsIDZ9LCB7ICAgICAgNywgNX0sIHsgICAgIDE1LCA2fSwgXAorICAgIHsgICAgICA4LCA1fSwgeyAgICAgMTcsIDZ9LCB7ICAgICAxNywgN30sIHsgICAgIDE3LCA4fSwgXAorICAgIHsgICAgICA5LCA3fSwgeyAgICAgMTksIDh9LCB7ICAgICAxMSwgN30sIHsgICAgIDIzLCA4fSwgXAorICAgIHsgICAgIDEzLCA5fSwgeyAgICAgIDcsIDh9LCB7ICAgICAxNSwgN30sIHsgICAgIDMxLCA4fSwgXAorICAgIHsgICAgIDE5LCA5fSwgeyAgICAgMTEsIDh9LCB7ICAgICAyNywgOX0sIHsgICAgIDE1LCA4fSwgXAorICAgIHsgICAgIDMzLCA5fSwgeyAgICAgMTksIDh9LCB7ICAgICAzOSwgOX0sIHsgICAgIDIzLCA4fSwgXAorICAgIHsgICAgIDQ3LCA5fSwgeyAgICAgMjcsMTB9LCB7ICAgICAxNSwgOX0sIHsgICAgIDM5LDEwfSwgXAorICAgIHsgICAgIDIzLCA5fSwgeyAgICAgNDcsMTF9LCB7ICAgICAxNSwxMH0sIHsgICAgIDMxLCA5fSwgXAorICAgIHsgICAgIDY3LDEwfSwgeyAgICAgMzksIDl9LCB7ICAgICA3OSwxMH0sIHsgICAgIDQ3LCA5fSwgXAorICAgIHsgICAgIDk1LCA4fSwgeyAgICAxOTEsMTB9LCB7ICAgICA1NSwxMX0sIHsgICAgIDMxLDEwfSwgXAorICAgIHsgICAgIDYzLCA4fSwgeyAgICAyNTUsMTB9LCB7ICAgICA3MSwgOX0sIHsgICAgMTQzLCA4fSwgXAorICAgIHsgICAgMjg3LDEwfSwgeyAgICAgNzksIDl9LCB7ICAgIDE1OSwxMX0sIHsgICAgIDQ3LDEwfSwgXAorICAgIHsgICAgIDk1LCA5fSwgeyAgICAxOTEsIDh9LCB7ICAgIDM4MywgN30sIHsgICAgNzY3LDEwfSwgXAorICAgIHsgICAgMTAzLCA5fSwgeyAgICAyMDcsMTJ9LCB7ICAgICAzMSwxMX0sIHsgICAgIDYzLCA5fSwgXAorICAgIHsgICAgMjU1LCA4fSwgeyAgICA1MTEsIDd9LCB7ICAgMTAyMywgOX0sIHsgICAgMjcxLDEwfSwgXAorICAgIHsgICAgMTQzLCA5fSwgeyAgICAyODcsMTF9LCB7ICAgICA3OSwxMH0sIHsgICAgMTU5LCA5fSwgXAorICAgIHsgICAgMzE5LCA4fSwgeyAgICA2MzksMTB9LCB7ICAgIDE3NSwgOX0sIHsgICAgMzUxLCA4fSwgXAorICAgIHsgICAgNzAzLDExfSwgeyAgICAgOTUsMTB9LCB7ICAgIDE5MSwgOX0sIHsgICAgMzgzLCA4fSwgXAorICAgIHsgICAgNzY3LDEwfSwgeyAgICAyMDcsIDl9LCB7ICAgIDQxNSwgOH0sIHsgICAgODMxLDEwfSwgXAorICAgIHsgICAgMjIzLDEyfSwgeyAgICAgNjMsMTB9LCB7ICAgIDI1NSwgOX0sIHsgICAgNTExLCA4fSwgXAorICAgIHsgICAxMDIzLDEwfSwgeyAgICAyNzEsMTF9LCB7ICAgIDE0MywxMH0sIHsgICAgMjg3LCA5fSwgXAorICAgIHsgICAgNTc1LCA4fSwgeyAgIDExNTEsMTF9LCB7ICAgIDE1OSwxMH0sIHsgICAgMzE5LCA5fSwgXAorICAgIHsgICAgNjM5LDExfSwgeyAgICAxNzUsMTB9LCB7ICAgIDM1MSwgOX0sIHsgICAgNzAzLDEyfSwgXAorICAgIHsgICAgIDk1LDExfSwgeyAgICAxOTEsMTB9LCB7ICAgIDM4MywgOX0sIHsgICAgNzY3LDExfSwgXAorICAgIHsgICAgMjA3LDEwfSwgeyAgICA0MTUsIDl9LCB7ICAgIDgzMSwxMX0sIHsgICAgMjIzLDEwfSwgXAorICAgIHsgICAgNDQ3LDEzfSwgeyAgIDgxOTIsMTR9LCB7ICAxNjM4NCwxNX0sIHsgIDMyNzY4LDE2fSwgXAorICAgIHsgIDY1NTM2LDE3fSwgeyAxMzEwNzIsMTh9LCB7IDI2MjE0NCwxOX0sIHsgNTI0Mjg4LDIwfSwgXAorICAgIHsxMDQ4NTc2LDIxfSwgezIwOTcxNTIsMjJ9LCB7NDE5NDMwNCwyM30sIHs4Mzg4NjA4LDI0fSB9CisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzX1NJWkUgMTEyCisjZGVmaW5lIFNRUl9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAyNjg4CisKKyNkZWZpbmUgTVVMTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNVUxMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAzOAorI2RlZmluZSBNVUxMT19NVUxfTl9USFJFU0hPTEQgICAgICAgICAgICAgNjI1MworI2RlZmluZSBTUVJMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgNAorI2RlZmluZSBTUVJMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICA2NworI2RlZmluZSBTUVJMT19TUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgNTI0MAorCisjZGVmaW5lIERDX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDQyCisjZGVmaW5lIERDX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAgMTUyCisjZGVmaW5lIERDX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDM5CisjZGVmaW5lIERDX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDkzCisKKyNkZWZpbmUgSU5WX01VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgMzcKKyNkZWZpbmUgSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgICAxNjMKKyNkZWZpbmUgSU5WX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAxNjIKKworI2RlZmluZSBCSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgIDE5NAorI2RlZmluZSBSRURDXzFfVE9fUkVEQ19OX1RIUkVTSE9MRCAgICAgICAgICA0MworCisjZGVmaW5lIE1VX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgOTk4CisjZGVmaW5lIE1VX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAgOTk4CisjZGVmaW5lIE1VUElfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDk4CisjZGVmaW5lIE1VX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgODA3CisjZGVmaW5lIE1VX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAgOTI0CisKKyNkZWZpbmUgUE9XTV9TRUNfVEFCTEUgIDYsMzAsMTk0LDU3OSwxNzMwCisKKyNkZWZpbmUgR0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICAgMjkKKyNkZWZpbmUgU0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICA3ODgKKyNkZWZpbmUgU0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgIDE4MTYKKworI2RlZmluZSBGQUNfRFNDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDIzNgorI2RlZmluZSBGQUNfT0REX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAyNAorCisjZGVmaW5lIE1BVFJJWDIyX1NUUkFTU0VOX1RIUkVTSE9MRCAgICAgICAgIDEwCisjZGVmaW5lIEhHQ0QyX0RJVjFfTUVUSE9EICAgICAgICAgICAgICAgICAgICAxICAvKiA3LjA1JSBmYXN0ZXIgdGhhbiAzICovCisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAgMTAxCisjZGVmaW5lIEhHQ0RfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTA0CisjZGVmaW5lIEhHQ0RfUkVEVUNFX1RIUkVTSE9MRCAgICAgICAgICAgICAxNjc5CisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgMzMwCisjZGVmaW5lIEdDREVYVF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMjQyCisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAgICA0ICAvKiAyMC4wMCUgZmFzdGVyIHRoYW4gMSAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hcm02NC9oYW1kaXN0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtNjQvaGFtZGlzdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcyY2E1NQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtNjQvaGFtZGlzdC5hc20KQEAgLTAsMCArMSwxODEgQEAKK2RubCAgQVJNNjQgTmVvbiBtcG5faGFtZGlzdCAtLSBtcG4gYml0IGhhbW1pbmcgZGlzdGFuY2UuCisKK2RubCAgQ29weXJpZ2h0IDIwMTMsIDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIENvcnRleC1BNTMJIDQuNQorQyBDb3J0ZXgtQTU3CSAxLjkKK0MgWC1HZW5lCSA0LjM2CisKK0MgVE9ETworQyAgKiBDb25zaWRlciBncmVhdGVyIHVucm9sbGluZy4KK0MgICogQXJyYW5nZSB0byBhbGlnbiB0aGUgcG9pbnRlciwgaWYgdGhhdCBoZWxwcyBwZXJmb3JtYW5jZS4gIFVzZSB0aGUgc2FtZQorQyAgICByZWFkLWFuZC1tYXNrIHRyaWNrIHdlIHVzZSBvbiBQQ3MsIGZvciBzaW1wbGljaXR5IGFuZCBwZXJmb3JtYW5jZS4gIChTb3JyeQorQyAgICB2YWxncmluZCEpCitDICAqIEV4cGxvcmUgaWYgZXhwbGljaXQgYWxpZ24gZGlyZWN0aXZlcywgZS5nLiwgIltwdHI6MTI4XSIgaGVscC4KK0MgICogU2VlIHJ0aCdzIGdtcC1kZXZlbCAyMDEzLTAyLzAzIG1lc3NhZ2VzIGFib3V0IGZpbmFsIHN1bW1hdGlvbiB0cmlja3MuCisKK2NoYW5nZWNvbShibGFoKQorCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgYXAnLCB4MCkKK2RlZmluZShgYnAnLCB4MSkKK2RlZmluZShgbicsICB4MikKKworQyBXZSBzdW0gaW50byAxNiAxNi1iaXQgY291bnRlcnMgaW4gdjQsdjUsIGJ1dCBhdCB0aGUgZW5kIHdlIHN1bSB0aGVtIGFuZCBlbmQKK0MgdXAgd2l0aCA4IDE2LWJpdCBjb3VudGVycy4gIFRoZXJlZm9yZSwgd2UgY2FuIHN1bSB0byA4KDJeMTYtMSkgYml0cywgb3IKK0MgKDgqMl4xNi0xKS82NCA9IDB4MWZmZiBsaW1icy4gIFdlIHVzZSBhIGNodW5rc2l6ZSBjbG9zZSB0byB0aGF0LCBidXQgd2hpY2gKK0MgIGFsbG93cyB0aGUgaHVnZSBjb3VudCBjb2RlIHRvIGp1bXAgZGVlcCBpbnRvIHRoZSBjb2RlIChhdCBMKGNodSkpLgorCitkZWZpbmUoYG1heHNpemUnLCAgMHgxZmZmKQorZGVmaW5lKGBjaHVua3NpemUnLDB4MWZmMCkKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9oYW1kaXN0KQorCisJbW92CXgxMSwgI21heHNpemUKKwljbXAJbiwgeDExCisJYi5oaQlMKGd0OGspCisKK0wobHQ4ayk6CisJbW92aQl2NC4xNmIsICMwCQkJQyBjbGVhciBzdW1tYXRpb24gcmVnaXN0ZXIKKwltb3ZpCXY1LjE2YiwgIzAJCQlDIGNsZWFyIHN1bW1hdGlvbiByZWdpc3RlcgorCisJdGJ6CW4sICMwLCBMKHh4MCkKKwlzdWIJbiwgbiwgIzEKKwlsZDEJe3YwLjFkfSwgW2FwXSwgIzgJCUMgbG9hZCAxIGxpbWIKKwlsZDEJe3YxNi4xZH0sIFticF0sICM4CQlDIGxvYWQgMSBsaW1iCisJZW9yCXYwLjE2YiwgdjAuMTZiLCB2MTYuMTZiCisJY250CXY2LjE2YiwgdjAuMTZiCisJdWFkYWxwCXY0LjhoLCAgdjYuMTZiCQkJQyBjb3VsZCBhbHNvIHNwbGF0CisKK0woeHgwKToJdGJ6CW4sICMxLCBMKHgwMCkKKwlzdWIJbiwgbiwgIzIKKwlsZDEJe3YwLjJkfSwgW2FwXSwgIzE2CQlDIGxvYWQgMiBsaW1icworCWxkMQl7djE2LjJkfSwgW2JwXSwgIzE2CQlDIGxvYWQgMiBsaW1icworCWVvcgl2MC4xNmIsIHYwLjE2YiwgdjE2LjE2YgorCWNudAl2Ni4xNmIsIHYwLjE2YgorCXVhZGFscAl2NC44aCwgIHY2LjE2YgorCitMKHgwMCk6CXRiegluLCAjMiwgTCgwMDApCisJc3VicwluLCBuLCAjNAorCWxkMQl7djAuMmQsdjEuMmR9LCBbYXBdLCAjMzIJQyBsb2FkIDQgbGltYnMKKwlsZDEJe3YxNi4yZCx2MTcuMmR9LCBbYnBdLCAjMzIJQyBsb2FkIDQgbGltYnMKKwliLmxzCUwoc3VtKQorCitMKGd0NCk6CWxkMQl7djIuMmQsdjMuMmR9LCBbYXBdLCAjMzIJQyBsb2FkIDQgbGltYnMKKwlsZDEJe3YxOC4yZCx2MTkuMmR9LCBbYnBdLCAjMzIJQyBsb2FkIDQgbGltYnMKKwllb3IJdjAuMTZiLCB2MC4xNmIsIHYxNi4xNmIKKwllb3IJdjEuMTZiLCB2MS4xNmIsIHYxNy4xNmIKKwlzdWIJbiwgbiwgIzQKKwljbnQJdjYuMTZiLCB2MC4xNmIKKwljbnQJdjcuMTZiLCB2MS4xNmIKKwliCUwobWlkKQorCitMKDAwMCk6CXN1YnMJbiwgbiwgIzgKKwliLmxvCUwoZTApCisKK0woY2h1KToJbGQxCXt2Mi4yZCx2My4yZH0sIFthcF0sICMzMglDIGxvYWQgNCBsaW1icworCWxkMQl7djAuMmQsdjEuMmR9LCBbYXBdLCAjMzIJQyBsb2FkIDQgbGltYnMKKwlsZDEJe3YxOC4yZCx2MTkuMmR9LCBbYnBdLCAjMzIJQyBsb2FkIDQgbGltYnMKKwlsZDEJe3YxNi4yZCx2MTcuMmR9LCBbYnBdLCAjMzIJQyBsb2FkIDQgbGltYnMKKwllb3IJdjIuMTZiLCB2Mi4xNmIsIHYxOC4xNmIKKwllb3IJdjMuMTZiLCB2My4xNmIsIHYxOS4xNmIKKwljbnQJdjYuMTZiLCB2Mi4xNmIKKwljbnQJdjcuMTZiLCB2My4xNmIKKwlzdWJzCW4sIG4sICM4CisJYi5sbwlMKGVuZCkKKworTCh0b3ApOglsZDEJe3YyLjJkLHYzLjJkfSwgW2FwXSwgIzMyCUMgbG9hZCA0IGxpbWJzCisJbGQxCXt2MTguMmQsdjE5LjJkfSwgW2JwXSwgIzMyCUMgbG9hZCA0IGxpbWJzCisJZW9yCXYwLjE2YiwgdjAuMTZiLCB2MTYuMTZiCisJZW9yCXYxLjE2YiwgdjEuMTZiLCB2MTcuMTZiCisJdWFkYWxwCXY0LjhoLCAgdjYuMTZiCisJY250CXY2LjE2YiwgdjAuMTZiCisJdWFkYWxwCXY1LjhoLCAgdjcuMTZiCisJY250CXY3LjE2YiwgdjEuMTZiCitMKG1pZCk6CWxkMQl7djAuMmQsdjEuMmR9LCBbYXBdLCAjMzIJQyBsb2FkIDQgbGltYnMKKwlsZDEJe3YxNi4yZCx2MTcuMmR9LCBbYnBdLCAjMzIJQyBsb2FkIDQgbGltYnMKKwllb3IJdjIuMTZiLCB2Mi4xNmIsIHYxOC4xNmIKKwllb3IJdjMuMTZiLCB2My4xNmIsIHYxOS4xNmIKKwlzdWJzCW4sIG4sICM4CisJdWFkYWxwCXY0LjhoLCAgdjYuMTZiCisJY250CXY2LjE2YiwgdjIuMTZiCisJdWFkYWxwCXY1LjhoLCAgdjcuMTZiCisJY250CXY3LjE2YiwgdjMuMTZiCisJYi5ocwlMKHRvcCkKKworTChlbmQpOgl1YWRhbHAJdjQuOGgsICB2Ni4xNmIKKwl1YWRhbHAJdjUuOGgsICB2Ny4xNmIKK0woc3VtKToJZW9yCXYwLjE2YiwgdjAuMTZiLCB2MTYuMTZiCisJZW9yCXYxLjE2YiwgdjEuMTZiLCB2MTcuMTZiCisJY250CXY2LjE2YiwgdjAuMTZiCisJY250CXY3LjE2YiwgdjEuMTZiCisJdWFkYWxwCXY0LjhoLCAgdjYuMTZiCisJdWFkYWxwCXY1LjhoLCAgdjcuMTZiCisJYWRkCXY0LjhoLCB2NC44aCwgdjUuOGgKKwkJCQkJQyB3ZSBoYXZlIDggMTYtYml0IGNvdW50cworTChlMCk6CXVhZGRscAl2NC40cywgIHY0LjhoCQlDIHdlIGhhdmUgNCAzMi1iaXQgY291bnRzCisJdWFkZGxwCXY0LjJkLCAgdjQuNHMJCUMgd2UgaGF2ZSAyIDY0LWJpdCBjb3VudHMKKwltb3YJeDAsIHY0LmRbMF0KKwltb3YJeDEsIHY0LmRbMV0KKwlhZGQJeDAsIHgwLCB4MQorCXJldAorCitDIENvZGUgZm9yIGNvdW50ID4gbWF4c2l6ZS4gIFNwbGl0cyBvcGVyYW5kIGFuZCBjYWxscyBhYm92ZSBjb2RlLgorZGVmaW5lKGBhcDInLCB4NSkJCQlDIGNhbGxlci1zYXZlcyByZWcgbm90IHVzZWQgYWJvdmUKK2RlZmluZShgYnAyJywgeDYpCQkJQyBjYWxsZXItc2F2ZXMgcmVnIG5vdCB1c2VkIGFib3ZlCitMKGd0OGspOgorCW1vdgl4OCwgeDMwCisJbW92CXg3LCBuCQkJQyBmdWxsIGNvdW50IChjYWxsZXItc2F2ZXMgcmVnIG5vdCB1c2VkIGFib3ZlKQorCW1vdgl4NCwgIzAJCQlDIHRvdGFsIHN1bSAgKGNhbGxlci1zYXZlcyByZWcgbm90IHVzZWQgYWJvdmUpCisJbW92CXg5LCAjY2h1bmtzaXplKjgJQyBjYWxsZXItc2F2ZXMgcmVnIG5vdCB1c2VkIGFib3ZlCisJbW92CXgxMCwgI2NodW5rc2l6ZQkJQyBjYWxsZXItc2F2ZXMgcmVnIG5vdCB1c2VkIGFib3ZlCisKKzE6CWFkZAlhcDIsIGFwLCB4OQkJQyBwb2ludCBhdCBzdWJzZXF1ZW50IGJsb2NrCisJYWRkCWJwMiwgYnAsIHg5CQlDIHBvaW50IGF0IHN1YnNlcXVlbnQgYmxvY2sKKwltb3YJbiwgI2NodW5rc2l6ZS04CQlDIGNvdW50IGZvciB0aGlzIGludm9jYXRpb24sIGFkanVzdGVkIGZvciBlbnRyeSBwdAorCW1vdmkJdjQuMTZiLCAjMAkJQyBjbGVhciBjaHVuayBzdW1tYXRpb24gcmVnaXN0ZXIKKwltb3ZpCXY1LjE2YiwgIzAJCUMgY2xlYXIgY2h1bmsgc3VtbWF0aW9uIHJlZ2lzdGVyCisJYmwJTChjaHUpCQkJQyBqdW1wIGRlZXAgaW5zaWRlIGNvZGUKKwlhZGQJeDQsIHg0LCB4MAorCW1vdglhcCwgYXAyCQkJQyBwdXQgY2h1bmsgcG9pbnRlciBpbiBwbGFjZSBmb3IgY2FsbHMKKwltb3YJYnAsIGJwMgkJCUMgcHV0IGNodW5rIHBvaW50ZXIgaW4gcGxhY2UgZm9yIGNhbGxzCisJc3ViCXg3LCB4NywgeDEwCisJY21wCXg3LCB4MTEKKwliLmhpCTFiCisKKwltb3YJbiwgeDcJCQlDIGNvdW50IGZvciBmaW5hbCBpbnZvY2F0aW9uCisJYmwJTChsdDhrKQorCWFkZAl4MCwgeDQsIHgwCisJbW92CXgzMCwgeDgKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtNjQvaW52ZXJ0X2xpbWIuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm02NC9pbnZlcnRfbGltYi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk0YjBlOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtNjQvaW52ZXJ0X2xpbWIuYXNtCkBAIC0wLDAgKzEsODMgQEAKK2RubCAgQVJNNjQgbXBuX2ludmVydF9saW1iIC0tIEludmVydCBhIG5vcm1hbGl6ZWQgbGltYi4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICAgICBjeWNsZXMvbGltYgorQyBDb3J0ZXgtQTUzICAgICA/CitDIENvcnRleC1BNTcgICAgID8KKworQyBDb21waWxlciBnZW5lcmF0ZWQsIG1pbGRseSBlZGl0ZWQuICBDb3VsZCBzdXJlbHkgYmUgZnVydGhlciBvcHRpbWlzZWQuCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5faW52ZXJ0X2xpbWIpCisJbHNyCXgyLCB4MCwgIzU0CisJYWRycAl4MSwgYXBwcm94X3RhYgorCWFuZAl4MiwgeDIsICMweDFmZQorCWFkZAl4MSwgeDEsIDpsbzEyOmFwcHJveF90YWIKKwlsZHJoCXczLCBbeDEseDJdCisJbHNyCXg0LCB4MCwgIzI0CisJYWRkCXg0LCB4NCwgIzEKKwl1YmZpegl4MiwgeDMsICMxMSwgIzE2CisJdW11bGwJeDMsIHczLCB3MworCW11bAl4MywgeDMsIHg0CisJc3ViCXgyLCB4MiwgIzEKKwlzdWIJeDIsIHgyLCB4MywgbHNyICM0MAorCWxzbAl4MywgeDIsICM2MAorCW11bAl4MSwgeDIsIHgyCisJbXN1Ygl4MSwgeDEsIHg0LCB4MworCWxzbAl4MiwgeDIsICMxMworCWFkZAl4MSwgeDIsIHgxLCBsc3IgIzQ3CisJYW5kCXgyLCB4MCwgIzEKKwluZWcJeDMsIHgyCisJYW5kCXgzLCB4MywgeDEsIGxzciAjMQorCWFkZAl4MiwgeDIsIHgwLCBsc3IgIzEKKwltc3ViCXgyLCB4MSwgeDIsIHgzCisJdW11bGgJeDIsIHgyLCB4MQorCWxzbAl4MSwgeDEsICMzMQorCWFkZAl4MSwgeDEsIHgyLCBsc3IgIzEKKwltdWwJeDMsIHgxLCB4MAorCXVtdWxoCXgyLCB4MSwgeDAKKwlhZGRzCXg0LCB4MywgeDAKKwlhZGMJeDAsIHgyLCB4MAorCXN1Ygl4MCwgeDEsIHgwCisJcmV0CitFUElMT0dVRSgpCisKKwlST0RBVEEKKwlBTElHTigyKQorCVRZUEUoICAgYXBwcm94X3RhYiwgb2JqZWN0KQorCVNJWkUoICAgYXBwcm94X3RhYiwgNTEyKQorYXBwcm94X3RhYjoKK2Zvcmxvb3AoaSwyNTYsNTEyLTEsZG5sCitgCS5od29yZAlldmFsKDB4N2ZkMDAvaSkKKycpZG5sCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybTY0L2xvZ29wc19uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtNjQvbG9nb3BzX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYWVjOWMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybTY0L2xvZ29wc19uLmFzbQpAQCAtMCwwICsxLDEzOSBAQAorZG5sICBBUk02NCBtcG5fYW5kX24sIG1wbl9hbmRuX24uIG1wbl9uYW5kX24sIGV0Yy4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYiAgICAgY3ljbGVzL2xpbWIKK0MJICAgICAgbmFuZCxuaW9yCSAgICAgIGFsbCBvdGhlcgorQyBDb3J0ZXgtQTUzCTMuMjUtMy41CTIuNzUtMworQyBDb3J0ZXgtQTU3CSAyLjAJCSAxLjUKK0MgWC1HZW5lCSAyLjE0CQkgMi4wCisKK2NoYW5nZWNvbShibGFoKQorCitkZWZpbmUoYHJwJywgYHgwJykKK2RlZmluZShgdXAnLCBgeDEnKQorZGVmaW5lKGB2cCcsIGB4MicpCitkZWZpbmUoYG4nLCAgYHgzJykKKworZGVmaW5lKGBQT1NUT1AnLCBgZG5sJykKKworaWZkZWYoYE9QRVJBVElPTl9hbmRfbicsYAorICBkZWZpbmUoYGZ1bmMnLCAgICBgbXBuX2FuZF9uJykKKyAgZGVmaW5lKGBMT0dPUCcsICAgYGFuZAkkMSwgJDIsICQzJyknKQoraWZkZWYoYE9QRVJBVElPTl9hbmRuX24nLGAKKyAgZGVmaW5lKGBmdW5jJywgICAgYG1wbl9hbmRuX24nKQorICBkZWZpbmUoYExPR09QJywgICBgYmljCSQxLCAkMiwgJDMnKScpCitpZmRlZihgT1BFUkFUSU9OX25hbmRfbicsYAorICBkZWZpbmUoYGZ1bmMnLCAgICBgbXBuX25hbmRfbicpCisgIGRlZmluZShgUE9TVE9QJywgIGBtdm4JJDEsICQxJykKKyAgZGVmaW5lKGBMT0dPUCcsICAgYGFuZAkkMSwgJDIsICQzJyknKQoraWZkZWYoYE9QRVJBVElPTl9pb3JfbicsYAorICBkZWZpbmUoYGZ1bmMnLCAgICBgbXBuX2lvcl9uJykKKyAgZGVmaW5lKGBMT0dPUCcsICAgYG9ycgkkMSwgJDIsICQzJyknKQoraWZkZWYoYE9QRVJBVElPTl9pb3JuX24nLGAKKyAgZGVmaW5lKGBmdW5jJywgICAgYG1wbl9pb3JuX24nKQorICBkZWZpbmUoYExPR09QJywgICBgb3JuCSQxLCAkMiwgJDMnKScpCitpZmRlZihgT1BFUkFUSU9OX25pb3JfbicsYAorICBkZWZpbmUoYGZ1bmMnLCAgICBgbXBuX25pb3JfbicpCisgIGRlZmluZShgUE9TVE9QJywgIGBtdm4JJDEsICQxJykKKyAgZGVmaW5lKGBMT0dPUCcsICAgYG9ycgkkMSwgJDIsICQzJyknKQoraWZkZWYoYE9QRVJBVElPTl94b3JfbicsYAorICBkZWZpbmUoYGZ1bmMnLCAgICBgbXBuX3hvcl9uJykKKyAgZGVmaW5lKGBMT0dPUCcsICAgYGVvcgkkMSwgJDIsICQzJyknKQoraWZkZWYoYE9QRVJBVElPTl94bm9yX24nLGAKKyAgZGVmaW5lKGBmdW5jJywgICAgYG1wbl94bm9yX24nKQorICBkZWZpbmUoYExPR09QJywgICBgZW9uCSQxLCAkMiwgJDMnKScpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FuZF9uIG1wbl9hbmRuX24gbXBuX25hbmRfbiBtcG5faW9yX24gbXBuX2lvcm5fbiBtcG5fbmlvcl9uIG1wbl94b3JfbiBtcG5feG5vcl9uKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUoZnVuYykKKwlsc3IJeDE4LCBuLCAjMgorCXRiegluLCAjMCwgTChieDApCisKK0woYngxKToJbGRyCXg3LCBbdXBdCisJbGRyCXgxMSwgW3ZwXQorCUxPR09QKAl4MTUsIHg3LCB4MTEpCisJUE9TVE9QKAl4MTUpCisJc3RyCXgxNSwgW3JwXSwjOAorCXRibnoJbiwgIzEsIEwoYjExKQorCitMKGIwMSk6CWNiegl4MTgsIEwocmV0KQorCWxkcAl4NCwgeDUsIFt1cCwjOF0KKwlsZHAJeDgsIHg5LCBbdnAsIzhdCisJc3ViCXVwLCB1cCwgIzgKKwlzdWIJdnAsIHZwLCAjOAorCWIJTChtaWQpCisKK0woYjExKToJbGRwCXg2LCB4NywgW3VwLCM4XQorCWxkcAl4MTAsIHgxMSwgW3ZwLCM4XQorCWFkZAl1cCwgdXAsICM4CisJYWRkCXZwLCB2cCwgIzgKKwljYnoJeDE4LCBMKGVuZCkKKwliCUwodG9wKQorCitMKGJ4MCk6CXRibnoJbiwgIzEsIEwoYjEwKQorCitMKGIwMCk6CWxkcAl4NCwgeDUsIFt1cF0sIy0xNgorCWxkcAl4OCwgeDksIFt2cF0sIy0xNgorCWIJTChtaWQpCisKK0woYjEwKToJbGRwCXg2LCB4NywgW3VwXQorCWxkcAl4MTAsIHgxMSwgW3ZwXQorCWNiegl4MTgsIEwoZW5kKQorCisJQUxJR04oMTYpCitMKHRvcCk6CWxkcAl4NCwgeDUsIFt1cCwjMTZdCisJbGRwCXg4LCB4OSwgW3ZwLCMxNl0KKwlMT0dPUCgJeDEyLCB4NiwgeDEwKQorCUxPR09QKAl4MTMsIHg3LCB4MTEpCisJUE9TVE9QKAl4MTIpCisJUE9TVE9QKAl4MTMpCisJc3RwCXgxMiwgeDEzLCBbcnBdLCMxNgorTChtaWQpOglsZHAJeDYsIHg3LCBbdXAsIzMyXSEKKwlsZHAJeDEwLCB4MTEsIFt2cCwjMzJdIQorCUxPR09QKAl4MTIsIHg0LCB4OCkKKwlMT0dPUCgJeDEzLCB4NSwgeDkpCisJUE9TVE9QKAl4MTIpCisJUE9TVE9QKAl4MTMpCisJc3RwCXgxMiwgeDEzLCBbcnBdLCMxNgorCXN1Ygl4MTgsIHgxOCwgIzEKKwljYm56CXgxOCwgTCh0b3ApCisKK0woZW5kKToJTE9HT1AoCXgxMiwgeDYsIHgxMCkKKwlMT0dPUCgJeDEzLCB4NywgeDExKQorCVBPU1RPUCgJeDEyKQorCVBPU1RPUCgJeDEzKQorCXN0cAl4MTIsIHgxMywgW3JwXQorTChyZXQpOglyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtNjQvbHNoaWZ0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtNjQvbHNoaWZ0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzJiN2VjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm02NC9sc2hpZnQuYXNtCkBAIC0wLDAgKzEsMTI3IEBACitkbmwgIEFSTTY0IG1wbl9sc2hpZnQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTMsIDIwMTQsIDIwMTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorZG5sICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKK2RubCAgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK2RubCAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYiAgIGFzc3VtZWQgb3B0aW1hbCBjL2wKK0MgQ29ydGV4LUE1MwkzLjUtNC4wCQkgMy4yNQorQyBDb3J0ZXgtQTU3CSAyLjAJCSAyLjAKK0MgWC1HZW5lCSAyLjY3CQkgMi41CisKK0MgVE9ETworQyAgKiBUaGUgZmVlZC1pbiBjb2RlIHVzZWQgMSBsZHIgZm9yIG9kZCBzaXplZCBhbmQgMiBsZHIgZm9yIGV2ZW4gc2l6ZXMuICBUaGVzZQorQyAgICBudW1iZXJzIHNob3VsZCBiZSAxIGFuZCAwLCByZXNwZWN0aXZlbHkuICBUaGUgc3RyIGluIHdpbmQtZG93biBzaG91bGQgYWxzbworQyAgICBnby4KK0MgICogVXNpbmcgZXh0ciBhbmQgd2l0aCA2MyBzZXBhcmF0ZSBsb29wcyB3ZSBtaWdodCByZWFjaCAxLjI1IGMvbCBvbiBBNTcuCitDICAqIEE1MydzIHNwZWVkIGRlcGVuZHMgb24gYWxpZ25tZW50LCB0dW5lL3NwZWVkIC13MSBnaXZlcyAzLjUsIC13MCBnaXZlcyA0LjAuCisKK2NoYW5nZWNvbShibGFoKQorCitkZWZpbmUoYHJwX2FyZycsIGB4MCcpCitkZWZpbmUoYHVwJywgICAgIGB4MScpCitkZWZpbmUoYG4nLCAgICAgIGB4MicpCitkZWZpbmUoYGNudCcsICAgIGB4MycpCisKK2RlZmluZShgcnAnLCAgICAgYHgxNicpCisKK2RlZmluZShgdG5jJyxgeDgnKQorCitkZWZpbmUoYFBTSElGVCcsIGxzbCkKK2RlZmluZShgTlNISUZUJywgbHNyKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2xzaGlmdCkKKwlhZGQJcnAsIHJwX2FyZywgbiwgbHNsICMzCisJYWRkCXVwLCB1cCwgbiwgbHNsICMzCisJc3ViCXRuYywgeHpyLCBjbnQKKwlsc3IJeDE4LCBuLCAjMgorCXRiegluLCAjMCwgTChieDApCisKK0woYngxKToJbGRyCXg0LCBbdXAsIy04XQorCXRibnoJbiwgIzEsIEwoYjExKQorCitMKGIwMSk6CU5TSElGVAl4MCwgeDQsIHRuYworCVBTSElGVAl4MiwgeDQsIGNudAorCWNibnoJeDE4LCBMKGd0MSkKKwlzdHIJeDIsIFtycCwjLThdCisJcmV0CitMKGd0MSk6CWxkcAl4NCwgeDUsIFt1cCwjLTI0XQorCXN1Ygl1cCwgdXAsICM4CisJYWRkCXJwLCBycCwgIzE2CisJYglMKGxvMikKKworTChiMTEpOglOU0hJRlQJeDAsIHg0LCB0bmMKKwlQU0hJRlQJeDIsIHg0LCBjbnQKKwlsZHAJeDYsIHg3LCBbdXAsIy0yNF0hCisJYglMKGxvMykKKworTChieDApOglsZHAJeDQsIHg1LCBbdXAsIy0xNl0KKwl0YnoJbiwgIzEsIEwoYjAwKQorCitMKGIxMCk6CU5TSElGVAl4MCwgeDUsIHRuYworCVBTSElGVAl4MTMsIHg1LCBjbnQKKwlOU0hJRlQJeDEwLCB4NCwgdG5jCisJUFNISUZUCXgyLCB4NCwgY250CisJY2Juegl4MTgsIEwoZ3QyKQorCW9ycgl4MTAsIHgxMCwgeDEzCisJc3RwCXgyLCB4MTAsIFtycCwjLTE2XQorCXJldAorTChndDIpOglsZHAJeDQsIHg1LCBbdXAsIy0zMl0KKwlvcnIJeDEwLCB4MTAsIHgxMworCXN0cgl4MTAsIFtycCwjLThdCisJc3ViCXVwLCB1cCwgIzE2CisJYWRkCXJwLCBycCwgIzgKKwliCUwobG8yKQorCitMKGIwMCk6CU5TSElGVAl4MCwgeDUsIHRuYworCVBTSElGVAl4MTMsIHg1LCBjbnQKKwlOU0hJRlQJeDEwLCB4NCwgdG5jCisJUFNISUZUCXgyLCB4NCwgY250CisJbGRwCXg2LCB4NywgW3VwLCMtMzJdIQorCW9ycgl4MTAsIHgxMCwgeDEzCisJc3RyCXgxMCwgW3JwLCMtOF0hCisJYglMKGxvMCkKKworCUFMSUdOKDE2KQorTCh0b3ApOglsZHAJeDQsIHg1LCBbdXAsIy0xNl0KKwlvcnIJeDEwLCB4MTAsIHgxMworCW9ycgl4MTEsIHgxMiwgeDIKKwlzdHAJeDEwLCB4MTEsIFtycCwjLTE2XQorCVBTSElGVAl4MiwgeDYsIGNudAorTChsbzIpOglOU0hJRlQJeDEwLCB4NCwgdG5jCisJUFNISUZUCXgxMywgeDUsIGNudAorCU5TSElGVAl4MTIsIHg1LCB0bmMKKwlsZHAJeDYsIHg3LCBbdXAsIy0zMl0hCisJb3JyCXgxMCwgeDEwLCB4MTMKKwlvcnIJeDExLCB4MTIsIHgyCisJc3RwCXgxMCwgeDExLCBbcnAsIy0zMl0hCisJUFNISUZUCXgyLCB4NCwgY250CitMKGxvMCk6CXN1Ygl4MTgsIHgxOCwgIzEKK0wobG8zKToJTlNISUZUCXgxMCwgeDYsIHRuYworCVBTSElGVAl4MTMsIHg3LCBjbnQKKwlOU0hJRlQJeDEyLCB4NywgdG5jCisJY2Juegl4MTgsIEwodG9wKQorCitMKGVuZCk6CW9ycgl4MTAsIHgxMCwgeDEzCisJb3JyCXgxMSwgeDEyLCB4MgorCVBTSElGVAl4MiwgeDYsIGNudAorCXN0cAl4MTAsIHgxMSwgW3JwLCMtMTZdCisJc3RyCXgyLCBbcnAsIy0yNF0KKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtNjQvbHNoaWZ0Yy5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybTY0L2xzaGlmdGMuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNGM0Y2UKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybTY0L2xzaGlmdGMuYXNtCkBAIC0wLDAgKzEsMTMwIEBACitkbmwgIEFSTTY0IG1wbl9sc2hpZnRjLgorCitkbmwgIENvcHlyaWdodCAyMDEzLCAyMDE0LCAyMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKK2RubCAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CitkbmwgIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitkbmwgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIgICBhc3N1bWVkIG9wdGltYWwgYy9sCitDIENvcnRleC1BNTMJMy41LTQuMAkJIDMuMjUKK0MgQ29ydGV4LUE1NwkgMi4wCQkgMi4wCitDIFgtR2VuZQkgMi42NwkJIDIuNQorCitDIFRPRE8KK0MgICogVGhlIGZlZWQtaW4gY29kZSB1c2VkIDEgbGRyIGZvciBvZGQgc2l6ZWQgYW5kIDIgbGRyIGZvciBldmVuIHNpemVzLiAgVGhlc2UKK0MgICAgbnVtYmVycyBzaG91bGQgYmUgMSBhbmQgMCwgcmVzcGVjdGl2ZWx5LiAgVGhlIHN0ciBpbiB3aW5kLWRvd24gc2hvdWxkIGFsc28KK0MgICAgZ28uCitDICAqIFVzaW5nIGV4dHIgYW5kIHdpdGggNjMgc2VwYXJhdGUgbG9vcHMgd2UgbWlnaHQgcmVhY2ggMS41IGMvbCBvbiBBNTcuCitDICAqIEE1MydzIHNwZWVkIGRlcGVuZHMgb24gYWxpZ25tZW50LCB0dW5lL3NwZWVkIC13MSBnaXZlcyAzLjUsIC13MCBnaXZlcyA0LjAuCisKK2NoYW5nZWNvbShibGFoKQorCitkZWZpbmUoYHJwX2FyZycsIGB4MCcpCitkZWZpbmUoYHVwJywgICAgIGB4MScpCitkZWZpbmUoYG4nLCAgICAgIGB4MicpCitkZWZpbmUoYGNudCcsICAgIGB4MycpCisKK2RlZmluZShgcnAnLCAgICAgYHgxNicpCisKK2RlZmluZShgdG5jJyxgeDgnKQorCitkZWZpbmUoYFBTSElGVCcsIGxzbCkKK2RlZmluZShgTlNISUZUJywgbHNyKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2xzaGlmdGMpCisJYWRkCXJwLCBycF9hcmcsIG4sIGxzbCAjMworCWFkZAl1cCwgdXAsIG4sIGxzbCAjMworCXN1Ygl0bmMsIHh6ciwgY250CisJbHNyCXgxOCwgbiwgIzIKKwl0YnoJbiwgIzAsIEwoYngwKQorCitMKGJ4MSk6CWxkcgl4NCwgW3VwLCMtOF0KKwl0Ym56CW4sICMxLCBMKGIxMSkKKworTChiMDEpOglOU0hJRlQJeDAsIHg0LCB0bmMKKwlQU0hJRlQJeDIsIHg0LCBjbnQKKwljYm56CXgxOCwgTChndDEpCisJbXZuCXgyLCB4MgorCXN0cgl4MiwgW3JwLCMtOF0KKwlyZXQKK0woZ3QxKToJbGRwCXg0LCB4NSwgW3VwLCMtMjRdCisJc3ViCXVwLCB1cCwgIzgKKwlhZGQJcnAsIHJwLCAjMTYKKwliCUwobG8yKQorCitMKGIxMSk6CU5TSElGVAl4MCwgeDQsIHRuYworCVBTSElGVAl4MiwgeDQsIGNudAorCWxkcAl4NiwgeDcsIFt1cCwjLTI0XSEKKwliCUwobG8zKQorCitMKGJ4MCk6CWxkcAl4NCwgeDUsIFt1cCwjLTE2XQorCXRiegluLCAjMSwgTChiMDApCisKK0woYjEwKToJTlNISUZUCXgwLCB4NSwgdG5jCisJUFNISUZUCXgxMywgeDUsIGNudAorCU5TSElGVAl4MTAsIHg0LCB0bmMKKwlQU0hJRlQJeDIsIHg0LCBjbnQKKwljYm56CXgxOCwgTChndDIpCisJZW9uCXgxMCwgeDEwLCB4MTMKKwltdm4JeDIsIHgyCisJc3RwCXgyLCB4MTAsIFtycCwjLTE2XQorCXJldAorTChndDIpOglsZHAJeDQsIHg1LCBbdXAsIy0zMl0KKwllb24JeDEwLCB4MTAsIHgxMworCXN0cgl4MTAsIFtycCwjLThdCisJc3ViCXVwLCB1cCwgIzE2CisJYWRkCXJwLCBycCwgIzgKKwliCUwobG8yKQorCitMKGIwMCk6CU5TSElGVAl4MCwgeDUsIHRuYworCVBTSElGVAl4MTMsIHg1LCBjbnQKKwlOU0hJRlQJeDEwLCB4NCwgdG5jCisJUFNISUZUCXgyLCB4NCwgY250CisJbGRwCXg2LCB4NywgW3VwLCMtMzJdIQorCWVvbgl4MTAsIHgxMCwgeDEzCisJc3RyCXgxMCwgW3JwLCMtOF0hCisJYglMKGxvMCkKKworCUFMSUdOKDE2KQorTCh0b3ApOglsZHAJeDQsIHg1LCBbdXAsIy0xNl0KKwllb24JeDEwLCB4MTAsIHgxMworCWVvbgl4MTEsIHgxMiwgeDIKKwlzdHAJeDEwLCB4MTEsIFtycCwjLTE2XQorCVBTSElGVAl4MiwgeDYsIGNudAorTChsbzIpOglOU0hJRlQJeDEwLCB4NCwgdG5jCisJUFNISUZUCXgxMywgeDUsIGNudAorCU5TSElGVAl4MTIsIHg1LCB0bmMKKwlsZHAJeDYsIHg3LCBbdXAsIy0zMl0hCisJZW9uCXgxMCwgeDEwLCB4MTMKKwllb24JeDExLCB4MTIsIHgyCisJc3RwCXgxMCwgeDExLCBbcnAsIy0zMl0hCisJUFNISUZUCXgyLCB4NCwgY250CitMKGxvMCk6CXN1Ygl4MTgsIHgxOCwgIzEKK0wobG8zKToJTlNISUZUCXgxMCwgeDYsIHRuYworCVBTSElGVAl4MTMsIHg3LCBjbnQKKwlOU0hJRlQJeDEyLCB4NywgdG5jCisJY2Juegl4MTgsIEwodG9wKQorCitMKGVuZCk6CWVvbgl4MTAsIHgxMCwgeDEzCisJZW9uCXgxMSwgeDEyLCB4MgorCVBTSElGVAl4MiwgeDYsIGNudAorCXN0cAl4MTAsIHgxMSwgW3JwLCMtMTZdCisJbXZuCXgyLCB4MgorCXN0cgl4MiwgW3JwLCMtMjRdCisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybTY0L21vZF8zNGxzdWIxLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtNjQvbW9kXzM0bHN1YjEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NDVmZTcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybTY0L21vZF8zNGxzdWIxLmFzbQpAQCAtMCwwICsxLDEyNCBAQAorZG5sICBBUk02NCBtcG5fbW9kXzM0bHN1YjEgLS0gcmVtYWluZGVyIG1vZHVsbyAyXjQ4LTEuCisKK2RubCAgQ29weXJpZ2h0IDIwMTItMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIKK0MgQ29ydGV4LUE1MwkgMgorQyBDb3J0ZXgtQTU3CSAxCitDIFgtR2VuZQkgMS40NQorCitkZWZpbmUoYGFwJywJeDApCitkZWZpbmUoYG4nLAl4MSkKKworY2hhbmdlY29tKGJsYWgpCisKK0MgbXBfbGltYl90IG1wbl9tb2RfMzRsc3ViMSAobXBfc3JjcHRyIHVwLCBtcF9zaXplX3QgbikKKworQyBUT0RPCitDICAqIEFuIGFsdGVybmF0aXZlIGlubmVyIGxvb3Agd2hpY2ggY291bGQgcnVuIGF0IDAuNzIyIGMvbCBvbiBBNTc6CitDCWFkZHMJeDgsIHg4LCB4MgorQwlhZGNzCXg5LCB4OSwgeDMKK0MJbGRwCXgyLCB4MywgW2FwLCAjLTMyXQorQwlhZGNzCXgxMCwgeDEwLCB4NAorQwlhZGMJeDEyLCB4MTIsIHh6cgorQwlhZGRzCXg4LCB4OCwgeDUKK0MJbGRwCXg0LCB4NSwgW2FwLCAjLTE2XQorQwlzdWIJbiwgbiwgIzYKK0MJYWRjcwl4OSwgeDksIHg2CitDCWFkY3MJeDEwLCB4MTAsIHg3CitDCWxkcAl4NiwgeDcsIFthcF0sICM0OAorQwlhZGMJeDEyLCB4MTIsIHh6cgorQwl0YnoJbiwgIzYzLCBMKHRvcCkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMzIpCitQUk9MT0dVRShtcG5fbW9kXzM0bHN1YjEpCisJc3VicwluLCBuLCAjMworCW1vdgl4OCwgIzAKKwliLmx0CUwobGUyKQkJCUMgbiA8PSAyCisKKwlsZHAJeDIsIHgzLCBbYXAsICMwXQorCWxkcgl4NCwgW2FwLCAjMTZdCisJYWRkCWFwLCBhcCwgIzI0CisJc3VicwluLCBuLCAjMworCWIubHQJTChzdW0pCQkJQyBuIDw9IDUKKwljbW4JeDAsICMwCQkJQyBjbGVhciBjYXJyeQorCitMKHRvcCk6CWxkcAl4NSwgeDYsIFthcCwgIzBdCisJbGRyCXg3LCBbYXAsICMxNl0KKwlhZGQJYXAsIGFwLCAjMjQKKwlzdWIJbiwgbiwgIzMKKwlhZGNzCXgyLCB4MiwgeDUKKwlhZGNzCXgzLCB4MywgeDYKKwlhZGNzCXg0LCB4NCwgeDcKKwl0YnoJbiwgIzYzLCBMKHRvcCkKKworCWFkYwl4OCwgeHpyLCB4enIJCUMgeDggPD0gMQorCitMKHN1bSk6CWNtbgluLCAjMgorCW1vdgl4NSwgIzAKKwliLmxvCTFmCisJbGRyCXg1LCBbYXBdLCAjOAorMToJbW92CXg2LCAjMAorCWIubHMJMWYKKwlsZHIJeDYsIFthcF0sICM4CisxOglhZGRzCXgyLCB4MiwgeDUKKwlhZGNzCXgzLCB4MywgeDYKKwlhZGNzCXg0LCB4NCwgeHpyCisJYWRjCXg4LCB4OCwgeHpyCQlDIHg4IDw9IDIKKworTChzdW0yKToKKwlhbmQJeDAsIHgyLCAjMHhmZmZmZmZmZmZmZmYKKwlhZGQJeDAsIHgwLCB4MiwgbHNyICM0OAorCWFkZAl4MCwgeDAsIHg4CisKKwlsc2wJeDgsIHgzLCAjMTYKKwlhbmQJeDEsIHg4LCAjMHhmZmZmZmZmZmZmZmYKKwlhZGQJeDAsIHgwLCB4MQorCWFkZAl4MCwgeDAsIHgzLCBsc3IgIzMyCisKKwlsc2wJeDgsIHg0LCAjMzIKKwlhbmQJeDEsIHg4LCAjMHhmZmZmZmZmZmZmZmYKKwlhZGQJeDAsIHgwLCB4MQorCWFkZAl4MCwgeDAsIHg0LCBsc3IgIzE2CisJcmV0CisKK0wobGUyKToJY21uCW4sICMxCisJYi5uZQlMKDEpCisJbGRwCXgyLCB4MywgW2FwXQorCW1vdgl4NCwgIzAKKwliCUwoc3VtMikKK0woMSk6CWxkcgl4MiwgW2FwXQorCWFuZAl4MCwgeDIsICMweGZmZmZmZmZmZmZmZgorCWFkZAl4MCwgeDAsIHgyLCBsc3IgIzQ4CisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybTY0L211bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtNjQvbXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxZDMzOTQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybTY0L211bF8xLmFzbQpAQCAtMCwwICsxLDEyNyBAQAorZG5sICBBUk02NCBtcG5fbXVsXzEKKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDEzLCAyMDE1LCAyMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBDb3J0ZXgtQTUzCTcuNS04CitDIENvcnRleC1BNTcJIDcKK0MgQ29ydGV4LUE3MgorQyBYLUdlbmUJIDQKKworQyBUT0RPCitDICAqIFN0YXJ0IGZpcnN0IG11bHRpcGx5IGVhcmxpZXIuCisKK2NoYW5nZWNvbShibGFoKQorCitkZWZpbmUoYHJwJywgYHgwJykKK2RlZmluZShgdXAnLCBgeDEnKQorZGVmaW5lKGBuJywgIGB4MicpCitkZWZpbmUoYHYwJywgYHgzJykKKworCitQUk9MT0dVRShtcG5fbXVsXzFjKQorCWFkZHMJeHpyLCB4enIsIHh6cgkJQyBjbGVhciBjeSBmbGFnCisJYglMKGNvbSkKK0VQSUxPR1VFKCkKKworUFJPTE9HVUUobXBuX211bF8xKQorCWFkZHMJeDQsIHh6ciwgeHpyCQlDIGNsZWFyIHJlZ2lzdGVyIGFuZCBjeSBmbGFnCitMKGNvbSk6CWxzcgl4MTgsIG4sICMyCisJdGJuegluLCAjMCwgTChieDEpCisKK0woYngwKToJbW92CXgxMSwgeDQKKwl0YnoJbiwgIzEsIEwoYjAwKQorCitMKGIxMCk6CWxkcAl4NCwgeDUsIFt1cF0KKwltdWwJeDgsIHg0LCB2MAorCXVtdWxoCXgxMCwgeDQsIHYwCisJY2J6CXgxOCwgTCgyKQorCWxkcAl4NiwgeDcsIFt1cCwjMTZdIQorCW11bAl4OSwgeDUsIHYwCisJYglMKG1pZCktOAorCitMKDIpOgltdWwJeDksIHg1LCB2MAorCWIJTCgyZSkKKworTChieDEpOglsZHIJeDcsIFt1cF0sIzgKKwltdWwJeDksIHg3LCB2MAorCXVtdWxoCXgxMSwgeDcsIHYwCisJYWRkcwl4OSwgeDksIHg0CisJc3RyCXg5LCBbcnBdLCM4CisJdGJuegluLCAjMSwgTChiMTApCisKK0woYjAxKToJY2J6CXgxOCwgTCgxKQorCitMKGIwMCk6CWxkcAl4NiwgeDcsIFt1cF0KKwltdWwJeDgsIHg2LCB2MAorCXVtdWxoCXgxMCwgeDYsIHYwCisJbGRwCXg0LCB4NSwgW3VwLCMxNl0KKwltdWwJeDksIHg3LCB2MAorCWFkY3MJeDEyLCB4OCwgeDExCisJdW11bGgJeDExLCB4NywgdjAKKwlhZGQJcnAsIHJwLCAjMTYKKwlzdWIJeDE4LCB4MTgsICMxCisJY2J6CXgxOCwgTChlbmQpCisKKwlBTElHTigxNikKK0wodG9wKToJbXVsCXg4LCB4NCwgdjAKKwlsZHAJeDYsIHg3LCBbdXAsIzMyXSEKKwlhZGNzCXgxMywgeDksIHgxMAorCXVtdWxoCXgxMCwgeDQsIHYwCisJbXVsCXg5LCB4NSwgdjAKKwlzdHAJeDEyLCB4MTMsIFtycCwjLTE2XQorCWFkY3MJeDEyLCB4OCwgeDExCisJdW11bGgJeDExLCB4NSwgdjAKK0wobWlkKToJbXVsCXg4LCB4NiwgdjAKKwlsZHAJeDQsIHg1LCBbdXAsIzE2XQorCWFkY3MJeDEzLCB4OSwgeDEwCisJdW11bGgJeDEwLCB4NiwgdjAKKwltdWwJeDksIHg3LCB2MAorCXN0cAl4MTIsIHgxMywgW3JwXSwjMzIKKwlhZGNzCXgxMiwgeDgsIHgxMQorCXVtdWxoCXgxMSwgeDcsIHYwCisJc3ViCXgxOCwgeDE4LCAjMQorCWNibnoJeDE4LCBMKHRvcCkKKworTChlbmQpOgltdWwJeDgsIHg0LCB2MAorCWFkY3MJeDEzLCB4OSwgeDEwCisJdW11bGgJeDEwLCB4NCwgdjAKKwltdWwJeDksIHg1LCB2MAorCXN0cAl4MTIsIHgxMywgW3JwLCMtMTZdCitMKDJlKToJYWRjcwl4MTIsIHg4LCB4MTEKKwl1bXVsaAl4MTEsIHg1LCB2MAorCWFkY3MJeDEzLCB4OSwgeDEwCisJc3RwCXgxMiwgeDEzLCBbcnBdCitMKDEpOglhZGMJeDAsIHgxMSwgeHpyCisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybTY0L3BvcGNvdW50LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtNjQvcG9wY291bnQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ZGUzZmMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybTY0L3BvcGNvdW50LmFzbQpAQCAtMCwwICsxLDE1NyBAQAorZG5sICBBUk02NCBOZW9uIG1wbl9wb3Bjb3VudCAtLSBtcG4gYml0IHBvcHVsYXRpb24gY291bnQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTMsIDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIENvcnRleC1BNTMJIDIuNQorQyBDb3J0ZXgtQTU3CSAxLjE0CitDIFgtR2VuZQkgMworCitDIFRPRE8KK0MgICogQ29uc2lkZXIgZ3JlYXRlciB1bnJvbGxpbmcuCitDICAqIEFycmFuZ2UgdG8gYWxpZ24gdGhlIHBvaW50ZXIsIGlmIHRoYXQgaGVscHMgcGVyZm9ybWFuY2UuICBVc2UgdGhlIHNhbWUKK0MgICAgcmVhZC1hbmQtbWFzayB0cmljayB3ZSB1c2Ugb24gUENzLCBmb3Igc2ltcGxpY2l0eSBhbmQgcGVyZm9ybWFuY2UuICAoU29ycnkKK0MgICAgdmFsZ3JpbmQhKQorQyAgKiBFeHBsb3JlIGlmIGV4cGxpY2l0IGFsaWduIGRpcmVjdGl2ZXMsIGUuZy4sICJbcHRyOjEyOF0iIGhlbHAuCitDICAqIFNlZSBydGgncyBnbXAtZGV2ZWwgMjAxMy0wMi8wMyBtZXNzYWdlcyBhYm91dCBmaW5hbCBzdW1tYXRpb24gdHJpY2tzLgorCitjaGFuZ2Vjb20oYmxhaCkKKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYGFwJywgeDApCitkZWZpbmUoYG4nLCAgeDEpCisKK0MgV2Ugc3VtIGludG8gMTYgMTYtYml0IGNvdW50ZXJzIGluIHY0LHY1LCBidXQgYXQgdGhlIGVuZCB3ZSBzdW0gdGhlbSBhbmQgZW5kCitDIHVwIHdpdGggOCAxNi1iaXQgY291bnRlcnMuICBUaGVyZWZvcmUsIHdlIGNhbiBzdW0gdG8gOCgyXjE2LTEpIGJpdHMsIG9yCitDICg4KjJeMTYtMSkvNjQgPSAweDFmZmYgbGltYnMuICBXZSB1c2UgYSBjaHVua3NpemUgY2xvc2UgdG8gdGhhdCwgYnV0IHdoaWNoCitDICBhbGxvd3MgdGhlIGh1Z2UgY291bnQgY29kZSB0byBqdW1wIGRlZXAgaW50byB0aGUgY29kZSAoYXQgTChjaHUpKS4KKworZGVmaW5lKGBtYXhzaXplJywgIDB4MWZmZikKK2RlZmluZShgY2h1bmtzaXplJywweDFmZjApCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fcG9wY291bnQpCisKKwltb3YJeDExLCAjbWF4c2l6ZQorCWNtcAluLCB4MTEKKwliLmhpCUwoZ3Q4aykKKworTChsdDhrKToKKwltb3ZpCXY0LjE2YiwgIzAJCQlDIGNsZWFyIHN1bW1hdGlvbiByZWdpc3RlcgorCW1vdmkJdjUuMTZiLCAjMAkJCUMgY2xlYXIgc3VtbWF0aW9uIHJlZ2lzdGVyCisKKwl0YnoJbiwgIzAsIEwoeHgwKQorCXN1YgluLCBuLCAjMQorCWxkMQl7djAuMWR9LCBbYXBdLCAjOAkJQyBsb2FkIDEgbGltYgorCWNudAl2Ni4xNmIsIHYwLjE2YgorCXVhZGFscAl2NC44aCwgIHY2LjE2YgkJCUMgY291bGQgYWxzbyBzcGxhdAorCitMKHh4MCk6CXRiegluLCAjMSwgTCh4MDApCisJc3ViCW4sIG4sICMyCisJbGQxCXt2MC4yZH0sIFthcF0sICMxNgkJQyBsb2FkIDIgbGltYnMKKwljbnQJdjYuMTZiLCB2MC4xNmIKKwl1YWRhbHAJdjQuOGgsICB2Ni4xNmIKKworTCh4MDApOgl0YnoJbiwgIzIsIEwoMDAwKQorCXN1YnMJbiwgbiwgIzQKKwlsZDEJe3YwLjJkLHYxLjJkfSwgW2FwXSwgIzMyCUMgbG9hZCA0IGxpbWJzCisJYi5scwlMKHN1bSkKKworTChndDQpOglsZDEJe3YyLjJkLHYzLjJkfSwgW2FwXSwgIzMyCUMgbG9hZCA0IGxpbWJzCisJc3ViCW4sIG4sICM0CisJY250CXY2LjE2YiwgdjAuMTZiCisJY250CXY3LjE2YiwgdjEuMTZiCisJYglMKG1pZCkKKworTCgwMDApOglzdWJzCW4sIG4sICM4CisJYi5sbwlMKGUwKQorCitMKGNodSk6CWxkMQl7djIuMmQsdjMuMmR9LCBbYXBdLCAjMzIJQyBsb2FkIDQgbGltYnMKKwlsZDEJe3YwLjJkLHYxLjJkfSwgW2FwXSwgIzMyCUMgbG9hZCA0IGxpbWJzCisJY250CXY2LjE2YiwgdjIuMTZiCisJY250CXY3LjE2YiwgdjMuMTZiCisJc3VicwluLCBuLCAjOAorCWIubG8JTChlbmQpCisKK0wodG9wKToJbGQxCXt2Mi4yZCx2My4yZH0sIFthcF0sICMzMglDIGxvYWQgNCBsaW1icworCXVhZGFscAl2NC44aCwgIHY2LjE2YgorCWNudAl2Ni4xNmIsIHYwLjE2YgorCXVhZGFscAl2NS44aCwgIHY3LjE2YgorCWNudAl2Ny4xNmIsIHYxLjE2YgorTChtaWQpOglsZDEJe3YwLjJkLHYxLjJkfSwgW2FwXSwgIzMyCUMgbG9hZCA0IGxpbWJzCisJc3VicwluLCBuLCAjOAorCXVhZGFscAl2NC44aCwgIHY2LjE2YgorCWNudAl2Ni4xNmIsIHYyLjE2YgorCXVhZGFscAl2NS44aCwgIHY3LjE2YgorCWNudAl2Ny4xNmIsIHYzLjE2YgorCWIuaHMJTCh0b3ApCisKK0woZW5kKToJdWFkYWxwCXY0LjhoLCAgdjYuMTZiCisJdWFkYWxwCXY1LjhoLCAgdjcuMTZiCitMKHN1bSk6CWNudAl2Ni4xNmIsIHYwLjE2YgorCWNudAl2Ny4xNmIsIHYxLjE2YgorCXVhZGFscAl2NC44aCwgIHY2LjE2YgorCXVhZGFscAl2NS44aCwgIHY3LjE2YgorCWFkZAl2NC44aCwgdjQuOGgsIHY1LjhoCisJCQkJCUMgd2UgaGF2ZSA4IDE2LWJpdCBjb3VudHMKK0woZTApOgl1YWRkbHAJdjQuNHMsICB2NC44aAkJQyB3ZSBoYXZlIDQgMzItYml0IGNvdW50cworCXVhZGRscAl2NC4yZCwgIHY0LjRzCQlDIHdlIGhhdmUgMiA2NC1iaXQgY291bnRzCisJbW92CXgwLCB2NC5kWzBdCisJbW92CXgxLCB2NC5kWzFdCisJYWRkCXgwLCB4MCwgeDEKKwlyZXQKKworQyBDb2RlIGZvciBjb3VudCA+IG1heHNpemUuICBTcGxpdHMgb3BlcmFuZCBhbmQgY2FsbHMgYWJvdmUgY29kZS4KK2RlZmluZShgYXAyJywgeDUpCQkJQyBjYWxsZXItc2F2ZXMgcmVnIG5vdCB1c2VkIGFib3ZlCitMKGd0OGspOgorCW1vdgl4OCwgeDMwCisJbW92CXg3LCBuCQkJQyBmdWxsIGNvdW50IChjYWxsZXItc2F2ZXMgcmVnIG5vdCB1c2VkIGFib3ZlKQorCW1vdgl4NCwgIzAJCQlDIHRvdGFsIHN1bSAgKGNhbGxlci1zYXZlcyByZWcgbm90IHVzZWQgYWJvdmUpCisJbW92CXg5LCAjY2h1bmtzaXplKjgJQyBjYWxsZXItc2F2ZXMgcmVnIG5vdCB1c2VkIGFib3ZlCisJbW92CXgxMCwgI2NodW5rc2l6ZQkJQyBjYWxsZXItc2F2ZXMgcmVnIG5vdCB1c2VkIGFib3ZlCisKKzE6CWFkZAlhcDIsIGFwLCB4OQkJQyBwb2ludCBhdCBzdWJzZXF1ZW50IGJsb2NrCisJbW92CW4sICNjaHVua3NpemUtOAkJQyBjb3VudCBmb3IgdGhpcyBpbnZvY2F0aW9uLCBhZGp1c3RlZCBmb3IgZW50cnkgcHQKKwltb3ZpCXY0LjE2YiwgIzAJCUMgY2xlYXIgY2h1bmsgc3VtbWF0aW9uIHJlZ2lzdGVyCisJbW92aQl2NS4xNmIsICMwCQlDIGNsZWFyIGNodW5rIHN1bW1hdGlvbiByZWdpc3RlcgorCWJsCUwoY2h1KQkJCUMganVtcCBkZWVwIGluc2lkZSBjb2RlCisJYWRkCXg0LCB4NCwgeDAKKwltb3YJYXAsIGFwMgkJCUMgcHV0IGNodW5rIHBvaW50ZXIgaW4gcGxhY2UgZm9yIGNhbGxzCisJc3ViCXg3LCB4NywgeDEwCisJY21wCXg3LCB4MTEKKwliLmhpCTFiCisKKwltb3YJbiwgeDcJCQlDIGNvdW50IGZvciBmaW5hbCBpbnZvY2F0aW9uCisJYmwJTChsdDhrKQorCWFkZAl4MCwgeDQsIHgwCisJbW92CXgzMCwgeDgKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtNjQvcnNoMWFvcnNfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybTY0L3JzaDFhb3JzX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwYjc2MGIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybTY0L3JzaDFhb3JzX24uYXNtCkBAIC0wLDAgKzEsMTY4IEBACitkbmwgIEFSTTY0IG1wbl9yc2gxYWRkX24gYW5kIG1wbl9yc2gxc3ViX24uCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqw7ZybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIgICBhc3N1bWVkIG9wdGltYWwgYy9sCitDIENvcnRleC1BNTMJMy4yNS0zLjc1CSAzLjAgc3RlYWR5CitDIENvcnRleC1BNTcJIDIuMTUJCSAxLjc1CitDIFgtR2VuZQkgMi43NQkJIDIuNQorCitjaGFuZ2Vjb20oYmxhaCkKKworZGVmaW5lKGBycCcsIGB4MCcpCitkZWZpbmUoYHVwJywgYHgxJykKK2RlZmluZShgdnAnLCBgeDInKQorZGVmaW5lKGBuJywgIGB4MycpCisKK2lmZGVmKGBPUEVSQVRJT05fcnNoMWFkZF9uJywgYAorICBkZWZpbmUoYEFERFNVQicsCWFkZHMpCisgIGRlZmluZShgQUREU1VCQycsCWFkY3MpCisgIGRlZmluZShgQ09ORCcsCWBjcycpCisgIGRlZmluZShgZnVuY19uJywJbXBuX3JzaDFhZGRfbiknKQoraWZkZWYoYE9QRVJBVElPTl9yc2gxc3ViX24nLCBgCisgIGRlZmluZShgQUREU1VCJywJc3VicykKKyAgZGVmaW5lKGBBRERTVUJDJywJc2JjcykKKyAgZGVmaW5lKGBDT05EJywJYGNjJykKKyAgZGVmaW5lKGBmdW5jX24nLAltcG5fcnNoMXN1Yl9uKScpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX3JzaDFhZGRfbiBtcG5fcnNoMXN1Yl9uKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUoZnVuY19uKQorCWxzcgl4MTgsIG4sICMyCisKKwl0YnoJbiwgIzAsIEwoYngwKQorCitMKGJ4MSk6CWxkcgl4NSwgW3VwXSwjOAorCWxkcgl4OSwgW3ZwXSwjOAorCXRibnoJbiwgIzEsIEwoYjExKQorCitMKGIwMSk6CUFERFNVQgl4MTMsIHg1LCB4OQorCWFuZAl4MTAsIHgxMywgIzEKKwljYnoJeDE4LCBMKDEpCisJbGRwCXg0LCB4NSwgW3VwXSwjNDgKKwlsZHAJeDgsIHg5LCBbdnBdLCM0OAorCUFERFNVQkMJeDE0LCB4NCwgeDgKKwlBRERTVUJDCXgxNSwgeDUsIHg5CisJbGRwCXg0LCB4NSwgW3VwLCMtMzJdCisJbGRwCXg4LCB4OSwgW3ZwLCMtMzJdCisJZXh0cgl4MTcsIHgxNCwgeDEzLCAjMQorCUFERFNVQkMJeDEyLCB4NCwgeDgKKwlBRERTVUJDCXgxMywgeDUsIHg5CisJc3RyCXgxNywgW3JwXSwgIzI0CisJc3ViCXgxOCwgeDE4LCAjMQorCWNiegl4MTgsIEwoZW5kKQorCWIJTCh0b3ApCisKK0woMSk6CWNzZXQJeDE0LCBDT05ECisJZXh0cgl4MTcsIHgxNCwgeDEzLCAjMQorCXN0cgl4MTcsIFtycF0KKwltb3YJeDAsIHgxMAorCXJldAorCitMKGIxMSk6CUFERFNVQgl4MTUsIHg1LCB4OQorCWFuZAl4MTAsIHgxNSwgIzEKKworCWxkcAl4NCwgeDUsIFt1cF0sIzMyCisJbGRwCXg4LCB4OSwgW3ZwXSwjMzIKKwlBRERTVUJDCXgxMiwgeDQsIHg4CisJQUREU1VCQwl4MTMsIHg1LCB4OQorCWNiegl4MTgsIEwoMykKKwlsZHAJeDQsIHg1LCBbdXAsIy0xNl0KKwlsZHAJeDgsIHg5LCBbdnAsIy0xNl0KKwlleHRyCXgxNywgeDEyLCB4MTUsICMxCisJQUREU1VCQwl4MTQsIHg0LCB4OAorCUFERFNVQkMJeDE1LCB4NSwgeDkKKwlzdHIJeDE3LCBbcnBdLCAjOAorCWIJTChtaWQpCisKK0woMyk6CWV4dHIJeDE3LCB4MTIsIHgxNSwgIzEKKwlzdHIJeDE3LCBbcnBdLCAjOAorCWIJTCgyKQorCitMKGJ4MCk6CXRiegluLCAjMSwgTChiMDApCisKK0woYjEwKToJbGRwCXg0LCB4NSwgW3VwXSwjMzIKKwlsZHAJeDgsIHg5LCBbdnBdLCMzMgorCUFERFNVQgl4MTIsIHg0LCB4OAorCUFERFNVQkMJeDEzLCB4NSwgeDkKKwlhbmQJeDEwLCB4MTIsICMxCisJY2J6CXgxOCwgTCgyKQorCWxkcAl4NCwgeDUsIFt1cCwjLTE2XQorCWxkcAl4OCwgeDksIFt2cCwjLTE2XQorCUFERFNVQkMJeDE0LCB4NCwgeDgKKwlBRERTVUJDCXgxNSwgeDUsIHg5CisJYglMKG1pZCkKKworTChiMDApOglsZHAJeDQsIHg1LCBbdXBdLCM0OAorCWxkcAl4OCwgeDksIFt2cF0sIzQ4CisJQUREU1VCCXgxNCwgeDQsIHg4CisJQUREU1VCQwl4MTUsIHg1LCB4OQorCWFuZAl4MTAsIHgxNCwgIzEKKwlsZHAJeDQsIHg1LCBbdXAsIy0zMl0KKwlsZHAJeDgsIHg5LCBbdnAsIy0zMl0KKwlBRERTVUJDCXgxMiwgeDQsIHg4CisJQUREU1VCQwl4MTMsIHg1LCB4OQorCWFkZAlycCwgcnAsICMxNgorCXN1Ygl4MTgsIHgxOCwgIzEKKwljYnoJeDE4LCBMKGVuZCkKKworCUFMSUdOKDE2KQorTCh0b3ApOglsZHAJeDQsIHg1LCBbdXAsIy0xNl0KKwlsZHAJeDgsIHg5LCBbdnAsIy0xNl0KKwlleHRyCXgxNiwgeDE1LCB4MTQsICMxCisJZXh0cgl4MTcsIHgxMiwgeDE1LCAjMQorCUFERFNVQkMJeDE0LCB4NCwgeDgKKwlBRERTVUJDCXgxNSwgeDUsIHg5CisJc3RwCXgxNiwgeDE3LCBbcnAsIy0xNl0KK0wobWlkKToJbGRwCXg0LCB4NSwgW3VwXSwjMzIKKwlsZHAJeDgsIHg5LCBbdnBdLCMzMgorCWV4dHIJeDE2LCB4MTMsIHgxMiwgIzEKKwlleHRyCXgxNywgeDE0LCB4MTMsICMxCisJQUREU1VCQwl4MTIsIHg0LCB4OAorCUFERFNVQkMJeDEzLCB4NSwgeDkKKwlzdHAJeDE2LCB4MTcsIFtycF0sIzMyCisJc3ViCXgxOCwgeDE4LCAjMQorCWNibnoJeDE4LCBMKHRvcCkKKworTChlbmQpOglleHRyCXgxNiwgeDE1LCB4MTQsICMxCisJZXh0cgl4MTcsIHgxMiwgeDE1LCAjMQorCXN0cAl4MTYsIHgxNywgW3JwLCMtMTZdCitMKDIpOgljc2V0CXgxNCwgQ09ORAorCWV4dHIJeDE2LCB4MTMsIHgxMiwgIzEKKwlleHRyCXgxNywgeDE0LCB4MTMsICMxCisJc3RwCXgxNiwgeDE3LCBbcnBdCisKK0wocmV0KToJbW92CXgwLCB4MTAKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtNjQvcnNoaWZ0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtNjQvcnNoaWZ0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGFlOTYwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm02NC9yc2hpZnQuYXNtCkBAIC0wLDAgKzEsMTI1IEBACitkbmwgIEFSTTY0IG1wbl9yc2hpZnQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTMsIDIwMTQsIDIwMTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorZG5sICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKK2RubCAgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK2RubCAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYiAgIGFzc3VtZWQgb3B0aW1hbCBjL2wKK0MgQ29ydGV4LUE1MwkzLjUtNC4wCQkgMy4yNQorQyBDb3J0ZXgtQTU3CSAyLjAJCSAyLjAKK0MgWC1HZW5lCSAyLjY3CQkgMi41CisKK0MgVE9ETworQyAgKiBUaGUgZmVlZC1pbiBjb2RlIHVzZWQgMSBsZHIgZm9yIG9kZCBzaXplZCBhbmQgMiBsZHIgZm9yIGV2ZW4gc2l6ZXMuICBUaGVzZQorQyAgICBudW1iZXJzIHNob3VsZCBiZSAxIGFuZCAwLCByZXNwZWN0aXZlbHkuICBUaGUgc3RyIGluIHdpbmQtZG93biBzaG91bGQgYWxzbworQyAgICBnby4KK0MgICogVXNpbmcgZXh0ciBhbmQgd2l0aCA2MyBzZXBhcmF0ZSBsb29wcyB3ZSBtaWdodCByZWFjaCAxLjI1IGMvbCBvbiBBNTcuCitDICAqIEE1MydzIHNwZWVkIGRlcGVuZHMgb24gYWxpZ25tZW50LCBidXQgbm90IGFzIHNpbXBseSBhcyBmb3IgbHNoaWZ0L2xzaGlmdGMuCisKK2NoYW5nZWNvbShibGFoKQorCitkZWZpbmUoYHJwX2FyZycsIGB4MCcpCitkZWZpbmUoYHVwJywgICAgIGB4MScpCitkZWZpbmUoYG4nLCAgICAgIGB4MicpCitkZWZpbmUoYGNudCcsICAgIGB4MycpCisKK2RlZmluZShgcnAnLCAgICAgYHgxNicpCisKK2RlZmluZShgdG5jJyxgeDgnKQorCitkZWZpbmUoYFBTSElGVCcsIGxzcikKK2RlZmluZShgTlNISUZUJywgbHNsKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX3JzaGlmdCkKKwltb3YJcnAsIHJwX2FyZworCXN1Ygl0bmMsIHh6ciwgY250CisJbHNyCXgxOCwgbiwgIzIKKwl0YnoJbiwgIzAsIEwoYngwKQorCitMKGJ4MSk6CWxkcgl4NSwgW3VwXQorCXRibnoJbiwgIzEsIEwoYjExKQorCitMKGIwMSk6CU5TSElGVAl4MCwgeDUsIHRuYworCVBTSElGVAl4MiwgeDUsIGNudAorCWNibnoJeDE4LCBMKGd0MSkKKwlzdHIJeDIsIFtycF0KKwlyZXQKK0woZ3QxKToJbGRwCXg0LCB4NSwgW3VwLCM4XQorCXN1Ygl1cCwgdXAsICM4CisJc3ViCXJwLCBycCwgIzMyCisJYglMKGxvMikKKworTChiMTEpOglOU0hJRlQJeDAsIHg1LCB0bmMKKwlQU0hJRlQJeDIsIHg1LCBjbnQKKwlsZHAJeDYsIHg3LCBbdXAsIzhdIQorCXN1YglycCwgcnAsICMxNgorCWIJTChsbzMpCisKK0woYngwKToJbGRwCXg0LCB4NSwgW3VwXQorCXRiegluLCAjMSwgTChiMDApCisKK0woYjEwKToJTlNISUZUCXgwLCB4NCwgdG5jCisJUFNISUZUCXgxMywgeDQsIGNudAorCU5TSElGVAl4MTAsIHg1LCB0bmMKKwlQU0hJRlQJeDIsIHg1LCBjbnQKKwljYm56CXgxOCwgTChndDIpCisJb3JyCXgxMCwgeDEwLCB4MTMKKwlzdHAJeDEwLCB4MiwgW3JwXQorCXJldAorTChndDIpOglsZHAJeDQsIHg1LCBbdXAsIzE2XQorCW9ycgl4MTAsIHgxMCwgeDEzCisJc3RyCXgxMCwgW3JwXSwjLTI0CisJYglMKGxvMikKKworTChiMDApOglOU0hJRlQJeDAsIHg0LCB0bmMKKwlQU0hJRlQJeDEzLCB4NCwgY250CisJTlNISUZUCXgxMCwgeDUsIHRuYworCVBTSElGVAl4MiwgeDUsIGNudAorCWxkcAl4NiwgeDcsIFt1cCwjMTZdIQorCW9ycgl4MTAsIHgxMCwgeDEzCisJc3RyCXgxMCwgW3JwXSwjLTgKKwliCUwobG8wKQorCisJQUxJR04oMTYpCitMKHRvcCk6CWxkcAl4NCwgeDUsIFt1cCwjMTZdCisJb3JyCXgxMCwgeDEwLCB4MTMKKwlvcnIJeDExLCB4MTIsIHgyCisJc3RwCXgxMSwgeDEwLCBbcnAsIzE2XQorCVBTSElGVAl4MiwgeDcsIGNudAorTChsbzIpOglOU0hJRlQJeDEwLCB4NSwgdG5jCisJTlNISUZUCXgxMiwgeDQsIHRuYworCVBTSElGVAl4MTMsIHg0LCBjbnQKKwlsZHAJeDYsIHg3LCBbdXAsIzMyXSEKKwlvcnIJeDEwLCB4MTAsIHgxMworCW9ycgl4MTEsIHgxMiwgeDIKKwlzdHAJeDExLCB4MTAsIFtycCwjMzJdIQorCVBTSElGVAl4MiwgeDUsIGNudAorTChsbzApOglzdWIJeDE4LCB4MTgsICMxCitMKGxvMyk6CU5TSElGVAl4MTAsIHg3LCB0bmMKKwlOU0hJRlQJeDEyLCB4NiwgdG5jCisJUFNISUZUCXgxMywgeDYsIGNudAorCWNibnoJeDE4LCBMKHRvcCkKKworTChlbmQpOglvcnIJeDEwLCB4MTAsIHgxMworCW9ycgl4MTEsIHgxMiwgeDIKKwlQU0hJRlQJeDIsIHg3LCBjbnQKKwlzdHAJeDExLCB4MTAsIFtycCwjMTZdCisJc3RyCXgyLCBbcnAsIzMyXQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hcm02NC9zZWNfdGFic2VsZWN0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtNjQvc2VjX3RhYnNlbGVjdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThhMjY4YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtNjQvc2VjX3RhYnNlbGVjdC5hc20KQEAgLTAsMCArMSwxMjIgQEAKK2RubCAgQVJNNjQgTmVvbiBtcG5fc2VjX3RhYnNlbGVjdC4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDExLTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDCSAgICAgY3ljbGVzL2xpbWIKK0MgQ29ydGV4LUE1MwkgMi4yNQorQyBDb3J0ZXgtQTU3CSAxLjMzCitDIFgtR2VuZQkgMgorCitDIHZvaWQKK0MgbXBuX3NlY190YWJzZWxlY3QgKG1wX3B0ciBycCwgbXBfc3JjcHRyICp0YWIsCitDCQkgICAgIG1wX3NpemVfdCBuLCBtcF9zaXplX3QgbmVudHMsIG1wX3NpemVfdCB3aGljaCkKKworY2hhbmdlY29tKGJsYWgpCisKK2RlZmluZShgcnAnLCAgICAgYHgwJykKK2RlZmluZShgdHAnLCAgICAgYHgxJykKK2RlZmluZShgbicsICAgICAgYHgyJykKK2RlZmluZShgbmVudHMnLCAgYHgzJykKK2RlZmluZShgd2hpY2gnLCAgYHg0JykKKworZGVmaW5lKGBpJywgICAgICBgeDUnKQorZGVmaW5lKGBqJywgICAgICBgeDYnKQorCitkZWZpbmUoYG1hc2txJywgIGB2NCcpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fc2VjX3RhYnNlbGVjdCkKKwlkdXAJdjcuMmQsIHg0CQkJQyAyIGB3aGljaCcgY29waWVzCisKKwltb3YJeDEwLCAjMQorCWR1cAl2Ni4yZCwgeDEwCQkJQyAyIGNvcGllcyBvZiAxCisKKwlzdWJzCWosIG4sICM0CisJYi5taQlMKG91dGVyX2VuZCkKKworTChvdXRlcl90b3ApOgorCW1vdglpLCBuZW50cworCW1vdgl4MTIsIHRwCQkJCUMgcHJlc2VydmUgdHAKKwltb3ZpCXY1LjE2YiwgIzAJCQlDIHplcm8gMiBjb3VudGVyIGNvcGllcworCW1vdmkJdjIuMTZiLCAjMAorCW1vdmkJdjMuMTZiLCAjMAorCUFMSUdOKDE2KQorTCh0cDQpOgljbWVxCW1hc2txLjJkLCB2NS4yZCwgdjcuMmQJCUMgY29tcGFyZSBpZHggY29waWVzIHRvIGB3aGljaCcgY29waWVzCisJbGQxCXt2MC4yZCx2MS4yZH0sIFt0cF0KKwlhZGQJdjUuMmQsIHY1LjJkLCB2Ni4yZAorCWJpdAl2Mi4xNmIsIHYwLjE2YiwgbWFza3EuMTZiCisJYml0CXYzLjE2YiwgdjEuMTZiLCBtYXNrcS4xNmIKKwlhZGQJdHAsIHRwLCBuLCBsc2wgIzMKKwlzdWIJaSwgaSwgIzEKKwljYm56CWksIEwodHA0KQorCXN0MQl7djIuMmQsdjMuMmR9LCBbcnBdLCAjMzIKKwlhZGQJdHAsIHgxMiwgIzMyCQkJQyByZXN0b3JlIHRwLCBwb2ludCB0byBuZXh0IHNsaWNlCisJc3VicwlqLCBqLCAjNAorCWIucGwJTChvdXRlcl90b3ApCitMKG91dGVyX2VuZCk6CisKKwl0YnoJbiwgIzEsIEwoYjB4KQorCW1vdglpLCBuZW50cworCW1vdgl4MTIsIHRwCisJbW92aQl2NS4xNmIsICMwCQkJQyB6ZXJvIDIgY291bnRlciBjb3BpZXMKKwltb3ZpCXYyLjE2YiwgIzAKKwlBTElHTigxNikKK0wodHAyKToJY21lcQltYXNrcS4yZCwgdjUuMmQsIHY3LjJkCisJbGQxCXt2MC4yZH0sIFt0cF0KKwlhZGQJdjUuMmQsIHY1LjJkLCB2Ni4yZAorCWJpdAl2Mi4xNmIsIHYwLjE2YiwgbWFza3EuMTZiCisJYWRkCXRwLCB0cCwgbiwgbHNsICMzCisJc3ViCWksIGksICMxCisJY2JueglpLCBMKHRwMikKKwlzdDEJe3YyLjJkfSwgW3JwXSwgIzE2CisJYWRkCXRwLCB4MTIsICMxNgorCitMKGIweCk6CXRiegluLCAjMCwgTChiMDApCisJbW92CWksIG5lbnRzCisJbW92CXgxMiwgdHAKKwltb3ZpCXY1LjE2YiwgIzAJCQlDIHplcm8gMiBjb3VudGVyIGNvcGllcworCW1vdmkJdjIuMTZiLCAjMAorCUFMSUdOKDE2KQorTCh0cDEpOgljbWVxCW1hc2txLjJkLCB2NS4yZCwgdjcuMmQKKwlsZDEJe3YwLjFkfSwgW3RwXQorCWFkZAl2NS4yZCwgdjUuMmQsIHY2LjJkCQlDIEZJWE1FIHNpemUgc2hvdWxkIGJlIGAxZCcKKwliaXQJdjIuOGIsIHYwLjhiLCBtYXNrcS44YgorCWFkZAl0cCwgdHAsIG4sIGxzbCAjMworCXN1YglpLCBpLCAjMQorCWNibnoJaSwgTCh0cDEpCisJc3QxCXt2Mi4xZH0sIFtycF0sICM4CisJYWRkCXRwLCB4MTIsICM4CisKK0woYjAwKToJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2FybTY0L3Nxcl9kaWFnX2FkZGxzaDEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm02NC9zcXJfZGlhZ19hZGRsc2gxLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWI1YWM3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm02NC9zcXJfZGlhZ19hZGRsc2gxLmFzbQpAQCAtMCwwICsxLDEwMiBAQAorZG5sICBBUk02NCBtcG5fc3FyX2RpYWdfYWRkbHNoMS4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDE2LCAyMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBDb3J0ZXgtQTUzCSA1LjY1CitDIENvcnRleC1BNTcJIDMuNQorQyBYLUdlbmUJIDMuMzgKKworY2hhbmdlY29tKGJsYWgpCisKK2RlZmluZShgcnAnLCBgeDAnKQorZGVmaW5lKGB0cCcsIGB4MScpCitkZWZpbmUoYHVwJywgYHgyJykKK2RlZmluZShgbicsICBgeDMnKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX3Nxcl9kaWFnX2FkZGxzaDEpCisJbGRyCXgxNSwgW3VwXSwjOAorCWxzcgl4MTgsIG4sICMxCisJdGJ6CW4sICMwLCBMKGJ4MCkKKworTChieDEpOglhZGRzCXg3LCB4enIsIHh6cgorCW11bAl4MTIsIHgxNSwgeDE1CisJbGRyCXgxNiwgW3VwXSwjOAorCWxkcAl4NCwgeDUsIFt0cF0sIzE2CisJdW11bGgJeDExLCB4MTUsIHgxNQorCWIJTChtaWQpCisKK0woYngwKToJYWRkcwl4NSwgeHpyLCB4enIKKwltdWwJeDEyLCB4MTUsIHgxNQorCWxkcgl4MTcsIFt1cF0sIzE2CisJbGRwCXg2LCB4NywgW3RwXSwjMzIKKwl1bXVsaAl4MTEsIHgxNSwgeDE1CisJc3ViCXgxOCwgeDE4LCAjMQorCWNiegl4MTgsIEwoZW5kKQorCisJQUxJR04oMTYpCitMKHRvcCk6CWV4dHIJeDksIHg2LCB4NSwgIzYzCisJbXVsCXgxMCwgeDE3LCB4MTcKKwlsZHIJeDE2LCBbdXAsIy04XQorCWFkY3MJeDEzLCB4OSwgeDExCisJbGRwCXg0LCB4NSwgW3RwLCMtMTZdCisJdW11bGgJeDExLCB4MTcsIHgxNworCWV4dHIJeDgsIHg3LCB4NiwgIzYzCisJc3RwCXgxMiwgeDEzLCBbcnBdLCMxNgorCWFkY3MJeDEyLCB4OCwgeDEwCitMKG1pZCk6CWV4dHIJeDksIHg0LCB4NywgIzYzCisJbXVsCXgxMCwgeDE2LCB4MTYKKwlsZHIJeDE3LCBbdXBdLCMxNgorCWFkY3MJeDEzLCB4OSwgeDExCisJbGRwCXg2LCB4NywgW3RwXSwjMzIKKwl1bXVsaAl4MTEsIHgxNiwgeDE2CisJZXh0cgl4OCwgeDUsIHg0LCAjNjMKKwlzdHAJeDEyLCB4MTMsIFtycF0sIzE2CisJYWRjcwl4MTIsIHg4LCB4MTAKKwlzdWIJeDE4LCB4MTgsICMxCisJY2Juegl4MTgsIEwodG9wKQorCitMKGVuZCk6CWV4dHIJeDksIHg2LCB4NSwgIzYzCisJbXVsCXgxMCwgeDE3LCB4MTcKKwlhZGNzCXgxMywgeDksIHgxMQorCXVtdWxoCXgxMSwgeDE3LCB4MTcKKwlleHRyCXg4LCB4NywgeDYsICM2MworCXN0cAl4MTIsIHgxMywgW3JwXQorCWFkY3MJeDEyLCB4OCwgeDEwCisJZXh0cgl4OSwgeHpyLCB4NywgIzYzCisJYWRjcwl4MTMsIHg5LCB4MTEKKwlzdHAJeDEyLCB4MTMsIFtycCwjMTZdCisKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtNjQveGdlbmUxL2dtcC1tcGFyYW0uaCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXJtNjQveGdlbmUxL2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2MzY2IzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9hcm02NC94Z2VuZTEvZ21wLW1wYXJhbS5oCkBAIC0wLDAgKzEsMTgxIEBACisvKiBnbXAtbXBhcmFtLmggLS0gQ29tcGlsZXIvbWFjaGluZSBwYXJhbWV0ZXIgaGVhZGVyIGZpbGUuCisKK0NvcHlyaWdodCAyMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgNjQKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgOAorCisvKiAyNDAwIE1IeiBBcHBsaWVkTWljcm8gWC1HZW5lICovCisvKiBGRlQgdHVuaW5nIGxpbWl0ID0gMC41IE0gKi8KKy8qIEdlbmVyYXRlZCBieSB0dW5ldXAuYywgMjAxOS0wOS0yOCwgZ2NjIDQuOCAqLworCisjZGVmaW5lIERJVlJFTV8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgRElWUkVNXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMV8xUF9NRVRIT0QgICAgICAgICAgICAgICAgICAgICAgMSAgLyogMi4wMCUgZmFzdGVyIHRoYW4gMiAqLworI2RlZmluZSBNT0RfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PRF8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFOX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgIDcKKyNkZWZpbmUgTU9EXzFVX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgIDUKKyNkZWZpbmUgTU9EXzFfMV9UT19NT0RfMV8yX1RIUkVTSE9MRCAgICAgICAgIDAgIC8qIG5ldmVyIG1wbl9tb2RfMV8xcCAqLworI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICAgICAyMgorI2RlZmluZSBQUkVJTlZfTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAxMworI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBESVZfUVJfMU5fUEkxX01FVEhPRCAgICAgICAgICAgICAgICAgMSAgLyogMzcuMzglIGZhc3RlciB0aGFuIDIgKi8KKyNkZWZpbmUgRElWX1FSXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgIDEKKyNkZWZpbmUgRElWX1FSXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgIDEKKyNkZWZpbmUgRElWX1FSXzJfUEkyX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgRElWRVhBQ1RfMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBCTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgICAgICAyNworCisjZGVmaW5lIERJVl8xX1ZTX01VTF8xX1BFUkNFTlQgICAgICAgICAgICAgMjQ5CisKKyNkZWZpbmUgTVVMX1RPT00yMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgTVVMX1RPT00zM19USFJFU0hPTEQgICAgICAgICAgICAgICAgNjEKKyNkZWZpbmUgTVVMX1RPT000NF9USFJFU0hPTEQgICAgICAgICAgICAgICAxMTIKKyNkZWZpbmUgTVVMX1RPT002SF9USFJFU0hPTEQgICAgICAgICAgICAgICAyNDIKKyNkZWZpbmUgTVVMX1RPT004SF9USFJFU0hPTEQgICAgICAgICAgICAgICAzMjEKKworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT000M19USFJFU0hPTEQgICAgICA3MworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT001M19USFJFU0hPTEQgICAgICA5OQorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT001M19USFJFU0hPTEQgICAgIDEwOQorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT002M19USFJFU0hPTEQgICAgICA3MgorI2RlZmluZSBNVUxfVE9PTTQzX1RPX1RPT001NF9USFJFU0hPTEQgICAgIDEwNgorCisjZGVmaW5lIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgODEKKyNkZWZpbmUgU1FSX1RPT000X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNTQKKyNkZWZpbmUgU1FSX1RPT002X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyMTQKKyNkZWZpbmUgU1FSX1RPT004X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyODQKKworI2RlZmluZSBNVUxNSURfVE9PTTQyX1RIUkVTSE9MRCAgICAgICAgICAgICA0NgorCisjZGVmaW5lIE1VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDExCisjZGVmaW5lIFNRUk1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDEzCisKKyNkZWZpbmUgTVVMX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICA0MTIgIC8qIGsgPSA1ICovCisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICA0MTIsIDV9LCB7ICAgICAxNSwgNn0sIHsgICAgICA4LCA1fSwgeyAgICAgMTcsIDZ9LCBcCisgICAgeyAgICAgMTksIDd9LCB7ICAgICAxMiwgNn0sIHsgICAgIDI1LCA3fSwgeyAgICAgMTcsIDh9LCBcCisgICAgeyAgICAgIDksIDd9LCB7ICAgICAyMCwgOH0sIHsgICAgIDExLCA3fSwgeyAgICAgMjUsIDh9LCBcCisgICAgeyAgICAgMTMsIDd9LCB7ICAgICAyNywgOH0sIHsgICAgIDE1LCA3fSwgeyAgICAgMzEsIDh9LCBcCisgICAgeyAgICAgMTcsIDd9LCB7ICAgICAzNSwgOH0sIHsgICAgIDIxLCA5fSwgeyAgICAgMTEsIDh9LCBcCisgICAgeyAgICAgMjcsIDl9LCB7ICAgICAxNSwgOH0sIHsgICAgIDM1LCA5fSwgeyAgICAgMTksIDh9LCBcCisgICAgeyAgICAgNDEsIDl9LCB7ICAgICAyMywgOH0sIHsgICAgIDQ5LCA5fSwgeyAgICAgMjcsMTB9LCBcCisgICAgeyAgICAgMTUsIDl9LCB7ICAgICAzMSwgOH0sIHsgICAgIDYzLCA5fSwgeyAgICAgMzksMTB9LCBcCisgICAgeyAgICAgMjMsIDl9LCB7ICAgICA1NSwxMX0sIHsgICAgIDE1LDEwfSwgeyAgICAgMzEsIDl9LCBcCisgICAgeyAgICAgNzEsMTB9LCB7ICAgICAzOSwgOX0sIHsgICAgIDgzLDEwfSwgeyAgICAgNDcsIDl9LCBcCisgICAgeyAgICAgOTksMTB9LCB7ICAgICA1NSwxMX0sIHsgICAgIDMxLDEwfSwgeyAgICAgNjMsIDl9LCBcCisgICAgeyAgICAxMjcsMTB9LCB7ICAgICA3MSwgOX0sIHsgICAgMTQzLDEwfSwgeyAgICAgNzksMTF9LCBcCisgICAgeyAgICAgNDcsMTB9LCB7ICAgIDEwMywxMn0sIHsgICAgIDMxLDExfSwgeyAgICAgNjMsMTB9LCBcCisgICAgeyAgICAxMjcsIDl9LCB7ICAgIDI1NSwxMH0sIHsgICAgMTM1LCA5fSwgeyAgICAyNzEsMTB9LCBcCisgICAgeyAgICAxNDMsMTF9LCB7ICAgICA3OSwgOX0sIHsgICAgMzE5LDEwfSwgeyAgICAxNjcsIDl9LCBcCisgICAgeyAgICAzNTEsMTF9LCB7ICAgICA5NSwgOX0sIHsgICAgMzgzLCA4fSwgeyAgICA3NjcsMTB9LCBcCisgICAgeyAgICAyMDcsIDl9LCB7ICAgIDQxNSwxMX0sIHsgICAgMTExLDEyfSwgeyAgICAgNjMsMTF9LCBcCisgICAgeyAgICAxMjcsMTB9LCB7ICAgIDI1NSwgOX0sIHsgICAgNTExLDEwfSwgeyAgICAyNzEsIDl9LCBcCisgICAgeyAgICA1NDMsMTF9LCB7ICAgIDE0MywxMH0sIHsgICAgMjg3LCA5fSwgeyAgICA1NzUsMTB9LCBcCisgICAgeyAgICAzMTksIDl9LCB7ICAgIDYzOSwxMH0sIHsgICAgMzUxLDEyfSwgeyAgICAgOTUsMTB9LCBcCisgICAgeyAgICAzODMsIDl9LCB7ICAgIDc2NywxMX0sIHsgICAgMjA3LDEwfSwgeyAgICA0MTUsIDl9LCBcCisgICAgeyAgICA4MzEsMTF9LCB7ICAgIDIyMywxMH0sIHsgICAgNDQ3LDEzfSwgeyAgIDgxOTIsMTR9LCBcCisgICAgeyAgMTYzODQsMTV9LCB7ICAzMjc2OCwxNn0sIHsgIDY1NTM2LDE3fSwgeyAxMzEwNzIsMTh9LCBcCisgICAgeyAyNjIxNDQsMTl9LCB7IDUyNDI4OCwyMH0sIHsxMDQ4NTc2LDIxfSwgezIwOTcxNTIsMjJ9LCBcCisgICAgezQxOTQzMDQsMjN9LCB7ODM4ODYwOCwyNH0gfQorI2RlZmluZSBNVUxfRkZUX1RBQkxFM19TSVpFIDk4CisjZGVmaW5lIE1VTF9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA0NzM2CisKKyNkZWZpbmUgU1FSX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICAzNDAgIC8qIGsgPSA1ICovCisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICAzNDAsIDV9LCB7ICAgICAxNywgNn0sIHsgICAgICA5LCA1fSwgeyAgICAgMTksIDZ9LCBcCisgICAgeyAgICAgMTksIDd9LCB7ICAgICAxMCwgNn0sIHsgICAgIDIxLCA3fSwgeyAgICAgMTEsIDZ9LCBcCisgICAgeyAgICAgMjMsIDd9LCB7ICAgICAyMSwgOH0sIHsgICAgIDExLCA3fSwgeyAgICAgMjQsIDh9LCBcCisgICAgeyAgICAgMTUsIDd9LCB7ICAgICAzMSwgOH0sIHsgICAgIDIxLCA5fSwgeyAgICAgMTEsIDh9LCBcCisgICAgeyAgICAgMjcsIDl9LCB7ICAgICAxNSwgOH0sIHsgICAgIDMzLCA5fSwgeyAgICAgMTksIDh9LCBcCisgICAgeyAgICAgMzksIDl9LCB7ICAgICAyMywgOH0sIHsgICAgIDQ3LCA5fSwgeyAgICAgMjcsMTB9LCBcCisgICAgeyAgICAgMTUsIDl9LCB7ICAgICAzMSwgOH0sIHsgICAgIDYzLCA5fSwgeyAgICAgMzksMTB9LCBcCisgICAgeyAgICAgMjMsIDl9LCB7ICAgICA1MSwxMX0sIHsgICAgIDE1LDEwfSwgeyAgICAgMzEsIDl9LCBcCisgICAgeyAgICAgNjcsMTB9LCB7ICAgICAzOSwgOX0sIHsgICAgIDc5LDEwfSwgeyAgICAgNDcsIDl9LCBcCisgICAgeyAgICAgOTUsMTB9LCB7ICAgICA1NSwxMX0sIHsgICAgIDMxLDEwfSwgeyAgICAgNzksMTF9LCBcCisgICAgeyAgICAgNDcsMTB9LCB7ICAgICA5NSwgOX0sIHsgICAgMTkxLDEyfSwgeyAgICAgMzEsMTF9LCBcCisgICAgeyAgICAgNjMsMTB9LCB7ICAgIDEyNywgOX0sIHsgICAgMjU1LCA4fSwgeyAgICA1MTEsMTB9LCBcCisgICAgeyAgICAxMzUsIDl9LCB7ICAgIDI3MSwxMX0sIHsgICAgIDc5LCA5fSwgeyAgICAzMTksIDh9LCBcCisgICAgeyAgICA2MzksMTB9LCB7ICAgIDE3NSwxMX0sIHsgICAgIDk1LDEwfSwgeyAgICAxOTEsIDl9LCBcCisgICAgeyAgICAzODMsMTB9LCB7ICAgIDIwNywxMn0sIHsgICAgIDYzLDExfSwgeyAgICAxMjcsMTB9LCBcCisgICAgeyAgICAyNTUsIDl9LCB7ICAgIDUxMSwxMH0sIHsgICAgMjcxLCA5fSwgeyAgICA1NDMsMTB9LCBcCisgICAgeyAgICAyODcsIDl9LCB7ICAgIDU3NSwxMH0sIHsgICAgMzE5LCA5fSwgeyAgICA2MzksMTF9LCBcCisgICAgeyAgICAxNzUsMTB9LCB7ICAgIDM1MSwxMn0sIHsgICAgIDk1LDExfSwgeyAgICAxOTEsMTB9LCBcCisgICAgeyAgICAzODMsIDl9LCB7ICAgIDc2NywxMX0sIHsgICAgMjA3LDEwfSwgeyAgICA0MTUsMTN9LCBcCisgICAgeyAgIDgxOTIsMTR9LCB7ICAxNjM4NCwxNX0sIHsgIDMyNzY4LDE2fSwgeyAgNjU1MzYsMTd9LCBcCisgICAgeyAxMzEwNzIsMTh9LCB7IDI2MjE0NCwxOX0sIHsgNTI0Mjg4LDIwfSwgezEwNDg1NzYsMjF9LCBcCisgICAgezIwOTcxNTIsMjJ9LCB7NDE5NDMwNCwyM30sIHs4Mzg4NjA4LDI0fSB9CisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzX1NJWkUgODcKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDMyNjQKKworI2RlZmluZSBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDQ1CisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgICA4NjQ4CisjZGVmaW5lIFNRUkxPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgU1FSTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAxMDgKKyNkZWZpbmUgU1FSTE9fU1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDY0NjEKKworI2RlZmluZSBEQ19ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA2NAorI2RlZmluZSBEQ19ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgIDIyMgorI2RlZmluZSBEQ19CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA2MworI2RlZmluZSBEQ19CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDEzMgorCisjZGVmaW5lIElOVl9NVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgIDM4CisjZGVmaW5lIElOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAgMjQyCisjZGVmaW5lIElOVl9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMjIyCisKKyNkZWZpbmUgQklOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAyNTQKKyNkZWZpbmUgUkVEQ18xX1RPX1JFRENfTl9USFJFU0hPTEQgICAgICAgICAgNjYKKworI2RlZmluZSBNVV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTIzNAorI2RlZmluZSBNVV9ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgMTIzNAorI2RlZmluZSBNVVBJX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgIDEyMgorI2RlZmluZSBNVV9CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTIxMAorI2RlZmluZSBNVV9CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTIzNAorCisjZGVmaW5lIFBPV01fU0VDX1RBQkxFICAzLDIzLDE5NCw3MTIsMjQ5OQorCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgIDIyCisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgMzgxCisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAyNTAzCisKKyNkZWZpbmUgRkFDX0RTQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAyMTYKKyNkZWZpbmUgRkFDX09ERF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgMjYKKworI2RlZmluZSBNQVRSSVgyMl9TVFJBU1NFTl9USFJFU0hPTEQgICAgICAgICAxNAorI2RlZmluZSBIR0NEMl9ESVYxX01FVEhPRCAgICAgICAgICAgICAgICAgICAgNSAgLyogMi4wMSUgZmFzdGVyIHRoYW4gMyAqLworI2RlZmluZSBIR0NEX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgIDEyMgorI2RlZmluZSBIR0NEX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE3MQorI2RlZmluZSBIR0NEX1JFRFVDRV9USFJFU0hPTEQgICAgICAgICAgICAgMjQ3OQorI2RlZmluZSBHQ0RfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDU0MQorI2RlZmluZSBHQ0RFWFRfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDM4NgorI2RlZmluZSBKQUNPQklfQkFTRV9NRVRIT0QgICAgICAgICAgICAgICAgICAgNCAgLyogNy40NiUgZmFzdGVyIHRoYW4gMSAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9hc20tZGVmcy5tNCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXNtLWRlZnMubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I3ZTUzZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vYXNtLWRlZnMubTQKQEAgLTAsMCArMSwxNzY2IEBACitkaXZlcnQoLTEpCitkbmwKK2RubCAgbTQgbWFjcm9zIGZvciBnbXAgYXNzZW1ibHkgY29kZSwgc2hhcmVkIGJ5IGFsbCBDUFVzLgorCitkbmwgIENvcHlyaWdodCAxOTk5LTIwMDYsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCitkbmwgIFRoZXNlIG1hY3JvcyBhcmUgZGVzaWduZWQgZm9yIHVzZSB3aXRoIGFueSBtNCBhbmQgaGF2ZSBiZWVuIHVzZWQgb24KK2RubCAgR05VLCBGcmVlQlNELCBOZXRCU0QsIE9wZW5CU0QgYW5kIFN5c1YuCitkbmwKK2RubCAgR05VIG00IGFuZCBPcGVuQlNEIDIuNyBtNCB3aWxsIGdpdmUgZmlsZW5hbWVzIGFuZCBsaW5lIG51bWJlcnMgaW4gZXJyb3IKK2RubCAgbWVzc2FnZXMuCitkbmwKK2RubAorZG5sICBNYWNyb3M6CitkbmwKK2RubCAgTW9zdCBuZXcgbTQgc3BlY2lmaWMgbWFjcm9zIGhhdmUgYW4gIm00XyIgcHJlZml4IHRvIGVtcGhhc2lzZSB0aGV5J3JlCitkbmwgIG00IGV4cGFuc2lvbnMuICBCdXQgbmV3IGRlZmluaW5nIHRoaW5ncyBsaWtlIGRlZmxpdCgpIGFuZCBkZWZyZWcoKSBhcmUKK2RubCAgbmFtZWQgbGlrZSB0aGUgYnVpbHRpbiBkZWZpbmUoKSwgYW5kIGZvcmxvb3AoKSBpcyBuYW1lZCBmb2xsb3dpbmcgdGhlCitkbmwgIEdOVSBtNCBleGFtcGxlIG9uIHdoaWNoIGl0J3MgYmFzZWQuCitkbmwKK2RubCAgR05VIG00IHdpdGggdGhlIC1QIG9wdGlvbiB1c2VzICJtNF8iIGFzIGEgcHJlZml4IGZvciBidWlsdGlucywgYnV0IHRoYXQKK2RubCAgb3B0aW9uIGlzbid0IGdvaW5nIHRvIGJlIHVzZWQsIHNvIHRoZXJlJ3Mgbm8gY29uZmxpY3Qgb3IgY29uZnVzaW9uLgorZG5sCitkbmwKK2RubCAgQ29tbWVudHMgaW4gb3V0cHV0OgorZG5sCitkbmwgIFRoZSBtNCBjb21tZW50IGRlbGltaXRlcnMgYXJlIGxlZnQgYXQgIyBhbmQgXG4sIHRoZSBub3JtYWwgYXNzZW1ibGVyCitkbmwgIGNvbW1lbnRpbmcgZm9yIG1vc3QgQ1BVcy4gIG00IHBhc3NlcyBjb21tZW50IHRleHQgdGhyb3VnaCB3aXRob3V0CitkbmwgIGV4cGFuZGluZyBtYWNyb3MgaW4gaXQsIHdoaWNoIGlzIGdlbmVyYWxseSBhIGdvb2QgdGhpbmcgc2luY2UgaXQgc3RvcHMKK2RubCAgdW5leHBlY3RlZCBleHBhbnNpb25zIGFuZCBwb3NzaWJsZSByZXN1bHRhbnQgZXJyb3JzLgorZG5sCitkbmwgIEJ1dCBub3RlIHRoYXQgd2hlbiBhIHF1b3RlZCBzdHJpbmcgaXMgYmVpbmcgcmVhZCwgYSAjIGlzbid0IHNwZWNpYWwsIHNvCitkbmwgIGFwb3N0cm9waGVzIGluIGNvbW1lbnRzIGluIHF1b3RlZCBzdHJpbmdzIG11c3QgYmUgYXZvaWRlZCBvciB0aGV5J2xsIGJlCitkbmwgIGludGVycHJldGVkIGFzIGEgY2xvc2luZyBxdW90ZSBtYXJrLiAgQnV0IHdoZW4gdGhlIHF1b3RlZCB0ZXh0IGlzCitkbmwgIHJlLXJlYWQgIyB3aWxsIHN0aWxsIGFjdCBsaWtlIGEgbm9ybWFsIGNvbW1lbnQsIHN1cHByZXNzaW5nIG1hY3JvCitkbmwgIGV4cGFuc2lvbi4KK2RubAorZG5sICBGb3IgZXhhbXBsZSwKK2RubAorZG5sICAgICAgICAgICMgYXBvc3Ryb3BoZXMgaW4gY29tbWVudHMgdGhhdCdyZSBvdXRzaWRlIHF1b3RlcyBhcmUgb2sKK2RubCAgICAgICAgICAjIGFuZCB1c2luZyBtYWNybyBuYW1lcyBsaWtlIFBST0xPR1VFIGlzIG9rIHRvbworZG5sICAgICAgICAgIC4uLgorZG5sICAgICAgICAgIGlmZGVmKGBQSUMnLGAKK2RubCAgICAgICAgICAgICAgICAgICMgYnV0IGFwb3N0cm9waGVzIGFyZW4ndCBvayBpbnNpZGUgcXVvdGVzCitkbmwgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgXi0td3JvbmcKK2RubCAgICAgICAgICAgICAgICAgIC4uLgorZG5sICAgICAgICAgICAgICAgICAgIyB0aG91Z2ggbWFjcm8gbmFtZXMgbGlrZSBQUk9MT0dVRSBhcmUgc3RpbGwgb2sKK2RubCAgICAgICAgICAgICAgICAgIC4uLgorZG5sICAgICAgICAgICcpCitkbmwKK2RubCAgSWYgbWFjcm8gZXhwYW5zaW9uIGluIGEgY29tbWVudCBpcyB3YW50ZWQsIHVzZSBgIycgaW4gdGhlIC5hc20gKGllLiBhCitkbmwgIHF1b3RlZCBoYXNoIHN5bWJvbCksIHdoaWNoIHdpbGwgdHVybiBpbnRvICMgaW4gdGhlIC5zIGJ1dCBnZXQKK2RubCAgZXhwYW5zaW9ucyBkb25lIG9uIHRoYXQgbGluZS4gIFRoaXMgY2FuIG1ha2UgdGhlIC5zIG1vcmUgcmVhZGFibGUgdG8KK2RubCAgaHVtYW5zLCBidXQgaXQgd29uJ3QgbWFrZSBhIGJsaW5kIGJpdCBvZiBkaWZmZXJlbmNlIHRvIHRoZSBhc3NlbWJsZXIuCitkbmwKK2RubCAgQWxsIHRoZSBhYm92ZSBhcHBsaWVzLCBtdXRhdGlzIG11dGFuZGlzLCB3aGVuIGNoYW5nZWNvbSgpIGlzIHVzZWQgdG8KK2RubCAgc2VsZWN0IEAgISA7IG9yIHdoYXRldmVyIG90aGVyIGNvbW1lbnRpbmcuCitkbmwKK2RubAorZG5sICBWYXJpYXRpb25zIGluIG00IGFmZmVjdGluZyBnbXA6CitkbmwKK2RubCAgJCMgLSBXaGVuIGEgbWFjcm8gaXMgY2FsbGVkIGFzICJmb28iIHdpdGggbm8gYnJhY2tldHMsIEJTRCBtNCBzZXRzICQjCitkbmwgICAgICAgdG8gMSwgd2hlcmVhcyBHTlUgb3IgU3lzViBtNCBzZXQgaXQgdG8gMC4gIEluIGFsbCBjYXNlcyB0aG91Z2gKK2RubCAgICAgICAiZm9vKCkiIHNldHMgJCMgdG8gMS4gIFRoaXMgaXMgd29ya2VkIGFyb3VuZCBpbiB2YXJpb3VzIHBsYWNlcy4KK2RubAorZG5sICBsZW4oKSAtIFdoZW4gImxlbigpIiBpcyBnaXZlbiBhbiBlbXB0eSBhcmd1bWVudCwgQlNEIG00IGV2YWx1YXRlcyB0bworZG5sICAgICAgIG5vdGhpbmcsIHdoZXJlYXMgR05VLCBTeXNWLCBhbmQgdGhlIG5ldyBPcGVuQlNELCBldmFsdWF0ZSB0byAwLgorZG5sICAgICAgIFNlZSBtNF9sZW5ndGgoKSBiZWxvdyB3aGljaCB3b3JrcyBhcm91bmQgdGhpcy4KK2RubAorZG5sICB0cmFuc2xpdCgpIC0gR05VIG00IGFjY2VwdHMgY2hhcmFjdGVyIHJhbmdlcyBsaWtlIEEtWiwgYW5kIHRoZSBuZXcKK2RubCAgICAgICBPcGVuQlNEIG00IGRvZXMgdW5kZXIgb3B0aW9uIC1nLCBidXQgYmFzaWMgQlNEIGFuZCBTeXNWIGRvbid0LgorZG5sCitkbmwgIHBvcGRlZigpIC0gaW4gQlNEIGFuZCBTeXNWIG00IHBvcGRlZigpIHRha2VzIG11bHRpcGxlIGFyZ3VtZW50cyBhbmQKK2RubCAgICAgICBwb3BzIGVhY2gsIGJ1dCBHTlUgbTQgb25seSB0YWtlcyBvbmUgYXJndW1lbnQuCitkbmwKK2RubCAgcHVzaCBiYWNrIC0gQlNEIG00IGhhcyBzb21lIGxpbWl0cyBvbiB0aGUgYW1vdW50IG9mIHRleHQgdGhhdCBjYW4gYmUKK2RubCAgICAgICBwdXNoZWQgYmFjay4gIFRoZSBsaW1pdCBpcyByZWFzb25hYmx5IGJpZyBhbmQgc28gbG9uZyBhcyBtYWNyb3MKK2RubCAgICAgICBkb24ndCBncmF0dWl0b3VzbHkgZHVwbGljYXRlIGJpZyBhcmd1bWVudHMgaXQgaXNuJ3QgYSBwcm9ibGVtLgorZG5sICAgICAgIE5vcm1hbGx5IGFuIGVycm9yIG1lc3NhZ2UgaXMgZ2l2ZW4sIGJ1dCBzb21ldGltZXMgaXQganVzdCBoYW5ncy4KK2RubAorZG5sICBldmFsKCkgJix8LF4gLSBHTlUgYW5kIFN5c1YgbTQgaGF2ZSBiaXR3aXNlIG9wZXJhdG9ycyAmLHwsXiBhdmFpbGFibGUsCitkbmwgICAgICAgYnV0IEJTRCBtNCBkb2Vzbid0IChjb250cmFyeSB0byB3aGF0IHRoZSBtYW4gcGFnZSBzdWdnZXN0cykgYW5kCitkbmwgICAgICAgaW5zdGVhZCBeIGlzIGV4cG9uZW50aWF0aW9uLgorZG5sCitkbmwgIGV2YWwoKSA/OiAtIFRoZSBDIHRlcm5hcnkgb3BlcmF0b3IgIj86IiBpcyBhdmFpbGFibGUgaW4gQlNEIG00LCBidXQgbm90CitkbmwgICAgICAgaW4gU3lzViBvciBHTlUgbTQgKGFzIG9mIEdOVSBtNCAxLjQgYW5kIGJldGFzIG9mIDEuNSkuCitkbmwKK2RubCAgZXZhbCgpIC0yXjMxIC0gQlNEIG00IGhhcyBhIGJ1ZyB3aGVyZSBhbiBldmFsKCkgcmVzdWx0aW5nIGluIC0yXjMxCitkbmwgICAgICAgKGllLiAtMjE0NzQ4MzY0OCkgZ2l2ZXMgIi0oIi4gIFVzaW5nIC0yMTQ3NDgzNjQ4IHdpdGhpbiBhbgorZG5sICAgICAgIGV4cHJlc3Npb24gaXMgb2ssIGl0IGp1c3QgY2FuJ3QgYmUgYSBmaW5hbCByZXN1bHQuICAiLSgiIHdpbGwgb2YKK2RubCAgICAgICBjb3Vyc2UgdXBzZXQgcGFyc2luZywgd2l0aCBhbGwgc29ydHMgb2Ygc3RyYW5nZSBlZmZlY3RzLgorZG5sCitkbmwgIGV2YWwoKSA8PCw+PiAtIFN5c1YgbTQgZG9lc24ndCBzdXBwb3J0IHNoaWZ0IG9wZXJhdG9ycyBpbiBldmFsKCkgKG9uCitkbmwgICAgICAgU29sYXJpcyA3IC91c3IveHBnNC9tNCBoYXMgdGhlbSBidXQgL3Vzci9jY3MvbTQgZG9lc24ndCkuICBTZWUKK2RubCAgICAgICBtNF9sc2hpZnQoKSBhbmQgbTRfcnNoaWZ0KCkgYmVsb3cgZm9yIHdvcmthcm91bmRzLgorZG5sCitkbmwgIGlmZGVmKCkgLSBPU0YgNC4wIG00IGNvbnNpZGVycyBhIG1hY3JvIGRlZmluZWQgdG8gYSB6ZXJvIHZhbHVlIGAwJyBvcgorZG5sICAgICAgIGAwMCcgZXRjIGFzIG5vdCBkZWZpbmVkLiAgU2VlIG00X2lmZGVmIGJlbG93IGZvciBhIHdvcmthcm91bmQuCitkbmwKK2RubCAgbTR3cmFwKCkgc2VxdWVuY2UgLSBpbiBCU0QgbTQsIG00d3JhcCgpIHJlcGxhY2VzIGFueSBwcmV2aW91cyBtNHdyYXAoKQorZG5sICAgICAgIHN0cmluZywgaW4gU3lzViBtNCBpdCBhcHBlbmRzIHRvIGl0LCBhbmQgaW4gR05VIG00IGl0IHByZXBlbmRzLgorZG5sICAgICAgIFNlZSBtNHdyYXBfcHJlcGVuZCgpIGJlbG93IHdoaWNoIGJyaW5ncyB1bmlmb3JtaXR5IHRvIHRoaXMuCitkbmwKK2RubCAgbTR3cmFwKCkgMHhGRiAtIG9sZCB2ZXJzaW9ucyBvZiBCU0QgbTQgc3RvcmUgRU9GIGluIGEgQyAiY2hhciIgdW5kZXIgYW4KK2RubCAgICAgICBtNHdyYXAoKSBhbmQgb24gc3lzdGVtcyB3aGVyZSBjaGFyIGlzIHVuc2lnbmVkIGJ5IGRlZmF1bHQgYQorZG5sICAgICAgIHNwdXJpb3VzIDB4RkYgaXMgb3V0cHV0LiAgVGhpcyBoYXMgYmVlbiBvYnNlcnZlZCBvbiByZWNlbnQgQ3JheQorZG5sICAgICAgIFVuaWNvcyBBbHBoYSwgQXBwbGUgTWFjT1MgWCwgYW5kIEhQVVggMTEgc3lzdGVtcy4gIEFuIGF1dG9jb25mCitkbmwgICAgICAgdGVzdCBpcyB1c2VkIHRvIGNoZWNrIGZvciB0aGlzLCBzZWUgdGhlIG00d3JhcCBoYW5kbGluZyBiZWxvdy4gIEl0CitkbmwgICAgICAgbWlnaHQgd29yayB0byBlbmQgdGhlIG00d3JhcCBzdHJpbmcgd2l0aCBhIGRubCB0byBjb25zdW1lIHRoZQorZG5sICAgICAgIDB4RkYsIGJ1dCB0aGF0IHByb2JhYmx5IGluZHVjZXMgdGhlIG9mZmVuZGluZyBtNCdzIHRvIHJlYWQgZnJvbSBhbgorZG5sICAgICAgIGFscmVhZHkgY2xvc2VkICJGSUxFICoiLCB3aGljaCBjb3VsZCBiZSBiYWQgb24gYSBnbGliYyBzdHlsZQorZG5sICAgICAgIHN0ZGlvLgorZG5sCitkbmwgIF9fZmlsZV9fLF9fbGluZV9fIC0gR05VIG00IGFuZCBPcGVuQlNEIDIuNyBtNCBwcm92aWRlIHRoZXNlLCBhbmQKK2RubCAgICAgICB0aGV5J3JlIHVzZWQgaGVyZSB0byBtYWtlIGVycm9yIG1lc3NhZ2VzIG1vcmUgaW5mb3JtYXRpdmUuICBHTlUgbTQKK2RubCAgICAgICBnaXZlcyBhbiB1bmhlbHBmdWwgIk5PTkUgMCIgaW4gYW4gbTR3cmFwKCksIGJ1dCB0aGF0J3Mgd29ya2VkCitkbmwgICAgICAgYXJvdW5kLgorZG5sCitkbmwgIF9fZmlsZV9fIHF1b3RpbmcgLSBPcGVuQlNEIG00LCB1bmxpa2UgR05VIG00LCBkb2Vzbid0IHF1b3RlIHRoZQorZG5sICAgICAgIGZpbGVuYW1lIGluIF9fZmlsZV9fLCBzbyBjYXJlIHNob3VsZCBiZSB0YWtlbiB0aGF0IG5vIG1hY3JvIGhhcworZG5sICAgICAgIHRoZSBzYW1lIG5hbWUgYXMgYSBmaWxlLCBvciBhbiB1bndhbnRlZCBleHBhbnNpb24gd2lsbCBvY2N1ciB3aGVuCitkbmwgICAgICAgcHJpbnRpbmcgYW4gZXJyb3Igb3Igd2FybmluZy4KK2RubAorZG5sICBjaGFuZ2Vjb20oKSAtIEJTRCBtNCBjaGFuZ2Vjb20gZG9lc24ndCBxdWl0ZSB3b3JrIGxpa2UgdGhlIG1hbiBwYWdlCitkbmwgICAgICAgc3VnZ2VzdHMsIGluIHBhcnRpY3VsYXIgImNoYW5nZWNvbSIgb3IgImNoYW5nZWNvbSgpIiBkb2Vzbid0CitkbmwgICAgICAgZGlzYWJsZSB0aGUgY29tbWVudCBmZWF0dXJlLCBhbmQgbXVsdGktY2hhcmFjdGVyIGNvbW1lbnQgc2VxdWVuY2VzCitkbmwgICAgICAgZG9uJ3Qgc2VlbSB0byB3b3JrLiAgSWYgdGhlIGRlZmF1bHQgYCMnIGFuZCBuZXdsaW5lIGFyZW4ndAorZG5sICAgICAgIHN1aXRhYmxlIGl0J3MgbmVjZXNzYXJ5IHRvIGNoYW5nZSBpdCB0byBzb21ldGhpbmcgZWxzZSwKK2RubCAgICAgICBlZy4gY2hhbmdlY29tKDspLgorZG5sCitkbmwgIE9wZW5CU0QgMi42IG00IC0gaW4gdGhpcyBtNCwgZXZhbCgpIHJlamVjdHMgZGVjaW1hbCBjb25zdGFudHMgY29udGFpbmluZworZG5sICAgICAgIGFuIDggb3IgOSwgbWFraW5nIGl0IHByZXR0eSBtdWNoIHVudXNhYmxlLiAgVGhlIGJ1ZyBpcyBjb25maW5lZCB0bworZG5sICAgICAgIHZlcnNpb24gMi42IChpdCdzIG5vdCBpbiAyLjUsIGFuZCB3YXMgZml4ZWQgaW4gMi43KS4KK2RubAorZG5sICBTdW5PUyAvdXNyL2Jpbi9tNCAtIHRoaXMgbTQgbGFja3MgYSBudW1iZXIgb2YgZGVzaXJlZCBmZWF0dXJlcywKK2RubCAgICAgICBpbmNsdWRpbmcgJCMgYW5kICRALCBkZWZuKCksIG00ZXhpdCgpLCBtNHdyYXAoKSwgcHVzaGRlZigpLAorZG5sICAgICAgIHBvcGRlZigpLiAgL3Vzci81YmluL200IGlzIGEgU3lzViBzdHlsZSBtNCB3aGljaCBzaG91bGQgYWx3YXlzIGJlCitkbmwgICAgICAgYXZhaWxhYmxlLCBhbmQgImNvbmZpZ3VyZSIgd2lsbCByZWplY3QgL3Vzci9iaW4vbTQgaW4gZmF2b3VyIG9mCitkbmwgICAgICAgL3Vzci81YmluL200IChpZiBuZWNlc3NhcnkpLgorZG5sCitkbmwgICAgICAgVGhlIHNwYXJjIGNvZGUgYWN0dWFsbHkgaGFzIG1vZGVzdCBtNCByZXF1aXJlbWVudHMgY3VycmVudGx5IGFuZAorZG5sICAgICAgIGNvdWxkIG1hbmFnZSB3aXRoIC91c3IvYmluL200LCBidXQgdGhlcmUncyBubyByZWFzb24gdG8gcHV0IG91cgorZG5sICAgICAgIG1hY3JvcyB0aHJvdWdoIGNvbnRvcnRpb25zIHdoZW4gL3Vzci81YmluL200IGlzIGF2YWlsYWJsZSBvciBHTlUKK2RubCAgICAgICBtNCBjYW4gYmUgaW5zdGFsbGVkLgorCisKK2lmZGVmKGBfX0FTTV9ERUZTX000X0lOQ0xVREVEX18nLAorYG00X2Vycm9yKGBhc20tZGVmcy5tNCBhbHJlYWR5IGluY2x1ZGVkLCBkb250IGluY2x1ZGUgaXQgdHdpY2UKKycpbTRleGl0KDEpJykKK2RlZmluZShgX19BU01fREVGU19NNF9JTkNMVURFRF9fJykKKworCitkbmwgIERldGVjdCBhbmQgZ2l2ZSBhIG1lc3NhZ2UgYWJvdXQgdGhlIHVuc3VpdGFibGUgT3BlbkJTRCAyLjYgbTQuCisKK2lmZWxzZShldmFsKDg5KSw4OSwsCitgZXJycHJpbnQoCitgVGhpcyBtNCBkb2VzbnQgYWNjZXB0IDggYW5kL29yIDkgaW4gY29uc3RhbnRzIGluIGV2YWwoKSwgbWFraW5nIGl0IHVudXNhYmxlLgorVGhpcyBpcyBwcm9iYWJseSBPcGVuQlNEIDIuNiBtNCAoU2VwdGVtYmVyIDE5OTkpLiAgVXBncmFkZSB0byBPcGVuQlNEIDIuNywKK29yIGdldCBhIGJ1ZyBmaXggZnJvbSB0aGUgQ1ZTIChleHByLmMgcmV2IDEuOSksIG9yIGdldCBHTlUgbTQuICBEb250IGZvcmdldAordG8gY29uZmlndXJlIHdpdGggTTQ9L3doZXJldmVyL200IGlmIHlvdSBpbnN0YWxsIG9uZSBvZiB0aGVzZSBpbiBhIGRpcmVjdG9yeQorbm90IGluICRQQVRILgorJyltNGV4aXQoMSknKQorCisKK2RubCAgRGV0ZWN0IGFuZCBnaXZlIGEgbWVzc2FnZSBhYm91dCB0aGUgdW5zdWl0YWJsZSBTdW5PUyAvdXNyL2Jpbi9tNC4KK2RubAorZG5sICBVbmZvcnR1bmF0ZWx5IHRoaXMgdGVzdCBkb2Vzbid0IHdvcmsgd2hlbiBtNCBpcyBydW4gaW4gdGhlIG5vcm1hbCB3YXkKK2RubCAgZnJvbSBtcG4vTWFrZWZpbGUgd2l0aCAibTQgLURPUEVSQVRJT05fZm9vIGZvby5hc20iLCBzaW5jZSB0aGUgYmFkIG00CitkbmwgIHRha2VzICItIiBpbiAiLUQuLi4iIHRvIG1lYW4gcmVhZCBzdGRpbiwgc28gaXQgd2lsbCBsb29rIGxpa2UgaXQganVzdAorZG5sICBoYW5ncy4gIEJ1dCBydW5uaW5nICJtNCBhc20tZGVmcy5tNCIgdG8gdHJ5IGl0IG91dCB3aWxsIHdvcmsuCitkbmwKK2RubCAgV2UnZCBsaWtlIHRvIGFib3J0IGltbWVkaWF0ZWx5IG9uIGZpbmRpbmcgYSBwcm9ibGVtLCBidXQgdW5mb3J0dW5hdGVseQorZG5sICB0aGUgYmFkIG00IGRvZXNuJ3QgaGF2ZSBhbiBtNGV4aXQoKSwgbm9yIGRvZXMgYW4gaW52YWxpZCBldmFsKCkga2lsbAorZG5sICBpdC4gIFVuZXhwYW5kZWQgJCMncyBpbiBzb21lIG00X2Fzc2VydF9udW1hcmdzKCkgbGF0ZXIgb24gd2lsbCBjb21tZW50CitkbmwgIG91dCBzb21lIGNsb3NpbmcgcGFyZW50aGVzZXMgYW5kIGtpbGwgaXQgd2l0aCAibTQ6IGFyZyBzdGFjayBvdmVyZmxvdyIuCisKK2RlZmluZShtNF9kb2xsYXJoYXNoX3dvcmtzX3Rlc3QsYGAkIycnKQoraWZlbHNlKG00X2RvbGxhcmhhc2hfd29ya3NfdGVzdCh4KSwxLCwKK2BlcnJwcmludCgKK2BUaGlzIG00IGRvZXNudCBzdXBwb3J0ICQjIGFuZCBjYW50IGJlIHVzZWQgZm9yIEdNUCBhc20gcHJvY2Vzc2luZy4KK0lmIHRoaXMgaXMgb24gU3VuT1MsIC4vY29uZmlndXJlIHNob3VsZCBjaG9vc2UgL3Vzci81YmluL200IGlmIHlvdSBoYXZlIHRoYXQKK29yIGNhbiBnZXQgaXQsIG90aGVyd2lzZSBpbnN0YWxsIEdOVSBtNC4gIERvbnQgZm9yZ2V0IHRvIGNvbmZpZ3VyZSB3aXRoCitNND0vd2hlcmV2ZXIvbTQgaWYgeW91IGluc3RhbGwgaW4gYSBkaXJlY3Rvcnkgbm90IGluICRQQVRILgorJyknKQordW5kZWZpbmUoYG00X2RvbGxhcmhhc2hfd29ya3NfdGVzdCcpCisKKworZG5sICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sICBCYXNpYyBlcnJvciBoYW5kbGluZyB0aGluZ3MuCisKKworZG5sICBVc2FnZTogbTRfZG9sbGFyaGFzaF8xX2lmX25vcGFyZW5fcAorZG5sCitkbmwgIEV4cGFuZCB0byAxIGlmIGEgY2FsbCAiZm9vIiBnaXZlcyAkIyBzZXQgdG8gMSAoYXMgb3Bwb3NlZCB0byAwIGxpa2UgR05VCitkbmwgIGFuZCBTeXNWIG00IGdpdmUpLgorCitkZWZpbmUobTRfZG9sbGFyaGFzaF8xX2lmX25vcGFyZW5fdGVzdCxgJCMnKQorZGVmaW5lKG00X2RvbGxhcmhhc2hfMV9pZl9ub3BhcmVuX3AsCitldmFsKG00X2RvbGxhcmhhc2hfMV9pZl9ub3BhcmVuX3Rlc3Q9PTEpKQordW5kZWZpbmUoYG00X2RvbGxhcmhhc2hfMV9pZl9ub3BhcmVuX3Rlc3QnKQorCisKK2RubCAgVXNhZ2U6IG00d3JhcF9wcmVwZW5kKHN0cmluZykKK2RubAorZG5sICBQcmVwZW5kIHRoZSBnaXZlbiBzdHJpbmcgdG8gd2hhdCB3aWxsIGJlIGV4cGFuZGVkIHVuZGVyIG00d3JhcCBhdCB0aGUKK2RubCAgZW5kIG9mIGlucHV0LgorZG5sCitkbmwgIFRoaXMgbWFjcm8gZXhpc3RzIHRvIHdvcmsgYXJvdW5kIHZhcmlhdGlvbnMgaW4gbTR3cmFwKCkgYmVoYXZpb3VyIGluCitkbmwgIHRoZSB2YXJpb3VzIG00cyAobm90ZXMgYXQgdGhlIHN0YXJ0IG9mIHRoaXMgZmlsZSkuICBEb24ndCB1c2UgbTR3cmFwKCkKK2RubCAgZGlyZWN0bHkgc2luY2UgaXQgd2lsbCBpbnRlcmZlcmUgd2l0aCB0aGlzIHNjaGVtZS4KKworZGVmaW5lKG00d3JhcF9wcmVwZW5kLAorbTRfYXNzZXJ0X251bWFyZ3MoMSkKK2BkZWZpbmUoYG00d3JhcF9zdHJpbmcnLGAkMSdkZWZuKGBtNHdyYXBfc3RyaW5nJykpJykKKworZGVmaW5lKG00d3JhcF9zdHJpbmcsYCcpCisKK2RlZmluZShtNHdyYXBfd29ya3NfcCwKK2BpZmVsc2UoTTRXUkFQX1NQVVJJT1VTLHllcywwLDEpJykKKworaWZlbHNlKG00d3JhcF93b3Jrc19wLDEsCitgbTR3cmFwKGBtNHdyYXBfc3RyaW5nJyknKQorCisKK2RubCAgVXNhZ2U6IG00X2ZpbGVfYW5kX2xpbmUKK2RubAorZG5sICBFeHBhbmQgdG8gdGhlIGN1cnJlbnQgZmlsZSBhbmQgbGluZSBudW1iZXIsIGlmIHRoZSBHTlUgbTQgZXh0ZW5zaW9ucworZG5sICBfX2ZpbGVfXyBhbmQgX19saW5lX18gYXJlIGF2YWlsYWJsZS4KK2RubAorZG5sICBJbiBHTlUgbTQgMS40IGF0IHRoZSBlbmQgb2YgaW5wdXQgd2hlbiBtNHdyYXAgdGV4dCBpcyBleHBhbmRlZCwKK2RubCAgX19maWxlX18gaXMgTk9ORSBhbmQgX19saW5lX18gaXMgMCwgd2hpY2ggaXMgbm90IGEgaGVscGZ1bCB0aGluZyB0bworZG5sICBwcmludC4gIElmIG00X2ZpbGVfc2VlbigpIGhhcyBiZWVuIGNhbGxlZCB0byBub3RlIHRoZSBsYXN0IGZpbGUgc2VlbiwKK2RubCAgdGhlbiB0aGF0IGZpbGUgYXQgYSBiaWcgbGluZSBudW1iZXIgaXMgdXNlZCwgb3RoZXJ3aXNlICJlbmQgb2YgaW5wdXQiCitkbmwgIGlzIHVzZWQgKGFsdGhvdWdoICJlbmQgb2YgaW5wdXQiIHdvbid0IHBhcnNlIGFzIGFuIGVycm9yIG1lc3NhZ2UpLgorCitkZWZpbmUobTRfZmlsZV9hbmRfbGluZSwKK2BpZmRlZihgX19maWxlX18nLAorYGlmZWxzZShfX2ZpbGVfX2AnX19saW5lX18sYE5PTkUwJywKK2BpZmRlZihgbTRfZmlsZV9zZWVuX2xhc3QnLGBtNF9maWxlX3NlZW5fbGFzdDogOTk5OTk5OiAnLGBlbmQgb2YgaW5wdXQ6ICcpJywKK2BfX2ZpbGVfXzogX19saW5lX186ICcpJyknKQorCisKK2RubCAgVXNhZ2U6IG00X2VycnByaW50X2NvbW1hcyhhcmcsLi4uKQorZG5sCitkbmwgIFRoZSBzYW1lIGFzIGVycnByaW50KCksIGJ1dCBjb21tYXMgYXJlIHByaW50ZWQgYmV0d2VlbiBhcmd1bWVudHMKK2RubCAgaW5zdGVhZCBvZiBzcGFjZXMuCisKK2RlZmluZShtNF9lcnJwcmludF9jb21tYXMsCitgZXJycHJpbnQoYCQxJylkbmwKK2lmZWxzZShldmFsKCQjPjEpLDEsYGVycnByaW50KGAsJyltNF9lcnJwcmludF9jb21tYXMoc2hpZnQoJEApKScpJykKKworCitkbmwgIFVzYWdlOiBtNF9lcnJvcihhcmdzLi4uKQorZG5sICAgICAgICAgbTRfd2FybmluZyhhcmdzLi4uKQorZG5sCitkbmwgIFByaW50IGFuIGVycm9yIG1lc3NhZ2UsIHVzaW5nIG00X2VycnByaW50X2NvbW1hcywgcHJlZml4ZWQgd2l0aCB0aGUKK2RubCAgY3VycmVudCBmaWxlbmFtZSBhbmQgbGluZSBudW1iZXIgKGlmIGF2YWlsYWJsZSkuICBtNF9lcnJvciBzZXRzIHVwIHRvCitkbmwgIGdpdmUgYW4gZXJyb3IgZXhpdCBhdCB0aGUgZW5kIG9mIHByb2Nlc3NpbmcsIG00X3dhcm5pbmcganVzdCBwcmludHMuCitkbmwgIFRoZXNlIG1hY3JvcyBhcmUgdGhlIHJlY29tbWVuZGVkIHdheSB0byBwcmludCBlcnJvcnMuCitkbmwKK2RubCAgVGhlIGFyZ3VtZW50cyBoZXJlIHNob3VsZCBiZSBxdW90ZWQgaW4gdGhlIHVzdWFsIHdheSB0byBwcmV2ZW50IHRoZW0KK2RubCAgYmVpbmcgZXhwYW5kZWQgd2hlbiB0aGUgbWFjcm8gY2FsbCBpcyByZWFkLiAgKG00X2Vycm9yIHRha2VzIGNhcmUgbm90CitkbmwgIHRvIGRvIGFueSBmdXJ0aGVyIGV4cGFuc2lvbi4pCitkbmwKK2RubCAgRm9yIGV4YW1wbGUsCitkbmwKK2RubCAgICAgICAgIG00X2Vycm9yKGBzb21lIGVycm9yIG1lc3NhZ2UKK2RubCAgICAgICAgICcpCitkbmwKK2RubCAgd2hpY2ggcHJpbnRzCitkbmwKK2RubCAgICAgICAgIGZvby5hc206MTIzOiBzb21lIGVycm9yIG1lc3NhZ2UKK2RubAorZG5sICBvciBpZiBfX2ZpbGVfXyBhbmQgX19saW5lX18gYXJlbid0IGF2YWlsYWJsZQorZG5sCitkbmwgICAgICAgICBzb21lIGVycm9yIG1lc3NhZ2UKK2RubAorZG5sICBUaGUgImZpbGU6bGluZToiIGZvcm1hdCBpcyBhIGJhc2ljIHN0eWxlLCB1c2VkIGJ5IGdjYyBhbmQgR05VIG00LCBzbworZG5sICBlbWFjcyBhbmQgb3RoZXIgZWRpdG9ycyB3aWxsIHJlY29nbmlzZSBpdCBpbiB0aGVpciBub3JtYWwgZXJyb3IgbWVzc2FnZQorZG5sICBwYXJzaW5nLgorCitkZWZpbmUobTRfd2FybmluZywKK2BtNF9lcnJwcmludF9jb21tYXMobTRfZmlsZV9hbmRfbGluZWAnJEApJykKKworZGVmaW5lKG00X2Vycm9yLAorYGRlZmluZShgbTRfZXJyb3Jfb2NjdXJyZWQnLDEpbTRfd2FybmluZygkQClkbmwKK2lmZWxzZShtNHdyYXBfd29ya3NfcCwwLGBtNGV4aXQoMSknKScpCisKK2RlZmluZShgbTRfZXJyb3Jfb2NjdXJyZWQnLDApCisKK2RubCAgVGhpcyBtNHdyYXBfcHJlcGVuZCgpIGlzIGZpcnN0LCBzbyBpdCdsbCBiZSBleGVjdXRlZCBsYXN0LgorbTR3cmFwX3ByZXBlbmQoCitgaWZlbHNlKG00X2Vycm9yX29jY3VycmVkLDEsCitgbTRfZXJyb3IoYEVycm9ycyBvY2N1cnJlZCBkdXJpbmcgbTQgcHJvY2Vzc2luZworJyltNGV4aXQoMSknKScpCisKKworZG5sICBVc2FnZTogbTRfYXNzZXJ0X251bWFyZ3MobnVtKQorZG5sCitkbmwgIFB1dCB0aGlzIHVucXVvdGVkIG9uIGEgbGluZSBvbiBpdHMgb3duIGF0IHRoZSBzdGFydCBvZiBhIG1hY3JvCitkbmwgIGRlZmluaXRpb24gdG8gYWRkIHNvbWUgY29kZSB0byBjaGVjayB0aGF0IG51bSBtYW55IGFyZ3VtZW50cyBnZXQgcGFzc2VkCitkbmwgIHRvIHRoZSBtYWNyby4gIEZvciBleGFtcGxlLAorZG5sCitkbmwgICAgICAgICBkZWZpbmUoZm9vLAorZG5sICAgICAgICAgbTRfYXNzZXJ0X251bWFyZ3MoMikKK2RubCAgICAgICAgIGBzb21ldGhpbmcgYCQxJyBhbmQgYCQyJyBibGFoIGJsYWgnKQorZG5sCitkbmwgIFRoZW4gYSBjYWxsIGxpa2UgZm9vKG9uZSx0d28sdGhyZWUpIHdpbGwgcHJvdm9rZSBhbiBlcnJvciBsaWtlCitkbmwKK2RubCAgICAgICAgIGZpbGU6MTA6IGZvbyBleHBlY3RlZCAyIGFyZ3VtZW50cywgZ290IDMgYXJndW1lbnRzCitkbmwKK2RubCAgSGVyZSBhcmUgc29tZSBjYWxscyBhbmQgaG93IG1hbnkgYXJndW1lbnRzIHRoZXkncmUgaW50ZXJwcmV0ZWQgYXMgcGFzc2luZy4KK2RubAorZG5sICAgICAgICAgZm9vKGFiYyxkZWYpICAyCitkbmwgICAgICAgICBmb28oeHl6KSAgICAgIDEKK2RubCAgICAgICAgIGZvbygpICAgICAgICAgMAorZG5sICAgICAgICAgZm9vICAgICAgICAgIC0xCitkbmwKK2RubCAgVGhlIC0xIGZvciBubyBwYXJlbnRoZXNlcyBhdCBhbGwgbWVhbnMgYSBtYWNybyB0aGF0J3MgbWVhbnQgdG8gYmUgdXNlZAorZG5sICB0aGF0IHdheSBjYW4gYmUgY2hlY2tlZCB3aXRoIG00X2Fzc2VydF9udW1hcmdzKC0xKS4gIEZvciBleGFtcGxlLAorZG5sCitkbmwgICAgICAgICBkZWZpbmUoU1BFQ0lBTF9TVUZGSVgsCitkbmwgICAgICAgICBtNF9hc3NlcnRfbnVtYXJncygtMSkKK2RubCAgICAgICAgIGBpZmRlZihgRk9PJyxgX2ZvbycsYF9iYXInKScpCitkbmwKK2RubCAgQnV0IGFzIGFuIGFsdGVybmF0aXZlIHNlZSBhbHNvIGRlZmxpdCgpIGJlbG93IHdoZXJlIHBhcmVudGhlc2l6ZWQKK2RubCAgZXhwcmVzc2lvbnMgZm9sbG93aW5nIGEgbWFjcm8gYXJlIHBhc3NlZCB0aHJvdWdoIHRvIHRoZSBvdXRwdXQuCitkbmwKK2RubCAgTm90ZSB0aGF0IGluIEJTRCBtNCB0aGVyZSdzIG5vIHdheSB0byBkaWZmZXJlbnRpYXRlIGNhbGxzICJmb28iIGFuZAorZG5sICAiZm9vKCkiLCBzbyBpbiBCU0QgbTQgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gdGhlIHR3byBpc24ndCBlbmZvcmNlZC4KK2RubCAgKEluIEdOVSBhbmQgU3lzViBtNCBpdCBjYW4gYmUgY2hlY2tlZCwgYW5kIGlzLikKKworCitkbmwgIG00X2Fzc2VydF9udW1hcmdzIGlzIGFibGUgdG8gY2hlY2sgaXRzIG93biBhcmd1bWVudHMgYnkgY2FsbGluZworZG5sICBhc3NlcnRfbnVtYXJnc19pbnRlcm5hbCBkaXJlY3RseS4KK2RubAorZG5sICBtNF9kb3VibGVxdW90ZSgkYCcwKSBleHBhbmRzIHRvIGBgJDAnJywgd2hlcmVhcyBgYCRgJzAnJyB3b3VsZCBleHBhbmQKK2RubCAgdG8gYCRgJzAnIGFuZCBkbyB0aGUgd3JvbmcgdGhpbmcsIGFuZCBsaWtld2lzZSBmb3IgJDEuICBUaGUgc2FtZSBpcworZG5sICBkb25lIGluIG90aGVyIGFzc2VydCBtYWNyb3MuCitkbmwKK2RubCAgJGAjJyBsZWF2ZXMgJCMgaW4gdGhlIG5ldyBtYWNybyBiZWluZyBkZWZpbmVkLCBhbmQgc3RvcHMgIyBiZWluZworZG5sICBpbnRlcnByZXRlZCBhcyBhIGNvbW1lbnQgY2hhcmFjdGVyLgorZG5sCitkbmwgIGBkbmwgJyBtZWFucyBhbiBleHBsaWNpdCBkbmwgaXNuJ3QgbmVjZXNzYXJ5IHdoZW4gbTRfYXNzZXJ0X251bWFyZ3MgaXMKK2RubCAgdXNlZC4gIFRoZSBzcGFjZSBtZWFucyB0aGF0IGlmIHRoZXJlIGlzIGEgZG5sIGl0J2xsIHN0aWxsIHdvcmsuCisKK2RubCAgVXNhZ2U6IG00X2RvdWJsZXF1b3RlKHgpIGV4cGFuZHMgdG8gYGB4JycKK2RlZmluZShtNF9kb3VibGVxdW90ZSwKK2BtNF9hc3NlcnRfbnVtYXJnc19pbnRlcm5hbChgJDAnLDEsJCMsbGVuKGAkMScpKWBgJDEnJycpCisKK2RlZmluZShtNF9hc3NlcnRfbnVtYXJncywKK2BtNF9hc3NlcnRfbnVtYXJnc19pbnRlcm5hbChgJDAnLDEsJCMsbGVuKGAkMScpKWRubAorYG00X2Fzc2VydF9udW1hcmdzX2ludGVybmFsJyhtNF9kb3VibGVxdW90ZSgkYCcwKSwkMSwkYCMnLGBsZW4nKG00X2RvdWJsZXF1b3RlKCRgJzEpKSlgZG5sICcnKQorCitkbmwgIENhbGxlZDogbTRfYXNzZXJ0X251bWFyZ3NfaW50ZXJuYWwoYG1hY3JvbmFtZScsd2FudGFyZ3MsJCMsbGVuKGAkMScpKQorZGVmaW5lKG00X2Fzc2VydF9udW1hcmdzX2ludGVybmFsLAorYG00X2Fzc2VydF9udW1hcmdzX2ludGVybmFsX2NoZWNrKGAkMScsYCQyJyxtNF9udW1hcmdzX2NvdW50KGAkMycsYCQ0JykpJykKKworZG5sICBDYWxsZWQ6IG00X2Fzc2VydF9udW1hcmdzX2ludGVybmFsX2NoZWNrKGBtYWNyb25hbWUnLHdhbnRhcmdzLGdvdGFyZ3MpCitkbmwKK2RubCAgSWYgbTRfZG9sbGFyaGFzaF8xX2lmX25vcGFyZW5fcCAoQlNEIG00KSB0aGVuIGdvdGFyZ3MgY2FuIGJlIDAgd2hlbiBpdAorZG5sICBzaG91bGQgYmUgLTEuICBJZiB3YW50YXJncyBpcyAtMSBidXQgZ290YXJncyBpcyAwIGFuZCB0aGUgdHdvIGNhbid0IGJlCitkbmwgIGRpc3Rpbmd1aXNoZWQgdGhlbiBpdCdzIGFsbG93ZWQgdG8gcGFzcy4KK2RubAorZGVmaW5lKG00X2Fzc2VydF9udW1hcmdzX2ludGVybmFsX2NoZWNrLAorYGlmZWxzZShldmFsKCQyID09ICQzCisgICAgICAgICAgICAgfHwgKCQyPT0tMSAmJiAkMz09MCAmJiBtNF9kb2xsYXJoYXNoXzFfaWZfbm9wYXJlbl9wKSksMCwKK2BtNF9lcnJvcihgJDEgZXhwZWN0ZWQgJ200X05hcmd1bWVudHMoYCQyJylgLCBnb3QgJ200X05hcmd1bWVudHMoYCQzJykKKyknKScpCisKK2RubCAgQ2FsbGVkOiBtNF9udW1hcmdzX2NvdW50KCQjLGxlbihgJDEnKSkKK2RubCAgSWYgJCM9PTAgdGhlbiAtMSBhcmdzLCBpZiAkIz09MSBidXQgbGVuKGAkMScpPT0wIHRoZW4gMCBhcmdzLCBvdGhlcndpc2UKK2RubCAgJCMgYXJncy4KK2RlZmluZShtNF9udW1hcmdzX2NvdW50LAorYGlmZWxzZSgkMSwwLCAtMSwKK2BpZmVsc2UoZXZhbCgkMT09MSAmJiAkMi0wPT0wKSwxLCAwLCAkMSknKScpCisKK2RubCAgVXNhZ2U6IG00X05hcmd1bWVudHMoTikKK2RubCAgIiQxIGFyZ3VtZW50IiBvciAiJDEgYXJndW1lbnRzIiB3aXRoIHRoZSBwbHVyYWwgYWNjb3JkaW5nIHRvICQxLgorZGVmaW5lKG00X05hcmd1bWVudHMsCitgJDEgYXJndW1lbnRgJ2lmZWxzZShgJDEnLDEsLHMpJykKKworCitkbmwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgIEFkZGl0aW9uYWwgZXJyb3IgY2hlY2tpbmcgdGhpbmdzLgorCisKK2RubCAgVXNhZ2U6IG00X2ZpbGVfc2VlbigpCitkbmwKK2RubCAgUmVjb3JkIF9fZmlsZV9fIGZvciB0aGUgYmVuZWZpdCBvZiBtNF9maWxlX2FuZF9saW5lIGluIG00d3JhcCB0ZXh0LgorZG5sCitkbmwgIFRoZSBiYXNpYyBfX2ZpbGVfXyBtYWNybyBjb21lcyBvdXQgcXVvdGVkIGluIEdOVSBtNCwgbGlrZSBgZm9vLmFzbScsCitkbmwgIGFuZCBtNF9maWxlX3NlZW5fbGFzdCBpcyBkZWZpbmVkIGxpa2UgdGhhdCB0b28uCitkbmwKK2RubCAgVGhpcyBpcyB1c2VkIGJ5IFBST0xPR1VFLCBzaW5jZSB0aGF0J3Mgbm9ybWFsbHkgaW4gdGhlIG1haW4gLmFzbSBmaWxlLAorZG5sICBhbmQgaW4gcGFydGljdWxhciBpdCBzZXRzIHVwIG00d3JhcCBlcnJvciBjaGVja3MgZm9yIG1pc3NpbmcgRVBJTE9HVUUuCisKK2RlZmluZShtNF9maWxlX3NlZW4sCittNF9hc3NlcnRfbnVtYXJncygwKQorYGlmZWxzZShfX2ZpbGVfXyxgTk9ORScsLAorYGRlZmluZShgbTRfZmlsZV9zZWVuX2xhc3QnLG00X2RvdWJsZXF1b3RlKF9fZmlsZV9fKSknKScpCisKKworZG5sICBVc2FnZTogbTRfYXNzZXJ0X29uZWFyZygpCitkbmwKK2RubCAgUHV0IHRoaXMsIHVucXVvdGVkLCBhdCB0aGUgc3RhcnQgb2YgYSBtYWNybyBkZWZpbml0aW9uIHRvIGFkZCBzb21lIGNvZGUKK2RubCAgdG8gY2hlY2sgdGhhdCBvbmUgYXJndW1lbnQgaXMgcGFzc2VkIHRvIHRoZSBtYWNybywgYnV0IHdpdGggdGhhdAorZG5sICBhcmd1bWVudCBhbGxvd2VkIHRvIGJlIGVtcHR5LiAgRm9yIGV4YW1wbGUsCitkbmwKK2RubCAgICAgICAgICBkZWZpbmUoZm9vLAorZG5sICAgICAgICAgIG00X2Fzc2VydF9vbmVhcmcoKQorZG5sICAgICAgICAgIGBibGFoIGJsYWggJDEgYmxhaCBibGFoJykKK2RubAorZG5sICBDYWxscyAiZm9vKHh5eikiIG9yICJmb28oKSIgYXJlIGFjY2VwdGVkLiAgQSBjYWxsICJmb28oeHl6LGFiYykiIGZhaWxzLgorZG5sICBBIGNhbGwgImZvbyIgZmFpbHMgdG9vLCBidXQgQlNEIG00IGNhbid0IGRldGVjdCB0aGlzIGNhc2UgKEdOVSBhbmQgU3lzVgorZG5sICBtNCBjYW4pLgorCitkZWZpbmUobTRfYXNzZXJ0X29uZWFyZywKK200X2Fzc2VydF9udW1hcmdzKDApCitgbTRfYXNzZXJ0X29uZWFyZ19pbnRlcm5hbCcobTRfZG91YmxlcXVvdGUoJGAnMCksJGAjJylgZG5sICcpCisKK2RubCAgQ2FsbGVkOiBtNF9hc3NlcnRfb25lYXJnKGBtYWNyb25hbWUnLCQjKQorZGVmaW5lKG00X2Fzc2VydF9vbmVhcmdfaW50ZXJuYWwsCitgaWZlbHNlKCQyLDEsLAorYG00X2Vycm9yKGAkMSBleHBlY3RlZCAxIGFyZ3VtZW50LCBnb3QgJ200X05hcmd1bWVudHMoYCQyJykKKyknKScpCisKKworZG5sICBVc2FnZTogbTRfYXNzZXJ0X251bWFyZ3NfcmFuZ2UobG93LGhpZ2gpCitkbmwKK2RubCAgUHV0IHRoaXMsIHVucXVvdGVkLCBhdCB0aGUgc3RhcnQgb2YgYSBtYWNybyBkZWZpbml0aW9uIHRvIGFkZCBzb21lIGNvZGUKK2RubCAgdG8gY2hlY2sgdGhhdCBiZXR3ZWVuIGxvdyBhbmQgaGlnaCBtYW55IGFyZ3VtZW50cyBnZXQgcGFzc2VkIHRvIHRoZQorZG5sICBtYWNyby4gIEZvciBleGFtcGxlLAorZG5sCitkbmwgICAgICAgICBkZWZpbmUoZm9vLAorZG5sICAgICAgICAgbTRfYXNzZXJ0X251bWFyZ3NfcmFuZ2UoMyw1KQorZG5sICAgICAgICAgYG1hbmRhdG9yeSAkMSAkMiAkMyBvcHRpb25hbCAkNCAkNSBlbmQnKQorZG5sCitkbmwgIFNlZSBtNF9hc3NlcnRfbnVtYXJncygpIGZvciBtb3JlIGluZm8uCisKK2RlZmluZShtNF9hc3NlcnRfbnVtYXJnc19yYW5nZSwKK200X2Fzc2VydF9udW1hcmdzKDIpCitgYG00X2Fzc2VydF9udW1hcmdzX3JhbmdlX2ludGVybmFsJyhtNF9kb3VibGVxdW90ZSgkYCcwKSwkMSwkMiwkYCMnLGBsZW4nKG00X2RvdWJsZXF1b3RlKCRgJzEpKSlgZG5sICcnKQorCitkbmwgIENhbGxlZDogbTRfYXNzZXJ0X251bWFyZ3NfcmFuZ2VfaW50ZXJuYWwoYG5hbWUnLGxvdyxoaWdoLCQjLGxlbihgJDEnKSkKK2RlZmluZShtNF9hc3NlcnRfbnVtYXJnc19yYW5nZV9pbnRlcm5hbCwKK200X2Fzc2VydF9udW1hcmdzKDUpCitgbTRfYXNzZXJ0X251bWFyZ3NfcmFuZ2VfY2hlY2soYCQxJyxgJDInLGAkMycsbTRfbnVtYXJnc19jb3VudChgJDQnLGAkNScpKScpCisKK2RubCAgQ2FsbGVkOiBtNF9hc3NlcnRfbnVtYXJnc19yYW5nZV9jaGVjayhgbmFtZScsbG93LGhpZ2gsZ290YXJncykKK2RubAorZG5sICBJZiBtNF9kb2xsYXJoYXNoXzFfaWZfbm9wYXJlbl9wIChCU0QgbTQpIHRoZW4gZ290YXJncyBjYW4gYmUgMCB3aGVuIGl0CitkbmwgIHNob3VsZCBiZSAtMS4gIFRvIGVuc3VyZSBhIGBoaWdoJyBvZiAtMSB3b3JrcywgYSBmdWRnZSBpcyBhcHBsaWVkIHRvCitkbmwgIGdvdGFyZ3MgaWYgaXQncyAwIGFuZCB0aGUgMCBhbmQgLTEgY2FzZXMgY2FuJ3QgYmUgZGlzdGluZ3Vpc2hlZC4KK2RubAorZGVmaW5lKG00X2Fzc2VydF9udW1hcmdzX3JhbmdlX2NoZWNrLAorbTRfYXNzZXJ0X251bWFyZ3MoNCkKK2BpZmVsc2UoZXZhbCgkMiA8PSAkNCAmJgorICAgICAgICAgICAgICgkNCAtICgkND09MCAmJiBtNF9kb2xsYXJoYXNoXzFfaWZfbm9wYXJlbl9wKSA8PSAkMykpLDAsCitgbTRfZXJyb3IoYCQxIGV4cGVjdGVkICQyIHRvICQzIGFyZ3VtZW50cywgZ290ICdtNF9OYXJndW1lbnRzKGAkNCcpCispJyknKQorCisKK2RubCAgVXNhZ2U6IG00X2Fzc2VydF9kZWZpbmVkKHN5bWJvbCkKK2RubAorZG5sICBQdXQgdGhpcyB1bnF1b3RlZCBvbiBhIGxpbmUgb2YgaXRzIG93biBhdCB0aGUgc3RhcnQgb2YgYSBtYWNybworZG5sICBkZWZpbml0aW9uIHRvIGFkZCBzb21lIGNvZGUgdG8gY2hlY2sgdGhhdCB0aGUgZ2l2ZW4gc3ltYm9sIGlzIGRlZmluZWQKK2RubCAgd2hlbiB0aGUgbWFjcm8gaXMgdXNlZC4gIEZvciBleGFtcGxlLAorZG5sCitkbmwgICAgICAgICAgZGVmaW5lKGZvbywKK2RubCAgICAgICAgICBtNF9hc3NlcnRfZGVmaW5lZChgRk9PX1BSRUZJWCcpCitkbmwgICAgICAgICAgYEZPT19QUkVGSVggd2hhdGV2ZXInKQorZG5sCitkbmwgIFRoaXMgaXMgYSBjb252ZW5pZW50IHdheSB0byBjaGVjayB0aGF0IHRoZSB1c2VyIG9yIC4vY29uZmlndXJlIG9yCitkbmwgIHdoYXRldmVyIGhhcyBkZWZpbmVkIHRoZSB0aGluZ3MgbmVlZGVkIGJ5IGEgbWFjcm8sIGFzIG9wcG9zZWQgdG8KK2RubCAgc2lsZW50bHkgZ2VuZXJhdGluZyBnYXJiYWdlLgorCitkZWZpbmUobTRfYXNzZXJ0X2RlZmluZWQsCittNF9hc3NlcnRfbnVtYXJncygxKQorYGBtNF9hc3NlcnRfZGVmaW5lZF9pbnRlcm5hbCcobTRfZG91YmxlcXVvdGUoJGAnMCksYGAkMScnKWBkbmwgJycpCisKK2RubCAgQ2FsbGVkOiBtNF9hc3NlcnRfZGVmaW5lZF9pbnRlcm5hbChgbWFjcm9uYW1lJyxgZGVmaW5lX3JlcXVpcmVkJykKK2RlZmluZShtNF9hc3NlcnRfZGVmaW5lZF9pbnRlcm5hbCwKK200X2Fzc2VydF9udW1hcmdzKDIpCitgbTRfaWZkZWYoYCQyJywsCitgbTRfZXJyb3IoYCQxIG5lZWRzICQyIGRlZmluZWQKKycpJyknKQorCisKK2RubCAgVXNhZ2U6IG00X25vdF9mb3JfZXhwYW5zaW9uKGBTWU1CT0wnKQorZG5sICAgICAgICAgZGVmaW5lX25vdF9mb3JfZXhwYW5zaW9uKGBTWU1CT0wnKQorZG5sCitkbmwgIG00X25vdF9mb3JfZXhwYW5zaW9uIHR1cm5zIFNZTUJPTCwgaWYgZGVmaW5lZCwgaW50byBzb21ldGhpbmcgd2hpY2gKK2RubCAgd2lsbCBnaXZlIGFuIGVycm9yIGlmIGV4cGFuZGVkLiAgRm9yIGV4YW1wbGUsCitkbmwKK2RubCAgICAgICAgIG00X25vdF9mb3JfZXhwYW5zaW9uKGBQSUMnKQorZG5sCitkbmwgIGRlZmluZV9ub3RfZm9yX2V4cGFuc2lvbiBpcyB0aGUgc2FtZSwgYnV0IGFsd2F5cyBtYWtlcyBhIGRlZmluaXRpb24uCitkbmwKK2RubCAgVGhlc2UgYXJlIGZvciBzeW1ib2xzIHRoYXQgc2hvdWxkIGJlIHRlc3RlZCB3aXRoIGlmZGVmKGBGT08nLC4uLikKK2RubCAgcmF0aGVyIHRoYW4gYmUgZXhwYW5kZWQgYXMgc3VjaC4gIFRoZXkgZ3VhcmQgYWdhaW5zdCBhY2NpZGVudGFsbHkKK2RubCAgb21pdHRpbmcgdGhlIHF1b3RlcywgYXMgaW4gaWZkZWYoRk9PLC4uLikuICBOb3RlIHRob3VnaCB0aGF0IHRoZXkgb25seQorZG5sICBjYXRjaGVzIHRoaXMgd2hlbiBGT08gaXMgZGVmaW5lZCwgc28gYmUgc3VyZSB0byB0ZXN0IGNvZGUgYm90aCB3aXRoIGFuZAorZG5sICB3aXRob3V0IGVhY2ggZGVmaW5pdGlvbi4KKworZGVmaW5lKG00X25vdF9mb3JfZXhwYW5zaW9uLAorbTRfYXNzZXJ0X251bWFyZ3MoMSkKK2BpZmRlZihgJDEnLGBkZWZpbmVfbm90X2Zvcl9leHBhbnNpb24oYCQxJyknKScpCisKK2RlZmluZShkZWZpbmVfbm90X2Zvcl9leHBhbnNpb24sCittNF9hc3NlcnRfbnVtYXJncygxKQorYGlmZWxzZShkZWZuKGAkMScpLCwsCitgbTRfZXJyb3IoYGAkMScgaGFzIGEgbm9uLWVtcHR5IHZhbHVlLCBtYXliZSBpdCBzaG91bGRudCBiZSBtdW5nZWQgd2l0aCBtNF9ub3RfZm9yX2V4cGFuc2lvbigpCisnKScpZG5sCitkZWZpbmUoYCQxJyxgbTRfbm90X2Zvcl9leHBhbnNpb25faW50ZXJuYWwoYCQxJyknKScpCisKK2RlZmluZShtNF9ub3RfZm9yX2V4cGFuc2lvbl9pbnRlcm5hbCwKK2BtNF9lcnJvcihgYCQxJyBpcyBub3QgbWVhbnQgdG8gYmUgZXhwYW5kZWQsIHBlcmhhcHMgeW91IG1lYW4gYGlmZGVmKGAkMScsLi4uKScKKycpJykKKworCitkbmwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgIFZhcmlvdXMgZ2VuZXJpYyBtNCB0aGluZ3MuCisKKworZG5sICBVc2FnZTogbTRfdW5xdW90ZShtYWNybykKK2RubAorZG5sICBBbGxvdyB0aGUgYXJndW1lbnQgdGV4dCB0byBiZSByZS1ldmFsdWF0ZWQuICBUaGlzIGlzIHVzZWZ1bCBmb3IgInRva2VuCitkbmwgIHBhc3RpbmciIGxpa2UgbTRfdW5xdW90ZShmb29gJ2JhcikuCisKK2RlZmluZShtNF91bnF1b3RlLAorbTRfYXNzZXJ0X29uZWFyZygpCitgJDEnKQorCisKK2RubCAgVXNhZ2U6IG00X2lmZGVmKG5hbWUseWVzWyxub10pCitkbmwKK2RubCAgRXhwYW5kIHRvIHRoZSB5ZXMgYXJndW1lbnQgaWYgbmFtZSBpcyBkZWZpbmVkLCBvciB0byB0aGUgbm8gYXJndW1lbnQgaWYKK2RubCAgbm90LgorZG5sCitkbmwgIFRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIGJ1aWx0aW4gImlmZGVmIiwgYnV0IGF2b2lkcyBhbiBPU0YgNC4wIG00IGJ1ZworZG5sICBpbiB3aGljaCBhIG1hY3JvIHdpdGggYSB6ZXJvIHZhbHVlIGAwJyBvciBgMDAnIGV0YyBpcyBjb25zaWRlcmVkIG5vdAorZG5sICBkZWZpbmVkLgorZG5sCitkbmwgIFRoZXJlJ3Mgbm8gcGFydGljdWxhciBuZWVkIHRvIHVzZSB0aGlzIGV2ZXJ5d2hlcmUsIG9ubHkgaWYgdGhlcmUgbWlnaHQKK2RubCAgYmUgYSB6ZXJvIHZhbHVlLgorCitkZWZpbmUobTRfaWZkZWYsCittNF9hc3NlcnRfbnVtYXJnc19yYW5nZSgyLDMpCitgaWZlbHNlKGV2YWwoaWZkZWYoYCQxJywxLDApK200X2xlbmd0aChkZWZuKGAkMScpKSksMCwKK2AkMycsYCQyJyknKQorCisKK2RubCAgVXNhZ2U6IG00X2lmZGVmX2FueW9mX3AoYHN5bWJvbCcsLi4uKQorZG5sCitkbmwgIEV4cGFuZCB0byAxIGlmIGFueSBvZiB0aGUgc3ltYm9scyBpbiB0aGUgYXJndW1lbnQgbGlzdCBhcmUgZGVmaW5lZCwgb3IKK2RubCAgdG8gMCBpZiBub3QuCisKK2RlZmluZShtNF9pZmRlZl9hbnlvZl9wLAorYGlmZWxzZShldmFsKCQjPD0xICYmIG00X2xlbmd0aChgJDEnKT09MCksMSwgMCwKK2BpZmRlZihgJDEnLCAxLAorYG00X2lmZGVmX2FueW9mX3Aoc2hpZnQoJEApKScpJyknKQorCisKK2RubCAgVXNhZ2U6IG00X2xlbmd0aChzdHJpbmcpCitkbmwKK2RubCAgRGV0ZXJtaW5lIHRoZSBsZW5ndGggb2YgYSBzdHJpbmcuICBUaGlzIGlzIHRoZSBzYW1lIGFzIGxlbigpLCBidXQKK2RubCAgYWx3YXlzIGV4cGFuZHMgdG8gYSBudW1iZXIsIHdvcmtpbmcgYXJvdW5kIHRoZSBCU0QgbGVuKCkgd2hpY2gKK2RubCAgZXZhbHVhdGVzIHRvIG5vdGhpbmcgZ2l2ZW4gYW4gZW1wdHkgYXJndW1lbnQuCisKK2RlZmluZShtNF9sZW5ndGgsCittNF9hc3NlcnRfb25lYXJnKCkKK2BldmFsKGxlbihgJDEnKS0wKScpCisKKworZG5sICBVc2FnZTogbTRfc3RyaW5nZXF1YWxfcCh4LHkpCitkbmwKK2RubCAgRXhwYW5kIHRvIDEgb3IgMCBhY2NvcmRpbmcgYXMgc3RyaW5ncyB4IGFuZCB5IGFyZSBlcXVhbCBvciBub3QuCisKK2RlZmluZShtNF9zdHJpbmdlcXVhbF9wLAorYGlmZWxzZShgJDEnLGAkMicsMSwwKScpCisKKworZG5sICBVc2FnZTogbTRfaW5jcl9vcl9kZWNyKG4sbGFzdCkKK2RubAorZG5sICBEbyBhbiBpbmNyKG4pIG9yIGRlY3IobiksIHdoaWNoZXZlciBpcyBpbiB0aGUgZGlyZWN0aW9uIG9mICJsYXN0Ii4KK2RubCAgQm90aCBuIGFuZCBsYXN0IG11c3QgYmUgbnVtYmVycyBvZiBjb3Vyc2UuCisKK2RlZmluZShtNF9pbmNyX29yX2RlY3IsCittNF9hc3NlcnRfbnVtYXJncygyKQorYGlmZWxzZShldmFsKCQxPCQyKSwxLGluY3IoJDEpLGRlY3IoJDEpKScpCisKKworZG5sICBVc2FnZTogZm9ybG9vcChpLCBmaXJzdCwgbGFzdCwgc3RhdGVtZW50KQorZG5sCitkbmwgIEJhc2VkIG9uIEdOVSBtNCBleGFtcGxlcy9mb3Jsb29wLm00LCBidXQgZXh0ZW5kZWQuCitkbmwKK2RubCAgc3RhdGVtZW50IGlzIGV4cGFuZGVkIHJlcGVhdGVkbHksIHdpdGggaSBzdWNjZXNzaXZlbHkgZGVmaW5lZCBhcworZG5sCitkbmwgICAgICAgICBmaXJzdCwgZmlyc3QrMSwgLi4uLCBsYXN0LTEsIGxhc3QKK2RubAorZG5sICBPciBpZiBmaXJzdCA+IGxhc3QsIHRoZW4gaXQncworZG5sCitkbmwgICAgICAgICBmaXJzdCwgZmlyc3QtMSwgLi4uLCBsYXN0KzEsIGxhc3QKK2RubAorZG5sICBJZiBmaXJzdCA9PSBsYXN0LCB0aGVuIG9uZSBleHBhbnNpb24gaXMgZG9uZS4KK2RubAorZG5sICBBIHB1c2hkZWYvcG9wZGVmIG9mIGkgaXMgZG9uZSB0byBwcmVzZXJ2ZSBhbnkgcHJldmlvdXMgZGVmaW5pdGlvbiAob3IKK2RubCAgbGFjayBvZiBkZWZpbml0aW9uKS4gIGZpcnN0IGFuZCBsYXN0IGFyZSBldmFsKCllZCBhbmQgc28gY2FuIGJlCitkbmwgIGV4cHJlc3Npb25zLgorZG5sCitkbmwgIGZvcmxvb3BfZmlyc3QgaXMgZGVmaW5lZCB0byAxIG9uIHRoZSBmaXJzdCBpdGVyYXRpb24sIDAgb24gdGhlIHJlc3QuCitkbmwgIGZvcmxvb3BfbGFzdCBpcyBkZWZpbmVkIHRvIDEgb24gdGhlIGxhc3QgaXRlcmF0aW9uLCAwIG9uIHRoZSBvdGhlcnMuCitkbmwgIE5lc3RlZCBmb3Jsb29wcyBhcmUgYWxsb3dlZCwgaW4gd2hpY2ggY2FzZSBmb3Jsb29wX2ZpcnN0IGFuZAorZG5sICBmb3Jsb29wX2xhc3QgYXBwbHkgdG8gdGhlIGlubmVybW9zdCBsb29wIHRoYXQncyBvcGVuLgorZG5sCitkbmwgIEEgc2ltcGxlIGV4YW1wbGUsCitkbmwKK2RubCAgICAgICAgIGZvcmxvb3AoaSwgMSwgMioyKzEsIGBkbmwKK2RubCAgICAgICAgIGl0ZXJhdGlvbiBudW1iZXIgaSAuLi4gaWZlbHNlKGZvcmxvb3BfZmlyc3QsMSxGSVJTVCkKK2RubCAgICAgICAgICcpCisKKworZG5sICAiaSIgYW5kICJzdGF0ZW1lbnQiIGFyZSBjYXJlZnVsbHkgcXVvdGVkLCBidXQgImZpcnN0IiBhbmQgImxhc3QiIGFyZQorZG5sICBqdXN0IHBsYWluIG51bWJlcnMgb25jZSBldmFsKCllZC4KKworZGVmaW5lKGBmb3Jsb29wJywKK200X2Fzc2VydF9udW1hcmdzKDQpCitgcHVzaGRlZihgJDEnLGV2YWwoYCQyJykpZG5sCitwdXNoZGVmKGBmb3Jsb29wX2ZpcnN0JywxKWRubAorcHVzaGRlZihgZm9ybG9vcF9sYXN0JywwKWRubAorZm9ybG9vcF9pbnRlcm5hbChgJDEnLGV2YWwoYCQzJyksYCQ0JylgJ2RubAorcG9wZGVmKGBmb3Jsb29wX2ZpcnN0JylkbmwKK3BvcGRlZihgZm9ybG9vcF9sYXN0JylkbmwKK3BvcGRlZihgJDEnKScpCisKK2RubCAgQ2FsbGVkOiBmb3Jsb29wX2ludGVybmFsKGB2YXInLGxhc3Qsc3RhdGVtZW50KQorZGVmaW5lKGBmb3Jsb29wX2ludGVybmFsJywKK200X2Fzc2VydF9udW1hcmdzKDMpCitgaWZlbHNlKCQxLCQyLAorYGRlZmluZShgZm9ybG9vcF9sYXN0JywxKSQzJywKK2AkM2AnZG5sCitkZWZpbmUoYGZvcmxvb3BfZmlyc3QnLDApZG5sCitkZWZpbmUoYCQxJyxtNF9pbmNyX29yX2RlY3IoJDEsJDIpKWRubAorZm9ybG9vcF9pbnRlcm5hbChgJDEnLCQyLGAkMycpJyknKQorCisKK2RubCAgVXNhZ2U6IGZvcmVhY2godmFyLGJvZHksIGl0ZW0xLGl0ZW0yLC4uLixpdGVtTikKK2RubAorZG5sICBGb3IgZWFjaCAiaXRlbSIgYXJndW1lbnQsIGRlZmluZSAidmFyIiB0byB0aGF0IHZhbHVlIGFuZCBleHBhbmQgImJvZHkiLgorZG5sICBGb3IgZXhhbXBsZSwKK2RubAorZG5sICAgICAgICAgZm9yZWFjaChpLCBgc29tZXRoaW5nIGkKK2RubCAgICAgICAgICcsIG9uZSwgdHdvKQorZG5sICBnaXZlcworZG5sICAgICAgICAgc29tZXRoaW5nIG9uZQorZG5sICAgICAgICAgc29tZXRoaW5nIHR3bworZG5sCitkbmwgIEFueSBwcmV2aW91cyBkZWZpbml0aW9uIG9mICJ2YXIiLCBvciBsYWNrIHRoZXJlb2YsIGlzIHNhdmVkIGFuZAorZG5sICByZXN0b3JlZC4gIEVtcHR5ICJpdGVtInMgYXJlIG5vdCBhbGxvd2VkLgorCitkZWZpbmUoZm9yZWFjaCwKK200X2Fzc2VydF9udW1hcmdzX3JhbmdlKDIsMTAwMCkKK2BpZmVsc2UoYCQzJywsLAorYHB1c2hkZWYoYCQxJyxgJDMnKSQyYCdwb3BkZWYoYCQxJylkbmwKK2ZvcmVhY2goYCQxJyxgJDInLHNoaWZ0KHNoaWZ0KHNoaWZ0KCRAKSkpKScpJykKKworCitkbmwgIFVzYWdlOiBtNF90b3VwcGVyKHgpCitkbmwgICAgICAgICBtNF90b2xvd2VyKHgpCitkbmwKK2RubCAgQ29udmVydCB0aGUgYXJndW1lbnQgc3RyaW5nIHRvIHVwcGVyIG9yIGxvd2VyIGNhc2UsIHJlc3BlY3RpdmVseS4KK2RubCAgT25seSBvbmUgYXJndW1lbnQgYWNjZXB0ZWQuCitkbmwKK2RubCAgQlNEIG00IGRvZXNuJ3QgdGFrZSByYW5nZXMgbGlrZSBhLXogaW4gdHJhbnNsaXQoKSwgc28gdGhlIGZ1bGwgYWxwaGFiZXQKK2RubCAgaXMgd3JpdHRlbiBvdXQuCisKK2RlZmluZShtNF9hbHBoYWJldF9sb3dlciwgYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JykKK2RlZmluZShtNF9hbHBoYWJldF91cHBlciwgYEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJykKKworZGVmaW5lKG00X3RvdXBwZXIsCittNF9hc3NlcnRfb25lYXJnKCkKK2B0cmFuc2xpdChgJDEnLCBtNF9hbHBoYWJldF9sb3dlciwgbTRfYWxwaGFiZXRfdXBwZXIpJykKKworZGVmaW5lKG00X3RvbG93ZXIsCittNF9hc3NlcnRfb25lYXJnKCkKK2B0cmFuc2xpdChgJDEnLCBtNF9hbHBoYWJldF91cHBlciwgbTRfYWxwaGFiZXRfbG93ZXIpJykKKworCitkbmwgIFVzYWdlOiBtNF9lbXB0eV9pZl96ZXJvKHgpCitkbmwKK2RubCAgRXZhbHVhdGUgdG8geCwgb3IgdG8gbm90aGluZyBpZiB4IGlzIDAuICB4IGlzIGV2YWwoKWVkIGFuZCBzbyBjYW4gYmUgYW4KK2RubCAgZXhwcmVzc2lvbi4KK2RubAorZG5sICBUaGlzIGlzIHVzZWZ1bCBmb3IgeDg2IGFkZHJlc3NpbmcgbW9kZSBkaXNwbGFjZW1lbnRzIHNpbmNlIGZvcm1zIGxpa2UKK2RubCAgKCVlYngpIGFyZSBvbmUgYnl0ZSBzaG9ydGVyIHRoYW4gMCglZWJ4KS4gIEEgbWFjcm8gYGZvbycgZm9yIHVzZSBhcworZG5sICBmb28oJWVieCkgY291bGQgYmUgZGVmaW5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgc28gaXQnbGwgYmUgZW1wdHkgaWYgdGhlCitkbmwgIGV4cHJlc3Npb24gY29tZXMgb3V0IHplcm8uCitkbmwKK2RubAkgICBkZWZsaXQoYGZvbycsIGBtNF9lbXB0eV9pZl96ZXJvKGErYio0LWMpJykKK2RubAorZG5sICBOYXR1cmFsbHkgdGhpcyBzaG91bGRuJ3QgYmUgZG9uZSBpZiwgc2F5LCBhIGNvbXB1dGVkIGp1bXAgZGVwZW5kcyBvbgorZG5sICB0aGUgY29kZSBiZWluZyBhIHBhcnRpY3VsYXIgc2l6ZS4KKworZGVmaW5lKG00X2VtcHR5X2lmX3plcm8sCittNF9hc3NlcnRfb25lYXJnKCkKK2BpZmVsc2UoZXZhbCgkMSksMCwsZXZhbCgkMSkpJykKKworCitkbmwgIFVzYWdlOiBtNF9sb2cyKHgpCitkbmwKK2RubCAgQ2FsY3VsYXRlIGEgbG9nYXJpdGhtIHRvIGJhc2UgMi4KK2RubCAgeCBtdXN0IGJlIGFuIGludGVncmFsIHBvd2VyIG9mIDIsIGJldHdlZW4gMioqMCBhbmQgMioqMzAuCitkbmwgIHggaXMgZXZhbCgpZWQsIHNvIGl0IGNhbiBiZSBhbiBleHByZXNzaW9uLgorZG5sICBBbiBlcnJvciByZXN1bHRzIGlmIHggaXMgaW52YWxpZC4KK2RubAorZG5sICAyKiozMSBpc24ndCBzdXBwb3J0ZWQsIGJlY2F1c2UgYW4gdW5zaWduZWQgMjE0NzQ4MzY0OCBpcyBvdXQgb2YgcmFuZ2UKK2RubCAgb2YgYSAzMi1iaXQgc2lnbmVkIGludC4gIEFsc28sIHRoZSBidWcgaW4gQlNEIG00IHdoZXJlIGFuIGV2YWwoKQorZG5sICByZXN1bHRpbmcgaW4gMjE0NzQ4MzY0OCAob3IgLTIxNDc0ODM2NDggYXMgdGhlIGNhc2UgbWF5IGJlKSBnaXZlcyBgLSgnCitkbmwgIG1lYW5zIHRlc3RzIGxpa2UgZXZhbCgxPDwzMT09KHgpKSB3b3VsZCBiZSBuZWNlc3NhcnksIGJ1dCB0aGF0IHRoZW4KK2RubCAgZ2l2ZXMgYW4gdW5hdHRyYWN0aXZlIGV4cGxvc2lvbiBvZiBldmFsKCkgZXJyb3IgbWVzc2FnZXMgaWYgeCBpc24ndAorZG5sICBudW1lcmljLgorCitkZWZpbmUobTRfbG9nMiwKK200X2Fzc2VydF9udW1hcmdzKDEpCitgbTRfbG9nMl9pbnRlcm5hbCgwLDEsZXZhbChgJDEnKSknKQorCitkbmwgIENhbGxlZDogbTRfbG9nMl9pbnRlcm5hbChuLDIqKm4sdGFyZ2V0KQorZGVmaW5lKG00X2xvZzJfaW50ZXJuYWwsCittNF9hc3NlcnRfbnVtYXJncygzKQorYGlmZWxzZSgkMiwkMywkMSwKK2BpZmVsc2UoJDEsMzAsCitgbTRfZXJyb3IoYG00X2xvZzIoKSBhcmd1bWVudCB0b28gYmlnIG9yIG5vdCBhIHBvd2VyIG9mIHR3bzogJDMKKycpJywKK2BtNF9sb2cyX2ludGVybmFsKGluY3IoJDEpLGV2YWwoMiokMiksJDMpJyknKScpCisKKworZG5sICBVc2FnZTogIG00X2RpdjJfdG93YXJkc196ZXJvCitkbmwKK2RubCAgbTQgZGl2aXNpb24gaXMgcHJvYmFibHkgd2hhdGV2ZXIgYSBDIHNpZ25lZCBkaXZpc2lvbiBpcywgYW5kIEMgZG9lc24ndAorZG5sICBzcGVjaWZ5IHdoYXQgcm91bmRpbmcgZ2V0cyB1c2VkIG9uIG5lZ2F0aXZlcywgc28gdGhpcyBleHByZXNzaW9uIGZvcmNlcworZG5sICBhIHJvdW5kaW5nIHRvd2FyZHMgemVyby4KKworZGVmaW5lKG00X2RpdjJfdG93YXJkc196ZXJvLAorbTRfYXNzZXJ0X251bWFyZ3MoMSkKK2BldmFsKCgoJDEpICsgKCgoJDEpPDApICYgKCQxKSkpIC8gMiknKQorCisKK2RubCAgVXNhZ2U6IG00X2xzaGlmdChuLGNvdW50KQorZG5sICAgICAgICAgbTRfcnNoaWZ0KG4sY291bnQpCitkbmwKK2RubCAgQ2FsY3VsYXRlIG4gc2hpZnRlZCBsZWZ0IG9yIHJpZ2h0IGJ5IGNvdW50IG1hbnkgYml0cy4gIEJvdGggbiBhbmQgY291bnQKK2RubCAgYXJlIGV2YWwoKWVkIGFuZCBzbyBjYW4gYmUgZXhwcmVzc2lvbnMuCitkbmwKK2RubCAgTmVnYXRpdmUgY291bnRzIGFyZSBhbGxvd2VkIGFuZCBtZWFuIGEgc2hpZnQgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbi4KK2RubCAgTmVnYXRpdmUgbiBpcyBhbGxvd2VkIGFuZCByaWdodCBzaGlmdHMgd2lsbCBiZSBhcml0aG1ldGljIChtZWFuaW5nCitkbmwgIGRpdmlkZSBieSAyKipjb3VudCwgcm91bmRpbmcgdG93YXJkcyB6ZXJvLCBhbHNvIG1lYW5pbmcgdGhlIHNpZ24gYml0IGlzCitkbmwgIGR1cGxpY2F0ZWQpLgorZG5sCitkbmwgIFVzZSB0aGVzZSBtYWNyb3MgaW5zdGVhZCBvZiA8PCBhbmQgPj4gaW4gZXZhbCgpIHNpbmNlIHRoZSBiYXNpYyBjY3MKK2RubCAgU3lzViBtNCBkb2Vzbid0IGhhdmUgdGhvc2Ugb3BlcmF0b3JzLgorCitkZWZpbmUobTRfcnNoaWZ0LAorbTRfYXNzZXJ0X251bWFyZ3MoMikKK2BtNF9sc2hpZnQoYCQxJywtKGAkMicpKScpCisKK2RlZmluZShtNF9sc2hpZnQsCittNF9hc3NlcnRfbnVtYXJncygyKQorYG00X2xzaGlmdF9pbnRlcm5hbChldmFsKGAkMScpLGV2YWwoYCQyJykpJykKKworZGVmaW5lKG00X2xzaGlmdF9pbnRlcm5hbCwKK200X2Fzc2VydF9udW1hcmdzKDIpCitgaWZlbHNlKGV2YWwoJDItMD09MCksMSwkMSwKK2BpZmVsc2UoZXZhbCgkMj4wKSwxLAorYG00X2xzaGlmdF9pbnRlcm5hbChldmFsKCQxKjIpLGRlY3IoJDIpKScsCitgbTRfbHNoaWZ0X2ludGVybmFsKG00X2RpdjJfdG93YXJkc196ZXJvKCQxKSxpbmNyKCQyKSknKScpJykKKworCitkbmwgIFVzYWdlOiBtNF9wb3Bjb3VudChuKQorZG5sCitkbmwgIEV4cGFuZCB0byB0aGUgbnVtYmVyIDEgYml0cyBpbiBuLgorCitkZWZpbmUobTRfcG9wY291bnQsCittNF9hc3NlcnRfbnVtYXJncygxKQorYG00X3BvcGNvdW50X2ludGVybmFsKDAsZXZhbChgJDEnKSknKQorCitkbmwgIENhbGxlZDogbTRfcG9wY291bnRfaW50ZXJuYWwoY291bnQscmVtKQorZGVmaW5lKG00X3BvcGNvdW50X2ludGVybmFsLAorbTRfYXNzZXJ0X251bWFyZ3MoMikKK2BpZmVsc2UoJDIsMCwkMSwKK2BtNF9wb3Bjb3VudF9pbnRlcm5hbChldmFsKCQxKygkMiUyKSksZXZhbCgkMi8yKSknKScpCisKKworZG5sICBVc2FnZTogbTRfY291bnRfdHJhaWxpbmdfemVyb3MoTikKK2RubAorZG5sICBEZXRlcm1pbmUgdGhlIG51bWJlciBvZiB0cmFpbGluZyB6ZXJvIGJpdHMgb24gTi4gIE4gaXMgZXZhbCgpZWQgYW5kIHNvCitkbmwgIGNhbiBiZSBhbiBleHByZXNzaW9uLiAgSWYgTiBpcyB6ZXJvIGFuIGVycm9yIGlzIGdlbmVyYXRlZC4KKworZGVmaW5lKG00X2NvdW50X3RyYWlsaW5nX3plcm9zLAorbTRfYXNzZXJ0X251bWFyZ3MoMSkKK2BtNF9jb3VudF90cmFpbGluZ196ZXJvc19pbnRlcm5hbChldmFsKGAkMScpLDApJykKKworZG5sICBDYWxsZWQ6IG00X2NvdW50X3RyYWlsaW5nX3plcm9zX2ludGVybmFsKHZhbCxjb3VudCkKK2RlZmluZShtNF9jb3VudF90cmFpbGluZ196ZXJvc19pbnRlcm5hbCwKK200X2Fzc2VydF9udW1hcmdzKDIpCitgaWZlbHNlKCQxLDAsCitgbTRfZXJyb3IoYG00X2NvdW50X3RyYWlsaW5nX3plcm9zKCkgZ2l2ZW4gYSB6ZXJvIHZhbHVlJyknLAorYGlmZWxzZShldmFsKCgkMSklMiksMSxgJDInLAorYG00X2NvdW50X3RyYWlsaW5nX3plcm9zX2ludGVybmFsKGV2YWwoJDEvMiksaW5jcigkMikpJyknKScpCisKKworZG5sICBVc2FnZTogZGVmbGl0KG5hbWUsdmFsdWUpCitkbmwKK2RubCAgTGlrZSBkZWZpbmUoKSwgYnV0ICJuYW1lIiBleHBhbmRzIGxpa2UgYSBsaXRlcmFsLCByYXRoZXIgdGhhbiB0YWtpbmcKK2RubCAgYXJndW1lbnRzLiAgRm9yIGV4YW1wbGUgIm5hbWUoJWVheCkiIGV4cGFuZHMgdG8gInZhbHVlKCVlYXgpIi4KK2RubAorZG5sICBMaW1pdGF0aW9uczoKK2RubAorZG5sICAkIGNoYXJhY3RlcnMgaW4gdGhlIHZhbHVlIHBhcnQgbXVzdCBoYXZlIHF1b3RlcyB0byBzdG9wIHRoZW0gbG9va2luZworZG5sICBsaWtlIG1hY3JvIHBhcmFtZXRlcnMuICBGb3IgZXhhbXBsZSwgZGVmbGl0KHJlZyxgMTIzKyRgJzQrNTY3JykuICBTZWUKK2RubCAgZGVmcmVnKCkgYmVsb3cgZm9yIGhhbmRsaW5nIHNpbXBsZSByZWdpc3RlciBkZWZpbml0aW9ucyBsaWtlICQ3IGV0Yy4KK2RubAorZG5sICAibmFtZSgpIiBpcyB0dXJuZWQgaW50byAibmFtZSIsIHVuZm9ydHVuYXRlbHkuICBJbiBHTlUgYW5kIFN5c1YgbTQgYW4KK2RubCAgZXJyb3IgaXMgZ2VuZXJhdGVkIHdoZW4gdGhpcyBoYXBwZW5zLCBidXQgaW4gQlNEIG00IGl0IHdpbGwgaGFwcGVuCitkbmwgIHNpbGVudGx5LiAgVGhlIHByb2JsZW0gaXMgdGhhdCBpbiBCU0QgbTQgJCMgaXMgMSBpbiBib3RoICJuYW1lIiBvcgorZG5sICAibmFtZSgpIiwgc28gdGhlcmUncyBubyB3YXkgdG8gZGlmZmVyZW50aWF0ZSB0aGVtLiAgQmVjYXVzZSB3ZSB3YW50CitkbmwgIHBsYWluICJuYW1lIiB0byB0dXJuIGludG8gcGxhaW4gInZhbHVlIiwgd2UgZW5kIHVwIHdpdGggIm5hbWUoKSIKK2RubCAgdHVybmluZyBpbnRvIHBsYWluICJ2YWx1ZSIgdG9vLgorZG5sCitkbmwgICJuYW1lKGZvbykiIHdpbGwgbG9zZSBhbnkgd2hpdGVzcGFjZSBhZnRlciBjb21tYXMgaW4gImZvbyIsIGZvciBleGFtcGxlCitkbmwgICJkaXNwKCVlYXgsICVlY3gpIiB3b3VsZCBiZWNvbWUgIjEyOCglZWF4LCVlY3gpIi4KK2RubAorZG5sICBUaGVzZSBwYXJlbnRoZXNlcyBvZGRpdGllcyBzaG91bGRuJ3QgbWF0dGVyIGluIGFzc2VtYmxlciB0ZXh0LCBidXQgaWYKK2RubCAgdGhleSBkbyB0aGUgc3VnZ2VzdGVkIHdvcmthcm91bmQgaXMgdG8gd3JpdGUgIm5hbWUgKCkiIG9yICJuYW1lIChmb28pIgorZG5sICB0byBzdG9wIHRoZSBwYXJlbnRoZXNlcyBsb29raW5nIGxpa2UgYSBtYWNybyBhcmd1bWVudCBsaXN0LiAgSWYgYSBzcGFjZQorZG5sICBpc24ndCBhY2NlcHRhYmxlIGluIHRoZSBvdXRwdXQsIHRoZW4gd3JpdGUgIm5hbWVgJygpIiBvciAibmFtZWAnKGZvbykiLgorZG5sICBUaGUgYCcgaXMgc3RyaXBwZWQgd2hlbiByZWFkLCBidXQgYWdhaW4gc3RvcHMgdGhlIHBhcmVudGhlc2VzIGxvb2tpbmcKK2RubCAgbGlrZSBwYXJhbWV0ZXJzLgorCitkbmwgIFF1b3RpbmcgZm9yIGRlZmxpdF9lbXB0eWFyZ2NoZWNrIGlzIHNpbWlsYXIgdG8gbTRfYXNzZXJ0X251bWFyZ3MuICBUaGUKK2RubCAgc3R1ZmYgaW4gdGhlIGlmZWxzZSBnaXZlcyBhICQjLCAkMSBhbmQgJEAgZXZhbHVhdGVkIGluIHRoZSBuZXcgbWFjcm8KK2RubCAgY3JlYXRlZCwgbm90IGluIGRlZmxpdC4KK2RlZmluZShkZWZsaXQsCittNF9hc3NlcnRfbnVtYXJncygyKQorYGRlZmluZShgJDEnLAorYGRlZmxpdF9lbXB0eWFyZ2NoZWNrJyhgYCQxJycsJGAjJyxtNF9kb3VibGVxdW90ZSgkYCcxKSlgZG5sCiskMmAnZG5sCitpZmVsc2UoZXZhbCgkJ2AjPjEgfHwgbTRfbGVuZ3RoKCdtNF9kb3VibGVxdW90ZSgkYCcxKWApIT0wKSwxLCgkJ2BAKSknKScpCisKK2RubCAgQ2FsbGVkOiBkZWZsaXRfZW1wdHlhcmdjaGVjayhtYWNyb25hbWUsJCMsYCQxJykKK2RlZmluZShkZWZsaXRfZW1wdHlhcmdjaGVjaywKK2BpZmVsc2UoZXZhbCgkMj09MSAmJiAhbTRfZG9sbGFyaGFzaF8xX2lmX25vcGFyZW5fcCAmJiBtNF9sZW5ndGgoYCQzJyk9PTApLDEsCitgbTRfZXJyb3IoYGRvbnQgdXNlIGEgZGVmbGl0IGFzICQxKCkgYmVjYXVzZSBpdCBsb3NlcyB0aGUgYnJhY2tldHMgKHNlZSBkZWZsaXQgaW4gYXNtLWRlZnMubTQgZm9yIG1vcmUgaW5mb3JtYXRpb24pCisnKScpJykKKworCitkbmwgIFVzYWdlOiBtNF9hc3NlcnQoYGV4cHInKQorZG5sCitkbmwgIFRlc3QgYSBjb21waWxlLXRpbWUgcmVxdWlyZW1lbnQgd2l0aCBhbiBtNCBleHByZXNzaW9uLiAgVGhlIGV4cHJlc3Npb24KK2RubCAgc2hvdWxkIGJlIHF1b3RlZCwgYW5kIHdpbGwgYmUgZXZhbCgpZWQgYW5kIGV4cGVjdGVkIHRvIGJlIG5vbi16ZXJvLgorZG5sICBGb3IgZXhhbXBsZSwKK2RubAorZG5sICAgICAgICAgbTRfYXNzZXJ0KGBGT08qMis2IDwgMTQnKQorCitkZWZpbmUobTRfYXNzZXJ0LAorbTRfYXNzZXJ0X251bWFyZ3MoMSkKK2BpZmVsc2UoZXZhbCgkMSksMSwsCitgbTRfZXJyb3IoYGFzc2VydGlvbiBmYWlsZWQ6ICQxCisnKScpJykKKworCitkbmwgIFVzYWdlOiBtNF9yZXBlYXQoY291bnQsdGV4dCkKK2RubAorZG5sICBFeHBhbmQgdG8gdGhlIGdpdmVuIHJlcGV0aXRpb25zIG9mIHRoZSBnaXZlbiB0ZXh0LiAgQSB6ZXJvIGNvdW50IGlzCitkbmwgIGFsbG93ZWQsIGFuZCBleHBhbmRzIHRvIG5vdGhpbmcuCisKK2RlZmluZShtNF9yZXBlYXQsCittNF9hc3NlcnRfbnVtYXJncygyKQorYG00X3JlcGVhdF9pbnRlcm5hbChldmFsKCQxKSxgJDInKScpCisKK2RlZmluZShtNF9yZXBlYXRfaW50ZXJuYWwsCittNF9hc3NlcnRfbnVtYXJncygyKQorYGlmZWxzZShgJDEnLDAsLAorYGZvcmxvb3AobTRfcmVwZWF0X2ludGVybmFsX2NvdW50ZXIsMSwkMSxgYCQyJycpJyknKQorCisKK2RubCAgVXNhZ2U6IG00X2hleF9sb3dtYXNrKGJpdHMpCitkbmwKK2RubCAgR2VuZXJhdGUgYSBoZXggY29uc3RhbnQgd2hpY2ggaXMgYSBsb3cgbWFzayBvZiB0aGUgZ2l2ZW4gbnVtYmVyIG9mCitkbmwgIGJpdHMuICBGb3IgZXhhbXBsZSBtNF9oZXhfbG93bWFzaygxMCkgd291bGQgZ2l2ZSAweDNmZi4KKworZGVmaW5lKG00X2hleF9sb3dtYXNrLAorbTRfYXNzZXJ0X251bWFyZ3MoMSkKK2BtNF9jcHVfaGV4X2NvbnN0YW50KG00X2hleF9sb3dtYXNrX2ludGVybmFsMShldmFsKGAkMScpKSknKQorCitkbmwgIENhbGxlZDogbTRfaGV4X2xvd21hc2tfaW50ZXJuYWwxKGJpdHMpCitkZWZpbmUobTRfaGV4X2xvd21hc2tfaW50ZXJuYWwxLAorbTRfYXNzZXJ0X251bWFyZ3MoMSkKK2BpZmVsc2UoJDEsMCxgMCcsCitgbTRfaGV4X2xvd21hc2tfaW50ZXJuYWwyKGV2YWwoKCQxKSU0KSxldmFsKCgkMSkvNCkpJyknKQorCitkbmwgIENhbGxlZDogbTRfaGV4X2xvd21hc2tfaW50ZXJuYWwocmVtYWluZGVyLGRpZ2l0cykKK2RlZmluZShtNF9oZXhfbG93bWFza19pbnRlcm5hbDIsCittNF9hc3NlcnRfbnVtYXJncygyKQorYGlmZWxzZSgkMSwxLGAxJywKK2BpZmVsc2UoJDEsMixgMycsCitgaWZlbHNlKCQxLDMsYDcnKScpJylkbmwKK200X3JlcGVhdCgkMixgZicpJykKKworCitkbmwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgIFRoZSBmb2xsb3dpbmcgbTRfbGlzdCBmdW5jdGlvbnMgdGFrZSBhIGxpc3QgYXMgbXVsdGlwbGUgYXJndW1lbnRzLgorZG5sICBBcmd1bWVudHMgYXJlIGV2YWx1YXRlZCBtdWx0aXBsZSB0aW1lcywgdGhlcmUncyBubyBhdHRlbXB0IGF0IHN0cmljdAorZG5sICBxdW90aW5nLiAgRW1wdHkgbGlzdCBlbGVtZW50cyBhcmUgbm90IGFsbG93ZWQsIHNpbmNlIGFuIGVtcHR5IGZpbmFsCitkbmwgIGFyZ3VtZW50IGlzIGlnbm9yZWQuICBUaGVzZSByZXN0cmljdGlvbnMgZG9uJ3QgYWZmZWN0IHRoZSBjdXJyZW50IHVzZXMsCitkbmwgIGFuZCBtYWtlIHRoZSBpbXBsZW1lbnRhdGlvbiBlYXNpZXIuCisKKworZG5sICBVc2FnZTogbTRfbGlzdF9xdW90ZShsaXN0LC4uLikKK2RubAorZG5sICBQcm9kdWNlIGEgbGlzdCB3aXRoIHF1b3RlZCBjb21tYXMsIHNvIGl0IGNhbiBiZSBhIHNpbmdsZSBhcmd1bWVudAorZG5sICBzdHJpbmcuICBGb3IgaW5zdGFuY2UgbTRfbGlzdF9xdW90ZShhLGIsYykgZ2l2ZXMKK2RubAorZG5sICAgICAgICAgYWAsJ2JgLCdjYCwnCitkbmwKK2RubCAgVGhpcyBjYW4gYmUgdXNlZCB0byBwdXQgYSBsaXN0IGluIGEgZGVmaW5lLAorZG5sCitkbmwgICAgICAgICBkZWZpbmUoZm9vbGlzdCwgbTRfbGlzdF9xdW90ZShhLGIsYykpCitkbmwKK2RubCAgV2hpY2ggY2FuIHRoZW4gYmUgdXNlZCBmb3IgaW5zdGFuY2UgYXMKK2RubAorZG5sICAgICAgICAgbTRfbGlzdF9maW5kKHRhcmdldCwgZm9vbGlzdCkKKworZGVmaW5lKG00X2xpc3RfcXVvdGUsCitgaWZlbHNlKGAkMScsLCwKK2AkMWAsJ200X2xpc3RfcXVvdGUoc2hpZnQoJEApKScpJykKKworCitkbmwgIFVzYWdlOiBtNF9saXN0X2ZpbmQoa2V5LGxpc3QsLi4uKQorZG5sCitkbmwgIEV2YWx1YXRlIHRvIDEgb3IgMCBhY2NvcmRpbmcgdG8gd2hldGhlciBrZXkgaXMgaW4gdGhlIGxpc3QgZWxlbWVudHMuCisKK2RlZmluZShtNF9saXN0X2ZpbmQsCittNF9hc3NlcnRfbnVtYXJnc19yYW5nZSgxLDEwMDApCitgaWZlbHNlKGAkMicsLDAsCitgaWZlbHNlKGAkMScsYCQyJywxLAorYG00X2xpc3RfZmluZChgJDEnLHNoaWZ0KHNoaWZ0KCRAKSkpJyknKScpCisKKworZG5sICBVc2FnZTogbTRfbGlzdF9yZW1vdmUoa2V5LGxpc3QsLi4uKQorZG5sCitkbmwgIEV2YWx1YXRlIHRvIHRoZSBnaXZlbiBsaXN0IHdpdGggYGtleScgcmVtb3ZlZCAoaWYgcHJlc2VudCkuCisKK2RlZmluZShtNF9saXN0X3JlbW92ZSwKK200X2Fzc2VydF9udW1hcmdzX3JhbmdlKDEsMTAwMCkKK2BpZmVsc2UoYCQyJywsLAorYGlmZWxzZShgJDEnLGAkMicsLGAkMiwnKWRubAorbTRfbGlzdF9yZW1vdmUoYCQxJyxzaGlmdChzaGlmdCgkQCkpKScpJykKKworCitkbmwgIFVzYWdlOiBtNF9saXN0X2ZpcnN0KGxpc3QsLi4uKQorZG5sCitkbmwgIEV2YWx1YXRlIHRvIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBsaXN0IChpZiBhbnkpLgorCitkZWZpbmUobTRfbGlzdF9maXJzdCxgJDEnKQorCisKK2RubCAgVXNhZ2U6IG00X2xpc3RfY291bnQobGlzdCwuLi4pCitkbmwKK2RubCAgRXZhbHVhdGUgdG8gdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgbGlzdC4gIFRoaXMgY2FuJ3QganVzdCB1c2UgJCMKK2RubCAgYmVjYXVzZSB0aGUgbGFzdCBlbGVtZW50IG1pZ2h0IGJlIGVtcHR5LgorCitkZWZpbmUobTRfbGlzdF9jb3VudCwKK2BtNF9saXN0X2NvdW50X2ludGVybmFsKDAsJEApJykKKworZG5sICBDYWxsZWQ6IG00X2xpc3RfaW50ZXJuYWwoY291bnQsbGlzdCwuLi4pCitkZWZpbmUobTRfbGlzdF9jb3VudF9pbnRlcm5hbCwKK200X2Fzc2VydF9udW1hcmdzX3JhbmdlKDEsMTAwMCkKK2BpZmVsc2UoYCQyJywsJDEsCitgbTRfbGlzdF9jb3VudF9pbnRlcm5hbChldmFsKCQxKzEpLHNoaWZ0KHNoaWZ0KCRAKSkpJyknKQorCisKK2RubCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCAgVmFyaW91cyBhc3NlbWJsZXIgdGhpbmdzLCBub3Qgc3BlY2lmaWMgdG8gYW55IHBhcnRpY3VsYXIgQ1BVLgorZG5sCisKKworZG5sICBVc2FnZTogaW5jbHVkZV9tcG4oYGZpbGVuYW1lJykKK2RubAorZG5sICBMaWtlIGluY2x1ZGUoKSwgYnV0IGFkZHMgYSBwYXRoIHRvIHRoZSBtcG4gc291cmNlIGRpcmVjdG9yeS4gIEZvcgorZG5sICBleGFtcGxlLAorZG5sCitkbmwgICAgICAgICBpbmNsdWRlX21wbihgc3BhcmM2NC9hZGRtdWxfMWguYXNtJykKKworZGVmaW5lKGluY2x1ZGVfbXBuLAorbTRfYXNzZXJ0X251bWFyZ3MoMSkKK200X2Fzc2VydF9kZWZpbmVkKGBDT05GSUdfVE9QX1NSQ0RJUicpCitgaW5jbHVkZShDT05GSUdfVE9QX1NSQ0RJUmAvbXBuLyQxJyknKQorCisKK2RubCAgVXNhZ2U6IEMgY29tbWVudCAuLi4KK2RubAorZG5sICBUaGlzIHdvcmtzIGxpa2UgYSBGT1JUUkFOLXN0eWxlIGNvbW1lbnQgY2hhcmFjdGVyLiAgSXQgY2FuIGJlIHVzZWQgZm9yCitkbmwgIGNvbW1lbnRzIHRvIHRoZSByaWdodCBvZiBhc3NlbWJseSBpbnN0cnVjdGlvbnMsIHdoZXJlIGp1c3QgZG5sIHdvdWxkCitkbmwgIHJlbW92ZSB0aGUgbmV3bGluZSBhbmQgY29uY2F0ZW5hdGUgYWRqYWNlbnQgbGluZXMuCitkbmwKK2RubCAgQyBhbmQvb3IgZG5sIGFyZSB1c2VmdWwgd2hlbiBhbiBhc3NlbWJsZXIgZG9lc24ndCBzdXBwb3J0IGNvbW1lbnRzLCBvcgorZG5sICB3aGVyZSBkaWZmZXJlbnQgYXNzZW1ibGVycyBmb3IgYSBwYXJ0aWN1bGFyIENQVSBuZWVkIGRpZmZlcmVudCBzdHlsZXMuCitkbmwgIFRoZSBpbnRlcm1lZGlhdGUgIi5zIiBmaWxlcyB3aWxsIGVuZCB1cCB3aXRoIG5vIGNvbW1lbnRzLCBqdXN0IGNvZGUuCitkbmwKK2RubCAgVXNpbmcgQyBpcyBub3QgaW50ZW5kZWQgdG8gY2F1c2Ugb2ZmZW5jZSB0byBhbnlvbmUgd2hvIGRvZXNuJ3QgbGlrZQorZG5sICBGT1JUUkFOOyBidXQgaWYgdGhhdCBoYXBwZW5zIGl0J3MgYW4gdW5leHBlY3RlZCBib251cy4KK2RubAorZG5sICBEdXJpbmcgZGV2ZWxvcG1lbnQsIGlmIGNvbW1lbnRzIGFyZSB3YW50ZWQgaW4gdGhlIC5zIGZpbGVzIHRvIGhlbHAgc2VlCitkbmwgIHdoYXQncyBleHBhbmRpbmcgd2hlcmUsIEMgY2FuIGJlIHJlZGVmaW5lZCB3aXRoIHNvbWV0aGluZyBsaWtlCitkbmwKK2RubCAgICAgICAgIGRlZmluZShgQycsYCMnKQorCitkZWZpbmUoQywgYAorZG5sJykKKworCitkbmwgIE5vcm1hbGx5IFBJQyBpcyBkZWZpbmVkIChvciBub3QpIGJ5IGxpYnRvb2wsIGJ1dCBpdCBkb2Vzbid0IHNldCBpdCBvbgorZG5sICBzeXN0ZW1zIHdoaWNoIGFyZSBhbHdheXMgUElDLiAgUElDX0FMV0FZUyBlc3RhYmxpc2hlZCBpbiBjb25maWcubTQKK2RubCAgaWRlbnRpZmllcyB0aGVzZSBmb3IgdXMuCisKK2lmZWxzZShgUElDX0FMV0FZUycsYHllcycsYGRlZmluZShgUElDJyknKQorCisKK2RubCAgVmFyaW91cyBwb3NzaWJsZSBkZWZpbmVzIHBhc3NlZCBmcm9tIHRoZSBNYWtlZmlsZSB0aGF0IGFyZSB0byBiZSB0ZXN0ZWQKK2RubCAgd2l0aCBpZmRlZigpIHJhdGhlciB0aGFuIGJlIGV4cGFuZGVkLgorCittNF9ub3RfZm9yX2V4cGFuc2lvbihgUElDJykKK200X25vdF9mb3JfZXhwYW5zaW9uKGBETExfRVhQT1JUJykKKworZG5sICBhb3JzX24KK200X25vdF9mb3JfZXhwYW5zaW9uKGBPUEVSQVRJT05fYWRkX24nKQorbTRfbm90X2Zvcl9leHBhbnNpb24oYE9QRVJBVElPTl9zdWJfbicpCisKK2RubCAgYW9yc19lcnIxX24KK200X25vdF9mb3JfZXhwYW5zaW9uKGBPUEVSQVRJT05fYWRkX2VycjFfbicpCittNF9ub3RfZm9yX2V4cGFuc2lvbihgT1BFUkFUSU9OX3N1Yl9lcnIxX24nKQorCitkbmwgIGFvcnNfZXJyMl9uCittNF9ub3RfZm9yX2V4cGFuc2lvbihgT1BFUkFUSU9OX2FkZF9lcnIyX24nKQorbTRfbm90X2Zvcl9leHBhbnNpb24oYE9QRVJBVElPTl9zdWJfZXJyMl9uJykKKworZG5sICBhb3JzX2VycjNfbgorbTRfbm90X2Zvcl9leHBhbnNpb24oYE9QRVJBVElPTl9hZGRfZXJyM19uJykKK200X25vdF9mb3JfZXhwYW5zaW9uKGBPUEVSQVRJT05fc3ViX2VycjNfbicpCisKK2RubCAgYW9yc211bF8xCittNF9ub3RfZm9yX2V4cGFuc2lvbihgT1BFUkFUSU9OX2FkZG11bF8xJykKK200X25vdF9mb3JfZXhwYW5zaW9uKGBPUEVSQVRJT05fc3VibXVsXzEnKQorCitkbmwgIGxvZ29wc19uCittNF9ub3RfZm9yX2V4cGFuc2lvbihgT1BFUkFUSU9OX2FuZF9uJykKK200X25vdF9mb3JfZXhwYW5zaW9uKGBPUEVSQVRJT05fYW5kbl9uJykKK200X25vdF9mb3JfZXhwYW5zaW9uKGBPUEVSQVRJT05fbmFuZF9uJykKK200X25vdF9mb3JfZXhwYW5zaW9uKGBPUEVSQVRJT05faW9yX24nKQorbTRfbm90X2Zvcl9leHBhbnNpb24oYE9QRVJBVElPTl9pb3JuX24nKQorbTRfbm90X2Zvcl9leHBhbnNpb24oYE9QRVJBVElPTl9uaW9yX24nKQorbTRfbm90X2Zvcl9leHBhbnNpb24oYE9QRVJBVElPTl94b3JfbicpCittNF9ub3RfZm9yX2V4cGFuc2lvbihgT1BFUkFUSU9OX3hub3JfbicpCisKK2RubCAgcG9waGFtCittNF9ub3RfZm9yX2V4cGFuc2lvbihgT1BFUkFUSU9OX3BvcGNvdW50JykKK200X25vdF9mb3JfZXhwYW5zaW9uKGBPUEVSQVRJT05faGFtZGlzdCcpCisKK2RubCAgbG9ycnNoaWZ0CittNF9ub3RfZm9yX2V4cGFuc2lvbihgT1BFUkFUSU9OX2xzaGlmdCcpCittNF9ub3RfZm9yX2V4cGFuc2lvbihgT1BFUkFUSU9OX3JzaGlmdCcpCisKK2RubCAgYW9yc2xzaDFfbgorbTRfbm90X2Zvcl9leHBhbnNpb24oYE9QRVJBVElPTl9hZGRsc2gxX24nKQorbTRfbm90X2Zvcl9leHBhbnNpb24oYE9QRVJBVElPTl9zdWJsc2gxX24nKQorbTRfbm90X2Zvcl9leHBhbnNpb24oYE9QRVJBVElPTl9yc2Jsc2gxX24nKQorCitkbmwgIGFvcnNsc2gyX24KK200X25vdF9mb3JfZXhwYW5zaW9uKGBPUEVSQVRJT05fYWRkbHNoMl9uJykKK200X25vdF9mb3JfZXhwYW5zaW9uKGBPUEVSQVRJT05fc3VibHNoMl9uJykKK200X25vdF9mb3JfZXhwYW5zaW9uKGBPUEVSQVRJT05fcnNibHNoMl9uJykKKworZG5sICByc2gxYW9yc19uCittNF9ub3RfZm9yX2V4cGFuc2lvbihgT1BFUkFUSU9OX3JzaDFhZGRfbicpCittNF9ub3RfZm9yX2V4cGFuc2lvbihgT1BFUkFUSU9OX3JzaDFzdWJfbicpCisKKworZG5sICBVc2FnZTogbTRfY29uZmlnX2dtcF9tcGFyYW0oYHN5bWJvbCcpCitkbmwKK2RubCAgQ2hlY2sgdGhhdCBgc3ltYm9sJyBpcyBkZWZpbmVkLiAgSWYgaXQgaXNuJ3QsIGlzc3VlIGFuIGVycm9yIGFuZAorZG5sICB0ZXJtaW5hdGUgaW1tZWRpYXRlbHkuICBUaGUgZXJyb3IgbWVzc2FnZSBleHBsYWlucyB0aGF0IHRoZSBzeW1ib2wKK2RubCAgc2hvdWxkIGJlIGluIGNvbmZpZy5tNCwgY29waWVkIGZyb20gZ21wLW1wYXJhbS5oLgorZG5sCitkbmwgIFRlcm1pbmF0aW9uIGlzIGltbWVkaWF0ZSBzaW5jZSBtaXNzaW5nIHNheSBTUVJfVE9PTTJfVEhSRVNIT0xEIGNhbgorZG5sICBsZWFkIHRvIGluZmluaXRlIGxvb3BzIGFuZCBlbmRsZXNzIGVycm9yIG1lc3NhZ2VzLgorCitkZWZpbmUobTRfY29uZmlnX2dtcF9tcGFyYW0sCittNF9hc3NlcnRfbnVtYXJncygxKQorYGlmZGVmKGAkMScsLAorYG00X2Vycm9yKGAkMSBpcyBub3QgZGVmaW5lZC4KKwkiY29uZmlndXJlIiBzaG91bGQgaGF2ZSBleHRyYWN0ZWQgdGhpcyBmcm9tIGdtcC1tcGFyYW0uaCBhbmQgcHV0IGl0CisJaW4gY29uZmlnLm00IChvciBpbiA8Y3B1Pl88ZmlsZT4uYXNtIGZvciBhIGZhdCBiaW5hcnkpLCBidXQgc29tZWhvdworICAgICAgICB0aGlzIGhhcyBmYWlsZWQuCisnKW00ZXhpdCgxKScpJykKKworCitkbmwgIFVzYWdlOiBkZWZyZWcobmFtZSxyZWcpCitkbmwKK2RubCAgR2l2ZSBhIG5hbWUgdG8gYSAkIHN0eWxlIHJlZ2lzdGVyLiAgRm9yIGV4YW1wbGUsCitkbmwKK2RubCAgICAgICAgIGRlZnJlZyhmb28sJDEyKQorZG5sCitkbmwgIGRlZnJlZygpIGluc2VydHMgYW4gZXh0cmEgcGFpciBvZiBxdW90ZXMgYWZ0ZXIgdGhlICQgc28gdGhhdCBpdCdzIG5vdAorZG5sICBpbnRlcnByZXRlZCBhcyBhbiBtNCBtYWNybyBwYXJhbWV0ZXIsIGllLiBmb28gaXMgYWN0dWFsbHkgJGAnMTIuICBtNAorZG5sICBzdHJpcHMgdGhvc2UgcXVvdGVzIHdoZW4gZm9vIGlzIGV4cGFuZGVkLgorZG5sCitkbmwgIGRlZmxpdCgpIGlzIHVzZWQgdG8gbWFrZSB0aGUgbmV3IGRlZmluaXRpb24sIHNvIGl0IHdpbGwgZXhwYW5kCitkbmwgIGxpdGVyYWxseSBldmVuIGlmIGZvbGxvd2VkIGJ5IHBhcmVudGhlc2VzIGllLiBmb28oOTkpIHdpbGwgYmVjb21lCitkbmwgICQxMig5OSkuICAoQnV0IHRoZXJlJ3Mgbm93aGVyZSB0aGF0IHdvdWxkIGJlIHVzZWQgaXMgdGhlcmU/KQorZG5sCitkbmwgIFdoZW4gbWFraW5nIGZ1cnRoZXIgZGVmaW5pdGlvbnMgZnJvbSBleGlzdGluZyBkZWZyZWcoKSBtYWNyb3MsIHJlbWVtYmVyCitkbmwgIHRvIHVzZSBkZWZyZWcoKSBhZ2FpbiB0byBwcm90ZWN0IHRoZSAkIGluIHRoZSBuZXcgZGVmaW5pdGlvbnMgdG9vLiAgRm9yCitkbmwgIGV4YW1wbGUsCitkbmwKK2RubCAgICAgICAgIGRlZnJlZyhhMCwkNCkKK2RubCAgICAgICAgIGRlZnJlZyhhMSwkNSkKK2RubCAgICAgICAgIC4uLgorZG5sCitkbmwgICAgICAgICBkZWZyZWcoUEFSQU1fRFNULGEwKQorZG5sCitkbmwgIFRoaXMgaXMgb25seSBiZWNhdXNlIGEwIGlzIGV4cGFuZGluZyBhdCB0aGUgdGltZSB0aGUgUEFSQU1fRFNUCitkbmwgIGRlZmluaXRpb24gaXMgbWFkZSwgbGVhdmluZyBhIGxpdGVyYWwgJDQgdGhhdCBtdXN0IGJlIHJlLXF1b3RlZC4gIE9uCitkbmwgIHRoZSBvdGhlciBoYW5kIGluIHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmcgcmEgaXMgb25seSBleHBhbmRlZCB3aGVuCitkbmwgIHJldCBpcyB1c2VkIGFuZCBpdHMgJGAnMzEgcHJvdGVjdGlvbiB3aWxsIGhhdmUgaXRzIGRlc2lyZWQgZWZmZWN0IGF0CitkbmwgIHRoYXQgdGltZS4KK2RubAorZG5sICAgICAgICAgZGVmcmVnKHJhLCQzMSkKK2RubCAgICAgICAgIC4uLgorZG5sICAgICAgICAgZGVmaW5lKHJldCxgaiByYScpCitkbmwKK2RubCAgTm90ZSB0aGF0IG9ubHkgJG4gZm9ybXMgYXJlIG1lYW50IHRvIGJlIHVzZWQgaGVyZSwgYW5kIHNvbWV0aGluZyBsaWtlCitkbmwgIDEyOCgkMzApIGRvZXNuJ3QgZ2V0IHByb3RlY3RlZCBhbmQgd2lsbCBjb21lIG91dCB3cm9uZy4KKworZGVmaW5lKGRlZnJlZywKK200X2Fzc2VydF9udW1hcmdzKDIpCitgZGVmbGl0KGAkMScsCitzdWJzdHIoYCQyJywwLDEpYGAnJ3N1YnN0cihgJDInLDEpKScpCisKKworZG5sICBVc2FnZTogbTRfaW5zdHJ1Y3Rpb25fd3JhcHBlcigpCitkbmwKK2RubCAgUHV0IHRoaXMsIHVucXVvdGVkLCBvbiBhIGxpbmUgb24gaXRzIG93biwgYXQgdGhlIHN0YXJ0IG9mIGEgbWFjcm8KK2RubCAgdGhhdCdzIGEgd3JhcHBlciBhcm91bmQgYW4gYXNzZW1ibGVyIGluc3RydWN0aW9uLiAgSXQgYWRkcyBjb2RlIHRvIGdpdmUKK2RubCAgYSBkZXNjcmlwdGl2ZSBlcnJvciBtZXNzYWdlIGlmIHRoZSBtYWNybyBpcyBpbnZva2VkIHdpdGhvdXQgYXJndW1lbnRzLgorZG5sCitkbmwgIEZvciBleGFtcGxlLCBzdXBwb3NlIGptcCBuZWVkcyB0byBiZSB3cmFwcGVkLAorZG5sCitkbmwgICAgICAgICBkZWZpbmUoam1wLAorZG5sICAgICAgICAgbTRfaW5zdHJ1Y3Rpb25fd3JhcHBlcigpCitkbmwgICAgICAgICBtNF9hc3NlcnRfbnVtYXJncygxKQorZG5sICAgICAgICAgICAgICAgICBgLmJ5dGUgMHg0MgorZG5sICAgICAgICAgICAgICAgICAubG9uZyAgJDEKK2RubCAgICAgICAgICAgICAgICAgbm9wJykKK2RubAorZG5sICBUaGUgcG9pbnQgb2YgbTRfaW5zdHJ1Y3Rpb25fd3JhcHBlciBpcyB0byBnZXQgYSBiZXR0ZXIgZXJyb3IgbWVzc2FnZQorZG5sICB0aGFuIG00X2Fzc2VydF9udW1hcmdzIHdvdWxkIGdpdmUgaWYgam1wIGlzIGFjY2lkZW50YWxseSB1c2VkIGFzIHBsYWluCitkbmwgICJqbXAgZm9vIiBpbnN0ZWFkIG9mIHRoZSBpbnRlbmRlZCAiam1wKCBmb28pIi4gICJqbXAoKSIgd2l0aCBubworZG5sICBhcmd1bWVudCBhbHNvIHByb3Zva2VzIHRoZSBlcnJvciBtZXNzYWdlLgorZG5sCitkbmwgIG00X2luc3RydWN0aW9uX3dyYXBwZXIgc2hvdWxkIG9ubHkgYmUgdXNlZCB3aXRoIHdyYXBwZWQgaW5zdHJ1Y3Rpb25zCitkbmwgIHRoYXQgdGFrZSBhcmd1bWVudHMsIHNpbmNlIG9idmlvdXNseSBzb21ldGhpbmcgbWVhbnQgdG8gYmUgdXNlZCBhcyBzYXkKK2RubCAgcGxhaW4gInJldCIgZG9lc24ndCB3YW50IHRvIGdpdmUgYW4gZXJyb3Igd2hlbiB1c2VkIHRoYXQgd2F5LgorCitkZWZpbmUobTRfaW5zdHJ1Y3Rpb25fd3JhcHBlciwKK200X2Fzc2VydF9udW1hcmdzKDApCitgYG00X2luc3RydWN0aW9uX3dyYXBwZXJfaW50ZXJuYWwnKG00X2RvdWJsZXF1b3RlKCRgJzApLGRubAoraWZkZWYoYF9fZmlsZV9fJyxgbTRfZG91YmxlcXVvdGUoX19maWxlX18pJyxgYHRoZSBtNCBzb3VyY2VzJycpLGRubAorJGAjJyxtNF9kb3VibGVxdW90ZSgkYCcxKSlgZG5sJycpCisKK2RubCAgQ2FsbGVkOiBtNF9pbnN0cnVjdGlvbl93cmFwcGVyX2ludGVybmFsKCQwLGBmaWxlbmFtZScsJCMsJDEpCitkZWZpbmUobTRfaW5zdHJ1Y3Rpb25fd3JhcHBlcl9pbnRlcm5hbCwKK2BpZmVsc2UoZXZhbCgkMzw9MSAmJiBtNF9sZW5ndGgoYCQ0Jyk9PTApLDEsCitgbTRfZXJyb3IoYCQxIGlzIGEgbWFjcm8gcmVwbGFjaW5nIHRoYXQgaW5zdHJ1Y3Rpb24gYW5kIG5lZWRzIGFyZ3VtZW50cywgc2VlICQyIGZvciBkZXRhaWxzCisnKScpJykKKworCitkbmwgIFVzYWdlOiBtNF9jcHVfaGV4X2NvbnN0YW50KHN0cmluZykKK2RubAorZG5sICBFeHBhbmQgdG8gdGhlIHN0cmluZyBwcmVmaXhlZCBieSBhIHN1aXRhYmxlIGAweCcgaGV4IG1hcmtlci4gIFRoaXMKK2RubCAgc2hvdWxkIGJlIHJlZGVmaW5lZCBhcyBuZWNlc3NhcnkgZm9yIENQVXMgd2l0aCBkaWZmZXJlbnQgY29udmVudGlvbnMuCisKK2RlZmluZShtNF9jcHVfaGV4X2NvbnN0YW50LAorbTRfYXNzZXJ0X251bWFyZ3MoMSkKK2AweGAkMScnKQorCisKK2RubCAgVXNhZ2U6IFVOUk9MTF9MT0cyLCBVTlJPTExfTUFTSywgVU5ST0xMX0JZVEVTCitkbmwgICAgICAgICBDSFVOS19MT0cyLCBDSFVOS19NQVNLLCBDSFVOS19CWVRFUworZG5sCitkbmwgIFdoZW4gY29kZSBzdXBwb3J0cyBhIHZhcmlhYmxlIGFtb3VudCBvZiBsb29wIHVucm9sbGluZywgdGhlIGNvbnZlbnRpb24KK2RubCAgaXMgdG8gZGVmaW5lIFVOUk9MTF9DT1VOVCB0byB0aGUgbnVtYmVyIG9mIGxpbWJzIHByb2Nlc3NlZCBwZXIgbG9vcC4KK2RubCAgV2hlbiB0ZXN0aW5nIGNvZGUgdGhpcyBjYW4gYmUgdmFyaWVkIHRvIHNlZSBob3cgbXVjaCB0aGUgbG9vcCBvdmVyaGVhZAorZG5sICBpcyBjb3N0aW5nLiAgRm9yIGV4YW1wbGUsCitkbmwKK2RubCAgICAgICAgIGRlZmxpdChVTlJPTExfQ09VTlQsIDMyKQorZG5sCitkbmwgIElmIHRoZSBmb3Jsb29wKCkgZ2VuZXJhdGluZyB0aGUgdW5yb2xsZWQgbG9vcCBoYXMgYSBwYXR0ZXJuIHByb2Nlc3NpbmcKK2RubCAgbW9yZSB0aGFuIG9uZSBsaW1iLCB0aGUgY29udmVudGlvbiBpcyB0byBleHByZXNzIHRoaXMgd2l0aCBDSFVOS19DT1VOVC4KK2RubCAgRm9yIGV4YW1wbGUsCitkbmwKK2RubCAgICAgICAgIGRlZmxpdChDSFVOS19DT1VOVCwgMikKK2RubAorZG5sICBUaGUgTE9HMiwgTUFTSyBhbmQgQllURVMgZGVmaW5pdGlvbnMgYmVsb3cgYXJlIGRlcml2ZWQgZnJvbSB0aGVzZSBDT1VOVAorZG5sICBkZWZpbml0aW9ucy4gIElmIENPVU5UIGlzIHJlZGVmaW5lZCwgdGhlIExPRzIsIE1BU0sgYW5kIEJZVEVTIGZvbGxvdworZG5sICB0aGUgbmV3IGRlZmluaXRpb24gYXV0b21hdGljYWxseS4KK2RubAorZG5sICBMT0cyIGlzIHRoZSBsb2cgYmFzZSAyIG9mIENPVU5ULiAgTUFTSyBpcyBDT1VOVC0xLCB3aGljaCBjYW4gYmUgdXNlZCBhcworZG5sICBhIGJpdCBtYXNrLiAgQllURVMgaXMgR01QX0xJTUJfQllURVMqQ09VTlQsIHRoZSBudW1iZXIgb2YgYnl0ZXMKK2RubCAgcHJvY2Vzc2VkIGluIGVhY2ggdW5yb2xsZWQgbG9vcC4KK2RubAorZG5sICBHTVBfTElNQl9CWVRFUyBpcyBkZWZpbmVkIGluIGEgQ1BVIHNwZWNpZmljIG00IGluY2x1ZGUgZmlsZS4gIEl0CitkbmwgIGV4aXN0cyBvbmx5IHNvIHRoZSBCWVRFUyBkZWZpbml0aW9ucyBoZXJlIGNhbiBiZSBjb21tb24gdG8gYWxsIENQVXMuCitkbmwgIEluIHRoZSBhY3R1YWwgY29kZSBmb3IgYSBnaXZlbiBDUFUsIGFuIGV4cGxpY2l0IDQgb3IgOCBtYXkgYXMgd2VsbCBiZQorZG5sICB1c2VkIGJlY2F1c2UgdGhlIGNvZGUgaXMgb25seSBmb3IgYSBwYXJ0aWN1bGFyIENQVSwgaXQgZG9lc24ndCBuZWVkIHRvCitkbmwgIGJlIGdlbmVyYWwuCitkbmwKK2RubCAgTm90ZSB0aGF0IG5vbmUgb2YgdGhlc2UgbWFjcm9zIGRvIGFueXRoaW5nIGV4Y2VwdCBnaXZlIGNvbnZlbnRpb25hbAorZG5sICBuYW1lcyB0byBjb21tb25seSB1c2VkIHRoaW5ncy4gIFlvdSBzdGlsbCBoYXZlIHRvIHdyaXRlIHlvdXIgb3duCitkbmwgIGV4cHJlc3Npb25zIGZvciBhIGZvcmxvb3AoKSBhbmQgdGhlIHJlc3VsdGluZyBhZGRyZXNzIGRpc3BsYWNlbWVudHMuCitkbmwgIFNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmcgd291bGQgYmUgdHlwaWNhbCBmb3IgNCBieXRlcyBwZXIgbGltYi4KK2RubAorZG5sICAgICAgICAgZm9ybG9vcChgaScsMCxVTlJPTExfQ09VTlQtMSxgCitkbmwgICAgICAgICAgICAgICAgIGRlZmxpdChgZGlzcCcsZXZhbChpKjQpKQorZG5sICAgICAgICAgICAgICAgICAuLi4KK2RubCAgICAgICAgICcpCitkbmwKK2RubCAgT3Igd2hlbiB1c2luZyBDSFVOS19DT1VOVCwKK2RubAorZG5sICAgICAgICAgZm9ybG9vcChgaScsMCxVTlJPTExfQ09VTlQvQ0hVTktfQ09VTlQtMSxgCitkbmwgICAgICAgICAgICAgICAgIGRlZmxpdChgZGlzcDAnLGV2YWwoaSpDSFVOS19DT1VOVCo0KSkKK2RubCAgICAgICAgICAgICAgICAgZGVmbGl0KGBkaXNwMScsZXZhbChkaXNwMCs0KSkKK2RubCAgICAgICAgICAgICAgICAgLi4uCitkbmwgICAgICAgICAnKQorZG5sCitkbmwgIENsZWFybHkgYGknIGNhbiBiZSBydW4gc3RhcnRpbmcgZnJvbSAxLCBvciBmcm9tIGhpZ2ggdG8gbG93IG9yIHdoYXRldmVyCitkbmwgIGJlc3Qgc3VpdHMuCisKK2RlZmxpdChVTlJPTExfTE9HMiwKK200X2Fzc2VydF9kZWZpbmVkKGBVTlJPTExfQ09VTlQnKQorYG00X2xvZzIoVU5ST0xMX0NPVU5UKScpCisKK2RlZmxpdChVTlJPTExfTUFTSywKK200X2Fzc2VydF9kZWZpbmVkKGBVTlJPTExfQ09VTlQnKQorYGV2YWwoVU5ST0xMX0NPVU5ULTEpJykKKworZGVmbGl0KFVOUk9MTF9CWVRFUywKK200X2Fzc2VydF9kZWZpbmVkKGBVTlJPTExfQ09VTlQnKQorbTRfYXNzZXJ0X2RlZmluZWQoYEdNUF9MSU1CX0JZVEVTJykKK2BldmFsKFVOUk9MTF9DT1VOVCAqIEdNUF9MSU1CX0JZVEVTKScpCisKK2RlZmxpdChDSFVOS19MT0cyLAorbTRfYXNzZXJ0X2RlZmluZWQoYENIVU5LX0NPVU5UJykKK2BtNF9sb2cyKENIVU5LX0NPVU5UKScpCisKK2RlZmxpdChDSFVOS19NQVNLLAorbTRfYXNzZXJ0X2RlZmluZWQoYENIVU5LX0NPVU5UJykKK2BldmFsKENIVU5LX0NPVU5ULTEpJykKKworZGVmbGl0KENIVU5LX0JZVEVTLAorbTRfYXNzZXJ0X2RlZmluZWQoYENIVU5LX0NPVU5UJykKK200X2Fzc2VydF9kZWZpbmVkKGBHTVBfTElNQl9CWVRFUycpCitgZXZhbChDSFVOS19DT1VOVCAqIEdNUF9MSU1CX0JZVEVTKScpCisKKworZG5sICBVc2FnZTogTVBOKG5hbWUpCitkbmwKK2RubCAgQWRkIE1QTl9QUkVGSVggdG8gYSBuYW1lLgorZG5sICBNUE5fUFJFRklYIGRlZmF1bHRzIHRvICJfX2dtcG5fIiBpZiBub3QgZGVmaW5lZC4KK2RubAorZG5sICBtNF91bnF1b3RlIGlzIHVzZWQgaW4gTVBOIHNvIHRoYXQgd2hlbiBpdCBleHBhbmRzIHRvIHNheSBfX2dtcG5fZm9vLAorZG5sICB0aGF0IGlkZW50aWZpZXIgd2lsbCBiZSBzdWJqZWN0IHRvIGZ1cnRoZXIgbWFjcm8gZXhwYW5zaW9uLiAgVGhpcyBpcworZG5sICB1c2VkIGJ5IHNvbWUgb2YgdGhlIGZhdCBiaW5hcnkgc3VwcG9ydCBmb3IgcmVuYW1pbmcgc3ltYm9scy4KKworaWZkZWYoYE1QTl9QUkVGSVgnLCwKK2BkZWZpbmUoYE1QTl9QUkVGSVgnLGBfX2dtcG5fJyknKQorCitkZWZpbmUoTVBOLAorbTRfYXNzZXJ0X251bWFyZ3MoMSkKK2BtNF91bnF1b3RlKE1QTl9QUkVGSVhgJyQxKScpCisKKworZG5sICBVc2FnZTogbXBuX2FkZF9uLCBldGMKK2RubAorZG5sICBDb252ZW5pZW5jZSBkZWZpbml0aW9ucyB1c2luZyBNUE4oKSwgbGlrZSB0aGUgI2RlZmluZXMgaW4gZ21wLmguICBFYWNoCitkbmwgIGZ1bmN0aW9uIHRoYXQgbWlnaHQgYmUgaW1wbGVtZW50ZWQgaW4gYXNzZW1ibGVyIGlzIGhlcmUuCisKK2RlZmluZShkZWZpbmVfbXBuLAorbTRfYXNzZXJ0X251bWFyZ3MoMSkKK2BkZWZsaXQoYG1wbl8kMScsYE1QTihgJDEnKScpJykKKworZGVmaW5lX21wbihhZGQpCitkZWZpbmVfbXBuKGFkZF8xKQorZGVmaW5lX21wbihhZGRfZXJyMV9uKQorZGVmaW5lX21wbihhZGRfZXJyMl9uKQorZGVmaW5lX21wbihhZGRfZXJyM19uKQorZGVmaW5lX21wbihhZGRfbikKK2RlZmluZV9tcG4oYWRkX25jKQorZGVmaW5lX21wbihhZGRsc2gxX24pCitkZWZpbmVfbXBuKGFkZGxzaDFfbmMpCitkZWZpbmVfbXBuKGFkZGxzaDJfbikKK2RlZmluZV9tcG4oYWRkbHNoMl9uYykKK2RlZmluZV9tcG4oYWRkbHNoX24pCitkZWZpbmVfbXBuKGFkZGxzaF9uYykKK2RlZmluZV9tcG4oYWRkbHNoMV9uX2lwMSkKK2RlZmluZV9tcG4oYWRkbHNoMV9uY19pcDEpCitkZWZpbmVfbXBuKGFkZGxzaDJfbl9pcDEpCitkZWZpbmVfbXBuKGFkZGxzaDJfbmNfaXAxKQorZGVmaW5lX21wbihhZGRsc2hfbl9pcDEpCitkZWZpbmVfbXBuKGFkZGxzaF9uY19pcDEpCitkZWZpbmVfbXBuKGFkZGxzaDFfbl9pcDIpCitkZWZpbmVfbXBuKGFkZGxzaDFfbmNfaXAyKQorZGVmaW5lX21wbihhZGRsc2gyX25faXAyKQorZGVmaW5lX21wbihhZGRsc2gyX25jX2lwMikKK2RlZmluZV9tcG4oYWRkbHNoX25faXAyKQorZGVmaW5lX21wbihhZGRsc2hfbmNfaXAyKQorZGVmaW5lX21wbihhZGRtdWxfMSkKK2RlZmluZV9tcG4oYWRkbXVsXzFjKQorZGVmaW5lX21wbihhZGRtdWxfMikKK2RlZmluZV9tcG4oYWRkbXVsXzMpCitkZWZpbmVfbXBuKGFkZG11bF80KQorZGVmaW5lX21wbihhZGRtdWxfNSkKK2RlZmluZV9tcG4oYWRkbXVsXzYpCitkZWZpbmVfbXBuKGFkZG11bF83KQorZGVmaW5lX21wbihhZGRtdWxfOCkKK2RlZmluZV9tcG4oYWRkbXVsXzJzKQorZGVmaW5lX21wbihhZGRfbl9zdWJfbikKK2RlZmluZV9tcG4oYWRkX25fc3ViX25jKQorZGVmaW5lX21wbihhZGRhZGRtdWxfMW1zYjApCitkZWZpbmVfbXBuKGFuZF9uKQorZGVmaW5lX21wbihhbmRuX24pCitkZWZpbmVfbXBuKGJkaXZfcV8xKQorZGVmaW5lX21wbihwaTFfYmRpdl9xXzEpCitkZWZpbmVfbXBuKGJkaXZfZGJtMWMpCitkZWZpbmVfbXBuKGNtcCkKK2RlZmluZV9tcG4oY25kX2FkZF9uKQorZGVmaW5lX21wbihjbmRfc3ViX24pCitkZWZpbmVfbXBuKGNvbSkKK2RlZmluZV9tcG4oY29weWQpCitkZWZpbmVfbXBuKGNvcHlpKQorZGVmaW5lX21wbihjb3VudF9sZWFkaW5nX3plcm9zKQorZGVmaW5lX21wbihjb3VudF90cmFpbGluZ196ZXJvcykKK2RlZmluZV9tcG4oZGl2X3FyXzFuX3BpMSkKK2RlZmluZV9tcG4oZGl2X3FyXzIpCitkZWZpbmVfbXBuKGRpdl9xcl8ybl9waTEpCitkZWZpbmVfbXBuKGRpdl9xcl8ydV9waTEpCitkZWZpbmVfbXBuKGRpdl9xcl8ybl9waTIpCitkZWZpbmVfbXBuKGRpdl9xcl8ydV9waTIpCitkZWZpbmVfbXBuKGRpdmV4YWN0XzEpCitkZWZpbmVfbXBuKGRpdmV4YWN0X2J5M2MpCitkZWZpbmVfbXBuKGRpdnJlbSkKK2RlZmluZV9tcG4oZGl2cmVtXzEpCitkZWZpbmVfbXBuKGRpdnJlbV8xYykKK2RlZmluZV9tcG4oZGl2cmVtXzIpCitkZWZpbmVfbXBuKGRpdnJlbV9jbGFzc2ljKQorZGVmaW5lX21wbihkaXZyZW1fbmV3dG9uKQorZGVmaW5lX21wbihkdW1wKQorZGVmaW5lX21wbihnY2QpCitkZWZpbmVfbXBuKGdjZF8xKQorZGVmaW5lX21wbihnY2RfMTEpCitkZWZpbmVfbXBuKGdjZF8yMikKK2RlZmluZV9tcG4oZ2NkZXh0KQorZGVmaW5lX21wbihnZXRfc3RyKQorZGVmaW5lX21wbihoYW1kaXN0KQorZGVmaW5lX21wbihpbnZlcnRfbGltYikKK2RlZmluZV9tcG4oaW52ZXJ0X2xpbWJfdGFibGUpCitkZWZpbmVfbXBuKGlvcl9uKQorZGVmaW5lX21wbihpb3JuX24pCitkZWZpbmVfbXBuKGxzaGlmdCkKK2RlZmluZV9tcG4obHNoaWZ0YykKK2RlZmluZV9tcG4obW9kXzFfMXApCitkZWZpbmVfbXBuKG1vZF8xXzFwX2NwcykKK2RlZmluZV9tcG4obW9kXzFzXzJwKQorZGVmaW5lX21wbihtb2RfMXNfMnBfY3BzKQorZGVmaW5lX21wbihtb2RfMXNfM3ApCitkZWZpbmVfbXBuKG1vZF8xc18zcF9jcHMpCitkZWZpbmVfbXBuKG1vZF8xc180cCkKK2RlZmluZV9tcG4obW9kXzFzXzRwX2NwcykKK2RlZmluZV9tcG4obW9kXzEpCitkZWZpbmVfbXBuKG1vZF8xYykKK2RlZmluZV9tcG4obW9kXzM0bHN1YjEpCitkZWZpbmVfbXBuKG1vZGV4YWN0XzFfb2RkKQorZGVmaW5lX21wbihtb2RleGFjdF8xY19vZGQpCitkZWZpbmVfbXBuKG11bCkKK2RlZmluZV9tcG4obXVsXzEpCitkZWZpbmVfbXBuKG11bF8xYykKK2RlZmluZV9tcG4obXVsXzIpCitkZWZpbmVfbXBuKG11bF8zKQorZGVmaW5lX21wbihtdWxfNCkKK2RlZmluZV9tcG4obXVsXzUpCitkZWZpbmVfbXBuKG11bF82KQorZGVmaW5lX21wbihtdWxfYmFzZWNhc2UpCitkZWZpbmVfbXBuKG11bF9uKQorZGVmaW5lX21wbihtdWxsb19iYXNlY2FzZSkKK2RlZmluZV9tcG4obXVsbWlkX2Jhc2VjYXNlKQorZGVmaW5lX21wbihwZXJmZWN0X3NxdWFyZV9wKQorZGVmaW5lX21wbihwb3Bjb3VudCkKK2RlZmluZV9tcG4ocHJlaW52X2RpdnJlbV8xKQorZGVmaW5lX21wbihwcmVpbnZfbW9kXzEpCitkZWZpbmVfbXBuKG5hbmRfbikKK2RlZmluZV9tcG4obmVnKQorZGVmaW5lX21wbihuaW9yX24pCitkZWZpbmVfbXBuKHBvd20pCitkZWZpbmVfbXBuKHBvd2xvKQorZGVmaW5lX21wbihyYW5kb20pCitkZWZpbmVfbXBuKHJhbmRvbTIpCitkZWZpbmVfbXBuKHJlZGNfMSkKK2RlZmluZV9tcG4ocmVkY18yKQorZGVmaW5lX21wbihyc2Jsc2gxX24pCitkZWZpbmVfbXBuKHJzYmxzaDFfbmMpCitkZWZpbmVfbXBuKHJzYmxzaDJfbikKK2RlZmluZV9tcG4ocnNibHNoMl9uYykKK2RlZmluZV9tcG4ocnNibHNoX24pCitkZWZpbmVfbXBuKHJzYmxzaF9uYykKK2RlZmluZV9tcG4ocnNoMWFkZF9uKQorZGVmaW5lX21wbihyc2gxYWRkX25jKQorZGVmaW5lX21wbihyc2gxc3ViX24pCitkZWZpbmVfbXBuKHJzaDFzdWJfbmMpCitkZWZpbmVfbXBuKHJzaGlmdCkKK2RlZmluZV9tcG4ocnNoaWZ0YykKK2RlZmluZV9tcG4oc2JwaTFfYmRpdl9xKQorZGVmaW5lX21wbihzYnBpMV9iZGl2X3FyKQorZGVmaW5lX21wbihzYnBpMV9iZGl2X3IpCitkZWZpbmVfbXBuKHNjYW4wKQorZGVmaW5lX21wbihzY2FuMSkKK2RlZmluZV9tcG4oc2V0X3N0cikKK2RlZmluZV9tcG4oc3FyX2Jhc2VjYXNlKQorZGVmaW5lX21wbihzcXJfZGlhZ29uYWwpCitkZWZpbmVfbXBuKHNxcl9kaWFnX2FkZGxzaDEpCitkZWZpbmVfbXBuKHN1Yl9uKQorZGVmaW5lX21wbihzdWJsc2gxX24pCitkZWZpbmVfbXBuKHN1YmxzaDFfbmMpCitkZWZpbmVfbXBuKHN1YmxzaDFfbl9pcDEpCitkZWZpbmVfbXBuKHN1YmxzaDFfbmNfaXAxKQorZGVmaW5lX21wbihzdWJsc2gyX24pCitkZWZpbmVfbXBuKHN1YmxzaDJfbmMpCitkZWZpbmVfbXBuKHN1YmxzaDJfbl9pcDEpCitkZWZpbmVfbXBuKHN1YmxzaDJfbmNfaXAxKQorZGVmaW5lX21wbihzdWJsc2hfbikKK2RlZmluZV9tcG4oc3VibHNoX25jKQorZGVmaW5lX21wbihzdWJsc2hfbl9pcDEpCitkZWZpbmVfbXBuKHN1YmxzaF9uY19pcDEpCitkZWZpbmVfbXBuKHNxcnRyZW0pCitkZWZpbmVfbXBuKHN1YikKK2RlZmluZV9tcG4oc3ViXzEpCitkZWZpbmVfbXBuKHN1Yl9lcnIxX24pCitkZWZpbmVfbXBuKHN1Yl9lcnIyX24pCitkZWZpbmVfbXBuKHN1Yl9lcnIzX24pCitkZWZpbmVfbXBuKHN1Yl9uKQorZGVmaW5lX21wbihzdWJfbmMpCitkZWZpbmVfbXBuKHN1Ym11bF8xKQorZGVmaW5lX21wbihzdWJtdWxfMWMpCitkZWZpbmVfbXBuKHNlY190YWJzZWxlY3QpCitkZWZpbmVfbXBuKHVtdWxfcHBtbSkKK2RlZmluZV9tcG4odW11bF9wcG1tX3IpCitkZWZpbmVfbXBuKHVkaXZfcXJubmQpCitkZWZpbmVfbXBuKHVkaXZfcXJubmRfcikKK2RlZmluZV9tcG4oeG5vcl9uKQorZGVmaW5lX21wbih4b3JfbikKKworCitkbmwgIERlZmluZXMgZm9yIEMgZ2xvYmFsIGFycmF5cyBhbmQgdmFyaWFibGVzLCB3aXRoIG5hbWVzIG1hdGNoaW5nIHdoYXQncworZG5sICB1c2VkIGluIHRoZSBDIGNvZGUuCitkbmwKK2RubCAgTm90aWNlIHRoYXQgR1NZTV9QUkVGSVggaXMgaW5jbHVkZWQsIHVubGlrZSB3aXRoIHRoZSBmdW5jdGlvbiBkZWZpbmVzCitkbmwgIGFib3ZlLiAgQWxzbywgImRlZmxpdCIgaXMgdXNlZCBzbyB0aGF0IHNvbWV0aGluZyBsaWtlIF9fY2x6X3RhYiglZWJ4KQorZG5sICBjb21lcyBvdXQgYXMgX19nbXBuX2Nsel90YWIoJWVieCksIGZvciB0aGUgYmVuZWZpdCBvZiBDUFVzIHdpdGggdGhhdAorZG5sICBzdHlsZSBhc3NlbWJsZXIgc3ludGF4LgorCitkZWZsaXQoX19jbHpfdGFiLAorbTRfYXNzZXJ0X2RlZmluZWQoYEdTWU1fUFJFRklYJykKK2BHU1lNX1BSRUZJWGAnTVBOKGBjbHpfdGFiJyknKQorCitkZWZsaXQoYmludmVydF9saW1iX3RhYmxlLAorbTRfYXNzZXJ0X2RlZmluZWQoYEdTWU1fUFJFRklYJykKK2BHU1lNX1BSRUZJWGAnX19nbXBfYmludmVydF9saW1iX3RhYmxlJykKKworCitkbmwgIFVzYWdlOiBBU01fU1RBUlQoKQorZG5sCitkbmwgIEVtaXQgYW55IGRpcmVjdGl2ZXMgbmVlZGVkIG9uY2UgYXQgdGhlIHN0YXJ0IG9mIGFuIGFzc2VtYmxlciBmaWxlLCBsaWtlCitkbmwgICIuc2V0IG5vcmVvcmRlciIgb3Igd2hhdGV2ZXIuICBUaGUgZGVmYXVsdCBmb3IgdGhpcyBpcyBub3RoaW5nLCBidXQKK2RubCAgaXQncyByZWRlZmluZWQgYnkgQ1BVIHNwZWNpZmljIG00IGZpbGVzLgorCitkZWZpbmUoQVNNX1NUQVJUKQorCisKK2RubCAgVXNhZ2U6IEFTTV9FTkQoKQorZG5sCitkbmwgIEVtaXQgYW55IGRpcmVjdGl2ZXMgbmVlZGVkIG9uY2UgYXQgdGhlIGVuZCBvZiBhbiBhc3NlbWJsZXIgZmlsZS4gIFRoZQorZG5sICBkZWZhdWx0IGZvciB0aGlzIGlzIG5vdGhpbmcsIGJ1dCBpdCdzIHJlZGVmaW5lZCBieSBDUFUgc3BlY2lmaWMgbTQgZmlsZXMuCisKK2RlZmluZShBU01fRU5EKQorCisKK2RubCAgVXNhZ2U6IFBST0xPR1VFKGZvb1sscGFyYW1dKQorZG5sICAgICAgICAgRVBJTE9HVUUoZm9vKQorZG5sCitkbmwgIEVtaXQgZGlyZWN0aXZlcyB0byBzdGFydCBvciBlbmQgYSBmdW5jdGlvbi4gIEdTWU1fUFJFRklYIGlzIGFkZGVkIGJ5CitkbmwgIHRoZXNlIG1hY3JvcyBpZiBuZWNlc3NhcnksIHNvIHRoZSBnaXZlbiAiZm9vIiBpcyB3aGF0IHRoZSBmdW5jdGlvbiB3aWxsCitkbmwgIGJlIGNhbGxlZCBpbiBDLgorZG5sCitkbmwgIFRoZSBzZWNvbmQgcGFyYW1ldGVyIHRvIFBST0xPR1VFIGlzIHVzZWQgb25seSBmb3Igc29tZSBDUFVzIGFuZCBzaG91bGQKK2RubCAgYmUgb21pdHRlZCBpZiBub3QgcmVxdWlyZWQuCitkbmwKK2RubCAgTmVzdGVkIG9yIG92ZXJsYXBwaW5nIFBST0xPR1VFL0VQSUxPR1VFIHBhaXJzIGFyZSBhbGxvd2VkLCBpZiB0aGF0CitkbmwgIG1ha2VzIHNlbnNlIGZvciB0aGUgc3lzdGVtLiAgVGhlIG5hbWUgZ2l2ZW4gdG8gRVBJTE9HVUUgbXVzdCBiZSBhCitkbmwgIGN1cnJlbnRseSBvcGVuIFBST0xPR1VFLgorZG5sCitkbmwgIElmIG9ubHkgb25lIFBST0xPR1VFIGlzIG9wZW4gdGhlbiB0aGUgbmFtZSBjYW4gYmUgb21pdHRlZCBmcm9tCitkbmwgIEVQSUxPR1VFLiAgVGhpcyBpcyBlbmNvdXJhZ2VkLCBzaW5jZSBpdCBtZWFucyB0aGUgbmFtZSBvbmx5IGhhcyB0bworZG5sICBhcHBlYXIgaW4gb25lIHBsYWNlLCBub3QgdHdvLgorZG5sCitkbmwgIFRoZSBnaXZlbiBuYW1lICJmb28iIGlzIG5vdCBmdWxseSBxdW90ZWQgaGVyZSwgaXQgd2lsbCBiZSBtYWNybworZG5sICBleHBhbmRlZCBtb3JlIHRoYW4gb25jZS4gIFRoaXMgaXMgdGhlIHdheSB0aGUgbTRfbGlzdCBtYWNyb3Mgd29yaywgYW5kCitkbmwgIGl0IGFsc28gaGVscHMgdGhlIHR1bmUvbWFueS5wbCBwcm9ncmFtIGRvIGEgcmVuYW1pbmcgbGlrZQorZG5sICAtRF9fZ21wbl9hZGRfbj1tcG5fYWRkX25fZm9vIHdoZW4gR1NZTV9QUkVGSVggaXMgbm90IGVtcHR5LgorCitkZWZpbmUoUFJPTE9HVUUsCittNF9hc3NlcnRfbnVtYXJnc19yYW5nZSgxLDIpCitgbTRfZmlsZV9zZWVuKClkbmwKK2RlZmluZShgUFJPTE9HVUVfbGlzdCcsbTRfbGlzdF9xdW90ZSgkMSxQUk9MT0dVRV9saXN0KSlkbmwKK2lmZWxzZShgJDInLCwKK2BQUk9MT0dVRV9jcHUoR1NZTV9QUkVGSVhgJyQxKScsCitgUFJPTE9HVUVfY3B1KEdTWU1fUFJFRklYYCckMSxgJDInKScpJykKKworZGVmaW5lKEVQSUxPR1VFLAorbTRfYXNzZXJ0X251bWFyZ3NfcmFuZ2UoMCwxKQorYGlmZWxzZShgJDEnLCwKK2BpZmVsc2UobTRfbGlzdF9jb3VudChQUk9MT0dVRV9saXN0KSwwLAorYG00X2Vycm9yKGBubyBvcGVuIGZ1bmN0aW9ucyBmb3IgRVBJTE9HVUUKKycpJywKK2BpZmVsc2UobTRfbGlzdF9jb3VudChQUk9MT0dVRV9saXN0KSwxLAorYEVQSUxPR1VFX2ludGVybmFsKFBST0xPR1VFX2N1cnJlbnRfZnVuY3Rpb24pJywKK2BtNF9lcnJvcihgbW9yZSB0aGFuIG9uZSBvcGVuIGZ1bmN0aW9uIGZvciBFUElMT0dVRQorJyknKScpJywKK2BFUElMT0dVRV9pbnRlcm5hbChgJDEnKScpJykKKworZGVmaW5lKEVQSUxPR1VFX2ludGVybmFsLAorbTRfYXNzZXJ0X251bWFyZ3MoMSkKK200X2Fzc2VydF9kZWZpbmVkKGBFUElMT0dVRV9jcHUnKQorYGlmZWxzZShtNF9saXN0X2ZpbmQoJDEsUFJPTE9HVUVfbGlzdCksMCwKK2BtNF9lcnJvcihgRVBJTE9HVUUgd2l0aG91dCBQUk9MT0dVRTogJDEKKycpJylkbmwKK2RlZmluZShgUFJPTE9HVUVfbGlzdCcsbTRfbGlzdF9xdW90ZShtNF9saXN0X3JlbW92ZSgkMSxQUk9MT0dVRV9saXN0KSkpZG5sCitFUElMT0dVRV9jcHUoR1NZTV9QUkVGSVhgJDEnKScpCisKK2RubCAgQ3VycmVudGx5IG9wZW4gUFJPTE9HVUVzLCBhcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0LgorZGVmaW5lKFBST0xPR1VFX2xpc3QpCisKKworZG5sICBDYWxsZWQ6IFBST0xPR1VFX2NoZWNrKGxpc3QsLi4uKQorZG5sICBDaGVjayB0aGVyZSdzIG5vIHJlbWFpbmluZyBvcGVuIFBST0xPR1VFcyBhdCB0aGUgZW5kIG9mIGlucHV0LgorZGVmaW5lKFBST0xPR1VFX2NoZWNrLAorYGlmZWxzZSgkMSwsLAorYG00X2Vycm9yKGBubyBFUElMT0dVRSBmb3I6ICQxCisnKWRubAorUFJPTE9HVUVfY2hlY2soc2hpZnQoJEApKScpJykKKworbTR3cmFwX3ByZXBlbmQoYFBST0xPR1VFX2NoZWNrKFBST0xPR1VFX2xpc3QpJykKKworCitkbmwgIFVzYWdlOiBQUk9MT0dVRV9jdXJyZW50X2Z1bmN0aW9uCitkbmwKK2RubCAgVGhpcyBtYWNybyBleHBhbmRzIHRvIHRoZSBjdXJyZW50IFBST0xPR1VFL0VQSUxPR1VFIGZ1bmN0aW9uLCBvciB0aGUKK2RubCAgbW9zdCByZWNlbnQgUFJPTE9HVUUgaWYgc3VjaCBwYWlycyBhcmUgbmVzdGVkIG9yIG92ZXJsYXBwZWQuCisKK2RlZmluZShQUk9MT0dVRV9jdXJyZW50X2Z1bmN0aW9uLAorbTRfYXNzZXJ0X251bWFyZ3MoLTEpCitgbTRfbGlzdF9maXJzdChQUk9MT0dVRV9saXN0KScpCisKKworZG5sICBVc2FnZTogUFJPTE9HVUVfY3B1KEdTWU1fUFJFRklYYCdmb29bLHBhcmFtXSkKK2RubCAgICAgICAgIEVQSUxPR1VFX2NwdShHU1lNX1BSRUZJWGAnZm9vKQorZG5sCitkbmwgIFRoZXNlIG1hY3JvcyBob2xkIHRoZSBDUFUtc3BlY2lmaWMgcGFydHMgb2YgUFJPTE9HVUUgYW5kIEVQSUxPR1VFLgorZG5sICBCb3RoIGFyZSBjYWxsZWQgd2l0aCB0aGUgZnVuY3Rpb24gbmFtZSwgd2l0aCBHU1lNX1BSRUZJWCBhbHJlYWR5CitkbmwgIHByZXBlbmRlZC4KK2RubAorZG5sICBUaGUgZGVmaW5pdGlvbnMgaGVyZSBhcmUgc29tZXRoaW5nIHR5cGljYWwgYW5kIHNlbnNpYmxlLCBidXQgQ1BVIG9yCitkbmwgIHN5c3RlbSBzcGVjaWZpYyBtNCBmaWxlcyBzaG91bGQgcmVkZWZpbmUgdGhlbSBhcyBuZWNlc3NhcnkuICBUaGUKK2RubCAgb3B0aW9uYWwgZXh0cmEgcGFyYW1ldGVyIHRvIFBST0xPR1VFX2NwdSBpcyBub3QgZXhwZWN0ZWQgYW5kIG5vdAorZG5sICBhY2NlcHRlZCBoZXJlLgorCitkZWZpbmUoUFJPTE9HVUVfY3B1LAorbTRfYXNzZXJ0X251bWFyZ3MoMSkKK2AJVEVYVAorCUFMSUdOKDgpCisJR0xPQkwJYCQxJyBHTE9CTF9BVFRSCisJVFlQRShgJDEnLGBmdW5jdGlvbicpCitgJDEnTEFCRUxfU1VGRklYJykKKworZGVmaW5lKEVQSUxPR1VFX2NwdSwKK2AJU0laRShgJDEnLC4tYCQxJyknKQorCisKK2RubCAgVXNhZ2U6IEwobmFtZSkKK2RubAorZG5sICBHZW5lcmF0ZSBhIGxvY2FsIGxhYmVsIHdpdGggdGhlIGdpdmVuIG5hbWUuICBUaGlzIGlzIHNpbXBseSBhCitkbmwgIGNvbnZlbmllbnQgd2F5IHRvIGFkZCBMU1lNX1BSRUZJWC4KK2RubAorZG5sICBMU1lNX1BSRUZJWCBtaWdodCBiZSBMJCwgc28gZGVmbigpIG11c3QgYmUgdXNlZCB0byBxdW90ZSBpdCBvciB0aGUgTAorZG5sICB3aWxsIGV4cGFuZCBhZ2FpbiBhcyB0aGUgTCBtYWNybywgbWFraW5nIGFuIGluZmluaXRlIHJlY3Vyc2lvbi4KKworZGVmaW5lKGBMJywKK200X2Fzc2VydF9udW1hcmdzKDEpCitgZGVmbihgTFNZTV9QUkVGSVgnKSQxJykKKworCitkbmwgIFVzYWdlOiBMREVGKG5hbWUpCitkbmwKK2RubCAgR2VuZXJhdGUgYSBkaXJlY3RpdmUgdG8gZGVmaW5lIGEgbG9jYWwgbGFiZWwuCitkbmwKK2RubCAgT24gc3lzdGVtcyB3aXRoIGEgZml4ZWQgc3ludGF4IGZvciBkZWZpbmluZyBsYWJlbHMgdGhlcmUncyBubyBuZWVkIHRvCitkbmwgIHVzZSB0aGlzIG1hY3JvLCBpdCdzIG9ubHkgbWVhbnQgZm9yIHN5c3RlbXMgd2hlcmUgdGhlIHN5bnRheCB2YXJpZXMsCitkbmwgIGxpa2UgaHBwYSB3aGljaCBpcyAiTChmb28pOiIgd2l0aCBnYXMsIGJ1dCBqdXN0ICJMKGZvbykiIGluIGNvbHVtbiAwCitkbmwgIHdpdGggdGhlIHN5c3RlbSBgYXMnLgorZG5sCitkbmwgIFRoZSBleHRyYSBgJyBhZnRlciBMQUJFTF9TVUZGSVggYXZvaWRzIGFueSBjaGFuY2Ugb2YgYSBmb2xsb3dpbmcKK2RubCAgIiguLi4pIiAgYmVpbmcgaW50ZXJwcmV0ZWQgYXMgYW4gYXJndW1lbnQgbGlzdC4gIE5vdCB0aGF0IGl0J2QgYmUKK2RubCAgc2Vuc2libGUgdG8gd3JpdGUgYW55dGhpbmcgbGlrZSB0aGF0IGFmdGVyIGFuIExERUYoKSwgYnV0IGp1c3QgaW4gY2FzZS4KKworZGVmaW5lKExERUYsCittNF9hc3NlcnRfbnVtYXJncygxKQorbTRfYXNzZXJ0X2RlZmluZWQoYExBQkVMX1NVRkZJWCcpCitgTChgJDEnKWAnTEFCRUxfU1VGRklYYCcnKQorCisKK2RubCAgVXNhZ2U6IElOVDMyKGxhYmVsLHZhbHVlKQorZG5sICAgICAgICAgSU5UNjQobGFiZWwsZmlyc3Qsc2Vjb25kKQorCitkZWZpbmUoYElOVDMyJywKK200X2Fzc2VydF9kZWZpbmVkKGBXMzInKQorYAlBTElHTig0KQorTERFRihgJDEnKQorCVczMgkkMicpCisKK2RlZmluZShgSU5UNjQnLAorbTRfYXNzZXJ0X2RlZmluZWQoYFczMicpCitgCUFMSUdOKDgpCitMREVGKGAkMScpCisJVzMyCSQyCisJVzMyCSQzJykKKworCitkbmwgIFVzYWdlOiBBTElHTihieXRlcykKK2RubAorZG5sICBFbWl0IGEgIi5hbGlnbiIgZGlyZWN0aXZlLiAgVGhlIGFsaWdubWVudCBpcyBzcGVjaWZpZWQgaW4gYnl0ZXMsIGFuZAorZG5sICB3aWxsIG5vcm1hbGx5IG5lZWQgdG8gYmUgYSBwb3dlciBvZiAyLiAgVGhlIGFjdHVhbCAiLmFsaWduIiBnZW5lcmF0ZWQKK2RubCAgaXMgZWl0aGVyIGJ5dGVzIG9yIGxvZ2FyaXRobWljIGFjY29yZGluZyB0byB3aGF0IC4vY29uZmlndXJlIGZpbmRzIHRoZQorZG5sICBhc3NlbWJsZXIgbmVlZHMuCitkbmwKK2RubCAgSWYgQUxJR05fRklMTF8weDkwIGlzIGRlZmluZWQgYW5kIGVxdWFsIHRvICJ5ZXMiLCB0aGVuICIsIDB4OTAiIGlzCitkbmwgIGFwcGVuZGVkLiAgVGhpcyBpcyBmb3IgeDg2LCBzZWUgbXBuL3g4Ni9SRUFETUUuCisKK2RlZmluZShBTElHTiwKK200X2Fzc2VydF9udW1hcmdzKDEpCittNF9hc3NlcnRfZGVmaW5lZChgQUxJR05fTE9HQVJJVEhNSUMnKQorYC5hbGlnbglpZmVsc2UoQUxJR05fTE9HQVJJVEhNSUMseWVzLGBtNF9sb2cyKCQxKScsYGV2YWwoJDEpJylkbmwKK2lmZWxzZShBTElHTl9GSUxMXzB4OTAseWVzLGAsIDB4OTAnKScpCisKKworZG5sICBVc2FnZTogTVVMRlVOQ19QUk9MT0dVRShmdW5jdGlvbiBmdW5jdGlvbi4uLikKK2RubAorZG5sICBBIGR1bW15IG1hY3JvIHdoaWNoIGlzIGdyZXBwZWQgZm9yIGJ5IC4vY29uZmlndXJlIHRvIGtub3cgd2hhdAorZG5sICBmdW5jdGlvbnMgYSBtdWx0aS1mdW5jdGlvbiBmaWxlIGlzIHByb3ZpZGluZy4gIFVzZSB0aGlzIGlmIHRoZXJlIGFyZW4ndAorZG5sICBleHBsaWNpdCBQUk9MT0dVRSgpcyBmb3IgZWFjaCBwb3NzaWJsZSBmdW5jdGlvbi4KK2RubAorZG5sICBNdWx0aXBsZSBNVUxGVU5DX1BST0xPR1VFcyBjYW4gYmUgdXNlZCwgb3IganVzdCBvbmUgd2l0aCB0aGUgZnVuY3Rpb24KK2RubCAgbmFtZXMgc2VwYXJhdGVkIGJ5IHNwYWNlcy4KKworZGVmaW5lKGBNVUxGVU5DX1BST0xPR1VFJywKK200X2Fzc2VydF9udW1hcmdzKDEpCispCisKKworZG5sICBVc2FnZTogTkFJTFNfU1VQUE9SVChzcGVjIHNwZWMgLi4uKQorZG5sCitkbmwgIEEgZHVtbXkgbWFjcm8gd2hpY2ggaXMgZ3JlcHBlZCBmb3IgYnkgLi9jb25maWd1cmUgdG8ga25vdyB3aGF0IG5haWxzCitkbmwgIGFyZSBzdXBwb3J0ZWQgaW4gYW4gYXNtIGZpbGUuCitkbmwKK2RubCAgUmFuZ2VzIGNhbiBiZSBnaXZlbiwgb3IganVzdCBpbmRpdmlkdWFsIHZhbHVlcy4gIE11bHRpcGxlIHZhbHVlcyBvcgorZG5sICByYW5nZXMgY2FuIGJlIGdpdmVuLCBzZXBhcmF0ZWQgYnkgc3BhY2VzLiAgTXVsdGlwbGUgTkFJTFNfU1VQUE9SVAorZG5sICBkZWNsYXJhdGlvbnMgd29yayB0b28uICBTb21lIGV4YW1wbGVzLAorZG5sCitkbmwgICAgICAgICBOQUlMU19TVVBQT1JUKDEtMjApCitkbmwgICAgICAgICBOQUlMU19TVVBQT1JUKDEgNiA5LTEyKQorZG5sICAgICAgICAgTkFJTFNfU1VQUE9SVCgxLTEwIDE2LTIwKQorCitkZWZpbmUoTkFJTFNfU1VQUE9SVCwKK200X2Fzc2VydF9udW1hcmdzKDEpCispCisKKworZG5sICBVc2FnZTogQUJJX1NVUFBPUlQoYWJpKQorZG5sCitkbmwgIEEgZHVtbXkgbWFjcm8gd2hpY2ggaXMgZ3JlcHBlZCBmb3IgYnkgLi9jb25maWd1cmUgdG8ga25vdyB3aGF0IEFCSXMKK2RubCAgYXJlIHN1cHBvcnRlZCBpbiBhbiBhc20gZmlsZS4KK2RubAorZG5sICBJZiBtdWx0aXBsZSBub24tc3RhbmRhcmQgQUJJcyBhcmUgc3VwcG9ydGVkLCBzZXZlcmFsIEFCSV9TVVBQT1JUCitkbmwgIGRlY2xhcmF0aW9ucyBzaG91bGQgYmUgdXNlZDoKK2RubAorZG5sICAgICAgICAgQUJJX1NVUFBPUlQoRk9PQUJJKQorZG5sICAgICAgICAgQUJJX1NVUFBPUlQoQkFSQUJJKQorCitkZWZpbmUoQUJJX1NVUFBPUlQsCittNF9hc3NlcnRfbnVtYXJncygxKQorKQorCisKK2RubCAgVXNhZ2U6IEdNUF9OVU1CX01BU0sKK2RubAorZG5sICBBIGJpdCBtYXNrIGZvciB0aGUgbnVtYmVyIHBhcnQgb2YgYSBsaW1iLiAgRWcuIHdpdGggNiBiaXQgbmFpbHMgaW4gYQorZG5sICAzMiBiaXQgbGltYiwgR01QX05VTUJfTUFTSyB3b3VsZCBiZSAweDNmZmZmZmYuCisKK2RlZmluZShHTVBfTlVNQl9NQVNLLAorbTRfYXNzZXJ0X251bWFyZ3MoLTEpCittNF9hc3NlcnRfZGVmaW5lZChgR01QX05VTUJfQklUUycpCitgbTRfaGV4X2xvd21hc2soR01QX05VTUJfQklUUyknKQorCisKK2RubCAgVXNhZ2U6IG00YXBwZW5kKGB2YXJpYWJsZScsYHZhbHVlLXRvLWFwcGVuZCcpCisKK2RlZmluZShgbTRhcHBlbmQnLAorYGRlZmluZShgJDEnLCAgZGVmbihgJDEnKWAkMicpCisnCispCisKK2RpdmVydGAnZG5sCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2NwcC1jY2FzIGIvdGhpcmRfcGFydHkvZ21wL21wbi9jcHAtY2NhcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNWY3Y2RjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9jcHAtY2NhcwpAQCAtMCwwICsxLDExOCBAQAorIyEvYmluL3NoCisjCisjIEEgaGVscGVyIHNjcmlwdCBmb3IgTWFrZWFzbS5hbSAuUy5sbyBydWxlLgorCisjIENvcHlyaWdodCAyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorIworIyAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisjCisjICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyMgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorIyAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjICBvcgorIworIyAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyAgICAgIGxhdGVyIHZlcnNpb24uCisjCisjICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorIworIyAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyAgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKKyMgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKKyMgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCisjIFVzYWdlOiBjcHAtY2MgLS1jcHA9Q1BQIENDIC4uLiBmaWxlLlMgLi4uCisjCisjIFByb2Nlc3MgZmlsZS5TIHdpdGggdGhlIGdpdmVuIENQUCBjb21tYW5kIHBsdXMgYW55IC1EIG9wdGlvbnMgaW4gdGhlCisjIHJlc3Qgb2YgdGhlIGFyZ3VtZW50cywgdGhlbiBhc3NlbWJsZSB3aXRoIHRoZSBnaXZlbiBDQyBwbHVzIGFsbAorIyBhcmd1bWVudHMuCisjCisjIFRoZSBDUFAgY29tbWFuZCBtdXN0IGJlIGluIGEgc2luZ2xlIC0tY3BwPSBhcmd1bWVudCwgYW5kIHdpbGwgYmUKKyMgc3BsaXQgb24gd2hpdGVzcGFjZS4gIEl0IHNob3VsZCBpbmNsdWRlIC1JIG9wdGlvbnMgcmVxdWlyZWQuCisjCisjIFdoZW4gQ0MgaXMgaW52b2tlZCwgZmlsZS5TIGlzIHJlcGxhY2VkIHdpdGggYSB0ZW1wb3JhcnkgLnMgZmlsZQorIyB3aGljaCBpcyB0aGUgQ1BQIG91dHB1dC4KKyMKKyMgQW55IGxpbmVzIHN0YXJ0aW5nIHdpdGggIiMiIGFyZSByZW1vdmVkIGZyb20gdGhlIENQUCBvdXRwdXQsIHVzdWFsbHkKKyMgdGhlc2Ugd2lsbCBiZSAjbGluZSBhbmQgI2ZpbGUgbWFya2VycyBmcm9tIENQUCwgYnV0IHRoZXkgbWlnaHQgYWxzbworIyBiZSBjb21tZW50cyBmcm9tIHRoZSAuUy4KKyMKKyMgVG8gYWxsb3cgcGFyYWxsZWwgYnVpbGRzLCB0aGUgdGVtcCBmaWxlIG5hbWUgaXMgYmFzZWQgb24gdGhlIC5TIGZpbGUKKyMgbmFtZSwgd2hpY2ggd2lsbCBiZSB0aGUgb3V0cHV0IG9iamVjdCBmaWxlbmFtZSBmb3IgYWxsIHVzZXMgd2UgcHV0CisjIHRoaXMgc2NyaXB0IHRvLgorCitDUFA9CitDUFBERUZTPQorQ0M9CitTPQorU0VFTl9PPW5vCisKK2ZvciBpIGluICIkQCI7IGRvCisgIGNhc2UgJGkgaW4KKyAgICAtLWNwcD0qKQorICAgICAgQ1BQPWBlY2hvICIkaSIgfCBzZWQgJ3MvXi0tY3BwPS8vJ2AKKyAgICAgIDs7CisgICAgLUQqKQorICAgICAgQ1BQREVGUz0iJENQUERFRlMgJGkiCisgICAgICBDQz0iJENDICRpIgorICAgICAgOzsKKyAgICAqLlMpCisgICAgICBpZiB0ZXN0IC1uICIkUyI7IHRoZW4KKyAgICAgICAgZWNobyAiT25seSBvbmUgLlMgZmlsZSBwZXJtaXR0ZWQiCisgICAgICAgIGV4aXQgMQorICAgICAgZmkKKyAgICAgIEJBU0VOQU1FPWBlY2hvICIkaSIgfCBzZWQgLWUgJ3MvXC5TJC8vJyAtZSAncy9eLipbXFwvOl0vLydgCisgICAgICBTPSRpCisgICAgICBUTVBfST10bXAtJEJBU0VOQU1FLmkKKyAgICAgIFRNUF9TPXRtcC0kQkFTRU5BTUUucworICAgICAgQ0M9IiRDQyAkVE1QX1MiCisgICAgICA7OworICAgIC1vKQorICAgICAgU0VFTl9PPXllcworICAgICAgQ0M9IiRDQyAkaSIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIENDPSIkQ0MgJGkiCisgICAgICA7OworICBlc2FjCitkb25lCisKK2lmIHRlc3QgLXogIiRDUFAiOyB0aGVuCisgIGVjaG8gIk5vIC0tY3BwIHNwZWNpZmllZCIKKyAgZXhpdCAxCitmaQorCitpZiB0ZXN0IC16ICIkUyI7IHRoZW4KKyAgZWNobyAiTm8gLlMgc3BlY2lmaWVkIgorICBleGl0IDEKK2ZpCisKKyMgTGlidG9vbCBhZGRzIGl0J3Mgb3duIC1vIHdoZW4gc2VuZGluZyBvdXRwdXQgdG8gLmxpYnMvZm9vLm8sIGJ1dCBub3QKKyMgd2hlbiBqdXN0IHdhbnRpbmcgZm9vLm8gaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgV2UgbmVlZCBhbgorIyBleHBsaWNpdCAtbyBpbiBib3RoIGNhc2VzIHNpbmNlIHdlJ3JlIGFzc2VtYmxpbmcgdG1wLWZvby5zLgorIworaWYgdGVzdCAkU0VFTl9PID0gbm87IHRoZW4KKyAgQ0M9IiRDQyAtbyAkQkFTRU5BTUUubyIKK2ZpCisKK2VjaG8gIiRDUFAgJENQUERFRlMgJFMgPiRUTVBfSSIKKyRDUFAgJENQUERFRlMgJFMgPiRUTVBfSSB8fCBleGl0CisKK2VjaG8gImdyZXAgLXYgJ14jJyAkVE1QX0kgPiRUTVBfUyIKK2dyZXAgLXYgJ14jJyAkVE1QX0kgPiRUTVBfUworCitlY2hvICIkQ0MiCiskQ0MgfHwgZXhpdAorCisjIENvbW1lbnQgdGhpcyBvdXQgdG8gcHJlc2VydmUgLnMgaW50ZXJtZWRpYXRlcworcm0gLWYgJFRNUApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9jcmF5L1JFQURNRSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vY3JheS9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EzNDdkMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vY3JheS9SRUFETUUKQEAgLTAsMCArMSwxMjEgQEAKK0NvcHlyaWdodCAyMDAwLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCisKKworCisKK1RoZSBjb2RlIGluIHRoaXMgZGlyZWN0b3J5IHdvcmtzIGZvciBDcmF5IHZlY3RvciBzeXN0ZW1zIHN1Y2ggYXMgQzkwLAorSjkwLCBUOTAgKGJvdGggdGhlIENGUCB2YXJpYW50IGFuZCB0aGUgSUVFRSB2YXJpYW50KSBhbmQgU1YxLiAgKEZvcgordGhlIFQzRSBhbmQgVDNEIHN5c3RlbXMsIHNlZSB0aGUgYGFscGhhJyBzdWJkaXJlY3RvcnkgYXQgdGhlIHNhbWUKK2xldmVsIGFzIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGlzIGZpbGUuKQorCitUaGUgY2ZwIHN1YmRpcmVjdG9yeSBpcyBmb3Igc3lzdGVtcyB1dGlsaXppbmcgdGhlIHRyYWRpdGlvbmFsIENyYXkKK2Zsb2F0aW5nLXBvaW50IGZvcm1hdCwgYW5kIHRoZSBpZWVlIHN1YmRpcmVjdG9yeSBpcyBmb3IgdGhlIG5ld2VyCitzeXN0ZW1zIHRoYXQgdXNlIHRoZSBJRUVFIGZsb2F0aW5nLXBvaW50IGZvcm1hdC4KKworVGhlcmUgYXJlIHNldmVyYWwgaXNzdWVzIHRoYXQgcmVkdWNlcyBzcGVlZCBvbiBDcmF5IHN5c3RlbXMuICBGb3IKK3N5c3RlbXMgd2l0aCBjZnAgZmxvYXRpbmcgcG9pbnQsIHRoZSBtYWluIG9ic3RhY2xlIGlzIHRoZSBmb3JtaW5nIG9mCisxMjgtYml0IHByb2R1Y3RzLiAgRm9yIElFRUUgc3lzdGVtcywgYWRkaW5nLCBhbmQgaW4gcGFydGljdWxhcgorY29tcHV0aW5nIGNhcnJ5IGlzIHRoZSBtYWluIGlzc3VlLiAgVGhlcmUgYXJlIG5vIHZlY3Rvcml6aW5nCit1bnNpZ25lZC1sZXNzLXRoYW4gaW5zdHJ1Y3Rpb25zLCBhbmQgdGhlIHNlcXVlbmNlIHRoYXQgaW1wbGVtZW50IHRoYXQKK29wZXJhdGlvbiBpcyB2ZXJ5IGxvbmcuCisKK1NoaWZ0aW5nIGlzIHRoZSBvbmx5IG9wZXJhdGlvbiB0aGF0IGlzIHNpbXBsZSB0byBtYWtlIGZhc3QuICBBbGwgQ3JheQorc3lzdGVtcyBoYXZlIGEgYml0Ymx0IGluc3RydWN0aW9ucyAoVmkgVmosVmo8QWsgYW5kIFZpIFZqLFZqPkFrKSB0aGF0CitzaG91bGQgYmUgcmVhbGx5IHVzZWZ1bC4KKworRm9yIGJlc3Qgc3BlZWQgZm9yIGNmcCBzeXN0ZW1zLCB3ZSBuZWVkIGEgbXVsX2Jhc2VjYXNlLCBzaW5jZSB0aGF0CityZWR1Y2VzIHRoZSBuZWVkIGZvciBjYXJyeSBwcm9wYWdhdGlvbiB0byBhIG1pbmltdW0uICBEZXBlbmRpbmcgb24gdGhlCitzaXplICh2bikgb2YgdGhlIHNtYWxsZXIgb2YgdGhlIHR3byBvcGVyYW5kcyAoViksIHdlIHNob3VsZCBzcGxpdCBVIGFuZCBWCitpbiBkaWZmZXJlbnQgY2h1bmsgc2l6ZXM6CisKK1Ugc3BsaXQgaW4gMiAzMi1iaXQgcGFydHMKK1Ygc3BsaXQgYWNjb3JkaW5nIHRvIHRoZSB0YWJsZToKK3BhcnRzCQkJNAk1CTYJNwk4CitiaXRzL3BhcnQJCTE2CTEzCTExCTEwCTgKK21heCBhbGxvd2VkIHZuCQkxCTgJMzIJNjQJMjU2CitudW1iZXIgb2YgbXVsdGlwbGllcwk4CTEwCTEyCTE0CTE2CitwZWFrIGN5Y2xlcy9saW1iCTQJNQk2CTcJOAorCitVIHNwbGl0IGluIDMgMjItYml0IHBhcnRzCitWIHNwbGl0IGFjY29yZGluZyB0byB0aGUgdGFibGU6CitwYXJ0cwkJCTMJNAk1CitiaXRzL3BhcnQJCTIyCTE2CTEzCittYXggYWxsb3dlZCB2bgkJMTYJMTAyNAk4MTkyCitudW1iZXIgb2YgbXVsdGlwbGllcwk5CTEyCTE1CitwZWFrIGN5Y2xlcy9saW1iCTQuNQk2CTcuNQorCitVIHNwbGl0IGluIDQgMTYtYml0IHBhcnRzCitWIHNwbGl0IGFjY29yZGluZyB0byB0aGUgdGFibGU6CitwYXJ0cwkJCTQKK2JpdHMvcGFydAkJMTYKK21heCBhbGxvd2VkIHZuCQk2NTUzNgorbnVtYmVyIG9mIG11bHRpcGxpZXMJMTYKK3BlYWsgY3ljbGVzL2xpbWIJOAorCisoQSBUOTAgQ1BVIGNhbiBhY2N1bXVsYXRlIHR3byBwcm9kdWN0cyBwZXIgY3ljbGUuKQorCitJREVBOgorKiBSZXdyaXRlIG1wbl9hZGRfbjoKKyAgICBzaG9ydCBjeVtuICsgMV07CisgICAgI3ByYWdtYSBfQ1JJIGl2ZGVwCisgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCXsgcyA9IHVwW2ldICsgdnBbaV07CisJICBycFtpXSA9IHM7CisJICBjeVtpICsgMV0gPSBzIDwgdXBbaV07IH0KKyAgICAgIG1vcmVfY2FycmllcyA9IDA7CisgICAgI3ByYWdtYSBfQ1JJIGl2ZGVwCisgICAgICBmb3IgKGkgPSAxOyBpIDwgbjsgaSsrKQorCXsgcyA9IHJwW2ldICsgY3lbaV07CisJICBycFtpXSA9IHM7CisJICBtb3JlX2NhcnJpZXMgKz0gcyA8IGN5W2ldOyB9CisgICAgICBjeXMgPSAwOworICAgICAgaWYgKG1vcmVfY2FycmllcykKKwl7CisJICBjeXMgPSBycFsxXSA8IGN5WzFdOworCSAgZm9yIChpID0gMjsgaSA8IG47IGkrKykKKwkgICAgeyBycFtpXSArPSBjeXM7CisJICAgICAgY3lzID0gcnBbaV0gPCBjeXM7IH0KKwl9CisgICAgICByZXR1cm4gY3lzICsgY3lbbl07CisKKyogV3JpdGUgbXBuX2FkZDNfbiBmb3IgYWRkaW5nIHRocmVlIG9wZXJhbmRzLiAgRmlyc3QgYWRkIG9wZXJhbmRzIDEKKyAgYW5kIDIsIGFuZCBnZW5lcmF0ZSBjeVtdLiAgVGhlbiBhZGQgb3BlcmFuZCAzIHRvIHRoZSBwYXJ0aWFsIHJlc3VsdCwKKyAgYW5kIGFjY3VtdWxhdGUgY2FycnkgaW50byBjeVtdLiAgRmluYWxseSBwcm9wYWdhdGUgY2FycnkganVzdCBsaWtlCisgIGluIHRoZSBuZXcgbXBuX2FkZF9uLgorCitJREVBOgorCitTdG9yZSBmZXdlciBiaXRzLCBwZXJoYXBzIDYyLCBwZXIgbGltYi4gIFRoYXQgYnJpbmdzIG1wbl9hZGRfbiB0aW1lCitkb3duIHRvIDIuNSBjeWNsZXMvbGltYiBhbmQgbXBuX2FkZG11bF8xIHRpbWVzIHRvIDQgY3ljbGVzL2xpbWIuICBCeQorc3RvcmluZyBldmVuIGZld2VyIGJpdHMgcGVyIGxpbWIsIHBlcmhhcHMgNTYsIGl0IHdvdWxkIGJlIHBvc3NpYmxlIHRvCit3cml0ZSBhIG11bF9tdWxfYmFzZWNhc2UgdGhhdCB3b3VsZCBydW4gYXQgZWZmZWN0aXZlbHkgMSBjeWNsZS9saW1iLgorKFVzZSBWTSBoZXJlIHRvIGJldHRlciBoYW5kbGUgdGhlIHJvbWItc2hhcGVkIG11bHRpcGx5IGFyZWEsIHBlcmhhcHMKK3JvdW5kaW5nIG9wZXJhbmQgc2l6ZXMgdXAgdG8gdGhlIG5leHQgcG93ZXIgb2YgMi4pCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2NyYXkvYWRkX24uYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vY3JheS9hZGRfbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNDkxNTkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2NyYXkvYWRkX24uYwpAQCAtMCwwICsxLDkwIEBACisvKiBDcmF5IFBWUCBtcG5fYWRkX24gLS0gYWRkIHR3byBsaW1iIHZlY3RvcnMgYW5kIHN0b3JlIHRoZWlyIHN1bSBpbiBhIHRoaXJkCisgICBsaW1iIHZlY3Rvci4KKworQ29weXJpZ2h0IDE5OTYsIDIwMDAsIDIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKy8qIFRoaXMgY29kZSBydW5zIGF0IDQgY3ljbGVzL2xpbWIuICBJdCBtYXkgYmUgcG9zc2libGUgdG8gYnJpbmcgaXQgZG93bgorICAgdG8gMyBjeWNsZXMvbGltYi4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCittcF9saW1iX3QKK21wbl9hZGRfbiAobXBfcHRyIHJwLCBtcF9zcmNwdHIgdXAsIG1wX3NyY3B0ciB2cCwgbXBfc2l6ZV90IG4pCit7CisgIG1wX2xpbWJfdCBjeVtuXTsKKyAgbXBfbGltYl90IGEsIGIsIHIsIHMwLCBjMCwgYzE7CisgIG1wX3NpemVfdCBpOworICBpbnQgbW9yZV9jYXJyaWVzOworCisgIC8qIE1haW4gYWRkIGxvb3AuICBHZW5lcmF0ZSBhIHJhdyBvdXRwdXQgc3VtIGluIHJwW10gYW5kIGEgY2FycnkgdmVjdG9yCisgICAgIGluIGN5W10uICAqLworI3ByYWdtYSBfQ1JJIGl2ZGVwCisgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisgICAgeworICAgICAgYSA9IHVwW2ldOworICAgICAgYiA9IHZwW2ldOworICAgICAgczAgPSBhICsgYjsKKyAgICAgIHJwW2ldID0gczA7CisgICAgICBjMCA9ICgoYSAmIGIpIHwgKChhIHwgYikgJiB+czApKSA+PiA2MzsKKyAgICAgIGN5W2ldID0gYzA7CisgICAgfQorICAvKiBDYXJyeSBhZGQgbG9vcC4gIEFkZCB0aGUgY2FycnkgdmVjdG9yIGN5W10gdG8gdGhlIHJhdyBzdW0gcnBbXSBhbmQKKyAgICAgc3RvcmUgdGhlIG5ldyBzdW0gYmFjayB0byBycFswXS4gIElmIHRoaXMgZ2VuZXJhdGVzIGZ1cnRoZXIgY2FycnksIHNldAorICAgICBtb3JlX2NhcnJpZXMuICAqLworICBtb3JlX2NhcnJpZXMgPSAwOworI3ByYWdtYSBfQ1JJIGl2ZGVwCisgIGZvciAoaSA9IDE7IGkgPCBuOyBpKyspCisgICAgeworICAgICAgciA9IHJwW2ldOworICAgICAgYzAgPSBjeVtpIC0gMV07CisgICAgICBzMCA9IHIgKyBjMDsKKyAgICAgIHJwW2ldID0gczA7CisgICAgICBjMCA9IChyICYgfnMwKSA+PiA2MzsKKyAgICAgIG1vcmVfY2FycmllcyArPSBjMDsKKyAgICB9CisgIC8qIElmIHRoYXQgc2Vjb25kIGxvb3AgZ2VuZXJhdGVkIGNhcnJ5LCBoYW5kbGUgdGhhdCBpbiBzY2FsYXIgbG9vcC4gICovCisgIGlmIChtb3JlX2NhcnJpZXMpCisgICAgeworICAgICAgbXBfbGltYl90IGN5cmVjID0gMDsKKyAgICAgIC8qIExvb2sgZm9yIHBsYWNlcyB3aGVyZSBycFtrXSBpcyB6ZXJvIGFuZCBjeVtrLTFdIGlzIG5vbi16ZXJvLgorCSBUaGVzZSBhcmUgd2hlcmUgd2UgZ290IGEgcmVjdXJyZW5jeSBjYXJyeS4gICovCisgICAgICBmb3IgKGkgPSAxOyBpIDwgbjsgaSsrKQorCXsKKwkgIHIgPSBycFtpXTsKKwkgIGMwID0gKHIgPT0gMCAmJiBjeVtpIC0gMV0gIT0gMCk7CisJICBzMCA9IHIgKyBjeXJlYzsKKwkgIHJwW2ldID0gczA7CisJICBjMSA9IChyICYgfnMwKSA+PiA2MzsKKwkgIGN5cmVjID0gYzAgfCBjMTsKKwl9CisgICAgICByZXR1cm4gY3lyZWMgfCBjeVtuIC0gMV07CisgICAgfQorCisgIHJldHVybiBjeVtuIC0gMV07Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2NyYXkvY2ZwL2FkZG11bF8xLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2NyYXkvY2ZwL2FkZG11bF8xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM3ZjM4MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vY3JheS9jZnAvYWRkbXVsXzEuYwpAQCAtMCwwICsxLDQ4IEBACisvKiBtcG5fYWRkbXVsXzEgZm9yIENyYXkgUFZQLgorCitDb3B5cmlnaHQgMTk5NiwgMjAwMCwgMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworbXBfbGltYl90CittcG5fYWRkbXVsXzEgKG1wX3B0ciBycCwgbXBfc3JjcHRyIHVwLCBtcF9zaXplX3QgbiwgbXBfbGltYl90IGxpbWIpCit7CisgIG1wX2xpbWJfdCBwMFtuXSwgcDFbbl0sIHRwW25dOworICBtcF9saW1iX3QgY3lfbGltYjsKKworICBHTVBOX01VTFdXIChwMSwgcDAsIHVwLCAmbiwgJmxpbWIpOworICBjeV9saW1iID0gbXBuX2FkZF9uICh0cCwgcnAsIHAwLCBuKTsKKyAgcnBbMF0gPSB0cFswXTsKKyAgaWYgKG4gIT0gMSkKKyAgICBjeV9saW1iICs9IG1wbl9hZGRfbiAocnAgKyAxLCB0cCArIDEsIHAxLCBuIC0gMSk7CisgIGN5X2xpbWIgKz0gcDFbbiAtIDFdOworCisgIHJldHVybiBjeV9saW1iOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9jcmF5L2NmcC9tdWxfMS5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9jcmF5L2NmcC9tdWxfMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzYTZhMDUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2NyYXkvY2ZwL211bF8xLmMKQEAgLTAsMCArMSw0NyBAQAorLyogbXBuX211bF8xIGZvciBDcmF5IFBWUC4KKworQ29weXJpZ2h0IDE5OTYsIDIwMDAsIDIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisKK21wX2xpbWJfdAorbXBuX211bF8xIChtcF9wdHIgcnAsIG1wX3NyY3B0ciB1cCwgbXBfc2l6ZV90IG4sIG1wX2xpbWJfdCBsaW1iKQoreworICBtcF9saW1iX3QgcDBbbl0sIHAxW25dOworICBtcF9saW1iX3QgY3lfbGltYjsKKworICBHTVBOX01VTFdXIChwMSwgcDAsIHVwLCAmbiwgJmxpbWIpOworICBycFswXSA9IHAwWzBdOworICBjeV9saW1iID0gcDFbbiAtIDFdOworICBpZiAobiAhPSAxKQorICAgIGN5X2xpbWIgKz0gbXBuX2FkZF9uIChycCArIDEsIHAwICsgMSwgcDEsIG4gLSAxKTsKKworICByZXR1cm4gY3lfbGltYjsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vY3JheS9jZnAvbXVsd3djOTAucyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vY3JheS9jZnAvbXVsd3djOTAucwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWQyMjg1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9jcmF5L2NmcC9tdWx3d2M5MC5zCkBAIC0wLDAgKzEsMjU0IEBACisqICAgIEhlbHBlciBmb3IgbXBuX211bF8xLCBtcG5fYWRkbXVsXzEsIGFuZCBtcG5fc3VibXVsXzEgZm9yIENyYXkgUFZQLgorCisqICAgIENvcHlyaWdodCAxOTk2LCAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKiAgICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGZyb20gbXVsd3cuZiBpbiB0aGlzIHNhbWUgZGlyZWN0b3J5LgorCisqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisqCisqICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKyoKKyogICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorKiAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisqICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyoKKyogIG9yCisqCisqICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorKiAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisqICAgICAgbGF0ZXIgdmVyc2lvbi4KKyoKKyogIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisqCisqICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisqICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorKiAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisqICBmb3IgbW9yZSBkZXRhaWxzLgorKgorKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorKiAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorKiAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisgICAgICAgICAgICBJREVOVCAgICAgICAgICAgR01QTl9NVUxXVworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgIEFzc2VtYmxlIHdpdGggQ2FsIFZlcnNpb24gMi4wICAgICAgICAgKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiBHZW5lcmF0ZWQgYnkgQ0ZUNzcgICA2LjAuNC4xOSAgICAgICAgICAgICAgKgorKiAgICAgICAgICAgb24gMDYvMjcvMDAgYXQgMDQ6MzQ6MTMgICAgICAgICAgKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBBTExPVyBVTkRFUlNDT1JFUyBJTiBJREVOVElGSUVSUworICAgICAgICAgICAgRURJVCAgICAgICAgICAgIE9GRgorICAgICAgICAgICAgRk9STUFUICAgICAgICAgIE5FVworQERBVEEgICAgICAgU0VDVElPTiAgICAgICAgIERBVEEsQ00KK0BEQVRBICAgICAgID0gICAgICAgICAgICAgICBXLioKKyAgICAgICAgICAgIENPTiAgICAgICAgICAgICBPJzAwMDAwMDAwMDAwNDAwMDAwMDAwMDAKKyAgICAgICAgICAgIENPTiAgICAgICAgICAgICBPJzA0MzUxNTI0MDQ3MTM3MjMyNTI1MTQKKyAgICAgICAgICAgIENPTiAgICAgICAgICAgICBPJzA1MzUyNzAwMDAwMDAwMDAwMDAwMDAKKyAgICAgICAgICAgIENPTiAgICAgICAgICAgICBPJzAwMDAwMDAwMDAwMDAwMDEyMDAwMTIKKyAgICAgICAgICAgIFZXRCAgICAgICAgICAgICAzMi8wLDMyL1AuR01QTl9NVUxXVworICAgICAgICAgICAgQ09OICAgICAgICAgICAgIE8nMDAxNDAwMzAwMDAwMDAwMDAwMTQxNgorICAgICAgICAgICAgQ09OICAgICAgICAgICAgIE8nMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQorICAgICAgICAgICAgQ09OICAgICAgICAgICAgIE8nMDAwMDAwMDAwMDAwMDAwMDAwMDIxNQorICAgICAgICAgICAgQlNTWiAgICAgICAgICAgIDEKK0BDT0RFICAgICAgIFNFQ1RJT04gICAgICAgICBDT0RFCitAQ09ERSAgICAgICA9ICAgICAgICAgICAgICAgUC4qCitMMyAgICAgICAgICA9ICAgICAgICAgICAgICAgUC4qCisgICAgICAgICAgICBBMCAgICAgICAgICAgICAgQTYKKyAgICAgICAgICAgIEE1ICAgICAgICAgICAgICA2CisgICAgICAgICAgICBCMDMsQTUgICAgICAgICAgMCxBMAorICAgICAgICAgICAgQTAgICAgICAgICAgICAgIEExK0EyCisgICAgICAgICAgICBBNSAgICAgICAgICAgICAgMQorICAgICAgICAgICAgMCxBMCAgICAgICAgICAgIFQwMCxBNQorICAgICAgICAgICAgQjAyICAgICAgICAgICAgIEEyCisgICAgICAgICAgICBCNjYgICAgICAgICAgICAgQTMKKyAgICAgICAgICAgIEIwMSAgICAgICAgICAgICBBNgorICAgICAgICAgICAgQTcgICAgICAgICAgICAgIFAuTDQKKyAgICAgICAgICAgIEIwMCAgICAgICAgICAgICBBNworICAgICAgICAgICAgQTYgICAgICAgICAgICAgIEBEQVRBCisgICAgICAgICAgICBKICAgICAgICAgICAgICAgJFNUS09GRU4KK0dNUE5fTVVMV1cgID0gICAgICAgICAgICAgICBQLioKKyAgICAgICAgICAgIEEwICAgICAgICAgICAgICBAREFUQSszCisgICAgICAgICAgICBCNzcgICAgICAgICAgICAgQTAKKyAgICAgICAgICAgIEExICAgICAgICAgICAgICAxMworICAgICAgICAgICAgQTAgICAgICAgICAgICAgIEI2NgorICAgICAgICAgICAgQTIgICAgICAgICAgICAgIEI2NgorICAgICAgICAgICAgQTQgICAgICAgICAgICAgIEI2NworICAgICAgICAgICAgMCxBMCAgICAgICAgICAgIEI3NyxBMQorICAgICAgICAgICAgQTcgICAgICAgICAgICAgIDc4MgorICAgICAgICAgICAgQTMgICAgICAgICAgICAgIEEyK0E3CisgICAgICAgICAgICBBMCAgICAgICAgICAgICAgQTQtQTMKKyAgICAgICAgICAgIEpBTSAgICAgICAgICAgICBMMworICAgICAgICAgICAgQTAgICAgICAgICAgICAgIEE2CisgICAgICAgICAgICBBNSAgICAgICAgICAgICAgNgorICAgICAgICAgICAgQjAzLEE1ICAgICAgICAgIDAsQTAKKyAgICAgICAgICAgIEEwICAgICAgICAgICAgICBBMStBMgorICAgICAgICAgICAgQTUgICAgICAgICAgICAgIDEKKyAgICAgICAgICAgIDAsQTAgICAgICAgICAgICBUMDAsQTUKKyAgICAgICAgICAgIEIwMiAgICAgICAgICAgICBBMgorICAgICAgICAgICAgQjY2ICAgICAgICAgICAgIEEzCisgICAgICAgICAgICBCMDEgICAgICAgICAgICAgQTYKK0w0ICAgICAgICAgID0gICAgICAgICAgICAgICBQLioKKyAgICAgICAgICAgIEE3ICAgICAgICAgICAgICBCMDcKKyAgICAgICAgICAgIFM3ICAgICAgICAgICAgICAwLEE3CisgICAgICAgICAgICBBNiAgICAgICAgICAgICAgQjEwCisgICAgICAgICAgICBTNiAgICAgICAgICAgICAgMCxBNgorICAgICAgICAgICAgUzUgICAgICAgICAgICAgIDEKKyAgICAgICAgICAgIFM0ICAgICAgICAgICAgICA8MjIKKyAgICAgICAgICAgIFM3ICAgICAgICAgICAgICBTNy1TNQorICAgICAgICAgICAgUzUgICAgICAgICAgICAgICNTNworICAgICAgICAgICAgVDAwICAgICAgICAgICAgIFM2CisgICAgICAgICAgICBTNiAgICAgICAgICAgICAgUzY+MjIKKyAgICAgICAgICAgIFM3ICAgICAgICAgICAgICBUMDAKKyAgICAgICAgICAgIFM3ICAgICAgICAgICAgICBTNz40NAorICAgICAgICAgICAgUzMgICAgICAgICAgICAgIFQwMAorICAgICAgICAgICAgUzMgICAgICAgICAgICAgIFMzJlM0CisgICAgICAgICAgICBTNiAgICAgICAgICAgICAgUzYmUzQKKyAgICAgICAgICAgIFM3ICAgICAgICAgICAgICBTNyZTNAorICAgICAgICAgICAgUzMgICAgICAgICAgICAgIFMzPDI0CisgICAgICAgICAgICBTNiAgICAgICAgICAgICAgUzY8MjQKKyAgICAgICAgICAgIFM3ICAgICAgICAgICAgICBTNzwyNAorICAgICAgICAgICAgUzAgICAgICAgICAgICAgIFM1CisgICAgICAgICAgICBTNCAgICAgICAgICAgICAgUzUKKyAgICAgICAgICAgIFMxICAgICAgICAgICAgICBTNgorICAgICAgICAgICAgUzIgICAgICAgICAgICAgIFMzCisgICAgICAgICAgICBTMyAgICAgICAgICAgICAgUzcKKyAgICAgICAgICAgIEpTUCAgICAgICAgICAgICBMNQorTDYgICAgICAgICAgPSAgICAgICAgICAgICAgIFAuKgorICAgICAgICAgICAgUzcgICAgICAgICAgICAgIC1TNAorICAgICAgICAgICAgQTIgICAgICAgICAgICAgIFM3CisgICAgICAgICAgICBWTCAgICAgICAgICAgICAgQTIKKyAgICAgICAgICAgIEEzICAgICAgICAgICAgICBCMDYKKyAgICAgICAgICAgIEE1ICAgICAgICAgICAgICBCMDUKKyAgICAgICAgICAgIEE0ICAgICAgICAgICAgICBCMDQKKyAgICAgICAgICAgIEExICAgICAgICAgICAgICBWTAorICAgICAgICAgICAgQTIgICAgICAgICAgICAgIFM0CitMNyAgICAgICAgICA9ICAgICAgICAgICAgICAgUC4qCisgICAgICAgICAgICBBMCAgICAgICAgICAgICAgQTMKKyAgICAgICAgICAgIFZMICAgICAgICAgICAgICBBMQorICAgICAgICAgICAgVjcgICAgICAgICAgICAgICxBMCwxCisgICAgICAgICAgICBCMTEgICAgICAgICAgICAgQTUKKyAgICAgICAgICAgIEE3ICAgICAgICAgICAgICAyMgorICAgICAgICAgICAgQjEyICAgICAgICAgICAgIEE0CisgICAgICAgICAgICBWNiAgICAgICAgICAgICAgVjc+QTcKKyAgICAgICAgICAgIEIxMyAgICAgICAgICAgICBBMworICAgICAgICAgICAgUzcgICAgICAgICAgICAgIDwyMgorICAgICAgICAgICAgQTMgICAgICAgICAgICAgIEIwMgorICAgICAgICAgICAgVjUgICAgICAgICAgICAgIFM3JlY2CisgICAgICAgICAgICBBNiAgICAgICAgICAgICAgMjQKKyAgICAgICAgICAgIFY0ICAgICAgICAgICAgICBWNTxBNgorICAgICAgICAgICAgVjMgICAgICAgICAgICAgIFMxKkZWNAorICAgICAgICAgICAgVjIgICAgICAgICAgICAgIFM3JlY3CisgICAgICAgICAgICBWMSAgICAgICAgICAgICAgVjI8QTYKKyAgICAgICAgICAgIFYwICAgICAgICAgICAgICBTMypGVjEKKyAgICAgICAgICAgIFY2ICAgICAgICAgICAgICBWMCtWMworICAgICAgICAgICAgQTUgICAgICAgICAgICAgIDQ0CisgICAgICAgICAgICBWNSAgICAgICAgICAgICAgVjc+QTUKKyAgICAgICAgICAgIFYyICAgICAgICAgICAgICBTMSpGVjEKKyAgICAgICAgICAgIFYzICAgICAgICAgICAgICBTNyZWNQorICAgICAgICAgICAgQTAgICAgICAgICAgICAgIDE0CisgICAgICAgICAgICBCNzcgICAgICAgICAgICAgQTAKKyAgICAgICAgICAgIEE0ICAgICAgICAgICAgICBCNzcKKyAgICAgICAgICAgIEEwICAgICAgICAgICAgICBBNCtBMworICAgICAgICAgICAgLEEwLDEgICAgICAgICAgIFYyCisgICAgICAgICAgICBWMCAgICAgICAgICAgICAgVjM8QTYKKyAgICAgICAgICAgIFY3ICAgICAgICAgICAgICBTMipGVjEKKyAgICAgICAgICAgIEE0ICAgICAgICAgICAgICAxNDIKKyAgICAgICAgICAgIEEwICAgICAgICAgICAgICBBNCtBMworICAgICAgICAgICAgLEEwLDEgICAgICAgICAgIFY3CisgICAgICAgICAgICBWNSAgICAgICAgICAgICAgVjc+QTcKKyAgICAgICAgICAgIFYyICAgICAgICAgICAgICBTMipGVjAKKyAgICAgICAgICAgIFYzICAgICAgICAgICAgICBWNitWMgorICAgICAgICAgICAgUzcgICAgICAgICAgICAgIDwyMAorICAgICAgICAgICAgVjEgICAgICAgICAgICAgIFM3JlYzCisgICAgICAgICAgICBBNCAgICAgICAgICAgICAgMjcwCisgICAgICAgICAgICBBMCAgICAgICAgICAgICAgQTQrQTMKKyAgICAgICAgICAgICxBMCwxICAgICAgICAgICBWMAorICAgICAgICAgICAgQTQgICAgICAgICAgICAgIDE0CisgICAgICAgICAgICBBMCAgICAgICAgICAgICAgQTQrQTMKKyAgICAgICAgICAgIFY3ICAgICAgICAgICAgICAsQTAsMQorICAgICAgICAgICAgVjYgICAgICAgICAgICAgIFYxPEE3CisgICAgICAgICAgICBWMiAgICAgICAgICAgICAgUzIqRlY0CisgICAgICAgICAgICBWMCAgICAgICAgICAgICAgVjcrVjIKKyAgICAgICAgICAgIFM3ICAgICAgICAgICAgICA8NDIKKyAgICAgICAgICAgIFYxICAgICAgICAgICAgICBTNyZWMAorICAgICAgICAgICAgQTQgICAgICAgICAgICAgIDM5OAorICAgICAgICAgICAgQTAgICAgICAgICAgICAgIEE0K0EzCisgICAgICAgICAgICAsQTAsMSAgICAgICAgICAgVjAKKyAgICAgICAgICAgIFY3ICAgICAgICAgICAgICBTMypGVjQKKyAgICAgICAgICAgIFYyICAgICAgICAgICAgICBWNStWMQorICAgICAgICAgICAgVjAgICAgICAgICAgICAgIFYzPEE1CisgICAgICAgICAgICBBNSAgICAgICAgICAgICAgNTI2CisgICAgICAgICAgICBBMCAgICAgICAgICAgICAgQTUrQTMKKyAgICAgICAgICAgICxBMCwxICAgICAgICAgICBWMAorICAgICAgICAgICAgQTUgICAgICAgICAgICAgIDI3MAorICAgICAgICAgICAgQTAgICAgICAgICAgICAgIEE1K0EzCisgICAgICAgICAgICBWNCAgICAgICAgICAgICAgLEEwLDEKKyAgICAgICAgICAgIFY1ICAgICAgICAgICAgICBWMitWNgorICAgICAgICAgICAgQTUgICAgICAgICAgICAgIDIwCisgICAgICAgICAgICBWMSAgICAgICAgICAgICAgVjM+QTUKKyAgICAgICAgICAgIFYwICAgICAgICAgICAgICBTMSpGVjQKKyAgICAgICAgICAgIEE1ICAgICAgICAgICAgICA2NTQKKyAgICAgICAgICAgIEEwICAgICAgICAgICAgICBBNStBMworICAgICAgICAgICAgLEEwLDEgICAgICAgICAgIFYxCisgICAgICAgICAgICBWNiAgICAgICAgICAgICAgVjcrVjAKKyAgICAgICAgICAgIEE1ICAgICAgICAgICAgICAyCisgICAgICAgICAgICBWMiAgICAgICAgICAgICAgVjY8QTUKKyAgICAgICAgICAgIFYzICAgICAgICAgICAgICBTMypGVjQKKyAgICAgICAgICAgIEE1ICAgICAgICAgICAgICAxNDIKKyAgICAgICAgICAgIEEwICAgICAgICAgICAgICBBNStBMworICAgICAgICAgICAgVjEgICAgICAgICAgICAgICxBMCwxCisgICAgICAgICAgICBBNSAgICAgICAgICAgICAgNTI2CisgICAgICAgICAgICBBMCAgICAgICAgICAgICAgQTUrQTMKKyAgICAgICAgICAgIFY3ICAgICAgICAgICAgICAsQTAsMQorICAgICAgICAgICAgVjAgICAgICAgICAgICAgIFYxK1Y3CisgICAgICAgICAgICBWNiAgICAgICAgICAgICAgVjM8QTYKKyAgICAgICAgICAgIFY0ICAgICAgICAgICAgICBWNitWMgorICAgICAgICAgICAgQTYgICAgICAgICAgICAgIDQyCisgICAgICAgICAgICBWNyAgICAgICAgICAgICAgVjU+QTYKKyAgICAgICAgICAgIEE1ICAgICAgICAgICAgICA2NTQKKyAgICAgICAgICAgIENQVworICAgICAgICAgICAgQTAgICAgICAgICAgICAgIEE1K0EzCisgICAgICAgICAgICBWMSAgICAgICAgICAgICAgLEEwLDEKKyAgICAgICAgICAgIEE1ICAgICAgICAgICAgICAzOTgKKyAgICAgICAgICAgIEEwICAgICAgICAgICAgICBBNStBMworICAgICAgICAgICAgVjMgICAgICAgICAgICAgICxBMCwxCisgICAgICAgICAgICBWNiAgICAgICAgICAgICAgVjQrVjEKKyAgICAgICAgICAgIFYyICAgICAgICAgICAgICBWMz5BNgorICAgICAgICAgICAgVjUgICAgICAgICAgICAgIFY2K1YyCisgICAgICAgICAgICBBNiAgICAgICAgICAgICAgQjEyCisgICAgICAgICAgICBWNCAgICAgICAgICAgICAgVjM8QTcKKyAgICAgICAgICAgIEE3ICAgICAgICAgICAgICBCMTMKKyAgICAgICAgICAgIEEzICAgICAgICAgICAgICBBNytBMQorICAgICAgICAgICAgQTcgICAgICAgICAgICAgIEIxMQorICAgICAgICAgICAgQTUgICAgICAgICAgICAgIEE3K0ExCisgICAgICAgICAgICBBNCAgICAgICAgICAgICAgQTYrQTEKKyAgICAgICAgICAgIEE3ICAgICAgICAgICAgICBBMitBMQorICAgICAgICAgICAgQTAgICAgICAgICAgICAgIEEyK0ExCisgICAgICAgICAgICBBMiAgICAgICAgICAgICAgMTI4CisgICAgICAgICAgICBCMTMgICAgICAgICAgICAgQTAKKyAgICAgICAgICAgIFYxICAgICAgICAgICAgICBWMCtWNAorICAgICAgICAgICAgQTAgICAgICAgICAgICAgIEIxMQorICAgICAgICAgICAgLEEwLDEgICAgICAgICAgIFYxCisgICAgICAgICAgICBWNiAgICAgICAgICAgICAgVjUrVjcKKyAgICAgICAgICAgIEEwICAgICAgICAgICAgICBBNgorICAgICAgICAgICAgLEEwLDEgICAgICAgICAgIFY2CisgICAgICAgICAgICBBMCAgICAgICAgICAgICAgQjEzCisgICAgICAgICAgICBBMSAgICAgICAgICAgICAgQTIKKyAgICAgICAgICAgIEEyICAgICAgICAgICAgICBBNworICAgICAgICAgICAgSkFOICAgICAgICAgICAgIEw3CitMOCAgICAgICAgICA9ICAgICAgICAgICAgICAgUC4qCitMNSAgICAgICAgICA9ICAgICAgICAgICAgICAgUC4qCisgICAgICAgICAgICBTMSAgICAgICAgICAgICAgMAorICAgICAgICAgICAgQTAgICAgICAgICAgICAgIEIwMgorICAgICAgICAgICAgQTIgICAgICAgICAgICAgIEIwMgorICAgICAgICAgICAgQTEgICAgICAgICAgICAgIDEzCisgICAgICAgICAgICBCNjYgICAgICAgICAgICAgQTAKKyAgICAgICAgICAgIEI3NyxBMSAgICAgICAgICAwLEEwCisgICAgICAgICAgICBBMCAgICAgICAgICAgICAgQTIrQTEKKyAgICAgICAgICAgIEExICAgICAgICAgICAgICAxCisgICAgICAgICAgICBUMDAsQTEgICAgICAgICAgMCxBMAorICAgICAgICAgICAgSiAgICAgICAgICAgICAgIEIwMAorICAgICAgICAgICAgRVhUICAgICAgICAgICAgICRTVEtPRkVOOnAKKyAgICAgICAgICAgIEVOVFJZICAgICAgICAgICBHTVBOX01VTFdXCisgICAgICAgICAgICBFTkQKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vY3JheS9jZnAvbXVsd3dqOTAucyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vY3JheS9jZnAvbXVsd3dqOTAucwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzJjN2NkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9jcmF5L2NmcC9tdWx3d2o5MC5zCkBAIC0wLDAgKzEsMjUzIEBACisqICAgIEhlbHBlciBmb3IgbXBuX211bF8xLCBtcG5fYWRkbXVsXzEsIGFuZCBtcG5fc3VibXVsXzEgZm9yIENyYXkgUFZQLgorCisqICAgIENvcHlyaWdodCAxOTk2LCAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKiAgICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGZyb20gbXVsd3cuZiBpbiB0aGlzIHNhbWUgZGlyZWN0b3J5LgorCisqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisqCisqICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKyoKKyogICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorKiAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisqICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyoKKyogIG9yCisqCisqICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorKiAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisqICAgICAgbGF0ZXIgdmVyc2lvbi4KKyoKKyogIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisqCisqICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisqICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorKiAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisqICBmb3IgbW9yZSBkZXRhaWxzLgorKgorKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorKiAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorKiAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisgICAgICAgICAgICBJREVOVCAgICAgICAgICAgR01QTl9NVUxXVworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgIEFzc2VtYmxlIHdpdGggQ2FsIFZlcnNpb24gMi4wICAgICAgICAgKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiBHZW5lcmF0ZWQgYnkgQ0ZUNzcgICA2LjAuNC4xOSAgICAgICAgICAgICAgKgorKiAgICAgICAgICAgb24gMDYvMjcvMDAgYXQgMDQ6MzQ6MTMgICAgICAgICAgKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBBTExPVyBVTkRFUlNDT1JFUyBJTiBJREVOVElGSUVSUworICAgICAgICAgICAgRURJVCAgICAgICAgICAgIE9GRgorICAgICAgICAgICAgRk9STUFUICAgICAgICAgIE5FVworQERBVEEgICAgICAgU0VDVElPTiAgICAgICAgIERBVEEsQ00KK0BEQVRBICAgICAgID0gICAgICAgICAgICAgICBXLioKKyAgICAgICAgICAgIENPTiAgICAgICAgICAgICBPJzAwMDAwMDAwMDAwNDAwMDAwMDAwMDAKKyAgICAgICAgICAgIENPTiAgICAgICAgICAgICBPJzA0MzUxNTI0MDQ3MTM3MjMyNTI1MTQKKyAgICAgICAgICAgIENPTiAgICAgICAgICAgICBPJzA1MzUyNzAwMDAwMDAwMDAwMDAwMDAKKyAgICAgICAgICAgIENPTiAgICAgICAgICAgICBPJzAwMDAwMDAwMDAwMDAwMDEyMDAwMTIKKyAgICAgICAgICAgIFZXRCAgICAgICAgICAgICAzMi8wLDMyL1AuR01QTl9NVUxXVworICAgICAgICAgICAgQ09OICAgICAgICAgICAgIE8nMDAxNDAwMzAwMDAwMDAwMDAwMTQxNgorICAgICAgICAgICAgQ09OICAgICAgICAgICAgIE8nMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQorICAgICAgICAgICAgQ09OICAgICAgICAgICAgIE8nMDAwMDAwMDAwMDAwMDAwMDAwMDIxNQorICAgICAgICAgICAgQlNTWiAgICAgICAgICAgIDEKK0BDT0RFICAgICAgIFNFQ1RJT04gICAgICAgICBDT0RFCitAQ09ERSAgICAgICA9ICAgICAgICAgICAgICAgUC4qCitMMyAgICAgICAgICA9ICAgICAgICAgICAgICAgUC4qCisgICAgICAgICAgICBBMCAgICAgICAgICAgICAgQTYKKyAgICAgICAgICAgIEE1ICAgICAgICAgICAgICA2CisgICAgICAgICAgICBCMDMsQTUgICAgICAgICAgMCxBMAorICAgICAgICAgICAgQTAgICAgICAgICAgICAgIEExK0EyCisgICAgICAgICAgICBBNSAgICAgICAgICAgICAgMQorICAgICAgICAgICAgMCxBMCAgICAgICAgICAgIFQwMCxBNQorICAgICAgICAgICAgQjAyICAgICAgICAgICAgIEEyCisgICAgICAgICAgICBCNjYgICAgICAgICAgICAgQTMKKyAgICAgICAgICAgIEIwMSAgICAgICAgICAgICBBNgorICAgICAgICAgICAgQTcgICAgICAgICAgICAgIFAuTDQKKyAgICAgICAgICAgIEIwMCAgICAgICAgICAgICBBNworICAgICAgICAgICAgQTYgICAgICAgICAgICAgIEBEQVRBCisgICAgICAgICAgICBKICAgICAgICAgICAgICAgJFNUS09GRU4KK0dNUE5fTVVMV1cgID0gICAgICAgICAgICAgICBQLioKKyAgICAgICAgICAgIEEwICAgICAgICAgICAgICBAREFUQSszCisgICAgICAgICAgICBCNzcgICAgICAgICAgICAgQTAKKyAgICAgICAgICAgIEExICAgICAgICAgICAgICAxMworICAgICAgICAgICAgQTAgICAgICAgICAgICAgIEI2NgorICAgICAgICAgICAgQTIgICAgICAgICAgICAgIEI2NgorICAgICAgICAgICAgQTQgICAgICAgICAgICAgIEI2NworICAgICAgICAgICAgMCxBMCAgICAgICAgICAgIEI3NyxBMQorICAgICAgICAgICAgQTcgICAgICAgICAgICAgIDc4MgorICAgICAgICAgICAgQTMgICAgICAgICAgICAgIEEyK0E3CisgICAgICAgICAgICBBMCAgICAgICAgICAgICAgQTQtQTMKKyAgICAgICAgICAgIEpBTSAgICAgICAgICAgICBMMworICAgICAgICAgICAgQTAgICAgICAgICAgICAgIEE2CisgICAgICAgICAgICBBNSAgICAgICAgICAgICAgNgorICAgICAgICAgICAgQjAzLEE1ICAgICAgICAgIDAsQTAKKyAgICAgICAgICAgIEEwICAgICAgICAgICAgICBBMStBMgorICAgICAgICAgICAgQTUgICAgICAgICAgICAgIDEKKyAgICAgICAgICAgIDAsQTAgICAgICAgICAgICBUMDAsQTUKKyAgICAgICAgICAgIEIwMiAgICAgICAgICAgICBBMgorICAgICAgICAgICAgQjY2ICAgICAgICAgICAgIEEzCisgICAgICAgICAgICBCMDEgICAgICAgICAgICAgQTYKK0w0ICAgICAgICAgID0gICAgICAgICAgICAgICBQLioKKyAgICAgICAgICAgIEE3ICAgICAgICAgICAgICBCMDcKKyAgICAgICAgICAgIFM3ICAgICAgICAgICAgICAwLEE3CisgICAgICAgICAgICBBNiAgICAgICAgICAgICAgQjEwCisgICAgICAgICAgICBTNiAgICAgICAgICAgICAgMCxBNgorICAgICAgICAgICAgUzUgICAgICAgICAgICAgIDEKKyAgICAgICAgICAgIFM0ICAgICAgICAgICAgICA8MjIKKyAgICAgICAgICAgIFM3ICAgICAgICAgICAgICBTNy1TNQorICAgICAgICAgICAgUzUgICAgICAgICAgICAgICNTNworICAgICAgICAgICAgVDAwICAgICAgICAgICAgIFM2CisgICAgICAgICAgICBTNiAgICAgICAgICAgICAgUzY+MjIKKyAgICAgICAgICAgIFM3ICAgICAgICAgICAgICBUMDAKKyAgICAgICAgICAgIFM3ICAgICAgICAgICAgICBTNz40NAorICAgICAgICAgICAgUzMgICAgICAgICAgICAgIFQwMAorICAgICAgICAgICAgUzMgICAgICAgICAgICAgIFMzJlM0CisgICAgICAgICAgICBTNiAgICAgICAgICAgICAgUzYmUzQKKyAgICAgICAgICAgIFM3ICAgICAgICAgICAgICBTNyZTNAorICAgICAgICAgICAgUzMgICAgICAgICAgICAgIFMzPDI0CisgICAgICAgICAgICBTNiAgICAgICAgICAgICAgUzY8MjQKKyAgICAgICAgICAgIFM3ICAgICAgICAgICAgICBTNzwyNAorICAgICAgICAgICAgUzAgICAgICAgICAgICAgIFM1CisgICAgICAgICAgICBTNCAgICAgICAgICAgICAgUzUKKyAgICAgICAgICAgIFMxICAgICAgICAgICAgICBTNgorICAgICAgICAgICAgUzIgICAgICAgICAgICAgIFMzCisgICAgICAgICAgICBTMyAgICAgICAgICAgICAgUzcKKyAgICAgICAgICAgIEpTUCAgICAgICAgICAgICBMNQorTDYgICAgICAgICAgPSAgICAgICAgICAgICAgIFAuKgorICAgICAgICAgICAgUzcgICAgICAgICAgICAgIC1TNAorICAgICAgICAgICAgQTIgICAgICAgICAgICAgIFM3CisgICAgICAgICAgICBWTCAgICAgICAgICAgICAgQTIKKyAgICAgICAgICAgIEEzICAgICAgICAgICAgICBCMDYKKyAgICAgICAgICAgIEE1ICAgICAgICAgICAgICBCMDUKKyAgICAgICAgICAgIEE0ICAgICAgICAgICAgICBCMDQKKyAgICAgICAgICAgIEExICAgICAgICAgICAgICBWTAorICAgICAgICAgICAgQTIgICAgICAgICAgICAgIFM0CitMNyAgICAgICAgICA9ICAgICAgICAgICAgICAgUC4qCisgICAgICAgICAgICBBMCAgICAgICAgICAgICAgQTMKKyAgICAgICAgICAgIFZMICAgICAgICAgICAgICBBMQorICAgICAgICAgICAgVjcgICAgICAgICAgICAgICxBMCwxCisgICAgICAgICAgICBCMTEgICAgICAgICAgICAgQTUKKyAgICAgICAgICAgIEE3ICAgICAgICAgICAgICAyMgorICAgICAgICAgICAgQjEyICAgICAgICAgICAgIEE0CisgICAgICAgICAgICBWNiAgICAgICAgICAgICAgVjc+QTcKKyAgICAgICAgICAgIEIxMyAgICAgICAgICAgICBBMworICAgICAgICAgICAgUzcgICAgICAgICAgICAgIDwyMgorICAgICAgICAgICAgQTMgICAgICAgICAgICAgIEIwMgorICAgICAgICAgICAgVjUgICAgICAgICAgICAgIFM3JlY2CisgICAgICAgICAgICBBNiAgICAgICAgICAgICAgMjQKKyAgICAgICAgICAgIFY0ICAgICAgICAgICAgICBWNTxBNgorICAgICAgICAgICAgVjMgICAgICAgICAgICAgIFMxKkZWNAorICAgICAgICAgICAgVjIgICAgICAgICAgICAgIFM3JlY3CisgICAgICAgICAgICBWMSAgICAgICAgICAgICAgVjI8QTYKKyAgICAgICAgICAgIFYwICAgICAgICAgICAgICBTMypGVjEKKyAgICAgICAgICAgIFY2ICAgICAgICAgICAgICBWMCtWMworICAgICAgICAgICAgQTUgICAgICAgICAgICAgIDQ0CisgICAgICAgICAgICBWNSAgICAgICAgICAgICAgVjc+QTUKKyAgICAgICAgICAgIFYyICAgICAgICAgICAgICBTMSpGVjEKKyAgICAgICAgICAgIFYzICAgICAgICAgICAgICBTNyZWNQorICAgICAgICAgICAgQTAgICAgICAgICAgICAgIDE0CisgICAgICAgICAgICBCNzcgICAgICAgICAgICAgQTAKKyAgICAgICAgICAgIEE0ICAgICAgICAgICAgICBCNzcKKyAgICAgICAgICAgIEEwICAgICAgICAgICAgICBBNCtBMworICAgICAgICAgICAgLEEwLDEgICAgICAgICAgIFYyCisgICAgICAgICAgICBWMCAgICAgICAgICAgICAgVjM8QTYKKyAgICAgICAgICAgIFY3ICAgICAgICAgICAgICBTMipGVjEKKyAgICAgICAgICAgIEE0ICAgICAgICAgICAgICAxNDIKKyAgICAgICAgICAgIEEwICAgICAgICAgICAgICBBNCtBMworICAgICAgICAgICAgLEEwLDEgICAgICAgICAgIFY3CisgICAgICAgICAgICBWNSAgICAgICAgICAgICAgVjc+QTcKKyAgICAgICAgICAgIFYyICAgICAgICAgICAgICBTMipGVjAKKyAgICAgICAgICAgIFYzICAgICAgICAgICAgICBWNitWMgorICAgICAgICAgICAgUzcgICAgICAgICAgICAgIDwyMAorICAgICAgICAgICAgVjEgICAgICAgICAgICAgIFM3JlYzCisgICAgICAgICAgICBBNCAgICAgICAgICAgICAgMjcwCisgICAgICAgICAgICBBMCAgICAgICAgICAgICAgQTQrQTMKKyAgICAgICAgICAgICxBMCwxICAgICAgICAgICBWMAorICAgICAgICAgICAgQTQgICAgICAgICAgICAgIDE0CisgICAgICAgICAgICBBMCAgICAgICAgICAgICAgQTQrQTMKKyAgICAgICAgICAgIFY3ICAgICAgICAgICAgICAsQTAsMQorICAgICAgICAgICAgVjYgICAgICAgICAgICAgIFYxPEE3CisgICAgICAgICAgICBWMiAgICAgICAgICAgICAgUzIqRlY0CisgICAgICAgICAgICBWMCAgICAgICAgICAgICAgVjcrVjIKKyAgICAgICAgICAgIFM3ICAgICAgICAgICAgICA8NDIKKyAgICAgICAgICAgIFYxICAgICAgICAgICAgICBTNyZWMAorICAgICAgICAgICAgQTQgICAgICAgICAgICAgIDM5OAorICAgICAgICAgICAgQTAgICAgICAgICAgICAgIEE0K0EzCisgICAgICAgICAgICAsQTAsMSAgICAgICAgICAgVjAKKyAgICAgICAgICAgIFY3ICAgICAgICAgICAgICBTMypGVjQKKyAgICAgICAgICAgIFYyICAgICAgICAgICAgICBWNStWMQorICAgICAgICAgICAgVjAgICAgICAgICAgICAgIFYzPEE1CisgICAgICAgICAgICBBNSAgICAgICAgICAgICAgNTI2CisgICAgICAgICAgICBBMCAgICAgICAgICAgICAgQTUrQTMKKyAgICAgICAgICAgICxBMCwxICAgICAgICAgICBWMAorICAgICAgICAgICAgQTUgICAgICAgICAgICAgIDI3MAorICAgICAgICAgICAgQTAgICAgICAgICAgICAgIEE1K0EzCisgICAgICAgICAgICBWNCAgICAgICAgICAgICAgLEEwLDEKKyAgICAgICAgICAgIFY1ICAgICAgICAgICAgICBWMitWNgorICAgICAgICAgICAgQTUgICAgICAgICAgICAgIDIwCisgICAgICAgICAgICBWMSAgICAgICAgICAgICAgVjM+QTUKKyAgICAgICAgICAgIFYwICAgICAgICAgICAgICBTMSpGVjQKKyAgICAgICAgICAgIEE1ICAgICAgICAgICAgICA2NTQKKyAgICAgICAgICAgIEEwICAgICAgICAgICAgICBBNStBMworICAgICAgICAgICAgLEEwLDEgICAgICAgICAgIFYxCisgICAgICAgICAgICBWNiAgICAgICAgICAgICAgVjcrVjAKKyAgICAgICAgICAgIEE1ICAgICAgICAgICAgICAyCisgICAgICAgICAgICBWMiAgICAgICAgICAgICAgVjY8QTUKKyAgICAgICAgICAgIFYzICAgICAgICAgICAgICBTMypGVjQKKyAgICAgICAgICAgIEE1ICAgICAgICAgICAgICAxNDIKKyAgICAgICAgICAgIEEwICAgICAgICAgICAgICBBNStBMworICAgICAgICAgICAgVjEgICAgICAgICAgICAgICxBMCwxCisgICAgICAgICAgICBBNSAgICAgICAgICAgICAgNTI2CisgICAgICAgICAgICBBMCAgICAgICAgICAgICAgQTUrQTMKKyAgICAgICAgICAgIFY3ICAgICAgICAgICAgICAsQTAsMQorICAgICAgICAgICAgVjAgICAgICAgICAgICAgIFYxK1Y3CisgICAgICAgICAgICBWNiAgICAgICAgICAgICAgVjM8QTYKKyAgICAgICAgICAgIFY0ICAgICAgICAgICAgICBWNitWMgorICAgICAgICAgICAgQTYgICAgICAgICAgICAgIDQyCisgICAgICAgICAgICBWNyAgICAgICAgICAgICAgVjU+QTYKKyAgICAgICAgICAgIEE1ICAgICAgICAgICAgICA2NTQKKyAgICAgICAgICAgIEEwICAgICAgICAgICAgICBBNStBMworICAgICAgICAgICAgVjEgICAgICAgICAgICAgICxBMCwxCisgICAgICAgICAgICBBNSAgICAgICAgICAgICAgMzk4CisgICAgICAgICAgICBBMCAgICAgICAgICAgICAgQTUrQTMKKyAgICAgICAgICAgIFYzICAgICAgICAgICAgICAsQTAsMQorICAgICAgICAgICAgVjYgICAgICAgICAgICAgIFY0K1YxCisgICAgICAgICAgICBWMiAgICAgICAgICAgICAgVjM+QTYKKyAgICAgICAgICAgIFY1ICAgICAgICAgICAgICBWNitWMgorICAgICAgICAgICAgQTYgICAgICAgICAgICAgIEIxMgorICAgICAgICAgICAgVjQgICAgICAgICAgICAgIFYzPEE3CisgICAgICAgICAgICBBNyAgICAgICAgICAgICAgQjEzCisgICAgICAgICAgICBBMyAgICAgICAgICAgICAgQTcrQTEKKyAgICAgICAgICAgIEE3ICAgICAgICAgICAgICBCMTEKKyAgICAgICAgICAgIEE1ICAgICAgICAgICAgICBBNytBMQorICAgICAgICAgICAgQTQgICAgICAgICAgICAgIEE2K0ExCisgICAgICAgICAgICBBNyAgICAgICAgICAgICAgQTIrQTEKKyAgICAgICAgICAgIEEwICAgICAgICAgICAgICBBMitBMQorICAgICAgICAgICAgQTIgICAgICAgICAgICAgIDY0CisgICAgICAgICAgICBCMTMgICAgICAgICAgICAgQTAKKyAgICAgICAgICAgIFYxICAgICAgICAgICAgICBWMCtWNAorICAgICAgICAgICAgQTAgICAgICAgICAgICAgIEIxMQorICAgICAgICAgICAgLEEwLDEgICAgICAgICAgIFYxCisgICAgICAgICAgICBWNiAgICAgICAgICAgICAgVjUrVjcKKyAgICAgICAgICAgIEEwICAgICAgICAgICAgICBBNgorICAgICAgICAgICAgLEEwLDEgICAgICAgICAgIFY2CisgICAgICAgICAgICBBMCAgICAgICAgICAgICAgQjEzCisgICAgICAgICAgICBBMSAgICAgICAgICAgICAgQTIKKyAgICAgICAgICAgIEEyICAgICAgICAgICAgICBBNworICAgICAgICAgICAgSkFOICAgICAgICAgICAgIEw3CitMOCAgICAgICAgICA9ICAgICAgICAgICAgICAgUC4qCitMNSAgICAgICAgICA9ICAgICAgICAgICAgICAgUC4qCisgICAgICAgICAgICBTMSAgICAgICAgICAgICAgMAorICAgICAgICAgICAgQTAgICAgICAgICAgICAgIEIwMgorICAgICAgICAgICAgQTIgICAgICAgICAgICAgIEIwMgorICAgICAgICAgICAgQTEgICAgICAgICAgICAgIDEzCisgICAgICAgICAgICBCNjYgICAgICAgICAgICAgQTAKKyAgICAgICAgICAgIEI3NyxBMSAgICAgICAgICAwLEEwCisgICAgICAgICAgICBBMCAgICAgICAgICAgICAgQTIrQTEKKyAgICAgICAgICAgIEExICAgICAgICAgICAgICAxCisgICAgICAgICAgICBUMDAsQTEgICAgICAgICAgMCxBMAorICAgICAgICAgICAgSiAgICAgICAgICAgICAgIEIwMAorICAgICAgICAgICAgRVhUICAgICAgICAgICAgICRTVEtPRkVOOnAKKyAgICAgICAgICAgIEVOVFJZICAgICAgICAgICBHTVBOX01VTFdXCisgICAgICAgICAgICBFTkQKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vY3JheS9jZnAvc3VibXVsXzEuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vY3JheS9jZnAvc3VibXVsXzEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjJjMjc1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9jcmF5L2NmcC9zdWJtdWxfMS5jCkBAIC0wLDAgKzEsNDggQEAKKy8qIG1wbl9zdWJtdWxfMSBmb3IgQ3JheSBQVlAuCisKK0NvcHlyaWdodCAxOTk2LCAyMDAwLCAyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCittcF9saW1iX3QKK21wbl9zdWJtdWxfMSAobXBfcHRyIHJwLCBtcF9zcmNwdHIgdXAsIG1wX3NpemVfdCBuLCBtcF9saW1iX3QgbGltYikKK3sKKyAgbXBfbGltYl90IHAwW25dLCBwMVtuXSwgdHBbbl07CisgIG1wX2xpbWJfdCBjeV9saW1iOworCisgIEdNUE5fTVVMV1cgKHAxLCBwMCwgdXAsICZuLCAmbGltYik7CisgIGN5X2xpbWIgPSBtcG5fc3ViX24gKHRwLCBycCwgcDAsIG4pOworICBycFswXSA9IHRwWzBdOworICBpZiAobiAhPSAxKQorICAgIGN5X2xpbWIgKz0gbXBuX3N1Yl9uIChycCArIDEsIHRwICsgMSwgcDEsIG4gLSAxKTsKKyAgY3lfbGltYiArPSBwMVtuIC0gMV07CisKKyAgcmV0dXJuIGN5X2xpbWI7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2NyYXkvZ21wLW1wYXJhbS5oIGIvdGhpcmRfcGFydHkvZ21wL21wbi9jcmF5L2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmFlZDFlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9jcmF5L2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDc0IEBACisvKiBDcmF5IFQ5MCBDRlAgZ21wLW1wYXJhbS5oIC0tIENvbXBpbGVyL21hY2hpbmUgcGFyYW1ldGVyIGhlYWRlciBmaWxlLgorCitDb3B5cmlnaHQgMTk5MSwgMTk5MywgMTk5NCwgMTk5NiwgMjAwMC0yMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgNjQKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgOAorCisvKiBUOTAgVW5pY29zIDEwLjAuWCBpbiBDRlAgbW9kZSAqLworCisvKiBHZW5lcmF0ZWQgYnkgdHVuZXVwLmMsIDIwMDQtMDItMDcsIHN5c3RlbSBjb21waWxlciAqLworCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgIDcxCisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgMTMxCisKKyNkZWZpbmUgU1FSX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgMzIKKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAxOTkKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAzNjMKKworI2RlZmluZSBESVZfU0JfUFJFSU5WX1RIUkVTSE9MRCAgICAgICAgICAgMCAgLyogKHByZWludiBhbHdheXMpICovCisjZGVmaW5lIERJVl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgOTk2CisjZGVmaW5lIFBPV01fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgNjAxCisKKyNkZWZpbmUgSEdDRF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICA5NjQKKyNkZWZpbmUgR0NEX0FDQ0VMX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgR0NEX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDI4NzQKKyNkZWZpbmUgSkFDT0JJX0JBU0VfTUVUSE9EICAgICAgICAgICAgICAgIDIKKworI2RlZmluZSBESVZSRU1fMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgMCAgLyogcHJlaW52IGFsd2F5cyAqLworI2RlZmluZSBESVZSRU1fMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgICAgICAgICAgICAgMSAgLyogcHJlaW52IGFsd2F5cyAqLworI2RlZmluZSBVU0VfUFJFSU5WX01PRF8xICAgICAgICAgICAgICAgICAgMSAgLyogcHJlaW52IGFsd2F5cyAqLworI2RlZmluZSBESVZSRU1fMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMCAgLyogcHJlaW52IGFsd2F5cyAqLworI2RlZmluZSBESVZFWEFDVF8xX1RIUkVTSE9MRCAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PREVYQUNUXzFfT0REX1RIUkVTSE9MRCAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKworI2RlZmluZSBHRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAyNgorI2RlZmluZSBHRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICA0MgorI2RlZmluZSBTRVRfU1RSX1RIUkVTSE9MRCAgICAgICAgICAgIDE0NTc1NgorCisjZGVmaW5lIE1VTF9GRlRfVEFCTEUgIHsgMjcyLCA1NDQsIDEwODgsIDIzMDQsIDUxMjAsIDEyMjg4LCA0OTE1MiwgMCB9CisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgMjAwCisjZGVmaW5lIE1VTF9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAxNjY0CisKKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRSAgeyAxMDA4LCAyMDgwLCAzOTA0LCA3OTM2LCAxNzQwOCwgNDUwNTYsIDAgfQorI2RlZmluZSBTUVJfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgIDYwMAorI2RlZmluZSBTUVJfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgMjk3NgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9jcmF5L2hhbWRpc3QuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vY3JheS9oYW1kaXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdmMTc3YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vY3JheS9oYW1kaXN0LmMKQEAgLTAsMCArMSw0MiBAQAorLyogQ3JheSBtcG5faGFtZGlzdCAtLSBoYW1taW5nIGRpc3RhbmNlIGNvdW50LgorCitDb3B5cmlnaHQgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgPGludHJpbnNpY3MuaD4KKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCit1bnNpZ25lZCBsb25nIGludAorbXBuX2hhbWRpc3QgKG1wX3NyY3B0ciBwMSwgbXBfc3JjcHRyIHAyLCBtcF9zaXplX3QgbikKK3sKKyAgdW5zaWduZWQgbG9uZyBpbnQgcmVzdWx0ID0gMDsKKyAgbXBfc2l6ZV90IGk7CisgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisgICAgcmVzdWx0ICs9IF9wb3BjbnQgKHAxW2ldIF4gcDJbaV0pOworICByZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9jcmF5L2llZWUvYWRkbXVsXzEuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vY3JheS9pZWVlL2FkZG11bF8xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U3ZGZiYgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vY3JheS9pZWVlL2FkZG11bF8xLmMKQEAgLTAsMCArMSwxMTEgQEAKKy8qIENyYXkgUFZQL0lFRUUgbXBuX2FkZG11bF8xIC0tIG11bHRpcGx5IGEgbGltYiB2ZWN0b3Igd2l0aCBhIGxpbWIgYW5kIGFkZCB0aGUKKyAgIHJlc3VsdCB0byBhIHNlY29uZCBsaW1iIHZlY3Rvci4KKworQ29weXJpZ2h0IDIwMDAtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworLyogVGhpcyBjb2RlIHJ1bnMgYXQganVzdCB1bmRlciA5IGN5Y2xlcy9saW1iIG9uIGEgVDkwLiAgVGhhdCBpcyBub3QgcGVyZmVjdCwKKyAgIG1haW5seSBkdWUgdG8gdmVjdG9yIHJlZ2lzdGVyIHNob3J0YWdlIGluIHRoZSBtYWluIGxvb3AuICBBc3NlbWJseSBjb2RlCisgICBzaG91bGQgYnJpbmcgaXQgZG93biB0byBwZXJoYXBzIDcgY3ljbGVzL2xpbWIuICAqLworCisjaW5jbHVkZSA8aW50cmluc2ljcy5oPgorI2luY2x1ZGUgImdtcC1pbXBsLmgiCisKK21wX2xpbWJfdAorbXBuX2FkZG11bF8xIChtcF9wdHIgcnAsIG1wX3NyY3B0ciB1cCwgbXBfc2l6ZV90IG4sIG1wX2xpbWJfdCB2bCkKK3sKKyAgbXBfbGltYl90IGN5W25dOworICBtcF9saW1iX3QgYSwgYiwgciwgczAsIHMxLCBjMCwgYzE7CisgIG1wX3NpemVfdCBpOworICBpbnQgbW9yZV9jYXJyaWVzOworCisgIGlmICh1cCA9PSBycCkKKyAgICB7CisgICAgICAvKiBUaGUgYWxnb3JpdGhtIHVzZWQgYmVsb3cgY2Fubm90IGhhbmRsZSBvdmVybGFwLiAgSGFuZGxlIGl0IGhlcmUgYnkKKwkgbWFraW5nIGEgdGVtcG9yYXJ5IGNvcHkgb2YgdGhlIHNvdXJjZSB2ZWN0b3IsIHRoZW4gY2FsbCBvdXJzZWx2ZXMuICAqLworICAgICAgbXBfbGltYl90IHhwW25dOworICAgICAgTVBOX0NPUFkgKHhwLCB1cCwgbik7CisgICAgICByZXR1cm4gbXBuX2FkZG11bF8xIChycCwgeHAsIG4sIHZsKTsKKyAgICB9CisKKyAgYSA9IHVwWzBdICogdmw7CisgIHIgPSBycFswXTsKKyAgczAgPSBhICsgcjsKKyAgcnBbMF0gPSBzMDsKKyAgYzAgPSAoKGEgJiByKSB8ICgoYSB8IHIpICYgfnMwKSkgPj4gNjM7CisgIGN5WzBdID0gYzA7CisKKyAgLyogTWFpbiBtdWx0aXBseSBsb29wLiAgR2VuZXJhdGUgYSByYXcgYWNjdW11bGF0ZWQgb3V0cHV0IHByb2R1Y3QgaW4gcnBbXQorICAgICBhbmQgYSBjYXJyeSB2ZWN0b3IgaW4gY3lbXS4gICovCisjcHJhZ21hIF9DUkkgaXZkZXAKKyAgZm9yIChpID0gMTsgaSA8IG47IGkrKykKKyAgICB7CisgICAgICBhID0gdXBbaV0gKiB2bDsKKyAgICAgIGIgPSBfaW50X211bHRfdXBwZXIgKHVwW2kgLSAxXSwgdmwpOworICAgICAgczAgPSBhICsgYjsKKyAgICAgIGMwID0gKChhICYgYikgfCAoKGEgfCBiKSAmIH5zMCkpID4+IDYzOworICAgICAgciA9IHJwW2ldOworICAgICAgczEgPSBzMCArIHI7CisgICAgICBycFtpXSA9IHMxOworICAgICAgYzEgPSAoKHMwICYgcikgfCAoKHMwIHwgcikgJiB+czEpKSA+PiA2MzsKKyAgICAgIGN5W2ldID0gYzAgKyBjMTsKKyAgICB9CisgIC8qIENhcnJ5IGFkZCBsb29wLiAgQWRkIHRoZSBjYXJyeSB2ZWN0b3IgY3lbXSB0byB0aGUgcmF3IHJlc3VsdCBycFtdIGFuZAorICAgICBzdG9yZSB0aGUgbmV3IHJlc3VsdCBiYWNrIHRvIHJwW10uICAqLworICBtb3JlX2NhcnJpZXMgPSAwOworI3ByYWdtYSBfQ1JJIGl2ZGVwCisgIGZvciAoaSA9IDE7IGkgPCBuOyBpKyspCisgICAgeworICAgICAgciA9IHJwW2ldOworICAgICAgYzAgPSBjeVtpIC0gMV07CisgICAgICBzMCA9IHIgKyBjMDsKKyAgICAgIHJwW2ldID0gczA7CisgICAgICBjMCA9IChyICYgfnMwKSA+PiA2MzsKKyAgICAgIG1vcmVfY2FycmllcyArPSBjMDsKKyAgICB9CisgIC8qIElmIHRoYXQgc2Vjb25kIGxvb3AgZ2VuZXJhdGVkIGNhcnJ5LCBoYW5kbGUgdGhhdCBpbiBzY2FsYXIgbG9vcC4gICovCisgIGlmIChtb3JlX2NhcnJpZXMpCisgICAgeworICAgICAgbXBfbGltYl90IGN5cmVjID0gMDsKKyAgICAgIC8qIExvb2sgZm9yIHBsYWNlcyB3aGVyZSBycFtrXSA9PSAwIGFuZCBjeVtrLTFdID09IDEgb3IKKwkgcnBba10gPT0gMSBhbmQgY3lbay0xXSA9PSAyLgorCSBUaGVzZSBhcmUgd2hlcmUgd2UgZ290IGEgcmVjdXJyZW5jeSBjYXJyeS4gICovCisgICAgICBmb3IgKGkgPSAxOyBpIDwgbjsgaSsrKQorCXsKKwkgIHIgPSBycFtpXTsKKwkgIGMwID0gciA8IGN5W2kgLSAxXTsKKwkgIHMwID0gciArIGN5cmVjOworCSAgcnBbaV0gPSBzMDsKKwkgIGMxID0gKHIgJiB+czApID4+IDYzOworCSAgY3lyZWMgPSBjMCB8IGMxOworCX0KKyAgICAgIHJldHVybiBfaW50X211bHRfdXBwZXIgKHVwW24gLSAxXSwgdmwpICsgY3lyZWMgKyBjeVtuIC0gMV07CisgICAgfQorCisgIHJldHVybiBfaW50X211bHRfdXBwZXIgKHVwW24gLSAxXSwgdmwpICsgY3lbbiAtIDFdOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9jcmF5L2llZWUvZ21wLW1wYXJhbS5oIGIvdGhpcmRfcGFydHkvZ21wL21wbi9jcmF5L2llZWUvZ21wLW1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZGMyODYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2NyYXkvaWVlZS9nbXAtbXBhcmFtLmgKQEAgLTAsMCArMSw3MyBAQAorLyogQ3JheSBUOTAgSUVFRSBnbXAtbXBhcmFtLmggLS0gQ29tcGlsZXIvbWFjaGluZSBwYXJhbWV0ZXIgaGVhZGVyIGZpbGUuCisKK0NvcHlyaWdodCAxOTkxLCAxOTkzLCAxOTk0LCAxOTk2LCAyMDAwLTIwMDIsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgNjQKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgOAorCisvKiBHZW5lcmF0ZWQgYnkgdHVuZXVwLmMsIDIwMDQtMDItMDcsIHN5c3RlbSBjb21waWxlciAqLworCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgMTMwCisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgMjYwCisKKyNkZWZpbmUgU1FSX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgIDkgIC8qIGthcmF0c3ViYSAqLworI2RlZmluZSBTUVJfVE9PTTJfVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogbmV2ZXIgc3FyX2Jhc2VjYXNlICovCisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgIDM0CisKKyNkZWZpbmUgRElWX1NCX1BSRUlOVl9USFJFU0hPTEQgICAgICAgICAgIDAgIC8qIHByZWludiBhbHdheXMgKi8KKyNkZWZpbmUgRElWX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzOTAKKyNkZWZpbmUgUE9XTV9USFJFU0hPTEQgICAgICAgICAgICAgICAgICA2NTYKKworI2RlZmluZSBIR0NEX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDk2NAorI2RlZmluZSBHQ0RfQUNDRUxfVEhSRVNIT0xEICAgICAgICAgICAgICAgMworI2RlZmluZSBHQ0RfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDk2NAorI2RlZmluZSBKQUNPQklfQkFTRV9NRVRIT0QgICAgICAgICAgICAgICAgMgorCisjZGVmaW5lIERJVlJFTV8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAwICAvKiBwcmVpbnYgYWx3YXlzICovCisjZGVmaW5lIERJVlJFTV8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAxICAvKiBwcmVpbnYgYWx3YXlzICovCisjZGVmaW5lIFVTRV9QUkVJTlZfTU9EXzEgICAgICAgICAgICAgICAgICAxICAvKiBwcmVpbnYgYWx3YXlzICovCisjZGVmaW5lIERJVlJFTV8yX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAwICAvKiBwcmVpbnYgYWx3YXlzICovCisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9ERVhBQ1RfMV9PRERfVEhSRVNIT0xEICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgIDQ1CisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgIDc3CisjZGVmaW5lIFNFVF9TVFJfVEhSRVNIT0xEICAgICAgICAgICAgMTQ1NzU2CisKKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRSAgeyAxMTA0LCAyMjA4LCA0NDE2LCA4OTYwLCAxOTQ1NiwgNDUwNTYsIDAgfQorI2RlZmluZSBNVUxfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgMTE2OAorI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgNjUyOAorCisjZGVmaW5lIFNRUl9GRlRfVEFCTEUgIHsgMzY4LCA3MzYsIDE2MDAsIDI4MTYsIDcxNjgsIDEyMjg4LCAwIH0KKyNkZWZpbmUgU1FSX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAyOTYKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgIDEzMTIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vY3JheS9pZWVlL2ludmVydF9saW1iLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2NyYXkvaWVlZS9pbnZlcnRfbGltYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NGEyN2IKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2NyYXkvaWVlZS9pbnZlcnRfbGltYi5jCkBAIC0wLDAgKzEsMTI3IEBACisvKiBtcG5faW52ZXJ0X2xpbWIgLS0gSW52ZXJ0IGEgbm9ybWFsaXplZCBsaW1iLgorCitDb3B5cmlnaHQgMTk5MSwgMjAwMCwgMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisjaW5jbHVkZSAibG9uZ2xvbmcuaCIKKworLyoKKyAgVGhpcyBpcyBuZWVkZWQgdG8gbWFrZSBjb25maWd1cmUgZGVmaW5lIEhBVkVfTkFUSVZFX21wbl9pbnZlcnRfbGltYjoKKyAgUFJPTE9HVUUobXBuX2ludmVydF9saW1iKQorKi8KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGludCBhcHByb3hfdGFiWzB4MTAwXSA9Cit7CisgIC8qIDB4NDAwLCAqLworICAweDNmZiwKKyAgICAgICAgIDB4M2ZjLCAweDNmOCwgMHgzZjQsIDB4M2YwLCAweDNlYywgMHgzZTgsIDB4M2U0LAorICAweDNlMCwgMHgzZGQsIDB4M2Q5LCAweDNkNSwgMHgzZDIsIDB4M2NlLCAweDNjYSwgMHgzYzcsCisgIDB4M2MzLCAweDNjMCwgMHgzYmMsIDB4M2I5LCAweDNiNSwgMHgzYjIsIDB4M2FlLCAweDNhYiwKKyAgMHgzYTgsIDB4M2E0LCAweDNhMSwgMHgzOWUsIDB4MzliLCAweDM5NywgMHgzOTQsIDB4MzkxLAorICAweDM4ZSwgMHgzOGIsIDB4Mzg3LCAweDM4NCwgMHgzODEsIDB4MzdlLCAweDM3YiwgMHgzNzgsCisgIDB4Mzc1LCAweDM3MiwgMHgzNmYsIDB4MzZjLCAweDM2OSwgMHgzNjYsIDB4MzY0LCAweDM2MSwKKyAgMHgzNWUsIDB4MzViLCAweDM1OCwgMHgzNTUsIDB4MzUzLCAweDM1MCwgMHgzNGQsIDB4MzRhLAorICAweDM0OCwgMHgzNDUsIDB4MzQyLCAweDM0MCwgMHgzM2QsIDB4MzNhLCAweDMzOCwgMHgzMzUsCisgIDB4MzMzLCAweDMzMCwgMHgzMmUsIDB4MzJiLCAweDMyOSwgMHgzMjYsIDB4MzI0LCAweDMyMSwKKyAgMHgzMWYsIDB4MzFjLCAweDMxYSwgMHgzMTcsIDB4MzE1LCAweDMxMywgMHgzMTAsIDB4MzBlLAorICAweDMwYywgMHgzMDksIDB4MzA3LCAweDMwNSwgMHgzMDMsIDB4MzAwLCAweDJmZSwgMHgyZmMsCisgIDB4MmZhLCAweDJmNywgMHgyZjUsIDB4MmYzLCAweDJmMSwgMHgyZWYsIDB4MmVjLCAweDJlYSwKKyAgMHgyZTgsIDB4MmU2LCAweDJlNCwgMHgyZTIsIDB4MmUwLCAweDJkZSwgMHgyZGMsIDB4MmRhLAorICAweDJkOCwgMHgyZDYsIDB4MmQ0LCAweDJkMiwgMHgyZDAsIDB4MmNlLCAweDJjYywgMHgyY2EsCisgIDB4MmM4LCAweDJjNiwgMHgyYzQsIDB4MmMyLCAweDJjMCwgMHgyYmUsIDB4MmJjLCAweDJiYiwKKyAgMHgyYjksIDB4MmI3LCAweDJiNSwgMHgyYjMsIDB4MmIxLCAweDJiMCwgMHgyYWUsIDB4MmFjLAorICAweDJhYSwgMHgyYTgsIDB4MmE3LCAweDJhNSwgMHgyYTMsIDB4MmExLCAweDJhMCwgMHgyOWUsCisgIDB4MjljLCAweDI5YiwgMHgyOTksIDB4Mjk3LCAweDI5NSwgMHgyOTQsIDB4MjkyLCAweDI5MSwKKyAgMHgyOGYsIDB4MjhkLCAweDI4YywgMHgyOGEsIDB4Mjg4LCAweDI4NywgMHgyODUsIDB4Mjg0LAorICAweDI4MiwgMHgyODAsIDB4MjdmLCAweDI3ZCwgMHgyN2MsIDB4MjdhLCAweDI3OSwgMHgyNzcsCisgIDB4Mjc2LCAweDI3NCwgMHgyNzMsIDB4MjcxLCAweDI3MCwgMHgyNmUsIDB4MjZkLCAweDI2YiwKKyAgMHgyNmEsIDB4MjY4LCAweDI2NywgMHgyNjUsIDB4MjY0LCAweDI2MywgMHgyNjEsIDB4MjYwLAorICAweDI1ZSwgMHgyNWQsIDB4MjVjLCAweDI1YSwgMHgyNTksIDB4MjU3LCAweDI1NiwgMHgyNTUsCisgIDB4MjUzLCAweDI1MiwgMHgyNTEsIDB4MjRmLCAweDI0ZSwgMHgyNGQsIDB4MjRiLCAweDI0YSwKKyAgMHgyNDksIDB4MjQ3LCAweDI0NiwgMHgyNDUsIDB4MjQzLCAweDI0MiwgMHgyNDEsIDB4MjQwLAorICAweDIzZSwgMHgyM2QsIDB4MjNjLCAweDIzYiwgMHgyMzksIDB4MjM4LCAweDIzNywgMHgyMzYsCisgIDB4MjM0LCAweDIzMywgMHgyMzIsIDB4MjMxLCAweDIzMCwgMHgyMmUsIDB4MjJkLCAweDIyYywKKyAgMHgyMmIsIDB4MjJhLCAweDIyOSwgMHgyMjcsIDB4MjI2LCAweDIyNSwgMHgyMjQsIDB4MjIzLAorICAweDIyMiwgMHgyMjAsIDB4MjFmLCAweDIxZSwgMHgyMWQsIDB4MjFjLCAweDIxYiwgMHgyMWEsCisgIDB4MjE5LCAweDIxOCwgMHgyMTYsIDB4MjE1LCAweDIxNCwgMHgyMTMsIDB4MjEyLCAweDIxMSwKKyAgMHgyMTAsIDB4MjBmLCAweDIwZSwgMHgyMGQsIDB4MjBjLCAweDIwYiwgMHgyMGEsIDB4MjA5LAorICAweDIwOCwgMHgyMDcsIDB4MjA2LCAweDIwNSwgMHgyMDQsIDB4MjAzLCAweDIwMiwgMHgyMDEsCit9OworCisvKiBpdGVyYXRpb246IHogPSAyei0oeioqMilkICovCisKK21wX2xpbWJfdAorbXBuX2ludmVydF9saW1iIChtcF9saW1iX3QgZCkKK3sKKyAgbXBfbGltYl90IHosIHoybCwgejJoLCB0bCwgdGg7CisgIG1wX2xpbWJfdCB4aCwgeGw7CisgIG1wX2xpbWJfdCB6aCwgemw7CisKKyNpZiBHTVBfTElNQl9CSVRTID09IDMyCisgIHogPSBhcHByb3hfdGFiWyhkID4+IDIzKSAtIDB4MTAwXSA8PCA2OwkvKiB6IDwgMl4xNiAqLworCisgIHoybCA9IHogKiB6OwkJCQkJLyogejJsIDwgMl4zMiAqLworICB1bXVsX3BwbW0gKHRoLCB0bCwgejJsLCBkKTsKKyAgeiA9ICh6IDw8IDE3KSAtICh0aCA8PCAxKTsKKyNlbmRpZgorI2lmIEdNUF9MSU1CX0JJVFMgPT0gNjQKKyAgeiA9IGFwcHJveF90YWJbKGQgPj4gNTUpIC0gMHgxMDBdIDw8IDY7CS8qIHogPCAyXjE2ICovCisKKyAgejJsID0geiAqIHo7CQkJCQkvKiB6MmwgPCAyXjMyICovCisgIHRoID0gejJsICogKGQgPj4gMzIpOwkJCQkvKiB0aCA8IDJeNjQgKi8KKyAgeiA9ICh6IDw8IDE3KSAtICh0aCA+PiAzMSk7CQkJLyogeiA8IDJeMzIgKi8KKworICB6MmwgPSB6ICogejsKKyAgdW11bF9wcG1tICh0aCwgdGwsIHoybCwgZCk7CisgIHogPSAoeiA8PCAzMykgLSAodGggPDwgMSk7CisjZW5kaWYKKworICB1bXVsX3BwbW0gKHoyaCwgejJsLCB6LCB6KTsKKyAgdW11bF9wcG1tICh0aCwgdGwsIHoyaCwgZCk7CisgIHVtdWxfcHBtbSAoeGgsIHhsLCB6MmwsIGQpOworICB0bCArPSB4aDsKKyAgdGggKz0gdGwgPCB4aDsKKyAgdGggPSAodGggPDwgMikgfCAodGwgPj4gR01QX0xJTUJfQklUUyAtIDIpOworICB0bCA9IHRsIDw8IDI7CisgIHN1Yl9kZG1tc3MgKHpoLCB6bCwgeiA8PCAyLCAwLCB0aCwgdGwpOworCisgIHVtdWxfcHBtbSAoeGgsIHhsLCBkLCB6aCk7CisgIHhoICs9IGQ7CQkvKiBhZGRfc3NhYWFhICh4aCwgeGwsIHhoLCB4bCwgZCwgMCk7ICovCisgIGlmICh+eGggIT0gMCkKKyAgICB7CisgICAgICBhZGRfc3NhYWFhICh4aCwgeGwsIHhoLCB4bCwgMCwgZCk7CisgICAgICB6aCsrOworICAgIH0KKworICBhZGRfc3NhYWFhICh4aCwgeGwsIHhoLCB4bCwgMCwgZCk7CisgIGlmICh4aCAhPSAwKQorICAgIHpoKys7CisKKyAgcmV0dXJuIHpoOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9jcmF5L2llZWUvbXVsXzEuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vY3JheS9pZWVlL211bF8xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAxMzlmYgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vY3JheS9pZWVlL211bF8xLmMKQEAgLTAsMCArMSwxMDMgQEAKKy8qIENyYXkgUFZQL0lFRUUgbXBuX211bF8xIC0tIG11bHRpcGx5IGEgbGltYiB2ZWN0b3Igd2l0aCBhIGxpbWIgYW5kIHN0b3JlIHRoZQorICAgcmVzdWx0IGluIGEgc2Vjb25kIGxpbWIgdmVjdG9yLgorCitDb3B5cmlnaHQgMjAwMCwgMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworLyogVGhpcyBjb2RlIHJ1bnMgYXQgNSBjeWNsZXMvbGltYiBvbiBhIFQ5MC4gIFRoYXQgd291bGQgcHJvYmFibHkKKyAgIGJlIGhhcmQgdG8gaW1wcm92ZSB1cG9uLCBldmVuIHdpdGggYXNzZW1ibHkgY29kZS4gICovCisKKyNpbmNsdWRlIDxpbnRyaW5zaWNzLmg+CisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworbXBfbGltYl90CittcG5fbXVsXzEgKG1wX3B0ciBycCwgbXBfc3JjcHRyIHVwLCBtcF9zaXplX3QgbiwgbXBfbGltYl90IHZsKQoreworICBtcF9saW1iX3QgY3lbbl07CisgIG1wX2xpbWJfdCBhLCBiLCByLCBzMCwgczEsIGMwLCBjMTsKKyAgbXBfc2l6ZV90IGk7CisgIGludCBtb3JlX2NhcnJpZXM7CisKKyAgaWYgKHVwID09IHJwKQorICAgIHsKKyAgICAgIC8qIFRoZSBhbGdvcml0aG0gdXNlZCBiZWxvdyBjYW5ub3QgaGFuZGxlIG92ZXJsYXAuICBIYW5kbGUgaXQgaGVyZSBieQorCSBtYWtpbmcgYSB0ZW1wb3JhcnkgY29weSBvZiB0aGUgc291cmNlIHZlY3RvciwgdGhlbiBjYWxsIG91cnNlbHZlcy4gICovCisgICAgICBtcF9saW1iX3QgeHBbbl07CisgICAgICBNUE5fQ09QWSAoeHAsIHVwLCBuKTsKKyAgICAgIHJldHVybiBtcG5fbXVsXzEgKHJwLCB4cCwgbiwgdmwpOworICAgIH0KKworICBhID0gdXBbMF0gKiB2bDsKKyAgcnBbMF0gPSBhOworICBjeVswXSA9IDA7CisKKyAgLyogTWFpbiBtdWx0aXBseSBsb29wLiAgR2VuZXJhdGUgYSByYXcgYWNjdW11bGF0ZWQgb3V0cHV0IHByb2R1Y3QgaW4gcnBbXQorICAgICBhbmQgYSBjYXJyeSB2ZWN0b3IgaW4gY3lbXS4gICovCisjcHJhZ21hIF9DUkkgaXZkZXAKKyAgZm9yIChpID0gMTsgaSA8IG47IGkrKykKKyAgICB7CisgICAgICBhID0gdXBbaV0gKiB2bDsKKyAgICAgIGIgPSBfaW50X211bHRfdXBwZXIgKHVwW2kgLSAxXSwgdmwpOworICAgICAgczAgPSBhICsgYjsKKyAgICAgIGMwID0gKChhICYgYikgfCAoKGEgfCBiKSAmIH5zMCkpID4+IDYzOworICAgICAgcnBbaV0gPSBzMDsKKyAgICAgIGN5W2ldID0gYzA7CisgICAgfQorICAvKiBDYXJyeSBhZGQgbG9vcC4gIEFkZCB0aGUgY2FycnkgdmVjdG9yIGN5W10gdG8gdGhlIHJhdyBzdW0gcnBbXSBhbmQKKyAgICAgc3RvcmUgdGhlIG5ldyBzdW0gYmFjayB0byBycFswXS4gICovCisgIG1vcmVfY2FycmllcyA9IDA7CisjcHJhZ21hIF9DUkkgaXZkZXAKKyAgZm9yIChpID0gMjsgaSA8IG47IGkrKykKKyAgICB7CisgICAgICByID0gcnBbaV07CisgICAgICBjMCA9IGN5W2kgLSAxXTsKKyAgICAgIHMwID0gciArIGMwOworICAgICAgcnBbaV0gPSBzMDsKKyAgICAgIGMwID0gKHIgJiB+czApID4+IDYzOworICAgICAgbW9yZV9jYXJyaWVzICs9IGMwOworICAgIH0KKyAgLyogSWYgdGhhdCBzZWNvbmQgbG9vcCBnZW5lcmF0ZWQgY2FycnksIGhhbmRsZSB0aGF0IGluIHNjYWxhciBsb29wLiAgKi8KKyAgaWYgKG1vcmVfY2FycmllcykKKyAgICB7CisgICAgICBtcF9saW1iX3QgY3lyZWMgPSAwOworICAgICAgLyogTG9vayBmb3IgcGxhY2VzIHdoZXJlIHJwW2tdIGlzIHplcm8gYW5kIGN5W2stMV0gaXMgbm9uLXplcm8uCisJIFRoZXNlIGFyZSB3aGVyZSB3ZSBnb3QgYSByZWN1cnJlbmN5IGNhcnJ5LiAgKi8KKyAgICAgIGZvciAoaSA9IDI7IGkgPCBuOyBpKyspCisJeworCSAgciA9IHJwW2ldOworCSAgYzAgPSAociA9PSAwICYmIGN5W2kgLSAxXSAhPSAwKTsKKwkgIHMwID0gciArIGN5cmVjOworCSAgcnBbaV0gPSBzMDsKKwkgIGMxID0gKHIgJiB+czApID4+IDYzOworCSAgY3lyZWMgPSBjMCB8IGMxOworCX0KKyAgICAgIHJldHVybiBfaW50X211bHRfdXBwZXIgKHVwW24gLSAxXSwgdmwpICsgY3lyZWMgKyBjeVtuIC0gMV07CisgICAgfQorCisgIHJldHVybiBfaW50X211bHRfdXBwZXIgKHVwW24gLSAxXSwgdmwpICsgY3lbbiAtIDFdOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9jcmF5L2llZWUvbXVsX2Jhc2VjYXNlLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2NyYXkvaWVlZS9tdWxfYmFzZWNhc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjYyOGY3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9jcmF5L2llZWUvbXVsX2Jhc2VjYXNlLmMKQEAgLTAsMCArMSwxMDcgQEAKKy8qIENyYXkgUFZQL0lFRUUgbXBuX211bF9iYXNlY2FzZS4KKworQ29weXJpZ2h0IDIwMDAsIDIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKy8qIFRoZSBtb3N0IGNyaXRpY2FsIGxvb3Agb2YgdGhpcyBjb2RlIHJ1bnMgYXQgYWJvdXQgNSBjeWNsZXMvbGltYiBvbiBhIFQ5MC4KKyAgIFRoYXQgaXMgbm90IHBlcmZlY3QsIG1haW5seSBkdWUgdG8gdmVjdG9yIHJlZ2lzdGVyIHNob3J0YWdlLiAgKi8KKworI2luY2x1ZGUgPGludHJpbnNpY3MuaD4KKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCit2b2lkCittcG5fbXVsX2Jhc2VjYXNlIChtcF9wdHIgcnAsCisJCSAgbXBfc3JjcHRyIHVwLCBtcF9zaXplX3QgdW4sCisJCSAgbXBfc3JjcHRyIHZwLCBtcF9zaXplX3Qgdm4pCit7CisgIG1wX2xpbWJfdCBjeVt1biArIHZuXTsKKyAgbXBfbGltYl90IHZsOworICBtcF9saW1iX3QgYSwgYiwgciwgczAsIHMxLCBjMCwgYzE7CisgIG1wX3NpemVfdCBpLCBqOworICBpbnQgbW9yZV9jYXJyaWVzOworCisgIGZvciAoaSA9IDA7IGkgPCB1biArIHZuOyBpKyspCisgICAgeworICAgICAgcnBbaV0gPSAwOworICAgICAgY3lbaV0gPSAwOworICAgIH0KKworI3ByYWdtYSBfQ1JJIG5vdmVjdG9yCisgIGZvciAoaiA9IDA7IGogPCB2bjsgaisrKQorICAgIHsKKyAgICAgIHZsID0gdnBbal07CisKKyAgICAgIGEgPSB1cFswXSAqIHZsOworICAgICAgciA9IHJwW2pdOworICAgICAgczAgPSBhICsgcjsKKyAgICAgIHJwW2pdID0gczA7CisgICAgICBjMCA9ICgoYSAmIHIpIHwgKChhIHwgcikgJiB+czApKSA+PiA2MzsKKyAgICAgIGN5W2pdICs9IGMwOworCisjcHJhZ21hIF9DUkkgaXZkZXAKKyAgICAgIGZvciAoaSA9IDE7IGkgPCB1bjsgaSsrKQorCXsKKwkgIGEgPSB1cFtpXSAqIHZsOworCSAgYiA9IF9pbnRfbXVsdF91cHBlciAodXBbaSAtIDFdLCB2bCk7CisJICBzMCA9IGEgKyBiOworCSAgYzAgPSAoKGEgJiBiKSB8ICgoYSB8IGIpICYgfnMwKSkgPj4gNjM7CisJICByID0gcnBbaiArIGldOworCSAgczEgPSBzMCArIHI7CisJICBycFtqICsgaV0gPSBzMTsKKwkgIGMxID0gKChzMCAmIHIpIHwgKChzMCB8IHIpICYgfnMxKSkgPj4gNjM7CisJICBjeVtqICsgaV0gKz0gYzAgKyBjMTsKKwl9CisgICAgICBycFtqICsgdW5dID0gX2ludF9tdWx0X3VwcGVyICh1cFt1biAtIDFdLCB2bCk7CisgICAgfQorCisgIG1vcmVfY2FycmllcyA9IDA7CisjcHJhZ21hIF9DUkkgaXZkZXAKKyAgZm9yIChpID0gMTsgaSA8IHVuICsgdm47IGkrKykKKyAgICB7CisgICAgICByID0gcnBbaV07CisgICAgICBjMCA9IGN5W2kgLSAxXTsKKyAgICAgIHMwID0gciArIGMwOworICAgICAgcnBbaV0gPSBzMDsKKyAgICAgIGMwID0gKHIgJiB+czApID4+IDYzOworICAgICAgbW9yZV9jYXJyaWVzICs9IGMwOworICAgIH0KKyAgLyogSWYgdGhhdCBzZWNvbmQgbG9vcCBnZW5lcmF0ZWQgY2FycnksIGhhbmRsZSB0aGF0IGluIHNjYWxhciBsb29wLiAgKi8KKyAgaWYgKG1vcmVfY2FycmllcykKKyAgICB7CisgICAgICBtcF9saW1iX3QgY3lyZWMgPSAwOworICAgICAgZm9yIChpID0gMTsgaSA8IHVuICsgdm47IGkrKykKKwl7CisJICByID0gcnBbaV07CisJICBjMCA9IChyIDwgY3lbaSAtIDFdKTsKKwkgIHMwID0gciArIGN5cmVjOworCSAgcnBbaV0gPSBzMDsKKwkgIGMxID0gKHIgJiB+czApID4+IDYzOworCSAgY3lyZWMgPSBjMCB8IGMxOworCX0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2NyYXkvaWVlZS9zcXJfYmFzZWNhc2UuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vY3JheS9pZWVlL3Nxcl9iYXNlY2FzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZDRlNTYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2NyYXkvaWVlZS9zcXJfYmFzZWNhc2UuYwpAQCAtMCwwICsxLDEwNSBAQAorLyogQ3JheSBQVlAvSUVFRSBtcG5fc3FyX2Jhc2VjYXNlLgorCitDb3B5cmlnaHQgMjAwMCwgMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworLyogVGhpcyBpcyBqdXN0IG1wbl9tdWxfYmFzZWNhc2Ugd2l0aCB0cml2aWFsIG1vZGlmaWNhdGlvbnMuICAqLworCisjaW5jbHVkZSA8aW50cmluc2ljcy5oPgorI2luY2x1ZGUgImdtcC1pbXBsLmgiCisKK3ZvaWQKK21wbl9zcXJfYmFzZWNhc2UgKG1wX3B0ciBycCwKKwkJICBtcF9zcmNwdHIgdXAsIG1wX3NpemVfdCB1bikKK3sKKyAgbXBfbGltYl90IGN5W3VuICsgdW5dOworICBtcF9saW1iX3QgdWw7CisgIG1wX2xpbWJfdCBhLCBiLCByLCBzMCwgczEsIGMwLCBjMTsKKyAgbXBfc2l6ZV90IGksIGo7CisgIGludCBtb3JlX2NhcnJpZXM7CisKKyAgZm9yIChpID0gMDsgaSA8IHVuICsgdW47IGkrKykKKyAgICB7CisgICAgICBycFtpXSA9IDA7CisgICAgICBjeVtpXSA9IDA7CisgICAgfQorCisjcHJhZ21hIF9DUkkgbm92ZWN0b3IKKyAgZm9yIChqID0gMDsgaiA8IHVuOyBqKyspCisgICAgeworICAgICAgdWwgPSB1cFtqXTsKKworICAgICAgYSA9IHVwWzBdICogdWw7CisgICAgICByID0gcnBbal07CisgICAgICBzMCA9IGEgKyByOworICAgICAgcnBbal0gPSBzMDsKKyAgICAgIGMwID0gKChhICYgcikgfCAoKGEgfCByKSAmIH5zMCkpID4+IDYzOworICAgICAgY3lbal0gKz0gYzA7CisKKyNwcmFnbWEgX0NSSSBpdmRlcAorICAgICAgZm9yIChpID0gMTsgaSA8IHVuOyBpKyspCisJeworCSAgYSA9IHVwW2ldICogdWw7CisJICBiID0gX2ludF9tdWx0X3VwcGVyICh1cFtpIC0gMV0sIHVsKTsKKwkgIHMwID0gYSArIGI7CisJICBjMCA9ICgoYSAmIGIpIHwgKChhIHwgYikgJiB+czApKSA+PiA2MzsKKwkgIHIgPSBycFtqICsgaV07CisJICBzMSA9IHMwICsgcjsKKwkgIHJwW2ogKyBpXSA9IHMxOworCSAgYzEgPSAoKHMwICYgcikgfCAoKHMwIHwgcikgJiB+czEpKSA+PiA2MzsKKwkgIGN5W2ogKyBpXSArPSBjMCArIGMxOworCX0KKyAgICAgIHJwW2ogKyB1bl0gPSBfaW50X211bHRfdXBwZXIgKHVwW3VuIC0gMV0sIHVsKTsKKyAgICB9CisKKyAgbW9yZV9jYXJyaWVzID0gMDsKKyNwcmFnbWEgX0NSSSBpdmRlcAorICBmb3IgKGkgPSAxOyBpIDwgdW4gKyB1bjsgaSsrKQorICAgIHsKKyAgICAgIHIgPSBycFtpXTsKKyAgICAgIGMwID0gY3lbaSAtIDFdOworICAgICAgczAgPSByICsgYzA7CisgICAgICBycFtpXSA9IHMwOworICAgICAgYzAgPSAociAmIH5zMCkgPj4gNjM7CisgICAgICBtb3JlX2NhcnJpZXMgKz0gYzA7CisgICAgfQorICAvKiBJZiB0aGF0IHNlY29uZCBsb29wIGdlbmVyYXRlZCBjYXJyeSwgaGFuZGxlIHRoYXQgaW4gc2NhbGFyIGxvb3AuICAqLworICBpZiAobW9yZV9jYXJyaWVzKQorICAgIHsKKyAgICAgIG1wX2xpbWJfdCBjeXJlYyA9IDA7CisgICAgICBmb3IgKGkgPSAxOyBpIDwgdW4gKyB1bjsgaSsrKQorCXsKKwkgIHIgPSBycFtpXTsKKwkgIGMwID0gKHIgPCBjeVtpIC0gMV0pOworCSAgczAgPSByICsgY3lyZWM7CisJICBycFtpXSA9IHMwOworCSAgYzEgPSAociAmIH5zMCkgPj4gNjM7CisJICBjeXJlYyA9IGMwIHwgYzE7CisJfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vY3JheS9pZWVlL3N1Ym11bF8xLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2NyYXkvaWVlZS9zdWJtdWxfMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiM2NhMjEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2NyYXkvaWVlZS9zdWJtdWxfMS5jCkBAIC0wLDAgKzEsMTExIEBACisvKiBDcmF5IFBWUC9JRUVFIG1wbl9zdWJtdWxfMSAtLSBtdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYSBsaW1iIGFuZAorICAgc3VidHJhY3QgdGhlIHJlc3VsdCBmcm9tIGEgc2Vjb25kIGxpbWIgdmVjdG9yLgorCitDb3B5cmlnaHQgMjAwMC0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisvKiBUaGlzIGNvZGUgcnVucyBhdCBqdXN0IHVuZGVyIDkgY3ljbGVzL2xpbWIgb24gYSBUOTAuICBUaGF0IGlzIG5vdCBwZXJmZWN0LAorICAgbWFpbmx5IGR1ZSB0byB2ZWN0b3IgcmVnaXN0ZXIgc2hvcnRhZ2UgaW4gdGhlIG1haW4gbG9vcC4gIEFzc2VtYmx5IGNvZGUKKyAgIHNob3VsZCBicmluZyBpdCBkb3duIHRvIHBlcmhhcHMgNyBjeWNsZXMvbGltYi4gICovCisKKyNpbmNsdWRlIDxpbnRyaW5zaWNzLmg+CisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworbXBfbGltYl90CittcG5fc3VibXVsXzEgKG1wX3B0ciBycCwgbXBfc3JjcHRyIHVwLCBtcF9zaXplX3QgbiwgbXBfbGltYl90IHZsKQoreworICBtcF9saW1iX3QgY3lbbl07CisgIG1wX2xpbWJfdCBhLCBiLCByLCBzMCwgczEsIGMwLCBjMTsKKyAgbXBfc2l6ZV90IGk7CisgIGludCBtb3JlX2NhcnJpZXM7CisKKyAgaWYgKHVwID09IHJwKQorICAgIHsKKyAgICAgIC8qIFRoZSBhbGdvcml0aG0gdXNlZCBiZWxvdyBjYW5ub3QgaGFuZGxlIG92ZXJsYXAuICBIYW5kbGUgaXQgaGVyZSBieQorCSBtYWtpbmcgYSB0ZW1wb3JhcnkgY29weSBvZiB0aGUgc291cmNlIHZlY3RvciwgdGhlbiBjYWxsIG91cnNlbHZlcy4gICovCisgICAgICBtcF9saW1iX3QgeHBbbl07CisgICAgICBNUE5fQ09QWSAoeHAsIHVwLCBuKTsKKyAgICAgIHJldHVybiBtcG5fc3VibXVsXzEgKHJwLCB4cCwgbiwgdmwpOworICAgIH0KKworICBhID0gdXBbMF0gKiB2bDsKKyAgciA9IHJwWzBdOworICBzMCA9IHIgLSBhOworICBycFswXSA9IHMwOworICBjMSA9ICgoczAgJiBhKSB8ICgoczAgfCBhKSAmIH5yKSkgPj4gNjM7CisgIGN5WzBdID0gYzE7CisKKyAgLyogTWFpbiBtdWx0aXBseSBsb29wLiAgR2VuZXJhdGUgYSByYXcgYWNjdW11bGF0ZWQgb3V0cHV0IHByb2R1Y3QgaW4gcnBbXQorICAgICBhbmQgYSBjYXJyeSB2ZWN0b3IgaW4gY3lbXS4gICovCisjcHJhZ21hIF9DUkkgaXZkZXAKKyAgZm9yIChpID0gMTsgaSA8IG47IGkrKykKKyAgICB7CisgICAgICBhID0gdXBbaV0gKiB2bDsKKyAgICAgIGIgPSBfaW50X211bHRfdXBwZXIgKHVwW2kgLSAxXSwgdmwpOworICAgICAgczAgPSBhICsgYjsKKyAgICAgIGMwID0gKChhICYgYikgfCAoKGEgfCBiKSAmIH5zMCkpID4+IDYzOworICAgICAgciA9IHJwW2ldOworICAgICAgczEgPSByIC0gczA7CisgICAgICBycFtpXSA9IHMxOworICAgICAgYzEgPSAoKHMxICYgczApIHwgKChzMSB8IHMwKSAmIH5yKSkgPj4gNjM7CisgICAgICBjeVtpXSA9IGMwICsgYzE7CisgICAgfQorICAvKiBDYXJyeSBzdWJ0cmFjdCBsb29wLiAgU3VidHJhY3QgdGhlIGNhcnJ5IHZlY3RvciBjeVtdIGZyb20gdGhlIHJhdyByZXN1bHQKKyAgICAgcnBbXSBhbmQgc3RvcmUgdGhlIG5ldyByZXN1bHQgYmFjayB0byBycFtdLiAgKi8KKyAgbW9yZV9jYXJyaWVzID0gMDsKKyNwcmFnbWEgX0NSSSBpdmRlcAorICBmb3IgKGkgPSAxOyBpIDwgbjsgaSsrKQorICAgIHsKKyAgICAgIHIgPSBycFtpXTsKKyAgICAgIGMwID0gY3lbaSAtIDFdOworICAgICAgczAgPSByIC0gYzA7CisgICAgICBycFtpXSA9IHMwOworICAgICAgYzAgPSAoczAgJiB+cikgPj4gNjM7CisgICAgICBtb3JlX2NhcnJpZXMgKz0gYzA7CisgICAgfQorICAvKiBJZiB0aGF0IHNlY29uZCBsb29wIGdlbmVyYXRlZCBjYXJyeSwgaGFuZGxlIHRoYXQgaW4gc2NhbGFyIGxvb3AuICAqLworICBpZiAobW9yZV9jYXJyaWVzKQorICAgIHsKKyAgICAgIG1wX2xpbWJfdCBjeXJlYyA9IDA7CisgICAgICAvKiBMb29rIGZvciBwbGFjZXMgd2hlcmUgcnBba10gPT0gfjAgYW5kIGN5W2stMV0gPT0gMSBvcgorCSBycFtrXSA9PSB+MSBhbmQgY3lbay0xXSA9PSAyLgorCSBUaGVzZSBhcmUgd2hlcmUgd2UgZ290IGEgcmVjdXJyZW5jeSBjYXJyeS4gICovCisgICAgICBmb3IgKGkgPSAxOyBpIDwgbjsgaSsrKQorCXsKKwkgIHIgPSBycFtpXTsKKwkgIGMwID0gfnIgPCBjeVtpIC0gMV07CisJICBzMCA9IHIgLSBjeXJlYzsKKwkgIHJwW2ldID0gczA7CisJICBjMSA9IChzMCAmIH5yKSA+PiA2MzsKKwkgIGN5cmVjID0gYzAgfCBjMTsKKwl9CisgICAgICByZXR1cm4gX2ludF9tdWx0X3VwcGVyICh1cFtuIC0gMV0sIHZsKSArIGN5cmVjICsgY3lbbiAtIDFdOworICAgIH0KKworICByZXR1cm4gX2ludF9tdWx0X3VwcGVyICh1cFtuIC0gMV0sIHZsKSArIGN5W24gLSAxXTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vY3JheS9sc2hpZnQuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vY3JheS9sc2hpZnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTM0ZTkzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9jcmF5L2xzaGlmdC5jCkBAIC0wLDAgKzEsNTggQEAKKy8qIG1wbl9sc2hpZnQgLS0gU2hpZnQgbGVmdCBsb3cgbGV2ZWwgZm9yIENyYXkgdmVjdG9yIHByb2Nlc3NvcnMuCisKK0NvcHlyaWdodCAoQykgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgPGludHJpbnNpY3MuaD4KKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCittcF9saW1iX3QKK21wbl9sc2hpZnQgKG1wX3B0ciB3cCwgbXBfc3JjcHRyIHVwLCBtcF9zaXplX3QgbiwgdW5zaWduZWQgaW50IGNudCkKK3sKKyAgdW5zaWduZWQgc2hfMSwgc2hfMjsKKyAgbXBfc2l6ZV90IGk7CisgIG1wX2xpbWJfdCByZXR2YWw7CisKKyAgc2hfMSA9IGNudDsKKyAgc2hfMiA9IEdNUF9MSU1CX0JJVFMgLSBzaF8xOworICByZXR2YWwgPSB1cFtuIC0gMV0gPj4gc2hfMjsKKworI3ByYWdtYSBfQ1JJIGl2ZGVwCisgIGZvciAoaSA9IG4gLSAxOyBpID4gMDsgaS0tKQorICAgIHsKKyNpZiAxCisgICAgICB3cFtpXSA9ICh1cFtpXSA8PCBzaF8xKSB8ICh1cFtpIC0gMV0gPj4gc2hfMik7CisjZWxzZQorICAgICAgLyogVGhpcyBpcyB0aGUgcmVjb21tZW5kZWQgd2F5LCBidXQgYXQgbGVhc3Qgb24gU1YxIGl0IGlzIHNsb3dlci4gICovCisgICAgICB3cFtpXSA9IF9kc2hpZnRsICh1cFtpXSwgdXBbaSAtIDFdLCBzaF8xKTsKKyNlbmRpZgorICAgIH0KKworICB3cFswXSA9IHVwWzBdIDw8IHNoXzE7CisgIHJldHVybiByZXR2YWw7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2NyYXkvbXVsd3cuZiBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vY3JheS9tdWx3dy5mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ODVkZmMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2NyYXkvbXVsd3cuZgpAQCAtMCwwICsxLDYzIEBACitjICAgIEhlbHBlciBmb3IgbXBuX211bF8xLCBtcG5fYWRkbXVsXzEsIGFuZCBtcG5fc3VibXVsXzEgZm9yIENyYXkgUFZQLgorCitjICAgIENvcHlyaWdodCAxOTk2LCAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitjICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2MKK2MgICAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2MgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2MKK2MgICAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitjICAgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorYyAgICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2MKK2MgICAgb3IKK2MKK2MgICAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2MgICAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitjICAgICAgICBsYXRlciB2ZXJzaW9uLgorYworYyAgICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorYworYyAgICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitjICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitjICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYyAgICBmb3IgbW9yZSBkZXRhaWxzLgorYworYyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitjICAgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2MgICAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitjICAgIHAxW10gPSBoaShhW10qcyk7IHRoZSB1cHBlciBsaW1icyBvZiBlYWNoIHByb2R1Y3QKK2MgICAgcDBbXSA9IGxvdyhhW10qcyk7IHRoZSBjb3JyZXNwb25kaW5nIGxvd2VyIGxpbWJzCitjICAgIG4gaXMgbnVtYmVyIG9mIGxpbWJzIGluIHRoZSB2ZWN0b3JzCisKKyAgICAgIHN1YnJvdXRpbmUgZ21wbl9tdWx3dyhwMSxwMCxhLG4scykKKyAgICAgIGludGVnZXIqOCBwMSgwOiopLHAwKDA6KiksYSgwOiopLHMKKyAgICAgIGludGVnZXIgbgorCisgICAgICBpbnRlZ2VyKjggYTAsYTEsYTIsczAsczEsczIsYworICAgICAgaW50ZWdlcio4IGFpLHQwLHQxLHQyLHQzLHQ0CisKKyAgICAgIHMwID0gc2hpZnRsKGFuZChzLDQxOTQzMDMpLDI0KQorICAgICAgczEgPSBzaGlmdGwoYW5kKHNoaWZ0cihzLDIyKSw0MTk0MzAzKSwyNCkKKyAgICAgIHMyID0gc2hpZnRsKGFuZChzaGlmdHIocyw0NCksNDE5NDMwMyksMjQpCisKKyAgICAgIGRvIGkgPSAwLG4tMQorICAgICAgICAgYWkgPSBhKGkpCisgICAgICAgICBhMCA9IHNoaWZ0bChhbmQoYWksNDE5NDMwMyksMjQpCisgICAgICAgICBhMSA9IHNoaWZ0bChhbmQoc2hpZnRyKGFpLDIyKSw0MTk0MzAzKSwyNCkKKyAgICAgICAgIGEyID0gc2hpZnRsKGFuZChzaGlmdHIoYWksNDQpLDQxOTQzMDMpLDI0KQorCisgICAgICAgICB0MCA9IGkyNG11bHQoYTAsczApCisgICAgICAgICB0MSA9IGkyNG11bHQoYTAsczEpK2kyNG11bHQoYTEsczApCisgICAgICAgICB0MiA9IGkyNG11bHQoYTAsczIpK2kyNG11bHQoYTEsczEpK2kyNG11bHQoYTIsczApCisgICAgICAgICB0MyA9IGkyNG11bHQoYTEsczIpK2kyNG11bHQoYTIsczEpCisgICAgICAgICB0NCA9IGkyNG11bHQoYTIsczIpCisKKyAgICAgICAgIHAwKGkpPXNoaWZ0bCh0Miw0NCkrc2hpZnRsKHQxLDIyKSt0MAorICAgICAgICAgYz1zaGlmdHIoc2hpZnRyKHQwLDIyKSthbmQodDEsNDM5ODA0NjUxMTEwMykrCisgICAgICQgICAgICAgIHNoaWZ0bChhbmQodDIsMTA0ODU3NSksMjIpLDQyKQorICAgICAgICAgcDEoaSk9c2hpZnRsKHQ0LDI0KStzaGlmdGwodDMsMikrc2hpZnRyKHQyLDIwKStzaGlmdHIodDEsNDIpK2MKKyAgICAgIGVuZCBkbworICAgICAgZW5kCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2NyYXkvcG9wY291bnQuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vY3JheS9wb3Bjb3VudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3OTIxMWYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2NyYXkvcG9wY291bnQuYwpAQCAtMCwwICsxLDQyIEBACisvKiBDcmF5IG1wbl9wb3Bjb3VudCAtLSBwb3B1bGF0aW9uIGNvdW50LgorCitDb3B5cmlnaHQgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgPGludHJpbnNpY3MuaD4KKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCit1bnNpZ25lZCBsb25nIGludAorbXBuX3BvcGNvdW50IChtcF9zcmNwdHIgcCwgbXBfc2l6ZV90IG4pCit7CisgIHVuc2lnbmVkIGxvbmcgaW50IHJlc3VsdCA9IDA7CisgIG1wX3NpemVfdCBpOworICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorICAgIHJlc3VsdCArPSBfcG9wY250IChwW2ldKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vY3JheS9yc2hpZnQuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vY3JheS9yc2hpZnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzRhYTIyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9jcmF5L3JzaGlmdC5jCkBAIC0wLDAgKzEsNTggQEAKKy8qIG1wbl9yc2hpZnQgLS0gU2hpZnQgcmlnaHQgbG93IGxldmVsIGZvciBDcmF5IHZlY3RvciBwcm9jZXNzb3JzLgorCitDb3B5cmlnaHQgKEMpIDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlIDxpbnRyaW5zaWNzLmg+CisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworbXBfbGltYl90CittcG5fcnNoaWZ0IChtcF9wdHIgd3AsIG1wX3NyY3B0ciB1cCwgbXBfc2l6ZV90IG4sIHVuc2lnbmVkIGludCBjbnQpCit7CisgIHVuc2lnbmVkIHNoXzEsIHNoXzI7CisgIG1wX3NpemVfdCBpOworICBtcF9saW1iX3QgcmV0dmFsOworCisgIHNoXzEgPSBjbnQ7CisgIHNoXzIgPSBHTVBfTElNQl9CSVRTIC0gc2hfMTsKKyAgcmV0dmFsID0gdXBbMF0gPDwgc2hfMjsKKworI3ByYWdtYSBfQ1JJIGl2ZGVwCisgIGZvciAoaSA9IDA7IGkgPCBuIC0gMTsgaSsrKQorICAgIHsKKyNpZiAxCisgICAgICB3cFtpXSA9ICh1cFtpXSA+PiBzaF8xKSB8ICh1cFtpICsgMV0gPDwgc2hfMik7CisjZWxzZQorICAgICAgLyogVGhpcyBpcyB0aGUgcmVjb21tZW5kZWQgd2F5LCBidXQgYXQgbGVhc3Qgb24gU1YxIGl0IGlzIHNsb3dlci4gICovCisgICAgICB3cFtpXSA9IF9kc2hpZnRyICh1cFtpICsgMV0sIHVwW2ldLCBzaF8xKTsKKyNlbmRpZgorICAgIH0KKworICB3cFtuIC0gMV0gPSB1cFtuIC0gMV0gPj4gc2hfMTsKKyAgcmV0dXJuIHJldHZhbDsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vY3JheS9zdWJfbi5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9jcmF5L3N1Yl9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUxODc2NAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vY3JheS9zdWJfbi5jCkBAIC0wLDAgKzEsOTAgQEAKKy8qIENyYXkgUFZQIG1wbl9zdWJfbiAtLSBzdWJ0cmFjdCB0d28gbGltYiB2ZWN0b3JzIGFuZCBzdG9yZSB0aGVpciBkaWZmZXJlbmNlCisgICBpbiBhIHRoaXJkIGxpbWIgdmVjdG9yLgorCitDb3B5cmlnaHQgMTk5NiwgMjAwMCwgMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworLyogVGhpcyBjb2RlIHJ1bnMgYXQgNCBjeWNsZXMvbGltYi4gIEl0IG1heSBiZSBwb3NzaWJsZSB0byBicmluZyBpdCBkb3duCisgICB0byAzIGN5Y2xlcy9saW1iLiAgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisKK21wX2xpbWJfdAorbXBuX3N1Yl9uIChtcF9wdHIgcnAsIG1wX3NyY3B0ciB1cCwgbXBfc3JjcHRyIHZwLCBtcF9zaXplX3QgbikKK3sKKyAgbXBfbGltYl90IGN5W25dOworICBtcF9saW1iX3QgYSwgYiwgciwgczAsIGMwLCBjMTsKKyAgbXBfc2l6ZV90IGk7CisgIGludCBtb3JlX2NhcnJpZXM7CisKKyAgLyogTWFpbiBzdWJ0cmFjdCBsb29wLiAgR2VuZXJhdGUgYSByYXcgb3V0cHV0IGRpZmZlcmVuY2UgaW4gcnBbXSBhbmQgYQorICAgICBib3Jyb3cgdmVjdG9yIGluIGN5W10uICAqLworI3ByYWdtYSBfQ1JJIGl2ZGVwCisgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisgICAgeworICAgICAgYSA9IHVwW2ldOworICAgICAgYiA9IHZwW2ldOworICAgICAgczAgPSBhIC0gYjsJCS8qIGEgPSBzMCArIGIgKi8KKyAgICAgIHJwW2ldID0gczA7CisgICAgICBjMCA9ICgoczAgJiBiKSB8ICgoczAgfCBiKSAmIH5hKSkgPj4gNjM7CisgICAgICBjeVtpXSA9IGMwOworICAgIH0KKyAgLyogQm9ycm93IHN1YnRyYWN0IGxvb3AuICBTdWJ0cmFjdCB0aGUgYm9ycm93IHZlY3RvciBjeVtdIGZyb20gdGhlIHJhdworICAgICBkaWZmZXJlbmNlIHJwW10gYW5kIHN0b3JlIHRoZSBuZXcgZGlmZmVyZW5jZSBiYWNrIHRvIHJwWzBdLiAgSWYgdGhpcworICAgICBnZW5lcmF0ZXMgZnVydGhlciBib3Jyb3csIHNldCBtb3JlX2NhcnJpZXMuICAqLworICBtb3JlX2NhcnJpZXMgPSAwOworI3ByYWdtYSBfQ1JJIGl2ZGVwCisgIGZvciAoaSA9IDE7IGkgPCBuOyBpKyspCisgICAgeworICAgICAgciA9IHJwW2ldOworICAgICAgYzAgPSBjeVtpIC0gMV07CisgICAgICBzMCA9IHIgLSBjMDsJCS8qIHIgPSBzMCArIGMwICovCisgICAgICBycFtpXSA9IHMwOworICAgICAgYzAgPSAoczAgJiB+cikgPj4gNjM7CisgICAgICBtb3JlX2NhcnJpZXMgKz0gYzA7CisgICAgfQorICAvKiBJZiB0aGF0IHNlY29uZCBsb29wIGdlbmVyYXRlZCBib3Jyb3csIGhhbmRsZSB0aGF0IGluIHNjYWxhciBsb29wLiAgKi8KKyAgaWYgKG1vcmVfY2FycmllcykKKyAgICB7CisgICAgICBtcF9saW1iX3QgY3lyZWMgPSAwOworICAgICAgLyogTG9vayBmb3IgcGxhY2VzIHdoZXJlIHJwW2tdIGNvbnRhaW5zIGp1c3Qgb25lcyBhbmQgY3lbay0xXSBpcworCSBub24temVyby4gIFRoZXNlIGFyZSB3aGVyZSB3ZSBnb3QgYSByZWN1cnJlbmN5IGJvcnJvdy4gICovCisgICAgICBmb3IgKGkgPSAxOyBpIDwgbjsgaSsrKQorCXsKKwkgIHIgPSBycFtpXTsKKwkgIGMwID0gKH5yID09IDAgJiYgY3lbaSAtIDFdICE9IDApOworCSAgczAgPSByIC0gY3lyZWM7CisJICBycFtpXSA9IHMwOworCSAgYzEgPSAoczAgJiB+cikgPj4gNjM7CisJICBjeXJlYyA9IGMwIHwgYzE7CisJfQorICAgICAgcmV0dXJuIGN5cmVjIHwgY3lbbiAtIDFdOworICAgIH0KKworICByZXR1cm4gY3lbbiAtIDFdOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2FkZC5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2FkZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNmUzYmEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvYWRkLmMKQEAgLTAsMCArMSwzMyBAQAorLyogbXBuX2FkZCAtIGFkZCBtcG4gdG8gbXBuLgorCitDb3B5cmlnaHQgMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2RlZmluZSBfX0dNUF9GT1JDRV9tcG5fYWRkIDEKKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvYWRkXzEuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9hZGRfMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NDVhZWQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvYWRkXzEuYwpAQCAtMCwwICsxLDMzIEBACisvKiBtcG5fYWRkXzEgLSBhZGQgbGltYiB0byBtcG4uCisKK0NvcHlyaWdodCAyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIF9fR01QX0ZPUkNFX21wbl9hZGRfMSAxCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2FkZF9lcnIxX24uYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9hZGRfZXJyMV9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI0N2YxOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9hZGRfZXJyMV9uLmMKQEAgLTAsMCArMSwxMDAgQEAKKy8qIG1wbl9hZGRfZXJyMV9uIC0tIGFkZF9uIHdpdGggb25lIGVycm9yIHRlcm0KKworICAgQ29udHJpYnV0ZWQgYnkgRGF2aWQgSGFydmV5LgorCisgICBUSEUgRlVOQ1RJT04gSU4gVEhJUyBGSUxFIElTIElOVEVSTkFMIFdJVEggQSBNVVRBQkxFIElOVEVSRkFDRS4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggSVQgVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuICBJTiBGQUNULCBJVCBJUyBBTE1PU1QKKyAgIEdVQVJBTlRFRUQgVEhBVCBJVCdMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEgRlVUVVJFIEdOVSBNUCBSRUxFQVNFLgorCitDb3B5cmlnaHQgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisKKy8qCisgIENvbXB1dGVzOgorCisgICgxKSB7cnAsbn0gOj0ge3VwLG59ICsge3ZwLG59IChqdXN0IGxpa2UgbXBuX2FkZF9uKSB3aXRoIGluY29taW5nIGNhcnJ5IGN5LAorICByZXR1cm4gdmFsdWUgaXMgY2Fycnkgb3V0LgorCisgICgyKSBMZXQgY1tpKzFdID0gY2FycnkgZnJvbSBpLXRoIGxpbWIgYWRkaXRpb24gKGNbMF0gPSBjeSkuCisgIENvbXB1dGVzIGNbMV0qeXBbbi0xXSArIC4uLiArIGNbbl0qeXBbMF0sIHN0b3JlcyB0d28tbGltYiByZXN1bHQgYXQgZXAuCisKKyAgUmVxdWlyZXMgbiA+PSAxLgorCisgIE5vbmUgb2YgdGhlIG91dHB1dHMgbWF5IG92ZXJsYXAgZWFjaCBvdGhlciBvciBhbnkgb2YgdGhlIGlucHV0cywgZXhjZXB0CisgIHRoYXQge3JwLG59IG1heSBiZSBlcXVhbCB0byB7dXAsbn0gb3Ige3ZwLG59LgorKi8KK21wX2xpbWJfdAorbXBuX2FkZF9lcnIxX24gKG1wX3B0ciBycCwgbXBfc3JjcHRyIHVwLCBtcF9zcmNwdHIgdnAsCisJCW1wX3B0ciBlcCwgbXBfc3JjcHRyIHlwLAorICAgICAgICAgICAgICAgIG1wX3NpemVfdCBuLCBtcF9saW1iX3QgY3kpCit7CisgIG1wX2xpbWJfdCBlbCwgZWgsIHVsLCB2bCwgeWwsIHpsLCBybCwgc2wsIGN5MSwgY3kyOworCisgIEFTU0VSVCAobiA+PSAxKTsKKyAgQVNTRVJUIChNUE5fU0FNRV9PUl9TRVBBUkFURV9QIChycCwgdXAsIG4pKTsKKyAgQVNTRVJUIChNUE5fU0FNRV9PUl9TRVBBUkFURV9QIChycCwgdnAsIG4pKTsKKyAgQVNTRVJUICghIE1QTl9PVkVSTEFQX1AgKHJwLCBuLCB5cCwgbikpOworICBBU1NFUlQgKCEgTVBOX09WRVJMQVBfUCAoZXAsIDIsIHVwLCBuKSk7CisgIEFTU0VSVCAoISBNUE5fT1ZFUkxBUF9QIChlcCwgMiwgdnAsIG4pKTsKKyAgQVNTRVJUICghIE1QTl9PVkVSTEFQX1AgKGVwLCAyLCB5cCwgbikpOworICBBU1NFUlQgKCEgTVBOX09WRVJMQVBfUCAoZXAsIDIsIHJwLCBuKSk7CisKKyAgeXAgKz0gbiAtIDE7CisgIGVsID0gZWggPSAwOworCisgIGRvCisgICAgeworICAgICAgeWwgPSAqeXAtLTsKKyAgICAgIHVsID0gKnVwKys7CisgICAgICB2bCA9ICp2cCsrOworCisgICAgICAvKiBvcmRpbmFyeSBhZGRfbiAqLworICAgICAgQUREQ19MSU1CIChjeTEsIHNsLCB1bCwgdmwpOworICAgICAgQUREQ19MSU1CIChjeTIsIHJsLCBzbCwgY3kpOworICAgICAgY3kgPSBjeTEgfCBjeTI7CisgICAgICAqcnArKyA9IHJsOworCisgICAgICAvKiB1cGRhdGUgKGVoOmVsKSAqLworICAgICAgemwgPSAoLWN5KSAmIHlsOworICAgICAgZWwgKz0gemw7CisgICAgICBlaCArPSBlbCA8IHpsOworICAgIH0KKyAgd2hpbGUgKC0tbik7CisKKyNpZiBHTVBfTkFJTF9CSVRTICE9IDAKKyAgZWggPSAoZWggPDwgR01QX05BSUxfQklUUykgKyAoZWwgPj4gR01QX05VTUJfQklUUyk7CisgIGVsICY9IEdNUF9OVU1CX01BU0s7CisjZW5kaWYKKworICBlcFswXSA9IGVsOworICBlcFsxXSA9IGVoOworCisgIHJldHVybiBjeTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9hZGRfZXJyMl9uLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvYWRkX2VycjJfbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ODRkNmQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvYWRkX2VycjJfbi5jCkBAIC0wLDAgKzEsMTE2IEBACisvKiBtcG5fYWRkX2VycjJfbiAtLSBhZGRfbiB3aXRoIHR3byBlcnJvciB0ZXJtcworCisgICBDb250cmlidXRlZCBieSBEYXZpZCBIYXJ2ZXkuCisKKyAgIFRIRSBGVU5DVElPTiBJTiBUSElTIEZJTEUgSVMgSU5URVJOQUwgV0lUSCBBIE1VVEFCTEUgSU5URVJGQUNFLiAgSVQgSVMgT05MWQorICAgU0FGRSBUTyBSRUFDSCBJVCBUSFJPVUdIIERPQ1VNRU5URUQgSU5URVJGQUNFUy4gIElOIEZBQ1QsIElUIElTIEFMTU9TVAorICAgR1VBUkFOVEVFRCBUSEFUIElUJ0xMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR05VIE1QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworLyoKKyAgQ29tcHV0ZXM6CisKKyAgKDEpIHtycCxufSA6PSB7dXAsbn0gKyB7dnAsbn0gKGp1c3QgbGlrZSBtcG5fYWRkX24pIHdpdGggaW5jb21pbmcgY2FycnkgY3ksCisgIHJldHVybiB2YWx1ZSBpcyBjYXJyeSBvdXQuCisKKyAgKDIpIExldCBjW2krMV0gPSBjYXJyeSBmcm9tIGktdGggbGltYiBhZGRpdGlvbiAoY1swXSA9IGN5KS4KKyAgQ29tcHV0ZXMgY1sxXSp5cDFbbi0xXSArIC4uLiArIGNbbl0qeXAxWzBdLAorICAgICAgICAgICBjWzFdKnlwMltuLTFdICsgLi4uICsgY1tuXSp5cDJbMF0sCisgIHN0b3JlcyB0d28tbGltYiByZXN1bHRzIGF0IHtlcCwyfSBhbmQge2VwKzIsMn0gcmVzcGVjdGl2ZWx5LgorCisgIFJlcXVpcmVzIG4gPj0gMS4KKworICBOb25lIG9mIHRoZSBvdXRwdXRzIG1heSBvdmVybGFwIGVhY2ggb3RoZXIgb3IgYW55IG9mIHRoZSBpbnB1dHMsIGV4Y2VwdAorICB0aGF0IHtycCxufSBtYXkgYmUgZXF1YWwgdG8ge3VwLG59IG9yIHt2cCxufS4KKyovCittcF9saW1iX3QKK21wbl9hZGRfZXJyMl9uIChtcF9wdHIgcnAsIG1wX3NyY3B0ciB1cCwgbXBfc3JjcHRyIHZwLAorICAgICAgICAgICAgICAgIG1wX3B0ciBlcCwgbXBfc3JjcHRyIHlwMSwgbXBfc3JjcHRyIHlwMiwKKyAgICAgICAgICAgICAgICBtcF9zaXplX3QgbiwgbXBfbGltYl90IGN5KQoreworICBtcF9saW1iX3QgZWwxLCBlaDEsIGVsMiwgZWgyLCB1bCwgdmwsIHlsMSwgeWwyLCB6bDEsIHpsMiwgcmwsIHNsLCBjeTEsIGN5MjsKKworICBBU1NFUlQgKG4gPj0gMSk7CisgIEFTU0VSVCAoTVBOX1NBTUVfT1JfU0VQQVJBVEVfUCAocnAsIHVwLCBuKSk7CisgIEFTU0VSVCAoTVBOX1NBTUVfT1JfU0VQQVJBVEVfUCAocnAsIHZwLCBuKSk7CisgIEFTU0VSVCAoISBNUE5fT1ZFUkxBUF9QIChycCwgbiwgeXAxLCBuKSk7CisgIEFTU0VSVCAoISBNUE5fT1ZFUkxBUF9QIChycCwgbiwgeXAyLCBuKSk7CisgIEFTU0VSVCAoISBNUE5fT1ZFUkxBUF9QIChlcCwgNCwgdXAsIG4pKTsKKyAgQVNTRVJUICghIE1QTl9PVkVSTEFQX1AgKGVwLCA0LCB2cCwgbikpOworICBBU1NFUlQgKCEgTVBOX09WRVJMQVBfUCAoZXAsIDQsIHlwMSwgbikpOworICBBU1NFUlQgKCEgTVBOX09WRVJMQVBfUCAoZXAsIDQsIHlwMiwgbikpOworICBBU1NFUlQgKCEgTVBOX09WRVJMQVBfUCAoZXAsIDQsIHJwLCBuKSk7CisKKyAgeXAxICs9IG4gLSAxOworICB5cDIgKz0gbiAtIDE7CisgIGVsMSA9IGVoMSA9IDA7CisgIGVsMiA9IGVoMiA9IDA7CisKKyAgZG8KKyAgICB7CisgICAgICB5bDEgPSAqeXAxLS07CisgICAgICB5bDIgPSAqeXAyLS07CisgICAgICB1bCA9ICp1cCsrOworICAgICAgdmwgPSAqdnArKzsKKworICAgICAgLyogb3JkaW5hcnkgYWRkX24gKi8KKyAgICAgIEFERENfTElNQiAoY3kxLCBzbCwgdWwsIHZsKTsKKyAgICAgIEFERENfTElNQiAoY3kyLCBybCwgc2wsIGN5KTsKKyAgICAgIGN5ID0gY3kxIHwgY3kyOworICAgICAgKnJwKysgPSBybDsKKworICAgICAgLyogdXBkYXRlIChlaDE6ZWwxKSAqLworICAgICAgemwxID0gKC1jeSkgJiB5bDE7CisgICAgICBlbDEgKz0gemwxOworICAgICAgZWgxICs9IGVsMSA8IHpsMTsKKworICAgICAgLyogdXBkYXRlIChlaDI6ZWwyKSAqLworICAgICAgemwyID0gKC1jeSkgJiB5bDI7CisgICAgICBlbDIgKz0gemwyOworICAgICAgZWgyICs9IGVsMiA8IHpsMjsKKyAgICB9CisgIHdoaWxlICgtLW4pOworCisjaWYgR01QX05BSUxfQklUUyAhPSAwCisgIGVoMSA9IChlaDEgPDwgR01QX05BSUxfQklUUykgKyAoZWwxID4+IEdNUF9OVU1CX0JJVFMpOworICBlbDEgJj0gR01QX05VTUJfTUFTSzsKKyAgZWgyID0gKGVoMiA8PCBHTVBfTkFJTF9CSVRTKSArIChlbDIgPj4gR01QX05VTUJfQklUUyk7CisgIGVsMiAmPSBHTVBfTlVNQl9NQVNLOworI2VuZGlmCisKKyAgZXBbMF0gPSBlbDE7CisgIGVwWzFdID0gZWgxOworICBlcFsyXSA9IGVsMjsKKyAgZXBbM10gPSBlaDI7CisKKyAgcmV0dXJuIGN5OworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2FkZF9lcnIzX24uYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9hZGRfZXJyM19uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZlZDRkYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9hZGRfZXJyM19uLmMKQEAgLTAsMCArMSwxMzEgQEAKKy8qIG1wbl9hZGRfZXJyM19uIC0tIGFkZF9uIHdpdGggdGhyZWUgZXJyb3IgdGVybXMKKworICAgQ29udHJpYnV0ZWQgYnkgRGF2aWQgSGFydmV5LgorCisgICBUSEUgRlVOQ1RJT04gSU4gVEhJUyBGSUxFIElTIElOVEVSTkFMIFdJVEggQSBNVVRBQkxFIElOVEVSRkFDRS4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggSVQgVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuICBJTiBGQUNULCBJVCBJUyBBTE1PU1QKKyAgIEdVQVJBTlRFRUQgVEhBVCBJVCdMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEgRlVUVVJFIEdOVSBNUCBSRUxFQVNFLgorCitDb3B5cmlnaHQgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisKKy8qCisgIENvbXB1dGVzOgorCisgICgxKSB7cnAsbn0gOj0ge3VwLG59ICsge3ZwLG59IChqdXN0IGxpa2UgbXBuX2FkZF9uKSB3aXRoIGluY29taW5nIGNhcnJ5IGN5LAorICByZXR1cm4gdmFsdWUgaXMgY2Fycnkgb3V0LgorCisgICgyKSBMZXQgY1tpKzFdID0gY2FycnkgZnJvbSBpLXRoIGxpbWIgYWRkaXRpb24gKGNbMF0gPSBjeSkuCisgIENvbXB1dGVzIGNbMV0qeXAxW24tMV0gKyAuLi4gKyBjW25dKnlwMVswXSwKKyAgICAgICAgICAgY1sxXSp5cDJbbi0xXSArIC4uLiArIGNbbl0qeXAyWzBdLAorICAgICAgICAgICBjWzFdKnlwM1tuLTFdICsgLi4uICsgY1tuXSp5cDNbMF0sCisgIHN0b3JlcyB0d28tbGltYiByZXN1bHRzIGF0IHtlcCwyfSwge2VwKzIsMn0gYW5kIHtlcCs0LDJ9IHJlc3BlY3RpdmVseS4KKworICBSZXF1aXJlcyBuID49IDEuCisKKyAgTm9uZSBvZiB0aGUgb3V0cHV0cyBtYXkgb3ZlcmxhcCBlYWNoIG90aGVyIG9yIGFueSBvZiB0aGUgaW5wdXRzLCBleGNlcHQKKyAgdGhhdCB7cnAsbn0gbWF5IGJlIGVxdWFsIHRvIHt1cCxufSBvciB7dnAsbn0uCisqLworbXBfbGltYl90CittcG5fYWRkX2VycjNfbiAobXBfcHRyIHJwLCBtcF9zcmNwdHIgdXAsIG1wX3NyY3B0ciB2cCwKKyAgICAgICAgICAgICAgICBtcF9wdHIgZXAsIG1wX3NyY3B0ciB5cDEsIG1wX3NyY3B0ciB5cDIsIG1wX3NyY3B0ciB5cDMsCisgICAgICAgICAgICAgICAgbXBfc2l6ZV90IG4sIG1wX2xpbWJfdCBjeSkKK3sKKyAgbXBfbGltYl90IGVsMSwgZWgxLCBlbDIsIGVoMiwgZWwzLCBlaDMsIHVsLCB2bCwgeWwxLCB5bDIsIHlsMywgemwxLCB6bDIsIHpsMywgcmwsIHNsLCBjeTEsIGN5MjsKKworICBBU1NFUlQgKG4gPj0gMSk7CisgIEFTU0VSVCAoTVBOX1NBTUVfT1JfU0VQQVJBVEVfUCAocnAsIHVwLCBuKSk7CisgIEFTU0VSVCAoTVBOX1NBTUVfT1JfU0VQQVJBVEVfUCAocnAsIHZwLCBuKSk7CisgIEFTU0VSVCAoISBNUE5fT1ZFUkxBUF9QIChycCwgbiwgeXAxLCBuKSk7CisgIEFTU0VSVCAoISBNUE5fT1ZFUkxBUF9QIChycCwgbiwgeXAyLCBuKSk7CisgIEFTU0VSVCAoISBNUE5fT1ZFUkxBUF9QIChycCwgbiwgeXAzLCBuKSk7CisgIEFTU0VSVCAoISBNUE5fT1ZFUkxBUF9QIChlcCwgNiwgdXAsIG4pKTsKKyAgQVNTRVJUICghIE1QTl9PVkVSTEFQX1AgKGVwLCA2LCB2cCwgbikpOworICBBU1NFUlQgKCEgTVBOX09WRVJMQVBfUCAoZXAsIDYsIHlwMSwgbikpOworICBBU1NFUlQgKCEgTVBOX09WRVJMQVBfUCAoZXAsIDYsIHlwMiwgbikpOworICBBU1NFUlQgKCEgTVBOX09WRVJMQVBfUCAoZXAsIDYsIHlwMywgbikpOworICBBU1NFUlQgKCEgTVBOX09WRVJMQVBfUCAoZXAsIDYsIHJwLCBuKSk7CisKKyAgeXAxICs9IG4gLSAxOworICB5cDIgKz0gbiAtIDE7CisgIHlwMyArPSBuIC0gMTsKKyAgZWwxID0gZWgxID0gMDsKKyAgZWwyID0gZWgyID0gMDsKKyAgZWwzID0gZWgzID0gMDsKKworICBkbworICAgIHsKKyAgICAgIHlsMSA9ICp5cDEtLTsKKyAgICAgIHlsMiA9ICp5cDItLTsKKyAgICAgIHlsMyA9ICp5cDMtLTsKKyAgICAgIHVsID0gKnVwKys7CisgICAgICB2bCA9ICp2cCsrOworCisgICAgICAvKiBvcmRpbmFyeSBhZGRfbiAqLworICAgICAgQUREQ19MSU1CIChjeTEsIHNsLCB1bCwgdmwpOworICAgICAgQUREQ19MSU1CIChjeTIsIHJsLCBzbCwgY3kpOworICAgICAgY3kgPSBjeTEgfCBjeTI7CisgICAgICAqcnArKyA9IHJsOworCisgICAgICAvKiB1cGRhdGUgKGVoMTplbDEpICovCisgICAgICB6bDEgPSAoLWN5KSAmIHlsMTsKKyAgICAgIGVsMSArPSB6bDE7CisgICAgICBlaDEgKz0gZWwxIDwgemwxOworCisgICAgICAvKiB1cGRhdGUgKGVoMjplbDIpICovCisgICAgICB6bDIgPSAoLWN5KSAmIHlsMjsKKyAgICAgIGVsMiArPSB6bDI7CisgICAgICBlaDIgKz0gZWwyIDwgemwyOworCisgICAgICAvKiB1cGRhdGUgKGVoMzplbDMpICovCisgICAgICB6bDMgPSAoLWN5KSAmIHlsMzsKKyAgICAgIGVsMyArPSB6bDM7CisgICAgICBlaDMgKz0gZWwzIDwgemwzOworICAgIH0KKyAgd2hpbGUgKC0tbik7CisKKyNpZiBHTVBfTkFJTF9CSVRTICE9IDAKKyAgZWgxID0gKGVoMSA8PCBHTVBfTkFJTF9CSVRTKSArIChlbDEgPj4gR01QX05VTUJfQklUUyk7CisgIGVsMSAmPSBHTVBfTlVNQl9NQVNLOworICBlaDIgPSAoZWgyIDw8IEdNUF9OQUlMX0JJVFMpICsgKGVsMiA+PiBHTVBfTlVNQl9CSVRTKTsKKyAgZWwyICY9IEdNUF9OVU1CX01BU0s7CisgIGVoMyA9IChlaDMgPDwgR01QX05BSUxfQklUUykgKyAoZWwzID4+IEdNUF9OVU1CX0JJVFMpOworICBlbDMgJj0gR01QX05VTUJfTUFTSzsKKyNlbmRpZgorCisgIGVwWzBdID0gZWwxOworICBlcFsxXSA9IGVoMTsKKyAgZXBbMl0gPSBlbDI7CisgIGVwWzNdID0gZWgyOworICBlcFs0XSA9IGVsMzsKKyAgZXBbNV0gPSBlaDM7CisKKyAgcmV0dXJuIGN5OworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2FkZF9uLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvYWRkX24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjJhYzg3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2FkZF9uLmMKQEAgLTAsMCArMSw4OSBAQAorLyogbXBuX2FkZF9uIC0tIEFkZCBlcXVhbCBsZW5ndGggbGltYiB2ZWN0b3JzLgorCitDb3B5cmlnaHQgMTk5Mi0xOTk0LCAxOTk2LCAyMDAwLCAyMDAyLCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworCisjaWYgR01QX05BSUxfQklUUyA9PSAwCisKK21wX2xpbWJfdAorbXBuX2FkZF9uIChtcF9wdHIgcnAsIG1wX3NyY3B0ciB1cCwgbXBfc3JjcHRyIHZwLCBtcF9zaXplX3QgbikKK3sKKyAgbXBfbGltYl90IHVsLCB2bCwgc2wsIHJsLCBjeSwgY3kxLCBjeTI7CisKKyAgQVNTRVJUIChuID49IDEpOworICBBU1NFUlQgKE1QTl9TQU1FX09SX0lOQ1JfUCAocnAsIHVwLCBuKSk7CisgIEFTU0VSVCAoTVBOX1NBTUVfT1JfSU5DUl9QIChycCwgdnAsIG4pKTsKKworICBjeSA9IDA7CisgIGRvCisgICAgeworICAgICAgdWwgPSAqdXArKzsKKyAgICAgIHZsID0gKnZwKys7CisgICAgICBzbCA9IHVsICsgdmw7CisgICAgICBjeTEgPSBzbCA8IHVsOworICAgICAgcmwgPSBzbCArIGN5OworICAgICAgY3kyID0gcmwgPCBzbDsKKyAgICAgIGN5ID0gY3kxIHwgY3kyOworICAgICAgKnJwKysgPSBybDsKKyAgICB9CisgIHdoaWxlICgtLW4gIT0gMCk7CisKKyAgcmV0dXJuIGN5OworfQorCisjZW5kaWYKKworI2lmIEdNUF9OQUlMX0JJVFMgPj0gMQorCittcF9saW1iX3QKK21wbl9hZGRfbiAobXBfcHRyIHJwLCBtcF9zcmNwdHIgdXAsIG1wX3NyY3B0ciB2cCwgbXBfc2l6ZV90IG4pCit7CisgIG1wX2xpbWJfdCB1bCwgdmwsIHJsLCBjeTsKKworICBBU1NFUlQgKG4gPj0gMSk7CisgIEFTU0VSVCAoTVBOX1NBTUVfT1JfSU5DUl9QIChycCwgdXAsIG4pKTsKKyAgQVNTRVJUIChNUE5fU0FNRV9PUl9JTkNSX1AgKHJwLCB2cCwgbikpOworCisgIGN5ID0gMDsKKyAgZG8KKyAgICB7CisgICAgICB1bCA9ICp1cCsrOworICAgICAgdmwgPSAqdnArKzsKKyAgICAgIHJsID0gdWwgKyB2bCArIGN5OworICAgICAgY3kgPSBybCA+PiBHTVBfTlVNQl9CSVRTOworICAgICAgKnJwKysgPSBybCAmIEdNUF9OVU1CX01BU0s7CisgICAgfQorICB3aGlsZSAoLS1uICE9IDApOworCisgIHJldHVybiBjeTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvYWRkX25fc3ViX24uYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9hZGRfbl9zdWJfbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNzJiNWQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvYWRkX25fc3ViX24uYwpAQCAtMCwwICsxLDE3MiBAQAorLyogbXBuX2FkZF9uX3N1Yl9uIC0tIEFkZCBhbmQgU3VidHJhY3QgdHdvIGxpbWIgdmVjdG9ycyBvZiBlcXVhbCwgbm9uLXplcm8gbGVuZ3RoLgorCisgICBUSEUgRlVOQ1RJT04gSU4gVEhJUyBGSUxFIElTIElOVEVSTkFMIFdJVEggQSBNVVRBQkxFIElOVEVSRkFDRS4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggSVQgVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuICBJTiBGQUNULCBJVCBJUyBBTE1PU1QKKyAgIEdVQVJBTlRFRUQgVEhBVCBJVCdMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEgRlVUVVJFIEdOVSBNUCBSRUxFQVNFLgorCitDb3B5cmlnaHQgMTk5OS0yMDAxLCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworI2lmbmRlZiBMMV9DQUNIRV9TSVpFCisjZGVmaW5lIEwxX0NBQ0hFX1NJWkUgODE5MgkvKiBvbmx5IDY4MDQwIGhhcyBsZXNzIHRoYW4gdGhpcyAqLworI2VuZGlmCisKKyNkZWZpbmUgUEFSVF9TSVpFIChMMV9DQUNIRV9TSVpFIC8gR01QX0xJTUJfQllURVMgLyA2KQorCisKKy8qIG1wbl9hZGRfbl9zdWJfbi4KKyAgIHIxW10gPSBzMVtdICsgczJbXQorICAgcjJbXSA9IHMxW10gLSBzMltdCisgICBBbGwgb3BlcmFuZHMgaGF2ZSBuIGxpbWJzLgorICAgSW4tcGxhY2Ugb3BlcmF0aW9ucyBhbGxvd2VkLiAgKi8KK21wX2xpbWJfdAorbXBuX2FkZF9uX3N1Yl9uIChtcF9wdHIgcjFwLCBtcF9wdHIgcjJwLCBtcF9zcmNwdHIgczFwLCBtcF9zcmNwdHIgczJwLCBtcF9zaXplX3QgbikKK3sKKyAgbXBfbGltYl90IGFjeW4sIGFjeW87CQkvKiBjYXJyeSBmb3IgYWRkICovCisgIG1wX2xpbWJfdCBzY3luLCBzY3lvOwkJLyogY2FycnkgZm9yIHN1YnRyYWN0ICovCisgIG1wX3NpemVfdCBvZmY7CQkvKiBvZmZzZXQgaW4gb3BlcmFuZHMgKi8KKyAgbXBfc2l6ZV90IHRoaXNfbjsJCS8qIHNpemUgb2YgY3VycmVudCBjaHVuayAqLworCisgIC8qIFdlIGFsdGVybmF0aW5nbHkgYWRkIGFuZCBzdWJ0cmFjdCBpbiBjaHVua3MgdGhhdCBmaXQgaW50byB0aGUgKEwxKQorICAgICBjYWNoZS4gIFNpbmNlIHRoZSBjaHVua3MgYXJlIHNldmVyYWwgaHVuZHJlZCBsaW1icywgdGhlIGZ1bmN0aW9uIGNhbGwKKyAgICAgb3ZlcmhlYWQgaXMgaW5zaWduaWZpY2FudCwgYnV0IHdlIGdldCBtdWNoIGJldHRlciBsb2NhbGl0eS4gICovCisKKyAgLyogV2UgaGF2ZSB0aHJlZSB2YXJpYW50IG9mIHRoZSBpbm5lciBsb29wLCB0aGUgcHJvcGVyIGxvb3AgaXMgY2hvc2VuCisgICAgIGRlcGVuZGluZyBvbiB3aGV0aGVyIHIxIG9yIHIyIGFyZSB0aGUgc2FtZSBvcGVyYW5kIGFzIHMxIG9yIHMyLiAgKi8KKworICBpZiAocjFwICE9IHMxcCAmJiByMXAgIT0gczJwKQorICAgIHsKKyAgICAgIC8qIHIxIGlzIG5vdCBpZGVudGljYWwgdG8gZWl0aGVyIGlucHV0IG9wZXJhbmQuICBXZSBjYW4gdGhlcmVmb3JlIHdyaXRlCisJIHRvIHIxIGRpcmVjdGx5LCB3aXRob3V0IHVzaW5nIHRlbXBvcmFyeSBzdG9yYWdlLiAgKi8KKyAgICAgIGFjeW8gPSAwOworICAgICAgc2N5byA9IDA7CisgICAgICBmb3IgKG9mZiA9IDA7IG9mZiA8IG47IG9mZiArPSBQQVJUX1NJWkUpCisJeworCSAgdGhpc19uID0gTUlOIChuIC0gb2ZmLCBQQVJUX1NJWkUpOworI2lmIEhBVkVfTkFUSVZFX21wbl9hZGRfbmMKKwkgIGFjeW8gPSBtcG5fYWRkX25jIChyMXAgKyBvZmYsIHMxcCArIG9mZiwgczJwICsgb2ZmLCB0aGlzX24sIGFjeW8pOworI2Vsc2UKKwkgIGFjeW4gPSBtcG5fYWRkX24gKHIxcCArIG9mZiwgczFwICsgb2ZmLCBzMnAgKyBvZmYsIHRoaXNfbik7CisJICBhY3lvID0gYWN5biArIG1wbl9hZGRfMSAocjFwICsgb2ZmLCByMXAgKyBvZmYsIHRoaXNfbiwgYWN5byk7CisjZW5kaWYKKyNpZiBIQVZFX05BVElWRV9tcG5fc3ViX25jCisJICBzY3lvID0gbXBuX3N1Yl9uYyAocjJwICsgb2ZmLCBzMXAgKyBvZmYsIHMycCArIG9mZiwgdGhpc19uLCBzY3lvKTsKKyNlbHNlCisJICBzY3luID0gbXBuX3N1Yl9uIChyMnAgKyBvZmYsIHMxcCArIG9mZiwgczJwICsgb2ZmLCB0aGlzX24pOworCSAgc2N5byA9IHNjeW4gKyBtcG5fc3ViXzEgKHIycCArIG9mZiwgcjJwICsgb2ZmLCB0aGlzX24sIHNjeW8pOworI2VuZGlmCisJfQorICAgIH0KKyAgZWxzZSBpZiAocjJwICE9IHMxcCAmJiByMnAgIT0gczJwKQorICAgIHsKKyAgICAgIC8qIHIyIGlzIG5vdCBpZGVudGljYWwgdG8gZWl0aGVyIGlucHV0IG9wZXJhbmQuICBXZSBjYW4gdGhlcmVmb3JlIHdyaXRlCisJIHRvIHIyIGRpcmVjdGx5LCB3aXRob3V0IHVzaW5nIHRlbXBvcmFyeSBzdG9yYWdlLiAgKi8KKyAgICAgIGFjeW8gPSAwOworICAgICAgc2N5byA9IDA7CisgICAgICBmb3IgKG9mZiA9IDA7IG9mZiA8IG47IG9mZiArPSBQQVJUX1NJWkUpCisJeworCSAgdGhpc19uID0gTUlOIChuIC0gb2ZmLCBQQVJUX1NJWkUpOworI2lmIEhBVkVfTkFUSVZFX21wbl9zdWJfbmMKKwkgIHNjeW8gPSBtcG5fc3ViX25jIChyMnAgKyBvZmYsIHMxcCArIG9mZiwgczJwICsgb2ZmLCB0aGlzX24sIHNjeW8pOworI2Vsc2UKKwkgIHNjeW4gPSBtcG5fc3ViX24gKHIycCArIG9mZiwgczFwICsgb2ZmLCBzMnAgKyBvZmYsIHRoaXNfbik7CisJICBzY3lvID0gc2N5biArIG1wbl9zdWJfMSAocjJwICsgb2ZmLCByMnAgKyBvZmYsIHRoaXNfbiwgc2N5byk7CisjZW5kaWYKKyNpZiBIQVZFX05BVElWRV9tcG5fYWRkX25jCisJICBhY3lvID0gbXBuX2FkZF9uYyAocjFwICsgb2ZmLCBzMXAgKyBvZmYsIHMycCArIG9mZiwgdGhpc19uLCBhY3lvKTsKKyNlbHNlCisJICBhY3luID0gbXBuX2FkZF9uIChyMXAgKyBvZmYsIHMxcCArIG9mZiwgczJwICsgb2ZmLCB0aGlzX24pOworCSAgYWN5byA9IGFjeW4gKyBtcG5fYWRkXzEgKHIxcCArIG9mZiwgcjFwICsgb2ZmLCB0aGlzX24sIGFjeW8pOworI2VuZGlmCisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIHIxIGFuZCByMiBhcmUgaWRlbnRpY2FsIHRvIHMxIGFuZCBzMiAocjE9PXMxIGFuZCByMj09czIgb3IgdmljZSB2ZXJzYSkKKwkgTmVlZCB0ZW1wb3Jhcnkgc3RvcmFnZS4gICovCisgICAgICBtcF9saW1iX3QgdHBbUEFSVF9TSVpFXTsKKyAgICAgIGFjeW8gPSAwOworICAgICAgc2N5byA9IDA7CisgICAgICBmb3IgKG9mZiA9IDA7IG9mZiA8IG47IG9mZiArPSBQQVJUX1NJWkUpCisJeworCSAgdGhpc19uID0gTUlOIChuIC0gb2ZmLCBQQVJUX1NJWkUpOworI2lmIEhBVkVfTkFUSVZFX21wbl9hZGRfbmMKKwkgIGFjeW8gPSBtcG5fYWRkX25jICh0cCwgczFwICsgb2ZmLCBzMnAgKyBvZmYsIHRoaXNfbiwgYWN5byk7CisjZWxzZQorCSAgYWN5biA9IG1wbl9hZGRfbiAodHAsIHMxcCArIG9mZiwgczJwICsgb2ZmLCB0aGlzX24pOworCSAgYWN5byA9IGFjeW4gKyBtcG5fYWRkXzEgKHRwLCB0cCwgdGhpc19uLCBhY3lvKTsKKyNlbmRpZgorI2lmIEhBVkVfTkFUSVZFX21wbl9zdWJfbmMKKwkgIHNjeW8gPSBtcG5fc3ViX25jIChyMnAgKyBvZmYsIHMxcCArIG9mZiwgczJwICsgb2ZmLCB0aGlzX24sIHNjeW8pOworI2Vsc2UKKwkgIHNjeW4gPSBtcG5fc3ViX24gKHIycCArIG9mZiwgczFwICsgb2ZmLCBzMnAgKyBvZmYsIHRoaXNfbik7CisJICBzY3lvID0gc2N5biArIG1wbl9zdWJfMSAocjJwICsgb2ZmLCByMnAgKyBvZmYsIHRoaXNfbiwgc2N5byk7CisjZW5kaWYKKwkgIE1QTl9DT1BZIChyMXAgKyBvZmYsIHRwLCB0aGlzX24pOworCX0KKyAgICB9CisKKyAgcmV0dXJuIDIgKiBhY3lvICsgc2N5bzsKK30KKworI2lmZGVmIE1BSU4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgInRpbWluZy5oIgorCitsb25nIGNwdXRpbWUgKCk7CisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBtcF9wdHIgcjFwLCByMnAsIHMxcCwgczJwOworICBkb3VibGUgdDsKKyAgbXBfc2l6ZV90IG47CisKKyAgbiA9IHN0cnRvbCAoYXJndlsxXSwgMCwgMCk7CisKKyAgcjFwID0gbWFsbG9jIChuICogR01QX0xJTUJfQllURVMpOworICByMnAgPSBtYWxsb2MgKG4gKiBHTVBfTElNQl9CWVRFUyk7CisgIHMxcCA9IG1hbGxvYyAobiAqIEdNUF9MSU1CX0JZVEVTKTsKKyAgczJwID0gbWFsbG9jIChuICogR01QX0xJTUJfQllURVMpOworICBUSU1FICh0LChtcG5fYWRkX24ocjFwLHMxcCxzMnAsbiksbXBuX3N1Yl9uKHIxcCxzMXAsczJwLG4pKSk7CisgIHByaW50ZiAoIiAgICAgICAgICAgICAgc2VwYXJhdGUgYWRkIGFuZCBzdWI6ICUuM2ZcbiIsIHQpOworICBUSU1FICh0LG1wbl9hZGRfbl9zdWJfbihyMXAscjJwLHMxcCxzMnAsbikpOworICBwcmludGYgKCJjb21iaW5lZCBhZGRzdWIgc2VwYXJhdGUgdmFyaWFibGVzOiAlLjNmXG4iLCB0KTsKKyAgVElNRSAodCxtcG5fYWRkX25fc3ViX24ocjFwLHIycCxyMXAsczJwLG4pKTsKKyAgcHJpbnRmICgiICAgICAgICBjb21iaW5lZCBhZGRzdWIgcjEgb3ZlcmxhcDogJS4zZlxuIiwgdCk7CisgIFRJTUUgKHQsbXBuX2FkZF9uX3N1Yl9uKHIxcCxyMnAscjFwLHMycCxuKSk7CisgIHByaW50ZiAoIiAgICAgICAgY29tYmluZWQgYWRkc3ViIHIyIG92ZXJsYXA6ICUuM2ZcbiIsIHQpOworICBUSU1FICh0LG1wbl9hZGRfbl9zdWJfbihyMXAscjJwLHIxcCxyMnAsbikpOworICBwcmludGYgKCIgICAgICAgICAgY29tYmluZWQgYWRkc3ViIGluLXBsYWNlOiAlLjNmXG4iLCB0KTsKKworICByZXR1cm4gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2FkZG11bF8xLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvYWRkbXVsXzEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTQwZThlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2FkZG11bF8xLmMKQEAgLTAsMCArMSwxNDUgQEAKKy8qIG1wbl9hZGRtdWxfMSAtLSBtdWx0aXBseSB0aGUgTiBsb25nIGxpbWIgdmVjdG9yIHBvaW50ZWQgdG8gYnkgVVAgYnkgVkwsCisgICBhZGQgdGhlIE4gbGVhc3Qgc2lnbmlmaWNhbnQgbGltYnMgb2YgdGhlIHByb2R1Y3QgdG8gdGhlIGxpbWIgdmVjdG9yCisgICBwb2ludGVkIHRvIGJ5IFJQLiAgUmV0dXJuIHRoZSBtb3N0IHNpZ25pZmljYW50IGxpbWIgb2YgdGhlIHByb2R1Y3QsCisgICBhZGp1c3RlZCBmb3IgY2Fycnktb3V0IGZyb20gdGhlIGFkZGl0aW9uLgorCitDb3B5cmlnaHQgMTk5Mi0xOTk0LCAxOTk2LCAyMDAwLCAyMDAyLCAyMDA0LCAyMDE2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisjaW5jbHVkZSAibG9uZ2xvbmcuaCIKKworCisjaWYgR01QX05BSUxfQklUUyA9PSAwCisKK21wX2xpbWJfdAorbXBuX2FkZG11bF8xIChtcF9wdHIgcnAsIG1wX3NyY3B0ciB1cCwgbXBfc2l6ZV90IG4sIG1wX2xpbWJfdCB2MCkKK3sKKyAgbXBfbGltYl90IHUwLCBjcmVjLCBjLCBwMSwgcDAsIHIwOworCisgIEFTU0VSVCAobiA+PSAxKTsKKyAgQVNTRVJUIChNUE5fU0FNRV9PUl9TRVBBUkFURV9QIChycCwgdXAsIG4pKTsKKworICBjcmVjID0gMDsKKyAgZG8KKyAgICB7CisgICAgICB1MCA9ICp1cCsrOworICAgICAgdW11bF9wcG1tIChwMSwgcDAsIHUwLCB2MCk7CisKKyAgICAgIHIwID0gKnJwOworCisgICAgICBwMCA9IHIwICsgcDA7CisgICAgICBjID0gcjAgPiBwMDsKKworICAgICAgcDEgPSBwMSArIGM7CisKKyAgICAgIHIwID0gcDAgKyBjcmVjOwkJLyogY3ljbGUgMCwgMywgLi4uICovCisgICAgICBjID0gcDAgPiByMDsJCS8qIGN5Y2xlIDEsIDQsIC4uLiAqLworCisgICAgICBjcmVjID0gcDEgKyBjOwkJLyogY3ljbGUgMiwgNSwgLi4uICovCisKKyAgICAgICpycCsrID0gcjA7CisgICAgfQorICB3aGlsZSAoLS1uICE9IDApOworCisgIHJldHVybiBjcmVjOworfQorCisjZW5kaWYKKworI2lmIEdNUF9OQUlMX0JJVFMgPT0gMQorCittcF9saW1iX3QKK21wbl9hZGRtdWxfMSAobXBfcHRyIHJwLCBtcF9zcmNwdHIgdXAsIG1wX3NpemVfdCBuLCBtcF9saW1iX3QgdjApCit7CisgIG1wX2xpbWJfdCBzaGlmdGVkX3YwLCB1MCwgcjAsIHAwLCBwMSwgcHJldl9wMSwgY3JlYywgeGwsIGMxLCBjMiwgYzM7CisKKyAgQVNTRVJUIChuID49IDEpOworICBBU1NFUlQgKE1QTl9TQU1FX09SX1NFUEFSQVRFX1AgKHJwLCB1cCwgbikpOworICBBU1NFUlRfTVBOIChycCwgbik7CisgIEFTU0VSVF9NUE4gKHVwLCBuKTsKKyAgQVNTRVJUX0xJTUIgKHYwKTsKKworICBzaGlmdGVkX3YwID0gdjAgPDwgR01QX05BSUxfQklUUzsKKyAgY3JlYyA9IDA7CisgIHByZXZfcDEgPSAwOworICBkbworICAgIHsKKyAgICAgIHUwID0gKnVwKys7CisgICAgICByMCA9ICpycDsKKyAgICAgIHVtdWxfcHBtbSAocDEsIHAwLCB1MCwgc2hpZnRlZF92MCk7CisgICAgICBwMCA+Pj0gR01QX05BSUxfQklUUzsKKyAgICAgIEFERENfTElNQiAoYzEsIHhsLCBwcmV2X3AxLCBwMCk7CisgICAgICBBRERDX0xJTUIgKGMyLCB4bCwgeGwsIHIwKTsKKyAgICAgIEFERENfTElNQiAoYzMsIHhsLCB4bCwgY3JlYyk7CisgICAgICBjcmVjID0gYzEgKyBjMiArIGMzOworICAgICAgKnJwKysgPSB4bDsKKyAgICAgIHByZXZfcDEgPSBwMTsKKyAgICB9CisgIHdoaWxlICgtLW4gIT0gMCk7CisKKyAgcmV0dXJuIHByZXZfcDEgKyBjcmVjOworfQorCisjZW5kaWYKKworI2lmIEdNUF9OQUlMX0JJVFMgPj0gMgorCittcF9saW1iX3QKK21wbl9hZGRtdWxfMSAobXBfcHRyIHJwLCBtcF9zcmNwdHIgdXAsIG1wX3NpemVfdCBuLCBtcF9saW1iX3QgdjApCit7CisgIG1wX2xpbWJfdCBzaGlmdGVkX3YwLCB1MCwgcjAsIHAwLCBwMSwgcHJldl9wMSwgeHcsIGNyZWMsIHhsOworCisgIEFTU0VSVCAobiA+PSAxKTsKKyAgQVNTRVJUIChNUE5fU0FNRV9PUl9TRVBBUkFURV9QIChycCwgdXAsIG4pKTsKKyAgQVNTRVJUX01QTiAocnAsIG4pOworICBBU1NFUlRfTVBOICh1cCwgbik7CisgIEFTU0VSVF9MSU1CICh2MCk7CisKKyAgc2hpZnRlZF92MCA9IHYwIDw8IEdNUF9OQUlMX0JJVFM7CisgIGNyZWMgPSAwOworICBwcmV2X3AxID0gMDsKKyAgZG8KKyAgICB7CisgICAgICB1MCA9ICp1cCsrOworICAgICAgcjAgPSAqcnA7CisgICAgICB1bXVsX3BwbW0gKHAxLCBwMCwgdTAsIHNoaWZ0ZWRfdjApOworICAgICAgcDAgPj49IEdNUF9OQUlMX0JJVFM7CisgICAgICB4dyA9IHByZXZfcDEgKyBwMCArIHIwICsgY3JlYzsKKyAgICAgIGNyZWMgPSB4dyA+PiBHTVBfTlVNQl9CSVRTOworICAgICAgeGwgPSB4dyAmIEdNUF9OVU1CX01BU0s7CisgICAgICAqcnArKyA9IHhsOworICAgICAgcHJldl9wMSA9IHAxOworICAgIH0KKyAgd2hpbGUgKC0tbiAhPSAwKTsKKworICByZXR1cm4gcHJldl9wMSArIGNyZWM7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2JkaXZfZGJtMWMuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9iZGl2X2RibTFjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQzYmI2ZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9iZGl2X2RibTFjLmMKQEAgLTAsMCArMSw1OCBAQAorLyogbXBuX2JkaXZfZGJtMWMgLS0gZGl2aWRlIGFuIG1wbiBudW1iZXIgYnkgYSBkaXZpc29yIG9mIEItMSwgd2hlcmUgQiBpcyB0aGUKKyAgIGxpbWIgYmFzZS4gIFRoZSBkYm0xYyBtb25pa2VyIG1lYW5zICJEaXZpc29yIG9mIEIgTWludXMgMSB3aXRoIENhcnJ5Ii4KKworICAgVEhFIEZVTkNUSU9OIElOIFRISVMgRklMRSBJUyBJTlRFUk5BTCBXSVRIIEEgTVVUQUJMRSBJTlRFUkZBQ0UuICBJVCBJUyBPTkxZCisgICBTQUZFIFRPIFJFQUNIIElUIFRIUk9VR0ggRE9DVU1FTlRFRCBJTlRFUkZBQ0VTLiAgSU4gRkFDVCwgSVQgSVMgQUxNT1NUCisgICBHVUFSQU5URUVEIFRIQVQgSVQnTEwgQ0hBTkdFIE9SIERJU0FQUEVBUiBJTiBBIEZVVFVSRSBHTlUgTVAgUkVMRUFTRS4KKworQ29weXJpZ2h0IDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorI2luY2x1ZGUgImxvbmdsb25nLmgiCisKKworbXBfbGltYl90CittcG5fYmRpdl9kYm0xYyAobXBfcHRyIHFwLCBtcF9zcmNwdHIgYXAsIG1wX3NpemVfdCBuLCBtcF9saW1iX3QgYmQsIG1wX2xpbWJfdCBoKQoreworICBtcF9saW1iX3QgYSwgcDAsIHAxLCBjeTsKKyAgbXBfc2l6ZV90IGk7CisKKyAgZm9yIChpID0gMDsgaSA8IG47IGkrKykKKyAgICB7CisgICAgICBhID0gYXBbaV07CisgICAgICB1bXVsX3BwbW0gKHAxLCBwMCwgYSwgYmQgPDwgR01QX05BSUxfQklUUyk7CisgICAgICBwMCA+Pj0gR01QX05BSUxfQklUUzsKKyAgICAgIGN5ID0gaCA8IHAwOworICAgICAgaCA9IChoIC0gcDApICYgR01QX05VTUJfTUFTSzsKKyAgICAgIHFwW2ldID0gaDsKKyAgICAgIGggPSBoIC0gcDEgLSBjeTsKKyAgICB9CisKKyAgcmV0dXJuIGg7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvYmRpdl9xLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvYmRpdl9xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJhYTQ3MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9iZGl2X3EuYwpAQCAtMCwwICsxLDc2IEBACisvKiBtcG5fYmRpdl9xIC0tIEhlbnNlbCBkaXZpc2lvbiB3aXRoIHByZWNvbXB1dGVkIGludmVyc2UsIHJldHVybmluZyBxdW90aWVudC4KKworICAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqb3JuIEdyYW5sdW5kLgorCisgICBUSEUgRlVOQ1RJT05TIElOIFRISVMgRklMRSBBUkUgSU5URVJOQUwgV0lUSCBNVVRBQkxFIElOVEVSRkFDRVMuICBJVCBJUyBPTkxZCisgICBTQUZFIFRPIFJFQUNIIFRIRU0gVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuICBJTiBGQUNULCBJVCBJUyBBTE1PU1QKKyAgIEdVQVJBTlRFRUQgVEhBVCBUSEVZIFdJTEwgQ0hBTkdFIE9SIERJU0FQUEVBUiBJTiBBIEZVVFVSRSBHTVAgUkVMRUFTRS4KKworQ29weXJpZ2h0IDIwMDYsIDIwMDcsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCisKKy8qIENvbXB1dGVzIFEgPSBOIC8gRCBtb2QgQl5uLiAqLworCit2b2lkCittcG5fYmRpdl9xIChtcF9wdHIgcXAsCisJICAgIG1wX3NyY3B0ciBucCwgbXBfc2l6ZV90IG5uLAorCSAgICBtcF9zcmNwdHIgZHAsIG1wX3NpemVfdCBkbiwKKwkgICAgbXBfcHRyIHRwKQoreworICBtcF9saW1iX3QgZGk7CisKKyAgaWYgKEJFTE9XX1RIUkVTSE9MRCAoZG4sIERDX0JESVZfUV9USFJFU0hPTEQpKQorICAgIHsKKyAgICAgIE1QTl9DT1BZICh0cCwgbnAsIG5uKTsKKyAgICAgIGJpbnZlcnRfbGltYiAoZGksIGRwWzBdKTsgIGRpID0gLWRpOworICAgICAgbXBuX3NicGkxX2JkaXZfcSAocXAsIHRwLCBubiwgZHAsIGRuLCBkaSk7CisgICAgfQorICBlbHNlIGlmIChCRUxPV19USFJFU0hPTEQgKGRuLCBNVV9CRElWX1FfVEhSRVNIT0xEKSkKKyAgICB7CisgICAgICBNUE5fQ09QWSAodHAsIG5wLCBubik7CisgICAgICBiaW52ZXJ0X2xpbWIgKGRpLCBkcFswXSk7ICBkaSA9IC1kaTsKKyAgICAgIG1wbl9kY3BpMV9iZGl2X3EgKHFwLCB0cCwgbm4sIGRwLCBkbiwgZGkpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIG1wbl9tdV9iZGl2X3EgKHFwLCBucCwgbm4sIGRwLCBkbiwgdHApOworICAgIH0KKyAgcmV0dXJuOworfQorCittcF9zaXplX3QKK21wbl9iZGl2X3FfaXRjaCAobXBfc2l6ZV90IG5uLCBtcF9zaXplX3QgZG4pCit7CisgIGlmIChCRUxPV19USFJFU0hPTEQgKGRuLCBNVV9CRElWX1FfVEhSRVNIT0xEKSkKKyAgICByZXR1cm4gbm47CisgIGVsc2UKKyAgICByZXR1cm4gbXBuX211X2JkaXZfcV9pdGNoIChubiwgZG4pOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2JkaXZfcV8xLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvYmRpdl9xXzEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmViOWEwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2JkaXZfcV8xLmMKQEAgLTAsMCArMSwxMjEgQEAKKy8qIG1wbl9iZGl2X3FfMSwgbXBuX3BpMV9iZGl2X3FfMSAtLSBzY2hvb2xib29rIEhlbnNlbCBkaXZpc2lvbiBieSAxLWxpbWIKKyAgIGRpdmlzb3IsIHJldHVybmluZyBxdW90aWVudCBvbmx5LgorCisgICBUSEUgRlVOQ1RJT05TIElOIFRISVMgRklMRSBBUkUgRk9SIElOVEVSTkFMIFVTRSBPTkxZLiAgVEhFWSdSRSBBTE1PU1QKKyAgIENFUlRBSU4gVE8gQkUgU1VCSkVDVCBUTyBJTkNPTVBBVElCTEUgQ0hBTkdFUyBPUiBESVNBUFBFQVIgQ09NUExFVEVMWSBJTgorICAgRlVUVVJFIEdOVSBNUCBSRUxFQVNFUy4KKworQ29weXJpZ2h0IDIwMDAtMjAwMywgMjAwNSwgMjAwOSwgMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisjaW5jbHVkZSAibG9uZ2xvbmcuaCIKKworbXBfbGltYl90CittcG5fcGkxX2JkaXZfcV8xIChtcF9wdHIgcnAsIG1wX3NyY3B0ciB1cCwgbXBfc2l6ZV90IG4sIG1wX2xpbWJfdCBkLAorCQkgIG1wX2xpbWJfdCBkaSwgaW50IHNoaWZ0KQoreworICBtcF9zaXplX3QgIGk7CisgIG1wX2xpbWJfdCAgYywgaCwgbCwgdSwgdV9uZXh0LCBkdW1teTsKKworICBBU1NFUlQgKG4gPj0gMSk7CisgIEFTU0VSVCAoZCAhPSAwKTsKKyAgQVNTRVJUIChNUE5fU0FNRV9PUl9TRVBBUkFURV9QIChycCwgdXAsIG4pKTsKKyAgQVNTRVJUX01QTiAodXAsIG4pOworICBBU1NFUlRfTElNQiAoZCk7CisKKyAgZCA8PD0gR01QX05BSUxfQklUUzsKKworICBpZiAoc2hpZnQgIT0gMCkKKyAgICB7CisgICAgICBjID0gMDsKKworICAgICAgdSA9IHVwWzBdOworICAgICAgcnAtLTsKKyAgICAgIGZvciAoaSA9IDE7IGkgPCBuOyBpKyspCisJeworCSAgdV9uZXh0ID0gdXBbaV07CisJICB1ID0gKCh1ID4+IHNoaWZ0KSB8ICh1X25leHQgPDwgKEdNUF9OVU1CX0JJVFMtc2hpZnQpKSkgJiBHTVBfTlVNQl9NQVNLOworCisJICBTVUJDX0xJTUIgKGMsIGwsIHUsIGMpOworCisJICBsID0gKGwgKiBkaSkgJiBHTVBfTlVNQl9NQVNLOworCSAgcnBbaV0gPSBsOworCisJICB1bXVsX3BwbW0gKGgsIGR1bW15LCBsLCBkKTsKKwkgIGMgKz0gaDsKKwkgIHUgPSB1X25leHQ7CisJfQorCisgICAgICB1ID0gdSA+PiBzaGlmdDsKKyAgICAgIFNVQkNfTElNQiAoYywgbCwgdSwgYyk7CisKKyAgICAgIGwgPSAobCAqIGRpKSAmIEdNUF9OVU1CX01BU0s7CisgICAgICBycFtuXSA9IGw7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgdSA9IHVwWzBdOworICAgICAgbCA9ICh1ICogZGkpICYgR01QX05VTUJfTUFTSzsKKyAgICAgIHJwWzBdID0gbDsKKyAgICAgIGMgPSAwOworCisgICAgICBmb3IgKGkgPSAxOyBpIDwgbjsgaSsrKQorCXsKKwkgIHVtdWxfcHBtbSAoaCwgZHVtbXksIGwsIGQpOworCSAgYyArPSBoOworCisJICB1ID0gdXBbaV07CisJICBTVUJDX0xJTUIgKGMsIGwsIHUsIGMpOworCisJICBsID0gKGwgKiBkaSkgJiBHTVBfTlVNQl9NQVNLOworCSAgcnBbaV0gPSBsOworCX0KKyAgICB9CisKKyAgcmV0dXJuIGM7Cit9CisKK21wX2xpbWJfdAorbXBuX2JkaXZfcV8xIChtcF9wdHIgcnAsIG1wX3NyY3B0ciB1cCwgbXBfc2l6ZV90IG4sIG1wX2xpbWJfdCBkKQoreworICBtcF9saW1iX3QgZGk7CisgIGludCBzaGlmdDsKKworICBBU1NFUlQgKG4gPj0gMSk7CisgIEFTU0VSVCAoZCAhPSAwKTsKKyAgQVNTRVJUIChNUE5fU0FNRV9PUl9TRVBBUkFURV9QIChycCwgdXAsIG4pKTsKKyAgQVNTRVJUX01QTiAodXAsIG4pOworICBBU1NFUlRfTElNQiAoZCk7CisKKyAgY291bnRfdHJhaWxpbmdfemVyb3MgKHNoaWZ0LCBkKTsKKyAgZCA+Pj0gc2hpZnQ7CisKKyAgYmludmVydF9saW1iIChkaSwgZCk7CisgIHJldHVybiBtcG5fcGkxX2JkaXZfcV8xIChycCwgdXAsIG4sIGQsIGRpLCBzaGlmdCk7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvYmRpdl9xci5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2JkaXZfcXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGYwZjM5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2JkaXZfcXIuYwpAQCAtMCwwICsxLDg0IEBACisvKiBtcG5fYmRpdl9xciAtLSBIZW5zZWwgZGl2aXNpb24gd2l0aCBwcmVjb21wdXRlZCBpbnZlcnNlLCByZXR1cm5pbmcgcXVvdGllbnQKKyAgIGFuZCByZW1haW5kZXIuCisKKyAgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3Jiam9ybiBHcmFubHVuZC4KKworICAgVEhFIEZVTkNUSU9OUyBJTiBUSElTIEZJTEUgQVJFIElOVEVSTkFMIFdJVEggTVVUQUJMRSBJTlRFUkZBQ0VTLiAgSVQgSVMgT05MWQorICAgU0FGRSBUTyBSRUFDSCBUSEVNIFRIUk9VR0ggRE9DVU1FTlRFRCBJTlRFUkZBQ0VTLiAgSU4gRkFDVCwgSVQgSVMgQUxNT1NUCisgICBHVUFSQU5URUVEIFRIQVQgVEhFWSBXSUxMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR01QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAyMDA2LCAyMDA3LCAyMDA5LCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworCisvKiBDb21wdXRlcyBRID0gTiAvIEQgbW9kIEJebiwKKwkgICAgUiA9IE4gLSBRRC4gICovCisKK21wX2xpbWJfdAorbXBuX2JkaXZfcXIgKG1wX3B0ciBxcCwgbXBfcHRyIHJwLAorCSAgICAgbXBfc3JjcHRyIG5wLCBtcF9zaXplX3Qgbm4sCisJICAgICBtcF9zcmNwdHIgZHAsIG1wX3NpemVfdCBkbiwKKwkgICAgIG1wX3B0ciB0cCkKK3sKKyAgbXBfbGltYl90IGRpOworICBtcF9saW1iX3Qgcmg7CisKKyAgQVNTRVJUIChubiA+IGRuKTsKKyAgaWYgKEJFTE9XX1RIUkVTSE9MRCAoZG4sIERDX0JESVZfUVJfVEhSRVNIT0xEKSB8fAorICAgICAgQkVMT1dfVEhSRVNIT0xEIChubiAtIGRuLCBEQ19CRElWX1FSX1RIUkVTSE9MRCkpCisgICAgeworICAgICAgTVBOX0NPUFkgKHRwLCBucCwgbm4pOworICAgICAgYmludmVydF9saW1iIChkaSwgZHBbMF0pOyAgZGkgPSAtZGk7CisgICAgICByaCA9IG1wbl9zYnBpMV9iZGl2X3FyIChxcCwgdHAsIG5uLCBkcCwgZG4sIGRpKTsKKyAgICAgIE1QTl9DT1BZIChycCwgdHAgKyBubiAtIGRuLCBkbik7CisgICAgfQorICBlbHNlIGlmIChCRUxPV19USFJFU0hPTEQgKGRuLCBNVV9CRElWX1FSX1RIUkVTSE9MRCkpCisgICAgeworICAgICAgTVBOX0NPUFkgKHRwLCBucCwgbm4pOworICAgICAgYmludmVydF9saW1iIChkaSwgZHBbMF0pOyAgZGkgPSAtZGk7CisgICAgICByaCA9IG1wbl9kY3BpMV9iZGl2X3FyIChxcCwgdHAsIG5uLCBkcCwgZG4sIGRpKTsKKyAgICAgIE1QTl9DT1BZIChycCwgdHAgKyBubiAtIGRuLCBkbik7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcmggPSBtcG5fbXVfYmRpdl9xciAocXAsIHJwLCBucCwgbm4sIGRwLCBkbiwgdHApOworICAgIH0KKworICByZXR1cm4gcmg7Cit9CisKK21wX3NpemVfdAorbXBuX2JkaXZfcXJfaXRjaCAobXBfc2l6ZV90IG5uLCBtcF9zaXplX3QgZG4pCit7CisgIGlmIChCRUxPV19USFJFU0hPTEQgKGRuLCBNVV9CRElWX1FSX1RIUkVTSE9MRCkpCisgICAgcmV0dXJuIG5uOworICBlbHNlCisgICAgcmV0dXJuICBtcG5fbXVfYmRpdl9xcl9pdGNoIChubiwgZG4pOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2JpbnZlcnQuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9iaW52ZXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMyNGFiNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9iaW52ZXJ0LmMKQEAgLTAsMCArMSwxMDMgQEAKKy8qIENvbXB1dGUge3VwLG59XigtMSkgbW9kIEJebi4KKworICAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqb3JuIEdyYW5sdW5kLgorCisgICBUSEUgRlVOQ1RJT05TIElOIFRISVMgRklMRSBBUkUgSU5URVJOQUwgV0lUSCBNVVRBQkxFIElOVEVSRkFDRVMuICBJVCBJUyBPTkxZCisgICBTQUZFIFRPIFJFQUNIIFRIRU0gVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuICBJTiBGQUNULCBJVCBJUyBBTE1PU1QKKyAgIEdVQVJBTlRFRUQgVEhBVCBUSEVZIFdJTEwgQ0hBTkdFIE9SIERJU0FQUEVBUiBJTiBBIEZVVFVSRSBHTVAgUkVMRUFTRS4KKworQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcsIDIwMDksIDIwMTIsIDIwMTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCisKKy8qCisgIHJbaysxXSA9IHJba10gLSByW2tdICogKHUqcltrXSAtIDEpCisgIHJbaysxXSA9IHJba10gKyByW2tdIC0gcltrXSoodSpyW2tdKQorKi8KKworI2lmIFRVTkVfUFJPR1JBTV9CVUlMRAorI2RlZmluZSBOUE9XUyBcCisgKChzaXplb2YobXBfc2l6ZV90KSA+IDYgPyA0OCA6IDgqc2l6ZW9mKG1wX3NpemVfdCkpKQorI2Vsc2UKKyNkZWZpbmUgTlBPV1MgXAorICgoc2l6ZW9mKG1wX3NpemVfdCkgPiA2ID8gNDggOiA4KnNpemVvZihtcF9zaXplX3QpKSAtIExPRzJDIChCSU5WX05FV1RPTl9USFJFU0hPTEQpKQorI2VuZGlmCisKK21wX3NpemVfdAorbXBuX2JpbnZlcnRfaXRjaCAobXBfc2l6ZV90IG4pCit7CisgIG1wX3NpemVfdCBpdGNoX2xvY2FsID0gbXBuX211bG1vZF9ibm0xX25leHRfc2l6ZSAobik7CisgIG1wX3NpemVfdCBpdGNoX291dCA9IG1wbl9tdWxtb2RfYm5tMV9pdGNoIChpdGNoX2xvY2FsLCBuLCAobiArIDEpID4+IDEpOworICByZXR1cm4gaXRjaF9sb2NhbCArIGl0Y2hfb3V0OworfQorCit2b2lkCittcG5fYmludmVydCAobXBfcHRyIHJwLCBtcF9zcmNwdHIgdXAsIG1wX3NpemVfdCBuLCBtcF9wdHIgc2NyYXRjaCkKK3sKKyAgbXBfcHRyIHhwOworICBtcF9zaXplX3Qgcm4sIG5ld3JuOworICBtcF9zaXplX3Qgc2l6ZXNbTlBPV1NdLCAqc2l6cDsKKyAgbXBfbGltYl90IGRpOworCisgIC8qIENvbXB1dGUgdGhlIGNvbXB1dGF0aW9uIHByZWNpc2lvbnMgZnJvbSBoaWdoZXN0IHRvIGxvd2VzdCwgbGVhdmluZyB0aGUKKyAgICAgYmFzZSBjYXNlIHNpemUgaW4gJ3JuJy4gICovCisgIHNpenAgPSBzaXplczsKKyAgZm9yIChybiA9IG47IEFCT1ZFX1RIUkVTSE9MRCAocm4sIEJJTlZfTkVXVE9OX1RIUkVTSE9MRCk7IHJuID0gKHJuICsgMSkgPj4gMSkKKyAgICAqc2l6cCsrID0gcm47CisKKyAgeHAgPSBzY3JhdGNoOworCisgIC8qIENvbXB1dGUgYSBiYXNlIHZhbHVlIG9mIHJuIGxpbWJzLiAgKi8KKyAgTVBOX1pFUk8gKHhwLCBybik7CisgIHhwWzBdID0gMTsKKyAgYmludmVydF9saW1iIChkaSwgdXBbMF0pOworICBpZiAoQkVMT1dfVEhSRVNIT0xEIChybiwgRENfQkRJVl9RX1RIUkVTSE9MRCkpCisgICAgbXBuX3NicGkxX2JkaXZfcSAocnAsIHhwLCBybiwgdXAsIHJuLCAtZGkpOworICBlbHNlCisgICAgbXBuX2RjcGkxX2JkaXZfcSAocnAsIHhwLCBybiwgdXAsIHJuLCAtZGkpOworCisgIG1wbl9uZWcgKHJwLCBycCwgcm4pOworCisgIC8qIFVzZSBOZXd0b24gaXRlcmF0aW9ucyB0byBnZXQgdGhlIGRlc2lyZWQgcHJlY2lzaW9uLiAgKi8KKyAgZm9yICg7IHJuIDwgbjsgcm4gPSBuZXdybikKKyAgICB7CisgICAgICBtcF9zaXplX3QgbTsKKyAgICAgIG5ld3JuID0gKi0tc2l6cDsKKworICAgICAgLyogWCA8LSBVUi4gKi8KKyAgICAgIG0gPSBtcG5fbXVsbW9kX2JubTFfbmV4dF9zaXplIChuZXdybik7CisgICAgICBtcG5fbXVsbW9kX2JubTEgKHhwLCBtLCB1cCwgbmV3cm4sIHJwLCBybiwgeHAgKyBtKTsKKyAgICAgIG1wbl9zdWJfMSAoeHAgKyBtLCB4cCwgcm4gLSAobSAtIG5ld3JuKSwgMSk7CisKKyAgICAgIC8qIFIgPSBSKFgvQl5ybikgKi8KKyAgICAgIG1wbl9tdWxsb19uIChycCArIHJuLCBycCwgeHAgKyBybiwgbmV3cm4gLSBybik7CisgICAgICBtcG5fbmVnIChycCArIHJuLCBycCArIHJuLCBuZXdybiAtIHJuKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvYnJvb3QuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9icm9vdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyZmU3NWEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvYnJvb3QuYwpAQCAtMCwwICsxLDE5NSBAQAorLyogbXBuX2Jyb290IC0tIENvbXB1dGUgaGVuc2VsIHNxcnQKKworICAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IE5pZWxzIE3DtmxsZXIKKworICAgVEhFIEZVTkNUSU9OUyBJTiBUSElTIEZJTEUgQVJFIElOVEVSTkFMIFdJVEggTVVUQUJMRSBJTlRFUkZBQ0VTLiAgSVQgSVMgT05MWQorICAgU0FGRSBUTyBSRUFDSCBUSEVNIFRIUk9VR0ggRE9DVU1FTlRFRCBJTlRFUkZBQ0VTLiAgSU4gRkFDVCwgSVQgSVMgQUxNT1NUCisgICBHVUFSQU5URUVEIFRIQVQgVEhFWSBXSUxMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR01QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworLyogQ29tcHV0ZXMgYV5lIChtb2QgQikuIFVzZXMgcmlnaHQtdG8tbGVmdCBiaW5hcnkgYWxnb3JpdGhtLCBzaW5jZQorICAgdHlwaWNhbCB1c2Ugd2lsbCBoYXZlIGUgc21hbGwuICovCitzdGF0aWMgbXBfbGltYl90Citwb3dsaW1iIChtcF9saW1iX3QgYSwgbXBfbGltYl90IGUpCit7CisgIG1wX2xpbWJfdCByID0gMTsKKyAgbXBfbGltYl90IHMgPSBhOworCisgIGZvciAociA9IDEsIHMgPSBhOyBlID4gMDsgZSA+Pj0gMSwgcyAqPSBzKQorICAgIGlmIChlICYgMSkKKyAgICAgIHIgKj0gczsKKworICByZXR1cm4gcjsKK30KKworLyogQ29tcHV0ZXMgYV57MS9rIC0gMX0gKG1vZCBCXm4pLiBCb3RoIGEgYW5kIGsgbXVzdCBiZSBvZGQuCisKKyAgIEl0ZXJhdGVzCisKKyAgICAgcicgPC0tIHIgLSByICogKGFee2stMX0gcl5rIC0gMSkgLyBuCisKKyAgIElmCisKKyAgICAgYV57ay0xfSByXmsgPSAxIChtb2QgMl5tKSwKKworICAgdGhlbgorCisgICAgIGFee2stMX0gcideayA9IDEgKG1vZCAyXnsybX0pLAorCisgICBDb21wdXRlIHRoZSB1cGRhdGUgdGVybSBhcworCisgICAgIHInID0gciAtIChhXntrLTF9IHJee2srMX0gLSByKSAvIGsKKworICAgd2hlcmUgd2Ugc3RpbGwgaGF2ZSBjYW5jZWxsYXRpb24gb2YgbG93IGxpbWJzLgorCisgKi8KK3ZvaWQKK21wbl9icm9vdF9pbnZtMSAobXBfcHRyIHJwLCBtcF9zcmNwdHIgYXAsIG1wX3NpemVfdCBuLCBtcF9saW1iX3QgaykKK3sKKyAgbXBfc2l6ZV90IHNpemVzW0dNUF9MSU1CX0JJVFMgKiAyXTsKKyAgbXBfcHRyIGFrbTEsIHRwLCBybnAsIGVwOworICBtcF9saW1iX3QgYTAsIHIwLCBrbTEsIGtwMWgsIGtpbnY7CisgIG1wX3NpemVfdCBybjsKKyAgdW5zaWduZWQgaTsKKworICBUTVBfREVDTDsKKworICBBU1NFUlQgKG4gPiAwKTsKKyAgQVNTRVJUIChhcFswXSAmIDEpOworICBBU1NFUlQgKGsgJiAxKTsKKyAgQVNTRVJUIChrID49IDMpOworCisgIFRNUF9NQVJLOworCisgIGFrbTEgPSBUTVBfQUxMT0NfTElNQlMgKDQqbik7CisgIHRwID0gYWttMSArIG47CisKKyAga20xID0gay0xOworICAvKiBGSVhNRTogQ291bGQgYXJyYW5nZSB0aGUgaXRlcmF0aW9uIHNvIHdlIGRvbid0IG5lZWQgdG8gY29tcHV0ZQorICAgICB0aGlzIHVwIGZyb250LCBjb21wdXRpbmcgYV57ay0xfSAqIHJeayBhcyAoYSByKV57ay0xfSAqIHIuIE5vdGUKKyAgICAgdGhhdCB3ZSBjYW4gdXNlIHdyYXBhcm91bmQgYWxzbyBmb3IgYSpyLCBzaW5jZSB0aGUgbG93IGhhbGYgaXMKKyAgICAgdW5jaGFuZ2VkIGZyb20gdGhlIHByZXZpb3VzIGl0ZXJhdGlvbi4gT3IgcG9zc2libHkgbXVsbWlkLiBBbHNvLAorICAgICBhIHIgPSBhXnsxL2t9LCBzbyB3ZSBnZXQgdGhhdCB2YWx1ZSB0b28sIGZvciBmcmVlPyAqLworICBtcG5fcG93bG8gKGFrbTEsIGFwLCAma20xLCAxLCBuLCB0cCk7IC8qIDMgbiBzY3JhdGNoIHNwYWNlICovCisKKyAgYTAgPSBhcFswXTsKKyAgYmludmVydF9saW1iIChraW52LCBrKTsKKworICAvKiA0IGJpdHM6IGFeezEvayAtIDF9IChtb2QgMTYpOgorCisJYSAlIDgKKwkxIDMgNSA3CisgICBrJTQgKy0tLS0tLS0KKyAgICAgMSB8MSAxIDEgMQorICAgICAzIHwxIDkgOSAxCisgICovCisgIHIwID0gMSArICgoKGsgPDwgMikgJiAoKGEwIDw8IDEpIF4gKGEwIDw8IDIpKSkgJiA4KTsKKyAgcjAgPSBraW52ICogcjAgKiAoaysxIC0gYWttMVswXSAqIHBvd2xpbWIgKHIwLCBrICYgMHg3ZikpOyAvKiA4IGJpdHMgKi8KKyAgcjAgPSBraW52ICogcjAgKiAoaysxIC0gYWttMVswXSAqIHBvd2xpbWIgKHIwLCBrICYgMHg3ZmZmKSk7IC8qIDE2IGJpdHMgKi8KKyAgcjAgPSBraW52ICogcjAgKiAoaysxIC0gYWttMVswXSAqIHBvd2xpbWIgKHIwLCBrKSk7IC8qIDMyIGJpdHMgKi8KKyNpZiBHTVBfTlVNQl9CSVRTID4gMzIKKyAgeworICAgIHVuc2lnbmVkIHByZWMgPSAzMjsKKyAgICBkbworICAgICAgeworCXIwID0ga2ludiAqIHIwICogKGsrMSAtIGFrbTFbMF0gKiBwb3dsaW1iIChyMCwgaykpOworCXByZWMgKj0gMjsKKyAgICAgIH0KKyAgICB3aGlsZSAocHJlYyA8IEdNUF9OVU1CX0JJVFMpOworICB9CisjZW5kaWYKKworICBycFswXSA9IHIwOworICBpZiAobiA9PSAxKQorICAgIHsKKyAgICAgIFRNUF9GUkVFOworICAgICAgcmV0dXJuOworICAgIH0KKworICAvKiBGb3Igb2RkIGssIChrKzEpLzIgPSBrLzIrMSwgYW5kIHRoZSBsYXR0ZXIgYXZvaWRzIG92ZXJmbG93LiAqLworICBrcDFoID0gay8yICsgMTsKKworICAvKiBGSVhNRTogU3BlY2lhbCBjYXNlIGZvciB0d28gbGltYiBpdGVyYXRpb24uICovCisgIHJucCA9IFRNUF9BTExPQ19MSU1CUyAoMipuICsgMSk7CisgIGVwID0gcm5wICsgbjsKKworICAvKiBGSVhNRTogUG9zc2libGUgdG8gdGhpcyBvbiB0aGUgZmx5IHdpdGggc29tZSBiaXQgZmlkZGxpbmcuICovCisgIGZvciAoaSA9IDA7IG4gPiAxOyBuID0gKG4gKyAxKS8yKQorICAgIHNpemVzW2krK10gPSBuOworCisgIHJuID0gMTsKKworICB3aGlsZSAoaS0tID4gMCkKKyAgICB7CisgICAgICAvKiBDb21wdXRlIHhee2srMX0uICovCisgICAgICBtcG5fc3FyIChlcCwgcnAsIHJuKTsgLyogRm9yIG9kZCBuLCB3cml0ZXMgbisxIGxpbWJzIGluIHRoZQorCQkJICAgICAgIGZpbmFsIGl0ZXJhdGlvbi4gKi8KKyAgICAgIG1wbl9wb3dsbyAocm5wLCBlcCwgJmtwMWgsIDEsIHNpemVzW2ldLCB0cCk7CisKKyAgICAgIC8qIE11bHRpcGx5IGJ5IGFee2stMX0uIENhbiB1c2Ugd3JhcGFyb3VuZDsgbG93IHBhcnQgZXF1YWxzIHIuICovCisKKyAgICAgIG1wbl9tdWxsb19uIChlcCwgcm5wLCBha20xLCBzaXplc1tpXSk7CisgICAgICBBU1NFUlQgKG1wbl9jbXAgKGVwLCBycCwgcm4pID09IDApOworCisgICAgICBBU1NFUlQgKHNpemVzW2ldIDw9IDIqcm4pOworICAgICAgbXBuX3BpMV9iZGl2X3FfMSAocnAgKyBybiwgZXAgKyBybiwgc2l6ZXNbaV0gLSBybiwgaywga2ludiwgMCk7CisgICAgICBtcG5fbmVnIChycCArIHJuLCBycCArIHJuLCBzaXplc1tpXSAtIHJuKTsKKyAgICAgIHJuID0gc2l6ZXNbaV07CisgICAgfQorICBUTVBfRlJFRTsKK30KKworLyogQ29tcHV0ZXMgYV57MS9rfSAobW9kIEJebikuIEJvdGggYSBhbmQgayBtdXN0IGJlIG9kZC4gKi8KK3ZvaWQKK21wbl9icm9vdCAobXBfcHRyIHJwLCBtcF9zcmNwdHIgYXAsIG1wX3NpemVfdCBuLCBtcF9saW1iX3QgaykKK3sKKyAgbXBfcHRyIHRwOworICBUTVBfREVDTDsKKworICBBU1NFUlQgKG4gPiAwKTsKKyAgQVNTRVJUIChhcFswXSAmIDEpOworICBBU1NFUlQgKGsgJiAxKTsKKworICBpZiAoayA9PSAxKQorICAgIHsKKyAgICAgIE1QTl9DT1BZIChycCwgYXAsIG4pOworICAgICAgcmV0dXJuOworICAgIH0KKworICBUTVBfTUFSSzsKKyAgdHAgPSBUTVBfQUxMT0NfTElNQlMgKG4pOworCisgIG1wbl9icm9vdF9pbnZtMSAodHAsIGFwLCBuLCBrKTsKKyAgbXBuX211bGxvX24gKHJwLCB0cCwgYXAsIG4pOworCisgIFRNUF9GUkVFOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2Jyb290aW52LmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvYnJvb3RpbnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTFiNTk3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2Jyb290aW52LmMKQEAgLTAsMCArMSwxNTkgQEAKKy8qIG1wbl9icm9vdGludiwgY29tcHV0ZSByIHN1Y2ggdGhhdCByXmsgKiB5ID0gMSAobW9kIDJeYikuCisKKyAgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBNYXJ0aW4gQm9paiAoYXMgcGFydCBvZiBwZXJmcG93LmMpLgorCitDb3B5cmlnaHQgMjAwOSwgMjAxMCwgMjAxMiwgMjAxMywgMjAxOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisKKy8qIENvbXB1dGVzIGFeMmUgKG1vZCBCKS4gVXNlcyByaWdodC10by1sZWZ0IGJpbmFyeSBhbGdvcml0aG0sIHNpbmNlCisgICB0eXBpY2FsIHVzZSB3aWxsIGhhdmUgZSBzbWFsbC4gKi8KK3N0YXRpYyBtcF9saW1iX3QKK3Bvd3NxdWFyZWRsaW1iIChtcF9saW1iX3QgYSwgbXBfbGltYl90IGUpCit7CisgIG1wX2xpbWJfdCByOworCisgIHIgPSAxOworICAvKiBpZiAoTElLRUxZIChlICE9IDApKSAqLworICBkbyB7CisgICAgYSAqPSBhOworICAgIGlmIChlICYgMSkKKyAgICAgIHIgKj0gYTsKKyAgICBlID4+PSAxOworICB9IHdoaWxlIChlICE9IDApOworCisgIHJldHVybiByOworfQorCisvKiBDb21wdXRlIHIgc3VjaCB0aGF0IHJeayAqIHkgPSAxIChtb2QgQl5uKS4KKworICAgSXRlcmF0ZXMKKyAgICAgcicgPC0tIGteey0xfSAoKGsrMSkgciAtIHJee2srMX0geSkgKG1vZCAyXmIpCisgICB1c2luZyBIZW5zZWwgbGlmdGluZywgZWFjaCB0aW1lIGRvdWJsaW5nIHRoZSBudW1iZXIgb2Yga25vd24gYml0cyBpbiByLgorCisgICBXb3JrcyBqdXN0IGZvciBvZGQgay4gIEVsc2UgdGhlIEhlbnNlbCBsaWZ0aW5nIGRlZ2VuZXJhdGVzLgorCisgICBGSVhNRToKKworICAgICAoMSkgTWFrZSBpdCB3b3JrIGZvciBrID09IEdNUF9MSU1CX01BWCAoaysxIGJlbG93IG92ZXJmbG93cykuCisKKyAgICAgKDIpIFJld3JpdGUgaXRlcmF0aW9uIGFzCisJICAgcicgPC0tIHIgLSBrXnstMX0gciAocl5rIHkgLSAxKQorCSBhbmQgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIHplcm8gbG93IHBhcnQgb2Ygcl5rIHkgLSAxLgorCisgICAgICgzKSBVc2Ugd3JhcC1hcm91bmQgdHJpY2suCisKKyAgICAgKDQpIFVzZSBhIHNtYWxsIHRhYmxlIHRvIGdldCBzdGFydGluZyB2YWx1ZS4KKworICAgU2NyYXRjaCBuZWVkOiBibiArICgoKGJuICsgMSkgPj4gMSkgKyAxKSArIHNjcmF0Y2ggZm9yIG1wbl9wb3dsbworICAgQ3VycmVudGx5IG1wbl9wb3dsbyByZXF1aXJlcyAzKmJuCisgICBzbyB0aGF0IDUqYm4gaXMgc3VyZWx5IGVub3VnaCwgd2hlcmUgYm4gPSBjZWlsIChibmIgLyBHTVBfTlVNQl9CSVRTKS4KKyovCisKK3ZvaWQKK21wbl9icm9vdGludiAobXBfcHRyIHJwLCBtcF9zcmNwdHIgeXAsIG1wX3NpemVfdCBibiwgbXBfbGltYl90IGssIG1wX3B0ciB0cCkKK3sKKyAgbXBfcHRyIHRwMiwgdHAzOworICBtcF9saW1iX3Qga2ludiwgazIsIHIwLCB5MDsKKyAgbXBfc2l6ZV90IG9yZGVyW0dNUF9MSU1CX0JJVFMgKyAxXTsKKyAgaW50IGQ7CisKKyAgQVNTRVJUIChibiA+IDApOworICBBU1NFUlQgKChrICYgMSkgIT0gMCk7CisKKyAgdHAyID0gdHAgKyBibjsKKyAgdHAzID0gdHAgKyBibiArICgoYm4gKyAzKSA+PiAxKTsKKyAgazIgPSAoayA+PiAxKSArIDE7IC8qIChrICsgMSkgLyAyICwgYnV0IGF2b2lkIGsrMSBvdmVyZmxvdyAqLworCisgIGJpbnZlcnRfbGltYiAoa2ludiwgayk7CisKKyAgLyogNC1iaXQgaW5pdGlhbCBhcHByb3hpbWF0aW9uOgorCisgICB5JTE2IHwgMSAgMyAgNSAgNyAgOSAxMSAxMyAxNSwKKyAgICBrJTQgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0razIlMgorICAgICAxICB8IDEgMTEgMTMgIDcgIDkgIDMgIDUgMTUgIHwgIDEKKyAgICAgMyAgfCAxICAzICA1ICA3ICA5IDExIDEzIDE1ICB8ICAwCisKKyAgKi8KKyAgeTAgPSB5cFswXTsKKworICByMCA9IHkwIF4gKCgoeTAgPDwgMSkgXiAoeTAgPDwgMikpICYgKGsyIDw8IDMpICYgOCk7CQkJLyogNCBiaXRzICovCisgIHIwID0ga2ludiAqIChrMiAqIHIwICogMiAtIHkwICogcG93c3F1YXJlZGxpbWIocjAsIGsyICYgMHgzZikpOwkvKiA4IGJpdHMgKi8KKyAgcjAgPSBraW52ICogKGsyICogcjAgKiAyIC0geTAgKiBwb3dzcXVhcmVkbGltYihyMCwgazIgJiAweDNmZmYpKTsJLyogMTYgYml0cyAqLworI2lmIEdNUF9OVU1CX0JJVFMgPiAxNgorICB7CisgICAgdW5zaWduZWQgcHJlYyA9IDE2OworICAgIGRvCisgICAgICB7CisJcjAgPSBraW52ICogKGsyICogcjAgKiAyIC0geTAgKiBwb3dzcXVhcmVkbGltYihyMCwgazIpKTsKKwlwcmVjICo9IDI7CisgICAgICB9CisgICAgd2hpbGUgKHByZWMgPCBHTVBfTlVNQl9CSVRTKTsKKyAgfQorI2VuZGlmCisKKyAgcnBbMF0gPSByMDsKKyAgaWYgKGJuID09IDEpCisgICAgcmV0dXJuOworCisgIGQgPSAwOworICBmb3IgKDsgYm4gIT0gMjsgYm4gPSAoYm4gKyAxKSA+PiAxKQorICAgIG9yZGVyW2QrK10gPSBibjsKKworICBvcmRlcltkXSA9IDI7CisgIGJuID0gMTsKKworICBkbworICAgIHsKKyAgICAgIG1wbl9zcXIgKHRwLCBycCwgYm4pOyAvKiBSZXN1bHQgbWF5IG92ZXJsYXAgdHAyICovCisgICAgICB0cDJbYm5dID0gbXBuX211bF8xICh0cDIsIHJwLCBibiwgazIgPDwgMSk7CisKKyAgICAgIGJuID0gb3JkZXJbZF07CisKKyAgICAgIG1wbl9wb3dsbyAocnAsIHRwLCAmazIsIDEsIGJuLCB0cDMpOworICAgICAgbXBuX211bGxvX24gKHRwLCB5cCwgcnAsIGJuKTsKKworICAgICAgLyogbXBuX3N1YiAodHAsIHRwMiwgKChibiArIDEpID4+IDEpICsgMSwgdHAsIGJuKTsgKi8KKyAgICAgIC8qIFRoZSBmdW5jdGlvbiBhYm92ZSBpcyBub3QgaGFuZGxlZCwgKChibiArIDEpID4+IDEpICsgMSA8PSBibiovCisgICAgICB7CisJbXBfc2l6ZV90IHBibiA9IChibiArIDMpID4+IDE7IC8qIFNpemUgb2YgdHAyICovCisJaW50IGJvcnJvdzsKKwlib3Jyb3cgPSBtcG5fc3ViX24gKHRwLCB0cDIsIHRwLCBwYm4pICE9IDA7CisJaWYgKGJuID4gcGJuKSAvKiAzIDwgYm4gKi8KKwkgIHsKKwkgICAgaWYgKGJvcnJvdykKKwkgICAgICBtcG5fY29tICh0cCArIHBibiwgdHAgKyBwYm4sIGJuIC0gcGJuKTsKKwkgICAgZWxzZQorCSAgICAgIG1wbl9uZWcgKHRwICsgcGJuLCB0cCArIHBibiwgYm4gLSBwYm4pOworCSAgfQorICAgICAgfQorICAgICAgbXBuX3BpMV9iZGl2X3FfMSAocnAsIHRwLCBibiwgaywga2ludiwgMCk7CisgICAgfQorICB3aGlsZSAoLS1kID49IDApOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2JzcXJ0LmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvYnNxcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzE4NGYwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2JzcXJ0LmMKQEAgLTAsMCArMSw0NyBAQAorLyogbXBuX2JzcXJ0LCBhXnsxLzJ9IChtb2QgMl5uKS4KKworQ29weXJpZ2h0IDIwMDksIDIwMTAsIDIwMTIsIDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCisKK3ZvaWQKK21wbl9ic3FydCAobXBfcHRyIHJwLCBtcF9zcmNwdHIgYXAsIG1wX2JpdGNudF90IG5iLCBtcF9wdHIgdHApCit7CisgIG1wX3B0ciBzcDsKKyAgbXBfc2l6ZV90IG47CisKKyAgQVNTRVJUIChuYiA+IDApOworCisgIG4gPSBuYiAvIEdNUF9OVU1CX0JJVFM7CisgIHNwID0gdHAgKyBuOworCisgIG1wbl9ic3FydGludiAodHAsIGFwLCBuYiwgc3ApOworICBtcG5fbXVsbG9fbiAocnAsIHRwLCBhcCwgbik7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvYnNxcnRpbnYuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9ic3FydGludi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyODY3NzMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvYnNxcnRpbnYuYwpAQCAtMCwwICsxLDEwMyBAQAorLyogbXBuX2JzcXJ0aW52LCBjb21wdXRlIHIgc3VjaCB0aGF0IHJeMiAqIHkgPSAxIChtb2QgMl57YisxfSkuCisKKyAgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBNYXJ0aW4gQm9paiAoYXMgcGFydCBvZiBwZXJmcG93LmMpLgorCitDb3B5cmlnaHQgMjAwOSwgMjAxMCwgMjAxMiwgMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisKKy8qIENvbXB1dGUgciBzdWNoIHRoYXQgcl4yICogeSA9IDEgKG1vZCAyXntiKzF9KS4KKyAgIFJldHVybiBub24temVybyBpZiBzdWNoIGFuIGludGVnZXIgciBleGlzdHMuCisKKyAgIEl0ZXJhdGVzCisgICAgIHInIDwtLSAoM3IgLSByXjMgeSkgLyAyCisgICB1c2luZyBIZW5zZWwgbGlmdGluZy4gIFNpbmNlIHdlIGRpdmlkZSBieSB0d28sIHRoZSBIZW5zZWwgbGlmdGluZyBpcworICAgc29tZXdoYXQgZGVnZW5lcmF0ZXMuICBUaGVyZWZvcmUsIHdlIGxpZnQgZnJvbSAyXmIgdG8gMl57YisxfS0xLgorCisgICBGSVhNRToKKyAgICAgKDEpIFNpbXBsaWZ5IHRvIGRvIHByZWNpc2lvbiBib29rLWtlZXBpbmcgaW4gbGltYnMgcmF0aGVyIHRoYW4gYml0cy4KKworICAgICAoMikgUmV3cml0ZSBpdGVyYXRpb24gYXMKKwkgICByJyA8LS0gciAtIHIgKHJeMiB5IC0gMSkgLyAyCisJIGFuZCB0YWtlIGFkdmFudGFnZSBvZiB6ZXJvIGxvdyBwYXJ0IG9mIHJeMiB5IC0gMS4KKworICAgICAoMykgVXNlIHdyYXAtYXJvdW5kIHRyaWNrLgorCisgICAgICg0KSBVc2UgYSBzbWFsbCB0YWJsZSB0byBnZXQgc3RhcnRpbmcgdmFsdWUuCisqLworaW50CittcG5fYnNxcnRpbnYgKG1wX3B0ciBycCwgbXBfc3JjcHRyIHlwLCBtcF9iaXRjbnRfdCBibmIsIG1wX3B0ciB0cCkKK3sKKyAgbXBfcHRyIHRwMjsKKyAgbXBfc2l6ZV90IGJuLCBvcmRlcltHTVBfTElNQl9CSVRTICsgMV07CisgIGludCBpLCBkOworCisgIEFTU0VSVCAoYm5iID4gMCk7CisKKyAgYm4gPSAxICsgYm5iIC8gR01QX0xJTUJfQklUUzsKKworICB0cDIgPSB0cCArIGJuOworCisgIHJwWzBdID0gMTsKKyAgaWYgKGJuYiA9PSAxKQorICAgIHsKKyAgICAgIGlmICgoeXBbMF0gJiAzKSAhPSAxKQorCXJldHVybiAwOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmICgoeXBbMF0gJiA3KSAhPSAxKQorCXJldHVybiAwOworCisgICAgICBkID0gMDsKKyAgICAgIGZvciAoOyBibmIgIT0gMjsgYm5iID0gKGJuYiArIDIpID4+IDEpCisJb3JkZXJbZCsrXSA9IGJuYjsKKworICAgICAgZm9yIChpID0gZCAtIDE7IGkgPj0gMDsgaS0tKQorCXsKKwkgIGJuYiA9IG9yZGVyW2ldOworCSAgYm4gPSAxICsgYm5iIC8gR01QX0xJTUJfQklUUzsKKworCSAgbXBuX3NxcmxvICh0cCwgcnAsIGJuKTsKKwkgIG1wbl9tdWxsb19uICh0cDIsIHJwLCB0cCwgYm4pOyAvKiB0cDIgPC0gcnAgXiAzICovCisKKwkgIG1wbl9tdWxfMSAodHAsIHJwLCBibiwgMyk7CisKKwkgIG1wbl9tdWxsb19uIChycCwgeXAsIHRwMiwgYm4pOworCisjaWYgSEFWRV9OQVRJVkVfbXBuX3JzaDFzdWJfbgorCSAgbXBuX3JzaDFzdWJfbiAocnAsIHRwLCBycCwgYm4pOworI2Vsc2UKKwkgIG1wbl9zdWJfbiAodHAyLCB0cCwgcnAsIGJuKTsKKwkgIG1wbl9yc2hpZnQgKHJwLCB0cDIsIGJuLCAxKTsKKyNlbmRpZgorCX0KKyAgICB9CisgIHJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2NtcC5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2NtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MDMxNGIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvY21wLmMKQEAgLTAsMCArMSwzMyBAQAorLyogbXBuX2NtcCAtLSBDb21wYXJlIHR3byBsb3ctbGV2ZWwgbmF0dXJhbC1udW1iZXIgaW50ZWdlcnMuCisKK0NvcHlyaWdodCAxOTkxLCAxOTkzLCAxOTk0LCAxOTk2LCAyMDAwLCAyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIF9fR01QX0ZPUkNFX21wbl9jbXAgMQorCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9jbmRfYWRkX24uYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9jbmRfYWRkX24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmIxMzczCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2NuZF9hZGRfbi5jCkBAIC0wLDAgKzEsNjkgQEAKKy8qIG1wbl9jbmRfYWRkX24gLS0gQ29tcHV0ZSBSID0gVSArIFYgaWYgQ05EICE9IDAgb3IgUiA9IFUgaWYgQ05EID09IDAuCisgICBCb3RoIGNhc2VzIHNob3VsZCB0YWtlIHRoZSBzYW1lIHRpbWUgYW5kIHBlcmZvcm0gdGhlIGV4YWN0IHNhbWUgbWVtb3J5CisgICBhY2Nlc3Nlcywgc2luY2UgdGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHdoZXJlIHNpZGUtY2hhbm5lbAorICAgYXR0YWNrIHJlc2lsaWVuY2UgaXMgcmVsZXZhbnQuCisKK0NvcHlyaWdodCAxOTkyLTE5OTQsIDE5OTYsIDIwMDAsIDIwMDIsIDIwMDgsIDIwMDksIDIwMTEsIDIwMTMgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworbXBfbGltYl90CittcG5fY25kX2FkZF9uIChtcF9saW1iX3QgY25kLCBtcF9wdHIgcnAsIG1wX3NyY3B0ciB1cCwgbXBfc3JjcHRyIHZwLCBtcF9zaXplX3QgbikKK3sKKyAgbXBfbGltYl90IHVsLCB2bCwgc2wsIHJsLCBjeSwgY3kxLCBjeTIsIG1hc2s7CisKKyAgQVNTRVJUIChuID49IDEpOworICBBU1NFUlQgKE1QTl9TQU1FX09SX1NFUEFSQVRFX1AgKHJwLCB1cCwgbikpOworICBBU1NFUlQgKE1QTl9TQU1FX09SX1NFUEFSQVRFX1AgKHJwLCB2cCwgbikpOworCisgIG1hc2sgPSAtKG1wX2xpbWJfdCkgKGNuZCAhPSAwKTsKKyAgY3kgPSAwOworICBkbworICAgIHsKKyAgICAgIHVsID0gKnVwKys7CisgICAgICB2bCA9ICp2cCsrICYgbWFzazsKKyNpZiBHTVBfTkFJTF9CSVRTID09IDAKKyAgICAgIHNsID0gdWwgKyB2bDsKKyAgICAgIGN5MSA9IHNsIDwgdWw7CisgICAgICBybCA9IHNsICsgY3k7CisgICAgICBjeTIgPSBybCA8IHNsOworICAgICAgY3kgPSBjeTEgfCBjeTI7CisgICAgICAqcnArKyA9IHJsOworI2Vsc2UKKyAgICAgIHJsID0gdWwgKyB2bDsKKyAgICAgIHJsICs9IGN5OworICAgICAgY3kgPSBybCA+PiBHTVBfTlVNQl9CSVRTOworICAgICAgKnJwKysgPSBybCAmIEdNUF9OVU1CX01BU0s7CisjZW5kaWYKKyAgICB9CisgIHdoaWxlICgtLW4gIT0gMCk7CisKKyAgcmV0dXJuIGN5OworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2NuZF9zdWJfbi5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2NuZF9zdWJfbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNGFkOGEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvY25kX3N1Yl9uLmMKQEAgLTAsMCArMSw2OSBAQAorLyogbXBuX2NuZF9zdWJfbiAtLSBDb21wdXRlIFIgPSBVIC0gViBpZiBDTkQgIT0gMCBvciBSID0gVSBpZiBDTkQgPT0gMC4KKyAgIEJvdGggY2FzZXMgc2hvdWxkIHRha2UgdGhlIHNhbWUgdGltZSBhbmQgcGVyZm9ybSB0aGUgZXhhY3Qgc2FtZSBtZW1vcnkKKyAgIGFjY2Vzc2VzLCBzaW5jZSB0aGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgd2hlcmUgc2lkZS1jaGFubmVsCisgICBhdHRhY2sgcmVzaWxpZW5jZSBpcyByZWxldmFudC4KKworQ29weXJpZ2h0IDE5OTItMTk5NCwgMTk5NiwgMjAwMCwgMjAwMiwgMjAwOCwgMjAwOSwgMjAxMSwgMjAxMyBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCittcF9saW1iX3QKK21wbl9jbmRfc3ViX24gKG1wX2xpbWJfdCBjbmQsIG1wX3B0ciBycCwgbXBfc3JjcHRyIHVwLCBtcF9zcmNwdHIgdnAsIG1wX3NpemVfdCBuKQoreworICBtcF9saW1iX3QgdWwsIHZsLCBzbCwgcmwsIGN5LCBjeTEsIGN5MiwgbWFzazsKKworICBBU1NFUlQgKG4gPj0gMSk7CisgIEFTU0VSVCAoTVBOX1NBTUVfT1JfU0VQQVJBVEVfUCAocnAsIHVwLCBuKSk7CisgIEFTU0VSVCAoTVBOX1NBTUVfT1JfU0VQQVJBVEVfUCAocnAsIHZwLCBuKSk7CisKKyAgbWFzayA9IC0obXBfbGltYl90KSAoY25kICE9IDApOworICBjeSA9IDA7CisgIGRvCisgICAgeworICAgICAgdWwgPSAqdXArKzsKKyAgICAgIHZsID0gKnZwKysgJiBtYXNrOworI2lmIEdNUF9OQUlMX0JJVFMgPT0gMAorICAgICAgc2wgPSB1bCAtIHZsOworICAgICAgY3kxID0gc2wgPiB1bDsKKyAgICAgIHJsID0gc2wgLSBjeTsKKyAgICAgIGN5MiA9IHJsID4gc2w7CisgICAgICBjeSA9IGN5MSB8IGN5MjsKKyAgICAgICpycCsrID0gcmw7CisjZWxzZQorICAgICAgcmwgPSB1bCAtIHZsOworICAgICAgcmwgLT0gY3k7CisgICAgICBjeSA9IHJsID4+IChHTVBfTElNQl9CSVRTIC0gMSk7CisgICAgICAqcnArKyA9IHJsICYgR01QX05VTUJfTUFTSzsKKyNlbmRpZgorICAgIH0KKyAgd2hpbGUgKC0tbiAhPSAwKTsKKworICByZXR1cm4gY3k7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvY25kX3N3YXAuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9jbmRfc3dhcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZDg1NmQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvY25kX3N3YXAuYwpAQCAtMCwwICsxLDUwIEBACisvKiBtcG5fY25kX3N3YXAKKworICAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IE5pZWxzIE3DtmxsZXIKKworQ29weXJpZ2h0IDIwMTMsIDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCit2b2lkCittcG5fY25kX3N3YXAgKG1wX2xpbWJfdCBjbmQsIHZvbGF0aWxlIG1wX2xpbWJfdCAqYXAsIHZvbGF0aWxlIG1wX2xpbWJfdCAqYnAsCisJICAgICAgbXBfc2l6ZV90IG4pCit7CisgIHZvbGF0aWxlIG1wX2xpbWJfdCBtYXNrID0gLSAobXBfbGltYl90KSAoY25kICE9IDApOworICBtcF9zaXplX3QgaTsKKyAgZm9yIChpID0gMDsgaSA8IG47IGkrKykKKyAgICB7CisgICAgICBtcF9saW1iX3QgYSwgYiwgdDsKKyAgICAgIGEgPSBhcFtpXTsKKyAgICAgIGIgPSBicFtpXTsKKyAgICAgIHQgPSAoYSBeIGIpICYgbWFzazsKKyAgICAgIGFwW2ldID0gYSBeIHQ7CisgICAgICBicFtpXSA9IGIgXiB0OworICAgIH0KK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9jb20uYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9jb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGU1ODI0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2NvbS5jCkBAIC0wLDAgKzEsNDQgQEAKKy8qIG1wbl9jb20gLSBjb21wbGVtZW50IGFuIG1wbi4KKworQ29weXJpZ2h0IDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCisjdW5kZWYgbXBuX2NvbQorI2RlZmluZSBtcG5fY29tIF9fTVBOKGNvbSkKKwordm9pZAorbXBuX2NvbSAobXBfcHRyIHJwLCBtcF9zcmNwdHIgdXAsIG1wX3NpemVfdCBuKQoreworICBtcF9saW1iX3QgdWw7CisgIGRvIHsKKyAgICAgIHVsID0gKnVwKys7CisgICAgICAqcnArKyA9IH51bCAmIEdNUF9OVU1CX01BU0s7CisgIH0gd2hpbGUgKC0tbiAhPSAwKTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9jb21iX3RhYmxlcy5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2NvbWJfdGFibGVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVkYjc3YgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9jb21iX3RhYmxlcy5jCkBAIC0wLDAgKzEsNDcgQEAKKy8qIENvbnN0IHRhYmxlcyBzaGFyZWQgYW1vbmcgY29tYmluYXRvcmljIGZ1bmN0aW9ucy4KKworICAgVEhFIENPTlRFTlRTIE9GIFRISVMgRklMRSBBUkUgRk9SIElOVEVSTkFMIFVTRSBBTkQgQVJFIEFMTU9TVCBDRVJUQUlOIFRPCisgICBCRSBTVUJKRUNUIFRPIElOQ09NUEFUSUJMRSBDSEFOR0VTIElOIEZVVFVSRSBHTlUgTVAgUkVMRUFTRVMuCisKK0NvcHlyaWdodCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworLyogRW50cnkgaSBjb250YWlucyAoaSEvMl50KSB3aGVyZSB0IGlzIGNob3NlbiBzdWNoIHRoYXQgdGhlIHBhcmVudGhlc2lzCisgICBpcyBhbiBvZGQgaW50ZWdlci4gKi8KK2NvbnN0IG1wX2xpbWJfdCBfX2dtcF9vZGRmYWNfdGFibGVbXSA9IHsgT05FX0xJTUJfT0REX0ZBQ1RPUklBTF9UQUJMRSwgT05FX0xJTUJfT0REX0ZBQ1RPUklBTF9FWFRUQUJMRSB9OworCisvKiBFbnRyeSBpIGNvbnRhaW5zICgoMmkrMSkhIS8yXnQpIHdoZXJlIHQgaXMgY2hvc2VuIHN1Y2ggdGhhdCB0aGUgcGFyZW50aGVzaXMKKyAgIGlzIGFuIG9kZCBpbnRlZ2VyLiAqLworY29uc3QgbXBfbGltYl90IF9fZ21wX29kZDJmYWNfdGFibGVbXSA9IHsgT05FX0xJTUJfT0REX0RPVUJMRUZBQ1RPUklBTF9UQUJMRSB9OworCisvKiBFbnRyeSBpIGNvbnRhaW5zIDJpLXBvcGMoMmkpLiAqLworY29uc3QgdW5zaWduZWQgY2hhciBfX2dtcF9mYWMyY250X3RhYmxlW10gPSB7IFRBQkxFXzJOX01JTlVTX1BPUENfMk4gfTsKKworY29uc3QgbXBfbGltYl90IF9fZ21wX2xpbWJyb290c190YWJsZVtdID0geyBOVEhfUk9PVF9OVU1CX01BU0tfVEFCTEUgfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9jb21wdXRlX3Bvd3RhYi5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2NvbXB1dGVfcG93dGFiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRmYmM2NAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9jb21wdXRlX3Bvd3RhYi5jCkBAIC0wLDAgKzEsMzczIEBACisvKiBtcG5fY29tcHV0ZV9wb3d0YWIuCisKKyAgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3Jiam9ybiBHcmFubHVuZC4KKworICAgVEhFIEZVTkNUSU9OUyBJTiBUSElTIEZJTEUgQVJFIElOVEVSTkFMIFdJVEggTVVUQUJMRSBJTlRFUkZBQ0VTLiAgSVQgSVMgT05MWQorICAgU0FGRSBUTyBSRUFDSCBUSEVNIFRIUk9VR0ggRE9DVU1FTlRFRCBJTlRFUkZBQ0VTLiAgSU4gRkFDVCwgSVQgSVMgQUxNT1NUCisgICBHVUFSQU5URUVEIFRIQVQgVEhFWSBXSUxMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR05VIE1QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAxOTkxLTIwMTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKy8qCisgIENBVkVBVFM6CisgICogVGhlIGV4cHRhYiBhbmQgcG93dGFiIHZlY3RvcnMgYXJlIGluIG9wcG9zaXRlIG9yZGVycy4gIFByb2JhYmx5IE9LLgorICAqIENvbnNpZGVyIGdldHRpbmcgcmlkIG9mIGV4cHRhYiwgZG9pbmcgYml0IG9wcyBvbiB0aGUgdW4gYXJndW1lbnQgaW5zdGVhZC4KKyAgKiBDb25zaWRlciByb3VuZGluZyBncmVhdGVzdCBwb3dlciBzbGlnaHRseSB1cHdhcmRzIHRvIHNhdmUgYWRqdXN0bWVudHMuCisgICogSW4gcG93dGFiX2RlY2lkZSwgY29uc2lkZXIgY29tcHV0aW5nIGNvc3QgZnJvbSBqdXN0IHRoZSAyLTMgbGFyZ2VzdAorICAgIG9wZXJhbmRzLCBzaW5jZSBzbWFsbGVyIG9wZXJhbmQgY29udHJpYnV0ZSBsaXR0bGUuICBUaGlzIG1ha2VzIG1vc3Qgc2Vuc2UKKyAgICBpZiBleHB0YWIgaXMgc3VwcHJlc3NlZC4KKyovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCisjaWZuZGVmIERJVl8xX1ZTX01VTF8xX1BFUkNFTlQKKyNkZWZpbmUgRElWXzFfVlNfTVVMXzFfUEVSQ0VOVCAxNTAKKyNlbmRpZgorCisjZGVmaW5lIFNFVF9wb3dlcnNfdChkZXN0LCBwdHIsIHNpemUsIGRpYiwgYiwgc2gpCVwKKyAgZG8gewkJCQkJCQlcCisgICAgZGVzdC5wID0gcHRyOwkJCQkJXAorICAgIGRlc3QubiA9IHNpemU7CQkJCQlcCisgICAgZGVzdC5kaWdpdHNfaW5fYmFzZSA9IGRpYjsJCQkJXAorICAgIGRlc3QuYmFzZSA9IGI7CQkJCQlcCisgICAgZGVzdC5zaGlmdCA9IHNoOwkJCQkJXAorICB9IHdoaWxlICgwKQorCisjaWYgRElWXzFfVlNfTVVMXzFfUEVSQ0VOVCA+IDEyMAorI2RlZmluZSBIQVZFX21wbl9jb21wdXRlX3Bvd3RhYl9tdWwgMQorc3RhdGljIHZvaWQKK21wbl9jb21wdXRlX3Bvd3RhYl9tdWwgKHBvd2Vyc190ICpwb3d0YWIsIG1wX3B0ciBwb3d0YWJfbWVtLCBtcF9zaXplX3QgdW4sCisJCQlpbnQgYmFzZSwgY29uc3Qgc2l6ZV90ICpleHB0YWIsIHNpemVfdCBuX3Bvd3MpCit7CisgIG1wX3NpemVfdCBuOworICBtcF9wdHIgcCwgdDsKKyAgbXBfbGltYl90IGN5OworICBsb25nIHN0YXJ0X2lkeDsKKyAgaW50IGM7CisKKyAgbXBfbGltYl90IGJpZ19iYXNlID0gbXBfYmFzZXNbYmFzZV0uYmlnX2Jhc2U7CisgIGludCBjaGFyc19wZXJfbGltYiA9IG1wX2Jhc2VzW2Jhc2VdLmNoYXJzX3Blcl9saW1iOworCisgIG1wX3B0ciBwb3d0YWJfbWVtX3B0ciA9IHBvd3RhYl9tZW07CisKKyAgc2l6ZV90IGRpZ2l0c19pbl9iYXNlID0gY2hhcnNfcGVyX2xpbWI7CisKKyAgcG93ZXJzX3QgKnB0ID0gcG93dGFiOworCisgIHAgPSBwb3d0YWJfbWVtX3B0cjsKKyAgcG93dGFiX21lbV9wdHIgKz0gMTsKKyAgcFswXSA9IGJpZ19iYXNlOworCisgIFNFVF9wb3dlcnNfdCAocHRbMF0sIHAsIDEsIGRpZ2l0c19pbl9iYXNlLCBiYXNlLCAwKTsKKyAgcHQrKzsKKworICB0ID0gcG93dGFiX21lbV9wdHI7CisgIHBvd3RhYl9tZW1fcHRyICs9IDI7CisgIHRbMV0gPSBtcG5fbXVsXzEgKHQsIHAsIDEsIGJpZ19iYXNlKTsKKyAgbiA9IDI7CisKKyAgZGlnaXRzX2luX2Jhc2UgKj0gMjsKKworICBjID0gdFswXSA9PSAwOworICB0ICs9IGM7CisgIG4gLT0gYzsKKyAgbXBfc2l6ZV90IHNoaWZ0ID0gYzsKKworICBTRVRfcG93ZXJzX3QgKHB0WzBdLCB0LCBuLCBkaWdpdHNfaW5fYmFzZSwgYmFzZSwgc2hpZnQpOworICBwID0gdDsKKyAgcHQrKzsKKworICBpZiAoZXhwdGFiWzBdID09ICgoc2l6ZV90KSBjaGFyc19wZXJfbGltYiA8PCBuX3Bvd3MpKQorICAgIHsKKyAgICAgIHN0YXJ0X2lkeCA9IG5fcG93cyAtIDI7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKCgoZGlnaXRzX2luX2Jhc2UgKyBjaGFyc19wZXJfbGltYikgPDwgKG5fcG93cy0yKSkgPD0gZXhwdGFiWzBdKQorCXsKKwkgIC8qIDMsIHNvbWV0aW1lcyBhZGp1c3RlZCB0byA0LiAgKi8KKwkgIHQgPSBwb3d0YWJfbWVtX3B0cjsKKwkgIHBvd3RhYl9tZW1fcHRyICs9IDQ7CisJICB0W25dID0gY3kgPSBtcG5fbXVsXzEgKHQsIHAsIG4sIGJpZ19iYXNlKTsKKwkgIG4gKz0gY3kgIT0gMDs7CisKKwkgIGRpZ2l0c19pbl9iYXNlICs9IGNoYXJzX3Blcl9saW1iOworCisJICBjICA9IHRbMF0gPT0gMDsKKwkgIHQgKz0gYzsKKwkgIG4gLT0gYzsKKwkgIHNoaWZ0ICs9IGM7CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8qIDIgY29weSwgd2lsbCBhbHdheXMgYmVjb21lIDMgd2l0aCBiYWNrLW11bHRpcGxpY2F0aW9uLiAgKi8KKwkgIHQgPSBwb3d0YWJfbWVtX3B0cjsKKwkgIHBvd3RhYl9tZW1fcHRyICs9IDM7CisJICB0WzBdID0gcFswXTsKKwkgIHRbMV0gPSBwWzFdOworCX0KKworICAgICAgU0VUX3Bvd2Vyc190IChwdFswXSwgdCwgbiwgZGlnaXRzX2luX2Jhc2UsIGJhc2UsIHNoaWZ0KTsKKyAgICAgIHAgPSB0OworICAgICAgcHQrKzsKKyAgICAgIHN0YXJ0X2lkeCA9IG5fcG93cyAtIDM7CisgICAgfQorCisgIGZvciAobG9uZyBwaSA9IHN0YXJ0X2lkeDsgcGkgPj0gMDsgcGktLSkKKyAgICB7CisgICAgICB0ID0gcG93dGFiX21lbV9wdHI7CisgICAgICBwb3d0YWJfbWVtX3B0ciArPSAyICogbiArIDI7CisKKyAgICAgIEFTU0VSVCAocG93dGFiX21lbV9wdHIgPCBwb3d0YWJfbWVtICsgbXBuX3N0cl9wb3d0YWJfYWxsb2MgKHVuKSk7CisKKyAgICAgIG1wbl9zcXIgKHQsIHAsIG4pOworCisgICAgICBkaWdpdHNfaW5fYmFzZSAqPSAyOworICAgICAgbiAqPSAyOworICAgICAgbiAtPSB0W24gLSAxXSA9PSAwOworICAgICAgc2hpZnQgKj0gMjsKKworICAgICAgYyA9IHRbMF0gPT0gMDsKKyAgICAgIHQgKz0gYzsKKyAgICAgIG4gLT0gYzsKKyAgICAgIHNoaWZ0ICs9IGM7CisKKyAgICAgIC8qIEFkanVzdCBuZXcgdmFsdWUgaWYgaXQgaXMgdG9vIHNtYWxsIGFzIGlucHV0IHRvIHRoZSBuZXh0IHNxdWFyaW5nLiAgKi8KKyAgICAgIGlmICgoKGRpZ2l0c19pbl9iYXNlICsgY2hhcnNfcGVyX2xpbWIpIDw8IHBpKSA8PSBleHB0YWJbMF0pCisJeworCSAgdFtuXSA9IGN5ID0gbXBuX211bF8xICh0LCB0LCBuLCBiaWdfYmFzZSk7CisJICBuICs9IGN5ICE9IDA7CisKKwkgIGRpZ2l0c19pbl9iYXNlICs9IGNoYXJzX3Blcl9saW1iOworCisJICBjICA9IHRbMF0gPT0gMDsKKwkgIHQgKz0gYzsKKwkgIG4gLT0gYzsKKwkgIHNoaWZ0ICs9IGM7CisJfQorCisgICAgICBTRVRfcG93ZXJzX3QgKHB0WzBdLCB0LCBuLCBkaWdpdHNfaW5fYmFzZSwgYmFzZSwgc2hpZnQpOworCisgICAgICAvKiBBZGp1c3QgcHJldmlvdXMgdmFsdWUgaWYgaXQgaXMgbm90IGF0IGl0cyB0YXJnZXQgcG93ZXIuICAqLworICAgICAgaWYgKHB0Wy0xXS5kaWdpdHNfaW5fYmFzZSA8IGV4cHRhYltwaSArIDFdKQorCXsKKwkgIG1wX3NpemVfdCBuID0gcHRbLTFdLm47CisJICBtcF9wdHIgcCA9IHB0Wy0xXS5wOworCSAgcFtuXSA9IGN5ID0gbXBuX211bF8xIChwLCBwLCBuLCBiaWdfYmFzZSk7CisJICBuICs9IGN5ICE9IDA7CisKKwkgIEFTU0VSVCAocHRbLTFdLmRpZ2l0c19pbl9iYXNlICsgY2hhcnNfcGVyX2xpbWIgPT0gZXhwdGFiW3BpICsgMV0pOworCSAgcHRbLTFdLmRpZ2l0c19pbl9iYXNlID0gZXhwdGFiW3BpICsgMV07CisKKwkgIGMgPSBwWzBdID09IDA7CisJICBwdFstMV0ucCA9IHAgKyBjOworCSAgcHRbLTFdLm4gPSBuIC0gYzsKKwkgIHB0Wy0xXS5zaGlmdCArPSBjOworCX0KKworICAgICAgcCA9IHQ7CisgICAgICBwdCsrOworICAgIH0KK30KKyNlbmRpZgorCisjaWYgRElWXzFfVlNfTVVMXzFfUEVSQ0VOVCA8IDI3NQorI2RlZmluZSBIQVZFX21wbl9jb21wdXRlX3Bvd3RhYl9kaXYgMQorc3RhdGljIHZvaWQKK21wbl9jb21wdXRlX3Bvd3RhYl9kaXYgKHBvd2Vyc190ICpwb3d0YWIsIG1wX3B0ciBwb3d0YWJfbWVtLCBtcF9zaXplX3QgdW4sCisJCQlpbnQgYmFzZSwgY29uc3Qgc2l6ZV90ICpleHB0YWIsIHNpemVfdCBuX3Bvd3MpCit7CisgIG1wX3B0ciBwLCB0OworCisgIG1wX2xpbWJfdCBiaWdfYmFzZSA9IG1wX2Jhc2VzW2Jhc2VdLmJpZ19iYXNlOworICBpbnQgY2hhcnNfcGVyX2xpbWIgPSBtcF9iYXNlc1tiYXNlXS5jaGFyc19wZXJfbGltYjsKKworICBtcF9wdHIgcG93dGFiX21lbV9wdHIgPSBwb3d0YWJfbWVtOworCisgIHNpemVfdCBkaWdpdHNfaW5fYmFzZSA9IGNoYXJzX3Blcl9saW1iOworCisgIHBvd2Vyc190ICpwdCA9IHBvd3RhYjsKKworICBwID0gcG93dGFiX21lbV9wdHI7CisgIHBvd3RhYl9tZW1fcHRyICs9IDE7CisgIHBbMF0gPSBiaWdfYmFzZTsKKworICBTRVRfcG93ZXJzX3QgKHB0WzBdLCBwLCAxLCBkaWdpdHNfaW5fYmFzZSwgYmFzZSwgMCk7CisgIHB0Kys7CisKKyAgbXBfc2l6ZV90IG4gPSAxOworICBtcF9zaXplX3Qgc2hpZnQgPSAwOworICBmb3IgKGxvbmcgcGkgPSBuX3Bvd3MgLSAxOyBwaSA+PSAwOyBwaS0tKQorICAgIHsKKyAgICAgIHQgPSBwb3d0YWJfbWVtX3B0cjsKKyAgICAgIHBvd3RhYl9tZW1fcHRyICs9IDIgKiBuOworCisgICAgICBBU1NFUlQgKHBvd3RhYl9tZW1fcHRyIDwgcG93dGFiX21lbSArIG1wbl9zdHJfcG93dGFiX2FsbG9jICh1bikpOworCisgICAgICBtcG5fc3FyICh0LCBwLCBuKTsKKyAgICAgIG4gPSAyICogbiAtIDE7IG4gKz0gdFtuXSAhPSAwOworICAgICAgZGlnaXRzX2luX2Jhc2UgKj0gMjsKKworICAgICAgaWYgKGRpZ2l0c19pbl9iYXNlICE9IGV4cHRhYltwaV0pCS8qIGlmICgoKCh1biAtIDEpID4+IHBpKSAmIDIpID09IDApICovCisJeworI2lmIEhBVkVfTkFUSVZFX21wbl9waTFfYmRpdl9xXzEgfHwgISBIQVZFX05BVElWRV9tcG5fZGl2ZXhhY3RfMQorCSAgaWYgKF9fR01QX0xJS0VMWSAoYmFzZSA9PSAxMCkpCisJICAgIG1wbl9waTFfYmRpdl9xXzEgKHQsIHQsIG4sIGJpZ19iYXNlID4+IE1QX0JBU0VTX0JJR19CQVNFX0NUWl8xMCwKKwkJCSAgICAgIE1QX0JBU0VTX0JJR19CQVNFX0JJTlZFUlRFRF8xMCwKKwkJCSAgICAgIE1QX0JBU0VTX0JJR19CQVNFX0NUWl8xMCk7CisJICBlbHNlCisjZW5kaWYKKwkgICAgLyogRklYTUU6IFdlIGNvdWxkIHVzZSBfcGkxIGhlcmUgaWYgd2UgYWRkIGJpZ19iYXNlX2JpbnZlcnRlZCBhbmQKKwkgICAgICAgYmlnX2Jhc2VfY3R6IGZpZWxkcyB0byBzdHJ1Y3QgYmFzZXMuICBUaGF0IHdvdWxkIGFkZCBhYm91dCAyIEtpQgorCSAgICAgICB0byBtcF9iYXNlcy5jLgorCSAgICAgICBGSVhNRTogVXNlIG1wbl9iZGl2X3FfMSBoZXJlIHdoZW4gbXBuX2RpdmV4YWN0XzEgaXMgY29udmVydGVkIHRvCisJICAgICAgIG1wbl9iZGl2X3FfMSBmb3IgbW9yZSBtYWNoaW5lcy4gKi8KKwkgICAgbXBuX2RpdmV4YWN0XzEgKHQsIHQsIG4sIGJpZ19iYXNlKTsKKworCSAgbiAtPSB0W24gLSAxXSA9PSAwOworCSAgZGlnaXRzX2luX2Jhc2UgLT0gY2hhcnNfcGVyX2xpbWI7CisJfQorCisgICAgICBzaGlmdCAqPSAyOworICAgICAgLyogU3RyaXAgbG93IHplcm8gbGltYnMsIGJ1dCBiZSBjYXJlZnVsIHRvIGtlZXAgdGhlIHJlc3VsdCBkaXZpc2libGUgYnkKKwkgYmlnX2Jhc2UuICAqLworICAgICAgd2hpbGUgKHRbMF0gPT0gMCAmJiAodFsxXSAmICgoYmlnX2Jhc2UgJiAtYmlnX2Jhc2UpIC0gMSkpID09IDApCisJeworCSAgdCsrOworCSAgbi0tOworCSAgc2hpZnQrKzsKKwl9CisgICAgICBwID0gdDsKKworICAgICAgU0VUX3Bvd2Vyc190IChwdFswXSwgcCwgbiwgZGlnaXRzX2luX2Jhc2UsIGJhc2UsIHNoaWZ0KTsKKyAgICAgIHB0Kys7CisgICAgfQorCisgIC8qIFN0cmlwIGFueSByZW1haW5pbmcgbG93IHplcm8gbGltYnMuICAqLworICBwdCAtPSBuX3Bvd3MgKyAxOworICBmb3IgKGxvbmcgcGkgPSBuX3Bvd3M7IHBpID49IDA7IHBpLS0pCisgICAgeworICAgICAgbXBfcHRyIHQgPSBwdFtwaV0ucDsKKyAgICAgIG1wX3NpemVfdCBzaGlmdCA9IHB0W3BpXS5zaGlmdDsKKyAgICAgIG1wX3NpemVfdCBuID0gcHRbcGldLm47CisgICAgICBpbnQgYzsKKyAgICAgIGMgPSB0WzBdID09IDA7CisgICAgICB0ICs9IGM7CisgICAgICBuIC09IGM7CisgICAgICBzaGlmdCArPSBjOworICAgICAgcHRbcGldLnAgPSB0OworICAgICAgcHRbcGldLnNoaWZ0ID0gc2hpZnQ7CisgICAgICBwdFtwaV0ubiA9IG47CisgICAgfQorfQorI2VuZGlmCisKK3N0YXRpYyBsb25nCitwb3d0YWJfZGVjaWRlIChzaXplX3QgKmV4cHRhYiwgc2l6ZV90IHVuLCBpbnQgYmFzZSkKK3sKKyAgaW50IGNoYXJzX3Blcl9saW1iID0gbXBfYmFzZXNbYmFzZV0uY2hhcnNfcGVyX2xpbWI7CisgIGxvbmcgbl9wb3dzID0gMDsKKyAgZm9yIChzaXplX3QgcG4gPSAodW4gKyAxKSA+PiAxOyBwbiAhPSAxOyBwbiA9IChwbiArIDEpID4+IDEpCisgICAgeworICAgICAgZXhwdGFiW25fcG93c10gPSBwbiAqIGNoYXJzX3Blcl9saW1iOworICAgICAgbl9wb3dzKys7CisgICAgfQorICBleHB0YWJbbl9wb3dzXSA9IGNoYXJzX3Blcl9saW1iOworCisjaWYgSEFWRV9tcG5fY29tcHV0ZV9wb3d0YWJfbXVsICYmIEhBVkVfbXBuX2NvbXB1dGVfcG93dGFiX2RpdgorICBzaXplX3QgcG4gPSB1biAtIDE7CisgIHNpemVfdCB4biA9ICh1biArIDEpID4+IDE7CisgIHVuc2lnbmVkIG1jb3N0ID0gMTsKKyAgdW5zaWduZWQgZGNvc3QgPSAxOworICBmb3IgKGxvbmcgaSA9IG5fcG93cyAtIDI7IGkgPj0gMDsgaS0tKQorICAgIHsKKyAgICAgIHNpemVfdCBwb3cgPSAocG4gPj4gKGkgKyAxKSkgKyAxOworCisgICAgICBpZiAocG93ICYgMSkKKwlkY29zdCArPSBwb3c7CisKKyAgICAgIGlmICh4biAhPSAocG93IDw8IGkpKQorCXsKKwkgIGlmIChwb3cgPiAyICYmIChwb3cgJiAxKSA9PSAwKQorCSAgICBtY29zdCArPSAyICogcG93OworCSAgZWxzZQorCSAgICBtY29zdCArPSBwb3c7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGlmIChwb3cgJiAxKQorCSAgICBtY29zdCArPSBwb3c7CisJfQorICAgIH0KKworICBkY29zdCA9IGRjb3N0ICogRElWXzFfVlNfTVVMXzFfUEVSQ0VOVCAvIDEwMDsKKworICBpZiAobWNvc3QgPD0gZGNvc3QpCisgICAgcmV0dXJuIG5fcG93czsKKyAgZWxzZQorICAgIHJldHVybiAtbl9wb3dzOworI2VsaWYgSEFWRV9tcG5fY29tcHV0ZV9wb3d0YWJfbXVsCisgIHJldHVybiBuX3Bvd3M7CisjZWxpZiBIQVZFX21wbl9jb21wdXRlX3Bvd3RhYl9kaXYKKyAgcmV0dXJuIC1uX3Bvd3M7CisjZWxzZQorI2Vycm9yICJubyBwb3d0YWIgZnVuY3Rpb24gYXZhaWxhYmxlIgorI2VuZGlmCit9CisKK3NpemVfdAorbXBuX2NvbXB1dGVfcG93dGFiIChwb3dlcnNfdCAqcG93dGFiLCBtcF9wdHIgcG93dGFiX21lbSwgbXBfc2l6ZV90IHVuLCBpbnQgYmFzZSkKK3sKKyAgc2l6ZV90IGV4cHRhYltHTVBfTElNQl9CSVRTXTsKKworICBsb25nIG5fcG93cyA9IHBvd3RhYl9kZWNpZGUgKGV4cHRhYiwgdW4sIGJhc2UpOworCisjaWYgSEFWRV9tcG5fY29tcHV0ZV9wb3d0YWJfbXVsICYmIEhBVkVfbXBuX2NvbXB1dGVfcG93dGFiX2RpdgorICBpZiAobl9wb3dzID49IDApCisgICAgeworICAgICAgbXBuX2NvbXB1dGVfcG93dGFiX211bCAocG93dGFiLCBwb3d0YWJfbWVtLCB1biwgYmFzZSwgZXhwdGFiLCBuX3Bvd3MpOworICAgICAgcmV0dXJuIG5fcG93czsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBtcG5fY29tcHV0ZV9wb3d0YWJfZGl2IChwb3d0YWIsIHBvd3RhYl9tZW0sIHVuLCBiYXNlLCBleHB0YWIsIC1uX3Bvd3MpOworICAgICAgcmV0dXJuIC1uX3Bvd3M7CisgICAgfQorI2VsaWYgSEFWRV9tcG5fY29tcHV0ZV9wb3d0YWJfbXVsCisgIEFTU0VSVCAobl9wb3dzID4gMCk7CisgIG1wbl9jb21wdXRlX3Bvd3RhYl9tdWwgKHBvd3RhYiwgcG93dGFiX21lbSwgdW4sIGJhc2UsIGV4cHRhYiwgbl9wb3dzKTsKKyAgcmV0dXJuIG5fcG93czsKKyNlbGlmIEhBVkVfbXBuX2NvbXB1dGVfcG93dGFiX2RpdgorICBBU1NFUlQgKG5fcG93cyA8IDApOworICBtcG5fY29tcHV0ZV9wb3d0YWJfZGl2IChwb3d0YWIsIHBvd3RhYl9tZW0sIHVuLCBiYXNlLCBleHB0YWIsIC1uX3Bvd3MpOworICByZXR1cm4gLW5fcG93czsKKyNlbHNlCisjZXJyb3IgIm5vIHBvd3RhYiBmdW5jdGlvbiBhdmFpbGFibGUiCisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9jb3B5ZC5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2NvcHlkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RlZjAwNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9jb3B5ZC5jCkBAIC0wLDAgKzEsNDAgQEAKKy8qIG1wbl9jb3B5ZAorCitDb3B5cmlnaHQgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisKK3ZvaWQKK21wbl9jb3B5ZCAobXBfcHRyIHJwLCBtcF9zcmNwdHIgdXAsIG1wX3NpemVfdCBuKQoreworICBtcF9zaXplX3QgaTsKKworICBmb3IgKGkgPSBuIC0gMTsgaSA+PSAwOyBpLS0pCisgICAgcnBbaV0gPSB1cFtpXTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9jb3B5aS5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2NvcHlpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM2ZTBiNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9jb3B5aS5jCkBAIC0wLDAgKzEsNDIgQEAKKy8qIG1wbl9jb3B5aQorCitDb3B5cmlnaHQgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisKK3ZvaWQKK21wbl9jb3B5aSAobXBfcHRyIHJwLCBtcF9zcmNwdHIgdXAsIG1wX3NpemVfdCBuKQoreworICBtcF9zaXplX3QgaTsKKworICB1cCArPSBuOworICBycCArPSBuOworICBmb3IgKGkgPSAtbjsgaSAhPSAwOyBpKyspCisgICAgcnBbaV0gPSB1cFtpXTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9kY3BpMV9iZGl2X3EuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9kY3BpMV9iZGl2X3EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTRiZDJhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2RjcGkxX2JkaXZfcS5jCkBAIC0wLDAgKzEsMTU5IEBACisvKiBtcG5fZGNwaTFfYmRpdl9xIC0tIGRpdmlkZS1hbmQtY29ucXVlciBIZW5zZWwgZGl2aXNpb24gd2l0aCBwcmVjb21wdXRlZAorICAgaW52ZXJzZSwgcmV0dXJuaW5nIHF1b3RpZW50LgorCisgICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgTmllbHMgTcO2bGxlciBhbmQgVG9yYmpvcm4gR3Jhbmx1bmQuCisKKyAgIFRIRSBGVU5DVElPTlMgSU4gVEhJUyBGSUxFIEFSRSBJTlRFUk5BTCBXSVRIIE1VVEFCTEUgSU5URVJGQUNFUy4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggVEhFTSBUSFJPVUdIIERPQ1VNRU5URUQgSU5URVJGQUNFUy4gIElOIEZBQ1QsIElUIElTIEFMTU9TVAorICAgR1VBUkFOVEVFRCBUSEFUIFRIRVkgV0lMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEgRlVUVVJFIEdNUCBSRUxFQVNFLgorCitDb3B5cmlnaHQgMjAwNiwgMjAwNywgMjAwOS0yMDExLCAyMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworCitzdGF0aWMgbXBfc2l6ZV90CittcG5fZGNwaTFfYmRpdl9xX25faXRjaCAobXBfc2l6ZV90IG4pCit7CisgIC8qIE5PVEU6IERlcGVuZHMgb24gbXVsbG9fbiBhbmQgbXBuX2RjcGkxX2JkaXZfcXJfbiBpbnRlcmZhY2UgKi8KKyAgcmV0dXJuIG47Cit9CisKKy8qIENvbXB1dGVzIFEgPSAtIE4gLyBEIG1vZCBCXm4sIGRlc3Ryb3lzIE4uCisKKyAgIE4gPSB7bnAsbn0KKyAgIEQgPSB7ZHAsbn0KKyovCisKK3N0YXRpYyB2b2lkCittcG5fZGNwaTFfYmRpdl9xX24gKG1wX3B0ciBxcCwKKwkJICAgIG1wX3B0ciBucCwgbXBfc3JjcHRyIGRwLCBtcF9zaXplX3QgbiwKKwkJICAgIG1wX2xpbWJfdCBkaW52LCBtcF9wdHIgdHApCit7CisgIHdoaWxlIChBQk9WRV9USFJFU0hPTEQgKG4sIERDX0JESVZfUV9USFJFU0hPTEQpKQorICAgIHsKKyAgICAgIG1wX3NpemVfdCBsbywgaGk7CisgICAgICBtcF9saW1iX3QgY3k7CisKKyAgICAgIGxvID0gbiA+PiAxOwkJCS8qIGZsb29yKG4vMikgKi8KKyAgICAgIGhpID0gbiAtIGxvOwkJCS8qIGNlaWwobi8yKSAqLworCisgICAgICBjeSA9IG1wbl9kY3BpMV9iZGl2X3FyX24gKHFwLCBucCwgZHAsIGxvLCBkaW52LCB0cCk7CisKKyAgICAgIG1wbl9tdWxsb19uICh0cCwgcXAsIGRwICsgaGksIGxvKTsKKyAgICAgIG1wbl9hZGRfbiAobnAgKyBoaSwgbnAgKyBoaSwgdHAsIGxvKTsKKworICAgICAgaWYgKGxvIDwgaGkpCisJeworCSAgY3kgKz0gbXBuX2FkZG11bF8xIChucCArIGxvLCBxcCwgbG8sIGRwW2xvXSk7CisJICBucFtuIC0gMV0gKz0gY3k7CisJfQorICAgICAgcXAgKz0gbG87CisgICAgICBucCArPSBsbzsKKyAgICAgIG4gLT0gbG87CisgICAgfQorICBtcG5fc2JwaTFfYmRpdl9xIChxcCwgbnAsIG4sIGRwLCBuLCBkaW52KTsKK30KKworLyogQ29tcHV0ZXMgUSA9IC0gTiAvIEQgbW9kIEJebm4sIGRlc3Ryb3lzIE4uCisKKyAgIE4gPSB7bnAsbm59CisgICBEID0ge2RwLGRufQorKi8KKwordm9pZAorbXBuX2RjcGkxX2JkaXZfcSAobXBfcHRyIHFwLAorCQkgIG1wX3B0ciBucCwgbXBfc2l6ZV90IG5uLAorCQkgIG1wX3NyY3B0ciBkcCwgbXBfc2l6ZV90IGRuLAorCQkgIG1wX2xpbWJfdCBkaW52KQoreworICBtcF9zaXplX3QgcW47CisgIG1wX2xpbWJfdCBjeTsKKyAgbXBfcHRyIHRwOworICBUTVBfREVDTDsKKworICBUTVBfTUFSSzsKKworICBBU1NFUlQgKGRuID49IDIpOworICBBU1NFUlQgKG5uIC0gZG4gPj0gMCk7CisgIEFTU0VSVCAoZHBbMF0gJiAxKTsKKworICB0cCA9IFRNUF9TQUxMT0NfTElNQlMgKGRuKTsKKworICBxbiA9IG5uOworCisgIGlmIChxbiA+IGRuKQorICAgIHsKKyAgICAgIC8qIFJlZHVjZSBxbiBtb2QgZG4gaW4gYSBzdXBlci1lZmZpY2llbnQgbWFubmVyLiAgKi8KKyAgICAgIGRvCisJcW4gLT0gZG47CisgICAgICB3aGlsZSAocW4gPiBkbik7CisKKyAgICAgIC8qIFBlcmZvcm0gdGhlIHR5cGljYWxseSBzbWFsbGVyIGJsb2NrIGZpcnN0LiAgKi8KKyAgICAgIGlmIChCRUxPV19USFJFU0hPTEQgKHFuLCBEQ19CRElWX1FSX1RIUkVTSE9MRCkpCisJY3kgPSBtcG5fc2JwaTFfYmRpdl9xciAocXAsIG5wLCAyICogcW4sIGRwLCBxbiwgZGludik7CisgICAgICBlbHNlCisJY3kgPSBtcG5fZGNwaTFfYmRpdl9xcl9uIChxcCwgbnAsIGRwLCBxbiwgZGludiwgdHApOworCisgICAgICBpZiAocW4gIT0gZG4pCisJeworCSAgaWYgKHFuID4gZG4gLSBxbikKKwkgICAgbXBuX211bCAodHAsIHFwLCBxbiwgZHAgKyBxbiwgZG4gLSBxbik7CisJICBlbHNlCisJICAgIG1wbl9tdWwgKHRwLCBkcCArIHFuLCBkbiAtIHFuLCBxcCwgcW4pOworCSAgbXBuX2luY3JfdSAodHAgKyBxbiwgY3kpOworCisJICBtcG5fYWRkIChucCArIHFuLCBucCArIHFuLCBubiAtIHFuLCB0cCwgZG4pOworCSAgY3kgPSAwOworCX0KKworICAgICAgbnAgKz0gcW47CisgICAgICBxcCArPSBxbjsKKworICAgICAgcW4gPSBubiAtIHFuOworICAgICAgd2hpbGUgKHFuID4gZG4pCisJeworCSAgbXBuX2FkZF8xIChucCArIGRuLCBucCArIGRuLCBxbiAtIGRuLCBjeSk7CisJICBjeSA9IG1wbl9kY3BpMV9iZGl2X3FyX24gKHFwLCBucCwgZHAsIGRuLCBkaW52LCB0cCk7CisJICBxcCArPSBkbjsKKwkgIG5wICs9IGRuOworCSAgcW4gLT0gZG47CisJfQorICAgICAgbXBuX2RjcGkxX2JkaXZfcV9uIChxcCwgbnAsIGRwLCBkbiwgZGludiwgdHApOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChCRUxPV19USFJFU0hPTEQgKHFuLCBEQ19CRElWX1FfVEhSRVNIT0xEKSkKKwltcG5fc2JwaTFfYmRpdl9xIChxcCwgbnAsIHFuLCBkcCwgcW4sIGRpbnYpOworICAgICAgZWxzZQorCW1wbl9kY3BpMV9iZGl2X3FfbiAocXAsIG5wLCBkcCwgcW4sIGRpbnYsIHRwKTsKKyAgICB9CisKKyAgVE1QX0ZSRUU7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvZGNwaTFfYmRpdl9xci5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2RjcGkxX2JkaXZfcXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWRhNDRmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2RjcGkxX2JkaXZfcXIuYwpAQCAtMCwwICsxLDE3NiBAQAorLyogbXBuX2RjcGkxX2JkaXZfcXIgLS0gZGl2aWRlLWFuZC1jb25xdWVyIEhlbnNlbCBkaXZpc2lvbiB3aXRoIHByZWNvbXB1dGVkCisgICBpbnZlcnNlLCByZXR1cm5pbmcgcXVvdGllbnQgYW5kIHJlbWFpbmRlci4KKworICAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IE5pZWxzIE3DtmxsZXIgYW5kIFRvcmJqb3JuIEdyYW5sdW5kLgorCisgICBUSEUgRlVOQ1RJT05TIElOIFRISVMgRklMRSBBUkUgSU5URVJOQUwgV0lUSCBNVVRBQkxFIElOVEVSRkFDRVMuICBJVCBJUyBPTkxZCisgICBTQUZFIFRPIFJFQUNIIFRIRU0gVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuICBJTiBGQUNULCBJVCBJUyBBTE1PU1QKKyAgIEdVQVJBTlRFRUQgVEhBVCBUSEVZIFdJTEwgQ0hBTkdFIE9SIERJU0FQUEVBUiBJTiBBIEZVVFVSRSBHTVAgUkVMRUFTRS4KKworQ29weXJpZ2h0IDIwMDYsIDIwMDcsIDIwMDksIDIwMTAsIDIwMTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCisKKy8qIENvbXB1dGVzIEhlbnNlbCBiaW5hcnkgZGl2aXNpb24gb2Yge25wLCAyKm59IGJ5IHtkcCwgbn0uCisKKyAgIE91dHB1dDoKKworICAgICAgcSA9IC1uICogZF57LTF9IG1vZCAyXntxbiAqIEdNUF9OVU1CX0JJVFN9LAorCisgICAgICByID0gKG4gKyBxICogZCkgKiAyXnstcW4gKiBHTVBfTlVNQl9CSVRTfQorCisgICBTdG9yZXMgcSBhdCBxcC4gU3RvcmVzIHRoZSBuIGxlYXN0IHNpZ25pZmljYW50IGxpbWJzIG9mIHIgYXQgdGhlIGhpZ2ggaGFsZgorICAgb2YgbnAsIGFuZCByZXR1cm5zIHRoZSBjYXJyeSBmcm9tIHRoZSBhZGRpdGlvbiBuICsgcSpkLgorCisgICBkIG11c3QgYmUgb2RkLiBkaW52IGlzICgtZCleLTEgbW9kIDJeR01QX05VTUJfQklUUy4gKi8KKworbXBfc2l6ZV90CittcG5fZGNwaTFfYmRpdl9xcl9uX2l0Y2ggKG1wX3NpemVfdCBuKQoreworICByZXR1cm4gbjsKK30KKworbXBfbGltYl90CittcG5fZGNwaTFfYmRpdl9xcl9uIChtcF9wdHIgcXAsIG1wX3B0ciBucCwgbXBfc3JjcHRyIGRwLCBtcF9zaXplX3QgbiwKKwkJICAgICBtcF9saW1iX3QgZGludiwgbXBfcHRyIHRwKQoreworICBtcF9zaXplX3QgbG8sIGhpOworICBtcF9saW1iX3QgY3k7CisgIG1wX2xpbWJfdCByaDsKKworICBsbyA9IG4gPj4gMTsJCQkvKiBmbG9vcihuLzIpICovCisgIGhpID0gbiAtIGxvOwkJCS8qIGNlaWwobi8yKSAqLworCisgIGlmIChCRUxPV19USFJFU0hPTEQgKGxvLCBEQ19CRElWX1FSX1RIUkVTSE9MRCkpCisgICAgY3kgPSBtcG5fc2JwaTFfYmRpdl9xciAocXAsIG5wLCAyICogbG8sIGRwLCBsbywgZGludik7CisgIGVsc2UKKyAgICBjeSA9IG1wbl9kY3BpMV9iZGl2X3FyX24gKHFwLCBucCwgZHAsIGxvLCBkaW52LCB0cCk7CisKKyAgbXBuX211bCAodHAsIGRwICsgbG8sIGhpLCBxcCwgbG8pOworCisgIG1wbl9pbmNyX3UgKHRwICsgbG8sIGN5KTsKKyAgcmggPSBtcG5fYWRkIChucCArIGxvLCBucCArIGxvLCBuICsgaGksIHRwLCBuKTsKKworICBpZiAoQkVMT1dfVEhSRVNIT0xEIChoaSwgRENfQkRJVl9RUl9USFJFU0hPTEQpKQorICAgIGN5ID0gbXBuX3NicGkxX2JkaXZfcXIgKHFwICsgbG8sIG5wICsgbG8sIDIgKiBoaSwgZHAsIGhpLCBkaW52KTsKKyAgZWxzZQorICAgIGN5ID0gbXBuX2RjcGkxX2JkaXZfcXJfbiAocXAgKyBsbywgbnAgKyBsbywgZHAsIGhpLCBkaW52LCB0cCk7CisKKyAgbXBuX211bCAodHAsIHFwICsgbG8sIGhpLCBkcCArIGhpLCBsbyk7CisKKyAgbXBuX2luY3JfdSAodHAgKyBoaSwgY3kpOworICByaCArPSBtcG5fYWRkX24gKG5wICsgbiwgbnAgKyBuLCB0cCwgbik7CisKKyAgcmV0dXJuIHJoOworfQorCittcF9saW1iX3QKK21wbl9kY3BpMV9iZGl2X3FyIChtcF9wdHIgcXAsIG1wX3B0ciBucCwgbXBfc2l6ZV90IG5uLAorCQkgICBtcF9zcmNwdHIgZHAsIG1wX3NpemVfdCBkbiwgbXBfbGltYl90IGRpbnYpCit7CisgIG1wX3NpemVfdCBxbjsKKyAgbXBfbGltYl90IHJyLCBjeTsKKyAgbXBfcHRyIHRwOworICBUTVBfREVDTDsKKworICBUTVBfTUFSSzsKKworICBBU1NFUlQgKGRuID49IDIpOwkJLyogdG8gYWRoZXJlIHRvIG1wbl9zYnBpMV9kaXZfcXIncyBsaW1pdHMgKi8KKyAgQVNTRVJUIChubiAtIGRuID49IDEpOwkvKiB0byBhZGhlcmUgdG8gbXBuX3NicGkxX2Rpdl9xcidzIGxpbWl0cyAqLworICBBU1NFUlQgKGRwWzBdICYgMSk7CisKKyAgdHAgPSBUTVBfU0FMTE9DX0xJTUJTIChkbik7CisKKyAgcW4gPSBubiAtIGRuOworCisgIGlmIChxbiA+IGRuKQorICAgIHsKKyAgICAgIC8qIFJlZHVjZSBxbiBtb2QgZG4gd2l0aG91dCBkaXZpc2lvbiwgb3B0aW1pemluZyBzbWFsbCBvcGVyYXRpb25zLiAgKi8KKyAgICAgIGRvCisJcW4gLT0gZG47CisgICAgICB3aGlsZSAocW4gPiBkbik7CisKKyAgICAgIC8qIFBlcmZvcm0gdGhlIHR5cGljYWxseSBzbWFsbGVyIGJsb2NrIGZpcnN0LiAgKi8KKyAgICAgIGlmIChCRUxPV19USFJFU0hPTEQgKHFuLCBEQ19CRElWX1FSX1RIUkVTSE9MRCkpCisJY3kgPSBtcG5fc2JwaTFfYmRpdl9xciAocXAsIG5wLCAyICogcW4sIGRwLCBxbiwgZGludik7CisgICAgICBlbHNlCisJY3kgPSBtcG5fZGNwaTFfYmRpdl9xcl9uIChxcCwgbnAsIGRwLCBxbiwgZGludiwgdHApOworCisgICAgICByciA9IDA7CisgICAgICBpZiAocW4gIT0gZG4pCisJeworCSAgaWYgKHFuID4gZG4gLSBxbikKKwkgICAgbXBuX211bCAodHAsIHFwLCBxbiwgZHAgKyBxbiwgZG4gLSBxbik7CisJICBlbHNlCisJICAgIG1wbl9tdWwgKHRwLCBkcCArIHFuLCBkbiAtIHFuLCBxcCwgcW4pOworCSAgbXBuX2luY3JfdSAodHAgKyBxbiwgY3kpOworCisJICByciA9IG1wbl9hZGQgKG5wICsgcW4sIG5wICsgcW4sIG5uIC0gcW4sIHRwLCBkbik7CisJICBjeSA9IDA7CisJfQorCisgICAgICBucCArPSBxbjsKKyAgICAgIHFwICs9IHFuOworCisgICAgICBxbiA9IG5uIC0gZG4gLSBxbjsKKyAgICAgIGRvCisJeworCSAgcnIgKz0gbXBuX2FkZF8xIChucCArIGRuLCBucCArIGRuLCBxbiwgY3kpOworCSAgY3kgPSBtcG5fZGNwaTFfYmRpdl9xcl9uIChxcCwgbnAsIGRwLCBkbiwgZGludiwgdHApOworCSAgcXAgKz0gZG47CisJICBucCArPSBkbjsKKwkgIHFuIC09IGRuOworCX0KKyAgICAgIHdoaWxlIChxbiA+IDApOworICAgICAgVE1QX0ZSRUU7CisgICAgICByZXR1cm4gcnIgKyBjeTsKKyAgICB9CisKKyAgaWYgKEJFTE9XX1RIUkVTSE9MRCAocW4sIERDX0JESVZfUVJfVEhSRVNIT0xEKSkKKyAgICBjeSA9IG1wbl9zYnBpMV9iZGl2X3FyIChxcCwgbnAsIDIgKiBxbiwgZHAsIHFuLCBkaW52KTsKKyAgZWxzZQorICAgIGN5ID0gbXBuX2RjcGkxX2JkaXZfcXJfbiAocXAsIG5wLCBkcCwgcW4sIGRpbnYsIHRwKTsKKworICByciA9IDA7CisgIGlmIChxbiAhPSBkbikKKyAgICB7CisgICAgICBpZiAocW4gPiBkbiAtIHFuKQorCW1wbl9tdWwgKHRwLCBxcCwgcW4sIGRwICsgcW4sIGRuIC0gcW4pOworICAgICAgZWxzZQorCW1wbl9tdWwgKHRwLCBkcCArIHFuLCBkbiAtIHFuLCBxcCwgcW4pOworICAgICAgbXBuX2luY3JfdSAodHAgKyBxbiwgY3kpOworCisgICAgICByciA9IG1wbl9hZGQgKG5wICsgcW4sIG5wICsgcW4sIG5uIC0gcW4sIHRwLCBkbik7CisgICAgICBjeSA9IDA7CisgICAgfQorCisgIFRNUF9GUkVFOworICByZXR1cm4gcnIgKyBjeTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9kY3BpMV9kaXZfcS5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2RjcGkxX2Rpdl9xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkwNWM5OAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9kY3BpMV9kaXZfcS5jCkBAIC0wLDAgKzEsODYgQEAKKy8qIG1wbl9kY19kaXZfcSAtLSBkaXZpZGUtYW5kLWNvbnF1ZXIgZGl2aXNpb24sIHJldHVybmluZyBleGFjdCBxdW90aWVudAorICAgb25seS4KKworICAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqb3JuIEdyYW5sdW5kIGFuZCBNYXJjbyBCb2RyYXRvLgorCisgICBUSEUgRlVOQ1RJT04gSU4gVEhJUyBGSUxFIElTIElOVEVSTkFMIFdJVEggQSBNVVRBQkxFIElOVEVSRkFDRS4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggSVQgVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuICBJTiBGQUNULCBJVCBJUyBBTE1PU1QKKyAgIEdVQVJBTlRFRUQgVEhBVCBJVCBXSUxMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR01QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAyMDA2LCAyMDA3LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworCittcF9saW1iX3QKK21wbl9kY3BpMV9kaXZfcSAobXBfcHRyIHFwLCBtcF9wdHIgbnAsIG1wX3NpemVfdCBubiwKKwkJIG1wX3NyY3B0ciBkcCwgbXBfc2l6ZV90IGRuLCBnbXBfcGkxX3QgKmRpbnYpCit7CisgIG1wX3B0ciB0cCwgd3A7CisgIG1wX2xpbWJfdCBxaDsKKyAgbXBfc2l6ZV90IHFuOworICBUTVBfREVDTDsKKworICBUTVBfTUFSSzsKKworICBBU1NFUlQgKGRuID49IDYpOworICBBU1NFUlQgKG5uIC0gZG4gPj0gMyk7CisgIEFTU0VSVCAoZHBbZG4tMV0gJiBHTVBfTlVNQl9ISUdIQklUKTsKKworICB0cCA9IFRNUF9BTExPQ19MSU1CUyAobm4gKyAxKTsKKyAgTVBOX0NPUFkgKHRwICsgMSwgbnAsIG5uKTsKKyAgdHBbMF0gPSAwOworCisgIHFuID0gbm4gLSBkbjsKKyAgd3AgPSBUTVBfQUxMT0NfTElNQlMgKHFuICsgMSk7CisKKyAgcWggPSBtcG5fZGNwaTFfZGl2YXBwcl9xICh3cCwgdHAsIG5uICsgMSwgZHAsIGRuLCBkaW52KTsKKworICBpZiAod3BbMF0gPT0gMCkKKyAgICB7CisgICAgICBtcF9saW1iX3QgY3k7CisKKyAgICAgIGlmIChxbiA+IGRuKQorCW1wbl9tdWwgKHRwLCB3cCArIDEsIHFuLCBkcCwgZG4pOworICAgICAgZWxzZQorCW1wbl9tdWwgKHRwLCBkcCwgZG4sIHdwICsgMSwgcW4pOworCisgICAgICBjeSA9IChxaCAhPSAwKSA/IG1wbl9hZGRfbiAodHAgKyBxbiwgdHAgKyBxbiwgZHAsIGRuKSA6IDA7CisKKyAgICAgIGlmIChjeSB8fCBtcG5fY21wICh0cCwgbnAsIG5uKSA+IDApIC8qIEF0IG1vc3QgaXMgd3JvbmcgYnkgb25lLCBubyBjeWNsZS4gKi8KKwlxaCAtPSBtcG5fc3ViXzEgKHFwLCB3cCArIDEsIHFuLCAxKTsKKyAgICAgIGVsc2UgLyogU2FtZSBhcyBiZWxvdyAqLworCU1QTl9DT1BZIChxcCwgd3AgKyAxLCBxbik7CisgICAgfQorICBlbHNlCisgICAgTVBOX0NPUFkgKHFwLCB3cCArIDEsIHFuKTsKKworICBUTVBfRlJFRTsKKyAgcmV0dXJuIHFoOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2RjcGkxX2Rpdl9xci5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2RjcGkxX2Rpdl9xci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3YTY1ZjgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvZGNwaTFfZGl2X3FyLmMKQEAgLTAsMCArMSwyNDggQEAKKy8qIG1wbl9kY3BpMV9kaXZfcXJfbiAtLSByZWN1cnNpdmUgZGl2aWRlLWFuZC1jb25xdWVyIGRpdmlzaW9uIGZvciBhcmJpdHJhcnkKKyAgIHNpemUgb3BlcmFuZHMuCisKKyAgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3Jiam9ybiBHcmFubHVuZC4KKworICAgVEhFIEZVTkNUSU9OUyBJTiBUSElTIEZJTEUgQVJFIElOVEVSTkFMIFdJVEggTVVUQUJMRSBJTlRFUkZBQ0VTLiAgSVQgSVMgT05MWQorICAgU0FGRSBUTyBSRUFDSCBUSEVNIFRIUk9VR0ggRE9DVU1FTlRFRCBJTlRFUkZBQ0VTLiAgSU4gRkFDVCwgSVQgSVMgQUxNT1NUCisgICBHVUFSQU5URUVEIFRIQVQgVEhFWSBXSUxMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR01QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAyMDA2LCAyMDA3LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKyNpbmNsdWRlICJsb25nbG9uZy5oIgorCisKK21wX2xpbWJfdAorbXBuX2RjcGkxX2Rpdl9xcl9uIChtcF9wdHIgcXAsIG1wX3B0ciBucCwgbXBfc3JjcHRyIGRwLCBtcF9zaXplX3QgbiwKKwkJICAgIGdtcF9waTFfdCAqZGludiwgbXBfcHRyIHRwKQoreworICBtcF9zaXplX3QgbG8sIGhpOworICBtcF9saW1iX3QgY3ksIHFoLCBxbDsKKworICBsbyA9IG4gPj4gMTsJCQkvKiBmbG9vcihuLzIpICovCisgIGhpID0gbiAtIGxvOwkJCS8qIGNlaWwobi8yKSAqLworCisgIGlmIChCRUxPV19USFJFU0hPTEQgKGhpLCBEQ19ESVZfUVJfVEhSRVNIT0xEKSkKKyAgICBxaCA9IG1wbl9zYnBpMV9kaXZfcXIgKHFwICsgbG8sIG5wICsgMiAqIGxvLCAyICogaGksIGRwICsgbG8sIGhpLCBkaW52LT5pbnYzMik7CisgIGVsc2UKKyAgICBxaCA9IG1wbl9kY3BpMV9kaXZfcXJfbiAocXAgKyBsbywgbnAgKyAyICogbG8sIGRwICsgbG8sIGhpLCBkaW52LCB0cCk7CisKKyAgbXBuX211bCAodHAsIHFwICsgbG8sIGhpLCBkcCwgbG8pOworCisgIGN5ID0gbXBuX3N1Yl9uIChucCArIGxvLCBucCArIGxvLCB0cCwgbik7CisgIGlmIChxaCAhPSAwKQorICAgIGN5ICs9IG1wbl9zdWJfbiAobnAgKyBuLCBucCArIG4sIGRwLCBsbyk7CisKKyAgd2hpbGUgKGN5ICE9IDApCisgICAgeworICAgICAgcWggLT0gbXBuX3N1Yl8xIChxcCArIGxvLCBxcCArIGxvLCBoaSwgMSk7CisgICAgICBjeSAtPSBtcG5fYWRkX24gKG5wICsgbG8sIG5wICsgbG8sIGRwLCBuKTsKKyAgICB9CisKKyAgaWYgKEJFTE9XX1RIUkVTSE9MRCAobG8sIERDX0RJVl9RUl9USFJFU0hPTEQpKQorICAgIHFsID0gbXBuX3NicGkxX2Rpdl9xciAocXAsIG5wICsgaGksIDIgKiBsbywgZHAgKyBoaSwgbG8sIGRpbnYtPmludjMyKTsKKyAgZWxzZQorICAgIHFsID0gbXBuX2RjcGkxX2Rpdl9xcl9uIChxcCwgbnAgKyBoaSwgZHAgKyBoaSwgbG8sIGRpbnYsIHRwKTsKKworICBtcG5fbXVsICh0cCwgZHAsIGhpLCBxcCwgbG8pOworCisgIGN5ID0gbXBuX3N1Yl9uIChucCwgbnAsIHRwLCBuKTsKKyAgaWYgKHFsICE9IDApCisgICAgY3kgKz0gbXBuX3N1Yl9uIChucCArIGxvLCBucCArIGxvLCBkcCwgaGkpOworCisgIHdoaWxlIChjeSAhPSAwKQorICAgIHsKKyAgICAgIG1wbl9zdWJfMSAocXAsIHFwLCBsbywgMSk7CisgICAgICBjeSAtPSBtcG5fYWRkX24gKG5wLCBucCwgZHAsIG4pOworICAgIH0KKworICByZXR1cm4gcWg7Cit9CisKK21wX2xpbWJfdAorbXBuX2RjcGkxX2Rpdl9xciAobXBfcHRyIHFwLAorCQkgIG1wX3B0ciBucCwgbXBfc2l6ZV90IG5uLAorCQkgIG1wX3NyY3B0ciBkcCwgbXBfc2l6ZV90IGRuLAorCQkgIGdtcF9waTFfdCAqZGludikKK3sKKyAgbXBfc2l6ZV90IHFuOworICBtcF9saW1iX3QgcWgsIGN5OworICBtcF9wdHIgdHA7CisgIFRNUF9ERUNMOworCisgIFRNUF9NQVJLOworCisgIEFTU0VSVCAoZG4gPj0gNik7CQkvKiB0byBhZGhlcmUgdG8gbXBuX3NicGkxX2Rpdl9xcidzIGxpbWl0cyAqLworICBBU1NFUlQgKG5uIC0gZG4gPj0gMyk7CS8qIHRvIGFkaGVyZSB0byBtcG5fc2JwaTFfZGl2X3FyJ3MgbGltaXRzICovCisgIEFTU0VSVCAoZHBbZG4tMV0gJiBHTVBfTlVNQl9ISUdIQklUKTsKKworICB0cCA9IFRNUF9BTExPQ19MSU1CUyAoZG4pOworCisgIHFuID0gbm4gLSBkbjsKKyAgcXAgKz0gcW47CisgIG5wICs9IG5uOworICBkcCArPSBkbjsKKworICBpZiAocW4gPiBkbikKKyAgICB7CisgICAgICAvKiBSZWR1Y2UgcW4gbW9kIGRuIHdpdGhvdXQgZGl2aXNpb24sIG9wdGltaXppbmcgc21hbGwgb3BlcmF0aW9ucy4gICovCisgICAgICBkbworCXFuIC09IGRuOworICAgICAgd2hpbGUgKHFuID4gZG4pOworCisgICAgICBxcCAtPSBxbjsJCQkvKiBwb2ludCBhdCBsb3cgbGltYiBvZiBuZXh0IHF1b3RpZW50IGJsb2NrICovCisgICAgICBucCAtPSBxbjsJCQkvKiBwb2ludCBpbiB0aGUgbWlkZGxlIG9mIHBhcnRpYWwgcmVtYWluZGVyICovCisKKyAgICAgIC8qIFBlcmZvcm0gdGhlIHR5cGljYWxseSBzbWFsbGVyIGJsb2NrIGZpcnN0LiAgKi8KKyAgICAgIGlmIChxbiA9PSAxKQorCXsKKwkgIG1wX2xpbWJfdCBxLCBuMiwgbjEsIG4wLCBkMSwgZDA7CisKKwkgIC8qIEhhbmRsZSBxaCB1cCBmcm9udCwgZm9yIHNpbXBsaWNpdHkuICovCisJICBxaCA9IG1wbl9jbXAgKG5wIC0gZG4gKyAxLCBkcCAtIGRuLCBkbikgPj0gMDsKKwkgIGlmIChxaCkKKwkgICAgQVNTRVJUX05PQ0FSUlkgKG1wbl9zdWJfbiAobnAgLSBkbiArIDEsIG5wIC0gZG4gKyAxLCBkcCAtIGRuLCBkbikpOworCisJICAvKiBBIHNpbmdsZSBpdGVyYXRpb24gb2Ygc2Nob29sYm9vazogT25lIDMvMiBkaXZpc2lvbiwKKwkgICAgIGZvbGxvd2VkIGJ5IHRoZSBiaWdudW0gdXBkYXRlIGFuZCBhZGp1c3RtZW50LiAqLworCSAgbjIgPSBucFswXTsKKwkgIG4xID0gbnBbLTFdOworCSAgbjAgPSBucFstMl07CisJICBkMSA9IGRwWy0xXTsKKwkgIGQwID0gZHBbLTJdOworCisJICBBU1NFUlQgKG4yIDwgZDEgfHwgKG4yID09IGQxICYmIG4xIDw9IGQwKSk7CisKKwkgIGlmIChVTkxJS0VMWSAobjIgPT0gZDEpICYmIG4xID09IGQwKQorCSAgICB7CisJICAgICAgcSA9IEdNUF9OVU1CX01BU0s7CisJICAgICAgY3kgPSBtcG5fc3VibXVsXzEgKG5wIC0gZG4sIGRwIC0gZG4sIGRuLCBxKTsKKwkgICAgICBBU1NFUlQgKGN5ID09IG4yKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgdWRpdl9xcl8zYnkyIChxLCBuMSwgbjAsIG4yLCBuMSwgbjAsIGQxLCBkMCwgZGludi0+aW52MzIpOworCisJICAgICAgaWYgKGRuID4gMikKKwkJeworCQkgIG1wX2xpbWJfdCBjeSwgY3kxOworCQkgIGN5ID0gbXBuX3N1Ym11bF8xIChucCAtIGRuLCBkcCAtIGRuLCBkbiAtIDIsIHEpOworCisJCSAgY3kxID0gbjAgPCBjeTsKKwkJICBuMCA9IChuMCAtIGN5KSAmIEdNUF9OVU1CX01BU0s7CisJCSAgY3kgPSBuMSA8IGN5MTsKKwkJICBuMSA9IChuMSAtIGN5MSkgJiBHTVBfTlVNQl9NQVNLOworCQkgIG5wWy0yXSA9IG4wOworCisJCSAgaWYgKFVOTElLRUxZIChjeSAhPSAwKSkKKwkJICAgIHsKKwkJICAgICAgbjEgKz0gZDEgKyBtcG5fYWRkX24gKG5wIC0gZG4sIG5wIC0gZG4sIGRwIC0gZG4sIGRuIC0gMSk7CisJCSAgICAgIHFoIC09IChxID09IDApOworCQkgICAgICBxID0gKHEgLSAxKSAmIEdNUF9OVU1CX01BU0s7CisJCSAgICB9CisJCX0KKwkgICAgICBlbHNlCisJCW5wWy0yXSA9IG4wOworCisJICAgICAgbnBbLTFdID0gbjE7CisJICAgIH0KKwkgIHFwWzBdID0gcTsKKwl9CisgICAgICBlbHNlCisJeworCSAgLyogRG8gYSAycW4gLyBxbiBkaXZpc2lvbiAqLworCSAgaWYgKHFuID09IDIpCisJICAgIHFoID0gbXBuX2RpdnJlbV8yIChxcCwgMEwsIG5wIC0gMiwgNCwgZHAgLSAyKTsgLyogRklYTUU6IG9ic29sZXRlIGZ1bmN0aW9uLiBVc2UgNS8zIGRpdmlzaW9uPyAqLworCSAgZWxzZSBpZiAoQkVMT1dfVEhSRVNIT0xEIChxbiwgRENfRElWX1FSX1RIUkVTSE9MRCkpCisJICAgIHFoID0gbXBuX3NicGkxX2Rpdl9xciAocXAsIG5wIC0gcW4sIDIgKiBxbiwgZHAgLSBxbiwgcW4sIGRpbnYtPmludjMyKTsKKwkgIGVsc2UKKwkgICAgcWggPSBtcG5fZGNwaTFfZGl2X3FyX24gKHFwLCBucCAtIHFuLCBkcCAtIHFuLCBxbiwgZGludiwgdHApOworCisJICBpZiAocW4gIT0gZG4pCisJICAgIHsKKwkgICAgICBpZiAocW4gPiBkbiAtIHFuKQorCQltcG5fbXVsICh0cCwgcXAsIHFuLCBkcCAtIGRuLCBkbiAtIHFuKTsKKwkgICAgICBlbHNlCisJCW1wbl9tdWwgKHRwLCBkcCAtIGRuLCBkbiAtIHFuLCBxcCwgcW4pOworCisJICAgICAgY3kgPSBtcG5fc3ViX24gKG5wIC0gZG4sIG5wIC0gZG4sIHRwLCBkbik7CisJICAgICAgaWYgKHFoICE9IDApCisJCWN5ICs9IG1wbl9zdWJfbiAobnAgLSBkbiArIHFuLCBucCAtIGRuICsgcW4sIGRwIC0gZG4sIGRuIC0gcW4pOworCisJICAgICAgd2hpbGUgKGN5ICE9IDApCisJCXsKKwkJICBxaCAtPSBtcG5fc3ViXzEgKHFwLCBxcCwgcW4sIDEpOworCQkgIGN5IC09IG1wbl9hZGRfbiAobnAgLSBkbiwgbnAgLSBkbiwgZHAgLSBkbiwgZG4pOworCQl9CisJICAgIH0KKwl9CisKKyAgICAgIHFuID0gbm4gLSBkbiAtIHFuOworICAgICAgZG8KKwl7CisJICBxcCAtPSBkbjsKKwkgIG5wIC09IGRuOworCSAgbXBuX2RjcGkxX2Rpdl9xcl9uIChxcCwgbnAgLSBkbiwgZHAgLSBkbiwgZG4sIGRpbnYsIHRwKTsKKwkgIHFuIC09IGRuOworCX0KKyAgICAgIHdoaWxlIChxbiA+IDApOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHFwIC09IHFuOwkJCS8qIHBvaW50IGF0IGxvdyBsaW1iIG9mIG5leHQgcXVvdGllbnQgYmxvY2sgKi8KKyAgICAgIG5wIC09IHFuOwkJCS8qIHBvaW50IGluIHRoZSBtaWRkbGUgb2YgcGFydGlhbCByZW1haW5kZXIgKi8KKworICAgICAgaWYgKEJFTE9XX1RIUkVTSE9MRCAocW4sIERDX0RJVl9RUl9USFJFU0hPTEQpKQorCXFoID0gbXBuX3NicGkxX2Rpdl9xciAocXAsIG5wIC0gcW4sIDIgKiBxbiwgZHAgLSBxbiwgcW4sIGRpbnYtPmludjMyKTsKKyAgICAgIGVsc2UKKwlxaCA9IG1wbl9kY3BpMV9kaXZfcXJfbiAocXAsIG5wIC0gcW4sIGRwIC0gcW4sIHFuLCBkaW52LCB0cCk7CisKKyAgICAgIGlmIChxbiAhPSBkbikKKwl7CisJICBpZiAocW4gPiBkbiAtIHFuKQorCSAgICBtcG5fbXVsICh0cCwgcXAsIHFuLCBkcCAtIGRuLCBkbiAtIHFuKTsKKwkgIGVsc2UKKwkgICAgbXBuX211bCAodHAsIGRwIC0gZG4sIGRuIC0gcW4sIHFwLCBxbik7CisKKwkgIGN5ID0gbXBuX3N1Yl9uIChucCAtIGRuLCBucCAtIGRuLCB0cCwgZG4pOworCSAgaWYgKHFoICE9IDApCisJICAgIGN5ICs9IG1wbl9zdWJfbiAobnAgLSBkbiArIHFuLCBucCAtIGRuICsgcW4sIGRwIC0gZG4sIGRuIC0gcW4pOworCisJICB3aGlsZSAoY3kgIT0gMCkKKwkgICAgeworCSAgICAgIHFoIC09IG1wbl9zdWJfMSAocXAsIHFwLCBxbiwgMSk7CisJICAgICAgY3kgLT0gbXBuX2FkZF9uIChucCAtIGRuLCBucCAtIGRuLCBkcCAtIGRuLCBkbik7CisJICAgIH0KKwl9CisgICAgfQorCisgIFRNUF9GUkVFOworICByZXR1cm4gcWg7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvZGNwaTFfZGl2YXBwcl9xLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvZGNwaTFfZGl2YXBwcl9xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFiZTA0ZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9kY3BpMV9kaXZhcHByX3EuYwpAQCAtMCwwICsxLDI1NiBAQAorLyogbXBuX2RjcGkxX2RpdmFwcHJfcSAtLSBkaXZpZGUtYW5kLWNvbnF1ZXIgZGl2aXNpb24sIHJldHVybmluZyBhcHByb3hpbWF0ZQorICAgcXVvdGllbnQuICBUaGUgcXVvdGllbnQgcmV0dXJuZWQgaXMgZWl0aGVyIGNvcnJlY3QsIG9yIG9uZSB0b28gbGFyZ2UuCisKKyAgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3Jiam9ybiBHcmFubHVuZC4KKworICAgVEhFIEZVTkNUSU9OUyBJTiBUSElTIEZJTEUgQVJFIElOVEVSTkFMIFdJVEggTVVUQUJMRSBJTlRFUkZBQ0VTLiAgSVQgSVMgT05MWQorICAgU0FGRSBUTyBSRUFDSCBUSEVNIFRIUk9VR0ggRE9DVU1FTlRFRCBJTlRFUkZBQ0VTLiAgSU4gRkFDVCwgSVQgSVMgQUxNT1NUCisgICBHVUFSQU5URUVEIFRIQVQgVEhFWSBXSUxMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR01QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAyMDA2LCAyMDA3LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKyNpbmNsdWRlICJsb25nbG9uZy5oIgorCisKK3N0YXRpYyBtcF9saW1iX3QKK21wbl9kY3BpMV9kaXZhcHByX3FfbiAobXBfcHRyIHFwLCBtcF9wdHIgbnAsIG1wX3NyY3B0ciBkcCwgbXBfc2l6ZV90IG4sCisJCSAgICAgICBnbXBfcGkxX3QgKmRpbnYsIG1wX3B0ciB0cCkKK3sKKyAgbXBfc2l6ZV90IGxvLCBoaTsKKyAgbXBfbGltYl90IGN5LCBxaCwgcWw7CisKKyAgbG8gPSBuID4+IDE7CQkJLyogZmxvb3Iobi8yKSAqLworICBoaSA9IG4gLSBsbzsJCQkvKiBjZWlsKG4vMikgKi8KKworICBpZiAoQkVMT1dfVEhSRVNIT0xEIChoaSwgRENfRElWX1FSX1RIUkVTSE9MRCkpCisgICAgcWggPSBtcG5fc2JwaTFfZGl2X3FyIChxcCArIGxvLCBucCArIDIgKiBsbywgMiAqIGhpLCBkcCArIGxvLCBoaSwgZGludi0+aW52MzIpOworICBlbHNlCisgICAgcWggPSBtcG5fZGNwaTFfZGl2X3FyX24gKHFwICsgbG8sIG5wICsgMiAqIGxvLCBkcCArIGxvLCBoaSwgZGludiwgdHApOworCisgIG1wbl9tdWwgKHRwLCBxcCArIGxvLCBoaSwgZHAsIGxvKTsKKworICBjeSA9IG1wbl9zdWJfbiAobnAgKyBsbywgbnAgKyBsbywgdHAsIG4pOworICBpZiAocWggIT0gMCkKKyAgICBjeSArPSBtcG5fc3ViX24gKG5wICsgbiwgbnAgKyBuLCBkcCwgbG8pOworCisgIHdoaWxlIChjeSAhPSAwKQorICAgIHsKKyAgICAgIHFoIC09IG1wbl9zdWJfMSAocXAgKyBsbywgcXAgKyBsbywgaGksIDEpOworICAgICAgY3kgLT0gbXBuX2FkZF9uIChucCArIGxvLCBucCArIGxvLCBkcCwgbik7CisgICAgfQorCisgIGlmIChCRUxPV19USFJFU0hPTEQgKGxvLCBEQ19ESVZBUFBSX1FfVEhSRVNIT0xEKSkKKyAgICBxbCA9IG1wbl9zYnBpMV9kaXZhcHByX3EgKHFwLCBucCArIGhpLCAyICogbG8sIGRwICsgaGksIGxvLCBkaW52LT5pbnYzMik7CisgIGVsc2UKKyAgICBxbCA9IG1wbl9kY3BpMV9kaXZhcHByX3FfbiAocXAsIG5wICsgaGksIGRwICsgaGksIGxvLCBkaW52LCB0cCk7CisKKyAgaWYgKFVOTElLRUxZIChxbCAhPSAwKSkKKyAgICB7CisgICAgICBtcF9zaXplX3QgaTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBsbzsgaSsrKQorCXFwW2ldID0gR01QX05VTUJfTUFTSzsKKyAgICB9CisKKyAgcmV0dXJuIHFoOworfQorCittcF9saW1iX3QKK21wbl9kY3BpMV9kaXZhcHByX3EgKG1wX3B0ciBxcCwgbXBfcHRyIG5wLCBtcF9zaXplX3Qgbm4sCisJCSAgICAgbXBfc3JjcHRyIGRwLCBtcF9zaXplX3QgZG4sIGdtcF9waTFfdCAqZGludikKK3sKKyAgbXBfc2l6ZV90IHFuOworICBtcF9saW1iX3QgcWgsIGN5LCBxc2F2ZTsKKyAgbXBfcHRyIHRwOworICBUTVBfREVDTDsKKworICBUTVBfTUFSSzsKKworICBBU1NFUlQgKGRuID49IDYpOworICBBU1NFUlQgKG5uID4gZG4pOworICBBU1NFUlQgKGRwW2RuLTFdICYgR01QX05VTUJfSElHSEJJVCk7CisKKyAgcW4gPSBubiAtIGRuOworICBxcCArPSBxbjsKKyAgbnAgKz0gbm47CisgIGRwICs9IGRuOworCisgIGlmIChxbiA+PSBkbikKKyAgICB7CisgICAgICBxbisrOwkJCS8qIHByZXRlbmQgd2UnbGwgbmVlZCBhbiBleHRyYSBsaW1iICovCisgICAgICAvKiBSZWR1Y2UgcW4gbW9kIGRuIHdpdGhvdXQgZGl2aXNpb24sIG9wdGltaXppbmcgc21hbGwgb3BlcmF0aW9ucy4gICovCisgICAgICBkbworCXFuIC09IGRuOworICAgICAgd2hpbGUgKHFuID4gZG4pOworCisgICAgICBxcCAtPSBxbjsJCQkvKiBwb2ludCBhdCBsb3cgbGltYiBvZiBuZXh0IHF1b3RpZW50IGJsb2NrICovCisgICAgICBucCAtPSBxbjsJCQkvKiBwb2ludCBpbiB0aGUgbWlkZGxlIG9mIHBhcnRpYWwgcmVtYWluZGVyICovCisKKyAgICAgIHRwID0gVE1QX1NBTExPQ19MSU1CUyAoZG4pOworCisgICAgICAvKiBQZXJmb3JtIHRoZSB0eXBpY2FsbHkgc21hbGxlciBibG9jayBmaXJzdC4gICovCisgICAgICBpZiAocW4gPT0gMSkKKwl7CisJICBtcF9saW1iX3QgcSwgbjIsIG4xLCBuMCwgZDEsIGQwOworCisJICAvKiBIYW5kbGUgcWggdXAgZnJvbnQsIGZvciBzaW1wbGljaXR5LiAqLworCSAgcWggPSBtcG5fY21wIChucCAtIGRuICsgMSwgZHAgLSBkbiwgZG4pID49IDA7CisJICBpZiAocWgpCisJICAgIEFTU0VSVF9OT0NBUlJZIChtcG5fc3ViX24gKG5wIC0gZG4gKyAxLCBucCAtIGRuICsgMSwgZHAgLSBkbiwgZG4pKTsKKworCSAgLyogQSBzaW5nbGUgaXRlcmF0aW9uIG9mIHNjaG9vbGJvb2s6IE9uZSAzLzIgZGl2aXNpb24sCisJICAgICBmb2xsb3dlZCBieSB0aGUgYmlnbnVtIHVwZGF0ZSBhbmQgYWRqdXN0bWVudC4gKi8KKwkgIG4yID0gbnBbMF07CisJICBuMSA9IG5wWy0xXTsKKwkgIG4wID0gbnBbLTJdOworCSAgZDEgPSBkcFstMV07CisJICBkMCA9IGRwWy0yXTsKKworCSAgQVNTRVJUIChuMiA8IGQxIHx8IChuMiA9PSBkMSAmJiBuMSA8PSBkMCkpOworCisJICBpZiAoVU5MSUtFTFkgKG4yID09IGQxKSAmJiBuMSA9PSBkMCkKKwkgICAgeworCSAgICAgIHEgPSBHTVBfTlVNQl9NQVNLOworCSAgICAgIGN5ID0gbXBuX3N1Ym11bF8xIChucCAtIGRuLCBkcCAtIGRuLCBkbiwgcSk7CisJICAgICAgQVNTRVJUIChjeSA9PSBuMik7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIHVkaXZfcXJfM2J5MiAocSwgbjEsIG4wLCBuMiwgbjEsIG4wLCBkMSwgZDAsIGRpbnYtPmludjMyKTsKKworCSAgICAgIGlmIChkbiA+IDIpCisJCXsKKwkJICBtcF9saW1iX3QgY3ksIGN5MTsKKwkJICBjeSA9IG1wbl9zdWJtdWxfMSAobnAgLSBkbiwgZHAgLSBkbiwgZG4gLSAyLCBxKTsKKworCQkgIGN5MSA9IG4wIDwgY3k7CisJCSAgbjAgPSAobjAgLSBjeSkgJiBHTVBfTlVNQl9NQVNLOworCQkgIGN5ID0gbjEgPCBjeTE7CisJCSAgbjEgPSAobjEgLSBjeTEpICYgR01QX05VTUJfTUFTSzsKKwkJICBucFstMl0gPSBuMDsKKworCQkgIGlmIChVTkxJS0VMWSAoY3kgIT0gMCkpCisJCSAgICB7CisJCSAgICAgIG4xICs9IGQxICsgbXBuX2FkZF9uIChucCAtIGRuLCBucCAtIGRuLCBkcCAtIGRuLCBkbiAtIDEpOworCQkgICAgICBxaCAtPSAocSA9PSAwKTsKKwkJICAgICAgcSA9IChxIC0gMSkgJiBHTVBfTlVNQl9NQVNLOworCQkgICAgfQorCQl9CisJICAgICAgZWxzZQorCQlucFstMl0gPSBuMDsKKworCSAgICAgIG5wWy0xXSA9IG4xOworCSAgICB9CisJICBxcFswXSA9IHE7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGlmIChxbiA9PSAyKQorCSAgICBxaCA9IG1wbl9kaXZyZW1fMiAocXAsIDBMLCBucCAtIDIsIDQsIGRwIC0gMik7CisJICBlbHNlIGlmIChCRUxPV19USFJFU0hPTEQgKHFuLCBEQ19ESVZfUVJfVEhSRVNIT0xEKSkKKwkgICAgcWggPSBtcG5fc2JwaTFfZGl2X3FyIChxcCwgbnAgLSBxbiwgMiAqIHFuLCBkcCAtIHFuLCBxbiwgZGludi0+aW52MzIpOworCSAgZWxzZQorCSAgICBxaCA9IG1wbl9kY3BpMV9kaXZfcXJfbiAocXAsIG5wIC0gcW4sIGRwIC0gcW4sIHFuLCBkaW52LCB0cCk7CisKKwkgIGlmIChxbiAhPSBkbikKKwkgICAgeworCSAgICAgIGlmIChxbiA+IGRuIC0gcW4pCisJCW1wbl9tdWwgKHRwLCBxcCwgcW4sIGRwIC0gZG4sIGRuIC0gcW4pOworCSAgICAgIGVsc2UKKwkJbXBuX211bCAodHAsIGRwIC0gZG4sIGRuIC0gcW4sIHFwLCBxbik7CisKKwkgICAgICBjeSA9IG1wbl9zdWJfbiAobnAgLSBkbiwgbnAgLSBkbiwgdHAsIGRuKTsKKwkgICAgICBpZiAocWggIT0gMCkKKwkJY3kgKz0gbXBuX3N1Yl9uIChucCAtIGRuICsgcW4sIG5wIC0gZG4gKyBxbiwgZHAgLSBkbiwgZG4gLSBxbik7CisKKwkgICAgICB3aGlsZSAoY3kgIT0gMCkKKwkJeworCQkgIHFoIC09IG1wbl9zdWJfMSAocXAsIHFwLCBxbiwgMSk7CisJCSAgY3kgLT0gbXBuX2FkZF9uIChucCAtIGRuLCBucCAtIGRuLCBkcCAtIGRuLCBkbik7CisJCX0KKwkgICAgfQorCX0KKyAgICAgIHFuID0gbm4gLSBkbiAtIHFuICsgMTsKKyAgICAgIHdoaWxlIChxbiA+IGRuKQorCXsKKwkgIHFwIC09IGRuOworCSAgbnAgLT0gZG47CisJICBtcG5fZGNwaTFfZGl2X3FyX24gKHFwLCBucCAtIGRuLCBkcCAtIGRuLCBkbiwgZGludiwgdHApOworCSAgcW4gLT0gZG47CisJfQorCisgICAgICAvKiBTaW5jZSB3ZSBwcmV0ZW5kZWQgd2UnZCBuZWVkIGFuIGV4dHJhIHF1b3RpZW50IGxpbWIgYmVmb3JlLCB3ZSBub3cKKwkgaGF2ZSBtYWRlIHN1cmUgdGhlIGNvZGUgYWJvdmUgbGVmdCBqdXN0IGRuLTE9cW4gcXVvdGllbnQgbGltYnMgdG8KKwkgZGV2ZWxvcC4gIERldmVsb3AgdGhhdCBwbHVzIGEgZ3VhcmQgbGltYi4gKi8KKyAgICAgIHFuLS07CisgICAgICBxcCAtPSBxbjsKKyAgICAgIG5wIC09IGRuOworICAgICAgcXNhdmUgPSBxcFtxbl07CisgICAgICBtcG5fZGNwaTFfZGl2YXBwcl9xX24gKHFwLCBucCAtIGRuLCBkcCAtIGRuLCBkbiwgZGludiwgdHApOworICAgICAgTVBOX0NPUFlfSU5DUiAocXAsIHFwICsgMSwgcW4pOworICAgICAgcXBbcW5dID0gcXNhdmU7CisgICAgfQorICBlbHNlICAgIC8qIChxbiA8IGRuKSAqLworICAgIHsKKyAgICAgIG1wX3B0ciBxMnA7CisjaWYgMAkJCQkvKiBub3QgcG9zc2libGUgc2luY2Ugd2UgZGVtYW5kIG5uID4gZG4gKi8KKyAgICAgIGlmIChxbiA9PSAwKQorCXsKKwkgIHFoID0gbXBuX2NtcCAobnAgLSBkbiwgZHAgLSBkbiwgZG4pID49IDA7CisJICBpZiAocWgpCisJICAgIG1wbl9zdWJfbiAobnAgLSBkbiwgbnAgLSBkbiwgZHAgLSBkbiwgZG4pOworCSAgVE1QX0ZSRUU7CisJICByZXR1cm4gcWg7CisJfQorI2VuZGlmCisKKyAgICAgIHFwIC09IHFuOwkJCS8qIHBvaW50IGF0IGxvdyBsaW1iIG9mIG5leHQgcXVvdGllbnQgYmxvY2sgKi8KKyAgICAgIG5wIC09IHFuOwkJCS8qIHBvaW50IGluIHRoZSBtaWRkbGUgb2YgcGFydGlhbCByZW1haW5kZXIgKi8KKworICAgICAgcTJwID0gVE1QX1NBTExPQ19MSU1CUyAocW4gKyAxKTsKKyAgICAgIC8qIFNob3VsZCB3ZSBhdCBhbGwgY2hlY2sgRENfRElWQVBQUl9RX1RIUkVTSE9MRCBoZXJlLCBvciByZXBseSBvbgorCSBjYWxsZXJzIG5vdCB0byBiZSBzaWxseT8gICovCisgICAgICBpZiAoQkVMT1dfVEhSRVNIT0xEIChxbiwgRENfRElWQVBQUl9RX1RIUkVTSE9MRCkpCisJeworCSAgcWggPSBtcG5fc2JwaTFfZGl2YXBwcl9xIChxMnAsIG5wIC0gcW4gLSAyLCAyICogKHFuICsgMSksCisJCQkJICAgIGRwIC0gKHFuICsgMSksIHFuICsgMSwgZGludi0+aW52MzIpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICAvKiBJdCBpcyB0ZW1wdGluZyB0byB1c2UgcXAgZm9yIHJlY3Vyc2l2ZSBzY3JhdGNoIGFuZCBwdXQgcXVvdGllbnQgaW4KKwkgICAgIHRwLCBidXQgdGhlIHJlY3Vyc2l2ZSBzY3JhdGNoIG5lZWRzIG9uZSBsaW1iIHRvbyBtYW55LiAgKi8KKwkgIHRwID0gVE1QX1NBTExPQ19MSU1CUyAocW4gKyAxKTsKKwkgIHFoID0gbXBuX2RjcGkxX2RpdmFwcHJfcV9uIChxMnAsIG5wIC0gcW4gLSAyLCBkcCAtIChxbiArIDEpLCBxbiArIDEsIGRpbnYsIHRwKTsKKwl9CisgICAgICBNUE5fQ09QWSAocXAsIHEycCArIDEsIHFuKTsKKyAgICB9CisKKyAgVE1QX0ZSRUU7CisgIHJldHVybiBxaDsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9kaXZfcS5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2Rpdl9xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThjNGVjZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9kaXZfcS5jCkBAIC0wLDAgKzEsMzEzIEBACisvKiBtcG5fZGl2X3EgLS0gZGl2aXNpb24gZm9yIGFyYml0cmFyeSBzaXplIG9wZXJhbmRzLgorCisgICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisKKyAgIFRIRSBGVU5DVElPTiBJTiBUSElTIEZJTEUgSVMgSU5URVJOQUwgV0lUSCBBIE1VVEFCTEUgSU5URVJGQUNFLiAgSVQgSVMgT05MWQorICAgU0FGRSBUTyBSRUFDSCBJVCBUSFJPVUdIIERPQ1VNRU5URUQgSU5URVJGQUNFUy4gIElOIEZBQ1QsIElUIElTIEFMTU9TVAorICAgR1VBUkFOVEVFRCBUSEFUIElUIFdJTEwgQ0hBTkdFIE9SIERJU0FQUEVBUiBJTiBBIEZVVFVSRSBHTVAgUkVMRUFTRS4KKworQ29weXJpZ2h0IDIwMDksIDIwMTAsIDIwMTUsIDIwMTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorI2luY2x1ZGUgImxvbmdsb25nLmgiCisKKworLyogQ29tcHV0ZSBRID0gTi9EIHdpdGggdHJ1bmNhdGlvbi4KKyAgICAgTiA9IHtucCxubn0KKyAgICAgRCA9IHtkcCxkbn0KKyAgICAgUSA9IHtxcCxubi1kbisxfQorICAgICBUID0ge3NjcmF0Y2gsbm4rMX0gaXMgc2NyYXRjaCBzcGFjZQorICAgTiBhbmQgRCBhcmUgYm90aCB1bnRvdWNoZWQgYnkgdGhlIGNvbXB1dGF0aW9uLgorICAgTiBhbmQgVCBtYXkgb3ZlcmxhcDsgcGFzcyB0aGUgc2FtZSBzcGFjZSBpZiBOIGlzIGlycmVsZXZhbnQgYWZ0ZXIgdGhlIGNhbGwsCisgICBidXQgbm90ZSB0aGF0IHRwIG5lZWRzIGFuIGV4dHJhIGxpbWIuCisKKyAgIE9wZXJhbmQgcmVxdWlyZW1lbnRzOgorICAgICBOID49IEQgPiAwCisgICAgIGRwW2RuLTFdICE9IDAKKyAgICAgTm8gb3ZlcmxhcCBiZXR3ZWVuIHRoZSBOLCBELCBhbmQgUSBhcmVhcy4KKworICAgVGhpcyBkaXZpc2lvbiBmdW5jdGlvbiBkb2VzIG5vdCBjbG9iYmVyIGl0cyBpbnB1dCBvcGVyYW5kcywgc2luY2UgaXQgaXMKKyAgIGludGVuZGVkIHRvIHN1cHBvcnQgYXZlcmFnZS1PKHFuKSBkaXZpc2lvbiwgYW5kIGZvciB0aGF0IHRvIGJlIGVmZmVjdGl2ZSwgaXQKKyAgIGNhbm5vdCBwdXQgcmVxdWlyZW1lbnRzIG9uIGNhbGxlcnMgdG8gY29weSBhIE8obm4pIG9wZXJhbmQuCisKKyAgIElmIGEgY2FsbGVyIGRvZXMgbm90IGNhcmUgYWJvdXQgdGhlIHZhbHVlIG9mIHtucCxubisxfSBhZnRlciBjYWxsaW5nIHRoaXMKKyAgIGZ1bmN0aW9uLCBpdCBzaG91bGQgcGFzcyBucCBhbHNvIGZvciB0aGUgc2NyYXRjaCBhcmd1bWVudC4gIFRoaXMgZnVuY3Rpb24KKyAgIHdpbGwgdGhlbiBzYXZlIHNvbWUgdGltZSBhbmQgc3BhY2UgYnkgYXZvaWRpbmcgYWxsb2NhdGlvbiBhbmQgY29weWluZy4KKyAgIChGSVhNRTogSXMgdGhpcyBhIGdvb2QgZGVzaWduPyAgV2Ugb25seSByZWFsbHkgc2F2ZSBhbnkgY29weWluZyBmb3IKKyAgIGFscmVhZHktbm9ybWFsaXNlZCBkaXZpc29ycywgd2hpY2ggc2hvdWxkIGJlIHJhcmUuICBJdCBhbHNvIHByZXZlbnRzIHVzIGZyb20KKyAgIHJlYXNvbmFibHkgYXNraW5nIGZvciBhbGwgc2NyYXRjaCBzcGFjZSB3ZSBuZWVkLikKKworICAgV2Ugd3JpdGUgbm4tZG4rMSBsaW1icyBmb3IgdGhlIHF1b3RpZW50LCBidXQgcmV0dXJuIHZvaWQuICBXaHkgbm90IHJldHVybgorICAgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgcXVvdGllbnQgbGltYj8gIExvb2sgYXQgdGhlIDQgbWFpbiBjb2RlIGJsb2NrcyBiZWxvdworICAgKGNvbnNpc3Rpbmcgb2YgYW4gb3V0ZXIgaWYtZWxzZSB3aGVyZSBlYWNoIGFybSBjb250YWlucyBhbiBpZi1lbHNlKS4gSXQgaXMKKyAgIHRyaWNreSBmb3IgdGhlIGZpcnN0IGNvZGUgYmxvY2ssIHNpbmNlIHRoZSBtcG5fKl9kaXZfcSBjYWxscyB3aWxsIHR5cGljYWxseQorICAgZ2VuZXJhdGUgYWxsIG5uLWRuKzEgYW5kIHJldHVybiAwIG9yIDEuICBJIGRvbid0IHNlZSBob3cgdG8gZml4IHRoYXQgdW5sZXNzCisgICB3ZSBnZW5lcmF0ZSB0aGUgbW9zdCBzaWduaWZpY2FudCBxdW90aWVudCBsaW1iIGhlcmUsIGJlZm9yZSBjYWxsaW5nCisgICBtcG5fKl9kaXZfcSwgb3IgcHV0IHRoZSBxdW90aWVudCBpbiBhIHRlbXBvcmFyeSBhcmVhLiAgU2luY2UgdGhpcyBpcyBhCisgICBjcml0aWNhbCBkaXZpc2lvbiBjYXNlICh0aGUgU0Igc3ViLWNhc2UgaW4gcGFydGljdWxhcikgY29weWluZyBpcyBub3QgYSBnb29kCisgICBpZGVhLgorCisgICBJdCBtaWdodCBtYWtlIHNlbnNlIHRvIHNwbGl0IHRoZSBpZi1lbHNlIHBhcnRzIG9mIHRoZSAocW4gKyBGVURHRQorICAgPj0gZG4pIGJsb2NrcyBpbnRvIHNlcGFyYXRlIGZ1bmN0aW9ucywgc2luY2Ugd2UgY291bGQgcHJvbWlzZSBxdWl0ZQorICAgZGlmZmVyZW50IHRoaW5ncyB0byBjYWxsZXJzIGluIHRoZXNlIHR3byBjYXNlcy4gIFRoZSAndGhlbicgY2FzZQorICAgYmVuZWZpdHMgZnJvbSBucD1zY3JhdGNoLCBhbmQgaXQgY291bGQgcGVyaGFwcyBldmVuIHRvbGVyYXRlIHFwPW5wLAorICAgc2F2aW5nIHNvbWUgaGVhZGFjaGUgZm9yIG1hbnkgY2FsbGVycy4KKworICAgRklYTUU6IFNjcmF0Y2ggYWxsb2NhdGlvbiBsZWF2ZXMgYSBsb3QgdG8gYmUgZGVzaXJlZC4gIEUuZy4sIGZvciB0aGUgTVUgc2l6ZQorICAgb3BlcmFuZHMsIHdlIGRvIG5vdCByZXVzZSB0aGUgaHVnZSBzY3JhdGNoIGZvciBhZGp1c3RtZW50cy4gIFRoaXMgY2FuIGJlIGEKKyAgIHNlcmlvdXMgd2FzdGUgb2YgbWVtb3J5IGZvciB0aGUgbGFyZ2VzdCBvcGVyYW5kcy4KKyovCisKKy8qIEZVREdFIGRldGVybWluZXMgd2hlbiB0byB0cnkgZ2V0dGluZyBhbiBhcHByb3hpbWF0ZSBxdW90aWVudCBmcm9tIHRoZSB1cHBlcgorICAgcGFydHMgb2YgdGhlIGRpdmlkZW5kIGFuZCBkaXZpc29yLCB0aGVuIGFkanVzdC4gIE4uQi4gRlVER0UgbXVzdCBiZSA+PSAyCisgICBmb3IgdGhlIGNvZGUgdG8gYmUgY29ycmVjdC4gICovCisjZGVmaW5lIEZVREdFIDUJCQkvKiBGSVhNRTogdHVuZSB0aGlzICovCisKKyNkZWZpbmUgRENfRElWX1FfVEhSRVNIT0xEICAgICAgRENfRElWQVBQUl9RX1RIUkVTSE9MRAorI2RlZmluZSBNVV9ESVZfUV9USFJFU0hPTEQgICAgICBNVV9ESVZBUFBSX1FfVEhSRVNIT0xECisjZGVmaW5lIE1VUElfRElWX1FfVEhSRVNIT0xEICBNVVBJX0RJVkFQUFJfUV9USFJFU0hPTEQKKyNpZm5kZWYgTVVQSV9ESVZBUFBSX1FfVEhSRVNIT0xECisjZGVmaW5lIE1VUElfRElWQVBQUl9RX1RIUkVTSE9MRCAgTVVQSV9ESVZfUVJfVEhSRVNIT0xECisjZW5kaWYKKwordm9pZAorbXBuX2Rpdl9xIChtcF9wdHIgcXAsCisJICAgbXBfc3JjcHRyIG5wLCBtcF9zaXplX3Qgbm4sCisJICAgbXBfc3JjcHRyIGRwLCBtcF9zaXplX3QgZG4sIG1wX3B0ciBzY3JhdGNoKQoreworICBtcF9wdHIgbmV3X2RwLCBuZXdfbnAsIHRwLCBycDsKKyAgbXBfbGltYl90IGN5LCBkaCwgcWg7CisgIG1wX3NpemVfdCBuZXdfbm4sIHFuOworICBnbXBfcGkxX3QgZGludjsKKyAgaW50IGNudDsKKyAgVE1QX0RFQ0w7CisgIFRNUF9NQVJLOworCisgIEFTU0VSVCAobm4gPj0gZG4pOworICBBU1NFUlQgKGRuID4gMCk7CisgIEFTU0VSVCAoZHBbZG4gLSAxXSAhPSAwKTsKKyAgQVNTRVJUICghIE1QTl9PVkVSTEFQX1AgKHFwLCBubiAtIGRuICsgMSwgbnAsIG5uKSk7CisgIEFTU0VSVCAoISBNUE5fT1ZFUkxBUF9QIChxcCwgbm4gLSBkbiArIDEsIGRwLCBkbikpOworICBBU1NFUlQgKE1QTl9TQU1FX09SX1NFUEFSQVRFX1AgKG5wLCBzY3JhdGNoLCBubikpOworCisgIEFTU0VSVF9BTFdBWVMgKEZVREdFID49IDIpOworCisgIGRoID0gZHBbZG4gLSAxXTsKKyAgaWYgKGRuID09IDEpCisgICAgeworICAgICAgbXBuX2RpdnJlbV8xIChxcCwgMEwsIG5wLCBubiwgZGgpOworICAgICAgcmV0dXJuOworICAgIH0KKworICBxbiA9IG5uIC0gZG4gKyAxOwkJLyogUXVvdGllbnQgc2l6ZSwgaGlnaCBsaW1iIG1pZ2h0IGJlIHplcm8gKi8KKworICBpZiAocW4gKyBGVURHRSA+PSBkbikKKyAgICB7CisgICAgICAvKiB8X19fX19fX19fX19fX19fX19fX19fX19ffAorICAgICAgICAgICAgICAgICAgICAgICAgICB8X19fX19fX3wgICovCisgICAgICBuZXdfbnAgPSBzY3JhdGNoOworCisgICAgICBpZiAoTElLRUxZICgoZGggJiBHTVBfTlVNQl9ISUdIQklUKSA9PSAwKSkKKwl7CisJICBjb3VudF9sZWFkaW5nX3plcm9zIChjbnQsIGRoKTsKKworCSAgY3kgPSBtcG5fbHNoaWZ0IChuZXdfbnAsIG5wLCBubiwgY250KTsKKwkgIG5ld19ucFtubl0gPSBjeTsKKwkgIG5ld19ubiA9IG5uICsgKGN5ICE9IDApOworCisJICBuZXdfZHAgPSBUTVBfQUxMT0NfTElNQlMgKGRuKTsKKwkgIG1wbl9sc2hpZnQgKG5ld19kcCwgZHAsIGRuLCBjbnQpOworCisJICBpZiAoZG4gPT0gMikKKwkgICAgeworCSAgICAgIHFoID0gbXBuX2RpdnJlbV8yIChxcCwgMEwsIG5ld19ucCwgbmV3X25uLCBuZXdfZHApOworCSAgICB9CisJICBlbHNlIGlmIChCRUxPV19USFJFU0hPTEQgKGRuLCBEQ19ESVZfUV9USFJFU0hPTEQpIHx8CisJCSAgIEJFTE9XX1RIUkVTSE9MRCAobmV3X25uIC0gZG4sIERDX0RJVl9RX1RIUkVTSE9MRCkpCisJICAgIHsKKwkgICAgICBpbnZlcnRfcGkxIChkaW52LCBuZXdfZHBbZG4gLSAxXSwgbmV3X2RwW2RuIC0gMl0pOworCSAgICAgIHFoID0gbXBuX3NicGkxX2Rpdl9xIChxcCwgbmV3X25wLCBuZXdfbm4sIG5ld19kcCwgZG4sIGRpbnYuaW52MzIpOworCSAgICB9CisJICBlbHNlIGlmIChCRUxPV19USFJFU0hPTEQgKGRuLCBNVVBJX0RJVl9RX1RIUkVTSE9MRCkgfHwgICAvKiBmYXN0IGNvbmRpdGlvbiAqLworCQkgICBCRUxPV19USFJFU0hPTEQgKG5uLCAyICogTVVfRElWX1FfVEhSRVNIT0xEKSB8fCAvKiBmYXN0IGNvbmRpdGlvbiAqLworCQkgICAoZG91YmxlKSAoMiAqIChNVV9ESVZfUV9USFJFU0hPTEQgLSBNVVBJX0RJVl9RX1RIUkVTSE9MRCkpICogZG4gLyogc2xvdy4uLiAqLworCQkgICArIChkb3VibGUpIE1VUElfRElWX1FfVEhSRVNIT0xEICogbm4gPiAoZG91YmxlKSBkbiAqIG5uKSAgIC8qIC4uLmNvbmRpdGlvbiAqLworCSAgICB7CisJICAgICAgaW52ZXJ0X3BpMSAoZGludiwgbmV3X2RwW2RuIC0gMV0sIG5ld19kcFtkbiAtIDJdKTsKKwkgICAgICBxaCA9IG1wbl9kY3BpMV9kaXZfcSAocXAsIG5ld19ucCwgbmV3X25uLCBuZXdfZHAsIGRuLCAmZGludik7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIG1wX3NpemVfdCBpdGNoID0gbXBuX211X2Rpdl9xX2l0Y2ggKG5ld19ubiwgZG4sIDApOworCSAgICAgIG1wX3B0ciBzY3JhdGNoID0gVE1QX0FMTE9DX0xJTUJTIChpdGNoKTsKKwkgICAgICBxaCA9IG1wbl9tdV9kaXZfcSAocXAsIG5ld19ucCwgbmV3X25uLCBuZXdfZHAsIGRuLCBzY3JhdGNoKTsKKwkgICAgfQorCSAgaWYgKGN5ID09IDApCisJICAgIHFwW3FuIC0gMV0gPSBxaDsKKwkgIGVsc2UKKwkgICAgQVNTRVJUIChxaCA9PSAwKTsKKwl9CisgICAgICBlbHNlICAvKiBkaXZpc29yIGlzIGFscmVhZHkgbm9ybWFsaXNlZCAqLworCXsKKwkgIGlmIChuZXdfbnAgIT0gbnApCisJICAgIE1QTl9DT1BZIChuZXdfbnAsIG5wLCBubik7CisKKwkgIGlmIChkbiA9PSAyKQorCSAgICB7CisJICAgICAgcWggPSBtcG5fZGl2cmVtXzIgKHFwLCAwTCwgbmV3X25wLCBubiwgZHApOworCSAgICB9CisJICBlbHNlIGlmIChCRUxPV19USFJFU0hPTEQgKGRuLCBEQ19ESVZfUV9USFJFU0hPTEQpIHx8CisJCSAgIEJFTE9XX1RIUkVTSE9MRCAobm4gLSBkbiwgRENfRElWX1FfVEhSRVNIT0xEKSkKKwkgICAgeworCSAgICAgIGludmVydF9waTEgKGRpbnYsIGRoLCBkcFtkbiAtIDJdKTsKKwkgICAgICBxaCA9IG1wbl9zYnBpMV9kaXZfcSAocXAsIG5ld19ucCwgbm4sIGRwLCBkbiwgZGludi5pbnYzMik7CisJICAgIH0KKwkgIGVsc2UgaWYgKEJFTE9XX1RIUkVTSE9MRCAoZG4sIE1VUElfRElWX1FfVEhSRVNIT0xEKSB8fCAgIC8qIGZhc3QgY29uZGl0aW9uICovCisJCSAgIEJFTE9XX1RIUkVTSE9MRCAobm4sIDIgKiBNVV9ESVZfUV9USFJFU0hPTEQpIHx8IC8qIGZhc3QgY29uZGl0aW9uICovCisJCSAgIChkb3VibGUpICgyICogKE1VX0RJVl9RX1RIUkVTSE9MRCAtIE1VUElfRElWX1FfVEhSRVNIT0xEKSkgKiBkbiAvKiBzbG93Li4uICovCisJCSAgICsgKGRvdWJsZSkgTVVQSV9ESVZfUV9USFJFU0hPTEQgKiBubiA+IChkb3VibGUpIGRuICogbm4pICAgLyogLi4uY29uZGl0aW9uICovCisJICAgIHsKKwkgICAgICBpbnZlcnRfcGkxIChkaW52LCBkaCwgZHBbZG4gLSAyXSk7CisJICAgICAgcWggPSBtcG5fZGNwaTFfZGl2X3EgKHFwLCBuZXdfbnAsIG5uLCBkcCwgZG4sICZkaW52KTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgbXBfc2l6ZV90IGl0Y2ggPSBtcG5fbXVfZGl2X3FfaXRjaCAobm4sIGRuLCAwKTsKKwkgICAgICBtcF9wdHIgc2NyYXRjaCA9IFRNUF9BTExPQ19MSU1CUyAoaXRjaCk7CisJICAgICAgcWggPSBtcG5fbXVfZGl2X3EgKHFwLCBucCwgbm4sIGRwLCBkbiwgc2NyYXRjaCk7CisJICAgIH0KKwkgIHFwW25uIC0gZG5dID0gcWg7CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIHxfX19fX19fX19fX19fX19fX19fX19fX198CisgICAgICAgICAgICAgICAgfF9fX19fX19fX19fX19fX19ffCAgKi8KKyAgICAgIHRwID0gVE1QX0FMTE9DX0xJTUJTIChxbiArIDEpOworCisgICAgICBuZXdfbnAgPSBzY3JhdGNoOworICAgICAgbmV3X25uID0gMiAqIHFuICsgMTsKKyAgICAgIGlmIChuZXdfbnAgPT0gbnApCisJLyogV2UgbmVlZCB7bnAsbm59IHRvIHJlbWFpbiB1bnRvdWNoZWQgdW50aWwgdGhlIGZpbmFsIGFkanVzdG1lbnQsIHNvCisJICAgd2UgbmVlZCB0byBhbGxvY2F0ZSBzZXBhcmF0ZSBzcGFjZSBmb3IgbmV3X25wLiAgKi8KKwluZXdfbnAgPSBUTVBfQUxMT0NfTElNQlMgKG5ld19ubiArIDEpOworCisKKyAgICAgIGlmIChMSUtFTFkgKChkaCAmIEdNUF9OVU1CX0hJR0hCSVQpID09IDApKQorCXsKKwkgIGNvdW50X2xlYWRpbmdfemVyb3MgKGNudCwgZGgpOworCisJICBjeSA9IG1wbl9sc2hpZnQgKG5ld19ucCwgbnAgKyBubiAtIG5ld19ubiwgbmV3X25uLCBjbnQpOworCSAgbmV3X25wW25ld19ubl0gPSBjeTsKKworCSAgbmV3X25uICs9IChjeSAhPSAwKTsKKworCSAgbmV3X2RwID0gVE1QX0FMTE9DX0xJTUJTIChxbiArIDEpOworCSAgbXBuX2xzaGlmdCAobmV3X2RwLCBkcCArIGRuIC0gKHFuICsgMSksIHFuICsgMSwgY250KTsKKwkgIG5ld19kcFswXSB8PSBkcFtkbiAtIChxbiArIDEpIC0gMV0gPj4gKEdNUF9OVU1CX0JJVFMgLSBjbnQpOworCisJICBpZiAocW4gKyAxID09IDIpCisJICAgIHsKKwkgICAgICBxaCA9IG1wbl9kaXZyZW1fMiAodHAsIDBMLCBuZXdfbnAsIG5ld19ubiwgbmV3X2RwKTsKKwkgICAgfQorCSAgZWxzZSBpZiAoQkVMT1dfVEhSRVNIT0xEIChxbiwgRENfRElWQVBQUl9RX1RIUkVTSE9MRCAtIDEpKQorCSAgICB7CisJICAgICAgaW52ZXJ0X3BpMSAoZGludiwgbmV3X2RwW3FuXSwgbmV3X2RwW3FuIC0gMV0pOworCSAgICAgIHFoID0gbXBuX3NicGkxX2RpdmFwcHJfcSAodHAsIG5ld19ucCwgbmV3X25uLCBuZXdfZHAsIHFuICsgMSwgZGludi5pbnYzMik7CisJICAgIH0KKwkgIGVsc2UgaWYgKEJFTE9XX1RIUkVTSE9MRCAocW4sIE1VX0RJVkFQUFJfUV9USFJFU0hPTEQgLSAxKSkKKwkgICAgeworCSAgICAgIGludmVydF9waTEgKGRpbnYsIG5ld19kcFtxbl0sIG5ld19kcFtxbiAtIDFdKTsKKwkgICAgICBxaCA9IG1wbl9kY3BpMV9kaXZhcHByX3EgKHRwLCBuZXdfbnAsIG5ld19ubiwgbmV3X2RwLCBxbiArIDEsICZkaW52KTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgbXBfc2l6ZV90IGl0Y2ggPSBtcG5fbXVfZGl2YXBwcl9xX2l0Y2ggKG5ld19ubiwgcW4gKyAxLCAwKTsKKwkgICAgICBtcF9wdHIgc2NyYXRjaCA9IFRNUF9BTExPQ19MSU1CUyAoaXRjaCk7CisJICAgICAgcWggPSBtcG5fbXVfZGl2YXBwcl9xICh0cCwgbmV3X25wLCBuZXdfbm4sIG5ld19kcCwgcW4gKyAxLCBzY3JhdGNoKTsKKwkgICAgfQorCSAgaWYgKGN5ID09IDApCisJICAgIHRwW3FuXSA9IHFoOworCSAgZWxzZSBpZiAoVU5MSUtFTFkgKHFoICE9IDApKQorCSAgICB7CisJICAgICAgLyogVGhpcyBoYXBwZW5zIG9ubHkgd2hlbiB0aGUgcXVvdGllbnQgaXMgY2xvc2UgdG8gQl5uIGFuZAorCQkgbXBuXypfZGl2YXBwcl9xIHJldHVybmVkIEJebi4gICovCisJICAgICAgbXBfc2l6ZV90IGksIG47CisJICAgICAgbiA9IG5ld19ubiAtIChxbiArIDEpOworCSAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCXRwW2ldID0gR01QX05VTUJfTUFYOworCSAgICAgIHFoID0gMDsJCS8qIGN1cnJlbnRseSBpZ25vcmVkICovCisJICAgIH0KKwl9CisgICAgICBlbHNlICAvKiBkaXZpc29yIGlzIGFscmVhZHkgbm9ybWFsaXNlZCAqLworCXsKKwkgIE1QTl9DT1BZIChuZXdfbnAsIG5wICsgbm4gLSBuZXdfbm4sIG5ld19ubik7IC8qIHBvaW50bGVzcyBpZiBNVSB3aWxsIGJlIHVzZWQgKi8KKworCSAgbmV3X2RwID0gKG1wX3B0cikgZHAgKyBkbiAtIChxbiArIDEpOworCisJICBpZiAocW4gPT0gMiAtIDEpCisJICAgIHsKKwkgICAgICBxaCA9IG1wbl9kaXZyZW1fMiAodHAsIDBMLCBuZXdfbnAsIG5ld19ubiwgbmV3X2RwKTsKKwkgICAgfQorCSAgZWxzZSBpZiAoQkVMT1dfVEhSRVNIT0xEIChxbiwgRENfRElWQVBQUl9RX1RIUkVTSE9MRCAtIDEpKQorCSAgICB7CisJICAgICAgaW52ZXJ0X3BpMSAoZGludiwgZGgsIG5ld19kcFtxbiAtIDFdKTsKKwkgICAgICBxaCA9IG1wbl9zYnBpMV9kaXZhcHByX3EgKHRwLCBuZXdfbnAsIG5ld19ubiwgbmV3X2RwLCBxbiArIDEsIGRpbnYuaW52MzIpOworCSAgICB9CisJICBlbHNlIGlmIChCRUxPV19USFJFU0hPTEQgKHFuLCBNVV9ESVZBUFBSX1FfVEhSRVNIT0xEIC0gMSkpCisJICAgIHsKKwkgICAgICBpbnZlcnRfcGkxIChkaW52LCBkaCwgbmV3X2RwW3FuIC0gMV0pOworCSAgICAgIHFoID0gbXBuX2RjcGkxX2RpdmFwcHJfcSAodHAsIG5ld19ucCwgbmV3X25uLCBuZXdfZHAsIHFuICsgMSwgJmRpbnYpOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBtcF9zaXplX3QgaXRjaCA9IG1wbl9tdV9kaXZhcHByX3FfaXRjaCAobmV3X25uLCBxbiArIDEsIDApOworCSAgICAgIG1wX3B0ciBzY3JhdGNoID0gVE1QX0FMTE9DX0xJTUJTIChpdGNoKTsKKwkgICAgICBxaCA9IG1wbl9tdV9kaXZhcHByX3EgKHRwLCBuZXdfbnAsIG5ld19ubiwgbmV3X2RwLCBxbiArIDEsIHNjcmF0Y2gpOworCSAgICB9CisJICB0cFtxbl0gPSBxaDsKKwl9CisKKyAgICAgIE1QTl9DT1BZIChxcCwgdHAgKyAxLCBxbik7CisgICAgICBpZiAodHBbMF0gPD0gNCkKKyAgICAgICAgeworCSAgbXBfc2l6ZV90IHJuOworCisgICAgICAgICAgcnAgPSBUTVBfQUxMT0NfTElNQlMgKGRuICsgcW4pOworICAgICAgICAgIG1wbl9tdWwgKHJwLCBkcCwgZG4sIHRwICsgMSwgcW4pOworCSAgcm4gPSBkbiArIHFuOworCSAgcm4gLT0gcnBbcm4gLSAxXSA9PSAwOworCisgICAgICAgICAgaWYgKHJuID4gbm4gfHwgbXBuX2NtcCAobnAsIHJwLCBubikgPCAwKQorICAgICAgICAgICAgTVBOX0RFQ1JfVSAocXAsIHFuLCAxKTsKKyAgICAgICAgfQorICAgIH0KKworICBUTVBfRlJFRTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9kaXZfcXJfMS5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2Rpdl9xcl8xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY4MGQzNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9kaXZfcXJfMS5jCkBAIC0wLDAgKzEsMTI1IEBACisvKiBtcG5fZGl2X3FyXzEgLS0gbXBuIGJ5IGxpbWIgZGl2aXNpb24uCisKKyAgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBOaWVscyBNw7ZsbGVyIGFuZCBUb3JiasO2cm4gR3Jhbmx1bmQKKworQ29weXJpZ2h0IDE5OTEsIDE5OTMsIDE5OTQsIDE5OTYsIDE5OTgtMjAwMCwgMjAwMiwgMjAwMywgMjAxMyBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorI2luY2x1ZGUgImxvbmdsb25nLmgiCisKKyNpZm5kZWYgRElWX1FSXzFfTk9STV9USFJFU0hPTEQKKyNkZWZpbmUgRElWX1FSXzFfTk9STV9USFJFU0hPTEQgMworI2VuZGlmCisjaWZuZGVmIERJVl9RUl8xX1VOTk9STV9USFJFU0hPTEQKKyNkZWZpbmUgRElWX1FSXzFfVU5OT1JNX1RIUkVTSE9MRCAzCisjZW5kaWYKKworI2lmIEdNUF9OQUlMX0JJVFMgPiAwCisjZXJyb3IgTmFpbCBiaXRzIG5vdCBzdXBwb3J0ZWQKKyNlbmRpZgorCisvKiBEaXZpZGVzIHt1cCwgbn0gYnkgZC4gV3JpdGVzIHRoZSBuLTEgbG93IHF1b3RpZW50IGxpbWJzIGF0IHtxcCwKKyAqIG4tMX0sIGFuZCB0aGUgaGlnaCBxdW90aWVudCBsaW1iIGF0ICpxaC4gUmV0dXJucyByZW1haW5kZXIuICovCittcF9saW1iX3QKK21wbl9kaXZfcXJfMSAobXBfcHRyIHFwLCBtcF9saW1iX3QgKnFoLCBtcF9zcmNwdHIgdXAsIG1wX3NpemVfdCBuLAorCSAgICAgIG1wX2xpbWJfdCBkKQoreworICB1bnNpZ25lZCBjbnQ7CisgIG1wX2xpbWJfdCB1aDsKKworICBBU1NFUlQgKG4gPiAwKTsKKyAgQVNTRVJUIChkID4gMCk7CisKKyAgaWYgKGQgJiBHTVBfTlVNQl9ISUdIQklUKQorICAgIHsKKyAgICAgIC8qIE5vcm1hbGl6ZWQgY2FzZSAqLworICAgICAgbXBfbGltYl90IGRpbnYsIHE7CisKKyAgICAgIHVoID0gdXBbLS1uXTsKKworICAgICAgcSA9ICh1aCA+PSBkKTsKKyAgICAgICpxaCA9IHE7CisgICAgICB1aCAtPSAoLXEpICYgZDsKKworICAgICAgaWYgKEJFTE9XX1RIUkVTSE9MRCAobiwgRElWX1FSXzFfTk9STV9USFJFU0hPTEQpKQorCXsKKwkgIGNudCA9IDA7CisJcGxhaW46CisJICB3aGlsZSAobiA+IDApCisJICAgIHsKKwkgICAgICBtcF9saW1iX3QgdWwgPSB1cFstLW5dOworCSAgICAgIHVkaXZfcXJubmQgKHFwW25dLCB1aCwgdWgsIHVsLCBkKTsKKwkgICAgfQorCSAgcmV0dXJuIHVoID4+IGNudDsKKwl9CisgICAgICBpbnZlcnRfbGltYiAoZGludiwgZCk7CisgICAgICByZXR1cm4gbXBuX2Rpdl9xcl8xbl9waTEgKHFwLCB1cCwgbiwgdWgsIGQsIGRpbnYpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIFVubm9ybWFsaXplZCBjYXNlICovCisgICAgICBtcF9saW1iX3QgZGludiwgdWw7CisKKyAgICAgIGlmICghIFVESVZfTkVFRFNfTk9STUFMSVpBVElPTgorCSAgJiYgQkVMT1dfVEhSRVNIT0xEIChuLCBESVZfUVJfMV9VTk5PUk1fVEhSRVNIT0xEKSkKKwl7CisJICB1aCA9IHVwWy0tbl07CisJICB1ZGl2X3Fybm5kICgqcWgsIHVoLCBDTlNUX0xJTUIoMCksIHVoLCBkKTsKKwkgIGNudCA9IDA7CisJICBnb3RvIHBsYWluOworCX0KKworICAgICAgY291bnRfbGVhZGluZ196ZXJvcyAoY250LCBkKTsKKyAgICAgIGQgPDw9IGNudDsKKworI2lmIEhBVkVfTkFUSVZFX21wbl9kaXZfcXJfMXVfcGkxCisgICAgICAvKiBGSVhNRTogQ2FsbCBsb29wIGRvaW5nIG9uLXRoZS1mbHkgbm9ybWFsaXphdGlvbiAqLworI2VuZGlmCisKKyAgICAgIC8qIFNoaWZ0IHVwIGZyb250LCB1c2UgcXAgYXJlYSBmb3Igc2hpZnRlZCBjb3B5LiBBIGJpdCBtZXNzeSwKKwkgc2luY2Ugd2UgaGF2ZSBvbmx5IG4tMSBsaW1icyBhdmFpbGFibGUsIGFuZCBzaGlmdCB0aGUgaGlnaAorCSBsaW1iIG1hbnVhbGx5LiAqLworICAgICAgdWggPSB1cFstLW5dOworICAgICAgdWwgPSAodWggPDwgY250KSB8IG1wbl9sc2hpZnQgKHFwLCB1cCwgbiwgY250KTsKKyAgICAgIHVoID4+PSAoR01QX0xJTUJfQklUUyAtIGNudCk7CisKKyAgICAgIGlmIChVRElWX05FRURTX05PUk1BTElaQVRJT04KKwkgICYmIEJFTE9XX1RIUkVTSE9MRCAobiwgRElWX1FSXzFfVU5OT1JNX1RIUkVTSE9MRCkpCisJeworCSAgdWRpdl9xcm5uZCAoKnFoLCB1aCwgdWgsIHVsLCBkKTsKKwkgIHVwID0gcXA7CisJICBnb3RvIHBsYWluOworCX0KKyAgICAgIGludmVydF9saW1iIChkaW52LCBkKTsKKworICAgICAgdWRpdl9xcm5uZF9wcmVpbnYgKCpxaCwgdWgsIHVoLCB1bCwgZCwgZGludik7CisgICAgICByZXR1cm4gbXBuX2Rpdl9xcl8xbl9waTEgKHFwLCBxcCwgbiwgdWgsIGQsIGRpbnYpID4+IGNudDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvZGl2X3FyXzFuX3BpMS5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2Rpdl9xcl8xbl9waTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzMyODEwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2Rpdl9xcl8xbl9waTEuYwpAQCAtMCwwICsxLDI3NyBAQAorLyogbXBuX2Rpdl9xcl8xbl9waTEKKworICAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IE5pZWxzIE3DtmxsZXIKKworICAgVEhJUyBGSUxFIENPTlRBSU5TIElOVEVSTkFMIEZVTkNUSU9OUyBXSVRIIE1VVEFCTEUgSU5URVJGQUNFUy4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggVEhFTSBUSFJPVUdIIERPQ1VNRU5URUQgSU5URVJGQUNFUy4gIElOIEZBQ1QsIElUIElTIEFMTU9TVAorICAgR1VBUkFOVEVFRCBUSEFUIFRIRVknTEwgQ0hBTkdFIE9SIERJU0FQUEVBUiBJTiBBIEZVVFVSRSBHTlUgTVAgUkVMRUFTRS4KKworCitDb3B5cmlnaHQgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisjaW5jbHVkZSAibG9uZ2xvbmcuaCIKKworI2lmIEdNUF9OQUlMX0JJVFMgPiAwCisjZXJyb3IgTmFpbCBiaXRzIG5vdCBzdXBwb3J0ZWQKKyNlbmRpZgorCisjaWZuZGVmIERJVl9RUl8xTl9NRVRIT0QKKyNkZWZpbmUgRElWX1FSXzFOX01FVEhPRCAyCisjZW5kaWYKKworLyogRklYTUU6IER1cGxpY2F0ZWQgaW4gbW9kXzFfMS5jLiBNb3ZlIHRvIGdtcC1pbXBsLmggKi8KKworI2lmIGRlZmluZWQgKF9fR05VQ19fKSAmJiAhIGRlZmluZWQgKE5PX0FTTSkKKworI2lmIEhBVkVfSE9TVF9DUFVfRkFNSUxZX3g4NiAmJiBXX1RZUEVfU0laRSA9PSAzMgorI2RlZmluZSBhZGRfbXNzYWFhYShtLCBzMSwgczAsIGExLCBhMCwgYjEsIGIwKQkJCQlcCisgIF9fYXNtX18gKCAgImFkZAklNiwgJWsyXG5cdCIJCQkJCVwKKwkgICAgICJhZGMJJTQsICVrMVxuXHQiCQkJCQlcCisJICAgICAic2JiCSVrMCwgJWswIgkJCQkJXAorCSAgIDogIj1yIiAobSksICI9ciIgKHMxKSwgIj0mciIgKHMwKQkJCQlcCisJICAgOiAiMSIgICgoVVNJdHlwZSkoYTEpKSwgImciICgoVVNJdHlwZSkoYjEpKSwJCQlcCisJICAgICAiJTIiICgoVVNJdHlwZSkoYTApKSwgImciICgoVVNJdHlwZSkoYjApKSkKKyNlbmRpZgorCisjaWYgSEFWRV9IT1NUX0NQVV9GQU1JTFlfeDg2XzY0ICYmIFdfVFlQRV9TSVpFID09IDY0CisjZGVmaW5lIGFkZF9tc3NhYWFhKG0sIHMxLCBzMCwgYTEsIGEwLCBiMSwgYjApCQkJCVwKKyAgX19hc21fXyAoICAiYWRkCSU2LCAlcTJcblx0IgkJCQkJXAorCSAgICAgImFkYwklNCwgJXExXG5cdCIJCQkJCVwKKwkgICAgICJzYmIJJXEwLCAlcTAiCQkJCQlcCisJICAgOiAiPXIiIChtKSwgIj1yIiAoczEpLCAiPSZyIiAoczApCQkJCVwKKwkgICA6ICIxIiAgKChVREl0eXBlKShhMSkpLCAicm1lIiAoKFVESXR5cGUpKGIxKSksCQlcCisJICAgICAiJTIiICgoVURJdHlwZSkoYTApKSwgInJtZSIgKChVREl0eXBlKShiMCkpKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfX3NwYXJjX18pICYmIFdfVFlQRV9TSVpFID09IDMyCisjZGVmaW5lIGFkZF9tc3NhYWFhKG0sIHNoLCBzbCwgYWgsIGFsLCBiaCwgYmwpCQkJCVwKKyAgX19hc21fXyAoICAiYWRkY2MJJXI1LCAlNiwgJTJcblx0IgkJCQlcCisJICAgICAiYWRkeGNjCSVyMywgJTQsICUxXG5cdCIJCQkJXAorCSAgICAgInN1YngJJSVnMCwgJSVnMCwgJTAiCQkJCQlcCisJICAgOiAiPXIiIChtKSwgIj1yIiAoc2gpLCAiPSZyIiAoc2wpCQkJCVwKKwkgICA6ICJySiIgKGFoKSwgInJJIiAoYmgpLCAiJXJKIiAoYWwpLCAickkiIChibCkJCVwKKwkgX19DTE9CQkVSX0NDKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfX3NwYXJjX18pICYmIFdfVFlQRV9TSVpFID09IDY0CisjZGVmaW5lIGFkZF9tc3NhYWFhKG0sIHNoLCBzbCwgYWgsIGFsLCBiaCwgYmwpCQkJCVwKKyAgX19hc21fXyAoICAiYWRkY2MJJXI1LCAlNiwgJTJcblx0IgkJCQlcCisJICAgICAiYWRkY2NjCSVyNywgJTgsICUlZzBcblx0IgkJCQlcCisJICAgICAiYWRkY2NjCSVyMywgJTQsICUxXG5cdCIJCQkJXAorCSAgICAgImNscgklMFxuXHQiCQkJCQkJXAorCSAgICAgIm1vdmNzCSUleGNjLCAtMSwgJTAiCQkJCQlcCisJICAgOiAiPXIiIChtKSwgIj1yIiAoc2gpLCAiPSZyIiAoc2wpCQkJCVwKKwkgICA6ICJySiIgKGFoKSwgInJJIiAoYmgpLCAiJXJKIiAoYWwpLCAickkiIChibCksCQlcCisJICAgICAickoiICgoYWwpID4+IDMyKSwgInJJIiAoKGJsKSA+PiAzMikJCQlcCisJIF9fQ0xPQkJFUl9DQykKKyNpZiBfX1ZJU19fID49IDB4MzAwCisjdW5kZWYgYWRkX21zc2FhYWEKKyNkZWZpbmUgYWRkX21zc2FhYWEobSwgc2gsIHNsLCBhaCwgYWwsIGJoLCBibCkJCQkJXAorICBfX2FzbV9fICggICJhZGRjYwklcjUsICU2LCAlMlxuXHQiCQkJCVwKKwkgICAgICJhZGR4Y2NjCSVyMywgJTQsICUxXG5cdCIJCQkJXAorCSAgICAgImNscgklMFxuXHQiCQkJCQkJXAorCSAgICAgIm1vdmNzCSUleGNjLCAtMSwgJTAiCQkJCQlcCisJICAgOiAiPXIiIChtKSwgIj1yIiAoc2gpLCAiPSZyIiAoc2wpCQkJCVwKKwkgICA6ICJySiIgKGFoKSwgInJJIiAoYmgpLCAiJXJKIiAoYWwpLCAickkiIChibCkJCVwKKwkgX19DTE9CQkVSX0NDKQorI2VuZGlmCisjZW5kaWYKKworI2lmIEhBVkVfSE9TVF9DUFVfRkFNSUxZX3Bvd2VycGMgJiYgIWRlZmluZWQgKF9MT05HX0xPTkdfTElNQikKKy8qIFRoaXMgd29ya3MgZmluZSBmb3IgMzItYml0IGFuZCA2NC1iaXQgbGltYnMsIGV4Y2VwdCBmb3IgNjQtYml0IGxpbWJzIHdpdGggYQorICAgcHJvY2Vzc29yIHJ1bm5pbmcgaW4gMzItYml0IG1vZGUsIHNpbmNlIHRoZSBjYXJyeSBmbGFnIHRoZW4gZ2V0cyB0aGUgMzItYml0CisgICBjYXJyeS4gICovCisjZGVmaW5lIGFkZF9tc3NhYWFhKG0sIHMxLCBzMCwgYTEsIGEwLCBiMSwgYjApCQkJCVwKKyAgX19hc21fXyAoICAiYWRkJUk2YwklMiwgJTUsICU2XG5cdCIJCQkJCVwKKwkgICAgICJhZGRlCSUxLCAlMywgJTRcblx0IgkJCQkJXAorCSAgICAgInN1YmZlCSUwLCAlMCwgJTBcblx0IgkJCQkJXAorCSAgICAgIm5vcgklMCwgJTAsICUwIgkJCQkJXAorCSAgIDogIj1yIiAobSksICI9ciIgKHMxKSwgIj0mciIgKHMwKQkJCQlcCisJICAgOiAiciIgIChhMSksICJyIiAoYjEpLCAiJXIiIChhMCksICJySSIgKGIwKQkJCVwKKwkgICBfX0NMT0JCRVJfQ0MpCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9fczM5MHhfXykgJiYgV19UWVBFX1NJWkUgPT0gNjQKKyNkZWZpbmUgYWRkX21zc2FhYWEobSwgczEsIHMwLCBhMSwgYTAsIGIxLCBiMCkJCQkJXAorICBfX2FzbV9fICggICJhbGdyCSUyLCAlNlxuXHQiCQkJCQlcCisJICAgICAiYWxjZ3IJJTEsICU0XG5cdCIJCQkJCVwKKwkgICAgICJsZ2hpCSUwLCAwXG5cdCIJCQkJCVwKKwkgICAgICJhbGNncgklMCwgJTBcblx0IgkJCQkJXAorCSAgICAgImxjZ3IJJTAsICUwIgkJCQkJCVwKKwkgICA6ICI9ciIgKG0pLCAiPXIiIChzMSksICI9JnIiIChzMCkJCQkJXAorCSAgIDogIjEiICAoKFVESXR5cGUpKGExKSksICJyIiAoKFVESXR5cGUpKGIxKSksCQkJXAorCSAgICAgIiUyIiAoKFVESXR5cGUpKGEwKSksICJyIiAoKFVESXR5cGUpKGIwKSkgX19DTE9CQkVSX0NDKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfX2FybV9fKSAmJiAhZGVmaW5lZCAoX190aHVtYl9fKSAmJiBXX1RZUEVfU0laRSA9PSAzMgorI2RlZmluZSBhZGRfbXNzYWFhYShtLCBzaCwgc2wsIGFoLCBhbCwgYmgsIGJsKQkJCQlcCisgIF9fYXNtX18gKCAgImFkZHMJJTIsICU1LCAlNlxuXHQiCQkJCQlcCisJICAgICAiYWRjcwklMSwgJTMsICU0XG5cdCIJCQkJCVwKKwkgICAgICJtb3ZjYwklMCwgIzBcblx0IgkJCQkJXAorCSAgICAgIm1vdmNzCSUwLCAjLTEiCQkJCQlcCisJICAgOiAiPXIiIChtKSwgIj1yIiAoc2gpLCAiPSZyIiAoc2wpCQkJCVwKKwkgICA6ICJyIiAoYWgpLCAickkiIChiaCksICIlciIgKGFsKSwgInJJIiAoYmwpIF9fQ0xPQkJFUl9DQykKKyNlbmRpZgorI2VuZGlmIC8qIGRlZmluZWQgKF9fR05VQ19fKSAqLworCisjaWZuZGVmIGFkZF9tc3NhYWFhCisjZGVmaW5lIGFkZF9tc3NhYWFhKG0sIHMxLCBzMCwgYTEsIGEwLCBiMSwgYjApCQkJCVwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBVV3R5cGUgX19zMCwgX19zMSwgX19jMCwgX19jMTsJCQkJCVwKKyAgICBfX3MwID0gKGEwKSArIChiMCk7CQkJCQkJCVwKKyAgICBfX3MxID0gKGExKSArIChiMSk7CQkJCQkJCVwKKyAgICBfX2MwID0gX19zMCA8IChhMCk7CQkJCQkJCVwKKyAgICBfX2MxID0gX19zMSA8IChhMSk7CQkJCQkJCVwKKyAgICAoczApID0gX19zMDsJCQkJCQkJXAorICAgIF9fczEgPSBfX3MxICsgX19jMDsJCQkJCQkJXAorICAgIChzMSkgPSBfX3MxOwkJCQkJCQlcCisgICAgKG0pID0gLSAoX19jMSArIChfX3MxIDwgX19jMCkpOwkJCQkJXAorICB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZiBESVZfUVJfMU5fTUVUSE9EID09IDEKKworLyogRGl2aWRlcyAodWggQl5uICsge3VwLCBufSkgYnkgZCwgc3RvcmluZyB0aGUgcXVvdGllbnQgYXQge3FwLCBufS4KKyAgIFJlcXVpcmVzIHRoYXQgdWggPCBkLiAqLworbXBfbGltYl90CittcG5fZGl2X3FyXzFuX3BpMSAobXBfcHRyIHFwLCBtcF9zcmNwdHIgdXAsIG1wX3NpemVfdCBuLCBtcF9saW1iX3QgdWgsCisJCSAgIG1wX2xpbWJfdCBkLCBtcF9saW1iX3QgZGludikKK3sKKyAgQVNTRVJUIChuID4gMCk7CisgIEFTU0VSVCAodWggPCBkKTsKKyAgQVNTRVJUIChkICYgR01QX05VTUJfSElHSEJJVCk7CisgIEFTU0VSVCAoTVBOX1NBTUVfT1JfU0VQQVJBVEVfUCAocXAsIHVwLCBuKSk7CisKKyAgZG8KKyAgICB7CisgICAgICBtcF9saW1iX3QgcSwgdWw7CisKKyAgICAgIHVsID0gdXBbLS1uXTsKKyAgICAgIHVkaXZfcXJubmRfcHJlaW52IChxLCB1aCwgdWgsIHVsLCBkLCBkaW52KTsKKyAgICAgIHFwW25dID0gcTsKKyAgICB9CisgIHdoaWxlIChuID4gMCk7CisKKyAgcmV0dXJuIHVoOworfQorCisjZWxpZiBESVZfUVJfMU5fTUVUSE9EID09IDIKKworbXBfbGltYl90CittcG5fZGl2X3FyXzFuX3BpMSAobXBfcHRyIHFwLCBtcF9zcmNwdHIgdXAsIG1wX3NpemVfdCBuLCBtcF9saW1iX3QgdTEsCisJCSAgIG1wX2xpbWJfdCBkLCBtcF9saW1iX3QgZGludikKK3sKKyAgbXBfbGltYl90IEIyOworICBtcF9saW1iX3QgdTAsIHUyOworICBtcF9saW1iX3QgcTAsIHExOworICBtcF9saW1iX3QgcDAsIHAxOworICBtcF9saW1iX3QgdDsKKyAgbXBfc2l6ZV90IGo7CisKKyAgQVNTRVJUIChkICYgR01QX0xJTUJfSElHSEJJVCk7CisgIEFTU0VSVCAobiA+IDApOworICBBU1NFUlQgKHUxIDwgZCk7CisKKyAgaWYgKG4gPT0gMSkKKyAgICB7CisgICAgICB1ZGl2X3Fybm5kX3ByZWludiAocXBbMF0sIHUxLCB1MSwgdXBbMF0sIGQsIGRpbnYpOworICAgICAgcmV0dXJuIHUxOworICAgIH0KKworICAvKiBGSVhNRTogQ291bGQgYmUgcHJlY29tcHV0ZWQgKi8KKyAgQjIgPSAtZCpkaW52OworCisgIHVtdWxfcHBtbSAocTEsIHEwLCBkaW52LCB1MSk7CisgIHVtdWxfcHBtbSAocDEsIHAwLCBCMiwgdTEpOworICBxMSArPSB1MTsKKyAgQVNTRVJUIChxMSA+PSB1MSk7CisgIHUwID0gdXBbbi0xXTsJLyogRWFybHkgcmVhZCwgdG8gYWxsb3cgcXAgPT0gdXAuICovCisgIHFwW24tMV0gPSBxMTsKKworICBhZGRfbXNzYWFhYSAodTIsIHUxLCB1MCwgdTAsIHVwW24tMl0sIHAxLCBwMCk7CisKKyAgLyogRklYTUU6IEtlZXAgcTEgaW4gYSB2YXJpYWJsZSBiZXR3ZWVuIGl0ZXJhdGlvbnMsIHRvIHJlZHVjZSBudW1iZXIKKyAgICAgb2YgbWVtb3J5IGFjY2Vzc2VzLiAqLworICBmb3IgKGogPSBuLTI7IGotLSA+IDA7ICkKKyAgICB7CisgICAgICBtcF9saW1iX3QgcTIsIGN5OworCisgICAgICAvKiBBZGRpdGlvbnMgZm9yIHRoZSBxIHVwZGF0ZToKKyAgICAgICAqCSstLS0tLS0tKworICAgICAgICogICAgICAgIHx1MSAqIHYgfAorICAgICAgICogICAgICAgICstLS0rLS0tKworICAgICAgICogICAgICAgIHwgdTF8CisgICAgICAgKiAgICArLS0tKy0tLSsKKyAgICAgICAqICAgIHwgMSB8IHYgfCAgKGNvbmRpdGlvbmFsIG9uIHUyKQorICAgICAgICogICAgKy0tLSstLS0rCisgICAgICAgKiAgICAgICAgfCAxIHwgIChjb25kaXRpb25hbCBvbiB1MCArIHUyIEIyIGNhcnJ5KQorICAgICAgICogICAgICAgICstLS0rCisgICAgICAgKiArICAgICAgfCBxMHwKKyAgICAgICAqICAgLSstLS0rLS0tKy0tLSsKKyAgICAgICAqICAgIHwgcTJ8IHExfCBxMHwKKyAgICAgICAqICAgICstLS0rLS0tKy0tLSsKKyAgICAgICovCisgICAgICB1bXVsX3BwbW0gKHAxLCB0LCB1MSwgZGludik7CisgICAgICBhZGRfc3NhYWFhIChxMiwgcTEsIC11MiwgdTIgJiBkaW52LCBDTlNUX0xJTUIoMCksIHUxKTsKKyAgICAgIGFkZF9zc2FhYWEgKHEyLCBxMSwgcTIsIHExLCBDTlNUX0xJTUIoMCksIHAxKTsKKyAgICAgIGFkZF9zc2FhYWEgKHEyLCBxMSwgcTIsIHExLCBDTlNUX0xJTUIoMCksIHEwKTsKKyAgICAgIHEwID0gdDsKKworICAgICAgdW11bF9wcG1tIChwMSwgcDAsIHUxLCBCMik7CisgICAgICBBRERDX0xJTUIgKGN5LCB1MCwgdTAsIHUyICYgQjIpOworICAgICAgdTAgLT0gKC1jeSkgJiBkOworCisgICAgICAvKiBGaW5hbCBxIHVwZGF0ZSAqLworICAgICAgYWRkX3NzYWFhYSAocTIsIHExLCBxMiwgcTEsIENOU1RfTElNQigwKSwgY3kpOworICAgICAgcXBbaisxXSA9IHExOworICAgICAgTVBOX0lOQ1JfVSAocXAraisyLCBuLWotMiwgcTIpOworCisgICAgICBhZGRfbXNzYWFhYSAodTIsIHUxLCB1MCwgdTAsIHVwW2pdLCBwMSwgcDApOworICAgIH0KKworICBxMSA9ICh1MiA+IDApOworICB1MSAtPSAoLXExKSAmIGQ7CisKKyAgdCA9ICh1MSA+PSBkKTsKKyAgcTEgKz0gdDsKKyAgdTEgLT0gKC10KSAmIGQ7CisKKyAgdWRpdl9xcm5uZF9wcmVpbnYgKHQsIHUwLCB1MSwgdTAsIGQsIGRpbnYpOworICBhZGRfc3NhYWFhIChxMSwgcTAsIHExLCBxMCwgQ05TVF9MSU1CKDApLCB0KTsKKworICBNUE5fSU5DUl9VIChxcCsxLCBuLTEsIHExKTsKKworICBxcFswXSA9IHEwOworICByZXR1cm4gdTA7Cit9CisKKyNlbHNlCisjZXJyb3IgVW5rbm93biBESVZfUVJfMU5fTUVUSE9ECisjZW5kaWYKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9kaXZfcXJfMW5fcGkyLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvZGl2X3FyXzFuX3BpMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ODM0ZWEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvZGl2X3FyXzFuX3BpMi5jCkBAIC0wLDAgKzEsMjAzIEBACisvKiBtcG5fZGl2X3FyXzFuX3BpMi4KKworICAgVEhJUyBGSUxFIENPTlRBSU5TIEFOIElOVEVSTkFMIEZVTkNUSU9OIFdJVEggQSBNVVRBQkxFIElOVEVSRkFDRS4gIElUIElTCisgICBPTkxZIFNBRkUgVE8gUkVBQ0ggSVQgVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuICBJTiBGQUNULCBJVCBJUyBBTE1PU1QKKyAgIEdVQVJBTlRFRUQgVEhBVCBJVCdMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEgRlVUVVJFIEdOVSBNUCBSRUxFQVNFLgorCitDb3B5cmlnaHQgMjAxMywgMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworLyogSVNTVUVTOgorCisgICAqIENhbiB3ZSByZWFsbHkgdXNlIHRoZSBoaWdoIHBpMiBpbnZlcnNlIGxpbWIgZm9yIHVkaXZfcXJubmRfcHJlaW52PworCisgICAqIEFyZSB0aGVyZSBhbnkgcHJvYmxlbXMgd2l0aCBnZW5lcmF0aW5nIG4gcXVvdGllbnQgbGltYnMgaW4gdGhlIHEgYXJlYT8gIEl0CisgICAgIHN1cmVseSBzaW1wbGlmaWVzIHRoaW5ncy4KKworICAgKiBOb3QgeWV0IGFkZXF1YXRlbHkgdGVzdGVkLgorKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisjaW5jbHVkZSAibG9uZ2xvbmcuaCIKKworLyogRGVmaW5lIHNvbWUgbG9uZ2xvbmcuaC1zdHlsZSBtYWNyb3MsIGJ1dCBmb3Igd2lkZXIgb3BlcmF0aW9ucy4KKyAgICogYWRkX3Nzc2FhYWEgaXMgbGlrZSBsb25nbG9uZy5oJ3MgYWRkX3NzYWFhYSBidXQgcHJvcGFnYXRpbmcgY2Fycnktb3V0IGludG8KKyAgICAgYW4gYWRkaXRpb25hbCBzdW0gb3BlcmFuZC4KKyovCisjaWYgZGVmaW5lZCAoX19HTlVDX18pICAmJiAhIGRlZmluZWQgKF9fSU5URUxfQ09NUElMRVIpICYmICEgZGVmaW5lZCAoTk9fQVNNKQorCisjaWYgSEFWRV9IT1NUX0NQVV9GQU1JTFlfeDg2ICYmIFdfVFlQRV9TSVpFID09IDMyCisjZGVmaW5lIGFkZF9zc3NhYWFhKHMyLCBzMSwgczAsIGExLCBhMCwgYjEsIGIwKQkJCQlcCisgIF9fYXNtX18gKCJhZGRcdCU3LCAlazJcblx0YWRjXHQlNSwgJWsxXG5cdGFkY1x0JDAsICVrMCIJCVwKKwkgICA6ICI9ciIgKHMyKSwgIj0mciIgKHMxKSwgIj0mciIgKHMwKQkJCQlcCisJICAgOiAiMCIgICgoVVNJdHlwZSkoczIpKSwJCQkJCVwKKwkgICAgICIxIiAgKChVU0l0eXBlKShhMSkpLCAiZyIgKChVU0l0eXBlKShiMSkpLAkJCVwKKwkgICAgICIlMiIgKChVU0l0eXBlKShhMCkpLCAiZyIgKChVU0l0eXBlKShiMCkpKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfX2FtZDY0X18pICYmIFdfVFlQRV9TSVpFID09IDY0CisjZGVmaW5lIGFkZF9zc3NhYWFhKHMyLCBzMSwgczAsIGExLCBhMCwgYjEsIGIwKQkJCQlcCisgIF9fYXNtX18gKCJhZGRcdCU3LCAlcTJcblx0YWRjXHQlNSwgJXExXG5cdGFkY1x0JDAsICVxMCIJCVwKKwkgICA6ICI9ciIgKHMyKSwgIj0mciIgKHMxKSwgIj0mciIgKHMwKQkJCQlcCisJICAgOiAiMCIgICgoVURJdHlwZSkoczIpKSwJCQkJCVwKKwkgICAgICIxIiAgKChVREl0eXBlKShhMSkpLCAicm1lIiAoKFVESXR5cGUpKGIxKSksCQlcCisJICAgICAiJTIiICgoVURJdHlwZSkoYTApKSwgInJtZSIgKChVREl0eXBlKShiMCkpKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfX2FhcmNoNjRfXykgJiYgV19UWVBFX1NJWkUgPT0gNjQKKyNkZWZpbmUgYWRkX3Nzc2FhYWEoczIsIHMxLCBzMCwgYTEsIGEwLCBiMSwgYjApCQkJCVwKKyAgX19hc21fXyAoImFkZHNcdCUyLCAleDYsICU3XG5cdGFkY3NcdCUxLCAleDQsICV4NVxuXHRhZGNcdCUwLCAlMywgeHpyIlwKKwkgICA6ICI9ciIgKHMyKSwgIj0mciIgKHMxKSwgIj0mciIgKHMwKQkJCQlcCisJICAgOiAicloiIChzMiksICIlcloiICAoYTEpLCAicloiIChiMSksICIlcloiIChhMCksICJySSIgKGIwKQlcCisJICAgICBfX0NMT0JCRVJfQ0MpCisjZW5kaWYKKworI2lmIEhBVkVfSE9TVF9DUFVfRkFNSUxZX3Bvd2VycGMgJiYgIWRlZmluZWQgKF9MT05HX0xPTkdfTElNQikKKy8qIFRoaXMgd29ya3MgZmluZSBmb3IgMzItYml0IGFuZCA2NC1iaXQgbGltYnMsIGV4Y2VwdCBmb3IgNjQtYml0IGxpbWJzIHdpdGggYQorICAgcHJvY2Vzc29yIHJ1bm5pbmcgaW4gMzItYml0IG1vZGUsIHNpbmNlIHRoZSBjYXJyeSBmbGFnIHRoZW4gZ2V0cyB0aGUgMzItYml0CisgICBjYXJyeS4gICovCisjZGVmaW5lIGFkZF9zc3NhYWFhKHMyLCBzMSwgczAsIGExLCBhMCwgYjEsIGIwKQkJCQlcCisgIF9fYXNtX18gKCJhZGQlSTdjXHQlMiwlNiwlN1xuXHRhZGRlXHQlMSwlNCwlNVxuXHRhZGR6ZVx0JTAsJTMiCVwKKwkgICA6ICI9ciIgKHMyKSwgIj0mciIgKHMxKSwgIj0mciIgKHMwKQkJCQlcCisJICAgOiAiciIgIChzMiksICJyIiAgKGExKSwgInIiIChiMSksICIlciIgKGEwKSwgInJJIiAoYjApCVwKKwkgICAgIF9fQ0xPQkJFUl9DQykKKyNlbmRpZgorCisjZW5kaWYgLyogX19HTlVDX18gKi8KKworI2lmbmRlZiBhZGRfc3NzYWFhYQorI2RlZmluZSBhZGRfc3NzYWFhYShzMiwgczEsIHMwLCBhMSwgYTAsIGIxLCBiMCkJCQkJXAorICBkbyB7CQkJCQkJCQkJXAorICAgIFVXdHlwZSBfX3MwLCBfX3MxLCBfX2MwLCBfX2MxOwkJCQkJXAorICAgIF9fczAgPSAoYTApICsgKGIwKTsJCQkJCQkJXAorICAgIF9fczEgPSAoYTEpICsgKGIxKTsJCQkJCQkJXAorICAgIF9fYzAgPSBfX3MwIDwgKGEwKTsJCQkJCQkJXAorICAgIF9fYzEgPSBfX3MxIDwgKGExKTsJCQkJCQkJXAorICAgIChzMCkgPSBfX3MwOwkJCQkJCQlcCisgICAgX19zMSA9IF9fczEgKyBfX2MwOwkJCQkJCQlcCisgICAgKHMxKSA9IF9fczE7CQkJCQkJCVwKKyAgICAoczIpICs9IF9fYzEgKyAoX19zMSA8IF9fYzApOwkJCQkJXAorICB9IHdoaWxlICgwKQorI2VuZGlmCisKK3N0cnVjdCBwcmVjb21wX2Rpdl8xX3BpMgoreworICBtcF9saW1iX3QgZGlwWzJdOworICBtcF9saW1iX3QgZDsKKyAgaW50IG5vcm1fY250OworfTsKKworbXBfbGltYl90CittcG5fZGl2X3FyXzFuX3BpMiAobXBfcHRyIHFwLAorCQkgICBtcF9zcmNwdHIgdXAsIG1wX3NpemVfdCB1biwKKwkJICAgc3RydWN0IHByZWNvbXBfZGl2XzFfcGkyICpwZCkKK3sKKyAgbXBfbGltYl90IG1vc3Rfc2lnbmlmaWNhbnRfcV9saW1iOworICBtcF9zaXplX3QgaTsKKyAgbXBfbGltYl90IHIsIHUyLCB1MSwgdTA7CisgIG1wX2xpbWJfdCBkMCwgZGkxLCBkaTA7CisgIG1wX2xpbWJfdCBxM2EsIHEyYSwgcTJiLCBxMWIsIHEyYywgcTFjLCBxMWQsIHEwZDsKKyAgbXBfbGltYl90IGNuZDsKKworICBBU1NFUlQgKHVuID49IDIpOworICBBU1NFUlQgKChwZC0+ZCAmIEdNUF9OVU1CX0hJR0hCSVQpICE9IDApOworICBBU1NFUlQgKCEgTVBOX09WRVJMQVBfUCAocXAsIHVuLTIsIHVwLCB1bikgfHwgcXArMiA+PSB1cCk7CisgIEFTU0VSVF9NUE4gKHVwLCB1bik7CisKKyNkZWZpbmUgcTMgcTNhCisjZGVmaW5lIHEyIHEyYgorI2RlZmluZSBxMSBxMWIKKworICB1cCArPSB1biAtIDM7CisgIHIgPSB1cFsyXTsKKyAgZDAgPSBwZC0+ZDsKKworICBtb3N0X3NpZ25pZmljYW50X3FfbGltYiA9IChyID49IGQwKTsKKyAgciAtPSBkMCAmIC1tb3N0X3NpZ25pZmljYW50X3FfbGltYjsKKworICBxcCArPSB1biAtIDM7CisgIHFwWzJdID0gbW9zdF9zaWduaWZpY2FudF9xX2xpbWI7CisKKyAgZGkxID0gcGQtPmRpcFsxXTsKKyAgZGkwID0gcGQtPmRpcFswXTsKKworICBmb3IgKGkgPSB1biAtIDM7IGkgPj0gMDsgaSAtPSAyKQorICAgIHsKKyAgICAgIHUyID0gcjsKKyAgICAgIHUxID0gdXBbMV07CisgICAgICB1MCA9IHVwWzBdOworCisgICAgICAvKiBEaXZpZGVuZCBpbiB7cix1MSx1MH0gKi8KKworICAgICAgdW11bF9wcG1tIChxMWQscTBkLCB1MSwgZGkwKTsKKyAgICAgIHVtdWxfcHBtbSAocTJiLHExYiwgdTEsIGRpMSk7CisgICAgICBxMmIrKzsJCQkJLyogY2Fubm90IHNwaWxsICovCisgICAgICBhZGRfc3NzYWFhYSAocixxMmIscTFiLCBxMmIscTFiLCB1MSx1MCk7CisKKyAgICAgIHVtdWxfcHBtbSAocTJjLHExYywgdTIsICBkaTApOworICAgICAgYWRkX3Nzc2FhYWEgKHIscTJiLHExYiwgcTJiLHExYiwgcTJjLHExYyk7CisgICAgICB1bXVsX3BwbW0gKHEzYSxxMmEsIHUyLCBkaTEpOworCisgICAgICBhZGRfc3NzYWFhYSAocixxMmIscTFiLCBxMmIscTFiLCBxMmEscTFkKTsKKworICAgICAgcTMgKz0gcjsKKworICAgICAgciA9IHUwIC0gcTIgKiBkMDsKKworICAgICAgY25kID0gKHIgPj0gcTEpOworICAgICAgciArPSBkMCAmIC1jbmQ7CisgICAgICBzdWJfZGRtbXNzIChxMyxxMiwgIHEzLHEyLCAgMCxjbmQpOworCisgICAgICBpZiAoVU5MSUtFTFkgKHIgPj0gZDApKQorCXsKKwkgIHIgLT0gZDA7CisJICBhZGRfc3NhYWFhIChxMyxxMiwgIHEzLHEyLCAgMCwxKTsKKwl9CisKKyAgICAgIHFwWzBdID0gcTI7CisgICAgICBxcFsxXSA9IHEzOworCisgICAgICB1cCAtPSAyOworICAgICAgcXAgLT0gMjsKKyAgICB9CisKKyAgaWYgKCh1biAmIDEpID09IDApCisgICAgeworICAgICAgdTIgPSByOworICAgICAgdTEgPSB1cFsxXTsKKworICAgICAgdWRpdl9xcm5uZF9wcmVpbnYgKHEzLCByLCB1MiwgdTEsIGQwLCBkaTEpOworICAgICAgcXBbMV0gPSBxMzsKKyAgICB9CisKKyAgcmV0dXJuIHI7CisKKyN1bmRlZiBxMworI3VuZGVmIHEyCisjdW5kZWYgcTEKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9kaXZfcXJfMXVfcGkyLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvZGl2X3FyXzF1X3BpMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NzY2MmYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvZGl2X3FyXzF1X3BpMi5jCkBAIC0wLDAgKzEsMjM1IEBACisvKiBtcG5fZGl2X3FyXzF1X3BpMi4KKworICAgVEhJUyBGSUxFIENPTlRBSU5TIEFOIElOVEVSTkFMIEZVTkNUSU9OIFdJVEggQSBNVVRBQkxFIElOVEVSRkFDRS4gIElUIElTCisgICBPTkxZIFNBRkUgVE8gUkVBQ0ggSVQgVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuICBJTiBGQUNULCBJVCBJUyBBTE1PU1QKKyAgIEdVQVJBTlRFRUQgVEhBVCBJVCdMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEgRlVUVVJFIEdOVSBNUCBSRUxFQVNFLgorCitDb3B5cmlnaHQgMjAxMywgMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworLyogSVNTVUVTOgorCisgICAqIENhbiB3ZSByZWFsbHkgdXNlIHRoZSBoaWdoIHBpMiBpbnZlcnNlIGxpbWIgZm9yIHVkaXZfcXJubmRfcHJlaW52PworCisgICAqIEFyZSB0aGVyZSBhbnkgcHJvYmxlbXMgd2l0aCBnZW5lcmF0aW5nIG4gcXVvdGllbnQgbGltYnMgaW4gdGhlIHEgYXJlYT8gIEl0CisgICAgIHN1cmVseSBzaW1wbGlmaWVzIHRoaW5ncy4KKworICAgKiBOb3QgeWV0IGFkZXF1YXRlbHkgdGVzdGVkLgorKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisjaW5jbHVkZSAibG9uZ2xvbmcuaCIKKworLyogRGVmaW5lIHNvbWUgbG9uZ2xvbmcuaC1zdHlsZSBtYWNyb3MsIGJ1dCBmb3Igd2lkZXIgb3BlcmF0aW9ucy4KKyAgICogYWRkX3Nzc2FhYWEgaXMgbGlrZSBsb25nbG9uZy5oJ3MgYWRkX3NzYWFhYSBidXQgcHJvcGFnYXRpbmcgY2Fycnktb3V0IGludG8KKyAgICAgYW4gYWRkaXRpb25hbCBzdW0gb3BlcmFuZC4KKyovCisjaWYgZGVmaW5lZCAoX19HTlVDX18pICAmJiAhIGRlZmluZWQgKF9fSU5URUxfQ09NUElMRVIpICYmICEgZGVmaW5lZCAoTk9fQVNNKQorCisjaWYgSEFWRV9IT1NUX0NQVV9GQU1JTFlfeDg2ICYmIFdfVFlQRV9TSVpFID09IDMyCisjZGVmaW5lIGFkZF9zc3NhYWFhKHMyLCBzMSwgczAsIGExLCBhMCwgYjEsIGIwKQkJCQlcCisgIF9fYXNtX18gKCJhZGRcdCU3LCAlazJcblx0YWRjXHQlNSwgJWsxXG5cdGFkY1x0JDAsICVrMCIJCVwKKwkgICA6ICI9ciIgKHMyKSwgIj0mciIgKHMxKSwgIj0mciIgKHMwKQkJCQlcCisJICAgOiAiMCIgICgoVVNJdHlwZSkoczIpKSwJCQkJCVwKKwkgICAgICIxIiAgKChVU0l0eXBlKShhMSkpLCAiZyIgKChVU0l0eXBlKShiMSkpLAkJCVwKKwkgICAgICIlMiIgKChVU0l0eXBlKShhMCkpLCAiZyIgKChVU0l0eXBlKShiMCkpKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfX2FtZDY0X18pICYmIFdfVFlQRV9TSVpFID09IDY0CisjZGVmaW5lIGFkZF9zc3NhYWFhKHMyLCBzMSwgczAsIGExLCBhMCwgYjEsIGIwKQkJCQlcCisgIF9fYXNtX18gKCJhZGRcdCU3LCAlcTJcblx0YWRjXHQlNSwgJXExXG5cdGFkY1x0JDAsICVxMCIJCVwKKwkgICA6ICI9ciIgKHMyKSwgIj0mciIgKHMxKSwgIj0mciIgKHMwKQkJCQlcCisJICAgOiAiMCIgICgoVURJdHlwZSkoczIpKSwJCQkJCVwKKwkgICAgICIxIiAgKChVREl0eXBlKShhMSkpLCAicm1lIiAoKFVESXR5cGUpKGIxKSksCQlcCisJICAgICAiJTIiICgoVURJdHlwZSkoYTApKSwgInJtZSIgKChVREl0eXBlKShiMCkpKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfX2FhcmNoNjRfXykgJiYgV19UWVBFX1NJWkUgPT0gNjQKKyNkZWZpbmUgYWRkX3Nzc2FhYWEoczIsIHMxLCBzMCwgYTEsIGEwLCBiMSwgYjApCQkJCVwKKyAgX19hc21fXyAoImFkZHNcdCUyLCAleDYsICU3XG5cdGFkY3NcdCUxLCAleDQsICV4NVxuXHRhZGNcdCUwLCAlMywgeHpyIlwKKwkgICA6ICI9ciIgKHMyKSwgIj0mciIgKHMxKSwgIj0mciIgKHMwKQkJCQlcCisJICAgOiAicloiIChzMiksICIlcloiICAoYTEpLCAicloiIChiMSksICIlcloiIChhMCksICJySSIgKGIwKSBfX0NMT0JCRVJfQ0MpCisjZW5kaWYKKworI2lmIEhBVkVfSE9TVF9DUFVfRkFNSUxZX3Bvd2VycGMgJiYgIWRlZmluZWQgKF9MT05HX0xPTkdfTElNQikKKy8qIFRoaXMgd29ya3MgZmluZSBmb3IgMzItYml0IGFuZCA2NC1iaXQgbGltYnMsIGV4Y2VwdCBmb3IgNjQtYml0IGxpbWJzIHdpdGggYQorICAgcHJvY2Vzc29yIHJ1bm5pbmcgaW4gMzItYml0IG1vZGUsIHNpbmNlIHRoZSBjYXJyeSBmbGFnIHRoZW4gZ2V0cyB0aGUgMzItYml0CisgICBjYXJyeS4gICovCisjZGVmaW5lIGFkZF9zc3NhYWFhKHMyLCBzMSwgczAsIGExLCBhMCwgYjEsIGIwKQkJCQlcCisgIF9fYXNtX18gKCJhZGQlSTdjXHQlMiwlNiwlN1xuXHRhZGRlXHQlMSwlNCwlNVxuXHRhZGR6ZVx0JTAsJTMiCVwKKwkgICA6ICI9ciIgKHMyKSwgIj0mciIgKHMxKSwgIj0mciIgKHMwKQkJCQlcCisJICAgOiAiciIgIChzMiksICJyIiAgKGExKSwgInIiIChiMSksICIlciIgKGEwKSwgInJJIiAoYjApCVwKKwkgICAgIF9fQ0xPQkJFUl9DQykKKyNlbmRpZgorCisjZW5kaWYgLyogX19HTlVDX18gKi8KKworI2lmbmRlZiBhZGRfc3NzYWFhYQorI2RlZmluZSBhZGRfc3NzYWFhYShzMiwgczEsIHMwLCBhMSwgYTAsIGIxLCBiMCkJCQkJXAorICBkbyB7CQkJCQkJCQkJXAorICAgIFVXdHlwZSBfX3MwLCBfX3MxLCBfX2MwLCBfX2MxOwkJCQkJXAorICAgIF9fczAgPSAoYTApICsgKGIwKTsJCQkJCQkJXAorICAgIF9fczEgPSAoYTEpICsgKGIxKTsJCQkJCQkJXAorICAgIF9fYzAgPSBfX3MwIDwgKGEwKTsJCQkJCQkJXAorICAgIF9fYzEgPSBfX3MxIDwgKGExKTsJCQkJCQkJXAorICAgIChzMCkgPSBfX3MwOwkJCQkJCQlcCisgICAgX19zMSA9IF9fczEgKyBfX2MwOwkJCQkJCQlcCisgICAgKHMxKSA9IF9fczE7CQkJCQkJCVwKKyAgICAoczIpICs9IF9fYzEgKyAoX19zMSA8IF9fYzApOwkJCQkJXAorICB9IHdoaWxlICgwKQorI2VuZGlmCisKK3N0cnVjdCBwcmVjb21wX2Rpdl8xX3BpMgoreworICBtcF9saW1iX3QgZGlwWzJdOworICBtcF9saW1iX3QgZDsKKyAgaW50IG5vcm1fY250OworfTsKKworbXBfbGltYl90CittcG5fZGl2X3FyXzF1X3BpMiAobXBfcHRyIHFwLAorCQkgICBtcF9zcmNwdHIgdXAsIG1wX3NpemVfdCB1biwKKwkJICAgc3RydWN0IHByZWNvbXBfZGl2XzFfcGkyICpwZCkKK3sKKyAgbXBfc2l6ZV90IGk7CisgIG1wX2xpbWJfdCByLCB1MiwgdTEsIHUwOworICBtcF9saW1iX3QgZDAsIGRpMSwgZGkwOworICBtcF9saW1iX3QgcTNhLCBxMmEsIHEyYiwgcTFiLCBxMmMsIHExYywgcTFkLCBxMGQ7CisgIG1wX2xpbWJfdCBjbmQ7CisgIGludCBjbnQ7CisKKyAgQVNTRVJUICh1biA+PSAyKTsKKyAgQVNTRVJUICgocGQtPmQgJiBHTVBfTlVNQl9ISUdIQklUKSA9PSAwKTsKKyAgQVNTRVJUICghIE1QTl9PVkVSTEFQX1AgKHFwLCB1bi0yLCB1cCwgdW4pIHx8IHFwKzIgPj0gdXApOworICBBU1NFUlRfTVBOICh1cCwgdW4pOworCisjZGVmaW5lIHEzIHEzYQorI2RlZmluZSBxMiBxMmIKKyNkZWZpbmUgcTEgcTFiCisKKyAgdXAgKz0gdW4gLSAzOworICBjbnQgPSBwZC0+bm9ybV9jbnQ7CisgIHIgPSB1cFsyXSA+PiAoR01QX05VTUJfQklUUyAtIGNudCk7CisgIGQwID0gcGQtPmQgPDwgY250OworCisgIHFwICs9IHVuIC0gMjsKKworICBkaTEgPSBwZC0+ZGlwWzFdOworICBkaTAgPSBwZC0+ZGlwWzBdOworCisgIGZvciAoaSA9IHVuIC0gMzsgaSA+PSAwOyBpIC09IDIpCisgICAgeworICAgICAgdTIgPSByOworICAgICAgdTEgPSAodXBbMl0gPDwgY250KSB8ICh1cFsxXSA+PiAoR01QX05VTUJfQklUUyAtIGNudCkpOworICAgICAgdTAgPSAodXBbMV0gPDwgY250KSB8ICh1cFswXSA+PiAoR01QX05VTUJfQklUUyAtIGNudCkpOworCisgICAgICAvKiBEaXZpZGVuZCBpbiB7cix1MSx1MH0gKi8KKworICAgICAgdW11bF9wcG1tIChxMWQscTBkLCB1MSwgZGkwKTsKKyAgICAgIHVtdWxfcHBtbSAocTJiLHExYiwgdTEsIGRpMSk7CisgICAgICBxMmIrKzsJCQkJLyogY2Fubm90IHNwaWxsICovCisgICAgICBhZGRfc3NzYWFhYSAocixxMmIscTFiLCBxMmIscTFiLCB1MSx1MCk7CisKKyAgICAgIHVtdWxfcHBtbSAocTJjLHExYywgdTIsICBkaTApOworICAgICAgYWRkX3Nzc2FhYWEgKHIscTJiLHExYiwgcTJiLHExYiwgcTJjLHExYyk7CisgICAgICB1bXVsX3BwbW0gKHEzYSxxMmEsIHUyLCBkaTEpOworCisgICAgICBhZGRfc3NzYWFhYSAocixxMmIscTFiLCBxMmIscTFiLCBxMmEscTFkKTsKKworICAgICAgcTMgKz0gcjsKKworICAgICAgciA9IHUwIC0gcTIgKiBkMDsKKworICAgICAgY25kID0gKHIgPj0gcTEpOworICAgICAgciArPSBkMCAmIC1jbmQ7CisgICAgICBzdWJfZGRtbXNzIChxMyxxMiwgIHEzLHEyLCAgMCxjbmQpOworCisgICAgICBpZiAoVU5MSUtFTFkgKHIgPj0gZDApKQorCXsKKwkgIHIgLT0gZDA7CisJICBhZGRfc3NhYWFhIChxMyxxMiwgIHEzLHEyLCAgMCwxKTsKKwl9CisKKyAgICAgIHFwWzBdID0gcTI7CisgICAgICBxcFsxXSA9IHEzOworCisgICAgICB1cCAtPSAyOworICAgICAgcXAgLT0gMjsKKyAgICB9CisKKyAgaWYgKCh1biAmIDEpICE9IDApCisgICAgeworICAgICAgdTIgPSByOworICAgICAgdTEgPSAodXBbMl0gPDwgY250KTsKKworICAgICAgdWRpdl9xcm5uZF9wcmVpbnYgKHEzLCByLCB1MiwgdTEsIGQwLCBkaTEpOworICAgICAgcXBbMV0gPSBxMzsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB1MiA9IHI7CisgICAgICB1MSA9ICh1cFsyXSA8PCBjbnQpIHwgKHVwWzFdID4+IChHTVBfTlVNQl9CSVRTIC0gY250KSk7CisgICAgICB1MCA9ICh1cFsxXSA8PCBjbnQpOworCisgICAgICAvKiBEaXZpZGVuZCBpbiB7cix1MSx1MH0gKi8KKworICAgICAgdW11bF9wcG1tIChxMWQscTBkLCB1MSwgZGkwKTsKKyAgICAgIHVtdWxfcHBtbSAocTJiLHExYiwgdTEsIGRpMSk7CisgICAgICBxMmIrKzsJCQkJLyogY2Fubm90IHNwaWxsICovCisgICAgICBhZGRfc3NzYWFhYSAocixxMmIscTFiLCBxMmIscTFiLCB1MSx1MCk7CisKKyAgICAgIHVtdWxfcHBtbSAocTJjLHExYywgdTIsICBkaTApOworICAgICAgYWRkX3Nzc2FhYWEgKHIscTJiLHExYiwgcTJiLHExYiwgcTJjLHExYyk7CisgICAgICB1bXVsX3BwbW0gKHEzYSxxMmEsIHUyLCBkaTEpOworCisgICAgICBhZGRfc3NzYWFhYSAocixxMmIscTFiLCBxMmIscTFiLCBxMmEscTFkKTsKKworICAgICAgcTMgKz0gcjsKKworICAgICAgciA9IHUwIC0gcTIgKiBkMDsKKworICAgICAgY25kID0gKHIgPj0gcTEpOworICAgICAgciArPSBkMCAmIC1jbmQ7CisgICAgICBzdWJfZGRtbXNzIChxMyxxMiwgIHEzLHEyLCAgMCxjbmQpOworCisgICAgICBpZiAoVU5MSUtFTFkgKHIgPj0gZDApKQorCXsKKwkgIHIgLT0gZDA7CisJICBhZGRfc3NhYWFhIChxMyxxMiwgIHEzLHEyLCAgMCwxKTsKKwl9CisKKyAgICAgIHFwWzBdID0gcTI7CisgICAgICBxcFsxXSA9IHEzOworICAgIH0KKworICByZXR1cm4gciA+PiBjbnQ7CisKKyN1bmRlZiBxMworI3VuZGVmIHEyCisjdW5kZWYgcTEKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9kaXZfcXJfMi5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2Rpdl9xcl8yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdhZGQ0NAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9kaXZfcXJfMi5jCkBAIC0wLDAgKzEsMzE0IEBACisvKiBtcG5fZGl2X3FyXzIgLS0gRGl2aWRlIG5hdHVyYWwgbnVtYmVycywgcHJvZHVjaW5nIGJvdGggcmVtYWluZGVyIGFuZAorICAgcXVvdGllbnQuICBUaGUgZGl2aXNvciBpcyB0d28gbGltYnMuCisKKyAgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3Jiam9ybiBHcmFubHVuZCBhbmQgTmllbHMgTcO2bGxlcgorCisgICBUSElTIEZJTEUgQ09OVEFJTlMgSU5URVJOQUwgRlVOQ1RJT05TIFdJVEggTVVUQUJMRSBJTlRFUkZBQ0VTLiAgSVQgSVMgT05MWQorICAgU0FGRSBUTyBSRUFDSCBUSEVNIFRIUk9VR0ggRE9DVU1FTlRFRCBJTlRFUkZBQ0VTLiAgSU4gRkFDVCwgSVQgSVMgQUxNT1NUCisgICBHVUFSQU5URUVEIFRIQVQgVEhFWSdMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEgRlVUVVJFIEdOVSBNUCBSRUxFQVNFLgorCisKK0NvcHlyaWdodCAxOTkzLTE5OTYsIDE5OTktMjAwMiwgMjAxMSwgMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisjaW5jbHVkZSAibG9uZ2xvbmcuaCIKKworI2lmbmRlZiBESVZfUVJfMl9QSTJfVEhSRVNIT0xECisvKiBEaXNhYmxlZCB1bmxlc3MgZXhwbGljaXRseSB0dW5lZC4gKi8KKyNkZWZpbmUgRElWX1FSXzJfUEkyX1RIUkVTSE9MRCBNUF9MSU1CX1RfTUFYCisjZW5kaWYKKworI2lmbmRlZiBTQU5JVFlfQ0hFQ0sKKyNkZWZpbmUgU0FOSVRZX0NIRUNLIDAKKyNlbmRpZgorCisvKiBEZWZpbmUgc29tZSBsb25nbG9uZy5oLXN0eWxlIG1hY3JvcywgYnV0IGZvciB3aWRlciBvcGVyYXRpb25zLgorICAgKiBhZGRfc3NzYWFhYSBpcyBsaWtlIGxvbmdsb25nLmgncyBhZGRfc3NhYWFhIGJ1dCBwcm9wYWdhdGluZyBjYXJyeS1vdXQgaW50bworICAgICBhbiBhZGRpdGlvbmFsIHN1bSBvcGVyYW5kLgorICAgKiBhZGRfY3NhYWMgYWNjZXB0cyB0d28gYWRkZW5kcyBhbmQgYSBjYXJyeSBpbiwgYW5kIGdlbmVyYXRlcyBhIHN1bSBhbmQgYQorICAgICBjYXJyeSBvdXQuICBBIGxpdHRsZSBsaWtlIGEgImZ1bGwgYWRkZXIiLgorKi8KKyNpZiBkZWZpbmVkIChfX0dOVUNfXykgICYmICEgZGVmaW5lZCAoX19JTlRFTF9DT01QSUxFUikgJiYgISBkZWZpbmVkIChOT19BU00pCisKKyNpZiBIQVZFX0hPU1RfQ1BVX0ZBTUlMWV94ODYgJiYgV19UWVBFX1NJWkUgPT0gMzIKKyNkZWZpbmUgYWRkX3Nzc2FhYWEoczIsIHMxLCBzMCwgYTEsIGEwLCBiMSwgYjApCQkJCVwKKyAgX19hc21fXyAoImFkZFx0JTcsICVrMlxuXHRhZGNcdCU1LCAlazFcblx0YWRjXHQkMCwgJWswIgkJXAorCSAgIDogIj1yIiAoczIpLCAiPSZyIiAoczEpLCAiPSZyIiAoczApCQkJCVwKKwkgICA6ICIwIiAgKChVU0l0eXBlKShzMikpLAkJCQkJXAorCSAgICAgIjEiICAoKFVTSXR5cGUpKGExKSksICJnIiAoKFVTSXR5cGUpKGIxKSksCQkJXAorCSAgICAgIiUyIiAoKFVTSXR5cGUpKGEwKSksICJnIiAoKFVTSXR5cGUpKGIwKSkpCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9fYW1kNjRfXykgJiYgV19UWVBFX1NJWkUgPT0gNjQKKyNkZWZpbmUgYWRkX3Nzc2FhYWEoczIsIHMxLCBzMCwgYTEsIGEwLCBiMSwgYjApCQkJCVwKKyAgX19hc21fXyAoImFkZFx0JTcsICVxMlxuXHRhZGNcdCU1LCAlcTFcblx0YWRjXHQkMCwgJXEwIgkJXAorCSAgIDogIj1yIiAoczIpLCAiPSZyIiAoczEpLCAiPSZyIiAoczApCQkJCVwKKwkgICA6ICIwIiAgKChVREl0eXBlKShzMikpLAkJCQkJXAorCSAgICAgIjEiICAoKFVESXR5cGUpKGExKSksICJybWUiICgoVURJdHlwZSkoYjEpKSwJCVwKKwkgICAgICIlMiIgKChVREl0eXBlKShhMCkpLCAicm1lIiAoKFVESXR5cGUpKGIwKSkpCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9fYWFyY2g2NF9fKSAmJiBXX1RZUEVfU0laRSA9PSA2NAorI2RlZmluZSBhZGRfc3NzYWFhYShzMiwgczEsIHMwLCBhMSwgYTAsIGIxLCBiMCkJCQkJXAorICBfX2FzbV9fICgiYWRkc1x0JTIsICV4NiwgJTdcblx0YWRjc1x0JTEsICV4NCwgJXg1XG5cdGFkY1x0JTAsICUzLCB4enIiXAorCSAgIDogIj1yIiAoczIpLCAiPSZyIiAoczEpLCAiPSZyIiAoczApCQkJCVwKKwkgICA6ICJyWiIgKHMyKSwgIiVyWiIgIChhMSksICJyWiIgKGIxKSwgIiVyWiIgKGEwKSwgInJJIiAoYjApCVwKKwkgICAgIF9fQ0xPQkJFUl9DQykKKyNlbmRpZgorCisjaWYgSEFWRV9IT1NUX0NQVV9GQU1JTFlfcG93ZXJwYyAmJiAhZGVmaW5lZCAoX0xPTkdfTE9OR19MSU1CKQorLyogVGhpcyB3b3JrcyBmaW5lIGZvciAzMi1iaXQgYW5kIDY0LWJpdCBsaW1icywgZXhjZXB0IGZvciA2NC1iaXQgbGltYnMgd2l0aCBhCisgICBwcm9jZXNzb3IgcnVubmluZyBpbiAzMi1iaXQgbW9kZSwgc2luY2UgdGhlIGNhcnJ5IGZsYWcgdGhlbiBnZXRzIHRoZSAzMi1iaXQKKyAgIGNhcnJ5LiAgKi8KKyNkZWZpbmUgYWRkX3Nzc2FhYWEoczIsIHMxLCBzMCwgYTEsIGEwLCBiMSwgYjApCQkJCVwKKyAgX19hc21fXyAoImFkZCVJN2NcdCUyLCU2LCU3XG5cdGFkZGVcdCUxLCU0LCU1XG5cdGFkZHplXHQlMCwlMyIJXAorCSAgIDogIj1yIiAoczIpLCAiPSZyIiAoczEpLCAiPSZyIiAoczApCQkJCVwKKwkgICA6ICJyIiAgKHMyKSwgInIiICAoYTEpLCAiciIgKGIxKSwgIiVyIiAoYTApLCAickkiIChiMCkJXAorCSAgICAgX19DTE9CQkVSX0NDKQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0dOVUNfXyAqLworCisjaWZuZGVmIGFkZF9zc3NhYWFhCisjZGVmaW5lIGFkZF9zc3NhYWFhKHMyLCBzMSwgczAsIGExLCBhMCwgYjEsIGIwKQkJCQlcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgVVd0eXBlIF9fczAsIF9fczEsIF9fYzAsIF9fYzE7CQkJCQlcCisgICAgX19zMCA9IChhMCkgKyAoYjApOwkJCQkJCQlcCisgICAgX19zMSA9IChhMSkgKyAoYjEpOwkJCQkJCQlcCisgICAgX19jMCA9IF9fczAgPCAoYTApOwkJCQkJCQlcCisgICAgX19jMSA9IF9fczEgPCAoYTEpOwkJCQkJCQlcCisgICAgKHMwKSA9IF9fczA7CQkJCQkJCVwKKyAgICBfX3MxID0gX19zMSArIF9fYzA7CQkJCQkJCVwKKyAgICAoczEpID0gX19zMTsJCQkJCQkJXAorICAgIChzMikgKz0gX19jMSArIChfX3MxIDwgX19jMCk7CQkJCQlcCisgIH0gd2hpbGUgKDApCisjZW5kaWYKKworLyogVHlwaWNhbGx5IHVzZWQgd2l0aCByMSwgcjAgc2FtZSBhcyBuMywgbjIuIE90aGVyIHR5cGVzIG9mIG92ZXJsYXAKKyAgIGJldHdlZW4gaW5wdXRzIGFuZCBvdXRwdXRzIGFyZSBub3Qgc3VwcG9ydGVkLiAqLworI2RlZmluZSB1ZGl2X3FyXzRieTIocTEscTAsIHIxLHIwLCBuMyxuMixuMSxuMCwgZDEsZDAsIGRpMSxkaTApCQlcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgbXBfbGltYl90IF9xMywgX3EyYSwgX3EyLCBfcTEsIF9xMmMsIF9xMWMsIF9xMWQsIF9xMDsJCVwKKyAgICBtcF9saW1iX3QgX3QxLCBfdDA7CQkJCQkJCVwKKyAgICBtcF9saW1iX3QgX21hc2s7CQkJCQkJCVwKKwkJCQkJCQkJCVwKKyAgICAvKiBbcTMscTIscTEscTBdID0gW24zLG4yXSpbZGkxLGRpMF0gKyBbbjMsbjIsbjEsbjBdICsgWzAsMSwwLDBdICovCVwKKyAgICB1bXVsX3BwbW0gKF9xMixfcTEsIG4yLCBkaTEpOwkJCQkJXAorICAgIHVtdWxfcHBtbSAoX3EzLF9xMmEsIG4zLCBkaTEpOwkJCQkJXAorICAgICsrX3EyOwkvKiBfcTIgY2Fubm90IG92ZXJmbG93ICovCQkJCVwKKyAgICBhZGRfc3NhYWFhIChfcTMsX3EyLCBfcTMsX3EyLCBuMyxfcTJhKTsJCQkJXAorICAgIHVtdWxfcHBtbSAoX3EyYyxfcTFjLCBuMywgZGkwKTsJCQkJCVwKKyAgICBhZGRfc3NzYWFhYSAoX3EzLF9xMixfcTEsIF9xMixfcTEsIG4yLF9xMWMpOwkJCVwKKyAgICB1bXVsX3BwbW0gKF9xMWQsX3EwLCBuMiwgZGkwKTsJCQkJCVwKKyAgICBhZGRfc3NzYWFhYSAoX3EyYyxfcTEsX3EwLCBfcTEsX3EwLCBuMSxuMCk7IC8qIF9xMmMgY2Fubm90IG92ZXJmbG93ICovIFwKKyAgICBhZGRfc3NzYWFhYSAoX3EzLF9xMixfcTEsIF9xMixfcTEsIF9xMmMsX3ExZCk7CQkJXAorCQkJCQkJCQkJXAorICAgIHVtdWxfcHBtbSAoX3QxLF90MCwgX3EyLCBkMCk7CQkJCQlcCisgICAgX3QxICs9IF9xMiAqIGQxICsgX3EzICogZDA7CQkJCQkJXAorCQkJCQkJCQkJXAorICAgIHN1Yl9kZG1tc3MgKHIxLCByMCwgbjEsIG4wLCBfdDEsIF90MCk7CQkJCVwKKwkJCQkJCQkJCVwKKyAgICBfbWFzayA9IC0obXBfbGltYl90KSAoKHIxID49IF9xMSkgJiAoKHIxID4gX3ExKSB8IChyMCA+PSBfcTApKSk7ICAvKiAocjEscjApID49IChxMSxxMCkgKi8gIFwKKyAgICBhZGRfc3NhYWFhIChyMSwgcjAsIHIxLCByMCwgZDEgJiBfbWFzaywgZDAgJiBfbWFzayk7CQlcCisgICAgc3ViX2RkbW1zcyAoX3EzLCBfcTIsIF9xMywgX3EyLCBDTlNUX0xJTUIoMCksIC1fbWFzayk7CQlcCisJCQkJCQkJCQlcCisgICAgaWYgKFVOTElLRUxZIChyMSA+PSBkMSkpCQkJCQkJXAorICAgICAgewkJCQkJCQkJCVwKKwlpZiAocjEgPiBkMSB8fCByMCA+PSBkMCkJCQkJCVwKKwkgIHsJCQkJCQkJCVwKKwkgICAgc3ViX2RkbW1zcyAocjEsIHIwLCByMSwgcjAsIGQxLCBkMCk7CQkJXAorCSAgICBhZGRfc3NhYWFhIChfcTMsIF9xMiwgX3EzLCBfcTIsIENOU1RfTElNQigwKSwgQ05TVF9MSU1CKDEpKTtcCisJICB9CQkJCQkJCQlcCisgICAgICB9CQkJCQkJCQkJXAorICAgIChxMSkgPSBfcTM7CQkJCQkJCQlcCisgICAgKHEwKSA9IF9xMjsJCQkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworc3RhdGljIHZvaWQKK2ludmVydF80YnkyIChtcF9wdHIgZGksIG1wX2xpbWJfdCBkMSwgbXBfbGltYl90IGQwKQoreworICBtcF9saW1iX3QgdjEsIHYwLCBwMSwgdDEsIHQwLCBwMCwgbWFzazsKKyAgaW52ZXJ0X2xpbWIgKHYxLCBkMSk7CisgIHAxID0gZDEgKiB2MTsKKyAgLyogPDEsIHYxPiAqIGQxID0gPEItMSwgcDE+ICovCisgIHAxICs9IGQwOworICBpZiAocDEgPCBkMCkKKyAgICB7CisgICAgICB2MS0tOworICAgICAgbWFzayA9IC0obXBfbGltYl90KSAocDEgPj0gZDEpOworICAgICAgcDEgLT0gZDE7CisgICAgICB2MSArPSBtYXNrOworICAgICAgcDEgLT0gbWFzayAmIGQxOworICAgIH0KKyAgLyogPDEsIHYxPiAqIGQxICsgZDAgPSA8Qi0xLCBwMT4gKi8KKyAgdW11bF9wcG1tICh0MSwgcDAsIGQwLCB2MSk7CisgIHAxICs9IHQxOworICBpZiAocDEgPCB0MSkKKyAgICB7CisgICAgICBpZiAoVU5MSUtFTFkgKHAxID49IGQxKSkKKwl7CisJICBpZiAocDEgPiBkMSB8fCBwMCA+PSBkMCkKKwkgICAgeworCSAgICAgIHN1Yl9kZG1tc3MgKHAxLCBwMCwgcDEsIHAwLCBkMSwgZDApOworCSAgICAgIHYxLS07CisJICAgIH0KKwl9CisgICAgICBzdWJfZGRtbXNzIChwMSwgcDAsIHAxLCBwMCwgZDEsIGQwKTsKKyAgICAgIHYxLS07CisgICAgfQorICAvKiBOb3cgdjEgaXMgdGhlIDMvMiBpbnZlcnNlLCA8MSwgdjE+ICogPGQxLCBkMD4gPSA8Qi0xLCBwMSwgcDA+LAorICAgKiB3aXRoIDxwMSwgcDA+ICsgPGQxLCBkMD4gPj0gQl4yLgorICAgKgorICAgKiBUaGUgNC8yIGludmVyc2UgaXMgKEJeNCAtIDEpIC8gPGQxLCBkMD4gPSA8MSwgdjEsIHYwPi4gVGhlCisgICAqIHBhcnRpYWwgcmVtYWluZGVyIGFmdGVyIDwxLCB2MT4gaXMKKyAgICoKKyAgICogQl40IC0gMSAtIEIgPDEsIHYxPiA8ZDEsIGQwPiA9IDxCLTEsIEItMSwgQi0xLCBCLTE+IC0gPEItMSwgcDEsIHAwLCAwPgorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gPH5wMSwgfnAwLCBCLTE+CisgICAqLworICB1ZGl2X3FyXzNieTIgKHYwLCB0MSwgdDAsIH5wMSwgfnAwLCBNUF9MSU1CX1RfTUFYLCBkMSwgZDAsIHYxKTsKKyAgZGlbMF0gPSB2MDsKKyAgZGlbMV0gPSB2MTsKKworI2lmIFNBTklUWV9DSEVDSworICB7CisgICAgbXBfbGltYl90IHRwWzRdOworICAgIG1wX2xpbWJfdCBkcFsyXTsKKyAgICBkcFswXSA9IGQwOworICAgIGRwWzFdID0gZDE7CisgICAgbXBuX211bF9uICh0cCwgZHAsIGRpLCAyKTsKKyAgICBBU1NFUlRfQUxXQVlTIChtcG5fYWRkX24gKHRwKzIsIHRwKzIsIGRwLCAyKSA9PSAwKTsKKyAgICBBU1NFUlRfQUxXQVlTICh0cFsyXSA9PSBNUF9MSU1CX1RfTUFYKTsKKyAgICBBU1NFUlRfQUxXQVlTICh0cFszXSA9PSBNUF9MSU1CX1RfTUFYKTsKKyAgICBBU1NFUlRfQUxXQVlTIChtcG5fYWRkX24gKHRwLCB0cCwgZHAsIDIpID09IDEpOworICB9CisjZW5kaWYKK30KKworc3RhdGljIG1wX2xpbWJfdAorbXBuX2Rpdl9xcl8ybl9waTIgKG1wX3B0ciBxcCwgbXBfcHRyIHJwLCBtcF9zcmNwdHIgbnAsIG1wX3NpemVfdCBubiwKKwkJICAgbXBfbGltYl90IGQxLCBtcF9saW1iX3QgZDAsIG1wX2xpbWJfdCBkaTEsIG1wX2xpbWJfdCBkaTApCit7CisgIG1wX2xpbWJfdCBxaDsKKyAgbXBfc2l6ZV90IGk7CisgIG1wX2xpbWJfdCByMSwgcjA7CisKKyAgQVNTRVJUIChubiA+PSAyKTsKKyAgQVNTRVJUIChkMSAmIEdNUF9OVU1CX0hJR0hCSVQpOworCisgIHIxID0gbnBbbm4tMV07CisgIHIwID0gbnBbbm4tMl07CisKKyAgcWggPSAwOworICBpZiAocjEgPj0gZDEgJiYgKHIxID4gZDEgfHwgcjAgPj0gZDApKQorICAgIHsKKyNpZiBHTVBfTkFJTF9CSVRTID09IDAKKyAgICAgIHN1Yl9kZG1tc3MgKHIxLCByMCwgcjEsIHIwLCBkMSwgZDApOworI2Vsc2UKKyAgICAgIHIwID0gcjAgLSBkMDsKKyAgICAgIHIxID0gcjEgLSBkMSAtIChyMCA+PiBHTVBfTElNQl9CSVRTIC0gMSk7CisgICAgICByMCAmPSBHTVBfTlVNQl9NQVNLOworI2VuZGlmCisgICAgICBxaCA9IDE7CisgICAgfQorCisgIGZvciAoaSA9IG5uIC0gMjsgaSA+PSAyOyBpIC09IDIpCisgICAgeworICAgICAgbXBfbGltYl90IG4xLCBuMCwgcTEsIHEwOworICAgICAgbjEgPSBucFtpLTFdOworICAgICAgbjAgPSBucFtpLTJdOworICAgICAgdWRpdl9xcl80YnkyIChxMSwgcTAsIHIxLCByMCwgcjEsIHIwLCBuMSwgbjAsIGQxLCBkMCwgZGkxLCBkaTApOworICAgICAgcXBbaS0xXSA9IHExOworICAgICAgcXBbaS0yXSA9IHEwOworICAgIH0KKworICBpZiAoaSA+IDApCisgICAgeworICAgICAgbXBfbGltYl90IHE7CisgICAgICB1ZGl2X3FyXzNieTIgKHEsIHIxLCByMCwgcjEsIHIwLCBucFswXSwgZDEsIGQwLCBkaTEpOworICAgICAgcXBbMF0gPSBxOworICAgIH0KKyAgcnBbMV0gPSByMTsKKyAgcnBbMF0gPSByMDsKKworICByZXR1cm4gcWg7Cit9CisKKworLyogRGl2aWRlIG51bSB7bnAsbm59IGJ5IGRlbiB7ZHAsMn0gYW5kIHdyaXRlIHRoZSBubi0yIGxlYXN0CisgICBzaWduaWZpY2FudCBxdW90aWVudCBsaW1icyBhdCBxcCBhbmQgdGhlIDIgbG9uZyByZW1haW5kZXIgYXQgbnAuCisgICBSZXR1cm4gdGhlIG1vc3Qgc2lnbmlmaWNhbnQgbGltYiBvZiB0aGUgcXVvdGllbnQuCisKKyAgIFByZWNvbmRpdGlvbnM6CisgICAxLiBxcCBtdXN0IGVpdGhlciBub3Qgb3ZlcmxhcCB3aXRoIHRoZSBvdGhlciBvcGVyYW5kcyBhdCBhbGwsIG9yCisgICAgICBxcCA+PSBucCArIDIgbXVzdCBob2xkIHRydWUuICAoVGhpcyBtZWFucyB0aGF0IGl0J3MgcG9zc2libGUgdG8gcHV0CisgICAgICB0aGUgcXVvdGllbnQgaW4gdGhlIGhpZ2ggcGFydCBvZiB7bnAsbm59LCByaWdodCBhYm92ZSB0aGUgcmVtYWluZGVyLikKKyAgIDIuIG5uID49IDIuICAqLworCittcF9saW1iX3QKK21wbl9kaXZfcXJfMiAobXBfcHRyIHFwLCBtcF9wdHIgcnAsIG1wX3NyY3B0ciBucCwgbXBfc2l6ZV90IG5uLAorCSAgICAgIG1wX3NyY3B0ciBkcCkKK3sKKyAgbXBfbGltYl90IGQxOworICBtcF9saW1iX3QgZDA7CisgIGdtcF9waTFfdCBkaW52OworCisgIEFTU0VSVCAobm4gPj0gMik7CisgIEFTU0VSVCAoISBNUE5fT1ZFUkxBUF9QIChxcCwgbm4tMiwgbnAsIG5uKSB8fCBxcCA+PSBucCArIDIpOworICBBU1NFUlRfTVBOIChucCwgbm4pOworICBBU1NFUlRfTVBOIChkcCwgMik7CisKKyAgZDEgPSBkcFsxXTsgZDAgPSBkcFswXTsKKworICBBU1NFUlQgKGQxID4gMCk7CisKKyAgaWYgKFVOTElLRUxZIChkMSAmIEdNUF9OVU1CX0hJR0hCSVQpKQorICAgIHsKKyAgICAgIGlmIChCRUxPV19USFJFU0hPTEQgKG5uLCBESVZfUVJfMl9QSTJfVEhSRVNIT0xEKSkKKwl7CisJICBnbXBfcGkxX3QgZGludjsKKwkgIGludmVydF9waTEgKGRpbnYsIGQxLCBkMCk7CisJICByZXR1cm4gbXBuX2Rpdl9xcl8ybl9waTEgKHFwLCBycCwgbnAsIG5uLCBkMSwgZDAsIGRpbnYuaW52MzIpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBtcF9saW1iX3QgZGlbMl07CisJICBpbnZlcnRfNGJ5MiAoZGksIGQxLCBkMCk7CisJICByZXR1cm4gbXBuX2Rpdl9xcl8ybl9waTIgKHFwLCBycCwgbnAsIG5uLCBkMSwgZDAsIGRpWzFdLCBkaVswXSk7CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGludCBzaGlmdDsKKyAgICAgIGNvdW50X2xlYWRpbmdfemVyb3MgKHNoaWZ0LCBkMSk7CisgICAgICBkMSA9IChkMSA8PCBzaGlmdCkgfCAoZDAgPj4gKEdNUF9MSU1CX0JJVFMgLSBzaGlmdCkpOworICAgICAgZDAgPDw9IHNoaWZ0OworICAgICAgaW52ZXJ0X3BpMSAoZGludiwgZDEsIGQwKTsKKyAgICAgIHJldHVybiBtcG5fZGl2X3FyXzJ1X3BpMSAocXAsIHJwLCBucCwgbm4sIGQxLCBkMCwgc2hpZnQsIGRpbnYuaW52MzIpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9kaXZfcXJfMm5fcGkxLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvZGl2X3FyXzJuX3BpMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMWE4MTEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvZGl2X3FyXzJuX3BpMS5jCkBAIC0wLDAgKzEsODQgQEAKKy8qIG1wbl9kaXZfcXJfMm5fcGkxCisKKyAgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3Jiam9ybiBHcmFubHVuZCBhbmQgTmllbHMgTcO2bGxlcgorCisgICBUSElTIEZJTEUgQ09OVEFJTlMgSU5URVJOQUwgRlVOQ1RJT05TIFdJVEggTVVUQUJMRSBJTlRFUkZBQ0VTLiAgSVQgSVMgT05MWQorICAgU0FGRSBUTyBSRUFDSCBUSEVNIFRIUk9VR0ggRE9DVU1FTlRFRCBJTlRFUkZBQ0VTLiAgSU4gRkFDVCwgSVQgSVMgQUxNT1NUCisgICBHVUFSQU5URUVEIFRIQVQgVEhFWSdMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEgRlVUVVJFIEdOVSBNUCBSRUxFQVNFLgorCisKK0NvcHlyaWdodCAxOTkzLTE5OTYsIDE5OTktMjAwMiwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisjaW5jbHVkZSAibG9uZ2xvbmcuaCIKKworCisvKiAzLzIgbG9vcCwgZm9yIG5vcm1hbGl6ZWQgZGl2aXNvciAqLworbXBfbGltYl90CittcG5fZGl2X3FyXzJuX3BpMSAobXBfcHRyIHFwLCBtcF9wdHIgcnAsIG1wX3NyY3B0ciBucCwgbXBfc2l6ZV90IG5uLAorCQkgICBtcF9saW1iX3QgZDEsIG1wX2xpbWJfdCBkMCwgbXBfbGltYl90IGRpKQoreworICBtcF9saW1iX3QgcWg7CisgIG1wX3NpemVfdCBpOworICBtcF9saW1iX3QgcjEsIHIwOworCisgIEFTU0VSVCAobm4gPj0gMik7CisgIEFTU0VSVCAoZDEgJiBHTVBfTlVNQl9ISUdIQklUKTsKKworICBucCArPSBubiAtIDI7CisgIHIxID0gbnBbMV07CisgIHIwID0gbnBbMF07CisKKyAgcWggPSAwOworICBpZiAocjEgPj0gZDEgJiYgKHIxID4gZDEgfHwgcjAgPj0gZDApKQorICAgIHsKKyNpZiBHTVBfTkFJTF9CSVRTID09IDAKKyAgICAgIHN1Yl9kZG1tc3MgKHIxLCByMCwgcjEsIHIwLCBkMSwgZDApOworI2Vsc2UKKyAgICAgIHIwID0gcjAgLSBkMDsKKyAgICAgIHIxID0gcjEgLSBkMSAtIChyMCA+PiBHTVBfTElNQl9CSVRTIC0gMSk7CisgICAgICByMCAmPSBHTVBfTlVNQl9NQVNLOworI2VuZGlmCisgICAgICBxaCA9IDE7CisgICAgfQorCisgIGZvciAoaSA9IG5uIC0gMiAtIDE7IGkgPj0gMDsgaS0tKQorICAgIHsKKyAgICAgIG1wX2xpbWJfdCBuMCwgcTsKKyAgICAgIG4wID0gbnBbLTFdOworICAgICAgdWRpdl9xcl8zYnkyIChxLCByMSwgcjAsIHIxLCByMCwgbjAsIGQxLCBkMCwgZGkpOworICAgICAgbnAtLTsKKyAgICAgIHFwW2ldID0gcTsKKyAgICB9CisKKyAgcnBbMV0gPSByMTsKKyAgcnBbMF0gPSByMDsKKworICByZXR1cm4gcWg7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvZGl2X3FyXzJ1X3BpMS5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2Rpdl9xcl8ydV9waTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGU2MTdiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2Rpdl9xcl8ydV9waTEuYwpAQCAtMCwwICsxLDc2IEBACisvKiBtcG5fZGl2X3FyXzJ1X3BpMQorCisgICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgTmllbHMgTcO2bGxlcgorCisgICBUSElTIEZJTEUgQ09OVEFJTlMgSU5URVJOQUwgRlVOQ1RJT05TIFdJVEggTVVUQUJMRSBJTlRFUkZBQ0VTLiAgSVQgSVMgT05MWQorICAgU0FGRSBUTyBSRUFDSCBUSEVNIFRIUk9VR0ggRE9DVU1FTlRFRCBJTlRFUkZBQ0VTLiAgSU4gRkFDVCwgSVQgSVMgQUxNT1NUCisgICBHVUFSQU5URUVEIFRIQVQgVEhFWSdMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEgRlVUVVJFIEdOVSBNUCBSRUxFQVNFLgorCisKK0NvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKyNpbmNsdWRlICJsb25nbG9uZy5oIgorCisKKy8qIDMvMiBsb29wLCBmb3IgdW5ub3JtYWxpemVkIGRpdmlzb3IuIENhbGxlciBtdXN0IHBhc3Mgc2hpZnRlZCBkMSBhbmQKKyAgIGQwLCB3aGlsZSB7bnAsbm59IGlzIHNoaWZ0ZWQgb24gdGhlIGZseS4gKi8KK21wX2xpbWJfdAorbXBuX2Rpdl9xcl8ydV9waTEgKG1wX3B0ciBxcCwgbXBfcHRyIHJwLCBtcF9zcmNwdHIgbnAsIG1wX3NpemVfdCBubiwKKwkJICAgbXBfbGltYl90IGQxLCBtcF9saW1iX3QgZDAsIGludCBzaGlmdCwgbXBfbGltYl90IGRpKQoreworICBtcF9saW1iX3QgcWg7CisgIG1wX2xpbWJfdCByMiwgcjEsIHIwOworICBtcF9zaXplX3QgaTsKKworICBBU1NFUlQgKG5uID49IDIpOworICBBU1NFUlQgKGQxICYgR01QX05VTUJfSElHSEJJVCk7CisgIEFTU0VSVCAoc2hpZnQgPiAwKTsKKworICByMiA9IG5wW25uLTFdID4+IChHTVBfTElNQl9CSVRTIC0gc2hpZnQpOworICByMSA9IChucFtubi0xXSA8PCBzaGlmdCkgfCAobnBbbm4tMl0gPj4gKEdNUF9MSU1CX0JJVFMgLSBzaGlmdCkpOworICByMCA9IG5wW25uLTJdIDw8IHNoaWZ0OworCisgIHVkaXZfcXJfM2J5MiAocWgsIHIyLCByMSwgcjIsIHIxLCByMCwgZDEsIGQwLCBkaSk7CisKKyAgZm9yIChpID0gbm4gLSAyIC0gMTsgaSA+PSAwOyBpLS0pCisgICAgeworICAgICAgbXBfbGltYl90IHE7CisgICAgICByMCA9IG5wW2ldOworICAgICAgcjEgfD0gcjAgPj4gKEdNUF9MSU1CX0JJVFMgLSBzaGlmdCk7CisgICAgICByMCA8PD0gc2hpZnQ7CisgICAgICB1ZGl2X3FyXzNieTIgKHEsIHIyLCByMSwgcjIsIHIxLCByMCwgZDEsIGQwLCBkaSk7CisgICAgICBxcFtpXSA9IHE7CisgICAgfQorCisgIHJwWzBdID0gKHIxID4+IHNoaWZ0KSB8IChyMiA8PCAoR01QX0xJTUJfQklUUyAtIHNoaWZ0KSk7CisgIHJwWzFdID0gcjIgPj4gc2hpZnQ7CisKKyAgcmV0dXJuIHFoOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2RpdmVfMS5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2RpdmVfMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NmY1YjkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvZGl2ZV8xLmMKQEAgLTAsMCArMSwxNDYgQEAKKy8qIG1wbl9kaXZleGFjdF8xIC0tIG1wbiBieSBsaW1iIGV4YWN0IGRpdmlzaW9uLgorCisgICBUSEUgRlVOQ1RJT05TIElOIFRISVMgRklMRSBBUkUgRk9SIElOVEVSTkFMIFVTRSBPTkxZLiAgVEhFWSdSRSBBTE1PU1QKKyAgIENFUlRBSU4gVE8gQkUgU1VCSkVDVCBUTyBJTkNPTVBBVElCTEUgQ0hBTkdFUyBPUiBESVNBUFBFQVIgQ09NUExFVEVMWSBJTgorICAgRlVUVVJFIEdOVSBNUCBSRUxFQVNFUy4KKworQ29weXJpZ2h0IDIwMDAtMjAwMywgMjAwNSwgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisjaW5jbHVkZSAibG9uZ2xvbmcuaCIKKworCisKKy8qIERpdmlkZSBhPXtzcmMsc2l6ZX0gYnkgZD1kaXZpc29yIGFuZCBzdG9yZSB0aGUgcXVvdGllbnQgaW4gcT17ZHN0LHNpemV9LgorICAgcSB3aWxsIG9ubHkgYmUgY29ycmVjdCBpZiBkIGRpdmlkZXMgYSBleGFjdGx5LgorCisgICBBIHNlcGFyYXRlIGxvb3AgaXMgdXNlZCBmb3Igc2hpZnQ9PTAgYmVjYXVzZSBuPDxHTVBfTElNQl9CSVRTIGRvZXNuJ3QKKyAgIGdpdmUgemVybyBvbiBhbGwgQ1BVcyAoZm9yIGluc3RhbmNlIGl0IGRvZXNuJ3Qgb24gdGhlIHg4NnMpLiAgVGhpcworICAgc2VwYXJhdGUgbG9vcCBtaWdodCBydW4gZmFzdGVyIHRvbywgaGVscGluZyBvZGQgZGl2aXNvcnMuCisKKyAgIFBvc3NpYmlsaXRpZXM6CisKKyAgIG1wbl9kaXZleGFjdF8xYyBjb3VsZCBiZSBjcmVhdGVkLCBhY2NlcHRpbmcgYW5kIHJldHVybmluZyBjLiAgVGhpcyB3b3VsZAorICAgbGV0IGEgbG9uZyBjYWxjdWxhdGlvbiBiZSBkb25lIHBpZWNlIGJ5IHBpZWNlLiAgQ3VycmVudGx5IHRoZXJlJ3Mgbm8KKyAgIHBhcnRpY3VsYXIgbmVlZCBmb3IgdGhhdCwgYW5kIG5vdCByZXR1cm5pbmcgYyBtZWFucyB0aGF0IGEgZmluYWwgdW11bCBjYW4KKyAgIGJlIHNraXBwZWQuCisKKyAgIEFub3RoZXIgdXNlIGZvciByZXR1cm5pbmcgYyB3b3VsZCBiZSBsZXR0aW5nIHRoZSBjYWxsZXIga25vdyB3aGV0aGVyIHRoZQorICAgZGl2aXNpb24gd2FzIGluIGZhY3QgZXhhY3QuICBJdCB3b3VsZCB3b3JrIGp1c3QgdG8gcmV0dXJuIHRoZSBjYXJyeSBiaXQKKyAgICJjPShsPnMpIiBhbmQgbGV0IHRoZSBjYWxsZXIgZG8gYSBmaW5hbCB1bXVsIGlmIGludGVyZXN0ZWQuCisKKyAgIFdoZW4gdGhlIGRpdmlzb3IgaXMgZXZlbiwgdGhlIGZhY3RvcnMgb2YgdHdvIGNvdWxkIGJlIGhhbmRsZWQgd2l0aCBhCisgICBzZXBhcmF0ZSBtcG5fcnNoaWZ0LCBpbnN0ZWFkIG9mIHNoaWZ0aW5nIG9uIHRoZSBmbHkuICBUaGF0IG1pZ2h0IGJlCisgICBmYXN0ZXIgb24gc29tZSBDUFVzIGFuZCB3b3VsZCBtZWFuIGp1c3QgdGhlIHNoaWZ0PT0wIHN0eWxlIGxvb3Agd291bGQgYmUKKyAgIG5lZWRlZC4KKworICAgSWYgbjw8R01QX0xJTUJfQklUUyBnaXZlcyB6ZXJvIG9uIGEgcGFydGljdWxhciBDUFUgdGhlbiB0aGUgc2VwYXJhdGUKKyAgIHNoaWZ0PT0wIGxvb3AgaXMgdW5uZWNlc3NhcnksIGFuZCBjb3VsZCBiZSBlbGltaW5hdGVkIGlmIHRoZXJlJ3Mgbm8gZ3JlYXQKKyAgIHNwZWVkIGRpZmZlcmVuY2UuCisKKyAgIEl0J3Mgbm90IGNsZWFyIHdoZXRoZXIgIi8iIGlzIHRoZSBiZXN0IHdheSB0byBoYW5kbGUgc2l6ZT09MS4gIEFscGhhIGdjYworICAgMi45NSBmb3IgaW5zdGFuY2UgaGFzIGEgcG9vciAiLyIgYW5kIG1pZ2h0IHByZWZlciB0aGUgbW9kdWxhciBtZXRob2QuCisgICBQZXJoYXBzIGEgdHVuZWQgcGFyYW1ldGVyIHNob3VsZCBjb250cm9sIHRoaXMuCisKKyAgIElmIHNyY1tzaXplLTFdIDwgZGl2aXNvciB0aGVuIGRzdFtzaXplLTFdIHdpbGwgYmUgemVybywgYW5kIG9uZSBkaXZpZGUKKyAgIHN0ZXAgY291bGQgYmUgc2tpcHBlZC4gIEEgdGVzdCBhdCBsYXN0IHN0ZXAgZm9yIHM8ZGl2aXNvciAob3IgbHMgaW4gdGhlCisgICBldmVuIGNhc2UpIG1pZ2h0IGJlIGEgZ29vZCB3YXkgdG8gZG8gdGhhdC4gIEJ1dCBpZiB0aGlzIGNvZGUgaXMgb2Z0ZW4KKyAgIHVzZWQgd2l0aCBzbWFsbCBkaXZpc29ycyB0aGVuIGl0IG1pZ2h0IG5vdCBiZSB3b3J0aCBib3RoZXJpbmcgICovCisKK3ZvaWQKK21wbl9kaXZleGFjdF8xIChtcF9wdHIgZHN0LCBtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSwgbXBfbGltYl90IGRpdmlzb3IpCit7CisgIG1wX3NpemVfdCAgaTsKKyAgbXBfbGltYl90ICBjLCBoLCBsLCBscywgcywgc19uZXh0LCBpbnZlcnNlLCBkdW1teTsKKyAgdW5zaWduZWQgICBzaGlmdDsKKworICBBU1NFUlQgKHNpemUgPj0gMSk7CisgIEFTU0VSVCAoZGl2aXNvciAhPSAwKTsKKyAgQVNTRVJUIChNUE5fU0FNRV9PUl9TRVBBUkFURV9QIChkc3QsIHNyYywgc2l6ZSkpOworICBBU1NFUlRfTVBOIChzcmMsIHNpemUpOworICBBU1NFUlRfTElNQiAoZGl2aXNvcik7CisKKyAgaWYgKChkaXZpc29yICYgMSkgPT0gMCkKKyAgICB7CisgICAgICBjb3VudF90cmFpbGluZ196ZXJvcyAoc2hpZnQsIGRpdmlzb3IpOworICAgICAgZGl2aXNvciA+Pj0gc2hpZnQ7CisgICAgfQorICBlbHNlCisgICAgc2hpZnQgPSAwOworCisgIGJpbnZlcnRfbGltYiAoaW52ZXJzZSwgZGl2aXNvcik7CisgIGRpdmlzb3IgPDw9IEdNUF9OQUlMX0JJVFM7CisKKyAgaWYgKHNoaWZ0ICE9IDApCisgICAgeworICAgICAgYyA9IDA7CisKKyAgICAgIHMgPSBzcmNbMF07CisKKyAgICAgIGZvciAoaSA9IDE7IGkgPCBzaXplOyBpKyspCisJeworCSAgc19uZXh0ID0gc3JjW2ldOworCSAgbHMgPSAoKHMgPj4gc2hpZnQpIHwgKHNfbmV4dCA8PCAoR01QX05VTUJfQklUUy1zaGlmdCkpKSAmIEdNUF9OVU1CX01BU0s7CisJICBzID0gc19uZXh0OworCisJICBTVUJDX0xJTUIgKGMsIGwsIGxzLCBjKTsKKworCSAgbCA9IChsICogaW52ZXJzZSkgJiBHTVBfTlVNQl9NQVNLOworCSAgZHN0W2kgLSAxXSA9IGw7CisKKwkgIHVtdWxfcHBtbSAoaCwgZHVtbXksIGwsIGRpdmlzb3IpOworCSAgYyArPSBoOworCX0KKworICAgICAgbHMgPSBzID4+IHNoaWZ0OworICAgICAgbCA9IGxzIC0gYzsKKyAgICAgIGwgPSAobCAqIGludmVyc2UpICYgR01QX05VTUJfTUFTSzsKKyAgICAgIGRzdFtzaXplIC0gMV0gPSBsOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHMgPSBzcmNbMF07CisKKyAgICAgIGwgPSAocyAqIGludmVyc2UpICYgR01QX05VTUJfTUFTSzsKKyAgICAgIGRzdFswXSA9IGw7CisgICAgICBjID0gMDsKKworICAgICAgZm9yIChpID0gMTsgaSA8IHNpemU7IGkrKykKKwl7CisJICB1bXVsX3BwbW0gKGgsIGR1bW15LCBsLCBkaXZpc29yKTsKKwkgIGMgKz0gaDsKKworCSAgcyA9IHNyY1tpXTsKKwkgIFNVQkNfTElNQiAoYywgbCwgcywgYyk7CisKKwkgIGwgPSAobCAqIGludmVyc2UpICYgR01QX05VTUJfTUFTSzsKKwkgIGRzdFtpXSA9IGw7CisJfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9kaXZlYnkzLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvZGl2ZWJ5My5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZWUwYmMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvZGl2ZWJ5My5jCkBAIC0wLDAgKzEsMTczIEBACisvKiBtcG5fZGl2ZXhhY3RfYnkzYyAtLSBtcG4gZXhhY3QgZGl2aXNpb24gYnkgMy4KKworQ29weXJpZ2h0IDIwMDAtMjAwMywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisKKyNpZiBESVZFWEFDVF9CWTNfTUVUSE9EID09IDAKKworbXBfbGltYl90CittcG5fZGl2ZXhhY3RfYnkzYyAobXBfcHRyIHJwLCBtcF9zcmNwdHIgdXAsIG1wX3NpemVfdCB1biwgbXBfbGltYl90IGMpCit7CisgIG1wX2xpbWJfdCByOworICByID0gbXBuX2JkaXZfZGJtMWMgKHJwLCB1cCwgdW4sIEdNUF9OVU1CX01BU0sgLyAzLCBHTVBfTlVNQl9NQVNLIC8gMyAqIGMpOworCisgIC8qIFBvc3NpYmxlIGJkaXZfZGJtMSByZXR1cm4gdmFsdWVzIGFyZSBDICogKEdNUF9OVU1CX01BU0sgLyAzKSwgMCA8PSBDIDwgMy4KKyAgICAgV2Ugd2FudCB0byByZXR1cm4gQy4gIFdlIGNvbXB1dGUgdGhlIHJlbWFpbmRlciBtb2QgNCBhbmQgbm90aWNlIHRoYXQgdGhlCisgICAgIGludmVyc2Ugb2YgKDJeKDJrKS0xKS8zIG1vZCA0IGlzIDEuICAqLworICByZXR1cm4gciAmIDM7Cit9CisKKyNlbmRpZgorCisjaWYgRElWRVhBQ1RfQlkzX01FVEhPRCA9PSAxCisKKy8qIFRoZSBhbGdvcml0aG0gaGVyZSBpcyBiYXNpY2FsbHkgdGhlIHNhbWUgYXMgbXBuX2RpdmV4YWN0XzEsIGFzIGRlc2NyaWJlZAorICAgaW4gdGhlIG1hbnVhbC4gIE5hbWVseSBhdCBlYWNoIHN0ZXAgcSA9IChzcmNbaV0tYykqaW52ZXJzZSwgYW5kIG5ldyBjID0KKyAgIGJvcnJvdyhzcmNbaV0tYykgKyBoaWdoKGRpdmlzb3IqcSkuICBCdXQgYmVjYXVzZSB0aGUgZGl2aXNvciBpcyBqdXN0IDMsCisgICBoaWdoKGRpdmlzb3IqcSkgY2FuIGJlIGRldGVybWluZWQgd2l0aCB0d28gY29tcGFyaXNvbnMgaW5zdGVhZCBvZiBhCisgICBtdWx0aXBseS4KKworICAgVGhlICJjICs9IC4uLiJzIGFkZCB0aGUgaGlnaCBsaW1iIG9mIDMqbCB0byBjLiAgVGhhdCBoaWdoIGxpbWIgd2lsbCBiZSAwLAorICAgMSBvciAyLiAgRG9pbmcgdHdvIHNlcGFyYXRlICIrPSJzIHNlZW1zIHRvIGdpdmUgYmV0dGVyIGNvZGUgb24gZ2NjIChhcyBvZgorICAgMi45NS4yIGF0IGxlYXN0KS4KKworICAgSXQgd2lsbCBiZSBub3RlZCB0aGF0IHRoZSBuZXcgYyBpcyBmb3JtZWQgYnkgYWRkaW5nIHRocmVlIHZhbHVlcyBlYWNoIDAKKyAgIG9yIDEuICBCdXQgdGhlIHRvdGFsIGlzIG9ubHkgMCwgMSBvciAyLiAgV2hlbiB0aGUgc3VidHJhY3Rpb24gc3JjW2ldLWMKKyAgIGNhdXNlcyBhIGJvcnJvdywgdGhhdCBsZWF2ZXMgYSBsaW1iIHZhbHVlIG9mIGVpdGhlciAweEZGLi4uRkYgb3IKKyAgIDB4RkYuLi5GRS4gIFRoZSBtdWx0aXBseSBieSBNT0RMSU1CX0lOVkVSU0VfMyBnaXZlcyAweDU1Li4uNTUgb3IKKyAgIDB4QUEuLi5BQSByZXNwZWN0aXZlbHksIGFuZCBpbiB0aG9zZSBjYXNlcyBoaWdoKDMqcSkgaXMgb25seSAwIG9yIDEKKyAgIHJlc3BlY3RpdmVseSwgaGVuY2UgYSB0b3RhbCBvZiBubyBtb3JlIHRoYW4gMi4KKworICAgQWx0ZXJuYXRpdmVzOgorCisgICBUaGlzIGltcGxlbWVudGF0aW9uIGhhcyBlYWNoIG11bHRpcGx5IG9uIHRoZSBkZXBlbmRlbnQgY2hhaW4sIGR1ZSB0bworICAgImw9cy1jIi4gIFNlZSBiZWxvdyBmb3IgYWx0ZXJuYXRpdmUgY29kZSB3aGljaCBhdm9pZHMgdGhhdC4gICovCisKK21wX2xpbWJfdAorbXBuX2RpdmV4YWN0X2J5M2MgKG1wX3B0ciByZXN0cmljdCBycCwgbXBfc3JjcHRyIHJlc3RyaWN0IHVwLCBtcF9zaXplX3QgdW4sIG1wX2xpbWJfdCBjKQoreworICBtcF9saW1iX3QgIGwsIHEsIHM7CisgIG1wX3NpemVfdCAgaTsKKworICBBU1NFUlQgKHVuID49IDEpOworICBBU1NFUlQgKGMgPT0gMCB8fCBjID09IDEgfHwgYyA9PSAyKTsKKyAgQVNTRVJUIChNUE5fU0FNRV9PUl9TRVBBUkFURV9QIChycCwgdXAsIHVuKSk7CisKKyAgaSA9IDA7CisgIGRvCisgICAgeworICAgICAgcyA9IHVwW2ldOworICAgICAgU1VCQ19MSU1CIChjLCBsLCBzLCBjKTsKKworICAgICAgcSA9IChsICogTU9ETElNQl9JTlZFUlNFXzMpICYgR01QX05VTUJfTUFTSzsKKyAgICAgIHJwW2ldID0gcTsKKworICAgICAgYyArPSAocSA+PSBHTVBfTlVNQl9DRUlMX01BWF9ESVYzKTsKKyAgICAgIGMgKz0gKHEgPj0gR01QX05VTUJfQ0VJTF8yTUFYX0RJVjMpOworICAgIH0KKyAgd2hpbGUgKCsraSA8IHVuKTsKKworICBBU1NFUlQgKGMgPT0gMCB8fCBjID09IDEgfHwgYyA9PSAyKTsKKyAgcmV0dXJuIGM7Cit9CisKKworI2VuZGlmCisKKyNpZiBESVZFWEFDVF9CWTNfTUVUSE9EID09IDIKKworLyogVGhlIGZvbGxvd2luZyBhbHRlcm5hdGl2ZSBjb2RlIHJlLWFycmFuZ2VzIHRoZSBxdW90aWVudCBjYWxjdWxhdGlvbiBmcm9tCisgICAoc3JjW2ldLWMpKmludmVyc2UgdG8gaW5zdGVhZAorCisgICAgICAgcSA9IHNyY1tpXSppbnZlcnNlIC0gYyppbnZlcnNlCisKKyAgIHRoZXJlYnkgYWxsb3dpbmcgc3JjW2ldKmludmVyc2UgdG8gYmUgc2NoZWR1bGVkIGJhY2sgYXMgZmFyIGFzIGRlc2lyZWQsCisgICBtYWtpbmcgZnVsbCB1c2Ugb2YgbXVsdGlwbGllciB0aHJvdWdocHV0IGFuZCBsZWF2aW5nIGp1c3Qgc29tZSBjYXJyeQorICAgaGFuZGluZyBvbiB0aGUgZGVwZW5kZW50IGNoYWluLgorCisgICBUaGUgY2FycnkgaGFuZGxpbmcgY29uc2lzdHMgb2YgZGV0ZXJtaW5pbmcgdGhlIGMgZm9yIHRoZSBuZXh0IGl0ZXJhdGlvbi4KKyAgIFRoaXMgaXMgdGhlIHNhbWUgYXMgZGVzY3JpYmVkIGFib3ZlLCBuYW1lbHkgbG9vayBmb3IgYW55IGJvcnJvdyBmcm9tCisgICBzcmNbaV0tYywgYW5kIGF0IHRoZSBoaWdoIG9mIDMqcS4KKworICAgaGlnaCgzKnEpIGlzIGRvbmUgd2l0aCB0d28gY29tcGFyaXNvbnMgYXMgYWJvdmUgKGluIGMyIGFuZCBjMykuICBUaGUKKyAgIGJvcnJvdyBmcm9tIHNyY1tpXS1jIGlzIGluY29ycG9yYXRlZCBpbnRvIHRob3NlIGJ5IG5vdGluZyB0aGF0IGlmIHRoZXJlJ3MKKyAgIGEgY2FycnkgdGhlbiB0aGVuIHdlIGhhdmUgc3JjW2ldLWMgPT0gMHhGRi4uRkYgb3IgMHhGRi4uRkUsIGluIHR1cm4KKyAgIGdpdmluZyBxID0gMHg1NS4uNTUgb3IgMHhBQS4uQUEuICBBZGRpbmcgMSB0byBlaXRoZXIgb2YgdGhvc2UgcSB2YWx1ZXMgaXMKKyAgIGVub3VnaCB0byBtYWtlIGhpZ2goMypxKSBjb21lIG91dCAxIGJpZ2dlciwgYXMgcmVxdWlyZWQuCisKKyAgIGwgPSAtYyppbnZlcnNlIGlzIGNhbGN1bGF0ZWQgYXQgdGhlIHNhbWUgdGltZSBhcyBjLCBzaW5jZSBmb3IgbW9zdCBjaGlwcworICAgaXQgY2FuIGJlIG1vcmUgY29udmVuaWVudGx5IGRlcml2ZWQgZnJvbSBzZXBhcmF0ZSBjMS9jMi9jMyB2YWx1ZXMgdGhhbgorICAgZnJvbSBhIGNvbWJpbmVkIGMgZXF1YWwgdG8gMCwgMSBvciAyLgorCisgICBUaGUgbmV0IGVmZmVjdCBpcyB0aGF0IHdpdGggZ29vZCBwaXBlbGluaW5nIHRoaXMgbG9vcCBzaG91bGQgYmUgYWJsZSB0bworICAgcnVuIGF0IHBlcmhhcHMgNCBjeWNsZXMvbGltYiwgZGVwZW5kaW5nIG9uIGF2YWlsYWJsZSBleGVjdXRlIHJlc291cmNlcworICAgZXRjLgorCisgICBVc2FnZToKKworICAgVGhpcyBjb2RlIGlzIG5vdCB1c2VkIGJ5IGRlZmF1bHQsIHNpbmNlIHdlIHJlYWxseSBjYW4ndCByZWx5IG9uIHRoZQorICAgY29tcGlsZXIgZ2VuZXJhdGluZyBhIGdvb2Qgc29mdHdhcmUgcGlwZWxpbmUsIG5vciBvbiBzdWNoIGFuIGFwcHJvYWNoCisgICBldmVuIGJlaW5nIHdvcnRod2hpbGUgb24gYWxsIENQVXMuCisKKyAgIEl0YW5pdW0gaXMgb25lIGNoaXAgd2hlcmUgdGhpcyBhbGdvcml0aG0gaGVscHMgdGhvdWdoLCBzZWUKKyAgIG1wbi9pYTY0L2RpdmVieTMuYXNtLiAgKi8KKworbXBfbGltYl90CittcG5fZGl2ZXhhY3RfYnkzYyAobXBfcHRyIHJlc3RyaWN0IHJwLCBtcF9zcmNwdHIgcmVzdHJpY3QgdXAsIG1wX3NpemVfdCB1biwgbXBfbGltYl90IGN5KQoreworICBtcF9saW1iX3QgIHMsIHNtLCBjbCwgcSwgcXgsIGMyLCBjMzsKKyAgbXBfc2l6ZV90ICBpOworCisgIEFTU0VSVCAodW4gPj0gMSk7CisgIEFTU0VSVCAoY3kgPT0gMCB8fCBjeSA9PSAxIHx8IGN5ID09IDIpOworICBBU1NFUlQgKE1QTl9TQU1FX09SX1NFUEFSQVRFX1AgKHJwLCB1cCwgdW4pKTsKKworICBjbCA9IGN5ID09IDAgPyAwIDogY3kgPT0gMSA/IC1NT0RMSU1CX0lOVkVSU0VfMyA6IC0yKk1PRExJTUJfSU5WRVJTRV8zOworCisgIGZvciAoaSA9IDA7IGkgPCB1bjsgaSsrKQorICAgIHsKKyAgICAgIHMgPSB1cFtpXTsKKyAgICAgIHNtID0gKHMgKiBNT0RMSU1CX0lOVkVSU0VfMykgJiBHTVBfTlVNQl9NQVNLOworCisgICAgICBxID0gKGNsICsgc20pICYgR01QX05VTUJfTUFTSzsKKyAgICAgIHJwW2ldID0gcTsKKyAgICAgIHF4ID0gcSArIChzIDwgY3kpOworCisgICAgICBjMiA9IHF4ID49IEdNUF9OVU1CX0NFSUxfTUFYX0RJVjM7CisgICAgICBjMyA9IHF4ID49IEdNUF9OVU1CX0NFSUxfMk1BWF9ESVYzIDsKKworICAgICAgY3kgPSBjMiArIGMzOworICAgICAgY2wgPSAoLWMyICYgLU1PRExJTUJfSU5WRVJTRV8zKSArICgtYzMgJiAtTU9ETElNQl9JTlZFUlNFXzMpOworICAgIH0KKworICByZXR1cm4gY3k7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2RpdmV4YWN0LmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvZGl2ZXhhY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzQxN2RmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2RpdmV4YWN0LmMKQEAgLTAsMCArMSwyOTYgQEAKKy8qIG1wbl9kaXZleGFjdChxcCxucCxubixkcCxkbix0cCkgLS0gRGl2aWRlIE4gPSB7bnAsbm59IGJ5IEQgPSB7ZHAsZG59IHN0b3JpbmcKKyAgIHRoZSByZXN1bHQgaW4gUSA9IHtxcCxubi1kbisxfSBleHBlY3Rpbmcgbm8gcmVtYWluZGVyLiAgT3ZlcmxhcCBhbGxvd2VkCisgICBiZXR3ZWVuIFEgYW5kIE47IGFsbCBvdGhlciBvdmVybGFwIGRpc2FsbG93ZWQuCisKKyAgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3Jiam9ybiBHcmFubHVuZC4KKworICAgVEhFIEZVTkNUSU9OUyBJTiBUSElTIEZJTEUgQVJFIElOVEVSTkFMIFdJVEggTVVUQUJMRSBJTlRFUkZBQ0VTLiAgSVQgSVMgT05MWQorICAgU0FGRSBUTyBSRUFDSCBUSEVNIFRIUk9VR0ggRE9DVU1FTlRFRCBJTlRFUkZBQ0VTLiAgSU4gRkFDVCwgSVQgSVMgQUxNT1NUCisgICBHVUFSQU5URUVEIFRIQVQgVEhFWSBXSUxMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR01QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAyMDA2LCAyMDA3LCAyMDA5LCAyMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorI2luY2x1ZGUgImxvbmdsb25nLmgiCisKKyNpZiAxCit2b2lkCittcG5fZGl2ZXhhY3QgKG1wX3B0ciBxcCwKKwkgICAgICBtcF9zcmNwdHIgbnAsIG1wX3NpemVfdCBubiwKKwkgICAgICBtcF9zcmNwdHIgZHAsIG1wX3NpemVfdCBkbikKK3sKKyAgdW5zaWduZWQgc2hpZnQ7CisgIG1wX3NpemVfdCBxbjsKKyAgbXBfcHRyIHRwOworICBUTVBfREVDTDsKKworICBBU1NFUlQgKGRuID4gMCk7CisgIEFTU0VSVCAobm4gPj0gZG4pOworICBBU1NFUlQgKGRwW2RuLTFdID4gMCk7CisKKyAgd2hpbGUgKGRwWzBdID09IDApCisgICAgeworICAgICAgQVNTRVJUIChucFswXSA9PSAwKTsKKyAgICAgIGRwKys7CisgICAgICBucCsrOworICAgICAgZG4tLTsKKyAgICAgIG5uLS07CisgICAgfQorCisgIGlmIChkbiA9PSAxKQorICAgIHsKKyAgICAgIE1QTl9ESVZSRU1fT1JfRElWRVhBQ1RfMSAocXAsIG5wLCBubiwgZHBbMF0pOworICAgICAgcmV0dXJuOworICAgIH0KKworICBUTVBfTUFSSzsKKworICBxbiA9IG5uICsgMSAtIGRuOworICBjb3VudF90cmFpbGluZ196ZXJvcyAoc2hpZnQsIGRwWzBdKTsKKworICBpZiAoc2hpZnQgPiAwKQorICAgIHsKKyAgICAgIG1wX3B0ciB3cDsKKyAgICAgIG1wX3NpemVfdCBzczsKKyAgICAgIHNzID0gKGRuID4gcW4pID8gcW4gKyAxIDogZG47CisKKyAgICAgIHRwID0gVE1QX0FMTE9DX0xJTUJTIChzcyk7CisgICAgICBtcG5fcnNoaWZ0ICh0cCwgZHAsIHNzLCBzaGlmdCk7CisgICAgICBkcCA9IHRwOworCisgICAgICAvKiBTaW5jZSB3ZSBoYXZlIGV4Y2x1ZGVkIGRuID09IDEsIHdlIGhhdmUgbm4gPiBxbiwgYW5kIHdlIG5lZWQKKwkgdG8gc2hpZnQgb25lIGxpbWIgYmV5b25kIHFuLiAqLworICAgICAgd3AgPSBUTVBfQUxMT0NfTElNQlMgKHFuICsgMSk7CisgICAgICBtcG5fcnNoaWZ0ICh3cCwgbnAsIHFuICsgMSwgc2hpZnQpOworICAgICAgbnAgPSB3cDsKKyAgICB9CisKKyAgaWYgKGRuID4gcW4pCisgICAgZG4gPSBxbjsKKworICB0cCA9IFRNUF9BTExPQ19MSU1CUyAobXBuX2JkaXZfcV9pdGNoIChxbiwgZG4pKTsKKyAgbXBuX2JkaXZfcSAocXAsIG5wLCBxbiwgZHAsIGRuLCB0cCk7CisgIFRNUF9GUkVFOworCisgIC8qIFNpbmNlIGJkaXZfcSBjb21wdXRlcyAtTi9EIChtb2QgQl57cW59KSwgd2UgbXVzdCBuZWdhdGUgbm93LiAqLworICBtcG5fbmVnIChxcCwgcXAsIHFuKTsKK30KKworI2Vsc2UKKworLyogV2UgdXNlIHRoZSBKZWJlbGVhbidzIGJpZGlyZWN0aW9uYWwgZXhhY3QgZGl2aXNpb24gYWxnb3JpdGhtLiAgVGhpcyBpcworICAgc29tZXdoYXQgbmFpdmVseSBpbXBsZW1lbnRlZCwgd2l0aCBlcXVhbCBxdW90aWVudCBwYXJ0cyBkb25lIGJ5IDItYWRpYworICAgZGl2aXNpb24gYW5kIHRydW5jYXRpbmcgZGl2aXNpb24uICBTaW5jZSAyLWFkaWMgZGl2aXNpb24gaXMgZmFzdGVyLCBpdAorICAgc2hvdWxkIGJlIHVzZWQgZm9yIGEgbGFyZ2VyIGNodW5rLgorCisgICBUaGlzIGNvZGUgaXMgaG9ycmVuZG91c2x5IHVnbHksIGluIGFsbCBzb3J0cyBvZiB3YXlzLgorCisgICAqIEl0IHdhcyBoYWNrZWQgd2l0aG91dCBtdWNoIGNhcmUgb3IgdGhvdWdodCwgYnV0IHdpdGggYSB0ZXN0aW5nIHByb2dyYW0uCisgICAqIEl0IGhhbmRsZXMgc2NyYXRjaCBzcGFjZSBmcml2b2xvdXNseSwgYW5kIGZ1cnRoZXJtb3JlIHRoZSBpdGNoIGZ1bmN0aW9uCisgICAgIGlzIGJyb2tlbi4KKyAgICogRG9lc24ndCBwcm92aWRlIGFueSBtZWFzdXJlcyB0byBkZWFsIHdpdGggbXVfZGl2YXBwcl9xJ3MgKzMgZXJyb3IuICBXZQorICAgICBoYXZlIHlldCB0byBwcm92b2tlIGFuIGVycm9yIGR1ZSB0byB0aGlzLCB0aG91Z2guCisgICAqIEFsZ29yaXRobSBzZWxlY3Rpb24gbGVhdmVzIGEgbG90IHRvIGJlIGRlc2lyZWQuICBJbiBwYXJ0aWN1bGFyLCB0aGUgY2hvaWNlCisgICAgIGJldHdlZW4gREMgYW5kIE1VIGlzbid0IGEgcG9pbnQsIGJ1dCB3ZSB0cmVhdCBpdCBsaWtlIG9uZS4KKyAgICogSXQgbWFrZXMgdGhlIG1zYiBwYXJ0IDEgb3IgMiBsaW1icyBsYXJnZXIgdGhhbiB0aGUgbHNiIHBhcnQsIGluIHNwaXRlIG9mCisgICAgIHRoYXQgdGhlIGxhdHRlciBpcyBmYXN0ZXIuICBXZSBzaG91bGQgYXQgbGVhc3QgcmV2ZXJzZSB0aGlzLCBidXQgcGVyaGFwcworICAgICB3ZSBzaG91bGQgbWFrZSB0aGUgbHNiIHBhcnQgY29uc2lkZXJhYmx5IGxhcmdlci4gIChIb3cgZG8gd2UgdHVuZSB0aGlzPykKKyovCisKK21wX3NpemVfdAorbXBuX2RpdmV4YWN0X2l0Y2ggKG1wX3NpemVfdCBubiwgbXBfc2l6ZV90IGRuKQoreworICByZXR1cm4gbm4gKyBkbjsJCS8qIEZJWE1FIHRoaXMgaXMgbm90IHJpZ2h0ICovCit9CisKK3ZvaWQKK21wbl9kaXZleGFjdCAobXBfcHRyIHFwLAorCSAgICAgIG1wX3NyY3B0ciBucCwgbXBfc2l6ZV90IG5uLAorCSAgICAgIG1wX3NyY3B0ciBkcCwgbXBfc2l6ZV90IGRuLAorCSAgICAgIG1wX3B0ciBzY3JhdGNoKQoreworICBtcF9zaXplX3QgcW47CisgIG1wX3NpemVfdCBubjAsIHFuMDsKKyAgbXBfc2l6ZV90IG5uMSwgcW4xOworICBtcF9wdHIgdHA7CisgIG1wX2xpbWJfdCBxbWw7CisgIG1wX2xpbWJfdCBxaDsKKyAgaW50IGNudDsKKyAgbXBfcHRyIHhkcDsKKyAgbXBfbGltYl90IGRpOworICBtcF9saW1iX3QgY3k7CisgIGdtcF9waTFfdCBkaW52OworICBUTVBfREVDTDsKKworICBUTVBfTUFSSzsKKworICBxbiA9IG5uIC0gZG4gKyAxOworCisgIC8qIEZvciBzbWFsbCBkaXZpc29ycywgYW5kIHNtYWxsIHF1b3RpZW50cywgZG9uJ3QgdXNlIEplYmVsZWFuJ3MgYWxnb3JpdGhtLiAqLworICBpZiAoZG4gPCBESVZFWEFDVF9KRUJfVEhSRVNIT0xEIHx8IHFuIDwgRElWRVhBQ1RfSkVCX1RIUkVTSE9MRCkKKyAgICB7CisgICAgICB0cCA9IHNjcmF0Y2g7CisgICAgICBNUE5fQ09QWSAodHAsIG5wLCBxbik7CisgICAgICBiaW52ZXJ0X2xpbWIgKGRpLCBkcFswXSk7ICBkaSA9IC1kaTsKKyAgICAgIGRuID0gTUlOIChkbiwgcW4pOworICAgICAgbXBuX3NicGkxX2JkaXZfcSAocXAsIHRwLCBxbiwgZHAsIGRuLCBkaSk7CisgICAgICBUTVBfRlJFRTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgcW4wID0gKChubiAtIGRuKSA+PiAxKSArIDE7CS8qIGxvdyBxdW90aWVudCBzaXplICovCisKKyAgLyogSWYgcXVvdGllbnQgaXMgbXVjaCBsYXJnZXIgdGhhbiB0aGUgZGl2aXNvciwgdGhlIGJpZGlyZWN0aW9uYWwgYWxnb3JpdGhtCisgICAgIGRvZXMgbm90IHdvcmsgYXMgY3VycmVudGx5IGltcGxlbWVudGVkLiAgRmFsbCBiYWNrIHRvIHBsYWluIGJkaXYuICAqLworICBpZiAocW4wID4gZG4pCisgICAgeworICAgICAgaWYgKEJFTE9XX1RIUkVTSE9MRCAoZG4sIERDX0JESVZfUV9USFJFU0hPTEQpKQorCXsKKwkgIHRwID0gc2NyYXRjaDsKKwkgIE1QTl9DT1BZICh0cCwgbnAsIHFuKTsKKwkgIGJpbnZlcnRfbGltYiAoZGksIGRwWzBdKTsgIGRpID0gLWRpOworCSAgZG4gPSBNSU4gKGRuLCBxbik7CisJICBtcG5fc2JwaTFfYmRpdl9xIChxcCwgdHAsIHFuLCBkcCwgZG4sIGRpKTsKKwl9CisgICAgICBlbHNlIGlmIChCRUxPV19USFJFU0hPTEQgKGRuLCBNVV9CRElWX1FfVEhSRVNIT0xEKSkKKwl7CisJICB0cCA9IHNjcmF0Y2g7CisJICBNUE5fQ09QWSAodHAsIG5wLCBxbik7CisJICBiaW52ZXJ0X2xpbWIgKGRpLCBkcFswXSk7ICBkaSA9IC1kaTsKKwkgIG1wbl9kY3BpMV9iZGl2X3EgKHFwLCB0cCwgcW4sIGRwLCBkbiwgZGkpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBtcG5fbXVfYmRpdl9xIChxcCwgbnAsIHFuLCBkcCwgZG4sIHNjcmF0Y2gpOworCX0KKyAgICAgIFRNUF9GUkVFOworICAgICAgcmV0dXJuOworICAgIH0KKworICBubjAgPSBxbjAgKyBxbjA7CisKKyAgbm4xID0gbm4wIC0gMSArICgobm4tZG4pICYgMSk7CisgIHFuMSA9IHFuMDsKKyAgaWYgKExJS0VMWSAocW4wICE9IGRuKSkKKyAgICB7CisgICAgICBubjEgPSBubjEgKyAxOworICAgICAgcW4xID0gcW4xICsgMTsKKyAgICAgIGlmIChVTkxJS0VMWSAoZHBbZG4gLSAxXSA9PSAxICYmIHFuMSAhPSBkbikpCisJeworCSAgLyogSWYgdGhlIGxlYWRpbmcgZGl2aXNvciBsaW1iID09IDEsIGkuZS4gaGFzIGp1c3Qgb25lIGJpdCwgd2UgaGF2ZQorCSAgICAgdG8gaW5jbHVkZSBhbiBleHRyYSBsaW1iIGluIG9yZGVyIHRvIGdldCB0aGUgbmVlZGVkIG92ZXJsYXAuICAqLworCSAgLyogRklYTUU6IE5vdyB3aXRoIHRoZSBtdV9kaXZhcHByX3EgZnVuY3Rpb24sIHdlIHNob3VsZCByZWFsbHkgbmVlZAorCSAgICAgbW9yZSBvdmVybGFwLiBUaGF0IGluZGljYXRlcyBvbmUgb2YgdHdvIHRoaW5nczogKDEpIFRoZSB0ZXN0IGNvZGUKKwkgICAgIGlzIG5vdCBnb29kLiAoMikgV2UgYWN0dWFsbHkgb3ZlcmxhcCB0b28gbXVjaCBieSBkZWZhdWx0LiAgKi8KKwkgIG5uMSA9IG5uMSArIDE7CisJICBxbjEgPSBxbjEgKyAxOworCX0KKyAgICB9CisKKyAgdHAgPSBUTVBfQUxMT0NfTElNQlMgKG5uMSArIDEpOworCisgIGNvdW50X2xlYWRpbmdfemVyb3MgKGNudCwgZHBbZG4gLSAxXSk7CisKKyAgLyogTm9ybWFsaXplIGRpdmlzb3IsIHN0b3JlIGludG8gdG1wIGFyZWEuICAqLworICBpZiAoY250ICE9IDApCisgICAgeworICAgICAgeGRwID0gVE1QX0FMTE9DX0xJTUJTIChxbjEpOworICAgICAgbXBuX2xzaGlmdCAoeGRwLCBkcCArIGRuIC0gcW4xLCBxbjEsIGNudCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgeGRwID0gKG1wX3B0cikgZHAgKyBkbiAtIHFuMTsKKyAgICB9CisKKyAgLyogU2hpZnQgZGl2aWRlbmQgYWNjb3JkaW5nIHRvIHRoZSBkaXZpc29yIG5vcm1hbGl6YXRpb24uICAqLworICAvKiBGSVhNRTogV2UgY29tcHV0ZSB0b28gbXVjaCBoZXJlIGZvciBYWF9kaXZhcHByX3EsIGJ1dCB0aGVzZSBmdW5jdGlvbnMnCisgICAgIGludGVyZmFjZXMgd2FudCBhIHBvaW50ZXIgdG8gdGhlIGltYWdpbmF0aXZlIGxlYXN0IHNpZ25pZmljYW50IGxpbWIsIG5vdAorICAgICB0byB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgKnVzZWQqIGxpbWIuICBPZiBjb3Vyc2UsIHdlIGNvdWxkIGxlYXZlIG5uMS1xbjEKKyAgICAgcnViYmlzaCBsaW1icyBpbiB0aGUgbG93IHBhcnQsIHRvIHNhdmUgc29tZSB0aW1lLiAgKi8KKyAgaWYgKGNudCAhPSAwKQorICAgIHsKKyAgICAgIGN5ID0gbXBuX2xzaGlmdCAodHAsIG5wICsgbm4gLSBubjEsIG5uMSwgY250KTsKKyAgICAgIGlmIChjeSAhPSAwKQorCXsKKwkgIHRwW25uMV0gPSBjeTsKKwkgIG5uMSsrOworCX0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBGSVhNRTogVGhpcyBjb3B5IGlzIG5vdCBuZWVkZWQgZm9yIG1wbl9tdV9kaXZhcHByX3EsIGV4Y2VwdCB3aGVuIHRoZQorCSBtcG5fc3ViX24gcmlnaHQgYmVmb3JlIGlzIGV4ZWN1dGVkLiAgKi8KKyAgICAgIE1QTl9DT1BZICh0cCwgbnAgKyBubiAtIG5uMSwgbm4xKTsKKyAgICB9CisKKyAgaW52ZXJ0X3BpMSAoZGludiwgeGRwW3FuMSAtIDFdLCB4ZHBbcW4xIC0gMl0pOworICBpZiAoQkVMT1dfVEhSRVNIT0xEIChxbjEsIERDX0RJVkFQUFJfUV9USFJFU0hPTEQpKQorICAgIHsKKyAgICAgIHFwW3FuMCAtIDEgKyBubjEgLSBxbjFdID0gbXBuX3NicGkxX2RpdmFwcHJfcSAocXAgKyBxbjAgLSAxLCB0cCwgbm4xLCB4ZHAsIHFuMSwgZGludi5pbnYzMik7CisgICAgfQorICBlbHNlIGlmIChCRUxPV19USFJFU0hPTEQgKHFuMSwgTVVfRElWQVBQUl9RX1RIUkVTSE9MRCkpCisgICAgeworICAgICAgcXBbcW4wIC0gMSArIG5uMSAtIHFuMV0gPSBtcG5fZGNwaTFfZGl2YXBwcl9xIChxcCArIHFuMCAtIDEsIHRwLCBubjEsIHhkcCwgcW4xLCAmZGludik7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogRklYTUU6IG1wbl9tdV9kaXZhcHByX3EgZG9lc24ndCBoYW5kbGUgcWggIT0gMC4gIFdvcmsgYXJvdW5kIGl0IHdpdGggYQorCSBjb25kaXRpb25hbCBzdWJ0cmFjdGlvbiBoZXJlLiAgKi8KKyAgICAgIHFoID0gbXBuX2NtcCAodHAgKyBubjEgLSBxbjEsIHhkcCwgcW4xKSA+PSAwOworICAgICAgaWYgKHFoKQorCW1wbl9zdWJfbiAodHAgKyBubjEgLSBxbjEsIHRwICsgbm4xIC0gcW4xLCB4ZHAsIHFuMSk7CisgICAgICBtcG5fbXVfZGl2YXBwcl9xIChxcCArIHFuMCAtIDEsIHRwLCBubjEsIHhkcCwgcW4xLCBzY3JhdGNoKTsKKyAgICAgIHFwW3FuMCAtIDEgKyBubjEgLSBxbjFdID0gcWg7CisgICAgfQorICBxbWwgPSBxcFtxbjAgLSAxXTsKKworICBiaW52ZXJ0X2xpbWIgKGRpLCBkcFswXSk7ICBkaSA9IC1kaTsKKworICBpZiAoQkVMT1dfVEhSRVNIT0xEIChxbjAsIERDX0JESVZfUV9USFJFU0hPTEQpKQorICAgIHsKKyAgICAgIE1QTl9DT1BZICh0cCwgbnAsIHFuMCk7CisgICAgICBtcG5fc2JwaTFfYmRpdl9xIChxcCwgdHAsIHFuMCwgZHAsIHFuMCwgZGkpOworICAgIH0KKyAgZWxzZSBpZiAoQkVMT1dfVEhSRVNIT0xEIChxbjAsIE1VX0JESVZfUV9USFJFU0hPTEQpKQorICAgIHsKKyAgICAgIE1QTl9DT1BZICh0cCwgbnAsIHFuMCk7CisgICAgICBtcG5fZGNwaTFfYmRpdl9xIChxcCwgdHAsIHFuMCwgZHAsIHFuMCwgZGkpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIG1wbl9tdV9iZGl2X3EgKHFwLCBucCwgcW4wLCBkcCwgcW4wLCBzY3JhdGNoKTsKKyAgICB9CisKKyAgaWYgKHFtbCA8IHFwW3FuMCAtIDFdKQorICAgIG1wbl9kZWNyX3UgKHFwICsgcW4wLCAxKTsKKworICBUTVBfRlJFRTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2RpdmlzLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvZGl2aXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTg5ZGRiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2RpdmlzLmMKQEAgLTAsMCArMSwxOTQgQEAKKy8qIG1wbl9kaXZpc2libGVfcCAtLSBtcG4gYnkgbXBuIGRpdmlzaWJpbGl0eSB0ZXN0CisKKyAgIFRIRSBGVU5DVElPTlMgSU4gVEhJUyBGSUxFIEFSRSBGT1IgSU5URVJOQUwgVVNFIE9OTFkuICBUSEVZJ1JFIEFMTU9TVAorICAgQ0VSVEFJTiBUTyBCRSBTVUJKRUNUIFRPIElOQ09NUEFUSUJMRSBDSEFOR0VTIE9SIERJU0FQUEVBUiBDT01QTEVURUxZIElOCisgICBGVVRVUkUgR05VIE1QIFJFTEVBU0VTLgorCitDb3B5cmlnaHQgMjAwMSwgMjAwMiwgMjAwNSwgMjAwOSwgMjAxNCwgMjAxNywgMjAxOCBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorI2luY2x1ZGUgImxvbmdsb25nLmgiCisKKworLyogRGV0ZXJtaW5lIHdoZXRoZXIgQT17YXAsYW59IGlzIGRpdmlzaWJsZSBieSBEPXtkcCxkbn0uICBNdXN0IGhhdmUgYm90aAorICAgb3BlcmFuZHMgbm9ybWFsaXplZCwgbWVhbmluZyBoaWdoIGxpbWJzIG5vbi16ZXJvLCBleGNlcHQgdGhhdCBhbj09MCBpcworICAgYWxsb3dlZC4KKworICAgVGhlcmUgdXN1YWxseSB3b24ndCBiZSBtYW55IGxvdyB6ZXJvIGJpdHMgb24gRCwgYnV0IHRoZSBjaGVja3MgZm9yIHRoaXMKKyAgIGFyZSBmYXN0IGFuZCBtaWdodCBwaWNrIHVwIGEgZmV3IG9wZXJhbmQgY29tYmluYXRpb25zLCBpbiBwYXJ0aWN1bGFyIHRoZXkKKyAgIG1pZ2h0IHJlZHVjZSBEIHRvIGZpdCB0aGUgc2luZ2xlLWxpbWIgbW9kXzEvbW9kZXhhY3RfMSBjb2RlLgorCisgICBGdXR1cmU6CisKKyAgIEdldHRpbmcgdGhlIHJlbWFpbmRlciBsaW1iIGJ5IGxpbWIgd291bGQgbWFrZSBhbiBlYXJseSBleGl0IHBvc3NpYmxlIG9uCisgICBmaW5kaW5nIGEgbm9uLXplcm8uICBUaGlzIHdvdWxkIHByb2JhYmx5IGhhdmUgdG8gYmUgYmRpdm1vZCBzdHlsZSBzbworICAgdGhlcmUncyBubyBhZGRiYWNrLCBidXQgaXQgd291bGQgbmVlZCBhIG11bHRpLXByZWNpc2lvbiBpbnZlcnNlIGFuZCBzbworICAgbWlnaHQgYmUgc2xvd2VyIHRoYW4gdGhlIHBsYWluIG1ldGhvZCAob24gc21hbGwgc2l6ZXMgYXQgbGVhc3QpLgorCisgICBXaGVuIEQgbXVzdCBiZSBub3JtYWxpemVkIChzaGlmdGVkIHRvIGxvdyBiaXQgc2V0KSwgaXQncyBwb3NzaWJsZSB0bworICAgc3VwcHJlc3MgdGhlIGJpdC1zaGlmdGluZyBvZiBBIGRvd24sIGFzIGxvbmcgYXMgaXQncyBhbHJlYWR5IGJlZW4gY2hlY2tlZAorICAgdGhhdCBBIGhhcyBhdCBsZWFzdCBhcyBtYW55IHRyYWlsaW5nIHplcm8gYml0cyBhcyBELiAgKi8KKworaW50CittcG5fZGl2aXNpYmxlX3AgKG1wX3NyY3B0ciBhcCwgbXBfc2l6ZV90IGFuLAorCQkgbXBfc3JjcHRyIGRwLCBtcF9zaXplX3QgZG4pCit7CisgIG1wX2xpbWJfdCAgYWxvdywgZGxvdywgZG1hc2s7CisgIG1wX3B0ciAgICAgcXAsIHJwLCB0cDsKKyAgbXBfbGltYl90IGRpOworICB1bnNpZ25lZCAgdHdvczsKKyAgaW50IGM7CisgIFRNUF9ERUNMOworCisgIEFTU0VSVCAoYW4gPj0gMCk7CisgIEFTU0VSVCAoYW4gPT0gMCB8fCBhcFthbi0xXSAhPSAwKTsKKyAgQVNTRVJUIChkbiA+PSAxKTsKKyAgQVNTRVJUIChkcFtkbi0xXSAhPSAwKTsKKyAgQVNTRVJUX01QTiAoYXAsIGFuKTsKKyAgQVNTRVJUX01QTiAoZHAsIGRuKTsKKworICAvKiBXaGVuIGE8ZCBvbmx5IGE9PTAgaXMgZGl2aXNpYmxlLgorICAgICBOb3RpY2UgdGhpcyB0ZXN0IGNvdmVycyBhbGwgY2FzZXMgb2YgYW49PTAuICovCisgIGlmIChhbiA8IGRuKQorICAgIHJldHVybiAoYW4gPT0gMCk7CisKKyAgLyogU3RyaXAgbG93IHplcm8gbGltYnMgZnJvbSBkLCByZXF1aXJpbmcgYT09MCBvbiB0aG9zZS4gKi8KKyAgZm9yICg7OykKKyAgICB7CisgICAgICBhbG93ID0gKmFwOworICAgICAgZGxvdyA9ICpkcDsKKworICAgICAgaWYgKGRsb3cgIT0gMCkKKwlicmVhazsKKworICAgICAgaWYgKGFsb3cgIT0gMCkKKwlyZXR1cm4gMDsgIC8qIGEgaGFzIGZld2VyIGxvdyB6ZXJvIGxpbWJzIHRoYW4gZCwgc28gbm90IGRpdmlzaWJsZSAqLworCisgICAgICAvKiBhIT0wIGFuZCBkIT0wIHNvIHdvbid0IGdldCB0byBuPT0wICovCisgICAgICBhbi0tOyBBU1NFUlQgKGFuID49IDEpOworICAgICAgZG4tLTsgQVNTRVJUIChkbiA+PSAxKTsKKyAgICAgIGFwKys7CisgICAgICBkcCsrOworICAgIH0KKworICAvKiBhIG11c3QgaGF2ZSBhdCBsZWFzdCBhcyBtYW55IGxvdyB6ZXJvIGJpdHMgYXMgZCAqLworICBkbWFzayA9IExPV19aRVJPU19NQVNLIChkbG93KTsKKyAgaWYgKChhbG93ICYgZG1hc2spICE9IDApCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKGRuID09IDEpCisgICAgeworICAgICAgaWYgKEFCT1ZFX1RIUkVTSE9MRCAoYW4sIEJNT0RfMV9UT19NT0RfMV9USFJFU0hPTEQpKQorCXJldHVybiBtcG5fbW9kXzEgKGFwLCBhbiwgZGxvdykgPT0gMDsKKworICAgICAgY291bnRfdHJhaWxpbmdfemVyb3MgKHR3b3MsIGRsb3cpOworICAgICAgZGxvdyA+Pj0gdHdvczsKKyAgICAgIHJldHVybiBtcG5fbW9kZXhhY3RfMV9vZGQgKGFwLCBhbiwgZGxvdykgPT0gMDsKKyAgICB9CisKKyAgY291bnRfdHJhaWxpbmdfemVyb3MgKHR3b3MsIGRsb3cpOworICBpZiAoZG4gPT0gMikKKyAgICB7CisgICAgICBtcF9saW1iX3QgIGRzZWNvbmQgPSBkcFsxXTsKKyAgICAgIGlmIChkc2Vjb25kIDw9IGRtYXNrKQorCXsKKwkgIGRsb3cgPSAoZGxvdyA+PiB0d29zKSB8IChkc2Vjb25kIDw8IChHTVBfTlVNQl9CSVRTLXR3b3MpKTsKKwkgIEFTU0VSVF9MSU1CIChkbG93KTsKKwkgIHJldHVybiBNUE5fTU9EX09SX01PREVYQUNUXzFfT0REIChhcCwgYW4sIGRsb3cpID09IDA7CisJfQorICAgIH0KKworICAvKiBTaG91bGQgd2UgY29tcHV0ZSBRID0gQSAqIEReKC0xKSBtb2QgQl5rLAorICAgICAgICAgICAgICAgICAgICAgICBSID0gQSAtIFEgKiBEICBtb2QgQl5rCisgICAgIGhlcmUsIGZvciBzb21lIHNtYWxsIHZhbHVlcyBvZiBrPyAgVGhlbiBjaGVjayBpZiBSID0gMCAobW9kIEJeaykuICAqLworCisgIC8qIFdlIGNvdWxkIGFsc28gY29tcHV0ZSBBJyA9IEEgbW9kIFQgYW5kIEQnID0gRCBtb2QgUCwgZm9yIHNvbWUKKyAgICAgUCA9IDMgKiA1ICogNyAqIDExIC4uLiwgYW5kIHRoZW4gY2hlY2sgaWYgYW55IHByaW1lIGZhY3RvciBmcm9tIFAKKyAgICAgZGl2aWRpbmcgRCcgYWxzbyBkaXZpZGVzIEEnLiAgKi8KKworICBUTVBfTUFSSzsKKworICBUTVBfQUxMT0NfTElNQlNfMiAocnAsIGFuICsgMSwKKwkJICAgICBxcCwgYW4gLSBkbiArIDEpOyAvKiBGSVhNRTogQ291bGQgd2UgYXZvaWQgdGhpcz8gKi8KKworICBpZiAodHdvcyAhPSAwKQorICAgIHsKKyAgICAgIHRwID0gVE1QX0FMTE9DX0xJTUJTIChkbik7CisgICAgICBBU1NFUlRfTk9DQVJSWSAobXBuX3JzaGlmdCAodHAsIGRwLCBkbiwgdHdvcykpOworICAgICAgZHAgPSB0cDsKKworICAgICAgQVNTRVJUX05PQ0FSUlkgKG1wbl9yc2hpZnQgKHJwLCBhcCwgYW4sIHR3b3MpKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBNUE5fQ09QWSAocnAsIGFwLCBhbik7CisgICAgfQorICBpZiAocnBbYW4gLSAxXSA+PSBkcFtkbiAtIDFdKQorICAgIHsKKyAgICAgIHJwW2FuXSA9IDA7CisgICAgICBhbisrOworICAgIH0KKyAgZWxzZSBpZiAoYW4gPT0gZG4pCisgICAgeworICAgICAgVE1QX0ZSRUU7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgQVNTRVJUIChhbiA+IGRuKTsJCS8qIHJlcXVpcmVtZW50IG9mIGZ1bmN0aW9ucyBiZWxvdyAqLworCisgIGlmIChCRUxPV19USFJFU0hPTEQgKGRuLCBEQ19CRElWX1FSX1RIUkVTSE9MRCkgfHwKKyAgICAgIEJFTE9XX1RIUkVTSE9MRCAoYW4gLSBkbiwgRENfQkRJVl9RUl9USFJFU0hPTEQpKQorICAgIHsKKyAgICAgIGJpbnZlcnRfbGltYiAoZGksIGRwWzBdKTsKKyAgICAgIG1wbl9zYnBpMV9iZGl2X3FyIChxcCwgcnAsIGFuLCBkcCwgZG4sIC1kaSk7CisgICAgICBycCArPSBhbiAtIGRuOworICAgIH0KKyAgZWxzZSBpZiAoQkVMT1dfVEhSRVNIT0xEIChkbiwgTVVfQkRJVl9RUl9USFJFU0hPTEQpKQorICAgIHsKKyAgICAgIGJpbnZlcnRfbGltYiAoZGksIGRwWzBdKTsKKyAgICAgIG1wbl9kY3BpMV9iZGl2X3FyIChxcCwgcnAsIGFuLCBkcCwgZG4sIC1kaSk7CisgICAgICBycCArPSBhbiAtIGRuOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHRwID0gVE1QX0FMTE9DX0xJTUJTIChtcG5fbXVfYmRpdl9xcl9pdGNoIChhbiwgZG4pKTsKKyAgICAgIG1wbl9tdV9iZGl2X3FyIChxcCwgcnAsIHJwLCBhbiwgZHAsIGRuLCB0cCk7CisgICAgfQorCisgIC8qIEluIGdlbmVyYWwsIGJkaXYgbWF5IHJldHVybiBlaXRoZXIgUiA9IDAgb3IgUiA9IEQgd2hlbiBEIGRpdmlkZXMKKyAgICAgQS4gQnV0IFIgPSAwIGNhbiBoYXBwZW4gb25seSB3aGVuIEEgPSAwLCB3aGljaCB3ZSBhbHJlYWR5IGhhdmUKKyAgICAgZXhjbHVkZWQuIEZ1cnRoZXJtb3JlLCBSID09IEQgKG1vZCBCXntkbn0pIGltcGxpZXMgbm8gY2FycnksIHNvCisgICAgIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgdGhlIGNhcnJ5IHJldHVybmVkIGZyb20gYmRpdi4gKi8KKworICBNUE5fQ01QIChjLCBycCwgZHAsIGRuKTsKKworICBUTVBfRlJFRTsKKyAgcmV0dXJuIGMgPT0gMDsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9kaXZyZW0uYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9kaXZyZW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGE4NGE4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2RpdnJlbS5jCkBAIC0wLDAgKzEsMTAzIEBACisvKiBtcG5fZGl2cmVtIC0tIERpdmlkZSBuYXR1cmFsIG51bWJlcnMsIHByb2R1Y2luZyBib3RoIHJlbWFpbmRlciBhbmQKKyAgIHF1b3RpZW50LiAgVGhpcyBpcyBub3cganVzdCBhIG1pZGRsZSBsYXllciBjYWxsaW5nIG1wbl90ZGl2X3FyLgorCitDb3B5cmlnaHQgMTk5My0xOTk3LCAxOTk5LTIwMDIsIDIwMDUsIDIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorI2luY2x1ZGUgImxvbmdsb25nLmgiCisKK21wX2xpbWJfdAorbXBuX2RpdnJlbSAobXBfcHRyIHFwLCBtcF9zaXplX3QgcXhuLAorCSAgICBtcF9wdHIgbnAsIG1wX3NpemVfdCBubiwKKwkgICAgbXBfc3JjcHRyIGRwLCBtcF9zaXplX3QgZG4pCit7CisgIEFTU0VSVCAocXhuID49IDApOworICBBU1NFUlQgKG5uID49IGRuKTsKKyAgQVNTRVJUIChkbiA+PSAxKTsKKyAgQVNTRVJUIChkcFtkbi0xXSAmIEdNUF9OVU1CX0hJR0hCSVQpOworICBBU1NFUlQgKCEgTVBOX09WRVJMQVBfUCAobnAsIG5uLCBkcCwgZG4pKTsKKyAgQVNTRVJUICghIE1QTl9PVkVSTEFQX1AgKHFwLCBubi1kbitxeG4sIG5wLCBubikgfHwgcXA9PW5wK2RuK3F4bik7CisgIEFTU0VSVCAoISBNUE5fT1ZFUkxBUF9QIChxcCwgbm4tZG4rcXhuLCBkcCwgZG4pKTsKKyAgQVNTRVJUX01QTiAobnAsIG5uKTsKKyAgQVNTRVJUX01QTiAoZHAsIGRuKTsKKworICBpZiAoZG4gPT0gMSkKKyAgICB7CisgICAgICBtcF9saW1iX3QgcmV0OworICAgICAgbXBfcHRyIHEycDsKKyAgICAgIG1wX3NpemVfdCBxbjsKKyAgICAgIFRNUF9ERUNMOworCisgICAgICBUTVBfTUFSSzsKKyAgICAgIHEycCA9IFRNUF9BTExPQ19MSU1CUyAobm4gKyBxeG4pOworCisgICAgICBucFswXSA9IG1wbl9kaXZyZW1fMSAocTJwLCBxeG4sIG5wLCBubiwgZHBbMF0pOworICAgICAgcW4gPSBubiArIHF4biAtIDE7CisgICAgICBNUE5fQ09QWSAocXAsIHEycCwgcW4pOworICAgICAgcmV0ID0gcTJwW3FuXTsKKworICAgICAgVE1QX0ZSRUU7CisgICAgICByZXR1cm4gcmV0OworICAgIH0KKyAgZWxzZSBpZiAoZG4gPT0gMikKKyAgICB7CisgICAgICByZXR1cm4gbXBuX2RpdnJlbV8yIChxcCwgcXhuLCBucCwgbm4sIGRwKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBtcF9wdHIgcTJwOworICAgICAgbXBfbGltYl90IHFobDsKKyAgICAgIG1wX3NpemVfdCBxbjsKKyAgICAgIFRNUF9ERUNMOworCisgICAgICBUTVBfTUFSSzsKKyAgICAgIGlmIChVTkxJS0VMWSAocXhuICE9IDApKQorCXsKKwkgIG1wX3B0ciBuMnA7CisJICBUTVBfQUxMT0NfTElNQlNfMiAobjJwLCBubiArIHF4biwKKwkJCSAgICAgcTJwLCBubiAtIGRuICsgcXhuICsgMSk7CisJICBNUE5fWkVSTyAobjJwLCBxeG4pOworCSAgTVBOX0NPUFkgKG4ycCArIHF4biwgbnAsIG5uKTsKKwkgIG1wbl90ZGl2X3FyIChxMnAsIG5wLCAwTCwgbjJwLCBubiArIHF4biwgZHAsIGRuKTsKKwkgIHFuID0gbm4gLSBkbiArIHF4bjsKKwkgIE1QTl9DT1BZIChxcCwgcTJwLCBxbik7CisJICBxaGwgPSBxMnBbcW5dOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBxMnAgPSBUTVBfQUxMT0NfTElNQlMgKG5uIC0gZG4gKyAxKTsKKwkgIG1wbl90ZGl2X3FyIChxMnAsIG5wLCAwTCwgbnAsIG5uLCBkcCwgZG4pOworCSAgcW4gPSBubiAtIGRuOworCSAgTVBOX0NPUFkgKHFwLCBxMnAsIHFuKTsKKwkgIHFobCA9IHEycFtxbl07CisJfQorICAgICAgVE1QX0ZSRUU7CisgICAgICByZXR1cm4gcWhsOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9kaXZyZW1fMS5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2RpdnJlbV8xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEzYWE3OQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9kaXZyZW1fMS5jCkBAIC0wLDAgKzEsMjU0IEBACisvKiBtcG5fZGl2cmVtXzEgLS0gbXBuIGJ5IGxpbWIgZGl2aXNpb24uCisKK0NvcHlyaWdodCAxOTkxLCAxOTkzLCAxOTk0LCAxOTk2LCAxOTk4LTIwMDAsIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKyNpbmNsdWRlICJsb25nbG9uZy5oIgorCisKKy8qIFRoZSBzaXplIHdoZXJlIHVkaXZfcXJubmRfcHJlaW52IHNob3VsZCBiZSB1c2VkIHJhdGhlciB0aGFuIHVkaXZfcXJubmQsCisgICBtZWFuaW5nIHRoZSBxdW90aWVudCBzaXplIHdoZXJlIHRoYXQgc2hvdWxkIGhhcHBlbiwgdGhlIHF1b3RpZW50IHNpemUKKyAgIGJlaW5nIGhvdyBtYW55IHVkaXYgZGl2aXNpb25zIHdpbGwgYmUgZG9uZS4KKworICAgVGhlIGRlZmF1bHQgaXMgdG8gdXNlIHByZWludiBhbHdheXMsIENQVXMgd2hlcmUgdGhpcyBkb2Vzbid0IHN1aXQgaGF2ZQorICAgdHVuZWQgdGhyZXNob2xkcy4gIE5vdGUgaW4gcGFydGljdWxhciB0aGF0IHByZWludiBzaG91bGQgY2VydGFpbmx5IGJlCisgICB1c2VkIGlmIHRoYXQncyB0aGUgb25seSBkaXZpc2lvbiBhdmFpbGFibGUgKFVTRV9QUkVJTlZfQUxXQVlTKS4gICovCisKKyNpZm5kZWYgRElWUkVNXzFfTk9STV9USFJFU0hPTEQKKyNkZWZpbmUgRElWUkVNXzFfTk9STV9USFJFU0hPTEQgIDAKKyNlbmRpZgorI2lmbmRlZiBESVZSRU1fMV9VTk5PUk1fVEhSRVNIT0xECisjZGVmaW5lIERJVlJFTV8xX1VOTk9STV9USFJFU0hPTEQgIDAKKyNlbmRpZgorCisKKworLyogSWYgdGhlIGNwdSBvbmx5IGhhcyBtdWx0aXBseS1ieS1pbnZlcnNlIGRpdmlzaW9uIChlZy4gYWxwaGEpLCB0aGVuIE5PUk0KKyAgIGFuZCBVTk5PUk0gdGhyZXNob2xkcyBhcmUgMCBhbmQgb25seSB0aGUgaW52ZXJzaW9uIGNvZGUgaXMgaW5jbHVkZWQuCisKKyAgIElmIG11bHRpcGx5LWJ5LWludmVyc2UgaXMgbmV2ZXIgdmlhYmxlLCB0aGVuIE5PUk0gYW5kIFVOTk9STSB0aHJlc2hvbGRzCisgICB3aWxsIGJlIE1QX1NJWkVfVF9NQVggYW5kIG9ubHkgdGhlIHBsYWluIGRpdmlzaW9uIGNvZGUgaXMgaW5jbHVkZWQuCisKKyAgIE90aGVyd2lzZSBtdWwtYnktaW52ZXJzZSBpcyBiZXR0ZXIgdGhhbiBwbGFpbiBkaXZpc2lvbiBhYm92ZSBzb21lCisgICB0aHJlc2hvbGQsIGFuZCBiZXN0IHJlc3VsdHMgYXJlIG9idGFpbmVkIGJ5IGhhdmluZyBjb2RlIGZvciBib3RoIHByZXNlbnQuCisKKyAgIFRoZSBtYWluIHJlYXNvbiBmb3Igc2VwYXJhdGluZyB0aGUgbm9ybSBhbmQgdW5ub3JtIGNhc2VzIGlzIHRoYXQgbm90IGFsbAorICAgQ1BVcyBnaXZlIHplcm8gZm9yICJuMCA+PiBHTVBfTElNQl9CSVRTIiB3aGljaCB3b3VsZCBhcmlzZSBpbiB0aGUgdW5ub3JtCisgICBjb2RlIHVzZWQgb24gYW4gYWxyZWFkeSBub3JtYWxpemVkIGRpdmlzb3IuCisKKyAgIElmIFVESVZfTkVFRFNfTk9STUFMSVpBVElPTiBpcyBmYWxzZSB0aGVuIHBsYWluIGRpdmlzaW9uIHVzZXMgdGhlIHNhbWUKKyAgIG5vbi1zaGlmdGluZyBjb2RlIGZvciBib3RoIHRoZSBub3JtIGFuZCB1bm5vcm0gY2FzZXMsIHRob3VnaCB3aXRoCisgICBkaWZmZXJlbnQgY3JpdGVyaWEgZm9yIHNraXBwaW5nIGEgZGl2aXNpb24sIGFuZCB3aXRoIGRpZmZlcmVudCB0aHJlc2hvbGRzCisgICBvZiBjb3Vyc2UuICBBbmQgaW4gZmFjdCBpZiBpbnZlcnNpb24gaXMgbmV2ZXIgdmlhYmxlLCB0aGVuIHRoYXQgc2ltcGxlCisgICBub24tc2hpZnRpbmcgZGl2aXNpb24gd291bGQgYmUgYWxsIHRoYXQncyBsZWZ0LgorCisgICBUaGUgTk9STSBhbmQgVU5OT1JNIHRocmVzaG9sZHMgbWlnaHQgbm90IGRpZmZlciBtdWNoLCBidXQgaWYgdGhlcmUncworICAgZ29pbmcgdG8gYmUgc2VwYXJhdGUgY29kZSBmb3Igbm9ybSBhbmQgdW5ub3JtIHRoZW4gaXQgbWFrZXMgc2Vuc2UgdG8gaGF2ZQorICAgc2VwYXJhdGUgdGhyZXNob2xkcy4gIE9uZSB0aGluZyB0aGF0J3MgcG9zc2libGUgaXMgdGhhdCB0aGUKKyAgIG11bC1ieS1pbnZlcnNlIG1pZ2h0IGJlIGJldHRlciBvbmx5IGZvciBub3JtYWxpemVkIGRpdmlzb3JzLCBkdWUgdG8gdGhhdAorICAgY2FzZSBub3QgbmVlZGluZyB2YXJpYWJsZSBiaXQgc2hpZnRzLgorCisgICBOb3RpY2UgdGhhdCB0aGUgdGhyZXNob2xkcyBhcmUgdGVzdGVkIGFmdGVyIHRoZSBkZWNpc2lvbiB0byBwb3NzaWJseSBza2lwCisgICBvbmUgZGl2aWRlIHN0ZXAsIHNvIHRoZXkncmUgYmFzZWQgb24gdGhlIGFjdHVhbCBudW1iZXIgb2YgZGl2aXNpb25zIGRvbmUuCisKKyAgIEZvciB0aGUgdW5ub3JtIGNhc2UsIGl0IHdvdWxkIGJlIHBvc3NpYmxlIHRvIGNhbGwgbXBuX2xzaGlmdCB0byBhZGp1c3QKKyAgIHRoZSBkaXZpZGVuZCBhbGwgaW4gb25lIGdvIChpbnRvIHRoZSBxdW90aWVudCBzcGFjZSBzYXkpLCByYXRoZXIgdGhhbgorICAgbGltYi1ieS1saW1iIGluIHRoZSBsb29wLiAgVGhpcyBtaWdodCBoZWxwIGlmIG1wbl9sc2hpZnQgaXMgYSBsb3QgZmFzdGVyCisgICB0aGFuIHdoYXQgdGhlIGNvbXBpbGVyIGNhbiBnZW5lcmF0ZSBmb3IgRVhUUkFDVC4gIEJ1dCB0aGlzIGlzIGxlZnQgdG8gQ1BVCisgICBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgdG8gY29uc2lkZXIsIGVzcGVjaWFsbHkgc2luY2UgRVhUUkFDVCBpc24ndCBvbgorICAgdGhlIGRlcGVuZGVudCBjaGFpbi4gICovCisKK21wX2xpbWJfdAorbXBuX2RpdnJlbV8xIChtcF9wdHIgcXAsIG1wX3NpemVfdCBxeG4sCisJICAgICAgbXBfc3JjcHRyIHVwLCBtcF9zaXplX3QgdW4sIG1wX2xpbWJfdCBkKQoreworICBtcF9zaXplX3QgIG47CisgIG1wX3NpemVfdCAgaTsKKyAgbXBfbGltYl90ICBuMSwgbjA7CisgIG1wX2xpbWJfdCAgciA9IDA7CisKKyAgQVNTRVJUIChxeG4gPj0gMCk7CisgIEFTU0VSVCAodW4gPj0gMCk7CisgIEFTU0VSVCAoZCAhPSAwKTsKKyAgLyogRklYTUU6IFdoYXQncyB0aGUgY29ycmVjdCBvdmVybGFwIHJ1bGUgd2hlbiBxeG4hPTA/ICovCisgIEFTU0VSVCAoTVBOX1NBTUVfT1JfU0VQQVJBVEVfUCAocXArcXhuLCB1cCwgdW4pKTsKKworICBuID0gdW4gKyBxeG47CisgIGlmIChuID09IDApCisgICAgcmV0dXJuIDA7CisKKyAgZCA8PD0gR01QX05BSUxfQklUUzsKKworICBxcCArPSAobiAtIDEpOyAgIC8qIE1ha2UgcXAgcG9pbnQgYXQgbW9zdCBzaWduaWZpY2FudCBxdW90aWVudCBsaW1iICovCisKKyAgaWYgKChkICYgR01QX0xJTUJfSElHSEJJVCkgIT0gMCkKKyAgICB7CisgICAgICBpZiAodW4gIT0gMCkKKwl7CisJICAvKiBIaWdoIHF1b3RpZW50IGxpbWIgaXMgMCBvciAxLCBza2lwIGEgZGl2aWRlIHN0ZXAuICovCisJICBtcF9saW1iX3QgcTsKKwkgIHIgPSB1cFt1biAtIDFdIDw8IEdNUF9OQUlMX0JJVFM7CisJICBxID0gKHIgPj0gZCk7CisJICAqcXAtLSA9IHE7CisJICByIC09IChkICYgLXEpOworCSAgciA+Pj0gR01QX05BSUxfQklUUzsKKwkgIG4tLTsKKwkgIHVuLS07CisJfQorCisgICAgICBpZiAoQkVMT1dfVEhSRVNIT0xEIChuLCBESVZSRU1fMV9OT1JNX1RIUkVTSE9MRCkpCisJeworCXBsYWluOgorCSAgZm9yIChpID0gdW4gLSAxOyBpID49IDA7IGktLSkKKwkgICAgeworCSAgICAgIG4wID0gdXBbaV0gPDwgR01QX05BSUxfQklUUzsKKwkgICAgICB1ZGl2X3Fybm5kICgqcXAsIHIsIHIsIG4wLCBkKTsKKwkgICAgICByID4+PSBHTVBfTkFJTF9CSVRTOworCSAgICAgIHFwLS07CisJICAgIH0KKwkgIGZvciAoaSA9IHF4biAtIDE7IGkgPj0gMDsgaS0tKQorCSAgICB7CisJICAgICAgdWRpdl9xcm5uZCAoKnFwLCByLCByLCBDTlNUX0xJTUIoMCksIGQpOworCSAgICAgIHIgPj49IEdNUF9OQUlMX0JJVFM7CisJICAgICAgcXAtLTsKKwkgICAgfQorCSAgcmV0dXJuIHI7CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8qIE11bHRpcGx5LWJ5LWludmVyc2UsIGRpdmlzb3IgYWxyZWFkeSBub3JtYWxpemVkLiAqLworCSAgbXBfbGltYl90IGRpbnY7CisJICBpbnZlcnRfbGltYiAoZGludiwgZCk7CisKKwkgIGZvciAoaSA9IHVuIC0gMTsgaSA+PSAwOyBpLS0pCisJICAgIHsKKwkgICAgICBuMCA9IHVwW2ldIDw8IEdNUF9OQUlMX0JJVFM7CisJICAgICAgdWRpdl9xcm5uZF9wcmVpbnYgKCpxcCwgciwgciwgbjAsIGQsIGRpbnYpOworCSAgICAgIHIgPj49IEdNUF9OQUlMX0JJVFM7CisJICAgICAgcXAtLTsKKwkgICAgfQorCSAgZm9yIChpID0gcXhuIC0gMTsgaSA+PSAwOyBpLS0pCisJICAgIHsKKwkgICAgICB1ZGl2X3Fybm5kX3ByZWludiAoKnFwLCByLCByLCBDTlNUX0xJTUIoMCksIGQsIGRpbnYpOworCSAgICAgIHIgPj49IEdNUF9OQUlMX0JJVFM7CisJICAgICAgcXAtLTsKKwkgICAgfQorCSAgcmV0dXJuIHI7CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIE1vc3Qgc2lnbmlmaWNhbnQgYml0IG9mIGRpdmlzb3IgPT0gMC4gICovCisgICAgICBpbnQgY250OworCisgICAgICAvKiBTa2lwIGEgZGl2aXNpb24gaWYgaGlnaCA8IGRpdmlzb3IgKGhpZ2ggcXVvdGllbnQgMCkuICBUZXN0aW5nIGhlcmUKKwkgYmVmb3JlIG5vcm1hbGl6aW5nIHdpbGwgc3RpbGwgc2tpcCBhcyBvZnRlbiBhcyBwb3NzaWJsZS4gICovCisgICAgICBpZiAodW4gIT0gMCkKKwl7CisJICBuMSA9IHVwW3VuIC0gMV0gPDwgR01QX05BSUxfQklUUzsKKwkgIGlmIChuMSA8IGQpCisJICAgIHsKKwkgICAgICByID0gbjEgPj4gR01QX05BSUxfQklUUzsKKwkgICAgICAqcXAtLSA9IDA7CisJICAgICAgbi0tOworCSAgICAgIGlmIChuID09IDApCisJCXJldHVybiByOworCSAgICAgIHVuLS07CisJICAgIH0KKwl9CisKKyAgICAgIGlmICghIFVESVZfTkVFRFNfTk9STUFMSVpBVElPTgorCSAgJiYgQkVMT1dfVEhSRVNIT0xEIChuLCBESVZSRU1fMV9VTk5PUk1fVEhSRVNIT0xEKSkKKwlnb3RvIHBsYWluOworCisgICAgICBjb3VudF9sZWFkaW5nX3plcm9zIChjbnQsIGQpOworICAgICAgZCA8PD0gY250OworICAgICAgciA8PD0gY250OworCisgICAgICBpZiAoVURJVl9ORUVEU19OT1JNQUxJWkFUSU9OCisJICAmJiBCRUxPV19USFJFU0hPTEQgKG4sIERJVlJFTV8xX1VOTk9STV9USFJFU0hPTEQpKQorCXsKKwkgIG1wX2xpbWJfdCBuc2hpZnQ7CisJICBpZiAodW4gIT0gMCkKKwkgICAgeworCSAgICAgIG4xID0gdXBbdW4gLSAxXSA8PCBHTVBfTkFJTF9CSVRTOworCSAgICAgIHIgfD0gKG4xID4+IChHTVBfTElNQl9CSVRTIC0gY250KSk7CisJICAgICAgZm9yIChpID0gdW4gLSAyOyBpID49IDA7IGktLSkKKwkJeworCQkgIG4wID0gdXBbaV0gPDwgR01QX05BSUxfQklUUzsKKwkJICBuc2hpZnQgPSAobjEgPDwgY250KSB8IChuMCA+PiAoR01QX05VTUJfQklUUyAtIGNudCkpOworCQkgIHVkaXZfcXJubmQgKCpxcCwgciwgciwgbnNoaWZ0LCBkKTsKKwkJICByID4+PSBHTVBfTkFJTF9CSVRTOworCQkgIHFwLS07CisJCSAgbjEgPSBuMDsKKwkJfQorCSAgICAgIHVkaXZfcXJubmQgKCpxcCwgciwgciwgbjEgPDwgY250LCBkKTsKKwkgICAgICByID4+PSBHTVBfTkFJTF9CSVRTOworCSAgICAgIHFwLS07CisJICAgIH0KKwkgIGZvciAoaSA9IHF4biAtIDE7IGkgPj0gMDsgaS0tKQorCSAgICB7CisJICAgICAgdWRpdl9xcm5uZCAoKnFwLCByLCByLCBDTlNUX0xJTUIoMCksIGQpOworCSAgICAgIHIgPj49IEdNUF9OQUlMX0JJVFM7CisJICAgICAgcXAtLTsKKwkgICAgfQorCSAgcmV0dXJuIHIgPj4gY250OworCX0KKyAgICAgIGVsc2UKKwl7CisJICBtcF9saW1iX3QgIGRpbnYsIG5zaGlmdDsKKwkgIGludmVydF9saW1iIChkaW52LCBkKTsKKwkgIGlmICh1biAhPSAwKQorCSAgICB7CisJICAgICAgbjEgPSB1cFt1biAtIDFdIDw8IEdNUF9OQUlMX0JJVFM7CisJICAgICAgciB8PSAobjEgPj4gKEdNUF9MSU1CX0JJVFMgLSBjbnQpKTsKKwkgICAgICBmb3IgKGkgPSB1biAtIDI7IGkgPj0gMDsgaS0tKQorCQl7CisJCSAgbjAgPSB1cFtpXSA8PCBHTVBfTkFJTF9CSVRTOworCQkgIG5zaGlmdCA9IChuMSA8PCBjbnQpIHwgKG4wID4+IChHTVBfTlVNQl9CSVRTIC0gY250KSk7CisJCSAgdWRpdl9xcm5uZF9wcmVpbnYgKCpxcCwgciwgciwgbnNoaWZ0LCBkLCBkaW52KTsKKwkJICByID4+PSBHTVBfTkFJTF9CSVRTOworCQkgIHFwLS07CisJCSAgbjEgPSBuMDsKKwkJfQorCSAgICAgIHVkaXZfcXJubmRfcHJlaW52ICgqcXAsIHIsIHIsIG4xIDw8IGNudCwgZCwgZGludik7CisJICAgICAgciA+Pj0gR01QX05BSUxfQklUUzsKKwkgICAgICBxcC0tOworCSAgICB9CisJICBmb3IgKGkgPSBxeG4gLSAxOyBpID49IDA7IGktLSkKKwkgICAgeworCSAgICAgIHVkaXZfcXJubmRfcHJlaW52ICgqcXAsIHIsIHIsIENOU1RfTElNQigwKSwgZCwgZGludik7CisJICAgICAgciA+Pj0gR01QX05BSUxfQklUUzsKKwkgICAgICBxcC0tOworCSAgICB9CisJICByZXR1cm4gciA+PiBjbnQ7CisJfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9kaXZyZW1fMi5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2RpdnJlbV8yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE3ZjJmNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9kaXZyZW1fMi5jCkBAIC0wLDAgKzEsMTE4IEBACisvKiBtcG5fZGl2cmVtXzIgLS0gRGl2aWRlIG5hdHVyYWwgbnVtYmVycywgcHJvZHVjaW5nIGJvdGggcmVtYWluZGVyIGFuZAorICAgcXVvdGllbnQuICBUaGUgZGl2aXNvciBpcyB0d28gbGltYnMuCisKKyAgIFRISVMgRklMRSBDT05UQUlOUyBJTlRFUk5BTCBGVU5DVElPTlMgV0lUSCBNVVRBQkxFIElOVEVSRkFDRVMuICBJVCBJUyBPTkxZCisgICBTQUZFIFRPIFJFQUNIIFRIRU0gVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuICBJTiBGQUNULCBJVCBJUyBBTE1PU1QKKyAgIEdVQVJBTlRFRUQgVEhBVCBUSEVZJ0xMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR05VIE1QIFJFTEVBU0UuCisKKworQ29weXJpZ2h0IDE5OTMtMTk5NiwgMTk5OS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKyNpbmNsdWRlICJsb25nbG9uZy5oIgorCisKKy8qIERpdmlkZSBudW0ge25wLG5ufSBieSBkZW4ge2RwLDJ9IGFuZCB3cml0ZSB0aGUgbm4tMiBsZWFzdCBzaWduaWZpY2FudAorICAgcXVvdGllbnQgbGltYnMgYXQgcXAgYW5kIHRoZSAyIGxvbmcgcmVtYWluZGVyIGF0IG5wLiAgSWYgcXhuIGlzIG5vbi16ZXJvLAorICAgZ2VuZXJhdGUgdGhhdCBtYW55IGZyYWN0aW9uIGJpdHMgYW5kIGFwcGVuZCB0aGVtIGFmdGVyIHRoZSBvdGhlciBxdW90aWVudAorICAgbGltYnMuICBSZXR1cm4gdGhlIG1vc3Qgc2lnbmlmaWNhbnQgbGltYiBvZiB0aGUgcXVvdGllbnQsIHRoaXMgaXMgYWx3YXlzIDAKKyAgIG9yIDEuCisKKyAgIFByZWNvbmRpdGlvbnM6CisgICAxLiBUaGUgbW9zdCBzaWduaWZpY2FudCBiaXQgb2YgdGhlIGRpdmlzb3IgbXVzdCBiZSBzZXQuCisgICAyLiBxcCBtdXN0IGVpdGhlciBub3Qgb3ZlcmxhcCB3aXRoIHRoZSBpbnB1dCBvcGVyYW5kcyBhdCBhbGwsIG9yCisgICAgICBxcCA+PSBucCArIDIgbXVzdCBob2xkIHRydWUuICAoVGhpcyBtZWFucyB0aGF0IGl0J3MgcG9zc2libGUgdG8gcHV0CisgICAgICB0aGUgcXVvdGllbnQgaW4gdGhlIGhpZ2ggcGFydCBvZiB7bnAsbm59LCByaWdodCBhYm92ZSB0aGUgcmVtYWluZGVyLgorICAgMy4gbm4gPj0gMiwgZXZlbiBpZiBxeG4gaXMgbm9uLXplcm8uICAqLworCittcF9saW1iX3QKK21wbl9kaXZyZW1fMiAobXBfcHRyIHFwLCBtcF9zaXplX3QgcXhuLAorCSAgICAgIG1wX3B0ciBucCwgbXBfc2l6ZV90IG5uLAorCSAgICAgIG1wX3NyY3B0ciBkcCkKK3sKKyAgbXBfbGltYl90IG1vc3Rfc2lnbmlmaWNhbnRfcV9saW1iOworICBtcF9zaXplX3QgaTsKKyAgbXBfbGltYl90IHIxLCByMCwgZDEsIGQwOworICBnbXBfcGkxX3QgZGk7CisKKyAgQVNTRVJUIChubiA+PSAyKTsKKyAgQVNTRVJUIChxeG4gPj0gMCk7CisgIEFTU0VSVCAoZHBbMV0gJiBHTVBfTlVNQl9ISUdIQklUKTsKKyAgQVNTRVJUICghIE1QTl9PVkVSTEFQX1AgKHFwLCBubi0yK3F4biwgbnAsIG5uKSB8fCBxcCA+PSBucCsyKTsKKyAgQVNTRVJUX01QTiAobnAsIG5uKTsKKyAgQVNTRVJUX01QTiAoZHAsIDIpOworCisgIG5wICs9IG5uIC0gMjsKKyAgZDEgPSBkcFsxXTsKKyAgZDAgPSBkcFswXTsKKyAgcjEgPSBucFsxXTsKKyAgcjAgPSBucFswXTsKKworICBtb3N0X3NpZ25pZmljYW50X3FfbGltYiA9IDA7CisgIGlmIChyMSA+PSBkMSAmJiAocjEgPiBkMSB8fCByMCA+PSBkMCkpCisgICAgeworI2lmIEdNUF9OQUlMX0JJVFMgPT0gMAorICAgICAgc3ViX2RkbW1zcyAocjEsIHIwLCByMSwgcjAsIGQxLCBkMCk7CisjZWxzZQorICAgICAgcjAgPSByMCAtIGQwOworICAgICAgcjEgPSByMSAtIGQxIC0gKHIwID4+IEdNUF9MSU1CX0JJVFMgLSAxKTsKKyAgICAgIHIwICY9IEdNUF9OVU1CX01BU0s7CisjZW5kaWYKKyAgICAgIG1vc3Rfc2lnbmlmaWNhbnRfcV9saW1iID0gMTsKKyAgICB9CisKKyAgaW52ZXJ0X3BpMSAoZGksIGQxLCBkMCk7CisKKyAgcXAgKz0gcXhuOworCisgIGZvciAoaSA9IG5uIC0gMiAtIDE7IGkgPj0gMDsgaS0tKQorICAgIHsKKyAgICAgIG1wX2xpbWJfdCBuMCwgcTsKKyAgICAgIG4wID0gbnBbLTFdOworICAgICAgdWRpdl9xcl8zYnkyIChxLCByMSwgcjAsIHIxLCByMCwgbjAsIGQxLCBkMCwgZGkuaW52MzIpOworICAgICAgbnAtLTsKKyAgICAgIHFwW2ldID0gcTsKKyAgICB9CisKKyAgaWYgKFVOTElLRUxZIChxeG4gIT0gMCkpCisgICAgeworICAgICAgcXAgLT0gcXhuOworICAgICAgZm9yIChpID0gcXhuIC0gMTsgaSA+PSAwOyBpLS0pCisJeworCSAgbXBfbGltYl90IHE7CisJICB1ZGl2X3FyXzNieTIgKHEsIHIxLCByMCwgcjEsIHIwLCBDTlNUX0xJTUIoMCksIGQxLCBkMCwgZGkuaW52MzIpOworCSAgcXBbaV0gPSBxOworCX0KKyAgICB9CisKKyAgbnBbMV0gPSByMTsKKyAgbnBbMF0gPSByMDsKKworICByZXR1cm4gbW9zdF9zaWduaWZpY2FudF9xX2xpbWI7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvZHVtcC5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2R1bXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTRkZGY0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2R1bXAuYwpAQCAtMCwwICsxLDk5IEBACisvKiBUSElTIElTIEFOIElOVEVSTkFMIEZVTkNUSU9OIFdJVEggQSBNVVRBQkxFIElOVEVSRkFDRS4gIElUIElTIE5PVCBTQUZFIFRPCisgICBDQUxMIFRISVMgRlVOQ1RJT04gRElSRUNUTFkuICBJTiBGQUNULCBJVCBJUyBBTE1PU1QgR1VBUkFOVEVFRCBUSEFUIFRISVMKKyAgIEZVTkNUSU9OIFdJTEwgQ0hBTkdFIE9SIERJU0FQUEVBUiBJTiBBIEZVVFVSRSBHTlUgTVAgUkVMRUFTRS4KKworCitDb3B5cmlnaHQgMTk5NiwgMjAwMC0yMDAyLCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCisjaWYgR01QX05VTUJfQklUUyAlIDQgPT0gMAordm9pZAorbXBuX2R1bXAgKG1wX3NyY3B0ciBwdHIsIG1wX3NpemVfdCBuKQoreworICBNUE5fTk9STUFMSVpFIChwdHIsIG4pOworCisgIGlmIChuID09IDApCisgICAgcHJpbnRmICgiMFxuIik7CisgIGVsc2UKKyAgICB7CisgICAgICBuLS07CisjaWYgX0xPTkdfTE9OR19MSU1CCisgICAgICBpZiAoKHB0cltuXSA+PiBHTVBfTElNQl9CSVRTIC8gMikgIT0gMCkKKwl7CisJICBwcmludGYgKCIlbFgiLCAodW5zaWduZWQgbG9uZykgKHB0cltuXSA+PiBHTVBfTElNQl9CSVRTIC8gMikpOworCSAgcHJpbnRmICgiJTAqbFgiLCAoR01QX0xJTUJfQklUUyAvIDIgLyA0KSwgKHVuc2lnbmVkIGxvbmcpIHB0cltuXSk7CisJfQorICAgICAgZWxzZQorI2VuZGlmCisJcHJpbnRmICgiJWxYIiwgKHVuc2lnbmVkIGxvbmcpIHB0cltuXSk7CisKKyAgICAgIHdoaWxlIChuKQorCXsKKwkgIG4tLTsKKyNpZiBfTE9OR19MT05HX0xJTUIKKwkgIHByaW50ZiAoIiUwKmxYIiwgKEdNUF9OVU1CX0JJVFMgLSBHTVBfTElNQl9CSVRTIC8gMikgLyA0LAorCQkgICh1bnNpZ25lZCBsb25nKSAocHRyW25dID4+IEdNUF9MSU1CX0JJVFMgLyAyKSk7CisJICBwcmludGYgKCIlMCpsWCIsIEdNUF9MSU1CX0JJVFMgLyAyIC8gNCwgKHVuc2lnbmVkIGxvbmcpIHB0cltuXSk7CisjZWxzZQorCSAgcHJpbnRmICgiJTAqbFgiLCBHTVBfTlVNQl9CSVRTIC8gNCwgKHVuc2lnbmVkIGxvbmcpIHB0cltuXSk7CisjZW5kaWYKKwl9CisgICAgICBwcmludGYgKCJcbiIpOworICAgIH0KK30KKworI2Vsc2UKKworc3RhdGljIHZvaWQKK21wbl9yZWNkdW1wIChtcF9wdHIgcCwgbXBfc2l6ZV90IG4pCit7CisgIG1wX2xpbWJfdCBsbzsKKyAgaWYgKG4gIT0gMCkKKyAgICB7CisgICAgICBsbyA9IHBbMF0gJiAweGY7CisgICAgICBtcG5fcnNoaWZ0IChwLCBwLCBuLCA0KTsKKyAgICAgIG1wbl9yZWNkdW1wIChwLCBuKTsKKyAgICAgIHByaW50ZiAoIiVsWCIsIGxvKTsKKyAgICB9Cit9CisKK3ZvaWQKK21wbl9kdW1wIChtcF9zcmNwdHIgcCwgbXBfc2l6ZV90IG4pCit7CisgIG1wX3B0ciB0cDsKKyAgVE1QX0RFQ0w7CisgIFRNUF9NQVJLOworICB0cCA9IFRNUF9BTExPQ19MSU1CUyAobik7CisgIE1QTl9DT1BZICh0cCwgcCwgbik7CisgIFRNUF9GUkVFOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9maWIyX3VpLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvZmliMl91aS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiODE1NzEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvZmliMl91aS5jCkBAIC0wLDAgKzEsMTc0IEBACisvKiBtcG5fZmliMl91aSAtLSBjYWxjdWxhdGUgRmlib25hY2NpIG51bWJlcnMuCisKKyAgIFRIRSBGVU5DVElPTlMgSU4gVEhJUyBGSUxFIEFSRSBGT1IgSU5URVJOQUwgVVNFIE9OTFkuICBUSEVZJ1JFIEFMTU9TVAorICAgQ0VSVEFJTiBUTyBCRSBTVUJKRUNUIFRPIElOQ09NUEFUSUJMRSBDSEFOR0VTIE9SIERJU0FQUEVBUiBDT01QTEVURUxZIElOCisgICBGVVRVUkUgR05VIE1QIFJFTEVBU0VTLgorCitDb3B5cmlnaHQgMjAwMSwgMjAwMiwgMjAwNSwgMjAwOSwgMjAxOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworLyogY2hhbmdlIHRoaXMgdG8gIiNkZWZpbmUgVFJBQ0UoeCkgeCIgZm9yIGRpYWdub3N0aWNzICovCisjZGVmaW5lIFRSQUNFKHgpCisKKworLyogU3RvcmUgRltuXSBhdCBmcCBhbmQgRltuLTFdIGF0IGYxcC4gIGZwIGFuZCBmMXAgc2hvdWxkIGhhdmUgcm9vbSBmb3IKKyAgIE1QTl9GSUIyX1NJWkUobikgbGltYnMuCisKKyAgIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIGFjdHVhbCBudW1iZXIgb2YgbGltYnMgc3RvcmVkLCB0aGlzIHdpbGwgYmUgYXQKKyAgIGxlYXN0IDEuICBmcFtzaXplLTFdIHdpbGwgYmUgbm9uLXplcm8sIGV4Y2VwdCB3aGVuIG49PTAsIGluIHdoaWNoIGNhc2UKKyAgIGZwWzBdIGlzIDAgYW5kIGYxcFswXSBpcyAxLiAgZjFwW3NpemUtMV0gY2FuIGJlIHplcm8sIHNpbmNlIEZbbi0xXTxGW25dCisgICAoZm9yIG4+MCkuCisKKyAgIE5vdGVzOiBGWzJrKzFdID0gNCpGW2tdXjIgLSBGW2stMV1eMiArIDIqKC0xKV5rLgorCisgICBJbiBGWzJrKzFdIHdpdGggayBldmVuLCArMiBpcyBhcHBsaWVkIHRvIDQqRltrXV4yIGp1c3QgYnkgT1JpbmcgaW50byB0aGUKKyAgIGxvdyBsaW1iLgorCisgICBJbiBGWzJrKzFdIHdpdGggayBvZGQsIC0yIGlzIGFwcGxpZWQgdG8gRltrLTFdXjIganVzdCBieSBPUmluZyBpbnRvIHRoZQorICAgbG93IGxpbWIuCisqLworCittcF9zaXplX3QKK21wbl9maWIyX3VpIChtcF9wdHIgZnAsIG1wX3B0ciBmMXAsIHVuc2lnbmVkIGxvbmcgaW50IG4pCit7CisgIG1wX3NpemVfdCAgICAgIHNpemU7CisgIHVuc2lnbmVkIGxvbmcgIG5maXJzdCwgbWFzazsKKworICBUUkFDRSAocHJpbnRmICgibXBuX2ZpYjJfdWkgbj0lbHVcbiIsIG4pKTsKKworICBBU1NFUlQgKCEgTVBOX09WRVJMQVBfUCAoZnAsIE1QTl9GSUIyX1NJWkUobiksIGYxcCwgTVBOX0ZJQjJfU0laRShuKSkpOworCisgIC8qIFRha2UgYSBzdGFydGluZyBwYWlyIGZyb20gdGhlIHRhYmxlLiAqLworICBtYXNrID0gMTsKKyAgZm9yIChuZmlyc3QgPSBuOyBuZmlyc3QgPiBGSUJfVEFCTEVfTElNSVQ7IG5maXJzdCAvPSAyKQorICAgIG1hc2sgPDw9IDE7CisgIFRSQUNFIChwcmludGYgKCJuZmlyc3Q9JWx1IG1hc2s9MHglbFhcbiIsIG5maXJzdCwgbWFzaykpOworCisgIGYxcFswXSA9IEZJQl9UQUJMRSAoKGludCkgbmZpcnN0IC0gMSk7CisgIGZwWzBdICA9IEZJQl9UQUJMRSAobmZpcnN0KTsKKyAgc2l6ZSA9IDE7CisKKyAgLyogU2tpcCB0byB0aGUgZW5kIGlmIHRoZSB0YWJsZSBsb29rdXAgZ2l2ZXMgdGhlIGZpbmFsIGFuc3dlci4gKi8KKyAgaWYgKG1hc2sgIT0gMSkKKyAgICB7CisgICAgICBtcF9zaXplX3QgIGFsbG9jOworICAgICAgbXBfcHRyICAgICAgICB4cDsKKyAgICAgIFRNUF9ERUNMOworCisgICAgICBUTVBfTUFSSzsKKyAgICAgIGFsbG9jID0gTVBOX0ZJQjJfU0laRSAobik7CisgICAgICB4cCA9IFRNUF9BTExPQ19MSU1CUyAoYWxsb2MpOworCisgICAgICBkbworCXsKKwkgIC8qIEhlcmUgZnA9PUZba10gYW5kIGYxcD09RltrLTFdLCB3aXRoIGsgYmVpbmcgdGhlIGJpdHMgb2YgbiBmcm9tCisJICAgICBuJm1hc2sgdXB3YXJkcy4KKworCSAgICAgVGhlIG5leHQgYml0IG9mIG4gaXMgbiYobWFzaz4+MSkgYW5kIHdlJ2xsIGRvdWJsZSB0byB0aGUgcGFpcgorCSAgICAgZnA9PUZbMmtdLGYxcD09Rlsyay0xXSBvciBmcD09RlsyaysxXSxmMXA9PUZbMmtdLCBhY2NvcmRpbmcgYXMKKwkgICAgIHRoYXQgYml0IGlzIDAgb3IgMSByZXNwZWN0aXZlbHkuICAqLworCisJICBUUkFDRSAocHJpbnRmICgiaz0lbHUgbWFzaz0weCVsWCBzaXplPSVsZCBhbGxvYz0lbGRcbiIsCisJCQkgbiA+PiByZWZtcG5fY291bnRfdHJhaWxpbmdfemVyb3MobWFzayksCisJCQkgbWFzaywgc2l6ZSwgYWxsb2MpOworCQkgbXBuX3RyYWNlICgiZnAgIiwgZnAsIHNpemUpOworCQkgbXBuX3RyYWNlICgiZjFwIiwgZjFwLCBzaXplKSk7CisKKwkgIC8qIGZwIG5vcm1hbGl6ZWQsIGYxcCBhdCBtb3N0IG9uZSBoaWdoIHplcm8gKi8KKwkgIEFTU0VSVCAoZnBbc2l6ZS0xXSAhPSAwKTsKKwkgIEFTU0VSVCAoZjFwW3NpemUtMV0gIT0gMCB8fCBmMXBbc2l6ZS0yXSAhPSAwKTsKKworCSAgLyogZjFwW3NpemUtMV0gbWlnaHQgYmUgemVybywgYnV0IHRoaXMgb2NjdXJzIHJhcmVseSwgc28gaXQncyBub3QKKwkgICAgIHdvcnRoIGJvdGhlcmluZyBjaGVja2luZyBmb3IgaXQgKi8KKwkgIEFTU0VSVCAoYWxsb2MgPj0gMipzaXplKTsKKwkgIG1wbl9zcXIgKHhwLCBmcCwgIHNpemUpOworCSAgbXBuX3NxciAoZnAsIGYxcCwgc2l6ZSk7CisJICBzaXplICo9IDI7CisKKwkgIC8qIFNocmluayBpZiBwb3NzaWJsZS4gIFNpbmNlIGZwIHdhcyBub3JtYWxpemVkIHRoZXJlJ2xsIGJlIGF0CisJICAgICBtb3N0IG9uZSBoaWdoIHplcm8gb24geHAgKGFuZCBpZiB0aGVyZSBpcyB0aGVuIHRoZXJlJ3Mgb25lIG9uCisJICAgICB5cCB0b28pLiAgKi8KKwkgIEFTU0VSVCAoeHBbc2l6ZS0xXSAhPSAwIHx8IGZwW3NpemUtMV0gPT0gMCk7CisJICBzaXplIC09ICh4cFtzaXplLTFdID09IDApOworCSAgQVNTRVJUICh4cFtzaXplLTFdICE9IDApOyAgLyogb25seSBvbmUgeHAgaGlnaCB6ZXJvICovCisKKwkgIC8qIENhbGN1bGF0ZSBGWzJrLTFdID0gRltrXV4yICsgRltrLTFdXjIuICovCisJICBmMXBbc2l6ZV0gPSBtcG5fYWRkX24gKGYxcCwgeHAsIGZwLCBzaXplKTsKKworCSAgLyogQ2FsY3VsYXRlIEZbMmsrMV0gPSA0KkZba11eMiAtIEZbay0xXV4yICsgMiooLTEpXmsuCisJICAgICBuJm1hc2sgaXMgdGhlIGxvdyBiaXQgb2Ygb3VyIGltcGxpZWQgay4gICovCisKKwkgIEFTU0VSVCAoKGZwWzBdICYgMikgPT0gMCk7CisJICAvKiBmcCBpcyBGW2stMV1eMiA9PSAwIG9yIDEgbW9kIDQsIGxpa2UgYWxsIHNxdWFyZXMuICovCisJICBmcFswXSB8PSAobiAmIG1hc2sgPyAyIDogMCk7CQkJLyogcG9zc2libGUgLTIgKi8KKyNpZiBIQVZFX05BVElWRV9tcG5fcnNibHNoMl9uCisJICBmcFtzaXplXSA9IG1wbl9yc2Jsc2gyX24gKGZwLCBmcCwgeHAsIHNpemUpOworCSAgTVBOX0lOQ1JfVShmcCwgc2l6ZSArIDEsIChuICYgbWFzayA/IDAgOiAyKSk7CS8qIHBvc3NpYmxlICsyICovCisjZWxzZQorCSAgeworCSAgICBtcF9saW1iX3QgIGM7CisKKwkgICAgYyA9IG1wbl9sc2hpZnQgKHhwLCB4cCwgc2l6ZSwgMik7CisJICAgIHhwWzBdIHw9IChuICYgbWFzayA/IDAgOiAyKTsJLyogcG9zc2libGUgKzIgKi8KKwkgICAgYyAtPSBtcG5fc3ViX24gKGZwLCB4cCwgZnAsIHNpemUpOworCSAgICBmcFtzaXplXSA9IGM7CisJICB9CisjZW5kaWYKKwkgIEFTU0VSVCAoYWxsb2MgPj0gc2l6ZSsxKTsKKwkgIHNpemUgKz0gKGZwW3NpemVdICE9IDApOworCisJICAvKiBub3cgbiZtYXNrIGlzIHRoZSBuZXcgYml0IG9mIG4gYmVpbmcgY29uc2lkZXJlZCAqLworCSAgbWFzayA+Pj0gMTsKKworCSAgLyogQ2FsY3VsYXRlIEZbMmtdID0gRlsyaysxXSAtIEZbMmstMV0sIHJlcGxhY2luZyB0aGUgdW53YW50ZWQgb25lIG9mCisJICAgICBGWzJrKzFdIGFuZCBGWzJrLTFdLiAgKi8KKwkgIGlmIChuICYgbWFzaykKKwkgICAgQVNTRVJUX05PQ0FSUlkgKG1wbl9zdWJfbiAoZjFwLCBmcCwgZjFwLCBzaXplKSk7CisJICBlbHNlIHsKKwkgICAgQVNTRVJUX05PQ0FSUlkgKG1wbl9zdWJfbiAoIGZwLCBmcCwgZjFwLCBzaXplKSk7CisKKwkgICAgLyogQ2FuIGhhdmUgYSBoaWdoIHplcm8gYWZ0ZXIgcmVwbGFjaW5nIEZbMmsrMV0gd2l0aCBGWzJrXS4KKwkgICAgICAgZjFwIHdpbGwgaGF2ZSBhIGhpZ2ggemVybyBpZiBmcCBkb2VzLiAqLworCSAgICBBU1NFUlQgKGZwW3NpemUtMV0gIT0gMCB8fCBmMXBbc2l6ZS0xXSA9PSAwKTsKKwkgICAgc2l6ZSAtPSAoZnBbc2l6ZS0xXSA9PSAwKTsKKwkgIH0KKwl9CisgICAgICB3aGlsZSAobWFzayAhPSAxKTsKKworICAgICAgVE1QX0ZSRUU7CisgICAgfQorCisgIFRSQUNFIChwcmludGYgKCJkb25lIHNpemU9JWxkXG4iLCBzaXplKTsKKwkgbXBuX3RyYWNlICgiZnAgIiwgZnAsIHNpemUpOworCSBtcG5fdHJhY2UgKCJmMXAiLCBmMXAsIHNpemUpKTsKKworICByZXR1cm4gc2l6ZTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9maWIybS5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2ZpYjJtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlkMmI4NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9maWIybS5jCkBAIC0wLDAgKzEsMjUyIEBACisvKiBtcG5fZmliMm0gLS0gY2FsY3VsYXRlIEZpYm9uYWNjaSBudW1iZXJzLCBtb2R1bG8gbS4KKworQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IE1hcmNvIEJvZHJhdG8sIGJhc2VkIG9uIHRoZSBwcmV2aW91cworZmliMl91aS5jIGZpbGUuCisKKyAgIFRIRSBGVU5DVElPTlMgSU4gVEhJUyBGSUxFIEFSRSBGT1IgSU5URVJOQUwgVVNFIE9OTFkuICBUSEVZJ1JFIEFMTU9TVAorICAgQ0VSVEFJTiBUTyBCRSBTVUJKRUNUIFRPIElOQ09NUEFUSUJMRSBDSEFOR0VTIE9SIERJU0FQUEVBUiBDT01QTEVURUxZIElOCisgICBGVVRVUkUgR05VIE1QIFJFTEVBU0VTLgorCitDb3B5cmlnaHQgMjAwMSwgMjAwMiwgMjAwNSwgMjAwOSwgMjAxOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKyNpbmNsdWRlICJsb25nbG9uZy5oIgorCisKKy8qIFN0b3JlcyB8e2FwLG59LXticCxufXwgaW4ge3JwLG59LAorICAgcmV0dXJucyB0aGUgc2lnbiBvZiB7YXAsbn0te2JwLG59LiAqLworc3RhdGljIGludAorYWJzX3N1Yl9uIChtcF9wdHIgcnAsIG1wX3NyY3B0ciBhcCwgbXBfc3JjcHRyIGJwLCBtcF9zaXplX3QgbikKK3sKKyAgbXBfbGltYl90ICB4LCB5OworICB3aGlsZSAoLS1uID49IDApCisgICAgeworICAgICAgeCA9IGFwW25dOworICAgICAgeSA9IGJwW25dOworICAgICAgaWYgKHggIT0geSkKKyAgICAgICAgeworICAgICAgICAgICsrbjsKKyAgICAgICAgICBpZiAoeCA+IHkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIEFTU0VSVF9OT0NBUlJZIChtcG5fc3ViX24gKHJwLCBhcCwgYnAsIG4pKTsKKyAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBBU1NFUlRfTk9DQVJSWSAobXBuX3N1Yl9uIChycCwgYnAsIGFwLCBuKSk7CisgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgcnBbbl0gPSAwOworICAgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIFN0b3JlIEZbbl0gYXQgZnAgYW5kIEZbbi0xXSBhdCBmMXAuICBCb3RoIGFyZSBjb21wdXRlZCBtb2R1bG8gbS4KKyAgIGZwIGFuZCBmMXAgc2hvdWxkIGhhdmUgcm9vbSBmb3IgbW4qMisxIGxpbWJzLgorCisgICBUaGUgc2lnbiBvZiBvbmUgb3IgYm90aCB0aGUgdmFsdWVzIG1heSBiZSBmbGlwcGVkIChuLUYsIGluc3RlYWQgb2YgRiksCisgICB0aGUgcmV0dXJuIHZhbHVlIGlzIDAgKHplcm8pIGlmIHRoZSBzaWducyBhcmUgY29oZXJlbnQgKGJvdGggcG9zaXRpdmUKKyAgIG9yIGJvdGggbmVnYXRpdmUpIGFuZCAxIChvbmUpIG90aGVyd2lzZS4KKworICAgTm90ZXM6CisKKyAgIEluIEZbMmsrMV0gd2l0aCBrIGV2ZW4sICsyIGlzIGFwcGxpZWQgdG8gNCpGW2tdXjIganVzdCBieSBPUmluZyBpbnRvIHRoZQorICAgbG93IGxpbWIuCisKKyAgIEluIEZbMmsrMV0gd2l0aCBrIG9kZCwgLTIgaXMgYXBwbGllZCB0byBGW2stMV1eMiBqdXN0IGJ5IE9SaW5nIGludG8gdGhlCisgICBsb3cgbGltYi4KKworICAgVE9ETzogU2hvdWxkIHt0cCwgMiAqIG1ufSBiZSBwYXNzZWQgYXMgYSBzY3JhdGNoIHBvaW50ZXI/CisgICBTaG91bGQgdGhlIGNhbGwgdG8gbXBuX2ZpYjJfdWkoKSBvYnRhaW4gKHVwIHRvKSAyKm1uIGxpbWJzPworKi8KKworaW50CittcG5fZmliMm0gKG1wX3B0ciBmcCwgbXBfcHRyIGYxcCwgbXBfc3JjcHRyIG5wLCBtcF9zaXplX3Qgbm4sIG1wX3NyY3B0ciBtcCwgbXBfc2l6ZV90IG1uKQoreworICB1bnNpZ25lZCBsb25nCW5maXJzdDsKKyAgbXBfbGltYl90CW5oOworICBtcF9iaXRjbnRfdAluYmk7CisgIG1wX3NpemVfdAlzbiwgZm47CisgIGludAkJZmNudCwgbmNudDsKKworICBBU1NFUlQgKCEgTVBOX09WRVJMQVBfUCAoZnAsIE1BWCgyKm1uKzEsNSksIGYxcCwgTUFYKDIqbW4rMSw1KSkpOworICBBU1NFUlQgKG5uID4gMCAmJiBucFtubiAtIDFdICE9IDApOworCisgIC8qIEVzdGltYXRlIHRoZSBtYXhpbWFsIG4gc3VjaCB0aGF0IGZpYm9uYWNjaShuKSBmaXRzIGluIG1uIGxpbWJzLiAqLworI2lmIEdNUF9OVU1CX0JJVFMgJSAxNiA9PSAwCisgIGlmIChVTkxJS0VMWSAoVUxPTkdfTUFYIC8gKDIzICogKEdNUF9OVU1CX0JJVFMgLyAxNikpIDw9IG1uKSkKKyAgICBuZmlyc3QgPSBVTE9OR19NQVg7CisgIGVsc2UKKyAgICBuZmlyc3QgPSBtbiAqICgyMyAqIChHTVBfTlVNQl9CSVRTIC8gMTYpKTsKKyNlbHNlCisgIHsKKyAgICBtcF9iaXRjbnRfdAltYmk7CisgICAgbWJpID0gKG1wX2JpdGNudF90KSBtbiAqIEdNUF9OVU1CX0JJVFM7CisKKyAgICBpZiAoVU5MSUtFTFkgKFVMT05HX01BWCAvIDIzIDwgbWJpKSkKKyAgICAgIHsKKwlpZiAoVU5MSUtFTFkgKFVMT05HX01BWCAvIDIzICogMTYgPD0gbWJpKSkKKwkgIG5maXJzdCA9IFVMT05HX01BWDsKKwllbHNlCisJICBuZmlyc3QgPSBtYmkgLyAxNiAqIDIzOworICAgICAgfQorICAgIGVsc2UKKyAgICAgIG5maXJzdCA9IG1iaSAqIDIzIC8gMTY7CisgIH0KKyNlbmRpZgorCisgIHNuID0gbm4gLSAxOworICBuaCA9IG5wW3NuXTsKKyAgY291bnRfbGVhZGluZ196ZXJvcyAobmNudCwgbmgpOworICBjb3VudF9sZWFkaW5nX3plcm9zIChmY250LCBuZmlyc3QpOworCisgIGlmIChmY250ID49IG5jbnQpCisgICAgeworICAgICAgbmNudCA9IGZjbnQgLSBuY250OworICAgICAgbmggPj49IG5jbnQ7CisgICAgfQorICBlbHNlIGlmIChzbiA+IDApCisgICAgeworICAgICAgbmNudCAtPSBmY250OworICAgICAgbmggPDw9IG5jbnQ7CisgICAgICBuY250ID0gR01QX05VTUJfQklUUyAtIG5jbnQ7CisgICAgICAtLXNuOworICAgICAgbmggfD0gbnBbc25dID4+IG5jbnQ7CisgICAgfQorICBlbHNlCisgICAgbmNudCA9IDA7CisKKyAgbmJpID0gc24gKiBHTVBfTlVNQl9CSVRTICsgbmNudDsKKyAgaWYgKG5oID4gbmZpcnN0KQorICAgIHsKKyAgICAgIG5oID4+PSAxOworICAgICAgKytuYmk7CisgICAgfQorCisgIEFTU0VSVCAobmggPD0gbmZpcnN0KTsKKyAgLyogVGFrZSBhIHN0YXJ0aW5nIHBhaXIgZnJvbSBtcG5fZmliMl91aS4gKi8KKyAgZm4gPSBtcG5fZmliMl91aSAoZnAsIGYxcCwgbmgpOworICBNUE5fWkVSTyAoZnAgKyBmbiwgbW4gLSBmbik7CisgIE1QTl9aRVJPIChmMXAgKyBmbiwgbW4gLSBmbik7CisKKyAgaWYgKG5iaSA9PSAwKQorICAgIHsKKyAgICAgIGlmIChmbiA9PSBtbikKKwl7CisJICBtcF9saW1iX3QgcXBbMl07CisJICBtcG5fdGRpdl9xciAocXAsIGZwLCAwLCBmcCwgZm4sIG1wLCBtbik7CisJICBtcG5fdGRpdl9xciAocXAsIGYxcCwgMCwgZjFwLCBmbiwgbXAsIG1uKTsKKwl9CisKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIG1wX3B0cgl0cDsKKyAgICAgIHVuc2lnbmVkCXBiID0gbmggJiAxOworICAgICAgaW50CW5lZzsKKyAgICAgIFRNUF9ERUNMOworCisgICAgICBUTVBfTUFSSzsKKworICAgICAgdHAgPSBUTVBfQUxMT0NfTElNQlMgKDIgKiBtbiArIChtbiA8IDIpKTsKKworICAgICAgZG8KKwl7CisJICBtcF9wdHIJcnA7CisJICAvKiBIZXJlIGZwPT1GW2tdIGFuZCBmMXA9PUZbay0xXSwgd2l0aCBrIGJlaW5nIHRoZSBiaXRzIG9mIG4gZnJvbQorCSAgICAgbmJpIHVwd2FyZHMuCisKKwkgICAgIEJhc2VkIG9uIHRoZSBuZXh0IGJpdCBvZiBuLCB3ZSdsbCBkb3VibGUgdG8gdGhlIHBhaXIKKwkgICAgIGZwPT1GWzJrXSxmMXA9PUZbMmstMV0gb3IgZnA9PUZbMmsrMV0sZjFwPT1GWzJrXSwgYWNjb3JkaW5nIGFzCisJICAgICB0aGF0IGJpdCBpcyAwIG9yIDEgcmVzcGVjdGl2ZWx5LiAgKi8KKworCSAgbXBuX3NxciAodHAsIGZwLCAgbW4pOworCSAgbXBuX3NxciAoZnAsIGYxcCwgbW4pOworCisJICAvKiBDYWxjdWxhdGUgRlsyay0xXSA9IEZba11eMiArIEZbay0xXV4yLiAqLworCSAgZjFwWzIgKiBtbl0gPSBtcG5fYWRkX24gKGYxcCwgdHAsIGZwLCAyICogbW4pOworCisJICAvKiBDYWxjdWxhdGUgRlsyaysxXSA9IDQqRltrXV4yIC0gRltrLTFdXjIgKyAyKigtMSleay4KKwkgICAgIHBiIGlzIHRoZSBsb3cgYml0IG9mIG91ciBpbXBsaWVkIGsuICAqLworCisJICAvKiBmcCBpcyBGW2stMV1eMiA9PSAwIG9yIDEgbW9kIDQsIGxpa2UgYWxsIHNxdWFyZXMuICovCisJICBBU1NFUlQgKChmcFswXSAmIDIpID09IDApOworCSAgQVNTRVJUIChwYiA9PSAocGIgJiAxKSk7CisJICBBU1NFUlQgKChmcFswXSArIChwYiA/IDIgOiAwKSkgPT0gKGZwWzBdIHwgKHBiIDw8IDEpKSk7CisJICBmcFswXSB8PSBwYiA8PCAxOwkJLyogcG9zc2libGUgLTIgKi8KKyNpZiBIQVZFX05BVElWRV9tcG5fcnNibHNoMl9uCisJICBmcFsyICogbW5dID0gMSArIG1wbl9yc2Jsc2gyX24gKGZwLCBmcCwgdHAsIDIgKiBtbik7CisJICBNUE5fSU5DUl9VKGZwLCAyICogbW4gKyAxLCAoMSBeIHBiKSA8PCAxKTsJLyogcG9zc2libGUgKzIgKi8KKwkgIGZwWzIgKiBtbl0gPSAoZnBbMiAqIG1uXSAtIDEpICYgR01QX05VTUJfTUFYOworI2Vsc2UKKwkgIHsKKwkgICAgbXBfbGltYl90ICBjOworCisJICAgIGMgPSBtcG5fbHNoaWZ0ICh0cCwgdHAsIDIgKiBtbiwgMik7CisJICAgIHRwWzBdIHw9ICgxIF4gcGIpIDw8IDE7CS8qIHBvc3NpYmxlICsyICovCisJICAgIGMgLT0gbXBuX3N1Yl9uIChmcCwgdHAsIGZwLCAyICogbW4pOworCSAgICBmcFsyICogbW5dID0gYyAmIEdNUF9OVU1CX01BWDsKKwkgIH0KKyNlbmRpZgorCSAgbmVnID0gZnBbMiAqIG1uXSA9PSBHTVBfTlVNQl9NQVg7CisKKwkgIC8qIENhbGN1bGF0ZSBGWzJrLTFdID0gRltrXV4yICsgRltrLTFdXjIgKi8KKwkgIC8qIENhbGN1bGF0ZSBGWzJrKzFdID0gNCpGW2tdXjIgLSBGW2stMV1eMiArIDIqKC0xKV5rICovCisKKwkgIC8qIENhbGN1bGF0ZSBGWzJrXSA9IEZbMmsrMV0gLSBGWzJrLTFdLCByZXBsYWNpbmcgdGhlIHVud2FudGVkIG9uZSBvZgorCSAgICAgRlsyaysxXSBhbmQgRlsyay0xXS4gICovCisJICAtLW5iaTsKKwkgIHBiID0gKG5wIFtuYmkgLyBHTVBfTlVNQl9CSVRTXSA+PiAobmJpICUgR01QX05VTUJfQklUUykpICYgMTsKKwkgIHJwID0gcGIgPyBmMXAgOiBmcDsKKwkgIGlmIChuZWcpCisJICAgIHsKKwkgICAgICAvKiBDYWxjdWxhdGUgLShGWzJrKzFdIC0gRlsyay0xXSkgKi8KKwkgICAgICBycFsyICogbW5dID0gZjFwWzIgKiBtbl0gKyAxIC0gbXBuX3N1Yl9uIChycCwgZjFwLCBmcCwgMiAqIG1uKTsKKwkgICAgICBuZWcgPSAhIHBiOworCSAgICAgIGlmIChwYikgLyogZnAgbm90IG92ZXJ3cml0dGVuLCBuZWdhdGUgaXQuICovCisJCWZwIFsyICogbW5dID0gMSBeIG1wbl9uZWcgKGZwLCBmcCwgMiAqIG1uKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgbmVnID0gYWJzX3N1Yl9uIChycCwgZnAsIGYxcCwgMiAqIG1uICsgMSkgPCAwOworCSAgICB9CisKKwkgIG1wbl90ZGl2X3FyICh0cCwgZnAsIDAsIGZwLCAyICogbW4gKyAxLCBtcCwgbW4pOworCSAgbXBuX3RkaXZfcXIgKHRwLCBmMXAsIDAsIGYxcCwgMiAqIG1uICsgMSwgbXAsIG1uKTsKKwl9CisgICAgICB3aGlsZSAobmJpICE9IDApOworCisgICAgICBUTVBfRlJFRTsKKworICAgICAgcmV0dXJuIG5lZzsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvZ2NkLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvZ2NkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y5MmNiZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9nY2QuYwpAQCAtMCwwICsxLDI2NiBAQAorLyogbXBuL2djZC5jOiBtcG5fZ2NkIGZvciBnY2Qgb2YgdHdvIG9kZCBpbnRlZ2Vycy4KKworQ29weXJpZ2h0IDE5OTEsIDE5OTMtMTk5OCwgMjAwMC0yMDA1LCAyMDA4LCAyMDEwLCAyMDEyLCAyMDE5IEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisjaW5jbHVkZSAibG9uZ2xvbmcuaCIKKworLyogVXNlcyB0aGUgSEdDRCBvcGVyYXRpb24gZGVzY3JpYmVkIGluCisKKyAgICAgTi4gTcO2bGxlciwgT24gU2Now7ZuaGFnZSdzIGFsZ29yaXRobSBhbmQgc3VicXVhZHJhdGljIGludGVnZXIgZ2NkCisgICAgIGNvbXB1dGF0aW9uLCBNYXRoLiBDb21wLiA3NyAoMjAwOCksIDU4OS02MDcuCisKKyAgdG8gcmVkdWNlIGlucHV0cyB1bnRpbCB0aGV5IGFyZSBvZiBzaXplIGJlbG93IEdDRF9EQ19USFJFU0hPTEQsIGFuZAorICB0aGVuIHVzZXMgTGVobWVyJ3MgYWxnb3JpdGhtLgorKi8KKworLyogU29tZSByZWFzb25hYmxlIGNob2ljZXMgYXJlIG4gLyAyIChzYW1lIGFzIGluIGhnY2QpLCBhbmQgcCA9IChuICsKKyAqIDIpLzMsIHdoaWNoIGdpdmVzIGEgYmFsYW5jZWQgbXVsdGlwbGljYXRpb24gaW4KKyAqIG1wbl9oZ2NkX21hdHJpeF9hZGp1c3QuIEhvd2V2ZXIsIHAgPSAyIG4vMyBnaXZlcyBzbGlnaHRseSBiZXR0ZXIKKyAqIHBlcmZvcm1hbmNlLiBUaGUgbWF0cml4LXZlY3RvciBtdWx0aXBsaWNhdGlvbiBpcyB0aGVuCisgKiA0OjEtdW5iYWxhbmNlZCwgd2l0aCBtYXRyaXggZWxlbWVudHMgb2Ygc2l6ZSBuLzYsIGFuZCB2ZWN0b3IKKyAqIGVsZW1lbnRzIG9mIHNpemUgcCA9IDJuLzMuICovCisKKy8qIEZyb20gYW5hbHlzaXMgb2YgdGhlIHRoZW9yZXRpY2FsIHJ1bm5pbmcgdGltZSwgaXQgYXBwZWFycyB0aGF0IHdoZW4KKyAqIG11bHRpcGxpY2F0aW9uIHRha2VzIHRpbWUgTyhuXmFscGhhKSwgcCBzaG91bGQgYmUgY2hvc2VuIHNvIHRoYXQKKyAqIHRoZSByYXRpbyBvZiB0aGUgdGltZSBmb3IgdGhlIG1wbl9oZ2NkIGNhbGwsIGFuZCB0aGUgdGltZSBmb3IgdGhlCisgKiBtdWx0aXBsaWNhdGlvbiBpbiBtcG5faGdjZF9tYXRyaXhfYWRqdXN0LCBpcyByb3VnaGx5IDEvKGFscGhhIC0KKyAqIDEpLiAqLworI2lmZGVmIFRVTkVfR0NEX1AKKyNkZWZpbmUgUF9UQUJMRV9TSVpFIDEwMDAwCittcF9zaXplX3QgcF90YWJsZVtQX1RBQkxFX1NJWkVdOworI2RlZmluZSBDSE9PU0VfUChuKSAoIChuKSA8IFBfVEFCTEVfU0laRSA/IHBfdGFibGVbbl0gOiAyKihuKS8zKQorI2Vsc2UKKyNkZWZpbmUgQ0hPT1NFX1AobikgKDIqKG4pIC8gMykKKyNlbmRpZgorCitzdHJ1Y3QgZ2NkX2N0eAoreworICBtcF9wdHIgZ3A7CisgIG1wX3NpemVfdCBnbjsKK307CisKK3N0YXRpYyB2b2lkCitnY2RfaG9vayAodm9pZCAqcCwgbXBfc3JjcHRyIGdwLCBtcF9zaXplX3QgZ24sCisJICBtcF9zcmNwdHIgcXAsIG1wX3NpemVfdCBxbiwgaW50IGQpCit7CisgIHN0cnVjdCBnY2RfY3R4ICpjdHggPSAoc3RydWN0IGdjZF9jdHggKikgcDsKKyAgTVBOX0NPUFkgKGN0eC0+Z3AsIGdwLCBnbik7CisgIGN0eC0+Z24gPSBnbjsKK30KKworbXBfc2l6ZV90CittcG5fZ2NkIChtcF9wdHIgZ3AsIG1wX3B0ciB1cCwgbXBfc2l6ZV90IHVzaXplLCBtcF9wdHIgdnAsIG1wX3NpemVfdCBuKQoreworICBtcF9zaXplX3QgdGFsbG9jOworICBtcF9zaXplX3Qgc2NyYXRjaDsKKyAgbXBfc2l6ZV90IG1hdHJpeF9zY3JhdGNoOworCisgIHN0cnVjdCBnY2RfY3R4IGN0eDsKKyAgbXBfcHRyIHRwOworICBUTVBfREVDTDsKKworICBBU1NFUlQgKHVzaXplID49IG4pOworICBBU1NFUlQgKG4gPiAwKTsKKyAgQVNTRVJUICh2cFtuLTFdID4gMCk7CisKKyAgLyogRklYTUU6IENoZWNrIGZvciBzbWFsbCBzaXplcyBmaXJzdCwgYmVmb3JlIHNldHRpbmcgdXAgdGVtcG9yYXJ5CisgICAgIHN0b3JhZ2UgZXRjLiAqLworICB0YWxsb2MgPSBNUE5fR0NEX1NVQkRJVl9TVEVQX0lUQ0gobik7CisKKyAgLyogRm9yIGluaXRpYWwgZGl2aXNpb24gKi8KKyAgc2NyYXRjaCA9IHVzaXplIC0gbiArIDE7CisgIGlmIChzY3JhdGNoID4gdGFsbG9jKQorICAgIHRhbGxvYyA9IHNjcmF0Y2g7CisKKyNpZiBUVU5FX0dDRF9QCisgIGlmIChDSE9PU0VfUCAobikgPiAwKQorI2Vsc2UKKyAgaWYgKEFCT1ZFX1RIUkVTSE9MRCAobiwgR0NEX0RDX1RIUkVTSE9MRCkpCisjZW5kaWYKKyAgICB7CisgICAgICBtcF9zaXplX3QgaGdjZF9zY3JhdGNoOworICAgICAgbXBfc2l6ZV90IHVwZGF0ZV9zY3JhdGNoOworICAgICAgbXBfc2l6ZV90IHAgPSBDSE9PU0VfUCAobik7CisgICAgICBtcF9zaXplX3Qgc2NyYXRjaDsKKyNpZiBUVU5FX0dDRF9QCisgICAgICAvKiBXb3JzdCBjYXNlLCBzaW5jZSB3ZSBkb24ndCBndWFyYW50ZWUgdGhhdCBuIC0gQ0hPT1NFX1AobikKKwkgaXMgaW5jcmVhc2luZyAqLworICAgICAgbWF0cml4X3NjcmF0Y2ggPSBNUE5fSEdDRF9NQVRSSVhfSU5JVF9JVENIIChuKTsKKyAgICAgIGhnY2Rfc2NyYXRjaCA9IG1wbl9oZ2NkX2l0Y2ggKG4pOworICAgICAgdXBkYXRlX3NjcmF0Y2ggPSAyKihuIC0gMSk7CisjZWxzZQorICAgICAgbWF0cml4X3NjcmF0Y2ggPSBNUE5fSEdDRF9NQVRSSVhfSU5JVF9JVENIIChuIC0gcCk7CisgICAgICBoZ2NkX3NjcmF0Y2ggPSBtcG5faGdjZF9pdGNoIChuIC0gcCk7CisgICAgICB1cGRhdGVfc2NyYXRjaCA9IHAgKyBuIC0gMTsKKyNlbmRpZgorICAgICAgc2NyYXRjaCA9IG1hdHJpeF9zY3JhdGNoICsgTUFYKGhnY2Rfc2NyYXRjaCwgdXBkYXRlX3NjcmF0Y2gpOworICAgICAgaWYgKHNjcmF0Y2ggPiB0YWxsb2MpCisJdGFsbG9jID0gc2NyYXRjaDsKKyAgICB9CisKKyAgVE1QX01BUks7CisgIHRwID0gVE1QX0FMTE9DX0xJTUJTKHRhbGxvYyk7CisKKyAgaWYgKHVzaXplID4gbikKKyAgICB7CisgICAgICBtcG5fdGRpdl9xciAodHAsIHVwLCAwLCB1cCwgdXNpemUsIHZwLCBuKTsKKworICAgICAgaWYgKG1wbl96ZXJvX3AgKHVwLCBuKSkKKwl7CisJICBNUE5fQ09QWSAoZ3AsIHZwLCBuKTsKKwkgIGN0eC5nbiA9IG47CisJICBnb3RvIGRvbmU7CisJfQorICAgIH0KKworICBjdHguZ3AgPSBncDsKKworI2lmIFRVTkVfR0NEX1AKKyAgd2hpbGUgKENIT09TRV9QIChuKSA+IDApCisjZWxzZQorICB3aGlsZSAoQUJPVkVfVEhSRVNIT0xEIChuLCBHQ0RfRENfVEhSRVNIT0xEKSkKKyNlbmRpZgorICAgIHsKKyAgICAgIHN0cnVjdCBoZ2NkX21hdHJpeCBNOworICAgICAgbXBfc2l6ZV90IHAgPSBDSE9PU0VfUCAobik7CisgICAgICBtcF9zaXplX3QgbWF0cml4X3NjcmF0Y2ggPSBNUE5fSEdDRF9NQVRSSVhfSU5JVF9JVENIIChuIC0gcCk7CisgICAgICBtcF9zaXplX3Qgbm47CisgICAgICBtcG5faGdjZF9tYXRyaXhfaW5pdCAoJk0sIG4gLSBwLCB0cCk7CisgICAgICBubiA9IG1wbl9oZ2NkICh1cCArIHAsIHZwICsgcCwgbiAtIHAsICZNLCB0cCArIG1hdHJpeF9zY3JhdGNoKTsKKyAgICAgIGlmIChubiA+IDApCisJeworCSAgQVNTRVJUIChNLm4gPD0gKG4gLSBwIC0gMSkvMik7CisJICBBU1NFUlQgKE0ubiArIHAgPD0gKHAgKyBuIC0gMSkgLyAyKTsKKwkgIC8qIFRlbXBvcmFyeSBzdG9yYWdlIDIgKHAgKyBNLT5uKSA8PSBwICsgbiAtIDEuICovCisJICBuID0gbXBuX2hnY2RfbWF0cml4X2FkanVzdCAoJk0sIHAgKyBubiwgdXAsIHZwLCBwLCB0cCArIG1hdHJpeF9zY3JhdGNoKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgLyogVGVtcG9yYXJ5IHN0b3JhZ2UgbiAqLworCSAgbiA9IG1wbl9nY2Rfc3ViZGl2X3N0ZXAgKHVwLCB2cCwgbiwgMCwgZ2NkX2hvb2ssICZjdHgsIHRwKTsKKwkgIGlmIChuID09IDApCisJICAgIGdvdG8gZG9uZTsKKwl9CisgICAgfQorCisgIHdoaWxlIChuID4gMikKKyAgICB7CisgICAgICBzdHJ1Y3QgaGdjZF9tYXRyaXgxIE07CisgICAgICBtcF9saW1iX3QgdWgsIHVsLCB2aCwgdmw7CisgICAgICBtcF9saW1iX3QgbWFzazsKKworICAgICAgbWFzayA9IHVwW24tMV0gfCB2cFtuLTFdOworICAgICAgQVNTRVJUIChtYXNrID4gMCk7CisKKyAgICAgIGlmIChtYXNrICYgR01QX05VTUJfSElHSEJJVCkKKwl7CisJICB1aCA9IHVwW24tMV07IHVsID0gdXBbbi0yXTsKKwkgIHZoID0gdnBbbi0xXTsgdmwgPSB2cFtuLTJdOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBpbnQgc2hpZnQ7CisKKwkgIGNvdW50X2xlYWRpbmdfemVyb3MgKHNoaWZ0LCBtYXNrKTsKKwkgIHVoID0gTVBOX0VYVFJBQ1RfTlVNQiAoc2hpZnQsIHVwW24tMV0sIHVwW24tMl0pOworCSAgdWwgPSBNUE5fRVhUUkFDVF9OVU1CIChzaGlmdCwgdXBbbi0yXSwgdXBbbi0zXSk7CisJICB2aCA9IE1QTl9FWFRSQUNUX05VTUIgKHNoaWZ0LCB2cFtuLTFdLCB2cFtuLTJdKTsKKwkgIHZsID0gTVBOX0VYVFJBQ1RfTlVNQiAoc2hpZnQsIHZwW24tMl0sIHZwW24tM10pOworCX0KKworICAgICAgLyogVHJ5IGFuIG1wbl9oZ2NkMiBzdGVwICovCisgICAgICBpZiAobXBuX2hnY2QyICh1aCwgdWwsIHZoLCB2bCwgJk0pKQorCXsKKwkgIG4gPSBtcG5fbWF0cml4MjJfbXVsMV9pbnZlcnNlX3ZlY3RvciAoJk0sIHRwLCB1cCwgdnAsIG4pOworCSAgTVBfUFRSX1NXQVAgKHVwLCB0cCk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8qIG1wbl9oZ2NkMiBoYXMgZmFpbGVkLiBUaGVuIGVpdGhlciBvbmUgb2YgYSBvciBiIGlzIHZlcnkKKwkgICAgIHNtYWxsLCBvciB0aGUgZGlmZmVyZW5jZSBpcyB2ZXJ5IHNtYWxsLiBQZXJmb3JtIG9uZQorCSAgICAgc3VidHJhY3Rpb24gZm9sbG93ZWQgYnkgb25lIGRpdmlzaW9uLiAqLworCisJICAvKiBUZW1wb3Jhcnkgc3RvcmFnZSBuICovCisJICBuID0gbXBuX2djZF9zdWJkaXZfc3RlcCAodXAsIHZwLCBuLCAwLCAmZ2NkX2hvb2ssICZjdHgsIHRwKTsKKwkgIGlmIChuID09IDApCisJICAgIGdvdG8gZG9uZTsKKwl9CisgICAgfQorCisgIEFTU0VSVCh1cFtuLTFdIHwgdnBbbi0xXSk7CisKKyAgLyogRHVlIHRvIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24gZm9yIG1wbl9nY2QsIGF0IG1vc3Qgb25lIGNhbiBiZSBldmVuLiAqLworICBpZiAoKHVwWzBdICYgMSkgPT0gMCkKKyAgICBNUF9QVFJfU1dBUCAodXAsIHZwKTsKKyAgQVNTRVJUICgodXBbMF0gJiAxKSAhPSAwKTsKKworICB7CisgICAgbXBfbGltYl90IHUwLCB1MSwgdjAsIHYxOworICAgIG1wX2RvdWJsZV9saW1iX3QgZzsKKworICAgIHUwID0gdXBbMF07CisgICAgdjAgPSB2cFswXTsKKworICAgIGlmIChuID09IDEpCisgICAgICB7CisJaW50IGNudDsKKwljb3VudF90cmFpbGluZ196ZXJvcyAoY250LCB2MCk7CisJKmdwID0gbXBuX2djZF8xMSAodTAsIHYwID4+IGNudCk7CisJY3R4LmduID0gMTsKKwlnb3RvIGRvbmU7CisgICAgICB9CisKKyAgICB2MSA9IHZwWzFdOworICAgIGlmIChVTkxJS0VMWSAodjAgPT0gMCkpCisgICAgICB7CisJdjAgPSB2MTsKKwl2MSA9IDA7CisJLyogRklYTUU6IFdlIGNvdWxkIGludm9rZSBhIG1wbl9nY2RfMjEgaGVyZSwganVzdCBsaWtlIG1wbl9nY2RfMjIgY291bGQKKwkgICB3aGVuIHRoaXMgc2l0dWF0aW9uIG9jY3VycyBpbnRlcm5hbGx5LiAgKi8KKyAgICAgIH0KKyAgICBpZiAoKHYwICYgMSkgPT0gMCkKKyAgICAgIHsKKwlpbnQgY250OworCWNvdW50X3RyYWlsaW5nX3plcm9zIChjbnQsIHYwKTsKKwl2MCA9ICgodjEgPDwgKEdNUF9OVU1CX0JJVFMgLSBjbnQpKSAmIEdNUF9OVU1CX01BU0spIHwgKHYwID4+IGNudCk7CisJdjEgPj49IGNudDsKKyAgICAgIH0KKworICAgIHUxID0gdXBbMV07CisgICAgZyA9IG1wbl9nY2RfMjIgKHUxLCB1MCwgdjEsIHYwKTsKKyAgICBncFswXSA9IGcuZDA7CisgICAgZ3BbMV0gPSBnLmQxOworICAgIGN0eC5nbiA9IDEgKyAoZy5kMSA+IDApOworICB9Citkb25lOgorICBUTVBfRlJFRTsKKyAgcmV0dXJuIGN0eC5nbjsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9nY2RfMS5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2djZF8xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJiMTQyMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9nY2RfMS5jCkBAIC0wLDAgKzEsMTAzIEBACisvKiBtcG5fZ2NkXzEgLS0gbXBuIGFuZCBsaW1iIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yLgorCitDb3B5cmlnaHQgMTk5NCwgMTk5NiwgMjAwMCwgMjAwMSwgMjAwOSwgMjAxMiwgMjAxOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisjaW5jbHVkZSAibG9uZ2xvbmcuaCIKKworLyogRG9lcyBub3Qgd29yayBmb3IgVSA9PSAwIG9yIFYgPT0gMC4gIEl0IHdvdWxkIGJlIHRvdWdoIHRvIG1ha2UgaXQgd29yayBmb3IKKyAgIFYgPT0gMCBzaW5jZSBnY2QoeCwwKSA9IHgsIGFuZCBVIGRvZXMgbm90IGdlbmVyYWxseSBmaXQgaW4gYW4gbXBfbGltYl90LgorCisgICBUaGUgdGhyZXNob2xkIGZvciBkb2luZyB1JXYgd2hlbiBzaXplPT0xIHdpbGwgdmFyeSBieSBDUFUgYWNjb3JkaW5nIHRvCisgICB0aGUgc3BlZWQgb2YgYSBkaXZpc2lvbiBhbmQgdGhlIGNvZGUgZ2VuZXJhdGVkIGZvciB0aGUgbWFpbiBsb29wLiAgQW55CisgICB0dW5pbmcgZm9yIHRoaXMgaXMgbGVmdCB0byBhIENQVSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4gICovCisKK21wX2xpbWJfdAorbXBuX2djZF8xIChtcF9zcmNwdHIgdXAsIG1wX3NpemVfdCBzaXplLCBtcF9saW1iX3QgdmxpbWIpCit7CisgIG1wX2xpbWJfdCAgICAgIHVsaW1iOworICB1bnNpZ25lZCBsb25nICB6ZXJvX2JpdHMsIHVfbG93X3plcm9fYml0czsKKyAgaW50IGM7CisKKyAgQVNTRVJUIChzaXplID49IDEpOworICBBU1NFUlQgKHZsaW1iICE9IDApOworICBBU1NFUlRfTVBOX05PTlpFUk9fUCAodXAsIHNpemUpOworCisgIHVsaW1iID0gdXBbMF07CisKKyAgLyogTmVlZCB2bGltYiBvZGQgZm9yIG1vZGV4YWN0LCB3YW50IGl0IG9kZCB0byBnZXQgY29tbW9uIHplcm9zLiAqLworICBjb3VudF90cmFpbGluZ196ZXJvcyAoemVyb19iaXRzLCB2bGltYik7CisgIHZsaW1iID4+PSB6ZXJvX2JpdHM7CisKKyAgaWYgKHNpemUgPiAxKQorICAgIHsKKyAgICAgIC8qIE11c3QgZ2V0IGNvbW1vbiB6ZXJvcyBiZWZvcmUgdGhlIG1vZCByZWR1Y3Rpb24uICBJZiB1bGltYj09MCB0aGVuCisJIHZsaW1iIGFscmVhZHkgZ2l2ZXMgdGhlIGNvbW1vbiB6ZXJvcy4gICovCisgICAgICBpZiAodWxpbWIgIT0gMCkKKwl7CisJICBjb3VudF90cmFpbGluZ196ZXJvcyAodV9sb3dfemVyb19iaXRzLCB1bGltYik7CisJICB6ZXJvX2JpdHMgPSBNSU4gKHplcm9fYml0cywgdV9sb3dfemVyb19iaXRzKTsKKwl9CisKKyAgICAgIHVsaW1iID0gTVBOX01PRF9PUl9NT0RFWEFDVF8xX09ERCAodXAsIHNpemUsIHZsaW1iKTsKKyAgICAgIGlmICh1bGltYiA9PSAwKQorCWdvdG8gZG9uZTsKKworICAgICAgY291bnRfdHJhaWxpbmdfemVyb3MgKGMsIHVsaW1iKTsKKyAgICAgIHVsaW1iID4+PSBjOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIHNpemU9PTEsIHNvIHVwWzBdIT0wICovCisgICAgICBjb3VudF90cmFpbGluZ196ZXJvcyAodV9sb3dfemVyb19iaXRzLCB1bGltYik7CisgICAgICB1bGltYiA+Pj0gdV9sb3dfemVyb19iaXRzOworICAgICAgemVyb19iaXRzID0gTUlOICh6ZXJvX2JpdHMsIHVfbG93X3plcm9fYml0cyk7CisKKyAgICAgIC8qIG1ha2UgdSBiaWdnZXIgKi8KKyAgICAgIGlmICh2bGltYiA+IHVsaW1iKQorCU1QX0xJTUJfVF9TV0FQICh1bGltYiwgdmxpbWIpOworCisgICAgICAvKiBpZiB1IGlzIG11Y2ggYmlnZ2VyIHRoYW4gdiwgcmVkdWNlIHVzaW5nIGEgZGl2aXNpb24gcmF0aGVyIHRoYW4KKwkgY2hpcHBpbmcgYXdheSBhdCBpdCBiaXQtYnktYml0ICovCisgICAgICBpZiAoKHVsaW1iID4+IDE2KSA+IHZsaW1iKQorCXsKKwkgIHVsaW1iICU9IHZsaW1iOworCSAgaWYgKHVsaW1iID09IDApCisJICAgIGdvdG8gZG9uZTsKKworCSAgY291bnRfdHJhaWxpbmdfemVyb3MgKGMsIHVsaW1iKTsKKwkgIHVsaW1iID4+PSBjOworCX0KKyAgICB9CisKKyAgdmxpbWIgPSBtcG5fZ2NkXzExICh1bGltYiwgdmxpbWIpOworCisgZG9uZToKKyAgcmV0dXJuIHZsaW1iIDw8IHplcm9fYml0czsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9nY2RfMTEuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9nY2RfMTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTRlNDVjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2djZF8xMS5jCkBAIC0wLDAgKzEsNzQgQEAKKy8qIG1wbl9nY2RfMTEgLS0gbGltYiBncmVhdGVzdCBjb21tb24gZGl2aXNvci4KKworQ29weXJpZ2h0IDE5OTQsIDE5OTYsIDIwMDAsIDIwMDEsIDIwMDksIDIwMTIsIDIwMTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKyNpbmNsdWRlICJsb25nbG9uZy5oIgorCittcF9saW1iX3QKK21wbl9nY2RfMTEgKG1wX2xpbWJfdCB1LCBtcF9saW1iX3QgdikKK3sKKyAgQVNTRVJUICh1ICYgdiAmIDEpOworCisgIC8qIEluIHRoaXMgbG9vcCwgd2UgcmVwcmVzZW50IHRoZSBvZGQgbnVtYmVycyB1bGltYiBhbmQgdmxpbWIKKyAgICAgd2l0aG91dCB0aGUgcmVkdW5kYW50IGxlYXN0IHNpZ25pZmljYW50IG9uZSBiaXQuIFRoaXMgcmVkdWN0aW9uCisgICAgIGluIHNpemUgYnkgb25lIGJpdCBlbnN1cmVzIHRoYXQgdGhlIGhpZ2ggYml0IG9mIHQsIGJlbG93LCBpcyBzZXQKKyAgICAgaWYgYW5kIG9ubHkgaWYgdmxpbWIgPiB1bGltYi4gKi8KKworICB1ID4+PSAxOworICB2ID4+PSAxOworCisgIHdoaWxlICh1ICE9IHYpCisgICAgeworICAgICAgbXBfbGltYl90IHQ7CisgICAgICBtcF9saW1iX3Qgdmd0dTsKKyAgICAgIGludCBjOworCisgICAgICB0ID0gdSAtIHY7CisgICAgICB2Z3R1ID0gTElNQl9ISUdIQklUX1RPX01BU0sgKHQpOworCisgICAgICAvKiB2IDwtLSBtaW4gKHUsIHYpICovCisgICAgICB2ICs9ICh2Z3R1ICYgdCk7CisKKyAgICAgIC8qIHUgPC0tIHx1IC0gdnwgKi8KKyAgICAgIHUgPSAodCBeIHZndHUpIC0gdmd0dTsKKworICAgICAgY291bnRfdHJhaWxpbmdfemVyb3MgKGMsIHQpOworICAgICAgLyogV2UgaGF2ZSBjIDw9IEdNUF9MSU1CX0JJVFMgLSAyIGhlcmUsIHNvIHRoYXQKKworCSAgIHVsaW1iID4+PSAoYyArIDEpOworCisJIHdvdWxkIGJlIHNhZmUuIEJ1dCB1bmxpa2UgdGhlIGFkZGl0aW9uIGMgKyAxLCBhIHNlcGFyYXRlCisJIHNoaWZ0IGJ5IDEgaXMgaW5kZXBlbmRlbnQgb2YgYywgYW5kIGNhbiBiZSBleGVjdXRlZCBpbgorCSBwYXJhbGxlbCB3aXRoIGNvdW50X3RyYWlsaW5nX3plcm9zLiAqLworICAgICAgdSA9ICh1ID4+IDEpID4+IGM7CisgICAgfQorICByZXR1cm4gKHUgPDwgMSkgKyAxOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2djZF8yMi5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2djZF8yMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5N2YwOTYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvZ2NkXzIyLmMKQEAgLTAsMCArMSwxMzEgQEAKKy8qIG1wbl9nY2RfMjIgLS0gZG91YmxlIGxpbWIgZ3JlYXRlc3QgY29tbW9uIGRpdmlzb3IuCisKK0NvcHlyaWdodCAxOTk0LCAxOTk2LCAyMDAwLCAyMDAxLCAyMDA5LCAyMDEyLCAyMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKyNpbmNsdWRlICJsb25nbG9uZy5oIgorCisjaWYgR01QX05BSUxfQklUUyA+IDAKKyNlcnJvciBOYWlscyBub3Qgc3VwcG9ydGVkLgorI2VuZGlmCisKK21wX2RvdWJsZV9saW1iX3QKK21wbl9nY2RfMjIgKG1wX2xpbWJfdCB1MSwgbXBfbGltYl90IHUwLCBtcF9saW1iX3QgdjEsIG1wX2xpbWJfdCB2MCkKK3sKKyAgbXBfZG91YmxlX2xpbWJfdCBnOworICBBU1NFUlQgKHUwICYgdjAgJiAxKTsKKworICAvKiBJbXBsaWNpdCBsZWFzdCBzaWduaWZpY2FudCBiaXQgKi8KKyAgdTAgPSAodTAgPj4gMSkgfCAodTEgPDwgKEdNUF9MSU1CX0JJVFMgLSAxKSk7CisgIHUxID4+PSAxOworCisgIHYwID0gKHYwID4+IDEpIHwgKHYxIDw8IChHTVBfTElNQl9CSVRTIC0gMSkpOworICB2MSA+Pj0gMTsKKworICB3aGlsZSAodTEgfHwgdjEpIC8qIHUxID09IDAgY2FuIGhhcHBlbiBhdCBtb3N0IHR3aWNlIHBlciBjYWxsICovCisgICAgeworICAgICAgbXBfbGltYl90IHZndHUsIHQxLCB0MDsKKyAgICAgIHN1Yl9kZG1tc3MgKHQxLCB0MCwgdTEsIHUwLCB2MSwgdjApOworICAgICAgdmd0dSA9IExJTUJfSElHSEJJVF9UT19NQVNLKHQxKTsKKworICAgICAgaWYgKFVOTElLRUxZICh0MCA9PSAwKSkKKwl7CisJICBpZiAodDEgPT0gMCkKKwkgICAgeworCSAgICAgIGcuZDEgPSAodTEgPDwgMSkgfCAodTAgPj4gKEdNUF9MSU1CX0JJVFMgLSAxKSk7CisJICAgICAgZy5kMCA9ICh1MCA8PCAxKSB8IDE7CisJICAgICAgcmV0dXJuIGc7CisJICAgIH0KKwkgIGludCBjOworCSAgY291bnRfdHJhaWxpbmdfemVyb3MgKGMsIHQxKTsKKworCSAgLyogdjEgPSBtaW4gKHUxLCB2MSkgKi8KKwkgIHYxICs9ICh2Z3R1ICYgdDEpOworCSAgLyogdTAgPSB8dTEgLSB2MXwgKi8KKwkgIHUwID0gKHQxIF4gdmd0dSkgLSB2Z3R1OworCSAgQVNTRVJUIChjIDwgR01QX0xJTUJfQklUUyAtIDEpOworCSAgdTAgPj49IGMgKyAxOworCSAgdTEgPSAwOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBpbnQgYzsKKwkgIGNvdW50X3RyYWlsaW5nX3plcm9zIChjLCB0MCk7CisJICBjKys7CisJICAvKiBWIDwtLSBtaW4gKFUsIFYpLgorCisJICAgICBBc3NlbWJseSB2ZXJzaW9uIHNob3VsZCB1c2UgY21vdi4gQW5vdGhlciBhbHRlcm5hdGl2ZSwKKwkgICAgIGF2b2lkaW5nIGNhcnJ5IHByb3BhZ2F0aW9uLCB3b3VsZCBiZQorCisJICAgICB2MCArPSB2Z3R1ICYgdDA7IHYxICs9IHZ0Z3UgJiAodTEgLSB2MSk7CisJICAqLworCSAgYWRkX3NzYWFhYSAodjEsIHYwLCB2MSwgdjAsIHZndHUgJiB0MSwgdmd0dSAmIHQwKTsKKwkgIC8qIFUgIDwtLSAgfFUgLSBWfAorCSAgICAgTm8gY2FycnkgaGFuZGxpbmcgbmVlZGVkIGluIHRoaXMgY29uZGl0aW9uYWwgbmVnYXRpb24sCisJICAgICBzaW5jZSB0MCAhPSAwLiAqLworCSAgdTAgPSAodDAgXiB2Z3R1KSAtIHZndHU7CisJICB1MSA9IHQxIF4gdmd0dTsKKwkgIGlmIChVTkxJS0VMWSAoYyA9PSBHTVBfTElNQl9CSVRTKSkKKwkgICAgeworCSAgICAgIHUwID0gdTE7CisJICAgICAgdTEgPSAwOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICB1MCA9ICh1MCA+PiBjKSB8ICh1MSA8PCAoR01QX0xJTUJfQklUUyAtIGMpKTsKKwkgICAgICB1MSA+Pj0gYzsKKwkgICAgfQorCX0KKyAgICB9CisgIHdoaWxlICgodjAgfCB1MCkgJiBHTVBfTElNQl9ISUdIQklUKQorICAgIHsgLyogQXQgbW9zdCB0d28gaXRlcmF0aW9ucyAqLworICAgICAgbXBfbGltYl90IHZndHUsIHQwOworICAgICAgaW50IGM7CisgICAgICBzdWJfZGRtbXNzICh2Z3R1LCB0MCwgMCwgdTAsIDAsIHYwKTsKKyAgICAgIGlmIChVTkxJS0VMWSAodDAgPT0gMCkpCisJeworCSAgZy5kMSA9IHUwID4+IChHTVBfTElNQl9CSVRTIC0gMSk7CisJICBnLmQwID0gKHUwIDw8IDEpIHwgMTsKKwkgIHJldHVybiBnOworCX0KKworICAgICAgLyogdiA8LS0gbWluICh1LCB2KSAqLworICAgICAgdjAgKz0gKHZndHUgJiB0MCk7CisKKyAgICAgIC8qIHUgPC0tIHx1IC0gdnwgKi8KKyAgICAgIHUwID0gKHQwIF4gdmd0dSkgLSB2Z3R1OworCisgICAgICBjb3VudF90cmFpbGluZ196ZXJvcyAoYywgdDApOworICAgICAgdTAgPSAodTAgPj4gMSkgPj4gYzsKKyAgICB9CisKKyAgZy5kMCA9IG1wbl9nY2RfMTEgKCh1MCA8PCAxKSArIDEsICh2MCA8PCAxKSArIDEpOworICBnLmQxID0gMDsKKyAgcmV0dXJuIGc7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvZ2NkX3N1YmRpdl9zdGVwLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvZ2NkX3N1YmRpdl9zdGVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWMzYjg4ZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9nY2Rfc3ViZGl2X3N0ZXAuYwpAQCAtMCwwICsxLDIwNCBAQAorLyogZ2NkX3N1YmRpdl9zdGVwLmMuCisKKyAgIFRIRSBGVU5DVElPTlMgSU4gVEhJUyBGSUxFIEFSRSBJTlRFUk5BTCBXSVRIIE1VVEFCTEUgSU5URVJGQUNFUy4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggVEhFTSBUSFJPVUdIIERPQ1VNRU5URUQgSU5URVJGQUNFUy4gIElOIEZBQ1QsIElUIElTIEFMTU9TVAorICAgR1VBUkFOVEVFRCBUSEFUIFRIRVknTEwgQ0hBTkdFIE9SIERJU0FQUEVBUiBJTiBBIEZVVFVSRSBHTlUgTVAgUkVMRUFTRS4KKworQ29weXJpZ2h0IDIwMDMtMjAwNSwgMjAwOCwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgkJLyogZm9yIE5VTEwgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisjaW5jbHVkZSAibG9uZ2xvbmcuaCIKKworLyogVXNlZCB3aGVuIG1wbl9oZ2NkIG9yIG1wbl9oZ2NkMiBoYXMgZmFpbGVkLiBUaGVuIGVpdGhlciBvbmUgb2YgYSBvcgorICAgYiBpcyBzbWFsbCwgb3IgdGhlIGRpZmZlcmVuY2UgaXMgc21hbGwuIFBlcmZvcm0gb25lIHN1YnRyYWN0aW9uCisgICBmb2xsb3dlZCBieSBvbmUgZGl2aXNpb24uIFRoZSBub3JtYWwgY2FzZSBpcyB0byBjb21wdXRlIHRoZSByZWR1Y2VkCisgICBhIGFuZCBiLCBhbmQgcmV0dXJuIHRoZSBuZXcgc2l6ZS4KKworICAgSWYgcyA9PSAwICh1c2VkIGZvciBnY2QgYW5kIGdjZGV4dCksIHJldHVybnMgemVybyBpZiB0aGUgZ2NkIGlzCisgICBmb3VuZC4KKworICAgSWYgcyA+IDAsIGRvbid0IHJlZHVjZSB0byBzaXplIDw9IHMsIGFuZCByZXR1cm4gemVybyBpZiBubworICAgcmVkdWN0aW9uIGlzIHBvc3NpYmxlIChpZiBlaXRoZXIgYSwgYiBvciB8YS1ifCBpcyBvZiBzaXplIDw9IHMpLiAqLworCisvKiBUaGUgaG9vayBmdW5jdGlvbiBpcyBjYWxsZWQgYXMKKworICAgICBob29rKGN0eCwgZ3AsIGduLCBxcCwgcW4sIGQpCisKKyAgIGluIHRoZSBmb2xsb3dpbmcgY2FzZXM6CisKKyAgICsgSWYgQSA9IEIgYXQgdGhlIHN0YXJ0LCBHIGlzIHRoZSBnY2QsIFEgaXMgTlVMTCwgZCA9IC0xLgorCisgICArIElmIG9uZSBpbnB1dCBpcyB6ZXJvIGF0IHRoZSBzdGFydCwgRyBpcyB0aGUgZ2NkLCBRIGlzIE5VTEwsCisgICAgIGQgPSAwIGlmIEEgPSBHIGFuZCBkID0gMSBpZiBCID0gRy4KKworICAgT3RoZXJ3aXNlLCBpZiBkID0gMCB3ZSBoYXZlIGp1c3Qgc3VidHJhY3RlZCBhIG11bHRpcGxlIG9mIEEgZnJvbSBCLAorICAgYW5kIGlmIGQgPSAxIHdlIGhhdmUgc3VidHJhY3RlZCBhIG11bHRpcGxlIG9mIEIgZnJvbSBBLgorCisgICArIElmIEEgPSBCIGFmdGVyIHN1YnRyYWN0aW9uLCBHIGlzIHRoZSBnY2QsIFEgaXMgTlVMTC4KKworICAgKyBJZiB3ZSBnZXQgYSB6ZXJvIHJlbWFpbmRlciBhZnRlciBkaXZpc2lvbiwgRyBpcyB0aGUgZ2NkLCBRIGlzIHRoZQorICAgICBxdW90aWVudC4KKworICAgKyBPdGhlcndpc2UsIEcgaXMgTlVMTCwgUSBpcyB0aGUgcXVvdGllbnQgKG9mdGVuIDEpLgorCisgKi8KKworbXBfc2l6ZV90CittcG5fZ2NkX3N1YmRpdl9zdGVwIChtcF9wdHIgYXAsIG1wX3B0ciBicCwgbXBfc2l6ZV90IG4sIG1wX3NpemVfdCBzLAorCQkgICAgIGdjZF9zdWJkaXZfc3RlcF9ob29rICpob29rLCB2b2lkICpjdHgsCisJCSAgICAgbXBfcHRyIHRwKQoreworICBzdGF0aWMgY29uc3QgbXBfbGltYl90IG9uZSA9IENOU1RfTElNQigxKTsKKyAgbXBfc2l6ZV90IGFuLCBibiwgcW47CisKKyAgaW50IHN3YXBwZWQ7CisKKyAgQVNTRVJUIChuID4gMCk7CisgIEFTU0VSVCAoYXBbbi0xXSA+IDAgfHwgYnBbbi0xXSA+IDApOworCisgIGFuID0gYm4gPSBuOworICBNUE5fTk9STUFMSVpFIChhcCwgYW4pOworICBNUE5fTk9STUFMSVpFIChicCwgYm4pOworCisgIHN3YXBwZWQgPSAwOworCisgIC8qIEFycmFuZ2Ugc28gdGhhdCBhIDwgYiwgc3VidHJhY3QgYiAtPSBhLCBhbmQgbWFpbnRhaW4KKyAgICAgbm9ybWFsaXphdGlvbi4gKi8KKyAgaWYgKGFuID09IGJuKQorICAgIHsKKyAgICAgIGludCBjOworICAgICAgTVBOX0NNUCAoYywgYXAsIGJwLCBhbik7CisgICAgICBpZiAoVU5MSUtFTFkgKGMgPT0gMCkpCisJeworCSAgLyogRm9yIGdjZGV4dCwgcmV0dXJuIHRoZSBzbWFsbGVzdCBvZiB0aGUgdHdvIGNvZmFjdG9ycywgc28KKwkgICAgIHBhc3MgZCA9IC0xLiAqLworCSAgaWYgKHMgPT0gMCkKKwkgICAgaG9vayAoY3R4LCBhcCwgYW4sIE5VTEwsIDAsIC0xKTsKKwkgIHJldHVybiAwOworCX0KKyAgICAgIGVsc2UgaWYgKGMgPiAwKQorCXsKKwkgIE1QX1BUUl9TV0FQIChhcCwgYnApOworCSAgc3dhcHBlZCBePSAxOworCX0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAoYW4gPiBibikKKwl7CisJICBNUE5fUFRSX1NXQVAgKGFwLCBhbiwgYnAsIGJuKTsKKwkgIHN3YXBwZWQgXj0gMTsKKwl9CisgICAgfQorICBpZiAoYW4gPD0gcykKKyAgICB7CisgICAgICBpZiAocyA9PSAwKQorCWhvb2sgKGN0eCwgYnAsIGJuLCBOVUxMLCAwLCBzd2FwcGVkIF4gMSk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgQVNTRVJUX05PQ0FSUlkgKG1wbl9zdWIgKGJwLCBicCwgYm4sIGFwLCBhbikpOworICBNUE5fTk9STUFMSVpFIChicCwgYm4pOworICBBU1NFUlQgKGJuID4gMCk7CisKKyAgaWYgKGJuIDw9IHMpCisgICAgeworICAgICAgLyogVW5kbyBzdWJ0cmFjdGlvbi4gKi8KKyAgICAgIG1wX2xpbWJfdCBjeSA9IG1wbl9hZGQgKGJwLCBhcCwgYW4sIGJwLCBibik7CisgICAgICBpZiAoY3kgPiAwKQorCWJwW2FuXSA9IGN5OworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgIC8qIEFycmFuZ2Ugc28gdGhhdCBhIDwgYiAqLworICBpZiAoYW4gPT0gYm4pCisgICAgeworICAgICAgaW50IGM7CisgICAgICBNUE5fQ01QIChjLCBhcCwgYnAsIGFuKTsKKyAgICAgIGlmIChVTkxJS0VMWSAoYyA9PSAwKSkKKwl7CisJICBpZiAocyA+IDApCisJICAgIC8qIEp1c3QgcmVjb3JkIHN1YnRyYWN0aW9uIGFuZCByZXR1cm4gKi8KKwkgICAgaG9vayAoY3R4LCBOVUxMLCAwLCAmb25lLCAxLCBzd2FwcGVkKTsKKwkgIGVsc2UKKwkgICAgLyogRm91bmQgZ2NkLiAqLworCSAgICBob29rIChjdHgsIGJwLCBibiwgTlVMTCwgMCwgc3dhcHBlZCk7CisJICByZXR1cm4gMDsKKwl9CisKKyAgICAgIGhvb2sgKGN0eCwgTlVMTCwgMCwgJm9uZSwgMSwgc3dhcHBlZCk7CisKKyAgICAgIGlmIChjID4gMCkKKwl7CisJICBNUF9QVFJfU1dBUCAoYXAsIGJwKTsKKwkgIHN3YXBwZWQgXj0gMTsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaG9vayAoY3R4LCBOVUxMLCAwLCAmb25lLCAxLCBzd2FwcGVkKTsKKworICAgICAgaWYgKGFuID4gYm4pCisJeworCSAgTVBOX1BUUl9TV0FQIChhcCwgYW4sIGJwLCBibik7CisJICBzd2FwcGVkIF49IDE7CisJfQorICAgIH0KKworICBtcG5fdGRpdl9xciAodHAsIGJwLCAwLCBicCwgYm4sIGFwLCBhbik7CisgIHFuID0gYm4gLSBhbiArIDE7CisgIGJuID0gYW47CisgIE1QTl9OT1JNQUxJWkUgKGJwLCBibik7CisKKyAgaWYgKFVOTElLRUxZIChibiA8PSBzKSkKKyAgICB7CisgICAgICBpZiAocyA9PSAwKQorCXsKKwkgIGhvb2sgKGN0eCwgYXAsIGFuLCB0cCwgcW4sIHN3YXBwZWQpOworCSAgcmV0dXJuIDA7CisJfQorCisgICAgICAvKiBRdW90aWVudCBpcyBvbmUgdG9vIGxhcmdlLCBzbyBkZWNyZW1lbnQgaXQgYW5kIGFkZCBiYWNrIEEuICovCisgICAgICBpZiAoYm4gPiAwKQorCXsKKwkgIG1wX2xpbWJfdCBjeSA9IG1wbl9hZGQgKGJwLCBhcCwgYW4sIGJwLCBibik7CisJICBpZiAoY3kpCisJICAgIGJwW2FuKytdID0gY3k7CisJfQorICAgICAgZWxzZQorCU1QTl9DT1BZIChicCwgYXAsIGFuKTsKKworICAgICAgTVBOX0RFQ1JfVSAodHAsIHFuLCAxKTsKKyAgICB9CisKKyAgaG9vayAoY3R4LCBOVUxMLCAwLCB0cCwgcW4sIHN3YXBwZWQpOworICByZXR1cm4gYW47Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvZ2NkZXh0LmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvZ2NkZXh0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUwMTQ4MAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9nY2RleHQuYwpAQCAtMCwwICsxLDU1NyBAQAorLyogbXBuX2djZGV4dCAtLSBFeHRlbmRlZCBHcmVhdGVzdCBDb21tb24gRGl2aXNvci4KKworQ29weXJpZ2h0IDE5OTYsIDE5OTgsIDIwMDAtMjAwNSwgMjAwOCwgMjAwOSwgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorI2luY2x1ZGUgImxvbmdsb25nLmgiCisKKy8qIENvbXB1dGVzIChyO2IpID0gKGE7IGIpIE0uIFJlc3VsdCBpcyBvZiBzaXplIG4gKyBNLT5uICsvLSAxLCBhbmQKKyAgIHRoZSBzaXplIGlzIHJldHVybmVkIChpZiBpbnB1dHMgYXJlIG5vbi1ub3JtYWxpemVkLCByZXN1bHQgbWF5IGJlCisgICBub24tbm9ybWFsaXplZCB0b28pLiBUZW1wb3Jhcnkgc3BhY2UgbmVlZGVkIGlzIE0tPm4gKyBuLgorICovCitzdGF0aWMgc2l6ZV90CitoZ2NkX211bF9tYXRyaXhfdmVjdG9yIChzdHJ1Y3QgaGdjZF9tYXRyaXggKk0sCisJCQltcF9wdHIgcnAsIG1wX3NyY3B0ciBhcCwgbXBfcHRyIGJwLCBtcF9zaXplX3QgbiwgbXBfcHRyIHRwKQoreworICBtcF9saW1iX3QgYWgsIGJoOworCisgIC8qIENvbXB1dGUgKHIsYikgPC0tICh1MDAgYSArIHUxMCBiLCB1MDEgYSArIHUxMSBiKSBhcworCisgICAgIHQgID0gdTAwICogYQorICAgICByICA9IHUxMCAqIGIKKyAgICAgciArPSB0OworCisgICAgIHQgID0gdTExICogYgorICAgICBiICA9IHUwMSAqIGEKKyAgICAgYiArPSB0OworICAqLworCisgIGlmIChNLT5uID49IG4pCisgICAgeworICAgICAgbXBuX211bCAodHAsIE0tPnBbMF1bMF0sIE0tPm4sIGFwLCBuKTsKKyAgICAgIG1wbl9tdWwgKHJwLCBNLT5wWzFdWzBdLCBNLT5uLCBicCwgbik7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgbXBuX211bCAodHAsIGFwLCBuLCBNLT5wWzBdWzBdLCBNLT5uKTsKKyAgICAgIG1wbl9tdWwgKHJwLCBicCwgbiwgTS0+cFsxXVswXSwgTS0+bik7CisgICAgfQorCisgIGFoID0gbXBuX2FkZF9uIChycCwgcnAsIHRwLCBuICsgTS0+bik7CisKKyAgaWYgKE0tPm4gPj0gbikKKyAgICB7CisgICAgICBtcG5fbXVsICh0cCwgTS0+cFsxXVsxXSwgTS0+biwgYnAsIG4pOworICAgICAgbXBuX211bCAoYnAsIE0tPnBbMF1bMV0sIE0tPm4sIGFwLCBuKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBtcG5fbXVsICh0cCwgYnAsIG4sIE0tPnBbMV1bMV0sIE0tPm4pOworICAgICAgbXBuX211bCAoYnAsIGFwLCBuLCBNLT5wWzBdWzFdLCBNLT5uKTsKKyAgICB9CisgIGJoID0gbXBuX2FkZF9uIChicCwgYnAsIHRwLCBuICsgTS0+bik7CisKKyAgbiArPSBNLT5uOworICBpZiAoIChhaCB8IGJoKSA+IDApCisgICAgeworICAgICAgcnBbbl0gPSBhaDsKKyAgICAgIGJwW25dID0gYmg7CisgICAgICBuKys7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogTm9ybWFsaXplICovCisgICAgICB3aGlsZSAoIChycFtuLTFdIHwgYnBbbi0xXSkgPT0gMCkKKwluLS07CisgICAgfQorCisgIHJldHVybiBuOworfQorCisjZGVmaW5lIENPTVBVVEVfVl9JVENIKG4pICgyKihuKSkKKworLyogQ29tcHV0ZXMgfHZ8ID0gfChnIC0gdSBhKXwgLyBiLCB3aGVyZSB1IG1heSBiZSBwb3NpdGl2ZSBvcgorICAgbmVnYXRpdmUsIGFuZCB2IGlzIG9mIHRoZSBvcHBvc2l0ZSBzaWduLiBtYXgoYSwgYikgaXMgb2Ygc2l6ZSBuLCB1IGFuZAorICAgdiBhdCBtb3N0IHNpemUgbiwgYW5kIHYgbXVzdCBoYXZlIHNwYWNlIGZvciBuKzEgbGltYnMuICovCitzdGF0aWMgbXBfc2l6ZV90Citjb21wdXRlX3YgKG1wX3B0ciB2cCwKKwkgICBtcF9zcmNwdHIgYXAsIG1wX3NyY3B0ciBicCwgbXBfc2l6ZV90IG4sCisJICAgbXBfc3JjcHRyIGdwLCBtcF9zaXplX3QgZ24sCisJICAgbXBfc3JjcHRyIHVwLCBtcF9zaXplX3QgdXNpemUsCisJICAgbXBfcHRyIHRwKQoreworICBtcF9zaXplX3Qgc2l6ZTsKKyAgbXBfc2l6ZV90IGFuOworICBtcF9zaXplX3QgYm47CisgIG1wX3NpemVfdCB2bjsKKworICBBU1NFUlQgKG4gPiAwKTsKKyAgQVNTRVJUIChnbiA+IDApOworICBBU1NFUlQgKHVzaXplICE9IDApOworCisgIHNpemUgPSBBQlMgKHVzaXplKTsKKyAgQVNTRVJUIChzaXplIDw9IG4pOworICBBU1NFUlQgKHVwW3NpemUtMV0gPiAwKTsKKworICBhbiA9IG47CisgIE1QTl9OT1JNQUxJWkUgKGFwLCBhbik7CisgIEFTU0VSVCAoZ24gPD0gYW4pOworCisgIGlmIChhbiA+PSBzaXplKQorICAgIG1wbl9tdWwgKHRwLCBhcCwgYW4sIHVwLCBzaXplKTsKKyAgZWxzZQorICAgIG1wbl9tdWwgKHRwLCB1cCwgc2l6ZSwgYXAsIGFuKTsKKworICBzaXplICs9IGFuOworCisgIGlmICh1c2l6ZSA+IDApCisgICAgeworICAgICAgLyogfHZ8ID0gLXYgPSAodSBhIC0gZykgLyBiICovCisKKyAgICAgIEFTU0VSVF9OT0NBUlJZIChtcG5fc3ViICh0cCwgdHAsIHNpemUsIGdwLCBnbikpOworICAgICAgTVBOX05PUk1BTElaRSAodHAsIHNpemUpOworICAgICAgaWYgKHNpemUgPT0gMCkKKwlyZXR1cm4gMDsKKyAgICB9CisgIGVsc2UKKyAgICB7IC8qIHx2fCA9IHYgPSAoZyAtIHUgYSkgLyBiID0gKGcgKyB8dXwgYSkgLyBiLiBTaW5jZSBnIDw9IGEsCisJIChnICsgfHV8IGEpIGFsd2F5cyBmaXRzIGluICh8dXNpemV8ICsgYW4pIGxpbWJzLiAqLworCisgICAgICBBU1NFUlRfTk9DQVJSWSAobXBuX2FkZCAodHAsIHRwLCBzaXplLCBncCwgZ24pKTsKKyAgICAgIHNpemUgLT0gKHRwW3NpemUgLSAxXSA9PSAwKTsKKyAgICB9CisKKyAgLyogTm93IGRpdmlkZSB0IC8gYi4gVGhlcmUgbXVzdCBiZSBubyByZW1haW5kZXIgKi8KKyAgYm4gPSBuOworICBNUE5fTk9STUFMSVpFIChicCwgYm4pOworICBBU1NFUlQgKHNpemUgPj0gYm4pOworCisgIHZuID0gc2l6ZSArIDEgLSBibjsKKyAgQVNTRVJUICh2biA8PSBuICsgMSk7CisKKyAgbXBuX2RpdmV4YWN0ICh2cCwgdHAsIHNpemUsIGJwLCBibik7CisgIHZuIC09ICh2cFt2bi0xXSA9PSAwKTsKKworICByZXR1cm4gdm47Cit9CisKKy8qIFRlbXBvcmFyeSBzdG9yYWdlOgorCisgICBJbml0aWFsIGRpdmlzaW9uOiBRdW90aWVudCBvZiBhdCBtb3N0IGFuIC0gbiArIDEgPD0gYW4gbGltYnMuCisKKyAgIFN0b3JhZ2UgZm9yIHUwIGFuZCB1MTogMihuKzEpLgorCisgICBTdG9yYWdlIGZvciBoZ2NkIG1hdHJpeCBNLCB3aXRoIGlucHV0IGNlaWwobi8yKTogNSAqIGNlaWwobi80KQorCisgICBTdG9yYWdlIGZvciBoZ2NkLCBpbnB1dCAobiArIDEpLzI6IDkgbi80IHBsdXMgc29tZS4KKworICAgV2hlbiBoZ2NkIHN1Y2NlZWRzOiAxICsgZmxvb3IoM24vMikgZm9yIGFkanVzdGluZyBhIGFuZCBiLCBhbmQgMihuKzEpIGZvciB0aGUgY29mYWN0b3JzLgorCisgICBXaGVuIGhnY2QgZmFpbHM6IDJuICsgMSBmb3IgbXBuX2djZGV4dF9zdWJkaXZfc3RlcCwgd2hpY2ggaXMgbGVzcy4KKworICAgRm9yIHRoZSBsZWhtZXIgY2FsbCBhZnRlciB0aGUgbG9vcCwgTGV0IFQgZGVub3RlCisgICBHQ0RFWFRfRENfVEhSRVNIT0xELiBGb3IgdGhlIGdjZGV4dF9sZWhtZXIgY2FsbCwgd2UgbmVlZCBUIGVhY2ggZm9yCisgICB1LCBhIGFuZCBiLCBhbmQgNFQrMyBzY3JhdGNoIHNwYWNlLiBOZXh0LCBmb3IgY29tcHV0ZV92LCB3ZSBuZWVkIFQKKyAgIGZvciB1LCBUKzEgZm9yIHYgYW5kIDJUIHNjcmF0Y2ggc3BhY2UuIEluIGFsbCwgN1QgKyAzIGlzCisgICBzdWZmaWNpZW50IGZvciBib3RoIG9wZXJhdGlvbnMuCisKKyovCisKKy8qIE9wdGltYWwgY2hvaWNlIG9mIHAgc2VlbXMgZGlmZmljdWx0LiBJbiBlYWNoIGl0ZXJhdGlvbiB0aGUgZGl2aXNpb24KKyAqIG9mIHdvcmsgYmV0d2VlbiBoZ2NkIGFuZCB0aGUgdXBkYXRlcyBvZiB1MCBhbmQgdTEgZGVwZW5kcyBvbiB0aGUKKyAqIGN1cnJlbnQgc2l6ZSBvZiB0aGUgdS4gSXQgbWF5IGJlIGRlc2lyYWJsZSB0byB1c2UgYSBkaWZmZXJlbnQKKyAqIGNob2ljZSBvZiBwIGluIGVhY2ggaXRlcmF0aW9uLiBBbHNvIHRoZSBpbnB1dCBzaXplIHNlZW1zIHRvIG1hdHRlcjsKKyAqIGNob29zaW5nIHAgPSBuIC8gMyBpbiB0aGUgZmlyc3QgaXRlcmF0aW9uIHNlZW1zIHRvIGltcHJvdmUKKyAqIHBlcmZvcm1hbmNlIHNsaWdodGx5IGZvciBpbnB1dCBzaXplIGp1c3QgYWJvdmUgdGhlIHRocmVzaG9sZCwgYnV0CisgKiBkZWdyYWRlIHBlcmZvcm1hbmNlIGZvciBsYXJnZXIgaW5wdXRzLiAqLworI2RlZmluZSBDSE9PU0VfUF8xKG4pICgobikgLyAyKQorI2RlZmluZSBDSE9PU0VfUF8yKG4pICgobikgLyAzKQorCittcF9zaXplX3QKK21wbl9nY2RleHQgKG1wX3B0ciBncCwgbXBfcHRyIHVwLCBtcF9zaXplX3QgKnVzaXplcCwKKwkgICAgbXBfcHRyIGFwLCBtcF9zaXplX3QgYW4sIG1wX3B0ciBicCwgbXBfc2l6ZV90IG4pCit7CisgIG1wX3NpemVfdCB0YWxsb2M7CisgIG1wX3NpemVfdCBzY3JhdGNoOworICBtcF9zaXplX3QgbWF0cml4X3NjcmF0Y2g7CisgIG1wX3NpemVfdCB1YWxsb2MgPSBuICsgMTsKKworICBzdHJ1Y3QgZ2NkZXh0X2N0eCBjdHg7CisgIG1wX3NpemVfdCB1bjsKKyAgbXBfcHRyIHUwOworICBtcF9wdHIgdTE7CisKKyAgbXBfcHRyIHRwOworCisgIFRNUF9ERUNMOworCisgIEFTU0VSVCAoYW4gPj0gbik7CisgIEFTU0VSVCAobiA+IDApOworICBBU1NFUlQgKGJwW24tMV0gPiAwKTsKKworICBUTVBfTUFSSzsKKworICAvKiBGSVhNRTogQ2hlY2sgZm9yIHNtYWxsIHNpemVzIGZpcnN0LCBiZWZvcmUgc2V0dGluZyB1cCB0ZW1wb3JhcnkKKyAgICAgc3RvcmFnZSBldGMuICovCisgIHRhbGxvYyA9IE1QTl9HQ0RFWFRfTEVITUVSX05fSVRDSChuKTsKKworICAvKiBGb3IgaW5pdGlhbCBkaXZpc2lvbiAqLworICBzY3JhdGNoID0gYW4gLSBuICsgMTsKKyAgaWYgKHNjcmF0Y2ggPiB0YWxsb2MpCisgICAgdGFsbG9jID0gc2NyYXRjaDsKKworICBpZiAoQUJPVkVfVEhSRVNIT0xEIChuLCBHQ0RFWFRfRENfVEhSRVNIT0xEKSkKKyAgICB7CisgICAgICAvKiBGb3IgaGdjZCBsb29wLiAqLworICAgICAgbXBfc2l6ZV90IGhnY2Rfc2NyYXRjaDsKKyAgICAgIG1wX3NpemVfdCB1cGRhdGVfc2NyYXRjaDsKKyAgICAgIG1wX3NpemVfdCBwMSA9IENIT09TRV9QXzEgKG4pOworICAgICAgbXBfc2l6ZV90IHAyID0gQ0hPT1NFX1BfMiAobik7CisgICAgICBtcF9zaXplX3QgbWluX3AgPSBNSU4ocDEsIHAyKTsKKyAgICAgIG1wX3NpemVfdCBtYXhfcCA9IE1BWChwMSwgcDIpOworICAgICAgbWF0cml4X3NjcmF0Y2ggPSBNUE5fSEdDRF9NQVRSSVhfSU5JVF9JVENIIChuIC0gbWluX3ApOworICAgICAgaGdjZF9zY3JhdGNoID0gbXBuX2hnY2RfaXRjaCAobiAtIG1pbl9wKTsKKyAgICAgIHVwZGF0ZV9zY3JhdGNoID0gbWF4X3AgKyBuIC0gMTsKKworICAgICAgc2NyYXRjaCA9IG1hdHJpeF9zY3JhdGNoICsgTUFYKGhnY2Rfc2NyYXRjaCwgdXBkYXRlX3NjcmF0Y2gpOworICAgICAgaWYgKHNjcmF0Y2ggPiB0YWxsb2MpCisJdGFsbG9jID0gc2NyYXRjaDsKKworICAgICAgLyogRmluYWwgbXBuX2djZGV4dF9sZWhtZXJfbiBjYWxsLiBOZWVkIHNwYWNlIGZvciB1IGFuZCBmb3IKKwkgY29waWVzIG9mIGEgYW5kIGIuICovCisgICAgICBzY3JhdGNoID0gTVBOX0dDREVYVF9MRUhNRVJfTl9JVENIIChHQ0RFWFRfRENfVEhSRVNIT0xEKQorCSsgMypHQ0RFWFRfRENfVEhSRVNIT0xEOworCisgICAgICBpZiAoc2NyYXRjaCA+IHRhbGxvYykKKwl0YWxsb2MgPSBzY3JhdGNoOworCisgICAgICAvKiBDb2ZhY3RvcnMgdTAgYW5kIHUxICovCisgICAgICB0YWxsb2MgKz0gMioobisxKTsKKyAgICB9CisKKyAgdHAgPSBUTVBfQUxMT0NfTElNQlModGFsbG9jKTsKKworICBpZiAoYW4gPiBuKQorICAgIHsKKyAgICAgIG1wbl90ZGl2X3FyICh0cCwgYXAsIDAsIGFwLCBhbiwgYnAsIG4pOworCisgICAgICBpZiAobXBuX3plcm9fcCAoYXAsIG4pKQorCXsKKwkgIE1QTl9DT1BZIChncCwgYnAsIG4pOworCSAgKnVzaXplcCA9IDA7CisJICBUTVBfRlJFRTsKKwkgIHJldHVybiBuOworCX0KKyAgICB9CisKKyAgaWYgKEJFTE9XX1RIUkVTSE9MRCAobiwgR0NERVhUX0RDX1RIUkVTSE9MRCkpCisgICAgeworICAgICAgbXBfc2l6ZV90IGduID0gbXBuX2djZGV4dF9sZWhtZXJfbihncCwgdXAsIHVzaXplcCwgYXAsIGJwLCBuLCB0cCk7CisKKyAgICAgIFRNUF9GUkVFOworICAgICAgcmV0dXJuIGduOworICAgIH0KKworICBNUE5fWkVSTyAodHAsIDIqdWFsbG9jKTsKKyAgdTAgPSB0cDsgdHAgKz0gdWFsbG9jOworICB1MSA9IHRwOyB0cCArPSB1YWxsb2M7CisKKyAgY3R4LmdwID0gZ3A7CisgIGN0eC51cCA9IHVwOworICBjdHgudXNpemUgPSB1c2l6ZXA7CisKKyAgeworICAgIC8qIEZvciB0aGUgZmlyc3QgaGdjZCBjYWxsLCB0aGVyZSBhcmUgbm8gdSB1cGRhdGVzLCBhbmQgaXQgbWFrZXMKKyAgICAgICBzb21lIHNlbnNlIHRvIHVzZSBhIGRpZmZlcmVudCBjaG9pY2UgZm9yIHAuICovCisKKyAgICAvKiBGSVhNRTogV2UgY291bGQgdHJpbSB1c2Ugb2YgdGVtcG9yYXJ5IHN0b3JhZ2UsIHNpbmNlIHUwIGFuZCB1MQorICAgICAgIGFyZSBub3QgdXNlZCB5ZXQuIEZvciB0aGUgaGdjZCBjYWxsLCB3ZSBjb3VsZCBzd2FwIGluIHRoZSB1MAorICAgICAgIGFuZCB1MSBwb2ludGVycyBmb3IgdGhlIHJlbGV2YW50IG1hdHJpeCBlbGVtZW50cy4gKi8KKworICAgIHN0cnVjdCBoZ2NkX21hdHJpeCBNOworICAgIG1wX3NpemVfdCBwID0gQ0hPT1NFX1BfMSAobik7CisgICAgbXBfc2l6ZV90IG5uOworCisgICAgbXBuX2hnY2RfbWF0cml4X2luaXQgKCZNLCBuIC0gcCwgdHApOworICAgIG5uID0gbXBuX2hnY2QgKGFwICsgcCwgYnAgKyBwLCBuIC0gcCwgJk0sIHRwICsgbWF0cml4X3NjcmF0Y2gpOworICAgIGlmIChubiA+IDApCisgICAgICB7CisJQVNTRVJUIChNLm4gPD0gKG4gLSBwIC0gMSkvMik7CisJQVNTRVJUIChNLm4gKyBwIDw9IChwICsgbiAtIDEpIC8gMik7CisKKwkvKiBUZW1wb3Jhcnkgc3RvcmFnZSAyIChwICsgTS0+bikgPD0gcCArIG4gLSAxICovCisJbiA9IG1wbl9oZ2NkX21hdHJpeF9hZGp1c3QgKCZNLCBwICsgbm4sIGFwLCBicCwgcCwgdHAgKyBtYXRyaXhfc2NyYXRjaCk7CisKKwlNUE5fQ09QWSAodTAsIE0ucFsxXVswXSwgTS5uKTsKKwlNUE5fQ09QWSAodTEsIE0ucFsxXVsxXSwgTS5uKTsKKwl1biA9IE0ubjsKKwl3aGlsZSAoICh1MFt1bi0xXSB8IHUxW3VuLTFdICkgPT0gMCkKKwkgIHVuLS07CisgICAgICB9CisgICAgZWxzZQorICAgICAgeworCS8qIG1wbl9oZ2NkIGhhcyBmYWlsZWQuIFRoZW4gZWl0aGVyIG9uZSBvZiBhIG9yIGIgaXMgdmVyeQorCSAgIHNtYWxsLCBvciB0aGUgZGlmZmVyZW5jZSBpcyB2ZXJ5IHNtYWxsLiBQZXJmb3JtIG9uZQorCSAgIHN1YnRyYWN0aW9uIGZvbGxvd2VkIGJ5IG9uZSBkaXZpc2lvbi4gKi8KKwl1MVswXSA9IDE7CisKKwljdHgudTAgPSB1MDsKKwljdHgudTEgPSB1MTsKKwljdHgudHAgPSB0cCArIG47IC8qIHVhbGxvYyAqLworCWN0eC51biA9IDE7CisKKwkvKiBUZW1wb3Jhcnkgc3RvcmFnZSBuICovCisJbiA9IG1wbl9nY2Rfc3ViZGl2X3N0ZXAgKGFwLCBicCwgbiwgMCwgbXBuX2djZGV4dF9ob29rLCAmY3R4LCB0cCk7CisJaWYgKG4gPT0gMCkKKwkgIHsKKwkgICAgVE1QX0ZSRUU7CisJICAgIHJldHVybiBjdHguZ247CisJICB9CisKKwl1biA9IGN0eC51bjsKKwlBU1NFUlQgKHVuIDwgdWFsbG9jKTsKKyAgICAgIH0KKyAgfQorCisgIHdoaWxlIChBQk9WRV9USFJFU0hPTEQgKG4sIEdDREVYVF9EQ19USFJFU0hPTEQpKQorICAgIHsKKyAgICAgIHN0cnVjdCBoZ2NkX21hdHJpeCBNOworICAgICAgbXBfc2l6ZV90IHAgPSBDSE9PU0VfUF8yIChuKTsKKyAgICAgIG1wX3NpemVfdCBubjsKKworICAgICAgbXBuX2hnY2RfbWF0cml4X2luaXQgKCZNLCBuIC0gcCwgdHApOworICAgICAgbm4gPSBtcG5faGdjZCAoYXAgKyBwLCBicCArIHAsIG4gLSBwLCAmTSwgdHAgKyBtYXRyaXhfc2NyYXRjaCk7CisgICAgICBpZiAobm4gPiAwKQorCXsKKwkgIG1wX3B0ciB0MDsKKworCSAgdDAgPSB0cCArIG1hdHJpeF9zY3JhdGNoOworCSAgQVNTRVJUIChNLm4gPD0gKG4gLSBwIC0gMSkvMik7CisJICBBU1NFUlQgKE0ubiArIHAgPD0gKHAgKyBuIC0gMSkgLyAyKTsKKworCSAgLyogVGVtcG9yYXJ5IHN0b3JhZ2UgMiAocCArIE0tPm4pIDw9IHAgKyBuIC0gMSAqLworCSAgbiA9IG1wbl9oZ2NkX21hdHJpeF9hZGp1c3QgKCZNLCBwICsgbm4sIGFwLCBicCwgcCwgdDApOworCisJICAvKiBCeSB0aGUgc2FtZSBhbmFseXNpcyBhcyBmb3IgbXBuX2hnY2RfbWF0cml4X211bCAqLworCSAgQVNTRVJUIChNLm4gKyB1biA8PSB1YWxsb2MpOworCisJICAvKiBGSVhNRTogVGhpcyBjb3B5aW5nIGNvdWxkIGJlIGF2b2lkZWQgYnkgc29tZSBzd2FwcGluZyBvZgorCSAgICogcG9pbnRlcnMuIE1heSBuZWVkIG1vcmUgdGVtcG9yYXJ5IHN0b3JhZ2UsIHRob3VnaC4gKi8KKwkgIE1QTl9DT1BZICh0MCwgdTAsIHVuKTsKKworCSAgLyogVGVtcG9yYXJ5IHN0b3JhZ2UgdWFsbG9jICovCisJICB1biA9IGhnY2RfbXVsX21hdHJpeF92ZWN0b3IgKCZNLCB1MCwgdDAsIHUxLCB1biwgdDAgKyB1bik7CisKKwkgIEFTU0VSVCAodW4gPCB1YWxsb2MpOworCSAgQVNTRVJUICggKHUwW3VuLTFdIHwgdTFbdW4tMV0pID4gMCk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8qIG1wbl9oZ2NkIGhhcyBmYWlsZWQuIFRoZW4gZWl0aGVyIG9uZSBvZiBhIG9yIGIgaXMgdmVyeQorCSAgICAgc21hbGwsIG9yIHRoZSBkaWZmZXJlbmNlIGlzIHZlcnkgc21hbGwuIFBlcmZvcm0gb25lCisJICAgICBzdWJ0cmFjdGlvbiBmb2xsb3dlZCBieSBvbmUgZGl2aXNpb24uICovCisJICBjdHgudTAgPSB1MDsKKwkgIGN0eC51MSA9IHUxOworCSAgY3R4LnRwID0gdHAgKyBuOyAvKiB1YWxsb2MgKi8KKwkgIGN0eC51biA9IHVuOworCisJICAvKiBUZW1wb3Jhcnkgc3RvcmFnZSBuICovCisJICBuID0gbXBuX2djZF9zdWJkaXZfc3RlcCAoYXAsIGJwLCBuLCAwLCBtcG5fZ2NkZXh0X2hvb2ssICZjdHgsIHRwKTsKKwkgIGlmIChuID09IDApCisJICAgIHsKKwkgICAgICBUTVBfRlJFRTsKKwkgICAgICByZXR1cm4gY3R4LmduOworCSAgICB9CisKKwkgIHVuID0gY3R4LnVuOworCSAgQVNTRVJUICh1biA8IHVhbGxvYyk7CisJfQorICAgIH0KKyAgLyogV2UgaGF2ZSBBID0gLi4uIGEgKyAuLi4gYgorCSAgICAgQiA9ICB1MCBhICsgIHUxIGIKKworCSAgICAgYSA9IHUxICBBICsgLi4uIEIKKwkgICAgIGIgPSAtdTAgQSArIC4uLiBCCisKKyAgICAgd2l0aCBib3VuZHMKKworICAgICAgIHx1MHwsIHx1MXwgPD0gQiAvIG1pbihhLCBiKQorCisgICAgIFdlIGFsd2F5cyBoYXZlIHUxID4gMCwgYW5kIHUwID09IDAgaXMgcG9zc2libGUgb25seSBpZiB1MSA9PSAxLAorICAgICBpbiB3aGljaCBjYXNlIHRoZSBvbmx5IHJlZHVjdGlvbiBkb25lIHNvIGZhciBpcyBhID0gQSAtIGsgQiBmb3IKKyAgICAgc29tZSBrLgorCisgICAgIENvbXB1dGUgZyA9IHUgYSArIHYgYiA9ICh1IHUxIC0gdiB1MCkgQSArICguLi4pIEIKKyAgICAgSGVyZSwgdSwgdiBhcmUgYm91bmRlZCBieQorCisgICAgICAgfHV8IDw9IGIsCisgICAgICAgfHZ8IDw9IGEKKyAgKi8KKworICBBU1NFUlQgKCAoYXBbbi0xXSB8IGJwW24tMV0pID4gMCk7CisKKyAgaWYgKFVOTElLRUxZIChtcG5fY21wIChhcCwgYnAsIG4pID09IDApKQorICAgIHsKKyAgICAgIC8qIE11c3QgcmV0dXJuIHRoZSBzbWFsbGVzdCBjb2ZhY3RvciwgK3UxIG9yIC11MCAqLworICAgICAgaW50IGM7CisKKyAgICAgIE1QTl9DT1BZIChncCwgYXAsIG4pOworCisgICAgICBNUE5fQ01QIChjLCB1MCwgdTEsIHVuKTsKKyAgICAgIC8qIGMgPT0gMCBjYW4gaGFwcGVuIG9ubHkgd2hlbiBBID0gKDJrKzEpIEcsIEIgPSAyIEcuIEFuZCBpbgorCSB0aGlzIGNhc2Ugd2UgY2hvb3NlIHRoZSBjb2ZhY3RvciArIDEsIGNvcnJlc3BvbmRpbmcgdG8gRyA9IEEKKwkgLSBrIEIsIHJhdGhlciB0aGFuIC0xLCBjb3JyZXNwb25kaW5nIHRvIEcgPSAtIEEgKyAoaysxKSBCLiAqLworICAgICAgQVNTRVJUIChjICE9IDAgfHwgKHVuID09IDEgJiYgdTBbMF0gPT0gMSAmJiB1MVswXSA9PSAxKSk7CisgICAgICBpZiAoYyA8IDApCisJeworCSAgTVBOX05PUk1BTElaRSAodTAsIHVuKTsKKwkgIE1QTl9DT1BZICh1cCwgdTAsIHVuKTsKKwkgICp1c2l6ZXAgPSAtdW47CisJfQorICAgICAgZWxzZQorCXsKKwkgIE1QTl9OT1JNQUxJWkVfTk9UX1pFUk8gKHUxLCB1bik7CisJICBNUE5fQ09QWSAodXAsIHUxLCB1bik7CisJICAqdXNpemVwID0gdW47CisJfQorCisgICAgICBUTVBfRlJFRTsKKyAgICAgIHJldHVybiBuOworICAgIH0KKyAgZWxzZSBpZiAoVU5MSUtFTFkgKHUwWzBdID09IDApICYmIHVuID09IDEpCisgICAgeworICAgICAgbXBfc2l6ZV90IGduOworICAgICAgQVNTRVJUICh1MVswXSA9PSAxKTsKKworICAgICAgLyogZyA9IHUgYSArIHYgYiA9ICh1IHUxIC0gdiB1MCkgQSArICguLi4pIEIgPSB1IEEgKyAoLi4uKSBCICovCisgICAgICBnbiA9IG1wbl9nY2RleHRfbGVobWVyX24gKGdwLCB1cCwgdXNpemVwLCBhcCwgYnAsIG4sIHRwKTsKKworICAgICAgVE1QX0ZSRUU7CisgICAgICByZXR1cm4gZ247CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgbXBfc2l6ZV90IHUwbjsKKyAgICAgIG1wX3NpemVfdCB1MW47CisgICAgICBtcF9zaXplX3QgbGVobWVyX3VuOworICAgICAgbXBfc2l6ZV90IGxlaG1lcl92bjsKKyAgICAgIG1wX3NpemVfdCBnbjsKKworICAgICAgbXBfcHRyIGxlaG1lcl91cDsKKyAgICAgIG1wX3B0ciBsZWhtZXJfdnA7CisgICAgICBpbnQgbmVnYXRlOworCisgICAgICBsZWhtZXJfdXAgPSB0cDsgdHAgKz0gbjsKKworICAgICAgLyogQ2FsbCBtcG5fZ2NkZXh0X2xlaG1lcl9uIHdpdGggY29waWVzIG9mIGEgYW5kIGIuICovCisgICAgICBNUE5fQ09QWSAodHAsIGFwLCBuKTsKKyAgICAgIE1QTl9DT1BZICh0cCArIG4sIGJwLCBuKTsKKyAgICAgIGduID0gbXBuX2djZGV4dF9sZWhtZXJfbiAoZ3AsIGxlaG1lcl91cCwgJmxlaG1lcl91biwgdHAsIHRwICsgbiwgbiwgdHAgKyAyKm4pOworCisgICAgICB1MG4gPSB1bjsKKyAgICAgIE1QTl9OT1JNQUxJWkUgKHUwLCB1MG4pOworICAgICAgQVNTRVJUICh1MG4gPiAwKTsKKworICAgICAgaWYgKGxlaG1lcl91biA9PSAwKQorCXsKKwkgIC8qIHUgPT0gMCAgPT0+ICB2ID0gZyAvIGIgPT0gMSAgPT0+IGcgPSAtIHUwIEEgKyAoLi4uKSBCICovCisJICBNUE5fQ09QWSAodXAsIHUwLCB1MG4pOworCSAgKnVzaXplcCA9IC11MG47CisKKwkgIFRNUF9GUkVFOworCSAgcmV0dXJuIGduOworCX0KKworICAgICAgbGVobWVyX3ZwID0gdHA7CisgICAgICAvKiBDb21wdXRlIHYgPSAoZyAtIHUgYSkgLyBiICovCisgICAgICBsZWhtZXJfdm4gPSBjb21wdXRlX3YgKGxlaG1lcl92cCwKKwkJCSAgICAgYXAsIGJwLCBuLCBncCwgZ24sIGxlaG1lcl91cCwgbGVobWVyX3VuLCB0cCArIG4gKyAxKTsKKworICAgICAgaWYgKGxlaG1lcl91biA+IDApCisJbmVnYXRlID0gMDsKKyAgICAgIGVsc2UKKwl7CisJICBsZWhtZXJfdW4gPSAtbGVobWVyX3VuOworCSAgbmVnYXRlID0gMTsKKwl9CisKKyAgICAgIHUxbiA9IHVuOworICAgICAgTVBOX05PUk1BTElaRSAodTEsIHUxbik7CisgICAgICBBU1NFUlQgKHUxbiA+IDApOworCisgICAgICBBU1NFUlQgKGxlaG1lcl91biArIHUxbiA8PSB1YWxsb2MpOworICAgICAgQVNTRVJUIChsZWhtZXJfdm4gKyB1MG4gPD0gdWFsbG9jKTsKKworICAgICAgLyogV2UgbWF5IHN0aWxsIGhhdmUgdiA9PSAwICovCisKKyAgICAgIC8qIENvbXB1dGUgdSB1MCAqLworICAgICAgaWYgKGxlaG1lcl91biA8PSB1MW4pCisJLyogU2hvdWxkIGJlIHRoZSBjb21tb24gY2FzZSAqLworCW1wbl9tdWwgKHVwLCB1MSwgdTFuLCBsZWhtZXJfdXAsIGxlaG1lcl91bik7CisgICAgICBlbHNlCisJbXBuX211bCAodXAsIGxlaG1lcl91cCwgbGVobWVyX3VuLCB1MSwgdTFuKTsKKworICAgICAgdW4gPSB1MW4gKyBsZWhtZXJfdW47CisgICAgICB1biAtPSAodXBbdW4gLSAxXSA9PSAwKTsKKworICAgICAgaWYgKGxlaG1lcl92biA+IDApCisJeworCSAgbXBfbGltYl90IGN5OworCisJICAvKiBPdmVyd3JpdGVzIG9sZCB1MSB2YWx1ZSAqLworCSAgaWYgKGxlaG1lcl92biA8PSB1MG4pCisJICAgIC8qIFNob3VsZCBiZSB0aGUgY29tbW9uIGNhc2UgKi8KKwkgICAgbXBuX211bCAodTEsIHUwLCB1MG4sIGxlaG1lcl92cCwgbGVobWVyX3ZuKTsKKwkgIGVsc2UKKwkgICAgbXBuX211bCAodTEsIGxlaG1lcl92cCwgbGVobWVyX3ZuLCB1MCwgdTBuKTsKKworCSAgdTFuID0gdTBuICsgbGVobWVyX3ZuOworCSAgdTFuIC09ICh1MVt1MW4gLSAxXSA9PSAwKTsKKworCSAgaWYgKHUxbiA8PSB1bikKKwkgICAgeworCSAgICAgIGN5ID0gbXBuX2FkZCAodXAsIHVwLCB1biwgdTEsIHUxbik7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGN5ID0gbXBuX2FkZCAodXAsIHUxLCB1MW4sIHVwLCB1bik7CisJICAgICAgdW4gPSB1MW47CisJICAgIH0KKwkgIHVwW3VuXSA9IGN5OworCSAgdW4gKz0gKGN5ICE9IDApOworCisJICBBU1NFUlQgKHVuIDwgdWFsbG9jKTsKKwl9CisgICAgICAqdXNpemVwID0gbmVnYXRlID8gLXVuIDogdW47CisKKyAgICAgIFRNUF9GUkVFOworICAgICAgcmV0dXJuIGduOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9nY2RleHRfMS5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2djZGV4dF8xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIyMWE5MgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9nY2RleHRfMS5jCkBAIC0wLDAgKzEsMjc1IEBACisvKiBtcG5fZ2NkZXh0IC0tIEV4dGVuZGVkIEdyZWF0ZXN0IENvbW1vbiBEaXZpc29yLgorCitDb3B5cmlnaHQgMTk5NiwgMTk5OCwgMjAwMC0yMDA1LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKyNpbmNsdWRlICJsb25nbG9uZy5oIgorCisjaWZuZGVmIEdDREVYVF8xX1VTRV9CSU5BUlkKKyNkZWZpbmUgR0NERVhUXzFfVVNFX0JJTkFSWSAwCisjZW5kaWYKKworI2lmbmRlZiBHQ0RFWFRfMV9CSU5BUllfTUVUSE9ECisjZGVmaW5lIEdDREVYVF8xX0JJTkFSWV9NRVRIT0QgMgorI2VuZGlmCisKKyNpZiBHQ0RFWFRfMV9VU0VfQklOQVJZCisKK21wX2xpbWJfdAorbXBuX2djZGV4dF8xIChtcF9saW1iX3NpZ25lZF90ICpzcCwgbXBfbGltYl9zaWduZWRfdCAqdHAsCisJICAgICAgbXBfbGltYl90IHUsIG1wX2xpbWJfdCB2KQoreworICAvKiBNYWludGFpbgorCisgICAgIFUgPSB0MSB1ICsgdDAgdgorICAgICBWID0gczEgdSArIHMwIHYKKworICAgICB3aGVyZSBVLCBWIGFyZSB0aGUgaW5wdXRzICh3aXRob3V0IGFueSBzaGFyZWQgcG93ZXIgb2YgdHdvKSwKKyAgICAgYW5kIHRoZSBtYXRyaXggaGFzIGRldGVybWluYW50ILEgMl57c2hpZnR9LgorICAqLworICBtcF9saW1iX3QgczAgPSAxOworICBtcF9saW1iX3QgdDAgPSAwOworICBtcF9saW1iX3QgczEgPSAwOworICBtcF9saW1iX3QgdDEgPSAxOworICBtcF9saW1iX3QgdWc7CisgIG1wX2xpbWJfdCB2ZzsKKyAgbXBfbGltYl90IHVnaDsKKyAgbXBfbGltYl90IHZnaDsKKyAgdW5zaWduZWQgemVyb19iaXRzOworICB1bnNpZ25lZCBzaGlmdDsKKyAgdW5zaWduZWQgaTsKKyNpZiBHQ0RFWFRfMV9CSU5BUllfTUVUSE9EID09IDIKKyAgbXBfbGltYl90IGRldF9zaWduOworI2VuZGlmCisKKyAgQVNTRVJUICh1ID4gMCk7CisgIEFTU0VSVCAodiA+IDApOworCisgIGNvdW50X3RyYWlsaW5nX3plcm9zICh6ZXJvX2JpdHMsIHUgfCB2KTsKKyAgdSA+Pj0gemVyb19iaXRzOworICB2ID4+PSB6ZXJvX2JpdHM7CisKKyAgaWYgKCh1ICYgMSkgPT0gMCkKKyAgICB7CisgICAgICBjb3VudF90cmFpbGluZ196ZXJvcyAoc2hpZnQsIHUpOworICAgICAgdSA+Pj0gc2hpZnQ7CisgICAgICB0MSA8PD0gc2hpZnQ7CisgICAgfQorICBlbHNlIGlmICgodiAmIDEpID09IDApCisgICAgeworICAgICAgY291bnRfdHJhaWxpbmdfemVyb3MgKHNoaWZ0LCB2KTsKKyAgICAgIHYgPj49IHNoaWZ0OworICAgICAgczAgPDw9IHNoaWZ0OworICAgIH0KKyAgZWxzZQorICAgIHNoaWZ0ID0gMDsKKworI2lmIEdDREVYVF8xX0JJTkFSWV9NRVRIT0QgPT0gMQorICB3aGlsZSAodSAhPSB2KQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGNvdW50OworICAgICAgaWYgKHUgPiB2KQorCXsKKwkgIHUgLT0gdjsKKworCSAgY291bnRfdHJhaWxpbmdfemVyb3MgKGNvdW50LCB1KTsKKwkgIHUgPj49IGNvdW50OworCisJICB0MCArPSB0MTsgdDEgPDw9IGNvdW50OworCSAgczAgKz0gczE7IHMxIDw8PSBjb3VudDsKKwl9CisgICAgICBlbHNlCisJeworCSAgdiAtPSB1OworCisJICBjb3VudF90cmFpbGluZ196ZXJvcyAoY291bnQsIHYpOworCSAgdiA+Pj0gY291bnQ7CisKKwkgIHQxICs9IHQwOyB0MCA8PD0gY291bnQ7CisJICBzMSArPSBzMDsgczAgPDw9IGNvdW50OworCX0KKyAgICAgIHNoaWZ0ICs9IGNvdW50OworICAgIH0KKyNlbHNlCisjIGlmIEdDREVYVF8xX0JJTkFSWV9NRVRIT0QgPT0gMgorICB1ID4+PSAxOworICB2ID4+PSAxOworCisgIGRldF9zaWduID0gMDsKKworICB3aGlsZSAodSAhPSB2KQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGNvdW50OworICAgICAgbXBfbGltYl90IGQgPSAgdSAtIHY7CisgICAgICBtcF9saW1iX3Qgdmd0dSA9IExJTUJfSElHSEJJVF9UT19NQVNLIChkKTsKKyAgICAgIG1wX2xpbWJfdCBzeDsKKyAgICAgIG1wX2xpbWJfdCB0eDsKKworICAgICAgLyogV2hlbiB2IDw9IHUgKHZndHUgPT0gMCksIHRoZSB1cGRhdGVzIGFyZToKKworCSAgICh1OyB2KSAgIDwtLSAoICh1IC0gdikgPj4gY291bnQ7IHYpICAgIChkZXQgPSArKDE8PGNvdW50KSBmb3IgY29yci4gTSBmYWN0b3IpCisJICAgKHQxLCB0MCkgPC0tICh0MSA8PCBjb3VudCwgdDAgKyB0MSkKKworCSBhbmQgd2hlbiB2ID4gMCwgdGhlIHVwZGF0ZXMgYXJlCisKKwkgICAodTsgdikgICA8LS0gKCAodiAtIHUpID4+IGNvdW50OyB1KSAgICAoZGV0ID0gLSgxPDxjb3VudCkpCisJICAgKHQxLCB0MCkgPC0tICh0MCA8PCBjb3VudCwgdDAgKyB0MSkKKworCSBhbmQgc2ltaWxhcmx5IGZvciBzMSwgczAKKyAgICAgICovCisKKyAgICAgIC8qIHYgPC0tIG1pbiAodSwgdikgKi8KKyAgICAgIHYgKz0gKHZndHUgJiBkKTsKKworICAgICAgLyogdSA8LS0gfHUgLSB2fCAqLworICAgICAgdSA9IChkIF4gdmd0dSkgLSB2Z3R1OworCisgICAgICAvKiBOdW1iZXIgb2YgdHJhaWxpbmcgemVyb3MgaXMgdGhlIHNhbWUgbm8gbWF0dGVyIGlmIHdlIGxvb2sgYXQKKyAgICAgICAqIGQgb3IgdSwgYnV0IHVzaW5nIGQgZ2l2ZXMgbW9yZSBwYXJhbGxlbGlzbS4gKi8KKyAgICAgIGNvdW50X3RyYWlsaW5nX3plcm9zIChjb3VudCwgZCk7CisKKyAgICAgIGRldF9zaWduIF49IHZndHU7CisKKyAgICAgIHR4ID0gdmd0dSAmICh0MCAtIHQxKTsKKyAgICAgIHN4ID0gdmd0dSAmIChzMCAtIHMxKTsKKyAgICAgIHQwICs9IHQxOworICAgICAgczAgKz0gczE7CisgICAgICB0MSArPSB0eDsKKyAgICAgIHMxICs9IHN4OworCisgICAgICBjb3VudCsrOworICAgICAgdSA+Pj0gY291bnQ7CisgICAgICB0MSA8PD0gY291bnQ7CisgICAgICBzMSA8PD0gY291bnQ7CisgICAgICBzaGlmdCArPSBjb3VudDsKKyAgICB9CisgIHUgPSAodSA8PCAxKSArIDE7CisjIGVsc2UgLyogR0NERVhUXzFfQklOQVJZX01FVEhPRCA9PSAyICovCisjICBlcnJvciBVbmtub3duIEdDREVYVF8xX0JJTkFSWV9NRVRIT0QKKyMgZW5kaWYKKyNlbmRpZgorCisgIC8qIE5vdyB1ID0gdiA9IGcgPSBnY2QgKHUsdikuIENvbXB1dGUgVS9nIGFuZCBWL2cgKi8KKyAgdWcgPSB0MCArIHQxOworICB2ZyA9IHMwICsgczE7CisKKyAgdWdoID0gdWcvMiArICh1ZyAmIDEpOworICB2Z2ggPSB2Zy8yICsgKHZnICYgMSk7CisKKyAgLyogTm93IDJee3NoaWZ0fSBnID0gczAgVSAtIHQwIFYuIEdldCByaWQgb2YgdGhlIHBvd2VyIG9mIHR3bywgdXNpbmcKKyAgICAgczAgVSAtIHQwIFYgPSAoczAgKyBWL2cpIFUgLSAodDAgKyBVL2cpIFYuICovCisgIGZvciAoaSA9IDA7IGkgPCBzaGlmdDsgaSsrKQorICAgIHsKKyAgICAgIG1wX2xpbWJfdCBtYXNrID0gLSAoIChzMCB8IHQwKSAmIDEpOworCisgICAgICBzMCAvPSAyOworICAgICAgdDAgLz0gMjsKKyAgICAgIHMwICs9IG1hc2sgJiB2Z2g7CisgICAgICB0MCArPSBtYXNrICYgdWdoOworICAgIH0KKworICBBU1NFUlRfQUxXQVlTIChzMCA8PSB2Zyk7CisgIEFTU0VSVF9BTFdBWVMgKHQwIDw9IHVnKTsKKworICBpZiAoczAgPiB2ZyAtIHMwKQorICAgIHsKKyAgICAgIHMwIC09IHZnOworICAgICAgdDAgLT0gdWc7CisgICAgfQorI2lmIEdDREVYVF8xX0JJTkFSWV9NRVRIT0QgPT0gMgorICAvKiBDb25kaXRpb25hbCBuZWdhdGlvbi4gKi8KKyAgczAgPSAoczAgXiBkZXRfc2lnbikgLSBkZXRfc2lnbjsKKyAgdDAgPSAodDAgXiBkZXRfc2lnbikgLSBkZXRfc2lnbjsKKyNlbmRpZgorICAqc3AgPSBzMDsKKyAgKnRwID0gLXQwOworCisgIHJldHVybiB1IDw8IHplcm9fYml0czsKK30KKworI2Vsc2UgLyogIUdDREVYVF8xX1VTRV9CSU5BUlkgKi8KKworCisvKiBGSVhNRTogVGFrZXMgdHdvIHNpbmdsZS13b3JkIGxpbWJzLiBJdCBjb3VsZCBiZSBleHRlbmRlZCB0byBhCisgKiBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgYSBiaWdudW0gZm9yIHRoZSBmaXJzdCBpbnB1dCwgYW5kIG9ubHkKKyAqIHJldHVybnMgdGhlIGZpcnN0IGNvLWZhY3Rvci4gKi8KKworbXBfbGltYl90CittcG5fZ2NkZXh0XzEgKG1wX2xpbWJfc2lnbmVkX3QgKnVwLCBtcF9saW1iX3NpZ25lZF90ICp2cCwKKwkgICAgICBtcF9saW1iX3QgYSwgbXBfbGltYl90IGIpCit7CisgIC8qIE1haW50YWluCisKKyAgICAgYSA9ICB1MCBBICsgdjAgQgorICAgICBiID0gIHUxIEEgKyB2MSBCCisKKyAgICAgd2hlcmUgQSwgQiBhcmUgdGhlIG9yaWdpbmFsIGlucHV0cy4KKyAgKi8KKyAgbXBfbGltYl9zaWduZWRfdCB1MCA9IDE7CisgIG1wX2xpbWJfc2lnbmVkX3QgdjAgPSAwOworICBtcF9saW1iX3NpZ25lZF90IHUxID0gMDsKKyAgbXBfbGltYl9zaWduZWRfdCB2MSA9IDE7CisKKyAgQVNTRVJUIChhID4gMCk7CisgIEFTU0VSVCAoYiA+IDApOworCisgIGlmIChhIDwgYikKKyAgICBnb3RvIGRpdmlkZV9ieV9iOworCisgIGZvciAoOzspCisgICAgeworICAgICAgbXBfbGltYl90IHE7CisKKyAgICAgIHEgPSBhIC8gYjsKKyAgICAgIGEgLT0gcSAqIGI7CisKKyAgICAgIGlmIChhID09IDApCisJeworCSAgKnVwID0gdTE7CisJICAqdnAgPSB2MTsKKwkgIHJldHVybiBiOworCX0KKyAgICAgIHUwIC09IHEgKiB1MTsKKyAgICAgIHYwIC09IHEgKiB2MTsKKworICAgIGRpdmlkZV9ieV9iOgorICAgICAgcSA9IGIgLyBhOworICAgICAgYiAtPSBxICogYTsKKworICAgICAgaWYgKGIgPT0gMCkKKwl7CisJICAqdXAgPSB1MDsKKwkgICp2cCA9IHYwOworCSAgcmV0dXJuIGE7CisJfQorICAgICAgdTEgLT0gcSAqIHUwOworICAgICAgdjEgLT0gcSAqIHYwOworICAgIH0KK30KKyNlbmRpZiAvKiAhR0NERVhUXzFfVVNFX0JJTkFSWSAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2djZGV4dF9sZWhtZXIuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9nY2RleHRfbGVobWVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE0ZTg2ZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9nY2RleHRfbGVobWVyLmMKQEAgLTAsMCArMSwzMzYgQEAKKy8qIG1wbl9nY2RleHQgLS0gRXh0ZW5kZWQgR3JlYXRlc3QgQ29tbW9uIERpdmlzb3IuCisKK0NvcHlyaWdodCAxOTk2LCAxOTk4LCAyMDAwLTIwMDUsIDIwMDgsIDIwMDksIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKyNpbmNsdWRlICJsb25nbG9uZy5oIgorCisvKiBIZXJlLCBkIGlzIHRoZSBpbmRleCBvZiB0aGUgY29mYWN0b3IgdG8gdXBkYXRlLiBGSVhNRTogQ291bGQgdXNlIHFuCisgICA9IDAgZm9yIHRoZSBjb21tb24gY2FzZSBxID0gMS4gKi8KK3ZvaWQKK21wbl9nY2RleHRfaG9vayAodm9pZCAqcCwgbXBfc3JjcHRyIGdwLCBtcF9zaXplX3QgZ24sCisJCSBtcF9zcmNwdHIgcXAsIG1wX3NpemVfdCBxbiwgaW50IGQpCit7CisgIHN0cnVjdCBnY2RleHRfY3R4ICpjdHggPSAoc3RydWN0IGdjZGV4dF9jdHggKikgcDsKKyAgbXBfc2l6ZV90IHVuID0gY3R4LT51bjsKKworICBpZiAoZ3ApCisgICAgeworICAgICAgbXBfc3JjcHRyIHVwOworCisgICAgICBBU1NFUlQgKGduID4gMCk7CisgICAgICBBU1NFUlQgKGdwW2duLTFdID4gMCk7CisKKyAgICAgIE1QTl9DT1BZIChjdHgtPmdwLCBncCwgZ24pOworICAgICAgY3R4LT5nbiA9IGduOworCisgICAgICBpZiAoZCA8IDApCisJeworCSAgaW50IGM7CisKKwkgIC8qIE11c3QgcmV0dXJuIHRoZSBzbWFsbGVzdCBjb2ZhY3RvciwgK3UxIG9yIC11MCAqLworCSAgTVBOX0NNUCAoYywgY3R4LT51MCwgY3R4LT51MSwgdW4pOworCSAgQVNTRVJUIChjICE9IDAgfHwgKHVuID09IDEgJiYgY3R4LT51MFswXSA9PSAxICYmIGN0eC0+dTFbMF0gPT0gMSkpOworCisJICBkID0gYyA8IDA7CisJfQorCisgICAgICB1cCA9IGQgPyBjdHgtPnUwIDogY3R4LT51MTsKKworICAgICAgTVBOX05PUk1BTElaRSAodXAsIHVuKTsKKyAgICAgIE1QTl9DT1BZIChjdHgtPnVwLCB1cCwgdW4pOworCisgICAgICAqY3R4LT51c2l6ZSA9IGQgPyAtdW4gOiB1bjsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBtcF9saW1iX3QgY3k7CisgICAgICBtcF9wdHIgdTAgPSBjdHgtPnUwOworICAgICAgbXBfcHRyIHUxID0gY3R4LT51MTsKKworICAgICAgQVNTRVJUIChkID49IDApOworCisgICAgICBpZiAoZCkKKwlNUF9QVFJfU1dBUCAodTAsIHUxKTsKKworICAgICAgcW4gLT0gKHFwW3FuLTFdID09IDApOworCisgICAgICAvKiBVcGRhdGUgdTAgKz0gcSAgKiB1MSAqLworICAgICAgaWYgKHFuID09IDEpCisJeworCSAgbXBfbGltYl90IHEgPSBxcFswXTsKKworCSAgaWYgKHEgPT0gMSkKKwkgICAgLyogQSBjb21tb24gY2FzZS4gKi8KKwkgICAgY3kgPSBtcG5fYWRkX24gKHUwLCB1MCwgdTEsIHVuKTsKKwkgIGVsc2UKKwkgICAgY3kgPSBtcG5fYWRkbXVsXzEgKHUwLCB1MSwgdW4sIHEpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBtcF9zaXplX3QgdTFuOworCSAgbXBfcHRyIHRwOworCisJICB1MW4gPSB1bjsKKwkgIE1QTl9OT1JNQUxJWkUgKHUxLCB1MW4pOworCisJICBpZiAodTFuID09IDApCisJICAgIHJldHVybjsKKworCSAgLyogU2hvdWxkIGFsd2F5cyBoYXZlIHUxbiA9PSB1biBoZXJlLCBhbmQgdTEgPj0gdTAuIFRoZQorCSAgICAgcmVhc29uIGlzIHRoYXQgd2UgYWx0ZXJuYXRlIGFkZGluZyB1MCB0byB1MSBhbmQgdTEgdG8gdTAKKwkgICAgIChjb3JyZXNwb25kaW5nIHRvIHN1YnRyYWN0aW9ucyBhIC0gYiBhbmQgYiAtIGEpLCBhbmQgd2UKKwkgICAgIGNhbiBnZXQgYSBsYXJnZSBxdW90aWVudCBvbmx5IGp1c3QgYWZ0ZXIgYSBzd2l0Y2gsIHdoaWNoCisJICAgICBtZWFucyB0aGF0IHdlJ2xsIGFkZCAoYSBtdWx0aXBsZSBvZikgdGhlIGxhcmdlciB1IHRvIHRoZQorCSAgICAgc21hbGxlci4gKi8KKworCSAgdHAgPSBjdHgtPnRwOworCisJICBpZiAocW4gPiB1MW4pCisJICAgIG1wbl9tdWwgKHRwLCBxcCwgcW4sIHUxLCB1MW4pOworCSAgZWxzZQorCSAgICBtcG5fbXVsICh0cCwgdTEsIHUxbiwgcXAsIHFuKTsKKworCSAgdTFuICs9IHFuOworCSAgdTFuIC09IHRwW3Uxbi0xXSA9PSAwOworCisJICBpZiAodTFuID49IHVuKQorCSAgICB7CisJICAgICAgY3kgPSBtcG5fYWRkICh1MCwgdHAsIHUxbiwgdTAsIHVuKTsKKwkgICAgICB1biA9IHUxbjsKKwkgICAgfQorCSAgZWxzZQorCSAgICAvKiBOb3RlOiBVbmxpa2VseSBjYXNlLCBtYXliZSBuZXZlciBoYXBwZW5zPyAqLworCSAgICBjeSA9IG1wbl9hZGQgKHUwLCB1MCwgdW4sIHRwLCB1MW4pOworCisJfQorICAgICAgdTBbdW5dID0gY3k7CisgICAgICBjdHgtPnVuID0gdW4gKyAoY3kgPiAwKTsKKyAgICB9Cit9CisKKy8qIFRlbXBvcmFyeSBzdG9yYWdlOiAzKihuKzEpIGZvciB1LiBJZiBoZ2NkMiBzdWNjZWVkcywgd2UgbmVlZCBuIGZvcgorICAgdGhlIG1hdHJpeC12ZWN0b3IgbXVsdGlwbGljYXRpb24gYWRqdXN0aW5nIGEsIGIuIElmIGhnY2QgZmFpbHMsIHdlCisgICBuZWVkIGF0IG1vc3QgbiBmb3IgdGhlIHF1b3RpZW50IGFuZCBuKzEgZm9yIHRoZSB1IHVwZGF0ZSAocmV1c2luZworICAgdGhlIGV4dHJhIHUpLiBJbiBhbGwsIDRuICsgMy4gKi8KKworbXBfc2l6ZV90CittcG5fZ2NkZXh0X2xlaG1lcl9uIChtcF9wdHIgZ3AsIG1wX3B0ciB1cCwgbXBfc2l6ZV90ICp1c2l6ZSwKKwkJICAgICBtcF9wdHIgYXAsIG1wX3B0ciBicCwgbXBfc2l6ZV90IG4sCisJCSAgICAgbXBfcHRyIHRwKQoreworICBtcF9zaXplX3QgdWFsbG9jID0gbiArIDE7CisKKyAgLyogS2VlcHMgdHJhY2sgb2YgdGhlIHNlY29uZCByb3cgb2YgdGhlIHJlZHVjdGlvbiBtYXRyaXgKKyAgICoKKyAgICogICBNID0gKHYwLCB2MSA7IHUwLCB1MSkKKyAgICoKKyAgICogd2hpY2ggY29ycmVzcG9uZCB0byB0aGUgZmlyc3QgY29sdW1uIG9mIHRoZSBpbnZlcnNlCisgICAqCisgICAqICAgTV57LTF9ID0gKHUxLCAtdjE7IC11MCwgdjApCisgICAqCisgICAqIFRoaXMgaW1wbGllcyB0aGF0CisgICAqCisgICAqICAgYSA9ICB1MSBBIChtb2QgQikKKyAgICogICBiID0gLXUwIEEgKG1vZCBCKQorICAgKgorICAgKiB3aGVyZSBBLCBCIGRlbm90ZXMgdGhlIGlucHV0IHZhbHVlcy4KKyAgICovCisKKyAgc3RydWN0IGdjZGV4dF9jdHggY3R4OworICBtcF9zaXplX3QgdW47CisgIG1wX3B0ciB1MDsKKyAgbXBfcHRyIHUxOworICBtcF9wdHIgdTI7CisKKyAgTVBOX1pFUk8gKHRwLCAzKnVhbGxvYyk7CisgIHUwID0gdHA7IHRwICs9IHVhbGxvYzsKKyAgdTEgPSB0cDsgdHAgKz0gdWFsbG9jOworICB1MiA9IHRwOyB0cCArPSB1YWxsb2M7CisKKyAgdTFbMF0gPSAxOyB1biA9IDE7CisKKyAgY3R4LmdwID0gZ3A7CisgIGN0eC51cCA9IHVwOworICBjdHgudXNpemUgPSB1c2l6ZTsKKworICAvKiBGSVhNRTogSGFuZGxlIG4gPT0gMiBkaWZmZXJlbnRseSwgYWZ0ZXIgdGhlIGxvb3A/ICovCisgIHdoaWxlIChuID49IDIpCisgICAgeworICAgICAgc3RydWN0IGhnY2RfbWF0cml4MSBNOworICAgICAgbXBfbGltYl90IGFoLCBhbCwgYmgsIGJsOworICAgICAgbXBfbGltYl90IG1hc2s7CisKKyAgICAgIG1hc2sgPSBhcFtuLTFdIHwgYnBbbi0xXTsKKyAgICAgIEFTU0VSVCAobWFzayA+IDApOworCisgICAgICBpZiAobWFzayAmIEdNUF9OVU1CX0hJR0hCSVQpCisJeworCSAgYWggPSBhcFtuLTFdOyBhbCA9IGFwW24tMl07CisJICBiaCA9IGJwW24tMV07IGJsID0gYnBbbi0yXTsKKwl9CisgICAgICBlbHNlIGlmIChuID09IDIpCisJeworCSAgLyogV2UgdXNlIHRoZSBmdWxsIGlucHV0cyB3aXRob3V0IHRydW5jYXRpb24sIHNvIHdlIGNhbgorCSAgICAgc2FmZWx5IHNoaWZ0IGxlZnQuICovCisJICBpbnQgc2hpZnQ7CisKKwkgIGNvdW50X2xlYWRpbmdfemVyb3MgKHNoaWZ0LCBtYXNrKTsKKwkgIGFoID0gTVBOX0VYVFJBQ1RfTlVNQiAoc2hpZnQsIGFwWzFdLCBhcFswXSk7CisJICBhbCA9IGFwWzBdIDw8IHNoaWZ0OworCSAgYmggPSBNUE5fRVhUUkFDVF9OVU1CIChzaGlmdCwgYnBbMV0sIGJwWzBdKTsKKwkgIGJsID0gYnBbMF0gPDwgc2hpZnQ7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGludCBzaGlmdDsKKworCSAgY291bnRfbGVhZGluZ196ZXJvcyAoc2hpZnQsIG1hc2spOworCSAgYWggPSBNUE5fRVhUUkFDVF9OVU1CIChzaGlmdCwgYXBbbi0xXSwgYXBbbi0yXSk7CisJICBhbCA9IE1QTl9FWFRSQUNUX05VTUIgKHNoaWZ0LCBhcFtuLTJdLCBhcFtuLTNdKTsKKwkgIGJoID0gTVBOX0VYVFJBQ1RfTlVNQiAoc2hpZnQsIGJwW24tMV0sIGJwW24tMl0pOworCSAgYmwgPSBNUE5fRVhUUkFDVF9OVU1CIChzaGlmdCwgYnBbbi0yXSwgYnBbbi0zXSk7CisJfQorCisgICAgICAvKiBUcnkgYW4gbXBuX25oZ2NkMiBzdGVwICovCisgICAgICBpZiAobXBuX2hnY2QyIChhaCwgYWwsIGJoLCBibCwgJk0pKQorCXsKKwkgIG4gPSBtcG5fbWF0cml4MjJfbXVsMV9pbnZlcnNlX3ZlY3RvciAoJk0sIHRwLCBhcCwgYnAsIG4pOworCSAgTVBfUFRSX1NXQVAgKGFwLCB0cCk7CisJICB1biA9IG1wbl9oZ2NkX211bF9tYXRyaXgxX3ZlY3RvcigmTSwgdTIsIHUwLCB1MSwgdW4pOworCSAgTVBfUFRSX1NXQVAgKHUwLCB1Mik7CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8qIG1wbl9oZ2NkMiBoYXMgZmFpbGVkLiBUaGVuIGVpdGhlciBvbmUgb2YgYSBvciBiIGlzIHZlcnkKKwkgICAgIHNtYWxsLCBvciB0aGUgZGlmZmVyZW5jZSBpcyB2ZXJ5IHNtYWxsLiBQZXJmb3JtIG9uZQorCSAgICAgc3VidHJhY3Rpb24gZm9sbG93ZWQgYnkgb25lIGRpdmlzaW9uLiAqLworCSAgY3R4LnUwID0gdTA7CisJICBjdHgudTEgPSB1MTsKKwkgIGN0eC50cCA9IHUyOworCSAgY3R4LnVuID0gdW47CisKKwkgIC8qIFRlbXBvcmFyeSBzdG9yYWdlIG4gZm9yIHRoZSBxdW90aWVudCBhbmQgdWFsbG9jIGZvciB0aGUKKwkgICAgIG5ldyBjb2ZhY3Rvci4gKi8KKwkgIG4gPSBtcG5fZ2NkX3N1YmRpdl9zdGVwIChhcCwgYnAsIG4sIDAsIG1wbl9nY2RleHRfaG9vaywgJmN0eCwgdHApOworCSAgaWYgKG4gPT0gMCkKKwkgICAgcmV0dXJuIGN0eC5nbjsKKworCSAgdW4gPSBjdHgudW47CisJfQorICAgIH0KKyAgQVNTRVJUX0FMV0FZUyAoYXBbMF0gPiAwKTsKKyAgQVNTRVJUX0FMV0FZUyAoYnBbMF0gPiAwKTsKKworICBpZiAoYXBbMF0gPT0gYnBbMF0pCisgICAgeworICAgICAgaW50IGM7CisKKyAgICAgIC8qIFdoaWNoIGNvZmFjdG9yIHRvIHJldHVybiBub3c/IENhbmRpZGF0ZXMgYXJlICt1MSBhbmQgLXUwLAorCSBkZXBlbmRpbmcgb24gd2hpY2ggb2YgYSBhbmQgYiB3YXMgbW9zdCByZWNlbnRseSByZWR1Y2VkLAorCSB3aGljaCB3ZSBkb24ndCBrZWVwIHRyYWNrIG9mLiBTbyBjb21wYXJlIGFuZCBnZXQgdGhlIHNtYWxsZXN0CisJIG9uZS4gKi8KKworICAgICAgZ3BbMF0gPSBhcFswXTsKKworICAgICAgTVBOX0NNUCAoYywgdTAsIHUxLCB1bik7CisgICAgICBBU1NFUlQgKGMgIT0gMCB8fCAodW4gPT0gMSAmJiB1MFswXSA9PSAxICYmIHUxWzBdID09IDEpKTsKKyAgICAgIGlmIChjIDwgMCkKKwl7CisJICBNUE5fTk9STUFMSVpFICh1MCwgdW4pOworCSAgTVBOX0NPUFkgKHVwLCB1MCwgdW4pOworCSAgKnVzaXplID0gLXVuOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBNUE5fTk9STUFMSVpFX05PVF9aRVJPICh1MSwgdW4pOworCSAgTVBOX0NPUFkgKHVwLCB1MSwgdW4pOworCSAgKnVzaXplID0gdW47CisJfQorICAgICAgcmV0dXJuIDE7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgbXBfbGltYl90IHVoLCB2aDsKKyAgICAgIG1wX2xpbWJfc2lnbmVkX3QgdTsKKyAgICAgIG1wX2xpbWJfc2lnbmVkX3QgdjsKKyAgICAgIGludCBuZWdhdGU7CisKKyAgICAgIGdwWzBdID0gbXBuX2djZGV4dF8xICgmdSwgJnYsIGFwWzBdLCBicFswXSk7CisKKyAgICAgIC8qIFNldCB1cCA9IHUgdTEgLSB2IHUwLiBLZWVwIHRyYWNrIG9mIHNpemUsIHVuIGdyb3dzIGJ5IG9uZSBvcgorCSB0d28gbGltYnMuICovCisKKyAgICAgIGlmICh1ID09IDApCisJeworCSAgQVNTRVJUICh2ID09IDEpOworCSAgTVBOX05PUk1BTElaRSAodTAsIHVuKTsKKwkgIE1QTl9DT1BZICh1cCwgdTAsIHVuKTsKKwkgICp1c2l6ZSA9IC11bjsKKwkgIHJldHVybiAxOworCX0KKyAgICAgIGVsc2UgaWYgKHYgPT0gMCkKKwl7CisJICBBU1NFUlQgKHUgPT0gMSk7CisJICBNUE5fTk9STUFMSVpFICh1MSwgdW4pOworCSAgTVBOX0NPUFkgKHVwLCB1MSwgdW4pOworCSAgKnVzaXplID0gdW47CisJICByZXR1cm4gMTsKKwl9CisgICAgICBlbHNlIGlmICh1ID4gMCkKKwl7CisJICBuZWdhdGUgPSAwOworCSAgQVNTRVJUICh2IDwgMCk7CisJICB2ID0gLXY7CisJfQorICAgICAgZWxzZQorCXsKKwkgIG5lZ2F0ZSA9IDE7CisJICBBU1NFUlQgKHYgPiAwKTsKKwkgIHUgPSAtdTsKKwl9CisKKyAgICAgIHVoID0gbXBuX211bF8xICh1cCwgdTEsIHVuLCB1KTsKKyAgICAgIHZoID0gbXBuX2FkZG11bF8xICh1cCwgdTAsIHVuLCB2KTsKKworICAgICAgaWYgKCAodWggfCB2aCkgPiAwKQorCXsKKwkgIHVoICs9IHZoOworCSAgdXBbdW4rK10gPSB1aDsKKwkgIGlmICh1aCA8IHZoKQorCSAgICB1cFt1bisrXSA9IDE7CisJfQorCisgICAgICBNUE5fTk9STUFMSVpFX05PVF9aRVJPICh1cCwgdW4pOworCisgICAgICAqdXNpemUgPSBuZWdhdGUgPyAtdW4gOiB1bjsKKyAgICAgIHJldHVybiAxOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9nZXRfZC5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2dldF9kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc4NGYyMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9nZXRfZC5jCkBAIC0wLDAgKzEsNDM4IEBACisvKiBtcG5fZ2V0X2QgLS0gbGltYnMgdG8gZG91YmxlIGNvbnZlcnNpb24uCisKKyAgIFRIRSBGVU5DVElPTlMgSU4gVEhJUyBGSUxFIEFSRSBGT1IgSU5URVJOQUwgVVNFIE9OTFkuICBUSEVZJ1JFIEFMTU9TVAorICAgQ0VSVEFJTiBUTyBCRSBTVUJKRUNUIFRPIElOQ09NUEFUSUJMRSBDSEFOR0VTIE9SIERJU0FQUEVBUiBDT01QTEVURUxZIElOCisgICBGVVRVUkUgR05VIE1QIFJFTEVBU0VTLgorCitDb3B5cmlnaHQgMjAwMywgMjAwNCwgMjAwNywgMjAwOSwgMjAxMCwgMjAxMiwgMjAxOCBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEhBVkVfRkxPQVRfSAorI2luY2x1ZGUgPGZsb2F0Lmg+ICAvKiBmb3IgREJMX01BTlRfRElHIGFuZCBGTFRfUkFESVggKi8KKyNlbmRpZgorCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKyNpbmNsdWRlICJsb25nbG9uZy5oIgorCisjaWZuZGVmIF9HTVBfSUVFRV9GTE9BVFMKKyNkZWZpbmUgX0dNUF9JRUVFX0ZMT0FUUyAwCisjZW5kaWYKKworLyogVG8gZm9yY2UgdXNlIG9mIHRoZSBnZW5lcmljIEMgY29kZSBmb3IgdGVzdGluZywgcHV0CisgICAiI2RlZmluZSBfR01QX0lFRUVfRkxPQVRTIDAiIGF0IHRoaXMgcG9pbnQuICAqLworCisKKy8qIEluIGFscGhhIGdjYyBwcmlvciB0byAzLjQsIHNpZ25lZCBESSBjb21wYXJpc29ucyBpbnZvbHZpbmcgY29uc3RhbnRzIGFyZQorICAgcmVhcnJhbmdlZCBmcm9tICJ4IDwgbiIgdG8gIngrKC1uKSA8IDAiLCB3aGljaCBpcyBvZiBjb3Vyc2UgaG9wZWxlc3NseQorICAgd3JvbmcgaWYgdGhhdCBhZGRpdGlvbiBvdmVyZmxvd3MuCisKKyAgIFRoZSB3b3JrYXJvdW5kIGhlcmUgYXZvaWRzIHRoaXMgYnVnIGJ5IGVuc3VyaW5nIG4gaXMgbm90IGEgbGl0ZXJhbCBjb25zdGFudC4KKyAgIE5vdGUgdGhhdCB0aGlzIGlzIGFscGhhIHNwZWNpZmljLiAgVGhlIG9mZmVuZGluZyB0cmFuc2Zvcm1hdGlvbiBpcy93YXMgaW4KKyAgIGFscGhhLmMgYWxwaGFfZW1pdF9jb25kaXRpb25hbF9icmFuY2goKSB1bmRlciAiV2Ugd2FudCB0byB1c2UgY21wY2MvYmNjIi4KKworICAgQml6YXJyZWx5LCB0aGlzIGhhcHBlbnMgYWxzbyB3aXRoIENyYXkgY2Mgb24gYWxwaGFldjUtY3JheS11bmljb3NtazIuMC42LlgsCisgICBhbmQgaGFzIHRoZSBzYW1lIHNvbHV0aW9uLiAgRG9uJ3Qga25vdyB3aHkgb3IgaG93LiAgKi8KKworI2lmIEhBVkVfSE9TVF9DUFVfRkFNSUxZX2FscGhhCQkJCVwKKyAgJiYgKChkZWZpbmVkIChfX0dOVUNfXykgJiYgISBfX0dNUF9HTlVDX1BSRVJFUSgzLDQpKQlcCisgICAgICB8fCBkZWZpbmVkIChfQ1JBWSkpCitzdGF0aWMgdm9sYXRpbGUgY29uc3QgbG9uZyBDT05TVF8xMDI0ID0gMTAyNDsKK3N0YXRpYyB2b2xhdGlsZSBjb25zdCBsb25nIENPTlNUX05FR18xMDIzID0gLTEwMjM7CitzdGF0aWMgdm9sYXRpbGUgY29uc3QgbG9uZyBDT05TVF9ORUdfMTAyMl9TVUJfNTMgPSAtMTAyMiAtIDUzOworI2Vsc2UKKyNkZWZpbmUgQ09OU1RfMTAyNAkgICAgICAoMTAyNCkKKyNkZWZpbmUgQ09OU1RfTkVHXzEwMjMJICAgICAgKC0xMDIzKQorI2RlZmluZSBDT05TVF9ORUdfMTAyMl9TVUJfNTMgKC0xMDIyIC0gNTMpCisjZW5kaWYKKworCisvKiBSZXR1cm4gdGhlIHZhbHVlIHtwdHIsc2l6ZX0qMl5leHAsIGFuZCBuZWdhdGl2ZSBpZiBzaWduPDAuICBNdXN0IGhhdmUKKyAgIHNpemU+PTEsIGFuZCBhIG5vbi16ZXJvIGhpZ2ggbGltYiBwdHJbc2l6ZS0xXS4KKworICAgV2hlbiB3ZSBrbm93IHRoZSBmcCBmb3JtYXQsIHRoZSByZXN1bHQgaXMgdHJ1bmNhdGVkIHRvd2FyZHMgemVyby4gIFRoaXMgaXMKKyAgIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBnbXAgY29udmVyc2lvbnMsIGxpa2UgbXB6X3NldF9mIG9yIG1wel9zZXRfcSwgYW5kIGlzCisgICBlYXN5IHRvIGltcGxlbWVudCBhbmQgdGVzdC4KKworICAgV2hlbiB3ZSBkbyBub3Qga25vdyB0aGUgZm9ybWF0LCBzdWNoIHRydW5jYXRpb24gc2VlbXMgbXVjaCBoYXJkZXIuICBPbmUKKyAgIHdvdWxkIG5lZWQgdG8gZGVmZWF0IGFueSByb3VuZGluZyBtb2RlLCBpbmNsdWRpbmcgcm91bmQtdXAuCisKKyAgIEl0J3MgZmVsdCB0aGF0IEdNUCBpcyBub3QgcHJpbWFyaWx5IGNvbmNlcm5lZCB3aXRoIGhhcmR3YXJlIGZsb2F0cywgYW5kCisgICByZWFsbHkgaXNuJ3QgZW5oYW5jZWQgYnkgZ2V0dGluZyBpbnZvbHZlZCB3aXRoIGhhcmR3YXJlIHJvdW5kaW5nIG1vZGVzCisgICAod2hpY2ggY291bGQgZXZlbiBiZSBzb21lIHdlaXJkIHVua25vd24gc3R5bGUpLCBzbyBzb21ldGhpbmcgdW5hbWJpZ3VvdXMgYW5kCisgICBzdHJhaWdodGZvcndhcmQgaXMgYmVzdC4KKworCisgICBUaGUgSUVFRSBjb2RlIGJlbG93IGlzIHRoZSB1c3VhbCBjYXNlLCBpdCBrbm93cyBlaXRoZXIgYSAzMi1iaXQgb3IgNjQtYml0CisgICBsaW1iIGFuZCBpcyBkb25lIHdpdGggc2hpZnRzIGFuZCBtYXNrcy4gIFRoZSA2NC1iaXQgY2FzZSBpbiBwYXJ0aWN1bGFyCisgICBzaG91bGQgY29tZSBvdXQgbmljZSBhbmQgY29tcGFjdC4KKworICAgVGhlIGdlbmVyaWMgY29kZSB1c2VkIHRvIHdvcmsgb25lIGJpdCBhdCBhIHRpbWUsIHdoaWNoIHdhcyBub3Qgb25seSBzbG93LAorICAgYnV0IGltcGxpY2l0bHkgcmVsaWVkIHVwb24gZGVub3JtcyBmb3IgaW50ZXJtZWRpYXRlcywgc2luY2UgdGhlIGxvd2VzdCBiaXRzJworICAgd2VpZ2h0IG9mIGEgcGVyZmVjdGx5IHZhbGlkIGZwIG51bWJlciB1bmRlcmZsb3dzIGluIG5vbi1kZW5vcm0uICBUaGVyZWZvcmUsCisgICB0aGUgZ2VuZXJpYyBjb2RlIG5vdyB3b3JrcyBsaW1iLXBlci1saW1iLCBpbml0aWFsbHkgY3JlYXRpbmcgYSBudW1iZXIgeCBzdWNoCisgICB0aGF0IDEgPD0geCA8PSBCQVNFLiAgKEJBU0UgaXMgcmVhY2hlZCBvbmx5IGFzIHJlc3VsdCBvZiByb3VuZGluZy4pICBUaGVuCisgICB4J3MgZXhwb25lbnQgaXMgc2NhbGVkIHdpdGggZXhwbGljaXQgY29kZSAobm90IGxkZXhwIHRvIGF2b2lkIGxpYm0KKyAgIGRlcGVuZGVuY3kpLiAgSXQgaXMgYSB0YXAtZGFuY2UgdG8gYXZvaWQgdW5kZXJmbG93IG9yIG92ZXJmbG93LCBiZXdhcmUhCisKKworICAgVHJhcHM6CisKKyAgIEhhcmR3YXJlIHRyYXBzIGZvciBvdmVyZmxvdyB0byBpbmZpbml0eSwgdW5kZXJmbG93IHRvIHplcm8sIG9yIHVuc3VwcG9ydGVkCisgICBkZW5vcm1zIG1heSBvciBtYXkgbm90IGJlIHRha2VuLiAgVGhlIElFRUUgY29kZSB3b3JrcyBiaXR3aXNlIGFuZCBzbworICAgcHJvYmFibHkgd29uJ3QgdHJpZ2dlciB0aGVtLCB0aGUgZ2VuZXJpYyBjb2RlIHdvcmtzIGJ5IGZsb2F0IG9wZXJhdGlvbnMgYW5kCisgICBzbyBwcm9iYWJseSB3aWxsLiAgVGhpcyBkaWZmZXJlbmNlIG1pZ2h0IGJlIHRob3VnaHQgbGVzcyB0aGFuIGlkZWFsLCBidXQKKyAgIGFnYWluIGl0cyBmZWx0IHN0cmFpZ2h0Zm9yd2FyZCBjb2RlIGlzIGJldHRlciB0aGFuIHRyeWluZyB0byBnZXQgaW50aW1hdGUKKyAgIHdpdGggaGFyZHdhcmUgZXhjZXB0aW9ucyAob2YgcGVyaGFwcyB1bmtub3duIG5hdHVyZSkuCisKKworICAgTm90IGRvbmU6CisKKyAgIG1wel9nZXRfZCBpbiB0aGUgcGFzdCBoYW5kbGVkIHNpemU9PTEgd2l0aCBhIGNhc3QgbGltYi0+ZG91YmxlLiAgVGhpcyBtaWdodAorICAgc3RpbGwgYmUgd29ydGh3aGlsZSB0aGVyZSAoZm9yIHVwIHRvIHRoZSBtYW50aXNzYSBtYW55IGJpdHMpLCBidXQgZm9yCisgICBtcG5fZ2V0X2QgaGVyZSwgdGhlIGNvc3Qgb2YgYXBwbHlpbmcgImV4cCIgdG8gdGhlIHJlc3VsdGluZyBleHBvbmVudCB3b3VsZAorICAgcHJvYmFibHkgdXNlIHVwIGFueSBiZW5lZml0IGEgY2FzdCBtYXkgaGF2ZSBvdmVyIGJpdCB0d2lkZGxpbmcuICBBbHNvLCBpZgorICAgdGhlIGV4cG9uZW50IGlzIHB1c2hlZCBpbnRvIGRlbm9ybSByYW5nZSB0aGVuIGJpdCB0d2lkZGxpbmcgaXMgdGhlIG9ubHkKKyAgIG9wdGlvbiwgdG8gZW5zdXJlIHRoZSBkZXNpcmVkIHRydW5jYXRpb24gaXMgb2J0YWluZWQuCisKKworICAgT3RoZXI6CisKKyAgIEZvciByZWZlcmVuY2UsIG5vdGUgdGhhdCBIUFBBIDgwMDAsIDgyMDAsIDg1MDAgYW5kIDg2MDAgdHJhcCBGQ05WLFVEVyxEQkwKKyAgIHRvIHRoZSBrZXJuZWwgZm9yIHZhbHVlcyA+PSAyXjYzLiAgVGhpcyBtYWtlcyBpdCBzbG93LCBhbmQgd29yc2UgdGhlIGtlcm5lbAorICAgTGludXggKHdoYXQgdmVyc2lvbnM/KSBhcHBhcmVudGx5IHVzZXMgdW50ZXN0ZWQgY29kZSBpbiBpdHMgdHJhcCBoYW5kbGluZworICAgcm91dGluZXMsIGFuZCBnZXRzIHRoZSBzaWduIHdyb25nLiAgV2UgZG9uJ3QgdXNlIHN1Y2ggYSBsaW1iLXRvLWRvdWJsZQorICAgY2FzdCwgbmVpdGhlciBpbiB0aGUgSUVFRSBvciBnZW5lcmljIGNvZGUuICAqLworCisKKworI3VuZGVmIEZPUk1BVF9SRUNPR05JWkVECisKK2RvdWJsZQorbXBuX2dldF9kIChtcF9zcmNwdHIgdXAsIG1wX3NpemVfdCBzaXplLCBtcF9zaXplX3Qgc2lnbiwgbG9uZyBleHApCit7CisgIGludCBsc2hpZnQsIG5iaXRzOworICBtcF9saW1iX3QgeCwgbWhpLCBtbG87CisKKyAgQVNTRVJUIChzaXplID49IDApOworICBBU1NFUlRfTVBOICh1cCwgc2l6ZSk7CisgIEFTU0VSVCAoc2l6ZSA9PSAwIHx8IHVwW3NpemUtMV0gIT0gMCk7CisKKyAgaWYgKHNpemUgPT0gMCkKKyAgICByZXR1cm4gMC4wOworCisgIC8qIEFkanVzdCBleHAgdG8gYSByYWRpeCBwb2ludCBqdXN0IGFib3ZlIHt1cCxzaXplfSwgZ3VhcmRpbmcgYWdhaW5zdAorICAgICBvdmVyZmxvdy4gIEFmdGVyIHRoaXMgZXhwIGNhbiBvZiBjb3Vyc2UgYmUgcmVkdWNlZCB0byBhbnl3aGVyZSB3aXRoaW4KKyAgICAgdGhlIHt1cCxzaXplfSByZWdpb24gd2l0aG91dCB1bmRlcmZsb3cuICAqLworICBpZiAoVU5MSUtFTFkgKCh1bnNpZ25lZCBsb25nKSAoR01QX05VTUJfQklUUyAqIHNpemUpCisJCT4gKCh1bnNpZ25lZCBsb25nKSBMT05HX01BWCAtIGV4cCkpKQorICAgIHsKKyNpZiBfR01QX0lFRUVfRkxPQVRTCisgICAgICBnb3RvIGllZWVfaW5maW5pdHk7CisjZW5kaWYKKworICAgICAgLyogZ2VuZXJpYyAqLworICAgICAgZXhwID0gTE9OR19NQVg7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgZXhwICs9IEdNUF9OVU1CX0JJVFMgKiBzaXplOworICAgIH0KKworI2lmIF9HTVBfSUVFRV9GTE9BVFMKKyAgICB7CisgICAgICB1bmlvbiBpZWVlX2RvdWJsZV9leHRyYWN0IHU7CisKKyAgICAgIHVwICs9IHNpemU7CisKKyNpZiBHTVBfTElNQl9CSVRTID09IDY0CisgICAgICBtbG8gPSB1cFstMV07CisgICAgICBjb3VudF9sZWFkaW5nX3plcm9zIChsc2hpZnQsIG1sbyk7CisKKyAgICAgIGV4cCAtPSAobHNoaWZ0IC0gR01QX05BSUxfQklUUykgKyAxOworICAgICAgbWxvIDw8PSBsc2hpZnQ7CisKKyAgICAgIG5iaXRzID0gR01QX0xJTUJfQklUUyAtIGxzaGlmdDsKKworICAgICAgaWYgKG5iaXRzIDwgNTMgJiYgc2l6ZSA+IDEpCisJeworCSAgeCA9IHVwWy0yXTsKKwkgIHggPDw9IEdNUF9OQUlMX0JJVFM7CisJICB4ID4+PSBuYml0czsKKwkgIG1sbyB8PSB4OworCSAgbmJpdHMgKz0gR01QX05VTUJfQklUUzsKKworCSAgaWYgKExJTUJTX1BFUl9ET1VCTEUgPj0gMyAmJiBuYml0cyA8IDUzICYmIHNpemUgPiAyKQorCSAgICB7CisJICAgICAgeCA9IHVwWy0zXTsKKwkgICAgICB4IDw8PSBHTVBfTkFJTF9CSVRTOworCSAgICAgIHggPj49IG5iaXRzOworCSAgICAgIG1sbyB8PSB4OworCSAgICAgIG5iaXRzICs9IEdNUF9OVU1CX0JJVFM7CisJICAgIH0KKwl9CisgICAgICBtaGkgPSBtbG8gPj4gKDMyICsgMTEpOworICAgICAgbWxvID0gbWxvID4+IDExOwkJLyogbGF0ZXIgaW1wbGljaXRseSB0cnVuY2F0ZWQgdG8gMzIgYml0cyAqLworI2VuZGlmCisjaWYgR01QX0xJTUJfQklUUyA9PSAzMgorICAgICAgeCA9ICotLXVwOworICAgICAgY291bnRfbGVhZGluZ196ZXJvcyAobHNoaWZ0LCB4KTsKKworICAgICAgZXhwIC09IChsc2hpZnQgLSBHTVBfTkFJTF9CSVRTKSArIDE7CisgICAgICB4IDw8PSBsc2hpZnQ7CisgICAgICBtaGkgPSB4ID4+IDExOworCisgICAgICBpZiAobHNoaWZ0IDwgMTEpCQkvKiBGSVhNRTogbmV2ZXIgdHJ1ZSBpZiBOVU1CIDwgMjAgYml0cyAqLworCXsKKwkgIC8qIEFsbCAyMCBiaXRzIGluIG1oaSAqLworCSAgbWxvID0geCA8PCAyMTsKKwkgIC8qID49IDEgYml0IGluIG1sbyAqLworCSAgbmJpdHMgPSBHTVBfTElNQl9CSVRTIC0gbHNoaWZ0IC0gMjE7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGlmIChzaXplID4gMSkKKwkgICAgeworCSAgICAgIG5iaXRzID0gR01QX0xJTUJfQklUUyAtIGxzaGlmdDsKKworCSAgICAgIHggPSAqLS11cCwgc2l6ZS0tOworCSAgICAgIHggPDw9IEdNUF9OQUlMX0JJVFM7CisJICAgICAgbWhpIHw9IHggPj4gbmJpdHMgPj4gMTE7CisKKwkgICAgICBtbG8gPSB4IDw8IEdNUF9MSU1CX0JJVFMgLSBuYml0cyAtIDExOworCSAgICAgIG5iaXRzID0gbmJpdHMgKyAxMSAtIEdNUF9OQUlMX0JJVFM7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIG1sbyA9IDA7CisJICAgICAgZ290byBkb25lOworCSAgICB9CisJfQorCisgICAgICAvKiBOb3cgYWxsIG5lZWRlZCBiaXRzIGluIG1oaSBoYXZlIGJlZW4gYWNjdW11bGF0ZWQuICBBZGQgYml0cyB0byBtbG8uICAqLworCisgICAgICBpZiAoTElNQlNfUEVSX0RPVUJMRSA+PSAyICYmIG5iaXRzIDwgMzIgJiYgc2l6ZSA+IDEpCisJeworCSAgeCA9IHVwWy0xXTsKKwkgIHggPDw9IEdNUF9OQUlMX0JJVFM7CisJICB4ID4+PSBuYml0czsKKwkgIG1sbyB8PSB4OworCSAgbmJpdHMgKz0gR01QX05VTUJfQklUUzsKKworCSAgaWYgKExJTUJTX1BFUl9ET1VCTEUgPj0gMyAmJiBuYml0cyA8IDMyICYmIHNpemUgPiAyKQorCSAgICB7CisJICAgICAgeCA9IHVwWy0yXTsKKwkgICAgICB4IDw8PSBHTVBfTkFJTF9CSVRTOworCSAgICAgIHggPj49IG5iaXRzOworCSAgICAgIG1sbyB8PSB4OworCSAgICAgIG5iaXRzICs9IEdNUF9OVU1CX0JJVFM7CisKKwkgICAgICBpZiAoTElNQlNfUEVSX0RPVUJMRSA+PSA0ICYmIG5iaXRzIDwgMzIgJiYgc2l6ZSA+IDMpCisJCXsKKwkJICB4ID0gdXBbLTNdOworCQkgIHggPDw9IEdNUF9OQUlMX0JJVFM7CisJCSAgeCA+Pj0gbmJpdHM7CisJCSAgbWxvIHw9IHg7CisJCSAgbmJpdHMgKz0gR01QX05VTUJfQklUUzsKKwkJfQorCSAgICB9CisJfQorCisgICAgZG9uZTo7CisKKyNlbmRpZgorICAgICAgaWYgKFVOTElLRUxZIChleHAgPj0gQ09OU1RfMTAyNCkpCisJeworCSAgLyogb3ZlcmZsb3csIHJldHVybiBpbmZpbml0eSAqLworCWllZWVfaW5maW5pdHk6CisJICBtaGkgPSAwOworCSAgbWxvID0gMDsKKwkgIGV4cCA9IDEwMjQ7CisJfQorICAgICAgZWxzZSBpZiAoVU5MSUtFTFkgKGV4cCA8PSBDT05TVF9ORUdfMTAyMykpCisJeworCSAgaW50IHJzaGlmdDsKKworCSAgaWYgKExJS0VMWSAoZXhwIDw9IENPTlNUX05FR18xMDIyX1NVQl81MykpCisJICAgIHJldHVybiAwLjA7CSAvKiBkZW5vcm0gdW5kZXJmbG93cyB0byB6ZXJvICovCisKKwkgIHJzaGlmdCA9IC0xMDIyIC0gZXhwOworCSAgQVNTRVJUIChyc2hpZnQgPiAwICYmIHJzaGlmdCA8IDUzKTsKKyNpZiBHTVBfTElNQl9CSVRTID4gNTMKKwkgIG1sbyA+Pj0gcnNoaWZ0OworCSAgbWhpID0gbWxvID4+IDMyOworI2Vsc2UKKwkgIGlmIChyc2hpZnQgPj0gMzIpCisJICAgIHsKKwkgICAgICBtbG8gPSBtaGk7CisJICAgICAgbWhpID0gMDsKKwkgICAgICByc2hpZnQgLT0gMzI7CisJICAgIH0KKwkgIGxzaGlmdCA9IEdNUF9MSU1CX0JJVFMgLSByc2hpZnQ7CisJICBtbG8gPSAobWxvID4+IHJzaGlmdCkgfCAocnNoaWZ0ID09IDAgPyAwIDogbWhpIDw8IGxzaGlmdCk7CisJICBtaGkgPj49IHJzaGlmdDsKKyNlbmRpZgorCSAgZXhwID0gLTEwMjM7CisJfQorICAgICAgdS5zLm1hbmggPSBtaGk7CisgICAgICB1LnMubWFubCA9IG1sbzsKKyAgICAgIHUucy5leHAgPSBleHAgKyAxMDIzOworICAgICAgdS5zLnNpZyA9IChzaWduIDwgMCk7CisgICAgICByZXR1cm4gdS5kOworICAgIH0KKyNkZWZpbmUgRk9STUFUX1JFQ09HTklaRUQgMQorI2VuZGlmCisKKyNpZiBIQVZFX0RPVUJMRV9WQVhfRAorICAgIHsKKyAgICAgIHVuaW9uIGRvdWJsZV9leHRyYWN0IHU7CisKKyAgICAgIHVwICs9IHNpemU7CisKKyAgICAgIG1oaSA9IHVwWy0xXTsKKworICAgICAgY291bnRfbGVhZGluZ196ZXJvcyAobHNoaWZ0LCBtaGkpOworICAgICAgZXhwIC09IGxzaGlmdDsKKyAgICAgIG1oaSA8PD0gbHNoaWZ0OworCisgICAgICBtbG8gPSAwOworICAgICAgaWYgKHNpemUgPiAxKQorCXsKKwkgIG1sbyA9IHVwWy0yXTsKKwkgIGlmIChsc2hpZnQgIT0gMCkKKwkgICAgbWhpICs9IG1sbyA+PiAoR01QX0xJTUJfQklUUyAtIGxzaGlmdCk7CisJICBtbG8gPDw9IGxzaGlmdDsKKworCSAgaWYgKHNpemUgPiAyICYmIGxzaGlmdCA+IDgpCisJICAgIHsKKwkgICAgICB4ID0gdXBbLTNdOworCSAgICAgIG1sbyArPSB4ID4+IChHTVBfTElNQl9CSVRTIC0gbHNoaWZ0KTsKKwkgICAgfQorCX0KKworICAgICAgaWYgKFVOTElLRUxZIChleHAgPj0gMTI4KSkKKwl7CisJICAvKiBvdmVyZmxvdywgcmV0dXJuIG1heGltdW0gbnVtYmVyICovCisJICBtaGkgPSAweGZmZmZmZmZmOworCSAgbWxvID0gMHhmZmZmZmZmZjsKKwkgIGV4cCA9IDEyNzsKKwl9CisgICAgICBlbHNlIGlmIChVTkxJS0VMWSAoZXhwIDwgLTEyOCkpCisJeworCSAgcmV0dXJuIDAuMDsJIC8qIHVuZGVyZmxvd3MgdG8gemVybyAqLworCX0KKworICAgICAgdS5zLm1hbjMgPSBtaGkgPj4gMjQ7CS8qIGRyb3AgbXNiLCBzaW5jZSBpbXBsaWNpdCAqLworICAgICAgdS5zLm1hbjIgPSBtaGkgPj4gODsKKyAgICAgIHUucy5tYW4xID0gKG1oaSA8PCA4KSArIChtbG8gPj4gMjQpOworICAgICAgdS5zLm1hbjAgPSBtbG8gPj4gODsKKyAgICAgIHUucy5leHAgPSBleHAgKyAxMjg7CisgICAgICB1LnMuc2lnID0gc2lnbiA8IDA7CisgICAgICByZXR1cm4gdS5kOworICAgIH0KKyNkZWZpbmUgRk9STUFUX1JFQ09HTklaRUQgMQorI2VuZGlmCisKKyNpZiAhIEZPUk1BVF9SRUNPR05JWkVECisKKyNpZiAhZGVmaW5lZChHTVBfREJMX01BTlRfQklUUykKKyNpZiBkZWZpbmVkKERCTF9NQU5UX0RJRykgJiYgRkxUX1JBRElYID09IDIKKyNkZWZpbmUgR01QX0RCTF9NQU5UX0JJVFMgREJMX01BTlRfRElHCisjZWxzZQorLyogRklYTUU6IENob3NlIGEgc21hcnRlciBkZWZhdWx0IHZhbHVlLiAqLworI2RlZmluZSBHTVBfREJMX01BTlRfQklUUyAoMTYgKiBzaXplb2YgKGRvdWJsZSkpCisjZW5kaWYKKyNlbmRpZgorCisgICAgeyAvKiBOb24tSUVFRSBvciBzdHJhbmdlIGxpbWIgc2l6ZSwgZ2VuZXJpY2FsbHkgY29udmVydAorCSBHTVBfREJMX01BTlRfQklUUyBiaXRzLiAqLworICAgICAgbXBfbGltYl90IGw7CisgICAgICBpbnQgbTsKKyAgICAgIG1wX3NpemVfdCBpOworICAgICAgZG91YmxlIGQsIHdlaWdodDsKKyAgICAgIHVuc2lnbmVkIGxvbmcgdWV4cDsKKworICAgICAgLyogRmlyc3QgZ2VuZXJhdGUgYW4gZnAgbnVtYmVyIGRpc3JlZ2FyZGluZyBleHAsIGluc3RlYWQga2VlcGluZyB0aGluZ3MKKwkgd2l0aGluIHRoZSBudW1iIGJhc2UgZmFjdG9yIGZyb20gMSwgd2hpY2ggc2hvdWxkIHByZXZlbnQgb3ZlcmZsb3cgYW5kCisJIHVuZGVyZmxvdyBldmVuIGZvciB0aGUgbW9zdCBleHBvbmVudCBsaW1pdGVkIGZwIGZvcm1hdHMuICAqLworICAgICAgaSA9IHNpemUgLSAxOworICAgICAgbCA9IHVwW2ldOworICAgICAgY291bnRfbGVhZGluZ196ZXJvcyAobSwgbCk7CisgICAgICBtID0gbSArIEdNUF9EQkxfTUFOVF9CSVRTIC0gR01QX0xJTUJfQklUUzsKKyAgICAgIGlmIChtIDwgMCkKKwlsICY9IEdNUF9OVU1CX01BWCA8PCAtbTsKKyAgICAgIGQgPSBsOworICAgICAgZm9yICh3ZWlnaHQgPSAxL01QX0JBU0VfQVNfRE9VQkxFOyBtID4gMCAmJiAtLWkgPj0gMDspCisJeworCSAgbCA9IHVwW2ldOworCSAgbSAtPSBHTVBfTlVNQl9CSVRTOworCSAgaWYgKG0gPCAwKQorCSAgICBsICY9IEdNUF9OVU1CX01BWCA8PCAtbTsKKwkgIGQgKz0gbCAqIHdlaWdodDsKKwkgIHdlaWdodCAvPSBNUF9CQVNFX0FTX0RPVUJMRTsKKwkgIGlmICh3ZWlnaHQgPT0gMCkKKwkgICAgYnJlYWs7CisJfQorCisgICAgICAvKiBOb3cgYXBwbHkgZXhwLiAgKi8KKyAgICAgIGV4cCAtPSBHTVBfTlVNQl9CSVRTOworICAgICAgaWYgKGV4cCA+IDApCisJeworCSAgd2VpZ2h0ID0gMi4wOworCSAgdWV4cCA9IGV4cDsKKwl9CisgICAgICBlbHNlCisJeworCSAgd2VpZ2h0ID0gMC41OworCSAgdWV4cCA9IE5FR19DQVNUICh1bnNpZ25lZCBsb25nLCBleHApOworCX0KKyNpZiAxCisgICAgICAvKiBTcXVhcmUtYW5kLW11bHRpcGx5IGV4cG9uZW50aWF0aW9uLiAgKi8KKyAgICAgIGlmICh1ZXhwICYgMSkKKwlkICo9IHdlaWdodDsKKyAgICAgIHdoaWxlICh1ZXhwID4+PSAxKQorCXsKKwkgIHdlaWdodCAqPSB3ZWlnaHQ7CisJICBpZiAodWV4cCAmIDEpCisJICAgIGQgKj0gd2VpZ2h0OworCX0KKyNlbHNlCisgICAgICAvKiBQbGFpbiBleHBvbmVudGlhdGlvbi4gICovCisgICAgICB3aGlsZSAodWV4cCA+IDApCisJeworCSAgZCAqPSB3ZWlnaHQ7CisJICB1ZXhwLS07CisJfQorI2VuZGlmCisKKyAgICAgIHJldHVybiBzaWduID49IDAgPyBkIDogLWQ7CisgICAgfQorI2VuZGlmCit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvZ2V0X3N0ci5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2dldF9zdHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWNjNTgxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2dldF9zdHIuYwpAQCAtMCwwICsxLDQ1MSBAQAorLyogbXBuX2dldF9zdHIgLS0gQ29udmVydCB7VVAsVVNJWkV9IHRvIGEgYmFzZSBCQVNFIHN0cmluZyBpbiBTVFIuCisKKyAgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3Jiam9ybiBHcmFubHVuZC4KKworICAgVEhFIEZVTkNUSU9OUyBJTiBUSElTIEZJTEUsIEVYQ0VQVCBtcG5fZ2V0X3N0ciwgQVJFIElOVEVSTkFMIFdJVEggTVVUQUJMRQorICAgSU5URVJGQUNFUy4gIElUIElTIE9OTFkgU0FGRSBUTyBSRUFDSCBUSEVNIFRIUk9VR0ggRE9DVU1FTlRFRCBJTlRFUkZBQ0VTLgorICAgSU4gRkFDVCwgSVQgSVMgQUxNT1NUIEdVQVJBTlRFRUQgVEhBVCBUSEVZIFdJTEwgQ0hBTkdFIE9SIERJU0FQUEVBUiBJTiBBCisgICBGVVRVUkUgR05VIE1QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAxOTkxLTIwMTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorI2luY2x1ZGUgImxvbmdsb25nLmgiCisKKy8qIENvbnZlcnNpb24gb2YgVSB7dXAsdW59IHRvIGEgc3RyaW5nIGluIGJhc2UgYi4gIEludGVybmFsbHksIHdlIGNvbnZlcnQgdG8KKyAgIGJhc2UgQiA9IGJebSwgdGhlIGxhcmdlc3QgcG93ZXIgb2YgYiB0aGF0IGZpdHMgYSBsaW1iLiAgQmFzaWMgYWxnb3JpdGhtczoKKworICBBKSBEaXZpZGUgVSByZXBlYXRlZGx5IGJ5IEIsIGdlbmVyYXRpbmcgYSBxdW90aWVudCBhbmQgcmVtYWluZGVyLCB1bnRpbCB0aGUKKyAgICAgcXVvdGllbnQgYmVjb21lcyB6ZXJvLiAgVGhlIHJlbWFpbmRlcnMgaG9sZCB0aGUgY29udmVydGVkIGRpZ2l0cy4gIERpZ2l0cworICAgICBjb21lIG91dCBmcm9tIHJpZ2h0IHRvIGxlZnQuICAoVXNlZCBpbiBtcG5fYmNfZ2V0X3N0ci4pCisKKyAgQikgRGl2aWRlIFUgYnkgYl5nLCBmb3IgZyBzdWNoIHRoYXQgMS9iIDw9IFUvYl5nIDwgMSwgZ2VuZXJhdGluZyBhIGZyYWN0aW9uLgorICAgICBUaGVuIGRldmVsb3AgZGlnaXRzIGJ5IG11bHRpcGx5aW5nIHRoZSBmcmFjdGlvbiByZXBlYXRlZGx5IGJ5IGIuICBEaWdpdHMKKyAgICAgY29tZSBvdXQgZnJvbSBsZWZ0IHRvIHJpZ2h0LiAgKEN1cnJlbnRseSBub3QgdXNlZCBoZXJlaW4sIGV4Y2VwdCBmb3IgaW4KKyAgICAgY29kZSBmb3IgY29udmVydGluZyBzaW5nbGUgbGltYnMgdG8gaW5kaXZpZHVhbCBkaWdpdHMuKQorCisgIEMpIENvbXB1dGUgQl4xLCBCXjIsIEJeNCwgLi4uLCBCXnMsIGZvciBzIHN1Y2ggdGhhdCBCXnMgaXMganVzdCBhYm92ZQorICAgICBzcXJ0KFUpLiAgVGhlbiBkaXZpZGUgVSBieSBCXnMsIGdlbmVyYXRpbmcgcXVvdGllbnQgYW5kIHJlbWFpbmRlci4KKyAgICAgUmVjdXJzaXZlbHkgY29udmVydCB0aGUgcXVvdGllbnQsIHRoZW4gdGhlIHJlbWFpbmRlciwgdXNpbmcgdGhlCisgICAgIHByZWNvbXB1dGVkIHBvd2Vycy4gIERpZ2l0cyBjb21lIG91dCBmcm9tIGxlZnQgdG8gcmlnaHQuICAoVXNlZCBpbgorICAgICBtcG5fZGNfZ2V0X3N0ci4pCisKKyAgV2hlbiB1c2luZyBhbGdvcml0aG0gQywgYWxnb3JpdGhtIEIgbWlnaHQgYmUgc3VpdGFibGUgZm9yIGJhc2VjYXNlIGNvZGUsCisgIHNpbmNlIHRoZSByZXF1aXJlZCBiXmcgcG93ZXIgd2lsbCBiZSByZWFkaWx5IGFjY2Vzc2libGUuCisKKyAgT3B0aW1pemF0aW9uIGlkZWFzOgorICAxLiBUaGUgcmVjdXJzaXZlIGZ1bmN0aW9uIG9mIChDKSBjb3VsZCB1c2UgbGVzcyB0ZW1wb3JhcnkgbWVtb3J5LiAgVGhlIHBvd3RhYgorICAgICBhbGxvY2F0aW9uIGNvdWxkIGJlIHRyaW1tZWQgd2l0aCBzb21lIGNvbXB1dGF0aW9uLCBhbmQgdGhlIHRtcCBhcmVhIGNvdWxkCisgICAgIGJlIHJlZHVjZWQsIG9yIHBlcmhhcHMgZWxpbWluYXRlZCBpZiB1cCBpcyByZXVzZWQgZm9yIGJvdGggcXVvdGllbnQgYW5kCisgICAgIHJlbWFpbmRlciAoaXQgaXMgY3VycmVudGx5IHVzZWQganVzdCBmb3IgcmVtYWluZGVyKS4KKyAgMi4gU3RvcmUgdGhlIHBvd2VycyBvZiAoQykgaW4gbm9ybWFsaXplZCBmb3JtLCB3aXRoIHRoZSBub3JtYWxpemF0aW9uIGNvdW50LgorICAgICBRdW90aWVudHMgd2lsbCB1c3VhbGx5IG5lZWQgdG8gYmUgbGVmdC1zaGlmdGVkIGJlZm9yZSBlYWNoIGRpdmlkZSwgYW5kCisgICAgIHJlbWFpbmRlcnMgd2lsbCBlaXRoZXIgbmVlZCB0byBiZSBsZWZ0LXNoaWZ0ZWQgb2YgcmlnaHQtc2hpZnRlZC4KKyAgMy4gSW4gdGhlIGNvZGUgZm9yIGRldmVsb3BpbmcgZGlnaXRzIGZyb20gYSBzaW5nbGUgbGltYiwgd2UgY291bGQgYXZvaWQgdXNpbmcKKyAgICAgYSBmdWxsIHVtdWxfcHBtbSBleGNlcHQgZm9yIHRoZSBmaXJzdCAob3IgZmlyc3QgZmV3KSBkaWdpdHMsIHByb3ZpZGVkIGJhc2UKKyAgICAgaXMgZXZlbi4gIFN1YnNlcXVlbnQgZGlnaXRzIGNhbiBiZSBkZXZlbG9wZWQgdXNpbmcgcGxhaW4gbXVsdGlwbGljYXRpb24uCisgICAgIChUaGlzIHNhdmVzIG9uIHJlZ2lzdGVyLXN0YXJ2ZWQgbWFjaGluZXMgKHJlYWQgeDg2KSBhbmQgb24gYWxsIG1hY2hpbmVzCisgICAgIHRoYXQgZ2VuZXJhdGUgdGhlIHVwcGVyIHByb2R1Y3QgaGFsZiB1c2luZyBhIHNlcGFyYXRlIGluc3RydWN0aW9uIChhbHBoYSwKKyAgICAgcG93ZXJwYywgSUEtNjQpIG9yIGxhY2tzIHN1Y2ggc3VwcG9ydCBhbHRvZ2V0aGVyIChzcGFyYzY0LCBocHBhNjQpLgorICA0LiBTZXBhcmF0ZSBtcG5fZGNfZ2V0X3N0ciBiYXNlY2FzZSBjb2RlIGZyb20gY29kZSBmb3Igc21hbGwgY29udmVyc2lvbnMuIFRoZQorICAgICBmb3JtZXIgY29kZSB3aWxsIGhhdmUgdGhlIGV4YWN0IHJpZ2h0IHBvd2VyIHJlYWRpbHkgYXZhaWxhYmxlIGluIHRoZQorICAgICBwb3d0YWIgcGFyYW1ldGVyIGZvciBkaXZpZGluZyB0aGUgY3VycmVudCBudW1iZXIgaW50byBhIGZyYWN0aW9uLiAgQ29udmVydAorICAgICB0aGF0IHVzaW5nIGFsZ29yaXRobSBCLgorICA1LiBDb21wbGV0ZWx5IGF2b2lkIGRpdmlzaW9uLiAgQ29tcHV0ZSB0aGUgaW52ZXJzZXMgb2YgdGhlIHBvd2VycyBub3cgaW4KKyAgICAgcG93dGFiIGluc3RlYWQgb2YgdGhlIGFjdHVhbCBwb3dlcnMuCisgIDYuIERlY3JlYXNlIHBvd3RhYiBhbGxvY2F0aW9uIGZvciBldmVuIGJhc2VzLiAgRS5nLiBmb3IgYmFzZSAxMCB3ZSBjb3VsZCBzYXZlCisgICAgIGFib3V0IDMwJSAoMS1sb2coNSkvbG9nKDEwKSkuCisKKyAgQmFzaWMgc3RydWN0dXJlIG9mIChDKToKKyAgICBtcG5fZ2V0X3N0cjoKKyAgICAgIGlmIFBPVzJfUCAobikKKwkuLi4KKyAgICAgIGVsc2UKKwlpZiAodW4gPCBHRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEKQorCSAgbXBuX2J4X2dldF9zdHIgKHN0ciwgYmFzZSwgdXAsIHVuKTsKKwllbHNlCisJICBwcmVjb21wdXRlX3Bvd2VyX3RhYmxlcworCSAgbXBuX2RjX2dldF9zdHIKKworICAgIG1wbl9kY19nZXRfc3RyOgorCW1wbl90ZGl2X3FyCisJaWYgKHFuIDwgR0VUX1NUUl9EQ19USFJFU0hPTEQpCisJICBtcG5fYmNfZ2V0X3N0cgorCWVsc2UKKwkgIG1wbl9kY19nZXRfc3RyCisJaWYgKHJuIDwgR0VUX1NUUl9EQ19USFJFU0hPTEQpCisJICBtcG5fYmNfZ2V0X3N0cgorCWVsc2UKKwkgIG1wbl9kY19nZXRfc3RyCisKKworICBUaGUgcmVhc29uIGZvciB0aGUgdHdvIHRocmVzaG9sZCB2YWx1ZXMgaXMgdGhlIGNvc3Qgb2YKKyAgcHJlY29tcHV0ZV9wb3dlcl90YWJsZXMuICBHRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEIHdpbGwgYmUKKyAgY29uc2lkZXJhYmx5IGxhcmdlciB0aGFuIEdFVF9TVFJfRENfVEhSRVNIT0xELiAgKi8KKworCisvKiBUaGUgeDg2cyBhbmQgbTY4MDIwIGhhdmUgYSBxdW90aWVudCBhbmQgcmVtYWluZGVyICJkaXYiIGluc3RydWN0aW9uIGFuZAorICAgZ2NjIHJlY29nbmlzZXMgYW4gYWRqYWNlbnQgIi8iIGFuZCAiJSIgY2FuIGJlIGNvbWJpbmVkIHVzaW5nIHRoYXQuCisgICBFbHNld2hlcmUgIi8iIGFuZCAiJSIgYXJlIGVpdGhlciBzZXBhcmF0ZSBpbnN0cnVjdGlvbnMsIG9yIHNlcGFyYXRlCisgICBsaWJnY2MgY2FsbHMgKHdoaWNoIHVuZm9ydHVuYXRlbHkgZ2NjIGFzIG9mIHZlcnNpb24gMy4wIGRvZXNuJ3QgY29tYmluZSkuCisgICBBIG11bHRpcGx5IGFuZCBzdWJ0cmFjdCBzaG91bGQgYmUgZmFzdGVyIHRoYW4gYSAiJSIgaW4gdGhvc2UgY2FzZXMuICAqLworI2lmIEhBVkVfSE9TVF9DUFVfRkFNSUxZX3g4NiAgICAgICAgICAgIFwKKyAgfHwgSEFWRV9IT1NUX0NQVV9tNjgwMjAgICAgICAgICAgICAgICBcCisgIHx8IEhBVkVfSE9TVF9DUFVfbTY4MDMwICAgICAgICAgICAgICAgXAorICB8fCBIQVZFX0hPU1RfQ1BVX202ODA0MCAgICAgICAgICAgICAgIFwKKyAgfHwgSEFWRV9IT1NUX0NQVV9tNjgwNjAgICAgICAgICAgICAgICBcCisgIHx8IEhBVkVfSE9TVF9DUFVfbTY4MzYwIC8qIENQVTMyICovCisjZGVmaW5lIHVkaXZfcXJuZF91bm5vcm0ocSxyLG4sZCkgICAgICAgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtcF9saW1iX3QgIF9fcSA9IChuKSAvIChkKTsgICAgICAgICBcCisgICAgbXBfbGltYl90ICBfX3IgPSAobikgJSAoZCk7ICAgICAgICAgXAorICAgIChxKSA9IF9fcTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAocikgPSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSB1ZGl2X3FybmRfdW5ub3JtKHEscixuLGQpICAgICAgIFwKKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbXBfbGltYl90ICBfX3EgPSAobikgLyAoZCk7ICAgICAgICAgXAorICAgIG1wX2xpbWJfdCAgX19yID0gKG4pIC0gX19xKihkKTsgICAgIFwKKyAgICAocSkgPSBfX3E7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHIpID0gX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9IHdoaWxlICgwKQorI2VuZGlmCisKKwwKKy8qIENvbnZlcnQge3VwLHVufSB0byBhIHN0cmluZyBpbiBiYXNlIGJhc2UsIGFuZCBwdXQgdGhlIHJlc3VsdCBpbiBzdHIuCisgICBHZW5lcmF0ZSBsZW4gY2hhcmFjdGVycywgcG9zc2libHkgcGFkZGluZyB3aXRoIHplcm9zIHRvIHRoZSBsZWZ0LiAgSWYgbGVuIGlzCisgICB6ZXJvLCBnZW5lcmF0ZSBhcyBtYW55IGNoYXJhY3RlcnMgYXMgcmVxdWlyZWQuICBSZXR1cm4gYSBwb2ludGVyIGltbWVkaWF0ZWx5CisgICBhZnRlciB0aGUgbGFzdCBkaWdpdCBvZiB0aGUgcmVzdWx0IHN0cmluZy4gIENvbXBsZXhpdHkgaXMgTyh1bl4yKTsgaW50ZW5kZWQKKyAgIGZvciBzbWFsbCBjb252ZXJzaW9ucy4gICovCitzdGF0aWMgdW5zaWduZWQgY2hhciAqCittcG5fYmNfZ2V0X3N0ciAodW5zaWduZWQgY2hhciAqc3RyLCBzaXplX3QgbGVuLAorCQltcF9wdHIgdXAsIG1wX3NpemVfdCB1biwgaW50IGJhc2UpCit7CisgIG1wX2xpbWJfdCBybCwgdWw7CisgIHVuc2lnbmVkIGNoYXIgKnM7CisgIHNpemVfdCBsOworICAvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIGxhcmdlc3QgcG9zc2libGUgc3RyaW5nLCBnaXZlbiB0aGF0IHdlIG9ubHkgZ2V0IGhlcmUKKyAgICAgZm9yIG9wZXJhbmRzIHdpdGggdW4gPCBHRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEIGFuZCB0aGF0IHRoZSBzbWFsbGVzdAorICAgICBiYXNlIGlzIDMuICA3LzExIGlzIGFuIGFwcHJveGltYXRpb24gdG8gMS9sb2cyKDMpLiAgKi8KKyNpZiBUVU5FX1BST0dSQU1fQlVJTEQKKyNkZWZpbmUgQlVGX0FMTE9DIChHRVRfU1RSX1RIUkVTSE9MRF9MSU1JVCAqIEdNUF9MSU1CX0JJVFMgKiA3IC8gMTEpCisjZWxzZQorI2RlZmluZSBCVUZfQUxMT0MgKEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgKiBHTVBfTElNQl9CSVRTICogNyAvIDExKQorI2VuZGlmCisgIHVuc2lnbmVkIGNoYXIgYnVmW0JVRl9BTExPQ107CisjaWYgVFVORV9QUk9HUkFNX0JVSUxECisgIG1wX2xpbWJfdCBycFtHRVRfU1RSX1RIUkVTSE9MRF9MSU1JVF07CisjZWxzZQorICBtcF9saW1iX3QgcnBbR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRF07CisjZW5kaWYKKworICBpZiAoYmFzZSA9PSAxMCkKKyAgICB7CisgICAgICAvKiBTcGVjaWFsIGNhc2UgY29kZSBmb3IgYmFzZT09MTAgc28gdGhhdCB0aGUgY29tcGlsZXIgaGFzIGEgY2hhbmNlIHRvCisJIG9wdGltaXplIHRoaW5ncy4gICovCisKKyAgICAgIE1QTl9DT1BZIChycCArIDEsIHVwLCB1bik7CisKKyAgICAgIHMgPSBidWYgKyBCVUZfQUxMT0M7CisgICAgICB3aGlsZSAodW4gPiAxKQorCXsKKwkgIGludCBpOworCSAgbXBfbGltYl90IGZyYWMsIGRpZ2l0OworCSAgTVBOX0RJVlJFTV9PUl9QUkVJTlZfRElWUkVNXzEgKHJwLCAobXBfc2l6ZV90KSAxLCBycCArIDEsIHVuLAorCQkJCQkgTVBfQkFTRVNfQklHX0JBU0VfMTAsCisJCQkJCSBNUF9CQVNFU19CSUdfQkFTRV9JTlZFUlRFRF8xMCwKKwkJCQkJIE1QX0JBU0VTX05PUk1BTElaQVRJT05fU1RFUFNfMTApOworCSAgdW4gLT0gcnBbdW5dID09IDA7CisJICBmcmFjID0gKHJwWzBdICsgMSkgPDwgR01QX05BSUxfQklUUzsKKwkgIHMgLT0gTVBfQkFTRVNfQ0hBUlNfUEVSX0xJTUJfMTA7CisjaWYgSEFWRV9IT1NUX0NQVV9GQU1JTFlfeDg2CisJICAvKiBUaGUgY29kZSBiZWxvdyB0dXJucyBvdXQgdG8gYmUgYSBiaXQgc2xvd2VyIGZvciB4ODYgdXNpbmcgZ2NjLgorCSAgICAgVXNlIHBsYWluIGNvZGUuICAqLworCSAgaSA9IE1QX0JBU0VTX0NIQVJTX1BFUl9MSU1CXzEwOworCSAgZG8KKwkgICAgeworCSAgICAgIHVtdWxfcHBtbSAoZGlnaXQsIGZyYWMsIGZyYWMsIDEwKTsKKwkgICAgICAqcysrID0gZGlnaXQ7CisJICAgIH0KKwkgIHdoaWxlICgtLWkpOworI2Vsc2UKKwkgIC8qIFVzZSB0aGUgZmFjdCB0aGF0IDEwIGluIGJpbmFyeSBpcyAxMDEwLCB3aXRoIHRoZSBsb3dlc3QgYml0IDAuCisJICAgICBBZnRlciBhIGZldyB1bXVsX3BwbW0sIHdlIHdpbGwgaGF2ZSBhY2N1bXVsYXRlZCBlbm91Z2ggbG93IHplcm9zCisJICAgICB0byB1c2UgYSBwbGFpbiBtdWx0aXBseS4gICovCisJICBpZiAoTVBfQkFTRVNfTk9STUFMSVpBVElPTl9TVEVQU18xMCA9PSAwKQorCSAgICB7CisJICAgICAgdW11bF9wcG1tIChkaWdpdCwgZnJhYywgZnJhYywgMTApOworCSAgICAgICpzKysgPSBkaWdpdDsKKwkgICAgfQorCSAgaWYgKE1QX0JBU0VTX05PUk1BTElaQVRJT05fU1RFUFNfMTAgPD0gMSkKKwkgICAgeworCSAgICAgIHVtdWxfcHBtbSAoZGlnaXQsIGZyYWMsIGZyYWMsIDEwKTsKKwkgICAgICAqcysrID0gZGlnaXQ7CisJICAgIH0KKwkgIGlmIChNUF9CQVNFU19OT1JNQUxJWkFUSU9OX1NURVBTXzEwIDw9IDIpCisJICAgIHsKKwkgICAgICB1bXVsX3BwbW0gKGRpZ2l0LCBmcmFjLCBmcmFjLCAxMCk7CisJICAgICAgKnMrKyA9IGRpZ2l0OworCSAgICB9CisJICBpZiAoTVBfQkFTRVNfTk9STUFMSVpBVElPTl9TVEVQU18xMCA8PSAzKQorCSAgICB7CisJICAgICAgdW11bF9wcG1tIChkaWdpdCwgZnJhYywgZnJhYywgMTApOworCSAgICAgICpzKysgPSBkaWdpdDsKKwkgICAgfQorCSAgaSA9IChNUF9CQVNFU19DSEFSU19QRVJfTElNQl8xMCAtICgoTVBfQkFTRVNfTk9STUFMSVpBVElPTl9TVEVQU18xMCA8IDQpCisJCQkJCSAgICAgPyAoNC1NUF9CQVNFU19OT1JNQUxJWkFUSU9OX1NURVBTXzEwKQorCQkJCQkgICAgIDogMCkpOworCSAgZnJhYyA9IChmcmFjICsgMHhmKSA+PiA0OworCSAgZG8KKwkgICAgeworCSAgICAgIGZyYWMgKj0gMTA7CisJICAgICAgZGlnaXQgPSBmcmFjID4+IChHTVBfTElNQl9CSVRTIC0gNCk7CisJICAgICAgKnMrKyA9IGRpZ2l0OworCSAgICAgIGZyYWMgJj0gKH4obXBfbGltYl90KSAwKSA+PiA0OworCSAgICB9CisJICB3aGlsZSAoLS1pKTsKKyNlbmRpZgorCSAgcyAtPSBNUF9CQVNFU19DSEFSU19QRVJfTElNQl8xMDsKKwl9CisKKyAgICAgIHVsID0gcnBbMV07CisgICAgICB3aGlsZSAodWwgIT0gMCkKKwl7CisJICB1ZGl2X3FybmRfdW5ub3JtICh1bCwgcmwsIHVsLCAxMCk7CisJICAqLS1zID0gcmw7CisJfQorICAgIH0KKyAgZWxzZSAvKiBub3QgYmFzZSAxMCAqLworICAgIHsKKyAgICAgIHVuc2lnbmVkIGNoYXJzX3Blcl9saW1iOworICAgICAgbXBfbGltYl90IGJpZ19iYXNlLCBiaWdfYmFzZV9pbnZlcnRlZDsKKyAgICAgIHVuc2lnbmVkIG5vcm1hbGl6YXRpb25fc3RlcHM7CisKKyAgICAgIGNoYXJzX3Blcl9saW1iID0gbXBfYmFzZXNbYmFzZV0uY2hhcnNfcGVyX2xpbWI7CisgICAgICBiaWdfYmFzZSA9IG1wX2Jhc2VzW2Jhc2VdLmJpZ19iYXNlOworICAgICAgYmlnX2Jhc2VfaW52ZXJ0ZWQgPSBtcF9iYXNlc1tiYXNlXS5iaWdfYmFzZV9pbnZlcnRlZDsKKyAgICAgIGNvdW50X2xlYWRpbmdfemVyb3MgKG5vcm1hbGl6YXRpb25fc3RlcHMsIGJpZ19iYXNlKTsKKworICAgICAgTVBOX0NPUFkgKHJwICsgMSwgdXAsIHVuKTsKKworICAgICAgcyA9IGJ1ZiArIEJVRl9BTExPQzsKKyAgICAgIHdoaWxlICh1biA+IDEpCisJeworCSAgaW50IGk7CisJICBtcF9saW1iX3QgZnJhYzsKKwkgIE1QTl9ESVZSRU1fT1JfUFJFSU5WX0RJVlJFTV8xIChycCwgKG1wX3NpemVfdCkgMSwgcnAgKyAxLCB1biwKKwkJCQkJIGJpZ19iYXNlLCBiaWdfYmFzZV9pbnZlcnRlZCwKKwkJCQkJIG5vcm1hbGl6YXRpb25fc3RlcHMpOworCSAgdW4gLT0gcnBbdW5dID09IDA7CisJICBmcmFjID0gKHJwWzBdICsgMSkgPDwgR01QX05BSUxfQklUUzsKKwkgIHMgLT0gY2hhcnNfcGVyX2xpbWI7CisJICBpID0gY2hhcnNfcGVyX2xpbWI7CisJICBkbworCSAgICB7CisJICAgICAgbXBfbGltYl90IGRpZ2l0OworCSAgICAgIHVtdWxfcHBtbSAoZGlnaXQsIGZyYWMsIGZyYWMsIGJhc2UpOworCSAgICAgICpzKysgPSBkaWdpdDsKKwkgICAgfQorCSAgd2hpbGUgKC0taSk7CisJICBzIC09IGNoYXJzX3Blcl9saW1iOworCX0KKworICAgICAgdWwgPSBycFsxXTsKKyAgICAgIHdoaWxlICh1bCAhPSAwKQorCXsKKwkgIHVkaXZfcXJuZF91bm5vcm0gKHVsLCBybCwgdWwsIGJhc2UpOworCSAgKi0tcyA9IHJsOworCX0KKyAgICB9CisKKyAgbCA9IGJ1ZiArIEJVRl9BTExPQyAtIHM7CisgIHdoaWxlIChsIDwgbGVuKQorICAgIHsKKyAgICAgICpzdHIrKyA9IDA7CisgICAgICBsZW4tLTsKKyAgICB9CisgIHdoaWxlIChsICE9IDApCisgICAgeworICAgICAgKnN0cisrID0gKnMrKzsKKyAgICAgIGwtLTsKKyAgICB9CisgIHJldHVybiBzdHI7Cit9CisKKwwKKy8qIENvbnZlcnQge1VQLFVOfSB0byBhIHN0cmluZyB3aXRoIGEgYmFzZSBhcyByZXByZXNlbnRlZCBpbiBQT1dUQUIsIGFuZCBwdXQKKyAgIHRoZSBzdHJpbmcgaW4gU1RSLiAgR2VuZXJhdGUgTEVOIGNoYXJhY3RlcnMsIHBvc3NpYmx5IHBhZGRpbmcgd2l0aCB6ZXJvcyB0bworICAgdGhlIGxlZnQuICBJZiBMRU4gaXMgemVybywgZ2VuZXJhdGUgYXMgbWFueSBjaGFyYWN0ZXJzIGFzIHJlcXVpcmVkLgorICAgUmV0dXJuIGEgcG9pbnRlciBpbW1lZGlhdGVseSBhZnRlciB0aGUgbGFzdCBkaWdpdCBvZiB0aGUgcmVzdWx0IHN0cmluZy4KKyAgIFRoaXMgdXNlcyBkaXZpZGUtYW5kLWNvbnF1ZXIgYW5kIGlzIGludGVuZGVkIGZvciBsYXJnZSBjb252ZXJzaW9ucy4gICovCitzdGF0aWMgdW5zaWduZWQgY2hhciAqCittcG5fZGNfZ2V0X3N0ciAodW5zaWduZWQgY2hhciAqc3RyLCBzaXplX3QgbGVuLAorCQltcF9wdHIgdXAsIG1wX3NpemVfdCB1biwKKwkJY29uc3QgcG93ZXJzX3QgKnBvd3RhYiwgbXBfcHRyIHRtcCkKK3sKKyAgaWYgKEJFTE9XX1RIUkVTSE9MRCAodW4sIEdFVF9TVFJfRENfVEhSRVNIT0xEKSkKKyAgICB7CisgICAgICBpZiAodW4gIT0gMCkKKwlzdHIgPSBtcG5fYmNfZ2V0X3N0ciAoc3RyLCBsZW4sIHVwLCB1biwgcG93dGFiLT5iYXNlKTsKKyAgICAgIGVsc2UKKwl7CisJICB3aGlsZSAobGVuICE9IDApCisJICAgIHsKKwkgICAgICAqc3RyKysgPSAwOworCSAgICAgIGxlbi0tOworCSAgICB9CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIG1wX3B0ciBwd3AsIHFwLCBycDsKKyAgICAgIG1wX3NpemVfdCBwd24sIHFuOworICAgICAgbXBfc2l6ZV90IHNuOworCisgICAgICBwd3AgPSBwb3d0YWItPnA7CisgICAgICBwd24gPSBwb3d0YWItPm47CisgICAgICBzbiA9IHBvd3RhYi0+c2hpZnQ7CisKKyAgICAgIGlmICh1biA8IHB3biArIHNuIHx8ICh1biA9PSBwd24gKyBzbiAmJiBtcG5fY21wICh1cCArIHNuLCBwd3AsIHVuIC0gc24pIDwgMCkpCisJeworCSAgc3RyID0gbXBuX2RjX2dldF9zdHIgKHN0ciwgbGVuLCB1cCwgdW4sIHBvd3RhYiAtIDEsIHRtcCk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHFwID0gdG1wOwkJLyogKHVuIC0gcHduICsgMSkgbGltYnMgZm9yIHFwICovCisJICBycCA9IHVwOwkJLyogcHduIGxpbWJzIGZvciBycDsgb3ZlcndyaXRlIHVwIGFyZWEgKi8KKworCSAgbXBuX3RkaXZfcXIgKHFwLCBycCArIHNuLCAwTCwgdXAgKyBzbiwgdW4gLSBzbiwgcHdwLCBwd24pOworCSAgcW4gPSB1biAtIHNuIC0gcHduOyBxbiArPSBxcFtxbl0gIT0gMDsJCS8qIHF1b3RpZW50IHNpemUgKi8KKworCSAgQVNTRVJUIChxbiA8IHB3biArIHNuIHx8IChxbiA9PSBwd24gKyBzbiAmJiBtcG5fY21wIChxcCArIHNuLCBwd3AsIHB3bikgPCAwKSk7CisKKwkgIGlmIChsZW4gIT0gMCkKKwkgICAgbGVuID0gbGVuIC0gcG93dGFiLT5kaWdpdHNfaW5fYmFzZTsKKworCSAgc3RyID0gbXBuX2RjX2dldF9zdHIgKHN0ciwgbGVuLCBxcCwgcW4sIHBvd3RhYiAtIDEsIHRtcCArIHFuKTsKKwkgIHN0ciA9IG1wbl9kY19nZXRfc3RyIChzdHIsIHBvd3RhYi0+ZGlnaXRzX2luX2Jhc2UsIHJwLCBwd24gKyBzbiwgcG93dGFiIC0gMSwgdG1wKTsKKwl9CisgICAgfQorICByZXR1cm4gc3RyOworfQorCisvKiBUaGVyZSBhcmUgbm8gbGVhZGluZyB6ZXJvcyBvbiB0aGUgZGlnaXRzIGdlbmVyYXRlZCBhdCBzdHIsIGJ1dCB0aGF0J3Mgbm90CisgICBjdXJyZW50bHkgYSBkb2N1bWVudGVkIGZlYXR1cmUuICBUaGUgY3VycmVudCBtcHpfb3V0X3N0ciBhbmQgbXB6X2dldF9zdHIKKyAgIHJlbHkgb24gaXQuICAqLworCitzaXplX3QKK21wbl9nZXRfc3RyICh1bnNpZ25lZCBjaGFyICpzdHIsIGludCBiYXNlLCBtcF9wdHIgdXAsIG1wX3NpemVfdCB1bikKK3sKKyAgbXBfcHRyIHBvd3RhYl9tZW07CisgIHBvd2Vyc190IHBvd3RhYltHTVBfTElNQl9CSVRTXTsKKyAgaW50IHBpOworICBzaXplX3Qgb3V0X2xlbjsKKyAgbXBfcHRyIHRtcDsKKyAgVE1QX0RFQ0w7CisKKyAgLyogU3BlY2lhbCBjYXNlIHplcm8sIGFzIHRoZSBjb2RlIGJlbG93IGRvZXNuJ3QgaGFuZGxlIGl0LiAgKi8KKyAgaWYgKHVuID09IDApCisgICAgeworICAgICAgc3RyWzBdID0gMDsKKyAgICAgIHJldHVybiAxOworICAgIH0KKworICBpZiAoUE9XMl9QIChiYXNlKSkKKyAgICB7CisgICAgICAvKiBUaGUgYmFzZSBpcyBhIHBvd2VyIG9mIDIuICBDb252ZXJ0IGZyb20gbW9zdCBzaWduaWZpY2FudCBlbmQuICAqLworICAgICAgbXBfbGltYl90IG4xLCBuMDsKKyAgICAgIGludCBiaXRzX3Blcl9kaWdpdCA9IG1wX2Jhc2VzW2Jhc2VdLmJpZ19iYXNlOworICAgICAgaW50IGNudDsKKyAgICAgIGludCBiaXRfcG9zOworICAgICAgbXBfc2l6ZV90IGk7CisgICAgICB1bnNpZ25lZCBjaGFyICpzID0gc3RyOworICAgICAgbXBfYml0Y250X3QgYml0czsKKworICAgICAgbjEgPSB1cFt1biAtIDFdOworICAgICAgY291bnRfbGVhZGluZ196ZXJvcyAoY250LCBuMSk7CisKKyAgICAgIC8qIEJJVF9QT1Mgc2hvdWxkIGJlIFIgd2hlbiBpbnB1dCBlbmRzIGluIGxlYXN0IHNpZ25pZmljYW50IG5pYmJsZSwKKwkgUiArIGJpdHNfcGVyX2RpZ2l0ICogbiB3aGVuIGlucHV0IGVuZHMgaW4gbnRoIGxlYXN0IHNpZ25pZmljYW50CisJIG5pYmJsZS4gKi8KKworICAgICAgYml0cyA9IChtcF9iaXRjbnRfdCkgR01QX05VTUJfQklUUyAqIHVuIC0gY250ICsgR01QX05BSUxfQklUUzsKKyAgICAgIGNudCA9IGJpdHMgJSBiaXRzX3Blcl9kaWdpdDsKKyAgICAgIGlmIChjbnQgIT0gMCkKKwliaXRzICs9IGJpdHNfcGVyX2RpZ2l0IC0gY250OworICAgICAgYml0X3BvcyA9IGJpdHMgLSAobXBfYml0Y250X3QpICh1biAtIDEpICogR01QX05VTUJfQklUUzsKKworICAgICAgLyogRmFzdCBsb29wIGZvciBiaXQgb3V0cHV0LiAgKi8KKyAgICAgIGkgPSB1biAtIDE7CisgICAgICBmb3IgKDs7KQorCXsKKwkgIGJpdF9wb3MgLT0gYml0c19wZXJfZGlnaXQ7CisJICB3aGlsZSAoYml0X3BvcyA+PSAwKQorCSAgICB7CisJICAgICAgKnMrKyA9IChuMSA+PiBiaXRfcG9zKSAmICgoMSA8PCBiaXRzX3Blcl9kaWdpdCkgLSAxKTsKKwkgICAgICBiaXRfcG9zIC09IGJpdHNfcGVyX2RpZ2l0OworCSAgICB9CisJICBpLS07CisJICBpZiAoaSA8IDApCisJICAgIGJyZWFrOworCSAgbjAgPSAobjEgPDwgLWJpdF9wb3MpICYgKCgxIDw8IGJpdHNfcGVyX2RpZ2l0KSAtIDEpOworCSAgbjEgPSB1cFtpXTsKKwkgIGJpdF9wb3MgKz0gR01QX05VTUJfQklUUzsKKwkgICpzKysgPSBuMCB8IChuMSA+PiBiaXRfcG9zKTsKKwl9CisKKyAgICAgIHJldHVybiBzIC0gc3RyOworICAgIH0KKworICAvKiBHZW5lcmFsIGNhc2UuICBUaGUgYmFzZSBpcyBub3QgYSBwb3dlciBvZiAyLiAgKi8KKworICBpZiAoQkVMT1dfVEhSRVNIT0xEICh1biwgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCkpCisgICAgcmV0dXJuIG1wbl9iY19nZXRfc3RyIChzdHIsIChzaXplX3QpIDAsIHVwLCB1biwgYmFzZSkgLSBzdHI7CisKKyAgVE1QX01BUks7CisKKyAgLyogQWxsb2NhdGUgb25lIGxhcmdlIGJsb2NrIGZvciB0aGUgcG93ZXJzIG9mIGJpZ19iYXNlLiAgKi8KKyAgcG93dGFiX21lbSA9IFRNUF9CQUxMT0NfTElNQlMgKG1wbl9zdHJfcG93dGFiX2FsbG9jICh1bikpOworCisgIC8qIENvbXB1dGUgYSB0YWJsZSBvZiBwb3dlcnMsIHdlcmUgdGhlIGxhcmdlc3QgcG93ZXIgaXMgPj0gc3FydChVKS4gICovCisgIHNpemVfdCBuZGlnOworICBtcF9zaXplX3QgeG47CisgIERJR0lUU19JTl9CQVNFX1BFUl9MSU1CIChuZGlnLCB1biwgYmFzZSk7CisgIHhuID0gMSArIG5kaWcgLyBtcF9iYXNlc1tiYXNlXS5jaGFyc19wZXJfbGltYjsgLyogRklYTUU6IHNjYWxhciBpbnRlZ2VyIGRpdmlzaW9uICovCisKKyAgcGkgPSAxICsgbXBuX2NvbXB1dGVfcG93dGFiIChwb3d0YWIsIHBvd3RhYl9tZW0sIHhuLCBiYXNlKTsKKworICAvKiBVc2luZyBvdXIgcHJlY29tcHV0ZWQgcG93ZXJzLCBub3cgaW4gcG93dGFiW10sIGNvbnZlcnQgb3VyIG51bWJlci4gICovCisgIHRtcCA9IFRNUF9CQUxMT0NfTElNQlMgKG1wbl9kY19nZXRfc3RyX2l0Y2ggKHVuKSk7CisgIG91dF9sZW4gPSBtcG5fZGNfZ2V0X3N0ciAoc3RyLCAwLCB1cCwgdW4sIHBvd3RhYiArIChwaSAtIDEpLCB0bXApIC0gc3RyOworICBUTVBfRlJFRTsKKworICByZXR1cm4gb3V0X2xlbjsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvZ21wLW1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkYzA1N2EKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvZ21wLW1wYXJhbS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qIEdlbmVyaWMgQyBnbXAtbXBhcmFtLmggLS0gQ29tcGlsZXIvbWFjaGluZSBwYXJhbWV0ZXIgaGVhZGVyIGZpbGUuCisKK0NvcHlyaWdodCAxOTkxLCAxOTkzLCAxOTk0LCAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisKKy8qIFZhbHVlcyBmb3IgR01QX0xJTUJfQklUUyBldGMgd2lsbCBiZSBkZXRlcm1pbmVkIGJ5IC4vY29uZmlndXJlIGFuZCBwdXQKKyAgIGluIGNvbmZpZy5oLiAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2hnY2QuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9oZ2NkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNlOWM2NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9oZ2NkLmMKQEAgLTAsMCArMSwxODIgQEAKKy8qIGhnY2QuYy4KKworICAgVEhFIEZVTkNUSU9OUyBJTiBUSElTIEZJTEUgQVJFIElOVEVSTkFMIFdJVEggTVVUQUJMRSBJTlRFUkZBQ0VTLiAgSVQgSVMgT05MWQorICAgU0FGRSBUTyBSRUFDSCBUSEVNIFRIUk9VR0ggRE9DVU1FTlRFRCBJTlRFUkZBQ0VTLiAgSU4gRkFDVCwgSVQgSVMgQUxNT1NUCisgICBHVUFSQU5URUVEIFRIQVQgVEhFWSdMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEgRlVUVVJFIEdOVSBNUCBSRUxFQVNFLgorCitDb3B5cmlnaHQgMjAwMy0yMDA1LCAyMDA4LCAyMDExLCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKyNpbmNsdWRlICJsb25nbG9uZy5oIgorCisKKy8qIFNpemUgYW5hbHlzaXMgZm9yIGhnY2Q6CisKKyAgIEZvciB0aGUgcmVjdXJzaXZlIGNhbGxzLCB3ZSBoYXZlIG4xIDw9IGNlaWwobiAvIDIpLiBUaGVuIHRoZQorICAgc3RvcmFnZSBuZWVkIGlzIGRldGVybWluZWQgYnkgdGhlIHN0b3JhZ2UgZm9yIHRoZSByZWN1cnNpdmUgY2FsbAorICAgY29tcHV0aW5nIE0xLCBhbmQgaGdjZF9tYXRyaXhfYWRqdXN0IGFuZCBoZ2NkX21hdHJpeF9tdWwgY2FsbHMgdGhhdCB1c2UgTTEKKyAgIChhZnRlciB0aGlzLCB0aGUgc3RvcmFnZSBuZWVkZWQgZm9yIE0xIGNhbiBiZSByZWN5Y2xlZCkuCisKKyAgIExldCBTKHIpIGRlbm90ZSB0aGUgcmVxdWlyZWQgc3RvcmFnZS4gRm9yIE0xIHdlIG5lZWQgNCAqIChjZWlsKG4xLzIpICsgMSkKKyAgID0gNCAqIChjZWlsKG4vNCkgKyAxKSwgZm9yIHRoZSBoZ2NkX21hdHJpeF9hZGp1c3QgY2FsbCwgd2UgbmVlZCBuICsgMiwKKyAgIGFuZCBmb3IgdGhlIGhnY2RfbWF0cml4X211bCwgd2UgbWF5IG5lZWQgMyBjZWlsKG4vMikgKyA4LiBJbiB0b3RhbCwKKyAgIDQgKiBjZWlsKG4vNCkgKyAzIGNlaWwobi8yKSArIDEyIDw9IDEwIGNlaWwobi80KSArIDEyLgorCisgICBGb3IgdGhlIHJlY3Vyc2l2ZSBjYWxsLCB3ZSBuZWVkIFMobjEpID0gUyhjZWlsKG4vMikpLgorCisgICBTKG4pIDw9IDEwKmNlaWwobi80KSArIDEyICsgUyhjZWlsKG4vMikpCisJPD0gMTAqKGNlaWwobi80KSArIC4uLiArIGNlaWwobi8yXigxK2spKSkgKyAxMmsgKyBTKGNlaWwobi8yXmspKQorCTw9IDEwKigyIGNlaWwobi80KSArIGspICsgMTJrICsgUyhjZWlsKG4vMl5rKSkKKwk8PSAyMCBjZWlsKG4vNCkgKyAyMmsgKyBTKGNlaWwobi8yXmspKQorKi8KKworbXBfc2l6ZV90CittcG5faGdjZF9pdGNoIChtcF9zaXplX3QgbikKK3sKKyAgdW5zaWduZWQgazsKKyAgaW50IGNvdW50OworICBtcF9zaXplX3QgbnNjYWxlZDsKKworICBpZiAoQkVMT1dfVEhSRVNIT0xEIChuLCBIR0NEX1RIUkVTSE9MRCkpCisgICAgcmV0dXJuIG47CisKKyAgLyogR2V0IHRoZSByZWN1cnNpb24gZGVwdGguICovCisgIG5zY2FsZWQgPSAobiAtIDEpIC8gKEhHQ0RfVEhSRVNIT0xEIC0gMSk7CisgIGNvdW50X2xlYWRpbmdfemVyb3MgKGNvdW50LCBuc2NhbGVkKTsKKyAgayA9IEdNUF9MSU1CX0JJVFMgLSBjb3VudDsKKworICByZXR1cm4gMjAgKiAoKG4rMykgLyA0KSArIDIyICogayArIEhHQ0RfVEhSRVNIT0xEOworfQorCisvKiBSZWR1Y2VzIGEsYiB1bnRpbCB8YS1ifCBmaXRzIGluIG4vMiArIDEgbGltYnMuIENvbnN0cnVjdHMgbWF0cml4IE0KKyAgIHdpdGggZWxlbWVudHMgb2Ygc2l6ZSBhdCBtb3N0IChuKzEpLzIgLSAxLiBSZXR1cm5zIG5ldyBzaXplIG9mIGEsCisgICBiLCBvciB6ZXJvIGlmIG5vIHJlZHVjdGlvbiBpcyBwb3NzaWJsZS4gKi8KKworbXBfc2l6ZV90CittcG5faGdjZCAobXBfcHRyIGFwLCBtcF9wdHIgYnAsIG1wX3NpemVfdCBuLAorCSAgc3RydWN0IGhnY2RfbWF0cml4ICpNLCBtcF9wdHIgdHApCit7CisgIG1wX3NpemVfdCBzID0gbi8yICsgMTsKKworICBtcF9zaXplX3Qgbm47CisgIGludCBzdWNjZXNzID0gMDsKKworICBpZiAobiA8PSBzKQorICAgIC8qIEhhcHBlbnMgd2hlbiBuIDw9IDIsIGEgZmFpcmx5IHVuaW50ZXJlc3RpbmcgY2FzZSBidXQgZXhlcmNpc2VkCisgICAgICAgYnkgdGhlIHJhbmRvbSBpbnB1dHMgb2YgdGhlIHRlc3RzdWl0ZS4gKi8KKyAgICByZXR1cm4gMDsKKworICBBU1NFUlQgKChhcFtuLTFdIHwgYnBbbi0xXSkgPiAwKTsKKworICBBU1NFUlQgKChuKzEpLzIgLSAxIDwgTS0+YWxsb2MpOworCisgIGlmIChBQk9WRV9USFJFU0hPTEQgKG4sIEhHQ0RfVEhSRVNIT0xEKSkKKyAgICB7CisgICAgICBtcF9zaXplX3QgbjIgPSAoMypuKS80ICsgMTsKKyAgICAgIG1wX3NpemVfdCBwID0gbi8yOworCisgICAgICBubiA9IG1wbl9oZ2NkX3JlZHVjZSAoTSwgYXAsIGJwLCBuLCBwLCB0cCk7CisgICAgICBpZiAobm4pCisJeworCSAgbiA9IG5uOworCSAgc3VjY2VzcyA9IDE7CisJfQorCisgICAgICAvKiBOT1RFOiBJdCBhcHBlYXJzIHRoaXMgbG9vcCBuZXZlciBydW5zIG1vcmUgdGhhbiBvbmNlIChhdAorCSBsZWFzdCB3aGVuIG5vdCByZWN1cnNpbmcgdG8gaGdjZF9hcHByKS4gKi8KKyAgICAgIHdoaWxlIChuID4gbjIpCisJeworCSAgLyogTmVlZHMgbiArIDEgc3RvcmFnZSAqLworCSAgbm4gPSBtcG5faGdjZF9zdGVwIChuLCBhcCwgYnAsIHMsIE0sIHRwKTsKKwkgIGlmICghbm4pCisJICAgIHJldHVybiBzdWNjZXNzID8gbiA6IDA7CisKKwkgIG4gPSBubjsKKwkgIHN1Y2Nlc3MgPSAxOworCX0KKworICAgICAgaWYgKG4gPiBzICsgMikKKwl7CisJICBzdHJ1Y3QgaGdjZF9tYXRyaXggTTE7CisJICBtcF9zaXplX3Qgc2NyYXRjaDsKKworCSAgcCA9IDIqcyAtIG4gKyAxOworCSAgc2NyYXRjaCA9IE1QTl9IR0NEX01BVFJJWF9JTklUX0lUQ0ggKG4tcCk7CisKKwkgIG1wbl9oZ2NkX21hdHJpeF9pbml0KCZNMSwgbiAtIHAsIHRwKTsKKworCSAgLyogRklYTUU6IFNob3VsZCB1c2UgaGdjZF9yZWR1Y2UsIGJ1dCB0aGF0IG1heSByZXF1aXJlIG1vcmUKKwkgICAgIHNjcmF0Y2ggc3BhY2UsIHdoaWNoIHJlcXVpcmVzIHJldmlldy4gKi8KKworCSAgbm4gPSBtcG5faGdjZCAoYXAgKyBwLCBicCArIHAsIG4gLSBwLCAmTTEsIHRwICsgc2NyYXRjaCk7CisJICBpZiAobm4gPiAwKQorCSAgICB7CisJICAgICAgLyogV2UgYWx3YXlzIGhhdmUgbWF4KE0pID4gMl57LShHTVBfTlVNQl9CSVRTICsgMSl9IG1heChNMSkgKi8KKwkgICAgICBBU1NFUlQgKE0tPm4gKyAyID49IE0xLm4pOworCisJICAgICAgLyogRnVydGhlcm1vcmUsIGFzc3VtZSBNIGVuZHMgd2l0aCBhIHF1b3RpZW50ICgxLCBxOyAwLCAxKSwKKwkJIHRoZW4gZWl0aGVyIHEgb3IgcSArIDEgaXMgYSBjb3JyZWN0IHF1b3RpZW50LCBhbmQgTTEgd2lsbAorCQkgc3RhcnQgd2l0aCBlaXRoZXIgKDEsIDA7IDEsIDEpIG9yICgyLCAxOyAxLCAxKS4gVGhpcworCQkgcnVsZXMgb3V0IHRoZSBjYXNlIHRoYXQgdGhlIHNpemUgb2YgTSAqIE0xIGlzIG11Y2gKKwkJIHNtYWxsZXIgdGhhbiB0aGUgZXhwZWN0ZWQgTS0+biArIE0xLT5uLiAqLworCisJICAgICAgQVNTRVJUIChNLT5uICsgTTEubiA8IE0tPmFsbG9jKTsKKworCSAgICAgIC8qIE5lZWRzIDIgKHAgKyBNLT5uKSA8PSAyICgyKnMgLSBuMiArIDEgKyBuMiAtIHMgLSAxKQorCQkgPSAyKnMgPD0gMiooZmxvb3Iobi8yKSArIDEpIDw9IG4gKyAyLiAqLworCSAgICAgIG4gPSBtcG5faGdjZF9tYXRyaXhfYWRqdXN0ICgmTTEsIHAgKyBubiwgYXAsIGJwLCBwLCB0cCArIHNjcmF0Y2gpOworCisJICAgICAgLyogV2UgbmVlZCBhIGJvdW5kIGZvciBvZiBNLT5uICsgTTEubi4gTGV0IG4gYmUgdGhlIG9yaWdpbmFsCisJCSBpbnB1dCBzaXplLiBUaGVuCisKKwkJIGNlaWwobi8yKSAtIDEgPj0gc2l6ZSBvZiBwcm9kdWN0ID49IE0ubiArIE0xLm4gLSAyCisKKwkJIGFuZCBpdCBmb2xsb3dzIHRoYXQKKworCQkgTS5uICsgTTEubiA8PSBjZWlsKG4vMikgKyAxCisKKwkJIFRoZW4gMyooTS5uICsgTTEubikgKyA1IDw9IDMgKiBjZWlsKG4vMikgKyA4IGlzIHRoZQorCQkgYW1vdW50IG9mIG5lZWRlZCBzY3JhdGNoIHNwYWNlLiAqLworCSAgICAgIG1wbl9oZ2NkX21hdHJpeF9tdWwgKE0sICZNMSwgdHAgKyBzY3JhdGNoKTsKKwkgICAgICBzdWNjZXNzID0gMTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgZm9yICg7OykKKyAgICB7CisgICAgICAvKiBOZWVkcyBzKzMgPCBuICovCisgICAgICBubiA9IG1wbl9oZ2NkX3N0ZXAgKG4sIGFwLCBicCwgcywgTSwgdHApOworICAgICAgaWYgKCFubikKKwlyZXR1cm4gc3VjY2VzcyA/IG4gOiAwOworCisgICAgICBuID0gbm47CisgICAgICBzdWNjZXNzID0gMTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvaGdjZDIuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9oZ2NkMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmYTQwMTIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvaGdjZDIuYwpAQCAtMCwwICsxLDczNCBAQAorLyogaGdjZDIuYworCisgICBUSEUgRlVOQ1RJT05TIElOIFRISVMgRklMRSBBUkUgSU5URVJOQUwgV0lUSCBNVVRBQkxFIElOVEVSRkFDRVMuICBJVCBJUyBPTkxZCisgICBTQUZFIFRPIFJFQUNIIFRIRU0gVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuICBJTiBGQUNULCBJVCBJUyBBTE1PU1QKKyAgIEdVQVJBTlRFRUQgVEhBVCBUSEVZJ0xMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR05VIE1QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAxOTk2LCAxOTk4LCAyMDAwLTIwMDQsIDIwMDgsIDIwMTIsIDIwMTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKyNpbmNsdWRlICJsb25nbG9uZy5oIgorCisjaWZuZGVmIEhHQ0QyX0RJVjFfTUVUSE9ECisjZGVmaW5lIEhHQ0QyX0RJVjFfTUVUSE9EIDMKKyNlbmRpZgorCisjaWZuZGVmIEhHQ0QyX0RJVjJfTUVUSE9ECisjZGVmaW5lIEhHQ0QyX0RJVjJfTUVUSE9EIDIKKyNlbmRpZgorCisjaWYgR01QX05BSUxfQklUUyAhPSAwCisjZXJyb3IgTmFpbHMgbm90IGltcGxlbWVudGVkCisjZW5kaWYKKworI2lmIEhBVkVfTkFUSVZFX21wbl9kaXZfMTEKKworI2RlZmluZSBkaXYxIG1wbl9kaXZfMTEKKy8qIFNpbmdsZS1saW1iIGRpdmlzaW9uIG9wdGltaXplZCBmb3Igc21hbGwgcXVvdGllbnRzLgorICAgUmV0dXJuZWQgdmFsdWUgaG9sZHMgZDAgPSByLCBkMSA9IHEuICovCittcF9kb3VibGVfbGltYl90IGRpdjEgKG1wX2xpbWJfdCwgbXBfbGltYl90KTsKKworI2VsaWYgSEdDRDJfRElWMV9NRVRIT0QgPT0gMQorCitzdGF0aWMgaW5saW5lIG1wX2RvdWJsZV9saW1iX3QKK2RpdjEgKG1wX2xpbWJfdCBuMCwgbXBfbGltYl90IGQwKQoreworICBtcF9kb3VibGVfbGltYl90IHJlczsKKyAgcmVzLmQxID0gbjAgLyBkMDsKKyAgcmVzLmQwID0gbjAgLSByZXMuZDEgKiBkMDsKKworICByZXR1cm4gcmVzOworfQorCisjZWxpZiBIR0NEMl9ESVYxX01FVEhPRCA9PSAyCisKK3N0YXRpYyBtcF9kb3VibGVfbGltYl90CitkaXYxIChtcF9saW1iX3QgbjAsIG1wX2xpbWJfdCBkMCkKK3sKKyAgbXBfZG91YmxlX2xpbWJfdCByZXM7CisgIGludCBuY250LCBkY250LCBjbnQ7CisgIG1wX2xpbWJfdCBxOworICBtcF9saW1iX3QgbWFzazsKKworICBBU1NFUlQgKG4wID49IGQwKTsKKworICBjb3VudF9sZWFkaW5nX3plcm9zIChuY250LCBuMCk7CisgIGNvdW50X2xlYWRpbmdfemVyb3MgKGRjbnQsIGQwKTsKKyAgY250ID0gZGNudCAtIG5jbnQ7CisKKyAgZDAgPDw9IGNudDsKKworICBxID0gLShtcF9saW1iX3QpIChuMCA+PSBkMCk7CisgIG4wIC09IGQwICYgcTsKKyAgZDAgPj49IDE7CisgIHEgPSAtcTsKKworICB3aGlsZSAoLS1jbnQgPj0gMCkKKyAgICB7CisgICAgICBtYXNrID0gLShtcF9saW1iX3QpIChuMCA+PSBkMCk7CisgICAgICBuMCAtPSBkMCAmIG1hc2s7CisgICAgICBkMCA+Pj0gMTsKKyAgICAgIHEgPSAocSA8PCAxKSAtIG1hc2s7CisgICAgfQorCisgIHJlcy5kMCA9IG4wOworICByZXMuZDEgPSBxOworICByZXR1cm4gcmVzOworfQorCisjZWxpZiBIR0NEMl9ESVYxX01FVEhPRCA9PSAzCisKK3N0YXRpYyBpbmxpbmUgbXBfZG91YmxlX2xpbWJfdAorZGl2MSAobXBfbGltYl90IG4wLCBtcF9saW1iX3QgZDApCit7CisgIG1wX2RvdWJsZV9saW1iX3QgcmVzOworICBpZiAoVU5MSUtFTFkgKChkMCA+PiAoR01QX0xJTUJfQklUUyAtIDMpKSAhPSAwKQorICAgICAgfHwgVU5MSUtFTFkgKG4wID49IChkMCA8PCAzKSkpCisgICAgeworICAgICAgcmVzLmQxID0gbjAgLyBkMDsKKyAgICAgIHJlcy5kMCA9IG4wIC0gcmVzLmQxICogZDA7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgbXBfbGltYl90IHEsIG1hc2s7CisKKyAgICAgIGQwIDw8PSAyOworCisgICAgICBtYXNrID0gLShtcF9saW1iX3QpIChuMCA+PSBkMCk7CisgICAgICBuMCAtPSBkMCAmIG1hc2s7CisgICAgICBxID0gNCAmIG1hc2s7CisKKyAgICAgIGQwID4+PSAxOworICAgICAgbWFzayA9IC0obXBfbGltYl90KSAobjAgPj0gZDApOworICAgICAgbjAgLT0gZDAgJiBtYXNrOworICAgICAgcSArPSAyICYgbWFzazsKKworICAgICAgZDAgPj49IDE7CisgICAgICBtYXNrID0gLShtcF9saW1iX3QpIChuMCA+PSBkMCk7CisgICAgICBuMCAtPSBkMCAmIG1hc2s7CisgICAgICBxIC09IG1hc2s7CisKKyAgICAgIHJlcy5kMCA9IG4wOworICAgICAgcmVzLmQxID0gcTsKKyAgICB9CisgIHJldHVybiByZXM7Cit9CisKKyNlbGlmIEhHQ0QyX0RJVjFfTUVUSE9EID09IDQKKworLyogVGFibGUgcXVvdGllbnRzLiAgV2UgZXh0cmFjdCB0aGUgTkJJVFMgbW9zdCBzaWduaWZpY2FudCBiaXRzIG9mIHRoZQorICAgbnVtZXJhdG9yIGxpbWIsIGFuZCB0aGUgY29ycmVzcG9uZGluZyBiaXRzIGZyb20gdGhlIGRpdmlzb3IgbGltYiwgYW5kIHVzZQorICAgdGhlc2UgdG8gZm9ybSBhbiBpbmRleCBpbnRvIHRoZSB0YWJsZS4gIFRoaXMgbWV0aG9kIGlzIHByb2JhYmx5IG9ubHkgdXNlZnVsCisgICBmb3Igc2hvcnQgcGlwZWxpbmVzIHdpdGggc2xvdyBtdWx0aXBsaWNhdGlvbi4KKworICAgUG9zc2libGUgaW1wcm92ZW1lbnRzOgorCisgICAqIFBlcmhhcHMgZXh0cmFjdCB0aGUgaGlnaGVzdCBOQklUUyBvZiB0aGUgZGl2aXNvciBpbnN0ZWFkIG9mIHRoZSBzYW1lIGJpdHMKKyAgICAgYXMgZnJvbSB0aGUgbnVtZXJhdG9yLiAgVGhhdCB3b3VsZCByZXF1aXJlIGFub3RoZXIgY291bnRfbGVhZGluZ196ZXJvcywKKyAgICAgYW5kIGEgcG9zdC1tdWx0aXBseSBzaGlmdCBvZiB0aGUgcXVvdGllbnQuCisKKyAgICogQ29tcHJlc3MgdGFibGVzPyAgVGhlaXIgdmFsdWVzIGFyZSB0aW55LCBhbmQgdGhlcmUgYXJlIGxvdHMgb2YgemVybworICAgICBlbnRyaWVzICh3aGljaCBhcmUgbmV2ZXIgdXNlZCkuCisKKyAgICogUm91bmQgdGhlIHRhYmxlIGVudHJpZXMgbW9yZSBjbGV2ZXJseT8KKyovCisKKyNpZm5kZWYgTkJJVFMKKyNkZWZpbmUgTkJJVFMgNQorI2VuZGlmCisKKyNpZiBOQklUUyA9PSA1CisvKiBUaGlzIG5lZWRzIGZ1bGwgZGl2aXNpb24gYWJvdXQgMTMuMiUgb2YgdGhlIHRpbWUuICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciB0YWJbNTEyXSA9IHsKKzE3LCA5LCA1LDQsMywyLDIsMiwxLDEsMSwxLDEsMSwxLDEsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwKKzE4LCA5LCA2LDQsMywyLDIsMiwxLDEsMSwxLDEsMSwxLDEsMSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwKKzE5LDEwLCA2LDQsMywzLDIsMiwyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwKKzIwLDEwLCA2LDUsMywzLDIsMiwyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwKKzIxLDExLCA3LDUsNCwzLDIsMiwyLDIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwKKzIyLDExLCA3LDUsNCwzLDMsMiwyLDIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwKKzIzLDEyLCA3LDUsNCwzLDMsMiwyLDIsMiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwwLDAsMCwwLDAsMCwwLDAsMCwKKzI0LDEyLCA4LDYsNCwzLDMsMiwyLDIsMiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDAsMCwwLDAsMCwwLDAsMCwKKzI1LDEzLCA4LDYsNSw0LDMsMywyLDIsMiwyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMCwwLDAsMCwwLDAsMCwKKzI2LDEzLCA4LDYsNSw0LDMsMywyLDIsMiwyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwwLDAsMCwwLDAsMCwKKzI3LDE0LCA5LDYsNSw0LDMsMywyLDIsMiwyLDIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDAsMCwwLDAsMCwKKzI4LDE0LCA5LDcsNSw0LDMsMywzLDIsMiwyLDIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMCwwLDAsMCwKKzI5LDE1LDEwLDcsNSw0LDQsMywzLDIsMiwyLDIsMiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwwLDAsMCwKKzMwLDE1LDEwLDcsNiw1LDQsMywzLDIsMiwyLDIsMiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDAsMCwKKzMxLDE2LDEwLDcsNiw1LDQsMywzLDMsMiwyLDIsMiwyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMCwKKzMyLDE2LDExLDgsNiw1LDQsMywzLDMsMiwyLDIsMiwyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMQorfTsKKyNlbGlmIE5CSVRTID09IDYKKy8qIFRoaXMgbmVlZHMgZnVsbCBkaXZpc2lvbiBhYm91dCA5LjglIG9mIHRoZSB0aW1lLiAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgdGFiWzIwNDhdID0geworMzMsMTcsMTEsIDgsIDYsIDUsNCw0LDMsMywyLDIsMiwyLDIsMiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLAorIDEsIDAsIDAsIDAsIDAsIDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAorMzQsMTcsMTEsIDgsIDYsIDUsNCw0LDMsMywzLDIsMiwyLDIsMiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLAorIDEsIDEsIDAsIDAsIDAsIDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAorMzUsMTgsMTIsIDksIDcsIDUsNSw0LDMsMywzLDIsMiwyLDIsMiwyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLAorIDEsIDEsIDEsIDAsIDAsIDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAorMzYsMTgsMTIsIDksIDcsIDYsNSw0LDMsMywzLDIsMiwyLDIsMiwyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLAorIDEsIDEsIDEsIDEsIDAsIDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAorMzcsMTksMTMsIDksIDcsIDYsNSw0LDQsMywzLDMsMiwyLDIsMiwyLDIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLAorIDEsIDEsIDEsIDEsIDEsIDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAorMzgsMTksMTMsIDksIDcsIDYsNSw0LDQsMywzLDMsMiwyLDIsMiwyLDIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLAorIDEsIDEsIDEsIDEsIDEsIDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAorMzksMjAsMTMsMTAsIDcsIDYsNSw0LDQsMywzLDMsMiwyLDIsMiwyLDIsMiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLAorIDEsIDEsIDEsIDEsIDEsIDEsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAorNDAsMjAsMTQsMTAsIDgsIDYsNSw1LDQsMywzLDMsMywyLDIsMiwyLDIsMiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLAorIDEsIDEsIDEsIDEsIDEsIDEsMSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAorNDEsMjEsMTQsMTAsIDgsIDYsNSw1LDQsNCwzLDMsMywyLDIsMiwyLDIsMiwyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLAorIDEsIDEsIDEsIDEsIDEsIDEsMSwxLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAorNDIsMjEsMTQsMTAsIDgsIDcsNiw1LDQsNCwzLDMsMywyLDIsMiwyLDIsMiwyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLAorIDEsIDEsIDEsIDEsIDEsIDEsMSwxLDEsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAorNDMsMjIsMTUsMTEsIDgsIDcsNiw1LDQsNCwzLDMsMywzLDIsMiwyLDIsMiwyLDIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLAorIDEsIDEsIDEsIDEsIDEsIDEsMSwxLDEsMSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAorNDQsMjIsMTUsMTEsIDksIDcsNiw1LDQsNCwzLDMsMywzLDIsMiwyLDIsMiwyLDIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLAorIDEsIDEsIDEsIDEsIDEsIDEsMSwxLDEsMSwxLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAorNDUsMjMsMTUsMTEsIDksIDcsNiw1LDUsNCw0LDMsMywzLDIsMiwyLDIsMiwyLDIsMiwxLDEsMSwxLDEsMSwxLDEsMSwxLAorIDEsIDEsIDEsIDEsIDEsIDEsMSwxLDEsMSwxLDEsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAorNDYsMjMsMTYsMTEsIDksIDcsNiw1LDUsNCw0LDMsMywzLDMsMiwyLDIsMiwyLDIsMiwxLDEsMSwxLDEsMSwxLDEsMSwxLAorIDEsIDEsIDEsIDEsIDEsIDEsMSwxLDEsMSwxLDEsMSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAorNDcsMjQsMTYsMTIsIDksIDcsNiw1LDUsNCw0LDMsMywzLDMsMiwyLDIsMiwyLDIsMiwyLDEsMSwxLDEsMSwxLDEsMSwxLAorIDEsIDEsIDEsIDEsIDEsIDEsMSwxLDEsMSwxLDEsMSwxLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAorNDgsMjQsMTYsMTIsIDksIDgsNiw2LDUsNCw0LDMsMywzLDMsMiwyLDIsMiwyLDIsMiwyLDEsMSwxLDEsMSwxLDEsMSwxLAorIDEsIDEsIDEsIDEsIDEsIDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAorNDksMjUsMTcsMTIsMTAsIDgsNyw2LDUsNCw0LDQsMywzLDMsMywyLDIsMiwyLDIsMiwyLDIsMSwxLDEsMSwxLDEsMSwxLAorIDEsIDEsIDEsIDEsIDEsIDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAorNTAsMjUsMTcsMTMsMTAsIDgsNyw2LDUsNSw0LDQsMywzLDMsMywyLDIsMiwyLDIsMiwyLDIsMSwxLDEsMSwxLDEsMSwxLAorIDEsIDEsIDEsIDEsIDEsIDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAorNTEsMjYsMTgsMTMsMTAsIDgsNyw2LDUsNSw0LDQsMywzLDMsMywyLDIsMiwyLDIsMiwyLDIsMiwxLDEsMSwxLDEsMSwxLAorIDEsIDEsIDEsIDEsIDEsIDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAorNTIsMjYsMTgsMTMsMTAsIDgsNyw2LDUsNSw0LDQsMywzLDMsMywzLDIsMiwyLDIsMiwyLDIsMiwxLDEsMSwxLDEsMSwxLAorIDEsIDEsIDEsIDEsIDEsIDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAorNTMsMjcsMTgsMTMsMTAsIDksNyw2LDUsNSw0LDQsNCwzLDMsMywzLDIsMiwyLDIsMiwyLDIsMiwyLDEsMSwxLDEsMSwxLAorIDEsIDEsIDEsIDEsIDEsIDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAorNTQsMjcsMTksMTQsMTEsIDksNyw2LDYsNSw0LDQsNCwzLDMsMywzLDIsMiwyLDIsMiwyLDIsMiwyLDEsMSwxLDEsMSwxLAorIDEsIDEsIDEsIDEsIDEsIDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLAorNTUsMjgsMTksMTQsMTEsIDksNyw2LDYsNSw1LDQsNCwzLDMsMywzLDMsMiwyLDIsMiwyLDIsMiwyLDIsMSwxLDEsMSwxLAorIDEsIDEsIDEsIDEsIDEsIDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDAsMCwwLDAsMCwwLDAsMCwwLAorNTYsMjgsMTksMTQsMTEsIDksOCw3LDYsNSw1LDQsNCwzLDMsMywzLDMsMiwyLDIsMiwyLDIsMiwyLDIsMSwxLDEsMSwxLAorIDEsIDEsIDEsIDEsIDEsIDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMCwwLDAsMCwwLDAsMCwwLAorNTcsMjksMjAsMTQsMTEsIDksOCw3LDYsNSw1LDQsNCw0LDMsMywzLDMsMiwyLDIsMiwyLDIsMiwyLDIsMiwxLDEsMSwxLAorIDEsIDEsIDEsIDEsIDEsIDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwwLDAsMCwwLDAsMCwwLAorNTgsMjksMjAsMTUsMTEsIDksOCw3LDYsNSw1LDQsNCw0LDMsMywzLDMsMywyLDIsMiwyLDIsMiwyLDIsMiwxLDEsMSwxLAorIDEsIDEsIDEsIDEsIDEsIDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDAsMCwwLDAsMCwwLAorNTksMzAsMjAsMTUsMTIsMTAsOCw3LDYsNSw1LDQsNCw0LDMsMywzLDMsMywyLDIsMiwyLDIsMiwyLDIsMiwyLDEsMSwxLAorIDEsIDEsIDEsIDEsIDEsIDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMCwwLDAsMCwwLAorNjAsMzAsMjEsMTUsMTIsMTAsOCw3LDYsNiw1LDUsNCw0LDMsMywzLDMsMywyLDIsMiwyLDIsMiwyLDIsMiwyLDEsMSwxLAorIDEsIDEsIDEsIDEsIDEsIDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwwLDAsMCwwLAorNjEsMzEsMjEsMTUsMTIsMTAsOCw3LDYsNiw1LDUsNCw0LDQsMywzLDMsMywzLDIsMiwyLDIsMiwyLDIsMiwyLDIsMSwxLAorIDEsIDEsIDEsIDEsIDEsIDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDAsMCwwLAorNjIsMzEsMjIsMTYsMTIsMTAsOSw3LDYsNiw1LDUsNCw0LDQsMywzLDMsMywzLDIsMiwyLDIsMiwyLDIsMiwyLDIsMSwxLAorIDEsIDEsIDEsIDEsIDEsIDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMCwwLAorNjMsMzIsMjIsMTYsMTMsMTAsOSw3LDcsNiw1LDUsNCw0LDQsMywzLDMsMywzLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwxLAorIDEsIDEsIDEsIDEsIDEsIDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwwLAorNjQsMzIsMjIsMTYsMTMsMTAsOSw4LDcsNiw1LDUsNCw0LDQsMywzLDMsMywzLDMsMiwyLDIsMiwyLDIsMiwyLDIsMiwxLAorIDEsIDEsIDEsIDEsIDEsIDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxCit9OworI2Vsc2UKKyNlcnJvciBObyB0YWJsZSBmb3IgcHJvdmlkZWQgTkJJVFMKKyNlbmRpZgorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqdGFicCA9IHRhYiAtICgxIDw8IChOQklUUyAtIDEpIDw8IE5CSVRTKTsKKworc3RhdGljIGlubGluZSBtcF9kb3VibGVfbGltYl90CitkaXYxIChtcF9saW1iX3QgbjAsIG1wX2xpbWJfdCBkMCkKK3sKKyAgaW50IG5jbnQ7CisgIHNpemVfdCBuYmksIGRiaTsKKyAgbXBfbGltYl90IHEwOworICBtcF9saW1iX3QgcjA7CisgIG1wX2xpbWJfdCBtYXNrOworICBtcF9kb3VibGVfbGltYl90IHJlczsKKworICBBU1NFUlQgKG4wID49IGQwKTsJCS8qIEFjdHVhbGx5IG9ubHkgbXNiIHBvc2l0aW9uIGlzIGNyaXRpY2FsLiAqLworCisgIGNvdW50X2xlYWRpbmdfemVyb3MgKG5jbnQsIG4wKTsKKyAgbmJpID0gbjAgPDwgbmNudCA+PiAoR01QX0xJTUJfQklUUyAtIE5CSVRTKTsKKyAgZGJpID0gZDAgPDwgbmNudCA+PiAoR01QX0xJTUJfQklUUyAtIE5CSVRTKTsKKworICBxMCA9IHRhYnBbKG5iaSA8PCBOQklUUykgKyBkYmldOworICByMCA9IG4wIC0gcTAgKiBkMDsKKyAgbWFzayA9IC0obXBfbGltYl90KSAocjAgPj0gZDApOworICBxMCAtPSBtYXNrOworICByMCAtPSBkMCAmIG1hc2s7CisKKyAgaWYgKFVOTElLRUxZIChyMCA+PSBkMCkpCisgICAgeworICAgICAgcTAgPSBuMCAvIGQwOworICAgICAgcjAgPSBuMCAtIHEwICogZDA7CisgICAgfQorCisgIHJlcy5kMSA9IHEwOworICByZXMuZDAgPSByMDsKKyAgcmV0dXJuIHJlczsKK30KKworI2VsaWYgSEdDRDJfRElWMV9NRVRIT0QgPT0gNQorCisvKiBUYWJsZSBpbnZlcnNlcyBvZiBkaXZpc29ycy4gIFdlIGRvbid0IGJvdGhlciB3aXRoIHN1cHByZXNzaW5nIHRoZSBtc2IgZnJvbQorICAgdGhlIHRhYmxlcy4gIFdlIGluZGV4IHdpdGggdGhlIE5CSVRTIG1vc3Qgc2lnbmlmaWNhbnQgZGl2aXNvciBiaXRzLAorICAgaW5jbHVkaW5nIHRoZSBhbHdheXMtc2V0IGhpZ2hlc3QgYml0LCBidXQgdXNlIGFkZHJlc3NpbmcgdHJpY2tlcnkgdmlhIHRhYnAKKyAgIHRvIHN1cHByZXNzIGl0LgorCisgICBQb3NzaWJsZSBpbXByb3ZlbWVudHM6CisKKyAgICogRG8gZmlyc3QgbXVsdGlwbHkgdXNpbmcgMzItYml0IG9wZXJhdGlvbnMgb24gNjQtYml0IGNvbXB1dGVycy4gIEF0IGxlYXN0CisgICAgIG9uIG1vc3QgQXJtNjQgY29yZXMsIHRoYXQgdXNlcyAzIHRpbWVzIGxlc3MgcmVzb3VyY2VzLiAgSXQgYWxzbyBzYXZlcyBvbgorICAgICBtYW55IHg4Ni02NCBwcm9jZXNzb3JzLgorKi8KKworI2lmbmRlZiBOQklUUworI2RlZmluZSBOQklUUyA3CisjZW5kaWYKKworI2lmIE5CSVRTID09IDUKKy8qIFRoaXMgbmVlZHMgZnVsbCBkaXZpc2lvbiBhYm91dCAxLjYzJSBvZiB0aGUgdGltZS4gKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHRhYlsxNl0gPSB7CisgNjMsIDU5LCA1NSwgNTIsIDUwLCA0NywgNDUsIDQzLCA0MSwgMzksIDM4LCAzNiwgMzUsIDM0LCAzMywgMzIKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqdGFicCA9IHRhYiAtICgxIDw8IChOQklUUyAtIDEpKTsKKyNlbGlmIE5CSVRTID09IDYKKy8qIFRoaXMgbmVlZHMgZnVsbCBkaXZpc2lvbiBhYm91dCAwLjkzJSBvZiB0aGUgdGltZS4gKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHRhYlszMl0gPSB7CisxMjcsMTIzLDExOSwxMTYsMTEyLDEwOSwxMDYsMTA0LDEwMSwgOTgsIDk2LCA5NCwgOTIsIDkwLCA4OCwgODYsCisgODQsIDgyLCA4MCwgNzksIDc3LCA3NiwgNzQsIDczLCA3MiwgNzAsIDY5LCA2OCwgNjcsIDY2LCA2NSwgNjQKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqdGFicCA9IHRhYiAtICgxIDw8IChOQklUUyAtIDEpKTsKKyNlbGlmIE5CSVRTID09IDcKKy8qIFRoaXMgbmVlZHMgZnVsbCBkaXZpc2lvbiBhYm91dCAwLjQ5JSBvZiB0aGUgdGltZS4gKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHRhYls2NF0gPSB7CisyNTUsMjUxLDI0NywyNDMsMjM5LDIzNiwyMzMsMjI5LDIyNiwyMjMsMjIwLDIxNywyMTQsMjExLDIwOSwyMDYsCisyMDMsMjAxLDE5OCwxOTYsMTk0LDE5MSwxODksMTg3LDE4NSwxODMsMTgxLDE3OSwxNzcsMTc1LDE3MywxNzEsCisxNjksMTY3LDE2NiwxNjQsMTYyLDE2MSwxNTksMTU4LDE1NiwxNTUsMTUzLDE1MiwxNTAsMTQ5LDE0NywxNDYsCisxNDUsMTQzLDE0MiwxNDEsMTQwLDEzOSwxMzcsMTM2LDEzNSwxMzQsMTMzLDEzMiwxMzEsMTMwLDEyOSwxMjgKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqdGFicCA9IHRhYiAtICgxIDw8IChOQklUUyAtIDEpKTsKKyNlbGlmIE5CSVRTID09IDgKKy8qIFRoaXMgbmVlZHMgZnVsbCBkaXZpc2lvbiBhYm91dCAwLjI2JSBvZiB0aGUgdGltZS4gKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCB0YWJbMTI4XSA9IHsKKzUxMSw1MDcsNTAzLDQ5OSw0OTUsNDkxLDQ4OCw0ODQsNDgwLDQ3Nyw0NzMsNDcwLDQ2Nyw0NjMsNDYwLDQ1NywKKzQ1NCw0NTAsNDQ3LDQ0NCw0NDEsNDM4LDQzNSw0MzMsNDMwLDQyNyw0MjQsNDIxLDQxOSw0MTYsNDEzLDQxMSwKKzQwOCw0MDYsNDAzLDQwMSwzOTgsMzk2LDM5MywzOTEsMzg5LDM4NiwzODQsMzgyLDM4MCwzNzcsMzc1LDM3MywKKzM3MSwzNjksMzY3LDM2NSwzNjMsMzYxLDM1OSwzNTcsMzU1LDM1MywzNTEsMzQ5LDM0NywzNDUsMzQzLDM0MiwKKzM0MCwzMzgsMzM2LDMzNSwzMzMsMzMxLDMyOSwzMjgsMzI2LDMyNSwzMjMsMzIxLDMyMCwzMTgsMzE3LDMxNSwKKzMxNCwzMTIsMzExLDMwOSwzMDgsMzA2LDMwNSwzMDMsMzAyLDMwMSwyOTksMjk4LDI5NiwyOTUsMjk0LDI5MiwKKzI5MSwyOTAsMjg4LDI4NywyODYsMjg1LDI4MywyODIsMjgxLDI4MCwyNzksMjc3LDI3NiwyNzUsMjc0LDI3MywKKzI3MiwyNzAsMjY5LDI2OCwyNjcsMjY2LDI2NSwyNjQsMjYzLDI2MiwyNjEsMjYwLDI1OSwyNTgsMjU3LDI1NgorfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCAqdGFicCA9IHRhYiAtICgxIDw8IChOQklUUyAtIDEpKTsKKyNlbHNlCisjZXJyb3IgTm8gdGFibGUgZm9yIHByb3ZpZGVkIE5CSVRTCisjZW5kaWYKKworc3RhdGljIGlubGluZSBtcF9kb3VibGVfbGltYl90CitkaXYxIChtcF9saW1iX3QgbjAsIG1wX2xpbWJfdCBkMCkKK3sKKyAgaW50IG5jbnQsIGRjbnQ7CisgIHNpemVfdCBkYmk7CisgIG1wX2xpbWJfdCBpbnY7CisgIG1wX2xpbWJfdCBxMDsKKyAgbXBfbGltYl90IHIwOworICBtcF9saW1iX3QgbWFzazsKKyAgbXBfZG91YmxlX2xpbWJfdCByZXM7CisKKyAgY291bnRfbGVhZGluZ196ZXJvcyAobmNudCwgbjApOworICBjb3VudF9sZWFkaW5nX3plcm9zIChkY250LCBkMCk7CisKKyAgZGJpID0gZDAgPDwgZGNudCA+PiAoR01QX0xJTUJfQklUUyAtIE5CSVRTKTsKKyAgaW52ID0gdGFicFtkYmldOworICBxMCA9ICgobjAgPDwgbmNudCkgPj4gKE5CSVRTICsgMSkpICogaW52ID4+IChHTVBfTElNQl9CSVRTIC0gMSArIG5jbnQgLSBkY250KTsKKyAgcjAgPSBuMCAtIHEwICogZDA7CisgIG1hc2sgPSAtKG1wX2xpbWJfdCkgKHIwID49IGQwKTsKKyAgcTAgLT0gbWFzazsKKyAgcjAgLT0gZDAgJiBtYXNrOworCisgIGlmIChVTkxJS0VMWSAocjAgPj0gZDApKQorICAgIHsKKyAgICAgIHEwID0gbjAgLyBkMDsKKyAgICAgIHIwID0gbjAgLSBxMCAqIGQwOworICAgIH0KKworICByZXMuZDEgPSBxMDsKKyAgcmVzLmQwID0gcjA7CisgIHJldHVybiByZXM7Cit9CisKKyNlbHNlCisjZXJyb3IgVW5rbm93biBIR0NEMl9ESVYxX01FVEhPRAorI2VuZGlmCisKKyNpZiBIQVZFX05BVElWRV9tcG5fZGl2XzIyCisKKyNkZWZpbmUgZGl2MiBtcG5fZGl2XzIyCisvKiBUd28tbGltYiBkaXZpc2lvbiBvcHRpbWl6ZWQgZm9yIHNtYWxsIHF1b3RpZW50cy4gICovCittcF9saW1iX3QgZGl2MiAobXBfcHRyLCBtcF9saW1iX3QsIG1wX2xpbWJfdCwgbXBfbGltYl90LCBtcF9saW1iX3QpOworCisjZWxpZiBIR0NEMl9ESVYyX01FVEhPRCA9PSAxCisKK3N0YXRpYyBtcF9saW1iX3QKK2RpdjIgKG1wX3B0ciBycCwKKyAgICAgIG1wX2xpbWJfdCBuMSwgbXBfbGltYl90IG4wLAorICAgICAgbXBfbGltYl90IGQxLCBtcF9saW1iX3QgZDApCit7CisgIG1wX2RvdWJsZV9saW1iX3QgcnEgPSBkaXYxIChuMSwgZDEpOworICBpZiAoVU5MSUtFTFkgKHJxLmQxID4gZDEpKQorICAgIHsKKyAgICAgIG1wX2xpbWJfdCBuMiwgcSwgdDEsIHQwOworICAgICAgaW50IGM7CisKKyAgICAgIC8qIE5vcm1hbGl6ZSAqLworICAgICAgY291bnRfbGVhZGluZ196ZXJvcyAoYywgZDEpOworICAgICAgQVNTRVJUIChjID4gMCk7CisKKyAgICAgIG4yID0gbjEgPj4gKEdNUF9MSU1CX0JJVFMgLSBjKTsKKyAgICAgIG4xID0gKG4xIDw8IGMpIHwgKG4wID4+IChHTVBfTElNQl9CSVRTIC0gYykpOworICAgICAgbjAgPDw9IGM7CisgICAgICBkMSA9IChkMSA8PCBjKSB8IChkMCA+PiAoR01QX0xJTUJfQklUUyAtIGMpKTsKKyAgICAgIGQwIDw8PSBjOworCisgICAgICB1ZGl2X3Fybm5kIChxLCBuMSwgbjIsIG4xLCBkMSk7CisgICAgICB1bXVsX3BwbW0gKHQxLCB0MCwgcSwgZDApOworICAgICAgaWYgKHQxID4gbjEgfHwgKHQxID09IG4xICYmIHQwID4gbjApKQorCXsKKwkgIEFTU0VSVCAocSA+IDApOworCSAgcS0tOworCSAgc3ViX2RkbW1zcyAodDEsIHQwLCB0MSwgdDAsIGQxLCBkMCk7CisJfQorICAgICAgc3ViX2RkbW1zcyAobjEsIG4wLCBuMSwgbjAsIHQxLCB0MCk7CisKKyAgICAgIC8qIFVuZG8gbm9ybWFsaXphdGlvbiAqLworICAgICAgcnBbMF0gPSAobjAgPj4gYykgfCAobjEgPDwgKEdNUF9MSU1CX0JJVFMgLSBjKSk7CisgICAgICBycFsxXSA9IG4xID4+IGM7CisKKyAgICAgIHJldHVybiBxOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIG1wX2xpbWJfdCBxLCB0MSwgdDA7CisgICAgICBuMSA9IHJxLmQwOworICAgICAgcSA9IHJxLmQxOworICAgICAgdW11bF9wcG1tICh0MSwgdDAsIHEsIGQwKTsKKyAgICAgIGlmIChVTkxJS0VMWSAodDEgPj0gbjEpICYmICh0MSA+IG4xIHx8IHQwID4gbjApKQorCXsKKwkgIEFTU0VSVCAocSA+IDApOworCSAgcS0tOworCSAgc3ViX2RkbW1zcyAodDEsIHQwLCB0MSwgdDAsIGQxLCBkMCk7CisJfQorICAgICAgc3ViX2RkbW1zcyAocnBbMV0sIHJwWzBdLCBuMSwgbjAsIHQxLCB0MCk7CisgICAgICByZXR1cm4gcTsKKyAgICB9Cit9CisKKyNlbGlmIEhHQ0QyX0RJVjJfTUVUSE9EID09IDIKKworLyogQml0LXdpc2UgZGl2Mi4gUmVsaWVzIG9uIGZhc3QgY291bnRfbGVhZGluZ196ZXJvcy4gKi8KK3N0YXRpYyBtcF9saW1iX3QKK2RpdjIgKG1wX3B0ciBycCwKKyAgICAgIG1wX2xpbWJfdCBuMSwgbXBfbGltYl90IG4wLAorICAgICAgbXBfbGltYl90IGQxLCBtcF9saW1iX3QgZDApCit7CisgIG1wX2xpbWJfdCBxID0gMDsKKyAgaW50IG5jbnQ7CisgIGludCBkY250OworCisgIGNvdW50X2xlYWRpbmdfemVyb3MgKG5jbnQsIG4xKTsKKyAgY291bnRfbGVhZGluZ196ZXJvcyAoZGNudCwgZDEpOworICBkY250IC09IG5jbnQ7CisKKyAgZDEgPSAoZDEgPDwgZGNudCkgKyAoZDAgPj4gMSA+PiAoR01QX0xJTUJfQklUUyAtIDEgLSBkY250KSk7CisgIGQwIDw8PSBkY250OworCisgIGRvCisgICAgeworICAgICAgbXBfbGltYl90IG1hc2s7CisgICAgICBxIDw8PSAxOworICAgICAgaWYgKFVOTElLRUxZIChuMSA9PSBkMSkpCisJbWFzayA9IC0objAgPj0gZDApOworICAgICAgZWxzZQorCW1hc2sgPSAtKG4xID4gZDEpOworCisgICAgICBxIC09IG1hc2s7CisKKyAgICAgIHN1Yl9kZG1tc3MgKG4xLCBuMCwgbjEsIG4wLCBtYXNrICYgZDEsIG1hc2sgJiBkMCk7CisKKyAgICAgIGQwID0gKGQxIDw8IChHTVBfTElNQl9CSVRTIC0gMSkpIHwgKGQwID4+IDEpOworICAgICAgZDEgPSBkMSA+PiAxOworICAgIH0KKyAgd2hpbGUgKGRjbnQtLSk7CisKKyAgcnBbMF0gPSBuMDsKKyAgcnBbMV0gPSBuMTsKKworICByZXR1cm4gcTsKK30KKyNlbHNlCisjZXJyb3IgVW5rbm93biBIR0NEMl9ESVYyX01FVEhPRAorI2VuZGlmCisKKy8qIFJlZHVjZXMgYSxiIHVudGlsIHxhLWJ8IChhbG1vc3QpIGZpdHMgaW4gb25lIGxpbWIgKyAxIGJpdC4gQ29uc3RydWN0cworICAgbWF0cml4IE0uIFJldHVybnMgMSBpZiB3ZSBtYWtlIHByb2dyZXNzLCBpLmUuIGNhbiBwZXJmb3JtIGF0IGxlYXN0CisgICBvbmUgc3VidHJhY3Rpb24uIE90aGVyd2lzZSByZXR1cm5zIHplcm8uICovCisKKy8qIEZJWE1FOiBQb3NzaWJsZSBvcHRpbWl6YXRpb25zOgorCisgICBUaGUgZGl2MiBmdW5jdGlvbiBzdGFydHMgd2l0aCBjaGVja2luZyB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgb2YKKyAgIHRoZSBudW1lcmF0b3IuIFdlIGNhbiBtYWludGFpbmVkIG5vcm1hbGl6ZWQgb3BlcmFuZHMgaGVyZSwgY2FsbAorICAgaGdjZCB3aXRoIG5vcm1hbGl6ZWQgb3BlcmFuZHMgb25seSwgd2hpY2ggc2hvdWxkIG1ha2UgdGhlIGNvZGUKKyAgIHNpbXBsZXIgYW5kIHBvc3NpYmx5IGZhc3Rlci4KKworICAgRXhwZXJpbWVudCB3aXRoIHRhYmxlIGxvb2t1cHMgb24gdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0cy4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhbHNvIGEgY2FuZGlkYXRlIGZvciBhc3NlbWJsZXIgaW1wbGVtZW50YXRpb24uCisqLworaW50CittcG5faGdjZDIgKG1wX2xpbWJfdCBhaCwgbXBfbGltYl90IGFsLCBtcF9saW1iX3QgYmgsIG1wX2xpbWJfdCBibCwKKwkgICBzdHJ1Y3QgaGdjZF9tYXRyaXgxICpNKQoreworICBtcF9saW1iX3QgdTAwLCB1MDEsIHUxMCwgdTExOworCisgIGlmIChhaCA8IDIgfHwgYmggPCAyKQorICAgIHJldHVybiAwOworCisgIGlmIChhaCA+IGJoIHx8IChhaCA9PSBiaCAmJiBhbCA+IGJsKSkKKyAgICB7CisgICAgICBzdWJfZGRtbXNzIChhaCwgYWwsIGFoLCBhbCwgYmgsIGJsKTsKKyAgICAgIGlmIChhaCA8IDIpCisJcmV0dXJuIDA7CisKKyAgICAgIHUwMCA9IHUwMSA9IHUxMSA9IDE7CisgICAgICB1MTAgPSAwOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHN1Yl9kZG1tc3MgKGJoLCBibCwgYmgsIGJsLCBhaCwgYWwpOworICAgICAgaWYgKGJoIDwgMikKKwlyZXR1cm4gMDsKKworICAgICAgdTAwID0gdTEwID0gdTExID0gMTsKKyAgICAgIHUwMSA9IDA7CisgICAgfQorCisgIGlmIChhaCA8IGJoKQorICAgIGdvdG8gc3VidHJhY3RfYTsKKworICBmb3IgKDs7KQorICAgIHsKKyAgICAgIEFTU0VSVCAoYWggPj0gYmgpOworICAgICAgaWYgKGFoID09IGJoKQorCWdvdG8gZG9uZTsKKworICAgICAgaWYgKGFoIDwgKENOU1RfTElNQigxKSA8PCAoR01QX0xJTUJfQklUUyAvIDIpKSkKKwl7CisJICBhaCA9IChhaCA8PCAoR01QX0xJTUJfQklUUyAvIDIpICkgKyAoYWwgPj4gKEdNUF9MSU1CX0JJVFMgLyAyKSk7CisJICBiaCA9IChiaCA8PCAoR01QX0xJTUJfQklUUyAvIDIpICkgKyAoYmwgPj4gKEdNUF9MSU1CX0JJVFMgLyAyKSk7CisKKwkgIGJyZWFrOworCX0KKworICAgICAgLyogU3VidHJhY3QgYSAtPSBxIGIsIGFuZCBtdWx0aXBseSBNIGZyb20gdGhlIHJpZ2h0IGJ5ICgxIHEgOyAwCisJIDEpLCBhZmZlY3RpbmcgdGhlIHNlY29uZCBjb2x1bW4gb2YgTS4gKi8KKyAgICAgIEFTU0VSVCAoYWggPiBiaCk7CisgICAgICBzdWJfZGRtbXNzIChhaCwgYWwsIGFoLCBhbCwgYmgsIGJsKTsKKworICAgICAgaWYgKGFoIDwgMikKKwlnb3RvIGRvbmU7CisKKyAgICAgIGlmIChhaCA8PSBiaCkKKwl7CisJICAvKiBVc2UgcSA9IDEgKi8KKwkgIHUwMSArPSB1MDA7CisJICB1MTEgKz0gdTEwOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBtcF9saW1iX3QgclsyXTsKKwkgIG1wX2xpbWJfdCBxID0gZGl2MiAociwgYWgsIGFsLCBiaCwgYmwpOworCSAgYWwgPSByWzBdOyBhaCA9IHJbMV07CisJICBpZiAoYWggPCAyKQorCSAgICB7CisJICAgICAgLyogQSBpcyB0b28gc21hbGwsIGJ1dCBxIGlzIGNvcnJlY3QuICovCisJICAgICAgdTAxICs9IHEgKiB1MDA7CisJICAgICAgdTExICs9IHEgKiB1MTA7CisJICAgICAgZ290byBkb25lOworCSAgICB9CisJICBxKys7CisJICB1MDEgKz0gcSAqIHUwMDsKKwkgIHUxMSArPSBxICogdTEwOworCX0KKyAgICBzdWJ0cmFjdF9hOgorICAgICAgQVNTRVJUIChiaCA+PSBhaCk7CisgICAgICBpZiAoYWggPT0gYmgpCisJZ290byBkb25lOworCisgICAgICBpZiAoYmggPCAoQ05TVF9MSU1CKDEpIDw8IChHTVBfTElNQl9CSVRTIC8gMikpKQorCXsKKwkgIGFoID0gKGFoIDw8IChHTVBfTElNQl9CSVRTIC8gMikgKSArIChhbCA+PiAoR01QX0xJTUJfQklUUyAvIDIpKTsKKwkgIGJoID0gKGJoIDw8IChHTVBfTElNQl9CSVRTIC8gMikgKSArIChibCA+PiAoR01QX0xJTUJfQklUUyAvIDIpKTsKKworCSAgZ290byBzdWJ0cmFjdF9hMTsKKwl9CisKKyAgICAgIC8qIFN1YnRyYWN0IGIgLT0gcSBhLCBhbmQgbXVsdGlwbHkgTSBmcm9tIHRoZSByaWdodCBieSAoMSAwIDsgcQorCSAxKSwgYWZmZWN0aW5nIHRoZSBmaXJzdCBjb2x1bW4gb2YgTS4gKi8KKyAgICAgIHN1Yl9kZG1tc3MgKGJoLCBibCwgYmgsIGJsLCBhaCwgYWwpOworCisgICAgICBpZiAoYmggPCAyKQorCWdvdG8gZG9uZTsKKworICAgICAgaWYgKGJoIDw9IGFoKQorCXsKKwkgIC8qIFVzZSBxID0gMSAqLworCSAgdTAwICs9IHUwMTsKKwkgIHUxMCArPSB1MTE7CisJfQorICAgICAgZWxzZQorCXsKKwkgIG1wX2xpbWJfdCByWzJdOworCSAgbXBfbGltYl90IHEgPSBkaXYyIChyLCBiaCwgYmwsIGFoLCBhbCk7CisJICBibCA9IHJbMF07IGJoID0gclsxXTsKKwkgIGlmIChiaCA8IDIpCisJICAgIHsKKwkgICAgICAvKiBCIGlzIHRvbyBzbWFsbCwgYnV0IHEgaXMgY29ycmVjdC4gKi8KKwkgICAgICB1MDAgKz0gcSAqIHUwMTsKKwkgICAgICB1MTAgKz0gcSAqIHUxMTsKKwkgICAgICBnb3RvIGRvbmU7CisJICAgIH0KKwkgIHErKzsKKwkgIHUwMCArPSBxICogdTAxOworCSAgdTEwICs9IHEgKiB1MTE7CisJfQorICAgIH0KKworICAvKiBOT1RFOiBTaW5jZSB3ZSBkaXNjYXJkIHRoZSBsZWFzdCBzaWduaWZpY2FudCBoYWxmIGxpbWIsIHdlIGRvbid0IGdldCBhCisgICAgIHRydWx5IG1heGltYWwgTSAoY29ycmVzcG9uZGluZyB0byB8YSAtIGJ8IDwgMl57R01QX0xJTUJfQklUUyArMX0pLiAqLworICAvKiBTaW5nbGUgcHJlY2lzaW9uIGxvb3AgKi8KKyAgZm9yICg7OykKKyAgICB7CisgICAgICBBU1NFUlQgKGFoID49IGJoKTsKKworICAgICAgYWggLT0gYmg7CisgICAgICBpZiAoYWggPCAoQ05TVF9MSU1CICgxKSA8PCAoR01QX0xJTUJfQklUUyAvIDIgKyAxKSkpCisJYnJlYWs7CisKKyAgICAgIGlmIChhaCA8PSBiaCkKKwl7CisJICAvKiBVc2UgcSA9IDEgKi8KKwkgIHUwMSArPSB1MDA7CisJICB1MTEgKz0gdTEwOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBtcF9kb3VibGVfbGltYl90IHJxID0gZGl2MSAoYWgsIGJoKTsKKwkgIG1wX2xpbWJfdCBxID0gcnEuZDE7CisJICBhaCA9IHJxLmQwOworCisJICBpZiAoYWggPCAoQ05TVF9MSU1CKDEpIDw8IChHTVBfTElNQl9CSVRTIC8gMiArIDEpKSkKKwkgICAgeworCSAgICAgIC8qIEEgaXMgdG9vIHNtYWxsLCBidXQgcSBpcyBjb3JyZWN0LiAqLworCSAgICAgIHUwMSArPSBxICogdTAwOworCSAgICAgIHUxMSArPSBxICogdTEwOworCSAgICAgIGJyZWFrOworCSAgICB9CisJICBxKys7CisJICB1MDEgKz0gcSAqIHUwMDsKKwkgIHUxMSArPSBxICogdTEwOworCX0KKyAgICBzdWJ0cmFjdF9hMToKKyAgICAgIEFTU0VSVCAoYmggPj0gYWgpOworCisgICAgICBiaCAtPSBhaDsKKyAgICAgIGlmIChiaCA8IChDTlNUX0xJTUIgKDEpIDw8IChHTVBfTElNQl9CSVRTIC8gMiArIDEpKSkKKwlicmVhazsKKworICAgICAgaWYgKGJoIDw9IGFoKQorCXsKKwkgIC8qIFVzZSBxID0gMSAqLworCSAgdTAwICs9IHUwMTsKKwkgIHUxMCArPSB1MTE7CisJfQorICAgICAgZWxzZQorCXsKKwkgIG1wX2RvdWJsZV9saW1iX3QgcnEgPSBkaXYxIChiaCwgYWgpOworCSAgbXBfbGltYl90IHEgPSBycS5kMTsKKwkgIGJoID0gcnEuZDA7CisKKwkgIGlmIChiaCA8IChDTlNUX0xJTUIoMSkgPDwgKEdNUF9MSU1CX0JJVFMgLyAyICsgMSkpKQorCSAgICB7CisJICAgICAgLyogQiBpcyB0b28gc21hbGwsIGJ1dCBxIGlzIGNvcnJlY3QuICovCisJICAgICAgdTAwICs9IHEgKiB1MDE7CisJICAgICAgdTEwICs9IHEgKiB1MTE7CisJICAgICAgYnJlYWs7CisJICAgIH0KKwkgIHErKzsKKwkgIHUwMCArPSBxICogdTAxOworCSAgdTEwICs9IHEgKiB1MTE7CisJfQorICAgIH0KKworIGRvbmU6CisgIE0tPnVbMF1bMF0gPSB1MDA7IE0tPnVbMF1bMV0gPSB1MDE7CisgIE0tPnVbMV1bMF0gPSB1MTA7IE0tPnVbMV1bMV0gPSB1MTE7CisKKyAgcmV0dXJuIDE7Cit9CisKKy8qIFNldHMgKHI7YikgPSAoYTtiKSBNLCB3aXRoIE0gPSAodTAwLCB1MDE7IHUxMCwgdTExKS4gVmVjdG9yIG11c3QKKyAqIGhhdmUgc3BhY2UgZm9yIG4gKyAxIGxpbWJzLiBVc2VzIHRocmVlIGJ1ZmZlcnMgdG8gYXZvaWQgYSBjb3B5Ki8KK21wX3NpemVfdAorbXBuX2hnY2RfbXVsX21hdHJpeDFfdmVjdG9yIChjb25zdCBzdHJ1Y3QgaGdjZF9tYXRyaXgxICpNLAorCQkJICAgICBtcF9wdHIgcnAsIG1wX3NyY3B0ciBhcCwgbXBfcHRyIGJwLCBtcF9zaXplX3QgbikKK3sKKyAgbXBfbGltYl90IGFoLCBiaDsKKworICAvKiBDb21wdXRlIChyLGIpIDwtLSAodTAwIGEgKyB1MTAgYiwgdTAxIGEgKyB1MTEgYikgYXMKKworICAgICByICA9IHUwMCAqIGEKKyAgICAgciArPSB1MTAgKiBiCisgICAgIGIgKj0gdTExCisgICAgIGIgKz0gdTAxICogYQorICAqLworCisjaWYgSEFWRV9OQVRJVkVfbXBuX2FkZGFkZG11bF8xbXNiMAorICBhaCA9IG1wbl9hZGRhZGRtdWxfMW1zYjAgKHJwLCBhcCwgYnAsIG4sIE0tPnVbMF1bMF0sIE0tPnVbMV1bMF0pOworICBiaCA9IG1wbl9hZGRhZGRtdWxfMW1zYjAgKGJwLCBicCwgYXAsIG4sIE0tPnVbMV1bMV0sIE0tPnVbMF1bMV0pOworI2Vsc2UKKyAgYWggPSAgICAgbXBuX211bF8xIChycCwgYXAsIG4sIE0tPnVbMF1bMF0pOworICBhaCArPSBtcG5fYWRkbXVsXzEgKHJwLCBicCwgbiwgTS0+dVsxXVswXSk7CisKKyAgYmggPSAgICAgbXBuX211bF8xIChicCwgYnAsIG4sIE0tPnVbMV1bMV0pOworICBiaCArPSBtcG5fYWRkbXVsXzEgKGJwLCBhcCwgbiwgTS0+dVswXVsxXSk7CisjZW5kaWYKKyAgcnBbbl0gPSBhaDsKKyAgYnBbbl0gPSBiaDsKKworICBuICs9IChhaCB8IGJoKSA+IDA7CisgIHJldHVybiBuOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2hnY2QyX2phY29iaS5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2hnY2QyX2phY29iaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4ZTA3OWIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvaGdjZDJfamFjb2JpLmMKQEAgLTAsMCArMSwzNjUgQEAKKy8qIGhnY2QyX2phY29iaS5jCisKKyAgIFRIRSBGVU5DVElPTlMgSU4gVEhJUyBGSUxFIEFSRSBJTlRFUk5BTCBXSVRIIE1VVEFCTEUgSU5URVJGQUNFUy4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggVEhFTSBUSFJPVUdIIERPQ1VNRU5URUQgSU5URVJGQUNFUy4gIElOIEZBQ1QsIElUIElTIEFMTU9TVAorICAgR1VBUkFOVEVFRCBUSEFUIFRIRVknTEwgQ0hBTkdFIE9SIERJU0FQUEVBUiBJTiBBIEZVVFVSRSBHTlUgTVAgUkVMRUFTRS4KKworQ29weXJpZ2h0IDE5OTYsIDE5OTgsIDIwMDAtMjAwNCwgMjAwOCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisjaW5jbHVkZSAibG9uZ2xvbmcuaCIKKworI2lmIEdNUF9OQUlMX0JJVFMgPiAwCisjZXJyb3IgTmFpbHMgbm90IHN1cHBvcnRlZC4KKyNlbmRpZgorCisvKiBGSVhNRTogRHVwbGljYXRlZCBpbiBoZ2NkMi5jLiBTaG91bGQgbW92ZSB0byBnbXAtaW1wbC5oLCBhbmQKKyAgIHBvc3NpYmx5IGJlIHJlbmFtZWQuICovCitzdGF0aWMgaW5saW5lIG1wX2xpbWJfdAorZGl2MSAobXBfcHRyIHJwLAorICAgICAgbXBfbGltYl90IG4wLAorICAgICAgbXBfbGltYl90IGQwKQoreworICBtcF9saW1iX3QgcSA9IDA7CisKKyAgaWYgKChtcF9saW1iX3NpZ25lZF90KSBuMCA8IDApCisgICAgeworICAgICAgaW50IGNudDsKKyAgICAgIGZvciAoY250ID0gMTsgKG1wX2xpbWJfc2lnbmVkX3QpIGQwID49IDA7IGNudCsrKQorCXsKKwkgIGQwID0gZDAgPDwgMTsKKwl9CisKKyAgICAgIHEgPSAwOworICAgICAgd2hpbGUgKGNudCkKKwl7CisJICBxIDw8PSAxOworCSAgaWYgKG4wID49IGQwKQorCSAgICB7CisJICAgICAgbjAgPSBuMCAtIGQwOworCSAgICAgIHEgfD0gMTsKKwkgICAgfQorCSAgZDAgPSBkMCA+PiAxOworCSAgY250LS07CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGludCBjbnQ7CisgICAgICBmb3IgKGNudCA9IDA7IG4wID49IGQwOyBjbnQrKykKKwl7CisJICBkMCA9IGQwIDw8IDE7CisJfQorCisgICAgICBxID0gMDsKKyAgICAgIHdoaWxlIChjbnQpCisJeworCSAgZDAgPSBkMCA+PiAxOworCSAgcSA8PD0gMTsKKwkgIGlmIChuMCA+PSBkMCkKKwkgICAgeworCSAgICAgIG4wID0gbjAgLSBkMDsKKwkgICAgICBxIHw9IDE7CisJICAgIH0KKwkgIGNudC0tOworCX0KKyAgICB9CisgICpycCA9IG4wOworICByZXR1cm4gcTsKK30KKworLyogVHdvLWxpbWIgZGl2aXNpb24gb3B0aW1pemVkIGZvciBzbWFsbCBxdW90aWVudHMuICAqLworc3RhdGljIGlubGluZSBtcF9saW1iX3QKK2RpdjIgKG1wX3B0ciBycCwKKyAgICAgIG1wX2xpbWJfdCBuaCwgbXBfbGltYl90IG5sLAorICAgICAgbXBfbGltYl90IGRoLCBtcF9saW1iX3QgZGwpCit7CisgIG1wX2xpbWJfdCBxID0gMDsKKworICBpZiAoKG1wX2xpbWJfc2lnbmVkX3QpIG5oIDwgMCkKKyAgICB7CisgICAgICBpbnQgY250OworICAgICAgZm9yIChjbnQgPSAxOyAobXBfbGltYl9zaWduZWRfdCkgZGggPj0gMDsgY250KyspCisJeworCSAgZGggPSAoZGggPDwgMSkgfCAoZGwgPj4gKEdNUF9MSU1CX0JJVFMgLSAxKSk7CisJICBkbCA9IGRsIDw8IDE7CisJfQorCisgICAgICB3aGlsZSAoY250KQorCXsKKwkgIHEgPDw9IDE7CisJICBpZiAobmggPiBkaCB8fCAobmggPT0gZGggJiYgbmwgPj0gZGwpKQorCSAgICB7CisJICAgICAgc3ViX2RkbW1zcyAobmgsIG5sLCBuaCwgbmwsIGRoLCBkbCk7CisJICAgICAgcSB8PSAxOworCSAgICB9CisJICBkbCA9IChkaCA8PCAoR01QX0xJTUJfQklUUyAtIDEpKSB8IChkbCA+PiAxKTsKKwkgIGRoID0gZGggPj4gMTsKKwkgIGNudC0tOworCX0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpbnQgY250OworICAgICAgZm9yIChjbnQgPSAwOyBuaCA+IGRoIHx8IChuaCA9PSBkaCAmJiBubCA+PSBkbCk7IGNudCsrKQorCXsKKwkgIGRoID0gKGRoIDw8IDEpIHwgKGRsID4+IChHTVBfTElNQl9CSVRTIC0gMSkpOworCSAgZGwgPSBkbCA8PCAxOworCX0KKworICAgICAgd2hpbGUgKGNudCkKKwl7CisJICBkbCA9IChkaCA8PCAoR01QX0xJTUJfQklUUyAtIDEpKSB8IChkbCA+PiAxKTsKKwkgIGRoID0gZGggPj4gMTsKKwkgIHEgPDw9IDE7CisJICBpZiAobmggPiBkaCB8fCAobmggPT0gZGggJiYgbmwgPj0gZGwpKQorCSAgICB7CisJICAgICAgc3ViX2RkbW1zcyAobmgsIG5sLCBuaCwgbmwsIGRoLCBkbCk7CisJICAgICAgcSB8PSAxOworCSAgICB9CisJICBjbnQtLTsKKwl9CisgICAgfQorCisgIHJwWzBdID0gbmw7CisgIHJwWzFdID0gbmg7CisKKyAgcmV0dXJuIHE7Cit9CisKK2ludAorbXBuX2hnY2QyX2phY29iaSAobXBfbGltYl90IGFoLCBtcF9saW1iX3QgYWwsIG1wX2xpbWJfdCBiaCwgbXBfbGltYl90IGJsLAorCQkgIHN0cnVjdCBoZ2NkX21hdHJpeDEgKk0sIHVuc2lnbmVkICpiaXRzcCkKK3sKKyAgbXBfbGltYl90IHUwMCwgdTAxLCB1MTAsIHUxMTsKKyAgdW5zaWduZWQgYml0cyA9ICpiaXRzcDsKKworICBpZiAoYWggPCAyIHx8IGJoIDwgMikKKyAgICByZXR1cm4gMDsKKworICBpZiAoYWggPiBiaCB8fCAoYWggPT0gYmggJiYgYWwgPiBibCkpCisgICAgeworICAgICAgc3ViX2RkbW1zcyAoYWgsIGFsLCBhaCwgYWwsIGJoLCBibCk7CisgICAgICBpZiAoYWggPCAyKQorCXJldHVybiAwOworCisgICAgICB1MDAgPSB1MDEgPSB1MTEgPSAxOworICAgICAgdTEwID0gMDsKKyAgICAgIGJpdHMgPSBtcG5famFjb2JpX3VwZGF0ZSAoYml0cywgMSwgMSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgc3ViX2RkbW1zcyAoYmgsIGJsLCBiaCwgYmwsIGFoLCBhbCk7CisgICAgICBpZiAoYmggPCAyKQorCXJldHVybiAwOworCisgICAgICB1MDAgPSB1MTAgPSB1MTEgPSAxOworICAgICAgdTAxID0gMDsKKyAgICAgIGJpdHMgPSBtcG5famFjb2JpX3VwZGF0ZSAoYml0cywgMCwgMSk7CisgICAgfQorCisgIGlmIChhaCA8IGJoKQorICAgIGdvdG8gc3VidHJhY3RfYTsKKworICBmb3IgKDs7KQorICAgIHsKKyAgICAgIEFTU0VSVCAoYWggPj0gYmgpOworICAgICAgaWYgKGFoID09IGJoKQorCWdvdG8gZG9uZTsKKworICAgICAgaWYgKGFoIDwgKENOU1RfTElNQigxKSA8PCAoR01QX0xJTUJfQklUUyAvIDIpKSkKKwl7CisJICBhaCA9IChhaCA8PCAoR01QX0xJTUJfQklUUyAvIDIpICkgKyAoYWwgPj4gKEdNUF9MSU1CX0JJVFMgLyAyKSk7CisJICBiaCA9IChiaCA8PCAoR01QX0xJTUJfQklUUyAvIDIpICkgKyAoYmwgPj4gKEdNUF9MSU1CX0JJVFMgLyAyKSk7CisKKwkgIGJyZWFrOworCX0KKworICAgICAgLyogU3VidHJhY3QgYSAtPSBxIGIsIGFuZCBtdWx0aXBseSBNIGZyb20gdGhlIHJpZ2h0IGJ5ICgxIHEgOyAwCisJIDEpLCBhZmZlY3RpbmcgdGhlIHNlY29uZCBjb2x1bW4gb2YgTS4gKi8KKyAgICAgIEFTU0VSVCAoYWggPiBiaCk7CisgICAgICBzdWJfZGRtbXNzIChhaCwgYWwsIGFoLCBhbCwgYmgsIGJsKTsKKworICAgICAgaWYgKGFoIDwgMikKKwlnb3RvIGRvbmU7CisKKyAgICAgIGlmIChhaCA8PSBiaCkKKwl7CisJICAvKiBVc2UgcSA9IDEgKi8KKwkgIHUwMSArPSB1MDA7CisJICB1MTEgKz0gdTEwOworCSAgYml0cyA9IG1wbl9qYWNvYmlfdXBkYXRlIChiaXRzLCAxLCAxKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgbXBfbGltYl90IHJbMl07CisJICBtcF9saW1iX3QgcSA9IGRpdjIgKHIsIGFoLCBhbCwgYmgsIGJsKTsKKwkgIGFsID0gclswXTsgYWggPSByWzFdOworCSAgaWYgKGFoIDwgMikKKwkgICAgeworCSAgICAgIC8qIEEgaXMgdG9vIHNtYWxsLCBidXQgcSBpcyBjb3JyZWN0LiAqLworCSAgICAgIHUwMSArPSBxICogdTAwOworCSAgICAgIHUxMSArPSBxICogdTEwOworCSAgICAgIGJpdHMgPSBtcG5famFjb2JpX3VwZGF0ZSAoYml0cywgMSwgcSAmIDMpOworCSAgICAgIGdvdG8gZG9uZTsKKwkgICAgfQorCSAgcSsrOworCSAgdTAxICs9IHEgKiB1MDA7CisJICB1MTEgKz0gcSAqIHUxMDsKKwkgIGJpdHMgPSBtcG5famFjb2JpX3VwZGF0ZSAoYml0cywgMSwgcSAmIDMpOworCX0KKyAgICBzdWJ0cmFjdF9hOgorICAgICAgQVNTRVJUIChiaCA+PSBhaCk7CisgICAgICBpZiAoYWggPT0gYmgpCisJZ290byBkb25lOworCisgICAgICBpZiAoYmggPCAoQ05TVF9MSU1CKDEpIDw8IChHTVBfTElNQl9CSVRTIC8gMikpKQorCXsKKwkgIGFoID0gKGFoIDw8IChHTVBfTElNQl9CSVRTIC8gMikgKSArIChhbCA+PiAoR01QX0xJTUJfQklUUyAvIDIpKTsKKwkgIGJoID0gKGJoIDw8IChHTVBfTElNQl9CSVRTIC8gMikgKSArIChibCA+PiAoR01QX0xJTUJfQklUUyAvIDIpKTsKKworCSAgZ290byBzdWJ0cmFjdF9hMTsKKwl9CisKKyAgICAgIC8qIFN1YnRyYWN0IGIgLT0gcSBhLCBhbmQgbXVsdGlwbHkgTSBmcm9tIHRoZSByaWdodCBieSAoMSAwIDsgcQorCSAxKSwgYWZmZWN0aW5nIHRoZSBmaXJzdCBjb2x1bW4gb2YgTS4gKi8KKyAgICAgIHN1Yl9kZG1tc3MgKGJoLCBibCwgYmgsIGJsLCBhaCwgYWwpOworCisgICAgICBpZiAoYmggPCAyKQorCWdvdG8gZG9uZTsKKworICAgICAgaWYgKGJoIDw9IGFoKQorCXsKKwkgIC8qIFVzZSBxID0gMSAqLworCSAgdTAwICs9IHUwMTsKKwkgIHUxMCArPSB1MTE7CisJICBiaXRzID0gbXBuX2phY29iaV91cGRhdGUgKGJpdHMsIDAsIDEpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBtcF9saW1iX3QgclsyXTsKKwkgIG1wX2xpbWJfdCBxID0gZGl2MiAociwgYmgsIGJsLCBhaCwgYWwpOworCSAgYmwgPSByWzBdOyBiaCA9IHJbMV07CisJICBpZiAoYmggPCAyKQorCSAgICB7CisJICAgICAgLyogQiBpcyB0b28gc21hbGwsIGJ1dCBxIGlzIGNvcnJlY3QuICovCisJICAgICAgdTAwICs9IHEgKiB1MDE7CisJICAgICAgdTEwICs9IHEgKiB1MTE7CisJICAgICAgYml0cyA9IG1wbl9qYWNvYmlfdXBkYXRlIChiaXRzLCAwLCBxICYgMyk7CisJICAgICAgZ290byBkb25lOworCSAgICB9CisJICBxKys7CisJICB1MDAgKz0gcSAqIHUwMTsKKwkgIHUxMCArPSBxICogdTExOworCSAgYml0cyA9IG1wbl9qYWNvYmlfdXBkYXRlIChiaXRzLCAwLCBxICYgMyk7CisJfQorICAgIH0KKworICAvKiBOT1RFOiBTaW5jZSB3ZSBkaXNjYXJkIHRoZSBsZWFzdCBzaWduaWZpY2FudCBoYWxmIGxpbWIsIHdlIGRvbid0CisgICAgIGdldCBhIHRydWx5IG1heGltYWwgTSAoY29ycmVzcG9uZGluZyB0byB8YSAtIGJ8IDwKKyAgICAgMl57R01QX0xJTUJfQklUUyArMX0pLiAqLworICAvKiBTaW5nbGUgcHJlY2lzaW9uIGxvb3AgKi8KKyAgZm9yICg7OykKKyAgICB7CisgICAgICBBU1NFUlQgKGFoID49IGJoKTsKKyAgICAgIGlmIChhaCA9PSBiaCkKKwlicmVhazsKKworICAgICAgYWggLT0gYmg7CisgICAgICBpZiAoYWggPCAoQ05TVF9MSU1CICgxKSA8PCAoR01QX0xJTUJfQklUUyAvIDIgKyAxKSkpCisJYnJlYWs7CisKKyAgICAgIGlmIChhaCA8PSBiaCkKKwl7CisJICAvKiBVc2UgcSA9IDEgKi8KKwkgIHUwMSArPSB1MDA7CisJICB1MTEgKz0gdTEwOworCSAgYml0cyA9IG1wbl9qYWNvYmlfdXBkYXRlIChiaXRzLCAxLCAxKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgbXBfbGltYl90IHI7CisJICBtcF9saW1iX3QgcSA9IGRpdjEgKCZyLCBhaCwgYmgpOworCSAgYWggPSByOworCSAgaWYgKGFoIDwgKENOU1RfTElNQigxKSA8PCAoR01QX0xJTUJfQklUUyAvIDIgKyAxKSkpCisJICAgIHsKKwkgICAgICAvKiBBIGlzIHRvbyBzbWFsbCwgYnV0IHEgaXMgY29ycmVjdC4gKi8KKwkgICAgICB1MDEgKz0gcSAqIHUwMDsKKwkgICAgICB1MTEgKz0gcSAqIHUxMDsKKwkgICAgICBiaXRzID0gbXBuX2phY29iaV91cGRhdGUgKGJpdHMsIDEsIHEgJiAzKTsKKwkgICAgICBicmVhazsKKwkgICAgfQorCSAgcSsrOworCSAgdTAxICs9IHEgKiB1MDA7CisJICB1MTEgKz0gcSAqIHUxMDsKKwkgIGJpdHMgPSBtcG5famFjb2JpX3VwZGF0ZSAoYml0cywgMSwgcSAmIDMpOworCX0KKyAgICBzdWJ0cmFjdF9hMToKKyAgICAgIEFTU0VSVCAoYmggPj0gYWgpOworICAgICAgaWYgKGFoID09IGJoKQorCWJyZWFrOworCisgICAgICBiaCAtPSBhaDsKKyAgICAgIGlmIChiaCA8IChDTlNUX0xJTUIgKDEpIDw8IChHTVBfTElNQl9CSVRTIC8gMiArIDEpKSkKKwlicmVhazsKKworICAgICAgaWYgKGJoIDw9IGFoKQorCXsKKwkgIC8qIFVzZSBxID0gMSAqLworCSAgdTAwICs9IHUwMTsKKwkgIHUxMCArPSB1MTE7CisJICBiaXRzID0gbXBuX2phY29iaV91cGRhdGUgKGJpdHMsIDAsIDEpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBtcF9saW1iX3QgcjsKKwkgIG1wX2xpbWJfdCBxID0gZGl2MSAoJnIsIGJoLCBhaCk7CisJICBiaCA9IHI7CisJICBpZiAoYmggPCAoQ05TVF9MSU1CKDEpIDw8IChHTVBfTElNQl9CSVRTIC8gMiArIDEpKSkKKwkgICAgeworCSAgICAgIC8qIEIgaXMgdG9vIHNtYWxsLCBidXQgcSBpcyBjb3JyZWN0LiAqLworCSAgICAgIHUwMCArPSBxICogdTAxOworCSAgICAgIHUxMCArPSBxICogdTExOworCSAgICAgIGJpdHMgPSBtcG5famFjb2JpX3VwZGF0ZSAoYml0cywgMCwgcSAmIDMpOworCSAgICAgIGJyZWFrOworCSAgICB9CisJICBxKys7CisJICB1MDAgKz0gcSAqIHUwMTsKKwkgIHUxMCArPSBxICogdTExOworCSAgYml0cyA9IG1wbl9qYWNvYmlfdXBkYXRlIChiaXRzLCAwLCBxICYgMyk7CisJfQorICAgIH0KKworIGRvbmU6CisgIE0tPnVbMF1bMF0gPSB1MDA7IE0tPnVbMF1bMV0gPSB1MDE7CisgIE0tPnVbMV1bMF0gPSB1MTA7IE0tPnVbMV1bMV0gPSB1MTE7CisgICpiaXRzcCA9IGJpdHM7CisKKyAgcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvaGdjZF9hcHByLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvaGdjZF9hcHByLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIwMTczOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9oZ2NkX2FwcHIuYwpAQCAtMCwwICsxLDI2NyBAQAorLyogaGdjZF9hcHByLmMuCisKKyAgIFRIRSBGVU5DVElPTlMgSU4gVEhJUyBGSUxFIEFSRSBJTlRFUk5BTCBXSVRIIE1VVEFCTEUgSU5URVJGQUNFUy4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggVEhFTSBUSFJPVUdIIERPQ1VNRU5URUQgSU5URVJGQUNFUy4gIElOIEZBQ1QsIElUIElTIEFMTU9TVAorICAgR1VBUkFOVEVFRCBUSEFUIFRIRVknTEwgQ0hBTkdFIE9SIERJU0FQUEVBUiBJTiBBIEZVVFVSRSBHTlUgTVAgUkVMRUFTRS4KKworQ29weXJpZ2h0IDIwMTEsIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorI2luY2x1ZGUgImxvbmdsb25nLmgiCisKKy8qIElkZW50aWNhbCB0byBtcG5faGdjZF9pdGNoLiBGSVhNRTogRG8gd2UgcmVhbGx5IG5lZWQgdG8gYWRkCisgICBIR0NEX1RIUkVTSE9MRCBhdCB0aGUgZW5kPyAqLworbXBfc2l6ZV90CittcG5faGdjZF9hcHByX2l0Y2ggKG1wX3NpemVfdCBuKQoreworICBpZiAoQkVMT1dfVEhSRVNIT0xEIChuLCBIR0NEX0FQUFJfVEhSRVNIT0xEKSkKKyAgICByZXR1cm4gbjsKKyAgZWxzZQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGs7CisgICAgICBpbnQgY291bnQ7CisgICAgICBtcF9zaXplX3QgbnNjYWxlZDsKKworICAgICAgLyogR2V0IHRoZSByZWN1cnNpb24gZGVwdGguICovCisgICAgICBuc2NhbGVkID0gKG4gLSAxKSAvIChIR0NEX0FQUFJfVEhSRVNIT0xEIC0gMSk7CisgICAgICBjb3VudF9sZWFkaW5nX3plcm9zIChjb3VudCwgbnNjYWxlZCk7CisgICAgICBrID0gR01QX0xJTUJfQklUUyAtIGNvdW50OworCisgICAgICByZXR1cm4gMjAgKiAoKG4rMykgLyA0KSArIDIyICogayArIEhHQ0RfVEhSRVNIT0xEOworICAgIH0KK30KKworLyogRGVzdHJveXMgaW5wdXRzLiAqLworaW50CittcG5faGdjZF9hcHByIChtcF9wdHIgYXAsIG1wX3B0ciBicCwgbXBfc2l6ZV90IG4sCisJICAgICAgIHN0cnVjdCBoZ2NkX21hdHJpeCAqTSwgbXBfcHRyIHRwKQoreworICBtcF9zaXplX3QgczsKKyAgaW50IHN1Y2Nlc3MgPSAwOworCisgIEFTU0VSVCAobiA+IDApOworCisgIEFTU0VSVCAoKGFwW24tMV0gfCBicFtuLTFdKSAhPSAwKTsKKworICBpZiAobiA8PSAyKQorICAgIC8qIEltcGxpZXMgcyA9IG4uIEEgZmFpcmx5IHVuaW50ZXJlc3RpbmcgY2FzZSBidXQgZXhlcmNpc2VkIGJ5IHRoZQorICAgICAgIHJhbmRvbSBpbnB1dHMgb2YgdGhlIHRlc3RzdWl0ZS4gKi8KKyAgICByZXR1cm4gMDsKKworICBBU1NFUlQgKChuKzEpLzIgLSAxIDwgTS0+YWxsb2MpOworCisgIC8qIFdlIGFpbSBmb3IgcmVkdWN0aW9uIG9mIHRvIEdNUF9OVU1CX0JJVFMgKiBzIGJpdHMuIEJ1dCBlYWNoIHRpbWUKKyAgICAgd2UgZGlzY2FyZCBzb21lIG9mIHRoZSBsZWFzdCBzaWduaWZpY2FudCBsaW1icywgd2UgbXVzdCBrZWVwIG9uZQorICAgICBhZGRpdGlvbmFsIGJpdCB0byBhY2NvdW50IGZvciB0aGUgdHJ1bmNhdGlvbiBlcnJvci4gV2UgbWFpbnRhaW4KKyAgICAgdGhlIEdNUF9OVU1CX0JJVFMgKiBzIC0gZXh0cmFfYml0cyBhcyB0aGUgY3VycmVudCB0YXJnZXQgc2l6ZS4gKi8KKworICBzID0gbi8yICsgMTsKKyAgaWYgKEJFTE9XX1RIUkVTSE9MRCAobiwgSEdDRF9BUFBSX1RIUkVTSE9MRCkpCisgICAgeworICAgICAgdW5zaWduZWQgZXh0cmFfYml0cyA9IDA7CisKKyAgICAgIHdoaWxlIChuID4gMikKKwl7CisJICBtcF9zaXplX3Qgbm47CisKKwkgIEFTU0VSVCAobiA+IHMpOworCSAgQVNTRVJUIChuIDw9IDIqcyk7CisKKwkgIG5uID0gbXBuX2hnY2Rfc3RlcCAobiwgYXAsIGJwLCBzLCBNLCB0cCk7CisJICBpZiAoIW5uKQorCSAgICBicmVhazsKKworCSAgbiA9IG5uOworCSAgc3VjY2VzcyA9IDE7CisKKwkgIC8qIFdlIGNhbiB0cnVuY2F0ZSBhbmQgZGlzY2FyZCB0aGUgbG93ZXIgcCBiaXRzIHdoZW5ldmVyIG5iaXRzIDw9CisJICAgICAyKnNiaXRzIC0gcC4gVG8gYWNjb3VudCBmb3IgdGhlIHRydW5jYXRpb24gZXJyb3IsIHdlIG11c3QKKwkgICAgIGFkanVzdAorCisJICAgICBzYml0cyA8LS0gc2JpdHMgKyAxIC0gcCwKKworCSAgICAgcmF0aGVyIHRoYW4ganVzdCBzYml0cyA8LS0gc2JpdHMgLSBwLiBUaGlzIGFkanVzdG1lbnQgbWFrZXMKKwkgICAgIHRoZSBwcm9kdWNlZCBtYXRyaXggc2xpZ2h0bHkgc21hbGxlciB0aGFuIGl0IGNvdWxkIGJlLiAqLworCisJICBpZiAoR01QX05VTUJfQklUUyAqIChuICsgMSkgKyAyICogZXh0cmFfYml0cyA8PSAyKkdNUF9OVU1CX0JJVFMgKiBzKQorCSAgICB7CisJICAgICAgbXBfc2l6ZV90IHAgPSAoR01QX05VTUJfQklUUyAqICgyKnMgLSBuKSAtIDIqZXh0cmFfYml0cykgLyBHTVBfTlVNQl9CSVRTOworCisJICAgICAgaWYgKGV4dHJhX2JpdHMgPT0gMCkKKwkJeworCQkgIC8qIFdlIGNyb3NzIGEgbGltYiBib3VuZGFyeSBhbmQgYnVtcCBzLiBXZSBjYW4ndCBkbyB0aGF0CisJCSAgICAgaWYgdGhlIHJlc3VsdCBpcyB0aGF0IGl0IG1ha2VzIG1ha2VzIG1pbihVLCBWKQorCQkgICAgIHNtYWxsZXIgdGhhbiAyXntHTVBfTlVNQl9CSVRTfSBzLiAqLworCQkgIGlmIChzICsgMSA9PSBuCisJCSAgICAgIHx8IG1wbl96ZXJvX3AgKGFwICsgcyArIDEsIG4gLSBzIC0gMSkKKwkJICAgICAgfHwgbXBuX3plcm9fcCAoYnAgKyBzICsgMSwgbiAtIHMgLSAxKSkKKwkJICAgIGNvbnRpbnVlOworCisJCSAgZXh0cmFfYml0cyA9IEdNUF9OVU1CX0JJVFMgLSAxOworCQkgIHMrKzsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIGV4dHJhX2JpdHMtLTsKKwkJfQorCisJICAgICAgLyogRHJvcCB0aGUgcCBsZWFzdCBzaWduaWZpY2FudCBsaW1icyAqLworCSAgICAgIGFwICs9IHA7IGJwICs9IHA7IG4gLT0gcDsgcyAtPSBwOworCSAgICB9CisJfQorCisgICAgICBBU1NFUlQgKHMgPiAwKTsKKworICAgICAgaWYgKGV4dHJhX2JpdHMgPiAwKQorCXsKKwkgIC8qIFdlIGNhbiBnZXQgaGVyZSBvbmx5IG9mIHdlIGhhdmUgZHJvcHBlZCBhdCBsZWFzdCBvbmUgb2YgdGhlIGxlYXN0CisJICAgICBzaWduaWZpY2FudCBiaXRzLCBzbyB3ZSBjYW4gZGVjcmVtZW50IGFwIGFuZCBicC4gV2UgY2FuIHRoZW4gc2hpZnQKKwkgICAgIGxlZnQgZXh0cmEgYml0cyB1c2luZyBtcG5fcnNoaWZ0LiAqLworCSAgLyogTk9URTogSW4gdGhlIHVubGlrZWx5IGNhc2UgdGhhdCBuIGlzIGxhcmdlLCBpdCB3b3VsZCBiZSBwcmVmZXJhYmxlCisJICAgICB0byBkbyBhbiBpbml0aWFsIHN1YmRpdiBzdGVwIHRvIHJlZHVjZSB0aGUgc2l6ZSBiZWZvcmUgc2hpZnRpbmcsCisJICAgICBidXQgdGhhdCB3b3VsZCBtZWFuIGR1cGxpY2F0aW5nIG1wbl9nY2Rfc3ViZGl2X3N0ZXAgd2l0aCBhIGJpdAorCSAgICAgY291bnQgcmF0aGVyIHRoYW4gYSBsaW1iIGNvdW50LiAqLworCSAgYXAtLTsgYnAtLTsKKwkgIGFwWzBdID0gbXBuX3JzaGlmdCAoYXArMSwgYXArMSwgbiwgR01QX05VTUJfQklUUyAtIGV4dHJhX2JpdHMpOworCSAgYnBbMF0gPSBtcG5fcnNoaWZ0IChicCsxLCBicCsxLCBuLCBHTVBfTlVNQl9CSVRTIC0gZXh0cmFfYml0cyk7CisJICBuICs9IChhcFtuXSB8IGJwW25dKSA+IDA7CisKKwkgIEFTU0VSVCAoc3VjY2Vzcyk7CisKKwkgIHdoaWxlIChuID4gMikKKwkgICAgeworCSAgICAgIG1wX3NpemVfdCBubjsKKworCSAgICAgIEFTU0VSVCAobiA+IHMpOworCSAgICAgIEFTU0VSVCAobiA8PSAyKnMpOworCisJICAgICAgbm4gPSBtcG5faGdjZF9zdGVwIChuLCBhcCwgYnAsIHMsIE0sIHRwKTsKKworCSAgICAgIGlmICghbm4pCisJCXJldHVybiAxOworCisJICAgICAgbiA9IG5uOworCSAgICB9CisJfQorCisgICAgICBpZiAobiA9PSAyKQorCXsKKwkgIHN0cnVjdCBoZ2NkX21hdHJpeDEgTTE7CisJICBBU1NFUlQgKHMgPT0gMSk7CisKKwkgIGlmIChtcG5faGdjZDIgKGFwWzFdLCBhcFswXSwgYnBbMV0sIGJwWzBdLCAmTTEpKQorCSAgICB7CisJICAgICAgLyogTXVsdGlwbHkgTSA8LSBNICogTTEgKi8KKwkgICAgICBtcG5faGdjZF9tYXRyaXhfbXVsXzEgKE0sICZNMSwgdHApOworCSAgICAgIHN1Y2Nlc3MgPSAxOworCSAgICB9CisJfQorICAgICAgcmV0dXJuIHN1Y2Nlc3M7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgbXBfc2l6ZV90IG4yID0gKDMqbikvNCArIDE7CisgICAgICBtcF9zaXplX3QgcCA9IG4vMjsKKyAgICAgIG1wX3NpemVfdCBubjsKKworICAgICAgbm4gPSBtcG5faGdjZF9yZWR1Y2UgKE0sIGFwLCBicCwgbiwgcCwgdHApOworICAgICAgaWYgKG5uKQorCXsKKwkgIG4gPSBubjsKKwkgIC8qIEZJWE1FOiBEaXNjYXJkIHNvbWUgb2YgdGhlIGxvdyBsaW1icyBpbW1lZGlhdGVseT8gKi8KKwkgIHN1Y2Nlc3MgPSAxOworCX0KKworICAgICAgd2hpbGUgKG4gPiBuMikKKwl7CisJICBtcF9zaXplX3Qgbm47CisKKwkgIC8qIE5lZWRzIG4gKyAxIHN0b3JhZ2UgKi8KKwkgIG5uID0gbXBuX2hnY2Rfc3RlcCAobiwgYXAsIGJwLCBzLCBNLCB0cCk7CisJICBpZiAoIW5uKQorCSAgICByZXR1cm4gc3VjY2VzczsKKworCSAgbiA9IG5uOworCSAgc3VjY2VzcyA9IDE7CisJfQorICAgICAgaWYgKG4gPiBzICsgMikKKwl7CisJICBzdHJ1Y3QgaGdjZF9tYXRyaXggTTE7CisJICBtcF9zaXplX3Qgc2NyYXRjaDsKKworCSAgcCA9IDIqcyAtIG4gKyAxOworCSAgc2NyYXRjaCA9IE1QTl9IR0NEX01BVFJJWF9JTklUX0lUQ0ggKG4tcCk7CisKKwkgIG1wbl9oZ2NkX21hdHJpeF9pbml0KCZNMSwgbiAtIHAsIHRwKTsKKwkgIGlmIChtcG5faGdjZF9hcHByIChhcCArIHAsIGJwICsgcCwgbiAtIHAsICZNMSwgdHAgKyBzY3JhdGNoKSkKKwkgICAgeworCSAgICAgIC8qIFdlIGFsd2F5cyBoYXZlIG1heChNKSA+IDJeey0oR01QX05VTUJfQklUUyArIDEpfSBtYXgoTTEpICovCisJICAgICAgQVNTRVJUIChNLT5uICsgMiA+PSBNMS5uKTsKKworCSAgICAgIC8qIEZ1cnRoZXJtb3JlLCBhc3N1bWUgTSBlbmRzIHdpdGggYSBxdW90aWVudCAoMSwgcTsgMCwgMSksCisJCSB0aGVuIGVpdGhlciBxIG9yIHEgKyAxIGlzIGEgY29ycmVjdCBxdW90aWVudCwgYW5kIE0xIHdpbGwKKwkJIHN0YXJ0IHdpdGggZWl0aGVyICgxLCAwOyAxLCAxKSBvciAoMiwgMTsgMSwgMSkuIFRoaXMKKwkJIHJ1bGVzIG91dCB0aGUgY2FzZSB0aGF0IHRoZSBzaXplIG9mIE0gKiBNMSBpcyBtdWNoCisJCSBzbWFsbGVyIHRoYW4gdGhlIGV4cGVjdGVkIE0tPm4gKyBNMS0+bi4gKi8KKworCSAgICAgIEFTU0VSVCAoTS0+biArIE0xLm4gPCBNLT5hbGxvYyk7CisKKwkgICAgICAvKiBXZSBuZWVkIGEgYm91bmQgZm9yIG9mIE0tPm4gKyBNMS5uLiBMZXQgbiBiZSB0aGUgb3JpZ2luYWwKKwkJIGlucHV0IHNpemUuIFRoZW4KKworCQkgY2VpbChuLzIpIC0gMSA+PSBzaXplIG9mIHByb2R1Y3QgPj0gTS5uICsgTTEubiAtIDIKKworCQkgYW5kIGl0IGZvbGxvd3MgdGhhdAorCisJCSBNLm4gKyBNMS5uIDw9IGNlaWwobi8yKSArIDEKKworCQkgVGhlbiAzKihNLm4gKyBNMS5uKSArIDUgPD0gMyAqIGNlaWwobi8yKSArIDggaXMgdGhlCisJCSBhbW91bnQgb2YgbmVlZGVkIHNjcmF0Y2ggc3BhY2UuICovCisJICAgICAgbXBuX2hnY2RfbWF0cml4X211bCAoTSwgJk0xLCB0cCArIHNjcmF0Y2gpOworCSAgICAgIHJldHVybiAxOworCSAgICB9CisJfQorCisgICAgICBmb3IoOzspCisJeworCSAgbXBfc2l6ZV90IG5uOworCisJICBBU1NFUlQgKG4gPiBzKTsKKwkgIEFTU0VSVCAobiA8PSAyKnMpOworCisJICBubiA9IG1wbl9oZ2NkX3N0ZXAgKG4sIGFwLCBicCwgcywgTSwgdHApOworCisJICBpZiAoIW5uKQorCSAgICByZXR1cm4gc3VjY2VzczsKKworCSAgbiA9IG5uOworCSAgc3VjY2VzcyA9IDE7CisJfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9oZ2NkX2phY29iaS5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2hnY2RfamFjb2JpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQwMTRjZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9oZ2NkX2phY29iaS5jCkBAIC0wLDAgKzEsMjQzIEBACisvKiBoZ2NkX2phY29iaS5jLgorCisgICBUSEUgRlVOQ1RJT05TIElOIFRISVMgRklMRSBBUkUgSU5URVJOQUwgV0lUSCBNVVRBQkxFIElOVEVSRkFDRVMuICBJVCBJUyBPTkxZCisgICBTQUZFIFRPIFJFQUNIIFRIRU0gVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuICBJTiBGQUNULCBJVCBJUyBBTE1PU1QKKyAgIEdVQVJBTlRFRUQgVEhBVCBUSEVZJ0xMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR05VIE1QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAyMDAzLTIwMDUsIDIwMDgsIDIwMTEsIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorI2luY2x1ZGUgImxvbmdsb25nLmgiCisKKy8qIFRoaXMgZmlsZSBpcyBhbG1vc3QgYSBjb3B5IG9mIGhnY2QuYywgd2l0aCBzb21lIGFkZGVkIGNhbGxzIHRvCisgICBtcG5famFjb2JpX3VwZGF0ZSAqLworCitzdHJ1Y3QgaGdjZF9qYWNvYmlfY3R4Cit7CisgIHN0cnVjdCBoZ2NkX21hdHJpeCAqTTsKKyAgdW5zaWduZWQgKmJpdHNwOworfTsKKworc3RhdGljIHZvaWQKK2hnY2RfamFjb2JpX2hvb2sgKHZvaWQgKnAsIG1wX3NyY3B0ciBncCwgbXBfc2l6ZV90IGduLAorCQkgIG1wX3NyY3B0ciBxcCwgbXBfc2l6ZV90IHFuLCBpbnQgZCkKK3sKKyAgQVNTRVJUICghZ3ApOworICBBU1NFUlQgKGQgPj0gMCk7CisKKyAgTVBOX05PUk1BTElaRSAocXAsIHFuKTsKKyAgaWYgKHFuID4gMCkKKyAgICB7CisgICAgICBzdHJ1Y3QgaGdjZF9qYWNvYmlfY3R4ICpjdHggPSAoc3RydWN0IGhnY2RfamFjb2JpX2N0eCAqKSBwOworICAgICAgLyogTk9URVM6IFRoaXMgaXMgYSBiaXQgdWdseS4gQSB0cCBhcmVhIGlzIHBhc3NlZCB0bworCSBnY2Rfc3ViZGl2X3N0ZXAsIHdoaWNoIHN0b3JlcyBxIGF0IHRoZSBzdGFydCBvZiB0aGF0IGFyZWEuIFdlCisJIG5vdyB1c2UgdGhlIHJlc3QuICovCisgICAgICBtcF9wdHIgdHAgPSAobXBfcHRyKSBxcCArIHFuOworCisgICAgICBtcG5faGdjZF9tYXRyaXhfdXBkYXRlX3EgKGN0eC0+TSwgcXAsIHFuLCBkLCB0cCk7CisgICAgICAqY3R4LT5iaXRzcCA9IG1wbl9qYWNvYmlfdXBkYXRlICgqY3R4LT5iaXRzcCwgZCwgcXBbMF0gJiAzKTsKKyAgICB9Cit9CisKKy8qIFBlcmZvcm0gYSBmZXcgc3RlcHMsIHVzaW5nIHNvbWUgb2YgbXBuX2hnY2QyLCBzdWJ0cmFjdGlvbiBhbmQKKyAgIGRpdmlzaW9uLiBSZWR1Y2VzIHRoZSBzaXplIGJ5IGFsbW9zdCBvbmUgbGltYiBvciBtb3JlLCBidXQgbmV2ZXIKKyAgIGJlbG93IHRoZSBnaXZlbiBzaXplIHMuIFJldHVybiBuZXcgc2l6ZSBmb3IgYSBhbmQgYiwgb3IgMCBpZiBubworICAgbW9yZSBzdGVwcyBhcmUgcG9zc2libGUuCisKKyAgIElmIGhnY2QyIHN1Y2NlZWRzLCBuZWVkcyB0ZW1wb3Jhcnkgc3BhY2UgZm9yIGhnY2RfbWF0cml4X211bF8xLCBNLT5uCisgICBsaW1icywgYW5kIGhnY2RfbXVsX21hdHJpeDFfaW52ZXJzZV92ZWN0b3IsIG4gbGltYnMuIElmIGhnY2QyCisgICBmYWlscywgbmVlZHMgc3BhY2UgZm9yIHRoZSBxdW90aWVudCwgcW4gPD0gbiAtIHMgKyAxIGxpbWJzLCBmb3IgYW5kCisgICBoZ2NkX21hdHJpeF91cGRhdGVfcSwgcW4gKyAoc2l6ZSBvZiB0aGUgYXBwcm9wcmlhdGUgY29sdW1uIG9mIE0pIDw9CisgICByZXN1bHRpbmcgc2l6ZSBvZiBNLgorCisgICBJZiBOIGlzIHRoZSBpbnB1dCBzaXplIHRvIHRoZSBjYWxsaW5nIGhnY2QsIHRoZW4gcyA9IGZsb29yKE4vMikgKworICAgMSwgTS0+biA8IE4sIHFuICsgbWF0cml4IHNpemUgPD0gbiAtIHMgKyAxICsgbiAtIHMgPSAyIChuIC0gcykgKyAxCisgICA8IE4sIHNvIE4gaXMgc3VmZmljaWVudC4KKyovCisKK3N0YXRpYyBtcF9zaXplX3QKK2hnY2RfamFjb2JpX3N0ZXAgKG1wX3NpemVfdCBuLCBtcF9wdHIgYXAsIG1wX3B0ciBicCwgbXBfc2l6ZV90IHMsCisJCSAgc3RydWN0IGhnY2RfbWF0cml4ICpNLCB1bnNpZ25lZCAqYml0c3AsIG1wX3B0ciB0cCkKK3sKKyAgc3RydWN0IGhnY2RfbWF0cml4MSBNMTsKKyAgbXBfbGltYl90IG1hc2s7CisgIG1wX2xpbWJfdCBhaCwgYWwsIGJoLCBibDsKKworICBBU1NFUlQgKG4gPiBzKTsKKworICBtYXNrID0gYXBbbi0xXSB8IGJwW24tMV07CisgIEFTU0VSVCAobWFzayA+IDApOworCisgIGlmIChuID09IHMgKyAxKQorICAgIHsKKyAgICAgIGlmIChtYXNrIDwgNCkKKwlnb3RvIHN1YnRyYWN0OworCisgICAgICBhaCA9IGFwW24tMV07IGFsID0gYXBbbi0yXTsKKyAgICAgIGJoID0gYnBbbi0xXTsgYmwgPSBicFtuLTJdOworICAgIH0KKyAgZWxzZSBpZiAobWFzayAmIEdNUF9OVU1CX0hJR0hCSVQpCisgICAgeworICAgICAgYWggPSBhcFtuLTFdOyBhbCA9IGFwW24tMl07CisgICAgICBiaCA9IGJwW24tMV07IGJsID0gYnBbbi0yXTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpbnQgc2hpZnQ7CisKKyAgICAgIGNvdW50X2xlYWRpbmdfemVyb3MgKHNoaWZ0LCBtYXNrKTsKKyAgICAgIGFoID0gTVBOX0VYVFJBQ1RfTlVNQiAoc2hpZnQsIGFwW24tMV0sIGFwW24tMl0pOworICAgICAgYWwgPSBNUE5fRVhUUkFDVF9OVU1CIChzaGlmdCwgYXBbbi0yXSwgYXBbbi0zXSk7CisgICAgICBiaCA9IE1QTl9FWFRSQUNUX05VTUIgKHNoaWZ0LCBicFtuLTFdLCBicFtuLTJdKTsKKyAgICAgIGJsID0gTVBOX0VYVFJBQ1RfTlVNQiAoc2hpZnQsIGJwW24tMl0sIGJwW24tM10pOworICAgIH0KKworICAvKiBUcnkgYW4gbXBuX2hnY2QyIHN0ZXAgKi8KKyAgaWYgKG1wbl9oZ2NkMl9qYWNvYmkgKGFoLCBhbCwgYmgsIGJsLCAmTTEsIGJpdHNwKSkKKyAgICB7CisgICAgICAvKiBNdWx0aXBseSBNIDwtIE0gKiBNMSAqLworICAgICAgbXBuX2hnY2RfbWF0cml4X211bF8xIChNLCAmTTEsIHRwKTsKKworICAgICAgLyogQ2FuJ3Qgc3dhcCBpbnB1dHMsIHNvIHdlIG5lZWQgdG8gY29weS4gKi8KKyAgICAgIE1QTl9DT1BZICh0cCwgYXAsIG4pOworICAgICAgLyogTXVsdGlwbHkgTTFeey0xfSAoYTtiKSAqLworICAgICAgcmV0dXJuIG1wbl9tYXRyaXgyMl9tdWwxX2ludmVyc2VfdmVjdG9yICgmTTEsIGFwLCB0cCwgYnAsIG4pOworICAgIH0KKworIHN1YnRyYWN0OgorICB7CisgICAgc3RydWN0IGhnY2RfamFjb2JpX2N0eCBjdHg7CisgICAgY3R4Lk0gPSBNOworICAgIGN0eC5iaXRzcCA9IGJpdHNwOworCisgICAgcmV0dXJuIG1wbl9nY2Rfc3ViZGl2X3N0ZXAgKGFwLCBicCwgbiwgcywgaGdjZF9qYWNvYmlfaG9vaywgJmN0eCwgdHApOworICB9Cit9CisKKy8qIFJlZHVjZXMgYSxiIHVudGlsIHxhLWJ8IGZpdHMgaW4gbi8yICsgMSBsaW1icy4gQ29uc3RydWN0cyBtYXRyaXggTQorICAgd2l0aCBlbGVtZW50cyBvZiBzaXplIGF0IG1vc3QgKG4rMSkvMiAtIDEuIFJldHVybnMgbmV3IHNpemUgb2YgYSwKKyAgIGIsIG9yIHplcm8gaWYgbm8gcmVkdWN0aW9uIGlzIHBvc3NpYmxlLiAqLworCisvKiBTYW1lIHNjcmF0Y2ggcmVxdWlyZW1lbnRzIGFzIGZvciBtcG5faGdjZC4gKi8KK21wX3NpemVfdAorbXBuX2hnY2RfamFjb2JpIChtcF9wdHIgYXAsIG1wX3B0ciBicCwgbXBfc2l6ZV90IG4sCisJCSBzdHJ1Y3QgaGdjZF9tYXRyaXggKk0sIHVuc2lnbmVkICpiaXRzcCwgbXBfcHRyIHRwKQoreworICBtcF9zaXplX3QgcyA9IG4vMiArIDE7CisKKyAgbXBfc2l6ZV90IG5uOworICBpbnQgc3VjY2VzcyA9IDA7CisKKyAgaWYgKG4gPD0gcykKKyAgICAvKiBIYXBwZW5zIHdoZW4gbiA8PSAyLCBhIGZhaXJseSB1bmludGVyZXN0aW5nIGNhc2UgYnV0IGV4ZXJjaXNlZAorICAgICAgIGJ5IHRoZSByYW5kb20gaW5wdXRzIG9mIHRoZSB0ZXN0c3VpdGUuICovCisgICAgcmV0dXJuIDA7CisKKyAgQVNTRVJUICgoYXBbbi0xXSB8IGJwW24tMV0pID4gMCk7CisKKyAgQVNTRVJUICgobisxKS8yIC0gMSA8IE0tPmFsbG9jKTsKKworICBpZiAoQUJPVkVfVEhSRVNIT0xEIChuLCBIR0NEX1RIUkVTSE9MRCkpCisgICAgeworICAgICAgbXBfc2l6ZV90IG4yID0gKDMqbikvNCArIDE7CisgICAgICBtcF9zaXplX3QgcCA9IG4vMjsKKworICAgICAgbm4gPSBtcG5faGdjZF9qYWNvYmkgKGFwICsgcCwgYnAgKyBwLCBuIC0gcCwgTSwgYml0c3AsIHRwKTsKKyAgICAgIGlmIChubiA+IDApCisJeworCSAgLyogTmVlZHMgMioocCArIE0tPm4pIDw9IDIqKGZsb29yKG4vMikgKyBjZWlsKG4vMikgLSAxKQorCSAgICAgPSAyIChuIC0gMSkgKi8KKwkgIG4gPSBtcG5faGdjZF9tYXRyaXhfYWRqdXN0IChNLCBwICsgbm4sIGFwLCBicCwgcCwgdHApOworCSAgc3VjY2VzcyA9IDE7CisJfQorICAgICAgd2hpbGUgKG4gPiBuMikKKwl7CisJICAvKiBOZWVkcyBuICsgMSBzdG9yYWdlICovCisJICBubiA9IGhnY2RfamFjb2JpX3N0ZXAgKG4sIGFwLCBicCwgcywgTSwgYml0c3AsIHRwKTsKKwkgIGlmICghbm4pCisJICAgIHJldHVybiBzdWNjZXNzID8gbiA6IDA7CisJICBuID0gbm47CisJICBzdWNjZXNzID0gMTsKKwl9CisKKyAgICAgIGlmIChuID4gcyArIDIpCisJeworCSAgc3RydWN0IGhnY2RfbWF0cml4IE0xOworCSAgbXBfc2l6ZV90IHNjcmF0Y2g7CisKKwkgIHAgPSAyKnMgLSBuICsgMTsKKwkgIHNjcmF0Y2ggPSBNUE5fSEdDRF9NQVRSSVhfSU5JVF9JVENIIChuLXApOworCisJICBtcG5faGdjZF9tYXRyaXhfaW5pdCgmTTEsIG4gLSBwLCB0cCk7CisJICBubiA9IG1wbl9oZ2NkX2phY29iaSAoYXAgKyBwLCBicCArIHAsIG4gLSBwLCAmTTEsIGJpdHNwLCB0cCArIHNjcmF0Y2gpOworCSAgaWYgKG5uID4gMCkKKwkgICAgeworCSAgICAgIC8qIFdlIGFsd2F5cyBoYXZlIG1heChNKSA+IDJeey0oR01QX05VTUJfQklUUyArIDEpfSBtYXgoTTEpICovCisJICAgICAgQVNTRVJUIChNLT5uICsgMiA+PSBNMS5uKTsKKworCSAgICAgIC8qIEZ1cnRoZXJtb3JlLCBhc3N1bWUgTSBlbmRzIHdpdGggYSBxdW90aWVudCAoMSwgcTsgMCwgMSksCisJCSB0aGVuIGVpdGhlciBxIG9yIHEgKyAxIGlzIGEgY29ycmVjdCBxdW90aWVudCwgYW5kIE0xIHdpbGwKKwkJIHN0YXJ0IHdpdGggZWl0aGVyICgxLCAwOyAxLCAxKSBvciAoMiwgMTsgMSwgMSkuIFRoaXMKKwkJIHJ1bGVzIG91dCB0aGUgY2FzZSB0aGF0IHRoZSBzaXplIG9mIE0gKiBNMSBpcyBtdWNoCisJCSBzbWFsbGVyIHRoYW4gdGhlIGV4cGVjdGVkIE0tPm4gKyBNMS0+bi4gKi8KKworCSAgICAgIEFTU0VSVCAoTS0+biArIE0xLm4gPCBNLT5hbGxvYyk7CisKKwkgICAgICAvKiBOZWVkcyAyIChwICsgTS0+bikgPD0gMiAoMipzIC0gbjIgKyAxICsgbjIgLSBzIC0gMSkKKwkJID0gMipzIDw9IDIqKGZsb29yKG4vMikgKyAxKSA8PSBuICsgMi4gKi8KKwkgICAgICBuID0gbXBuX2hnY2RfbWF0cml4X2FkanVzdCAoJk0xLCBwICsgbm4sIGFwLCBicCwgcCwgdHAgKyBzY3JhdGNoKTsKKworCSAgICAgIC8qIFdlIG5lZWQgYSBib3VuZCBmb3Igb2YgTS0+biArIE0xLm4uIExldCBuIGJlIHRoZSBvcmlnaW5hbAorCQkgaW5wdXQgc2l6ZS4gVGhlbgorCisJCSBjZWlsKG4vMikgLSAxID49IHNpemUgb2YgcHJvZHVjdCA+PSBNLm4gKyBNMS5uIC0gMgorCisJCSBhbmQgaXQgZm9sbG93cyB0aGF0CisKKwkJIE0ubiArIE0xLm4gPD0gY2VpbChuLzIpICsgMQorCisJCSBUaGVuIDMqKE0ubiArIE0xLm4pICsgNSA8PSAzICogY2VpbChuLzIpICsgOCBpcyB0aGUKKwkJIGFtb3VudCBvZiBuZWVkZWQgc2NyYXRjaCBzcGFjZS4gKi8KKwkgICAgICBtcG5faGdjZF9tYXRyaXhfbXVsIChNLCAmTTEsIHRwICsgc2NyYXRjaCk7CisJICAgICAgc3VjY2VzcyA9IDE7CisJICAgIH0KKwl9CisgICAgfQorCisgIGZvciAoOzspCisgICAgeworICAgICAgLyogTmVlZHMgcyszIDwgbiAqLworICAgICAgbm4gPSBoZ2NkX2phY29iaV9zdGVwIChuLCBhcCwgYnAsIHMsIE0sIGJpdHNwLCB0cCk7CisgICAgICBpZiAoIW5uKQorCXJldHVybiBzdWNjZXNzID8gbiA6IDA7CisKKyAgICAgIG4gPSBubjsKKyAgICAgIHN1Y2Nlc3MgPSAxOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9oZ2NkX21hdHJpeC5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2hnY2RfbWF0cml4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRjNzk1ZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9oZ2NkX21hdHJpeC5jCkBAIC0wLDAgKzEsMjY1IEBACisvKiBoZ2NkX21hdHJpeC5jLgorCisgICBUSEUgRlVOQ1RJT05TIElOIFRISVMgRklMRSBBUkUgSU5URVJOQUwgV0lUSCBNVVRBQkxFIElOVEVSRkFDRVMuICBJVCBJUyBPTkxZCisgICBTQUZFIFRPIFJFQUNIIFRIRU0gVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuICBJTiBGQUNULCBJVCBJUyBBTE1PU1QKKyAgIEdVQVJBTlRFRUQgVEhBVCBUSEVZJ0xMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR05VIE1QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAyMDAzLTIwMDUsIDIwMDgsIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorI2luY2x1ZGUgImxvbmdsb25nLmgiCisKKy8qIEZvciBpbnB1dCBvZiBzaXplIG4sIG1hdHJpeCBlbGVtZW50cyBhcmUgb2Ygc2l6ZSBhdCBtb3N0IGNlaWwobi8yKQorICAgLSAxLCBidXQgd2UgbmVlZCB0d28gbGltYnMgZXh0cmEuICovCit2b2lkCittcG5faGdjZF9tYXRyaXhfaW5pdCAoc3RydWN0IGhnY2RfbWF0cml4ICpNLCBtcF9zaXplX3QgbiwgbXBfcHRyIHApCit7CisgIG1wX3NpemVfdCBzID0gKG4rMSkvMiArIDE7CisgIE0tPmFsbG9jID0gczsKKyAgTS0+biA9IDE7CisgIE1QTl9aRVJPIChwLCA0ICogcyk7CisgIE0tPnBbMF1bMF0gPSBwOworICBNLT5wWzBdWzFdID0gcCArIHM7CisgIE0tPnBbMV1bMF0gPSBwICsgMiAqIHM7CisgIE0tPnBbMV1bMV0gPSBwICsgMyAqIHM7CisKKyAgTS0+cFswXVswXVswXSA9IE0tPnBbMV1bMV1bMF0gPSAxOworfQorCisvKiBVcGRhdGUgY29sdW1uIENPTCwgYWRkaW5nIGluIFEgKiBjb2x1bW4gKDEtQ09MKS4gVGVtcG9yYXJ5IHN0b3JhZ2U6CisgKiBxbiArIG4gPD0gTS0+YWxsb2MsIHdoZXJlIG4gaXMgdGhlIHNpemUgb2YgdGhlIGxhcmdlc3QgZWxlbWVudCBpbgorICogY29sdW1uIDEgLSBDT0wuICovCit2b2lkCittcG5faGdjZF9tYXRyaXhfdXBkYXRlX3EgKHN0cnVjdCBoZ2NkX21hdHJpeCAqTSwgbXBfc3JjcHRyIHFwLCBtcF9zaXplX3QgcW4sCisJCQkgIHVuc2lnbmVkIGNvbCwgbXBfcHRyIHRwKQoreworICBBU1NFUlQgKGNvbCA8IDIpOworCisgIGlmIChxbiA9PSAxKQorICAgIHsKKyAgICAgIG1wX2xpbWJfdCBxID0gcXBbMF07CisgICAgICBtcF9saW1iX3QgYzAsIGMxOworCisgICAgICBjMCA9IG1wbl9hZGRtdWxfMSAoTS0+cFswXVtjb2xdLCBNLT5wWzBdWzEtY29sXSwgTS0+biwgcSk7CisgICAgICBjMSA9IG1wbl9hZGRtdWxfMSAoTS0+cFsxXVtjb2xdLCBNLT5wWzFdWzEtY29sXSwgTS0+biwgcSk7CisKKyAgICAgIE0tPnBbMF1bY29sXVtNLT5uXSA9IGMwOworICAgICAgTS0+cFsxXVtjb2xdW00tPm5dID0gYzE7CisKKyAgICAgIE0tPm4gKz0gKGMwIHwgYzEpICE9IDA7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgdW5zaWduZWQgcm93OworCisgICAgICAvKiBDYXJyaWVzIGZvciB0aGUgdW5saWtlbHkgY2FzZSB0aGF0IHdlIGdldCBib3RoIGhpZ2ggd29yZHMKKwkgZnJvbSB0aGUgbXVsdGlwbGljYXRpb24gYW5kIGNhcnJpZXMgZnJvbSB0aGUgYWRkaXRpb24uICovCisgICAgICBtcF9saW1iX3QgY1syXTsKKyAgICAgIG1wX3NpemVfdCBuOworCisgICAgICAvKiBUaGUgbWF0cml4IHdpbGwgbm90IG5lY2Vzc2FyaWx5IGdyb3cgaW4gc2l6ZSBieSBxbiwgc28gd2UKKwkgbmVlZCBub3JtYWxpemF0aW9uIGluIG9yZGVyIG5vdCB0byBvdmVyZmxvdyBNLiAqLworCisgICAgICBmb3IgKG4gPSBNLT5uOyBuICsgcW4gPiBNLT5uOyBuLS0pCisJeworCSAgQVNTRVJUIChuID4gMCk7CisJICBpZiAoTS0+cFswXVsxLWNvbF1bbi0xXSA+IDAgfHwgTS0+cFsxXVsxLWNvbF1bbi0xXSA+IDApCisJICAgIGJyZWFrOworCX0KKworICAgICAgQVNTRVJUIChxbiArIG4gPD0gTS0+YWxsb2MpOworCisgICAgICBmb3IgKHJvdyA9IDA7IHJvdyA8IDI7IHJvdysrKQorCXsKKwkgIGlmIChxbiA8PSBuKQorCSAgICBtcG5fbXVsICh0cCwgTS0+cFtyb3ddWzEtY29sXSwgbiwgcXAsIHFuKTsKKwkgIGVsc2UKKwkgICAgbXBuX211bCAodHAsIHFwLCBxbiwgTS0+cFtyb3ddWzEtY29sXSwgbik7CisKKwkgIEFTU0VSVCAobiArIHFuID49IE0tPm4pOworCSAgY1tyb3ddID0gbXBuX2FkZCAoTS0+cFtyb3ddW2NvbF0sIHRwLCBuICsgcW4sIE0tPnBbcm93XVtjb2xdLCBNLT5uKTsKKwl9CisKKyAgICAgIG4gKz0gcW47CisKKyAgICAgIGlmIChjWzBdIHwgY1sxXSkKKwl7CisJICBNLT5wWzBdW2NvbF1bbl0gPSBjWzBdOworCSAgTS0+cFsxXVtjb2xdW25dID0gY1sxXTsKKwkgIG4rKzsKKwl9CisgICAgICBlbHNlCisJeworCSAgbiAtPSAoTS0+cFswXVtjb2xdW24tMV0gfCBNLT5wWzFdW2NvbF1bbi0xXSkgPT0gMDsKKwkgIEFTU0VSVCAobiA+PSBNLT5uKTsKKwl9CisgICAgICBNLT5uID0gbjsKKyAgICB9CisKKyAgQVNTRVJUIChNLT5uIDwgTS0+YWxsb2MpOworfQorCisvKiBNdWx0aXBseSBNIGJ5IE0xIGZyb20gdGhlIHJpZ2h0LiBTaW5jZSB0aGUgTTEgZWxlbWVudHMgZml0IGluCisgICBHTVBfTlVNQl9CSVRTIC0gMSBiaXRzLCBNIGdyb3dzIGJ5IGF0IG1vc3Qgb25lIGxpbWIuIE5lZWRzCisgICB0ZW1wb3Jhcnkgc3BhY2UgTS0+biAqLwordm9pZAorbXBuX2hnY2RfbWF0cml4X211bF8xIChzdHJ1Y3QgaGdjZF9tYXRyaXggKk0sIGNvbnN0IHN0cnVjdCBoZ2NkX21hdHJpeDEgKk0xLAorCQkgICAgICAgbXBfcHRyIHRwKQoreworICBtcF9zaXplX3QgbjAsIG4xOworCisgIC8qIENvdWxkIGF2b2lkIGNvcHkgYnkgc29tZSBzd2FwcGluZyBvZiBwb2ludGVycy4gKi8KKyAgTVBOX0NPUFkgKHRwLCBNLT5wWzBdWzBdLCBNLT5uKTsKKyAgbjAgPSBtcG5faGdjZF9tdWxfbWF0cml4MV92ZWN0b3IgKE0xLCBNLT5wWzBdWzBdLCB0cCwgTS0+cFswXVsxXSwgTS0+bik7CisgIE1QTl9DT1BZICh0cCwgTS0+cFsxXVswXSwgTS0+bik7CisgIG4xID0gbXBuX2hnY2RfbXVsX21hdHJpeDFfdmVjdG9yIChNMSwgTS0+cFsxXVswXSwgdHAsIE0tPnBbMV1bMV0sIE0tPm4pOworCisgIC8qIERlcGVuZHMgb24gemVybyBpbml0aWFsaXphdGlvbiAqLworICBNLT5uID0gTUFYKG4wLCBuMSk7CisgIEFTU0VSVCAoTS0+biA8IE0tPmFsbG9jKTsKK30KKworLyogTXVsdGlwbHkgTSBieSBNMSBmcm9tIHRoZSByaWdodC4gTmVlZHMgMyooTS0+biArIE0xLT5uKSArIDUgbGltYnMKKyAgIG9mIHRlbXBvcmFyeSBzdG9yYWdlIChzZWUgbXBuX21hdHJpeDIyX211bF9pdGNoKS4gKi8KK3ZvaWQKK21wbl9oZ2NkX21hdHJpeF9tdWwgKHN0cnVjdCBoZ2NkX21hdHJpeCAqTSwgY29uc3Qgc3RydWN0IGhnY2RfbWF0cml4ICpNMSwKKwkJICAgICBtcF9wdHIgdHApCit7CisgIG1wX3NpemVfdCBuOworCisgIC8qIEFib3V0IHRoZSBuZXcgc2l6ZSBvZiBNOnMgZWxlbWVudHMuIFNpbmNlIE0xJ3MgZGlhZ29uYWwgZWxlbWVudHMKKyAgICAgYXJlID4gMCwgbm8gZWxlbWVudCBjYW4gZGVjcmVhc2UuIFRoZSBuZXcgZWxlbWVudHMgYXJlIG9mIHNpemUKKyAgICAgTS0+biArIE0xLT5uLCBvbmUgbGltYiBtb3JlIG9yIGxlc3MuIFRoZSBjb21wdXRhdGlvbiBvZiB0aGUKKyAgICAgbWF0cml4IHByb2R1Y3QgcHJvZHVjZXMgZWxlbWVudHMgb2Ygc2l6ZSBNLT5uICsgTTEtPm4gKyAxLiBCdXQKKyAgICAgdGhlIHRydWUgc2l6ZSwgYWZ0ZXIgbm9ybWFsaXphdGlvbiwgbWF5IGJlIHRocmVlIGxpbWJzIHNtYWxsZXIuCisKKyAgICAgVGhlIHJlYXNvbiB0aGF0IHRoZSBwcm9kdWN0IGhhcyBub3JtYWxpemVkIHNpemUgPj0gTS0+biArIE0xLT5uIC0KKyAgICAgMiBpcyBzdWJ0bGUuIEl0IGRlcGVuZHMgb24gdGhlIGZhY3QgdGhhdCBNIGFuZCBNMSBjYW4gYmUgZmFjdG9yZWQKKyAgICAgYXMgcHJvZHVjdHMgb2YgKDEsMTsgMCwxKSBhbmQgKDEsMDsgMSwxKSwgYW5kIHRoYXQgd2UgY2FuJ3QgaGF2ZQorICAgICBNIGVuZGluZyB3aXRoIGEgbGFyZ2UgcG93ZXIgYW5kIE0xIHN0YXJ0aW5nIHdpdGggYSBsYXJnZSBwb3dlciBvZgorICAgICB0aGUgc2FtZSBtYXRyaXguICovCisKKyAgLyogRklYTUU6IFN0cmFzc2VuIG11bHRpcGxpY2F0aW9uIGdpdmVzIG9ubHkgYSBzbWFsbCBzcGVlZHVwLiBJbiBGRlQKKyAgICAgbXVsdGlwbGljYXRpb24gcmFuZ2UsIHRoaXMgZnVuY3Rpb24gY291bGQgYmUgc3BlZCB1cCBxdWl0ZSBhIGxvdAorICAgICB1c2luZyBpbnZhcmlhbmNlLiAqLworICBBU1NFUlQgKE0tPm4gKyBNMS0+biA8IE0tPmFsbG9jKTsKKworICBBU1NFUlQgKChNLT5wWzBdWzBdW00tPm4tMV0gfCBNLT5wWzBdWzFdW00tPm4tMV0KKwkgICB8IE0tPnBbMV1bMF1bTS0+bi0xXSB8IE0tPnBbMV1bMV1bTS0+bi0xXSkgPiAwKTsKKworICBBU1NFUlQgKChNMS0+cFswXVswXVtNMS0+bi0xXSB8IE0xLT5wWzBdWzFdW00xLT5uLTFdCisJICAgfCBNMS0+cFsxXVswXVtNMS0+bi0xXSB8IE0xLT5wWzFdWzFdW00xLT5uLTFdKSA+IDApOworCisgIG1wbl9tYXRyaXgyMl9tdWwgKE0tPnBbMF1bMF0sIE0tPnBbMF1bMV0sCisJCSAgICBNLT5wWzFdWzBdLCBNLT5wWzFdWzFdLCBNLT5uLAorCQkgICAgTTEtPnBbMF1bMF0sIE0xLT5wWzBdWzFdLAorCQkgICAgTTEtPnBbMV1bMF0sIE0xLT5wWzFdWzFdLCBNMS0+biwgdHApOworCisgIC8qIEluZGV4IG9mIGxhc3QgcG90ZW50aWFsbHkgbm9uLXplcm8gbGltYiwgc2l6ZSBpcyBvbmUgZ3JlYXRlci4gKi8KKyAgbiA9IE0tPm4gKyBNMS0+bjsKKworICBuIC09ICgoTS0+cFswXVswXVtuXSB8IE0tPnBbMF1bMV1bbl0gfCBNLT5wWzFdWzBdW25dIHwgTS0+cFsxXVsxXVtuXSkgPT0gMCk7CisgIG4gLT0gKChNLT5wWzBdWzBdW25dIHwgTS0+cFswXVsxXVtuXSB8IE0tPnBbMV1bMF1bbl0gfCBNLT5wWzFdWzFdW25dKSA9PSAwKTsKKyAgbiAtPSAoKE0tPnBbMF1bMF1bbl0gfCBNLT5wWzBdWzFdW25dIHwgTS0+cFsxXVswXVtuXSB8IE0tPnBbMV1bMV1bbl0pID09IDApOworCisgIEFTU0VSVCAoKE0tPnBbMF1bMF1bbl0gfCBNLT5wWzBdWzFdW25dIHwgTS0+cFsxXVswXVtuXSB8IE0tPnBbMV1bMV1bbl0pID4gMCk7CisKKyAgTS0+biA9IG4gKyAxOworfQorCisvKiBNdWx0aXBsaWVzIHRoZSBsZWFzdCBzaWduaWZpY2FudCBwIGxpbWJzIG9mIChhO2IpIGJ5IE1eLTEuCisgICBUZW1wb3Jhcnkgc3BhY2UgbmVlZGVkOiAyICogKHAgKyBNLT5uKSovCittcF9zaXplX3QKK21wbl9oZ2NkX21hdHJpeF9hZGp1c3QgKGNvbnN0IHN0cnVjdCBoZ2NkX21hdHJpeCAqTSwKKwkJCW1wX3NpemVfdCBuLCBtcF9wdHIgYXAsIG1wX3B0ciBicCwKKwkJCW1wX3NpemVfdCBwLCBtcF9wdHIgdHApCit7CisgIC8qIE1eLTEgKGE7YikgPSAocjExLCAtcjAxOyAtcjEwLCByMDApIChhIDsgYikKKyAgICAgPSAocjExIGEgLSByMDEgYjsgLSByMTAgYSArIHIwMCBiICovCisKKyAgbXBfcHRyIHQwID0gdHA7CisgIG1wX3B0ciB0MSA9IHRwICsgcCArIE0tPm47CisgIG1wX2xpbWJfdCBhaCwgYmg7CisgIG1wX2xpbWJfdCBjeTsKKworICBBU1NFUlQgKHAgKyBNLT5uICA8IG4pOworCisgIC8qIEZpcnN0IGNvbXB1dGUgdGhlIHR3byB2YWx1ZXMgZGVwZW5kaW5nIG9uIGEsIGJlZm9yZSBvdmVyd3JpdGluZyBhICovCisKKyAgaWYgKE0tPm4gPj0gcCkKKyAgICB7CisgICAgICBtcG5fbXVsICh0MCwgTS0+cFsxXVsxXSwgTS0+biwgYXAsIHApOworICAgICAgbXBuX211bCAodDEsIE0tPnBbMV1bMF0sIE0tPm4sIGFwLCBwKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBtcG5fbXVsICh0MCwgYXAsIHAsIE0tPnBbMV1bMV0sIE0tPm4pOworICAgICAgbXBuX211bCAodDEsIGFwLCBwLCBNLT5wWzFdWzBdLCBNLT5uKTsKKyAgICB9CisKKyAgLyogVXBkYXRlIGEgKi8KKyAgTVBOX0NPUFkgKGFwLCB0MCwgcCk7CisgIGFoID0gbXBuX2FkZCAoYXAgKyBwLCBhcCArIHAsIG4gLSBwLCB0MCArIHAsIE0tPm4pOworCisgIGlmIChNLT5uID49IHApCisgICAgbXBuX211bCAodDAsIE0tPnBbMF1bMV0sIE0tPm4sIGJwLCBwKTsKKyAgZWxzZQorICAgIG1wbl9tdWwgKHQwLCBicCwgcCwgTS0+cFswXVsxXSwgTS0+bik7CisKKyAgY3kgPSBtcG5fc3ViIChhcCwgYXAsIG4sIHQwLCBwICsgTS0+bik7CisgIEFTU0VSVCAoY3kgPD0gYWgpOworICBhaCAtPSBjeTsKKworICAvKiBVcGRhdGUgYiAqLworICBpZiAoTS0+biA+PSBwKQorICAgIG1wbl9tdWwgKHQwLCBNLT5wWzBdWzBdLCBNLT5uLCBicCwgcCk7CisgIGVsc2UKKyAgICBtcG5fbXVsICh0MCwgYnAsIHAsIE0tPnBbMF1bMF0sIE0tPm4pOworCisgIE1QTl9DT1BZIChicCwgdDAsIHApOworICBiaCA9IG1wbl9hZGQgKGJwICsgcCwgYnAgKyBwLCBuIC0gcCwgdDAgKyBwLCBNLT5uKTsKKyAgY3kgPSBtcG5fc3ViIChicCwgYnAsIG4sIHQxLCBwICsgTS0+bik7CisgIEFTU0VSVCAoY3kgPD0gYmgpOworICBiaCAtPSBjeTsKKworICBpZiAoYWggPiAwIHx8IGJoID4gMCkKKyAgICB7CisgICAgICBhcFtuXSA9IGFoOworICAgICAgYnBbbl0gPSBiaDsKKyAgICAgIG4rKzsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBUaGUgc3VidHJhY3Rpb24gY2FuIHJlZHVjZSB0aGUgc2l6ZSBieSBhdCBtb3N0IG9uZSBsaW1iLiAqLworICAgICAgaWYgKGFwW24tMV0gPT0gMCAmJiBicFtuLTFdID09IDApCisJbi0tOworICAgIH0KKyAgQVNTRVJUIChhcFtuLTFdID4gMCB8fCBicFtuLTFdID4gMCk7CisgIHJldHVybiBuOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2hnY2RfcmVkdWNlLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvaGdjZF9yZWR1Y2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWVlNzdkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2hnY2RfcmVkdWNlLmMKQEAgLTAsMCArMSwyNDIgQEAKKy8qIGhnY2RfcmVkdWNlLmMuCisKKyAgIFRIRSBGVU5DVElPTlMgSU4gVEhJUyBGSUxFIEFSRSBJTlRFUk5BTCBXSVRIIE1VVEFCTEUgSU5URVJGQUNFUy4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggVEhFTSBUSFJPVUdIIERPQ1VNRU5URUQgSU5URVJGQUNFUy4gIElOIEZBQ1QsIElUIElTIEFMTU9TVAorICAgR1VBUkFOVEVFRCBUSEFUIFRIRVknTEwgQ0hBTkdFIE9SIERJU0FQUEVBUiBJTiBBIEZVVFVSRSBHTlUgTVAgUkVMRUFTRS4KKworQ29weXJpZ2h0IDIwMTEsIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorI2luY2x1ZGUgImxvbmdsb25nLmgiCisKKy8qIENvbXB1dGVzIFIgLT0gQSAqIEIuIFJlc3VsdCBtdXN0IGJlIG5vbi1uZWdhdGl2ZS4gTm9ybWFsaXplZCBkb3duCisgICB0byBzaXplIGFuLCBhbmQgcmVzdWx0aW5nIHNpemUgaXMgcmV0dXJuZWQuICovCitzdGF0aWMgbXBfc2l6ZV90CitzdWJtdWwgKG1wX3B0ciBycCwgbXBfc2l6ZV90IHJuLAorCW1wX3NyY3B0ciBhcCwgbXBfc2l6ZV90IGFuLCBtcF9zcmNwdHIgYnAsIG1wX3NpemVfdCBibikKK3sKKyAgbXBfcHRyIHRwOworICBUTVBfREVDTDsKKworICBBU1NFUlQgKGJuID4gMCk7CisgIEFTU0VSVCAoYW4gPj0gYm4pOworICBBU1NFUlQgKHJuID49IGFuKTsKKyAgQVNTRVJUIChhbiArIGJuIDw9IHJuICsgMSk7CisKKyAgVE1QX01BUks7CisgIHRwID0gVE1QX0FMTE9DX0xJTUJTIChhbiArIGJuKTsKKworICBtcG5fbXVsICh0cCwgYXAsIGFuLCBicCwgYm4pOworICBBU1NFUlQgKChhbiArIGJuIDw9IHJuKSB8fCAodHBbcm5dID09IDApKTsKKyAgQVNTRVJUX05PQ0FSUlkgKG1wbl9zdWIgKHJwLCBycCwgcm4sIHRwLCBhbiArIGJuIC0gKGFuICsgYm4gPiBybikpKTsKKyAgVE1QX0ZSRUU7CisKKyAgd2hpbGUgKHJuID4gYW4gJiYgKHJwW3JuLTFdID09IDApKQorICAgIHJuLS07CisKKyAgcmV0dXJuIHJuOworfQorCisvKiBDb21wdXRlcyAoYSwgYikgIDwtLSAgTV57LTF9IChhOyBiKSAqLworLyogRklYTUU6CisgICAgeCBUYWtlIHNjcmF0Y2ggcGFyYW1ldGVyLCBhbmQgZmlndXJlIG91dCBzY3JhdGNoIG5lZWQuCisKKyAgICB4IFVzZSBzb21lIGZhbGxiYWNrIGZvciBzbWFsbCBNLT5uPworKi8KK3N0YXRpYyBtcF9zaXplX3QKK2hnY2RfbWF0cml4X2FwcGx5IChjb25zdCBzdHJ1Y3QgaGdjZF9tYXRyaXggKk0sCisJCSAgIG1wX3B0ciBhcCwgbXBfcHRyIGJwLAorCQkgICBtcF9zaXplX3QgbikKK3sKKyAgbXBfc2l6ZV90IGFuLCBibiwgdW4sIHZuLCBubjsKKyAgbXBfc2l6ZV90IG1uWzJdWzJdOworICBtcF9zaXplX3QgbW9kbjsKKyAgbXBfcHRyIHRwLCBzcCwgc2NyYXRjaDsKKyAgbXBfbGltYl90IGN5OworICB1bnNpZ25lZCBpLCBqOworCisgIFRNUF9ERUNMOworCisgIEFTU0VSVCAoIChhcFtuLTFdIHwgYnBbbi0xXSkgPiAwKTsKKworICBhbiA9IG47CisgIE1QTl9OT1JNQUxJWkUgKGFwLCBhbik7CisgIGJuID0gbjsKKyAgTVBOX05PUk1BTElaRSAoYnAsIGJuKTsKKworICBmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorICAgIGZvciAoaiA9IDA7IGogPCAyOyBqKyspCisgICAgICB7CisJbXBfc2l6ZV90IGs7CisJayA9IE0tPm47CisJTVBOX05PUk1BTElaRSAoTS0+cFtpXVtqXSwgayk7CisJbW5baV1bal0gPSBrOworICAgICAgfQorCisgIEFTU0VSVCAobW5bMF1bMF0gPiAwKTsKKyAgQVNTRVJUIChtblsxXVsxXSA+IDApOworICBBU1NFUlQgKCAobW5bMF1bMV0gfCBtblsxXVswXSkgPiAwKTsKKworICBUTVBfTUFSSzsKKworICBpZiAobW5bMF1bMV0gPT0gMCkKKyAgICB7CisgICAgICAvKiBBIHVuY2hhbmdlZCwgTSA9ICgxLCAwOyBxLCAxKSAqLworICAgICAgQVNTRVJUIChtblswXVswXSA9PSAxKTsKKyAgICAgIEFTU0VSVCAoTS0+cFswXVswXVswXSA9PSAxKTsKKyAgICAgIEFTU0VSVCAobW5bMV1bMV0gPT0gMSk7CisgICAgICBBU1NFUlQgKE0tPnBbMV1bMV1bMF0gPT0gMSk7CisKKyAgICAgIC8qIFB1dCBCIDwtLSBCIC0gcSBBICovCisgICAgICBubiA9IHN1Ym11bCAoYnAsIGJuLCBhcCwgYW4sIE0tPnBbMV1bMF0sIG1uWzFdWzBdKTsKKyAgICB9CisgIGVsc2UgaWYgKG1uWzFdWzBdID09IDApCisgICAgeworICAgICAgLyogQiB1bmNoYW5nZWQsIE0gPSAoMSwgcTsgMCwgMSkgKi8KKyAgICAgIEFTU0VSVCAobW5bMF1bMF0gPT0gMSk7CisgICAgICBBU1NFUlQgKE0tPnBbMF1bMF1bMF0gPT0gMSk7CisgICAgICBBU1NFUlQgKG1uWzFdWzFdID09IDEpOworICAgICAgQVNTRVJUIChNLT5wWzFdWzFdWzBdID09IDEpOworCisgICAgICAvKiBQdXQgQSAgPC0tIEEgLSBxICogQiAqLworICAgICAgbm4gPSBzdWJtdWwgKGFwLCBhbiwgYnAsIGJuLCBNLT5wWzBdWzFdLCBtblswXVsxXSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogQSA9IG0wMCBhICsgbTAxIGIgID09PiBhIDw9IEEgLyBtMDAsIGIgPD0gQSAvIG0wMS4KKwkgQiA9IG0xMCBhICsgbTExIGIgID09PiBhIDw9IEIgLyBtMTAsIGIgPD0gQiAvIG0xMS4gKi8KKyAgICAgIHVuID0gTUlOIChhbiAtIG1uWzBdWzBdLCBibiAtIG1uWzFdWzBdKSArIDE7CisgICAgICB2biA9IE1JTiAoYW4gLSBtblswXVsxXSwgYm4gLSBtblsxXVsxXSkgKyAxOworCisgICAgICBubiA9IE1BWCAodW4sIHZuKTsKKyAgICAgIC8qIEluIHRoZSByYW5nZSBvZiBpbnRlcmVzdCwgbXVsbW9kX2JubTEgc2hvdWxkIGFsd2F5cyBiZWF0IG11bGxvLiAqLworICAgICAgbW9kbiA9IG1wbl9tdWxtb2RfYm5tMV9uZXh0X3NpemUgKG5uICsgMSk7CisKKyAgICAgIFRNUF9BTExPQ19MSU1CU18zICh0cCwgbW9kbiwKKwkJCSBzcCwgbW9kbiwKKwkJCSBzY3JhdGNoLCBtcG5fbXVsbW9kX2JubTFfaXRjaCAobW9kbiwgbW9kbiwgTS0+bikpOworCisgICAgICBBU1NFUlQgKG4gPD0gMiptb2RuKTsKKworICAgICAgaWYgKG4gPiBtb2RuKQorCXsKKwkgIGN5ID0gbXBuX2FkZCAoYXAsIGFwLCBtb2RuLCBhcCArIG1vZG4sIG4gLSBtb2RuKTsKKwkgIE1QTl9JTkNSX1UgKGFwLCBtb2RuLCBjeSk7CisKKwkgIGN5ID0gbXBuX2FkZCAoYnAsIGJwLCBtb2RuLCBicCArIG1vZG4sIG4gLSBtb2RuKTsKKwkgIE1QTl9JTkNSX1UgKGJwLCBtb2RuLCBjeSk7CisKKwkgIG4gPSBtb2RuOworCX0KKworICAgICAgbXBuX211bG1vZF9ibm0xICh0cCwgbW9kbiwgYXAsIG4sIE0tPnBbMV1bMV0sIG1uWzFdWzFdLCBzY3JhdGNoKTsKKyAgICAgIG1wbl9tdWxtb2RfYm5tMSAoc3AsIG1vZG4sIGJwLCBuLCBNLT5wWzBdWzFdLCBtblswXVsxXSwgc2NyYXRjaCk7CisKKyAgICAgIC8qIEZJWE1FOiBIYW5kbGUgdGhlIHNtYWxsIG4gY2FzZSBpbiBzb21lIGJldHRlciB3YXkuICovCisgICAgICBpZiAobiArIG1uWzFdWzFdIDwgbW9kbikKKwlNUE5fWkVSTyAodHAgKyBuICsgbW5bMV1bMV0sIG1vZG4gLSBuIC0gbW5bMV1bMV0pOworICAgICAgaWYgKG4gKyBtblswXVsxXSA8IG1vZG4pCisJTVBOX1pFUk8gKHNwICsgbiArIG1uWzBdWzFdLCBtb2RuIC0gbiAtIG1uWzBdWzFdKTsKKworICAgICAgY3kgPSBtcG5fc3ViX24gKHRwLCB0cCwgc3AsIG1vZG4pOworICAgICAgTVBOX0RFQ1JfVSAodHAsIG1vZG4sIGN5KTsKKworICAgICAgQVNTRVJUIChtcG5femVyb19wICh0cCArIG5uLCBtb2RuIC0gbm4pKTsKKworICAgICAgbXBuX211bG1vZF9ibm0xIChzcCwgbW9kbiwgYXAsIG4sIE0tPnBbMV1bMF0sIG1uWzFdWzBdLCBzY3JhdGNoKTsKKyAgICAgIE1QTl9DT1BZIChhcCwgdHAsIG5uKTsKKyAgICAgIG1wbl9tdWxtb2RfYm5tMSAodHAsIG1vZG4sIGJwLCBuLCBNLT5wWzBdWzBdLCBtblswXVswXSwgc2NyYXRjaCk7CisKKyAgICAgIGlmIChuICsgbW5bMV1bMF0gPCBtb2RuKQorCU1QTl9aRVJPIChzcCArIG4gKyBtblsxXVswXSwgbW9kbiAtIG4gLSBtblsxXVswXSk7CisgICAgICBpZiAobiArIG1uWzBdWzBdIDwgbW9kbikKKwlNUE5fWkVSTyAodHAgKyBuICsgbW5bMF1bMF0sIG1vZG4gLSBuIC0gbW5bMF1bMF0pOworCisgICAgICBjeSA9IG1wbl9zdWJfbiAodHAsIHRwLCBzcCwgbW9kbik7CisgICAgICBNUE5fREVDUl9VICh0cCwgbW9kbiwgY3kpOworCisgICAgICBBU1NFUlQgKG1wbl96ZXJvX3AgKHRwICsgbm4sIG1vZG4gLSBubikpOworICAgICAgTVBOX0NPUFkgKGJwLCB0cCwgbm4pOworCisgICAgICB3aGlsZSAoIChhcFtubi0xXSB8IGJwW25uLTFdKSA9PSAwKQorCXsKKwkgIG5uLS07CisJICBBU1NFUlQgKG5uID4gMCk7CisJfQorICAgIH0KKyAgVE1QX0ZSRUU7CisKKyAgcmV0dXJuIG5uOworfQorCittcF9zaXplX3QKK21wbl9oZ2NkX3JlZHVjZV9pdGNoIChtcF9zaXplX3QgbiwgbXBfc2l6ZV90IHApCit7CisgIG1wX3NpemVfdCBpdGNoOworICBpZiAoQkVMT1dfVEhSRVNIT0xEIChuLCBIR0NEX1JFRFVDRV9USFJFU0hPTEQpKQorICAgIHsKKyAgICAgIGl0Y2ggPSBtcG5faGdjZF9pdGNoIChuLXApOworCisgICAgICAvKiBGb3IgYXJiaXRyYXJ5IHAsIHRoZSBzdG9yYWdlIGZvciBfYWRqdXN0IGlzIDIqKHAgKyBNLT5uKSA9IDIgKgorCSAocCArIGNlaWwoKG4tcCkvMikgLSAxIDw9IG4gKyBwIC0gMSAqLworICAgICAgaWYgKGl0Y2ggPCBuICsgcCAtIDEpCisJaXRjaCA9IG4gKyBwIC0gMTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpdGNoID0gMioobi1wKSArIG1wbl9oZ2NkX2l0Y2ggKG4tcCk7CisgICAgICAvKiBDdXJyZW50bHksIGhnY2RfbWF0cml4X2FwcGx5IGFsbG9jYXRlcyBpdHMgb3duIHN0b3JhZ2UuICovCisgICAgfQorICByZXR1cm4gaXRjaDsKK30KKworLyogRklYTUU6IERvY3VtZW50IHN0b3JhZ2UgbmVlZC4gKi8KK21wX3NpemVfdAorbXBuX2hnY2RfcmVkdWNlIChzdHJ1Y3QgaGdjZF9tYXRyaXggKk0sCisJCSBtcF9wdHIgYXAsIG1wX3B0ciBicCwgbXBfc2l6ZV90IG4sIG1wX3NpemVfdCBwLAorCQkgbXBfcHRyIHRwKQoreworICBtcF9zaXplX3Qgbm47CisgIGlmIChCRUxPV19USFJFU0hPTEQgKG4sIEhHQ0RfUkVEVUNFX1RIUkVTSE9MRCkpCisgICAgeworICAgICAgbm4gPSBtcG5faGdjZCAoYXAgKyBwLCBicCArIHAsIG4gLSBwLCBNLCB0cCk7CisgICAgICBpZiAobm4gPiAwKQorCS8qIE5lZWRzIDIqKHAgKyBNLT5uKSA8PSAyKihmbG9vcihuLzIpICsgY2VpbChuLzIpIC0gMSkKKwkgICA9IDIgKG4gLSAxKSAqLworCXJldHVybiBtcG5faGdjZF9tYXRyaXhfYWRqdXN0IChNLCBwICsgbm4sIGFwLCBicCwgcCwgdHApOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIE1QTl9DT1BZICh0cCwgYXAgKyBwLCBuIC0gcCk7CisgICAgICBNUE5fQ09QWSAodHAgKyBuIC0gcCwgYnAgKyBwLCBuIC0gcCk7CisgICAgICBpZiAobXBuX2hnY2RfYXBwciAodHAsIHRwICsgbiAtIHAsIG4gLSBwLCBNLCB0cCArIDIqKG4tcCkpKQorCXJldHVybiBoZ2NkX21hdHJpeF9hcHBseSAoTSwgYXAsIGJwLCBuKTsKKyAgICB9CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2hnY2Rfc3RlcC5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2hnY2Rfc3RlcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NzhhODgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvaGdjZF9zdGVwLmMKQEAgLTAsMCArMSwxMjcgQEAKKy8qIGhnY2Rfc3RlcC5jLgorCisgICBUSEUgRlVOQ1RJT05TIElOIFRISVMgRklMRSBBUkUgSU5URVJOQUwgV0lUSCBNVVRBQkxFIElOVEVSRkFDRVMuICBJVCBJUyBPTkxZCisgICBTQUZFIFRPIFJFQUNIIFRIRU0gVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuICBJTiBGQUNULCBJVCBJUyBBTE1PU1QKKyAgIEdVQVJBTlRFRUQgVEhBVCBUSEVZJ0xMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR05VIE1QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAyMDAzLTIwMDUsIDIwMDgsIDIwMTEsIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorI2luY2x1ZGUgImxvbmdsb25nLmgiCisKKworc3RhdGljIHZvaWQKK2hnY2RfaG9vayAodm9pZCAqcCwgbXBfc3JjcHRyIGdwLCBtcF9zaXplX3QgZ24sCisJICAgbXBfc3JjcHRyIHFwLCBtcF9zaXplX3QgcW4sIGludCBkKQoreworICBBU1NFUlQgKCFncCk7CisgIEFTU0VSVCAoZCA+PSAwKTsKKyAgQVNTRVJUIChkIDw9IDEpOworCisgIE1QTl9OT1JNQUxJWkUgKHFwLCBxbik7CisgIGlmIChxbiA+IDApCisgICAgeworICAgICAgc3RydWN0IGhnY2RfbWF0cml4ICpNID0gKHN0cnVjdCBoZ2NkX21hdHJpeCAqKSBwOworICAgICAgLyogTk9URVM6IFRoaXMgaXMgYSBiaXQgdWdseS4gQSB0cCBhcmVhIGlzIHBhc3NlZCB0bworCSBnY2Rfc3ViZGl2X3N0ZXAsIHdoaWNoIHN0b3JlcyBxIGF0IHRoZSBzdGFydCBvZiB0aGF0IGFyZWEuIFdlCisJIG5vdyB1c2UgdGhlIHJlc3QuICovCisgICAgICBtcF9wdHIgdHAgPSAobXBfcHRyKSBxcCArIHFuOworICAgICAgbXBuX2hnY2RfbWF0cml4X3VwZGF0ZV9xIChNLCBxcCwgcW4sIGQsIHRwKTsKKyAgICB9Cit9CisKKy8qIFBlcmZvcm0gYSBmZXcgc3RlcHMsIHVzaW5nIHNvbWUgb2YgbXBuX2hnY2QyLCBzdWJ0cmFjdGlvbiBhbmQKKyAgIGRpdmlzaW9uLiBSZWR1Y2VzIHRoZSBzaXplIGJ5IGFsbW9zdCBvbmUgbGltYiBvciBtb3JlLCBidXQgbmV2ZXIKKyAgIGJlbG93IHRoZSBnaXZlbiBzaXplIHMuIFJldHVybiBuZXcgc2l6ZSBmb3IgYSBhbmQgYiwgb3IgMCBpZiBubworICAgbW9yZSBzdGVwcyBhcmUgcG9zc2libGUuCisKKyAgIElmIGhnY2QyIHN1Y2NlZWRzLCBuZWVkcyB0ZW1wb3Jhcnkgc3BhY2UgZm9yIGhnY2RfbWF0cml4X211bF8xLCBNLT5uCisgICBsaW1icywgYW5kIGhnY2RfbXVsX21hdHJpeDFfaW52ZXJzZV92ZWN0b3IsIG4gbGltYnMuIElmIGhnY2QyCisgICBmYWlscywgbmVlZHMgc3BhY2UgZm9yIHRoZSBxdW90aWVudCwgcW4gPD0gbiAtIHMgbGltYnMsIGZvciBhbmQKKyAgIGhnY2RfbWF0cml4X3VwZGF0ZV9xLCBxbiArIChzaXplIG9mIHRoZSBhcHByb3ByaWF0ZSBjb2x1bW4gb2YgTSkgPD0KKyAgIChyZXN1bHRpbmcgc2l6ZSBvZiBNKSArIDEuCisKKyAgIElmIE4gaXMgdGhlIGlucHV0IHNpemUgdG8gdGhlIGNhbGxpbmcgaGdjZCwgdGhlbiBzID0gZmxvb3IoTi8yKSArCisgICAxLCBNLT5uIDwgTiwgcW4gKyBwcm9kdWN0IHNpemUgPD0gbiAtIHMgKyBuIC0gcyArIDEgPSAyIChuIC0gcykgKyAxCisgICA8PSBOLgorKi8KKworbXBfc2l6ZV90CittcG5faGdjZF9zdGVwIChtcF9zaXplX3QgbiwgbXBfcHRyIGFwLCBtcF9wdHIgYnAsIG1wX3NpemVfdCBzLAorCSAgICAgICBzdHJ1Y3QgaGdjZF9tYXRyaXggKk0sIG1wX3B0ciB0cCkKK3sKKyAgc3RydWN0IGhnY2RfbWF0cml4MSBNMTsKKyAgbXBfbGltYl90IG1hc2s7CisgIG1wX2xpbWJfdCBhaCwgYWwsIGJoLCBibDsKKworICBBU1NFUlQgKG4gPiBzKTsKKworICBtYXNrID0gYXBbbi0xXSB8IGJwW24tMV07CisgIEFTU0VSVCAobWFzayA+IDApOworCisgIGlmIChuID09IHMgKyAxKQorICAgIHsKKyAgICAgIGlmIChtYXNrIDwgNCkKKwlnb3RvIHN1YnRyYWN0OworCisgICAgICBhaCA9IGFwW24tMV07IGFsID0gYXBbbi0yXTsKKyAgICAgIGJoID0gYnBbbi0xXTsgYmwgPSBicFtuLTJdOworICAgIH0KKyAgZWxzZSBpZiAobWFzayAmIEdNUF9OVU1CX0hJR0hCSVQpCisgICAgeworICAgICAgYWggPSBhcFtuLTFdOyBhbCA9IGFwW24tMl07CisgICAgICBiaCA9IGJwW24tMV07IGJsID0gYnBbbi0yXTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpbnQgc2hpZnQ7CisKKyAgICAgIGNvdW50X2xlYWRpbmdfemVyb3MgKHNoaWZ0LCBtYXNrKTsKKyAgICAgIGFoID0gTVBOX0VYVFJBQ1RfTlVNQiAoc2hpZnQsIGFwW24tMV0sIGFwW24tMl0pOworICAgICAgYWwgPSBNUE5fRVhUUkFDVF9OVU1CIChzaGlmdCwgYXBbbi0yXSwgYXBbbi0zXSk7CisgICAgICBiaCA9IE1QTl9FWFRSQUNUX05VTUIgKHNoaWZ0LCBicFtuLTFdLCBicFtuLTJdKTsKKyAgICAgIGJsID0gTVBOX0VYVFJBQ1RfTlVNQiAoc2hpZnQsIGJwW24tMl0sIGJwW24tM10pOworICAgIH0KKworICAvKiBUcnkgYW4gbXBuX2hnY2QyIHN0ZXAgKi8KKyAgaWYgKG1wbl9oZ2NkMiAoYWgsIGFsLCBiaCwgYmwsICZNMSkpCisgICAgeworICAgICAgLyogTXVsdGlwbHkgTSA8LSBNICogTTEgKi8KKyAgICAgIG1wbl9oZ2NkX21hdHJpeF9tdWxfMSAoTSwgJk0xLCB0cCk7CisKKyAgICAgIC8qIENhbid0IHN3YXAgaW5wdXRzLCBzbyB3ZSBuZWVkIHRvIGNvcHkuICovCisgICAgICBNUE5fQ09QWSAodHAsIGFwLCBuKTsKKyAgICAgIC8qIE11bHRpcGx5IE0xXnstMX0gKGE7YikgKi8KKyAgICAgIHJldHVybiBtcG5fbWF0cml4MjJfbXVsMV9pbnZlcnNlX3ZlY3RvciAoJk0xLCBhcCwgdHAsIGJwLCBuKTsKKyAgICB9CisKKyBzdWJ0cmFjdDoKKworICByZXR1cm4gbXBuX2djZF9zdWJkaXZfc3RlcCAoYXAsIGJwLCBuLCBzLCBoZ2NkX2hvb2ssIE0sIHRwKTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9pbnZlcnQuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9pbnZlcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTdmZjJiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2ludmVydC5jCkBAIC0wLDAgKzEsODYgQEAKKy8qIGludmVydC5jIC0tIENvbXB1dGUgZmxvb3IoKEJeezJufS0xKS9VKSAtIEJebi4KKworICAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IE1hcmNvIEJvZHJhdG8uCisKKyAgIFRIRSBGVU5DVElPTlMgSU4gVEhJUyBGSUxFIEFSRSBJTlRFUk5BTCBXSVRIIE1VVEFCTEUgSU5URVJGQUNFUy4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggVEhFTSBUSFJPVUdIIERPQ1VNRU5URUQgSU5URVJGQUNFUy4gIElOIEZBQ1QsIElUIElTIEFMTU9TVAorICAgR1VBUkFOVEVFRCBUSEFUIFRIRVkgV0lMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEgRlVUVVJFIEdNUCBSRUxFQVNFLgorCitDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDksIDIwMTAsIDIwMTIsIDIwMTQtMjAxNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisjaW5jbHVkZSAibG9uZ2xvbmcuaCIKKwordm9pZAorbXBuX2ludmVydCAobXBfcHRyIGlwLCBtcF9zcmNwdHIgZHAsIG1wX3NpemVfdCBuLCBtcF9wdHIgc2NyYXRjaCkKK3sKKyAgQVNTRVJUIChuID4gMCk7CisgIEFTU0VSVCAoZHBbbi0xXSAmIEdNUF9OVU1CX0hJR0hCSVQpOworICBBU1NFUlQgKCEgTVBOX09WRVJMQVBfUCAoaXAsIG4sIGRwLCBuKSk7CisgIEFTU0VSVCAoISBNUE5fT1ZFUkxBUF9QIChpcCwgbiwgc2NyYXRjaCwgbXBuX2ludmVydGFwcHJfaXRjaChuKSkpOworICBBU1NFUlQgKCEgTVBOX09WRVJMQVBfUCAoZHAsIG4sIHNjcmF0Y2gsIG1wbl9pbnZlcnRhcHByX2l0Y2gobikpKTsKKworICBpZiAobiA9PSAxKQorICAgIGludmVydF9saW1iICgqaXAsICpkcCk7CisgIGVsc2UgaWYgKEJFTE9XX1RIUkVTSE9MRCAobiwgSU5WX0FQUFJfVEhSRVNIT0xEKSkKKyAgICB7CisJLyogTWF4aW11bSBzY3JhdGNoIG5lZWRlZCBieSB0aGlzIGJyYW5jaDogMipuICovCisJbXBfcHRyIHhwOworCisJeHAgPSBzY3JhdGNoOwkJCQkvKiAyICogbiBsaW1icyAqLworCS8qIG4gPiAxIGhlcmUgKi8KKwlNUE5fRklMTCAoeHAsIG4sIEdNUF9OVU1CX01BWCk7CisJbXBuX2NvbSAoeHAgKyBuLCBkcCwgbik7CisJaWYgKG4gPT0gMikgeworCSAgbXBuX2RpdnJlbV8yIChpcCwgMCwgeHAsIDQsIGRwKTsKKwl9IGVsc2UgeworCSAgZ21wX3BpMV90IGludjsKKwkgIGludmVydF9waTEgKGludiwgZHBbbi0xXSwgZHBbbi0yXSk7CisJICAvKiBGSVhNRTogc2hvdWxkIHdlIHVzZSBkY3BpMV9kaXZfcSwgZm9yIGJpZyBzaXplcz8gKi8KKwkgIG1wbl9zYnBpMV9kaXZfcSAoaXAsIHhwLCAyICogbiwgZHAsIG4sIGludi5pbnYzMik7CisJfQorICAgIH0KKyAgZWxzZSB7IC8qIFVzZSBhcHByb3hpbWF0ZWQgaW52ZXJzZTsgY29ycmVjdCB0aGUgcmVzdWx0IGlmIG5lZWRlZC4gKi8KKyAgICAgIG1wX2xpbWJfdCBlOyAvKiBUaGUgcG9zc2libGUgZXJyb3IgaW4gdGhlIGFwcHJveGltYXRlIGludmVyc2UgKi8KKworICAgICAgQVNTRVJUICggbXBuX2ludmVydF9pdGNoIChuKSA+PSBtcG5faW52ZXJ0YXBwcl9pdGNoIChuKSApOworICAgICAgZSA9IG1wbl9uaV9pbnZlcnRhcHByIChpcCwgZHAsIG4sIHNjcmF0Y2gpOworCisgICAgICBpZiAoVU5MSUtFTFkgKGUpKSB7IC8qIEFzc3VtZSB0aGUgZXJyb3IgY2FuIG9ubHkgYmUgIjAiIChubyBlcnJvcikgb3IgIjEiLiAqLworCS8qIENvZGUgdG8gZGV0ZWN0IGFuZCBjb3JyZWN0IHRoZSAib2ZmIGJ5IG9uZSIgYXBwcm94aW1hdGlvbi4gKi8KKwltcG5fbXVsX24gKHNjcmF0Y2gsIGlwLCBkcCwgbik7CisJZSA9IG1wbl9hZGRfbiAoc2NyYXRjaCwgc2NyYXRjaCwgZHAsIG4pOyAvKiBGSVhNRTogd2Ugb25seSBuZWVkIGUuKi8KKwlpZiAoTElLRUxZKGUpKSAvKiBUaGUgaGlnaCBwYXJ0IGNhbiBub3QgZ2l2ZSBhIGNhcnJ5IGJ5IGl0c2VsZi4gKi8KKwkgIGUgPSBtcG5fYWRkX25jIChzY3JhdGNoICsgbiwgc2NyYXRjaCArIG4sIGRwLCBuLCBlKTsgLyogRklYTUU6ZSAqLworCS8qIElmIHRoZSB2YWx1ZSB3YXMgd3JvbmcgKG5vIGNhcnJ5KSwgY29ycmVjdCBpdCAoaW5jcmVtZW50KS4gKi8KKwllIF49IENOU1RfTElNQiAoMSk7CisJTVBOX0lOQ1JfVSAoaXAsIG4sIGUpOworICAgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvaW52ZXJ0YXBwci5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2ludmVydGFwcHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmU1NTk2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2ludmVydGFwcHIuYwpAQCAtMCwwICsxLDMwMCBAQAorLyogbXBuX2ludmVydGFwcHIgYW5kIGhlbHBlciBmdW5jdGlvbnMuICBDb21wdXRlIEkgc3VjaCB0aGF0CisgICBmbG9vcigoQl57Mm59LTEpL1UgLSAxIDw9IEkgKyBCXm4gPD0gZmxvb3IoKEJeezJufS0xKS9VLgorCisgICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgTWFyY28gQm9kcmF0by4KKworICAgVGhlIGFsZ29yaXRobSB1c2VkIGhlcmUgd2FzIGluc3BpcmVkIGJ5IEFwcHJveGltYXRlUmVjaXByb2NhbCBmcm9tICJNb2Rlcm4KKyAgIENvbXB1dGVyIEFyaXRobWV0aWMiLCBieSBSaWNoYXJkIFAuIEJyZW50IGFuZCBQYXVsIFppbW1lcm1hbm4uICBTcGVjaWFsCisgICB0aGFua3MgdG8gUGF1bCBaaW1tZXJtYW5uIGZvciBoaXMgdmVyeSB2YWx1YWJsZSBzdWdnZXN0aW9ucyBvbiBhbGwgdGhlCisgICB0aGVvcmV0aWNhbCBhc3BlY3RzIGR1cmluZyB0aGUgd29yayBvbiB0aGlzIGNvZGUuCisKKyAgIFRIRSBGVU5DVElPTlMgSU4gVEhJUyBGSUxFIEFSRSBJTlRFUk5BTCBXSVRIIE1VVEFCTEUgSU5URVJGQUNFUy4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggVEhFTSBUSFJPVUdIIERPQ1VNRU5URUQgSU5URVJGQUNFUy4gIElOIEZBQ1QsIElUIElTIEFMTU9TVAorICAgR1VBUkFOVEVFRCBUSEFUIFRIRVkgV0lMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEgRlVUVVJFIEdNUCBSRUxFQVNFLgorCitDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDksIDIwMTAsIDIwMTIsIDIwMTUsIDIwMTYgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKyNpbmNsdWRlICJsb25nbG9uZy5oIgorCisvKiBGSVhNRTogVGhlIGl0ZXJhdGl2ZSB2ZXJzaW9uIHNwbGl0cyB0aGUgb3BlcmFuZCBpbiB0d28gc2xpZ2h0bHkgdW5iYWxhbmNlZAorICAgcGFydHMsIHRoZSB1c2Ugb2YgbG9nXzIgKG9yIGNvdW50aW5nIHRoZSBiaXRzKSB1bmRlcmVzdGltYXRlIHRoZSBtYXhpbXVtCisgICBudW1iZXIgb2YgaXRlcmF0aW9ucy4gICovCisKKyNpZiBUVU5FX1BST0dSQU1fQlVJTEQKKyNkZWZpbmUgTlBPV1MgXAorICgoc2l6ZW9mKG1wX3NpemVfdCkgPiA2ID8gNDggOiA4KnNpemVvZihtcF9zaXplX3QpKSkKKyNkZWZpbmUgTUFZQkVfZGNwaTFfZGl2YXBwciAgIDEKKyNlbHNlCisjZGVmaW5lIE5QT1dTIFwKKyAoKHNpemVvZihtcF9zaXplX3QpID4gNiA/IDQ4IDogOCpzaXplb2YobXBfc2l6ZV90KSkgLSBMT0cyQyAoSU5WX05FV1RPTl9USFJFU0hPTEQpKQorI2RlZmluZSBNQVlCRV9kY3BpMV9kaXZhcHByIFwKKyAgKElOVl9ORVdUT05fVEhSRVNIT0xEIDwgRENfRElWQVBQUl9RX1RIUkVTSE9MRCkKKyNpZiAoSU5WX05FV1RPTl9USFJFU0hPTEQgPiBJTlZfTVVMTU9EX0JOTTFfVEhSRVNIT0xEKSAmJiBcCisgICAgKElOVl9BUFBSX1RIUkVTSE9MRCA+IElOVl9NVUxNT0RfQk5NMV9USFJFU0hPTEQpCisjdW5kZWYgIElOVl9NVUxNT0RfQk5NMV9USFJFU0hPTEQKKyNkZWZpbmUgSU5WX01VTE1PRF9CTk0xX1RIUkVTSE9MRCAwIC8qIGFsd2F5cyB3aGVuIE5ld3RvbiAqLworI2VuZGlmCisjZW5kaWYKKworLyogQWxsIHRoZSB0aHJlZSBmdW5jdGlvbnMgbXBueyxfYmMsX25pfV9pbnZlcnRhcHByIChpcCwgZHAsIG4sIHNjcmF0Y2gpLCB0YWtlCisgICB0aGUgc3RyaWN0bHkgbm9ybWFsaXNlZCB2YWx1ZSB7ZHAsbn0gKGkuZS4sIG1vc3Qgc2lnbmlmaWNhbnQgYml0IG11c3QgYmUgc2V0KQorICAgYXMgYW4gaW5wdXQsIGFuZCBjb21wdXRlIHtpcCxufTogdGhlIGFwcHJveGltYXRlIHJlY2lwcm9jYWwgb2Yge2RwLG59LgorCisgICBMZXQgZSA9IG1wbipfaW52ZXJ0YXBwciAoaXAsIGRwLCBuLCBzY3JhdGNoKSBiZSB0aGUgcmV0dXJuZWQgdmFsdWU7IHRoZQorICAgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIHNhdGlzZmllZCBieSB0aGUgb3V0cHV0OgorICAgICAwIDw9IGUgPD0gMTsKKyAgICAge2RwLG59KihCXm4re2lwLG59KSA8IEJeezJufSA8PSB7ZHAsbn0qKEJebit7aXAsbn0rMStlKSAuCisgICBJLmUuIGU9MCBtZWFucyB0aGF0IHRoZSByZXN1bHQge2lwLG59IGVxdWFscyB0aGUgb25lIGdpdmVuIGJ5IG1wbl9pbnZlcnQuCisJZT0xIG1lYW5zIHRoYXQgdGhlIHJlc3VsdCBfbWF5XyBiZSBvbmUgbGVzcyB0aGFuIGV4cGVjdGVkLgorCisgICBUaGUgX2JjIHZlcnNpb24gcmV0dXJucyBlPTEgbW9zdCBvZiB0aGUgdGltZS4KKyAgIFRoZSBfbmkgdmVyc2lvbiBzaG91bGQgcmV0dXJuIGU9MCBtb3N0IG9mIHRoZSB0aW1lOyBvbmx5IGFib3V0IDElIG9mCisgICBwb3NzaWJsZSByYW5kb20gaW5wdXQgc2hvdWxkIGdpdmUgZT0xLgorCisgICBXaGVuIHRoZSBzdHJpY3QgcmVzdWx0IGlzIG5lZWRlZCwgaS5lLiwgZT0wIGluIHRoZSByZWxhdGlvbiBhYm92ZToKKyAgICAge2RwLG59KihCXm4re2lwLG59KSA8IEJeezJufSA8PSB7ZHAsbn0qKEJebit7aXAsbn0rMSkgOworICAgdGhlIGZ1bmN0aW9uIG1wbl9pbnZlcnQgKGlwLCBkcCwgbiwgc2NyYXRjaCkgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC4gICovCisKKy8qIE1heGltdW0gc2NyYXRjaCBuZWVkZWQgYnkgdGhpcyBicmFuY2ggKGF0IHhwKTogMipuICovCitzdGF0aWMgbXBfbGltYl90CittcG5fYmNfaW52ZXJ0YXBwciAobXBfcHRyIGlwLCBtcF9zcmNwdHIgZHAsIG1wX3NpemVfdCBuLCBtcF9wdHIgeHApCit7CisgIEFTU0VSVCAobiA+IDApOworICBBU1NFUlQgKGRwW24tMV0gJiBHTVBfTlVNQl9ISUdIQklUKTsKKyAgQVNTRVJUICghIE1QTl9PVkVSTEFQX1AgKGlwLCBuLCBkcCwgbikpOworICBBU1NFUlQgKCEgTVBOX09WRVJMQVBfUCAoaXAsIG4sIHhwLCBtcG5faW52ZXJ0YXBwcl9pdGNoKG4pKSk7CisgIEFTU0VSVCAoISBNUE5fT1ZFUkxBUF9QIChkcCwgbiwgeHAsIG1wbl9pbnZlcnRhcHByX2l0Y2gobikpKTsKKworICAvKiBDb21wdXRlIGEgYmFzZSB2YWx1ZSBvZiByIGxpbWJzLiAqLworICBpZiAobiA9PSAxKQorICAgIGludmVydF9saW1iICgqaXAsICpkcCk7CisgIGVsc2UgeworICAgIC8qIG4gPiAxIGhlcmUgKi8KKyAgICBNUE5fRklMTCAoeHAsIG4sIEdNUF9OVU1CX01BWCk7CisgICAgbXBuX2NvbSAoeHAgKyBuLCBkcCwgbik7CisKKyAgICAvKiBOb3cgeHAgY29udGFpbnMgQl4ybiAtIHtkcCxufSpCXm4gLSAxICovCisKKyAgICAvKiBGSVhNRTogaWYgbXBuXypwaTFfZGl2YXBwcl9xIGhhbmRsZXMgbj09MiwgdXNlIGl0ISAqLworICAgIGlmIChuID09IDIpIHsKKyAgICAgIG1wbl9kaXZyZW1fMiAoaXAsIDAsIHhwLCA0LCBkcCk7CisgICAgfSBlbHNlIHsKKyAgICAgIGdtcF9waTFfdCBpbnY7CisgICAgICBpbnZlcnRfcGkxIChpbnYsIGRwW24tMV0sIGRwW24tMl0pOworICAgICAgaWYgKCEgTUFZQkVfZGNwaTFfZGl2YXBwcgorCSAgfHwgQkVMT1dfVEhSRVNIT0xEIChuLCBEQ19ESVZBUFBSX1FfVEhSRVNIT0xEKSkKKwltcG5fc2JwaTFfZGl2YXBwcl9xIChpcCwgeHAsIDIgKiBuLCBkcCwgbiwgaW52LmludjMyKTsKKyAgICAgIGVsc2UKKwltcG5fZGNwaTFfZGl2YXBwcl9xIChpcCwgeHAsIDIgKiBuLCBkcCwgbiwgJmludik7CisgICAgICBNUE5fREVDUl9VKGlwLCBuLCBDTlNUX0xJTUIgKDEpKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworLyogbXBuX25pX2ludmVydGFwcHI6IGNvbXB1dGVzIHRoZSBhcHByb3hpbWF0ZSByZWNpcHJvY2FsIHVzaW5nIE5ld3RvbidzCisgICBpdGVyYXRpb25zIChhdCBsZWFzdCBvbmUpLgorCisgICBJbnNwaXJlZCBieSBBbGdvcml0aG0gIkFwcHJveGltYXRlUmVjaXByb2NhbCIsIHB1Ymxpc2hlZCBpbiAiTW9kZXJuIENvbXB1dGVyCisgICBBcml0aG1ldGljIiBieSBSaWNoYXJkIFAuIEJyZW50IGFuZCBQYXVsIFppbW1lcm1hbm4sIGFsZ29yaXRobSAzLjUsIHBhZ2UgMTIxCisgICBpbiB2ZXJzaW9uIDAuNCBvZiB0aGUgYm9vay4KKworICAgU29tZSBhZGFwdGF0aW9ucyB3ZXJlIGludHJvZHVjZWQsIHRvIGFsbG93IHByb2R1Y3QgbW9kIEJebS0xIGFuZCByZXR1cm4gdGhlCisgICB2YWx1ZSBlLgorCisgICBXZSBpbnRyb2R1Y2VkIGEgY29ycmVjdGlvbiBpbiBzdWNoIGEgd2F5IHRoYXQgInRoZSB2YWx1ZSBvZgorICAgQl57bitofS1UIGNvbXB1dGVkIGF0IHN0ZXAgOCBjYW5ub3QgZXhjZWVkIEJebi0xIiAodGhlIGJvb2sgcmVhZHMKKyAgICIyQl5uLTEiKS4KKworICAgTWF4aW11bSBzY3JhdGNoIG5lZWRlZCBieSB0aGlzIGJyYW5jaCA8PSAyKm4sIGJ1dCBoYXZlIHRvIGZpdCAzKnJuCisgICBpbiB0aGUgc2NyYXRjaCwgaS5lLiAzKnJuIDw9IDIqbjogd2UgcmVxdWlyZSBuPjQuCisKKyAgIFdlIHVzZSBhIHdyYXBwZWQgcHJvZHVjdCBtb2R1bG8gQl5tLTEuICBOT1RFOiBpcyB0aGVyZSBhbnkgbm9ybWFsaXNhdGlvbgorICAgcHJvYmxlbSBmb3IgdGhlIFswXSBjbGFzcz8gIEl0IHNob3VsZG4ndDogd2UgY29tcHV0ZSAyKnxBKlhfaCAtIEJee24raH18IDwKKyAgIEJebS0xLiAgV2UgbWF5IGdldCBbMF0gaWYgYW5kIG9ubHkgaWYgd2UgZ2V0IEFYX2ggPSBCXntuK2h9LiAgVGhpcyBjYW4KKyAgIGhhcHBlbiBvbmx5IGlmIEE9Ql57bn0vMiwgYnV0IHRoaXMgaW1wbGllcyBYX2ggPSBCXntofSoyLTEgaS5lLiwgQVhfaCA9CisgICBCXntuK2h9IC0gQSwgdGhlbiB3ZSBnZXQgaW50byB0aGUgIm5lZ2F0aXZlIiBicmFuY2gsIHdoZXJlIFhfaCBpcyBub3QKKyAgIGluY3JlbWVudGVkIChiZWNhdXNlIEEgPCBCXm4pLgorCisgICBGSVhNRTogdGhlIHNjcmF0Y2ggZm9yIG11bG1vZF9ibm0xIGRvZXMgbm90IGN1cnJlbnRseSBmaXQgaW4gdGhlIHNjcmF0Y2gsIGl0CisgICBpcyBhbGxvY2F0ZWQgYXBhcnQuCisgKi8KKworbXBfbGltYl90CittcG5fbmlfaW52ZXJ0YXBwciAobXBfcHRyIGlwLCBtcF9zcmNwdHIgZHAsIG1wX3NpemVfdCBuLCBtcF9wdHIgc2NyYXRjaCkKK3sKKyAgbXBfbGltYl90IGN5OworICBtcF9zaXplX3Qgcm4sIG1uOworICBtcF9zaXplX3Qgc2l6ZXNbTlBPV1NdLCAqc2l6cDsKKyAgbXBfcHRyIHRwOworICBUTVBfREVDTDsKKyNkZWZpbmUgeHAgc2NyYXRjaAorCisgIEFTU0VSVCAobiA+IDQpOworICBBU1NFUlQgKGRwW24tMV0gJiBHTVBfTlVNQl9ISUdIQklUKTsKKyAgQVNTRVJUICghIE1QTl9PVkVSTEFQX1AgKGlwLCBuLCBkcCwgbikpOworICBBU1NFUlQgKCEgTVBOX09WRVJMQVBfUCAoaXAsIG4sIHNjcmF0Y2gsIG1wbl9pbnZlcnRhcHByX2l0Y2gobikpKTsKKyAgQVNTRVJUICghIE1QTl9PVkVSTEFQX1AgKGRwLCBuLCBzY3JhdGNoLCBtcG5faW52ZXJ0YXBwcl9pdGNoKG4pKSk7CisKKyAgLyogQ29tcHV0ZSB0aGUgY29tcHV0YXRpb24gcHJlY2lzaW9ucyBmcm9tIGhpZ2hlc3QgdG8gbG93ZXN0LCBsZWF2aW5nIHRoZQorICAgICBiYXNlIGNhc2Ugc2l6ZSBpbiAncm4nLiAgKi8KKyAgc2l6cCA9IHNpemVzOworICBybiA9IG47CisgIGRvIHsKKyAgICAqc2l6cCA9IHJuOworICAgIHJuID0gKHJuID4+IDEpICsgMTsKKyAgICArK3NpenA7CisgIH0gd2hpbGUgKEFCT1ZFX1RIUkVTSE9MRCAocm4sIElOVl9ORVdUT05fVEhSRVNIT0xEKSk7CisKKyAgLyogV2Ugc2VhcmNoIHRoZSBpbnZlcnNlIG9mIDAue2RwLG59LCB3ZSBjb21wdXRlIGl0IGFzIDEue2lwLG59ICovCisgIGRwICs9IG47CisgIGlwICs9IG47CisKKyAgLyogQ29tcHV0ZSBhIGJhc2UgdmFsdWUgb2Ygcm4gbGltYnMuICovCisgIG1wbl9iY19pbnZlcnRhcHByIChpcCAtIHJuLCBkcCAtIHJuLCBybiwgc2NyYXRjaCk7CisKKyAgVE1QX01BUks7CisKKyAgaWYgKEFCT1ZFX1RIUkVTSE9MRCAobiwgSU5WX01VTE1PRF9CTk0xX1RIUkVTSE9MRCkpCisgICAgeworICAgICAgbW4gPSBtcG5fbXVsbW9kX2JubTFfbmV4dF9zaXplIChuICsgMSk7CisgICAgICB0cCA9IFRNUF9BTExPQ19MSU1CUyAobXBuX211bG1vZF9ibm0xX2l0Y2ggKG1uLCBuLCAobiA+PiAxKSArIDEpKTsKKyAgICB9CisgIC8qIFVzZSBOZXd0b24ncyBpdGVyYXRpb25zIHRvIGdldCB0aGUgZGVzaXJlZCBwcmVjaXNpb24uKi8KKworICB3aGlsZSAoMSkgeworICAgIG4gPSAqLS1zaXpwOworICAgIC8qCisgICAgICB2ICAgIG4gIHYKKyAgICAgICstLS0tKy0tKworICAgICAgXiBybiBeCisgICAgKi8KKworICAgIC8qIENvbXB1dGUgaV9qZCAuICovCisgICAgaWYgKEJFTE9XX1RIUkVTSE9MRCAobiwgSU5WX01VTE1PRF9CTk0xX1RIUkVTSE9MRCkKKwl8fCAoKG1uID0gbXBuX211bG1vZF9ibm0xX25leHRfc2l6ZSAobiArIDEpKSA+IChuICsgcm4pKSkgeworICAgICAgLyogRklYTUU6IFdlIGRvIG9ubHkgbmVlZCB7eHAsbisxfSovCisgICAgICBtcG5fbXVsICh4cCwgZHAgLSBuLCBuLCBpcCAtIHJuLCBybik7CisgICAgICBtcG5fYWRkX24gKHhwICsgcm4sIHhwICsgcm4sIGRwIC0gbiwgbiAtIHJuICsgMSk7CisgICAgICBjeSA9IENOU1RfTElNQigxKTsgLyogUmVtZW1iZXIgd2UgdHJ1bmNhdGVkLCBNb2QgQl4obisxKSAqLworICAgICAgLyogV2UgY29tcHV0ZWQgKHRydW5jYXRlZCkge3hwLG4rMX0gPC0gMS57aXAscm59ICogMC57ZHAsbn0gKi8KKyAgICB9IGVsc2UgeyAvKiBVc2UgQl5tbi0xIHdyYXBhcm91bmQgKi8KKyAgICAgIG1wbl9tdWxtb2RfYm5tMSAoeHAsIG1uLCBkcCAtIG4sIG4sIGlwIC0gcm4sIHJuLCB0cCk7CisgICAgICAvKiBXZSBjb21wdXRlZCB7eHAsbW59IDwtIHtpcCxybn0gKiB7ZHAsbn0gbW9kIChCXm1uLTEpICovCisgICAgICAvKiBXZSBrbm93IHRoYXQgMip8aXAqZHAgKyBkcCpCXnJuIC0gQl57cm4rbn18IDwgQl5tbi0xICovCisgICAgICAvKiBBZGQgZHAqQl5ybiBtb2QgKEJebW4tMSkgKi8KKyAgICAgIEFTU0VSVCAobiA+PSBtbiAtIHJuKTsKKyAgICAgIGN5ID0gbXBuX2FkZF9uICh4cCArIHJuLCB4cCArIHJuLCBkcCAtIG4sIG1uIC0gcm4pOworICAgICAgY3kgPSBtcG5fYWRkX25jICh4cCwgeHAsIGRwIC0gKG4gLSAobW4gLSBybikpLCBuIC0gKG1uIC0gcm4pLCBjeSk7CisgICAgICAvKiBTdWJ0cmFjdCBCXntybitufSwgbWF5YmUgb25seSBjb21wZW5zYXRlIHRoZSBjYXJyeSovCisgICAgICB4cFttbl0gPSBDTlNUX0xJTUIgKDEpOyAvKiBzZXQgYSBsaW1pdCBmb3IgREVDUl9VICovCisgICAgICBNUE5fREVDUl9VICh4cCArIHJuICsgbiAtIG1uLCAyICogbW4gKyAxIC0gcm4gLSBuLCBDTlNUX0xJTUIgKDEpIC0gY3kpOworICAgICAgTVBOX0RFQ1JfVSAoeHAsIG1uLCBDTlNUX0xJTUIgKDEpIC0geHBbbW5dKTsgLyogaWYgREVDUl9VIGVyb2RlZCB4cFttbl0gKi8KKyAgICAgIGN5ID0gQ05TVF9MSU1CKDApOyAvKiBSZW1lbWJlciB3ZSBhcmUgd29ya2luZyBNb2QgQl5tbi0xICovCisgICAgfQorCisgICAgaWYgKHhwW25dIDwgQ05TVF9MSU1CICgyKSkgeyAvKiAicG9zaXRpdmUiIHJlc2lkdWUgY2xhc3MgKi8KKyAgICAgIGN5ID0geHBbbl07IC8qIDAgPD0gY3kgPD0gMSBoZXJlLiAqLworI2lmIEhBVkVfTkFUSVZFX21wbl9zdWJsc2gxX24KKyAgICAgIGlmIChjeSsrKSB7CisJaWYgKG1wbl9jbXAgKHhwLCBkcCAtIG4sIG4pID4gMCkgeworCSAgbXBfbGltYl90IGNoazsKKwkgIGNoayA9IG1wbl9zdWJsc2gxX24gKHhwLCB4cCwgZHAgLSBuLCBuKTsKKwkgIEFTU0VSVCAoY2hrID09IHhwW25dKTsKKwkgICsrIGN5OworCX0gZWxzZQorCSAgQVNTRVJUX0NBUlJZIChtcG5fc3ViX24gKHhwLCB4cCwgZHAgLSBuLCBuKSk7CisgICAgICB9CisjZWxzZSAvKiBubyBtcG5fc3VibHNoMV9uKi8KKyAgICAgIGlmIChjeSsrICYmICFtcG5fc3ViX24gKHhwLCB4cCwgZHAgLSBuLCBuKSkgeworCUFTU0VSVF9DQVJSWSAobXBuX3N1Yl9uICh4cCwgeHAsIGRwIC0gbiwgbikpOworCSsrY3k7CisgICAgICB9CisjZW5kaWYKKyAgICAgIC8qIDEgPD0gY3kgPD0gMyBoZXJlLiAqLworI2lmIEhBVkVfTkFUSVZFX21wbl9yc2Jsc2gxX24KKyAgICAgIGlmIChtcG5fY21wICh4cCwgZHAgLSBuLCBuKSA+IDApIHsKKwlBU1NFUlRfTk9DQVJSWSAobXBuX3JzYmxzaDFfbiAoeHAgKyBuLCB4cCwgZHAgLSBuLCBuKSk7CisJKytjeTsKKyAgICAgIH0gZWxzZQorCUFTU0VSVF9OT0NBUlJZIChtcG5fc3ViX25jICh4cCArIDIgKiBuIC0gcm4sIGRwIC0gcm4sIHhwICsgbiAtIHJuLCBybiwgbXBuX2NtcCAoeHAsIGRwIC0gbiwgbiAtIHJuKSA+IDApKTsKKyNlbHNlIC8qIG5vIG1wbl9yc2Jsc2gxX24qLworICAgICAgaWYgKG1wbl9jbXAgKHhwLCBkcCAtIG4sIG4pID4gMCkgeworCUFTU0VSVF9OT0NBUlJZIChtcG5fc3ViX24gKHhwLCB4cCwgZHAgLSBuLCBuKSk7CisJKytjeTsKKyAgICAgIH0KKyAgICAgIEFTU0VSVF9OT0NBUlJZIChtcG5fc3ViX25jICh4cCArIDIgKiBuIC0gcm4sIGRwIC0gcm4sIHhwICsgbiAtIHJuLCBybiwgbXBuX2NtcCAoeHAsIGRwIC0gbiwgbiAtIHJuKSA+IDApKTsKKyNlbmRpZgorICAgICAgTVBOX0RFQ1JfVShpcCAtIHJuLCBybiwgY3kpOyAvKiAxIDw9IGN5IDw9IDQgaGVyZS4gKi8KKyAgICB9IGVsc2UgeyAvKiAibmVnYXRpdmUiIHJlc2lkdWUgY2xhc3MgKi8KKyAgICAgIEFTU0VSVCAoeHBbbl0gPj0gR01QX05VTUJfTUFYIC0gQ05TVF9MSU1CKDEpKTsKKyAgICAgIE1QTl9ERUNSX1UoeHAsIG4gKyAxLCBjeSk7CisgICAgICBpZiAoeHBbbl0gIT0gR01QX05VTUJfTUFYKSB7CisJTVBOX0lOQ1JfVShpcCAtIHJuLCBybiwgQ05TVF9MSU1CICgxKSk7CisJQVNTRVJUX0NBUlJZIChtcG5fYWRkX24gKHhwLCB4cCwgZHAgLSBuLCBuKSk7CisgICAgICB9CisgICAgICBtcG5fY29tICh4cCArIDIgKiBuIC0gcm4sIHhwICsgbiAtIHJuLCBybik7CisgICAgfQorCisgICAgLyogQ29tcHV0ZSB4X2p1X2ouIEZJWE1FOldlIG5lZWQge3hwK3JuLHJufSwgbXVsaGk/ICovCisgICAgbXBuX211bF9uICh4cCwgeHAgKyAyICogbiAtIHJuLCBpcCAtIHJuLCBybik7CisgICAgY3kgPSBtcG5fYWRkX24gKHhwICsgcm4sIHhwICsgcm4sIHhwICsgMiAqIG4gLSBybiwgMiAqIHJuIC0gbik7CisgICAgY3kgPSBtcG5fYWRkX25jIChpcCAtIG4sIHhwICsgMyAqIHJuIC0gbiwgeHAgKyBuICsgcm4sIG4gLSBybiwgY3kpOworICAgIE1QTl9JTkNSX1UgKGlwIC0gcm4sIHJuLCBjeSk7CisgICAgaWYgKHNpenAgPT0gc2l6ZXMpIHsgLyogR2V0IG91dCBvZiB0aGUgY3ljbGUgKi8KKyAgICAgIC8qIENoZWNrIGZvciBwb3NzaWJsZSBjYXJyeSBwcm9wYWdhdGlvbiBmcm9tIGJlbG93LiAqLworICAgICAgY3kgPSB4cFszICogcm4gLSBuIC0gMV0gPiBHTVBfTlVNQl9NQVggLSBDTlNUX0xJTUIgKDcpOyAvKiBCZSBjb25zZXJ2YXRpdmUuICovCisgICAgICAvKiAgICBjeSA9IG1wbl9hZGRfMSAoeHAgKyBybiwgeHAgKyBybiwgMipybiAtIG4sIDQpOyAqLworICAgICAgYnJlYWs7CisgICAgfQorICAgIHJuID0gbjsKKyAgfQorICBUTVBfRlJFRTsKKworICByZXR1cm4gY3k7CisjdW5kZWYgeHAKK30KKworbXBfbGltYl90CittcG5faW52ZXJ0YXBwciAobXBfcHRyIGlwLCBtcF9zcmNwdHIgZHAsIG1wX3NpemVfdCBuLCBtcF9wdHIgc2NyYXRjaCkKK3sKKyAgQVNTRVJUIChuID4gMCk7CisgIEFTU0VSVCAoZHBbbi0xXSAmIEdNUF9OVU1CX0hJR0hCSVQpOworICBBU1NFUlQgKCEgTVBOX09WRVJMQVBfUCAoaXAsIG4sIGRwLCBuKSk7CisgIEFTU0VSVCAoISBNUE5fT1ZFUkxBUF9QIChpcCwgbiwgc2NyYXRjaCwgbXBuX2ludmVydGFwcHJfaXRjaChuKSkpOworICBBU1NFUlQgKCEgTVBOX09WRVJMQVBfUCAoZHAsIG4sIHNjcmF0Y2gsIG1wbl9pbnZlcnRhcHByX2l0Y2gobikpKTsKKworICBpZiAoQkVMT1dfVEhSRVNIT0xEIChuLCBJTlZfTkVXVE9OX1RIUkVTSE9MRCkpCisgICAgcmV0dXJuIG1wbl9iY19pbnZlcnRhcHByIChpcCwgZHAsIG4sIHNjcmF0Y2gpOworICBlbHNlCisgICAgcmV0dXJuIG1wbl9uaV9pbnZlcnRhcHByIChpcCwgZHAsIG4sIHNjcmF0Y2gpOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2phY2Jhc2UuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9qYWNiYXNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM1YWQ3YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9qYWNiYXNlLmMKQEAgLTAsMCArMSwyNDIgQEAKKy8qIG1wbl9qYWNvYmlfYmFzZSAtLSBsaW1iL2xpbWIgSmFjb2JpIHN5bWJvbCB3aXRoIHJlc3RyaWN0ZWQgYXJndW1lbnRzLgorCisgICBUSElTIElOVEVSRkFDRSBJUyBQUkVMSU1JTkFSWSBBTkQgTUlHSFQgRElTQVBQRUFSIE9SIEJFIFNVQkpFQ1QgVE8KKyAgIElOQ09NUEFUSUJMRSBDSEFOR0VTIElOIEEgRlVUVVJFIFJFTEVBU0UgT0YgR01QLgorCitDb3B5cmlnaHQgMTk5OS0yMDAyLCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKyNpbmNsdWRlICJsb25nbG9uZy5oIgorCisKKy8qIFVzZSB0aGUgc2ltcGxlIGxvb3AgYnkgZGVmYXVsdC4gIFRoZSBnZW5lcmljIGNvdW50X3RyYWlsaW5nX3plcm9zIGlzIG5vdAorICAgdmVyeSBmYXN0LCBhbmQgdGhlIGV4dHJhIHRyaWNrZXJ5IG9mIG1ldGhvZCAzIGhhcyBwcm92ZW4gdG8gYmUgbGVzcyB1c2UKKyAgIHRoYW4gbWlnaHQgaGF2ZSBiZWVuIHRob3VnaC4gICovCisjaWZuZGVmIEpBQ09CSV9CQVNFX01FVEhPRAorI2RlZmluZSBKQUNPQklfQkFTRV9NRVRIT0QgIDIKKyNlbmRpZgorCisKKy8qIFVzZSBjb3VudF90cmFpbGluZ196ZXJvcy4gICovCisjaWYgSkFDT0JJX0JBU0VfTUVUSE9EID09IDEKKyNkZWZpbmUgUFJPQ0VTU19UV09TX0FOWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbXBfbGltYl90ICB0d29zOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjb3VudF90cmFpbGluZ196ZXJvcyAodHdvcywgYSk7ICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJlc3VsdF9iaXQxIF49IEpBQ09CSV9UV09TX1VfQklUMSAodHdvcywgYik7ICAgICAgICBcCisgICAgYSA+Pj0gdHdvczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfQorI2RlZmluZSBQUk9DRVNTX1RXT1NfRVZFTiAgUFJPQ0VTU19UV09TX0FOWQorI2VuZGlmCisKKy8qIFVzZSBhIHNpbXBsZSBsb29wLiAgQSBkaXNhZHZhbnRhZ2Ugb2YgdGhpcyBpcyB0aGF0IHRoZXJlJ3MgYSBicmFuY2ggb24gYQorICAgNTAvNTAgY2hhbmNlIG9mIGEgMCBvciAxIGxvdyBiaXQuICAqLworI2lmIEpBQ09CSV9CQVNFX01FVEhPRCA9PSAyCisjZGVmaW5lIFBST0NFU1NfVFdPU19FVkVOICAgICAgICAgICAgICAgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpbnQgIHR3bzsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdHdvID0gSkFDT0JJX1RXT19VX0JJVDEgKGIpOyAgICAgICAgXAorICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJYSA+Pj0gMTsgICAgICAgICAgICAgICAgICAgICAgICBcCisJcmVzdWx0X2JpdDEgXj0gdHdvOyAgICAgICAgICAgICBcCisJQVNTRVJUIChhICE9IDApOyAgICAgICAgICAgICAgICBcCisgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHdoaWxlICgoYSAmIDEpID09IDApOyAgICAgICAgICAgICAgIFwKKyAgfQorI2RlZmluZSBQUk9DRVNTX1RXT1NfQU5ZICAgICAgICBcCisgIGlmICgoYSAmIDEpID09IDApICAgICAgICAgICAgIFwKKyAgICBQUk9DRVNTX1RXT1NfRVZFTjsKKyNlbmRpZgorCisvKiBQcm9jZXNzIG9uZSBiaXQgYXJpdGhtZXRpY2FsbHksIHRoZW4gYSBzaW1wbGUgbG9vcC4gIFRoaXMgY3V0cyB0aGUgbG9vcAorICAgY29uZGl0aW9uIGRvd24gdG8gYSAyNS83NSBjaGFuY2UsIHdoaWNoIHNob3VsZCBicmFuY2ggcHJlZGljdCBiZXR0ZXIuCisgICBUaGUgQ1BVIHdpbGwgbmVlZCBhIHJlYXNvbmFibGUgdmFyaWFibGUgbGVmdCBzaGlmdC4gICovCisjaWYgSkFDT0JJX0JBU0VfTUVUSE9EID09IDMKKyNkZWZpbmUgUFJPQ0VTU19UV09TX0VWRU4gICAgICAgICAgICAgICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGludCAgdHdvLCBtYXNrLCBzaGlmdDsgICAgICAgICAgICAgIFwKKwkJCQkJXAorICAgIHR3byA9IEpBQ09CSV9UV09fVV9CSVQxIChiKTsgICAgICAgIFwKKyAgICBtYXNrID0gKH5hICYgMik7ICAgICAgICAgICAgICAgICAgICBcCisgICAgYSA+Pj0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCQlcCisgICAgc2hpZnQgPSAofmEgJiAxKTsgICAgICAgICAgICAgICAgICAgXAorICAgIGEgPj49IHNoaWZ0OyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByZXN1bHRfYml0MSBePSB0d28gXiAodHdvICYgbWFzayk7ICBcCisJCQkJCVwKKyAgICB3aGlsZSAoKGEgJiAxKSA9PSAwKSAgICAgICAgICAgICAgICBcCisgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWEgPj49IDE7ICAgICAgICAgICAgICAgICAgICAgICAgXAorCXJlc3VsdF9iaXQxIF49IHR3bzsgICAgICAgICAgICAgXAorCUFTU0VSVCAoYSAhPSAwKTsgICAgICAgICAgICAgICAgXAorICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfQorI2RlZmluZSBQUk9DRVNTX1RXT1NfQU5ZICAgICAgICAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaW50ICB0d28sIG1hc2ssIHNoaWZ0OyAgICAgICAgICAgICAgXAorCQkJCQlcCisgICAgdHdvID0gSkFDT0JJX1RXT19VX0JJVDEgKGIpOyAgICAgICAgXAorICAgIHNoaWZ0ID0gKH5hICYgMSk7ICAgICAgICAgICAgICAgICAgIFwKKyAgICBhID4+PSBzaGlmdDsgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJCVwKKyAgICBtYXNrID0gc2hpZnQgPDwgMTsgICAgICAgICAgICAgICAgICBcCisgICAgcmVzdWx0X2JpdDEgXj0gKHR3byAmIG1hc2spOyAgICAgICAgXAorCQkJCQlcCisgICAgd2hpbGUgKChhICYgMSkgPT0gMCkgICAgICAgICAgICAgICAgXAorICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlhID4+PSAxOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlyZXN1bHRfYml0MSBePSB0d287ICAgICAgICAgICAgIFwKKwlBU1NFUlQgKGEgIT0gMCk7ICAgICAgICAgICAgICAgIFwKKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0KKyNlbmRpZgorCisjaWYgSkFDT0JJX0JBU0VfTUVUSE9EIDwgNAorLyogQ2FsY3VsYXRlIHRoZSB2YWx1ZSBvZiB0aGUgSmFjb2JpIHN5bWJvbCAoYS9iKSBvZiB0d28gbXBfbGltYl90J3MsIGJ1dAorICAgd2l0aCBhIHJlc3RyaWN0ZWQgcmFuZ2Ugb2YgaW5wdXRzIGFjY2VwdGVkLCBuYW1lbHkgYj4xLCBiIG9kZC4KKworICAgVGhlIGluaXRpYWwgcmVzdWx0X2JpdDEgaXMgdGFrZW4gYXMgYSBwYXJhbWV0ZXIgZm9yIHRoZSBjb252ZW5pZW5jZSBvZgorICAgbXB6X2tyb25lY2tlcl91aSgpIGV0IGFsLiAgVGhlIHNpZ24gY2hhbmdlcyBib3RoIGhlcmUgYW5kIGluIHRob3NlCisgICByb3V0aW5lcyBhY2N1bXVsYXRlIG5pY2VseSBpbiBiaXQgMSwgc2VlIHRoZSBKQUNPQkkgbWFjcm9zLgorCisgICBUaGUgcmV0dXJuIHZhbHVlIGhlcmUgaXMgdGhlIG5vcm1hbCArMSwgMCwgb3IgLTEuICBOb3RlIHRoYXQgKzEgYW5kIC0xCisgICBoYXZlIGJpdCAxIGluIHRoZSAiQklUMSIgc2Vuc2UsIHdoaWNoIGNvdWxkIGJlIHVzZWZ1bCBpZiB0aGUgY2FsbGVyIGlzCisgICBhY2N1bXVsYXRpbmcgaXQgaW50byBzb21lIGV4dGVuZGVkIGNhbGN1bGF0aW9uLgorCisgICBEdXBsaWNhdGluZyB0aGUgbG9vcCBib2R5IHRvIGF2b2lkIHRoZSBNUF9MSU1CX1RfU1dBUChhLGIpIHdvdWxkIGJlCisgICBwb3NzaWJsZSwgYnV0IGEgY291cGxlIG9mIHRlc3RzIHN1Z2dlc3QgaXQncyBub3QgYSBzaWduaWZpY2FudCBzcGVlZHVwLAorICAgYW5kIG1heSBldmVuIGJlIGEgc2xvd2Rvd24sIHNvIHdoYXQncyBoZXJlIGlzIGdvb2QgZW5vdWdoIGZvciBub3cuICovCisKK2ludAorbXBuX2phY29iaV9iYXNlIChtcF9saW1iX3QgYSwgbXBfbGltYl90IGIsIGludCByZXN1bHRfYml0MSkKK3sKKyAgQVNTRVJUIChiICYgMSk7ICAvKiBiIG9kZCAqLworICBBU1NFUlQgKGIgIT0gMSk7CisKKyAgaWYgKGEgPT0gMCkKKyAgICByZXR1cm4gMDsKKworICBQUk9DRVNTX1RXT1NfQU5ZOworICBpZiAoYSA9PSAxKQorICAgIGdvdG8gZG9uZTsKKworICBpZiAoYSA+PSBiKQorICAgIGdvdG8gYV9ndF9iOworCisgIGZvciAoOzspCisgICAgeworICAgICAgcmVzdWx0X2JpdDEgXj0gSkFDT0JJX1JFQ0lQX1VVX0JJVDEgKGEsIGIpOworICAgICAgTVBfTElNQl9UX1NXQVAgKGEsIGIpOworCisgICAgYV9ndF9iOgorICAgICAgZG8KKwl7CisJICAvKiB3b3JraW5nIG9uIChhL2IpLCBhLGIgb2RkLCBhPj1iICovCisJICBBU1NFUlQgKGEgJiAxKTsKKwkgIEFTU0VSVCAoYiAmIDEpOworCSAgQVNTRVJUIChhID49IGIpOworCisJICBpZiAoKGEgLT0gYikgPT0gMCkKKwkgICAgcmV0dXJuIDA7CisKKwkgIFBST0NFU1NfVFdPU19FVkVOOworCSAgaWYgKGEgPT0gMSkKKwkgICAgZ290byBkb25lOworCX0KKyAgICAgIHdoaWxlIChhID49IGIpOworICAgIH0KKworIGRvbmU6CisgIHJldHVybiBKQUNPQklfQklUMV9UT19QTiAocmVzdWx0X2JpdDEpOworfQorI2VuZGlmCisKKyNpZiBKQUNPQklfQkFTRV9NRVRIT0QgPT0gNAorLyogQ29tcHV0ZXMgKGEvYikgZm9yIG9kZCBiID4gMSBhbmQgYW55IGEuIFRoZSBpbml0aWFsIGJpdCBpcyB0YWtlbiBhcyBhCisgKiBwYXJhbWV0ZXIuIFdlIGhhdmUgbm8gbmVlZCBmb3IgdGhlIGNvbnZlbnRpb24gdGhhdCB0aGUgc2lnbiBpcyBpbgorICogYml0IDEsIGludGVybmFsbHkgd2UgdXNlIGJpdCAwLiAqLworCisvKiBGSVhNRTogQ291bGQgdHJ5IHRhYmxlLWJhc2VkIGNvdW50X3RyYWlsaW5nX3plcm9zLiAqLworaW50CittcG5famFjb2JpX2Jhc2UgKG1wX2xpbWJfdCBhLCBtcF9saW1iX3QgYiwgaW50IGJpdCkKK3sKKyAgaW50IGM7CisKKyAgQVNTRVJUIChiICYgMSk7CisgIEFTU0VSVCAoYiA+IDEpOworCisgIGlmIChhID09IDApCisgICAgLyogVGhpcyBpcyB0aGUgb25seSBsaW5lIHdoaWNoIGRlcGVuZHMgb24gYiA+IDEgKi8KKyAgICByZXR1cm4gMDsKKworICBiaXQgPj49IDE7CisKKyAgLyogQmVsb3csIHdlIHJlcHJlc2VudCBhIGFuZCBiIHNoaWZ0ZWQgcmlnaHQgc28gdGhhdCB0aGUgbGVhc3QKKyAgICAgc2lnbmlmaWNhbnQgb25lIGJpdCBpcyBpbXBsaWNpdC4gKi8KKworICBiID4+PSAxOworCisgIGNvdW50X3RyYWlsaW5nX3plcm9zIChjLCBhKTsKKyAgYml0IF49IGMgJiAoYiBeIChiID4+IDEpKTsKKworICAvKiBXZSBtYXkgaGF2ZSBjPT1HTVBfTElNQl9CSVRTLTEsIHNvIHdlIGNhbid0IHVzZSBhPj5jKzEuICovCisgIGEgPj49IGM7CisgIGEgPj49IDE7CisKKyAgZG8KKyAgICB7CisgICAgICBtcF9saW1iX3QgdCA9IGEgLSBiOworICAgICAgbXBfbGltYl90IGJndGEgPSBMSU1CX0hJR0hCSVRfVE9fTUFTSyAodCk7CisKKyAgICAgIGlmICh0ID09IDApCisJcmV0dXJuIDA7CisKKyAgICAgIC8qIElmIGIgPiBhLCBpbnZva2UgcmVjaXByb2NpdHkgKi8KKyAgICAgIGJpdCBePSAoYmd0YSAmIGEgJiBiKTsKKworICAgICAgLyogYiA8LS0gbWluIChhLCBiKSAqLworICAgICAgYiArPSAoYmd0YSAmIHQpOworCisgICAgICAvKiBhIDwtLSB8YSAtIGJ8ICovCisgICAgICBhID0gKHQgXiBiZ3RhKSAtIGJndGE7CisKKyAgICAgIC8qIE51bWJlciBvZiB0cmFpbGluZyB6ZXJvcyBpcyB0aGUgc2FtZSBubyBtYXR0ZXIgaWYgd2UgbG9vayBhdAorICAgICAgICogdCBvciBhLCBidXQgdXNpbmcgdCBnaXZlcyBtb3JlIHBhcmFsbGVsaXNtLiAqLworICAgICAgY291bnRfdHJhaWxpbmdfemVyb3MgKGMsIHQpOworICAgICAgYyArKzsKKyAgICAgIC8qICgyL2IpID0gLTEgaWYgYiA9IDMgb3IgNSBtb2QgOCAqLworICAgICAgYml0IF49IGMgJiAoYiBeIChiID4+IDEpKTsKKyAgICAgIGEgPj49IGM7CisgICAgfQorICB3aGlsZSAoYiA+IDApOworCisgIHJldHVybiAxLTIqKGJpdCAmIDEpOworfQorI2VuZGlmIC8qIEpBQ09CSV9CQVNFX01FVEhPRCA9PSA0ICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvamFjb2JpLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvamFjb2JpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk4YjEyNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9qYWNvYmkuYwpAQCAtMCwwICsxLDI5NCBAQAorLyogamFjb2JpLmMKKworICAgVEhFIEZVTkNUSU9OUyBJTiBUSElTIEZJTEUgQVJFIElOVEVSTkFMIFdJVEggTVVUQUJMRSBJTlRFUkZBQ0VTLiAgSVQgSVMgT05MWQorICAgU0FGRSBUTyBSRUFDSCBUSEVNIFRIUk9VR0ggRE9DVU1FTlRFRCBJTlRFUkZBQ0VTLiAgSU4gRkFDVCwgSVQgSVMgQUxNT1NUCisgICBHVUFSQU5URUVEIFRIQVQgVEhFWSdMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEgRlVUVVJFIEdOVSBNUCBSRUxFQVNFLgorCitDb3B5cmlnaHQgMTk5NiwgMTk5OCwgMjAwMC0yMDA0LCAyMDA4LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisjaW5jbHVkZSAibG9uZ2xvbmcuaCIKKworI2lmbmRlZiBKQUNPQklfRENfVEhSRVNIT0xECisjZGVmaW5lIEpBQ09CSV9EQ19USFJFU0hPTEQgR0NEX0RDX1RIUkVTSE9MRAorI2VuZGlmCisKKy8qIFNjaMO2bmhhZ2UncyBydWxlczoKKyAqCisgKiBBc3N1bWUgcjAgPSByMSBxMSArIHIyLCB3aXRoIHIwIG9kZCwgYW5kIHIxID0gcTIgcjIgKyByMworICoKKyAqIElmIHIxIGlzIG9kZCwgdGhlbgorICoKKyAqICAgKHIxIHwgcjApID0gcyhyMSwgcjApIChyMCB8IHIxKSA9IHMocjEsIHIwKSAocjIsIHIxKQorICoKKyAqIHdoZXJlIHMoeCx5KSA9ICgtMSleeyh4LTEpKHktMSkvNH0gPSAoLTEpXlt4ID0geSA9IDMgKG1vZCA0KV0uCisgKgorICogSWYgcjEgaXMgZXZlbiwgcjIgbXVzdCBiZSBvZGQuIFdlIGhhdmUKKyAqCisgKiAgIChyMSB8IHIwKSA9IChyMSAtIHIwIHwgcjApID0gKC0xKV4ocjAtMSkvMiAocjAgLSByMSB8IHIwKQorICogICAgICAgICAgICAgPSAoLTEpXihyMC0xKS8yIHMocjAsIHIwIC0gcjEpIChyMCB8IHIwIC0gcjEpCisgKiAgICAgICAgICAgICA9ICgtMSleKHIwLTEpLzIgcyhyMCwgcjAgLSByMSkgKHIxIHwgcjAgLSByMSkKKyAqCisgKiBOb3csIGlmIHIxID0gMCAobW9kIDQpLCB0aGVuIHRoZSBzaWduIGZhY3RvciBpcyArMSwgYW5kIHJlcGVhdGluZworICogcTEgdGltZXMgZ2l2ZXMKKyAqCisgKiAgIChyMSB8IHIwKSA9IChyMSB8IHIyKSA9IChyMyB8IHIyKQorICoKKyAqIE9uIHRoZSBvdGhlciBoYW5kLCBpZiByMSA9IDIgKG1vZCA0KSwgdGhlIHNpZ24gZmFjdG9yIGlzCisgKiAoLTEpXnsocjAtMSkvMn0sIGFuZCByZXBlYXRpbmcgcTEgdGltZXMgZ2l2ZXMgdGhlIGV4cG9uZW50CisgKgorICogICAocjAtMSkvMiArIChyMC1yMS0xKS8yICsgLi4uICsgKHIwIC0gKHExLTEpIHIxKS8yCisgKiAgID0gcTEgKHIwLTEpLzIgKyBxMSAocTEtMSkvMgorICoKKyAqIGFuZCB3ZSBjYW4gc3VtbWFyaXplIHRoZSBldmVuIGNhc2UgYXMKKyAqCisgKiAgIChyMSB8IHIwKSA9IHQocjEsIHIwLCBxMSkgKHIzIHwgcjIpCisgKgorICogd2hlcmUgdCh4LHkscSkgPSAoLTEpXntbeCA9IDIgKG1vZCA0KV0gKHEoeS0xKS8yICsgeShxLTEpLzIpfQorICoKKyAqIFdoYXQgYWJvdXQgdGVybWluYXRpb24/IFRoZSByZW1haW5kZXIgc2VxdWVuY2UgZW5kcyB3aXRoICgwfDEpID0gMQorICogKG9yICgwIHwgcikgPSAwIGlmIHIgIT0gMSkuIFdoYXQgYXJlIHRoZSBwb3NzaWJsZSBjYXNlcz8gSWYgcjEgaXMKKyAqIG9kZCwgcjIgbWF5IGJlIHplcm8uIElmIHIxIGlzIGV2ZW4sIHRoZW4gcjIgPSByMCAtIHExIHIxIGlzIG9kZCBhbmQKKyAqIGhlbmNlIG5vbi16ZXJvLiBXZSBtYXkgaGF2ZSByMyA9IHIxIC0gcTIgcjIgPSAwLgorICoKKyAqIEV4YW1wbGVzOiAoMTF8MTUpID0gLSAoMTV8MTEpID0gLSAoNHwxMSkKKyAqICAgICAgICAgICAgKDR8MTEpID0gICAgKDR8IDMpID0gICAoMXwgMykKKyAqICAgICAgICAgICAgKDF8IDMpID0gKDN8MSkgPSAoMHwxKSA9IDEKKyAqCisgKiAgICAgICAgICAgICAoMnw3KSA9ICgyfDEpID0gKDB8MSkgPSAxCisgKgorICogRGV0YWlsOiAgICAgKDJ8NykgPSAoMi03fDcpID0gKC0xfDcpKDV8NykgPSAtKDd8NSkgPSAtKDJ8NSkKKyAqICAgICAgICAgICAgICgyfDUpID0gKDItNXw1KSA9ICgtMXw1KSgzfDUpID0gICg1fDMpID0gICgyfDMpCisgKiAgICAgICAgICAgICAoMnwzKSA9ICgyLTN8MykgPSAoLTF8MykoMXwzKSA9IC0oM3wxKSA9IC0oMnwxKQorICoKKyAqLworCisvKiBJbiBwcmluY2lwbGUsIHRoZSBzdGF0ZSBjb25zaXN0cyBvZiBmb3VyIHZhcmlhYmxlczogZSAob25lIGJpdCksIGEsCisgICBiICh0d28gYml0cyBlYWNoKSwgZCAob25lIGJpdCkuIENvbGxlY3RlZCBmYWN0b3JzIGFyZSAoLTEpXmUuIGEgYW5kCisgICBiIGFyZSB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiB0aGUgY3VycmVudCByZW1haW5kZXJzLiBkCisgICAoZGVub21pbmF0b3IpIGlzIDAgaWYgd2UncmUgY3VycmVudGx5IHN1YnRyYWN0aW5nIG11bHRpcGxpZXMgb2YgYQorICAgZnJvbSBiLCBhbmQgMSBpZiB3ZSdyZSBzdWJ0cmFjdGluZyBiIGZyb20gYS4KKworICAgZSBpcyBzdG9yZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCwgd2hpbGUgYSwgYiBhbmQgZCBhcmUKKyAgIGNvZGVkIGFzIG9ubHkgMTMgZGlzdGluY3QgdmFsdWVzIGluIGJpdHMgMS00LCBhY2NvcmRpbmcgdG8gdGhlCisgICBmb2xsb3dpbmcgdGFibGUuIEZvciByb3dzIG5vdCBtZW50aW9uaW5nIGQsIHRoZSB2YWx1ZSBpcyBlaXRoZXIKKyAgIGltcGxpZWQsIG9yIGl0IGRvZXNuJ3QgbWF0dGVyLiAqLworCisjaWYgV0FOVF9BU1NFUlQKK3N0YXRpYyBjb25zdCBzdHJ1Y3QKK3sKKyAgdW5zaWduZWQgY2hhciBhOworICB1bnNpZ25lZCBjaGFyIGI7Cit9IGRlY29kZV90YWJsZVsxM10gPSB7CisgIC8qICAwICovIHsgMCwgMSB9LAorICAvKiAgMSAqLyB7IDAsIDMgfSwKKyAgLyogIDIgKi8geyAxLCAxIH0sCisgIC8qICAzICovIHsgMSwgMyB9LAorICAvKiAgNCAqLyB7IDIsIDEgfSwKKyAgLyogIDUgKi8geyAyLCAzIH0sCisgIC8qICA2ICovIHsgMywgMSB9LAorICAvKiAgNyAqLyB7IDMsIDMgfSwgLyogZCA9IDEgKi8KKyAgLyogIDggKi8geyAxLCAwIH0sCisgIC8qICA5ICovIHsgMSwgMiB9LAorICAvKiAxMCAqLyB7IDMsIDAgfSwKKyAgLyogMTEgKi8geyAzLCAyIH0sCisgIC8qIDEyICovIHsgMywgMyB9LCAvKiBkID0gMCAqLworfTsKKyNkZWZpbmUgSkFDT0JJX0EoYml0cykgKGRlY29kZV90YWJsZVsoYml0cyk+PjFdLmEpCisjZGVmaW5lIEpBQ09CSV9CKGJpdHMpIChkZWNvZGVfdGFibGVbKGJpdHMpPj4xXS5iKQorI2VuZGlmIC8qIFdBTlRfQVNTRVJUICovCisKK2NvbnN0IHVuc2lnbmVkIGNoYXIgamFjb2JpX3RhYmxlWzIwOF0gPSB7CisjaW5jbHVkZSAiamFjb2JpdGFiLmgiCit9OworCisjZGVmaW5lIEJJVFNfRkFJTCAzMQorCitzdGF0aWMgdm9pZAoramFjb2JpX2hvb2sgKHZvaWQgKnAsIG1wX3NyY3B0ciBncCwgbXBfc2l6ZV90IGduLAorCSAgICAgbXBfc3JjcHRyIHFwLCBtcF9zaXplX3QgcW4sIGludCBkKQoreworICB1bnNpZ25lZCAqYml0c3AgPSAodW5zaWduZWQgKikgcDsKKworICBpZiAoZ3ApCisgICAgeworICAgICAgQVNTRVJUIChnbiA+IDApOworICAgICAgaWYgKGduICE9IDEgfHwgZ3BbMF0gIT0gMSkKKwl7CisJICAqYml0c3AgPSBCSVRTX0ZBSUw7CisJICByZXR1cm47CisJfQorICAgIH0KKworICBpZiAocXApCisgICAgeworICAgICAgQVNTRVJUIChxbiA+IDApOworICAgICAgQVNTRVJUIChkID49IDApOworICAgICAgKmJpdHNwID0gbXBuX2phY29iaV91cGRhdGUgKCpiaXRzcCwgZCwgcXBbMF0gJiAzKTsKKyAgICB9Cit9CisKKyNkZWZpbmUgQ0hPT1NFX1AobikgKDIqKG4pIC8gMykKKworaW50CittcG5famFjb2JpX24gKG1wX3B0ciBhcCwgbXBfcHRyIGJwLCBtcF9zaXplX3QgbiwgdW5zaWduZWQgYml0cykKK3sKKyAgbXBfc2l6ZV90IHNjcmF0Y2g7CisgIG1wX3NpemVfdCBtYXRyaXhfc2NyYXRjaDsKKyAgbXBfcHRyIHRwOworCisgIFRNUF9ERUNMOworCisgIEFTU0VSVCAobiA+IDApOworICBBU1NFUlQgKCAoYXBbbi0xXSB8IGJwW24tMV0pID4gMCk7CisgIEFTU0VSVCAoIChicFswXSB8IGFwWzBdKSAmIDEpOworCisgIC8qIEZJWE1FOiBDaGVjayBmb3Igc21hbGwgc2l6ZXMgZmlyc3QsIGJlZm9yZSBzZXR0aW5nIHVwIHRlbXBvcmFyeQorICAgICBzdG9yYWdlIGV0Yy4gKi8KKyAgc2NyYXRjaCA9IE1QTl9HQ0RfU1VCRElWX1NURVBfSVRDSChuKTsKKworICBpZiAoQUJPVkVfVEhSRVNIT0xEIChuLCBKQUNPQklfRENfVEhSRVNIT0xEKSkKKyAgICB7CisgICAgICBtcF9zaXplX3QgaGdjZF9zY3JhdGNoOworICAgICAgbXBfc2l6ZV90IHVwZGF0ZV9zY3JhdGNoOworICAgICAgbXBfc2l6ZV90IHAgPSBDSE9PU0VfUCAobik7CisgICAgICBtcF9zaXplX3QgZGNfc2NyYXRjaDsKKworICAgICAgbWF0cml4X3NjcmF0Y2ggPSBNUE5fSEdDRF9NQVRSSVhfSU5JVF9JVENIIChuIC0gcCk7CisgICAgICBoZ2NkX3NjcmF0Y2ggPSBtcG5faGdjZF9pdGNoIChuIC0gcCk7CisgICAgICB1cGRhdGVfc2NyYXRjaCA9IHAgKyBuIC0gMTsKKworICAgICAgZGNfc2NyYXRjaCA9IG1hdHJpeF9zY3JhdGNoICsgTUFYKGhnY2Rfc2NyYXRjaCwgdXBkYXRlX3NjcmF0Y2gpOworICAgICAgaWYgKGRjX3NjcmF0Y2ggPiBzY3JhdGNoKQorCXNjcmF0Y2ggPSBkY19zY3JhdGNoOworICAgIH0KKworICBUTVBfTUFSSzsKKyAgdHAgPSBUTVBfQUxMT0NfTElNQlMoc2NyYXRjaCk7CisKKyAgd2hpbGUgKEFCT1ZFX1RIUkVTSE9MRCAobiwgSkFDT0JJX0RDX1RIUkVTSE9MRCkpCisgICAgeworICAgICAgc3RydWN0IGhnY2RfbWF0cml4IE07CisgICAgICBtcF9zaXplX3QgcCA9IDIqbi8zOworICAgICAgbXBfc2l6ZV90IG1hdHJpeF9zY3JhdGNoID0gTVBOX0hHQ0RfTUFUUklYX0lOSVRfSVRDSCAobiAtIHApOworICAgICAgbXBfc2l6ZV90IG5uOworICAgICAgbXBuX2hnY2RfbWF0cml4X2luaXQgKCZNLCBuIC0gcCwgdHApOworCisgICAgICBubiA9IG1wbl9oZ2NkX2phY29iaSAoYXAgKyBwLCBicCArIHAsIG4gLSBwLCAmTSwgJmJpdHMsCisJCQkgICAgdHAgKyBtYXRyaXhfc2NyYXRjaCk7CisgICAgICBpZiAobm4gPiAwKQorCXsKKwkgIEFTU0VSVCAoTS5uIDw9IChuIC0gcCAtIDEpLzIpOworCSAgQVNTRVJUIChNLm4gKyBwIDw9IChwICsgbiAtIDEpIC8gMik7CisJICAvKiBUZW1wb3Jhcnkgc3RvcmFnZSAyIChwICsgTS0+bikgPD0gcCArIG4gLSAxLiAqLworCSAgbiA9IG1wbl9oZ2NkX21hdHJpeF9hZGp1c3QgKCZNLCBwICsgbm4sIGFwLCBicCwgcCwgdHAgKyBtYXRyaXhfc2NyYXRjaCk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8qIFRlbXBvcmFyeSBzdG9yYWdlIG4gKi8KKwkgIG4gPSBtcG5fZ2NkX3N1YmRpdl9zdGVwIChhcCwgYnAsIG4sIDAsIGphY29iaV9ob29rLCAmYml0cywgdHApOworCSAgaWYgKCFuKQorCSAgICB7CisJICAgICAgVE1QX0ZSRUU7CisJICAgICAgcmV0dXJuIGJpdHMgPT0gQklUU19GQUlMID8gMCA6IG1wbl9qYWNvYmlfZmluaXNoIChiaXRzKTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgd2hpbGUgKG4gPiAyKQorICAgIHsKKyAgICAgIHN0cnVjdCBoZ2NkX21hdHJpeDEgTTsKKyAgICAgIG1wX2xpbWJfdCBhaCwgYWwsIGJoLCBibDsKKyAgICAgIG1wX2xpbWJfdCBtYXNrOworCisgICAgICBtYXNrID0gYXBbbi0xXSB8IGJwW24tMV07CisgICAgICBBU1NFUlQgKG1hc2sgPiAwKTsKKworICAgICAgaWYgKG1hc2sgJiBHTVBfTlVNQl9ISUdIQklUKQorCXsKKwkgIGFoID0gYXBbbi0xXTsgYWwgPSBhcFtuLTJdOworCSAgYmggPSBicFtuLTFdOyBibCA9IGJwW24tMl07CisJfQorICAgICAgZWxzZQorCXsKKwkgIGludCBzaGlmdDsKKworCSAgY291bnRfbGVhZGluZ196ZXJvcyAoc2hpZnQsIG1hc2spOworCSAgYWggPSBNUE5fRVhUUkFDVF9OVU1CIChzaGlmdCwgYXBbbi0xXSwgYXBbbi0yXSk7CisJICBhbCA9IE1QTl9FWFRSQUNUX05VTUIgKHNoaWZ0LCBhcFtuLTJdLCBhcFtuLTNdKTsKKwkgIGJoID0gTVBOX0VYVFJBQ1RfTlVNQiAoc2hpZnQsIGJwW24tMV0sIGJwW24tMl0pOworCSAgYmwgPSBNUE5fRVhUUkFDVF9OVU1CIChzaGlmdCwgYnBbbi0yXSwgYnBbbi0zXSk7CisJfQorCisgICAgICAvKiBUcnkgYW4gbXBuX25oZ2NkMiBzdGVwICovCisgICAgICBpZiAobXBuX2hnY2QyX2phY29iaSAoYWgsIGFsLCBiaCwgYmwsICZNLCAmYml0cykpCisJeworCSAgbiA9IG1wbl9tYXRyaXgyMl9tdWwxX2ludmVyc2VfdmVjdG9yICgmTSwgdHAsIGFwLCBicCwgbik7CisJICBNUF9QVFJfU1dBUCAoYXAsIHRwKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgLyogbXBuX2hnY2QyIGhhcyBmYWlsZWQuIFRoZW4gZWl0aGVyIG9uZSBvZiBhIG9yIGIgaXMgdmVyeQorCSAgICAgc21hbGwsIG9yIHRoZSBkaWZmZXJlbmNlIGlzIHZlcnkgc21hbGwuIFBlcmZvcm0gb25lCisJICAgICBzdWJ0cmFjdGlvbiBmb2xsb3dlZCBieSBvbmUgZGl2aXNpb24uICovCisJICBuID0gbXBuX2djZF9zdWJkaXZfc3RlcCAoYXAsIGJwLCBuLCAwLCAmamFjb2JpX2hvb2ssICZiaXRzLCB0cCk7CisJICBpZiAoIW4pCisJICAgIHsKKwkgICAgICBUTVBfRlJFRTsKKwkgICAgICByZXR1cm4gYml0cyA9PSBCSVRTX0ZBSUwgPyAwIDogbXBuX2phY29iaV9maW5pc2ggKGJpdHMpOworCSAgICB9CisJfQorICAgIH0KKworICBpZiAoYml0cyA+PSAxNikKKyAgICBNUF9QVFJfU1dBUCAoYXAsIGJwKTsKKworICBBU1NFUlQgKGJwWzBdICYgMSk7CisKKyAgaWYgKG4gPT0gMSkKKyAgICB7CisgICAgICBtcF9saW1iX3QgYWwsIGJsOworICAgICAgYWwgPSBhcFswXTsKKyAgICAgIGJsID0gYnBbMF07CisKKyAgICAgIFRNUF9GUkVFOworICAgICAgaWYgKGJsID09IDEpCisJcmV0dXJuIDEgLSAyKihiaXRzICYgMSk7CisgICAgICBlbHNlCisJcmV0dXJuIG1wbl9qYWNvYmlfYmFzZSAoYWwsIGJsLCBiaXRzIDw8IDEpOworICAgIH0KKworICBlbHNlCisgICAgeworICAgICAgaW50IHJlcyA9IG1wbl9qYWNvYmlfMiAoYXAsIGJwLCBiaXRzICYgMSk7CisgICAgICBUTVBfRlJFRTsKKyAgICAgIHJldHVybiByZXM7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2phY29iaV8yLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvamFjb2JpXzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjhiOGE0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2phY29iaV8yLmMKQEAgLTAsMCArMSwzNTEgQEAKKy8qIGphY29iaV8yLmMKKworICAgVEhFIEZVTkNUSU9OUyBJTiBUSElTIEZJTEUgQVJFIElOVEVSTkFMIFdJVEggTVVUQUJMRSBJTlRFUkZBQ0VTLiAgSVQgSVMgT05MWQorICAgU0FGRSBUTyBSRUFDSCBUSEVNIFRIUk9VR0ggRE9DVU1FTlRFRCBJTlRFUkZBQ0VTLiAgSU4gRkFDVCwgSVQgSVMgQUxNT1NUCisgICBHVUFSQU5URUVEIFRIQVQgVEhFWSdMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEgRlVUVVJFIEdOVSBNUCBSRUxFQVNFLgorCitDb3B5cmlnaHQgMTk5NiwgMTk5OCwgMjAwMC0yMDA0LCAyMDA4LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKyNpbmNsdWRlICJsb25nbG9uZy5oIgorCisjaWZuZGVmIEpBQ09CSV8yX01FVEhPRAorI2RlZmluZSBKQUNPQklfMl9NRVRIT0QgMgorI2VuZGlmCisKKy8qIENvbXB1dGVzIChhIC8gYikgd2hlcmUgYiBpcyBvZGQsIGFuZCBhIGFuZCBiIGFyZSBvdGhlcndpc2UgYXJiaXRyYXJ5CisgICB0d28tbGltYiBudW1iZXJzLiAqLworI2lmIEpBQ09CSV8yX01FVEhPRCA9PSAxCitpbnQKK21wbl9qYWNvYmlfMiAobXBfc3JjcHRyIGFwLCBtcF9zcmNwdHIgYnAsIHVuc2lnbmVkIGJpdCkKK3sKKyAgbXBfbGltYl90IGFoLCBhbCwgYmgsIGJsOworICBpbnQgYzsKKworICBhbCA9IGFwWzBdOworICBhaCA9IGFwWzFdOworICBibCA9IGJwWzBdOworICBiaCA9IGJwWzFdOworCisgIEFTU0VSVCAoYmwgJiAxKTsKKworICBibCA9ICgoYmggPDwgKEdNUF9OVU1CX0JJVFMgLSAxKSkgJiBHTVBfTlVNQl9NQVNLKSB8IChibCA+PiAxKTsKKyAgYmggPj49IDE7CisKKyAgaWYgKCAoYmggfCBibCkgPT0gMCkKKyAgICByZXR1cm4gMSAtIDIqKGJpdCAmIDEpOworCisgIGlmICggKGFoIHwgYWwpID09IDApCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKGFsID09IDApCisgICAgeworICAgICAgYWwgPSBhaDsKKyAgICAgIGFoID0gMDsKKyAgICAgIGJpdCBePSBHTVBfTlVNQl9CSVRTICYgKGJsIF4gKGJsID4+IDEpKTsKKyAgICB9CisgIGNvdW50X3RyYWlsaW5nX3plcm9zIChjLCBhbCk7CisgIGJpdCBePSBjICYgKGJsIF4gKGJsID4+IDEpKTsKKworICBjKys7CisgIGlmIChVTkxJS0VMWSAoYyA9PSBHTVBfTlVNQl9CSVRTKSkKKyAgICB7CisgICAgICBhbCA9IGFoOworICAgICAgYWggPSAwOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGFsID0gKChhaCA8PCAoR01QX05VTUJfQklUUyAtIGMpKSAmIEdNUF9OVU1CX01BU0spIHwgKGFsID4+IGMpOworICAgICAgYWggPj49IGM7CisgICAgfQorICB3aGlsZSAoIChhaCB8IGJoKSA+IDApCisgICAgeworICAgICAgbXBfbGltYl90IHRoLCB0bDsKKyAgICAgIG1wX2xpbWJfdCBiZ3RhOworCisgICAgICBzdWJfZGRtbXNzICh0aCwgdGwsIGFoLCBhbCwgYmgsIGJsKTsKKyAgICAgIGlmICggKHRsIHwgdGgpID09IDApCisJcmV0dXJuIDA7CisKKyAgICAgIGJndGEgPSBMSU1CX0hJR0hCSVRfVE9fTUFTSyAodGgpOworCisgICAgICAvKiBJZiBiID4gYSwgaW52b2tlIHJlY2lwcm9jaXR5ICovCisgICAgICBiaXQgXj0gKGJndGEgJiBhbCAmIGJsKTsKKworICAgICAgLyogYiA8LS0gbWluIChhLCBiKSAqLworICAgICAgYWRkX3NzYWFhYSAoYmgsIGJsLCBiaCwgYmwsIHRoICYgYmd0YSwgdGwgJiBiZ3RhKTsKKworICAgICAgaWYgKCAoYmggfCBibCkgPT0gMCkKKwlyZXR1cm4gMSAtIDIqKGJpdCAmIDEpOworCisgICAgICAvKiBhIDwtLSB8YSAtIGJ8ICovCisgICAgICBhbCA9IChiZ3RhIF4gdGwpIC0gYmd0YTsKKyAgICAgIGFoID0gKGJndGEgXiB0aCk7CisKKyAgICAgIGlmIChVTkxJS0VMWSAoYWwgPT0gMCkpCisJeworCSAgLyogSWYgYiA+IGEsIGFsID09IDAgaW1wbGllcyB0aGF0IHdlIGhhdmUgYSBjYXJyeSB0bworCSAgICAgcHJvcGFnYXRlLiAqLworCSAgYWwgPSBhaCAtIGJndGE7CisJICBhaCA9IDA7CisJICBiaXQgXj0gR01QX05VTUJfQklUUyAmIChibCBeIChibCA+PiAxKSk7CisJfQorICAgICAgY291bnRfdHJhaWxpbmdfemVyb3MgKGMsIGFsKTsKKyAgICAgIGMrKzsKKyAgICAgIGJpdCBePSBjICYgKGJsIF4gKGJsID4+IDEpKTsKKworICAgICAgaWYgKFVOTElLRUxZIChjID09IEdNUF9OVU1CX0JJVFMpKQorCXsKKwkgIGFsID0gYWg7CisJICBhaCA9IDA7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGFsID0gKChhaCA8PCAoR01QX05VTUJfQklUUyAtIGMpKSAmIEdNUF9OVU1CX01BU0spIHwgKGFsID4+IGMpOworCSAgYWggPj49IGM7CisJfQorICAgIH0KKworICBBU1NFUlQgKGJsID4gMCk7CisKKyAgd2hpbGUgKCAoYWwgfCBibCkgJiBHTVBfTElNQl9ISUdIQklUKQorICAgIHsKKyAgICAgIC8qIE5lZWQgYW4gZXh0cmEgY29tcGFyaXNvbiB0byBnZXQgdGhlIG1hc2suICovCisgICAgICBtcF9saW1iX3QgdCA9IGFsIC0gYmw7CisgICAgICBtcF9saW1iX3QgYmd0YSA9IC0gKGJsID4gYWwpOworCisgICAgICBpZiAodCA9PSAwKQorCXJldHVybiAwOworCisgICAgICAvKiBJZiBiID4gYSwgaW52b2tlIHJlY2lwcm9jaXR5ICovCisgICAgICBiaXQgXj0gKGJndGEgJiBhbCAmIGJsKTsKKworICAgICAgLyogYiA8LS0gbWluIChhLCBiKSAqLworICAgICAgYmwgKz0gKGJndGEgJiB0KTsKKworICAgICAgLyogYSA8LS0gfGEgLSBifCAqLworICAgICAgYWwgPSAodCBeIGJndGEpIC0gYmd0YTsKKworICAgICAgLyogTnVtYmVyIG9mIHRyYWlsaW5nIHplcm9zIGlzIHRoZSBzYW1lIG5vIG1hdHRlciBpZiB3ZSBsb29rIGF0CisgICAgICAgKiB0IG9yIGEsIGJ1dCB1c2luZyB0IGdpdmVzIG1vcmUgcGFyYWxsZWxpc20uICovCisgICAgICBjb3VudF90cmFpbGluZ196ZXJvcyAoYywgdCk7CisgICAgICBjICsrOworICAgICAgLyogKDIvYikgPSAtMSBpZiBiID0gMyBvciA1IG1vZCA4ICovCisgICAgICBiaXQgXj0gYyAmIChibCBeIChibCA+PiAxKSk7CisKKyAgICAgIGlmIChVTkxJS0VMWSAoYyA9PSBHTVBfTlVNQl9CSVRTKSkKKwlyZXR1cm4gMSAtIDIqKGJpdCAmIDEpOworCisgICAgICBhbCA+Pj0gYzsKKyAgICB9CisKKyAgLyogSGVyZSB3ZSBoYXZlIGEgbGl0dGxlIGltcGVkYW5jZSBtaXNtYXRjaC4gQmV0dGVyIHRvIGlubGluZSBpdD8gKi8KKyAgcmV0dXJuIG1wbl9qYWNvYmlfYmFzZSAoMiphbCsxLCAyKmJsKzEsIGJpdCA8PCAxKTsKK30KKyNlbGlmIEpBQ09CSV8yX01FVEhPRCA9PSAyCitpbnQKK21wbl9qYWNvYmlfMiAobXBfc3JjcHRyIGFwLCBtcF9zcmNwdHIgYnAsIHVuc2lnbmVkIGJpdCkKK3sKKyAgbXBfbGltYl90IGFoLCBhbCwgYmgsIGJsOworICBpbnQgYzsKKworICBhbCA9IGFwWzBdOworICBhaCA9IGFwWzFdOworICBibCA9IGJwWzBdOworICBiaCA9IGJwWzFdOworCisgIEFTU0VSVCAoYmwgJiAxKTsKKworICAvKiBVc2UgYml0IDEuICovCisgIGJpdCA8PD0gMTsKKworICBpZiAoYmggPT0gMCAmJiBibCA9PSAxKQorICAgIC8qIChhfDEpID0gMSAqLworICAgIHJldHVybiAxIC0gKGJpdCAmIDIpOworCisgIGlmIChhbCA9PSAwKQorICAgIHsKKyAgICAgIGlmIChhaCA9PSAwKQorCS8qICgwfGIpID0gMCwgYiA+IDEgKi8KKwlyZXR1cm4gMDsKKworICAgICAgY291bnRfdHJhaWxpbmdfemVyb3MgKGMsIGFoKTsKKyAgICAgIGJpdCBePSAoKEdNUF9OVU1CX0JJVFMgKyBjKSA8PCAxKSAmIChibCBeIChibCA+PiAxKSk7CisKKyAgICAgIGFsID0gYmw7CisgICAgICBibCA9IGFoID4+IGM7CisKKyAgICAgIGlmIChibCA9PSAxKQorCS8qICgxfGIpID0gMSAqLworCXJldHVybiAxIC0gKGJpdCAmIDIpOworCisgICAgICBhaCA9IGJoOworCisgICAgICBiaXQgXj0gYWwgJiBibDsKKworICAgICAgZ290byBiX3JlZHVjZWQ7CisgICAgfQorICBpZiAoIChhbCAmIDEpID09IDApCisgICAgeworICAgICAgY291bnRfdHJhaWxpbmdfemVyb3MgKGMsIGFsKTsKKworICAgICAgYWwgPSAoKGFoIDw8IChHTVBfTlVNQl9CSVRTIC0gYykpICYgR01QX05VTUJfTUFTSykgfCAoYWwgPj4gYyk7CisgICAgICBhaCA+Pj0gYzsKKyAgICAgIGJpdCBePSAoYyA8PCAxKSAmIChibCBeIChibCA+PiAxKSk7CisgICAgfQorICBpZiAoYWggPT0gMCkKKyAgICB7CisgICAgICBpZiAoYmggPiAwKQorCXsKKwkgIGJpdCBePSBhbCAmIGJsOworCSAgTVBfTElNQl9UX1NXQVAgKGFsLCBibCk7CisJICBhaCA9IGJoOworCSAgZ290byBiX3JlZHVjZWQ7CisJfQorICAgICAgZ290byBhYl9yZWR1Y2VkOworICAgIH0KKworICB3aGlsZSAoYmggPiAwKQorICAgIHsKKyAgICAgIC8qIENvbXB1dGUgKGF8YikgKi8KKyAgICAgIHdoaWxlIChhaCA+IGJoKQorCXsKKwkgIHN1Yl9kZG1tc3MgKGFoLCBhbCwgYWgsIGFsLCBiaCwgYmwpOworCSAgaWYgKGFsID09IDApCisJICAgIHsKKwkgICAgICBjb3VudF90cmFpbGluZ196ZXJvcyAoYywgYWgpOworCSAgICAgIGJpdCBePSAoKEdNUF9OVU1CX0JJVFMgKyBjKSA8PCAxKSAmIChibCBeIChibCA+PiAxKSk7CisKKwkgICAgICBhbCA9IGJsOworCSAgICAgIGJsID0gYWggPj4gYzsKKwkgICAgICBhaCA9IGJoOworCisJICAgICAgYml0IF49IGFsICYgYmw7CisJICAgICAgZ290byBiX3JlZHVjZWQ7CisJICAgIH0KKwkgIGNvdW50X3RyYWlsaW5nX3plcm9zIChjLCBhbCk7CisJICBiaXQgXj0gKGMgPDwgMSkgJiAoYmwgXiAoYmwgPj4gMSkpOworCSAgYWwgPSAoKGFoIDw8IChHTVBfTlVNQl9CSVRTIC0gYykpICYgR01QX05VTUJfTUFTSykgfCAoYWwgPj4gYyk7CisJICBhaCA+Pj0gYzsKKwl9CisgICAgICBpZiAoYWggPT0gYmgpCisJZ290byBjYW5jZWxfaGk7CisKKyAgICAgIGlmIChhaCA9PSAwKQorCXsKKwkgIGJpdCBePSBhbCAmIGJsOworCSAgTVBfTElNQl9UX1NXQVAgKGFsLCBibCk7CisJICBhaCA9IGJoOworCSAgYnJlYWs7CisJfQorCisgICAgICBiaXQgXj0gYWwgJiBibDsKKworICAgICAgLyogQ29tcHV0ZSAoYnxhKSAqLworICAgICAgd2hpbGUgKGJoID4gYWgpCisJeworCSAgc3ViX2RkbW1zcyAoYmgsIGJsLCBiaCwgYmwsIGFoLCBhbCk7CisJICBpZiAoYmwgPT0gMCkKKwkgICAgeworCSAgICAgIGNvdW50X3RyYWlsaW5nX3plcm9zIChjLCBiaCk7CisJICAgICAgYml0IF49ICgoR01QX05VTUJfQklUUyArIGMpIDw8IDEpICYgKGFsIF4gKGFsID4+IDEpKTsKKworCSAgICAgIGJsID0gYmggPj4gYzsKKwkgICAgICBiaXQgXj0gYWwgJiBibDsKKwkgICAgICBnb3RvIGJfcmVkdWNlZDsKKwkgICAgfQorCSAgY291bnRfdHJhaWxpbmdfemVyb3MgKGMsIGJsKTsKKwkgIGJpdCBePSAoYyA8PCAxKSAmIChhbCBeIChhbCA+PiAxKSk7CisJICBibCA9ICgoYmggPDwgKEdNUF9OVU1CX0JJVFMgLSBjKSkgJiBHTVBfTlVNQl9NQVNLKSB8IChibCA+PiBjKTsKKwkgIGJoID4+PSBjOworCX0KKyAgICAgIGJpdCBePSBhbCAmIGJsOworCisgICAgICAvKiBDb21wdXRlIChhfGIpICovCisgICAgICBpZiAoYWggPT0gYmgpCisJeworCWNhbmNlbF9oaToKKwkgIGlmIChhbCA8IGJsKQorCSAgICB7CisJICAgICAgTVBfTElNQl9UX1NXQVAgKGFsLCBibCk7CisJICAgICAgYml0IF49IGFsICYgYmw7CisJICAgIH0KKwkgIGFsIC09IGJsOworCSAgaWYgKGFsID09IDApCisJICAgIHJldHVybiAwOworCisJICBjb3VudF90cmFpbGluZ196ZXJvcyAoYywgYWwpOworCSAgYml0IF49IChjIDw8IDEpICYgKGJsIF4gKGJsID4+IDEpKTsKKwkgIGFsID4+PSBjOworCisJICBpZiAoYWwgPT0gMSkKKwkgICAgcmV0dXJuIDEgLSAoYml0ICYgMik7CisKKwkgIE1QX0xJTUJfVF9TV0FQIChhbCwgYmwpOworCSAgYml0IF49IGFsICYgYmw7CisJICBicmVhazsKKwl9CisgICAgfQorCisgYl9yZWR1Y2VkOgorICAvKiBDb21wdXRlIChhfGIpLCB3aXRoIGIgYSBzaW5nbGUgbGltYi4gKi8KKyAgQVNTRVJUIChibCAmIDEpOworCisgIGlmIChibCA9PSAxKQorICAgIC8qIChhfDEpID0gMSAqLworICAgIHJldHVybiAxIC0gKGJpdCAmIDIpOworCisgIHdoaWxlIChhaCA+IDApCisgICAgeworICAgICAgYWggLT0gKGFsIDwgYmwpOworICAgICAgYWwgLT0gYmw7CisgICAgICBpZiAoYWwgPT0gMCkKKwl7CisJICBpZiAoYWggPT0gMCkKKwkgICAgcmV0dXJuIDA7CisJICBjb3VudF90cmFpbGluZ196ZXJvcyAoYywgYWgpOworCSAgYml0IF49ICgoR01QX05VTUJfQklUUyArIGMpIDw8IDEpICYgKGJsIF4gKGJsID4+IDEpKTsKKwkgIGFsID0gYWggPj4gYzsKKwkgIGdvdG8gYWJfcmVkdWNlZDsKKwl9CisgICAgICBjb3VudF90cmFpbGluZ196ZXJvcyAoYywgYWwpOworCisgICAgICBhbCA9ICgoYWggPDwgKEdNUF9OVU1CX0JJVFMgLSBjKSkgJiBHTVBfTlVNQl9NQVNLKSB8IChhbCA+PiBjKTsKKyAgICAgIGFoID4+PSBjOworICAgICAgYml0IF49IChjIDw8IDEpICYgKGJsIF4gKGJsID4+IDEpKTsKKyAgICB9CisgYWJfcmVkdWNlZDoKKyAgQVNTRVJUIChibCAmIDEpOworICBBU1NFUlQgKGJsID4gMSk7CisKKyAgcmV0dXJuIG1wbl9qYWNvYmlfYmFzZSAoYWwsIGJsLCBiaXQpOworfQorI2Vsc2UKKyNlcnJvciBVbnN1cHBvcnRlZCB2YWx1ZSBmb3IgSkFDT0JJXzJfTUVUSE9ECisjZW5kaWYKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9sb2dvcHNfbi5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2xvZ29wc19uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FkYmEyYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9sb2dvcHNfbi5jCkBAIC0wLDAgKzEsNzcgQEAKKy8qIG1wbl9hbmRfbiwgbXBuX2lvcl9uLCBldGMgLS0gbXBuIGxvZ2ljYWwgb3BlcmF0aW9ucy4KKworQ29weXJpZ2h0IDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCisjaWZkZWYgT1BFUkFUSU9OX2FuZF9uCisjZGVmaW5lIGZ1bmMgX19NUE4oYW5kX24pCisjZGVmaW5lIGNhbGwgbXBuX2FuZF9uCisjZW5kaWYKKworI2lmZGVmIE9QRVJBVElPTl9hbmRuX24KKyNkZWZpbmUgZnVuYyBfX01QTihhbmRuX24pCisjZGVmaW5lIGNhbGwgbXBuX2FuZG5fbgorI2VuZGlmCisKKyNpZmRlZiBPUEVSQVRJT05fbmFuZF9uCisjZGVmaW5lIGZ1bmMgX19NUE4obmFuZF9uKQorI2RlZmluZSBjYWxsIG1wbl9uYW5kX24KKyNlbmRpZgorCisjaWZkZWYgT1BFUkFUSU9OX2lvcl9uCisjZGVmaW5lIGZ1bmMgX19NUE4oaW9yX24pCisjZGVmaW5lIGNhbGwgbXBuX2lvcl9uCisjZW5kaWYKKworI2lmZGVmIE9QRVJBVElPTl9pb3JuX24KKyNkZWZpbmUgZnVuYyBfX01QTihpb3JuX24pCisjZGVmaW5lIGNhbGwgbXBuX2lvcm5fbgorI2VuZGlmCisKKyNpZmRlZiBPUEVSQVRJT05fbmlvcl9uCisjZGVmaW5lIGZ1bmMgX19NUE4obmlvcl9uKQorI2RlZmluZSBjYWxsIG1wbl9uaW9yX24KKyNlbmRpZgorCisjaWZkZWYgT1BFUkFUSU9OX3hvcl9uCisjZGVmaW5lIGZ1bmMgX19NUE4oeG9yX24pCisjZGVmaW5lIGNhbGwgbXBuX3hvcl9uCisjZW5kaWYKKworI2lmZGVmIE9QRVJBVElPTl94bm9yX24KKyNkZWZpbmUgZnVuYyBfX01QTih4bm9yX24pCisjZGVmaW5lIGNhbGwgbXBuX3hub3JfbgorI2VuZGlmCisKK3ZvaWQKK2Z1bmMgKG1wX3B0ciBycCwgbXBfc3JjcHRyIHVwLCBtcF9zcmNwdHIgdnAsIG1wX3NpemVfdCBuKQoreworICBjYWxsIChycCwgdXAsIHZwLCBuKTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9sc2hpZnQuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9sc2hpZnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTFmZGVmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2xzaGlmdC5jCkBAIC0wLDAgKzEsNzIgQEAKKy8qIG1wbl9sc2hpZnQgLS0gU2hpZnQgbGVmdCBsb3cgbGV2ZWwuCisKK0NvcHlyaWdodCAxOTkxLCAxOTkzLCAxOTk0LCAxOTk2LCAyMDAwLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCisvKiBTaGlmdCBVIChwb2ludGVkIHRvIGJ5IHVwIGFuZCBuIGxpbWJzIGxvbmcpIGNudCBiaXRzIHRvIHRoZSBsZWZ0CisgICBhbmQgc3RvcmUgdGhlIG4gbGVhc3Qgc2lnbmlmaWNhbnQgbGltYnMgb2YgdGhlIHJlc3VsdCBhdCBycC4KKyAgIFJldHVybiB0aGUgYml0cyBzaGlmdGVkIG91dCBmcm9tIHRoZSBtb3N0IHNpZ25pZmljYW50IGxpbWIuCisKKyAgIEFyZ3VtZW50IGNvbnN0cmFpbnRzOgorICAgMS4gMCA8IGNudCA8IEdNUF9OVU1CX0JJVFMuCisgICAyLiBJZiB0aGUgcmVzdWx0IGlzIHRvIGJlIHdyaXR0ZW4gb3ZlciB0aGUgaW5wdXQsIHJwIG11c3QgYmUgPj0gdXAuCisqLworCittcF9saW1iX3QKK21wbl9sc2hpZnQgKG1wX3B0ciBycCwgbXBfc3JjcHRyIHVwLCBtcF9zaXplX3QgbiwgdW5zaWduZWQgaW50IGNudCkKK3sKKyAgbXBfbGltYl90IGhpZ2hfbGltYiwgbG93X2xpbWI7CisgIHVuc2lnbmVkIGludCB0bmM7CisgIG1wX3NpemVfdCBpOworICBtcF9saW1iX3QgcmV0dmFsOworCisgIEFTU0VSVCAobiA+PSAxKTsKKyAgQVNTRVJUIChjbnQgPj0gMSk7CisgIEFTU0VSVCAoY250IDwgR01QX05VTUJfQklUUyk7CisgIEFTU0VSVCAoTVBOX1NBTUVfT1JfREVDUl9QIChycCwgdXAsIG4pKTsKKworICB1cCArPSBuOworICBycCArPSBuOworCisgIHRuYyA9IEdNUF9OVU1CX0JJVFMgLSBjbnQ7CisgIGxvd19saW1iID0gKi0tdXA7CisgIHJldHZhbCA9IGxvd19saW1iID4+IHRuYzsKKyAgaGlnaF9saW1iID0gKGxvd19saW1iIDw8IGNudCkgJiBHTVBfTlVNQl9NQVNLOworCisgIGZvciAoaSA9IG4gLSAxOyBpICE9IDA7IGktLSkKKyAgICB7CisgICAgICBsb3dfbGltYiA9ICotLXVwOworICAgICAgKi0tcnAgPSBoaWdoX2xpbWIgfCAobG93X2xpbWIgPj4gdG5jKTsKKyAgICAgIGhpZ2hfbGltYiA9IChsb3dfbGltYiA8PCBjbnQpICYgR01QX05VTUJfTUFTSzsKKyAgICB9CisgICotLXJwID0gaGlnaF9saW1iOworCisgIHJldHVybiByZXR2YWw7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvbHNoaWZ0Yy5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2xzaGlmdGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTgzNjAyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL2xzaGlmdGMuYwpAQCAtMCwwICsxLDczIEBACisvKiBtcG5fbHNoaWZ0YyAtLSBTaGlmdCBsZWZ0IGxvdyBsZXZlbCB3aXRoIGNvbXBsZW1lbnQuCisKK0NvcHlyaWdodCAxOTkxLCAxOTkzLCAxOTk0LCAxOTk2LCAyMDAwLTIwMDIsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworLyogU2hpZnQgVSAocG9pbnRlZCB0byBieSB1cCBhbmQgbiBsaW1icyBsb25nKSBjbnQgYml0cyB0byB0aGUgbGVmdAorICAgYW5kIHN0b3JlIHRoZSBuIGxlYXN0IHNpZ25pZmljYW50IGxpbWJzIG9mIHRoZSByZXN1bHQgYXQgcnAuCisgICBSZXR1cm4gdGhlIGJpdHMgc2hpZnRlZCBvdXQgZnJvbSB0aGUgbW9zdCBzaWduaWZpY2FudCBsaW1iLgorCisgICBBcmd1bWVudCBjb25zdHJhaW50czoKKyAgIDEuIDAgPCBjbnQgPCBHTVBfTlVNQl9CSVRTLgorICAgMi4gSWYgdGhlIHJlc3VsdCBpcyB0byBiZSB3cml0dGVuIG92ZXIgdGhlIGlucHV0LCBycCBtdXN0IGJlID49IHVwLgorKi8KKworbXBfbGltYl90CittcG5fbHNoaWZ0YyAobXBfcHRyIHJwLCBtcF9zcmNwdHIgdXAsIG1wX3NpemVfdCBuLCB1bnNpZ25lZCBpbnQgY250KQoreworICBtcF9saW1iX3QgaGlnaF9saW1iLCBsb3dfbGltYjsKKyAgdW5zaWduZWQgaW50IHRuYzsKKyAgbXBfc2l6ZV90IGk7CisgIG1wX2xpbWJfdCByZXR2YWw7CisKKyAgQVNTRVJUIChuID49IDEpOworICBBU1NFUlQgKGNudCA+PSAxKTsKKyAgQVNTRVJUIChjbnQgPCBHTVBfTlVNQl9CSVRTKTsKKyAgQVNTRVJUIChNUE5fU0FNRV9PUl9ERUNSX1AgKHJwLCB1cCwgbikpOworCisgIHVwICs9IG47CisgIHJwICs9IG47CisKKyAgdG5jID0gR01QX05VTUJfQklUUyAtIGNudDsKKyAgbG93X2xpbWIgPSAqLS11cDsKKyAgcmV0dmFsID0gbG93X2xpbWIgPj4gdG5jOworICBoaWdoX2xpbWIgPSAobG93X2xpbWIgPDwgY250KTsKKworICBmb3IgKGkgPSBuIC0gMTsgaSAhPSAwOyBpLS0pCisgICAgeworICAgICAgbG93X2xpbWIgPSAqLS11cDsKKyAgICAgICotLXJwID0gKH4oaGlnaF9saW1iIHwgKGxvd19saW1iID4+IHRuYykpKSAmIEdNUF9OVU1CX01BU0s7CisgICAgICBoaWdoX2xpbWIgPSBsb3dfbGltYiA8PCBjbnQ7CisgICAgfQorICAqLS1ycCA9ICh+aGlnaF9saW1iKSAmIEdNUF9OVU1CX01BU0s7CisKKyAgcmV0dXJuIHJldHZhbDsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9tYXRyaXgyMl9tdWwuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9tYXRyaXgyMl9tdWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTEyOTlhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL21hdHJpeDIyX211bC5jCkBAIC0wLDAgKzEsMzIxIEBACisvKiBtYXRyaXgyMl9tdWwuYy4KKworICAgQ29udHJpYnV0ZWQgYnkgTmllbHMgTcO2bGxlciBhbmQgTWFyY28gQm9kcmF0by4KKworICAgVEhFIEZVTkNUSU9OUyBJTiBUSElTIEZJTEUgQVJFIElOVEVSTkFMIFdJVEggTVVUQUJMRSBJTlRFUkZBQ0VTLiAgSVQgSVMgT05MWQorICAgU0FGRSBUTyBSRUFDSCBUSEVNIFRIUk9VR0ggRE9DVU1FTlRFRCBJTlRFUkZBQ0VTLiAgSU4gRkFDVCwgSVQgSVMgQUxNT1NUCisgICBHVUFSQU5URUVEIFRIQVQgVEhFWSdMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEgRlVUVVJFIEdOVSBNUCBSRUxFQVNFLgorCitDb3B5cmlnaHQgMjAwMy0yMDA1LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKyNpbmNsdWRlICJsb25nbG9uZy5oIgorCisjZGVmaW5lIE1VTChycCwgYXAsIGFuLCBicCwgYm4pIGRvIHsJCVwKKyAgaWYgKGFuID49IGJuKQkJCQkJXAorICAgIG1wbl9tdWwgKHJwLCBhcCwgYW4sIGJwLCBibik7CQlcCisgIGVsc2UJCQkJCQlcCisgICAgbXBuX211bCAocnAsIGJwLCBibiwgYXAsIGFuKTsJCVwKK30gd2hpbGUgKDApCisKKy8qIElucHV0cyBhcmUgdW5zaWduZWQuICovCitzdGF0aWMgaW50CithYnNfc3ViX24gKG1wX3B0ciBycCwgbXBfc3JjcHRyIGFwLCBtcF9zcmNwdHIgYnAsIG1wX3NpemVfdCBuKQoreworICBpbnQgYzsKKyAgTVBOX0NNUCAoYywgYXAsIGJwLCBuKTsKKyAgaWYgKGMgPj0gMCkKKyAgICB7CisgICAgICBtcG5fc3ViX24gKHJwLCBhcCwgYnAsIG4pOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgbXBuX3N1Yl9uIChycCwgYnAsIGFwLCBuKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KK30KKworc3RhdGljIGludAorYWRkX3NpZ25lZF9uIChtcF9wdHIgcnAsCisJICAgICAgbXBfc3JjcHRyIGFwLCBpbnQgYXMsIG1wX3NyY3B0ciBicCwgaW50IGJzLCBtcF9zaXplX3QgbikKK3sKKyAgaWYgKGFzICE9IGJzKQorICAgIHJldHVybiBhcyBeIGFic19zdWJfbiAocnAsIGFwLCBicCwgbik7CisgIGVsc2UKKyAgICB7CisgICAgICBBU1NFUlRfTk9DQVJSWSAobXBuX2FkZF9uIChycCwgYXAsIGJwLCBuKSk7CisgICAgICByZXR1cm4gYXM7CisgICAgfQorfQorCittcF9zaXplX3QKK21wbl9tYXRyaXgyMl9tdWxfaXRjaCAobXBfc2l6ZV90IHJuLCBtcF9zaXplX3QgbW4pCit7CisgIGlmIChCRUxPV19USFJFU0hPTEQgKHJuLCBNQVRSSVgyMl9TVFJBU1NFTl9USFJFU0hPTEQpCisgICAgICB8fCBCRUxPV19USFJFU0hPTEQgKG1uLCBNQVRSSVgyMl9TVFJBU1NFTl9USFJFU0hPTEQpKQorICAgIHJldHVybiAzKnJuICsgMiptbjsKKyAgZWxzZQorICAgIHJldHVybiAzKihybiArIG1uKSArIDU7Cit9CisKKy8qIEFsZ29yaXRobToKKworICAgIC8gczAgXCAgIC8gIDEgIDAgIDAgIDAgXCAvIHIwIFwKKyAgICB8IHMxIHwgICB8ICAwICAxICAwICAxIHwgfCByMSB8CisgICAgfCBzMiB8ICAgfCAgMCAgMCAtMSAgMSB8IHwgcjIgfAorICAgIHwgczMgfCA9IHwgIDAgIDEgLTEgIDEgfCBcIHIzIC8KKyAgICB8IHM0IHwgICB8IC0xICAxIC0xICAxIHwKKyAgICB8IHM1IHwgICB8ICAwICAxICAwICAwIHwKKyAgICBcIHM2IC8gICBcICAwICAwICAxICAwIC8KKworICAgIC8gdDAgXCAgIC8gIDEgIDAgIDAgIDAgXCAvIG0wIFwKKyAgICB8IHQxIHwgICB8ICAwICAxICAwICAxIHwgfCBtMSB8CisgICAgfCB0MiB8ICAgfCAgMCAgMCAtMSAgMSB8IHwgbTIgfAorICAgIHwgdDMgfCA9IHwgIDAgIDEgLTEgIDEgfCBcIG0zIC8KKyAgICB8IHQ0IHwgICB8IC0xICAxIC0xICAxIHwKKyAgICB8IHQ1IHwgICB8ICAwICAxICAwICAwIHwKKyAgICBcIHQ2IC8gICBcICAwICAwICAxICAwIC8KKworICBOb3RlOiB0aGUgdHdvIG1hdHJpY2VzIGFib3ZlIGFyZSB0aGUgc2FtZSwgYnV0IHNfaSBhbmQgdF9pIGFyZSB1c2VkCisgIGluIHRoZSBzYW1lIHByb2R1Y3QsIG9ubHkgZm9yIGk8NCwgc2VlICJBIFN0cmFzc2VuLWxpa2UgTWF0cml4CisgIE11bHRpcGxpY2F0aW9uIHN1aXRlZCBmb3Igc3F1YXJpbmcgYW5kIGhpZ2hlciBwb3dlciBjb21wdXRhdGlvbiIgYnkKKyAgTS4gQm9kcmF0bywgaW4gUHJvY2VlZGluZ3Mgb2YgSVNTQUMgMjAxMC4KKworICAgIC8gcjAgXCAgIC8gMSAwICAwICAwICAwICAxICAwIFwgLyBzMCp0MCBcCisgICAgfCByMSB8ID0gfCAwIDAgLTEgIDEgLTEgIDEgIDAgfCB8IHMxKnQxIHwKKyAgICB8IHIyIHwgICB8IDAgMSAgMCAtMSAgMCAtMSAtMSB8IHwgczIqdDIgfAorICAgIFwgcjMgLyAgIFwgMCAxICAxIC0xICAwIC0xICAwIC8gfCBzMyp0MyB8CisJCQkJICAgIHwgczQqdDUgfAorCQkJCSAgICB8IHM1KnQ2IHwKKwkJCQkgICAgXCBzNip0NCAvCisKKyAgVGhlIHNjaGVkdWxpbmcgdXNlcyB0d28gdGVtcG9yYXJpZXMgVTAgYW5kIFUxIHRvIHN0b3JlIHByb2R1Y3RzLCBhbmQKKyAgdHdvLCBTMCBhbmQgVDAsIHRvIHN0b3JlIGNvbWJpbmF0aW9ucyBvZiBlbnRyaWVzIG9mIHRoZSB0d28KKyAgb3BlcmFuZHMuCisqLworCisvKiBDb21wdXRlcyBSID0gUiAqIE0uIEVsZW1lbnRzIGFyZSBudW1iZXJzIFIgPSAocjAsIHIxOyByMiwgcjMpLgorICoKKyAqIFJlc3VsdGluZyBlbGVtZW50cyBhcmUgb2Ygc2l6ZSB1cCB0byBybiArIG1uICsgMS4KKyAqCisgKiBUZW1wb3Jhcnkgc3RvcmFnZTogMyBybiArIDMgbW4gKyA1LiAqLworc3RhdGljIHZvaWQKK21wbl9tYXRyaXgyMl9tdWxfc3RyYXNzZW4gKG1wX3B0ciByMCwgbXBfcHRyIHIxLCBtcF9wdHIgcjIsIG1wX3B0ciByMywgbXBfc2l6ZV90IHJuLAorCQkJICAgbXBfc3JjcHRyIG0wLCBtcF9zcmNwdHIgbTEsIG1wX3NyY3B0ciBtMiwgbXBfc3JjcHRyIG0zLCBtcF9zaXplX3QgbW4sCisJCQkgICBtcF9wdHIgdHApCit7CisgIG1wX3B0ciBzMCwgdDAsIHUwLCB1MTsKKyAgaW50IHIxcywgcjNzLCBzMHMsIHQwcywgdTFzOworICBzMCA9IHRwOyB0cCArPSBybiArIDE7CisgIHQwID0gdHA7IHRwICs9IG1uICsgMTsKKyAgdTAgPSB0cDsgdHAgKz0gcm4gKyBtbiArIDE7CisgIHUxID0gdHA7IC8qIHJuICsgbW4gKyAyICovCisKKyAgTVVMICh1MCwgcjEsIHJuLCBtMiwgbW4pOwkJLyogdTUgPSBzNSAqIHQ2ICovCisgIHIzcyA9IGFic19zdWJfbiAocjMsIHIzLCByMiwgcm4pOwkvKiByMyAtIHIyICovCisgIGlmIChyM3MpCisgICAgeworICAgICAgcjFzID0gYWJzX3N1Yl9uIChyMSwgcjEsIHIzLCBybik7CisgICAgICByMVtybl0gPSAwOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHIxW3JuXSA9IG1wbl9hZGRfbiAocjEsIHIxLCByMywgcm4pOworICAgICAgcjFzID0gMDsJCQkJLyogcjEgLSByMiArIHIzICAqLworICAgIH0KKyAgaWYgKHIxcykKKyAgICB7CisgICAgICBzMFtybl0gPSBtcG5fYWRkX24gKHMwLCByMSwgcjAsIHJuKTsKKyAgICAgIHMwcyA9IDA7CisgICAgfQorICBlbHNlIGlmIChyMVtybl0gIT0gMCkKKyAgICB7CisgICAgICBzMFtybl0gPSByMVtybl0gLSBtcG5fc3ViX24gKHMwLCByMSwgcjAsIHJuKTsKKyAgICAgIHMwcyA9IDE7CQkJCS8qIHM0ID0gLXIwICsgcjEgLSByMiArIHIzICovCisJCQkJCS8qIFJldmVyc2Ugc2lnbiEgKi8KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBzMHMgPSBhYnNfc3ViX24gKHMwLCByMCwgcjEsIHJuKTsKKyAgICAgIHMwW3JuXSA9IDA7CisgICAgfQorICBNVUwgKHUxLCByMCwgcm4sIG0wLCBtbik7CQkvKiB1MCA9IHMwICogdDAgKi8KKyAgcjBbcm4rbW5dID0gbXBuX2FkZF9uIChyMCwgdTAsIHUxLCBybiArIG1uKTsKKyAgQVNTRVJUIChyMFtybittbl0gPCAyKTsJCS8qIHUwICsgdTUgKi8KKworICB0MHMgPSBhYnNfc3ViX24gKHQwLCBtMywgbTIsIG1uKTsKKyAgdTFzID0gcjNzXnQwc14xOwkJCS8qIFJldmVyc2Ugc2lnbiEgKi8KKyAgTVVMICh1MSwgcjMsIHJuLCB0MCwgbW4pOwkJLyogdTIgPSBzMiAqIHQyICovCisgIHUxW3JuK21uXSA9IDA7CisgIGlmICh0MHMpCisgICAgeworICAgICAgdDBzID0gYWJzX3N1Yl9uICh0MCwgbTEsIHQwLCBtbik7CisgICAgICB0MFttbl0gPSAwOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHQwW21uXSA9IG1wbl9hZGRfbiAodDAsIHQwLCBtMSwgbW4pOworICAgIH0KKworICAvKiBGSVhNRTogQ291bGQgYmUgc2ltcGxpZmllZCBpZiB3ZSBoYWQgc3BhY2UgZm9yIHJuICsgbW4gKyAyIGxpbWJzCisgICAgIGF0IHIzLiBJJ2QgZXhwZWN0IHRoYXQgZm9yIG1hdHJpY2VzIG9mIHJhbmRvbSBzaXplLCB0aGUgaGlnaAorICAgICB3b3JkcyB0MFttbl0gYW5kIHIxW3JuXSBhcmUgbm9uLXplcm8gd2l0aCBhIHByZXR0eSBzbWFsbAorICAgICBwcm9iYWJpbGl0eS4gSWYgdGhhdCBjYW4gYmUgY29uZmlybWVkIHRoaXMgc2hvdWxkIGJlIGRvbmUgYXMgYW4KKyAgICAgdW5jb25kaXRpb25hbCBybiB4IChtbisxKSBmb2xsb3dlZCBieSBhbiBpZiAoVU5MSUtFTFkgKHIxW3JuXSkpCisgICAgIGFkZF9uLiAqLworICBpZiAodDBbbW5dICE9IDApCisgICAgeworICAgICAgTVVMIChyMywgcjEsIHJuLCB0MCwgbW4gKyAxKTsJLyogdTMgPSBzMyAqIHQzICovCisgICAgICBBU1NFUlQgKHIxW3JuXSA8IDIpOworICAgICAgaWYgKHIxW3JuXSAhPSAwKQorCW1wbl9hZGRfbiAocjMgKyBybiwgcjMgKyBybiwgdDAsIG1uICsgMSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgTVVMIChyMywgcjEsIHJuICsgMSwgdDAsIG1uKTsKKyAgICB9CisKKyAgQVNTRVJUIChyM1tybittbl0gPCA0KTsKKworICB1MFtybittbl0gPSAwOworICBpZiAocjFzXnQwcykKKyAgICB7CisgICAgICByM3MgPSBhYnNfc3ViX24gKHIzLCB1MCwgcjMsIHJuICsgbW4gKyAxKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBBU1NFUlRfTk9DQVJSWSAobXBuX2FkZF9uIChyMywgcjMsIHUwLCBybiArIG1uICsgMSkpOworICAgICAgcjNzID0gMDsJCQkJLyogdTMgKyB1NSAqLworICAgIH0KKworICBpZiAodDBzKQorICAgIHsKKyAgICAgIHQwW21uXSA9IG1wbl9hZGRfbiAodDAsIHQwLCBtMCwgbW4pOworICAgIH0KKyAgZWxzZSBpZiAodDBbbW5dICE9IDApCisgICAgeworICAgICAgdDBbbW5dIC09IG1wbl9zdWJfbiAodDAsIHQwLCBtMCwgbW4pOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHQwcyA9IGFic19zdWJfbiAodDAsIHQwLCBtMCwgbW4pOworICAgIH0KKyAgTVVMICh1MCwgcjIsIHJuLCB0MCwgbW4gKyAxKTsJCS8qIHU2ID0gczYgKiB0NCAqLworICBBU1NFUlQgKHUwW3JuK21uXSA8IDIpOworICBpZiAocjFzKQorICAgIHsKKyAgICAgIEFTU0VSVF9OT0NBUlJZIChtcG5fc3ViX24gKHIxLCByMiwgcjEsIHJuKSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcjFbcm5dICs9IG1wbl9hZGRfbiAocjEsIHIxLCByMiwgcm4pOworICAgIH0KKyAgcm4rKzsKKyAgdDBzID0gYWRkX3NpZ25lZF9uIChyMiwgcjMsIHIzcywgdTAsIHQwcywgcm4gKyBtbik7CisJCQkJCS8qIHUzICsgdTUgKyB1NiAqLworICBBU1NFUlQgKHIyW3JuK21uLTFdIDwgNCk7CisgIHIzcyA9IGFkZF9zaWduZWRfbiAocjMsIHIzLCByM3MsIHUxLCB1MXMsIHJuICsgbW4pOworCQkJCQkvKiAtdTIgKyB1MyArIHU1ICAqLworICBBU1NFUlQgKHIzW3JuK21uLTFdIDwgMyk7CisgIE1VTCAodTAsIHMwLCBybiwgbTEsIG1uKTsJCS8qIHU0ID0gczQgKiB0NSAqLworICBBU1NFUlQgKHUwW3JuK21uLTFdIDwgMik7CisgIHQwW21uXSA9IG1wbl9hZGRfbiAodDAsIG0zLCBtMSwgbW4pOworICBNVUwgKHUxLCByMSwgcm4sIHQwLCBtbiArIDEpOwkJLyogdTEgPSBzMSAqIHQxICovCisgIG1uICs9IHJuOworICBBU1NFUlQgKHUxW21uLTFdIDwgNCk7CisgIEFTU0VSVCAodTFbbW5dID09IDApOworICBBU1NFUlRfTk9DQVJSWSAoYWRkX3NpZ25lZF9uIChyMSwgcjMsIHIzcywgdTAsIHMwcywgbW4pKTsKKwkJCQkJLyogLXUyICsgdTMgLSB1NCArIHU1ICAqLworICBBU1NFUlQgKHIxW21uLTFdIDwgMik7CisgIGlmIChyM3MpCisgICAgeworICAgICAgQVNTRVJUX05PQ0FSUlkgKG1wbl9hZGRfbiAocjMsIHUxLCByMywgbW4pKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBBU1NFUlRfTk9DQVJSWSAobXBuX3N1Yl9uIChyMywgdTEsIHIzLCBtbikpOworCQkJCQkvKiB1MSArIHUyIC0gdTMgLSB1NSAgKi8KKyAgICB9CisgIEFTU0VSVCAocjNbbW4tMV0gPCAyKTsKKyAgaWYgKHQwcykKKyAgICB7CisgICAgICBBU1NFUlRfTk9DQVJSWSAobXBuX2FkZF9uIChyMiwgdTEsIHIyLCBtbikpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIEFTU0VSVF9OT0NBUlJZIChtcG5fc3ViX24gKHIyLCB1MSwgcjIsIG1uKSk7CisJCQkJCS8qIHUxIC0gdTMgLSB1NSAtIHU2ICAqLworICAgIH0KKyAgQVNTRVJUIChyMlttbi0xXSA8IDIpOworfQorCit2b2lkCittcG5fbWF0cml4MjJfbXVsIChtcF9wdHIgcjAsIG1wX3B0ciByMSwgbXBfcHRyIHIyLCBtcF9wdHIgcjMsIG1wX3NpemVfdCBybiwKKwkJICBtcF9zcmNwdHIgbTAsIG1wX3NyY3B0ciBtMSwgbXBfc3JjcHRyIG0yLCBtcF9zcmNwdHIgbTMsIG1wX3NpemVfdCBtbiwKKwkJICBtcF9wdHIgdHApCit7CisgIGlmIChCRUxPV19USFJFU0hPTEQgKHJuLCBNQVRSSVgyMl9TVFJBU1NFTl9USFJFU0hPTEQpCisgICAgICB8fCBCRUxPV19USFJFU0hPTEQgKG1uLCBNQVRSSVgyMl9TVFJBU1NFTl9USFJFU0hPTEQpKQorICAgIHsKKyAgICAgIG1wX3B0ciBwMCwgcDE7CisgICAgICB1bnNpZ25lZCBpOworCisgICAgICAvKiBUZW1wb3Jhcnkgc3RvcmFnZTogMyBybiArIDIgbW4gKi8KKyAgICAgIHAwID0gdHAgKyBybjsKKyAgICAgIHAxID0gcDAgKyBybiArIG1uOworCisgICAgICBmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorCXsKKwkgIE1QTl9DT1BZICh0cCwgcjAsIHJuKTsKKworCSAgaWYgKHJuID49IG1uKQorCSAgICB7CisJICAgICAgbXBuX211bCAocDAsIHIwLCBybiwgbTAsIG1uKTsKKwkgICAgICBtcG5fbXVsIChwMSwgcjEsIHJuLCBtMywgbW4pOworCSAgICAgIG1wbl9tdWwgKHIwLCByMSwgcm4sIG0yLCBtbik7CisJICAgICAgbXBuX211bCAocjEsIHRwLCBybiwgbTEsIG1uKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgbXBuX211bCAocDAsIG0wLCBtbiwgcjAsIHJuKTsKKwkgICAgICBtcG5fbXVsIChwMSwgbTMsIG1uLCByMSwgcm4pOworCSAgICAgIG1wbl9tdWwgKHIwLCBtMiwgbW4sIHIxLCBybik7CisJICAgICAgbXBuX211bCAocjEsIG0xLCBtbiwgdHAsIHJuKTsKKwkgICAgfQorCSAgcjBbcm4rbW5dID0gbXBuX2FkZF9uIChyMCwgcjAsIHAwLCBybiArIG1uKTsKKwkgIHIxW3JuK21uXSA9IG1wbl9hZGRfbiAocjEsIHIxLCBwMSwgcm4gKyBtbik7CisKKwkgIHIwID0gcjI7IHIxID0gcjM7CisJfQorICAgIH0KKyAgZWxzZQorICAgIG1wbl9tYXRyaXgyMl9tdWxfc3RyYXNzZW4gKHIwLCByMSwgcjIsIHIzLCBybiwKKwkJCSAgICAgICBtMCwgbTEsIG0yLCBtMywgbW4sIHRwKTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9tYXRyaXgyMl9tdWwxX2ludmVyc2VfdmVjdG9yLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvbWF0cml4MjJfbXVsMV9pbnZlcnNlX3ZlY3Rvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZDUwYjcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvbWF0cml4MjJfbXVsMV9pbnZlcnNlX3ZlY3Rvci5jCkBAIC0wLDAgKzEsNjQgQEAKKy8qIG1hdHJpeDIyX211bDFfaW52ZXJzZV92ZWN0b3IuYworCisgICBUSEUgRlVOQ1RJT05TIElOIFRISVMgRklMRSBBUkUgSU5URVJOQUwgV0lUSCBNVVRBQkxFIElOVEVSRkFDRVMuICBJVCBJUyBPTkxZCisgICBTQUZFIFRPIFJFQUNIIFRIRU0gVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuICBJTiBGQUNULCBJVCBJUyBBTE1PU1QKKyAgIEdVQVJBTlRFRUQgVEhBVCBUSEVZJ0xMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR05VIE1QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAyMDA4LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKyNpbmNsdWRlICJsb25nbG9uZy5oIgorCisvKiBTZXRzIChyO2IpID0gTV57LTF9KGE7YiksIHdpdGggTV57LTF9ID0gKHUxMSwgLXUwMTsgLXUxMCwgdTAwKSBmcm9tCisgICB0aGUgbGVmdC4gVXNlcyB0aHJlZSBidWZmZXJzLCB0byBhdm9pZCBhIGNvcHkuICovCittcF9zaXplX3QKK21wbl9tYXRyaXgyMl9tdWwxX2ludmVyc2VfdmVjdG9yIChjb25zdCBzdHJ1Y3QgaGdjZF9tYXRyaXgxICpNLAorCQkJCSAgbXBfcHRyIHJwLCBtcF9zcmNwdHIgYXAsIG1wX3B0ciBicCwgbXBfc2l6ZV90IG4pCit7CisgIG1wX2xpbWJfdCBoMCwgaDE7CisKKyAgLyogQ29tcHV0ZSAocjtiKSA8LS0gKHUxMSBhIC0gdTAxIGI7IC11MTAgYSArIHUwMCBiKSBhcworCisgICAgIHIgID0gdTExICogYQorICAgICByIC09IHUwMSAqIGIKKyAgICAgYiAqPSB1MDAKKyAgICAgYiAtPSB1MTAgKiBhCisgICovCisKKyAgaDAgPSAgICBtcG5fbXVsXzEgKHJwLCBhcCwgbiwgTS0+dVsxXVsxXSk7CisgIGgxID0gbXBuX3N1Ym11bF8xIChycCwgYnAsIG4sIE0tPnVbMF1bMV0pOworICBBU1NFUlQgKGgwID09IGgxKTsKKworICBoMCA9ICAgIG1wbl9tdWxfMSAoYnAsIGJwLCBuLCBNLT51WzBdWzBdKTsKKyAgaDEgPSBtcG5fc3VibXVsXzEgKGJwLCBhcCwgbiwgTS0+dVsxXVswXSk7CisgIEFTU0VSVCAoaDAgPT0gaDEpOworCisgIG4gLT0gKHJwW24tMV0gfCBicFtuLTFdKSA9PSAwOworICByZXR1cm4gbjsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9tb2RfMS5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL21vZF8xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU0MTVkZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9tb2RfMS5jCkBAIC0wLDAgKzEsMjgwIEBACisvKiBtcG5fbW9kXzEoZGl2aWRlbmRfcHRyLCBkaXZpZGVuZF9zaXplLCBkaXZpc29yX2xpbWIpIC0tCisgICBEaXZpZGUgKERJVklERU5EX1BUUiwsRElWSURFTkRfU0laRSkgYnkgRElWSVNPUl9MSU1CLgorICAgUmV0dXJuIHRoZSBzaW5nbGUtbGltYiByZW1haW5kZXIuCisgICBUaGVyZSBhcmUgbm8gY29uc3RyYWludHMgb24gdGhlIHZhbHVlIG9mIHRoZSBkaXZpc29yLgorCitDb3B5cmlnaHQgMTk5MSwgMTk5MywgMTk5NCwgMTk5OSwgMjAwMCwgMjAwMiwgMjAwNy0yMDA5LCAyMDEyIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisjaW5jbHVkZSAibG9uZ2xvbmcuaCIKKworCisvKiBUaGUgc2l6ZSB3aGVyZSB1ZGl2X3Fybm5kX3ByZWludiBzaG91bGQgYmUgdXNlZCByYXRoZXIgdGhhbiB1ZGl2X3Fybm5kLAorICAgbWVhbmluZyB0aGUgcXVvdGllbnQgc2l6ZSB3aGVyZSB0aGF0IHNob3VsZCBoYXBwZW4sIHRoZSBxdW90aWVudCBzaXplCisgICBiZWluZyBob3cgbWFueSB1ZGl2IGRpdmlzaW9ucyB3aWxsIGJlIGRvbmUuCisKKyAgIFRoZSBkZWZhdWx0IGlzIHRvIHVzZSBwcmVpbnYgYWx3YXlzLCBDUFVzIHdoZXJlIHRoaXMgZG9lc24ndCBzdWl0IGhhdmUKKyAgIHR1bmVkIHRocmVzaG9sZHMuICBOb3RlIGluIHBhcnRpY3VsYXIgdGhhdCBwcmVpbnYgc2hvdWxkIGNlcnRhaW5seSBiZQorICAgdXNlZCBpZiB0aGF0J3MgdGhlIG9ubHkgZGl2aXNpb24gYXZhaWxhYmxlIChVU0VfUFJFSU5WX0FMV0FZUykuICAqLworCisjaWZuZGVmIE1PRF8xX05PUk1fVEhSRVNIT0xECisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAwCisjZW5kaWYKKworI2lmbmRlZiBNT0RfMV9VTk5PUk1fVEhSRVNIT0xECisjZGVmaW5lIE1PRF8xX1VOTk9STV9USFJFU0hPTEQgIDAKKyNlbmRpZgorCisjaWZuZGVmIE1PRF8xVV9UT19NT0RfMV8xX1RIUkVTSE9MRAorI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgIE1QX1NJWkVfVF9NQVggLyogZGVmYXVsdCBpcyBub3QgdG8gdXNlIG1wbl9tb2RfMXMgKi8KKyNlbmRpZgorCisjaWZuZGVmIE1PRF8xTl9UT19NT0RfMV8xX1RIUkVTSE9MRAorI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgIE1QX1NJWkVfVF9NQVggLyogZGVmYXVsdCBpcyBub3QgdG8gdXNlIG1wbl9tb2RfMXMgKi8KKyNlbmRpZgorCisjaWZuZGVmIE1PRF8xXzFfVE9fTU9EXzFfMl9USFJFU0hPTEQKKyNkZWZpbmUgTU9EXzFfMV9UT19NT0RfMV8yX1RIUkVTSE9MRCAgMTAKKyNlbmRpZgorCisjaWZuZGVmIE1PRF8xXzJfVE9fTU9EXzFfNF9USFJFU0hPTEQKKyNkZWZpbmUgTU9EXzFfMl9UT19NT0RfMV80X1RIUkVTSE9MRCAgMjAKKyNlbmRpZgorCisjaWYgVFVORV9QUk9HUkFNX0JVSUxEICYmICFIQVZFX05BVElWRV9tcG5fbW9kXzFfMXAKKy8qIER1cGxpY2F0ZXMgZGVjbGFyYXRpb25zIGluIHR1bmUvc3BlZWQuaCAqLworbXBfbGltYl90IG1wbl9tb2RfMV8xcF8xIChtcF9zcmNwdHIsIG1wX3NpemVfdCwgbXBfbGltYl90LCBtcF9saW1iX3QgWzRdKTsKK21wX2xpbWJfdCBtcG5fbW9kXzFfMXBfMiAobXBfc3JjcHRyLCBtcF9zaXplX3QsIG1wX2xpbWJfdCwgbXBfbGltYl90IFs0XSk7CisKK3ZvaWQgbXBuX21vZF8xXzFwX2Nwc18xIChtcF9saW1iX3QgWzRdLCBtcF9saW1iX3QpOwordm9pZCBtcG5fbW9kXzFfMXBfY3BzXzIgKG1wX2xpbWJfdCBbNF0sIG1wX2xpbWJfdCk7CisKKyN1bmRlZiBtcG5fbW9kXzFfMXAKKyNkZWZpbmUgbXBuX21vZF8xXzFwKGFwLCBuLCBiLCBwcmUpCQkJICAgICBcCisgIChtb2RfMV8xcF9tZXRob2QgPT0gMSA/IG1wbl9tb2RfMV8xcF8xIChhcCwgbiwgYiwgcHJlKSAgICAgXAorICAgOiAobW9kXzFfMXBfbWV0aG9kID09IDIgPyBtcG5fbW9kXzFfMXBfMiAoYXAsIG4sIGIsIHByZSkgIFwKKyAgICAgIDogX19nbXBuX21vZF8xXzFwIChhcCwgbiwgYiwgcHJlKSkpCisKKyN1bmRlZiBtcG5fbW9kXzFfMXBfY3BzCisjZGVmaW5lIG1wbl9tb2RfMV8xcF9jcHMocHJlLCBiKQkJCQlcCisgIChtb2RfMV8xcF9tZXRob2QgPT0gMSA/IG1wbl9tb2RfMV8xcF9jcHNfMSAocHJlLCBiKQkJXAorICAgOiAobW9kXzFfMXBfbWV0aG9kID09IDIgPyBtcG5fbW9kXzFfMXBfY3BzXzIgKHByZSwgYikJXAorICAgICAgOiBfX2dtcG5fbW9kXzFfMXBfY3BzIChwcmUsIGIpKSkKKyNlbmRpZiAvKiBUVU5FX1BST0dSQU1fQlVJTEQgJiYgIUhBVkVfTkFUSVZFX21wbl9tb2RfMV8xcCAqLworCisKKy8qIFRoZSBjb21tZW50cyBpbiBtcG4vZ2VuZXJpYy9kaXZyZW1fMS5jIGFwcGx5IGhlcmUgdG9vLgorCisgICBBcyBub3RlZCBpbiB0aGUgYWxnb3JpdGhtcyBzZWN0aW9uIG9mIHRoZSBtYW51YWwsIHRoZSBzaGlmdHMgaW4gdGhlIGxvb3AKKyAgIGZvciB0aGUgdW5ub3JtIGNhc2UgY2FuIGJlIGF2b2lkZWQgYnkgY2FsY3VsYXRpbmcgciA9IGElKGQqMl5uKSwgZm9sbG93ZWQKKyAgIGJ5IGEgZmluYWwgKHIqMl5uKSUoZCoyXm4pLiAgSW4gZmFjdCBpZiBpdCBoYXBwZW5zIHRoYXQgYSUoZCoyXm4pIGNhbgorICAgc2tpcCBhIGRpdmlzaW9uIHdoZXJlIChhKjJebiklKGQqMl5uKSBjYW4ndCB0aGVuIHRoZXJlJ3MgdGhlIHNhbWUgbnVtYmVyCisgICBvZiBkaXZpZGUgc3RlcHMsIHRob3VnaCBob3cgb2Z0ZW4gdGhhdCBoYXBwZW5zIGRlcGVuZHMgb24gdGhlIGFzc3VtZWQKKyAgIGRpc3RyaWJ1dGlvbnMgb2YgZGl2aWRlbmQgYW5kIGRpdmlzb3IuICBJbiBhbnkgY2FzZSB0aGlzIGlkZWEgaXMgbGVmdCB0bworICAgQ1BVIHNwZWNpZmljIGltcGxlbWVudGF0aW9ucyB0byBjb25zaWRlci4gICovCisKK3N0YXRpYyBtcF9saW1iX3QKK21wbl9tb2RfMV91bm5vcm0gKG1wX3NyY3B0ciB1cCwgbXBfc2l6ZV90IHVuLCBtcF9saW1iX3QgZCkKK3sKKyAgbXBfc2l6ZV90ICBpOworICBtcF9saW1iX3QgIG4xLCBuMCwgcjsKKyAgbXBfbGltYl90ICBkdW1teTsKKyAgaW50IGNudDsKKworICBBU1NFUlQgKHVuID4gMCk7CisgIEFTU0VSVCAoZCAhPSAwKTsKKworICBkIDw8PSBHTVBfTkFJTF9CSVRTOworCisgIC8qIFNraXAgYSBkaXZpc2lvbiBpZiBoaWdoIDwgZGl2aXNvci4gIEhhdmluZyB0aGUgdGVzdCBoZXJlIGJlZm9yZQorICAgICBub3JtYWxpemluZyB3aWxsIHN0aWxsIHNraXAgYXMgb2Z0ZW4gYXMgcG9zc2libGUuICAqLworICByID0gdXBbdW4gLSAxXSA8PCBHTVBfTkFJTF9CSVRTOworICBpZiAociA8IGQpCisgICAgeworICAgICAgciA+Pj0gR01QX05BSUxfQklUUzsKKyAgICAgIHVuLS07CisgICAgICBpZiAodW4gPT0gMCkKKwlyZXR1cm4gcjsKKyAgICB9CisgIGVsc2UKKyAgICByID0gMDsKKworICAvKiBJZiB1ZGl2X3Fybm5kIGRvZXNuJ3QgbmVlZCBhIG5vcm1hbGl6ZWQgZGl2aXNvciwgY2FuIHVzZSB0aGUgc2ltcGxlCisgICAgIGNvZGUgYWJvdmUuICovCisgIGlmICghIFVESVZfTkVFRFNfTk9STUFMSVpBVElPTgorICAgICAgJiYgQkVMT1dfVEhSRVNIT0xEICh1biwgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCkpCisgICAgeworICAgICAgZm9yIChpID0gdW4gLSAxOyBpID49IDA7IGktLSkKKwl7CisJICBuMCA9IHVwW2ldIDw8IEdNUF9OQUlMX0JJVFM7CisJICB1ZGl2X3Fybm5kIChkdW1teSwgciwgciwgbjAsIGQpOworCSAgciA+Pj0gR01QX05BSUxfQklUUzsKKwl9CisgICAgICByZXR1cm4gcjsKKyAgICB9CisKKyAgY291bnRfbGVhZGluZ196ZXJvcyAoY250LCBkKTsKKyAgZCA8PD0gY250OworCisgIG4xID0gdXBbdW4gLSAxXSA8PCBHTVBfTkFJTF9CSVRTOworICByID0gKHIgPDwgY250KSB8IChuMSA+PiAoR01QX0xJTUJfQklUUyAtIGNudCkpOworCisgIGlmIChVRElWX05FRURTX05PUk1BTElaQVRJT04KKyAgICAgICYmIEJFTE9XX1RIUkVTSE9MRCAodW4sIE1PRF8xX1VOTk9STV9USFJFU0hPTEQpKQorICAgIHsKKyAgICAgIG1wX2xpbWJfdCBuc2hpZnQ7CisgICAgICBmb3IgKGkgPSB1biAtIDI7IGkgPj0gMDsgaS0tKQorCXsKKwkgIG4wID0gdXBbaV0gPDwgR01QX05BSUxfQklUUzsKKwkgIG5zaGlmdCA9IChuMSA8PCBjbnQpIHwgKG4wID4+IChHTVBfTlVNQl9CSVRTIC0gY250KSk7CisJICB1ZGl2X3Fybm5kIChkdW1teSwgciwgciwgbnNoaWZ0LCBkKTsKKwkgIHIgPj49IEdNUF9OQUlMX0JJVFM7CisJICBuMSA9IG4wOworCX0KKyAgICAgIHVkaXZfcXJubmQgKGR1bW15LCByLCByLCBuMSA8PCBjbnQsIGQpOworICAgICAgciA+Pj0gR01QX05BSUxfQklUUzsKKyAgICAgIHJldHVybiByID4+IGNudDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBtcF9saW1iX3QgaW52LCBuc2hpZnQ7CisgICAgICBpbnZlcnRfbGltYiAoaW52LCBkKTsKKworICAgICAgZm9yIChpID0gdW4gLSAyOyBpID49IDA7IGktLSkKKwl7CisJICBuMCA9IHVwW2ldIDw8IEdNUF9OQUlMX0JJVFM7CisJICBuc2hpZnQgPSAobjEgPDwgY250KSB8IChuMCA+PiAoR01QX05VTUJfQklUUyAtIGNudCkpOworCSAgdWRpdl9ybm5kX3ByZWludiAociwgciwgbnNoaWZ0LCBkLCBpbnYpOworCSAgciA+Pj0gR01QX05BSUxfQklUUzsKKwkgIG4xID0gbjA7CisJfQorICAgICAgdWRpdl9ybm5kX3ByZWludiAociwgciwgbjEgPDwgY250LCBkLCBpbnYpOworICAgICAgciA+Pj0gR01QX05BSUxfQklUUzsKKyAgICAgIHJldHVybiByID4+IGNudDsKKyAgICB9Cit9CisKK3N0YXRpYyBtcF9saW1iX3QKK21wbl9tb2RfMV9ub3JtIChtcF9zcmNwdHIgdXAsIG1wX3NpemVfdCB1biwgbXBfbGltYl90IGQpCit7CisgIG1wX3NpemVfdCAgaTsKKyAgbXBfbGltYl90ICBuMCwgcjsKKyAgbXBfbGltYl90ICBkdW1teTsKKworICBBU1NFUlQgKHVuID4gMCk7CisKKyAgZCA8PD0gR01QX05BSUxfQklUUzsKKworICBBU1NFUlQgKGQgJiBHTVBfTElNQl9ISUdIQklUKTsKKworICAvKiBIaWdoIGxpbWIgaXMgaW5pdGlhbCByZW1haW5kZXIsIHBvc3NpYmx5IHdpdGggb25lIHN1YnRyYWN0IG9mCisgICAgIGQgdG8gZ2V0IHI8ZC4gICovCisgIHIgPSB1cFt1biAtIDFdIDw8IEdNUF9OQUlMX0JJVFM7CisgIGlmIChyID49IGQpCisgICAgciAtPSBkOworICByID4+PSBHTVBfTkFJTF9CSVRTOworICB1bi0tOworICBpZiAodW4gPT0gMCkKKyAgICByZXR1cm4gcjsKKworICBpZiAoQkVMT1dfVEhSRVNIT0xEICh1biwgTU9EXzFfTk9STV9USFJFU0hPTEQpKQorICAgIHsKKyAgICAgIGZvciAoaSA9IHVuIC0gMTsgaSA+PSAwOyBpLS0pCisJeworCSAgbjAgPSB1cFtpXSA8PCBHTVBfTkFJTF9CSVRTOworCSAgdWRpdl9xcm5uZCAoZHVtbXksIHIsIHIsIG4wLCBkKTsKKwkgIHIgPj49IEdNUF9OQUlMX0JJVFM7CisJfQorICAgICAgcmV0dXJuIHI7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgbXBfbGltYl90ICBpbnY7CisgICAgICBpbnZlcnRfbGltYiAoaW52LCBkKTsKKyAgICAgIGZvciAoaSA9IHVuIC0gMTsgaSA+PSAwOyBpLS0pCisJeworCSAgbjAgPSB1cFtpXSA8PCBHTVBfTkFJTF9CSVRTOworCSAgdWRpdl9ybm5kX3ByZWludiAociwgciwgbjAsIGQsIGludik7CisJICByID4+PSBHTVBfTkFJTF9CSVRTOworCX0KKyAgICAgIHJldHVybiByOworICAgIH0KK30KKworbXBfbGltYl90CittcG5fbW9kXzEgKG1wX3NyY3B0ciBhcCwgbXBfc2l6ZV90IG4sIG1wX2xpbWJfdCBiKQoreworICBBU1NFUlQgKG4gPj0gMCk7CisgIEFTU0VSVCAoYiAhPSAwKTsKKworICAvKiBTaG91bGQgdGhpcyBiZSBoYW5kbGVkIGF0IGFsbD8gIFJlbHkgb24gY2FsbGVycz8gIE5vdGUgdW49PTAgaXMgY3VycmVudGx5CisgICAgIHJlcXVpcmVkIGJ5IG1wei9mZGl2X3JfdWkuYyBhbmQgcG9zc2libHkgb3RoZXIgcGxhY2VzLiAgKi8KKyAgaWYgKG4gPT0gMCkKKyAgICByZXR1cm4gMDsKKworICBpZiAoVU5MSUtFTFkgKChiICYgR01QX05VTUJfSElHSEJJVCkgIT0gMCkpCisgICAgeworICAgICAgaWYgKEJFTE9XX1RIUkVTSE9MRCAobiwgTU9EXzFOX1RPX01PRF8xXzFfVEhSRVNIT0xEKSkKKwl7CisJICByZXR1cm4gbXBuX21vZF8xX25vcm0gKGFwLCBuLCBiKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgbXBfbGltYl90IHByZVs0XTsKKwkgIG1wbl9tb2RfMV8xcF9jcHMgKHByZSwgYik7CisJICByZXR1cm4gbXBuX21vZF8xXzFwIChhcCwgbiwgYiwgcHJlKTsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKEJFTE9XX1RIUkVTSE9MRCAobiwgTU9EXzFVX1RPX01PRF8xXzFfVEhSRVNIT0xEKSkKKwl7CisJICByZXR1cm4gbXBuX21vZF8xX3Vubm9ybSAoYXAsIG4sIGIpOworCX0KKyAgICAgIGVsc2UgaWYgKEJFTE9XX1RIUkVTSE9MRCAobiwgTU9EXzFfMV9UT19NT0RfMV8yX1RIUkVTSE9MRCkpCisJeworCSAgbXBfbGltYl90IHByZVs0XTsKKwkgIG1wbl9tb2RfMV8xcF9jcHMgKHByZSwgYik7CisJICByZXR1cm4gbXBuX21vZF8xXzFwIChhcCwgbiwgYiA8PCBwcmVbMV0sIHByZSk7CisJfQorICAgICAgZWxzZSBpZiAoQkVMT1dfVEhSRVNIT0xEIChuLCBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEKSB8fCBVTkxJS0VMWSAoYiA+IEdNUF9OVU1CX01BU0sgLyA0KSkKKwl7CisJICBtcF9saW1iX3QgcHJlWzVdOworCSAgbXBuX21vZF8xc18ycF9jcHMgKHByZSwgYik7CisJICByZXR1cm4gbXBuX21vZF8xc18ycCAoYXAsIG4sIGIgPDwgcHJlWzFdLCBwcmUpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBtcF9saW1iX3QgcHJlWzddOworCSAgbXBuX21vZF8xc180cF9jcHMgKHByZSwgYik7CisJICByZXR1cm4gbXBuX21vZF8xc180cCAoYXAsIG4sIGIgPDwgcHJlWzFdLCBwcmUpOworCX0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvbW9kXzFfMS5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL21vZF8xXzEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjM0MmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL21vZF8xXzEuYwpAQCAtMCwwICsxLDMzMiBAQAorLyogbXBuX21vZF8xXzFwIChhcCwgbiwgYiwgY3BzKQorICAgRGl2aWRlIChhcCwsbikgYnkgYi4gIFJldHVybiB0aGUgc2luZ2xlLWxpbWIgcmVtYWluZGVyLgorCisgICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQgYW5kIE5pZWxzIE3DtmxsZXIuCisgICBCYXNlZCBvbiBhIHN1Z2dlc3Rpb24gYnkgUGV0ZXIgTC4gTW9udGdvbWVyeS4KKworICAgVEhFIEZVTkNUSU9OUyBJTiBUSElTIEZJTEUgQVJFIElOVEVSTkFMIFdJVEggTVVUQUJMRSBJTlRFUkZBQ0VTLiAgSVQgSVMgT05MWQorICAgU0FGRSBUTyBSRUFDSCBUSEVNIFRIUk9VR0ggRE9DVU1FTlRFRCBJTlRFUkZBQ0VTLiAgSU4gRkFDVCwgSVQgSVMgQUxNT1NUCisgICBHVUFSQU5URUVEIFRIQVQgVEhFWSBXSUxMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR05VIE1QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAyMDA4LTIwMTEsIDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorI2luY2x1ZGUgImxvbmdsb25nLmgiCisKKyNpZm5kZWYgTU9EXzFfMVBfTUVUSE9ECisjIGRlZmluZSBNT0RfMV8xUF9NRVRIT0QgMSAgICAvKiBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIDIgZm9yIGFzbSB0ZXN0aW5nICovCisjZW5kaWYKKworLyogRGVmaW5lIHNvbWUgbG9uZ2xvbmcuaC1zdHlsZSBtYWNyb3MsIGJ1dCBmb3Igd2lkZXIgb3BlcmF0aW9ucy4KKyAqIGFkZF9tc3NhYWFhIGlzIGxpa2UgbG9uZ2xvbmcuaCdzIGFkZF9zc2FhYWEsIGJ1dCBhbHNvIGdlbmVyYXRlcworICogY2Fycnkgb3V0LCBpbiB0aGUgZm9ybSBvZiBhIG1hc2suICovCisKKyNpZiBkZWZpbmVkIChfX0dOVUNfXykgJiYgISBkZWZpbmVkIChOT19BU00pCisKKyNpZiBIQVZFX0hPU1RfQ1BVX0ZBTUlMWV94ODYgJiYgV19UWVBFX1NJWkUgPT0gMzIKKyNkZWZpbmUgYWRkX21zc2FhYWEobSwgczEsIHMwLCBhMSwgYTAsIGIxLCBiMCkJCQkJXAorICBfX2FzbV9fICggICJhZGQJJTYsICVrMlxuXHQiCQkJCQlcCisJICAgICAiYWRjCSU0LCAlazFcblx0IgkJCQkJXAorCSAgICAgInNiYgklazAsICVrMCIJCQkJCVwKKwkgICA6ICI9ciIgKG0pLCAiPXIiIChzMSksICI9JnIiIChzMCkJCQkJXAorCSAgIDogIjEiICAoKFVTSXR5cGUpKGExKSksICJnIiAoKFVTSXR5cGUpKGIxKSksCQkJXAorCSAgICAgIiUyIiAoKFVTSXR5cGUpKGEwKSksICJnIiAoKFVTSXR5cGUpKGIwKSkpCisjZW5kaWYKKworI2lmIEhBVkVfSE9TVF9DUFVfRkFNSUxZX3g4Nl82NCAmJiBXX1RZUEVfU0laRSA9PSA2NAorI2RlZmluZSBhZGRfbXNzYWFhYShtLCBzMSwgczAsIGExLCBhMCwgYjEsIGIwKQkJCQlcCisgIF9fYXNtX18gKCAgImFkZAklNiwgJXEyXG5cdCIJCQkJCVwKKwkgICAgICJhZGMJJTQsICVxMVxuXHQiCQkJCQlcCisJICAgICAic2JiCSVxMCwgJXEwIgkJCQkJXAorCSAgIDogIj1yIiAobSksICI9ciIgKHMxKSwgIj0mciIgKHMwKQkJCQlcCisJICAgOiAiMSIgICgoVURJdHlwZSkoYTEpKSwgInJtZSIgKChVREl0eXBlKShiMSkpLAkJXAorCSAgICAgIiUyIiAoKFVESXR5cGUpKGEwKSksICJybWUiICgoVURJdHlwZSkoYjApKSkKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX19zcGFyY19fKSAmJiBXX1RZUEVfU0laRSA9PSAzMgorI2RlZmluZSBhZGRfbXNzYWFhYShtLCBzaCwgc2wsIGFoLCBhbCwgYmgsIGJsKQkJCQlcCisgIF9fYXNtX18gKCAgImFkZGNjCSVyNSwgJTYsICUyXG5cdCIJCQkJXAorCSAgICAgImFkZHhjYwklcjMsICU0LCAlMVxuXHQiCQkJCVwKKwkgICAgICJzdWJ4CSUlZzAsICUlZzAsICUwIgkJCQkJXAorCSAgIDogIj1yIiAobSksICI9ciIgKHNoKSwgIj0mciIgKHNsKQkJCQlcCisJICAgOiAickoiIChhaCksICJySSIgKGJoKSwgIiVySiIgKGFsKSwgInJJIiAoYmwpCQlcCisJIF9fQ0xPQkJFUl9DQykKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX19zcGFyY19fKSAmJiBXX1RZUEVfU0laRSA9PSA2NAorI2RlZmluZSBhZGRfbXNzYWFhYShtLCBzaCwgc2wsIGFoLCBhbCwgYmgsIGJsKQkJCQlcCisgIF9fYXNtX18gKCAgImFkZGNjCSVyNSwgJTYsICUyXG5cdCIJCQkJXAorCSAgICAgImFkZGNjYwklcjcsICU4LCAlJWcwXG5cdCIJCQkJXAorCSAgICAgImFkZGNjYwklcjMsICU0LCAlMVxuXHQiCQkJCVwKKwkgICAgICJjbHIJJTBcblx0IgkJCQkJCVwKKwkgICAgICJtb3ZjcwklJXhjYywgLTEsICUwIgkJCQkJXAorCSAgIDogIj1yIiAobSksICI9ciIgKHNoKSwgIj0mciIgKHNsKQkJCQlcCisJICAgOiAickoiIChhaCksICJySSIgKGJoKSwgIiVySiIgKGFsKSwgInJJIiAoYmwpLAkJXAorCSAgICAgInJKIiAoKGFsKSA+PiAzMiksICJySSIgKChibCkgPj4gMzIpCQkJXAorCSBfX0NMT0JCRVJfQ0MpCisjaWYgX19WSVNfXyA+PSAweDMwMAorI3VuZGVmIGFkZF9tc3NhYWFhCisjZGVmaW5lIGFkZF9tc3NhYWFhKG0sIHNoLCBzbCwgYWgsIGFsLCBiaCwgYmwpCQkJCVwKKyAgX19hc21fXyAoICAiYWRkY2MJJXI1LCAlNiwgJTJcblx0IgkJCQlcCisJICAgICAiYWRkeGNjYwklcjMsICU0LCAlMVxuXHQiCQkJCVwKKwkgICAgICJjbHIJJTBcblx0IgkJCQkJCVwKKwkgICAgICJtb3ZjcwklJXhjYywgLTEsICUwIgkJCQkJXAorCSAgIDogIj1yIiAobSksICI9ciIgKHNoKSwgIj0mciIgKHNsKQkJCQlcCisJICAgOiAickoiIChhaCksICJySSIgKGJoKSwgIiVySiIgKGFsKSwgInJJIiAoYmwpCQlcCisJIF9fQ0xPQkJFUl9DQykKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBIQVZFX0hPU1RfQ1BVX0ZBTUlMWV9wb3dlcnBjICYmICFkZWZpbmVkIChfTE9OR19MT05HX0xJTUIpCisvKiBUaGlzIHdvcmtzIGZpbmUgZm9yIDMyLWJpdCBhbmQgNjQtYml0IGxpbWJzLCBleGNlcHQgZm9yIDY0LWJpdCBsaW1icyB3aXRoIGEKKyAgIHByb2Nlc3NvciBydW5uaW5nIGluIDMyLWJpdCBtb2RlLCBzaW5jZSB0aGUgY2FycnkgZmxhZyB0aGVuIGdldHMgdGhlIDMyLWJpdAorICAgY2FycnkuICAqLworI2RlZmluZSBhZGRfbXNzYWFhYShtLCBzMSwgczAsIGExLCBhMCwgYjEsIGIwKQkJCQlcCisgIF9fYXNtX18gKCAgImFkZCVJNmMJJTIsICU1LCAlNlxuXHQiCQkJCQlcCisJICAgICAiYWRkZQklMSwgJTMsICU0XG5cdCIJCQkJCVwKKwkgICAgICJzdWJmZQklMCwgJTAsICUwXG5cdCIJCQkJCVwKKwkgICAgICJub3IJJTAsICUwLCAlMCIJCQkJCVwKKwkgICA6ICI9ciIgKG0pLCAiPXIiIChzMSksICI9JnIiIChzMCkJCQkJXAorCSAgIDogInIiICAoYTEpLCAiciIgKGIxKSwgIiVyIiAoYTApLCAickkiIChiMCkJCQlcCisJICAgICBfX0NMT0JCRVJfQ0MpCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9fczM5MHhfXykgJiYgV19UWVBFX1NJWkUgPT0gNjQKKyNkZWZpbmUgYWRkX21zc2FhYWEobSwgczEsIHMwLCBhMSwgYTAsIGIxLCBiMCkJCQkJXAorICBfX2FzbV9fICggICJhbGdyCSUyLCAlNlxuXHQiCQkJCQlcCisJICAgICAiYWxjZ3IJJTEsICU0XG5cdCIJCQkJCVwKKwkgICAgICJsZ2hpCSUwLCAwXG5cdCIJCQkJCVwKKwkgICAgICJhbGNncgklMCwgJTBcblx0IgkJCQkJXAorCSAgICAgImxjZ3IJJTAsICUwIgkJCQkJCVwKKwkgICA6ICI9ciIgKG0pLCAiPXIiIChzMSksICI9JnIiIChzMCkJCQkJXAorCSAgIDogIjEiICAoKFVESXR5cGUpKGExKSksICJyIiAoKFVESXR5cGUpKGIxKSksCQkJXAorCSAgICAgIiUyIiAoKFVESXR5cGUpKGEwKSksICJyIiAoKFVESXR5cGUpKGIwKSkgX19DTE9CQkVSX0NDKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfX2FybV9fKSAmJiAhZGVmaW5lZCAoX190aHVtYl9fKSAmJiBXX1RZUEVfU0laRSA9PSAzMgorI2RlZmluZSBhZGRfbXNzYWFhYShtLCBzaCwgc2wsIGFoLCBhbCwgYmgsIGJsKQkJCQlcCisgIF9fYXNtX18gKCAgImFkZHMJJTIsICU1LCAlNlxuXHQiCQkJCQlcCisJICAgICAiYWRjcwklMSwgJTMsICU0XG5cdCIJCQkJCVwKKwkgICAgICJtb3ZjYwklMCwgIzBcblx0IgkJCQkJXAorCSAgICAgIm1vdmNzCSUwLCAjLTEiCQkJCQlcCisJICAgOiAiPXIiIChtKSwgIj1yIiAoc2gpLCAiPSZyIiAoc2wpCQkJCVwKKwkgICA6ICJyIiAoYWgpLCAickkiIChiaCksICIlciIgKGFsKSwgInJJIiAoYmwpIF9fQ0xPQkJFUl9DQykKKyNlbmRpZgorI2VuZGlmIC8qIGRlZmluZWQgKF9fR05VQ19fKSAqLworCisjaWZuZGVmIGFkZF9tc3NhYWFhCisjZGVmaW5lIGFkZF9tc3NhYWFhKG0sIHMxLCBzMCwgYTEsIGEwLCBiMSwgYjApCQkJCVwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBVV3R5cGUgX19zMCwgX19zMSwgX19jMCwgX19jMTsJCQkJCVwKKyAgICBfX3MwID0gKGEwKSArIChiMCk7CQkJCQkJCVwKKyAgICBfX3MxID0gKGExKSArIChiMSk7CQkJCQkJCVwKKyAgICBfX2MwID0gX19zMCA8IChhMCk7CQkJCQkJCVwKKyAgICBfX2MxID0gX19zMSA8IChhMSk7CQkJCQkJCVwKKyAgICAoczApID0gX19zMDsJCQkJCQkJXAorICAgIF9fczEgPSBfX3MxICsgX19jMDsJCQkJCQkJXAorICAgIChzMSkgPSBfX3MxOwkJCQkJCQlcCisgICAgKG0pID0gLSAoX19jMSArIChfX3MxIDwgX19jMCkpOwkJCQkJXAorICB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZiBNT0RfMV8xUF9NRVRIT0QgPT0gMQordm9pZAorbXBuX21vZF8xXzFwX2NwcyAobXBfbGltYl90IGNwc1s0XSwgbXBfbGltYl90IGIpCit7CisgIG1wX2xpbWJfdCBiaTsKKyAgbXBfbGltYl90IEIxbW9kYiwgQjJtb2RiOworICBpbnQgY250OworCisgIGNvdW50X2xlYWRpbmdfemVyb3MgKGNudCwgYik7CisKKyAgYiA8PD0gY250OworICBpbnZlcnRfbGltYiAoYmksIGIpOworCisgIGNwc1swXSA9IGJpOworICBjcHNbMV0gPSBjbnQ7CisKKyAgQjFtb2RiID0gLWI7CisgIGlmIChMSUtFTFkgKGNudCAhPSAwKSkKKyAgICBCMW1vZGIgKj0gKChiaSA+PiAoR01QX0xJTUJfQklUUy1jbnQpKSB8IChDTlNUX0xJTUIoMSkgPDwgY250KSk7CisgIEFTU0VSVCAoQjFtb2RiIDw9IGIpOwkJLyogTkI6IG5vdCBmdWxseSByZWR1Y2VkIG1vZCBiICovCisgIGNwc1syXSA9IEIxbW9kYiA+PiBjbnQ7CisKKyAgLyogSW4gdGhlIG5vcm1hbGl6ZWQgY2FzZSwgdGhpcyBjYW4gYmUgc2ltcGxpZmllZCB0bworICAgKgorICAgKiAgIEIybW9kYiA9IC0gYiAqIGJpOworICAgKiAgIEFTU0VSVCAoQjJtb2RiIDw9IGIpOyAgICAvLyBOQjogZXF1YWxpdHkgaWZmIGIgPSBCLzIKKyAgICovCisgIHVkaXZfcm5uZF9wcmVpbnYgKEIybW9kYiwgQjFtb2RiLCBDTlNUX0xJTUIoMCksIGIsIGJpKTsKKyAgY3BzWzNdID0gQjJtb2RiID4+IGNudDsKK30KKworbXBfbGltYl90CittcG5fbW9kXzFfMXAgKG1wX3NyY3B0ciBhcCwgbXBfc2l6ZV90IG4sIG1wX2xpbWJfdCBiLCBjb25zdCBtcF9saW1iX3QgYm1vZGJbNF0pCit7CisgIG1wX2xpbWJfdCByaCwgcmwsIGJpLCBwaCwgcGwsIHI7CisgIG1wX2xpbWJfdCBCMW1vZGIsIEIybW9kYjsKKyAgbXBfc2l6ZV90IGk7CisgIGludCBjbnQ7CisgIG1wX2xpbWJfdCBtYXNrOworCisgIEFTU0VSVCAobiA+PSAyKTsJCS8qIGZpeCB0dW5ldXAuYyBpZiB0aGlzIGlzIGNoYW5nZWQgKi8KKworICBCMW1vZGIgPSBibW9kYlsyXTsKKyAgQjJtb2RiID0gYm1vZGJbM107CisKKyAgcmwgPSBhcFtuIC0gMV07CisgIHVtdWxfcHBtbSAocGgsIHBsLCBybCwgQjFtb2RiKTsKKyAgYWRkX3NzYWFhYSAocmgsIHJsLCBwaCwgcGwsIENOU1RfTElNQigwKSwgYXBbbiAtIDJdKTsKKworICBmb3IgKGkgPSBuIC0gMzsgaSA+PSAwOyBpIC09IDEpCisgICAgeworICAgICAgLyogcnIgPSBhcFtpXQkJCQk8IEIKKwkgICAgKyBMTyhycikgICogKEIgbW9kIGIpCQk8PSAoQi0xKShiLTEpCisJICAgICsgSEkocnIpICAqIChCXjIgbW9kIGIpCQk8PSAoQi0xKShiLTEpCisgICAgICAqLworICAgICAgdW11bF9wcG1tIChwaCwgcGwsIHJsLCBCMW1vZGIpOworICAgICAgYWRkX3NzYWFhYSAocGgsIHBsLCBwaCwgcGwsIENOU1RfTElNQigwKSwgYXBbaV0pOworCisgICAgICB1bXVsX3BwbW0gKHJoLCBybCwgcmgsIEIybW9kYik7CisgICAgICBhZGRfc3NhYWFhIChyaCwgcmwsIHJoLCBybCwgcGgsIHBsKTsKKyAgICB9CisKKyAgY250ID0gYm1vZGJbMV07CisgIGJpID0gYm1vZGJbMF07CisKKyAgaWYgKExJS0VMWSAoY250ICE9IDApKQorICAgIHJoID0gKHJoIDw8IGNudCkgfCAocmwgPj4gKEdNUF9MSU1CX0JJVFMgLSBjbnQpKTsKKworICBtYXNrID0gLShtcF9saW1iX3QpIChyaCA+PSBiKTsKKyAgcmggLT0gbWFzayAmIGI7CisKKyAgdWRpdl9ybm5kX3ByZWludiAociwgcmgsIHJsIDw8IGNudCwgYiwgYmkpOworCisgIHJldHVybiByID4+IGNudDsKK30KKyNlbmRpZiAvKiBNT0RfMV8xUF9NRVRIT0QgPT0gMSAqLworCisjaWYgTU9EXzFfMVBfTUVUSE9EID09IDIKK3ZvaWQKK21wbl9tb2RfMV8xcF9jcHMgKG1wX2xpbWJfdCBjcHNbNF0sIG1wX2xpbWJfdCBiKQoreworICBtcF9saW1iX3QgYmk7CisgIG1wX2xpbWJfdCBCMm1vZGI7CisgIGludCBjbnQ7CisKKyAgY291bnRfbGVhZGluZ196ZXJvcyAoY250LCBiKTsKKworICBiIDw8PSBjbnQ7CisgIGludmVydF9saW1iIChiaSwgYik7CisKKyAgY3BzWzBdID0gYmk7CisgIGNwc1sxXSA9IGNudDsKKworICBpZiAoTElLRUxZIChjbnQgIT0gMCkpCisgICAgeworICAgICAgbXBfbGltYl90IEIxbW9kYiA9IC1iOworICAgICAgQjFtb2RiICo9ICgoYmkgPj4gKEdNUF9MSU1CX0JJVFMtY250KSkgfCAoQ05TVF9MSU1CKDEpIDw8IGNudCkpOworICAgICAgQVNTRVJUIChCMW1vZGIgPD0gYik7CQkvKiBOQjogbm90IGZ1bGx5IHJlZHVjZWQgbW9kIGIgKi8KKyAgICAgIGNwc1syXSA9IEIxbW9kYiA+PiBjbnQ7CisgICAgfQorICBCMm1vZGIgPSAtIGIgKiBiaTsKKyAgQVNTRVJUIChCMm1vZGIgPD0gYik7ICAgIC8vIE5COiBlcXVhbGl0eSBpZmYgYiA9IEIvMgorICBjcHNbM10gPSBCMm1vZGI7Cit9CisKK21wX2xpbWJfdAorbXBuX21vZF8xXzFwIChtcF9zcmNwdHIgYXAsIG1wX3NpemVfdCBuLCBtcF9saW1iX3QgYiwgY29uc3QgbXBfbGltYl90IGJtb2RiWzRdKQoreworICBpbnQgY250OworICBtcF9saW1iX3QgYmksIEIxbW9kYjsKKyAgbXBfbGltYl90IHIwLCByMTsKKyAgbXBfbGltYl90IHI7CisKKyAgQVNTRVJUIChuID49IDIpOwkJLyogZml4IHR1bmV1cC5jIGlmIHRoaXMgaXMgY2hhbmdlZCAqLworCisgIHIwID0gYXBbbi0yXTsKKyAgcjEgPSBhcFtuLTFdOworCisgIGlmIChuID4gMikKKyAgICB7CisgICAgICBtcF9saW1iX3QgQjJtb2RiLCBCMm1iOworICAgICAgbXBfbGltYl90IHAwLCBwMTsKKyAgICAgIG1wX2xpbWJfdCByMjsKKyAgICAgIG1wX3NpemVfdCBqOworCisgICAgICBCMm1vZGIgPSBibW9kYlszXTsKKyAgICAgIEIybWIgPSBCMm1vZGIgLSBiOworCisgICAgICB1bXVsX3BwbW0gKHAxLCBwMCwgcjEsIEIybW9kYik7CisgICAgICBhZGRfbXNzYWFhYSAocjIsIHIxLCByMCwgcjAsIGFwW24tM10sIHAxLCBwMCk7CisKKyAgICAgIGZvciAoaiA9IG4tNDsgaiA+PSAwOyBqLS0pCisJeworCSAgbXBfbGltYl90IGN5OworCSAgLyogbXBfbGltYl90IHQgPSByMCArIEIybWI7ICovCisJICB1bXVsX3BwbW0gKHAxLCBwMCwgcjEsIEIybW9kYik7CisKKwkgIEFERENfTElNQiAoY3ksIHIwLCByMCwgcjIgJiBCMm1vZGIpOworCSAgLyogQWx0ZXJuYXRpdmUsIGZvciBjbW92OiBpZiAoY3kpIHIwID0gdDsgKi8KKwkgIHIwIC09ICgtY3kpICYgYjsKKwkgIGFkZF9tc3NhYWFhIChyMiwgcjEsIHIwLCByMCwgYXBbal0sIHAxLCBwMCk7CisJfQorCisgICAgICByMSAtPSAocjIgJiBiKTsKKyAgICB9CisKKyAgY250ID0gYm1vZGJbMV07CisKKyAgaWYgKExJS0VMWSAoY250ICE9IDApKQorICAgIHsKKyAgICAgIG1wX2xpbWJfdCB0OworICAgICAgbXBfbGltYl90IEIxbW9kYiA9IGJtb2RiWzJdOworCisgICAgICB1bXVsX3BwbW0gKHIxLCB0LCByMSwgQjFtb2RiKTsKKyAgICAgIHIwICs9IHQ7CisgICAgICByMSArPSAocjAgPCB0KTsKKworICAgICAgLyogTm9ybWFsaXplICovCisgICAgICByMSA9IChyMSA8PCBjbnQpIHwgKHIwID4+IChHTVBfTElNQl9CSVRTIC0gY250KSk7CisgICAgICByMCA8PD0gY250OworCisgICAgICAvKiBOT1RFOiBNaWdodCBnZXQgcjEgPT0gYiBoZXJlLCBidXQgdWRpdl9ybm5kX3ByZWludiBhbGxvd3MgdGhhdC4gKi8KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBtcF9saW1iX3QgbWFzayA9IC0obXBfbGltYl90KSAocjEgPj0gYik7CisgICAgICByMSAtPSBtYXNrICYgYjsKKyAgICB9CisKKyAgYmkgPSBibW9kYlswXTsKKworICB1ZGl2X3JubmRfcHJlaW52IChyLCByMSwgcjAsIGIsIGJpKTsKKyAgcmV0dXJuIHIgPj4gY250OworfQorI2VuZGlmIC8qIE1PRF8xXzFQX01FVEhPRCA9PSAyICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvbW9kXzFfMi5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL21vZF8xXzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDBkMTllCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL21vZF8xXzIuYwpAQCAtMCwwICsxLDE0OCBAQAorLyogbXBuX21vZF8xc18ycCAoYXAsIG4sIGIsIGNwcykKKyAgIERpdmlkZSAoYXAsLG4pIGJ5IGIuICBSZXR1cm4gdGhlIHNpbmdsZS1saW1iIHJlbWFpbmRlci4KKyAgIFJlcXVpcmVzIHRoYXQgYiA8IEIgLyAyLgorCisgICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisgICBCYXNlZCBvbiBhIHN1Z2dlc3Rpb24gYnkgUGV0ZXIgTC4gTW9udGdvbWVyeS4KKworICAgVEhFIEZVTkNUSU9OUyBJTiBUSElTIEZJTEUgQVJFIElOVEVSTkFMIFdJVEggTVVUQUJMRSBJTlRFUkZBQ0VTLiAgSVQgSVMgT05MWQorICAgU0FGRSBUTyBSRUFDSCBUSEVNIFRIUk9VR0ggRE9DVU1FTlRFRCBJTlRFUkZBQ0VTLiAgSU4gRkFDVCwgSVQgSVMgQUxNT1NUCisgICBHVUFSQU5URUVEIFRIQVQgVEhFWSBXSUxMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR05VIE1QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAyMDA4LTIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorI2luY2x1ZGUgImxvbmdsb25nLmgiCisKK3ZvaWQKK21wbl9tb2RfMXNfMnBfY3BzIChtcF9saW1iX3QgY3BzWzVdLCBtcF9saW1iX3QgYikKK3sKKyAgbXBfbGltYl90IGJpOworICBtcF9saW1iX3QgQjFtb2RiLCBCMm1vZGIsIEIzbW9kYjsKKyAgaW50IGNudDsKKworICBBU1NFUlQgKGIgPD0gKH4obXBfbGltYl90KSAwKSAvIDIpOworCisgIGNvdW50X2xlYWRpbmdfemVyb3MgKGNudCwgYik7CisKKyAgYiA8PD0gY250OworICBpbnZlcnRfbGltYiAoYmksIGIpOworCisgIGNwc1swXSA9IGJpOworICBjcHNbMV0gPSBjbnQ7CisKKyAgQjFtb2RiID0gLWIgKiAoKGJpID4+IChHTVBfTElNQl9CSVRTLWNudCkpIHwgKENOU1RfTElNQigxKSA8PCBjbnQpKTsKKyAgQVNTRVJUIChCMW1vZGIgPD0gYik7CQkvKiBOQjogbm90IGZ1bGx5IHJlZHVjZWQgbW9kIGIgKi8KKyAgY3BzWzJdID0gQjFtb2RiID4+IGNudDsKKworICB1ZGl2X3JubmRfcHJlaW52IChCMm1vZGIsIEIxbW9kYiwgQ05TVF9MSU1CKDApLCBiLCBiaSk7CisgIGNwc1szXSA9IEIybW9kYiA+PiBjbnQ7CisKKyAgdWRpdl9ybm5kX3ByZWludiAoQjNtb2RiLCBCMm1vZGIsIENOU1RfTElNQigwKSwgYiwgYmkpOworICBjcHNbNF0gPSBCM21vZGIgPj4gY250OworCisjaWYgV0FOVF9BU1NFUlQKKyAgeworICAgIGludCBpOworICAgIGIgPSBjcHNbMl07CisgICAgZm9yIChpID0gMzsgaSA8PSA0OyBpKyspCisgICAgICB7CisJYiArPSBjcHNbaV07CisJQVNTRVJUIChiID49IGNwc1tpXSk7CisgICAgICB9CisgIH0KKyNlbmRpZgorfQorCittcF9saW1iX3QKK21wbl9tb2RfMXNfMnAgKG1wX3NyY3B0ciBhcCwgbXBfc2l6ZV90IG4sIG1wX2xpbWJfdCBiLCBjb25zdCBtcF9saW1iX3QgY3BzWzVdKQoreworICBtcF9saW1iX3QgcmgsIHJsLCBiaSwgcGgsIHBsLCBjaCwgY2wsIHI7CisgIG1wX2xpbWJfdCBCMW1vZGIsIEIybW9kYiwgQjNtb2RiOworICBtcF9zaXplX3QgaTsKKyAgaW50IGNudDsKKworICBBU1NFUlQgKG4gPj0gMSk7CisKKyAgQjFtb2RiID0gY3BzWzJdOworICBCMm1vZGIgPSBjcHNbM107CisgIEIzbW9kYiA9IGNwc1s0XTsKKworICBpZiAoKG4gJiAxKSAhPSAwKQorICAgIHsKKyAgICAgIGlmIChuID09IDEpCisJeworCSAgcmwgPSBhcFtuIC0gMV07CisJICBiaSA9IGNwc1swXTsKKwkgIGNudCA9IGNwc1sxXTsKKwkgIHVkaXZfcm5uZF9wcmVpbnYgKHIsIHJsID4+IChHTVBfTElNQl9CSVRTIC0gY250KSwKKwkJCSAgICAgcmwgPDwgY250LCBiLCBiaSk7CisJICByZXR1cm4gciA+PiBjbnQ7CisJfQorCisgICAgICB1bXVsX3BwbW0gKHBoLCBwbCwgYXBbbiAtIDJdLCBCMW1vZGIpOworICAgICAgYWRkX3NzYWFhYSAocGgsIHBsLCBwaCwgcGwsIENOU1RfTElNQigwKSwgYXBbbiAtIDNdKTsKKyAgICAgIHVtdWxfcHBtbSAocmgsIHJsLCBhcFtuIC0gMV0sIEIybW9kYik7CisgICAgICBhZGRfc3NhYWFhIChyaCwgcmwsIHJoLCBybCwgcGgsIHBsKTsKKyAgICAgIG4tLTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICByaCA9IGFwW24gLSAxXTsKKyAgICAgIHJsID0gYXBbbiAtIDJdOworICAgIH0KKworICBmb3IgKGkgPSBuIC0gNDsgaSA+PSAwOyBpIC09IDIpCisgICAgeworICAgICAgLyogcnIgPSBhcFtpXQkJCQk8IEIKKwkgICAgKyBhcFtpKzFdICogKEIgbW9kIGIpCQk8PSAoQi0xKShiLTEpCisJICAgICsgTE8ocnIpICAqIChCXjIgbW9kIGIpCQk8PSAoQi0xKShiLTEpCisJICAgICsgSEkocnIpICAqIChCXjMgbW9kIGIpCQk8PSAoQi0xKShiLTEpCisgICAgICAqLworICAgICAgdW11bF9wcG1tIChwaCwgcGwsIGFwW2kgKyAxXSwgQjFtb2RiKTsKKyAgICAgIGFkZF9zc2FhYWEgKHBoLCBwbCwgcGgsIHBsLCBDTlNUX0xJTUIoMCksIGFwW2kgKyAwXSk7CisKKyAgICAgIHVtdWxfcHBtbSAoY2gsIGNsLCBybCwgQjJtb2RiKTsKKyAgICAgIGFkZF9zc2FhYWEgKHBoLCBwbCwgcGgsIHBsLCBjaCwgY2wpOworCisgICAgICB1bXVsX3BwbW0gKHJoLCBybCwgcmgsIEIzbW9kYik7CisgICAgICBhZGRfc3NhYWFhIChyaCwgcmwsIHJoLCBybCwgcGgsIHBsKTsKKyAgICB9CisKKyAgdW11bF9wcG1tIChyaCwgY2wsIHJoLCBCMW1vZGIpOworICBhZGRfc3NhYWFhIChyaCwgcmwsIHJoLCBybCwgQ05TVF9MSU1CKDApLCBjbCk7CisKKyAgY250ID0gY3BzWzFdOworICBiaSA9IGNwc1swXTsKKworICByID0gKHJoIDw8IGNudCkgfCAocmwgPj4gKEdNUF9MSU1CX0JJVFMgLSBjbnQpKTsKKyAgdWRpdl9ybm5kX3ByZWludiAociwgciwgcmwgPDwgY250LCBiLCBiaSk7CisKKyAgcmV0dXJuIHIgPj4gY250OworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL21vZF8xXzMuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9tb2RfMV8zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ0YmU1ZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9tb2RfMV8zLmMKQEAgLTAsMCArMSwxNTYgQEAKKy8qIG1wbl9tb2RfMXNfM3AgKGFwLCBuLCBiLCBjcHMpCisgICBEaXZpZGUgKGFwLCxuKSBieSBiLiAgUmV0dXJuIHRoZSBzaW5nbGUtbGltYiByZW1haW5kZXIuCisgICBSZXF1aXJlcyB0aGF0IGIgPCBCIC8gMy4KKworICAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqb3JuIEdyYW5sdW5kLgorICAgQmFzZWQgb24gYSBzdWdnZXN0aW9uIGJ5IFBldGVyIEwuIE1vbnRnb21lcnkuCisKKyAgIFRIRSBGVU5DVElPTlMgSU4gVEhJUyBGSUxFIEFSRSBJTlRFUk5BTCBXSVRIIE1VVEFCTEUgSU5URVJGQUNFUy4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggVEhFTSBUSFJPVUdIIERPQ1VNRU5URUQgSU5URVJGQUNFUy4gIElOIEZBQ1QsIElUIElTIEFMTU9TVAorICAgR1VBUkFOVEVFRCBUSEFUIFRIRVkgV0lMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEgRlVUVVJFIEdOVSBNUCBSRUxFQVNFLgorCitDb3B5cmlnaHQgMjAwOC0yMDEwLCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKyNpbmNsdWRlICJsb25nbG9uZy5oIgorCit2b2lkCittcG5fbW9kXzFzXzNwX2NwcyAobXBfbGltYl90IGNwc1s2XSwgbXBfbGltYl90IGIpCit7CisgIG1wX2xpbWJfdCBiaTsKKyAgbXBfbGltYl90IEIxbW9kYiwgQjJtb2RiLCBCM21vZGIsIEI0bW9kYjsKKyAgaW50IGNudDsKKworICBBU1NFUlQgKGIgPD0gKH4obXBfbGltYl90KSAwKSAvIDMpOworCisgIGNvdW50X2xlYWRpbmdfemVyb3MgKGNudCwgYik7CisKKyAgYiA8PD0gY250OworICBpbnZlcnRfbGltYiAoYmksIGIpOworCisgIGNwc1swXSA9IGJpOworICBjcHNbMV0gPSBjbnQ7CisKKyAgQjFtb2RiID0gLWIgKiAoKGJpID4+IChHTVBfTElNQl9CSVRTLWNudCkpIHwgKENOU1RfTElNQigxKSA8PCBjbnQpKTsKKyAgQVNTRVJUIChCMW1vZGIgPD0gYik7CQkvKiBOQjogbm90IGZ1bGx5IHJlZHVjZWQgbW9kIGIgKi8KKyAgY3BzWzJdID0gQjFtb2RiID4+IGNudDsKKworICB1ZGl2X3JubmRfcHJlaW52IChCMm1vZGIsIEIxbW9kYiwgQ05TVF9MSU1CKDApLCBiLCBiaSk7CisgIGNwc1szXSA9IEIybW9kYiA+PiBjbnQ7CisKKyAgdWRpdl9ybm5kX3ByZWludiAoQjNtb2RiLCBCMm1vZGIsIENOU1RfTElNQigwKSwgYiwgYmkpOworICBjcHNbNF0gPSBCM21vZGIgPj4gY250OworCisgIHVkaXZfcm5uZF9wcmVpbnYgKEI0bW9kYiwgQjNtb2RiLCBDTlNUX0xJTUIoMCksIGIsIGJpKTsKKyAgY3BzWzVdID0gQjRtb2RiID4+IGNudDsKKworI2lmIFdBTlRfQVNTRVJUCisgIHsKKyAgICBpbnQgaTsKKyAgICBiID0gY3BzWzJdOworICAgIGZvciAoaSA9IDM7IGkgPD0gNTsgaSsrKQorICAgICAgeworCWIgKz0gY3BzW2ldOworCUFTU0VSVCAoYiA+PSBjcHNbaV0pOworICAgICAgfQorICB9CisjZW5kaWYKK30KKworbXBfbGltYl90CittcG5fbW9kXzFzXzNwIChtcF9zcmNwdHIgYXAsIG1wX3NpemVfdCBuLCBtcF9saW1iX3QgYiwgY29uc3QgbXBfbGltYl90IGNwc1s2XSkKK3sKKyAgbXBfbGltYl90IHJoLCBybCwgYmksIHBoLCBwbCwgY2gsIGNsLCByOworICBtcF9saW1iX3QgQjFtb2RiLCBCMm1vZGIsIEIzbW9kYiwgQjRtb2RiOworICBtcF9zaXplX3QgaTsKKyAgaW50IGNudDsKKworICBBU1NFUlQgKG4gPj0gMSk7CisKKyAgQjFtb2RiID0gY3BzWzJdOworICBCMm1vZGIgPSBjcHNbM107CisgIEIzbW9kYiA9IGNwc1s0XTsKKyAgQjRtb2RiID0gY3BzWzVdOworCisgIC8qIFdlIGNvbXB1dGUgbiBtb2QgMyBpbiBhIHRyaWNreSB3YXksIHdoaWNoIHdvcmtzIGV4Y2VwdCBmb3Igd2hlbiBuIGlzIHNvCisgICAgIGNsb3NlIHRvIHRoZSBtYXhpbXVtIHNpemUgdGhhdCB3ZSBkb24ndCBuZWVkIHRvIHN1cHBvcnQgaXQuICBUaGUgZmluYWwKKyAgICAgY2FzdCB0byBpbnQgaXMgYSB3b3JrYXJvdW5kIGZvciBIUCBjYy4gICovCisgIHN3aXRjaCAoKGludCkgKChtcF9saW1iX3QpIG4gKiBNT0RMSU1CX0lOVkVSU0VfMyA+PiAoR01QX05VTUJfQklUUyAtIDIpKSkKKyAgICB7CisgICAgY2FzZSAwOgorICAgICAgdW11bF9wcG1tIChwaCwgcGwsIGFwW24gLSAyXSwgQjFtb2RiKTsKKyAgICAgIGFkZF9zc2FhYWEgKHBoLCBwbCwgcGgsIHBsLCBDTlNUX0xJTUIoMCksIGFwW24gLSAzXSk7CisgICAgICB1bXVsX3BwbW0gKHJoLCBybCwgYXBbbiAtIDFdLCBCMm1vZGIpOworICAgICAgYWRkX3NzYWFhYSAocmgsIHJsLCByaCwgcmwsIHBoLCBwbCk7CisgICAgICBuIC09IDM7CisgICAgICBicmVhazsKKyAgICBjYXNlIDI6CS8qIG4gbW9kIDMgPSAxICovCisgICAgICByaCA9IDA7CisgICAgICBybCA9IGFwW24gLSAxXTsKKyAgICAgIG4gLT0gMTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMToJLyogbiBtb2QgMyA9IDIgKi8KKyAgICAgIHJoID0gYXBbbiAtIDFdOworICAgICAgcmwgPSBhcFtuIC0gMl07CisgICAgICBuIC09IDI7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgZm9yIChpID0gbiAtIDM7IGkgPj0gMDsgaSAtPSAzKQorICAgIHsKKyAgICAgIC8qIHJyID0gYXBbaV0JCQkJPCBCCisJICAgICsgYXBbaSsxXSAqIChCIG1vZCBiKQkJPD0gKEItMSkoYi0xKQorCSAgICArIGFwW2krMl0gKiAoQl4yIG1vZCBiKQkJPD0gKEItMSkoYi0xKQorCSAgICArIExPKHJyKSAgKiAoQl4zIG1vZCBiKQkJPD0gKEItMSkoYi0xKQorCSAgICArIEhJKHJyKSAgKiAoQl40IG1vZCBiKQkJPD0gKEItMSkoYi0xKQorICAgICAgKi8KKyAgICAgIHVtdWxfcHBtbSAocGgsIHBsLCBhcFtpICsgMV0sIEIxbW9kYik7CisgICAgICBhZGRfc3NhYWFhIChwaCwgcGwsIHBoLCBwbCwgQ05TVF9MSU1CKDApLCBhcFtpICsgMF0pOworCisgICAgICB1bXVsX3BwbW0gKGNoLCBjbCwgYXBbaSArIDJdLCBCMm1vZGIpOworICAgICAgYWRkX3NzYWFhYSAocGgsIHBsLCBwaCwgcGwsIGNoLCBjbCk7CisKKyAgICAgIHVtdWxfcHBtbSAoY2gsIGNsLCBybCwgQjNtb2RiKTsKKyAgICAgIGFkZF9zc2FhYWEgKHBoLCBwbCwgcGgsIHBsLCBjaCwgY2wpOworCisgICAgICB1bXVsX3BwbW0gKHJoLCBybCwgcmgsIEI0bW9kYik7CisgICAgICBhZGRfc3NhYWFhIChyaCwgcmwsIHJoLCBybCwgcGgsIHBsKTsKKyAgICB9CisKKyAgdW11bF9wcG1tIChyaCwgY2wsIHJoLCBCMW1vZGIpOworICBhZGRfc3NhYWFhIChyaCwgcmwsIHJoLCBybCwgQ05TVF9MSU1CKDApLCBjbCk7CisKKyAgY250ID0gY3BzWzFdOworICBiaSA9IGNwc1swXTsKKworICByID0gKHJoIDw8IGNudCkgfCAocmwgPj4gKEdNUF9MSU1CX0JJVFMgLSBjbnQpKTsKKyAgdWRpdl9ybm5kX3ByZWludiAociwgciwgcmwgPDwgY250LCBiLCBiaSk7CisKKyAgcmV0dXJuIHIgPj4gY250OworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL21vZF8xXzQuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9tb2RfMV80LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBiNDJiYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9tb2RfMV80LmMKQEAgLTAsMCArMSwxNzAgQEAKKy8qIG1wbl9tb2RfMXNfNHAgKGFwLCBuLCBiLCBjcHMpCisgICBEaXZpZGUgKGFwLCxuKSBieSBiLiAgUmV0dXJuIHRoZSBzaW5nbGUtbGltYiByZW1haW5kZXIuCisgICBSZXF1aXJlcyB0aGF0IGIgPCBCIC8gNC4KKworICAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqb3JuIEdyYW5sdW5kLgorICAgQmFzZWQgb24gYSBzdWdnZXN0aW9uIGJ5IFBldGVyIEwuIE1vbnRnb21lcnkuCisKKyAgIFRIRSBGVU5DVElPTlMgSU4gVEhJUyBGSUxFIEFSRSBJTlRFUk5BTCBXSVRIIE1VVEFCTEUgSU5URVJGQUNFUy4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggVEhFTSBUSFJPVUdIIERPQ1VNRU5URUQgSU5URVJGQUNFUy4gIElOIEZBQ1QsIElUIElTIEFMTU9TVAorICAgR1VBUkFOVEVFRCBUSEFUIFRIRVkgV0lMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEgRlVUVVJFIEdOVSBNUCBSRUxFQVNFLgorCitDb3B5cmlnaHQgMjAwOC0yMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKyNpbmNsdWRlICJsb25nbG9uZy5oIgorCit2b2lkCittcG5fbW9kXzFzXzRwX2NwcyAobXBfbGltYl90IGNwc1s3XSwgbXBfbGltYl90IGIpCit7CisgIG1wX2xpbWJfdCBiaTsKKyAgbXBfbGltYl90IEIxbW9kYiwgQjJtb2RiLCBCM21vZGIsIEI0bW9kYiwgQjVtb2RiOworICBpbnQgY250OworCisgIEFTU0VSVCAoYiA8PSAofihtcF9saW1iX3QpIDApIC8gNCk7CisKKyAgY291bnRfbGVhZGluZ196ZXJvcyAoY250LCBiKTsKKworICBiIDw8PSBjbnQ7CisgIGludmVydF9saW1iIChiaSwgYik7CisKKyAgY3BzWzBdID0gYmk7CisgIGNwc1sxXSA9IGNudDsKKworICBCMW1vZGIgPSAtYiAqICgoYmkgPj4gKEdNUF9MSU1CX0JJVFMtY250KSkgfCAoQ05TVF9MSU1CKDEpIDw8IGNudCkpOworICBBU1NFUlQgKEIxbW9kYiA8PSBiKTsJCS8qIE5COiBub3QgZnVsbHkgcmVkdWNlZCBtb2QgYiAqLworICBjcHNbMl0gPSBCMW1vZGIgPj4gY250OworCisgIHVkaXZfcm5uZF9wcmVpbnYgKEIybW9kYiwgQjFtb2RiLCBDTlNUX0xJTUIoMCksIGIsIGJpKTsKKyAgY3BzWzNdID0gQjJtb2RiID4+IGNudDsKKworICB1ZGl2X3JubmRfcHJlaW52IChCM21vZGIsIEIybW9kYiwgQ05TVF9MSU1CKDApLCBiLCBiaSk7CisgIGNwc1s0XSA9IEIzbW9kYiA+PiBjbnQ7CisKKyAgdWRpdl9ybm5kX3ByZWludiAoQjRtb2RiLCBCM21vZGIsIENOU1RfTElNQigwKSwgYiwgYmkpOworICBjcHNbNV0gPSBCNG1vZGIgPj4gY250OworCisgIHVkaXZfcm5uZF9wcmVpbnYgKEI1bW9kYiwgQjRtb2RiLCBDTlNUX0xJTUIoMCksIGIsIGJpKTsKKyAgY3BzWzZdID0gQjVtb2RiID4+IGNudDsKKworI2lmIFdBTlRfQVNTRVJUCisgIHsKKyAgICBpbnQgaTsKKyAgICBiID0gY3BzWzJdOworICAgIGZvciAoaSA9IDM7IGkgPD0gNjsgaSsrKQorICAgICAgeworCWIgKz0gY3BzW2ldOworCUFTU0VSVCAoYiA+PSBjcHNbaV0pOworICAgICAgfQorICB9CisjZW5kaWYKK30KKworbXBfbGltYl90CittcG5fbW9kXzFzXzRwIChtcF9zcmNwdHIgYXAsIG1wX3NpemVfdCBuLCBtcF9saW1iX3QgYiwgY29uc3QgbXBfbGltYl90IGNwc1s3XSkKK3sKKyAgbXBfbGltYl90IHJoLCBybCwgYmksIHBoLCBwbCwgY2gsIGNsLCByOworICBtcF9saW1iX3QgQjFtb2RiLCBCMm1vZGIsIEIzbW9kYiwgQjRtb2RiLCBCNW1vZGI7CisgIG1wX3NpemVfdCBpOworICBpbnQgY250OworCisgIEFTU0VSVCAobiA+PSAxKTsKKworICBCMW1vZGIgPSBjcHNbMl07CisgIEIybW9kYiA9IGNwc1szXTsKKyAgQjNtb2RiID0gY3BzWzRdOworICBCNG1vZGIgPSBjcHNbNV07CisgIEI1bW9kYiA9IGNwc1s2XTsKKworICBzd2l0Y2ggKG4gJiAzKQorICAgIHsKKyAgICBjYXNlIDA6CisgICAgICB1bXVsX3BwbW0gKHBoLCBwbCwgYXBbbiAtIDNdLCBCMW1vZGIpOworICAgICAgYWRkX3NzYWFhYSAocGgsIHBsLCBwaCwgcGwsIENOU1RfTElNQigwKSwgYXBbbiAtIDRdKTsKKyAgICAgIHVtdWxfcHBtbSAoY2gsIGNsLCBhcFtuIC0gMl0sIEIybW9kYik7CisgICAgICBhZGRfc3NhYWFhIChwaCwgcGwsIHBoLCBwbCwgY2gsIGNsKTsKKyAgICAgIHVtdWxfcHBtbSAocmgsIHJsLCBhcFtuIC0gMV0sIEIzbW9kYik7CisgICAgICBhZGRfc3NhYWFhIChyaCwgcmwsIHJoLCBybCwgcGgsIHBsKTsKKyAgICAgIG4gLT0gNDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICAgIHJoID0gMDsKKyAgICAgIHJsID0gYXBbbiAtIDFdOworICAgICAgbiAtPSAxOworICAgICAgYnJlYWs7CisgICAgY2FzZSAyOgorICAgICAgcmggPSBhcFtuIC0gMV07CisgICAgICBybCA9IGFwW24gLSAyXTsKKyAgICAgIG4gLT0gMjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMzoKKyAgICAgIHVtdWxfcHBtbSAocGgsIHBsLCBhcFtuIC0gMl0sIEIxbW9kYik7CisgICAgICBhZGRfc3NhYWFhIChwaCwgcGwsIHBoLCBwbCwgQ05TVF9MSU1CKDApLCBhcFtuIC0gM10pOworICAgICAgdW11bF9wcG1tIChyaCwgcmwsIGFwW24gLSAxXSwgQjJtb2RiKTsKKyAgICAgIGFkZF9zc2FhYWEgKHJoLCBybCwgcmgsIHJsLCBwaCwgcGwpOworICAgICAgbiAtPSAzOworICAgICAgYnJlYWs7CisgICAgfQorCisgIGZvciAoaSA9IG4gLSA0OyBpID49IDA7IGkgLT0gNCkKKyAgICB7CisgICAgICAvKiByciA9IGFwW2ldCQkJCTwgQgorCSAgICArIGFwW2krMV0gKiAoQiBtb2QgYikJCTw9IChCLTEpKGItMSkKKwkgICAgKyBhcFtpKzJdICogKEJeMiBtb2QgYikJCTw9IChCLTEpKGItMSkKKwkgICAgKyBhcFtpKzNdICogKEJeMyBtb2QgYikJCTw9IChCLTEpKGItMSkKKwkgICAgKyBMTyhycikgICogKEJeNCBtb2QgYikJCTw9IChCLTEpKGItMSkKKwkgICAgKyBISShycikgICogKEJeNSBtb2QgYikJCTw9IChCLTEpKGItMSkKKyAgICAgICovCisgICAgICB1bXVsX3BwbW0gKHBoLCBwbCwgYXBbaSArIDFdLCBCMW1vZGIpOworICAgICAgYWRkX3NzYWFhYSAocGgsIHBsLCBwaCwgcGwsIENOU1RfTElNQigwKSwgYXBbaSArIDBdKTsKKworICAgICAgdW11bF9wcG1tIChjaCwgY2wsIGFwW2kgKyAyXSwgQjJtb2RiKTsKKyAgICAgIGFkZF9zc2FhYWEgKHBoLCBwbCwgcGgsIHBsLCBjaCwgY2wpOworCisgICAgICB1bXVsX3BwbW0gKGNoLCBjbCwgYXBbaSArIDNdLCBCM21vZGIpOworICAgICAgYWRkX3NzYWFhYSAocGgsIHBsLCBwaCwgcGwsIGNoLCBjbCk7CisKKyAgICAgIHVtdWxfcHBtbSAoY2gsIGNsLCBybCwgQjRtb2RiKTsKKyAgICAgIGFkZF9zc2FhYWEgKHBoLCBwbCwgcGgsIHBsLCBjaCwgY2wpOworCisgICAgICB1bXVsX3BwbW0gKHJoLCBybCwgcmgsIEI1bW9kYik7CisgICAgICBhZGRfc3NhYWFhIChyaCwgcmwsIHJoLCBybCwgcGgsIHBsKTsKKyAgICB9CisKKyAgdW11bF9wcG1tIChyaCwgY2wsIHJoLCBCMW1vZGIpOworICBhZGRfc3NhYWFhIChyaCwgcmwsIHJoLCBybCwgQ05TVF9MSU1CKDApLCBjbCk7CisKKyAgY250ID0gY3BzWzFdOworICBiaSA9IGNwc1swXTsKKworICByID0gKHJoIDw8IGNudCkgfCAocmwgPj4gKEdNUF9MSU1CX0JJVFMgLSBjbnQpKTsKKyAgdWRpdl9ybm5kX3ByZWludiAociwgciwgcmwgPDwgY250LCBiLCBiaSk7CisKKyAgcmV0dXJuIHIgPj4gY250OworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL21vZF8zNGxzdWIxLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvbW9kXzM0bHN1YjEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjljNmM2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL21vZF8zNGxzdWIxLmMKQEAgLTAsMCArMSwxMjggQEAKKy8qIG1wbl9tb2RfMzRsc3ViMSAtLSByZW1haW5kZXIgbW9kdWxvIDJeKEdNUF9OVU1CX0JJVFMqMy80KS0xLgorCisgICBUSEUgRlVOQ1RJT05TIElOIFRISVMgRklMRSBBUkUgRk9SIElOVEVSTkFMIFVTRSBPTkxZLiAgVEhFWSdSRSBBTE1PU1QKKyAgIENFUlRBSU4gVE8gQkUgU1VCSkVDVCBUTyBJTkNPTVBBVElCTEUgQ0hBTkdFUyBPUiBESVNBUFBFQVIgQ09NUExFVEVMWSBJTgorICAgRlVUVVJFIEdOVSBNUCBSRUxFQVNFUy4KKworQ29weXJpZ2h0IDIwMDAtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworCisvKiBDYWxjdWxhdGUgYSByZW1haW5kZXIgZnJvbSB7cCxufSBkaXZpZGVkIGJ5IDJeKEdNUF9OVU1CX0JJVFMqMy80KS0xLgorICAgVGhlIHJlbWFpbmRlciBpcyBub3QgZnVsbHkgcmVkdWNlZCwgaXQncyBhbnkgbGltYiB2YWx1ZSBjb25ncnVlbnQgdG8KKyAgIHtwLG59IG1vZHVsbyB0aGF0IGRpdmlzb3IuCisKKyAgIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgb25seSBjb3JyZWN0IHdoZW4gR01QX05VTUJfQklUUyBpcyBhIG11bHRpcGxlIG9mCisgICA0LgorCisgICBGSVhNRTogSWYgR01QX05BSUxfQklUUyBpcyBzb21lIHNpbGx5IGJpZyB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQgdGhlbgorICAgaXQncyBwb3NzaWJsZSB0aGUgY2FycnkgYWNjdW11bGF0b3JzIGMwLGMxLGMyIGNvdWxkIG92ZXJmbG93LgorCisgICBHZW5lcmFsIG5vdGVzOgorCisgICBUaGUgYmFzaWMgaWRlYSBpcyB0byB1c2UgYSBzZXQgb2YgTiBhY2N1bXVsYXRvcnMgKE49MyBpbiB0aGlzIGNhc2UpIHRvCisgICBlZmZlY3RpdmVseSBnZXQgYSByZW1haW5kZXIgbW9kIDJeKEdNUF9OVU1CX0JJVFMqTiktMSBmb2xsb3dlZCBhdCB0aGUgZW5kCisgICBieSBhIHJlZHVjdGlvbiB0byBHTVBfTlVNQl9CSVRTKk4vTSBiaXRzIChNPTQgaW4gdGhpcyBjYXNlKSBmb3IgYQorICAgcmVtYWluZGVyIG1vZCAyXihHTVBfTlVNQl9CSVRTKk4vTSktMS4gIE4gYW5kIE0gYXJlIGNob3NlbiB0byBnaXZlIGEgZ29vZAorICAgc2V0IG9mIHNtYWxsIHByaW1lIGZhY3RvcnMgaW4gMl4oR01QX05VTUJfQklUUypOL00pLTEuCisKKyAgIE49MyBNPTQgc3VpdHMgR01QX05VTUJfQklUUz09MzIgYW5kIEdNUF9OVU1CX0JJVFM9PTY0IHF1aXRlIHdlbGwsIGdpdmluZworICAgYSBmZXcgbW9yZSBwcmltZXMgdGhhbiBhIHNpbmdsZSBhY2N1bXVsYXRvciBOPTEgZG9lcywgYW5kIGZvciBubyBleHRyYQorICAgY29zdCAoYXNzdW1pbmcgdGhlIHByb2Nlc3NvciBoYXMgYSBkZWNlbnQgbnVtYmVyIG9mIHJlZ2lzdGVycykuCisKKyAgIEZvciBzdHJhbmdlIG5haWxpZmllZCB2YWx1ZXMgb2YgR01QX05VTUJfQklUUyB0aGUgaWRlYSB3b3VsZCBiZSB0byBsb29rCisgICBmb3Igd2hhdCBOIGFuZCBNIGdpdmUgZ29vZCBwcmltZXMuICBXaXRoIEdNUF9OVU1CX0JJVFMgbm90IGEgcG93ZXIgb2YgMgorICAgdGhlIGNob2ljZXMgZm9yIE0gbWF5IGJlIG9wZW5lZCB1cCBhIGJpdC4gIEJ1dCBzdWNoIHRoaW5ncyBhcmUgcHJvYmFibHkKKyAgIGJlc3QgZG9uZSBpbiBzZXBhcmF0ZSBjb2RlLCBub3QgZ3JhZnRlZCBvbiBoZXJlLiAgKi8KKworI2lmIEdNUF9OVU1CX0JJVFMgJSA0ID09IDAKKworI2RlZmluZSBCMSAgKEdNUF9OVU1CX0JJVFMgLyA0KQorI2RlZmluZSBCMiAgKEIxICogMikKKyNkZWZpbmUgQjMgIChCMSAqIDMpCisKKyNkZWZpbmUgTTEgICgoQ05TVF9MSU1CKDEpIDw8IEIxKSAtIDEpCisjZGVmaW5lIE0yICAoKENOU1RfTElNQigxKSA8PCBCMikgLSAxKQorI2RlZmluZSBNMyAgKChDTlNUX0xJTUIoMSkgPDwgQjMpIC0gMSkKKworI2RlZmluZSBMT1cwKG4pICAgICAgKChuKSAmIE0zKQorI2RlZmluZSBISUdIMChuKSAgICAgKChuKSA+PiBCMykKKworI2RlZmluZSBMT1cxKG4pICAgICAgKCgobikgJiBNMikgPDwgQjEpCisjZGVmaW5lIEhJR0gxKG4pICAgICAoKG4pID4+IEIyKQorCisjZGVmaW5lIExPVzIobikgICAgICAoKChuKSAmIE0xKSA8PCBCMikKKyNkZWZpbmUgSElHSDIobikgICAgICgobikgPj4gQjEpCisKKyNkZWZpbmUgUEFSVFMwKG4pICAgIChMT1cwKG4pICsgSElHSDAobikpCisjZGVmaW5lIFBBUlRTMShuKSAgICAoTE9XMShuKSArIEhJR0gxKG4pKQorI2RlZmluZSBQQVJUUzIobikgICAgKExPVzIobikgKyBISUdIMihuKSkKKworI2RlZmluZSBBREQoYyxhLHZhbCkgICAgICAgICAgICAgICAgICAgIFwKKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbXBfbGltYl90ICBuZXdfYzsgICAgICAgICAgICAgICAgICAgXAorICAgIEFERENfTElNQiAobmV3X2MsIGEsIGEsIHZhbCk7ICAgICAgIFwKKyAgICAoYykgKz0gbmV3X2M7ICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gd2hpbGUgKDApCisKK21wX2xpbWJfdAorbXBuX21vZF8zNGxzdWIxIChtcF9zcmNwdHIgcCwgbXBfc2l6ZV90IG4pCit7CisgIG1wX2xpbWJfdCAgYzAsIGMxLCBjMjsKKyAgbXBfbGltYl90ICBhMCwgYTEsIGEyOworCisgIEFTU0VSVCAobiA+PSAxKTsKKyAgQVNTRVJUIChuLzMgPCBHTVBfTlVNQl9NQVgpOworCisgIGEwID0gYTEgPSBhMiA9IDA7CisgIGMwID0gYzEgPSBjMiA9IDA7CisKKyAgd2hpbGUgKChuIC09IDMpID49IDApCisgICAgeworICAgICAgQUREIChjMCwgYTAsIHBbMF0pOworICAgICAgQUREIChjMSwgYTEsIHBbMV0pOworICAgICAgQUREIChjMiwgYTIsIHBbMl0pOworICAgICAgcCArPSAzOworICAgIH0KKworICBpZiAobiAhPSAtMykKKyAgICB7CisgICAgICBBREQgKGMwLCBhMCwgcFswXSk7CisgICAgICBpZiAobiAhPSAtMikKKwlBREQgKGMxLCBhMSwgcFsxXSk7CisgICAgfQorCisgIHJldHVybgorICAgIFBBUlRTMCAoYTApICsgUEFSVFMxIChhMSkgKyBQQVJUUzIgKGEyKQorICAgICsgUEFSVFMxIChjMCkgKyBQQVJUUzIgKGMxKSArIFBBUlRTMCAoYzIpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9tb2RlMW8uYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9tb2RlMW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmEwYWUxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL21vZGUxby5jCkBAIC0wLDAgKzEsMjM1IEBACisvKiBtcG5fbW9kZXhhY3RfMWNfb2RkIC0tIG1wbiBieSBsaW1iIGV4YWN0IGRpdmlzaW9uIHN0eWxlIHJlbWFpbmRlci4KKworICAgVEhFIEZVTkNUSU9OUyBJTiBUSElTIEZJTEUgQVJFIEZPUiBJTlRFUk5BTCBVU0UgT05MWS4gIFRIRVknUkUgQUxNT1NUCisgICBDRVJUQUlOIFRPIEJFIFNVQkpFQ1QgVE8gSU5DT01QQVRJQkxFIENIQU5HRVMgT1IgRElTQVBQRUFSIENPTVBMRVRFTFkgSU4KKyAgIEZVVFVSRSBHTlUgTVAgUkVMRUFTRVMuCisKK0NvcHlyaWdodCAyMDAwLTIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorI2luY2x1ZGUgImxvbmdsb25nLmgiCisKKworLyogQ2FsY3VsYXRlIGFuIHIgc2F0aXNmeWluZworCisgICAgICAgICAgIHIqQl5rICsgYSAtIGMgPT0gcSpkCisKKyAgIHdoZXJlIEI9Ml5HTVBfTElNQl9CSVRTLCBhIGlzIHtzcmMsc2l6ZX0sIGsgaXMgZWl0aGVyIHNpemUgb3Igc2l6ZS0xCisgICAodGhlIGNhbGxlciB3b24ndCBrbm93IHdoaWNoKSwgYW5kIHEgaXMgdGhlIHF1b3RpZW50IChkaXNjYXJkZWQpLiAgZCBtdXN0CisgICBiZSBvZGQsIGMgY2FuIGJlIGFueSBsaW1iIHZhbHVlLgorCisgICBJZiBjPGQgdGhlbiByIHdpbGwgYmUgaW4gdGhlIHJhbmdlIDA8PXI8ZCwgb3IgaWYgYz49ZCB0aGVuIDA8PXI8PWQuCisKKyAgIFRoaXMgc2xpZ2h0bHkgc3RyYW5nZSBmdW5jdGlvbiBzdWl0cyB0aGUgaW5pdGlhbCBOeDEgcmVkdWN0aW9uIGZvciBHQ0RzCisgICBvciBKYWNvYmkgc3ltYm9scyBzaW5jZSB0aGUgZmFjdG9ycyBvZiAyIGluIEJeayBjYW4gYmUgaWdub3JlZCwgbGVhdmluZworICAgLXIgPT0gYSBtb2QgZCAoYnkgcGFzc2luZyBjPTApLiAgRm9yIGEgR0NEIHRoZSBmYWN0b3Igb2YgLTEgb24gciBjYW4gYmUKKyAgIGlnbm9yZWQsIG9yIGZvciB0aGUgSmFjb2JpIHN5bWJvbCBpdCBjYW4gYmUgYWNjb3VudGVkIGZvci4gIFRoZSBmdW5jdGlvbgorICAgYWxzbyBzdWl0cyBkaXZpc2liaWxpdHkgYW5kIGNvbmdydWVuY2UgdGVzdGluZyBzaW5jZSBpZiByPTAgKG9yIHI9ZCkgaXMKKyAgIG9idGFpbmVkIHRoZW4gYT09YyBtb2QgZC4KKworCisgICByIGlzIGEgYml0IGxpa2UgdGhlIHJlbWFpbmRlciByZXR1cm5lZCBieSBtcG5fZGl2ZXhhY3RfYnkzYywgYW5kIGlzIHRoZQorICAgc29ydCBvZiByZW1haW5kZXIgbXBuX2RpdmV4YWN0XzEgbWlnaHQgcmV0dXJuLiAgTGlrZSBtcG5fZGl2ZXhhY3RfYnkzYywgcgorICAgcmVwcmVzZW50cyBhIGJvcnJvdywgc2luY2UgZWZmZWN0aXZlbHkgcXVvdGllbnQgbGltYnMgYXJlIGNob3NlbiBzbyB0aGF0CisgICBzdWJ0cmFjdGluZyB0aGF0IG11bHRpcGxlIG9mIGQgZnJvbSBzcmMgYXQgZWFjaCBzdGVwIHdpbGwgcHJvZHVjZSBhIHplcm8KKyAgIGxpbWIuCisKKyAgIEEgbG9uZyBjYWxjdWxhdGlvbiBjYW4gYmUgZG9uZSBwaWVjZSBieSBwaWVjZSBmcm9tIGxvdyB0byBoaWdoIGJ5IHBhc3NpbmcKKyAgIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBvbmUgcGFydCBhcyB0aGUgY2FycnkgcGFyYW1ldGVyIHRvIHRoZSBuZXh0IHBhcnQuCisgICBUaGUgZWZmZWN0aXZlIGZpbmFsIGsgYmVjb21lcyBhbnl0aGluZyBiZXR3ZWVuIHNpemUgYW5kIHNpemUtbiwgaWYgbgorICAgcGllY2VzIGFyZSB1c2VkLgorCisKKyAgIEEgc2ltaWxhciBzb3J0IG9mIHJvdXRpbmUgY291bGQgYmUgY29uc3RydWN0ZWQgYmFzZWQgb24gYWRkaW5nIG11bHRpcGxlcworICAgb2YgZCBhdCBlYWNoIGxpbWIsIG11Y2ggbGlrZSByZWRjIGluIG1wel9wb3dtIGRvZXMuICBTdWJ0cmFjdGluZyBob3dldmVyCisgICBoYXMgYSBzbWFsbCBhZHZhbnRhZ2UgdGhhdCB3aGVuIHN1YnRyYWN0aW5nIHRvIGNhbmNlbCBvdXQgbCB0aGVyZSdzIG5ldmVyCisgICBhIGJvcnJvdyBpbnRvIGgsIHdoZXJlYXMgdXNpbmcgYW4gYWRkaXRpb24gd291bGQgcHV0IGEgY2FycnkgaW50byBoCisgICBkZXBlbmRpbmcgd2hldGhlciBsPT0wIG9yIGwhPTAuCisKKworICAgSW4gdGVybXMgb2YgZWZmaWNpZW5jeSwgdGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIGEgbXVsLWJ5LWludmVyc2UKKyAgIG1wbl9tb2RfMS4gIEJvdGggYXJlIGVzc2VudGlhbGx5IHR3byBtdWx0aXBsaWVzIGFuZCBhcmUgYmVzdCBzdWl0ZWQgdG8KKyAgIENQVXMgd2l0aCBsb3cgbGF0ZW5jeSBtdWx0aXBsaWVycyAoaW4gY29tcGFyaXNvbiB0byBhIGRpdmlkZSBpbnN0cnVjdGlvbgorICAgYXQgbGVhc3QuKSAgQnV0IG1vZGV4YWN0IGhhcyBhIGZldyBsZXNzIHN1cHBsZW1lbnRhcnkgb3BlcmF0aW9ucywgb25seQorICAgbmVlZHMgbG93IHBhcnQgYW5kIGhpZ2ggcGFydCBtdWx0aXBsaWVzLCBhbmQgaGFzIGZld2VyIHdvcmtpbmcgcXVhbnRpdGllcworICAgKGhlbHBpbmcgQ1BVcyB3aXRoIGZldyByZWdpc3RlcnMpLgorCisKKyAgIEluIHRoZSBtYWluIGxvb3AgaXQgd2lsbCBiZSBub3RlZCB0aGF0IHRoZSBuZXcgY2FycnkgKGNhbGwgaXQgcikgaXMgdGhlCisgICBzdW0gb2YgdGhlIGhpZ2ggcHJvZHVjdCBoIGFuZCBhbnkgYm9ycm93IGZyb20gbD1zLWMuICBJZiBjPGQgdGhlbiB3ZSB3aWxsCisgICBoYXZlIHI8ZCB0b28sIGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbnMuICBMZXQgcT1sKmludmVyc2UgYmUgdGhlIHF1b3RpZW50CisgICBsaW1iLCBzbyB0aGF0IHEqZCA9IEIqaCArIGwsIHdoZXJlIEI9Ml5HTVBfTlVNQl9CSVRTLiAgTm93IGlmIGg9ZC0xIHRoZW4KKworICAgICAgIGwgPSBxKmQgLSBCKihkLTEpIDw9IChCLTEpKmQgLSBCKihkLTEpID0gQi1kCisKKyAgIEJ1dCBpZiBsPXMtYyBwcm9kdWNlcyBhIGJvcnJvdyB3aGVuIGM8ZCwgdGhlbiBsPj1CLWQrMSBhbmQgaGVuY2Ugd2lsbAorICAgbmV2ZXIgaGF2ZSBoPWQtMSBhbmQgc28gcj1oK2JvcnJvdyA8PSBkLTEuCisKKyAgIFdoZW4gYz49ZCwgb24gdGhlIG90aGVyIGhhbmQsIGg9ZC0xIGNhbiBjZXJ0YWlubHkgb2NjdXIgdG9nZXRoZXIgd2l0aCBhCisgICBib3Jyb3csIHRoZXJlYnkgZ2l2aW5nIG9ubHkgcjw9ZCwgYXMgcGVyIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGFib3ZlLgorCisgICBBcyBhIGRlc2lnbiBkZWNpc2lvbiBpdCdzIGxlZnQgdG8gdGhlIGNhbGxlciB0byBjaGVjayBmb3Igcj1kIGlmIGl0IG1pZ2h0CisgICBiZSBwYXNzaW5nIGM+PWQuICBTZXZlcmFsIGFwcGxpY2F0aW9ucyBoYXZlIGM8ZCBpbml0aWFsbHkgc28gdGhlIGV4dHJhCisgICB0ZXN0IGlzIG9mdGVuIHVubmVjZXNzYXJ5LCBmb3IgZXhhbXBsZSB0aGUgR0NEcyBvciBhIHBsYWluIGRpdmlzaWJpbGl0eQorICAgZHxhIHRlc3Qgd2lsbCBwYXNzIGM9MC4KKworCisgICBUaGUgc3BlY2lhbCBjYXNlIGZvciBzaXplPT0xIGlzIHNvIHRoYXQgaXQgY2FuIGJlIGFzc3VtZWQgYzw9ZCBpbiB0aGUKKyAgIGhpZ2g8PWRpdmlzb3IgdGVzdCBhdCB0aGUgZW5kLiAgYzw9ZCBpcyBvbmx5IGd1YXJhbnRlZWQgYWZ0ZXIgYXQgbGVhc3QKKyAgIG9uZSBpdGVyYXRpb24gb2YgdGhlIG1haW4gbG9vcC4gIFRoZXJlJ3MgYWxzbyBhIGRlY2VudCBjaGFuY2Ugb25lICUgaXMKKyAgIGZhc3RlciB0aGFuIGEgYmludmVydF9saW1iLCB0aG91Z2ggdGhhdCB3aWxsIGRlcGVuZCBvbiB0aGUgcHJvY2Vzc29yLgorCisgICBBIENQVSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBtaWdodCB3YW50IHRvIG9taXQgdGhlIHNpemU9PTEgY29kZSBvciB0aGUKKyAgIGhpZ2g8ZGl2aXNvciB0ZXN0LiAgbXBuL3g4Ni9rNi9tb2RlMW8uYXNtIGZvciBpbnN0YW5jZSBmaW5kcyBuZWl0aGVyCisgICB1c2VmdWwuICAqLworCisKK21wX2xpbWJfdAorbXBuX21vZGV4YWN0XzFjX29kZCAobXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUsIG1wX2xpbWJfdCBkLAorICAgICAgICAgICAgICAgICAgICAgbXBfbGltYl90IG9yaWdfYykKK3sKKyAgbXBfbGltYl90ICBzLCBoLCBsLCBpbnZlcnNlLCBkdW1teSwgZG11bCwgcmV0OworICBtcF9saW1iX3QgIGMgPSBvcmlnX2M7CisgIG1wX3NpemVfdCAgaTsKKworICBBU1NFUlQgKHNpemUgPj0gMSk7CisgIEFTU0VSVCAoZCAmIDEpOworICBBU1NFUlRfTVBOIChzcmMsIHNpemUpOworICBBU1NFUlRfTElNQiAoZCk7CisgIEFTU0VSVF9MSU1CIChjKTsKKworICBpZiAoc2l6ZSA9PSAxKQorICAgIHsKKyAgICAgIHMgPSBzcmNbMF07CisgICAgICBpZiAocyA+IGMpCisJeworCSAgbCA9IHMtYzsKKwkgIGggPSBsICUgZDsKKwkgIGlmIChoICE9IDApCisJICAgIGggPSBkIC0gaDsKKwl9CisgICAgICBlbHNlCisJeworCSAgbCA9IGMtczsKKwkgIGggPSBsICUgZDsKKwl9CisgICAgICByZXR1cm4gaDsKKyAgICB9CisKKworICBiaW52ZXJ0X2xpbWIgKGludmVyc2UsIGQpOworICBkbXVsID0gZCA8PCBHTVBfTkFJTF9CSVRTOworCisgIGkgPSAwOworICBkbworICAgIHsKKyAgICAgIHMgPSBzcmNbaV07CisgICAgICBTVUJDX0xJTUIgKGMsIGwsIHMsIGMpOworICAgICAgbCA9IChsICogaW52ZXJzZSkgJiBHTVBfTlVNQl9NQVNLOworICAgICAgdW11bF9wcG1tIChoLCBkdW1teSwgbCwgZG11bCk7CisgICAgICBjICs9IGg7CisgICAgfQorICB3aGlsZSAoKytpIDwgc2l6ZS0xKTsKKworCisgIHMgPSBzcmNbaV07CisgIGlmIChzIDw9IGQpCisgICAgeworICAgICAgLyogV2l0aCBoaWdoPD1kIHRoZSBmaW5hbCBzdGVwIGNhbiBiZSBhIHN1YnRyYWN0IGFuZCBhZGRiYWNrLiAgSWYgYz09MAorCSB0aGVuIHRoZSBhZGRiYWNrIHdpbGwgcmVzdG9yZSB0byBsPj0wLiAgSWYgYz09ZCB0aGVuIHdpbGwgZ2V0IGw9PWQKKwkgaWYgcz09MCwgYnV0IHRoYXQncyBvayBwZXIgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uICAqLworCisgICAgICBsID0gYyAtIHM7CisgICAgICBpZiAoYyA8IHMpCisJbCArPSBkOworCisgICAgICByZXQgPSBsOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIENhbid0IHNraXAgYSBkaXZpZGUsIGp1c3QgZG8gdGhlIGxvb3AgY29kZSBvbmNlIG1vcmUuICovCisKKyAgICAgIFNVQkNfTElNQiAoYywgbCwgcywgYyk7CisgICAgICBsID0gKGwgKiBpbnZlcnNlKSAmIEdNUF9OVU1CX01BU0s7CisgICAgICB1bXVsX3BwbW0gKGgsIGR1bW15LCBsLCBkbXVsKTsKKyAgICAgIGMgKz0gaDsKKyAgICAgIHJldCA9IGM7CisgICAgfQorCisgIEFTU0VSVCAob3JpZ19jIDwgZCA/IHJldCA8IGQgOiByZXQgPD0gZCk7CisgIHJldHVybiByZXQ7Cit9CisKKworCisjaWYgMAorCisvKiBUaGUgZm9sbG93aW5nIGlzIGFuIGFsdGVybmF0ZSBmb3JtIHRoYXQgbWlnaHQgc2hhdmUgb25lIGN5Y2xlIG9uIGEKKyAgIHN1cGVyc2NhbGFyIHByb2Nlc3NvciBzaW5jZSBpdCB0YWtlcyBjKz1oIG9mZiB0aGUgZGVwZW5kZW50IGNoYWluLAorICAgbGVhdmluZyBqdXN0IGEgbG93IHByb2R1Y3QsIGhpZ2ggcHJvZHVjdCwgYW5kIGEgc3VidHJhY3QuCisKKyAgIFRoaXMgaXMgZm9yIENQVSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgdG8gY29uc2lkZXIuICBBIHNwZWNpYWwgY2FzZSBmb3IKKyAgIGhpZ2g8ZGl2aXNvciBhbmQvb3Igc2l6ZT09MSBjYW4gYmUgYWRkZWQgaWYgZGVzaXJlZC4KKworICAgTm90aWNlIHRoYXQgYyBpcyBvbmx5IGV2ZXIgMCBvciAxLCBzaW5jZSBpZiBzLWMgcHJvZHVjZXMgYSBib3Jyb3cgdGhlbgorICAgeD0weEZGLi5GRiBhbmQgeC1oIGNhbm5vdCBwcm9kdWNlIGEgYm9ycm93LiAgVGhlIGM9KHg+cykgY291bGQgYmVjb21lCisgICBjPSh4PT0weEZGLi5GRikgdG9vLCBpZiB0aGF0IGhlbHBlZC4gICovCisKK21wX2xpbWJfdAorbXBuX21vZGV4YWN0XzFjX29kZCAobXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUsIG1wX2xpbWJfdCBkLCBtcF9saW1iX3QgaCkKK3sKKyAgbXBfbGltYl90ICBzLCB4LCB5LCBpbnZlcnNlLCBkdW1teSwgZG11bCwgYzEsIGMyOworICBtcF9saW1iX3QgIGMgPSAwOworICBtcF9zaXplX3QgIGk7CisKKyAgQVNTRVJUIChzaXplID49IDEpOworICBBU1NFUlQgKGQgJiAxKTsKKworICBiaW52ZXJ0X2xpbWIgKGludmVyc2UsIGQpOworICBkbXVsID0gZCA8PCBHTVBfTkFJTF9CSVRTOworCisgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisgICAgeworICAgICAgQVNTRVJUIChjPT0wIHx8IGM9PTEpOworCisgICAgICBzID0gc3JjW2ldOworICAgICAgU1VCQ19MSU1CIChjMSwgeCwgcywgYyk7CisKKyAgICAgIFNVQkNfTElNQiAoYzIsIHksIHgsIGgpOworICAgICAgYyA9IGMxICsgYzI7CisKKyAgICAgIHkgPSAoeSAqIGludmVyc2UpICYgR01QX05VTUJfTUFTSzsKKyAgICAgIHVtdWxfcHBtbSAoaCwgZHVtbXksIHksIGRtdWwpOworICAgIH0KKworICBoICs9IGM7CisgIHJldHVybiBoOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9tdV9iZGl2X3EuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9tdV9iZGl2X3EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWYzYmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL211X2JkaXZfcS5jCkBAIC0wLDAgKzEsMjgxIEBACisvKiBtcG5fbXVfYmRpdl9xKHFwLG5wLG5uLGRwLGRuLHRwKSAtLSBDb21wdXRlIHtucCxubn0gLyB7ZHAsZG59IG1vZCBCXm5uLgorICAgc3RvcmluZyB0aGUgcmVzdWx0IGluIHtxcCxubn0uICBPdmVybGFwIGFsbG93ZWQgYmV0d2VlbiBRIGFuZCBOOyBhbGwgb3RoZXIKKyAgIG92ZXJsYXAgZGlzYWxsb3dlZC4KKworICAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqb3JuIEdyYW5sdW5kLgorCisgICBUSEUgRlVOQ1RJT05TIElOIFRISVMgRklMRSBBUkUgSU5URVJOQUwgV0lUSCBNVVRBQkxFIElOVEVSRkFDRVMuICBJVCBJUyBPTkxZCisgICBTQUZFIFRPIFJFQUNIIFRIRU0gVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuICBJTiBGQUNULCBJVCBJUyBBTE1PU1QKKyAgIEdVQVJBTlRFRUQgVEhBVCBUSEVZIFdJTEwgQ0hBTkdFIE9SIERJU0FQUEVBUiBJTiBBIEZVVFVSRSBHTVAgUkVMRUFTRS4KKworQ29weXJpZ2h0IDIwMDUtMjAwNywgMjAwOSwgMjAxMCwgMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworCisvKgorICAgVGhlIGlkZWEgb2YgdGhlIGFsZ29yaXRobSB1c2VkIGhlcmVpbiBpcyB0byBjb21wdXRlIGEgc21hbGxlciBpbnZlcnRlZCB2YWx1ZQorICAgdGhhbiB1c2VkIGluIHRoZSBzdGFuZGFyZCBCYXJyZXR0IGFsZ29yaXRobSwgYW5kIHRodXMgc2F2ZSB0aW1lIGluIHRoZQorICAgTmV3dG9uIGl0ZXJhdGlvbnMsIGFuZCBwYXkganVzdCBhIHNtYWxsIHByaWNlIHdoZW4gdXNpbmcgdGhlIGludmVydGVkIHZhbHVlCisgICBmb3IgZGV2ZWxvcGluZyBxdW90aWVudCBiaXRzLiAgVGhpcyBhbGdvcml0aG0gd2FzIHByZXNlbnRlZCBhdCBJQ01TIDIwMDYuCisqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworCisvKiBOID0ge25wLG5ufQorICAgRCA9IHtkcCxkbn0KKworICAgUmVxdWlyZW1lbnRzOiBOID49IEQKKwkJIEQgPj0gMQorCQkgRCBvZGQKKwkJIGRuID49IDIKKwkJIG5uID49IDIKKwkJIHNjcmF0Y2ggc3BhY2UgYXMgZGV0ZXJtaW5lZCBieSBtcG5fbXVfYmRpdl9xX2l0Y2gobm4sZG4pLgorCisgICBXcml0ZSBxdW90aWVudCB0byBRID0ge3FwLG5ufS4KKworICAgRklYTUU6IFdoZW4gaXRlcmF0aW5nLCBwZXJoYXBzIGRvIHRoZSBzbWFsbCBzdGVwIGJlZm9yZSBsb29wLCBub3QgYWZ0ZXIuCisgICBGSVhNRTogVHJ5IHRvIGF2b2lkIHRoZSBzY2FsYXIgZGl2aXNpb25zIHdoZW4gY29tcHV0aW5nIGludmVyc2Ugc2l6ZS4KKyAgIEZJWE1FOiBUcmltIGFsbG9jYXRpb24gZm9yIChxbiA+IGRuKSBjYXNlLCAzKmRuIG1pZ2h0IGJlIHBvc3NpYmxlLiAgSW4KKwkgIHBhcnRpY3VsYXIsIHdoZW4gZG49PWluLCB0cCBhbmQgcnAgY291bGQgdXNlIHRoZSBzYW1lIHNwYWNlLgorICAgRklYTUU6IFRyaW0gZmluYWwgcXVvdGllbnQgY2FsY3VsYXRpb24gdG8gcW4gbGltYnMgb2YgcHJlY2lzaW9uLgorKi8KK3N0YXRpYyB2b2lkCittcG5fbXVfYmRpdl9xX29sZCAobXBfcHRyIHFwLAorCSAgICAgICBtcF9zcmNwdHIgbnAsIG1wX3NpemVfdCBubiwKKwkgICAgICAgbXBfc3JjcHRyIGRwLCBtcF9zaXplX3QgZG4sCisJICAgICAgIG1wX3B0ciBzY3JhdGNoKQoreworICBtcF9zaXplX3QgcW47CisgIG1wX3NpemVfdCBpbjsKKyAgaW50IGN5LCBjMDsKKyAgbXBfc2l6ZV90IHRuLCB3bjsKKworICBxbiA9IG5uOworCisgIEFTU0VSVCAoZG4gPj0gMik7CisgIEFTU0VSVCAocW4gPj0gMik7CisKKyAgaWYgKHFuID4gZG4pCisgICAgeworICAgICAgbXBfc2l6ZV90IGI7CisKKyAgICAgIC8qIHxfX19fX19fX19fX19fX19fX19fX19fX3wgICBkaXZpZGVuZAorCQkJfF9fX19fX19ffCAgIGRpdmlzb3IgICovCisKKyNkZWZpbmUgaXAgICAgICAgICAgIHNjcmF0Y2gJCQkvKiBpbiAqLworI2RlZmluZSBycCAgICAgICAgICAgKHNjcmF0Y2ggKyBpbikJCS8qIGRuIG9yIHJlc3QgPj0gYmludmVydF9pdGNoKGluKSAqLworI2RlZmluZSB0cCAgICAgICAgICAgKHNjcmF0Y2ggKyBpbiArIGRuKQkvKiBkbitpbiBvciBuZXh0X3NpemUoZG4pICovCisjZGVmaW5lIHNjcmF0Y2hfb3V0ICAoc2NyYXRjaCArIGluICsgZG4gKyB0bikJLyogbXVsbW9kX2JubTFfaXRjaChuZXh0X3NpemUoZG4pKSAqLworCisgICAgICAvKiBDb21wdXRlIGFuIGludmVyc2Ugc2l6ZSB0aGF0IGlzIGEgbmljZSBwYXJ0aXRpb24gb2YgdGhlIHF1b3RpZW50LiAgKi8KKyAgICAgIGIgPSAocW4gLSAxKSAvIGRuICsgMTsJLyogY2VpbChxbi9kbiksIG51bWJlciBvZiBibG9ja3MgKi8KKyAgICAgIGluID0gKHFuIC0gMSkgLyBiICsgMTsJLyogY2VpbChxbi9iKSA9IGNlaWwocW4gLyBjZWlsKHFuL2RuKSkgKi8KKworICAgICAgLyogU29tZSBub3RlcyBvbiBhbGxvY2F0aW9uOgorCisJIFdoZW4gaW4gPSBkbiwgUiBkaWVzIHdoZW4gbXBuX211bGxvIHJldHVybnMsIGlmIGluIDwgZG4gdGhlIGxvdyBpbgorCSBsaW1icyBvZiBSIGRpZXMgYXQgdGhhdCBwb2ludC4gIFdlIGNvdWxkIHNhdmUgbWVtb3J5IGJ5IGxldHRpbmcgVCBsaXZlCisJIGp1c3QgdW5kZXIgUiwgYW5kIGxldCB0aGUgdXBwZXIgcGFydCBvZiBUIGV4cGFuZCBpbnRvIFIuIFRoZXNlIGNoYW5nZXMKKwkgc2hvdWxkIHJlZHVjZSBpdGNoIHRvIHBlcmhhcHMgM2RuLgorICAgICAgICovCisKKyAgICAgIG1wbl9iaW52ZXJ0IChpcCwgZHAsIGluLCBycCk7CisKKyAgICAgIGN5ID0gMDsKKworICAgICAgTVBOX0NPUFkgKHJwLCBucCwgZG4pOworICAgICAgbnAgKz0gZG47CisgICAgICBtcG5fbXVsbG9fbiAocXAsIHJwLCBpcCwgaW4pOworICAgICAgcW4gLT0gaW47CisKKyAgICAgIHdoaWxlIChxbiA+IGluKQorCXsKKwkgIGlmIChCRUxPV19USFJFU0hPTEQgKGluLCBNVUxfVE9fTVVMTU9EX0JOTTFfRk9SXzJOWE5fVEhSRVNIT0xEKSkKKwkgICAgbXBuX211bCAodHAsIGRwLCBkbiwgcXAsIGluKTsJLyogbXVsaGksIG5lZWQgdHBbZG4raW4tMS4uLmluXSAqLworCSAgZWxzZQorCSAgICB7CisJICAgICAgdG4gPSBtcG5fbXVsbW9kX2JubTFfbmV4dF9zaXplIChkbik7CisJICAgICAgbXBuX211bG1vZF9ibm0xICh0cCwgdG4sIGRwLCBkbiwgcXAsIGluLCBzY3JhdGNoX291dCk7CisJICAgICAgd24gPSBkbiArIGluIC0gdG47CQkvKiBudW1iZXIgb2Ygd3JhcHBlZCBsaW1icyAqLworCSAgICAgIGlmICh3biA+IDApCisJCXsKKwkJICBjMCA9IG1wbl9zdWJfbiAodHAgKyB0biwgdHAsIHJwLCB3bik7CisJCSAgbXBuX2RlY3JfdSAodHAgKyB3biwgYzApOworCQl9CisJICAgIH0KKworCSAgcXAgKz0gaW47CisJICBpZiAoZG4gIT0gaW4pCisJICAgIHsKKwkgICAgICAvKiBTdWJ0cmFjdCB0cFtkbi0xLi4uaW5dIGZyb20gcGFydGlhbCByZW1haW5kZXIuICAqLworCSAgICAgIGN5ICs9IG1wbl9zdWJfbiAocnAsIHJwICsgaW4sIHRwICsgaW4sIGRuIC0gaW4pOworCSAgICAgIGlmIChjeSA9PSAyKQorCQl7CisJCSAgbXBuX2luY3JfdSAodHAgKyBkbiwgMSk7CisJCSAgY3kgPSAxOworCQl9CisJICAgIH0KKwkgIC8qIFN1YnRyYWN0IHRwW2RuK2luLTEuLi5kbl0gZnJvbSBkaXZpZGVuZC4gICovCisJICBjeSA9IG1wbl9zdWJfbmMgKHJwICsgZG4gLSBpbiwgbnAsIHRwICsgZG4sIGluLCBjeSk7CisJICBucCArPSBpbjsKKwkgIG1wbl9tdWxsb19uIChxcCwgcnAsIGlwLCBpbik7CisJICBxbiAtPSBpbjsKKwl9CisKKyAgICAgIC8qIEdlbmVyYXRlIGxhc3QgcW4gbGltYnMuCisJIEZJWE1FOiBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gbGltaXQgcHJlY2lzaW9uIGhlcmUsIHNpbmNlIHFuIGlzCisJIHR5cGljYWxseSBzb21ld2hhdCBzbWFsbGVyIHRoYW4gZG4uICBObyBiaWcgZ2FpbnMgZXhwZWN0ZWQuICAqLworCisgICAgICBpZiAoQkVMT1dfVEhSRVNIT0xEIChpbiwgTVVMX1RPX01VTE1PRF9CTk0xX0ZPUl8yTlhOX1RIUkVTSE9MRCkpCisJbXBuX211bCAodHAsIGRwLCBkbiwgcXAsIGluKTsJCS8qIG11bGhpLCBuZWVkIHRwW3FuK2luLTEuLi5pbl0gKi8KKyAgICAgIGVsc2UKKwl7CisJICB0biA9IG1wbl9tdWxtb2RfYm5tMV9uZXh0X3NpemUgKGRuKTsKKwkgIG1wbl9tdWxtb2RfYm5tMSAodHAsIHRuLCBkcCwgZG4sIHFwLCBpbiwgc2NyYXRjaF9vdXQpOworCSAgd24gPSBkbiArIGluIC0gdG47CQkJLyogbnVtYmVyIG9mIHdyYXBwZWQgbGltYnMgKi8KKwkgIGlmICh3biA+IDApCisJICAgIHsKKwkgICAgICBjMCA9IG1wbl9zdWJfbiAodHAgKyB0biwgdHAsIHJwLCB3bik7CisJICAgICAgbXBuX2RlY3JfdSAodHAgKyB3biwgYzApOworCSAgICB9CisJfQorCisgICAgICBxcCArPSBpbjsKKyAgICAgIGlmIChkbiAhPSBpbikKKwl7CisJICBjeSArPSBtcG5fc3ViX24gKHJwLCBycCArIGluLCB0cCArIGluLCBkbiAtIGluKTsKKwkgIGlmIChjeSA9PSAyKQorCSAgICB7CisJICAgICAgbXBuX2luY3JfdSAodHAgKyBkbiwgMSk7CisJICAgICAgY3kgPSAxOworCSAgICB9CisJfQorCisgICAgICBtcG5fc3ViX25jIChycCArIGRuIC0gaW4sIG5wLCB0cCArIGRuLCBxbiAtIChkbiAtIGluKSwgY3kpOworICAgICAgbXBuX211bGxvX24gKHFwLCBycCwgaXAsIHFuKTsKKworI3VuZGVmIGlwCisjdW5kZWYgcnAKKyN1bmRlZiB0cAorI3VuZGVmIHNjcmF0Y2hfb3V0CisgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiB8X19fX19fX19fX19fX19fX19fX19fX198ICAgZGl2aWRlbmQKKwkJfF9fX19fX19fX19fX19fX198ICAgZGl2aXNvciAgKi8KKworI2RlZmluZSBpcCAgICAgICAgICAgc2NyYXRjaAkJLyogaW4gKi8KKyNkZWZpbmUgdHAgICAgICAgICAgIChzY3JhdGNoICsgaW4pCS8qIHFuK2luIG9yIG5leHRfc2l6ZShxbikgb3IgcmVzdCA+PSBiaW52ZXJ0X2l0Y2goaW4pICovCisjZGVmaW5lIHNjcmF0Y2hfb3V0ICAoc2NyYXRjaCArIGluICsgdG4pLyogbXVsbW9kX2JubTFfaXRjaChuZXh0X3NpemUocW4pKSAqLworCisgICAgICAvKiBDb21wdXRlIGhhbGYtc2l6ZWQgaW52ZXJzZS4gICovCisgICAgICBpbiA9IHFuIC0gKHFuID4+IDEpOworCisgICAgICBtcG5fYmludmVydCAoaXAsIGRwLCBpbiwgdHApOworCisgICAgICBtcG5fbXVsbG9fbiAocXAsIG5wLCBpcCwgaW4pOwkJLyogbG93IGBpbicgcXVvdGllbnQgbGltYnMgKi8KKworICAgICAgaWYgKEJFTE9XX1RIUkVTSE9MRCAoaW4sIE1VTF9UT19NVUxNT0RfQk5NMV9GT1JfMk5YTl9USFJFU0hPTEQpKQorCW1wbl9tdWwgKHRwLCBkcCwgcW4sIHFwLCBpbik7CQkvKiBtdWxoaWdoICovCisgICAgICBlbHNlCisJeworCSAgdG4gPSBtcG5fbXVsbW9kX2JubTFfbmV4dF9zaXplIChxbik7CisJICBtcG5fbXVsbW9kX2JubTEgKHRwLCB0biwgZHAsIHFuLCBxcCwgaW4sIHNjcmF0Y2hfb3V0KTsKKwkgIHduID0gcW4gKyBpbiAtIHRuOwkJCS8qIG51bWJlciBvZiB3cmFwcGVkIGxpbWJzICovCisJICBpZiAod24gPiAwKQorCSAgICB7CisJICAgICAgYzAgPSBtcG5fY21wICh0cCwgbnAsIHduKSA8IDA7CisJICAgICAgbXBuX2RlY3JfdSAodHAgKyB3biwgYzApOworCSAgICB9CisJfQorCisgICAgICBtcG5fc3ViX24gKHRwLCBucCArIGluLCB0cCArIGluLCBxbiAtIGluKTsKKyAgICAgIG1wbl9tdWxsb19uIChxcCArIGluLCB0cCwgaXAsIHFuIC0gaW4pOwkvKiBoaWdoIHFuLWluIHF1b3RpZW50IGxpbWJzICovCisKKyN1bmRlZiBpcAorI3VuZGVmIHRwCisjdW5kZWYgc2NyYXRjaF9vdXQKKyAgICB9Cit9CisKK3ZvaWQKK21wbl9tdV9iZGl2X3EgKG1wX3B0ciBxcCwKKwkgICAgICAgbXBfc3JjcHRyIG5wLCBtcF9zaXplX3Qgbm4sCisJICAgICAgIG1wX3NyY3B0ciBkcCwgbXBfc2l6ZV90IGRuLAorCSAgICAgICBtcF9wdHIgc2NyYXRjaCkKK3sKKyAgbXBuX211X2JkaXZfcV9vbGQgKHFwLCBucCwgbm4sIGRwLCBkbiwgc2NyYXRjaCk7CisgIG1wbl9uZWcgKHFwLCBxcCwgbm4pOworfQorCittcF9zaXplX3QKK21wbl9tdV9iZGl2X3FfaXRjaCAobXBfc2l6ZV90IG5uLCBtcF9zaXplX3QgZG4pCit7CisgIG1wX3NpemVfdCBxbiwgaW4sIHRuLCBpdGNoX2JpbnZlcnQsIGl0Y2hfb3V0LCBpdGNoZXM7CisgIG1wX3NpemVfdCBiOworCisgIEFTU0VSVF9BTFdBWVMgKERDX0JESVZfUV9USFJFU0hPTEQgPCBNVV9CRElWX1FfVEhSRVNIT0xEKTsKKworICBxbiA9IG5uOworCisgIGlmIChxbiA+IGRuKQorICAgIHsKKyAgICAgIGIgPSAocW4gLSAxKSAvIGRuICsgMTsJLyogY2VpbChxbi9kbiksIG51bWJlciBvZiBibG9ja3MgKi8KKyAgICAgIGluID0gKHFuIC0gMSkgLyBiICsgMTsJLyogY2VpbChxbi9iKSA9IGNlaWwocW4gLyBjZWlsKHFuL2RuKSkgKi8KKyAgICAgIGlmIChCRUxPV19USFJFU0hPTEQgKGluLCBNVUxfVE9fTVVMTU9EX0JOTTFfRk9SXzJOWE5fVEhSRVNIT0xEKSkKKwl7CisJICB0biA9IGRuICsgaW47CisJICBpdGNoX291dCA9IDA7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHRuID0gbXBuX211bG1vZF9ibm0xX25leHRfc2l6ZSAoZG4pOworCSAgaXRjaF9vdXQgPSBtcG5fbXVsbW9kX2JubTFfaXRjaCAodG4sIGRuLCBpbik7CisJfQorICAgICAgaXRjaGVzID0gZG4gKyB0biArIGl0Y2hfb3V0OworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGluID0gcW4gLSAocW4gPj4gMSk7CisgICAgICBpZiAoQkVMT1dfVEhSRVNIT0xEIChpbiwgTVVMX1RPX01VTE1PRF9CTk0xX0ZPUl8yTlhOX1RIUkVTSE9MRCkpCisJeworCSAgdG4gPSBxbiArIGluOworCSAgaXRjaF9vdXQgPSAwOworCX0KKyAgICAgIGVsc2UKKwl7CisJICB0biA9IG1wbl9tdWxtb2RfYm5tMV9uZXh0X3NpemUgKHFuKTsKKwkgIGl0Y2hfb3V0ID0gbXBuX211bG1vZF9ibm0xX2l0Y2ggKHRuLCBxbiwgaW4pOworCX0KKyAgICAgIGl0Y2hlcyA9IHRuICsgaXRjaF9vdXQ7CisgICAgfQorCisgIGl0Y2hfYmludmVydCA9IG1wbl9iaW52ZXJ0X2l0Y2ggKGluKTsKKyAgcmV0dXJuIGluICsgTUFYIChpdGNoZXMsIGl0Y2hfYmludmVydCk7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvbXVfYmRpdl9xci5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL211X2JkaXZfcXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDBhZDczCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL211X2JkaXZfcXIuYwpAQCAtMCwwICsxLDMxMiBAQAorLyogbXBuX211X2JkaXZfcXIocXAscnAsbnAsbm4sZHAsZG4sdHApIC0tIENvbXB1dGUge25wLG5ufSAvIHtkcCxkbn0gbW9kIEJecW4sCisgICB3aGVyZSBxbiA9IG5uLWRuLCBzdG9yaW5nIHRoZSByZXN1bHQgaW4ge3FwLHFufS4gIE92ZXJsYXAgYWxsb3dlZCBiZXR3ZWVuIFEKKyAgIGFuZCBOOyBhbGwgb3RoZXIgb3ZlcmxhcCBkaXNhbGxvd2VkLgorCisgICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisKKyAgIFRIRSBGVU5DVElPTlMgSU4gVEhJUyBGSUxFIEFSRSBJTlRFUk5BTCBXSVRIIE1VVEFCTEUgSU5URVJGQUNFUy4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggVEhFTSBUSFJPVUdIIERPQ1VNRU5URUQgSU5URVJGQUNFUy4gIElOIEZBQ1QsIElUIElTIEFMTU9TVAorICAgR1VBUkFOVEVFRCBUSEFUIFRIRVkgV0lMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEgRlVUVVJFIEdNUCBSRUxFQVNFLgorCitDb3B5cmlnaHQgMjAwNS0yMDA3LCAyMDA5LCAyMDEwLCAyMDEyLCAyMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisKKy8qCisgICBUaGUgaWRlYSBvZiB0aGUgYWxnb3JpdGhtIHVzZWQgaGVyZWluIGlzIHRvIGNvbXB1dGUgYSBzbWFsbGVyIGludmVydGVkIHZhbHVlCisgICB0aGFuIHVzZWQgaW4gdGhlIHN0YW5kYXJkIEJhcnJldHQgYWxnb3JpdGhtLCBhbmQgdGh1cyBzYXZlIHRpbWUgaW4gdGhlCisgICBOZXd0b24gaXRlcmF0aW9ucywgYW5kIHBheSBqdXN0IGEgc21hbGwgcHJpY2Ugd2hlbiB1c2luZyB0aGUgaW52ZXJ0ZWQgdmFsdWUKKyAgIGZvciBkZXZlbG9waW5nIHF1b3RpZW50IGJpdHMuICBUaGlzIGFsZ29yaXRobSB3YXMgcHJlc2VudGVkIGF0IElDTVMgMjAwNi4KKyovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCisKKy8qIE4gPSB7bnAsbm59CisgICBEID0ge2RwLGRufQorCisgICBSZXF1aXJlbWVudHM6IE4gPj0gRAorCQkgRCA+PSAxCisJCSBEIG9kZAorCQkgZG4gPj0gMgorCQkgbm4gPj0gMgorCQkgc2NyYXRjaCBzcGFjZSBhcyBkZXRlcm1pbmVkIGJ5IG1wbl9tdV9iZGl2X3FyX2l0Y2gobm4sZG4pLgorCisgICBXcml0ZSBxdW90aWVudCB0byBRID0ge3FwLG5uLWRufS4KKworICAgRklYTUU6IFdoZW4gaXRlcmF0aW5nLCBwZXJoYXBzIGRvIHRoZSBzbWFsbCBzdGVwIGJlZm9yZSBsb29wLCBub3QgYWZ0ZXIuCisgICBGSVhNRTogVHJ5IHRvIGF2b2lkIHRoZSBzY2FsYXIgZGl2aXNpb25zIHdoZW4gY29tcHV0aW5nIGludmVyc2Ugc2l6ZS4KKyAgIEZJWE1FOiBUcmltIGFsbG9jYXRpb24gZm9yIChxbiA+IGRuKSBjYXNlLCAzKmRuIG1pZ2h0IGJlIHBvc3NpYmxlLiAgSW4KKwkgIHBhcnRpY3VsYXIsIHdoZW4gZG49PWluLCB0cCBhbmQgcnAgY291bGQgdXNlIHRoZSBzYW1lIHNwYWNlLgorKi8KK3N0YXRpYyBtcF9saW1iX3QKK21wbl9tdV9iZGl2X3FyX29sZCAobXBfcHRyIHFwLAorCQkgICAgbXBfcHRyIHJwLAorCQkgICAgbXBfc3JjcHRyIG5wLCBtcF9zaXplX3Qgbm4sCisJCSAgICBtcF9zcmNwdHIgZHAsIG1wX3NpemVfdCBkbiwKKwkJICAgIG1wX3B0ciBzY3JhdGNoKQoreworICBtcF9zaXplX3QgcW47CisgIG1wX3NpemVfdCBpbjsKKyAgbXBfbGltYl90IGN5LCBjMDsKKyAgbXBfc2l6ZV90IHRuLCB3bjsKKworICBxbiA9IG5uIC0gZG47CisKKyAgQVNTRVJUIChkbiA+PSAyKTsKKyAgQVNTRVJUIChxbiA+PSAyKTsKKworICBpZiAocW4gPiBkbikKKyAgICB7CisgICAgICBtcF9zaXplX3QgYjsKKworICAgICAgLyogfF9fX19fX19fX19fX19fX19fX19fX19ffCAgIGRpdmlkZW5kCisJCQl8X19fX19fX198ICAgZGl2aXNvciAgKi8KKworI2RlZmluZSBpcCAgICAgICAgICAgc2NyYXRjaAkJLyogaW4gKi8KKyNkZWZpbmUgdHAgICAgICAgICAgIChzY3JhdGNoICsgaW4pCS8qIGRuK2luIG9yIG5leHRfc2l6ZShkbikgb3IgcmVzdCA+PSBiaW52ZXJ0X2l0Y2goaW4pICovCisjZGVmaW5lIHNjcmF0Y2hfb3V0ICAoc2NyYXRjaCArIGluICsgdG4pLyogbXVsbW9kX2JubTFfaXRjaChuZXh0X3NpemUoZG4pKSAqLworCisgICAgICAvKiBDb21wdXRlIGFuIGludmVyc2Ugc2l6ZSB0aGF0IGlzIGEgbmljZSBwYXJ0aXRpb24gb2YgdGhlIHF1b3RpZW50LiAgKi8KKyAgICAgIGIgPSAocW4gLSAxKSAvIGRuICsgMTsJLyogY2VpbChxbi9kbiksIG51bWJlciBvZiBibG9ja3MgKi8KKyAgICAgIGluID0gKHFuIC0gMSkgLyBiICsgMTsJLyogY2VpbChxbi9iKSA9IGNlaWwocW4gLyBjZWlsKHFuL2RuKSkgKi8KKworICAgICAgLyogU29tZSBub3RlcyBvbiBhbGxvY2F0aW9uOgorCisJIFdoZW4gaW4gPSBkbiwgUiBkaWVzIHdoZW4gbXBuX211bGxvIHJldHVybnMsIGlmIGluIDwgZG4gdGhlIGxvdyBpbgorCSBsaW1icyBvZiBSIGRpZXMgYXQgdGhhdCBwb2ludC4gIFdlIGNvdWxkIHNhdmUgbWVtb3J5IGJ5IGxldHRpbmcgVCBsaXZlCisJIGp1c3QgdW5kZXIgUiwgYW5kIGxldCB0aGUgdXBwZXIgcGFydCBvZiBUIGV4cGFuZCBpbnRvIFIuIFRoZXNlIGNoYW5nZXMKKwkgc2hvdWxkIHJlZHVjZSBpdGNoIHRvIHBlcmhhcHMgM2RuLgorICAgICAgICovCisKKyAgICAgIG1wbl9iaW52ZXJ0IChpcCwgZHAsIGluLCB0cCk7CisKKyAgICAgIE1QTl9DT1BZIChycCwgbnAsIGRuKTsKKyAgICAgIG5wICs9IGRuOworICAgICAgY3kgPSAwOworCisgICAgICB3aGlsZSAocW4gPiBpbikKKwl7CisJICBtcG5fbXVsbG9fbiAocXAsIHJwLCBpcCwgaW4pOworCisJICBpZiAoQkVMT1dfVEhSRVNIT0xEIChpbiwgTVVMX1RPX01VTE1PRF9CTk0xX0ZPUl8yTlhOX1RIUkVTSE9MRCkpCisJICAgIG1wbl9tdWwgKHRwLCBkcCwgZG4sIHFwLCBpbik7CS8qIG11bGhpLCBuZWVkIHRwW2RuK2luLTEuLi5pbl0gKi8KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIHRuID0gbXBuX211bG1vZF9ibm0xX25leHRfc2l6ZSAoZG4pOworCSAgICAgIG1wbl9tdWxtb2RfYm5tMSAodHAsIHRuLCBkcCwgZG4sIHFwLCBpbiwgc2NyYXRjaF9vdXQpOworCSAgICAgIHduID0gZG4gKyBpbiAtIHRuOwkJLyogbnVtYmVyIG9mIHdyYXBwZWQgbGltYnMgKi8KKwkgICAgICBpZiAod24gPiAwKQorCQl7CisJCSAgYzAgPSBtcG5fc3ViX24gKHRwICsgdG4sIHRwLCBycCwgd24pOworCQkgIG1wbl9kZWNyX3UgKHRwICsgd24sIGMwKTsKKwkJfQorCSAgICB9CisKKwkgIHFwICs9IGluOworCSAgcW4gLT0gaW47CisKKwkgIGlmIChkbiAhPSBpbikKKwkgICAgeworCSAgICAgIC8qIFN1YnRyYWN0IHRwW2RuLTEuLi5pbl0gZnJvbSBwYXJ0aWFsIHJlbWFpbmRlci4gICovCisJICAgICAgY3kgKz0gbXBuX3N1Yl9uIChycCwgcnAgKyBpbiwgdHAgKyBpbiwgZG4gLSBpbik7CisJICAgICAgaWYgKGN5ID09IDIpCisJCXsKKwkJICBtcG5faW5jcl91ICh0cCArIGRuLCAxKTsKKwkJICBjeSA9IDE7CisJCX0KKwkgICAgfQorCSAgLyogU3VidHJhY3QgdHBbZG4raW4tMS4uLmRuXSBmcm9tIGRpdmlkZW5kLiAgKi8KKwkgIGN5ID0gbXBuX3N1Yl9uYyAocnAgKyBkbiAtIGluLCBucCwgdHAgKyBkbiwgaW4sIGN5KTsKKwkgIG5wICs9IGluOworCX0KKworICAgICAgLyogR2VuZXJhdGUgbGFzdCBxbiBsaW1icy4gICovCisgICAgICBtcG5fbXVsbG9fbiAocXAsIHJwLCBpcCwgcW4pOworCisgICAgICBpZiAoQkVMT1dfVEhSRVNIT0xEIChxbiwgTVVMX1RPX01VTE1PRF9CTk0xX0ZPUl8yTlhOX1RIUkVTSE9MRCkpCisJbXBuX211bCAodHAsIGRwLCBkbiwgcXAsIHFuKTsJCS8qIG11bGhpLCBuZWVkIHRwW3FuK2luLTEuLi5pbl0gKi8KKyAgICAgIGVsc2UKKwl7CisJICB0biA9IG1wbl9tdWxtb2RfYm5tMV9uZXh0X3NpemUgKGRuKTsKKwkgIG1wbl9tdWxtb2RfYm5tMSAodHAsIHRuLCBkcCwgZG4sIHFwLCBxbiwgc2NyYXRjaF9vdXQpOworCSAgd24gPSBkbiArIHFuIC0gdG47CQkJLyogbnVtYmVyIG9mIHdyYXBwZWQgbGltYnMgKi8KKwkgIGlmICh3biA+IDApCisJICAgIHsKKwkgICAgICBjMCA9IG1wbl9zdWJfbiAodHAgKyB0biwgdHAsIHJwLCB3bik7CisJICAgICAgbXBuX2RlY3JfdSAodHAgKyB3biwgYzApOworCSAgICB9CisJfQorCisgICAgICBpZiAoZG4gIT0gcW4pCisJeworCSAgY3kgKz0gbXBuX3N1Yl9uIChycCwgcnAgKyBxbiwgdHAgKyBxbiwgZG4gLSBxbik7CisJICBpZiAoY3kgPT0gMikKKwkgICAgeworCSAgICAgIG1wbl9pbmNyX3UgKHRwICsgZG4sIDEpOworCSAgICAgIGN5ID0gMTsKKwkgICAgfQorCX0KKyAgICAgIHJldHVybiBtcG5fc3ViX25jIChycCArIGRuIC0gcW4sIG5wLCB0cCArIGRuLCBxbiwgY3kpOworCisjdW5kZWYgaXAKKyN1bmRlZiB0cAorI3VuZGVmIHNjcmF0Y2hfb3V0CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogfF9fX19fX19fX19fX19fX19fX19fX19ffCAgIGRpdmlkZW5kCisJCXxfX19fX19fX19fX19fX19ffCAgIGRpdmlzb3IgICovCisKKyNkZWZpbmUgaXAgICAgICAgICAgIHNjcmF0Y2gJCS8qIGluICovCisjZGVmaW5lIHRwICAgICAgICAgICAoc2NyYXRjaCArIGluKQkvKiBkbitpbiBvciBuZXh0X3NpemUoZG4pIG9yIHJlc3QgPj0gYmludmVydF9pdGNoKGluKSAqLworI2RlZmluZSBzY3JhdGNoX291dCAgKHNjcmF0Y2ggKyBpbiArIHRuKS8qIG11bG1vZF9ibm0xX2l0Y2gobmV4dF9zaXplKGRuKSkgKi8KKworICAgICAgLyogQ29tcHV0ZSBoYWxmLXNpemVkIGludmVyc2UuICAqLworICAgICAgaW4gPSBxbiAtIChxbiA+PiAxKTsKKworICAgICAgbXBuX2JpbnZlcnQgKGlwLCBkcCwgaW4sIHRwKTsKKworICAgICAgbXBuX211bGxvX24gKHFwLCBucCwgaXAsIGluKTsJCS8qIGxvdyBgaW4nIHF1b3RpZW50IGxpbWJzICovCisKKyAgICAgIGlmIChCRUxPV19USFJFU0hPTEQgKGluLCBNVUxfVE9fTVVMTU9EX0JOTTFfRk9SXzJOWE5fVEhSRVNIT0xEKSkKKwltcG5fbXVsICh0cCwgZHAsIGRuLCBxcCwgaW4pOwkJLyogbXVsaGlnaCAqLworICAgICAgZWxzZQorCXsKKwkgIHRuID0gbXBuX211bG1vZF9ibm0xX25leHRfc2l6ZSAoZG4pOworCSAgbXBuX211bG1vZF9ibm0xICh0cCwgdG4sIGRwLCBkbiwgcXAsIGluLCBzY3JhdGNoX291dCk7CisJICB3biA9IGRuICsgaW4gLSB0bjsJCQkvKiBudW1iZXIgb2Ygd3JhcHBlZCBsaW1icyAqLworCSAgaWYgKHduID4gMCkKKwkgICAgeworCSAgICAgIGMwID0gbXBuX3N1Yl9uICh0cCArIHRuLCB0cCwgbnAsIHduKTsKKwkgICAgICBtcG5fZGVjcl91ICh0cCArIHduLCBjMCk7CisJICAgIH0KKwl9CisKKyAgICAgIHFwICs9IGluOworICAgICAgcW4gLT0gaW47CisKKyAgICAgIGN5ID0gbXBuX3N1Yl9uIChycCwgbnAgKyBpbiwgdHAgKyBpbiwgZG4pOworICAgICAgbXBuX211bGxvX24gKHFwLCBycCwgaXAsIHFuKTsJCS8qIGhpZ2ggcW4gcXVvdGllbnQgbGltYnMgKi8KKworICAgICAgaWYgKEJFTE9XX1RIUkVTSE9MRCAocW4sIE1VTF9UT19NVUxNT0RfQk5NMV9GT1JfMk5YTl9USFJFU0hPTEQpKQorCW1wbl9tdWwgKHRwLCBkcCwgZG4sIHFwLCBxbik7CQkvKiBtdWxoaWdoICovCisgICAgICBlbHNlCisJeworCSAgdG4gPSBtcG5fbXVsbW9kX2JubTFfbmV4dF9zaXplIChkbik7CisJICBtcG5fbXVsbW9kX2JubTEgKHRwLCB0biwgZHAsIGRuLCBxcCwgcW4sIHNjcmF0Y2hfb3V0KTsKKwkgIHduID0gZG4gKyBxbiAtIHRuOwkJCS8qIG51bWJlciBvZiB3cmFwcGVkIGxpbWJzICovCisJICBpZiAod24gPiAwKQorCSAgICB7CisJICAgICAgYzAgPSBtcG5fc3ViX24gKHRwICsgdG4sIHRwLCBycCwgd24pOworCSAgICAgIG1wbl9kZWNyX3UgKHRwICsgd24sIGMwKTsKKwkgICAgfQorCX0KKworICAgICAgY3kgKz0gbXBuX3N1Yl9uIChycCwgcnAgKyBxbiwgdHAgKyBxbiwgZG4gLSBxbik7CisgICAgICBpZiAoY3kgPT0gMikKKwl7CisJICBtcG5faW5jcl91ICh0cCArIGRuLCAxKTsKKwkgIGN5ID0gMTsKKwl9CisgICAgICByZXR1cm4gbXBuX3N1Yl9uYyAocnAgKyBkbiAtIHFuLCBucCArIGRuICsgaW4sIHRwICsgZG4sIHFuLCBjeSk7CisKKyN1bmRlZiBpcAorI3VuZGVmIHRwCisjdW5kZWYgc2NyYXRjaF9vdXQKKyAgICB9Cit9CisKK21wX2xpbWJfdAorbXBuX211X2JkaXZfcXIgKG1wX3B0ciBxcCwKKwkJbXBfcHRyIHJwLAorCQltcF9zcmNwdHIgbnAsIG1wX3NpemVfdCBubiwKKwkJbXBfc3JjcHRyIGRwLCBtcF9zaXplX3QgZG4sCisJCW1wX3B0ciBzY3JhdGNoKQoreworICBtcF9saW1iX3QgY3kgPSBtcG5fbXVfYmRpdl9xcl9vbGQgKHFwLCBycCwgbnAsIG5uLCBkcCwgZG4sIHNjcmF0Y2gpOworCisgIC8qIFInIEJee3FufSA9IFUgLSBRJyBECisgICAqCisgICAqIFEgPSBCXntxbn0gLSBRJyAoYXNzdW1pbmcgUScgIT0gMCkKKyAgICoKKyAgICogUiBCXntxbn0gPSBVICsgUSBEID0gVSArIEJee3FufSBEIC0gUScgRAorICAgKiAgICAgICAgICA9IEJee3FufSBEICsgUicKKyAgICovCisKKyAgaWYgKFVOTElLRUxZICghbXBuX25lZyAocXAsIHFwLCBubiAtIGRuKSkpCisgICAgeworICAgICAgLyogWmVybyBxdW90aWVudC4gKi8KKyAgICAgIEFTU0VSVCAoY3kgPT0gMCk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBtcF9saW1iX3QgY3kyID0gbXBuX2FkZF9uIChycCwgcnAsIGRwLCBkbik7CisgICAgICBBU1NFUlQgKGN5MiA+PSBjeSk7CisKKyAgICAgIHJldHVybiBjeTIgLSBjeTsKKyAgICB9Cit9CisKKworbXBfc2l6ZV90CittcG5fbXVfYmRpdl9xcl9pdGNoIChtcF9zaXplX3Qgbm4sIG1wX3NpemVfdCBkbikKK3sKKyAgbXBfc2l6ZV90IHFuLCBpbiwgdG4sIGl0Y2hfYmludmVydCwgaXRjaF9vdXQsIGl0Y2hlczsKKyAgbXBfc2l6ZV90IGI7CisKKyAgQVNTRVJUX0FMV0FZUyAoRENfQkRJVl9RX1RIUkVTSE9MRCA8IE1VX0JESVZfUV9USFJFU0hPTEQpOworCisgIHFuID0gbm4gLSBkbjsKKworICBpZiAocW4gPiBkbikKKyAgICB7CisgICAgICBiID0gKHFuIC0gMSkgLyBkbiArIDE7CS8qIGNlaWwocW4vZG4pLCBudW1iZXIgb2YgYmxvY2tzICovCisgICAgICBpbiA9IChxbiAtIDEpIC8gYiArIDE7CS8qIGNlaWwocW4vYikgPSBjZWlsKHFuIC8gY2VpbChxbi9kbikpICovCisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaW4gPSBxbiAtIChxbiA+PiAxKTsKKyAgICB9CisKKyAgaWYgKEJFTE9XX1RIUkVTSE9MRCAoaW4sIE1VTF9UT19NVUxNT0RfQk5NMV9GT1JfMk5YTl9USFJFU0hPTEQpKQorICAgIHsKKyAgICAgIHRuID0gZG4gKyBpbjsKKyAgICAgIGl0Y2hfb3V0ID0gMDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB0biA9IG1wbl9tdWxtb2RfYm5tMV9uZXh0X3NpemUgKGRuKTsKKyAgICAgIGl0Y2hfb3V0ID0gbXBuX211bG1vZF9ibm0xX2l0Y2ggKHRuLCBkbiwgaW4pOworICAgIH0KKworICBpdGNoX2JpbnZlcnQgPSBtcG5fYmludmVydF9pdGNoIChpbik7CisgIGl0Y2hlcyA9IHRuICsgaXRjaF9vdXQ7CisgIHJldHVybiBpbiArIE1BWCAoaXRjaGVzLCBpdGNoX2JpbnZlcnQpOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL211X2Rpdl9xLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvbXVfZGl2X3EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGNmYjQwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL211X2Rpdl9xLmMKQEAgLTAsMCArMSwxODQgQEAKKy8qIG1wbl9tdV9kaXZfcS4KKworICAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqb3JuIEdyYW5sdW5kIGFuZCBNYXJjbyBCb2RyYXRvLgorCisgICBUSEUgRlVOQ1RJT05TIElOIFRISVMgRklMRSBBUkUgSU5URVJOQUwgV0lUSCBNVVRBQkxFIElOVEVSRkFDRVMuICBJVCBJUyBPTkxZCisgICBTQUZFIFRPIFJFQUNIIFRIRU0gVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuICBJTiBGQUNULCBJVCBJUyBBTE1PU1QKKyAgIEdVQVJBTlRFRUQgVEhBVCBUSEVZIFdJTEwgQ0hBTkdFIE9SIERJU0FQUEVBUiBJTiBBIEZVVFVSRSBHTVAgUkVMRUFTRS4KKworQ29weXJpZ2h0IDIwMDUtMjAwNywgMjAwOSwgMjAxMCwgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworCisvKgorICAgVGhlIGlkZWEgb2YgdGhlIGFsZ29yaXRobSB1c2VkIGhlcmVpbiBpcyB0byBjb21wdXRlIGEgc21hbGxlciBpbnZlcnRlZCB2YWx1ZQorICAgdGhhbiB1c2VkIGluIHRoZSBzdGFuZGFyZCBCYXJyZXR0IGFsZ29yaXRobSwgYW5kIHRodXMgc2F2ZSB0aW1lIGluIHRoZQorICAgTmV3dG9uIGl0ZXJhdGlvbnMsIGFuZCBwYXkganVzdCBhIHNtYWxsIHByaWNlIHdoZW4gdXNpbmcgdGhlIGludmVydGVkIHZhbHVlCisgICBmb3IgZGV2ZWxvcGluZyBxdW90aWVudCBiaXRzLiAgVGhpcyBhbGdvcml0aG0gd2FzIHByZXNlbnRlZCBhdCBJQ01TIDIwMDYuCisqLworCisvKgorICBUaGluZ3MgdG8gd29yayBvbjoKKworICAxLiBUaGlzIGlzIGEgcnVkaW1lbnRhcnkgaW1wbGVtZW50YXRpb24gb2YgbXBuX211X2Rpdl9xLiAgVGhlIGFsZ29yaXRobSBpcworICAgICBwcm9iYWJseSBjbG9zZSB0byBvcHRpbWFsLCBleGNlcHQgd2hlbiBtcG5fbXVfZGl2YXBwcl9xIGZhaWxzLgorCisgIDIuIFdlIHVzZWQgdG8gZmFsbCBiYWNrIHRvIG1wbl9tdV9kaXZfcXIgd2hlbiB3ZSBkZXRlY3QgYSBwb3NzaWJsZQorICAgICBtcG5fbXVfZGl2YXBwcl9xIHJvdW5kaW5nIHByb2JsZW0sIG5vdyB3ZSBtdWx0aXBseSBhbmQgY29tcGFyZS4KKyAgICAgVW5mb3J0dW5hdGVseSwgc2luY2UgbXBuX211X2RpdmFwcHJfcSBkb2VzIG5vdCByZXR1cm4gdGhlIHBhcnRpYWwKKyAgICAgcmVtYWluZGVyLCB0aGlzIGFsc28gZG9lc24ndCBiZWNvbWUgb3B0aW1hbC4gIEEgbXBuX211X2RpdmFwcHJfcXIgY291bGQKKyAgICAgc29sdmUgdGhhdC4KKworICAzLiBUaGUgYWxsb2NhdGlvbnMgZG9uZSBoZXJlIHNob3VsZCBiZSBtYWRlIGZyb20gdGhlIHNjcmF0Y2ggYXJlYSwgd2hpY2gKKyAgICAgdGhlbiB3b3VsZCBuZWVkIHRvIGJlIGFtZW5kZWQuCisqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CQkvKiBmb3IgTlVMTCAqLworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisKKworbXBfbGltYl90CittcG5fbXVfZGl2X3EgKG1wX3B0ciBxcCwKKwkgICAgICBtcF9zcmNwdHIgbnAsIG1wX3NpemVfdCBubiwKKwkgICAgICBtcF9zcmNwdHIgZHAsIG1wX3NpemVfdCBkbiwKKwkgICAgICBtcF9wdHIgc2NyYXRjaCkKK3sKKyAgbXBfcHRyIHRwLCBycDsKKyAgbXBfc2l6ZV90IHFuOworICBtcF9saW1iX3QgY3ksIHFoOworICBUTVBfREVDTDsKKworICBUTVBfTUFSSzsKKworICBxbiA9IG5uIC0gZG47CisKKyAgdHAgPSBUTVBfQkFMTE9DX0xJTUJTIChxbiArIDEpOworCisgIGlmIChxbiA+PSBkbikJCQkvKiBubiA+PSAyKmRuICsgMSAqLworICAgIHsKKyAgICAgICAvKiB8X19fX19fX19fX19fX19fX19fX19fX198ICAgZGl2aWRlbmQKKwkJCSB8X19fX19fX198ICAgZGl2aXNvciAgKi8KKworICAgICAgcnAgPSBUTVBfQkFMTE9DX0xJTUJTIChubiArIDEpOworICAgICAgTVBOX0NPUFkgKHJwICsgMSwgbnAsIG5uKTsKKyAgICAgIHJwWzBdID0gMDsKKworICAgICAgcWggPSBtcG5fY21wIChycCArIDEgKyBubiAtIGRuLCBkcCwgZG4pID49IDA7CisgICAgICBpZiAocWggIT0gMCkKKwltcG5fc3ViX24gKHJwICsgMSArIG5uIC0gZG4sIHJwICsgMSArIG5uIC0gZG4sIGRwLCBkbik7CisKKyAgICAgIGN5ID0gbXBuX211X2RpdmFwcHJfcSAodHAsIHJwLCBubiArIDEsIGRwLCBkbiwgc2NyYXRjaCk7CisKKyAgICAgIGlmIChVTkxJS0VMWSAoY3kgIT0gMCkpCisJeworCSAgLyogU2luY2UgdGhlIHBhcnRpYWwgcmVtYWluZGVyIGZlZCB0byBtcG5fcHJlaW52X211X2RpdmFwcHJfcSB3YXMKKwkgICAgIGNhbm9uaWNhbGx5IHJlZHVjZWQsIHJlcGxhY2UgdGhlIHJldHVybmVkIHZhbHVlIG9mIEJeKHFuLWRuKStlcHMKKwkgICAgIGJ5IHRoZSBsYXJnZXN0IHBvc3NpYmxlIHZhbHVlLiAgKi8KKwkgIG1wX3NpemVfdCBpOworCSAgZm9yIChpID0gMDsgaSA8IHFuICsgMTsgaSsrKQorCSAgICB0cFtpXSA9IEdNUF9OVU1CX01BWDsKKwl9CisKKyAgICAgIC8qIFRoZSBtYXggZXJyb3Igb2YgbXBuX211X2RpdmFwcHJfcSBpcyArNC4gIElmIHRoZSBsb3cgcXVvdGllbnQgbGltYiBpcworCSBzbWFsbGVyIHRoYW4gdGhlIG1heCBlcnJvciwgd2UgY2Fubm90IHRydXN0IHRoZSBxdW90aWVudC4gICovCisgICAgICBpZiAodHBbMF0gPiA0KQorCXsKKwkgIE1QTl9DT1BZIChxcCwgdHAgKyAxLCBxbik7CisJfQorICAgICAgZWxzZQorCXsKKwkgIG1wX2xpbWJfdCBjeTsKKwkgIG1wX3B0ciBwcDsKKworCSAgcHAgPSBycDsKKwkgIG1wbl9tdWwgKHBwLCB0cCArIDEsIHFuLCBkcCwgZG4pOworCisJICBjeSA9IChxaCAhPSAwKSA/IG1wbl9hZGRfbiAocHAgKyBxbiwgcHAgKyBxbiwgZHAsIGRuKSA6IDA7CisKKwkgIGlmIChjeSB8fCBtcG5fY21wIChwcCwgbnAsIG5uKSA+IDApIC8qIEF0IG1vc3QgaXMgd3JvbmcgYnkgb25lLCBubyBjeWNsZS4gKi8KKwkgICAgcWggLT0gbXBuX3N1Yl8xIChxcCwgdHAgKyAxLCBxbiwgMSk7CisJICBlbHNlIC8qIFNhbWUgYXMgYWJvdmUgKi8KKwkgICAgTVBOX0NPUFkgKHFwLCB0cCArIDEsIHFuKTsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgIC8qIHxfX19fX19fX19fX19fX19fX19fX19fX3wgICBkaXZpZGVuZAorCQkgfF9fX19fX19fX19fX19fX198ICAgZGl2aXNvciAgKi8KKworICAgICAgLyogRklYTUU6IFdoZW4gbm4gPSAyZG4tMSwgcW4gYmVjb21lcyBkbi0xLCBhbmQgdGhlIG51bWVyYXRvciBzaXplIHBhc3NlZAorCSBoZXJlIGJlY29tZXMgMmRuLCBpLmUuLCBtb3JlIHRoYW4gbm4uICBUaGlzIHNob3VsZG4ndCBodXJ0LCBzaW5jZSBvbmx5CisJIHRoZSBtb3N0IHNpZ25pZmljYW50IGRuLTEgbGltYnMgd2lsbCBhY3R1YWxseSBiZSByZWFkLCBidXQgaXQgaXMgbm90CisJIHByZXR0eS4gICovCisKKyAgICAgIHFoID0gbXBuX211X2RpdmFwcHJfcSAodHAsIG5wICsgbm4gLSAoMiAqIHFuICsgMiksIDIgKiBxbiArIDIsCisJCQkgICAgIGRwICsgZG4gLSAocW4gKyAxKSwgcW4gKyAxLCBzY3JhdGNoKTsKKworICAgICAgLyogVGhlIG1heCBlcnJvciBvZiBtcG5fbXVfZGl2YXBwcl9xIGlzICs0LCBidXQgd2UgZ2V0IGFuIGFkZGl0aW9uYWwKKyAgICAgICAgIGVycm9yIGZyb20gdGhlIGRpdmlzb3IgdHJ1bmNhdGlvbi4gICovCisgICAgICBpZiAodHBbMF0gPiA2KQorCXsKKwkgIE1QTl9DT1BZIChxcCwgdHAgKyAxLCBxbik7CisJfQorICAgICAgZWxzZQorCXsKKwkgIG1wX2xpbWJfdCBjeTsKKworCSAgLyogRklYTUU6IGEgc2hvcnRlciBwcm9kdWN0IHNob3VsZCBiZSBlbm91Z2g7IHdlIG1heSB1c2UgYWxyZWFkeQorCSAgICAgYWxsb2NhdGVkIHNwYWNlLi4uICovCisJICBycCA9IFRNUF9CQUxMT0NfTElNQlMgKG5uKTsKKwkgIG1wbl9tdWwgKHJwLCBkcCwgZG4sIHRwICsgMSwgcW4pOworCisJICBjeSA9IChxaCAhPSAwKSA/IG1wbl9hZGRfbiAocnAgKyBxbiwgcnAgKyBxbiwgZHAsIGRuKSA6IDA7CisKKwkgIGlmIChjeSB8fCBtcG5fY21wIChycCwgbnAsIG5uKSA+IDApIC8qIEF0IG1vc3QgaXMgd3JvbmcgYnkgb25lLCBubyBjeWNsZS4gKi8KKwkgICAgcWggLT0gbXBuX3N1Yl8xIChxcCwgdHAgKyAxLCBxbiwgMSk7CisJICBlbHNlIC8qIFNhbWUgYXMgYWJvdmUgKi8KKwkgICAgTVBOX0NPUFkgKHFwLCB0cCArIDEsIHFuKTsKKwl9CisgICAgfQorCisgIFRNUF9GUkVFOworICByZXR1cm4gcWg7Cit9CisKK21wX3NpemVfdAorbXBuX211X2Rpdl9xX2l0Y2ggKG1wX3NpemVfdCBubiwgbXBfc2l6ZV90IGRuLCBpbnQgbXVhX2spCit7CisgIG1wX3NpemVfdCBxbjsKKworICBxbiA9IG5uIC0gZG47CisgIGlmIChxbiA+PSBkbikKKyAgICB7CisgICAgICByZXR1cm4gbXBuX211X2RpdmFwcHJfcV9pdGNoIChubiArIDEsIGRuLCBtdWFfayk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcmV0dXJuIG1wbl9tdV9kaXZhcHByX3FfaXRjaCAoMiAqIHFuICsgMiwgcW4gKyAxLCBtdWFfayk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL211X2Rpdl9xci5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL211X2Rpdl9xci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiOWM3MDIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvbXVfZGl2X3FyLmMKQEAgLTAsMCArMSw0MTcgQEAKKy8qIG1wbl9tdV9kaXZfcXIsIG1wbl9wcmVpbnZfbXVfZGl2X3FyLgorCisgICBDb21wdXRlIFEgPSBmbG9vcihOIC8gRCkgYW5kIFIgPSBOLVFELiAgTiBpcyBubiBsaW1icyBhbmQgRCBpcyBkbiBsaW1icyBhbmQKKyAgIG11c3QgYmUgbm9ybWFsaXplZCwgYW5kIFEgbXVzdCBiZSBubi1kbiBsaW1icy4gIFRoZSByZXF1aXJlbWVudCB0aGF0IFEgaXMKKyAgIG5uLWRuIGxpbWJzIChhbmQgbm90IG5uLWRuKzEgbGltYnMpIHdhcyBwdXQgaW4gcGxhY2UgaW4gb3JkZXIgdG8gYWxsb3cgdXMgdG8KKyAgIGxldCBOIGJlIHVubW9kaWZpZWQgZHVyaW5nIHRoZSBvcGVyYXRpb24uCisKKyAgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3Jiam9ybiBHcmFubHVuZC4KKworICAgVEhFIEZVTkNUSU9OUyBJTiBUSElTIEZJTEUgQVJFIElOVEVSTkFMIFdJVEggTVVUQUJMRSBJTlRFUkZBQ0VTLiAgSVQgSVMgT05MWQorICAgU0FGRSBUTyBSRUFDSCBUSEVNIFRIUk9VR0ggRE9DVU1FTlRFRCBJTlRFUkZBQ0VTLiAgSU4gRkFDVCwgSVQgSVMgQUxNT1NUCisgICBHVUFSQU5URUVEIFRIQVQgVEhFWSBXSUxMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR01QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAyMDA1LTIwMDcsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKworLyoKKyAgIFRoZSBpZGVhIG9mIHRoZSBhbGdvcml0aG0gdXNlZCBoZXJlaW4gaXMgdG8gY29tcHV0ZSBhIHNtYWxsZXIgaW52ZXJ0ZWQgdmFsdWUKKyAgIHRoYW4gdXNlZCBpbiB0aGUgc3RhbmRhcmQgQmFycmV0dCBhbGdvcml0aG0sIGFuZCB0aHVzIHNhdmUgdGltZSBpbiB0aGUKKyAgIE5ld3RvbiBpdGVyYXRpb25zLCBhbmQgcGF5IGp1c3QgYSBzbWFsbCBwcmljZSB3aGVuIHVzaW5nIHRoZSBpbnZlcnRlZCB2YWx1ZQorICAgZm9yIGRldmVsb3BpbmcgcXVvdGllbnQgYml0cy4gIFRoaXMgYWxnb3JpdGhtIHdhcyBwcmVzZW50ZWQgYXQgSUNNUyAyMDA2LgorKi8KKworLyogQ0FVVElPTjogVGhpcyBjb2RlIGFuZCB0aGUgY29kZSBpbiBtdV9kaXZhcHByX3EuYyBzaG91bGQgYmUgZWRpdGVkIGluIHN5bmMuCisKKyBUaGluZ3MgdG8gd29yayBvbjoKKworICAqIFRoaXMgaXNuJ3Qgb3B0aW1hbCB3aGVuIHRoZSBxdW90aWVudCBpc24ndCBuZWVkZWQsIGFzIGl0IG1pZ2h0IHRha2UgYSBsb3QKKyAgICBvZiBzcGFjZS4gIFRoZSBjb21wdXRhdGlvbiBpcyBhbHdheXMgbmVlZGVkLCB0aG91Z2gsIHNvIHRoZXJlIGlzIG5vIHRpbWUgdG8KKyAgICBzYXZlIHdpdGggc3BlY2lhbCBjb2RlLgorCisgICogVGhlIGl0Y2gvc2NyYXRjaCBzY2hlbWUgaXNuJ3QgcGVyaGFwcyBzdWNoIGEgZ29vZCBpZGVhIGFzIGl0IG9uY2Ugc2VlbWVkLAorICAgIGRlbW9uc3RyYXRlZCBieSB0aGUgZmFjdCB0aGF0IHRoZSBtcG5faW52ZXJ0YXBwciBmdW5jdGlvbidzIHNjcmF0Y2ggbmVlZHMKKyAgICBtZWFuIHRoYXQgd2UgbmVlZCB0byBrZWVwIGEgbGFyZ2UgYWxsb2NhdGlvbiBsb25nIGFmdGVyIGl0IGlzIG5lZWRlZC4KKyAgICBUaGluZ3MgYXJlIHdvcnNlIGFzIG1wbl9tdWxfZmZ0IGRvZXMgbm90IGFjY2VwdCBhbnkgc2NyYXRjaCBwYXJhbWV0ZXIsCisgICAgd2hpY2ggbWVhbnMgd2UnbGwgaGF2ZSBhIGxhcmdlIG1lbW9yeSBob2xlIHdoaWxlIGluIG1wbl9tdWxfZmZ0LiAgSW4KKyAgICBnZW5lcmFsLCBhIHBlYWsgc2NyYXRjaCBuZWVkIGluIHRoZSBiZWdpbm5pbmcgb2YgYSBmdW5jdGlvbiBpc24ndAorICAgIHdlbGwtaGFuZGxlZCBieSB0aGUgaXRjaC9zY3JhdGNoIHNjaGVtZS4KKyovCisKKyNpZmRlZiBTVEFUCisjdW5kZWYgU1RBVAorI2RlZmluZSBTVEFUKHgpIHgKKyNlbHNlCisjZGVmaW5lIFNUQVQoeCkKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkbGliLmg+CQkvKiBmb3IgTlVMTCAqLworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisKKworLyogRklYTUU6IFRoZSBNVV9ESVZfUVJfU0tFV19USFJFU0hPTEQgd2FzIG5vdCBhbmFseXNlZCBwcm9wZXJseS4gIEl0IGdpdmVzIGEKKyAgIHNwZWVkdXAgYWNjb3JkaW5nIHRvIG9sZCBtZWFzdXJlbWVudHMsIGJ1dCBkb2VzIHRoZSBkZWNpc2lvbiBtZWNoYW5pc20KKyAgIHJlYWxseSBtYWtlIHNlbnNlPyAgSXQgc2VlbSBsaWtlIHRoZSBxdW90aWVudCBiZXR3ZWVuIGRuIGFuZCBxbiBtaWdodCBiZQorICAgd2hhdCB3ZSByZWFsbHkgc2hvdWxkIGJlIGNoZWNraW5nLiAgKi8KKyNpZm5kZWYgTVVfRElWX1FSX1NLRVdfVEhSRVNIT0xECisjZGVmaW5lIE1VX0RJVl9RUl9TS0VXX1RIUkVTSE9MRCAxMDAKKyNlbmRpZgorCisjaWZkZWYgQ0hFQ0sJCQkJLyogRklYTUU6IEVuYWJsZSBpbiBtaW5pdGhyZXMgKi8KKyN1bmRlZiAgTVVfRElWX1FSX1NLRVdfVEhSRVNIT0xECisjZGVmaW5lIE1VX0RJVl9RUl9TS0VXX1RIUkVTSE9MRCAxCisjZW5kaWYKKworCitzdGF0aWMgbXBfbGltYl90IG1wbl9tdV9kaXZfcXIyIChtcF9wdHIsIG1wX3B0ciwgbXBfc3JjcHRyLCBtcF9zaXplX3QsIG1wX3NyY3B0ciwgbXBfc2l6ZV90LCBtcF9wdHIpOworc3RhdGljIG1wX3NpemVfdCBtcG5fbXVfZGl2X3FyX2Nob29zZV9pbiAobXBfc2l6ZV90LCBtcF9zaXplX3QsIGludCk7CisKKworbXBfbGltYl90CittcG5fbXVfZGl2X3FyIChtcF9wdHIgcXAsCisJICAgICAgIG1wX3B0ciBycCwKKwkgICAgICAgbXBfc3JjcHRyIG5wLAorCSAgICAgICBtcF9zaXplX3Qgbm4sCisJICAgICAgIG1wX3NyY3B0ciBkcCwKKwkgICAgICAgbXBfc2l6ZV90IGRuLAorCSAgICAgICBtcF9wdHIgc2NyYXRjaCkKK3sKKyAgbXBfc2l6ZV90IHFuOworICBtcF9saW1iX3QgY3ksIHFoOworCisgIHFuID0gbm4gLSBkbjsKKyAgaWYgKHFuICsgTVVfRElWX1FSX1NLRVdfVEhSRVNIT0xEIDwgZG4pCisgICAgeworICAgICAgLyogfF9fX19fX19fX19fX19ffF9pZ25fZmlyc3RfX3wgICBkaXZpZGVuZAkJCSAgbm4KKwkJfF9fX19fX198X2lnbl9maXJzdF9ffCAgIGRpdmlzb3IJCQkgIGRuCisKKwkJfF9fX19fX3wJICAgICBxdW90aWVudCAocHJlbCkJCQkgIHFuCisKKwkJIHxfX19fX19fX19fX19fX19fX19ffCAgIHF1b3RpZW50ICogaWdub3JlZC1kaXZpc29yLXBhcnQgIGRuLTEKKyAgICAgICovCisKKyAgICAgIC8qIENvbXB1dGUgYSBwcmVsaW1pbmFyeSBxdW90aWVudCBhbmQgYSBwYXJ0aWFsIHJlbWFpbmRlciBieSBkaXZpZGluZyB0aGUKKwkgbW9zdCBzaWduaWZpY2FudCBsaW1icyBvZiBlYWNoIG9wZXJhbmQuICAqLworICAgICAgcWggPSBtcG5fbXVfZGl2X3FyMiAocXAsIHJwICsgbm4gLSAoMiAqIHFuICsgMSksCisJCQkgICBucCArIG5uIC0gKDIgKiBxbiArIDEpLCAyICogcW4gKyAxLAorCQkJICAgZHAgKyBkbiAtIChxbiArIDEpLCBxbiArIDEsCisJCQkgICBzY3JhdGNoKTsKKworICAgICAgLyogTXVsdGlwbHkgdGhlIHF1b3RpZW50IGJ5IHRoZSBkaXZpc29yIGxpbWJzIGlnbm9yZWQgYWJvdmUuICAqLworICAgICAgaWYgKGRuIC0gKHFuICsgMSkgPiBxbikKKwltcG5fbXVsIChzY3JhdGNoLCBkcCwgZG4gLSAocW4gKyAxKSwgcXAsIHFuKTsgIC8qIHByb2QgaXMgZG4tMSBsaW1icyAqLworICAgICAgZWxzZQorCW1wbl9tdWwgKHNjcmF0Y2gsIHFwLCBxbiwgZHAsIGRuIC0gKHFuICsgMSkpOyAgLyogcHJvZCBpcyBkbi0xIGxpbWJzICovCisKKyAgICAgIGlmIChxaCkKKwljeSA9IG1wbl9hZGRfbiAoc2NyYXRjaCArIHFuLCBzY3JhdGNoICsgcW4sIGRwLCBkbiAtIChxbiArIDEpKTsKKyAgICAgIGVsc2UKKwljeSA9IDA7CisgICAgICBzY3JhdGNoW2RuIC0gMV0gPSBjeTsKKworICAgICAgY3kgPSBtcG5fc3ViX24gKHJwLCBucCwgc2NyYXRjaCwgbm4gLSAoMiAqIHFuICsgMSkpOworICAgICAgY3kgPSBtcG5fc3ViX25jIChycCArIG5uIC0gKDIgKiBxbiArIDEpLAorCQkgICAgICAgcnAgKyBubiAtICgyICogcW4gKyAxKSwKKwkJICAgICAgIHNjcmF0Y2ggKyBubiAtICgyICogcW4gKyAxKSwKKwkJICAgICAgIHFuICsgMSwgY3kpOworICAgICAgaWYgKGN5KQorCXsKKwkgIHFoIC09IG1wbl9zdWJfMSAocXAsIHFwLCBxbiwgMSk7CisJICBtcG5fYWRkX24gKHJwLCBycCwgZHAsIGRuKTsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcWggPSBtcG5fbXVfZGl2X3FyMiAocXAsIHJwLCBucCwgbm4sIGRwLCBkbiwgc2NyYXRjaCk7CisgICAgfQorCisgIHJldHVybiBxaDsKK30KKworc3RhdGljIG1wX2xpbWJfdAorbXBuX211X2Rpdl9xcjIgKG1wX3B0ciBxcCwKKwkJbXBfcHRyIHJwLAorCQltcF9zcmNwdHIgbnAsCisJCW1wX3NpemVfdCBubiwKKwkJbXBfc3JjcHRyIGRwLAorCQltcF9zaXplX3QgZG4sCisJCW1wX3B0ciBzY3JhdGNoKQoreworICBtcF9zaXplX3QgcW4sIGluOworICBtcF9saW1iX3QgY3ksIHFoOworICBtcF9wdHIgaXAsIHRwOworCisgIEFTU0VSVCAoZG4gPiAxKTsKKworICBxbiA9IG5uIC0gZG47CisKKyAgLyogQ29tcHV0ZSB0aGUgaW52ZXJzZSBzaXplLiAgKi8KKyAgaW4gPSBtcG5fbXVfZGl2X3FyX2Nob29zZV9pbiAocW4sIGRuLCAwKTsKKyAgQVNTRVJUIChpbiA8PSBkbik7CisKKyNpZiAxCisgIC8qIFRoaXMgYWx0ZXJuYXRpdmUgaW52ZXJzZSBjb21wdXRhdGlvbiBtZXRob2QgZ2V0cyBzbGlnaHRseSBtb3JlIGFjY3VyYXRlCisgICAgIHJlc3VsdHMuICBGSVhNRXM6ICgxKSBUZW1wIGFsbG9jYXRpb24gbmVlZHMgbm90IGFuYWx5c2VkICgyKSBpdGNoIGZ1bmN0aW9uCisgICAgIG5vdCBhZGFwdGVkICgzKSBtcG5faW52ZXJ0YXBwciBzY3JhdGNoIG5lZWRzIG5vdCBtZXQuICAqLworICBpcCA9IHNjcmF0Y2g7CisgIHRwID0gc2NyYXRjaCArIGluICsgMTsKKworICAvKiBjb21wdXRlIGFuIGFwcHJveGltYXRlIGludmVyc2Ugb24gKGluKzEpIGxpbWJzICovCisgIGlmIChkbiA9PSBpbikKKyAgICB7CisgICAgICBNUE5fQ09QWSAodHAgKyAxLCBkcCwgaW4pOworICAgICAgdHBbMF0gPSAxOworICAgICAgbXBuX2ludmVydGFwcHIgKGlwLCB0cCwgaW4gKyAxLCB0cCArIGluICsgMSk7CisgICAgICBNUE5fQ09QWV9JTkNSIChpcCwgaXAgKyAxLCBpbik7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgY3kgPSBtcG5fYWRkXzEgKHRwLCBkcCArIGRuIC0gKGluICsgMSksIGluICsgMSwgMSk7CisgICAgICBpZiAoVU5MSUtFTFkgKGN5ICE9IDApKQorCU1QTl9aRVJPIChpcCwgaW4pOworICAgICAgZWxzZQorCXsKKwkgIG1wbl9pbnZlcnRhcHByIChpcCwgdHAsIGluICsgMSwgdHAgKyBpbiArIDEpOworCSAgTVBOX0NPUFlfSU5DUiAoaXAsIGlwICsgMSwgaW4pOworCX0KKyAgICB9CisjZWxzZQorICAvKiBUaGlzIG9sZGVyIGludmVyc2UgY29tcHV0YXRpb24gbWV0aG9kIGdldHMgc2xpZ2h0bHkgd29yc2UgcmVzdWx0cyB0aGFuIHRoZQorICAgICBvbmUgYWJvdmUuICAqLworICBpcCA9IHNjcmF0Y2g7CisgIHRwID0gc2NyYXRjaCArIGluOworCisgIC8qIENvbXB1dGUgaW52ZXJzZSBvZiBEIHRvIGluKzEgbGltYnMsIHRoZW4gcm91bmQgdG8gJ2luJyBsaW1icy4gIElkZWFsbHkgdGhlCisgICAgIGludmVyc2lvbiBmdW5jdGlvbiBzaG91bGQgZG8gdGhpcyBhdXRvbWF0aWNhbGx5LiAgKi8KKyAgaWYgKGRuID09IGluKQorICAgIHsKKyAgICAgIHRwW2luICsgMV0gPSAwOworICAgICAgTVBOX0NPUFkgKHRwICsgaW4gKyAyLCBkcCwgaW4pOworICAgICAgbXBuX2ludmVydGFwcHIgKHRwLCB0cCArIGluICsgMSwgaW4gKyAxLCBOVUxMKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBtcG5faW52ZXJ0YXBwciAodHAsIGRwICsgZG4gLSAoaW4gKyAxKSwgaW4gKyAxLCBOVUxMKTsKKyAgICB9CisgIGN5ID0gbXBuX3N1Yl8xICh0cCwgdHAsIGluICsgMSwgR01QX05VTUJfSElHSEJJVCk7CisgIGlmIChVTkxJS0VMWSAoY3kgIT0gMCkpCisgICAgTVBOX1pFUk8gKHRwICsgMSwgaW4pOworICBNUE5fQ09QWSAoaXAsIHRwICsgMSwgaW4pOworI2VuZGlmCisKKyAgcWggPSBtcG5fcHJlaW52X211X2Rpdl9xciAocXAsIHJwLCBucCwgbm4sIGRwLCBkbiwgaXAsIGluLCBzY3JhdGNoICsgaW4pOworCisgIHJldHVybiBxaDsKK30KKworbXBfbGltYl90CittcG5fcHJlaW52X211X2Rpdl9xciAobXBfcHRyIHFwLAorCQkgICAgICBtcF9wdHIgcnAsCisJCSAgICAgIG1wX3NyY3B0ciBucCwKKwkJICAgICAgbXBfc2l6ZV90IG5uLAorCQkgICAgICBtcF9zcmNwdHIgZHAsCisJCSAgICAgIG1wX3NpemVfdCBkbiwKKwkJICAgICAgbXBfc3JjcHRyIGlwLAorCQkgICAgICBtcF9zaXplX3QgaW4sCisJCSAgICAgIG1wX3B0ciBzY3JhdGNoKQoreworICBtcF9zaXplX3QgcW47CisgIG1wX2xpbWJfdCBjeSwgY3gsIHFoOworICBtcF9saW1iX3QgcjsKKyAgbXBfc2l6ZV90IHRuLCB3bjsKKworI2RlZmluZSB0cCAgICAgICAgICAgc2NyYXRjaAorI2RlZmluZSBzY3JhdGNoX291dCAgKHNjcmF0Y2ggKyB0bikKKworICBxbiA9IG5uIC0gZG47CisKKyAgbnAgKz0gcW47CisgIHFwICs9IHFuOworCisgIHFoID0gbXBuX2NtcCAobnAsIGRwLCBkbikgPj0gMDsKKyAgaWYgKHFoICE9IDApCisgICAgbXBuX3N1Yl9uIChycCwgbnAsIGRwLCBkbik7CisgIGVsc2UKKyAgICBNUE5fQ09QWV9JTkNSIChycCwgbnAsIGRuKTsKKworICAvKiBpZiAocW4gPT0gMCkgKi8JCQkvKiBUaGUgd2hpbGUgYmVsb3cgaGFuZGxlcyB0aGlzIGNhc2UgKi8KKyAgLyogICByZXR1cm4gcWg7ICovCQkJLyogRGVnZW5lcmF0ZSB1c2UuICBTaG91bGQgd2UgYWxsb3cgdGhpcz8gKi8KKworICB3aGlsZSAocW4gPiAwKQorICAgIHsKKyAgICAgIGlmIChxbiA8IGluKQorCXsKKwkgIGlwICs9IGluIC0gcW47CisJICBpbiA9IHFuOworCX0KKyAgICAgIG5wIC09IGluOworICAgICAgcXAgLT0gaW47CisKKyAgICAgIC8qIENvbXB1dGUgdGhlIG5leHQgYmxvY2sgb2YgcXVvdGllbnQgbGltYnMgYnkgbXVsdGlwbHlpbmcgdGhlIGludmVyc2UgSQorCSBieSB0aGUgdXBwZXIgcGFydCBvZiB0aGUgcGFydGlhbCByZW1haW5kZXIgUi4gICovCisgICAgICBtcG5fbXVsX24gKHRwLCBycCArIGRuIC0gaW4sIGlwLCBpbik7CQkvKiBtdWxoaSAgKi8KKyAgICAgIGN5ID0gbXBuX2FkZF9uIChxcCwgdHAgKyBpbiwgcnAgKyBkbiAtIGluLCBpbik7CS8qIEkncyBtc2IgaW1wbGljaXQgKi8KKyAgICAgIEFTU0VSVF9BTFdBWVMgKGN5ID09IDApOworCisgICAgICBxbiAtPSBpbjsKKworICAgICAgLyogQ29tcHV0ZSB0aGUgcHJvZHVjdCBvZiB0aGUgcXVvdGllbnQgYmxvY2sgYW5kIHRoZSBkaXZpc29yIEQsIHRvIGJlCisJIHN1YnRyYWN0ZWQgZnJvbSB0aGUgcGFydGlhbCByZW1haW5kZXIgY29tYmluZWQgd2l0aCBuZXcgbGltYnMgZnJvbSB0aGUKKwkgZGl2aWRlbmQgTi4gIFdlIG9ubHkgcmVhbGx5IG5lZWQgdGhlIGxvdyBkbisxIGxpbWJzLiAgKi8KKworICAgICAgaWYgKEJFTE9XX1RIUkVTSE9MRCAoaW4sIE1VTF9UT19NVUxNT0RfQk5NMV9GT1JfMk5YTl9USFJFU0hPTEQpKQorCW1wbl9tdWwgKHRwLCBkcCwgZG4sIHFwLCBpbik7CQkvKiBkbitpbiBsaW1icywgaGlnaCAnaW4nIGNhbmNlbHMgKi8KKyAgICAgIGVsc2UKKwl7CisJICB0biA9IG1wbl9tdWxtb2RfYm5tMV9uZXh0X3NpemUgKGRuICsgMSk7CisJICBtcG5fbXVsbW9kX2JubTEgKHRwLCB0biwgZHAsIGRuLCBxcCwgaW4sIHNjcmF0Y2hfb3V0KTsKKwkgIHduID0gZG4gKyBpbiAtIHRuOwkJCS8qIG51bWJlciBvZiB3cmFwcGVkIGxpbWJzICovCisJICBpZiAod24gPiAwKQorCSAgICB7CisJICAgICAgY3kgPSBtcG5fc3ViX24gKHRwLCB0cCwgcnAgKyBkbiAtIHduLCB3bik7CisJICAgICAgY3kgPSBtcG5fc3ViXzEgKHRwICsgd24sIHRwICsgd24sIHRuIC0gd24sIGN5KTsKKwkgICAgICBjeCA9IG1wbl9jbXAgKHJwICsgZG4gLSBpbiwgdHAgKyBkbiwgdG4gLSBkbikgPCAwOworCSAgICAgIEFTU0VSVF9BTFdBWVMgKGN4ID49IGN5KTsKKwkgICAgICBtcG5faW5jcl91ICh0cCwgY3ggLSBjeSk7CisJICAgIH0KKwl9CisKKyAgICAgIHIgPSBycFtkbiAtIGluXSAtIHRwW2RuXTsKKworICAgICAgLyogU3VidHJhY3QgdGhlIHByb2R1Y3QgZnJvbSB0aGUgcGFydGlhbCByZW1haW5kZXIgY29tYmluZWQgd2l0aCBuZXcKKwkgbGltYnMgZnJvbSB0aGUgZGl2aWRlbmQgTiwgZ2VuZXJhdGluZyBhIG5ldyBwYXJ0aWFsIHJlbWFpbmRlciBSLiAgKi8KKyAgICAgIGlmIChkbiAhPSBpbikKKwl7CisJICBjeSA9IG1wbl9zdWJfbiAodHAsIG5wLCB0cCwgaW4pOwkvKiBnZXQgbmV4dCAnaW4nIGxpbWJzIGZyb20gTiAqLworCSAgY3kgPSBtcG5fc3ViX25jICh0cCArIGluLCBycCwgdHAgKyBpbiwgZG4gLSBpbiwgY3kpOworCSAgTVBOX0NPUFkgKHJwLCB0cCwgZG4pOwkJLyogRklYTUU6IHRyeSB0byBhdm9pZCB0aGlzICovCisJfQorICAgICAgZWxzZQorCXsKKwkgIGN5ID0gbXBuX3N1Yl9uIChycCwgbnAsIHRwLCBpbik7CS8qIGdldCBuZXh0ICdpbicgbGltYnMgZnJvbSBOICovCisJfQorCisgICAgICBTVEFUIChpbnQgaTsgaW50IGVyciA9IDA7CisJICAgIHN0YXRpYyBpbnQgZXJyYXJyWzVdOyBzdGF0aWMgaW50IGVycl9yZWM7IHN0YXRpYyBpbnQgdG90KTsKKworICAgICAgLyogQ2hlY2sgdGhlIHJlbWFpbmRlciBSIGFuZCBhZGp1c3QgdGhlIHF1b3RpZW50IGFzIG5lZWRlZC4gICovCisgICAgICByIC09IGN5OworICAgICAgd2hpbGUgKHIgIT0gMCkKKwl7CisJICAvKiBXZSBsb29wIDAgdGltZXMgd2l0aCBhYm91dCA2OSUgcHJvYmFiaWxpdHksIDEgdGltZSB3aXRoIGFib3V0IDMxJQorCSAgICAgcHJvYmFiaWxpdHksIDIgdGltZXMgd2l0aCBhYm91dCAwLjYlIHByb2JhYmlsaXR5LCBpZiBpbnZlcnNlIGlzCisJICAgICBjb21wdXRlZCBhcyByZWNvbW1lbmRlZC4gICovCisJICBtcG5faW5jcl91IChxcCwgMSk7CisJICBjeSA9IG1wbl9zdWJfbiAocnAsIHJwLCBkcCwgZG4pOworCSAgciAtPSBjeTsKKwkgIFNUQVQgKGVycisrKTsKKwl9CisgICAgICBpZiAobXBuX2NtcCAocnAsIGRwLCBkbikgPj0gMCkKKwl7CisJICAvKiBUaGlzIGlzIGV4ZWN1dGVkIHdpdGggYWJvdXQgNzYlIHByb2JhYmlsaXR5LiAgKi8KKwkgIG1wbl9pbmNyX3UgKHFwLCAxKTsKKwkgIGN5ID0gbXBuX3N1Yl9uIChycCwgcnAsIGRwLCBkbik7CisJICBTVEFUIChlcnIrKyk7CisJfQorCisgICAgICBTVEFUICgKKwkgICAgdG90Kys7CisJICAgIGVycmFycltlcnJdKys7CisJICAgIGlmIChlcnIgPiBlcnJfcmVjKQorCSAgICAgIGVycl9yZWMgPSBlcnI7CisJICAgIGlmICh0b3QgJSAweDEwMDAwID09IDApCisJICAgICAgeworCQlmb3IgKGkgPSAwOyBpIDw9IGVycl9yZWM7IGkrKykKKwkJICBwcmludGYgKCIgICVkKCUuMWYlJSkiLCBlcnJhcnJbaV0sIDEwMC4wKmVycmFycltpXS90b3QpOworCQlwcmludGYgKCJcbiIpOworCSAgICAgIH0KKwkgICAgKTsKKyAgICB9CisKKyAgcmV0dXJuIHFoOworfQorCisvKiBJbiBjYXNlIGs9MCAoYXV0b21hdGljIGNob2ljZSksIHdlIGRpc3Rpbmd1aXNoIDMgY2FzZXM6CisgICAoYSkgZG4gPCBxbjogICAgICAgICBpbiA9IGNlaWwocW4gLyBjZWlsKHFuL2RuKSkKKyAgIChiKSBkbi8zIDwgcW4gPD0gZG46IGluID0gY2VpbChxbiAvIDIpCisgICAoYykgcW4gPCBkbi8zOiAgICAgICBpbiA9IHFuCisgICBJbiBhbGwgY2FzZXMgd2UgaGF2ZSBpbiA8PSBkbi4KKyAqLworc3RhdGljIG1wX3NpemVfdAorbXBuX211X2Rpdl9xcl9jaG9vc2VfaW4gKG1wX3NpemVfdCBxbiwgbXBfc2l6ZV90IGRuLCBpbnQgaykKK3sKKyAgbXBfc2l6ZV90IGluOworCisgIGlmIChrID09IDApCisgICAgeworICAgICAgbXBfc2l6ZV90IGI7CisgICAgICBpZiAocW4gPiBkbikKKwl7CisJICAvKiBDb21wdXRlIGFuIGludmVyc2Ugc2l6ZSB0aGF0IGlzIGEgbmljZSBwYXJ0aXRpb24gb2YgdGhlIHF1b3RpZW50LiAgKi8KKwkgIGIgPSAocW4gLSAxKSAvIGRuICsgMTsJLyogY2VpbChxbi9kbiksIG51bWJlciBvZiBibG9ja3MgKi8KKwkgIGluID0gKHFuIC0gMSkgLyBiICsgMTsJLyogY2VpbChxbi9iKSA9IGNlaWwocW4gLyBjZWlsKHFuL2RuKSkgKi8KKwl9CisgICAgICBlbHNlIGlmICgzICogcW4gPiBkbikKKwl7CisJICBpbiA9IChxbiAtIDEpIC8gMiArIDE7CS8qIGIgPSAyICovCisJfQorICAgICAgZWxzZQorCXsKKwkgIGluID0gKHFuIC0gMSkgLyAxICsgMTsJLyogYiA9IDEgKi8KKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgbXBfc2l6ZV90IHhuOworICAgICAgeG4gPSBNSU4gKGRuLCBxbik7CisgICAgICBpbiA9ICh4biAtIDEpIC8gayArIDE7CisgICAgfQorCisgIHJldHVybiBpbjsKK30KKworbXBfc2l6ZV90CittcG5fbXVfZGl2X3FyX2l0Y2ggKG1wX3NpemVfdCBubiwgbXBfc2l6ZV90IGRuLCBpbnQgbXVhX2spCit7CisgIG1wX3NpemVfdCBpbiA9IG1wbl9tdV9kaXZfcXJfY2hvb3NlX2luIChubiAtIGRuLCBkbiwgbXVhX2spOworICBtcF9zaXplX3QgaXRjaF9wcmVpbnYgPSBtcG5fcHJlaW52X211X2Rpdl9xcl9pdGNoIChubiwgZG4sIGluKTsKKyAgbXBfc2l6ZV90IGl0Y2hfaW52YXBwID0gbXBuX2ludmVydGFwcHJfaXRjaCAoaW4gKyAxKSArIGluICsgMjsgLyogM2luICsgNCAqLworCisgIEFTU0VSVCAoaXRjaF9wcmVpbnYgPj0gaXRjaF9pbnZhcHApOworICByZXR1cm4gaW4gKyBNQVggKGl0Y2hfaW52YXBwLCBpdGNoX3ByZWludik7Cit9CisKK21wX3NpemVfdAorbXBuX3ByZWludl9tdV9kaXZfcXJfaXRjaCAobXBfc2l6ZV90IG5uLCBtcF9zaXplX3QgZG4sIG1wX3NpemVfdCBpbikKK3sKKyAgbXBfc2l6ZV90IGl0Y2hfbG9jYWwgPSBtcG5fbXVsbW9kX2JubTFfbmV4dF9zaXplIChkbiArIDEpOworICBtcF9zaXplX3QgaXRjaF9vdXQgPSBtcG5fbXVsbW9kX2JubTFfaXRjaCAoaXRjaF9sb2NhbCwgZG4sIGluKTsKKworICByZXR1cm4gaXRjaF9sb2NhbCArIGl0Y2hfb3V0OworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL211X2RpdmFwcHJfcS5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL211X2RpdmFwcHJfcS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwMjJiNGYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvbXVfZGl2YXBwcl9xLmMKQEAgLTAsMCArMSwzNjggQEAKKy8qIG1wbl9tdV9kaXZhcHByX3EsIG1wbl9wcmVpbnZfbXVfZGl2YXBwcl9xLgorCisgICBDb21wdXRlIFEgPSBmbG9vcihOIC8gRCkgKyBlLiAgTiBpcyBubiBsaW1icywgRCBpcyBkbiBsaW1icyBhbmQgbXVzdCBiZQorICAgbm9ybWFsaXplZCwgYW5kIFEgbXVzdCBiZSBubi1kbiBsaW1icywgMCA8PSBlIDw9IDQuICBUaGUgcmVxdWlyZW1lbnQgdGhhdCBRCisgICBpcyBubi1kbiBsaW1icyAoYW5kIG5vdCBubi1kbisxIGxpbWJzKSB3YXMgcHV0IGluIHBsYWNlIGluIG9yZGVyIHRvIGFsbG93IHVzCisgICB0byBsZXQgTiBiZSB1bm1vZGlmaWVkIGR1cmluZyB0aGUgb3BlcmF0aW9uLgorCisgICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisKKyAgIFRIRSBGVU5DVElPTlMgSU4gVEhJUyBGSUxFIEFSRSBJTlRFUk5BTCBXSVRIIE1VVEFCTEUgSU5URVJGQUNFUy4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggVEhFTSBUSFJPVUdIIERPQ1VNRU5URUQgSU5URVJGQUNFUy4gIElOIEZBQ1QsIElUIElTIEFMTU9TVAorICAgR1VBUkFOVEVFRCBUSEFUIFRIRVkgV0lMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEgRlVUVVJFIEdNUCBSRUxFQVNFLgorCitDb3B5cmlnaHQgMjAwNS0yMDA3LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisKKy8qCisgICBUaGUgaWRlYSBvZiB0aGUgYWxnb3JpdGhtIHVzZWQgaGVyZWluIGlzIHRvIGNvbXB1dGUgYSBzbWFsbGVyIGludmVydGVkIHZhbHVlCisgICB0aGFuIHVzZWQgaW4gdGhlIHN0YW5kYXJkIEJhcnJldHQgYWxnb3JpdGhtLCBhbmQgdGh1cyBzYXZlIHRpbWUgaW4gdGhlCisgICBOZXd0b24gaXRlcmF0aW9ucywgYW5kIHBheSBqdXN0IGEgc21hbGwgcHJpY2Ugd2hlbiB1c2luZyB0aGUgaW52ZXJ0ZWQgdmFsdWUKKyAgIGZvciBkZXZlbG9waW5nIHF1b3RpZW50IGJpdHMuICBUaGlzIGFsZ29yaXRobSB3YXMgcHJlc2VudGVkIGF0IElDTVMgMjAwNi4KKyovCisKKy8qIENBVVRJT046IFRoaXMgY29kZSBhbmQgdGhlIGNvZGUgaW4gbXVfZGl2X3FyLmMgc2hvdWxkIGJlIGVkaXRlZCBpbiBzeW5jLgorCisgVGhpbmdzIHRvIHdvcmsgb246CisKKyAgKiBUaGUgaXRjaC9zY3JhdGNoIHNjaGVtZSBpc24ndCBwZXJoYXBzIHN1Y2ggYSBnb29kIGlkZWEgYXMgaXQgb25jZSBzZWVtZWQsCisgICAgZGVtb25zdHJhdGVkIGJ5IHRoZSBmYWN0IHRoYXQgdGhlIG1wbl9pbnZlcnRhcHByIGZ1bmN0aW9uJ3Mgc2NyYXRjaCBuZWVkcworICAgIG1lYW4gdGhhdCB3ZSBuZWVkIHRvIGtlZXAgYSBsYXJnZSBhbGxvY2F0aW9uIGxvbmcgYWZ0ZXIgaXQgaXMgbmVlZGVkLgorICAgIFRoaW5ncyBhcmUgd29yc2UgYXMgbXBuX211bF9mZnQgZG9lcyBub3QgYWNjZXB0IGFueSBzY3JhdGNoIHBhcmFtZXRlciwKKyAgICB3aGljaCBtZWFucyB3ZSdsbCBoYXZlIGEgbGFyZ2UgbWVtb3J5IGhvbGUgd2hpbGUgaW4gbXBuX211bF9mZnQuICBJbgorICAgIGdlbmVyYWwsIGEgcGVhayBzY3JhdGNoIG5lZWQgaW4gdGhlIGJlZ2lubmluZyBvZiBhIGZ1bmN0aW9uIGlzbid0CisgICAgd2VsbC1oYW5kbGVkIGJ5IHRoZSBpdGNoL3NjcmF0Y2ggc2NoZW1lLgorKi8KKworI2lmZGVmIFNUQVQKKyN1bmRlZiBTVEFUCisjZGVmaW5lIFNUQVQoeCkgeAorI2Vsc2UKKyNkZWZpbmUgU1RBVCh4KQorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4JCS8qIGZvciBOVUxMICovCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworc3RhdGljIG1wX2xpbWJfdCBtcG5fcHJlaW52X211X2RpdmFwcHJfcSAobXBfcHRyLCBtcF9zcmNwdHIsIG1wX3NpemVfdCwKKwkJCSBtcF9zcmNwdHIsIG1wX3NpemVfdCwgbXBfc3JjcHRyLCBtcF9zaXplX3QsIG1wX3B0cik7CitzdGF0aWMgbXBfc2l6ZV90IG1wbl9tdV9kaXZhcHByX3FfY2hvb3NlX2luIChtcF9zaXplX3QsIG1wX3NpemVfdCwgaW50KTsKKworbXBfbGltYl90CittcG5fbXVfZGl2YXBwcl9xIChtcF9wdHIgcXAsCisJCSAgbXBfc3JjcHRyIG5wLAorCQkgIG1wX3NpemVfdCBubiwKKwkJICBtcF9zcmNwdHIgZHAsCisJCSAgbXBfc2l6ZV90IGRuLAorCQkgIG1wX3B0ciBzY3JhdGNoKQoreworICBtcF9zaXplX3QgcW4sIGluOworICBtcF9saW1iX3QgY3ksIHFoOworICBtcF9wdHIgaXAsIHRwOworCisgIEFTU0VSVCAoZG4gPiAxKTsKKworICBxbiA9IG5uIC0gZG47CisKKyAgLyogSWYgUSBpcyBzbWFsbGVyIHRoYW4gRCwgdHJ1bmNhdGUgb3BlcmFuZHMuICovCisgIGlmIChxbiArIDEgPCBkbikKKyAgICB7CisgICAgICBucCArPSBkbiAtIChxbiArIDEpOworICAgICAgbm4gLT0gZG4gLSAocW4gKyAxKTsKKyAgICAgIGRwICs9IGRuIC0gKHFuICsgMSk7CisgICAgICBkbiA9IHFuICsgMTsKKyAgICB9CisKKyAgLyogQ29tcHV0ZSB0aGUgaW52ZXJzZSBzaXplLiAgKi8KKyAgaW4gPSBtcG5fbXVfZGl2YXBwcl9xX2Nob29zZV9pbiAocW4sIGRuLCAwKTsKKyAgQVNTRVJUIChpbiA8PSBkbik7CisKKyNpZiAxCisgIC8qIFRoaXMgYWx0ZXJuYXRpdmUgaW52ZXJzZSBjb21wdXRhdGlvbiBtZXRob2QgZ2V0cyBzbGlnaHRseSBtb3JlIGFjY3VyYXRlCisgICAgIHJlc3VsdHMuICBGSVhNRXM6ICgxKSBUZW1wIGFsbG9jYXRpb24gbmVlZHMgbm90IGFuYWx5c2VkICgyKSBpdGNoIGZ1bmN0aW9uCisgICAgIG5vdCBhZGFwdGVkICgzKSBtcG5faW52ZXJ0YXBwciBzY3JhdGNoIG5lZWRzIG5vdCBtZXQuICAqLworICBpcCA9IHNjcmF0Y2g7CisgIHRwID0gc2NyYXRjaCArIGluICsgMTsKKworICAvKiBjb21wdXRlIGFuIGFwcHJveGltYXRlIGludmVyc2Ugb24gKGluKzEpIGxpbWJzICovCisgIGlmIChkbiA9PSBpbikKKyAgICB7CisgICAgICBNUE5fQ09QWSAodHAgKyAxLCBkcCwgaW4pOworICAgICAgdHBbMF0gPSAxOworICAgICAgbXBuX2ludmVydGFwcHIgKGlwLCB0cCwgaW4gKyAxLCB0cCArIGluICsgMSk7CisgICAgICBNUE5fQ09QWV9JTkNSIChpcCwgaXAgKyAxLCBpbik7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgY3kgPSBtcG5fYWRkXzEgKHRwLCBkcCArIGRuIC0gKGluICsgMSksIGluICsgMSwgMSk7CisgICAgICBpZiAoVU5MSUtFTFkgKGN5ICE9IDApKQorCU1QTl9aRVJPIChpcCwgaW4pOworICAgICAgZWxzZQorCXsKKwkgIG1wbl9pbnZlcnRhcHByIChpcCwgdHAsIGluICsgMSwgdHAgKyBpbiArIDEpOworCSAgTVBOX0NPUFlfSU5DUiAoaXAsIGlwICsgMSwgaW4pOworCX0KKyAgICB9CisjZWxzZQorICAvKiBUaGlzIG9sZGVyIGludmVyc2UgY29tcHV0YXRpb24gbWV0aG9kIGdldHMgc2xpZ2h0bHkgd29yc2UgcmVzdWx0cyB0aGFuIHRoZQorICAgICBvbmUgYWJvdmUuICAqLworICBpcCA9IHNjcmF0Y2g7CisgIHRwID0gc2NyYXRjaCArIGluOworCisgIC8qIENvbXB1dGUgaW52ZXJzZSBvZiBEIHRvIGluKzEgbGltYnMsIHRoZW4gcm91bmQgdG8gJ2luJyBsaW1icy4gIElkZWFsbHkgdGhlCisgICAgIGludmVyc2lvbiBmdW5jdGlvbiBzaG91bGQgZG8gdGhpcyBhdXRvbWF0aWNhbGx5LiAgKi8KKyAgaWYgKGRuID09IGluKQorICAgIHsKKyAgICAgIHRwW2luICsgMV0gPSAwOworICAgICAgTVBOX0NPUFkgKHRwICsgaW4gKyAyLCBkcCwgaW4pOworICAgICAgbXBuX2ludmVydGFwcHIgKHRwLCB0cCArIGluICsgMSwgaW4gKyAxLCBOVUxMKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBtcG5faW52ZXJ0YXBwciAodHAsIGRwICsgZG4gLSAoaW4gKyAxKSwgaW4gKyAxLCBOVUxMKTsKKyAgICB9CisgIGN5ID0gbXBuX3N1Yl8xICh0cCwgdHAsIGluICsgMSwgR01QX05VTUJfSElHSEJJVCk7CisgIGlmIChVTkxJS0VMWSAoY3kgIT0gMCkpCisgICAgTVBOX1pFUk8gKHRwICsgMSwgaW4pOworICBNUE5fQ09QWSAoaXAsIHRwICsgMSwgaW4pOworI2VuZGlmCisKKyAgcWggPSBtcG5fcHJlaW52X211X2RpdmFwcHJfcSAocXAsIG5wLCBubiwgZHAsIGRuLCBpcCwgaW4sIHNjcmF0Y2ggKyBpbik7CisKKyAgcmV0dXJuIHFoOworfQorCitzdGF0aWMgbXBfbGltYl90CittcG5fcHJlaW52X211X2RpdmFwcHJfcSAobXBfcHRyIHFwLAorCQkJIG1wX3NyY3B0ciBucCwKKwkJCSBtcF9zaXplX3Qgbm4sCisJCQkgbXBfc3JjcHRyIGRwLAorCQkJIG1wX3NpemVfdCBkbiwKKwkJCSBtcF9zcmNwdHIgaXAsCisJCQkgbXBfc2l6ZV90IGluLAorCQkJIG1wX3B0ciBzY3JhdGNoKQoreworICBtcF9zaXplX3QgcW47CisgIG1wX2xpbWJfdCBjeSwgY3gsIHFoOworICBtcF9saW1iX3QgcjsKKyAgbXBfc2l6ZV90IHRuLCB3bjsKKworI2RlZmluZSBycCAgICAgICAgICAgc2NyYXRjaAorI2RlZmluZSB0cCAgICAgICAgICAgKHNjcmF0Y2ggKyBkbikKKyNkZWZpbmUgc2NyYXRjaF9vdXQgIChzY3JhdGNoICsgZG4gKyB0bikKKworICBxbiA9IG5uIC0gZG47CisKKyAgbnAgKz0gcW47CisgIHFwICs9IHFuOworCisgIHFoID0gbXBuX2NtcCAobnAsIGRwLCBkbikgPj0gMDsKKyAgaWYgKHFoICE9IDApCisgICAgbXBuX3N1Yl9uIChycCwgbnAsIGRwLCBkbik7CisgIGVsc2UKKyAgICBNUE5fQ09QWSAocnAsIG5wLCBkbik7CisKKyAgaWYgKHFuID09IDApCisgICAgcmV0dXJuIHFoOwkJCS8qIERlZ2VuZXJhdGUgdXNlLiAgU2hvdWxkIHdlIGFsbG93IHRoaXM/ICovCisKKyAgd2hpbGUgKHFuID4gMCkKKyAgICB7CisgICAgICBpZiAocW4gPCBpbikKKwl7CisJICBpcCArPSBpbiAtIHFuOworCSAgaW4gPSBxbjsKKwl9CisgICAgICBucCAtPSBpbjsKKyAgICAgIHFwIC09IGluOworCisgICAgICAvKiBDb21wdXRlIHRoZSBuZXh0IGJsb2NrIG9mIHF1b3RpZW50IGxpbWJzIGJ5IG11bHRpcGx5aW5nIHRoZSBpbnZlcnNlIEkKKwkgYnkgdGhlIHVwcGVyIHBhcnQgb2YgdGhlIHBhcnRpYWwgcmVtYWluZGVyIFIuICAqLworICAgICAgbXBuX211bF9uICh0cCwgcnAgKyBkbiAtIGluLCBpcCwgaW4pOwkJLyogbXVsaGkgICovCisgICAgICBjeSA9IG1wbl9hZGRfbiAocXAsIHRwICsgaW4sIHJwICsgZG4gLSBpbiwgaW4pOwkvKiBJJ3MgbXNiIGltcGxpY2l0ICovCisgICAgICBBU1NFUlRfQUxXQVlTIChjeSA9PSAwKTsKKworICAgICAgcW4gLT0gaW47CisgICAgICBpZiAocW4gPT0gMCkKKwlicmVhazsKKworICAgICAgLyogQ29tcHV0ZSB0aGUgcHJvZHVjdCBvZiB0aGUgcXVvdGllbnQgYmxvY2sgYW5kIHRoZSBkaXZpc29yIEQsIHRvIGJlCisJIHN1YnRyYWN0ZWQgZnJvbSB0aGUgcGFydGlhbCByZW1haW5kZXIgY29tYmluZWQgd2l0aCBuZXcgbGltYnMgZnJvbSB0aGUKKwkgZGl2aWRlbmQgTi4gIFdlIG9ubHkgcmVhbGx5IG5lZWQgdGhlIGxvdyBkbiBsaW1icy4gICovCisKKyAgICAgIGlmIChCRUxPV19USFJFU0hPTEQgKGluLCBNVUxfVE9fTVVMTU9EX0JOTTFfRk9SXzJOWE5fVEhSRVNIT0xEKSkKKwltcG5fbXVsICh0cCwgZHAsIGRuLCBxcCwgaW4pOwkJLyogZG4raW4gbGltYnMsIGhpZ2ggJ2luJyBjYW5jZWxzICovCisgICAgICBlbHNlCisJeworCSAgdG4gPSBtcG5fbXVsbW9kX2JubTFfbmV4dF9zaXplIChkbiArIDEpOworCSAgbXBuX211bG1vZF9ibm0xICh0cCwgdG4sIGRwLCBkbiwgcXAsIGluLCBzY3JhdGNoX291dCk7CisJICB3biA9IGRuICsgaW4gLSB0bjsJCQkvKiBudW1iZXIgb2Ygd3JhcHBlZCBsaW1icyAqLworCSAgaWYgKHduID4gMCkKKwkgICAgeworCSAgICAgIGN5ID0gbXBuX3N1Yl9uICh0cCwgdHAsIHJwICsgZG4gLSB3biwgd24pOworCSAgICAgIGN5ID0gbXBuX3N1Yl8xICh0cCArIHduLCB0cCArIHduLCB0biAtIHduLCBjeSk7CisJICAgICAgY3ggPSBtcG5fY21wIChycCArIGRuIC0gaW4sIHRwICsgZG4sIHRuIC0gZG4pIDwgMDsKKwkgICAgICBBU1NFUlRfQUxXQVlTIChjeCA+PSBjeSk7CisJICAgICAgbXBuX2luY3JfdSAodHAsIGN4IC0gY3kpOworCSAgICB9CisJfQorCisgICAgICByID0gcnBbZG4gLSBpbl0gLSB0cFtkbl07CisKKyAgICAgIC8qIFN1YnRyYWN0IHRoZSBwcm9kdWN0IGZyb20gdGhlIHBhcnRpYWwgcmVtYWluZGVyIGNvbWJpbmVkIHdpdGggbmV3CisJIGxpbWJzIGZyb20gdGhlIGRpdmlkZW5kIE4sIGdlbmVyYXRpbmcgYSBuZXcgcGFydGlhbCByZW1haW5kZXIgUi4gICovCisgICAgICBpZiAoZG4gIT0gaW4pCisJeworCSAgY3kgPSBtcG5fc3ViX24gKHRwLCBucCwgdHAsIGluKTsJLyogZ2V0IG5leHQgJ2luJyBsaW1icyBmcm9tIE4gKi8KKwkgIGN5ID0gbXBuX3N1Yl9uYyAodHAgKyBpbiwgcnAsIHRwICsgaW4sIGRuIC0gaW4sIGN5KTsKKwkgIE1QTl9DT1BZIChycCwgdHAsIGRuKTsJCS8qIEZJWE1FOiB0cnkgdG8gYXZvaWQgdGhpcyAqLworCX0KKyAgICAgIGVsc2UKKwl7CisJICBjeSA9IG1wbl9zdWJfbiAocnAsIG5wLCB0cCwgaW4pOwkvKiBnZXQgbmV4dCAnaW4nIGxpbWJzIGZyb20gTiAqLworCX0KKworICAgICAgU1RBVCAoaW50IGk7IGludCBlcnIgPSAwOworCSAgICBzdGF0aWMgaW50IGVycmFycls1XTsgc3RhdGljIGludCBlcnJfcmVjOyBzdGF0aWMgaW50IHRvdCk7CisKKyAgICAgIC8qIENoZWNrIHRoZSByZW1haW5kZXIgUiBhbmQgYWRqdXN0IHRoZSBxdW90aWVudCBhcyBuZWVkZWQuICAqLworICAgICAgciAtPSBjeTsKKyAgICAgIHdoaWxlIChyICE9IDApCisJeworCSAgLyogV2UgbG9vcCAwIHRpbWVzIHdpdGggYWJvdXQgNjklIHByb2JhYmlsaXR5LCAxIHRpbWUgd2l0aCBhYm91dCAzMSUKKwkgICAgIHByb2JhYmlsaXR5LCAyIHRpbWVzIHdpdGggYWJvdXQgMC42JSBwcm9iYWJpbGl0eSwgaWYgaW52ZXJzZSBpcworCSAgICAgY29tcHV0ZWQgYXMgcmVjb21tZW5kZWQuICAqLworCSAgbXBuX2luY3JfdSAocXAsIDEpOworCSAgY3kgPSBtcG5fc3ViX24gKHJwLCBycCwgZHAsIGRuKTsKKwkgIHIgLT0gY3k7CisJICBTVEFUIChlcnIrKyk7CisJfQorICAgICAgaWYgKG1wbl9jbXAgKHJwLCBkcCwgZG4pID49IDApCisJeworCSAgLyogVGhpcyBpcyBleGVjdXRlZCB3aXRoIGFib3V0IDc2JSBwcm9iYWJpbGl0eS4gICovCisJICBtcG5faW5jcl91IChxcCwgMSk7CisJICBjeSA9IG1wbl9zdWJfbiAocnAsIHJwLCBkcCwgZG4pOworCSAgU1RBVCAoZXJyKyspOworCX0KKworICAgICAgU1RBVCAoCisJICAgIHRvdCsrOworCSAgICBlcnJhcnJbZXJyXSsrOworCSAgICBpZiAoZXJyID4gZXJyX3JlYykKKwkgICAgICBlcnJfcmVjID0gZXJyOworCSAgICBpZiAodG90ICUgMHgxMDAwMCA9PSAwKQorCSAgICAgIHsKKwkJZm9yIChpID0gMDsgaSA8PSBlcnJfcmVjOyBpKyspCisJCSAgcHJpbnRmICgiICAlZCglLjFmJSUpIiwgZXJyYXJyW2ldLCAxMDAuMCplcnJhcnJbaV0vdG90KTsKKwkJcHJpbnRmICgiXG4iKTsKKwkgICAgICB9CisJICAgICk7CisgICAgfQorCisgIC8qIEZJWE1FOiBXZSBzaG91bGQgcGVyaGFwcyBiZSBzb21ld2hhdCBtb3JlIGVsZWdhbnQgaW4gb3VyIHJvdW5kaW5nIG9mIHRoZQorICAgICBxdW90aWVudC4gIEZvciBub3csIGp1c3QgbWFrZSBzdXJlIHRoZSByZXR1cm5lZCBxdW90aWVudCBpcyA+PSB0aGUgcmVhbAorICAgICBxdW90aWVudDsgYWRkIDMgd2l0aCBzYXR1cmF0aW5nIGFyaXRobWV0aWMuICAqLworICBxbiA9IG5uIC0gZG47CisgIGN5ICs9IG1wbl9hZGRfMSAocXAsIHFwLCBxbiwgMyk7CisgIGlmIChjeSAhPSAwKQorICAgIHsKKyAgICAgIGlmIChxaCAhPSAwKQorCXsKKwkgIC8qIFJldHVybiBhIHF1b3RpZW50IG9mIGp1c3QgMS1iaXRzLCB3aXRoIHFoIHNldC4gICovCisJICBtcF9zaXplX3QgaTsKKwkgIGZvciAoaSA9IDA7IGkgPCBxbjsgaSsrKQorCSAgICBxcFtpXSA9IEdNUF9OVU1CX01BWDsKKwl9CisgICAgICBlbHNlCisJeworCSAgLyogUHJvcGFnYXRlIGNhcnJ5IGludG8gcWguICAqLworCSAgcWggPSAxOworCX0KKyAgICB9CisKKyAgcmV0dXJuIHFoOworfQorCisvKiBJbiBjYXNlIGs9MCAoYXV0b21hdGljIGNob2ljZSksIHdlIGRpc3Rpbmd1aXNoIDMgY2FzZXM6CisgICAoYSkgZG4gPCBxbjogICAgICAgICBpbiA9IGNlaWwocW4gLyBjZWlsKHFuL2RuKSkKKyAgIChiKSBkbi8zIDwgcW4gPD0gZG46IGluID0gY2VpbChxbiAvIDIpCisgICAoYykgcW4gPCBkbi8zOiAgICAgICBpbiA9IHFuCisgICBJbiBhbGwgY2FzZXMgd2UgaGF2ZSBpbiA8PSBkbi4KKyAqLworc3RhdGljIG1wX3NpemVfdAorbXBuX211X2RpdmFwcHJfcV9jaG9vc2VfaW4gKG1wX3NpemVfdCBxbiwgbXBfc2l6ZV90IGRuLCBpbnQgaykKK3sKKyAgbXBfc2l6ZV90IGluOworCisgIGlmIChrID09IDApCisgICAgeworICAgICAgbXBfc2l6ZV90IGI7CisgICAgICBpZiAocW4gPiBkbikKKwl7CisJICAvKiBDb21wdXRlIGFuIGludmVyc2Ugc2l6ZSB0aGF0IGlzIGEgbmljZSBwYXJ0aXRpb24gb2YgdGhlIHF1b3RpZW50LiAgKi8KKwkgIGIgPSAocW4gLSAxKSAvIGRuICsgMTsJLyogY2VpbChxbi9kbiksIG51bWJlciBvZiBibG9ja3MgKi8KKwkgIGluID0gKHFuIC0gMSkgLyBiICsgMTsJLyogY2VpbChxbi9iKSA9IGNlaWwocW4gLyBjZWlsKHFuL2RuKSkgKi8KKwl9CisgICAgICBlbHNlIGlmICgzICogcW4gPiBkbikKKwl7CisJICBpbiA9IChxbiAtIDEpIC8gMiArIDE7CS8qIGIgPSAyICovCisJfQorICAgICAgZWxzZQorCXsKKwkgIGluID0gKHFuIC0gMSkgLyAxICsgMTsJLyogYiA9IDEgKi8KKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgbXBfc2l6ZV90IHhuOworICAgICAgeG4gPSBNSU4gKGRuLCBxbik7CisgICAgICBpbiA9ICh4biAtIDEpIC8gayArIDE7CisgICAgfQorCisgIHJldHVybiBpbjsKK30KKworbXBfc2l6ZV90CittcG5fbXVfZGl2YXBwcl9xX2l0Y2ggKG1wX3NpemVfdCBubiwgbXBfc2l6ZV90IGRuLCBpbnQgbXVhX2spCit7CisgIG1wX3NpemVfdCBxbiwgaW4sIGl0Y2hfbG9jYWwsIGl0Y2hfb3V0LCBpdGNoX2ludmFwcDsKKworICBxbiA9IG5uIC0gZG47CisgIGlmIChxbiArIDEgPCBkbikKKyAgICB7CisgICAgICBkbiA9IHFuICsgMTsKKyAgICB9CisgIGluID0gbXBuX211X2RpdmFwcHJfcV9jaG9vc2VfaW4gKHFuLCBkbiwgbXVhX2spOworCisgIGl0Y2hfbG9jYWwgPSBtcG5fbXVsbW9kX2JubTFfbmV4dF9zaXplIChkbiArIDEpOworICBpdGNoX291dCA9IG1wbl9tdWxtb2RfYm5tMV9pdGNoIChpdGNoX2xvY2FsLCBkbiwgaW4pOworICBpdGNoX2ludmFwcCA9IG1wbl9pbnZlcnRhcHByX2l0Y2ggKGluICsgMSkgKyBpbiArIDI7IC8qIDNpbiArIDQgKi8KKworICBBU1NFUlQgKGRuICsgaXRjaF9sb2NhbCArIGl0Y2hfb3V0ID49IGl0Y2hfaW52YXBwKTsKKyAgcmV0dXJuIGluICsgTUFYIChkbiArIGl0Y2hfbG9jYWwgKyBpdGNoX291dCwgaXRjaF9pbnZhcHApOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL211bC5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL211bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NDQ0ZTkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvbXVsLmMKQEAgLTAsMCArMSw0NDEgQEAKKy8qIG1wbl9tdWwgLS0gTXVsdGlwbHkgdHdvIG5hdHVyYWwgbnVtYmVycy4KKworICAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqb3JuIEdyYW5sdW5kLgorCitDb3B5cmlnaHQgMTk5MSwgMTk5MywgMTk5NCwgMTk5NiwgMTk5NywgMTk5OS0yMDAzLCAyMDA1LTIwMDcsIDIwMDksIDIwMTAsIDIwMTIsCisyMDE0LCAyMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworCisjaWZuZGVmIE1VTF9CQVNFQ0FTRV9NQVhfVU4KKyNkZWZpbmUgTVVMX0JBU0VDQVNFX01BWF9VTiA1MDAKKyNlbmRpZgorCisvKiBBcmVhcyB3aGVyZSB0aGUgZGlmZmVyZW50IHRvb20gYWxnb3JpdGhtcyBjYW4gYmUgY2FsbGVkIChleHRyYWN0ZWQKKyAgIGZyb20gdGhlIHQtdG9vbSouYyBmaWxlcywgYW5kIGlnbm9yaW5nIHNtYWxsIGNvbnN0YW50IG9mZnNldHMpOgorCisgICAxLzYgIDEvNSAxLzQgNC8xMyAxLzMgMy84IDIvNSA1LzExIDEvMiAzLzUgMi8zIDMvNCA0LzUgICAxIHZuL3VuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNC83ICAgICAgICAgICAgICA2LzcKKwkJCQkgICAgICAgNi8xMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tfCB0b29tMjIgKHNtYWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0b29tMjIgKGxhcmdlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx4eHh4fCB0b29tMjIgY2FsbGVkCisgICAgICAgICAgICAgICAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHRvb20zMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8eHh4eHh4eHh4eHh4eHh4eHwgfCB0b29tMzIgY2FsbGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwtLS0tLS0tLS0tLS18IHRvb20zMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx4fCB0b29tMzMgY2FsbGVkCisgICAgICAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgICAgICAgICAgICB8IHRvb200MgorCSAgICAgICAgICAgICAgfHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHwgICAgICAgICAgICB8IHRvb200MiBjYWxsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLXwgdG9vbTQzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx4eHh4eHh4eHh4fCAgIHRvb200MyBjYWxsZWQKKyAgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgICAgICAgICAgICAgICAgICAgICAgdG9vbTUyICh1bnVzZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8LS0tLS0tLS18IHRvb200NAorCQkJCQkJICAgfHh4eHh4eHh4fCB0b29tNDQgY2FsbGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS18ICAgICAgICB8IHRvb201MworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx4eHh4eHh8ICAgICAgICAgICAgICB0b29tNTMgY2FsbGVkCisgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb202MiAodW51c2VkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tfCB0b29tNTQgKHVudXNlZCkKKyAgICAgICAgICAgICAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS18ICAgICAgICAgICAgICAgICAgdG9vbTYzCisJICAgICAgICAgICAgICAgICAgICAgIHx4eHh4eHh4eHh8ICAgICAgICAgICAgICAgICAgIHwgdG9vbTYzIGNhbGxlZAorICAgICAgICAgICAgICAgICAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB0b29tNmgKKwkJCQkJCSAgIHx4eHh4eHh4eHwgdG9vbTZoIGNhbGxlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB0b29tOGggKDMyIGJpdCkKKyAgICAgICAgICAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgdG9vbThoICg2NCBiaXQpCisJCQkJCQkgICB8eHh4eHh4eHh8IHRvb204aCBjYWxsZWQKKyovCisKKyNkZWZpbmUgVE9PTTMzX09LKGFuLGJuKSAoNiArIDIgKiBhbiA8IDMgKiBibikKKyNkZWZpbmUgVE9PTTQ0X09LKGFuLGJuKSAoMTIgKyAzICogYW4gPCA0ICogYm4pCisKKy8qIE11bHRpcGx5IHRoZSBuYXR1cmFsIG51bWJlcnMgdSAocG9pbnRlZCB0byBieSBVUCwgd2l0aCBVTiBsaW1icykgYW5kIHYKKyAgIChwb2ludGVkIHRvIGJ5IFZQLCB3aXRoIFZOIGxpbWJzKSwgYW5kIHN0b3JlIHRoZSByZXN1bHQgYXQgUFJPRFAuICBUaGUKKyAgIHJlc3VsdCBpcyBVTiArIFZOIGxpbWJzLiAgUmV0dXJuIHRoZSBtb3N0IHNpZ25pZmljYW50IGxpbWIgb2YgdGhlIHJlc3VsdC4KKworICAgTk9URTogVGhlIHNwYWNlIHBvaW50ZWQgdG8gYnkgUFJPRFAgaXMgb3ZlcndyaXR0ZW4gYmVmb3JlIGZpbmlzaGVkIHdpdGggVQorICAgYW5kIFYsIHNvIG92ZXJsYXAgaXMgYW4gZXJyb3IuCisKKyAgIEFyZ3VtZW50IGNvbnN0cmFpbnRzOgorICAgMS4gVU4gPj0gVk4uCisgICAyLiBQUk9EUCAhPSBVUCBhbmQgUFJPRFAgIT0gVlAsIGkuZS4gdGhlIGRlc3RpbmF0aW9uIG11c3QgYmUgZGlzdGluY3QgZnJvbQorICAgICAgdGhlIG11bHRpcGxpZXIgYW5kIHRoZSBtdWx0aXBsaWNhbmQuICAqLworCisvKgorICAqIFRoZSBjdXRvZmYgbGluZXMgaW4gdGhlIHRvb21YMiBhbmQgdG9vbVgzIGNvZGUgYXJlIG5vdyBleGFjdGx5IGJldHdlZW4gdGhlCisgICAgaWRlYWwgbGluZXMgb2YgdGhlIHN1cnJvdW5kaW5nIGFsZ29yaXRobXMuICBJcyB0aGF0IG9wdGltYWw/CisKKyAgKiBUaGUgdG9vbVgzIGNvZGUgbm93IHVzZXMgYSBzdHJ1Y3R1cmUgc2ltaWxhciB0byB0aGUgb25lIG9mIHRvb21YMiwgZXhjZXB0CisgICAgdGhhdCBpdCBsb29wcyBsb25nZXIgaW4gdGhlIHVuYmFsYW5jZWQgY2FzZS4gIFRoZSByZXN1bHQgaXMgdGhhdCB0aGUKKyAgICByZW1haW5pbmcgYXJlYSBtaWdodCBoYXZlIHVuIDwgdm4uICBTaG91bGQgd2UgZml4IHRoZSB0b29tWDIgY29kZSBpbiBhCisgICAgc2ltaWxhciB3YXk/CisKKyAgKiBUaGUgdG9vbVgzIGNvZGUgaXMgdXNlZCBmb3IgdGhlIGxhcmdlc3Qgbm9uLUZGVCB1bmJhbGFuY2VkIG9wZXJhbmRzLiAgSXQKKyAgICB0aGVyZWZvcmUgY2FsbHMgbXBuX211bCByZWN1cnNpdmVseSBmb3IgY2VydGFpbiBjYXNlcy4KKworICAqIEFsbG9jYXRlIHN0YXRpYyB0ZW1wIHNwYWNlIHVzaW5nIFRIUkVTSE9MRCB2YXJpYWJsZXMgKGV4Y2VwdCBmb3IgdG9vbTQ0CisgICAgd2hlbiAhV0FOVF9GRlQpLiAgVGhhdCB3YXksIHdlIGNhbiB0eXBpY2FsbHkgaGF2ZSBubyBUTVBfQUxMT0MgYXQgYWxsLgorCisgICogV2Ugc29ydCBUb29tWDIgYWxnb3JpdGhtcyB0b2dldGhlciwgYXNzdW1pbmcgdGhlIHRvb20yMiwgdG9vbTMyLCB0b29tNDIKKyAgICBoYXZlIHRoZSBzYW1lIHZuIHRocmVzaG9sZC4gIFRoaXMgaXMgbm90IHRydWUsIHdlIHNob3VsZCBhY3R1YWxseSB1c2UKKyAgICBtdWxfYmFzZWNhc2UgZm9yIHNsaWdodGx5IGxhcmdlciBvcGVyYW5kcyBmb3IgdG9vbTMyIHRoYW4gZm9yIHRvb20yMiwgYW5kCisgICAgZXZlbiBsYXJnZXIgZm9yIHRvb200Mi4KKworICAqIFRoYXQgcHJvYmxlbSBpcyBldmVuIG1vcmUgcHJldmFsZW50IGZvciB0b29tWDMuICBXZSB0aGVyZWZvcmUgdXNlIHNwZWNpYWwKKyAgICBUSFJFU0hPTEQgdmFyaWFibGVzIHRoZXJlLgorKi8KKworbXBfbGltYl90CittcG5fbXVsIChtcF9wdHIgcHJvZHAsCisJIG1wX3NyY3B0ciB1cCwgbXBfc2l6ZV90IHVuLAorCSBtcF9zcmNwdHIgdnAsIG1wX3NpemVfdCB2bikKK3sKKyAgQVNTRVJUICh1biA+PSB2bik7CisgIEFTU0VSVCAodm4gPj0gMSk7CisgIEFTU0VSVCAoISBNUE5fT1ZFUkxBUF9QIChwcm9kcCwgdW4rdm4sIHVwLCB1bikpOworICBBU1NFUlQgKCEgTVBOX09WRVJMQVBfUCAocHJvZHAsIHVuK3ZuLCB2cCwgdm4pKTsKKworICBpZiAoQkVMT1dfVEhSRVNIT0xEICh1biwgTVVMX1RPT00yMl9USFJFU0hPTEQpKQorICAgIHsKKyAgICAgIC8qIFdoZW4gdW4gKGFuZCB0aHVzIHZuKSBpcyBiZWxvdyB0aGUgdG9vbTIyIHJhbmdlLCBkbyBtdWxfYmFzZWNhc2UuCisJIFRlc3QgdW4gYW5kIG5vdCB2biBoZXJlIG5vdCB0byB0aHdhcnQgdGhlIHVuID4+IHZuIGNvZGUgYmVsb3cuCisJIFRoaXMgc3BlY2lhbCBjYXNlIGlzIG5vdCBuZWNlc3NhcnksIGJ1dCBjdXRzIHRoZSBvdmVyaGVhZCBmb3IgdGhlCisJIHNtYWxsZXN0IG9wZXJhbmRzLiAqLworICAgICAgbXBuX211bF9iYXNlY2FzZSAocHJvZHAsIHVwLCB1biwgdnAsIHZuKTsKKyAgICB9CisgIGVsc2UgaWYgKHVuID09IHZuKQorICAgIHsKKyAgICAgIG1wbl9tdWxfbiAocHJvZHAsIHVwLCB2cCwgdW4pOworICAgIH0KKyAgZWxzZSBpZiAodm4gPCBNVUxfVE9PTTIyX1RIUkVTSE9MRCkKKyAgICB7IC8qIHBsYWluIHNjaG9vbGJvb2sgbXVsdGlwbGljYXRpb24gKi8KKworICAgICAgLyogVW5sZXNzIHVuIGlzIHZlcnkgbGFyZ2UsIG9yIGVsc2UgaWYgaGF2ZSBhbiBhcHBsaWNhYmxlIG1wbl9tdWxfTiwKKwkgcGVyZm9ybSBiYXNlY2FzZSBtdWx0aXBseSBkaXJlY3RseS4gICovCisgICAgICBpZiAodW4gPD0gTVVMX0JBU0VDQVNFX01BWF9VTgorI2lmIEhBVkVfTkFUSVZFX21wbl9tdWxfMgorCSAgfHwgdm4gPD0gMgorI2Vsc2UKKwkgIHx8IHZuID09IDEKKyNlbmRpZgorCSAgKQorCW1wbl9tdWxfYmFzZWNhc2UgKHByb2RwLCB1cCwgdW4sIHZwLCB2bik7CisgICAgICBlbHNlCisJeworCSAgLyogV2UgaGF2ZSB1biA+PiBNVUxfQkFTRUNBU0VfTUFYX1VOID4gdm4uICBGb3IgYmV0dGVyIG1lbW9yeQorCSAgICAgbG9jYWxpdHksIHNwbGl0IHVwW10gaW50byBNVUxfQkFTRUNBU0VfTUFYX1VOIHBpZWNlcyBhbmQgbXVsdGlwbHkKKwkgICAgIHRoZXNlIHBpZWNlcyB3aXRoIHRoZSB2cFtdIG9wZXJhbmQuICBBZnRlciBlYWNoIHN1Y2ggcGFydGlhbAorCSAgICAgbXVsdGlwbGljYXRpb24gKGJ1dCB0aGUgbGFzdCkgd2UgY29weSB0aGUgbW9zdCBzaWduaWZpY2FudCB2bgorCSAgICAgbGltYnMgaW50byBhIHRlbXBvcmFyeSBidWZmZXIgc2luY2UgdGhhdCBwYXJ0IHdvdWxkIG90aGVyd2lzZSBiZQorCSAgICAgb3ZlcndyaXR0ZW4gYnkgdGhlIG5leHQgbXVsdGlwbGljYXRpb24uICBBZnRlciB0aGUgbmV4dAorCSAgICAgbXVsdGlwbGljYXRpb24sIHdlIGFkZCBpdCBiYWNrLiAgVGhpcyBpbGx1c3RyYXRlcyB0aGUgc2l0dWF0aW9uOgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+dm48LS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHw8LS0tLS0tLSB1biAtLS0tLS0tPnwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fX19fX19fX19fX19fX19fX3wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWCAgICAgICAgICAgICAgICAgICAgL3wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9YWF9fX19fX19fX19fX19fX19fXy8gIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fX19fX19fX19fX19fX19fXyAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWCAgICAgICAgICAgICAgICAgICAgLyAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9YWF9fX19fX19fX19fX19fX19fXy8gICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgIF9fX19fX19fX19fX19fX19fX19fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgLyAgICAgICAgICAgICAgICAgICAgLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgIC9fX19fX19fX19fX19fX19fX19fXy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwkgICAgVGhlIHBhcnRzIG1hcmtlZCB3aXRoIFggYXJlIHRoZSBwYXJ0cyB3aG9zZSBzdW1zIGFyZSBjb3BpZWQgaW50bworCSAgICB0aGUgdGVtcG9yYXJ5IGJ1ZmZlci4gICovCisKKwkgIG1wX2xpbWJfdCB0cFtNVUxfVE9PTTIyX1RIUkVTSE9MRF9MSU1JVF07CisJICBtcF9saW1iX3QgY3k7CisJICBBU1NFUlQgKE1VTF9UT09NMjJfVEhSRVNIT0xEIDw9IE1VTF9UT09NMjJfVEhSRVNIT0xEX0xJTUlUKTsKKworCSAgbXBuX211bF9iYXNlY2FzZSAocHJvZHAsIHVwLCBNVUxfQkFTRUNBU0VfTUFYX1VOLCB2cCwgdm4pOworCSAgcHJvZHAgKz0gTVVMX0JBU0VDQVNFX01BWF9VTjsKKwkgIE1QTl9DT1BZICh0cCwgcHJvZHAsIHZuKTsJCS8qIHByZXNlcnZlIGhpZ2ggdHJpYW5nbGUgKi8KKwkgIHVwICs9IE1VTF9CQVNFQ0FTRV9NQVhfVU47CisJICB1biAtPSBNVUxfQkFTRUNBU0VfTUFYX1VOOworCSAgd2hpbGUgKHVuID4gTVVMX0JBU0VDQVNFX01BWF9VTikKKwkgICAgeworCSAgICAgIG1wbl9tdWxfYmFzZWNhc2UgKHByb2RwLCB1cCwgTVVMX0JBU0VDQVNFX01BWF9VTiwgdnAsIHZuKTsKKwkgICAgICBjeSA9IG1wbl9hZGRfbiAocHJvZHAsIHByb2RwLCB0cCwgdm4pOyAvKiBhZGQgYmFjayBwcmVzZXJ2ZWQgdHJpYW5nbGUgKi8KKwkgICAgICBtcG5faW5jcl91IChwcm9kcCArIHZuLCBjeSk7CisJICAgICAgcHJvZHAgKz0gTVVMX0JBU0VDQVNFX01BWF9VTjsKKwkgICAgICBNUE5fQ09QWSAodHAsIHByb2RwLCB2bik7CQkvKiBwcmVzZXJ2ZSBoaWdoIHRyaWFuZ2xlICovCisJICAgICAgdXAgKz0gTVVMX0JBU0VDQVNFX01BWF9VTjsKKwkgICAgICB1biAtPSBNVUxfQkFTRUNBU0VfTUFYX1VOOworCSAgICB9CisJICBpZiAodW4gPiB2bikKKwkgICAgeworCSAgICAgIG1wbl9tdWxfYmFzZWNhc2UgKHByb2RwLCB1cCwgdW4sIHZwLCB2bik7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIEFTU0VSVCAodW4gPiAwKTsKKwkgICAgICBtcG5fbXVsX2Jhc2VjYXNlIChwcm9kcCwgdnAsIHZuLCB1cCwgdW4pOworCSAgICB9CisJICBjeSA9IG1wbl9hZGRfbiAocHJvZHAsIHByb2RwLCB0cCwgdm4pOyAvKiBhZGQgYmFjayBwcmVzZXJ2ZWQgdHJpYW5nbGUgKi8KKwkgIG1wbl9pbmNyX3UgKHByb2RwICsgdm4sIGN5KTsKKwl9CisgICAgfQorICBlbHNlIGlmIChCRUxPV19USFJFU0hPTEQgKHZuLCBNVUxfVE9PTTMzX1RIUkVTSE9MRCkpCisgICAgeworICAgICAgLyogVXNlIFRvb21YMiB2YXJpYW50cyAqLworICAgICAgbXBfcHRyIHNjcmF0Y2g7CisgICAgICBUTVBfU0RFQ0w7IFRNUF9TTUFSSzsKKworI2RlZmluZSBJVENIX1RPT01YMiAoOSAqIHZuIC8gMiArIEdNUF9OVU1CX0JJVFMgKiAyKQorICAgICAgc2NyYXRjaCA9IFRNUF9TQUxMT0NfTElNQlMgKElUQ0hfVE9PTVgyKTsKKyAgICAgIEFTU0VSVCAobXBuX3Rvb20yMl9tdWxfaXRjaCAoKDUqdm4tMSkvNCwgdm4pIDw9IElUQ0hfVE9PTVgyKTsgLyogNXZuLzIrICovCisgICAgICBBU1NFUlQgKG1wbl90b29tMzJfbXVsX2l0Y2ggKCg3KnZuLTEpLzQsIHZuKSA8PSBJVENIX1RPT01YMik7IC8qIDd2bi82KyAqLworICAgICAgQVNTRVJUIChtcG5fdG9vbTQyX211bF9pdGNoICgzICogdm4gLSAxLCB2bikgPD0gSVRDSF9UT09NWDIpOyAvKiA5dm4vMisgKi8KKyN1bmRlZiBJVENIX1RPT01YMgorCisgICAgICAvKiBGSVhNRTogVGhpcyBjb25kaXRpb24gKHJlcGVhdGVkIGluIHRoZSBsb29wIGJlbG93KSBsZWF2ZXMgZnJvbSBhIHZuKnZuCisJIHNxdWFyZSB0byBhICgzdm4tMSkqdm4gcmVjdGFuZ2xlLiAgTGVhdmluZyBzdWNoIGEgcmVjdGFuZ2xlIGlzIGhhcmRseQorCSB3aXNlOyB3ZSB3b3VsZCBnZXQgYmV0dGVyIGJhbGFuY2UgYnkgc2xpZ2h0bHkgbW92aW5nIHRoZSBib3VuZC4gIFdlCisJIHdpbGwgc29tZXRpbWVzIGVuZCB1cCB3aXRoIHVuIDwgdm4sIGxpa2UgaW4gdGhlIFgzIGFybSBiZWxvdy4gICovCisgICAgICBpZiAodW4gPj0gMyAqIHZuKQorCXsKKwkgIG1wX2xpbWJfdCBjeTsKKwkgIG1wX3B0ciB3czsKKworCSAgLyogVGhlIG1heGltdW0gd3MgdXNhZ2UgaXMgZm9yIHRoZSBtcG5fbXVsIHJlc3VsdC4gICovCisJICB3cyA9IFRNUF9TQUxMT0NfTElNQlMgKDQgKiB2bik7CisKKwkgIG1wbl90b29tNDJfbXVsIChwcm9kcCwgdXAsIDIgKiB2biwgdnAsIHZuLCBzY3JhdGNoKTsKKwkgIHVuIC09IDIgKiB2bjsKKwkgIHVwICs9IDIgKiB2bjsKKwkgIHByb2RwICs9IDIgKiB2bjsKKworCSAgd2hpbGUgKHVuID49IDMgKiB2bikKKwkgICAgeworCSAgICAgIG1wbl90b29tNDJfbXVsICh3cywgdXAsIDIgKiB2biwgdnAsIHZuLCBzY3JhdGNoKTsKKwkgICAgICB1biAtPSAyICogdm47CisJICAgICAgdXAgKz0gMiAqIHZuOworCSAgICAgIGN5ID0gbXBuX2FkZF9uIChwcm9kcCwgcHJvZHAsIHdzLCB2bik7CisJICAgICAgTVBOX0NPUFkgKHByb2RwICsgdm4sIHdzICsgdm4sIDIgKiB2bik7CisJICAgICAgbXBuX2luY3JfdSAocHJvZHAgKyB2biwgY3kpOworCSAgICAgIHByb2RwICs9IDIgKiB2bjsKKwkgICAgfQorCisJICAvKiB2biA8PSB1biA8IDN2biAqLworCisJICBpZiAoNCAqIHVuIDwgNSAqIHZuKQorCSAgICBtcG5fdG9vbTIyX211bCAod3MsIHVwLCB1biwgdnAsIHZuLCBzY3JhdGNoKTsKKwkgIGVsc2UgaWYgKDQgKiB1biA8IDcgKiB2bikKKwkgICAgbXBuX3Rvb20zMl9tdWwgKHdzLCB1cCwgdW4sIHZwLCB2biwgc2NyYXRjaCk7CisJICBlbHNlCisJICAgIG1wbl90b29tNDJfbXVsICh3cywgdXAsIHVuLCB2cCwgdm4sIHNjcmF0Y2gpOworCisJICBjeSA9IG1wbl9hZGRfbiAocHJvZHAsIHByb2RwLCB3cywgdm4pOworCSAgTVBOX0NPUFkgKHByb2RwICsgdm4sIHdzICsgdm4sIHVuKTsKKwkgIG1wbl9pbmNyX3UgKHByb2RwICsgdm4sIGN5KTsKKwl9CisgICAgICBlbHNlCisJeworCSAgaWYgKDQgKiB1biA8IDUgKiB2bikKKwkgICAgbXBuX3Rvb20yMl9tdWwgKHByb2RwLCB1cCwgdW4sIHZwLCB2biwgc2NyYXRjaCk7CisJICBlbHNlIGlmICg0ICogdW4gPCA3ICogdm4pCisJICAgIG1wbl90b29tMzJfbXVsIChwcm9kcCwgdXAsIHVuLCB2cCwgdm4sIHNjcmF0Y2gpOworCSAgZWxzZQorCSAgICBtcG5fdG9vbTQyX211bCAocHJvZHAsIHVwLCB1biwgdnAsIHZuLCBzY3JhdGNoKTsKKwl9CisgICAgICBUTVBfU0ZSRUU7CisgICAgfQorICBlbHNlIGlmIChCRUxPV19USFJFU0hPTEQgKCh1biArIHZuKSA+PiAxLCBNVUxfRkZUX1RIUkVTSE9MRCkgfHwKKwkgICBCRUxPV19USFJFU0hPTEQgKDMgKiB2biwgTVVMX0ZGVF9USFJFU0hPTEQpKQorICAgIHsKKyAgICAgIC8qIEhhbmRsZSB0aGUgbGFyZ2VzdCBvcGVyYW5kcyB0aGF0IGFyZSBub3QgaW4gdGhlIEZGVCByYW5nZS4gIFRoZSAybmQKKwkgY29uZGl0aW9uIG1ha2VzIHZlcnkgdW5iYWxhbmNlZCBvcGVyYW5kcyBhdm9pZCB0aGUgRkZUIGNvZGUgKGV4Y2VwdAorCSBwZXJoYXBzIGFzIGNvZWZmaWNpZW50IHByb2R1Y3RzIG9mIHRoZSBUb29tIGNvZGUuICAqLworCisgICAgICBpZiAoQkVMT1dfVEhSRVNIT0xEICh2biwgTVVMX1RPT000NF9USFJFU0hPTEQpIHx8ICFUT09NNDRfT0sgKHVuLCB2bikpCisJeworCSAgLyogVXNlIFRvb21YMyB2YXJpYW50cyAqLworCSAgbXBfcHRyIHNjcmF0Y2g7CisJICBUTVBfREVDTDsgVE1QX01BUks7CisKKyNkZWZpbmUgSVRDSF9UT09NWDMgKDQgKiB2biArIEdNUF9OVU1CX0JJVFMpCisJICBzY3JhdGNoID0gVE1QX0FMTE9DX0xJTUJTIChJVENIX1RPT01YMyk7CisJICBBU1NFUlQgKG1wbl90b29tMzNfbXVsX2l0Y2ggKCg3KnZuLTEpLzYsIHZuKSA8PSBJVENIX1RPT01YMyk7IC8qIDd2bi8yKyAqLworCSAgQVNTRVJUIChtcG5fdG9vbTQzX211bF9pdGNoICgoMyp2bi0xKS8yLCB2bikgPD0gSVRDSF9UT09NWDMpOyAvKiA5dm4vNCsgKi8KKwkgIEFTU0VSVCAobXBuX3Rvb20zMl9tdWxfaXRjaCAoKDcqdm4tMSkvNCwgdm4pIDw9IElUQ0hfVE9PTVgzKTsgLyogN3ZuLzYrICovCisJICBBU1NFUlQgKG1wbl90b29tNTNfbXVsX2l0Y2ggKCgxMSp2bi0xKS82LCB2bikgPD0gSVRDSF9UT09NWDMpOyAvKiAxMXZuLzMrICovCisJICBBU1NFUlQgKG1wbl90b29tNDJfbXVsX2l0Y2ggKCg1KnZuLTEpLzIsIHZuKSA8PSBJVENIX1RPT01YMyk7IC8qIDE1dm4vNCsgKi8KKwkgIEFTU0VSVCAobXBuX3Rvb202M19tdWxfaXRjaCAoKDUqdm4tMSkvMiwgdm4pIDw9IElUQ0hfVE9PTVgzKTsgLyogMTV2bi80KyAqLworI3VuZGVmIElUQ0hfVE9PTVgzCisKKwkgIGlmICgyICogdW4gPj0gNSAqIHZuKQorCSAgICB7CisJICAgICAgbXBfbGltYl90IGN5OworCSAgICAgIG1wX3B0ciB3czsKKworCSAgICAgIC8qIFRoZSBtYXhpbXVtIHdzIHVzYWdlIGlzIGZvciB0aGUgbXBuX211bCByZXN1bHQuICAqLworCSAgICAgIHdzID0gVE1QX0FMTE9DX0xJTUJTICg3ICogdm4gPj4gMSk7CisKKwkgICAgICBpZiAoQkVMT1dfVEhSRVNIT0xEICh2biwgTVVMX1RPT000Ml9UT19UT09NNjNfVEhSRVNIT0xEKSkKKwkJbXBuX3Rvb200Ml9tdWwgKHByb2RwLCB1cCwgMiAqIHZuLCB2cCwgdm4sIHNjcmF0Y2gpOworCSAgICAgIGVsc2UKKwkJbXBuX3Rvb202M19tdWwgKHByb2RwLCB1cCwgMiAqIHZuLCB2cCwgdm4sIHNjcmF0Y2gpOworCSAgICAgIHVuIC09IDIgKiB2bjsKKwkgICAgICB1cCArPSAyICogdm47CisJICAgICAgcHJvZHAgKz0gMiAqIHZuOworCisJICAgICAgd2hpbGUgKDIgKiB1biA+PSA1ICogdm4pCS8qIHVuID49IDIuNXZuICovCisJCXsKKwkJICBpZiAoQkVMT1dfVEhSRVNIT0xEICh2biwgTVVMX1RPT000Ml9UT19UT09NNjNfVEhSRVNIT0xEKSkKKwkJICAgIG1wbl90b29tNDJfbXVsICh3cywgdXAsIDIgKiB2biwgdnAsIHZuLCBzY3JhdGNoKTsKKwkJICBlbHNlCisJCSAgICBtcG5fdG9vbTYzX211bCAod3MsIHVwLCAyICogdm4sIHZwLCB2biwgc2NyYXRjaCk7CisJCSAgdW4gLT0gMiAqIHZuOworCQkgIHVwICs9IDIgKiB2bjsKKwkJICBjeSA9IG1wbl9hZGRfbiAocHJvZHAsIHByb2RwLCB3cywgdm4pOworCQkgIE1QTl9DT1BZIChwcm9kcCArIHZuLCB3cyArIHZuLCAyICogdm4pOworCQkgIG1wbl9pbmNyX3UgKHByb2RwICsgdm4sIGN5KTsKKwkJICBwcm9kcCArPSAyICogdm47CisJCX0KKworCSAgICAgIC8qIHZuIC8gMiA8PSB1biA8IDIuNXZuICovCisKKwkgICAgICBpZiAodW4gPCB2bikKKwkJbXBuX211bCAod3MsIHZwLCB2biwgdXAsIHVuKTsKKwkgICAgICBlbHNlCisJCW1wbl9tdWwgKHdzLCB1cCwgdW4sIHZwLCB2bik7CisKKwkgICAgICBjeSA9IG1wbl9hZGRfbiAocHJvZHAsIHByb2RwLCB3cywgdm4pOworCSAgICAgIE1QTl9DT1BZIChwcm9kcCArIHZuLCB3cyArIHZuLCB1bik7CisJICAgICAgbXBuX2luY3JfdSAocHJvZHAgKyB2biwgY3kpOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBpZiAoNiAqIHVuIDwgNyAqIHZuKQorCQltcG5fdG9vbTMzX211bCAocHJvZHAsIHVwLCB1biwgdnAsIHZuLCBzY3JhdGNoKTsKKwkgICAgICBlbHNlIGlmICgyICogdW4gPCAzICogdm4pCisJCXsKKwkJICBpZiAoQkVMT1dfVEhSRVNIT0xEICh2biwgTVVMX1RPT00zMl9UT19UT09NNDNfVEhSRVNIT0xEKSkKKwkJICAgIG1wbl90b29tMzJfbXVsIChwcm9kcCwgdXAsIHVuLCB2cCwgdm4sIHNjcmF0Y2gpOworCQkgIGVsc2UKKwkJICAgIG1wbl90b29tNDNfbXVsIChwcm9kcCwgdXAsIHVuLCB2cCwgdm4sIHNjcmF0Y2gpOworCQl9CisJICAgICAgZWxzZSBpZiAoNiAqIHVuIDwgMTEgKiB2bikKKwkJeworCQkgIGlmICg0ICogdW4gPCA3ICogdm4pCisJCSAgICB7CisJCSAgICAgIGlmIChCRUxPV19USFJFU0hPTEQgKHZuLCBNVUxfVE9PTTMyX1RPX1RPT001M19USFJFU0hPTEQpKQorCQkJbXBuX3Rvb20zMl9tdWwgKHByb2RwLCB1cCwgdW4sIHZwLCB2biwgc2NyYXRjaCk7CisJCSAgICAgIGVsc2UKKwkJCW1wbl90b29tNTNfbXVsIChwcm9kcCwgdXAsIHVuLCB2cCwgdm4sIHNjcmF0Y2gpOworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgaWYgKEJFTE9XX1RIUkVTSE9MRCAodm4sIE1VTF9UT09NNDJfVE9fVE9PTTUzX1RIUkVTSE9MRCkpCisJCQltcG5fdG9vbTQyX211bCAocHJvZHAsIHVwLCB1biwgdnAsIHZuLCBzY3JhdGNoKTsKKwkJICAgICAgZWxzZQorCQkJbXBuX3Rvb201M19tdWwgKHByb2RwLCB1cCwgdW4sIHZwLCB2biwgc2NyYXRjaCk7CisJCSAgICB9CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICBpZiAoQkVMT1dfVEhSRVNIT0xEICh2biwgTVVMX1RPT000Ml9UT19UT09NNjNfVEhSRVNIT0xEKSkKKwkJICAgIG1wbl90b29tNDJfbXVsIChwcm9kcCwgdXAsIHVuLCB2cCwgdm4sIHNjcmF0Y2gpOworCQkgIGVsc2UKKwkJICAgIG1wbl90b29tNjNfbXVsIChwcm9kcCwgdXAsIHVuLCB2cCwgdm4sIHNjcmF0Y2gpOworCQl9CisJICAgIH0KKwkgIFRNUF9GUkVFOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBtcF9wdHIgc2NyYXRjaDsKKwkgIFRNUF9ERUNMOyBUTVBfTUFSSzsKKworCSAgaWYgKEJFTE9XX1RIUkVTSE9MRCAodm4sIE1VTF9UT09NNkhfVEhSRVNIT0xEKSkKKwkgICAgeworCSAgICAgIHNjcmF0Y2ggPSBUTVBfU0FMTE9DX0xJTUJTIChtcG5fdG9vbTQ0X211bF9pdGNoICh1biwgdm4pKTsKKwkgICAgICBtcG5fdG9vbTQ0X211bCAocHJvZHAsIHVwLCB1biwgdnAsIHZuLCBzY3JhdGNoKTsKKwkgICAgfQorCSAgZWxzZSBpZiAoQkVMT1dfVEhSRVNIT0xEICh2biwgTVVMX1RPT004SF9USFJFU0hPTEQpKQorCSAgICB7CisJICAgICAgc2NyYXRjaCA9IFRNUF9TQUxMT0NfTElNQlMgKG1wbl90b29tNmhfbXVsX2l0Y2ggKHVuLCB2bikpOworCSAgICAgIG1wbl90b29tNmhfbXVsIChwcm9kcCwgdXAsIHVuLCB2cCwgdm4sIHNjcmF0Y2gpOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBzY3JhdGNoID0gVE1QX0FMTE9DX0xJTUJTIChtcG5fdG9vbThoX211bF9pdGNoICh1biwgdm4pKTsKKwkgICAgICBtcG5fdG9vbThoX211bCAocHJvZHAsIHVwLCB1biwgdnAsIHZuLCBzY3JhdGNoKTsKKwkgICAgfQorCSAgVE1QX0ZSRUU7CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmICh1biA+PSA4ICogdm4pCisJeworCSAgbXBfbGltYl90IGN5OworCSAgbXBfcHRyIHdzOworCSAgVE1QX0RFQ0w7IFRNUF9NQVJLOworCisJICAvKiBUaGUgbWF4aW11bSB3cyB1c2FnZSBpcyBmb3IgdGhlIG1wbl9tdWwgcmVzdWx0LiAgKi8KKwkgIHdzID0gVE1QX0JBTExPQ19MSU1CUyAoOSAqIHZuID4+IDEpOworCisJICBtcG5fZmZ0X211bCAocHJvZHAsIHVwLCAzICogdm4sIHZwLCB2bik7CisJICB1biAtPSAzICogdm47CisJICB1cCArPSAzICogdm47CisJICBwcm9kcCArPSAzICogdm47CisKKwkgIHdoaWxlICgyICogdW4gPj0gNyAqIHZuKQkvKiB1biA+PSAzLjV2biAgKi8KKwkgICAgeworCSAgICAgIG1wbl9mZnRfbXVsICh3cywgdXAsIDMgKiB2biwgdnAsIHZuKTsKKwkgICAgICB1biAtPSAzICogdm47CisJICAgICAgdXAgKz0gMyAqIHZuOworCSAgICAgIGN5ID0gbXBuX2FkZF9uIChwcm9kcCwgcHJvZHAsIHdzLCB2bik7CisJICAgICAgTVBOX0NPUFkgKHByb2RwICsgdm4sIHdzICsgdm4sIDMgKiB2bik7CisJICAgICAgbXBuX2luY3JfdSAocHJvZHAgKyB2biwgY3kpOworCSAgICAgIHByb2RwICs9IDMgKiB2bjsKKwkgICAgfQorCisJICAvKiB2biAvIDIgPD0gdW4gPCAzLjV2biAqLworCisJICBpZiAodW4gPCB2bikKKwkgICAgbXBuX211bCAod3MsIHZwLCB2biwgdXAsIHVuKTsKKwkgIGVsc2UKKwkgICAgbXBuX211bCAod3MsIHVwLCB1biwgdnAsIHZuKTsKKworCSAgY3kgPSBtcG5fYWRkX24gKHByb2RwLCBwcm9kcCwgd3MsIHZuKTsKKwkgIE1QTl9DT1BZIChwcm9kcCArIHZuLCB3cyArIHZuLCB1bik7CisJICBtcG5faW5jcl91IChwcm9kcCArIHZuLCBjeSk7CisKKwkgIFRNUF9GUkVFOworCX0KKyAgICAgIGVsc2UKKwltcG5fZmZ0X211bCAocHJvZHAsIHVwLCB1biwgdnAsIHZuKTsKKyAgICB9CisKKyAgcmV0dXJuIHByb2RwW3VuICsgdm4gLSAxXTsJLyogaGlzdG9yaWMgKi8KK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9tdWxfMS5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL211bF8xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJkNDZkYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9tdWxfMS5jCkBAIC0wLDAgKzEsOTYgQEAKKy8qIG1wbl9tdWxfMSAtLSBNdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYSBzaW5nbGUgbGltYiBhbmQgc3RvcmUgdGhlCisgICBwcm9kdWN0IGluIGEgc2Vjb25kIGxpbWIgdmVjdG9yLgorCitDb3B5cmlnaHQgMTk5MS0xOTk0LCAxOTk2LCAyMDAwLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorI2luY2x1ZGUgImxvbmdsb25nLmgiCisKKworI2lmIEdNUF9OQUlMX0JJVFMgPT0gMAorCittcF9saW1iX3QKK21wbl9tdWxfMSAobXBfcHRyIHJwLCBtcF9zcmNwdHIgdXAsIG1wX3NpemVfdCBuLCBtcF9saW1iX3QgdmwpCit7CisgIG1wX2xpbWJfdCB1bCwgY2wsIGhwbCwgbHBsOworCisgIEFTU0VSVCAobiA+PSAxKTsKKyAgQVNTRVJUIChNUE5fU0FNRV9PUl9JTkNSX1AgKHJwLCB1cCwgbikpOworCisgIGNsID0gMDsKKyAgZG8KKyAgICB7CisgICAgICB1bCA9ICp1cCsrOworICAgICAgdW11bF9wcG1tIChocGwsIGxwbCwgdWwsIHZsKTsKKworICAgICAgbHBsICs9IGNsOworICAgICAgY2wgPSAobHBsIDwgY2wpICsgaHBsOworCisgICAgICAqcnArKyA9IGxwbDsKKyAgICB9CisgIHdoaWxlICgtLW4gIT0gMCk7CisKKyAgcmV0dXJuIGNsOworfQorCisjZW5kaWYKKworI2lmIEdNUF9OQUlMX0JJVFMgPj0gMQorCittcF9saW1iX3QKK21wbl9tdWxfMSAobXBfcHRyIHJwLCBtcF9zcmNwdHIgdXAsIG1wX3NpemVfdCBuLCBtcF9saW1iX3QgdmwpCit7CisgIG1wX2xpbWJfdCBzaGlmdGVkX3ZsLCB1bCwgbHBsLCBocGwsIHByZXZfaHBsLCB4dywgY2wsIHhsOworCisgIEFTU0VSVCAobiA+PSAxKTsKKyAgQVNTRVJUIChNUE5fU0FNRV9PUl9JTkNSX1AgKHJwLCB1cCwgbikpOworICBBU1NFUlRfTVBOICh1cCwgbik7CisgIEFTU0VSVF9MSU1CICh2bCk7CisKKyAgc2hpZnRlZF92bCA9IHZsIDw8IEdNUF9OQUlMX0JJVFM7CisgIGNsID0gMDsKKyAgcHJldl9ocGwgPSAwOworICBkbworICAgIHsKKyAgICAgIHVsID0gKnVwKys7CisKKyAgICAgIHVtdWxfcHBtbSAoaHBsLCBscGwsIHVsLCBzaGlmdGVkX3ZsKTsKKyAgICAgIGxwbCA+Pj0gR01QX05BSUxfQklUUzsKKyAgICAgIHh3ID0gcHJldl9ocGwgKyBscGwgKyBjbDsKKyAgICAgIGNsID0geHcgPj4gR01QX05VTUJfQklUUzsKKyAgICAgIHhsID0geHcgJiBHTVBfTlVNQl9NQVNLOworICAgICAgKnJwKysgPSB4bDsKKyAgICAgIHByZXZfaHBsID0gaHBsOworICAgIH0KKyAgd2hpbGUgKC0tbiAhPSAwKTsKKworICByZXR1cm4gcHJldl9ocGwgKyBjbDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvbXVsX2Jhc2VjYXNlLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvbXVsX2Jhc2VjYXNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ4N2ZiYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9tdWxfYmFzZWNhc2UuYwpAQCAtMCwwICsxLDE2NSBAQAorLyogbXBuX211bF9iYXNlY2FzZSAtLSBJbnRlcm5hbCByb3V0aW5lIHRvIG11bHRpcGx5IHR3byBuYXR1cmFsIG51bWJlcnMKKyAgIG9mIGxlbmd0aCBtIGFuZCBuLgorCisgICBUSElTIElTIEFOIElOVEVSTkFMIEZVTkNUSU9OIFdJVEggQSBNVVRBQkxFIElOVEVSRkFDRS4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggVEhJUyBGVU5DVElPTiBUSFJPVUdIIERPQ1VNRU5URUQgSU5URVJGQUNFUy4KKworQ29weXJpZ2h0IDE5OTEtMTk5NCwgMTk5NiwgMTk5NywgMjAwMC0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworCisvKiBNdWx0aXBseSB7dXAsdXNpemV9IGJ5IHt2cCx2c2l6ZX0gYW5kIHdyaXRlIHRoZSByZXN1bHQgdG8KKyAgIHtwcm9kcCx1c2l6ZSt2c2l6ZX0uICBNdXN0IGhhdmUgdXNpemU+PXZzaXplLgorCisgICBOb3RlIHRoYXQgcHJvZHAgZ2V0cyB1c2l6ZSt2c2l6ZSBsaW1icyBzdG9yZWQsIGV2ZW4gaWYgdGhlIGFjdHVhbCByZXN1bHQKKyAgIG9ubHkgbmVlZHMgdXNpemUrdnNpemUtMS4KKworICAgVGhlcmUncyBubyBnb29kIHJlYXNvbiB0byBjYWxsIGhlcmUgd2l0aCB2c2l6ZT49TVVMX1RPT00yMl9USFJFU0hPTEQuCisgICBDdXJyZW50bHkgdGhpcyBpcyBhbGxvd2VkLCBidXQgaXQgbWlnaHQgbm90IGJlIGluIHRoZSBmdXR1cmUuCisKKyAgIFRoaXMgaXMgdGhlIG1vc3QgY3JpdGljYWwgY29kZSBmb3IgbXVsdGlwbGljYXRpb24uICBBbGwgbXVsdGlwbGllcyByZWx5CisgICBvbiB0aGlzLCBib3RoIHNtYWxsIGFuZCBodWdlLiAgU21hbGwgb25lcyBhcnJpdmUgaGVyZSBpbW1lZGlhdGVseSwgaHVnZQorICAgb25lcyBhcnJpdmUgaGVyZSBhcyB0aGlzIGlzIHRoZSBiYXNlIGNhc2UgZm9yIEthcmF0c3ViYSdzIHJlY3Vyc2l2ZQorICAgYWxnb3JpdGhtLiAgKi8KKwordm9pZAorbXBuX211bF9iYXNlY2FzZSAobXBfcHRyIHJwLAorCQkgIG1wX3NyY3B0ciB1cCwgbXBfc2l6ZV90IHVuLAorCQkgIG1wX3NyY3B0ciB2cCwgbXBfc2l6ZV90IHZuKQoreworICBBU1NFUlQgKHVuID49IHZuKTsKKyAgQVNTRVJUICh2biA+PSAxKTsKKyAgQVNTRVJUICghIE1QTl9PVkVSTEFQX1AgKHJwLCB1bit2biwgdXAsIHVuKSk7CisgIEFTU0VSVCAoISBNUE5fT1ZFUkxBUF9QIChycCwgdW4rdm4sIHZwLCB2bikpOworCisgIC8qIFdlIGZpcnN0IG11bHRpcGx5IGJ5IHRoZSBsb3cgb3JkZXIgbGltYiAob3IgZGVwZW5kaW5nIG9uIG9wdGlvbmFsIGZ1bmN0aW9uCisgICAgIGF2YWlsYWJpbGl0eSwgbGltYnMpLiAgVGhpcyByZXN1bHQgY2FuIGJlIHN0b3JlZCwgbm90IGFkZGVkLCB0byBycC4gIFdlCisgICAgIGFsc28gYXZvaWQgYSBsb29wIGZvciB6ZXJvaW5nIHRoaXMgd2F5LiAgKi8KKworI2lmIEhBVkVfTkFUSVZFX21wbl9tdWxfMgorICBpZiAodm4gPj0gMikKKyAgICB7CisgICAgICBycFt1biArIDFdID0gbXBuX211bF8yIChycCwgdXAsIHVuLCB2cCk7CisgICAgICBycCArPSAyLCB2cCArPSAyLCB2biAtPSAyOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHJwW3VuXSA9IG1wbl9tdWxfMSAocnAsIHVwLCB1biwgdnBbMF0pOworICAgICAgcmV0dXJuOworICAgIH0KKyNlbHNlCisgIHJwW3VuXSA9IG1wbl9tdWxfMSAocnAsIHVwLCB1biwgdnBbMF0pOworICBycCArPSAxLCB2cCArPSAxLCB2biAtPSAxOworI2VuZGlmCisKKyAgLyogTm93IGFjY3VtdWxhdGUgdGhlIHByb2R1Y3Qgb2YgdXBbXSBhbmQgdGhlIG5leHQgaGlnaGVyIGxpbWIgKG9yIGRlcGVuZGluZworICAgICBvbiBvcHRpb25hbCBmdW5jdGlvbiBhdmFpbGFiaWxpdHksIGxpbWJzKSBmcm9tIHZwW10uICAqLworCisjZGVmaW5lIE1BWF9MRUZUIE1QX1NJWkVfVF9NQVgJLyogVXNlZCB0byBzaW1wbGlmeSBsb29wcyBpbnRvIGlmIHN0YXRlbWVudHMgKi8KKworCisjaWYgSEFWRV9OQVRJVkVfbXBuX2FkZG11bF82CisgIHdoaWxlICh2biA+PSA2KQorICAgIHsKKyAgICAgIHJwW3VuICsgNiAtIDFdID0gbXBuX2FkZG11bF82IChycCwgdXAsIHVuLCB2cCk7CisgICAgICBpZiAoTUFYX0xFRlQgPT0gNikKKwlyZXR1cm47CisgICAgICBycCArPSA2LCB2cCArPSA2LCB2biAtPSA2OworICAgICAgaWYgKE1BWF9MRUZUIDwgMiAqIDYpCisJYnJlYWs7CisgICAgfQorI3VuZGVmIE1BWF9MRUZUCisjZGVmaW5lIE1BWF9MRUZUICg2IC0gMSkKKyNlbmRpZgorCisjaWYgSEFWRV9OQVRJVkVfbXBuX2FkZG11bF81CisgIHdoaWxlICh2biA+PSA1KQorICAgIHsKKyAgICAgIHJwW3VuICsgNSAtIDFdID0gbXBuX2FkZG11bF81IChycCwgdXAsIHVuLCB2cCk7CisgICAgICBpZiAoTUFYX0xFRlQgPT0gNSkKKwlyZXR1cm47CisgICAgICBycCArPSA1LCB2cCArPSA1LCB2biAtPSA1OworICAgICAgaWYgKE1BWF9MRUZUIDwgMiAqIDUpCisJYnJlYWs7CisgICAgfQorI3VuZGVmIE1BWF9MRUZUCisjZGVmaW5lIE1BWF9MRUZUICg1IC0gMSkKKyNlbmRpZgorCisjaWYgSEFWRV9OQVRJVkVfbXBuX2FkZG11bF80CisgIHdoaWxlICh2biA+PSA0KQorICAgIHsKKyAgICAgIHJwW3VuICsgNCAtIDFdID0gbXBuX2FkZG11bF80IChycCwgdXAsIHVuLCB2cCk7CisgICAgICBpZiAoTUFYX0xFRlQgPT0gNCkKKwlyZXR1cm47CisgICAgICBycCArPSA0LCB2cCArPSA0LCB2biAtPSA0OworICAgICAgaWYgKE1BWF9MRUZUIDwgMiAqIDQpCisJYnJlYWs7CisgICAgfQorI3VuZGVmIE1BWF9MRUZUCisjZGVmaW5lIE1BWF9MRUZUICg0IC0gMSkKKyNlbmRpZgorCisjaWYgSEFWRV9OQVRJVkVfbXBuX2FkZG11bF8zCisgIHdoaWxlICh2biA+PSAzKQorICAgIHsKKyAgICAgIHJwW3VuICsgMyAtIDFdID0gbXBuX2FkZG11bF8zIChycCwgdXAsIHVuLCB2cCk7CisgICAgICBpZiAoTUFYX0xFRlQgPT0gMykKKwlyZXR1cm47CisgICAgICBycCArPSAzLCB2cCArPSAzLCB2biAtPSAzOworICAgICAgaWYgKE1BWF9MRUZUIDwgMiAqIDMpCisJYnJlYWs7CisgICAgfQorI3VuZGVmIE1BWF9MRUZUCisjZGVmaW5lIE1BWF9MRUZUICgzIC0gMSkKKyNlbmRpZgorCisjaWYgSEFWRV9OQVRJVkVfbXBuX2FkZG11bF8yCisgIHdoaWxlICh2biA+PSAyKQorICAgIHsKKyAgICAgIHJwW3VuICsgMiAtIDFdID0gbXBuX2FkZG11bF8yIChycCwgdXAsIHVuLCB2cCk7CisgICAgICBpZiAoTUFYX0xFRlQgPT0gMikKKwlyZXR1cm47CisgICAgICBycCArPSAyLCB2cCArPSAyLCB2biAtPSAyOworICAgICAgaWYgKE1BWF9MRUZUIDwgMiAqIDIpCisJYnJlYWs7CisgICAgfQorI3VuZGVmIE1BWF9MRUZUCisjZGVmaW5lIE1BWF9MRUZUICgyIC0gMSkKKyNlbmRpZgorCisgIHdoaWxlICh2biA+PSAxKQorICAgIHsKKyAgICAgIHJwW3VuXSA9IG1wbl9hZGRtdWxfMSAocnAsIHVwLCB1biwgdnBbMF0pOworICAgICAgaWYgKE1BWF9MRUZUID09IDEpCisJcmV0dXJuOworICAgICAgcnAgKz0gMSwgdnAgKz0gMSwgdm4gLT0gMTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvbXVsX2ZmdC5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL211bF9mZnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjhlZTYzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL211bF9mZnQuYwpAQCAtMCwwICsxLDEwNDEgQEAKKy8qIFNjaG9lbmhhZ2UncyBmYXN0IG11bHRpcGxpY2F0aW9uIG1vZHVsbyAyXk4rMS4KKworICAgQ29udHJpYnV0ZWQgYnkgUGF1bCBaaW1tZXJtYW5uLgorCisgICBUSEUgRlVOQ1RJT05TIElOIFRISVMgRklMRSBBUkUgSU5URVJOQUwgV0lUSCBNVVRBQkxFIElOVEVSRkFDRVMuICBJVCBJUyBPTkxZCisgICBTQUZFIFRPIFJFQUNIIFRIRU0gVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuICBJTiBGQUNULCBJVCBJUyBBTE1PU1QKKyAgIEdVQVJBTlRFRUQgVEhBVCBUSEVZIFdJTEwgQ0hBTkdFIE9SIERJU0FQUEVBUiBJTiBBIEZVVFVSRSBHTlUgTVAgUkVMRUFTRS4KKworQ29weXJpZ2h0IDE5OTgtMjAxMCwgMjAxMiwgMjAxMywgMjAxOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworCisvKiBSZWZlcmVuY2VzOgorCisgICBTY2huZWxsZSBNdWx0aXBsaWthdGlvbiBncm9zc2VyIFphaGxlbiwgYnkgQXJub2xkIFNjaG9lbmhhZ2UgYW5kIFZvbGtlcgorICAgU3RyYXNzZW4sIENvbXB1dGluZyA3LCBwLiAyODEtMjkyLCAxOTcxLgorCisgICBBc3ltcHRvdGljYWxseSBmYXN0IGFsZ29yaXRobXMgZm9yIHRoZSBudW1lcmljYWwgbXVsdGlwbGljYXRpb24gYW5kIGRpdmlzaW9uCisgICBvZiBwb2x5bm9taWFscyB3aXRoIGNvbXBsZXggY29lZmZpY2llbnRzLCBieSBBcm5vbGQgU2Nob2VuaGFnZSwgQ29tcHV0ZXIKKyAgIEFsZ2VicmEsIEVVUk9DQU0nODIsIExOQ1MgMTQ0LCBwLiAzLTE1LCAxOTgyLgorCisgICBUYXBlcyB2ZXJzdXMgUG9pbnRlcnMsIGEgc3R1ZHkgaW4gaW1wbGVtZW50aW5nIGZhc3QgYWxnb3JpdGhtcywgYnkgQXJub2xkCisgICBTY2hvZW5oYWdlLCBCdWxsZXRpbiBvZiB0aGUgRUFUQ1MsIDMwLCBwLiAyMy0zMiwgMTk4Ni4KKworICAgVE9ETzoKKworICAgSW1wbGVtZW50IHNvbWUgb2YgdGhlIHRyaWNrcyBwdWJsaXNoZWQgYXQgSVNTQUMnMjAwNyBieSBHYXVkcnksIEtydXBwYSwgYW5kCisgICBaaW1tZXJtYW5uLgorCisgICBJdCBtaWdodCBiZSBwb3NzaWJsZSB0byBhdm9pZCBhIHNtYWxsIG51bWJlciBvZiBNUE5fQ09QWXMgYnkgdXNpbmcgYQorICAgcm90YXRpbmcgdGVtcG9yYXJ5IG9yIHR3by4KKworICAgQ2xlYW51cCBhbmQgc2ltcGxpZnkgdGhlIGNvZGUhCisqLworCisjaWZkZWYgVFJBQ0UKKyN1bmRlZiBUUkFDRQorI2RlZmluZSBUUkFDRSh4KSB4CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNlbHNlCisjZGVmaW5lIFRSQUNFKHgpCisjZW5kaWYKKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisKKyNpZmRlZiBXQU5UX0FERFNVQgorI2luY2x1ZGUgImdlbmVyaWMvYWRkX25fc3ViX24uYyIKKyNkZWZpbmUgSEFWRV9OQVRJVkVfbXBuX2FkZF9uX3N1Yl9uIDEKKyNlbmRpZgorCitzdGF0aWMgbXBfbGltYl90IG1wbl9tdWxfZmZ0X2ludGVybmFsIChtcF9wdHIsIG1wX3NpemVfdCwgaW50LCBtcF9wdHIgKiwKKwkJCQkgICAgICAgbXBfcHRyICosIG1wX3B0ciwgbXBfcHRyLCBtcF9zaXplX3QsCisJCQkJICAgICAgIG1wX3NpemVfdCwgbXBfc2l6ZV90LCBpbnQgKiosIG1wX3B0ciwgaW50KTsKK3N0YXRpYyB2b2lkIG1wbl9tdWxfZmZ0X2RlY29tcG9zZSAobXBfcHRyLCBtcF9wdHIgKiwgbXBfc2l6ZV90LCBtcF9zaXplX3QsIG1wX3NyY3B0ciwKKwkJCQkgICBtcF9zaXplX3QsIG1wX3NpemVfdCwgbXBfc2l6ZV90LCBtcF9wdHIpOworCisKKy8qIEZpbmQgdGhlIGJlc3QgayB0byB1c2UgZm9yIGEgbW9kIDJeKG0qR01QX05VTUJfQklUUykrMSBGRlQgZm9yIG0gPj0gbi4KKyAgIFdlIGhhdmUgc3FyPTAgaWYgZm9yIGEgbXVsdGlwbHksIHNxcj0xIGZvciBhIHNxdWFyZS4KKyAgIFRoZXJlIGFyZSB0aHJlZSBnZW5lcmF0aW9ucyBvZiB0aGlzIGNvZGU7IHdlIGtlZXAgdGhlIG9sZCBvbmVzIGFzIGxvbmcgYXMKKyAgIHNvbWUgZ21wLW1wYXJhbS5oIGlzIG5vdCB1cGRhdGVkLiAgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiBUVU5FX1BST0dSQU1fQlVJTEQgfHwgKGRlZmluZWQgKE1VTF9GRlRfVEFCTEUzKSAmJiBkZWZpbmVkIChTUVJfRkZUX1RBQkxFMykpCisKKyNpZm5kZWYgRkZUX1RBQkxFM19TSVpFCQkvKiBXaGVuIHR1bmluZyB0aGlzIGlzIGRlZmluZWQgaW4gZ21wLWltcGwuaCAqLworI2lmIGRlZmluZWQgKE1VTF9GRlRfVEFCTEUzX1NJWkUpICYmIGRlZmluZWQgKFNRUl9GRlRfVEFCTEUzX1NJWkUpCisjaWYgTVVMX0ZGVF9UQUJMRTNfU0laRSA+IFNRUl9GRlRfVEFCTEUzX1NJWkUKKyNkZWZpbmUgRkZUX1RBQkxFM19TSVpFIE1VTF9GRlRfVEFCTEUzX1NJWkUKKyNlbHNlCisjZGVmaW5lIEZGVF9UQUJMRTNfU0laRSBTUVJfRkZUX1RBQkxFM19TSVpFCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgRkZUX1RBQkxFM19TSVpFCisjZGVmaW5lIEZGVF9UQUJMRTNfU0laRSAyMDAKKyNlbmRpZgorCitGRlRfVEFCTEVfQVRUUlMgc3RydWN0IGZmdF90YWJsZV9uayBtcG5fZmZ0X3RhYmxlM1syXVtGRlRfVEFCTEUzX1NJWkVdID0KK3sKKyAgTVVMX0ZGVF9UQUJMRTMsCisgIFNRUl9GRlRfVEFCTEUzCit9OworCitpbnQKK21wbl9mZnRfYmVzdF9rIChtcF9zaXplX3QgbiwgaW50IHNxcikKK3sKKyAgY29uc3Qgc3RydWN0IGZmdF90YWJsZV9uayAqZmZ0X3RhYiwgKnRhYjsKKyAgbXBfc2l6ZV90IHRhYl9uLCB0aHJlczsKKyAgaW50IGxhc3RfazsKKworICBmZnRfdGFiID0gbXBuX2ZmdF90YWJsZTNbc3FyXTsKKyAgbGFzdF9rID0gZmZ0X3RhYi0+azsKKyAgZm9yICh0YWIgPSBmZnRfdGFiICsgMTsgOyB0YWIrKykKKyAgICB7CisgICAgICB0YWJfbiA9IHRhYi0+bjsKKyAgICAgIHRocmVzID0gdGFiX24gPDwgbGFzdF9rOworICAgICAgaWYgKG4gPD0gdGhyZXMpCisJYnJlYWs7CisgICAgICBsYXN0X2sgPSB0YWItPms7CisgICAgfQorICByZXR1cm4gbGFzdF9rOworfQorCisjZGVmaW5lIE1QTl9GRlRfQkVTVF9SRUFEWSAxCisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgISBkZWZpbmVkIChNUE5fRkZUX0JFU1RfUkVBRFkpCitGRlRfVEFCTEVfQVRUUlMgbXBfc2l6ZV90IG1wbl9mZnRfdGFibGVbMl1bTVBOX0ZGVF9UQUJMRV9TSVpFXSA9Cit7CisgIE1VTF9GRlRfVEFCTEUsCisgIFNRUl9GRlRfVEFCTEUKK307CisKK2ludAorbXBuX2ZmdF9iZXN0X2sgKG1wX3NpemVfdCBuLCBpbnQgc3FyKQoreworICBpbnQgaTsKKworICBmb3IgKGkgPSAwOyBtcG5fZmZ0X3RhYmxlW3Nxcl1baV0gIT0gMDsgaSsrKQorICAgIGlmIChuIDwgbXBuX2ZmdF90YWJsZVtzcXJdW2ldKQorICAgICAgcmV0dXJuIGkgKyBGRlRfRklSU1RfSzsKKworICAvKiB0cmVhdCA0Kmxhc3QgYXMgb25lIGZ1cnRoZXIgZW50cnkgKi8KKyAgaWYgKGkgPT0gMCB8fCBuIDwgNCAqIG1wbl9mZnRfdGFibGVbc3FyXVtpIC0gMV0pCisgICAgcmV0dXJuIGkgKyBGRlRfRklSU1RfSzsKKyAgZWxzZQorICAgIHJldHVybiBpICsgRkZUX0ZJUlNUX0sgKyAxOworfQorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKiBSZXR1cm5zIHNtYWxsZXN0IHBvc3NpYmxlIG51bWJlciBvZiBsaW1icyA+PSBwbCBmb3IgYSBmZnQgb2Ygc2l6ZSAyXmssCisgICBpLmUuIHNtYWxsZXN0IG11bHRpcGxlIG9mIDJeayA+PSBwbC4KKworICAgRG9uJ3QgZGVjbGFyZSBzdGF0aWM6IG5lZWRlZCBieSB0dW5ldXAuCisqLworCittcF9zaXplX3QKK21wbl9mZnRfbmV4dF9zaXplIChtcF9zaXplX3QgcGwsIGludCBrKQoreworICBwbCA9IDEgKyAoKHBsIC0gMSkgPj4gayk7IC8qIGNlaWwgKHBsLzJeaykgKi8KKyAgcmV0dXJuIHBsIDw8IGs7Cit9CisKKworLyogSW5pdGlhbGl6ZSBsW2ldW2pdIHdpdGggYml0cmV2KGopICovCitzdGF0aWMgdm9pZAorbXBuX2ZmdF9pbml0bCAoaW50ICoqbCwgaW50IGspCit7CisgIGludCBpLCBqLCBLOworICBpbnQgKmxpOworCisgIGxbMF1bMF0gPSAwOworICBmb3IgKGkgPSAxLCBLID0gMTsgaSA8PSBrOyBpKyssIEsgKj0gMikKKyAgICB7CisgICAgICBsaSA9IGxbaV07CisgICAgICBmb3IgKGogPSAwOyBqIDwgSzsgaisrKQorCXsKKwkgIGxpW2pdID0gMiAqIGxbaSAtIDFdW2pdOworCSAgbGlbSyArIGpdID0gMSArIGxpW2pdOworCX0KKyAgICB9Cit9CisKKworLyogciA8LSBhKjJeZCBtb2QgMl4obipHTVBfTlVNQl9CSVRTKSsxIHdpdGggYSA9IHthLCBuKzF9CisgICBBc3N1bWVzIGEgaXMgc2VtaS1ub3JtYWxpemVkLCBpLmUuIGFbbl0gPD0gMS4KKyAgIHIgYW5kIGEgbXVzdCBoYXZlIG4rMSBsaW1icywgYW5kIG5vdCBvdmVybGFwLgorKi8KK3N0YXRpYyB2b2lkCittcG5fZmZ0X211bF8yZXhwX21vZEYgKG1wX3B0ciByLCBtcF9zcmNwdHIgYSwgbXBfYml0Y250X3QgZCwgbXBfc2l6ZV90IG4pCit7CisgIHVuc2lnbmVkIGludCBzaDsKKyAgbXBfc2l6ZV90IG07CisgIG1wX2xpbWJfdCBjYywgcmQ7CisKKyAgc2ggPSBkICUgR01QX05VTUJfQklUUzsKKyAgbSA9IGQgLyBHTVBfTlVNQl9CSVRTOworCisgIGlmIChtID49IG4pCQkJLyogbmVnYXRlICovCisgICAgeworICAgICAgLyogclswLi5tLTFdICA8LS0gbHNoaWZ0KGFbbi1tXS4uYVtuLTFdLCBzaCkKKwkgclttLi5uLTFdICA8LS0gLWxzaGlmdChhWzBdLi5hW24tbS0xXSwgIHNoKSAqLworCisgICAgICBtIC09IG47CisgICAgICBpZiAoc2ggIT0gMCkKKwl7CisJICAvKiBubyBvdXQgc2hpZnQgYmVsb3cgc2luY2UgYVtuXSA8PSAxICovCisJICBtcG5fbHNoaWZ0IChyLCBhICsgbiAtIG0sIG0gKyAxLCBzaCk7CisJICByZCA9IHJbbV07CisJICBjYyA9IG1wbl9sc2hpZnRjIChyICsgbSwgYSwgbiAtIG0sIHNoKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgTVBOX0NPUFkgKHIsIGEgKyBuIC0gbSwgbSk7CisJICByZCA9IGFbbl07CisJICBtcG5fY29tIChyICsgbSwgYSwgbiAtIG0pOworCSAgY2MgPSAwOworCX0KKworICAgICAgLyogYWRkIGNjIHRvIHJbMF0sIGFuZCBhZGQgcmQgdG8gclttXSAqLworCisgICAgICAvKiBub3cgYWRkIDEgaW4gclttXSwgc3VidHJhY3QgMSBpbiByW25dLCBpLmUuIGFkZCAxIGluIHJbMF0gKi8KKworICAgICAgcltuXSA9IDA7CisgICAgICAvKiBjYyA8IDJec2ggPD0gMl4oR01QX05VTUJfQklUUy0xKSB0aHVzIG5vIG92ZXJmbG93IGhlcmUgKi8KKyAgICAgIGNjKys7CisgICAgICBtcG5faW5jcl91IChyLCBjYyk7CisKKyAgICAgIHJkKys7CisgICAgICAvKiByZCBtaWdodCBvdmVyZmxvdyB3aGVuIHNoPUdNUF9OVU1CX0JJVFMtMSAqLworICAgICAgY2MgPSAocmQgPT0gMCkgPyAxIDogcmQ7CisgICAgICByID0gciArIG0gKyAocmQgPT0gMCk7CisgICAgICBtcG5faW5jcl91IChyLCBjYyk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogclswLi5tLTFdICA8LS0gLWxzaGlmdChhW24tbV0uLmFbbi0xXSwgc2gpCisJIHJbbS4ubi0xXSAgPC0tIGxzaGlmdChhWzBdLi5hW24tbS0xXSwgIHNoKSAgKi8KKyAgICAgIGlmIChzaCAhPSAwKQorCXsKKwkgIC8qIG5vIG91dCBiaXRzIGJlbG93IHNpbmNlIGFbbl0gPD0gMSAqLworCSAgbXBuX2xzaGlmdGMgKHIsIGEgKyBuIC0gbSwgbSArIDEsIHNoKTsKKwkgIHJkID0gfnJbbV07CisJICAvKiB7ciwgbSsxfSA9IHthK24tbSwgbSsxfSA8PCBzaCAqLworCSAgY2MgPSBtcG5fbHNoaWZ0IChyICsgbSwgYSwgbiAtIG0sIHNoKTsgLyoge3IrbSwgbi1tfSA9IHthLCBuLW19PDxzaCAqLworCX0KKyAgICAgIGVsc2UKKwl7CisJICAvKiByW21dIGlzIG5vdCB1c2VkIGJlbG93LCBidXQgd2Ugc2F2ZSBhIHRlc3QgZm9yIG09MCAqLworCSAgbXBuX2NvbSAociwgYSArIG4gLSBtLCBtICsgMSk7CisJICByZCA9IGFbbl07CisJICBNUE5fQ09QWSAociArIG0sIGEsIG4gLSBtKTsKKwkgIGNjID0gMDsKKwl9CisKKyAgICAgIC8qIG5vdyBjb21wbGVtZW50IHtyLCBtfSwgc3VidHJhY3QgY2MgZnJvbSByWzBdLCBzdWJ0cmFjdCByZCBmcm9tIHJbbV0gKi8KKworICAgICAgLyogaWYgbT0wIHdlIGp1c3QgaGF2ZSByWzBdPWFbbl0gPDwgc2ggKi8KKyAgICAgIGlmIChtICE9IDApCisJeworCSAgLyogbm93IGFkZCAxIGluIHJbMF0sIHN1YnRyYWN0IDEgaW4gclttXSAqLworCSAgaWYgKGNjLS0gPT0gMCkgLyogdGhlbiBhZGQgMSB0byByWzBdICovCisJICAgIGNjID0gbXBuX2FkZF8xIChyLCByLCBuLCBDTlNUX0xJTUIoMSkpOworCSAgY2MgPSBtcG5fc3ViXzEgKHIsIHIsIG0sIGNjKSArIDE7CisJICAvKiBhZGQgMSB0byBjYyBpbnN0ZWFkIG9mIHJkIHNpbmNlIHJkIG1pZ2h0IG92ZXJmbG93ICovCisJfQorCisgICAgICAvKiBub3cgc3VidHJhY3QgY2MgYW5kIHJkIGZyb20gclttLi5uXSAqLworCisgICAgICByW25dID0gLW1wbl9zdWJfMSAociArIG0sIHIgKyBtLCBuIC0gbSwgY2MpOworICAgICAgcltuXSAtPSBtcG5fc3ViXzEgKHIgKyBtLCByICsgbSwgbiAtIG0sIHJkKTsKKyAgICAgIGlmIChyW25dICYgR01QX0xJTUJfSElHSEJJVCkKKwlyW25dID0gbXBuX2FkZF8xIChyLCByLCBuLCBDTlNUX0xJTUIoMSkpOworICAgIH0KK30KKworI2lmIEhBVkVfTkFUSVZFX21wbl9hZGRfbl9zdWJfbgorc3RhdGljIGlubGluZSB2b2lkCittcG5fZmZ0X2FkZF9zdWJfbW9kRiAobXBfcHRyIEEwLCBtcF9wdHIgQWksIG1wX3NyY3B0ciB0cCwgbXBfc2l6ZV90IG4pCit7CisgIG1wX2xpbWJfdCBjeWFzLCBjLCB4OworCisgIGN5YXMgPSBtcG5fYWRkX25fc3ViX24gKEEwLCBBaSwgQTAsIHRwLCBuKTsKKworICBjID0gQTBbbl0gLSB0cFtuXSAtIChjeWFzICYgMSk7CisgIHggPSAoLWMpICYgLSgoYyAmIEdNUF9MSU1CX0hJR0hCSVQpICE9IDApOworICBBaVtuXSA9IHggKyBjOworICBNUE5fSU5DUl9VIChBaSwgbiArIDEsIHgpOworCisgIGMgPSBBMFtuXSArIHRwW25dICsgKGN5YXMgPj4gMSk7CisgIHggPSAoYyAtIDEpICYgLShjICE9IDApOworICBBMFtuXSA9IGMgLSB4OworICBNUE5fREVDUl9VIChBMCwgbiArIDEsIHgpOworfQorCisjZWxzZSAvKiAhIEhBVkVfTkFUSVZFX21wbl9hZGRfbl9zdWJfbiAgKi8KKworLyogciA8LSBhK2IgbW9kIDJeKG4qR01QX05VTUJfQklUUykrMS4KKyAgIEFzc3VtZXMgYSBhbmQgYiBhcmUgc2VtaS1ub3JtYWxpemVkLgorKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorbXBuX2ZmdF9hZGRfbW9kRiAobXBfcHRyIHIsIG1wX3NyY3B0ciBhLCBtcF9zcmNwdHIgYiwgbXBfc2l6ZV90IG4pCit7CisgIG1wX2xpbWJfdCBjLCB4OworCisgIGMgPSBhW25dICsgYltuXSArIG1wbl9hZGRfbiAociwgYSwgYiwgbik7CisgIC8qIDAgPD0gYyA8PSAzICovCisKKyNpZiAxCisgIC8qIEdDQyA0LjEgb3V0c21hcnRzIG1vc3QgZXhwcmVzc2lvbnMgaGVyZSwgYW5kIGdlbmVyYXRlcyBhIDUwJSBicmFuY2guICBUaGUKKyAgICAgcmVzdWx0IGlzIHNsb3dlciBjb2RlLCBvZiBjb3Vyc2UuICBCdXQgdGhlIGZvbGxvd2luZyBvdXRzbWFydHMgR0NDLiAgKi8KKyAgeCA9IChjIC0gMSkgJiAtKGMgIT0gMCk7CisgIHJbbl0gPSBjIC0geDsKKyAgTVBOX0RFQ1JfVSAociwgbiArIDEsIHgpOworI2VuZGlmCisjaWYgMAorICBpZiAoYyA+IDEpCisgICAgeworICAgICAgcltuXSA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAvKiByW25dIC0gYyA9IDEgKi8KKyAgICAgIE1QTl9ERUNSX1UgKHIsIG4gKyAxLCBjIC0gMSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcltuXSA9IGM7CisgICAgfQorI2VuZGlmCit9CisKKy8qIHIgPC0gYS1iIG1vZCAyXihuKkdNUF9OVU1CX0JJVFMpKzEuCisgICBBc3N1bWVzIGEgYW5kIGIgYXJlIHNlbWktbm9ybWFsaXplZC4KKyovCitzdGF0aWMgaW5saW5lIHZvaWQKK21wbl9mZnRfc3ViX21vZEYgKG1wX3B0ciByLCBtcF9zcmNwdHIgYSwgbXBfc3JjcHRyIGIsIG1wX3NpemVfdCBuKQoreworICBtcF9saW1iX3QgYywgeDsKKworICBjID0gYVtuXSAtIGJbbl0gLSBtcG5fc3ViX24gKHIsIGEsIGIsIG4pOworICAvKiAtMiA8PSBjIDw9IDEgKi8KKworI2lmIDEKKyAgLyogR0NDIDQuMSBvdXRzbWFydHMgbW9zdCBleHByZXNzaW9ucyBoZXJlLCBhbmQgZ2VuZXJhdGVzIGEgNTAlIGJyYW5jaC4gIFRoZQorICAgICByZXN1bHQgaXMgc2xvd2VyIGNvZGUsIG9mIGNvdXJzZS4gIEJ1dCB0aGUgZm9sbG93aW5nIG91dHNtYXJ0cyBHQ0MuICAqLworICB4ID0gKC1jKSAmIC0oKGMgJiBHTVBfTElNQl9ISUdIQklUKSAhPSAwKTsKKyAgcltuXSA9IHggKyBjOworICBNUE5fSU5DUl9VIChyLCBuICsgMSwgeCk7CisjZW5kaWYKKyNpZiAwCisgIGlmICgoYyAmIEdNUF9MSU1CX0hJR0hCSVQpICE9IDApCisgICAgeworICAgICAgcltuXSA9IDA7CisgICAgICBNUE5fSU5DUl9VIChyLCBuICsgMSwgLWMpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHJbbl0gPSBjOworICAgIH0KKyNlbmRpZgorfQorI2VuZGlmIC8qIEhBVkVfTkFUSVZFX21wbl9hZGRfbl9zdWJfbiAqLworCisvKiBpbnB1dDogQVswXSAuLi4gQVtpbmMqKEstMSldIGFyZSByZXNpZHVlcyBtb2QgMl5OKzEgd2hlcmUKKwkgIE49bipHTVBfTlVNQl9CSVRTLCBhbmQgMl5vbWVnYSBpcyBhIHByaW1pdGl2ZSByb290IG1vZCAyXk4rMQorICAgb3V0cHV0OiBBW2luYypsW2tdW2ldXSA8LSBcc3VtICgyXm9tZWdhKV4oaWopIEFbaW5jKmpdIG1vZCAyXk4rMSAqLworCitzdGF0aWMgdm9pZAorbXBuX2ZmdF9mZnQgKG1wX3B0ciAqQXAsIG1wX3NpemVfdCBLLCBpbnQgKipsbCwKKwkgICAgIG1wX3NpemVfdCBvbWVnYSwgbXBfc2l6ZV90IG4sIG1wX3NpemVfdCBpbmMsIG1wX3B0ciB0cCkKK3sKKyAgaWYgKEsgPT0gMikKKyAgICB7CisgICAgICBtcF9saW1iX3QgY3k7CisjaWYgSEFWRV9OQVRJVkVfbXBuX2FkZF9uX3N1Yl9uCisgICAgICBjeSA9IG1wbl9hZGRfbl9zdWJfbiAoQXBbMF0sIEFwW2luY10sIEFwWzBdLCBBcFtpbmNdLCBuICsgMSkgJiAxOworI2Vsc2UKKyAgICAgIE1QTl9DT1BZICh0cCwgQXBbMF0sIG4gKyAxKTsKKyAgICAgIG1wbl9hZGRfbiAoQXBbMF0sIEFwWzBdLCBBcFtpbmNdLCBuICsgMSk7CisgICAgICBjeSA9IG1wbl9zdWJfbiAoQXBbaW5jXSwgdHAsIEFwW2luY10sIG4gKyAxKTsKKyNlbmRpZgorICAgICAgaWYgKEFwWzBdW25dID4gMSkgLyogY2FuIGJlIDIgb3IgMyAqLworCUFwWzBdW25dID0gMSAtIG1wbl9zdWJfMSAoQXBbMF0sIEFwWzBdLCBuLCBBcFswXVtuXSAtIDEpOworICAgICAgaWYgKGN5KSAvKiBBcFtpbmNdW25dIGNhbiBiZSAtMSBvciAtMiAqLworCUFwW2luY11bbl0gPSBtcG5fYWRkXzEgKEFwW2luY10sIEFwW2luY10sIG4sIH5BcFtpbmNdW25dICsgMSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgbXBfc2l6ZV90IGosIEsyID0gSyA+PiAxOworICAgICAgaW50ICpsayA9ICpsbDsKKworICAgICAgbXBuX2ZmdF9mZnQgKEFwLCAgICAgSzIsIGxsLTEsIDIgKiBvbWVnYSwgbiwgaW5jICogMiwgdHApOworICAgICAgbXBuX2ZmdF9mZnQgKEFwK2luYywgSzIsIGxsLTEsIDIgKiBvbWVnYSwgbiwgaW5jICogMiwgdHApOworICAgICAgLyogQVsyKmoqaW5jXSAgIDwtIEFbMipqKmluY10gKyBvbWVnYV5sW2tdWzIqaippbmNdIEFbKDJqKzEpaW5jXQorCSBBWygyaisxKWluY10gPC0gQVsyKmoqaW5jXSArIG9tZWdhXmxba11bKDJqKzEpaW5jXSBBWygyaisxKWluY10gKi8KKyAgICAgIGZvciAoaiA9IDA7IGogPCBLMjsgaisrLCBsayArPSAyLCBBcCArPSAyICogaW5jKQorCXsKKwkgIC8qIEFwW2luY10gPC0gQXBbMF0gKyBBcFtpbmNdICogMl4obGtbMV0gKiBvbWVnYSkKKwkgICAgIEFwWzBdICAgPC0gQXBbMF0gKyBBcFtpbmNdICogMl4obGtbMF0gKiBvbWVnYSkgKi8KKwkgIG1wbl9mZnRfbXVsXzJleHBfbW9kRiAodHAsIEFwW2luY10sIGxrWzBdICogb21lZ2EsIG4pOworI2lmIEhBVkVfTkFUSVZFX21wbl9hZGRfbl9zdWJfbgorCSAgbXBuX2ZmdF9hZGRfc3ViX21vZEYgKEFwWzBdLCBBcFtpbmNdLCB0cCwgbik7CisjZWxzZQorCSAgbXBuX2ZmdF9zdWJfbW9kRiAoQXBbaW5jXSwgQXBbMF0sIHRwLCBuKTsKKwkgIG1wbl9mZnRfYWRkX21vZEYgKEFwWzBdLCAgIEFwWzBdLCB0cCwgbik7CisjZW5kaWYKKwl9CisgICAgfQorfQorCisvKiBpbnB1dDogQVswXSAuLi4gQVtpbmMqKEstMSldIGFyZSByZXNpZHVlcyBtb2QgMl5OKzEgd2hlcmUKKwkgIE49bipHTVBfTlVNQl9CSVRTLCBhbmQgMl5vbWVnYSBpcyBhIHByaW1pdGl2ZSByb290IG1vZCAyXk4rMQorICAgb3V0cHV0OiBBW2luYypsW2tdW2ldXSA8LSBcc3VtICgyXm9tZWdhKV4oaWopIEFbaW5jKmpdIG1vZCAyXk4rMQorICAgdHAgbXVzdCBoYXZlIHNwYWNlIGZvciAyKihuKzEpIGxpbWJzLgorKi8KKworCisvKiBHaXZlbiBhcFswLi5uXSB3aXRoIGFwW25dPD0xLCByZWR1Y2UgaXQgbW9kdWxvIDJeKG4qR01QX05VTUJfQklUUykrMSwKKyAgIGJ5IHN1YnRyYWN0aW5nIHRoYXQgbW9kdWx1cyBpZiBuZWNlc3NhcnkuCisKKyAgIElmIGFwWzAuLm5dIGlzIGV4YWN0bHkgMl4obipHTVBfTlVNQl9CSVRTKSB0aGVuIG1wbl9zdWJfMSBwcm9kdWNlcyBhCisgICBib3Jyb3cgYW5kIHRoZSBsaW1icyBtdXN0IGJlIHplcm9lZCBvdXQgYWdhaW4uICBUaGlzIHdpbGwgb2NjdXIgdmVyeQorICAgaW5mcmVxdWVudGx5LiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCittcG5fZmZ0X25vcm1hbGl6ZSAobXBfcHRyIGFwLCBtcF9zaXplX3QgbikKK3sKKyAgaWYgKGFwW25dICE9IDApCisgICAgeworICAgICAgTVBOX0RFQ1JfVSAoYXAsIG4gKyAxLCBDTlNUX0xJTUIoMSkpOworICAgICAgaWYgKGFwW25dID09IDApCisJeworCSAgLyogVGhpcyBoYXBwZW5zIHdpdGggdmVyeSBsb3cgcHJvYmFiaWxpdHk7IHdlIGhhdmUgeWV0IHRvIHRyaWdnZXIgaXQsCisJICAgICBhbmQgdGhlcmVieSBtYWtlIHN1cmUgdGhpcyBjb2RlIGlzIGNvcnJlY3QuICAqLworCSAgTVBOX1pFUk8gKGFwLCBuKTsKKwkgIGFwW25dID0gMTsKKwl9CisgICAgICBlbHNlCisJYXBbbl0gPSAwOworICAgIH0KK30KKworLyogYVtpXSA8LSBhW2ldKmJbaV0gbW9kIDJeKG4qR01QX05VTUJfQklUUykrMSBmb3IgMCA8PSBpIDwgSyAqLworc3RhdGljIHZvaWQKK21wbl9mZnRfbXVsX21vZEZfSyAobXBfcHRyICphcCwgbXBfcHRyICpicCwgbXBfc2l6ZV90IG4sIG1wX3NpemVfdCBLKQoreworICBpbnQgaTsKKyAgaW50IHNxciA9IChhcCA9PSBicCk7CisgIFRNUF9ERUNMOworCisgIFRNUF9NQVJLOworCisgIGlmIChuID49IChzcXIgPyBTUVJfRkZUX01PREZfVEhSRVNIT0xEIDogTVVMX0ZGVF9NT0RGX1RIUkVTSE9MRCkpCisgICAgeworICAgICAgbXBfc2l6ZV90IEsyLCBucHJpbWUyLCBOcHJpbWUyLCBNMiwgbWF4TEssIGwsIE1wMjsKKyAgICAgIGludCBrOworICAgICAgaW50ICoqZmZ0X2wsICp0bXA7CisgICAgICBtcF9wdHIgKkFwLCAqQnAsIEEsIEIsIFQ7CisKKyAgICAgIGsgPSBtcG5fZmZ0X2Jlc3RfayAobiwgc3FyKTsKKyAgICAgIEsyID0gKG1wX3NpemVfdCkgMSA8PCBrOworICAgICAgQVNTRVJUX0FMV0FZUygobiAmIChLMiAtIDEpKSA9PSAwKTsKKyAgICAgIG1heExLID0gKEsyID4gR01QX05VTUJfQklUUykgPyBLMiA6IEdNUF9OVU1CX0JJVFM7CisgICAgICBNMiA9IG4gKiBHTVBfTlVNQl9CSVRTID4+IGs7CisgICAgICBsID0gbiA+PiBrOworICAgICAgTnByaW1lMiA9ICgoMiAqIE0yICsgayArIDIgKyBtYXhMSykgLyBtYXhMSykgKiBtYXhMSzsKKyAgICAgIC8qIE5wcmltZTIgPSBjZWlsKCgyKk0yK2srMykvbWF4TEspKm1heExLKi8KKyAgICAgIG5wcmltZTIgPSBOcHJpbWUyIC8gR01QX05VTUJfQklUUzsKKworICAgICAgLyogd2Ugc2hvdWxkIGVuc3VyZSB0aGF0IG5wcmltZTIgaXMgYSBtdWx0aXBsZSBvZiB0aGUgbmV4dCBLICovCisgICAgICBpZiAobnByaW1lMiA+PSAoc3FyID8gU1FSX0ZGVF9NT0RGX1RIUkVTSE9MRCA6IE1VTF9GRlRfTU9ERl9USFJFU0hPTEQpKQorCXsKKwkgIG1wX3NpemVfdCBLMzsKKwkgIGZvciAoOzspCisJICAgIHsKKwkgICAgICBLMyA9IChtcF9zaXplX3QpIDEgPDwgbXBuX2ZmdF9iZXN0X2sgKG5wcmltZTIsIHNxcik7CisJICAgICAgaWYgKChucHJpbWUyICYgKEszIC0gMSkpID09IDApCisJCWJyZWFrOworCSAgICAgIG5wcmltZTIgPSAobnByaW1lMiArIEszIC0gMSkgJiAtSzM7CisJICAgICAgTnByaW1lMiA9IG5wcmltZTIgKiBHTVBfTElNQl9CSVRTOworCSAgICAgIC8qIHdhcm5pbmc6IHNpbmNlIG5wcmltZTIgY2hhbmdlZCwgSzMgbWF5IGNoYW5nZSB0b28hICovCisJICAgIH0KKwl9CisgICAgICBBU1NFUlRfQUxXQVlTKG5wcmltZTIgPCBuKTsgLyogb3RoZXJ3aXNlIHdlJ2xsIGxvb3AgKi8KKworICAgICAgTXAyID0gTnByaW1lMiA+PiBrOworCisgICAgICBBcCA9IFRNUF9CQUxMT0NfTVBfUFRSUyAoSzIpOworICAgICAgQnAgPSBUTVBfQkFMTE9DX01QX1BUUlMgKEsyKTsKKyAgICAgIEEgPSBUTVBfQkFMTE9DX0xJTUJTICgyICogKG5wcmltZTIgKyAxKSA8PCBrKTsKKyAgICAgIFQgPSBUTVBfQkFMTE9DX0xJTUJTICgyICogKG5wcmltZTIgKyAxKSk7CisgICAgICBCID0gQSArICgobnByaW1lMiArIDEpIDw8IGspOworICAgICAgZmZ0X2wgPSBUTVBfQkFMTE9DX1RZUEUgKGsgKyAxLCBpbnQgKik7CisgICAgICB0bXAgPSBUTVBfQkFMTE9DX1RZUEUgKChzaXplX3QpIDIgPDwgaywgaW50KTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPD0gazsgaSsrKQorCXsKKwkgIGZmdF9sW2ldID0gdG1wOworCSAgdG1wICs9IChtcF9zaXplX3QpIDEgPDwgaTsKKwl9CisKKyAgICAgIG1wbl9mZnRfaW5pdGwgKGZmdF9sLCBrKTsKKworICAgICAgVFJBQ0UgKHByaW50ZiAoInJlY3Vyc2U6ICVsZHglbGQgbGltYnMgLT4gJWxkIHRpbWVzICVsZHglbGQgKCUxLjJmKVxuIiwgbiwKKwkJICAgIG4sIEsyLCBucHJpbWUyLCBucHJpbWUyLCAyLjAqKGRvdWJsZSluL25wcmltZTIvSzIpKTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBLOyBpKyssIGFwKyssIGJwKyspCisJeworCSAgbXBfbGltYl90IGN5OworCSAgbXBuX2ZmdF9ub3JtYWxpemUgKCphcCwgbik7CisJICBpZiAoIXNxcikKKwkgICAgbXBuX2ZmdF9ub3JtYWxpemUgKCpicCwgbik7CisKKwkgIG1wbl9tdWxfZmZ0X2RlY29tcG9zZSAoQSwgQXAsIEsyLCBucHJpbWUyLCAqYXAsIChsIDw8IGspICsgMSwgbCwgTXAyLCBUKTsKKwkgIGlmICghc3FyKQorCSAgICBtcG5fbXVsX2ZmdF9kZWNvbXBvc2UgKEIsIEJwLCBLMiwgbnByaW1lMiwgKmJwLCAobCA8PCBrKSArIDEsIGwsIE1wMiwgVCk7CisKKwkgIGN5ID0gbXBuX211bF9mZnRfaW50ZXJuYWwgKCphcCwgbiwgaywgQXAsIEJwLCBBLCBCLCBucHJpbWUyLAorCQkJCSAgICAgbCwgTXAyLCBmZnRfbCwgVCwgc3FyKTsKKwkgICgqYXApW25dID0gY3k7CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIG1wX3B0ciBhLCBiLCB0cCwgdHBuOworICAgICAgbXBfbGltYl90IGNjOworICAgICAgbXBfc2l6ZV90IG4yID0gMiAqIG47CisgICAgICB0cCA9IFRNUF9CQUxMT0NfTElNQlMgKG4yKTsKKyAgICAgIHRwbiA9IHRwICsgbjsKKyAgICAgIFRSQUNFIChwcmludGYgKCIgIG1wbl9tdWxfbiAlbGQgb2YgJWxkIGxpbWJzXG4iLCBLLCBuKSk7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgSzsgaSsrKQorCXsKKwkgIGEgPSAqYXArKzsKKwkgIGIgPSAqYnArKzsKKwkgIGlmIChzcXIpCisJICAgIG1wbl9zcXIgKHRwLCBhLCBuKTsKKwkgIGVsc2UKKwkgICAgbXBuX211bF9uICh0cCwgYiwgYSwgbik7CisJICBpZiAoYVtuXSAhPSAwKQorCSAgICBjYyA9IG1wbl9hZGRfbiAodHBuLCB0cG4sIGIsIG4pOworCSAgZWxzZQorCSAgICBjYyA9IDA7CisJICBpZiAoYltuXSAhPSAwKQorCSAgICBjYyArPSBtcG5fYWRkX24gKHRwbiwgdHBuLCBhLCBuKSArIGFbbl07CisJICBpZiAoY2MgIT0gMCkKKwkgICAgeworCSAgICAgIC8qIEZJWE1FOiB1c2UgTVBOX0lOQ1JfVSBoZXJlLCBzaW5jZSBjYXJyeSBpcyBub3QgZXhwZWN0ZWQuICAqLworCSAgICAgIGNjID0gbXBuX2FkZF8xICh0cCwgdHAsIG4yLCBjYyk7CisJICAgICAgQVNTRVJUIChjYyA9PSAwKTsKKwkgICAgfQorCSAgYVtuXSA9IG1wbl9zdWJfbiAoYSwgdHAsIHRwbiwgbikgJiYgbXBuX2FkZF8xIChhLCBhLCBuLCBDTlNUX0xJTUIoMSkpOworCX0KKyAgICB9CisgIFRNUF9GUkVFOworfQorCisKKy8qIGlucHV0OiBBXltsW2tdWzBdXSBBXltsW2tdWzFdXSAuLi4gQV5bbFtrXVtLLTFdXQorICAgb3V0cHV0OiBLKkFbMF0gSypBW0stMV0gLi4uIEsqQVsxXS4KKyAgIEFzc3VtZXMgdGhlIEFwW10gYXJlIHBzZXVkby1ub3JtYWxpemVkLCBpLmUuIDAgPD0gQXBbXVtuXSA8PSAxLgorICAgVGhpcyBjb25kaXRpb24gaXMgYWxzbyBmdWxmaWxsZWQgYXQgZXhpdC4KKyovCitzdGF0aWMgdm9pZAorbXBuX2ZmdF9mZnRpbnYgKG1wX3B0ciAqQXAsIG1wX3NpemVfdCBLLCBtcF9zaXplX3Qgb21lZ2EsIG1wX3NpemVfdCBuLCBtcF9wdHIgdHApCit7CisgIGlmIChLID09IDIpCisgICAgeworICAgICAgbXBfbGltYl90IGN5OworI2lmIEhBVkVfTkFUSVZFX21wbl9hZGRfbl9zdWJfbgorICAgICAgY3kgPSBtcG5fYWRkX25fc3ViX24gKEFwWzBdLCBBcFsxXSwgQXBbMF0sIEFwWzFdLCBuICsgMSkgJiAxOworI2Vsc2UKKyAgICAgIE1QTl9DT1BZICh0cCwgQXBbMF0sIG4gKyAxKTsKKyAgICAgIG1wbl9hZGRfbiAoQXBbMF0sIEFwWzBdLCBBcFsxXSwgbiArIDEpOworICAgICAgY3kgPSBtcG5fc3ViX24gKEFwWzFdLCB0cCwgQXBbMV0sIG4gKyAxKTsKKyNlbmRpZgorICAgICAgaWYgKEFwWzBdW25dID4gMSkgLyogY2FuIGJlIDIgb3IgMyAqLworCUFwWzBdW25dID0gMSAtIG1wbl9zdWJfMSAoQXBbMF0sIEFwWzBdLCBuLCBBcFswXVtuXSAtIDEpOworICAgICAgaWYgKGN5KSAvKiBBcFsxXVtuXSBjYW4gYmUgLTEgb3IgLTIgKi8KKwlBcFsxXVtuXSA9IG1wbl9hZGRfMSAoQXBbMV0sIEFwWzFdLCBuLCB+QXBbMV1bbl0gKyAxKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBtcF9zaXplX3QgaiwgSzIgPSBLID4+IDE7CisKKyAgICAgIG1wbl9mZnRfZmZ0aW52IChBcCwgICAgICBLMiwgMiAqIG9tZWdhLCBuLCB0cCk7CisgICAgICBtcG5fZmZ0X2ZmdGludiAoQXAgKyBLMiwgSzIsIDIgKiBvbWVnYSwgbiwgdHApOworICAgICAgLyogQVtqXSAgICAgPC0gQVtqXSArIG9tZWdhXmogQVtqK0svMl0KKwkgQVtqK0svMl0gPC0gQVtqXSArIG9tZWdhXihqK0svMikgQVtqK0svMl0gKi8KKyAgICAgIGZvciAoaiA9IDA7IGogPCBLMjsgaisrLCBBcCsrKQorCXsKKwkgIC8qIEFwW0syXSA8LSBBcFswXSArIEFwW0syXSAqIDJeKChqICsgSzIpICogb21lZ2EpCisJICAgICBBcFswXSAgPC0gQXBbMF0gKyBBcFtLMl0gKiAyXihqICogb21lZ2EpICovCisJICBtcG5fZmZ0X211bF8yZXhwX21vZEYgKHRwLCBBcFtLMl0sIGogKiBvbWVnYSwgbik7CisjaWYgSEFWRV9OQVRJVkVfbXBuX2FkZF9uX3N1Yl9uCisJICBtcG5fZmZ0X2FkZF9zdWJfbW9kRiAoQXBbMF0sIEFwW0syXSwgdHAsIG4pOworI2Vsc2UKKwkgIG1wbl9mZnRfc3ViX21vZEYgKEFwW0syXSwgQXBbMF0sIHRwLCBuKTsKKwkgIG1wbl9mZnRfYWRkX21vZEYgKEFwWzBdLCAgQXBbMF0sIHRwLCBuKTsKKyNlbmRpZgorCX0KKyAgICB9Cit9CisKKworLyogUiA8LSBBLzJeayBtb2QgMl4obipHTVBfTlVNQl9CSVRTKSsxICovCitzdGF0aWMgdm9pZAorbXBuX2ZmdF9kaXZfMmV4cF9tb2RGIChtcF9wdHIgciwgbXBfc3JjcHRyIGEsIG1wX2JpdGNudF90IGssIG1wX3NpemVfdCBuKQoreworICBtcF9iaXRjbnRfdCBpOworCisgIEFTU0VSVCAociAhPSBhKTsKKyAgaSA9IChtcF9iaXRjbnRfdCkgMiAqIG4gKiBHTVBfTlVNQl9CSVRTIC0gazsKKyAgbXBuX2ZmdF9tdWxfMmV4cF9tb2RGIChyLCBhLCBpLCBuKTsKKyAgLyogMS8yXmsgPSAyXigybkwtaykgbW9kIDJeKG4qR01QX05VTUJfQklUUykrMSAqLworICAvKiBub3JtYWxpemUgc28gdGhhdCBSIDwgMl4obipHTVBfTlVNQl9CSVRTKSsxICovCisgIG1wbl9mZnRfbm9ybWFsaXplIChyLCBuKTsKK30KKworCisvKiB7cnAsbn0gPC0ge2FwLGFufSBtb2QgMl4obipHTVBfTlVNQl9CSVRTKSsxLCBuIDw9IGFuIDw9IDMqbi4KKyAgIFJldHVybnMgY2Fycnkgb3V0LCBpLmUuIDEgaWZmIHthcCxhbn0gPSAtMSBtb2QgMl4obipHTVBfTlVNQl9CSVRTKSsxLAorICAgdGhlbiB7cnAsbn09MC4KKyovCitzdGF0aWMgbXBfc2l6ZV90CittcG5fZmZ0X25vcm1fbW9kRiAobXBfcHRyIHJwLCBtcF9zaXplX3QgbiwgbXBfcHRyIGFwLCBtcF9zaXplX3QgYW4pCit7CisgIG1wX3NpemVfdCBsLCBtLCBycG47CisgIG1wX2xpbWJfdCBjYzsKKworICBBU1NFUlQgKChuIDw9IGFuKSAmJiAoYW4gPD0gMyAqIG4pKTsKKyAgbSA9IGFuIC0gMiAqIG47CisgIGlmIChtID4gMCkKKyAgICB7CisgICAgICBsID0gbjsKKyAgICAgIC8qIGFkZCB7YXAsIG19IGFuZCB7YXArMm4sIG19IGluIHtycCwgbX0gKi8KKyAgICAgIGNjID0gbXBuX2FkZF9uIChycCwgYXAsIGFwICsgMiAqIG4sIG0pOworICAgICAgLyogY29weSB7YXArbSwgbi1tfSB0byB7cnArbSwgbi1tfSAqLworICAgICAgcnBuID0gbXBuX2FkZF8xIChycCArIG0sIGFwICsgbSwgbiAtIG0sIGNjKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBsID0gYW4gLSBuOyAvKiBsIDw9IG4gKi8KKyAgICAgIE1QTl9DT1BZIChycCwgYXAsIG4pOworICAgICAgcnBuID0gMDsKKyAgICB9CisKKyAgLyogcmVtYWlucyB0byBzdWJ0cmFjdCB7YXArbiwgbH0gZnJvbSB7cnAsIG4rMX0gKi8KKyAgY2MgPSBtcG5fc3ViX24gKHJwLCBycCwgYXAgKyBuLCBsKTsKKyAgcnBuIC09IG1wbl9zdWJfMSAocnAgKyBsLCBycCArIGwsIG4gLSBsLCBjYyk7CisgIGlmIChycG4gPCAwKSAvKiBuZWNlc3NhcmlseSBycG4gPSAtMSAqLworICAgIHJwbiA9IG1wbl9hZGRfMSAocnAsIHJwLCBuLCBDTlNUX0xJTUIoMSkpOworICByZXR1cm4gcnBuOworfQorCisvKiBzdG9yZSBpbiBBWzAuLm5wcmltZV0gdGhlIGZpcnN0IE0gYml0cyBmcm9tIHtuLCBubH0sCisgICBpbiBBW25wcmltZSsxLi5dIHRoZSBmb2xsb3dpbmcgTSBiaXRzLCAuLi4KKyAgIEFzc3VtZXMgTSBpcyBhIG11bHRpcGxlIG9mIEdNUF9OVU1CX0JJVFMgKE0gPSBsICogR01QX05VTUJfQklUUykuCisgICBUIG11c3QgaGF2ZSBzcGFjZSBmb3IgYXQgbGVhc3QgKG5wcmltZSArIDEpIGxpbWJzLgorICAgV2UgbXVzdCBoYXZlIG5sIDw9IDIqSypsLgorKi8KK3N0YXRpYyB2b2lkCittcG5fbXVsX2ZmdF9kZWNvbXBvc2UgKG1wX3B0ciBBLCBtcF9wdHIgKkFwLCBtcF9zaXplX3QgSywgbXBfc2l6ZV90IG5wcmltZSwKKwkJICAgICAgIG1wX3NyY3B0ciBuLCBtcF9zaXplX3QgbmwsIG1wX3NpemVfdCBsLCBtcF9zaXplX3QgTXAsCisJCSAgICAgICBtcF9wdHIgVCkKK3sKKyAgbXBfc2l6ZV90IGksIGo7CisgIG1wX3B0ciB0bXA7CisgIG1wX3NpemVfdCBLbCA9IEsgKiBsOworICBUTVBfREVDTDsKKyAgVE1QX01BUks7CisKKyAgaWYgKG5sID4gS2wpIC8qIG5vcm1hbGl6ZSB7biwgbmx9IG1vZCAyXihLbCpHTVBfTlVNQl9CSVRTKSsxICovCisgICAgeworICAgICAgbXBfc2l6ZV90IGRpZiA9IG5sIC0gS2w7CisgICAgICBtcF9saW1iX3NpZ25lZF90IGN5OworCisgICAgICB0bXAgPSBUTVBfQkFMTE9DX0xJTUJTKEtsICsgMSk7CisKKyAgICAgIGlmIChkaWYgPiBLbCkKKwl7CisJICBpbnQgc3VicCA9IDA7CisKKwkgIGN5ID0gbXBuX3N1Yl9uICh0bXAsIG4sIG4gKyBLbCwgS2wpOworCSAgbiArPSAyICogS2w7CisJICBkaWYgLT0gS2w7CisKKwkgIC8qIG5vdyBkaWYgPiAwICovCisJICB3aGlsZSAoZGlmID4gS2wpCisJICAgIHsKKwkgICAgICBpZiAoc3VicCkKKwkJY3kgKz0gbXBuX3N1Yl9uICh0bXAsIHRtcCwgbiwgS2wpOworCSAgICAgIGVsc2UKKwkJY3kgLT0gbXBuX2FkZF9uICh0bXAsIHRtcCwgbiwgS2wpOworCSAgICAgIHN1YnAgXj0gMTsKKwkgICAgICBuICs9IEtsOworCSAgICAgIGRpZiAtPSBLbDsKKwkgICAgfQorCSAgLyogbm93IGRpZiA8PSBLbCAqLworCSAgaWYgKHN1YnApCisJICAgIGN5ICs9IG1wbl9zdWIgKHRtcCwgdG1wLCBLbCwgbiwgZGlmKTsKKwkgIGVsc2UKKwkgICAgY3kgLT0gbXBuX2FkZCAodG1wLCB0bXAsIEtsLCBuLCBkaWYpOworCSAgaWYgKGN5ID49IDApCisJICAgIGN5ID0gbXBuX2FkZF8xICh0bXAsIHRtcCwgS2wsIGN5KTsKKwkgIGVsc2UKKwkgICAgY3kgPSBtcG5fc3ViXzEgKHRtcCwgdG1wLCBLbCwgLWN5KTsKKwl9CisgICAgICBlbHNlIC8qIGRpZiA8PSBLbCwgaS5lLiBubCA8PSAyICogS2wgKi8KKwl7CisJICBjeSA9IG1wbl9zdWIgKHRtcCwgbiwgS2wsIG4gKyBLbCwgZGlmKTsKKwkgIGN5ID0gbXBuX2FkZF8xICh0bXAsIHRtcCwgS2wsIGN5KTsKKwl9CisgICAgICB0bXBbS2xdID0gY3k7CisgICAgICBubCA9IEtsICsgMTsKKyAgICAgIG4gPSB0bXA7CisgICAgfQorICBmb3IgKGkgPSAwOyBpIDwgSzsgaSsrKQorICAgIHsKKyAgICAgIEFwW2ldID0gQTsKKyAgICAgIC8qIHN0b3JlIHRoZSBuZXh0IE0gYml0cyBvZiBuIGludG8gQVswLi5ucHJpbWVdICovCisgICAgICBpZiAobmwgPiAwKSAvKiBubCBpcyB0aGUgbnVtYmVyIG9mIHJlbWFpbmluZyBsaW1icyAqLworCXsKKwkgIGogPSAobCA8PSBubCAmJiBpIDwgSyAtIDEpID8gbCA6IG5sOyAvKiBzdG9yZSBqIG5leHQgbGltYnMgKi8KKwkgIG5sIC09IGo7CisJICBNUE5fQ09QWSAoVCwgbiwgaik7CisJICBNUE5fWkVSTyAoVCArIGosIG5wcmltZSArIDEgLSBqKTsKKwkgIG4gKz0gbDsKKwkgIG1wbl9mZnRfbXVsXzJleHBfbW9kRiAoQSwgVCwgaSAqIE1wLCBucHJpbWUpOworCX0KKyAgICAgIGVsc2UKKwlNUE5fWkVSTyAoQSwgbnByaW1lICsgMSk7CisgICAgICBBICs9IG5wcmltZSArIDE7CisgICAgfQorICBBU1NFUlRfQUxXQVlTIChubCA9PSAwKTsKKyAgVE1QX0ZSRUU7Cit9CisKKy8qIG9wIDwtIG4qbSBtb2QgMl5OKzEgd2l0aCBmZnQgb2Ygc2l6ZSAyXmsgd2hlcmUgTj1wbCpHTVBfTlVNQl9CSVRTCisgICBvcCBpcyBwbCBsaW1icywgaXRzIGhpZ2ggYml0IGlzIHJldHVybmVkLgorICAgT25lIG11c3QgaGF2ZSBwbCA9IG1wbl9mZnRfbmV4dF9zaXplIChwbCwgaykuCisgICBUIG11c3QgaGF2ZSBzcGFjZSBmb3IgMiAqIChucHJpbWUgKyAxKSBsaW1icy4KKyovCisKK3N0YXRpYyBtcF9saW1iX3QKK21wbl9tdWxfZmZ0X2ludGVybmFsIChtcF9wdHIgb3AsIG1wX3NpemVfdCBwbCwgaW50IGssCisJCSAgICAgIG1wX3B0ciAqQXAsIG1wX3B0ciAqQnAsIG1wX3B0ciBBLCBtcF9wdHIgQiwKKwkJICAgICAgbXBfc2l6ZV90IG5wcmltZSwgbXBfc2l6ZV90IGwsIG1wX3NpemVfdCBNcCwKKwkJICAgICAgaW50ICoqZmZ0X2wsIG1wX3B0ciBULCBpbnQgc3FyKQoreworICBtcF9zaXplX3QgSywgaSwgcGxhLCBsbywgc2gsIGo7CisgIG1wX3B0ciBwOworICBtcF9saW1iX3QgY2M7CisKKyAgSyA9IChtcF9zaXplX3QpIDEgPDwgazsKKworICAvKiBkaXJlY3QgZmZ0J3MgKi8KKyAgbXBuX2ZmdF9mZnQgKEFwLCBLLCBmZnRfbCArIGssIDIgKiBNcCwgbnByaW1lLCAxLCBUKTsKKyAgaWYgKCFzcXIpCisgICAgbXBuX2ZmdF9mZnQgKEJwLCBLLCBmZnRfbCArIGssIDIgKiBNcCwgbnByaW1lLCAxLCBUKTsKKworICAvKiB0ZXJtIHRvIHRlcm0gbXVsdGlwbGljYXRpb25zICovCisgIG1wbl9mZnRfbXVsX21vZEZfSyAoQXAsIHNxciA/IEFwIDogQnAsIG5wcmltZSwgSyk7CisKKyAgLyogaW52ZXJzZSBmZnQncyAqLworICBtcG5fZmZ0X2ZmdGludiAoQXAsIEssIDIgKiBNcCwgbnByaW1lLCBUKTsKKworICAvKiBkaXZpc2lvbiBvZiB0ZXJtcyBhZnRlciBpbnZlcnNlIGZmdCAqLworICBCcFswXSA9IFQgKyBucHJpbWUgKyAxOworICBtcG5fZmZ0X2Rpdl8yZXhwX21vZEYgKEJwWzBdLCBBcFswXSwgaywgbnByaW1lKTsKKyAgZm9yIChpID0gMTsgaSA8IEs7IGkrKykKKyAgICB7CisgICAgICBCcFtpXSA9IEFwW2kgLSAxXTsKKyAgICAgIG1wbl9mZnRfZGl2XzJleHBfbW9kRiAoQnBbaV0sIEFwW2ldLCBrICsgKEsgLSBpKSAqIE1wLCBucHJpbWUpOworICAgIH0KKworICAvKiBhZGRpdGlvbiBvZiB0ZXJtcyBpbiByZXN1bHQgcCAqLworICBNUE5fWkVSTyAoVCwgbnByaW1lICsgMSk7CisgIHBsYSA9IGwgKiAoSyAtIDEpICsgbnByaW1lICsgMTsgLyogbnVtYmVyIG9mIHJlcXVpcmVkIGxpbWJzIGZvciBwICovCisgIHAgPSBCOyAvKiBCIGhhcyBLKihuJyArIDEpIGxpbWJzLCB3aGljaCBpcyA+PSBwbGEsIGkuZS4gZW5vdWdoICovCisgIE1QTl9aRVJPIChwLCBwbGEpOworICBjYyA9IDA7IC8qIHdpbGwgYWNjdW11bGF0ZSB0aGUgKHNpZ25lZCkgY2FycnkgYXQgcFtwbGFdICovCisgIGZvciAoaSA9IEsgLSAxLCBsbyA9IGwgKiBpICsgbnByaW1lLHNoID0gbCAqIGk7IGkgPj0gMDsgaS0tLGxvIC09IGwsc2ggLT0gbCkKKyAgICB7CisgICAgICBtcF9wdHIgbiA9IHAgKyBzaDsKKworICAgICAgaiA9IChLIC0gaSkgJiAoSyAtIDEpOworCisgICAgICBpZiAobXBuX2FkZF9uIChuLCBuLCBCcFtqXSwgbnByaW1lICsgMSkpCisJY2MgKz0gbXBuX2FkZF8xIChuICsgbnByaW1lICsgMSwgbiArIG5wcmltZSArIDEsCisJCQkgIHBsYSAtIHNoIC0gbnByaW1lIC0gMSwgQ05TVF9MSU1CKDEpKTsKKyAgICAgIFRbMiAqIGxdID0gaSArIDE7IC8qIFQgPSAoaSArIDEpKjJeKDIqTSkgKi8KKyAgICAgIGlmIChtcG5fY21wIChCcFtqXSwgVCwgbnByaW1lICsgMSkgPiAwKQorCXsgLyogc3VidHJhY3QgMl5OJysxICovCisJICBjYyAtPSBtcG5fc3ViXzEgKG4sIG4sIHBsYSAtIHNoLCBDTlNUX0xJTUIoMSkpOworCSAgY2MgLT0gbXBuX3N1Yl8xIChwICsgbG8sIHAgKyBsbywgcGxhIC0gbG8sIENOU1RfTElNQigxKSk7CisJfQorICAgIH0KKyAgaWYgKGNjID09IC1DTlNUX0xJTUIoMSkpCisgICAgeworICAgICAgaWYgKChjYyA9IG1wbl9hZGRfMSAocCArIHBsYSAtIHBsLCBwICsgcGxhIC0gcGwsIHBsLCBDTlNUX0xJTUIoMSkpKSkKKwl7CisJICAvKiBwW3BsYS1wbF0uLi5wW3BsYS0xXSBhcmUgYWxsIHplcm8gKi8KKwkgIG1wbl9zdWJfMSAocCArIHBsYSAtIHBsIC0gMSwgcCArIHBsYSAtIHBsIC0gMSwgcGwgKyAxLCBDTlNUX0xJTUIoMSkpOworCSAgbXBuX3N1Yl8xIChwICsgcGxhIC0gMSwgcCArIHBsYSAtIDEsIDEsIENOU1RfTElNQigxKSk7CisJfQorICAgIH0KKyAgZWxzZSBpZiAoY2MgPT0gMSkKKyAgICB7CisgICAgICBpZiAocGxhID49IDIgKiBwbCkKKwl7CisJICB3aGlsZSAoKGNjID0gbXBuX2FkZF8xIChwICsgcGxhIC0gMiAqIHBsLCBwICsgcGxhIC0gMiAqIHBsLCAyICogcGwsIGNjKSkpCisJICAgIDsKKwl9CisgICAgICBlbHNlCisJeworCSAgY2MgPSBtcG5fc3ViXzEgKHAgKyBwbGEgLSBwbCwgcCArIHBsYSAtIHBsLCBwbCwgY2MpOworCSAgQVNTRVJUIChjYyA9PSAwKTsKKwl9CisgICAgfQorICBlbHNlCisgICAgQVNTRVJUIChjYyA9PSAwKTsKKworICAvKiBoZXJlIHAgPCAyXigyTSkgW0sgMl4oTShLLTEpKSArIChLLTEpIDJeKE0oSy0yKSkgKyAuLi4gXQorICAgICA8IEsgMl4oMk0pIFsyXihNKEstMSkpICsgMl4oTShLLTIpKSArIC4uLiBdCisgICAgIDwgSyAyXigyTSkgMl4oTShLLTEpKSoyID0gMl4oTSpLK00raysxKSAqLworICByZXR1cm4gbXBuX2ZmdF9ub3JtX21vZEYgKG9wLCBwbCwgcCwgcGxhKTsKK30KKworLyogcmV0dXJuIHRoZSBsY20gb2YgYSBhbmQgMl5rICovCitzdGF0aWMgbXBfYml0Y250X3QKK21wbl9tdWxfZmZ0X2xjbSAobXBfYml0Y250X3QgYSwgaW50IGspCit7CisgIG1wX2JpdGNudF90IGwgPSBrOworCisgIHdoaWxlIChhICUgMiA9PSAwICYmIGsgPiAwKQorICAgIHsKKyAgICAgIGEgPj49IDE7CisgICAgICBrIC0tOworICAgIH0KKyAgcmV0dXJuIGEgPDwgbDsKK30KKworCittcF9saW1iX3QKK21wbl9tdWxfZmZ0IChtcF9wdHIgb3AsIG1wX3NpemVfdCBwbCwKKwkgICAgIG1wX3NyY3B0ciBuLCBtcF9zaXplX3QgbmwsCisJICAgICBtcF9zcmNwdHIgbSwgbXBfc2l6ZV90IG1sLAorCSAgICAgaW50IGspCit7CisgIGludCBpOworICBtcF9zaXplX3QgSywgbWF4TEs7CisgIG1wX3NpemVfdCBOLCBOcHJpbWUsIG5wcmltZSwgTSwgTXAsIGw7CisgIG1wX3B0ciAqQXAsICpCcCwgQSwgVCwgQjsKKyAgaW50ICoqZmZ0X2wsICp0bXA7CisgIGludCBzcXIgPSAobiA9PSBtICYmIG5sID09IG1sKTsKKyAgbXBfbGltYl90IGg7CisgIFRNUF9ERUNMOworCisgIFRSQUNFIChwcmludGYgKCJcbm1wbl9tdWxfZmZ0IHBsPSVsZCBubD0lbGQgbWw9JWxkIGs9JWRcbiIsIHBsLCBubCwgbWwsIGspKTsKKyAgQVNTRVJUX0FMV0FZUyAobXBuX2ZmdF9uZXh0X3NpemUgKHBsLCBrKSA9PSBwbCk7CisKKyAgVE1QX01BUks7CisgIE4gPSBwbCAqIEdNUF9OVU1CX0JJVFM7CisgIGZmdF9sID0gVE1QX0JBTExPQ19UWVBFIChrICsgMSwgaW50ICopOworICB0bXAgPSBUTVBfQkFMTE9DX1RZUEUgKChzaXplX3QpIDIgPDwgaywgaW50KTsKKyAgZm9yIChpID0gMDsgaSA8PSBrOyBpKyspCisgICAgeworICAgICAgZmZ0X2xbaV0gPSB0bXA7CisgICAgICB0bXAgKz0gKG1wX3NpemVfdCkgMSA8PCBpOworICAgIH0KKworICBtcG5fZmZ0X2luaXRsIChmZnRfbCwgayk7CisgIEsgPSAobXBfc2l6ZV90KSAxIDw8IGs7CisgIE0gPSBOID4+IGs7CS8qIE4gPSAyXmsgTSAqLworICBsID0gMSArIChNIC0gMSkgLyBHTVBfTlVNQl9CSVRTOworICBtYXhMSyA9IG1wbl9tdWxfZmZ0X2xjbSAoR01QX05VTUJfQklUUywgayk7IC8qIGxjbSAoR01QX05VTUJfQklUUywgMl5rKSAqLworCisgIE5wcmltZSA9ICgxICsgKDIgKiBNICsgayArIDIpIC8gbWF4TEspICogbWF4TEs7CisgIC8qIE5wcmltZSA9IGNlaWwoKDIqTStrKzMpL21heExLKSptYXhMSzsgKi8KKyAgbnByaW1lID0gTnByaW1lIC8gR01QX05VTUJfQklUUzsKKyAgVFJBQ0UgKHByaW50ZiAoIk49JWxkIEs9JWxkLCBNPSVsZCwgbD0lbGQsIG1heExLPSVsZCwgTnA9JWxkLCBucD0lbGRcbiIsCisJCSBOLCBLLCBNLCBsLCBtYXhMSywgTnByaW1lLCBucHJpbWUpKTsKKyAgLyogd2Ugc2hvdWxkIGVuc3VyZSB0aGF0IHJlY3Vyc2l2ZWx5LCBucHJpbWUgaXMgYSBtdWx0aXBsZSBvZiB0aGUgbmV4dCBLICovCisgIGlmIChucHJpbWUgPj0gKHNxciA/IFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgOiBNVUxfRkZUX01PREZfVEhSRVNIT0xEKSkKKyAgICB7CisgICAgICBtcF9zaXplX3QgSzI7CisgICAgICBmb3IgKDs7KQorCXsKKwkgIEsyID0gKG1wX3NpemVfdCkgMSA8PCBtcG5fZmZ0X2Jlc3RfayAobnByaW1lLCBzcXIpOworCSAgaWYgKChucHJpbWUgJiAoSzIgLSAxKSkgPT0gMCkKKwkgICAgYnJlYWs7CisJICBucHJpbWUgPSAobnByaW1lICsgSzIgLSAxKSAmIC1LMjsKKwkgIE5wcmltZSA9IG5wcmltZSAqIEdNUF9MSU1CX0JJVFM7CisJICAvKiB3YXJuaW5nOiBzaW5jZSBucHJpbWUgY2hhbmdlZCwgSzIgbWF5IGNoYW5nZSB0b28hICovCisJfQorICAgICAgVFJBQ0UgKHByaW50ZiAoIm5ldyBtYXhMSz0lbGQsIE5wPSVsZCwgbnA9JWxkXG4iLCBtYXhMSywgTnByaW1lLCBucHJpbWUpKTsKKyAgICB9CisgIEFTU0VSVF9BTFdBWVMgKG5wcmltZSA8IHBsKTsgLyogb3RoZXJ3aXNlIHdlJ2xsIGxvb3AgKi8KKworICBUID0gVE1QX0JBTExPQ19MSU1CUyAoMiAqIChucHJpbWUgKyAxKSk7CisgIE1wID0gTnByaW1lID4+IGs7CisKKyAgVFJBQ0UgKHByaW50ZiAoIiVsZHglbGQgbGltYnMgLT4gJWxkIHRpbWVzICVsZHglbGQgbGltYnMgKCUxLjJmKVxuIiwKKwkJcGwsIHBsLCBLLCBucHJpbWUsIG5wcmltZSwgMi4wICogKGRvdWJsZSkgTiAvIE5wcmltZSAvIEspOworCSBwcmludGYgKCIgICB0ZW1wIHNwYWNlICVsZFxuIiwgMiAqIEsgKiAobnByaW1lICsgMSkpKTsKKworICBBID0gVE1QX0JBTExPQ19MSU1CUyAoSyAqIChucHJpbWUgKyAxKSk7CisgIEFwID0gVE1QX0JBTExPQ19NUF9QVFJTIChLKTsKKyAgbXBuX211bF9mZnRfZGVjb21wb3NlIChBLCBBcCwgSywgbnByaW1lLCBuLCBubCwgbCwgTXAsIFQpOworICBpZiAoc3FyKQorICAgIHsKKyAgICAgIG1wX3NpemVfdCBwbGE7CisgICAgICBwbGEgPSBsICogKEsgLSAxKSArIG5wcmltZSArIDE7IC8qIG51bWJlciBvZiByZXF1aXJlZCBsaW1icyBmb3IgcCAqLworICAgICAgQiA9IFRNUF9CQUxMT0NfTElNQlMgKHBsYSk7CisgICAgICBCcCA9IFRNUF9CQUxMT0NfTVBfUFRSUyAoSyk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgQiA9IFRNUF9CQUxMT0NfTElNQlMgKEsgKiAobnByaW1lICsgMSkpOworICAgICAgQnAgPSBUTVBfQkFMTE9DX01QX1BUUlMgKEspOworICAgICAgbXBuX211bF9mZnRfZGVjb21wb3NlIChCLCBCcCwgSywgbnByaW1lLCBtLCBtbCwgbCwgTXAsIFQpOworICAgIH0KKyAgaCA9IG1wbl9tdWxfZmZ0X2ludGVybmFsIChvcCwgcGwsIGssIEFwLCBCcCwgQSwgQiwgbnByaW1lLCBsLCBNcCwgZmZ0X2wsIFQsIHNxcik7CisKKyAgVE1QX0ZSRUU7CisgIHJldHVybiBoOworfQorCisjaWYgV0FOVF9PTERfRkZUX0ZVTEwKKy8qIG11bHRpcGx5IHtuLCBubH0gYnkge20sIG1sfSwgYW5kIHB1dCB0aGUgcmVzdWx0IGluIHtvcCwgbmwrbWx9ICovCit2b2lkCittcG5fbXVsX2ZmdF9mdWxsIChtcF9wdHIgb3AsCisJCSAgbXBfc3JjcHRyIG4sIG1wX3NpemVfdCBubCwKKwkJICBtcF9zcmNwdHIgbSwgbXBfc2l6ZV90IG1sKQoreworICBtcF9wdHIgcGFkX29wOworICBtcF9zaXplX3QgcGwsIHBsMiwgcGwzLCBsOworICBtcF9zaXplX3QgY2MsIGMyLCBvbGRjYzsKKyAgaW50IGsyLCBrMzsKKyAgaW50IHNxciA9IChuID09IG0gJiYgbmwgPT0gbWwpOworCisgIHBsID0gbmwgKyBtbDsgLyogdG90YWwgbnVtYmVyIG9mIGxpbWJzIG9mIHRoZSByZXN1bHQgKi8KKworICAvKiBwZXJmb3JtIGEgZmZ0IG1vZCAyXigyTikrMSBhbmQgb25lIG1vZCAyXigzTikrMS4KKyAgICAgV2UgbXVzdCBoYXZlIHBsMyA9IDMvMiAqIHBsMiwgd2l0aCBwbDIgYSBtdWx0aXBsZSBvZiAyXmsyLCBhbmQKKyAgICAgcGwzIGEgbXVsdGlwbGUgb2YgMl5rMy4gU2luY2UgazMgPj0gazIsIGJvdGggYXJlIG11bHRpcGxlcyBvZiAyXmsyLAorICAgICBhbmQgcGwyIG11c3QgYmUgYW4gZXZlbiBtdWx0aXBsZSBvZiAyXmsyLiBUaHVzIChwbDIscGwzKSA9CisgICAgICgyKmoqMl5rMiwzKmoqMl5rMiksIHdoaWNoIHdvcmtzIGZvciAzKmogPD0gcGwvMl5rMiA8PSA1KmouCisgICAgIFdlIG5lZWQgdGhhdCBjb25zZWN1dGl2ZSBpbnRlcnZhbHMgb3ZlcmxhcCwgaS5lLiA1KmogPj0gMyooaisxKSwKKyAgICAgd2hpY2ggcmVxdWlyZXMgaj49Mi4gVGh1cyB0aGlzIHNjaGVtZSByZXF1aXJlcyBwbCA+PSA2ICogMl5GRlRfRklSU1RfSy4gKi8KKworICAvKiAgQVNTRVJUX0FMV0FZUyhwbCA+PSA2ICogKDEgPDwgRkZUX0ZJUlNUX0spKTsgKi8KKworICBwbDIgPSAoMiAqIHBsIC0gMSkgLyA1OyAvKiBjZWlsICgycGwvNSkgLSAxICovCisgIGRvCisgICAgeworICAgICAgcGwyKys7CisgICAgICBrMiA9IG1wbl9mZnRfYmVzdF9rIChwbDIsIHNxcik7IC8qIGJlc3QgZmZ0IHNpemUgZm9yIHBsMiBsaW1icyAqLworICAgICAgcGwyID0gbXBuX2ZmdF9uZXh0X3NpemUgKHBsMiwgazIpOworICAgICAgcGwzID0gMyAqIHBsMiAvIDI7IC8qIHNpbmNlIGs+PUZGVF9GSVJTVF9LPTQsIHBsMiBpcyBhIG11bHRpcGxlIG9mIDJeNCwKKwkJCSAgICB0aHVzIHBsMiAvIDIgaXMgZXhhY3QgKi8KKyAgICAgIGszID0gbXBuX2ZmdF9iZXN0X2sgKHBsMywgc3FyKTsKKyAgICB9CisgIHdoaWxlIChtcG5fZmZ0X25leHRfc2l6ZSAocGwzLCBrMykgIT0gcGwzKTsKKworICBUUkFDRSAocHJpbnRmICgibXBuX211bF9mZnRfZnVsbCBubD0lbGQgbWw9JWxkIC0+IHBsMj0lbGQgcGwzPSVsZCBrPSVkXG4iLAorCQkgbmwsIG1sLCBwbDIsIHBsMywgazIpKTsKKworICBBU1NFUlRfQUxXQVlTKHBsMyA8PSBwbCk7CisgIGNjID0gbXBuX211bF9mZnQgKG9wLCBwbDMsIG4sIG5sLCBtLCBtbCwgazMpOyAgICAgLyogbXUgKi8KKyAgQVNTRVJUKGNjID09IDApOworICBwYWRfb3AgPSBfX0dNUF9BTExPQ0FURV9GVU5DX0xJTUJTIChwbDIpOworICBjYyA9IG1wbl9tdWxfZmZ0IChwYWRfb3AsIHBsMiwgbiwgbmwsIG0sIG1sLCBrMik7IC8qIGxhbWJkYSAqLworICBjYyA9IC1jYyArIG1wbl9zdWJfbiAocGFkX29wLCBwYWRfb3AsIG9wLCBwbDIpOyAgICAvKiBsYW1iZGEgLSBsb3cobXUpICovCisgIC8qIDAgPD0gY2MgPD0gMSAqLworICBBU1NFUlQoMCA8PSBjYyAmJiBjYyA8PSAxKTsKKyAgbCA9IHBsMyAtIHBsMjsgLyogbCA9IHBsMiAvIDIgc2luY2UgcGwzID0gMy8yICogcGwyICovCisgIGMyID0gbXBuX2FkZF9uIChwYWRfb3AsIHBhZF9vcCwgb3AgKyBwbDIsIGwpOworICBjYyA9IG1wbl9hZGRfMSAocGFkX29wICsgbCwgcGFkX29wICsgbCwgbCwgKG1wX2xpbWJfdCkgYzIpIC0gY2M7CisgIEFTU0VSVCgtMSA8PSBjYyAmJiBjYyA8PSAxKTsKKyAgaWYgKGNjIDwgMCkKKyAgICBjYyA9IG1wbl9hZGRfMSAocGFkX29wLCBwYWRfb3AsIHBsMiwgKG1wX2xpbWJfdCkgLWNjKTsKKyAgQVNTRVJUKDAgPD0gY2MgJiYgY2MgPD0gMSk7CisgIC8qIG5vdyBsYW1iZGEtbXUgPSB7cGFkX29wLCBwbDJ9IC0gY2MgbW9kIDJeKHBsMipHTVBfTlVNQl9CSVRTKSsxICovCisgIG9sZGNjID0gY2M7CisjaWYgSEFWRV9OQVRJVkVfbXBuX2FkZF9uX3N1Yl9uCisgIGMyID0gbXBuX2FkZF9uX3N1Yl9uIChwYWRfb3AgKyBsLCBwYWRfb3AsIHBhZF9vcCwgcGFkX29wICsgbCwgbCk7CisgIGNjICs9IGMyID4+IDE7IC8qIGNhcnJ5IG91dCBmcm9tIGhpZ2ggPC0gbG93ICsgaGlnaCAqLworICBjMiA9IGMyICYgMTsgLyogYm9ycm93IG91dCBmcm9tIGxvdyA8LSBsb3cgLSBoaWdoICovCisjZWxzZQorICB7CisgICAgbXBfcHRyIHRtcDsKKyAgICBUTVBfREVDTDsKKworICAgIFRNUF9NQVJLOworICAgIHRtcCA9IFRNUF9CQUxMT0NfTElNQlMgKGwpOworICAgIE1QTl9DT1BZICh0bXAsIHBhZF9vcCwgbCk7CisgICAgYzIgPSBtcG5fc3ViX24gKHBhZF9vcCwgICAgICBwYWRfb3AsIHBhZF9vcCArIGwsIGwpOworICAgIGNjICs9IG1wbl9hZGRfbiAocGFkX29wICsgbCwgdG1wLCAgICBwYWRfb3AgKyBsLCBsKTsKKyAgICBUTVBfRlJFRTsKKyAgfQorI2VuZGlmCisgIGMyICs9IG9sZGNjOworICAvKiBmaXJzdCBub3JtYWxpemUge3BhZF9vcCwgcGwyfSBiZWZvcmUgZGl2aWRpbmcgYnkgMjogYzIgaXMgdGhlIGJvcnJvdworICAgICBhdCBwYWRfb3AgKyBsLCBjYyBpcyB0aGUgY2FycnkgYXQgcGFkX29wICsgcGwyICovCisgIC8qIDAgPD0gY2MgPD0gMiAqLworICBjYyAtPSBtcG5fc3ViXzEgKHBhZF9vcCArIGwsIHBhZF9vcCArIGwsIGwsIChtcF9saW1iX3QpIGMyKTsKKyAgLyogLTEgPD0gY2MgPD0gMiAqLworICBpZiAoY2MgPiAwKQorICAgIGNjID0gLW1wbl9zdWJfMSAocGFkX29wLCBwYWRfb3AsIHBsMiwgKG1wX2xpbWJfdCkgY2MpOworICAvKiBub3cgLTEgPD0gY2MgPD0gMCAqLworICBpZiAoY2MgPCAwKQorICAgIGNjID0gbXBuX2FkZF8xIChwYWRfb3AsIHBhZF9vcCwgcGwyLCAobXBfbGltYl90KSAtY2MpOworICAvKiBub3cge3BhZF9vcCwgcGwyfSBpcyBub3JtYWxpemVkLCB3aXRoIDAgPD0gY2MgPD0gMSAqLworICBpZiAocGFkX29wWzBdICYgMSkgLyogaWYgb2RkLCBhZGQgMl4ocGwyKkdNUF9OVU1CX0JJVFMpKzEgKi8KKyAgICBjYyArPSAxICsgbXBuX2FkZF8xIChwYWRfb3AsIHBhZF9vcCwgcGwyLCBDTlNUX0xJTUIoMSkpOworICAvKiBub3cgMCA8PSBjYyA8PSAyLCBidXQgY2M9MiBjYW5ub3Qgb2NjdXIgc2luY2UgaXQgd291bGQgZ2l2ZSBhIGNhcnJ5CisgICAgIG91dCBiZWxvdyAqLworICBtcG5fcnNoaWZ0IChwYWRfb3AsIHBhZF9vcCwgcGwyLCAxKTsgLyogZGl2aWRlIGJ5IHR3byAqLworICBpZiAoY2MpIC8qIHRoZW4gY2M9MSAqLworICAgIHBhZF9vcCBbcGwyIC0gMV0gfD0gKG1wX2xpbWJfdCkgMSA8PCAoR01QX05VTUJfQklUUyAtIDEpOworICAvKiBub3cge3BhZF9vcCxwbDJ9LWNjID0gKGxhbWJkYS1tdSkvKDEtMl4obCpHTVBfTlVNQl9CSVRTKSkKKyAgICAgbW9kIDJeKHBsMipHTVBfTlVNQl9CSVRTKSArIDEgKi8KKyAgYzIgPSBtcG5fYWRkX24gKG9wLCBvcCwgcGFkX29wLCBwbDIpOyAvKiBubyBuZWVkIHRvIGFkZCBjYyAoaXMgMCkgKi8KKyAgLyogc2luY2UgcGwyK3BsMyA+PSBwbCwgbmVjZXNzYXJ5IHRoZSBleHRyYSBsaW1icyAoaW5jbHVkaW5nIGNjKSBhcmUgemVybyAqLworICBNUE5fQ09QWSAob3AgKyBwbDMsIHBhZF9vcCwgcGwgLSBwbDMpOworICBBU1NFUlRfTVBOX1pFUk9fUCAocGFkX29wICsgcGwgLSBwbDMsIHBsMiArIHBsMyAtIHBsKTsKKyAgX19HTVBfRlJFRV9GVU5DX0xJTUJTIChwYWRfb3AsIHBsMik7CisgIC8qIHNpbmNlIHRoZSBmaW5hbCByZXN1bHQgaGFzIGF0IG1vc3QgcGwgbGltYnMsIG5vIGNhcnJ5IG91dCBiZWxvdyAqLworICBtcG5fYWRkXzEgKG9wICsgcGwyLCBvcCArIHBsMiwgcGwgLSBwbDIsIChtcF9saW1iX3QpIGMyKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL211bF9uLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvbXVsX24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmJkOTIzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL211bF9uLmMKQEAgLTAsMCArMSw5NiBAQAorLyogbXBuX211bF9uIC0tIG11bHRpcGx5IG5hdHVyYWwgbnVtYmVycy4KKworQ29weXJpZ2h0IDE5OTEsIDE5OTMsIDE5OTQsIDE5OTYtMjAwMywgMjAwNSwgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorI2luY2x1ZGUgImxvbmdsb25nLmgiCisKK3ZvaWQKK21wbl9tdWxfbiAobXBfcHRyIHAsIG1wX3NyY3B0ciBhLCBtcF9zcmNwdHIgYiwgbXBfc2l6ZV90IG4pCit7CisgIEFTU0VSVCAobiA+PSAxKTsKKyAgQVNTRVJUICghIE1QTl9PVkVSTEFQX1AgKHAsIDIgKiBuLCBhLCBuKSk7CisgIEFTU0VSVCAoISBNUE5fT1ZFUkxBUF9QIChwLCAyICogbiwgYiwgbikpOworCisgIGlmIChCRUxPV19USFJFU0hPTEQgKG4sIE1VTF9UT09NMjJfVEhSRVNIT0xEKSkKKyAgICB7CisgICAgICBtcG5fbXVsX2Jhc2VjYXNlIChwLCBhLCBuLCBiLCBuKTsKKyAgICB9CisgIGVsc2UgaWYgKEJFTE9XX1RIUkVTSE9MRCAobiwgTVVMX1RPT00zM19USFJFU0hPTEQpKQorICAgIHsKKyAgICAgIC8qIEFsbG9jYXRlIHdvcmtzcGFjZSBvZiBmaXhlZCBzaXplIG9uIHN0YWNrOiBmYXN0ISAqLworICAgICAgbXBfbGltYl90IHdzW21wbl90b29tMjJfbXVsX2l0Y2ggKE1VTF9UT09NMzNfVEhSRVNIT0xEX0xJTUlULTEsCisJCQkJCU1VTF9UT09NMzNfVEhSRVNIT0xEX0xJTUlULTEpXTsKKyAgICAgIEFTU0VSVCAoTVVMX1RPT00zM19USFJFU0hPTEQgPD0gTVVMX1RPT00zM19USFJFU0hPTERfTElNSVQpOworICAgICAgbXBuX3Rvb20yMl9tdWwgKHAsIGEsIG4sIGIsIG4sIHdzKTsKKyAgICB9CisgIGVsc2UgaWYgKEJFTE9XX1RIUkVTSE9MRCAobiwgTVVMX1RPT000NF9USFJFU0hPTEQpKQorICAgIHsKKyAgICAgIG1wX3B0ciB3czsKKyAgICAgIFRNUF9TREVDTDsKKyAgICAgIFRNUF9TTUFSSzsKKyAgICAgIHdzID0gVE1QX1NBTExPQ19MSU1CUyAobXBuX3Rvb20zM19tdWxfaXRjaCAobiwgbikpOworICAgICAgbXBuX3Rvb20zM19tdWwgKHAsIGEsIG4sIGIsIG4sIHdzKTsKKyAgICAgIFRNUF9TRlJFRTsKKyAgICB9CisgIGVsc2UgaWYgKEJFTE9XX1RIUkVTSE9MRCAobiwgTVVMX1RPT002SF9USFJFU0hPTEQpKQorICAgIHsKKyAgICAgIG1wX3B0ciB3czsKKyAgICAgIFRNUF9TREVDTDsKKyAgICAgIFRNUF9TTUFSSzsKKyAgICAgIHdzID0gVE1QX1NBTExPQ19MSU1CUyAobXBuX3Rvb200NF9tdWxfaXRjaCAobiwgbikpOworICAgICAgbXBuX3Rvb200NF9tdWwgKHAsIGEsIG4sIGIsIG4sIHdzKTsKKyAgICAgIFRNUF9TRlJFRTsKKyAgICB9CisgIGVsc2UgaWYgKEJFTE9XX1RIUkVTSE9MRCAobiwgTVVMX1RPT004SF9USFJFU0hPTEQpKQorICAgIHsKKyAgICAgIG1wX3B0ciB3czsKKyAgICAgIFRNUF9TREVDTDsKKyAgICAgIFRNUF9TTUFSSzsKKyAgICAgIHdzID0gVE1QX1NBTExPQ19MSU1CUyAobXBuX3Rvb202X211bF9uX2l0Y2ggKG4pKTsKKyAgICAgIG1wbl90b29tNmhfbXVsIChwLCBhLCBuLCBiLCBuLCB3cyk7CisgICAgICBUTVBfU0ZSRUU7CisgICAgfQorICBlbHNlIGlmIChCRUxPV19USFJFU0hPTEQgKG4sIE1VTF9GRlRfVEhSRVNIT0xEKSkKKyAgICB7CisgICAgICBtcF9wdHIgd3M7CisgICAgICBUTVBfREVDTDsKKyAgICAgIFRNUF9NQVJLOworICAgICAgd3MgPSBUTVBfQUxMT0NfTElNQlMgKG1wbl90b29tOF9tdWxfbl9pdGNoIChuKSk7CisgICAgICBtcG5fdG9vbThoX211bCAocCwgYSwgbiwgYiwgbiwgd3MpOworICAgICAgVE1QX0ZSRUU7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogVGhlIGN1cnJlbnQgRkZUIGNvZGUgYWxsb2NhdGVzIGl0cyBvd24gc3BhY2UuICBUaGF0IHNob3VsZCBwcm9iYWJseQorCSBjaGFuZ2UuICAqLworICAgICAgbXBuX2ZmdF9tdWwgKHAsIGEsIG4sIGIsIG4pOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9tdWxsb19iYXNlY2FzZS5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL211bGxvX2Jhc2VjYXNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE0Y2QzZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9tdWxsb19iYXNlY2FzZS5jCkBAIC0wLDAgKzEsOTAgQEAKKy8qIG1wbl9tdWxsb19iYXNlY2FzZSAtLSBJbnRlcm5hbCByb3V0aW5lIHRvIG11bHRpcGx5IHR3byBuYXR1cmFsCisgICBudW1iZXJzIG9mIGxlbmd0aCBuIGFuZCByZXR1cm4gdGhlIGxvdyBwYXJ0LgorCisgICBUSElTIElTIEFOIElOVEVSTkFMIEZVTkNUSU9OIFdJVEggQSBNVVRBQkxFIElOVEVSRkFDRS4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggVEhJUyBGVU5DVElPTiBUSFJPVUdIIERPQ1VNRU5URUQgSU5URVJGQUNFUy4KKworCitDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDIsIDIwMDQsIDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCisvKiBGSVhNRTogU2hvdWxkIG9wdGlvbmFsbHkgdXNlIG1wbl9tdWxfMi9tcG5fYWRkbXVsXzIuICAqLworCisjaWZuZGVmIE1VTExPX1ZBUklBTlQKKyNkZWZpbmUgTVVMTE9fVkFSSUFOVCAyCisjZW5kaWYKKworCisjaWYgTVVMTE9fVkFSSUFOVCA9PSAxCit2b2lkCittcG5fbXVsbG9fYmFzZWNhc2UgKG1wX3B0ciBycCwgbXBfc3JjcHRyIHVwLCBtcF9zcmNwdHIgdnAsIG1wX3NpemVfdCBuKQoreworICBtcF9zaXplX3QgaTsKKworICBtcG5fbXVsXzEgKHJwLCB1cCwgbiwgdnBbMF0pOworCisgIGZvciAoaSA9IG4gLSAxOyBpID4gMDsgaS0tKQorICAgIHsKKyAgICAgIHZwKys7CisgICAgICBycCsrOworICAgICAgbXBuX2FkZG11bF8xIChycCwgdXAsIGksIHZwWzBdKTsKKyAgICB9Cit9CisjZW5kaWYKKworCisjaWYgTVVMTE9fVkFSSUFOVCA9PSAyCit2b2lkCittcG5fbXVsbG9fYmFzZWNhc2UgKG1wX3B0ciBycCwgbXBfc3JjcHRyIHVwLCBtcF9zcmNwdHIgdnAsIG1wX3NpemVfdCBuKQoreworICBtcF9saW1iX3QgaDsKKworICBoID0gdXBbMF0gKiB2cFtuIC0gMV07CisKKyAgaWYgKG4gIT0gMSkKKyAgICB7CisgICAgICBtcF9zaXplX3QgaTsKKyAgICAgIG1wX2xpbWJfdCB2MDsKKworICAgICAgdjAgPSAqdnArKzsKKyAgICAgIGggKz0gdXBbbiAtIDFdICogdjAgKyBtcG5fbXVsXzEgKHJwLCB1cCwgbiAtIDEsIHYwKTsKKyAgICAgIHJwKys7CisKKyAgICAgIGZvciAoaSA9IG4gLSAyOyBpID4gMDsgaS0tKQorCXsKKwkgIHYwID0gKnZwKys7CisJICBoICs9IHVwW2ldICogdjAgKyBtcG5fYWRkbXVsXzEgKHJwLCB1cCwgaSwgdjApOworCSAgcnArKzsKKwl9CisgICAgfQorCisgIHJwWzBdID0gaDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL211bGxvX24uYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9tdWxsb19uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY0ZTdhZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9tdWxsb19uLmMKQEAgLTAsMCArMSwyNDMgQEAKKy8qIG1wbl9tdWxsb19uIC0tIG11bHRpcGx5IHR3byBuLWxpbWIgbnVtYmVycyBhbmQgcmV0dXJuIHRoZSBsb3cgbiBsaW1icworICAgb2YgdGhlaXIgcHJvZHVjdHMuCisKKyAgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3Jiam9ybiBHcmFubHVuZCBhbmQgTWFyY28gQm9kcmF0by4KKworICAgVEhJUyBJUyAoRk9SIE5PVykgQU4gSU5URVJOQUwgRlVOQ1RJT04uICBJVCBJUyBPTkxZIFNBRkUgVE8gUkVBQ0ggVEhJUworICAgRlVOQ1RJT04gVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuICBJTiBGQUNULCBJVCBJUyBBTE1PU1QgR1VBUkFOVEVFRAorICAgVEhBVCBJVCdMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEgRlVUVVJFIEdOVSBNUCBSRUxFQVNFLgorCitDb3B5cmlnaHQgMjAwNCwgMjAwNSwgMjAwOSwgMjAxMCwgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisKKworI2lmIFRVTkVfUFJPR1JBTV9CVUlMRCB8fCBXQU5UX0ZBVF9CSU5BUlkKKyNkZWZpbmUgTUFZQkVfcmFuZ2VfYmFzZWNhc2UgMQorI2RlZmluZSBNQVlCRV9yYW5nZV90b29tMjIgICAxCisjZWxzZQorI2RlZmluZSBNQVlCRV9yYW5nZV9iYXNlY2FzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICgoTVVMTE9fRENfVEhSRVNIT0xEID09IDAgPyBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgOiBNVUxMT19EQ19USFJFU0hPTEQpIDwgTVVMX1RPT00yMl9USFJFU0hPTEQqMzYvKDM2LTExKSkKKyNkZWZpbmUgTUFZQkVfcmFuZ2VfdG9vbTIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoKE1VTExPX0RDX1RIUkVTSE9MRCA9PSAwID8gTVVMTE9fQkFTRUNBU0VfVEhSRVNIT0xEIDogTVVMTE9fRENfVEhSRVNIT0xEKSA8IE1VTF9UT09NMzNfVEhSRVNIT0xEKjM2LygzNi0xMSkgKQorI2VuZGlmCisKKy8qICBUSElOSzogVGhlIERDIHN0cmF0ZWd5IHVzZXMgZGlmZmVyZW50IGNvbnN0YW50cyBpbiBkaWZmZXJlbnQgVG9vbSdzCisJIHJhbmdlcy4gU29tZXRoaW5nIHNtb290aGVyPworKi8KKworLyoKKyAgQ29tcHV0ZSB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgaGFsZiBvZiB0aGUgcHJvZHVjdCB7eHksbn0qe3lwLG59LCBvcgorICBmb3JtYWxseSB7cnAsbn0gPSB7eHksbn0qe3lwLG59IE1vZCAoQl5uKS4KKworICBBYm92ZSB0aGUgZ2l2ZW4gdGhyZXNob2xkLCB0aGUgRGl2aWRlIGFuZCBDb25xdWVyIHN0cmF0ZWd5IGlzIHVzZWQuCisgIFRoZSBvcGVyYW5kcyBhcmUgc3BsaXQgaW4gdHdvLCBhbmQgYSBmdWxsIHByb2R1Y3QgcGx1cyB0d28gbXVsbG8KKyAgYXJlIHVzZWQgdG8gb2J0YWluIHRoZSBmaW5hbCByZXN1bHQuIFRoZSBtb3JlIG5hdHVyYWwgc3RyYXRlZ3kgaXMgdG8KKyAgc3BsaXQgaW4gdHdvIGhhbHZlcywgYnV0IHRoaXMgaXMgZmFyIGZyb20gb3B0aW1hbCB3aGVuIGEKKyAgc3ViLXF1YWRyYXRpYyBtdWx0aXBsaWNhdGlvbiBpcyB1c2VkLgorCisgIE11bGRlcnMgc3VnZ2VzdHMgYW4gdW5iYWxhbmNlZCBzcGxpdCBpbiBmYXZvdXIgb2YgdGhlIGZ1bGwgcHJvZHVjdCwKKyAgc3BsaXQgbiA9IG4xICsgbjIsIHdoZXJlIGFuID0gbjEgPD0gbjIgPSAoMS1hKW47IGkuZS4gMCA8IGEgPD0gMS8yLgorCisgIFRvIGNvbXB1dGUgdGhlIHZhbHVlIG9mIGEsIHdlIGFzc3VtZSB0aGF0IHRoZSBjb3N0IG9mIG11bGxvIGZvciBhCisgIGdpdmVuIHNpemUgTUwobikgaXMgYSBmcmFjdGlvbiBvZiB0aGUgY29zdCBvZiBhIGZ1bGwgcHJvZHVjdCB3aXRoCisgIHNhbWUgc2l6ZSBNKG4pLCBhbmQgdGhlIGNvc3QgTShuKT1uXmUgZm9yIHNvbWUgZXhwb25lbnQgMSA8IGUgPD0gMjsKKyAgdGhlbiB3ZSBjYW4gd3JpdGU6CisKKyAgTUwobikgPSAyKk1MKGFuKSArIE0oKDEtYSluKSA9PiBrKk0obikgPSAyKmsqTShuKSphXmUgKyBNKG4pKigxLWEpXmUKKworICBHaXZlbiBhIHZhbHVlIGZvciBlLCB3YW50IHRvIG1pbmltaXNlIHRoZSB2YWx1ZSBvZiBrLCBpLmUuIHRoZQorICBmdW5jdGlvbiBrPSgxLWEpXmUvKDEtMiphXmUpLgorCisgIFdpdGggZT0yLCB0aGUgZXhwb25lbnQgZm9yIHNjaG9vbGJvb2sgbXVsdGlwbGljYXRpb24sIHRoZSBtaW5pbXVtIGlzCisgIGdpdmVuIGJ5IHRoZSB2YWx1ZXMgYT0xLWE9MS8yLgorCisgIFdpdGggZT1sb2coMykvbG9nKDIpLCB0aGUgZXhwb25lbnQgZm9yIEthcmF0c3ViYSAoYWthIHRvb20yMiksCisgIE11bGRlcnMgY29tcHV0ZSAoMS1hKSA9IDAuNjk0Li4uIGFuZCB3ZSBhcHByb3hpbWF0ZSBhIHdpdGggMTEvMzYuCisKKyAgT3RoZXIgcG9zc2libGUgYXBwcm94aW1hdGlvbnMgZm9sbG93OgorICBlPWxvZyg1KS9sb2coMykgW1Rvb20tM10gLT4gYSB+PSA5LzQwCisgIGU9bG9nKDcpL2xvZyg0KSBbVG9vbS00XSAtPiBhIH49IDcvMzkKKyAgZT1sb2coMTEpL2xvZyg2KSBbVG9vbS02XSAtPiBhIH49IDEvOAorICBlPWxvZygxNSkvbG9nKDgpIFtUb29tLThdIC0+IGEgfj0gMS8xMAorCisgIFRoZSB2YWx1ZXMgYWJvdmUgd2hlcmUgb2J0YWluZWQgd2l0aCB0aGUgZm9sbG93aW5nIHRyaXZpYWwgY29tbWFuZHMKKyAgaW4gdGhlIGdwLXBhcmkgc2hlbGw6CisKK2Z1bihlLGEpPSgxLWEpXmUvKDEtMiphXmUpCittdWwoYSxiLGMpPXtsb2NhbChtLHgscCk7aWYoYi1jPDEvMTAwMDAsKGIrYykvMixtPTE7eD1iO2ZvcnN0ZXAocD1jLGIsKGItYykvOCxpZihmdW4oYSxwKTxtLG09ZnVuKGEscCk7eD1wKSk7bXVsKGEsKGIreCkvMiwoYyt4KS8yKSl9Citjb250ZnJhY3BucW4oY29udGZyYWMobXVsKGxvZygyKjItMSkvbG9nKDIpLDEvMiwwKSw1KSkKK2NvbnRmcmFjcG5xbihjb250ZnJhYyhtdWwobG9nKDMqMi0xKS9sb2coMyksMS8yLDApLDUpKQorY29udGZyYWNwbnFuKGNvbnRmcmFjKG11bChsb2coNCoyLTEpL2xvZyg0KSwxLzIsMCksNSkpCitjb250ZnJhY3BucW4oY29udGZyYWMobXVsKGxvZyg2KjItMSkvbG9nKDYpLDEvMiwwKSwzKSkKK2NvbnRmcmFjcG5xbihjb250ZnJhYyhtdWwobG9nKDgqMi0xKS9sb2coOCksMS8yLDApLDMpKQorCisgICwKKyAgfFwKKyAgfCBcCisgICstLS0tLAorICB8ICAgIHwKKyAgfCAgICB8CisgIHwgICAgfFwKKyAgfCAgICB8IFwKKyAgKy0tLS0rLS1gCisgIF4gbjIgXm4xXgorCisgIEZvciBhbiBhY3R1YWwgaW1wbGVtZW50YXRpb24sIHRoZSBhc3N1bXB0aW9uIHRoYXQgTShuKT1uXmUgaXMKKyAgaW5jb3JyZWN0LCBhcyBhIGNvbnNlcXVlbmNlIGFsc28gdGhlIGFzc3VtcHRpb24gdGhhdCBNTChuKT1rKk0obikKKyAgd2l0aCBhIGNvbnN0YW50IGsgaXMgd3JvbmcuCisKKyAgQnV0IHRoZW9yeSBzdWdnZXN0IHVzIHR3byB0aGluZ3M6CisgIC0gdGhlIGJlc3QgdGhlIG11bHRpcGxpY2F0aW9uIHByb2R1Y3QgaXMgKGxvd2VyIGUpLCB0aGUgbW9yZSBrCisgICAgYXBwcm9hY2hlcyAxLCBhbmQgYSBhcHByb2FjaGVzIDAuCisKKyAgLSBBIHZhbHVlIGZvciBhIHNtYWxsZXIgdGhhbiBvcHRpbWFsIGlzIHByb2JhYmx5IGxlc3MgYmFkIHRoYW4gYQorICAgIGJpZ2dlciBvbmU6IGUuZy4gbGV0IGU9bG9nKDMpL2xvZygyKSwgYT0wLjMwNThfIHRoZSBvcHRpbWFsCisgICAgdmFsdWUsIGFuZCBrKGEpPTAuODA4XyB0aGUgbXVsL211bGxvIHNwZWVkIHJhdGlvLiBXZSBnZXQKKyAgICBrKGErMS82KT0wLjkyOV8gYnV0IGsoYS0xLzYpPTAuODY1Xy4KKyovCisKK3N0YXRpYyBtcF9zaXplX3QKK21wbl9tdWxsb19uX2l0Y2ggKG1wX3NpemVfdCBuKQoreworICByZXR1cm4gMipuOworfQorCisvKgorICAgIG1wbl9kY19tdWxsb19uIHJlcXVpcmVzIGEgc2NyYXRjaCBzcGFjZSBvZiAyKm4gbGltYnMgYXQgdHAuCisgICAgSXQgYWNjZXB0cyB0cCA9PSBycC4KKyovCitzdGF0aWMgdm9pZAorbXBuX2RjX211bGxvX24gKG1wX3B0ciBycCwgbXBfc3JjcHRyIHhwLCBtcF9zcmNwdHIgeXAsIG1wX3NpemVfdCBuLCBtcF9wdHIgdHApCit7CisgIG1wX3NpemVfdCBuMiwgbjE7CisgIEFTU0VSVCAobiA+PSAyKTsKKyAgQVNTRVJUICghIE1QTl9PVkVSTEFQX1AgKHJwLCBuLCB4cCwgbikpOworICBBU1NFUlQgKCEgTVBOX09WRVJMQVBfUCAocnAsIG4sIHlwLCBuKSk7CisgIEFTU0VSVCAoTVBOX1NBTUVfT1JfU0VQQVJBVEUyX1AocnAsIG4sIHRwLCAyKm4pKTsKKworICAvKiBEaXZpZGUtYW5kLWNvbnF1ZXIgKi8KKworICAvKiBXZSBuZWVkIGZyYWN0aW9uYWwgYXBwcm94aW1hdGlvbiBvZiB0aGUgdmFsdWUgMCA8IGEgPD0gMS8yCisgICAgIGdpdmluZyB0aGUgbWluaW11bSBpbiB0aGUgZnVuY3Rpb24gaz0oMS1hKV5lLygxLTIqYV5lKS4KKyAgKi8KKyAgaWYgKE1BWUJFX3JhbmdlX2Jhc2VjYXNlICYmIEJFTE9XX1RIUkVTSE9MRCAobiwgTVVMX1RPT00yMl9USFJFU0hPTEQqMzYvKDM2LTExKSkpCisgICAgbjEgPSBuID4+IDE7CisgIGVsc2UgaWYgKE1BWUJFX3JhbmdlX3Rvb20yMiAmJiBCRUxPV19USFJFU0hPTEQgKG4sIE1VTF9UT09NMzNfVEhSRVNIT0xEKjM2LygzNi0xMSkpKQorICAgIG4xID0gbiAqIDExIC8gKHNpemVfdCkgMzY7CS8qIG4xIH49IG4qKDEtLjY5NC4uLikgKi8KKyAgZWxzZSBpZiAoQkVMT1dfVEhSRVNIT0xEIChuLCBNVUxfVE9PTTQ0X1RIUkVTSE9MRCo0MC8oNDAtOSkpKQorICAgIG4xID0gbiAqIDkgLyAoc2l6ZV90KSA0MDsJLyogbjEgfj0gbiooMS0uNzc1Li4uKSAqLworICBlbHNlIGlmIChCRUxPV19USFJFU0hPTEQgKG4sIE1VTF9UT09NOEhfVEhSRVNIT0xEKjEwLzkpKQorICAgIG4xID0gbiAqIDcgLyAoc2l6ZV90KSAzOTsJLyogbjEgfj0gbiooMS0uODIxLi4uKSAqLworICAvKiBuMSA9IG4gKiA0IC8gKHNpemVfdCkgMzE7CS8vIG4xIH49IG4qKDEtLjg3MS4uLikgW1RPT002Nl0gKi8KKyAgZWxzZQorICAgIG4xID0gbiAvIChzaXplX3QpIDEwOwkJLyogbjEgfj0gbiooMS0uODk5Li4uKSBbVE9PTTg4XSAqLworCisgIG4yID0gbiAtIG4xOworCisgIC8qIFNwbGl0IGFzIHggPSB4MSAyXihuMiBHTVBfTlVNQl9CSVRTKSArIHgwLAorCSAgICAgIHkgPSB5MSAyXihuMiBHTVBfTlVNQl9CSVRTKSArIHkwICovCisKKyAgLyogeDAgKiB5MCAqLworICBtcG5fbXVsX24gKHRwLCB4cCwgeXAsIG4yKTsKKyAgTVBOX0NPUFkgKHJwLCB0cCwgbjIpOworCisgIC8qIHgxICogeTAgKiAyXihuMiBHTVBfTlVNQl9CSVRTKSAqLworICBpZiAoQkVMT1dfVEhSRVNIT0xEIChuMSwgTVVMTE9fQkFTRUNBU0VfVEhSRVNIT0xEKSkKKyAgICBtcG5fbXVsX2Jhc2VjYXNlICh0cCArIG4sIHhwICsgbjIsIG4xLCB5cCwgbjEpOworICBlbHNlIGlmIChCRUxPV19USFJFU0hPTEQgKG4xLCBNVUxMT19EQ19USFJFU0hPTEQpKQorICAgIG1wbl9tdWxsb19iYXNlY2FzZSAodHAgKyBuLCB4cCArIG4yLCB5cCwgbjEpOworICBlbHNlCisgICAgbXBuX2RjX211bGxvX24gKHRwICsgbiwgeHAgKyBuMiwgeXAsIG4xLCB0cCArIG4pOworICBtcG5fYWRkX24gKHJwICsgbjIsIHRwICsgbjIsIHRwICsgbiwgbjEpOworCisgIC8qIHgwICogeTEgKiAyXihuMiBHTVBfTlVNQl9CSVRTKSAqLworICBpZiAoQkVMT1dfVEhSRVNIT0xEIChuMSwgTVVMTE9fQkFTRUNBU0VfVEhSRVNIT0xEKSkKKyAgICBtcG5fbXVsX2Jhc2VjYXNlICh0cCArIG4sIHhwLCBuMSwgeXAgKyBuMiwgbjEpOworICBlbHNlIGlmIChCRUxPV19USFJFU0hPTEQgKG4xLCBNVUxMT19EQ19USFJFU0hPTEQpKQorICAgIG1wbl9tdWxsb19iYXNlY2FzZSAodHAgKyBuLCB4cCwgeXAgKyBuMiwgbjEpOworICBlbHNlCisgICAgbXBuX2RjX211bGxvX24gKHRwICsgbiwgeHAsIHlwICsgbjIsIG4xLCB0cCArIG4pOworICBtcG5fYWRkX24gKHJwICsgbjIsIHJwICsgbjIsIHRwICsgbiwgbjEpOworfQorCisvKiBBdm9pZCB6ZXJvIGFsbG9jYXRpb25zIHdoZW4gTVVMTE9fQkFTRUNBU0VfVEhSRVNIT0xEIGlzIDAuICAqLworI2RlZmluZSBNVUxfQkFTRUNBU0VfQUxMT0MgXAorIChNVUxMT19CQVNFQ0FTRV9USFJFU0hPTERfTElNSVQgPT0gMCA/IDEgOiAyKk1VTExPX0JBU0VDQVNFX1RIUkVTSE9MRF9MSU1JVCkKKworLyogRklYTUU6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIGFjY2VwdCBhIHRlbXBvcmFyeSBhcmVhOyBkY19tdWxsb3dfbgorICAgYWNjZXB0cyBhIHBvaW50ZXIgdHAsIGFuZCBoYW5kbGUgdGhlIGNhc2UgdHAgPT0gcnAsIGRvIHRoZSBzYW1lIGhlcmUuCisgICBNYXliZSByZWNvbWJpbmUgdGhlIHR3byBmdW5jdGlvbnMuCisgICBUSElOSzogSWYgbXBuX211bF9iYXNlY2FzZSBpcyBhbHdheXMgZmFzdGVyIHRoYW4gbXBuX211bGxvX2Jhc2VjYXNlCisJICAodHlwaWNhbGx5IHRoYW5rcyB0byBtcG5fYWRkbXVsXzIpIHNob3VsZCB3ZSB1bmNvbmRpdGlvbmFsbHkgdXNlCisJICBtcG5fbXVsX24/CisqLworCit2b2lkCittcG5fbXVsbG9fbiAobXBfcHRyIHJwLCBtcF9zcmNwdHIgeHAsIG1wX3NyY3B0ciB5cCwgbXBfc2l6ZV90IG4pCit7CisgIEFTU0VSVCAobiA+PSAxKTsKKyAgQVNTRVJUICghIE1QTl9PVkVSTEFQX1AgKHJwLCBuLCB4cCwgbikpOworICBBU1NFUlQgKCEgTVBOX09WRVJMQVBfUCAocnAsIG4sIHlwLCBuKSk7CisKKyAgaWYgKEJFTE9XX1RIUkVTSE9MRCAobiwgTVVMTE9fQkFTRUNBU0VfVEhSRVNIT0xEKSkKKyAgICB7CisgICAgICAvKiBBbGxvY2F0ZSB3b3Jrc3BhY2Ugb2YgZml4ZWQgc2l6ZSBvbiBzdGFjazogZmFzdCEgKi8KKyAgICAgIG1wX2xpbWJfdCB0cFtNVUxfQkFTRUNBU0VfQUxMT0NdOworICAgICAgbXBuX211bF9iYXNlY2FzZSAodHAsIHhwLCBuLCB5cCwgbik7CisgICAgICBNUE5fQ09QWSAocnAsIHRwLCBuKTsKKyAgICB9CisgIGVsc2UgaWYgKEJFTE9XX1RIUkVTSE9MRCAobiwgTVVMTE9fRENfVEhSRVNIT0xEKSkKKyAgICB7CisgICAgICBtcG5fbXVsbG9fYmFzZWNhc2UgKHJwLCB4cCwgeXAsIG4pOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIG1wX3B0ciB0cDsKKyAgICAgIFRNUF9ERUNMOworICAgICAgVE1QX01BUks7CisgICAgICB0cCA9IFRNUF9BTExPQ19MSU1CUyAobXBuX211bGxvX25faXRjaCAobikpOworICAgICAgaWYgKEJFTE9XX1RIUkVTSE9MRCAobiwgTVVMTE9fTVVMX05fVEhSRVNIT0xEKSkKKwl7CisJICBtcG5fZGNfbXVsbG9fbiAocnAsIHhwLCB5cCwgbiwgdHApOworCX0KKyAgICAgIGVsc2UKKwl7CisJICAvKiBGb3IgcmVhbGx5IGxhcmdlIG9wZXJhbmRzLCB1c2UgcGxhaW4gbXBuX211bF9uIGJ1dCB0aHJvdyBhd2F5IHVwcGVyIG4KKwkgICAgIGxpbWJzIG9mIHJlc3VsdC4gICovCisjaWYgIVRVTkVfUFJPR1JBTV9CVUlMRCAmJiAoTVVMTE9fTVVMX05fVEhSRVNIT0xEID4gTVVMX0ZGVF9USFJFU0hPTEQpCisJICBtcG5fZmZ0X211bCAodHAsIHhwLCBuLCB5cCwgbik7CisjZWxzZQorCSAgbXBuX211bF9uICh0cCwgeHAsIHlwLCBuKTsKKyNlbmRpZgorCSAgTVBOX0NPUFkgKHJwLCB0cCwgbik7CisJfQorICAgICAgVE1QX0ZSRUU7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL211bG1pZC5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL211bG1pZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNWM1ZmIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvbXVsbWlkLmMKQEAgLTAsMCArMSwyNTUgQEAKKy8qIG1wbl9tdWxtaWQgLS0gbWlkZGxlIHByb2R1Y3QKKworICAgQ29udHJpYnV0ZWQgYnkgRGF2aWQgSGFydmV5LgorCisgICBUSEUgRlVOQ1RJT04gSU4gVEhJUyBGSUxFIElTIElOVEVSTkFMIFdJVEggQSBNVVRBQkxFIElOVEVSRkFDRS4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggSVQgVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuICBJTiBGQUNULCBJVCBJUyBBTE1PU1QKKyAgIEdVQVJBTlRFRUQgVEhBVCBJVCdMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEgRlVUVVJFIEdOVSBNUCBSRUxFQVNFLgorCitDb3B5cmlnaHQgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworCisjZGVmaW5lIENIVU5LICgyMDAgKyBNVUxNSURfVE9PTTQyX1RIUkVTSE9MRCkKKworCit2b2lkCittcG5fbXVsbWlkIChtcF9wdHIgcnAsCisgICAgICAgICAgICBtcF9zcmNwdHIgYXAsIG1wX3NpemVfdCBhbiwKKyAgICAgICAgICAgIG1wX3NyY3B0ciBicCwgbXBfc2l6ZV90IGJuKQoreworICBtcF9zaXplX3Qgcm4sIGs7CisgIG1wX3B0ciBzY3JhdGNoLCB0ZW1wOworCisgIEFTU0VSVCAoYW4gPj0gYm4pOworICBBU1NFUlQgKGJuID49IDEpOworICBBU1NFUlQgKCEgTVBOX09WRVJMQVBfUCAocnAsIGFuIC0gYm4gKyAzLCBhcCwgYW4pKTsKKyAgQVNTRVJUICghIE1QTl9PVkVSTEFQX1AgKHJwLCBhbiAtIGJuICsgMywgYnAsIGJuKSk7CisKKyAgaWYgKGJuIDwgTVVMTUlEX1RPT000Ml9USFJFU0hPTEQpCisgICAgeworICAgICAgLyogcmVnaW9uIG5vdCB0YWxsIGVub3VnaCB0byBtYWtlIHRvb200MiB3b3J0aHdoaWxlIGZvciBhbnkgcG9ydGlvbiAqLworCisgICAgICBpZiAoYW4gPCBDSFVOSykKKwl7CisJICAvKiByZWdpb24gbm90IHRvbyB3aWRlIGVpdGhlciwganVzdCBjYWxsIGJhc2VjYXNlIGRpcmVjdGx5ICovCisJICBtcG5fbXVsbWlkX2Jhc2VjYXNlIChycCwgYXAsIGFuLCBicCwgYm4pOworCSAgcmV0dXJuOworCX0KKworICAgICAgLyogUmVnaW9uIHF1aXRlIHdpZGUuIEZvciBiZXR0ZXIgbG9jYWxpdHksIHVzZSBiYXNlY2FzZSBvbiBjaHVua3M6CisKKwkgQUFBQkJCQ0MuLgorCSAuQUFBQkJCQ0MuCisJIC4uQUFBQkJCQ0MKKyAgICAgICovCisKKyAgICAgIGsgPSBDSFVOSyAtIGJuICsgMTsgICAgLyogbnVtYmVyIG9mIGRpYWdvbmFscyBwZXIgY2h1bmsgKi8KKworICAgICAgLyogZmlyc3QgY2h1bmsgKG1hcmtlZCBBIGluIHRoZSBhYm92ZSBkaWFncmFtKSAqLworICAgICAgbXBuX211bG1pZF9iYXNlY2FzZSAocnAsIGFwLCBDSFVOSywgYnAsIGJuKTsKKworICAgICAgLyogcmVtYWluaW5nIGNodW5rcyAoQiwgQywgZXRjKSAqLworICAgICAgYW4gLT0gazsKKworICAgICAgd2hpbGUgKGFuID49IENIVU5LKQorCXsKKwkgIG1wX2xpbWJfdCB0MCwgdDEsIGN5OworCSAgYXAgKz0gaywgcnAgKz0gazsKKwkgIHQwID0gcnBbMF0sIHQxID0gcnBbMV07CisJICBtcG5fbXVsbWlkX2Jhc2VjYXNlIChycCwgYXAsIENIVU5LLCBicCwgYm4pOworCSAgQUREQ19MSU1CIChjeSwgcnBbMF0sIHJwWzBdLCB0MCk7ICAgIC8qIGFkZCBiYWNrIHNhdmVkIGxpbWJzICovCisJICBNUE5fSU5DUl9VIChycCArIDEsIGsgKyAxLCB0MSArIGN5KTsKKwkgIGFuIC09IGs7CisJfQorCisgICAgICBpZiAoYW4gPj0gYm4pCisJeworCSAgLyogbGFzdCByZW1haW5pbmcgY2h1bmsgKi8KKwkgIG1wX2xpbWJfdCB0MCwgdDEsIGN5OworCSAgYXAgKz0gaywgcnAgKz0gazsKKwkgIHQwID0gcnBbMF0sIHQxID0gcnBbMV07CisJICBtcG5fbXVsbWlkX2Jhc2VjYXNlIChycCwgYXAsIGFuLCBicCwgYm4pOworCSAgQUREQ19MSU1CIChjeSwgcnBbMF0sIHJwWzBdLCB0MCk7CisJICBNUE5fSU5DUl9VIChycCArIDEsIGFuIC0gYm4gKyAyLCB0MSArIGN5KTsKKwl9CisKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgLyogcmVnaW9uIGlzIHRhbGwgZW5vdWdoIGZvciB0b29tNDIgKi8KKworICBybiA9IGFuIC0gYm4gKyAxOworCisgIGlmIChybiA8IE1VTE1JRF9UT09NNDJfVEhSRVNIT0xEKQorICAgIHsKKyAgICAgIC8qIHJlZ2lvbiBub3Qgd2lkZSBlbm91Z2ggdG8gbWFrZSB0b29tNDIgd29ydGh3aGlsZSBmb3IgYW55IHBvcnRpb24gKi8KKworICAgICAgVE1QX0RFQ0w7CisKKyAgICAgIGlmIChibiA8IENIVU5LKQorCXsKKwkgIC8qIHJlZ2lvbiBub3QgdG9vIHRhbGwgZWl0aGVyLCBqdXN0IGNhbGwgYmFzZWNhc2UgZGlyZWN0bHkgKi8KKwkgIG1wbl9tdWxtaWRfYmFzZWNhc2UgKHJwLCBhcCwgYW4sIGJwLCBibik7CisJICByZXR1cm47CisJfQorCisgICAgICAvKiBSZWdpb24gcXVpdGUgdGFsbC4gRm9yIGJldHRlciBsb2NhbGl0eSwgdXNlIGJhc2VjYXNlIG9uIGNodW5rczoKKworCSBBQUFBQS4uLi4KKwkgLkFBQUFBLi4uCisJIC4uQkJCQkIuLgorCSAuLi5CQkJCQi4KKwkgLi4uLkNDQ0NDCisgICAgICAqLworCisgICAgICBUTVBfTUFSSzsKKworICAgICAgdGVtcCA9IFRNUF9BTExPQ19MSU1CUyAocm4gKyAyKTsKKworICAgICAgLyogZmlyc3QgY2h1bmsgKG1hcmtlZCBBIGluIHRoZSBhYm92ZSBkaWFncmFtKSAqLworICAgICAgYnAgKz0gYm4gLSBDSFVOSywgYW4gLT0gYm4gLSBDSFVOSzsKKyAgICAgIG1wbl9tdWxtaWRfYmFzZWNhc2UgKHJwLCBhcCwgYW4sIGJwLCBDSFVOSyk7CisKKyAgICAgIC8qIHJlbWFpbmluZyBjaHVua3MgKEIsIEMsIGV0YykgKi8KKyAgICAgIGJuIC09IENIVU5LOworCisgICAgICB3aGlsZSAoYm4gPj0gQ0hVTkspCisJeworCSAgYXAgKz0gQ0hVTkssIGJwIC09IENIVU5LOworCSAgbXBuX211bG1pZF9iYXNlY2FzZSAodGVtcCwgYXAsIGFuLCBicCwgQ0hVTkspOworCSAgbXBuX2FkZF9uIChycCwgcnAsIHRlbXAsIHJuICsgMik7CisJICBibiAtPSBDSFVOSzsKKwl9CisKKyAgICAgIGlmIChibikKKwl7CisJICAvKiBsYXN0IHJlbWFpbmluZyBjaHVuayAqLworCSAgYXAgKz0gQ0hVTkssIGJwIC09IGJuOworCSAgbXBuX211bG1pZF9iYXNlY2FzZSAodGVtcCwgYXAsIHJuICsgYm4gLSAxLCBicCwgYm4pOworCSAgbXBuX2FkZF9uIChycCwgcnAsIHRlbXAsIHJuICsgMik7CisJfQorCisgICAgICBUTVBfRlJFRTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgLyogd2UncmUgZGVmaW5pdGVseSBnb2luZyB0byB1c2UgdG9vbTQyIHNvbWV3aGVyZSAqLworCisgIGlmIChibiA+IHJuKQorICAgIHsKKyAgICAgIC8qIHNsaWNlIHJlZ2lvbiBpbnRvIGNodW5rcywgdXNlIHRvb200MiBvbiBhbGwgY2h1bmtzIGV4Y2VwdCBwb3NzaWJseQorCSB0aGUgbGFzdDoKKworICAgICAgICAgQUEuLi4uCisgICAgICAgICAuQUEuLi4KKyAgICAgICAgIC4uQkIuLgorICAgICAgICAgLi4uQkIuCisgICAgICAgICAuLi4uQ0MKKyAgICAgICovCisKKyAgICAgIFRNUF9ERUNMOworICAgICAgVE1QX01BUks7CisKKyAgICAgIHRlbXAgPSBUTVBfQUxMT0NfTElNQlMgKHJuICsgMiArIG1wbl90b29tNDJfbXVsbWlkX2l0Y2ggKHJuKSk7CisgICAgICBzY3JhdGNoID0gdGVtcCArIHJuICsgMjsKKworICAgICAgLyogZmlyc3QgY2h1bmsgKG1hcmtlZCBBIGluIHRoZSBhYm92ZSBkaWFncmFtKSAqLworICAgICAgYnAgKz0gYm4gLSBybjsKKyAgICAgIG1wbl90b29tNDJfbXVsbWlkIChycCwgYXAsIGJwLCBybiwgc2NyYXRjaCk7CisKKyAgICAgIC8qIHJlbWFpbmluZyBjaHVua3MgKEIsIEMsIGV0YykgKi8KKyAgICAgIGJuIC09IHJuOworCisgICAgICB3aGlsZSAoYm4gPj0gcm4pCisgICAgICAgIHsKKyAgICAgICAgICBhcCArPSBybiwgYnAgLT0gcm47CisJICBtcG5fdG9vbTQyX211bG1pZCAodGVtcCwgYXAsIGJwLCBybiwgc2NyYXRjaCk7CisgICAgICAgICAgbXBuX2FkZF9uIChycCwgcnAsIHRlbXAsIHJuICsgMik7CisgICAgICAgICAgYm4gLT0gcm47CisgICAgICAgIH0KKworICAgICAgaWYgKGJuKQorICAgICAgICB7CisgICAgICAgICAgLyogbGFzdCByZW1haW5pbmcgY2h1bmsgKi8KKyAgICAgICAgICBhcCArPSBybiwgYnAgLT0gYm47CisJICBtcG5fbXVsbWlkICh0ZW1wLCBhcCwgcm4gKyBibiAtIDEsIGJwLCBibik7CisgICAgICAgICAgbXBuX2FkZF9uIChycCwgcnAsIHRlbXAsIHJuICsgMik7CisgICAgICAgIH0KKworICAgICAgVE1QX0ZSRUU7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogc2xpY2UgcmVnaW9uIGludG8gY2h1bmtzLCB1c2UgdG9vbTQyIG9uIGFsbCBjaHVua3MgZXhjZXB0IHBvc3NpYmx5CisJIHRoZSBsYXN0OgorCisgICAgICAgICBBQUFCQkJDQy4uCisgICAgICAgICAuQUFBQkJCQ0MuCisgICAgICAgICAuLkFBQUJCQkNDCisgICAgICAqLworCisgICAgICBUTVBfREVDTDsKKyAgICAgIFRNUF9NQVJLOworCisgICAgICBzY3JhdGNoID0gVE1QX0FMTE9DX0xJTUJTIChtcG5fdG9vbTQyX211bG1pZF9pdGNoIChibikpOworCisgICAgICAvKiBmaXJzdCBjaHVuayAobWFya2VkIEEgaW4gdGhlIGFib3ZlIGRpYWdyYW0pICovCisgICAgICBtcG5fdG9vbTQyX211bG1pZCAocnAsIGFwLCBicCwgYm4sIHNjcmF0Y2gpOworCisgICAgICAvKiByZW1haW5pbmcgY2h1bmtzIChCLCBDLCBldGMpICovCisgICAgICBybiAtPSBibjsKKworICAgICAgd2hpbGUgKHJuID49IGJuKQorICAgICAgICB7CisJICBtcF9saW1iX3QgdDAsIHQxLCBjeTsKKyAgICAgICAgICBhcCArPSBibiwgcnAgKz0gYm47CisgICAgICAgICAgdDAgPSBycFswXSwgdDEgPSBycFsxXTsKKyAgICAgICAgICBtcG5fdG9vbTQyX211bG1pZCAocnAsIGFwLCBicCwgYm4sIHNjcmF0Y2gpOworCSAgQUREQ19MSU1CIChjeSwgcnBbMF0sIHJwWzBdLCB0MCk7ICAgICAvKiBhZGQgYmFjayBzYXZlZCBsaW1icyAqLworCSAgTVBOX0lOQ1JfVSAocnAgKyAxLCBibiArIDEsIHQxICsgY3kpOworCSAgcm4gLT0gYm47CisgICAgICAgIH0KKworICAgICAgVE1QX0ZSRUU7CisKKyAgICAgIGlmIChybikKKyAgICAgICAgeworICAgICAgICAgIC8qIGxhc3QgcmVtYWluaW5nIGNodW5rICovCisJICBtcF9saW1iX3QgdDAsIHQxLCBjeTsKKyAgICAgICAgICBhcCArPSBibiwgcnAgKz0gYm47CisgICAgICAgICAgdDAgPSBycFswXSwgdDEgPSBycFsxXTsKKyAgICAgICAgICBtcG5fbXVsbWlkIChycCwgYXAsIHJuICsgYm4gLSAxLCBicCwgYm4pOworCSAgQUREQ19MSU1CIChjeSwgcnBbMF0sIHJwWzBdLCB0MCk7CisJICBNUE5fSU5DUl9VIChycCArIDEsIHJuICsgMSwgdDEgKyBjeSk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvbXVsbWlkX2Jhc2VjYXNlLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvbXVsbWlkX2Jhc2VjYXNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU0MzRlYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9tdWxtaWRfYmFzZWNhc2UuYwpAQCAtMCwwICsxLDgyIEBACisvKiBtcG5fbXVsbWlkX2Jhc2VjYXNlIC0tIGNsYXNzaWNhbCBtaWRkbGUgcHJvZHVjdCBhbGdvcml0aG0KKworICAgQ29udHJpYnV0ZWQgYnkgRGF2aWQgSGFydmV5LgorCisgICBUSEUgRlVOQ1RJT04gSU4gVEhJUyBGSUxFIElTIElOVEVSTkFMIFdJVEggQSBNVVRBQkxFIElOVEVSRkFDRS4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggSVQgVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuICBJTiBGQUNULCBJVCBJUyBBTE1PU1QKKyAgIEdVQVJBTlRFRUQgVEhBVCBJVCdMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEgRlVUVVJFIEdOVSBNUCBSRUxFQVNFLgorCitDb3B5cmlnaHQgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKyNpbmNsdWRlICJsb25nbG9uZy5oIgorCisvKiBNaWRkbGUgcHJvZHVjdCBvZiB7dXAsdW59IGFuZCB7dnAsdm59LCB3cml0ZSByZXN1bHQgdG8ge3JwLHVuLXZuKzN9LgorICAgTXVzdCBoYXZlIHVuID49IHZuID49IDEuCisKKyAgIE5laXRoZXIgaW5wdXQgYnVmZmVyIG1heSBvdmVybGFwIHdpdGggdGhlIG91dHB1dCBidWZmZXIuICovCisKK3ZvaWQKK21wbl9tdWxtaWRfYmFzZWNhc2UgKG1wX3B0ciBycCwKKyAgICAgICAgICAgICAgICAgICAgIG1wX3NyY3B0ciB1cCwgbXBfc2l6ZV90IHVuLAorICAgICAgICAgICAgICAgICAgICAgbXBfc3JjcHRyIHZwLCBtcF9zaXplX3Qgdm4pCit7CisgIG1wX2xpbWJfdCBsbywgaGk7ICAvKiBsYXN0IHR3byBsaW1icyBvZiBvdXRwdXQgKi8KKyAgbXBfbGltYl90IGN5OworCisgIEFTU0VSVCAodW4gPj0gdm4pOworICBBU1NFUlQgKHZuID49IDEpOworICBBU1NFUlQgKCEgTVBOX09WRVJMQVBfUCAocnAsIHVuIC0gdm4gKyAzLCB1cCwgdW4pKTsKKyAgQVNTRVJUICghIE1QTl9PVkVSTEFQX1AgKHJwLCB1biAtIHZuICsgMywgdnAsIHZuKSk7CisKKyAgdXAgKz0gdm4gLSAxOworICB1biAtPSB2biAtIDE7CisKKyAgLyogbXVsdGlwbHkgYnkgZmlyc3QgbGltYiwgc3RvcmUgcmVzdWx0ICovCisgIGxvID0gbXBuX211bF8xIChycCwgdXAsIHVuLCB2cFswXSk7CisgIGhpID0gMDsKKworICAvKiBhY2N1bXVsYXRlIHJlbWFpbmluZyByb3dzICovCisgIGZvciAodm4tLTsgdm47IHZuLS0pCisgICAgeworICAgICAgdXAtLSwgdnArKzsKKyAgICAgIGN5ID0gbXBuX2FkZG11bF8xIChycCwgdXAsIHVuLCB2cFswXSk7CisgICAgICBhZGRfc3NhYWFhIChoaSwgbG8sIGhpLCBsbywgQ05TVF9MSU1CKDApLCBjeSk7CisgICAgfQorCisgIC8qIHN0b3JlIGZpbmFsIGxpbWJzICovCisjaWYgR01QX05BSUxfQklUUyAhPSAwCisgIGhpID0gKGhpIDw8IEdNUF9OQUlMX0JJVFMpICsgKGxvID4+IEdNUF9OVU1CX0JJVFMpOworICBsbyAmPSBHTVBfTlVNQl9NQVNLOworI2VuZGlmCisKKyAgcnBbdW5dID0gbG87CisgIHJwW3VuICsgMV0gPSBoaTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9tdWxtaWRfbi5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL211bG1pZF9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM3ZThmMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9tdWxtaWRfbi5jCkBAIC0wLDAgKzEsNjEgQEAKKy8qIG1wbl9tdWxtaWRfbiAtLSBiYWxhbmNlZCBtaWRkbGUgcHJvZHVjdAorCisgICBDb250cmlidXRlZCBieSBEYXZpZCBIYXJ2ZXkuCisKKyAgIFRIRSBGVU5DVElPTiBJTiBUSElTIEZJTEUgSVMgSU5URVJOQUwgV0lUSCBBIE1VVEFCTEUgSU5URVJGQUNFLiAgSVQgSVMgT05MWQorICAgU0FGRSBUTyBSRUFDSCBJVCBUSFJPVUdIIERPQ1VNRU5URUQgSU5URVJGQUNFUy4gIElOIEZBQ1QsIElUIElTIEFMTU9TVAorICAgR1VBUkFOVEVFRCBUSEFUIElUJ0xMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR05VIE1QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCisKK3ZvaWQKK21wbl9tdWxtaWRfbiAobXBfcHRyIHJwLCBtcF9zcmNwdHIgYXAsIG1wX3NyY3B0ciBicCwgbXBfc2l6ZV90IG4pCit7CisgIEFTU0VSVCAobiA+PSAxKTsKKyAgQVNTRVJUICghIE1QTl9PVkVSTEFQX1AgKHJwLCBuICsgMiwgYXAsIDIqbiAtIDEpKTsKKyAgQVNTRVJUICghIE1QTl9PVkVSTEFQX1AgKHJwLCBuICsgMiwgYnAsIG4pKTsKKworICBpZiAobiA8IE1VTE1JRF9UT09NNDJfVEhSRVNIT0xEKQorICAgIHsKKyAgICAgIG1wbl9tdWxtaWRfYmFzZWNhc2UgKHJwLCBhcCwgMipuIC0gMSwgYnAsIG4pOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIG1wX3B0ciBzY3JhdGNoOworICAgICAgVE1QX0RFQ0w7CisgICAgICBUTVBfTUFSSzsKKyAgICAgIHNjcmF0Y2ggPSBUTVBfQUxMT0NfTElNQlMgKG1wbl90b29tNDJfbXVsbWlkX2l0Y2ggKG4pKTsKKyAgICAgIG1wbl90b29tNDJfbXVsbWlkIChycCwgYXAsIGJwLCBuLCBzY3JhdGNoKTsKKyAgICAgIFRNUF9GUkVFOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9tdWxtb2RfYm5tMS5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL211bG1vZF9ibm0xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY5YmRiYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9tdWxtb2RfYm5tMS5jCkBAIC0wLDAgKzEsMzU0IEBACisvKiBtdWxtb2RfYm5tMS5jIC0tIG11bHRpcGxpY2F0aW9uIG1vZCBCXm4tMS4KKworICAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IE5pZWxzIE3DtmxsZXIsIFRvcmJqb3JuIEdyYW5sdW5kIGFuZAorICAgTWFyY28gQm9kcmF0by4KKworICAgVEhFIEZVTkNUSU9OUyBJTiBUSElTIEZJTEUgQVJFIElOVEVSTkFMIFdJVEggTVVUQUJMRSBJTlRFUkZBQ0VTLiAgSVQgSVMgT05MWQorICAgU0FGRSBUTyBSRUFDSCBUSEVNIFRIUk9VR0ggRE9DVU1FTlRFRCBJTlRFUkZBQ0VTLiAgSU4gRkFDVCwgSVQgSVMgQUxNT1NUCisgICBHVUFSQU5URUVEIFRIQVQgVEhFWSBXSUxMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR05VIE1QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAyMDA5LCAyMDEwLCAyMDEyLCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorI2luY2x1ZGUgImxvbmdsb25nLmgiCisKKy8qIElucHV0cyBhcmUge2FwLHJufSBhbmQge2JwLHJufTsgb3V0cHV0IGlzIHtycCxybn0sIGNvbXB1dGF0aW9uIGlzCisgICBtb2QgQl5ybiAtIDEsIGFuZCB2YWx1ZXMgYXJlIHNlbWktbm9ybWFsaXNlZDsgemVybyBpcyByZXByZXNlbnRlZAorICAgYXMgZWl0aGVyIDAgb3IgQl5uIC0gMS4gIE5lZWRzIGEgc2NyYXRjaCBvZiAycm4gbGltYnMgYXQgdHAuCisgICB0cD09cnAgaXMgYWxsb3dlZC4gKi8KK3ZvaWQKK21wbl9iY19tdWxtb2RfYm5tMSAobXBfcHRyIHJwLCBtcF9zcmNwdHIgYXAsIG1wX3NyY3B0ciBicCwgbXBfc2l6ZV90IHJuLAorCQkgICAgbXBfcHRyIHRwKQoreworICBtcF9saW1iX3QgY3k7CisKKyAgQVNTRVJUICgwIDwgcm4pOworCisgIG1wbl9tdWxfbiAodHAsIGFwLCBicCwgcm4pOworICBjeSA9IG1wbl9hZGRfbiAocnAsIHRwLCB0cCArIHJuLCBybik7CisgIC8qIElmIGN5ID09IDEsIHRoZW4gdGhlIHZhbHVlIG9mIHJwIGlzIGF0IG1vc3QgQl5ybiAtIDIsIHNvIHRoZXJlIGNhbgorICAgKiBiZSBubyBvdmVyZmxvdyB3aGVuIGFkZGluZyBpbiB0aGUgY2FycnkuICovCisgIE1QTl9JTkNSX1UgKHJwLCBybiwgY3kpOworfQorCisKKy8qIElucHV0cyBhcmUge2FwLHJuKzF9IGFuZCB7YnAscm4rMX07IG91dHB1dCBpcyB7cnAscm4rMX0sIGluCisgICBzZW1pLW5vcm1hbGlzZWQgcmVwcmVzZW50YXRpb24sIGNvbXB1dGF0aW9uIGlzIG1vZCBCXnJuICsgMS4gTmVlZHMKKyAgIGEgc2NyYXRjaCBhcmVhIG9mIDJybiArIDIgbGltYnMgYXQgdHA7IHRwID09IHJwIGlzIGFsbG93ZWQuCisgICBPdXRwdXQgaXMgbm9ybWFsaXNlZC4gKi8KK3N0YXRpYyB2b2lkCittcG5fYmNfbXVsbW9kX2JucDEgKG1wX3B0ciBycCwgbXBfc3JjcHRyIGFwLCBtcF9zcmNwdHIgYnAsIG1wX3NpemVfdCBybiwKKwkJICAgIG1wX3B0ciB0cCkKK3sKKyAgbXBfbGltYl90IGN5OworCisgIEFTU0VSVCAoMCA8IHJuKTsKKworICBtcG5fbXVsX24gKHRwLCBhcCwgYnAsIHJuICsgMSk7CisgIEFTU0VSVCAodHBbMipybisxXSA9PSAwKTsKKyAgQVNTRVJUICh0cFsyKnJuXSA8IEdNUF9OVU1CX01BWCk7CisgIGN5ID0gdHBbMipybl0gKyBtcG5fc3ViX24gKHJwLCB0cCwgdHArcm4sIHJuKTsKKyAgcnBbcm5dID0gMDsKKyAgTVBOX0lOQ1JfVSAocnAsIHJuKzEsIGN5KTsKK30KKworCisvKiBDb21wdXRlcyB7cnAsTUlOKHJuLGFuK2JuKX0gPC0ge2FwLGFufSp7YnAsYm59IE1vZChCXnJuLTEpCisgKgorICogVGhlIHJlc3VsdCBpcyBleHBlY3RlZCB0byBiZSBaRVJPIGlmIGFuZCBvbmx5IGlmIG9uZSBvZiB0aGUgb3BlcmFuZAorICogYWxyZWFkeSBpcy4gT3RoZXJ3aXNlIHRoZSBjbGFzcyBbMF0gTW9kKEJecm4tMSkgaXMgcmVwcmVzZW50ZWQgYnkKKyAqIEJecm4tMS4gVGhpcyBzaG91bGQgbm90IGJlIGEgcHJvYmxlbSBpZiBtdWxtb2RfYm5tMSBpcyB1c2VkIHRvCisgKiBjb21iaW5lIHJlc3VsdHMgYW5kIG9idGFpbiBhIG5hdHVyYWwgbnVtYmVyIHdoZW4gb25lIGtub3dzIGluCisgKiBhZHZhbmNlIHRoYXQgdGhlIGZpbmFsIHZhbHVlIGlzIGxlc3MgdGhhbiAoQl5ybi0xKS4KKyAqIE1vcmVvdmVyIGl0IHNob3VsZCBub3QgYmUgYSBwcm9ibGVtIGlmIG11bG1vZF9ibm0xIGlzIHVzZWQgdG8KKyAqIGNvbXB1dGUgdGhlIGZ1bGwgcHJvZHVjdCB3aXRoIGFuK2JuIDw9IHJuLCBiZWNhdXNlIHRoaXMgY29uZGl0aW9uCisgKiBpbXBsaWVzIChCXmFuLTEpKEJeYm4tMSkgPCAoQl5ybi0xKSAuCisgKgorICogUmVxdWlyZXMgMCA8IGJuIDw9IGFuIDw9IHJuIGFuZCBhbiArIGJuID4gcm4vMgorICogU2NyYXRjaCBuZWVkOiBybiArIChuZWVkIGZvciByZWN1cnNpdmUgY2FsbCBPUiBybiArIDQpLiBUaGlzIGdpdmVzCisgKgorICogUyhuKSA8PSBybiArIE1BWCAocm4gKyA0LCBTKG4vMikpIDw9IDJybiArIDQKKyAqLwordm9pZAorbXBuX211bG1vZF9ibm0xIChtcF9wdHIgcnAsIG1wX3NpemVfdCBybiwgbXBfc3JjcHRyIGFwLCBtcF9zaXplX3QgYW4sIG1wX3NyY3B0ciBicCwgbXBfc2l6ZV90IGJuLCBtcF9wdHIgdHApCit7CisgIEFTU0VSVCAoMCA8IGJuKTsKKyAgQVNTRVJUIChibiA8PSBhbik7CisgIEFTU0VSVCAoYW4gPD0gcm4pOworCisgIGlmICgocm4gJiAxKSAhPSAwIHx8IEJFTE9XX1RIUkVTSE9MRCAocm4sIE1VTE1PRF9CTk0xX1RIUkVTSE9MRCkpCisgICAgeworICAgICAgaWYgKFVOTElLRUxZIChibiA8IHJuKSkKKwl7CisJICBpZiAoVU5MSUtFTFkgKGFuICsgYm4gPD0gcm4pKQorCSAgICB7CisJICAgICAgbXBuX211bCAocnAsIGFwLCBhbiwgYnAsIGJuKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgbXBfbGltYl90IGN5OworCSAgICAgIG1wbl9tdWwgKHRwLCBhcCwgYW4sIGJwLCBibik7CisJICAgICAgY3kgPSBtcG5fYWRkIChycCwgdHAsIHJuLCB0cCArIHJuLCBhbiArIGJuIC0gcm4pOworCSAgICAgIE1QTl9JTkNSX1UgKHJwLCBybiwgY3kpOworCSAgICB9CisJfQorICAgICAgZWxzZQorCW1wbl9iY19tdWxtb2RfYm5tMSAocnAsIGFwLCBicCwgcm4sIHRwKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBtcF9zaXplX3QgbjsKKyAgICAgIG1wX2xpbWJfdCBjeTsKKyAgICAgIG1wX2xpbWJfdCBoaTsKKworICAgICAgbiA9IHJuID4+IDE7CisKKyAgICAgIC8qIFdlIG5lZWQgYXQgbGVhc3QgYW4gKyBibiA+PSBuLCB0byBiZSBhYmxlIHRvIGZpdCBvbmUgb2YgdGhlCisJIHJlY3Vyc2l2ZSBwcm9kdWN0cyBhdCBycC4gUmVxdWlyaW5nIHN0cmljdCBpbmVxdWFsaXR5IG1ha2VzCisJIHRoZSBjb2RlIHNsaWdodGx5IHNpbXBsZXIuIElmIGRlc2lyZWQsIHdlIGNvdWxkIGF2b2lkIHRoaXMKKwkgcmVzdHJpY3Rpb24gYnkgaW5pdGlhbGx5IGhhbHZpbmcgcm4gYXMgbG9uZyBhcyBybiBpcyBldmVuIGFuZAorCSBhbiArIGJuIDw9IHJuLzIuICovCisKKyAgICAgIEFTU0VSVCAoYW4gKyBibiA+IG4pOworCisgICAgICAvKiBDb21wdXRlIHhtID0gYSpiIG1vZCAoQl5uIC0gMSksIHhwID0gYSpiIG1vZCAoQl5uICsgMSkKKwkgYW5kIGNydCB0b2dldGhlciBhcworCisJIHggPSAteHAgKiBCXm4gKyAoQl5uICsgMSkgKiBbICh4cCArIHhtKS8yIG1vZCAoQl5uLTEpXQorICAgICAgKi8KKworI2RlZmluZSBhMCBhcAorI2RlZmluZSBhMSAoYXAgKyBuKQorI2RlZmluZSBiMCBicAorI2RlZmluZSBiMSAoYnAgKyBuKQorCisjZGVmaW5lIHhwICB0cAkvKiAybiArIDIgKi8KKyAgICAgIC8qIGFtMSAgbWF5YmUgaW4ge3hwLCBufSAqLworICAgICAgLyogYm0xICBtYXliZSBpbiB7eHAgKyBuLCBufSAqLworI2RlZmluZSBzcDEgKHRwICsgMipuICsgMikKKyAgICAgIC8qIGFwMSAgbWF5YmUgaW4ge3NwMSwgbiArIDF9ICovCisgICAgICAvKiBicDEgIG1heWJlIGluIHtzcDEgKyBuICsgMSwgbiArIDF9ICovCisKKyAgICAgIHsKKwltcF9zcmNwdHIgYW0xLCBibTE7CisJbXBfc2l6ZV90IGFubSwgYm5tOworCW1wX3B0ciBzbzsKKworCWJtMSA9IGIwOworCWJubSA9IGJuOworCWlmIChMSUtFTFkgKGFuID4gbikpCisJICB7CisJICAgIGFtMSA9IHhwOworCSAgICBjeSA9IG1wbl9hZGQgKHhwLCBhMCwgbiwgYTEsIGFuIC0gbik7CisJICAgIE1QTl9JTkNSX1UgKHhwLCBuLCBjeSk7CisJICAgIGFubSA9IG47CisJICAgIHNvID0geHAgKyBuOworCSAgICBpZiAoTElLRUxZIChibiA+IG4pKQorCSAgICAgIHsKKwkJYm0xID0gc287CisJCWN5ID0gbXBuX2FkZCAoc28sIGIwLCBuLCBiMSwgYm4gLSBuKTsKKwkJTVBOX0lOQ1JfVSAoc28sIG4sIGN5KTsKKwkJYm5tID0gbjsKKwkJc28gKz0gbjsKKwkgICAgICB9CisJICB9CisJZWxzZQorCSAgeworCSAgICBzbyA9IHhwOworCSAgICBhbTEgPSBhMDsKKwkgICAgYW5tID0gYW47CisJICB9CisKKwltcG5fbXVsbW9kX2JubTEgKHJwLCBuLCBhbTEsIGFubSwgYm0xLCBibm0sIHNvKTsKKyAgICAgIH0KKworICAgICAgeworCWludCAgICAgICBrOworCW1wX3NyY3B0ciBhcDEsIGJwMTsKKwltcF9zaXplX3QgYW5wLCBibnA7CisKKwlicDEgPSBiMDsKKwlibnAgPSBibjsKKwlpZiAoTElLRUxZIChhbiA+IG4pKSB7CisJICBhcDEgPSBzcDE7CisJICBjeSA9IG1wbl9zdWIgKHNwMSwgYTAsIG4sIGExLCBhbiAtIG4pOworCSAgc3AxW25dID0gMDsKKwkgIE1QTl9JTkNSX1UgKHNwMSwgbiArIDEsIGN5KTsKKwkgIGFucCA9IG4gKyBhcDFbbl07CisJICBpZiAoTElLRUxZIChibiA+IG4pKSB7CisJICAgIGJwMSA9IHNwMSArIG4gKyAxOworCSAgICBjeSA9IG1wbl9zdWIgKHNwMSArIG4gKyAxLCBiMCwgbiwgYjEsIGJuIC0gbik7CisJICAgIHNwMVsyKm4rMV0gPSAwOworCSAgICBNUE5fSU5DUl9VIChzcDEgKyBuICsgMSwgbiArIDEsIGN5KTsKKwkgICAgYm5wID0gbiArIGJwMVtuXTsKKwkgIH0KKwl9IGVsc2UgeworCSAgYXAxID0gYTA7CisJICBhbnAgPSBhbjsKKwl9CisKKwlpZiAoQkVMT1dfVEhSRVNIT0xEIChuLCBNVUxfRkZUX01PREZfVEhSRVNIT0xEKSkKKwkgIGs9MDsKKwllbHNlCisJICB7CisJICAgIGludCBtYXNrOworCSAgICBrID0gbXBuX2ZmdF9iZXN0X2sgKG4sIDApOworCSAgICBtYXNrID0gKDE8PGspIC0gMTsKKwkgICAgd2hpbGUgKG4gJiBtYXNrKSB7ay0tOyBtYXNrID4+PTE7fTsKKwkgIH0KKwlpZiAoayA+PSBGRlRfRklSU1RfSykKKwkgIHhwW25dID0gbXBuX211bF9mZnQgKHhwLCBuLCBhcDEsIGFucCwgYnAxLCBibnAsIGspOworCWVsc2UgaWYgKFVOTElLRUxZIChicDEgPT0gYjApKQorCSAgeworCSAgICBBU1NFUlQgKGFucCArIGJucCA8PSAyKm4rMSk7CisJICAgIEFTU0VSVCAoYW5wICsgYm5wID4gbik7CisJICAgIEFTU0VSVCAoYW5wID49IGJucCk7CisJICAgIG1wbl9tdWwgKHhwLCBhcDEsIGFucCwgYnAxLCBibnApOworCSAgICBhbnAgPSBhbnAgKyBibnAgLSBuOworCSAgICBBU1NFUlQgKGFucCA8PSBuIHx8IHhwWzIqbl09PTApOworCSAgICBhbnAtPSBhbnAgPiBuOworCSAgICBjeSA9IG1wbl9zdWIgKHhwLCB4cCwgbiwgeHAgKyBuLCBhbnApOworCSAgICB4cFtuXSA9IDA7CisJICAgIE1QTl9JTkNSX1UgKHhwLCBuKzEsIGN5KTsKKwkgIH0KKwllbHNlCisJICBtcG5fYmNfbXVsbW9kX2JucDEgKHhwLCBhcDEsIGJwMSwgbiwgeHApOworICAgICAgfQorCisgICAgICAvKiBIZXJlIHRoZSBDUlQgcmVjb21wb3NpdGlvbiBiZWdpbnMuCisKKwkgeG0gPC0gKHhwICsgeG0pLzIgPSAoeHAgKyB4bSlCXm4vMiBtb2QgKEJebi0xKQorCSBEaXZpc2lvbiBieSAyIGlzIGEgYml0d2lzZSByb3RhdGlvbi4KKworCSBBc3N1bWVzIHhwIG5vcm1hbGlzZWQgbW9kIChCXm4rMSkuCisKKwkgVGhlIHJlc2lkdWUgY2xhc3MgWzBdIGlzIHJlcHJlc2VudGVkIGJ5IFtCXm4tMV07IGV4Y2VwdCB3aGVuCisJIGJvdGggaW5wdXQgYXJlIFpFUk8uCisgICAgICAqLworCisjaWYgSEFWRV9OQVRJVkVfbXBuX3JzaDFhZGRfbiB8fCBIQVZFX05BVElWRV9tcG5fcnNoMWFkZF9uYworI2lmIEhBVkVfTkFUSVZFX21wbl9yc2gxYWRkX25jCisgICAgICBjeSA9IG1wbl9yc2gxYWRkX25jKHJwLCBycCwgeHAsIG4sIHhwW25dKTsgLyogQl5uID0gMSAqLworICAgICAgaGkgPSBjeSA8PCAoR01QX05VTUJfQklUUyAtIDEpOworICAgICAgY3kgPSAwOworICAgICAgLyogbmV4dCB1cGRhdGUgb2YgcnBbbi0xXSB3aWxsIHNldCBjeSA9IDEgb25seSBpZiBycFtuLTFdKz1oaQorCSBvdmVyZmxvd3MsIGkuZS4gYSBmdXJ0aGVyIGluY3JlbWVudCB3aWxsIG5vdCBvdmVyZmxvdyBhZ2Fpbi4gKi8KKyNlbHNlIC8qICEgX25jICovCisgICAgICBjeSA9IHhwW25dICsgbXBuX3JzaDFhZGRfbihycCwgcnAsIHhwLCBuKTsgLyogQl5uID0gMSAqLworICAgICAgaGkgPSAoY3k8PChHTVBfTlVNQl9CSVRTLTEpKSZHTVBfTlVNQl9NQVNLOyAvKiAoY3kmMSkgPDwgLi4uICovCisgICAgICBjeSA+Pj0gMTsKKyAgICAgIC8qIGN5ID0gMSBvbmx5IGlmIHhwW25dID0gMSBpLmUuIHt4cCxufSA9IFpFUk8sIHRoaXMgaW1wbGllcyB0aGF0CisJIHRoZSByc2gxYWRkIHdhcyBhIHNpbXBsZSByc2hpZnQ6IHRoZSB0b3AgYml0IGlzIDAuIGN5PTEgPT4gaGk9MC4gKi8KKyNlbmRpZgorI2lmIEdNUF9OQUlMX0JJVFMgPT0gMAorICAgICAgYWRkX3NzYWFhYShjeSwgcnBbbi0xXSwgY3ksIHJwW24tMV0sIDAsIGhpKTsKKyNlbHNlCisgICAgICBjeSArPSAoaGkgJiBycFtuLTFdKSA+PiAoR01QX05VTUJfQklUUy0xKTsKKyAgICAgIHJwW24tMV0gXj0gaGk7CisjZW5kaWYKKyNlbHNlIC8qICEgSEFWRV9OQVRJVkVfbXBuX3JzaDFhZGRfbiAqLworI2lmIEhBVkVfTkFUSVZFX21wbl9hZGRfbmMKKyAgICAgIGN5ID0gbXBuX2FkZF9uYyhycCwgcnAsIHhwLCBuLCB4cFtuXSk7CisjZWxzZSAvKiAhIF9uYyAqLworICAgICAgY3kgPSB4cFtuXSArIG1wbl9hZGRfbihycCwgcnAsIHhwLCBuKTsgLyogeHBbbl0gPT0gMSBpbXBsaWVzIHt4cCxufSA9PSBaRVJPICovCisjZW5kaWYKKyAgICAgIGN5ICs9IChycFswXSYxKTsKKyAgICAgIG1wbl9yc2hpZnQocnAsIHJwLCBuLCAxKTsKKyAgICAgIEFTU0VSVCAoY3kgPD0gMik7CisgICAgICBoaSA9IChjeTw8KEdNUF9OVU1CX0JJVFMtMSkpJkdNUF9OVU1CX01BU0s7IC8qIChjeSYxKSA8PCAuLi4gKi8KKyAgICAgIGN5ID4+PSAxOworICAgICAgLyogV2UgY2FuIGhhdmUgY3kgIT0gMCBvbmx5IGlmIGhpID0gMC4uLiAqLworICAgICAgQVNTRVJUICgocnBbbi0xXSAmIEdNUF9OVU1CX0hJR0hCSVQpID09IDApOworICAgICAgcnBbbi0xXSB8PSBoaTsKKyAgICAgIC8qIC4uLiBycFtuLTFdICsgY3kgY2FuIG5vdCBvdmVyZmxvdywgdGhlIGZvbGxvd2luZyBJTkNSIGlzIGNvcnJlY3QuICovCisjZW5kaWYKKyAgICAgIEFTU0VSVCAoY3kgPD0gMSk7CisgICAgICAvKiBOZXh0IGluY3JlbWVudCBjYW4gbm90IG92ZXJmbG93LCByZWFkIHRoZSBwcmV2aW91cyBjb21tZW50cyBhYm91dCBjeS4gKi8KKyAgICAgIEFTU0VSVCAoKGN5ID09IDApIHx8ICgocnBbbi0xXSAmIEdNUF9OVU1CX0hJR0hCSVQpID09IDApKTsKKyAgICAgIE1QTl9JTkNSX1UocnAsIG4sIGN5KTsKKworICAgICAgLyogQ29tcHV0ZSB0aGUgaGlnaGVzdCBoYWxmOgorCSAoWyh4cCArIHhtKS8yIG1vZCAoQl5uLTEpXSAtIHhwICkgKiBCXm4KKyAgICAgICAqLworICAgICAgaWYgKFVOTElLRUxZIChhbiArIGJuIDwgcm4pKQorCXsKKwkgIC8qIE5vdGUgdGhhdCBpbiB0aGlzIGNhc2UsIHRoZSBvbmx5IHdheSB0aGUgcmVzdWx0IGNhbiBlcXVhbAorCSAgICAgemVybyBtb2QgQl57cm59IC0gMSBpcyBpZiBvbmUgb2YgdGhlIGlucHV0cyBpcyB6ZXJvLCBhbmQKKwkgICAgIHRoZW4gdGhlIG91dHB1dCBvZiBib3RoIHRoZSByZWN1cnNpdmUgY2FsbHMgYW5kIHRoaXMgQ1JUCisJICAgICByZWNvbnN0cnVjdGlvbiBpcyB6ZXJvLCBub3QgQl57cm59IC0gMS4gV2hpY2ggaXMgZ29vZCwKKwkgICAgIHNpbmNlIHRoZSBsYXR0ZXIgcmVwcmVzZW50YXRpb24gZG9lc24ndCBmaXQgaW4gdGhlIG91dHB1dAorCSAgICAgYXJlYS4qLworCSAgY3kgPSBtcG5fc3ViX24gKHJwICsgbiwgcnAsIHhwLCBhbiArIGJuIC0gbik7CisKKwkgIC8qIEZJWE1FOiBUaGlzIHN1YnRyYWN0aW9uIG9mIHRoZSBoaWdoIHBhcnRzIGlzIG5vdCByZWFsbHkKKwkgICAgIG5lY2Vzc2FyeSwgd2UgZG8gaXQgdG8gZ2V0IHRoZSBjYXJyeSBvdXQsIGFuZCBmb3Igc2FuaXR5CisJICAgICBjaGVja2luZy4gKi8KKwkgIGN5ID0geHBbbl0gKyBtcG5fc3ViX25jICh4cCArIGFuICsgYm4gLSBuLCBycCArIGFuICsgYm4gLSBuLAorCQkJCSAgIHhwICsgYW4gKyBibiAtIG4sIHJuIC0gKGFuICsgYm4pLCBjeSk7CisJICBBU1NFUlQgKGFuICsgYm4gPT0gcm4gLSAxIHx8CisJCSAgbXBuX3plcm9fcCAoeHAgKyBhbiArIGJuIC0gbiArIDEsIHJuIC0gMSAtIChhbiArIGJuKSkpOworCSAgY3kgPSBtcG5fc3ViXzEgKHJwLCBycCwgYW4gKyBibiwgY3kpOworCSAgQVNTRVJUIChjeSA9PSAoeHAgKyBhbiArIGJuIC0gbilbMF0pOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBjeSA9IHhwW25dICsgbXBuX3N1Yl9uIChycCArIG4sIHJwLCB4cCwgbik7CisJICAvKiBjeSA9IDEgb25seSBpZiB7eHAsbisxfSBpcyBub3QgWkVSTywgaS5lLiB7cnAsbn0gaXMgbm90IFpFUk8uCisJICAgICBERUNSIHdpbGwgYWZmZWN0IF9hdCBtb3N0XyB0aGUgbG93ZXN0IG4gbGltYnMuICovCisJICBNUE5fREVDUl9VIChycCwgMipuLCBjeSk7CisJfQorI3VuZGVmIGEwCisjdW5kZWYgYTEKKyN1bmRlZiBiMAorI3VuZGVmIGIxCisjdW5kZWYgeHAKKyN1bmRlZiBzcDEKKyAgICB9Cit9CisKK21wX3NpemVfdAorbXBuX211bG1vZF9ibm0xX25leHRfc2l6ZSAobXBfc2l6ZV90IG4pCit7CisgIG1wX3NpemVfdCBuaDsKKworICBpZiAoQkVMT1dfVEhSRVNIT0xEIChuLCAgICAgTVVMTU9EX0JOTTFfVEhSRVNIT0xEKSkKKyAgICByZXR1cm4gbjsKKyAgaWYgKEJFTE9XX1RIUkVTSE9MRCAobiwgNCAqIChNVUxNT0RfQk5NMV9USFJFU0hPTEQgLSAxKSArIDEpKQorICAgIHJldHVybiAobiArICgyLTEpKSAmICgtMik7CisgIGlmIChCRUxPV19USFJFU0hPTEQgKG4sIDggKiAoTVVMTU9EX0JOTTFfVEhSRVNIT0xEIC0gMSkgKyAxKSkKKyAgICByZXR1cm4gKG4gKyAoNC0xKSkgJiAoLTQpOworCisgIG5oID0gKG4gKyAxKSA+PiAxOworCisgIGlmIChCRUxPV19USFJFU0hPTEQgKG5oLCBNVUxfRkZUX01PREZfVEhSRVNIT0xEKSkKKyAgICByZXR1cm4gKG4gKyAoOC0xKSkgJiAoLTgpOworCisgIHJldHVybiAyICogbXBuX2ZmdF9uZXh0X3NpemUgKG5oLCBtcG5fZmZ0X2Jlc3RfayAobmgsIDApKTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9uZWcuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9uZWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWMyYTMyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL25lZy5jCkBAIC0wLDAgKzEsMzMgQEAKKy8qIG1wbl9uZWcgLSBuZWdhdGUgYW4gbXBuLgorCitDb3B5cmlnaHQgMjAwMSwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2RlZmluZSBfX0dNUF9GT1JDRV9tcG5fbmVnIDEKKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvbnVzc2JhdW1lcl9tdWwuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9udXNzYmF1bWVyX211bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMGNmMjcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvbnVzc2JhdW1lcl9tdWwuYwpAQCAtMCwwICsxLDcwIEBACisvKiBtcG5fbnVzc2JhdW1lcl9tdWwgLS0gTXVsdGlwbHkge2FwLGFufSBhbmQge2JwLGJufSB1c2luZworICAgTnVzc2JhdW1lcidzIG5lZ2FjeWNsaWMgY29udm9sdXRpb24uCisKKyAgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBNYXJjbyBCb2RyYXRvLgorCisgICBUSEUgRlVOQ1RJT04gSU4gVEhJUyBGSUxFIElTIElOVEVSTkFMIFdJVEggQSBNVVRBQkxFIElOVEVSRkFDRS4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggSVQgVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuICBJTiBGQUNULCBJVCBJUyBBTE1PU1QKKyAgIEdVQVJBTlRFRUQgVEhBVCBJVCBXSUxMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR05VIE1QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCisvKiBNdWx0aXBseSB7YXAsYW59IGJ5IHticCxibn0sIGFuZCBwdXQgdGhlIHJlc3VsdCBpbiB7cHAsIGFuK2JufSAqLwordm9pZAorbXBuX251c3NiYXVtZXJfbXVsIChtcF9wdHIgcHAsCisJCSAgICBtcF9zcmNwdHIgYXAsIG1wX3NpemVfdCBhbiwKKwkJICAgIG1wX3NyY3B0ciBicCwgbXBfc2l6ZV90IGJuKQoreworICBtcF9zaXplX3Qgcm47CisgIG1wX3B0ciB0cDsKKyAgVE1QX0RFQ0w7CisKKyAgQVNTRVJUIChhbiA+PSBibik7CisgIEFTU0VSVCAoYm4gPiAwKTsKKworICBUTVBfTUFSSzsKKworICBpZiAoKGFwID09IGJwKSAmJiAoYW4gPT0gYm4pKQorICAgIHsKKyAgICAgIHJuID0gbXBuX3Nxcm1vZF9ibm0xX25leHRfc2l6ZSAoMiphbik7CisgICAgICB0cCA9IFRNUF9BTExPQ19MSU1CUyAobXBuX3Nxcm1vZF9ibm0xX2l0Y2ggKHJuLCBhbikpOworICAgICAgbXBuX3Nxcm1vZF9ibm0xIChwcCwgcm4sIGFwLCBhbiwgdHApOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHJuID0gbXBuX211bG1vZF9ibm0xX25leHRfc2l6ZSAoYW4gKyBibik7CisgICAgICB0cCA9IFRNUF9BTExPQ19MSU1CUyAobXBuX211bG1vZF9ibm0xX2l0Y2ggKHJuLCBhbiwgYm4pKTsKKyAgICAgIG1wbl9tdWxtb2RfYm5tMSAocHAsIHJuLCBhcCwgYW4sIGJwLCBibiwgdHApOworICAgIH0KKworICBUTVBfRlJFRTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9wZXJmcG93LmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvcGVyZnBvdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNDY0NzcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvcGVyZnBvdy5jCkBAIC0wLDAgKzEsMzQyIEBACisvKiBtcG5fcGVyZmVjdF9wb3dlcl9wIC0tIG1wbiBwZXJmZWN0IHBvd2VyIGRldGVjdGlvbi4KKworICAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IE1hcnRpbiBCb2lqLgorCitDb3B5cmlnaHQgMjAwOSwgMjAxMCwgMjAxMiwgMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisjaW5jbHVkZSAibG9uZ2xvbmcuaCIKKworI2RlZmluZSBTTUFMTCAyMAorI2RlZmluZSBNRURJVU0gMTAwCisKKy8qIFJldHVybiBub24temVybyBpZiB7bnAsbm59ID09IHt4cCx4bn0gXiBrLgorICAgQWxnb3JpdGhtOgorICAgICAgIEZvciBzID0gMSwgMiwgNCwgLi4uLCBzX21heCwgY29tcHV0ZSB0aGUgcyBsZWFzdCBzaWduaWZpY2FudCBsaW1icyBvZgorICAgICAgIHt4cCx4bn1eay4gU3RvcCBpZiB0aGV5IGRvbid0IG1hdGNoIHRoZSBzIGxlYXN0IHNpZ25pZmljYW50IGxpbWJzIG9mCisgICAgICAge25wLG5ufS4KKworICAgRklYTUU6IExvdyB4biBsaW1icyBjYW4gYmUgZXhwZWN0ZWQgdG8gYWx3YXlzIG1hdGNoLCBpZiBjb21wdXRlZCBhcyBhIG1vZAorICAgQl57eG59IHJvb3QuIFNvIGluc3RlYWQgb2YgdXNpbmcgbXBuX3Bvd2xvLCBjb21wdXRlIGFuIGFwcHJveGltYXRpb24gb2YgdGhlCisgICBtb3N0IHNpZ25pZmljYW50IChub3JtYWxpemVkKSBsaW1iIG9mIHt4cCx4bn0gXiBrIChhbmQgYW4gZXJyb3IgYm91bmQpLCBhbmQKKyAgIGNvbXBhcmUgdG8ge25wLCBubn0uIE9yIHVzZSBhbiBldmVuIGNydWRlciBhcHByb3hpbWF0aW9uIGJhc2VkIG9uIGZpeC1wb2ludAorICAgYmFzZSAyIGxvZ2FyaXRobS4gICovCitzdGF0aWMgaW50Citwb3dfZXF1YWxzIChtcF9zcmNwdHIgbnAsIG1wX3NpemVfdCBuLAorCSAgICBtcF9zcmNwdHIgeHAsbXBfc2l6ZV90IHhuLAorCSAgICBtcF9saW1iX3QgaywgbXBfYml0Y250X3QgZiwKKwkgICAgbXBfcHRyIHRwKQoreworICBtcF9iaXRjbnRfdCB5LCB6OworICBtcF9zaXplX3QgYm47CisgIG1wX2xpbWJfdCBoLCBsOworCisgIEFTU0VSVCAobiA+IDEgfHwgKG4gPT0gMSAmJiBucFswXSA+IDEpKTsKKyAgQVNTRVJUIChucFtuIC0gMV0gPiAwKTsKKyAgQVNTRVJUICh4biA+IDApOworCisgIGlmICh4biA9PSAxICYmIHhwWzBdID09IDEpCisgICAgcmV0dXJuIDA7CisKKyAgeiA9IDEgKyAobiA+PiAxKTsKKyAgZm9yIChibiA9IDE7IGJuIDwgejsgYm4gPDw9IDEpCisgICAgeworICAgICAgbXBuX3Bvd2xvICh0cCwgeHAsICZrLCAxLCBibiwgdHAgKyBibik7CisgICAgICBpZiAobXBuX2NtcCAodHAsIG5wLCBibikgIT0gMCkKKwlyZXR1cm4gMDsKKyAgICB9CisKKyAgLyogRmluYWwgY2hlY2suIEVzdGltYXRlIHRoZSBzaXplIG9mIHt4cCx4bn1eayBiZWZvcmUgY29tcHV0aW5nIHRoZSBwb3dlcgorICAgICB3aXRoIGZ1bGwgcHJlY2lzaW9uLiAgT3B0aW1pemF0aW9uOiBJdCBtaWdodCBwYXkgb2ZmIHRvIG1ha2UgYSBtb3JlCisgICAgIGFjY3VyYXRlIGVzdGltYXRpb24gb2YgdGhlIGxvZ2FyaXRobSBvZiB7eHAseG59LCByYXRoZXIgdGhhbiB1c2luZyB0aGUKKyAgICAgaW5kZXggb2YgdGhlIE1TQi4gICovCisKKyAgTVBOX1NJWkVJTkJBU0VfMkVYUCh5LCB4cCwgeG4sIDEpOworICB5IC09IDE7ICAvKiBtc2JfaW5kZXggKHhwLCB4bikgKi8KKworICB1bXVsX3BwbW0gKGgsIGwsIGssIHkpOworICBoIC09IGwgPT0gMDsgIC0tbDsJLyogdHdvLWxpbWIgZGVjcmVtZW50ICovCisKKyAgeiA9IGYgLSAxOyAvKiBtc2JfaW5kZXggKG5wLCBuKSAqLworICBpZiAoaCA9PSAwICYmIGwgPD0geikKKyAgICB7CisgICAgICBtcF9saW1iX3QgKnRwMjsKKyAgICAgIG1wX3NpemVfdCBpOworICAgICAgaW50IGFuczsKKyAgICAgIG1wX2xpbWJfdCBzaXplOworICAgICAgVE1QX0RFQ0w7CisKKyAgICAgIHNpemUgPSBsICsgazsKKyAgICAgIEFTU0VSVF9BTFdBWVMgKHNpemUgPj0gayk7CisKKyAgICAgIFRNUF9NQVJLOworICAgICAgeSA9IDIgKyBzaXplIC8gR01QX0xJTUJfQklUUzsKKyAgICAgIHRwMiA9IFRNUF9BTExPQ19MSU1CUyAoeSk7CisKKyAgICAgIGkgPSBtcG5fcG93XzEgKHRwLCB4cCwgeG4sIGssIHRwMik7CisgICAgICBpZiAoaSA9PSBuICYmIG1wbl9jbXAgKHRwLCBucCwgbikgPT0gMCkKKwlhbnMgPSAxOworICAgICAgZWxzZQorCWFucyA9IDA7CisgICAgICBUTVBfRlJFRTsKKyAgICAgIHJldHVybiBhbnM7CisgICAgfQorCisgIHJldHVybiAwOworfQorCisKKy8qIFJldHVybiBub24temVybyBpZiBOID0ge25wLG59IGlzIGEga3RoIHBvd2VyLgorICAgSSA9IHtpcCxufSA9IE5eKC0xKSBtb2QgQl5uLiAgKi8KK3N0YXRpYyBpbnQKK2lzX2t0aF9wb3dlciAobXBfcHRyIHJwLCBtcF9zcmNwdHIgbnAsCisJICAgICAgbXBfbGltYl90IGssIG1wX3NyY3B0ciBpcCwKKwkgICAgICBtcF9zaXplX3QgbiwgbXBfYml0Y250X3QgZiwKKwkgICAgICBtcF9wdHIgdHApCit7CisgIG1wX2JpdGNudF90IGI7CisgIG1wX3NpemVfdCBybiwgeG47CisKKyAgQVNTRVJUIChuID4gMCk7CisgIEFTU0VSVCAoKGsgJiAxKSAhPSAwIHx8IGsgPT0gMik7CisgIEFTU0VSVCAoKG5wWzBdICYgMSkgIT0gMCk7CisKKyAgaWYgKGsgPT0gMikKKyAgICB7CisgICAgICBiID0gKGYgKyAxKSA+PiAxOworICAgICAgcm4gPSAxICsgYiAvIEdNUF9MSU1CX0JJVFM7CisgICAgICBpZiAobXBuX2JzcXJ0aW52IChycCwgaXAsIGIsIHRwKSAhPSAwKQorCXsKKwkgIHJwW3JuIC0gMV0gJj0gKENOU1RfTElNQigxKSA8PCAoYiAlIEdNUF9MSU1CX0JJVFMpKSAtIDE7CisJICB4biA9IHJuOworCSAgTVBOX05PUk1BTElaRSAocnAsIHhuKTsKKwkgIGlmIChwb3dfZXF1YWxzIChucCwgbiwgcnAsIHhuLCBrLCBmLCB0cCkgIT0gMCkKKwkgICAgcmV0dXJuIDE7CisKKwkgIC8qIENoZWNrIGlmICgyXmIgLSByKV4yID09IG4gKi8KKwkgIG1wbl9uZWcgKHJwLCBycCwgcm4pOworCSAgcnBbcm4gLSAxXSAmPSAoQ05TVF9MSU1CKDEpIDw8IChiICUgR01QX0xJTUJfQklUUykpIC0gMTsKKwkgIE1QTl9OT1JNQUxJWkUgKHJwLCBybik7CisJICBpZiAocG93X2VxdWFscyAobnAsIG4sIHJwLCBybiwgaywgZiwgdHApICE9IDApCisJICAgIHJldHVybiAxOworCX0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBiID0gMSArIChmIC0gMSkgLyBrOworICAgICAgcm4gPSAxICsgKGIgLSAxKSAvIEdNUF9MSU1CX0JJVFM7CisgICAgICBtcG5fYnJvb3RpbnYgKHJwLCBpcCwgcm4sIGssIHRwKTsKKyAgICAgIGlmICgoYiAlIEdNUF9MSU1CX0JJVFMpICE9IDApCisJcnBbcm4gLSAxXSAmPSAoQ05TVF9MSU1CKDEpIDw8IChiICUgR01QX0xJTUJfQklUUykpIC0gMTsKKyAgICAgIE1QTl9OT1JNQUxJWkUgKHJwLCBybik7CisgICAgICBpZiAocG93X2VxdWFscyAobnAsIG4sIHJwLCBybiwgaywgZiwgdHApICE9IDApCisJcmV0dXJuIDE7CisgICAgfQorICBNUE5fWkVSTyAocnAsIHJuKTsgLyogVW50cmFzaCBycCAqLworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcGVyZnBvdyAobXBfc3JjcHRyIG5wLCBtcF9zaXplX3QgbiwKKwkgbXBfbGltYl90IHViLCBtcF9saW1iX3QgZywKKwkgbXBfYml0Y250X3QgZiwgaW50IG5lZykKK3sKKyAgbXBfcHRyIGlwLCB0cCwgcnA7CisgIG1wX2xpbWJfdCBrOworICBpbnQgYW5zOworICBtcF9iaXRjbnRfdCBiOworICBnbXBfcHJpbWVzaWV2ZV90IHBzOworICBUTVBfREVDTDsKKworICBBU1NFUlQgKG4gPiAwKTsKKyAgQVNTRVJUICgobnBbMF0gJiAxKSAhPSAwKTsKKyAgQVNTRVJUICh1YiA+IDApOworCisgIFRNUF9NQVJLOworICBnbXBfaW5pdF9wcmltZXNpZXZlICgmcHMpOworICBiID0gKGYgKyAzKSA+PiAxOworCisgIFRNUF9BTExPQ19MSU1CU18zIChpcCwgbiwgcnAsIG4sIHRwLCA1ICogbik7CisKKyAgTVBOX1pFUk8gKHJwLCBuKTsKKworICAvKiBGSVhNRTogSXQgc2VlbXMgdGhlIGludmVyc2UgaW4gbmludiBpcyBuZWVkZWQgb25seSB0byBnZXQgbm9uLWludmVydGVkCisgICAgIHJvb3RzLiBJLmUuLCBpc19rdGhfcG93ZXIgY29tcHV0ZXMgbl57MS8yfSBhcyAobl57LTF9KV57LTEvMn0gYW5kCisgICAgIHNpbWlsYXJseSBmb3IgbnRoIHJvb3RzLiBJdCBzaG91bGQgYmUgbW9yZSBlZmZpY2llbnQgdG8gY29tcHV0ZSBuXnsxLzJ9IGFzCisgICAgIG4gKiBuXnstMS8yfSwgd2l0aCBhIG11bGxvIGluc3RlYWQgb2YgYSBiaW52ZXJ0LiBBbmQgd2UgY2FuIGRvIHNvbWV0aGluZworICAgICBzaW1pbGFyIGZvciBrdGggcm9vdHMgaWYgd2Ugc3dpdGNoIHRvIGFuIGl0ZXJhdGlvbiBjb252ZXJnaW5nIHRvIG5eezEvayAtCisgICAgIDF9LCBhbmQgd2UgY2FuIHRoZW4gZWxpbWluYXRlIHRoaXMgYmludmVydCBjYWxsLiAqLworICBtcG5fYmludmVydCAoaXAsIG5wLCAxICsgKGIgLSAxKSAvIEdNUF9MSU1CX0JJVFMsIHRwKTsKKyAgaWYgKGIgJSBHTVBfTElNQl9CSVRTKQorICAgIGlwWyhiIC0gMSkgLyBHTVBfTElNQl9CSVRTXSAmPSAoQ05TVF9MSU1CKDEpIDw8IChiICUgR01QX0xJTUJfQklUUykpIC0gMTsKKworICBpZiAobmVnKQorICAgIGdtcF9uZXh0cHJpbWUgKCZwcyk7CisKKyAgYW5zID0gMDsKKyAgaWYgKGcgPiAwKQorICAgIHsKKyAgICAgIHViID0gTUlOICh1YiwgZyArIDEpOworICAgICAgd2hpbGUgKChrID0gZ21wX25leHRwcmltZSAoJnBzKSkgPCB1YikKKwl7CisJICBpZiAoKGcgJSBrKSA9PSAwKQorCSAgICB7CisJICAgICAgaWYgKGlzX2t0aF9wb3dlciAocnAsIG5wLCBrLCBpcCwgbiwgZiwgdHApICE9IDApCisJCXsKKwkJICBhbnMgPSAxOworCQkgIGdvdG8gcmV0OworCQl9CisJICAgIH0KKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgd2hpbGUgKChrID0gZ21wX25leHRwcmltZSAoJnBzKSkgPCB1YikKKwl7CisJICBpZiAoaXNfa3RoX3Bvd2VyIChycCwgbnAsIGssIGlwLCBuLCBmLCB0cCkgIT0gMCkKKwkgICAgeworCSAgICAgIGFucyA9IDE7CisJICAgICAgZ290byByZXQ7CisJICAgIH0KKwl9CisgICAgfQorIHJldDoKKyAgVE1QX0ZSRUU7CisgIHJldHVybiBhbnM7Cit9CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBucnRyaWFsW10gPSB7IDEwMCwgNTAwLCAxMDAwIH07CisKKy8qIFRhYmxlIG9mIChsb2dfe3BfaX0gMikgdmFsdWVzLCB3aGVyZSBwX2kgaXMgdGhlIChucnRyaWFsW2ldICsgMSkndGggcHJpbWUKKyAgIG51bWJlci4gICovCitzdGF0aWMgY29uc3QgZG91YmxlIGxvZ3NbXSA9CisgIHsgMC4xMDk5NDU3MjI4MTkzNjIwLCAwLjA4NDcwMTY0MDMxMTUzMjIsIDAuMDc3MjA0ODE5NTE0NDQxNSB9OworCitpbnQKK21wbl9wZXJmZWN0X3Bvd2VyX3AgKG1wX3NyY3B0ciBucCwgbXBfc2l6ZV90IG4pCit7CisgIG1wX2xpbWJfdCAqbmMsIGZhY3RvciwgZzsKKyAgbXBfbGltYl90IGV4cCwgZDsKKyAgbXBfYml0Y250X3QgdHdvcywgY291bnQ7CisgIGludCBhbnMsIHdoZXJlLCBuZWcsIHRyaWFsOworICBUTVBfREVDTDsKKworICBuZWcgPSBuIDwgMDsKKyAgaWYgKG5lZykKKyAgICB7CisgICAgICBuID0gLW47CisgICAgfQorCisgIGlmIChuID09IDAgfHwgKG4gPT0gMSAmJiBucFswXSA9PSAxKSkgLyogVmFsZ3JpbmQgZG9lc24ndCBsaWtlCisJCQkJCSAgIChuIDw9IChucFswXSA9PSAxKSkgKi8KKyAgICByZXR1cm4gMTsKKworICBUTVBfTUFSSzsKKworICBjb3VudCA9IDA7CisKKyAgdHdvcyA9IG1wbl9zY2FuMSAobnAsIDApOworICBpZiAodHdvcyAhPSAwKQorICAgIHsKKyAgICAgIG1wX3NpemVfdCBzOworICAgICAgaWYgKHR3b3MgPT0gMSkKKwl7CisJICByZXR1cm4gMDsKKwl9CisgICAgICBzID0gdHdvcyAvIEdNUF9MSU1CX0JJVFM7CisgICAgICBpZiAocyArIDEgPT0gbiAmJiBQT1cyX1AgKG5wW3NdKSkKKwl7CisJICByZXR1cm4gISAobmVnICYmIFBPVzJfUCAodHdvcykpOworCX0KKyAgICAgIGNvdW50ID0gdHdvcyAlIEdNUF9MSU1CX0JJVFM7CisgICAgICBuIC09IHM7CisgICAgICBucCArPSBzOworICAgICAgaWYgKGNvdW50ID4gMCkKKwl7CisJICBuYyA9IFRNUF9BTExPQ19MSU1CUyAobik7CisJICBtcG5fcnNoaWZ0IChuYywgbnAsIG4sIGNvdW50KTsKKwkgIG4gLT0gKG5jW24gLSAxXSA9PSAwKTsKKwkgIG5wID0gbmM7CisJfQorICAgIH0KKyAgZyA9IHR3b3M7CisKKyAgdHJpYWwgPSAobiA+IFNNQUxMKSArIChuID4gTUVESVVNKTsKKworICB3aGVyZSA9IDA7CisgIGZhY3RvciA9IG1wbl90cmlhbGRpdiAobnAsIG4sIG5ydHJpYWxbdHJpYWxdLCAmd2hlcmUpOworCisgIGlmIChmYWN0b3IgIT0gMCkKKyAgICB7CisgICAgICBpZiAoY291bnQgPT0gMCkgLyogV2UgZGlkIG5vdCBhbGxvY2F0ZSBuYyB5ZXQuICovCisJeworCSAgbmMgPSBUTVBfQUxMT0NfTElNQlMgKG4pOworCX0KKworICAgICAgLyogUmVtb3ZlIGZhY3RvcnMgZm91bmQgYnkgdHJpYWxkaXYuICBPcHRpbWl6YXRpb246IElmIHJlbW92ZQorCSBkZWZpbmUgX2l0Y2gsIHdlIGNhbiBhbGxvY2F0ZSBpdHMgc2NyYXRjaCBqdXN0IG9uY2UgKi8KKworICAgICAgZG8KKwl7CisJICBiaW52ZXJ0X2xpbWIgKGQsIGZhY3Rvcik7CisKKwkgIC8qIEFmdGVyIHRoZSBmaXJzdCByb3VuZCB3ZSBhbHdheXMgaGF2ZSBuYyA9PSBucCAqLworCSAgZXhwID0gbXBuX3JlbW92ZSAobmMsICZuLCBucCwgbiwgJmQsIDEsIH4obXBfYml0Y250X3QpMCk7CisKKwkgIGlmIChnID09IDApCisJICAgIGcgPSBleHA7CisJICBlbHNlCisJICAgIGcgPSBtcG5fZ2NkXzEgKCZnLCAxLCBleHApOworCisJICBpZiAoZyA9PSAxKQorCSAgICB7CisJICAgICAgYW5zID0gMDsKKwkgICAgICBnb3RvIHJldDsKKwkgICAgfQorCisJICBpZiAoKG4gPT0gMSkgJiAobmNbMF0gPT0gMSkpCisJICAgIHsKKwkgICAgICBhbnMgPSAhIChuZWcgJiYgUE9XMl9QIChnKSk7CisJICAgICAgZ290byByZXQ7CisJICAgIH0KKworCSAgbnAgPSBuYzsKKwkgIGZhY3RvciA9IG1wbl90cmlhbGRpdiAobnAsIG4sIG5ydHJpYWxbdHJpYWxdLCAmd2hlcmUpOworCX0KKyAgICAgIHdoaWxlIChmYWN0b3IgIT0gMCk7CisgICAgfQorCisgIE1QTl9TSVpFSU5CQVNFXzJFWFAoY291bnQsIG5wLCBuLCAxKTsgICAvKiBsb2cgKG5wKSArIDEgKi8KKyAgZCA9IChtcF9saW1iX3QpIChjb3VudCAqIGxvZ3NbdHJpYWxdICsgMWUtOSkgKyAxOworICBhbnMgPSBwZXJmcG93IChucCwgbiwgZCwgZywgY291bnQsIG5lZyk7CisKKyByZXQ6CisgIFRNUF9GUkVFOworICByZXR1cm4gYW5zOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3BlcmZzcXIuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9wZXJmc3FyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhhMWE5MQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9wZXJmc3FyLmMKQEAgLTAsMCArMSwyMzkgQEAKKy8qIG1wbl9wZXJmZWN0X3NxdWFyZV9wKHUsdXNpemUpIC0tIFJldHVybiBub24temVybyBpZiBVIGlzIGEgcGVyZmVjdCBzcXVhcmUsCisgICB6ZXJvIG90aGVyd2lzZS4KKworQ29weXJpZ2h0IDE5OTEsIDE5OTMsIDE5OTQsIDE5OTYsIDE5OTcsIDIwMDAtMjAwMiwgMjAwNSwgMjAxMiBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlIDxzdGRpby5oPiAvKiBmb3IgTlVMTCAqLworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisjaW5jbHVkZSAibG9uZ2xvbmcuaCIKKworI2luY2x1ZGUgInBlcmZzcXIuaCIKKworCisvKiBjaGFuZ2UgdGhpcyB0byAiI2RlZmluZSBUUkFDRSh4KSB4IiBmb3IgZGlhZ25vc3RpY3MgKi8KKyNkZWZpbmUgVFJBQ0UoeCkKKworCisKKy8qIFBFUkZTUVJfTU9EXyogZGV0ZWN0cyBub24tc3F1YXJlcyB1c2luZyByZXNpZHVlIHRlc3RzLgorCisgICBBIG1hY3JvIFBFUkZTUVJfTU9EX1RFU1QgaXMgc2V0dXAgYnkgZ2VuLXBzcXIuYyBpbiBwZXJmc3FyLmguICBJdCB0YWtlcworICAge3VwLHVzaXplfSBtb2R1bG8gYSBzZWxlY3RlZCBtb2R1bHVzIHRvIGdldCBhIHJlbWFpbmRlciByLiAgRm9yIDMyLWJpdCBvcgorICAgNjQtYml0IGxpbWJzIHRoaXMgbW9kdWx1cyB3aWxsIGJlIDJeMjQtMSBvciAyXjQ4LTEgdXNpbmcgUEVSRlNRUl9NT0RfMzQsCisgICBvciBmb3Igb3RoZXIgbGltYiBvciBuYWlsIHNpemVzIGEgUEVSRlNRUl9QUCBpcyBjaG9zZW4gYW5kIFBFUkZTUVJfTU9EX1BQCisgICB1c2VkLiAgUEVSRlNRUl9QUF9OT1JNIGFuZCBQRVJGU1FSX1BQX0lOVkVSVEVEIGFyZSBwcmUtY2FsY3VsYXRlZCBpbiB0aGlzCisgICBjYXNlIHRvby4KKworICAgUEVSRlNRUl9NT0RfVEVTVCB0aGVuIG1ha2VzIHZhcmlvdXMgY2FsbHMgdG8gUEVSRlNRUl9NT0RfMSBvcgorICAgUEVSRlNRUl9NT0RfMiB3aXRoIGRpdmlzb3JzIGQgd2hpY2ggYXJlIGZhY3RvcnMgb2YgdGhlIG1vZHVsdXMsIGFuZCB0YWJsZQorICAgZGF0YSBpbmRpY2F0aW5nIHJlc2lkdWVzIGFuZCBub24tcmVzaWR1ZXMgbW9kdWxvIHRob3NlIGRpdmlzb3JzLiAgVGhlCisgICB0YWJsZSBkYXRhIGlzIGluIDEgb3IgMiBsaW1icyB3b3J0aCBvZiBiaXRzIHJlc3BlY3RpdmVseSwgcGVyIHRoZSBzaXplIG9mCisgICBlYWNoIGQuCisKKyAgIEEgIm1vZGV4YWN0IiBzdHlsZSByZW1haW5kZXIgaXMgdGFrZW4gdG8gcmVkdWNlIHIgbW9kdWxvIGQuCisgICBQRVJGU1FSX01PRF9JRFggaW1wbGVtZW50cyB0aGlzLCBwcm9kdWNpbmcgYW4gaW5kZXggImlkeCIgZm9yIHVzZSB3aXRoCisgICB0aGUgdGFibGUgZGF0YS4gIE5vdGljZSB0aGVyZSdzIGp1c3Qgb25lIG11bHRpcGxpY2F0aW9uIGJ5IGEgY29uc3RhbnQKKyAgICJpbnYiLCBmb3IgZWFjaCBkLgorCisgICBUaGUgbW9kZXhhY3QgZG9lc24ndCBwcm9kdWNlIGEgdHJ1ZSByJWQgcmVtYWluZGVyLCBpbnN0ZWFkIGlkeCBzYXRpc2ZpZXMKKyAgICItKGlkeDw8UEVSRlNRUl9NT0RfQklUUykgPT0gciBtb2QgZCIuICBCZWNhdXNlIGQgaXMgb2RkLCB0aGlzIGZhY3RvcgorICAgLTJeUEVSRlNRUl9NT0RfQklUUyBpcyBhIG9uZS10by1vbmUgbWFwcGluZyBiZXR3ZWVuIHIgYW5kIGlkeCwgYW5kIGlzCisgICBhY2NvdW50ZWQgZm9yIGJ5IGhhdmluZyB0aGUgdGFibGUgZGF0YSBzdWl0YWJseSBwZXJtdXRlZC4KKworICAgVGhlIHJlbWFpbmRlciByIGZpdHMgd2l0aGluIFBFUkZTUVJfTU9EX0JJVFMgd2hpY2ggaXMgbGVzcyB0aGFuIGEgbGltYi4KKyAgIEluIGZhY3QgdGhlIEdNUF9MSU1CX0JJVFMgLSBQRVJGU1FSX01PRF9CSVRTIHNwYXJlIGJpdHMgYXJlIGVub3VnaCB0byBmaXQKKyAgIGVhY2ggZGl2aXNvciBkIG1lYW5pbmcgdGhlIG1vZGV4YWN0IG11bHRpcGx5IGNhbiB0YWtlIHBsYWNlIGVudGlyZWx5CisgICB3aXRoaW4gb25lIGxpbWIsIGdpdmluZyB0aGUgY29tcGlsZXIgdGhlIGNoYW5jZSB0byBvcHRpbWl6ZSBpdCwgaW4gYSB3YXkKKyAgIHRoYXQgc2F5IHVtdWxfcHBtbSB3b3VsZCBub3QgZ2l2ZS4KKworICAgVGhlcmUncyBubyBuZWVkIGZvciB0aGUgZGl2aXNvcnMgZCB0byBiZSBwcmltZSwgaW4gZmFjdCBnZW4tcHNxci5jIG1ha2VzCisgICBhIGRlbGliZXJhdGUgZWZmb3J0IHRvIGNvbWJpbmUgZmFjdG9ycyBzbyBhcyB0byByZWR1Y2UgdGhlIG51bWJlciBvZgorICAgc2VwYXJhdGUgdGVzdHMgZG9uZSBvbiByLiAgQnV0IHN1Y2ggY29tYmluaW5nIGlzIGxpbWl0ZWQgdG8gZCA8PQorICAgMipHTVBfTElNQl9CSVRTIHNvIHRoYXQgdGhlIHRhYmxlIGRhdGEgZml0cyBpbiBhdCBtb3N0IDIgbGltYnMuCisKKyAgIEFsdGVybmF0aXZlczoKKworICAgSXQnZCBiZSBwb3NzaWJsZSB0byB1c2UgYmlnZ2VyIGRpdmlzb3JzIGQsIGFuZCBtb3JlIHRoYW4gMiBsaW1icyBvZiB0YWJsZQorICAgZGF0YSwgYnV0IHRoaXMgZG9lc24ndCBsb29rIGxpa2UgaXQgd291bGQgYmUgb2YgbXVjaCBoZWxwIHRvIHRoZSBwcmltZQorICAgZmFjdG9ycyBpbiB0aGUgdXN1YWwgbW9kdWxpIDJeMjQtMSBvciAyXjQ4LTEuCisKKyAgIFRoZSBtb2R1bGkgMl4yNC0xIG9yIDJeNDgtMSBhcmUgbm90aGluZyBwYXJ0aWN1bGFybHkgc3BlY2lhbCwgdGhleSdyZQorICAganVzdCBlYXN5IHRvIGNhbGN1bGF0ZSAoc2VlIG1wbl9tb2RfMzRsc3ViMSkgYW5kIGhhdmUgYSBuaWNlIHNldCBvZiBwcmltZQorICAgZmFjdG9ycy4gIDJeMzItMSBhbmQgMl42NC0xIHdvdWxkIGJlIGVxdWFsbHkgZWFzeSB0byBjYWxjdWxhdGUsIGJ1dCBoYXZlCisgICBmZXdlciBwcmltZSBmYWN0b3JzLgorCisgICBUaGUgbmFpbHMgY2FzZSB1c3VhbGx5IGVuZHMgdXAgdXNpbmcgbXBuX21vZF8xLCB3aGljaCBpcyBhIGxvdCBzbG93ZXIKKyAgIHRoYW4gbXBuX21vZF8zNGxzdWIxLiAgUGVyaGFwcyBvdGhlciBzdWNoIHNwZWNpYWwgbW9kdWxpIGNvdWxkIGJlIGZvdW5kCisgICBmb3IgdGhlIG5haWxzIGNhc2UuICBUd28tdGVybSB0aGluZ3MgbGlrZSAyXjMwLTJeMTUtMSBtaWdodCBiZQorICAgY2FuZGlkYXRlcy4gIE9yIGF0IHdvcnN0IHNvbWUgb24tdGhlLWZseSBkZS1uYWlsaW5nIHdvdWxkIGFsbG93IHRoZSBwbGFpbgorICAgMl4yNC0xIHRvIGJlIHVzZWQuICBDdXJyZW50bHkgbmFpbHMgYXJlIHRvbyBwcmVsaW1pbmFyeSB0byBiZSB3b3JyaWVkCisgICBhYm91dC4KKworKi8KKworI2RlZmluZSBQRVJGU1FSX01PRF9NQVNLICAgICAgICgoQ05TVF9MSU1CKDEpIDw8IFBFUkZTUVJfTU9EX0JJVFMpIC0gMSkKKworI2RlZmluZSBNT0QzNF9CSVRTICAoR01QX05VTUJfQklUUyAvIDQgKiAzKQorI2RlZmluZSBNT0QzNF9NQVNLICAoKENOU1RfTElNQigxKSA8PCBNT0QzNF9CSVRTKSAtIDEpCisKKyNkZWZpbmUgUEVSRlNRUl9NT0RfMzQociwgdXAsIHVzaXplKQkJCQlcCisgIGRvIHsJCQkJCQkJCVwKKyAgICAocikgPSBtcG5fbW9kXzM0bHN1YjEgKHVwLCB1c2l6ZSk7CQkJCVwKKyAgICAocikgPSAoKHIpICYgTU9EMzRfTUFTSykgKyAoKHIpID4+IE1PRDM0X0JJVFMpOwkJXAorICB9IHdoaWxlICgwKQorCisvKiBGSVhNRTogVGhlICU9IGhlcmUgaXNuJ3QgZ29vZCwgYW5kIG1pZ2h0IGRlc3Ryb3kgYW55IHNhdmluZ3MgZnJvbSBrZWVwaW5nCisgICB0aGUgUEVSRlNRUl9NT0RfSURYIHN0dWZmIHdpdGhpbiBhIGxpbWIgKHJhdGhlciB0aGFuIG5lZWRpbmcgdW11bF9wcG1tKS4KKyAgIE1heWJlIGEgbmV3IHNvcnQgb2YgbXBuX3ByZWludl9tb2RfMSBjb3VsZCBhY2NlcHQgYW4gdW5ub3JtYWxpemVkIGRpdmlzb3IKKyAgIGFuZCBhIHNoaWZ0IGNvdW50LCBsaWtlIG1wbl9wcmVpbnZfZGl2cmVtXzEuICBCdXQgbW9kXzM0bHN1YjEgaXMgb3VyCisgICBub3JtYWwgY2FzZSwgc28gbGV0cyBub3Qgd29ycnkgdG9vIG11Y2ggYWJvdXQgbW9kXzEuICAqLworI2RlZmluZSBQRVJGU1FSX01PRF9QUChyLCB1cCwgdXNpemUpCQkJCQlcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgaWYgKEJFTE9XX1RIUkVTSE9MRCAodXNpemUsIFBSRUlOVl9NT0RfMV9UT19NT0RfMV9USFJFU0hPTEQpKQlcCisgICAgICB7CQkJCQkJCQkJXAorCShyKSA9IG1wbl9wcmVpbnZfbW9kXzEgKHVwLCB1c2l6ZSwgUEVSRlNRUl9QUF9OT1JNLAkJXAorCQkJCVBFUkZTUVJfUFBfSU5WRVJURUQpOwkJCVwKKwkocikgJT0gUEVSRlNRUl9QUDsJCQkJCQlcCisgICAgICB9CQkJCQkJCQkJXAorICAgIGVsc2UJCQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJCQlcCisJKHIpID0gbXBuX21vZF8xICh1cCwgdXNpemUsIFBFUkZTUVJfUFApOwkJCVwKKyAgICAgIH0JCQkJCQkJCQlcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgUEVSRlNRUl9NT0RfSURYKGlkeCwgciwgZCwgaW52KQkJCQlcCisgIGRvIHsJCQkJCQkJCVwKKyAgICBtcF9saW1iX3QgIHE7CQkJCQkJXAorICAgIEFTU0VSVCAoKHIpIDw9IFBFUkZTUVJfTU9EX01BU0spOwkJCQlcCisgICAgQVNTRVJUICgoKChpbnYpICogKGQpKSAmIFBFUkZTUVJfTU9EX01BU0spID09IDEpOwkJXAorICAgIEFTU0VSVCAoTVBfTElNQl9UX01BWCAvIChkKSA+PSBQRVJGU1FSX01PRF9NQVNLKTsJCVwKKwkJCQkJCQkJXAorICAgIHEgPSAoKHIpICogKGludikpICYgUEVSRlNRUl9NT0RfTUFTSzsJCQlcCisgICAgQVNTRVJUIChyID09ICgocSAqIChkKSkgJiBQRVJGU1FSX01PRF9NQVNLKSk7CQlcCisgICAgKGlkeCkgPSAocSAqIChkKSkgPj4gUEVSRlNRUl9NT0RfQklUUzsJCQlcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgUEVSRlNRUl9NT0RfMShyLCBkLCBpbnYsIG1hc2spCQkJCVwKKyAgZG8gewkJCQkJCQkJXAorICAgIHVuc2lnbmVkICAgaWR4OwkJCQkJCVwKKyAgICBBU1NFUlQgKChkKSA8PSBHTVBfTElNQl9CSVRTKTsJCQkJXAorICAgIFBFUkZTUVJfTU9EX0lEWChpZHgsIHIsIGQsIGludik7CQkJCVwKKyAgICBUUkFDRSAocHJpbnRmICgiICBQRVJGU1FSX01PRF8xIGQ9JXUgcj0lbHUgaWR4PSV1XG4iLAlcCisJCSAgIGQsIHIlZCwgaWR4KSk7CQkJCVwKKyAgICBpZiAoKCgobWFzaykgPj4gaWR4KSAmIDEpID09IDApCQkJCVwKKyAgICAgIHsJCQkJCQkJCVwKKwlUUkFDRSAocHJpbnRmICgiICBub24tc3F1YXJlXG4iKSk7CQkJXAorCXJldHVybiAwOwkJCQkJCVwKKyAgICAgIH0JCQkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworLyogVGhlIGV4cHJlc3Npb24gIihpbnQpIGlkeCAtIEdNUF9MSU1CX0JJVFMgPCAwIiBsZXRzIHRoZSBjb21waWxlciB1c2UgdGhlCisgICBzaWduIGJpdCBmcm9tICJpZHgtR01QX0xJTUJfQklUUyIsIHdoaWNoIG1pZ2h0IGhlbHAgYXZvaWQgYSBicmFuY2guICAqLworI2RlZmluZSBQRVJGU1FSX01PRF8yKHIsIGQsIGludiwgbWhpLCBtbG8pCQkJXAorICBkbyB7CQkJCQkJCQlcCisgICAgbXBfbGltYl90ICBtOwkJCQkJCVwKKyAgICB1bnNpZ25lZCAgIGlkeDsJCQkJCQlcCisgICAgQVNTRVJUICgoZCkgPD0gMipHTVBfTElNQl9CSVRTKTsJCQkJXAorCQkJCQkJCQlcCisgICAgUEVSRlNRUl9NT0RfSURYIChpZHgsIHIsIGQsIGludik7CQkJCVwKKyAgICBUUkFDRSAocHJpbnRmICgiICBQRVJGU1FSX01PRF8yIGQ9JXUgcj0lbHUgaWR4PSV1XG4iLAlcCisJCSAgIGQsIHIlZCwgaWR4KSk7CQkJCVwKKyAgICBtID0gKChpbnQpIGlkeCAtIEdNUF9MSU1CX0JJVFMgPCAwID8gKG1sbykgOiAobWhpKSk7CVwKKyAgICBpZHggJT0gR01QX0xJTUJfQklUUzsJCQkJCVwKKyAgICBpZiAoKChtID4+IGlkeCkgJiAxKSA9PSAwKQkJCQkJXAorICAgICAgewkJCQkJCQkJXAorCVRSQUNFIChwcmludGYgKCIgIG5vbi1zcXVhcmVcbiIpKTsJCQlcCisJcmV0dXJuIDA7CQkJCQkJXAorICAgICAgfQkJCQkJCQkJXAorICB9IHdoaWxlICgwKQorCisKK2ludAorbXBuX3BlcmZlY3Rfc3F1YXJlX3AgKG1wX3NyY3B0ciB1cCwgbXBfc2l6ZV90IHVzaXplKQoreworICBBU1NFUlQgKHVzaXplID49IDEpOworCisgIFRSQUNFIChnbXBfcHJpbnRmICgibXBuX3BlcmZlY3Rfc3F1YXJlX3AgJU5kXG4iLCB1cCwgdXNpemUpKTsKKworICAvKiBUaGUgZmlyc3QgdGVzdCBleGNsdWRlcyAyMTIvMjU2ICg4Mi44JSkgb2YgdGhlIHBlcmZlY3Qgc3F1YXJlIGNhbmRpZGF0ZXMKKyAgICAgaW4gTygxKSB0aW1lLiAgKi8KKyAgeworICAgIHVuc2lnbmVkICBpZHggPSB1cFswXSAlIDB4MTAwOworICAgIGlmICgoKHNxX3Jlc18weDEwMFtpZHggLyBHTVBfTElNQl9CSVRTXQorCSAgPj4gKGlkeCAlIEdNUF9MSU1CX0JJVFMpKSAmIDEpID09IDApCisgICAgICByZXR1cm4gMDsKKyAgfQorCisjaWYgMAorICAvKiBDaGVjayB0aGF0IHdlIGhhdmUgZXZlbiBtdWx0aXBsaWNpdHkgb2YgMiwgYW5kIHRoZW4gY2hlY2sgdGhhdCB0aGUgcmVzdCBpcworICAgICBhIHBvc3NpYmxlIHBlcmZlY3Qgc3F1YXJlLiAgTGVhdmUgZGlzYWJsZWQgdW50aWwgd2UgY2FuIGRldGVybWluZSB0aGlzCisgICAgIHJlYWxseSBpcyBhbiBpbXByb3ZlbWVudC4gIEl0IGl0IGlzLCBpdCBjb3VsZCBjb21wbGV0ZWx5IHJlcGxhY2UgdGhlCisgICAgIHNpbXBsZSBwcm9iZSBhYm92ZSwgc2luY2UgdGhpcyBzaG91bGQgdGhyb3cgb3V0IG1vcmUgbm9uLXNxdWFyZXMsIGJ1dCBhdAorICAgICB0aGUgZXhwZW5zZSBvZiBzb21ld2hhdCBtb3JlIGN5Y2xlcy4gICovCisgIHsKKyAgICBtcF9saW1iX3QgbG87CisgICAgaW50IGNudDsKKyAgICBsbyA9IHVwWzBdOworICAgIHdoaWxlIChsbyA9PSAwKQorICAgICAgdXArKywgbG8gPSB1cFswXSwgdXNpemUtLTsKKyAgICBjb3VudF90cmFpbGluZ196ZXJvcyAoY250LCBsbyk7CisgICAgaWYgKChjbnQgJiAxKSAhPSAwKQorICAgICAgcmV0dXJuIDA7CQkJLyogcmV0dXJuIG9mIG5vdCBldmVuIG11bHRpcGxpY2l0eSBvZiAyICovCisgICAgbG8gPj49IGNudDsJCQkvKiBzaGlmdCBkb3duIHRvIGFsaWduIGxvd2VzdCBub24temVybyBiaXQgKi8KKyAgICBsbyA+Pj0gMTsJCQkvKiBzaGlmdCBhd2F5IGxvd2VzdCBub24temVybyBiaXQgKi8KKyAgICBpZiAoKGxvICYgMykgIT0gMCkKKyAgICAgIHJldHVybiAwOworICB9CisjZW5kaWYKKworCisgIC8qIFRoZSBzZWNvbmQgdGVzdCB1c2VzIG1wbl9tb2RfMzRsc3ViMSBvciBtcG5fbW9kXzEgdG8gZGV0ZWN0IG5vbi1zcXVhcmVzCisgICAgIGFjY29yZGluZyB0byB0aGVpciByZXNpZHVlcyBtb2R1bG8gc21hbGwgcHJpbWVzIChvciBwb3dlcnMgb2YKKyAgICAgcHJpbWVzKS4gIFNlZSBwZXJmc3FyLmguICAqLworICBQRVJGU1FSX01PRF9URVNUICh1cCwgdXNpemUpOworCisKKyAgLyogRm9yIHRoZSB0aGlyZCBhbmQgbGFzdCB0ZXN0LCB3ZSBmaW5hbGx5IGNvbXB1dGUgdGhlIHNxdWFyZSByb290LAorICAgICB0byBtYWtlIHN1cmUgd2UndmUgcmVhbGx5IGdvdCBhIHBlcmZlY3Qgc3F1YXJlLiAgKi8KKyAgeworICAgIG1wX3B0ciByb290X3B0cjsKKyAgICBpbnQgcmVzOworICAgIFRNUF9ERUNMOworCisgICAgVE1QX01BUks7CisgICAgcm9vdF9wdHIgPSBUTVBfQUxMT0NfTElNQlMgKCh1c2l6ZSArIDEpIC8gMik7CisKKyAgICAvKiBJZmYgbXBuX3NxcnRyZW0gcmV0dXJucyB6ZXJvLCB0aGUgc3F1YXJlIGlzIHBlcmZlY3QuICAqLworICAgIHJlcyA9ICEgbXBuX3NxcnRyZW0gKHJvb3RfcHRyLCBOVUxMLCB1cCwgdXNpemUpOworICAgIFRNUF9GUkVFOworCisgICAgcmV0dXJuIHJlczsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3BvcGhhbS5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3BvcGhhbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3OTc0ZDcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvcG9waGFtLmMKQEAgLTAsMCArMSwxMjUgQEAKKy8qIG1wbl9wb3Bjb3VudCwgbXBuX2hhbWRpc3QgLS0gbXBuIGJpdCBwb3B1bGF0aW9uIGNvdW50L2hhbW1pbmcgZGlzdGFuY2UuCisKK0NvcHlyaWdodCAxOTk0LCAxOTk2LCAyMDAwLTIwMDIsIDIwMDUsIDIwMTEsIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworI2lmIE9QRVJBVElPTl9wb3Bjb3VudAorI2RlZmluZSBGTkFNRSBtcG5fcG9wY291bnQKKyNkZWZpbmUgUE9QSEFNKHUsdikgdQorI2VuZGlmCisKKyNpZiBPUEVSQVRJT05faGFtZGlzdAorI2RlZmluZSBGTkFNRSBtcG5faGFtZGlzdAorI2RlZmluZSBQT1BIQU0odSx2KSB1IF4gdgorI2VuZGlmCisKK21wX2JpdGNudF90CitGTkFNRSAobXBfc3JjcHRyIHVwLAorI2lmIE9QRVJBVElPTl9oYW1kaXN0CisgICAgICAgbXBfc3JjcHRyIHZwLAorI2VuZGlmCisgICAgICAgbXBfc2l6ZV90IG4pIF9fR01QX05PVEhST1cKK3sKKyAgbXBfYml0Y250X3QgcmVzdWx0ID0gMDsKKyAgbXBfbGltYl90IHAwLCBwMSwgcDIsIHAzLCB4LCBwMDEsIHAyMzsKKyAgbXBfc2l6ZV90IGk7CisKKyAgQVNTRVJUIChuID49IDEpOwkJLyogQWN0dWFsbHksIHRoaXMgY29kZSBoYW5kbGVzIGFueSBuLCBidXQgc29tZQorCQkJCSAgIGFzc2VtYmx5IGltcGxlbWVudGF0aW9ucyBkbyBub3QuICAqLworCisgIGZvciAoaSA9IG4gPj4gMjsgaSAhPSAwOyBpLS0pCisgICAgeworICAgICAgcDAgPSBQT1BIQU0gKHVwWzBdLCB2cFswXSk7CisgICAgICBwMCAtPSAocDAgPj4gMSkgJiBNUF9MSU1CX1RfTUFYLzM7CQkJCS8qIDIgMC0yICovCisgICAgICBwMCA9ICgocDAgPj4gMikgJiBNUF9MSU1CX1RfTUFYLzUpICsgKHAwICYgTVBfTElNQl9UX01BWC81KTsJLyogNCAwLTQgKi8KKworICAgICAgcDEgPSBQT1BIQU0gKHVwWzFdLCB2cFsxXSk7CisgICAgICBwMSAtPSAocDEgPj4gMSkgJiBNUF9MSU1CX1RfTUFYLzM7CQkJCS8qIDIgMC0yICovCisgICAgICBwMSA9ICgocDEgPj4gMikgJiBNUF9MSU1CX1RfTUFYLzUpICsgKHAxICYgTVBfTElNQl9UX01BWC81KTsJLyogNCAwLTQgKi8KKworICAgICAgcDAxID0gcDAgKyBwMTsJCQkJCQkJLyogOCAwLTggKi8KKyAgICAgIHAwMSA9ICgocDAxID4+IDQpICYgTVBfTElNQl9UX01BWC8xNykgKyAocDAxICYgTVBfTElNQl9UX01BWC8xNyk7CS8qIDggMC0xNiAqLworCisgICAgICBwMiA9IFBPUEhBTSAodXBbMl0sIHZwWzJdKTsKKyAgICAgIHAyIC09IChwMiA+PiAxKSAmIE1QX0xJTUJfVF9NQVgvMzsJCQkJLyogMiAwLTIgKi8KKyAgICAgIHAyID0gKChwMiA+PiAyKSAmIE1QX0xJTUJfVF9NQVgvNSkgKyAocDIgJiBNUF9MSU1CX1RfTUFYLzUpOwkvKiA0IDAtNCAqLworCisgICAgICBwMyA9IFBPUEhBTSAodXBbM10sIHZwWzNdKTsKKyAgICAgIHAzIC09IChwMyA+PiAxKSAmIE1QX0xJTUJfVF9NQVgvMzsJCQkJLyogMiAwLTIgKi8KKyAgICAgIHAzID0gKChwMyA+PiAyKSAmIE1QX0xJTUJfVF9NQVgvNSkgKyAocDMgJiBNUF9MSU1CX1RfTUFYLzUpOwkvKiA0IDAtNCAqLworCisgICAgICBwMjMgPSBwMiArIHAzOwkJCQkJCQkvKiA4IDAtOCAqLworICAgICAgcDIzID0gKChwMjMgPj4gNCkgJiBNUF9MSU1CX1RfTUFYLzE3KSArIChwMjMgJiBNUF9MSU1CX1RfTUFYLzE3KTsJLyogOCAwLTE2ICovCisKKyAgICAgIHggPSBwMDEgKyBwMjM7CQkJCQkJCS8qIDggMC0zMiAqLworICAgICAgeCA9ICh4ID4+IDgpICsgeDsJCQkJCQkJLyogOCAwLTY0ICovCisgICAgICB4ID0gKHggPj4gMTYpICsgeDsJCQkJCQkvKiA4IDAtMTI4ICovCisjaWYgR01QX0xJTUJfQklUUyA+IDMyCisgICAgICB4ID0gKCh4ID4+IDMyKSAmIDB4ZmYpICsgKHggJiAweGZmKTsJCQkJLyogOCAwLTI1NiAqLworICAgICAgcmVzdWx0ICs9IHg7CisjZWxzZQorICAgICAgcmVzdWx0ICs9IHggJiAweGZmOworI2VuZGlmCisgICAgICB1cCArPSA0OworI2lmIE9QRVJBVElPTl9oYW1kaXN0CisgICAgICB2cCArPSA0OworI2VuZGlmCisgICAgfQorCisgIG4gJj0gMzsKKyAgaWYgKG4gIT0gMCkKKyAgICB7CisgICAgICB4ID0gMDsKKyAgICAgIGRvCisJeworCSAgcDAgPSBQT1BIQU0gKHVwWzBdLCB2cFswXSk7CisJICBwMCAtPSAocDAgPj4gMSkgJiBNUF9MSU1CX1RfTUFYLzM7CQkJCS8qIDIgMC0yICovCisJICBwMCA9ICgocDAgPj4gMikgJiBNUF9MSU1CX1RfTUFYLzUpICsgKHAwICYgTVBfTElNQl9UX01BWC81KTsJLyogNCAwLTQgKi8KKwkgIHAwID0gKChwMCA+PiA0KSArIHAwKSAmIE1QX0xJTUJfVF9NQVgvMTc7CQkJLyogOCAwLTggKi8KKworCSAgeCArPSBwMDsKKwkgIHVwICs9IDE7CisjaWYgT1BFUkFUSU9OX2hhbWRpc3QKKwkgIHZwICs9IDE7CisjZW5kaWYKKwl9CisgICAgICB3aGlsZSAoLS1uKTsKKworICAgICAgeCA9ICh4ID4+IDgpICsgeDsKKyAgICAgIHggPSAoeCA+PiAxNikgKyB4OworI2lmIEdNUF9MSU1CX0JJVFMgPiAzMgorICAgICAgeCA9ICh4ID4+IDMyKSArIHg7CisjZW5kaWYKKyAgICAgIHJlc3VsdCArPSB4ICYgMHhmZjsKKyAgICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9wb3dfMS5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Bvd18xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUxMWNkMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9wb3dfMS5jCkBAIC0wLDAgKzEsMTM1IEBACisvKiBtcG5fcG93XzEgLS0gQ29tcHV0ZSBwb3dlcnMgUiA9IFVeZXhwLgorCisgICBUSEUgRlVOQ1RJT05TIElOIFRISVMgRklMRSBBUkUgRk9SIElOVEVSTkFMIFVTRSBPTkxZLiAgVEhFWSdSRSBBTE1PU1QKKyAgIENFUlRBSU4gVE8gQkUgU1VCSkVDVCBUTyBJTkNPTVBBVElCTEUgQ0hBTkdFUyBPUiBESVNBUFBFQVIgQ09NUExFVEVMWSBJTgorICAgRlVUVVJFIEdOVSBNUCBSRUxFQVNFUy4KKworQ29weXJpZ2h0IDIwMDIsIDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisjaW5jbHVkZSAibG9uZ2xvbmcuaCIKKworbXBfc2l6ZV90CittcG5fcG93XzEgKG1wX3B0ciBycCwgbXBfc3JjcHRyIGJwLCBtcF9zaXplX3QgYm4sIG1wX2xpbWJfdCBleHAsIG1wX3B0ciB0cCkKK3sKKyAgbXBfbGltYl90IHg7CisgIGludCBjbnQsIGk7CisgIG1wX3NpemVfdCBybjsKKyAgaW50IHBhcjsKKworICBBU1NFUlQgKGJuID49IDEpOworICAvKiBGSVhNRTogQWRkIG9wZXJhbmQgb3ZlcmxhcCBjcml0ZXJpYSAqLworCisgIGlmIChleHAgPD0gMSkKKyAgICB7CisgICAgICBpZiAoZXhwID09IDApCisJeworCSAgcnBbMF0gPSAxOworCSAgcmV0dXJuIDE7CisJfQorICAgICAgZWxzZQorCXsKKwkgIE1QTl9DT1BZIChycCwgYnAsIGJuKTsKKwkgIHJldHVybiBibjsKKwl9CisgICAgfQorCisgIC8qIENvdW50IG51bWJlciBvZiBiaXRzIGluIGV4cCwgYW5kIGNvbXB1dGUgd2hlcmUgdG8gcHV0IGluaXRpYWwgc3F1YXJlIGluCisgICAgIG9yZGVyIHRvIG1hZ2ljYWxseSBnZXQgcmVzdWx0cyBpbiB0aGUgZW50cnkgcnAuICBVc2Ugc2ltcGxlIGNvZGUsCisgICAgIG9wdGltaXplZCBmb3Igc21hbGwgZXhwLiAgRm9yIGxhcmdlIGV4cCwgdGhlIGJpZ251bSBvcGVyYXRpb25zIHdpbGwgdGFrZQorICAgICBzbyBtdWNoIHRpbWUgdGhhdCB0aGUgc2xvd25lc3Mgb2YgdGhpcyBjb2RlIHdpbGwgYmUgbmVnbGlnaWJsZS4gICovCisgIHBhciA9IDA7CisgIGNudCA9IEdNUF9MSU1CX0JJVFM7CisgIHggPSBleHA7CisgIGRvCisgICAgeworICAgICAgcGFyIF49IHg7CisgICAgICBjbnQtLTsKKyAgICAgIHggPj49IDE7CisgICAgfSB3aGlsZSAoeCAhPSAwKTsKKyAgZXhwIDw8PSBjbnQ7CisKKyAgaWYgKGJuID09IDEpCisgICAgeworICAgICAgbXBfbGltYl90IHJsLCByaCwgYmwgPSBicFswXTsKKworICAgICAgaWYgKChjbnQgJiAxKSAhPSAwKQorCU1QX1BUUl9TV0FQIChycCwgdHApOworCisgICAgICB1bXVsX3BwbW0gKHJoLCBybCwgYmwsIGJsIDw8IEdNUF9OQUlMX0JJVFMpOworICAgICAgcnBbMF0gPSBybCA+PiBHTVBfTkFJTF9CSVRTOworICAgICAgcnBbMV0gPSByaDsKKyAgICAgIHJuID0gMSArIChyaCAhPSAwKTsKKworICAgICAgZm9yIChpID0gR01QX0xJTUJfQklUUyAtIGNudCAtIDE7OykKKwl7CisJICBleHAgPDw9IDE7CisJICBpZiAoKGV4cCAmIEdNUF9MSU1CX0hJR0hCSVQpICE9IDApCisJICAgIHsKKwkgICAgICBycFtybl0gPSByaCA9IG1wbl9tdWxfMSAocnAsIHJwLCBybiwgYmwpOworCSAgICAgIHJuICs9IHJoICE9IDA7CisJICAgIH0KKworCSAgaWYgKC0taSA9PSAwKQorCSAgICBicmVhazsKKworCSAgbXBuX3NxciAodHAsIHJwLCBybik7CisJICBybiA9IDIgKiBybjsgcm4gLT0gdHBbcm4gLSAxXSA9PSAwOworCSAgTVBfUFRSX1NXQVAgKHJwLCB0cCk7CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmICgoKHBhciBeIGNudCkgJiAxKSA9PSAwKQorCU1QX1BUUl9TV0FQIChycCwgdHApOworCisgICAgICBtcG5fc3FyIChycCwgYnAsIGJuKTsKKyAgICAgIHJuID0gMiAqIGJuOyBybiAtPSBycFtybiAtIDFdID09IDA7CisKKyAgICAgIGZvciAoaSA9IEdNUF9MSU1CX0JJVFMgLSBjbnQgLSAxOzspCisJeworCSAgZXhwIDw8PSAxOworCSAgaWYgKChleHAgJiBHTVBfTElNQl9ISUdIQklUKSAhPSAwKQorCSAgICB7CisJICAgICAgcm4gPSBybiArIGJuIC0gKG1wbl9tdWwgKHRwLCBycCwgcm4sIGJwLCBibikgPT0gMCk7CisJICAgICAgTVBfUFRSX1NXQVAgKHJwLCB0cCk7CisJICAgIH0KKworCSAgaWYgKC0taSA9PSAwKQorCSAgICBicmVhazsKKworCSAgbXBuX3NxciAodHAsIHJwLCBybik7CisJICBybiA9IDIgKiBybjsgcm4gLT0gdHBbcm4gLSAxXSA9PSAwOworCSAgTVBfUFRSX1NXQVAgKHJwLCB0cCk7CisJfQorICAgIH0KKworICByZXR1cm4gcm47Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvcG93bG8uYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9wb3dsby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMjZiY2EKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvcG93bG8uYwpAQCAtMCwwICsxLDE4OCBAQAorLyogbXBuX3Bvd2xvIC0tIENvbXB1dGUgUiA9IFVeRSBtb2QgQl5uLCB3aGVyZSBCIGlzIHRoZSBsaW1iIGJhc2UuCisKK0NvcHlyaWdodCAyMDA3LTIwMDksIDIwMTIsIDIwMTUsIDIwMTYsIDIwMTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisjaW5jbHVkZSAibG9uZ2xvbmcuaCIKKworCisjZGVmaW5lIGdldGJpdChwLGJpKSBcCisgICgocFsoYmkgLSAxKSAvIEdNUF9MSU1CX0JJVFNdID4+IChiaSAtIDEpICUgR01QX0xJTUJfQklUUykgJiAxKQorCitzdGF0aWMgaW5saW5lIG1wX2xpbWJfdAorZ2V0Yml0cyAoY29uc3QgbXBfbGltYl90ICpwLCBtcF9iaXRjbnRfdCBiaSwgdW5zaWduZWQgbmJpdHMpCit7CisgIHVuc2lnbmVkIG5iaXRzX2luX3I7CisgIG1wX2xpbWJfdCByOworICBtcF9zaXplX3QgaTsKKworICBpZiAoYmkgPCBuYml0cykKKyAgICB7CisgICAgICByZXR1cm4gcFswXSAmICgoKG1wX2xpbWJfdCkgMSA8PCBiaSkgLSAxKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBiaSAtPSBuYml0czsJCQkvKiBiaXQgaW5kZXggb2YgbG93IGJpdCB0byBleHRyYWN0ICovCisgICAgICBpID0gYmkgLyBHTVBfTlVNQl9CSVRTOwkJLyogd29yZCBpbmRleCBvZiBsb3cgYml0IHRvIGV4dHJhY3QgKi8KKyAgICAgIGJpICU9IEdNUF9OVU1CX0JJVFM7CQkvKiBiaXQgaW5kZXggaW4gbG93IHdvcmQgKi8KKyAgICAgIHIgPSBwW2ldID4+IGJpOwkJCS8qIGV4dHJhY3QgKGxvdykgYml0cyAqLworICAgICAgbmJpdHNfaW5fciA9IEdNUF9OVU1CX0JJVFMgLSBiaTsJLyogbnVtYmVyIG9mIGJpdHMgbm93IGluIHIgKi8KKyAgICAgIGlmIChuYml0c19pbl9yIDwgbmJpdHMpCQkvKiBkaWQgd2UgZ2V0IGVub3VnaCBiaXRzPyAqLworCXIgKz0gcFtpICsgMV0gPDwgbmJpdHNfaW5fcjsJLyogcHJlcGVuZCBiaXRzIGZyb20gaGlnaGVyIHdvcmQgKi8KKyAgICAgIHJldHVybiByICYgKCgobXBfbGltYl90ICkgMSA8PCBuYml0cykgLSAxKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQKK3dpbl9zaXplIChtcF9iaXRjbnRfdCBlYikKK3sKKyAgdW5zaWduZWQgazsKKyAgc3RhdGljIG1wX2JpdGNudF90IHhbXSA9IHs3LDI1LDgxLDI0MSw2NzMsMTc5Myw0NjA5LDExNTIxLDI4MTYxLH4obXBfYml0Y250X3QpMH07CisgIEFTU0VSVCAoZWIgPiAxKTsKKyAgZm9yIChrID0gMDsgZWIgPiB4W2srK107KQorICAgIDsKKyAgcmV0dXJuIGs7Cit9CisKKy8qIHJwW24tMS4uMF0gPSBicFtuLTEuLjBdIF4gZXBbZW4tMS4uMF0gbW9kIEJebiwgQiBpcyB0aGUgbGltYiBiYXNlLgorICAgUmVxdWlyZXMgdGhhdCBlcFtlbi0xXSBpcyBub24temVyby4KKyAgIFVzZXMgc2NyYXRjaCBzcGFjZSB0cFszbi0xLi4wXSwgaS5lLiwgM24gd29yZHMuICAqLworLyogV2Ugb25seSB1c2UgbiB3b3JkcyBpbiB0aGUgc2NyYXRjaCBzcGFjZSwgd2Ugc2hvdWxkIHBhc3MgdHAgKyBuIHRvCisgICBtdWxsby9zcXJsbyBhcyBhIHRlbXBvcmFyeSBhcmVhLCBpdCBpcyBuZWVkZWQuICovCit2b2lkCittcG5fcG93bG8gKG1wX3B0ciBycCwgbXBfc3JjcHRyIGJwLAorCSAgIG1wX3NyY3B0ciBlcCwgbXBfc2l6ZV90IGVuLAorCSAgIG1wX3NpemVfdCBuLCBtcF9wdHIgdHApCit7CisgIHVuc2lnbmVkIGNudDsKKyAgbXBfYml0Y250X3QgZWJpOworICB1bnNpZ25lZCB3aW5kb3dzaXplLCB0aGlzX3dpbmRvd3NpemU7CisgIG1wX2xpbWJfdCBleHBiaXRzOworICBtcF9saW1iX3QgKnBwOworICBsb25nIGk7CisgIGludCBmbGlwZmxvcDsKKyAgVE1QX0RFQ0w7CisKKyAgQVNTRVJUIChlbiA+IDEgfHwgKGVuID09IDEgJiYgZXBbMF0gPiAxKSk7CisKKyAgVE1QX01BUks7CisKKyAgTVBOX1NJWkVJTkJBU0VfMkVYUChlYmksIGVwLCBlbiwgMSk7CisKKyAgd2luZG93c2l6ZSA9IHdpbl9zaXplIChlYmkpOworICBpZiAod2luZG93c2l6ZSA+IDEpCisgICAgeworICAgICAgbXBfbGltYl90ICp0aGlzX3BwLCAqbGFzdF9wcDsKKyAgICAgIEFTU0VSVCAod2luZG93c2l6ZSA8IGViaSk7CisKKyAgICAgIHBwID0gVE1QX0FMTE9DX0xJTUJTICgobiA8PCAod2luZG93c2l6ZSAtIDEpKSk7CisKKyAgICAgIHRoaXNfcHAgPSBwcDsKKworICAgICAgTVBOX0NPUFkgKHRoaXNfcHAsIGJwLCBuKTsKKworICAgICAgLyogU3RvcmUgYl4yIGluIHRwLiAgKi8KKyAgICAgIG1wbl9zcXJsbyAodHAsIGJwLCBuKTsKKworICAgICAgLyogUHJlY29tcHV0ZSBvZGQgcG93ZXJzIG9mIGIgYW5kIHB1dCB0aGVtIGluIHRoZSB0ZW1wb3JhcnkgYXJlYSBhdCBwcC4gICovCisgICAgICBpID0gKDEgPDwgKHdpbmRvd3NpemUgLSAxKSkgLSAxOworICAgICAgZG8KKwl7CisJICBsYXN0X3BwID0gdGhpc19wcDsKKwkgIHRoaXNfcHAgKz0gbjsKKwkgIG1wbl9tdWxsb19uICh0aGlzX3BwLCBsYXN0X3BwLCB0cCwgbik7CisJfSB3aGlsZSAoLS1pICE9IDApOworCisgICAgICBleHBiaXRzID0gZ2V0Yml0cyAoZXAsIGViaSwgd2luZG93c2l6ZSk7CisKKyAgICAgIC8qIFRISU5LOiBTaG91bGQgd2UgaW5pdGlhbGlzZSB0aGUgY2FzZSBleHBiaXRzICUgNCA9PSAwIHdpdGggYSBtdWxsbz8gKi8KKyAgICAgIGNvdW50X3RyYWlsaW5nX3plcm9zIChjbnQsIGV4cGJpdHMpOworICAgICAgZWJpIC09IHdpbmRvd3NpemU7CisgICAgICBlYmkgKz0gY250OworICAgICAgZXhwYml0cyA+Pj0gY250OworCisgICAgICBNUE5fQ09QWSAocnAsIHBwICsgbiAqIChleHBiaXRzID4+IDEpLCBuKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBwcCA9IHRwICsgbjsKKyAgICAgIE1QTl9DT1BZIChwcCwgYnAsIG4pOworICAgICAgTVBOX0NPUFkgKHJwLCBicCwgbik7CisgICAgICAtLWViaTsKKyAgICB9CisKKyAgZmxpcGZsb3AgPSAwOworCisgIGRvCisgICAgeworICAgICAgd2hpbGUgKGdldGJpdCAoZXAsIGViaSkgPT0gMCkKKwl7CisJICBtcG5fc3FybG8gKHRwLCBycCwgbik7CisJICBNUF9QVFJfU1dBUCAocnAsIHRwKTsKKwkgIGZsaXBmbG9wID0gISBmbGlwZmxvcDsKKwkgIGlmICgtLWViaSA9PSAwKQorCSAgICBnb3RvIGRvbmU7CisJfQorCisgICAgICAvKiBUaGUgbmV4dCBiaXQgb2YgdGhlIGV4cG9uZW50IGlzIDEuICBOb3cgZXh0cmFjdCB0aGUgbGFyZ2VzdCBibG9jayBvZgorCSBiaXRzIDw9IHdpbmRvd3NpemUsIGFuZCBzdWNoIHRoYXQgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCBpcyAxLiAgKi8KKworICAgICAgZXhwYml0cyA9IGdldGJpdHMgKGVwLCBlYmksIHdpbmRvd3NpemUpOworICAgICAgdGhpc193aW5kb3dzaXplID0gTUlOICh3aW5kb3dzaXplLCBlYmkpOworICAgICAgZWJpIC09IHRoaXNfd2luZG93c2l6ZTsKKworICAgICAgY291bnRfdHJhaWxpbmdfemVyb3MgKGNudCwgZXhwYml0cyk7CisgICAgICB0aGlzX3dpbmRvd3NpemUgLT0gY250OworICAgICAgZWJpICs9IGNudDsKKyAgICAgIGV4cGJpdHMgPj49IGNudDsKKworICAgICAgd2hpbGUgKHRoaXNfd2luZG93c2l6ZSA+IDEpCisJeworCSAgbXBuX3NxcmxvICh0cCwgcnAsIG4pOworCSAgbXBuX3NxcmxvIChycCwgdHAsIG4pOworCSAgdGhpc193aW5kb3dzaXplIC09IDI7CisJfQorCisgICAgICBpZiAodGhpc193aW5kb3dzaXplICE9IDApCisJbXBuX3NxcmxvICh0cCwgcnAsIG4pOworICAgICAgZWxzZQorCXsKKwkgIE1QX1BUUl9TV0FQIChycCwgdHApOworCSAgZmxpcGZsb3AgPSAhIGZsaXBmbG9wOworCX0KKworICAgICAgbXBuX211bGxvX24gKHJwLCB0cCwgcHAgKyBuICogKGV4cGJpdHMgPj4gMSksIG4pOworICAgIH0gd2hpbGUgKGViaSAhPSAwKTsKKworIGRvbmU6CisgIGlmIChmbGlwZmxvcCkKKyAgICBNUE5fQ09QWSAodHAsIHJwLCBuKTsKKyAgVE1QX0ZSRUU7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvcG93bS5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Bvd20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODI4MTAzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Bvd20uYwpAQCAtMCwwICsxLDYzNSBAQAorLyogbXBuX3Bvd20gLS0gQ29tcHV0ZSBSID0gVV5FIG1vZCBNLgorCisgICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisKKyAgIFRIRSBGVU5DVElPTlMgSU4gVEhJUyBGSUxFIEFSRSBJTlRFUk5BTCBXSVRIIE1VVEFCTEUgSU5URVJGQUNFUy4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggVEhFTSBUSFJPVUdIIERPQ1VNRU5URUQgSU5URVJGQUNFUy4gIElOIEZBQ1QsIElUIElTIEFMTU9TVAorICAgR1VBUkFOVEVFRCBUSEFUIFRIRVkgV0lMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEgRlVUVVJFIEdOVSBNUCBSRUxFQVNFLgorCitDb3B5cmlnaHQgMjAwNy0yMDEyLCAyMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisKKy8qCisgIEJBU0lDIEFMR09SSVRITSwgQ29tcHV0ZSBVXkUgbW9kIE0sIHdoZXJlIE0gPCBCXm4gaXMgb2RkLgorCisgIDEuIFcgPC0gVQorCisgIDIuIFQgPC0gKEJebiAqIFUpIG1vZCBNICAgICAgICAgICAgICAgIENvbnZlcnQgdG8gUkVEQyBmb3JtCisKKyAgMy4gQ29tcHV0ZSB0YWJsZSBVXjEsIFVeMywgVV41Li4uIG9mIEUtZGVwZW5kZW50IHNpemUKKworICA0LiBXaGlsZSB0aGVyZSBhcmUgbW9yZSBiaXRzIGluIEUKKyAgICAgICBXIDwtIHBvd2VyIGxlZnQtdG8tcmlnaHQgYmFzZS1rCisKKworICBUT0RPOgorCisgICAqIE1ha2UgZ2V0Yml0cyBhIG1hY3JvLCB0aGVyZWJ5IGFsbG93aW5nIGl0IHRvIHVwZGF0ZSB0aGUgaW5kZXggb3BlcmFuZC4KKyAgICAgVGhhdCB3aWxsIHNpbXBsaWZ5IHRoZSBjb2RlIHVzaW5nIGdldGJpdHMuICAoUGVyaGFwcyBtYWtlIGdldGJpdHMnIHNpYmxpbmcKKyAgICAgZ2V0Yml0IHRoZW4gaGF2ZSBzaW1pbGFyIGZvcm0sIGZvciBzeW1tZXRyeS4pCisKKyAgICogV3JpdGUgYW4gaXRjaCBmdW5jdGlvbi4gIE9yIHBlcmhhcHMgZ2V0IHJpZCBvZiB0cCBwYXJhbWV0ZXIgc2luY2UgdGhlIGh1Z2UKKyAgICAgcHAgYXJlYSBpcyBhbGxvY2F0ZWQgbG9jYWxseSBhbnl3YXk/CisKKyAgICogQ2hvb3NlIHdpbmRvdyBzaXplIHdpdGhvdXQgbG9vcGluZy4gIChTdXBlcm9wdGltaXplIG9yIHRoaW5rKHRtKS4pCisKKyAgICogSGFuZGxlIHNtYWxsIGJhc2VzIHdpdGggaW5pdGlhbCwgcmVkdWN0aW9uLWZyZWUgZXhwb25lbnRpYXRpb24uCisKKyAgICogQ2FsbCBuZXcgZGl2aXNpb24gZnVuY3Rpb25zLCBub3QgbXBuX3RkaXZfcXIuCisKKyAgICogQ29uc2lkZXIgc3BlY2lhbCBjb2RlIGZvciBvbmUtbGltYiBNLgorCisgICAqIEhvdyBzaG91bGQgd2UgaGFuZGxlIHRoZSByZWRjMS9yZWRjMi9yZWRjX24gY2hvaWNlPworICAgICAtIHJlZGMxOiAgVChiaW52ZXJ0XzFsaW1iKSAgKyBlICogKG4pICAgKiAoVChtdWxsby0xeDEpICsgbipUKGFkZG11bF8xKSkKKyAgICAgLSByZWRjMjogIFQoYmludmVydF8ybGltYnMpICsgZSAqIChuLzIpICogKFQobXVsbG8tMngyKSArIG4qVChhZGRtdWxfMikpCisgICAgIC0gcmVkY19uOiBUKGJpbnZlcnRfbmxpbWJzKSArIGUgKiAoVChtdWxsby1ueG4pICsgVChNKG4pKSkKKyAgICAgVGhpcyBkaXNyZWdhcmRzIHRoZSBhZGRtdWxfTiBjb25zdGFudCB0ZXJtLCBidXQgd2UgY291bGQgdGhpbmsgb2YKKyAgICAgdGhhdCBhcyBwYXJ0IG9mIHRoZSByZXNwZWN0aXZlIG11bGxvLgorCisgICAqIFdoZW4gVSAodGhlIGJhc2UpIGlzIHNtYWxsLCB3ZSBzaG91bGQgc3RhcnQgdGhlIGV4cG9uZW50aWF0aW9uIHdpdGggcGxhaW4KKyAgICAgb3BlcmF0aW9ucywgdGhlbiBjb252ZXJ0IHRoYXQgcGFydGlhbCByZXN1bHQgdG8gUkVEQyBmb3JtLgorCisgICAqIFdoZW4gVSBpcyBqdXN0IG9uZSBsaW1iLCBzaG91bGQgaXQgYmUgaGFuZGxlZCB3aXRob3V0IHRoZSBrLWFyeSB0cmlja3M/CisgICAgIFdlIGNvdWxkIGtlZXAgYSBmYWN0b3Igb2YgQl5uIGluIFcsIGJ1dCB1c2UgVScgPSBCVSBhcyBiYXNlLiAgQWZ0ZXIKKyAgICAgbXVsdGlwbHlpbmcgYnkgdGhpcyAocHNldWRvIHR3by1saW1iKSBudW1iZXIsIHdlIG5lZWQgdG8gbXVsdGlwbHkgYnkgMS9CCisgICAgIG1vZCBNLgorKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisjaW5jbHVkZSAibG9uZ2xvbmcuaCIKKworI3VuZGVmIE1QTl9SRURDXzAKKyNkZWZpbmUgTVBOX1JFRENfMChycCwgdXAsIG1wLCBpbnZtKQkJCQkJXAorICBkbyB7CQkJCQkJCQkJXAorICAgIG1wX2xpbWJfdCBwMSwgcjAsIHUwLCBfZHVtbXk7CQkJCQlcCisgICAgdTAgPSAqKHVwKTsJCQkJCQkJCVwKKyAgICB1bXVsX3BwbW0gKHAxLCBfZHVtbXksICoobXApLCAodTAgKiAoaW52bSkpICYgR01QX05VTUJfTUFTSyk7CVwKKyAgICBBU1NFUlQgKCgodTAgKyBfZHVtbXkpICYgR01QX05VTUJfTUFTSykgPT0gMCk7CQkJXAorICAgIHAxICs9ICh1MCAhPSAwKTsJCQkJCQkJXAorICAgIHIwID0gKHVwKVsxXSArIHAxOwkJCQkJCQlcCisgICAgaWYgKHAxID4gcjApCQkJCQkJCVwKKyAgICAgIHIwIC09ICoobXApOwkJCQkJCQlcCisgICAgKihycCkgPSByMDsJCQkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworI3VuZGVmIE1QTl9SRURDXzEKKyNpZiBIQVZFX05BVElWRV9tcG5fc2JwaTFfYmRpdl9yCisjZGVmaW5lIE1QTl9SRURDXzEocnAsIHVwLCBtcCwgbiwgaW52bSkJCQkJCVwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBtcF9saW1iX3QgY3k7CQkJCQkJCVwKKyAgICBjeSA9IG1wbl9zYnBpMV9iZGl2X3IgKHVwLCAyICogbiwgbXAsIG4sIGludm0pOwkJCVwKKyAgICBpZiAoY3kgIT0gMCkJCQkJCQkJXAorICAgICAgbXBuX3N1Yl9uIChycCwgdXAgKyBuLCBtcCwgbik7CQkJCQlcCisgICAgZWxzZQkJCQkJCQkJXAorICAgICAgTVBOX0NPUFkgKHJwLCB1cCArIG4sIG4pOwkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIE1QTl9SRURDXzEocnAsIHVwLCBtcCwgbiwgaW52bSkJCQkJCVwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBtcF9saW1iX3QgY3k7CQkJCQkJCVwKKyAgICBjeSA9IG1wbl9yZWRjXzEgKHJwLCB1cCwgbXAsIG4sIGludm0pOwkJCQlcCisgICAgaWYgKGN5ICE9IDApCQkJCQkJCVwKKyAgICAgIG1wbl9zdWJfbiAocnAsIHJwLCBtcCwgbik7CQkJCQlcCisgIH0gd2hpbGUgKDApCisjZW5kaWYKKworI3VuZGVmIE1QTl9SRURDXzIKKyNkZWZpbmUgTVBOX1JFRENfMihycCwgdXAsIG1wLCBuLCBtaXApCQkJCQlcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgbXBfbGltYl90IGN5OwkJCQkJCQlcCisgICAgY3kgPSBtcG5fcmVkY18yIChycCwgdXAsIG1wLCBuLCBtaXApOwkJCQlcCisgICAgaWYgKGN5ICE9IDApCQkJCQkJCVwKKyAgICAgIG1wbl9zdWJfbiAocnAsIHJwLCBtcCwgbik7CQkJCQlcCisgIH0gd2hpbGUgKDApCisKKyNpZiBIQVZFX05BVElWRV9tcG5fYWRkbXVsXzIgfHwgSEFWRV9OQVRJVkVfbXBuX3JlZGNfMgorI2RlZmluZSBXQU5UX1JFRENfMiAxCisjZW5kaWYKKworI2RlZmluZSBnZXRiaXQocCxiaSkgXAorICAoKHBbKGJpIC0gMSkgLyBHTVBfTElNQl9CSVRTXSA+PiAoYmkgLSAxKSAlIEdNUF9MSU1CX0JJVFMpICYgMSkKKworc3RhdGljIGlubGluZSBtcF9saW1iX3QKK2dldGJpdHMgKGNvbnN0IG1wX2xpbWJfdCAqcCwgbXBfYml0Y250X3QgYmksIGludCBuYml0cykKK3sKKyAgaW50IG5iaXRzX2luX3I7CisgIG1wX2xpbWJfdCByOworICBtcF9zaXplX3QgaTsKKworICBpZiAoYmkgPCBuYml0cykKKyAgICB7CisgICAgICByZXR1cm4gcFswXSAmICgoKG1wX2xpbWJfdCkgMSA8PCBiaSkgLSAxKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBiaSAtPSBuYml0czsJCQkvKiBiaXQgaW5kZXggb2YgbG93IGJpdCB0byBleHRyYWN0ICovCisgICAgICBpID0gYmkgLyBHTVBfTlVNQl9CSVRTOwkJLyogd29yZCBpbmRleCBvZiBsb3cgYml0IHRvIGV4dHJhY3QgKi8KKyAgICAgIGJpICU9IEdNUF9OVU1CX0JJVFM7CQkvKiBiaXQgaW5kZXggaW4gbG93IHdvcmQgKi8KKyAgICAgIHIgPSBwW2ldID4+IGJpOwkJCS8qIGV4dHJhY3QgKGxvdykgYml0cyAqLworICAgICAgbmJpdHNfaW5fciA9IEdNUF9OVU1CX0JJVFMgLSBiaTsJLyogbnVtYmVyIG9mIGJpdHMgbm93IGluIHIgKi8KKyAgICAgIGlmIChuYml0c19pbl9yIDwgbmJpdHMpCQkvKiBkaWQgd2UgZ2V0IGVub3VnaCBiaXRzPyAqLworCXIgKz0gcFtpICsgMV0gPDwgbmJpdHNfaW5fcjsJLyogcHJlcGVuZCBiaXRzIGZyb20gaGlnaGVyIHdvcmQgKi8KKyAgICAgIHJldHVybiByICYgKCgobXBfbGltYl90KSAxIDw8IG5iaXRzKSAtIDEpOworICAgIH0KK30KKworc3RhdGljIGlubGluZSBpbnQKK3dpbl9zaXplIChtcF9iaXRjbnRfdCBlYikKK3sKKyAgaW50IGs7CisgIHN0YXRpYyBtcF9iaXRjbnRfdCB4W10gPSB7MCw3LDI1LDgxLDI0MSw2NzMsMTc5Myw0NjA5LDExNTIxLDI4MTYxLH4obXBfYml0Y250X3QpMH07CisgIGZvciAoayA9IDE7IGViID4geFtrXTsgaysrKQorICAgIDsKKyAgcmV0dXJuIGs7Cit9CisKKy8qIENvbnZlcnQgVSB0byBSRURDIGZvcm0sIFVfciA9IEJebiAqIFUgbW9kIE0gKi8KK3N0YXRpYyB2b2lkCityZWRjaWZ5IChtcF9wdHIgcnAsIG1wX3NyY3B0ciB1cCwgbXBfc2l6ZV90IHVuLCBtcF9zcmNwdHIgbXAsIG1wX3NpemVfdCBuKQoreworICBtcF9wdHIgdHAsIHFwOworICBUTVBfREVDTDsKKyAgVE1QX01BUks7CisKKyAgVE1QX0FMTE9DX0xJTUJTXzIgKHRwLCB1biArIG4sIHFwLCB1biArIDEpOworCisgIE1QTl9aRVJPICh0cCwgbik7CisgIE1QTl9DT1BZICh0cCArIG4sIHVwLCB1bik7CisgIG1wbl90ZGl2X3FyIChxcCwgcnAsIDBMLCB0cCwgdW4gKyBuLCBtcCwgbik7CisgIFRNUF9GUkVFOworfQorCisvKiBycFtuLTEuLjBdID0gYnBbYm4tMS4uMF0gXiBlcFtlbi0xLi4wXSBtb2QgbXBbbi0xLi4wXQorICAgUmVxdWlyZXMgdGhhdCBtcFtuLTEuLjBdIGlzIG9kZC4KKyAgIFJlcXVpcmVzIHRoYXQgZXBbZW4tMS4uMF0gaXMgPiAxLgorICAgVXNlcyBzY3JhdGNoIHNwYWNlIGF0IHRwIG9mIE1BWChtcG5fYmludmVydF9pdGNoKG4pLDJuKSBsaW1icy4gICovCit2b2lkCittcG5fcG93bSAobXBfcHRyIHJwLCBtcF9zcmNwdHIgYnAsIG1wX3NpemVfdCBibiwKKwkgIG1wX3NyY3B0ciBlcCwgbXBfc2l6ZV90IGVuLAorCSAgbXBfc3JjcHRyIG1wLCBtcF9zaXplX3QgbiwgbXBfcHRyIHRwKQoreworICBtcF9saW1iX3QgaXBbMl0sICptaXA7CisgIGludCBjbnQ7CisgIG1wX2JpdGNudF90IGViaTsKKyAgaW50IHdpbmRvd3NpemUsIHRoaXNfd2luZG93c2l6ZTsKKyAgbXBfbGltYl90IGV4cGJpdHM7CisgIG1wX3B0ciBwcCwgdGhpc19wcDsKKyAgbG9uZyBpOworICBUTVBfREVDTDsKKworICBBU1NFUlQgKGVuID4gMSB8fCAoZW4gPT0gMSAmJiBlcFswXSA+IDEpKTsKKyAgQVNTRVJUIChuID49IDEgJiYgKChtcFswXSAmIDEpICE9IDApKTsKKworICBUTVBfTUFSSzsKKworICBNUE5fU0laRUlOQkFTRV8yRVhQKGViaSwgZXAsIGVuLCAxKTsKKworI2lmIDAKKyAgaWYgKGJuIDwgbikKKyAgICB7CisgICAgICAvKiBEbyB0aGUgZmlyc3QgZmV3IGV4cG9uZW50IGJpdHMgd2l0aG91dCBtb2QgcmVkdWN0aW9ucywKKwkgdW50aWwgdGhlIHJlc3VsdCBpcyBncmVhdGVyIHRoYW4gdGhlIG1vZCBhcmd1bWVudC4gICovCisgICAgICBmb3IgKDs7KQorCXsKKwkgIG1wbl9zcXIgKHRwLCB0aGlzX3BwLCB0bik7CisJICB0biA9IHRuICogMiAtIDEsICB0biArPSB0cFt0bl0gIT0gMDsKKwkgIGlmIChnZXRiaXQgKGVwLCBlYmkpICE9IDApCisJICAgIG1wbl9tdWwgKC4uLiwgdHAsIHRuLCBicCwgYm4pOworCSAgZWJpLS07CisJfQorICAgIH0KKyNlbmRpZgorCisgIHdpbmRvd3NpemUgPSB3aW5fc2l6ZSAoZWJpKTsKKworI2lmIFdBTlRfUkVEQ18yCisgIGlmIChCRUxPV19USFJFU0hPTEQgKG4sIFJFRENfMV9UT19SRURDXzJfVEhSRVNIT0xEKSkKKyAgICB7CisgICAgICBtaXAgPSBpcDsKKyAgICAgIGJpbnZlcnRfbGltYiAobWlwWzBdLCBtcFswXSk7CisgICAgICBtaXBbMF0gPSAtbWlwWzBdOworICAgIH0KKyAgZWxzZSBpZiAoQkVMT1dfVEhSRVNIT0xEIChuLCBSRURDXzJfVE9fUkVEQ19OX1RIUkVTSE9MRCkpCisgICAgeworICAgICAgbWlwID0gaXA7CisgICAgICBtcG5fYmludmVydCAobWlwLCBtcCwgMiwgdHApOworICAgICAgbWlwWzBdID0gLW1pcFswXTsgbWlwWzFdID0gfm1pcFsxXTsKKyAgICB9CisjZWxzZQorICBpZiAoQkVMT1dfVEhSRVNIT0xEIChuLCBSRURDXzFfVE9fUkVEQ19OX1RIUkVTSE9MRCkpCisgICAgeworICAgICAgbWlwID0gaXA7CisgICAgICBiaW52ZXJ0X2xpbWIgKG1pcFswXSwgbXBbMF0pOworICAgICAgbWlwWzBdID0gLW1pcFswXTsKKyAgICB9CisjZW5kaWYKKyAgZWxzZQorICAgIHsKKyAgICAgIG1pcCA9IFRNUF9BTExPQ19MSU1CUyAobik7CisgICAgICBtcG5fYmludmVydCAobWlwLCBtcCwgbiwgdHApOworICAgIH0KKworICBwcCA9IFRNUF9BTExPQ19MSU1CUyAobiA8PCAod2luZG93c2l6ZSAtIDEpKTsKKworICB0aGlzX3BwID0gcHA7CisgIHJlZGNpZnkgKHRoaXNfcHAsIGJwLCBibiwgbXAsIG4pOworCisgIC8qIFN0b3JlIGJeMiBhdCBycC4gICovCisgIG1wbl9zcXIgKHRwLCB0aGlzX3BwLCBuKTsKKyNpZiAwCisgIGlmIChuID09IDEpIHsKKyAgICBNUE5fUkVEQ18wIChycCwgdHAsIG1wLCBtaXBbMF0pOworICB9IGVsc2UKKyNlbmRpZgorI2lmIFdBTlRfUkVEQ18yCisgIGlmIChCRUxPV19USFJFU0hPTEQgKG4sIFJFRENfMV9UT19SRURDXzJfVEhSRVNIT0xEKSkKKyAgICBNUE5fUkVEQ18xIChycCwgdHAsIG1wLCBuLCBtaXBbMF0pOworICBlbHNlIGlmIChCRUxPV19USFJFU0hPTEQgKG4sIFJFRENfMl9UT19SRURDX05fVEhSRVNIT0xEKSkKKyAgICBNUE5fUkVEQ18yIChycCwgdHAsIG1wLCBuLCBtaXApOworI2Vsc2UKKyAgaWYgKEJFTE9XX1RIUkVTSE9MRCAobiwgUkVEQ18xX1RPX1JFRENfTl9USFJFU0hPTEQpKQorICAgIE1QTl9SRURDXzEgKHJwLCB0cCwgbXAsIG4sIG1pcFswXSk7CisjZW5kaWYKKyAgZWxzZQorICAgIG1wbl9yZWRjX24gKHJwLCB0cCwgbXAsIG4sIG1pcCk7CisKKyAgLyogUHJlY29tcHV0ZSBvZGQgcG93ZXJzIG9mIGIgYW5kIHB1dCB0aGVtIGluIHRoZSB0ZW1wb3JhcnkgYXJlYSBhdCBwcC4gICovCisgIGZvciAoaSA9ICgxIDw8ICh3aW5kb3dzaXplIC0gMSkpIC0gMTsgaSA+IDA7IGktLSkKKyNpZiAxCisgICAgaWYgKG4gPT0gMSkgeworICAgICAgdW11bF9wcG1tKCh0cClbMV0sICoodHApLCAqKHRoaXNfcHApLCAqKHJwKSk7CisgICAgICArK3RoaXNfcHAgOworICAgICAgTVBOX1JFRENfMCAodGhpc19wcCwgdHAsIG1wLCBtaXBbMF0pOworICAgIH0gZWxzZQorI2VuZGlmCisgICAgeworICAgICAgbXBuX211bF9uICh0cCwgdGhpc19wcCwgcnAsIG4pOworICAgICAgdGhpc19wcCArPSBuOworI2lmIFdBTlRfUkVEQ18yCisgICAgICBpZiAoQkVMT1dfVEhSRVNIT0xEIChuLCBSRURDXzFfVE9fUkVEQ18yX1RIUkVTSE9MRCkpCisJTVBOX1JFRENfMSAodGhpc19wcCwgdHAsIG1wLCBuLCBtaXBbMF0pOworICAgICAgZWxzZSBpZiAoQkVMT1dfVEhSRVNIT0xEIChuLCBSRURDXzJfVE9fUkVEQ19OX1RIUkVTSE9MRCkpCisJTVBOX1JFRENfMiAodGhpc19wcCwgdHAsIG1wLCBuLCBtaXApOworI2Vsc2UKKyAgICAgIGlmIChCRUxPV19USFJFU0hPTEQgKG4sIFJFRENfMV9UT19SRURDX05fVEhSRVNIT0xEKSkKKwlNUE5fUkVEQ18xICh0aGlzX3BwLCB0cCwgbXAsIG4sIG1pcFswXSk7CisjZW5kaWYKKyAgICAgIGVsc2UKKwltcG5fcmVkY19uICh0aGlzX3BwLCB0cCwgbXAsIG4sIG1pcCk7CisgICAgfQorCisgIGV4cGJpdHMgPSBnZXRiaXRzIChlcCwgZWJpLCB3aW5kb3dzaXplKTsKKyAgaWYgKGViaSA8IHdpbmRvd3NpemUpCisgICAgZWJpID0gMDsKKyAgZWxzZQorICAgIGViaSAtPSB3aW5kb3dzaXplOworCisgIGNvdW50X3RyYWlsaW5nX3plcm9zIChjbnQsIGV4cGJpdHMpOworICBlYmkgKz0gY250OworICBleHBiaXRzID4+PSBjbnQ7CisKKyAgTVBOX0NPUFkgKHJwLCBwcCArIG4gKiAoZXhwYml0cyA+PiAxKSwgbik7CisKKyNkZWZpbmUgSU5ORVJMT09QCQkJCQkJCVwKKyAgd2hpbGUgKGViaSAhPSAwKQkJCQkJCQlcCisgICAgewkJCQkJCQkJCVwKKyAgICAgIHdoaWxlIChnZXRiaXQgKGVwLCBlYmkpID09IDApCQkJCQlcCisJewkJCQkJCQkJXAorCSAgTVBOX1NRUiAodHAsIHJwLCBuKTsJCQkJCQlcCisJICBNUE5fUkVEVUNFIChycCwgdHAsIG1wLCBuLCBtaXApOwkJCQlcCisJICBpZiAoLS1lYmkgPT0gMCkJCQkJCQlcCisJICAgIGdvdG8gZG9uZTsJCQkJCQkJXAorCX0JCQkJCQkJCVwKKwkJCQkJCQkJCVwKKyAgICAgIC8qIFRoZSBuZXh0IGJpdCBvZiB0aGUgZXhwb25lbnQgaXMgMS4gIE5vdyBleHRyYWN0IHRoZSBsYXJnZXN0CVwKKwkgYmxvY2sgb2YgYml0cyA8PSB3aW5kb3dzaXplLCBhbmQgc3VjaCB0aGF0IHRoZSBsZWFzdAkJXAorCSBzaWduaWZpY2FudCBiaXQgaXMgMS4gICovCQkJCQlcCisJCQkJCQkJCQlcCisgICAgICBleHBiaXRzID0gZ2V0Yml0cyAoZXAsIGViaSwgd2luZG93c2l6ZSk7CQkJCVwKKyAgICAgIHRoaXNfd2luZG93c2l6ZSA9IHdpbmRvd3NpemU7CQkJCQlcCisgICAgICBpZiAoZWJpIDwgd2luZG93c2l6ZSkJCQkJCQlcCisJewkJCQkJCQkJXAorCSAgdGhpc193aW5kb3dzaXplIC09IHdpbmRvd3NpemUgLSBlYmk7CQkJCVwKKwkgIGViaSA9IDA7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCisgICAgICBlbHNlCQkJCQkJCQlcCisgICAgICAgIGViaSAtPSB3aW5kb3dzaXplOwkJCQkJCVwKKwkJCQkJCQkJCVwKKyAgICAgIGNvdW50X3RyYWlsaW5nX3plcm9zIChjbnQsIGV4cGJpdHMpOwkJCQlcCisgICAgICB0aGlzX3dpbmRvd3NpemUgLT0gY250OwkJCQkJCVwKKyAgICAgIGViaSArPSBjbnQ7CQkJCQkJCVwKKyAgICAgIGV4cGJpdHMgPj49IGNudDsJCQkJCQkJXAorCQkJCQkJCQkJXAorICAgICAgZG8JCQkJCQkJCVwKKwl7CQkJCQkJCQlcCisJICBNUE5fU1FSICh0cCwgcnAsIG4pOwkJCQkJCVwKKwkgIE1QTl9SRURVQ0UgKHJwLCB0cCwgbXAsIG4sIG1pcCk7CQkJCVwKKwl9CQkJCQkJCQlcCisgICAgICB3aGlsZSAoLS10aGlzX3dpbmRvd3NpemUgIT0gMCk7CQkJCQlcCisJCQkJCQkJCQlcCisgICAgICBNUE5fTVVMX04gKHRwLCBycCwgcHAgKyBuICogKGV4cGJpdHMgPj4gMSksIG4pOwkJCVwKKyAgICAgIE1QTl9SRURVQ0UgKHJwLCB0cCwgbXAsIG4sIG1pcCk7CQkJCQlcCisgICAgfQorCisKKyAgaWYgKG4gPT0gMSkKKyAgICB7CisjdW5kZWYgTVBOX01VTF9OCisjdW5kZWYgTVBOX1NRUgorI3VuZGVmIE1QTl9SRURVQ0UKKyNkZWZpbmUgTVBOX01VTF9OKHIsYSxiLG4pCQl1bXVsX3BwbW0oKHIpWzFdLCAqKHIpLCAqKGEpLCAqKGIpKQorI2RlZmluZSBNUE5fU1FSKHIsYSxuKQkJCXVtdWxfcHBtbSgocilbMV0sICoociksICooYSksICooYSkpCisjZGVmaW5lIE1QTl9SRURVQ0UocnAsdHAsbXAsbixtaXApCU1QTl9SRURDXzAocnAsIHRwLCBtcCwgbWlwWzBdKQorICAgICAgSU5ORVJMT09QOworICAgIH0KKyAgZWxzZQorI2lmIFdBTlRfUkVEQ18yCisgIGlmIChSRURDXzFfVE9fUkVEQ18yX1RIUkVTSE9MRCA8IE1VTF9UT09NMjJfVEhSRVNIT0xEKQorICAgIHsKKyAgICAgIGlmIChCRUxPV19USFJFU0hPTEQgKG4sIFJFRENfMV9UT19SRURDXzJfVEhSRVNIT0xEKSkKKwl7CisJICBpZiAoUkVEQ18xX1RPX1JFRENfMl9USFJFU0hPTEQgPCBTUVJfQkFTRUNBU0VfVEhSRVNIT0xECisJICAgICAgfHwgQkVMT1dfVEhSRVNIT0xEIChuLCBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEKSkKKwkgICAgeworI3VuZGVmIE1QTl9NVUxfTgorI3VuZGVmIE1QTl9TUVIKKyN1bmRlZiBNUE5fUkVEVUNFCisjZGVmaW5lIE1QTl9NVUxfTihyLGEsYixuKQkJbXBuX211bF9iYXNlY2FzZSAocixhLG4sYixuKQorI2RlZmluZSBNUE5fU1FSKHIsYSxuKQkJCW1wbl9tdWxfYmFzZWNhc2UgKHIsYSxuLGEsbikKKyNkZWZpbmUgTVBOX1JFRFVDRShycCx0cCxtcCxuLG1pcCkJTVBOX1JFRENfMSAocnAsIHRwLCBtcCwgbiwgbWlwWzBdKQorCSAgICAgIElOTkVSTE9PUDsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisjdW5kZWYgTVBOX01VTF9OCisjdW5kZWYgTVBOX1NRUgorI3VuZGVmIE1QTl9SRURVQ0UKKyNkZWZpbmUgTVBOX01VTF9OKHIsYSxiLG4pCQltcG5fbXVsX2Jhc2VjYXNlIChyLGEsbixiLG4pCisjZGVmaW5lIE1QTl9TUVIocixhLG4pCQkJbXBuX3Nxcl9iYXNlY2FzZSAocixhLG4pCisjZGVmaW5lIE1QTl9SRURVQ0UocnAsdHAsbXAsbixtaXApCU1QTl9SRURDXzEgKHJwLCB0cCwgbXAsIG4sIG1pcFswXSkKKwkgICAgICBJTk5FUkxPT1A7CisJICAgIH0KKwl9CisgICAgICBlbHNlIGlmIChCRUxPV19USFJFU0hPTEQgKG4sIE1VTF9UT09NMjJfVEhSRVNIT0xEKSkKKwl7CisJICBpZiAoTVVMX1RPT00yMl9USFJFU0hPTEQgPCBTUVJfQkFTRUNBU0VfVEhSRVNIT0xECisJICAgICAgfHwgQkVMT1dfVEhSRVNIT0xEIChuLCBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEKSkKKwkgICAgeworI3VuZGVmIE1QTl9NVUxfTgorI3VuZGVmIE1QTl9TUVIKKyN1bmRlZiBNUE5fUkVEVUNFCisjZGVmaW5lIE1QTl9NVUxfTihyLGEsYixuKQkJbXBuX211bF9iYXNlY2FzZSAocixhLG4sYixuKQorI2RlZmluZSBNUE5fU1FSKHIsYSxuKQkJCW1wbl9tdWxfYmFzZWNhc2UgKHIsYSxuLGEsbikKKyNkZWZpbmUgTVBOX1JFRFVDRShycCx0cCxtcCxuLG1pcCkJTVBOX1JFRENfMiAocnAsIHRwLCBtcCwgbiwgbWlwKQorCSAgICAgIElOTkVSTE9PUDsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisjdW5kZWYgTVBOX01VTF9OCisjdW5kZWYgTVBOX1NRUgorI3VuZGVmIE1QTl9SRURVQ0UKKyNkZWZpbmUgTVBOX01VTF9OKHIsYSxiLG4pCQltcG5fbXVsX2Jhc2VjYXNlIChyLGEsbixiLG4pCisjZGVmaW5lIE1QTl9TUVIocixhLG4pCQkJbXBuX3Nxcl9iYXNlY2FzZSAocixhLG4pCisjZGVmaW5lIE1QTl9SRURVQ0UocnAsdHAsbXAsbixtaXApCU1QTl9SRURDXzIgKHJwLCB0cCwgbXAsIG4sIG1pcCkKKwkgICAgICBJTk5FUkxPT1A7CisJICAgIH0KKwl9CisgICAgICBlbHNlIGlmIChCRUxPV19USFJFU0hPTEQgKG4sIFJFRENfMl9UT19SRURDX05fVEhSRVNIT0xEKSkKKwl7CisjdW5kZWYgTVBOX01VTF9OCisjdW5kZWYgTVBOX1NRUgorI3VuZGVmIE1QTl9SRURVQ0UKKyNkZWZpbmUgTVBOX01VTF9OKHIsYSxiLG4pCQltcG5fbXVsX24gKHIsYSxiLG4pCisjZGVmaW5lIE1QTl9TUVIocixhLG4pCQkJbXBuX3NxciAocixhLG4pCisjZGVmaW5lIE1QTl9SRURVQ0UocnAsdHAsbXAsbixtaXApCU1QTl9SRURDXzIgKHJwLCB0cCwgbXAsIG4sIG1pcCkKKwkgIElOTkVSTE9PUDsKKwl9CisgICAgICBlbHNlCisJeworI3VuZGVmIE1QTl9NVUxfTgorI3VuZGVmIE1QTl9TUVIKKyN1bmRlZiBNUE5fUkVEVUNFCisjZGVmaW5lIE1QTl9NVUxfTihyLGEsYixuKQkJbXBuX211bF9uIChyLGEsYixuKQorI2RlZmluZSBNUE5fU1FSKHIsYSxuKQkJCW1wbl9zcXIgKHIsYSxuKQorI2RlZmluZSBNUE5fUkVEVUNFKHJwLHRwLG1wLG4sbWlwKQltcG5fcmVkY19uIChycCwgdHAsIG1wLCBuLCBtaXApCisJICBJTk5FUkxPT1A7CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChCRUxPV19USFJFU0hPTEQgKG4sIE1VTF9UT09NMjJfVEhSRVNIT0xEKSkKKwl7CisJICBpZiAoTVVMX1RPT00yMl9USFJFU0hPTEQgPCBTUVJfQkFTRUNBU0VfVEhSRVNIT0xECisJICAgICAgfHwgQkVMT1dfVEhSRVNIT0xEIChuLCBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEKSkKKwkgICAgeworI3VuZGVmIE1QTl9NVUxfTgorI3VuZGVmIE1QTl9TUVIKKyN1bmRlZiBNUE5fUkVEVUNFCisjZGVmaW5lIE1QTl9NVUxfTihyLGEsYixuKQkJbXBuX211bF9iYXNlY2FzZSAocixhLG4sYixuKQorI2RlZmluZSBNUE5fU1FSKHIsYSxuKQkJCW1wbl9tdWxfYmFzZWNhc2UgKHIsYSxuLGEsbikKKyNkZWZpbmUgTVBOX1JFRFVDRShycCx0cCxtcCxuLG1pcCkJTVBOX1JFRENfMSAocnAsIHRwLCBtcCwgbiwgbWlwWzBdKQorCSAgICAgIElOTkVSTE9PUDsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisjdW5kZWYgTVBOX01VTF9OCisjdW5kZWYgTVBOX1NRUgorI3VuZGVmIE1QTl9SRURVQ0UKKyNkZWZpbmUgTVBOX01VTF9OKHIsYSxiLG4pCQltcG5fbXVsX2Jhc2VjYXNlIChyLGEsbixiLG4pCisjZGVmaW5lIE1QTl9TUVIocixhLG4pCQkJbXBuX3Nxcl9iYXNlY2FzZSAocixhLG4pCisjZGVmaW5lIE1QTl9SRURVQ0UocnAsdHAsbXAsbixtaXApCU1QTl9SRURDXzEgKHJwLCB0cCwgbXAsIG4sIG1pcFswXSkKKwkgICAgICBJTk5FUkxPT1A7CisJICAgIH0KKwl9CisgICAgICBlbHNlIGlmIChCRUxPV19USFJFU0hPTEQgKG4sIFJFRENfMV9UT19SRURDXzJfVEhSRVNIT0xEKSkKKwl7CisjdW5kZWYgTVBOX01VTF9OCisjdW5kZWYgTVBOX1NRUgorI3VuZGVmIE1QTl9SRURVQ0UKKyNkZWZpbmUgTVBOX01VTF9OKHIsYSxiLG4pCQltcG5fbXVsX24gKHIsYSxiLG4pCisjZGVmaW5lIE1QTl9TUVIocixhLG4pCQkJbXBuX3NxciAocixhLG4pCisjZGVmaW5lIE1QTl9SRURVQ0UocnAsdHAsbXAsbixtaXApCU1QTl9SRURDXzEgKHJwLCB0cCwgbXAsIG4sIG1pcFswXSkKKwkgIElOTkVSTE9PUDsKKwl9CisgICAgICBlbHNlIGlmIChCRUxPV19USFJFU0hPTEQgKG4sIFJFRENfMl9UT19SRURDX05fVEhSRVNIT0xEKSkKKwl7CisjdW5kZWYgTVBOX01VTF9OCisjdW5kZWYgTVBOX1NRUgorI3VuZGVmIE1QTl9SRURVQ0UKKyNkZWZpbmUgTVBOX01VTF9OKHIsYSxiLG4pCQltcG5fbXVsX24gKHIsYSxiLG4pCisjZGVmaW5lIE1QTl9TUVIocixhLG4pCQkJbXBuX3NxciAocixhLG4pCisjZGVmaW5lIE1QTl9SRURVQ0UocnAsdHAsbXAsbixtaXApCU1QTl9SRURDXzIgKHJwLCB0cCwgbXAsIG4sIG1pcCkKKwkgIElOTkVSTE9PUDsKKwl9CisgICAgICBlbHNlCisJeworI3VuZGVmIE1QTl9NVUxfTgorI3VuZGVmIE1QTl9TUVIKKyN1bmRlZiBNUE5fUkVEVUNFCisjZGVmaW5lIE1QTl9NVUxfTihyLGEsYixuKQkJbXBuX211bF9uIChyLGEsYixuKQorI2RlZmluZSBNUE5fU1FSKHIsYSxuKQkJCW1wbl9zcXIgKHIsYSxuKQorI2RlZmluZSBNUE5fUkVEVUNFKHJwLHRwLG1wLG4sbWlwKQltcG5fcmVkY19uIChycCwgdHAsIG1wLCBuLCBtaXApCisJICBJTk5FUkxPT1A7CisJfQorICAgIH0KKworI2Vsc2UgIC8qIFdBTlRfUkVEQ18yICovCisKKyAgaWYgKFJFRENfMV9UT19SRURDX05fVEhSRVNIT0xEIDwgTVVMX1RPT00yMl9USFJFU0hPTEQpCisgICAgeworICAgICAgaWYgKEJFTE9XX1RIUkVTSE9MRCAobiwgUkVEQ18xX1RPX1JFRENfTl9USFJFU0hPTEQpKQorCXsKKwkgIGlmIChSRURDXzFfVE9fUkVEQ19OX1RIUkVTSE9MRCA8IFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQKKwkgICAgICB8fCBCRUxPV19USFJFU0hPTEQgKG4sIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQpKQorCSAgICB7CisjdW5kZWYgTVBOX01VTF9OCisjdW5kZWYgTVBOX1NRUgorI3VuZGVmIE1QTl9SRURVQ0UKKyNkZWZpbmUgTVBOX01VTF9OKHIsYSxiLG4pCQltcG5fbXVsX2Jhc2VjYXNlIChyLGEsbixiLG4pCisjZGVmaW5lIE1QTl9TUVIocixhLG4pCQkJbXBuX211bF9iYXNlY2FzZSAocixhLG4sYSxuKQorI2RlZmluZSBNUE5fUkVEVUNFKHJwLHRwLG1wLG4sbWlwKQlNUE5fUkVEQ18xIChycCwgdHAsIG1wLCBuLCBtaXBbMF0pCisJICAgICAgSU5ORVJMT09QOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKyN1bmRlZiBNUE5fTVVMX04KKyN1bmRlZiBNUE5fU1FSCisjdW5kZWYgTVBOX1JFRFVDRQorI2RlZmluZSBNUE5fTVVMX04ocixhLGIsbikJCW1wbl9tdWxfYmFzZWNhc2UgKHIsYSxuLGIsbikKKyNkZWZpbmUgTVBOX1NRUihyLGEsbikJCQltcG5fc3FyX2Jhc2VjYXNlIChyLGEsbikKKyNkZWZpbmUgTVBOX1JFRFVDRShycCx0cCxtcCxuLG1pcCkJTVBOX1JFRENfMSAocnAsIHRwLCBtcCwgbiwgbWlwWzBdKQorCSAgICAgIElOTkVSTE9PUDsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UgaWYgKEJFTE9XX1RIUkVTSE9MRCAobiwgTVVMX1RPT00yMl9USFJFU0hPTEQpKQorCXsKKwkgIGlmIChNVUxfVE9PTTIyX1RIUkVTSE9MRCA8IFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQKKwkgICAgICB8fCBCRUxPV19USFJFU0hPTEQgKG4sIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQpKQorCSAgICB7CisjdW5kZWYgTVBOX01VTF9OCisjdW5kZWYgTVBOX1NRUgorI3VuZGVmIE1QTl9SRURVQ0UKKyNkZWZpbmUgTVBOX01VTF9OKHIsYSxiLG4pCQltcG5fbXVsX2Jhc2VjYXNlIChyLGEsbixiLG4pCisjZGVmaW5lIE1QTl9TUVIocixhLG4pCQkJbXBuX211bF9iYXNlY2FzZSAocixhLG4sYSxuKQorI2RlZmluZSBNUE5fUkVEVUNFKHJwLHRwLG1wLG4sbWlwKQltcG5fcmVkY19uIChycCwgdHAsIG1wLCBuLCBtaXApCisJICAgICAgSU5ORVJMT09QOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKyN1bmRlZiBNUE5fTVVMX04KKyN1bmRlZiBNUE5fU1FSCisjdW5kZWYgTVBOX1JFRFVDRQorI2RlZmluZSBNUE5fTVVMX04ocixhLGIsbikJCW1wbl9tdWxfYmFzZWNhc2UgKHIsYSxuLGIsbikKKyNkZWZpbmUgTVBOX1NRUihyLGEsbikJCQltcG5fc3FyX2Jhc2VjYXNlIChyLGEsbikKKyNkZWZpbmUgTVBOX1JFRFVDRShycCx0cCxtcCxuLG1pcCkJbXBuX3JlZGNfbiAocnAsIHRwLCBtcCwgbiwgbWlwKQorCSAgICAgIElOTkVSTE9PUDsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwl7CisjdW5kZWYgTVBOX01VTF9OCisjdW5kZWYgTVBOX1NRUgorI3VuZGVmIE1QTl9SRURVQ0UKKyNkZWZpbmUgTVBOX01VTF9OKHIsYSxiLG4pCQltcG5fbXVsX24gKHIsYSxiLG4pCisjZGVmaW5lIE1QTl9TUVIocixhLG4pCQkJbXBuX3NxciAocixhLG4pCisjZGVmaW5lIE1QTl9SRURVQ0UocnAsdHAsbXAsbixtaXApCW1wbl9yZWRjX24gKHJwLCB0cCwgbXAsIG4sIG1pcCkKKwkgIElOTkVSTE9PUDsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKEJFTE9XX1RIUkVTSE9MRCAobiwgTVVMX1RPT00yMl9USFJFU0hPTEQpKQorCXsKKwkgIGlmIChNVUxfVE9PTTIyX1RIUkVTSE9MRCA8IFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQKKwkgICAgICB8fCBCRUxPV19USFJFU0hPTEQgKG4sIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQpKQorCSAgICB7CisjdW5kZWYgTVBOX01VTF9OCisjdW5kZWYgTVBOX1NRUgorI3VuZGVmIE1QTl9SRURVQ0UKKyNkZWZpbmUgTVBOX01VTF9OKHIsYSxiLG4pCQltcG5fbXVsX2Jhc2VjYXNlIChyLGEsbixiLG4pCisjZGVmaW5lIE1QTl9TUVIocixhLG4pCQkJbXBuX211bF9iYXNlY2FzZSAocixhLG4sYSxuKQorI2RlZmluZSBNUE5fUkVEVUNFKHJwLHRwLG1wLG4sbWlwKQlNUE5fUkVEQ18xIChycCwgdHAsIG1wLCBuLCBtaXBbMF0pCisJICAgICAgSU5ORVJMT09QOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKyN1bmRlZiBNUE5fTVVMX04KKyN1bmRlZiBNUE5fU1FSCisjdW5kZWYgTVBOX1JFRFVDRQorI2RlZmluZSBNUE5fTVVMX04ocixhLGIsbikJCW1wbl9tdWxfYmFzZWNhc2UgKHIsYSxuLGIsbikKKyNkZWZpbmUgTVBOX1NRUihyLGEsbikJCQltcG5fc3FyX2Jhc2VjYXNlIChyLGEsbikKKyNkZWZpbmUgTVBOX1JFRFVDRShycCx0cCxtcCxuLG1pcCkJTVBOX1JFRENfMSAocnAsIHRwLCBtcCwgbiwgbWlwWzBdKQorCSAgICAgIElOTkVSTE9PUDsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UgaWYgKEJFTE9XX1RIUkVTSE9MRCAobiwgUkVEQ18xX1RPX1JFRENfTl9USFJFU0hPTEQpKQorCXsKKyN1bmRlZiBNUE5fTVVMX04KKyN1bmRlZiBNUE5fU1FSCisjdW5kZWYgTVBOX1JFRFVDRQorI2RlZmluZSBNUE5fTVVMX04ocixhLGIsbikJCW1wbl9tdWxfbiAocixhLGIsbikKKyNkZWZpbmUgTVBOX1NRUihyLGEsbikJCQltcG5fc3FyIChyLGEsbikKKyNkZWZpbmUgTVBOX1JFRFVDRShycCx0cCxtcCxuLG1pcCkJTVBOX1JFRENfMSAocnAsIHRwLCBtcCwgbiwgbWlwWzBdKQorCSAgSU5ORVJMT09QOworCX0KKyAgICAgIGVsc2UKKwl7CisjdW5kZWYgTVBOX01VTF9OCisjdW5kZWYgTVBOX1NRUgorI3VuZGVmIE1QTl9SRURVQ0UKKyNkZWZpbmUgTVBOX01VTF9OKHIsYSxiLG4pCQltcG5fbXVsX24gKHIsYSxiLG4pCisjZGVmaW5lIE1QTl9TUVIocixhLG4pCQkJbXBuX3NxciAocixhLG4pCisjZGVmaW5lIE1QTl9SRURVQ0UocnAsdHAsbXAsbixtaXApCW1wbl9yZWRjX24gKHJwLCB0cCwgbXAsIG4sIG1pcCkKKwkgIElOTkVSTE9PUDsKKwl9CisgICAgfQorI2VuZGlmICAvKiBXQU5UX1JFRENfMiAqLworCisgZG9uZToKKworICBNUE5fQ09QWSAodHAsIHJwLCBuKTsKKyAgTVBOX1pFUk8gKHRwICsgbiwgbik7CisKKyNpZiBXQU5UX1JFRENfMgorICBpZiAoQkVMT1dfVEhSRVNIT0xEIChuLCBSRURDXzFfVE9fUkVEQ18yX1RIUkVTSE9MRCkpCisgICAgTVBOX1JFRENfMSAocnAsIHRwLCBtcCwgbiwgbWlwWzBdKTsKKyAgZWxzZSBpZiAoQkVMT1dfVEhSRVNIT0xEIChuLCBSRURDXzJfVE9fUkVEQ19OX1RIUkVTSE9MRCkpCisgICAgTVBOX1JFRENfMiAocnAsIHRwLCBtcCwgbiwgbWlwKTsKKyNlbHNlCisgIGlmIChCRUxPV19USFJFU0hPTEQgKG4sIFJFRENfMV9UT19SRURDX05fVEhSRVNIT0xEKSkKKyAgICBNUE5fUkVEQ18xIChycCwgdHAsIG1wLCBuLCBtaXBbMF0pOworI2VuZGlmCisgIGVsc2UKKyAgICBtcG5fcmVkY19uIChycCwgdHAsIG1wLCBuLCBtaXApOworCisgIGlmIChtcG5fY21wIChycCwgbXAsIG4pID49IDApCisgICAgbXBuX3N1Yl9uIChycCwgcnAsIG1wLCBuKTsKKworICBUTVBfRlJFRTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9wcmVfZGl2cmVtXzEuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9wcmVfZGl2cmVtXzEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjI5ZDc3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3ByZV9kaXZyZW1fMS5jCkBAIC0wLDAgKzEsMTQ1IEBACisvKiBtcG5fcHJlaW52X2RpdnJlbV8xIC0tIG1wbiBieSBsaW1iIGRpdmlzaW9uIHdpdGggcHJlLWludmVydGVkIGRpdmlzb3IuCisKKyAgIFRIRSBGVU5DVElPTlMgSU4gVEhJUyBGSUxFIEFSRSBGT1IgSU5URVJOQUwgVVNFIE9OTFkuICBUSEVZJ1JFIEFMTU9TVAorICAgQ0VSVEFJTiBUTyBCRSBTVUJKRUNUIFRPIElOQ09NUEFUSUJMRSBDSEFOR0VTIE9SIERJU0FQUEVBUiBDT01QTEVURUxZIElOCisgICBGVVRVUkUgR05VIE1QIFJFTEVBU0VTLgorCitDb3B5cmlnaHQgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKyNpbmNsdWRlICJsb25nbG9uZy5oIgorCisKKy8qIERvbid0IGJsb2F0IGEgc2hhcmVkIGxpYnJhcnkgd2l0aCB1bnVzZWQgY29kZS4gKi8KKyNpZiBVU0VfUFJFSU5WX0RJVlJFTV8xCisKKy8qIFNhbWUgdGVzdCBoZXJlIGZvciBza2lwcGluZyBvbmUgZGl2aWRlIHN0ZXAgYXMgaW4gbXBuX2RpdnJlbV8xLgorCisgICBUaGUgbWFpbiByZWFzb24gZm9yIGEgc2VwYXJhdGUgc2hpZnQ9PTAgY2FzZSBpcyB0aGF0IG5vdCBhbGwgQ1BVcyBnaXZlCisgICB6ZXJvIGZvciAibjAgPj4gR01QX0xJTUJfQklUUyIgd2hpY2ggd291bGQgYXJpc2UgaW4gdGhlIGdlbmVyYWwgY2FzZQorICAgY29kZSB1c2VkIG9uIHNoaWZ0PT0wLiAgc2hpZnQ9PTAgaXMgYWxzbyByZWFzb25hYmx5IGNvbW1vbiBpbiBtcF9iYXNlcworICAgYmlnX2Jhc2UsIGZvciBpbnN0YW5jZSBiYXNlPT0xMCBvbiBhIDY0LWJpdCBsaW1iLgorCisgICBVbmRlciBzaGlmdCE9MCBpdCB3b3VsZCBiZSBwb3NzaWJsZSB0byBjYWxsIG1wbl9sc2hpZnQgdG8gYWRqdXN0IHRoZQorICAgZGl2aWRlbmQgYWxsIGluIG9uZSBnbyAoaW50byB0aGUgcXVvdGllbnQgc3BhY2Ugc2F5KSwgcmF0aGVyIHRoYW4KKyAgIGxpbWItYnktbGltYiBpbiB0aGUgbG9vcC4gIFRoaXMgbWlnaHQgaGVscCBpZiBtcG5fbHNoaWZ0IGlzIGEgbG90IGZhc3RlcgorICAgdGhhbiB3aGF0IHRoZSBjb21waWxlciBjYW4gZ2VuZXJhdGUgZm9yIEVYVFJBQ1QuICBCdXQgdGhpcyBpcyBsZWZ0IHRvIENQVQorICAgc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIHRvIGNvbnNpZGVyLCBlc3BlY2lhbGx5IHNpbmNlIEVYVFJBQ1QgaXNuJ3Qgb24KKyAgIHRoZSBkZXBlbmRlbnQgY2hhaW4uCisKKyAgIElmIHNpemU9PTAgdGhlbiB0aGUgcmVzdWx0IGlzIHNpbXBseSB4c2l6ZSBsaW1icyBvZiB6ZXJvcywgYnV0IG5vdGhpbmcKKyAgIHNwZWNpYWwgaXMgZG9uZSBmb3IgdGhhdCwgc2luY2UgaXQgd291bGRuJ3QgYmUgYSB1c3VhbCBjYWxsLCBhbmQKKyAgIGNlcnRhaW5seSBuZXZlciBhcmlzZXMgZnJvbSBtcG5fZ2V0X3N0ciB3aGljaCBpcyBvdXIgbWFpbiBjYWxsZXIuICAqLworCittcF9saW1iX3QKK21wbl9wcmVpbnZfZGl2cmVtXzEgKG1wX3B0ciBxcCwgbXBfc2l6ZV90IHhzaXplLAorCQkgICAgIG1wX3NyY3B0ciBhcCwgbXBfc2l6ZV90IHNpemUsIG1wX2xpbWJfdCBkX3Vubm9ybSwKKwkJICAgICBtcF9saW1iX3QgZGludiwgaW50IHNoaWZ0KQoreworICBtcF9saW1iX3QgIGFoaWdoLCBxaGlnaCwgcjsKKyAgbXBfc2l6ZV90ICBpOworICBtcF9saW1iX3QgIG4xLCBuMDsKKyAgbXBfbGltYl90ICBkOworCisgIEFTU0VSVCAoeHNpemUgPj0gMCk7CisgIEFTU0VSVCAoc2l6ZSA+PSAxKTsKKyAgQVNTRVJUIChkX3Vubm9ybSAhPSAwKTsKKyNpZiBXQU5UX0FTU0VSVAorICB7CisgICAgaW50ICAgICAgICB3YW50X3NoaWZ0OworICAgIG1wX2xpbWJfdCAgd2FudF9kaW52OworICAgIGNvdW50X2xlYWRpbmdfemVyb3MgKHdhbnRfc2hpZnQsIGRfdW5ub3JtKTsKKyAgICBBU1NFUlQgKHNoaWZ0ID09IHdhbnRfc2hpZnQpOworICAgIGludmVydF9saW1iICh3YW50X2RpbnYsIGRfdW5ub3JtIDw8IHNoaWZ0KTsKKyAgICBBU1NFUlQgKGRpbnYgPT0gd2FudF9kaW52KTsKKyAgfQorI2VuZGlmCisgIC8qIEZJWE1FOiBXaGF0J3MgdGhlIGNvcnJlY3Qgb3ZlcmxhcCBydWxlIHdoZW4geHNpemUhPTA/ICovCisgIEFTU0VSVCAoTVBOX1NBTUVfT1JfU0VQQVJBVEVfUCAocXAreHNpemUsIGFwLCBzaXplKSk7CisKKyAgYWhpZ2ggPSBhcFtzaXplLTFdOworICBkID0gZF91bm5vcm0gPDwgc2hpZnQ7CisgIHFwICs9IChzaXplICsgeHNpemUgLSAxKTsgICAvKiBkZXN0IGhpZ2ggbGltYiAqLworCisgIGlmIChzaGlmdCA9PSAwKQorICAgIHsKKyAgICAgIC8qIEhpZ2ggcXVvdGllbnQgbGltYiBpcyAwIG9yIDEsIGFuZCBza2lwIGEgZGl2aWRlIHN0ZXAuICovCisgICAgICByID0gYWhpZ2g7CisgICAgICBxaGlnaCA9IChyID49IGQpOworICAgICAgciA9IChxaGlnaCA/IHItZCA6IHIpOworICAgICAgKnFwLS0gPSBxaGlnaDsKKyAgICAgIHNpemUtLTsKKworICAgICAgZm9yIChpID0gc2l6ZS0xOyBpID49IDA7IGktLSkKKwl7CisJICBuMCA9IGFwW2ldOworCSAgdWRpdl9xcm5uZF9wcmVpbnYgKCpxcCwgciwgciwgbjAsIGQsIGRpbnYpOworCSAgcXAtLTsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgciA9IDA7CisgICAgICBpZiAoYWhpZ2ggPCBkX3Vubm9ybSkKKwl7CisJICByID0gYWhpZ2ggPDwgc2hpZnQ7CisJICAqcXAtLSA9IDA7CisJICBzaXplLS07CisJICBpZiAoc2l6ZSA9PSAwKQorCSAgICBnb3RvIGRvbmVfaW50ZWdlcjsKKwl9CisKKyAgICAgIG4xID0gYXBbc2l6ZS0xXTsKKyAgICAgIHIgfD0gbjEgPj4gKEdNUF9MSU1CX0JJVFMgLSBzaGlmdCk7CisKKyAgICAgIGZvciAoaSA9IHNpemUtMjsgaSA+PSAwOyBpLS0pCisJeworCSAgQVNTRVJUIChyIDwgZCk7CisJICBuMCA9IGFwW2ldOworCSAgdWRpdl9xcm5uZF9wcmVpbnYgKCpxcCwgciwgciwKKwkJCSAgICAgKChuMSA8PCBzaGlmdCkgfCAobjAgPj4gKEdNUF9MSU1CX0JJVFMgLSBzaGlmdCkpKSwKKwkJCSAgICAgZCwgZGludik7CisJICBxcC0tOworCSAgbjEgPSBuMDsKKwl9CisgICAgICB1ZGl2X3Fybm5kX3ByZWludiAoKnFwLCByLCByLCBuMSA8PCBzaGlmdCwgZCwgZGludik7CisgICAgICBxcC0tOworICAgIH0KKworIGRvbmVfaW50ZWdlcjoKKyAgZm9yIChpID0gMDsgaSA8IHhzaXplOyBpKyspCisgICAgeworICAgICAgdWRpdl9xcm5uZF9wcmVpbnYgKCpxcCwgciwgciwgQ05TVF9MSU1CKDApLCBkLCBkaW52KTsKKyAgICAgIHFwLS07CisgICAgfQorCisgIHJldHVybiByID4+IHNoaWZ0OworfQorCisjZW5kaWYgLyogVVNFX1BSRUlOVl9ESVZSRU1fMSAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3ByZV9tb2RfMS5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3ByZV9tb2RfMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YWUzMDgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvcHJlX21vZF8xLmMKQEAgLTAsMCArMSw2MSBAQAorLyogbXBuX3ByZWludl9tb2RfMSAodXAsIHVuLCBkLCBkaW52KSAtLSBEaXZpZGUgKFVQLCxVTikgYnkgdGhlIG5vcm1hbGl6ZWQgRC4KKyAgIERJTlYgc2hvdWxkIGJlIDJeKDIqR01QX0xJTUJfQklUUykgLyBEIC0gMl5HTVBfTElNQl9CSVRTLgorICAgUmV0dXJuIHRoZSBzaW5nbGUtbGltYiByZW1haW5kZXIuCisKK0NvcHlyaWdodCAxOTkxLCAxOTkzLCAxOTk0LCAyMDAwLTIwMDIsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKyNpbmNsdWRlICJsb25nbG9uZy5oIgorCisKKy8qIFRoaXMgZnVuY3Rpb24gdXNlZCB0byBiZSBkb2N1bWVudGVkLCBidXQgaXMgbm93IGNvbnNpZGVyZWQgb2Jzb2xldGUuICBJdAorICAgY29udGludWVzIHRvIGV4aXN0IGZvciBiaW5hcnkgY29tcGF0aWJpbGl0eSwgZXZlbiB3aGVuIG5vdCByZXF1aXJlZAorICAgaW50ZXJuYWxseS4gICovCisKK21wX2xpbWJfdAorbXBuX3ByZWludl9tb2RfMSAobXBfc3JjcHRyIHVwLCBtcF9zaXplX3QgdW4sIG1wX2xpbWJfdCBkLCBtcF9saW1iX3QgZGludikKK3sKKyAgbXBfc2l6ZV90IGk7CisgIG1wX2xpbWJfdCBuMCwgcjsKKworICBBU1NFUlQgKHVuID49IDEpOworICBBU1NFUlQgKGQgJiBHTVBfTElNQl9ISUdIQklUKTsKKworICByID0gdXBbdW4gLSAxXTsKKyAgaWYgKHIgPj0gZCkKKyAgICByIC09IGQ7CisKKyAgZm9yIChpID0gdW4gLSAyOyBpID49IDA7IGktLSkKKyAgICB7CisgICAgICBuMCA9IHVwW2ldOworICAgICAgdWRpdl9ybm5kX3ByZWludiAociwgciwgbjAsIGQsIGRpbnYpOworICAgIH0KKyAgcmV0dXJuIHI7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvcmFuZG9tLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvcmFuZG9tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg1ZjllYgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9yYW5kb20uYwpAQCAtMCwwICsxLDUwIEBACisvKiBtcG5fcmFuZG9tIC0tIEdlbmVyYXRlIHJhbmRvbSBudW1iZXJzLgorCitDb3B5cmlnaHQgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisKK3ZvaWQKK21wbl9yYW5kb20gKG1wX3B0ciBwdHIsIG1wX3NpemVfdCBzaXplKQoreworICBnbXBfcmFuZHN0YXRlX3B0ciAgcmFuZHM7CisKKyAgLyogRklYTUU6IElzIHNpemU9PTAgc3VwcG9zZWQgdG8gYmUgYWxsb3dlZD8gKi8KKyAgQVNTRVJUIChzaXplID49IDApOworCisgIGlmIChzaXplID09IDApCisgICAgcmV0dXJuOworCisgIHJhbmRzID0gUkFORFM7CisgIF9nbXBfcmFuZCAocHRyLCByYW5kcywgc2l6ZSAqIEdNUF9OVU1CX0JJVFMpOworCisgIC8qIE1ha2Ugc3VyZSB0aGUgbW9zdCBzaWduaWZpY2FudCBsaW1iIGlzIG5vbi16ZXJvLiAgKi8KKyAgd2hpbGUgKHB0cltzaXplLTFdID09IDApCisgICAgX2dtcF9yYW5kICgmcHRyW3NpemUtMV0sIHJhbmRzLCBHTVBfTlVNQl9CSVRTKTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9yYW5kb20yLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvcmFuZG9tMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlZWRlNjcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvcmFuZG9tMi5jCkBAIC0wLDAgKzEsMTA1IEBACisvKiBtcG5fcmFuZG9tMiAtLSBHZW5lcmF0ZSByYW5kb20gbnVtYmVycyB3aXRoIHJlbGF0aXZlbHkgbG9uZyBzdHJpbmdzCisgICBvZiBvbmVzIGFuZCB6ZXJvZXMuICBTdWl0YWJsZSBmb3IgYm9yZGVyIHRlc3RpbmcuCisKK0NvcHlyaWdodCAxOTkyLTE5OTQsIDE5OTYsIDIwMDAtMjAwMiwgMjAwNCwgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisKK3N0YXRpYyB2b2lkIGdtcF9ycmFuZG9tYiAobXBfcHRyLCBnbXBfcmFuZHN0YXRlX3QsIG1wX2JpdGNudF90KTsKKworLyogQXNrIF9nbXBfcmFuZCBmb3IgMzIgYml0cyBwZXIgY2FsbCB1bmxlc3MgdGhhdCdzIG1vcmUgdGhhbiBhIGxpbWIgY2FuIGhvbGQuCisgICBUaHVzLCB3ZSBnZXQgdGhlIHNhbWUgcmFuZG9tIG51bWJlciBzZXF1ZW5jZSBpbiB0aGUgY29tbW9uIGNhc2VzLgorICAgRklYTUU6IFdlIHNob3VsZCBhbHdheXMgZ2VuZXJhdGUgdGhlIHNhbWUgcmFuZG9tIG51bWJlciBzZXF1ZW5jZSEgICovCisjaWYgR01QX05VTUJfQklUUyA8IDMyCisjZGVmaW5lIEJJVFNfUEVSX1JBTkRDQUxMIEdNUF9OVU1CX0JJVFMKKyNlbHNlCisjZGVmaW5lIEJJVFNfUEVSX1JBTkRDQUxMIDMyCisjZW5kaWYKKwordm9pZAorbXBuX3JhbmRvbTIgKG1wX3B0ciBycCwgbXBfc2l6ZV90IG4pCit7CisgIGdtcF9yYW5kc3RhdGVfcHRyIHJzdGF0ZSA9IFJBTkRTOworICBpbnQgYml0X3BvczsJCQkvKiBiaXQgbnVtYmVyIG9mIGxlYXN0IHNpZ25pZmljYW50IGJpdCB3aGVyZQorCQkJCSAgIG5leHQgYml0IGZpZWxkIHRvIGJlIGluc2VydGVkICovCisgIG1wX2xpbWJfdCByYW4sIHJhbm07CQkvKiBidWZmZXIgZm9yIHJhbmRvbSBiaXRzICovCisKKyAgLyogRklYTUU6IElzIG49PTAgc3VwcG9zZWQgdG8gYmUgYWxsb3dlZD8gKi8KKyAgQVNTRVJUIChuID49IDApOworCisgIF9nbXBfcmFuZCAoJnJhbm0sIHJzdGF0ZSwgQklUU19QRVJfUkFORENBTEwpOworICByYW4gPSByYW5tOworCisgIC8qIFN0YXJ0IG9mZiBhdCBhIHJhbmRvbSBiaXQgcG9zaXRpb24gaW4gdGhlIG1vc3Qgc2lnbmlmaWNhbnQgbGltYi4gICovCisgIGJpdF9wb3MgPSByYW4gJSBHTVBfTlVNQl9CSVRTOworCisgIGdtcF9ycmFuZG9tYiAocnAsIHJzdGF0ZSwgbiAqIEdNUF9OVU1CX0JJVFMgLSBiaXRfcG9zKTsKK30KKworc3RhdGljIHZvaWQKK2dtcF9ycmFuZG9tYiAobXBfcHRyIHJwLCBnbXBfcmFuZHN0YXRlX3QgcnN0YXRlLCBtcF9iaXRjbnRfdCBuYml0cykKK3sKKyAgbXBfYml0Y250X3QgYmk7CisgIG1wX2xpbWJfdCByYW5tOwkJLyogYnVmZmVyIGZvciByYW5kb20gYml0cyAqLworICB1bnNpZ25lZCBjYXBfY2h1bmtzaXplLCBjaHVua3NpemU7CisgIG1wX3NpemVfdCBpOworCisgIC8qIFNldCBlbnRpcmUgcmVzdWx0IHRvIDExMS4uMSAgKi8KKyAgaSA9IEJJVFNfVE9fTElNQlMgKG5iaXRzKSAtIDE7CisgIHJwW2ldID0gR01QX05VTUJfTUFYID4+IChHTVBfTlVNQl9CSVRTIC0gKG5iaXRzICUgR01QX05VTUJfQklUUykpICUgR01QX05VTUJfQklUUzsKKyAgZm9yIChpID0gaSAtIDE7IGkgPj0gMDsgaS0tKQorICAgIHJwW2ldID0gR01QX05VTUJfTUFYOworCisgIF9nbXBfcmFuZCAoJnJhbm0sIHJzdGF0ZSwgQklUU19QRVJfUkFORENBTEwpOworICBjYXBfY2h1bmtzaXplID0gbmJpdHMgLyAocmFubSAlIDQgKyAxKTsKKyAgY2FwX2NodW5rc2l6ZSArPSBjYXBfY2h1bmtzaXplID09IDA7IC8qIG1ha2UgaXQgYXQgbGVhc3QgMSAqLworCisgIGJpID0gbmJpdHM7CisKKyAgZm9yICg7OykKKyAgICB7CisgICAgICBfZ21wX3JhbmQgKCZyYW5tLCByc3RhdGUsIEJJVFNfUEVSX1JBTkRDQUxMKTsKKyAgICAgIGNodW5rc2l6ZSA9IDEgKyByYW5tICUgY2FwX2NodW5rc2l6ZTsKKyAgICAgIGJpID0gKGJpIDwgY2h1bmtzaXplKSA/IDAgOiBiaSAtIGNodW5rc2l6ZTsKKworICAgICAgaWYgKGJpID09IDApCisJYnJlYWs7CQkJLyogbG93IGNodW5rIGlzIC4uLjEgKi8KKworICAgICAgcnBbYmkgLyBHTVBfTlVNQl9CSVRTXSBePSBDTlNUX0xJTUIgKDEpIDw8IGJpICUgR01QX05VTUJfQklUUzsKKworICAgICAgX2dtcF9yYW5kICgmcmFubSwgcnN0YXRlLCBCSVRTX1BFUl9SQU5EQ0FMTCk7CisgICAgICBjaHVua3NpemUgPSAxICsgcmFubSAlIGNhcF9jaHVua3NpemU7CisgICAgICBiaSA9IChiaSA8IGNodW5rc2l6ZSkgPyAwIDogYmkgLSBjaHVua3NpemU7CisKKyAgICAgIG1wbl9pbmNyX3UgKHJwICsgYmkgLyBHTVBfTlVNQl9CSVRTLCBDTlNUX0xJTUIgKDEpIDw8IGJpICUgR01QX05VTUJfQklUUyk7CisKKyAgICAgIGlmIChiaSA9PSAwKQorCWJyZWFrOwkJCS8qIGxvdyBjaHVuayBpcyAuLi4wICovCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3JlZGNfMS5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3JlZGNfMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYjEyOGYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvcmVkY18xLmMKQEAgLTAsMCArMSw1NiBAQAorLyogbXBuX3JlZGNfMS4gIFNldCBycFtdIDwtIHVwW10vUl5uIG1vZCBtcFtdLiAgQ2xvYmJlciB1cFtdLgorICAgbXBbXSBpcyBuIGxpbWJzOyB1cFtdIGlzIDJuIGxpbWJzLgorCisgICBUSElTIElTIEFOIElOVEVSTkFMIEZVTkNUSU9OIFdJVEggQSBNVVRBQkxFIElOVEVSRkFDRS4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggVEhJUyBGVU5DVElPTiBUSFJPVUdIIERPQ1VNRU5URUQgSU5URVJGQUNFUy4KKworQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIsIDIwMDQsIDIwMDgsIDIwMDksIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCittcF9saW1iX3QKK21wbl9yZWRjXzEgKG1wX3B0ciBycCwgbXBfcHRyIHVwLCBtcF9zcmNwdHIgbXAsIG1wX3NpemVfdCBuLCBtcF9saW1iX3QgaW52bSkKK3sKKyAgbXBfc2l6ZV90IGo7CisgIG1wX2xpbWJfdCBjeTsKKworICBBU1NFUlQgKG4gPiAwKTsKKyAgQVNTRVJUX01QTiAodXAsIDIqbik7CisKKyAgZm9yIChqID0gbiAtIDE7IGogPj0gMDsgai0tKQorICAgIHsKKyAgICAgIGN5ID0gbXBuX2FkZG11bF8xICh1cCwgbXAsIG4sICh1cFswXSAqIGludm0pICYgR01QX05VTUJfTUFTSyk7CisgICAgICBBU1NFUlQgKHVwWzBdID09IDApOworICAgICAgdXBbMF0gPSBjeTsKKyAgICAgIHVwKys7CisgICAgfQorCisgIGN5ID0gbXBuX2FkZF9uIChycCwgdXAsIHVwIC0gbiwgbik7CisgIHJldHVybiBjeTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9yZWRjXzIuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9yZWRjXzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDE1NTg5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3JlZGNfMi5jCkBAIC0wLDAgKzEsMTEwIEBACisvKiBtcG5fcmVkY18yLiAgU2V0IHJwW10gPC0gdXBbXS9SXm4gbW9kIG1wW10uICBDbG9iYmVyIHVwW10uCisgICBtcFtdIGlzIG4gbGltYnM7IHVwW10gaXMgMm4gbGltYnMuCisKKyAgIFRISVMgSVMgQU4gSU5URVJOQUwgRlVOQ1RJT04gV0lUSCBBIE1VVEFCTEUgSU5URVJGQUNFLiAgSVQgSVMgT05MWQorICAgU0FGRSBUTyBSRUFDSCBUSElTIEZVTkNUSU9OIFRIUk9VR0ggRE9DVU1FTlRFRCBJTlRFUkZBQ0VTLgorCitDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiwgMjAwNCwgMjAwOCwgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisjaW5jbHVkZSAibG9uZ2xvbmcuaCIKKworCisjaWYgR01QX05BSUxfQklUUyAhPSAwCit5b3UgbG9zZQorI2VuZGlmCisKKy8qIEZvciB0ZXN0aW5nIHB1cnBvc2VzLCBkZWZpbmUgb3VyIG93biBtcG5fYWRkbXVsXzIgaWYgdGhlcmUgaXMgbm9uZSBhbHJlYWR5CisgICBhdmFpbGFibGUuICAqLworI2lmbmRlZiBIQVZFX05BVElWRV9tcG5fYWRkbXVsXzIKKyN1bmRlZiBtcG5fYWRkbXVsXzIKK3N0YXRpYyBtcF9saW1iX3QKK21wbl9hZGRtdWxfMiAobXBfcHRyIHJwLCBtcF9zcmNwdHIgdXAsIG1wX3NpemVfdCBuLCBtcF9zcmNwdHIgdnApCit7CisgIHJwW25dID0gbXBuX2FkZG11bF8xIChycCwgdXAsIG4sIHZwWzBdKTsKKyAgcmV0dXJuIG1wbl9hZGRtdWxfMSAocnAgKyAxLCB1cCwgbiwgdnBbMV0pOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfX0dOVUNfXykgJiYgISBkZWZpbmVkIChOT19BU00pIFwKKyAgJiYgZGVmaW5lZCAoX19pYTY0KSAmJiBXX1RZUEVfU0laRSA9PSA2NAorI2RlZmluZSB1bXVsMmxvdyhwaCwgcGwsIHVoLCB1bCwgdmgsIHZsKSBcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgbXBfbGltYl90IF9waCwgX3BsOwkJCQkJCQlcCisgICAgX19hc21fXyAoInhtYS5odSAlMCA9ICUzLCAlNSwgZjBcblx0IgkJCQlcCisJICAgICAieG1hLmwgJTEgPSAlMywgJTUsIGYwXG5cdCIJCQkJXAorCSAgICAgIjs7XG5cdCIJCQkJCQkJXAorCSAgICAgInhtYS5sICUwID0gJTMsICU0LCAlMFxuXHQiCQkJCVwKKwkgICAgICI7O1xuXHQiCQkJCQkJCVwKKwkgICAgICJ4bWEubCAlMCA9ICUyLCAlNSwgJTAiCQkJCQlcCisJICAgICA6ICI9JmYiIChwaCksICI9JmYiIChwbCkJCQkJCVwKKwkgICAgIDogImYiICh1aCksICJmIiAodWwpLCAiZiIgKHZoKSwgImYiICh2bCkpOwkJCVwKKyAgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjaWZuZGVmIHVtdWwybG93CisjZGVmaW5lIHVtdWwybG93KHBoLCBwbCwgdWgsIHVsLCB2aCwgdmwpIFwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBtcF9saW1iX3QgX3BoLCBfcGw7CQkJCQkJCVwKKyAgICB1bXVsX3BwbW0gKF9waCwgX3BsLCB1bCwgdmwpOwkJCQkJXAorICAgIChwaCkgPSBfcGggKyAodWwpICogKHZoKSArICh1aCkgKiAodmwpOwkJCQlcCisgICAgKHBsKSA9IF9wbDsJCQkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKyNlbmRpZgorCittcF9saW1iX3QKK21wbl9yZWRjXzIgKG1wX3B0ciBycCwgbXBfcHRyIHVwLCBtcF9zcmNwdHIgbXAsIG1wX3NpemVfdCBuLCBtcF9zcmNwdHIgbWlwKQoreworICBtcF9saW1iX3QgcVsyXTsKKyAgbXBfc2l6ZV90IGo7CisgIG1wX2xpbWJfdCB1cG47CisgIG1wX2xpbWJfdCBjeTsKKworICBBU1NFUlQgKG4gPiAwKTsKKyAgQVNTRVJUX01QTiAodXAsIDIqbik7CisKKyAgaWYgKChuICYgMSkgIT0gMCkKKyAgICB7CisgICAgICB1cFswXSA9IG1wbl9hZGRtdWxfMSAodXAsIG1wLCBuLCAodXBbMF0gKiBtaXBbMF0pICYgR01QX05VTUJfTUFTSyk7CisgICAgICB1cCsrOworICAgIH0KKworICBmb3IgKGogPSBuIC0gMjsgaiA+PSAwOyBqIC09IDIpCisgICAgeworICAgICAgdW11bDJsb3cgKHFbMV0sIHFbMF0sIG1pcFsxXSwgbWlwWzBdLCB1cFsxXSwgdXBbMF0pOworICAgICAgdXBuID0gdXBbbl07CQkvKiBtcG5fYWRkbXVsXzIgb3ZlcndyaXRlcyB0aGlzICovCisgICAgICB1cFsxXSA9IG1wbl9hZGRtdWxfMiAodXAsIG1wLCBuLCBxKTsKKyAgICAgIHVwWzBdID0gdXBbbl07CisgICAgICB1cFtuXSA9IHVwbjsKKyAgICAgIHVwICs9IDI7CisgICAgfQorCisgIGN5ID0gbXBuX2FkZF9uIChycCwgdXAsIHVwIC0gbiwgbik7CisgIHJldHVybiBjeTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9yZWRjX24uYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9yZWRjX24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzk0YjdjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3JlZGNfbi5jCkBAIC0wLDAgKzEsODAgQEAKKy8qIG1wbl9yZWRjX24uICBTZXQgcnBbXSA8LSB1cFtdL1JebiBtb2QgbXBbXS4gIENsb2JiZXIgdXBbXS4KKyAgIG1wW10gaXMgbiBsaW1iczsgdXBbXSBpcyAybiBsaW1icywgdGhlIGludmVyc2UgaXBbXSBpcyBuIGxpbWJzLgorCisgICBUSElTIElTIEFOIElOVEVSTkFMIEZVTkNUSU9OIFdJVEggQSBNVVRBQkxFIElOVEVSRkFDRS4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggVEhJUyBGVU5DVElPTiBUSFJPVUdIIERPQ1VNRU5URUQgSU5URVJGQUNFUy4KKworQ29weXJpZ2h0IDIwMDksIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCisvKgorICBUT0RPCisKKyAgKiBXZSBhc3N1bWUgbXBuX211bG1vZF9ibm0xIGlzIGFsd2F5cyBmYXN0ZXIgdGhhbiBwbGFpbiBtcG5fbXVsX24gKG9yIGEKKyAgICBmdXR1cmUgbXBuX211bGhpKSBmb3IgdGhlIHJhbmdlIHdlIHdpbGwgYmUgY2FsbGVkLiAgRm9sbG93IHVwIHRoYXQKKyAgICBhc3N1bXB0aW9uLgorCisgICogRGVjcmVhc2Ugc2NyYXRjaCB1c2FnZS4KKworICAqIENvbnNpZGVyIHJlbW92aW5nIHRoZSByZXNpZHVlIGNhbm9uaWNhbGlzYXRpb24uCisqLworCit2b2lkCittcG5fcmVkY19uIChtcF9wdHIgcnAsIG1wX3B0ciB1cCwgbXBfc3JjcHRyIG1wLCBtcF9zaXplX3QgbiwgbXBfc3JjcHRyIGlwKQoreworICBtcF9wdHIgeHAsIHlwLCBzY3JhdGNoOworICBtcF9saW1iX3QgY3k7CisgIG1wX3NpemVfdCBybjsKKyAgVE1QX0RFQ0w7CisgIFRNUF9NQVJLOworCisgIEFTU0VSVCAobiA+IDgpOworCisgIHJuID0gbXBuX211bG1vZF9ibm0xX25leHRfc2l6ZSAobik7CisKKyAgc2NyYXRjaCA9IFRNUF9BTExPQ19MSU1CUyAobiArIHJuICsgbXBuX211bG1vZF9ibm0xX2l0Y2ggKHJuLCBuLCBuKSk7CisKKyAgeHAgPSBzY3JhdGNoOworICBtcG5fbXVsbG9fbiAoeHAsIHVwLCBpcCwgbik7CisKKyAgeXAgPSBzY3JhdGNoICsgbjsKKyAgbXBuX211bG1vZF9ibm0xICh5cCwgcm4sIHhwLCBuLCBtcCwgbiwgc2NyYXRjaCArIG4gKyBybik7CisKKyAgQVNTRVJUX0FMV0FZUyAoMiAqIG4gPiBybik7CQkJCS8qIGNvdWxkIGhhbmRsZSB0aGlzICovCisKKyAgY3kgPSBtcG5fc3ViX24gKHlwICsgcm4sIHlwLCB1cCwgMipuIC0gcm4pOwkJLyogdW5kbyB3cmFwIGFyb3VuZCAqLworICBNUE5fREVDUl9VICh5cCArIDIqbiAtIHJuLCBybiwgY3kpOworCisgIGN5ID0gbXBuX3N1Yl9uIChycCwgdXAgKyBuLCB5cCArIG4sIG4pOworICBpZiAoY3kgIT0gMCkKKyAgICBtcG5fYWRkX24gKHJwLCBycCwgbXAsIG4pOworCisgIFRNUF9GUkVFOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3JlbW92ZS5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3JlbW92ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYjA3NDIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvcmVtb3ZlLmMKQEAgLTAsMCArMSwxODIgQEAKKy8qIG1wbl9yZW1vdmUgLS0gZGl2aWRlIG91dCBhbGwgbXVsdGlwbGVzIG9mIG9kZCBtcG4gbnVtYmVyIGZyb20gYW5vdGhlciBtcG4KKyAgIG51bWJlci4KKworICAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqb3JuIEdyYW5sdW5kLgorCisgICBUSEUgRlVOQ1RJT04gSU4gVEhJUyBGSUxFIElTIElOVEVSTkFMIFdJVEggQSBNVVRBQkxFIElOVEVSRkFDRS4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggSVQgVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuICBJTiBGQUNULCBJVCBJUyBBTE1PU1QKKyAgIEdVQVJBTlRFRUQgVEhBVCBJVCBXSUxMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR01QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAyMDA5LCAyMDEyLTIwMTQsIDIwMTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCisjaWYgR01QX0xJTUJfQklUUyA+IDUwCisjZGVmaW5lIExPRyA1MAorI2Vsc2UKKyNkZWZpbmUgTE9HIEdNUF9MSU1CX0JJVFMKKyNlbmRpZgorCisKKy8qIElucHV0OiBVID0ge3VwLHVufSwgViA9IHt2cCx2bn0gbXVzdCBiZSBvZGQsIGNhcAorICAgT3VwdXQgIFcgPSB7d3AsKndufSBhbGxvY2F0aW9uIG5lZWQgaXMgZXhhY3RseSAqd24KKworICAgU2V0IFcgPSBVIC8gVl5rLCB3aGVyZSBrIGlzIHRoZSBsYXJnZXN0IGludGVnZXIgPD0gY2FwIHN1Y2ggdGhhdCB0aGUKKyAgIGRpdmlzaW9uIHlpZWxkcyBhbiBpbnRlZ2VyLgorCisgICBGSVhNRTogV2UgY3VycmVudGx5IGFsbG93IGFueSBvcGVyYW5kIG92ZXJsYXAuICBUaGlzIGlzIHF1aXRlIG5vbiBtcG4taXNoCisgICBhbmQgbWlnaHQgYmUgY2hhbmdlZCwgc2luY2UgaXQgY29zdCBzaWduaWZpY2FudCB0ZW1wb3Jhcnkgc3BhY2UuCisgICAqIElmIHdlIHJlcXVpcmUgVyB0byBoYXZlIHNwYWNlIGZvciB1biArIDEgbGltYnMsIHdlIGNvdWxkIHNhdmUgcXAgb3IgcXAyCisgICAgIChidXQgd2Ugd2lsbCBzdGlsbCBuZWVkIHRvIGNvcHkgdGhpbmdzIGludG8gd3AgNTAlIG9mIHRoZSB0aW1lKS4KKyAgICogSWYgd2UgYWxsb3cgb3Vyc2VsdmVzIHRvIGNsb2JiZXIgVSwgd2UgY291bGQgc2F2ZSB0aGUgb3RoZXIgb2YgcXAgYW5kIHFwMiwKKyAgICAgYW5kIHRoZSBpbml0aWFsIENPUFkgKGJ1dCBhbHNvIGhlcmUgd2Ugd291bGQgbmVlZCB1biArIDEgbGltYnMpLgorKi8KKworLyogRklYTUU6IFdlIG5lZWQgdG8gd3JhcCBtcG5fYmRpdl9xciBkdWUgdG8gdGhlIGl0Y2ggaW50ZXJmYWNlLiAgVGhpcyBuZWVkCisgICBpbmRpY2F0ZXMgYSBmbGF3IGluIHRoZSBjdXJyZW50IGl0Y2ggbWVjaGFuaXNtOiBXaGljaCBvcGVyYW5kcyBub3QgZ3JlYXRlcgorICAgdGhhbiB1bix1biB3aWxsIGluY3VyIHRoZSB3b3JzdCBpdGNoPyAgV2UgbmVlZCBhIHBhcmFsbGVsIGZvb19tYXhpdGNoIHNldAorICAgb2YgZnVuY3Rpb25zLiAgKi8KK3N0YXRpYyB2b2lkCittcG5fYmRpdl9xcl93cmFwIChtcF9wdHIgcXAsIG1wX3B0ciBycCwKKwkJICBtcF9zcmNwdHIgbnAsIG1wX3NpemVfdCBubiwKKwkJICBtcF9zcmNwdHIgZHAsIG1wX3NpemVfdCBkbikKK3sKKyAgbXBfcHRyIHNjcmF0Y2hfb3V0OworICBUTVBfREVDTDsKKworICBUTVBfTUFSSzsKKyAgc2NyYXRjaF9vdXQgPSBUTVBfQUxMT0NfTElNQlMgKG1wbl9iZGl2X3FyX2l0Y2ggKG5uLCBkbikpOworICBtcG5fYmRpdl9xciAocXAsIHJwLCBucCwgbm4sIGRwLCBkbiwgc2NyYXRjaF9vdXQpOworCisgIFRNUF9GUkVFOworfQorCittcF9iaXRjbnRfdAorbXBuX3JlbW92ZSAobXBfcHRyIHdwLCBtcF9zaXplX3QgKnduLAorCSAgICBtcF9zcmNwdHIgdXAsIG1wX3NpemVfdCB1biwgbXBfc3JjcHRyIHZwLCBtcF9zaXplX3Qgdm4sCisJICAgIG1wX2JpdGNudF90IGNhcCkKK3sKKyAgbXBfc3JjcHRyIHB3cHNwW0xPR107CisgIG1wX3NpemVfdCBwd3BzbltMT0ddOworICBtcF9zaXplX3QgbnBvd2VyczsKKyAgbXBfcHRyIHRwLCBxcCwgbnAsIHFwMjsKKyAgbXBfc3JjcHRyIHBwOworICBtcF9zaXplX3QgcG4sIG5uLCBxbiwgaTsKKyAgbXBfYml0Y250X3QgcHdyOworICBUTVBfREVDTDsKKworICBBU1NFUlQgKHVuID4gMCk7CisgIEFTU0VSVCAodm4gPiAwKTsKKyAgQVNTRVJUICh2cFswXSAlIDIgIT0gMCk7CS8qIDItYWRpYyBkaXZpc2lvbiB3YW50cyBvZGQgbnVtYmVycyAqLworICBBU1NFUlQgKHZuID4gMSB8fCB2cFswXSA+IDEpOwkvKiBlbHNlIHdlIHdvdWxkIGxvb3AgaW5kZWZpbml0ZWx5ICovCisKKyAgVE1QX01BUks7CisKKyAgVE1QX0FMTE9DX0xJTUJTXzMgKHFwLCB1biArIDEsCS8qIHF1b3RpZW50LCBhbHRlcm5hdGluZyAqLworCQkgICAgIHFwMiwgdW4gKyAxLAkvKiBxdW90aWVudCwgYWx0ZXJuYXRpbmcgKi8KKwkJICAgICB0cCwgKHVuICsgMSArIHZuKSAvIDIpOyAvKiByZW1haW5kZXIgKi8KKyAgcHAgPSB2cDsKKyAgcG4gPSB2bjsKKworICBNUE5fQ09QWSAocXAsIHVwLCB1bik7CisgIHFuID0gdW47CisKKyAgbnBvd2VycyA9IDA7CisgIHdoaWxlIChxbiA+PSBwbikKKyAgICB7CisgICAgICBxcFtxbl0gPSAwOworICAgICAgbXBuX2JkaXZfcXJfd3JhcCAocXAyLCB0cCwgcXAsIHFuICsgMSwgcHAsIHBuKTsKKyAgICAgIGlmICghbXBuX3plcm9fcCAodHAsIHBuKSkKKwl7CisJICBpZiAobXBuX2NtcCAodHAsIHBwLCBwbikgIT0gMCkKKwkgICAgYnJlYWs7CQkvKiBjb3VsZCBub3QgZGl2aWRlIGJ5IFZebnBvd2VycyAqLworCX0KKworICAgICAgTVBfUFRSX1NXQVAgKHFwLCBxcDIpOworICAgICAgcW4gPSBxbiAtIHBuOworICAgICAgbXBuX25lZyAocXAsIHFwLCBxbisxKTsKKworICAgICAgcW4gKz0gcXBbcW5dICE9IDA7CisKKyAgICAgIHB3cHNwW25wb3dlcnNdID0gcHA7CisgICAgICBwd3BzbltucG93ZXJzXSA9IHBuOworICAgICAgKytucG93ZXJzOworCisgICAgICBpZiAoKChtcF9iaXRjbnRfdCkgMiA8PCBucG93ZXJzKSAtIDEgPiBjYXApCisJYnJlYWs7CisKKyAgICAgIG5uID0gMiAqIHBuIC0gMTsJCS8qIG5leHQgcG93ZXIgd2lsbCBiZSBhdCBsZWFzdCB0aGlzIGxhcmdlICovCisgICAgICBpZiAobm4gPiBxbikKKwlicmVhazsJCQkvKiBuZXh0IHBvd2VyIHdvdWxkIGJlIG92ZXJsYXJnZSAqLworCisgICAgICBpZiAobnBvd2VycyA9PSAxKQkJLyogQWxsb2Mgb25jZSwgYnV0IG9ubHkgaWYgaXQncyBuZWVkZWQgKi8KKwlucCA9IFRNUF9BTExPQ19MSU1CUyAocW4gKyBMT0cpOwkvKiBwb3dlcnMgb2YgViAqLworICAgICAgZWxzZQorCW5wICs9IHBuOworCisgICAgICBtcG5fc3FyIChucCwgcHAsIHBuKTsKKyAgICAgIHBuID0gbm4gKyAobnBbbm5dICE9IDApOworICAgICAgcHAgPSBucDsKKyAgICB9CisKKyAgcHdyID0gKChtcF9iaXRjbnRfdCkgMSA8PCBucG93ZXJzKSAtIDE7CisKKyAgZm9yIChpID0gbnBvd2VyczsgLS1pID49IDA7KQorICAgIHsKKyAgICAgIHBuID0gcHdwc25baV07CisgICAgICBpZiAocW4gPCBwbikKKwljb250aW51ZTsKKworICAgICAgaWYgKHB3ciArICgobXBfYml0Y250X3QpIDEgPDwgaSkgPiBjYXApCisJY29udGludWU7CQkvKiBWXmkgd291bGQgYnJpbmcgdXMgcGFzdCBjYXAgKi8KKworICAgICAgcXBbcW5dID0gMDsKKyAgICAgIG1wbl9iZGl2X3FyX3dyYXAgKHFwMiwgdHAsIHFwLCBxbiArIDEsIHB3cHNwW2ldLCBwbik7CisgICAgICBpZiAoIW1wbl96ZXJvX3AgKHRwLCBwbikpCisJeworCSAgaWYgKG1wbl9jbXAgKHRwLCBwd3BzcFtpXSwgcG4pICE9IDApCisJICAgIGNvbnRpbnVlOwkJLyogY291bGQgbm90IGRpdmlkZSBieSBWXmkgKi8KKwl9CisKKyAgICAgIE1QX1BUUl9TV0FQIChxcCwgcXAyKTsKKyAgICAgIHFuID0gcW4gLSBwbjsKKyAgICAgIG1wbl9uZWcgKHFwLCBxcCwgcW4rMSk7CisKKyAgICAgIHFuICs9IHFwW3FuXSAhPSAwOworCisgICAgICBwd3IgKz0gKG1wX2JpdGNudF90KSAxIDw8IGk7CisgICAgfQorCisgIE1QTl9DT1BZICh3cCwgcXAsIHFuKTsKKyAgKnduID0gcW47CisKKyAgVE1QX0ZSRUU7CisKKyAgcmV0dXJuIHB3cjsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9yb290cmVtLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvcm9vdHJlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3OTA5OWUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvcm9vdHJlbS5jCkBAIC0wLDAgKzEsNTE1IEBACisvKiBtcG5fcm9vdHJlbShyb290cCxyZW1wLGFwLGFuLG50aCkgLS0gQ29tcHV0ZSB0aGUgbnRoIHJvb3Qgb2Yge2FwLGFufSwgYW5kCisgICBzdG9yZSB0aGUgdHJ1bmNhdGVkIGludGVnZXIgcGFydCBhdCByb290cCBhbmQgdGhlIHJlbWFpbmRlciBhdCByZW1wLgorCisgICBDb250cmlidXRlZCBieSBQYXVsIFppbW1lcm1hbm4gKGFsZ29yaXRobSkgYW5kCisgICBQYXVsIFppbW1lcm1hbm4gYW5kIFRvcmJqb3JuIEdyYW5sdW5kIChpbXBsZW1lbnRhdGlvbikuCisgICBNYXJjbyBCb2RyYXRvIHdyb3RlIGxvZ2Jhc2VkX3Jvb3QgdG8gc2VlZCB0aGUgbG9vcC4KKworICAgVEhFIEZVTkNUSU9OUyBJTiBUSElTIEZJTEUgQVJFIElOVEVSTkFMLCBBTkQgSEFWRSBNVVRBQkxFIElOVEVSRkFDRVMuICBJVCdTCisgICBPTkxZIFNBRkUgVE8gUkVBQ0ggVEhFTSBUSFJPVUdIIERPQ1VNRU5URUQgSU5URVJGQUNFUy4gIElOIEZBQ1QsIElUJ1MgQUxNT1NUCisgICBHVUFSQU5URUVEIFRIQVQgVEhFWSdMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEgRlVUVVJFIEdOVSBNUCBSRUxFQVNFLgorCitDb3B5cmlnaHQgMjAwMiwgMjAwNSwgMjAwOS0yMDEyLCAyMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisvKiBGSVhNRToKKyAgICAgVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBub3Qgb3B0aW1hbCB3aGVuIHJlbXAgPT0gTlVMTCwgc2luY2UgdGhlIGNvbXBsZXhpdHkKKyAgICAgaXMgTShuKSwgd2hlcmVhcyBpdCBzaG91bGQgYmUgTShuL2spIG9uIGF2ZXJhZ2UuCisqLworCisjaW5jbHVkZSA8c3RkaW8uaD4JCS8qIGZvciBOVUxMICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorI2luY2x1ZGUgImxvbmdsb25nLmgiCisKK3N0YXRpYyBtcF9zaXplX3QgbXBuX3Jvb3RyZW1faW50ZXJuYWwgKG1wX3B0ciwgbXBfcHRyLCBtcF9zcmNwdHIsIG1wX3NpemVfdCwKKwkJCQkgICAgICAgbXBfbGltYl90LCBpbnQpOworCisjZGVmaW5lIE1QTl9SU0hJRlQocnAsdXAsdW4sY250KSBcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgaWYgKChjbnQpICE9IDApCQkJCQkJCVwKKyAgICAgIG1wbl9yc2hpZnQgKHJwLCB1cCwgdW4sIGNudCk7CQkJCQlcCisgICAgZWxzZQkJCQkJCQkJXAorICAgICAgewkJCQkJCQkJCVwKKwlNUE5fQ09QWV9JTkNSIChycCwgdXAsIHVuKTsJCQkJCVwKKyAgICAgIH0JCQkJCQkJCQlcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgTVBOX0xTSElGVChjeSxycCx1cCx1bixjbnQpIFwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBpZiAoKGNudCkgIT0gMCkJCQkJCQkJXAorICAgICAgY3kgPSBtcG5fbHNoaWZ0IChycCwgdXAsIHVuLCBjbnQpOwkJCQlcCisgICAgZWxzZQkJCQkJCQkJXAorICAgICAgewkJCQkJCQkJCVwKKwlNUE5fQ09QWV9ERUNSIChycCwgdXAsIHVuKTsJCQkJCVwKKwljeSA9IDA7CQkJCQkJCQlcCisgICAgICB9CQkJCQkJCQkJXAorICB9IHdoaWxlICgwKQorCisKKy8qIFB1dCBpbiB7cm9vdHAsIGNlaWwodW4vayl9IHRoZSBrdGggcm9vdCBvZiB7dXAsIHVufSwgcm91bmRlZCB0b3dhcmQgemVyby4KKyAgIElmIHJlbXAgPD4gTlVMTCwgcHV0IGluIHtyZW1wLCB1bn0gdGhlIHJlbWFpbmRlci4KKyAgIFJldHVybiB0aGUgc2l6ZSAoaW4gbGltYnMpIG9mIHRoZSByZW1haW5kZXIgaWYgcmVtcCA8PiBOVUxMLAorCSAgb3IgYSBub24temVybyB2YWx1ZSBpZmYgdGhlIHJlbWFpbmRlciBpcyBub24temVybyB3aGVuIHJlbXAgPSBOVUxMLgorICAgQXNzdW1lczoKKyAgIChhKSB1cFt1bi0xXSBpcyBub3QgemVybworICAgKGIpIHJvb3RwIGhhcyBhdCBsZWFzdCBzcGFjZSBmb3IgY2VpbCh1bi9rKSBsaW1icworICAgKGMpIHJlbXAgaGFzIGF0IGxlYXN0IHNwYWNlIGZvciB1biBsaW1icyAoaW4gY2FzZSByZW1wIDw+IE5VTEwpCisgICAoZCkgdGhlIG9wZXJhbmRzIGRvIG5vdCBvdmVybGFwLgorCisgICBUaGUgYXV4aWxpYXJ5IG1lbW9yeSB1c2FnZSBpcyAzKnVuKzIgaWYgcmVtcCA9IE5VTEwsCisgICBhbmQgMip1bisyIGlmIHJlbXAgPD4gTlVMTC4gIEZJWE1FOiBUaGlzIGlzIGFuIGluY29ycmVjdCBjb21tZW50LgorKi8KK21wX3NpemVfdAorbXBuX3Jvb3RyZW0gKG1wX3B0ciByb290cCwgbXBfcHRyIHJlbXAsCisJICAgICBtcF9zcmNwdHIgdXAsIG1wX3NpemVfdCB1biwgbXBfbGltYl90IGspCit7CisgIEFTU0VSVCAodW4gPiAwKTsKKyAgQVNTRVJUICh1cFt1biAtIDFdICE9IDApOworICBBU1NFUlQgKGsgPiAxKTsKKworICBpZiAoVU5MSUtFTFkgKGsgPT0gMikpCisgICAgcmV0dXJuIG1wbl9zcXJ0cmVtIChyb290cCwgcmVtcCwgdXAsIHVuKTsKKyAgLyogKHVuLTEpL2sgPiAyIDw9PiB1biA+IDNrIDw9PiAodW4gKyAyKS8zID4gayAqLworICBpZiAocmVtcCA9PSBOVUxMICYmICh1biArIDIpIC8gMyA+IGspCisgICAgLyogUGFkIHt1cCx1bn0gd2l0aCBrIHplcm8gbGltYnMuICBUaGlzIHdpbGwgcHJvZHVjZSBhbiBhcHByb3hpbWF0ZSByb290CisgICAgICAgd2l0aCBvbmUgbW9yZSBsaW1iLCBhbGxvd2luZyB1cyB0byBjb21wdXRlIHRoZSBleGFjdCBpbnRlZ3JhbCByZXN1bHQuICovCisgICAgeworICAgICAgbXBfcHRyIHNwLCB3cDsKKyAgICAgIG1wX3NpemVfdCBybiwgc24sIHduOworICAgICAgVE1QX0RFQ0w7CisgICAgICBUTVBfTUFSSzsKKyAgICAgIHduID0gdW4gKyBrOworICAgICAgc24gPSAodW4gLSAxKSAvIGsgKyAyOyAvKiBjZWlsKHVuL2spICsgMSAqLworICAgICAgVE1QX0FMTE9DX0xJTUJTXzIgKHdwLCB3biwgLyogd2lsbCBjb250YWluIHRoZSBwYWRkZWQgaW5wdXQgKi8KKwkJCSBzcCwgc24pOyAvKiBhcHByb3hpbWF0ZSByb290IG9mIHBhZGRlZCBpbnB1dCAqLworICAgICAgTVBOX0NPUFkgKHdwICsgaywgdXAsIHVuKTsKKyAgICAgIE1QTl9GSUxMICh3cCwgaywgMCk7CisgICAgICBybiA9IG1wbl9yb290cmVtX2ludGVybmFsIChzcCwgTlVMTCwgd3AsIHduLCBrLCAxKTsKKyAgICAgIC8qIFRoZSBhcHByb3hpbWF0ZSByb290IFMgPSB7c3Asc259IGlzIGVpdGhlciB0aGUgY29ycmVjdCByb290IG9mCisJIHtzcCxzbn0sIG9yIDEgdG9vIGxhcmdlLiAgVGh1cyB1bmxlc3MgdGhlIGxlYXN0IHNpZ25pZmljYW50IGxpbWIgb2YKKwkgUyBpcyAwIG9yIDEsIHdlIGNhbiBkZWR1Y2UgdGhlIHJvb3Qgb2Yge3VwLHVufSBpcyBTIHRydW5jYXRlZCBieSBvbmUKKwkgbGltYi4gIChJbiBjYXNlIHNwWzBdPTEsIHdlIGNhbiBkZWR1Y2UgdGhlIHJvb3QsIGJ1dCBub3QgZGVjaWRlCisJIHdoZXRoZXIgaXQgaXMgZXhhY3Qgb3Igbm90LikgKi8KKyAgICAgIE1QTl9DT1BZIChyb290cCwgc3AgKyAxLCBzbiAtIDEpOworICAgICAgVE1QX0ZSRUU7CisgICAgICByZXR1cm4gcm47CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcmV0dXJuIG1wbl9yb290cmVtX2ludGVybmFsIChyb290cCwgcmVtcCwgdXAsIHVuLCBrLCAwKTsKKyAgICB9Cit9CisKKyNkZWZpbmUgTE9HUk9PVF9VU0VEX0JJVFMgOAorI2RlZmluZSBMT0dST09UX05FRURTX1RXT19DT1JSRUNUSU9OUyAxCisjZGVmaW5lIExPR1JPT1RfUkVUVVJORURfQklUUyAoTE9HUk9PVF9VU0VEX0JJVFMgKyBMT0dST09UX05FRURTX1RXT19DT1JSRUNUSU9OUykKKy8qIFB1dHMgaW4gKnJvb3RwIHNvbWUgYml0cyBvZiB0aGUga15udCByb290IG9mIHRoZSBudW1iZXIKKyAgIDJeYml0biAqIDEub3AgOyB3aGVyZSBvcCByZXByZXNlbnRzIHRoZSAiZnJhY3Rpb25hbCIgYml0cy4KKworICAgVGhlIHJldHVybmVkIHZhbHVlIGlzIHRoZSBudW1iZXIgb2YgYml0cyBvZiB0aGUgcm9vdCBtaW51cyBvbmU7CisgICBpLmUuIGFuIGFwcHJveGltYXRpb24gb2YgdGhlIHJvb3Qgd2lsbCBiZQorICAgKCpyb290cCkgKiAyXihyZXR2YWwtTE9HUk9PVF9SRVRVUk5FRF9CSVRTKzEpLgorCisgICBDdXJyZW50bHksIG9ubHkgTE9HUk9PVF9VU0VEX0JJVFMgYml0cyBvZiBvcCBhcmUgdXNlZCAodGhlIGltcGxpY2l0CisgICBvbmUgaXMgbm90IGNvdW50ZWQpLgorICovCitzdGF0aWMgdW5zaWduZWQKK2xvZ2Jhc2VkX3Jvb3QgKG1wX3B0ciByb290cCwgbXBfbGltYl90IG9wLCBtcF9iaXRjbnRfdCBiaXRuLCBtcF9saW1iX3QgaykKK3sKKyAgLyogdmxvZz12ZWN0b3IoMjU2LGksZmxvb3IoKGxvZygyNTYraSkvbG9nKDIpLTgpKjI1NiktKGk+MjU1KSkgKi8KKyAgc3RhdGljIGNvbnN0CisgIHVuc2lnbmVkIGNoYXIgdmxvZ1tdID0gezEsICAgMiwgICA0LCAgIDUsICAgNywgICA4LCAgIDksICAxMSwgIDEyLCAgMTQsICAxNSwgIDE2LCAgMTgsICAxOSwgIDIxLCAgMjIsCisJCQkgMjMsICAyNSwgIDI2LCAgMjcsICAyOSwgIDMwLCAgMzEsICAzMywgIDM0LCAgMzUsICAzNywgIDM4LCAgMzksICA0MCwgIDQyLCAgNDMsCisJCQkgNDQsICA0NiwgIDQ3LCAgNDgsICA0OSwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTYsICA1NywgIDU4LCAgNTksICA2MSwgIDYyLCAgNjMsCisJCQkgNjQsICA2NSwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA4MCwgIDgxLCAgODIsCisJCQkgODMsICA4NCwgIDg1LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk2LCAgOTcsICA5OCwgIDk5LCAxMDAsCisJCQkxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDgsIDEwOSwgMTEwLCAxMTEsIDExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsCisJCQkxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsIDEyOCwgMTI5LCAxMzEsIDEzMiwgMTMzLCAxMzQsCisJCQkxMzUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDAsIDE0MSwgMTQyLCAxNDMsIDE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksCisJCQkxNTAsIDE1MSwgMTUyLCAxNTMsIDE1NCwgMTU1LCAxNTYsIDE1NywgMTU4LCAxNTksIDE2MCwgMTYxLCAxNjIsIDE2MiwgMTYzLCAxNjQsCisJCQkxNjUsIDE2NiwgMTY3LCAxNjgsIDE2OSwgMTcwLCAxNzEsIDE3MiwgMTczLCAxNzMsIDE3NCwgMTc1LCAxNzYsIDE3NywgMTc4LCAxNzksCisJCQkxODAsIDE4MSwgMTgxLCAxODIsIDE4MywgMTg0LCAxODUsIDE4NiwgMTg3LCAxODgsIDE4OCwgMTg5LCAxOTAsIDE5MSwgMTkyLCAxOTMsCisJCQkxOTQsIDE5NCwgMTk1LCAxOTYsIDE5NywgMTk4LCAxOTksIDIwMCwgMjAwLCAyMDEsIDIwMiwgMjAzLCAyMDQsIDIwNSwgMjA1LCAyMDYsCisJCQkyMDcsIDIwOCwgMjA5LCAyMDksIDIxMCwgMjExLCAyMTIsIDIxMywgMjE0LCAyMTQsIDIxNSwgMjE2LCAyMTcsIDIxOCwgMjE4LCAyMTksCisJCQkyMjAsIDIyMSwgMjIyLCAyMjIsIDIyMywgMjI0LCAyMjUsIDIyNSwgMjI2LCAyMjcsIDIyOCwgMjI5LCAyMjksIDIzMCwgMjMxLCAyMzIsCisJCQkyMzIsIDIzMywgMjM0LCAyMzUsIDIzNSwgMjM2LCAyMzcsIDIzOCwgMjM5LCAyMzksIDI0MCwgMjQxLCAyNDIsIDI0MiwgMjQzLCAyNDQsCisJCQkyNDUsIDI0NSwgMjQ2LCAyNDcsIDI0NywgMjQ4LCAyNDksIDI1MCwgMjUwLCAyNTEsIDI1MiwgMjUzLCAyNTMsIDI1NCwgMjU1LCAyNTV9OworCisgIC8qIHZleHA9dmVjdG9yKDI1NixpLGZsb29yKDJeKDgraS8yNTYpLTI1NiktKGk+MjU1KSkgKi8KKyAgc3RhdGljIGNvbnN0CisgIHVuc2lnbmVkIGNoYXIgdmV4cFtdID0gezAsICAgMSwgICAyLCAgIDIsICAgMywgICA0LCAgIDQsICAgNSwgICA2LCAgIDcsICAgNywgICA4LCAgIDksICAgOSwgIDEwLCAgMTEsCisJCQkgMTIsICAxMiwgIDEzLCAgMTQsICAxNCwgIDE1LCAgMTYsICAxNywgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjAsICAyMSwgIDIyLCAgMjMsCisJCQkgMjMsICAyNCwgIDI1LCAgMjYsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzAsICAzMSwgIDMyLCAgMzMsICAzMywgIDM0LCAgMzUsCisJCQkgMzYsICAzNywgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDUsICA0NiwgIDQ3LCAgNDgsCisJCQkgNDksICA1MCwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjEsCisJCQkgNjIsICA2MywgIDY0LCAgNjUsICA2NiwgIDY3LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzUsCisJCQkgNzYsICA3NywgIDc4LCAgNzksICA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsCisJCQkgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwgIDk2LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsCisJCQkxMDcsIDEwOCwgMTA4LCAxMDksIDExMCwgMTExLCAxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTksIDEyMCwgMTIxLCAxMjIsCisJCQkxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywgMTI4LCAxMjksIDEzMCwgMTMxLCAxMzIsIDEzMywgMTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgsCisJCQkxMzksIDE0MCwgMTQyLCAxNDMsIDE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUxLCAxNTIsIDE1NCwgMTU1LCAxNTYsCisJCQkxNTcsIDE1OCwgMTU5LCAxNjAsIDE2MSwgMTYzLCAxNjQsIDE2NSwgMTY2LCAxNjcsIDE2OCwgMTY5LCAxNzEsIDE3MiwgMTczLCAxNzQsCisJCQkxNzUsIDE3NiwgMTc4LCAxNzksIDE4MCwgMTgxLCAxODIsIDE4MywgMTg1LCAxODYsIDE4NywgMTg4LCAxODksIDE5MSwgMTkyLCAxOTMsCisJCQkxOTQsIDE5NiwgMTk3LCAxOTgsIDE5OSwgMjAwLCAyMDIsIDIwMywgMjA0LCAyMDUsIDIwNywgMjA4LCAyMDksIDIxMCwgMjEyLCAyMTMsCisJCQkyMTQsIDIxNiwgMjE3LCAyMTgsIDIxOSwgMjIxLCAyMjIsIDIyMywgMjI1LCAyMjYsIDIyNywgMjI5LCAyMzAsIDIzMSwgMjMyLCAyMzQsCisJCQkyMzUsIDIzNiwgMjM4LCAyMzksIDI0MCwgMjQyLCAyNDMsIDI0NSwgMjQ2LCAyNDcsIDI0OSwgMjUwLCAyNTEsIDI1MywgMjU0LCAyNTV9OworICBtcF9iaXRjbnRfdCByZXR2YWw7CisKKyAgaWYgKFVOTElLRUxZIChiaXRuID4gKH4gKG1wX2JpdGNudF90KSAwKSA+PiBMT0dST09UX1VTRURfQklUUykpCisgICAgeworICAgICAgLyogSW4gdGhlIHVubGlrZWx5IGNhc2UsIHdlIHVzZSB0d28gZGl2aXNpb25zIGFuZCBhIG1vZHVsby4gKi8KKyAgICAgIHJldHZhbCA9IGJpdG4gLyBrOworICAgICAgYml0biAlPSBrOworICAgICAgYml0biA9IChiaXRuIDw8IExPR1JPT1RfVVNFRF9CSVRTIHwKKwkgICAgICB2bG9nW29wID4+IChHTVBfTlVNQl9CSVRTIC0gTE9HUk9PVF9VU0VEX0JJVFMpXSkgLyBrOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGJpdG4gPSAoYml0biA8PCBMT0dST09UX1VTRURfQklUUyB8CisJICAgICAgdmxvZ1tvcCA+PiAoR01QX05VTUJfQklUUyAtIExPR1JPT1RfVVNFRF9CSVRTKV0pIC8gazsKKyAgICAgIHJldHZhbCA9IGJpdG4gPj4gTE9HUk9PVF9VU0VEX0JJVFM7CisgICAgICBiaXRuICY9IChDTlNUX0xJTUIgKDEpIDw8IExPR1JPT1RfVVNFRF9CSVRTKSAtIDE7CisgICAgfQorICBBU1NFUlQoYml0biA8IENOU1RfTElNQiAoMSkgPDwgTE9HUk9PVF9VU0VEX0JJVFMpOworICAqcm9vdHAgPSBDTlNUX0xJTUIoMSkgPDwgKExPR1JPT1RfVVNFRF9CSVRTIC0gISBMT0dST09UX05FRURTX1RXT19DT1JSRUNUSU9OUykKKyAgICB8IHZleHBbYml0bl0gPj4gISBMT0dST09UX05FRURTX1RXT19DT1JSRUNUSU9OUzsKKyAgcmV0dXJuIHJldHZhbDsKK30KKworLyogaWYgYXBwcm94IGlzIG5vbi16ZXJvLCBkb2VzIG5vdCBjb21wdXRlIHRoZSBmaW5hbCByZW1haW5kZXIgKi8KK3N0YXRpYyBtcF9zaXplX3QKK21wbl9yb290cmVtX2ludGVybmFsIChtcF9wdHIgcm9vdHAsIG1wX3B0ciByZW1wLCBtcF9zcmNwdHIgdXAsIG1wX3NpemVfdCB1biwKKwkJICAgICAgbXBfbGltYl90IGssIGludCBhcHByb3gpCit7CisgIG1wX3B0ciBxcCwgcnAsIHNwLCB3cCwgc2NyYXRjaDsKKyAgbXBfc2l6ZV90IHFuLCBybiwgc24sIHduLCBubCwgYm47CisgIG1wX2xpbWJfdCBzYXZlLCBzYXZlMiwgY3ksIHVoOworICBtcF9iaXRjbnRfdCB1bmI7IC8qIG51bWJlciBvZiBzaWduaWZpY2FudCBiaXRzIG9mIHt1cCx1bn0gKi8KKyAgbXBfYml0Y250X3QgeG5iOyAvKiBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgYml0cyBvZiB0aGUgcmVzdWx0ICovCisgIG1wX2JpdGNudF90IGIsIGtrOworICBtcF9iaXRjbnRfdCBzaXplc1tHTVBfTlVNQl9CSVRTICsgMV07CisgIGludCBuaTsKKyAgaW50IHBlcmZfcG93OworICB1bnNpZ25lZCB1bHosIHNuYiwgYywgbG9nazsKKyAgVE1QX0RFQ0w7CisKKyAgLyogTVBOX1NJWkVJTkJBU0VfMkVYUCh1bmIsIHVwLCB1biwgMSk7IC0tdW5iOyAqLworICB1aCA9IHVwW3VuIC0gMV07CisgIGNvdW50X2xlYWRpbmdfemVyb3MgKHVseiwgdWgpOworICB1bHogPSB1bHogLSBHTVBfTkFJTF9CSVRTICsgMTsgLyogSWdub3JlIHRoZSBmaXJzdCAxLiAqLworICB1bmIgPSAobXBfYml0Y250X3QpIHVuICogR01QX05VTUJfQklUUyAtIHVsejsKKyAgLyogdW5iIGlzIHRoZSAodHJ1bmNhdGVkKSBsb2dhcml0aG0gb2YgdGhlIGlucHV0IFUgaW4gYmFzZSAyKi8KKworICBpZiAodW5iIDwgaykgLyogcm9vdCBpcyAxICovCisgICAgeworICAgICAgcm9vdHBbMF0gPSAxOworICAgICAgaWYgKHJlbXAgPT0gTlVMTCkKKwl1biAtPSAoKnVwID09IENOU1RfTElNQiAoMSkpOyAvKiBOb24temVybyBpaWYge3VwLHVufSA+IDEgKi8KKyAgICAgIGVsc2UKKwl7CisJICBtcG5fc3ViXzEgKHJlbXAsIHVwLCB1biwgQ05TVF9MSU1CICgxKSk7CisJICB1biAtPSAocmVtcCBbdW4gLSAxXSA9PSAwKTsJLyogVGhlcmUgc2hvdWxkIGJlIGF0IG1vc3Qgb25lIHplcm8gbGltYiwKKwkJCQkgICBpZiB3ZSBkZW1hbmQgdSB0byBiZSBub3JtYWxpemVkICAqLworCX0KKyAgICAgIHJldHVybiB1bjsKKyAgICB9CisgIC8qIGlmICh1bmIgLSBrIDwgay8yICsgay8xNikgLy8gcm9vdCBpcyAyICovCisKKyAgaWYgKHVseiA9PSBHTVBfTlVNQl9CSVRTKQorICAgIHVoID0gdXBbdW4gLSAyXTsKKyAgZWxzZQorICAgIHVoID0gKHVoIDw8IHVseiAmIEdNUF9OVU1CX01BU0spIHwgdXBbdW4gLSAxIC0gKHVuICE9IDEpXSA+PiAoR01QX05VTUJfQklUUyAtIHVseik7CisgIEFTU0VSVCAodW4gIT0gMSB8fCB1cFt1biAtIDEgLSAodW4gIT0gMSldID4+IChHTVBfTlVNQl9CSVRTIC0gdWx6KSA9PSAxKTsKKworICB4bmIgPSBsb2diYXNlZF9yb290IChyb290cCwgdWgsIHVuYiwgayk7CisgIHNuYiA9IExPR1JPT1RfUkVUVVJORURfQklUUyAtIDE7CisgIC8qIHhuYisxIGlzIHRoZSBudW1iZXIgb2YgYml0cyBvZiB0aGUgcm9vdCBSICovCisgIC8qIHNuYisxIGlzIHRoZSBudW1iZXIgb2YgYml0cyBvZiB0aGUgY3VycmVudCBhcHByb3hpbWF0aW9uIFMgKi8KKworICBrayA9IGsgKiB4bmI7CQkvKiBudW1iZXIgb2YgdHJ1bmNhdGVkIGJpdHMgaW4gdGhlIGlucHV0ICovCisKKyAgLyogRklYTUU6IFNob3VsZCB3ZSBza2lwIHRoZSBuZXh0IHR3byBsb29wcyB3aGVuIHhuYiA8PSBzbmIgPyAqLworICBmb3IgKHVoID0gKGsgLSAxKSAvIDIsIGxvZ2sgPSAzOyAodWggPj49IDEpICE9IDA7ICsrbG9nayApCisgICAgOworICAvKiBsb2drID0gY2VpbChsb2coaykvbG9nKDIpKSArIDEgKi8KKworICAvKiB4bmIgaXMgdGhlIG51bWJlciBvZiByZW1haW5pbmcgYml0cyB0byBkZXRlcm1pbmUgaW4gdGhlIGt0aCByb290ICovCisgIGZvciAobmkgPSAwOyAoc2l6ZXNbbmldID0geG5iKSA+IHNuYjsgKytuaSkKKyAgICB7CisgICAgICAvKiBpbnZhcmlhbnQ6IGhlcmUgd2Ugd2FudCB4bmIrMSB0b3RhbCBiaXRzIGZvciB0aGUga3RoIHJvb3QgKi8KKworICAgICAgLyogaWYgYyBpcyB0aGUgbmV3IHZhbHVlIG9mIHhuYiwgdGhpcyBtZWFucyB0aGF0IHdlJ2xsIGdvIGZyb20gYQorCSByb290IG9mIGMrMSBiaXRzIChzYXkgcycpIHRvIGEgcm9vdCBvZiB4bmIrMSBiaXRzLgorCSBJdCBpcyBwcm92ZWQgaW4gdGhlIGJvb2sgIk1vZGVybiBDb21wdXRlciBBcml0aG1ldGljIiBieSBCcmVudAorCSBhbmQgWmltbWVybWFubiwgQ2hhcHRlciAxLCB0aGF0CisJIGlmIHMnID49IGsqYmV0YSwgdGhlbiBhdCBtb3N0IG9uZSBjb3JyZWN0aW9uIGlzIG5lY2Vzc2FyeS4KKwkgSGVyZSBiZXRhID0gMl4oeG5iLWMpLCBhbmQgcycgPj0gMl5jLCB0aHVzIGl0IHN1ZmZpY2VzIHRoYXQKKwkgYyA+PSBjZWlsKCh4bmIgKyBsb2cyKGspKS8yKS4gKi8KKyAgICAgIGlmICh4bmIgPiBsb2drKQorCXhuYiA9ICh4bmIgKyBsb2drKSAvIDI7CisgICAgICBlbHNlCisJLS14bmI7CS8qIGFkZCBqdXN0IG9uZSBiaXQgYXQgYSB0aW1lICovCisgICAgfQorCisgICpyb290cCA+Pj0gc25iIC0geG5iOworICBrayAtPSB4bmI7CisKKyAgQVNTRVJUX0FMV0FZUyAobmkgPCBHTVBfTlVNQl9CSVRTICsgMSk7CisgIC8qIFdlIGhhdmUgc2l6ZXNbMF0gPSBiID4gc2l6ZXNbMV0gPiAuLi4gPiBzaXplc1tuaV0gPSAwIHdpdGgKKyAgICAgc2l6ZXNbaV0gPD0gMiAqIHNpemVzW2krMV0uCisgICAgIE5ld3RvbiBpdGVyYXRpb24gd2lsbCBmaXJzdCBjb21wdXRlIHNpemVzW25pLTFdIGV4dHJhIGJpdHMsCisgICAgIHRoZW4gc2l6ZXNbbmktMl0sIC4uLiwgdGhlbiBzaXplc1swXSA9IGIuICovCisKKyAgVE1QX01BUks7CisgIC8qIHFwIGFuZCB3cCBuZWVkIGVub3VnaCBzcGFjZSB0byBzdG9yZSBTJ15rIHdoZXJlIFMnIGlzIGFuIGFwcHJveGltYXRlCisgICAgIHJvb3QuIFNpbmNlIFMnIGNhbiBiZSBhcyBsYXJnZSBhcyBTKzIsIHRoZSB3b3JzdCBjYXNlIGlzIHdoZW4gUz0yIGFuZAorICAgICBTJz00LiBCdXQgdGhlbiBzaW5jZSB3ZSBrbm93IHRoZSBudW1iZXIgb2YgYml0cyBvZiBTIGluIGFkdmFuY2UsIFMnCisgICAgIGNhbiBvbmx5IGJlIDMgYXQgbW9zdC4gU2ltaWxhcmx5IGZvciBTPTQsIHRoZW4gUycgY2FuIGJlIDYgYXQgbW9zdC4KKyAgICAgU28gdGhlIHdvcnN0IGNhc2UgaXMgUycvUz0zLzIsIHRodXMgUydeayA8PSAoMy8yKV5rICogU15rLiBTaW5jZSBTXmsKKyAgICAgZml0cyBpbiB1biBsaW1icywgdGhlIG51bWJlciBvZiBleHRyYSBsaW1icyBuZWVkZWQgaXMgYm91bmRlZCBieQorICAgICBjZWlsKGsqbG9nMigzLzIpL0dNUF9OVU1CX0JJVFMpLiAqLworICAvKiBUSElOSzogd2l0aCB0aGUgdXNlIG9mIGxvZ2Jhc2VkX3Jvb3QsIG1heWJlIHRoZSBjb25zdGFudCBpcworICAgICAyNTgvMjU2IGluc3RlYWQgb2YgMy8yID8gbG9nMigyNTgvMjU2KSA8IDEvODkgPCAxLzY0ICovCisjZGVmaW5lIEVYVFJBIDIgKyAobXBfc2l6ZV90KSAoMC41ODUgKiAoZG91YmxlKSBrIC8gKGRvdWJsZSkgR01QX05VTUJfQklUUykKKyAgVE1QX0FMTE9DX0xJTUJTXzMgKHNjcmF0Y2gsIHVuICsgMSwgLyogdXNlZCBieSBtcG5fZGl2X3EgKi8KKwkJICAgICBxcCwgdW4gKyBFWFRSQSwgIC8qIHdpbGwgY29udGFpbiBxdW90aWVudCBhbmQgcmVtYWluZGVyCisJCQkJCSBvZiBSLyhrKlNeKGstMSkpLCBhbmQgU15rICovCisJCSAgICAgd3AsIHVuICsgRVhUUkEpOyAvKiB3aWxsIGNvbnRhaW4gU14oay0xKSwgaypTXihrLTEpLAorCQkJCQkgYW5kIHRlbXBvcmFyeSBmb3IgbXBuX3Bvd18xICovCisKKyAgaWYgKHJlbXAgPT0gTlVMTCkKKyAgICBycCA9IHNjcmF0Y2g7CS8qIHdpbGwgY29udGFpbiB0aGUgcmVtYWluZGVyICovCisgIGVsc2UKKyAgICBycCA9IHJlbXA7CisgIHNwID0gcm9vdHA7CisKKyAgc24gPSAxOwkJLyogSW5pdGlhbCBhcHByb3hpbWF0aW9uIGhhcyBvbmUgbGltYiAqLworCisgIGZvciAoYiA9IHhuYjsgbmkgIT0gMDsgLS1uaSkKKyAgICB7CisgICAgICAvKiAxOiBsb29wIGludmFyaWFudDoKKwkge3NwLCBzbn0gaXMgdGhlIGN1cnJlbnQgYXBwcm94aW1hdGlvbiBvZiB0aGUgcm9vdCwgd2hpY2ggaGFzCisJCSAgZXhhY3RseSAxICsgc2l6ZXNbbmldIGJpdHMuCisJIHtycCwgcm59IGlzIHRoZSBjdXJyZW50IHJlbWFpbmRlcgorCSB7d3AsIHdufSA9IHtzcCwgc259XihrLTEpCisJIGtrID0gbnVtYmVyIG9mIHRydW5jYXRlZCBiaXRzIG9mIHRoZSBpbnB1dAorICAgICAgKi8KKworICAgICAgLyogU2luY2UgZWFjaCBpdGVyYXRpb24gdHJlYXRzIGIgYml0cyBmcm9tIHRoZSByb290IGFuZCB0aHVzIGsqYiBiaXRzCisJIGZyb20gdGhlIGlucHV0LCBhbmQgd2UgYWxyZWFkeSBjb25zaWRlcmVkIGIgYml0cyBmcm9tIHRoZSBpbnB1dCwKKwkgd2Ugbm93IGhhdmUgdG8gdGFrZSBhbm90aGVyIChrLTEpKmIgYml0cyBmcm9tIHRoZSBpbnB1dC4gKi8KKyAgICAgIGtrIC09IChrIC0gMSkgKiBiOyAvKiByZW1haW5pbmcgaW5wdXQgYml0cyAqLworICAgICAgLyoge3JwLCBybn0gPSBmbG9vcih7dXAsIHVufSAvIDJea2spICovCisgICAgICBybiA9IHVuIC0ga2sgLyBHTVBfTlVNQl9CSVRTOworICAgICAgTVBOX1JTSElGVCAocnAsIHVwICsga2sgLyBHTVBfTlVNQl9CSVRTLCBybiwga2sgJSBHTVBfTlVNQl9CSVRTKTsKKyAgICAgIHJuIC09IHJwW3JuIC0gMV0gPT0gMDsKKworICAgICAgLyogOTogY3VycmVudCBidWZmZXJzOiB7c3Asc259LCB7cnAscm59ICovCisKKyAgICAgIGZvciAoYyA9IDA7OyBjKyspCisJeworCSAgLyogQ29tcHV0ZSBTXmsgaW4ge3FwLHFufS4gKi8KKwkgIC8qIFcgPC0gU14oay0xKSBmb3IgdGhlIG5leHQgaXRlcmF0aW9uLAorCSAgICAgYW5kIFNeayA9IFcgKiBTLiAqLworCSAgd24gPSBtcG5fcG93XzEgKHdwLCBzcCwgc24sIGsgLSAxLCBxcCk7CisJICBtcG5fbXVsIChxcCwgd3AsIHduLCBzcCwgc24pOworCSAgcW4gPSB3biArIHNuOworCSAgcW4gLT0gcXBbcW4gLSAxXSA9PSAwOworCisJICBwZXJmX3BvdyA9IDE7CisJICAvKiBpZiBTXmsgPiBmbG9vcihVLzJea2spLCB0aGUgcm9vdCBhcHByb3hpbWF0aW9uIHdhcyB0b28gbGFyZ2UgKi8KKwkgIGlmIChxbiA+IHJuIHx8IChxbiA9PSBybiAmJiAocGVyZl9wb3c9bXBuX2NtcCAocXAsIHJwLCBybikpID4gMCkpCisJICAgIE1QTl9ERUNSX1UgKHNwLCBzbiwgMSk7CisJICBlbHNlCisJICAgIGJyZWFrOworCX0KKworICAgICAgLyogMTA6IGN1cnJlbnQgYnVmZmVyczoge3NwLHNufSwge3JwLHJufSwge3FwLHFufSwge3dwLHdufSAqLworCisgICAgICAvKiBzb21ldGltZXMgdHdvIGNvcnJlY3Rpb25zIGFyZSBuZWVkZWQgd2l0aCBsb2diYXNlZF9yb290Ki8KKyAgICAgIEFTU0VSVCAoYyA8PSAxICsgTE9HUk9PVF9ORUVEU19UV09fQ09SUkVDVElPTlMpOworICAgICAgQVNTRVJUX0FMV0FZUyAocm4gPj0gcW4pOworCisgICAgICBiID0gc2l6ZXNbbmkgLSAxXSAtIHNpemVzW25pXTsgLyogbnVtYmVyIG9mIGJpdHMgdG8gY29tcHV0ZSBpbiB0aGUKKwkJCQkgICAgICBuZXh0IGl0ZXJhdGlvbiAqLworICAgICAgYm4gPSBiIC8gR01QX05VTUJfQklUUzsgLyogbG93ZXN0IGxpbWIgZnJvbSBoaWdoIHBhcnQgb2YgcnBbXSwgYWZ0ZXIgc2hpZnQgKi8KKworICAgICAga2sgPSBrayAtIGI7CisgICAgICAvKiBubCBpcyB0aGUgbnVtYmVyIG9mIGxpbWJzIGluIFUgd2hpY2ggY29udGFpbiBiaXRzIFtrayxraytiLTFdICovCisgICAgICBubCA9IDEgKyAoa2sgKyBiIC0gMSkgLyBHTVBfTlVNQl9CSVRTIC0gKGtrIC8gR01QX05VTUJfQklUUyk7CisgICAgICAvKiBubCAgPSAxICsgZmxvb3IoKGtrICsgYiAtIDEpIC8gR01QX05VTUJfQklUUykKKwkJIC0gZmxvb3Ioa2sgLyBHTVBfTlVNQl9CSVRTKQorCSAgICAgPD0gMSArIChrayArIGIgLSAxKSAvIEdNUF9OVU1CX0JJVFMKKwkJICAtIChrayAtIEdNUF9OVU1CX0JJVFMgKyAxKSAvIEdNUF9OVU1CX0JJVFMKKwkgICAgID0gMiArIChiIC0gMikgLyBHTVBfTlVNQl9CSVRTCisJIHRodXMgc2luY2UgbmwgaXMgYW4gaW50ZWdlcjoKKwkgbmwgPD0gMiArIGZsb29yKGIvR01QX05VTUJfQklUUykgPD0gMiArIGJuLiAqLworCisgICAgICAvKiAxMTogY3VycmVudCBidWZmZXJzOiB7c3Asc259LCB7cnAscm59LCB7d3Asd259ICovCisKKyAgICAgIC8qIFIgPSBSIC0gUSA9IGZsb29yKFUvMl5raykgLSBTXmsgKi8KKyAgICAgIGlmIChwZXJmX3BvdyAhPSAwKQorCXsKKwkgIG1wbl9zdWIgKHJwLCBycCwgcm4sIHFwLCBxbik7CisJICBNUE5fTk9STUFMSVpFX05PVF9aRVJPIChycCwgcm4pOworCisJICAvKiBmaXJzdCBtdWx0aXBseSB0aGUgcmVtYWluZGVyIGJ5IDJeYiAqLworCSAgTVBOX0xTSElGVCAoY3ksIHJwICsgYm4sIHJwLCBybiwgYiAlIEdNUF9OVU1CX0JJVFMpOworCSAgcm4gPSBybiArIGJuOworCSAgaWYgKGN5ICE9IDApCisJICAgIHsKKwkgICAgICBycFtybl0gPSBjeTsKKwkgICAgICBybisrOworCSAgICB9CisKKwkgIHNhdmUgPSBycFtibl07CisJICAvKiB3ZSBoYXZlIHRvIHNhdmUgcnBbYm5dIHVwIHRvIHJwW25sLTFdLCBpLmUuIDEgb3IgMiBsaW1icyAqLworCSAgaWYgKG5sIC0gMSA+IGJuKQorCSAgICBzYXZlMiA9IHJwW2JuICsgMV07CisJfQorICAgICAgZWxzZQorCXsKKwkgIHJuID0gYm47CisJICBzYXZlMiA9IHNhdmUgPSAwOworCX0KKyAgICAgIC8qIDI6IGN1cnJlbnQgYnVmZmVyczoge3NwLHNufSwge3JwLHJufSwge3dwLHdufSAqLworCisgICAgICAvKiBOb3cgaW5zZXJ0IGJpdHMgW2trLGtrK2ItMV0gZnJvbSB0aGUgaW5wdXQgVSAqLworICAgICAgTVBOX1JTSElGVCAocnAsIHVwICsga2sgLyBHTVBfTlVNQl9CSVRTLCBubCwga2sgJSBHTVBfTlVNQl9CSVRTKTsKKyAgICAgIC8qIHNldCB0byB6ZXJvIGhpZ2ggYml0cyBvZiBycFtibl0gKi8KKyAgICAgIHJwW2JuXSAmPSAoQ05TVF9MSU1CICgxKSA8PCAoYiAlIEdNUF9OVU1CX0JJVFMpKSAtIDE7CisgICAgICAvKiByZXN0b3JlIGNvcnJlc3BvbmRpbmcgYml0cyAqLworICAgICAgcnBbYm5dIHw9IHNhdmU7CisgICAgICBpZiAobmwgLSAxID4gYm4pCisJcnBbYm4gKyAxXSA9IHNhdmUyOyAvKiB0aGUgbG93IGIgYml0cyBnbyBpbiBycFswLi5ibl0gb25seSwgc2luY2UKKwkJCSAgICAgICB0aGV5IHN0YXJ0IGJ5IGJpdCAwIGluIHJwWzBdLCBzbyB0aGV5IHVzZQorCQkJICAgICAgIGF0IG1vc3QgY2VpbChiL0dNUF9OVU1CX0JJVFMpIGxpbWJzICovCisgICAgICAvKiBGSVhNRTogU2hvdWxkIHdlIG5vcm1hbGlzZSB7cnAscm59IGhlcmUgPyovCisKKyAgICAgIC8qIDM6IGN1cnJlbnQgYnVmZmVyczoge3NwLHNufSwge3JwLHJufSwge3dwLHdufSAqLworCisgICAgICAvKiBjb21wdXRlIHt3cCwgd259ID0gayAqIHtzcCwgc259XihrLTEpICovCisgICAgICBjeSA9IG1wbl9tdWxfMSAod3AsIHdwLCB3biwgayk7CisgICAgICB3cFt3bl0gPSBjeTsKKyAgICAgIHduICs9IGN5ICE9IDA7CisKKyAgICAgIC8qIDY6IGN1cnJlbnQgYnVmZmVyczoge3NwLHNufSwge3FwLHFufSAqLworCisgICAgICAvKiBtdWx0aXBseSB0aGUgcm9vdCBhcHByb3hpbWF0aW9uIGJ5IDJeYiAqLworICAgICAgTVBOX0xTSElGVCAoY3ksIHNwICsgYiAvIEdNUF9OVU1CX0JJVFMsIHNwLCBzbiwgYiAlIEdNUF9OVU1CX0JJVFMpOworICAgICAgc24gPSBzbiArIGIgLyBHTVBfTlVNQl9CSVRTOworICAgICAgaWYgKGN5ICE9IDApCisJeworCSAgc3Bbc25dID0gY3k7CisJICBzbisrOworCX0KKworICAgICAgc2F2ZSA9IHNwW2IgLyBHTVBfTlVNQl9CSVRTXTsKKworICAgICAgLyogTnVtYmVyIG9mIGxpbWJzIHVzZWQgYnkgYiBiaXRzLCB3aGVuIGxlYXN0IHNpZ25pZmljYW50IGJpdCBpcworCSBhbGlnbmVkIHRvIGxlYXN0IGxpbWIgKi8KKyAgICAgIGJuID0gKGIgLSAxKSAvIEdNUF9OVU1CX0JJVFMgKyAxOworCisgICAgICAvKiA0OiBjdXJyZW50IGJ1ZmZlcnM6IHtzcCxzbn0sIHtycCxybn0sIHt3cCx3bn0gKi8KKworICAgICAgLyogbm93IGRpdmlkZSB7cnAsIHJufSBieSB7d3AsIHdufSB0byBnZXQgdGhlIGxvdyBwYXJ0IG9mIHRoZSByb290ICovCisgICAgICBpZiAoVU5MSUtFTFkgKHJuIDwgd24pKQorCXsKKwkgIE1QTl9GSUxMIChzcCwgYm4sIDApOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBxbiA9IHJuIC0gd247IC8qIGV4cGVjdGVkIHF1b3RpZW50IHNpemUgKi8KKwkgIGlmIChxbiA8PSBibikgeyAvKiBEaXZpZGUgb25seSBpZiByZXN1bHQgaXMgbm90IHRvbyBiaWcuICovCisJICAgIG1wbl9kaXZfcSAocXAsIHJwLCBybiwgd3AsIHduLCBzY3JhdGNoKTsKKwkgICAgcW4gKz0gcXBbcW5dICE9IDA7CisJICB9CisKKyAgICAgIC8qIDU6IGN1cnJlbnQgYnVmZmVyczoge3NwLHNufSwge3FwLHFufS4KKwkgTm90ZToge3JwLHJufSBpcyBub3QgbmVlZGVkIGFueSBtb3JlIHNpbmNlIHdlJ2xsIGNvbXB1dGUgaXQgZnJvbQorCSBzY3JhdGNoIGF0IHRoZSBlbmQgb2YgdGhlIGxvb3AuCisgICAgICAgKi8KKworICAgICAgLyogdGhlIHF1b3RpZW50IHNob3VsZCBiZSBzbWFsbGVyIHRoYW4gMl5iLCBzaW5jZSB0aGUgcHJldmlvdXMKKwkgYXBwcm94aW1hdGlvbiB3YXMgY29ycmVjdGx5IHJvdW5kZWQgdG93YXJkIHplcm8gKi8KKwkgIGlmIChxbiA+IGJuIHx8IChxbiA9PSBibiAmJiAoYiAlIEdNUF9OVU1CX0JJVFMgIT0gMCkgJiYKKwkJCSAgcXBbcW4gLSAxXSA+PSAoQ05TVF9MSU1CICgxKSA8PCAoYiAlIEdNUF9OVU1CX0JJVFMpKSkpCisJICAgIHsKKwkgICAgICBmb3IgKHFuID0gMTsgcW4gPCBibjsgKytxbikKKwkJc3BbcW4gLSAxXSA9IEdNUF9OVU1CX01BWDsKKwkgICAgICBzcFtxbiAtIDFdID0gR01QX05VTUJfTUFYID4+IChHTVBfTlVNQl9CSVRTIC0gMSAtICgoYiAtIDEpICUgR01QX05VTUJfQklUUykpOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKyAgICAgIC8qIDc6IGN1cnJlbnQgYnVmZmVyczoge3NwLHNufSwge3FwLHFufSAqLworCisgICAgICAvKiBDb21iaW5lIHNCIGFuZCBxIHRvIGZvcm0gc0IgKyBxLiAgKi8KKwkgICAgICBNUE5fQ09QWSAoc3AsIHFwLCBxbik7CisJICAgICAgTVBOX1pFUk8gKHNwICsgcW4sIGJuIC0gcW4pOworCSAgICB9CisJfQorICAgICAgc3BbYiAvIEdNUF9OVU1CX0JJVFNdIHw9IHNhdmU7CisKKyAgICAgIC8qIDg6IGN1cnJlbnQgYnVmZmVyOiB7c3Asc259ICovCisKKyAgICB9CisKKyAgLyogb3RoZXJ3aXNlIHdlIGhhdmUgcm4gPiAwLCB0aHVzIHRoZSByZXR1cm4gdmFsdWUgaXMgb2sgKi8KKyAgaWYgKCFhcHByb3ggfHwgc3BbMF0gPD0gQ05TVF9MSU1CICgxKSkKKyAgICB7CisgICAgICBmb3IgKGMgPSAwOzsgYysrKQorCXsKKwkgIC8qIENvbXB1dGUgU15rIGluIHtxcCxxbn0uICovCisJICAvKiBMYXN0IGl0ZXJhdGlvbjogd2UgZG9uJ3QgbmVlZCBXIGFueW1vcmUuICovCisJICAvKiBtcG5fcG93XzEgcmVxdWlyZXMgdGhhdCBib3RoIHFwIGFuZCB3cCBoYXZlIGVub3VnaAorCSAgICAgc3BhY2UgdG8gc3RvcmUgdGhlIHJlc3VsdCB7c3Asc259XmsgKyAxIGxpbWIgKi8KKwkgIHFuID0gbXBuX3Bvd18xIChxcCwgc3AsIHNuLCBrLCB3cCk7CisKKwkgIHBlcmZfcG93ID0gMTsKKwkgIGlmIChxbiA+IHVuIHx8IChxbiA9PSB1biAmJiAocGVyZl9wb3c9bXBuX2NtcCAocXAsIHVwLCB1bikpID4gMCkpCisJICAgIE1QTl9ERUNSX1UgKHNwLCBzbiwgMSk7CisJICBlbHNlCisJICAgIGJyZWFrOworCX07CisKKyAgICAgIC8qIHNvbWV0aW1lcyB0d28gY29ycmVjdGlvbnMgYXJlIG5lZWRlZCB3aXRoIGxvZ2Jhc2VkX3Jvb3QqLworICAgICAgQVNTRVJUIChjIDw9IDEgKyBMT0dST09UX05FRURTX1RXT19DT1JSRUNUSU9OUyk7CisKKyAgICAgIHJuID0gcGVyZl9wb3cgIT0gMDsKKyAgICAgIGlmIChybiAhPSAwICYmIHJlbXAgIT0gTlVMTCkKKwl7CisJICBtcG5fc3ViIChyZW1wLCB1cCwgdW4sIHFwLCBxbik7CisJICBybiA9IHVuOworCSAgTVBOX05PUk1BTElaRV9OT1RfWkVSTyAocmVtcCwgcm4pOworCX0KKyAgICB9CisKKyAgVE1QX0ZSRUU7CisgIHJldHVybiBybjsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9yc2hpZnQuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9yc2hpZnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWQ0MjdkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3JzaGlmdC5jCkBAIC0wLDAgKzEsNjkgQEAKKy8qIG1wbl9yc2hpZnQgLS0gU2hpZnQgcmlnaHQgbG93IGxldmVsLgorCitDb3B5cmlnaHQgMTk5MSwgMTk5MywgMTk5NCwgMTk5NiwgMjAwMC0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworLyogU2hpZnQgVSAocG9pbnRlZCB0byBieSB1cCBhbmQgTiBsaW1icyBsb25nKSBjbnQgYml0cyB0byB0aGUgcmlnaHQKKyAgIGFuZCBzdG9yZSB0aGUgbiBsZWFzdCBzaWduaWZpY2FudCBsaW1icyBvZiB0aGUgcmVzdWx0IGF0IHJwLgorICAgVGhlIGJpdHMgc2hpZnRlZCBvdXQgdG8gdGhlIHJpZ2h0IGFyZSByZXR1cm5lZC4KKworICAgQXJndW1lbnQgY29uc3RyYWludHM6CisgICAxLiAwIDwgY250IDwgR01QX05VTUJfQklUUy4KKyAgIDIuIElmIHRoZSByZXN1bHQgaXMgdG8gYmUgd3JpdHRlbiBvdmVyIHRoZSBpbnB1dCwgcnAgbXVzdCBiZSA8PSB1cC4KKyovCisKK21wX2xpbWJfdAorbXBuX3JzaGlmdCAobXBfcHRyIHJwLCBtcF9zcmNwdHIgdXAsIG1wX3NpemVfdCBuLCB1bnNpZ25lZCBpbnQgY250KQoreworICBtcF9saW1iX3QgaGlnaF9saW1iLCBsb3dfbGltYjsKKyAgdW5zaWduZWQgaW50IHRuYzsKKyAgbXBfc2l6ZV90IGk7CisgIG1wX2xpbWJfdCByZXR2YWw7CisKKyAgQVNTRVJUIChuID49IDEpOworICBBU1NFUlQgKGNudCA+PSAxKTsKKyAgQVNTRVJUIChjbnQgPCBHTVBfTlVNQl9CSVRTKTsKKyAgQVNTRVJUIChNUE5fU0FNRV9PUl9JTkNSX1AgKHJwLCB1cCwgbikpOworCisgIHRuYyA9IEdNUF9OVU1CX0JJVFMgLSBjbnQ7CisgIGhpZ2hfbGltYiA9ICp1cCsrOworICByZXR2YWwgPSAoaGlnaF9saW1iIDw8IHRuYykgJiBHTVBfTlVNQl9NQVNLOworICBsb3dfbGltYiA9IGhpZ2hfbGltYiA+PiBjbnQ7CisKKyAgZm9yIChpID0gbiAtIDE7IGkgIT0gMDsgaS0tKQorICAgIHsKKyAgICAgIGhpZ2hfbGltYiA9ICp1cCsrOworICAgICAgKnJwKysgPSBsb3dfbGltYiB8ICgoaGlnaF9saW1iIDw8IHRuYykgJiBHTVBfTlVNQl9NQVNLKTsKKyAgICAgIGxvd19saW1iID0gaGlnaF9saW1iID4+IGNudDsKKyAgICB9CisgICpycCA9IGxvd19saW1iOworCisgIHJldHVybiByZXR2YWw7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvc2JwaTFfYmRpdl9xLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvc2JwaTFfYmRpdl9xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUwZTU5MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9zYnBpMV9iZGl2X3EuYwpAQCAtMCwwICsxLDk2IEBACisvKiBtcG5fc2JwaTFfYmRpdl9xIC0tIHNjaG9vbGJvb2sgSGVuc2VsIGRpdmlzaW9uIHdpdGggcHJlY29tcHV0ZWQgaW52ZXJzZSwKKyAgIHJldHVybmluZyBxdW90aWVudCBvbmx5LgorCisgICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgTmllbHMgTcO2bGxlciBhbmQgVG9yYmrDtnJuIEdyYW5sdW5kLgorCisgICBUSEUgRlVOQ1RJT05TIElOIFRISVMgRklMRSBBUkUgSU5URVJOQUwgRlVOQ1RJT05TIFdJVEggTVVUQUJMRSBJTlRFUkZBQ0VTLgorICAgSVQgSVMgT05MWSBTQUZFIFRPIFJFQUNIIFRIRU0gVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuICBJTiBGQUNULCBJVCBJUworICAgQUxNT1NUIEdVQVJBTlRFRUQgVEhBVCBUSEVZJ0xMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR01QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAyMDA1LCAyMDA2LCAyMDA5LCAyMDExLCAyMDEyLCAyMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworLyogQ29tcHV0ZXMgUSA9IC0gVSAvIEQgbW9kIEJedW4sIGRlc3Ryb3lzIFUuCisKKyAgIEQgbXVzdCBiZSBvZGQuIGRpbnYgaXMgKC1EKV4tMSBtb2QgQi4KKworKi8KKwordm9pZAorbXBuX3NicGkxX2JkaXZfcSAobXBfcHRyIHFwLAorCQkgIG1wX3B0ciB1cCwgbXBfc2l6ZV90IHVuLAorCQkgIG1wX3NyY3B0ciBkcCwgbXBfc2l6ZV90IGRuLAorCQkgIG1wX2xpbWJfdCBkaW52KQoreworICBtcF9zaXplX3QgaTsKKyAgbXBfbGltYl90IHE7CisKKyAgQVNTRVJUIChkbiA+IDApOworICBBU1NFUlQgKHVuID49IGRuKTsKKyAgQVNTRVJUICgoZHBbMF0gJiAxKSAhPSAwKTsKKyAgQVNTRVJUICgtKGRwWzBdICogZGludikgPT0gMSk7CisgIEFTU0VSVCAodXAgPT0gcXAgfHwgIU1QTl9PVkVSTEFQX1AgKHVwLCB1biwgcXAsIHVuIC0gZG4pKTsKKworICBpZiAodW4gPiBkbikKKyAgICB7CisgICAgICBtcF9saW1iX3QgY3ksIGhpOworICAgICAgZm9yIChpID0gdW4gLSBkbiAtIDEsIGN5ID0gMDsgaSA+IDA7IGktLSkKKwl7CisJICBxID0gZGludiAqIHVwWzBdOworCSAgaGkgPSBtcG5fYWRkbXVsXzEgKHVwLCBkcCwgZG4sIHEpOworCisJICBBU1NFUlQgKHVwWzBdID09IDApOworCSAgKnFwKysgPSBxOworCSAgaGkgKz0gY3k7CisJICBjeSA9IGhpIDwgY3k7CisJICBoaSArPSB1cFtkbl07CisJICBjeSArPSBoaSA8IHVwW2RuXTsKKwkgIHVwW2RuXSA9IGhpOworCSAgdXArKzsKKwl9CisgICAgICBxID0gZGludiAqIHVwWzBdOworICAgICAgaGkgPSBjeSArIG1wbl9hZGRtdWxfMSAodXAsIGRwLCBkbiwgcSk7CisgICAgICBBU1NFUlQgKHVwWzBdID09IDApOworICAgICAgKnFwKysgPSBxOworICAgICAgdXBbZG5dICs9IGhpOworICAgICAgdXArKzsKKyAgICB9CisgIGZvciAoaSA9IGRuOyBpID4gMTsgaS0tKQorICAgIHsKKyAgICAgIG1wX2xpbWJfdCBxID0gZGludiAqIHVwWzBdOworICAgICAgbXBuX2FkZG11bF8xICh1cCwgZHAsIGksIHEpOworICAgICAgQVNTRVJUICh1cFswXSA9PSAwKTsKKyAgICAgICpxcCsrID0gcTsKKyAgICAgIHVwKys7CisgICAgfQorCisgIC8qIEZpbmFsIGxpbWIgKi8KKyAgKnFwID0gZGludiAqIHVwWzBdOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3NicGkxX2JkaXZfcXIuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9zYnBpMV9iZGl2X3FyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE0NmM0NQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9zYnBpMV9iZGl2X3FyLmMKQEAgLTAsMCArMSw4MiBAQAorLyogbXBuX3NicGkxX2JkaXZfcXIgLS0gc2Nob29sYm9vayBIZW5zZWwgZGl2aXNpb24gd2l0aCBwcmVjb21wdXRlZCBpbnZlcnNlLAorICAgcmV0dXJuaW5nIHF1b3RpZW50IGFuZCByZW1haW5kZXIuCisKKyAgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBOaWVscyBNw7ZsbGVyIGFuZCBUb3JiasO2cm4gR3Jhbmx1bmQuCisKKyAgIFRIRSBGVU5DVElPTlMgSU4gVEhJUyBGSUxFIEFSRSBJTlRFUk5BTCBGVU5DVElPTlMgV0lUSCBNVVRBQkxFIElOVEVSRkFDRVMuCisgICBJVCBJUyBPTkxZIFNBRkUgVE8gUkVBQ0ggVEhFTSBUSFJPVUdIIERPQ1VNRU5URUQgSU5URVJGQUNFUy4gIElOIEZBQ1QsIElUIElTCisgICBBTE1PU1QgR1VBUkFOVEVFRCBUSEFUIFRIRVknTEwgQ0hBTkdFIE9SIERJU0FQUEVBUiBJTiBBIEZVVFVSRSBHTVAgUkVMRUFTRS4KKworQ29weXJpZ2h0IDIwMDYsIDIwMDksIDIwMTEsIDIwMTIsIDIwMTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCisKKy8qIENvbXB1dGVzIGEgYmluYXJ5IHF1b3RpZW50IG9mIHNpemUgcW4gPSB1biAtIGRuLgorICAgT3V0cHV0OgorCisgICAgICBRID0gLVUgKiBEXnstMX0gbW9kIEJecW4sCisKKyAgICAgIFIgPSAoVSArIFEgKiBEKSAqIEJeKC1xbikKKworICAgU3RvcmVzIHRoZSBkbiBsZWFzdCBzaWduaWZpY2FudCBsaW1icyBvZiBSIGF0IHt1cCArIHVuIC0gZG4sIGRufSwKKyAgIGFuZCByZXR1cm5zIHRoZSBjYXJyeSBmcm9tIHRoZSBhZGRpdGlvbiBOICsgUSpELgorCisgICBEIG11c3QgYmUgb2RkLiBkaW52IGlzICgtRCleLTEgbW9kIEIuICovCisKK21wX2xpbWJfdAorbXBuX3NicGkxX2JkaXZfcXIgKG1wX3B0ciBxcCwKKwkJICAgbXBfcHRyIHVwLCBtcF9zaXplX3QgdW4sCisJCSAgIG1wX3NyY3B0ciBkcCwgbXBfc2l6ZV90IGRuLCBtcF9saW1iX3QgZGludikKK3sKKyAgbXBfc2l6ZV90IGk7CisgIG1wX2xpbWJfdCBjeTsKKworICBBU1NFUlQgKGRuID4gMCk7CisgIEFTU0VSVCAodW4gPiBkbik7CisgIEFTU0VSVCAoKGRwWzBdICYgMSkgIT0gMCk7CisgIEFTU0VSVCAoLShkcFswXSAqIGRpbnYpID09IDEpOworICBBU1NFUlQgKHVwID09IHFwIHx8ICFNUE5fT1ZFUkxBUF9QICh1cCwgdW4sIHFwLCB1biAtIGRuKSk7CisKKyAgZm9yIChpID0gdW4gLSBkbiwgY3kgPSAwOyBpICE9IDA7IGktLSkKKyAgICB7CisgICAgICBtcF9saW1iX3QgcSA9IGRpbnYgKiB1cFswXTsKKyAgICAgIG1wX2xpbWJfdCBoaSA9IG1wbl9hZGRtdWxfMSAodXAsIGRwLCBkbiwgcSk7CisgICAgICAqcXArKyA9IHE7CisKKyAgICAgIGhpICs9IGN5OworICAgICAgY3kgPSBoaSA8IGN5OworICAgICAgaGkgKz0gdXBbZG5dOworICAgICAgY3kgKz0gaGkgPCB1cFtkbl07CisgICAgICB1cFtkbl0gPSBoaTsKKyAgICAgIHVwKys7CisgICAgfQorCisgIHJldHVybiBjeTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9zYnBpMV9iZGl2X3IuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9zYnBpMV9iZGl2X3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjA5OTUxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3NicGkxX2JkaXZfci5jCkBAIC0wLDAgKzEsNzkgQEAKKy8qIG1wbl9zYnBpMV9iZGl2X3IgLS0gc2Nob29sYm9vayBIZW5zZWwgZGl2aXNpb24gd2l0aCBwcmVjb21wdXRlZCBpbnZlcnNlLAorICAgcmV0dXJuaW5nIHJlbWFpbmRlci4KKworICAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IE5pZWxzIE3DtmxsZXIgYW5kIFRvcmJqw7ZybiBHcmFubHVuZC4KKworICAgVEhFIEZVTkNUSU9OUyBJTiBUSElTIEZJTEUgQVJFIElOVEVSTkFMIEZVTkNUSU9OUyBXSVRIIE1VVEFCTEUgSU5URVJGQUNFUy4KKyAgIElUIElTIE9OTFkgU0FGRSBUTyBSRUFDSCBUSEVNIFRIUk9VR0ggRE9DVU1FTlRFRCBJTlRFUkZBQ0VTLiAgSU4gRkFDVCwgSVQgSVMKKyAgIEFMTU9TVCBHVUFSQU5URUVEIFRIQVQgVEhFWSdMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEgRlVUVVJFIEdNUCBSRUxFQVNFLgorCitDb3B5cmlnaHQgMjAwNiwgMjAwOSwgMjAxMSwgMjAxMiwgMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisKKworLyogQ29tcHV0ZXMgYSBiaW5hcnkgcXVvdGllbnQgb2Ygc2l6ZSBxbiA9IHVuIC0gZG4uCisgICBPdXRwdXQ6CisKKyAgICAgIFEgPSAtVSAqIEReey0xfSBtb2QgQl5xbiwKKworICAgICAgUiA9IChVICsgUSAqIEQpICogQl4oLXFuKQorCisgICBTdG9yZXMgdGhlIGRuIGxlYXN0IHNpZ25pZmljYW50IGxpbWJzIG9mIFIgYXQge3VwICsgdW4gLSBkbiwgZG59LAorICAgYW5kIHJldHVybnMgdGhlIGNhcnJ5IGZyb20gdGhlIGFkZGl0aW9uIE4gKyBRKkQuCisKKyAgIEQgbXVzdCBiZSBvZGQuIGRpbnYgaXMgKC1EKV4tMSBtb2QgQi4gKi8KKworbXBfbGltYl90CittcG5fc2JwaTFfYmRpdl9yIChtcF9wdHIgdXAsIG1wX3NpemVfdCB1biwKKwkJICBtcF9zcmNwdHIgZHAsIG1wX3NpemVfdCBkbiwgbXBfbGltYl90IGRpbnYpCit7CisgIG1wX3NpemVfdCBpOworICBtcF9saW1iX3QgY3k7CisKKyAgQVNTRVJUIChkbiA+IDApOworICBBU1NFUlQgKHVuID4gZG4pOworICBBU1NFUlQgKChkcFswXSAmIDEpICE9IDApOworICBBU1NFUlQgKC0oZHBbMF0gKiBkaW52KSA9PSAxKTsKKworICBmb3IgKGkgPSB1biAtIGRuLCBjeSA9IDA7IGkgIT0gMDsgaS0tKQorICAgIHsKKyAgICAgIG1wX2xpbWJfdCBxID0gZGludiAqIHVwWzBdOworICAgICAgbXBfbGltYl90IGhpID0gbXBuX2FkZG11bF8xICh1cCwgZHAsIGRuLCBxKTsKKworICAgICAgaGkgKz0gY3k7CisgICAgICBjeSA9IGhpIDwgY3k7CisgICAgICBoaSArPSB1cFtkbl07CisgICAgICBjeSArPSBoaSA8IHVwW2RuXTsKKyAgICAgIHVwW2RuXSA9IGhpOworICAgICAgdXArKzsKKyAgICB9CisKKyAgcmV0dXJuIGN5OworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3NicGkxX2Rpdl9xLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvc2JwaTFfZGl2X3EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTk3NWViCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3NicGkxX2Rpdl9xLmMKQEAgLTAsMCArMSwzMDIgQEAKKy8qIG1wbl9zYnBpMV9kaXZfcSAtLSBTY2hvb2xib29rIGRpdmlzaW9uIHVzaW5nIHRoZSBNw7ZsbGVyLUdyYW5sdW5kIDMvMgorICAgZGl2aXNpb24gYWxnb3JpdGhtLgorCisgICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisKKyAgIFRIRSBGVU5DVElPTiBJTiBUSElTIEZJTEUgSVMgSU5URVJOQUwgV0lUSCBBIE1VVEFCTEUgSU5URVJGQUNFLiAgSVQgSVMgT05MWQorICAgU0FGRSBUTyBSRUFDSCBJVCBUSFJPVUdIIERPQ1VNRU5URUQgSU5URVJGQUNFUy4gIElOIEZBQ1QsIElUIElTIEFMTU9TVAorICAgR1VBUkFOVEVFRCBUSEFUIElUIFdJTEwgQ0hBTkdFIE9SIERJU0FQUEVBUiBJTiBBIEZVVFVSRSBHTVAgUkVMRUFTRS4KKworQ29weXJpZ2h0IDIwMDcsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisjaW5jbHVkZSAibG9uZ2xvbmcuaCIKKworbXBfbGltYl90CittcG5fc2JwaTFfZGl2X3EgKG1wX3B0ciBxcCwKKwkJIG1wX3B0ciBucCwgbXBfc2l6ZV90IG5uLAorCQkgbXBfc3JjcHRyIGRwLCBtcF9zaXplX3QgZG4sCisJCSBtcF9saW1iX3QgZGludikKK3sKKyAgbXBfbGltYl90IHFoOworICBtcF9zaXplX3QgcW4sIGk7CisgIG1wX2xpbWJfdCBuMSwgbjA7CisgIG1wX2xpbWJfdCBkMSwgZDA7CisgIG1wX2xpbWJfdCBjeSwgY3kxOworICBtcF9saW1iX3QgcTsKKyAgbXBfbGltYl90IGZsYWc7CisKKyAgbXBfc2l6ZV90IGRuX29yaWcgPSBkbjsKKyAgbXBfc3JjcHRyIGRwX29yaWcgPSBkcDsKKyAgbXBfcHRyIG5wX29yaWcgPSBucDsKKworICBBU1NFUlQgKGRuID4gMik7CisgIEFTU0VSVCAobm4gPj0gZG4pOworICBBU1NFUlQgKChkcFtkbi0xXSAmIEdNUF9OVU1CX0hJR0hCSVQpICE9IDApOworCisgIG5wICs9IG5uOworCisgIHFuID0gbm4gLSBkbjsKKyAgaWYgKHFuICsgMSA8IGRuKQorICAgIHsKKyAgICAgIGRwICs9IGRuIC0gKHFuICsgMSk7CisgICAgICBkbiA9IHFuICsgMTsKKyAgICB9CisKKyAgcWggPSBtcG5fY21wIChucCAtIGRuLCBkcCwgZG4pID49IDA7CisgIGlmIChxaCAhPSAwKQorICAgIG1wbl9zdWJfbiAobnAgLSBkbiwgbnAgLSBkbiwgZHAsIGRuKTsKKworICBxcCArPSBxbjsKKworICBkbiAtPSAyOwkJCS8qIG9mZnNldCBkbiBieSAyIGZvciBtYWluIGRpdmlzaW9uIGxvb3BzLAorCQkJCSAgIHNhdmluZyB0d28gaXRlcmF0aW9ucyBpbiBtcG5fc3VibXVsXzEuICAqLworICBkMSA9IGRwW2RuICsgMV07CisgIGQwID0gZHBbZG4gKyAwXTsKKworICBucCAtPSAyOworCisgIG4xID0gbnBbMV07CisKKyAgZm9yIChpID0gcW4gLSAoZG4gKyAyKTsgaSA+PSAwOyBpLS0pCisgICAgeworICAgICAgbnAtLTsKKyAgICAgIGlmIChVTkxJS0VMWSAobjEgPT0gZDEpICYmIG5wWzFdID09IGQwKQorCXsKKwkgIHEgPSBHTVBfTlVNQl9NQVNLOworCSAgbXBuX3N1Ym11bF8xIChucCAtIGRuLCBkcCwgZG4gKyAyLCBxKTsKKwkgIG4xID0gbnBbMV07CQkvKiB1cGRhdGUgbjEsIGxhc3QgbG9vcCdzIHZhbHVlIHdpbGwgbm93IGJlIGludmFsaWQgKi8KKwl9CisgICAgICBlbHNlCisJeworCSAgdWRpdl9xcl8zYnkyIChxLCBuMSwgbjAsIG4xLCBucFsxXSwgbnBbMF0sIGQxLCBkMCwgZGludik7CisKKwkgIGN5ID0gbXBuX3N1Ym11bF8xIChucCAtIGRuLCBkcCwgZG4sIHEpOworCisJICBjeTEgPSBuMCA8IGN5OworCSAgbjAgPSAobjAgLSBjeSkgJiBHTVBfTlVNQl9NQVNLOworCSAgY3kgPSBuMSA8IGN5MTsKKwkgIG4xIC09IGN5MTsKKwkgIG5wWzBdID0gbjA7CisKKwkgIGlmIChVTkxJS0VMWSAoY3kgIT0gMCkpCisJICAgIHsKKwkgICAgICBuMSArPSBkMSArIG1wbl9hZGRfbiAobnAgLSBkbiwgbnAgLSBkbiwgZHAsIGRuICsgMSk7CisJICAgICAgcS0tOworCSAgICB9CisJfQorCisgICAgICAqLS1xcCA9IHE7CisgICAgfQorCisgIGZsYWcgPSB+Q05TVF9MSU1CKDApOworCisgIGlmIChkbiA+PSAwKQorICAgIHsKKyAgICAgIGZvciAoaSA9IGRuOyBpID4gMDsgaS0tKQorCXsKKwkgIG5wLS07CisJICBpZiAoVU5MSUtFTFkgKG4xID49IChkMSAmIGZsYWcpKSkKKwkgICAgeworCSAgICAgIHEgPSBHTVBfTlVNQl9NQVNLOworCSAgICAgIGN5ID0gbXBuX3N1Ym11bF8xIChucCAtIGRuLCBkcCwgZG4gKyAyLCBxKTsKKworCSAgICAgIGlmIChVTkxJS0VMWSAobjEgIT0gY3kpKQorCQl7CisJCSAgaWYgKG4xIDwgKGN5ICYgZmxhZykpCisJCSAgICB7CisJCSAgICAgIHEtLTsKKwkJICAgICAgbXBuX2FkZF9uIChucCAtIGRuLCBucCAtIGRuLCBkcCwgZG4gKyAyKTsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICBmbGFnID0gMDsKKwkJfQorCSAgICAgIG4xID0gbnBbMV07CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIHVkaXZfcXJfM2J5MiAocSwgbjEsIG4wLCBuMSwgbnBbMV0sIG5wWzBdLCBkMSwgZDAsIGRpbnYpOworCisJICAgICAgY3kgPSBtcG5fc3VibXVsXzEgKG5wIC0gZG4sIGRwLCBkbiwgcSk7CisKKwkgICAgICBjeTEgPSBuMCA8IGN5OworCSAgICAgIG4wID0gKG4wIC0gY3kpICYgR01QX05VTUJfTUFTSzsKKwkgICAgICBjeSA9IG4xIDwgY3kxOworCSAgICAgIG4xIC09IGN5MTsKKwkgICAgICBucFswXSA9IG4wOworCisJICAgICAgaWYgKFVOTElLRUxZIChjeSAhPSAwKSkKKwkJeworCQkgIG4xICs9IGQxICsgbXBuX2FkZF9uIChucCAtIGRuLCBucCAtIGRuLCBkcCwgZG4gKyAxKTsKKwkJICBxLS07CisJCX0KKwkgICAgfQorCisJICAqLS1xcCA9IHE7CisKKwkgIC8qIFRydW5jYXRlIG9wZXJhbmRzLiAgKi8KKwkgIGRuLS07CisJICBkcCsrOworCX0KKworICAgICAgbnAtLTsKKyAgICAgIGlmIChVTkxJS0VMWSAobjEgPj0gKGQxICYgZmxhZykpKQorCXsKKwkgIHEgPSBHTVBfTlVNQl9NQVNLOworCSAgY3kgPSBtcG5fc3VibXVsXzEgKG5wLCBkcCwgMiwgcSk7CisKKwkgIGlmIChVTkxJS0VMWSAobjEgIT0gY3kpKQorCSAgICB7CisJICAgICAgaWYgKG4xIDwgKGN5ICYgZmxhZykpCisJCXsKKwkJICBxLS07CisJCSAgYWRkX3NzYWFhYSAobnBbMV0sIG5wWzBdLCBucFsxXSwgbnBbMF0sIGRwWzFdLCBkcFswXSk7CisJCX0KKwkgICAgICBlbHNlCisJCWZsYWcgPSAwOworCSAgICB9CisJICBuMSA9IG5wWzFdOworCX0KKyAgICAgIGVsc2UKKwl7CisJICB1ZGl2X3FyXzNieTIgKHEsIG4xLCBuMCwgbjEsIG5wWzFdLCBucFswXSwgZDEsIGQwLCBkaW52KTsKKworCSAgbnBbMF0gPSBuMDsKKwkgIG5wWzFdID0gbjE7CisJfQorCisgICAgICAqLS1xcCA9IHE7CisgICAgfQorICBBU1NFUlRfQUxXQVlTIChucFsxXSA9PSBuMSk7CisgIG5wICs9IDI7CisKKworICBkbiA9IGRuX29yaWc7CisgIGlmIChVTkxJS0VMWSAobjEgPCAoZG4gJiBmbGFnKSkpCisgICAgeworICAgICAgbXBfbGltYl90IHEsIHg7CisKKyAgICAgIC8qIFRoZSBxdW90aWVudCBtYXkgYmUgdG9vIGxhcmdlIGlmIHRoZSByZW1haW5kZXIgaXMgc21hbGwuICBSZWNvbXB1dGUKKwkgZm9yIGFib3ZlIGlnbm9yZWQgb3BlcmFuZCBwYXJ0cywgdW50aWwgdGhlIHJlbWFpbmRlciBzcGlsbHMuCisKKwkgRklYTUU6IFRoZSBxdWFsaXR5IG9mIHRoaXMgY29kZSBpc24ndCB0aGUgc2FtZSBhcyB0aGUgY29kZSBhYm92ZS4KKwkgMS4gV2UgZG9uJ3QgY29tcHV0ZSB0aGluZ3MgaW4gYW4gb3B0aW1hbCBvcmRlciwgaGlnaC10by1sb3csIGluIG9yZGVyCisJICAgIHRvIHRlcm1pbmF0ZSBhcyBxdWlja2x5IGFzIHBvc3NpYmxlLgorCSAyLiBXZSBtZXNzIHdpdGggcG9pbnRlcnMgYW5kIHNpemVzLCBhZGRpbmcgYW5kIHN1YnRyYWN0aW5nIGFuZAorCSAgICBhZGp1c3RpbmcgdG8gZ2V0IHRoaW5ncyByaWdodC4gIEl0IHN1cmVseSBjb3VsZCBiZSBzdHJlYW1saW5lZC4KKwkgMy4gVGhlIG9ubHkgdGVybWluYXRpb24gY3JpdGVyaWEgYXJlIHRoYXQgd2UgZGV0ZXJtaW5lIHRoYXQgdGhlCisJICAgIHF1b3RpZW50IG5lZWRzIHRvIGJlIGFkanVzdGVkLCBvciB0aGF0IHdlIGhhdmUgcmVjb21wdXRlZAorCSAgICBldmVyeXRoaW5nLiAgV2Ugc2hvdWxkIHN0b3Agd2hlbiB0aGUgcmVtYWluZGVyIGlzIHNvIGxhcmdlCisJICAgIHRoYXQgbm8gYWRkaXRpb25hbCBzdWJ0cmFjdGluZyBjb3VsZCBtYWtlIGl0IHNwaWxsLgorCSA0LiBJZiBub3RoaW5nIGVsc2UsIHdlIHNob3VsZCBub3QgZG8gdHdvIGxvb3BzIG9mIHN1Ym11bF8xIG92ZXIgdGhlCisJICAgIGRhdGEsIGluc3RlYWQgaGFuZGxlIGJvdGggdGhlIHRyaWFuZ3VsYXJpemF0aW9uIGFuZCBjaG9wcGluZyBhdAorCSAgICBvbmNlLiAgKi8KKworICAgICAgeCA9IG4xOworCisgICAgICBpZiAoZG4gPiAyKQorCXsKKwkgIC8qIENvbXBlbnNhdGUgZm9yIHRyaWFuZ3VsYXJpemF0aW9uLiAgKi8KKwkgIG1wX2xpbWJfdCB5OworCisJICBkcCA9IGRwX29yaWc7CisJICBpZiAocW4gKyAxIDwgZG4pCisJICAgIHsKKwkgICAgICBkcCArPSBkbiAtIChxbiArIDEpOworCSAgICAgIGRuID0gcW4gKyAxOworCSAgICB9CisKKwkgIHkgPSBucFstMl07CisKKwkgIGZvciAoaSA9IGRuIC0gMzsgaSA+PSAwOyBpLS0pCisJICAgIHsKKwkgICAgICBxID0gcXBbaV07CisJICAgICAgY3kgPSBtcG5fc3VibXVsXzEgKG5wIC0gKGRuIC0gaSksIGRwLCBkbiAtIGkgLSAyLCBxKTsKKworCSAgICAgIGlmICh5IDwgY3kpCisJCXsKKwkJICBpZiAoeCA9PSAwKQorCQkgICAgeworCQkgICAgICBjeSA9IG1wbl9zdWJfMSAocXAsIHFwLCBxbiwgMSk7CisJCSAgICAgIEFTU0VSVF9BTFdBWVMgKGN5ID09IDApOworCQkgICAgICByZXR1cm4gcWggLSBjeTsKKwkJICAgIH0KKwkJICB4LS07CisJCX0KKwkgICAgICB5IC09IGN5OworCSAgICB9CisJICBucFstMl0gPSB5OworCX0KKworICAgICAgZG4gPSBkbl9vcmlnOworICAgICAgaWYgKHFuICsgMSA8IGRuKQorCXsKKwkgIC8qIENvbXBlbnNhdGUgZm9yIGlnbm9yZWQgZGl2aWRlbmQgYW5kIGRpdmlzb3IgdGFpbHMuICAqLworCisJICBkcCA9IGRwX29yaWc7CisJICBucCA9IG5wX29yaWc7CisKKwkgIGlmIChxaCAhPSAwKQorCSAgICB7CisJICAgICAgY3kgPSBtcG5fc3ViX24gKG5wICsgcW4sIG5wICsgcW4sIGRwLCBkbiAtIChxbiArIDEpKTsKKwkgICAgICBpZiAoY3kgIT0gMCkKKwkJeworCQkgIGlmICh4ID09IDApCisJCSAgICB7CisJCSAgICAgIGlmIChxbiAhPSAwKQorCQkJY3kgPSBtcG5fc3ViXzEgKHFwLCBxcCwgcW4sIDEpOworCQkgICAgICByZXR1cm4gcWggLSBjeTsKKwkJICAgIH0KKwkJICB4LS07CisJCX0KKwkgICAgfQorCisJICBpZiAocW4gPT0gMCkKKwkgICAgcmV0dXJuIHFoOworCisJICBmb3IgKGkgPSBkbiAtIHFuIC0gMjsgaSA+PSAwOyBpLS0pCisJICAgIHsKKwkgICAgICBjeSA9IG1wbl9zdWJtdWxfMSAobnAgKyBpLCBxcCwgcW4sIGRwW2ldKTsKKwkgICAgICBjeSA9IG1wbl9zdWJfMSAobnAgKyBxbiArIGksIG5wICsgcW4gKyBpLCBkbiAtIHFuIC0gaSAtIDEsIGN5KTsKKwkgICAgICBpZiAoY3kgIT0gMCkKKwkJeworCQkgIGlmICh4ID09IDApCisJCSAgICB7CisJCSAgICAgIGN5ID0gbXBuX3N1Yl8xIChxcCwgcXAsIHFuLCAxKTsKKwkJICAgICAgcmV0dXJuIHFoOworCQkgICAgfQorCQkgIHgtLTsKKwkJfQorCSAgICB9CisJfQorICAgIH0KKworICByZXR1cm4gcWg7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvc2JwaTFfZGl2X3FyLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvc2JwaTFfZGl2X3FyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMzMGE3NwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9zYnBpMV9kaXZfcXIuYwpAQCAtMCwwICsxLDEwOSBAQAorLyogbXBuX3NicGkxX2Rpdl9xciAtLSBTY2hvb2xib29rIGRpdmlzaW9uIHVzaW5nIHRoZSBNw7ZsbGVyLUdyYW5sdW5kIDMvMgorICAgZGl2aXNpb24gYWxnb3JpdGhtLgorCisgICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisKKyAgIFRIRSBGVU5DVElPTiBJTiBUSElTIEZJTEUgSVMgSU5URVJOQUwgV0lUSCBBIE1VVEFCTEUgSU5URVJGQUNFLiAgSVQgSVMgT05MWQorICAgU0FGRSBUTyBSRUFDSCBJVCBUSFJPVUdIIERPQ1VNRU5URUQgSU5URVJGQUNFUy4gIElOIEZBQ1QsIElUIElTIEFMTU9TVAorICAgR1VBUkFOVEVFRCBUSEFUIElUIFdJTEwgQ0hBTkdFIE9SIERJU0FQUEVBUiBJTiBBIEZVVFVSRSBHTVAgUkVMRUFTRS4KKworQ29weXJpZ2h0IDIwMDcsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisjaW5jbHVkZSAibG9uZ2xvbmcuaCIKKworbXBfbGltYl90CittcG5fc2JwaTFfZGl2X3FyIChtcF9wdHIgcXAsCisJCSAgbXBfcHRyIG5wLCBtcF9zaXplX3Qgbm4sCisJCSAgbXBfc3JjcHRyIGRwLCBtcF9zaXplX3QgZG4sCisJCSAgbXBfbGltYl90IGRpbnYpCit7CisgIG1wX2xpbWJfdCBxaDsKKyAgbXBfc2l6ZV90IGk7CisgIG1wX2xpbWJfdCBuMSwgbjA7CisgIG1wX2xpbWJfdCBkMSwgZDA7CisgIG1wX2xpbWJfdCBjeSwgY3kxOworICBtcF9saW1iX3QgcTsKKworICBBU1NFUlQgKGRuID4gMik7CisgIEFTU0VSVCAobm4gPj0gZG4pOworICBBU1NFUlQgKChkcFtkbi0xXSAmIEdNUF9OVU1CX0hJR0hCSVQpICE9IDApOworCisgIG5wICs9IG5uOworCisgIHFoID0gbXBuX2NtcCAobnAgLSBkbiwgZHAsIGRuKSA+PSAwOworICBpZiAocWggIT0gMCkKKyAgICBtcG5fc3ViX24gKG5wIC0gZG4sIG5wIC0gZG4sIGRwLCBkbik7CisKKyAgcXAgKz0gbm4gLSBkbjsKKworICBkbiAtPSAyOwkJCS8qIG9mZnNldCBkbiBieSAyIGZvciBtYWluIGRpdmlzaW9uIGxvb3BzLAorCQkJCSAgIHNhdmluZyB0d28gaXRlcmF0aW9ucyBpbiBtcG5fc3VibXVsXzEuICAqLworICBkMSA9IGRwW2RuICsgMV07CisgIGQwID0gZHBbZG4gKyAwXTsKKworICBucCAtPSAyOworCisgIG4xID0gbnBbMV07CisKKyAgZm9yIChpID0gbm4gLSAoZG4gKyAyKTsgaSA+IDA7IGktLSkKKyAgICB7CisgICAgICBucC0tOworICAgICAgaWYgKFVOTElLRUxZIChuMSA9PSBkMSkgJiYgbnBbMV0gPT0gZDApCisJeworCSAgcSA9IEdNUF9OVU1CX01BU0s7CisJICBtcG5fc3VibXVsXzEgKG5wIC0gZG4sIGRwLCBkbiArIDIsIHEpOworCSAgbjEgPSBucFsxXTsJCS8qIHVwZGF0ZSBuMSwgbGFzdCBsb29wJ3MgdmFsdWUgd2lsbCBub3cgYmUgaW52YWxpZCAqLworCX0KKyAgICAgIGVsc2UKKwl7CisJICB1ZGl2X3FyXzNieTIgKHEsIG4xLCBuMCwgbjEsIG5wWzFdLCBucFswXSwgZDEsIGQwLCBkaW52KTsKKworCSAgY3kgPSBtcG5fc3VibXVsXzEgKG5wIC0gZG4sIGRwLCBkbiwgcSk7CisKKwkgIGN5MSA9IG4wIDwgY3k7CisJICBuMCA9IChuMCAtIGN5KSAmIEdNUF9OVU1CX01BU0s7CisJICBjeSA9IG4xIDwgY3kxOworCSAgbjEgPSAobjEgLSBjeTEpICYgR01QX05VTUJfTUFTSzsKKwkgIG5wWzBdID0gbjA7CisKKwkgIGlmIChVTkxJS0VMWSAoY3kgIT0gMCkpCisJICAgIHsKKwkgICAgICBuMSArPSBkMSArIG1wbl9hZGRfbiAobnAgLSBkbiwgbnAgLSBkbiwgZHAsIGRuICsgMSk7CisJICAgICAgcS0tOworCSAgICB9CisJfQorCisgICAgICAqLS1xcCA9IHE7CisgICAgfQorICBucFsxXSA9IG4xOworCisgIHJldHVybiBxaDsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9zYnBpMV9kaXZhcHByX3EuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9zYnBpMV9kaXZhcHByX3EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjdjYTI2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3NicGkxX2RpdmFwcHJfcS5jCkBAIC0wLDAgKzEsMTk4IEBACisvKiBtcG5fc2JwaTFfZGl2YXBwcl9xIC0tIFNjaG9vbGJvb2sgZGl2aXNpb24gdXNpbmcgdGhlIE3DtmxsZXItR3Jhbmx1bmQgMy8yCisgICBkaXZpc2lvbiBhbGdvcml0aG0sIHJldHVybmluZyBhcHByb3hpbWF0ZSBxdW90aWVudC4gIFRoZSBxdW90aWVudCByZXR1cm5lZAorICAgaXMgZWl0aGVyIGNvcnJlY3QsIG9yIG9uZSB0b28gbGFyZ2UuCisKKyAgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3Jiam9ybiBHcmFubHVuZC4KKworICAgVEhFIEZVTkNUSU9OIElOIFRISVMgRklMRSBJUyBJTlRFUk5BTCBXSVRIIEEgTVVUQUJMRSBJTlRFUkZBQ0UuICBJVCBJUyBPTkxZCisgICBTQUZFIFRPIFJFQUNIIElUIFRIUk9VR0ggRE9DVU1FTlRFRCBJTlRFUkZBQ0VTLiAgSU4gRkFDVCwgSVQgSVMgQUxNT1NUCisgICBHVUFSQU5URUVEIFRIQVQgSVQgV0lMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEgRlVUVVJFIEdNUCBSRUxFQVNFLgorCitDb3B5cmlnaHQgMjAwNywgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKyNpbmNsdWRlICJsb25nbG9uZy5oIgorCittcF9saW1iX3QKK21wbl9zYnBpMV9kaXZhcHByX3EgKG1wX3B0ciBxcCwKKwkJICAgICBtcF9wdHIgbnAsIG1wX3NpemVfdCBubiwKKwkJICAgICBtcF9zcmNwdHIgZHAsIG1wX3NpemVfdCBkbiwKKwkJICAgICBtcF9saW1iX3QgZGludikKK3sKKyAgbXBfbGltYl90IHFoOworICBtcF9zaXplX3QgcW4sIGk7CisgIG1wX2xpbWJfdCBuMSwgbjA7CisgIG1wX2xpbWJfdCBkMSwgZDA7CisgIG1wX2xpbWJfdCBjeSwgY3kxOworICBtcF9saW1iX3QgcTsKKyAgbXBfbGltYl90IGZsYWc7CisKKyAgQVNTRVJUIChkbiA+IDIpOworICBBU1NFUlQgKG5uID49IGRuKTsKKyAgQVNTRVJUICgoZHBbZG4tMV0gJiBHTVBfTlVNQl9ISUdIQklUKSAhPSAwKTsKKworICBucCArPSBubjsKKworICBxbiA9IG5uIC0gZG47CisgIGlmIChxbiArIDEgPCBkbikKKyAgICB7CisgICAgICBkcCArPSBkbiAtIChxbiArIDEpOworICAgICAgZG4gPSBxbiArIDE7CisgICAgfQorCisgIHFoID0gbXBuX2NtcCAobnAgLSBkbiwgZHAsIGRuKSA+PSAwOworICBpZiAocWggIT0gMCkKKyAgICBtcG5fc3ViX24gKG5wIC0gZG4sIG5wIC0gZG4sIGRwLCBkbik7CisKKyAgcXAgKz0gcW47CisKKyAgZG4gLT0gMjsJCQkvKiBvZmZzZXQgZG4gYnkgMiBmb3IgbWFpbiBkaXZpc2lvbiBsb29wcywKKwkJCQkgICBzYXZpbmcgdHdvIGl0ZXJhdGlvbnMgaW4gbXBuX3N1Ym11bF8xLiAgKi8KKyAgZDEgPSBkcFtkbiArIDFdOworICBkMCA9IGRwW2RuICsgMF07CisKKyAgbnAgLT0gMjsKKworICBuMSA9IG5wWzFdOworCisgIGZvciAoaSA9IHFuIC0gKGRuICsgMik7IGkgPj0gMDsgaS0tKQorICAgIHsKKyAgICAgIG5wLS07CisgICAgICBpZiAoVU5MSUtFTFkgKG4xID09IGQxKSAmJiBucFsxXSA9PSBkMCkKKwl7CisJICBxID0gR01QX05VTUJfTUFTSzsKKwkgIG1wbl9zdWJtdWxfMSAobnAgLSBkbiwgZHAsIGRuICsgMiwgcSk7CisJICBuMSA9IG5wWzFdOwkJLyogdXBkYXRlIG4xLCBsYXN0IGxvb3AncyB2YWx1ZSB3aWxsIG5vdyBiZSBpbnZhbGlkICovCisJfQorICAgICAgZWxzZQorCXsKKwkgIHVkaXZfcXJfM2J5MiAocSwgbjEsIG4wLCBuMSwgbnBbMV0sIG5wWzBdLCBkMSwgZDAsIGRpbnYpOworCisJICBjeSA9IG1wbl9zdWJtdWxfMSAobnAgLSBkbiwgZHAsIGRuLCBxKTsKKworCSAgY3kxID0gbjAgPCBjeTsKKwkgIG4wID0gKG4wIC0gY3kpICYgR01QX05VTUJfTUFTSzsKKwkgIGN5ID0gbjEgPCBjeTE7CisJICBuMSAtPSBjeTE7CisJICBucFswXSA9IG4wOworCisJICBpZiAoVU5MSUtFTFkgKGN5ICE9IDApKQorCSAgICB7CisJICAgICAgbjEgKz0gZDEgKyBtcG5fYWRkX24gKG5wIC0gZG4sIG5wIC0gZG4sIGRwLCBkbiArIDEpOworCSAgICAgIHEtLTsKKwkgICAgfQorCX0KKworICAgICAgKi0tcXAgPSBxOworICAgIH0KKworICBmbGFnID0gfkNOU1RfTElNQigwKTsKKworICBpZiAoZG4gPj0gMCkKKyAgICB7CisgICAgICBmb3IgKGkgPSBkbjsgaSA+IDA7IGktLSkKKwl7CisJICBucC0tOworCSAgaWYgKFVOTElLRUxZIChuMSA+PSAoZDEgJiBmbGFnKSkpCisJICAgIHsKKwkgICAgICBxID0gR01QX05VTUJfTUFTSzsKKwkgICAgICBjeSA9IG1wbl9zdWJtdWxfMSAobnAgLSBkbiwgZHAsIGRuICsgMiwgcSk7CisKKwkgICAgICBpZiAoVU5MSUtFTFkgKG4xICE9IGN5KSkKKwkJeworCQkgIGlmIChuMSA8IChjeSAmIGZsYWcpKQorCQkgICAgeworCQkgICAgICBxLS07CisJCSAgICAgIG1wbl9hZGRfbiAobnAgLSBkbiwgbnAgLSBkbiwgZHAsIGRuICsgMik7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgZmxhZyA9IDA7CisJCX0KKwkgICAgICBuMSA9IG5wWzFdOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICB1ZGl2X3FyXzNieTIgKHEsIG4xLCBuMCwgbjEsIG5wWzFdLCBucFswXSwgZDEsIGQwLCBkaW52KTsKKworCSAgICAgIGN5ID0gbXBuX3N1Ym11bF8xIChucCAtIGRuLCBkcCwgZG4sIHEpOworCisJICAgICAgY3kxID0gbjAgPCBjeTsKKwkgICAgICBuMCA9IChuMCAtIGN5KSAmIEdNUF9OVU1CX01BU0s7CisJICAgICAgY3kgPSBuMSA8IGN5MTsKKwkgICAgICBuMSAtPSBjeTE7CisJICAgICAgbnBbMF0gPSBuMDsKKworCSAgICAgIGlmIChVTkxJS0VMWSAoY3kgIT0gMCkpCisJCXsKKwkJICBuMSArPSBkMSArIG1wbl9hZGRfbiAobnAgLSBkbiwgbnAgLSBkbiwgZHAsIGRuICsgMSk7CisJCSAgcS0tOworCQl9CisJICAgIH0KKworCSAgKi0tcXAgPSBxOworCisJICAvKiBUcnVuY2F0ZSBvcGVyYW5kcy4gICovCisJICBkbi0tOworCSAgZHArKzsKKwl9CisKKyAgICAgIG5wLS07CisgICAgICBpZiAoVU5MSUtFTFkgKG4xID49IChkMSAmIGZsYWcpKSkKKwl7CisJICBxID0gR01QX05VTUJfTUFTSzsKKwkgIGN5ID0gbXBuX3N1Ym11bF8xIChucCwgZHAsIDIsIHEpOworCisJICBpZiAoVU5MSUtFTFkgKG4xICE9IGN5KSkKKwkgICAgeworCSAgICAgIGlmIChuMSA8IChjeSAmIGZsYWcpKQorCQl7CisJCSAgcS0tOworCQkgIGFkZF9zc2FhYWEgKG5wWzFdLCBucFswXSwgbnBbMV0sIG5wWzBdLCBkcFsxXSwgZHBbMF0pOworCQl9CisJICAgICAgZWxzZQorCQlmbGFnID0gMDsKKwkgICAgfQorCSAgbjEgPSBucFsxXTsKKwl9CisgICAgICBlbHNlCisJeworCSAgdWRpdl9xcl8zYnkyIChxLCBuMSwgbjAsIG4xLCBucFsxXSwgbnBbMF0sIGQxLCBkMCwgZGludik7CisKKwkgIG5wWzFdID0gbjE7CisJICBucFswXSA9IG4wOworCX0KKworICAgICAgKi0tcXAgPSBxOworICAgIH0KKworICBBU1NFUlRfQUxXQVlTIChucFsxXSA9PSBuMSk7CisKKyAgcmV0dXJuIHFoOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3NjYW4wLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvc2NhbjAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzE4MzJlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3NjYW4wLmMKQEAgLTAsMCArMSw1OSBAQAorLyogbXBuX3NjYW4wIC0tIFNjYW4gZnJvbSBhIGdpdmVuIGJpdCBwb3NpdGlvbiBmb3IgdGhlIG5leHQgY2xlYXIgYml0LgorCitDb3B5cmlnaHQgMTk5NCwgMTk5NiwgMjAwMSwgMjAwMiwgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisjaW5jbHVkZSAibG9uZ2xvbmcuaCIKKworLyogQXJndW1lbnQgY29uc3RyYWludHM6CisgICAxLiBVIG11c3Qgc29vbmVyIG9yIGxhdGVyIGhhdmUgYSBsaW1iIHdpdGggYSBjbGVhciBiaXQuCisgKi8KKworbXBfYml0Y250X3QKK21wbl9zY2FuMCAobXBfc3JjcHRyIHVwLCBtcF9iaXRjbnRfdCBzdGFydGluZ19iaXQpCit7CisgIG1wX3NpemVfdCBzdGFydGluZ193b3JkOworICBtcF9saW1iX3QgYWxpbWI7CisgIGludCBjbnQ7CisgIG1wX3NyY3B0ciBwOworCisgIC8qIFN0YXJ0IGF0IHRoZSB3b3JkIGltcGxpZWQgYnkgU1RBUlRJTkdfQklULiAgKi8KKyAgc3RhcnRpbmdfd29yZCA9IHN0YXJ0aW5nX2JpdCAvIEdNUF9OVU1CX0JJVFM7CisgIHAgPSB1cCArIHN0YXJ0aW5nX3dvcmQ7CisgIGFsaW1iID0gKnArKyBeIEdNUF9OVU1CX01BU0s7CisKKyAgLyogTWFzayBvZmYgYW55IGJpdHMgYmVmb3JlIFNUQVJUSU5HX0JJVCBpbiB0aGUgZmlyc3QgbGltYi4gICovCisgIGFsaW1iICY9IC0gKG1wX2xpbWJfdCkgMSA8PCAoc3RhcnRpbmdfYml0ICUgR01QX05VTUJfQklUUyk7CisKKyAgd2hpbGUgKGFsaW1iID09IDApCisgICAgYWxpbWIgPSAqcCsrIF4gR01QX05VTUJfTUFTSzsKKworICBjb3VudF90cmFpbGluZ196ZXJvcyAoY250LCBhbGltYik7CisgIHJldHVybiAocCAtIHVwIC0gMSkgKiBHTVBfTlVNQl9CSVRTICsgY250OworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3NjYW4xLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvc2NhbjEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWU4MDYwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3NjYW4xLmMKQEAgLTAsMCArMSw1OSBAQAorLyogbXBuX3NjYW4xIC0tIFNjYW4gZnJvbSBhIGdpdmVuIGJpdCBwb3NpdGlvbiBmb3IgdGhlIG5leHQgc2V0IGJpdC4KKworQ29weXJpZ2h0IDE5OTQsIDE5OTYsIDIwMDEsIDIwMDIsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorI2luY2x1ZGUgImxvbmdsb25nLmgiCisKKy8qIEFyZ3VtZW50IGNvbnN0cmFpbnRzOgorICAgMS4gVSBtdXN0IHNvb25lciBvciBsYXRlciBoYXZlIGEgbGltYiAhPSAwLgorICovCisKK21wX2JpdGNudF90CittcG5fc2NhbjEgKG1wX3NyY3B0ciB1cCwgbXBfYml0Y250X3Qgc3RhcnRpbmdfYml0KQoreworICBtcF9zaXplX3Qgc3RhcnRpbmdfd29yZDsKKyAgbXBfbGltYl90IGFsaW1iOworICBpbnQgY250OworICBtcF9zcmNwdHIgcDsKKworICAvKiBTdGFydCBhdCB0aGUgd29yZCBpbXBsaWVkIGJ5IFNUQVJUSU5HX0JJVC4gICovCisgIHN0YXJ0aW5nX3dvcmQgPSBzdGFydGluZ19iaXQgLyBHTVBfTlVNQl9CSVRTOworICBwID0gdXAgKyBzdGFydGluZ193b3JkOworICBhbGltYiA9ICpwKys7CisKKyAgLyogTWFzayBvZmYgYW55IGJpdHMgYmVmb3JlIFNUQVJUSU5HX0JJVCBpbiB0aGUgZmlyc3QgbGltYi4gICovCisgIGFsaW1iICY9IC0gKG1wX2xpbWJfdCkgMSA8PCAoc3RhcnRpbmdfYml0ICUgR01QX05VTUJfQklUUyk7CisKKyAgd2hpbGUgKGFsaW1iID09IDApCisgICAgYWxpbWIgPSAqcCsrOworCisgIGNvdW50X3RyYWlsaW5nX3plcm9zIChjbnQsIGFsaW1iKTsKKyAgcmV0dXJuIChwIC0gdXAgLSAxKSAqIEdNUF9OVU1CX0JJVFMgKyBjbnQ7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvc2VjX2FvcnNfMS5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3NlY19hb3JzXzEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDgwZmExCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3NlY19hb3JzXzEuYwpAQCAtMCwwICsxLDU5IEBACisvKiBtcG5fc2VjX2FkZF8xLCBtcG5fc2VjX3N1Yl8xCisKKyAgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBOaWVscyBNw7ZsbGVyCisKK0NvcHlyaWdodCAyMDEzLCAyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworI2lmIE9QRVJBVElPTl9zZWNfYWRkXzEKKyNkZWZpbmUgRk5BTUUgbXBuX3NlY19hZGRfMQorI2RlZmluZSBGTkFNRV9pdGNoIG1wbl9zZWNfYWRkXzFfaXRjaAorI2RlZmluZSBPUF9OIG1wbl9hZGRfbgorI2VuZGlmCisjaWYgT1BFUkFUSU9OX3NlY19zdWJfMQorI2RlZmluZSBGTkFNRSBtcG5fc2VjX3N1Yl8xCisjZGVmaW5lIEZOQU1FX2l0Y2ggbXBuX3NlY19zdWJfMV9pdGNoCisjZGVmaW5lIE9QX04gbXBuX3N1Yl9uCisjZW5kaWYKKworLyogSXQncyBhbm5veWluZyB0byB0aGF0IHdlIG5lZWQgc2NyYXRjaCBzcGFjZSAqLworbXBfc2l6ZV90CitGTkFNRV9pdGNoIChtcF9zaXplX3QgbikKK3sKKyAgcmV0dXJuIG47Cit9CisKK21wX2xpbWJfdAorRk5BTUUgKG1wX3B0ciBycCwgbXBfc3JjcHRyIGFwLCBtcF9zaXplX3QgbiwgbXBfbGltYl90IGIsIG1wX3B0ciBzY3JhdGNoKQoreworICBzY3JhdGNoWzBdID0gYjsKKyAgTVBOX1pFUk8gKHNjcmF0Y2ggKyAxLCBuLTEpOworICByZXR1cm4gT1BfTiAocnAsIGFwLCBzY3JhdGNoLCBuKTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9zZWNfZGl2LmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvc2VjX2Rpdi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMDg2NDkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvc2VjX2Rpdi5jCkBAIC0wLDAgKzEsMTMxIEBACisvKiBtcG5fc2VjX2Rpdl9xciwgbXBuX3NlY19kaXZfciAtLSBDb21wdXRlIFEgPSBmbG9vcihVIC8gViksIFUgPSBVIG1vZCBWLgorICAgU2lkZS1jaGFubmVsIHNpbGVudCB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSB1c2VkIGluc3RydWN0aW9ucyBhcmUKKyAgIHNpZGUtY2hhbm5lbCBzaWxlbnQuCisKKyAgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK0NvcHlyaWdodCAyMDExLTIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorI2luY2x1ZGUgImxvbmdsb25nLmgiCisKKyNpZiBPUEVSQVRJT05fc2VjX2Rpdl9xcgorI2RlZmluZSBGTkFNRSBtcG5fc2VjX2Rpdl9xcgorI2RlZmluZSBGTkFNRV9pdGNoIG1wbl9zZWNfZGl2X3FyX2l0Y2gKKyNkZWZpbmUgUShxKSBxLAorI2RlZmluZSBSRVRUWVBFIG1wX2xpbWJfdAorI2VuZGlmCisjaWYgT1BFUkFUSU9OX3NlY19kaXZfcgorI2RlZmluZSBGTkFNRSBtcG5fc2VjX2Rpdl9yCisjZGVmaW5lIEZOQU1FX2l0Y2ggbXBuX3NlY19kaXZfcl9pdGNoCisjZGVmaW5lIFEocSkKKyNkZWZpbmUgUkVUVFlQRSB2b2lkCisjZW5kaWYKKworbXBfc2l6ZV90CitGTkFNRV9pdGNoIChtcF9zaXplX3Qgbm4sIG1wX3NpemVfdCBkbikKK3sKKyNpZiBPUEVSQVRJT05fc2VjX2Rpdl9xcgorLyogTmVlZHMgKG5uICsgZG4gKyAxKSArIG1wbl9zZWNfcGkxX2Rpdl9xcidzIG5lZWRzIG9mICgybm4nIC0gZG4gKyAxKSBmb3IgYQorICAgdG90YWwgb2YgM25uICsgNCBsaW1icyBhdCB0cC4gIE5vdGUgdGhhdCBtcG5fc2VjX3BpMV9kaXZfcXIncyBubiBpcyBvbmUKKyAgIGdyZWF0ZXIgdGhhbiBvdXJzLCB0aGVyZWZvcmUgKzQgYW5kIG5vdCBqdXN0ICsyLiAgKi8KKyAgcmV0dXJuIDMgKiBubiArIDQ7CisjZW5kaWYKKyNpZiBPUEVSQVRJT05fc2VjX2Rpdl9yCisvKiBOZWVkcyAobm4gKyBkbiArIDEpICsgbXBuX3NlY19waTFfZGl2X3IncyBuZWVkcyBvZiAoZG4gKyAxKSBmb3IgYSB0b3RhbCBvZgorICAgbm4gKyAyZG4gKyAyIGxpbWJzIGF0IHRwLiAgKi8KKyAgcmV0dXJuIG5uICsgMiAqIGRuICsgMjsKKyNlbmRpZgorfQorCitSRVRUWVBFCitGTkFNRSAoUShtcF9wdHIgcXApCisgICAgICAgbXBfcHRyIG5wLCBtcF9zaXplX3Qgbm4sCisgICAgICAgbXBfc3JjcHRyIGRwLCBtcF9zaXplX3QgZG4sCisgICAgICAgbXBfcHRyIHRwKQoreworICBtcF9saW1iX3QgZDEsIGQwOworICB1bnNpZ25lZCBpbnQgY250OworICBtcF9saW1iX3QgaW52MzI7CisKKyAgQVNTRVJUIChkbiA+PSAxKTsKKyAgQVNTRVJUIChubiA+PSBkbik7CisgIEFTU0VSVCAoZHBbZG4gLSAxXSAhPSAwKTsKKworICBkMSA9IGRwW2RuIC0gMV07CisgIGNvdW50X2xlYWRpbmdfemVyb3MgKGNudCwgZDEpOworCisgIGlmIChjbnQgIT0gMCkKKyAgICB7CisgICAgICBtcF9saW1iX3QgcWgsIGN5OworICAgICAgbXBfcHRyIG5wMiwgZHAyOworICAgICAgZHAyID0gdHA7CQkJCQkvKiBkbiBsaW1icyAqLworICAgICAgbXBuX2xzaGlmdCAoZHAyLCBkcCwgZG4sIGNudCk7CisKKyAgICAgIG5wMiA9IHRwICsgZG47CQkJCS8qIChubiArIDEpIGxpbWJzICovCisgICAgICBjeSA9IG1wbl9sc2hpZnQgKG5wMiwgbnAsIG5uLCBjbnQpOworICAgICAgbnAyW25uKytdID0gY3k7CisKKyAgICAgIGQwID0gZHAyW2RuIC0gMV07CisgICAgICBkMCArPSAofmQwICE9IDApOworICAgICAgaW52ZXJ0X2xpbWIgKGludjMyLCBkMCk7CisKKyAgICAgIC8qIFdlIGFkZCBubiArIGRuIHRvIHRwIGhlcmUsIG5vdCBubiArIDEgKyBkbiwgYXMgZXhwZWN0ZWQuICBUaGlzIGlzCisJIHNpbmNlIG5uIGhlcmUgd2lsbCBoYXZlIGJlZW4gaW5jcmVtZW50ZWQuICAqLworI2lmIE9QRVJBVElPTl9zZWNfZGl2X3FyCisgICAgICBxaCA9IG1wbl9zZWNfcGkxX2Rpdl9xciAobnAyICsgZG4sIG5wMiwgbm4sIGRwMiwgZG4sIGludjMyLCB0cCArIG5uICsgZG4pOworICAgICAgQVNTRVJUIChxaCA9PSAwKTsJCS8qIEZJWE1FOiB0aGlzIGluZGljYXRlcyBpbmVmZmljaWVuY3khICovCisgICAgICBNUE5fQ09QWSAocXAsIG5wMiArIGRuLCBubiAtIGRuIC0gMSk7CisgICAgICBxaCA9IG5wMltubiAtIDFdOworI2Vsc2UKKyAgICAgIG1wbl9zZWNfcGkxX2Rpdl9yIChucDIsIG5uLCBkcDIsIGRuLCBpbnYzMiwgdHAgKyBubiArIGRuKTsKKyNlbmRpZgorCisgICAgICBtcG5fcnNoaWZ0IChucCwgbnAyLCBkbiwgY250KTsKKworI2lmIE9QRVJBVElPTl9zZWNfZGl2X3FyCisgICAgICByZXR1cm4gcWg7CisjZW5kaWYKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBGSVhNRTogQ29uc2lkZXIgY29weWluZyBucCA9PiBucDIgaGVyZSwgYWRkaW5nIGEgMC1saW1iIGF0IHRoZSB0b3AuCisJIFRoYXQgd291bGQgc2ltcGxpZnkgdGhlIHVuZGVybHlpbmcgcGkxIGZ1bmN0aW9uLCBzaW5jZSB0aGVuIGl0IGNvdWxkCisJIGFzc3VtZSBubiA+IGRuLiAgKi8KKyAgICAgIGQwID0gZHBbZG4gLSAxXTsKKyAgICAgIGQwICs9ICh+ZDAgIT0gMCk7CisgICAgICBpbnZlcnRfbGltYiAoaW52MzIsIGQwKTsKKworI2lmIE9QRVJBVElPTl9zZWNfZGl2X3FyCisgICAgICByZXR1cm4gbXBuX3NlY19waTFfZGl2X3FyIChxcCwgbnAsIG5uLCBkcCwgZG4sIGludjMyLCB0cCk7CisjZWxzZQorICAgICAgbXBuX3NlY19waTFfZGl2X3IgKG5wLCBubiwgZHAsIGRuLCBpbnYzMiwgdHApOworI2VuZGlmCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3NlY19pbnZlcnQuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9zZWNfaW52ZXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc2NjVkMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9zZWNfaW52ZXJ0LmMKQEAgLTAsMCArMSwxNzcgQEAKKy8qIG1wbl9zZWNfaW52ZXJ0CisKKyAgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBOaWVscyBNw7ZsbGVyCisKK0NvcHlyaWdodCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworI2lmIDAKKy8qIEN1cnJlbnRseSB1bnVzZWQuIFNob3VsZCBiZSByZXN1cnJlY3RlZCBvbmNlIG1wbl9jbmRfbmVnIGlzCisgICBhZHZlcnRpc2VkLiAqLworc3RhdGljIG1wX3NpemVfdAorbXBuX2NuZF9uZWdfaXRjaCAobXBfc2l6ZV90IG4pCit7CisgIHJldHVybiBuOworfQorI2VuZGlmCisKKy8qIEZJWE1FOiBPdWdodCB0byByZXR1cm4gY2FycnkgKi8KK3N0YXRpYyB2b2lkCittcG5fY25kX25lZyAoaW50IGNuZCwgbXBfbGltYl90ICpycCwgY29uc3QgbXBfbGltYl90ICphcCwgbXBfc2l6ZV90IG4sCisJICAgICBtcF9wdHIgc2NyYXRjaCkKK3sKKyAgbXBuX2xzaGlmdCAoc2NyYXRjaCwgYXAsIG4sIDEpOworICBtcG5fY25kX3N1Yl9uIChjbmQsIHJwLCBhcCwgc2NyYXRjaCwgbik7Cit9CisKK3N0YXRpYyBpbnQKK21wbl9zZWNfZXFfdWkgKG1wX3NyY3B0ciBhcCwgbXBfc2l6ZV90IG4sIG1wX2xpbWJfdCBiKQoreworICBtcF9saW1iX3QgZDsKKyAgQVNTRVJUIChuID4gMCk7CisKKyAgZCA9IGFwWzBdIF4gYjsKKworICB3aGlsZSAoLS1uID4gMCkKKyAgICBkIHw9IGFwW25dOworCisgIHJldHVybiBkID09IDA7Cit9CisKK21wX3NpemVfdAorbXBuX3NlY19pbnZlcnRfaXRjaCAobXBfc2l6ZV90IG4pCit7CisgIHJldHVybiA0Km47Cit9CisKKy8qIENvbXB1dGUgViA8LS0gQV57LTF9IChtb2QgTSksIGluIGRhdGEtaW5kZXBlbmRlbnQgdGltZS4gTSBtdXN0IGJlCisgICBvZGQuIFJldHVybnMgMSBvbiBzdWNjZXNzLCBhbmQgMCBvbiBmYWlsdXJlIChpLmUuLCBpZiBnY2QgKEEsIG0pICE9CisgICAxKS4gSW5wdXRzIGFuZCBvdXRwdXRzIG9mIHNpemUgbiwgYW5kIG5vIG92ZXJsYXAgYWxsb3dlZC4gVGhlIHthcCwKKyAgIG59IGFyZWEgaXMgZGVzdHJveWVkLiBGb3IgYXJiaXRyYXJ5IGlucHV0cywgYml0X3NpemUgc2hvdWxkIGJlCisgICAyKm4qR01QX05VTUJfQklUUywgYnV0IGlmIEEgb3IgTSBhcmUga25vd24gdG8gYmUgc21hbGxlciwgZS5nLiwgaWYKKyAgIE0gPSAyXjUyMSAtIDEgYW5kIEEgPCBNLCBiaXRfc2l6ZSBjYW4gYmUgYW55IGJvdW5kIG9uIHRoZSBzdW0gb2YKKyAgIHRoZSBiaXQgc2l6ZXMgb2YgQSBhbmQgTS4gKi8KK2ludAorbXBuX3NlY19pbnZlcnQgKG1wX3B0ciB2cCwgbXBfcHRyIGFwLCBtcF9zcmNwdHIgbXAsCisJCW1wX3NpemVfdCBuLCBtcF9iaXRjbnRfdCBiaXRfc2l6ZSwKKwkJbXBfcHRyIHNjcmF0Y2gpCit7CisgIEFTU0VSVCAobiA+IDApOworICBBU1NFUlQgKGJpdF9zaXplID4gMCk7CisgIEFTU0VSVCAobXBbMF0gJiAxKTsKKyAgQVNTRVJUICghIE1QTl9PVkVSTEFQX1AgKGFwLCBuLCB2cCwgbikpOworI2RlZmluZSBicCAoc2NyYXRjaCArIG4pCisjZGVmaW5lIHVwIChzY3JhdGNoICsgMipuKQorI2RlZmluZSBtMWhwIChzY3JhdGNoICsgMypuKQorCisgIC8qIE1haW50YWluCisKKyAgICAgICBhID0gdSAqIG9yaWdfYSAobW9kIG0pCisgICAgICAgYiA9IHYgKiBvcmlnX2EgKG1vZCBtKQorCisgICAgIGFuZCBiIG9kZCBhdCBhbGwgdGltZXMuIEluaXRpYWxseSwKKworICAgICAgIGEgPSBhX29yaWcsIHUgPSAxCisgICAgICAgYiA9IG0sICAgICAgdiA9IDAKKyAgICAgKi8KKworCisgIHVwWzBdID0gMTsKKyAgbXBuX3plcm8gKHVwKzEsIG4gLSAxKTsKKyAgbXBuX2NvcHlpIChicCwgbXAsIG4pOworICBtcG5femVybyAodnAsIG4pOworCisgIEFTU0VSVF9DQVJSWSAobXBuX3JzaGlmdCAobTFocCwgbXAsIG4sIDEpKTsKKyAgQVNTRVJUX05PQ0FSUlkgKG1wbl9zZWNfYWRkXzEgKG0xaHAsIG0xaHAsIG4sIDEsIHNjcmF0Y2gpKTsKKworICB3aGlsZSAoYml0X3NpemUtLSA+IDApCisgICAgeworICAgICAgbXBfbGltYl90IG9kZCwgc3dhcCwgY3k7CisKKyAgICAgIC8qIEFsd2F5cyBtYWludGFpbiBiIG9kZC4gVGhlIGxvZ2ljIG9mIHRoZSBpdGVyYXRpb24gaXMgYXMKKwkgZm9sbG93cy4gRm9yIGEsIGI6CisKKwkgICBvZGQgPSBhICYgMQorCSAgIGEgLT0gb2RkICogYgorCSAgIGlmICh1bmRlcmZsb3cgZnJvbSBhLWIpCisJICAgICB7CisJICAgICAgIGIgKz0gYSwgYXNzaWducyBvbGQgYQorCSAgICAgICBhID0gQl5uLWEKKwkgICAgIH0KKworCSAgIGEgLz0gMgorCisJIEZvciB1LCB2OgorCisJICAgaWYgKHVuZGVyZmxvdyBmcm9tIGEgLSBiKQorCSAgICAgc3dhcCB1LCB2CisJICAgdSAtPSBvZGQgKiB2CisJICAgaWYgKHVuZGVyZmxvdyBmcm9tIHUgLSB2KQorCSAgICAgdSArPSBtCisKKwkgICB1IC89IDIKKwkgICBpZiAoYSBvbmUgYml0IHdhcyBzaGlmdGVkIG91dCkKKwkgICAgIHUgKz0gKG0rMSkvMgorCisJIEFzIGxvbmcgYXMgYSA+IDAsIHRoZSBxdWFudGl0eQorCisJICAgKGJpdHNpemUgb2YgYSkgKyAoYml0c2l6ZSBvZiBiKQorCisJIGlzIHJlZHVjZWQgYnkgYXQgbGVhc3Qgb25lIGJpdCBwZXIgaXRlcmF0aW9uLCBoZW5jZSBhZnRlciAoYml0X3NpemUgb2YKKwkgb3JpZ19hKSArIChiaXRfc2l6ZSBvZiBtKSAtIDEgaXRlcmF0aW9ucyB3ZSBzdXJlbHkgaGF2ZSBhID0gMC4gVGhlbiBiCisJID0gZ2NkKG9yaWdfYSwgbSkgYW5kIGlmIGIgPSAxIHRoZW4gYWxzbyB2ID0gb3JpZ19hXnstMX0gKG1vZCBtKS4KKyAgICAgICovCisKKyAgICAgIEFTU0VSVCAoYnBbMF0gJiAxKTsKKyAgICAgIG9kZCA9IGFwWzBdICYgMTsKKworICAgICAgc3dhcCA9IG1wbl9jbmRfc3ViX24gKG9kZCwgYXAsIGFwLCBicCwgbik7CisgICAgICBtcG5fY25kX2FkZF9uIChzd2FwLCBicCwgYnAsIGFwLCBuKTsKKyAgICAgIG1wbl9jbmRfbmVnIChzd2FwLCBhcCwgYXAsIG4sIHNjcmF0Y2gpOworCisgICAgICBtcG5fY25kX3N3YXAgKHN3YXAsIHVwLCB2cCwgbik7CisgICAgICBjeSA9IG1wbl9jbmRfc3ViX24gKG9kZCwgdXAsIHVwLCB2cCwgbik7CisgICAgICBjeSAtPSBtcG5fY25kX2FkZF9uIChjeSwgdXAsIHVwLCBtcCwgbik7CisgICAgICBBU1NFUlQgKGN5ID09IDApOworCisgICAgICBjeSA9IG1wbl9yc2hpZnQgKGFwLCBhcCwgbiwgMSk7CisgICAgICBBU1NFUlQgKGN5ID09IDApOworICAgICAgY3kgPSBtcG5fcnNoaWZ0ICh1cCwgdXAsIG4sIDEpOworICAgICAgY3kgPSBtcG5fY25kX2FkZF9uIChjeSwgdXAsIHVwLCBtMWhwLCBuKTsKKyAgICAgIEFTU0VSVCAoY3kgPT0gMCk7CisgICAgfQorICAvKiBTaG91bGQgYmUgYWxsIHplcm9zLCBidXQgY2hlY2sgb25seSBleHRyZW1lIGxpbWJzICovCisgIEFTU0VSVCAoIChhcFswXSB8IGFwW24tMV0pID09IDApOworICAvKiBDaGVjayBpZiBpbmRlZWQgZ2NkID09IDEuICovCisgIHJldHVybiBtcG5fc2VjX2VxX3VpIChicCwgbiwgMSk7CisjdW5kZWYgYnAKKyN1bmRlZiB1cAorI3VuZGVmIG0xaHAKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9zZWNfbXVsLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvc2VjX211bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiYmZhNjEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvc2VjX211bC5jCkBAIC0wLDAgKzEsNDggQEAKKy8qIG1wbl9zZWNfbXVsLgorCisgICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitDb3B5cmlnaHQgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisKK3ZvaWQKK21wbl9zZWNfbXVsIChtcF9wdHIgcnAsCisJICAgICBtcF9zcmNwdHIgYXAsIG1wX3NpemVfdCBhbiwKKwkgICAgIG1wX3NyY3B0ciBicCwgbXBfc2l6ZV90IGJuLAorCSAgICAgbXBfcHRyIHRwKQoreworICBtcG5fbXVsX2Jhc2VjYXNlIChycCwgYXAsIGFuLCBicCwgYm4pOworfQorCittcF9zaXplX3QKK21wbl9zZWNfbXVsX2l0Y2ggKG1wX3NpemVfdCBhbiwgbXBfc2l6ZV90IGJuKQoreworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9zZWNfcGkxX2Rpdi5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3NlY19waTFfZGl2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjlkMDFlNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9zZWNfcGkxX2Rpdi5jCkBAIC0wLDAgKzEsMTcyIEBACisvKiBtcG5fc2VjX3BpMV9kaXZfcXIsIG1wbl9zZWNfcGkxX2Rpdl9yIC0tIENvbXB1dGUgUSA9IGZsb29yKFUgLyBWKSwgVSA9IFUKKyAgIG1vZCBWLiAgU2lkZS1jaGFubmVsIHNpbGVudCB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSB1c2VkIGluc3RydWN0aW9ucworICAgYXJlIHNpZGUtY2hhbm5lbCBzaWxlbnQuCisKKyAgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3JiasO2cm4gR3Jhbmx1bmQuCisKKyAgIFRIRSBGVU5DVElPTlMgSU4gVEhJUyBGSUxFIEFSRSBJTlRFUk5BTCBXSVRIIE1VVEFCTEUgSU5URVJGQUNFUy4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggVEhFTSBUSFJPVUdIIERPQ1VNRU5URUQgSU5URVJGQUNFUy4gIElOIEZBQ1QsIElUIElTIEFMTU9TVAorICAgR1VBUkFOVEVFRCBUSEFUIFRIRVkgV0lMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEgRlVUVVJFIEdOVSBNUCBSRUxFQVNFLgorCitDb3B5cmlnaHQgMjAxMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKyNpbmNsdWRlICJsb25nbG9uZy5oIgorCisvKiBUaGlzIHNpZGUtY2hhbm5lbCBzaWxlbnQgZGl2aXNpb24gYWxnb3JpdGhtIHJlZHVjZXMgdGhlIHBhcnRpYWwgcmVtYWluZGVyIGJ5CisgICBHTVBfTlVNQl9CSVRTLzIgYml0cyBhdCBhIHRpbWUsIGNvbXBhcmVkIHRvIEdNUF9OVU1CX0JJVFMgZm9yIHRoZSBtYWluCisgICBkaXZpc2lvbiBhbGdvcml0aG0uICBXZSBhY3R1YWxseSBkbyBub3QgaW5zaXN0IG9uIHJlZHVjaW5nIGJ5IGV4YWN0bHkKKyAgIEdNUF9OVU1CX0JJVFMvMiwgYnV0IG1heSBsZWF2ZSBhIHBhcnRpYWwgcmVtYWluZGVyIHRoYXQgaXMgRCpCXmkgdG8gM0QqQl5pCisgICB0b28gbGFyZ2UgKEIgaXMgdGhlIGxpbWIgYmFzZSwgRCBpcyB0aGUgZGl2aXNvciwgYW5kIGkgaXMgdGhlIGluZHVjdGlvbgorICAgdmFyaWFibGUpOyB0aGUgc3Vic2VxdWVudCBzdGVwIHdpbGwgaGFuZGxlIHRoZSBleHRyYSBwYXJ0aWFsIHJlbWFpbmRlciBiaXRzLgorCisgICBXaXRoIHRoYXQgcGFydGlhbCByZW1haW5kZXIgcmVkdWN0aW9uLCBlYWNoIHN0ZXAgZ2VuZXJhdGVzIGEgcXVvdGllbnQgImhhbGYKKyAgIGxpbWIiLiAgVGhlIG91dGVyIGxvb3AgZ2VuZXJhdGVzIHR3byBxdW90aWVudCBoYWxmIGxpbWJzLCBhbiB1cHBlciAocTFoKSBhbmQKKyAgIGEgbG93ZXIgKHEwaCkgd2hpY2ggYXJlIHN0b3JlZCBzcGFyc2VseSBpbiBzZXBhcmF0ZSBsaW1iIGFycmF5cy4gIFRoZXNlCisgICBhcnJheXMgYXJlIGFkZGVkIGF0IHRoZSBlbmQ7IHVzaW5nIHNlcGFyYXRlIGFycmF5cyBhdm9pZHMgZGF0YS1kZXBlbmRlbnQKKyAgIGNhcnJ5IHByb3BhZ2F0aW9uIHdoaWNoIGNvdWxkIGVsc2UgcG9zZSBhIHNpZGUtY2hhbm5lbCBsZWFrYWdlIHByb2JsZW0uCisKKyAgIFRoZSBxdW90aWVudCBoYWxmIGxpbWJzIG1heSBiZSBiZXR3ZWVuIC0zIHRvIDAgZnJvbSB0aGUgYWNjdXJhdGUgdmFsdWUKKyAgICgiYWNjdXJhdGUiIGJlaW5nIHRoZSBvbmUgd2hpY2ggY29ycmVzcG9uZHMgdG8gYSByZWR1Y3Rpb24gdG8gYSBwcmluY2lwYWwKKyAgIHBhcnRpYWwgcmVtYWluZGVyKS4gIFRvbyBzbWFsbCBxdW90aWVudCBoYWxmIGxpbWJzIGNvcnJlc3BvbmQgdG8gdG9vIGxhcmdlCisgICByZW1haW5kZXJzLCB3aGljaCB3ZSByZWR1Y2UgbGF0ZXIsIGFzIGRlc2NyaWJlZCBhYm92ZS4KKworICAgSW4gb3JkZXIgdG8ga2VlcCBxdW90aWVudHMgZnJvbSBnZXR0aW5nIHRvbyBiaWcsIGNvcnJlc3BvbmRpbmcgdG8gYSBuZWdhdGl2ZQorICAgcGFydGlhbCByZW1haW5kZXIsIHdlIHVzZSBhbiBpbnZlcnNlIHdoaWNoIGlzIHNsaWdodGx5IHNtYWxsZXIgdGhhbiB1c3VhbGx5LgorKi8KKworI2lmIE9QRVJBVElPTl9zZWNfcGkxX2Rpdl9xcgorLyogTmVlZHMgKGRuICsgMSkgKyAobm4gLSBkbikgKyAobm4gLSBkbikgPSAybm4gLSBkbiArIDEgbGltYnMgYXQgdHAuICovCisjZGVmaW5lIEZOQU1FIG1wbl9zZWNfcGkxX2Rpdl9xcgorI2RlZmluZSBRKHEpIHEsCisjZGVmaW5lIFJFVFRZUEUgbXBfbGltYl90CisjZW5kaWYKKyNpZiBPUEVSQVRJT05fc2VjX3BpMV9kaXZfcgorLyogTmVlZHMgKGRuICsgMSkgbGltYnMgYXQgdHAuICAqLworI2RlZmluZSBGTkFNRSBtcG5fc2VjX3BpMV9kaXZfcgorI2RlZmluZSBRKHEpCisjZGVmaW5lIFJFVFRZUEUgdm9pZAorI2VuZGlmCisKK1JFVFRZUEUKK0ZOQU1FIChRKG1wX3B0ciBxcCkKKyAgICAgICBtcF9wdHIgbnAsIG1wX3NpemVfdCBubiwKKyAgICAgICBtcF9zcmNwdHIgZHAsIG1wX3NpemVfdCBkbiwKKyAgICAgICBtcF9saW1iX3QgZGludiwKKyAgICAgICBtcF9wdHIgdHApCit7CisgIG1wX2xpbWJfdCBuaCwgY3ksIHExaCwgcTBoLCBkdW1teSwgY25kOworICBtcF9zaXplX3QgaTsKKyAgbXBfcHRyIGhwOworI2lmIE9QRVJBVElPTl9zZWNfcGkxX2Rpdl9xcgorICBtcF9saW1iX3QgcWg7CisgIG1wX3B0ciBxbHAsIHFocDsKKyNlbmRpZgorCisgIEFTU0VSVCAoZG4gPj0gMSk7CisgIEFTU0VSVCAobm4gPj0gZG4pOworICBBU1NFUlQgKChkcFtkbiAtIDFdICYgR01QX05VTUJfSElHSEJJVCkgIT0gMCk7CisKKyAgaWYgKG5uID09IGRuKQorICAgIHsKKyAgICAgIGN5ID0gbXBuX3N1Yl9uIChucCwgbnAsIGRwLCBkbik7CisgICAgICBtcG5fY25kX2FkZF9uIChjeSwgbnAsIG5wLCBkcCwgZG4pOworI2lmIE9QRVJBVElPTl9zZWNfcGkxX2Rpdl9xcgorICAgICAgcmV0dXJuIDEgLSBjeTsKKyNlbHNlCisgICAgICByZXR1cm47CisjZW5kaWYKKyAgICB9CisKKyAgLyogQ3JlYXRlIGEgZGl2aXNvciBjb3B5IHNoaWZ0ZWQgaGFsZiBhIGxpbWIuICAqLworICBocCA9IHRwOwkJCQkJLyogKGRuICsgMSkgbGltYnMgKi8KKyAgaHBbZG5dID0gbXBuX2xzaGlmdCAoaHAsIGRwLCBkbiwgR01QX05VTUJfQklUUyAvIDIpOworCisjaWYgT1BFUkFUSU9OX3NlY19waTFfZGl2X3FyCisgIHFscCA9IHRwICsgKGRuICsgMSk7CQkJCS8qIChubiAtIGRuKSBsaW1icyAqLworICBxaHAgPSB0cCArIChubiArIDEpOwkJCQkvKiAobm4gLSBkbikgbGltYnMgKi8KKyNlbmRpZgorCisgIG5wICs9IG5uIC0gZG47CisgIG5oID0gMDsKKworICBmb3IgKGkgPSBubiAtIGRuIC0gMTsgaSA+PSAwOyBpLS0pCisgICAgeworICAgICAgbnAtLTsKKworICAgICAgbmggPSAobmggPDwgR01QX05VTUJfQklUUy8yKSArIChucFtkbl0gPj4gR01QX05VTUJfQklUUy8yKTsKKyAgICAgIHVtdWxfcHBtbSAocTFoLCBkdW1teSwgbmgsIGRpbnYpOworICAgICAgcTFoICs9IG5oOworI2lmIE9QRVJBVElPTl9zZWNfcGkxX2Rpdl9xcgorICAgICAgcWhwW2ldID0gcTFoOworI2VuZGlmCisgICAgICBtcG5fc3VibXVsXzEgKG5wLCBocCwgZG4gKyAxLCBxMWgpOworCisgICAgICBuaCA9IG5wW2RuXTsKKyAgICAgIHVtdWxfcHBtbSAocTBoLCBkdW1teSwgbmgsIGRpbnYpOworICAgICAgcTBoICs9IG5oOworI2lmIE9QRVJBVElPTl9zZWNfcGkxX2Rpdl9xcgorICAgICAgcWxwW2ldID0gcTBoOworI2VuZGlmCisgICAgICBuaCAtPSBtcG5fc3VibXVsXzEgKG5wLCBkcCwgZG4sIHEwaCk7CisgICAgfQorCisgIC8qIDFzdCBhZGp1c3RtZW50IGRlcGVuZHMgb24gZXh0cmEgaGlnaCByZW1haW5kZXIgbGltYi4gICovCisgIGNuZCA9IG5oICE9IDA7CQkJCS8qIEZJWE1FOiBjbXAtdG8taW50ICovCisjaWYgT1BFUkFUSU9OX3NlY19waTFfZGl2X3FyCisgIHFscFswXSArPSBjbmQ7CisjZW5kaWYKKyAgbmggLT0gbXBuX2NuZF9zdWJfbiAoY25kLCBucCwgbnAsIGRwLCBkbik7CisKKyAgLyogMm5kIGFkanVzdG1lbnQgZGVwZW5kcyBvbiByZW1haW5kZXIvZGl2aXNvciBjb21wYXJpc29uIGFzIHdlbGwgYXMgd2hldGhlcgorICAgICBleHRyYSByZW1haW5kZXIgbGltYiB3YXMgbnVsbGlmaWVkIGJ5IHByZXZpb3VzIHN1YnRyYWN0LiAgKi8KKyAgY3kgPSBtcG5fc3ViX24gKG5wLCBucCwgZHAsIGRuKTsKKyAgY3kgPSBjeSAtIG5oOworI2lmIE9QRVJBVElPTl9zZWNfcGkxX2Rpdl9xcgorICBxbHBbMF0gKz0gMSAtIGN5OworI2VuZGlmCisgIG1wbl9jbmRfYWRkX24gKGN5LCBucCwgbnAsIGRwLCBkbik7CisKKyAgLyogM3JkIGFkanVzdG1lbnQgZGVwZW5kcyBvbiByZW1haW5kZXIvZGl2aXNvciBjb21wYXJpc29uLiAgKi8KKyAgY3kgPSBtcG5fc3ViX24gKG5wLCBucCwgZHAsIGRuKTsKKyNpZiBPUEVSQVRJT05fc2VjX3BpMV9kaXZfcXIKKyAgcWxwWzBdICs9IDEgLSBjeTsKKyNlbmRpZgorICBtcG5fY25kX2FkZF9uIChjeSwgbnAsIG5wLCBkcCwgZG4pOworCisjaWYgT1BFUkFUSU9OX3NlY19waTFfZGl2X3FyCisgIC8qIENvbWJpbmUgcXVvdGllbnQgaGFsdmVzIGludG8gZmluYWwgcXVvdGllbnQuICAqLworICBxaCA9IG1wbl9sc2hpZnQgKHFocCwgcWhwLCBubiAtIGRuLCBHTVBfTlVNQl9CSVRTLzIpOworICBxaCArPSBtcG5fYWRkX24gKHFwLCBxaHAsIHFscCwgbm4gLSBkbik7CisKKyAgcmV0dXJuIHFoOworI2Vsc2UKKyAgcmV0dXJuOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvc2VjX3Bvd20uYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9zZWNfcG93bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNzhjNjYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvc2VjX3Bvd20uYwpAQCAtMCwwICsxLDM4MyBAQAorLyogbXBuX3NlY19wb3dtIC0tIENvbXB1dGUgUiA9IFVeRSBtb2QgTS4gIFNlY3VyZSB2YXJpYW50LCBzaWRlLWNoYW5uZWwgc2lsZW50CisgICB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBtdWx0aXBseSBpbnN0cnVjdGlvbiBpcyBzaWRlIGNoYW5uZWwgc2lsZW50LgorCisgICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitDb3B5cmlnaHQgMjAwNy0yMDA5LCAyMDExLTIwMTQsIDIwMTgtMjAxOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworCisvKgorICBCQVNJQyBBTEdPUklUSE0sIENvbXB1dGUgVV5FIG1vZCBNLCB3aGVyZSBNIDwgQl5uIGlzIG9kZC4KKworICAxLiBUIDwtIChCXm4gKiBVKSBtb2QgTTsgY29udmVydCB0byBSRURDIGZvcm0KKworICAyLiBDb21wdXRlIHRhYmxlIFVeMCwgVV4xLCBVXjIuLi4gb2YgZmxvb3IobG9nKEUpKS1kZXBlbmRlbnQgc2l6ZQorCisgIDMuIFdoaWxlIHRoZXJlIGFyZSBtb3JlIGJpdHMgaW4gRQorICAgICAgIFcgPC0gcG93ZXIgbGVmdC10by1yaWdodCBiYXNlLWsKKworICBUaGUgYXJ0aWNsZSAiRGVmZWF0aW5nIG1vZGV4cCBzaWRlLWNoYW5uZWwgYXR0YWNrcyB3aXRoIGRhdGEtaW5kZXBlbmRlbnQKKyAgZXhlY3V0aW9uIHRyYWNlcyIsIGh0dHBzOi8vZ21wbGliLm9yZy9+dGVnZS9tb2RleHAtc2lsZW50LnBkZiwgaGFzIGRldGFpbHMuCisKKworICBUT0RPOgorCisgICAqIE1ha2UgZ2V0Yml0cyBhIG1hY3JvLCB0aGVyZWJ5IGFsbG93aW5nIGl0IHRvIHVwZGF0ZSB0aGUgaW5kZXggb3BlcmFuZC4KKyAgICAgVGhhdCB3aWxsIHNpbXBsaWZ5IHRoZSBjb2RlIHVzaW5nIGdldGJpdHMuICAoUGVyaGFwcyBtYWtlIGdldGJpdHMnIHNpYmxpbmcKKyAgICAgZ2V0Yml0IHRoZW4gaGF2ZSBzaW1pbGFyIGZvcm0sIGZvciBzeW1tZXRyeS4pCisKKyAgICogQ2hvb3NlIHdpbmRvdyBzaXplIHdpdGhvdXQgbG9vcGluZy4gIChTdXBlcm9wdGltaXplIG9yIHRoaW5rKHRtKS4pCisKKyAgICogUkVEQ18xX1RPX1JFRENfMl9USFJFU0hPTEQgbWlnaHQgYWN0dWFsbHkgcmVwcmVzZW50IHRoZSBjdXRvZmYgYmV0d2VlbgorICAgICByZWRjXzEgYW5kIHJlZGNfbi4gIE9uIHN1Y2ggc3lzdGVtcywgd2Ugd2lsbCBzd2l0Y2ggdG8gcmVkY18yIGNhdXNpbmcKKyAgICAgc2xvd2Rvd24uCisqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKyNpbmNsdWRlICJsb25nbG9uZy5oIgorCisjdW5kZWYgTVBOX1JFRENfMV9TRUMKKyNpZiBIQVZFX05BVElWRV9tcG5fc2JwaTFfYmRpdl9yCisjZGVmaW5lIE1QTl9SRURDXzFfU0VDKHJwLCB1cCwgbXAsIG4sIGludm0pCQkJCVwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBtcF9saW1iX3QgY3k7CQkJCQkJCVwKKyAgICBjeSA9IG1wbl9zYnBpMV9iZGl2X3IgKHVwLCAyICogbiwgbXAsIG4sIGludm0pOwkJCVwKKyAgICBtcG5fY25kX3N1Yl9uIChjeSwgcnAsIHVwICsgbiwgbXAsIG4pOwkJCQlcCisgIH0gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBNUE5fUkVEQ18xX1NFQyhycCwgdXAsIG1wLCBuLCBpbnZtKQkJCQlcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgbXBfbGltYl90IGN5OwkJCQkJCQlcCisgICAgY3kgPSBtcG5fcmVkY18xIChycCwgdXAsIG1wLCBuLCBpbnZtKTsJCQkJXAorICAgIG1wbl9jbmRfc3ViX24gKGN5LCBycCwgcnAsIG1wLCBuKTsJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjaWYgSEFWRV9OQVRJVkVfbXBuX2FkZG11bF8yIHx8IEhBVkVfTkFUSVZFX21wbl9yZWRjXzIKKyN1bmRlZiBNUE5fUkVEQ18yX1NFQworI2RlZmluZSBNUE5fUkVEQ18yX1NFQyhycCwgdXAsIG1wLCBuLCBtaXApCQkJCVwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBtcF9saW1iX3QgY3k7CQkJCQkJCVwKKyAgICBjeSA9IG1wbl9yZWRjXzIgKHJwLCB1cCwgbXAsIG4sIG1pcCk7CQkJCVwKKyAgICBtcG5fY25kX3N1Yl9uIChjeSwgcnAsIHJwLCBtcCwgbik7CQkJCQlcCisgIH0gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBNUE5fUkVEQ18yX1NFQyhycCwgdXAsIG1wLCBuLCBtaXApIC8qIGVtcHR5ICovCisjdW5kZWYgUkVEQ18xX1RPX1JFRENfMl9USFJFU0hPTEQKKyNkZWZpbmUgUkVEQ18xX1RPX1JFRENfMl9USFJFU0hPTEQgTVBfU0laRV9UX01BWAorI2VuZGlmCisKKy8qIERlZmluZSBvdXIgb3duIG1wbiBzcXVhcmluZyBmdW5jdGlvbi4gIFdlIGRvIHRoaXMgc2luY2Ugd2UgY2Fubm90IHVzZSBhCisgICBuYXRpdmUgbXBuX3Nxcl9iYXNlY2FzZSBvdmVyIFRVTkVfU1FSX1RPT00yX01BWCwgb3IgYSBub24tbmF0aXZlIG9uZSBvdmVyCisgICBTUVJfVE9PTTJfVEhSRVNIT0xELiAgVGhpcyBpcyBzbyBiZWNhdXNlIG9mIGZpeGVkIHNpemUgc3RhY2sgYWxsb2NhdGlvbnMKKyAgIG1hZGUgaW5zaWRlIG1wbl9zcXJfYmFzZWNhc2UuICAqLworCisjaWYgISBIQVZFX05BVElWRV9tcG5fc3FyX2Jhc2VjYXNlCisvKiBUaGUgbGltaXQgb2YgdGhlIGdlbmVyaWMgY29kZSBpcyBTUVJfVE9PTTJfVEhSRVNIT0xELiAgKi8KKyNkZWZpbmUgU1FSX0JBU0VDQVNFX0xJTSAgU1FSX1RPT00yX1RIUkVTSE9MRAorI2VuZGlmCisKKyNpZiBIQVZFX05BVElWRV9tcG5fc3FyX2Jhc2VjYXNlCisjaWZkZWYgVFVORV9TUVJfVE9PTTJfTUFYCisvKiBXZSBzbGlnaHRseSBhYnVzZSBUVU5FX1NRUl9UT09NMl9NQVggaGVyZS4gIElmIGl0IGlzIHNldCBmb3IgYW4gYXNzZW1ibHkKKyAgIG1wbl9zcXJfYmFzZWNhc2UsIGl0IGNvbWVzIGZyb20gU1FSX1RPT00yX1RIUkVTSE9MRF9NQVggaW4gdGhlIGFzc2VtYmx5CisgICBmaWxlLiAgQW4gYXNzZW1ibHkgbXBuX3Nxcl9iYXNlY2FzZSB0aGF0IGRvZXMgbm90IGRlZmluZSBpdCBzaG91bGQgYWxsb3cKKyAgIGFueSBzaXplLiAgKi8KKyNkZWZpbmUgU1FSX0JBU0VDQVNFX0xJTSAgU1FSX1RPT00yX1RIUkVTSE9MRAorI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIFdBTlRfRkFUX0JJTkFSWQorLyogRm9yIGZhdCBidWlsZHMsIHdlIHVzZSBTUVJfVE9PTTJfVEhSRVNIT0xEIHdoaWNoIHdpbGwgZXhwYW5kIHRvIGEgcmVhZCBmcm9tCisgICBfX2dtcG5fY3B1dmVjLiAgUGVyaGFwcyBhbnkgcG9zc2libGUgc3FyX2Jhc2VjYXNlLmFzbSBhbGxvdyBhbnkgc2l6ZSwgYW5kIHdlCisgICBsaW1pdCB0aGUgdXNlIHVubmVjZXNzYXJpbHkuICBXZSBjYW5ub3QgdGVsbCwgc28gcGxheSBpdCBzYWZlLiAgRklYTUUuICAqLworI2RlZmluZSBTUVJfQkFTRUNBU0VfTElNICBTUVJfVE9PTTJfVEhSRVNIT0xECisjZW5kaWYKKworI2lmbmRlZiBTUVJfQkFTRUNBU0VfTElNCisvKiBJZiBTUVJfQkFTRUNBU0VfTElNIGlzIG5vdyBub3QgZGVmaW5lZCwgdXNlIG1wbl9zcXJfYmFzZWNhc2UgZm9yIGFueSBvcGVyYW5kCisgICBzaXplLiAgKi8KKyNkZWZpbmUgU1FSX0JBU0VDQVNFX0xJTSAgTVBfU0laRV9UX01BWAorI2VuZGlmCisKKyNkZWZpbmUgbXBuX2xvY2FsX3NxcihycCx1cCxuKQkJCQkJCVwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBpZiAoQUJPVkVfVEhSRVNIT0xEIChuLCBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEKQkJCVwKKwkmJiBCRUxPV19USFJFU0hPTEQgKG4sIFNRUl9CQVNFQ0FTRV9MSU0pKQkJCVwKKyAgICAgIG1wbl9zcXJfYmFzZWNhc2UgKHJwLCB1cCwgbik7CQkJCQlcCisgICAgZWxzZQkJCQkJCQkJXAorICAgICAgbXBuX211bF9iYXNlY2FzZShycCwgdXAsIG4sIHVwLCBuKTsJCQkJXAorICB9IHdoaWxlICgwKQorCisjZGVmaW5lIGdldGJpdChwLGJpKSBcCisgICgocFsoYmkgLSAxKSAvIEdNUF9OVU1CX0JJVFNdID4+IChiaSAtIDEpICUgR01QX05VTUJfQklUUykgJiAxKQorCisvKiBGSVhNRTogTWF5YmUgc29tZSB0aGluZ3Mgd291bGQgZ2V0IHNpbXBsZXIgaWYgYWxsIGNhbGxlcnMgZW5zdXJlCisgICB0aGF0IGJpID49IG5iaXRzLiBBcyBmYXIgYXMgSSB1bmRlcnN0YW5kLCB3aXRoIHRoZSBjdXJyZW50IGNvZGUgYmkKKyAgIDwgbmJpdHMgY2FuIGhhcHBlbiBvbmx5IGZvciB0aGUgZmluYWwgaXRlcmF0aW9uLiAqLworc3RhdGljIGlubGluZSBtcF9saW1iX3QKK2dldGJpdHMgKGNvbnN0IG1wX2xpbWJfdCAqcCwgbXBfYml0Y250X3QgYmksIGludCBuYml0cykKK3sKKyAgaW50IG5iaXRzX2luX3I7CisgIG1wX2xpbWJfdCByOworICBtcF9zaXplX3QgaTsKKworICBpZiAoYmkgPCBuYml0cykKKyAgICB7CisgICAgICByZXR1cm4gcFswXSAmICgoKG1wX2xpbWJfdCkgMSA8PCBiaSkgLSAxKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBiaSAtPSBuYml0czsJCQkvKiBiaXQgaW5kZXggb2YgbG93IGJpdCB0byBleHRyYWN0ICovCisgICAgICBpID0gYmkgLyBHTVBfTlVNQl9CSVRTOwkJLyogd29yZCBpbmRleCBvZiBsb3cgYml0IHRvIGV4dHJhY3QgKi8KKyAgICAgIGJpICU9IEdNUF9OVU1CX0JJVFM7CQkvKiBiaXQgaW5kZXggaW4gbG93IHdvcmQgKi8KKyAgICAgIHIgPSBwW2ldID4+IGJpOwkJCS8qIGV4dHJhY3QgKGxvdykgYml0cyAqLworICAgICAgbmJpdHNfaW5fciA9IEdNUF9OVU1CX0JJVFMgLSBiaTsJLyogbnVtYmVyIG9mIGJpdHMgbm93IGluIHIgKi8KKyAgICAgIGlmIChuYml0c19pbl9yIDwgbmJpdHMpCQkvKiBkaWQgd2UgZ2V0IGVub3VnaCBiaXRzPyAqLworCXIgKz0gcFtpICsgMV0gPDwgbmJpdHNfaW5fcjsJLyogcHJlcGVuZCBiaXRzIGZyb20gaGlnaGVyIHdvcmQgKi8KKyAgICAgIHJldHVybiByICYgKCgobXBfbGltYl90ICkgMSA8PCBuYml0cykgLSAxKTsKKyAgICB9Cit9CisKKyNpZm5kZWYgUE9XTV9TRUNfVEFCTEUKKyNpZiBHTVBfTlVNQl9CSVRTIDwgNTAKKyNkZWZpbmUgUE9XTV9TRUNfVEFCTEUgIDIsMzMsOTYsNzgwLDI3NDEKKyNlbHNlCisjZGVmaW5lIFBPV01fU0VDX1RBQkxFICAyLDEzMCw1MjQsMjU3OAorI2VuZGlmCisjZW5kaWYKKworI2lmIFRVTkVfUFJPR1JBTV9CVUlMRAorZXh0ZXJuIGludCB3aW5fc2l6ZSAobXBfYml0Y250X3QpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50Cit3aW5fc2l6ZSAobXBfYml0Y250X3QgZW5iKQoreworICBpbnQgazsKKyAgLyogRmluZCBrLCBzdWNoIHRoYXQgeFtrLTFdIDwgZW5iIDw9IHhba10uCisKKyAgICAgV2UgcmVxdWlyZSB0aGF0IHhba10gPj0gaywgdGhlbiBpdCBmb2xsb3dzIHRoYXQgZW5iID4geFtrLTFdID49CisgICAgIGstMSwgd2hpY2ggaW1wbGllcyBrIDw9IGVuYi4KKyAgKi8KKyAgc3RhdGljIGNvbnN0IG1wX2JpdGNudF90IHhbXSA9IHswLFBPV01fU0VDX1RBQkxFLH4obXBfYml0Y250X3QpMH07CisgIGZvciAoayA9IDE7IGVuYiA+IHhba107IGsrKykKKyAgICA7CisgIEFTU0VSVCAoayA8PSBlbmIpOworICByZXR1cm4gazsKK30KKyNlbmRpZgorCisvKiBDb252ZXJ0IFUgdG8gUkVEQyBmb3JtLCBVX3IgPSBCXm4gKiBVIG1vZCBNLgorICAgVXNlcyBzY3JhdGNoIHNwYWNlIGF0IHRwIG9mIHNpemUgMnVuICsgbiArIDEuICAqLworc3RhdGljIHZvaWQKK3JlZGNpZnkgKG1wX3B0ciBycCwgbXBfc3JjcHRyIHVwLCBtcF9zaXplX3QgdW4sIG1wX3NyY3B0ciBtcCwgbXBfc2l6ZV90IG4sIG1wX3B0ciB0cCkKK3sKKyAgTVBOX1pFUk8gKHRwLCBuKTsKKyAgTVBOX0NPUFkgKHRwICsgbiwgdXAsIHVuKTsKKworICBtcG5fc2VjX2Rpdl9yICh0cCwgdW4gKyBuLCBtcCwgbiwgdHAgKyB1biArIG4pOworICBNUE5fQ09QWSAocnAsIHRwLCBuKTsKK30KKworLyoge3JwLCBufSA8LS0ge2JwLCBibn0gXiB7ZXAsIGVufSBtb2Qge21wLCBufSwKKyAgIHdoZXJlIGVuID0gY2VpbCAoZW5iIC8gR01QX05VTUJfQklUUykKKyAgIFJlcXVpcmVzIHRoYXQge21wLCBufSBpcyBvZGQgKGFuZCBoZW5jZSBhbHNvIG1wWzBdIG9kZCkuCisgICBVc2VzIHNjcmF0Y2ggc3BhY2UgYXQgdHAgYXMgZGVmaW5lZCBieSBtcG5fc2VjX3Bvd21faXRjaC4gICovCit2b2lkCittcG5fc2VjX3Bvd20gKG1wX3B0ciBycCwgbXBfc3JjcHRyIGJwLCBtcF9zaXplX3QgYm4sCisJICAgICAgbXBfc3JjcHRyIGVwLCBtcF9iaXRjbnRfdCBlbmIsCisJICAgICAgbXBfc3JjcHRyIG1wLCBtcF9zaXplX3QgbiwgbXBfcHRyIHRwKQoreworICBtcF9saW1iX3QgaXBbMl0sICptaXA7CisgIGludCB3aW5kb3dzaXplLCB0aGlzX3dpbmRvd3NpemU7CisgIG1wX2xpbWJfdCBleHBiaXRzOworICBtcF9wdHIgcHAsIHRoaXNfcHAsIHBzOworICBsb25nIGk7CisgIGludCBjbmQ7CisKKyAgQVNTRVJUIChlbmIgPiAwKTsKKyAgQVNTRVJUIChuID4gMCk7CisgIC8qIFRoZSBjb2RlIHdvcmtzIGZvciBibiA9IDAsIGJ1dCB0aGUgZGVmaW5lZCBzY3JhdGNoIHNwYWNlIGlzIDIgbGltYnMKKyAgICAgZ3JlYXRlciB0aGFuIHdlIHN1cHBseSwgd2hlbiBjb252ZXJ0aW5nIDEgdG8gcmVkYyBmb3JtIC4gICovCisgIEFTU0VSVCAoYm4gPiAwKTsKKyAgQVNTRVJUICgobXBbMF0gJiAxKSAhPSAwKTsKKworICB3aW5kb3dzaXplID0gd2luX3NpemUgKGVuYik7CisKKyAgaWYgKEJFTE9XX1RIUkVTSE9MRCAobiwgUkVEQ18xX1RPX1JFRENfMl9USFJFU0hPTEQpKQorICAgIHsKKyAgICAgIG1pcCA9IGlwOworICAgICAgYmludmVydF9saW1iIChtaXBbMF0sIG1wWzBdKTsKKyAgICAgIG1pcFswXSA9IC1taXBbMF07CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgbWlwID0gaXA7CisgICAgICBtcG5fYmludmVydCAobWlwLCBtcCwgMiwgdHApOworICAgICAgbWlwWzBdID0gLW1pcFswXTsgbWlwWzFdID0gfm1pcFsxXTsKKyAgICB9CisKKyAgcHAgPSB0cDsKKyAgdHAgKz0gKG4gPDwgd2luZG93c2l6ZSk7CS8qIHB1dCB0cCBhZnRlciBwb3dlciB0YWJsZSAqLworCisgIC8qIENvbXB1dGUgcHBbMF0gdGFibGUgZW50cnkgKi8KKyAgLyogc2NyYXRjaDogfCAgIG4gICB8IDEgfCAgIG4rMiAgICB8ICAqLworICAvKiAgICAgICAgICB8IHBwWzBdIHwgMSB8IHJlZGNpZnkgIHwgICovCisgIHRoaXNfcHAgPSBwcDsKKyAgdGhpc19wcFtuXSA9IDE7CisgIHJlZGNpZnkgKHRoaXNfcHAsIHRoaXNfcHAgKyBuLCAxLCBtcCwgbiwgdGhpc19wcCArIG4gKyAxKTsKKyAgdGhpc19wcCArPSBuOworCisgIC8qIENvbXB1dGUgcHBbMV0gdGFibGUgZW50cnkuICBUbyBhdm9pZCBleGNlc3NpdmUgc2NyYXRjaCB1c2FnZSBpbiB0aGUKKyAgICAgZGVnZW5lcmF0ZSBzaXR1YXRpb24gd2hlcmUgQiA+PiBNLCB3ZSBsZXQgcmVkY2lmeSB1c2Ugc2NyYXRjaCBzcGFjZSB3aGljaAorICAgICB3aWxsIGxhdGVyIGJlIHVzZWQgYnkgdGhlIHBwIHRhYmxlIChlbGVtZW50IDIgYW5kIHVwKS4gICovCisgIC8qIHNjcmF0Y2g6IHwgICBuICAgfCAgIG4gICB8ICBibiArIG4gKyAxICB8ICAqLworICAvKiAgICAgICAgICB8IHBwWzBdIHwgcHBbMV0gfCAgIHJlZGNpZnkgICAgfCAgKi8KKyAgcmVkY2lmeSAodGhpc19wcCwgYnAsIGJuLCBtcCwgbiwgdGhpc19wcCArIG4pOworCisgIC8qIFByZWNvbXB1dGUgcG93ZXJzIG9mIGIgYW5kIHB1dCB0aGVtIGluIHRoZSB0ZW1wb3JhcnkgYXJlYSBhdCBwcC4gICovCisgIC8qIHNjcmF0Y2g6IHwgICBuICAgfCAgIG4gICB8IC4uLiAgfCAgICAgICAgICAgICAgICAgICAgfCAgIDJuICAgICAgfCAgKi8KKyAgLyogICAgICAgICAgfCBwcFswXSB8IHBwWzFdIHwgLi4uICB8IHBwWzJed2luZG93c2l6ZS0xXSB8ICBwcm9kdWN0ICB8ICAqLworICBwcyA9IHBwICsgbjsJCS8qIGluaXRpYWxseSBCXjEgKi8KKyAgaWYgKEJFTE9XX1RIUkVTSE9MRCAobiwgUkVEQ18xX1RPX1JFRENfMl9USFJFU0hPTEQpKQorICAgIHsKKyAgICAgIGZvciAoaSA9ICgxIDw8IHdpbmRvd3NpemUpIC0gMjsgaSA+IDA7IGkgLT0gMikKKwl7CisJICBtcG5fbG9jYWxfc3FyICh0cCwgcHMsIG4pOworCSAgcHMgKz0gbjsKKwkgIHRoaXNfcHAgKz0gbjsKKwkgIE1QTl9SRURDXzFfU0VDICh0aGlzX3BwLCB0cCwgbXAsIG4sIG1pcFswXSk7CisKKwkgIG1wbl9tdWxfYmFzZWNhc2UgKHRwLCB0aGlzX3BwLCBuLCBwcCArIG4sIG4pOworCSAgdGhpc19wcCArPSBuOworCSAgTVBOX1JFRENfMV9TRUMgKHRoaXNfcHAsIHRwLCBtcCwgbiwgbWlwWzBdKTsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgZm9yIChpID0gKDEgPDwgd2luZG93c2l6ZSkgLSAyOyBpID4gMDsgaSAtPSAyKQorCXsKKwkgIG1wbl9sb2NhbF9zcXIgKHRwLCBwcywgbik7CisJICBwcyArPSBuOworCSAgdGhpc19wcCArPSBuOworCSAgTVBOX1JFRENfMl9TRUMgKHRoaXNfcHAsIHRwLCBtcCwgbiwgbWlwKTsKKworCSAgbXBuX211bF9iYXNlY2FzZSAodHAsIHRoaXNfcHAsIG4sIHBwICsgbiwgbik7CisJICB0aGlzX3BwICs9IG47CisJICBNUE5fUkVEQ18yX1NFQyAodGhpc19wcCwgdHAsIG1wLCBuLCBtaXApOworCX0KKyAgICB9CisKKyAgZXhwYml0cyA9IGdldGJpdHMgKGVwLCBlbmIsIHdpbmRvd3NpemUpOworICBBU1NFUlRfQUxXQVlTIChlbmIgPj0gd2luZG93c2l6ZSk7CisgIGVuYiAtPSB3aW5kb3dzaXplOworCisgIG1wbl9zZWNfdGFic2VsZWN0IChycCwgcHAsIG4sIDEgPDwgd2luZG93c2l6ZSwgZXhwYml0cyk7CisKKyAgLyogTWFpbiBleHBvbmVudGlhdGlvbiBsb29wLiAgKi8KKyAgLyogc2NyYXRjaDogfCAgIG4gICB8ICAgbiAgIHwgLi4uICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAzbi00biAgICAgfCAgKi8KKyAgLyogICAgICAgICAgfCBwcFswXSB8IHBwWzFdIHwgLi4uICB8IHBwWzJed2luZG93c2l6ZS0xXSB8ICBsb29wIHNjcmF0Y2ggfCAgKi8KKworI2RlZmluZSBJTk5FUkxPT1AJCQkJCQkJXAorICB3aGlsZSAoZW5iICE9IDApCQkJCQkJCVwKKyAgICB7CQkJCQkJCQkJXAorICAgICAgZXhwYml0cyA9IGdldGJpdHMgKGVwLCBlbmIsIHdpbmRvd3NpemUpOwkJCQlcCisgICAgICB0aGlzX3dpbmRvd3NpemUgPSB3aW5kb3dzaXplOwkJCQkJXAorICAgICAgaWYgKGVuYiA8IHdpbmRvd3NpemUpCQkJCQkJXAorCXsJCQkJCQkJCVwKKwkgIHRoaXNfd2luZG93c2l6ZSAtPSB3aW5kb3dzaXplIC0gZW5iOwkJCQlcCisJICBlbmIgPSAwOwkJCQkJCQlcCisJfQkJCQkJCQkJXAorICAgICAgZWxzZQkJCQkJCQkJXAorCWVuYiAtPSB3aW5kb3dzaXplOwkJCQkJCVwKKwkJCQkJCQkJCVwKKyAgICAgIGRvCQkJCQkJCQlcCisJewkJCQkJCQkJXAorCSAgbXBuX2xvY2FsX3NxciAodHAsIHJwLCBuKTsJCQkJCVwKKwkgIE1QTl9SRURVQ0UgKHJwLCB0cCwgbXAsIG4sIG1pcCk7CQkJCVwKKwkgIHRoaXNfd2luZG93c2l6ZS0tOwkJCQkJCVwKKwl9CQkJCQkJCQlcCisgICAgICB3aGlsZSAodGhpc193aW5kb3dzaXplICE9IDApOwkJCQkJXAorCQkJCQkJCQkJXAorICAgICAgbXBuX3NlY190YWJzZWxlY3QgKHRwICsgMipuLCBwcCwgbiwgMSA8PCB3aW5kb3dzaXplLCBleHBiaXRzKTsJXAorICAgICAgbXBuX211bF9iYXNlY2FzZSAodHAsIHJwLCBuLCB0cCArIDIqbiwgbik7CQkJXAorCQkJCQkJCQkJXAorICAgICAgTVBOX1JFRFVDRSAocnAsIHRwLCBtcCwgbiwgbWlwKTsJCQkJCVwKKyAgICB9CisKKyAgaWYgKEJFTE9XX1RIUkVTSE9MRCAobiwgUkVEQ18xX1RPX1JFRENfMl9USFJFU0hPTEQpKQorICAgIHsKKyN1bmRlZiBNUE5fUkVEVUNFCisjZGVmaW5lIE1QTl9SRURVQ0UocnAsdHAsbXAsbixtaXApCU1QTl9SRURDXzFfU0VDIChycCwgdHAsIG1wLCBuLCBtaXBbMF0pCisgICAgICBJTk5FUkxPT1A7CisgICAgfQorICBlbHNlCisgICAgeworI3VuZGVmIE1QTl9SRURVQ0UKKyNkZWZpbmUgTVBOX1JFRFVDRShycCx0cCxtcCxuLG1pcCkJTVBOX1JFRENfMl9TRUMgKHJwLCB0cCwgbXAsIG4sIG1pcCkKKyAgICAgIElOTkVSTE9PUDsKKyAgICB9CisKKyAgTVBOX0NPUFkgKHRwLCBycCwgbik7CisgIE1QTl9aRVJPICh0cCArIG4sIG4pOworCisgIGlmIChCRUxPV19USFJFU0hPTEQgKG4sIFJFRENfMV9UT19SRURDXzJfVEhSRVNIT0xEKSkKKyAgICBNUE5fUkVEQ18xX1NFQyAocnAsIHRwLCBtcCwgbiwgbWlwWzBdKTsKKyAgZWxzZQorICAgIE1QTl9SRURDXzJfU0VDIChycCwgdHAsIG1wLCBuLCBtaXApOworCisgIGNuZCA9IG1wbl9zdWJfbiAodHAsIHJwLCBtcCwgbik7CS8qIHdlIG5lZWQganVzdCByZXR2YWwgKi8KKyAgbXBuX2NuZF9zdWJfbiAoIWNuZCwgcnAsIHJwLCBtcCwgbik7Cit9CisKK21wX3NpemVfdAorbXBuX3NlY19wb3dtX2l0Y2ggKG1wX3NpemVfdCBibiwgbXBfYml0Y250X3QgZW5iLCBtcF9zaXplX3QgbikKK3sKKyAgaW50IHdpbmRvd3NpemU7CisgIG1wX3NpemVfdCByZWRjaWZ5X2l0Y2gsIGl0Y2g7CisKKyAgLyogRklYTUU6IG5vIG1vcmUgX2xvY2FsL19iYXNlY2FzZSBkaWZmZXJlbmNlLiAqLworICAvKiBUaGUgdG9wIHNjcmF0Y2ggdXNhZ2Ugd2lsbCBlaXRoZXIgYmUgd2hlbiByZWR1Y2luZyBCIGluIHRoZSAybmQgcmVkY2lmeQorICAgICBjYWxsLCBvciBtb3JlIHR5cGljYWxseSBuKjJed2luZG93c2l6ZSArIDNuIG9yIDRuLCBpbiB0aGUgbWFpbiBsb29wLiAgKEl0CisgICAgIGlzIDNuIG9yIDRuIGRlcGVuZGluZyBvbiBpZiB3ZSB1c2UgbXBuX2xvY2FsX3NxciBvciBhIG5hdGl2ZQorICAgICBtcG5fc3FyX2Jhc2VjYXNlLiAgV2UgYXNzdW1lIDRuIGFsd2F5cyBmb3Igbm93LikgKi8KKworICB3aW5kb3dzaXplID0gd2luX3NpemUgKGVuYik7CisKKyAgLyogVGhlIDJuIHRlcm0gaXMgZHVlIHRvIHBwWzBdIGFuZCBwcFsxXSBhdCB0aGUgdGltZSBvZiB0aGUgMm5kIHJlZGNpZnkgY2FsbCwKKyAgICAgdGhlIChibiArIG4pIHRlcm0gaXMgZHVlIHRvIHJlZGNpZnkncyBvd24gdXNhZ2UsIGFuZCB0aGUgcmVzdCBpcyBkdWUgdG8KKyAgICAgbXBuX3NlY19kaXZfcidzIHVzYWdlIHdoZW4gY2FsbGVkIGZyb20gcmVkY2lmeS4gICovCisgIHJlZGNpZnlfaXRjaCA9ICgyICogbikgKyAoYm4gKyBuKSArICgoYm4gKyBuKSArIDIgKiBuICsgMik7CisKKyAgLyogVGhlIG4gKiAyXndpbmRvd3NpemUgdGVybSBpcyBkdWUgdG8gdGhlIHBvd2VyIHRhYmxlLCB0aGUgNG4gdGVybSBpcyBkdWUgdG8KKyAgICAgc2NyYXRjaCBuZWVkcyBvZiBzcXVhcmluZy9tdWx0aXBsaWNhdGlvbiBpbiB0aGUgZXhwb25lbnRpYXRpb24gbG9vcC4gICovCisgIGl0Y2ggPSAobiA8PCB3aW5kb3dzaXplKSArICg0ICogbik7CisKKyAgcmV0dXJuIE1BWCAoaXRjaCwgcmVkY2lmeV9pdGNoKTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9zZWNfc3FyLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvc2VjX3Nxci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZmM3ZDkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvc2VjX3Nxci5jCkBAIC0wLDAgKzEsNzYgQEAKKy8qIG1wbl9zZWNfc3FyLgorCisgICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitDb3B5cmlnaHQgMjAxMywgMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisKKyNpZiAhIEhBVkVfTkFUSVZFX21wbl9zcXJfYmFzZWNhc2UKKy8qIFRoZSBsaW1pdCBvZiB0aGUgZ2VuZXJpYyBjb2RlIGlzIFNRUl9UT09NMl9USFJFU0hPTEQuICAqLworI2RlZmluZSBTUVJfQkFTRUNBU0VfTElNICBTUVJfVE9PTTJfVEhSRVNIT0xECisjZW5kaWYKKworI2lmIEhBVkVfTkFUSVZFX21wbl9zcXJfYmFzZWNhc2UKKyNpZmRlZiBUVU5FX1NRUl9UT09NMl9NQVgKKy8qIFdlIHNsaWdodGx5IGFidXNlIFRVTkVfU1FSX1RPT00yX01BWCBoZXJlLiAgSWYgaXQgaXMgc2V0IGZvciBhbiBhc3NlbWJseQorICAgbXBuX3Nxcl9iYXNlY2FzZSwgaXQgY29tZXMgZnJvbSBTUVJfVE9PTTJfVEhSRVNIT0xEX01BWCBpbiB0aGUgYXNzZW1ibHkKKyAgIGZpbGUuICBBbiBhc3NlbWJseSBtcG5fc3FyX2Jhc2VjYXNlIHRoYXQgZG9lcyBub3QgZGVmaW5lIGl0IHNob3VsZCBhbGxvdworICAgYW55IHNpemUuICAqLworI2RlZmluZSBTUVJfQkFTRUNBU0VfTElNICBTUVJfVE9PTTJfVEhSRVNIT0xECisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgV0FOVF9GQVRfQklOQVJZCisvKiBGb3IgZmF0IGJ1aWxkcywgd2UgdXNlIFNRUl9UT09NMl9USFJFU0hPTEQgd2hpY2ggd2lsbCBleHBhbmQgdG8gYSByZWFkIGZyb20KKyAgIF9fZ21wbl9jcHV2ZWMuICBQZXJoYXBzIGFueSBwb3NzaWJsZSBzcXJfYmFzZWNhc2UuYXNtIGFsbG93IGFueSBzaXplLCBhbmQgd2UKKyAgIGxpbWl0IHRoZSB1c2UgdW5uZWNlc3NhcmlseS4gIFdlIGNhbm5vdCB0ZWxsLCBzbyBwbGF5IGl0IHNhZmUuICBGSVhNRS4gICovCisjZGVmaW5lIFNRUl9CQVNFQ0FTRV9MSU0gIFNRUl9UT09NMl9USFJFU0hPTEQKKyNlbmRpZgorCit2b2lkCittcG5fc2VjX3NxciAobXBfcHRyIHJwLAorCSAgICAgbXBfc3JjcHRyIGFwLCBtcF9zaXplX3QgYW4sCisJICAgICBtcF9wdHIgdHApCit7CisjaWZuZGVmIFNRUl9CQVNFQ0FTRV9MSU0KKy8qIElmIFNRUl9CQVNFQ0FTRV9MSU0gaXMgbm93IG5vdCBkZWZpbmVkLCB1c2UgbXBuX3Nxcl9iYXNlY2FzZSBmb3IgYW55IG9wZXJhbmQKKyAgIHNpemUuICAqLworICBtcG5fc3FyX2Jhc2VjYXNlIChycCwgYXAsIGFuKTsKKyNlbHNlCisvKiBFbHNlIHVzZSBtcG5fbXVsX2Jhc2VjYXNlLiAgKi8KKyAgbXBuX211bF9iYXNlY2FzZSAocnAsIGFwLCBhbiwgYXAsIGFuKTsKKyNlbmRpZgorfQorCittcF9zaXplX3QKK21wbl9zZWNfc3FyX2l0Y2ggKG1wX3NpemVfdCBhbikKK3sKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvc2VjX3RhYnNlbGVjdC5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3NlY190YWJzZWxlY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzY3ZTI3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3NlY190YWJzZWxlY3QuYwpAQCAtMCwwICsxLDU0IEBACisvKiBtcG5fc2VjX3RhYnNlbGVjdC4KKworQ29weXJpZ2h0IDIwMDctMjAwOSwgMjAxMSwgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisKKworLyogU2VsZWN0IGVudHJ5IGB3aGljaCcgZnJvbSB0YWJsZSBgdGFiJywgd2hpY2ggaGFzIG5lbnRzIGVudHJpZXMsIGVhY2ggYG4nCisgICBsaW1icy4gIFN0b3JlIHRoZSBzZWxlY3RlZCBlbnRyeSBhdCBycC4gIFJlYWRzIGVudGlyZSB0YWJsZSB0byBhdm9pZAorICAgc2lkZS1jaGFubmVsIGluZm9ybWF0aW9uIGxlYWtzLiAgTyhuKm5lbnRzKS4gICovCit2b2lkCittcG5fc2VjX3RhYnNlbGVjdCAodm9sYXRpbGUgbXBfbGltYl90ICpycCwgdm9sYXRpbGUgY29uc3QgbXBfbGltYl90ICp0YWIsCisJCSAgIG1wX3NpemVfdCBuLCBtcF9zaXplX3QgbmVudHMsIG1wX3NpemVfdCB3aGljaCkKK3sKKyAgbXBfc2l6ZV90IGssIGk7CisgIG1wX2xpbWJfdCBtYXNrOworICB2b2xhdGlsZSBjb25zdCBtcF9saW1iX3QgKnRwOworCisgIGZvciAoayA9IDA7IGsgPCBuZW50czsgaysrKQorICAgIHsKKyAgICAgIG1hc2sgPSAtKG1wX2xpbWJfdCkgKHdoaWNoID09IGspOworICAgICAgdHAgPSB0YWIgKyBuICogazsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJeworCSAgcnBbaV0gPSAocnBbaV0gJiB+bWFzaykgfCAodHBbaV0gJiBtYXNrKTsKKwl9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3NldF9zdHIuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9zZXRfc3RyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJkNTg0YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9zZXRfc3RyLmMKQEAgLTAsMCArMSwyOTAgQEAKKy8qIG1wbl9zZXRfc3RyIChtcF9wdHIgcmVzX3B0ciwgY29uc3QgY2hhciAqc3RyLCBzaXplX3Qgc3RyX2xlbiwgaW50IGJhc2UpIC0tCisgICBDb252ZXJ0IGEgU1RSX0xFTiBsb25nIGJhc2UgQkFTRSBieXRlIHN0cmluZyBwb2ludGVkIHRvIGJ5IFNUUiB0byBhIGxpbWIKKyAgIHZlY3RvciBwb2ludGVkIHRvIGJ5IFJFU19QVFIuICBSZXR1cm4gdGhlIG51bWJlciBvZiBsaW1icyBpbiBSRVNfUFRSLgorCisgICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisKKyAgIFRIRSBGVU5DVElPTlMgSU4gVEhJUyBGSUxFLCBFWENFUFQgbXBuX3NldF9zdHIsIEFSRSBJTlRFUk5BTCBXSVRIIE1VVEFCTEUKKyAgIElOVEVSRkFDRVMuICBJVCBJUyBPTkxZIFNBRkUgVE8gUkVBQ0ggVEhFTSBUSFJPVUdIIERPQ1VNRU5URUQgSU5URVJGQUNFUy4KKyAgIElOIEZBQ1QsIElUIElTIEFMTU9TVCBHVUFSQU5URUVEIFRIQVQgVEhFWSBXSUxMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQQorICAgRlVUVVJFIEdOVSBNUCBSRUxFQVNFLgorCitDb3B5cmlnaHQgMTk5MS0yMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisKKy8qIFRPRE86CisKKyAgICAgIFBlcmhhcHMgZG8gbm90IGNvbXB1dGUgdGhlIGhpZ2hlc3QgcG93ZXI/CisgICAgICBJbnN0ZWFkLCBtdWx0aXBseSB0d2ljZSBieSB0aGUgMm5kIGhpZ2hlc3QgcG93ZXI6CisKKwkgICAgICAgX19fX19fXworCSAgICAgIHxfX19fX19ffCAgaHAKKwkgICAgICB8X19fX19fX3wgIHBvdworICAgICAgIF9fX19fX19fX19fX19fXworICAgICAgfF9fX19fX19fX19fX19fX3wgIGZpbmFsIHJlc3VsdAorCisKKwkgICAgICAgX19fX19fXworCSAgICAgIHxfX19fX19ffCAgaHAKKwkJICB8X19ffCAgcG93Wy0xXQorCSAgIF9fX19fX19fX19fCisJICB8X19fX19fX19fX198ICBpbnRlcm1lZGlhdGUgcmVzdWx0CisJCSAgfF9fX3wgIHBvd1stMV0KKyAgICAgICBfX19fX19fX19fX19fX18KKyAgICAgIHxfX19fX19fX19fX19fX198ICBmaW5hbCByZXN1bHQKKworICAgICAgR2VuZXJhbGl6aW5nIHRoYXQgaWRlYSwgcGVyaGFwcyB3ZSBzaG91bGQgbWFrZSBwb3d0YWIgY29udGFpbiBzdWNjZXNzaXZlCisgICAgICBjdWJlcywgbm90IHNxdWFyZXMuCisqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworbXBfc2l6ZV90CittcG5fc2V0X3N0ciAobXBfcHRyIHJwLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzdHIsIHNpemVfdCBzdHJfbGVuLCBpbnQgYmFzZSkKK3sKKyAgaWYgKFBPVzJfUCAoYmFzZSkpCisgICAgeworICAgICAgLyogVGhlIGJhc2UgaXMgYSBwb3dlciBvZiAyLiAgUmVhZCB0aGUgaW5wdXQgc3RyaW5nIGZyb20gbGVhc3QgdG8gbW9zdAorCSBzaWduaWZpY2FudCBjaGFyYWN0ZXIvZGlnaXQuICAqLworCisgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzOworICAgICAgaW50IG5leHRfYml0cG9zOworICAgICAgbXBfbGltYl90IHJlc19kaWdpdDsKKyAgICAgIG1wX3NpemVfdCBzaXplOworICAgICAgaW50IGJpdHNfcGVyX2luZGlnaXQgPSBtcF9iYXNlc1tiYXNlXS5iaWdfYmFzZTsKKworICAgICAgc2l6ZSA9IDA7CisgICAgICByZXNfZGlnaXQgPSAwOworICAgICAgbmV4dF9iaXRwb3MgPSAwOworCisgICAgICBmb3IgKHMgPSBzdHIgKyBzdHJfbGVuIC0gMTsgcyA+PSBzdHI7IHMtLSkKKwl7CisJICBpbnQgaW5wX2RpZ2l0ID0gKnM7CisKKwkgIHJlc19kaWdpdCB8PSAoKG1wX2xpbWJfdCkgaW5wX2RpZ2l0IDw8IG5leHRfYml0cG9zKSAmIEdNUF9OVU1CX01BU0s7CisJICBuZXh0X2JpdHBvcyArPSBiaXRzX3Blcl9pbmRpZ2l0OworCSAgaWYgKG5leHRfYml0cG9zID49IEdNUF9OVU1CX0JJVFMpCisJICAgIHsKKwkgICAgICBycFtzaXplKytdID0gcmVzX2RpZ2l0OworCSAgICAgIG5leHRfYml0cG9zIC09IEdNUF9OVU1CX0JJVFM7CisJICAgICAgcmVzX2RpZ2l0ID0gaW5wX2RpZ2l0ID4+IChiaXRzX3Blcl9pbmRpZ2l0IC0gbmV4dF9iaXRwb3MpOworCSAgICB9CisJfQorCisgICAgICBpZiAocmVzX2RpZ2l0ICE9IDApCisJcnBbc2l6ZSsrXSA9IHJlc19kaWdpdDsKKyAgICAgIHJldHVybiBzaXplOworICAgIH0KKworICBpZiAoQkVMT1dfVEhSRVNIT0xEIChzdHJfbGVuLCBTRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEKSkKKyAgICByZXR1cm4gbXBuX2JjX3NldF9zdHIgKHJwLCBzdHIsIHN0cl9sZW4sIGJhc2UpOworICBlbHNlCisgICAgeworICAgICAgbXBfcHRyIHBvd3RhYl9tZW0sIHRwOworICAgICAgcG93ZXJzX3QgcG93dGFiW0dNUF9MSU1CX0JJVFNdOworICAgICAgaW50IGNoYXJzX3Blcl9saW1iOworICAgICAgbXBfc2l6ZV90IHNpemU7CisgICAgICBtcF9zaXplX3QgdW47CisgICAgICBUTVBfREVDTDsKKworICAgICAgVE1QX01BUks7CisKKyAgICAgIGNoYXJzX3Blcl9saW1iID0gbXBfYmFzZXNbYmFzZV0uY2hhcnNfcGVyX2xpbWI7CisKKyAgICAgIHVuID0gc3RyX2xlbiAvIGNoYXJzX3Blcl9saW1iICsgMTsgLyogRklYTUU6IHNjYWxhciBpbnRlZ2VyIGRpdmlzaW9uICovCisKKyAgICAgIC8qIEFsbG9jYXRlIG9uZSBsYXJnZSBibG9jayBmb3IgdGhlIHBvd2VycyBvZiBiaWdfYmFzZS4gICovCisgICAgICBwb3d0YWJfbWVtID0gVE1QX0JBTExPQ19MSU1CUyAobXBuX3N0cl9wb3d0YWJfYWxsb2MgKHVuKSk7CisKKyAgICAgIHNpemVfdCBuX3Bvd3MgPSBtcG5fY29tcHV0ZV9wb3d0YWIgKHBvd3RhYiwgcG93dGFiX21lbSwgdW4sIGJhc2UpOworICAgICAgcG93ZXJzX3QgKnB0ID0gcG93dGFiICsgbl9wb3dzOworCisgICAgICB0cCA9IFRNUF9CQUxMT0NfTElNQlMgKG1wbl9kY19zZXRfc3RyX2l0Y2ggKHVuKSk7CisgICAgICBzaXplID0gbXBuX2RjX3NldF9zdHIgKHJwLCBzdHIsIHN0cl9sZW4sIHB0LCB0cCk7CisKKyAgICAgIFRNUF9GUkVFOworICAgICAgcmV0dXJuIHNpemU7CisgICAgfQorfQorCittcF9zaXplX3QKK21wbl9kY19zZXRfc3RyIChtcF9wdHIgcnAsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnN0ciwgc2l6ZV90IHN0cl9sZW4sCisJCWNvbnN0IHBvd2Vyc190ICpwb3d0YWIsIG1wX3B0ciB0cCkKK3sKKyAgc2l6ZV90IGxlbl9sbywgbGVuX2hpOworICBtcF9saW1iX3QgY3k7CisgIG1wX3NpemVfdCBsbiwgaG4sIG4sIHNuOworCisgIGxlbl9sbyA9IHBvd3RhYi0+ZGlnaXRzX2luX2Jhc2U7CisKKyAgaWYgKHN0cl9sZW4gPD0gbGVuX2xvKQorICAgIHsKKyAgICAgIGlmIChCRUxPV19USFJFU0hPTEQgKHN0cl9sZW4sIFNFVF9TVFJfRENfVEhSRVNIT0xEKSkKKwlyZXR1cm4gbXBuX2JjX3NldF9zdHIgKHJwLCBzdHIsIHN0cl9sZW4sIHBvd3RhYi0+YmFzZSk7CisgICAgICBlbHNlCisJcmV0dXJuIG1wbl9kY19zZXRfc3RyIChycCwgc3RyLCBzdHJfbGVuLCBwb3d0YWIgLSAxLCB0cCk7CisgICAgfQorCisgIGxlbl9oaSA9IHN0cl9sZW4gLSBsZW5fbG87CisgIEFTU0VSVCAobGVuX2xvID49IGxlbl9oaSk7CisKKyAgaWYgKEJFTE9XX1RIUkVTSE9MRCAobGVuX2hpLCBTRVRfU1RSX0RDX1RIUkVTSE9MRCkpCisgICAgaG4gPSBtcG5fYmNfc2V0X3N0ciAodHAsIHN0ciwgbGVuX2hpLCBwb3d0YWItPmJhc2UpOworICBlbHNlCisgICAgaG4gPSBtcG5fZGNfc2V0X3N0ciAodHAsIHN0ciwgbGVuX2hpLCBwb3d0YWIgLSAxLCBycCk7CisKKyAgc24gPSBwb3d0YWItPnNoaWZ0OworCisgIGlmIChobiA9PSAwKQorICAgIHsKKyAgICAgIC8qIFplcm8gKzEgbGltYiBoZXJlLCB0byBhdm9pZCByZWFkaW5nIGFuIGFsbG9jYXRlZCBidXQgdW5pbml0aWFsaXNlZAorCSBsaW1iIGluIG1wbl9pbmNyX3UgYmVsb3cuICAqLworICAgICAgTVBOX1pFUk8gKHJwLCBwb3d0YWItPm4gKyBzbiArIDEpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChwb3d0YWItPm4gPiBobikKKwltcG5fbXVsIChycCArIHNuLCBwb3d0YWItPnAsIHBvd3RhYi0+biwgdHAsIGhuKTsKKyAgICAgIGVsc2UKKwltcG5fbXVsIChycCArIHNuLCB0cCwgaG4sIHBvd3RhYi0+cCwgcG93dGFiLT5uKTsKKyAgICAgIE1QTl9aRVJPIChycCwgc24pOworICAgIH0KKworICBzdHIgPSBzdHIgKyBzdHJfbGVuIC0gbGVuX2xvOworICBpZiAoQkVMT1dfVEhSRVNIT0xEIChsZW5fbG8sIFNFVF9TVFJfRENfVEhSRVNIT0xEKSkKKyAgICBsbiA9IG1wbl9iY19zZXRfc3RyICh0cCwgc3RyLCBsZW5fbG8sIHBvd3RhYi0+YmFzZSk7CisgIGVsc2UKKyAgICBsbiA9IG1wbl9kY19zZXRfc3RyICh0cCwgc3RyLCBsZW5fbG8sIHBvd3RhYiAtIDEsIHRwICsgcG93dGFiLT5uICsgc24gKyAxKTsKKworICBpZiAobG4gIT0gMCkKKyAgICB7CisgICAgICBjeSA9IG1wbl9hZGRfbiAocnAsIHJwLCB0cCwgbG4pOworICAgICAgbXBuX2luY3JfdSAocnAgKyBsbiwgY3kpOworICAgIH0KKyAgbiA9IGhuICsgcG93dGFiLT5uICsgc247CisgIHJldHVybiBuIC0gKHJwW24gLSAxXSA9PSAwKTsKK30KKworbXBfc2l6ZV90CittcG5fYmNfc2V0X3N0ciAobXBfcHRyIHJwLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzdHIsIHNpemVfdCBzdHJfbGVuLCBpbnQgYmFzZSkKK3sKKyAgbXBfc2l6ZV90IHNpemU7CisgIHNpemVfdCBpOworICBsb25nIGo7CisgIG1wX2xpbWJfdCBjeV9saW1iOworCisgIG1wX2xpbWJfdCBiaWdfYmFzZTsKKyAgaW50IGNoYXJzX3Blcl9saW1iOworICBtcF9saW1iX3QgcmVzX2RpZ2l0OworCisgIEFTU0VSVCAoYmFzZSA+PSAyKTsKKyAgQVNTRVJUIChiYXNlIDwgbnVtYmVyb2YgKG1wX2Jhc2VzKSk7CisgIEFTU0VSVCAoc3RyX2xlbiA+PSAxKTsKKworICBiaWdfYmFzZSA9IG1wX2Jhc2VzW2Jhc2VdLmJpZ19iYXNlOworICBjaGFyc19wZXJfbGltYiA9IG1wX2Jhc2VzW2Jhc2VdLmNoYXJzX3Blcl9saW1iOworCisgIHNpemUgPSAwOworICBmb3IgKGkgPSBjaGFyc19wZXJfbGltYjsgaSA8IHN0cl9sZW47IGkgKz0gY2hhcnNfcGVyX2xpbWIpCisgICAgeworICAgICAgcmVzX2RpZ2l0ID0gKnN0cisrOworICAgICAgaWYgKGJhc2UgPT0gMTApCisJeyAvKiBUaGlzIGlzIGEgY29tbW9uIGNhc2UuCisJICAgICBIZWxwIHRoZSBjb21waWxlciB0byBhdm9pZCBtdWx0aXBsaWNhdGlvbi4gICovCisJICBmb3IgKGogPSBNUF9CQVNFU19DSEFSU19QRVJfTElNQl8xMCAtIDE7IGogIT0gMDsgai0tKQorCSAgICByZXNfZGlnaXQgPSByZXNfZGlnaXQgKiAxMCArICpzdHIrKzsKKwl9CisgICAgICBlbHNlCisJeworCSAgZm9yIChqID0gY2hhcnNfcGVyX2xpbWIgLSAxOyBqICE9IDA7IGotLSkKKwkgICAgcmVzX2RpZ2l0ID0gcmVzX2RpZ2l0ICogYmFzZSArICpzdHIrKzsKKwl9CisKKyAgICAgIGlmIChzaXplID09IDApCisJeworCSAgaWYgKHJlc19kaWdpdCAhPSAwKQorCSAgICB7CisJICAgICAgcnBbMF0gPSByZXNfZGlnaXQ7CisJICAgICAgc2l6ZSA9IDE7CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJeworI2lmIEhBVkVfTkFUSVZFX21wbl9tdWxfMWMKKwkgIGN5X2xpbWIgPSBtcG5fbXVsXzFjIChycCwgcnAsIHNpemUsIGJpZ19iYXNlLCByZXNfZGlnaXQpOworI2Vsc2UKKwkgIGN5X2xpbWIgPSBtcG5fbXVsXzEgKHJwLCBycCwgc2l6ZSwgYmlnX2Jhc2UpOworCSAgY3lfbGltYiArPSBtcG5fYWRkXzEgKHJwLCBycCwgc2l6ZSwgcmVzX2RpZ2l0KTsKKyNlbmRpZgorCSAgaWYgKGN5X2xpbWIgIT0gMCkKKwkgICAgcnBbc2l6ZSsrXSA9IGN5X2xpbWI7CisJfQorICAgIH0KKworICBiaWdfYmFzZSA9IGJhc2U7CisgIHJlc19kaWdpdCA9ICpzdHIrKzsKKyAgaWYgKGJhc2UgPT0gMTApCisgICAgeyAvKiBUaGlzIGlzIGEgY29tbW9uIGNhc2UuCisJIEhlbHAgdGhlIGNvbXBpbGVyIHRvIGF2b2lkIG11bHRpcGxpY2F0aW9uLiAgKi8KKyAgICAgIGZvciAoaiA9IHN0cl9sZW4gLSAoaSAtIE1QX0JBU0VTX0NIQVJTX1BFUl9MSU1CXzEwKSAtIDE7IGogPiAwOyBqLS0pCisJeworCSAgcmVzX2RpZ2l0ID0gcmVzX2RpZ2l0ICogMTAgKyAqc3RyKys7CisJICBiaWdfYmFzZSAqPSAxMDsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgZm9yIChqID0gc3RyX2xlbiAtIChpIC0gY2hhcnNfcGVyX2xpbWIpIC0gMTsgaiA+IDA7IGotLSkKKwl7CisJICByZXNfZGlnaXQgPSByZXNfZGlnaXQgKiBiYXNlICsgKnN0cisrOworCSAgYmlnX2Jhc2UgKj0gYmFzZTsKKwl9CisgICAgfQorCisgIGlmIChzaXplID09IDApCisgICAgeworICAgICAgaWYgKHJlc19kaWdpdCAhPSAwKQorCXsKKwkgIHJwWzBdID0gcmVzX2RpZ2l0OworCSAgc2l6ZSA9IDE7CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyNpZiBIQVZFX05BVElWRV9tcG5fbXVsXzFjCisgICAgICBjeV9saW1iID0gbXBuX211bF8xYyAocnAsIHJwLCBzaXplLCBiaWdfYmFzZSwgcmVzX2RpZ2l0KTsKKyNlbHNlCisgICAgICBjeV9saW1iID0gbXBuX211bF8xIChycCwgcnAsIHNpemUsIGJpZ19iYXNlKTsKKyAgICAgIGN5X2xpbWIgKz0gbXBuX2FkZF8xIChycCwgcnAsIHNpemUsIHJlc19kaWdpdCk7CisjZW5kaWYKKyAgICAgIGlmIChjeV9saW1iICE9IDApCisJcnBbc2l6ZSsrXSA9IGN5X2xpbWI7CisgICAgfQorICByZXR1cm4gc2l6ZTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9zaXplaW5iYXNlLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvc2l6ZWluYmFzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZWU5NDcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvc2l6ZWluYmFzZS5jCkBAIC0wLDAgKzEsNDkgQEAKKy8qIG1wbl9zaXplaW5iYXNlIC0tIGFwcHJveGltYXRpb24gdG8gY2hhcnMgcmVxdWlyZWQgZm9yIGFuIG1wbi4KKworICAgVEhFIEZVTkNUSU9OUyBJTiBUSElTIEZJTEUgQVJFIEZPUiBJTlRFUk5BTCBVU0UgT05MWS4gIFRIRVknUkUgQUxNT1NUCisgICBDRVJUQUlOIFRPIEJFIFNVQkpFQ1QgVE8gSU5DT01QQVRJQkxFIENIQU5HRVMgT1IgRElTQVBQRUFSIENPTVBMRVRFTFkgSU4KKyAgIEZVVFVSRSBHTlUgTVAgUkVMRUFTRVMuCisKK0NvcHlyaWdodCAxOTkxLCAxOTkzLTE5OTUsIDIwMDEsIDIwMDIsIDIwMTEsIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKyNpbmNsdWRlICJsb25nbG9uZy5oIgorCisKKy8qIFNhbWUgYXMgbXB6X3NpemVpbmJhc2UsIG1lYW5pbmcgZXhhY3QgZm9yIHBvd2VyLW9mLTIgYmFzZXMsIGFuZCBlaXRoZXIKKyAgIGV4YWN0IG9yIDEgdG9vIGJpZyBmb3Igb3RoZXIgYmFzZXMuICAqLworCitzaXplX3QKK21wbl9zaXplaW5iYXNlIChtcF9zcmNwdHIgeHAsIG1wX3NpemVfdCB4c2l6ZSwgaW50IGJhc2UpCit7CisgIHNpemVfdCAgcmVzdWx0OworICBNUE5fU0laRUlOQkFTRSAocmVzdWx0LCB4cCwgeHNpemUsIGJhc2UpOworICByZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Nxci5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Nxci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ZmJmZjAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvc3FyLmMKQEAgLTAsMCArMSw5OCBAQAorLyogbXBuX3NxciAtLSBzcXVhcmUgbmF0dXJhbCBudW1iZXJzLgorCitDb3B5cmlnaHQgMTk5MSwgMTk5MywgMTk5NCwgMTk5Ni0yMDAzLCAyMDA1LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisjaW5jbHVkZSAibG9uZ2xvbmcuaCIKKwordm9pZAorbXBuX3NxciAobXBfcHRyIHAsIG1wX3NyY3B0ciBhLCBtcF9zaXplX3QgbikKK3sKKyAgQVNTRVJUIChuID49IDEpOworICBBU1NFUlQgKCEgTVBOX09WRVJMQVBfUCAocCwgMiAqIG4sIGEsIG4pKTsKKworICBpZiAoQkVMT1dfVEhSRVNIT0xEIChuLCBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEKSkKKyAgICB7IC8qIG11bF9iYXNlY2FzZSBpcyBmYXN0ZXIgdGhhbiBzcXJfYmFzZWNhc2Ugb24gc21hbGwgc2l6ZXMgc29tZXRpbWVzICovCisgICAgICBtcG5fbXVsX2Jhc2VjYXNlIChwLCBhLCBuLCBhLCBuKTsKKyAgICB9CisgIGVsc2UgaWYgKEJFTE9XX1RIUkVTSE9MRCAobiwgU1FSX1RPT00yX1RIUkVTSE9MRCkpCisgICAgeworICAgICAgbXBuX3Nxcl9iYXNlY2FzZSAocCwgYSwgbik7CisgICAgfQorICBlbHNlIGlmIChCRUxPV19USFJFU0hPTEQgKG4sIFNRUl9UT09NM19USFJFU0hPTEQpKQorICAgIHsKKyAgICAgIC8qIEFsbG9jYXRlIHdvcmtzcGFjZSBvZiBmaXhlZCBzaXplIG9uIHN0YWNrOiBmYXN0ISAqLworICAgICAgbXBfbGltYl90IHdzW21wbl90b29tMl9zcXJfaXRjaCAoU1FSX1RPT00zX1RIUkVTSE9MRF9MSU1JVC0xKV07CisgICAgICBBU1NFUlQgKFNRUl9UT09NM19USFJFU0hPTEQgPD0gU1FSX1RPT00zX1RIUkVTSE9MRF9MSU1JVCk7CisgICAgICBtcG5fdG9vbTJfc3FyIChwLCBhLCBuLCB3cyk7CisgICAgfQorICBlbHNlIGlmIChCRUxPV19USFJFU0hPTEQgKG4sIFNRUl9UT09NNF9USFJFU0hPTEQpKQorICAgIHsKKyAgICAgIG1wX3B0ciB3czsKKyAgICAgIFRNUF9TREVDTDsKKyAgICAgIFRNUF9TTUFSSzsKKyAgICAgIHdzID0gVE1QX1NBTExPQ19MSU1CUyAobXBuX3Rvb20zX3Nxcl9pdGNoIChuKSk7CisgICAgICBtcG5fdG9vbTNfc3FyIChwLCBhLCBuLCB3cyk7CisgICAgICBUTVBfU0ZSRUU7CisgICAgfQorICBlbHNlIGlmIChCRUxPV19USFJFU0hPTEQgKG4sIFNRUl9UT09NNl9USFJFU0hPTEQpKQorICAgIHsKKyAgICAgIG1wX3B0ciB3czsKKyAgICAgIFRNUF9TREVDTDsKKyAgICAgIFRNUF9TTUFSSzsKKyAgICAgIHdzID0gVE1QX1NBTExPQ19MSU1CUyAobXBuX3Rvb200X3Nxcl9pdGNoIChuKSk7CisgICAgICBtcG5fdG9vbTRfc3FyIChwLCBhLCBuLCB3cyk7CisgICAgICBUTVBfU0ZSRUU7CisgICAgfQorICBlbHNlIGlmIChCRUxPV19USFJFU0hPTEQgKG4sIFNRUl9UT09NOF9USFJFU0hPTEQpKQorICAgIHsKKyAgICAgIG1wX3B0ciB3czsKKyAgICAgIFRNUF9TREVDTDsKKyAgICAgIFRNUF9TTUFSSzsKKyAgICAgIHdzID0gVE1QX1NBTExPQ19MSU1CUyAobXBuX3Rvb202X3Nxcl9pdGNoIChuKSk7CisgICAgICBtcG5fdG9vbTZfc3FyIChwLCBhLCBuLCB3cyk7CisgICAgICBUTVBfU0ZSRUU7CisgICAgfQorICBlbHNlIGlmIChCRUxPV19USFJFU0hPTEQgKG4sIFNRUl9GRlRfVEhSRVNIT0xEKSkKKyAgICB7CisgICAgICBtcF9wdHIgd3M7CisgICAgICBUTVBfREVDTDsKKyAgICAgIFRNUF9NQVJLOworICAgICAgd3MgPSBUTVBfQUxMT0NfTElNQlMgKG1wbl90b29tOF9zcXJfaXRjaCAobikpOworICAgICAgbXBuX3Rvb204X3NxciAocCwgYSwgbiwgd3MpOworICAgICAgVE1QX0ZSRUU7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogVGhlIGN1cnJlbnQgRkZUIGNvZGUgYWxsb2NhdGVzIGl0cyBvd24gc3BhY2UuICBUaGF0IHNob3VsZCBwcm9iYWJseQorCSBjaGFuZ2UuICAqLworICAgICAgbXBuX2ZmdF9tdWwgKHAsIGEsIG4sIGEsIG4pOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9zcXJfYmFzZWNhc2UuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9zcXJfYmFzZWNhc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjQ1YmFkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Nxcl9iYXNlY2FzZS5jCkBAIC0wLDAgKzEsMzYxIEBACisvKiBtcG5fc3FyX2Jhc2VjYXNlIC0tIEludGVybmFsIHJvdXRpbmUgdG8gc3F1YXJlIGEgbmF0dXJhbCBudW1iZXIKKyAgIG9mIGxlbmd0aCBuLgorCisgICBUSElTIElTIEFOIElOVEVSTkFMIEZVTkNUSU9OIFdJVEggQSBNVVRBQkxFIElOVEVSRkFDRS4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggVEhJUyBGVU5DVElPTiBUSFJPVUdIIERPQ1VNRU5URUQgSU5URVJGQUNFUy4KKworCitDb3B5cmlnaHQgMTk5MS0xOTk0LCAxOTk2LCAxOTk3LCAyMDAwLTIwMDUsIDIwMDgsIDIwMTAsIDIwMTEsIDIwMTcgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKyNpbmNsdWRlICJsb25nbG9uZy5oIgorCisKKyNpZiBIQVZFX05BVElWRV9tcG5fc3FyX2RpYWdvbmFsCisjZGVmaW5lIE1QTl9TUVJfRElBR09OQUwocnAsIHVwLCBuKQkJCQkJXAorICBtcG5fc3FyX2RpYWdvbmFsIChycCwgdXAsIG4pCisjZWxzZQorI2RlZmluZSBNUE5fU1FSX0RJQUdPTkFMKHJwLCB1cCwgbikJCQkJCVwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBtcF9zaXplX3QgX2k7CQkJCQkJCVwKKyAgICBmb3IgKF9pID0gMDsgX2kgPCAobik7IF9pKyspCQkJCQlcCisgICAgICB7CQkJCQkJCQkJXAorCW1wX2xpbWJfdCB1bCwgbHBsOwkJCQkJCVwKKwl1bCA9ICh1cClbX2ldOwkJCQkJCQlcCisJdW11bF9wcG1tICgocnApWzIgKiBfaSArIDFdLCBscGwsIHVsLCB1bCA8PCBHTVBfTkFJTF9CSVRTKTsJXAorCShycClbMiAqIF9pXSA9IGxwbCA+PiBHTVBfTkFJTF9CSVRTOwkJCQlcCisgICAgICB9CQkJCQkJCQkJXAorICB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZiBIQVZFX05BVElWRV9tcG5fc3FyX2RpYWdfYWRkbHNoMQorI2RlZmluZSBNUE5fU1FSX0RJQUdfQURETFNIMShycCwgdHAsIHVwLCBuKQkJCQlcCisgIG1wbl9zcXJfZGlhZ19hZGRsc2gxIChycCwgdHAsIHVwLCBuKQorI2Vsc2UKKyNpZiBIQVZFX05BVElWRV9tcG5fYWRkbHNoMV9uCisjZGVmaW5lIE1QTl9TUVJfRElBR19BRERMU0gxKHJwLCB0cCwgdXAsIG4pCQkJCVwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBtcF9saW1iX3QgY3k7CQkJCQkJCVwKKyAgICBNUE5fU1FSX0RJQUdPTkFMIChycCwgdXAsIG4pOwkJCQkJXAorICAgIGN5ID0gbXBuX2FkZGxzaDFfbiAocnAgKyAxLCBycCArIDEsIHRwLCAyICogbiAtIDIpOwkJCVwKKyAgICBycFsyICogbiAtIDFdICs9IGN5OwkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIE1QTl9TUVJfRElBR19BRERMU0gxKHJwLCB0cCwgdXAsIG4pCQkJCVwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBtcF9saW1iX3QgY3k7CQkJCQkJCVwKKyAgICBNUE5fU1FSX0RJQUdPTkFMIChycCwgdXAsIG4pOwkJCQkJXAorICAgIGN5ID0gbXBuX2xzaGlmdCAodHAsIHRwLCAyICogbiAtIDIsIDEpOwkJCQlcCisgICAgY3kgKz0gbXBuX2FkZF9uIChycCArIDEsIHJwICsgMSwgdHAsIDIgKiBuIC0gMik7CQkJXAorICAgIHJwWzIgKiBuIC0gMV0gKz0gY3k7CQkJCQkJXAorICB9IHdoaWxlICgwKQorI2VuZGlmCisjZW5kaWYKKworCisjdW5kZWYgUkVBRFlfV0lUSF9tcG5fc3FyX2Jhc2VjYXNlCisKKworI2lmICEgZGVmaW5lZCAoUkVBRFlfV0lUSF9tcG5fc3FyX2Jhc2VjYXNlKSAmJiBIQVZFX05BVElWRV9tcG5fYWRkbXVsXzJzCit2b2lkCittcG5fc3FyX2Jhc2VjYXNlIChtcF9wdHIgcnAsIG1wX3NyY3B0ciB1cCwgbXBfc2l6ZV90IG4pCit7CisgIG1wX3NpemVfdCBpOworICBtcF9saW1iX3QgdGFyclsyICogU1FSX1RPT00yX1RIUkVTSE9MRF07CisgIG1wX3B0ciB0cCA9IHRhcnI7CisgIG1wX2xpbWJfdCBjeTsKKworICAvKiBtdXN0IGZpdCAyKm4gbGltYnMgaW4gdGFyciAqLworICBBU1NFUlQgKG4gPD0gU1FSX1RPT00yX1RIUkVTSE9MRCk7CisKKyAgaWYgKChuICYgMSkgIT0gMCkKKyAgICB7CisgICAgICBpZiAobiA9PSAxKQorCXsKKwkgIG1wX2xpbWJfdCB1bCwgbHBsOworCSAgdWwgPSB1cFswXTsKKwkgIHVtdWxfcHBtbSAocnBbMV0sIGxwbCwgdWwsIHVsIDw8IEdNUF9OQUlMX0JJVFMpOworCSAgcnBbMF0gPSBscGwgPj4gR01QX05BSUxfQklUUzsKKwkgIHJldHVybjsKKwl9CisKKyAgICAgIE1QTl9aRVJPICh0cCwgbik7CisKKyAgICAgIGZvciAoaSA9IDA7IGkgPD0gbiAtIDI7IGkgKz0gMikKKwl7CisJICBjeSA9IG1wbl9hZGRtdWxfMnMgKHRwICsgMiAqIGksIHVwICsgaSArIDEsIG4gLSAoaSArIDEpLCB1cCArIGkpOworCSAgdHBbbiArIGldID0gY3k7CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChuID09IDIpCisJeworI2lmIEhBVkVfTkFUSVZFX21wbl9tdWxfMgorCSAgcnBbM10gPSBtcG5fbXVsXzIgKHJwLCB1cCwgMiwgdXApOworI2Vsc2UKKwkgIHJwWzBdID0gMDsKKwkgIHJwWzFdID0gMDsKKwkgIHJwWzNdID0gbXBuX2FkZG11bF8yIChycCwgdXAsIDIsIHVwKTsKKyNlbmRpZgorCSAgcmV0dXJuOworCX0KKworICAgICAgTVBOX1pFUk8gKHRwLCBuKTsKKworICAgICAgZm9yIChpID0gMDsgaSA8PSBuIC0gNDsgaSArPSAyKQorCXsKKwkgIGN5ID0gbXBuX2FkZG11bF8ycyAodHAgKyAyICogaSwgdXAgKyBpICsgMSwgbiAtIChpICsgMSksIHVwICsgaSk7CisJICB0cFtuICsgaV0gPSBjeTsKKwl9CisgICAgICBjeSA9IG1wbl9hZGRtdWxfMSAodHAgKyAyICogbiAtIDQsIHVwICsgbiAtIDEsIDEsIHVwW24gLSAyXSk7CisgICAgICB0cFsyICogbiAtIDNdID0gY3k7CisgICAgfQorCisgIE1QTl9TUVJfRElBR19BRERMU0gxIChycCwgdHAsIHVwLCBuKTsKK30KKyNkZWZpbmUgUkVBRFlfV0lUSF9tcG5fc3FyX2Jhc2VjYXNlCisjZW5kaWYKKworCisjaWYgISBkZWZpbmVkIChSRUFEWV9XSVRIX21wbl9zcXJfYmFzZWNhc2UpICYmIEhBVkVfTkFUSVZFX21wbl9hZGRtdWxfMgorCisvKiBtcG5fc3FyX2Jhc2VjYXNlIHVzaW5nIHBsYWluIG1wbl9hZGRtdWxfMi4KKworICAgVGhpcyBpcyB0cmlja3ksIHNpbmNlIHdlIGhhdmUgdG8gbGV0IG1wbl9hZGRtdWxfMiBtYWtlIHNvbWUgdW5kZXNpcmFibGUKKyAgIG11bHRpcGxpZXMsIHVba10qdVtrXSwgdGhhdCB3ZSB3b3VsZCBsaWtlIHRvIGxldCBtcG5fc3FyX2RpYWdvbmFsIGhhbmRsZS4KKyAgIFRoaXMgZm9yY2VzIHVzIHRvIGNvbmRpdGlvbmFsbHkgYWRkIG9yIHN1YnRyYWN0IHRoZSBtcG5fc3FyX2RpYWdvbmFsCisgICByZXN1bHRzLiAgRXhhbXBsZXMgb2YgdGhlIHByb2R1Y3Qgd2UgZm9ybToKKworICAgbiA9IDQgICAgICAgICAgICAgIG4gPSA1CQluID0gNgorICAgdTF1MCAqIHUzdTJ1MSAgICAgIHUxdTAgKiB1NHUzdTJ1MQl1MXUwICogdTV1NHUzdTJ1MQorICAgdTIgKiB1MwkgICAgICB1M3UyICogdTR1Mwl1M3UyICogdTV1NHUzCisJCQkJCXU0ICogdTUKKyAgIGFkZDogdTAgdTIgdTMgICAgICBhZGQ6IHUwIHUyIHU0CWFkZDogdTAgdTIgdTQgdTUKKyAgIHN1YjogdTEJICAgICAgc3ViOiB1MSB1MwlzdWI6IHUxIHUzCisqLworCit2b2lkCittcG5fc3FyX2Jhc2VjYXNlIChtcF9wdHIgcnAsIG1wX3NyY3B0ciB1cCwgbXBfc2l6ZV90IG4pCit7CisgIG1wX3NpemVfdCBpOworICBtcF9saW1iX3QgdGFyclsyICogU1FSX1RPT00yX1RIUkVTSE9MRF07CisgIG1wX3B0ciB0cCA9IHRhcnI7CisgIG1wX2xpbWJfdCBjeTsKKworICAvKiBtdXN0IGZpdCAyKm4gbGltYnMgaW4gdGFyciAqLworICBBU1NFUlQgKG4gPD0gU1FSX1RPT00yX1RIUkVTSE9MRCk7CisKKyAgaWYgKChuICYgMSkgIT0gMCkKKyAgICB7CisgICAgICBtcF9saW1iX3QgeDAsIHgxOworCisgICAgICBpZiAobiA9PSAxKQorCXsKKwkgIG1wX2xpbWJfdCB1bCwgbHBsOworCSAgdWwgPSB1cFswXTsKKwkgIHVtdWxfcHBtbSAocnBbMV0sIGxwbCwgdWwsIHVsIDw8IEdNUF9OQUlMX0JJVFMpOworCSAgcnBbMF0gPSBscGwgPj4gR01QX05BSUxfQklUUzsKKwkgIHJldHVybjsKKwl9CisKKyAgICAgIC8qIFRoZSBjb2RlIGJlbG93IGRvZXNuJ3QgbGlrZSB1bm5vcm1hbGl6ZWQgb3BlcmFuZHMuICBTaW5jZSBzdWNoCisJIG9wZXJhbmRzIGFyZSB1bnVzdWFsLCBoYW5kbGUgdGhlbSB3aXRoIGEgZHVtYiByZWN1cnNpb24uICAqLworICAgICAgaWYgKHVwW24gLSAxXSA9PSAwKQorCXsKKwkgIHJwWzIgKiBuIC0gMl0gPSAwOworCSAgcnBbMiAqIG4gLSAxXSA9IDA7CisJICBtcG5fc3FyX2Jhc2VjYXNlIChycCwgdXAsIG4gLSAxKTsKKwkgIHJldHVybjsKKwl9CisKKyAgICAgIE1QTl9aRVJPICh0cCwgbik7CisKKyAgICAgIGZvciAoaSA9IDA7IGkgPD0gbiAtIDI7IGkgKz0gMikKKwl7CisJICBjeSA9IG1wbl9hZGRtdWxfMiAodHAgKyAyICogaSwgdXAgKyBpICsgMSwgbiAtIChpICsgMSksIHVwICsgaSk7CisJICB0cFtuICsgaV0gPSBjeTsKKwl9CisKKyAgICAgIE1QTl9TUVJfRElBR09OQUwgKHJwLCB1cCwgbik7CisKKyAgICAgIGZvciAoaSA9IDI7OyBpICs9IDQpCisJeworCSAgeDAgPSBycFtpICsgMF07CisJICBycFtpICsgMF0gPSAoLXgwKSAmIEdNUF9OVU1CX01BU0s7CisJICB4MSA9IHJwW2kgKyAxXTsKKwkgIHJwW2kgKyAxXSA9ICgteDEgLSAoeDAgIT0gMCkpICYgR01QX05VTUJfTUFTSzsKKwkgIF9fR01QTl9TVUJfMSAoY3ksIHJwICsgaSArIDIsIHJwICsgaSArIDIsIDIsICh4MSB8IHgwKSAhPSAwKTsKKwkgIGlmIChpICsgNCA+PSAyICogbikKKwkgICAgYnJlYWs7CisJICBtcG5faW5jcl91IChycCArIGkgKyA0LCBjeSk7CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIG1wX2xpbWJfdCB4MCwgeDE7CisKKyAgICAgIGlmIChuID09IDIpCisJeworI2lmIEhBVkVfTkFUSVZFX21wbl9tdWxfMgorCSAgcnBbM10gPSBtcG5fbXVsXzIgKHJwLCB1cCwgMiwgdXApOworI2Vsc2UKKwkgIHJwWzBdID0gMDsKKwkgIHJwWzFdID0gMDsKKwkgIHJwWzNdID0gbXBuX2FkZG11bF8yIChycCwgdXAsIDIsIHVwKTsKKyNlbmRpZgorCSAgcmV0dXJuOworCX0KKworICAgICAgLyogVGhlIGNvZGUgYmVsb3cgZG9lc24ndCBsaWtlIHVubm9ybWFsaXplZCBvcGVyYW5kcy4gIFNpbmNlIHN1Y2gKKwkgb3BlcmFuZHMgYXJlIHVudXN1YWwsIGhhbmRsZSB0aGVtIHdpdGggYSBkdW1iIHJlY3Vyc2lvbi4gICovCisgICAgICBpZiAodXBbbiAtIDFdID09IDApCisJeworCSAgcnBbMiAqIG4gLSAyXSA9IDA7CisJICBycFsyICogbiAtIDFdID0gMDsKKwkgIG1wbl9zcXJfYmFzZWNhc2UgKHJwLCB1cCwgbiAtIDEpOworCSAgcmV0dXJuOworCX0KKworICAgICAgTVBOX1pFUk8gKHRwLCBuKTsKKworICAgICAgZm9yIChpID0gMDsgaSA8PSBuIC0gNDsgaSArPSAyKQorCXsKKwkgIGN5ID0gbXBuX2FkZG11bF8yICh0cCArIDIgKiBpLCB1cCArIGkgKyAxLCBuIC0gKGkgKyAxKSwgdXAgKyBpKTsKKwkgIHRwW24gKyBpXSA9IGN5OworCX0KKyAgICAgIGN5ID0gbXBuX2FkZG11bF8xICh0cCArIDIgKiBuIC0gNCwgdXAgKyBuIC0gMSwgMSwgdXBbbiAtIDJdKTsKKyAgICAgIHRwWzIgKiBuIC0gM10gPSBjeTsKKworICAgICAgTVBOX1NRUl9ESUFHT05BTCAocnAsIHVwLCBuKTsKKworICAgICAgZm9yIChpID0gMjs7IGkgKz0gNCkKKwl7CisJICB4MCA9IHJwW2kgKyAwXTsKKwkgIHJwW2kgKyAwXSA9ICgteDApICYgR01QX05VTUJfTUFTSzsKKwkgIHgxID0gcnBbaSArIDFdOworCSAgcnBbaSArIDFdID0gKC14MSAtICh4MCAhPSAwKSkgJiBHTVBfTlVNQl9NQVNLOworCSAgaWYgKGkgKyA2ID49IDIgKiBuKQorCSAgICBicmVhazsKKwkgIF9fR01QTl9TVUJfMSAoY3ksIHJwICsgaSArIDIsIHJwICsgaSArIDIsIDIsICh4MSB8IHgwKSAhPSAwKTsKKwkgIG1wbl9pbmNyX3UgKHJwICsgaSArIDQsIGN5KTsKKwl9CisgICAgICBtcG5fZGVjcl91IChycCArIGkgKyAyLCAoeDEgfCB4MCkgIT0gMCk7CisgICAgfQorCisjaWYgSEFWRV9OQVRJVkVfbXBuX2FkZGxzaDFfbgorICBjeSA9IG1wbl9hZGRsc2gxX24gKHJwICsgMSwgcnAgKyAxLCB0cCwgMiAqIG4gLSAyKTsKKyNlbHNlCisgIGN5ID0gbXBuX2xzaGlmdCAodHAsIHRwLCAyICogbiAtIDIsIDEpOworICBjeSArPSBtcG5fYWRkX24gKHJwICsgMSwgcnAgKyAxLCB0cCwgMiAqIG4gLSAyKTsKKyNlbmRpZgorICBycFsyICogbiAtIDFdICs9IGN5OworfQorI2RlZmluZSBSRUFEWV9XSVRIX21wbl9zcXJfYmFzZWNhc2UKKyNlbmRpZgorCisKKyNpZiAhIGRlZmluZWQgKFJFQURZX1dJVEhfbXBuX3Nxcl9iYXNlY2FzZSkgJiYgSEFWRV9OQVRJVkVfbXBuX3Nxcl9kaWFnX2FkZGxzaDEKKworLyogbXBuX3Nxcl9iYXNlY2FzZSB1c2luZyBtcG5fYWRkbXVsXzEgYW5kIG1wbl9zcXJfZGlhZ19hZGRsc2gxLCBhdm9pZGluZyBzdGFjaworICAgYWxsb2NhdGlvbi4gICovCit2b2lkCittcG5fc3FyX2Jhc2VjYXNlIChtcF9wdHIgcnAsIG1wX3NyY3B0ciB1cCwgbXBfc2l6ZV90IG4pCit7CisgIGlmIChuID09IDEpCisgICAgeworICAgICAgbXBfbGltYl90IHVsLCBscGw7CisgICAgICB1bCA9IHVwWzBdOworICAgICAgdW11bF9wcG1tIChycFsxXSwgbHBsLCB1bCwgdWwgPDwgR01QX05BSUxfQklUUyk7CisgICAgICBycFswXSA9IGxwbCA+PiBHTVBfTkFJTF9CSVRTOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIG1wX3NpemVfdCBpOworICAgICAgbXBfcHRyIHhwOworCisgICAgICBycCArPSAxOworICAgICAgcnBbbiAtIDFdID0gbXBuX211bF8xIChycCwgdXAgKyAxLCBuIC0gMSwgdXBbMF0pOworICAgICAgZm9yIChpID0gbiAtIDI7IGkgIT0gMDsgaS0tKQorCXsKKwkgIHVwICs9IDE7CisJICBycCArPSAyOworCSAgcnBbaV0gPSBtcG5fYWRkbXVsXzEgKHJwLCB1cCArIDEsIGksIHVwWzBdKTsKKwl9CisKKyAgICAgIHhwID0gcnAgLSAyICogbiArIDM7CisgICAgICBtcG5fc3FyX2RpYWdfYWRkbHNoMSAoeHAsIHhwICsgMSwgdXAgLSBuICsgMiwgbik7CisgICAgfQorfQorI2RlZmluZSBSRUFEWV9XSVRIX21wbl9zcXJfYmFzZWNhc2UKKyNlbmRpZgorCisKKyNpZiAhIGRlZmluZWQgKFJFQURZX1dJVEhfbXBuX3Nxcl9iYXNlY2FzZSkKKworLyogRGVmYXVsdCBtcG5fc3FyX2Jhc2VjYXNlIHVzaW5nIG1wbl9hZGRtdWxfMS4gICovCit2b2lkCittcG5fc3FyX2Jhc2VjYXNlIChtcF9wdHIgcnAsIG1wX3NyY3B0ciB1cCwgbXBfc2l6ZV90IG4pCit7CisgIG1wX3NpemVfdCBpOworCisgIEFTU0VSVCAobiA+PSAxKTsKKyAgQVNTRVJUICghIE1QTl9PVkVSTEFQX1AgKHJwLCAyKm4sIHVwLCBuKSk7CisKKyAgaWYgKG4gPT0gMSkKKyAgICB7CisgICAgICBtcF9saW1iX3QgdWwsIGxwbDsKKyAgICAgIHVsID0gdXBbMF07CisgICAgICB1bXVsX3BwbW0gKHJwWzFdLCBscGwsIHVsLCB1bCA8PCBHTVBfTkFJTF9CSVRTKTsKKyAgICAgIHJwWzBdID0gbHBsID4+IEdNUF9OQUlMX0JJVFM7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgbXBfbGltYl90IHRhcnJbMiAqIFNRUl9UT09NMl9USFJFU0hPTERdOworICAgICAgbXBfcHRyIHRwID0gdGFycjsKKyAgICAgIG1wX2xpbWJfdCBjeTsKKworICAgICAgLyogbXVzdCBmaXQgMipuIGxpbWJzIGluIHRhcnIgKi8KKyAgICAgIEFTU0VSVCAobiA8PSBTUVJfVE9PTTJfVEhSRVNIT0xEKTsKKworICAgICAgY3kgPSBtcG5fbXVsXzEgKHRwLCB1cCArIDEsIG4gLSAxLCB1cFswXSk7CisgICAgICB0cFtuIC0gMV0gPSBjeTsKKyAgICAgIGZvciAoaSA9IDI7IGkgPCBuOyBpKyspCisJeworCSAgbXBfbGltYl90IGN5OworCSAgY3kgPSBtcG5fYWRkbXVsXzEgKHRwICsgMiAqIGkgLSAyLCB1cCArIGksIG4gLSBpLCB1cFtpIC0gMV0pOworCSAgdHBbbiArIGkgLSAyXSA9IGN5OworCX0KKworICAgICAgTVBOX1NRUl9ESUFHX0FERExTSDEgKHJwLCB0cCwgdXAsIG4pOworICAgIH0KK30KKyNkZWZpbmUgUkVBRFlfV0lUSF9tcG5fc3FyX2Jhc2VjYXNlCisjZW5kaWYKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9zcXJsby5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3NxcmxvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE1MzBiNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9zcXJsby5jCkBAIC0wLDAgKzEsMjM5IEBACisvKiBtcG5fc3FybG8gLS0gc3F1YXJlcyBhbiBuLWxpbWIgbnVtYmVyIGFuZCByZXR1cm5zIHRoZSBsb3cgbiBsaW1icworICAgb2YgdGhlIHJlc3VsdC4KKworICAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqb3JuIEdyYW5sdW5kIGFuZCBNYXJjbyBCb2RyYXRvLgorCisgICBUSElTIElTIChGT1IgTk9XKSBBTiBJTlRFUk5BTCBGVU5DVElPTi4gIElUIElTIE9OTFkgU0FGRSBUTyBSRUFDSCBUSElTCisgICBGVU5DVElPTiBUSFJPVUdIIERPQ1VNRU5URUQgSU5URVJGQUNFUy4gIElOIEZBQ1QsIElUIElTIEFMTU9TVCBHVUFSQU5URUVECisgICBUSEFUIElUJ0xMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR05VIE1QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAyMDA0LCAyMDA1LCAyMDA5LCAyMDEwLCAyMDEyLCAyMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworI2lmIFRVTkVfUFJPR1JBTV9CVUlMRCB8fCBXQU5UX0ZBVF9CSU5BUlkKKyNkZWZpbmUgTUFZQkVfcmFuZ2VfYmFzZWNhc2UgMQorI2RlZmluZSBNQVlCRV9yYW5nZV90b29tMjIgICAxCisjZWxzZQorI2RlZmluZSBNQVlCRV9yYW5nZV9iYXNlY2FzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICgoU1FSTE9fRENfVEhSRVNIT0xEID09IDAgPyBTUVJMT19CQVNFQ0FTRV9USFJFU0hPTEQgOiBTUVJMT19EQ19USFJFU0hPTEQpIDwgU1FSX1RPT00yX1RIUkVTSE9MRCozNi8oMzYtMTEpKQorI2RlZmluZSBNQVlCRV9yYW5nZV90b29tMjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICgoU1FSTE9fRENfVEhSRVNIT0xEID09IDAgPyBTUVJMT19CQVNFQ0FTRV9USFJFU0hPTEQgOiBTUVJMT19EQ19USFJFU0hPTEQpIDwgU1FSX1RPT00zX1RIUkVTSE9MRCozNi8oMzYtMTEpICkKKyNlbmRpZgorCisvKiAgVEhJTks6IFRoZSBEQyBzdHJhdGVneSB1c2VzIGRpZmZlcmVudCBjb25zdGFudHMgaW4gZGlmZmVyZW50IFRvb20ncworCSByYW5nZXMuIFNvbWV0aGluZyBzbW9vdGhlcj8KKyovCisKKy8qCisgIENvbXB1dGUgdGhlIGxlYXN0IHNpZ25pZmljYW50IGhhbGYgb2YgdGhlIHByb2R1Y3Qge3h5LG59Knt5cCxufSwgb3IKKyAgZm9ybWFsbHkge3JwLG59ID0ge3h5LG59Knt5cCxufSBNb2QgKEJebikuCisKKyAgQWJvdmUgdGhlIGdpdmVuIHRocmVzaG9sZCwgdGhlIERpdmlkZSBhbmQgQ29ucXVlciBzdHJhdGVneSBpcyB1c2VkLgorICBUaGUgb3BlcmFuZCBpcyBzcGxpdCBpbiB0d28sIGFuZCBhIGZ1bGwgc3F1YXJlIHBsdXMgYSBtdWxsbworICBpcyB1c2VkIHRvIG9idGFpbiB0aGUgZmluYWwgcmVzdWx0LiBUaGUgbW9yZSBuYXR1cmFsIHN0cmF0ZWd5IGlzIHRvCisgIHNwbGl0IGluIHR3byBoYWx2ZXMsIGJ1dCB0aGlzIGlzIGZhciBmcm9tIG9wdGltYWwgd2hlbiBhCisgIHN1Yi1xdWFkcmF0aWMgbXVsdGlwbGljYXRpb24gaXMgdXNlZC4KKworICBNdWxkZXJzIHN1Z2dlc3RzIGFuIHVuYmFsYW5jZWQgc3BsaXQgaW4gZmF2b3VyIG9mIHRoZSBmdWxsIHByb2R1Y3QsCisgIHNwbGl0IG4gPSBuMSArIG4yLCB3aGVyZSBhbiA9IG4xIDw9IG4yID0gKDEtYSluOyBpLmUuIDAgPCBhIDw9IDEvMi4KKworICBUbyBjb21wdXRlIHRoZSB2YWx1ZSBvZiBhLCB3ZSBhc3N1bWUgdGhhdCB0aGUgY29zdCBvZiBtdWxsbyBmb3IgYQorICBnaXZlbiBzaXplIE1MKG4pIGlzIGEgZnJhY3Rpb24gb2YgdGhlIGNvc3Qgb2YgYSBmdWxsIHByb2R1Y3Qgd2l0aAorICBzYW1lIHNpemUgTShuKSwgYW5kIHRoZSBjb3N0IE0obik9bl5lIGZvciBzb21lIGV4cG9uZW50IDEgPCBlIDw9IDI7CisgIHRoZW4gd2UgY2FuIHdyaXRlOgorCisgIE1MKG4pID0gMipNTChhbikgKyBNKCgxLWEpbikgPT4gaypNKG4pID0gMiprKk0obikqYV5lICsgTShuKSooMS1hKV5lCisKKyAgR2l2ZW4gYSB2YWx1ZSBmb3IgZSwgd2FudCB0byBtaW5pbWlzZSB0aGUgdmFsdWUgb2YgaywgaS5lLiB0aGUKKyAgZnVuY3Rpb24gaz0oMS1hKV5lLygxLTIqYV5lKS4KKworICBXaXRoIGU9MiwgdGhlIGV4cG9uZW50IGZvciBzY2hvb2xib29rIG11bHRpcGxpY2F0aW9uLCB0aGUgbWluaW11bSBpcworICBnaXZlbiBieSB0aGUgdmFsdWVzIGE9MS1hPTEvMi4KKworICBXaXRoIGU9bG9nKDMpL2xvZygyKSwgdGhlIGV4cG9uZW50IGZvciBLYXJhdHN1YmEgKGFrYSB0b29tMjIpLAorICBNdWxkZXJzIGNvbXB1dGUgKDEtYSkgPSAwLjY5NC4uLiBhbmQgd2UgYXBwcm94aW1hdGUgYSB3aXRoIDExLzM2LgorCisgIE90aGVyIHBvc3NpYmxlIGFwcHJveGltYXRpb25zIGZvbGxvdzoKKyAgZT1sb2coNSkvbG9nKDMpIFtUb29tLTNdIC0+IGEgfj0gOS80MAorICBlPWxvZyg3KS9sb2coNCkgW1Rvb20tNF0gLT4gYSB+PSA3LzM5CisgIGU9bG9nKDExKS9sb2coNikgW1Rvb20tNl0gLT4gYSB+PSAxLzgKKyAgZT1sb2coMTUpL2xvZyg4KSBbVG9vbS04XSAtPiBhIH49IDEvMTAKKworICBUaGUgdmFsdWVzIGFib3ZlIHdoZXJlIG9idGFpbmVkIHdpdGggdGhlIGZvbGxvd2luZyB0cml2aWFsIGNvbW1hbmRzCisgIGluIHRoZSBncC1wYXJpIHNoZWxsOgorCitmdW4oZSxhKT0oMS1hKV5lLygxLTIqYV5lKQorbXVsKGEsYixjKT17bG9jYWwobSx4LHApO2lmKGItYzwxLzEwMDAwLChiK2MpLzIsbT0xO3g9Yjtmb3JzdGVwKHA9YyxiLChiLWMpLzgsaWYoZnVuKGEscCk8bSxtPWZ1bihhLHApO3g9cCkpO211bChhLChiK3gpLzIsKGMreCkvMikpfQorY29udGZyYWNwbnFuKGNvbnRmcmFjKG11bChsb2coMioyLTEpL2xvZygyKSwxLzIsMCksNSkpCitjb250ZnJhY3BucW4oY29udGZyYWMobXVsKGxvZygzKjItMSkvbG9nKDMpLDEvMiwwKSw1KSkKK2NvbnRmcmFjcG5xbihjb250ZnJhYyhtdWwobG9nKDQqMi0xKS9sb2coNCksMS8yLDApLDUpKQorY29udGZyYWNwbnFuKGNvbnRmcmFjKG11bChsb2coNioyLTEpL2xvZyg2KSwxLzIsMCksMykpCitjb250ZnJhY3BucW4oY29udGZyYWMobXVsKGxvZyg4KjItMSkvbG9nKDgpLDEvMiwwKSwzKSkKKworICAsCisgIHxcCisgIHwgXAorICArLS0tLSwKKyAgfCAgICB8CisgIHwgICAgfAorICB8ICAgIHxcCisgIHwgICAgfCBcCisgICstLS0tKy0tYAorICBeIG4yIF5uMV4KKworICBGb3IgYW4gYWN0dWFsIGltcGxlbWVudGF0aW9uLCB0aGUgYXNzdW1wdGlvbiB0aGF0IE0obik9bl5lIGlzCisgIGluY29ycmVjdCwgYXMgYSBjb25zZXF1ZW5jZSBhbHNvIHRoZSBhc3N1bXB0aW9uIHRoYXQgTUwobik9aypNKG4pCisgIHdpdGggYSBjb25zdGFudCBrIGlzIHdyb25nLgorCisgIEJ1dCB0aGVvcnkgc3VnZ2VzdCB1cyB0d28gdGhpbmdzOgorICAtIHRoZSBiZXN0IHRoZSBtdWx0aXBsaWNhdGlvbiBwcm9kdWN0IGlzIChsb3dlciBlKSwgdGhlIG1vcmUgaworICAgIGFwcHJvYWNoZXMgMSwgYW5kIGEgYXBwcm9hY2hlcyAwLgorCisgIC0gQSB2YWx1ZSBmb3IgYSBzbWFsbGVyIHRoYW4gb3B0aW1hbCBpcyBwcm9iYWJseSBsZXNzIGJhZCB0aGFuIGEKKyAgICBiaWdnZXIgb25lOiBlLmcuIGxldCBlPWxvZygzKS9sb2coMiksIGE9MC4zMDU4XyB0aGUgb3B0aW1hbAorICAgIHZhbHVlLCBhbmQgayhhKT0wLjgwOF8gdGhlIG11bC9tdWxsbyBzcGVlZCByYXRpby4gV2UgZ2V0CisgICAgayhhKzEvNik9MC45MjlfIGJ1dCBrKGEtMS82KT0wLjg2NV8uCisqLworCitzdGF0aWMgbXBfc2l6ZV90CittcG5fc3FybG9faXRjaCAobXBfc2l6ZV90IG4pCit7CisgIHJldHVybiAyKm47Cit9CisKKy8qCisgICAgbXBuX2RjX3NxcmxvIHJlcXVpcmVzIGEgc2NyYXRjaCBzcGFjZSBvZiAyKm4gbGltYnMgYXQgdHAuCisgICAgSXQgYWNjZXB0cyB0cCA9PSBycC4KKyovCitzdGF0aWMgdm9pZAorbXBuX2RjX3NxcmxvIChtcF9wdHIgcnAsIG1wX3NyY3B0ciB4cCwgbXBfc2l6ZV90IG4sIG1wX3B0ciB0cCkKK3sKKyAgbXBfc2l6ZV90IG4yLCBuMTsKKyAgQVNTRVJUIChuID49IDIpOworICBBU1NFUlQgKCEgTVBOX09WRVJMQVBfUCAocnAsIG4sIHhwLCBuKSk7CisgIEFTU0VSVCAoTVBOX1NBTUVfT1JfU0VQQVJBVEUyX1AocnAsIG4sIHRwLCAyKm4pKTsKKworICAvKiBEaXZpZGUtYW5kLWNvbnF1ZXIgKi8KKworICAvKiBXZSBuZWVkIGZyYWN0aW9uYWwgYXBwcm94aW1hdGlvbiBvZiB0aGUgdmFsdWUgMCA8IGEgPD0gMS8yCisgICAgIGdpdmluZyB0aGUgbWluaW11bSBpbiB0aGUgZnVuY3Rpb24gaz0oMS1hKV5lLygxLTIqYV5lKS4KKyAgKi8KKyAgaWYgKE1BWUJFX3JhbmdlX2Jhc2VjYXNlICYmIEJFTE9XX1RIUkVTSE9MRCAobiwgU1FSX1RPT00yX1RIUkVTSE9MRCozNi8oMzYtMTEpKSkKKyAgICBuMSA9IG4gPj4gMTsKKyAgZWxzZSBpZiAoTUFZQkVfcmFuZ2VfdG9vbTIyICYmIEJFTE9XX1RIUkVTSE9MRCAobiwgU1FSX1RPT00zX1RIUkVTSE9MRCozNi8oMzYtMTEpKSkKKyAgICBuMSA9IG4gKiAxMSAvIChzaXplX3QpIDM2OwkvKiBuMSB+PSBuKigxLS42OTQuLi4pICovCisgIGVsc2UgaWYgKEJFTE9XX1RIUkVTSE9MRCAobiwgU1FSX1RPT000X1RIUkVTSE9MRCo0MC8oNDAtOSkpKQorICAgIG4xID0gbiAqIDkgLyAoc2l6ZV90KSA0MDsJLyogbjEgfj0gbiooMS0uNzc1Li4uKSAqLworICBlbHNlIGlmIChCRUxPV19USFJFU0hPTEQgKG4sIFNRUl9UT09NOF9USFJFU0hPTEQqMTAvOSkpCisgICAgbjEgPSBuICogNyAvIChzaXplX3QpIDM5OwkvKiBuMSB+PSBuKigxLS44MjEuLi4pICovCisgIC8qIG4xID0gbiAqIDQgLyAoc2l6ZV90KSAzMTsJLy8gbjEgfj0gbiooMS0uODcxLi4uKSBbVE9PTTY2XSAqLworICBlbHNlCisgICAgbjEgPSBuIC8gKHNpemVfdCkgMTA7CQkvKiBuMSB+PSBuKigxLS44OTkuLi4pIFtUT09NODhdICovCisKKyAgbjIgPSBuIC0gbjE7CisKKyAgLyogU3BsaXQgYXMgeCA9IHgxIDJeKG4yIEdNUF9OVU1CX0JJVFMpICsgeDAgKi8KKworICAvKiB4MCBeIDIgKi8KKyAgbXBuX3NxciAodHAsIHhwLCBuMik7CisgIE1QTl9DT1BZIChycCwgdHAsIG4yKTsKKworICAvKiB4MSAqIHgwICogMl4objIgR01QX05VTUJfQklUUykgKi8KKyAgaWYgKEJFTE9XX1RIUkVTSE9MRCAobjEsIE1VTExPX0JBU0VDQVNFX1RIUkVTSE9MRCkpCisgICAgbXBuX211bF9iYXNlY2FzZSAodHAgKyBuLCB4cCArIG4yLCBuMSwgeHAsIG4xKTsKKyAgZWxzZSBpZiAoQkVMT1dfVEhSRVNIT0xEIChuMSwgTVVMTE9fRENfVEhSRVNIT0xEKSkKKyAgICBtcG5fbXVsbG9fYmFzZWNhc2UgKHRwICsgbiwgeHAgKyBuMiwgeHAsIG4xKTsKKyAgZWxzZQorICAgIG1wbl9tdWxsb19uICh0cCArIG4sIHhwICsgbjIsIHhwLCBuMSk7CisgIC8qIG1wbl9kY19tdWxsb19uICh0cCArIG4sIHhwICsgbjIsIHhwLCBuMSwgdHAgKyBuKTsgKi8KKyNpZiBIQVZFX05BVElWRV9tcG5fYWRkbHNoMV9uCisgIG1wbl9hZGRsc2gxX24gKHJwICsgbjIsIHRwICsgbjIsIHRwICsgbiwgbjEpOworI2Vsc2UKKyAgbXBuX2xzaGlmdCAocnAgKyBuMiwgdHAgKyBuLCBuMSwgMSk7CisgIG1wbl9hZGRfbiAocnAgKyBuMiwgcnAgKyBuMiwgdHAgKyBuMiwgbjEpOworI2VuZGlmCit9CisKKy8qIEF2b2lkIHplcm8gYWxsb2NhdGlvbnMgd2hlbiBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgaXMgMC4gICovCisjZGVmaW5lIFNRUl9CQVNFQ0FTRV9BTExPQyBcCisgKFNRUkxPX0JBU0VDQVNFX1RIUkVTSE9MRF9MSU1JVCA9PSAwID8gMSA6IDIqU1FSTE9fQkFTRUNBU0VfVEhSRVNIT0xEX0xJTUlUKQorCisvKiBGSVhNRTogVGhpcyBmdW5jdGlvbiBzaG91bGQgYWNjZXB0IGEgdGVtcG9yYXJ5IGFyZWE7IGRjX3NxcmxvCisgICBhY2NlcHRzIGEgcG9pbnRlciB0cCwgYW5kIGhhbmRsZSB0aGUgY2FzZSB0cCA9PSBycCwgZG8gdGhlIHNhbWUgaGVyZS4KKyovCisKK3ZvaWQKK21wbl9zcXJsbyAobXBfcHRyIHJwLCBtcF9zcmNwdHIgeHAsIG1wX3NpemVfdCBuKQoreworICBBU1NFUlQgKG4gPj0gMSk7CisgIEFTU0VSVCAoISBNUE5fT1ZFUkxBUF9QIChycCwgbiwgeHAsIG4pKTsKKworICBpZiAoQkVMT1dfVEhSRVNIT0xEIChuLCBTUVJMT19CQVNFQ0FTRV9USFJFU0hPTEQpKQorICAgIHsKKyAgICAgIC8qIEZJWE1FOiBzbWFydGVyIGNyaXRlcmlhPyAqLworI2lmIEhBVkVfTkFUSVZFX21wbl9tdWxsb19iYXNlY2FzZSB8fCAhIEhBVkVfTkFUSVZFX21wbl9zcXJfYmFzZWNhc2UKKyAgICAgIC8qIG11bGxvIGNvbXB1dGVzIGFzIG1hbnkgcHJvZHVjdHMgYXMgc3FyLCBidXQgZGlyZWN0bHkgd3JpdGVzCisJIG9uIHRoZSByZXN1bHQgYXJlYS4gKi8KKyAgICAgIG1wbl9tdWxsb19iYXNlY2FzZSAocnAsIHhwLCB4cCwgbik7CisjZWxzZQorICAgICAgLyogQWxsb2NhdGUgd29ya3NwYWNlIG9mIGZpeGVkIHNpemUgb24gc3RhY2s6IGZhc3QhICovCisgICAgICBtcF9saW1iX3QgdHBbU1FSX0JBU0VDQVNFX0FMTE9DXTsKKyAgICAgIG1wbl9zcXJfYmFzZWNhc2UgKHRwLCB4cCwgbik7CisgICAgICBNUE5fQ09QWSAocnAsIHRwLCBuKTsKKyNlbmRpZgorICAgIH0KKyAgZWxzZSBpZiAoQkVMT1dfVEhSRVNIT0xEIChuLCBTUVJMT19EQ19USFJFU0hPTEQpKQorICAgIHsKKyAgICAgIG1wbl9zcXJsb19iYXNlY2FzZSAocnAsIHhwLCBuKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBtcF9wdHIgdHA7CisgICAgICBUTVBfREVDTDsKKyAgICAgIFRNUF9NQVJLOworICAgICAgdHAgPSBUTVBfQUxMT0NfTElNQlMgKG1wbl9zcXJsb19pdGNoIChuKSk7CisgICAgICBpZiAoQkVMT1dfVEhSRVNIT0xEIChuLCBTUVJMT19TUVJfVEhSRVNIT0xEKSkKKwl7CisJICBtcG5fZGNfc3FybG8gKHJwLCB4cCwgbiwgdHApOworCX0KKyAgICAgIGVsc2UKKwl7CisJICAvKiBGb3IgcmVhbGx5IGxhcmdlIG9wZXJhbmRzLCB1c2UgcGxhaW4gbXBuX211bF9uIGJ1dCB0aHJvdyBhd2F5IHVwcGVyIG4KKwkgICAgIGxpbWJzIG9mIHJlc3VsdC4gICovCisjaWYgIVRVTkVfUFJPR1JBTV9CVUlMRCAmJiAoU1FSTE9fU1FSX1RIUkVTSE9MRCA+IFNRUl9GRlRfVEhSRVNIT0xEKQorCSAgbXBuX2ZmdF9tdWwgKHRwLCB4cCwgbiwgeHAsIG4pOworI2Vsc2UKKwkgIG1wbl9zcXIgKHRwLCB4cCwgbik7CisjZW5kaWYKKwkgIE1QTl9DT1BZIChycCwgdHAsIG4pOworCX0KKyAgICAgIFRNUF9GUkVFOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9zcXJsb19iYXNlY2FzZS5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3NxcmxvX2Jhc2VjYXNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE0ODYwOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9zcXJsb19iYXNlY2FzZS5jCkBAIC0wLDAgKzEsMTk0IEBACisvKiBtcG5fc3FybG9fYmFzZWNhc2UgLS0gSW50ZXJuYWwgcm91dGluZSB0byBzcXVhcmUgYSBuYXR1cmFsIG51bWJlcgorICAgb2YgbGVuZ3RoIG4uCisKKyAgIFRISVMgSVMgQU4gSU5URVJOQUwgRlVOQ1RJT04gV0lUSCBBIE1VVEFCTEUgSU5URVJGQUNFLiAgSVQgSVMgT05MWQorICAgU0FGRSBUTyBSRUFDSCBUSElTIEZVTkNUSU9OIFRIUk9VR0ggRE9DVU1FTlRFRCBJTlRFUkZBQ0VTLgorCisKK0NvcHlyaWdodCAxOTkxLTE5OTQsIDE5OTYsIDE5OTcsIDIwMDAtMjAwNSwgMjAwOCwgMjAxMCwgMjAxMSwgMjAxNSwKKzIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorI2luY2x1ZGUgImxvbmdsb25nLmgiCisKKyNpZm5kZWYgU1FSTE9fU0hPUlRDVVRfTVVMVElQTElDQVRJT05TCisjaWYgSEFWRV9OQVRJVkVfbXBuX2FkZG11bF8xCisjZGVmaW5lIFNRUkxPX1NIT1JUQ1VUX01VTFRJUExJQ0FUSU9OUyAwCisjZWxzZQorI2RlZmluZSBTUVJMT19TSE9SVENVVF9NVUxUSVBMSUNBVElPTlMgMQorI2VuZGlmCisjZW5kaWYKKworI2lmIEhBVkVfTkFUSVZFX21wbl9zcXJfZGlhZ29uYWwKKyNkZWZpbmUgTVBOX1NRUl9ESUFHT05BTChycCwgdXAsIG4pCQkJCQlcCisgIG1wbl9zcXJfZGlhZ29uYWwgKHJwLCB1cCwgbikKKyNlbHNlCisjZGVmaW5lIE1QTl9TUVJfRElBR09OQUwocnAsIHVwLCBuKQkJCQkJXAorICBkbyB7CQkJCQkJCQkJXAorICAgIG1wX3NpemVfdCBfaTsJCQkJCQkJXAorICAgIGZvciAoX2kgPSAwOyBfaSA8IChuKTsgX2krKykJCQkJCVwKKyAgICAgIHsJCQkJCQkJCQlcCisJbXBfbGltYl90IHVsLCBscGw7CQkJCQkJXAorCXVsID0gKHVwKVtfaV07CQkJCQkJCVwKKwl1bXVsX3BwbW0gKChycClbMiAqIF9pICsgMV0sIGxwbCwgdWwsIHVsIDw8IEdNUF9OQUlMX0JJVFMpOwlcCisJKHJwKVsyICogX2ldID0gbHBsID4+IEdNUF9OQUlMX0JJVFM7CQkJCVwKKyAgICAgIH0JCQkJCQkJCQlcCisgIH0gd2hpbGUgKDApCisjZW5kaWYKKworI2RlZmluZSBNUE5fU1FSTE9fRElBR09OQUwocnAsIHVwLCBuKQkJCQkJXAorICBkbyB7CQkJCQkJCQkJXAorICAgIG1wX3NpemVfdCBuaGFsZjsJCQkJCQkJXAorICAgIG5oYWxmID0gKG4pID4+IDE7CQkJCQkJCVwKKyAgICBNUE5fU1FSX0RJQUdPTkFMICgocnApLCAodXApLCBuaGFsZik7CQkJCVwKKyAgICBpZiAoKChuKSAmIDEpICE9IDApCQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJCQlcCisJbXBfbGltYl90IG9wOwkJCQkJCQlcCisJb3AgPSAodXApW25oYWxmXTsJCQkJCQlcCisJKHJwKVsobikgLSAxXSA9IChvcCAqIG9wKSAmIEdNUF9OVU1CX01BU0s7CQkJXAorICAgICAgfQkJCQkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworI2lmIEhBVkVfTkFUSVZFX21wbl9hZGRsc2gxX25faXAxCisjZGVmaW5lIE1QTl9TUVJMT19ESUFHX0FERExTSDEocnAsIHRwLCB1cCwgbikJCQkJXAorICBkbyB7CQkJCQkJCQkJXAorICAgIE1QTl9TUVJMT19ESUFHT05BTCgocnApLCAodXApLCAobikpOwkJCQlcCisgICAgbXBuX2FkZGxzaDFfbl9pcDEgKChycCkgKyAxLCAodHApLCAobikgLSAxKTsJCQlcCisgIH0gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBNUE5fU1FSTE9fRElBR19BRERMU0gxKHJwLCB0cCwgdXAsIG4pCQkJCVwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBNUE5fU1FSTE9fRElBR09OQUwoKHJwKSwgKHVwKSwgKG4pKTsJCQkJXAorICAgIG1wbl9sc2hpZnQgKCh0cCksICh0cCksIChuKSAtIDEsIDEpOwkJCQlcCisgICAgbXBuX2FkZF9uICgocnApICsgMSwgKHJwKSArIDEsICh0cCksIChuKSAtIDEpOwkJCVwKKyAgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisvKiBBdm9pZCB6ZXJvIGFsbG9jYXRpb25zIHdoZW4gU1FSTE9fTE9fVEhSRVNIT0xEIGlzIDAgKHRoaXMgY29kZSBub3QgdXNlZCkuICovCisjZGVmaW5lIFNRUkxPX0JBU0VDQVNFX0FMTE9DCQkJCQkJXAorICAoU1FSTE9fRENfVEhSRVNIT0xEX0xJTUlUIDwgMiA/IDEgOiBTUVJMT19EQ19USFJFU0hPTERfTElNSVQgLSAxKQorCisvKiBEZWZhdWx0IG1wbl9zcXJsb19iYXNlY2FzZSB1c2luZyBtcG5fYWRkbXVsXzEuICAqLworI2lmbmRlZiBTUVJMT19TUEVDSUFMX0NBU0VTCisjZGVmaW5lIFNRUkxPX1NQRUNJQUxfQ0FTRVMgMgorI2VuZGlmCisKKyNpZiBUVU5FX1BST0dSQU1fQlVJTEQgfHwgV0FOVF9GQVRfQklOQVJZCisjZGVmaW5lIE1BWUJFX3NwZWNpYWxfY2FzZXMgMQorI2Vsc2UKKyNkZWZpbmUgTUFZQkVfc3BlY2lhbF9jYXNlcyBcCisgICgoU1FSTE9fQkFTRUNBU0VfVEhSRVNIT0xEIDw9IFNRUkxPX1NQRUNJQUxfQ0FTRVMpICYmIChTUVJMT19EQ19USFJFU0hPTEQgIT0gMCkpCisjZW5kaWYKKwordm9pZAorbXBuX3NxcmxvX2Jhc2VjYXNlIChtcF9wdHIgcnAsIG1wX3NyY3B0ciB1cCwgbXBfc2l6ZV90IG4pCit7CisgIG1wX2xpbWJfdCB1bDsKKworICBBU1NFUlQgKG4gPj0gMSk7CisgIEFTU0VSVCAoISBNUE5fT1ZFUkxBUF9QIChycCwgbiwgdXAsIG4pKTsKKworICB1bCA9IHVwWzBdOworCisgIGlmIChNQVlCRV9zcGVjaWFsX2Nhc2VzICYmIG4gPD0gU1FSTE9fU1BFQ0lBTF9DQVNFUykKKyAgICB7CisjaWYgU1FSTE9fU1BFQ0lBTF9DQVNFUyA9PSAxCisgICAgICBycFswXSA9ICh1bCAqIHVsKSAmIEdNUF9OVU1CX01BU0s7CisjZWxzZQorICAgICAgaWYgKG4gPT0gMSkKKwlycFswXSA9ICh1bCAqIHVsKSAmIEdNUF9OVU1CX01BU0s7CisgICAgICBlbHNlCisJeworCSAgbXBfbGltYl90IGhpLCBsbywgdWwxOworCSAgdW11bF9wcG1tIChoaSwgbG8sIHVsLCB1bCA8PCBHTVBfTkFJTF9CSVRTKTsKKwkgIHJwWzBdID0gbG8gPj4gR01QX05BSUxfQklUUzsKKwkgIHVsMSA9IHVwWzFdOworI2lmIFNRUkxPX1NQRUNJQUxfQ0FTRVMgPT0gMgorCSAgcnBbMV0gPSAoaGkgKyB1bCAqIHVsMSAqIDIpICYgR01QX05VTUJfTUFTSzsKKyNlbHNlCisJICBpZiAobiA9PSAyKQorCSAgICBycFsxXSA9IChoaSArIHVsICogdWwxICogMikgJiBHTVBfTlVNQl9NQVNLOworCSAgZWxzZQorCSAgICB7CisJICAgICAgbXBfbGltYl90IGhpMTsKKyNpZiBHTVBfTkFJTF9CSVRTICE9IDAKKwkgICAgICB1bCA8PD0gMTsKKyNlbmRpZgorCSAgICAgIHVtdWxfcHBtbSAoaGkxLCBsbywgdWwxIDw8IEdNUF9OQUlMX0JJVFMsIHVsKTsKKwkgICAgICBoaTEgKz0gdWwgKiB1cFsyXTsKKyNpZiBHTVBfTkFJTF9CSVRTID09IDAKKwkgICAgICBoaTEgPSAoaGkxIDw8IDEpIHwgKGxvID4+IChHTVBfTElNQl9CSVRTIC0gMSkpOworCSAgICAgIGFkZF9zc2FhYWEocnBbMl0sIHJwWzFdLCBoaTEsIGxvIDw8IDEsIHVsMSAqIHVsMSwgaGkpOworI2Vsc2UKKwkgICAgICBoaSArPSBsbyA+PiBHTVBfTkFJTF9CSVRTOworCSAgICAgIHJwWzFdID0gaGkgJiBHTVBfTlVNQl9NQVNLOworCSAgICAgIHJwWzJdID0gKGhpMSArIHVsMSAqIHVsMSArIChoaSA+PiBHTVBfTlVNQl9CSVRTKSkgJiBHTVBfTlVNQl9NQVNLOworI2VuZGlmCisJICAgIH0KKyNlbmRpZgorCX0KKyNlbmRpZgorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIG1wX2xpbWJfdCB0cFtTUVJMT19CQVNFQ0FTRV9BTExPQ107CisgICAgICBtcF9zaXplX3QgaTsKKworICAgICAgLyogbXVzdCBmaXQgbi0xIGxpbWJzIGluIHRwICovCisgICAgICBBU1NFUlQgKG4gPD0gU1FSTE9fRENfVEhSRVNIT0xEX0xJTUlUKTsKKworICAgICAgLS1uOworI2lmIFNRUkxPX1NIT1JUQ1VUX01VTFRJUExJQ0FUSU9OUworICAgICAgeworCW1wX2xpbWJfdCBjeTsKKworCWN5ID0gdWwgKiB1cFtuXSArIG1wbl9tdWxfMSAodHAsIHVwICsgMSwgbiAtIDEsIHVsKTsKKwlmb3IgKGkgPSAxOyAyICogaSArIDEgPCBuOyArK2kpCisJICB7CisJICAgIHVsID0gdXBbaV07CisJICAgIGN5ICs9IHVsICogdXBbbiAtIGldICsgbXBuX2FkZG11bF8xICh0cCArIDIgKiBpLCB1cCArIGkgKyAxLCBuIC0gMiAqIGkgLSAxLCB1bCk7CisJICB9CisJdHAgW24tMV0gPSAoY3kgKyAoKG4gJiAxKT91cFtpXSAqIHVwW2kgKyAxXTowKSkgJiBHTVBfTlVNQl9NQVNLOworICAgICAgfQorI2Vsc2UKKyAgICAgIG1wbl9tdWxfMSAodHAsIHVwICsgMSwgbiwgdWwpOworICAgICAgZm9yIChpID0gMTsgMiAqIGkgPCBuOyArK2kpCisJbXBuX2FkZG11bF8xICh0cCArIDIgKiBpLCB1cCArIGkgKyAxLCBuIC0gMiAqIGksIHVwW2ldKTsKKyNlbmRpZgorCisgICAgICBNUE5fU1FSTE9fRElBR19BRERMU0gxIChycCwgdHAsIHVwLCBuICsgMSk7CisgICAgfQorfQorI3VuZGVmIFNRUkxPX1NQRUNJQUxfQ0FTRVMKKyN1bmRlZiBNQVlCRV9zcGVjaWFsX2Nhc2VzCisjdW5kZWYgU1FSTE9fQkFTRUNBU0VfQUxMT0MKKyN1bmRlZiBTUVJMT19TSE9SVENVVF9NVUxUSVBMSUNBVElPTlMKKyN1bmRlZiBNUE5fU1FSX0RJQUdPTkFMCisjdW5kZWYgTVBOX1NRUkxPX0RJQUdPTkFMCisjdW5kZWYgTVBOX1NRUkxPX0RJQUdfQURETFNIMQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Nxcm1vZF9ibm0xLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvc3FybW9kX2JubTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTI3ZDdiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Nxcm1vZF9ibm0xLmMKQEAgLTAsMCArMSwzMTIgQEAKKy8qIHNxcm1vZF9ibm0xLmMgLS0gc3F1YXJpbmcgbW9kIEJebi0xLgorCisgICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgTmllbHMgTcO2bGxlciwgVG9yYmpvcm4gR3Jhbmx1bmQgYW5kCisgICBNYXJjbyBCb2RyYXRvLgorCisgICBUSEUgRlVOQ1RJT05TIElOIFRISVMgRklMRSBBUkUgSU5URVJOQUwgV0lUSCBNVVRBQkxFIElOVEVSRkFDRVMuICBJVCBJUyBPTkxZCisgICBTQUZFIFRPIFJFQUNIIFRIRU0gVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuICBJTiBGQUNULCBJVCBJUyBBTE1PU1QKKyAgIEdVQVJBTlRFRUQgVEhBVCBUSEVZIFdJTEwgQ0hBTkdFIE9SIERJU0FQUEVBUiBJTiBBIEZVVFVSRSBHTlUgTVAgUkVMRUFTRS4KKworQ29weXJpZ2h0IDIwMDksIDIwMTAsIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisjaW5jbHVkZSAibG9uZ2xvbmcuaCIKKworLyogSW5wdXQgaXMge2FwLHJufTsgb3V0cHV0IGlzIHtycCxybn0sIGNvbXB1dGF0aW9uIGlzCisgICBtb2QgQl5ybiAtIDEsIGFuZCB2YWx1ZXMgYXJlIHNlbWktbm9ybWFsaXNlZDsgemVybyBpcyByZXByZXNlbnRlZAorICAgYXMgZWl0aGVyIDAgb3IgQl5uIC0gMS4gIE5lZWRzIGEgc2NyYXRjaCBvZiAycm4gbGltYnMgYXQgdHAuCisgICB0cD09cnAgaXMgYWxsb3dlZC4gKi8KK3N0YXRpYyB2b2lkCittcG5fYmNfc3FybW9kX2JubTEgKG1wX3B0ciBycCwgbXBfc3JjcHRyIGFwLCBtcF9zaXplX3Qgcm4sIG1wX3B0ciB0cCkKK3sKKyAgbXBfbGltYl90IGN5OworCisgIEFTU0VSVCAoMCA8IHJuKTsKKworICBtcG5fc3FyICh0cCwgYXAsIHJuKTsKKyAgY3kgPSBtcG5fYWRkX24gKHJwLCB0cCwgdHAgKyBybiwgcm4pOworICAvKiBJZiBjeSA9PSAxLCB0aGVuIHRoZSB2YWx1ZSBvZiBycCBpcyBhdCBtb3N0IEJecm4gLSAyLCBzbyB0aGVyZSBjYW4KKyAgICogYmUgbm8gb3ZlcmZsb3cgd2hlbiBhZGRpbmcgaW4gdGhlIGNhcnJ5LiAqLworICBNUE5fSU5DUl9VIChycCwgcm4sIGN5KTsKK30KKworCisvKiBJbnB1dCBpcyB7YXAscm4rMX07IG91dHB1dCBpcyB7cnAscm4rMX0sIGluCisgICBzZW1pLW5vcm1hbGlzZWQgcmVwcmVzZW50YXRpb24sIGNvbXB1dGF0aW9uIGlzIG1vZCBCXnJuICsgMS4gTmVlZHMKKyAgIGEgc2NyYXRjaCBhcmVhIG9mIDJybiArIDIgbGltYnMgYXQgdHA7IHRwID09IHJwIGlzIGFsbG93ZWQuCisgICBPdXRwdXQgaXMgbm9ybWFsaXNlZC4gKi8KK3N0YXRpYyB2b2lkCittcG5fYmNfc3FybW9kX2JucDEgKG1wX3B0ciBycCwgbXBfc3JjcHRyIGFwLCBtcF9zaXplX3Qgcm4sIG1wX3B0ciB0cCkKK3sKKyAgbXBfbGltYl90IGN5OworCisgIEFTU0VSVCAoMCA8IHJuKTsKKworICBtcG5fc3FyICh0cCwgYXAsIHJuICsgMSk7CisgIEFTU0VSVCAodHBbMipybisxXSA9PSAwKTsKKyAgQVNTRVJUICh0cFsyKnJuXSA8IEdNUF9OVU1CX01BWCk7CisgIGN5ID0gdHBbMipybl0gKyBtcG5fc3ViX24gKHJwLCB0cCwgdHArcm4sIHJuKTsKKyAgcnBbcm5dID0gMDsKKyAgTVBOX0lOQ1JfVSAocnAsIHJuKzEsIGN5KTsKK30KKworCisvKiBDb21wdXRlcyB7cnAsTUlOKHJuLDJhbil9IDwtIHthcCxhbn1eMiBNb2QoQl5ybi0xKQorICoKKyAqIFRoZSByZXN1bHQgaXMgZXhwZWN0ZWQgdG8gYmUgWkVSTyBpZiBhbmQgb25seSBpZiB0aGUgb3BlcmFuZAorICogYWxyZWFkeSBpcy4gT3RoZXJ3aXNlIHRoZSBjbGFzcyBbMF0gTW9kKEJecm4tMSkgaXMgcmVwcmVzZW50ZWQgYnkKKyAqIEJecm4tMS4KKyAqIEl0IHNob3VsZCBub3QgYmUgYSBwcm9ibGVtIGlmIHNxcm1vZF9ibm0xIGlzIHVzZWQgdG8KKyAqIGNvbXB1dGUgdGhlIGZ1bGwgc3F1YXJlIHdpdGggYW4gPD0gMipybiwgYmVjYXVzZSB0aGlzIGNvbmRpdGlvbgorICogaW1wbGllcyAoQl5hbi0xKV4yIDwgKEJecm4tMSkgLgorICoKKyAqIFJlcXVpcmVzIHJuLzQgPCBhbiA8PSBybgorICogU2NyYXRjaCBuZWVkOiBybi8yICsgKG5lZWQgZm9yIHJlY3Vyc2l2ZSBjYWxsIE9SIHJuICsgMykuIFRoaXMgZ2l2ZXMKKyAqCisgKiBTKG4pIDw9IHJuLzIgKyBNQVggKHJuICsgNCwgUyhuLzIpKSA8PSAzLzIgcm4gKyA0CisgKi8KK3ZvaWQKK21wbl9zcXJtb2RfYm5tMSAobXBfcHRyIHJwLCBtcF9zaXplX3Qgcm4sIG1wX3NyY3B0ciBhcCwgbXBfc2l6ZV90IGFuLCBtcF9wdHIgdHApCit7CisgIEFTU0VSVCAoMCA8IGFuKTsKKyAgQVNTRVJUIChhbiA8PSBybik7CisKKyAgaWYgKChybiAmIDEpICE9IDAgfHwgQkVMT1dfVEhSRVNIT0xEIChybiwgU1FSTU9EX0JOTTFfVEhSRVNIT0xEKSkKKyAgICB7CisgICAgICBpZiAoVU5MSUtFTFkgKGFuIDwgcm4pKQorCXsKKwkgIGlmIChVTkxJS0VMWSAoMiphbiA8PSBybikpCisJICAgIHsKKwkgICAgICBtcG5fc3FyIChycCwgYXAsIGFuKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgbXBfbGltYl90IGN5OworCSAgICAgIG1wbl9zcXIgKHRwLCBhcCwgYW4pOworCSAgICAgIGN5ID0gbXBuX2FkZCAocnAsIHRwLCBybiwgdHAgKyBybiwgMiphbiAtIHJuKTsKKwkgICAgICBNUE5fSU5DUl9VIChycCwgcm4sIGN5KTsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwltcG5fYmNfc3FybW9kX2JubTEgKHJwLCBhcCwgcm4sIHRwKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBtcF9zaXplX3QgbjsKKyAgICAgIG1wX2xpbWJfdCBjeTsKKyAgICAgIG1wX2xpbWJfdCBoaTsKKworICAgICAgbiA9IHJuID4+IDE7CisKKyAgICAgIEFTU0VSVCAoMiphbiA+IG4pOworCisgICAgICAvKiBDb21wdXRlIHhtID0gYV4yIG1vZCAoQl5uIC0gMSksIHhwID0gYV4yIG1vZCAoQl5uICsgMSkKKwkgYW5kIGNydCB0b2dldGhlciBhcworCisJIHggPSAteHAgKiBCXm4gKyAoQl5uICsgMSkgKiBbICh4cCArIHhtKS8yIG1vZCAoQl5uLTEpXQorICAgICAgKi8KKworI2RlZmluZSBhMCBhcAorI2RlZmluZSBhMSAoYXAgKyBuKQorCisjZGVmaW5lIHhwICB0cAkvKiAybiArIDIgKi8KKyAgICAgIC8qIGFtMSAgbWF5YmUgaW4ge3hwLCBufSAqLworI2RlZmluZSBzcDEgKHRwICsgMipuICsgMikKKyAgICAgIC8qIGFwMSAgbWF5YmUgaW4ge3NwMSwgbiArIDF9ICovCisKKyAgICAgIHsKKwltcF9zcmNwdHIgYW0xOworCW1wX3NpemVfdCBhbm07CisJbXBfcHRyIHNvOworCisJaWYgKExJS0VMWSAoYW4gPiBuKSkKKwkgIHsKKwkgICAgc28gPSB4cCArIG47CisJICAgIGFtMSA9IHhwOworCSAgICBjeSA9IG1wbl9hZGQgKHhwLCBhMCwgbiwgYTEsIGFuIC0gbik7CisJICAgIE1QTl9JTkNSX1UgKHhwLCBuLCBjeSk7CisJICAgIGFubSA9IG47CisJICB9CisJZWxzZQorCSAgeworCSAgICBzbyA9IHhwOworCSAgICBhbTEgPSBhMDsKKwkgICAgYW5tID0gYW47CisJICB9CisKKwltcG5fc3FybW9kX2JubTEgKHJwLCBuLCBhbTEsIGFubSwgc28pOworICAgICAgfQorCisgICAgICB7CisJaW50ICAgICAgIGs7CisJbXBfc3JjcHRyIGFwMTsKKwltcF9zaXplX3QgYW5wOworCisJaWYgKExJS0VMWSAoYW4gPiBuKSkgeworCSAgYXAxID0gc3AxOworCSAgY3kgPSBtcG5fc3ViIChzcDEsIGEwLCBuLCBhMSwgYW4gLSBuKTsKKwkgIHNwMVtuXSA9IDA7CisJICBNUE5fSU5DUl9VIChzcDEsIG4gKyAxLCBjeSk7CisJICBhbnAgPSBuICsgYXAxW25dOworCX0gZWxzZSB7CisJICBhcDEgPSBhMDsKKwkgIGFucCA9IGFuOworCX0KKworCWlmIChCRUxPV19USFJFU0hPTEQgKG4sIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQpKQorCSAgaz0wOworCWVsc2UKKwkgIHsKKwkgICAgaW50IG1hc2s7CisJICAgIGsgPSBtcG5fZmZ0X2Jlc3RfayAobiwgMSk7CisJICAgIG1hc2sgPSAoMTw8aykgLTE7CisJICAgIHdoaWxlIChuICYgbWFzaykge2stLTsgbWFzayA+Pj0xO307CisJICB9CisJaWYgKGsgPj0gRkZUX0ZJUlNUX0spCisJICB4cFtuXSA9IG1wbl9tdWxfZmZ0ICh4cCwgbiwgYXAxLCBhbnAsIGFwMSwgYW5wLCBrKTsKKwllbHNlIGlmIChVTkxJS0VMWSAoYXAxID09IGEwKSkKKwkgIHsKKwkgICAgQVNTRVJUIChhbnAgPD0gbik7CisJICAgIEFTU0VSVCAoMiphbnAgPiBuKTsKKwkgICAgbXBuX3NxciAoeHAsIGEwLCBhbik7CisJICAgIGFucCA9IDIqYW4gLSBuOworCSAgICBjeSA9IG1wbl9zdWIgKHhwLCB4cCwgbiwgeHAgKyBuLCBhbnApOworCSAgICB4cFtuXSA9IDA7CisJICAgIE1QTl9JTkNSX1UgKHhwLCBuKzEsIGN5KTsKKwkgIH0KKwllbHNlCisJICBtcG5fYmNfc3FybW9kX2JucDEgKHhwLCBhcDEsIG4sIHhwKTsKKyAgICAgIH0KKworICAgICAgLyogSGVyZSB0aGUgQ1JUIHJlY29tcG9zaXRpb24gYmVnaW5zLgorCisJIHhtIDwtICh4cCArIHhtKS8yID0gKHhwICsgeG0pQl5uLzIgbW9kIChCXm4tMSkKKwkgRGl2aXNpb24gYnkgMiBpcyBhIGJpdHdpc2Ugcm90YXRpb24uCisKKwkgQXNzdW1lcyB4cCBub3JtYWxpc2VkIG1vZCAoQl5uKzEpLgorCisJIFRoZSByZXNpZHVlIGNsYXNzIFswXSBpcyByZXByZXNlbnRlZCBieSBbQl5uLTFdOyBleGNlcHQgd2hlbgorCSBib3RoIGlucHV0IGFyZSBaRVJPLgorICAgICAgKi8KKworI2lmIEhBVkVfTkFUSVZFX21wbl9yc2gxYWRkX24gfHwgSEFWRV9OQVRJVkVfbXBuX3JzaDFhZGRfbmMKKyNpZiBIQVZFX05BVElWRV9tcG5fcnNoMWFkZF9uYworICAgICAgY3kgPSBtcG5fcnNoMWFkZF9uYyhycCwgcnAsIHhwLCBuLCB4cFtuXSk7IC8qIEJebiA9IDEgKi8KKyAgICAgIGhpID0gY3kgPDwgKEdNUF9OVU1CX0JJVFMgLSAxKTsKKyAgICAgIGN5ID0gMDsKKyAgICAgIC8qIG5leHQgdXBkYXRlIG9mIHJwW24tMV0gd2lsbCBzZXQgY3kgPSAxIG9ubHkgaWYgcnBbbi0xXSs9aGkKKwkgb3ZlcmZsb3dzLCBpLmUuIGEgZnVydGhlciBpbmNyZW1lbnQgd2lsbCBub3Qgb3ZlcmZsb3cgYWdhaW4uICovCisjZWxzZSAvKiAhIF9uYyAqLworICAgICAgY3kgPSB4cFtuXSArIG1wbl9yc2gxYWRkX24ocnAsIHJwLCB4cCwgbik7IC8qIEJebiA9IDEgKi8KKyAgICAgIGhpID0gKGN5PDwoR01QX05VTUJfQklUUy0xKSkmR01QX05VTUJfTUFTSzsgLyogKGN5JjEpIDw8IC4uLiAqLworICAgICAgY3kgPj49IDE7CisgICAgICAvKiBjeSA9IDEgb25seSBpZiB4cFtuXSA9IDEgaS5lLiB7eHAsbn0gPSBaRVJPLCB0aGlzIGltcGxpZXMgdGhhdAorCSB0aGUgcnNoMWFkZCB3YXMgYSBzaW1wbGUgcnNoaWZ0OiB0aGUgdG9wIGJpdCBpcyAwLiBjeT0xID0+IGhpPTAuICovCisjZW5kaWYKKyNpZiBHTVBfTkFJTF9CSVRTID09IDAKKyAgICAgIGFkZF9zc2FhYWEoY3ksIHJwW24tMV0sIGN5LCBycFtuLTFdLCBDTlNUX0xJTUIoMCksIGhpKTsKKyNlbHNlCisgICAgICBjeSArPSAoaGkgJiBycFtuLTFdKSA+PiAoR01QX05VTUJfQklUUy0xKTsKKyAgICAgIHJwW24tMV0gXj0gaGk7CisjZW5kaWYKKyNlbHNlIC8qICEgSEFWRV9OQVRJVkVfbXBuX3JzaDFhZGRfbiAqLworI2lmIEhBVkVfTkFUSVZFX21wbl9hZGRfbmMKKyAgICAgIGN5ID0gbXBuX2FkZF9uYyhycCwgcnAsIHhwLCBuLCB4cFtuXSk7CisjZWxzZSAvKiAhIF9uYyAqLworICAgICAgY3kgPSB4cFtuXSArIG1wbl9hZGRfbihycCwgcnAsIHhwLCBuKTsgLyogeHBbbl0gPT0gMSBpbXBsaWVzIHt4cCxufSA9PSBaRVJPICovCisjZW5kaWYKKyAgICAgIGN5ICs9IChycFswXSYxKTsKKyAgICAgIG1wbl9yc2hpZnQocnAsIHJwLCBuLCAxKTsKKyAgICAgIEFTU0VSVCAoY3kgPD0gMik7CisgICAgICBoaSA9IChjeTw8KEdNUF9OVU1CX0JJVFMtMSkpJkdNUF9OVU1CX01BU0s7IC8qIChjeSYxKSA8PCAuLi4gKi8KKyAgICAgIGN5ID4+PSAxOworICAgICAgLyogV2UgY2FuIGhhdmUgY3kgIT0gMCBvbmx5IGlmIGhpID0gMC4uLiAqLworICAgICAgQVNTRVJUICgocnBbbi0xXSAmIEdNUF9OVU1CX0hJR0hCSVQpID09IDApOworICAgICAgcnBbbi0xXSB8PSBoaTsKKyAgICAgIC8qIC4uLiBycFtuLTFdICsgY3kgY2FuIG5vdCBvdmVyZmxvdywgdGhlIGZvbGxvd2luZyBJTkNSIGlzIGNvcnJlY3QuICovCisjZW5kaWYKKyAgICAgIEFTU0VSVCAoY3kgPD0gMSk7CisgICAgICAvKiBOZXh0IGluY3JlbWVudCBjYW4gbm90IG92ZXJmbG93LCByZWFkIHRoZSBwcmV2aW91cyBjb21tZW50cyBhYm91dCBjeS4gKi8KKyAgICAgIEFTU0VSVCAoKGN5ID09IDApIHx8ICgocnBbbi0xXSAmIEdNUF9OVU1CX0hJR0hCSVQpID09IDApKTsKKyAgICAgIE1QTl9JTkNSX1UocnAsIG4sIGN5KTsKKworICAgICAgLyogQ29tcHV0ZSB0aGUgaGlnaGVzdCBoYWxmOgorCSAoWyh4cCArIHhtKS8yIG1vZCAoQl5uLTEpXSAtIHhwICkgKiBCXm4KKyAgICAgICAqLworICAgICAgaWYgKFVOTElLRUxZICgyKmFuIDwgcm4pKQorCXsKKwkgIC8qIE5vdGUgdGhhdCBpbiB0aGlzIGNhc2UsIHRoZSBvbmx5IHdheSB0aGUgcmVzdWx0IGNhbiBlcXVhbAorCSAgICAgemVybyBtb2QgQl57cm59IC0gMSBpcyBpZiB0aGUgaW5wdXQgaXMgemVybywgYW5kCisJICAgICB0aGVuIHRoZSBvdXRwdXQgb2YgYm90aCB0aGUgcmVjdXJzaXZlIGNhbGxzIGFuZCB0aGlzIENSVAorCSAgICAgcmVjb25zdHJ1Y3Rpb24gaXMgemVybywgbm90IEJee3JufSAtIDEuICovCisJICBjeSA9IG1wbl9zdWJfbiAocnAgKyBuLCBycCwgeHAsIDIqYW4gLSBuKTsKKworCSAgLyogRklYTUU6IFRoaXMgc3VidHJhY3Rpb24gb2YgdGhlIGhpZ2ggcGFydHMgaXMgbm90IHJlYWxseQorCSAgICAgbmVjZXNzYXJ5LCB3ZSBkbyBpdCB0byBnZXQgdGhlIGNhcnJ5IG91dCwgYW5kIGZvciBzYW5pdHkKKwkgICAgIGNoZWNraW5nLiAqLworCSAgY3kgPSB4cFtuXSArIG1wbl9zdWJfbmMgKHhwICsgMiphbiAtIG4sIHJwICsgMiphbiAtIG4sCisJCQkJICAgeHAgKyAyKmFuIC0gbiwgcm4gLSAyKmFuLCBjeSk7CisJICBBU1NFUlQgKG1wbl96ZXJvX3AgKHhwICsgMiphbiAtIG4rMSwgcm4gLSAxIC0gMiphbikpOworCSAgY3kgPSBtcG5fc3ViXzEgKHJwLCBycCwgMiphbiwgY3kpOworCSAgQVNTRVJUIChjeSA9PSAoeHAgKyAyKmFuIC0gbilbMF0pOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBjeSA9IHhwW25dICsgbXBuX3N1Yl9uIChycCArIG4sIHJwLCB4cCwgbik7CisJICAvKiBjeSA9IDEgb25seSBpZiB7eHAsbisxfSBpcyBub3QgWkVSTywgaS5lLiB7cnAsbn0gaXMgbm90IFpFUk8uCisJICAgICBERUNSIHdpbGwgYWZmZWN0IF9hdCBtb3N0XyB0aGUgbG93ZXN0IG4gbGltYnMuICovCisJICBNUE5fREVDUl9VIChycCwgMipuLCBjeSk7CisJfQorI3VuZGVmIGEwCisjdW5kZWYgYTEKKyN1bmRlZiB4cAorI3VuZGVmIHNwMQorICAgIH0KK30KKworbXBfc2l6ZV90CittcG5fc3FybW9kX2JubTFfbmV4dF9zaXplIChtcF9zaXplX3QgbikKK3sKKyAgbXBfc2l6ZV90IG5oOworCisgIGlmIChCRUxPV19USFJFU0hPTEQgKG4sICAgICBTUVJNT0RfQk5NMV9USFJFU0hPTEQpKQorICAgIHJldHVybiBuOworICBpZiAoQkVMT1dfVEhSRVNIT0xEIChuLCA0ICogKFNRUk1PRF9CTk0xX1RIUkVTSE9MRCAtIDEpICsgMSkpCisgICAgcmV0dXJuIChuICsgKDItMSkpICYgKC0yKTsKKyAgaWYgKEJFTE9XX1RIUkVTSE9MRCAobiwgOCAqIChTUVJNT0RfQk5NMV9USFJFU0hPTEQgLSAxKSArIDEpKQorICAgIHJldHVybiAobiArICg0LTEpKSAmICgtNCk7CisKKyAgbmggPSAobiArIDEpID4+IDE7CisKKyAgaWYgKEJFTE9XX1RIUkVTSE9MRCAobmgsIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQpKQorICAgIHJldHVybiAobiArICg4LTEpKSAmICgtOCk7CisKKyAgcmV0dXJuIDIgKiBtcG5fZmZ0X25leHRfc2l6ZSAobmgsIG1wbl9mZnRfYmVzdF9rIChuaCwgMSkpOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3NxcnRyZW0uYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9zcXJ0cmVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M2ZGQ5YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9zcXJ0cmVtLmMKQEAgLTAsMCArMSw1NTUgQEAKKy8qIG1wbl9zcXJ0cmVtIC0tIHNxdWFyZSByb290IGFuZCByZW1haW5kZXIKKworICAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFBhdWwgWmltbWVybWFubiAobW9zdCBjb2RlKSwKKyAgIFRvcmJqb3JuIEdyYW5sdW5kIChtcG5fc3FydHJlbTEpIGFuZCBNYXJjbyBCb2RyYXRvIChtcG5fZGNfc3FydCkuCisKKyAgIFRIRSBGVU5DVElPTlMgSU4gVEhJUyBGSUxFIEVYQ0VQVCBtcG5fc3FydHJlbSBBUkUgSU5URVJOQUwgV0lUSCBNVVRBQkxFCisgICBJTlRFUkZBQ0VTLiAgSVQgSVMgT05MWSBTQUZFIFRPIFJFQUNIIFRIRU0gVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuCisgICBJTiBGQUNULCBJVCBJUyBBTE1PU1QgR1VBUkFOVEVFRCBUSEFUIFRIRVkgV0lMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEKKyAgIEZVVFVSRSBHTVAgUkVMRUFTRS4KKworQ29weXJpZ2h0IDE5OTktMjAwMiwgMjAwNCwgMjAwNSwgMjAwOCwgMjAxMCwgMjAxMiwgMjAxNSwgMjAxNyBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKworLyogU2VlICJLYXJhdHN1YmEgU3F1YXJlIFJvb3QiLCByZWZlcmVuY2UgaW4gZ21wLnRleGkuICAqLworCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKyNpbmNsdWRlICJsb25nbG9uZy5oIgorI2RlZmluZSBVU0VfRElWQVBQUl9RIDEKKyNkZWZpbmUgVFJBQ0UoeCkKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaW52c3FydHRhYlszODRdID0gLyogVGhlIGNvbW1vbiAweDEwMCB3YXMgcmVtb3ZlZCAqLworeworICAweGZmLDB4ZmQsMHhmYiwweGY5LDB4ZjcsMHhmNSwweGYzLDB4ZjIsIC8qIHNxcnQoMS84MCkuLnNxcnQoMS84NykgKi8KKyAgMHhmMCwweGVlLDB4ZWMsMHhlYSwweGU5LDB4ZTcsMHhlNSwweGU0LCAvKiBzcXJ0KDEvODgpLi5zcXJ0KDEvOGYpICovCisgIDB4ZTIsMHhlMCwweGRmLDB4ZGQsMHhkYiwweGRhLDB4ZDgsMHhkNywgLyogc3FydCgxLzkwKS4uc3FydCgxLzk3KSAqLworICAweGQ1LDB4ZDQsMHhkMiwweGQxLDB4Y2YsMHhjZSwweGNjLDB4Y2IsIC8qIHNxcnQoMS85OCkuLnNxcnQoMS85ZikgKi8KKyAgMHhjOSwweGM4LDB4YzYsMHhjNSwweGM0LDB4YzIsMHhjMSwweGMwLCAvKiBzcXJ0KDEvYTApLi5zcXJ0KDEvYTcpICovCisgIDB4YmUsMHhiZCwweGJjLDB4YmEsMHhiOSwweGI4LDB4YjcsMHhiNSwgLyogc3FydCgxL2E4KS4uc3FydCgxL2FmKSAqLworICAweGI0LDB4YjMsMHhiMiwweGIwLDB4YWYsMHhhZSwweGFkLDB4YWMsIC8qIHNxcnQoMS9iMCkuLnNxcnQoMS9iNykgKi8KKyAgMHhhYSwweGE5LDB4YTgsMHhhNywweGE2LDB4YTUsMHhhNCwweGEzLCAvKiBzcXJ0KDEvYjgpLi5zcXJ0KDEvYmYpICovCisgIDB4YTIsMHhhMCwweDlmLDB4OWUsMHg5ZCwweDljLDB4OWIsMHg5YSwgLyogc3FydCgxL2MwKS4uc3FydCgxL2M3KSAqLworICAweDk5LDB4OTgsMHg5NywweDk2LDB4OTUsMHg5NCwweDkzLDB4OTIsIC8qIHNxcnQoMS9jOCkuLnNxcnQoMS9jZikgKi8KKyAgMHg5MSwweDkwLDB4OGYsMHg4ZSwweDhkLDB4OGMsMHg4YywweDhiLCAvKiBzcXJ0KDEvZDApLi5zcXJ0KDEvZDcpICovCisgIDB4OGEsMHg4OSwweDg4LDB4ODcsMHg4NiwweDg1LDB4ODQsMHg4MywgLyogc3FydCgxL2Q4KS4uc3FydCgxL2RmKSAqLworICAweDgzLDB4ODIsMHg4MSwweDgwLDB4N2YsMHg3ZSwweDdlLDB4N2QsIC8qIHNxcnQoMS9lMCkuLnNxcnQoMS9lNykgKi8KKyAgMHg3YywweDdiLDB4N2EsMHg3OSwweDc5LDB4NzgsMHg3NywweDc2LCAvKiBzcXJ0KDEvZTgpLi5zcXJ0KDEvZWYpICovCisgIDB4NzYsMHg3NSwweDc0LDB4NzMsMHg3MiwweDcyLDB4NzEsMHg3MCwgLyogc3FydCgxL2YwKS4uc3FydCgxL2Y3KSAqLworICAweDZmLDB4NmYsMHg2ZSwweDZkLDB4NmQsMHg2YywweDZiLDB4NmEsIC8qIHNxcnQoMS9mOCkuLnNxcnQoMS9mZikgKi8KKyAgMHg2YSwweDY5LDB4NjgsMHg2OCwweDY3LDB4NjYsMHg2NiwweDY1LCAvKiBzcXJ0KDEvMTAwKS4uc3FydCgxLzEwNykgKi8KKyAgMHg2NCwweDY0LDB4NjMsMHg2MiwweDYyLDB4NjEsMHg2MCwweDYwLCAvKiBzcXJ0KDEvMTA4KS4uc3FydCgxLzEwZikgKi8KKyAgMHg1ZiwweDVlLDB4NWUsMHg1ZCwweDVjLDB4NWMsMHg1YiwweDVhLCAvKiBzcXJ0KDEvMTEwKS4uc3FydCgxLzExNykgKi8KKyAgMHg1YSwweDU5LDB4NTksMHg1OCwweDU3LDB4NTcsMHg1NiwweDU2LCAvKiBzcXJ0KDEvMTE4KS4uc3FydCgxLzExZikgKi8KKyAgMHg1NSwweDU0LDB4NTQsMHg1MywweDUzLDB4NTIsMHg1MiwweDUxLCAvKiBzcXJ0KDEvMTIwKS4uc3FydCgxLzEyNykgKi8KKyAgMHg1MCwweDUwLDB4NGYsMHg0ZiwweDRlLDB4NGUsMHg0ZCwweDRkLCAvKiBzcXJ0KDEvMTI4KS4uc3FydCgxLzEyZikgKi8KKyAgMHg0YywweDRiLDB4NGIsMHg0YSwweDRhLDB4NDksMHg0OSwweDQ4LCAvKiBzcXJ0KDEvMTMwKS4uc3FydCgxLzEzNykgKi8KKyAgMHg0OCwweDQ3LDB4NDcsMHg0NiwweDQ2LDB4NDUsMHg0NSwweDQ0LCAvKiBzcXJ0KDEvMTM4KS4uc3FydCgxLzEzZikgKi8KKyAgMHg0NCwweDQzLDB4NDMsMHg0MiwweDQyLDB4NDEsMHg0MSwweDQwLCAvKiBzcXJ0KDEvMTQwKS4uc3FydCgxLzE0NykgKi8KKyAgMHg0MCwweDNmLDB4M2YsMHgzZSwweDNlLDB4M2QsMHgzZCwweDNjLCAvKiBzcXJ0KDEvMTQ4KS4uc3FydCgxLzE0ZikgKi8KKyAgMHgzYywweDNiLDB4M2IsMHgzYSwweDNhLDB4MzksMHgzOSwweDM5LCAvKiBzcXJ0KDEvMTUwKS4uc3FydCgxLzE1NykgKi8KKyAgMHgzOCwweDM4LDB4MzcsMHgzNywweDM2LDB4MzYsMHgzNSwweDM1LCAvKiBzcXJ0KDEvMTU4KS4uc3FydCgxLzE1ZikgKi8KKyAgMHgzNSwweDM0LDB4MzQsMHgzMywweDMzLDB4MzIsMHgzMiwweDMyLCAvKiBzcXJ0KDEvMTYwKS4uc3FydCgxLzE2NykgKi8KKyAgMHgzMSwweDMxLDB4MzAsMHgzMCwweDJmLDB4MmYsMHgyZiwweDJlLCAvKiBzcXJ0KDEvMTY4KS4uc3FydCgxLzE2ZikgKi8KKyAgMHgyZSwweDJkLDB4MmQsMHgyZCwweDJjLDB4MmMsMHgyYiwweDJiLCAvKiBzcXJ0KDEvMTcwKS4uc3FydCgxLzE3NykgKi8KKyAgMHgyYiwweDJhLDB4MmEsMHgyOSwweDI5LDB4MjksMHgyOCwweDI4LCAvKiBzcXJ0KDEvMTc4KS4uc3FydCgxLzE3ZikgKi8KKyAgMHgyNywweDI3LDB4MjcsMHgyNiwweDI2LDB4MjYsMHgyNSwweDI1LCAvKiBzcXJ0KDEvMTgwKS4uc3FydCgxLzE4NykgKi8KKyAgMHgyNCwweDI0LDB4MjQsMHgyMywweDIzLDB4MjMsMHgyMiwweDIyLCAvKiBzcXJ0KDEvMTg4KS4uc3FydCgxLzE4ZikgKi8KKyAgMHgyMSwweDIxLDB4MjEsMHgyMCwweDIwLDB4MjAsMHgxZiwweDFmLCAvKiBzcXJ0KDEvMTkwKS4uc3FydCgxLzE5NykgKi8KKyAgMHgxZiwweDFlLDB4MWUsMHgxZSwweDFkLDB4MWQsMHgxZCwweDFjLCAvKiBzcXJ0KDEvMTk4KS4uc3FydCgxLzE5ZikgKi8KKyAgMHgxYywweDFiLDB4MWIsMHgxYiwweDFhLDB4MWEsMHgxYSwweDE5LCAvKiBzcXJ0KDEvMWEwKS4uc3FydCgxLzFhNykgKi8KKyAgMHgxOSwweDE5LDB4MTgsMHgxOCwweDE4LDB4MTgsMHgxNywweDE3LCAvKiBzcXJ0KDEvMWE4KS4uc3FydCgxLzFhZikgKi8KKyAgMHgxNywweDE2LDB4MTYsMHgxNiwweDE1LDB4MTUsMHgxNSwweDE0LCAvKiBzcXJ0KDEvMWIwKS4uc3FydCgxLzFiNykgKi8KKyAgMHgxNCwweDE0LDB4MTMsMHgxMywweDEzLDB4MTIsMHgxMiwweDEyLCAvKiBzcXJ0KDEvMWI4KS4uc3FydCgxLzFiZikgKi8KKyAgMHgxMiwweDExLDB4MTEsMHgxMSwweDEwLDB4MTAsMHgxMCwweDBmLCAvKiBzcXJ0KDEvMWMwKS4uc3FydCgxLzFjNykgKi8KKyAgMHgwZiwweDBmLDB4MGYsMHgwZSwweDBlLDB4MGUsMHgwZCwweDBkLCAvKiBzcXJ0KDEvMWM4KS4uc3FydCgxLzFjZikgKi8KKyAgMHgwZCwweDBjLDB4MGMsMHgwYywweDBjLDB4MGIsMHgwYiwweDBiLCAvKiBzcXJ0KDEvMWQwKS4uc3FydCgxLzFkNykgKi8KKyAgMHgwYSwweDBhLDB4MGEsMHgwYSwweDA5LDB4MDksMHgwOSwweDA5LCAvKiBzcXJ0KDEvMWQ4KS4uc3FydCgxLzFkZikgKi8KKyAgMHgwOCwweDA4LDB4MDgsMHgwNywweDA3LDB4MDcsMHgwNywweDA2LCAvKiBzcXJ0KDEvMWUwKS4uc3FydCgxLzFlNykgKi8KKyAgMHgwNiwweDA2LDB4MDYsMHgwNSwweDA1LDB4MDUsMHgwNCwweDA0LCAvKiBzcXJ0KDEvMWU4KS4uc3FydCgxLzFlZikgKi8KKyAgMHgwNCwweDA0LDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMiwweDAyLCAvKiBzcXJ0KDEvMWYwKS4uc3FydCgxLzFmNykgKi8KKyAgMHgwMiwweDAyLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMCwweDAwICAvKiBzcXJ0KDEvMWY4KS4uc3FydCgxLzFmZikgKi8KK307CisKKy8qIENvbXB1dGUgcyA9IGZsb29yKHNxcnQoYTApKSwgYW5kICpycCA9IGEwIC0gc14yLiAgKi8KKworI2lmIEdNUF9OVU1CX0JJVFMgPiAzMgorI2RlZmluZSBNQUdJQyBDTlNUX0xJTUIoMHgxMDAwMDAwMDAwMCkJLyogMHhmZmU3ZGViYmZjIDwgTUFHSUMgPCAweDIzMmIxODUwZjQxMCAqLworI2Vsc2UKKyNkZWZpbmUgTUFHSUMgQ05TVF9MSU1CKDB4MTAwMDAwKQkJLyogMHhmZWU2ZiA8IE1BR0lDIDwgMHgyOWNiYzggKi8KKyNlbmRpZgorCitzdGF0aWMgbXBfbGltYl90CittcG5fc3FydHJlbTEgKG1wX3B0ciBycCwgbXBfbGltYl90IGEwKQoreworI2lmIEdNUF9OVU1CX0JJVFMgPiAzMgorICBtcF9saW1iX3QgYTE7CisjZW5kaWYKKyAgbXBfbGltYl90IHgwLCB0MiwgdCwgeDI7CisgIHVuc2lnbmVkIGFiaXRzOworCisgIEFTU0VSVF9BTFdBWVMgKEdNUF9OQUlMX0JJVFMgPT0gMCk7CisgIEFTU0VSVF9BTFdBWVMgKEdNUF9MSU1CX0JJVFMgPT0gMzIgfHwgR01QX0xJTUJfQklUUyA9PSA2NCk7CisgIEFTU0VSVCAoYTAgPj0gR01QX05VTUJfSElHSEJJVCAvIDIpOworCisgIC8qIFVzZSBOZXd0b24gaXRlcmF0aW9ucyBmb3IgYXBwcm94aW1hdGluZyAxL3NxcnQoYSkgaW5zdGVhZCBvZiBzcXJ0KGEpLAorICAgICBzaW5jZSB3ZSBjYW4gZG8gdGhlIGZvcm1lciB3aXRob3V0IGRpdmlzaW9uLiAgQXMgcGFydCBvZiB0aGUgbGFzdAorICAgICBpdGVyYXRpb24gY29udmVydCBmcm9tIDEvc3FydChhKSB0byBzcXJ0KGEpLiAgKi8KKworICBhYml0cyA9IGEwID4+IChHTVBfTElNQl9CSVRTIC0gMSAtIDgpOwkvKiBleHRyYWN0IGJpdHMgZm9yIHRhYmxlIGxvb2t1cCAqLworICB4MCA9IDB4MTAwIHwgaW52c3FydHRhYlthYml0cyAtIDB4ODBdOwkvKiBpbml0aWFsIDEvc3FydChhKSAqLworCisgIC8qIHgwIGlzIG5vdyBhbiA4IGJpdHMgYXBwcm94aW1hdGlvbiBvZiAxL3NxcnQoYTApICovCisKKyNpZiBHTVBfTlVNQl9CSVRTID4gMzIKKyAgYTEgPSBhMCA+PiAoR01QX0xJTUJfQklUUyAtIDEgLSAzMik7CisgIHQgPSAobXBfbGltYl9zaWduZWRfdCkgKENOU1RfTElNQigweDIwMDAwMDAwMDAwMDApIC0gMHgzMDAwMCAtIGExICogeDAgKiB4MCkgPj4gMTY7CisgIHgwID0gKHgwIDw8IDE2KSArICgobXBfbGltYl9zaWduZWRfdCkgKHgwICogdCkgPj4gKDE2KzIpKTsKKworICAvKiB4MCBpcyBub3cgYSAxNiBiaXRzIGFwcHJveGltYXRpb24gb2YgMS9zcXJ0KGEwKSAqLworCisgIHQyID0geDAgKiAoYTAgPj4gKDMyLTgpKTsKKyAgdCA9IHQyID4+IDI1OworICB0ID0gKChtcF9saW1iX3NpZ25lZF90KSAoKGEwIDw8IDE0KSAtIHQgKiB0IC0gTUFHSUMpID4+ICgzMi04KSk7CisgIHgwID0gdDIgKyAoKG1wX2xpbWJfc2lnbmVkX3QpICh4MCAqIHQpID4+IDE1KTsKKyAgeDAgPj49IDMyOworI2Vsc2UKKyAgdDIgPSB4MCAqIChhMCA+PiAoMTYtOCkpOworICB0ID0gdDIgPj4gMTM7CisgIHQgPSAoKG1wX2xpbWJfc2lnbmVkX3QpICgoYTAgPDwgNikgLSB0ICogdCAtIE1BR0lDKSA+PiAoMTYtOCkpOworICB4MCA9IHQyICsgKChtcF9saW1iX3NpZ25lZF90KSAoeDAgKiB0KSA+PiA3KTsKKyAgeDAgPj49IDE2OworI2VuZGlmCisKKyAgLyogeDAgaXMgbm93IGEgZnVsbCBsaW1iIGFwcHJveGltYXRpb24gb2Ygc3FydChhMCkgKi8KKworICB4MiA9IHgwICogeDA7CisgIGlmICh4MiArIDIqeDAgPD0gYTAgLSAxKQorICAgIHsKKyAgICAgIHgyICs9IDIqeDAgKyAxOworICAgICAgeDArKzsKKyAgICB9CisKKyAgKnJwID0gYTAgLSB4MjsKKyAgcmV0dXJuIHgwOworfQorCisKKyNkZWZpbmUgUHJlYyAoR01QX05VTUJfQklUUyA+PiAxKQorI2lmICEgZGVmaW5lZChTUVJUUkVNMl9JTlBMQUNFKQorI2RlZmluZSBTUVJUUkVNMl9JTlBMQUNFIDAKKyNlbmRpZgorCisvKiBzYW1lIGFzIG1wbl9zcXJ0cmVtLCBidXQgZm9yIHNpemU9MiBhbmQge25wLCAyfSBub3JtYWxpemVkCisgICByZXR1cm4gY2Mgc3VjaCB0aGF0IHtucCwgMn0gPSBzcFswXV4yICsgY2MqMl5HTVBfTlVNQl9CSVRTICsgcnBbMF0gKi8KKyNpZiBTUVJUUkVNMl9JTlBMQUNFCisjZGVmaW5lIENBTExfU1FSVFJFTTJfSU5QTEFDRShzcCxycCkgbXBuX3NxcnRyZW0yIChzcCwgcnApCitzdGF0aWMgbXBfbGltYl90CittcG5fc3FydHJlbTIgKG1wX3B0ciBzcCwgbXBfcHRyIHJwKQoreworICBtcF9zcmNwdHIgbnAgPSBycDsKKyNlbHNlCisjZGVmaW5lIENBTExfU1FSVFJFTTJfSU5QTEFDRShzcCxycCkgbXBuX3NxcnRyZW0yIChzcCwgcnAsIHJwKQorc3RhdGljIG1wX2xpbWJfdAorbXBuX3NxcnRyZW0yIChtcF9wdHIgc3AsIG1wX3B0ciBycCwgbXBfc3JjcHRyIG5wKQoreworI2VuZGlmCisgIG1wX2xpbWJfdCBxLCB1LCBucDAsIHNwMCwgcnAwLCBxMjsKKyAgaW50IGNjOworCisgIEFTU0VSVCAobnBbMV0gPj0gR01QX05VTUJfSElHSEJJVCAvIDIpOworCisgIG5wMCA9IG5wWzBdOworICBzcDAgPSBtcG5fc3FydHJlbTEgKHJwLCBucFsxXSk7CisgIHJwMCA9IHJwWzBdOworICAvKiBycDAgPD0gMipzcDAgPCAyXihQcmVjICsgMSkgKi8KKyAgcnAwID0gKHJwMCA8PCAoUHJlYyAtIDEpKSArIChucDAgPj4gKFByZWMgKyAxKSk7CisgIHEgPSBycDAgLyBzcDA7CisgIC8qIHEgPD0gMl5QcmVjLCBpZiBxID0gMl5QcmVjLCByZWR1Y2UgdGhlIG92ZXJlc3RpbWF0ZS4gKi8KKyAgcSAtPSBxID4+IFByZWM7CisgIC8qIG5vdyB3ZSBoYXZlIHEgPCAyXlByZWMgKi8KKyAgdSA9IHJwMCAtIHEgKiBzcDA7CisgIC8qIG5vdyB3ZSBoYXZlIChycFswXTw8UHJlYyArIG5wMD4+UHJlYykvMiA9IHEgKiBzcDAgKyB1ICovCisgIHNwMCA9IChzcDAgPDwgUHJlYykgfCBxOworICBjYyA9IHUgPj4gKFByZWMgLSAxKTsKKyAgcnAwID0gKCh1IDw8IChQcmVjICsgMSkpICYgR01QX05VTUJfTUFTSykgKyAobnAwICYgKChDTlNUX0xJTUIgKDEpIDw8IChQcmVjICsgMSkpIC0gMSkpOworICAvKiBzdWJ0cmFjdCBxICogcSBmcm9tIHJwICovCisgIHEyID0gcSAqIHE7CisgIGNjIC09IHJwMCA8IHEyOworICBycDAgLT0gcTI7CisgIGlmIChjYyA8IDApCisgICAgeworICAgICAgcnAwICs9IHNwMDsKKyAgICAgIGNjICs9IHJwMCA8IHNwMDsKKyAgICAgIC0tc3AwOworICAgICAgcnAwICs9IHNwMDsKKyAgICAgIGNjICs9IHJwMCA8IHNwMDsKKyAgICB9CisKKyAgcnBbMF0gPSBycDA7CisgIHNwWzBdID0gc3AwOworICByZXR1cm4gY2M7Cit9CisKKy8qIHdyaXRlcyBpbiB7c3AsIG59IHRoZSBzcXVhcmUgcm9vdCAocm91bmRlZCB0b3dhcmRzIHplcm8pIG9mIHtucCwgMm59LAorICAgYW5kIGluIHtucCwgbn0gdGhlIGxvdyBuIGxpbWJzIG9mIHRoZSByZW1haW5kZXIsIHJldHVybnMgdGhlIGhpZ2gKKyAgIGxpbWIgb2YgdGhlIHJlbWFpbmRlciAod2hpY2ggaXMgMCBvciAxKS4KKyAgIEFzc3VtZXMge25wLCAybn0gaXMgbm9ybWFsaXplZCwgaS5lLiBucFsybi0xXSA+PSBCLzQKKyAgIHdoZXJlIEI9Ml5HTVBfTlVNQl9CSVRTLgorICAgTmVlZHMgYSBzY3JhdGNoIG9mIG4vMisxIGxpbWJzLiAqLworc3RhdGljIG1wX2xpbWJfdAorbXBuX2RjX3NxcnRyZW0gKG1wX3B0ciBzcCwgbXBfcHRyIG5wLCBtcF9zaXplX3QgbiwgbXBfbGltYl90IGFwcHJveCwgbXBfcHRyIHNjcmF0Y2gpCit7CisgIG1wX2xpbWJfdCBxOwkJCS8qIGNhcnJ5IG91dCBvZiB7c3AsIG59ICovCisgIGludCBjLCBiOwkJCS8qIGNhcnJ5IG91dCBvZiByZW1haW5kZXIgKi8KKyAgbXBfc2l6ZV90IGwsIGg7CisKKyAgQVNTRVJUIChuID4gMSk7CisgIEFTU0VSVCAobnBbMiAqIG4gLSAxXSA+PSBHTVBfTlVNQl9ISUdIQklUIC8gMik7CisKKyAgbCA9IG4gLyAyOworICBoID0gbiAtIGw7CisgIGlmIChoID09IDEpCisgICAgcSA9IENBTExfU1FSVFJFTTJfSU5QTEFDRSAoc3AgKyBsLCBucCArIDIgKiBsKTsKKyAgZWxzZQorICAgIHEgPSBtcG5fZGNfc3FydHJlbSAoc3AgKyBsLCBucCArIDIgKiBsLCBoLCAwLCBzY3JhdGNoKTsKKyAgaWYgKHEgIT0gMCkKKyAgICBBU1NFUlRfQ0FSUlkgKG1wbl9zdWJfbiAobnAgKyAyICogbCwgbnAgKyAyICogbCwgc3AgKyBsLCBoKSk7CisgIFRSQUNFKHByaW50ZigidGRpdl9xcigsLCwsJXUsLCV1KSAtPiAldVxuIiwgKHVuc2lnbmVkKSBuLCAodW5zaWduZWQpIGgsICh1bnNpZ25lZCkgKG4gLSBoICsgMSkpKTsKKyAgbXBuX3RkaXZfcXIgKHNjcmF0Y2gsIG5wICsgbCwgMCwgbnAgKyBsLCBuLCBzcCArIGwsIGgpOworICBxICs9IHNjcmF0Y2hbbF07CisgIGMgPSBzY3JhdGNoWzBdICYgMTsKKyAgbXBuX3JzaGlmdCAoc3AsIHNjcmF0Y2gsIGwsIDEpOworICBzcFtsIC0gMV0gfD0gKHEgPDwgKEdNUF9OVU1CX0JJVFMgLSAxKSkgJiBHTVBfTlVNQl9NQVNLOworICBpZiAoVU5MSUtFTFkgKChzcFswXSAmIGFwcHJveCkgIT0gMCkpIC8qIChzcFswXSAmIG1hc2spID4gMSAqLworICAgIHJldHVybiAxOyAvKiBSZW1haW5kZXIgaXMgbm9uLXplcm8gKi8KKyAgcSA+Pj0gMTsKKyAgaWYgKGMgIT0gMCkKKyAgICBjID0gbXBuX2FkZF9uIChucCArIGwsIG5wICsgbCwgc3AgKyBsLCBoKTsKKyAgVFJBQ0UocHJpbnRmKCJzcXIoLCwldSlcbiIsICh1bnNpZ25lZCkgbCkpOworICBtcG5fc3FyIChucCArIG4sIHNwLCBsKTsKKyAgYiA9IHEgKyBtcG5fc3ViX24gKG5wLCBucCwgbnAgKyBuLCAyICogbCk7CisgIGMgLT0gKGwgPT0gaCkgPyBiIDogbXBuX3N1Yl8xIChucCArIDIgKiBsLCBucCArIDIgKiBsLCAxLCAobXBfbGltYl90KSBiKTsKKworICBpZiAoYyA8IDApCisgICAgeworICAgICAgcSA9IG1wbl9hZGRfMSAoc3AgKyBsLCBzcCArIGwsIGgsIHEpOworI2lmIEhBVkVfTkFUSVZFX21wbl9hZGRsc2gxX25faXAxIHx8IEhBVkVfTkFUSVZFX21wbl9hZGRsc2gxX24KKyAgICAgIGMgKz0gbXBuX2FkZGxzaDFfbl9pcDEgKG5wLCBzcCwgbikgKyAyICogcTsKKyNlbHNlCisgICAgICBjICs9IG1wbl9hZGRtdWxfMSAobnAsIHNwLCBuLCBDTlNUX0xJTUIoMikpICsgMiAqIHE7CisjZW5kaWYKKyAgICAgIGMgLT0gbXBuX3N1Yl8xIChucCwgbnAsIG4sIENOU1RfTElNQigxKSk7CisgICAgICBxIC09IG1wbl9zdWJfMSAoc3AsIHNwLCBuLCBDTlNUX0xJTUIoMSkpOworICAgIH0KKworICByZXR1cm4gYzsKK30KKworI2lmIFVTRV9ESVZBUFBSX1EKK3N0YXRpYyB2b2lkCittcG5fZGl2YXBwcl9xIChtcF9wdHIgcXAsIG1wX3NyY3B0ciBucCwgbXBfc2l6ZV90IG5uLCBtcF9zcmNwdHIgZHAsIG1wX3NpemVfdCBkbiwgbXBfcHRyIHNjcmF0Y2gpCit7CisgIGdtcF9waTFfdCBpbnY7CisgIG1wX2xpbWJfdCBxaDsKKyAgQVNTRVJUIChkbiA+IDIpOworICBBU1NFUlQgKG5uID49IGRuKTsKKyAgQVNTRVJUICgoZHBbZG4tMV0gJiBHTVBfTlVNQl9ISUdIQklUKSAhPSAwKTsKKworICBNUE5fQ09QWSAoc2NyYXRjaCwgbnAsIG5uKTsKKyAgaW52ZXJ0X3BpMSAoaW52LCBkcFtkbi0xXSwgZHBbZG4tMl0pOworICBpZiAoQkVMT1dfVEhSRVNIT0xEIChkbiwgRENfRElWQVBQUl9RX1RIUkVTSE9MRCkpCisgICAgcWggPSBtcG5fc2JwaTFfZGl2YXBwcl9xIChxcCwgc2NyYXRjaCwgbm4sIGRwLCBkbiwgaW52LmludjMyKTsKKyAgZWxzZSBpZiAoQkVMT1dfVEhSRVNIT0xEIChkbiwgTVVfRElWQVBQUl9RX1RIUkVTSE9MRCkpCisgICAgcWggPSBtcG5fZGNwaTFfZGl2YXBwcl9xIChxcCwgc2NyYXRjaCwgbm4sIGRwLCBkbiwgJmludik7CisgIGVsc2UKKyAgICB7CisgICAgICBtcF9zaXplX3QgaXRjaCA9IG1wbl9tdV9kaXZhcHByX3FfaXRjaCAobm4sIGRuLCAwKTsKKyAgICAgIFRNUF9ERUNMOworICAgICAgVE1QX01BUks7CisgICAgICAvKiBTYWRseSwgc2NyYXRjaCBpcyB0b28gc21hbGwuICovCisgICAgICBxaCA9IG1wbl9tdV9kaXZhcHByX3EgKHFwLCBucCwgbm4sIGRwLCBkbiwgVE1QX0FMTE9DX0xJTUJTIChpdGNoKSk7CisgICAgICBUTVBfRlJFRTsKKyAgICB9CisgIHFwIFtubiAtIGRuXSA9IHFoOworfQorI2VuZGlmCisKKy8qIHdyaXRlcyBpbiB7c3AsIG59IHRoZSBzcXVhcmUgcm9vdCAocm91bmRlZCB0b3dhcmRzIHplcm8pIG9mIHtucCwgMm4tb2RkfSwKKyAgIHJldHVybnMgemVybyBpZiB0aGUgb3BlcmFuZCB3YXMgYSBwZXJmZWN0IHNxdWFyZSwgb25lIG90aGVyd2lzZS4KKyAgIEFzc3VtZXMge25wLCAybi1vZGR9KjRebnNoIGlzIG5vcm1hbGl6ZWQsIGkuZS4gQiA+IG5wWzJuLTEtb2RkXSo0Xm5zaCA+PSBCLzQKKyAgIHdoZXJlIEI9Ml5HTVBfTlVNQl9CSVRTLgorICAgVEhJTks6IEluIHRoZSBvZGQgY2FzZSwgdGhyZWUgbW9yZSAoZHVtbXkpIGxpbWJzIGFyZSB0YWtlbiBpbnRvIGFjY291bnQsCisgICB3aGVuIG5zaCBpcyBtYXhpbWFsLCB0d28gbGltYnMgYXJlIGRpc2NhcmRlZCBmcm9tIHRoZSByZXN1bHQgb2YgdGhlCisgICBkaXZpc2lvbi4gVG9vIG11Y2g/IElzIGEgc2luZ2xlIGR1bW15IGxpbWIgZW5vdWdoPyAqLworc3RhdGljIGludAorbXBuX2RjX3NxcnQgKG1wX3B0ciBzcCwgbXBfc3JjcHRyIG5wLCBtcF9zaXplX3QgbiwgdW5zaWduZWQgbnNoLCB1bnNpZ25lZCBvZGQpCit7CisgIG1wX2xpbWJfdCBxOwkJCS8qIGNhcnJ5IG91dCBvZiB7c3AsIG59ICovCisgIGludCBjOwkJCS8qIGNhcnJ5IG91dCBvZiByZW1haW5kZXIgKi8KKyAgbXBfc2l6ZV90IGwsIGg7CisgIG1wX3B0ciBxcCwgdHAsIHNjcmF0Y2g7CisgIFRNUF9ERUNMOworICBUTVBfTUFSSzsKKworICBBU1NFUlQgKG5wWzIgKiBuIC0gMSAtIG9kZF0gIT0gMCk7CisgIEFTU0VSVCAobiA+IDQpOworICBBU1NFUlQgKG5zaCA8IEdNUF9OVU1CX0JJVFMgLyAyKTsKKworICBsID0gKG4gLSAxKSAvIDI7CisgIGggPSBuIC0gbDsKKyAgQVNTRVJUIChuID49IGwgKyAyICYmIGwgKyAyID49IGggJiYgaCA+IGwgJiYgbCA+PSAxICsgb2RkKTsKKyAgc2NyYXRjaCA9IFRNUF9BTExPQ19MSU1CUyAobCArIDIgKiBuICsgNSAtIFVTRV9ESVZBUFBSX1EpOyAvKiBuICsgMi1VU0VfRElWQVBQUl9RICovCisgIHRwID0gc2NyYXRjaCArIG4gKyAyIC0gVVNFX0RJVkFQUFJfUTsgLyogbiArIGggKyAxLCBidXQgdHAgWy0xXSBpcyB3cml0YWJsZSAqLworICBpZiAobnNoICE9IDApCisgICAgeworICAgICAgLyogbyBpcyB1c2VkIHRvIGV4YWN0bHkgc2V0IHRoZSBsb3dlc3QgYml0cyBvZiB0aGUgZGl2aWRlbmQsIGlzIGl0IG5lZWRlZD8gKi8KKyAgICAgIGludCBvID0gbCA+ICgxICsgb2RkKTsKKyAgICAgIEFTU0VSVF9OT0NBUlJZIChtcG5fbHNoaWZ0ICh0cCAtIG8sIG5wICsgbCAtIDEgLSBvIC0gb2RkLCBuICsgaCArIDEgKyBvLCAyICogbnNoKSk7CisgICAgfQorICBlbHNlCisgICAgTVBOX0NPUFkgKHRwLCBucCArIGwgLSAxIC0gb2RkLCBuICsgaCArIDEpOworICBxID0gbXBuX2RjX3NxcnRyZW0gKHNwICsgbCwgdHAgKyBsICsgMSwgaCwgMCwgc2NyYXRjaCk7CisgIGlmIChxICE9IDApCisgICAgQVNTRVJUX0NBUlJZIChtcG5fc3ViX24gKHRwICsgbCArIDEsIHRwICsgbCArIDEsIHNwICsgbCwgaCkpOworICBxcCA9IHRwICsgbiArIDE7IC8qIGwgKyAyICovCisgIFRSQUNFKHByaW50ZigiZGl2KGFwcHIpX3EoLCwldSwsJXUpIC0+ICV1IFxuIiwgKHVuc2lnbmVkKSBuKzEsICh1bnNpZ25lZCkgaCwgKHVuc2lnbmVkKSAobiArIDEgLSBoICsgMSkpKTsKKyNpZiBVU0VfRElWQVBQUl9RCisgIG1wbl9kaXZhcHByX3EgKHFwLCB0cCwgbiArIDEsIHNwICsgbCwgaCwgc2NyYXRjaCk7CisjZWxzZQorICBtcG5fZGl2X3EgKHFwLCB0cCwgbiArIDEsIHNwICsgbCwgaCwgc2NyYXRjaCk7CisjZW5kaWYKKyAgcSArPSBxcCBbbCArIDFdOworICBjID0gMTsKKyAgaWYgKHEgPiAxKQorICAgIHsKKyAgICAgIC8qIEZJWE1FOiBpZiBzIT0wIHdlIHdpbGwgc2hpZnQgbGF0ZXIsIGEgbm9vcCBvbiB0aGlzIGFyZWEuICovCisgICAgICBNUE5fRklMTCAoc3AsIGwsIEdNUF9OVU1CX01BWCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogRklYTUU6IGlmIHMhPTAgd2Ugd2lsbCBzaGlmdCBhZ2FpbiBsYXRlciwgc2hpZnQganVzdCBvbmNlLiAqLworICAgICAgbXBuX3JzaGlmdCAoc3AsIHFwICsgMSwgbCwgMSk7CisgICAgICBzcFtsIC0gMV0gfD0gcSA8PCAoR01QX05VTUJfQklUUyAtIDEpOworICAgICAgaWYgKCgocXBbMF0gPj4gKDIgKyBVU0VfRElWQVBQUl9RKSkgfCAvKiA8IDMgKyA0KlVTRV9ESVZBUFBSX1EgKi8KKwkgICAocXBbMV0gJiAoR01QX05VTUJfTUFTSyA+PiAoKEdNUF9OVU1CX0JJVFMgPj4gb2RkKS0gbnNoIC0gMSkpKSkgPT0gMCkKKwl7CisJICBtcF9saW1iX3QgY3k7CisJICAvKiBBcHByb3hpbWF0aW9uIGlzIG5vdCBnb29kIGVub3VnaCwgdGhlIGV4dHJhIGxpbWIoKyBuc2ggYml0cykKKwkgICAgIGlzIHNtYWxsZXIgdGhhbiBuZWVkZWQgdG8gYWJzb3JiIHRoZSBwb3NzaWJsZSBlcnJvci4gKi8KKwkgIC8qIHtxcCArIDEsIGwgKyAxfSBlcXVhbHMgMip7c3AsIGx9ICovCisJICAvKiBGSVhNRTogdXNlIG11bGxvIG9yIHdyYXAtYXJvdW5kLCBvciBkaXJlY3RseSBldmFsdWF0ZQorCSAgICAgcmVtYWluZGVyIHdpdGggYSBzaW5nbGUgc3FybW9kX2JubTEuICovCisJICBUUkFDRShwcmludGYoIm11bCgsLCV1LCwldSlcbiIsICh1bnNpZ25lZCkgaCwgKHVuc2lnbmVkKSAobCsxKSkpOworCSAgQVNTRVJUX05PQ0FSUlkgKG1wbl9tdWwgKHNjcmF0Y2gsIHNwICsgbCwgaCwgcXAgKyAxLCBsICsgMSkpOworCSAgLyogQ29tcHV0ZSB0aGUgcmVtYWluZGVyIG9mIHRoZSBwcmV2aW91cyBtcG5fZGl2KGFwcHIpX3EuICovCisJICBjeSA9IG1wbl9zdWJfbiAodHAgKyAxLCB0cCArIDEsIHNjcmF0Y2gsIGgpOworI2lmIFVTRV9ESVZBUFBSX1EgfHwgV0FOVF9BU1NFUlQKKwkgIE1QTl9ERUNSX1UgKHRwICsgMSArIGgsIGwsIGN5KTsKKyNpZiBVU0VfRElWQVBQUl9RCisJICBBU1NFUlQgKG1wbl9jbXAgKHRwICsgMSArIGgsIHNjcmF0Y2ggKyBoLCBsKSA8PSAwKTsKKwkgIGlmIChtcG5fY21wICh0cCArIDEgKyBoLCBzY3JhdGNoICsgaCwgbCkgPCAwKQorCSAgICB7CisJICAgICAgLyogTWF5IGhhcHBlbiBvbmx5IGlmIGRpdiByZXN1bHQgd2FzIG5vdCBleGFjdC4gKi8KKyNpZiBIQVZFX05BVElWRV9tcG5fYWRkbHNoMV9uX2lwMSB8fCBIQVZFX05BVElWRV9tcG5fYWRkbHNoMV9uCisJICAgICAgY3kgPSBtcG5fYWRkbHNoMV9uX2lwMSAodHAgKyAxLCBzcCArIGwsIGgpOworI2Vsc2UKKwkgICAgICBjeSA9IG1wbl9hZGRtdWxfMSAodHAgKyAxLCBzcCArIGwsIGgsIENOU1RfTElNQigyKSk7CisjZW5kaWYKKwkgICAgICBBU1NFUlRfTk9DQVJSWSAobXBuX2FkZF8xICh0cCArIDEgKyBoLCB0cCArIDEgKyBoLCBsLCBjeSkpOworCSAgICAgIE1QTl9ERUNSX1UgKHNwLCBsLCAxKTsKKwkgICAgfQorCSAgLyogQ2FuIHRoZSByb290IGJlIGV4YWN0IHdoZW4gYSBjb3JyZWN0aW9uIHdhcyBuZWVkZWQ/IFdlCisJICAgICBkaWQgbm90IGZpbmQgYW4gZXhhbXBsZSwgYnV0IGl0IGRlcGVuZHMgb24gZGl2YXBwcgorCSAgICAgaW50ZXJuYWxzLCBhbmQgd2UgY2FuIG5vdCBhc3N1bWUgaXQgdHJ1ZSBpbiBnZW5lcmFsLi4uKi8KKwkgIC8qIGVsc2UgKi8KKyNlbHNlIC8qIFdBTlRfQVNTRVJUICovCisJICBBU1NFUlQgKG1wbl9jbXAgKHRwICsgMSArIGgsIHNjcmF0Y2ggKyBoLCBsKSA9PSAwKTsKKyNlbmRpZgorI2VuZGlmCisJICBpZiAobXBuX3plcm9fcCAodHAgKyBsICsgMSwgaCAtIGwpKQorCSAgICB7CisJICAgICAgVFJBQ0UocHJpbnRmKCJzcXIoLCwldSlcbiIsICh1bnNpZ25lZCkgbCkpOworCSAgICAgIG1wbl9zcXIgKHNjcmF0Y2gsIHNwLCBsKTsKKwkgICAgICBjID0gbXBuX2NtcCAodHAgKyAxLCBzY3JhdGNoICsgbCwgbCk7CisJICAgICAgaWYgKGMgPT0gMCkKKwkJeworCQkgIGlmIChuc2ggIT0gMCkKKwkJICAgIHsKKwkJICAgICAgbXBuX2xzaGlmdCAodHAsIG5wLCBsLCAyICogbnNoKTsKKwkJICAgICAgbnAgPSB0cDsKKwkJICAgIH0KKwkJICBjID0gbXBuX2NtcCAobnAsIHNjcmF0Y2ggKyBvZGQsIGwgLSBvZGQpOworCQl9CisJICAgICAgaWYgKGMgPCAwKQorCQl7CisJCSAgTVBOX0RFQ1JfVSAoc3AsIGwsIDEpOworCQkgIGMgPSAxOworCQl9CisJICAgIH0KKwl9CisgICAgfQorICBUTVBfRlJFRTsKKworICBpZiAoKG9kZCB8IG5zaCkgIT0gMCkKKyAgICBtcG5fcnNoaWZ0IChzcCwgc3AsIG4sIG5zaCArIChvZGQgPyBHTVBfTlVNQl9CSVRTIC8gMiA6IDApKTsKKyAgcmV0dXJuIGM7Cit9CisKKworbXBfc2l6ZV90CittcG5fc3FydHJlbSAobXBfcHRyIHNwLCBtcF9wdHIgcnAsIG1wX3NyY3B0ciBucCwgbXBfc2l6ZV90IG5uKQoreworICBtcF9saW1iX3QgY2MsIGhpZ2gsIHJsOworICBpbnQgYzsKKyAgbXBfc2l6ZV90IHJuLCB0bjsKKyAgVE1QX0RFQ0w7CisKKyAgQVNTRVJUIChubiA+IDApOworICBBU1NFUlRfTVBOIChucCwgbm4pOworCisgIEFTU0VSVCAobnBbbm4gLSAxXSAhPSAwKTsKKyAgQVNTRVJUIChycCA9PSBOVUxMIHx8IE1QTl9TQU1FX09SX1NFUEFSQVRFX1AgKG5wLCBycCwgbm4pKTsKKyAgQVNTRVJUIChycCA9PSBOVUxMIHx8ICEgTVBOX09WRVJMQVBfUCAoc3AsIChubiArIDEpIC8gMiwgcnAsIG5uKSk7CisgIEFTU0VSVCAoISBNUE5fT1ZFUkxBUF9QIChzcCwgKG5uICsgMSkgLyAyLCBucCwgbm4pKTsKKworICBoaWdoID0gbnBbbm4gLSAxXTsKKyAgaWYgKGhpZ2ggJiAoR01QX05VTUJfSElHSEJJVCB8IChHTVBfTlVNQl9ISUdIQklUIC8gMikpKQorICAgIGMgPSAwOworICBlbHNlCisgICAgeworICAgICAgY291bnRfbGVhZGluZ196ZXJvcyAoYywgaGlnaCk7CisgICAgICBjIC09IEdNUF9OQUlMX0JJVFM7CisKKyAgICAgIGMgPSBjIC8gMjsgLyogd2UgaGF2ZSB0byBzaGlmdCBsZWZ0IGJ5IDJjIGJpdHMgdG8gbm9ybWFsaXplIHtucCwgbm59ICovCisgICAgfQorICBpZiAobm4gPT0gMSkgeworICAgIGlmIChjID09IDApCisgICAgICB7CisJc3BbMF0gPSBtcG5fc3FydHJlbTEgKCZybCwgaGlnaCk7CisJaWYgKHJwICE9IE5VTEwpCisJICBycFswXSA9IHJsOworICAgICAgfQorICAgIGVsc2UKKyAgICAgIHsKKwljYyA9IG1wbl9zcXJ0cmVtMSAoJnJsLCBoaWdoIDw8ICgyKmMpKSA+PiBjOworCXNwWzBdID0gY2M7CisJaWYgKHJwICE9IE5VTEwpCisJICBycFswXSA9IHJsID0gaGlnaCAtIGNjKmNjOworICAgICAgfQorICAgIHJldHVybiBybCAhPSAwOworICB9CisgIGlmIChubiA9PSAyKSB7CisgICAgbXBfbGltYl90IHRwIFsyXTsKKyAgICBpZiAocnAgPT0gTlVMTCkgcnAgPSB0cDsKKyAgICBpZiAoYyA9PSAwKQorICAgICAgeworI2lmIFNRUlRSRU0yX0lOUExBQ0UKKwlycFsxXSA9IGhpZ2g7CisJcnBbMF0gPSBucFswXTsKKwljYyA9IENBTExfU1FSVFJFTTJfSU5QTEFDRSAoc3AsIHJwKTsKKyNlbHNlCisJY2MgPSBtcG5fc3FydHJlbTIgKHNwLCBycCwgbnApOworI2VuZGlmCisJcnBbMV0gPSBjYzsKKwlyZXR1cm4gKChycFswXSB8IGNjKSAhPSAwKSArIGNjOworICAgICAgfQorICAgIGVsc2UKKyAgICAgIHsKKwlybCA9IG5wWzBdOworCXJwWzFdID0gKGhpZ2ggPDwgKDIqYykpIHwgKHJsID4+IChHTVBfTlVNQl9CSVRTIC0gMipjKSk7CisJcnBbMF0gPSBybCA8PCAoMipjKTsKKwlDQUxMX1NRUlRSRU0yX0lOUExBQ0UgKHNwLCBycCk7CisJY2MgPSBzcFswXSA+Pj0gYzsJLyogYyAhPSAwLCB0aGUgaGlnaGVzdCBiaXQgb2YgdGhlIHJvb3QgY2MgaXMgMC4gKi8KKwlycFswXSA9IHJsIC09IGNjKmNjOwkvKiBDb21wdXRlZCBtb2R1bG8gMl5HTVBfTElNQl9CSVRTLCBiZWNhdXNlIGl0J3Mgc21hbGxlci4gKi8KKwlyZXR1cm4gcmwgIT0gMDsKKyAgICAgIH0KKyAgfQorICB0biA9IChubiArIDEpIC8gMjsgLyogMip0biBpcyB0aGUgc21hbGxlc3QgZXZlbiBpbnRlZ2VyID49IG5uICovCisKKyAgaWYgKChycCA9PSBOVUxMKSAmJiAobm4gPiA4KSkKKyAgICByZXR1cm4gbXBuX2RjX3NxcnQgKHNwLCBucCwgdG4sIGMsIG5uICYgMSk7CisgIFRNUF9NQVJLOworICBpZiAoKChubiAmIDEpIHwgYykgIT0gMCkKKyAgICB7CisgICAgICBtcF9saW1iX3QgczBbMV0sIG1hc2s7CisgICAgICBtcF9wdHIgdHAsIHNjcmF0Y2g7CisgICAgICBUTVBfQUxMT0NfTElNQlNfMiAodHAsIDIgKiB0biwgc2NyYXRjaCwgdG4gLyAyICsgMSk7CisgICAgICB0cFswXSA9IDA7CSAgICAgLyogbmVlZGVkIG9ubHkgd2hlbiAyKnRuID4gbm4sIGJ1dCBzYXZlcyBhIHRlc3QgKi8KKyAgICAgIGlmIChjICE9IDApCisJbXBuX2xzaGlmdCAodHAgKyAobm4gJiAxKSwgbnAsIG5uLCAyICogYyk7CisgICAgICBlbHNlCisJTVBOX0NPUFkgKHRwICsgKG5uICYgMSksIG5wLCBubik7CisgICAgICBjICs9IChubiAmIDEpID8gR01QX05VTUJfQklUUyAvIDIgOiAwOwkJLyogYyBub3cgcmVwcmVzZW50cyBrICovCisgICAgICBtYXNrID0gKENOU1RfTElNQiAoMSkgPDwgYykgLSAxOworICAgICAgcmwgPSBtcG5fZGNfc3FydHJlbSAoc3AsIHRwLCB0biwgKHJwID09IE5VTEwpID8gbWFzayAtIDEgOiAwLCBzY3JhdGNoKTsKKyAgICAgIC8qIFdlIGhhdmUgMl4oMmspKk4gPSBTXjIgKyBSIHdoZXJlIGsgPSBjICsgKDJ0bi1ubikqR01QX05VTUJfQklUUy8yLAorCSB0aHVzIDJeKDJrKSpOID0gKFMtczApXjIgKyAyKlMqczAgLSBzMF4yICsgUiB3aGVyZSBzMD1TIG1vZCAyXmsgKi8KKyAgICAgIHMwWzBdID0gc3BbMF0gJiBtYXNrOwkvKiBTIG1vZCAyXmsgKi8KKyAgICAgIHJsICs9IG1wbl9hZGRtdWxfMSAodHAsIHNwLCB0biwgMiAqIHMwWzBdKTsJLyogUiA9IFIgKyAyKnMwKlMgKi8KKyAgICAgIGNjID0gbXBuX3N1Ym11bF8xICh0cCwgczAsIDEsIHMwWzBdKTsKKyAgICAgIHJsIC09ICh0biA+IDEpID8gbXBuX3N1Yl8xICh0cCArIDEsIHRwICsgMSwgdG4gLSAxLCBjYykgOiBjYzsKKyAgICAgIG1wbl9yc2hpZnQgKHNwLCBzcCwgdG4sIGMpOworICAgICAgdHBbdG5dID0gcmw7CisgICAgICBpZiAocnAgPT0gTlVMTCkKKwlycCA9IHRwOworICAgICAgYyA9IGMgPDwgMTsKKyAgICAgIGlmIChjIDwgR01QX05VTUJfQklUUykKKwl0bisrOworICAgICAgZWxzZQorCXsKKwkgIHRwKys7CisJICBjIC09IEdNUF9OVU1CX0JJVFM7CisJfQorICAgICAgaWYgKGMgIT0gMCkKKwltcG5fcnNoaWZ0IChycCwgdHAsIHRuLCBjKTsKKyAgICAgIGVsc2UKKwlNUE5fQ09QWV9JTkNSIChycCwgdHAsIHRuKTsKKyAgICAgIHJuID0gdG47CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKHJwICE9IG5wKQorCXsKKwkgIGlmIChycCA9PSBOVUxMKSAvKiBubiA8PSA4ICovCisJICAgIHJwID0gVE1QX1NBTExPQ19MSU1CUyAobm4pOworCSAgTVBOX0NPUFkgKHJwLCBucCwgbm4pOworCX0KKyAgICAgIHJuID0gdG4gKyAocnBbdG5dID0gbXBuX2RjX3NxcnRyZW0gKHNwLCBycCwgdG4sIDAsIFRNUF9BTExPQ19MSU1CUyh0biAvIDIgKyAxKSkpOworICAgIH0KKworICBNUE5fTk9STUFMSVpFIChycCwgcm4pOworCisgIFRNUF9GUkVFOworICByZXR1cm4gcm47Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvc3Ryb25nZmliby5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3N0cm9uZ2ZpYm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmQwMzhhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3N0cm9uZ2ZpYm8uYwpAQCAtMCwwICsxLDIxNiBAQAorLyogbXBuX2ZpYjJtIC0tIGNhbGN1bGF0ZSBGaWJvbmFjY2kgbnVtYmVycywgbW9kdWxvIG0uCisKK0NvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBNYXJjbyBCb2RyYXRvLgorCisgICBUSEUgRlVOQ1RJT05TIElOIFRISVMgRklMRSBBUkUgRk9SIElOVEVSTkFMIFVTRSBPTkxZLiAgVEhFWSdSRSBBTE1PU1QKKyAgIENFUlRBSU4gVE8gQkUgU1VCSkVDVCBUTyBJTkNPTVBBVElCTEUgQ0hBTkdFUyBPUiBESVNBUFBFQVIgQ09NUExFVEVMWSBJTgorICAgRlVUVVJFIEdOVSBNUCBSRUxFQVNFUy4KKworQ29weXJpZ2h0IDIwMDEsIDIwMDIsIDIwMDUsIDIwMDksIDIwMTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgImdtcC1pbXBsLmgiCisKKy8qIFN0b3JlcyB8e2FwLG59LXticCxufXwgaW4ge3JwLG59LAorICAgcmV0dXJucyB0aGUgc2lnbiBvZiB7YXAsbn0te2JwLG59LiAqLworc3RhdGljIGludAorYWJzX3N1Yl9uIChtcF9wdHIgcnAsIG1wX3NyY3B0ciBhcCwgbXBfc3JjcHRyIGJwLCBtcF9zaXplX3QgbikKK3sKKyAgbXBfbGltYl90ICB4LCB5OworICB3aGlsZSAoLS1uID49IDApCisgICAgeworICAgICAgeCA9IGFwW25dOworICAgICAgeSA9IGJwW25dOworICAgICAgaWYgKHggIT0geSkKKyAgICAgICAgeworICAgICAgICAgICsrbjsKKyAgICAgICAgICBpZiAoeCA+IHkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIEFTU0VSVF9OT0NBUlJZIChtcG5fc3ViX24gKHJwLCBhcCwgYnAsIG4pKTsKKyAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBBU1NFUlRfTk9DQVJSWSAobXBuX3N1Yl9uIChycCwgYnAsIGFwLCBuKSk7CisgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgcnBbbl0gPSAwOworICAgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIENvbXB1dGVzIGF0IG1vc3QgY291bnQgdGVybXMgb2YgdGhlIHNlcXVlbmNlIG5lZWRlZCBieSB0aGUKKyAgIEx1Y2FzLUxlaG1lci1SaWVzZWwgdGVzdCwgaW5kZXhpbmcgYmFja3dhcmQ6CisgICBMX2kgPSBMX3tpKzF9XjIgLSAyCisKKyAgIFRoZSBzZXF1ZW5jZSBpcyBjb21wdXRlZCBtb2R1bG8gTSA9IHttcCwgbW59LgorICAgVGhlIHN0YXJ0aW5nIHBvaW50IGlzIGdpdmVuIGluIExfe2NvdW50KzF9ID0ge2xwLCBtbn0uCisgICBUaGUgc2NyYXRjaCBwb2ludGVkIGJ5IHNwLCBuZWVkcyBhIHNwYWNlIG9mIGF0IGxlYXN0IDMgKiBtbiArIDEgbGltYnMuCisKKyAgIFJldHVybnMgdGhlIGluZGV4IGk+MCBpZiBMX2kgPSAwIChtb2QgTSkgaXMgZm91bmQgd2l0aGluIHRoZQorICAgY29tcHV0ZWQgY291bnQgdGVybXMgb2YgdGhlIHNlcXVlbmNlLiAgT3RoZXJ3aXNlIGl0IHJldHVybnMgemVyby4KKworICAgTm90ZTogKCsvLTIpXjItMj0yLCAoKy8tMSleMi0yPS0xLCAwXjItMj0tMgorICovCisKK3N0YXRpYyBtcF9iaXRjbnRfdAorbXBuX2xscml0ZXIgKG1wX3B0ciBscCwgbXBfc3JjcHRyIG1wLCBtcF9zaXplX3QgbW4sIG1wX2JpdGNudF90IGNvdW50LCBtcF9wdHIgc3ApCit7CisgIGRvCisgICAgeworICAgICAgbXBuX3NxciAoc3AsIGxwLCBtbik7CisgICAgICBtcG5fdGRpdl9xciAoc3AgKyAyICogbW4sIGxwLCAwLCBzcCwgMiAqIG1uLCBtcCwgbW4pOworICAgICAgaWYgKGxwWzBdIDwgNSkKKwl7CisJICAvKiBJZiBMXjIgJSBNIDwgNSwgfExeMiAlIE0gLSAyfCA8PSAyICovCisJICBpZiAobW4gPT0gMSB8fCBtcG5femVyb19wIChscCArIDEsIG1uIC0gMSkpCisJICAgIHJldHVybiAobHBbMF0gPT0gMikgPyBjb3VudCA6IDA7CisJICBlbHNlCisJICAgIE1QTl9ERUNSX1UgKGxwLCBtbiwgMik7CisJfQorICAgICAgZWxzZQorCWxwWzBdIC09IDI7CisgICAgfSB3aGlsZSAoLS1jb3VudCAhPSAwKTsKKyAgcmV0dXJuIDA7Cit9CisKKy8qIFN0b3JlIHRoZSBMdWNhcycgbnVtYmVyIExbbl0gYXQgbHAgKG1heWJlKSwgY29tcHV0ZWQgbW9kdWxvIG0uICBscAorICAgYW5kIHNjcmF0Y2ggc2hvdWxkIGhhdmUgcm9vbSBmb3IgbW4qMisxIGxpbWJzLgorCisgICBSZXR1cm5zIHRoZSBzaXplIG9mIExbbl0gbm9ybWFsbHkuCisKKyAgIElmIEZbbl0gaXMgemVybyBtb2R1bG8gbSwgb3IgTFtuXSBpcywgcmV0dXJucyAwIGFuZCBscCBpcworICAgdW5kZWZpbmVkLgorKi8KKworc3RhdGljIG1wX3NpemVfdAorbXBuX2x1Y20gKG1wX3B0ciBscCwgbXBfc3JjcHRyIG5wLCBtcF9zaXplX3Qgbm4sIG1wX3NyY3B0ciBtcCwgbXBfc2l6ZV90IG1uLCBtcF9wdHIgc2NyYXRjaCkKK3sKKyAgaW50CQluZWc7CisgIG1wX2xpbWJfdAljeTsKKworICBBU1NFUlQgKCEgTVBOX09WRVJMQVBfUCAobHAsIE1BWCgyKm1uKzEsNSksIHNjcmF0Y2gsIE1BWCgyKm1uKzEsNSkpKTsKKyAgQVNTRVJUIChubiA+IDApOworCisgIG5lZyA9IG1wbl9maWIybSAobHAsIHNjcmF0Y2gsIG5wLCBubiwgbXAsIG1uKTsKKworICAvKiBGW25dID0gKy8te2xwLCBtbn0sIEZbbi0xXSA9ICsvLXtzY3JhdGNoLCBtbn0gKi8KKyAgaWYgKG1wbl96ZXJvX3AgKGxwLCBtbikpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKG5lZykgLyogT25lIHNpZ24gaXMgb3Bwb3NpdGUsIHVzZSBzdWIgaW5zdGVhZCBvZiBhZGQuICovCisgICAgeworI2lmIEhBVkVfTkFUSVZFX21wbl9yc2Jsc2gxX24gfHwgSEFWRV9OQVRJVkVfbXBuX3N1YmxzaDFfbgorI2lmIEhBVkVfTkFUSVZFX21wbl9yc2Jsc2gxX24KKyAgICAgIGN5ID0gbXBuX3JzYmxzaDFfbiAobHAsIGxwLCBzY3JhdGNoLCBtbik7IC8qIExbbl0gPSArLy0oMkZbbi0xXS0oLUZbbl0pKSAqLworI2Vsc2UKKyAgICAgIGN5ID0gbXBuX3N1YmxzaDFfbiAobHAsIGxwLCBzY3JhdGNoLCBtbik7IC8qIExbbl0gPSAtLysoRltuXS0oLTJGW24tMV0pKSAqLworICAgICAgaWYgKGN5ICE9IDApCisJY3kgPSBtcG5fYWRkX24gKGxwLCBscCwgbXAsIG1uKSAtIGN5OworI2VuZGlmCisgICAgICBpZiAoY3kgPiAxKQorCWN5ICs9IG1wbl9hZGRfbiAobHAsIGxwLCBtcCwgbW4pOworI2Vsc2UKKyAgICAgIGN5ID0gbXBuX2xzaGlmdCAoc2NyYXRjaCwgc2NyYXRjaCwgbW4sIDEpOyAvKiAyRltuLTFdICovCisgICAgICBpZiAoVU5MSUtFTFkgKGN5KSkKKwljeSAtPSBtcG5fc3ViX24gKGxwLCBzY3JhdGNoLCBscCwgbW4pOyAvKiBMW25dID0gKy8tKDJGW24tMV0tKC1GW25dKSkgKi8KKyAgICAgIGVsc2UKKwlhYnNfc3ViX24gKGxwLCBscCwgc2NyYXRjaCwgbW4pOworI2VuZGlmCisgICAgICBBU1NFUlQgKGN5IDw9IDEpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyNpZiBIQVZFX05BVElWRV9tcG5fYWRkbHNoMV9uCisgICAgICBjeSA9IG1wbl9hZGRsc2gxX24gKGxwLCBscCwgc2NyYXRjaCwgbW4pOyAvKiBMW25dID0gKy8tKDJGW24tMV0rRltuXSkpICovCisjZWxzZQorICAgICAgY3kgPSBtcG5fbHNoaWZ0IChzY3JhdGNoLCBzY3JhdGNoLCBtbiwgMSk7CisgICAgICBjeSs9IG1wbl9hZGRfbiAobHAsIGxwLCBzY3JhdGNoLCBtbik7CisjZW5kaWYKKyAgICAgIEFTU0VSVCAoY3kgPD0gMik7CisgICAgfQorICB3aGlsZSAoY3kgfHwgbXBuX2NtcCAobHAsIG1wLCBtbikgPj0gMCkKKyAgICBjeSAtPSBtcG5fc3ViX24gKGxwLCBscCwgbXAsIG1uKTsKKyAgTVBOX05PUk1BTElaRSAobHAsIG1uKTsKKyAgcmV0dXJuIG1uOworfQorCitpbnQKK21wbl9zdHJvbmdmaWJvIChtcF9zcmNwdHIgbXAsIG1wX3NpemVfdCBtbiwgbXBfcHRyIHNjcmF0Y2gpCit7CisgIG1wX3B0cglscCwgc3A7CisgIG1wX3NpemVfdAllbjsKKyAgbXBfYml0Y250X3QJYjA7CisgIFRNUF9ERUNMOworCisjaWYgR01QX05VTUJfQklUUyAlIDQgPT0gMAorICBiMCA9IG1wbl9zY2FuMCAobXAsIDApOworI2Vsc2UKKyAgeworICAgIG1wel90IG0gPSBNUFpfUk9JTklUX04obXAsIG1uKTsKKyAgICBiMCA9IG1wel9zY2FuMCAobSwgMCk7CisgIH0KKyAgaWYgKFVOTElLRUxZIChiMCA9PSBtbiAqIEdNUF9OVU1CX0JJVFMpKQorICAgIHsKKyAgICAgIGVuID0gMTsKKyAgICAgIHNjcmF0Y2ggWzBdID0gMTsKKyAgICB9CisgIGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgIGludCBjbnQgPSBiMCAlIEdNUF9OVU1CX0JJVFM7CisgICAgICBlbiA9IGIwIC8gR01QX05VTUJfQklUUzsKKyAgICAgIGlmIChMSUtFTFkgKGNudCAhPSAwKSkKKwltcG5fcnNoaWZ0IChzY3JhdGNoLCBtcCArIGVuLCBtbiAtIGVuLCBjbnQpOworICAgICAgZWxzZQorCU1QTl9DT1BZIChzY3JhdGNoLCBtcCArIGVuLCBtbiAtIGVuKTsKKyAgICAgIGVuID0gbW4gLSBlbjsKKyAgICAgIHNjcmF0Y2ggWzBdIHw9IDE7CisgICAgICBlbiAtPSBzY3JhdGNoIFtlbiAtIDFdID09IDA7CisgICAgfQorICBUTVBfTUFSSzsKKworICBscCA9IFRNUF9BTExPQ19MSU1CUyAoNCAqIG1uICsgNik7CisgIHNwID0gbHAgKyAyICogbW4gKyAzOworICBlbiA9IG1wbl9sdWNtIChzcCwgc2NyYXRjaCwgZW4sIG1wLCBtbiwgbHApOworICBpZiAoZW4gIT0gMCAmJiBMSUtFTFkgKC0tYjAgIT0gMCkpCisgICAgeworICAgICAgbXBuX3NxciAobHAsIHNwLCBlbik7CisgICAgICBscCBbMF0gfD0gMjsgLyogVl4yICsgMiAqLworICAgICAgaWYgKExJS0VMWSAoMiAqIGVuID49IG1uKSkKKwltcG5fdGRpdl9xciAoc3AsIGxwLCAwLCBscCwgMiAqIGVuLCBtcCwgbW4pOworICAgICAgZWxzZQorCU1QTl9aRVJPIChscCArIDIgKiBlbiwgbW4gLSAyICogZW4pOworICAgICAgaWYgKCEgbXBuX3plcm9fcCAobHAsIG1uKSAmJiBMSUtFTFkgKC0tYjAgIT0gMCkpCisJYjAgPSBtcG5fbGxyaXRlciAobHAsIG1wLCBtbiwgYjAsIGxwICsgbW4gKyAxKTsKKyAgICB9CisgIFRNUF9GUkVFOworICByZXR1cm4gKGIwICE9IDApOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3N1Yi5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3N1Yi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmMGFmZDYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvc3ViLmMKQEAgLTAsMCArMSwzMyBAQAorLyogbXBuX3N1YiAtIHN1YnRyYWN0IG1wbiBmcm9tIG1wbi4KKworQ29weXJpZ2h0IDIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNkZWZpbmUgX19HTVBfRk9SQ0VfbXBuX3N1YiAxCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3N1Yl8xLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvc3ViXzEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjBmMTkxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3N1Yl8xLmMKQEAgLTAsMCArMSwzMyBAQAorLyogbXBuX3N1Yl8xIC0gc3VidHJhY3QgbGltYiBmcm9tIG1wbi4KKworQ29weXJpZ2h0IDIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNkZWZpbmUgX19HTVBfRk9SQ0VfbXBuX3N1Yl8xIDEKKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvc3ViX2VycjFfbi5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3N1Yl9lcnIxX24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWNhNTdlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3N1Yl9lcnIxX24uYwpAQCAtMCwwICsxLDEwMCBAQAorLyogbXBuX3N1Yl9lcnIxX24gLS0gc3ViX24gd2l0aCBvbmUgZXJyb3IgdGVybQorCisgICBDb250cmlidXRlZCBieSBEYXZpZCBIYXJ2ZXkuCisKKyAgIFRIRSBGVU5DVElPTiBJTiBUSElTIEZJTEUgSVMgSU5URVJOQUwgV0lUSCBBIE1VVEFCTEUgSU5URVJGQUNFLiAgSVQgSVMgT05MWQorICAgU0FGRSBUTyBSRUFDSCBJVCBUSFJPVUdIIERPQ1VNRU5URUQgSU5URVJGQUNFUy4gIElOIEZBQ1QsIElUIElTIEFMTU9TVAorICAgR1VBUkFOVEVFRCBUSEFUIElUJ0xMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR05VIE1QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworLyoKKyAgQ29tcHV0ZXM6CisKKyAgKDEpIHtycCxufSA6PSB7dXAsbn0gLSB7dnAsbn0gKGp1c3QgbGlrZSBtcG5fc3ViX24pIHdpdGggaW5jb21pbmcgYm9ycm93IGN5LAorICByZXR1cm4gdmFsdWUgaXMgYm9ycm93IG91dC4KKworICAoMikgTGV0IGNbaSsxXSA9IGJvcnJvdyBmcm9tIGktdGggbGltYiBzdWJ0cmFjdGlvbiAoY1swXSA9IGN5KS4KKyAgQ29tcHV0ZXMgY1sxXSp5cFtuLTFdICsgLi4uICsgY1tuXSp5cFswXSwgc3RvcmVzIHR3by1saW1iIHJlc3VsdCBhdCBlcC4KKworICBSZXF1aXJlcyBuID49IDEuCisKKyAgTm9uZSBvZiB0aGUgb3V0cHV0cyBtYXkgb3ZlcmxhcCBlYWNoIG90aGVyIG9yIGFueSBvZiB0aGUgaW5wdXRzLCBleGNlcHQKKyAgdGhhdCB7cnAsbn0gbWF5IGJlIGVxdWFsIHRvIHt1cCxufSBvciB7dnAsbn0uCisqLworbXBfbGltYl90CittcG5fc3ViX2VycjFfbiAobXBfcHRyIHJwLCBtcF9zcmNwdHIgdXAsIG1wX3NyY3B0ciB2cCwKKwkJbXBfcHRyIGVwLCBtcF9zcmNwdHIgeXAsCisgICAgICAgICAgICAgICAgbXBfc2l6ZV90IG4sIG1wX2xpbWJfdCBjeSkKK3sKKyAgbXBfbGltYl90IGVsLCBlaCwgdWwsIHZsLCB5bCwgemwsIHJsLCBzbCwgY3kxLCBjeTI7CisKKyAgQVNTRVJUIChuID49IDEpOworICBBU1NFUlQgKE1QTl9TQU1FX09SX1NFUEFSQVRFX1AgKHJwLCB1cCwgbikpOworICBBU1NFUlQgKE1QTl9TQU1FX09SX1NFUEFSQVRFX1AgKHJwLCB2cCwgbikpOworICBBU1NFUlQgKCEgTVBOX09WRVJMQVBfUCAocnAsIG4sIHlwLCBuKSk7CisgIEFTU0VSVCAoISBNUE5fT1ZFUkxBUF9QIChlcCwgMiwgdXAsIG4pKTsKKyAgQVNTRVJUICghIE1QTl9PVkVSTEFQX1AgKGVwLCAyLCB2cCwgbikpOworICBBU1NFUlQgKCEgTVBOX09WRVJMQVBfUCAoZXAsIDIsIHlwLCBuKSk7CisgIEFTU0VSVCAoISBNUE5fT1ZFUkxBUF9QIChlcCwgMiwgcnAsIG4pKTsKKworICB5cCArPSBuIC0gMTsKKyAgZWwgPSBlaCA9IDA7CisKKyAgZG8KKyAgICB7CisgICAgICB5bCA9ICp5cC0tOworICAgICAgdWwgPSAqdXArKzsKKyAgICAgIHZsID0gKnZwKys7CisKKyAgICAgIC8qIG9yZGluYXJ5IHN1Yl9uICovCisgICAgICBTVUJDX0xJTUIgKGN5MSwgc2wsIHVsLCB2bCk7CisgICAgICBTVUJDX0xJTUIgKGN5MiwgcmwsIHNsLCBjeSk7CisgICAgICBjeSA9IGN5MSB8IGN5MjsKKyAgICAgICpycCsrID0gcmw7CisKKyAgICAgIC8qIHVwZGF0ZSAoZWg6ZWwpICovCisgICAgICB6bCA9ICgtY3kpICYgeWw7CisgICAgICBlbCArPSB6bDsKKyAgICAgIGVoICs9IGVsIDwgemw7CisgICAgfQorICB3aGlsZSAoLS1uKTsKKworI2lmIEdNUF9OQUlMX0JJVFMgIT0gMAorICBlaCA9IChlaCA8PCBHTVBfTkFJTF9CSVRTKSArIChlbCA+PiBHTVBfTlVNQl9CSVRTKTsKKyAgZWwgJj0gR01QX05VTUJfTUFTSzsKKyNlbmRpZgorCisgIGVwWzBdID0gZWw7CisgIGVwWzFdID0gZWg7CisKKyAgcmV0dXJuIGN5OworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3N1Yl9lcnIyX24uYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9zdWJfZXJyMl9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVkZjhkNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9zdWJfZXJyMl9uLmMKQEAgLTAsMCArMSwxMTYgQEAKKy8qIG1wbl9zdWJfZXJyMl9uIC0tIHN1Yl9uIHdpdGggdHdvIGVycm9yIHRlcm1zCisKKyAgIENvbnRyaWJ1dGVkIGJ5IERhdmlkIEhhcnZleS4KKworICAgVEhFIEZVTkNUSU9OIElOIFRISVMgRklMRSBJUyBJTlRFUk5BTCBXSVRIIEEgTVVUQUJMRSBJTlRFUkZBQ0UuICBJVCBJUyBPTkxZCisgICBTQUZFIFRPIFJFQUNIIElUIFRIUk9VR0ggRE9DVU1FTlRFRCBJTlRFUkZBQ0VTLiAgSU4gRkFDVCwgSVQgSVMgQUxNT1NUCisgICBHVUFSQU5URUVEIFRIQVQgSVQnTEwgQ0hBTkdFIE9SIERJU0FQUEVBUiBJTiBBIEZVVFVSRSBHTlUgTVAgUkVMRUFTRS4KKworQ29weXJpZ2h0IDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCisvKgorICBDb21wdXRlczoKKworICAoMSkge3JwLG59IDo9IHt1cCxufSAtIHt2cCxufSAoanVzdCBsaWtlIG1wbl9zdWJfbikgd2l0aCBpbmNvbWluZyBib3Jyb3cgY3ksCisgIHJldHVybiB2YWx1ZSBpcyBib3Jyb3cgb3V0LgorCisgICgyKSBMZXQgY1tpKzFdID0gYm9ycm93IGZyb20gaS10aCBsaW1iIHN1YnRyYWN0aW9uIChjWzBdID0gY3kpLgorICBDb21wdXRlcyBjWzFdKnlwMVtuLTFdICsgLi4uICsgY1tuXSp5cDFbMF0sCisgICAgICAgICAgIGNbMV0qeXAyW24tMV0gKyAuLi4gKyBjW25dKnlwMlswXSwKKyAgc3RvcmVzIHR3by1saW1iIHJlc3VsdHMgYXQge2VwLDJ9IGFuZCB7ZXArMiwyfSByZXNwZWN0aXZlbHkuCisKKyAgUmVxdWlyZXMgbiA+PSAxLgorCisgIE5vbmUgb2YgdGhlIG91dHB1dHMgbWF5IG92ZXJsYXAgZWFjaCBvdGhlciBvciBhbnkgb2YgdGhlIGlucHV0cywgZXhjZXB0CisgIHRoYXQge3JwLG59IG1heSBiZSBlcXVhbCB0byB7dXAsbn0gb3Ige3ZwLG59LgorKi8KK21wX2xpbWJfdAorbXBuX3N1Yl9lcnIyX24gKG1wX3B0ciBycCwgbXBfc3JjcHRyIHVwLCBtcF9zcmNwdHIgdnAsCisgICAgICAgICAgICAgICAgbXBfcHRyIGVwLCBtcF9zcmNwdHIgeXAxLCBtcF9zcmNwdHIgeXAyLAorICAgICAgICAgICAgICAgIG1wX3NpemVfdCBuLCBtcF9saW1iX3QgY3kpCit7CisgIG1wX2xpbWJfdCBlbDEsIGVoMSwgZWwyLCBlaDIsIHVsLCB2bCwgeWwxLCB5bDIsIHpsMSwgemwyLCBybCwgc2wsIGN5MSwgY3kyOworCisgIEFTU0VSVCAobiA+PSAxKTsKKyAgQVNTRVJUIChNUE5fU0FNRV9PUl9TRVBBUkFURV9QIChycCwgdXAsIG4pKTsKKyAgQVNTRVJUIChNUE5fU0FNRV9PUl9TRVBBUkFURV9QIChycCwgdnAsIG4pKTsKKyAgQVNTRVJUICghIE1QTl9PVkVSTEFQX1AgKHJwLCBuLCB5cDEsIG4pKTsKKyAgQVNTRVJUICghIE1QTl9PVkVSTEFQX1AgKHJwLCBuLCB5cDIsIG4pKTsKKyAgQVNTRVJUICghIE1QTl9PVkVSTEFQX1AgKGVwLCA0LCB1cCwgbikpOworICBBU1NFUlQgKCEgTVBOX09WRVJMQVBfUCAoZXAsIDQsIHZwLCBuKSk7CisgIEFTU0VSVCAoISBNUE5fT1ZFUkxBUF9QIChlcCwgNCwgeXAxLCBuKSk7CisgIEFTU0VSVCAoISBNUE5fT1ZFUkxBUF9QIChlcCwgNCwgeXAyLCBuKSk7CisgIEFTU0VSVCAoISBNUE5fT1ZFUkxBUF9QIChlcCwgNCwgcnAsIG4pKTsKKworICB5cDEgKz0gbiAtIDE7CisgIHlwMiArPSBuIC0gMTsKKyAgZWwxID0gZWgxID0gMDsKKyAgZWwyID0gZWgyID0gMDsKKworICBkbworICAgIHsKKyAgICAgIHlsMSA9ICp5cDEtLTsKKyAgICAgIHlsMiA9ICp5cDItLTsKKyAgICAgIHVsID0gKnVwKys7CisgICAgICB2bCA9ICp2cCsrOworCisgICAgICAvKiBvcmRpbmFyeSBzdWJfbiAqLworICAgICAgU1VCQ19MSU1CIChjeTEsIHNsLCB1bCwgdmwpOworICAgICAgU1VCQ19MSU1CIChjeTIsIHJsLCBzbCwgY3kpOworICAgICAgY3kgPSBjeTEgfCBjeTI7CisgICAgICAqcnArKyA9IHJsOworCisgICAgICAvKiB1cGRhdGUgKGVoMTplbDEpICovCisgICAgICB6bDEgPSAoLWN5KSAmIHlsMTsKKyAgICAgIGVsMSArPSB6bDE7CisgICAgICBlaDEgKz0gZWwxIDwgemwxOworCisgICAgICAvKiB1cGRhdGUgKGVoMjplbDIpICovCisgICAgICB6bDIgPSAoLWN5KSAmIHlsMjsKKyAgICAgIGVsMiArPSB6bDI7CisgICAgICBlaDIgKz0gZWwyIDwgemwyOworICAgIH0KKyAgd2hpbGUgKC0tbik7CisKKyNpZiBHTVBfTkFJTF9CSVRTICE9IDAKKyAgZWgxID0gKGVoMSA8PCBHTVBfTkFJTF9CSVRTKSArIChlbDEgPj4gR01QX05VTUJfQklUUyk7CisgIGVsMSAmPSBHTVBfTlVNQl9NQVNLOworICBlaDIgPSAoZWgyIDw8IEdNUF9OQUlMX0JJVFMpICsgKGVsMiA+PiBHTVBfTlVNQl9CSVRTKTsKKyAgZWwyICY9IEdNUF9OVU1CX01BU0s7CisjZW5kaWYKKworICBlcFswXSA9IGVsMTsKKyAgZXBbMV0gPSBlaDE7CisgIGVwWzJdID0gZWwyOworICBlcFszXSA9IGVoMjsKKworICByZXR1cm4gY3k7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvc3ViX2VycjNfbi5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3N1Yl9lcnIzX24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGIzYzYzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3N1Yl9lcnIzX24uYwpAQCAtMCwwICsxLDEzMSBAQAorLyogbXBuX3N1Yl9lcnIzX24gLS0gc3ViX24gd2l0aCB0aHJlZSBlcnJvciB0ZXJtcworCisgICBDb250cmlidXRlZCBieSBEYXZpZCBIYXJ2ZXkuCisKKyAgIFRIRSBGVU5DVElPTiBJTiBUSElTIEZJTEUgSVMgSU5URVJOQUwgV0lUSCBBIE1VVEFCTEUgSU5URVJGQUNFLiAgSVQgSVMgT05MWQorICAgU0FGRSBUTyBSRUFDSCBJVCBUSFJPVUdIIERPQ1VNRU5URUQgSU5URVJGQUNFUy4gIElOIEZBQ1QsIElUIElTIEFMTU9TVAorICAgR1VBUkFOVEVFRCBUSEFUIElUJ0xMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR05VIE1QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworLyoKKyAgQ29tcHV0ZXM6CisKKyAgKDEpIHtycCxufSA6PSB7dXAsbn0gLSB7dnAsbn0gKGp1c3QgbGlrZSBtcG5fc3ViX24pIHdpdGggaW5jb21pbmcgYm9ycm93IGN5LAorICByZXR1cm4gdmFsdWUgaXMgYm9ycm93IG91dC4KKworICAoMikgTGV0IGNbaSsxXSA9IGJvcnJvdyBmcm9tIGktdGggbGltYiBzdWJ0cmFjdGlvbiAoY1swXSA9IGN5KS4KKyAgQ29tcHV0ZXMgY1sxXSp5cDFbbi0xXSArIC4uLiArIGNbbl0qeXAxWzBdLAorICAgICAgICAgICBjWzFdKnlwMltuLTFdICsgLi4uICsgY1tuXSp5cDJbMF0sCisgICAgICAgICAgIGNbMV0qeXAzW24tMV0gKyAuLi4gKyBjW25dKnlwM1swXSwKKyAgc3RvcmVzIHR3by1saW1iIHJlc3VsdHMgYXQge2VwLDJ9LCB7ZXArMiwyfSBhbmQge2VwKzQsMn0gcmVzcGVjdGl2ZWx5LgorCisgIFJlcXVpcmVzIG4gPj0gMS4KKworICBOb25lIG9mIHRoZSBvdXRwdXRzIG1heSBvdmVybGFwIGVhY2ggb3RoZXIgb3IgYW55IG9mIHRoZSBpbnB1dHMsIGV4Y2VwdAorICB0aGF0IHtycCxufSBtYXkgYmUgZXF1YWwgdG8ge3VwLG59IG9yIHt2cCxufS4KKyovCittcF9saW1iX3QKK21wbl9zdWJfZXJyM19uIChtcF9wdHIgcnAsIG1wX3NyY3B0ciB1cCwgbXBfc3JjcHRyIHZwLAorICAgICAgICAgICAgICAgIG1wX3B0ciBlcCwgbXBfc3JjcHRyIHlwMSwgbXBfc3JjcHRyIHlwMiwgbXBfc3JjcHRyIHlwMywKKyAgICAgICAgICAgICAgICBtcF9zaXplX3QgbiwgbXBfbGltYl90IGN5KQoreworICBtcF9saW1iX3QgZWwxLCBlaDEsIGVsMiwgZWgyLCBlbDMsIGVoMywgdWwsIHZsLCB5bDEsIHlsMiwgeWwzLCB6bDEsIHpsMiwgemwzLCBybCwgc2wsIGN5MSwgY3kyOworCisgIEFTU0VSVCAobiA+PSAxKTsKKyAgQVNTRVJUIChNUE5fU0FNRV9PUl9TRVBBUkFURV9QIChycCwgdXAsIG4pKTsKKyAgQVNTRVJUIChNUE5fU0FNRV9PUl9TRVBBUkFURV9QIChycCwgdnAsIG4pKTsKKyAgQVNTRVJUICghIE1QTl9PVkVSTEFQX1AgKHJwLCBuLCB5cDEsIG4pKTsKKyAgQVNTRVJUICghIE1QTl9PVkVSTEFQX1AgKHJwLCBuLCB5cDIsIG4pKTsKKyAgQVNTRVJUICghIE1QTl9PVkVSTEFQX1AgKHJwLCBuLCB5cDMsIG4pKTsKKyAgQVNTRVJUICghIE1QTl9PVkVSTEFQX1AgKGVwLCA2LCB1cCwgbikpOworICBBU1NFUlQgKCEgTVBOX09WRVJMQVBfUCAoZXAsIDYsIHZwLCBuKSk7CisgIEFTU0VSVCAoISBNUE5fT1ZFUkxBUF9QIChlcCwgNiwgeXAxLCBuKSk7CisgIEFTU0VSVCAoISBNUE5fT1ZFUkxBUF9QIChlcCwgNiwgeXAyLCBuKSk7CisgIEFTU0VSVCAoISBNUE5fT1ZFUkxBUF9QIChlcCwgNiwgeXAzLCBuKSk7CisgIEFTU0VSVCAoISBNUE5fT1ZFUkxBUF9QIChlcCwgNiwgcnAsIG4pKTsKKworICB5cDEgKz0gbiAtIDE7CisgIHlwMiArPSBuIC0gMTsKKyAgeXAzICs9IG4gLSAxOworICBlbDEgPSBlaDEgPSAwOworICBlbDIgPSBlaDIgPSAwOworICBlbDMgPSBlaDMgPSAwOworCisgIGRvCisgICAgeworICAgICAgeWwxID0gKnlwMS0tOworICAgICAgeWwyID0gKnlwMi0tOworICAgICAgeWwzID0gKnlwMy0tOworICAgICAgdWwgPSAqdXArKzsKKyAgICAgIHZsID0gKnZwKys7CisKKyAgICAgIC8qIG9yZGluYXJ5IHN1Yl9uICovCisgICAgICBTVUJDX0xJTUIgKGN5MSwgc2wsIHVsLCB2bCk7CisgICAgICBTVUJDX0xJTUIgKGN5MiwgcmwsIHNsLCBjeSk7CisgICAgICBjeSA9IGN5MSB8IGN5MjsKKyAgICAgICpycCsrID0gcmw7CisKKyAgICAgIC8qIHVwZGF0ZSAoZWgxOmVsMSkgKi8KKyAgICAgIHpsMSA9ICgtY3kpICYgeWwxOworICAgICAgZWwxICs9IHpsMTsKKyAgICAgIGVoMSArPSBlbDEgPCB6bDE7CisKKyAgICAgIC8qIHVwZGF0ZSAoZWgyOmVsMikgKi8KKyAgICAgIHpsMiA9ICgtY3kpICYgeWwyOworICAgICAgZWwyICs9IHpsMjsKKyAgICAgIGVoMiArPSBlbDIgPCB6bDI7CisKKyAgICAgIC8qIHVwZGF0ZSAoZWgzOmVsMykgKi8KKyAgICAgIHpsMyA9ICgtY3kpICYgeWwzOworICAgICAgZWwzICs9IHpsMzsKKyAgICAgIGVoMyArPSBlbDMgPCB6bDM7CisgICAgfQorICB3aGlsZSAoLS1uKTsKKworI2lmIEdNUF9OQUlMX0JJVFMgIT0gMAorICBlaDEgPSAoZWgxIDw8IEdNUF9OQUlMX0JJVFMpICsgKGVsMSA+PiBHTVBfTlVNQl9CSVRTKTsKKyAgZWwxICY9IEdNUF9OVU1CX01BU0s7CisgIGVoMiA9IChlaDIgPDwgR01QX05BSUxfQklUUykgKyAoZWwyID4+IEdNUF9OVU1CX0JJVFMpOworICBlbDIgJj0gR01QX05VTUJfTUFTSzsKKyAgZWgzID0gKGVoMyA8PCBHTVBfTkFJTF9CSVRTKSArIChlbDMgPj4gR01QX05VTUJfQklUUyk7CisgIGVsMyAmPSBHTVBfTlVNQl9NQVNLOworI2VuZGlmCisKKyAgZXBbMF0gPSBlbDE7CisgIGVwWzFdID0gZWgxOworICBlcFsyXSA9IGVsMjsKKyAgZXBbM10gPSBlaDI7CisgIGVwWzRdID0gZWwzOworICBlcFs1XSA9IGVoMzsKKworICByZXR1cm4gY3k7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvc3ViX24uYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy9zdWJfbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxOTJjOTYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvc3ViX24uYwpAQCAtMCwwICsxLDg5IEBACisvKiBtcG5fc3ViX24gLS0gU3VidHJhY3QgZXF1YWwgbGVuZ3RoIGxpbWIgdmVjdG9ycy4KKworQ29weXJpZ2h0IDE5OTItMTk5NCwgMTk5NiwgMjAwMCwgMjAwMiwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisKKworI2lmIEdNUF9OQUlMX0JJVFMgPT0gMAorCittcF9saW1iX3QKK21wbl9zdWJfbiAobXBfcHRyIHJwLCBtcF9zcmNwdHIgdXAsIG1wX3NyY3B0ciB2cCwgbXBfc2l6ZV90IG4pCit7CisgIG1wX2xpbWJfdCB1bCwgdmwsIHNsLCBybCwgY3ksIGN5MSwgY3kyOworCisgIEFTU0VSVCAobiA+PSAxKTsKKyAgQVNTRVJUIChNUE5fU0FNRV9PUl9JTkNSX1AgKHJwLCB1cCwgbikpOworICBBU1NFUlQgKE1QTl9TQU1FX09SX0lOQ1JfUCAocnAsIHZwLCBuKSk7CisKKyAgY3kgPSAwOworICBkbworICAgIHsKKyAgICAgIHVsID0gKnVwKys7CisgICAgICB2bCA9ICp2cCsrOworICAgICAgc2wgPSB1bCAtIHZsOworICAgICAgY3kxID0gc2wgPiB1bDsKKyAgICAgIHJsID0gc2wgLSBjeTsKKyAgICAgIGN5MiA9IHJsID4gc2w7CisgICAgICBjeSA9IGN5MSB8IGN5MjsKKyAgICAgICpycCsrID0gcmw7CisgICAgfQorICB3aGlsZSAoLS1uICE9IDApOworCisgIHJldHVybiBjeTsKK30KKworI2VuZGlmCisKKyNpZiBHTVBfTkFJTF9CSVRTID49IDEKKworbXBfbGltYl90CittcG5fc3ViX24gKG1wX3B0ciBycCwgbXBfc3JjcHRyIHVwLCBtcF9zcmNwdHIgdnAsIG1wX3NpemVfdCBuKQoreworICBtcF9saW1iX3QgdWwsIHZsLCBybCwgY3k7CisKKyAgQVNTRVJUIChuID49IDEpOworICBBU1NFUlQgKE1QTl9TQU1FX09SX0lOQ1JfUCAocnAsIHVwLCBuKSk7CisgIEFTU0VSVCAoTVBOX1NBTUVfT1JfSU5DUl9QIChycCwgdnAsIG4pKTsKKworICBjeSA9IDA7CisgIGRvCisgICAgeworICAgICAgdWwgPSAqdXArKzsKKyAgICAgIHZsID0gKnZwKys7CisgICAgICBybCA9IHVsIC0gdmwgLSBjeTsKKyAgICAgIGN5ID0gcmwgPj4gKEdNUF9MSU1CX0JJVFMgLSAxKTsKKyAgICAgICpycCsrID0gcmwgJiBHTVBfTlVNQl9NQVNLOworICAgIH0KKyAgd2hpbGUgKC0tbiAhPSAwKTsKKworICByZXR1cm4gY3k7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3N1Ym11bF8xLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvc3VibXVsXzEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzQ0Mjc0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3N1Ym11bF8xLmMKQEAgLTAsMCArMSwxNDQgQEAKKy8qIG1wbl9zdWJtdWxfMSAtLSBtdWx0aXBseSB0aGUgTiBsb25nIGxpbWIgdmVjdG9yIHBvaW50ZWQgdG8gYnkgVVAgYnkgVkwsCisgICBzdWJ0cmFjdCB0aGUgTiBsZWFzdCBzaWduaWZpY2FudCBsaW1icyBvZiB0aGUgcHJvZHVjdCBmcm9tIHRoZSBsaW1iCisgICB2ZWN0b3IgcG9pbnRlZCB0byBieSBSUC4gIFJldHVybiB0aGUgbW9zdCBzaWduaWZpY2FudCBsaW1iIG9mIHRoZQorICAgcHJvZHVjdCwgYWRqdXN0ZWQgZm9yIGNhcnJ5LW91dCBmcm9tIHRoZSBzdWJ0cmFjdGlvbi4KKworQ29weXJpZ2h0IDE5OTItMTk5NCwgMTk5NiwgMjAwMCwgMjAwMiwgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisjaW5jbHVkZSAibG9uZ2xvbmcuaCIKKworCisjaWYgR01QX05BSUxfQklUUyA9PSAwCisKK21wX2xpbWJfdAorbXBuX3N1Ym11bF8xIChtcF9wdHIgcnAsIG1wX3NyY3B0ciB1cCwgbXBfc2l6ZV90IG4sIG1wX2xpbWJfdCB2MCkKK3sKKyAgbXBfbGltYl90IHUwLCBjcmVjLCBjLCBwMSwgcDAsIHIwOworCisgIEFTU0VSVCAobiA+PSAxKTsKKyAgQVNTRVJUIChNUE5fU0FNRV9PUl9TRVBBUkFURV9QIChycCwgdXAsIG4pKTsKKworICBjcmVjID0gMDsKKyAgZG8KKyAgICB7CisgICAgICB1MCA9ICp1cCsrOworICAgICAgdW11bF9wcG1tIChwMSwgcDAsIHUwLCB2MCk7CisKKyAgICAgIHIwID0gKnJwOworCisgICAgICBwMCA9IHIwIC0gcDA7CisgICAgICBjID0gcjAgPCBwMDsKKworICAgICAgcDEgPSBwMSArIGM7CisKKyAgICAgIHIwID0gcDAgLSBjcmVjOwkJLyogY3ljbGUgMCwgMywgLi4uICovCisgICAgICBjID0gcDAgPCByMDsJCS8qIGN5Y2xlIDEsIDQsIC4uLiAqLworCisgICAgICBjcmVjID0gcDEgKyBjOwkJLyogY3ljbGUgMiwgNSwgLi4uICovCisKKyAgICAgICpycCsrID0gcjA7CisgICAgfQorICB3aGlsZSAoLS1uICE9IDApOworCisgIHJldHVybiBjcmVjOworfQorCisjZW5kaWYKKworI2lmIEdNUF9OQUlMX0JJVFMgPT0gMQorCittcF9saW1iX3QKK21wbl9zdWJtdWxfMSAobXBfcHRyIHJwLCBtcF9zcmNwdHIgdXAsIG1wX3NpemVfdCBuLCBtcF9saW1iX3QgdjApCit7CisgIG1wX2xpbWJfdCBzaGlmdGVkX3YwLCB1MCwgcjAsIHAwLCBwMSwgcHJldl9wMSwgY2wsIHhsLCBjMSwgYzIsIGMzOworCisgIEFTU0VSVCAobiA+PSAxKTsKKyAgQVNTRVJUIChNUE5fU0FNRV9PUl9TRVBBUkFURV9QIChycCwgdXAsIG4pKTsKKyAgQVNTRVJUX01QTiAocnAsIG4pOworICBBU1NFUlRfTVBOICh1cCwgbik7CisgIEFTU0VSVF9MSU1CICh2MCk7CisKKyAgc2hpZnRlZF92MCA9IHYwIDw8IEdNUF9OQUlMX0JJVFM7CisgIGNsID0gMDsKKyAgcHJldl9wMSA9IDA7CisgIGRvCisgICAgeworICAgICAgdTAgPSAqdXArKzsKKyAgICAgIHIwID0gKnJwOworICAgICAgdW11bF9wcG1tIChwMSwgcDAsIHUwLCBzaGlmdGVkX3YwKTsKKyAgICAgIHAwID4+PSBHTVBfTkFJTF9CSVRTOworICAgICAgU1VCQ19MSU1CIChjMSwgeGwsIHIwLCBwcmV2X3AxKTsKKyAgICAgIFNVQkNfTElNQiAoYzIsIHhsLCB4bCwgcDApOworICAgICAgU1VCQ19MSU1CIChjMywgeGwsIHhsLCBjbCk7CisgICAgICBjbCA9IGMxICsgYzIgKyBjMzsKKyAgICAgICpycCsrID0geGw7CisgICAgICBwcmV2X3AxID0gcDE7CisgICAgfQorICB3aGlsZSAoLS1uICE9IDApOworCisgIHJldHVybiBwcmV2X3AxICsgY2w7Cit9CisKKyNlbmRpZgorCisjaWYgR01QX05BSUxfQklUUyA+PSAyCisKK21wX2xpbWJfdAorbXBuX3N1Ym11bF8xIChtcF9wdHIgcnAsIG1wX3NyY3B0ciB1cCwgbXBfc2l6ZV90IG4sIG1wX2xpbWJfdCB2MCkKK3sKKyAgbXBfbGltYl90IHNoaWZ0ZWRfdjAsIHUwLCByMCwgcDAsIHAxLCBwcmV2X3AxLCB4dywgY2wsIHhsOworCisgIEFTU0VSVCAobiA+PSAxKTsKKyAgQVNTRVJUIChNUE5fU0FNRV9PUl9TRVBBUkFURV9QIChycCwgdXAsIG4pKTsKKyAgQVNTRVJUX01QTiAocnAsIG4pOworICBBU1NFUlRfTVBOICh1cCwgbik7CisgIEFTU0VSVF9MSU1CICh2MCk7CisKKyAgc2hpZnRlZF92MCA9IHYwIDw8IEdNUF9OQUlMX0JJVFM7CisgIGNsID0gMDsKKyAgcHJldl9wMSA9IDA7CisgIGRvCisgICAgeworICAgICAgdTAgPSAqdXArKzsKKyAgICAgIHIwID0gKnJwOworICAgICAgdW11bF9wcG1tIChwMSwgcDAsIHUwLCBzaGlmdGVkX3YwKTsKKyAgICAgIHAwID4+PSBHTVBfTkFJTF9CSVRTOworICAgICAgeHcgPSByMCAtIChwcmV2X3AxICsgcDApICsgY2w7CisgICAgICBjbCA9IChtcF9saW1iX3NpZ25lZF90KSB4dyA+PiBHTVBfTlVNQl9CSVRTOyAvKiBGSVhNRTogbm9uLXBvcnRhYmxlICovCisgICAgICB4bCA9IHh3ICYgR01QX05VTUJfTUFTSzsKKyAgICAgICpycCsrID0geGw7CisgICAgICBwcmV2X3AxID0gcDE7CisgICAgfQorICB3aGlsZSAoLS1uICE9IDApOworCisgIHJldHVybiBwcmV2X3AxIC0gY2w7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3RkaXZfcXIuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy90ZGl2X3FyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJmZjMzYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy90ZGl2X3FyLmMKQEAgLTAsMCArMSwzODYgQEAKKy8qIG1wbl90ZGl2X3FyIC0tIERpdmlkZSB0aGUgbnVtZXJhdG9yIChucCxubikgYnkgdGhlIGRlbm9taW5hdG9yIChkcCxkbikgYW5kCisgICB3cml0ZSB0aGUgbm4tZG4rMSBxdW90aWVudCBsaW1icyBhdCBxcCBhbmQgdGhlIGRuIHJlbWFpbmRlciBsaW1icyBhdCBycC4gIElmCisgICBxeG4gaXMgbm9uLXplcm8sIGdlbmVyYXRlIHRoYXQgbWFueSBmcmFjdGlvbiBsaW1icyBhbmQgYXBwZW5kIHRoZW0gYWZ0ZXIgdGhlCisgICBvdGhlciBxdW90aWVudCBsaW1icywgYW5kIHVwZGF0ZSB0aGUgcmVtYWluZGVyIGFjY29yZGluZ2x5LiAgVGhlIGlucHV0CisgICBvcGVyYW5kcyBhcmUgdW5hZmZlY3RlZC4KKworICAgUHJlY29uZGl0aW9uczoKKyAgIDEuIFRoZSBtb3N0IHNpZ25pZmljYW50IGxpbWIgb2YgdGhlIGRpdmlzb3IgbXVzdCBiZSBub24temVyby4KKyAgIDIuIG5uID49IGRuLCBldmVuIGlmIHF4biBpcyBub24temVyby4gICg/Pz8gcmVsYXggdGhpcyA/Pz8pCisKKyAgIFRoZSB0aW1lIGNvbXBsZXhpdHkgb2YgdGhpcyBpcyBPKHFuKnFuK00oZG4scW4pKSwgd2hlcmUgTShtLG4pIGlzIHRoZSB0aW1lCisgICBjb21wbGV4aXR5IG9mIG11bHRpcGxpY2F0aW9uLgorCitDb3B5cmlnaHQgMTk5NywgMjAwMC0yMDAyLCAyMDA1LCAyMDA5LCAyMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKyNpbmNsdWRlICJsb25nbG9uZy5oIgorCisKK3ZvaWQKK21wbl90ZGl2X3FyIChtcF9wdHIgcXAsIG1wX3B0ciBycCwgbXBfc2l6ZV90IHF4biwKKwkgICAgIG1wX3NyY3B0ciBucCwgbXBfc2l6ZV90IG5uLCBtcF9zcmNwdHIgZHAsIG1wX3NpemVfdCBkbikKK3sKKyAgQVNTRVJUX0FMV0FZUyAocXhuID09IDApOworCisgIEFTU0VSVCAobm4gPj0gMCk7CisgIEFTU0VSVCAoZG4gPj0gMCk7CisgIEFTU0VSVCAoZG4gPT0gMCB8fCBkcFtkbiAtIDFdICE9IDApOworICBBU1NFUlQgKCEgTVBOX09WRVJMQVBfUCAocXAsIG5uIC0gZG4gKyAxICsgcXhuLCBucCwgbm4pKTsKKyAgQVNTRVJUICghIE1QTl9PVkVSTEFQX1AgKHFwLCBubiAtIGRuICsgMSArIHF4biwgZHAsIGRuKSk7CisKKyAgc3dpdGNoIChkbikKKyAgICB7CisgICAgY2FzZSAwOgorICAgICAgRElWSURFX0JZX1pFUk87CisKKyAgICBjYXNlIDE6CisgICAgICB7CisJcnBbMF0gPSBtcG5fZGl2cmVtXzEgKHFwLCAobXBfc2l6ZV90KSAwLCBucCwgbm4sIGRwWzBdKTsKKwlyZXR1cm47CisgICAgICB9CisKKyAgICBjYXNlIDI6CisgICAgICB7CisJbXBfcHRyIG4ycDsKKwltcF9saW1iX3QgcWhsLCBjeTsKKwlUTVBfREVDTDsKKwlUTVBfTUFSSzsKKwlpZiAoKGRwWzFdICYgR01QX05VTUJfSElHSEJJVCkgPT0gMCkKKwkgIHsKKwkgICAgaW50IGNudDsKKwkgICAgbXBfbGltYl90IGQycFsyXTsKKwkgICAgY291bnRfbGVhZGluZ196ZXJvcyAoY250LCBkcFsxXSk7CisJICAgIGNudCAtPSBHTVBfTkFJTF9CSVRTOworCSAgICBkMnBbMV0gPSAoZHBbMV0gPDwgY250KSB8IChkcFswXSA+PiAoR01QX05VTUJfQklUUyAtIGNudCkpOworCSAgICBkMnBbMF0gPSAoZHBbMF0gPDwgY250KSAmIEdNUF9OVU1CX01BU0s7CisJICAgIG4ycCA9IFRNUF9BTExPQ19MSU1CUyAobm4gKyAxKTsKKwkgICAgY3kgPSBtcG5fbHNoaWZ0IChuMnAsIG5wLCBubiwgY250KTsKKwkgICAgbjJwW25uXSA9IGN5OworCSAgICBxaGwgPSBtcG5fZGl2cmVtXzIgKHFwLCAwTCwgbjJwLCBubiArIChjeSAhPSAwKSwgZDJwKTsKKwkgICAgaWYgKGN5ID09IDApCisJICAgICAgcXBbbm4gLSAyXSA9IHFobDsJLyogYWx3YXlzIHN0b3JlIG5uLTIrMSBxdW90aWVudCBsaW1icyAqLworCSAgICBycFswXSA9IChuMnBbMF0gPj4gY250KQorCSAgICAgIHwgKChuMnBbMV0gPDwgKEdNUF9OVU1CX0JJVFMgLSBjbnQpKSAmIEdNUF9OVU1CX01BU0spOworCSAgICBycFsxXSA9IChuMnBbMV0gPj4gY250KTsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIG4ycCA9IFRNUF9BTExPQ19MSU1CUyAobm4pOworCSAgICBNUE5fQ09QWSAobjJwLCBucCwgbm4pOworCSAgICBxaGwgPSBtcG5fZGl2cmVtXzIgKHFwLCAwTCwgbjJwLCBubiwgZHApOworCSAgICBxcFtubiAtIDJdID0gcWhsOwkvKiBhbHdheXMgc3RvcmUgbm4tMisxIHF1b3RpZW50IGxpbWJzICovCisJICAgIHJwWzBdID0gbjJwWzBdOworCSAgICBycFsxXSA9IG4ycFsxXTsKKwkgIH0KKwlUTVBfRlJFRTsKKwlyZXR1cm47CisgICAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAgeworCWludCBhZGp1c3Q7CisJZ21wX3BpMV90IGRpbnY7CisJVE1QX0RFQ0w7CisJVE1QX01BUks7CisJYWRqdXN0ID0gbnBbbm4gLSAxXSA+PSBkcFtkbiAtIDFdOwkvKiBjb25zZXJ2YXRpdmUgdGVzdHMgZm9yIHF1b3RpZW50IHNpemUgKi8KKwlpZiAobm4gKyBhZGp1c3QgPj0gMiAqIGRuKQorCSAgeworCSAgICBtcF9wdHIgbjJwLCBkMnA7CisJICAgIG1wX2xpbWJfdCBjeTsKKwkgICAgaW50IGNudDsKKworCSAgICBxcFtubiAtIGRuXSA9IDA7CQkJICAvKiB6ZXJvIGhpZ2ggcXVvdGllbnQgbGltYiAqLworCSAgICBpZiAoKGRwW2RuIC0gMV0gJiBHTVBfTlVNQl9ISUdIQklUKSA9PSAwKSAvKiBub3JtYWxpemUgZGl2aXNvciAqLworCSAgICAgIHsKKwkJY291bnRfbGVhZGluZ196ZXJvcyAoY250LCBkcFtkbiAtIDFdKTsKKwkJY250IC09IEdNUF9OQUlMX0JJVFM7CisJCWQycCA9IFRNUF9BTExPQ19MSU1CUyAoZG4pOworCQltcG5fbHNoaWZ0IChkMnAsIGRwLCBkbiwgY250KTsKKwkJbjJwID0gVE1QX0FMTE9DX0xJTUJTIChubiArIDEpOworCQljeSA9IG1wbl9sc2hpZnQgKG4ycCwgbnAsIG5uLCBjbnQpOworCQluMnBbbm5dID0gY3k7CisJCW5uICs9IGFkanVzdDsKKwkgICAgICB9CisJICAgIGVsc2UKKwkgICAgICB7CisJCWNudCA9IDA7CisJCWQycCA9IChtcF9wdHIpIGRwOworCQluMnAgPSBUTVBfQUxMT0NfTElNQlMgKG5uICsgMSk7CisJCU1QTl9DT1BZIChuMnAsIG5wLCBubik7CisJCW4ycFtubl0gPSAwOworCQlubiArPSBhZGp1c3Q7CisJICAgICAgfQorCisJICAgIGludmVydF9waTEgKGRpbnYsIGQycFtkbiAtIDFdLCBkMnBbZG4gLSAyXSk7CisJICAgIGlmIChCRUxPV19USFJFU0hPTEQgKGRuLCBEQ19ESVZfUVJfVEhSRVNIT0xEKSkKKwkgICAgICBtcG5fc2JwaTFfZGl2X3FyIChxcCwgbjJwLCBubiwgZDJwLCBkbiwgZGludi5pbnYzMik7CisJICAgIGVsc2UgaWYgKEJFTE9XX1RIUkVTSE9MRCAoZG4sIE1VUElfRElWX1FSX1RIUkVTSE9MRCkgfHwgICAvKiBmYXN0IGNvbmRpdGlvbiAqLworCQkgICAgIEJFTE9XX1RIUkVTSE9MRCAobm4sIDIgKiBNVV9ESVZfUVJfVEhSRVNIT0xEKSB8fCAvKiBmYXN0IGNvbmRpdGlvbiAqLworCQkgICAgIChkb3VibGUpICgyICogKE1VX0RJVl9RUl9USFJFU0hPTEQgLSBNVVBJX0RJVl9RUl9USFJFU0hPTEQpKSAqIGRuIC8qIHNsb3cuLi4gKi8KKwkJICAgICArIChkb3VibGUpIE1VUElfRElWX1FSX1RIUkVTSE9MRCAqIG5uID4gKGRvdWJsZSkgZG4gKiBubikgICAgLyogLi4uY29uZGl0aW9uICovCisJICAgICAgbXBuX2RjcGkxX2Rpdl9xciAocXAsIG4ycCwgbm4sIGQycCwgZG4sICZkaW52KTsKKwkgICAgZWxzZQorCSAgICAgIHsKKwkJbXBfc2l6ZV90IGl0Y2ggPSBtcG5fbXVfZGl2X3FyX2l0Y2ggKG5uLCBkbiwgMCk7CisJCW1wX3B0ciBzY3JhdGNoID0gVE1QX0FMTE9DX0xJTUJTIChpdGNoKTsKKwkJbXBuX211X2Rpdl9xciAocXAsIHJwLCBuMnAsIG5uLCBkMnAsIGRuLCBzY3JhdGNoKTsKKwkJbjJwID0gcnA7CisJICAgICAgfQorCisJICAgIGlmIChjbnQgIT0gMCkKKwkgICAgICBtcG5fcnNoaWZ0IChycCwgbjJwLCBkbiwgY250KTsKKwkgICAgZWxzZQorCSAgICAgIE1QTl9DT1BZIChycCwgbjJwLCBkbik7CisJICAgIFRNUF9GUkVFOworCSAgICByZXR1cm47CisJICB9CisKKwkvKiBXaGVuIHdlIGNvbWUgaGVyZSwgdGhlIG51bWVyYXRvci9wYXJ0aWFsIHJlbWFpbmRlciBpcyBsZXNzCisJICAgdGhhbiB0d2ljZSB0aGUgc2l6ZSBvZiB0aGUgZGVub21pbmF0b3IuICAqLworCisJICB7CisJICAgIC8qIFByb2JsZW06CisKKwkgICAgICAgRGl2aWRlIGEgbnVtZXJhdG9yIE4gd2l0aCBubiBsaW1icyBieSBhIGRlbm9taW5hdG9yIEQgd2l0aCBkbgorCSAgICAgICBsaW1icyBmb3JtaW5nIGEgcXVvdGllbnQgb2YgcW49bm4tZG4rMSBsaW1icy4gIFdoZW4gcW4gaXMgc21hbGwKKwkgICAgICAgY29tcGFyZWQgdG8gZG4sIGNvbnZlbnRpb25hbCBkaXZpc2lvbiBhbGdvcml0aG1zIHBlcmZvcm0gcG9vcmx5LgorCSAgICAgICBXZSB3YW50IGFuIGFsZ29yaXRobSB0aGF0IGhhcyBhbiBleHBlY3RlZCBydW5uaW5nIHRpbWUgdGhhdCBpcworCSAgICAgICBkZXBlbmRlbnQgb25seSBvbiBxbi4KKworCSAgICAgICBBbGdvcml0aG0gKHZlcnkgaW5mb3JtYWxseSBzdGF0ZWQpOgorCisJICAgICAgIDEpIERpdmlkZSB0aGUgMiB4IHFuIG1vc3Qgc2lnbmlmaWNhbnQgbGltYnMgZnJvbSB0aGUgbnVtZXJhdG9yCisJCSAgYnkgdGhlIHFuIG1vc3Qgc2lnbmlmaWNhbnQgbGltYnMgZnJvbSB0aGUgZGVub21pbmF0b3IuICBDYWxsCisJCSAgdGhlIHJlc3VsdCBxZXN0LiAgVGhpcyBpcyBlaXRoZXIgdGhlIGNvcnJlY3QgcXVvdGllbnQsIGJ1dAorCQkgIG1pZ2h0IGJlIDEgb3IgMiB0b28gbGFyZ2UuICBDb21wdXRlIHRoZSByZW1haW5kZXIgZnJvbSB0aGUKKwkJICBkaXZpc2lvbi4gIChUaGlzIHN0ZXAgaXMgaW1wbGVtZW50ZWQgYnkgYW4gbXBuX2RpdnJlbSBjYWxsLikKKworCSAgICAgICAyKSBJcyB0aGUgbW9zdCBzaWduaWZpY2FudCBsaW1iIGZyb20gdGhlIHJlbWFpbmRlciA8IHAsIHdoZXJlIHAKKwkJICBpcyB0aGUgcHJvZHVjdCBvZiB0aGUgbW9zdCBzaWduaWZpY2FudCBsaW1iIGZyb20gdGhlIHF1b3RpZW50CisJCSAgYW5kIHRoZSBuZXh0KGQpPyAgKE5leHQoZCkgZGVub3RlcyB0aGUgbmV4dCBpZ25vcmVkIGxpbWIgZnJvbQorCQkgIHRoZSBkZW5vbWluYXRvci4pICBJZiBpdCBpcywgZGVjcmVtZW50IHFlc3QsIGFuZCBhZGp1c3QgdGhlCisJCSAgcmVtYWluZGVyIGFjY29yZGluZ2x5LgorCisJICAgICAgIDMpIElzIHRoZSByZW1haW5kZXIgPj0gcWVzdD8gIElmIGl0IGlzLCBxZXN0IGlzIHRoZSBkZXNpcmVkCisJCSAgcXVvdGllbnQuICBUaGUgYWxnb3JpdGhtIHRlcm1pbmF0ZXMuCisKKwkgICAgICAgNCkgU3VidHJhY3QgcWVzdCB4IG5leHQoZCkgZnJvbSB0aGUgcmVtYWluZGVyLiAgSWYgdGhlcmUgaXMKKwkJICBib3Jyb3cgb3V0LCBkZWNyZW1lbnQgcWVzdCwgYW5kIGFkanVzdCB0aGUgcmVtYWluZGVyCisJCSAgYWNjb3JkaW5nbHkuCisKKwkgICAgICAgNSkgU2tpcCBvbmUgd29yZCBmcm9tIHRoZSBkZW5vbWluYXRvciAoaS5lLiwgbGV0IG5leHQoZCkgZGVub3RlCisJCSAgdGhlIG5leHQgbGVzcyBzaWduaWZpY2FudCBsaW1iLiAgKi8KKworCSAgICBtcF9zaXplX3QgcW47CisJICAgIG1wX3B0ciBuMnAsIGQycDsKKwkgICAgbXBfcHRyIHRwOworCSAgICBtcF9saW1iX3QgY3k7CisJICAgIG1wX3NpemVfdCBpbiwgcm47CisJICAgIG1wX2xpbWJfdCBxdW90aWVudF90b29fbGFyZ2U7CisJICAgIHVuc2lnbmVkIGludCBjbnQ7CisKKwkgICAgcW4gPSBubiAtIGRuOworCSAgICBxcFtxbl0gPSAwOwkJCQkvKiB6ZXJvIGhpZ2ggcXVvdGllbnQgbGltYiAqLworCSAgICBxbiArPSBhZGp1c3Q7CQkJLyogcW4gY2Fubm90IGJlY29tZSBiaWdnZXIgKi8KKworCSAgICBpZiAocW4gPT0gMCkKKwkgICAgICB7CisJCU1QTl9DT1BZIChycCwgbnAsIGRuKTsKKwkJVE1QX0ZSRUU7CisJCXJldHVybjsKKwkgICAgICB9CisKKwkgICAgaW4gPSBkbiAtIHFuOwkJLyogKGF0IGxlYXN0IHBhcnRpYWxseSkgaWdub3JlZCAjIG9mIGxpbWJzIGluIG9wcyAqLworCSAgICAvKiBOb3JtYWxpemUgZGVub21pbmF0b3IgYnkgc2hpZnRpbmcgaXQgdG8gdGhlIGxlZnQgc3VjaCB0aGF0IGl0cworCSAgICAgICBtb3N0IHNpZ25pZmljYW50IGJpdCBpcyBzZXQuICBUaGVuIHNoaWZ0IHRoZSBudW1lcmF0b3IgdGhlIHNhbWUKKwkgICAgICAgYW1vdW50LCB0byBtYXRoZW1hdGljYWxseSBwcmVzZXJ2ZSBxdW90aWVudC4gICovCisJICAgIGlmICgoZHBbZG4gLSAxXSAmIEdNUF9OVU1CX0hJR0hCSVQpID09IDApCisJICAgICAgeworCQljb3VudF9sZWFkaW5nX3plcm9zIChjbnQsIGRwW2RuIC0gMV0pOworCQljbnQgLT0gR01QX05BSUxfQklUUzsKKworCQlkMnAgPSBUTVBfQUxMT0NfTElNQlMgKHFuKTsKKwkJbXBuX2xzaGlmdCAoZDJwLCBkcCArIGluLCBxbiwgY250KTsKKwkJZDJwWzBdIHw9IGRwW2luIC0gMV0gPj4gKEdNUF9OVU1CX0JJVFMgLSBjbnQpOworCisJCW4ycCA9IFRNUF9BTExPQ19MSU1CUyAoMiAqIHFuICsgMSk7CisJCWN5ID0gbXBuX2xzaGlmdCAobjJwLCBucCArIG5uIC0gMiAqIHFuLCAyICogcW4sIGNudCk7CisJCWlmIChhZGp1c3QpCisJCSAgeworCQkgICAgbjJwWzIgKiBxbl0gPSBjeTsKKwkJICAgIG4ycCsrOworCQkgIH0KKwkJZWxzZQorCQkgIHsKKwkJICAgIG4ycFswXSB8PSBucFtubiAtIDIgKiBxbiAtIDFdID4+IChHTVBfTlVNQl9CSVRTIC0gY250KTsKKwkJICB9CisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAgeworCQljbnQgPSAwOworCQlkMnAgPSAobXBfcHRyKSBkcCArIGluOworCisJCW4ycCA9IFRNUF9BTExPQ19MSU1CUyAoMiAqIHFuICsgMSk7CisJCU1QTl9DT1BZIChuMnAsIG5wICsgbm4gLSAyICogcW4sIDIgKiBxbik7CisJCWlmIChhZGp1c3QpCisJCSAgeworCQkgICAgbjJwWzIgKiBxbl0gPSAwOworCQkgICAgbjJwKys7CisJCSAgfQorCSAgICAgIH0KKworCSAgICAvKiBHZXQgYW4gYXBwcm94aW1hdGUgcXVvdGllbnQgdXNpbmcgdGhlIGV4dHJhY3RlZCBvcGVyYW5kcy4gICovCisJICAgIGlmIChxbiA9PSAxKQorCSAgICAgIHsKKwkJbXBfbGltYl90IHEwLCByMDsKKwkJdWRpdl9xcm5uZCAocTAsIHIwLCBuMnBbMV0sIG4ycFswXSA8PCBHTVBfTkFJTF9CSVRTLCBkMnBbMF0gPDwgR01QX05BSUxfQklUUyk7CisJCW4ycFswXSA9IHIwID4+IEdNUF9OQUlMX0JJVFM7CisJCXFwWzBdID0gcTA7CisJICAgICAgfQorCSAgICBlbHNlIGlmIChxbiA9PSAyKQorCSAgICAgIG1wbl9kaXZyZW1fMiAocXAsIDBMLCBuMnAsIDRMLCBkMnApOyAvKiBGSVhNRTogb2Jzb2xldGUgZnVuY3Rpb24gKi8KKwkgICAgZWxzZQorCSAgICAgIHsKKwkJaW52ZXJ0X3BpMSAoZGludiwgZDJwW3FuIC0gMV0sIGQycFtxbiAtIDJdKTsKKwkJaWYgKEJFTE9XX1RIUkVTSE9MRCAocW4sIERDX0RJVl9RUl9USFJFU0hPTEQpKQorCQkgIG1wbl9zYnBpMV9kaXZfcXIgKHFwLCBuMnAsIDIgKiBxbiwgZDJwLCBxbiwgZGludi5pbnYzMik7CisJCWVsc2UgaWYgKEJFTE9XX1RIUkVTSE9MRCAocW4sIE1VX0RJVl9RUl9USFJFU0hPTEQpKQorCQkgIG1wbl9kY3BpMV9kaXZfcXIgKHFwLCBuMnAsIDIgKiBxbiwgZDJwLCBxbiwgJmRpbnYpOworCQllbHNlCisJCSAgeworCQkgICAgbXBfc2l6ZV90IGl0Y2ggPSBtcG5fbXVfZGl2X3FyX2l0Y2ggKDIgKiBxbiwgcW4sIDApOworCQkgICAgbXBfcHRyIHNjcmF0Y2ggPSBUTVBfQUxMT0NfTElNQlMgKGl0Y2gpOworCQkgICAgbXBfcHRyIHIycCA9IHJwOworCQkgICAgaWYgKG5wID09IHIycCkJLyogSWYgTiBhbmQgUiBzaGFyZSBzcGFjZSwgcHV0IC4uLiAqLworCQkgICAgICByMnAgKz0gbm4gLSBxbjsJLyogaW50ZXJtZWRpYXRlIHJlbWFpbmRlciBhdCBOJ3MgdXBwZXIgZW5kLiAqLworCQkgICAgbXBuX211X2Rpdl9xciAocXAsIHIycCwgbjJwLCAyICogcW4sIGQycCwgcW4sIHNjcmF0Y2gpOworCQkgICAgTVBOX0NPUFkgKG4ycCwgcjJwLCBxbik7CisJCSAgfQorCSAgICAgIH0KKworCSAgICBybiA9IHFuOworCSAgICAvKiBNdWx0aXBseSB0aGUgZmlyc3QgaWdub3JlZCBkaXZpc29yIGxpbWIgYnkgdGhlIG1vc3Qgc2lnbmlmaWNhbnQKKwkgICAgICAgcXVvdGllbnQgbGltYi4gIElmIHRoYXQgcHJvZHVjdCBpcyA+IHRoZSBwYXJ0aWFsIHJlbWFpbmRlcidzCisJICAgICAgIG1vc3Qgc2lnbmlmaWNhbnQgbGltYiwgd2Uga25vdyB0aGUgcXVvdGllbnQgaXMgdG9vIGxhcmdlLiAgVGhpcworCSAgICAgICB0ZXN0IHF1aWNrbHkgY2F0Y2hlcyBtb3N0IGNhc2VzIHdoZXJlIHRoZSBxdW90aWVudCBpcyB0b28gbGFyZ2U7CisJICAgICAgIGl0IGNhdGNoZXMgYWxsIGNhc2VzIHdoZXJlIHRoZSBxdW90aWVudCBpcyAyIHRvbyBsYXJnZS4gICovCisJICAgIHsKKwkgICAgICBtcF9saW1iX3QgZGwsIHg7CisJICAgICAgbXBfbGltYl90IGgsIGR1bW15OworCisJICAgICAgaWYgKGluIC0gMiA8IDApCisJCWRsID0gMDsKKwkgICAgICBlbHNlCisJCWRsID0gZHBbaW4gLSAyXTsKKworI2lmIEdNUF9OQUlMX0JJVFMgPT0gMAorCSAgICAgIHggPSAoZHBbaW4gLSAxXSA8PCBjbnQpIHwgKChkbCA+PiAxKSA+PiAoKH5jbnQpICUgR01QX0xJTUJfQklUUykpOworI2Vsc2UKKwkgICAgICB4ID0gKGRwW2luIC0gMV0gPDwgY250KSAmIEdNUF9OVU1CX01BU0s7CisJICAgICAgaWYgKGNudCAhPSAwKQorCQl4IHw9IGRsID4+IChHTVBfTlVNQl9CSVRTIC0gY250KTsKKyNlbmRpZgorCSAgICAgIHVtdWxfcHBtbSAoaCwgZHVtbXksIHgsIHFwW3FuIC0gMV0gPDwgR01QX05BSUxfQklUUyk7CisKKwkgICAgICBpZiAobjJwW3FuIC0gMV0gPCBoKQorCQl7CisJCSAgbXBfbGltYl90IGN5OworCisJCSAgbXBuX2RlY3JfdSAocXAsIChtcF9saW1iX3QpIDEpOworCQkgIGN5ID0gbXBuX2FkZF9uIChuMnAsIG4ycCwgZDJwLCBxbik7CisJCSAgaWYgKGN5KQorCQkgICAgeworCQkgICAgICAvKiBUaGUgcGFydGlhbCByZW1haW5kZXIgaXMgc2FmZWx5IGxhcmdlLiAgKi8KKwkJICAgICAgbjJwW3FuXSA9IGN5OworCQkgICAgICArK3JuOworCQkgICAgfQorCQl9CisJICAgIH0KKworCSAgICBxdW90aWVudF90b29fbGFyZ2UgPSAwOworCSAgICBpZiAoY250ICE9IDApCisJICAgICAgeworCQltcF9saW1iX3QgY3kxLCBjeTI7CisKKwkJLyogQXBwZW5kIHBhcnRpYWxseSB1c2VkIG51bWVyYXRvciBsaW1iIHRvIHBhcnRpYWwgcmVtYWluZGVyLiAgKi8KKwkJY3kxID0gbXBuX2xzaGlmdCAobjJwLCBuMnAsIHJuLCBHTVBfTlVNQl9CSVRTIC0gY250KTsKKwkJbjJwWzBdIHw9IG5wW2luIC0gMV0gJiAoR01QX05VTUJfTUFTSyA+PiBjbnQpOworCisJCS8qIFVwZGF0ZSBwYXJ0aWFsIHJlbWFpbmRlciB3aXRoIHBhcnRpYWxseSB1c2VkIGRpdmlzb3IgbGltYi4gICovCisJCWN5MiA9IG1wbl9zdWJtdWxfMSAobjJwLCBxcCwgcW4sIGRwW2luIC0gMV0gJiAoR01QX05VTUJfTUFTSyA+PiBjbnQpKTsKKwkJaWYgKHFuICE9IHJuKQorCQkgIHsKKwkJICAgIEFTU0VSVF9BTFdBWVMgKG4ycFtxbl0gPj0gY3kyKTsKKwkJICAgIG4ycFtxbl0gLT0gY3kyOworCQkgIH0KKwkJZWxzZQorCQkgIHsKKwkJICAgIG4ycFtxbl0gPSBjeTEgLSBjeTI7IC8qICYgR01QX05VTUJfTUFTSzsgKi8KKworCQkgICAgcXVvdGllbnRfdG9vX2xhcmdlID0gKGN5MSA8IGN5Mik7CisJCSAgICArK3JuOworCQkgIH0KKwkJLS1pbjsKKwkgICAgICB9CisJICAgIC8qIFRydWU6IHBhcnRpYWwgcmVtYWluZGVyIG5vdyBpcyBuZXV0cmFsLCBpLmUuLCBpdCBpcyBub3Qgc2hpZnRlZCB1cC4gICovCisKKwkgICAgdHAgPSBUTVBfQUxMT0NfTElNQlMgKGRuKTsKKworCSAgICBpZiAoaW4gPCBxbikKKwkgICAgICB7CisJCWlmIChpbiA9PSAwKQorCQkgIHsKKwkJICAgIE1QTl9DT1BZIChycCwgbjJwLCBybik7CisJCSAgICBBU1NFUlRfQUxXQVlTIChybiA9PSBkbik7CisJCSAgICBnb3RvIGZvbzsKKwkJICB9CisJCW1wbl9tdWwgKHRwLCBxcCwgcW4sIGRwLCBpbik7CisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAgbXBuX211bCAodHAsIGRwLCBpbiwgcXAsIHFuKTsKKworCSAgICBjeSA9IG1wbl9zdWIgKG4ycCwgbjJwLCBybiwgdHAgKyBpbiwgcW4pOworCSAgICBNUE5fQ09QWSAocnAgKyBpbiwgbjJwLCBkbiAtIGluKTsKKwkgICAgcXVvdGllbnRfdG9vX2xhcmdlIHw9IGN5OworCSAgICBjeSA9IG1wbl9zdWJfbiAocnAsIG5wLCB0cCwgaW4pOworCSAgICBjeSA9IG1wbl9zdWJfMSAocnAgKyBpbiwgcnAgKyBpbiwgcm4sIGN5KTsKKwkgICAgcXVvdGllbnRfdG9vX2xhcmdlIHw9IGN5OworCSAgZm9vOgorCSAgICBpZiAocXVvdGllbnRfdG9vX2xhcmdlKQorCSAgICAgIHsKKwkJbXBuX2RlY3JfdSAocXAsIChtcF9saW1iX3QpIDEpOworCQltcG5fYWRkX24gKHJwLCBycCwgZHAsIGRuKTsKKwkgICAgICB9CisJICB9CisJVE1QX0ZSRUU7CisJcmV0dXJuOworICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy90b29tMjJfbXVsLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvdG9vbTIyX211bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0ZjAyNGEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvdG9vbTIyX211bC5jCkBAIC0wLDAgKzEsMjIxIEBACisvKiBtcG5fdG9vbTIyX211bCAtLSBNdWx0aXBseSB7YXAsYW59IGFuZCB7YnAsYm59IHdoZXJlIGFuID49IGJuLiAgT3IgbW9yZQorICAgYWNjdXJhdGVseSwgYm4gPD0gYW4gPCAyYm4uCisKKyAgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3Jiam9ybiBHcmFubHVuZC4KKworICAgVEhFIEZVTkNUSU9OIElOIFRISVMgRklMRSBJUyBJTlRFUk5BTCBXSVRIIEEgTVVUQUJMRSBJTlRFUkZBQ0UuICBJVCBJUyBPTkxZCisgICBTQUZFIFRPIFJFQUNIIElUIFRIUk9VR0ggRE9DVU1FTlRFRCBJTlRFUkZBQ0VTLiAgSU4gRkFDVCwgSVQgSVMgQUxNT1NUCisgICBHVUFSQU5URUVEIFRIQVQgSVQgV0lMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEgRlVUVVJFIEdOVSBNUCBSRUxFQVNFLgorCitDb3B5cmlnaHQgMjAwNi0yMDEwLCAyMDEyLCAyMDE0LCAyMDE4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCisvKiBFdmFsdWF0ZSBpbjogLTEsIDAsICtpbmYKKworICA8LXMtLT48LS1uLS0+CisgICBfX19fIF9fX19fXworICB8X2ExX3xfX19hMF98CisgICB8YjFffF9fX2IwX3wKKyAgIDwtdC0+PC0tbi0tPgorCisgIHYwICA9ICBhMCAgICAgKiBiMCAgICAgICAjICAgQSgwKSpCKDApCisgIHZtMSA9IChhMC0gYTEpKihiMC0gYjEpICAjICBBKC0xKSpCKC0xKQorICB2aW5mPSAgICAgIGExICogICAgIGIxICAgIyBBKGluZikqQihpbmYpCisqLworCisjaWYgVFVORV9QUk9HUkFNX0JVSUxEIHx8IFdBTlRfRkFUX0JJTkFSWQorI2RlZmluZSBNQVlCRV9tdWxfdG9vbTIyICAgMQorI2Vsc2UKKyNkZWZpbmUgTUFZQkVfbXVsX3Rvb20yMgkJCQkJCVwKKyAgKE1VTF9UT09NMzNfVEhSRVNIT0xEID49IDIgKiBNVUxfVE9PTTIyX1RIUkVTSE9MRCkKKyNlbmRpZgorCisjZGVmaW5lIFRPT00yMl9NVUxfTl9SRUMocCwgYSwgYiwgbiwgd3MpCQkJCVwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBpZiAoISBNQVlCRV9tdWxfdG9vbTIyCQkJCQkJXAorCXx8IEJFTE9XX1RIUkVTSE9MRCAobiwgTVVMX1RPT00yMl9USFJFU0hPTEQpKQkJCVwKKyAgICAgIG1wbl9tdWxfYmFzZWNhc2UgKHAsIGEsIG4sIGIsIG4pOwkJCQkJXAorICAgIGVsc2UJCQkJCQkJCVwKKyAgICAgIG1wbl90b29tMjJfbXVsIChwLCBhLCBuLCBiLCBuLCB3cyk7CQkJCVwKKyAgfSB3aGlsZSAoMCkKKworLyogTm9ybWFsbHksIHRoaXMgY2FsbHMgbXVsX2Jhc2VjYXNlIG9yIHRvb20yMl9tdWwuICBCdXQgd2hlbiB3aGVuIHRoZSBmcmFjdGlvbgorICAgTVVMX1RPT00zM19USFJFU0hPTEQgLyBNVUxfVE9PTTIyX1RIUkVTSE9MRCBpcyBsYXJnZSwgYW4gaW5pdGlhbGx5IHNtYWxsCisgICByZWxhdGl2ZSB1bmJhbGFuY2Ugd2lsbCBiZWNvbWUgYSBsYXJnZXIgYW5kIGxhcmdlciByZWxhdGl2ZSB1bmJhbGFuY2Ugd2l0aAorICAgZWFjaCByZWN1cnNpb24gKHRoZSBkaWZmZXJlbmNlIHMtdCB3aWxsIGJlIGludmFyaWFudCBvdmVyIHJlY3Vyc2l2ZSBjYWxscykuCisgICBUaGVyZWZvcmUsIHdlIG5lZWQgdG8gY2FsbCB0b29tMzJfbXVsLiAgRklYTUU6IFN1cHByZXNzIGRlcGVuZGluZyBvbgorICAgTVVMX1RPT00zM19USFJFU0hPTEQgLyBNVUxfVE9PTTIyX1RIUkVTSE9MRCBhbmQgb24gTVVMX1RPT00yMl9USFJFU0hPTEQuICAqLworI2RlZmluZSBUT09NMjJfTVVMX1JFQyhwLCBhLCBhbiwgYiwgYm4sIHdzKQkJCQlcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgaWYgKCEgTUFZQkVfbXVsX3Rvb20yMgkJCQkJCVwKKwl8fCBCRUxPV19USFJFU0hPTEQgKGJuLCBNVUxfVE9PTTIyX1RIUkVTSE9MRCkpCQkJXAorICAgICAgbXBuX211bF9iYXNlY2FzZSAocCwgYSwgYW4sIGIsIGJuKTsJCQkJXAorICAgIGVsc2UgaWYgKDQgKiBhbiA8IDUgKiBibikJCQkJCQlcCisgICAgICBtcG5fdG9vbTIyX211bCAocCwgYSwgYW4sIGIsIGJuLCB3cyk7CQkJCVwKKyAgICBlbHNlCQkJCQkJCQlcCisgICAgICBtcG5fdG9vbTMyX211bCAocCwgYSwgYW4sIGIsIGJuLCB3cyk7CQkJCVwKKyAgfSB3aGlsZSAoMCkKKwordm9pZAorbXBuX3Rvb20yMl9tdWwgKG1wX3B0ciBwcCwKKwkJbXBfc3JjcHRyIGFwLCBtcF9zaXplX3QgYW4sCisJCW1wX3NyY3B0ciBicCwgbXBfc2l6ZV90IGJuLAorCQltcF9wdHIgc2NyYXRjaCkKK3sKKyAgY29uc3QgaW50IF9fZ21wbl9jcHV2ZWNfaW5pdGlhbGl6ZWQgPSAxOworICBtcF9zaXplX3QgbiwgcywgdDsKKyAgaW50IHZtMV9uZWc7CisgIG1wX2xpbWJfdCBjeSwgY3kyOworICBtcF9wdHIgYXNtMTsKKyAgbXBfcHRyIGJzbTE7CisKKyNkZWZpbmUgYTAgIGFwCisjZGVmaW5lIGExICAoYXAgKyBuKQorI2RlZmluZSBiMCAgYnAKKyNkZWZpbmUgYjEgIChicCArIG4pCisKKyAgcyA9IGFuID4+IDE7CisgIG4gPSBhbiAtIHM7CisgIHQgPSBibiAtIG47CisKKyAgQVNTRVJUIChhbiA+PSBibik7CisKKyAgQVNTRVJUICgwIDwgcyAmJiBzIDw9IG4gJiYgcyA+PSBuIC0gMSk7CisgIEFTU0VSVCAoMCA8IHQgJiYgdCA8PSBzKTsKKworICBhc20xID0gcHA7CisgIGJzbTEgPSBwcCArIG47CisKKyAgdm0xX25lZyA9IDA7CisKKyAgLyogQ29tcHV0ZSBhc20xLiAgKi8KKyAgaWYgKHMgPT0gbikKKyAgICB7CisgICAgICBpZiAobXBuX2NtcCAoYTAsIGExLCBuKSA8IDApCisJeworCSAgbXBuX3N1Yl9uIChhc20xLCBhMSwgYTAsIG4pOworCSAgdm0xX25lZyA9IDE7CisJfQorICAgICAgZWxzZQorCXsKKwkgIG1wbl9zdWJfbiAoYXNtMSwgYTAsIGExLCBuKTsKKwl9CisgICAgfQorICBlbHNlIC8qIG4gLSBzID09IDEgKi8KKyAgICB7CisgICAgICBpZiAoYTBbc10gPT0gMCAmJiBtcG5fY21wIChhMCwgYTEsIHMpIDwgMCkKKwl7CisJICBtcG5fc3ViX24gKGFzbTEsIGExLCBhMCwgcyk7CisJICBhc20xW3NdID0gMDsKKwkgIHZtMV9uZWcgPSAxOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBhc20xW3NdID0gYTBbc10gLSBtcG5fc3ViX24gKGFzbTEsIGEwLCBhMSwgcyk7CisJfQorICAgIH0KKworICAvKiBDb21wdXRlIGJzbTEuICAqLworICBpZiAodCA9PSBuKQorICAgIHsKKyAgICAgIGlmIChtcG5fY21wIChiMCwgYjEsIG4pIDwgMCkKKwl7CisJICBtcG5fc3ViX24gKGJzbTEsIGIxLCBiMCwgbik7CisJICB2bTFfbmVnIF49IDE7CisJfQorICAgICAgZWxzZQorCXsKKwkgIG1wbl9zdWJfbiAoYnNtMSwgYjAsIGIxLCBuKTsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKG1wbl96ZXJvX3AgKGIwICsgdCwgbiAtIHQpICYmIG1wbl9jbXAgKGIwLCBiMSwgdCkgPCAwKQorCXsKKwkgIG1wbl9zdWJfbiAoYnNtMSwgYjEsIGIwLCB0KTsKKwkgIE1QTl9aRVJPIChic20xICsgdCwgbiAtIHQpOworCSAgdm0xX25lZyBePSAxOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBtcG5fc3ViIChic20xLCBiMCwgbiwgYjEsIHQpOworCX0KKyAgICB9CisKKyNkZWZpbmUgdjAJcHAJCQkJLyogMm4gKi8KKyNkZWZpbmUgdmluZgkocHAgKyAyICogbikJCQkvKiBzK3QgKi8KKyNkZWZpbmUgdm0xCXNjcmF0Y2gJCQkJLyogMm4gKi8KKyNkZWZpbmUgc2NyYXRjaF9vdXQJc2NyYXRjaCArIDIgKiBuCisKKyAgLyogdm0xLCAybiBsaW1icyAqLworICBUT09NMjJfTVVMX05fUkVDICh2bTEsIGFzbTEsIGJzbTEsIG4sIHNjcmF0Y2hfb3V0KTsKKworICBpZiAocyA+IHQpICBUT09NMjJfTVVMX1JFQyAodmluZiwgYTEsIHMsIGIxLCB0LCBzY3JhdGNoX291dCk7CisgIGVsc2UgICAgICAgIFRPT00yMl9NVUxfTl9SRUMgKHZpbmYsIGExLCBiMSwgcywgc2NyYXRjaF9vdXQpOworCisgIC8qIHYwLCAybiBsaW1icyAqLworICBUT09NMjJfTVVMX05fUkVDICh2MCwgYXAsIGJwLCBuLCBzY3JhdGNoX291dCk7CisKKyAgLyogSCh2MCkgKyBMKHZpbmYpICovCisgIGN5ID0gbXBuX2FkZF9uIChwcCArIDIgKiBuLCB2MCArIG4sIHZpbmYsIG4pOworCisgIC8qIEwodjApICsgSCh2MCkgKi8KKyAgY3kyID0gY3kgKyBtcG5fYWRkX24gKHBwICsgbiwgcHAgKyAyICogbiwgdjAsIG4pOworCisgIC8qIEwodmluZikgKyBIKHZpbmYpICovCisgIGN5ICs9IG1wbl9hZGQgKHBwICsgMiAqIG4sIHBwICsgMiAqIG4sIG4sIHZpbmYgKyBuLCBzICsgdCAtIG4pOworCisgIGlmICh2bTFfbmVnKQorICAgIGN5ICs9IG1wbl9hZGRfbiAocHAgKyBuLCBwcCArIG4sIHZtMSwgMiAqIG4pOworICBlbHNlIHsKKyAgICBjeSAtPSBtcG5fc3ViX24gKHBwICsgbiwgcHAgKyBuLCB2bTEsIDIgKiBuKTsKKyAgICBpZiAoVU5MSUtFTFkgKGN5ICsgMSA9PSAwKSkgeyAvKiBjeSBpcyBuZWdhdGl2ZSAqLworICAgICAgLyogVGhlIHRvdGFsIGNvbnRyaWJ1dGlvbiBvZiB2MCt2aW5mLXZtMSBjYW4gbm90IGJlIG5lZ2F0aXZlLiAqLworI2lmIFdBTlRfQVNTRVJUCisgICAgICAvKiBUaGUgYm9ycm93IGluIGN5IHN0b3BzIHRoZSBwcm9wYWdhdGlvbiBvZiB0aGUgY2FycnkgY3kyLCAqLworICAgICAgQVNTRVJUIChjeTIgPT0gMSk7CisgICAgICBjeSArPSBtcG5fYWRkXzEgKHBwICsgMiAqIG4sIHBwICsgMiAqIG4sIG4sIGN5Mik7CisgICAgICBBU1NFUlQgKGN5ID09IDApOworI2Vsc2UKKyAgICAgIC8qIHdlIHNpbXBseSBmaWxsIHRoZSBhcmVhIHdpdGggemVyb3MuICovCisgICAgICBNUE5fRklMTCAocHAgKyAyICogbiwgbiwgMCk7CisjZW5kaWYKKyAgICAgIHJldHVybjsKKyAgICB9CisgIH0KKworICBBU1NFUlQgKGN5ICA8PSAyKTsKKyAgQVNTRVJUIChjeTIgPD0gMik7CisKKyAgTVBOX0lOQ1JfVSAocHAgKyAyICogbiwgcyArIHQsIGN5Mik7CisgIC8qIGlmIHMrdD09biwgY3kgaXMgemVybywgYnV0IHdlIHNob3VsZCBub3QgYWNjZXNzIHBwWzMqbl0gYXQgYWxsLiAqLworICBNUE5fSU5DUl9VIChwcCArIDMgKiBuLCBzICsgdCAtIG4sIGN5KTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy90b29tMl9zcXIuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy90b29tMl9zcXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWFhMTQxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Rvb20yX3Nxci5jCkBAIC0wLDAgKzEsMTU1IEBACisvKiBtcG5fdG9vbTJfc3FyIC0tIFNxdWFyZSB7YXAsYW59LgorCisgICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisKKyAgIFRIRSBGVU5DVElPTiBJTiBUSElTIEZJTEUgSVMgSU5URVJOQUwgV0lUSCBBIE1VVEFCTEUgSU5URVJGQUNFLiAgSVQgSVMgT05MWQorICAgU0FGRSBUTyBSRUFDSCBJVCBUSFJPVUdIIERPQ1VNRU5URUQgSU5URVJGQUNFUy4gIElOIEZBQ1QsIElUIElTIEFMTU9TVAorICAgR1VBUkFOVEVFRCBUSEFUIElUIFdJTEwgQ0hBTkdFIE9SIERJU0FQUEVBUiBJTiBBIEZVVFVSRSBHTlUgTVAgUkVMRUFTRS4KKworQ29weXJpZ2h0IDIwMDYtMjAxMCwgMjAxMiwgMjAxNCwgMjAxOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworLyogRXZhbHVhdGUgaW46IC0xLCAwLCAraW5mCisKKyAgPC1zLS0+PC0tbi0tPgorICAgX19fXyBfX19fX18KKyAgfF9hMV98X19fYTBffAorCisgIHYwICA9ICBhMCAgICAgXjIgICMgICBBKDApXjIKKyAgdm0xID0gKGEwLSBhMSleMiAgIyAgQSgtMSleMgorICB2aW5mPSAgICAgIGExIF4yICAjIEEoaW5mKV4yCisqLworCisjaWYgVFVORV9QUk9HUkFNX0JVSUxEIHx8IFdBTlRfRkFUX0JJTkFSWQorI2RlZmluZSBNQVlCRV9zcXJfdG9vbTIgICAxCisjZWxzZQorI2RlZmluZSBNQVlCRV9zcXJfdG9vbTIJCQkJCQkJXAorICAoU1FSX1RPT00zX1RIUkVTSE9MRCA+PSAyICogU1FSX1RPT00yX1RIUkVTSE9MRCkKKyNlbmRpZgorCisjZGVmaW5lIFRPT00yX1NRUl9SRUMocCwgYSwgbiwgd3MpCQkJCQlcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgaWYgKCEgTUFZQkVfc3FyX3Rvb20yCQkJCQkJXAorCXx8IEJFTE9XX1RIUkVTSE9MRCAobiwgU1FSX1RPT00yX1RIUkVTSE9MRCkpCQkJXAorICAgICAgbXBuX3Nxcl9iYXNlY2FzZSAocCwgYSwgbik7CQkJCQlcCisgICAgZWxzZQkJCQkJCQkJXAorICAgICAgbXBuX3Rvb20yX3NxciAocCwgYSwgbiwgd3MpOwkJCQkJXAorICB9IHdoaWxlICgwKQorCit2b2lkCittcG5fdG9vbTJfc3FyIChtcF9wdHIgcHAsCisJICAgICAgIG1wX3NyY3B0ciBhcCwgbXBfc2l6ZV90IGFuLAorCSAgICAgICBtcF9wdHIgc2NyYXRjaCkKK3sKKyAgY29uc3QgaW50IF9fZ21wbl9jcHV2ZWNfaW5pdGlhbGl6ZWQgPSAxOworICBtcF9zaXplX3QgbiwgczsKKyAgbXBfbGltYl90IGN5LCBjeTI7CisgIG1wX3B0ciBhc20xOworCisjZGVmaW5lIGEwICBhcAorI2RlZmluZSBhMSAgKGFwICsgbikKKworICBzID0gYW4gPj4gMTsKKyAgbiA9IGFuIC0gczsKKworICBBU1NFUlQgKDAgPCBzICYmIHMgPD0gbiAmJiBzID49IG4gLSAxKTsKKworICBhc20xID0gcHA7CisKKyAgLyogQ29tcHV0ZSBhc20xLiAgKi8KKyAgaWYgKHMgPT0gbikKKyAgICB7CisgICAgICBpZiAobXBuX2NtcCAoYTAsIGExLCBuKSA8IDApCisJeworCSAgbXBuX3N1Yl9uIChhc20xLCBhMSwgYTAsIG4pOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBtcG5fc3ViX24gKGFzbTEsIGEwLCBhMSwgbik7CisJfQorICAgIH0KKyAgZWxzZSAvKiBuIC0gcyA9PSAxICovCisgICAgeworICAgICAgaWYgKGEwW3NdID09IDAgJiYgbXBuX2NtcCAoYTAsIGExLCBzKSA8IDApCisJeworCSAgbXBuX3N1Yl9uIChhc20xLCBhMSwgYTAsIHMpOworCSAgYXNtMVtzXSA9IDA7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGFzbTFbc10gPSBhMFtzXSAtIG1wbl9zdWJfbiAoYXNtMSwgYTAsIGExLCBzKTsKKwl9CisgICAgfQorCisjZGVmaW5lIHYwCXBwCQkJCS8qIDJuICovCisjZGVmaW5lIHZpbmYJKHBwICsgMiAqIG4pCQkJLyogcytzICovCisjZGVmaW5lIHZtMQlzY3JhdGNoCQkJCS8qIDJuICovCisjZGVmaW5lIHNjcmF0Y2hfb3V0CXNjcmF0Y2ggKyAyICogbgorCisgIC8qIHZtMSwgMm4gbGltYnMgKi8KKyAgVE9PTTJfU1FSX1JFQyAodm0xLCBhc20xLCBuLCBzY3JhdGNoX291dCk7CisKKyAgLyogdmluZiwgcytzIGxpbWJzICovCisgIFRPT00yX1NRUl9SRUMgKHZpbmYsIGExLCBzLCBzY3JhdGNoX291dCk7CisKKyAgLyogdjAsIDJuIGxpbWJzICovCisgIFRPT00yX1NRUl9SRUMgKHYwLCBhcCwgbiwgc2NyYXRjaF9vdXQpOworCisgIC8qIEgodjApICsgTCh2aW5mKSAqLworICBjeSA9IG1wbl9hZGRfbiAocHAgKyAyICogbiwgdjAgKyBuLCB2aW5mLCBuKTsKKworICAvKiBMKHYwKSArIEgodjApICovCisgIGN5MiA9IGN5ICsgbXBuX2FkZF9uIChwcCArIG4sIHBwICsgMiAqIG4sIHYwLCBuKTsKKworICAvKiBMKHZpbmYpICsgSCh2aW5mKSAqLworICBjeSArPSBtcG5fYWRkIChwcCArIDIgKiBuLCBwcCArIDIgKiBuLCBuLCB2aW5mICsgbiwgcyArIHMgLSBuKTsKKworICBjeSAtPSBtcG5fc3ViX24gKHBwICsgbiwgcHAgKyBuLCB2bTEsIDIgKiBuKTsKKworICBBU1NFUlQgKGN5ICsgMSA8PSAzKTsKKyAgQVNTRVJUIChjeTIgPD0gMik7CisKKyAgaWYgKExJS0VMWSAoY3kgPD0gMikpIHsKKyAgICBNUE5fSU5DUl9VIChwcCArIDIgKiBuLCBzICsgcywgY3kyKTsKKyAgICBNUE5fSU5DUl9VIChwcCArIDMgKiBuLCBzICsgcyAtIG4sIGN5KTsKKyAgfSBlbHNlIHsgLyogY3kgaXMgbmVnYXRpdmUgKi8KKyAgICAvKiBUaGUgdG90YWwgY29udHJpYnV0aW9uIG9mIHYwK3ZpbmYtdm0xIGNhbiBub3QgYmUgbmVnYXRpdmUuICovCisjaWYgV0FOVF9BU1NFUlQKKyAgICAvKiBUaGUgYm9ycm93IGluIGN5IHN0b3BzIHRoZSBwcm9wYWdhdGlvbiBvZiB0aGUgY2FycnkgY3kyLCAqLworICAgIEFTU0VSVCAoY3kyID09IDEpOworICAgIGN5ICs9IG1wbl9hZGRfMSAocHAgKyAyICogbiwgcHAgKyAyICogbiwgbiwgY3kyKTsKKyAgICBBU1NFUlQgKGN5ID09IDApOworI2Vsc2UKKyAgICAvKiB3ZSBzaW1wbHkgZmlsbCB0aGUgYXJlYSB3aXRoIHplcm9zLiAqLworICAgIE1QTl9GSUxMIChwcCArIDIgKiBuLCBuLCAwKTsKKyNlbmRpZgorICB9Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvdG9vbTMyX211bC5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Rvb20zMl9tdWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDNiYTU2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Rvb20zMl9tdWwuYwpAQCAtMCwwICsxLDMyMiBAQAorLyogbXBuX3Rvb20zMl9tdWwgLS0gTXVsdGlwbHkge2FwLGFufSBhbmQge2JwLGJufSB3aGVyZSBhbiBpcyBub21pbmFsbHkgMS41CisgICB0aW1lcyBhcyBsYXJnZSBhcyBibi4gIE9yIG1vcmUgYWNjdXJhdGVseSwgYm4gPCBhbiA8IDNibi4KKworICAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqb3JuIEdyYW5sdW5kLgorICAgSW1wcm92ZW1lbnRzIGJ5IE1hcmNvIEJvZHJhdG8gYW5kIE5pZWxzIE3DtmxsZXIuCisKKyAgIFRoZSBpZGVhIG9mIGFwcGx5aW5nIHRvb20gdG8gdW5iYWxhbmNlZCBtdWx0aXBsaWNhdGlvbiBpcyBkdWUgdG8gTWFyY28KKyAgIEJvZHJhdG8gYW5kIEFsYmVydG8gWmFub25pLgorCisgICBUSEUgRlVOQ1RJT04gSU4gVEhJUyBGSUxFIElTIElOVEVSTkFMIFdJVEggQSBNVVRBQkxFIElOVEVSRkFDRS4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggSVQgVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuICBJTiBGQUNULCBJVCBJUyBBTE1PU1QKKyAgIEdVQVJBTlRFRUQgVEhBVCBJVCBXSUxMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR05VIE1QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAyMDA2LTIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisKKy8qIEV2YWx1YXRlIGluOiAtMSwgMCwgKzEsICtpbmYKKworICA8LXMtPjwtLW4tLT48LS1uLS0+CisgICBfX18gX19fX19fIF9fX19fXworICB8YTJffF9fX2ExX3xfX19hMF98CisJfF9iMV98X19fYjBffAorCTwtdC0tPjwtLW4tLT4KKworICB2MCAgPSAgYTAgICAgICAgICAqIGIwICAgICAgIyAgIEEoMCkqQigwKQorICB2MSAgPSAoYTArIGExKyBhMikqKGIwKyBiMSkgIyAgIEEoMSkqQigxKSAgICAgIGFoICA8PSAyICBiaCA8PSAxCisgIHZtMSA9IChhMC0gYTErIGEyKSooYjAtIGIxKSAjICBBKC0xKSpCKC0xKSAgICB8YWh8IDw9IDEgIGJoID0gMAorICB2aW5mPSAgICAgICAgICBhMiAqICAgICBiMSAgIyBBKGluZikqQihpbmYpCisqLworCisjZGVmaW5lIFRPT00zMl9NVUxfTl9SRUMocCwgYSwgYiwgbiwgd3MpCQkJCVwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBtcG5fbXVsX24gKHAsIGEsIGIsIG4pOwkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKwordm9pZAorbXBuX3Rvb20zMl9tdWwgKG1wX3B0ciBwcCwKKwkJbXBfc3JjcHRyIGFwLCBtcF9zaXplX3QgYW4sCisJCW1wX3NyY3B0ciBicCwgbXBfc2l6ZV90IGJuLAorCQltcF9wdHIgc2NyYXRjaCkKK3sKKyAgbXBfc2l6ZV90IG4sIHMsIHQ7CisgIGludCB2bTFfbmVnOworICBtcF9saW1iX3QgY3k7CisgIG1wX2xpbWJfc2lnbmVkX3QgaGk7CisgIG1wX2xpbWJfdCBhcDFfaGksIGJwMV9oaTsKKworI2RlZmluZSBhMCAgYXAKKyNkZWZpbmUgYTEgIChhcCArIG4pCisjZGVmaW5lIGEyICAoYXAgKyAyICogbikKKyNkZWZpbmUgYjAgIGJwCisjZGVmaW5lIGIxICAoYnAgKyBuKQorCisgIC8qIFJlcXVpcmVkLCB0byBlbnN1cmUgdGhhdCBzICsgdCA+PSBuLiAqLworICBBU1NFUlQgKGJuICsgMiA8PSBhbiAmJiBhbiArIDYgPD0gMypibik7CisKKyAgbiA9IDEgKyAoMiAqIGFuID49IDMgKiBibiA/IChhbiAtIDEpIC8gKHNpemVfdCkgMyA6IChibiAtIDEpID4+IDEpOworCisgIHMgPSBhbiAtIDIgKiBuOworICB0ID0gYm4gLSBuOworCisgIEFTU0VSVCAoMCA8IHMgJiYgcyA8PSBuKTsKKyAgQVNTRVJUICgwIDwgdCAmJiB0IDw9IG4pOworICBBU1NFUlQgKHMgKyB0ID49IG4pOworCisgIC8qIFByb2R1Y3QgYXJlYSBvZiBzaXplIGFuICsgYm4gPSAzKm4gKyBzICsgdCA+PSA0Km4gKyAyLiAqLworI2RlZmluZSBhcDEgKHBwKQkJLyogbiwgbW9zdCBzaWduaWZpY2FudCBsaW1iIGluIGFwMV9oaSAqLworI2RlZmluZSBicDEgKHBwICsgbikJCS8qIG4sIG1vc3Qgc2lnbmlmaWNhbnQgYml0IGluIGJwMV9oaSAqLworI2RlZmluZSBhbTEgKHBwICsgMipuKQkJLyogbiwgbW9zdCBzaWduaWZpY2FudCBiaXQgaW4gaGkgKi8KKyNkZWZpbmUgYm0xIChwcCArIDMqbikJCS8qIG4gKi8KKyNkZWZpbmUgdjEgKHNjcmF0Y2gpCQkvKiAybiArIDEgKi8KKyNkZWZpbmUgdm0xIChwcCkJCS8qIDJuICsgMSAqLworI2RlZmluZSBzY3JhdGNoX291dCAoc2NyYXRjaCArIDIqbiArIDEpIC8qIEN1cnJlbnRseSB1bnVzZWQuICovCisKKyAgLyogU2NyYXRjaCBuZWVkOiAyKm4gKyAxICsgc2NyYXRjaCBmb3IgdGhlIHJlY3Vyc2l2ZSBtdWx0aXBsaWNhdGlvbnMuICovCisKKyAgLyogRklYTUU6IEtlZXAgdjFbMipuXSBhbmQgdm0xWzIqbl0gaW4gc2NhbGFyIHZhcmlhYmxlcz8gKi8KKworICAvKiBDb21wdXRlIGFwMSA9IGEwICsgYTEgKyBhMiwgYW0xID0gYTAgLSBhMSArIGEyICovCisgIGFwMV9oaSA9IG1wbl9hZGQgKGFwMSwgYTAsIG4sIGEyLCBzKTsKKyNpZiBIQVZFX05BVElWRV9tcG5fYWRkX25fc3ViX24KKyAgaWYgKGFwMV9oaSA9PSAwICYmIG1wbl9jbXAgKGFwMSwgYTEsIG4pIDwgMCkKKyAgICB7CisgICAgICBhcDFfaGkgPSBtcG5fYWRkX25fc3ViX24gKGFwMSwgYW0xLCBhMSwgYXAxLCBuKSA+PiAxOworICAgICAgaGkgPSAwOworICAgICAgdm0xX25lZyA9IDE7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgY3kgPSBtcG5fYWRkX25fc3ViX24gKGFwMSwgYW0xLCBhcDEsIGExLCBuKTsKKyAgICAgIGhpID0gYXAxX2hpIC0gKGN5ICYgMSk7CisgICAgICBhcDFfaGkgKz0gKGN5ID4+IDEpOworICAgICAgdm0xX25lZyA9IDA7CisgICAgfQorI2Vsc2UKKyAgaWYgKGFwMV9oaSA9PSAwICYmIG1wbl9jbXAgKGFwMSwgYTEsIG4pIDwgMCkKKyAgICB7CisgICAgICBBU1NFUlRfTk9DQVJSWSAobXBuX3N1Yl9uIChhbTEsIGExLCBhcDEsIG4pKTsKKyAgICAgIGhpID0gMDsKKyAgICAgIHZtMV9uZWcgPSAxOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGhpID0gYXAxX2hpIC0gbXBuX3N1Yl9uIChhbTEsIGFwMSwgYTEsIG4pOworICAgICAgdm0xX25lZyA9IDA7CisgICAgfQorICBhcDFfaGkgKz0gbXBuX2FkZF9uIChhcDEsIGFwMSwgYTEsIG4pOworI2VuZGlmCisKKyAgLyogQ29tcHV0ZSBicDEgPSBiMCArIGIxIGFuZCBibTEgPSBiMCAtIGIxLiAqLworICBpZiAodCA9PSBuKQorICAgIHsKKyNpZiBIQVZFX05BVElWRV9tcG5fYWRkX25fc3ViX24KKyAgICAgIGlmIChtcG5fY21wIChiMCwgYjEsIG4pIDwgMCkKKwl7CisJICBjeSA9IG1wbl9hZGRfbl9zdWJfbiAoYnAxLCBibTEsIGIxLCBiMCwgbik7CisJICB2bTFfbmVnIF49IDE7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGN5ID0gbXBuX2FkZF9uX3N1Yl9uIChicDEsIGJtMSwgYjAsIGIxLCBuKTsKKwl9CisgICAgICBicDFfaGkgPSBjeSA+PiAxOworI2Vsc2UKKyAgICAgIGJwMV9oaSA9IG1wbl9hZGRfbiAoYnAxLCBiMCwgYjEsIG4pOworCisgICAgICBpZiAobXBuX2NtcCAoYjAsIGIxLCBuKSA8IDApCisJeworCSAgQVNTRVJUX05PQ0FSUlkgKG1wbl9zdWJfbiAoYm0xLCBiMSwgYjAsIG4pKTsKKwkgIHZtMV9uZWcgXj0gMTsKKwl9CisgICAgICBlbHNlCisJeworCSAgQVNTRVJUX05PQ0FSUlkgKG1wbl9zdWJfbiAoYm0xLCBiMCwgYjEsIG4pKTsKKwl9CisjZW5kaWYKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBGSVhNRTogU2hvdWxkIHN0aWxsIHVzZSBtcG5fYWRkX25fc3ViX24gZm9yIHRoZSBtYWluIHBhcnQuICovCisgICAgICBicDFfaGkgPSBtcG5fYWRkIChicDEsIGIwLCBuLCBiMSwgdCk7CisKKyAgICAgIGlmIChtcG5femVyb19wIChiMCArIHQsIG4gLSB0KSAmJiBtcG5fY21wIChiMCwgYjEsIHQpIDwgMCkKKwl7CisJICBBU1NFUlRfTk9DQVJSWSAobXBuX3N1Yl9uIChibTEsIGIxLCBiMCwgdCkpOworCSAgTVBOX1pFUk8gKGJtMSArIHQsIG4gLSB0KTsKKwkgIHZtMV9uZWcgXj0gMTsKKwl9CisgICAgICBlbHNlCisJeworCSAgQVNTRVJUX05PQ0FSUlkgKG1wbl9zdWIgKGJtMSwgYjAsIG4sIGIxLCB0KSk7CisJfQorICAgIH0KKworICBUT09NMzJfTVVMX05fUkVDICh2MSwgYXAxLCBicDEsIG4sIHNjcmF0Y2hfb3V0KTsKKyAgaWYgKGFwMV9oaSA9PSAxKQorICAgIHsKKyAgICAgIGN5ID0gYnAxX2hpICsgbXBuX2FkZF9uICh2MSArIG4sIHYxICsgbiwgYnAxLCBuKTsKKyAgICB9CisgIGVsc2UgaWYgKGFwMV9oaSA9PSAyKQorICAgIHsKKyNpZiBIQVZFX05BVElWRV9tcG5fYWRkbHNoMV9uCisgICAgICBjeSA9IDIgKiBicDFfaGkgKyBtcG5fYWRkbHNoMV9uICh2MSArIG4sIHYxICsgbiwgYnAxLCBuKTsKKyNlbHNlCisgICAgICBjeSA9IDIgKiBicDFfaGkgKyBtcG5fYWRkbXVsXzEgKHYxICsgbiwgYnAxLCBuLCBDTlNUX0xJTUIoMikpOworI2VuZGlmCisgICAgfQorICBlbHNlCisgICAgY3kgPSAwOworICBpZiAoYnAxX2hpICE9IDApCisgICAgY3kgKz0gbXBuX2FkZF9uICh2MSArIG4sIHYxICsgbiwgYXAxLCBuKTsKKyAgdjFbMiAqIG5dID0gY3k7CisKKyAgVE9PTTMyX01VTF9OX1JFQyAodm0xLCBhbTEsIGJtMSwgbiwgc2NyYXRjaF9vdXQpOworICBpZiAoaGkpCisgICAgaGkgPSBtcG5fYWRkX24gKHZtMStuLCB2bTErbiwgYm0xLCBuKTsKKworICB2bTFbMipuXSA9IGhpOworCisgIC8qIHYxIDwtLSAodjEgKyB2bTEpIC8gMiA9IHgwICsgeDIgKi8KKyAgaWYgKHZtMV9uZWcpCisgICAgeworI2lmIEhBVkVfTkFUSVZFX21wbl9yc2gxc3ViX24KKyAgICAgIG1wbl9yc2gxc3ViX24gKHYxLCB2MSwgdm0xLCAyKm4rMSk7CisjZWxzZQorICAgICAgbXBuX3N1Yl9uICh2MSwgdjEsIHZtMSwgMipuKzEpOworICAgICAgQVNTRVJUX05PQ0FSUlkgKG1wbl9yc2hpZnQgKHYxLCB2MSwgMipuKzEsIDEpKTsKKyNlbmRpZgorICAgIH0KKyAgZWxzZQorICAgIHsKKyNpZiBIQVZFX05BVElWRV9tcG5fcnNoMWFkZF9uCisgICAgICBtcG5fcnNoMWFkZF9uICh2MSwgdjEsIHZtMSwgMipuKzEpOworI2Vsc2UKKyAgICAgIG1wbl9hZGRfbiAodjEsIHYxLCB2bTEsIDIqbisxKTsKKyAgICAgIEFTU0VSVF9OT0NBUlJZIChtcG5fcnNoaWZ0ICh2MSwgdjEsIDIqbisxLCAxKSk7CisjZW5kaWYKKyAgICB9CisKKyAgLyogV2UgZ2V0IHgxICsgeDMgPSAoeDAgKyB4MikgLSAoeDAgLSB4MSArIHgyIC0geDMpLCBhbmQgaGVuY2UKKworICAgICB5ID0geDEgKyB4MyArICh4MCArIHgyKSAqIEIKKyAgICAgICA9ICh4MCArIHgyKSAqIEIgKyAoeDAgKyB4MikgLSB2bTEuCisKKyAgICAgeSBpcyAzKm4gKyAxIGxpbWJzLCB5ID0geTAgKyB5MSBCICsgeTIgQl4yLiBXZSBzdG9yZSB0aGVtIGFzCisgICAgIGZvbGxvd3M6IHkwIGF0IHNjcmF0Y2gsIHkxIGF0IHBwICsgMipuLCBhbmQgeTIgYXQgc2NyYXRjaCArIG4KKyAgICAgKGFscmVhZHkgaW4gcGxhY2UsIGV4Y2VwdCBmb3IgY2FycnkgcHJvcGFnYXRpb24pLgorCisgICAgIFdlIHRodXMgYWRkCisKKyAgIEJeMyAgQl4yICAgQiAgICAxCisgICAgfCAgICB8ICAgIHwgICAgfAorICAgKy0tLS0tKy0tLS0rCisgKyB8ICB4MCArIHgyIHwKKyAgICstLS0tKy0tLS0tKy0tLS0rCisgKyAgICAgIHwgIHgwICsgeDIgfAorCSstLS0tLS0tLS0tKworIC0gICAgICB8ICB2bTEgICAgIHwKKyAtLSstLS0tKystLS0tKy0tLS0rLQorICAgfCB5MiAgfCB5MSB8IHkwIHwKKyAgICstLS0tLSstLS0tKy0tLS0rCisKKyAgU2luY2Ugd2Ugc3RvcmUgeTAgYXQgdGhlIHNhbWUgbG9jYXRpb24gYXMgdGhlIGxvdyBoYWxmIG9mIHgwICsgeDIsIHdlCisgIG5lZWQgdG8gZG8gdGhlIG1pZGRsZSBzdW0gZmlyc3QuICovCisKKyAgaGkgPSB2bTFbMipuXTsKKyAgY3kgPSBtcG5fYWRkX24gKHBwICsgMipuLCB2MSwgdjEgKyBuLCBuKTsKKyAgTVBOX0lOQ1JfVSAodjEgKyBuLCBuICsgMSwgY3kgKyB2MVsyKm5dKTsKKworICAvKiBGSVhNRTogQ2FuIHdlIGdldCByaWQgb2YgdGhpcyBzZWNvbmQgdm0xX25lZyBjb25kaXRpb25hbCBieQorICAgICBzd2FwcGluZyB0aGUgbG9jYXRpb24gb2YgKzEgYW5kIC0xIHZhbHVlcz8gKi8KKyAgaWYgKHZtMV9uZWcpCisgICAgeworICAgICAgY3kgPSBtcG5fYWRkX24gKHYxLCB2MSwgdm0xLCBuKTsKKyAgICAgIGhpICs9IG1wbl9hZGRfbmMgKHBwICsgMipuLCBwcCArIDIqbiwgdm0xICsgbiwgbiwgY3kpOworICAgICAgTVBOX0lOQ1JfVSAodjEgKyBuLCBuKzEsIGhpKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBjeSA9IG1wbl9zdWJfbiAodjEsIHYxLCB2bTEsIG4pOworICAgICAgaGkgKz0gbXBuX3N1Yl9uYyAocHAgKyAyKm4sIHBwICsgMipuLCB2bTEgKyBuLCBuLCBjeSk7CisgICAgICBNUE5fREVDUl9VICh2MSArIG4sIG4rMSwgaGkpOworICAgIH0KKworICBUT09NMzJfTVVMX05fUkVDIChwcCwgYTAsIGIwLCBuLCBzY3JhdGNoX291dCk7CisgIC8qIHZpbmYsIHMrdCBsaW1icy4gIFVzZSBtcG5fbXVsIGZvciBub3csIHRvIGhhbmRsZSB1bmJhbGFuY2VkIG9wZXJhbmRzICovCisgIGlmIChzID4gdCkgIG1wbl9tdWwgKHBwKzMqbiwgYTIsIHMsIGIxLCB0KTsKKyAgZWxzZSAgICAgICAgbXBuX211bCAocHArMypuLCBiMSwgdCwgYTIsIHMpOworCisgIC8qIFJlbWFpbmluZyBpbnRlcnBvbGF0aW9uLgorCisgICAgIHkgKiBCICsgeDAgKyB4MyBCXjMgLSB4MCBCXjIgLSB4MyBCCisgICAgID0gKHgxICsgeDMpIEIgKyAoeDAgKyB4MikgQl4yICsgeDAgKyB4MyBCXjMgLSB4MCBCXjIgLSB4MyBCCisgICAgID0geTAgQiArIHkxIEJeMiArIHkzIEJeMyArIEx4MCArIEggeDAgQgorICAgICAgICsgTCB4MyBCXjMgKyBIIHgzIEJeNCAtIEx4MCBCXjIgLSBIIHgwIEJeMyAtIEwgeDMgQiAtIEggeDMgQl4yCisgICAgID0gTCB4MCArICh5MCArIEggeDAgLSBMIHgzKSBCICsgKHkxIC0gTCB4MCAtIEggeDMpIEJeMgorICAgICAgICsgKHkyIC0gKEggeDAgLSBMIHgzKSkgQl4zICsgSCB4MyBCXjQKKworCSAgQl40ICAgICAgIEJeMyAgICAgICBCXjIgICAgICAgIEIgICAgICAgICAxCisgfCAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICB8CisgICArLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0rCisgICB8ICBIeDMgIHwgICAgICAgICAgICAgICAgICAgfCBIeDAtTHgzIHwgICAgTHgwICB8CisgICArLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rCisJICB8ICAgIHkyICAgIHwgIHkxICAgICB8ICAgeTAgICAgfAorCSAgKystLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSsKKwkgIC18IEh4MC1MeDMgfCAtIEx4MCAgIHwKKwkgICArLS0tLS0tLS0tKy0tLS0tLS0tLSsKKwkJICAgICAgfCAtIEh4MyAgfAorCQkgICAgICArLS0tLS0tLS0rCisKKyAgICBXZSBtdXN0IHRha2UgaW50byBhY2NvdW50IHRoZSBjYXJyeSBmcm9tIEh4MCAtIEx4My4KKyAgKi8KKworICBjeSA9IG1wbl9zdWJfbiAocHAgKyBuLCBwcCArIG4sIHBwKzMqbiwgbik7CisgIGhpID0gc2NyYXRjaFsyKm5dICsgY3k7CisKKyAgY3kgPSBtcG5fc3ViX25jIChwcCArIDIqbiwgcHAgKyAyKm4sIHBwLCBuLCBjeSk7CisgIGhpIC09IG1wbl9zdWJfbmMgKHBwICsgMypuLCBzY3JhdGNoICsgbiwgcHAgKyBuLCBuLCBjeSk7CisKKyAgaGkgKz0gbXBuX2FkZCAocHAgKyBuLCBwcCArIG4sIDMqbiwgc2NyYXRjaCwgbik7CisKKyAgLyogRklYTUU6IElzIHN1cHBvcnQgZm9yIHMgKyB0ID09IG4gbmVlZGVkPyAqLworICBpZiAoTElLRUxZIChzICsgdCA+IG4pKQorICAgIHsKKyAgICAgIGhpIC09IG1wbl9zdWIgKHBwICsgMipuLCBwcCArIDIqbiwgMipuLCBwcCArIDQqbiwgcyt0LW4pOworCisgICAgICBpZiAoaGkgPCAwKQorCU1QTl9ERUNSX1UgKHBwICsgNCpuLCBzK3QtbiwgLWhpKTsKKyAgICAgIGVsc2UKKwlNUE5fSU5DUl9VIChwcCArIDQqbiwgcyt0LW4sIGhpKTsKKyAgICB9CisgIGVsc2UKKyAgICBBU1NFUlQgKGhpID09IDApOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Rvb20zM19tdWwuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy90b29tMzNfbXVsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY0OWY0MgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy90b29tMzNfbXVsLmMKQEAgLTAsMCArMSwzMTUgQEAKKy8qIG1wbl90b29tMzNfbXVsIC0tIE11bHRpcGx5IHthcCxhbn0gYW5kIHtwLGJufSB3aGVyZSBhbiBhbmQgYm4gYXJlIGNsb3NlIGluCisgICBzaXplLiAgT3IgbW9yZSBhY2N1cmF0ZWx5LCBibiA8PSBhbiA8ICgzLzIpYm4uCisKKyAgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3Jiam9ybiBHcmFubHVuZC4KKyAgIEFkZGl0aW9uYWwgaW1wcm92ZW1lbnRzIGJ5IE1hcmNvIEJvZHJhdG8uCisKKyAgIFRIRSBGVU5DVElPTiBJTiBUSElTIEZJTEUgSVMgSU5URVJOQUwgV0lUSCBBIE1VVEFCTEUgSU5URVJGQUNFLiAgSVQgSVMgT05MWQorICAgU0FGRSBUTyBSRUFDSCBJVCBUSFJPVUdIIERPQ1VNRU5URUQgSU5URVJGQUNFUy4gIElOIEZBQ1QsIElUIElTIEFMTU9TVAorICAgR1VBUkFOVEVFRCBUSEFUIElUIFdJTEwgQ0hBTkdFIE9SIERJU0FQUEVBUiBJTiBBIEZVVFVSRSBHTlUgTVAgUkVMRUFTRS4KKworQ29weXJpZ2h0IDIwMDYtMjAwOCwgMjAxMCwgMjAxMiwgMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworLyogRXZhbHVhdGUgaW46IC0xLCAwLCArMSwgKzIsICtpbmYKKworICA8LXMtLT48LS1uLS0+PC0tbi0tPgorICAgX19fXyBfX19fX18gX19fX19fCisgIHxfYTJffF9fX2ExX3xfX19hMF98CisgICB8YjJffF9fX2IxX3xfX19iMF98CisgICA8LXQtPjwtLW4tLT48LS1uLS0+CisKKyAgdjAgID0gIGEwICAgICAgICAgKiBiMCAgICAgICAgICAjICAgQSgwKSpCKDApCisgIHYxICA9IChhMCsgYTErIGEyKSooYjArIGIxKyBiMikgIyAgIEEoMSkqQigxKSAgICAgIGFoICA8PSAyICBiaCA8PSAyCisgIHZtMSA9IChhMC0gYTErIGEyKSooYjAtIGIxKyBiMikgIyAgQSgtMSkqQigtMSkgICAgfGFofCA8PSAxICBiaCA8PSAxCisgIHYyICA9IChhMCsyYTErNGEyKSooYjArMmIxKzRiMikgIyAgIEEoMikqQigyKSAgICAgIGFoICA8PSA2ICBiaCA8PSA2CisgIHZpbmY9ICAgICAgICAgIGEyICogICAgICAgICBiMiAgIyBBKGluZikqQihpbmYpCisqLworCisjaWYgVFVORV9QUk9HUkFNX0JVSUxEIHx8IFdBTlRfRkFUX0JJTkFSWQorI2RlZmluZSBNQVlCRV9tdWxfYmFzZWNhc2UgMQorI2RlZmluZSBNQVlCRV9tdWxfdG9vbTMzICAgMQorI2Vsc2UKKyNkZWZpbmUgTUFZQkVfbXVsX2Jhc2VjYXNlCQkJCQkJXAorICAoTVVMX1RPT00zM19USFJFU0hPTEQgPCAzICogTVVMX1RPT00yMl9USFJFU0hPTEQpCisjZGVmaW5lIE1BWUJFX211bF90b29tMzMJCQkJCQlcCisgIChNVUxfVE9PTTQ0X1RIUkVTSE9MRCA+PSAzICogTVVMX1RPT00zM19USFJFU0hPTEQpCisjZW5kaWYKKworLyogRklYTUU6IFRPT00zM19NVUxfTl9SRUMgaXMgbm90IHF1aXRlIHJpZ2h0IGZvciBhIGJhbGFuY2VkCisgICBtdWx0aXBsaWNhdGlvbiBhdCB0aGUgaW5maW5pdHkgcG9pbnQuIFdlIG1heSBoYXZlCisgICBNQVlCRV9tdWxfYmFzZWNhc2UgPT0gMCwgYW5kIHN0aWxsIGdldCBzIGp1c3QgYmVsb3cKKyAgIE1VTF9UT09NMjJfVEhSRVNIT0xELiBJZiBNVUxfVE9PTTMzX1RIUkVTSE9MRCA9PSA3LCB3ZSBjYW4gZXZlbiBnZXQKKyAgIHMgPT0gMSBhbmQgbXBuX3Rvb20yMl9tdWwgd2lsbCBjcmFzaC4KKyovCisKKyNkZWZpbmUgVE9PTTMzX01VTF9OX1JFQyhwLCBhLCBiLCBuLCB3cykJCQkJXAorICBkbyB7CQkJCQkJCQkJXAorICAgIGlmIChNQVlCRV9tdWxfYmFzZWNhc2UJCQkJCQlcCisJJiYgQkVMT1dfVEhSRVNIT0xEIChuLCBNVUxfVE9PTTIyX1RIUkVTSE9MRCkpCQkJXAorICAgICAgbXBuX211bF9iYXNlY2FzZSAocCwgYSwgbiwgYiwgbik7CQkJCQlcCisgICAgZWxzZSBpZiAoISBNQVlCRV9tdWxfdG9vbTMzCQkJCQkJXAorCSAgICAgfHwgQkVMT1dfVEhSRVNIT0xEIChuLCBNVUxfVE9PTTMzX1RIUkVTSE9MRCkpCQlcCisgICAgICBtcG5fdG9vbTIyX211bCAocCwgYSwgbiwgYiwgbiwgd3MpOwkJCQlcCisgICAgZWxzZQkJCQkJCQkJXAorICAgICAgbXBuX3Rvb20zM19tdWwgKHAsIGEsIG4sIGIsIG4sIHdzKTsJCQkJXAorICB9IHdoaWxlICgwKQorCit2b2lkCittcG5fdG9vbTMzX211bCAobXBfcHRyIHBwLAorCQltcF9zcmNwdHIgYXAsIG1wX3NpemVfdCBhbiwKKwkJbXBfc3JjcHRyIGJwLCBtcF9zaXplX3QgYm4sCisJCW1wX3B0ciBzY3JhdGNoKQoreworICBjb25zdCBpbnQgX19nbXBuX2NwdXZlY19pbml0aWFsaXplZCA9IDE7CisgIG1wX3NpemVfdCBuLCBzLCB0OworICBpbnQgdm0xX25lZzsKKyAgbXBfbGltYl90IGN5LCB2aW5mMDsKKyAgbXBfcHRyIGdwOworICBtcF9wdHIgYXMxLCBhc20xLCBhczI7CisgIG1wX3B0ciBiczEsIGJzbTEsIGJzMjsKKworI2RlZmluZSBhMCAgYXAKKyNkZWZpbmUgYTEgIChhcCArIG4pCisjZGVmaW5lIGEyICAoYXAgKyAyKm4pCisjZGVmaW5lIGIwICBicAorI2RlZmluZSBiMSAgKGJwICsgbikKKyNkZWZpbmUgYjIgIChicCArIDIqbikKKworICBuID0gKGFuICsgMikgLyAoc2l6ZV90KSAzOworCisgIHMgPSBhbiAtIDIgKiBuOworICB0ID0gYm4gLSAyICogbjsKKworICBBU1NFUlQgKGFuID49IGJuKTsKKworICBBU1NFUlQgKDAgPCBzICYmIHMgPD0gbik7CisgIEFTU0VSVCAoMCA8IHQgJiYgdCA8PSBuKTsKKworICBhczEgID0gc2NyYXRjaCArIDQgKiBuICsgNDsKKyAgYXNtMSA9IHNjcmF0Y2ggKyAyICogbiArIDI7CisgIGFzMiA9IHBwICsgbiArIDE7CisKKyAgYnMxID0gcHA7CisgIGJzbTEgPSBzY3JhdGNoICsgMyAqIG4gKyAzOyAvKiB3ZSBuZWVkIDRuKzQgPD0gNG4rcyt0ICovCisgIGJzMiA9IHBwICsgMiAqIG4gKyAyOworCisgIGdwID0gc2NyYXRjaDsKKworICB2bTFfbmVnID0gMDsKKworICAvKiBDb21wdXRlIGFzMSBhbmQgYXNtMS4gICovCisgIGN5ID0gbXBuX2FkZCAoZ3AsIGEwLCBuLCBhMiwgcyk7CisjaWYgSEFWRV9OQVRJVkVfbXBuX2FkZF9uX3N1Yl9uCisgIGlmIChjeSA9PSAwICYmIG1wbl9jbXAgKGdwLCBhMSwgbikgPCAwKQorICAgIHsKKyAgICAgIGN5ID0gbXBuX2FkZF9uX3N1Yl9uIChhczEsIGFzbTEsIGExLCBncCwgbik7CisgICAgICBhczFbbl0gPSBjeSA+PiAxOworICAgICAgYXNtMVtuXSA9IDA7CisgICAgICB2bTFfbmVnID0gMTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBtcF9saW1iX3QgY3kyOworICAgICAgY3kyID0gbXBuX2FkZF9uX3N1Yl9uIChhczEsIGFzbTEsIGdwLCBhMSwgbik7CisgICAgICBhczFbbl0gPSBjeSArIChjeTIgPj4gMSk7CisgICAgICBhc20xW25dID0gY3kgLSAoY3kyICYgMSk7CisgICAgfQorI2Vsc2UKKyAgYXMxW25dID0gY3kgKyBtcG5fYWRkX24gKGFzMSwgZ3AsIGExLCBuKTsKKyAgaWYgKGN5ID09IDAgJiYgbXBuX2NtcCAoZ3AsIGExLCBuKSA8IDApCisgICAgeworICAgICAgbXBuX3N1Yl9uIChhc20xLCBhMSwgZ3AsIG4pOworICAgICAgYXNtMVtuXSA9IDA7CisgICAgICB2bTFfbmVnID0gMTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBjeSAtPSBtcG5fc3ViX24gKGFzbTEsIGdwLCBhMSwgbik7CisgICAgICBhc20xW25dID0gY3k7CisgICAgfQorI2VuZGlmCisKKyAgLyogQ29tcHV0ZSBhczIuICAqLworI2lmIEhBVkVfTkFUSVZFX21wbl9yc2Jsc2gxX24KKyAgY3kgPSBtcG5fYWRkX24gKGFzMiwgYTIsIGFzMSwgcyk7CisgIGlmIChzICE9IG4pCisgICAgY3kgPSBtcG5fYWRkXzEgKGFzMiArIHMsIGFzMSArIHMsIG4gLSBzLCBjeSk7CisgIGN5ICs9IGFzMVtuXTsKKyAgY3kgPSAyICogY3kgKyBtcG5fcnNibHNoMV9uIChhczIsIGEwLCBhczIsIG4pOworI2Vsc2UKKyNpZiBIQVZFX05BVElWRV9tcG5fYWRkbHNoMV9uCisgIGN5ICA9IG1wbl9hZGRsc2gxX24gKGFzMiwgYTEsIGEyLCBzKTsKKyAgaWYgKHMgIT0gbikKKyAgICBjeSA9IG1wbl9hZGRfMSAoYXMyICsgcywgYTEgKyBzLCBuIC0gcywgY3kpOworICBjeSA9IDIgKiBjeSArIG1wbl9hZGRsc2gxX24gKGFzMiwgYTAsIGFzMiwgbik7CisjZWxzZQorICBjeSA9IG1wbl9hZGRfbiAoYXMyLCBhMiwgYXMxLCBzKTsKKyAgaWYgKHMgIT0gbikKKyAgICBjeSA9IG1wbl9hZGRfMSAoYXMyICsgcywgYXMxICsgcywgbiAtIHMsIGN5KTsKKyAgY3kgKz0gYXMxW25dOworICBjeSA9IDIgKiBjeSArIG1wbl9sc2hpZnQgKGFzMiwgYXMyLCBuLCAxKTsKKyAgY3kgLT0gbXBuX3N1Yl9uIChhczIsIGFzMiwgYTAsIG4pOworI2VuZGlmCisjZW5kaWYKKyAgYXMyW25dID0gY3k7CisKKyAgLyogQ29tcHV0ZSBiczEgYW5kIGJzbTEuICAqLworICBjeSA9IG1wbl9hZGQgKGdwLCBiMCwgbiwgYjIsIHQpOworI2lmIEhBVkVfTkFUSVZFX21wbl9hZGRfbl9zdWJfbgorICBpZiAoY3kgPT0gMCAmJiBtcG5fY21wIChncCwgYjEsIG4pIDwgMCkKKyAgICB7CisgICAgICBjeSA9IG1wbl9hZGRfbl9zdWJfbiAoYnMxLCBic20xLCBiMSwgZ3AsIG4pOworICAgICAgYnMxW25dID0gY3kgPj4gMTsKKyAgICAgIGJzbTFbbl0gPSAwOworICAgICAgdm0xX25lZyBePSAxOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIG1wX2xpbWJfdCBjeTI7CisgICAgICBjeTIgPSBtcG5fYWRkX25fc3ViX24gKGJzMSwgYnNtMSwgZ3AsIGIxLCBuKTsKKyAgICAgIGJzMVtuXSA9IGN5ICsgKGN5MiA+PiAxKTsKKyAgICAgIGJzbTFbbl0gPSBjeSAtIChjeTIgJiAxKTsKKyAgICB9CisjZWxzZQorICBiczFbbl0gPSBjeSArIG1wbl9hZGRfbiAoYnMxLCBncCwgYjEsIG4pOworICBpZiAoY3kgPT0gMCAmJiBtcG5fY21wIChncCwgYjEsIG4pIDwgMCkKKyAgICB7CisgICAgICBtcG5fc3ViX24gKGJzbTEsIGIxLCBncCwgbik7CisgICAgICBic20xW25dID0gMDsKKyAgICAgIHZtMV9uZWcgXj0gMTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBjeSAtPSBtcG5fc3ViX24gKGJzbTEsIGdwLCBiMSwgbik7CisgICAgICBic20xW25dID0gY3k7CisgICAgfQorI2VuZGlmCisKKyAgLyogQ29tcHV0ZSBiczIuICAqLworI2lmIEhBVkVfTkFUSVZFX21wbl9yc2Jsc2gxX24KKyAgY3kgPSBtcG5fYWRkX24gKGJzMiwgYjIsIGJzMSwgdCk7CisgIGlmICh0ICE9IG4pCisgICAgY3kgPSBtcG5fYWRkXzEgKGJzMiArIHQsIGJzMSArIHQsIG4gLSB0LCBjeSk7CisgIGN5ICs9IGJzMVtuXTsKKyAgY3kgPSAyICogY3kgKyBtcG5fcnNibHNoMV9uIChiczIsIGIwLCBiczIsIG4pOworI2Vsc2UKKyNpZiBIQVZFX05BVElWRV9tcG5fYWRkbHNoMV9uCisgIGN5ICA9IG1wbl9hZGRsc2gxX24gKGJzMiwgYjEsIGIyLCB0KTsKKyAgaWYgKHQgIT0gbikKKyAgICBjeSA9IG1wbl9hZGRfMSAoYnMyICsgdCwgYjEgKyB0LCBuIC0gdCwgY3kpOworICBjeSA9IDIgKiBjeSArIG1wbl9hZGRsc2gxX24gKGJzMiwgYjAsIGJzMiwgbik7CisjZWxzZQorICBjeSAgPSBtcG5fYWRkX24gKGJzMiwgYnMxLCBiMiwgdCk7CisgIGlmICh0ICE9IG4pCisgICAgY3kgPSBtcG5fYWRkXzEgKGJzMiArIHQsIGJzMSArIHQsIG4gLSB0LCBjeSk7CisgIGN5ICs9IGJzMVtuXTsKKyAgY3kgPSAyICogY3kgKyBtcG5fbHNoaWZ0IChiczIsIGJzMiwgbiwgMSk7CisgIGN5IC09IG1wbl9zdWJfbiAoYnMyLCBiczIsIGIwLCBuKTsKKyNlbmRpZgorI2VuZGlmCisgIGJzMltuXSA9IGN5OworCisgIEFTU0VSVCAoYXMxW25dIDw9IDIpOworICBBU1NFUlQgKGJzMVtuXSA8PSAyKTsKKyAgQVNTRVJUIChhc20xW25dIDw9IDEpOworICBBU1NFUlQgKGJzbTFbbl0gPD0gMSk7CisgIEFTU0VSVCAoYXMyW25dIDw9IDYpOworICBBU1NFUlQgKGJzMltuXSA8PSA2KTsKKworI2RlZmluZSB2MCAgICBwcAkJCQkvKiAybiAqLworI2RlZmluZSB2MSAgICAocHAgKyAyICogbikJCQkvKiAybisxICovCisjZGVmaW5lIHZpbmYgIChwcCArIDQgKiBuKQkJCS8qIHMrdCAqLworI2RlZmluZSB2bTEgICBzY3JhdGNoCQkJCS8qIDJuKzEgKi8KKyNkZWZpbmUgdjIgICAgKHNjcmF0Y2ggKyAyICogbiArIDEpCQkvKiAybisyICovCisjZGVmaW5lIHNjcmF0Y2hfb3V0ICAoc2NyYXRjaCArIDUgKiBuICsgNSkKKworICAvKiB2bTEsIDJuKzEgbGltYnMgKi8KKyNpZmRlZiBTTUFMTEVSX1JFQ1VSU0lPTgorICBUT09NMzNfTVVMX05fUkVDICh2bTEsIGFzbTEsIGJzbTEsIG4sIHNjcmF0Y2hfb3V0KTsKKyAgY3kgPSAwOworICBpZiAoYXNtMVtuXSAhPSAwKQorICAgIGN5ID0gYnNtMVtuXSArIG1wbl9hZGRfbiAodm0xICsgbiwgdm0xICsgbiwgYnNtMSwgbik7CisgIGlmIChic20xW25dICE9IDApCisgICAgY3kgKz0gbXBuX2FkZF9uICh2bTEgKyBuLCB2bTEgKyBuLCBhc20xLCBuKTsKKyAgdm0xWzIgKiBuXSA9IGN5OworI2Vsc2UKKyAgVE9PTTMzX01VTF9OX1JFQyAodm0xLCBhc20xLCBic20xLCBuICsgMSwgc2NyYXRjaF9vdXQpOworI2VuZGlmCisKKyAgVE9PTTMzX01VTF9OX1JFQyAodjIsIGFzMiwgYnMyLCBuICsgMSwgc2NyYXRjaF9vdXQpOwkvKiB2MiwgMm4rMSBsaW1icyAqLworCisgIC8qIHZpbmYsIHMrdCBsaW1icyAqLworICBpZiAocyA+IHQpICBtcG5fbXVsICh2aW5mLCBhMiwgcywgYjIsIHQpOworICBlbHNlICAgICAgICBUT09NMzNfTVVMX05fUkVDICh2aW5mLCBhMiwgYjIsIHMsIHNjcmF0Y2hfb3V0KTsKKworICB2aW5mMCA9IHZpbmZbMF07CQkJCS8qIHYxIG92ZXJsYXBzIHdpdGggdGhpcyAqLworCisjaWZkZWYgU01BTExFUl9SRUNVUlNJT04KKyAgLyogdjEsIDJuKzEgbGltYnMgKi8KKyAgVE9PTTMzX01VTF9OX1JFQyAodjEsIGFzMSwgYnMxLCBuLCBzY3JhdGNoX291dCk7CisgIGlmIChhczFbbl0gPT0gMSkKKyAgICB7CisgICAgICBjeSA9IGJzMVtuXSArIG1wbl9hZGRfbiAodjEgKyBuLCB2MSArIG4sIGJzMSwgbik7CisgICAgfQorICBlbHNlIGlmIChhczFbbl0gIT0gMCkKKyAgICB7CisjaWYgSEFWRV9OQVRJVkVfbXBuX2FkZGxzaDFfbl9pcDEKKyAgICAgIGN5ID0gMiAqIGJzMVtuXSArIG1wbl9hZGRsc2gxX25faXAxICh2MSArIG4sIGJzMSwgbik7CisjZWxzZQorICAgICAgY3kgPSAyICogYnMxW25dICsgbXBuX2FkZG11bF8xICh2MSArIG4sIGJzMSwgbiwgQ05TVF9MSU1CKDIpKTsKKyNlbmRpZgorICAgIH0KKyAgZWxzZQorICAgIGN5ID0gMDsKKyAgaWYgKGJzMVtuXSA9PSAxKQorICAgIHsKKyAgICAgIGN5ICs9IG1wbl9hZGRfbiAodjEgKyBuLCB2MSArIG4sIGFzMSwgbik7CisgICAgfQorICBlbHNlIGlmIChiczFbbl0gIT0gMCkKKyAgICB7CisjaWYgSEFWRV9OQVRJVkVfbXBuX2FkZGxzaDFfbl9pcDEKKyAgICAgIGN5ICs9IG1wbl9hZGRsc2gxX25faXAxICh2MSArIG4sIGFzMSwgbik7CisjZWxzZQorICAgICAgY3kgKz0gbXBuX2FkZG11bF8xICh2MSArIG4sIGFzMSwgbiwgQ05TVF9MSU1CKDIpKTsKKyNlbmRpZgorICAgIH0KKyAgdjFbMiAqIG5dID0gY3k7CisjZWxzZQorICBjeSA9IHZpbmZbMV07CisgIFRPT00zM19NVUxfTl9SRUMgKHYxLCBhczEsIGJzMSwgbiArIDEsIHNjcmF0Y2hfb3V0KTsKKyAgdmluZlsxXSA9IGN5OworI2VuZGlmCisKKyAgVE9PTTMzX01VTF9OX1JFQyAodjAsIGFwLCBicCwgbiwgc2NyYXRjaF9vdXQpOwkvKiB2MCwgMm4gbGltYnMgKi8KKworICBtcG5fdG9vbV9pbnRlcnBvbGF0ZV81cHRzIChwcCwgdjIsIHZtMSwgbiwgcyArIHQsIHZtMV9uZWcsIHZpbmYwKTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy90b29tM19zcXIuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy90b29tM19zcXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmUxNWJmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Rvb20zX3Nxci5jCkBAIC0wLDAgKzEsMjI1IEBACisvKiBtcG5fdG9vbTNfc3FyIC0tIFNxdWFyZSB7YXAsYW59LgorCisgICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisgICBBZGRpdGlvbmFsIGltcHJvdmVtZW50cyBieSBNYXJjbyBCb2RyYXRvLgorCisgICBUSEUgRlVOQ1RJT04gSU4gVEhJUyBGSUxFIElTIElOVEVSTkFMIFdJVEggQSBNVVRBQkxFIElOVEVSRkFDRS4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggSVQgVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuICBJTiBGQUNULCBJVCBJUyBBTE1PU1QKKyAgIEdVQVJBTlRFRUQgVEhBVCBJVCBXSUxMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR05VIE1QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAyMDA2LTIwMTAsIDIwMTIsIDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisKKy8qIEV2YWx1YXRlIGluOiAtMSwgMCwgKzEsICsyLCAraW5mCisKKyAgPC1zLS0+PC0tbi0tPjwtLW4tLT4KKyAgIF9fX18gX19fX19fIF9fX19fXworICB8X2EyX3xfX19hMV98X19fYTBffAorCisgIHYwICA9ICBhMCAgICAgICAgIF4yICMgICBBKDApXjIKKyAgdjEgID0gKGEwKyBhMSsgYTIpXjIgIyAgIEEoMSleMiAgICBhaCAgPD0gMgorICB2bTEgPSAoYTAtIGExKyBhMileMiAjICBBKC0xKV4yICAgfGFofCA8PSAxCisgIHYyICA9IChhMCsyYTErNGEyKV4yICMgICBBKDIpXjIgICAgYWggIDw9IDYKKyAgdmluZj0gICAgICAgICAgYTIgXjIgIyBBKGluZileMgorKi8KKworI2lmIFRVTkVfUFJPR1JBTV9CVUlMRCB8fCBXQU5UX0ZBVF9CSU5BUlkKKyNkZWZpbmUgTUFZQkVfc3FyX2Jhc2VjYXNlIDEKKyNkZWZpbmUgTUFZQkVfc3FyX3Rvb20zICAgMQorI2Vsc2UKKyNkZWZpbmUgTUFZQkVfc3FyX2Jhc2VjYXNlCQkJCQkJXAorICAoU1FSX1RPT00zX1RIUkVTSE9MRCA8IDMgKiBTUVJfVE9PTTJfVEhSRVNIT0xEKQorI2RlZmluZSBNQVlCRV9zcXJfdG9vbTMJCQkJCQkJXAorICAoU1FSX1RPT000X1RIUkVTSE9MRCA+PSAzICogU1FSX1RPT00zX1RIUkVTSE9MRCkKKyNlbmRpZgorCisjZGVmaW5lIFRPT00zX1NRUl9SRUMocCwgYSwgbiwgd3MpCQkJCQlcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgaWYgKE1BWUJFX3Nxcl9iYXNlY2FzZQkJCQkJCVwKKwkmJiBCRUxPV19USFJFU0hPTEQgKG4sIFNRUl9UT09NMl9USFJFU0hPTEQpKQkJCVwKKyAgICAgIG1wbl9zcXJfYmFzZWNhc2UgKHAsIGEsIG4pOwkJCQkJXAorICAgIGVsc2UgaWYgKCEgTUFZQkVfc3FyX3Rvb20zCQkJCQkJXAorCSAgICAgfHwgQkVMT1dfVEhSRVNIT0xEIChuLCBTUVJfVE9PTTNfVEhSRVNIT0xEKSkJCVwKKyAgICAgIG1wbl90b29tMl9zcXIgKHAsIGEsIG4sIHdzKTsJCQkJCVwKKyAgICBlbHNlCQkJCQkJCQlcCisgICAgICBtcG5fdG9vbTNfc3FyIChwLCBhLCBuLCB3cyk7CQkJCQlcCisgIH0gd2hpbGUgKDApCisKK3ZvaWQKK21wbl90b29tM19zcXIgKG1wX3B0ciBwcCwKKwkgICAgICAgbXBfc3JjcHRyIGFwLCBtcF9zaXplX3QgYW4sCisJICAgICAgIG1wX3B0ciBzY3JhdGNoKQoreworICBjb25zdCBpbnQgX19nbXBuX2NwdXZlY19pbml0aWFsaXplZCA9IDE7CisgIG1wX3NpemVfdCBuLCBzOworICBtcF9saW1iX3QgY3ksIHZpbmYwOworICBtcF9wdHIgZ3A7CisgIG1wX3B0ciBhczEsIGFzbTEsIGFzMjsKKworI2RlZmluZSBhMCAgYXAKKyNkZWZpbmUgYTEgIChhcCArIG4pCisjZGVmaW5lIGEyICAoYXAgKyAyKm4pCisKKyAgbiA9IChhbiArIDIpIC8gKHNpemVfdCkgMzsKKworICBzID0gYW4gLSAyICogbjsKKworICBBU1NFUlQgKDAgPCBzICYmIHMgPD0gbik7CisKKyAgYXMxID0gc2NyYXRjaCArIDQgKiBuICsgNDsKKyAgYXNtMSA9IHNjcmF0Y2ggKyAyICogbiArIDI7CisgIGFzMiA9IHBwICsgbiArIDE7CisKKyAgZ3AgPSBzY3JhdGNoOworCisgIC8qIENvbXB1dGUgYXMxIGFuZCBhc20xLiAgKi8KKyAgY3kgPSBtcG5fYWRkIChncCwgYTAsIG4sIGEyLCBzKTsKKyNpZiBIQVZFX05BVElWRV9tcG5fYWRkX25fc3ViX24KKyAgaWYgKGN5ID09IDAgJiYgbXBuX2NtcCAoZ3AsIGExLCBuKSA8IDApCisgICAgeworICAgICAgY3kgPSBtcG5fYWRkX25fc3ViX24gKGFzMSwgYXNtMSwgYTEsIGdwLCBuKTsKKyAgICAgIGFzMVtuXSA9IGN5ID4+IDE7CisgICAgICBhc20xW25dID0gMDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBtcF9saW1iX3QgY3kyOworICAgICAgY3kyID0gbXBuX2FkZF9uX3N1Yl9uIChhczEsIGFzbTEsIGdwLCBhMSwgbik7CisgICAgICBhczFbbl0gPSBjeSArIChjeTIgPj4gMSk7CisgICAgICBhc20xW25dID0gY3kgLSAoY3kyICYgMSk7CisgICAgfQorI2Vsc2UKKyAgYXMxW25dID0gY3kgKyBtcG5fYWRkX24gKGFzMSwgZ3AsIGExLCBuKTsKKyAgaWYgKGN5ID09IDAgJiYgbXBuX2NtcCAoZ3AsIGExLCBuKSA8IDApCisgICAgeworICAgICAgbXBuX3N1Yl9uIChhc20xLCBhMSwgZ3AsIG4pOworICAgICAgYXNtMVtuXSA9IDA7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgY3kgLT0gbXBuX3N1Yl9uIChhc20xLCBncCwgYTEsIG4pOworICAgICAgYXNtMVtuXSA9IGN5OworICAgIH0KKyNlbmRpZgorCisgIC8qIENvbXB1dGUgYXMyLiAgKi8KKyNpZiBIQVZFX05BVElWRV9tcG5fcnNibHNoMV9uCisgIGN5ID0gbXBuX2FkZF9uIChhczIsIGEyLCBhczEsIHMpOworICBpZiAocyAhPSBuKQorICAgIGN5ID0gbXBuX2FkZF8xIChhczIgKyBzLCBhczEgKyBzLCBuIC0gcywgY3kpOworICBjeSArPSBhczFbbl07CisgIGN5ID0gMiAqIGN5ICsgbXBuX3JzYmxzaDFfbiAoYXMyLCBhMCwgYXMyLCBuKTsKKyNlbHNlCisjaWYgSEFWRV9OQVRJVkVfbXBuX2FkZGxzaDFfbgorICBjeSAgPSBtcG5fYWRkbHNoMV9uIChhczIsIGExLCBhMiwgcyk7CisgIGlmIChzICE9IG4pCisgICAgY3kgPSBtcG5fYWRkXzEgKGFzMiArIHMsIGExICsgcywgbiAtIHMsIGN5KTsKKyAgY3kgPSAyICogY3kgKyBtcG5fYWRkbHNoMV9uIChhczIsIGEwLCBhczIsIG4pOworI2Vsc2UKKyAgY3kgPSBtcG5fYWRkX24gKGFzMiwgYTIsIGFzMSwgcyk7CisgIGlmIChzICE9IG4pCisgICAgY3kgPSBtcG5fYWRkXzEgKGFzMiArIHMsIGFzMSArIHMsIG4gLSBzLCBjeSk7CisgIGN5ICs9IGFzMVtuXTsKKyAgY3kgPSAyICogY3kgKyBtcG5fbHNoaWZ0IChhczIsIGFzMiwgbiwgMSk7CisgIGN5IC09IG1wbl9zdWJfbiAoYXMyLCBhczIsIGEwLCBuKTsKKyNlbmRpZgorI2VuZGlmCisgIGFzMltuXSA9IGN5OworCisgIEFTU0VSVCAoYXMxW25dIDw9IDIpOworICBBU1NFUlQgKGFzbTFbbl0gPD0gMSk7CisKKyNkZWZpbmUgdjAgICAgcHAJCQkJLyogMm4gKi8KKyNkZWZpbmUgdjEgICAgKHBwICsgMiAqIG4pCQkJLyogMm4rMSAqLworI2RlZmluZSB2aW5mICAocHAgKyA0ICogbikJCQkvKiBzK3MgKi8KKyNkZWZpbmUgdm0xICAgc2NyYXRjaAkJCQkvKiAybisxICovCisjZGVmaW5lIHYyICAgIChzY3JhdGNoICsgMiAqIG4gKyAxKQkJLyogMm4rMiAqLworI2RlZmluZSBzY3JhdGNoX291dCAgKHNjcmF0Y2ggKyA1ICogbiArIDUpCisKKyAgLyogdm0xLCAybisxIGxpbWJzICovCisjaWZkZWYgU01BTExFUl9SRUNVUlNJT04KKyAgVE9PTTNfU1FSX1JFQyAodm0xLCBhc20xLCBuLCBzY3JhdGNoX291dCk7CisgIGN5ID0gMDsKKyAgaWYgKGFzbTFbbl0gIT0gMCkKKyAgICBjeSA9IGFzbTFbbl0gKyBtcG5fYWRkX24gKHZtMSArIG4sIHZtMSArIG4sIGFzbTEsIG4pOworICBpZiAoYXNtMVtuXSAhPSAwKQorICAgIGN5ICs9IG1wbl9hZGRfbiAodm0xICsgbiwgdm0xICsgbiwgYXNtMSwgbik7CisgIHZtMVsyICogbl0gPSBjeTsKKyNlbHNlCisgIFRPT00zX1NRUl9SRUMgKHZtMSwgYXNtMSwgbiArIDEsIHNjcmF0Y2hfb3V0KTsKKyNlbmRpZgorCisgIFRPT00zX1NRUl9SRUMgKHYyLCBhczIsIG4gKyAxLCBzY3JhdGNoX291dCk7CS8qIHYyLCAybisxIGxpbWJzICovCisKKyAgVE9PTTNfU1FSX1JFQyAodmluZiwgYTIsIHMsIHNjcmF0Y2hfb3V0KTsJLyogdmluZiwgcytzIGxpbWJzICovCisKKyAgdmluZjAgPSB2aW5mWzBdOwkJCQkvKiB2MSBvdmVybGFwcyB3aXRoIHRoaXMgKi8KKworI2lmZGVmIFNNQUxMRVJfUkVDVVJTSU9OCisgIC8qIHYxLCAybisxIGxpbWJzICovCisgIFRPT00zX1NRUl9SRUMgKHYxLCBhczEsIG4sIHNjcmF0Y2hfb3V0KTsKKyAgaWYgKGFzMVtuXSA9PSAxKQorICAgIHsKKyAgICAgIGN5ID0gYXMxW25dICsgbXBuX2FkZF9uICh2MSArIG4sIHYxICsgbiwgYXMxLCBuKTsKKyAgICB9CisgIGVsc2UgaWYgKGFzMVtuXSAhPSAwKQorICAgIHsKKyNpZiBIQVZFX05BVElWRV9tcG5fYWRkbHNoMV9uX2lwMQorICAgICAgY3kgPSAyICogYXMxW25dICsgbXBuX2FkZGxzaDFfbl9pcDEgKHYxICsgbiwgYXMxLCBuKTsKKyNlbHNlCisgICAgICBjeSA9IDIgKiBhczFbbl0gKyBtcG5fYWRkbXVsXzEgKHYxICsgbiwgYXMxLCBuLCBDTlNUX0xJTUIoMikpOworI2VuZGlmCisgICAgfQorICBlbHNlCisgICAgY3kgPSAwOworICBpZiAoYXMxW25dID09IDEpCisgICAgeworICAgICAgY3kgKz0gbXBuX2FkZF9uICh2MSArIG4sIHYxICsgbiwgYXMxLCBuKTsKKyAgICB9CisgIGVsc2UgaWYgKGFzMVtuXSAhPSAwKQorICAgIHsKKyNpZiBIQVZFX05BVElWRV9tcG5fYWRkbHNoMV9uX2lwMQorICAgICAgY3kgKz0gbXBuX2FkZGxzaDFfbl9pcDEgKHYxICsgbiwgYXMxLCBuKTsKKyNlbHNlCisgICAgICBjeSArPSBtcG5fYWRkbXVsXzEgKHYxICsgbiwgYXMxLCBuLCBDTlNUX0xJTUIoMikpOworI2VuZGlmCisgICAgfQorICB2MVsyICogbl0gPSBjeTsKKyNlbHNlCisgIGN5ID0gdmluZlsxXTsKKyAgVE9PTTNfU1FSX1JFQyAodjEsIGFzMSwgbiArIDEsIHNjcmF0Y2hfb3V0KTsKKyAgdmluZlsxXSA9IGN5OworI2VuZGlmCisKKyAgVE9PTTNfU1FSX1JFQyAodjAsIGFwLCBuLCBzY3JhdGNoX291dCk7CS8qIHYwLCAybiBsaW1icyAqLworCisgIG1wbl90b29tX2ludGVycG9sYXRlXzVwdHMgKHBwLCB2Miwgdm0xLCBuLCBzICsgcywgMCwgdmluZjApOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Rvb200Ml9tdWwuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy90b29tNDJfbXVsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRmYmE5YgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy90b29tNDJfbXVsLmMKQEAgLTAsMCArMSwyMzQgQEAKKy8qIG1wbl90b29tNDJfbXVsIC0tIE11bHRpcGx5IHthcCxhbn0gYW5kIHticCxibn0gd2hlcmUgYW4gaXMgbm9taW5hbGx5IHR3aWNlCisgICBhcyBsYXJnZSBhcyBibi4gIE9yIG1vcmUgYWNjdXJhdGVseSwgKDMvMilibiA8IGFuIDwgNGJuLgorCisgICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisgICBBZGRpdGlvbmFsIGltcHJvdmVtZW50cyBieSBNYXJjbyBCb2RyYXRvLgorCisgICBUaGUgaWRlYSBvZiBhcHBseWluZyB0b29tIHRvIHVuYmFsYW5jZWQgbXVsdGlwbGljYXRpb24gaXMgZHVlIHRvIE1hcmNvCisgICBCb2RyYXRvIGFuZCBBbGJlcnRvIFphbm9uaS4KKworICAgVEhFIEZVTkNUSU9OIElOIFRISVMgRklMRSBJUyBJTlRFUk5BTCBXSVRIIEEgTVVUQUJMRSBJTlRFUkZBQ0UuICBJVCBJUyBPTkxZCisgICBTQUZFIFRPIFJFQUNIIElUIFRIUk9VR0ggRE9DVU1FTlRFRCBJTlRFUkZBQ0VTLiAgSU4gRkFDVCwgSVQgSVMgQUxNT1NUCisgICBHVUFSQU5URUVEIFRIQVQgSVQgV0lMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEgRlVUVVJFIEdOVSBNUCBSRUxFQVNFLgorCitDb3B5cmlnaHQgMjAwNi0yMDA4LCAyMDEyLCAyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCisvKiBFdmFsdWF0ZSBpbjogLTEsIDAsICsxLCArMiwgK2luZgorCisgIDwtcy0+PC0tbi0tPjwtLW4tLT48LS1uLS0+CisgICBfX18gX19fX19fIF9fX19fXyBfX19fX18KKyAgfGEzX3xfX19hMl98X19fYTFffF9fX2EwX3wKKwkgICAgICAgfF9iMV98X19fYjBffAorCSAgICAgICA8LXQtLT48LS1uLS0+CisKKyAgdjAgID0gIGEwICAgICAgICAgICAgICogYjAgICAgICAjICAgQSgwKSpCKDApCisgIHYxICA9IChhMCsgYTErIGEyKyBhMykqKGIwKyBiMSkgIyAgIEEoMSkqQigxKSAgICAgIGFoICA8PSAzICBiaCA8PSAxCisgIHZtMSA9IChhMC0gYTErIGEyLSBhMykqKGIwLSBiMSkgIyAgQSgtMSkqQigtMSkgICAgfGFofCA8PSAxICBiaCAgPSAwCisgIHYyICA9IChhMCsyYTErNGEyKzhhMykqKGIwKzJiMSkgIyAgIEEoMikqQigyKSAgICAgIGFoICA8PSAxNCBiaCA8PSAyCisgIHZpbmY9ICAgICAgICAgICAgICBhMyAqICAgICBiMSAgIyBBKGluZikqQihpbmYpCisqLworCisjZGVmaW5lIFRPT000Ml9NVUxfTl9SRUMocCwgYSwgYiwgbiwgd3MpCQkJCVwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBtcG5fbXVsX24gKHAsIGEsIGIsIG4pOwkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKwordm9pZAorbXBuX3Rvb200Ml9tdWwgKG1wX3B0ciBwcCwKKwkJbXBfc3JjcHRyIGFwLCBtcF9zaXplX3QgYW4sCisJCW1wX3NyY3B0ciBicCwgbXBfc2l6ZV90IGJuLAorCQltcF9wdHIgc2NyYXRjaCkKK3sKKyAgbXBfc2l6ZV90IG4sIHMsIHQ7CisgIGludCB2bTFfbmVnOworICBtcF9saW1iX3QgY3ksIHZpbmYwOworICBtcF9wdHIgYTBfYTI7CisgIG1wX3B0ciBhczEsIGFzbTEsIGFzMjsKKyAgbXBfcHRyIGJzMSwgYnNtMSwgYnMyOworICBtcF9wdHIgdG1wOworICBUTVBfREVDTDsKKworI2RlZmluZSBhMCAgYXAKKyNkZWZpbmUgYTEgIChhcCArIG4pCisjZGVmaW5lIGEyICAoYXAgKyAyKm4pCisjZGVmaW5lIGEzICAoYXAgKyAzKm4pCisjZGVmaW5lIGIwICBicAorI2RlZmluZSBiMSAgKGJwICsgbikKKworICBuID0gYW4gPj0gMiAqIGJuID8gKGFuICsgMykgPj4gMiA6IChibiArIDEpID4+IDE7CisKKyAgcyA9IGFuIC0gMyAqIG47CisgIHQgPSBibiAtIG47CisKKyAgQVNTRVJUICgwIDwgcyAmJiBzIDw9IG4pOworICBBU1NFUlQgKDAgPCB0ICYmIHQgPD0gbik7CisKKyAgVE1QX01BUks7CisKKyAgdG1wID0gVE1QX0FMTE9DX0xJTUJTICg2ICogbiArIDUpOworICBhczEgID0gdG1wOyB0bXAgKz0gbiArIDE7CisgIGFzbTEgPSB0bXA7IHRtcCArPSBuICsgMTsKKyAgYXMyICA9IHRtcDsgdG1wICs9IG4gKyAxOworICBiczEgID0gdG1wOyB0bXAgKz0gbiArIDE7CisgIGJzbTEgPSB0bXA7IHRtcCArPSBuOworICBiczIgID0gdG1wOyB0bXAgKz0gbiArIDE7CisKKyAgYTBfYTIgPSBwcDsKKworICAvKiBDb21wdXRlIGFzMSBhbmQgYXNtMS4gICovCisgIHZtMV9uZWcgPSBtcG5fdG9vbV9ldmFsX2RncjNfcG0xIChhczEsIGFzbTEsIGFwLCBuLCBzLCBhMF9hMikgJiAxOworCisgIC8qIENvbXB1dGUgYXMyLiAgKi8KKyNpZiBIQVZFX05BVElWRV9tcG5fYWRkbHNoMV9uCisgIGN5ICA9IG1wbl9hZGRsc2gxX24gKGFzMiwgYTIsIGEzLCBzKTsKKyAgaWYgKHMgIT0gbikKKyAgICBjeSA9IG1wbl9hZGRfMSAoYXMyICsgcywgYTIgKyBzLCBuIC0gcywgY3kpOworICBjeSA9IDIgKiBjeSArIG1wbl9hZGRsc2gxX24gKGFzMiwgYTEsIGFzMiwgbik7CisgIGN5ID0gMiAqIGN5ICsgbXBuX2FkZGxzaDFfbiAoYXMyLCBhMCwgYXMyLCBuKTsKKyNlbHNlCisgIGN5ICA9IG1wbl9sc2hpZnQgKGFzMiwgYTMsIHMsIDEpOworICBjeSArPSBtcG5fYWRkX24gKGFzMiwgYTIsIGFzMiwgcyk7CisgIGlmIChzICE9IG4pCisgICAgY3kgPSBtcG5fYWRkXzEgKGFzMiArIHMsIGEyICsgcywgbiAtIHMsIGN5KTsKKyAgY3kgPSAyICogY3kgKyBtcG5fbHNoaWZ0IChhczIsIGFzMiwgbiwgMSk7CisgIGN5ICs9IG1wbl9hZGRfbiAoYXMyLCBhMSwgYXMyLCBuKTsKKyAgY3kgPSAyICogY3kgKyBtcG5fbHNoaWZ0IChhczIsIGFzMiwgbiwgMSk7CisgIGN5ICs9IG1wbl9hZGRfbiAoYXMyLCBhMCwgYXMyLCBuKTsKKyNlbmRpZgorICBhczJbbl0gPSBjeTsKKworICAvKiBDb21wdXRlIGJzMSBhbmQgYnNtMS4gICovCisgIGlmICh0ID09IG4pCisgICAgeworI2lmIEhBVkVfTkFUSVZFX21wbl9hZGRfbl9zdWJfbgorICAgICAgaWYgKG1wbl9jbXAgKGIwLCBiMSwgbikgPCAwKQorCXsKKwkgIGN5ID0gbXBuX2FkZF9uX3N1Yl9uIChiczEsIGJzbTEsIGIxLCBiMCwgbik7CisJICB2bTFfbmVnIF49IDE7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGN5ID0gbXBuX2FkZF9uX3N1Yl9uIChiczEsIGJzbTEsIGIwLCBiMSwgbik7CisJfQorICAgICAgYnMxW25dID0gY3kgPj4gMTsKKyNlbHNlCisgICAgICBiczFbbl0gPSBtcG5fYWRkX24gKGJzMSwgYjAsIGIxLCBuKTsKKworICAgICAgaWYgKG1wbl9jbXAgKGIwLCBiMSwgbikgPCAwKQorCXsKKwkgIG1wbl9zdWJfbiAoYnNtMSwgYjEsIGIwLCBuKTsKKwkgIHZtMV9uZWcgXj0gMTsKKwl9CisgICAgICBlbHNlCisJeworCSAgbXBuX3N1Yl9uIChic20xLCBiMCwgYjEsIG4pOworCX0KKyNlbmRpZgorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGJzMVtuXSA9IG1wbl9hZGQgKGJzMSwgYjAsIG4sIGIxLCB0KTsKKworICAgICAgaWYgKG1wbl96ZXJvX3AgKGIwICsgdCwgbiAtIHQpICYmIG1wbl9jbXAgKGIwLCBiMSwgdCkgPCAwKQorCXsKKwkgIG1wbl9zdWJfbiAoYnNtMSwgYjEsIGIwLCB0KTsKKwkgIE1QTl9aRVJPIChic20xICsgdCwgbiAtIHQpOworCSAgdm0xX25lZyBePSAxOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBtcG5fc3ViIChic20xLCBiMCwgbiwgYjEsIHQpOworCX0KKyAgICB9CisKKyAgLyogQ29tcHV0ZSBiczIsIHJlY3ljbGluZyBiczEuIGJzMj1iczErYjEgICovCisgIG1wbl9hZGQgKGJzMiwgYnMxLCBuICsgMSwgYjEsIHQpOworCisgIEFTU0VSVCAoYXMxW25dIDw9IDMpOworICBBU1NFUlQgKGJzMVtuXSA8PSAxKTsKKyAgQVNTRVJUIChhc20xW25dIDw9IDEpOworLypBU1NFUlQgKGJzbTFbbl0gPT0gMCk7Ki8KKyAgQVNTRVJUIChhczJbbl0gPD0gMTQpOworICBBU1NFUlQgKGJzMltuXSA8PSAyKTsKKworI2RlZmluZSB2MCAgICBwcAkJCQkvKiAybiAqLworI2RlZmluZSB2MSAgICAocHAgKyAyICogbikJCQkvKiAybisxICovCisjZGVmaW5lIHZpbmYgIChwcCArIDQgKiBuKQkJCS8qIHMrdCAqLworI2RlZmluZSB2bTEgICBzY3JhdGNoCQkJCS8qIDJuKzEgKi8KKyNkZWZpbmUgdjIgICAgKHNjcmF0Y2ggKyAyICogbiArIDEpCQkvKiAybisyICovCisjZGVmaW5lIHNjcmF0Y2hfb3V0CXNjcmF0Y2ggKyA0ICogbiArIDQJLyogQ3VycmVudGx5IHVudXNlZC4gKi8KKworICAvKiB2bTEsIDJuKzEgbGltYnMgKi8KKyAgVE9PTTQyX01VTF9OX1JFQyAodm0xLCBhc20xLCBic20xLCBuLCBzY3JhdGNoX291dCk7CisgIGN5ID0gMDsKKyAgaWYgKGFzbTFbbl0gIT0gMCkKKyAgICBjeSA9IG1wbl9hZGRfbiAodm0xICsgbiwgdm0xICsgbiwgYnNtMSwgbik7CisgIHZtMVsyICogbl0gPSBjeTsKKworICBUT09NNDJfTVVMX05fUkVDICh2MiwgYXMyLCBiczIsIG4gKyAxLCBzY3JhdGNoX291dCk7CS8qIHYyLCAybisxIGxpbWJzICovCisKKyAgLyogdmluZiwgcyt0IGxpbWJzICovCisgIGlmIChzID4gdCkgIG1wbl9tdWwgKHZpbmYsIGEzLCBzLCBiMSwgdCk7CisgIGVsc2UgICAgICAgIG1wbl9tdWwgKHZpbmYsIGIxLCB0LCBhMywgcyk7CisKKyAgdmluZjAgPSB2aW5mWzBdOwkJCQkvKiB2MSBvdmVybGFwcyB3aXRoIHRoaXMgKi8KKworICAvKiB2MSwgMm4rMSBsaW1icyAqLworICBUT09NNDJfTVVMX05fUkVDICh2MSwgYXMxLCBiczEsIG4sIHNjcmF0Y2hfb3V0KTsKKyAgaWYgKGFzMVtuXSA9PSAxKQorICAgIHsKKyAgICAgIGN5ID0gYnMxW25dICsgbXBuX2FkZF9uICh2MSArIG4sIHYxICsgbiwgYnMxLCBuKTsKKyAgICB9CisgIGVsc2UgaWYgKGFzMVtuXSA9PSAyKQorICAgIHsKKyNpZiBIQVZFX05BVElWRV9tcG5fYWRkbHNoMV9uCisgICAgICBjeSA9IDIgKiBiczFbbl0gKyBtcG5fYWRkbHNoMV9uICh2MSArIG4sIHYxICsgbiwgYnMxLCBuKTsKKyNlbHNlCisgICAgICBjeSA9IDIgKiBiczFbbl0gKyBtcG5fYWRkbXVsXzEgKHYxICsgbiwgYnMxLCBuLCBDTlNUX0xJTUIoMikpOworI2VuZGlmCisgICAgfQorICBlbHNlIGlmIChhczFbbl0gPT0gMykKKyAgICB7CisgICAgICBjeSA9IDMgKiBiczFbbl0gKyBtcG5fYWRkbXVsXzEgKHYxICsgbiwgYnMxLCBuLCBDTlNUX0xJTUIoMykpOworICAgIH0KKyAgZWxzZQorICAgIGN5ID0gMDsKKyAgaWYgKGJzMVtuXSAhPSAwKQorICAgIGN5ICs9IG1wbl9hZGRfbiAodjEgKyBuLCB2MSArIG4sIGFzMSwgbik7CisgIHYxWzIgKiBuXSA9IGN5OworCisgIFRPT000Ml9NVUxfTl9SRUMgKHYwLCBhcCwgYnAsIG4sIHNjcmF0Y2hfb3V0KTsJLyogdjAsIDJuIGxpbWJzICovCisKKyAgbXBuX3Rvb21faW50ZXJwb2xhdGVfNXB0cyAocHAsIHYyLCB2bTEsIG4sIHMgKyB0LCB2bTFfbmVnLCB2aW5mMCk7CisKKyAgVE1QX0ZSRUU7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvdG9vbTQyX211bG1pZC5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Rvb200Ml9tdWxtaWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTgxYjEwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Rvb200Ml9tdWxtaWQuYwpAQCAtMCwwICsxLDIzNyBAQAorLyogbXBuX3Rvb200Ml9tdWxtaWQgLS0gdG9vbTQyIG1pZGRsZSBwcm9kdWN0CisKKyAgIENvbnRyaWJ1dGVkIGJ5IERhdmlkIEhhcnZleS4KKworICAgVEhFIEZVTkNUSU9OIElOIFRISVMgRklMRSBJUyBJTlRFUk5BTCBXSVRIIEEgTVVUQUJMRSBJTlRFUkZBQ0UuICBJVCBJUyBPTkxZCisgICBTQUZFIFRPIFJFQUNIIElUIFRIUk9VR0ggRE9DVU1FTlRFRCBJTlRFUkZBQ0VTLiAgSU4gRkFDVCwgSVQgSVMgQUxNT1NUCisgICBHVUFSQU5URUVEIFRIQVQgSVQnTEwgQ0hBTkdFIE9SIERJU0FQUEVBUiBJTiBBIEZVVFVSRSBHTlUgTVAgUkVMRUFTRS4KKworQ29weXJpZ2h0IDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisKKworCisvKgorICBNaWRkbGUgcHJvZHVjdCBvZiB7YXAsMm4tMX0gYW5kIHticCxufSwgb3V0cHV0IHdyaXR0ZW4gdG8ge3JwLG4rMn0uCisKKyAgTmVpdGhlciBhcCBub3IgYnAgbWF5IG92ZXJsYXAgcnAuCisKKyAgTXVzdCBoYXZlIG4gPj0gNC4KKworICBBbW91bnQgb2Ygc2NyYXRjaCBzcGFjZSByZXF1aXJlZCBpcyBnaXZlbiBieSBtcG5fdG9vbTQyX211bG1pZF9pdGNoKCkuCisKKyAgRklYTUU6IHRoaXMgY29kZSBhc3N1bWVzIHRoYXQgbiBpcyBzbWFsbCBjb21wYXJlZCB0byBHTVBfTlVNQl9NQVguIFRoZSBleGFjdAorICByZXF1aXJlbWVudHMgc2hvdWxkIGJlIGNsYXJpZmllZC4KKyovCit2b2lkCittcG5fdG9vbTQyX211bG1pZCAobXBfcHRyIHJwLCBtcF9zcmNwdHIgYXAsIG1wX3NyY3B0ciBicCwgbXBfc2l6ZV90IG4sCisgICAgICAgICAgICAgICAgICAgbXBfcHRyIHNjcmF0Y2gpCit7CisgIG1wX2xpbWJfdCBjeSwgZVsxMl0sIHpoLCB6bDsKKyAgbXBfc2l6ZV90IG07CisgIGludCBuZWc7CisKKyAgQVNTRVJUIChuID49IDQpOworICBBU1NFUlQgKCEgTVBOX09WRVJMQVBfUCAocnAsIG4gKyAyLCBhcCwgMipuIC0gMSkpOworICBBU1NFUlQgKCEgTVBOX09WRVJMQVBfUCAocnAsIG4gKyAyLCBicCwgbikpOworCisgIGFwICs9IG4gJiAxOyAgIC8qIGhhbmRsZSBvZGQgcm93IGFuZCBkaWFnb25hbCBsYXRlciAqLworICBtID0gbiAvIDI7CisKKyAgLyogKGUwaDplMGwpIGV0YyBhcmUgY29ycmVjdGlvbiB0ZXJtcywgaW4gMidzIGNvbXBsZW1lbnQgKi8KKyNkZWZpbmUgZTBsIChlWzBdKQorI2RlZmluZSBlMGggKGVbMV0pCisjZGVmaW5lIGUxbCAoZVsyXSkKKyNkZWZpbmUgZTFoIChlWzNdKQorI2RlZmluZSBlMmwgKGVbNF0pCisjZGVmaW5lIGUyaCAoZVs1XSkKKyNkZWZpbmUgZTNsIChlWzZdKQorI2RlZmluZSBlM2ggKGVbN10pCisjZGVmaW5lIGU0bCAoZVs4XSkKKyNkZWZpbmUgZTRoIChlWzldKQorI2RlZmluZSBlNWwgKGVbMTBdKQorI2RlZmluZSBlNWggKGVbMTFdKQorCisjZGVmaW5lIHMgKHNjcmF0Y2ggKyAyKQorI2RlZmluZSB0IChycCArIG0gKyAyKQorI2RlZmluZSBwMCBycAorI2RlZmluZSBwMSBzY3JhdGNoCisjZGVmaW5lIHAyIChycCArIG0pCisjZGVmaW5lIG5leHRfc2NyYXRjaCAoc2NyYXRjaCArIDMqbSArIDEpCisKKyAgLyoKKyAgICAgICAgICAgIHJwICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2gKKyAgfC0tLS0tLS0tLXwtLS0tLS0tLS0tLXwgICAgfC0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLXwKKyAgMCAgICAgICAgIG0gICAgICAgICAybSsyICAgMCAgICAgICAgIG0gICAgICAgICAybSAgICAgICAgM20rMQorICAgICAgICAgICAgPC0tLS1wMi0tLS0+ICAgICAgIDwtLS0tLS0tLS0tLS0tcy0tLS0tLS0tLS0tLS0+CisgIDwtLS0tcDAtLS0tPjwtLS10LS0tLT4gICAgIDwtLS0tcDEtLS0tPgorICAqLworCisgIC8qIGNvbXB1dGUge3MsM20tMX0gPSB7YSwzbS0xfSArIHthK20sM20tMX0gYW5kIGVycm9yIHRlcm1zIGUwLCBlMSwgZTIsIGUzICovCisgIGN5ID0gbXBuX2FkZF9lcnIxX24gKHMsIGFwLCBhcCArIG0sICZlMGwsIGJwICsgbSwgbSAtIDEsIDApOworICBjeSA9IG1wbl9hZGRfZXJyMl9uIChzICsgbSAtIDEsIGFwICsgbSAtIDEsIGFwICsgMiptIC0gMSwgJmUxbCwKKwkJICAgICAgIGJwICsgbSwgYnAsIG0sIGN5KTsKKyAgbXBuX2FkZF9lcnIxX24gKHMgKyAyKm0gLSAxLCBhcCArIDIqbSAtIDEsIGFwICsgMyptIC0gMSwgJmUzbCwgYnAsIG0sIGN5KTsKKworICAvKiBjb21wdXRlIHQgPSAoLTEpXm5lZyAqICh7YixtfSAtIHtiK20sbX0pIGFuZCBlcnJvciB0ZXJtcyBlNCwgZTUgKi8KKyAgaWYgKG1wbl9jbXAgKGJwICsgbSwgYnAsIG0pIDwgMCkKKyAgICB7CisgICAgICBBU1NFUlRfTk9DQVJSWSAobXBuX3N1Yl9lcnIyX24gKHQsIGJwLCBicCArIG0sICZlNGwsCisJCQkJICAgICAgYXAgKyBtIC0gMSwgYXAgKyAyKm0gLSAxLCBtLCAwKSk7CisgICAgICBuZWcgPSAxOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIEFTU0VSVF9OT0NBUlJZIChtcG5fc3ViX2VycjJfbiAodCwgYnAgKyBtLCBicCwgJmU0bCwKKwkJCQkgICAgICBhcCArIG0gLSAxLCBhcCArIDIqbSAtIDEsIG0sIDApKTsKKyAgICAgIG5lZyA9IDA7CisgICAgfQorCisgIC8qIHJlY3Vyc2l2ZSBtaWRkbGUgcHJvZHVjdHMuIFRoZSBwaWN0dXJlIGlzOgorCisgICAgICBiWzJtLTFdICAgQSAgIEEgICBBICAgQiAgIEIgICBCICAgLSAgIC0gICAtICAgLSAgIC0KKyAgICAgIC4uLiAgICAgICAtICAgQSAgIEEgICBBICAgQiAgIEIgICBCICAgLSAgIC0gICAtICAgLQorICAgICAgYlttXSAgICAgIC0gICAtICAgQSAgIEEgICBBICAgQiAgIEIgICBCICAgLSAgIC0gICAtCisgICAgICBiW20tMV0gICAgLSAgIC0gICAtICAgQyAgIEMgICBDICAgRCAgIEQgICBEICAgLSAgIC0KKyAgICAgIC4uLiAgICAgICAtICAgLSAgIC0gICAtICAgQyAgIEMgICBDICAgRCAgIEQgICBEICAgLQorICAgICAgYlswXSAgICAgIC0gICAtICAgLSAgIC0gICAtICAgQyAgIEMgICBDICAgRCAgIEQgICBECisgICAgICAgICAgICAgICBhWzBdICAgLi4uICBhW21dICAuLi4gIGFbMm1dICAgIC4uLiAgICBhWzRtLTJdCisgICovCisKKyAgaWYgKG0gPCBNVUxNSURfVE9PTTQyX1RIUkVTSE9MRCkKKyAgICB7CisgICAgICAvKiBBICsgQiAqLworICAgICAgbXBuX211bG1pZF9iYXNlY2FzZSAocDAsIHMsIDIqbSAtIDEsIGJwICsgbSwgbSk7CisgICAgICAvKiBhY2N1bXVsYXRlIGhpZ2ggbGltYnMgb2YgcDAgaW50byBlMSAqLworICAgICAgQUREQ19MSU1CIChjeSwgZTFsLCBlMWwsIHAwW21dKTsKKyAgICAgIGUxaCArPSBwMFttICsgMV0gKyBjeTsKKyAgICAgIC8qICgtMSlebmVnICogKEIgLSBDKSAgIChvdmVyd3JpdGVzIGZpcnN0IG0gbGltYnMgb2YgcykgKi8KKyAgICAgIG1wbl9tdWxtaWRfYmFzZWNhc2UgKHAxLCBhcCArIG0sIDIqbSAtIDEsIHQsIG0pOworICAgICAgLyogQyArIEQgICAob3ZlcndyaXRlcyB0KSAqLworICAgICAgbXBuX211bG1pZF9iYXNlY2FzZSAocDIsIHMgKyBtLCAyKm0gLSAxLCBicCwgbSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogYXMgYWJvdmUsIGJ1dCB1c2UgdG9vbTQyIGluc3RlYWQgKi8KKyAgICAgIG1wbl90b29tNDJfbXVsbWlkIChwMCwgcywgYnAgKyBtLCBtLCBuZXh0X3NjcmF0Y2gpOworICAgICAgQUREQ19MSU1CIChjeSwgZTFsLCBlMWwsIHAwW21dKTsKKyAgICAgIGUxaCArPSBwMFttICsgMV0gKyBjeTsKKyAgICAgIG1wbl90b29tNDJfbXVsbWlkIChwMSwgYXAgKyBtLCB0LCBtLCBuZXh0X3NjcmF0Y2gpOworICAgICAgbXBuX3Rvb200Ml9tdWxtaWQgKHAyLCBzICsgbSwgYnAsIG0sIG5leHRfc2NyYXRjaCk7CisgICAgfQorCisgIC8qIGFwcGx5IGVycm9yIHRlcm1zICovCisKKyAgLyogLWUwIGF0IHJwWzBdICovCisgIFNVQkNfTElNQiAoY3ksIHJwWzBdLCBycFswXSwgZTBsKTsKKyAgU1VCQ19MSU1CIChjeSwgcnBbMV0sIHJwWzFdLCBlMGggKyBjeSk7CisgIGlmIChVTkxJS0VMWSAoY3kpKQorICAgIHsKKyAgICAgIGN5ID0gKG0gPiAyKSA/IG1wbl9zdWJfMSAocnAgKyAyLCBycCArIDIsIG0gLSAyLCAxKSA6IDE7CisgICAgICBTVUJDX0xJTUIgKGN5LCBlMWwsIGUxbCwgY3kpOworICAgICAgZTFoIC09IGN5OworICAgIH0KKworICAvKiB6ID0gZTEgLSBlMiArIGhpZ2gocDApICovCisgIFNVQkNfTElNQiAoY3ksIHpsLCBlMWwsIGUybCk7CisgIHpoID0gZTFoIC0gZTJoIC0gY3k7CisKKyAgLyogeiBhdCBycFttXSAqLworICBBRERDX0xJTUIgKGN5LCBycFttXSwgcnBbbV0sIHpsKTsKKyAgemggPSAoemggKyBjeSkgJiBHTVBfTlVNQl9NQVNLOworICBBRERDX0xJTUIgKGN5LCBycFttICsgMV0sIHJwW20gKyAxXSwgemgpOworICBjeSAtPSAoemggPj4gKEdNUF9OVU1CX0JJVFMgLSAxKSk7CisgIGlmIChVTkxJS0VMWSAoY3kpKQorICAgIHsKKyAgICAgIGlmIChjeSA9PSAxKQorCW1wbl9hZGRfMSAocnAgKyBtICsgMiwgcnAgKyBtICsgMiwgbSwgMSk7CisgICAgICBlbHNlIC8qIGN5ID09IC0xICovCisJbXBuX3N1Yl8xIChycCArIG0gKyAyLCBycCArIG0gKyAyLCBtLCAxKTsKKyAgICB9CisKKyAgLyogZTMgYXQgcnBbMiptXSAqLworICBBRERDX0xJTUIgKGN5LCBycFsyKm1dLCBycFsyKm1dLCBlM2wpOworICBycFsyKm0gKyAxXSA9IChycFsyKm0gKyAxXSArIGUzaCArIGN5KSAmIEdNUF9OVU1CX01BU0s7CisKKyAgLyogZTQgYXQgcDFbMF0gKi8KKyAgQUREQ19MSU1CIChjeSwgcDFbMF0sIHAxWzBdLCBlNGwpOworICBBRERDX0xJTUIgKGN5LCBwMVsxXSwgcDFbMV0sIGU0aCArIGN5KTsKKyAgaWYgKFVOTElLRUxZIChjeSkpCisgICAgbXBuX2FkZF8xIChwMSArIDIsIHAxICsgMiwgbSwgMSk7CisKKyAgLyogLWU1IGF0IHAxW21dICovCisgIFNVQkNfTElNQiAoY3ksIHAxW21dLCBwMVttXSwgZTVsKTsKKyAgcDFbbSArIDFdID0gKHAxW20gKyAxXSAtIGU1aCAtIGN5KSAmIEdNUF9OVU1CX01BU0s7CisKKyAgLyogYWRqdXN0bWVudCBpZiBwMSBlbmRzIHVwIG5lZ2F0aXZlICovCisgIGN5ID0gKHAxW20gKyAxXSA+PiAoR01QX05VTUJfQklUUyAtIDEpKTsKKworICAvKiBhZGQgKC0xKV5uZWcgKiAocDEgLSBCXm0gKiBwMSkgdG8gb3V0cHV0ICovCisgIGlmIChuZWcpCisgICAgeworICAgICAgbXBuX3N1Yl8xIChycCArIG0gKyAyLCBycCArIG0gKyAyLCBtLCBjeSk7CisgICAgICBtcG5fYWRkIChycCwgcnAsIDIqbSArIDIsIHAxLCBtICsgMik7ICAgICAgICAgICAgIC8qIEEgKyBDICovCisgICAgICBtcG5fc3ViX24gKHJwICsgbSwgcnAgKyBtLCBwMSwgbSArIDIpOyAgICAgICAgICAgIC8qIEIgKyBEICovCisgICAgfQorICBlbHNlCisgICAgeworICAgICAgbXBuX2FkZF8xIChycCArIG0gKyAyLCBycCArIG0gKyAyLCBtLCBjeSk7CisgICAgICBtcG5fc3ViIChycCwgcnAsIDIqbSArIDIsIHAxLCBtICsgMik7ICAgICAgICAgICAgIC8qIEEgKyBDICovCisgICAgICBtcG5fYWRkX24gKHJwICsgbSwgcnAgKyBtLCBwMSwgbSArIDIpOyAgICAgICAgICAgIC8qIEIgKyBEICovCisgICAgfQorCisgIC8qIG9kZCByb3cgYW5kIGRpYWdvbmFsICovCisgIGlmIChuICYgMSkKKyAgICB7CisgICAgICAvKgorICAgICAgICBQcm9kdWN0cyBtYXJrZWQgRSBhcmUgYWxyZWFkeSBkb25lLiBXZSBuZWVkIHRvIGRvIHByb2R1Y3RzIG1hcmtlZCBPLgorCisgICAgICAgIE9PT09PLS0tLQorICAgICAgICAtRUVFRU8tLS0KKyAgICAgICAgLS1FRUVFTy0tCisgICAgICAgIC0tLUVFRUVPLQorICAgICAgICAtLS0tRUVFRU8KKyAgICAgICAqLworCisgICAgICAvKiBmaXJzdCByb3cgb2YgTydzICovCisgICAgICBjeSA9IG1wbl9hZGRtdWxfMSAocnAsIGFwIC0gMSwgbiwgYnBbbiAtIDFdKTsKKyAgICAgIEFERENfTElNQiAocnBbbiArIDFdLCBycFtuXSwgcnBbbl0sIGN5KTsKKworICAgICAgLyogTydzIG9uIGRpYWdvbmFsICovCisgICAgICAvKiBGSVhNRTogc2hvdWxkIHByb2JhYmx5IGRlZmluZSBhbiBpbnRlcmZhY2UgIm1wbl9tdWxtaWRfZGlhZ18xIgorICAgICAgICAgdGhhdCBjYW4gaGFuZGxlIHRoZSBzdW0gYmVsb3cuIEN1cnJlbnRseSB3ZSdyZSByZWx5aW5nIG9uCisgICAgICAgICBtdWxtaWRfYmFzZWNhc2UgYmVpbmcgcHJldHR5IGZhc3QgZm9yIGEgZGlhZ29uYWwgc3VtIGxpa2UgdGhpcywKKwkgd2hpY2ggaXMgdHJ1ZSBhdCBsZWFzdCBmb3IgdGhlIEs4IGFzbSB2ZXJzaW9uLCBidXQgc3VyZWx5IGZhbHNlCisJIGZvciB0aGUgZ2VuZXJpYyB2ZXJzaW9uLiAqLworICAgICAgbXBuX211bG1pZF9iYXNlY2FzZSAoZSwgYXAgKyBuIC0gMSwgbiAtIDEsIGJwLCBuIC0gMSk7CisgICAgICBtcG5fYWRkX24gKHJwICsgbiAtIDEsIHJwICsgbiAtIDEsIGUsIDMpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy90b29tNDNfbXVsLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvdG9vbTQzX211bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NTAxMzgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvdG9vbTQzX211bC5jCkBAIC0wLDAgKzEsMjMzIEBACisvKiBtcG5fdG9vbTQzX211bCAtLSBNdWx0aXBseSB7YXAsYW59IGFuZCB7YnAsYm59IHdoZXJlIGFuIGlzIG5vbWluYWxseSA0LzMKKyAgIHRpbWVzIGFzIGxhcmdlIGFzIGJuLiAgT3IgbW9yZSBhY2N1cmF0ZWx5LCBibiA8IGFuIDwgMiBibi4KKworICAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IE1hcmNvIEJvZHJhdG8uCisKKyAgIFRoZSBpZGVhIG9mIGFwcGx5aW5nIHRvb20gdG8gdW5iYWxhbmNlZCBtdWx0aXBsaWNhdGlvbiBpcyBkdWUgdG8gTWFyY28KKyAgIEJvZHJhdG8gYW5kIEFsYmVydG8gWmFub25pLgorCisgICBUSEUgRlVOQ1RJT04gSU4gVEhJUyBGSUxFIElTIElOVEVSTkFMIFdJVEggQSBNVVRBQkxFIElOVEVSRkFDRS4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggSVQgVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuICBJTiBGQUNULCBJVCBJUyBBTE1PU1QKKyAgIEdVQVJBTlRFRUQgVEhBVCBJVCBXSUxMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR05VIE1QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCisvKiBFdmFsdWF0ZSBpbjogLTIsIC0xLCAwLCArMSwgKzIsICtpbmYKKworICA8LXMtPjwtLW4tLT48LS1uLS0+PC0tbi0tPgorICAgX19fIF9fX19fXyBfX19fX18gX19fX19fCisgIHxhM198X19fYTJffF9fX2ExX3xfX19hMF98CisJfF9iMl98X19fYjFffF9fX2IwX3wKKwk8LXQtLT48LS1uLS0+PC0tbi0tPgorCisgIHYwICA9ICBhMCAgICAgICAgICAgICAqIGIwICAgICAgICAgICMgICBBKDApKkIoMCkKKyAgdjEgID0gKGEwKyBhMSsgYTIrIGEzKSooYjArIGIxKyBiMikgIyAgIEEoMSkqQigxKSAgICAgIGFoICA8PSAzICBiaCA8PSAyCisgIHZtMSA9IChhMC0gYTErIGEyLSBhMykqKGIwLSBiMSsgYjIpICMgIEEoLTEpKkIoLTEpICAgIHxhaHwgPD0gMSB8Ymh8PD0gMQorICB2MiAgPSAoYTArMmExKzRhMis4YTMpKihiMCsyYjErNGIyKSAjICAgQSgyKSpCKDIpICAgICAgYWggIDw9IDE0IGJoIDw9IDYKKyAgdm0yID0gKGEwLTJhMSs0YTItOGEzKSooYjAtMmIxKzRiMikgIyAgQSgtMikqQigtMikgICAgfGFofCA8PSA5IHxiaHw8PSA0CisgIHZpbmY9ICAgICAgICAgICAgICBhMyAqICAgICAgICAgYjIgICMgQShpbmYpKkIoaW5mKQorKi8KKwordm9pZAorbXBuX3Rvb200M19tdWwgKG1wX3B0ciBwcCwKKwkJbXBfc3JjcHRyIGFwLCBtcF9zaXplX3QgYW4sCisJCW1wX3NyY3B0ciBicCwgbXBfc2l6ZV90IGJuLCBtcF9wdHIgc2NyYXRjaCkKK3sKKyAgbXBfc2l6ZV90IG4sIHMsIHQ7CisgIGVudW0gdG9vbTZfZmxhZ3MgZmxhZ3M7CisgIG1wX2xpbWJfdCBjeTsKKworI2RlZmluZSBhMCAgYXAKKyNkZWZpbmUgYTEgIChhcCArIG4pCisjZGVmaW5lIGEyICAoYXAgKyAyICogbikKKyNkZWZpbmUgYTMgIChhcCArIDMgKiBuKQorI2RlZmluZSBiMCAgYnAKKyNkZWZpbmUgYjEgIChicCArIG4pCisjZGVmaW5lIGIyICAoYnAgKyAyICogbikKKworICBuID0gMSArICgzICogYW4gPj0gNCAqIGJuID8gKGFuIC0gMSkgPj4gMiA6IChibiAtIDEpIC8gKHNpemVfdCkgMyk7CisKKyAgcyA9IGFuIC0gMyAqIG47CisgIHQgPSBibiAtIDIgKiBuOworCisgIEFTU0VSVCAoMCA8IHMgJiYgcyA8PSBuKTsKKyAgQVNTRVJUICgwIDwgdCAmJiB0IDw9IG4pOworCisgIC8qIFRoaXMgaXMgdHJ1ZSB3aGVuZXZlciBhbiA+PSAyNSBvciBibiA+PSAxOSwgSSB0aGluay4gSXQKKyAgICAgZ3VhcmFudGVlcyB0aGF0IHdlIGNhbiBmaXQgNSB2YWx1ZXMgb2Ygc2l6ZSBuKzEgaW4gdGhlIHByb2R1Y3QKKyAgICAgYXJlYS4gKi8KKyAgQVNTRVJUIChzK3QgPj0gNSk7CisKKyNkZWZpbmUgdjAgICAgcHAJCQkJLyogMm4gKi8KKyNkZWZpbmUgdm0xICAgKHNjcmF0Y2gpCQkJCS8qIDJuKzEgKi8KKyNkZWZpbmUgdjEgICAgKHBwICsgMipuKQkJCS8qIDJuKzEgKi8KKyNkZWZpbmUgdm0yICAgKHNjcmF0Y2ggKyAyICogbiArIDEpCQkvKiAybisxICovCisjZGVmaW5lIHYyICAgIChzY3JhdGNoICsgNCAqIG4gKyAyKQkJLyogMm4rMSAqLworI2RlZmluZSB2aW5mICAocHAgKyA1ICogbikJCQkvKiBzK3QgKi8KKyNkZWZpbmUgYnMxICAgIHBwCQkJCS8qIG4rMSAqLworI2RlZmluZSBic20xICAoc2NyYXRjaCArIDIgKiBuICsgMikJCS8qIG4rMSAqLworI2RlZmluZSBhc20xICAoc2NyYXRjaCArIDMgKiBuICsgMykJCS8qIG4rMSAqLworI2RlZmluZSBhc20yICAoc2NyYXRjaCArIDQgKiBuICsgNCkJCS8qIG4rMSAqLworI2RlZmluZSBic20yICAocHAgKyBuICsgMSkJCQkvKiBuKzEgKi8KKyNkZWZpbmUgYnMyICAgKHBwICsgMiAqIG4gKyAyKQkJCS8qIG4rMSAqLworI2RlZmluZSBhczIgICAocHAgKyAzICogbiArIDMpCQkJLyogbisxICovCisjZGVmaW5lIGFzMSAgIChwcCArIDQgKiBuICsgNCkJCQkvKiBuKzEgKi8KKworICAvKiBUb3RhbCBzY2NyYXRjaCBuZWVkIGlzIDYgKiBuICsgMyArIDE7IHdlIGFsbG9jYXRlIG9uZSBleHRyYQorICAgICBsaW1iLCBiZWNhdXNlIHByb2R1Y3RzIHdpbGwgb3ZlcndyaXRlIDJuKzIgbGltYnMuICovCisKKyNkZWZpbmUgYTBhMiAgc2NyYXRjaAorI2RlZmluZSBiMGIyICBzY3JhdGNoCisjZGVmaW5lIGExYTMgIGFzbTEKKyNkZWZpbmUgYjFkICAgYnNtMQorCisgIC8qIENvbXB1dGUgYXMyIGFuZCBhc20yLiAgKi8KKyAgZmxhZ3MgPSAoZW51bSB0b29tNl9mbGFncykgKHRvb202X3ZtMl9uZWcgJiBtcG5fdG9vbV9ldmFsX2RncjNfcG0yIChhczIsIGFzbTIsIGFwLCBuLCBzLCBhMWEzKSk7CisKKyAgLyogQ29tcHV0ZSBiczIgYW5kIGJzbTIuICAqLworICBiMWRbbl0gPSBtcG5fbHNoaWZ0IChiMWQsIGIxLCBuLCAxKTsJCQkvKiAgICAgICAyYjEgICAgICAqLworICBjeSAgPSBtcG5fbHNoaWZ0IChiMGIyLCBiMiwgdCwgMik7CQkJLyogIDRiMiAgICAgICAgICAgKi8KKyAgY3kgKz0gbXBuX2FkZF9uIChiMGIyLCBiMGIyLCBiMCwgdCk7CQkJLyogIDRiMiAgICAgICsgYjAgKi8KKyAgaWYgKHQgIT0gbikKKyAgICBjeSA9IG1wbl9hZGRfMSAoYjBiMiArIHQsIGIwICsgdCwgbiAtIHQsIGN5KTsKKyAgYjBiMltuXSA9IGN5OworCisjaWYgSEFWRV9OQVRJVkVfbXBuX2FkZF9uX3N1Yl9uCisgIGlmIChtcG5fY21wIChiMGIyLCBiMWQsIG4rMSkgPCAwKQorICAgIHsKKyAgICAgIG1wbl9hZGRfbl9zdWJfbiAoYnMyLCBic20yLCBiMWQsIGIwYjIsIG4rMSk7CisgICAgICBmbGFncyA9IChlbnVtIHRvb202X2ZsYWdzKSAoZmxhZ3MgXiB0b29tNl92bTJfbmVnKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBtcG5fYWRkX25fc3ViX24gKGJzMiwgYnNtMiwgYjBiMiwgYjFkLCBuKzEpOworICAgIH0KKyNlbHNlCisgIG1wbl9hZGRfbiAoYnMyLCBiMGIyLCBiMWQsIG4rMSk7CisgIGlmIChtcG5fY21wIChiMGIyLCBiMWQsIG4rMSkgPCAwKQorICAgIHsKKyAgICAgIG1wbl9zdWJfbiAoYnNtMiwgYjFkLCBiMGIyLCBuKzEpOworICAgICAgZmxhZ3MgPSAoZW51bSB0b29tNl9mbGFncykgKGZsYWdzIF4gdG9vbTZfdm0yX25lZyk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgbXBuX3N1Yl9uIChic20yLCBiMGIyLCBiMWQsIG4rMSk7CisgICAgfQorI2VuZGlmCisKKyAgLyogQ29tcHV0ZSBhczEgYW5kIGFzbTEuICAqLworICBmbGFncyA9IChlbnVtIHRvb202X2ZsYWdzKSAoZmxhZ3MgXiAodG9vbTZfdm0xX25lZyAmIG1wbl90b29tX2V2YWxfZGdyM19wbTEgKGFzMSwgYXNtMSwgYXAsIG4sIHMsIGEwYTIpKSk7CisKKyAgLyogQ29tcHV0ZSBiczEgYW5kIGJzbTEuICAqLworICBic20xW25dID0gbXBuX2FkZCAoYnNtMSwgYjAsIG4sIGIyLCB0KTsKKyNpZiBIQVZFX05BVElWRV9tcG5fYWRkX25fc3ViX24KKyAgaWYgKGJzbTFbbl0gPT0gMCAmJiBtcG5fY21wIChic20xLCBiMSwgbikgPCAwKQorICAgIHsKKyAgICAgIGN5ID0gbXBuX2FkZF9uX3N1Yl9uIChiczEsIGJzbTEsIGIxLCBic20xLCBuKTsKKyAgICAgIGJzMVtuXSA9IGN5ID4+IDE7CisgICAgICBmbGFncyA9IChlbnVtIHRvb202X2ZsYWdzKSAoZmxhZ3MgXiB0b29tNl92bTFfbmVnKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBjeSA9IG1wbl9hZGRfbl9zdWJfbiAoYnMxLCBic20xLCBic20xLCBiMSwgbik7CisgICAgICBiczFbbl0gPSBic20xW25dICsgKGN5ID4+IDEpOworICAgICAgYnNtMVtuXS09IGN5ICYgMTsKKyAgICB9CisjZWxzZQorICBiczFbbl0gPSBic20xW25dICsgbXBuX2FkZF9uIChiczEsIGJzbTEsIGIxLCBuKTsKKyAgaWYgKGJzbTFbbl0gPT0gMCAmJiBtcG5fY21wIChic20xLCBiMSwgbikgPCAwKQorICAgIHsKKyAgICAgIG1wbl9zdWJfbiAoYnNtMSwgYjEsIGJzbTEsIG4pOworICAgICAgZmxhZ3MgPSAoZW51bSB0b29tNl9mbGFncykgKGZsYWdzIF4gdG9vbTZfdm0xX25lZyk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgYnNtMVtuXSAtPSBtcG5fc3ViX24gKGJzbTEsIGJzbTEsIGIxLCBuKTsKKyAgICB9CisjZW5kaWYKKworICBBU1NFUlQgKGFzMVtuXSA8PSAzKTsKKyAgQVNTRVJUIChiczFbbl0gPD0gMik7CisgIEFTU0VSVCAoYXNtMVtuXSA8PSAxKTsKKyAgQVNTRVJUIChic20xW25dIDw9IDEpOworICBBU1NFUlQgKGFzMltuXSA8PTE0KTsKKyAgQVNTRVJUIChiczJbbl0gPD0gNik7CisgIEFTU0VSVCAoYXNtMltuXSA8PSA5KTsKKyAgQVNTRVJUIChic20yW25dIDw9IDQpOworCisgIC8qIHZtMSwgMm4rMSBsaW1icyAqLworICBtcG5fbXVsX24gKHZtMSwgYXNtMSwgYnNtMSwgbisxKTsgIC8qIFc0ICovCisKKyAgLyogdm0yLCAybisxIGxpbWJzICovCisgIG1wbl9tdWxfbiAodm0yLCBhc20yLCBic20yLCBuKzEpOyAgLyogVzIgKi8KKworICAvKiB2MiwgMm4rMSBsaW1icyAqLworICBtcG5fbXVsX24gKHYyLCBhczIsIGJzMiwgbisxKTsgIC8qIFcxICovCisKKyAgLyogdjEsIDJuKzEgbGltYnMgKi8KKyAgbXBuX211bF9uICh2MSwgYXMxLCBiczEsIG4rMSk7ICAvKiBXMyAqLworCisgIC8qIHZpbmYsIHMrdCBsaW1icyAqLyAgIC8qIFcwICovCisgIGlmIChzID4gdCkgIG1wbl9tdWwgKHZpbmYsIGEzLCBzLCBiMiwgdCk7CisgIGVsc2UgICAgICAgIG1wbl9tdWwgKHZpbmYsIGIyLCB0LCBhMywgcyk7CisKKyAgLyogdjAsIDJuIGxpbWJzICovCisgIG1wbl9tdWxfbiAodjAsIGFwLCBicCwgbik7ICAvKiBXNSAqLworCisgIG1wbl90b29tX2ludGVycG9sYXRlXzZwdHMgKHBwLCBuLCBmbGFncywgdm0xLCB2bTIsIHYyLCB0ICsgcyk7CisKKyN1bmRlZiB2MAorI3VuZGVmIHZtMQorI3VuZGVmIHYxCisjdW5kZWYgdm0yCisjdW5kZWYgdjIKKyN1bmRlZiB2aW5mCisjdW5kZWYgYnMxCisjdW5kZWYgYnMyCisjdW5kZWYgYnNtMQorI3VuZGVmIGJzbTIKKyN1bmRlZiBhc20xCisjdW5kZWYgYXNtMgorLyogI3VuZGVmIGFzMSAqLworLyogI3VuZGVmIGFzMiAqLworI3VuZGVmIGEwYTIKKyN1bmRlZiBiMGIyCisjdW5kZWYgYTFhMworI3VuZGVmIGIxZAorI3VuZGVmIGEwCisjdW5kZWYgYTEKKyN1bmRlZiBhMgorI3VuZGVmIGEzCisjdW5kZWYgYjAKKyN1bmRlZiBiMQorI3VuZGVmIGIyCit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvdG9vbTQ0X211bC5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Rvb200NF9tdWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2Q1MDgzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Rvb200NF9tdWwuYwpAQCAtMCwwICsxLDIzNSBAQAorLyogbXBuX3Rvb200NF9tdWwgLS0gTXVsdGlwbHkge2FwLGFufSBhbmQge2JwLGJufSB3aGVyZSBhbiBhbmQgYm4gYXJlIGNsb3NlIGluCisgICBzaXplLiAgT3IgbW9yZSBhY2N1cmF0ZWx5LCBibiA8PSBhbiA8ICg0LzMpYm4uCisKKyAgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3Jiam9ybiBHcmFubHVuZCBhbmQgTWFyY28gQm9kcmF0by4KKworICAgVEhFIEZVTkNUSU9OIElOIFRISVMgRklMRSBJUyBJTlRFUk5BTCBXSVRIIEEgTVVUQUJMRSBJTlRFUkZBQ0UuICBJVCBJUyBPTkxZCisgICBTQUZFIFRPIFJFQUNIIElUIFRIUk9VR0ggRE9DVU1FTlRFRCBJTlRFUkZBQ0VTLiAgSU4gRkFDVCwgSVQgSVMgQUxNT1NUCisgICBHVUFSQU5URUVEIFRIQVQgSVQgV0lMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEgRlVUVVJFIEdOVSBNUCBSRUxFQVNFLgorCitDb3B5cmlnaHQgMjAwNi0yMDA4LCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCisvKiBFdmFsdWF0ZSBpbjogMCwgKzEsIC0xLCArMiwgLTIsIDEvMiwgK2luZgorCisgIDwtcy0tPjwtLW4tLT48LS1uLS0+PC0tbi0tPgorICAgX19fXyBfX19fX18gX19fX19fIF9fX19fXworICB8X2EzX3xfX19hMl98X19fYTFffF9fX2EwX3wKKyAgIHxiM198X19fYjJffF9fX2IxX3xfX19iMF98CisgICA8LXQtPjwtLW4tLT48LS1uLS0+PC0tbi0tPgorCisgIHYwICA9ICAgYTAgICAgICAgICAgICAgKiAgYjAgICAgICAgICAgICAgICMgICAgQSgwKSpCKDApCisgIHYxICA9ICggYTArIGExKyBhMisgYTMpKiggYjArIGIxKyBiMisgYjMpICMgICAgQSgxKSpCKDEpICAgICAgYWggIDw9IDMgICBiaCAgPD0gMworICB2bTEgPSAoIGEwLSBhMSsgYTItIGEzKSooIGIwLSBiMSsgYjItIGIzKSAjICAgQSgtMSkqQigtMSkgICAgfGFofCA8PSAxICB8Ymh8IDw9IDEKKyAgdjIgID0gKCBhMCsyYTErNGEyKzhhMykqKCBiMCsyYjErNGIyKzhiMykgIyAgICBBKDIpKkIoMikgICAgICBhaCAgPD0gMTQgIGJoICA8PSAxNAorICB2bTIgPSAoIGEwLTJhMSs0YTItOGEzKSooIGIwLTJiMSs0YjItOGIzKSAjICAgIEEoMikqQigyKSAgICAgIGFoICA8PSA5ICB8Ymh8IDw9IDkKKyAgdmggID0gKDhhMCs0YTErMmEyKyBhMykqKDhiMCs0YjErMmIyKyBiMykgIyAgQSgxLzIpKkIoMS8yKSAgICBhaCAgPD0gMTQgIGJoICA8PSAxNAorICB2aW5mPSAgICAgICAgICAgICAgIGEzICogICAgICAgICAgYjIgICAgICAjICBBKGluZikqQihpbmYpCisqLworCisjaWYgVFVORV9QUk9HUkFNX0JVSUxECisjZGVmaW5lIE1BWUJFX211bF9iYXNlY2FzZSAxCisjZGVmaW5lIE1BWUJFX211bF90b29tMjIgICAxCisjZGVmaW5lIE1BWUJFX211bF90b29tNDQgICAxCisjZWxzZQorI2RlZmluZSBNQVlCRV9tdWxfYmFzZWNhc2UJCQkJCQlcCisgIChNVUxfVE9PTTQ0X1RIUkVTSE9MRCA8IDQgKiBNVUxfVE9PTTIyX1RIUkVTSE9MRCkKKyNkZWZpbmUgTUFZQkVfbXVsX3Rvb20yMgkJCQkJCVwKKyAgKE1VTF9UT09NNDRfVEhSRVNIT0xEIDwgNCAqIE1VTF9UT09NMzNfVEhSRVNIT0xEKQorI2RlZmluZSBNQVlCRV9tdWxfdG9vbTQ0CQkJCQkJXAorICAoTVVMX1RPT002SF9USFJFU0hPTEQgPj0gNCAqIE1VTF9UT09NNDRfVEhSRVNIT0xEKQorI2VuZGlmCisKKyNkZWZpbmUgVE9PTTQ0X01VTF9OX1JFQyhwLCBhLCBiLCBuLCB3cykJCQkJXAorICBkbyB7CQkJCQkJCQkJXAorICAgIGlmIChNQVlCRV9tdWxfYmFzZWNhc2UJCQkJCQlcCisJJiYgQkVMT1dfVEhSRVNIT0xEIChuLCBNVUxfVE9PTTIyX1RIUkVTSE9MRCkpCQkJXAorICAgICAgbXBuX211bF9iYXNlY2FzZSAocCwgYSwgbiwgYiwgbik7CQkJCQlcCisgICAgZWxzZSBpZiAoTUFZQkVfbXVsX3Rvb20yMgkJCQkJCVwKKwkgICAgICYmIEJFTE9XX1RIUkVTSE9MRCAobiwgTVVMX1RPT00zM19USFJFU0hPTEQpKQkJXAorICAgICAgbXBuX3Rvb20yMl9tdWwgKHAsIGEsIG4sIGIsIG4sIHdzKTsJCQkJXAorICAgIGVsc2UgaWYgKCEgTUFZQkVfbXVsX3Rvb200NAkJCQkJCVwKKwkgICAgIHx8IEJFTE9XX1RIUkVTSE9MRCAobiwgTVVMX1RPT000NF9USFJFU0hPTEQpKQkJXAorICAgICAgbXBuX3Rvb20zM19tdWwgKHAsIGEsIG4sIGIsIG4sIHdzKTsJCQkJXAorICAgIGVsc2UJCQkJCQkJCVwKKyAgICAgIG1wbl90b29tNDRfbXVsIChwLCBhLCBuLCBiLCBuLCB3cyk7CQkJCVwKKyAgfSB3aGlsZSAoMCkKKworLyogVXNlIG9mIHNjcmF0Y2ggc3BhY2UuIEluIHRoZSBwcm9kdWN0IGFyZWEsIHdlIHN0b3JlCisKKyAgICAgIF9fX19fX19fX19fX19fX19fX18KKyAgICAgfHZpbmZ8X19fX3xfdjFffF92MF98CisgICAgICBzK3QgIDJuLTEgMm4rMSAgMm4KKworICAgVGhlIG90aGVyIHJlY3Vyc2l2ZSBwcm9kdWN0cywgdm0xLCB2Miwgdm0yLCB2aCBhcmUgc3RvcmVkIGluIHRoZQorICAgc2NyYXRjaCBhcmVhLiBXaGVuIGNvbXB1dGluZyB0aGVtLCB3ZSB1c2UgdGhlIHByb2R1Y3QgYXJlYSBmb3IKKyAgIGludGVybWVkaWF0ZSB2YWx1ZXMuCisKKyAgIE5leHQsIHdlIGNvbXB1dGUgdjEuIFdlIGNhbiBzdG9yZSB0aGUgaW50ZXJtZWRpYXRlIGZhY3RvcnMgYXQgdjAKKyAgIGFuZCBhdCB2aCArIDJuICsgMi4KKworICAgRmluYWxseSwgZm9yIHYwIGFuZCB2aW5mLCBmYWN0b3JzIGFyZSBwYXJ0cyBvZiB0aGUgaW5wdXQgb3BlcmFuZHMsCisgICBhbmQgd2UgbmVlZCBzY3JhdGNoIHNwYWNlIG9ubHkgZm9yIHRoZSByZWN1cnNpdmUgbXVsdGlwbGljYXRpb24uCisKKyAgIEluIGFsbCwgaWYgUyhhbikgaXMgdGhlIHNjcmF0Y2ggbmVlZCwgdGhlIG5lZWRlZCBzcGFjZSBpcyBib3VuZGVkIGJ5CisKKyAgICAgUyhhbikgPD0gNCAoMipjZWlsKGFuLzQpICsgMSkgKyAxICsgUyhjZWlsKGFuLzQpICsgMSkKKworICAgd2hpY2ggc2hvdWxkIGdpdmUgUyhuKSA9IDggbi8zICsgYyBsb2cobikgZm9yIHNvbWUgY29uc3RhbnQgYy4KKyovCisKK3ZvaWQKK21wbl90b29tNDRfbXVsIChtcF9wdHIgcHAsCisJCW1wX3NyY3B0ciBhcCwgbXBfc2l6ZV90IGFuLAorCQltcF9zcmNwdHIgYnAsIG1wX3NpemVfdCBibiwKKwkJbXBfcHRyIHNjcmF0Y2gpCit7CisgIG1wX3NpemVfdCBuLCBzLCB0OworICBtcF9saW1iX3QgY3k7CisgIGVudW0gdG9vbTdfZmxhZ3MgZmxhZ3M7CisKKyNkZWZpbmUgYTAgIGFwCisjZGVmaW5lIGExICAoYXAgKyBuKQorI2RlZmluZSBhMiAgKGFwICsgMipuKQorI2RlZmluZSBhMyAgKGFwICsgMypuKQorI2RlZmluZSBiMCAgYnAKKyNkZWZpbmUgYjEgIChicCArIG4pCisjZGVmaW5lIGIyICAoYnAgKyAyKm4pCisjZGVmaW5lIGIzICAoYnAgKyAzKm4pCisKKyAgQVNTRVJUIChhbiA+PSBibik7CisKKyAgbiA9IChhbiArIDMpID4+IDI7CisKKyAgcyA9IGFuIC0gMyAqIG47CisgIHQgPSBibiAtIDMgKiBuOworCisgIEFTU0VSVCAoMCA8IHMgJiYgcyA8PSBuKTsKKyAgQVNTRVJUICgwIDwgdCAmJiB0IDw9IG4pOworICBBU1NFUlQgKHMgPj0gdCk7CisKKyAgLyogTk9URTogVGhlIG11bHRpcGxpY2F0aW9ucyB0byB2Miwgdm0yLCB2aCBhbmQgdm0xIG92ZXJ3cml0ZXMgdGhlCisgICAqIGZvbGxvd2luZyBsaW1iLCBzbyB0aGVzZSBtdXN0IGJlIGNvbXB1dGVkIGluIG9yZGVyLCBhbmQgd2UgbmVlZCBhCisgICAqIG9uZSBsaW1iIGdhcCB0byB0cC4gKi8KKyNkZWZpbmUgdjAgICAgcHAJCQkJLyogMm4gKi8KKyNkZWZpbmUgdjEgICAgKHBwICsgMiAqIG4pCQkJLyogMm4rMSAqLworI2RlZmluZSB2aW5mICAocHAgKyA2ICogbikJCQkvKiBzK3QgKi8KKyNkZWZpbmUgdjIgICAgc2NyYXRjaAkJCQkvKiAybisxICovCisjZGVmaW5lIHZtMiAgIChzY3JhdGNoICsgMiAqIG4gKyAxKQkJLyogMm4rMSAqLworI2RlZmluZSB2aCAgICAoc2NyYXRjaCArIDQgKiBuICsgMikJCS8qIDJuKzEgKi8KKyNkZWZpbmUgdm0xICAgKHNjcmF0Y2ggKyA2ICogbiArIDMpCQkvKiAybisxICovCisjZGVmaW5lIHRwIChzY3JhdGNoICsgOCpuICsgNSkKKworICAvKiBhcHggYW5kIGJweCBtdXN0IG5vdCBvdmVybGFwIHdpdGggdjEgKi8KKyNkZWZpbmUgYXB4ICAgcHAJCQkJLyogbisxICovCisjZGVmaW5lIGFteCAgIChwcCArIG4gKyAxKQkJCS8qIG4rMSAqLworI2RlZmluZSBibXggICAocHAgKyAyKm4gKyAyKQkJCS8qIG4rMSAqLworI2RlZmluZSBicHggICAocHAgKyA0Km4gKyAyKQkJCS8qIG4rMSAqLworCisgIC8qIFRvdGFsIHNjcmF0Y2ggbmVlZDogOCpuICsgNSArIHNjcmF0Y2ggZm9yIHJlY3Vyc2l2ZSBjYWxscy4gVGhpcworICAgICBnaXZlcyByb3VnaGx5IDMyIG4vMyArIGxvZyB0ZXJtLiAqLworCisgIC8qIENvbXB1dGUgYXB4ID0gYTAgKyAyIGExICsgNCBhMiArIDggYTMgYW5kIGFteCA9IGEwIC0gMiBhMSArIDQgYTIgLSA4IGEzLiAgKi8KKyAgZmxhZ3MgPSAoZW51bSB0b29tN19mbGFncykgKHRvb203X3cxX25lZyAmIG1wbl90b29tX2V2YWxfZGdyM19wbTIgKGFweCwgYW14LCBhcCwgbiwgcywgdHApKTsKKworICAvKiBDb21wdXRlIGJweCA9IGIwICsgMiBiMSArIDQgYjIgKyA4IGIzIGFuZCBibXggPSBiMCAtIDIgYjEgKyA0IGIyIC0gOCBiMy4gICovCisgIGZsYWdzID0gKGVudW0gdG9vbTdfZmxhZ3MpIChmbGFncyBeICh0b29tN193MV9uZWcgJiBtcG5fdG9vbV9ldmFsX2RncjNfcG0yIChicHgsIGJteCwgYnAsIG4sIHQsIHRwKSkpOworCisgIFRPT000NF9NVUxfTl9SRUMgKHYyLCBhcHgsIGJweCwgbiArIDEsIHRwKTsJLyogdjIsICAybisxIGxpbWJzICovCisgIFRPT000NF9NVUxfTl9SRUMgKHZtMiwgYW14LCBibXgsIG4gKyAxLCB0cCk7CS8qIHZtMiwgIDJuKzEgbGltYnMgKi8KKworICAvKiBDb21wdXRlIGFweCA9IDggYTAgKyA0IGExICsgMiBhMiArIGEzID0gKCgoMiphMCArIGExKSAqIDIgKyBhMikgKiAyICsgYTMgKi8KKyNpZiBIQVZFX05BVElWRV9tcG5fYWRkbHNoMV9uCisgIGN5ID0gbXBuX2FkZGxzaDFfbiAoYXB4LCBhMSwgYTAsIG4pOworICBjeSA9IDIqY3kgKyBtcG5fYWRkbHNoMV9uIChhcHgsIGEyLCBhcHgsIG4pOworICBpZiAocyA8IG4pCisgICAgeworICAgICAgbXBfbGltYl90IGN5MjsKKyAgICAgIGN5MiA9IG1wbl9hZGRsc2gxX24gKGFweCwgYTMsIGFweCwgcyk7CisgICAgICBhcHhbbl0gPSAyKmN5ICsgbXBuX2xzaGlmdCAoYXB4ICsgcywgYXB4ICsgcywgbiAtIHMsIDEpOworICAgICAgTVBOX0lOQ1JfVSAoYXB4ICsgcywgbisxLXMsIGN5Mik7CisgICAgfQorICBlbHNlCisgICAgYXB4W25dID0gMipjeSArIG1wbl9hZGRsc2gxX24gKGFweCwgYTMsIGFweCwgbik7CisjZWxzZQorICBjeSA9IG1wbl9sc2hpZnQgKGFweCwgYTAsIG4sIDEpOworICBjeSArPSBtcG5fYWRkX24gKGFweCwgYXB4LCBhMSwgbik7CisgIGN5ID0gMipjeSArIG1wbl9sc2hpZnQgKGFweCwgYXB4LCBuLCAxKTsKKyAgY3kgKz0gbXBuX2FkZF9uIChhcHgsIGFweCwgYTIsIG4pOworICBjeSA9IDIqY3kgKyBtcG5fbHNoaWZ0IChhcHgsIGFweCwgbiwgMSk7CisgIGFweFtuXSA9IGN5ICsgbXBuX2FkZCAoYXB4LCBhcHgsIG4sIGEzLCBzKTsKKyNlbmRpZgorCisgIC8qIENvbXB1dGUgYnB4ID0gOCBiMCArIDQgYjEgKyAyIGIyICsgYjMgPSAoKCgyKmIwICsgYjEpICogMiArIGIyKSAqIDIgKyBiMyAqLworI2lmIEhBVkVfTkFUSVZFX21wbl9hZGRsc2gxX24KKyAgY3kgPSBtcG5fYWRkbHNoMV9uIChicHgsIGIxLCBiMCwgbik7CisgIGN5ID0gMipjeSArIG1wbl9hZGRsc2gxX24gKGJweCwgYjIsIGJweCwgbik7CisgIGlmICh0IDwgbikKKyAgICB7CisgICAgICBtcF9saW1iX3QgY3kyOworICAgICAgY3kyID0gbXBuX2FkZGxzaDFfbiAoYnB4LCBiMywgYnB4LCB0KTsKKyAgICAgIGJweFtuXSA9IDIqY3kgKyBtcG5fbHNoaWZ0IChicHggKyB0LCBicHggKyB0LCBuIC0gdCwgMSk7CisgICAgICBNUE5fSU5DUl9VIChicHggKyB0LCBuKzEtdCwgY3kyKTsKKyAgICB9CisgIGVsc2UKKyAgICBicHhbbl0gPSAyKmN5ICsgbXBuX2FkZGxzaDFfbiAoYnB4LCBiMywgYnB4LCBuKTsKKyNlbHNlCisgIGN5ID0gbXBuX2xzaGlmdCAoYnB4LCBiMCwgbiwgMSk7CisgIGN5ICs9IG1wbl9hZGRfbiAoYnB4LCBicHgsIGIxLCBuKTsKKyAgY3kgPSAyKmN5ICsgbXBuX2xzaGlmdCAoYnB4LCBicHgsIG4sIDEpOworICBjeSArPSBtcG5fYWRkX24gKGJweCwgYnB4LCBiMiwgbik7CisgIGN5ID0gMipjeSArIG1wbl9sc2hpZnQgKGJweCwgYnB4LCBuLCAxKTsKKyAgYnB4W25dID0gY3kgKyBtcG5fYWRkIChicHgsIGJweCwgbiwgYjMsIHQpOworI2VuZGlmCisKKyAgQVNTRVJUIChhcHhbbl0gPCAxNSk7CisgIEFTU0VSVCAoYnB4W25dIDwgMTUpOworCisgIFRPT000NF9NVUxfTl9SRUMgKHZoLCBhcHgsIGJweCwgbiArIDEsIHRwKTsJLyogdmgsICAybisxIGxpbWJzICovCisKKyAgLyogQ29tcHV0ZSBhcHggPSBhMCArIGExICsgYTIgKyBhMyBhbmQgYW14ID0gYTAgLSBhMSArIGEyIC0gYTMuICAqLworICBmbGFncyA9IChlbnVtIHRvb203X2ZsYWdzKSAoZmxhZ3MgfCAodG9vbTdfdzNfbmVnICYgbXBuX3Rvb21fZXZhbF9kZ3IzX3BtMSAoYXB4LCBhbXgsIGFwLCBuLCBzLCB0cCkpKTsKKworICAvKiBDb21wdXRlIGJweCA9IGIwICsgYjEgKyBiMiArIGIzIGFuZCBibXggPSBiMCAtIGIxICsgYjIgLSBiMy4gICovCisgIGZsYWdzID0gKGVudW0gdG9vbTdfZmxhZ3MpIChmbGFncyBeICh0b29tN193M19uZWcgJiBtcG5fdG9vbV9ldmFsX2RncjNfcG0xIChicHgsIGJteCwgYnAsIG4sIHQsIHRwKSkpOworCisgIFRPT000NF9NVUxfTl9SRUMgKHZtMSwgYW14LCBibXgsIG4gKyAxLCB0cCk7CS8qIHZtMSwgIDJuKzEgbGltYnMgKi8KKyAgLyogQ2xvYmJlcnMgYW14LCBibXguICovCisgIFRPT000NF9NVUxfTl9SRUMgKHYxLCBhcHgsIGJweCwgbiArIDEsIHRwKTsJLyogdjEsICAybisxIGxpbWJzICovCisKKyAgVE9PTTQ0X01VTF9OX1JFQyAodjAsIGEwLCBiMCwgbiwgdHApOworICBpZiAocyA+IHQpCisgICAgbXBuX211bCAodmluZiwgYTMsIHMsIGIzLCB0KTsKKyAgZWxzZQorICAgIFRPT000NF9NVUxfTl9SRUMgKHZpbmYsIGEzLCBiMywgcywgdHApOwkvKiB2aW5mLCBzK3QgbGltYnMgKi8KKworICBtcG5fdG9vbV9pbnRlcnBvbGF0ZV83cHRzIChwcCwgbiwgZmxhZ3MsIHZtMiwgdm0xLCB2MiwgdmgsIHMgKyB0LCB0cCk7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvdG9vbTRfc3FyLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvdG9vbTRfc3FyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVjODRjMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy90b29tNF9zcXIuYwpAQCAtMCwwICsxLDE2MyBAQAorLyogbXBuX3Rvb200X3NxciAtLSBTcXVhcmUge2FwLGFufS4KKworICAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqb3JuIEdyYW5sdW5kIGFuZCBNYXJjbyBCb2RyYXRvLgorCisgICBUSEUgRlVOQ1RJT04gSU4gVEhJUyBGSUxFIElTIElOVEVSTkFMIFdJVEggQSBNVVRBQkxFIElOVEVSRkFDRS4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggSVQgVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuICBJTiBGQUNULCBJVCBJUyBBTE1PU1QKKyAgIEdVQVJBTlRFRUQgVEhBVCBJVCBXSUxMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR05VIE1QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAyMDA2LTIwMTAsIDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisKKy8qIEV2YWx1YXRlIGluOiAtMSwgLTEvMiwgMCwgKzEvMiwgKzEsICsyLCAraW5mCisKKyAgPC1zLS0+PC0tbi0tPjwtLW4tLT48LS1uLS0+CisgICBfX19fIF9fX19fXyBfX19fX18gX19fX19fCisgIHxfYTNffF9fX2EyX3xfX19hMV98X19fYTBffAorCisgIHYwICA9ICAgYTAgICAgICAgICAgICAgXjIgIyAgICBBKDApXjIKKyAgdjEgID0gKCBhMCsgYTErIGEyKyBhMyleMiAjICAgIEEoMSleMiAgIGFoICA8PSAzCisgIHZtMSA9ICggYTAtIGExKyBhMi0gYTMpXjIgIyAgIEEoLTEpXjIgIHxhaHwgPD0gMQorICB2MiAgPSAoIGEwKzJhMSs0YTIrOGEzKV4yICMgICAgQSgyKV4yICAgYWggIDw9IDE0CisgIHZoICA9ICg4YTArNGExKzJhMisgYTMpXjIgIyAgQSgxLzIpXjIgICBhaCAgPD0gMTQKKyAgdm1oID0gKDhhMC00YTErMmEyLSBhMyleMiAjIEEoLTEvMileMiAgLTQ8PWFoPD05CisgIHZpbmY9ICAgICAgICAgICAgICAgYTMgXjIgIyAgQShpbmYpXjIKKyovCisKKyNpZiBUVU5FX1BST0dSQU1fQlVJTEQKKyNkZWZpbmUgTUFZQkVfc3FyX2Jhc2VjYXNlIDEKKyNkZWZpbmUgTUFZQkVfc3FyX3Rvb20yICAgMQorI2RlZmluZSBNQVlCRV9zcXJfdG9vbTQgICAxCisjZWxzZQorI2RlZmluZSBNQVlCRV9zcXJfYmFzZWNhc2UJCQkJCQlcCisgIChTUVJfVE9PTTRfVEhSRVNIT0xEIDwgNCAqIFNRUl9UT09NMl9USFJFU0hPTEQpCisjZGVmaW5lIE1BWUJFX3Nxcl90b29tMgkJCQkJCQlcCisgIChTUVJfVE9PTTRfVEhSRVNIT0xEIDwgNCAqIFNRUl9UT09NM19USFJFU0hPTEQpCisjZGVmaW5lIE1BWUJFX3Nxcl90b29tNAkJCQkJCQlcCisgIChTUVJfVE9PTTZfVEhSRVNIT0xEID49IDQgKiBTUVJfVE9PTTRfVEhSRVNIT0xEKQorI2VuZGlmCisKKyNkZWZpbmUgVE9PTTRfU1FSX1JFQyhwLCBhLCBuLCB3cykJCQkJCVwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBpZiAoTUFZQkVfc3FyX2Jhc2VjYXNlCQkJCQkJXAorCSYmIEJFTE9XX1RIUkVTSE9MRCAobiwgU1FSX1RPT00yX1RIUkVTSE9MRCkpCQkJXAorICAgICAgbXBuX3Nxcl9iYXNlY2FzZSAocCwgYSwgbik7CQkJCQlcCisgICAgZWxzZSBpZiAoTUFZQkVfc3FyX3Rvb20yCQkJCQkJXAorCSAgICAgJiYgQkVMT1dfVEhSRVNIT0xEIChuLCBTUVJfVE9PTTNfVEhSRVNIT0xEKSkJCVwKKyAgICAgIG1wbl90b29tMl9zcXIgKHAsIGEsIG4sIHdzKTsJCQkJCVwKKyAgICBlbHNlIGlmICghIE1BWUJFX3Nxcl90b29tNAkJCQkJCVwKKwkgICAgIHx8IEJFTE9XX1RIUkVTSE9MRCAobiwgU1FSX1RPT000X1RIUkVTSE9MRCkpCQlcCisgICAgICBtcG5fdG9vbTNfc3FyIChwLCBhLCBuLCB3cyk7CQkJCQlcCisgICAgZWxzZQkJCQkJCQkJXAorICAgICAgbXBuX3Rvb200X3NxciAocCwgYSwgbiwgd3MpOwkJCQkJXAorICB9IHdoaWxlICgwKQorCit2b2lkCittcG5fdG9vbTRfc3FyIChtcF9wdHIgcHAsCisJICAgICAgIG1wX3NyY3B0ciBhcCwgbXBfc2l6ZV90IGFuLAorCSAgICAgICBtcF9wdHIgc2NyYXRjaCkKK3sKKyAgbXBfc2l6ZV90IG4sIHM7CisgIG1wX2xpbWJfdCBjeTsKKworI2RlZmluZSBhMCAgYXAKKyNkZWZpbmUgYTEgIChhcCArIG4pCisjZGVmaW5lIGEyICAoYXAgKyAyKm4pCisjZGVmaW5lIGEzICAoYXAgKyAzKm4pCisKKyAgbiA9IChhbiArIDMpID4+IDI7CisKKyAgcyA9IGFuIC0gMyAqIG47CisKKyAgQVNTRVJUICgwIDwgcyAmJiBzIDw9IG4pOworCisgIC8qIE5PVEU6IFRoZSBtdWx0aXBsaWNhdGlvbnMgdG8gdjIsIHZtMiwgdmggYW5kIHZtMSBvdmVyd3JpdGVzIHRoZQorICAgKiBmb2xsb3dpbmcgbGltYiwgc28gdGhlc2UgbXVzdCBiZSBjb21wdXRlZCBpbiBvcmRlciwgYW5kIHdlIG5lZWQgYQorICAgKiBvbmUgbGltYiBnYXAgdG8gdHAuICovCisjZGVmaW5lIHYwICAgIHBwCQkJCS8qIDJuICovCisjZGVmaW5lIHYxICAgIChwcCArIDIgKiBuKQkJCS8qIDJuKzEgKi8KKyNkZWZpbmUgdmluZiAgKHBwICsgNiAqIG4pCQkJLyogcyt0ICovCisjZGVmaW5lIHYyICAgIHNjcmF0Y2gJCQkJLyogMm4rMSAqLworI2RlZmluZSB2bTIgICAoc2NyYXRjaCArIDIgKiBuICsgMSkJCS8qIDJuKzEgKi8KKyNkZWZpbmUgdmggICAgKHNjcmF0Y2ggKyA0ICogbiArIDIpCQkvKiAybisxICovCisjZGVmaW5lIHZtMSAgIChzY3JhdGNoICsgNiAqIG4gKyAzKQkJLyogMm4rMSAqLworI2RlZmluZSB0cCAoc2NyYXRjaCArIDgqbiArIDUpCisKKyAgLyogTm8gb3ZlcmxhcCB3aXRoIHYxICovCisjZGVmaW5lIGFweCAgIHBwCQkJCS8qIG4rMSAqLworI2RlZmluZSBhbXggICAocHAgKyA0Km4gKyAyKQkJCS8qIG4rMSAqLworCisgIC8qIFRvdGFsIHNjcmF0Y2ggbmVlZDogOCpuICsgNSArIHNjcmF0Y2ggZm9yIHJlY3Vyc2l2ZSBjYWxscy4gVGhpcworICAgICBnaXZlcyByb3VnaGx5IDMyIG4vMyArIGxvZyB0ZXJtLiAqLworCisgIC8qIENvbXB1dGUgYXB4ID0gYTAgKyAyIGExICsgNCBhMiArIDggYTMgYW5kIGFteCA9IGEwIC0gMiBhMSArIDQgYTIgLSA4IGEzLiAgKi8KKyAgbXBuX3Rvb21fZXZhbF9kZ3IzX3BtMiAoYXB4LCBhbXgsIGFwLCBuLCBzLCB0cCk7CisKKyAgVE9PTTRfU1FSX1JFQyAodjIsIGFweCwgbiArIDEsIHRwKTsJLyogdjIsICAybisxIGxpbWJzICovCisgIFRPT000X1NRUl9SRUMgKHZtMiwgYW14LCBuICsgMSwgdHApOwkvKiB2bTIsICAybisxIGxpbWJzICovCisKKyAgLyogQ29tcHV0ZSBhcHggPSA4IGEwICsgNCBhMSArIDIgYTIgKyBhMyA9ICgoKDIqYTAgKyBhMSkgKiAyICsgYTIpICogMiArIGEzICovCisjaWYgSEFWRV9OQVRJVkVfbXBuX2FkZGxzaDFfbgorICBjeSA9IG1wbl9hZGRsc2gxX24gKGFweCwgYTEsIGEwLCBuKTsKKyAgY3kgPSAyKmN5ICsgbXBuX2FkZGxzaDFfbiAoYXB4LCBhMiwgYXB4LCBuKTsKKyAgaWYgKHMgPCBuKQorICAgIHsKKyAgICAgIG1wX2xpbWJfdCBjeTI7CisgICAgICBjeTIgPSBtcG5fYWRkbHNoMV9uIChhcHgsIGEzLCBhcHgsIHMpOworICAgICAgYXB4W25dID0gMipjeSArIG1wbl9sc2hpZnQgKGFweCArIHMsIGFweCArIHMsIG4gLSBzLCAxKTsKKyAgICAgIE1QTl9JTkNSX1UgKGFweCArIHMsIG4rMS1zLCBjeTIpOworICAgIH0KKyAgZWxzZQorICAgIGFweFtuXSA9IDIqY3kgKyBtcG5fYWRkbHNoMV9uIChhcHgsIGEzLCBhcHgsIG4pOworI2Vsc2UKKyAgY3kgPSBtcG5fbHNoaWZ0IChhcHgsIGEwLCBuLCAxKTsKKyAgY3kgKz0gbXBuX2FkZF9uIChhcHgsIGFweCwgYTEsIG4pOworICBjeSA9IDIqY3kgKyBtcG5fbHNoaWZ0IChhcHgsIGFweCwgbiwgMSk7CisgIGN5ICs9IG1wbl9hZGRfbiAoYXB4LCBhcHgsIGEyLCBuKTsKKyAgY3kgPSAyKmN5ICsgbXBuX2xzaGlmdCAoYXB4LCBhcHgsIG4sIDEpOworICBhcHhbbl0gPSBjeSArIG1wbl9hZGQgKGFweCwgYXB4LCBuLCBhMywgcyk7CisjZW5kaWYKKworICBBU1NFUlQgKGFweFtuXSA8IDE1KTsKKworICBUT09NNF9TUVJfUkVDICh2aCwgYXB4LCBuICsgMSwgdHApOwkvKiB2aCwgIDJuKzEgbGltYnMgKi8KKworICAvKiBDb21wdXRlIGFweCA9IGEwICsgYTEgKyBhMiArIGEzIGFuZCBhbXggPSBhMCAtIGExICsgYTIgLSBhMy4gICovCisgIG1wbl90b29tX2V2YWxfZGdyM19wbTEgKGFweCwgYW14LCBhcCwgbiwgcywgdHApOworCisgIFRPT000X1NRUl9SRUMgKHYxLCBhcHgsIG4gKyAxLCB0cCk7CS8qIHYxLCAgMm4rMSBsaW1icyAqLworICBUT09NNF9TUVJfUkVDICh2bTEsIGFteCwgbiArIDEsIHRwKTsJLyogdm0xLCAgMm4rMSBsaW1icyAqLworCisgIFRPT000X1NRUl9SRUMgKHYwLCBhMCwgbiwgdHApOworICBUT09NNF9TUVJfUkVDICh2aW5mLCBhMywgcywgdHApOwkvKiB2aW5mLCAycyBsaW1icyAqLworCisgIG1wbl90b29tX2ludGVycG9sYXRlXzdwdHMgKHBwLCBuLCAoZW51bSB0b29tN19mbGFncykgMCwgdm0yLCB2bTEsIHYyLCB2aCwgMipzLCB0cCk7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvdG9vbTUyX211bC5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Rvb201Ml9tdWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzQwNTliCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Rvb201Ml9tdWwuYwpAQCAtMCwwICsxLDI1NiBAQAorLyogbXBuX3Rvb201Ml9tdWwgLS0gTXVsdGlwbHkge2FwLGFufSBhbmQge2JwLGJufSB3aGVyZSBhbiBpcyBub21pbmFsbHkgNC8zCisgICB0aW1lcyBhcyBsYXJnZSBhcyBibi4gIE9yIG1vcmUgYWNjdXJhdGVseSwgYm4gPCBhbiA8IDIgYm4uCisKKyAgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBNYXJjbyBCb2RyYXRvLgorCisgICBUaGUgaWRlYSBvZiBhcHBseWluZyB0b29tIHRvIHVuYmFsYW5jZWQgbXVsdGlwbGljYXRpb24gaXMgZHVlIHRvIE1hcmNvCisgICBCb2RyYXRvIGFuZCBBbGJlcnRvIFphbm9uaS4KKworICAgVEhFIEZVTkNUSU9OIElOIFRISVMgRklMRSBJUyBJTlRFUk5BTCBXSVRIIEEgTVVUQUJMRSBJTlRFUkZBQ0UuICBJVCBJUyBPTkxZCisgICBTQUZFIFRPIFJFQUNIIElUIFRIUk9VR0ggRE9DVU1FTlRFRCBJTlRFUkZBQ0VTLiAgSU4gRkFDVCwgSVQgSVMgQUxNT1NUCisgICBHVUFSQU5URUVEIFRIQVQgSVQgV0lMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEgRlVUVVJFIEdOVSBNUCBSRUxFQVNFLgorCitDb3B5cmlnaHQgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworLyogRXZhbHVhdGUgaW46IC0yLCAtMSwgMCwgKzEsICsyLCAraW5mCisKKyAgPC1zLT48LS1uLS0+PC0tbi0tPjwtLW4tLT48LS1uLS0+CisgICBfX18gX19fX19fIF9fX19fXyBfX19fX18gX19fX19fCisgIHxhNF98X19fYTNffF9fX2EyX3xfX19hMV98X19fYTBffAorCQkJfGIxfF9fX2IwX3wKKwkJCTx0LT48LS1uLS0+CisKKyAgdjAgID0gIGEwICAgICAgICAgICAgICAgICAgKiBiMCAgICAgICMgICBBKDApKkIoMCkKKyAgdjEgID0gKGEwKyBhMSsgYTIrIGEzKyAgYTQpKihiMCsgYjEpICMgICBBKDEpKkIoMSkgICAgICBhaCAgPD0gNCAgIGJoIDw9IDEKKyAgdm0xID0gKGEwLSBhMSsgYTItIGEzKyAgYTQpKihiMC0gYjEpICMgIEEoLTEpKkIoLTEpICAgIHxhaHwgPD0gMiAgIGJoICA9IDAKKyAgdjIgID0gKGEwKzJhMSs0YTIrOGEzKzE2YTQpKihiMCsyYjEpICMgICBBKDIpKkIoMikgICAgICBhaCAgPD0gMzAgIGJoIDw9IDIKKyAgdm0yID0gKGEwLTJhMSs0YTItOGEzKzE2YTQpKihiMC0yYjEpICMgIEEoLTIpKkIoLTIpICAgIHxhaHwgPD0gMjAgfGJofDw9IDEKKyAgdmluZj0gICAgICAgICAgICAgICAgICAgYTQgKiAgICAgYjEgICMgQShpbmYpKkIoaW5mKQorCisgIFNvbWUgc2xpZ2h0IG9wdGltaXphdGlvbiBpbiBldmFsdWF0aW9uIGFyZSB0YWtlbiBmcm9tIHRoZSBwYXBlcjoKKyAgIlRvd2FyZHMgT3B0aW1hbCBUb29tLUNvb2sgTXVsdGlwbGljYXRpb24gZm9yIFVuaXZhcmlhdGUgYW5kCisgIE11bHRpdmFyaWF0ZSBQb2x5bm9taWFscyBpbiBDaGFyYWN0ZXJpc3RpYyAyIGFuZCAwLiIKKyovCisKK3ZvaWQKK21wbl90b29tNTJfbXVsIChtcF9wdHIgcHAsCisJCW1wX3NyY3B0ciBhcCwgbXBfc2l6ZV90IGFuLAorCQltcF9zcmNwdHIgYnAsIG1wX3NpemVfdCBibiwgbXBfcHRyIHNjcmF0Y2gpCit7CisgIG1wX3NpemVfdCBuLCBzLCB0OworICBlbnVtIHRvb202X2ZsYWdzIGZsYWdzOworCisjZGVmaW5lIGEwICBhcAorI2RlZmluZSBhMSAgKGFwICsgbikKKyNkZWZpbmUgYTIgIChhcCArIDIgKiBuKQorI2RlZmluZSBhMyAgKGFwICsgMyAqIG4pCisjZGVmaW5lIGE0ICAoYXAgKyA0ICogbikKKyNkZWZpbmUgYjAgIGJwCisjZGVmaW5lIGIxICAoYnAgKyBuKQorCisgIG4gPSAxICsgKDIgKiBhbiA+PSA1ICogYm4gPyAoYW4gLSAxKSAvIChzaXplX3QpIDUgOiAoYm4gLSAxKSA+PiAxKTsKKworICBzID0gYW4gLSA0ICogbjsKKyAgdCA9IGJuIC0gbjsKKworICBBU1NFUlQgKDAgPCBzICYmIHMgPD0gbik7CisgIEFTU0VSVCAoMCA8IHQgJiYgdCA8PSBuKTsKKworICAvKiBFbnN1cmVzIHRoYXQgNSB2YWx1ZXMgb2YgbisxIGxpbWJzIGVhY2ggZml0cyBpbiB0aGUgcHJvZHVjdCBhcmVhLgorICAgICBCb3JkZXJsaW5lIGNhc2VzIGFyZSBhbiA9IDMyLCBibiA9IDgsIG4gPSA3LCBhbmQgYW4gPSAzNiwgYm4gPSA5LAorICAgICBuID0gOC4gKi8KKyAgQVNTRVJUIChzK3QgPj0gNSk7CisKKyNkZWZpbmUgdjAgICAgcHAJCQkJLyogMm4gKi8KKyNkZWZpbmUgdm0xICAgKHNjcmF0Y2gpCQkJCS8qIDJuKzEgKi8KKyNkZWZpbmUgdjEgICAgKHBwICsgMiAqIG4pCQkJLyogMm4rMSAqLworI2RlZmluZSB2bTIgICAoc2NyYXRjaCArIDIgKiBuICsgMSkJCS8qIDJuKzEgKi8KKyNkZWZpbmUgdjIgICAgKHNjcmF0Y2ggKyA0ICogbiArIDIpCQkvKiAybisxICovCisjZGVmaW5lIHZpbmYgIChwcCArIDUgKiBuKQkJCS8qIHMrdCAqLworI2RlZmluZSBiczEgICAgcHAJCQkJLyogbisxICovCisjZGVmaW5lIGJzbTEgIChzY3JhdGNoICsgMiAqIG4gKyAyKQkJLyogbiAgICovCisjZGVmaW5lIGFzbTEgIChzY3JhdGNoICsgMyAqIG4gKyAzKQkJLyogbisxICovCisjZGVmaW5lIGFzbTIgIChzY3JhdGNoICsgNCAqIG4gKyA0KQkJLyogbisxICovCisjZGVmaW5lIGJzbTIgIChwcCArIG4gKyAxKQkJCS8qIG4rMSAqLworI2RlZmluZSBiczIgICAocHAgKyAyICogbiArIDIpCQkJLyogbisxICovCisjZGVmaW5lIGFzMiAgIChwcCArIDMgKiBuICsgMykJCQkvKiBuKzEgKi8KKyNkZWZpbmUgYXMxICAgKHBwICsgNCAqIG4gKyA0KQkJCS8qIG4rMSAqLworCisgIC8qIFNjcmF0Y2ggbmVlZCBpcyA2ICogbiArIDMgKyAxLiBXZSBuZWVkIG9uZSBleHRyYSBsaW1iLCBiZWNhdXNlCisgICAgIHByb2R1Y3RzIHdpbGwgb3ZlcndyaXRlIDJuKzIgbGltYnMuICovCisKKyNkZWZpbmUgYTBhMiAgc2NyYXRjaAorI2RlZmluZSBhMWEzICBhc20xCisKKyAgLyogQ29tcHV0ZSBhczIgYW5kIGFzbTIuICAqLworICBmbGFncyA9IChlbnVtIHRvb202X2ZsYWdzKSAodG9vbTZfdm0yX25lZyAmIG1wbl90b29tX2V2YWxfcG0yIChhczIsIGFzbTIsIDQsIGFwLCBuLCBzLCBhMWEzKSk7CisKKyAgLyogQ29tcHV0ZSBiczEgYW5kIGJzbTEuICAqLworICBpZiAodCA9PSBuKQorICAgIHsKKyNpZiBIQVZFX05BVElWRV9tcG5fYWRkX25fc3ViX24KKyAgICAgIG1wX2xpbWJfdCBjeTsKKworICAgICAgaWYgKG1wbl9jbXAgKGIwLCBiMSwgbikgPCAwKQorCXsKKwkgIGN5ID0gbXBuX2FkZF9uX3N1Yl9uIChiczEsIGJzbTEsIGIxLCBiMCwgbik7CisJICBmbGFncyA9IChlbnVtIHRvb202X2ZsYWdzKSAoZmxhZ3MgXiB0b29tNl92bTFfbmVnKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgY3kgPSBtcG5fYWRkX25fc3ViX24gKGJzMSwgYnNtMSwgYjAsIGIxLCBuKTsKKwl9CisgICAgICBiczFbbl0gPSBjeSA+PiAxOworI2Vsc2UKKyAgICAgIGJzMVtuXSA9IG1wbl9hZGRfbiAoYnMxLCBiMCwgYjEsIG4pOworICAgICAgaWYgKG1wbl9jbXAgKGIwLCBiMSwgbikgPCAwKQorCXsKKwkgIG1wbl9zdWJfbiAoYnNtMSwgYjEsIGIwLCBuKTsKKwkgIGZsYWdzID0gKGVudW0gdG9vbTZfZmxhZ3MpIChmbGFncyBeIHRvb202X3ZtMV9uZWcpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBtcG5fc3ViX24gKGJzbTEsIGIwLCBiMSwgbik7CisJfQorI2VuZGlmCisgICAgfQorICBlbHNlCisgICAgeworICAgICAgYnMxW25dID0gbXBuX2FkZCAoYnMxLCBiMCwgbiwgYjEsIHQpOworICAgICAgaWYgKG1wbl96ZXJvX3AgKGIwICsgdCwgbiAtIHQpICYmIG1wbl9jbXAgKGIwLCBiMSwgdCkgPCAwKQorCXsKKwkgIG1wbl9zdWJfbiAoYnNtMSwgYjEsIGIwLCB0KTsKKwkgIE1QTl9aRVJPIChic20xICsgdCwgbiAtIHQpOworCSAgZmxhZ3MgPSAoZW51bSB0b29tNl9mbGFncykgKGZsYWdzIF4gdG9vbTZfdm0xX25lZyk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIG1wbl9zdWIgKGJzbTEsIGIwLCBuLCBiMSwgdCk7CisJfQorICAgIH0KKworICAvKiBDb21wdXRlIGJzMiBhbmQgYnNtMiwgcmVjeWNsaW5nIGJzMSBhbmQgYnNtMS4gYnMyPWJzMStiMTsgYnNtMj1ic20xLWIxICAqLworICBtcG5fYWRkIChiczIsIGJzMSwgbisxLCBiMSwgdCk7CisgIGlmIChmbGFncyAmIHRvb202X3ZtMV9uZWcpCisgICAgeworICAgICAgYnNtMltuXSA9IG1wbl9hZGQgKGJzbTIsIGJzbTEsIG4sIGIxLCB0KTsKKyAgICAgIGZsYWdzID0gKGVudW0gdG9vbTZfZmxhZ3MpIChmbGFncyBeIHRvb202X3ZtMl9uZWcpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGJzbTJbbl0gPSAwOworICAgICAgaWYgKHQgPT0gbikKKwl7CisJICBpZiAobXBuX2NtcCAoYnNtMSwgYjEsIG4pIDwgMCkKKwkgICAgeworCSAgICAgIG1wbl9zdWJfbiAoYnNtMiwgYjEsIGJzbTEsIG4pOworCSAgICAgIGZsYWdzID0gKGVudW0gdG9vbTZfZmxhZ3MpIChmbGFncyBeIHRvb202X3ZtMl9uZWcpOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBtcG5fc3ViX24gKGJzbTIsIGJzbTEsIGIxLCBuKTsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwl7CisJICBpZiAobXBuX3plcm9fcCAoYnNtMSArIHQsIG4gLSB0KSAmJiBtcG5fY21wIChic20xLCBiMSwgdCkgPCAwKQorCSAgICB7CisJICAgICAgbXBuX3N1Yl9uIChic20yLCBiMSwgYnNtMSwgdCk7CisJICAgICAgTVBOX1pFUk8gKGJzbTIgKyB0LCBuIC0gdCk7CisJICAgICAgZmxhZ3MgPSAoZW51bSB0b29tNl9mbGFncykgKGZsYWdzIF4gdG9vbTZfdm0yX25lZyk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIG1wbl9zdWIgKGJzbTIsIGJzbTEsIG4sIGIxLCB0KTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgLyogQ29tcHV0ZSBhczEgYW5kIGFzbTEuICAqLworICBmbGFncyA9IChlbnVtIHRvb202X2ZsYWdzKSAoZmxhZ3MgXiAodG9vbTZfdm0xX25lZyAmIG1wbl90b29tX2V2YWxfcG0xIChhczEsIGFzbTEsIDQsIGFwLCBuLCBzLCBhMGEyKSkpOworCisgIEFTU0VSVCAoYXMxW25dIDw9IDQpOworICBBU1NFUlQgKGJzMVtuXSA8PSAxKTsKKyAgQVNTRVJUIChhc20xW25dIDw9IDIpOworLyogICBBU1NFUlQgKGJzbTFbbl0gPD0gMSk7ICovCisgIEFTU0VSVCAoYXMyW25dIDw9MzApOworICBBU1NFUlQgKGJzMltuXSA8PSAyKTsKKyAgQVNTRVJUIChhc20yW25dIDw9IDIwKTsKKyAgQVNTRVJUIChic20yW25dIDw9IDEpOworCisgIC8qIHZtMSwgMm4rMSBsaW1icyAqLworICBtcG5fbXVsICh2bTEsIGFzbTEsIG4rMSwgYnNtMSwgbik7ICAvKiBXNCAqLworCisgIC8qIHZtMiwgMm4rMSBsaW1icyAqLworICBtcG5fbXVsX24gKHZtMiwgYXNtMiwgYnNtMiwgbisxKTsgIC8qIFcyICovCisKKyAgLyogdjIsIDJuKzEgbGltYnMgKi8KKyAgbXBuX211bF9uICh2MiwgYXMyLCBiczIsIG4rMSk7ICAvKiBXMSAqLworCisgIC8qIHYxLCAybisxIGxpbWJzICovCisgIG1wbl9tdWxfbiAodjEsIGFzMSwgYnMxLCBuKzEpOyAgLyogVzMgKi8KKworICAvKiB2aW5mLCBzK3QgbGltYnMgKi8gICAvKiBXMCAqLworICBpZiAocyA+IHQpICBtcG5fbXVsICh2aW5mLCBhNCwgcywgYjEsIHQpOworICBlbHNlICAgICAgICBtcG5fbXVsICh2aW5mLCBiMSwgdCwgYTQsIHMpOworCisgIC8qIHYwLCAybiBsaW1icyAqLworICBtcG5fbXVsX24gKHYwLCBhcCwgYnAsIG4pOyAgLyogVzUgKi8KKworICBtcG5fdG9vbV9pbnRlcnBvbGF0ZV82cHRzIChwcCwgbiwgZmxhZ3MsIHZtMSwgdm0yLCB2MiwgdCArIHMpOworCisjdW5kZWYgdjAKKyN1bmRlZiB2bTEKKyN1bmRlZiB2MQorI3VuZGVmIHZtMgorI3VuZGVmIHYyCisjdW5kZWYgdmluZgorI3VuZGVmIGJzMQorI3VuZGVmIGJzMgorI3VuZGVmIGJzbTEKKyN1bmRlZiBic20yCisjdW5kZWYgYXNtMQorI3VuZGVmIGFzbTIKKyN1bmRlZiBhczEKKyN1bmRlZiBhczIKKyN1bmRlZiBhMGEyCisjdW5kZWYgYjBiMgorI3VuZGVmIGExYTMKKyN1bmRlZiBhMAorI3VuZGVmIGExCisjdW5kZWYgYTIKKyN1bmRlZiBhMworI3VuZGVmIGIwCisjdW5kZWYgYjEKKyN1bmRlZiBiMgorCit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvdG9vbTUzX211bC5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Rvb201M19tdWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTM0Mjk3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Rvb201M19tdWwuYwpAQCAtMCwwICsxLDMzMSBAQAorLyogbXBuX3Rvb201M19tdWwgLS0gTXVsdGlwbHkge2FwLGFufSBhbmQge2JwLGJufSB3aGVyZSBhbiBpcyBub21pbmFsbHkgNS8zCisgICB0aW1lcyBhcyBsYXJnZSBhcyBibi4gIE9yIG1vcmUgYWNjdXJhdGVseSwgKDQvMylibiA8IGFuIDwgKDUvMilibi4KKworICAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqb3JuIEdyYW5sdW5kIGFuZCBNYXJjbyBCb2RyYXRvLgorCisgICBUaGUgaWRlYSBvZiBhcHBseWluZyB0b29tIHRvIHVuYmFsYW5jZWQgbXVsdGlwbGljYXRpb24gaXMgZHVlIHRvIE1hcmNvCisgICBCb2RyYXRvIGFuZCBBbGJlcnRvIFphbm9uaS4KKworICAgVEhFIEZVTkNUSU9OIElOIFRISVMgRklMRSBJUyBJTlRFUk5BTCBXSVRIIEEgTVVUQUJMRSBJTlRFUkZBQ0UuICBJVCBJUyBPTkxZCisgICBTQUZFIFRPIFJFQUNIIElUIFRIUk9VR0ggRE9DVU1FTlRFRCBJTlRFUkZBQ0VTLiAgSU4gRkFDVCwgSVQgSVMgQUxNT1NUCisgICBHVUFSQU5URUVEIFRIQVQgSVQgV0lMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEgRlVUVVJFIEdOVSBNUCBSRUxFQVNFLgorCitDb3B5cmlnaHQgMjAwNi0yMDA4LCAyMDEyLCAyMDE0LCAyMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCisvKiBFdmFsdWF0ZSBpbjogMCwgKzEsIC0xLCArMiwgLTIsIDEvMiwgK2luZgorCisgIDwtcy0+PC0tbi0tPjwtLW4tLT48LS1uLS0+PC0tbi0tPgorICAgX19fIF9fX19fXyBfX19fX18gX19fX19fIF9fX19fXworICB8YTRffF9fX2EzX3xfX19hMl98X19fYTFffF9fX2EwX3wKKwkgICAgICAgfF9fYjJ8X19fYjFffF9fX2IwX3wKKwkgICAgICAgPC10LS0+PC0tbi0tPjwtLW4tLT4KKworICB2MCAgPSAgICBhMCAgICAgICAgICAgICAgICAgICogIGIwICAgICAgICAgICMgICAgQSgwKSpCKDApCisgIHYxICA9ICggIGEwKyBhMSsgYTIrIGEzKyAgYTQpKiggYjArIGIxKyBiMikgIyAgICBBKDEpKkIoMSkgICAgICBhaCAgPD0gNCAgIGJoIDw9IDIKKyAgdm0xID0gKCAgYTAtIGExKyBhMi0gYTMrICBhNCkqKCBiMC0gYjErIGIyKSAjICAgQSgtMSkqQigtMSkgICAgfGFofCA8PSAyICAgYmggPD0gMQorICB2MiAgPSAoICBhMCsyYTErNGEyKzhhMysxNmE0KSooIGIwKzJiMSs0YjIpICMgICAgQSgyKSpCKDIpICAgICAgYWggIDw9IDMwICBiaCA8PSA2CisgIHZtMiA9ICggIGEwLTJhMSs0YTItOGEzKzE2YTQpKiggYjAtMmIxKzRiMikgIyAgICBBKDIpKkIoMikgICAgIC05PD1haDw9MjAgLTE8PWJoPD00CisgIHZoICA9ICgxNmEwKzhhMSs0YTIrMmEzKyAgYTQpKig0YjArMmIxKyBiMikgIyAgQSgxLzIpKkIoMS8yKSAgICBhaCAgPD0gMzAgIGJoIDw9IDYKKyAgdmluZj0gICAgICAgICAgICAgICAgICAgICBhNCAqICAgICAgICAgIGIyICAjICBBKGluZikqQihpbmYpCisqLworCit2b2lkCittcG5fdG9vbTUzX211bCAobXBfcHRyIHBwLAorCQltcF9zcmNwdHIgYXAsIG1wX3NpemVfdCBhbiwKKwkJbXBfc3JjcHRyIGJwLCBtcF9zaXplX3QgYm4sCisJCW1wX3B0ciBzY3JhdGNoKQoreworICBtcF9zaXplX3QgbiwgcywgdDsKKyAgbXBfbGltYl90IGN5OworICBtcF9wdHIgZ3A7CisgIG1wX3B0ciBhczEsIGFzbTEsIGFzMiwgYXNtMiwgYXNoOworICBtcF9wdHIgYnMxLCBic20xLCBiczIsIGJzbTIsIGJzaDsKKyAgbXBfcHRyIHRtcDsKKyAgZW51bSB0b29tN19mbGFncyBmbGFnczsKKyAgVE1QX0RFQ0w7CisKKyNkZWZpbmUgYTAgIGFwCisjZGVmaW5lIGExICAoYXAgKyBuKQorI2RlZmluZSBhMiAgKGFwICsgMipuKQorI2RlZmluZSBhMyAgKGFwICsgMypuKQorI2RlZmluZSBhNCAgKGFwICsgNCpuKQorI2RlZmluZSBiMCAgYnAKKyNkZWZpbmUgYjEgIChicCArIG4pCisjZGVmaW5lIGIyICAoYnAgKyAyKm4pCisKKyAgbiA9IDEgKyAoMyAqIGFuID49IDUgKiBibiA/IChhbiAtIDEpIC8gKHNpemVfdCkgNSA6IChibiAtIDEpIC8gKHNpemVfdCkgMyk7CisKKyAgcyA9IGFuIC0gNCAqIG47CisgIHQgPSBibiAtIDIgKiBuOworCisgIEFTU0VSVCAoMCA8IHMgJiYgcyA8PSBuKTsKKyAgQVNTRVJUICgwIDwgdCAmJiB0IDw9IG4pOworCisgIFRNUF9NQVJLOworCisgIHRtcCA9IFRNUF9BTExPQ19MSU1CUyAoMTAgKiAobiArIDEpKTsKKyAgYXMxICA9IHRtcDsgdG1wICs9IG4gKyAxOworICBhc20xID0gdG1wOyB0bXAgKz0gbiArIDE7CisgIGFzMiAgPSB0bXA7IHRtcCArPSBuICsgMTsKKyAgYXNtMiA9IHRtcDsgdG1wICs9IG4gKyAxOworICBhc2ggID0gdG1wOyB0bXAgKz0gbiArIDE7CisgIGJzMSAgPSB0bXA7IHRtcCArPSBuICsgMTsKKyAgYnNtMSA9IHRtcDsgdG1wICs9IG4gKyAxOworICBiczIgID0gdG1wOyB0bXAgKz0gbiArIDE7CisgIGJzbTIgPSB0bXA7IHRtcCArPSBuICsgMTsKKyAgYnNoICA9IHRtcDsgdG1wICs9IG4gKyAxOworCisgIGdwID0gcHA7CisKKyAgLyogQ29tcHV0ZSBhczEgYW5kIGFzbTEuICAqLworICBmbGFncyA9IChlbnVtIHRvb203X2ZsYWdzKSAodG9vbTdfdzNfbmVnICYgbXBuX3Rvb21fZXZhbF9wbTEgKGFzMSwgYXNtMSwgNCwgYXAsIG4sIHMsIGdwKSk7CisKKyAgLyogQ29tcHV0ZSBhczIgYW5kIGFzbTIuICovCisgIGZsYWdzID0gKGVudW0gdG9vbTdfZmxhZ3MpIChmbGFncyB8ICh0b29tN193MV9uZWcgJiBtcG5fdG9vbV9ldmFsX3BtMiAoYXMyLCBhc20yLCA0LCBhcCwgbiwgcywgZ3ApKSk7CisKKyAgLyogQ29tcHV0ZSBhc2ggPSAxNiBhMCArIDggYTEgKyA0IGEyICsgMiBhMyArIGE0CisgICAgID0gMiooMiooMiooMiphMCArIGExKSArIGEyKSArIGEzKSArIGE0ICAqLworI2lmIEhBVkVfTkFUSVZFX21wbl9hZGRsc2gxX24KKyAgY3kgPSBtcG5fYWRkbHNoMV9uIChhc2gsIGExLCBhMCwgbik7CisgIGN5ID0gMipjeSArIG1wbl9hZGRsc2gxX24gKGFzaCwgYTIsIGFzaCwgbik7CisgIGN5ID0gMipjeSArIG1wbl9hZGRsc2gxX24gKGFzaCwgYTMsIGFzaCwgbik7CisgIGlmIChzIDwgbikKKyAgICB7CisgICAgICBtcF9saW1iX3QgY3kyOworICAgICAgY3kyID0gbXBuX2FkZGxzaDFfbiAoYXNoLCBhNCwgYXNoLCBzKTsKKyAgICAgIGFzaFtuXSA9IDIqY3kgKyBtcG5fbHNoaWZ0IChhc2ggKyBzLCBhc2ggKyBzLCBuIC0gcywgMSk7CisgICAgICBNUE5fSU5DUl9VIChhc2ggKyBzLCBuKzEtcywgY3kyKTsKKyAgICB9CisgIGVsc2UKKyAgICBhc2hbbl0gPSAyKmN5ICsgbXBuX2FkZGxzaDFfbiAoYXNoLCBhNCwgYXNoLCBuKTsKKyNlbHNlCisgIGN5ID0gbXBuX2xzaGlmdCAoYXNoLCBhMCwgbiwgMSk7CisgIGN5ICs9IG1wbl9hZGRfbiAoYXNoLCBhc2gsIGExLCBuKTsKKyAgY3kgPSAyKmN5ICsgbXBuX2xzaGlmdCAoYXNoLCBhc2gsIG4sIDEpOworICBjeSArPSBtcG5fYWRkX24gKGFzaCwgYXNoLCBhMiwgbik7CisgIGN5ID0gMipjeSArIG1wbl9sc2hpZnQgKGFzaCwgYXNoLCBuLCAxKTsKKyAgY3kgKz0gbXBuX2FkZF9uIChhc2gsIGFzaCwgYTMsIG4pOworICBjeSA9IDIqY3kgKyBtcG5fbHNoaWZ0IChhc2gsIGFzaCwgbiwgMSk7CisgIGFzaFtuXSA9IGN5ICsgbXBuX2FkZCAoYXNoLCBhc2gsIG4sIGE0LCBzKTsKKyNlbmRpZgorCisgIC8qIENvbXB1dGUgYnMxIGFuZCBic20xLiAgKi8KKyAgYnMxW25dID0gbXBuX2FkZCAoYnMxLCBiMCwgbiwgYjIsIHQpOwkJLyogYjAgKyBiMiAqLworI2lmIEhBVkVfTkFUSVZFX21wbl9hZGRfbl9zdWJfbgorICBpZiAoYnMxW25dID09IDAgJiYgbXBuX2NtcCAoYnMxLCBiMSwgbikgPCAwKQorICAgIHsKKyAgICAgIGJzMVtuXSA9IG1wbl9hZGRfbl9zdWJfbiAoYnMxLCBic20xLCBiMSwgYnMxLCBuKSA+PiAxOworICAgICAgYnNtMVtuXSA9IDA7CisgICAgICBmbGFncyA9IChlbnVtIHRvb203X2ZsYWdzKSAoZmxhZ3MgXiB0b29tN193M19uZWcpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGN5ID0gbXBuX2FkZF9uX3N1Yl9uIChiczEsIGJzbTEsIGJzMSwgYjEsIG4pOworICAgICAgYnNtMVtuXSA9IGJzMVtuXSAtIChjeSAmIDEpOworICAgICAgYnMxW25dICs9IChjeSA+PiAxKTsKKyAgICB9CisjZWxzZQorICBpZiAoYnMxW25dID09IDAgJiYgbXBuX2NtcCAoYnMxLCBiMSwgbikgPCAwKQorICAgIHsKKyAgICAgIG1wbl9zdWJfbiAoYnNtMSwgYjEsIGJzMSwgbik7CisgICAgICBic20xW25dID0gMDsKKyAgICAgIGZsYWdzID0gKGVudW0gdG9vbTdfZmxhZ3MpIChmbGFncyBeIHRvb203X3czX25lZyk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgYnNtMVtuXSA9IGJzMVtuXSAtIG1wbl9zdWJfbiAoYnNtMSwgYnMxLCBiMSwgbik7CisgICAgfQorICBiczFbbl0gKz0gbXBuX2FkZF9uIChiczEsIGJzMSwgYjEsIG4pOyAgLyogYjArYjErYjIgKi8KKyNlbmRpZgorCisgIC8qIENvbXB1dGUgYnMyIGFuZCBic20yLiAqLworI2lmIEhBVkVfTkFUSVZFX21wbl9hZGRsc2hfbiB8fCBIQVZFX05BVElWRV9tcG5fYWRkbHNoMl9uCisjaWYgSEFWRV9OQVRJVkVfbXBuX2FkZGxzaDJfbgorICBjeSA9IG1wbl9hZGRsc2gyX24gKGJzMiwgYjAsIGIyLCB0KTsKKyNlbHNlIC8qIEhBVkVfTkFUSVZFX21wbl9hZGRsc2hfbiAqLworICBjeSA9IG1wbl9hZGRsc2hfbiAoYnMyLCBiMCwgYjIsIHQsIDIpOworI2VuZGlmCisgIGlmICh0IDwgbikKKyAgICBjeSA9IG1wbl9hZGRfMSAoYnMyICsgdCwgYjAgKyB0LCBuIC0gdCwgY3kpOworICBiczJbbl0gPSBjeTsKKyNlbHNlCisgIGN5ID0gbXBuX2xzaGlmdCAoZ3AsIGIyLCB0LCAyKTsKKyAgYnMyW25dID0gbXBuX2FkZCAoYnMyLCBiMCwgbiwgZ3AsIHQpOworICBNUE5fSU5DUl9VIChiczIgKyB0LCBuKzEtdCwgY3kpOworI2VuZGlmCisKKyAgZ3Bbbl0gPSBtcG5fbHNoaWZ0IChncCwgYjEsIG4sIDEpOworCisjaWYgSEFWRV9OQVRJVkVfbXBuX2FkZF9uX3N1Yl9uCisgIGlmIChtcG5fY21wIChiczIsIGdwLCBuKzEpIDwgMCkKKyAgICB7CisgICAgICBBU1NFUlRfTk9DQVJSWSAobXBuX2FkZF9uX3N1Yl9uIChiczIsIGJzbTIsIGdwLCBiczIsIG4rMSkpOworICAgICAgZmxhZ3MgPSAoZW51bSB0b29tN19mbGFncykgKGZsYWdzIF4gdG9vbTdfdzFfbmVnKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBBU1NFUlRfTk9DQVJSWSAobXBuX2FkZF9uX3N1Yl9uIChiczIsIGJzbTIsIGJzMiwgZ3AsIG4rMSkpOworICAgIH0KKyNlbHNlCisgIGlmIChtcG5fY21wIChiczIsIGdwLCBuKzEpIDwgMCkKKyAgICB7CisgICAgICBBU1NFUlRfTk9DQVJSWSAobXBuX3N1Yl9uIChic20yLCBncCwgYnMyLCBuKzEpKTsKKyAgICAgIGZsYWdzID0gKGVudW0gdG9vbTdfZmxhZ3MpIChmbGFncyBeIHRvb203X3cxX25lZyk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgQVNTRVJUX05PQ0FSUlkgKG1wbl9zdWJfbiAoYnNtMiwgYnMyLCBncCwgbisxKSk7CisgICAgfQorICBtcG5fYWRkX24gKGJzMiwgYnMyLCBncCwgbisxKTsKKyNlbmRpZgorCisgIC8qIENvbXB1dGUgYnNoID0gNCBiMCArIDIgYjEgKyBiMiA9IDIqKDIqYjAgKyBiMSkrYjIuICAqLworI2lmIEhBVkVfTkFUSVZFX21wbl9hZGRsc2gxX24KKyAgY3kgPSBtcG5fYWRkbHNoMV9uIChic2gsIGIxLCBiMCwgbik7CisgIGlmICh0IDwgbikKKyAgICB7CisgICAgICBtcF9saW1iX3QgY3kyOworICAgICAgY3kyID0gbXBuX2FkZGxzaDFfbiAoYnNoLCBiMiwgYnNoLCB0KTsKKyAgICAgIGJzaFtuXSA9IDIqY3kgKyBtcG5fbHNoaWZ0IChic2ggKyB0LCBic2ggKyB0LCBuIC0gdCwgMSk7CisgICAgICBNUE5fSU5DUl9VIChic2ggKyB0LCBuKzEtdCwgY3kyKTsKKyAgICB9CisgIGVsc2UKKyAgICBic2hbbl0gPSAyKmN5ICsgbXBuX2FkZGxzaDFfbiAoYnNoLCBiMiwgYnNoLCBuKTsKKyNlbHNlCisgIGN5ID0gbXBuX2xzaGlmdCAoYnNoLCBiMCwgbiwgMSk7CisgIGN5ICs9IG1wbl9hZGRfbiAoYnNoLCBic2gsIGIxLCBuKTsKKyAgY3kgPSAyKmN5ICsgbXBuX2xzaGlmdCAoYnNoLCBic2gsIG4sIDEpOworICBic2hbbl0gPSBjeSArIG1wbl9hZGQgKGJzaCwgYnNoLCBuLCBiMiwgdCk7CisjZW5kaWYKKworICBBU1NFUlQgKGFzMVtuXSA8PSA0KTsKKyAgQVNTRVJUIChiczFbbl0gPD0gMik7CisgIEFTU0VSVCAoYXNtMVtuXSA8PSAyKTsKKyAgQVNTRVJUIChic20xW25dIDw9IDEpOworICBBU1NFUlQgKGFzMltuXSA8PSAzMCk7CisgIEFTU0VSVCAoYnMyW25dIDw9IDYpOworICBBU1NFUlQgKGFzbTJbbl0gPD0gMjApOworICBBU1NFUlQgKGJzbTJbbl0gPD0gNCk7CisgIEFTU0VSVCAoYXNoW25dIDw9IDMwKTsKKyAgQVNTRVJUIChic2hbbl0gPD0gNik7CisKKyNkZWZpbmUgdjAgICAgcHAJCQkJLyogMm4gKi8KKyNkZWZpbmUgdjEgICAgKHBwICsgMiAqIG4pCQkJLyogMm4rMSAqLworI2RlZmluZSB2aW5mICAocHAgKyA2ICogbikJCQkvKiBzK3QgKi8KKyNkZWZpbmUgdjIgICAgc2NyYXRjaAkJCQkvKiAybisxICovCisjZGVmaW5lIHZtMiAgIChzY3JhdGNoICsgMiAqIG4gKyAxKQkJLyogMm4rMSAqLworI2RlZmluZSB2aCAgICAoc2NyYXRjaCArIDQgKiBuICsgMikJCS8qIDJuKzEgKi8KKyNkZWZpbmUgdm0xICAgKHNjcmF0Y2ggKyA2ICogbiArIDMpCQkvKiAybisxICovCisjZGVmaW5lIHNjcmF0Y2hfb3V0IChzY3JhdGNoICsgOCAqIG4gKyA0KQkJLyogMm4rMSAqLworICAvKiBUb3RhbCBzY3JhdGNoIG5lZWQ6IDEwKm4rNSAqLworCisgIC8qIE11c3QgYmUgaW4gYWxsb2NhdGlvbiBvcmRlciwgYXMgdGhleSBvdmVyd3JpdGUgb25lIGxpbWIgYmV5b25kCisgICAqIDJuKzEuICovCisgIG1wbl9tdWxfbiAodjIsIGFzMiwgYnMyLCBuICsgMSk7CQkvKiB2MiwgMm4rMSBsaW1icyAqLworICBtcG5fbXVsX24gKHZtMiwgYXNtMiwgYnNtMiwgbiArIDEpOwkJLyogdm0yLCAybisxIGxpbWJzICovCisgIG1wbl9tdWxfbiAodmgsIGFzaCwgYnNoLCBuICsgMSk7CQkvKiB2aCwgMm4rMSBsaW1icyAqLworCisgIC8qIHZtMSwgMm4rMSBsaW1icyAqLworI2lmZGVmIFNNQUxMRVJfUkVDVVJTSU9OCisgIG1wbl9tdWxfbiAodm0xLCBhc20xLCBic20xLCBuKTsKKyAgaWYgKGFzbTFbbl0gPT0gMSkKKyAgICB7CisgICAgICBjeSA9IGJzbTFbbl0gKyBtcG5fYWRkX24gKHZtMSArIG4sIHZtMSArIG4sIGJzbTEsIG4pOworICAgIH0KKyAgZWxzZSBpZiAoYXNtMVtuXSA9PSAyKQorICAgIHsKKyNpZiBIQVZFX05BVElWRV9tcG5fYWRkbHNoMV9uX2lwMQorICAgICAgY3kgPSAyICogYnNtMVtuXSArIG1wbl9hZGRsc2gxX25faXAxICh2bTEgKyBuLCBic20xLCBuKTsKKyNlbHNlCisgICAgICBjeSA9IDIgKiBic20xW25dICsgbXBuX2FkZG11bF8xICh2bTEgKyBuLCBic20xLCBuLCBDTlNUX0xJTUIoMikpOworI2VuZGlmCisgICAgfQorICBlbHNlCisgICAgY3kgPSAwOworICBpZiAoYnNtMVtuXSAhPSAwKQorICAgIGN5ICs9IG1wbl9hZGRfbiAodm0xICsgbiwgdm0xICsgbiwgYXNtMSwgbik7CisgIHZtMVsyICogbl0gPSBjeTsKKyNlbHNlIC8qIFNNQUxMRVJfUkVDVVJTSU9OICovCisgIHZtMVsyICogbl0gPSAwOworICBtcG5fbXVsX24gKHZtMSwgYXNtMSwgYnNtMSwgbiArICgoYXNtMVtuXSB8IGJzbTFbbl0pICE9IDApKTsKKyNlbmRpZiAvKiBTTUFMTEVSX1JFQ1VSU0lPTiAqLworCisgIC8qIHYxLCAybisxIGxpbWJzICovCisjaWZkZWYgU01BTExFUl9SRUNVUlNJT04KKyAgbXBuX211bF9uICh2MSwgYXMxLCBiczEsIG4pOworICBpZiAoYXMxW25dID09IDEpCisgICAgeworICAgICAgY3kgPSBiczFbbl0gKyBtcG5fYWRkX24gKHYxICsgbiwgdjEgKyBuLCBiczEsIG4pOworICAgIH0KKyAgZWxzZSBpZiAoYXMxW25dID09IDIpCisgICAgeworI2lmIEhBVkVfTkFUSVZFX21wbl9hZGRsc2gxX25faXAxCisgICAgICBjeSA9IDIgKiBiczFbbl0gKyBtcG5fYWRkbHNoMV9uX2lwMSAodjEgKyBuLCBiczEsIG4pOworI2Vsc2UKKyAgICAgIGN5ID0gMiAqIGJzMVtuXSArIG1wbl9hZGRtdWxfMSAodjEgKyBuLCBiczEsIG4sIENOU1RfTElNQigyKSk7CisjZW5kaWYKKyAgICB9CisgIGVsc2UgaWYgKGFzMVtuXSAhPSAwKQorICAgIHsKKyAgICAgIGN5ID0gYXMxW25dICogYnMxW25dICsgbXBuX2FkZG11bF8xICh2MSArIG4sIGJzMSwgbiwgYXMxW25dKTsKKyAgICB9CisgIGVsc2UKKyAgICBjeSA9IDA7CisgIGlmIChiczFbbl0gPT0gMSkKKyAgICB7CisgICAgICBjeSArPSBtcG5fYWRkX24gKHYxICsgbiwgdjEgKyBuLCBhczEsIG4pOworICAgIH0KKyAgZWxzZSBpZiAoYnMxW25dID09IDIpCisgICAgeworI2lmIEhBVkVfTkFUSVZFX21wbl9hZGRsc2gxX25faXAxCisgICAgICBjeSArPSBtcG5fYWRkbHNoMV9uX2lwMSAodjEgKyBuLCBhczEsIG4pOworI2Vsc2UKKyAgICAgIGN5ICs9IG1wbl9hZGRtdWxfMSAodjEgKyBuLCBhczEsIG4sIENOU1RfTElNQigyKSk7CisjZW5kaWYKKyAgICB9CisgIHYxWzIgKiBuXSA9IGN5OworI2Vsc2UgLyogU01BTExFUl9SRUNVUlNJT04gKi8KKyAgdjFbMiAqIG5dID0gMDsKKyAgbXBuX211bF9uICh2MSwgYXMxLCBiczEsIG4gKyAoKGFzMVtuXSB8IGJzMVtuXSkgIT0gMCkpOworI2VuZGlmIC8qIFNNQUxMRVJfUkVDVVJTSU9OICovCisKKyAgbXBuX211bF9uICh2MCwgYTAsIGIwLCBuKTsJCQkvKiB2MCwgMm4gbGltYnMgKi8KKworICAvKiB2aW5mLCBzK3QgbGltYnMgKi8KKyAgaWYgKHMgPiB0KSAgbXBuX211bCAodmluZiwgYTQsIHMsIGIyLCB0KTsKKyAgZWxzZSAgICAgICAgbXBuX211bCAodmluZiwgYjIsIHQsIGE0LCBzKTsKKworICBtcG5fdG9vbV9pbnRlcnBvbGF0ZV83cHRzIChwcCwgbiwgZmxhZ3MsIHZtMiwgdm0xLCB2MiwgdmgsIHMgKyB0LAorCQkJICAgICBzY3JhdGNoX291dCk7CisKKyAgVE1QX0ZSRUU7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvdG9vbTU0X211bC5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Rvb201NF9tdWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDNiMDJlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Rvb201NF9tdWwuYwpAQCAtMCwwICsxLDE0MiBAQAorLyogSW1wbGVtZW50YXRpb24gb2YgdGhlIGFsZ29yaXRobSBmb3IgVG9vbS1Db29rIDQuNS13YXkuCisKKyAgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBNYXJjbyBCb2RyYXRvLgorCisgICBUSEUgRlVOQ1RJT04gSU4gVEhJUyBGSUxFIElTIElOVEVSTkFMIFdJVEggQSBNVVRBQkxFIElOVEVSRkFDRS4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggSVQgVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuICBJTiBGQUNULCBJVCBJUyBBTE1PU1QKKyAgIEdVQVJBTlRFRUQgVEhBVCBJVCBXSUxMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR05VIE1QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAyMDA5LCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworCisvKiBUb29tLTQuNSwgdGhlIHNwbGl0dGluZyA1eDQgdW5iYWxhbmNlZCB2ZXJzaW9uLgorICAgRXZhbHVhdGUgaW46IGluZmluaXR5LCArNCwgLTQsICsyLCAtMiwgKzEsIC0xLCAwLgorCisgIDwtLXMtPjwtLW4tLT48LS1uLS0+PC0tbi0tPjwtLW4tLT4KKyAgIF9fX18gX19fX19fIF9fX19fXyBfX19fX18gX19fX19fCisgIHxfYTRffF9fYTNfX3xfX2EyX198X19hMV9ffF9fYTBfX3wKKwkgIHxiM198X19iMl9ffF9fYjFfX3xfX2IwX198CisJICA8LXQtPjwtLW4tLT48LS1uLS0+PC0tbi0tPgorCisqLworI2RlZmluZSBUT09NXzU0X01VTF9OX1JFQyhwLCBhLCBiLCBuLCB3cykJCVwKKyAgZG8gewltcG5fbXVsX24gKHAsIGEsIGIsIG4pOwkJCQlcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgVE9PTV81NF9NVUxfUkVDKHAsIGEsIG5hLCBiLCBuYiwgd3MpCQlcCisgIGRvIHsJbXBuX211bCAocCwgYSwgbmEsIGIsIG5iKTsJCQlcCisgIH0gd2hpbGUgKDApCisKK3ZvaWQKK21wbl90b29tNTRfbXVsIChtcF9wdHIgcHAsCisJCW1wX3NyY3B0ciBhcCwgbXBfc2l6ZV90IGFuLAorCQltcF9zcmNwdHIgYnAsIG1wX3NpemVfdCBibiwgbXBfcHRyIHNjcmF0Y2gpCit7CisgIG1wX3NpemVfdCBuLCBzLCB0OworICBpbnQgc2lnbjsKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogZGVjb21wb3NpdGlvbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBhNCAgKGFwICsgNCAqIG4pCisjZGVmaW5lIGIzICAoYnAgKyAzICogbikKKworICBBU1NFUlQgKGFuID49IGJuKTsKKyAgbiA9IDEgKyAoNCAqIGFuID49IDUgKiBibiA/IChhbiAtIDEpIC8gKHNpemVfdCkgNSA6IChibiAtIDEpIC8gKHNpemVfdCkgNCk7CisKKyAgcyA9IGFuIC0gNCAqIG47CisgIHQgPSBibiAtIDMgKiBuOworCisgIEFTU0VSVCAoMCA8IHMgJiYgcyA8PSBuKTsKKyAgQVNTRVJUICgwIDwgdCAmJiB0IDw9IG4pOworICAvKiBSZXF1aXJlZCBieSBtcG5fdG9vbV9pbnRlcnBvbGF0ZV84cHRzLiAqLworICBBU1NFUlQgKCBzICsgdCA+PSBuICk7CisgIEFTU0VSVCAoIHMgKyB0ID4gNCk7CisgIEFTU0VSVCAoIG4gPiAyKTsKKworI2RlZmluZSAgIHI4ICAgIHBwCQkJCS8qIDJuICAgKi8KKyNkZWZpbmUgICByNyAgICBzY3JhdGNoCQkJCS8qIDNuKzEgKi8KKyNkZWZpbmUgICByNSAgICAocHAgKyAzKm4pCQkJLyogM24rMSAqLworI2RlZmluZSAgIHYwICAgIChwcCArIDMqbikJCQkvKiBuKzEgKi8KKyNkZWZpbmUgICB2MSAgICAocHAgKyA0Km4rMSkJCQkvKiBuKzEgKi8KKyNkZWZpbmUgICB2MiAgICAocHAgKyA1Km4rMikJCQkvKiBuKzEgKi8KKyNkZWZpbmUgICB2MyAgICAocHAgKyA2Km4rMykJCQkvKiBuKzEgKi8KKyNkZWZpbmUgICByMyAgICAoc2NyYXRjaCArIDMgKiBuICsgMSkJCS8qIDNuKzEgKi8KKyNkZWZpbmUgICByMSAgICAocHAgKyA3Km4pCQkJLyogcyt0IDw9IDIqbiAqLworI2RlZmluZSAgIHdzICAgIChzY3JhdGNoICsgNiAqIG4gKyAyKQkJLyogPz8/ICovCisKKyAgLyogQWxsb2MgYWxzbyAzbisxIGxpbWJzIGZvciB3cy4uLiBtcG5fdG9vbV9pbnRlcnBvbGF0ZV84cHRzIG1heQorICAgICBuZWVkIGFsbCBvZiB0aGVtLCB3aGVuIERPX21wbl9zdWJsc2hfbiB1c2VhIGEgc2NyYXRjaCAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKiogZXZhbHVhdGlvbiBhbmQgcmVjdXJzaXZlIGNhbGxzICoqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogJFxwbTQkICovCisgIHNpZ24gPSBtcG5fdG9vbV9ldmFsX3BtMmV4cCAodjIsIHYwLCA0LCBhcCwgbiwgcywgMiwgcHApCisgICAgICAgXiBtcG5fdG9vbV9ldmFsX3BtMmV4cCAodjMsIHYxLCAzLCBicCwgbiwgdCwgMiwgcHApOworICBUT09NXzU0X01VTF9OX1JFQyhwcCwgdjAsIHYxLCBuICsgMSwgd3MpOyAvKiBBKC00KSpCKC00KSAqLworICBUT09NXzU0X01VTF9OX1JFQyhyMywgdjIsIHYzLCBuICsgMSwgd3MpOyAvKiBBKCs0KSpCKCs0KSAqLworICBtcG5fdG9vbV9jb3VwbGVfaGFuZGxpbmcgKHIzLCAyKm4rMSwgcHAsIHNpZ24sIG4sIDIsIDQpOworCisgIC8qICRccG0xJCAqLworICBzaWduID0gbXBuX3Rvb21fZXZhbF9wbTEgKHYyLCB2MCwgNCwgYXAsIG4sIHMsICAgIHBwKQorICAgICAgIF4gbXBuX3Rvb21fZXZhbF9kZ3IzX3BtMSAodjMsIHYxLCBicCwgbiwgdCwgICAgcHApOworICBUT09NXzU0X01VTF9OX1JFQyhwcCwgdjAsIHYxLCBuICsgMSwgd3MpOyAvKiBBKC0xKSpCKC0xKSAqLworICBUT09NXzU0X01VTF9OX1JFQyhyNywgdjIsIHYzLCBuICsgMSwgd3MpOyAvKiBBKDEpKkIoMSkgKi8KKyAgbXBuX3Rvb21fY291cGxlX2hhbmRsaW5nIChyNywgMipuKzEsIHBwLCBzaWduLCBuLCAwLCAwKTsKKworICAvKiAkXHBtMiQgKi8KKyAgc2lnbiA9IG1wbl90b29tX2V2YWxfcG0yICh2MiwgdjAsIDQsIGFwLCBuLCBzLCBwcCkKKyAgICAgICBeIG1wbl90b29tX2V2YWxfZGdyM19wbTIgKHYzLCB2MSwgYnAsIG4sIHQsIHBwKTsKKyAgVE9PTV81NF9NVUxfTl9SRUMocHAsIHYwLCB2MSwgbiArIDEsIHdzKTsgLyogQSgtMikqQigtMikgKi8KKyAgVE9PTV81NF9NVUxfTl9SRUMocjUsIHYyLCB2MywgbiArIDEsIHdzKTsgLyogQSgrMikqQigrMikgKi8KKyAgbXBuX3Rvb21fY291cGxlX2hhbmRsaW5nIChyNSwgMipuKzEsIHBwLCBzaWduLCBuLCAxLCAyKTsKKworICAvKiBBKDApKkIoMCkgKi8KKyAgVE9PTV81NF9NVUxfTl9SRUMocHAsIGFwLCBicCwgbiwgd3MpOworCisgIC8qIEluZmluaXR5ICovCisgIGlmIChzID4gdCkgeworICAgIFRPT01fNTRfTVVMX1JFQyhyMSwgYTQsIHMsIGIzLCB0LCB3cyk7CisgIH0gZWxzZSB7CisgICAgVE9PTV81NF9NVUxfUkVDKHIxLCBiMywgdCwgYTQsIHMsIHdzKTsKKyAgfTsKKworICBtcG5fdG9vbV9pbnRlcnBvbGF0ZV84cHRzIChwcCwgbiwgcjMsIHI3LCBzICsgdCwgd3MpOworCisjdW5kZWYgYTQKKyN1bmRlZiBiMworI3VuZGVmIHIxCisjdW5kZWYgcjMKKyN1bmRlZiByNQorI3VuZGVmIHYwCisjdW5kZWYgdjEKKyN1bmRlZiB2MgorI3VuZGVmIHYzCisjdW5kZWYgcjcKKyN1bmRlZiByOAorI3VuZGVmIHdzCit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvdG9vbTYyX211bC5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Rvb202Ml9tdWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTcxY2MwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Rvb202Ml9tdWwuYwpAQCAtMCwwICsxLDMxMCBAQAorLyogbXBuX3Rvb202Ml9tdWwgLS0gTXVsdGlwbHkge2FwLGFufSBhbmQge2JwLGJufSB3aGVyZSBhbiBpcyBub21pbmFsbHkgMyB0aW1lcworICAgYXMgbGFyZ2UgYXMgYm4uICBPciBtb3JlIGFjY3VyYXRlbHksICg1LzIpYm4gPCBhbiA8IDZibi4KKworICAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqb3JuIEdyYW5sdW5kIGFuZCBNYXJjbyBCb2RyYXRvLgorCisgICBUaGUgaWRlYSBvZiBhcHBseWluZyB0b29tIHRvIHVuYmFsYW5jZWQgbXVsdGlwbGljYXRpb24gaXMgZHVlIHRvIE1hcmNvCisgICBCb2RyYXRvIGFuZCBBbGJlcnRvIFphbm9uaS4KKworICAgVEhFIEZVTkNUSU9OIElOIFRISVMgRklMRSBJUyBJTlRFUk5BTCBXSVRIIEEgTVVUQUJMRSBJTlRFUkZBQ0UuICBJVCBJUyBPTkxZCisgICBTQUZFIFRPIFJFQUNIIElUIFRIUk9VR0ggRE9DVU1FTlRFRCBJTlRFUkZBQ0VTLiAgSU4gRkFDVCwgSVQgSVMgQUxNT1NUCisgICBHVUFSQU5URUVEIFRIQVQgSVQgV0lMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEgRlVUVVJFIEdOVSBNUCBSRUxFQVNFLgorCitDb3B5cmlnaHQgMjAwNi0yMDA4LCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCisvKiBFdmFsdWF0ZSBpbjoKKyAgIDAsICsxLCAtMSwgKzIsIC0yLCAxLzIsICtpbmYKKworICA8LXMtPjwtLW4tLT48LS1uLS0+PC0tbi0tPjwtLW4tLT48LS1uLS0+CisgICBfX18gX19fX19fIF9fX19fXyBfX19fX18gX19fX19fIF9fX19fXworICB8YTVffF9fX2E0X3xfX19hM198X19fYTJffF9fX2ExX3xfX19hMF98CisJCQkgICAgIHxfYjFffF9fX2IwX3wKKwkJCSAgICAgPC10LS0+PC0tbi0tPgorCisgIHYwICA9ICAgIGEwICAgICAgICAgICAgICAgICAgICAgICAqICAgYjAgICAgICAjICAgIEEoMCkqQigwKQorICB2MSAgPSAoICBhMCsgIGExKyBhMisgYTMrICBhNCsgIGE1KSooIGIwKyBiMSkgIyAgICBBKDEpKkIoMSkgICAgICBhaCAgPD0gNSAgIGJoIDw9IDEKKyAgdm0xID0gKCAgYTAtICBhMSsgYTItIGEzKyAgYTQtICBhNSkqKCBiMC0gYjEpICMgICBBKC0xKSpCKC0xKSAgICB8YWh8IDw9IDIgICBiaCAgPSAwCisgIHYyICA9ICggIGEwKyAyYTErNGEyKzhhMysxNmE0KzMyYTUpKiggYjArMmIxKSAjICAgIEEoMikqQigyKSAgICAgIGFoICA8PSA2MiAgYmggPD0gMgorICB2bTIgPSAoICBhMC0gMmExKzRhMi04YTMrMTZhNC0zMmE1KSooIGIwLTJiMSkgIyAgIEEoLTIpKkIoLTIpICAgIC00MTw9YWg8PTIwIC0xPD1iaDw9MAorICB2aCAgPSAoMzJhMCsxNmExKzhhMis0YTMrIDJhNCsgIGE1KSooMmIwKyBiMSkgIyAgQSgxLzIpKkIoMS8yKSAgICBhaCAgPD0gNjIgIGJoIDw9IDIKKyAgdmluZj0gICAgICAgICAgICAgICAgICAgICAgICAgICBhNSAqICAgICAgYjEgICMgIEEoaW5mKSpCKGluZikKKyovCisKK3ZvaWQKK21wbl90b29tNjJfbXVsIChtcF9wdHIgcHAsCisJCW1wX3NyY3B0ciBhcCwgbXBfc2l6ZV90IGFuLAorCQltcF9zcmNwdHIgYnAsIG1wX3NpemVfdCBibiwKKwkJbXBfcHRyIHNjcmF0Y2gpCit7CisgIG1wX3NpemVfdCBuLCBzLCB0OworICBtcF9saW1iX3QgY3k7CisgIG1wX3B0ciBhczEsIGFzbTEsIGFzMiwgYXNtMiwgYXNoOworICBtcF9wdHIgYnMxLCBic20xLCBiczIsIGJzbTIsIGJzaDsKKyAgbXBfcHRyIGdwOworICBlbnVtIHRvb203X2ZsYWdzIGFmbGFncywgYmZsYWdzOworICBUTVBfREVDTDsKKworI2RlZmluZSBhMCAgYXAKKyNkZWZpbmUgYTEgIChhcCArIG4pCisjZGVmaW5lIGEyICAoYXAgKyAyKm4pCisjZGVmaW5lIGEzICAoYXAgKyAzKm4pCisjZGVmaW5lIGE0ICAoYXAgKyA0Km4pCisjZGVmaW5lIGE1ICAoYXAgKyA1Km4pCisjZGVmaW5lIGIwICBicAorI2RlZmluZSBiMSAgKGJwICsgbikKKworICBuID0gMSArIChhbiA+PSAzICogYm4gPyAoYW4gLSAxKSAvIChzaXplX3QpIDYgOiAoYm4gLSAxKSA+PiAxKTsKKworICBzID0gYW4gLSA1ICogbjsKKyAgdCA9IGJuIC0gbjsKKworICBBU1NFUlQgKDAgPCBzICYmIHMgPD0gbik7CisgIEFTU0VSVCAoMCA8IHQgJiYgdCA8PSBuKTsKKworICBUTVBfTUFSSzsKKworICBhczEgPSBUTVBfU0FMTE9DX0xJTUJTIChuICsgMSk7CisgIGFzbTEgPSBUTVBfU0FMTE9DX0xJTUJTIChuICsgMSk7CisgIGFzMiA9IFRNUF9TQUxMT0NfTElNQlMgKG4gKyAxKTsKKyAgYXNtMiA9IFRNUF9TQUxMT0NfTElNQlMgKG4gKyAxKTsKKyAgYXNoID0gVE1QX1NBTExPQ19MSU1CUyAobiArIDEpOworCisgIGJzMSA9IFRNUF9TQUxMT0NfTElNQlMgKG4gKyAxKTsKKyAgYnNtMSA9IFRNUF9TQUxMT0NfTElNQlMgKG4pOworICBiczIgPSBUTVBfU0FMTE9DX0xJTUJTIChuICsgMSk7CisgIGJzbTIgPSBUTVBfU0FMTE9DX0xJTUJTIChuICsgMSk7CisgIGJzaCA9IFRNUF9TQUxMT0NfTElNQlMgKG4gKyAxKTsKKworICBncCA9IHBwOworCisgIC8qIENvbXB1dGUgYXMxIGFuZCBhc20xLiAgKi8KKyAgYWZsYWdzID0gKGVudW0gdG9vbTdfZmxhZ3MpICh0b29tN193M19uZWcgJiBtcG5fdG9vbV9ldmFsX3BtMSAoYXMxLCBhc20xLCA1LCBhcCwgbiwgcywgZ3ApKTsKKworICAvKiBDb21wdXRlIGFzMiBhbmQgYXNtMi4gKi8KKyAgYWZsYWdzID0gKGVudW0gdG9vbTdfZmxhZ3MpIChhZmxhZ3MgfCAodG9vbTdfdzFfbmVnICYgbXBuX3Rvb21fZXZhbF9wbTIgKGFzMiwgYXNtMiwgNSwgYXAsIG4sIHMsIGdwKSkpOworCisgIC8qIENvbXB1dGUgYXNoID0gMzIgYTAgKyAxNiBhMSArIDggYTIgKyA0IGEzICsgMiBhNCArIGE1CisgICAgID0gMiooMiooMiooMiooMiphMCArIGExKSArIGEyKSArIGEzKSArIGE0KSArIGE1ICAqLworCisjaWYgSEFWRV9OQVRJVkVfbXBuX2FkZGxzaDFfbgorICBjeSA9IG1wbl9hZGRsc2gxX24gKGFzaCwgYTEsIGEwLCBuKTsKKyAgY3kgPSAyKmN5ICsgbXBuX2FkZGxzaDFfbiAoYXNoLCBhMiwgYXNoLCBuKTsKKyAgY3kgPSAyKmN5ICsgbXBuX2FkZGxzaDFfbiAoYXNoLCBhMywgYXNoLCBuKTsKKyAgY3kgPSAyKmN5ICsgbXBuX2FkZGxzaDFfbiAoYXNoLCBhNCwgYXNoLCBuKTsKKyAgaWYgKHMgPCBuKQorICAgIHsKKyAgICAgIG1wX2xpbWJfdCBjeTI7CisgICAgICBjeTIgPSBtcG5fYWRkbHNoMV9uIChhc2gsIGE1LCBhc2gsIHMpOworICAgICAgYXNoW25dID0gMipjeSArIG1wbl9sc2hpZnQgKGFzaCArIHMsIGFzaCArIHMsIG4gLSBzLCAxKTsKKyAgICAgIE1QTl9JTkNSX1UgKGFzaCArIHMsIG4rMS1zLCBjeTIpOworICAgIH0KKyAgZWxzZQorICAgIGFzaFtuXSA9IDIqY3kgKyBtcG5fYWRkbHNoMV9uIChhc2gsIGE1LCBhc2gsIG4pOworI2Vsc2UKKyAgY3kgPSBtcG5fbHNoaWZ0IChhc2gsIGEwLCBuLCAxKTsKKyAgY3kgKz0gbXBuX2FkZF9uIChhc2gsIGFzaCwgYTEsIG4pOworICBjeSA9IDIqY3kgKyBtcG5fbHNoaWZ0IChhc2gsIGFzaCwgbiwgMSk7CisgIGN5ICs9IG1wbl9hZGRfbiAoYXNoLCBhc2gsIGEyLCBuKTsKKyAgY3kgPSAyKmN5ICsgbXBuX2xzaGlmdCAoYXNoLCBhc2gsIG4sIDEpOworICBjeSArPSBtcG5fYWRkX24gKGFzaCwgYXNoLCBhMywgbik7CisgIGN5ID0gMipjeSArIG1wbl9sc2hpZnQgKGFzaCwgYXNoLCBuLCAxKTsKKyAgY3kgKz0gbXBuX2FkZF9uIChhc2gsIGFzaCwgYTQsIG4pOworICBjeSA9IDIqY3kgKyBtcG5fbHNoaWZ0IChhc2gsIGFzaCwgbiwgMSk7CisgIGFzaFtuXSA9IGN5ICsgbXBuX2FkZCAoYXNoLCBhc2gsIG4sIGE1LCBzKTsKKyNlbmRpZgorCisgIC8qIENvbXB1dGUgYnMxIGFuZCBic20xLiAgKi8KKyAgaWYgKHQgPT0gbikKKyAgICB7CisjaWYgSEFWRV9OQVRJVkVfbXBuX2FkZF9uX3N1Yl9uCisgICAgICBpZiAobXBuX2NtcCAoYjAsIGIxLCBuKSA8IDApCisJeworCSAgY3kgPSBtcG5fYWRkX25fc3ViX24gKGJzMSwgYnNtMSwgYjEsIGIwLCBuKTsKKwkgIGJmbGFncyA9IHRvb203X3czX25lZzsKKwl9CisgICAgICBlbHNlCisJeworCSAgY3kgPSBtcG5fYWRkX25fc3ViX24gKGJzMSwgYnNtMSwgYjAsIGIxLCBuKTsKKwkgIGJmbGFncyA9IChlbnVtIHRvb203X2ZsYWdzKSAwOworCX0KKyAgICAgIGJzMVtuXSA9IGN5ID4+IDE7CisjZWxzZQorICAgICAgYnMxW25dID0gbXBuX2FkZF9uIChiczEsIGIwLCBiMSwgbik7CisgICAgICBpZiAobXBuX2NtcCAoYjAsIGIxLCBuKSA8IDApCisJeworCSAgbXBuX3N1Yl9uIChic20xLCBiMSwgYjAsIG4pOworCSAgYmZsYWdzID0gdG9vbTdfdzNfbmVnOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBtcG5fc3ViX24gKGJzbTEsIGIwLCBiMSwgbik7CisJICBiZmxhZ3MgPSAoZW51bSB0b29tN19mbGFncykgMDsKKwl9CisjZW5kaWYKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBiczFbbl0gPSBtcG5fYWRkIChiczEsIGIwLCBuLCBiMSwgdCk7CisgICAgICBpZiAobXBuX3plcm9fcCAoYjAgKyB0LCBuIC0gdCkgJiYgbXBuX2NtcCAoYjAsIGIxLCB0KSA8IDApCisJeworCSAgbXBuX3N1Yl9uIChic20xLCBiMSwgYjAsIHQpOworCSAgTVBOX1pFUk8gKGJzbTEgKyB0LCBuIC0gdCk7CisJICBiZmxhZ3MgPSB0b29tN193M19uZWc7CisJfQorICAgICAgZWxzZQorCXsKKwkgIG1wbl9zdWIgKGJzbTEsIGIwLCBuLCBiMSwgdCk7CisJICBiZmxhZ3MgPSAoZW51bSB0b29tN19mbGFncykgMDsKKwl9CisgICAgfQorCisgIC8qIENvbXB1dGUgYnMyIGFuZCBic20yLiBSZWN5Y2xpbmcgYnMxIGFuZCBic20xOyBiczI9YnMxK2IxLCBic20yID0KKyAgICAgYnNtMSAtIGIxICovCisgIG1wbl9hZGQgKGJzMiwgYnMxLCBuICsgMSwgYjEsIHQpOworICBpZiAoYmZsYWdzICYgdG9vbTdfdzNfbmVnKQorICAgIHsKKyAgICAgIGJzbTJbbl0gPSBtcG5fYWRkIChic20yLCBic20xLCBuLCBiMSwgdCk7CisgICAgICBiZmxhZ3MgPSAoZW51bSB0b29tN19mbGFncykgKGJmbGFncyB8IHRvb203X3cxX25lZyk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogRklYTUU6IFNpbXBsaWZ5IHRoaXMgbG9naWM/ICovCisgICAgICBpZiAodCA8IG4pCisJeworCSAgaWYgKG1wbl96ZXJvX3AgKGJzbTEgKyB0LCBuIC0gdCkgJiYgbXBuX2NtcCAoYnNtMSwgYjEsIHQpIDwgMCkKKwkgICAgeworCSAgICAgIEFTU0VSVF9OT0NBUlJZIChtcG5fc3ViX24gKGJzbTIsIGIxLCBic20xLCB0KSk7CisJICAgICAgTVBOX1pFUk8gKGJzbTIgKyB0LCBuICsgMSAtIHQpOworCSAgICAgIGJmbGFncyA9IChlbnVtIHRvb203X2ZsYWdzKSAoYmZsYWdzIHwgdG9vbTdfdzFfbmVnKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgQVNTRVJUX05PQ0FSUlkgKG1wbl9zdWIgKGJzbTIsIGJzbTEsIG4sIGIxLCB0KSk7CisJICAgICAgYnNtMltuXSA9IDA7CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJeworCSAgaWYgKG1wbl9jbXAgKGJzbTEsIGIxLCBuKSA8IDApCisJICAgIHsKKwkgICAgICBBU1NFUlRfTk9DQVJSWSAobXBuX3N1Yl9uIChic20yLCBiMSwgYnNtMSwgbikpOworCSAgICAgIGJmbGFncyA9IChlbnVtIHRvb203X2ZsYWdzKSAoYmZsYWdzIHwgdG9vbTdfdzFfbmVnKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgQVNTRVJUX05PQ0FSUlkgKG1wbl9zdWJfbiAoYnNtMiwgYnNtMSwgYjEsIG4pKTsKKwkgICAgfQorCSAgYnNtMltuXSA9IDA7CisJfQorICAgIH0KKworICAvKiBDb21wdXRlIGJzaCwgcmVjeWNsaW5nIGJzMS4gYnNoPWJzMStiMDsgICovCisgIGJzaFtuXSA9IGJzMVtuXSArIG1wbl9hZGRfbiAoYnNoLCBiczEsIGIwLCBuKTsKKworICBBU1NFUlQgKGFzMVtuXSA8PSA1KTsKKyAgQVNTRVJUIChiczFbbl0gPD0gMSk7CisgIEFTU0VSVCAoYXNtMVtuXSA8PSAyKTsKKyAgQVNTRVJUIChhczJbbl0gPD0gNjIpOworICBBU1NFUlQgKGJzMltuXSA8PSAyKTsKKyAgQVNTRVJUIChhc20yW25dIDw9IDQxKTsKKyAgQVNTRVJUIChic20yW25dIDw9IDEpOworICBBU1NFUlQgKGFzaFtuXSA8PSA2Mik7CisgIEFTU0VSVCAoYnNoW25dIDw9IDIpOworCisjZGVmaW5lIHYwICAgIHBwCQkJCS8qIDJuICovCisjZGVmaW5lIHYxICAgIChwcCArIDIgKiBuKQkJCS8qIDJuKzEgKi8KKyNkZWZpbmUgdmluZiAgKHBwICsgNiAqIG4pCQkJLyogcyt0ICovCisjZGVmaW5lIHYyICAgIHNjcmF0Y2gJCQkJLyogMm4rMSAqLworI2RlZmluZSB2bTIgICAoc2NyYXRjaCArIDIgKiBuICsgMSkJCS8qIDJuKzEgKi8KKyNkZWZpbmUgdmggICAgKHNjcmF0Y2ggKyA0ICogbiArIDIpCQkvKiAybisxICovCisjZGVmaW5lIHZtMSAgIChzY3JhdGNoICsgNiAqIG4gKyAzKQkJLyogMm4rMSAqLworI2RlZmluZSBzY3JhdGNoX291dCAoc2NyYXRjaCArIDggKiBuICsgNCkJCS8qIDJuKzEgKi8KKyAgLyogVG90YWwgc2NyYXRjaCBuZWVkOiAxMCpuKzUgKi8KKworICAvKiBNdXN0IGJlIGluIGFsbG9jYXRpb24gb3JkZXIsIGFzIHRoZXkgb3ZlcndyaXRlIG9uZSBsaW1iIGJleW9uZAorICAgKiAybisxLiAqLworICBtcG5fbXVsX24gKHYyLCBhczIsIGJzMiwgbiArIDEpOwkJLyogdjIsIDJuKzEgbGltYnMgKi8KKyAgbXBuX211bF9uICh2bTIsIGFzbTIsIGJzbTIsIG4gKyAxKTsJCS8qIHZtMiwgMm4rMSBsaW1icyAqLworICBtcG5fbXVsX24gKHZoLCBhc2gsIGJzaCwgbiArIDEpOwkJLyogdmgsIDJuKzEgbGltYnMgKi8KKworICAvKiB2bTEsIDJuKzEgbGltYnMgKi8KKyAgbXBuX211bF9uICh2bTEsIGFzbTEsIGJzbTEsIG4pOworICBjeSA9IDA7CisgIGlmIChhc20xW25dID09IDEpCisgICAgeworICAgICAgY3kgPSBtcG5fYWRkX24gKHZtMSArIG4sIHZtMSArIG4sIGJzbTEsIG4pOworICAgIH0KKyAgZWxzZSBpZiAoYXNtMVtuXSA9PSAyKQorICAgIHsKKyNpZiBIQVZFX05BVElWRV9tcG5fYWRkbHNoMV9uCisgICAgICBjeSA9IG1wbl9hZGRsc2gxX24gKHZtMSArIG4sIHZtMSArIG4sIGJzbTEsIG4pOworI2Vsc2UKKyAgICAgIGN5ID0gbXBuX2FkZG11bF8xICh2bTEgKyBuLCBic20xLCBuLCBDTlNUX0xJTUIoMikpOworI2VuZGlmCisgICAgfQorICB2bTFbMiAqIG5dID0gY3k7CisKKyAgLyogdjEsIDJuKzEgbGltYnMgKi8KKyAgbXBuX211bF9uICh2MSwgYXMxLCBiczEsIG4pOworICBpZiAoYXMxW25dID09IDEpCisgICAgeworICAgICAgY3kgPSBiczFbbl0gKyBtcG5fYWRkX24gKHYxICsgbiwgdjEgKyBuLCBiczEsIG4pOworICAgIH0KKyAgZWxzZSBpZiAoYXMxW25dID09IDIpCisgICAgeworI2lmIEhBVkVfTkFUSVZFX21wbl9hZGRsc2gxX24KKyAgICAgIGN5ID0gMiAqIGJzMVtuXSArIG1wbl9hZGRsc2gxX24gKHYxICsgbiwgdjEgKyBuLCBiczEsIG4pOworI2Vsc2UKKyAgICAgIGN5ID0gMiAqIGJzMVtuXSArIG1wbl9hZGRtdWxfMSAodjEgKyBuLCBiczEsIG4sIENOU1RfTElNQigyKSk7CisjZW5kaWYKKyAgICB9CisgIGVsc2UgaWYgKGFzMVtuXSAhPSAwKQorICAgIHsKKyAgICAgIGN5ID0gYXMxW25dICogYnMxW25dICsgbXBuX2FkZG11bF8xICh2MSArIG4sIGJzMSwgbiwgYXMxW25dKTsKKyAgICB9CisgIGVsc2UKKyAgICBjeSA9IDA7CisgIGlmIChiczFbbl0gIT0gMCkKKyAgICBjeSArPSBtcG5fYWRkX24gKHYxICsgbiwgdjEgKyBuLCBhczEsIG4pOworICB2MVsyICogbl0gPSBjeTsKKworICBtcG5fbXVsX24gKHYwLCBhMCwgYjAsIG4pOwkJCS8qIHYwLCAybiBsaW1icyAqLworCisgIC8qIHZpbmYsIHMrdCBsaW1icyAqLworICBpZiAocyA+IHQpICBtcG5fbXVsICh2aW5mLCBhNSwgcywgYjEsIHQpOworICBlbHNlICAgICAgICBtcG5fbXVsICh2aW5mLCBiMSwgdCwgYTUsIHMpOworCisgIG1wbl90b29tX2ludGVycG9sYXRlXzdwdHMgKHBwLCBuLCAoZW51bSB0b29tN19mbGFncykgKGFmbGFncyBeIGJmbGFncyksCisJCQkgICAgIHZtMiwgdm0xLCB2MiwgdmgsIHMgKyB0LCBzY3JhdGNoX291dCk7CisKKyAgVE1QX0ZSRUU7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvdG9vbTYzX211bC5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Rvb202M19tdWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODE5OTZkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Rvb202M19tdWwuYwpAQCAtMCwwICsxLDIzMSBAQAorLyogSW1wbGVtZW50YXRpb24gb2YgdGhlIGFsZ29yaXRobSBmb3IgVG9vbS1Db29rIDQuNS13YXkuCisKKyAgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBNYXJjbyBCb2RyYXRvLgorCisgICBUSEUgRlVOQ1RJT04gSU4gVEhJUyBGSUxFIElTIElOVEVSTkFMIFdJVEggQSBNVVRBQkxFIElOVEVSRkFDRS4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggSVQgVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuICBJTiBGQUNULCBJVCBJUyBBTE1PU1QKKyAgIEdVQVJBTlRFRUQgVEhBVCBJVCBXSUxMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR05VIE1QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAyMDA5LCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCisvKiBTdG9yZXMgfHthcCxufS17YnAsbn18IGluIHtycCxufSwgcmV0dXJucyB0aGUgc2lnbi4gKi8KK3N0YXRpYyBpbnQKK2Fic19zdWJfbiAobXBfcHRyIHJwLCBtcF9zcmNwdHIgYXAsIG1wX3NyY3B0ciBicCwgbXBfc2l6ZV90IG4pCit7CisgIG1wX2xpbWJfdCAgeCwgeTsKKyAgd2hpbGUgKC0tbiA+PSAwKQorICAgIHsKKyAgICAgIHggPSBhcFtuXTsKKyAgICAgIHkgPSBicFtuXTsKKyAgICAgIGlmICh4ICE9IHkpCisJeworCSAgbisrOworCSAgaWYgKHggPiB5KQorCSAgICB7CisJICAgICAgbXBuX3N1Yl9uIChycCwgYXAsIGJwLCBuKTsKKwkgICAgICByZXR1cm4gMDsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgbXBuX3N1Yl9uIChycCwgYnAsIGFwLCBuKTsKKwkgICAgICByZXR1cm4gfjA7CisJICAgIH0KKwl9CisgICAgICBycFtuXSA9IDA7CisgICAgfQorICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYWJzX3N1Yl9hZGRfbiAobXBfcHRyIHJtLCBtcF9wdHIgcnAsIG1wX3NyY3B0ciBycywgbXBfc2l6ZV90IG4pIHsKKyAgaW50IHJlc3VsdDsKKyAgcmVzdWx0ID0gYWJzX3N1Yl9uIChybSwgcnAsIHJzLCBuKTsKKyAgQVNTRVJUX05PQ0FSUlkobXBuX2FkZF9uIChycCwgcnAsIHJzLCBuKSk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKworLyogVG9vbS00LjUsIHRoZSBzcGxpdHRpbmcgNngzIHVuYmFsYW5jZWQgdmVyc2lvbi4KKyAgIEV2YWx1YXRlIGluOiBpbmZpbml0eSwgKzQsIC00LCArMiwgLTIsICsxLCAtMSwgMC4KKworICA8LS1zLT48LS1uLS0+PC0tbi0tPjwtLW4tLT48LS1uLS0+PC0tbi0tPgorICAgX19fXyBfX19fX18gX19fX19fIF9fX19fXyBfX19fX18gX19fX19fCisgIHxfYTVffF9fYTRfX3xfX2EzX198X19hMl9ffF9fYTFfX3xfX2EwX198CisJCQl8YjJffF9fYjFfX3xfX2IwX198CisJCQk8LXQtPjwtLW4tLT48LS1uLS0+CisKKyovCisjZGVmaW5lIFRPT01fNjNfTVVMX05fUkVDKHAsIGEsIGIsIG4sIHdzKQkJXAorICBkbyB7CW1wbl9tdWxfbiAocCwgYSwgYiwgbik7CQkJCVwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBUT09NXzYzX01VTF9SRUMocCwgYSwgbmEsIGIsIG5iLCB3cykJCVwKKyAgZG8gewltcG5fbXVsIChwLCBhLCBuYSwgYiwgbmIpOwkJCVwKKyAgfSB3aGlsZSAoMCkKKwordm9pZAorbXBuX3Rvb202M19tdWwgKG1wX3B0ciBwcCwKKwkJbXBfc3JjcHRyIGFwLCBtcF9zaXplX3QgYW4sCisJCW1wX3NyY3B0ciBicCwgbXBfc2l6ZV90IGJuLCBtcF9wdHIgc2NyYXRjaCkKK3sKKyAgbXBfc2l6ZV90IG4sIHMsIHQ7CisgIG1wX2xpbWJfdCBjeTsKKyAgaW50IHNpZ247CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqIGRlY29tcG9zaXRpb24gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgYTUgIChhcCArIDUgKiBuKQorI2RlZmluZSBiMCAgKGJwICsgMCAqIG4pCisjZGVmaW5lIGIxICAoYnAgKyAxICogbikKKyNkZWZpbmUgYjIgIChicCArIDIgKiBuKQorCisgIEFTU0VSVCAoYW4gPj0gYm4pOworICBuID0gMSArIChhbiA+PSAyICogYm4gPyAoYW4gLSAxKSAvIChzaXplX3QpIDYgOiAoYm4gLSAxKSAvIChzaXplX3QpIDMpOworCisgIHMgPSBhbiAtIDUgKiBuOworICB0ID0gYm4gLSAyICogbjsKKworICBBU1NFUlQgKDAgPCBzICYmIHMgPD0gbik7CisgIEFTU0VSVCAoMCA8IHQgJiYgdCA8PSBuKTsKKyAgLyogV0FSTklORyEgaXQgYXNzdW1lcyBzK3Q+PW4gKi8KKyAgQVNTRVJUICggcyArIHQgPj0gbiApOworICBBU1NFUlQgKCBzICsgdCA+IDQpOworICAvKiBXQVJOSU5HISBpdCBhc3N1bWVzIG4+MSAqLworICBBU1NFUlQgKCBuID4gMik7CisKKyNkZWZpbmUgICByOCAgICBwcAkJCQkvKiAybiAgICovCisjZGVmaW5lICAgcjcgICAgc2NyYXRjaAkJCQkvKiAzbisxICovCisjZGVmaW5lICAgcjUgICAgKHBwICsgMypuKQkJCS8qIDNuKzEgKi8KKyNkZWZpbmUgICB2MCAgICAocHAgKyAzKm4pCQkJLyogbisxICovCisjZGVmaW5lICAgdjEgICAgKHBwICsgNCpuKzEpCQkJLyogbisxICovCisjZGVmaW5lICAgdjIgICAgKHBwICsgNSpuKzIpCQkJLyogbisxICovCisjZGVmaW5lICAgdjMgICAgKHBwICsgNipuKzMpCQkJLyogbisxICovCisjZGVmaW5lICAgcjMgICAgKHNjcmF0Y2ggKyAzICogbiArIDEpCQkvKiAzbisxICovCisjZGVmaW5lICAgcjEgICAgKHBwICsgNypuKQkJCS8qIHMrdCA8PSAyKm4gKi8KKyNkZWZpbmUgICB3cyAgICAoc2NyYXRjaCArIDYgKiBuICsgMikJCS8qID8/PyAqLworCisgIC8qIEFsbG9jIGFsc28gM24rMSBsaW1icyBmb3Igd3MuLi4gbXBuX3Rvb21faW50ZXJwb2xhdGVfOHB0cyBtYXkKKyAgICAgbmVlZCBhbGwgb2YgdGhlbSwgd2hlbiBET19tcG5fc3VibHNoX24gdXNlYSBhIHNjcmF0Y2ggICovCisvKiAgIGlmIChzY3JhdGNoID09IE5VTEwpIHNjcmF0Y2ggPSBUTVBfU0FMTE9DX0xJTUJTICg5ICogbiArIDMpOyAqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqIGV2YWx1YXRpb24gYW5kIHJlY3Vyc2l2ZSBjYWxscyAqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICRccG00JCAqLworICBzaWduID0gbXBuX3Rvb21fZXZhbF9wbTJleHAgKHYyLCB2MCwgNSwgYXAsIG4sIHMsIDIsIHBwKTsKKyAgcHBbbl0gPSBtcG5fbHNoaWZ0IChwcCwgYjEsIG4sIDIpOyAvKiA0YjEgKi8KKyAgLyogRklYTUU6IHVzZSBhZGRsc2ggKi8KKyAgdjNbdF0gPSBtcG5fbHNoaWZ0ICh2MywgYjIsIHQsIDQpOy8qIDE2YjIgKi8KKyAgaWYgKCBuID09IHQgKQorICAgIHYzW25dKz0gbXBuX2FkZF9uICh2MywgdjMsIGIwLCBuKTsgLyogMTZiMitiMCAqLworICBlbHNlCisgICAgdjNbbl0gPSBtcG5fYWRkICh2MywgYjAsIG4sIHYzLCB0KzEpOyAvKiAxNmIyK2IwICovCisgIHNpZ24gXj0gYWJzX3N1Yl9hZGRfbiAodjEsIHYzLCBwcCwgbiArIDEpOworICBUT09NXzYzX01VTF9OX1JFQyhwcCwgdjAsIHYxLCBuICsgMSwgd3MpOyAvKiBBKC00KSpCKC00KSAqLworICBUT09NXzYzX01VTF9OX1JFQyhyMywgdjIsIHYzLCBuICsgMSwgd3MpOyAvKiBBKCs0KSpCKCs0KSAqLworICBtcG5fdG9vbV9jb3VwbGVfaGFuZGxpbmcgKHIzLCAyKm4rMSwgcHAsIHNpZ24sIG4sIDIsIDQpOworCisgIC8qICRccG0xJCAqLworICBzaWduID0gbXBuX3Rvb21fZXZhbF9wbTEgKHYyLCB2MCwgNSwgYXAsIG4sIHMsICAgIHBwKTsKKyAgLyogQ29tcHV0ZSBiczEgYW5kIGJzbTEuIENvZGUgdGFrZW4gZnJvbSB0b29tMzMgKi8KKyAgY3kgPSBtcG5fYWRkICh3cywgYjAsIG4sIGIyLCB0KTsKKyNpZiBIQVZFX05BVElWRV9tcG5fYWRkX25fc3ViX24KKyAgaWYgKGN5ID09IDAgJiYgbXBuX2NtcCAod3MsIGIxLCBuKSA8IDApCisgICAgeworICAgICAgY3kgPSBtcG5fYWRkX25fc3ViX24gKHYzLCB2MSwgYjEsIHdzLCBuKTsKKyAgICAgIHYzW25dID0gY3kgPj4gMTsKKyAgICAgIHYxW25dID0gMDsKKyAgICAgIHNpZ24gPSB+c2lnbjsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBtcF9saW1iX3QgY3kyOworICAgICAgY3kyID0gbXBuX2FkZF9uX3N1Yl9uICh2MywgdjEsIHdzLCBiMSwgbik7CisgICAgICB2M1tuXSA9IGN5ICsgKGN5MiA+PiAxKTsKKyAgICAgIHYxW25dID0gY3kgLSAoY3kyICYgMSk7CisgICAgfQorI2Vsc2UKKyAgdjNbbl0gPSBjeSArIG1wbl9hZGRfbiAodjMsIHdzLCBiMSwgbik7CisgIGlmIChjeSA9PSAwICYmIG1wbl9jbXAgKHdzLCBiMSwgbikgPCAwKQorICAgIHsKKyAgICAgIG1wbl9zdWJfbiAodjEsIGIxLCB3cywgbik7CisgICAgICB2MVtuXSA9IDA7CisgICAgICBzaWduID0gfnNpZ247CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgY3kgLT0gbXBuX3N1Yl9uICh2MSwgd3MsIGIxLCBuKTsKKyAgICAgIHYxW25dID0gY3k7CisgICAgfQorI2VuZGlmCisgIFRPT01fNjNfTVVMX05fUkVDKHBwLCB2MCwgdjEsIG4gKyAxLCB3cyk7IC8qIEEoLTEpKkIoLTEpICovCisgIFRPT01fNjNfTVVMX05fUkVDKHI3LCB2MiwgdjMsIG4gKyAxLCB3cyk7IC8qIEEoMSkqQigxKSAqLworICBtcG5fdG9vbV9jb3VwbGVfaGFuZGxpbmcgKHI3LCAyKm4rMSwgcHAsIHNpZ24sIG4sIDAsIDApOworCisgIC8qICRccG0yJCAqLworICBzaWduID0gbXBuX3Rvb21fZXZhbF9wbTIgKHYyLCB2MCwgNSwgYXAsIG4sIHMsIHBwKTsKKyAgcHBbbl0gPSBtcG5fbHNoaWZ0IChwcCwgYjEsIG4sIDEpOyAvKiAyYjEgKi8KKyAgLyogRklYTUU6IHVzZSBhZGRsc2ggb3IgYWRkbHNoMiAqLworICB2M1t0XSA9IG1wbl9sc2hpZnQgKHYzLCBiMiwgdCwgMik7LyogNGIyICovCisgIGlmICggbiA9PSB0ICkKKyAgICB2M1tuXSs9IG1wbl9hZGRfbiAodjMsIHYzLCBiMCwgbik7IC8qIDRiMitiMCAqLworICBlbHNlCisgICAgdjNbbl0gPSBtcG5fYWRkICh2MywgYjAsIG4sIHYzLCB0KzEpOyAvKiA0YjIrYjAgKi8KKyAgc2lnbiBePSBhYnNfc3ViX2FkZF9uICh2MSwgdjMsIHBwLCBuICsgMSk7CisgIFRPT01fNjNfTVVMX05fUkVDKHBwLCB2MCwgdjEsIG4gKyAxLCB3cyk7IC8qIEEoLTIpKkIoLTIpICovCisgIFRPT01fNjNfTVVMX05fUkVDKHI1LCB2MiwgdjMsIG4gKyAxLCB3cyk7IC8qIEEoKzIpKkIoKzIpICovCisgIG1wbl90b29tX2NvdXBsZV9oYW5kbGluZyAocjUsIDIqbisxLCBwcCwgc2lnbiwgbiwgMSwgMik7CisKKyAgLyogQSgwKSpCKDApICovCisgIFRPT01fNjNfTVVMX05fUkVDKHBwLCBhcCwgYnAsIG4sIHdzKTsKKworICAvKiBJbmZpbml0eSAqLworICBpZiAocyA+IHQpIHsKKyAgICBUT09NXzYzX01VTF9SRUMocjEsIGE1LCBzLCBiMiwgdCwgd3MpOworICB9IGVsc2UgeworICAgIFRPT01fNjNfTVVMX1JFQyhyMSwgYjIsIHQsIGE1LCBzLCB3cyk7CisgIH07CisKKyAgbXBuX3Rvb21faW50ZXJwb2xhdGVfOHB0cyAocHAsIG4sIHIzLCByNywgcyArIHQsIHdzKTsKKworI3VuZGVmIGE1CisjdW5kZWYgYjAKKyN1bmRlZiBiMQorI3VuZGVmIGIyCisjdW5kZWYgcjEKKyN1bmRlZiByMworI3VuZGVmIHI1CisjdW5kZWYgdjAKKyN1bmRlZiB2MQorI3VuZGVmIHYyCisjdW5kZWYgdjMKKyN1bmRlZiByNworI3VuZGVmIHI4CisjdW5kZWYgd3MKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy90b29tNl9zcXIuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy90b29tNl9zcXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzZlZWY5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Rvb202X3Nxci5jCkBAIC0wLDAgKzEsMTgxIEBACisvKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgc3F1YXJpbmcgYWxnb3JpdGhtIHdpdGggVG9vbS1Db29rIDYuNS13YXkuCisKKyAgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBNYXJjbyBCb2RyYXRvLgorCisgICBUSEUgRlVOQ1RJT04gSU4gVEhJUyBGSUxFIElTIElOVEVSTkFMIFdJVEggQSBNVVRBQkxFIElOVEVSRkFDRS4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggSVQgVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuICBJTiBGQUNULCBJVCBJUyBBTE1PU1QKKyAgIEdVQVJBTlRFRUQgVEhBVCBJVCBXSUxMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR05VIE1QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCisKKyNpZiBHTVBfTlVNQl9CSVRTIDwgMjEKKyNlcnJvciBOb3QgaW1wbGVtZW50ZWQuCisjZW5kaWYKKworCisjaWYgVFVORV9QUk9HUkFNX0JVSUxECisjZGVmaW5lIE1BWUJFX3Nxcl9iYXNlY2FzZSAxCisjZGVmaW5lIE1BWUJFX3Nxcl9hYm92ZV9iYXNlY2FzZSAgIDEKKyNkZWZpbmUgTUFZQkVfc3FyX3Rvb20yICAgMQorI2RlZmluZSBNQVlCRV9zcXJfYWJvdmVfdG9vbTIgICAxCisjZGVmaW5lIE1BWUJFX3Nxcl90b29tMyAgIDEKKyNkZWZpbmUgTUFZQkVfc3FyX2Fib3ZlX3Rvb20zICAgMQorI2RlZmluZSBNQVlCRV9zcXJfYWJvdmVfdG9vbTQgICAxCisjZWxzZQorI2lmZGVmICBTUVJfVE9PTThfVEhSRVNIT0xECisjZGVmaW5lIFNRUl9UT09NNl9NQVggKChTUVJfVE9PTThfVEhSRVNIT0xEKzYqMi0xKzUpLzYpCisjZWxzZQorI2RlZmluZSBTUVJfVE9PTTZfTUFYCQkJCQlcCisgICgoU1FSX0ZGVF9USFJFU0hPTEQgPD0gTVBfU0laRV9UX01BWCAtICg2KjItMSs1KSkgPwlcCisgICAoKFNRUl9GRlRfVEhSRVNIT0xEKzYqMi0xKzUpLzYpCQkJXAorICAgOiBNUF9TSVpFX1RfTUFYICkKKyNlbmRpZgorI2RlZmluZSBNQVlCRV9zcXJfYmFzZWNhc2UJCQkJCVwKKyAgKFNRUl9UT09NNl9USFJFU0hPTEQgPCA2ICogU1FSX1RPT00yX1RIUkVTSE9MRCkKKyNkZWZpbmUgTUFZQkVfc3FyX2Fib3ZlX2Jhc2VjYXNlCQkJCVwKKyAgKFNRUl9UT09NNl9NQVggPj0gIFNRUl9UT09NMl9USFJFU0hPTEQpCisjZGVmaW5lIE1BWUJFX3Nxcl90b29tMgkJCQkJCVwKKyAgKFNRUl9UT09NNl9USFJFU0hPTEQgPCA2ICogU1FSX1RPT00zX1RIUkVTSE9MRCkKKyNkZWZpbmUgTUFZQkVfc3FyX2Fib3ZlX3Rvb20yCQkJCQlcCisgIChTUVJfVE9PTTZfTUFYID49IFNRUl9UT09NM19USFJFU0hPTEQpCisjZGVmaW5lIE1BWUJFX3Nxcl90b29tMwkJCQkJCVwKKyAgKFNRUl9UT09NNl9USFJFU0hPTEQgPCA2ICogU1FSX1RPT000X1RIUkVTSE9MRCkKKyNkZWZpbmUgTUFZQkVfc3FyX2Fib3ZlX3Rvb20zCQkJCQlcCisgIChTUVJfVE9PTTZfTUFYID49IFNRUl9UT09NNF9USFJFU0hPTEQpCisjZGVmaW5lIE1BWUJFX3Nxcl9hYm92ZV90b29tNAkJCQkJXAorICAoU1FSX1RPT002X01BWCA+PSBTUVJfVE9PTTZfVEhSRVNIT0xEKQorI2VuZGlmCisKKyNkZWZpbmUgVE9PTTZfU1FSX1JFQyhwLCBhLCBuLCB3cykJCQkJCVwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBpZiAoTUFZQkVfc3FyX2Jhc2VjYXNlICYmICggIU1BWUJFX3Nxcl9hYm92ZV9iYXNlY2FzZQkJXAorCXx8IEJFTE9XX1RIUkVTSE9MRCAobiwgU1FSX1RPT00yX1RIUkVTSE9MRCkpKQkJCVwKKyAgICAgIG1wbl9zcXJfYmFzZWNhc2UgKHAsIGEsIG4pOwkJCQkJXAorICAgIGVsc2UgaWYgKE1BWUJFX3Nxcl90b29tMiAmJiAoICFNQVlCRV9zcXJfYWJvdmVfdG9vbTIJCVwKKwkgICAgIHx8IEJFTE9XX1RIUkVTSE9MRCAobiwgU1FSX1RPT00zX1RIUkVTSE9MRCkpKQkJXAorICAgICAgbXBuX3Rvb20yX3NxciAocCwgYSwgbiwgd3MpOwkJCQkJXAorICAgIGVsc2UgaWYgKE1BWUJFX3Nxcl90b29tMyAmJiAoICFNQVlCRV9zcXJfYWJvdmVfdG9vbTMJCVwKKwkgICAgIHx8IEJFTE9XX1RIUkVTSE9MRCAobiwgU1FSX1RPT000X1RIUkVTSE9MRCkpKQkJXAorICAgICAgbXBuX3Rvb20zX3NxciAocCwgYSwgbiwgd3MpOwkJCQkJXAorICAgIGVsc2UgaWYgKCEgTUFZQkVfc3FyX2Fib3ZlX3Rvb200CQkJCQlcCisJICAgICB8fCBCRUxPV19USFJFU0hPTEQgKG4sIFNRUl9UT09NNl9USFJFU0hPTEQpKQkJXAorICAgICAgbXBuX3Rvb200X3NxciAocCwgYSwgbiwgd3MpOwkJCQkJXAorICAgIGVsc2UJCQkJCQkJCVwKKyAgICAgIG1wbl90b29tNl9zcXIgKHAsIGEsIG4sIHdzKTsJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKwordm9pZAorbXBuX3Rvb202X3NxciAgKG1wX3B0ciBwcCwgbXBfc3JjcHRyIGFwLCBtcF9zaXplX3QgYW4sIG1wX3B0ciBzY3JhdGNoKQoreworICBtcF9zaXplX3QgbiwgczsKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogZGVjb21wb3NpdGlvbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIEFTU0VSVCggYW4gPj0gMTggKTsKKworICBuID0gMSArIChhbiAtIDEpIC8gKHNpemVfdCkgNjsKKworICBzID0gYW4gLSA1ICogbjsKKworICBBU1NFUlQgKDAgPCBzICYmIHMgPD0gbik7CisKKyNkZWZpbmUgICByNCAgICAocHAgKyAzICogbikJCQkvKiAzbisxICovCisjZGVmaW5lICAgcjIgICAgKHBwICsgNyAqIG4pCQkJLyogM24rMSAqLworI2RlZmluZSAgIHIwICAgIChwcCArMTEgKiBuKQkJCS8qIHMrdCA8PSAyKm4gKi8KKyNkZWZpbmUgICByNSAgICAoc2NyYXRjaCkJCQkvKiAzbisxICovCisjZGVmaW5lICAgcjMgICAgKHNjcmF0Y2ggKyAzICogbiArIDEpCQkvKiAzbisxICovCisjZGVmaW5lICAgcjEgICAgKHNjcmF0Y2ggKyA2ICogbiArIDIpCQkvKiAzbisxICovCisjZGVmaW5lICAgdjAgICAgKHBwICsgNyAqIG4pCQkJLyogbisxICovCisjZGVmaW5lICAgdjIgICAgKHBwICsgOSAqIG4rMikJCQkvKiBuKzEgKi8KKyNkZWZpbmUgICB3c2UgICAoc2NyYXRjaCArIDkgKiBuICsgMykJCS8qIDNuKzEgKi8KKworICAvKiBBbGxvYyBhbHNvIDNuKzEgbGltYnMgZm9yIHdzLi4uIHRvb21faW50ZXJwb2xhdGVfMTJwdHMgbWF5CisgICAgIG5lZWQgYWxsIG9mIHRoZW0sIHdoZW4gRE9fbXBuX3N1YmxzaF9uIHVzZWEgYSBzY3JhdGNoICAqLworLyogICBpZiAoc2NyYXRjaD09IE5VTEwpICovCisvKiAgICAgc2NyYXRjaCA9IFRNUF9TQUxMT0NfTElNQlMgKDEyICogbiArIDYpOyAqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqIGV2YWx1YXRpb24gYW5kIHJlY3Vyc2l2ZSBjYWxscyAqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICRccG0xLzIkICovCisgIG1wbl90b29tX2V2YWxfcG0ycmV4cCAodjIsIHYwLCA1LCBhcCwgbiwgcywgMSwgcHApOworICBUT09NNl9TUVJfUkVDKHBwLCB2MCwgbiArIDEsIHdzZSk7IC8qIEEoLTEvMikqQigtMS8yKSoyXi4gKi8KKyAgVE9PTTZfU1FSX1JFQyhyNSwgdjIsIG4gKyAxLCB3c2UpOyAvKiBBKCsxLzIpKkIoKzEvMikqMl4uICovCisgIG1wbl90b29tX2NvdXBsZV9oYW5kbGluZyAocjUsIDIgKiBuICsgMSwgcHAsIDAsIG4sIDEsIDApOworCisgIC8qICRccG0xJCAqLworICBtcG5fdG9vbV9ldmFsX3BtMSAodjIsIHYwLCA1LCBhcCwgbiwgcywgICAgcHApOworICBUT09NNl9TUVJfUkVDKHBwLCB2MCwgbiArIDEsIHdzZSk7IC8qIEEoLTEpKkIoLTEpICovCisgIFRPT002X1NRUl9SRUMocjMsIHYyLCBuICsgMSwgd3NlKTsgLyogQSgxKSpCKDEpICovCisgIG1wbl90b29tX2NvdXBsZV9oYW5kbGluZyAocjMsIDIgKiBuICsgMSwgcHAsIDAsIG4sIDAsIDApOworCisgIC8qICRccG00JCAqLworICBtcG5fdG9vbV9ldmFsX3BtMmV4cCAodjIsIHYwLCA1LCBhcCwgbiwgcywgMiwgcHApOworICBUT09NNl9TUVJfUkVDKHBwLCB2MCwgbiArIDEsIHdzZSk7IC8qIEEoLTQpKkIoLTQpICovCisgIFRPT002X1NRUl9SRUMocjEsIHYyLCBuICsgMSwgd3NlKTsgLyogQSgrNCkqQigrNCkgKi8KKyAgbXBuX3Rvb21fY291cGxlX2hhbmRsaW5nIChyMSwgMiAqIG4gKyAxLCBwcCwgMCwgbiwgMiwgNCk7CisKKyAgLyogJFxwbTEvNCQgKi8KKyAgbXBuX3Rvb21fZXZhbF9wbTJyZXhwICh2MiwgdjAsIDUsIGFwLCBuLCBzLCAyLCBwcCk7CisgIFRPT002X1NRUl9SRUMocHAsIHYwLCBuICsgMSwgd3NlKTsgLyogQSgtMS80KSpCKC0xLzQpKjReLiAqLworICBUT09NNl9TUVJfUkVDKHI0LCB2MiwgbiArIDEsIHdzZSk7IC8qIEEoKzEvNCkqQigrMS80KSo0Xi4gKi8KKyAgbXBuX3Rvb21fY291cGxlX2hhbmRsaW5nIChyNCwgMiAqIG4gKyAxLCBwcCwgMCwgbiwgMiwgMCk7CisKKyAgLyogJFxwbTIkICovCisgIG1wbl90b29tX2V2YWxfcG0yICh2MiwgdjAsIDUsIGFwLCBuLCBzLCBwcCk7CisgIFRPT002X1NRUl9SRUMocHAsIHYwLCBuICsgMSwgd3NlKTsgLyogQSgtMikqQigtMikgKi8KKyAgVE9PTTZfU1FSX1JFQyhyMiwgdjIsIG4gKyAxLCB3c2UpOyAvKiBBKCsyKSpCKCsyKSAqLworICBtcG5fdG9vbV9jb3VwbGVfaGFuZGxpbmcgKHIyLCAyICogbiArIDEsIHBwLCAwLCBuLCAxLCAyKTsKKworI3VuZGVmIHYwCisjdW5kZWYgdjIKKworICAvKiBBKDApKkIoMCkgKi8KKyAgVE9PTTZfU1FSX1JFQyhwcCwgYXAsIG4sIHdzZSk7CisKKyAgbXBuX3Rvb21faW50ZXJwb2xhdGVfMTJwdHMgKHBwLCByMSwgcjMsIHI1LCBuLCAyICogcywgMCwgd3NlKTsKKworI3VuZGVmIHIwCisjdW5kZWYgcjEKKyN1bmRlZiByMgorI3VuZGVmIHIzCisjdW5kZWYgcjQKKyN1bmRlZiByNQorCit9CisjdW5kZWYgVE9PTTZfU1FSX1JFQworI3VuZGVmIE1BWUJFX3Nxcl9iYXNlY2FzZQorI3VuZGVmIE1BWUJFX3Nxcl9hYm92ZV9iYXNlY2FzZQorI3VuZGVmIE1BWUJFX3Nxcl90b29tMgorI3VuZGVmIE1BWUJFX3Nxcl9hYm92ZV90b29tMgorI3VuZGVmIE1BWUJFX3Nxcl90b29tMworI3VuZGVmIE1BWUJFX3Nxcl9hYm92ZV90b29tMworI3VuZGVmIE1BWUJFX3Nxcl9hYm92ZV90b29tNApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Rvb202aF9tdWwuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy90b29tNmhfbXVsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM3ZjJhNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy90b29tNmhfbXVsLmMKQEAgLTAsMCArMSwyNjIgQEAKKy8qIEltcGxlbWVudGF0aW9uIG9mIHRoZSBtdWx0aXBsaWNhdGlvbiBhbGdvcml0aG0gZm9yIFRvb20tQ29vayA2LjUtd2F5LgorCisgICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgTWFyY28gQm9kcmF0by4KKworICAgVEhFIEZVTkNUSU9OIElOIFRISVMgRklMRSBJUyBJTlRFUk5BTCBXSVRIIEEgTVVUQUJMRSBJTlRFUkZBQ0UuICBJVCBJUyBPTkxZCisgICBTQUZFIFRPIFJFQUNIIElUIFRIUk9VR0ggRE9DVU1FTlRFRCBJTlRFUkZBQ0VTLiAgSU4gRkFDVCwgSVQgSVMgQUxNT1NUCisgICBHVUFSQU5URUVEIFRIQVQgSVQgV0lMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEgRlVUVVJFIEdOVSBNUCBSRUxFQVNFLgorCitDb3B5cmlnaHQgMjAwOSwgMjAxMCwgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworCisjaWYgR01QX05VTUJfQklUUyA8IDIxCisjZXJyb3IgTm90IGltcGxlbWVudGVkLgorI2VuZGlmCisKKyNpZiBUVU5FX1BST0dSQU1fQlVJTEQKKyNkZWZpbmUgTUFZQkVfbXVsX2Jhc2VjYXNlIDEKKyNkZWZpbmUgTUFZQkVfbXVsX3Rvb20yMiAgIDEKKyNkZWZpbmUgTUFZQkVfbXVsX3Rvb20zMyAgIDEKKyNkZWZpbmUgTUFZQkVfbXVsX3Rvb202aCAgIDEKKyNlbHNlCisjZGVmaW5lIE1BWUJFX211bF9iYXNlY2FzZQkJCQkJCVwKKyAgKE1VTF9UT09NNkhfVEhSRVNIT0xEIDwgNiAqIE1VTF9UT09NMjJfVEhSRVNIT0xEKQorI2RlZmluZSBNQVlCRV9tdWxfdG9vbTIyCQkJCQkJXAorICAoTVVMX1RPT002SF9USFJFU0hPTEQgPCA2ICogTVVMX1RPT00zM19USFJFU0hPTEQpCisjZGVmaW5lIE1BWUJFX211bF90b29tMzMJCQkJCQlcCisgIChNVUxfVE9PTTZIX1RIUkVTSE9MRCA8IDYgKiBNVUxfVE9PTTQ0X1RIUkVTSE9MRCkKKyNkZWZpbmUgTUFZQkVfbXVsX3Rvb202aAkJCQkJCVwKKyAgKE1VTF9GRlRfVEhSRVNIT0xEID49IDYgKiBNVUxfVE9PTTZIX1RIUkVTSE9MRCkKKyNlbmRpZgorCisjZGVmaW5lIFRPT002SF9NVUxfTl9SRUMocCwgYSwgYiwgZiwgcDIsIGEyLCBiMiwgbiwgd3MpCQkJXAorICBkbyB7CQkJCQkJCQkJXAorICAgIGlmIChNQVlCRV9tdWxfYmFzZWNhc2UJCQkJCQlcCisJJiYgQkVMT1dfVEhSRVNIT0xEIChuLCBNVUxfVE9PTTIyX1RIUkVTSE9MRCkpIHsJCQlcCisgICAgICBtcG5fbXVsX2Jhc2VjYXNlIChwLCBhLCBuLCBiLCBuKTsJCQkJCVwKKyAgICAgIGlmIChmKQkJCQkJCQkJXAorCW1wbl9tdWxfYmFzZWNhc2UgKHAyLCBhMiwgbiwgYjIsIG4pOwkJCQlcCisgICAgfSBlbHNlIGlmIChNQVlCRV9tdWxfdG9vbTIyCQkJCQkJXAorCSAgICAgICAmJiBCRUxPV19USFJFU0hPTEQgKG4sIE1VTF9UT09NMzNfVEhSRVNIT0xEKSkgewkJXAorICAgICAgbXBuX3Rvb20yMl9tdWwgKHAsIGEsIG4sIGIsIG4sIHdzKTsJCQkJXAorICAgICAgaWYgKGYpCQkJCQkJCQlcCisJbXBuX3Rvb20yMl9tdWwgKHAyLCBhMiwgbiwgYjIsIG4sIHdzKTsJCQkJXAorICAgIH0gZWxzZSBpZiAoTUFZQkVfbXVsX3Rvb20zMwkJCQkJCVwKKwkgICAgICAgJiYgQkVMT1dfVEhSRVNIT0xEIChuLCBNVUxfVE9PTTQ0X1RIUkVTSE9MRCkpIHsJCVwKKyAgICAgIG1wbl90b29tMzNfbXVsIChwLCBhLCBuLCBiLCBuLCB3cyk7CQkJCVwKKyAgICAgIGlmIChmKQkJCQkJCQkJXAorCW1wbl90b29tMzNfbXVsIChwMiwgYTIsIG4sIGIyLCBuLCB3cyk7CQkJCVwKKyAgICB9IGVsc2UgaWYgKCEgTUFZQkVfbXVsX3Rvb202aAkJCQkJXAorCSAgICAgICB8fCBCRUxPV19USFJFU0hPTEQgKG4sIE1VTF9UT09NNkhfVEhSRVNIT0xEKSkgewkJXAorICAgICAgbXBuX3Rvb200NF9tdWwgKHAsIGEsIG4sIGIsIG4sIHdzKTsJCQkJXAorICAgICAgaWYgKGYpCQkJCQkJCQlcCisJbXBuX3Rvb200NF9tdWwgKHAyLCBhMiwgbiwgYjIsIG4sIHdzKTsJCQkJXAorICAgIH0gZWxzZSB7CQkJCQkJCQlcCisgICAgICBtcG5fdG9vbTZoX211bCAocCwgYSwgbiwgYiwgbiwgd3MpOwkJCQlcCisgICAgICBpZiAoZikJCQkJCQkJCVwKKwltcG5fdG9vbTZoX211bCAocDIsIGEyLCBuLCBiMiwgbiwgd3MpOwkJCQlcCisgICAgfQkJCQkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBUT09NNkhfTVVMX1JFQyhwLCBhLCBuYSwgYiwgbmIsIHdzKQkJXAorICBkbyB7IG1wbl9tdWwgKHAsIGEsIG5hLCBiLCBuYik7CQkJXAorICB9IHdoaWxlICgwKQorCisvKiBUb29tLTYuNSAsIGNvbXB1dGUgdGhlIHByb2R1Y3Qge3BwLGFuK2JufSA8LSB7YXAsYW59ICoge2JwLGJufQorICAgV2l0aDogYW4gPj0gYm4gPj0gNDYsIGFuKjYgPCAgYm4gKiAxNy4KKyAgIEl0IF9tYXlfIHdvcmsgd2l0aCBibjw9NDYgYW5kIGJuKjE3IDwgYW4qNiA8IGJuKjE4CisKKyAgIEV2YWx1YXRlIGluOiBpbmZpbml0eSwgKzQsIC00LCArMiwgLTIsICsxLCAtMSwgKzEvMiwgLTEvMiwgKzEvNCwgLTEvNCwgMC4KKyovCisvKiBFc3RpbWF0ZSBvbiBuZWVkZWQgc2NyYXRjaDoKKyAgIFMobikgPD0gKG4rNSlcNioxMCs0K01BWChTKChuKzUpXDYpLDErMioobis1KVw2KSwKKyAgIHNpbmNlIG4+NDI7IFMobikgPD0gY2VpbChsb2cobikvbG9nKDYpKSooMTArNCkrbioxMlw2IDwgbioyICsgbGcyKG4pKjYKKyAqLworCit2b2lkCittcG5fdG9vbTZoX211bCAgIChtcF9wdHIgcHAsCisJCSAgbXBfc3JjcHRyIGFwLCBtcF9zaXplX3QgYW4sCisJCSAgbXBfc3JjcHRyIGJwLCBtcF9zaXplX3QgYm4sIG1wX3B0ciBzY3JhdGNoKQoreworICBtcF9zaXplX3QgbiwgcywgdDsKKyAgaW50IHAsIHEsIGhhbGY7CisgIGludCBzaWduOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBkZWNvbXBvc2l0aW9uICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgQVNTRVJUIChhbiA+PSBibik7CisgIC8qIENhbiBub3QgaGFuZGxlIHRvbyBtdWNoIHVuYmFsYW5jZW1lbnQgKi8KKyAgQVNTRVJUIChibiA+PSA0Mik7CisgIC8qIENhbiBub3QgaGFuZGxlIHRvbyBtdWNoIHVuYmFsYW5jZW1lbnQgKi8KKyAgQVNTRVJUICgoYW4qMyA8ICBibiAqIDgpIHx8IChibiA+PSA0NiAmJiBhbiAqIDYgPCAgYm4gKiAxNykpOworCisgIC8qIExpbWl0IG51bS9kZW4gaXMgYSByYXRpb25hbCBudW1iZXIgYmV0d2VlbgorICAgICAoMTIvMTEpXihsb2coNCkvbG9nKDIqNC0xKSkgYW5kICgxMi8xMSleKGxvZyg2KS9sb2coMio2LTEpKSAgICAgICAgICAgICAqLworI2RlZmluZSBMSU1JVF9udW1lcmF0b3IgKDE4KQorI2RlZmluZSBMSU1JVF9kZW5vbWluYXQgKDE3KQorCisgIGlmIChMSUtFTFkgKGFuICogTElNSVRfZGVub21pbmF0IDwgTElNSVRfbnVtZXJhdG9yICogYm4pKSAvKiBpcyA2Ki4uLiA8IDYqLi4uICovCisgICAgeworICAgICAgbiA9IDEgKyAoYW4gLSAxKSAvIChzaXplX3QpIDY7CisgICAgICBwID0gcSA9IDU7CisgICAgICBoYWxmID0gMDsKKworICAgICAgcyA9IGFuIC0gNSAqIG47CisgICAgICB0ID0gYm4gLSA1ICogbjsKKyAgICB9CisgIGVsc2UgeworICAgIGlmIChhbiAqIDUgKiBMSU1JVF9udW1lcmF0b3IgPCBMSU1JVF9kZW5vbWluYXQgKiA3ICogYm4pCisgICAgICB7IHAgPSA3OyBxID0gNjsgfQorICAgIGVsc2UgaWYgKGFuICogNSAqIExJTUlUX2Rlbm9taW5hdCA8IExJTUlUX251bWVyYXRvciAqIDcgKiBibikKKyAgICAgIHsgcCA9IDc7IHEgPSA1OyB9CisgICAgZWxzZSBpZiAoYW4gKiBMSU1JVF9udW1lcmF0b3IgPCBMSU1JVF9kZW5vbWluYXQgKiAyICogYm4pICAvKiBpcyA0Ki4uLiA8IDgqLi4uICovCisgICAgICB7IHAgPSA4OyBxID0gNTsgfQorICAgIGVsc2UgaWYgKGFuICogTElNSVRfZGVub21pbmF0IDwgTElNSVRfbnVtZXJhdG9yICogMiAqIGJuKSAgLyogaXMgNCouLi4gPCA4Ki4uLiAqLworICAgICAgeyBwID0gODsgcSA9IDQ7IH0KKyAgICBlbHNlCisgICAgICB7IHAgPSA5OyBxID0gNDsgfQorCisgICAgaGFsZiA9IChwIF4gcSkgJiAxOworICAgIG4gPSAxICsgKHEgKiBhbiA+PSBwICogYm4gPyAoYW4gLSAxKSAvIChzaXplX3QpIHAgOiAoYm4gLSAxKSAvIChzaXplX3QpIHEpOworICAgIHAtLTsgcS0tOworCisgICAgcyA9IGFuIC0gcCAqIG47CisgICAgdCA9IGJuIC0gcSAqIG47CisKKyAgICAvKiBXaXRoIExJTUlUID0gMTYvMTUsIHRoZSBmb2xsb3dpbmcgcmVjb3ZlciBpcyBuZWVkZWQgb25seSBpZiBibjw9NzMqLworICAgIGlmIChoYWxmKSB7IC8qIFJlY292ZXIgZnJvbSBiYWRseSBjaG9zZW4gc3BsaXR0aW5nICovCisgICAgICBpZiAoVU5MSUtFTFkgKHM8MSkpIHtwLS07IHMrPW47IGhhbGY9MDt9CisgICAgICBlbHNlIGlmIChVTkxJS0VMWSAodDwxKSkge3EtLTsgdCs9bjsgaGFsZj0wO30KKyAgICB9CisgIH0KKyN1bmRlZiBMSU1JVF9udW1lcmF0b3IKKyN1bmRlZiBMSU1JVF9kZW5vbWluYXQKKworICBBU1NFUlQgKDAgPCBzICYmIHMgPD0gbik7CisgIEFTU0VSVCAoMCA8IHQgJiYgdCA8PSBuKTsKKyAgQVNTRVJUIChoYWxmIHx8IHMgKyB0ID4gMyk7CisgIEFTU0VSVCAobiA+IDIpOworCisjZGVmaW5lICAgcjQgICAgKHBwICsgMyAqIG4pCQkJLyogM24rMSAqLworI2RlZmluZSAgIHIyICAgIChwcCArIDcgKiBuKQkJCS8qIDNuKzEgKi8KKyNkZWZpbmUgICByMCAgICAocHAgKzExICogbikJCQkvKiBzK3QgPD0gMipuICovCisjZGVmaW5lICAgcjUgICAgKHNjcmF0Y2gpCQkJLyogM24rMSAqLworI2RlZmluZSAgIHIzICAgIChzY3JhdGNoICsgMyAqIG4gKyAxKQkJLyogM24rMSAqLworI2RlZmluZSAgIHIxICAgIChzY3JhdGNoICsgNiAqIG4gKyAyKQkJLyogM24rMSAqLworI2RlZmluZSAgIHYwICAgIChwcCArIDcgKiBuKQkJCS8qIG4rMSAqLworI2RlZmluZSAgIHYxICAgIChwcCArIDggKiBuKzEpCQkJLyogbisxICovCisjZGVmaW5lICAgdjIgICAgKHBwICsgOSAqIG4rMikJCQkvKiBuKzEgKi8KKyNkZWZpbmUgICB2MyAgICAoc2NyYXRjaCArIDkgKiBuICsgMykJCS8qIG4rMSAqLworI2RlZmluZSAgIHdzaSAgIChzY3JhdGNoICsgOSAqIG4gKyAzKQkJLyogM24rMSAqLworI2RlZmluZSAgIHdzZSAgIChzY3JhdGNoICsxMCAqIG4gKyA0KQkJLyogMm4rMSAqLworCisgIC8qIEFsbG9jIGFsc28gM24rMSBsaW1icyBmb3Igd3NpLi4uIHRvb21faW50ZXJwb2xhdGVfMTJwdHMgbWF5CisgICAgIG5lZWQgYWxsIG9mIHRoZW0gICovCisvKiAgIGlmIChzY3JhdGNoID09IE5VTEwpICovCisvKiAgICAgc2NyYXRjaCA9IFRNUF9TQUxMT0NfTElNQlMobXBuX3Rvb202X3Nxcl9pdGNoKG4gKiA2KSk7ICovCisgIEFTU0VSVCAoMTIgKiBuICsgNiA8PSBtcG5fdG9vbTZoX211bF9pdGNoKGFuLGJuKSk7CisgIEFTU0VSVCAoMTIgKiBuICsgNiA8PSBtcG5fdG9vbTZfc3FyX2l0Y2gobiAqIDYpKTsKKworICAvKioqKioqKioqKioqKioqKioqKioqKiBldmFsdWF0aW9uIGFuZCByZWN1cnNpdmUgY2FsbHMgKioqKioqKioqKioqKioqKioqKioqLworICAvKiAkXHBtMS8yJCAqLworICBzaWduID0gbXBuX3Rvb21fZXZhbF9wbTJyZXhwICh2MiwgdjAsIHAsIGFwLCBuLCBzLCAxLCBwcCkgXgorCSBtcG5fdG9vbV9ldmFsX3BtMnJleHAgKHYzLCB2MSwgcSwgYnAsIG4sIHQsIDEsIHBwKTsKKyAgLyogQSgtMS8yKSpCKC0xLzIpKjJeLiAqLyAvKiBBKCsxLzIpKkIoKzEvMikqMl4uICovCisgIFRPT002SF9NVUxfTl9SRUMocHAsIHYwLCB2MSwgMiwgcjUsIHYyLCB2MywgbiArIDEsIHdzZSk7CisgIG1wbl90b29tX2NvdXBsZV9oYW5kbGluZyAocjUsIDIgKiBuICsgMSwgcHAsIHNpZ24sIG4sIDEraGFsZiAsIGhhbGYpOworCisgIC8qICRccG0xJCAqLworICBzaWduID0gbXBuX3Rvb21fZXZhbF9wbTEgKHYyLCB2MCwgcCwgYXAsIG4sIHMsICAgIHBwKTsKKyAgaWYgKFVOTElLRUxZIChxID09IDMpKQorICAgIHNpZ24gXj0gbXBuX3Rvb21fZXZhbF9kZ3IzX3BtMSAodjMsIHYxLCBicCwgbiwgdCwgICAgcHApOworICBlbHNlCisgICAgc2lnbiBePSBtcG5fdG9vbV9ldmFsX3BtMSAodjMsIHYxLCBxLCBicCwgbiwgdCwgICAgcHApOworICAvKiBBKC0xKSpCKC0xKSAqLyAvKiBBKDEpKkIoMSkgKi8KKyAgVE9PTTZIX01VTF9OX1JFQyhwcCwgdjAsIHYxLCAyLCByMywgdjIsIHYzLCBuICsgMSwgd3NlKTsKKyAgbXBuX3Rvb21fY291cGxlX2hhbmRsaW5nIChyMywgMiAqIG4gKyAxLCBwcCwgc2lnbiwgbiwgMCwgMCk7CisKKyAgLyogJFxwbTQkICovCisgIHNpZ24gPSBtcG5fdG9vbV9ldmFsX3BtMmV4cCAodjIsIHYwLCBwLCBhcCwgbiwgcywgMiwgcHApIF4KKwkgbXBuX3Rvb21fZXZhbF9wbTJleHAgKHYzLCB2MSwgcSwgYnAsIG4sIHQsIDIsIHBwKTsKKyAgLyogQSgtNCkqQigtNCkgKi8KKyAgVE9PTTZIX01VTF9OX1JFQyhwcCwgdjAsIHYxLCAyLCByMSwgdjIsIHYzLCBuICsgMSwgd3NlKTsgLyogQSgrNCkqQigrNCkgKi8KKyAgbXBuX3Rvb21fY291cGxlX2hhbmRsaW5nIChyMSwgMiAqIG4gKyAxLCBwcCwgc2lnbiwgbiwgMiwgNCk7CisKKyAgLyogJFxwbTEvNCQgKi8KKyAgc2lnbiA9IG1wbl90b29tX2V2YWxfcG0ycmV4cCAodjIsIHYwLCBwLCBhcCwgbiwgcywgMiwgcHApIF4KKwkgbXBuX3Rvb21fZXZhbF9wbTJyZXhwICh2MywgdjEsIHEsIGJwLCBuLCB0LCAyLCBwcCk7CisgIC8qIEEoLTEvNCkqQigtMS80KSo0Xi4gKi8gLyogQSgrMS80KSpCKCsxLzQpKjReLiAqLworICBUT09NNkhfTVVMX05fUkVDKHBwLCB2MCwgdjEsIDIsIHI0LCB2MiwgdjMsIG4gKyAxLCB3c2UpOworICBtcG5fdG9vbV9jb3VwbGVfaGFuZGxpbmcgKHI0LCAyICogbiArIDEsIHBwLCBzaWduLCBuLCAyKigxK2hhbGYpLCAyKihoYWxmKSk7CisKKyAgLyogJFxwbTIkICovCisgIHNpZ24gPSBtcG5fdG9vbV9ldmFsX3BtMiAodjIsIHYwLCBwLCBhcCwgbiwgcywgcHApIF4KKwkgbXBuX3Rvb21fZXZhbF9wbTIgKHYzLCB2MSwgcSwgYnAsIG4sIHQsIHBwKTsKKyAgLyogQSgtMikqQigtMikgKi8gLyogQSgrMikqQigrMikgKi8KKyAgVE9PTTZIX01VTF9OX1JFQyhwcCwgdjAsIHYxLCAyLCByMiwgdjIsIHYzLCBuICsgMSwgd3NlKTsKKyAgbXBuX3Rvb21fY291cGxlX2hhbmRsaW5nIChyMiwgMiAqIG4gKyAxLCBwcCwgc2lnbiwgbiwgMSwgMik7CisKKyN1bmRlZiB2MAorI3VuZGVmIHYxCisjdW5kZWYgdjIKKyN1bmRlZiB2MworI3VuZGVmIHdzZQorCisgIC8qIEEoMCkqQigwKSAqLworICBUT09NNkhfTVVMX05fUkVDKHBwLCBhcCwgYnAsIDAsIHBwLCBhcCwgYnAsIG4sIHdzaSk7CisKKyAgLyogSW5maW5pdHkgKi8KKyAgaWYgKFVOTElLRUxZIChoYWxmICE9IDApKSB7CisgICAgaWYgKHMgPiB0KSB7CisgICAgICBUT09NNkhfTVVMX1JFQyhyMCwgYXAgKyBwICogbiwgcywgYnAgKyBxICogbiwgdCwgd3NpKTsKKyAgICB9IGVsc2UgeworICAgICAgVE9PTTZIX01VTF9SRUMocjAsIGJwICsgcSAqIG4sIHQsIGFwICsgcCAqIG4sIHMsIHdzaSk7CisgICAgfTsKKyAgfTsKKworICBtcG5fdG9vbV9pbnRlcnBvbGF0ZV8xMnB0cyAocHAsIHIxLCByMywgcjUsIG4sIHMrdCwgaGFsZiwgd3NpKTsKKworI3VuZGVmIHIwCisjdW5kZWYgcjEKKyN1bmRlZiByMgorI3VuZGVmIHIzCisjdW5kZWYgcjQKKyN1bmRlZiByNQorI3VuZGVmIHdzaQorfQorCisjdW5kZWYgVE9PTTZIX01VTF9OX1JFQworI3VuZGVmIFRPT002SF9NVUxfUkVDCisjdW5kZWYgTUFZQkVfbXVsX2Jhc2VjYXNlCisjdW5kZWYgTUFZQkVfbXVsX3Rvb20yMgorI3VuZGVmIE1BWUJFX211bF90b29tMzMKKyN1bmRlZiBNQVlCRV9tdWxfdG9vbTZoCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvdG9vbThfc3FyLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvdG9vbThfc3FyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNlNWM2NAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy90b29tOF9zcXIuYwpAQCAtMCwwICsxLDIyNSBAQAorLyogSW1wbGVtZW50YXRpb24gb2YgdGhlIHNxdWFyaW5nIGFsZ29yaXRobSB3aXRoIFRvb20tQ29vayA4LjUtd2F5LgorCisgICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgTWFyY28gQm9kcmF0by4KKworICAgVEhFIEZVTkNUSU9OIElOIFRISVMgRklMRSBJUyBJTlRFUk5BTCBXSVRIIEEgTVVUQUJMRSBJTlRFUkZBQ0UuICBJVCBJUyBPTkxZCisgICBTQUZFIFRPIFJFQUNIIElUIFRIUk9VR0ggRE9DVU1FTlRFRCBJTlRFUkZBQ0VTLiAgSU4gRkFDVCwgSVQgSVMgQUxNT1NUCisgICBHVUFSQU5URUVEIFRIQVQgSVQgV0lMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEgRlVUVVJFIEdOVSBNUCBSRUxFQVNFLgorCitDb3B5cmlnaHQgMjAwOSwgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworI2lmIEdNUF9OVU1CX0JJVFMgPCAyOQorI2Vycm9yIE5vdCBpbXBsZW1lbnRlZC4KKyNlbmRpZgorCisjaWYgR01QX05VTUJfQklUUyA8IDQzCisjZGVmaW5lIEJJVF9DT1JSRUNUSU9OIDEKKyNkZWZpbmUgQ09SUkVDVElPTl9CSVRTIEdNUF9OVU1CX0JJVFMKKyNlbHNlCisjZGVmaW5lIEJJVF9DT1JSRUNUSU9OIDAKKyNkZWZpbmUgQ09SUkVDVElPTl9CSVRTIDAKKyNlbmRpZgorCisjaWZuZGVmIFNRUl9UT09NOF9USFJFU0hPTEQKKyNkZWZpbmUgU1FSX1RPT004X1RIUkVTSE9MRCBNVUxfVE9PTThIX1RIUkVTSE9MRAorI2VuZGlmCisKKyNpZm5kZWYgU1FSX1RPT002X1RIUkVTSE9MRAorI2RlZmluZSBTUVJfVE9PTTZfVEhSRVNIT0xEIE1VTF9UT09NNkhfVEhSRVNIT0xECisjZW5kaWYKKworI2lmIFRVTkVfUFJPR1JBTV9CVUlMRAorI2RlZmluZSBNQVlCRV9zcXJfYmFzZWNhc2UgMQorI2RlZmluZSBNQVlCRV9zcXJfYWJvdmVfYmFzZWNhc2UgICAxCisjZGVmaW5lIE1BWUJFX3Nxcl90b29tMiAgIDEKKyNkZWZpbmUgTUFZQkVfc3FyX2Fib3ZlX3Rvb20yICAgMQorI2RlZmluZSBNQVlCRV9zcXJfdG9vbTMgICAxCisjZGVmaW5lIE1BWUJFX3Nxcl9hYm92ZV90b29tMyAgIDEKKyNkZWZpbmUgTUFZQkVfc3FyX3Rvb200ICAgMQorI2RlZmluZSBNQVlCRV9zcXJfYWJvdmVfdG9vbTQgICAxCisjZGVmaW5lIE1BWUJFX3Nxcl9hYm92ZV90b29tNiAgIDEKKyNlbHNlCisjZGVmaW5lIFNRUl9UT09NOF9NQVgJCQkJCVwKKyAgKChTUVJfRkZUX1RIUkVTSE9MRCA8PSBNUF9TSVpFX1RfTUFYIC0gKDgqMi0xKzcpKSA/CVwKKyAgICgoU1FSX0ZGVF9USFJFU0hPTEQrOCoyLTErNykvOCkJCQlcCisgICA6IE1QX1NJWkVfVF9NQVggKQorI2RlZmluZSBNQVlCRV9zcXJfYmFzZWNhc2UJCQkJCVwKKyAgKFNRUl9UT09NOF9USFJFU0hPTEQgPCA4ICogU1FSX1RPT00yX1RIUkVTSE9MRCkKKyNkZWZpbmUgTUFZQkVfc3FyX2Fib3ZlX2Jhc2VjYXNlCQkJCVwKKyAgKFNRUl9UT09NOF9NQVggPj0gU1FSX1RPT00yX1RIUkVTSE9MRCkKKyNkZWZpbmUgTUFZQkVfc3FyX3Rvb20yCQkJCQkJXAorICAoU1FSX1RPT004X1RIUkVTSE9MRCA8IDggKiBTUVJfVE9PTTNfVEhSRVNIT0xEKQorI2RlZmluZSBNQVlCRV9zcXJfYWJvdmVfdG9vbTIJCQkJCVwKKyAgKFNRUl9UT09NOF9NQVggPj0gU1FSX1RPT00zX1RIUkVTSE9MRCkKKyNkZWZpbmUgTUFZQkVfc3FyX3Rvb20zCQkJCQkJXAorICAoU1FSX1RPT004X1RIUkVTSE9MRCA8IDggKiBTUVJfVE9PTTRfVEhSRVNIT0xEKQorI2RlZmluZSBNQVlCRV9zcXJfYWJvdmVfdG9vbTMJCQkJCVwKKyAgKFNRUl9UT09NOF9NQVggPj0gU1FSX1RPT000X1RIUkVTSE9MRCkKKyNkZWZpbmUgTUFZQkVfc3FyX3Rvb200CQkJCQkJXAorICAoU1FSX1RPT004X1RIUkVTSE9MRCA8IDggKiBTUVJfVE9PTTZfVEhSRVNIT0xEKQorI2RlZmluZSBNQVlCRV9zcXJfYWJvdmVfdG9vbTQJCQkJCVwKKyAgKFNRUl9UT09NOF9NQVggPj0gU1FSX1RPT002X1RIUkVTSE9MRCkKKyNkZWZpbmUgTUFZQkVfc3FyX2Fib3ZlX3Rvb202CQkJCQlcCisgIChTUVJfVE9PTThfTUFYID49IFNRUl9UT09NOF9USFJFU0hPTEQpCisjZW5kaWYKKworI2RlZmluZSBUT09NOF9TUVJfUkVDKHAsIGEsIGYsIHAyLCBhMiwgbiwgd3MpCQkJCVwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBpZiAoTUFZQkVfc3FyX2Jhc2VjYXNlICYmICggIU1BWUJFX3Nxcl9hYm92ZV9iYXNlY2FzZQkJXAorCXx8IEJFTE9XX1RIUkVTSE9MRCAobiwgU1FSX1RPT00yX1RIUkVTSE9MRCkpKSB7CQkJXAorICAgICAgbXBuX3Nxcl9iYXNlY2FzZSAocCwgYSwgbik7CQkJCQlcCisgICAgICBpZiAoZikgbXBuX3Nxcl9iYXNlY2FzZSAocDIsIGEyLCBuKTsJCQkJXAorICAgIH0gZWxzZSBpZiAoTUFZQkVfc3FyX3Rvb20yICYmICggIU1BWUJFX3Nxcl9hYm92ZV90b29tMgkJXAorCSAgICAgfHwgQkVMT1dfVEhSRVNIT0xEIChuLCBTUVJfVE9PTTNfVEhSRVNIT0xEKSkpIHsJCVwKKyAgICAgIG1wbl90b29tMl9zcXIgKHAsIGEsIG4sIHdzKTsJCQkJCVwKKyAgICAgIGlmIChmKSBtcG5fdG9vbTJfc3FyIChwMiwgYTIsIG4sIHdzKTsJCQkJXAorICAgIH0gZWxzZSBpZiAoTUFZQkVfc3FyX3Rvb20zICYmICggIU1BWUJFX3Nxcl9hYm92ZV90b29tMwkJXAorCSAgICAgfHwgQkVMT1dfVEhSRVNIT0xEIChuLCBTUVJfVE9PTTRfVEhSRVNIT0xEKSkpIHsJCVwKKyAgICAgIG1wbl90b29tM19zcXIgKHAsIGEsIG4sIHdzKTsJCQkJCVwKKyAgICAgIGlmIChmKSBtcG5fdG9vbTNfc3FyIChwMiwgYTIsIG4sIHdzKTsJCQkJXAorICAgIH0gZWxzZSBpZiAoTUFZQkVfc3FyX3Rvb200ICYmICggIU1BWUJFX3Nxcl9hYm92ZV90b29tNAkJXAorCSAgICAgfHwgQkVMT1dfVEhSRVNIT0xEIChuLCBTUVJfVE9PTTZfVEhSRVNIT0xEKSkpIHsJCVwKKyAgICAgIG1wbl90b29tNF9zcXIgKHAsIGEsIG4sIHdzKTsJCQkJCVwKKyAgICAgIGlmIChmKSBtcG5fdG9vbTRfc3FyIChwMiwgYTIsIG4sIHdzKTsJCQkJXAorICAgIH0gZWxzZSBpZiAoISBNQVlCRV9zcXJfYWJvdmVfdG9vbTYJCQkJCVwKKwkgICAgIHx8IEJFTE9XX1RIUkVTSE9MRCAobiwgU1FSX1RPT004X1RIUkVTSE9MRCkpIHsJCVwKKyAgICAgIG1wbl90b29tNl9zcXIgKHAsIGEsIG4sIHdzKTsJCQkJCVwKKyAgICAgIGlmIChmKSBtcG5fdG9vbTZfc3FyIChwMiwgYTIsIG4sIHdzKTsJCQkJXAorICAgIH0gZWxzZSB7CQkJCQkJCQlcCisgICAgICBtcG5fdG9vbThfc3FyIChwLCBhLCBuLCB3cyk7CQkJCQlcCisgICAgICBpZiAoZikgbXBuX3Rvb204X3NxciAocDIsIGEyLCBuLCB3cyk7CQkJCVwKKyAgICB9CQkJCQkJCQkJXAorICB9IHdoaWxlICgwKQorCit2b2lkCittcG5fdG9vbThfc3FyICAobXBfcHRyIHBwLCBtcF9zcmNwdHIgYXAsIG1wX3NpemVfdCBhbiwgbXBfcHRyIHNjcmF0Y2gpCit7CisgIG1wX3NpemVfdCBuLCBzOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBkZWNvbXBvc2l0aW9uICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgQVNTRVJUICggYW4gPj0gNDAgKTsKKworICBuID0gMSArICgoYW4gLSAxKT4+Myk7CisKKyAgcyA9IGFuIC0gNyAqIG47CisKKyAgQVNTRVJUICgwIDwgcyAmJiBzIDw9IG4pOworICBBU1NFUlQgKCBzICsgcyA+IDMgKTsKKworI2RlZmluZSAgIHI2ICAgIChwcCArIDMgKiBuKQkJCS8qIDNuKzEgKi8KKyNkZWZpbmUgICByNCAgICAocHAgKyA3ICogbikJCQkvKiAzbisxICovCisjZGVmaW5lICAgcjIgICAgKHBwICsxMSAqIG4pCQkJLyogM24rMSAqLworI2RlZmluZSAgIHIwICAgIChwcCArMTUgKiBuKQkJCS8qIHMrdCA8PSAyKm4gKi8KKyNkZWZpbmUgICByNyAgICAoc2NyYXRjaCkJCQkvKiAzbisxICovCisjZGVmaW5lICAgcjUgICAgKHNjcmF0Y2ggKyAzICogbiArIDEpCQkvKiAzbisxICovCisjZGVmaW5lICAgcjMgICAgKHNjcmF0Y2ggKyA2ICogbiArIDIpCQkvKiAzbisxICovCisjZGVmaW5lICAgcjEgICAgKHNjcmF0Y2ggKyA5ICogbiArIDMpCQkvKiAzbisxICovCisjZGVmaW5lICAgdjAgICAgKHBwICsxMSAqIG4pCQkJLyogbisxICovCisjZGVmaW5lICAgdjIgICAgKHBwICsxMyAqIG4rMikJCQkvKiBuKzEgKi8KKyNkZWZpbmUgICB3c2UgICAoc2NyYXRjaCArMTIgKiBuICsgNCkJCS8qIDNuKzEgKi8KKworICAvKiBBbGxvYyBhbHNvIDNuKzEgbGltYnMgZm9yIHdzLi4uIHRvb21faW50ZXJwb2xhdGVfMTZwdHMgbWF5CisgICAgIG5lZWQgYWxsIG9mIHRoZW0sIHdoZW4gRE9fbXBuX3N1YmxzaF9uIHVzZWEgYSBzY3JhdGNoICAqLworLyogICBpZiAoc2NyYXRjaCA9PSBOVUxMKSAqLworLyogICAgIHNjcmF0Y2ggPSBUTVBfU0FMTE9DX0xJTUJTICgzMCAqIG4gKyA2KTsgKi8KKworICAvKioqKioqKioqKioqKioqKioqKioqKiBldmFsdWF0aW9uIGFuZCByZWN1cnNpdmUgY2FsbHMgKioqKioqKioqKioqKioqKioqKioqLworICAvKiAkXHBtMS84JCAqLworICBtcG5fdG9vbV9ldmFsX3BtMnJleHAgKHYyLCB2MCwgNywgYXAsIG4sIHMsIDMsIHBwKTsKKyAgLyogQSgtMS84KSpCKC0xLzgpKjheLiAqLyAvKiBBKCsxLzgpKkIoKzEvOCkqOF4uICovCisgIFRPT004X1NRUl9SRUMocHAsIHYwLCAyLCByNywgdjIsIG4gKyAxLCB3c2UpOworICBtcG5fdG9vbV9jb3VwbGVfaGFuZGxpbmcgKHI3LCAyICogbiArIDEgKyBCSVRfQ09SUkVDVElPTiwgcHAsIDAsIG4sIDMsIDApOworCisgIC8qICRccG0xLzQkICovCisgIG1wbl90b29tX2V2YWxfcG0ycmV4cCAodjIsIHYwLCA3LCBhcCwgbiwgcywgMiwgcHApOworICAvKiBBKC0xLzQpKkIoLTEvNCkqNF4uICovIC8qIEEoKzEvNCkqQigrMS80KSo0Xi4gKi8KKyAgVE9PTThfU1FSX1JFQyhwcCwgdjAsIDIsIHI1LCB2MiwgbiArIDEsIHdzZSk7CisgIG1wbl90b29tX2NvdXBsZV9oYW5kbGluZyAocjUsIDIgKiBuICsgMSwgcHAsIDAsIG4sIDIsIDApOworCisgIC8qICRccG0yJCAqLworICBtcG5fdG9vbV9ldmFsX3BtMiAodjIsIHYwLCA3LCBhcCwgbiwgcywgcHApOworICAvKiBBKC0yKSpCKC0yKSAqLyAvKiBBKCsyKSpCKCsyKSAqLworICBUT09NOF9TUVJfUkVDKHBwLCB2MCwgMiwgcjMsIHYyLCBuICsgMSwgd3NlKTsKKyAgbXBuX3Rvb21fY291cGxlX2hhbmRsaW5nIChyMywgMiAqIG4gKyAxLCBwcCwgMCwgbiwgMSwgMik7CisKKyAgLyogJFxwbTgkICovCisgIG1wbl90b29tX2V2YWxfcG0yZXhwICh2MiwgdjAsIDcsIGFwLCBuLCBzLCAzLCBwcCk7CisgIC8qIEEoLTgpKkIoLTgpICovIC8qIEEoKzgpKkIoKzgpICovCisgIFRPT004X1NRUl9SRUMocHAsIHYwLCAyLCByMSwgdjIsIG4gKyAxLCB3c2UpOworICBtcG5fdG9vbV9jb3VwbGVfaGFuZGxpbmcgKHIxLCAyICogbiArIDEgKyBCSVRfQ09SUkVDVElPTiwgcHAsIDAsIG4sIDMsIDYpOworCisgIC8qICRccG0xLzIkICovCisgIG1wbl90b29tX2V2YWxfcG0ycmV4cCAodjIsIHYwLCA3LCBhcCwgbiwgcywgMSwgcHApOworICAvKiBBKC0xLzIpKkIoLTEvMikqMl4uICovIC8qIEEoKzEvMikqQigrMS8yKSoyXi4gKi8KKyAgVE9PTThfU1FSX1JFQyhwcCwgdjAsIDIsIHI2LCB2MiwgbiArIDEsIHdzZSk7CisgIG1wbl90b29tX2NvdXBsZV9oYW5kbGluZyAocjYsIDIgKiBuICsgMSwgcHAsIDAsIG4sIDEsIDApOworCisgIC8qICRccG0xJCAqLworICBtcG5fdG9vbV9ldmFsX3BtMSAodjIsIHYwLCA3LCBhcCwgbiwgcywgICAgcHApOworICAvKiBBKC0xKSpCKC0xKSAqLyAvKiBBKDEpKkIoMSkgKi8KKyAgVE9PTThfU1FSX1JFQyhwcCwgdjAsIDIsIHI0LCB2MiwgbiArIDEsIHdzZSk7CisgIG1wbl90b29tX2NvdXBsZV9oYW5kbGluZyAocjQsIDIgKiBuICsgMSwgcHAsIDAsIG4sIDAsIDApOworCisgIC8qICRccG00JCAqLworICBtcG5fdG9vbV9ldmFsX3BtMmV4cCAodjIsIHYwLCA3LCBhcCwgbiwgcywgMiwgcHApOworICAvKiBBKC00KSpCKC00KSAqLyAvKiBBKCs0KSpCKCs0KSAqLworICBUT09NOF9TUVJfUkVDKHBwLCB2MCwgMiwgcjIsIHYyLCBuICsgMSwgd3NlKTsKKyAgbXBuX3Rvb21fY291cGxlX2hhbmRsaW5nIChyMiwgMiAqIG4gKyAxLCBwcCwgMCwgbiwgMiwgNCk7CisKKyN1bmRlZiB2MAorI3VuZGVmIHYyCisKKyAgLyogQSgwKSpCKDApICovCisgIFRPT004X1NRUl9SRUMocHAsIGFwLCAwLCBwcCwgYXAsIG4sIHdzZSk7CisKKyAgbXBuX3Rvb21faW50ZXJwb2xhdGVfMTZwdHMgKHBwLCByMSwgcjMsIHI1LCByNywgbiwgMiAqIHMsIDAsIHdzZSk7CisKKyN1bmRlZiByMAorI3VuZGVmIHIxCisjdW5kZWYgcjIKKyN1bmRlZiByMworI3VuZGVmIHI0CisjdW5kZWYgcjUKKyN1bmRlZiByNgorI3VuZGVmIHdzZQorCit9CisKKyN1bmRlZiBUT09NOF9TUVJfUkVDCisjdW5kZWYgTUFZQkVfc3FyX2Jhc2VjYXNlCisjdW5kZWYgTUFZQkVfc3FyX2Fib3ZlX2Jhc2VjYXNlCisjdW5kZWYgTUFZQkVfc3FyX3Rvb20yCisjdW5kZWYgTUFZQkVfc3FyX2Fib3ZlX3Rvb20yCisjdW5kZWYgTUFZQkVfc3FyX3Rvb20zCisjdW5kZWYgTUFZQkVfc3FyX2Fib3ZlX3Rvb20zCisjdW5kZWYgTUFZQkVfc3FyX2Fib3ZlX3Rvb200CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvdG9vbThoX211bC5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Rvb204aF9tdWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmEyNTlhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Rvb204aF9tdWwuYwpAQCAtMCwwICsxLDMwNSBAQAorLyogSW1wbGVtZW50YXRpb24gb2YgdGhlIG11bHRpcGxpY2F0aW9uIGFsZ29yaXRobSBmb3IgVG9vbS1Db29rIDguNS13YXkuCisKKyAgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBNYXJjbyBCb2RyYXRvLgorCisgICBUSEUgRlVOQ1RJT04gSU4gVEhJUyBGSUxFIElTIElOVEVSTkFMIFdJVEggQSBNVVRBQkxFIElOVEVSRkFDRS4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggSVQgVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuICBJTiBGQUNULCBJVCBJUyBBTE1PU1QKKyAgIEdVQVJBTlRFRUQgVEhBVCBJVCBXSUxMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR05VIE1QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAyMDA5LCAyMDEwLCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCisKKyNpZiBHTVBfTlVNQl9CSVRTIDwgMjkKKyNlcnJvciBOb3QgaW1wbGVtZW50ZWQuCisjZW5kaWYKKworI2lmIEdNUF9OVU1CX0JJVFMgPCA0MworI2RlZmluZSBCSVRfQ09SUkVDVElPTiAxCisjZGVmaW5lIENPUlJFQ1RJT05fQklUUyBHTVBfTlVNQl9CSVRTCisjZWxzZQorI2RlZmluZSBCSVRfQ09SUkVDVElPTiAwCisjZGVmaW5lIENPUlJFQ1RJT05fQklUUyAwCisjZW5kaWYKKworCisjaWYgVFVORV9QUk9HUkFNX0JVSUxECisjZGVmaW5lIE1BWUJFX211bF9iYXNlY2FzZSAxCisjZGVmaW5lIE1BWUJFX211bF90b29tMjIgICAxCisjZGVmaW5lIE1BWUJFX211bF90b29tMzMgICAxCisjZGVmaW5lIE1BWUJFX211bF90b29tNDQgICAxCisjZGVmaW5lIE1BWUJFX211bF90b29tOGggICAxCisjZWxzZQorI2RlZmluZSBNQVlCRV9tdWxfYmFzZWNhc2UJCQkJCQlcCisgIChNVUxfVE9PTThIX1RIUkVTSE9MRCA8IDggKiBNVUxfVE9PTTIyX1RIUkVTSE9MRCkKKyNkZWZpbmUgTUFZQkVfbXVsX3Rvb20yMgkJCQkJCVwKKyAgKE1VTF9UT09NOEhfVEhSRVNIT0xEIDwgOCAqIE1VTF9UT09NMzNfVEhSRVNIT0xEKQorI2RlZmluZSBNQVlCRV9tdWxfdG9vbTMzCQkJCQkJXAorICAoTVVMX1RPT004SF9USFJFU0hPTEQgPCA4ICogTVVMX1RPT000NF9USFJFU0hPTEQpCisjZGVmaW5lIE1BWUJFX211bF90b29tNDQJCQkJCQlcCisgIChNVUxfVE9PTThIX1RIUkVTSE9MRCA8IDggKiBNVUxfVE9PTTZIX1RIUkVTSE9MRCkKKyNkZWZpbmUgTUFZQkVfbXVsX3Rvb204aAkJCQkJCVwKKyAgKE1VTF9GRlRfVEhSRVNIT0xEID49IDggKiBNVUxfVE9PTThIX1RIUkVTSE9MRCkKKyNlbmRpZgorCisjZGVmaW5lIFRPT004SF9NVUxfTl9SRUMocCwgYSwgYiwgZiwgcDIsIGEyLCBiMiwgbiwgd3MpCQkJXAorICBkbyB7CQkJCQkJCQkJXAorICAgIGlmIChNQVlCRV9tdWxfYmFzZWNhc2UJCQkJCQlcCisJJiYgQkVMT1dfVEhSRVNIT0xEIChuLCBNVUxfVE9PTTIyX1RIUkVTSE9MRCkpIHsJCQlcCisgICAgICBtcG5fbXVsX2Jhc2VjYXNlIChwLCBhLCBuLCBiLCBuKTsJCQkJCVwKKyAgICAgIGlmIChmKSBtcG5fbXVsX2Jhc2VjYXNlIChwMiwgYTIsIG4sIGIyLCBuKTsJCQlcCisgICAgfSBlbHNlIGlmIChNQVlCRV9tdWxfdG9vbTIyCQkJCQkJXAorCSAgICAgJiYgQkVMT1dfVEhSRVNIT0xEIChuLCBNVUxfVE9PTTMzX1RIUkVTSE9MRCkpIHsJCVwKKyAgICAgIG1wbl90b29tMjJfbXVsIChwLCBhLCBuLCBiLCBuLCB3cyk7CQkJCVwKKyAgICAgIGlmIChmKSBtcG5fdG9vbTIyX211bCAocDIsIGEyLCBuLCBiMiwgbiwgd3MpOwkJCVwKKyAgICB9IGVsc2UgaWYgKE1BWUJFX211bF90b29tMzMJCQkJCQlcCisJICAgICAmJiBCRUxPV19USFJFU0hPTEQgKG4sIE1VTF9UT09NNDRfVEhSRVNIT0xEKSkgewkJXAorICAgICAgbXBuX3Rvb20zM19tdWwgKHAsIGEsIG4sIGIsIG4sIHdzKTsJCQkJXAorICAgICAgaWYgKGYpIG1wbl90b29tMzNfbXVsIChwMiwgYTIsIG4sIGIyLCBuLCB3cyk7CQkJXAorICAgIH0gZWxzZSBpZiAoTUFZQkVfbXVsX3Rvb200NAkJCQkJCVwKKwkgICAgICYmIEJFTE9XX1RIUkVTSE9MRCAobiwgTVVMX1RPT002SF9USFJFU0hPTEQpKSB7CQlcCisgICAgICBtcG5fdG9vbTQ0X211bCAocCwgYSwgbiwgYiwgbiwgd3MpOwkJCQlcCisgICAgICBpZiAoZikgbXBuX3Rvb200NF9tdWwgKHAyLCBhMiwgbiwgYjIsIG4sIHdzKTsJCQlcCisgICAgfSBlbHNlIGlmICghIE1BWUJFX211bF90b29tOGgJCQkJCVwKKwkgICAgIHx8IEJFTE9XX1RIUkVTSE9MRCAobiwgTVVMX1RPT004SF9USFJFU0hPTEQpKSB7CQlcCisgICAgICBtcG5fdG9vbTZoX211bCAocCwgYSwgbiwgYiwgbiwgd3MpOwkJCQlcCisgICAgICBpZiAoZikgbXBuX3Rvb202aF9tdWwgKHAyLCBhMiwgbiwgYjIsIG4sIHdzKTsJCQlcCisgICAgfSBlbHNlIHsJCQkJCQkJCVwKKyAgICAgIG1wbl90b29tOGhfbXVsIChwLCBhLCBuLCBiLCBuLCB3cyk7CQkJCVwKKyAgICAgIGlmIChmKSBtcG5fdG9vbThoX211bCAocDIsIGEyLCBuLCBiMiwgbiwgd3MpOwkJCVwKKyAgICB9CQkJCQkJCQkJXAorICB9IHdoaWxlICgwKQorCisjZGVmaW5lIFRPT004SF9NVUxfUkVDKHAsIGEsIG5hLCBiLCBuYiwgd3MpCQlcCisgIGRvIHsgbXBuX211bCAocCwgYSwgbmEsIGIsIG5iKTsgfSB3aGlsZSAoMCkKKworLyogVG9vbS04LjUgLCBjb21wdXRlIHRoZSBwcm9kdWN0IHtwcCxhbitibn0gPC0ge2FwLGFufSAqIHticCxibn0KKyAgIFdpdGg6IGFuID49IGJuID49IDg2LCBhbio1IDwgIGJuICogMTEuCisgICBJdCBfbWF5XyB3b3JrIHdpdGggYm48PT8/IGFuZCBibio/PyA8IGFuKj8gPCBibio/PworCisgICBFdmFsdWF0ZSBpbjogaW5maW5pdHksICs4LC04LCs0LC00LCsyLC0yLCsxLC0xLCsxLzIsLTEvMiwrMS80LC0xLzQsKzEvOCwtMS84LDAuCisqLworLyogRXN0aW1hdGUgb24gbmVlZGVkIHNjcmF0Y2g6CisgICBTKG4pIDw9IChuKzcpXDgqMTMrNStNQVgoUygobis3KVw4KSwxKzIqKG4rNylcOCksCisgICBzaW5jZSBuPjgwOyBTKG4pIDw9IGNlaWwobG9nKG4vMTApL2xvZyg4KSkqKDEzKzUpK24qMTVcOCA8IG4qMTVcOCArIGxnMihuKSo2CisgKi8KKwordm9pZAorbXBuX3Rvb204aF9tdWwgICAobXBfcHRyIHBwLAorCQkgIG1wX3NyY3B0ciBhcCwgbXBfc2l6ZV90IGFuLAorCQkgIG1wX3NyY3B0ciBicCwgbXBfc2l6ZV90IGJuLCBtcF9wdHIgc2NyYXRjaCkKK3sKKyAgbXBfc2l6ZV90IG4sIHMsIHQ7CisgIGludCBwLCBxLCBoYWxmOworICBpbnQgc2lnbjsKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogZGVjb21wb3NpdGlvbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIEFTU0VSVCAoYW4gPj0gYm4pOworICAvKiBDYW4gbm90IGhhbmRsZSB0b28gc21hbGwgb3BlcmFuZHMgKi8KKyAgQVNTRVJUIChibiA+PSA4Nik7CisgIC8qIENhbiBub3QgaGFuZGxlIHRvbyBtdWNoIHVuYmFsYW5jZW1lbnQgKi8KKyAgQVNTRVJUIChhbiA8PSBibio0KTsKKyAgQVNTRVJUIChHTVBfTlVNQl9CSVRTID4gMTEqMyB8fCBhbio0IDw9IGJuKjExKTsKKyAgQVNTRVJUIChHTVBfTlVNQl9CSVRTID4gMTAqMyB8fCBhbioxIDw9IGJuKiAyKTsKKyAgQVNTRVJUIChHTVBfTlVNQl9CSVRTID4gIDkqMyB8fCBhbioyIDw9IGJuKiAzKTsKKworICAvKiBMaW1pdCBudW0vZGVuIGlzIGEgcmF0aW9uYWwgbnVtYmVyIGJldHdlZW4KKyAgICAgKDE2LzE1KV4obG9nKDYpL2xvZygyKjYtMSkpIGFuZCAoMTYvMTUpXihsb2coOCkvbG9nKDIqOC0xKSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTElNSVRfbnVtZXJhdG9yICgyMSkKKyNkZWZpbmUgTElNSVRfZGVub21pbmF0ICgyMCkKKworICBpZiAoTElLRUxZIChhbiA9PSBibikgfHwgYW4gKiAoTElNSVRfZGVub21pbmF0Pj4xKSA8IExJTUlUX251bWVyYXRvciAqIChibj4+MSkgKSAvKiBpcyA4Ki4uLiA8IDgqLi4uICovCisgICAgeworICAgICAgaGFsZiA9IDA7CisgICAgICBuID0gMSArICgoYW4gLSAxKT4+Myk7CisgICAgICBwID0gcSA9IDc7CisgICAgICBzID0gYW4gLSA3ICogbjsKKyAgICAgIHQgPSBibiAtIDcgKiBuOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChhbiAqIDEzIDwgMTYgKiBibikgLyogKGFuKjcqTElNSVRfbnVtZXJhdG9yPExJTUlUX2Rlbm9taW5hdCo5KmJuKSAqLworCXsgcCA9IDk7IHEgPSA4OyB9CisgICAgICBlbHNlIGlmIChHTVBfTlVNQl9CSVRTIDw9IDkqMyB8fAorCSAgICAgICBhbiAqKExJTUlUX2Rlbm9taW5hdD4+MSkgPCAoTElNSVRfbnVtZXJhdG9yLzcqOSkgKiAoYm4+PjEpKQorCXsgcCA9IDk7IHEgPSA3OyB9CisgICAgICBlbHNlIGlmIChhbiAqIDEwIDwgMzMgKiAoYm4+PjEpKSAvKiAoYW4qMypMSU1JVF9udW1lcmF0b3I8TElNSVRfZGVub21pbmF0KjUqYm4pICovCisJeyBwID0xMDsgcSA9IDc7IH0KKyAgICAgIGVsc2UgaWYgKEdNUF9OVU1CX0JJVFMgPD0gMTAqMyB8fAorCSAgICAgICBhbiAqIChMSU1JVF9kZW5vbWluYXQvNSkgPCAoTElNSVRfbnVtZXJhdG9yLzMpICogYm4pCisJeyBwID0xMDsgcSA9IDY7IH0KKyAgICAgIGVsc2UgaWYgKGFuICogNiA8IDEzICogYm4pIC8qKGFuICogNSAqIExJTUlUX251bWVyYXRvciA8IExJTUlUX2Rlbm9taW5hdCAqMTEgKiBibikqLworCXsgcCA9MTE7IHEgPSA2OyB9CisgICAgICBlbHNlIGlmIChHTVBfTlVNQl9CSVRTIDw9IDExKjMgfHwKKwkgICAgICAgYW4gKiA0IDwgOSAqIGJuKQorCXsgcCA9MTE7IHEgPSA1OyB9CisgICAgICBlbHNlIGlmIChhbiAqKExJTUlUX251bWVyYXRvci8zKSA8IExJTUlUX2Rlbm9taW5hdCAqIGJuKSAgLyogaXMgNCouLi4gPDEyKi4uLiAqLworCXsgcCA9MTI7IHEgPSA1OyB9CisgICAgICBlbHNlIGlmIChHTVBfTlVNQl9CSVRTIDw9IDEyKjMgfHwKKwkgICAgICAgYW4gKiA5IDwgMjggKiBibiApICAvKiBpcyA0Ki4uLiA8MTIqLi4uICovCisJeyBwID0xMjsgcSA9IDQ7IH0KKyAgICAgIGVsc2UKKwl7IHAgPTEzOyBxID0gNDsgfQorCisgICAgICBoYWxmID0gKHArcSkmMTsKKyAgICAgIG4gPSAxICsgKHEgKiBhbiA+PSBwICogYm4gPyAoYW4gLSAxKSAvIChzaXplX3QpIHAgOiAoYm4gLSAxKSAvIChzaXplX3QpIHEpOworICAgICAgcC0tOyBxLS07CisKKyAgICAgIHMgPSBhbiAtIHAgKiBuOworICAgICAgdCA9IGJuIC0gcSAqIG47CisKKyAgICAgIGlmKGhhbGYpIHsgLyogUmVjb3ZlciBmcm9tIGJhZGx5IGNob3NlbiBzcGxpdHRpbmcgKi8KKwlpZiAoVU5MSUtFTFkgKHM8MSkpIHtwLS07IHMrPW47IGhhbGY9MDt9CisJZWxzZSBpZiAoVU5MSUtFTFkgKHQ8MSkpIHtxLS07IHQrPW47IGhhbGY9MDt9CisgICAgICB9CisgICAgfQorI3VuZGVmIExJTUlUX251bWVyYXRvcgorI3VuZGVmIExJTUlUX2Rlbm9taW5hdAorCisgIEFTU0VSVCAoMCA8IHMgJiYgcyA8PSBuKTsKKyAgQVNTRVJUICgwIDwgdCAmJiB0IDw9IG4pOworICBBU1NFUlQgKGhhbGYgfHwgcyArIHQgPiAzKTsKKyAgQVNTRVJUIChuID4gMik7CisKKyNkZWZpbmUgICByNiAgICAocHAgKyAzICogbikJCQkvKiAzbisxICovCisjZGVmaW5lICAgcjQgICAgKHBwICsgNyAqIG4pCQkJLyogM24rMSAqLworI2RlZmluZSAgIHIyICAgIChwcCArMTEgKiBuKQkJCS8qIDNuKzEgKi8KKyNkZWZpbmUgICByMCAgICAocHAgKzE1ICogbikJCQkvKiBzK3QgPD0gMipuICovCisjZGVmaW5lICAgcjcgICAgKHNjcmF0Y2gpCQkJLyogM24rMSAqLworI2RlZmluZSAgIHI1ICAgIChzY3JhdGNoICsgMyAqIG4gKyAxKQkJLyogM24rMSAqLworI2RlZmluZSAgIHIzICAgIChzY3JhdGNoICsgNiAqIG4gKyAyKQkJLyogM24rMSAqLworI2RlZmluZSAgIHIxICAgIChzY3JhdGNoICsgOSAqIG4gKyAzKQkJLyogM24rMSAqLworI2RlZmluZSAgIHYwICAgIChwcCArMTEgKiBuKQkJCS8qIG4rMSAqLworI2RlZmluZSAgIHYxICAgIChwcCArMTIgKiBuKzEpCQkJLyogbisxICovCisjZGVmaW5lICAgdjIgICAgKHBwICsxMyAqIG4rMikJCQkvKiBuKzEgKi8KKyNkZWZpbmUgICB2MyAgICAoc2NyYXRjaCArMTIgKiBuICsgNCkJCS8qIG4rMSAqLworI2RlZmluZSAgIHdzaSAgIChzY3JhdGNoICsxMiAqIG4gKyA0KQkJLyogM24rMSAqLworI2RlZmluZSAgIHdzZSAgIChzY3JhdGNoICsxMyAqIG4gKyA1KQkJLyogMm4rMSAqLworCisgIC8qIEFsbG9jIGFsc28gM24rMSBsaW1icyBmb3Igd3NpLi4uIHRvb21faW50ZXJwb2xhdGVfMTZwdHMgbWF5CisgICAgIG5lZWQgYWxsIG9mIHRoZW0gICovCisvKiAgIGlmIChzY3JhdGNoID09IE5VTEwpICovCisvKiAgICAgc2NyYXRjaCA9IFRNUF9TQUxMT0NfTElNQlMobXBuX3Rvb204X3Nxcl9pdGNoKG4gKiA4KSk7ICovCisgIEFTU0VSVCAoMTUgKiBuICsgNiA8PSBtcG5fdG9vbThoX211bF9pdGNoIChhbiwgYm4pKTsKKyAgQVNTRVJUICgxNSAqIG4gKyA2IDw9IG1wbl90b29tOF9zcXJfaXRjaCAobiAqIDgpKTsKKworICAvKioqKioqKioqKioqKioqKioqKioqKiBldmFsdWF0aW9uIGFuZCByZWN1cnNpdmUgY2FsbHMgKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qICRccG0xLzgkICovCisgIHNpZ24gPSBtcG5fdG9vbV9ldmFsX3BtMnJleHAgKHYyLCB2MCwgcCwgYXAsIG4sIHMsIDMsIHBwKSBeCisJIG1wbl90b29tX2V2YWxfcG0ycmV4cCAodjMsIHYxLCBxLCBicCwgbiwgdCwgMywgcHApOworICAvKiBBKC0xLzgpKkIoLTEvOCkqOF4uICovIC8qIEEoKzEvOCkqQigrMS84KSo4Xi4gKi8KKyAgVE9PTThIX01VTF9OX1JFQyhwcCwgdjAsIHYxLCAyLCByNywgdjIsIHYzLCBuICsgMSwgd3NlKTsKKyAgbXBuX3Rvb21fY291cGxlX2hhbmRsaW5nIChyNywgMiAqIG4gKyAxICsgQklUX0NPUlJFQ1RJT04sIHBwLCBzaWduLCBuLCAzKigxK2hhbGYpLCAzKihoYWxmKSk7CisKKyAgLyogJFxwbTEvNCQgKi8KKyAgc2lnbiA9IG1wbl90b29tX2V2YWxfcG0ycmV4cCAodjIsIHYwLCBwLCBhcCwgbiwgcywgMiwgcHApIF4KKwkgbXBuX3Rvb21fZXZhbF9wbTJyZXhwICh2MywgdjEsIHEsIGJwLCBuLCB0LCAyLCBwcCk7CisgIC8qIEEoLTEvNCkqQigtMS80KSo0Xi4gKi8gLyogQSgrMS80KSpCKCsxLzQpKjReLiAqLworICBUT09NOEhfTVVMX05fUkVDKHBwLCB2MCwgdjEsIDIsIHI1LCB2MiwgdjMsIG4gKyAxLCB3c2UpOworICBtcG5fdG9vbV9jb3VwbGVfaGFuZGxpbmcgKHI1LCAyICogbiArIDEsIHBwLCBzaWduLCBuLCAyKigxK2hhbGYpLCAyKihoYWxmKSk7CisKKyAgLyogJFxwbTIkICovCisgIHNpZ24gPSBtcG5fdG9vbV9ldmFsX3BtMiAodjIsIHYwLCBwLCBhcCwgbiwgcywgcHApIF4KKwkgbXBuX3Rvb21fZXZhbF9wbTIgKHYzLCB2MSwgcSwgYnAsIG4sIHQsIHBwKTsKKyAgLyogQSgtMikqQigtMikgKi8gLyogQSgrMikqQigrMikgKi8KKyAgVE9PTThIX01VTF9OX1JFQyhwcCwgdjAsIHYxLCAyLCByMywgdjIsIHYzLCBuICsgMSwgd3NlKTsKKyAgbXBuX3Rvb21fY291cGxlX2hhbmRsaW5nIChyMywgMiAqIG4gKyAxLCBwcCwgc2lnbiwgbiwgMSwgMik7CisKKyAgLyogJFxwbTgkICovCisgIHNpZ24gPSBtcG5fdG9vbV9ldmFsX3BtMmV4cCAodjIsIHYwLCBwLCBhcCwgbiwgcywgMywgcHApIF4KKwkgbXBuX3Rvb21fZXZhbF9wbTJleHAgKHYzLCB2MSwgcSwgYnAsIG4sIHQsIDMsIHBwKTsKKyAgLyogQSgtOCkqQigtOCkgKi8gLyogQSgrOCkqQigrOCkgKi8KKyAgVE9PTThIX01VTF9OX1JFQyhwcCwgdjAsIHYxLCAyLCByMSwgdjIsIHYzLCBuICsgMSwgd3NlKTsKKyAgbXBuX3Rvb21fY291cGxlX2hhbmRsaW5nIChyMSwgMiAqIG4gKyAxICsgQklUX0NPUlJFQ1RJT04sIHBwLCBzaWduLCBuLCAzLCA2KTsKKworICAvKiAkXHBtMS8yJCAqLworICBzaWduID0gbXBuX3Rvb21fZXZhbF9wbTJyZXhwICh2MiwgdjAsIHAsIGFwLCBuLCBzLCAxLCBwcCkgXgorCSBtcG5fdG9vbV9ldmFsX3BtMnJleHAgKHYzLCB2MSwgcSwgYnAsIG4sIHQsIDEsIHBwKTsKKyAgLyogQSgtMS8yKSpCKC0xLzIpKjJeLiAqLyAvKiBBKCsxLzIpKkIoKzEvMikqMl4uICovCisgIFRPT004SF9NVUxfTl9SRUMocHAsIHYwLCB2MSwgMiwgcjYsIHYyLCB2MywgbiArIDEsIHdzZSk7CisgIG1wbl90b29tX2NvdXBsZV9oYW5kbGluZyAocjYsIDIgKiBuICsgMSwgcHAsIHNpZ24sIG4sIDEraGFsZiwgaGFsZik7CisKKyAgLyogJFxwbTEkICovCisgIHNpZ24gPSBtcG5fdG9vbV9ldmFsX3BtMSAodjIsIHYwLCBwLCBhcCwgbiwgcywgICAgcHApOworICBpZiAoR01QX05VTUJfQklUUyA+IDEyKjMgJiYgVU5MSUtFTFkgKHEgPT0gMykpCisgICAgc2lnbiBePSBtcG5fdG9vbV9ldmFsX2RncjNfcG0xICh2MywgdjEsIGJwLCBuLCB0LCAgICBwcCk7CisgIGVsc2UKKyAgICBzaWduIF49IG1wbl90b29tX2V2YWxfcG0xICh2MywgdjEsIHEsIGJwLCBuLCB0LCAgICBwcCk7CisgIC8qIEEoLTEpKkIoLTEpICovIC8qIEEoMSkqQigxKSAqLworICBUT09NOEhfTVVMX05fUkVDKHBwLCB2MCwgdjEsIDIsIHI0LCB2MiwgdjMsIG4gKyAxLCB3c2UpOworICBtcG5fdG9vbV9jb3VwbGVfaGFuZGxpbmcgKHI0LCAyICogbiArIDEsIHBwLCBzaWduLCBuLCAwLCAwKTsKKworICAvKiAkXHBtNCQgKi8KKyAgc2lnbiA9IG1wbl90b29tX2V2YWxfcG0yZXhwICh2MiwgdjAsIHAsIGFwLCBuLCBzLCAyLCBwcCkgXgorCSBtcG5fdG9vbV9ldmFsX3BtMmV4cCAodjMsIHYxLCBxLCBicCwgbiwgdCwgMiwgcHApOworICAvKiBBKC00KSpCKC00KSAqLyAvKiBBKCs0KSpCKCs0KSAqLworICBUT09NOEhfTVVMX05fUkVDKHBwLCB2MCwgdjEsIDIsIHIyLCB2MiwgdjMsIG4gKyAxLCB3c2UpOworICBtcG5fdG9vbV9jb3VwbGVfaGFuZGxpbmcgKHIyLCAyICogbiArIDEsIHBwLCBzaWduLCBuLCAyLCA0KTsKKworI3VuZGVmIHYwCisjdW5kZWYgdjEKKyN1bmRlZiB2MgorI3VuZGVmIHYzCisjdW5kZWYgd3NlCisKKyAgLyogQSgwKSpCKDApICovCisgIFRPT004SF9NVUxfTl9SRUMocHAsIGFwLCBicCwgMCwgcHAsIGFwLCBicCwgbiwgd3NpKTsKKworICAvKiBJbmZpbml0eSAqLworICBpZiAoVU5MSUtFTFkgKGhhbGYgIT0gMCkpIHsKKyAgICBpZiAocyA+IHQpIHsKKyAgICAgIFRPT004SF9NVUxfUkVDKHIwLCBhcCArIHAgKiBuLCBzLCBicCArIHEgKiBuLCB0LCB3c2kpOworICAgIH0gZWxzZSB7CisgICAgICBUT09NOEhfTVVMX1JFQyhyMCwgYnAgKyBxICogbiwgdCwgYXAgKyBwICogbiwgcywgd3NpKTsKKyAgICB9OworICB9OworCisgIG1wbl90b29tX2ludGVycG9sYXRlXzE2cHRzIChwcCwgcjEsIHIzLCByNSwgcjcsIG4sIHMrdCwgaGFsZiwgd3NpKTsKKworI3VuZGVmIHIwCisjdW5kZWYgcjEKKyN1bmRlZiByMgorI3VuZGVmIHIzCisjdW5kZWYgcjQKKyN1bmRlZiByNQorI3VuZGVmIHI2CisjdW5kZWYgd3NpCit9CisKKyN1bmRlZiBUT09NOEhfTVVMX05fUkVDCisjdW5kZWYgVE9PTThIX01VTF9SRUMKKyN1bmRlZiBNQVlCRV9tdWxfYmFzZWNhc2UKKyN1bmRlZiBNQVlCRV9tdWxfdG9vbTIyCisjdW5kZWYgTUFZQkVfbXVsX3Rvb20zMworI3VuZGVmIE1BWUJFX211bF90b29tNDQKKyN1bmRlZiBNQVlCRV9tdWxfdG9vbThoCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvdG9vbV9jb3VwbGVfaGFuZGxpbmcuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy90b29tX2NvdXBsZV9oYW5kbGluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMjUzZjcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvdG9vbV9jb3VwbGVfaGFuZGxpbmcuYwpAQCAtMCwwICsxLDgwIEBACisvKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGhpZ2ggZGVncmVlIFRvb20tQ29vayBhbGdvcml0aG1zLgorCisgICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgTWFyY28gQm9kcmF0by4KKworICAgVEhFIEZVTkNUSU9OIElOIFRISVMgRklMRSBJUyBJTlRFUk5BTCBXSVRIIEEgTVVUQUJMRSBJTlRFUkZBQ0UuICBJVCBJUyBPTkxZCisgICBTQUZFIFRPIFJFQUNIIElUIFRIUk9VR0ggRE9DVU1FTlRFRCBJTlRFUkZBQ0VTLiAgSU4gRkFDVCwgSVQgSVMgQUxNT1NUCisgICBHVUFSQU5URUVEIFRIQVQgSVQgV0lMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEgRlVUVVJFIEdOVSBNUCBSRUxFQVNFLgorCitDb3B5cmlnaHQgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworLyogR2V0cyB7cHAsbn0gYW5kIChzaWduPy0xOjEpKntucCxufS4gQ29tcHV0ZXMgYXQgb25jZToKKyAgICAge3BwLG59IDwtICh7cHAsbn0re25wLG59KS8yXntwcysxfQorICAgICB7cG4sbn0gPC0gKHtwcCxufS17bnAsbn0pLzJee25zKzF9CisgICBGaW5hbGx5IHJlY29tcG9zZSB0aGVtIG9idGFpbmluZzoKKyAgICAge3BwLG4rb2ZmfSA8LSB7cHAsbn0re25wLG59KjJee29mZipHTVBfTlVNQl9CSVRTfQorKi8KK3ZvaWQKK21wbl90b29tX2NvdXBsZV9oYW5kbGluZyAobXBfcHRyIHBwLCBtcF9zaXplX3QgbiwgbXBfcHRyIG5wLAorCQkJICBpbnQgbnNpZ24sIG1wX3NpemVfdCBvZmYsIGludCBwcywgaW50IG5zKQoreworICBpZiAobnNpZ24pIHsKKyNpZmRlZiBIQVZFX05BVElWRV9tcG5fcnNoMXN1Yl9uCisgICAgbXBuX3JzaDFzdWJfbiAobnAsIHBwLCBucCwgbik7CisjZWxzZQorICAgIG1wbl9zdWJfbiAobnAsIHBwLCBucCwgbik7CisgICAgbXBuX3JzaGlmdCAobnAsIG5wLCBuLCAxKTsKKyNlbmRpZgorICB9IGVsc2UgeworI2lmZGVmIEhBVkVfTkFUSVZFX21wbl9yc2gxYWRkX24KKyAgICBtcG5fcnNoMWFkZF9uIChucCwgcHAsIG5wLCBuKTsKKyNlbHNlCisgICAgbXBuX2FkZF9uIChucCwgcHAsIG5wLCBuKTsKKyAgICBtcG5fcnNoaWZ0IChucCwgbnAsIG4sIDEpOworI2VuZGlmCisgIH0KKworI2lmZGVmIEhBVkVfTkFUSVZFX21wbl9yc2gxc3ViX24KKyAgaWYgKHBzID09IDEpCisgICAgbXBuX3JzaDFzdWJfbiAocHAsIHBwLCBucCwgbik7CisgIGVsc2UKKyNlbmRpZgorICB7CisgICAgbXBuX3N1Yl9uIChwcCwgcHAsIG5wLCBuKTsKKyAgICBpZiAocHMgPiAwKQorICAgICAgbXBuX3JzaGlmdCAocHAsIHBwLCBuLCBwcyk7CisgIH0KKyAgaWYgKG5zID4gMCkKKyAgICBtcG5fcnNoaWZ0IChucCwgbnAsIG4sIG5zKTsKKyAgcHBbbl0gPSBtcG5fYWRkX24gKHBwK29mZiwgcHArb2ZmLCBucCwgbi1vZmYpOworICBBU1NFUlRfTk9DQVJSWSAobXBuX2FkZF8xKHBwK24sIG5wK24tb2ZmLCBvZmYsIHBwW25dKSApOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Rvb21fZXZhbF9kZ3IzX3BtMS5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Rvb21fZXZhbF9kZ3IzX3BtMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNDkxYjYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvdG9vbV9ldmFsX2RncjNfcG0xLmMKQEAgLTAsMCArMSw3MiBAQAorLyogbXBuX3Rvb21fZXZhbF9kZ3IzX3BtMSAtLSBFdmFsdWF0ZSBhIGRlZ3JlZSAzIHBvbHlub21pYWwgaW4gKzEgYW5kIC0xCisKKyAgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBOaWVscyBNw7ZsbGVyCisKKyAgIFRIRSBGVU5DVElPTiBJTiBUSElTIEZJTEUgSVMgSU5URVJOQUwgV0lUSCBBIE1VVEFCTEUgSU5URVJGQUNFLiAgSVQgSVMgT05MWQorICAgU0FGRSBUTyBSRUFDSCBJVCBUSFJPVUdIIERPQ1VNRU5URUQgSU5URVJGQUNFUy4gIElOIEZBQ1QsIElUIElTIEFMTU9TVAorICAgR1VBUkFOVEVFRCBUSEFUIElUIFdJTEwgQ0hBTkdFIE9SIERJU0FQUEVBUiBJTiBBIEZVVFVSRSBHTlUgTVAgUkVMRUFTRS4KKworQ29weXJpZ2h0IDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisKK2ludAorbXBuX3Rvb21fZXZhbF9kZ3IzX3BtMSAobXBfcHRyIHhwMSwgbXBfcHRyIHhtMSwKKwkJCW1wX3NyY3B0ciB4cCwgbXBfc2l6ZV90IG4sIG1wX3NpemVfdCB4M24sIG1wX3B0ciB0cCkKK3sKKyAgaW50IG5lZzsKKworICBBU1NFUlQgKHgzbiA+IDApOworICBBU1NFUlQgKHgzbiA8PSBuKTsKKworICB4cDFbbl0gPSBtcG5fYWRkX24gKHhwMSwgeHAsIHhwICsgMipuLCBuKTsKKyAgdHBbbl0gPSBtcG5fYWRkICh0cCwgeHAgKyBuLCBuLCB4cCArIDMqbiwgeDNuKTsKKworICBuZWcgPSAobXBuX2NtcCAoeHAxLCB0cCwgbiArIDEpIDwgMCkgPyB+MCA6IDA7CisKKyNpZiBIQVZFX05BVElWRV9tcG5fYWRkX25fc3ViX24KKyAgaWYgKG5lZykKKyAgICBtcG5fYWRkX25fc3ViX24gKHhwMSwgeG0xLCB0cCwgeHAxLCBuICsgMSk7CisgIGVsc2UKKyAgICBtcG5fYWRkX25fc3ViX24gKHhwMSwgeG0xLCB4cDEsIHRwLCBuICsgMSk7CisjZWxzZQorICBpZiAobmVnKQorICAgIG1wbl9zdWJfbiAoeG0xLCB0cCwgeHAxLCBuICsgMSk7CisgIGVsc2UKKyAgICBtcG5fc3ViX24gKHhtMSwgeHAxLCB0cCwgbiArIDEpOworCisgIG1wbl9hZGRfbiAoeHAxLCB4cDEsIHRwLCBuICsgMSk7CisjZW5kaWYKKworICBBU1NFUlQgKHhwMVtuXSA8PSAzKTsKKyAgQVNTRVJUICh4bTFbbl0gPD0gMSk7CisKKyAgcmV0dXJuIG5lZzsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy90b29tX2V2YWxfZGdyM19wbTIuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy90b29tX2V2YWxfZGdyM19wbTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWU2Yjg5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Rvb21fZXZhbF9kZ3IzX3BtMi5jCkBAIC0wLDAgKzEsOTcgQEAKKy8qIG1wbl90b29tX2V2YWxfZGdyM19wbTIgLS0gRXZhbHVhdGUgYSBkZWdyZWUgMyBwb2x5bm9taWFsIGluICsyIGFuZCAtMgorCisgICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgTmllbHMgTcO2bGxlcgorCisgICBUSEUgRlVOQ1RJT04gSU4gVEhJUyBGSUxFIElTIElOVEVSTkFMIFdJVEggQSBNVVRBQkxFIElOVEVSRkFDRS4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggSVQgVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuICBJTiBGQUNULCBJVCBJUyBBTE1PU1QKKyAgIEdVQVJBTlRFRUQgVEhBVCBJVCBXSUxMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR05VIE1QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCisvKiBOZWVkcyBuKzEgbGltYnMgb2YgdGVtcG9yYXJ5IHN0b3JhZ2UuICovCitpbnQKK21wbl90b29tX2V2YWxfZGdyM19wbTIgKG1wX3B0ciB4cDIsIG1wX3B0ciB4bTIsCisJCQltcF9zcmNwdHIgeHAsIG1wX3NpemVfdCBuLCBtcF9zaXplX3QgeDNuLCBtcF9wdHIgdHApCit7CisgIG1wX2xpbWJfdCBjeTsKKyAgaW50IG5lZzsKKworICBBU1NFUlQgKHgzbiA+IDApOworICBBU1NFUlQgKHgzbiA8PSBuKTsKKworICAvKiAoeDAgKyA0ICogeDIpICsvLSAoMiB4MSArIDggeF8zKSAqLworI2lmIEhBVkVfTkFUSVZFX21wbl9hZGRsc2hfbiB8fCBIQVZFX05BVElWRV9tcG5fYWRkbHNoMl9uCisjaWYgSEFWRV9OQVRJVkVfbXBuX2FkZGxzaDJfbgorICB4cDJbbl0gPSBtcG5fYWRkbHNoMl9uICh4cDIsIHhwLCB4cCArIDIqbiwgbik7CisKKyAgY3kgPSBtcG5fYWRkbHNoMl9uICh0cCwgeHAgKyBuLCB4cCArIDMqbiwgeDNuKTsKKyNlbHNlIC8qIEhBVkVfTkFUSVZFX21wbl9hZGRsc2hfbiAqLworICB4cDJbbl0gPSBtcG5fYWRkbHNoX24gKHhwMiwgeHAsIHhwICsgMipuLCBuLCAyKTsKKworICBjeSA9IG1wbl9hZGRsc2hfbiAodHAsIHhwICsgbiwgeHAgKyAzKm4sIHgzbiwgMik7CisjZW5kaWYKKyAgaWYgKHgzbiA8IG4pCisgICAgY3kgPSBtcG5fYWRkXzEgKHRwICsgeDNuLCB4cCArIG4gKyB4M24sIG4gLSB4M24sIGN5KTsKKyAgdHBbbl0gPSBjeTsKKyNlbHNlCisgIGN5ID0gbXBuX2xzaGlmdCAodHAsIHhwICsgMipuLCBuLCAyKTsKKyAgeHAyW25dID0gY3kgKyBtcG5fYWRkX24gKHhwMiwgdHAsIHhwLCBuKTsKKworICB0cFt4M25dID0gbXBuX2xzaGlmdCAodHAsIHhwICsgMypuLCB4M24sIDIpOworICBpZiAoeDNuIDwgbikKKyAgICB0cFtuXSA9IG1wbl9hZGQgKHRwLCB4cCArIG4sIG4sIHRwLCB4M24gKyAxKTsKKyAgZWxzZQorICAgIHRwW25dICs9IG1wbl9hZGRfbiAodHAsIHhwICsgbiwgdHAsIG4pOworI2VuZGlmCisgIG1wbl9sc2hpZnQgKHRwLCB0cCwgbisxLCAxKTsKKworICBuZWcgPSAobXBuX2NtcCAoeHAyLCB0cCwgbiArIDEpIDwgMCkgPyB+MCA6IDA7CisKKyNpZiBIQVZFX05BVElWRV9tcG5fYWRkX25fc3ViX24KKyAgaWYgKG5lZykKKyAgICBtcG5fYWRkX25fc3ViX24gKHhwMiwgeG0yLCB0cCwgeHAyLCBuICsgMSk7CisgIGVsc2UKKyAgICBtcG5fYWRkX25fc3ViX24gKHhwMiwgeG0yLCB4cDIsIHRwLCBuICsgMSk7CisjZWxzZQorICBpZiAobmVnKQorICAgIG1wbl9zdWJfbiAoeG0yLCB0cCwgeHAyLCBuICsgMSk7CisgIGVsc2UKKyAgICBtcG5fc3ViX24gKHhtMiwgeHAyLCB0cCwgbiArIDEpOworCisgIG1wbl9hZGRfbiAoeHAyLCB4cDIsIHRwLCBuICsgMSk7CisjZW5kaWYKKworICBBU1NFUlQgKHhwMltuXSA8IDE1KTsKKyAgQVNTRVJUICh4bTJbbl0gPCAxMCk7CisKKyAgcmV0dXJuIG5lZzsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy90b29tX2V2YWxfcG0xLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvdG9vbV9ldmFsX3BtMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4Y2ZhOTMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvdG9vbV9ldmFsX3BtMS5jCkBAIC0wLDAgKzEsODkgQEAKKy8qIG1wbl90b29tX2V2YWxfcG0xIC0tIEV2YWx1YXRlIGEgcG9seW5vbWlhbCBpbiArMSBhbmQgLTEKKworICAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IE5pZWxzIE3DtmxsZXIKKworICAgVEhFIEZVTkNUSU9OIElOIFRISVMgRklMRSBJUyBJTlRFUk5BTCBXSVRIIEEgTVVUQUJMRSBJTlRFUkZBQ0UuICBJVCBJUyBPTkxZCisgICBTQUZFIFRPIFJFQUNIIElUIFRIUk9VR0ggRE9DVU1FTlRFRCBJTlRFUkZBQ0VTLiAgSU4gRkFDVCwgSVQgSVMgQUxNT1NUCisgICBHVUFSQU5URUVEIFRIQVQgSVQgV0lMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEgRlVUVVJFIEdOVSBNUCBSRUxFQVNFLgorCitDb3B5cmlnaHQgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworLyogRXZhbHVhdGVzIGEgcG9seW5vbWlhbCBvZiBkZWdyZWUgayA+IDMsIGluIHRoZSBwb2ludHMgKzEgYW5kIC0xLiAqLworaW50CittcG5fdG9vbV9ldmFsX3BtMSAobXBfcHRyIHhwMSwgbXBfcHRyIHhtMSwgdW5zaWduZWQgaywKKwkJICAgbXBfc3JjcHRyIHhwLCBtcF9zaXplX3QgbiwgbXBfc2l6ZV90IGhuLCBtcF9wdHIgdHApCit7CisgIHVuc2lnbmVkIGk7CisgIGludCBuZWc7CisKKyAgQVNTRVJUIChrID49IDQpOworCisgIEFTU0VSVCAoaG4gPiAwKTsKKyAgQVNTRVJUIChobiA8PSBuKTsKKworICAvKiBUaGUgZGVncmVlIGsgaXMgYWxzbyB0aGUgbnVtYmVyIG9mIGZ1bGwtc2l6ZSBjb2VmZmljaWVudHMsIHNvCisgICAqIHRoYXQgbGFzdCBjb2VmZmljaWVudCwgb2Ygc2l6ZSBobiwgc3RhcnRzIGF0IHhwICsgaypuLiAqLworCisgIHhwMVtuXSA9IG1wbl9hZGRfbiAoeHAxLCB4cCwgeHAgKyAyKm4sIG4pOworICBmb3IgKGkgPSA0OyBpIDwgazsgaSArPSAyKQorICAgIEFTU0VSVF9OT0NBUlJZIChtcG5fYWRkICh4cDEsIHhwMSwgbisxLCB4cCtpKm4sIG4pKTsKKworICB0cFtuXSA9IG1wbl9hZGRfbiAodHAsIHhwICsgbiwgeHAgKyAzKm4sIG4pOworICBmb3IgKGkgPSA1OyBpIDwgazsgaSArPSAyKQorICAgIEFTU0VSVF9OT0NBUlJZIChtcG5fYWRkICh0cCwgdHAsIG4rMSwgeHAraSpuLCBuKSk7CisKKyAgaWYgKGsgJiAxKQorICAgIEFTU0VSVF9OT0NBUlJZIChtcG5fYWRkICh0cCwgdHAsIG4rMSwgeHAraypuLCBobikpOworICBlbHNlCisgICAgQVNTRVJUX05PQ0FSUlkgKG1wbl9hZGQgKHhwMSwgeHAxLCBuKzEsIHhwK2sqbiwgaG4pKTsKKworICBuZWcgPSAobXBuX2NtcCAoeHAxLCB0cCwgbiArIDEpIDwgMCkgPyB+MCA6IDA7CisKKyNpZiBIQVZFX05BVElWRV9tcG5fYWRkX25fc3ViX24KKyAgaWYgKG5lZykKKyAgICBtcG5fYWRkX25fc3ViX24gKHhwMSwgeG0xLCB0cCwgeHAxLCBuICsgMSk7CisgIGVsc2UKKyAgICBtcG5fYWRkX25fc3ViX24gKHhwMSwgeG0xLCB4cDEsIHRwLCBuICsgMSk7CisjZWxzZQorICBpZiAobmVnKQorICAgIG1wbl9zdWJfbiAoeG0xLCB0cCwgeHAxLCBuICsgMSk7CisgIGVsc2UKKyAgICBtcG5fc3ViX24gKHhtMSwgeHAxLCB0cCwgbiArIDEpOworCisgIG1wbl9hZGRfbiAoeHAxLCB4cDEsIHRwLCBuICsgMSk7CisjZW5kaWYKKworICBBU1NFUlQgKHhwMVtuXSA8PSBrKTsKKyAgQVNTRVJUICh4bTFbbl0gPD0gay8yICsgMSk7CisKKyAgcmV0dXJuIG5lZzsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy90b29tX2V2YWxfcG0yLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvdG9vbV9ldmFsX3BtMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNjgyYzcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvdG9vbV9ldmFsX3BtMi5jCkBAIC0wLDAgKzEsMTMwIEBACisvKiBtcG5fdG9vbV9ldmFsX3BtMiAtLSBFdmFsdWF0ZSBhIHBvbHlub21pYWwgaW4gKzIgYW5kIC0yCisKKyAgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBOaWVscyBNw7ZsbGVyIGFuZCBNYXJjbyBCb2RyYXRvCisKKyAgIFRIRSBGVU5DVElPTiBJTiBUSElTIEZJTEUgSVMgSU5URVJOQUwgV0lUSCBBIE1VVEFCTEUgSU5URVJGQUNFLiAgSVQgSVMgT05MWQorICAgU0FGRSBUTyBSRUFDSCBJVCBUSFJPVUdIIERPQ1VNRU5URUQgSU5URVJGQUNFUy4gIElOIEZBQ1QsIElUIElTIEFMTU9TVAorICAgR1VBUkFOVEVFRCBUSEFUIElUIFdJTEwgQ0hBTkdFIE9SIERJU0FQUEVBUiBJTiBBIEZVVFVSRSBHTlUgTVAgUkVMRUFTRS4KKworQ29weXJpZ2h0IDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCisvKiBET19hZGRsc2gyKGQsYSxiLG4sY3kpIGNvbXB1dGVzIGN5LHtkLG59IDwtIHthLG59ICsgNCooY3kse2Isbn0pLCBpdAorICAgY2FuIGJlIHVzZWQgYXMgRE9fYWRkbHNoMihkLGEsZCxuLGRbbl0pLCBmb3IgYWNjdW11bGF0aW9uIG9uIHtkLG4rMX0uICovCisjaWYgSEFWRV9OQVRJVkVfbXBuX2FkZGxzaDJfbgorI2RlZmluZSBET19hZGRsc2gyKGQsIGEsIGIsIG4sIGN5KQlcCitkbyB7CQkJCQlcCisgIChjeSkgPDw9IDI7CQkJCVwKKyAgKGN5KSArPSBtcG5fYWRkbHNoMl9uKGQsIGEsIGIsIG4pOwlcCit9IHdoaWxlICgwKQorI2Vsc2UKKyNpZiBIQVZFX05BVElWRV9tcG5fYWRkbHNoX24KKyNkZWZpbmUgRE9fYWRkbHNoMihkLCBhLCBiLCBuLCBjeSkJXAorZG8gewkJCQkJXAorICAoY3kpIDw8PSAyOwkJCQlcCisgIChjeSkgKz0gbXBuX2FkZGxzaF9uKGQsIGEsIGIsIG4sIDIpOwlcCit9IHdoaWxlICgwKQorI2Vsc2UKKy8qIFRoZSBmb2xsb3dpbmcgaXMgbm90IGEgZ2VuZXJhbCBzdWJzdGl0dXRlIGZvciBhZGRsc2gyLgorICAgSXQgaXMgY29ycmVjdCBpZiBkID09IGIsIGJ1dCBpdCBpcyBub3QgaWYgZCA9PSBhLiAgKi8KKyNkZWZpbmUgRE9fYWRkbHNoMihkLCBhLCBiLCBuLCBjeSkJXAorZG8gewkJCQkJXAorICAoY3kpIDw8PSAyOwkJCQlcCisgIChjeSkgKz0gbXBuX2xzaGlmdChkLCBiLCBuLCAyKTsJXAorICAoY3kpICs9IG1wbl9hZGRfbihkLCBkLCBhLCBuKTsJXAorfSB3aGlsZSAoMCkKKyNlbmRpZgorI2VuZGlmCisKKy8qIEV2YWx1YXRlcyBhIHBvbHlub21pYWwgb2YgZGVncmVlIDIgPCBrIDwgR01QX05VTUJfQklUUywgaW4gdGhlCisgICBwb2ludHMgKzIgYW5kIC0yLiAqLworaW50CittcG5fdG9vbV9ldmFsX3BtMiAobXBfcHRyIHhwMiwgbXBfcHRyIHhtMiwgdW5zaWduZWQgaywKKwkJICAgbXBfc3JjcHRyIHhwLCBtcF9zaXplX3QgbiwgbXBfc2l6ZV90IGhuLCBtcF9wdHIgdHApCit7CisgIGludCBpOworICBpbnQgbmVnOworICBtcF9saW1iX3QgY3k7CisKKyAgQVNTRVJUIChrID49IDMpOworICBBU1NFUlQgKGsgPCBHTVBfTlVNQl9CSVRTKTsKKworICBBU1NFUlQgKGhuID4gMCk7CisgIEFTU0VSVCAoaG4gPD0gbik7CisKKyAgLyogVGhlIGRlZ3JlZSBrIGlzIGFsc28gdGhlIG51bWJlciBvZiBmdWxsLXNpemUgY29lZmZpY2llbnRzLCBzbworICAgKiB0aGF0IGxhc3QgY29lZmZpY2llbnQsIG9mIHNpemUgaG4sIHN0YXJ0cyBhdCB4cCArIGsqbi4gKi8KKworICBjeSA9IDA7CisgIERPX2FkZGxzaDIgKHhwMiwgeHAgKyAoay0yKSAqIG4sIHhwICsgayAqIG4sIGhuLCBjeSk7CisgIGlmIChobiAhPSBuKQorICAgIGN5ID0gbXBuX2FkZF8xICh4cDIgKyBobiwgeHAgKyAoay0yKSAqIG4gKyBobiwgbiAtIGhuLCBjeSk7CisgIGZvciAoaSA9IGsgLSA0OyBpID49IDA7IGkgLT0gMikKKyAgICBET19hZGRsc2gyICh4cDIsIHhwICsgaSAqIG4sIHhwMiwgbiwgY3kpOworICB4cDJbbl0gPSBjeTsKKworICBrLS07CisKKyAgY3kgPSAwOworICBET19hZGRsc2gyICh0cCwgeHAgKyAoay0yKSAqIG4sIHhwICsgayAqIG4sIG4sIGN5KTsKKyAgZm9yIChpID0gayAtIDQ7IGkgPj0gMDsgaSAtPSAyKQorICAgIERPX2FkZGxzaDIgKHRwLCB4cCArIGkgKiBuLCB0cCwgbiwgY3kpOworICB0cFtuXSA9IGN5OworCisgIGlmIChrICYgMSkKKyAgICBBU1NFUlRfTk9DQVJSWShtcG5fbHNoaWZ0ICh0cCAsIHRwICwgbiArIDEsIDEpKTsKKyAgZWxzZQorICAgIEFTU0VSVF9OT0NBUlJZKG1wbl9sc2hpZnQgKHhwMiwgeHAyLCBuICsgMSwgMSkpOworCisgIG5lZyA9IChtcG5fY21wICh4cDIsIHRwLCBuICsgMSkgPCAwKSA/IH4wIDogMDsKKworI2lmIEhBVkVfTkFUSVZFX21wbl9hZGRfbl9zdWJfbgorICBpZiAobmVnKQorICAgIG1wbl9hZGRfbl9zdWJfbiAoeHAyLCB4bTIsIHRwLCB4cDIsIG4gKyAxKTsKKyAgZWxzZQorICAgIG1wbl9hZGRfbl9zdWJfbiAoeHAyLCB4bTIsIHhwMiwgdHAsIG4gKyAxKTsKKyNlbHNlIC8qICFIQVZFX05BVElWRV9tcG5fYWRkX25fc3ViX24gKi8KKyAgaWYgKG5lZykKKyAgICBtcG5fc3ViX24gKHhtMiwgdHAsIHhwMiwgbiArIDEpOworICBlbHNlCisgICAgbXBuX3N1Yl9uICh4bTIsIHhwMiwgdHAsIG4gKyAxKTsKKworICBtcG5fYWRkX24gKHhwMiwgeHAyLCB0cCwgbiArIDEpOworI2VuZGlmIC8qICFIQVZFX05BVElWRV9tcG5fYWRkX25fc3ViX24gKi8KKworICBBU1NFUlQgKHhwMltuXSA8ICgxPDwoaysyKSktMSk7CisgIEFTU0VSVCAoeG0yW25dIDwgKCgxPDwoayszKSktMSAtICgxXmsmMSkpLzMpOworCisgIG5lZyBePSAoKGsgJiAxKSAtIDEpOworCisgIHJldHVybiBuZWc7Cit9CisKKyN1bmRlZiBET19hZGRsc2gyCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvdG9vbV9ldmFsX3BtMmV4cC5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Rvb21fZXZhbF9wbTJleHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2M0NjUxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Rvb21fZXZhbF9wbTJleHAuYwpAQCAtMCwwICsxLDEyNyBAQAorLyogbXBuX3Rvb21fZXZhbF9wbTJleHAgLS0gRXZhbHVhdGUgYSBwb2x5bm9taWFsIGluICsyXmsgYW5kIC0yXmsKKworICAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IE5pZWxzIE3DtmxsZXIKKworICAgVEhFIEZVTkNUSU9OIElOIFRISVMgRklMRSBJUyBJTlRFUk5BTCBXSVRIIEEgTVVUQUJMRSBJTlRFUkZBQ0UuICBJVCBJUyBPTkxZCisgICBTQUZFIFRPIFJFQUNIIElUIFRIUk9VR0ggRE9DVU1FTlRFRCBJTlRFUkZBQ0VTLiAgSU4gRkFDVCwgSVQgSVMgQUxNT1NUCisgICBHVUFSQU5URUVEIFRIQVQgSVQgV0lMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEgRlVUVVJFIEdOVSBNUCBSRUxFQVNFLgorCitDb3B5cmlnaHQgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworLyogRXZhbHVhdGVzIGEgcG9seW5vbWlhbCBvZiBkZWdyZWUgayA+IDIsIGluIHRoZSBwb2ludHMgKzJec2hpZnQgYW5kIC0yXnNoaWZ0LiAqLworaW50CittcG5fdG9vbV9ldmFsX3BtMmV4cCAobXBfcHRyIHhwMiwgbXBfcHRyIHhtMiwgdW5zaWduZWQgaywKKwkJICAgICAgbXBfc3JjcHRyIHhwLCBtcF9zaXplX3QgbiwgbXBfc2l6ZV90IGhuLCB1bnNpZ25lZCBzaGlmdCwKKwkJICAgICAgbXBfcHRyIHRwKQoreworICB1bnNpZ25lZCBpOworICBpbnQgbmVnOworI2lmIEhBVkVfTkFUSVZFX21wbl9hZGRsc2hfbgorICBtcF9saW1iX3QgY3k7CisjZW5kaWYKKworICBBU1NFUlQgKGsgPj0gMyk7CisgIEFTU0VSVCAoc2hpZnQqayA8IEdNUF9OVU1CX0JJVFMpOworCisgIEFTU0VSVCAoaG4gPiAwKTsKKyAgQVNTRVJUIChobiA8PSBuKTsKKworICAvKiBUaGUgZGVncmVlIGsgaXMgYWxzbyB0aGUgbnVtYmVyIG9mIGZ1bGwtc2l6ZSBjb2VmZmljaWVudHMsIHNvCisgICAqIHRoYXQgbGFzdCBjb2VmZmljaWVudCwgb2Ygc2l6ZSBobiwgc3RhcnRzIGF0IHhwICsgaypuLiAqLworCisjaWYgSEFWRV9OQVRJVkVfbXBuX2FkZGxzaF9uCisgIHhwMltuXSA9IG1wbl9hZGRsc2hfbiAoeHAyLCB4cCwgeHAgKyAyKm4sIG4sIDIqc2hpZnQpOworICBmb3IgKGkgPSA0OyBpIDwgazsgaSArPSAyKQorICAgIHhwMltuXSArPSBtcG5fYWRkbHNoX24gKHhwMiwgeHAyLCB4cCArIGkqbiwgbiwgaSpzaGlmdCk7CisKKyAgdHBbbl0gPSBtcG5fbHNoaWZ0ICh0cCwgeHArbiwgbiwgc2hpZnQpOworICBmb3IgKGkgPSAzOyBpIDwgazsgaSs9IDIpCisgICAgdHBbbl0gKz0gbXBuX2FkZGxzaF9uICh0cCwgdHAsIHhwK2kqbiwgbiwgaSpzaGlmdCk7CisKKyAgaWYgKGsgJiAxKQorICAgIHsKKyAgICAgIGN5ID0gbXBuX2FkZGxzaF9uICh0cCwgdHAsIHhwK2sqbiwgaG4sIGsqc2hpZnQpOworICAgICAgTVBOX0lOQ1JfVSAodHAgKyBobiwgbisxIC0gaG4sIGN5KTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBjeSA9IG1wbl9hZGRsc2hfbiAoeHAyLCB4cDIsIHhwK2sqbiwgaG4sIGsqc2hpZnQpOworICAgICAgTVBOX0lOQ1JfVSAoeHAyICsgaG4sIG4rMSAtIGhuLCBjeSk7CisgICAgfQorCisjZWxzZSAvKiAhSEFWRV9OQVRJVkVfbXBuX2FkZGxzaF9uICovCisgIHhwMltuXSA9IG1wbl9sc2hpZnQgKHRwLCB4cCsyKm4sIG4sIDIqc2hpZnQpOworICB4cDJbbl0gKz0gbXBuX2FkZF9uICh4cDIsIHhwLCB0cCwgbik7CisgIGZvciAoaSA9IDQ7IGkgPCBrOyBpICs9IDIpCisgICAgeworICAgICAgeHAyW25dICs9IG1wbl9sc2hpZnQgKHRwLCB4cCArIGkqbiwgbiwgaSpzaGlmdCk7CisgICAgICB4cDJbbl0gKz0gbXBuX2FkZF9uICh4cDIsIHhwMiwgdHAsIG4pOworICAgIH0KKworICB0cFtuXSA9IG1wbl9sc2hpZnQgKHRwLCB4cCtuLCBuLCBzaGlmdCk7CisgIGZvciAoaSA9IDM7IGkgPCBrOyBpKz0gMikKKyAgICB7CisgICAgICB0cFtuXSArPSBtcG5fbHNoaWZ0ICh4bTIsIHhwICsgaSpuLCBuLCBpKnNoaWZ0KTsKKyAgICAgIHRwW25dICs9IG1wbl9hZGRfbiAodHAsIHRwLCB4bTIsIG4pOworICAgIH0KKworICB4bTJbaG5dID0gbXBuX2xzaGlmdCAoeG0yLCB4cCArIGsqbiwgaG4sIGsqc2hpZnQpOworICBpZiAoayAmIDEpCisgICAgbXBuX2FkZCAodHAsIHRwLCBuKzEsIHhtMiwgaG4rMSk7CisgIGVsc2UKKyAgICBtcG5fYWRkICh4cDIsIHhwMiwgbisxLCB4bTIsIGhuKzEpOworI2VuZGlmIC8qICFIQVZFX05BVElWRV9tcG5fYWRkbHNoX24gKi8KKworICBuZWcgPSAobXBuX2NtcCAoeHAyLCB0cCwgbiArIDEpIDwgMCkgPyB+MCA6IDA7CisKKyNpZiBIQVZFX05BVElWRV9tcG5fYWRkX25fc3ViX24KKyAgaWYgKG5lZykKKyAgICBtcG5fYWRkX25fc3ViX24gKHhwMiwgeG0yLCB0cCwgeHAyLCBuICsgMSk7CisgIGVsc2UKKyAgICBtcG5fYWRkX25fc3ViX24gKHhwMiwgeG0yLCB4cDIsIHRwLCBuICsgMSk7CisjZWxzZSAvKiAhSEFWRV9OQVRJVkVfbXBuX2FkZF9uX3N1Yl9uICovCisgIGlmIChuZWcpCisgICAgbXBuX3N1Yl9uICh4bTIsIHRwLCB4cDIsIG4gKyAxKTsKKyAgZWxzZQorICAgIG1wbl9zdWJfbiAoeG0yLCB4cDIsIHRwLCBuICsgMSk7CisKKyAgbXBuX2FkZF9uICh4cDIsIHhwMiwgdHAsIG4gKyAxKTsKKyNlbmRpZiAvKiAhSEFWRV9OQVRJVkVfbXBuX2FkZF9uX3N1Yl9uICovCisKKyAgLyogRklYTUU6IHRoZSBmb2xsb3dpbmcgYXNzZXJ0cyBhcmUgdXNlbGVzcyBpZiAoaysxKSpzaGlmdCA+PSBHTVBfTElNQl9CSVRTICovCisgIEFTU0VSVCAoKGsrMSkqc2hpZnQgPj0gR01QX0xJTUJfQklUUyB8fAorCSAgeHAyW25dIDwgKChDTlNUX0xJTUIoMSk8PCgoaysxKSpzaGlmdCkpLTEpLygoQ05TVF9MSU1CKDEpPDxzaGlmdCktMSkpOworICBBU1NFUlQgKChrKzIpKnNoaWZ0ID49IEdNUF9MSU1CX0JJVFMgfHwKKwkgIHhtMltuXSA8ICgoQ05TVF9MSU1CKDEpPDwoKGsrMikqc2hpZnQpKS0oKGsmMSk/KENOU1RfTElNQigxKTw8c2hpZnQpOjEpKS8oKENOU1RfTElNQigxKTw8KDIqc2hpZnQpKS0xKSk7CisKKyAgcmV0dXJuIG5lZzsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy90b29tX2V2YWxfcG0ycmV4cC5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Rvb21fZXZhbF9wbTJyZXhwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNkNjJmYgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy90b29tX2V2YWxfcG0ycmV4cC5jCkBAIC0wLDAgKzEsMTAxIEBACisvKiBtcG5fdG9vbV9ldmFsX3BtMnJleHAgLS0gRXZhbHVhdGUgYSBwb2x5bm9taWFsIGluICsyXi1rIGFuZCAtMl4taworCisgICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgTWFyY28gQm9kcmF0bworCisgICBUSEUgRlVOQ1RJT04gSU4gVEhJUyBGSUxFIElTIElOVEVSTkFMIFdJVEggQSBNVVRBQkxFIElOVEVSRkFDRS4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggSVQgVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuICBJTiBGQUNULCBJVCBJUyBBTE1PU1QKKyAgIEdVQVJBTlRFRUQgVEhBVCBJVCBXSUxMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR05VIE1QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCisjaWYgSEFWRV9OQVRJVkVfbXBuX2FkZGxzaF9uCisjZGVmaW5lIERPX21wbl9hZGRsc2hfbihkc3Qsc3JjLG4scyx3cykgbXBuX2FkZGxzaF9uKGRzdCxkc3Qsc3JjLG4scykKKyNlbHNlCitzdGF0aWMgbXBfbGltYl90CitET19tcG5fYWRkbHNoX24obXBfcHRyIGRzdCwgbXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IG4sIHVuc2lnbmVkIGludCBzLCBtcF9wdHIgd3MpCit7CisjaWYgVVNFX01VTF8xICYmIDAKKyAgcmV0dXJuIG1wbl9hZGRtdWxfMShkc3Qsc3JjLG4sQ05TVF9MSU1CKDEpIDw8KHMpKTsKKyNlbHNlCisgIG1wX2xpbWJfdCBfX2N5OworICBfX2N5ID0gbXBuX2xzaGlmdCh3cyxzcmMsbixzKTsKKyAgcmV0dXJuICAgIF9fY3kgKyBtcG5fYWRkX24oZHN0LGRzdCx3cyxuKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKy8qIEV2YWx1YXRlcyBhIHBvbHlub21pYWwgb2YgZGVncmVlIGsgPj0gMy4gKi8KK2ludAorbXBuX3Rvb21fZXZhbF9wbTJyZXhwIChtcF9wdHIgcnAsIG1wX3B0ciBybSwKKwkJICAgICAgdW5zaWduZWQgaW50IHEsIG1wX3NyY3B0ciBhcCwgbXBfc2l6ZV90IG4sIG1wX3NpemVfdCB0LAorCQkgICAgICB1bnNpZ25lZCBpbnQgcywgbXBfcHRyIHdzKQoreworICB1bnNpZ25lZCBpbnQgaTsKKyAgaW50IG5lZzsKKyAgLyoge2FwLHEqbit0fSAtPiB7cnAsbisxfSB7cm0sbisxfSAsIHdpdGgge3dzLCBuKzF9Ki8KKyAgQVNTRVJUIChuID49IHQpOworICBBU1NFUlQgKHMgIT0gMCk7IC8qIG9yIF9ldmFsX3BtMSBzaG91bGQgYmUgdXNlZCAqLworICBBU1NFUlQgKHEgPiAxKTsKKyAgQVNTRVJUIChzKnEgPCBHTVBfTlVNQl9CSVRTKTsKKyAgcnBbbl0gPSBtcG5fbHNoaWZ0KHJwLCBhcCwgbiwgcypxKTsKKyAgd3Nbbl0gPSBtcG5fbHNoaWZ0KHdzLCBhcCtuLCBuLCBzKihxLTEpKTsKKyAgaWYoIChxICYgMSkgIT0gMCkgeworICAgIEFTU0VSVF9OT0NBUlJZKG1wbl9hZGQod3Msd3MsbisxLGFwK24qcSx0KSk7CisgICAgcnBbbl0gKz0gRE9fbXBuX2FkZGxzaF9uKHJwLCBhcCtuKihxLTEpLCBuLCBzLCBybSk7CisgIH0gZWxzZSB7CisgICAgQVNTRVJUX05PQ0FSUlkobXBuX2FkZChycCxycCxuKzEsYXArbipxLHQpKTsKKyAgfQorICBmb3IoaT0yOyBpPHEtMTsgaSsrKQorICB7CisgICAgcnBbbl0gKz0gRE9fbXBuX2FkZGxzaF9uKHJwLCBhcCtuKmksIG4sIHMqKHEtaSksIHJtKTsKKyAgICBpKys7CisgICAgd3Nbbl0gKz0gRE9fbXBuX2FkZGxzaF9uKHdzLCBhcCtuKmksIG4sIHMqKHEtaSksIHJtKTsKKyAgfTsKKworICBuZWcgPSAobXBuX2NtcCAocnAsIHdzLCBuICsgMSkgPCAwKSA/IH4wIDogMDsKKworI2lmIEhBVkVfTkFUSVZFX21wbl9hZGRfbl9zdWJfbgorICBpZiAobmVnKQorICAgIG1wbl9hZGRfbl9zdWJfbiAocnAsIHJtLCB3cywgcnAsIG4gKyAxKTsKKyAgZWxzZQorICAgIG1wbl9hZGRfbl9zdWJfbiAocnAsIHJtLCBycCwgd3MsIG4gKyAxKTsKKyNlbHNlIC8qICFIQVZFX05BVElWRV9tcG5fYWRkX25fc3ViX24gKi8KKyAgaWYgKG5lZykKKyAgICBtcG5fc3ViX24gKHJtLCB3cywgcnAsIG4gKyAxKTsKKyAgZWxzZQorICAgIG1wbl9zdWJfbiAocm0sIHJwLCB3cywgbiArIDEpOworCisgIEFTU0VSVF9OT0NBUlJZIChtcG5fYWRkX24gKHJwLCBycCwgd3MsIG4gKyAxKSk7CisjZW5kaWYgLyogIUhBVkVfTkFUSVZFX21wbl9hZGRfbl9zdWJfbiAqLworCisgIHJldHVybiBuZWc7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvdG9vbV9pbnRlcnBvbGF0ZV8xMnB0cy5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Rvb21faW50ZXJwb2xhdGVfMTJwdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDdlMzQxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Rvb21faW50ZXJwb2xhdGVfMTJwdHMuYwpAQCAtMCwwICsxLDM3MCBAQAorLyogSW50ZXJwb2xhdGlvbiBmb3IgdGhlIGFsZ29yaXRobSBUb29tLUNvb2sgNi41LXdheS4KKworICAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IE1hcmNvIEJvZHJhdG8uCisKKyAgIFRIRSBGVU5DVElPTiBJTiBUSElTIEZJTEUgSVMgSU5URVJOQUwgV0lUSCBBIE1VVEFCTEUgSU5URVJGQUNFLiAgSVQgSVMgT05MWQorICAgU0FGRSBUTyBSRUFDSCBJVCBUSFJPVUdIIERPQ1VNRU5URUQgSU5URVJGQUNFUy4gIElOIEZBQ1QsIElUIElTIEFMTU9TVAorICAgR1VBUkFOVEVFRCBUSEFUIElUIFdJTEwgQ0hBTkdFIE9SIERJU0FQUEVBUiBJTiBBIEZVVFVSRSBHTlUgTVAgUkVMRUFTRS4KKworQ29weXJpZ2h0IDIwMDksIDIwMTAsIDIwMTIsIDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisKKworI2lmIEhBVkVfTkFUSVZFX21wbl9zdWJsc2hfbgorI2RlZmluZSBET19tcG5fc3VibHNoX24oZHN0LHNyYyxuLHMsd3MpIG1wbl9zdWJsc2hfbihkc3QsZHN0LHNyYyxuLHMpCisjZWxzZQorc3RhdGljIG1wX2xpbWJfdAorRE9fbXBuX3N1YmxzaF9uKG1wX3B0ciBkc3QsIG1wX3NyY3B0ciBzcmMsIG1wX3NpemVfdCBuLCB1bnNpZ25lZCBpbnQgcywgbXBfcHRyIHdzKQoreworI2lmIFVTRV9NVUxfMSAmJiAwCisgIHJldHVybiBtcG5fc3VibXVsXzEoZHN0LHNyYyxuLENOU1RfTElNQigxKSA8PChzKSk7CisjZWxzZQorICBtcF9saW1iX3QgX19jeTsKKyAgX19jeSA9IG1wbl9sc2hpZnQod3Msc3JjLG4scyk7CisgIHJldHVybiAgICBfX2N5ICsgbXBuX3N1Yl9uKGRzdCxkc3Qsd3Msbik7CisjZW5kaWYKK30KKyNlbmRpZgorCisjaWYgSEFWRV9OQVRJVkVfbXBuX2FkZGxzaF9uCisjZGVmaW5lIERPX21wbl9hZGRsc2hfbihkc3Qsc3JjLG4scyx3cykgbXBuX2FkZGxzaF9uKGRzdCxkc3Qsc3JjLG4scykKKyNlbHNlCitzdGF0aWMgbXBfbGltYl90CitET19tcG5fYWRkbHNoX24obXBfcHRyIGRzdCwgbXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IG4sIHVuc2lnbmVkIGludCBzLCBtcF9wdHIgd3MpCit7CisjaWYgVVNFX01VTF8xICYmIDAKKyAgcmV0dXJuIG1wbl9hZGRtdWxfMShkc3Qsc3JjLG4sQ05TVF9MSU1CKDEpIDw8KHMpKTsKKyNlbHNlCisgIG1wX2xpbWJfdCBfX2N5OworICBfX2N5ID0gbXBuX2xzaGlmdCh3cyxzcmMsbixzKTsKKyAgcmV0dXJuICAgIF9fY3kgKyBtcG5fYWRkX24oZHN0LGRzdCx3cyxuKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKyNpZiBIQVZFX05BVElWRV9tcG5fc3VicnNoCisjZGVmaW5lIERPX21wbl9zdWJyc2goZHN0LG5kLHNyYyxucyxzLHdzKSBtcG5fc3VicnNoKGRzdCxuZCxzcmMsbnMscykKKyNlbHNlCisvKiBGSVhNRTogVGhpcyBpcyBub3QgYSBjb3JyZWN0IGRlZmluaXRpb24sIGl0IGFzc3VtZXMgbm8gY2FycnkgKi8KKyNkZWZpbmUgRE9fbXBuX3N1YnJzaChkc3QsbmQsc3JjLG5zLHMsd3MpCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisgIG1wX2xpbWJfdCBfX2N5OwkJCQkJCQlcCisgIE1QTl9ERUNSX1UgKGRzdCwgbmQsIHNyY1swXSA+PiBzKTsJCQkJCVwKKyAgX19jeSA9IERPX21wbl9zdWJsc2hfbiAoZHN0LCBzcmMgKyAxLCBucyAtIDEsIEdNUF9OVU1CX0JJVFMgLSBzLCB3cyk7CVwKKyAgTVBOX0RFQ1JfVSAoZHN0ICsgbnMgLSAxLCBuZCAtIG5zICsgMSwgX19jeSk7CQkJCVwKK30gd2hpbGUgKDApCisjZW5kaWYKKworCisjaWYgR01QX05VTUJfQklUUyA8IDIxCisjZXJyb3IgTm90IGltcGxlbWVudGVkOiBCb3RoIHN1YmxzaF9uKCwsLDIwKSBzaG91bGQgYmUgY29ycmVjdGVkLgorI2VuZGlmCisKKyNpZiBHTVBfTlVNQl9CSVRTIDwgMTYKKyNlcnJvciBOb3QgaW1wbGVtZW50ZWQ6IGRpdmV4YWN0X2J5NDI1MjUgbmVlZHMgc3BsaXR0aW5nLgorI2VuZGlmCisKKyNpZiBHTVBfTlVNQl9CSVRTIDwgMTIKKyNlcnJvciBOb3QgaW1wbGVtZW50ZWQ6IEhhcmQgdG8gYWRhcHQuLi4KKyNlbmRpZgorCisvKiBGSVhNRTogdHVuZXVwIHNob3VsZCBkZWNpZGUgdGhlIGJlc3QgdmFyaWFudCAqLworI2lmbmRlZiBBT1JTTVVMX0ZBU1RFUl9BT1JTX0FPUlNMU0gKKyNkZWZpbmUgQU9SU01VTF9GQVNURVJfQU9SU19BT1JTTFNIIDEKKyNlbmRpZgorI2lmbmRlZiBBT1JTTVVMX0ZBU1RFUl9BT1JTXzJBT1JTTFNICisjZGVmaW5lIEFPUlNNVUxfRkFTVEVSX0FPUlNfMkFPUlNMU0ggMQorI2VuZGlmCisjaWZuZGVmIEFPUlNNVUxfRkFTVEVSXzJBT1JTTFNICisjZGVmaW5lIEFPUlNNVUxfRkFTVEVSXzJBT1JTTFNIIDEKKyNlbmRpZgorI2lmbmRlZiBBT1JTTVVMX0ZBU1RFUl8zQU9SU0xTSAorI2RlZmluZSBBT1JTTVVMX0ZBU1RFUl8zQU9SU0xTSCAxCisjZW5kaWYKKworI2RlZmluZSBCSU5WRVJUXzkgXAorICAoKCgoR01QX05VTUJfTUFYIC8gOSkgPDwgKDYgLSBHTVBfTlVNQl9CSVRTICUgNikpICogOCAmIEdNUF9OVU1CX01BWCkgfCAweDM5KQorCisjZGVmaW5lIEJJTlZFUlRfMjU1IFwKKyAgKEdNUF9OVU1CX01BWCAtICgoR01QX05VTUJfTUFYIC8gMjU1KSA8PCAoOCAtIEdNUF9OVU1CX0JJVFMgJSA4KSkpCisKKyAgLyogRklYTUU6IGZpbmQgc29tZSBtb3JlIGdlbmVyYWwgZXhwcmVzc2lvbnMgZm9yIDI4MzVeLTEsIDQyNTI1Xi0xICovCisjaWYgR01QX0xJTUJfQklUUyA9PSAzMgorI2RlZmluZSBCSU5WRVJUXzI4MzUgIChHTVBfTlVNQl9NQVNLICYJCUNOU1RfTElNQigweDUzRTM3NzFCKSkKKyNkZWZpbmUgQklOVkVSVF80MjUyNSAoR01QX05VTUJfTUFTSyAmCQlDTlNUX0xJTUIoMHg5RjMxNEMzNSkpCisjZWxzZQorI2lmIEdNUF9MSU1CX0JJVFMgPT0gNjQKKyNkZWZpbmUgQklOVkVSVF8yODM1ICAoR01QX05VTUJfTUFTSyAmCUNOU1RfTElNQigweDkzOENDNzA1NTNFMzc3MUIpKQorI2RlZmluZSBCSU5WRVJUXzQyNTI1IChHTVBfTlVNQl9NQVNLICYJQ05TVF9MSU1CKDB4RTdCNDBENDQ5RjMxNEMzNSkpCisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIG1wbl9kaXZleGFjdF9ieTI1NQorI2lmIEdNUF9OVU1CX0JJVFMgJSA4ID09IDAKKyNkZWZpbmUgbXBuX2RpdmV4YWN0X2J5MjU1KGRzdCxzcmMsc2l6ZSkgXAorICAoMjU1ICYgMSAqIG1wbl9iZGl2X2RibTEgKGRzdCwgc3JjLCBzaXplLCBfX0dNUF9DQVNUIChtcF9saW1iX3QsIEdNUF9OVU1CX01BU0sgLyAyNTUpKSkKKyNlbHNlCisjaWYgSEFWRV9OQVRJVkVfbXBuX3BpMV9iZGl2X3FfMQorI2RlZmluZSBtcG5fZGl2ZXhhY3RfYnkyNTUoZHN0LHNyYyxzaXplKSBtcG5fcGkxX2JkaXZfcV8xKGRzdCxzcmMsc2l6ZSxDTlNUX0xJTUIoMjU1KSxCSU5WRVJUXzI1NSwwKQorI2Vsc2UKKyNkZWZpbmUgbXBuX2RpdmV4YWN0X2J5MjU1KGRzdCxzcmMsc2l6ZSkgbXBuX2RpdmV4YWN0XzEoZHN0LHNyYyxzaXplLENOU1RfTElNQigyNTUpKQorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIG1wbl9kaXZleGFjdF9ieTl4NAorI2lmIEhBVkVfTkFUSVZFX21wbl9waTFfYmRpdl9xXzEKKyNkZWZpbmUgbXBuX2RpdmV4YWN0X2J5OXg0KGRzdCxzcmMsc2l6ZSkgbXBuX3BpMV9iZGl2X3FfMShkc3Qsc3JjLHNpemUsQ05TVF9MSU1CKDkpLEJJTlZFUlRfOSwyKQorI2Vsc2UKKyNkZWZpbmUgbXBuX2RpdmV4YWN0X2J5OXg0KGRzdCxzcmMsc2l6ZSkgbXBuX2RpdmV4YWN0XzEoZHN0LHNyYyxzaXplLENOU1RfTElNQig5KTw8MikKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgbXBuX2RpdmV4YWN0X2J5NDI1MjUKKyNpZiBIQVZFX05BVElWRV9tcG5fcGkxX2JkaXZfcV8xICYmIGRlZmluZWQoQklOVkVSVF80MjUyNSkKKyNkZWZpbmUgbXBuX2RpdmV4YWN0X2J5NDI1MjUoZHN0LHNyYyxzaXplKSBtcG5fcGkxX2JkaXZfcV8xKGRzdCxzcmMsc2l6ZSxDTlNUX0xJTUIoNDI1MjUpLEJJTlZFUlRfNDI1MjUsMCkKKyNlbHNlCisjZGVmaW5lIG1wbl9kaXZleGFjdF9ieTQyNTI1KGRzdCxzcmMsc2l6ZSkgbXBuX2RpdmV4YWN0XzEoZHN0LHNyYyxzaXplLENOU1RfTElNQig0MjUyNSkpCisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIG1wbl9kaXZleGFjdF9ieTI4MzV4NAorI2lmIEhBVkVfTkFUSVZFX21wbl9waTFfYmRpdl9xXzEgJiYgZGVmaW5lZChCSU5WRVJUXzI4MzUpCisjZGVmaW5lIG1wbl9kaXZleGFjdF9ieTI4MzV4NChkc3Qsc3JjLHNpemUpIG1wbl9waTFfYmRpdl9xXzEoZHN0LHNyYyxzaXplLENOU1RfTElNQigyODM1KSxCSU5WRVJUXzI4MzUsMikKKyNlbHNlCisjZGVmaW5lIG1wbl9kaXZleGFjdF9ieTI4MzV4NChkc3Qsc3JjLHNpemUpIG1wbl9kaXZleGFjdF8xKGRzdCxzcmMsc2l6ZSxDTlNUX0xJTUIoMjgzNSk8PDIpCisjZW5kaWYKKyNlbmRpZgorCisvKiBJbnRlcnBvbGF0aW9uIGZvciBUb29tLTYuNSAob3IgVG9vbS02KSwgdXNpbmcgdGhlIGV2YWx1YXRpb24KKyAgIHBvaW50czogaW5maW5pdHkoNi41IG9ubHkpLCArLTQsICstMiwgKy0xLCArLTEvNCwgKy0xLzIsIDAuIE1vcmUgcHJlY2lzZWx5LAorICAgd2Ugd2FudCB0byBjb21wdXRlIGYoMl4oR01QX05VTUJfQklUUyAqIG4pKSBmb3IgYSBwb2x5bm9taWFsIGYgb2YKKyAgIGRlZ3JlZSAxMSAob3IgMTApLCBnaXZlbiB0aGUgMTIgKHJzcC4gMTEpIHZhbHVlczoKKworICAgICByMCA9IGxpbWl0IGF0IGluZmluaXR5IG9mIGYoeCkgLyB4XjExLAorICAgICByMSA9IGYoNCksZigtNCksCisgICAgIHIyID0gZigyKSxmKC0yKSwKKyAgICAgcjMgPSBmKDEpLGYoLTEpLAorICAgICByNCA9IGYoMS80KSxmKC0xLzQpLAorICAgICByNSA9IGYoMS8yKSxmKC0xLzIpLAorICAgICByNiA9IGYoMCkuCisKKyAgIEFsbCBjb3VwbGVzIG9mIHRoZSBmb3JtIGYobiksZigtbikgbXVzdCBiZSBhbHJlYWR5IG1peGVkIHdpdGgKKyAgIHRvb21fY291cGxlX2hhbmRsaW5nKGYobiksLi4uLGYoLW4pLC4uLikKKworICAgVGhlIHJlc3VsdCBpcyBzdG9yZWQgaW4ge3BwLCBzcHQgKyA3Km4gKG9yIDYqbil9LgorICAgQXQgZW50cnksIHI2IGlzIHN0b3JlZCBhdCB7cHAsIDJufSwKKyAgIHI0IGlzIHN0b3JlZCBhdCB7cHAgKyAzbiwgM24gKyAxfS4KKyAgIHIyIGlzIHN0b3JlZCBhdCB7cHAgKyA3biwgM24gKyAxfS4KKyAgIHIwIGlzIHN0b3JlZCBhdCB7cHAgKzExbiwgc3B0fS4KKworICAgVGhlIG90aGVyIHZhbHVlcyBhcmUgM24rMSBsaW1icyBlYWNoICh3aXRoIG1vc3Qgc2lnbmlmaWNhbnQgbGltYnMgc21hbGwpLgorCisgICBOZWdhdGl2ZSBpbnRlcm1lZGlhdGUgcmVzdWx0cyBhcmUgc3RvcmVkIHR3by1jb21wbGVtZW50ZWQuCisgICBJbnB1dHMgYXJlIGRlc3Ryb3llZC4KKyovCisKK3ZvaWQKK21wbl90b29tX2ludGVycG9sYXRlXzEycHRzIChtcF9wdHIgcHAsIG1wX3B0ciByMSwgbXBfcHRyIHIzLCBtcF9wdHIgcjUsCisJCQltcF9zaXplX3QgbiwgbXBfc2l6ZV90IHNwdCwgaW50IGhhbGYsIG1wX3B0ciB3c2kpCit7CisgIG1wX2xpbWJfdCBjeTsKKyAgbXBfc2l6ZV90IG4zOworICBtcF9zaXplX3QgbjNwMTsKKyAgbjMgPSAzICogbjsKKyAgbjNwMSA9IG4zICsgMTsKKworI2RlZmluZSAgIHI0ICAgIChwcCArIG4zKQkJCS8qIDNuKzEgKi8KKyNkZWZpbmUgICByMiAgICAocHAgKyA3ICogbikJCQkvKiAzbisxICovCisjZGVmaW5lICAgcjAgICAgKHBwICsxMSAqIG4pCQkJLyogcyt0IDw9IDIqbiAqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIGludGVycG9sYXRpb24gKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIGlmIChoYWxmICE9IDApIHsKKyAgICBjeSA9IG1wbl9zdWJfbiAocjMsIHIzLCByMCwgc3B0KTsKKyAgICBNUE5fREVDUl9VIChyMyArIHNwdCwgbjNwMSAtIHNwdCwgY3kpOworCisgICAgY3kgPSBET19tcG5fc3VibHNoX24gKHIyLCByMCwgc3B0LCAxMCwgd3NpKTsKKyAgICBNUE5fREVDUl9VIChyMiArIHNwdCwgbjNwMSAtIHNwdCwgY3kpOworICAgIERPX21wbl9zdWJyc2gocjUsIG4zcDEsIHIwLCBzcHQsIDIsIHdzaSk7CisKKyAgICBjeSA9IERPX21wbl9zdWJsc2hfbiAocjEsIHIwLCBzcHQsIDIwLCB3c2kpOworICAgIE1QTl9ERUNSX1UgKHIxICsgc3B0LCBuM3AxIC0gc3B0LCBjeSk7CisgICAgRE9fbXBuX3N1YnJzaChyNCwgbjNwMSwgcjAsIHNwdCwgNCwgd3NpKTsKKyAgfTsKKworICByNFtuM10gLT0gRE9fbXBuX3N1YmxzaF9uIChyNCArIG4sIHBwLCAyICogbiwgMjAsIHdzaSk7CisgIERPX21wbl9zdWJyc2gocjEgKyBuLCAyICogbiArIDEsIHBwLCAyICogbiwgNCwgd3NpKTsKKworI2lmIEhBVkVfTkFUSVZFX21wbl9hZGRfbl9zdWJfbgorICBtcG5fYWRkX25fc3ViX24gKHIxLCByNCwgcjQsIHIxLCBuM3AxKTsKKyNlbHNlCisgIEFTU0VSVF9OT0NBUlJZKG1wbl9hZGRfbiAod3NpLCByMSwgcjQsIG4zcDEpKTsKKyAgbXBuX3N1Yl9uIChyNCwgcjQsIHIxLCBuM3AxKTsgLyogY2FuIGJlIG5lZ2F0aXZlICovCisgIE1QX1BUUl9TV0FQKHIxLCB3c2kpOworI2VuZGlmCisKKyAgcjVbbjNdIC09IERPX21wbl9zdWJsc2hfbiAocjUgKyBuLCBwcCwgMiAqIG4sIDEwLCB3c2kpOworICBET19tcG5fc3VicnNoKHIyICsgbiwgMiAqIG4gKyAxLCBwcCwgMiAqIG4sIDIsIHdzaSk7CisKKyNpZiBIQVZFX05BVElWRV9tcG5fYWRkX25fc3ViX24KKyAgbXBuX2FkZF9uX3N1Yl9uIChyMiwgcjUsIHI1LCByMiwgbjNwMSk7CisjZWxzZQorICBtcG5fc3ViX24gKHdzaSwgcjUsIHIyLCBuM3AxKTsgLyogY2FuIGJlIG5lZ2F0aXZlICovCisgIEFTU0VSVF9OT0NBUlJZKG1wbl9hZGRfbiAocjIsIHIyLCByNSwgbjNwMSkpOworICBNUF9QVFJfU1dBUChyNSwgd3NpKTsKKyNlbmRpZgorCisgIHIzW24zXSAtPSBtcG5fc3ViX24gKHIzK24sIHIzK24sIHBwLCAyICogbik7CisKKyNpZiBBT1JTTVVMX0ZBU1RFUl9BT1JTX0FPUlNMU0gKKyAgbXBuX3N1Ym11bF8xIChyNCwgcjUsIG4zcDEsIDI1Nyk7IC8qIGNhbiBiZSBuZWdhdGl2ZSAqLworI2Vsc2UKKyAgbXBuX3N1Yl9uIChyNCwgcjQsIHI1LCBuM3AxKTsgLyogY2FuIGJlIG5lZ2F0aXZlICovCisgIERPX21wbl9zdWJsc2hfbiAocjQsIHI1LCBuM3AxLCA4LCB3c2kpOyAvKiBjYW4gYmUgbmVnYXRpdmUgKi8KKyNlbmRpZgorICAvKiBBIGRpdmlzaW9uIGJ5IDI4MzV4NCBmb2xsb3dzLiBXYXJuaW5nOiB0aGUgb3BlcmFuZCBjYW4gYmUgbmVnYXRpdmUhICovCisgIG1wbl9kaXZleGFjdF9ieTI4MzV4NChyNCwgcjQsIG4zcDEpOworICBpZiAoKHI0W24zXSAmIChHTVBfTlVNQl9NQVggPDwgKEdNUF9OVU1CX0JJVFMtMykpKSAhPSAwKQorICAgIHI0W24zXSB8PSAoR01QX05VTUJfTUFYIDw8IChHTVBfTlVNQl9CSVRTLTIpKTsKKworI2lmIEFPUlNNVUxfRkFTVEVSXzJBT1JTTFNICisgIG1wbl9hZGRtdWxfMSAocjUsIHI0LCBuM3AxLCA2MCk7IC8qIGNhbiBiZSBuZWdhdGl2ZSAqLworI2Vsc2UKKyAgRE9fbXBuX3N1YmxzaF9uIChyNSwgcjQsIG4zcDEsIDIsIHdzaSk7IC8qIGNhbiBiZSBuZWdhdGl2ZSAqLworICBET19tcG5fYWRkbHNoX24gKHI1LCByNCwgbjNwMSwgNiwgd3NpKTsgLyogY2FuIGdpdmUgYSBjYXJyeSAqLworI2VuZGlmCisgIG1wbl9kaXZleGFjdF9ieTI1NShyNSwgcjUsIG4zcDEpOworCisgIEFTU0VSVF9OT0NBUlJZKERPX21wbl9zdWJsc2hfbiAocjIsIHIzLCBuM3AxLCA1LCB3c2kpKTsKKworI2lmIEFPUlNNVUxfRkFTVEVSXzNBT1JTTFNICisgIEFTU0VSVF9OT0NBUlJZKG1wbl9zdWJtdWxfMSAocjEsIHIyLCBuM3AxLCAxMDApKTsKKyNlbHNlCisgIEFTU0VSVF9OT0NBUlJZKERPX21wbl9zdWJsc2hfbiAocjEsIHIyLCBuM3AxLCA2LCB3c2kpKTsKKyAgQVNTRVJUX05PQ0FSUlkoRE9fbXBuX3N1YmxzaF9uIChyMSwgcjIsIG4zcDEsIDUsIHdzaSkpOworICBBU1NFUlRfTk9DQVJSWShET19tcG5fc3VibHNoX24gKHIxLCByMiwgbjNwMSwgMiwgd3NpKSk7CisjZW5kaWYKKyAgQVNTRVJUX05PQ0FSUlkoRE9fbXBuX3N1YmxzaF9uIChyMSwgcjMsIG4zcDEsIDksIHdzaSkpOworICBtcG5fZGl2ZXhhY3RfYnk0MjUyNShyMSwgcjEsIG4zcDEpOworCisjaWYgQU9SU01VTF9GQVNURVJfQU9SU18yQU9SU0xTSAorICBBU1NFUlRfTk9DQVJSWShtcG5fc3VibXVsXzEgKHIyLCByMSwgbjNwMSwgMjI1KSk7CisjZWxzZQorICBBU1NFUlRfTk9DQVJSWShtcG5fc3ViX24gKHIyLCByMiwgcjEsIG4zcDEpKTsKKyAgQVNTRVJUX05PQ0FSUlkoRE9fbXBuX2FkZGxzaF9uIChyMiwgcjEsIG4zcDEsIDUsIHdzaSkpOworICBBU1NFUlRfTk9DQVJSWShET19tcG5fc3VibHNoX24gKHIyLCByMSwgbjNwMSwgOCwgd3NpKSk7CisjZW5kaWYKKyAgbXBuX2RpdmV4YWN0X2J5OXg0KHIyLCByMiwgbjNwMSk7CisKKyAgQVNTRVJUX05PQ0FSUlkobXBuX3N1Yl9uIChyMywgcjMsIHIyLCBuM3AxKSk7CisKKyNpZmRlZiBIQVZFX05BVElWRV9tcG5fcnNoMXN1Yl9uCisgIG1wbl9yc2gxc3ViX24gKHI0LCByMiwgcjQsIG4zcDEpOworICByNCBbbjNwMSAtIDFdICY9IEdNUF9OVU1CX01BU0sgPj4gMTsKKyNlbHNlCisgIG1wbl9zdWJfbiAocjQsIHIyLCByNCwgbjNwMSk7CisgIEFTU0VSVF9OT0NBUlJZKG1wbl9yc2hpZnQocjQsIHI0LCBuM3AxLCAxKSk7CisjZW5kaWYKKyAgQVNTRVJUX05PQ0FSUlkobXBuX3N1Yl9uIChyMiwgcjIsIHI0LCBuM3AxKSk7CisKKyNpZmRlZiBIQVZFX05BVElWRV9tcG5fcnNoMWFkZF9uCisgIG1wbl9yc2gxYWRkX24gKHI1LCByNSwgcjEsIG4zcDEpOworICByNSBbbjNwMSAtIDFdICY9IEdNUF9OVU1CX01BU0sgPj4gMTsKKyNlbHNlCisgIG1wbl9hZGRfbiAocjUsIHI1LCByMSwgbjNwMSk7CisgIEFTU0VSVF9OT0NBUlJZKG1wbl9yc2hpZnQocjUsIHI1LCBuM3AxLCAxKSk7CisjZW5kaWYKKworICAvKiBsYXN0IGludGVycG9sYXRpb24gc3RlcHMuLi4gKi8KKyAgQVNTRVJUX05PQ0FSUlkobXBuX3N1Yl9uIChyMywgcjMsIHIxLCBuM3AxKSk7CisgIEFTU0VSVF9OT0NBUlJZKG1wbl9zdWJfbiAocjEsIHIxLCByNSwgbjNwMSkpOworICAvKiAuLi4gY291bGQgYmUgbWl4ZWQgd2l0aCByZWNvbXBvc2l0aW9uCisJfHxILXI1fE0tcjV8TC1yNXwgICB8fEgtcjF8TS1yMXxMLXIxfAorICAqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiByZWNvbXBvc2l0aW9uICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qCisgICAgcHBbXSBwcmlvciB0byBvcGVyYXRpb25zOgorICAgIHxNIHIwfEwgcjB8X19ffHxIIHIyfE0gcjJ8TCByMnxfX198fEggcjR8TSByNHxMIHI0fF9fX198SF9yNnxMIHI2fHBwCisKKyAgICBzdW1tYXRpb24gc2NoZW1lIGZvciByZW1haW5pbmcgb3BlcmF0aW9uczoKKyAgICB8X18xMnxuXzExfG5fMTB8bl9fOXxuX184fG5fXzd8bl9fNnxuX181fG5fXzR8bl9fM3xuX18yfG5fX198bl9fX3xwcAorICAgIHxNIHIwfEwgcjB8X19ffHxIIHIyfE0gcjJ8TCByMnxfX198fEggcjR8TSByNHxMIHI0fF9fX198SF9yNnxMIHI2fHBwCisJfHxIIHIxfE0gcjF8TCByMXwgICB8fEggcjN8TSByM3xMIHIzfCAgIHx8SF9yNXxNX3I1fExfcjV8CisgICovCisKKyAgY3kgPSBtcG5fYWRkX24gKHBwICsgbiwgcHAgKyBuLCByNSwgbik7CisgIGN5ID0gbXBuX2FkZF8xIChwcCArIDIgKiBuLCByNSArIG4sIG4sIGN5KTsKKyNpZiBIQVZFX05BVElWRV9tcG5fYWRkX25jCisgIGN5ID0gcjVbbjNdICsgbXBuX2FkZF9uYyhwcCArIG4zLCBwcCArIG4zLCByNSArIDIgKiBuLCBuLCBjeSk7CisjZWxzZQorICBNUE5fSU5DUl9VIChyNSArIDIgKiBuLCBuICsgMSwgY3kpOworICBjeSA9IHI1W24zXSArIG1wbl9hZGRfbiAocHAgKyBuMywgcHAgKyBuMywgcjUgKyAyICogbiwgbik7CisjZW5kaWYKKyAgTVBOX0lOQ1JfVSAocHAgKyBuMyArIG4sIDIgKiBuICsgMSwgY3kpOworCisgIHBwWzIgKiBuM10rPSBtcG5fYWRkX24gKHBwICsgNSAqIG4sIHBwICsgNSAqIG4sIHIzLCBuKTsKKyAgY3kgPSBtcG5fYWRkXzEgKHBwICsgMiAqIG4zLCByMyArIG4sIG4sIHBwWzIgKiBuM10pOworI2lmIEhBVkVfTkFUSVZFX21wbl9hZGRfbmMKKyAgY3kgPSByM1tuM10gKyBtcG5fYWRkX25jKHBwICsgNyAqIG4sIHBwICsgNyAqIG4sIHIzICsgMiAqIG4sIG4sIGN5KTsKKyNlbHNlCisgIE1QTl9JTkNSX1UgKHIzICsgMiAqIG4sIG4gKyAxLCBjeSk7CisgIGN5ID0gcjNbbjNdICsgbXBuX2FkZF9uIChwcCArIDcgKiBuLCBwcCArIDcgKiBuLCByMyArIDIgKiBuLCBuKTsKKyNlbmRpZgorICBNUE5fSU5DUl9VIChwcCArIDggKiBuLCAyICogbiArIDEsIGN5KTsKKworICBwcFsxMCpuXSs9bXBuX2FkZF9uIChwcCArIDkgKiBuLCBwcCArIDkgKiBuLCByMSwgbik7CisgIGlmIChoYWxmKSB7CisgICAgY3kgPSBtcG5fYWRkXzEgKHBwICsgMTAgKiBuLCByMSArIG4sIG4sIHBwWzEwICogbl0pOworI2lmIEhBVkVfTkFUSVZFX21wbl9hZGRfbmMKKyAgICBpZiAoTElLRUxZIChzcHQgPiBuKSkgeworICAgICAgY3kgPSByMVtuM10gKyBtcG5fYWRkX25jKHBwICsgMTEgKiBuLCBwcCArIDExICogbiwgcjEgKyAyICogbiwgbiwgY3kpOworICAgICAgTVBOX0lOQ1JfVSAocHAgKyA0ICogbjMsIHNwdCAtIG4sIGN5KTsKKyAgICB9IGVsc2UgeworICAgICAgQVNTRVJUX05PQ0FSUlkobXBuX2FkZF9uYyhwcCArIDExICogbiwgcHAgKyAxMSAqIG4sIHIxICsgMiAqIG4sIHNwdCwgY3kpKTsKKyAgICB9CisjZWxzZQorICAgIE1QTl9JTkNSX1UgKHIxICsgMiAqIG4sIG4gKyAxLCBjeSk7CisgICAgaWYgKExJS0VMWSAoc3B0ID4gbikpIHsKKyAgICAgIGN5ID0gcjFbbjNdICsgbXBuX2FkZF9uIChwcCArIDExICogbiwgcHAgKyAxMSAqIG4sIHIxICsgMiAqIG4sIG4pOworICAgICAgTVBOX0lOQ1JfVSAocHAgKyA0ICogbjMsIHNwdCAtIG4sIGN5KTsKKyAgICB9IGVsc2UgeworICAgICAgQVNTRVJUX05PQ0FSUlkobXBuX2FkZF9uIChwcCArIDExICogbiwgcHAgKyAxMSAqIG4sIHIxICsgMiAqIG4sIHNwdCkpOworICAgIH0KKyNlbmRpZgorICB9IGVsc2UgeworICAgIEFTU0VSVF9OT0NBUlJZKG1wbl9hZGRfMSAocHAgKyAxMCAqIG4sIHIxICsgbiwgc3B0LCBwcFsxMCAqIG5dKSk7CisgIH0KKworI3VuZGVmICAgcjAKKyN1bmRlZiAgIHIyCisjdW5kZWYgICByNAorfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Rvb21faW50ZXJwb2xhdGVfMTZwdHMuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy90b29tX2ludGVycG9sYXRlXzE2cHRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ3NmJiYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy90b29tX2ludGVycG9sYXRlXzE2cHRzLmMKQEAgLTAsMCArMSw1NDEgQEAKKy8qIEludGVycG9sYXRpb24gZm9yIHRoZSBhbGdvcml0aG0gVG9vbS1Db29rIDguNS13YXkuCisKKyAgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBNYXJjbyBCb2RyYXRvLgorCisgICBUSEUgRlVOQ1RJT04gSU4gVEhJUyBGSUxFIElTIElOVEVSTkFMIFdJVEggQSBNVVRBQkxFIElOVEVSRkFDRS4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggSVQgVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuICBJTiBGQUNULCBJVCBJUyBBTE1PU1QKKyAgIEdVQVJBTlRFRUQgVEhBVCBJVCBXSUxMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR05VIE1QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAyMDA5LCAyMDEwLCAyMDEyLCAyMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCisjaWYgR01QX05VTUJfQklUUyA8IDI5CisjZXJyb3IgTm90IGltcGxlbWVudGVkOiBCb3RoIHN1YmxzaF9uKCwsLDI4KSBzaG91bGQgYmUgY29ycmVjdGVkOyByMiBhbmQgcjUgbmVlZCBvbmUgbW9yZSBMSU1CLgorI2VuZGlmCisKKyNpZiBHTVBfTlVNQl9CSVRTIDwgMjgKKyNlcnJvciBOb3QgaW1wbGVtZW50ZWQ6IGRpdmV4YWN0X2J5MTg4NTEzMzI1IGFuZCBfYnkxODI3MTI5MTUgd2lsbCBub3Qgd29yay4KKyNlbmRpZgorCisKKyNpZiBIQVZFX05BVElWRV9tcG5fc3VibHNoX24KKyNkZWZpbmUgRE9fbXBuX3N1YmxzaF9uKGRzdCxzcmMsbixzLHdzKSBtcG5fc3VibHNoX24oZHN0LGRzdCxzcmMsbixzKQorI2Vsc2UKK3N0YXRpYyBtcF9saW1iX3QKK0RPX21wbl9zdWJsc2hfbihtcF9wdHIgZHN0LCBtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3QgbiwgdW5zaWduZWQgaW50IHMsIG1wX3B0ciB3cykKK3sKKyNpZiBVU0VfTVVMXzEgJiYgMAorICByZXR1cm4gbXBuX3N1Ym11bF8xKGRzdCxzcmMsbixDTlNUX0xJTUIoMSkgPDwocykpOworI2Vsc2UKKyAgbXBfbGltYl90IF9fY3k7CisgIF9fY3kgPSBtcG5fbHNoaWZ0KHdzLHNyYyxuLHMpOworICByZXR1cm4gICAgX19jeSArIG1wbl9zdWJfbihkc3QsZHN0LHdzLG4pOworI2VuZGlmCit9CisjZW5kaWYKKworI2lmIEhBVkVfTkFUSVZFX21wbl9hZGRsc2hfbgorI2RlZmluZSBET19tcG5fYWRkbHNoX24oZHN0LHNyYyxuLHMsd3MpIG1wbl9hZGRsc2hfbihkc3QsZHN0LHNyYyxuLHMpCisjZWxzZQorc3RhdGljIG1wX2xpbWJfdAorRE9fbXBuX2FkZGxzaF9uKG1wX3B0ciBkc3QsIG1wX3NyY3B0ciBzcmMsIG1wX3NpemVfdCBuLCB1bnNpZ25lZCBpbnQgcywgbXBfcHRyIHdzKQoreworI2lmIFVTRV9NVUxfMSAmJiAwCisgIHJldHVybiBtcG5fYWRkbXVsXzEoZHN0LHNyYyxuLENOU1RfTElNQigxKSA8PChzKSk7CisjZWxzZQorICBtcF9saW1iX3QgX19jeTsKKyAgX19jeSA9IG1wbl9sc2hpZnQod3Msc3JjLG4scyk7CisgIHJldHVybiAgICBfX2N5ICsgbXBuX2FkZF9uKGRzdCxkc3Qsd3Msbik7CisjZW5kaWYKK30KKyNlbmRpZgorCisjaWYgSEFWRV9OQVRJVkVfbXBuX3N1YnJzaAorI2RlZmluZSBET19tcG5fc3VicnNoKGRzdCxuZCxzcmMsbnMscyx3cykgbXBuX3N1YnJzaChkc3QsbmQsc3JjLG5zLHMpCisjZWxzZQorLyogRklYTUU6IFRoaXMgaXMgbm90IGEgY29ycmVjdCBkZWZpbml0aW9uLCBpdCBhc3N1bWVzIG5vIGNhcnJ5ICovCisjZGVmaW5lIERPX21wbl9zdWJyc2goZHN0LG5kLHNyYyxucyxzLHdzKQkJCQlcCitkbyB7CQkJCQkJCQkJXAorICBtcF9saW1iX3QgX19jeTsJCQkJCQkJXAorICBNUE5fREVDUl9VIChkc3QsIG5kLCBzcmNbMF0gPj4gcyk7CQkJCQlcCisgIF9fY3kgPSBET19tcG5fc3VibHNoX24gKGRzdCwgc3JjICsgMSwgbnMgLSAxLCBHTVBfTlVNQl9CSVRTIC0gcywgd3MpOwlcCisgIE1QTl9ERUNSX1UgKGRzdCArIG5zIC0gMSwgbmQgLSBucyArIDEsIF9fY3kpOwkJCQlcCit9IHdoaWxlICgwKQorI2VuZGlmCisKKworLyogRklYTUU6IHR1bmV1cCBzaG91bGQgZGVjaWRlIHRoZSBiZXN0IHZhcmlhbnQgKi8KKyNpZm5kZWYgQU9SU01VTF9GQVNURVJfQU9SU19BT1JTTFNICisjZGVmaW5lIEFPUlNNVUxfRkFTVEVSX0FPUlNfQU9SU0xTSCAxCisjZW5kaWYKKyNpZm5kZWYgQU9SU01VTF9GQVNURVJfQU9SU18yQU9SU0xTSAorI2RlZmluZSBBT1JTTVVMX0ZBU1RFUl9BT1JTXzJBT1JTTFNIIDEKKyNlbmRpZgorI2lmbmRlZiBBT1JTTVVMX0ZBU1RFUl8yQU9SU0xTSAorI2RlZmluZSBBT1JTTVVMX0ZBU1RFUl8yQU9SU0xTSCAxCisjZW5kaWYKKyNpZm5kZWYgQU9SU01VTF9GQVNURVJfM0FPUlNMU0gKKyNkZWZpbmUgQU9SU01VTF9GQVNURVJfM0FPUlNMU0ggMQorI2VuZGlmCisKKyNpZiBHTVBfTlVNQl9CSVRTIDwgNDMKKyNkZWZpbmUgQklUX0NPUlJFQ1RJT04gMQorI2RlZmluZSBDT1JSRUNUSU9OX0JJVFMgR01QX05VTUJfQklUUworI2Vsc2UKKyNkZWZpbmUgQklUX0NPUlJFQ1RJT04gMAorI2RlZmluZSBDT1JSRUNUSU9OX0JJVFMgMAorI2VuZGlmCisKKyNkZWZpbmUgQklOVkVSVF85IFwKKyAgKCgoKEdNUF9OVU1CX01BWCAvIDkpIDw8ICg2IC0gR01QX05VTUJfQklUUyAlIDYpKSAqIDggJiBHTVBfTlVNQl9NQVgpIHwgMHgzOSkKKworI2RlZmluZSBCSU5WRVJUXzI1NSBcCisgIChHTVBfTlVNQl9NQVggLSAoKEdNUF9OVU1CX01BWCAvIDI1NSkgPDwgKDggLSBHTVBfTlVNQl9CSVRTICUgOCkpKQorCisgIC8qIEZJWE1FOiBmaW5kIHNvbWUgbW9yZSBnZW5lcmFsIGV4cHJlc3Npb25zIGZvciBpbnZlcnNlcyAqLworI2lmIEdNUF9MSU1CX0JJVFMgPT0gMzIKKyNkZWZpbmUgQklOVkVSVF8yODM1ICAoR01QX05VTUJfTUFTSyAmCQlDTlNUX0xJTUIoMHg1M0UzNzcxQikpCisjZGVmaW5lIEJJTlZFUlRfNDI1MjUgKEdNUF9OVU1CX01BU0sgJgkJQ05TVF9MSU1CKDB4OUYzMTRDMzUpKQorI2RlZmluZSBCSU5WRVJUXzE4MjcxMjkxNSAoR01QX05VTUJfTUFTSyAmCUNOU1RfTElNQigweDU1MDY1OURCKSkKKyNkZWZpbmUgQklOVkVSVF8xODg1MTMzMjUgKEdNUF9OVU1CX01BU0sgJglDTlNUX0xJTUIoMHhGQkMzMzNBNSkpCisjZGVmaW5lIEJJTlZFUlRfMjU1eDE4MjcxMjkxNUwgKEdNUF9OVU1CX01BU0sgJglDTlNUX0xJTUIoMHg2RkM0Q0IyNSkpCisjZGVmaW5lIEJJTlZFUlRfMjU1eDE4ODUxMzMyNUwgKEdNUF9OVU1CX01BU0sgJglDTlNUX0xJTUIoMHg2ODY0Mjc1QikpCisjaWYgR01QX05BSUxfQklUUyA9PSAwCisjZGVmaW5lIEJJTlZFUlRfMjU1eDE4MjcxMjkxNUggQ05TVF9MSU1CKDB4MUI2NDlBMDcpCisjZGVmaW5lIEJJTlZFUlRfMjU1eDE4ODUxMzMyNUggQ05TVF9MSU1CKDB4MDZEQjk5M0EpCisjZWxzZSAvKiBHTVBfTkFJTF9CSVRTICE9IDAgKi8KKyNkZWZpbmUgQklOVkVSVF8yNTV4MTgyNzEyOTE1SCBcCisgIChHTVBfTlVNQl9NQVNLICYgQ05TVF9MSU1CKCgweDFCNjQ5QTA3PDxHTVBfTkFJTF9CSVRTKSB8ICgweDZGQzRDQjI1Pj5HTVBfTlVNQl9CSVRTKSkpCisjZGVmaW5lIEJJTlZFUlRfMjU1eDE4ODUxMzMyNUggXAorICAoR01QX05VTUJfTUFTSyAmIENOU1RfTElNQigoMHgwNkRCOTkzQTw8R01QX05BSUxfQklUUykgfCAoMHg2ODY0Mjc1Qj4+R01QX05VTUJfQklUUykpKQorI2VuZGlmCisjZWxzZQorI2lmIEdNUF9MSU1CX0JJVFMgPT0gNjQKKyNkZWZpbmUgQklOVkVSVF8yODM1ICAoR01QX05VTUJfTUFTSyAmCUNOU1RfTElNQigweDkzOENDNzA1NTNFMzc3MUIpKQorI2RlZmluZSBCSU5WRVJUXzQyNTI1IChHTVBfTlVNQl9NQVNLICYJQ05TVF9MSU1CKDB4RTdCNDBENDQ5RjMxNEMzNSkpCisjZGVmaW5lIEJJTlZFUlRfMjU1eDE4MjcxMjkxNSAgKEdNUF9OVU1CX01BU0sgJglDTlNUX0xJTUIoMHgxQjY0OUEwNzZGQzRDQjI1KSkKKyNkZWZpbmUgQklOVkVSVF8yNTV4MTg4NTEzMzI1ICAoR01QX05VTUJfTUFTSyAmCUNOU1RfTElNQigweDA2REI5OTNBNjg2NDI3NUIpKQorI2VuZGlmCisjZW5kaWYKKworI2lmbmRlZiBtcG5fZGl2ZXhhY3RfYnkyNTUKKyNpZiBHTVBfTlVNQl9CSVRTICUgOCA9PSAwCisjZGVmaW5lIG1wbl9kaXZleGFjdF9ieTI1NShkc3Qsc3JjLHNpemUpIFwKKyAgKDI1NSAmIDEgKiBtcG5fYmRpdl9kYm0xIChkc3QsIHNyYywgc2l6ZSwgX19HTVBfQ0FTVCAobXBfbGltYl90LCBHTVBfTlVNQl9NQVNLIC8gMjU1KSkpCisjZWxzZQorI2lmIEhBVkVfTkFUSVZFX21wbl9waTFfYmRpdl9xXzEKKyNkZWZpbmUgbXBuX2RpdmV4YWN0X2J5MjU1KGRzdCxzcmMsc2l6ZSkgbXBuX3BpMV9iZGl2X3FfMShkc3Qsc3JjLHNpemUsQ05TVF9MSU1CKDI1NSksQklOVkVSVF8yNTUsMCkKKyNlbHNlCisjZGVmaW5lIG1wbl9kaXZleGFjdF9ieTI1NShkc3Qsc3JjLHNpemUpIG1wbl9kaXZleGFjdF8xKGRzdCxzcmMsc2l6ZSxDTlNUX0xJTUIoMjU1KSkKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKworI2lmbmRlZiBtcG5fZGl2ZXhhY3RfYnkyNTV4NAorI2lmIEhBVkVfTkFUSVZFX21wbl9waTFfYmRpdl9xXzEKKyNkZWZpbmUgbXBuX2RpdmV4YWN0X2J5MjU1eDQoZHN0LHNyYyxzaXplKSBtcG5fcGkxX2JkaXZfcV8xKGRzdCxzcmMsc2l6ZSxDTlNUX0xJTUIoMjU1KSxCSU5WRVJUXzI1NSwyKQorI2Vsc2UKKyNkZWZpbmUgbXBuX2RpdmV4YWN0X2J5MjU1eDQoZHN0LHNyYyxzaXplKSBtcG5fZGl2ZXhhY3RfMShkc3Qsc3JjLHNpemUsQ05TVF9MSU1CKDI1NSk8PDIpCisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIG1wbl9kaXZleGFjdF9ieTl4MTYKKyNpZiBIQVZFX05BVElWRV9tcG5fcGkxX2JkaXZfcV8xCisjZGVmaW5lIG1wbl9kaXZleGFjdF9ieTl4MTYoZHN0LHNyYyxzaXplKSBtcG5fcGkxX2JkaXZfcV8xKGRzdCxzcmMsc2l6ZSxDTlNUX0xJTUIoOSksQklOVkVSVF85LDQpCisjZWxzZQorI2RlZmluZSBtcG5fZGl2ZXhhY3RfYnk5eDE2KGRzdCxzcmMsc2l6ZSkgbXBuX2RpdmV4YWN0XzEoZHN0LHNyYyxzaXplLENOU1RfTElNQig5KTw8NCkKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgbXBuX2RpdmV4YWN0X2J5NDI1MjV4MTYKKyNpZiBIQVZFX05BVElWRV9tcG5fcGkxX2JkaXZfcV8xICYmIGRlZmluZWQoQklOVkVSVF80MjUyNSkKKyNkZWZpbmUgbXBuX2RpdmV4YWN0X2J5NDI1MjV4MTYoZHN0LHNyYyxzaXplKSBtcG5fcGkxX2JkaXZfcV8xKGRzdCxzcmMsc2l6ZSxDTlNUX0xJTUIoNDI1MjUpLEJJTlZFUlRfNDI1MjUsNCkKKyNlbHNlCisjZGVmaW5lIG1wbl9kaXZleGFjdF9ieTQyNTI1eDE2KGRzdCxzcmMsc2l6ZSkgbXBuX2RpdmV4YWN0XzEoZHN0LHNyYyxzaXplLENOU1RfTElNQig0MjUyNSk8PDQpCisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIG1wbl9kaXZleGFjdF9ieTI4MzV4NjQKKyNpZiBIQVZFX05BVElWRV9tcG5fcGkxX2JkaXZfcV8xICYmIGRlZmluZWQoQklOVkVSVF8yODM1KQorI2RlZmluZSBtcG5fZGl2ZXhhY3RfYnkyODM1eDY0KGRzdCxzcmMsc2l6ZSkgbXBuX3BpMV9iZGl2X3FfMShkc3Qsc3JjLHNpemUsQ05TVF9MSU1CKDI4MzUpLEJJTlZFUlRfMjgzNSw2KQorI2Vsc2UKKyNkZWZpbmUgbXBuX2RpdmV4YWN0X2J5MjgzNXg2NChkc3Qsc3JjLHNpemUpIG1wbl9kaXZleGFjdF8xKGRzdCxzcmMsc2l6ZSxDTlNUX0xJTUIoMjgzNSk8PDYpCisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmICBtcG5fZGl2ZXhhY3RfYnkyNTV4MTgyNzEyOTE1CisjaWYgR01QX05VTUJfQklUUyA8IDM2CisjaWYgSEFWRV9OQVRJVkVfbXBuX2JkaXZfcV8yX3BpMiAmJiBkZWZpbmVkKEJJTlZFUlRfMjU1eDE4MjcxMjkxNUgpCisvKiBGSVhNRTogdXNlIG1wbl9iZGl2X3FfMl9waTIgKi8KKyNlbmRpZgorI2lmIEhBVkVfTkFUSVZFX21wbl9waTFfYmRpdl9xXzEgJiYgZGVmaW5lZChCSU5WRVJUXzE4MjcxMjkxNSkKKyNkZWZpbmUgbXBuX2RpdmV4YWN0X2J5MjU1eDE4MjcxMjkxNShkc3Qsc3JjLHNpemUpCQkJCVwKKyAgZG8gewkJCQkJCQkJCQlcCisgICAgbXBuX3BpMV9iZGl2X3FfMShkc3Qsc3JjLHNpemUsQ05TVF9MSU1CKDE4MjcxMjkxNSksQklOVkVSVF8xODI3MTI5MTUsMCk7CVwKKyAgICBtcG5fZGl2ZXhhY3RfYnkyNTUoZHN0LGRzdCxzaXplKTsJCQkJCQlcCisgIH0gd2hpbGUoMCkKKyNlbHNlCisjZGVmaW5lIG1wbl9kaXZleGFjdF9ieTI1NXgxODI3MTI5MTUoZHN0LHNyYyxzaXplKQlcCisgIGRvIHsJCQkJCQkJXAorICAgIG1wbl9kaXZleGFjdF8xKGRzdCxzcmMsc2l6ZSxDTlNUX0xJTUIoMTgyNzEyOTE1KSk7CVwKKyAgICBtcG5fZGl2ZXhhY3RfYnkyNTUoZHN0LGRzdCxzaXplKTsJCQlcCisgIH0gd2hpbGUoMCkKKyNlbmRpZgorI2Vsc2UgLyogR01QX05VTUJfQklUUyA+IDM1ICovCisjaWYgSEFWRV9OQVRJVkVfbXBuX3BpMV9iZGl2X3FfMSAmJiBkZWZpbmVkKEJJTlZFUlRfMjU1eDE4MjcxMjkxNSkKKyNkZWZpbmUgbXBuX2RpdmV4YWN0X2J5MjU1eDE4MjcxMjkxNShkc3Qsc3JjLHNpemUpIFwKKyAgbXBuX3BpMV9iZGl2X3FfMShkc3Qsc3JjLHNpemUsMjU1KkNOU1RfTElNQigxODI3MTI5MTUpLEJJTlZFUlRfMjU1eDE4MjcxMjkxNSwwKQorI2Vsc2UKKyNkZWZpbmUgbXBuX2RpdmV4YWN0X2J5MjU1eDE4MjcxMjkxNShkc3Qsc3JjLHNpemUpIG1wbl9kaXZleGFjdF8xKGRzdCxzcmMsc2l6ZSwyNTUqQ05TVF9MSU1CKDE4MjcxMjkxNSkpCisjZW5kaWYKKyNlbmRpZiAvKiBHTVBfTlVNQl9CSVRTID4/PCAzNiAqLworI2VuZGlmCisKKyNpZm5kZWYgIG1wbl9kaXZleGFjdF9ieTI1NXgxODg1MTMzMjUKKyNpZiBHTVBfTlVNQl9CSVRTIDwgMzYKKyNpZiBIQVZFX05BVElWRV9tcG5fYmRpdl9xXzFfcGkyICYmIGRlZmluZWQoQklOVkVSVF8yNTV4MTg4NTEzMzI1SCkKKy8qIEZJWE1FOiB1c2UgbXBuX2JkaXZfcV8xX3BpMiAqLworI2VuZGlmCisjaWYgSEFWRV9OQVRJVkVfbXBuX3BpMV9iZGl2X3FfMSAmJiBkZWZpbmVkKEJJTlZFUlRfMTg4NTEzMzI1KQorI2RlZmluZSBtcG5fZGl2ZXhhY3RfYnkyNTV4MTg4NTEzMzI1KGRzdCxzcmMsc2l6ZSkJCQlcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgbXBuX3BpMV9iZGl2X3FfMShkc3Qsc3JjLHNpemUsQ05TVF9MSU1CKDE4ODUxMzMyNSksQklOVkVSVF8xODg1MTMzMjUsMCk7CVwKKyAgICBtcG5fZGl2ZXhhY3RfYnkyNTUoZHN0LGRzdCxzaXplKTsJCQkJCVwKKyAgfSB3aGlsZSgwKQorI2Vsc2UKKyNkZWZpbmUgbXBuX2RpdmV4YWN0X2J5MjU1eDE4ODUxMzMyNShkc3Qsc3JjLHNpemUpCVwKKyAgZG8gewkJCQkJCQlcCisgICAgbXBuX2RpdmV4YWN0XzEoZHN0LHNyYyxzaXplLENOU1RfTElNQigxODg1MTMzMjUpKTsJXAorICAgIG1wbl9kaXZleGFjdF9ieTI1NShkc3QsZHN0LHNpemUpOwkJCVwKKyAgfSB3aGlsZSgwKQorI2VuZGlmCisjZWxzZSAvKiBHTVBfTlVNQl9CSVRTID4gMzUgKi8KKyNpZiBIQVZFX05BVElWRV9tcG5fcGkxX2JkaXZfcV8xICYmIGRlZmluZWQoQklOVkVSVF8yNTV4MTg4NTEzMzI1KQorI2RlZmluZSBtcG5fZGl2ZXhhY3RfYnkyNTV4MTg4NTEzMzI1KGRzdCxzcmMsc2l6ZSkgXAorICBtcG5fcGkxX2JkaXZfcV8xKGRzdCxzcmMsc2l6ZSwyNTUqQ05TVF9MSU1CKDE4ODUxMzMyNSksQklOVkVSVF8yNTV4MTg4NTEzMzI1LDApCisjZWxzZQorI2RlZmluZSBtcG5fZGl2ZXhhY3RfYnkyNTV4MTg4NTEzMzI1KGRzdCxzcmMsc2l6ZSkgbXBuX2RpdmV4YWN0XzEoZHN0LHNyYyxzaXplLDI1NSpDTlNUX0xJTUIoMTg4NTEzMzI1KSkKKyNlbmRpZgorI2VuZGlmIC8qIEdNUF9OVU1CX0JJVFMgPj88IDM2ICovCisjZW5kaWYKKworLyogSW50ZXJwb2xhdGlvbiBmb3IgVG9vbS04LjUgKG9yIFRvb20tOCksIHVzaW5nIHRoZSBldmFsdWF0aW9uCisgICBwb2ludHM6IGluZmluaXR5KDguNSBvbmx5KSwgKy04LCArLTQsICstMiwgKy0xLCArLTEvNCwgKy0xLzIsCisgICArLTEvOCwgMC4gTW9yZSBwcmVjaXNlbHksIHdlIHdhbnQgdG8gY29tcHV0ZQorICAgZigyXihHTVBfTlVNQl9CSVRTICogbikpIGZvciBhIHBvbHlub21pYWwgZiBvZiBkZWdyZWUgMTUgKG9yCisgICAxNCksIGdpdmVuIHRoZSAxNiAocnNwLiAxNSkgdmFsdWVzOgorCisgICAgIHIwID0gbGltaXQgYXQgaW5maW5pdHkgb2YgZih4KSAvIHheMTUsCisgICAgIHIxID0gZig4KSxmKC04KSwKKyAgICAgcjIgPSBmKDQpLGYoLTQpLAorICAgICByMyA9IGYoMiksZigtMiksCisgICAgIHI0ID0gZigxKSxmKC0xKSwKKyAgICAgcjUgPSBmKDEvNCksZigtMS80KSwKKyAgICAgcjYgPSBmKDEvMiksZigtMS8yKSwKKyAgICAgcjcgPSBmKDEvOCksZigtMS84KSwKKyAgICAgcjggPSBmKDApLgorCisgICBBbGwgY291cGxlcyBvZiB0aGUgZm9ybSBmKG4pLGYoLW4pIG11c3QgYmUgYWxyZWFkeSBtaXhlZCB3aXRoCisgICB0b29tX2NvdXBsZV9oYW5kbGluZyhmKG4pLC4uLixmKC1uKSwuLi4pCisKKyAgIFRoZSByZXN1bHQgaXMgc3RvcmVkIGluIHtwcCwgc3B0ICsgNypuIChvciA4Km4pfS4KKyAgIEF0IGVudHJ5LCByOCBpcyBzdG9yZWQgYXQge3BwLCAybn0sCisgICByNiBpcyBzdG9yZWQgYXQge3BwICsgM24sIDNuICsgMX0uCisgICByNCBpcyBzdG9yZWQgYXQge3BwICsgN24sIDNuICsgMX0uCisgICByMiBpcyBzdG9yZWQgYXQge3BwICsxMW4sIDNuICsgMX0uCisgICByMCBpcyBzdG9yZWQgYXQge3BwICsxNW4sIHNwdH0uCisKKyAgIFRoZSBvdGhlciB2YWx1ZXMgYXJlIDNuKzEgbGltYnMgZWFjaCAod2l0aCBtb3N0IHNpZ25pZmljYW50IGxpbWJzIHNtYWxsKS4KKworICAgTmVnYXRpdmUgaW50ZXJtZWRpYXRlIHJlc3VsdHMgYXJlIHN0b3JlZCB0d28tY29tcGxlbWVudGVkLgorICAgSW5wdXRzIGFyZSBkZXN0cm95ZWQuCisqLworCit2b2lkCittcG5fdG9vbV9pbnRlcnBvbGF0ZV8xNnB0cyAobXBfcHRyIHBwLCBtcF9wdHIgcjEsIG1wX3B0ciByMywgbXBfcHRyIHI1LCBtcF9wdHIgcjcsCisJCQltcF9zaXplX3QgbiwgbXBfc2l6ZV90IHNwdCwgaW50IGhhbGYsIG1wX3B0ciB3c2kpCit7CisgIG1wX2xpbWJfdCBjeTsKKyAgbXBfc2l6ZV90IG4zOworICBtcF9zaXplX3QgbjNwMTsKKyAgbjMgPSAzICogbjsKKyAgbjNwMSA9IG4zICsgMTsKKworI2RlZmluZSAgIHI2ICAgIChwcCArIG4zKQkJCS8qIDNuKzEgKi8KKyNkZWZpbmUgICByNCAgICAocHAgKyA3ICogbikJCQkvKiAzbisxICovCisjZGVmaW5lICAgcjIgICAgKHBwICsxMSAqIG4pCQkJLyogM24rMSAqLworI2RlZmluZSAgIHIwICAgIChwcCArMTUgKiBuKQkJCS8qIHMrdCA8PSAyKm4gKi8KKworICBBU1NFUlQoIHNwdCA8PSAyICogbiApOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBpbnRlcnBvbGF0aW9uICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICBpZiggaGFsZiAhPSAwKSB7CisgICAgY3kgPSBtcG5fc3ViX24gKHI0LCByNCwgcjAsIHNwdCk7CisgICAgTVBOX0RFQ1JfVSAocjQgKyBzcHQsIG4zcDEgLSBzcHQsIGN5KTsKKworICAgIGN5ID0gRE9fbXBuX3N1YmxzaF9uIChyMywgcjAsIHNwdCwgMTQsIHdzaSk7CisgICAgTVBOX0RFQ1JfVSAocjMgKyBzcHQsIG4zcDEgLSBzcHQsIGN5KTsKKyAgICBET19tcG5fc3VicnNoKHI2LCBuM3AxLCByMCwgc3B0LCAyLCB3c2kpOworCisgICAgY3kgPSBET19tcG5fc3VibHNoX24gKHIyLCByMCwgc3B0LCAyOCwgd3NpKTsKKyAgICBNUE5fREVDUl9VIChyMiArIHNwdCwgbjNwMSAtIHNwdCwgY3kpOworICAgIERPX21wbl9zdWJyc2gocjUsIG4zcDEsIHIwLCBzcHQsIDQsIHdzaSk7CisKKyAgICBjeSA9IERPX21wbl9zdWJsc2hfbiAocjEgKyBCSVRfQ09SUkVDVElPTiwgcjAsIHNwdCwgNDIgLSBDT1JSRUNUSU9OX0JJVFMsIHdzaSk7CisjaWYgQklUX0NPUlJFQ1RJT04KKyAgICBjeSA9IG1wbl9zdWJfMSAocjEgKyBzcHQgKyBCSVRfQ09SUkVDVElPTiwgcjEgKyBzcHQgKyBCSVRfQ09SUkVDVElPTiwKKwkJICAgIG4zcDEgLSBzcHQgLSBCSVRfQ09SUkVDVElPTiwgY3kpOworICAgIEFTU0VSVCAoQklUX0NPUlJFQ1RJT04gPiAwIHx8IGN5ID09IDApOworICAgIC8qIEZJWE1FOiBhc3N1bWVzIHI3W24zcDFdIGlzIHdyaXRhYmxlIChpdCBpcyBpZiByNSBmb2xsb3dzKS4gKi8KKyAgICBjeSA9IHI3W24zcDFdOworICAgIHI3W24zcDFdID0gMHg4MDsKKyNlbHNlCisgICAgTVBOX0RFQ1JfVSAocjEgKyBzcHQgKyBCSVRfQ09SUkVDVElPTiwgbjNwMSAtIHNwdCAtIEJJVF9DT1JSRUNUSU9OLCBjeSk7CisjZW5kaWYKKyAgICBET19tcG5fc3VicnNoKHI3LCBuM3AxICsgQklUX0NPUlJFQ1RJT04sIHIwLCBzcHQsIDYsIHdzaSk7CisjaWYgQklUX0NPUlJFQ1RJT04KKyAgICAvKiBGSVhNRTogYXNzdW1lcyByN1tuM3AxXSBpcyB3cml0YWJsZS4gKi8KKyAgICBBU1NFUlQgKCBCSVRfQ09SUkVDVElPTiA+IDAgfHwgcjdbbjNwMV0gPT0gMHg4MCApOworICAgIHI3W24zcDFdID0gY3k7CisjZW5kaWYKKyAgfTsKKworICByNVtuM10gLT0gRE9fbXBuX3N1YmxzaF9uIChyNSArIG4sIHBwLCAyICogbiwgMjgsIHdzaSk7CisgIERPX21wbl9zdWJyc2gocjIgKyBuLCAyICogbiArIDEsIHBwLCAyICogbiwgNCwgd3NpKTsKKworI2lmIEhBVkVfTkFUSVZFX21wbl9hZGRfbl9zdWJfbgorICBtcG5fYWRkX25fc3ViX24gKHIyLCByNSwgcjUsIHIyLCBuM3AxKTsKKyNlbHNlCisgIG1wbl9zdWJfbiAod3NpLCByNSwgcjIsIG4zcDEpOyAvKiBjYW4gYmUgbmVnYXRpdmUgKi8KKyAgQVNTRVJUX05PQ0FSUlkobXBuX2FkZF9uIChyMiwgcjIsIHI1LCBuM3AxKSk7CisgIE1QX1BUUl9TV0FQKHI1LCB3c2kpOworI2VuZGlmCisKKyAgcjZbbjNdIC09IERPX21wbl9zdWJsc2hfbiAocjYgKyBuLCBwcCwgMiAqIG4sIDE0LCB3c2kpOworICBET19tcG5fc3VicnNoKHIzICsgbiwgMiAqIG4gKyAxLCBwcCwgMiAqIG4sIDIsIHdzaSk7CisKKyNpZiBIQVZFX05BVElWRV9tcG5fYWRkX25fc3ViX24KKyAgbXBuX2FkZF9uX3N1Yl9uIChyMywgcjYsIHI2LCByMywgbjNwMSk7CisjZWxzZQorICBBU1NFUlRfTk9DQVJSWShtcG5fYWRkX24gKHdzaSwgcjMsIHI2LCBuM3AxKSk7CisgIG1wbl9zdWJfbiAocjYsIHI2LCByMywgbjNwMSk7IC8qIGNhbiBiZSBuZWdhdGl2ZSAqLworICBNUF9QVFJfU1dBUChyMywgd3NpKTsKKyNlbmRpZgorCisgIGN5ID0gRE9fbXBuX3N1YmxzaF9uIChyNyArIG4gKyBCSVRfQ09SUkVDVElPTiwgcHAsIDIgKiBuLCA0MiAtIENPUlJFQ1RJT05fQklUUywgd3NpKTsKKyNpZiBCSVRfQ09SUkVDVElPTgorICBNUE5fREVDUl9VIChyMSArIG4sIDIgKiBuICsgMSwgcHBbMF0gPj4gNik7CisgIGN5ID0gRE9fbXBuX3N1YmxzaF9uIChyMSArIG4sIHBwICsgMSwgMiAqIG4gLSAxLCBHTVBfTlVNQl9CSVRTIC0gNiwgd3NpKTsKKyAgY3kgPSBtcG5fc3ViXzEocjEgKyAzICogbiAtIDEsIHIxICsgMyAqIG4gLSAxLCAyLCBjeSk7CisgIEFTU0VSVCAoIEJJVF9DT1JSRUNUSU9OID4gMCB8fCBjeSAhPSAwICk7CisjZWxzZQorICByN1tuM10gLT0gY3k7CisgIERPX21wbl9zdWJyc2gocjEgKyBuLCAyICogbiArIDEsIHBwLCAyICogbiwgNiwgd3NpKTsKKyNlbmRpZgorCisjaWYgSEFWRV9OQVRJVkVfbXBuX2FkZF9uX3N1Yl9uCisgIG1wbl9hZGRfbl9zdWJfbiAocjEsIHI3LCByNywgcjEsIG4zcDEpOworI2Vsc2UKKyAgbXBuX3N1Yl9uICh3c2ksIHI3LCByMSwgbjNwMSk7IC8qIGNhbiBiZSBuZWdhdGl2ZSAqLworICBtcG5fYWRkX24gKHIxLCByMSwgcjcsIG4zcDEpOyAgLyogaWYgQklUX0NPUlJFQ1RJT04gIT0gMCwgY2FuIGdpdmUgYSBjYXJyeS4gKi8KKyAgTVBfUFRSX1NXQVAocjcsIHdzaSk7CisjZW5kaWYKKworICByNFtuM10gLT0gbXBuX3N1Yl9uIChyNCtuLCByNCtuLCBwcCwgMiAqIG4pOworCisjaWYgQU9SU01VTF9GQVNURVJfMkFPUlNMU0gKKyAgbXBuX3N1Ym11bF8xIChyNSwgcjYsIG4zcDEsIDEwMjgpOyAvKiBjYW4gYmUgbmVnYXRpdmUgKi8KKyNlbHNlCisgIERPX21wbl9zdWJsc2hfbiAocjUsIHI2LCBuM3AxLCAyLCB3c2kpOyAvKiBjYW4gYmUgbmVnYXRpdmUgKi8KKyAgRE9fbXBuX3N1YmxzaF9uIChyNSwgcjYsIG4zcDEsMTAsIHdzaSk7IC8qIGNhbiBiZSBuZWdhdGl2ZSAqLworI2VuZGlmCisKKyAgbXBuX3N1Ym11bF8xIChyNywgcjUsIG4zcDEsIDEzMDApOyAvKiBjYW4gYmUgbmVnYXRpdmUgKi8KKyNpZiBBT1JTTVVMX0ZBU1RFUl8zQU9SU0xTSAorICBtcG5fc3VibXVsXzEgKHI3LCByNiwgbjNwMSwgMTA1MjY4OCk7IC8qIGNhbiBiZSBuZWdhdGl2ZSAqLworI2Vsc2UKKyAgRE9fbXBuX3N1YmxzaF9uIChyNywgcjYsIG4zcDEsIDQsIHdzaSk7IC8qIGNhbiBiZSBuZWdhdGl2ZSAqLworICBET19tcG5fc3VibHNoX24gKHI3LCByNiwgbjNwMSwxMiwgd3NpKTsgLyogY2FuIGJlIG5lZ2F0aXZlICovCisgIERPX21wbl9zdWJsc2hfbiAocjcsIHI2LCBuM3AxLDIwLCB3c2kpOyAvKiBjYW4gYmUgbmVnYXRpdmUgKi8KKyNlbmRpZgorICBtcG5fZGl2ZXhhY3RfYnkyNTV4MTg4NTEzMzI1KHI3LCByNywgbjNwMSk7CisKKyAgbXBuX3N1Ym11bF8xIChyNSwgcjcsIG4zcDEsIDEyNTY3NTU1KTsgLyogY2FuIGJlIG5lZ2F0aXZlICovCisgIC8qIEEgZGl2aXNpb24gYnkgMjgzNXg2NCBmb2xsb3dzLiBXYXJuaW5nOiB0aGUgb3BlcmFuZCBjYW4gYmUgbmVnYXRpdmUhICovCisgIG1wbl9kaXZleGFjdF9ieTI4MzV4NjQocjUsIHI1LCBuM3AxKTsKKyAgaWYgKChyNVtuM10gJiAoR01QX05VTUJfTUFYIDw8IChHTVBfTlVNQl9CSVRTLTcpKSkgIT0gMCkKKyAgICByNVtuM10gfD0gKEdNUF9OVU1CX01BWCA8PCAoR01QX05VTUJfQklUUy02KSk7CisKKyNpZiBBT1JTTVVMX0ZBU1RFUl9BT1JTX0FPUlNMU0gKKyAgbXBuX3N1Ym11bF8xIChyNiwgcjcsIG4zcDEsIDQwOTUpOyAvKiBjYW4gYmUgbmVnYXRpdmUgKi8KKyNlbHNlCisgIG1wbl9hZGRfbiAocjYsIHI2LCByNywgbjNwMSk7IC8qIGNhbiBnaXZlIGEgY2FycnkgKi8KKyAgRE9fbXBuX3N1YmxzaF9uIChyNiwgcjcsIG4zcDEsIDEyLCB3c2kpOyAvKiBjYW4gYmUgbmVnYXRpdmUgKi8KKyNlbmRpZgorI2lmIEFPUlNNVUxfRkFTVEVSXzJBT1JTTFNICisgIG1wbl9hZGRtdWxfMSAocjYsIHI1LCBuM3AxLCAyNDApOyAvKiBjYW4gYmUgbmVnYXRpdmUgKi8KKyNlbHNlCisgIERPX21wbl9hZGRsc2hfbiAocjYsIHI1LCBuM3AxLCA4LCB3c2kpOyAvKiBjYW4gZ2l2ZSBhIGNhcnJ5ICovCisgIERPX21wbl9zdWJsc2hfbiAocjYsIHI1LCBuM3AxLCA0LCB3c2kpOyAvKiBjYW4gYmUgbmVnYXRpdmUgKi8KKyNlbmRpZgorICAvKiBBIGRpdmlzaW9uIGJ5IDI1NXg0IGZvbGxvd3MuIFdhcm5pbmc6IHRoZSBvcGVyYW5kIGNhbiBiZSBuZWdhdGl2ZSEgKi8KKyAgbXBuX2RpdmV4YWN0X2J5MjU1eDQocjYsIHI2LCBuM3AxKTsKKyAgaWYgKChyNltuM10gJiAoR01QX05VTUJfTUFYIDw8IChHTVBfTlVNQl9CSVRTLTMpKSkgIT0gMCkKKyAgICByNltuM10gfD0gKEdNUF9OVU1CX01BWCA8PCAoR01QX05VTUJfQklUUy0yKSk7CisKKyAgQVNTRVJUX05PQ0FSUlkoRE9fbXBuX3N1YmxzaF9uIChyMywgcjQsIG4zcDEsIDcsIHdzaSkpOworCisgIEFTU0VSVF9OT0NBUlJZKERPX21wbl9zdWJsc2hfbiAocjIsIHI0LCBuM3AxLCAxMywgd3NpKSk7CisgIEFTU0VSVF9OT0NBUlJZKG1wbl9zdWJtdWxfMSAocjIsIHIzLCBuM3AxLCA0MDApKTsKKworICAvKiBJZiBHTVBfTlVNQl9CSVRTIDwgNDIgbmV4dCBvcGVyYXRpb25zIG9uIHIxIGNhbiBnaXZlIGEgY2FycnkhKi8KKyAgRE9fbXBuX3N1YmxzaF9uIChyMSwgcjQsIG4zcDEsIDE5LCB3c2kpOworICBtcG5fc3VibXVsXzEgKHIxLCByMiwgbjNwMSwgMTQyOCk7CisgIG1wbl9zdWJtdWxfMSAocjEsIHIzLCBuM3AxLCAxMTI4OTYpOworICBtcG5fZGl2ZXhhY3RfYnkyNTV4MTgyNzEyOTE1KHIxLCByMSwgbjNwMSk7CisKKyAgQVNTRVJUX05PQ0FSUlkobXBuX3N1Ym11bF8xIChyMiwgcjEsIG4zcDEsIDE1MTgxNDI1KSk7CisgIG1wbl9kaXZleGFjdF9ieTQyNTI1eDE2KHIyLCByMiwgbjNwMSk7CisKKyNpZiBBT1JTTVVMX0ZBU1RFUl9BT1JTXzJBT1JTTFNICisgIEFTU0VSVF9OT0NBUlJZKG1wbl9zdWJtdWxfMSAocjMsIHIxLCBuM3AxLCAzOTY5KSk7CisjZWxzZQorICBBU1NFUlRfTk9DQVJSWShtcG5fc3ViX24gKHIzLCByMywgcjEsIG4zcDEpKTsKKyAgQVNTRVJUX05PQ0FSUlkoRE9fbXBuX2FkZGxzaF9uIChyMywgcjEsIG4zcDEsIDcsIHdzaSkpOworICBBU1NFUlRfTk9DQVJSWShET19tcG5fc3VibHNoX24gKHIzLCByMSwgbjNwMSwgMTIsIHdzaSkpOworI2VuZGlmCisgIEFTU0VSVF9OT0NBUlJZKG1wbl9zdWJtdWxfMSAocjMsIHIyLCBuM3AxLCA5MDApKTsKKyAgbXBuX2RpdmV4YWN0X2J5OXgxNihyMywgcjMsIG4zcDEpOworCisgIEFTU0VSVF9OT0NBUlJZKG1wbl9zdWJfbiAocjQsIHI0LCByMSwgbjNwMSkpOworICBBU1NFUlRfTk9DQVJSWShtcG5fc3ViX24gKHI0LCByNCwgcjMsIG4zcDEpKTsKKyAgQVNTRVJUX05PQ0FSUlkobXBuX3N1Yl9uIChyNCwgcjQsIHIyLCBuM3AxKSk7CisKKyNpZmRlZiBIQVZFX05BVElWRV9tcG5fcnNoMWFkZF9uCisgIG1wbl9yc2gxYWRkX24gKHI2LCByMiwgcjYsIG4zcDEpOworICByNiBbbjNwMSAtIDFdICY9IEdNUF9OVU1CX01BU0sgPj4gMTsKKyNlbHNlCisgIG1wbl9hZGRfbiAocjYsIHIyLCByNiwgbjNwMSk7CisgIEFTU0VSVF9OT0NBUlJZKG1wbl9yc2hpZnQocjYsIHI2LCBuM3AxLCAxKSk7CisjZW5kaWYKKyAgQVNTRVJUX05PQ0FSUlkobXBuX3N1Yl9uIChyMiwgcjIsIHI2LCBuM3AxKSk7CisKKyNpZmRlZiBIQVZFX05BVElWRV9tcG5fcnNoMXN1Yl9uCisgIG1wbl9yc2gxc3ViX24gKHI1LCByMywgcjUsIG4zcDEpOworICByNSBbbjNwMSAtIDFdICY9IEdNUF9OVU1CX01BU0sgPj4gMTsKKyNlbHNlCisgIG1wbl9zdWJfbiAocjUsIHIzLCByNSwgbjNwMSk7CisgIEFTU0VSVF9OT0NBUlJZKG1wbl9yc2hpZnQocjUsIHI1LCBuM3AxLCAxKSk7CisjZW5kaWYKKyAgQVNTRVJUX05PQ0FSUlkobXBuX3N1Yl9uIChyMywgcjMsIHI1LCBuM3AxKSk7CisKKyNpZmRlZiBIQVZFX05BVElWRV9tcG5fcnNoMWFkZF9uCisgIG1wbl9yc2gxYWRkX24gKHI3LCByMSwgcjcsIG4zcDEpOworICByNyBbbjNwMSAtIDFdICY9IEdNUF9OVU1CX01BU0sgPj4gMTsKKyNlbHNlCisgIG1wbl9hZGRfbiAocjcsIHIxLCByNywgbjNwMSk7CisgIEFTU0VSVF9OT0NBUlJZKG1wbl9yc2hpZnQocjcsIHI3LCBuM3AxLCAxKSk7CisjZW5kaWYKKyAgQVNTRVJUX05PQ0FSUlkobXBuX3N1Yl9uIChyMSwgcjEsIHI3LCBuM3AxKSk7CisKKyAgLyogbGFzdCBpbnRlcnBvbGF0aW9uIHN0ZXBzLi4uICovCisgIC8qIC4uLiBjb3VsZCBiZSBtaXhlZCB3aXRoIHJlY29tcG9zaXRpb24KKwl8fEgtcjd8TS1yN3xMLXI3fCAgIHx8SC1yNXxNLXI1fEwtcjV8CisgICovCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqIHJlY29tcG9zaXRpb24gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoKKyAgICBwcFtdIHByaW9yIHRvIG9wZXJhdGlvbnM6CisgICAgfE0gcjB8TCByMHxfX198fEggcjJ8TSByMnxMIHIyfF9fX3x8SCByNHxNIHI0fEwgcjR8X19ffHxIIHI2fE0gcjZ8TCByNnxfX19ffEhfcjh8TCByOHxwcAorCisgICAgc3VtbWF0aW9uIHNjaGVtZSBmb3IgcmVtYWluaW5nIG9wZXJhdGlvbnM6CisgICAgfF9fMTZ8bl8xNXxuXzE0fG5fMTN8bl8xMnxuXzExfG5fMTB8bl9fOXxuX184fG5fXzd8bl9fNnxuX181fG5fXzR8bl9fM3xuX18yfG5fX198bl9fX3xwcAorICAgIHxNIHIwfEwgcjB8X19ffHxIIHIyfE0gcjJ8TCByMnxfX198fEggcjR8TSByNHxMIHI0fF9fX3x8SCByNnxNIHI2fEwgcjZ8X19fX3xIX3I4fEwgcjh8cHAKKwl8fEggcjF8TSByMXxMIHIxfCAgIHx8SCByM3xNIHIzfEwgcjN8ICAgfHxIX3I1fE1fcjV8TF9yNXwgICB8fEggcjd8TSByN3xMIHI3fAorICAqLworCisgIGN5ID0gbXBuX2FkZF9uIChwcCArIG4sIHBwICsgbiwgcjcsIG4pOworICBjeSA9IG1wbl9hZGRfMSAocHAgKyAyICogbiwgcjcgKyBuLCBuLCBjeSk7CisjaWYgSEFWRV9OQVRJVkVfbXBuX2FkZF9uYworICBjeSA9IHI3W24zXSArIG1wbl9hZGRfbmMocHAgKyBuMywgcHAgKyBuMywgcjcgKyAyICogbiwgbiwgY3kpOworI2Vsc2UKKyAgTVBOX0lOQ1JfVSAocjcgKyAyICogbiwgbiArIDEsIGN5KTsKKyAgY3kgPSByN1tuM10gKyBtcG5fYWRkX24gKHBwICsgbjMsIHBwICsgbjMsIHI3ICsgMiAqIG4sIG4pOworI2VuZGlmCisgIE1QTl9JTkNSX1UgKHBwICsgNCAqIG4sIDIgKiBuICsgMSwgY3kpOworCisgIHBwWzIgKiBuM10rPSBtcG5fYWRkX24gKHBwICsgNSAqIG4sIHBwICsgNSAqIG4sIHI1LCBuKTsKKyAgY3kgPSBtcG5fYWRkXzEgKHBwICsgMiAqIG4zLCByNSArIG4sIG4sIHBwWzIgKiBuM10pOworI2lmIEhBVkVfTkFUSVZFX21wbl9hZGRfbmMKKyAgY3kgPSByNVtuM10gKyBtcG5fYWRkX25jKHBwICsgNyAqIG4sIHBwICsgNyAqIG4sIHI1ICsgMiAqIG4sIG4sIGN5KTsKKyNlbHNlCisgIE1QTl9JTkNSX1UgKHI1ICsgMiAqIG4sIG4gKyAxLCBjeSk7CisgIGN5ID0gcjVbbjNdICsgbXBuX2FkZF9uIChwcCArIDcgKiBuLCBwcCArIDcgKiBuLCByNSArIDIgKiBuLCBuKTsKKyNlbmRpZgorICBNUE5fSU5DUl9VIChwcCArIDggKiBuLCAyICogbiArIDEsIGN5KTsKKworICBwcFsxMCAqIG5dKz0gbXBuX2FkZF9uIChwcCArIDkgKiBuLCBwcCArIDkgKiBuLCByMywgbik7CisgIGN5ID0gbXBuX2FkZF8xIChwcCArIDEwICogbiwgcjMgKyBuLCBuLCBwcFsxMCAqIG5dKTsKKyNpZiBIQVZFX05BVElWRV9tcG5fYWRkX25jCisgIGN5ID0gcjNbbjNdICsgbXBuX2FkZF9uYyhwcCArMTEgKiBuLCBwcCArMTEgKiBuLCByMyArIDIgKiBuLCBuLCBjeSk7CisjZWxzZQorICBNUE5fSU5DUl9VIChyMyArIDIgKiBuLCBuICsgMSwgY3kpOworICBjeSA9IHIzW24zXSArIG1wbl9hZGRfbiAocHAgKzExICogbiwgcHAgKzExICogbiwgcjMgKyAyICogbiwgbik7CisjZW5kaWYKKyAgTVBOX0lOQ1JfVSAocHAgKzEyICogbiwgMiAqIG4gKyAxLCBjeSk7CisKKyAgcHBbMTQgKiBuXSs9bXBuX2FkZF9uIChwcCArMTMgKiBuLCBwcCArMTMgKiBuLCByMSwgbik7CisgIGlmICggaGFsZiApIHsKKyAgICBjeSA9IG1wbl9hZGRfMSAocHAgKyAxNCAqIG4sIHIxICsgbiwgbiwgcHBbMTQgKiBuXSk7CisjaWYgSEFWRV9OQVRJVkVfbXBuX2FkZF9uYworICAgIGlmKExJS0VMWShzcHQgPiBuKSkgeworICAgICAgY3kgPSByMVtuM10gKyBtcG5fYWRkX25jKHBwICsgMTUgKiBuLCBwcCArIDE1ICogbiwgcjEgKyAyICogbiwgbiwgY3kpOworICAgICAgTVBOX0lOQ1JfVSAocHAgKyAxNiAqIG4sIHNwdCAtIG4sIGN5KTsKKyAgICB9IGVsc2UgeworICAgICAgQVNTRVJUX05PQ0FSUlkobXBuX2FkZF9uYyhwcCArIDE1ICogbiwgcHAgKyAxNSAqIG4sIHIxICsgMiAqIG4sIHNwdCwgY3kpKTsKKyAgICB9CisjZWxzZQorICAgIE1QTl9JTkNSX1UgKHIxICsgMiAqIG4sIG4gKyAxLCBjeSk7CisgICAgaWYoTElLRUxZKHNwdCA+IG4pKSB7CisgICAgICBjeSA9IHIxW24zXSArIG1wbl9hZGRfbiAocHAgKyAxNSAqIG4sIHBwICsgMTUgKiBuLCByMSArIDIgKiBuLCBuKTsKKyAgICAgIE1QTl9JTkNSX1UgKHBwICsgMTYgKiBuLCBzcHQgLSBuLCBjeSk7CisgICAgfSBlbHNlIHsKKyAgICAgIEFTU0VSVF9OT0NBUlJZKG1wbl9hZGRfbiAocHAgKyAxNSAqIG4sIHBwICsgMTUgKiBuLCByMSArIDIgKiBuLCBzcHQpKTsKKyAgICB9CisjZW5kaWYKKyAgfSBlbHNlIHsKKyAgICBBU1NFUlRfTk9DQVJSWShtcG5fYWRkXzEgKHBwICsgMTQgKiBuLCByMSArIG4sIHNwdCwgcHBbMTQgKiBuXSkpOworICB9CisKKyN1bmRlZiAgIHIwCisjdW5kZWYgICByMgorI3VuZGVmICAgcjQKKyN1bmRlZiAgIHI2Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvdG9vbV9pbnRlcnBvbGF0ZV81cHRzLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvdG9vbV9pbnRlcnBvbGF0ZV81cHRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY2YWI4NQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy90b29tX2ludGVycG9sYXRlXzVwdHMuYwpAQCAtMCwwICsxLDE5OCBAQAorLyogbXBuX3Rvb21faW50ZXJwb2xhdGVfNXB0cyAtLSBJbnRlcnBvbGF0ZSBmb3IgdG9vbTMsIDMzLCA0Mi4KKworICAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFJvYmVydCBIYXJsZXkuCisgICBJbXByb3ZlbWVudHMgYnkgUGF1bCBaaW1tZXJtYW5uIGFuZCBNYXJjbyBCb2RyYXRvLgorCisgICBUSEUgRlVOQ1RJT04gSU4gVEhJUyBGSUxFIElTIElOVEVSTkFMIFdJVEggQSBNVVRBQkxFIElOVEVSRkFDRS4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggSVQgVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuICBJTiBGQUNULCBJVCBJUyBBTE1PU1QKKyAgIEdVQVJBTlRFRUQgVEhBVCBJVCBXSUxMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR05VIE1QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAyMDAwLTIwMDMsIDIwMDUtMjAwNywgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisKK3ZvaWQKK21wbl90b29tX2ludGVycG9sYXRlXzVwdHMgKG1wX3B0ciBjLCBtcF9wdHIgdjIsIG1wX3B0ciB2bTEsCisJCQkgICBtcF9zaXplX3QgaywgbXBfc2l6ZV90IHR3b3IsIGludCBzYSwKKwkJCSAgIG1wX2xpbWJfdCB2aW5mMCkKK3sKKyAgbXBfbGltYl90IGN5LCBzYXZlZDsKKyAgbXBfc2l6ZV90IHR3b2s7CisgIG1wX3NpemVfdCBrazE7CisgIG1wX3B0ciBjMSwgdjEsIGMzLCB2aW5mOworCisgIHR3b2sgPSBrICsgazsKKyAga2sxID0gdHdvayArIDE7CisKKyAgYzEgPSBjICArIGs7CisgIHYxID0gYzEgKyBrOworICBjMyA9IHYxICsgazsKKyAgdmluZiA9IGMzICsgazsKKworI2RlZmluZSB2MCAoYykKKyAgLyogKDEpIHYyIDwtIHYyLXZtMSA8IHYyK3x2bTF8LCAgICAgICAoMTYgOCA0IDIgMSkgLSAoMSAtMSAxIC0xICAxKSA9CisgICAgIHRodXMgMCA8PSB2MiA8IDUwKkJeKDJrKSA8IDJeNipCXigyaykgICAgICAgICAgICAgKDE1IDkgMyAgMyAgMCkKKyAgKi8KKyAgaWYgKHNhKQorICAgIEFTU0VSVF9OT0NBUlJZIChtcG5fYWRkX24gKHYyLCB2Miwgdm0xLCBrazEpKTsKKyAgZWxzZQorICAgIEFTU0VSVF9OT0NBUlJZIChtcG5fc3ViX24gKHYyLCB2Miwgdm0xLCBrazEpKTsKKworICAvKiB7Yywya30ge2MrMmssMmsrMX0ge2MrNGsrMSwyci0xfSB7dCwyaysxfSB7dCsyaysxLDJrKzF9IHt0KzRrKzIsMnJ9CisgICAgICAgdjAgICAgICAgdjEgICAgICAgaGkodmluZikgICAgICAgfHZtMXwgICAgIHYyLXZtMSAgICAgIEVNUFRZICovCisKKyAgQVNTRVJUX05PQ0FSUlkgKG1wbl9kaXZleGFjdF9ieTMgKHYyLCB2Miwga2sxKSk7ICAgIC8qIHYyIDwtIHYyIC8gMyAqLworCQkJCQkJICAgICAgLyogKDUgMyAxIDEgMCkqLworCisgIC8qIHtjLDJrfSB7YysyaywyaysxfSB7Yys0aysxLDJyLTF9IHt0LDJrKzF9IHt0KzJrKzEsMmsrMX0ge3QrNGsrMiwycn0KKyAgICAgICB2MCAgICAgICB2MSAgICAgIGhpKHZpbmYpICAgICAgIHx2bTF8ICAgICAodjItdm0xKS8zICAgIEVNUFRZICovCisKKyAgLyogKDIpIHZtMSA8LSB0bTEgOj0gKHYxIC0gdm0xKSAvIDIgIFsoMSAxIDEgMSAxKSAtICgxIC0xIDEgLTEgMSldIC8gMiA9CisgICAgIHRtMSA+PSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCAgMSAwICAxIDApCisgICAgIE5vIGNhcnJ5IGNvbWVzIG91dCBmcm9tIHt2MSwga2sxfSArLy0ge3ZtMSwga2sxfSwKKyAgICAgYW5kIHRoZSBkaXZpc2lvbiBieSB0d28gaXMgZXhhY3QuCisgICAgIElmIChzYSE9MCkgdGhlIHNpZ24gb2Ygdm0xIGlzIG5lZ2F0aXZlICovCisgIGlmIChzYSkKKyAgICB7CisjaWZkZWYgSEFWRV9OQVRJVkVfbXBuX3JzaDFhZGRfbgorICAgICAgbXBuX3JzaDFhZGRfbiAodm0xLCB2MSwgdm0xLCBrazEpOworI2Vsc2UKKyAgICAgIEFTU0VSVF9OT0NBUlJZIChtcG5fYWRkX24gKHZtMSwgdjEsIHZtMSwga2sxKSk7CisgICAgICBBU1NFUlRfTk9DQVJSWSAobXBuX3JzaGlmdCAodm0xLCB2bTEsIGtrMSwgMSkpOworI2VuZGlmCisgICAgfQorICBlbHNlCisgICAgeworI2lmZGVmIEhBVkVfTkFUSVZFX21wbl9yc2gxc3ViX24KKyAgICAgIG1wbl9yc2gxc3ViX24gKHZtMSwgdjEsIHZtMSwga2sxKTsKKyNlbHNlCisgICAgICBBU1NFUlRfTk9DQVJSWSAobXBuX3N1Yl9uICh2bTEsIHYxLCB2bTEsIGtrMSkpOworICAgICAgQVNTRVJUX05PQ0FSUlkgKG1wbl9yc2hpZnQgKHZtMSwgdm0xLCBrazEsIDEpKTsKKyNlbmRpZgorICAgIH0KKworICAvKiB7Yywya30ge2MrMmssMmsrMX0ge2MrNGsrMSwyci0xfSB7dCwyaysxfSB7dCsyaysxLDJrKzF9IHt0KzRrKzIsMnJ9CisgICAgICAgdjAgICAgICAgdjEgICAgICAgIGhpKHZpbmYpICAgICAgIHRtMSAgICAgKHYyLXZtMSkvMyAgICBFTVBUWSAqLworCisgIC8qICgzKSB2MSA8LSB0MSA6PSB2MSAtIHYwICAgICgxIDEgMSAxIDEpIC0gKDAgMCAwIDAgMSkgPSAoMSAxIDEgMSAwKQorICAgICB0MSA+PSAwCisgICovCisgIHZpbmZbMF0gLT0gbXBuX3N1Yl9uICh2MSwgdjEsIGMsIHR3b2spOworCisgIC8qIHtjLDJrfSB7YysyaywyaysxfSB7Yys0aysxLDJyLTF9IHt0LDJrKzF9IHt0KzJrKzEsMmsrMX0ge3QrNGsrMiwycn0KKyAgICAgICB2MCAgICAgdjEtdjAgICAgICAgIGhpKHZpbmYpICAgICAgIHRtMSAgICAgKHYyLXZtMSkvMyAgICBFTVBUWSAqLworCisgIC8qICg0KSB2MiA8LSB0MiA6PSAoKHYyLXZtMSkvMy10MSkvMiA9ICh2Mi12bTEtMyp0MSkvNgorICAgICB0MiA+PSAwICAgICAgICAgICAgICAgICAgWyg1IDMgMSAxIDApIC0gKDEgMSAxIDEgMCldLzIgPSAoMiAxIDAgMCAwKQorICAqLworI2lmZGVmIEhBVkVfTkFUSVZFX21wbl9yc2gxc3ViX24KKyAgbXBuX3JzaDFzdWJfbiAodjIsIHYyLCB2MSwga2sxKTsKKyNlbHNlCisgIEFTU0VSVF9OT0NBUlJZIChtcG5fc3ViX24gKHYyLCB2MiwgdjEsIGtrMSkpOworICBBU1NFUlRfTk9DQVJSWSAobXBuX3JzaGlmdCAodjIsIHYyLCBrazEsIDEpKTsKKyNlbmRpZgorCisgIC8qIHtjLDJrfSB7YysyaywyaysxfSB7Yys0aysxLDJyLTF9IHt0LDJrKzF9IHt0KzJrKzEsMmsrMX0ge3QrNGsrMiwycn0KKyAgICAgICB2MCAgICAgdjEtdjAgICAgICAgIGhpKHZpbmYpICAgICB0bTEgICAgKHYyLXZtMS0zdDEpLzYgICAgRU1QVFkgKi8KKworICAvKiAoNSkgdjEgPC0gdDEtdG0xICAgICAgICAgICAoMSAxIDEgMSAwKSAtICgwIDEgMCAxIDApID0gKDEgMCAxIDAgMCkKKyAgICAgcmVzdWx0IGlzIHYxID49IDAKKyAgKi8KKyAgQVNTRVJUX05PQ0FSUlkgKG1wbl9zdWJfbiAodjEsIHYxLCB2bTEsIGtrMSkpOworCisgIC8qIFdlIGRvIG5vdCBuZWVkIHRvIHJlYWQgdGhlIHZhbHVlIGluIHZtMSwgc28gd2UgYWRkIGl0IGluIHtjK2ssIC4uLn0gKi8KKyAgY3kgPSBtcG5fYWRkX24gKGMxLCBjMSwgdm0xLCBrazEpOworICBNUE5fSU5DUl9VIChjMyArIDEsIHR3b3IgKyBrIC0gMSwgY3kpOyAvKiAybi0oM2srMSkgPSAycitrLTEgKi8KKyAgLyogTWVtb3J5IGFsbG9jYXRlZCBmb3Igdm0xIGlzIG5vdyBmcmVlLCBpdCBjYW4gYmUgcmVjeWNsZWQgLi4uKi8KKworICAvKiAoNikgdjIgPC0gdjIgLSAyKnZpbmYsICAgICAoMiAxIDAgMCAwKSAtIDIqKDEgMCAwIDAgMCkgPSAoMCAxIDAgMCAwKQorICAgICByZXN1bHQgaXMgdjIgPj0gMCAqLworICBzYXZlZCA9IHZpbmZbMF07ICAgICAgIC8qIFJlbWVtYmVyIHYxJ3MgaGlnaGVzdCBieXRlICh3aWxsIGJlIG92ZXJ3cml0dGVuKS4gKi8KKyAgdmluZlswXSA9IHZpbmYwOyAgICAgICAvKiBTZXQgdGhlIHJpZ2h0IHZhbHVlIGZvciB2aW5mMCAgICAgICAgICAgICAgICAgICAgICovCisjaWZkZWYgSEFWRV9OQVRJVkVfbXBuX3N1YmxzaDFfbl9pcDEKKyAgY3kgPSBtcG5fc3VibHNoMV9uX2lwMSAodjIsIHZpbmYsIHR3b3IpOworI2Vsc2UKKyAgLyogT3ZlcndyaXRlIHVudXNlZCB2bTEgKi8KKyAgY3kgPSBtcG5fbHNoaWZ0ICh2bTEsIHZpbmYsIHR3b3IsIDEpOworICBjeSArPSBtcG5fc3ViX24gKHYyLCB2Miwgdm0xLCB0d29yKTsKKyNlbmRpZgorICBNUE5fREVDUl9VICh2MiArIHR3b3IsIGtrMSAtIHR3b3IsIGN5KTsKKworICAvKiBDdXJyZW50IG1hdHJpeCBpcworICAgICBbMSAwIDAgMCAwOyB2aW5mCisgICAgICAwIDEgMCAwIDA7IHYyCisgICAgICAxIDAgMSAwIDA7IHYxCisgICAgICAwIDEgMCAxIDA7IHZtMQorICAgICAgMCAwIDAgMCAxXSB2MAorICAgICBTb21lIHZhbHVlcyBhbHJlYWR5IGFyZSBpbi1wbGFjZSAod2UgYWRkZWQgdm0xIGluIHRoZSBjb3JyZWN0IHBvc2l0aW9uKQorICAgICB8IHZpbmZ8ICB2MSB8ICB2MCB8CisJICAgICAgfCB2bTEgfAorICAgICBPbmUgc3RpbGwgaXMgaW4gYSBzZXBhcmF0ZWQgYXJlYQorCXwgK3YyIHwKKyAgICAgV2UgaGF2ZSB0byBjb21wdXRlIHYxLT12aW5mOyB2bTEgLT0gdjIsCisJICAgfC12aW5mfAorCSAgICAgIHwgLXYyIHwKKyAgICAgQ2FyZWZ1bGx5IHJlb3JkZXJpbmcgb3BlcmF0aW9ucyB3ZSBjYW4gYXZvaWQgdG8gY29tcHV0ZSB0d2ljZSB0aGUgc3VtCisgICAgIG9mIHRoZSBoaWdoIGhhbGYgb2YgdjIgcGx1cyB0aGUgbG93IGhhbGYgb2YgdmluZi4KKyAgKi8KKworICAvKiBBZGQgdGhlIGhpZ2ggaGFsZiBvZiB0MiBpbiB7dmluZn0gKi8KKyAgaWYgKCBMSUtFTFkodHdvciA+IGsgKyAxKSApIHsgLyogVGhpcyBpcyB0aGUgZXhwZWN0ZWQgZmxvdyAgKi8KKyAgICBjeSA9IG1wbl9hZGRfbiAodmluZiwgdmluZiwgdjIgKyBrLCBrICsgMSk7CisgICAgTVBOX0lOQ1JfVSAoYzMgKyBrazEsIHR3b3IgLSBrIC0gMSwgY3kpOyAvKiAybi0oNWsrMSkgPSAyci1rLTEgKi8KKyAgfSBlbHNlIHsgLyogdHJpZ2dlcmVkIG9ubHkgYnkgdmVyeSB1bmJhbGFuY2VkIGNhc2VzIGxpa2UKKwkgICAgICAoaytrKyhrLTIpKXgoaytrKzEpICwgc2hvdWxkIGJlIGhhbmRsZWQgYnkgdG9vbTMyICovCisgICAgQVNTRVJUX05PQ0FSUlkgKG1wbl9hZGRfbiAodmluZiwgdmluZiwgdjIgKyBrLCB0d29yKSk7CisgIH0KKyAgLyogKDcpIHYxIDwtIHYxIC0gdmluZiwgICAgICAgKDEgMCAxIDAgMCkgLSAoMSAwIDAgMCAwKSA9ICgwIDAgMSAwIDApCisgICAgIHJlc3VsdCBpcyA+PSAwICovCisgIC8qIFNpZGUgZWZmZWN0OiB3ZSBhbHNvIHN1YnRyYWN0ZWQgKGhpZ2ggaGFsZikgdm0xIC09IHYyICovCisgIGN5ID0gbXBuX3N1Yl9uICh2MSwgdjEsIHZpbmYsIHR3b3IpOyAgICAgICAgICAvKiB2aW5mIGlzIGF0IG1vc3QgdHdvciBsb25nLiAgKi8KKyAgdmluZjAgPSB2aW5mWzBdOyAgICAgICAgICAgICAgICAgICAgIC8qIFNhdmUgYWdhaW4gdGhlIHJpZ2h0IHZhbHVlIGZvciB2aW5mMCAqLworICB2aW5mWzBdID0gc2F2ZWQ7CisgIE1QTl9ERUNSX1UgKHYxICsgdHdvciwga2sxIC0gdHdvciwgY3kpOyAgICAgICAvKiBUcmVhdCB0aGUgbGFzdCBieXRlcy4gICAgICAgKi8KKworICAvKiAoOCkgdm0xIDwtIHZtMS12MiAgICAgICAgICAoMCAxIDAgMSAwKSAtICgwIDEgMCAwIDApID0gKDAgMCAwIDEgMCkKKyAgICAgT3BlcmF0ZSBvbmx5IG9uIHRoZSBsb3cgaGFsZi4KKyAgKi8KKyAgY3kgPSBtcG5fc3ViX24gKGMxLCBjMSwgdjIsIGspOworICBNUE5fREVDUl9VICh2MSwga2sxLCBjeSk7CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKiBCZWdpbm5pbmcgdGhlIGZpbmFsIHBoYXNlICoqKioqKioqKioqKioqKioqKioqKiovCisKKyAgLyogTW9zdCBvZiB0aGUgcmVjb21wb3NpdGlvbiB3YXMgZG9uZSAqLworCisgIC8qIGFkZCB0MiBpbiB7YyszaywgLi4ufSwgYnV0IG9ubHkgdGhlIGxvdyBoYWxmICovCisgIGN5ID0gbXBuX2FkZF9uIChjMywgYzMsIHYyLCBrKTsKKyAgdmluZlswXSArPSBjeTsKKyAgQVNTRVJUKHZpbmZbMF0gPj0gY3kpOyAvKiBObyBjYXJyeSAqLworICBNUE5fSU5DUl9VICh2aW5mLCB0d29yLCB2aW5mMCk7IC8qIEFkZCB2aW5mMCwgcHJvcGFnYXRlIGNhcnJ5LiAqLworCisjdW5kZWYgdjAKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy90b29tX2ludGVycG9sYXRlXzZwdHMuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy90b29tX2ludGVycG9sYXRlXzZwdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjIzNjYxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Rvb21faW50ZXJwb2xhdGVfNnB0cy5jCkBAIC0wLDAgKzEsMjQxIEBACisvKiBtcG5fdG9vbV9pbnRlcnBvbGF0ZV82cHRzIC0tIEludGVycG9sYXRlIGZvciB0b29tNDMsIDUyCisKKyAgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBNYXJjbyBCb2RyYXRvLgorCisgICBUSEUgRlVOQ1RJT04gSU4gVEhJUyBGSUxFIElTIElOVEVSTkFMIFdJVEggQSBNVVRBQkxFIElOVEVSRkFDRS4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggSVQgVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuICBJTiBGQUNULCBJVCBJUyBBTE1PU1QKKyAgIEdVQVJBTlRFRUQgVEhBVCBJVCBXSUxMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR05VIE1QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAyMDA5LCAyMDEwLCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworI2RlZmluZSBCSU5WRVJUXzMgTU9ETElNQl9JTlZFUlNFXzMKKworLyogRm9yIG9kZCBkaXZpc29ycywgbXBuX2RpdmV4YWN0XzEgd29ya3MgZmluZSB3aXRoIHR3bydzIGNvbXBsZW1lbnQuICovCisjaWZuZGVmIG1wbl9kaXZleGFjdF9ieTMKKyNpZiBIQVZFX05BVElWRV9tcG5fcGkxX2JkaXZfcV8xCisjZGVmaW5lIG1wbl9kaXZleGFjdF9ieTMoZHN0LHNyYyxzaXplKSBtcG5fcGkxX2JkaXZfcV8xKGRzdCxzcmMsc2l6ZSwzLEJJTlZFUlRfMywwKQorI2Vsc2UKKyNkZWZpbmUgbXBuX2RpdmV4YWN0X2J5Myhkc3Qsc3JjLHNpemUpIG1wbl9kaXZleGFjdF8xKGRzdCxzcmMsc2l6ZSwzKQorI2VuZGlmCisjZW5kaWYKKworLyogSW50ZXJwb2xhdGlvbiBmb3IgVG9vbS0zLjUsIHVzaW5nIHRoZSBldmFsdWF0aW9uIHBvaW50czogaW5maW5pdHksCisgICAxLCAtMSwgMiwgLTIuIE1vcmUgcHJlY2lzZWx5LCB3ZSB3YW50IHRvIGNvbXB1dGUKKyAgIGYoMl4oR01QX05VTUJfQklUUyAqIG4pKSBmb3IgYSBwb2x5bm9taWFsIGYgb2YgZGVncmVlIDUsIGdpdmVuIHRoZQorICAgc2l4IHZhbHVlcworCisgICAgIHc1ID0gZigwKSwKKyAgICAgdzQgPSBmKC0xKSwKKyAgICAgdzMgPSBmKDEpCisgICAgIHcyID0gZigtMiksCisgICAgIHcxID0gZigyKSwKKyAgICAgdzAgPSBsaW1pdCBhdCBpbmZpbml0eSBvZiBmKHgpIC8geF41LAorCisgICBUaGUgcmVzdWx0IGlzIHN0b3JlZCBpbiB7cHAsIDUqbiArIHcwbn0uIEF0IGVudHJ5LCB3NSBpcyBzdG9yZWQgYXQKKyAgIHtwcCwgMm59LCB3MyBpcyBzdG9yZWQgYXQge3BwICsgMm4sIDJuKzF9LCBhbmQgdzAgaXMgc3RvcmVkIGF0CisgICB7cHAgKyA1biwgdzBufS4gVGhlIG90aGVyIHZhbHVlcyBhcmUgMm4gKyAxIGxpbWJzIGVhY2ggKHdpdGggbW9zdAorICAgc2lnbmlmaWNhbnQgbGltYnMgc21hbGwpLiBmKC0xKSBhbmQgZigtMikgbWF5IGJlIG5lZ2F0aXZlLCBzaWducworICAgZGV0ZXJtaW5lZCBieSB0aGUgZmxhZyBiaXRzLiBBbGwgaW50ZXJtZWRpYXRlIHJlc3VsdHMgYXJlIHBvc2l0aXZlLgorICAgSW5wdXRzIGFyZSBkZXN0cm95ZWQuCisKKyAgIEludGVycG9sYXRpb24gc2VxdWVuY2Ugd2FzIHRha2VuIGZyb20gdGhlIHBhcGVyOiAiSW50ZWdlciBhbmQKKyAgIFBvbHlub21pYWwgTXVsdGlwbGljYXRpb246IFRvd2FyZHMgT3B0aW1hbCBUb29tLUNvb2sgTWF0cmljZXMiLgorICAgU29tZSBzbGlnaHQgdmFyaWF0aW9ucyB3ZXJlIGludHJvZHVjZWQ6IGFkYXB0YXRpb24gdG8gImdtcAorICAgaW5zdHJ1Y3Rpb24gc2V0IiwgYW5kIGEgZmluYWwgc2F2aW5nIG9mIGFuIG9wZXJhdGlvbiBieSBpbnRlcmxhY2luZworICAgaW50ZXJwb2xhdGlvbiBhbmQgcmVjb21wb3NpdGlvbiBwaGFzZXMuCisqLworCit2b2lkCittcG5fdG9vbV9pbnRlcnBvbGF0ZV82cHRzIChtcF9wdHIgcHAsIG1wX3NpemVfdCBuLCBlbnVtIHRvb202X2ZsYWdzIGZsYWdzLAorCQkJICAgbXBfcHRyIHc0LCBtcF9wdHIgdzIsIG1wX3B0ciB3MSwKKwkJCSAgIG1wX3NpemVfdCB3MG4pCit7CisgIG1wX2xpbWJfdCBjeTsKKyAgLyogY3k2IGNhbiBiZSBzdG9yZWQgaW4gdzFbMipuXSwgY3k0IGluIHc0WzBdLCBlbWJhbmttZW50IGluIHcyWzBdICovCisgIG1wX2xpbWJfdCBjeTQsIGN5NiwgZW1iYW5rbWVudDsKKworICBBU1NFUlQoIG4gPiAwICk7CisgIEFTU0VSVCggMipuID49IHcwbiAmJiB3MG4gPiAwICk7CisKKyNkZWZpbmUgdzUgIHBwCQkJCQkvKiAybiAgICovCisjZGVmaW5lIHczICAocHAgKyAyICogbikJCQkvKiAybisxICovCisjZGVmaW5lIHcwICAocHAgKyA1ICogbikJCQkvKiB3MG4gICovCisKKyAgLyogSW50ZXJwb2xhdGUgd2l0aCBzZXF1ZW5jZToKKyAgICAgVzIgPShXMSAtIFcyKT4+MgorICAgICBXMSA9KFcxIC0gVzUpPj4xCisgICAgIFcxID0oVzEgLSBXMik+PjEKKyAgICAgVzQgPShXMyAtIFc0KT4+MQorICAgICBXMiA9KFcyIC0gVzQpLzMKKyAgICAgVzMgPSBXMyAtIFc0IC0gVzUKKyAgICAgVzEgPShXMSAtIFczKS8zCisgICAgIC8vIExhc3Qgc3RlcHMgYXJlIG1peGVkIHdpdGggcmVjb21wb3NpdGlvbi4uLgorICAgICBXMiA9IFcyIC0gVzA8PDIKKyAgICAgVzQgPSBXNCAtIFcyCisgICAgIFczID0gVzMgLSBXMQorICAgICBXMiA9IFcyIC0gVzAKKyAgKi8KKworICAvKiBXMiA9KFcxIC0gVzIpPj4yICovCisgIGlmIChmbGFncyAmIHRvb202X3ZtMl9uZWcpCisgICAgbXBuX2FkZF9uICh3MiwgdzEsIHcyLCAyICogbiArIDEpOworICBlbHNlCisgICAgbXBuX3N1Yl9uICh3MiwgdzEsIHcyLCAyICogbiArIDEpOworICBtcG5fcnNoaWZ0ICh3MiwgdzIsIDIgKiBuICsgMSwgMik7CisKKyAgLyogVzEgPShXMSAtIFc1KT4+MSAqLworICB3MVsyKm5dIC09IG1wbl9zdWJfbiAodzEsIHcxLCB3NSwgMipuKTsKKyAgbXBuX3JzaGlmdCAodzEsIHcxLCAyICogbiArIDEsIDEpOworCisgIC8qIFcxID0oVzEgLSBXMik+PjEgKi8KKyNpZiBIQVZFX05BVElWRV9tcG5fcnNoMXN1Yl9uCisgIG1wbl9yc2gxc3ViX24gKHcxLCB3MSwgdzIsIDIgKiBuICsgMSk7CisjZWxzZQorICBtcG5fc3ViX24gKHcxLCB3MSwgdzIsIDIgKiBuICsgMSk7CisgIG1wbl9yc2hpZnQgKHcxLCB3MSwgMiAqIG4gKyAxLCAxKTsKKyNlbmRpZgorCisgIC8qIFc0ID0oVzMgLSBXNCk+PjEgKi8KKyAgaWYgKGZsYWdzICYgdG9vbTZfdm0xX25lZykKKyAgICB7CisjaWYgSEFWRV9OQVRJVkVfbXBuX3JzaDFhZGRfbgorICAgICAgbXBuX3JzaDFhZGRfbiAodzQsIHczLCB3NCwgMiAqIG4gKyAxKTsKKyNlbHNlCisgICAgICBtcG5fYWRkX24gKHc0LCB3MywgdzQsIDIgKiBuICsgMSk7CisgICAgICBtcG5fcnNoaWZ0ICh3NCwgdzQsIDIgKiBuICsgMSwgMSk7CisjZW5kaWYKKyAgICB9CisgIGVsc2UKKyAgICB7CisjaWYgSEFWRV9OQVRJVkVfbXBuX3JzaDFzdWJfbgorICAgICAgbXBuX3JzaDFzdWJfbiAodzQsIHczLCB3NCwgMiAqIG4gKyAxKTsKKyNlbHNlCisgICAgICBtcG5fc3ViX24gKHc0LCB3MywgdzQsIDIgKiBuICsgMSk7CisgICAgICBtcG5fcnNoaWZ0ICh3NCwgdzQsIDIgKiBuICsgMSwgMSk7CisjZW5kaWYKKyAgICB9CisKKyAgLyogVzIgPShXMiAtIFc0KS8zICovCisgIG1wbl9zdWJfbiAodzIsIHcyLCB3NCwgMiAqIG4gKyAxKTsKKyAgbXBuX2RpdmV4YWN0X2J5MyAodzIsIHcyLCAyICogbiArIDEpOworCisgIC8qIFczID0gVzMgLSBXNCAtIFc1ICovCisgIG1wbl9zdWJfbiAodzMsIHczLCB3NCwgMiAqIG4gKyAxKTsKKyAgdzNbMiAqIG5dIC09IG1wbl9zdWJfbiAodzMsIHczLCB3NSwgMiAqIG4pOworCisgIC8qIFcxID0oVzEgLSBXMykvMyAqLworICBtcG5fc3ViX24gKHcxLCB3MSwgdzMsIDIgKiBuICsgMSk7CisgIG1wbl9kaXZleGFjdF9ieTMgKHcxLCB3MSwgMiAqIG4gKyAxKTsKKworICAvKgorICAgIFsxIDAgMCAwIDAgMDsKKyAgICAgMCAxIDAgMCAwIDA7CisgICAgIDEgMCAxIDAgMCAwOworICAgICAwIDEgMCAxIDAgMDsKKyAgICAgMSAwIDEgMCAxIDA7CisgICAgIDAgMCAwIDAgMCAxXQorCisgICAgcHBbXSBwcmlvciB0byBvcGVyYXRpb25zOgorICAgICB8X0ggdzBfX3xfTCB3MF9ffF9fX19fX3x8X0ggdzNfX3xfTCB3M19ffF9IIHc1X198X0wgdzVfX3wKKworICAgIHN1bW1hdGlvbiBzY2hlbWUgZm9yIHJlbWFpbmluZyBvcGVyYXRpb25zOgorICAgICB8X19fX19fX19fX19fX181fG5fX19fXzR8bl9fX19fM3xuX19fX18yfG5fX19fX198bl9fX19fX3xwcAorICAgICB8X0ggdzBfX3xfTCB3MF9ffF9fX19fX3x8X0ggdzNfX3xfTCB3M19ffF9IIHc1X198X0wgdzVfX3wKKwkJCQkgICAgfHwgSCB3NCAgfCBMIHc0ICB8CisJCSAgICB8fCBIIHcyICB8IEwgdzIgIHwKKwkgICAgfHwgSCB3MSAgfCBMIHcxICB8CisJCQkgICAgfHwtSCB3MSAgfC1MIHcxICB8CisJCSAgICAgfC1IIHcwICB8LUwgdzAgfHwtSCB3MiAgfC1MIHcyICB8CisgICovCisgIGN5ID0gbXBuX2FkZF9uIChwcCArIG4sIHBwICsgbiwgdzQsIDIgKiBuICsgMSk7CisgIE1QTl9JTkNSX1UgKHBwICsgMyAqIG4gKyAxLCBuLCBjeSk7CisKKyAgLyogVzIgLT0gVzA8PDIgKi8KKyNpZiBIQVZFX05BVElWRV9tcG5fc3VibHNoX24gfHwgSEFWRV9OQVRJVkVfbXBuX3N1YmxzaDJfbl9pcDEKKyNpZiBIQVZFX05BVElWRV9tcG5fc3VibHNoMl9uX2lwMQorICBjeSA9IG1wbl9zdWJsc2gyX25faXAxICh3MiwgdzAsIHcwbik7CisjZWxzZQorICBjeSA9IG1wbl9zdWJsc2hfbiAodzIsIHcyLCB3MCwgdzBuLCAyKTsKKyNlbmRpZgorI2Vsc2UKKyAgLyoge1c0LDIqbisxfSBpcyBub3cgZnJlZSBhbmQgY2FuIGJlIG92ZXJ3cml0dGVuLiAqLworICBjeSA9IG1wbl9sc2hpZnQodzQsIHcwLCB3MG4sIDIpOworICBjeSs9IG1wbl9zdWJfbih3MiwgdzIsIHc0LCB3MG4pOworI2VuZGlmCisgIE1QTl9ERUNSX1UgKHcyICsgdzBuLCAyICogbiArIDEgLSB3MG4sIGN5KTsKKworICAvKiBXNEwgPSBXNEwgLSBXMkwgKi8KKyAgY3kgPSBtcG5fc3ViX24gKHBwICsgbiwgcHAgKyBuLCB3Miwgbik7CisgIE1QTl9ERUNSX1UgKHczLCAyICogbiArIDEsIGN5KTsKKworICAvKiBXM0ggPSBXM0ggKyBXMkwgKi8KKyAgY3k0ID0gdzNbMiAqIG5dICsgbXBuX2FkZF9uIChwcCArIDMgKiBuLCBwcCArIDMgKiBuLCB3Miwgbik7CisgIC8qIFcxTCArIFcySCAqLworICBjeSA9IHcyWzIgKiBuXSArIG1wbl9hZGRfbiAocHAgKyA0ICogbiwgdzEsIHcyICsgbiwgbik7CisgIE1QTl9JTkNSX1UgKHcxICsgbiwgbiArIDEsIGN5KTsKKworICAvKiBXMCA9IFcwICsgVzFIICovCisgIGlmIChMSUtFTFkgKHcwbiA+IG4pKQorICAgIGN5NiA9IHcxWzIgKiBuXSArIG1wbl9hZGRfbiAodzAsIHcwLCB3MSArIG4sIG4pOworICBlbHNlCisgICAgY3k2ID0gbXBuX2FkZF9uICh3MCwgdzAsIHcxICsgbiwgdzBuKTsKKworICAvKgorICAgIHN1bW1hdGlvbiBzY2hlbWUgZm9yIHRoZSBuZXh0IG9wZXJhdGlvbjoKKyAgICAgfC4uLl9fX181fG5fX19fXzR8bl9fX19fM3xuX19fX18yfG5fX19fX198bl9fX19fX3xwcAorICAgICB8Li4udzBfX198X3cxX3cyX3xfSCB3M19ffF9MIHczX198X0ggdzVfX3xfTCB3NV9ffAorCQkgICAgIC4uLi13MF9fX3wtdzFfdzIgfAorICAqLworICAvKiBpZihMSUtFTFkodzBuPm4pKSB0aGUgdHdvIG9wZXJhbmRzIGJlbG93IERPIG92ZXJsYXAhICovCisgIGN5ID0gbXBuX3N1Yl9uIChwcCArIDIgKiBuLCBwcCArIDIgKiBuLCBwcCArIDQgKiBuLCBuICsgdzBuKTsKKworICAvKiBlbWJhbmttZW50IGlzIGEgImRpcnR5IHRyaWNrIiB0byBhdm9pZCBjYXJyeS9ib3Jyb3cgcHJvcGFnYXRpb24KKyAgICAgYmV5b25kIGFsbG9jYXRlZCBtZW1vcnkgKi8KKyAgZW1iYW5rbWVudCA9IHcwW3cwbiAtIDFdIC0gMTsKKyAgdzBbdzBuIC0gMV0gPSAxOworICBpZiAoTElLRUxZICh3MG4gPiBuKSkgeworICAgIGlmIChjeTQgPiBjeTYpCisgICAgICBNUE5fSU5DUl9VIChwcCArIDQgKiBuLCB3MG4gKyBuLCBjeTQgLSBjeTYpOworICAgIGVsc2UKKyAgICAgIE1QTl9ERUNSX1UgKHBwICsgNCAqIG4sIHcwbiArIG4sIGN5NiAtIGN5NCk7CisgICAgTVBOX0RFQ1JfVSAocHAgKyAzICogbiArIHcwbiwgMiAqIG4sIGN5KTsKKyAgICBNUE5fSU5DUl9VICh3MCArIG4sIHcwbiAtIG4sIGN5Nik7CisgIH0gZWxzZSB7CisgICAgTVBOX0lOQ1JfVSAocHAgKyA0ICogbiwgdzBuICsgbiwgY3k0KTsKKyAgICBNUE5fREVDUl9VIChwcCArIDMgKiBuICsgdzBuLCAyICogbiwgY3kgKyBjeTYpOworICB9CisgIHcwW3cwbiAtIDFdICs9IGVtYmFua21lbnQ7CisKKyN1bmRlZiB3NQorI3VuZGVmIHczCisjdW5kZWYgdzAKKworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Rvb21faW50ZXJwb2xhdGVfN3B0cy5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Rvb21faW50ZXJwb2xhdGVfN3B0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2N2M0NWIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvdG9vbV9pbnRlcnBvbGF0ZV83cHRzLmMKQEAgLTAsMCArMSwyNzQgQEAKKy8qIG1wbl90b29tX2ludGVycG9sYXRlXzdwdHMgLS0gSW50ZXJwb2xhdGUgZm9yIHRvb200NCwgNTMsIDYyLgorCisgICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgTmllbHMgTcO2bGxlci4KKyAgIEltcHJvdmVtZW50cyBieSBNYXJjbyBCb2RyYXRvLgorCisgICBUSEUgRlVOQ1RJT04gSU4gVEhJUyBGSUxFIElTIElOVEVSTkFMIFdJVEggQSBNVVRBQkxFIElOVEVSRkFDRS4gIElUIElTIE9OTFkKKyAgIFNBRkUgVE8gUkVBQ0ggSVQgVEhST1VHSCBET0NVTUVOVEVEIElOVEVSRkFDRVMuICBJTiBGQUNULCBJVCBJUyBBTE1PU1QKKyAgIEdVQVJBTlRFRUQgVEhBVCBJVCBXSUxMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR05VIE1QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAyMDA2LCAyMDA3LCAyMDA5LCAyMDE0LCAyMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworI2RlZmluZSBCSU5WRVJUXzMgTU9ETElNQl9JTlZFUlNFXzMKKworI2RlZmluZSBCSU5WRVJUXzkgXAorICAoKCgoR01QX05VTUJfTUFYIC8gOSkgPDwgKDYgLSBHTVBfTlVNQl9CSVRTICUgNikpICogOCAmIEdNUF9OVU1CX01BWCkgfCAweDM5KQorCisjZGVmaW5lIEJJTlZFUlRfMTUgXAorICAoKCgoR01QX05VTUJfTUFYID4+IChHTVBfTlVNQl9CSVRTICUgNCkpIC8gMTUpICogMTQgKiAxNiAmIEdNUF9OVU1CX01BWCkgKyAxNSkKKworLyogRm9yIHRoZSB2YXJpb3VzIG1wbl9kaXZleGFjdF9ieU4gaGVyZSwgZmFsbCBiYWNrIHRvIHVzaW5nIGVpdGhlcgorICAgbXBuX3BpMV9iZGl2X3FfMSBvciBtcG5fZGl2ZXhhY3RfMS4gIFRoZSBmb3JtZXIgaGFzIGxlc3Mgb3ZlcmhlYWQgYW5kIGlzCisgICBtYW55IGZhc3RlciBpZiBpdCBpcyBuYXRpdmUuICBGb3Igbm93LCBzaW5jZSBtcG5fZGl2ZXhhY3RfMSBpcyBuYXRpdmUgb24KKyAgIHNldmVyYWwgcGxhdGZvcm1zIHdoZXJlIG1wbl9waTFfYmRpdl9xXzEgZG9lcyBub3QgeWV0IGV4aXN0LCBkbyBub3QgdXNlCisgICBtcG5fcGkxX2JkaXZfcV8xIHVuY29uZGl0aW9uYWxseS4gIEZJWE1FLiAgKi8KKworLyogRm9yIG9kZCBkaXZpc29ycywgbXBuX2RpdmV4YWN0XzEgd29ya3MgZmluZSB3aXRoIHR3bydzIGNvbXBsZW1lbnQuICovCisjaWZuZGVmIG1wbl9kaXZleGFjdF9ieTMKKyNpZiBIQVZFX05BVElWRV9tcG5fcGkxX2JkaXZfcV8xCisjZGVmaW5lIG1wbl9kaXZleGFjdF9ieTMoZHN0LHNyYyxzaXplKSBtcG5fcGkxX2JkaXZfcV8xKGRzdCxzcmMsc2l6ZSwzLEJJTlZFUlRfMywwKQorI2Vsc2UKKyNkZWZpbmUgbXBuX2RpdmV4YWN0X2J5Myhkc3Qsc3JjLHNpemUpIG1wbl9kaXZleGFjdF8xKGRzdCxzcmMsc2l6ZSwzKQorI2VuZGlmCisjZW5kaWYKKworI2lmbmRlZiBtcG5fZGl2ZXhhY3RfYnk5CisjaWYgSEFWRV9OQVRJVkVfbXBuX3BpMV9iZGl2X3FfMQorI2RlZmluZSBtcG5fZGl2ZXhhY3RfYnk5KGRzdCxzcmMsc2l6ZSkgbXBuX3BpMV9iZGl2X3FfMShkc3Qsc3JjLHNpemUsOSxCSU5WRVJUXzksMCkKKyNlbHNlCisjZGVmaW5lIG1wbl9kaXZleGFjdF9ieTkoZHN0LHNyYyxzaXplKSBtcG5fZGl2ZXhhY3RfMShkc3Qsc3JjLHNpemUsOSkKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgbXBuX2RpdmV4YWN0X2J5MTUKKyNpZiBIQVZFX05BVElWRV9tcG5fcGkxX2JkaXZfcV8xCisjZGVmaW5lIG1wbl9kaXZleGFjdF9ieTE1KGRzdCxzcmMsc2l6ZSkgbXBuX3BpMV9iZGl2X3FfMShkc3Qsc3JjLHNpemUsMTUsQklOVkVSVF8xNSwwKQorI2Vsc2UKKyNkZWZpbmUgbXBuX2RpdmV4YWN0X2J5MTUoZHN0LHNyYyxzaXplKSBtcG5fZGl2ZXhhY3RfMShkc3Qsc3JjLHNpemUsMTUpCisjZW5kaWYKKyNlbmRpZgorCisvKiBJbnRlcnBvbGF0aW9uIGZvciB0b29tNCwgdXNpbmcgdGhlIGV2YWx1YXRpb24gcG9pbnRzIDAsIGluZmluaXR5LAorICAgMSwgLTEsIDIsIC0yLCAxLzIuIE1vcmUgcHJlY2lzZWx5LCB3ZSB3YW50IHRvIGNvbXB1dGUKKyAgIGYoMl4oR01QX05VTUJfQklUUyAqIG4pKSBmb3IgYSBwb2x5bm9taWFsIGYgb2YgZGVncmVlIDYsIGdpdmVuIHRoZQorICAgc2V2ZW4gdmFsdWVzCisKKyAgICAgdzAgPSBmKDApLAorICAgICB3MSA9IGYoLTIpLAorICAgICB3MiA9IGYoMSksCisgICAgIHczID0gZigtMSksCisgICAgIHc0ID0gZigyKQorICAgICB3NSA9IDY0ICogZigxLzIpCisgICAgIHc2ID0gbGltaXQgYXQgaW5maW5pdHkgb2YgZih4KSAvIHheNiwKKworICAgVGhlIHJlc3VsdCBpcyA2Km4gKyB3Nm4gbGltYnMuIEF0IGVudHJ5LCB3MCBpcyBzdG9yZWQgYXQge3JwLCAybiB9LAorICAgdzIgaXMgc3RvcmVkIGF0IHsgcnAgKyAybiwgMm4rMSB9LCBhbmQgdzYgaXMgc3RvcmVkIGF0IHsgcnAgKyA2biwKKyAgIHc2biB9LiBUaGUgb3RoZXIgdmFsdWVzIGFyZSAybiArIDEgbGltYnMgZWFjaCAod2l0aCBtb3N0CisgICBzaWduaWZpY2FudCBsaW1icyBzbWFsbCkuIGYoLTEpIGFuZCBmKC0xLzIpIG1heSBiZSBuZWdhdGl2ZSwgc2lnbnMKKyAgIGRldGVybWluZWQgYnkgdGhlIGZsYWcgYml0cy4gSW5wdXRzIGFyZSBkZXN0cm95ZWQuCisKKyAgIE5lZWRzICgyKm4gKyAxKSBsaW1icyBvZiB0ZW1wb3Jhcnkgc3RvcmFnZS4KKyovCisKK3ZvaWQKK21wbl90b29tX2ludGVycG9sYXRlXzdwdHMgKG1wX3B0ciBycCwgbXBfc2l6ZV90IG4sIGVudW0gdG9vbTdfZmxhZ3MgZmxhZ3MsCisJCQkgICBtcF9wdHIgdzEsIG1wX3B0ciB3MywgbXBfcHRyIHc0LCBtcF9wdHIgdzUsCisJCQkgICBtcF9zaXplX3QgdzZuLCBtcF9wdHIgdHApCit7CisgIG1wX3NpemVfdCBtOworICBtcF9saW1iX3QgY3k7CisKKyAgbSA9IDIqbiArIDE7CisjZGVmaW5lIHcwIHJwCisjZGVmaW5lIHcyIChycCArIDIqbikKKyNkZWZpbmUgdzYgKHJwICsgNipuKQorCisgIEFTU0VSVCAodzZuID4gMCk7CisgIEFTU0VSVCAodzZuIDw9IDIqbik7CisKKyAgLyogVXNpbmcgZm9ybXVsYXMgc2ltaWxhciB0byBNYXJjbyBCb2RyYXRvJ3MKKworICAgICBXNSA9IFc1ICsgVzQKKyAgICAgVzEgPShXNCAtIFcxKS8yCisgICAgIFc0ID0gVzQgLSBXMAorICAgICBXNCA9KFc0IC0gVzEpLzQgLSBXNioxNgorICAgICBXMyA9KFcyIC0gVzMpLzIKKyAgICAgVzIgPSBXMiAtIFczCisKKyAgICAgVzUgPSBXNSAtIFcyKjY1ICAgICAgTWF5IGJlIG5lZ2F0aXZlLgorICAgICBXMiA9IFcyIC0gVzYgLSBXMAorICAgICBXNSA9KFc1ICsgVzIqNDUpLzIgICBOb3cgPj0gMCBhZ2Fpbi4KKyAgICAgVzQgPShXNCAtIFcyKS8zCisgICAgIFcyID0gVzIgLSBXNAorCisgICAgIFcxID0gVzUgLSBXMSAgICAgICAgIE1heSBiZSBuZWdhdGl2ZS4KKyAgICAgVzUgPShXNSAtIFczKjgpLzkKKyAgICAgVzMgPSBXMyAtIFc1CisgICAgIFcxID0oVzEvMTUgKyBXNSkvMiAgIE5vdyA+PSAwIGFnYWluLgorICAgICBXNSA9IFc1IC0gVzEKKworICAgICB3aGVyZSBXMCA9IGYoMCksIFcxID0gZigtMiksIFcyID0gZigxKSwgVzMgPSBmKC0xKSwKKwkgICBXNCA9IGYoMiksIFc1ID0gZigxLzIpLCBXNiA9IGYob28pLAorCisgICAgIE5vdGUgdGhhdCBtb3N0IGludGVybWVkaWF0ZSByZXN1bHRzIGFyZSBwb3NpdGl2ZTsgdGhlIG9uZXMgdGhhdAorICAgICBtYXkgYmUgbmVnYXRpdmUgYXJlIHJlcHJlc2VudGVkIGluIHR3bydzIGNvbXBsZW1lbnQuIFdlIG11c3QKKyAgICAgbmV2ZXIgc2hpZnQgcmlnaHQgYSB2YWx1ZSB0aGF0IG1heSBiZSBuZWdhdGl2ZSwgc2luY2UgdGhhdCB3b3VsZAorICAgICBpbnZhbGlkYXRlIHRoZSBzaWduIGJpdC4gT24gdGhlIG90aGVyIGhhbmQsIGRpdmV4YWN0IGJ5IG9kZAorICAgICBudW1iZXJzIHdvcmsgZmluZSB3aXRoIHR3bydzIGNvbXBsZW1lbnQuCisgICovCisKKyAgbXBuX2FkZF9uICh3NSwgdzUsIHc0LCBtKTsKKyAgaWYgKGZsYWdzICYgdG9vbTdfdzFfbmVnKQorICAgIHsKKyNpZmRlZiBIQVZFX05BVElWRV9tcG5fcnNoMWFkZF9uCisgICAgICBtcG5fcnNoMWFkZF9uICh3MSwgdzEsIHc0LCBtKTsKKyNlbHNlCisgICAgICBtcG5fYWRkX24gKHcxLCB3MSwgdzQsIG0pOyAgQVNTRVJUICghKHcxWzBdICYgMSkpOworICAgICAgbXBuX3JzaGlmdCAodzEsIHcxLCBtLCAxKTsKKyNlbmRpZgorICAgIH0KKyAgZWxzZQorICAgIHsKKyNpZmRlZiBIQVZFX05BVElWRV9tcG5fcnNoMXN1Yl9uCisgICAgICBtcG5fcnNoMXN1Yl9uICh3MSwgdzQsIHcxLCBtKTsKKyNlbHNlCisgICAgICBtcG5fc3ViX24gKHcxLCB3NCwgdzEsIG0pOyAgQVNTRVJUICghKHcxWzBdICYgMSkpOworICAgICAgbXBuX3JzaGlmdCAodzEsIHcxLCBtLCAxKTsKKyNlbmRpZgorICAgIH0KKyAgbXBuX3N1YiAodzQsIHc0LCBtLCB3MCwgMipuKTsKKyAgbXBuX3N1Yl9uICh3NCwgdzQsIHcxLCBtKTsgIEFTU0VSVCAoISh3NFswXSAmIDMpKTsKKyAgbXBuX3JzaGlmdCAodzQsIHc0LCBtLCAyKTsgLyogdzQ+PTAgKi8KKworICB0cFt3Nm5dID0gbXBuX2xzaGlmdCAodHAsIHc2LCB3Nm4sIDQpOworICBtcG5fc3ViICh3NCwgdzQsIG0sIHRwLCB3Nm4rMSk7CisKKyAgaWYgKGZsYWdzICYgdG9vbTdfdzNfbmVnKQorICAgIHsKKyNpZmRlZiBIQVZFX05BVElWRV9tcG5fcnNoMWFkZF9uCisgICAgICBtcG5fcnNoMWFkZF9uICh3MywgdzMsIHcyLCBtKTsKKyNlbHNlCisgICAgICBtcG5fYWRkX24gKHczLCB3MywgdzIsIG0pOyAgQVNTRVJUICghKHczWzBdICYgMSkpOworICAgICAgbXBuX3JzaGlmdCAodzMsIHczLCBtLCAxKTsKKyNlbmRpZgorICAgIH0KKyAgZWxzZQorICAgIHsKKyNpZmRlZiBIQVZFX05BVElWRV9tcG5fcnNoMXN1Yl9uCisgICAgICBtcG5fcnNoMXN1Yl9uICh3MywgdzIsIHczLCBtKTsKKyNlbHNlCisgICAgICBtcG5fc3ViX24gKHczLCB3MiwgdzMsIG0pOyAgQVNTRVJUICghKHczWzBdICYgMSkpOworICAgICAgbXBuX3JzaGlmdCAodzMsIHczLCBtLCAxKTsKKyNlbmRpZgorICAgIH0KKworICBtcG5fc3ViX24gKHcyLCB3MiwgdzMsIG0pOworCisgIG1wbl9zdWJtdWxfMSAodzUsIHcyLCBtLCA2NSk7CisgIG1wbl9zdWIgKHcyLCB3MiwgbSwgdzYsIHc2bik7CisgIG1wbl9zdWIgKHcyLCB3MiwgbSwgdzAsIDIqbik7CisKKyAgbXBuX2FkZG11bF8xICh3NSwgdzIsIG0sIDQ1KTsgIEFTU0VSVCAoISh3NVswXSAmIDEpKTsKKyAgbXBuX3JzaGlmdCAodzUsIHc1LCBtLCAxKTsKKyAgbXBuX3N1Yl9uICh3NCwgdzQsIHcyLCBtKTsKKworICBtcG5fZGl2ZXhhY3RfYnkzICh3NCwgdzQsIG0pOworICBtcG5fc3ViX24gKHcyLCB3MiwgdzQsIG0pOworCisgIG1wbl9zdWJfbiAodzEsIHc1LCB3MSwgbSk7CisgIG1wbl9sc2hpZnQgKHRwLCB3MywgbSwgMyk7CisgIG1wbl9zdWJfbiAodzUsIHc1LCB0cCwgbSk7CisgIG1wbl9kaXZleGFjdF9ieTkgKHc1LCB3NSwgbSk7CisgIG1wbl9zdWJfbiAodzMsIHczLCB3NSwgbSk7CisKKyAgbXBuX2RpdmV4YWN0X2J5MTUgKHcxLCB3MSwgbSk7CisjaWZkZWYgSEFWRV9OQVRJVkVfbXBuX3JzaDFhZGRfbgorICBtcG5fcnNoMWFkZF9uICh3MSwgdzEsIHc1LCBtKTsKKyAgdzFbbSAtIDFdICY9IEdNUF9OVU1CX01BU0sgPj4gMTsKKyNlbHNlCisgIG1wbl9hZGRfbiAodzEsIHcxLCB3NSwgbSk7ICBBU1NFUlQgKCEodzFbMF0gJiAxKSk7CisgIG1wbl9yc2hpZnQgKHcxLCB3MSwgbSwgMSk7IC8qIHcxPj0wIG5vdyAqLworI2VuZGlmCisKKyAgbXBuX3N1Yl9uICh3NSwgdzUsIHcxLCBtKTsKKworICAvKiBUaGVzZSBib3VuZHMgYXJlIHZhbGlkIGZvciB0aGUgNHg0IHBvbHlub21pYWwgcHJvZHVjdCBvZiB0b29tNDQsCisgICAqIGFuZCB0aGV5IGFyZSBjb25zZXJ2YXRpdmUgZm9yIHRvb201MyBhbmQgdG9vbTYyLiAqLworICBBU1NFUlQgKHcxWzIqbl0gPCAyKTsKKyAgQVNTRVJUICh3MlsyKm5dIDwgMyk7CisgIEFTU0VSVCAodzNbMipuXSA8IDQpOworICBBU1NFUlQgKHc0WzIqbl0gPCAzKTsKKyAgQVNTRVJUICh3NVsyKm5dIDwgMik7CisKKyAgLyogQWRkaXRpb24gY2hhaW4uIE5vdGUgY2FycmllcyBhbmQgdGhlIDJuJ3RoIGxpbWJzIHRoYXQgbmVlZCB0byBiZQorICAgKiBhZGRlZCBpbi4KKyAgICoKKyAgICogU3BlY2lhbCBjYXJlIGlzIG5lZWRlZCBmb3IgdzJbMm5dIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjYXJyeSwKKyAgICogc2luY2UgdGhlICJzaW1wbGUiIHdheSBvZiBhZGRpbmcgaXQgYWxsIHRvZ2V0aGVyIHdvdWxkIG92ZXJ3cml0ZQorICAgKiB0aGUgbGltYiBhdCB3cFsyKm5dIGFuZCBycFs0Km5dIChzYW1lIGxvY2F0aW9uKSB3aXRoIHRoZSBzdW0gb2YKKyAgICogdGhlIGhpZ2ggaGFsZiBvZiB3MyBhbmQgdGhlIGxvdyBoYWxmIG9mIHc0LgorICAgKgorICAgKiAgICAgICAgIDcgICAgNiAgICA1ICAgIDQgICAgMyAgICAyICAgIDEgICAgMAorICAgKiAgICB8ICAgIHwgICAgfCAgICB8ICAgIHwgICAgfCAgICB8ICAgIHwgICAgfAorICAgKiAgICAgICAgICAgICAgICAgIHx8dzMgKDJuKzEpfAorICAgKiAgICAgICAgICAgICB8fHc0ICgybisxKXwKKyAgICogICAgICAgIHx8dzUgKDJuKzEpfCAgICAgICAgfHx3MSAoMm4rMSl8CisgICAqICArIHwgdzYgKHc2bil8ICAgICAgICB8fHcyICgybisxKXwgdzAgKDJuKSB8ICAoc2hhcmUgc3RvcmFnZSB3aXRoIHIpCisgICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgKiAgciB8ICAgIHwgICAgfCAgICB8ICAgIHwgICAgfCAgICB8ICAgIHwgICAgfAorICAgKiAgICAgICAgYzcgICBjNiAgIGM1ICAgYzQgICBjMyAgICAgICAgICAgICAgICAgQ2FycmllcyB0byBwcm9wYWdhdGUKKyAgICovCisKKyAgY3kgPSBtcG5fYWRkX24gKHJwICsgbiwgcnAgKyBuLCB3MSwgbSk7CisgIE1QTl9JTkNSX1UgKHcyICsgbiArIDEsIG4gLCBjeSk7CisgIGN5ID0gbXBuX2FkZF9uIChycCArIDMqbiwgcnAgKyAzKm4sIHczLCBuKTsKKyAgTVBOX0lOQ1JfVSAodzMgKyBuLCBuICsgMSwgdzJbMipuXSArIGN5KTsKKyAgY3kgPSBtcG5fYWRkX24gKHJwICsgNCpuLCB3MyArIG4sIHc0LCBuKTsKKyAgTVBOX0lOQ1JfVSAodzQgKyBuLCBuICsgMSwgdzNbMipuXSArIGN5KTsKKyAgY3kgPSBtcG5fYWRkX24gKHJwICsgNSpuLCB3NCArIG4sIHc1LCBuKTsKKyAgTVBOX0lOQ1JfVSAodzUgKyBuLCBuICsgMSwgdzRbMipuXSArIGN5KTsKKyAgaWYgKHc2biA+IG4gKyAxKQorICAgIHsKKyAgICAgIGN5ID0gbXBuX2FkZF9uIChycCArIDYqbiwgcnAgKyA2Km4sIHc1ICsgbiwgbiArIDEpOworICAgICAgTVBOX0lOQ1JfVSAocnAgKyA3Km4gKyAxLCB3Nm4gLSBuIC0gMSwgY3kpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIEFTU0VSVF9OT0NBUlJZIChtcG5fYWRkX24gKHJwICsgNipuLCBycCArIDYqbiwgdzUgKyBuLCB3Nm4pKTsKKyNpZiBXQU5UX0FTU0VSVAorICAgICAgeworCW1wX3NpemVfdCBpOworCWZvciAoaSA9IHc2bjsgaSA8PSBuOyBpKyspCisJICBBU1NFUlQgKHc1W24gKyBpXSA9PSAwKTsKKyAgICAgIH0KKyNlbmRpZgorICAgIH0KK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy90b29tX2ludGVycG9sYXRlXzhwdHMuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy90b29tX2ludGVycG9sYXRlXzhwdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTY1ZmFiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3Rvb21faW50ZXJwb2xhdGVfOHB0cy5jCkBAIC0wLDAgKzEsMjExIEBACisvKiBtcG5fdG9vbV9pbnRlcnBvbGF0ZV84cHRzIC0tIEludGVycG9sYXRlIGZvciB0b29tNTQsIDYzLCA3Mi4KKworICAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IE1hcmNvIEJvZHJhdG8uCisKKyAgIFRIRSBGVU5DVElPTiBJTiBUSElTIEZJTEUgSVMgSU5URVJOQUwgV0lUSCBBIE1VVEFCTEUgSU5URVJGQUNFLiAgSVQgSVMgT05MWQorICAgU0FGRSBUTyBSRUFDSCBJVCBUSFJPVUdIIERPQ1VNRU5URUQgSU5URVJGQUNFUy4gIElOIEZBQ1QsIElUIElTIEFMTU9TVAorICAgR1VBUkFOVEVFRCBUSEFUIElUIFdJTEwgQ0hBTkdFIE9SIERJU0FQUEVBUiBJTiBBIEZVVFVSRSBHTlUgTVAgUkVMRUFTRS4KKworQ29weXJpZ2h0IDIwMDksIDIwMTEsIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCisjZGVmaW5lIEJJTlZFUlRfMyBNT0RMSU1CX0lOVkVSU0VfMworCisjZGVmaW5lIEJJTlZFUlRfMTUgXAorICAoKCgoR01QX05VTUJfTUFYID4+IChHTVBfTlVNQl9CSVRTICUgNCkpIC8gMTUpICogMTQgKiAxNiAmIEdNUF9OVU1CX01BWCkgKyAxNSkKKworI2RlZmluZSBCSU5WRVJUXzQ1ICgoQklOVkVSVF8xNSAqIEJJTlZFUlRfMykgJiBHTVBfTlVNQl9NQVNLKQorCisjaWZuZGVmIG1wbl9kaXZleGFjdF9ieTMKKyNpZiBIQVZFX05BVElWRV9tcG5fcGkxX2JkaXZfcV8xCisjZGVmaW5lIG1wbl9kaXZleGFjdF9ieTMoZHN0LHNyYyxzaXplKSBtcG5fcGkxX2JkaXZfcV8xKGRzdCxzcmMsc2l6ZSwzLEJJTlZFUlRfMywwKQorI2Vsc2UKKyNkZWZpbmUgbXBuX2RpdmV4YWN0X2J5Myhkc3Qsc3JjLHNpemUpIG1wbl9kaXZleGFjdF8xKGRzdCxzcmMsc2l6ZSwzKQorI2VuZGlmCisjZW5kaWYKKworI2lmbmRlZiBtcG5fZGl2ZXhhY3RfYnk0NQorI2lmIEdNUF9OVU1CX0JJVFMgJSAxMiA9PSAwCisjZGVmaW5lIG1wbl9kaXZleGFjdF9ieTQ1KGRzdCxzcmMsc2l6ZSkgXAorICAoNjMgJiAxOSAqIG1wbl9iZGl2X2RibTEgKGRzdCwgc3JjLCBzaXplLCBfX0dNUF9DQVNUIChtcF9saW1iX3QsIEdNUF9OVU1CX01BU0sgLyA0NSkpKQorI2Vsc2UKKyNpZiBIQVZFX05BVElWRV9tcG5fcGkxX2JkaXZfcV8xCisjZGVmaW5lIG1wbl9kaXZleGFjdF9ieTQ1KGRzdCxzcmMsc2l6ZSkgbXBuX3BpMV9iZGl2X3FfMShkc3Qsc3JjLHNpemUsNDUsQklOVkVSVF80NSwwKQorI2Vsc2UKKyNkZWZpbmUgbXBuX2RpdmV4YWN0X2J5NDUoZHN0LHNyYyxzaXplKSBtcG5fZGl2ZXhhY3RfMShkc3Qsc3JjLHNpemUsNDUpCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBIQVZFX05BVElWRV9tcG5fc3VibHNoMl9uX2lwMQorI2RlZmluZSBET19tcG5fc3VibHNoMl9uKGRzdCxzcmMsbix3cykgbXBuX3N1YmxzaDJfbl9pcDEoZHN0LHNyYyxuKQorI2Vsc2UKKyNkZWZpbmUgRE9fbXBuX3N1YmxzaDJfbihkc3Qsc3JjLG4sd3MpIERPX21wbl9zdWJsc2hfbihkc3Qsc3JjLG4sMix3cykKKyNlbmRpZgorCisjaWYgSEFWRV9OQVRJVkVfbXBuX3N1YmxzaF9uCisjZGVmaW5lIERPX21wbl9zdWJsc2hfbihkc3Qsc3JjLG4scyx3cykgbXBuX3N1YmxzaF9uIChkc3QsZHN0LHNyYyxuLHMpCisjZWxzZQorc3RhdGljIG1wX2xpbWJfdAorRE9fbXBuX3N1YmxzaF9uIChtcF9wdHIgZHN0LCBtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3QgbiwgdW5zaWduZWQgaW50IHMsIG1wX3B0ciB3cykKK3sKKyNpZiBVU0VfTVVMXzEgJiYgMAorICByZXR1cm4gbXBuX3N1Ym11bF8xKGRzdCxzcmMsbixDTlNUX0xJTUIoMSkgPDwocykpOworI2Vsc2UKKyAgbXBfbGltYl90IF9fY3k7CisgIF9fY3kgPSBtcG5fbHNoaWZ0ICh3cyxzcmMsbixzKTsKKyAgcmV0dXJuIF9fY3kgKyBtcG5fc3ViX24gKGRzdCxkc3Qsd3Msbik7CisjZW5kaWYKK30KKyNlbmRpZgorCisKKyNpZiBIQVZFX05BVElWRV9tcG5fc3VicnNoCisjZGVmaW5lIERPX21wbl9zdWJyc2goZHN0LG5kLHNyYyxucyxzLHdzKSBtcG5fc3VicnNoIChkc3QsbmQsc3JjLG5zLHMpCisjZWxzZQorLyogVGhpcyBpcyBub3QgYSBjb3JyZWN0IGRlZmluaXRpb24sIGl0IGFzc3VtZXMgbm8gY2FycnkgKi8KKyNkZWZpbmUgRE9fbXBuX3N1YnJzaChkc3QsbmQsc3JjLG5zLHMsd3MpCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisgIG1wX2xpbWJfdCBfX2N5OwkJCQkJCQlcCisgIE1QTl9ERUNSX1UgKGRzdCwgbmQsIHNyY1swXSA+PiBzKTsJCQkJCVwKKyAgX19jeSA9IERPX21wbl9zdWJsc2hfbiAoZHN0LCBzcmMgKyAxLCBucyAtIDEsIEdNUF9OVU1CX0JJVFMgLSBzLCB3cyk7CVwKKyAgTVBOX0RFQ1JfVSAoZHN0ICsgbnMgLSAxLCBuZCAtIG5zICsgMSwgX19jeSk7CQkJCVwKK30gd2hpbGUgKDApCisjZW5kaWYKKworLyogSW50ZXJwb2xhdGlvbiBmb3IgVG9vbS00LjUgKG9yIFRvb20tNCksIHVzaW5nIHRoZSBldmFsdWF0aW9uCisgICBwb2ludHM6IGluZmluaXR5KDQuNSBvbmx5KSwgNCwgLTQsIDIsIC0yLCAxLCAtMSwgMC4gTW9yZSBwcmVjaXNlbHksCisgICB3ZSB3YW50IHRvIGNvbXB1dGUgZigyXihHTVBfTlVNQl9CSVRTICogbikpIGZvciBhIHBvbHlub21pYWwgZiBvZgorICAgZGVncmVlIDcgKG9yIDYpLCBnaXZlbiB0aGUgOCAocnNwLiA3KSB2YWx1ZXM6CisKKyAgICAgcjEgPSBsaW1pdCBhdCBpbmZpbml0eSBvZiBmKHgpIC8geF43LAorICAgICByMiA9IGYoNCksCisgICAgIHIzID0gZigtNCksCisgICAgIHI0ID0gZigyKSwKKyAgICAgcjUgPSBmKC0yKSwKKyAgICAgcjYgPSBmKDEpLAorICAgICByNyA9IGYoLTEpLAorICAgICByOCA9IGYoMCkuCisKKyAgIEFsbCBjb3VwbGVzIG9mIHRoZSBmb3JtIGYobiksZigtbikgbXVzdCBiZSBhbHJlYWR5IG1peGVkIHdpdGgKKyAgIHRvb21fY291cGxlX2hhbmRsaW5nKGYobiksLi4uLGYoLW4pLC4uLikKKworICAgVGhlIHJlc3VsdCBpcyBzdG9yZWQgaW4ge3BwLCBzcHQgKyA3Km4gKG9yIDYqbil9LgorICAgQXQgZW50cnksIHI4IGlzIHN0b3JlZCBhdCB7cHAsIDJufSwKKyAgIHI1IGlzIHN0b3JlZCBhdCB7cHAgKyAzbiwgM24gKyAxfS4KKworICAgVGhlIG90aGVyIHZhbHVlcyBhcmUgMm4rLi4uIGxpbWJzIGVhY2ggKHdpdGggbW9zdCBzaWduaWZpY2FudCBsaW1icyBzbWFsbCkuCisKKyAgIEFsbCBpbnRlcm1lZGlhdGUgcmVzdWx0cyBhcmUgcG9zaXRpdmUuCisgICBJbnB1dHMgYXJlIGRlc3Ryb3llZC4KKyovCisKK3ZvaWQKK21wbl90b29tX2ludGVycG9sYXRlXzhwdHMgKG1wX3B0ciBwcCwgbXBfc2l6ZV90IG4sCisJCQkgICBtcF9wdHIgcjMsIG1wX3B0ciByNywKKwkJCSAgIG1wX3NpemVfdCBzcHQsIG1wX3B0ciB3cykKK3sKKyAgbXBfbGltYl9zaWduZWRfdCBjeTsKKyAgbXBfcHRyIHI1LCByMTsKKyAgcjUgPSAocHAgKyAzICogbik7CQkJLyogM24rMSAqLworICByMSA9IChwcCArIDcgKiBuKTsJCQkvKiBzcHQgKi8KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBpbnRlcnBvbGF0aW9uICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIERPX21wbl9zdWJyc2gocjMrbiwgMiAqIG4gKyAxLCBwcCwgMiAqIG4sIDQsIHdzKTsKKyAgY3kgPSBET19tcG5fc3VibHNoX24gKHIzLCByMSwgc3B0LCAxMiwgd3MpOworICBNUE5fREVDUl9VIChyMyArIHNwdCwgMyAqIG4gKyAxIC0gc3B0LCBjeSk7CisKKyAgRE9fbXBuX3N1YnJzaChyNStuLCAyICogbiArIDEsIHBwLCAyICogbiwgMiwgd3MpOworICBjeSA9IERPX21wbl9zdWJsc2hfbiAocjUsIHIxLCBzcHQsIDYsIHdzKTsKKyAgTVBOX0RFQ1JfVSAocjUgKyBzcHQsIDMgKiBuICsgMSAtIHNwdCwgY3kpOworCisgIHI3WzMqbl0gLT0gbXBuX3N1Yl9uIChyNytuLCByNytuLCBwcCwgMiAqIG4pOworICBjeSA9IG1wbl9zdWJfbiAocjcsIHI3LCByMSwgc3B0KTsKKyAgTVBOX0RFQ1JfVSAocjcgKyBzcHQsIDMgKiBuICsgMSAtIHNwdCwgY3kpOworCisgIEFTU0VSVF9OT0NBUlJZKG1wbl9zdWJfbiAocjMsIHIzLCByNSwgMyAqIG4gKyAxKSk7CisgIEFTU0VSVF9OT0NBUlJZKG1wbl9yc2hpZnQocjMsIHIzLCAzICogbiArIDEsIDIpKTsKKworICBBU1NFUlRfTk9DQVJSWShtcG5fc3ViX24gKHI1LCByNSwgcjcsIDMgKiBuICsgMSkpOworCisgIEFTU0VSVF9OT0NBUlJZKG1wbl9zdWJfbiAocjMsIHIzLCByNSwgMyAqIG4gKyAxKSk7CisKKyAgbXBuX2RpdmV4YWN0X2J5NDUgKHIzLCByMywgMyAqIG4gKyAxKTsKKworICBBU1NFUlRfTk9DQVJSWShtcG5fZGl2ZXhhY3RfYnkzIChyNSwgcjUsIDMgKiBuICsgMSkpOworCisgIEFTU0VSVF9OT0NBUlJZKERPX21wbl9zdWJsc2gyX24gKHI1LCByMywgMyAqIG4gKyAxLCB3cykpOworCisgIC8qIGxhc3QgaW50ZXJwb2xhdGlvbiBzdGVwcy4uLiAqLworICAvKiAuLi4gYXJlIG1peGVkIHdpdGggcmVjb21wb3NpdGlvbiAqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiByZWNvbXBvc2l0aW9uICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qCisgICAgcHBbXSBwcmlvciB0byBvcGVyYXRpb25zOgorICAgICB8X0ggcjF8X0wgcjF8X19fX3x8X0ggcjV8X01fcjV8X0wgcjV8X19fX198X0ggcjh8X0wgcjh8cHAKKworICAgIHN1bW1hdGlvbiBzY2hlbWUgZm9yIHJlbWFpbmluZyBvcGVyYXRpb25zOgorICAgICB8X19fXzh8bl9fXzd8bl9fXzZ8bl9fXzV8bl9fXzR8bl9fXzN8bl9fXzJ8bl9fX198bl9fX198cHAKKyAgICAgfF9IIHIxfF9MIHIxfF9fX198fF9IKnI1fF9NIHI1fF9MIHI1fF9fX19ffF9IX3I4fF9MIHI4fHBwCisJICB8fF9IIHIzfF9NIHIzfF9MKnIzfAorCQkJCSAgfHxfSF9yN3xfTV9yN3xfTF9yN3wKKwkJICAgICAgfHwtSCByM3wtTSByM3wtTCpyM3wKKwkJCQkgIHx8LUgqcjV8LU1fcjV8LUxfcjV8CisgICovCisKKyAgY3kgPSBtcG5fYWRkX24gKHBwICsgbiwgcHAgKyBuLCByNywgbik7IC8qIEhyOCtMcjctTHI1ICovCisgIGN5LT0gbXBuX3N1Yl9uIChwcCArIG4sIHBwICsgbiwgcjUsIG4pOworICBpZiAoY3kgPiAwKSB7CisgICAgTVBOX0lOQ1JfVSAocjcgKyBuLCAyKm4gKyAxLCAxKTsKKyAgICBjeSA9IDA7CisgIH0KKworICBjeSA9IG1wbl9zdWJfbmMgKHBwICsgMipuLCByNyArIG4sIHI1ICsgbiwgbiwgLWN5KTsgLyogTXI3LU1yNSAqLworICBNUE5fREVDUl9VIChyNyArIDIqbiwgbiArIDEsIGN5KTsKKworICBjeSA9IG1wbl9hZGRfbiAocHAgKyAzKm4sIHI1LCByNysgMipuLCBuKzEpOyAvKiBIcjcrTHI1ICovCisgIHI1WzMqbl0rPSBtcG5fYWRkX24gKHI1ICsgMipuLCByNSArIDIqbiwgcjMsIG4pOyAvKiBIcjUrTHIzICovCisgIGN5LT0gbXBuX3N1Yl9uIChwcCArIDMqbiwgcHAgKyAzKm4sIHI1ICsgMipuLCBuKzEpOyAvKiBIcjctSHI1K0xyNS1McjMgKi8KKyAgaWYgKFVOTElLRUxZKDAgPiBjeSkpCisgICAgTVBOX0RFQ1JfVSAocjUgKyBuICsgMSwgMipuLCAxKTsKKyAgZWxzZQorICAgIE1QTl9JTkNSX1UgKHI1ICsgbiArIDEsIDIqbiwgY3kpOworCisgIEFTU0VSVF9OT0NBUlJZKG1wbl9zdWJfbihwcCArIDQqbiwgcjUgKyBuLCByMyArIG4sIDIqbiArMSkpOyAvKiBNcjUtTXIzLEhyNS1IcjMgKi8KKworICBjeSA9IG1wbl9hZGRfMSAocHAgKyA2Km4sIHIzICsgbiwgbiwgcHBbNipuXSk7CisgIE1QTl9JTkNSX1UgKHIzICsgMipuLCBuICsgMSwgY3kpOworICBjeSA9IG1wbl9hZGRfbiAocHAgKyA3Km4sIHBwICsgNypuLCByMyArIDIqbiwgbik7CisgIGlmIChMSUtFTFkoc3B0ICE9IG4pKQorICAgIE1QTl9JTkNSX1UgKHBwICsgOCpuLCBzcHQgLSBuLCBjeSArIHIzWzMqbl0pOworICBlbHNlCisgICAgQVNTRVJUIChyM1szKm5dICsgY3kgPT0gMCk7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvdHJpYWxkaXYuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy90cmlhbGRpdi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZTA4OWYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvdHJpYWxkaXYuYwpAQCAtMCwwICsxLDEzMSBAQAorLyogbXBuX3RyaWFsZGl2IC0tIGZpbmQgc21hbGwgZmFjdG9ycyBvZiBhbiBtcG4gbnVtYmVyIHVzaW5nIHRyaWFsIGRpdmlzaW9uLgorCisgICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisKKyAgIFRIRSBGVU5DVElPTiBJTiBUSElTIEZJTEUgSVMgSU5URVJOQUwgV0lUSCBBIE1VVEFCTEUgSU5URVJGQUNFLiAgSVQgSVMgT05MWQorICAgU0FGRSBUTyBSRUFDSCBJVCBUSFJPVUdIIERPQ1VNRU5URUQgSU5URVJGQUNFUy4gIElOIEZBQ1QsIElUIElTIEFMTU9TVAorICAgR1VBUkFOVEVFRCBUSEFUIElUIFdJTEwgQ0hBTkdFIE9SIERJU0FQUEVBUiBJTiBBIEZVVFVSRSBHTlUgTVAgUkVMRUFTRS4KKworQ29weXJpZ2h0IDIwMDksIDIwMTAsIDIwMTIsIDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKy8qCisgICBUaGlzIGZ1bmN0aW9uIGZpbmRzIHRoZSBmaXJzdCAoc21hbGxlc3QpIGZhY3RvciByZXByZXNlbnRlZCBpbgorICAgdHJpYWxkaXZ0YWIuaC4gIEl0IGRvZXMgbm90IHN0b3AgdGhlIGZhY3RvcmluZyBlZmZvcnQganVzdCBiZWNhdXNlIGl0IGhhcworICAgcmVhY2hlZCBzb21lIHNlbnNpYmxlIGxpbWl0LCBzdWNoIGFzIHRoZSBzcXVhcmUgcm9vdCBvZiB0aGUgaW5wdXQgbnVtYmVyLgorCisgICBUaGUgY2FsbGVyIGNhbiBsaW1pdCB0aGUgZmFjdG9yaW5nIGVmZm9ydCBieSBwYXNzaW5nIE5QUklNRVMuICBUaGUgZnVuY3Rpb24KKyAgIHdpbGwgdGhlbiBkaXZpZGUgdW50aWwgdGhhdCBsaW1pdCwgb3IgcGVyaGFwcyBhIGZldyBwcmltZXMgbW9yZS4gIEEgcG9zaXRpb24KKyAgIHdoaWNoIG9ubHkgbXBuX3RyaWFsZGl2IGNhbiBtYWtlIHNlbnNlIG9mIGlzIHJldHVybmVkIGluIHRoZSBXSEVSRQorICAgcGFyYW1ldGVyLiAgSXQgY2FuIGJlIHVzZWQgZm9yIHJlc3RhcnRpbmcgdGhlIGZhY3RvcmluZyBlZmZvcnQ7IHRoZSBmaXJzdAorICAgY2FsbCBzaG91bGQgcGFzcyAwIGhlcmUuCisKKyAgIElucHV0OiAgICAgICAgMS4gQSBub24tbmVnYXRpdmUgbnVtYmVyIFQgPSB7dHAsdG59CisgICAgICAgICAgICAgICAgIDIuIE5QUklNRVMgYXMgZGVzY3JpYmVkIGFib3ZlLAorICAgICAgICAgICAgICAgICAzLiAqV0hFUkUgYXMgZGVzY3JpYmVkIGFib3ZlLgorICAgT3V0cHV0OiAgICAgICAxLiAqV0hFUkUgdXBkYXRlZCBhcyBkZXNjcmliZWQgYWJvdmUuCisgICAgICAgICAgICAgICAgIDIuIFJldHVybiB2YWx1ZSBpcyBub24temVybyBpZiB3ZSBmb3VuZCBhIGZhY3RvciwgZWxzZSB6ZXJvCisgICAgICAgICAgICAgICAgICAgIFRvIGdldCB0aGUgYWN0dWFsIHByaW1lIGZhY3RvciwgY29tcHV0ZSB0aGUgbW9kIEIgaW52ZXJzZQorICAgICAgICAgICAgICAgICAgICBvZiB0aGUgcmV0dXJuIHZhbHVlLgorKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisKK3N0cnVjdCBnbXBfcHJpbWVzX2R0YWIgeworICBtcF9saW1iX3QgYmludjsKKyAgbXBfbGltYl90IGxpbTsKK307CisKK3N0cnVjdCBnbXBfcHJpbWVzX3B0YWIgeworICBtcF9saW1iX3QgcHBwOwkvKiBwcmltZXMsIG11bHRpcGxpZWQgdG9nZXRoZXIgKi8KKyAgbXBfbGltYl90IGNwc1s3XTsJLyogcHBwIHZhbHVlcyBwcmUtY29tcHV0ZWQgZm9yIG1wbl9tb2RfMXNfNHAgKi8KKyAgZ21wX3VpbnRfbGVhc3QzMl90IGlkeDoyNDsJLyogaW5kZXggb2YgIGZpcnN0IHByaW1lcyBpbiBkdGFiICovCisgIGdtcF91aW50X2xlYXN0MzJfdCBucCA6ODsJLyogbnVtYmVyIG9mIHByaW1lcyByZWxhdGVkIHRvIHRoaXMgZW50cnkgKi8KK307CisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBnbXBfcHJpbWVzX2R0YWIgZ21wX3ByaW1lc19kdGFiW10gPQoreworI2RlZmluZSBXQU5UX2R0YWIKKyNkZWZpbmUgUChwLGludixsaW0pIHtpbnYsbGltfQorI2luY2x1ZGUgInRyaWFsZGl2dGFiLmgiCisjdW5kZWYgV0FOVF9kdGFiCisjdW5kZWYgUAorICB7MCwwfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBnbXBfcHJpbWVzX3B0YWIgZ21wX3ByaW1lc19wdGFiW10gPQoreworI2RlZmluZSBXQU5UX3B0YWIKKyNpbmNsdWRlICJ0cmlhbGRpdnRhYi5oIgorI3VuZGVmIFdBTlRfcHRhYgorfTsKKworI2RlZmluZSBQVEFCX0xJTkVTIChzaXplb2YgKGdtcF9wcmltZXNfcHRhYikgLyBzaXplb2YgKGdtcF9wcmltZXNfcHRhYlswXSkpCisKKy8qIEZJWE1FOiBXZSBjb3VsZCBvcHRpbWl6ZSBvdXQgb25lIG9mIHRoZSBvdXRlciBsb29wIGNvbmRpdGlvbnMgaWYgd2UKKyAgIGhhZCBhIGZpbmFsIHB0YWIgZW50cnkgd2l0aCBhIGh1Z2UgbnAgZmllbGQuICAqLworbXBfbGltYl90CittcG5fdHJpYWxkaXYgKG1wX3NyY3B0ciB0cCwgbXBfc2l6ZV90IHRuLCBtcF9zaXplX3QgbnByaW1lcywgaW50ICp3aGVyZSkKK3sKKyAgbXBfbGltYl90IHBwcDsKKyAgY29uc3QgbXBfbGltYl90ICpjcHM7CisgIGNvbnN0IHN0cnVjdCBnbXBfcHJpbWVzX2R0YWIgKmRwOworICBsb25nIGksIGosIGlkeCwgbnA7CisgIG1wX2xpbWJfdCByLCBxOworCisgIEFTU0VSVCAodG4gPj0gMSk7CisKKyAgZm9yIChpID0gKndoZXJlOyBpIDwgUFRBQl9MSU5FUzsgaSsrKQorICAgIHsKKyAgICAgIHBwcCA9IGdtcF9wcmltZXNfcHRhYltpXS5wcHA7CisgICAgICBjcHMgPSBnbXBfcHJpbWVzX3B0YWJbaV0uY3BzOworCisgICAgICByID0gbXBuX21vZF8xc180cCAodHAsIHRuLCBwcHAgPDwgY3BzWzFdLCBjcHMpOworCisgICAgICBpZHggPSBnbXBfcHJpbWVzX3B0YWJbaV0uaWR4OworICAgICAgbnAgPSBnbXBfcHJpbWVzX3B0YWJbaV0ubnA7CisKKyAgICAgIC8qIENoZWNrIGRpdmlzaWJpbGl0eSBieSBpbmRpdmlkdWFsIHByaW1lcy4gICovCisgICAgICBkcCA9ICZnbXBfcHJpbWVzX2R0YWJbaWR4XSArIG5wOworICAgICAgZm9yIChqID0gLW5wOyBqIDwgMDsgaisrKQorCXsKKwkgIHEgPSByICogZHBbal0uYmludjsKKwkgIGlmIChxIDw9IGRwW2pdLmxpbSkKKwkgICAgeworCSAgICAgICp3aGVyZSA9IGk7CisJICAgICAgcmV0dXJuIGRwW2pdLmJpbnY7CisJICAgIH0KKwl9CisKKyAgICAgIG5wcmltZXMgLT0gbnA7CisgICAgICBpZiAobnByaW1lcyA8PSAwKQorCXJldHVybiAwOworICAgIH0KKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvdWRpdl93X3NkaXYuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vZ2VuZXJpYy91ZGl2X3dfc2Rpdi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MDcxMzUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvdWRpdl93X3NkaXYuYwpAQCAtMCwwICsxLDE0MSBAQAorLyogbXBuX3VkaXZfd19zZGl2IC0tIGltcGxlbWVudCB1ZGl2X3Fybm5kIG9uIG1hY2hpbmVzIHdpdGggb25seSBzaWduZWQKKyAgIGRpdmlzaW9uLgorCisgICBDb250cmlidXRlZCBieSBQZXRlciBMLiBNb250Z29tZXJ5LgorCisgICBUSElTIElTIEFOIElOVEVSTkFMIEZVTkNUSU9OIFdJVEggQSBNVVRBQkxFIElOVEVSRkFDRS4gIElUIElTIE9OTFkgU0FGRQorICAgVE8gUkVBQ0ggVEhJUyBGVU5DVElPTiBUSFJPVUdIIERPQ1VNRU5URUQgSU5URVJGQUNFUy4gIElOIEZBQ1QsIElUIElTCisgICBBTE1PU1QgR1VBUkFOVEVFRCBUSEFUIFRISVMgRlVOQ1RJT04gV0lMTCBDSEFOR0UgT1IgRElTQVBQRUFSIElOIEEgRlVUVVJFCisgICBHTlUgTVAgUkVMRUFTRS4KKworCitDb3B5cmlnaHQgMTk5MiwgMTk5NCwgMTk5NiwgMjAwMCwgMjAxMSwgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisjaW5jbHVkZSAibG9uZ2xvbmcuaCIKKworbXBfbGltYl90CittcG5fdWRpdl93X3NkaXYgKG1wX2xpbWJfdCAqcnAsIG1wX2xpbWJfdCBhMSwgbXBfbGltYl90IGEwLCBtcF9saW1iX3QgZCkKK3sKKyAgbXBfbGltYl90IHEsIHI7CisgIG1wX2xpbWJfdCBjMCwgYzEsIGIxOworCisgIEFTU0VSVCAoZCAhPSAwKTsKKyAgQVNTRVJUIChhMSA8IGQpOworCisgIGlmICgobXBfbGltYl9zaWduZWRfdCkgZCA+PSAwKQorICAgIHsKKyAgICAgIGlmIChhMSA8IGQgLSBhMSAtIChhMCA+PiAoR01QX0xJTUJfQklUUyAtIDEpKSkKKwl7CisJICAvKiBkaXZpZGVuZCwgZGl2aXNvciwgYW5kIHF1b3RpZW50IGFyZSBub25uZWdhdGl2ZSAqLworCSAgc2Rpdl9xcm5uZCAocSwgciwgYTEsIGEwLCBkKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgLyogQ29tcHV0ZSBjMSoyXjMyICsgYzAgPSBhMSoyXjMyICsgYTAgLSAyXjMxKmQgKi8KKwkgIHN1Yl9kZG1tc3MgKGMxLCBjMCwgYTEsIGEwLCBkID4+IDEsIGQgPDwgKEdNUF9MSU1CX0JJVFMgLSAxKSk7CisJICAvKiBEaXZpZGUgKGMxKjJeMzIgKyBjMCkgYnkgZCAqLworCSAgc2Rpdl9xcm5uZCAocSwgciwgYzEsIGMwLCBkKTsKKwkgIC8qIEFkZCAyXjMxIHRvIHF1b3RpZW50ICovCisJICBxICs9IChtcF9saW1iX3QpIDEgPDwgKEdNUF9MSU1CX0JJVFMgLSAxKTsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgYjEgPSBkID4+IDE7CQkJLyogZC8yLCBiZXR3ZWVuIDJeMzAgYW5kIDJeMzEgLSAxICovCisgICAgICBjMSA9IGExID4+IDE7CQkJLyogQS8yICovCisgICAgICBjMCA9IChhMSA8PCAoR01QX0xJTUJfQklUUyAtIDEpKSArIChhMCA+PiAxKTsKKworICAgICAgaWYgKGExIDwgYjEpCQkJLyogQSA8IDJeMzIqYjEsIHNvIEEvMiA8IDJeMzEqYjEgKi8KKwl7CisJICBzZGl2X3Fybm5kIChxLCByLCBjMSwgYzAsIGIxKTsgLyogKEEvMikgLyAoZC8yKSAqLworCisJICByID0gMipyICsgKGEwICYgMSk7CQkvKiBSZW1haW5kZXIgZnJvbSBBLygyKmIxKSAqLworCSAgaWYgKChkICYgMSkgIT0gMCkKKwkgICAgeworCSAgICAgIGlmIChyID49IHEpCisJCXIgPSByIC0gcTsKKwkgICAgICBlbHNlIGlmIChxIC0gciA8PSBkKQorCQl7CisJCSAgciA9IHIgLSBxICsgZDsKKwkJICBxLS07CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICByID0gciAtIHEgKyAyKmQ7CisJCSAgcSAtPSAyOworCQl9CisJICAgIH0KKwl9CisgICAgICBlbHNlIGlmIChjMSA8IGIxKQkJCS8qIFNvIDJeMzEgPD0gKEEvMikvYjEgPCAyXjMyICovCisJeworCSAgYzEgPSAoYjEgLSAxKSAtIGMxOworCSAgYzAgPSB+YzA7CQkJLyogbG9naWNhbCBOT1QgKi8KKworCSAgc2Rpdl9xcm5uZCAocSwgciwgYzEsIGMwLCBiMSk7IC8qIChBLzIpIC8gKGQvMikgKi8KKworCSAgcSA9IH5xOwkJCS8qIChBLzIpL2IxICovCisJICByID0gKGIxIC0gMSkgLSByOworCisJICByID0gMipyICsgKGEwICYgMSk7CQkvKiBBLygyKmIxKSAqLworCisJICBpZiAoKGQgJiAxKSAhPSAwKQorCSAgICB7CisJICAgICAgaWYgKHIgPj0gcSkKKwkJciA9IHIgLSBxOworCSAgICAgIGVsc2UgaWYgKHEgLSByIDw9IGQpCisJCXsKKwkJICByID0gciAtIHEgKyBkOworCQkgIHEtLTsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIHIgPSByIC0gcSArIDIqZDsKKwkJICBxIC09IDI7CisJCX0KKwkgICAgfQorCX0KKyAgICAgIGVsc2UJCQkJLyogSW1wbGllcyBjMSA9IGIxICovCisJewkJCQkvKiBIZW5jZSBhMSA9IGQgLSAxID0gMipiMSAtIDEgKi8KKwkgIGlmIChhMCA+PSAtZCkKKwkgICAgeworCSAgICAgIHEgPSAtQ05TVF9MSU1CKDEpOworCSAgICAgIHIgPSBhMCArIGQ7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIHEgPSAtQ05TVF9MSU1CKDIpOworCSAgICAgIHIgPSBhMCArIDIqZDsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgKnJwID0gcjsKKyAgcmV0dXJuIHE7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvemVyby5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3plcm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTA1NDUzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3plcm8uYwpAQCAtMCwwICsxLDQxIEBACisvKiBtcG5femVybworCitDb3B5cmlnaHQgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisKK3ZvaWQKK21wbl96ZXJvIChtcF9wdHIgcnAsIG1wX3NpemVfdCBuKQoreworICBtcF9zaXplX3QgaTsKKworICBycCArPSBuOworICBmb3IgKGkgPSAtbjsgaSAhPSAwOyBpKyspCisgICAgcnBbaV0gPSAwOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3plcm9fcC5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9nZW5lcmljL3plcm9fcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MmY5YjgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2dlbmVyaWMvemVyb19wLmMKQEAgLTAsMCArMSwzMyBAQAorLyogbXBuX3plcm9fcCAoeCx4c2l6ZSkgLS0gUmV0dXJuIDEgaWYgWCBpcyB6ZXJvLCAwIGlmIGl0IGlzIG5vbi16ZXJvLgorCitDb3B5cmlnaHQgMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2RlZmluZSBfX0dNUF9GT1JDRV9tcG5femVyb19wIDEKKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2lhNjQvUkVBRE1FIGIvdGhpcmRfcGFydHkvZ21wL21wbi9pYTY0L1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWMyZDYzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9pYTY0L1JFQURNRQpAQCAtMCwwICsxLDI4MSBAQAorQ29weXJpZ2h0IDIwMDAtMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKKworICAgICAgICAgICAgICAgICAgICAgIElBLTY0IE1QTiBTVUJST1VUSU5FUworCisKK1RoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIG1wbiBmdW5jdGlvbnMgZm9yIHRoZSBJQS02NCBhcmNoaXRlY3R1cmUuCisKKworQ09ERSBPUkdBTklaQVRJT04KKworCW1wbi9pYTY0ICAgICAgICAgIGl0YW5pdW0tMiwgYW5kIGdlbmVyaWMgaWE2NAorCitUaGUgY29kZSBoZXJlIGhhcyBiZWVuIG9wdGltaXplZCBwcmltYXJpbHkgZm9yIEl0YW5pdW0gMi4gIFZlcnkgZmV3IEl0YW5pdW0gMQorY2hpcHMgd2VyZSBldmVyIHNvbGQsIGFuZCBJdGFuaXVtIDIgaXMgbW9yZSBwb3dlcmZ1bCwgc28gdGhlIGxhdHRlciBpcyB3aGF0Cit3ZSBjb25jZW50cmF0ZSBvbi4KKworCisKK0NISVAgTk9URVMKKworVGhlIElBLTY0IElTQSBrZWVwcyBpbnN0cnVjdGlvbnMgdGhyZWUgYW5kIHRocmVlIGluIDEyOCBiaXQgYnVuZGxlcy4KK1Byb2dyYW1tZXJzL2NvbXBpbGVycyBuZWVkIHRvIHB1dCBleHBsaWNpdCBicmVha3MgYDs7JyB3aGVuIHRoZXJlIGFyZSBXQVcgb3IKK1JBVyBkZXBlbmRlbmNpZXMsIHdpdGggc29tZSBub3RhYmxlIGV4Y2VwdGlvbnMuICBTdWNoICJicmVha3MiIGFyZSB0eXBpY2FsbHkKK2F0IHRoZSBlbmQgb2YgYSBidW5kbGUsIGJ1dCBjYW4gYmUgcHV0IGJldHdlZW4gb3BlcmF0aW9ucyB3aXRoaW4gc29tZSBidW5kbGUKK3R5cGVzIHRvby4KKworVGhlIEl0YW5pdW0gMSBhbmQgSXRhbml1bSAyIGltcGxlbWVudGF0aW9ucyBjYW4gdW5kZXIgaWRlYWwgY29uZGl0aW9ucworZXhlY3V0ZSB0d28gYnVuZGxlcyBwZXIgY3ljbGUuICBUaGUgSXRhbml1bSAxIGFsbG93cyA0IG9mIHRoZXNlIGluc3RydWN0aW9ucwordG8gZG8gaW50ZWdlciBvcGVyYXRpb25zLCB3aGlsZSB0aGUgSXRhbml1bSAyIGFsbG93cyBhbGwgNiB0byBiZSBpbnRlZ2VyCitvcGVyYXRpb25zLgorCitUYWtlbiBjbG9vcCBicmFuY2hlcyBzZWVtIHRvIGluc2VydCBhIGJ1YmJsZSBpbnRvIHRoZSBwaXBlbGluZSBtb3N0IG9mIHRoZQordGltZSBvbiBJdGFuaXVtIDEuCisKK0xvYWRzIHRvIHRoZSBmcCByZWdpc3RlcnMgYnlwYXNzIHRoZSBMMSBjYWNoZSBhbmQgdGh1cyBnZXQgZXh0cmVtZWx5IGxvbmcKK2xhdGVuY2llcywgOSBjeWNsZXMgb24gdGhlIEl0YW5pdW0gMSBhbmQgNiBjeWNsZXMgb24gdGhlIEl0YW5pdW0gMi4KKworVGhlIHNvZnR3YXJlIHBpcGVsaW5lIHN0dWZmIHVzaW5nIGJyLmN0b3AgaW5zdHJ1Y3Rpb24gY2F1c2VzIGRlbGF5cywgc2luY2UKK21hbnkgaXNzdWUgc2xvdHMgYXJlIHRha2VuIHVwIGJ5IGluc3RydWN0aW9ucyB3aXRoIHplcm8gcHJlZGljYXRlcywgYW5kCitzaW5jZSBtYW55IGV4dHJhIGluc3RydWN0aW9ucyBhcmUgbmVlZGVkIHRvIHNldCB0aGluZ3MgdXAuICBUaGVzZSBmZWF0dXJlcworYXJlIGNsZWFybHkgZGVzaWduZWQgZm9yIGNvZGUgZGVuc2l0eSwgbm90IHNwZWVkLgorCitNaXNjIHBpcGVsaW5lIGxpbWl0YXRpb25zIChJdGFuaXVtIDEpOgorKiBUaGUgZ2V0Zi5zaWcgaW5zdHJ1Y3Rpb24gY2FuIG9ubHkgZXhlY3V0ZSBpbiBNMC4KKyogQXQgbW9zdCBmb3VyIGludGVnZXIgaW5zdHJ1Y3Rpb25zL2N5Y2xlLgorKiBOb3BzIHRha2UgdXAgcmVzb3VyY2VzIGxpa2UgYW55IHBsYWluIGluc3RydWN0aW9ucy4KKworTWlzYyBwaXBlbGluZSBsaW1pdGF0aW9ucyAoSXRhbml1bSAyKToKKyogVGhlIGdldGYuc2lnIGluc3RydWN0aW9uIGNhbiBvbmx5IGV4ZWN1dGUgaW4gTTAuCisqIE5vcHMgdGFrZSB1cCByZXNvdXJjZXMgbGlrZSBhbnkgcGxhaW4gaW5zdHJ1Y3Rpb25zLgorCisKK0FTU0VNQkxZIFNZTlRBWAorCisuYWxpZ24gcGFkcyB3aXRoIG5vcHMgaW4gYSB0ZXh0IHNlZ21lbnQsIGJ1dCBnYXMgMi4xNCBhbmQgZWFybGllcgoraW5jb3JyZWN0bHkgYnl0ZS1zd2FwcyBpdHMgbm9wIGJ1bmRsZSBpbiBiaWcgZW5kaWFuIG1vZGUgKGVnLiBocHV4KSwgbWFraW5nCitpdCBjb21lIG91dCBhcyBicmVhayBpbnN0cnVjdGlvbnMuICBXZSB1c2UgdGhlIEFMSUdOKCkgbWFjcm8gaW4KK21wbi9pYTY0L2lhNjQtZGVmcy5tNCB3aGVuIGl0IG1pZ2h0IGJlIGV4ZWN1dGVkIGFjcm9zcy4gIFRoYXQgbWFjcm8KK3N1cHByZXNzZXMgYW55IC5hbGlnbiBpZiB0aGUgcHJvYmxlbSBpcyBkZXRlY3RlZCBieSBjb25maWd1cmUuICBMYWNrIG9mCithbGlnbm1lbnQgbWlnaHQgaHVydCBwZXJmb3JtYW5jZSBidXQgd2lsbCBhdCBsZWFzdCBiZSBjb3JyZWN0LgorCitmb286OiB0byBjcmVhdGUgYSBnbG9iYWwgc3ltYm9sIGlzIG5vdCBhY2NlcHRlZCBieSBnYXMuICBVc2Ugc2VwYXJhdGUKKyIuZ2xvYmFsIGZvbyIgYW5kICJmb286IiBpbnN0ZWFkLgorCisuZ2xvYmFsIGlzIHRoZSBzdGFuZGFyZCBnbG9iYWwgZGlyZWN0aXZlLiAgZ2FzIGFjY2VwdHMgLmdsb2JsLCBidXQgaHB1eCAiYXMiCitkb2Vzbid0LgorCisucHJvYyAvIC5lbmRwIGdlbmVyYXRlcyB0aGUgYXBwcm9wcmlhdGUgLnR5cGUgYW5kIC5zaXplIGluZm9ybWF0aW9uIGZvciBFTEYsCitzbyB0aGUgbGF0dGVyIGRpcmVjdGl2ZXMgZG9uJ3QgbmVlZCB0byBiZSBnaXZlbiBleHBsaWNpdGx5LgorCisucHJlZC5yZWwgIm11dGV4Ii4uLiBpcyBzdGFuZGFyZCBmb3IgYW5ub3RhdGluZyBwcmVkaWNhdGUgcmVnaXN0ZXIKK3JlbGF0aW9uc2hpcHMuICBnYXMgYWxzbyBhY2NlcHRzIC5wcmVkLnJlbC5tdXRleCwgYnV0IGhwdXggImFzIiBkb2Vzbid0LgorCisucHJlZCBkaXJlY3RpdmVzIGNhbid0IGJlIHB1dCBvbiBhIGxpbmUgd2l0aCBhIGxhYmVsLCBsaWtlCisiLkxmb286IC5wcmVkIC4uLiIsIHRoZSBIUCBhc3NlbWJsZXIgb24gSFAtVVggMTEuMjMgcmVqZWN0cyB0aGF0LgorZ2FzIGlzIGhhcHB5IHdpdGggaXQsIGFuZCBwYXN0IHZlcnNpb25zIG9mIEhQIGhhZCBzZWVtZWQgb2suCisKKy8vIGlzIHRoZSBzdGFuZGFyZCBjb21tZW50IHNlcXVlbmNlLCBidXQgd2UgcHJlZmVyICJDIiBzaW5jZSBpdCBpbmhpYml0cyBtNAorbWFjcm8gZXhwYW5zaW9uLiAgU2VlIGNvbW1lbnRzIGluIGlhNjQtZGVmcy5tNC4KKworCitSRUdJU1RFUiBVU0FHRQorCitTcGVjaWFsOgorICAgcjA6IGNvbnN0YW50IDAKKyAgIHIxOiBnbG9iYWwgcG9pbnRlciAoZ3ApCisgICByODogcmV0dXJuIHZhbHVlCisgICByMTI6IHN0YWNrIHBvaW50ZXIgKHNwKQorICAgcjEzOiB0aHJlYWQgcG9pbnRlciAodHApCitDYWxsZXItc2F2ZXM6IHI4LXIxMSByMTQtcjMxIGY2LWYxNSBmMzItZjEyNworQ2FsbGVyLXNhdmVzIGJ1dCByb3RhdGluZzogcjMyLQorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK21wbl9hZGRfbiwgbXBuX3N1Yl9uOgorCitUaGUgY3VycmVudCBjb2RlIHJ1bnMgYXQgMS4yNSBjL2wgb24gSXRhbml1bSAyLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CittcG5fbXVsXzE6CisKK1RoZSBjdXJyZW50IGNvZGUgcnVucyBhdCAyIGMvbCBvbiBJdGFuaXVtIDIuCisKK1VzaW5nIGEgYmxvY2tlZCBhcHByb2FjaCwgd29ya2luZyBvZmYgb2YgNCBzZXBhcmF0ZSBwbGFjZXMgaW4gdGhlIG9wZXJhbmRzLAorb25lIGNvdWxkIG1ha2UgdXNlIG9mIHRoZSB4bWEgYWNjdW11bGF0aW9uLCBhbmQgYXBwcm9hY2ggMSBjL2wuCisKKwlsZGY4IFt1cF0KKwl4bWEubAorCXhtYS5odQorCXN0ZjggIFt3cnBdCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK21wbl9hZGRtdWxfMToKKworVGhlIGN1cnJlbnQgY29kZSBydW5zIGF0IDIgYy9sIG9uIEl0YW5pdW0gMi4KKworSXQgc2VlbXMgcG9zc2libGUgdG8gdXNlIGEgYmxvY2tlZCBhcHByb2FjaCwgYXMgd2l0aCBtcG5fbXVsXzEuICBXZSBzaG91bGQKK3JlYWQgcnBbXSB0byBpbnRlZ2VyIHJlZ2lzdGVycywgYWxsb3dpbmcgZm9yIGp1c3Qgb25lIGdldGYuc2lnIHBlciBjeWNsZS4KKworCWxkOCAgW3JwXQorCWxkZjggW3VwXQorCXhtYS5sCisJeG1hLmh1CisJZ2V0Zi5zaWcKKwlhZGQrYWRkK2NtcCtjbXAKKwlzdDggIFt3cnBdCisKK1RoZXNlIDEwIGluc3RydWN0aW9ucyBjYW4gYmUgc2NoZWR1bGVkIHRvIGFwcHJvYWNoIDEuNjY3IGN5Y2xlcywgYW5kIHdpdGgKK3RoZSA0IGN5Y2xlIGxhdGVuY3kgb2YgeG1hLCB0aGlzIG1lYW5zIHdlIG5lZWQgYXQgbGVhc3QgMyBibG9ja3MuICBVc2luZworbGRmcDggd2UgY291bGQgYXBwcm9hY2ggMS41ODMgYy9sLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CittcG5fc3VibXVsXzE6CisKK1RoZSBjdXJyZW50IGNvZGUgcnVucyBhdCAyLjI1IGMvbCBvbiBJdGFuaXVtIDIuICBHZXR0aW5nIHRvIDIgYy9sIHJlcXVpcmVzCitsZGZwOCB3aXRoIGFsbCBhbGlnbm1lbnQgaGVhZGFjaGUgdGhhdCBpbXBsaWVzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CittcG5fYWRkbXVsX04KKworRm9yIGJlc3Qgc3BlZWQsIHdlIG5lZWQgdG8gZ2l2ZSB1cCB1c2luZyBtcG5fYWRkbXVsXzIgYXMgdGhlIG1haW4gbXVsdGlwbHkKK2J1aWxkaW5nIGJsb2NrLCBhbmQgaW5zdGVhZCB0YWtlIG11bHRpcGxlIHYgbGltYnMgcGVyIGxvb3AuICBGb3IgdGhlIEl0YW5pdW0KKzEsIHdlIG5lZWQgdG8gdGFrZSBhYm91dCA4IGxpbWJzIGF0IGEgdGltZSBmb3IgZnVsbCBzcGVlZC4gIEZvciB0aGUgSXRhbml1bQorMiwgc29tZXRoaW5nIGxpa2UgbXBuX2FkZG11bF80IHNob3VsZCBiZSBlbm91Z2guCisKK1RoZSBhZGQrY21wK2NtcCthZGQgd2UgdXNlIG9uIHRoZSBvdGhlciBjb2RlcyBpcyBvcHRpbWFsIGZvciBzaG9ydGVuaW5nCityZWN1cnJlbmNpZXMgKDEgY3ljbGUpIGJ1dCB0aGUgc2VxdWVuY2UgdGFrZXMgdXAgNCBleGVjdXRpb24gc2xvdHMuICBXaGVuCityZWN1cnJlbmN5IGRlcHRoIGlzIG5vdCBjcml0aWNhbCwgYSBtb3JlIHN0YW5kYXJkIDMtY3ljbGUgYWRkK2NtcCthZGQgaXMKK2JldHRlci4KKworLyogRmlyc3QgbG9hZCB0aGUgOCB2YWx1ZXMgZnJvbSB2ICovCisJbGRmcDgJCXYwLCB2MSA9IFtyMzVdLCAxNjs7CisJbGRmcDgJCXYyLCB2MyA9IFtyMzVdLCAxNjs7CisJbGRmcDgJCXY0LCB2NSA9IFtyMzVdLCAxNjs7CisJbGRmcDgJCXY2LCB2NyA9IFtyMzVdLCAxNjs7CisKKy8qIEluIHRoZSBpbm5lciBsb29wLCBnZXQgYSBuZXcgVSBsaW1iIGFuZCBzdG9yZSBhIHJlc3VsdCBsaW1iLiAqLworCW1vdgkJbGMgPSB1bgorTG9vcDoJbGRmOAkJdTAgPSBbcjMzXSwgOAorCWxkOAkJcjAgPSBbcjMyXQorCXhtYS5sCQlscDAgPSB2MCwgdTAsIGhwMAorCXhtYS5odQkJaHAwID0gdjAsIHUwLCBocDAKKwl4bWEubAkJbHAxID0gdjEsIHUwLCBocDEKKwl4bWEuaHUJCWhwMSA9IHYxLCB1MCwgaHAxCisJeG1hLmwJCWxwMiA9IHYyLCB1MCwgaHAyCisJeG1hLmh1CQlocDIgPSB2MiwgdTAsIGhwMgorCXhtYS5sCQlscDMgPSB2MywgdTAsIGhwMworCXhtYS5odQkJaHAzID0gdjMsIHUwLCBocDMKKwl4bWEubAkJbHA0ID0gdjQsIHUwLCBocDQKKwl4bWEuaHUJCWhwNCA9IHY0LCB1MCwgaHA0CisJeG1hLmwJCWxwNSA9IHY1LCB1MCwgaHA1CisJeG1hLmh1CQlocDUgPSB2NSwgdTAsIGhwNQorCXhtYS5sCQlscDYgPSB2NiwgdTAsIGhwNgorCXhtYS5odQkJaHA2ID0gdjYsIHUwLCBocDYKKwl4bWEubAkJbHA3ID0gdjcsIHUwLCBocDcKKwl4bWEuaHUJCWhwNyA9IHY3LCB1MCwgaHA3CisJZ2V0Zi5zaWcJbDAgPSBscDAKKwlnZXRmLnNpZwlsMSA9IGxwMQorCWdldGYuc2lnCWwyID0gbHAyCisJZ2V0Zi5zaWcJbDMgPSBscDMKKwlnZXRmLnNpZwlsNCA9IGxwNAorCWdldGYuc2lnCWw1ID0gbHA1CisJZ2V0Zi5zaWcJbDYgPSBscDYKKwlhZGQrY21wK2FkZAl4eCwgbDAsIHIwCisJYWRkK2NtcCthZGQJYWNjMCwgYWNjMSwgbDEKKwlhZGQrY21wK2FkZAlhY2MxLCBhY2MyLCBsMgorCWFkZCtjbXArYWRkCWFjYzIsIGFjYzMsIGwzCisJYWRkK2NtcCthZGQJYWNjMywgYWNjNCwgbDQKKwlhZGQrY21wK2FkZAlhY2M0LCBhY2M1LCBsNQorCWFkZCtjbXArYWRkCWFjYzUsIGFjYzYsIGw2CisJZ2V0Zi5zaWcJYWNjNiA9IGxwNworCXN0OAkJW3IzMl0gPSB4eCwgOAorCWJyLmNsb29wIExvb3AKKworCTQ5IGluc24gYXQgbWF4IDYgaW5zbi9jeWNsZToJCTguMTY3IGN5Y2xlcy9saW1iOAorCTExIG1lbW9wcyBhdCBtYXggMiBtZW1vcHMvY3ljbGU6CTUuNSBjeWNsZXMvbGltYjgKKwkxNiBmcG9wcyBhdCBtYXggMiBmcG9wcy9jeWNsZToJCTggY3ljbGVzL2xpbWI4CisJMjEgaW50b3BzIGF0IG1heCA0IGludG9wcy9jeWNsZToJNS4yNSBjeWNsZXMvbGltYjgKKwkxMSsyMSBtZW1vcHMraW50b3BzIGF0IG1heCA0L2N5Y2xlCTggY3ljbGVzL2xpbWI4CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK21wbl9sc2hpZnQsIG1wbl9yc2hpZnQKKworVGhlIGN1cnJlbnQgY29kZSBydW5zIGF0IDEgY3ljbGUvbGltYiBvbiBJdGFuaXVtIDIuCisKK1VzaW5nIDYzIHNlcGFyYXRlIGxvb3BzLCB3ZSBjb3VsZCB1c2UgdGhlIGRvdWJsZS13b3JkIHNocnAgaW5zdHJ1Y3Rpb24uCitUaGF0IGluc3RydWN0aW9uIGhhcyBhIHBsYWluIHNpbmdsZS1jeWNsZSBsYXRlbmN5LiAgV2UgbmVlZCA2MyBsb29wcyBzaW5jZQordGhpcyBpbnN0cnVjdGlvbiBvbmx5IGFjY2VwdCBpbW1lZGlhdGUgY291bnQuICBUaGF0IHdvdWxkIGxlYWQgdG8gYSBzb21ld2hhdAorc2lsbHkgY29kZSBzaXplLCBidXQgdGhlIHNwZWVkIHdvdWxkIGJlIDAuNzUgYy9sIG9uIEl0YW5pdW0gMiAoYnkgdXNpbmcgc2hycAorZWFjaCBjeWNsZSBwbHVzIHNobC9zaHIgZ29pbmcgZG93biBJMSBmb3IgYSBmdXJ0aGVyIGxpbWIgZXZlcnkgc2Vjb25kCitjeWNsZSkuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK21wbl9jb3B5aSwgbXBuX2NvcHlkCisKK1RoZSBjdXJyZW50IGNvZGUgcnVucyBhdCAwLjUgYy9sIG9uIEl0YW5pdW0gMi4gIEJ1dCB0aGF0IGlzIGp1c3QgZm9yIEwxCitjYWNoZSBoaXQuICBUaGUgNC13YXkgdW5yb2xsZWQgbG9vcCB0YWtlcyBqdXN0IDIgY3ljbGVzLCBhbmQgdGh1cyBsb2FkLXVzZQorc2NoZWR1bGluZyBpc24ndCBncmVhdC4gIEl0IG1pZ2h0IGJlIGJlc3QgdG8gYWN0dWFsbHkgdXNlIG1vZHVsbyBzY2hlZHVsZWQKK2xvb3BzLCBzaW5jZSB0aGF0IHdpbGwgYWxsb3cgdXMgdG8gZG8gYmV0dGVyIGxvYWQtdXNlIHNjaGVkdWxpbmcgd2l0aG91dCB0b28KK211Y2ggdW5yb2xsaW5nLgorCitEZXBlbmRpbmcgb24gc2l6ZSBvciBvcGVyYW5kIGFsaWdubWVudCwgd2UgZ2V0IDEgYy9sIG9yIDAuNSBjL2wgb24gSXRhbml1bQorMiwgYWNjb3JkaW5nIHRvIHR1bmUvc3BlZWQuICBDYWNoZSBiYW5rIGNvbmZsaWN0cz8KKworCisKK1JFRkVSRU5DRVMKKworSW50ZWwgSXRhbml1bSBBcmNoaXRlY3R1cmUgU29mdHdhcmUgRGV2ZWxvcGVyJ3MgTWFudWFsLCB2b2x1bWVzIDEgdG8gMywKK0ludGVsIGRvY3VtZW50IDI0NTMxNy0wMDQsIDI0NTMxOC0wMDQsIDI0NTMxOS0wMDQgT2N0b2JlciAyMDAyLiAgVm9sdW1lIDEKK2luY2x1ZGVzIGFuIEl0YW5pdW0gb3B0aW1pemF0aW9uIGd1aWRlLgorCitJbnRlbCBJdGFuaXVtIFByb2Nlc3Nvci1zcGVjaWZpYyBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlIChBQkkpLCBJbnRlbAorZG9jdW1lbnQgMjQ1MzcwLTAwMywgTWF5IDIwMDEuICBEZXNjcmliZXMgQyB0eXBlIHNpemVzLCBkeW5hbWljIGxpbmtpbmcsCitldGMuCisKK0ludGVsIEl0YW5pdW0gQXJjaGl0ZWN0dXJlIEFzc2VtYmx5IExhbmd1YWdlIFJlZmVyZW5jZSBHdWlkZSwgSW50ZWwgZG9jdW1lbnQKKzI0ODgwMS0wMDQsIDIwMDAtMjAwMi4gIERlc2NyaWJlcyBhc3NlbWJseSBpbnN0cnVjdGlvbiBzeW50YXggYW5kIG90aGVyCitkaXJlY3RpdmVzLgorCitJdGFuaXVtIFNvZnR3YXJlIENvbnZlbnRpb25zIGFuZCBSdW50aW1lIEFyY2hpdGVjdHVyZSBHdWlkZSwgSW50ZWwgZG9jdW1lbnQKKzI0NTM1OC0wMDMsIE1heSAyMDAxLiAgRGVzY3JpYmVzIGNhbGxpbmcgY29udmVudGlvbnMsIGluY2x1ZGluZyBzdGFjawordW53aW5kaW5nIHJlcXVpcmVtZW50cy4KKworSW50ZWwgSXRhbml1bSBQcm9jZXNzb3IgUmVmZXJlbmNlIE1hbnVhbCBmb3IgU29mdHdhcmUgT3B0aW1pemF0aW9uLCBJbnRlbAorZG9jdW1lbnQgMjQ1NDczLTAwMywgTm92ZW1iZXIgMjAwMS4KKworSW50ZWwgSXRhbml1bS0yIFByb2Nlc3NvciBSZWZlcmVuY2UgTWFudWFsIGZvciBTb2Z0d2FyZSBEZXZlbG9wbWVudCBhbmQKK09wdGltaXphdGlvbiwgSW50ZWwgZG9jdW1lbnQgMjUxMTEwLTAwMywgTWF5IDIwMDQuCisKK0FsbCB0aGUgYWJvdmUgZG9jdW1lbnRzIGNhbiBiZSBmb3VuZCBvbmxpbmUgYXQKKworICAgIGh0dHA6Ly9kZXZlbG9wZXIuaW50ZWwuY29tL2Rlc2lnbi9pdGFuaXVtL21hbnVhbHMuaHRtCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2lhNjQvYWRkX25fc3ViX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9pYTY0L2FkZF9uX3N1Yl9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTVhZmFhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9pYTY0L2FkZF9uX3N1Yl9uLmFzbQpAQCAtMCwwICsxLDMwNyBAQAorZG5sICBJQS02NCBtcG5fYWRkX25fc3ViX24gLS0gbXBuIHBhcmFsbGVsIGFkZGl0aW9uIGFuZCBzdWJ0cmFjdGlvbi4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgSXRhbml1bTogICAgICA/CitDIEl0YW5pdW0gMjogICAgMi4yNQorCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgc3AnLCBgcjMyJykKK2RlZmluZShgZHAnLCBgcjMzJykKK2RlZmluZShgdXAnLCBgcjM0JykKK2RlZmluZShgdnAnLCBgcjM1JykKK2RlZmluZShgbicsICBgcjM2JykKKworQyBTb21lIHVzZWZ1bCBhbGlhc2VzIGZvciByZWdpc3RlcnMgd2UgdXNlCitkZWZpbmUoYHUwJyxgcjE2JykgZGVmaW5lKGB1MScsYHIxNycpIGRlZmluZShgdTInLGByMTgnKSBkZWZpbmUoYHUzJyxgcjE5JykKK2RlZmluZShgdjAnLGByMjAnKSBkZWZpbmUoYHYxJyxgcjIxJykgZGVmaW5lKGB2MicsYHIyMicpIGRlZmluZShgdjMnLGByMjMnKQorZGVmaW5lKGBzMCcsYHIyNCcpIGRlZmluZShgczEnLGByMjUnKSBkZWZpbmUoYHMyJyxgcjI2JykgZGVmaW5lKGBzMycsYHIyNycpCitkZWZpbmUoYGQwJyxgcjI4JykgZGVmaW5lKGBkMScsYHIyOScpIGRlZmluZShgZDInLGByMzAnKSBkZWZpbmUoYGQzJyxgcjMxJykKK2RlZmluZShgdXAwJyxgdXAnKQorZGVmaW5lKGB1cDEnLGByMTQnKQorZGVmaW5lKGB2cDAnLGB2cCcpCitkZWZpbmUoYHZwMScsYHIxNScpCisKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9hZGRfbl9zdWJfbikKKwkucHJvbG9ndWUKKwkuc2F2ZQlhci5sYywgcjIKKwkuYm9keQoraWZkZWYoYEhBVkVfQUJJXzMyJyxgCisJYWRkcDQJc3AgPSAwLCBzcAkJQwkJCQlNIEkKKwlhZGRwNAlkcCA9IDAsIGRwCQlDCQkJCU0gSQorCW5vcC5pCTAKKwlhZGRwNAl1cCA9IDAsIHVwCQlDCQkJCU0gSQorCWFkZHA0CXZwID0gMCwgdnAJCUMJCQkJTSBJCisJenh0NAluID0gbgkJCUMJCQkJSQorCTs7CisnKQorCisJYW5kCXI5ID0gMywgbgkJQwkJCQlNIEkKKwltb3YuaQlyMiA9IGFyLmxjCQlDCQkJCUkwCisJYWRkCXVwMSA9IDgsIHVwMAkJQwkJCQlNIEkKKwlhZGQJdnAxID0gOCwgdnAwCQlDCQkJCU0gSQorCWFkZAlyOCA9IC0yLCBuCQlDCQkJCU0gSQorCWFkZAlyMTAgPSAyNTYsIHVwCQlDCQkJCU0gSQorCTs7CisJc2hyLnUJcjggPSByOCwgMgkJQwkJCQlJMAorCWNtcC5lcQlwMTAsIHAwID0gMCwgcjkJCUMJCQkJTSBJCisJY21wLmVxCXAxMSwgcDAgPSAyLCByOQkJQwkJCQlNIEkKKwljbXAuZXEJcDEyLCBwMCA9IDMsIHI5CQlDCQkJCU0gSQorCWFkZAlyMTEgPSAyNTYsIHZwCQlDCQkJCU0gSQorCTs7CisJbW92LmkJYXIubGMgPSByOAkJQwkJCQlJMAorICAocDEwKQlicglMKGIwKQkJCUMJCQkJQgorICAocDExKQlicglMKGIyKQkJCUMJCQkJQgorICAocDEyKQlicglMKGIzKQkJCUMJCQkJQgorCitMKGIxKToJbGQ4CXUzID0gW3VwMF0sIDgJCUMJCQkJTTAxCisJYWRkCXVwMSA9IDgsIHVwMQkJQwkJCQlNIEkKKwljbXBsdHUJcDE0LCBwMTUgPSA0LCBuCQlDCQkJCU0gSQorCWxkOAl2MyA9IFt2cDBdLCA4CQlDCQkJCU0wMQorCWFkZAl2cDEgPSA4LCB2cDEJCUMJCQkJTSBJCisJOzsKKwlhZGQJczMgPSB1MywgdjMJCUMJCQkJTSBJCisJc3ViCWQzID0gdTMsIHYzCQlDCQkJCU0gSQorCW1vdglyOCA9IDAJCQlDCQkJCU0gSQorCTs7CisJY21wbHR1CXA5LCBwMCA9IHMzLCB2MwkJQyAgY2FycnkgZnJvbSBhZGQzCQlNIEkKKwljbXBsdHUJcDEzLCBwMCA9IHUzLCB2MwlDIGJvcnJvdyBmcm9tIHN1YjMJCU0gSQorICAocDE1KQlicglMKGNqMSkJCQlDCQkJCUIKKwlzdDgJW3NwXSA9IHMzLCA4CQlDCQkJCU0yMworCXN0OAlbZHBdID0gZDMsIDgJCUMJCQkJTTIzCisJYnIJTChjMCkJCQlDCQkJCUIKKworTChiMCk6CWNtcC5uZQlwOSwgcDAgPSByMCwgcjAJCUMJCQkJTSBJCisJY21wLm5lCXAxMywgcDAgPSByMCwgcjAJQwkJCQlNIEkKK0woYzApOglsZDgJdTAgPSBbdXAwXSwgMTYJCUMJCQkJTTAxCisJbGQ4CXUxID0gW3VwMV0sIDE2CQlDCQkJCU0wMQorCTs7CisJbGQ4CXYwID0gW3ZwMF0sIDE2CQlDCQkJCU0wMQorCWxkOAl2MSA9IFt2cDFdLCAxNgkJQwkJCQlNMDEKKwk7OworCWxkOAl1MiA9IFt1cDBdLCAxNgkJQwkJCQlNMDEKKwlsZDgJdTMgPSBbdXAxXSwgMTYJCUMJCQkJTTAxCisJOzsKKwlsZDgJdjIgPSBbdnAwXSwgMTYJCUMJCQkJTTAxCisJbGQ4CXYzID0gW3ZwMV0sIDE2CQlDCQkJCU0wMQorCTs7CisJYWRkCXMwID0gdTAsIHYwCQlDCQkJCU0gSQorCWFkZAlzMSA9IHUxLCB2MQkJQwkJCQlNIEkKKwlzdWIJZDAgPSB1MCwgdjAJCUMJCQkJTSBJCisJc3ViCWQxID0gdTEsIHYxCQlDCQkJCU0gSQorCTs7CisJY21wbHR1CXA2LCBwMCA9IHMwLCB2MAkJQyAgY2FycnkgZnJvbSBhZGQwCQlNIEkKKwljbXBsdHUJcDcsIHAwID0gczEsIHYxCQlDICBjYXJyeSBmcm9tIGFkZDEJCU0gSQorCWNtcGx0dQlwMTAsIHAwID0gdTAsIHYwCUMgYm9ycm93IGZyb20gc3ViMAkJTSBJCisJY21wbHR1CXAxMSwgcDAgPSB1MSwgdjEJQyBib3Jyb3cgZnJvbSBzdWIxCQlNIEkKKwk7OworCW5vcAkwCQkJQworCWJyLmNsb29wLmRwdGsJTCh0b3ApCQlDCQkJCUIKKwlicglMKGVuZCkJCQlDCQkJCUIKKworTChiMyk6CWxkOAl1MSA9IFt1cDBdLCA4CQlDCQkJCU0wMQorCWFkZAl1cDEgPSA4LCB1cDEJCUMJCQkJTSBJCisJbGQ4CXYxID0gW3ZwMF0sIDgJCUMJCQkJTTAxCisJOzsKKwlhZGQJdnAxID0gOCwgdnAxCQlDCQkJCU0gSQorCWFkZAlzMSA9IHUxLCB2MQkJQwkJCQlNIEkKKwlzdWIJZDEgPSB1MSwgdjEJCUMJCQkJTSBJCisJOzsKKwljbXBsdHUJcDcsIHAwID0gczEsIHYxCQlDICBjYXJyeSBmcm9tIGFkZDEJCU0gSQorCWNtcGx0dQlwMTEsIHAwID0gdTEsIHYxCUMgYm9ycm93IGZyb20gc3ViMQkJTSBJCisJOzsKKwlzdDgJW3NwXSA9IHMxLCA4CQlDCQkJCU0yMworCXN0OAlbZHBdID0gZDEsIDgJCUMJCQkJTTIzCisJYnIJTChjMikJCQlDCQkJCUIKKworCUFMSUdOKDMyKQorTChiMik6CWNtcC5uZQlwNywgcDAgPSByMCwgcjAJCUMJCQkJTSBJCisJY21wLm5lCXAxMSwgcDAgPSByMCwgcjAJQwkJCQlNIEkKKwlub3AJMAorTChjMik6CWxkOAl1MiA9IFt1cDBdLCAxNgkJQwkJCQlNMDEKKwlsZDgJdTMgPSBbdXAxXSwgMTYJCUMJCQkJTTAxCisJY21wbHR1CXAxNCwgcDAgPSA0LCBuCQlDCQkJCU0gSQorCTs7CisJbGQ4CXYyID0gW3ZwMF0sIDE2CQlDCQkJCU0wMQorCWxkOAl2MyA9IFt2cDFdLCAxNgkJQwkJCQlNMDEKKyAgKHAxNCkJYnIJTChndDQpCQkJQwkJCQlCCisJOzsKKwlhZGQJczIgPSB1MiwgdjIJCUMJCQkJTSBJCisJYWRkCXMzID0gdTMsIHYzCQlDCQkJCU0gSQorCXN1YglkMiA9IHUyLCB2MgkJQwkJCQlNIEkKKwlzdWIJZDMgPSB1MywgdjMJCUMJCQkJTSBJCisJOzsKKwljbXBsdHUJcDgsIHAwID0gczIsIHYyCQlDICBjYXJyeSBmcm9tIGFkZDAJCU0gSQorCWNtcGx0dQlwOSwgcDAgPSBzMywgdjMJCUMgIGNhcnJ5IGZyb20gYWRkMwkJTSBJCisJY21wbHR1CXAxMiwgcDAgPSB1MiwgdjIJQyBib3Jyb3cgZnJvbSBzdWIyCQlNIEkKKwljbXBsdHUJcDEzLCBwMCA9IHUzLCB2MwlDIGJvcnJvdyBmcm9tIHN1YjMJCU0gSQorCWJyCUwoY2oyKQkJCUMJCQkJQgorCTs7CitMKGd0NCk6CWxkOAl1MCA9IFt1cDBdLCAxNgkJQwkJCQlNMDEKKwlsZDgJdTEgPSBbdXAxXSwgMTYJCUMJCQkJTTAxCisJOzsKKwlsZDgJdjAgPSBbdnAwXSwgMTYJCUMJCQkJTTAxCisJbGQ4CXYxID0gW3ZwMV0sIDE2CQlDCQkJCU0wMQorCTs7CisJYWRkCXMyID0gdTIsIHYyCQlDCQkJCU0gSQorCWFkZAlzMyA9IHUzLCB2MwkJQwkJCQlNIEkKKwlzdWIJZDIgPSB1MiwgdjIJCUMJCQkJTSBJCisJc3ViCWQzID0gdTMsIHYzCQlDCQkJCU0gSQorCTs7CisJY21wbHR1CXA4LCBwMCA9IHMyLCB2MgkJQyAgY2FycnkgZnJvbSBhZGQwCQlNIEkKKwljbXBsdHUJcDksIHAwID0gczMsIHYzCQlDICBjYXJyeSBmcm9tIGFkZDEJCU0gSQorCWNtcGx0dQlwMTIsIHAwID0gdTIsIHYyCUMgYm9ycm93IGZyb20gc3ViMAkJTSBJCisJY21wbHR1CXAxMywgcDAgPSB1MywgdjMJQyBib3Jyb3cgZnJvbSBzdWIxCQlNIEkKKwlici5jbG9vcC5kcHRrCUwobWlkKQkJQwkJCQlCCisKKwlBTElHTigzMikKK0wodG9wKToKKwlsZDgJdTAgPSBbdXAwXSwgMTYJCUMJCQkJTTAxCisJbGQ4CXUxID0gW3VwMV0sIDE2CQlDCQkJCU0wMQorICAgKHA5KQljbXBlcW9yCXA2LCBwMCA9IC0xLCBzMAkJQwkJCQlNIEkKKyAgIChwOSkJYWRkCXMwID0gMSwgczAJCUMJCQkJTSBJCisgIChwMTMpCWNtcGVxb3IJcDEwLCBwMCA9IDAsIGQwCQlDCQkJCU0gSQorICAocDEzKQlhZGQJZDAgPSAtMSwgZDAJCUMJCQkJTSBJCisJOzsKKwlsZDgJdjAgPSBbdnAwXSwgMTYJCUMJCQkJTTAxCisJbGQ4CXYxID0gW3ZwMV0sIDE2CQlDCQkJCU0wMQorICAgKHA2KQljbXBlcW9yCXA3LCBwMCA9IC0xLCBzMQkJQwkJCQlNIEkKKyAgIChwNikJYWRkCXMxID0gMSwgczEJCUMJCQkJTSBJCisgIChwMTApCWNtcGVxb3IJcDExLCBwMCA9IDAsIGQxCQlDCQkJCU0gSQorICAocDEwKQlhZGQJZDEgPSAtMSwgZDEJCUMJCQkJTSBJCisJOzsKKwlzdDgJW3NwXSA9IHMwLCA4CQlDCQkJCU0yMworCXN0OAlbZHBdID0gZDAsIDgJCUMJCQkJTTIzCisJYWRkCXMyID0gdTIsIHYyCQlDCQkJCU0gSQorCWFkZAlzMyA9IHUzLCB2MwkJQwkJCQlNIEkKKwlzdWIJZDIgPSB1MiwgdjIJCUMJCQkJTSBJCisJc3ViCWQzID0gdTMsIHYzCQlDCQkJCU0gSQorCTs7CisJc3Q4CVtzcF0gPSBzMSwgOAkJQwkJCQlNMjMKKwlzdDgJW2RwXSA9IGQxLCA4CQlDCQkJCU0yMworCWNtcGx0dQlwOCwgcDAgPSBzMiwgdjIJCUMgIGNhcnJ5IGZyb20gYWRkMgkJTSBJCisJY21wbHR1CXA5LCBwMCA9IHMzLCB2MwkJQyAgY2FycnkgZnJvbSBhZGQzCQlNIEkKKwljbXBsdHUJcDEyLCBwMCA9IHUyLCB2MglDIGJvcnJvdyBmcm9tIHN1YjIJCU0gSQorCWNtcGx0dQlwMTMsIHAwID0gdTMsIHYzCUMgYm9ycm93IGZyb20gc3ViMwkJTSBJCisJOzsKK0wobWlkKToKKwlsZDgJdTIgPSBbdXAwXSwgMTYJCUMJCQkJTTAxCisJbGQ4CXUzID0gW3VwMV0sIDE2CQlDCQkJCU0wMQorICAgKHA3KQljbXBlcW9yCXA4LCBwMCA9IC0xLCBzMgkJQwkJCQlNIEkKKyAgIChwNykJYWRkCXMyID0gMSwgczIJCUMJCQkJTSBJCisgIChwMTEpCWNtcGVxb3IJcDEyLCBwMCA9IDAsIGQyCQlDCQkJCU0gSQorICAocDExKQlhZGQJZDIgPSAtMSwgZDIJCUMJCQkJTSBJCisJOzsKKwlsZDgJdjIgPSBbdnAwXSwgMTYJCUMJCQkJTTAxCisJbGQ4CXYzID0gW3ZwMV0sIDE2CQlDCQkJCU0wMQorICAgKHA4KQljbXBlcW9yCXA5LCBwMCA9IC0xLCBzMwkJQwkJCQlNIEkKKyAgIChwOCkJYWRkCXMzID0gMSwgczMJCUMJCQkJTSBJCisgIChwMTIpCWNtcGVxb3IJcDEzLCBwMCA9IDAsIGQzCQlDCQkJCU0gSQorICAocDEyKQlhZGQJZDMgPSAtMSwgZDMJCUMJCQkJTSBJCisJOzsKKwlzdDgJW3NwXSA9IHMyLCA4CQlDCQkJCU0yMworCXN0OAlbZHBdID0gZDIsIDgJCUMJCQkJTTIzCisJYWRkCXMwID0gdTAsIHYwCQlDCQkJCU0gSQorCWFkZAlzMSA9IHUxLCB2MQkJQwkJCQlNIEkKKwlzdWIJZDAgPSB1MCwgdjAJCUMJCQkJTSBJCisJc3ViCWQxID0gdTEsIHYxCQlDCQkJCU0gSQorCTs7CisJc3Q4CVtzcF0gPSBzMywgOAkJQwkJCQlNMjMKKwlzdDgJW2RwXSA9IGQzLCA4CQlDCQkJCU0yMworCWNtcGx0dQlwNiwgcDAgPSBzMCwgdjAJCUMgIGNhcnJ5IGZyb20gYWRkMAkJTSBJCisJY21wbHR1CXA3LCBwMCA9IHMxLCB2MQkJQyAgY2FycnkgZnJvbSBhZGQxCQlNIEkKKwljbXBsdHUJcDEwLCBwMCA9IHUwLCB2MAlDIGJvcnJvdyBmcm9tIHN1YjAJCU0gSQorCWNtcGx0dQlwMTEsIHAwID0gdTEsIHYxCUMgYm9ycm93IGZyb20gc3ViMQkJTSBJCisJOzsKKwlsZmV0Y2gJW3IxMF0sIDMyCQlDCQkJCU0/CisJbGZldGNoCVtyMTFdLCAzMgkJQwkJCQlNPworCWJyLmNsb29wLmRwdGsJTCh0b3ApCQlDCQkJCUIKKwk7OworCitMKGVuZCk6CisJbm9wCTAKKwlub3AJMAorICAgKHA5KQljbXBlcW9yCXA2LCBwMCA9IC0xLCBzMAkJQwkJCQlNIEkKKyAgIChwOSkJYWRkCXMwID0gMSwgczAJCUMJCQkJTSBJCisgIChwMTMpCWNtcGVxb3IJcDEwLCBwMCA9IDAsIGQwCQlDCQkJCU0gSQorICAocDEzKQlhZGQJZDAgPSAtMSwgZDAJCUMJCQkJTSBJCisJOzsKKwlub3AJMAorCW5vcAkwCisgICAocDYpCWNtcGVxb3IJcDcsIHAwID0gLTEsIHMxCQlDCQkJCU0gSQorICAgKHA2KQlhZGQJczEgPSAxLCBzMQkJQwkJCQlNIEkKKyAgKHAxMCkJY21wZXFvcglwMTEsIHAwID0gMCwgZDEJCUMJCQkJTSBJCisgIChwMTApCWFkZAlkMSA9IC0xLCBkMQkJQwkJCQlNIEkKKwk7OworCXN0OAlbc3BdID0gczAsIDgJCUMJCQkJTTIzCisJc3Q4CVtkcF0gPSBkMCwgOAkJQwkJCQlNMjMKKwlhZGQJczIgPSB1MiwgdjIJCUMJCQkJTSBJCisJYWRkCXMzID0gdTMsIHYzCQlDCQkJCU0gSQorCXN1YglkMiA9IHUyLCB2MgkJQwkJCQlNIEkKKwlzdWIJZDMgPSB1MywgdjMJCUMJCQkJTSBJCisJOzsKKwlzdDgJW3NwXSA9IHMxLCA4CQlDCQkJCU0yMworCXN0OAlbZHBdID0gZDEsIDgJCUMJCQkJTTIzCisJY21wbHR1CXA4LCBwMCA9IHMyLCB2MgkJQyAgY2FycnkgZnJvbSBhZGQyCQlNIEkKKwljbXBsdHUJcDksIHAwID0gczMsIHYzCQlDICBjYXJyeSBmcm9tIGFkZDMJCU0gSQorCWNtcGx0dQlwMTIsIHAwID0gdTIsIHYyCUMgYm9ycm93IGZyb20gc3ViMgkJTSBJCisJY21wbHR1CXAxMywgcDAgPSB1MywgdjMJQyBib3Jyb3cgZnJvbSBzdWIzCQlNIEkKKwk7OworTChjajIpOgorICAgKHA3KQljbXBlcW9yCXA4LCBwMCA9IC0xLCBzMgkJQwkJCQlNIEkKKyAgIChwNykJYWRkCXMyID0gMSwgczIJCUMJCQkJTSBJCisgIChwMTEpCWNtcGVxb3IJcDEyLCBwMCA9IDAsIGQyCQlDCQkJCU0gSQorICAocDExKQlhZGQJZDIgPSAtMSwgZDIJCUMJCQkJTSBJCisJbW92CXI4ID0gMAkJCUMJCQkJTSBJCisJbm9wCTAKKwk7OworCXN0OAlbc3BdID0gczIsIDgJCUMJCQkJTTIzCisJc3Q4CVtkcF0gPSBkMiwgOAkJQwkJCQlNMjMKKyAgIChwOCkJY21wZXFvcglwOSwgcDAgPSAtMSwgczMJCUMJCQkJTSBJCisgICAocDgpCWFkZAlzMyA9IDEsIHMzCQlDCQkJCU0gSQorICAocDEyKQljbXBlcW9yCXAxMywgcDAgPSAwLCBkMwkJQwkJCQlNIEkKKyAgKHAxMikJYWRkCWQzID0gLTEsIGQzCQlDCQkJCU0gSQorCTs7CitMKGNqMSk6CisgICAocDkpCW1vdglyOCA9IDIJCQlDCQkJCU0gSQorCTs7CisJbW92LmkJYXIubGMgPSByMgkJQwkJCQlJMAorICAocDEzKQlhZGQJcjggPSAxLCByOAkJQwkJCQlNIEkKKwlzdDgJW3NwXSA9IHMzCQlDCQkJCU0yMworCXN0OAlbZHBdID0gZDMJCUMJCQkJTTIzCisJYnIucmV0LnNwdGsubWFueSBiMAkJQwkJCQlCCitFUElMT0dVRSgpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vaWE2NC9hZGRtdWxfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2lhNjQvYWRkbXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYTMyOTcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2lhNjQvYWRkbXVsXzEuYXNtCkBAIC0wLDAgKzEsNjAyIEBACitkbmwgIElBLTY0IG1wbl9hZGRtdWxfMSAtLSBNdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYSBsaW1iIGFuZCBhZGQgdGhlCitkbmwgIHJlc3VsdCB0byBhIHNlY29uZCBsaW1iIHZlY3Rvci4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDAtMjAwNSwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgY3ljbGVzL2xpbWIKK0MgSXRhbml1bTogICAgMy4wCitDIEl0YW5pdW0gMjogIDIuMAorCitDIFRPRE8KK0MgICogRnVydGhlciBvcHRpbWl6ZSBmZWVkLWluIGFuZCB3aW5kLWRvd24gY29kZSwgYm90aCBmb3Igc3BlZWQgYW5kIGNvZGUgc2l6ZS4KK0MgICogSGFuZGxlIGxvdyBsaW1iIGlucHV0IGFuZCByZXN1bHRzIHNwZWNpYWxseSwgdXNpbmcgYSBjb21tb24gc3RmOCBpbiB0aGUKK0MgICAgZXBpbG9ndWUuCitDICAqIFVzZSAxIGMvbCBjYXJyeSBwcm9wYWdhdGlvbiBzY2hlbWUgaW4gd2luZC1kb3duIGNvZGUuCitDICAqIFVzZSBleHRyYSBwb2ludGVyIHJlZ2lzdGVycyBmb3IgYHVwJyBhbmQgcnAgdG8gc3BlZWQgdXAgZmVlZC1pbiBsb2Fkcy4KK0MgICogV29yayBvdXQgZmluYWwgZGlmZmVyZW5jZXMgd2l0aCBtdWxfMS5hc20uICBUaGF0IGZ1bmN0aW9uIGlzIDMwMCBieXRlcworQyAgICBzbWFsbGVyIHRoYW4gdGhpcyBkdWUgdG8gYmV0dGVyIGxvb3Agc2NoZWR1bGluZyBhbmQgdGh1cyBzaW1wbGVyIGZlZWQtaW4KK0MgICAgY29kZS4KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywgYHIzMicpCitkZWZpbmUoYHVwJywgYHIzMycpCitkZWZpbmUoYG4nLCBgcjM0JykKK2RlZmluZShgdmwnLCBgcjM1JykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9hZGRtdWxfMSkKKwkucHJvbG9ndWUKKwkuc2F2ZQlhci5sYywgcjIKKwkuYm9keQorCitpZmRlZihgSEFWRV9BQklfMzInLAorYAlhZGRwNAkJcnAgPSAwLCBycAkJQyBNIEkKKwlhZGRwNAkJdXAgPSAwLCB1cAkJQyBNIEkKKwl6eHQ0CQluID0gbgkJCUMgSQorCTs7CisnKQorey5tbWkKKwlhZGRzCQlyMTUgPSAtMSwgbgkJQyBNIEkKKwltb3YJCXIyMCA9IHJwCQlDIE0gSQorCW1vdi5pCQlyMiA9IGFyLmxjCQlDIEkwCit9Cit7Lm1taQorCWxkZjgJCWY3ID0gW3VwXSwgOAkJQyBNCisJbGRmOAkJZjggPSBbcnBdLCA4CQlDIE0KKwlhbmQJCXIxNCA9IDMsIG4JCUMgTSBJCisJOzsKK30KK3subW1pCisJc2V0Zi5zaWcJZjYgPSB2bAkJCUMgTTIgTTMKKwljbXAuZXEJCXAxMCwgcDAgPSAwLCByMTQJQyBNIEkKKwlzaHIudQkJcjMxID0gcjE1LCAyCQlDIEkwCit9Cit7Lm1taQorCWNtcC5lcQkJcDExLCBwMCA9IDIsIHIxNAlDIE0gSQorCWNtcC5lcQkJcDEyLCBwMCA9IDMsIHIxNAlDIE0gSQorCW5vcC5pCQkwCQkJQyBJCisJOzsKK30KK3subWlpCisJY21wLm5lCQlwNiwgcDcgPSByMCwgcjAJCUMgTSBJCisJbW92LmkJCWFyLmxjID0gcjMxCQlDIEkwCisJY21wLm5lCQlwOCwgcDkgPSByMCwgcjAJCUMgTSBJCit9Cit7LmJiYgorICAocDEwKQlici5kcHRrCQkuTGIwMAkJCUMgQgorICAocDExKQlici5kcHRrCQkuTGIxMAkJCUMgQgorICAocDEyKQlici5kcHRrCQkuTGIxMQkJCUMgQgorCTs7Cit9CisKKy5MYjAxOglici5jbG9vcC5kcHRrCS5ncnQxCQkJQyBCCisKKwl4bWEubAkJZjM5ID0gZjcsIGY2LCBmOAlDIEYKKwl4bWEuaHUJCWY0MyA9IGY3LCBmNiwgZjgJQyBGCisJOzsKKwlnZXRmLnNpZwlyOCA9IGY0MwkJQyBNMgorCXN0ZjgJCVtyMjBdID0gZjM5CQlDIE0yIE0zCisJbW92LmkJCWFyLmxjID0gcjIJCUMgSTAKKwlici5yZXQuc3B0ay5tYW55IGIwCQkJQyBCCisKKy5ncnQxOgorCWxkZjgJCWYzMiA9IFt1cF0sIDgKKwlsZGY4CQlmNDQgPSBbcnBdLCA4CisJOzsKKwlsZGY4CQlmMzMgPSBbdXBdLCA4CisJbGRmOAkJZjQ1ID0gW3JwXSwgOAorCTs7CisJbGRmOAkJZjM0ID0gW3VwXSwgOAorCXhtYS5sCQlmMzkgPSBmNywgZjYsIGY4CisJbGRmOAkJZjQ2ID0gW3JwXSwgOAorCXhtYS5odQkJZjQzID0gZjcsIGY2LCBmOAorCTs7CisJbGRmOAkJZjM1ID0gW3VwXSwgOAorCWxkZjgJCWY0NyA9IFtycF0sIDgKKwlici5jbG9vcC5kcHRrCS5ncnQ1CisKKwl4bWEubAkJZjM2ID0gZjMyLCBmNiwgZjQ0CisJeG1hLmh1CQlmNDAgPSBmMzIsIGY2LCBmNDQKKwk7OworCXN0ZjgJCVtyMjBdID0gZjM5LCA4CisJeG1hLmwJCWYzNyA9IGYzMywgZjYsIGY0NQorCXhtYS5odQkJZjQxID0gZjMzLCBmNiwgZjQ1CisJOzsKKwlnZXRmLnNpZwlyMzEgPSBmNDMKKwlnZXRmLnNpZwlyMjQgPSBmMzYKKwl4bWEubAkJZjM4ID0gZjM0LCBmNiwgZjQ2CisJeG1hLmh1CQlmNDIgPSBmMzQsIGY2LCBmNDYKKwk7OworCWdldGYuc2lnCXIyOCA9IGY0MAorCWdldGYuc2lnCXIyNSA9IGYzNworCXhtYS5sCQlmMzkgPSBmMzUsIGY2LCBmNDcKKwl4bWEuaHUJCWY0MyA9IGYzNSwgZjYsIGY0NworCTs7CisJZ2V0Zi5zaWcJcjI5ID0gZjQxCisJZ2V0Zi5zaWcJcjI2ID0gZjM4CisJYnIJCS5MY2o1CisKKy5ncnQ1OgorCW1vdgkJcjMwID0gMAorCXhtYS5sCQlmMzYgPSBmMzIsIGY2LCBmNDQKKwl4bWEuaHUJCWY0MCA9IGYzMiwgZjYsIGY0NAorCTs7CisJbGRmOAkJZjMyID0gW3VwXSwgOAorCXhtYS5sCQlmMzcgPSBmMzMsIGY2LCBmNDUKKwlsZGY4CQlmNDQgPSBbcnBdLCA4CisJeG1hLmh1CQlmNDEgPSBmMzMsIGY2LCBmNDUKKwk7OworCWxkZjgJCWYzMyA9IFt1cF0sIDgKKwlnZXRmLnNpZwlyMjcgPSBmMzkKKwk7OworCWdldGYuc2lnCXIzMSA9IGY0MworCXhtYS5sCQlmMzggPSBmMzQsIGY2LCBmNDYKKwlsZGY4CQlmNDUgPSBbcnBdLCA4CisJeG1hLmh1CQlmNDIgPSBmMzQsIGY2LCBmNDYKKwk7OworCWxkZjgJCWYzNCA9IFt1cF0sIDgKKwlnZXRmLnNpZwlyMjQgPSBmMzYKKwk7OworCWdldGYuc2lnCXIyOCA9IGY0MAorCXhtYS5sCQlmMzkgPSBmMzUsIGY2LCBmNDcKKwlsZGY4CQlmNDYgPSBbcnBdLCA4CisJeG1hLmh1CQlmNDMgPSBmMzUsIGY2LCBmNDcKKwk7OworCWxkZjgJCWYzNSA9IFt1cF0sIDgKKwlnZXRmLnNpZwlyMjUgPSBmMzcKKwlici5jbG9vcC5kcHRrCS5Mb29wCisJYnIJCS5MZTAKKworCisuTGIxMDoJbGRmOAkJZjM1ID0gW3VwXSwgOAorCWxkZjgJCWY0NyA9IFtycF0sIDgKKwlici5jbG9vcC5kcHRrCS5ncnQyCisKKwl4bWEubAkJZjM4ID0gZjcsIGY2LCBmOAorCXhtYS5odQkJZjQyID0gZjcsIGY2LCBmOAorCTs7CisJeG1hLmwJCWYzOSA9IGYzNSwgZjYsIGY0NworCXhtYS5odQkJZjQzID0gZjM1LCBmNiwgZjQ3CisJOzsKKwlnZXRmLnNpZwlyMzAgPSBmNDIKKwlzdGY4CQlbcjIwXSA9IGYzOCwgOAorCWdldGYuc2lnCXIyNyA9IGYzOQorCWdldGYuc2lnCXI4ID0gZjQzCisJYnIJCS5MY2oyCisKKy5ncnQyOgorCWxkZjgJCWYzMiA9IFt1cF0sIDgKKwlsZGY4CQlmNDQgPSBbcnBdLCA4CisJOzsKKwlsZGY4CQlmMzMgPSBbdXBdLCA4CisJeG1hLmwJCWYzOCA9IGY3LCBmNiwgZjgKKwlsZGY4CQlmNDUgPSBbcnBdLCA4CisJeG1hLmh1CQlmNDIgPSBmNywgZjYsIGY4CisJOzsKKwlsZGY4CQlmMzQgPSBbdXBdLCA4CisJeG1hLmwJCWYzOSA9IGYzNSwgZjYsIGY0NworCWxkZjgJCWY0NiA9IFtycF0sIDgKKwl4bWEuaHUJCWY0MyA9IGYzNSwgZjYsIGY0NworCTs7CisJbGRmOAkJZjM1ID0gW3VwXSwgOAorCWxkZjgJCWY0NyA9IFtycF0sIDgKKwlici5jbG9vcC5kcHRrCS5ncnQ2CisKKwlzdGY4CQlbcjIwXSA9IGYzOCwgOAorCXhtYS5sCQlmMzYgPSBmMzIsIGY2LCBmNDQKKwl4bWEuaHUJCWY0MCA9IGYzMiwgZjYsIGY0NAorCTs7CisJZ2V0Zi5zaWcJcjMwID0gZjQyCisJZ2V0Zi5zaWcJcjI3ID0gZjM5CisJeG1hLmwJCWYzNyA9IGYzMywgZjYsIGY0NQorCXhtYS5odQkJZjQxID0gZjMzLCBmNiwgZjQ1CisJOzsKKwlnZXRmLnNpZwlyMzEgPSBmNDMKKwlnZXRmLnNpZwlyMjQgPSBmMzYKKwl4bWEubAkJZjM4ID0gZjM0LCBmNiwgZjQ2CisJeG1hLmh1CQlmNDIgPSBmMzQsIGY2LCBmNDYKKwk7OworCWdldGYuc2lnCXIyOCA9IGY0MAorCWdldGYuc2lnCXIyNSA9IGYzNworCXhtYS5sCQlmMzkgPSBmMzUsIGY2LCBmNDcKKwl4bWEuaHUJCWY0MyA9IGYzNSwgZjYsIGY0NworCWJyCQkuTGNqNgorCisuZ3J0NjoKKwltb3YJCXIyOSA9IDAKKwl4bWEubAkJZjM2ID0gZjMyLCBmNiwgZjQ0CisJeG1hLmh1CQlmNDAgPSBmMzIsIGY2LCBmNDQKKwk7OworCWxkZjgJCWYzMiA9IFt1cF0sIDgKKwlnZXRmLnNpZwlyMjYgPSBmMzgKKwk7OworCWdldGYuc2lnCXIzMCA9IGY0MgorCXhtYS5sCQlmMzcgPSBmMzMsIGY2LCBmNDUKKwlsZGY4CQlmNDQgPSBbcnBdLCA4CisJeG1hLmh1CQlmNDEgPSBmMzMsIGY2LCBmNDUKKwk7OworCWxkZjgJCWYzMyA9IFt1cF0sIDgKKwlnZXRmLnNpZwlyMjcgPSBmMzkKKwk7OworCWdldGYuc2lnCXIzMSA9IGY0MworCXhtYS5sCQlmMzggPSBmMzQsIGY2LCBmNDYKKwlsZGY4CQlmNDUgPSBbcnBdLCA4CisJeG1hLmh1CQlmNDIgPSBmMzQsIGY2LCBmNDYKKwk7OworCWxkZjgJCWYzNCA9IFt1cF0sIDgKKwlnZXRmLnNpZwlyMjQgPSBmMzYKKwlicgkJLkxMMTAKKworCisuTGIxMToJbGRmOAkJZjM0ID0gW3VwXSwgOAorCWxkZjgJCWY0NiA9IFtycF0sIDgKKwk7OworCWxkZjgJCWYzNSA9IFt1cF0sIDgKKwlsZGY4CQlmNDcgPSBbcnBdLCA4CisJYnIuY2xvb3AuZHB0awkuZ3J0MworCTs7CisKKwl4bWEubAkJZjM3ID0gZjcsIGY2LCBmOAorCXhtYS5odQkJZjQxID0gZjcsIGY2LCBmOAorCXhtYS5sCQlmMzggPSBmMzQsIGY2LCBmNDYKKwl4bWEuaHUJCWY0MiA9IGYzNCwgZjYsIGY0NgorCXhtYS5sCQlmMzkgPSBmMzUsIGY2LCBmNDcKKwl4bWEuaHUJCWY0MyA9IGYzNSwgZjYsIGY0NworCTs7CisJZ2V0Zi5zaWcJcjI5ID0gZjQxCisJc3RmOAkJW3IyMF0gPSBmMzcsIDgKKwlnZXRmLnNpZwlyMjYgPSBmMzgKKwlnZXRmLnNpZwlyMzAgPSBmNDIKKwlnZXRmLnNpZwlyMjcgPSBmMzkKKwlnZXRmLnNpZwlyOCA9IGY0MworCWJyCQkuTGNqMworCisuZ3J0MzoKKwlsZGY4CQlmMzIgPSBbdXBdLCA4CisJeG1hLmwJCWYzNyA9IGY3LCBmNiwgZjgKKwlsZGY4CQlmNDQgPSBbcnBdLCA4CisJeG1hLmh1CQlmNDEgPSBmNywgZjYsIGY4CisJOzsKKwlsZGY4CQlmMzMgPSBbdXBdLCA4CisJeG1hLmwJCWYzOCA9IGYzNCwgZjYsIGY0NgorCWxkZjgJCWY0NSA9IFtycF0sIDgKKwl4bWEuaHUJCWY0MiA9IGYzNCwgZjYsIGY0NgorCTs7CisJbGRmOAkJZjM0ID0gW3VwXSwgOAorCXhtYS5sCQlmMzkgPSBmMzUsIGY2LCBmNDcKKwlsZGY4CQlmNDYgPSBbcnBdLCA4CisJeG1hLmh1CQlmNDMgPSBmMzUsIGY2LCBmNDcKKwk7OworCWxkZjgJCWYzNSA9IFt1cF0sIDgKKwlnZXRmLnNpZwlyMjUgPSBmMzcJCUMgRklYTUUKKwlsZGY4CQlmNDcgPSBbcnBdLCA4CisJYnIuY2xvb3AuZHB0awkuZ3J0NworCisJZ2V0Zi5zaWcJcjI5ID0gZjQxCisJc3RmOAkJW3IyMF0gPSBmMzcsIDgJCUMgRklYTUUKKwl4bWEubAkJZjM2ID0gZjMyLCBmNiwgZjQ0CisJZ2V0Zi5zaWcJcjI2ID0gZjM4CisJeG1hLmh1CQlmNDAgPSBmMzIsIGY2LCBmNDQKKwk7OworCWdldGYuc2lnCXIzMCA9IGY0MgorCXhtYS5sCQlmMzcgPSBmMzMsIGY2LCBmNDUKKwlnZXRmLnNpZwlyMjcgPSBmMzkKKwl4bWEuaHUJCWY0MSA9IGYzMywgZjYsIGY0NQorCTs7CisJZ2V0Zi5zaWcJcjMxID0gZjQzCisJeG1hLmwJCWYzOCA9IGYzNCwgZjYsIGY0NgorCWdldGYuc2lnCXIyNCA9IGYzNgorCXhtYS5odQkJZjQyID0gZjM0LCBmNiwgZjQ2CisJYnIJCS5MY2o3CisKKy5ncnQ3OgorCWdldGYuc2lnCXIyOSA9IGY0MQorCXhtYS5sCQlmMzYgPSBmMzIsIGY2LCBmNDQKKwltb3YJCXIyOCA9IDAKKwl4bWEuaHUJCWY0MCA9IGYzMiwgZjYsIGY0NAorCTs7CisJbGRmOAkJZjMyID0gW3VwXSwgOAorCWdldGYuc2lnCXIyNiA9IGYzOAorCTs7CisJZ2V0Zi5zaWcJcjMwID0gZjQyCisJeG1hLmwJCWYzNyA9IGYzMywgZjYsIGY0NQorCWxkZjgJCWY0NCA9IFtycF0sIDgKKwl4bWEuaHUJCWY0MSA9IGYzMywgZjYsIGY0NQorCTs7CisJbGRmOAkJZjMzID0gW3VwXSwgOAorCWdldGYuc2lnCXIyNyA9IGYzOQorCWJyCQkuTEwxMQorCisKKy5MYjAwOglsZGY4CQlmMzMgPSBbdXBdLCA4CisJbGRmOAkJZjQ1ID0gW3JwXSwgOAorCTs7CisJbGRmOAkJZjM0ID0gW3VwXSwgOAorCWxkZjgJCWY0NiA9IFtycF0sIDgKKwk7OworCWxkZjgJCWYzNSA9IFt1cF0sIDgKKwl4bWEubAkJZjM2ID0gZjcsIGY2LCBmOAorCWxkZjgJCWY0NyA9IFtycF0sIDgKKwl4bWEuaHUJCWY0MCA9IGY3LCBmNiwgZjgKKwlici5jbG9vcC5kcHRrCS5ncnQ0CisKKwl4bWEubAkJZjM3ID0gZjMzLCBmNiwgZjQ1CisJeG1hLmh1CQlmNDEgPSBmMzMsIGY2LCBmNDUKKwl4bWEubAkJZjM4ID0gZjM0LCBmNiwgZjQ2CisJeG1hLmh1CQlmNDIgPSBmMzQsIGY2LCBmNDYKKwk7OworCWdldGYuc2lnCXIyOCA9IGY0MAorCXN0ZjgJCVtyMjBdID0gZjM2LCA4CisJeG1hLmwJCWYzOSA9IGYzNSwgZjYsIGY0NworCWdldGYuc2lnCXIyNSA9IGYzNworCXhtYS5odQkJZjQzID0gZjM1LCBmNiwgZjQ3CisJOzsKKwlnZXRmLnNpZwlyMjkgPSBmNDEKKwlnZXRmLnNpZwlyMjYgPSBmMzgKKwlnZXRmLnNpZwlyMzAgPSBmNDIKKwlnZXRmLnNpZwlyMjcgPSBmMzkKKwlicgkJLkxjajQKKworLmdydDQ6CisJbGRmOAkJZjMyID0gW3VwXSwgOAorCXhtYS5sCQlmMzcgPSBmMzMsIGY2LCBmNDUKKwlsZGY4CQlmNDQgPSBbcnBdLCA4CisJeG1hLmh1CQlmNDEgPSBmMzMsIGY2LCBmNDUKKwk7OworCWxkZjgJCWYzMyA9IFt1cF0sIDgKKwl4bWEubAkJZjM4ID0gZjM0LCBmNiwgZjQ2CisJbGRmOAkJZjQ1ID0gW3JwXSwgOAorCXhtYS5odQkJZjQyID0gZjM0LCBmNiwgZjQ2CisJOzsKKwlsZGY4CQlmMzQgPSBbdXBdLCA4CisJZ2V0Zi5zaWcJcjI0ID0gZjM2CQlDIEZJWE1FCisJeG1hLmwJCWYzOSA9IGYzNSwgZjYsIGY0NworCWxkZjgJCWY0NiA9IFtycF0sIDgKKwlnZXRmLnNpZwlyMjggPSBmNDAKKwl4bWEuaHUJCWY0MyA9IGYzNSwgZjYsIGY0NworCTs7CisJbGRmOAkJZjM1ID0gW3VwXSwgOAorCWdldGYuc2lnCXIyNSA9IGYzNworCWxkZjgJCWY0NyA9IFtycF0sIDgKKwlici5jbG9vcC5kcHRrCS5ncnQ4CisKKwlnZXRmLnNpZwlyMjkgPSBmNDEKKwlzdGY4CQlbcjIwXSA9IGYzNiwgOAkJQyBGSVhNRQorCXhtYS5sCQlmMzYgPSBmMzIsIGY2LCBmNDQKKwlnZXRmLnNpZwlyMjYgPSBmMzgKKwlnZXRmLnNpZwlyMzAgPSBmNDIKKwl4bWEuaHUJCWY0MCA9IGYzMiwgZjYsIGY0NAorCTs7CisJeG1hLmwJCWYzNyA9IGYzMywgZjYsIGY0NQorCWdldGYuc2lnCXIyNyA9IGYzOQorCXhtYS5odQkJZjQxID0gZjMzLCBmNiwgZjQ1CisJYnIJCS5MY2o4CisKKy5ncnQ4OgorCWdldGYuc2lnCXIyOSA9IGY0MQorCXhtYS5sCQlmMzYgPSBmMzIsIGY2LCBmNDQKKwltb3YJCXIzMSA9IDAKKwl4bWEuaHUJCWY0MCA9IGYzMiwgZjYsIGY0NAorCTs7CisJbGRmOAkJZjMyID0gW3VwXSwgOAorCWdldGYuc2lnCXIyNiA9IGYzOAorCWJyCQkuTEwwMAorCisKK0MgKioqIE1BSU4gTE9PUCBTVEFSVCAqKioKKwlBTElHTigzMikJCQkJQyBpbnNuCWZlZAljeWNsZSAjCisuTG9vcDoKKwkucHJlZC5yZWwgIm11dGV4IiwgcDYsIHA3CQlDIG51bQlieQlpMSBpMgorCWdldGYuc2lnCXIyOSA9IGY0MQkJQyAwMAkxNgkwICAgMAorCXhtYS5sCQlmMzYgPSBmMzIsIGY2LCBmNDQJQyAwMQkwNiwxNQkwICAgMAorICAgKHA2KQlhZGQJCXIxNCA9IHIzMCwgcjI3LCAxCUMgMDIJCTAgICAwCisJbGRmOAkJZjQ3ID0gW3JwXSwgOAkJQyAwMwkJMCAgIDAKKwl4bWEuaHUJCWY0MCA9IGYzMiwgZjYsIGY0NAlDIDA0CTA2LDE1CTAgICAwCisgICAocDcpCWFkZAkJcjE0ID0gcjMwLCByMjcJCUMgMDUJCTAgICAwCisJOzsKKwkucHJlZC5yZWwgIm11dGV4IiwgcDYsIHA3CisJbGRmOAkJZjMyID0gW3VwXSwgOAkJQyAwNgkJMSAgIDEKKyAgIChwNikJY21wLmxldQkJcDgsIHA5ID0gcjE0LCByMjcJQyAwNwkJMSAgIDEKKyAgIChwNykJY21wLmx0dQkJcDgsIHA5ID0gcjE0LCByMjcJQyAwOAkJMSAgIDEKKwlnZXRmLnNpZwlyMjYgPSBmMzgJCUMgMDkJMjUJMiAgIDEKKwlzdDgJCVtyMjBdID0gcjE0LCA4CQlDIDEwCQkyICAgMQorCW5vcC5iCQkwCQkJQyAxMQkJMiAgIDEKKwk7OworLkxMMDA6CisJLnByZWQucmVsICJtdXRleCIsIHA4LCBwOQorCWdldGYuc2lnCXIzMCA9IGY0MgkJQyAxMgkyOAkzICAgMgorCXhtYS5sCQlmMzcgPSBmMzMsIGY2LCBmNDUJQyAxMwkxOCwyNwkzICAgMgorICAgKHA4KQlhZGQJCXIxNiA9IHIzMSwgcjI0LCAxCUMgMTQJCTMgICAyCisJbGRmOAkJZjQ0ID0gW3JwXSwgOAkJQyAxNQkJMyAgIDIKKwl4bWEuaHUJCWY0MSA9IGYzMywgZjYsIGY0NQlDIDE2CTE4LDI3CTMgICAyCisgICAocDkpCWFkZAkJcjE2ID0gcjMxLCByMjQJCUMgMTcJCTMgICAyCisJOzsKKwkucHJlZC5yZWwgIm11dGV4IiwgcDgsIHA5CisJbGRmOAkJZjMzID0gW3VwXSwgOAkJQyAxOAkJNCAgIDMKKyAgIChwOCkJY21wLmxldQkJcDYsIHA3ID0gcjE2LCByMjQJQyAxOQkJNCAgIDMKKyAgIChwOSkJY21wLmx0dQkJcDYsIHA3ID0gcjE2LCByMjQJQyAyMAkJNCAgIDMKKwlnZXRmLnNpZwlyMjcgPSBmMzkJCUMgMjEJMzcJNSAgIDMKKwlzdDgJCVtyMjBdID0gcjE2LCA4CQlDIDIyCQk1ICAgMworCW5vcC5iCQkwCQkJQyAyMwkJNSAgIDMKKwk7OworLkxMMTE6CisJLnByZWQucmVsICJtdXRleCIsIHA2LCBwNworCWdldGYuc2lnCXIzMSA9IGY0MwkJQyAyNAk0MAk2ICAgNAorCXhtYS5sCQlmMzggPSBmMzQsIGY2LCBmNDYJQyAyNQkzMCwzOQk2ICAgNAorICAgKHA2KQlhZGQJCXIxNCA9IHIyOCwgcjI1LCAxCUMgMjYJCTYgICA0CisJbGRmOAkJZjQ1ID0gW3JwXSwgOAkJQyAyNwkJNiAgIDQKKwl4bWEuaHUJCWY0MiA9IGYzNCwgZjYsIGY0NglDIDI4CTMwLDM5CTYgICA0CisgICAocDcpCWFkZAkJcjE0ID0gcjI4LCByMjUJCUMgMjkJCTYgICA0CisJOzsKKwkucHJlZC5yZWwgIm11dGV4IiwgcDYsIHA3CisJbGRmOAkJZjM0ID0gW3VwXSwgOAkJQyAzMAkJNyAgIDUKKyAgIChwNikJY21wLmxldQkJcDgsIHA5ID0gcjE0LCByMjUJQyAzMQkJNyAgIDUKKyAgIChwNykJY21wLmx0dQkJcDgsIHA5ID0gcjE0LCByMjUJQyAzMgkJNyAgIDUKKwlnZXRmLnNpZwlyMjQgPSBmMzYJCUMgMzMJMDEJOCAgIDUKKwlzdDgJCVtyMjBdID0gcjE0LCA4CQlDIDM0CQk4ICAgNQorCW5vcC5iCQkwCQkJQyAzNQkJOCAgIDUKKwk7OworLkxMMTA6CisJLnByZWQucmVsICJtdXRleCIsIHA4LCBwOQorCWdldGYuc2lnCXIyOCA9IGY0MAkJQyAzNgkwNAk5ICAgNgorCXhtYS5sCQlmMzkgPSBmMzUsIGY2LCBmNDcJQyAzNwk0MiwwMwk5ICAgNgorICAgKHA4KQlhZGQJCXIxNiA9IHIyOSwgcjI2LCAxCUMgMzgJCTkgICA2CisJbGRmOAkJZjQ2ID0gW3JwXSwgOAkJQyAzOQkJOSAgIDYKKwl4bWEuaHUJCWY0MyA9IGYzNSwgZjYsIGY0NwlDIDQwCTQyLDAzCTkgICA2CisgICAocDkpCWFkZAkJcjE2ID0gcjI5LCByMjYJCUMgNDEJCTkgICA2CisJOzsKKwkucHJlZC5yZWwgIm11dGV4IiwgcDgsIHA5CisJbGRmOAkJZjM1ID0gW3VwXSwgOAkJQyA0MgkgICAgICAgMTAgICA3CisgICAocDgpCWNtcC5sZXUJCXA2LCBwNyA9IHIxNiwgcjI2CUMgNDMJICAgICAgIDEwICAgNworICAgKHA5KQljbXAubHR1CQlwNiwgcDcgPSByMTYsIHIyNglDIDQ0CSAgICAgICAxMCAgIDcKKwlnZXRmLnNpZwlyMjUgPSBmMzcJCUMgNDUJMTMgICAgIDExICAgNworCXN0OAkJW3IyMF0gPSByMTYsIDgJCUMgNDYJICAgICAgIDExICAgNworCWJyLmNsb29wLmRwdGsJLkxvb3AJCQlDIDQ3CSAgICAgICAxMSAgIDcKK0MgKioqIE1BSU4gTE9PUCBFTkQgKioqCisJOzsKKy5MZTA6CisJLnByZWQucmVsICJtdXRleCIsIHA2LCBwNworCWdldGYuc2lnCXIyOSA9IGY0MQkJQworCXhtYS5sCQlmMzYgPSBmMzIsIGY2LCBmNDQJQworICAgKHA2KQlhZGQJCXIxNCA9IHIzMCwgcjI3LCAxCUMKKwlsZGY4CQlmNDcgPSBbcnBdLCA4CQlDCisJeG1hLmh1CQlmNDAgPSBmMzIsIGY2LCBmNDQJQworICAgKHA3KQlhZGQJCXIxNCA9IHIzMCwgcjI3CQlDCisJOzsKKwkucHJlZC5yZWwgIm11dGV4IiwgcDYsIHA3CisgICAocDYpCWNtcC5sZXUJCXA4LCBwOSA9IHIxNCwgcjI3CUMKKyAgIChwNykJY21wLmx0dQkJcDgsIHA5ID0gcjE0LCByMjcJQworCWdldGYuc2lnCXIyNiA9IGYzOAkJQworCXN0OAkJW3IyMF0gPSByMTQsIDgJCUMKKwk7OworCS5wcmVkLnJlbCAibXV0ZXgiLCBwOCwgcDkKKwlnZXRmLnNpZwlyMzAgPSBmNDIJCUMKKwl4bWEubAkJZjM3ID0gZjMzLCBmNiwgZjQ1CUMKKyAgIChwOCkJYWRkCQlyMTYgPSByMzEsIHIyNCwgMQlDCisJeG1hLmh1CQlmNDEgPSBmMzMsIGY2LCBmNDUJQworICAgKHA5KQlhZGQJCXIxNiA9IHIzMSwgcjI0CQlDCisJOzsKKwkucHJlZC5yZWwgIm11dGV4IiwgcDgsIHA5CisgICAocDgpCWNtcC5sZXUJCXA2LCBwNyA9IHIxNiwgcjI0CUMKKyAgIChwOSkJY21wLmx0dQkJcDYsIHA3ID0gcjE2LCByMjQJQworCWdldGYuc2lnCXIyNyA9IGYzOQkJQworCXN0OAkJW3IyMF0gPSByMTYsIDgJCUMKKwk7OworLkxjajg6CisJLnByZWQucmVsICJtdXRleCIsIHA2LCBwNworCWdldGYuc2lnCXIzMSA9IGY0MwkJQworCXhtYS5sCQlmMzggPSBmMzQsIGY2LCBmNDYJQworICAgKHA2KQlhZGQJCXIxNCA9IHIyOCwgcjI1LCAxCUMKKwl4bWEuaHUJCWY0MiA9IGYzNCwgZjYsIGY0NglDCisgICAocDcpCWFkZAkJcjE0ID0gcjI4LCByMjUJCUMKKwk7OworCS5wcmVkLnJlbCAibXV0ZXgiLCBwNiwgcDcKKyAgIChwNikJY21wLmxldQkJcDgsIHA5ID0gcjE0LCByMjUJQworICAgKHA3KQljbXAubHR1CQlwOCwgcDkgPSByMTQsIHIyNQlDCisJZ2V0Zi5zaWcJcjI0ID0gZjM2CQlDCisJc3Q4CQlbcjIwXSA9IHIxNCwgOAkJQworCTs7CisuTGNqNzoKKwkucHJlZC5yZWwgIm11dGV4IiwgcDgsIHA5CisJZ2V0Zi5zaWcJcjI4ID0gZjQwCQlDCisJeG1hLmwJCWYzOSA9IGYzNSwgZjYsIGY0NwlDCisgICAocDgpCWFkZAkJcjE2ID0gcjI5LCByMjYsIDEJQworCXhtYS5odQkJZjQzID0gZjM1LCBmNiwgZjQ3CUMKKyAgIChwOSkJYWRkCQlyMTYgPSByMjksIHIyNgkJQworCTs7CisJLnByZWQucmVsICJtdXRleCIsIHA4LCBwOQorICAgKHA4KQljbXAubGV1CQlwNiwgcDcgPSByMTYsIHIyNglDCisgICAocDkpCWNtcC5sdHUJCXA2LCBwNyA9IHIxNiwgcjI2CUMKKwlnZXRmLnNpZwlyMjUgPSBmMzcJCUMKKwlzdDgJCVtyMjBdID0gcjE2LCA4CQlDCisJOzsKKy5MY2o2OgorCS5wcmVkLnJlbCAibXV0ZXgiLCBwNiwgcDcKKwlnZXRmLnNpZwlyMjkgPSBmNDEJCUMKKyAgIChwNikJYWRkCQlyMTQgPSByMzAsIHIyNywgMQlDCisgICAocDcpCWFkZAkJcjE0ID0gcjMwLCByMjcJCUMKKwk7OworCS5wcmVkLnJlbCAibXV0ZXgiLCBwNiwgcDcKKyAgIChwNikJY21wLmxldQkJcDgsIHA5ID0gcjE0LCByMjcJQworICAgKHA3KQljbXAubHR1CQlwOCwgcDkgPSByMTQsIHIyNwlDCisJZ2V0Zi5zaWcJcjI2ID0gZjM4CQlDCisJc3Q4CQlbcjIwXSA9IHIxNCwgOAkJQworCTs7CisuTGNqNToKKwkucHJlZC5yZWwgIm11dGV4IiwgcDgsIHA5CisJZ2V0Zi5zaWcJcjMwID0gZjQyCQlDCisgICAocDgpCWFkZAkJcjE2ID0gcjMxLCByMjQsIDEJQworICAgKHA5KQlhZGQJCXIxNiA9IHIzMSwgcjI0CQlDCisJOzsKKwkucHJlZC5yZWwgIm11dGV4IiwgcDgsIHA5CisgICAocDgpCWNtcC5sZXUJCXA2LCBwNyA9IHIxNiwgcjI0CUMKKyAgIChwOSkJY21wLmx0dQkJcDYsIHA3ID0gcjE2LCByMjQJQworCWdldGYuc2lnCXIyNyA9IGYzOQkJQworCXN0OAkJW3IyMF0gPSByMTYsIDgJCUMKKwk7OworLkxjajQ6CisJLnByZWQucmVsICJtdXRleCIsIHA2LCBwNworCWdldGYuc2lnCXI4ID0gZjQzCQlDCisgICAocDYpCWFkZAkJcjE0ID0gcjI4LCByMjUsIDEJQworICAgKHA3KQlhZGQJCXIxNCA9IHIyOCwgcjI1CQlDCisJOzsKKwkucHJlZC5yZWwgIm11dGV4IiwgcDYsIHA3CisJc3Q4CQlbcjIwXSA9IHIxNCwgOAkJQworICAgKHA2KQljbXAubGV1CQlwOCwgcDkgPSByMTQsIHIyNQlDCisgICAocDcpCWNtcC5sdHUJCXA4LCBwOSA9IHIxNCwgcjI1CUMKKwk7OworLkxjajM6CisJLnByZWQucmVsICJtdXRleCIsIHA4LCBwOQorICAgKHA4KQlhZGQJCXIxNiA9IHIyOSwgcjI2LCAxCUMKKyAgIChwOSkJYWRkCQlyMTYgPSByMjksIHIyNgkJQworCTs7CisJLnByZWQucmVsICJtdXRleCIsIHA4LCBwOQorCXN0OAkJW3IyMF0gPSByMTYsIDgJCUMKKyAgIChwOCkJY21wLmxldQkJcDYsIHA3ID0gcjE2LCByMjYJQworICAgKHA5KQljbXAubHR1CQlwNiwgcDcgPSByMTYsIHIyNglDCisJOzsKKy5MY2oyOgorCS5wcmVkLnJlbCAibXV0ZXgiLCBwNiwgcDcKKyAgIChwNikJYWRkCQlyMTQgPSByMzAsIHIyNywgMQlDCisgICAocDcpCWFkZAkJcjE0ID0gcjMwLCByMjcJCUMKKwk7OworCS5wcmVkLnJlbCAibXV0ZXgiLCBwNiwgcDcKKwlzdDgJCVtyMjBdID0gcjE0CQlDCisgICAocDYpCWNtcC5sZXUJCXA4LCBwOSA9IHIxNCwgcjI3CUMKKyAgIChwNykJY21wLmx0dQkJcDgsIHA5ID0gcjE0LCByMjcJQworCTs7CisgICAocDgpCWFkZAkJcjggPSAxLCByOAkJQyBNIEkKKwltb3YuaQkJYXIubGMgPSByMgkJQyBJMAorCWJyLnJldC5zcHRrLm1hbnkgYjAJCQlDIEIKK0VQSUxPR1VFKCkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9pYTY0L2FkZG11bF8yLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vaWE2NC9hZGRtdWxfMi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZlOGRlNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vaWE2NC9hZGRtdWxfMi5hc20KQEAgLTAsMCArMSw3MTUgQEAKK2RubCAgSUEtNjQgbXBuX2FkZG11bF8yIC0tIE11bHRpcGx5IGEgbi1saW1iIG51bWJlciB3aXRoIGEgMi1saW1iIG51bWJlciBhbmQKK2RubCAgYWRkIHRoZSByZXN1bHQgdG8gYSAobisxKS1saW1iIG51bWJlci4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDQsIDIwMDUsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgIGN5Y2xlcy9saW1iCitDIEl0YW5pdW06ICAgIDMuNjUKK0MgSXRhbml1bSAyOiAgMS42MjUKKworQyBUT0RPCitDICAqIENsZWFuIHVwIHZhcmlhYmxlIG5hbWVzLCBhbmQgdHJ5IHRvIGRlY3JlYXNlIHRoZSBudW1iZXIgb2YgZGlzdGluY3QKK0MgICAgcmVnaXN0ZXJzIHVzZWQuCitDICAqIENsZWFuIHVwIGZlZWQtaW4gY29kZSB0byBub3QgcmVxdWlyZSB6ZXJvaW5nIHNldmVyYWwgcmVnaXN0ZXJzLgorQyAgKiBNYWtlIHN1cmUgd2UgZG9uJ3QgZGVwZW5kIG9uIHVuaW5pdGlhbGlzZWQgcHJlZGljYXRlIHJlZ2lzdGVycy4KK0MgICogQ291bGQgcGVyaGFwcyBzYXZlIGEgZmV3IGN5Y2xlcyBieSB1c2luZyAxIGMvbCBjYXJyeSBwcm9wYWdhdGlvbiBpbgorQyAgICB3aW5kLWRvd24gY29kZS4KK0MgICogVWx0aW1hdGVseSByZXdyaXRlLiAgVGhlIHByb2JsZW0gd2l0aCB0aGlzIGNvZGUgaXMgdGhhdCBpdCBmaXJzdCB1c2VzIGEKK0MgICAgbG9hZGVkIHUgdmFsdWUgaW4gb25lIHhtYSBwYWlyLCB0aGVuIGxlYXZlcyBpdCBsaXZlIG92ZXIgc2V2ZXJhbCB1bnJlbGF0ZWQKK0MgICAgeG1hIHBhaXJzLCBiZWZvcmUgaXQgdXNlcyBpdCBhZ2Fpbi4gIEl0IHNob3VsZCBhY3R1YWxseSBiZSBxdWl0ZSBwb3NzaWJsZQorQyAgICB0byBqdXN0IHN3YXAgc29tZSBhbGlnbmVkIHhtYSBwYWlycyBhcm91bmQuICBCdXQgd2Ugc2hvdWxkIHRoZW4gc2NoZWR1bGUKK0MgICAgdSBsb2FkcyBmdXJ0aGVyIGZyb20gdGhlIGZpcnN0IHVzZS4KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJyxgcjMyJykKK2RlZmluZShgdXAnLGByMzMnKQorZGVmaW5lKGBuJyxgcjM0JykKK2RlZmluZShgdnAnLGByMzUnKQorCitkZWZpbmUoYHNycCcsYHIzJykKKworZGVmaW5lKGB2MCcsYGY2JykKK2RlZmluZShgdjEnLGBmNycpCisKK2RlZmluZShgczAnLGByMTQnKQorZGVmaW5lKGBhY2MwJyxgcjE1JykKKworZGVmaW5lKGBwcjBfMCcsYHIxNicpIGRlZmluZShgcHIwXzEnLGByMTcnKQorZGVmaW5lKGBwcjBfMicsYHIxOCcpIGRlZmluZShgcHIwXzMnLGByMTknKQorCitkZWZpbmUoYHByMV8wJyxgcjIwJykgZGVmaW5lKGBwcjFfMScsYHIyMScpCitkZWZpbmUoYHByMV8yJyxgcjIyJykgZGVmaW5lKGBwcjFfMycsYHIyMycpCisKK2RlZmluZShgYWNjMV8wJyxgcjI0JykgZGVmaW5lKGBhY2MxXzEnLGByMjUnKQorZGVmaW5lKGBhY2MxXzInLGByMjYnKSBkZWZpbmUoYGFjYzFfMycsYHIyNycpCisKK2RubCBkZWZpbmUoYCcsYHIyOCcpCitkbmwgZGVmaW5lKGAnLGByMjknKQorZG5sIGRlZmluZShgJyxgcjMwJykKK2RubCBkZWZpbmUoYCcsYHIzMScpCisKK2RlZmluZShgZnAwYl8wJyxgZjgnKSBkZWZpbmUoYGZwMGJfMScsYGY5JykKK2RlZmluZShgZnAwYl8yJyxgZjEwJykgZGVmaW5lKGBmcDBiXzMnLGBmMTEnKQorCitkZWZpbmUoYGZwMWFfMCcsYGYxMicpIGRlZmluZShgZnAxYV8xJyxgZjEzJykKK2RlZmluZShgZnAxYV8yJyxgZjE0JykgZGVmaW5lKGBmcDFhXzMnLGBmMTUnKQorCitkZWZpbmUoYGZwMWJfMCcsYGYzMicpIGRlZmluZShgZnAxYl8xJyxgZjMzJykKK2RlZmluZShgZnAxYl8yJyxgZjM0JykgZGVmaW5lKGBmcDFiXzMnLGBmMzUnKQorCitkZWZpbmUoYGZwMmFfMCcsYGYzNicpIGRlZmluZShgZnAyYV8xJyxgZjM3JykKK2RlZmluZShgZnAyYV8yJyxgZjM4JykgZGVmaW5lKGBmcDJhXzMnLGBmMzknKQorCitkZWZpbmUoYHJfMCcsYGY0MCcpIGRlZmluZShgcl8xJyxgZjQxJykKK2RlZmluZShgcl8yJyxgZjQyJykgZGVmaW5lKGByXzMnLGBmNDMnKQorCitkZWZpbmUoYHVfMCcsYGY0NCcpIGRlZmluZShgdV8xJyxgZjQ1JykKK2RlZmluZShgdV8yJyxgZjQ2JykgZGVmaW5lKGB1XzMnLGBmNDcnKQorCitkZWZpbmUoYHJ4JyxgZjQ4JykKK2RlZmluZShgdXgnLGBmNDknKQorZGVmaW5lKGByeScsYGY1MCcpCitkZWZpbmUoYHV5JyxgZjUxJykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9hZGRtdWxfMnMpCisJLnByb2xvZ3VlCisJLnNhdmUJYXIubGMsIHIyCisJLmJvZHkKKworaWZkZWYoYEhBVkVfQUJJXzMyJyxgCisgey5tbWk7CQlhZGRwNAlycCA9IDAsIHJwCQlDCQkJTSBJCisJCWFkZHA0CXVwID0gMCwgdXAJCUMJCQlNIEkKKwkJYWRkcDQJdnAgPSAwLCB2cAkJQwkJCU0gSQorfXsubW1pOwkJbm9wCTEKKwkJbm9wCTEKKwkJenh0NAluID0gbgkJCUMJCQlJCisJOzsKK30nKQorCisgey5tbWk7CQlsZGY4CXV4ID0gW3VwXSwgOAkJQwkJCU0KKwkJbGRmOAl2MCA9IFt2cF0sIDgJCUMJCQlNCisJCW1vdglyMiA9IGFyLmxjCQlDCQkJSTAKK317Lm1taTsJCWxkZjgJcnggPSBbcnBdLCA4CQlDCQkJTQorCQlhbmQJcjE0ID0gMywgbgkJQwkJCU0gSQorCQlhZGQJbiA9IC0yLCBuCQlDCQkJTSBJCisJOzsKK317Lm1taTsJCWxkZjgJdXkgPSBbdXBdLCA4CQlDCQkJTQorCQlsZGY4CXYxID0gW3ZwXQkJQwkJCU0KKwkJc2hyLnUJbiA9IG4sIDIJCUMJCQlJMAorfXsubW1pOwkJbGRmOAlyeSA9IFtycF0sIC04CQlDCQkJTQorCQljbXAuZXEJcDE0LCBwMCA9IDEsIHIxNAlDCQkJTSBJCisJCWNtcC5lcQlwMTEsIHAwID0gMiwgcjE0CUMJCQlNIEkKKwk7OworfXsubW1pOwkJYWRkCXNycCA9IDE2LCBycAkJQwkJCU0gSQorCQljbXAuZXEJcDE1LCBwMCA9IDMsIHIxNAlDCQkJTSBJCisJCW1vdglhci5sYyA9IG4JCUMJCQlJMAorfXsuYmJiOwkocDE0KQlici5kcHRrCUwoeDAxKQkJCUMJCQlCCisJKHAxMSkJYnIuZHB0awlMKHgxMCkJCQlDCQkJQgorCShwMTUpCWJyLmRwdGsJTCh4MTEpCQkJQwkJCUIKKwk7OworfQorTCh4MDApOgkJY21wLm5lCXA2LCBwMCA9IHIwLCByMAkJQyBzdXBwcmVzcyBpbml0aWFsIHhtYSBwYWlyCisJCW1vdglmcDJhXzMgPSBmMAorCQlicglMKGIwMCkKK0woeDAxKToJCWNtcC5uZQlwMTQsIHAwID0gcjAsIHIwCUMgc3VwcHJlc3MgaW5pdGlhbCB4bWEgcGFpcgorCQltb3YJZnAyYV8yID0gZjAKKwkJYnIJTChiMDEpCitMKHgxMCk6CQljbXAubmUJcDExLCBwMCA9IHIwLCByMAlDIHN1cHByZXNzIGluaXRpYWwgeG1hIHBhaXIKKwkJbW92CWZwMmFfMSA9IGYwCisJCWJyCUwoYjEwKQorTCh4MTEpOgkJY21wLm5lCXAxNSwgcDAgPSByMCwgcjAJQyBzdXBwcmVzcyBpbml0aWFsIHhtYSBwYWlyCisJCW1vdglmcDJhXzAgPSBmMAorCQlicglMKGIxMSkKKworRVBJTE9HVUUoKQorCitQUk9MT0dVRShtcG5fYWRkbXVsXzIpCisJLnByb2xvZ3VlCisJLnNhdmUJYXIubGMsIHIyCisJLmJvZHkKKworaWZkZWYoYEhBVkVfQUJJXzMyJyxgCisgey5tbWk7CQlhZGRwNAlycCA9IDAsIHJwCQlDCQkJTSBJCisJCWFkZHA0CXVwID0gMCwgdXAJCUMJCQlNIEkKKwkJYWRkcDQJdnAgPSAwLCB2cAkJQwkJCU0gSQorfXsubW1pOwkJbm9wCTEKKwkJbm9wCTEKKwkJenh0NAluID0gbgkJCUMJCQlJCisJOzsKK30nKQorCisgey5tbWk7CQlsZGY4CXV4ID0gW3VwXSwgOAkJQwkJCU0KKwkJbGRmOAl2MCA9IFt2cF0sIDgJCUMJCQlNCisJCW1vdglyMiA9IGFyLmxjCQlDCQkJSTAKK317Lm1taTsJCWxkZjgJcnggPSBbcnBdLCA4CQlDCQkJTQorCQlhbmQJcjE0ID0gMywgbgkJQwkJCU0gSQorCQlhZGQJbiA9IC0yLCBuCQlDCQkJTSBJCisJOzsKK317Lm1taTsJCWxkZjgJdXkgPSBbdXBdLCA4CQlDCQkJTQorCQlsZGY4CXYxID0gW3ZwXQkJQwkJCU0KKwkJc2hyLnUJbiA9IG4sIDIJCUMJCQlJMAorfXsubW1pOwkJbGRmOAlyeSA9IFtycF0sIC04CQlDCQkJTQorCQljbXAuZXEJcDE0LCBwMCA9IDEsIHIxNAlDCQkJTSBJCisJCWNtcC5lcQlwMTEsIHAwID0gMiwgcjE0CUMJCQlNIEkKKwk7OworfXsubW1pOwkJYWRkCXNycCA9IDE2LCBycAkJQwkJCU0gSQorCQljbXAuZXEJcDE1LCBwNiA9IDMsIHIxNAlDCQkJTSBJCisJCW1vdglhci5sYyA9IG4JCUMJCQlJMAorfXsuYmJiOwkocDE0KQlici5kcHRrCUwoYjAxKQkJCUMJCQlCCisJKHAxMSkJYnIuZHB0awlMKGIxMCkJCQlDCQkJQgorCShwMTUpCWJyLmRwdGsJTChiMTEpCQkJQwkJCUIKKwk7OworfQorCUFMSUdOKDMyKQorTChiMDApOgorIHsubW1pOwkJbGRmOAlyXzEgPSBbc3JwXSwgOAorCQlsZGY4CXVfMSA9IFt1cF0sIDgKKwkJbW92CWFjYzFfMiA9IDAKK317Lm1taTsJCW1vdglwcjFfMiA9IDAKKwkJbW92CXByMF8zID0gMAorCQljbXAubmUJcDgsIHA5ID0gcjAsIHIwCisJOzsKK317Lm1maTsJCWxkZjgJcl8yID0gW3NycF0sIDgKKwkJeG1hLmwJZnAwYl8zID0gdXgsIHYwLCByeAorCQljbXAubmUJcDEyLCBwMTMgPSByMCwgcjAKK317Lm1mYjsJCWxkZjgJdV8yID0gW3VwXSwgOAorCQl4bWEuaHUJZnAxYl8zID0gdXgsIHYwLCByeAorCQlici5jbG9vcC5kcHRrCUwoZ3Q0KQorfQorCQl4bWEubAlmcDBiXzAgPSB1eSwgdjAsIHJ5CisJCXhtYS5odQlmcDFhXzAgPSB1eSwgdjAsIHJ5CisJOzsKKwkJZ2V0ZnNpZwlhY2MwID0gZnAwYl8zCisJKHA2KQl4bWEuaHUJZnAyYV8zID0gdXgsIHYxLCBmcDFiXzMJCUMgc3VwcHJlc3NlZCBmb3IgYWRkbXVsXzJzCisJKHA2KQl4bWEubAlmcDFiXzMgPSB1eCwgdjEsIGZwMWJfMwkJQyBzdXBwcmVzc2VkIGZvciBhZGRtdWxfMnMKKwk7OworCQl4bWEubAlmcDBiXzEgPSB1XzEsIHYwLCByXzEKKwkJeG1hLmh1CWZwMWFfMSA9IHVfMSwgdjAsIHJfMQorCTs7CisJCWdldGZzaWcJcHIwXzAgPSBmcDBiXzAKKwkJeG1hLmwJZnAxYl8wID0gdXksIHYxLCBmcDFhXzAKKwkJeG1hLmh1CWZwMmFfMCA9IHV5LCB2MSwgZnAxYV8wCisJOzsKKwkJZ2V0ZnNpZwlwcjFfMyA9IGZwMWJfMworCQlnZXRmc2lnCWFjYzFfMyA9IGZwMmFfMworCQl4bWEubAlmcDBiXzIgPSB1XzIsIHYwLCByXzIKKwkJeG1hLmh1CWZwMWFfMiA9IHVfMiwgdjAsIHJfMgorCQlicglMKGNqNCkKKworTChndDQpOgkJeG1hLmwJZnAwYl8wID0gdXksIHYwLCByeQorCQl4bWEuaHUJZnAxYV8wID0gdXksIHYwLCByeQorCTs7CisJCWxkZjgJcl8zID0gW3NycF0sIDgKKwkJZ2V0ZnNpZwlhY2MwID0gZnAwYl8zCisJKHA2KQl4bWEuaHUJZnAyYV8zID0gdXgsIHYxLCBmcDFiXzMJCUMgc3VwcHJlc3NlZCBmb3IgYWRkbXVsXzJzCisJCWxkZjgJdV8zID0gW3VwXSwgOAorCShwNikJeG1hLmwJZnAxYl8zID0gdXgsIHYxLCBmcDFiXzMJCUMgc3VwcHJlc3NlZCBmb3IgYWRkbXVsXzJzCisJOzsKKwkJeG1hLmwJZnAwYl8xID0gdV8xLCB2MCwgcl8xCisJCXhtYS5odQlmcDFhXzEgPSB1XzEsIHYwLCByXzEKKwk7OworCQlsZGY4CXJfMCA9IFtzcnBdLCA4CisJCWdldGZzaWcJcHIwXzAgPSBmcDBiXzAKKwkJeG1hLmwJZnAxYl8wID0gdXksIHYxLCBmcDFhXzAKKwkJeG1hLmh1CWZwMmFfMCA9IHV5LCB2MSwgZnAxYV8wCisJOzsKKwkJbGRmOAl1XzAgPSBbdXBdLCA4CisJCWdldGZzaWcJcHIxXzMgPSBmcDFiXzMKKwkJeG1hLmwJZnAwYl8yID0gdV8yLCB2MCwgcl8yCisJOzsKKwkJZ2V0ZnNpZwlhY2MxXzMgPSBmcDJhXzMKKwkJeG1hLmh1CWZwMWFfMiA9IHVfMiwgdjAsIHJfMgorCQlicglMKDAwKQorCisKKwlBTElHTigzMikKK0woYjAxKToKKyB7Lm1taTsJCWxkZjgJcl8wID0gW3NycF0sIDgJCUMgTQorCQlsZGY4CXVfMCA9IFt1cF0sIDgJCUMgTQorCQltb3YJYWNjMV8xID0gMAkJQyBNIEkKK317Lm1taTsJCW1vdglwcjFfMSA9IDAJCUMgTSBJCisJCW1vdglwcjBfMiA9IDAJCUMgTSBJCisJCWNtcC5uZQlwNiwgcDcgPSByMCwgcjAJCUMgTSBJCisJOzsKK317Lm1maTsJCWxkZjgJcl8xID0gW3NycF0sIDgJCUMgTQorCQl4bWEubAlmcDBiXzIgPSB1eCwgdjAsIHJ4CUMgRgorCQljbXAubmUJcDEwLCBwMTEgPSByMCwgcjAJQyBNIEkKK317Lm1maTsJCWxkZjgJdV8xID0gW3VwXSwgOAkJQyBNCisJCXhtYS5odQlmcDFiXzIgPSB1eCwgdjAsIHJ4CUMgRgorCQlub3AJMQorCTs7Cit9CQl4bWEubAlmcDBiXzMgPSB1eSwgdjAsIHJ5CUMgRgorCQl4bWEuaHUJZnAxYV8zID0gdXksIHYwLCByeQlDIEYKKwk7OworIHsubW1mOwkJZ2V0ZnNpZwlhY2MwID0gZnAwYl8yCQlDIE0KKwkJbGRmOAlyXzIgPSBbc3JwXSwgOAkJQyBNCisJKHAxNCkJeG1hLmh1CWZwMmFfMiA9IHV4LCB2MSxmcDFiXzIJQyBGCXN1cHByZXNzZWQgZm9yIGFkZG11bF8ycworfXsubWZiOwkJbGRmOAl1XzIgPSBbdXBdLCA4CQlDIE0KKwkocDE0KQl4bWEubAlmcDFiXzIgPSB1eCwgdjEsZnAxYl8yCUMgRglzdXBwcmVzc2VkIGZvciBhZGRtdWxfMnMKKwkJYnIuY2xvb3AuZHB0awlMKGd0NSkKK30KKwkJeG1hLmwJZnAwYl8wID0gdV8wLCB2MCwgcl8wCUMgRgorCQl4bWEuaHUJZnAxYV8wID0gdV8wLCB2MCwgcl8wCUMgRgorCTs7CisJCWdldGZzaWcJcHIwXzMgPSBmcDBiXzMJCUMgTQorCQl4bWEubAlmcDFiXzMgPSB1eSwgdjEsZnAxYV8zCUMgRgorCQl4bWEuaHUJZnAyYV8zID0gdXksIHYxLGZwMWFfMwlDIEYKKwk7OworCQlnZXRmc2lnCXByMV8yID0gZnAxYl8yCQlDIE0KKwkJZ2V0ZnNpZwlhY2MxXzIgPSBmcDJhXzIJCUMgTQorCQl4bWEubAlmcDBiXzEgPSB1XzEsIHYwLCByXzEJQyBGCisJCXhtYS5odQlmcDFhXzEgPSB1XzEsIHYwLCByXzEJQyBGCisJCWJyCUwoY2o1KQorCitMKGd0NSk6CQl4bWEubAlmcDBiXzAgPSB1XzAsIHYwLCByXzAKKwkJeG1hLmh1CWZwMWFfMCA9IHVfMCwgdjAsIHJfMAorCTs7CisJCWdldGZzaWcJcHIwXzMgPSBmcDBiXzMKKwkJbGRmOAlyXzMgPSBbc3JwXSwgOAorCQl4bWEubAlmcDFiXzMgPSB1eSwgdjEsIGZwMWFfMworCQl4bWEuaHUJZnAyYV8zID0gdXksIHYxLCBmcDFhXzMKKwk7OworCQlsZGY4CXVfMyA9IFt1cF0sIDgKKwkJZ2V0ZnNpZwlwcjFfMiA9IGZwMWJfMgorCQl4bWEubAlmcDBiXzEgPSB1XzEsIHYwLCByXzEKKwk7OworCQlnZXRmc2lnCWFjYzFfMiA9IGZwMmFfMgorCQl4bWEuaHUJZnAxYV8xID0gdV8xLCB2MCwgcl8xCisJCWJyCUwoMDEpCisKKworCUFMSUdOKDMyKQorTChiMTApOgkJYnIuY2xvb3AuZHB0awlMKGd0MikKKwkJeG1hLmwJZnAwYl8xID0gdXgsIHYwLCByeAorCQl4bWEuaHUJZnAxYl8xID0gdXgsIHYwLCByeAorCTs7CisJCXhtYS5sCWZwMGJfMiA9IHV5LCB2MCwgcnkKKwkJeG1hLmh1CWZwMWFfMiA9IHV5LCB2MCwgcnkKKwk7OworCQlzdGY4CVtycF0gPSBmcDBiXzEsIDgKKwkocDExKQl4bWEuaHUJZnAyYV8xID0gdXgsIHYxLCBmcDFiXzEJCUMgc3VwcHJlc3NlZCBmb3IgYWRkbXVsXzJzCisJKHAxMSkJeG1hLmwJZnAxYl8xID0gdXgsIHYxLCBmcDFiXzEJCUMgc3VwcHJlc3NlZCBmb3IgYWRkbXVsXzJzCisJOzsKKwkJZ2V0ZnNpZwlhY2MwID0gZnAwYl8yCisJCXhtYS5sCWZwMWJfMiA9IHV5LCB2MSwgZnAxYV8yCisJCXhtYS5odQlmcDJhXzIgPSB1eSwgdjEsIGZwMWFfMgorCTs7CisJCWdldGZzaWcJcHIxXzEgPSBmcDFiXzEKKwkJZ2V0ZnNpZwlhY2MxXzEgPSBmcDJhXzEKKwkJbW92CWFyLmxjID0gcjIKKwkJZ2V0ZnNpZwlwcjFfMiA9IGZwMWJfMgorCQlnZXRmc2lnCXI4ID0gZnAyYV8yCisJOzsKKwkJYWRkCXMwID0gcHIxXzEsIGFjYzAKKwk7OworCQlzdDgJW3JwXSA9IHMwLCA4CisJCWNtcC5sdHUJcDgsIHA5ID0gczAsIHByMV8xCisJCXN1YglyMzEgPSAtMSwgYWNjMV8xCisJOzsKKwkucHJlZC5yZWwgIm11dGV4IiwgcDgsIHA5CisJKHA4KQlhZGQJYWNjMCA9IHByMV8yLCBhY2MxXzEsIDEKKwkocDkpCWFkZAlhY2MwID0gcHIxXzIsIGFjYzFfMQorCShwOCkJY21wLmxldQlwMTAsIHAwID0gcjMxLCBwcjFfMgorCShwOSkJY21wLmx0dQlwMTAsIHAwID0gcjMxLCBwcjFfMgorCTs7CisJCXN0OAlbcnBdID0gYWNjMCwgOAorCShwMTApCWFkZAlyOCA9IDEsIHI4CisJCWJyLnJldC5zcHRrLm1hbnkgYjAKKworCitMKGd0Mik6Cisgey5tbWk7CQlsZGY4CXJfMyA9IFtzcnBdLCA4CisJCWxkZjgJdV8zID0gW3VwXSwgOAorCQltb3YJYWNjMV8wID0gMAorCTs7Cit9ey5tZmk7CQlsZGY4CXJfMCA9IFtzcnBdLCA4CisJCXhtYS5sCWZwMGJfMSA9IHV4LCB2MCwgcngKKwkJbW92CXByMV8wID0gMAorfXsubWZpOwkJbGRmOAl1XzAgPSBbdXBdLCA4CisJCXhtYS5odQlmcDFiXzEgPSB1eCwgdjAsIHJ4CisJCW1vdglwcjBfMSA9IDAKKwk7OworfQkJeG1hLmwJZnAwYl8yID0gdXksIHYwLCByeQorCQl4bWEuaHUJZnAxYV8yID0gdXksIHYwLCByeQorCTs7CisJCWdldGZzaWcJYWNjMCA9IGZwMGJfMQorCQlsZGY4CXJfMSA9IFtzcnBdLCA4CisJKHAxMSkJeG1hLmh1CWZwMmFfMSA9IHV4LCB2MSwgZnAxYl8xCQlDIHN1cHByZXNzZWQgZm9yIGFkZG11bF8ycworCShwMTEpCXhtYS5sCWZwMWJfMSA9IHV4LCB2MSwgZnAxYl8xCQlDIHN1cHByZXNzZWQgZm9yIGFkZG11bF8ycworCTs7CisJCWxkZjgJdV8xID0gW3VwXSwgOAorCQl4bWEubAlmcDBiXzMgPSB1XzMsIHYwLCByXzMKKwkJeG1hLmh1CWZwMWFfMyA9IHVfMywgdjAsIHJfMworCTs7CisJCWdldGZzaWcJcHIwXzIgPSBmcDBiXzIKKwkJbGRmOAlyXzIgPSBbc3JwXSwgOAorCQl4bWEubAlmcDFiXzIgPSB1eSwgdjEsIGZwMWFfMgorCQl4bWEuaHUJZnAyYV8yID0gdXksIHYxLCBmcDFhXzIKKwk7OworCQlsZGY4CXVfMiA9IFt1cF0sIDgKKwkJZ2V0ZnNpZwlwcjFfMSA9IGZwMWJfMQorCTs7Cisgey5tZmk7CQlnZXRmc2lnCWFjYzFfMSA9IGZwMmFfMQorCQl4bWEubAlmcDBiXzAgPSB1XzAsIHYwLCByXzAKKwkJY21wLm5lCXA4LCBwOSA9IHIwLCByMAorfXsubWZiOwkJY21wLm5lCXAxMiwgcDEzID0gcjAsIHIwCisJCXhtYS5odQlmcDFhXzAgPSB1XzAsIHYwLCByXzAKKwkJYnIuY2xvb3Auc3B0ay5jbHIJTCh0b3ApCit9CisJCWJyLm1hbnkJTChlbmQpCisKKworCUFMSUdOKDMyKQorTChiMTEpOgkJbGRmOAlyXzIgPSBbc3JwXSwgOAorCQltb3YJcHIxXzMgPSAwCisJCW1vdglwcjBfMCA9IDAKKwk7OworCQlsZGY4CXVfMiA9IFt1cF0sIDgKKwkJbW92CWFjYzFfMyA9IDAKKwkJYnIuY2xvb3AuZHB0awlMKGd0MykKKwk7OworCQljbXAubmUJcDYsIHA3ID0gcjAsIHIwCisJCXhtYS5sCWZwMGJfMCA9IHV4LCB2MCwgcngKKwkJeG1hLmh1CWZwMWJfMCA9IHV4LCB2MCwgcngKKwk7OworCQljbXAubmUJcDEwLCBwMTEgPSByMCwgcjAKKwkJeG1hLmwJZnAwYl8xID0gdXksIHYwLCByeQorCQl4bWEuaHUJZnAxYV8xID0gdXksIHYwLCByeQorCTs7CisJCWdldGZzaWcJYWNjMCA9IGZwMGJfMAorCShwMTUpCXhtYS5odQlmcDJhXzAgPSB1eCwgdjEsIGZwMWJfMAkJQyBzdXBwcmVzc2VkIGZvciBhZGRtdWxfMnMKKwkocDE1KQl4bWEubAlmcDFiXzAgPSB1eCwgdjEsIGZwMWJfMAkJQyBzdXBwcmVzc2VkIGZvciBhZGRtdWxfMnMKKwk7OworCQl4bWEubAlmcDBiXzIgPSB1eSwgdjEsIHJfMgorCQl4bWEuaHUJZnAxYV8yID0gdXksIHYxLCByXzIKKwk7OworCQlnZXRmc2lnCXByMF8xID0gZnAwYl8xCisJCXhtYS5sCWZwMWJfMSA9IHVfMiwgdjAsIGZwMWFfMQorCQl4bWEuaHUJZnAyYV8xID0gdV8yLCB2MCwgZnAxYV8xCisJOzsKKwkJZ2V0ZnNpZwlwcjFfMCA9IGZwMWJfMAorCQlnZXRmc2lnCWFjYzFfMCA9IGZwMmFfMAorCQlicglMKGNqMykKKworTChndDMpOgkJbGRmOAlyXzMgPSBbc3JwXSwgOAorCQl4bWEubAlmcDBiXzAgPSB1eCwgdjAsIHJ4CisJCWNtcC5uZQlwMTAsIHAxMSA9IHIwLCByMAorCQlsZGY4CXVfMyA9IFt1cF0sIDgKKwkJeG1hLmh1CWZwMWJfMCA9IHV4LCB2MCwgcngKKwkJY21wLm5lCXA2LCBwNyA9IHIwLCByMAorCTs7CisJCXhtYS5sCWZwMGJfMSA9IHV5LCB2MCwgcnkKKwkJeG1hLmh1CWZwMWFfMSA9IHV5LCB2MCwgcnkKKwk7OworCQlnZXRmc2lnCWFjYzAgPSBmcDBiXzAKKwkJbGRmOAlyXzAgPSBbc3JwXSwgOAorCShwMTUpCXhtYS5odQlmcDJhXzAgPSB1eCwgdjEsIGZwMWJfMAkJQyBzdXBwcmVzc2VkIGZvciBhZGRtdWxfMnMKKwkJbGRmOAl1XzAgPSBbdXBdLCA4CisJKHAxNSkJeG1hLmwJZnAxYl8wID0gdXgsIHYxLCBmcDFiXzAJCUMgc3VwcHJlc3NlZCBmb3IgYWRkbXVsXzJzCisJOzsKKwkJeG1hLmwJZnAwYl8yID0gdV8yLCB2MCwgcl8yCisJCXhtYS5odQlmcDFhXzIgPSB1XzIsIHYwLCByXzIKKwk7OworCQlnZXRmc2lnCXByMF8xID0gZnAwYl8xCisJCWxkZjgJcl8xID0gW3NycF0sIDgKKwkJeG1hLmwJZnAxYl8xID0gdXksIHYxLCBmcDFhXzEKKwkJeG1hLmh1CWZwMmFfMSA9IHV5LCB2MSwgZnAxYV8xCisJOzsKKwkJbGRmOAl1XzEgPSBbdXBdLCA4CisJCWdldGZzaWcJcHIxXzAgPSBmcDFiXzAKKwk7OworCQlnZXRmc2lnCWFjYzFfMCA9IGZwMmFfMAorCQl4bWEubAlmcDBiXzMgPSB1XzMsIHYwLCByXzMKKwkJeG1hLmh1CWZwMWFfMyA9IHVfMywgdjAsIHJfMworCQlicglMKDExKQorCisKK0MgKioqIE1BSU4gTE9PUCBTVEFSVCAqKioKKwlBTElHTigzMikKK0wodG9wKToJCQkJCQlDIDAwCisJLnByZWQucmVsICJtdXRleCIsIHAxMiwgcDEzCisJCWdldGZzaWcJcHIwXzMgPSBmcDBiXzMKKwkJbGRmOAlyXzMgPSBbc3JwXSwgOAorCQl4bWEubAlmcDFiXzMgPSB1XzMsIHYxLCBmcDFhXzMKKwkocDEyKQlhZGQJczAgPSBwcjFfMCwgYWNjMCwgMQorCShwMTMpCWFkZAlzMCA9IHByMV8wLCBhY2MwCisJCXhtYS5odQlmcDJhXzMgPSB1XzMsIHYxLCBmcDFhXzMKKwk7OwkJCQkJQyAwMQorCS5wcmVkLnJlbCAibXV0ZXgiLCBwOCwgcDkKKwkucHJlZC5yZWwgIm11dGV4IiwgcDEyLCBwMTMKKwkJbGRmOAl1XzMgPSBbdXBdLCA4CisJCWdldGZzaWcJcHIxXzIgPSBmcDFiXzIKKwkocDgpCWNtcC5sZXUJcDYsIHA3ID0gYWNjMCwgcHIwXzEKKwkocDkpCWNtcC5sdHUJcDYsIHA3ID0gYWNjMCwgcHIwXzEKKwkocDEyKQljbXAubGV1CXAxMCwgcDExID0gczAsIHByMV8wCisJKHAxMykJY21wLmx0dQlwMTAsIHAxMSA9IHMwLCBwcjFfMAorCTs7CQkJCQlDIDAyCisJLnByZWQucmVsICJtdXRleCIsIHA2LCBwNworCQlnZXRmc2lnCWFjYzFfMiA9IGZwMmFfMgorCQlzdDgJW3JwXSA9IHMwLCA4CisJCXhtYS5sCWZwMGJfMSA9IHVfMSwgdjAsIHJfMQorCShwNikJYWRkCWFjYzAgPSBwcjBfMiwgYWNjMV8wLCAxCisJKHA3KQlhZGQJYWNjMCA9IHByMF8yLCBhY2MxXzAKKwkJeG1hLmh1CWZwMWFfMSA9IHVfMSwgdjAsIHJfMQorCTs7CQkJCQlDIDAzCitMKDAxKToKKwkucHJlZC5yZWwgIm11dGV4IiwgcDEwLCBwMTEKKwkJZ2V0ZnNpZwlwcjBfMCA9IGZwMGJfMAorCQlsZGY4CXJfMCA9IFtzcnBdLCA4CisJCXhtYS5sCWZwMWJfMCA9IHVfMCwgdjEsIGZwMWFfMAorCShwMTApCWFkZAlzMCA9IHByMV8xLCBhY2MwLCAxCisJKHAxMSkJYWRkCXMwID0gcHIxXzEsIGFjYzAKKwkJeG1hLmh1CWZwMmFfMCA9IHVfMCwgdjEsIGZwMWFfMAorCTs7CQkJCQlDIDA0CisJLnByZWQucmVsICJtdXRleCIsIHA2LCBwNworCS5wcmVkLnJlbCAibXV0ZXgiLCBwMTAsIHAxMQorCQlsZGY4CXVfMCA9IFt1cF0sIDgKKwkJZ2V0ZnNpZwlwcjFfMyA9IGZwMWJfMworCShwNikJY21wLmxldQlwOCwgcDkgPSBhY2MwLCBwcjBfMgorCShwNykJY21wLmx0dQlwOCwgcDkgPSBhY2MwLCBwcjBfMgorCShwMTApCWNtcC5sZXUJcDEyLCBwMTMgPSBzMCwgcHIxXzEKKwkocDExKQljbXAubHR1CXAxMiwgcDEzID0gczAsIHByMV8xCisJOzsJCQkJCUMgMDUKKwkucHJlZC5yZWwgIm11dGV4IiwgcDgsIHA5CisJCWdldGZzaWcJYWNjMV8zID0gZnAyYV8zCisJCXN0OAlbcnBdID0gczAsIDgKKwkJeG1hLmwJZnAwYl8yID0gdV8yLCB2MCwgcl8yCisJKHA4KQlhZGQJYWNjMCA9IHByMF8zLCBhY2MxXzEsIDEKKwkocDkpCWFkZAlhY2MwID0gcHIwXzMsIGFjYzFfMQorCQl4bWEuaHUJZnAxYV8yID0gdV8yLCB2MCwgcl8yCisJOzsJCQkJCUMgMDYKK0woMDApOgorCS5wcmVkLnJlbCAibXV0ZXgiLCBwMTIsIHAxMworCQlnZXRmc2lnCXByMF8xID0gZnAwYl8xCisJCWxkZjgJcl8xID0gW3NycF0sIDgKKwkJeG1hLmwJZnAxYl8xID0gdV8xLCB2MSwgZnAxYV8xCisJKHAxMikJYWRkCXMwID0gcHIxXzIsIGFjYzAsIDEKKwkocDEzKQlhZGQJczAgPSBwcjFfMiwgYWNjMAorCQl4bWEuaHUJZnAyYV8xID0gdV8xLCB2MSwgZnAxYV8xCisJOzsJCQkJCUMgMDcKKwkucHJlZC5yZWwgIm11dGV4IiwgcDgsIHA5CisJLnByZWQucmVsICJtdXRleCIsIHAxMiwgcDEzCisJCWxkZjgJdV8xID0gW3VwXSwgOAorCQlnZXRmc2lnCXByMV8wID0gZnAxYl8wCisJKHA4KQljbXAubGV1CXA2LCBwNyA9IGFjYzAsIHByMF8zCisJKHA5KQljbXAubHR1CXA2LCBwNyA9IGFjYzAsIHByMF8zCisJKHAxMikJY21wLmxldQlwMTAsIHAxMSA9IHMwLCBwcjFfMgorCShwMTMpCWNtcC5sdHUJcDEwLCBwMTEgPSBzMCwgcHIxXzIKKwk7OwkJCQkJQyAwOAorCS5wcmVkLnJlbCAibXV0ZXgiLCBwNiwgcDcKKwkJZ2V0ZnNpZwlhY2MxXzAgPSBmcDJhXzAKKwkJc3Q4CVtycF0gPSBzMCwgOAorCQl4bWEubAlmcDBiXzMgPSB1XzMsIHYwLCByXzMKKwkocDYpCWFkZAlhY2MwID0gcHIwXzAsIGFjYzFfMiwgMQorCShwNykJYWRkCWFjYzAgPSBwcjBfMCwgYWNjMV8yCisJCXhtYS5odQlmcDFhXzMgPSB1XzMsIHYwLCByXzMKKwk7OwkJCQkJQyAwOQorTCgxMSk6CisJLnByZWQucmVsICJtdXRleCIsIHAxMCwgcDExCisJCWdldGZzaWcJcHIwXzIgPSBmcDBiXzIKKwkJbGRmOAlyXzIgPSBbc3JwXSwgOAorCQl4bWEubAlmcDFiXzIgPSB1XzIsIHYxLCBmcDFhXzIKKwkocDEwKQlhZGQJczAgPSBwcjFfMywgYWNjMCwgMQorCShwMTEpCWFkZAlzMCA9IHByMV8zLCBhY2MwCisJCXhtYS5odQlmcDJhXzIgPSB1XzIsIHYxLCBmcDFhXzIKKwk7OwkJCQkJQyAxMAorCS5wcmVkLnJlbCAibXV0ZXgiLCBwNiwgcDcKKwkucHJlZC5yZWwgIm11dGV4IiwgcDEwLCBwMTEKKwkJbGRmOAl1XzIgPSBbdXBdLCA4CisJCWdldGZzaWcJcHIxXzEgPSBmcDFiXzEKKwkocDYpCWNtcC5sZXUJcDgsIHA5ID0gYWNjMCwgcHIwXzAKKwkocDcpCWNtcC5sdHUJcDgsIHA5ID0gYWNjMCwgcHIwXzAKKwkocDEwKQljbXAubGV1CXAxMiwgcDEzID0gczAsIHByMV8zCisJKHAxMSkJY21wLmx0dQlwMTIsIHAxMyA9IHMwLCBwcjFfMworCTs7CQkJCQlDIDExCisJLnByZWQucmVsICJtdXRleCIsIHA4LCBwOQorCQlnZXRmc2lnCWFjYzFfMSA9IGZwMmFfMQorCQlzdDgJW3JwXSA9IHMwLCA4CisJCXhtYS5sCWZwMGJfMCA9IHVfMCwgdjAsIHJfMAorCShwOCkJYWRkCWFjYzAgPSBwcjBfMSwgYWNjMV8zLCAxCisJKHA5KQlhZGQJYWNjMCA9IHByMF8xLCBhY2MxXzMKKwkJeG1hLmh1CWZwMWFfMCA9IHVfMCwgdjAsIHJfMAorTCgxMCk6CQlici5jbG9vcC5zcHRrLmNscglMKHRvcCkJQyAxMgorCTs7CitDICoqKiBNQUlOIExPT1AgRU5EICoqKgorTChlbmQpOgorCS5wcmVkLnJlbCAibXV0ZXgiLCBwMTIsIHAxMworIHsubWZpOwkJZ2V0ZnNpZwlwcjBfMyA9IGZwMGJfMworCQl4bWEubAlmcDFiXzMgPSB1XzMsIHYxLCBmcDFhXzMKKwkocDEyKQlhZGQJczAgPSBwcjFfMCwgYWNjMCwgMQorfXsubWZpOwkocDEzKQlhZGQJczAgPSBwcjFfMCwgYWNjMAorCQl4bWEuaHUJZnAyYV8zID0gdV8zLCB2MSwgZnAxYV8zCisJCW5vcAkxCisJOzsKK30JLnByZWQucmVsICJtdXRleCIsIHA4LCBwOQorCS5wcmVkLnJlbCAibXV0ZXgiLCBwMTIsIHAxMworIHsubW1pOwkJZ2V0ZnNpZwlwcjFfMiA9IGZwMWJfMgorCQlzdDgJW3JwXSA9IHMwLCA4CisJKHA4KQljbXAubGV1CXA2LCBwNyA9IGFjYzAsIHByMF8xCit9ey5tbWk7CShwOSkJY21wLmx0dQlwNiwgcDcgPSBhY2MwLCBwcjBfMQorCShwMTIpCWNtcC5sZXUJcDEwLCBwMTEgPSBzMCwgcHIxXzAKKwkocDEzKQljbXAubHR1CXAxMCwgcDExID0gczAsIHByMV8wCisJOzsKK30JLnByZWQucmVsICJtdXRleCIsIHA2LCBwNworIHsubWZpOwkJZ2V0ZnNpZwlhY2MxXzIgPSBmcDJhXzIKKwkJeG1hLmwJZnAwYl8xID0gdV8xLCB2MCwgcl8xCisJCW5vcAkxCit9ey5tbWY7CShwNikJYWRkCWFjYzAgPSBwcjBfMiwgYWNjMV8wLCAxCisJKHA3KQlhZGQJYWNjMCA9IHByMF8yLCBhY2MxXzAKKwkJeG1hLmh1CWZwMWFfMSA9IHVfMSwgdjAsIHJfMQorCTs7Cit9CitMKGNqNSk6CisJLnByZWQucmVsICJtdXRleCIsIHAxMCwgcDExCisgey5tZmk7CQlnZXRmc2lnCXByMF8wID0gZnAwYl8wCisJCXhtYS5sCWZwMWJfMCA9IHVfMCwgdjEsIGZwMWFfMAorCShwMTApCWFkZAlzMCA9IHByMV8xLCBhY2MwLCAxCit9ey5tZmk7CShwMTEpCWFkZAlzMCA9IHByMV8xLCBhY2MwCisJCXhtYS5odQlmcDJhXzAgPSB1XzAsIHYxLCBmcDFhXzAKKwkJbm9wCTEKKwk7OworfQkucHJlZC5yZWwgIm11dGV4IiwgcDYsIHA3CisJLnByZWQucmVsICJtdXRleCIsIHAxMCwgcDExCisgey5tbWk7CQlnZXRmc2lnCXByMV8zID0gZnAxYl8zCisJc3Q4CVtycF0gPSBzMCwgOAorCShwNikJY21wLmxldQlwOCwgcDkgPSBhY2MwLCBwcjBfMgorfXsubW1pOwkocDcpCWNtcC5sdHUJcDgsIHA5ID0gYWNjMCwgcHIwXzIKKwkocDEwKQljbXAubGV1CXAxMiwgcDEzID0gczAsIHByMV8xCisJKHAxMSkJY21wLmx0dQlwMTIsIHAxMyA9IHMwLCBwcjFfMQorCTs7Cit9CS5wcmVkLnJlbCAibXV0ZXgiLCBwOCwgcDkKKyB7Lm1maTsJCWdldGZzaWcJYWNjMV8zID0gZnAyYV8zCisJCXhtYS5sCWZwMGJfMiA9IHVfMiwgdjAsIHJfMgorCQlub3AJMQorfXsubW1mOwkocDgpCWFkZAlhY2MwID0gcHIwXzMsIGFjYzFfMSwgMQorCShwOSkJYWRkCWFjYzAgPSBwcjBfMywgYWNjMV8xCisJCXhtYS5odQlmcDFhXzIgPSB1XzIsIHYwLCByXzIKKwk7OworfQorTChjajQpOgorCS5wcmVkLnJlbCAibXV0ZXgiLCBwMTIsIHAxMworIHsubWZpOwkJZ2V0ZnNpZwlwcjBfMSA9IGZwMGJfMQorCQl4bWEubAlmcDFiXzEgPSB1XzEsIHYxLCBmcDFhXzEKKwkocDEyKQlhZGQJczAgPSBwcjFfMiwgYWNjMCwgMQorfXsubWZpOwkocDEzKQlhZGQJczAgPSBwcjFfMiwgYWNjMAorCQl4bWEuaHUJZnAyYV8xID0gdV8xLCB2MSwgZnAxYV8xCisJCW5vcAkxCisJOzsKK30JLnByZWQucmVsICJtdXRleCIsIHA4LCBwOQorCS5wcmVkLnJlbCAibXV0ZXgiLCBwMTIsIHAxMworIHsubW1pOwkJZ2V0ZnNpZwlwcjFfMCA9IGZwMWJfMAorCQlzdDgJW3JwXSA9IHMwLCA4CisJKHA4KQljbXAubGV1CXA2LCBwNyA9IGFjYzAsIHByMF8zCit9ey5tbWk7CShwOSkJY21wLmx0dQlwNiwgcDcgPSBhY2MwLCBwcjBfMworCShwMTIpCWNtcC5sZXUJcDEwLCBwMTEgPSBzMCwgcHIxXzIKKwkocDEzKQljbXAubHR1CXAxMCwgcDExID0gczAsIHByMV8yCisJOzsKK30JLnByZWQucmVsICJtdXRleCIsIHA2LCBwNworIHsubW1pOwkJZ2V0ZnNpZwlhY2MxXzAgPSBmcDJhXzAKKwkocDYpCWFkZAlhY2MwID0gcHIwXzAsIGFjYzFfMiwgMQorCShwNykJYWRkCWFjYzAgPSBwcjBfMCwgYWNjMV8yCisJOzsKK30KK0woY2ozKToKKwkucHJlZC5yZWwgIm11dGV4IiwgcDEwLCBwMTEKKyB7Lm1maTsJCWdldGZzaWcJcHIwXzIgPSBmcDBiXzIKKwkJeG1hLmwJZnAxYl8yID0gdV8yLCB2MSwgZnAxYV8yCisJKHAxMCkJYWRkCXMwID0gcHIxXzMsIGFjYzAsIDEKK317Lm1maTsJKHAxMSkJYWRkCXMwID0gcHIxXzMsIGFjYzAKKwkJeG1hLmh1CWZwMmFfMiA9IHVfMiwgdjEsIGZwMWFfMgorCQlub3AJMQorCTs7Cit9CS5wcmVkLnJlbCAibXV0ZXgiLCBwNiwgcDcKKwkucHJlZC5yZWwgIm11dGV4IiwgcDEwLCBwMTEKKyB7Lm1taTsJCWdldGZzaWcJcHIxXzEgPSBmcDFiXzEKKwkJc3Q4CVtycF0gPSBzMCwgOAorCShwNikJY21wLmxldQlwOCwgcDkgPSBhY2MwLCBwcjBfMAorfXsubW1pOwkocDcpCWNtcC5sdHUJcDgsIHA5ID0gYWNjMCwgcHIwXzAKKwkocDEwKQljbXAubGV1CXAxMiwgcDEzID0gczAsIHByMV8zCisJKHAxMSkJY21wLmx0dQlwMTIsIHAxMyA9IHMwLCBwcjFfMworCTs7Cit9CS5wcmVkLnJlbCAibXV0ZXgiLCBwOCwgcDkKKyB7Lm1taTsJCWdldGZzaWcJYWNjMV8xID0gZnAyYV8xCisJKHA4KQlhZGQJYWNjMCA9IHByMF8xLCBhY2MxXzMsIDEKKwkocDkpCWFkZAlhY2MwID0gcHIwXzEsIGFjYzFfMworCTs7Cit9CS5wcmVkLnJlbCAibXV0ZXgiLCBwMTIsIHAxMworIHsubW1pOwkocDEyKQlhZGQJczAgPSBwcjFfMCwgYWNjMCwgMQorCShwMTMpCWFkZAlzMCA9IHByMV8wLCBhY2MwCisJCW5vcAkxCisJOzsKK30JLnByZWQucmVsICJtdXRleCIsIHA4LCBwOQorCS5wcmVkLnJlbCAibXV0ZXgiLCBwMTIsIHAxMworIHsubW1pOwkJZ2V0ZnNpZwlwcjFfMiA9IGZwMWJfMgorCQlzdDgJW3JwXSA9IHMwLCA4CisJKHA4KQljbXAubGV1CXA2LCBwNyA9IGFjYzAsIHByMF8xCit9ey5tbWk7CShwOSkJY21wLmx0dQlwNiwgcDcgPSBhY2MwLCBwcjBfMQorCShwMTIpCWNtcC5sZXUJcDEwLCBwMTEgPSBzMCwgcHIxXzAKKwkocDEzKQljbXAubHR1CXAxMCwgcDExID0gczAsIHByMV8wCisJOzsKK30JLnByZWQucmVsICJtdXRleCIsIHA2LCBwNworIHsubW1pOwkJZ2V0ZnNpZwlyOCA9IGZwMmFfMgorCShwNikJYWRkCWFjYzAgPSBwcjBfMiwgYWNjMV8wLCAxCisJKHA3KQlhZGQJYWNjMCA9IHByMF8yLCBhY2MxXzAKKwk7OworfQkucHJlZC5yZWwgIm11dGV4IiwgcDEwLCBwMTEKKyB7Lm1taTsJKHAxMCkJYWRkCXMwID0gcHIxXzEsIGFjYzAsIDEKKwkocDExKQlhZGQJczAgPSBwcjFfMSwgYWNjMAorCShwNikJY21wLmxldQlwOCwgcDkgPSBhY2MwLCBwcjBfMgorCTs7Cit9CS5wcmVkLnJlbCAibXV0ZXgiLCBwMTAsIHAxMQorIHsubW1pOwkocDcpCWNtcC5sdHUJcDgsIHA5ID0gYWNjMCwgcHIwXzIKKwkocDEwKQljbXAubGV1CXAxMiwgcDEzID0gczAsIHByMV8xCisJKHAxMSkJY21wLmx0dQlwMTIsIHAxMyA9IHMwLCBwcjFfMQorCTs7Cit9CS5wcmVkLnJlbCAibXV0ZXgiLCBwOCwgcDkKKyB7Lm1taTsJCXN0OAlbcnBdID0gczAsIDgKKwkocDgpCWFkZAlhY2MwID0gcHIxXzIsIGFjYzFfMSwgMQorCShwOSkJYWRkCWFjYzAgPSBwcjFfMiwgYWNjMV8xCisJOzsKK30JLnByZWQucmVsICJtdXRleCIsIHA4LCBwOQorIHsubW1pOwkocDgpCWNtcC5sZXUJcDEwLCBwMTEgPSBhY2MwLCBwcjFfMgorCShwOSkJY21wLmx0dQlwMTAsIHAxMSA9IGFjYzAsIHByMV8yCisJKHAxMikJYWRkCWFjYzAgPSAxLCBhY2MwCisJOzsKK317Lm1taTsJCXN0OAlbcnBdID0gYWNjMCwgOAorCShwMTIpCWNtcGVxb3IJcDEwLCBwMCA9IDAsIGFjYzAKKwkJbm9wCTEKKwk7OworfXsubWliOwkocDEwKQlhZGQJcjggPSAxLCByOAorCQltb3YJYXIubGMgPSByMgorCQlici5yZXQuc3B0ay5tYW55IGIwCit9CitFUElMT0dVRSgpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vaWE2NC9hb3JzX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9pYTY0L2FvcnNfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcwNWNlNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vaWE2NC9hb3JzX24uYXNtCkBAIC0wLDAgKzEsODUyIEBACitkbmwgIElBLTY0IG1wbl9hZGRfbi9tcG5fc3ViX24gLS0gbXBuIGFkZGl0aW9uIGFuZCBzdWJ0cmFjdGlvbi4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDMtMjAwNSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgICBjeWNsZXMvbGltYgorQyBJdGFuaXVtOiAgICAgIDIuNjcKK0MgSXRhbml1bSAyOiAgICAxLjI1CisKK0MgVE9ETworQyAgKiBDb25zaWRlciB1c2luZyBzcGVjaWFsIGNvZGUgZm9yIHNtYWxsIG4sIHVzaW5nIHNvbWV0aGluZyBsaWtlCitDICAgICJzd2l0Y2ggKDggKiAobiA+PSA4KSArIChuIG1vZCA4KSkiIHRvIGVudGVyIGl0IGFuZCBmZWVkLWluIGNvZGUuCitDICAqIFRoZSBub24tbmMgY29kZSB3YXMgdHJpbW1lZCBjeWNsZSBmb3IgY3ljbGUgdG8gaXRzIGN1cnJlbnQgc3RhdGUuICBJdCBpcworQyAgICBwcm9iYWJseSBoYXJkIHRvIHNhdmUgbW9yZSB0aGF0IGFuIG9kZCBjeWNsZSB0aGVyZS4gIFRoZSBuYyBjb2RlIGlzIG11Y2gKK0MgICAgY3J1ZGVyIChzaW5jZSB0dW5lL3NwZWVkIGRvZXNuJ3QgaGF2ZSBhbnkgYXBwbGljYWJsZSBkaXJlY3QgbWVhc3VyZW1lbnRzKS4KK0MgICogV2l0aG91dCB0aGUgbmMgZW50cnkgcG9pbnRzLCB0aGlzIGJlY29tZXMgYXJvdW5kIDE4MDAgYnl0ZXMgb2Ygb2JqZWN0CitDICAgIGNvZGU7IHRoZSBuYyBjb2RlIGFkZHMgb3ZlciAxMDAwIGJ5dGVzLiAgV2Ugc2hvdWxkIHBlcmhhcHMgc2FjcmlmaWNlIGEKK0MgICAgZmV3IGN5Y2xlcyBmb3IgdGhlIG5vbi1uYyBjb2RlIGFuZCBsZXQgaXQgZmFsbCBpbnRvIHRoZSBuYyBjb2RlLgorCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLCBgcjMyJykKK2RlZmluZShgdXAnLCBgcjMzJykKK2RlZmluZShgdnAnLCBgcjM0JykKK2RlZmluZShgbicsICBgcjM1JykKK2RlZmluZShgY3knLCBgcjM2JykKKworaWZkZWYoYE9QRVJBVElPTl9hZGRfbicsYAorICBkZWZpbmUoQUREU1VCLAlhZGQpCisgIGRlZmluZShDTkQsCQlsdHUpCisgIGRlZmluZShJTkNSLAkJMSkKKyAgZGVmaW5lKExJTSwJCS0xKQorICBkZWZpbmUoTElNMiwJCTApCisgIGRlZmluZShmdW5jLCAgICBtcG5fYWRkX24pCisgIGRlZmluZShmdW5jX25jLCBtcG5fYWRkX25jKQorJykKK2lmZGVmKGBPUEVSQVRJT05fc3ViX24nLGAKKyAgZGVmaW5lKEFERFNVQiwJc3ViKQorICBkZWZpbmUoQ05ELAkJZ3R1KQorICBkZWZpbmUoSU5DUiwJCS0xKQorICBkZWZpbmUoTElNLAkJMCkKKyAgZGVmaW5lKExJTTIsCQktMSkKKyAgZGVmaW5lKGZ1bmMsICAgIG1wbl9zdWJfbikKKyAgZGVmaW5lKGZ1bmNfbmMsIG1wbl9zdWJfbmMpCisnKQorCitkZWZpbmUoUEZESVNULCA1MDApCisKK0MgU29tZSB1c2VmdWwgYWxpYXNlcyBmb3IgcmVnaXN0ZXJzIHdlIHVzZQorZGVmaW5lKGB1MCcsYHIxNCcpIGRlZmluZShgdTEnLGByMTUnKSBkZWZpbmUoYHUyJyxgcjE2JykgZGVmaW5lKGB1MycsYHIxNycpCitkZWZpbmUoYHYwJyxgcjI0JykgZGVmaW5lKGB2MScsYHIyNScpIGRlZmluZShgdjInLGByMjYnKSBkZWZpbmUoYHYzJyxgcjI3JykKK2RlZmluZShgdzAnLGByMjgnKSBkZWZpbmUoYHcxJyxgcjI5JykgZGVmaW5lKGB3MicsYHIzMCcpIGRlZmluZShgdzMnLGByMzEnKQorZGVmaW5lKGBycHgnLGByMycpCitkZWZpbmUoYHVwYWR2JyxgcjIwJykgZGVmaW5lKGB2cGFkdicsYHIyMScpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FkZF9uIG1wbl9hZGRfbmMgbXBuX3N1Yl9uIG1wbl9zdWJfbmMpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShmdW5jX25jKQorCS5wcm9sb2d1ZQorCS5zYXZlCWFyLmxjLCByMgorCS5ib2R5CitpZmRlZihgSEFWRV9BQklfMzInLGAKKwkJYWRkcDQJcnAgPSAwLCBycAkJQwkJCU0gSQorCQlhZGRwNAl1cCA9IDAsIHVwCQlDCQkJTSBJCisJCW5vcC5pCTAKKwkJYWRkcDQJdnAgPSAwLCB2cAkJQwkJCU0gSQorCQlub3AubQkwCisJCXp4dDQJbiA9IG4JCQlDCQkJSQorCTs7CisnKQorCisgey5tbWk7CQlsZDgJcjExID0gW3ZwXSwgOAkJQwkJCU0wMQorCQlsZDgJcjEwID0gW3VwXSwgOAkJQwkJCU0wMQorCQltb3YJcjIgPSBhci5sYwkJQwkJCUkwCit9ey5tbWk7CQlhbmQJcjE0ID0gNywgbgkJQwkJCU0gSQorCQljbXAubHQJcDE1LCBwMTQgPSA4LCBuCQlDCQkJTSBJCisJCWFkZAluID0gLTYsIG4JCUMJCQlNIEkKKwk7OworfXsubW1pOwkJYWRkCXVwYWR2ID0gUEZESVNULCB1cAlDIE1lcmdpbmcgdGhlc2UgbGluZXMgaW50byB0aGUgZmVlZC1pbgorCQlhZGQJdnBhZHYgPSBQRkRJU1QsIHZwCUMgY29kZSBjb3VsZCBzYXZlIGEgY3ljbGUgcGVyIGNhbGwgYXQKKwkJbW92CXIyMyA9IGN5CQlDIHRoZSBleHBlbnNlIG9mIGNvZGUgc2l6ZS4KKwk7OworfXsubW1pOwkJY21wLmVxCXA2LCBwMCA9IDEsIHIxNAkJQwkJCU0gSQorCQljbXAuZXEJcDcsIHAwID0gMiwgcjE0CQlDCQkJTSBJCisJCWNtcC5lcQlwOCwgcDAgPSAzLCByMTQJCUMJCQlNIEkKK317LmJiYjsJKHA2KQlici5kcHRrCS5MYzAwMQkJCUMJCQlCCisJKHA3KQlici5kcHRrCS5MYzAxMAkJCUMJCQlCCisJKHA4KQlici5kcHRrCS5MYzAxMQkJCUMJCQlCCisJOzsKK317Lm1taTsJCWNtcC5lcQlwOSwgcDAgPSA0LCByMTQJCUMJCQlNIEkKKwkJY21wLmVxCXAxMCwgcDAgPSA1LCByMTQJQwkJCU0gSQorCQljbXAuZXEJcDExLCBwMCA9IDYsIHIxNAlDCQkJTSBJCit9ey5iYmI7CShwOSkJYnIuZHB0awkuTGMxMDAJCQlDCQkJQgorCShwMTApCWJyLmRwdGsJLkxjMTAxCQkJQwkJCUIKKwkocDExKQlici5kcHRrCS5MYzExMAkJCUMJCQlCCisJOzsKK317Lm1taTsJCWxkOAlyMTkgPSBbdnBdLCA4CQlDCQkJTTAxCisJCWxkOAlyMTggPSBbdXBdLCA4CQlDCQkJTTAxCisJCWNtcC5uZQlwMTMsIHAwID0gMCwgY3kJCUMgY29weSBjeSB0byBwMTMJTSBJCit9ey5tbWI7CQljbXAuZXEJcDEyLCBwMCA9IDcsIHIxNAlDCQkJTSBJCisJCW5vcAkwCisJKHAxMikJYnIuZHB0awkuTGMxMTEJCQlDCQkJQgorCTs7Cit9CisKKy5MYzAwMDoKKyB7Lm1taTsJCWxkOAl2MyA9IFt2cF0sIDgJCUMJCQlNMDEKKwkJbGQ4CXUzID0gW3VwXSwgOAkJQwkJCU0wMQorCQlzaHIudQluID0gbiwgMwkJQwkJCUkwCisJOzsKK317Lm1taTsJCWFkZAl2cGFkdiA9IFBGRElTVCwgdnAJQwkJCU0gSQorCQlsZDgJdjAgPSBbdnBdLCA4CQlDCQkJTTAxCisJCW1vdglhci5sYyA9IG4JCUMJCQlJMAorfXsubW1pOwkJbGQ4CXUwID0gW3VwXSwgOAkJQwkJCU0wMQorCQlBRERTVUIJdzEgPSByMTAsIHIxMQkJQwkJCU0gSQorCQlub3AJMAorCTs7Cit9ey5tbWk7CQlhZGQJdXBhZHYgPSBQRkRJU1QsIHVwCUMJCQlNIEkKKwkJbGQ4CXYxID0gW3ZwXSwgOAkJQwkJCU0wMQorCQljbXAuQ05ECXA3LCBwMCA9IHcxLCByMTAJQwkJCU0gSQorfXsubW1pOwkJbGQ4CXUxID0gW3VwXSwgOAkJQwkJCU0wMQorCQlBRERTVUIJdzIgPSByMTgsIHIxOQkJQwkJCU0gSQorCQlhZGQJcnB4ID0gOCwgcnAJCUMJCQlNIEkKKwk7OworfXsubW1pOwkJbGQ4CXYyID0gW3ZwXSwgOAkJQwkJCU0wMQorCQljbXAuQ05ECXA4LCBwMCA9IHcyLCByMTgJQwkJCU0gSQorCShwMTMpCWNtcGVxb3IJcDcsIHAwID0gTElNLCB3MQlDCQkJTSBJCit9ey5tbWk7CQlsZDgJdTIgPSBbdXBdLCA4CQlDCQkJTTAxCisJKHAxMykJYWRkCXcxID0gSU5DUiwgdzEJCUMJCQlNIEkKKwkJQUREU1VCCXczID0gdTMsIHYzCQlDCQkJTSBJCisJOzsKK317Lm1taTsJCWxkOAl2MyA9IFt2cF0sIDgJCUMJCQlNMDEKKwkJY21wLkNORAlwOSwgcDAgPSB3MywgdTMJCUMJCQlNIEkKKwkocDcpCWNtcGVxb3IJcDgsIHAwID0gTElNLCB3MglDCQkJTSBJCit9ey5tbWI7CQlsZDgJdTMgPSBbdXBdLCA4CQlDCQkJTTAxCisJKHA3KQlhZGQJdzIgPSBJTkNSLCB3MgkJQwkJCU0gSQorCQlicglMKG0wKQorfQorCisuTGMwMDE6Cisgey5tbWk7CShwMTUpCWxkOAl2MSA9IFt2cF0sIDgJCUMJCQlNMDEKKwkocDE1KQlsZDgJdTEgPSBbdXBdLCA4CQlDCQkJTTAxCisJCUFERFNVQgl3MCA9IHIxMCwgcjExCQlDCQkJTSBJCit9ey5tbWI7CQlub3AJMAorCQlub3AJMAorCShwMTUpCWJyCUwoMCkKKwk7OworfXsubW1pOwkJY21wLm5lCXA5LCBwMCA9IDAsIHIyMwkJQwkJCU0gSQorCQltb3YJcjggPSAwCisJCWNtcC5DTkQJcDYsIHAwID0gdzAsIHIxMAlDCQkJTSBJCisJOzsKK317Lm1tYjsJKHA5KQljbXBlcW9yCXA2LCBwMCA9IExJTSwgdzAJQwkJCU0gSQorCShwOSkJYWRkCXcwID0gSU5DUiwgdzAJCUMJCQlNIEkKKwkJYnIJTChjajEpCQkJQwkJCUIKK30KK0woMCk6Cisgey5tbWk7CQlsZDgJdjIgPSBbdnBdLCA4CQlDCQkJTTAxCisJCWxkOAl1MiA9IFt1cF0sIDgJCUMJCQlNMDEKKwkJc2hyLnUJbiA9IG4sIDMJCUMJCQlJMAorCTs7Cit9ey5tbWk7CQlsZDgJdjMgPSBbdnBdLCA4CQlDCQkJTTAxCisJCWxkOAl1MyA9IFt1cF0sIDgJCUMJCQlNMDEKKwkJbW92CWFyLmxjID0gbgkJQwkJCUkwCit9ey5tbWk7CQlub3AJMAorCQljbXAubmUJcDksIHAwID0gMCwgcjIzCQlDCQkJTSBJCisJCW5vcAkwCisJOzsKK317Lm1taTsJCWxkOAl2MCA9IFt2cF0sIDgJCUMJCQlNMDEKKwkJY21wLkNORAlwNiwgcDAgPSB3MCwgcjEwCUMJCQlNIEkKKwkJYWRkCXJweCA9IDE2LCBycAkJQwkJCU0gSQorfXsubW1iOwkJbGQ4CXUwID0gW3VwXSwgOAkJQwkJCU0wMQorCQlBRERTVUIJdzEgPSB1MSwgdjEJCUMJCQlNIEkKKwkJYnIJTChjMSkJCQlDCQkJQgorfQorCisuTGMwMTA6Cisgey5tbWk7CQlsZDgJdjAgPSBbdnBdLCA4CQlDCQkJTTAxCisJCWxkOAl1MCA9IFt1cF0sIDgJCUMJCQlNMDEKKwkJbW92CXI4ID0gMAkJCUMJCQlNIEkKK317Lm1tYjsJCUFERFNVQgl3MyA9IHIxMCwgcjExCQlDCQkJTSBJCisJCWNtcC5uZQlwOCwgcDAgPSAwLCByMjMJCUMJCQlNIEkKKwkocDE1KQlicglMKDEpCQkJQwkJCUIKKwk7OworfXsubW1pOwkJY21wLkNORAlwOSwgcDAgPSB3MywgcjEwCUMJCQlNIEkKKwkJQUREU1VCCXcwID0gdTAsIHYwCQlDCQkJTSBJCisJKHA4KQlhZGQJdzMgPSBJTkNSLCB3MwkJQwkJCU0gSQorCTs7Cit9ey5tbWI7CQljbXAuQ05ECXA2LCBwMCA9IHcwLCB1MAkJQwkJCU0gSQorCShwOCkJY21wZXFvcglwOSwgcDAgPSBMSU0yLCB3MwlDCQkJTSBJCisJCWJyCUwoY2oyKQkJCUMJCQlCCit9CitMKDEpOgorIHsubW1pOwkJbGQ4CXYxID0gW3ZwXSwgOAkJQwkJCU0wMQorCQlsZDgJdTEgPSBbdXBdLCA4CQlDCQkJTTAxCisJCXNoci51CW4gPSBuLCAzCQlDCQkJSTAKKwk7OworfXsubW1pOwkJbGQ4CXYyID0gW3ZwXSwgOAkJQwkJCU0wMQorCQlsZDgJdTIgPSBbdXBdLCA4CQlDCQkJTTAxCisJCW1vdglhci5sYyA9IG4JCUMJCQlJMAorCTs7Cit9ey5tbWk7CQlsZDgJdjMgPSBbdnBdLCA4CQlDCQkJTTAxCisJCWxkOAl1MyA9IFt1cF0sIDgJCUMJCQlNMDEKKwkJY21wLkNORAlwOSwgcDAgPSB3MywgcjEwCUMJCQlNIEkKKwk7OworfXsubW1pOwkocDgpCWNtcGVxb3IJcDksIHAwID0gTElNLCB3MwlDCQkJTSBJCisJKHA4KQlhZGQJdzMgPSBJTkNSLCB3MwkJQwkJCU0gSQorCQlBRERTVUIJdzAgPSB1MCwgdjAJCUMJCQlNIEkKK317Lm1tYjsJCWFkZAlycHggPSAyNCwgcnAJCUMJCQlNIEkKKwkJbm9wCTAKKwkJYnIJTChtMjMpCQkJQwkJCUIKK30KKworLkxjMDExOgorIHsubW1pOwkJbGQ4CXYzID0gW3ZwXSwgOAkJQwkJCU0wMQorCQlsZDgJdTMgPSBbdXBdLCA4CQlDCQkJTTAxCisJCXNoci51CW4gPSBuLCAzCQlDCQkJSTAKK317Lm1taTsJCUFERFNVQgl3MiA9IHIxMCwgcjExCQlDCQkJTSBJCisJCWNtcC5uZQlwNywgcDAgPSAwLCByMjMJCUMJCQlNIEkKKwkJbm9wCTAKKwk7OworfXsubW1iOwkJbGQ4CXYwID0gW3ZwXSwgOAkJQwkJCU0wMQorCQlsZDgJdTAgPSBbdXBdLCA4CQlDCQkJTTAxCisJKHAxNSkJYnIJTCgyKQkJCUMJCQlCCit9ey5tbWk7CQljbXAuQ05ECXA4LCBwMCA9IHcyLCByMTAJQwkJCU0gSQorCQlBRERTVUIJdzMgPSB1MywgdjMJCUMJCQlNIEkKKwkJbm9wCTAKKwk7OworfXsubW1iOwkocDcpCWNtcGVxb3IJcDgsIHAwID0gTElNLCB3MglDCQkJTSBJCisJKHA3KQlhZGQJdzIgPSBJTkNSLCB3MgkJQwkJCU0gSQorCQlicglMKGNqMykJCQlDCQkJQgorfQorTCgyKToKKyB7Lm1taTsJCWxkOAl2MSA9IFt2cF0sIDgJCUMJCQlNMDEKKwkJbGQ4CXUxID0gW3VwXSwgOAkJQwkJCU0wMQorCQlBRERTVUIJdzMgPSB1MywgdjMJCUMJCQlNIEkKKwk7OworfXsubW1pOwkJbGQ4CXYyID0gW3ZwXSwgOAkJQwkJCU0wMQorCQlsZDgJdTIgPSBbdXBdLCA4CQlDCQkJTTAxCisJCWNtcC5DTkQJcDgsIHAwID0gdzIsIHIxMAlDCQkJTSBJCisJOzsKK317Lm1taTsJCWxkOAl2MyA9IFt2cF0sIDgJCUMJCQlNMDEKKwkJY21wLkNORAlwOSwgcDAgPSB3MywgdTMJCUMJCQlNIEkKKwkJbW92CWFyLmxjID0gbgkJQwkJCUkwCit9ey5tbWk7CQlsZDgJdTMgPSBbdXBdLCA4CQlDCQkJTTAxCisJKHA3KQljbXBlcW9yCXA4LCBwMCA9IExJTSwgdzIJQwkJCU0gSQorCShwNykJYWRkCXcyID0gSU5DUiwgdzIJCUMJCQlNIEkKKwk7OworfXsubW1pOwkJYWRkCXJweCA9IDMyLCBycAkJQwkJCU0gSQorCQlzdDgJW3JwXSA9IHcyLCA4CQlDCQkJTTIzCisJKHA4KQljbXBlcW9yCXA5LCBwMCA9IExJTSwgdzMJQwkJCU0gSQorfXsubW1iOwkocDgpCWFkZAl3MyA9IElOQ1IsIHczCQlDCQkJTSBJCisJCUFERFNVQgl3MCA9IHUwLCB2MAkJQwkJCU0gSQorCQlicglMKG0yMykKK30KKworLkxjMTAwOgorIHsubW1pOwkJbGQ4CXYyID0gW3ZwXSwgOAkJQwkJCU0wMQorCQlsZDgJdTIgPSBbdXBdLCA4CQlDCQkJTTAxCisJCXNoci51CW4gPSBuLCAzCQlDCQkJSTAKK317Lm1taTsJCUFERFNVQgl3MSA9IHIxMCwgcjExCQlDCQkJTSBJCisJCW5vcAkwCisJCW5vcAkwCisJOzsKK317Lm1taTsJCWxkOAl2MyA9IFt2cF0sIDgJCUMJCQlNMDEKKwkJbGQ4CXUzID0gW3VwXSwgOAkJQwkJCU0wMQorCQlhZGQJcnB4ID0gOCwgcnAJCUMJCQlNIEkKK317Lm1taTsJCWNtcC5uZQlwNiwgcDAgPSAwLCByMjMJCUMJCQlNIEkKKwkJY21wLkNORAlwNywgcDAgPSB3MSwgcjEwCUMJCQlNIEkKKwkJbm9wCTAKKwk7OworfXsubW1pOwkJbGQ4CXYwID0gW3ZwXSwgOAkJQwkJCU0wMQorCQlsZDgJdTAgPSBbdXBdLCA4CQlDCQkJTTAxCisJCUFERFNVQgl3MiA9IHUyLCB2MgkJQwkJCU0gSQorfXsubW1iOwkocDYpCWNtcGVxb3IJcDcsIHAwID0gTElNLCB3MQlDCQkJTSBJCisJKHA2KQlhZGQJdzEgPSBJTkNSLCB3MQkJQwkJCU0gSQorCShwMTQpCWJyCUwoY2o0KQorCTs7Cit9ey5tbWk7CQlsZDgJdjEgPSBbdnBdLCA4CQlDCQkJTTAxCisJCWxkOAl1MSA9IFt1cF0sIDgJCUMJCQlNMDEKKwkJbW92CWFyLmxjID0gbgkJQwkJCUkwCisJOzsKK317Lm1taTsJCWxkOAl2MiA9IFt2cF0sIDgJCUMJCQlNMDEKKwkJY21wLkNORAlwOCwgcDAgPSB3MiwgdTIJCUMJCQlNIEkKKwkJbm9wCTAKK317Lm1taTsJCWxkOAl1MiA9IFt1cF0sIDgJCUMJCQlNMDEKKwkJbm9wCTAKKwkJQUREU1VCCXczID0gdTMsIHYzCQlDCQkJTSBJCisJOzsKK317Lm1taTsJCWxkOAl2MyA9IFt2cF0sIDgJCUMJCQlNMDEKKwkJY21wLkNORAlwOSwgcDAgPSB3MywgdTMJCUMJCQlNIEkKKwkocDcpCWNtcGVxb3IJcDgsIHAwID0gTElNLCB3MglDCQkJTSBJCit9ey5tbWI7CQlsZDgJdTMgPSBbdXBdLCA4CQlDCQkJTTAxCisJKHA3KQlhZGQJdzIgPSBJTkNSLCB3MgkJQwkJCU0gSQorCQlicglMKG00KQorfQorCisuTGMxMDE6Cisgey5tbWk7CQlsZDgJdjEgPSBbdnBdLCA4CQlDCQkJTTAxCisJCWxkOAl1MSA9IFt1cF0sIDgJCUMJCQlNMDEKKwkJc2hyLnUJbiA9IG4sIDMJCUMJCQlJMAorCTs7Cit9ey5tbWk7CQlsZDgJdjIgPSBbdnBdLCA4CQlDCQkJTTAxCisJCWxkOAl1MiA9IFt1cF0sIDgJCUMJCQlNMDEKKwkJbW92CWFyLmxjID0gbgkJQwkJCUkwCisJOzsKK317Lm1taTsJCWxkOAl2MyA9IFt2cF0sIDgJCUMJCQlNMDEKKwkJbGQ4CXUzID0gW3VwXSwgOAkJQwkJCU0wMQorCQlBRERTVUIJdzAgPSByMTAsIHIxMQkJQwkJCU0gSQorfXsubW1pOwkJY21wLm5lCXA5LCBwMCA9IDAsIHIyMwkJQwkJCU0gSQorCQlhZGQJcnB4ID0gMTYsIHJwCQlDCQkJTSBJCisJCW5vcAkwCisJOzsKK317Lm1taTsJCWxkOAl2MCA9IFt2cF0sIDgJCUMJCQlNMDEKKwkJbGQ4CXUwID0gW3VwXSwgOAkJQwkJCU0wMQorCQljbXAuQ05ECXA2LCBwMCA9IHcwLCByMTAJQwkJCU0gSQorfXsubWJiOwkJQUREU1VCCXcxID0gdTEsIHYxCQlDCQkJTSBJCisJKHAxNSkJYnIJTChjNSkJCQlDCQkJQgorCQlicglMKGVuZCkJCQlDCQkJQgorfQorCisuTGMxMTA6Cisgey5tbWk7CQlsZDgJdjAgPSBbdnBdLCA4CQlDCQkJTTAxCisJCWxkOAl1MCA9IFt1cF0sIDgJCUMJCQlNMDEKKwkJc2hyLnUJbiA9IG4sIDMJCUMJCQlJMAorCTs7Cit9ey5tbWk7CQlhZGQJdXBhZHYgPSBQRkRJU1QsIHVwCUMJCQlNIEkKKwkJYWRkCXZwYWR2ID0gUEZESVNULCB2cAlDCQkJTSBJCisJCW1vdglhci5sYyA9IG4JCUMJCQlJMAorfXsubW1pOwkJbGQ4CXYxID0gW3ZwXSwgOAkJQwkJCU0wMQorCQlsZDgJdTEgPSBbdXBdLCA4CQlDCQkJTTAxCisJCUFERFNVQgl3MyA9IHIxMCwgcjExCQlDCQkJTSBJCisJOzsKK317Lm1taTsJCWxkOAl2MiA9IFt2cF0sIDgJCUMJCQlNMDEKKwkJbGQ4CXUyID0gW3VwXSwgOAkJQwkJCU0wMQorCQlBRERTVUIJdzAgPSB1MCwgdjAJCUMJCQlNIEkKK317Lm1taTsJCWNtcC5DTkQJcDksIHAwID0gdzMsIHIxMAlDCQkJTSBJCisJCWNtcC5uZQlwOCwgcDAgPSAwLCByMjMJCUMJCQlNIEkKKwkJYWRkCXJweCA9IDI0LCBycAkJQwkJCU0gSQorCTs7Cit9ey5tbWk7CQlsZDgJdjMgPSBbdnBdLCA4CQlDCQkJTTAxCisJCWxkOAl1MyA9IFt1cF0sIDgJCUMJCQlNMDEKKwkJbm9wCTAKK317Lm1tYjsJKHA4KQljbXBlcW9yCXA5LCBwMCA9IExJTSwgdzMJQwkJCU0gSQorCShwOCkJYWRkCXczID0gSU5DUiwgdzMJCUMJCQlNIEkKKwkJYnIJTChtNjcpCQkJQwkJCUIKK30KKworLkxjMTExOgorIHsubW1pOwkJbGQ4CXYwID0gW3ZwXSwgOAkJQwkJCU0wMQorCQlsZDgJdTAgPSBbdXBdLCA4CQlDCQkJTTAxCisJCXNoci51CW4gPSBuLCAzCQlDCQkJSTAKKwk7OworfXsubW1pOwkJYWRkCXVwYWR2ID0gUEZESVNULCB1cAlDCQkJTSBJCisJCWxkOAl2MSA9IFt2cF0sIDgJCUMJCQlNMDEKKwkJbW92CWFyLmxjID0gbgkJQwkJCUkwCit9ey5tbWk7CQlsZDgJdTEgPSBbdXBdLCA4CQlDCQkJTTAxCisJCUFERFNVQgl3MiA9IHIxMCwgcjExCQlDCQkJTSBJCisJCW5vcAkwCisJOzsKK317Lm1taTsJCWFkZAl2cGFkdiA9IFBGRElTVCwgdnAJQwkJCU0gSQorCQlsZDgJdjIgPSBbdnBdLCA4CQlDCQkJTTAxCisJCWNtcC5DTkQJcDgsIHAwID0gdzIsIHIxMAlDCQkJTSBJCit9ey5tbWk7CQlsZDgJdTIgPSBbdXBdLCA4CQlDCQkJTTAxCisJCUFERFNVQgl3MyA9IHIxOCwgcjE5CQlDCQkJTSBJCisJCW5vcAkwCisJOzsKK317Lm1taTsJCWxkOAl2MyA9IFt2cF0sIDgJCUMJCQlNMDEKKwkJY21wLkNORAlwOSwgcDAgPSB3MywgcjE4CUMJCQlNIEkKKwkocDEzKQljbXBlcW9yCXA4LCBwMCA9IExJTSwgdzIJQwkJCU0gSQorfXsubW1pOwkJbGQ4CXUzID0gW3VwXSwgOAkJQwkJCU0wMQorCShwMTMpCWFkZAl3MiA9IElOQ1IsIHcyCQlDCQkJTSBJCisJCW5vcAkwCisJOzsKK317Lm1taTsJCWFkZAlycHggPSAzMiwgcnAJCUMJCQlNIEkKKwkJc3Q4CVtycF0gPSB3MiwgOAkJQwkJCU0yMworCShwOCkJY21wZXFvcglwOSwgcDAgPSBMSU0sIHczCUMJCQlNIEkKK317Lm1tYjsJKHA4KQlhZGQJdzMgPSBJTkNSLCB3MwkJQwkJCU0gSQorCQlBRERTVUIJdzAgPSB1MCwgdjAJCUMJCQlNIEkKKwkJYnIJTChtNjcpCit9CitFUElMT0dVRSgpCisKK1BST0xPR1VFKGZ1bmMpCisJLnByb2xvZ3VlCisJLnNhdmUJYXIubGMsIHIyCisJLmJvZHkKK2lmZGVmKGBIQVZFX0FCSV8zMicsYAorCQlhZGRwNAlycCA9IDAsIHJwCQlDCQkJTSBJCisJCWFkZHA0CXVwID0gMCwgdXAJCUMJCQlNIEkKKwkJbm9wLmkJMAorCQlhZGRwNAl2cCA9IDAsIHZwCQlDCQkJTSBJCisJCW5vcC5tCTAKKwkJenh0NAluID0gbgkJCUMJCQlJCisJOzsKKycpCisKKyB7Lm1taTsJCWxkOAlyMTEgPSBbdnBdLCA4CQlDCQkJTTAxCisJCWxkOAlyMTAgPSBbdXBdLCA4CQlDCQkJTTAxCisJCW1vdglyMiA9IGFyLmxjCQlDCQkJSTAKK317Lm1taTsJCWFuZAlyMTQgPSA3LCBuCQlDCQkJTSBJCisJCWNtcC5sdAlwMTUsIHAxNCA9IDgsIG4JCUMJCQlNIEkKKwkJYWRkCW4gPSAtNiwgbgkJQwkJCU0gSQorCTs7Cit9ey5tbWk7CQljbXAuZXEJcDYsIHAwID0gMSwgcjE0CQlDCQkJTSBJCisJCWNtcC5lcQlwNywgcDAgPSAyLCByMTQJCUMJCQlNIEkKKwkJY21wLmVxCXA4LCBwMCA9IDMsIHIxNAkJQwkJCU0gSQorfXsuYmJiOwkocDYpCWJyLmRwdGsJLkxiMDAxCQkJQwkJCUIKKwkocDcpCWJyLmRwdGsJLkxiMDEwCQkJQwkJCUIKKwkocDgpCWJyLmRwdGsJLkxiMDExCQkJQwkJCUIKKwk7OworfXsubW1pOwkJY21wLmVxCXA5LCBwMCA9IDQsIHIxNAkJQwkJCU0gSQorCQljbXAuZXEJcDEwLCBwMCA9IDUsIHIxNAlDCQkJTSBJCisJCWNtcC5lcQlwMTEsIHAwID0gNiwgcjE0CUMJCQlNIEkKK317LmJiYjsJKHA5KQlici5kcHRrCS5MYjEwMAkJCUMJCQlCCisJKHAxMCkJYnIuZHB0awkuTGIxMDEJCQlDCQkJQgorCShwMTEpCWJyLmRwdGsJLkxiMTEwCQkJQwkJCUIKKwk7OworfXsubW1pOwkJbGQ4CXIxOSA9IFt2cF0sIDgJCUMJCQlNMDEKKwkJbGQ4CXIxOCA9IFt1cF0sIDgJCUMJCQlNMDEKKwkJY21wLm5lCXAxMywgcDAgPSByMCwgcjAJQyBjbGVhciAiQ0YiCQlNIEkKK317Lm1tYjsJCWNtcC5lcQlwMTIsIHAwID0gNywgcjE0CUMJCQlNIEkKKwkJbW92CXIyMyA9IDAJCQlDCQkJTSBJCisJKHAxMikJYnIuZHB0awkuTGIxMTEJCQlDCQkJQgorCTs7Cit9CisKKy5MYjAwMDoKKyB7Lm1taTsJCWxkOAl2MyA9IFt2cF0sIDgJCUMJCQlNMDEKKwkJbGQ4CXUzID0gW3VwXSwgOAkJQwkJCU0wMQorCQlzaHIudQluID0gbiwgMwkJQwkJCUkwCisJOzsKK317Lm1taTsJCWxkOAl2MCA9IFt2cF0sIDgJCUMJCQlNMDEKKwkJbGQ4CXUwID0gW3VwXSwgOAkJQwkJCU0wMQorCQlBRERTVUIJdzEgPSByMTAsIHIxMQkJQwkJCU0gSQorCTs7Cit9ey5tbWk7CQlsZDgJdjEgPSBbdnBdLCA4CQlDCQkJTTAxCisJCWNtcC5DTkQJcDcsIHAwID0gdzEsIHIxMAlDCQkJTSBJCisJCW1vdglhci5sYyA9IG4JCUMJCQlJMAorfXsubW1pOwkJbGQ4CXUxID0gW3VwXSwgOAkJQwkJCU0wMQorCQlBRERTVUIJdzIgPSByMTgsIHIxOQkJQwkJCU0gSQorCQlhZGQJcnB4ID0gOCwgcnAJCUMJCQlNIEkKKwk7OworfXsubW1pOwkJYWRkCXVwYWR2ID0gUEZESVNULCB1cAorCQlhZGQJdnBhZHYgPSBQRkRJU1QsIHZwCisJCWNtcC5DTkQJcDgsIHAwID0gdzIsIHIxOAlDCQkJTSBJCit9ey5tbWk7CQlsZDgJdjIgPSBbdnBdLCA4CQlDCQkJTTAxCisJCWxkOAl1MiA9IFt1cF0sIDgJCUMJCQlNMDEKKwkJQUREU1VCCXczID0gdTMsIHYzCQlDCQkJTSBJCisJOzsKK317Lm1taTsJCWxkOAl2MyA9IFt2cF0sIDgJCUMJCQlNMDEKKwkJY21wLkNORAlwOSwgcDAgPSB3MywgdTMJCUMJCQlNIEkKKwkocDcpCWNtcGVxb3IJcDgsIHAwID0gTElNLCB3MglDCQkJTSBJCit9ey5tbWI7CQlsZDgJdTMgPSBbdXBdLCA4CQlDCQkJTTAxCisJKHA3KQlhZGQJdzIgPSBJTkNSLCB3MgkJQwkJCU0gSQorCQlicglMKG0wKQkJCUMJCQlCCit9CisKKwlBTElHTigzMikKKy5MYjAwMToKKyB7Lm1taTsJCUFERFNVQgl3MCA9IHIxMCwgcjExCQlDCQkJTSBJCisJKHAxNSkJbGQ4CXYxID0gW3ZwXSwgOAkJQwkJCU0wMQorCQltb3YJcjggPSAwCQkJQwkJCU0gSQorCTs7Cit9ey5tbWI7CQljbXAuQ05ECXA2LCBwMCA9IHcwLCByMTAJQwkJCU0gSQorCShwMTUpCWxkOAl1MSA9IFt1cF0sIDgJCUMJCQlNMDEKKwkocDE0KQlicglMKGNqMSkJCQlDCQkJQgorCTs7Cit9ey5tbWk7CQlhZGQJdXBhZHYgPSBQRkRJU1QsIHVwCisJCWFkZAl2cGFkdiA9IFBGRElTVCwgdnAKKwkJc2hyLnUJbiA9IG4sIDMJCUMJCQlJMAorfXsubW1pOwkJbGQ4CXYyID0gW3ZwXSwgOAkJQwkJCU0wMQorCQlsZDgJdTIgPSBbdXBdLCA4CQlDCQkJTTAxCisJCWNtcC5DTkQJcDYsIHAwID0gdzAsIHIxMAlDCQkJTSBJCisJOzsKK317Lm1taTsJCWxkOAl2MyA9IFt2cF0sIDgJCUMJCQlNMDEKKwkJbGQ4CXUzID0gW3VwXSwgOAkJQwkJCU0wMQorCQltb3YJYXIubGMgPSBuCQlDCQkJSTAKKwk7OworfXsubW1pOwkJbGQ4CXYwID0gW3ZwXSwgOAkJQwkJCU0wMQorCQlsZDgJdTAgPSBbdXBdLCA4CQlDCQkJTTAxCisJCUFERFNVQgl3MSA9IHUxLCB2MQkJQwkJCU0gSQorCTs7Cit9ey5tbWk7CQlsZDgJdjEgPSBbdnBdLCA4CQlDCQkJTTAxCisJCWNtcC5DTkQJcDcsIHAwID0gdzEsIHUxCQlDCQkJTSBJCisJCUFERFNVQgl3MiA9IHUyLCB2MgkJQwkJCU0gSQorfXsubW1iOwkJbGQ4CXUxID0gW3VwXSwgOAkJQwkJCU0wMQorCQlhZGQJcnB4ID0gMTYsIHJwCQlDCQkJTSBJCisJCWJyCUwobTEpCQkJQwkJCUIKK30KKworCUFMSUdOKDMyKQorLkxiMDEwOgorIHsubW1pOwkJbGQ4CXYwID0gW3ZwXSwgOAkJQwkJCU0wMQorCQlsZDgJdTAgPSBbdXBdLCA4CQlDCQkJTTAxCisJCXNoci51CW4gPSBuLCAzCQlDCQkJSTAKK317Lm1tYjsJCUFERFNVQgl3MyA9IHIxMCwgcjExCQlDCQkJTSBJCisJCW5vcAkwCisJKHAxNSkJYnIJTChndDIpCQkJQwkJCUIKKwk7OworfXsubW1pOwkJY21wLkNORAlwOSwgcDAgPSB3MywgcjEwCUMJCQlNIEkKKwkJQUREU1VCCXcwID0gdTAsIHYwCQlDCQkJTSBJCisJCW1vdglyOCA9IDAJCQlDCQkJTSBJCisJOzsKK317Lm1tYjsJCW5vcAkwCisJCWNtcC5DTkQJcDYsIHAwID0gdzAsIHUwCQlDCQkJTSBJCisJCWJyCUwoY2oyKQkJCUMJCQlCCit9CitMKGd0Mik6Cisgey5tbWk7CQlsZDgJdjEgPSBbdnBdLCA4CQlDCQkJTTAxCisJCWxkOAl1MSA9IFt1cF0sIDgJCUMJCQlNMDEKKwkJbm9wCTAKKwk7OworfXsubW1pOwkJYWRkCXVwYWR2ID0gUEZESVNULCB1cAorCQlhZGQJdnBhZHYgPSBQRkRJU1QsIHZwCisJCW1vdglhci5sYyA9IG4JCUMJCQlJMAorfXsubW1pOwkJbGQ4CXYyID0gW3ZwXSwgOAkJQwkJCU0wMQorCQlsZDgJdTIgPSBbdXBdLCA4CQlDCQkJTTAxCisJCW5vcAkwCisJOzsKK317Lm1taTsJCWxkOAl2MyA9IFt2cF0sIDgJCUMJCQlNMDEKKwkJY21wLkNORAlwOSwgcDAgPSB3MywgcjEwCUMJCQlNIEkKKwkJQUREU1VCCXcwID0gdTAsIHYwCQlDCQkJTSBJCit9ey5tbWI7CQlsZDgJdTMgPSBbdXBdLCA4CQlDCQkJTTAxCisJCWFkZAlycHggPSAyNCwgcnAJCUMJCQlNIEkKKwkJYnIJTChtMjMpCQkJQwkJCUIKK30KKworCUFMSUdOKDMyKQorLkxiMDExOgorIHsubW1pOwkJbGQ4CXYzID0gW3ZwXSwgOAkJQwkJCU0wMQorCQlsZDgJdTMgPSBbdXBdLCA4CQlDCQkJTTAxCisJCUFERFNVQgl3MiA9IHIxMCwgcjExCQlDCQkJTSBJCisJOzsKK317Lm1tYjsJCWxkOAl2MCA9IFt2cF0sIDgJCUMJCQlNMDEKKwkJbGQ4CXUwID0gW3VwXSwgOAkJQwkJCU0wMQorCShwMTUpCWJyCUwoMykJCQlDCQkJQgorfXsubW1iOwkJY21wLkNORAlwOCwgcDAgPSB3MiwgcjEwCUMJCQlNIEkKKwkJQUREU1VCCXczID0gdTMsIHYzCQlDCQkJTSBJCisJCWJyCUwoY2ozKQkJCUMJCQlCCit9CitMKDMpOgorIHsubW1pOwkJbGQ4CXYxID0gW3ZwXSwgOAkJQwkJCU0wMQorCQlsZDgJdTEgPSBbdXBdLCA4CQlDCQkJTTAxCisJCXNoci51CW4gPSBuLCAzCQlDCQkJSTAKKwk7OworfXsubW1pOwkJYWRkCXVwYWR2ID0gUEZESVNULCB1cAorCQlhZGQJdnBhZHYgPSBQRkRJU1QsIHZwCisJCUFERFNVQgl3MyA9IHUzLCB2MwkJQwkJCU0gSQorfXsubW1pOwkJbGQ4CXYyID0gW3ZwXSwgOAkJQwkJCU0wMQorCQlsZDgJdTIgPSBbdXBdLCA4CQlDCQkJTTAxCisJCWNtcC5DTkQJcDgsIHAwID0gdzIsIHIxMAlDCQkJTSBJCisJOzsKK317Lm1taTsJCWxkOAl2MyA9IFt2cF0sIDgJCUMJCQlNMDEKKwkJY21wLkNORAlwOSwgcDAgPSB3MywgdTMJCUMJCQlNIEkKKwkJbW92CWFyLmxjID0gbgkJQwkJCUkwCit9ey5tbWk7CQlsZDgJdTMgPSBbdXBdLCA4CQlDCQkJTTAxCisJCW5vcAkwCisJCW5vcAkwCisJOzsKK317Lm1taTsJCWFkZAlycHggPSAzMiwgcnAJCUMJCQlNIEkKKwkJc3Q4CVtycF0gPSB3MiwgOAkJQwkJCU0yMworCShwOCkJY21wZXFvcglwOSwgcDAgPSBMSU0sIHczCUMJCQlNIEkKK317Lm1tYjsJKHA4KQlhZGQJdzMgPSBJTkNSLCB3MwkJQwkJCU0gSQorCQlBRERTVUIJdzAgPSB1MCwgdjAJCUMJCQlNIEkKKwkJYnIJTChtMjMpCQkJQwkJCUIKK30KKworCUFMSUdOKDMyKQorLkxiMTAwOgorIHsubW1pOwkJbGQ4CXYyID0gW3ZwXSwgOAkJQwkJCU0wMQorCQlsZDgJdTIgPSBbdXBdLCA4CQlDCQkJTTAxCisJCXNoci51CW4gPSBuLCAzCQlDCQkJSTAKKwk7OworfXsubW1pOwkJbGQ4CXYzID0gW3ZwXSwgOAkJQwkJCU0wMQorCQlsZDgJdTMgPSBbdXBdLCA4CQlDCQkJTTAxCisJCUFERFNVQgl3MSA9IHIxMCwgcjExCQlDCQkJTSBJCisJOzsKK317Lm1taTsJCWxkOAl2MCA9IFt2cF0sIDgJCUMJCQlNMDEKKwkJbGQ4CXUwID0gW3VwXSwgOAkJQwkJCU0wMQorCQljbXAuQ05ECXA3LCBwMCA9IHcxLCByMTAJQwkJCU0gSQorfXsubW1iOwkJbm9wCTAKKwkJQUREU1VCCXcyID0gdTIsIHYyCQlDCQkJTSBJCisJKHAxNCkJYnIJTChjajQpCQkJQwkJCUIKKwk7OworfQorTChndDQpOgorIHsubW1pOwkJYWRkCXVwYWR2ID0gUEZESVNULCB1cAorCQlhZGQJdnBhZHYgPSBQRkRJU1QsIHZwCisJCW1vdglhci5sYyA9IG4JCUMJCQlJMAorfXsubW1pOwkJbGQ4CXYxID0gW3ZwXSwgOAkJQwkJCU0wMQorCQlsZDgJdTEgPSBbdXBdLCA4CQlDCQkJTTAxCisJCW5vcAkwCisJOzsKK317Lm1taTsJCWxkOAl2MiA9IFt2cF0sIDgJCUMJCQlNMDEKKwkJY21wLkNORAlwOCwgcDAgPSB3MiwgdTIJCUMJCQlNIEkKKwkJbm9wCTAKK317Lm1taTsJCWxkOAl1MiA9IFt1cF0sIDgJCUMJCQlNMDEKKwkJQUREU1VCCXczID0gdTMsIHYzCQlDCQkJTSBJCisJCWFkZAlycHggPSA4LCBycAkJQwkJCU0gSQorCTs7Cit9ey5tbWk7CQlsZDgJdjMgPSBbdnBdLCA4CQlDCQkJTTAxCisJCWNtcC5DTkQJcDksIHAwID0gdzMsIHUzCQlDCQkJTSBJCisJKHA3KQljbXBlcW9yCXA4LCBwMCA9IExJTSwgdzIJQwkJCU0gSQorfXsubW1iOwkJbGQ4CXUzID0gW3VwXSwgOAkJQwkJCU0wMQorCShwNykJYWRkCXcyID0gSU5DUiwgdzIJCUMJCQlNIEkKKwkJYnIJTChtNCkJCQlDCQkJQgorfQorCisJQUxJR04oMzIpCisuTGIxMDE6Cisgey5tbWk7CQlsZDgJdjEgPSBbdnBdLCA4CQlDCQkJTTAxCisJCWxkOAl1MSA9IFt1cF0sIDgJCUMJCQlNMDEKKwkJc2hyLnUJbiA9IG4sIDMJCUMJCQlJMAorCTs7Cit9ey5tbWk7CQlsZDgJdjIgPSBbdnBdLCA4CQlDCQkJTTAxCisJCWxkOAl1MiA9IFt1cF0sIDgJCUMJCQlNMDEKKwkJQUREU1VCCXcwID0gcjEwLCByMTEJCUMJCQlNIEkKKwk7OworfXsubW1pOwkJYWRkCXVwYWR2ID0gUEZESVNULCB1cAorCQlhZGQJdnBhZHYgPSBQRkRJU1QsIHZwCisJCWFkZAlycHggPSAxNiwgcnAJCUMJCQlNIEkKK317Lm1taTsJCWxkOAl2MyA9IFt2cF0sIDgJCUMJCQlNMDEKKwkJbGQ4CXUzID0gW3VwXSwgOAkJQwkJCU0wMQorCQlub3AJMAorCTs7Cit9ey5tbWk7CQlsZDgJdjAgPSBbdnBdLCA4CQlDCQkJTTAxCisJCWNtcC5DTkQJcDYsIHAwID0gdzAsIHIxMAlDCQkJTSBJCisJCW5vcAkwCit9ey5tbWI7CQlsZDgJdTAgPSBbdXBdLCA4CQlDCQkJTTAxCisJCUFERFNVQgl3MSA9IHUxLCB2MQkJQwkJCU0gSQorCShwMTQpCWJyCUwoY2o1KQkJCUMJCQlCCisJOzsKK30KK0woZ3Q1KToKKyB7Lm1taTsJCWxkOAl2MSA9IFt2cF0sIDgJCUMJCQlNMDEKKwkJY21wLkNORAlwNywgcDAgPSB3MSwgdTEJCUMJCQlNIEkKKwkJbW92CWFyLmxjID0gbgkJQwkJCUkwCit9ey5tbWI7CQlsZDgJdTEgPSBbdXBdLCA4CQlDCQkJTTAxCisJCUFERFNVQgl3MiA9IHUyLCB2MgkJQwkJCU0gSQorCQlicglMKG01KQkJCUMJCQlCCit9CisKKwlBTElHTigzMikKKy5MYjExMDoKKyB7Lm1taTsJCWxkOAl2MCA9IFt2cF0sIDgJCUMJCQlNMDEKKwkJbGQ4CXUwID0gW3VwXSwgOAkJQwkJCU0wMQorCQlzaHIudQluID0gbiwgMwkJQwkJCUkwCisJOzsKK317Lm1taTsJCWxkOAl2MSA9IFt2cF0sIDgJCUMJCQlNMDEKKwkJbGQ4CXUxID0gW3VwXSwgOAkJQwkJCU0wMQorCQlBRERTVUIJdzMgPSByMTAsIHIxMQkJQwkJCU0gSQorCTs7Cit9ey5tbWk7CQlhZGQJdXBhZHYgPSBQRkRJU1QsIHVwCisJCWFkZAl2cGFkdiA9IFBGRElTVCwgdnAKKwkJbW92CWFyLmxjID0gbgkJQwkJCUkwCit9ey5tbWk7CQlsZDgJdjIgPSBbdnBdLCA4CQlDCQkJTTAxCisJCWxkOAl1MiA9IFt1cF0sIDgJCUMJCQlNMDEKKwkJbm9wCTAKKwk7OworfXsubW1pOwkJbGQ4CXYzID0gW3ZwXSwgOAkJQwkJCU0wMQorCQljbXAuQ05ECXA5LCBwMCA9IHczLCByMTAJQwkJCU0gSQorCQlBRERTVUIJdzAgPSB1MCwgdjAJCUMJCQlNIEkKK317Lm1tYjsJCWxkOAl1MyA9IFt1cF0sIDgJCUMJCQlNMDEKKwkJYWRkCXJweCA9IDI0LCBycAkJQwkJCU0gSQorCQlicglMKG02NykJCQlDCQkJQgorfQorCisJQUxJR04oMzIpCisuTGIxMTE6Cisgey5tbWk7CQlsZDgJdjAgPSBbdnBdLCA4CQlDCQkJTTAxCisJCWxkOAl1MCA9IFt1cF0sIDgJCUMJCQlNMDEKKwkJc2hyLnUJbiA9IG4sIDMJCUMJCQlJMAorCTs7Cit9ey5tbWk7CQlsZDgJdjEgPSBbdnBdLCA4CQlDCQkJTTAxCisJCWxkOAl1MSA9IFt1cF0sIDgJCUMJCQlNMDEKKwkJQUREU1VCCXcyID0gcjEwLCByMTEJCUMJCQlNIEkKKwk7OworfXsubW1pOwkJbGQ4CXYyID0gW3ZwXSwgOAkJQwkJCU0wMQorCQljbXAuQ05ECXA4LCBwMCA9IHcyLCByMTAJQwkJCU0gSQorCQltb3YJYXIubGMgPSBuCQlDCQkJSTAKK317Lm1taTsJCWxkOAl1MiA9IFt1cF0sIDgJCUMJCQlNMDEKKwkJQUREU1VCCXczID0gcjE4LCByMTkJCUMJCQlNIEkKKwkJbm9wCTAKKwk7OworfXsubW1pOwkJYWRkCXVwYWR2ID0gUEZESVNULCB1cAorCQlhZGQJdnBhZHYgPSBQRkRJU1QsIHZwCisJCW5vcAkwCit9ey5tbWk7CQlsZDgJdjMgPSBbdnBdLCA4CQlDCQkJTTAxCisJCWxkOAl1MyA9IFt1cF0sIDgJCUMJCQlNMDEKKwkJY21wLkNORAlwOSwgcDAgPSB3MywgcjE4CUMJCQlNIEkKKwk7OworfXsubW1pOwkJYWRkCXJweCA9IDMyLCBycAkJQwkJCU0gSQorCQlzdDgJW3JwXSA9IHcyLCA4CQlDCQkJTTIzCisJKHA4KQljbXBlcW9yCXA5LCBwMCA9IExJTSwgdzMJQwkJCU0gSQorfXsubW1iOwkocDgpCWFkZAl3MyA9IElOQ1IsIHczCQlDCQkJTSBJCisJCUFERFNVQgl3MCA9IHUwLCB2MAkJQwkJCU0gSQorCQlicglMKG02NykJCQlDCQkJQgorfQorCitDICoqKiBNQUlOIExPT1AgU1RBUlQgKioqCisJQUxJR04oMzIpCitMKHRvcCk6CitMKGM1KToJCWxkOAl2MSA9IFt2cF0sIDgJCUMJCQlNMDEKKwkJY21wLkNORAlwNywgcDAgPSB3MSwgdTEJCUMJCQlNIEkKKwkocDkpCWNtcGVxb3IJcDYsIHAwID0gTElNLCB3MAlDCQkJTSBJCisJCWxkOAl1MSA9IFt1cF0sIDgJCUMJCQlNMDEKKwkocDkpCWFkZAl3MCA9IElOQ1IsIHcwCQlDCQkJTSBJCisJCUFERFNVQgl3MiA9IHUyLCB2MgkJQwkJCU0gSQorCTs7CitMKG01KToJCWxkOAl2MiA9IFt2cF0sIDgJCUMJCQlNMDEKKwkJY21wLkNORAlwOCwgcDAgPSB3MiwgdTIJCUMJCQlNIEkKKwkocDYpCWNtcGVxb3IJcDcsIHAwID0gTElNLCB3MQlDCQkJTSBJCisJCWxkOAl1MiA9IFt1cF0sIDgJCUMJCQlNMDEKKwkocDYpCWFkZAl3MSA9IElOQ1IsIHcxCQlDCQkJTSBJCisJCUFERFNVQgl3MyA9IHUzLCB2MwkJQwkJCU0gSQorCTs7CisJCXN0OAlbcnBdID0gdzAsIDgJCUMJCQlNMjMKKwkJbGQ4CXYzID0gW3ZwXSwgOAkJQwkJCU0wMQorCQljbXAuQ05ECXA5LCBwMCA9IHczLCB1MwkJQwkJCU0gSQorCShwNykJY21wZXFvcglwOCwgcDAgPSBMSU0sIHcyCUMJCQlNIEkKKwkJbGQ4CXUzID0gW3VwXSwgOAkJQwkJCU0wMQorCShwNykJYWRkCXcyID0gSU5DUiwgdzIJCUMJCQlNIEkKKwk7OworTChtNCk6CQlzdDgJW3JwXSA9IHcxLCAxNgkJQwkJCU0yMworCQlzdDgJW3JweF0gPSB3MiwgMzIJCUMJCQlNMjMKKwkocDgpCWNtcGVxb3IJcDksIHAwID0gTElNLCB3MwlDCQkJTSBJCisJCWxmZXRjaAlbdXBhZHZdLCA2NAorCShwOCkJYWRkCXczID0gSU5DUiwgdzMJCUMJCQlNIEkKKwkJQUREU1VCCXcwID0gdTAsIHYwCQlDCQkJTSBJCisJOzsKK0wobTIzKToJCXN0OAlbcnBdID0gdzMsIDgJCUMJCQlNMjMKKwkJbGQ4CXYwID0gW3ZwXSwgOAkJQwkJCU0wMQorCQljbXAuQ05ECXA2LCBwMCA9IHcwLCB1MAkJQwkJCU0gSQorCQlsZDgJdTAgPSBbdXBdLCA4CQlDCQkJTTAxCisJCUFERFNVQgl3MSA9IHUxLCB2MQkJQwkJCU0gSQorCQlub3AuYgkwCisJOzsKK0woYzEpOgkJbGQ4CXYxID0gW3ZwXSwgOAkJQwkJCU0wMQorCQljbXAuQ05ECXA3LCBwMCA9IHcxLCB1MQkJQwkJCU0gSQorCShwOSkJY21wZXFvcglwNiwgcDAgPSBMSU0sIHcwCUMJCQlNIEkKKwkJbGQ4CXUxID0gW3VwXSwgOAkJQwkJCU0wMQorCShwOSkJYWRkCXcwID0gSU5DUiwgdzAJCUMJCQlNIEkKKwkJQUREU1VCCXcyID0gdTIsIHYyCQlDCQkJTSBJCisJOzsKK0wobTEpOgkJbGQ4CXYyID0gW3ZwXSwgOAkJQwkJCU0wMQorCQljbXAuQ05ECXA4LCBwMCA9IHcyLCB1MgkJQwkJCU0gSQorCShwNikJY21wZXFvcglwNywgcDAgPSBMSU0sIHcxCUMJCQlNIEkKKwkJbGQ4CXUyID0gW3VwXSwgOAkJQwkJCU0wMQorCShwNikJYWRkCXcxID0gSU5DUiwgdzEJCUMJCQlNIEkKKwkJQUREU1VCCXczID0gdTMsIHYzCQlDCQkJTSBJCisJOzsKKwkJc3Q4CVtycF0gPSB3MCwgOAkJQwkJCU0yMworCQlsZDgJdjMgPSBbdnBdLCA4CQlDCQkJTTAxCisJCWNtcC5DTkQJcDksIHAwID0gdzMsIHUzCQlDCQkJTSBJCisJKHA3KQljbXBlcW9yCXA4LCBwMCA9IExJTSwgdzIJQwkJCU0gSQorCQlsZDgJdTMgPSBbdXBdLCA4CQlDCQkJTTAxCisJKHA3KQlhZGQJdzIgPSBJTkNSLCB3MgkJQwkJCU0gSQorCTs7CitMKG0wKToJCXN0OAlbcnBdID0gdzEsIDE2CQlDCQkJTTIzCisJCXN0OAlbcnB4XSA9IHcyLCAzMgkJQwkJCU0yMworCShwOCkJY21wZXFvcglwOSwgcDAgPSBMSU0sIHczCUMJCQlNIEkKKwkJbGZldGNoCVt2cGFkdl0sIDY0CisJKHA4KQlhZGQJdzMgPSBJTkNSLCB3MwkJQwkJCU0gSQorCQlBRERTVUIJdzAgPSB1MCwgdjAJCUMJCQlNIEkKKwk7OworTChtNjcpOgkJc3Q4CVtycF0gPSB3MywgOAkJQwkJCU0yMworCQlsZDgJdjAgPSBbdnBdLCA4CQlDCQkJTTAxCisJCWNtcC5DTkQJcDYsIHAwID0gdzAsIHUwCQlDCQkJTSBJCisJCWxkOAl1MCA9IFt1cF0sIDgJCUMJCQlNMDEKKwkJQUREU1VCCXcxID0gdTEsIHYxCQlDCQkJTSBJCisJCWJyLmNsb29wLmRwdGsJTCh0b3ApCQlDCQkJQgorCTs7CitDICoqKiBNQUlOIExPT1AgRU5EICoqKgorCitMKGVuZCk6Cisgey5tbWk7CShwOSkJY21wZXFvcglwNiwgcDAgPSBMSU0sIHcwCUMJCQlNIEkKKwkocDkpCWFkZAl3MCA9IElOQ1IsIHcwCQlDCQkJTSBJCisJCW1vdglhci5sYyA9IHIyCQlDCQkJSTAKK30KK0woY2o1KToKKyB7Lm1taTsJCWNtcC5DTkQJcDcsIHAwID0gdzEsIHUxCQlDCQkJTSBJCisJCUFERFNVQgl3MiA9IHUyLCB2MgkJQwkJCU0gSQorCQlub3AJMAorCTs7Cit9ey5tbWk7CQlzdDgJW3JwXSA9IHcwLCA4CQlDCQkJTTIzCisJKHA2KQljbXBlcW9yCXA3LCBwMCA9IExJTSwgdzEJQwkJCU0gSQorCShwNikJYWRkCXcxID0gSU5DUiwgdzEJCUMJCQlNIEkKK30KK0woY2o0KToKKyB7Lm1taTsJCWNtcC5DTkQJcDgsIHAwID0gdzIsIHUyCQlDCQkJTSBJCisJCUFERFNVQgl3MyA9IHUzLCB2MwkJQwkJCU0gSQorCQlub3AJMAorCTs7Cit9ey5tbWk7CQlzdDgJW3JwXSA9IHcxLCA4CQlDCQkJTTIzCisJKHA3KQljbXBlcW9yCXA4LCBwMCA9IExJTSwgdzIJQwkJCU0gSQorCShwNykJYWRkCXcyID0gSU5DUiwgdzIJCUMJCQlNIEkKK30KK0woY2ozKToKKyB7Lm1taTsJCWNtcC5DTkQJcDksIHAwID0gdzMsIHUzCQlDCQkJTSBJCisJCUFERFNVQgl3MCA9IHUwLCB2MAkJQwkJCU0gSQorCQlub3AJMAorCTs7Cit9ey5tbWk7CQlzdDgJW3JwXSA9IHcyLCA4CQlDCQkJTTIzCisJKHA4KQljbXBlcW9yCXA5LCBwMCA9IExJTSwgdzMJQwkJCU0gSQorCShwOCkJYWRkCXczID0gSU5DUiwgdzMJCUMJCQlNIEkKK317Lm1taTsJCWNtcC5DTkQJcDYsIHAwID0gdzAsIHUwCQlDCQkJTSBJCisJCW5vcAkwCisJCW1vdglyOCA9IDAJCQlDCQkJTSBJCisJOzsKK30KK0woY2oyKToKKyB7Lm1taTsJCXN0OAlbcnBdID0gdzMsIDgJCUMJCQlNMjMKKwkocDkpCWNtcGVxb3IJcDYsIHAwID0gTElNLCB3MAlDCQkJTSBJCisJKHA5KQlhZGQJdzAgPSBJTkNSLCB3MAkJQwkJCU0gSQorCTs7Cit9CitMKGNqMSk6Cisgey5tbWI7CQlzdDgJW3JwXSA9IHcwLCA4CQlDCQkJTTIzCisJKHA2KQltb3YJcjggPSAxCQkJQwkJCU0gSQorCQlici5yZXQuc3B0ay5tYW55IGIwCQlDCQkJQgorfQorRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2lhNjQvYW9yc29ycmxzaDFfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2lhNjQvYW9yc29ycmxzaDFfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI1OGI5ZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vaWE2NC9hb3Jzb3JybHNoMV9uLmFzbQpAQCAtMCwwICsxLDQ4IEBACitkbmwgIElBLTY0IG1wbl9hZGRsc2gxX24sIG1wbl9zdWJsc2gxX24sIG1wbl9yc2Jsc2gxX24KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDAzLTIwMDUsIDIwMTAsIDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgSXRhbml1bTogICAgICAzLjAKK0MgSXRhbml1bSAyOiAgICAxLjUKKworCitkZWZpbmUoTFNILAkJMSkKKworaWZkZWYoYE9QRVJBVElPTl9hZGRsc2gxX24nLGBkZWZpbmUoYERPX2FkZCcpJykKK2lmZGVmKGBPUEVSQVRJT05fc3VibHNoMV9uJyxgZGVmaW5lKGBET19zdWInKScpCitpZmRlZihgT1BFUkFUSU9OX3JzYmxzaDFfbicsYGRlZmluZShgRE9fcnNiJyknKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRsc2gxX24gbXBuX3N1YmxzaDFfbiBtcG5fcnNibHNoMV9uKQorCitpbmNsdWRlX21wbihgaWE2NC9hb3Jzb3JybHNoQ19uLmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2lhNjQvYW9yc29ycmxzaDJfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2lhNjQvYW9yc29ycmxzaDJfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzliMzg0YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vaWE2NC9hb3Jzb3JybHNoMl9uLmFzbQpAQCAtMCwwICsxLDQ4IEBACitkbmwgIElBLTY0IG1wbl9hZGRsc2gyX24sIG1wbl9zdWJsc2gyX24sIG1wbl9yc2Jsc2gyX24KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDAzLTIwMDUsIDIwMTAsIDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgSXRhbml1bTogICAgICAzLjAKK0MgSXRhbml1bSAyOiAgICAxLjUKKworCitkZWZpbmUoTFNILAkJMikKKworaWZkZWYoYE9QRVJBVElPTl9hZGRsc2gyX24nLGBkZWZpbmUoYERPX2FkZCcpJykKK2lmZGVmKGBPUEVSQVRJT05fc3VibHNoMl9uJyxgZGVmaW5lKGBET19zdWInKScpCitpZmRlZihgT1BFUkFUSU9OX3JzYmxzaDJfbicsYGRlZmluZShgRE9fcnNiJyknKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRsc2gyX24gbXBuX3N1YmxzaDJfbiBtcG5fcnNibHNoMl9uKQorCitpbmNsdWRlX21wbihgaWE2NC9hb3Jzb3JybHNoQ19uLmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2lhNjQvYW9yc29ycmxzaENfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2lhNjQvYW9yc29ycmxzaENfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcwM2NlMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vaWE2NC9hb3Jzb3JybHNoQ19uLmFzbQpAQCAtMCwwICsxLDQxMiBAQAorZG5sICBJQS02NCBtcG5fYWRkbHNoQ19uLCBtcG5fc3VibHNoQ19uLCBtcG5fcnNibHNoQ19uLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDMtMjAwNSwgMjAxMCwgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitDICAgICAgICAgICBjeWNsZXMvbGltYgorQyBJdGFuaXVtOiAgICAgID8KK0MgSXRhbml1bSAyOiAgICAxLjUKKworQyBUT0RPCitDICAqIFVzZSBzaGxhZGQgaW4gZmVlZC1pbiBjb2RlIChmb3IgbXBuX2FkZGxzaENfbikuCitDICAqIFJld3JpdGUgbG9vcCB0byBzY2hlZHVsZSBsb2FkcyBjbG9zZXIgdG8gdXNlLCBzaW5jZSB3ZSBkbyBwcmVmZXRjaC4KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywgYHIzMicpCitkZWZpbmUoYHVwJywgYHIzMycpCitkZWZpbmUoYHZwJywgYHIzNCcpCitkZWZpbmUoYG4nLCAgYHIzNScpCisKK2lmZGVmKGBET19hZGQnLCBgCisgIGRlZmluZShgQUREU1VCJywgICAgIGBhZGQJJDEgPSAkMiwgJDMnKQorICBkZWZpbmUoYENNUCcsICAgICAgICBgY21wLmx0dQkkMSxwMCA9ICQyLCAkMycpCisgIGRlZmluZShgSU5DUicsICAgICAgIDEpCisgIGRlZmluZShgTElNJywgICAgICAgIC0xKQorICBkZWZpbmUoYGZ1bmMnLCAgICAgICAgbXBuX2FkZGxzaGAnTFNIYCdfbiknKQoraWZkZWYoYERPX3N1YicsIGAKKyAgZGVmaW5lKGBBRERTVUInLCAgICAgYHN1YgkkMSA9ICQyLCAkMycpCisgIGRlZmluZShgQ01QJywgICAgICAgIGBjbXAuZ3R1CSQxLHAwID0gJDIsICQzJykKKyAgZGVmaW5lKGBJTkNSJywgICAgICAgLTEpCisgIGRlZmluZShgTElNJywgICAgICAgIDApCisgIGRlZmluZShgZnVuYycsICAgICAgICBtcG5fc3VibHNoYCdMU0hgJ19uKScpCitpZmRlZihgRE9fcnNiJywgYAorICBkZWZpbmUoYEFERFNVQicsICAgICBgc3ViCSQxID0gJDMsICQyJykKKyAgZGVmaW5lKGBDTVAnLCAgICAgICAgYGNtcC5ndHUJJDEscDAgPSAkMiwgJDQnKQorICBkZWZpbmUoYElOQ1InLCAgICAgICAtMSkKKyAgZGVmaW5lKGBMSU0nLCAgICAgICAgMCkKKyAgZGVmaW5lKGBmdW5jJywgICAgICAgIG1wbl9yc2Jsc2hgJ0xTSGAnX24pJykKKworZGVmaW5lKFBGRElTVCwgNTAwKQorCitkZWZpbmUoYHUwJyxgcjE0JykgZGVmaW5lKGB1MScsYHIxNScpIGRlZmluZShgdTInLGByMTYnKSBkZWZpbmUoYHUzJyxgcjE3JykKK2RlZmluZShgdjAnLGByMTgnKSBkZWZpbmUoYHYxJyxgcjE5JykgZGVmaW5lKGB2MicsYHIyMCcpIGRlZmluZShgdjMnLGByMjEnKQorZGVmaW5lKGB3MCcsYHIyMicpIGRlZmluZShgdzEnLGByMjMnKSBkZWZpbmUoYHcyJyxgcjI0JykgZGVmaW5lKGB3MycsYHIyNScpCitkZWZpbmUoYHMwJyxgcjI2JykgZGVmaW5lKGBzMScsYHIyNycpIGRlZmluZShgczInLGByMjgnKSBkZWZpbmUoYHMzJyxgcjI5JykKK2RlZmluZShgeDAnLGByMzAnKSBkZWZpbmUoYHgxJyxgcjMxJykgZGVmaW5lKGB4MicsYHIzJykgIGRlZmluZShgeDMnLGByOScpCisKK0MgcjMgcjggcjkgcjEwIHIxMQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUoZnVuYykKKwkucHJvbG9ndWUKKwkuc2F2ZQlhci5sYywgcjIKKwkuYm9keQoraWZkZWYoYEhBVkVfQUJJXzMyJyxgCisJYWRkcDQJcnAgPSAwLCBycAkJQwkJCU0gSQorCWFkZHA0CXVwID0gMCwgdXAJCUMJCQlNIEkKKwlub3AuaQkwCisJYWRkcDQJdnAgPSAwLCB2cAkJQwkJCU0gSQorCW5vcC5tCTAKKwl6eHQ0CW4gPSBuCQkJQwkJCUkKKwk7OworJykKKyB7Lm1taTsJbGQ4CXIxMSA9IFt2cF0sIDgJCUMJCQlNMDEKKwlsZDgJcjEwID0gW3VwXSwgOAkJQwkJCU0wMQorCW1vdi5pCXIyID0gYXIubGMJCUMJCQlJMAorfXsubW1pOwlhbmQJcjE0ID0gMywgbgkJQwkJCU0gSQorCWNtcC5sdAlwMTUsIHAwID0gNCwgbgkJQwkJCU0gSQorCWFkZAluID0gLTUsIG4JCUMJCQlNIEkKKwk7OworfXsubW1pOwljbXAuZXEJcDYsIHAwID0gMSwgcjE0CQlDCQkJTSBJCisJY21wLmVxCXA3LCBwMCA9IDIsIHIxNAkJQwkJCU0gSQorCWNtcC5lcQlwOCwgcDAgPSAzLCByMTQJCUMJCQlNIEkKK317LmJiYgorICAocDYpCWJyLmRwdGsJLkxiMDEJCQlDCQkJQgorICAocDcpCWJyLmRwdGsJLkxiMTAJCQlDCQkJQgorICAocDgpCWJyLmRwdGsJLkxiMTEJCQlDCQkJQgorfQorCisuTGIwMDoKKyB7Lm1taTsJbGQ4CXYwID0gW3ZwXSwgOAkJQwkJCU0wMQorCWxkOAl1MCA9IFt1cF0sIDgJCUMJCQlNMDEKKwlzaHIudQluID0gbiwgMgkJQwkJCUkwCisJOzsKK317Lm1taTsJbGQ4CXYxID0gW3ZwXSwgOAkJQwkJCU0wMQorCWxkOAl1MSA9IFt1cF0sIDgJCUMJCQlNMDEKKwlzaGwJeDMgPSByMTEsIExTSAkJQwkJCUkwCisJOzsKK317Lm1taTsJbGQ4CXYyID0gW3ZwXSwgOAkJQwkJCU0wMQorCWxkOAl1MiA9IFt1cF0sIDgJCUMJCQlNMDEKKwlzaHJwCXgwID0gdjAsIHIxMSwgNjQtTFNICUMJCQlJMAorfXsubW1iOwlBRERTVUIoCXczLCByMTAsIHgzKQkJQwkJCU0gSQorCW5vcAkwCisgIChwMTUpCWJyLmRwbnQJLmdydDQJCQlDCQkJQgorCTs7Cit9ey5taWk7CUNNUCgJcDcsIHczLCByMTAsIHgzKQlDCQkJTSBJSTAKKwlzaHJwCXgxID0gdjEsIHYwLCA2NC1MU0gJQwkJCUkwCisJQUREU1VCKAl3MCwgdTAsIHgwKQkJQwkJCU0gSQorCTs7Cit9ey5taWk7CUNNUCgJcDgsIHcwLCB1MCwgeDApCQlDCQkJTSBJCisJc2hycAl4MiA9IHYyLCB2MSwgNjQtTFNICUMJCQlJMAorCUFERFNVQigJdzEsIHUxLCB4MSkJCUMJCQlNIEkKK317Lm1tYjsJbm9wCTAKKwlub3AJMAorCWJyCS5MY2o0CQkJQwkJCUIKK30KK0FMSUdOKDMyKQorLmdydDQ6Cisgey5taWk7CWxkOAl2MyA9IFt2cF0sIDgJCUMJCQlNMDEKKwlzaHJwCXgwID0gdjAsIHIxMSwgNjQtTFNICUMJCQlJMAorCUNNUCgJcDgsIHczLCByMTAsIHgzKQlDCQkJTSBJCisJOzsKK317Lm1taTsJbGQ4CXUzID0gW3VwXSwgOAkJQwkJCU0wMQorCWFkZAlyMTEgPSBQRkRJU1QsIHZwCisJc2hycAl4MSA9IHYxLCB2MCwgNjQtTFNICUMJCQlJMAorfXsubW1pOwlsZDgJdjAgPSBbdnBdLCA4CQlDCQkJTTAxCisJQUREU1VCKAl3MCwgdTAsIHgwKQkJQwkJCU0gSQorCW5vcAkwCisJOzsKK317Lm1taTsJQ01QKAlwNiwgdzAsIHUwLCB4MCkJCUMJCQlNIEkKKwlhZGQJcjEwID0gUEZESVNULCB1cAorCW1vdi5pCWFyLmxjID0gbgkJQwkJCUkwCit9ey5tbWI7CUFERFNVQigJdzEsIHUxLCB4MSkJCUMJCQlNIEkKKwlsZDgJdTAgPSBbdXBdLCA4CQlDCQkJTTAxCisJYnIJLkxMMDAJCQlDCQkJQgorfQorCisJQUxJR04oMzIpCisuTGIwMToKK2lmZGVmKGBET19hZGQnLAorYAlzaGxhZGQJdzIgPSByMTEsIExTSCwgcjEwCUMJCQlNIEkKKwlzaHIudQlyOCA9IHIxMSwgNjQtTFNICUMgcmV0dmFsCQlJMAorICAocDE1KQlici5kcG50CS5ncnQxCQkJQwkJCUIKKwk7OworJyxgCisJc2hsCXgyID0gcjExLCBMU0gJCUMJCQlJMAorICAocDE1KQlici5kcG50CS5ncnQxCQkJQwkJCUIKKwk7OworCUFERFNVQigJdzIsIHIxMCwgeDIpCQlDCQkJTSBJCisJc2hyLnUJcjggPSByMTEsIDY0LUxTSAlDIHJldHZhbAkJSTAKKwk7OworJykKKwlDTVAoCXA2LCB3MiwgcjEwLCB4MikJQwkJCU0gSQorCWJyCQkuTGNqMQorCisuZ3J0MToJbGQ4CXYzID0gW3ZwXSwgOAkJQwkJCU0wMQorCWxkOAl1MyA9IFt1cF0sIDgJCUMJCQlNMDEKKwlzaHIudQluID0gbiwgMgkJQwkJCUkwCisJOzsKKwlsZDgJdjAgPSBbdnBdLCA4CQlDCQkJTTAxCisJbGQ4CXUwID0gW3VwXSwgOAkJQwkJCU0wMQorCW1vdi5pCWFyLmxjID0gbgkJQyBGSVhNRSBzd2FwIHdpdGggbmV4dAlJMAoraWZkZWYoYERPX2FkZCcsCitgJyxgCisJQUREU1VCKAl3MiwgcjEwLCB4MikKKycpCisJOzsKKyB7Lm1taTsJbGQ4CXYxID0gW3ZwXSwgOAkJQwkJCU0wMQorCWxkOAl1MSA9IFt1cF0sIDgJCUMJCQlNMDEKKwlzaHJwCXgzID0gdjMsIHIxMSwgNjQtTFNICUMJCQlJMAorCTs7Cit9ey5tbWk7CWxkOAl2MiA9IFt2cF0sIDgJCUMJCQlNMDEKKwlsZDgJdTIgPSBbdXBdLCA4CQlDCQkJTTAxCisJc2hycAl4MCA9IHYwLCB2MywgNjQtTFNICUMJCQlJMAorfXsubW1iOwlDTVAoCXA2LCB3MiwgcjEwLCB4MikJQwkJCU0gSQorCUFERFNVQigJdzMsIHUzLCB4MykJCUMJCQlNIEkKKwlici5jbG9vcC5kcHRrCS5ncnQ1CQlDCQkJQgorCTs7Cit9ey5tbWk7CUNNUCgJcDcsIHczLCB1MywgeDMpCQlDCQkJTSBJCisJQUREU1VCKAl3MCwgdTAsIHgwKQkJQwkJCU0gSQorCXNocnAJeDEgPSB2MSwgdjAsIDY0LUxTSAlDCQkJSTAKK317Lm1tYjsJbm9wCTAKKwlub3AJMAorCWJyCS5MY2o1CQkJQwkJCUIKK30KKy5ncnQ1OgorIHsubW1pOwlhZGQJcjEwID0gUEZESVNULCB1cAorCWFkZAlyMTEgPSBQRkRJU1QsIHZwCisJc2hycAl4MCA9IHYwLCB2MywgNjQtTFNICUMJCQlJMAorfXsubW1iOwlsZDgJdjMgPSBbdnBdLCA4CQlDCQkJTTAxCisJQ01QKAlwOCwgdzMsIHUzLCB4MykJCUMJCQlNIEkKKwlicgkuTEwwMQkJCUMJCQlCCit9CisJQUxJR04oMzIpCisuTGIxMDoKKyB7Lm1taTsJbGQ4CXYyID0gW3ZwXSwgOAkJQwkJCU0wMQorCWxkOAl1MiA9IFt1cF0sIDgJCUMJCQlNMDEKKwlzaGwJeDEgPSByMTEsIExTSAkJQwkJCUkwCit9ey5tbWI7CW5vcAkwCisJbm9wCTAKKyAgKHAxNSkJYnIuZHBudAkuZ3J0MgkJCUMJCQlCCisJOzsKK317Lm1taTsJQUREU1VCKAl3MSwgcjEwLCB4MSkJCUMJCQlNIEkKKwlub3AJMAorCXNocnAJeDIgPSB2MiwgcjExLCA2NC1MU0gJQwkJCUkwCisJOzsKK317Lm1taTsJQ01QKAlwOSwgdzEsIHIxMCwgeDEpCUMJCQlNIEkKKwlBRERTVUIoCXcyLCB1MiwgeDIpCQlDCQkJTSBJCisJc2hyLnUJcjggPSB2MiwgNjQtTFNICQlDIHJldHZhbAkJSTAKKwk7OworfXsubW1iOwlDTVAoCXA2LCB3MiwgdTIsIHgyKQkJQwkJCU0gSQorCW5vcAkwCisJYnIJLkxjajIJCQlDCQkJQgorfQorLmdydDI6Cisgey5tbWk7CWxkOAl2MyA9IFt2cF0sIDgJCUMJCQlNMDEKKwlsZDgJdTMgPSBbdXBdLCA4CQlDCQkJTTAxCisJc2hyLnUJbiA9IG4sIDIJCUMJCQlJMAorCTs7Cit9ey5tbWk7CWxkOAl2MCA9IFt2cF0sIDgJCUMJCQlNMDEKKwlsZDgJdTAgPSBbdXBdLCA4CQlDCQkJTTAxCisJbW92LmkJYXIubGMgPSBuCQlDCQkJSTAKK317Lm1taTsJQUREU1VCKAl3MSwgcjEwLCB4MSkJCUMJCQlNIEkKKwlub3AJMAorCW5vcAkwCisJOzsKK317Lm1paTsJbGQ4CXYxID0gW3ZwXSwgOAkJQwkJCU0wMQorCXNocnAJeDIgPSB2MiwgcjExLCA2NC1MU0gJQwkJCUkwCisJQ01QKAlwOCwgdzEsIHIxMCwgeDEpCUMJCQlNIEkKKwk7OworfXsubW1pOwlhZGQJcjEwID0gUEZESVNULCB1cAorCWxkOAl1MSA9IFt1cF0sIDgJCUMJCQlNMDEKKwlzaHJwCXgzID0gdjMsIHYyLCA2NC1MU0gJQwkJCUkwCit9ey5tbWk7CWFkZAlyMTEgPSBQRkRJU1QsIHZwCisJbGQ4CXYyID0gW3ZwXSwgOAkJQwkJCU0wMQorCUFERFNVQigJdzIsIHUyLCB4MikJCUMJCQlNIEkKKwk7OworfXsubW1pOwlDTVAoCXA2LCB3MiwgdTIsIHgyKQkJQwkJCU0gSQorCWxkOAl1MiA9IFt1cF0sIDgJCUMJCQlNMDEKKwlzaHJwCXgwID0gdjAsIHYzLCA2NC1MU0gJQwkJCUkwCit9ey5taWI7CUFERFNVQigJdzMsIHUzLCB4MykJCUMJCQlNIEkKKwlub3AJMAorCWJyLmNsb29wLmRwbnQJTCh0b3ApCQlDCQkJQgorfQorCWJyCUwoZW5kKQkJCUMJCQlCCisuTGIxMToKKyB7Lm1taTsJbGQ4CXYxID0gW3ZwXSwgOAkJQwkJCU0wMQorCWxkOAl1MSA9IFt1cF0sIDgJCUMJCQlNMDEKKwlzaGwJeDAgPSByMTEsIExTSAkJQwkJCUkwCisJOzsKK317Lm1taTsJbGQ4CXYyID0gW3ZwXSwgOAkJQwkJCU0wMQorCWxkOAl1MiA9IFt1cF0sIDgJCUMJCQlNMDEKKwlzaHIudQluID0gbiwgMgkJQwkJCUkwCit9ey5tbWI7CW5vcAkwCisJbm9wCTAKKyAgKHAxNSkJYnIuZHBudAkuZ3J0MwkJCUMJCQlCCisJOzsKK317Lm1paTsJbm9wCTAKKwlzaHJwCXgxID0gdjEsIHIxMSwgNjQtTFNICUMJCQlJMAorCUFERFNVQigJdzAsIHIxMCwgeDApCQlDCQkJTSBJCisJOzsKK317Lm1paTsJQ01QKAlwOCwgdzAsIHIxMCwgeDApCUMJCQlNIEkKKwlzaHJwCXgyID0gdjIsIHYxLCA2NC1MU0gJQwkJCUkwCisJQUREU1VCKAl3MSwgdTEsIHgxKQkJQwkJCU0gSQorCTs7Cit9ey5tbWI7CUNNUCgJcDksIHcxLCB1MSwgeDEpCQlDCQkJTSBJCisJQUREU1VCKAl3MiwgdTIsIHgyKQkJQwkJCU0gSQorCWJyCS5MY2ozCQkJQwkJCUIKK30KKy5ncnQzOgorIHsubW1pOwlsZDgJdjMgPSBbdnBdLCA4CQlDCQkJTTAxCisJbGQ4CXUzID0gW3VwXSwgOAkJQwkJCU0wMQorCXNocnAJeDEgPSB2MSwgcjExLCA2NC1MU0gJQwkJCUkwCit9ey5tbWk7CUFERFNVQigJdzAsIHIxMCwgeDApCQlDCQkJTSBJCisJbm9wCTAKKwlub3AJMAorCTs7Cit9ey5tbWk7CWxkOAl2MCA9IFt2cF0sIDgJCUMJCQlNMDEKKwlDTVAoCXA2LCB3MCwgcjEwLCB4MCkJQwkJCU0gSQorCW1vdi5pCWFyLmxjID0gbgkJQwkJCUkwCit9ey5tbWk7CWxkOAl1MCA9IFt1cF0sIDgJCUMJCQlNMDEKKwlBRERTVUIoCXcxLCB1MSwgeDEpCQlDCQkJTSBJCisJbm9wCTAKKwk7OworfXsubW1pOwlhZGQJcjEwID0gUEZESVNULCB1cAorCWFkZAlyMTEgPSBQRkRJU1QsIHZwCisJc2hycAl4MiA9IHYyLCB2MSwgNjQtTFNICUMJCQlJMAorfXsubW1iOwlsZDgJdjEgPSBbdnBdLCA4CQlDCQkJTTAxCisJQ01QKAlwOCwgdzEsIHUxLCB4MSkJCUMJCQlNIEkKKwlicgkuTEwxMQkJCUMJCQlCCit9CisKK0MgKioqIE1BSU4gTE9PUCBTVEFSVCAqKioKKwlBTElHTigzMikKK0wodG9wKToJc3Q4CVtycF0gPSB3MSwgOAkJQwkJCU0yMworCWxmZXRjaAlbcjEwXSwgMzIKKyAgIChwOCkJY21wZXFvcglwNiwgcDAgPSBMSU0sIHcyCUMJCQlNIEkKKyAgIChwOCkJYWRkCXcyID0gSU5DUiwgdzIJCUMJCQlNIEkKKwlsZDgJdjMgPSBbdnBdLCA4CQlDCQkJTTAxCisJQ01QKAlwOCwgdzMsIHUzLCB4MykJCUMJCQlNIEkKKwk7OworLkxMMDE6CWxkOAl1MyA9IFt1cF0sIDgJCUMJCQlNMDEKKwlzaHJwCXgxID0gdjEsIHYwLCA2NC1MU0gJQwkJCUkwCisgICAocDYpCWNtcGVxb3IJcDgsIHAwID0gTElNLCB3MwlDCQkJTSBJCisgICAocDYpCWFkZAl3MyA9IElOQ1IsIHczCQlDCQkJTSBJCisJbGQ4CXYwID0gW3ZwXSwgOAkJQwkJCU0wMQorCUFERFNVQigJdzAsIHUwLCB4MCkJCUMJCQlNIEkKKwk7OworCXN0OAlbcnBdID0gdzIsIDgJCUMJCQlNMjMKKwlDTVAoCXA2LCB3MCwgdTAsIHgwKQkJQwkJCU0gSQorCW5vcC5iCTAKKwlsZDgJdTAgPSBbdXBdLCA4CQlDCQkJTTAxCisJbGZldGNoCVtyMTFdLCAzMgorCUFERFNVQigJdzEsIHUxLCB4MSkJCUMJCQlNIEkKKwk7OworLkxMMDA6CXN0OAlbcnBdID0gdzMsIDgJCUMJCQlNMjMKKwlzaHJwCXgyID0gdjIsIHYxLCA2NC1MU0gJQwkJCUkwCisgICAocDgpCWNtcGVxb3IJcDYsIHAwID0gTElNLCB3MAlDCQkJTSBJCisgICAocDgpCWFkZAl3MCA9IElOQ1IsIHcwCQlDCQkJTSBJCisJbGQ4CXYxID0gW3ZwXSwgOAkJQwkJCU0wMQorCUNNUCgJcDgsIHcxLCB1MSwgeDEpCQlDCQkJTSBJCisJOzsKKy5MTDExOglsZDgJdTEgPSBbdXBdLCA4CQlDCQkJTTAxCisJc2hycAl4MyA9IHYzLCB2MiwgNjQtTFNICUMJCQlJMAorICAgKHA2KQljbXBlcW9yCXA4LCBwMCA9IExJTSwgdzEJQwkJCU0gSQorICAgKHA2KQlhZGQJdzEgPSBJTkNSLCB3MQkJQwkJCU0gSQorCWxkOAl2MiA9IFt2cF0sIDgJCUMJCQlNMDEKKwlBRERTVUIoCXcyLCB1MiwgeDIpCQlDCQkJTSBJCisJOzsKKyB7Lm1taTsJc3Q4CVtycF0gPSB3MCwgOAkJQwkJCU0yMworCUNNUCgJcDYsIHcyLCB1MiwgeDIpCQlDCQkJTSBJCisJc2hycAl4MCA9IHYwLCB2MywgNjQtTFNICUMJCQlJMAorfXsubWliOworCWxkOAl1MiA9IFt1cF0sIDgJCUMJCQlNMDEKKwlBRERTVUIoCXczLCB1MywgeDMpCQlDCQkJTSBJCisJYnIuY2xvb3AuZHB0awlMKHRvcCkJCUMJCQlCCisJOzsKK30KK0MgKioqIE1BSU4gTE9PUCBFTkQgKioqCisKK0woZW5kKToKKyB7Lm1taTsJc3Q4CVtycF0gPSB3MSwgOAkJQwkJCU0yMworICAgKHA4KQljbXBlcW9yCXA2LCBwMCA9IExJTSwgdzIJQwkJCU0gSQorCXNocnAJeDEgPSB2MSwgdjAsIDY0LUxTSAlDCQkJSTAKK317Lm1taTsKKyAgIChwOCkJYWRkCXcyID0gSU5DUiwgdzIJCUMJCQlNIEkKKwlDTVAoCXA3LCB3MywgdTMsIHgzKQkJQwkJCU0gSQorCUFERFNVQigJdzAsIHUwLCB4MCkJCUMJCQlNIEkKKwk7OworfQorLkxjajU6Cisgey5tbWk7CXN0OAlbcnBdID0gdzIsIDgJCUMJCQlNMjMKKyAgIChwNikJY21wZXFvcglwNywgcDAgPSBMSU0sIHczCUMJCQlNIEkKKwlzaHJwCXgyID0gdjIsIHYxLCA2NC1MU0gJQwkJCUkwCit9ey5tbWk7CisgICAocDYpCWFkZAl3MyA9IElOQ1IsIHczCQlDCQkJTSBJCisJQ01QKAlwOCwgdzAsIHUwLCB4MCkJCUMJCQlNIEkKKwlBRERTVUIoCXcxLCB1MSwgeDEpCQlDCQkJTSBJCisJOzsKK30KKy5MY2o0OgorIHsubW1pOwlzdDgJW3JwXSA9IHczLCA4CQlDCQkJTTIzCisgICAocDcpCWNtcGVxb3IJcDgsIHAwID0gTElNLCB3MAlDCQkJTSBJCisJbW92LmkJYXIubGMgPSByMgkJQwkJCUkwCit9ey5tbWk7CisgICAocDcpCWFkZAl3MCA9IElOQ1IsIHcwCQlDCQkJTSBJCisJQ01QKAlwOSwgdzEsIHUxLCB4MSkJCUMJCQlNIEkKKwlBRERTVUIoCXcyLCB1MiwgeDIpCQlDCQkJTSBJCisJOzsKK30KKy5MY2ozOgorIHsubW1pOwlzdDgJW3JwXSA9IHcwLCA4CQlDCQkJTTIzCisgICAocDgpCWNtcGVxb3IJcDksIHAwID0gTElNLCB3MQlDCQkJTSBJCisJc2hyLnUJcjggPSB2MiwgNjQtTFNICQlDCQkJSTAKK317Lm1taTsKKyAgIChwOCkJYWRkCXcxID0gSU5DUiwgdzEJCUMJCQlNIEkKKwlDTVAoCXA2LCB3MiwgdTIsIHgyKQkJQwkJCU0gSQorCW5vcAkwCisJOzsKK30KKy5MY2oyOgorIHsubW1pOwlzdDgJW3JwXSA9IHcxLCA4CQlDCQkJTTIzCisgICAocDkpCWNtcGVxb3IJcDYsIHAwID0gTElNLCB3MglDCQkJTSBJCisgICAocDkpCWFkZAl3MiA9IElOQ1IsIHcyCQlDCQkJTSBJCisJOzsKK30KKy5MY2oxOgorIHsubW1iOwlzdDgJW3JwXSA9IHcyCQlDCQkJTTIzCitpZmRlZihgRE9fcnNiJyxgCisgICAocDYpCWFkZAlyOCA9IC0xLCByOAkJQwkJCU0gSQorJyxgCisgICAocDYpCWFkZAlyOCA9IDEsIHI4CQlDCQkJTSBJCisnKQlici5yZXQuc3B0ay5tYW55IGIwCQlDCQkJQgorfQorRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2lhNjQvYmRpdl9kYm0xYy5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2lhNjQvYmRpdl9kYm0xYy5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdlNDU1MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vaWE2NC9iZGl2X2RibTFjLmFzbQpAQCAtMCwwICsxLDUxNiBAQAorZG5sICBJQS02NCBtcG5fYmRpdl9kYm0xLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3Jiam9ybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgY3ljbGVzL2xpbWIKK0MgSXRhbml1bTogICAgNAorQyBJdGFuaXVtIDI6ICAyCisKK0MgVE9ETworQyAgKiBPcHRpbWl6ZSBmZWVkLWluIGFuZCB3aW5kLWRvd24gY29kZSwgYm90aCBmb3Igc3BlZWQgYW5kIGNvZGUgc2l6ZS4KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywgYHIzMicpCitkZWZpbmUoYHVwJywgYHIzMycpCitkZWZpbmUoYG4nLCBgcjM0JykKK2RlZmluZShgYmQnLCBgcjM1JykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9iZGl2X2RibTFjKQorCS5wcm9sb2d1ZQorCS5zYXZlCQlhci5sYywgcjIKKwkuYm9keQorCitpZmRlZihgSEFWRV9BQklfMzInLAorYAlhZGRwNAkJcnAgPSAwLCBycAkJQyBNIEkKKwlhZGRwNAkJdXAgPSAwLCB1cAkJQyBNIEkKKwl6eHQ0CQluID0gbgkJCUMgSQorCTs7CisnKQorey5tbWIKKwltb3YJCXIxNSA9IHIzNgkJQyBNIEkKKwlsZGY4CQlmOSA9IFt1cF0sIDgJCUMgTQorCW5vcC5iCQkwCQkJQyBCCit9CisuTGNvbW1vbjoKK3subWlpCisJYWRkcwkJcjE2ID0gLTEsIG4JCUMgTSBJCisJbW92CQlyMiA9IGFyLmxjCQlDIEkwCisJYW5kCQlyMTQgPSAzLCBuCQlDIE0gSQorCTs7Cit9Cit7Lm1paQorCXNldGYuc2lnCWY2ID0gYmQJCQlDIE0yIE0zCisJc2hyLnUJCXIzMSA9IHIxNiwgMgkJQyBJMAorCWNtcC5lcQkJcDEwLCBwMCA9IDAsIHIxNAlDIE0gSQorfQorey5taWkKKwlub3AubQkJMAkJCUMgTQorCWNtcC5lcQkJcDExLCBwMCA9IDIsIHIxNAlDIE0gSQorCWNtcC5lcQkJcDEyLCBwMCA9IDMsIHIxNAlDIE0gSQorCTs7Cit9Cit7Lm1paQorCWNtcC5uZQkJcDYsIHA3ID0gcjAsIHIwCQlDIE0gSQorCW1vdi5pCQlhci5sYyA9IHIzMQkJQyBJMAorCWNtcC5uZQkJcDgsIHA5ID0gcjAsIHIwCQlDIE0gSQorfQorey5iYmIKKyAgKHAxMCkJYnIuZHB0awkJLkxiMDAJCQlDIEIKKyAgKHAxMSkJYnIuZHB0awkJLkxiMTAJCQlDIEIKKyAgKHAxMikJYnIuZHB0awkJLkxiMTEJCQlDIEIKKwk7OworfQorCisuTGIwMToJYnIuY2xvb3AuZHB0awkuZ3J0MQorCTs7CisJeG1hLmwJCWYzOCA9IGY5LCBmNiwgZjAKKwl4bWEuaHUJCWYzOSA9IGY5LCBmNiwgZjAKKwk7OworCWdldGYuc2lnCXIyNiA9IGYzOAorCWdldGYuc2lnCXIyNyA9IGYzOQorCWJyCQkuTGNqMQorCisuZ3J0MToJbGRmOAkJZjEwID0gW3IzM10sIDgKKwk7OworCWxkZjgJCWYxMSA9IFtyMzNdLCA4CisJOzsKKwlsZGY4CQlmMTIgPSBbcjMzXSwgOAorCTs7CisJeG1hLmwJCWYzOCA9IGY5LCBmNiwgZjAKKwl4bWEuaHUJCWYzOSA9IGY5LCBmNiwgZjAKKwk7OworCWxkZjgJCWYxMyA9IFtyMzNdLCA4CisJOzsKKwl4bWEubAkJZjMyID0gZjEwLCBmNiwgZjAKKwl4bWEuaHUJCWYzMyA9IGYxMCwgZjYsIGYwCisJYnIuY2xvb3AuZHB0awkuZ3J0NQorCisJOzsKKwlnZXRmLnNpZwlyMjYgPSBmMzgKKwl4bWEubAkJZjM0ID0gZjExLCBmNiwgZjAKKwl4bWEuaHUJCWYzNSA9IGYxMSwgZjYsIGYwCisJOzsKKwlnZXRmLnNpZwlyMjcgPSBmMzkKKwk7OworCWdldGYuc2lnCXIyMCA9IGYzMgorCXhtYS5sCQlmMzYgPSBmMTIsIGY2LCBmMAorCXhtYS5odQkJZjM3ID0gZjEyLCBmNiwgZjAKKwk7OworCWdldGYuc2lnCXIyMSA9IGYzMworCTs7CisJZ2V0Zi5zaWcJcjIyID0gZjM0CisJeG1hLmwJCWYzOCA9IGYxMywgZjYsIGYwCisJeG1hLmh1CQlmMzkgPSBmMTMsIGY2LCBmMAorCWJyCQkuTGNqNQorCisuZ3J0NToJbGRmOAkJZjEwID0gW3IzM10sIDgKKwk7OworCWdldGYuc2lnCXIyNiA9IGYzOAorCXhtYS5sCQlmMzQgPSBmMTEsIGY2LCBmMAorCXhtYS5odQkJZjM1ID0gZjExLCBmNiwgZjAKKwk7OworCWdldGYuc2lnCXIyNyA9IGYzOQorCWxkZjgJCWYxMSA9IFtyMzNdLCA4CisJOzsKKwlnZXRmLnNpZwlyMjAgPSBmMzIKKwl4bWEubAkJZjM2ID0gZjEyLCBmNiwgZjAKKwl4bWEuaHUJCWYzNyA9IGYxMiwgZjYsIGYwCisJOzsKKwlnZXRmLnNpZwlyMjEgPSBmMzMKKwlsZGY4CQlmMTIgPSBbcjMzXSwgOAorCTs7CisJZ2V0Zi5zaWcJcjIyID0gZjM0CisJeG1hLmwJCWYzOCA9IGYxMywgZjYsIGYwCisJeG1hLmh1CQlmMzkgPSBmMTMsIGY2LCBmMAorCWJyCQkuTEwwMQorCisuTGIxMDoJbGRmOAkJZjEzID0gW3IzM10sIDgKKwlici5jbG9vcC5kcHRrCS5ncnQyCisJOzsKKworCXhtYS5sCQlmMzYgPSBmOSwgZjYsIGYwCisJeG1hLmh1CQlmMzcgPSBmOSwgZjYsIGYwCisJOzsKKwl4bWEubAkJZjM4ID0gZjEzLCBmNiwgZjAKKwl4bWEuaHUJCWYzOSA9IGYxMywgZjYsIGYwCisJOzsKKwlnZXRmLnNpZwlyMjQgPSBmMzYKKwk7OworCWdldGYuc2lnCXIyNSA9IGYzNworCTs7CisJZ2V0Zi5zaWcJcjI2ID0gZjM4CisJOzsKKwlnZXRmLnNpZwlyMjcgPSBmMzkKKwlicgkJLkxjajIKKworLmdydDI6CWxkZjgJCWYxMCA9IFtyMzNdLCA4CisJOzsKKwlsZGY4CQlmMTEgPSBbcjMzXSwgOAorCTs7CisJeG1hLmwJCWYzNiA9IGY5LCBmNiwgZjAKKwl4bWEuaHUJCWYzNyA9IGY5LCBmNiwgZjAKKwk7OworCWxkZjgJCWYxMiA9IFtyMzNdLCA4CisJOzsKKwl4bWEubAkJZjM4ID0gZjEzLCBmNiwgZjAKKwl4bWEuaHUJCWYzOSA9IGYxMywgZjYsIGYwCisJOzsKKwlsZGY4CQlmMTMgPSBbcjMzXSwgOAorCTs7CisJZ2V0Zi5zaWcJcjI0ID0gZjM2CisJeG1hLmwJCWYzMiA9IGYxMCwgZjYsIGYwCisJeG1hLmh1CQlmMzMgPSBmMTAsIGY2LCBmMAorCWJyLmNsb29wLmRwdGsJLmdydDYKKworCWdldGYuc2lnCXIyNSA9IGYzNworCTs7CisJZ2V0Zi5zaWcJcjI2ID0gZjM4CisJeG1hLmwJCWYzNCA9IGYxMSwgZjYsIGYwCisJeG1hLmh1CQlmMzUgPSBmMTEsIGY2LCBmMAorCTs7CisJZ2V0Zi5zaWcJcjI3ID0gZjM5CisJOzsKKwlnZXRmLnNpZwlyMjAgPSBmMzIKKwl4bWEubAkJZjM2ID0gZjEyLCBmNiwgZjAKKwl4bWEuaHUJCWYzNyA9IGYxMiwgZjYsIGYwCisJYnIJCS5MY2o2CisKKy5ncnQ2OglnZXRmLnNpZwlyMjUgPSBmMzcKKwlsZGY4CQlmMTAgPSBbcjMzXSwgOAorCTs7CisJZ2V0Zi5zaWcJcjI2ID0gZjM4CisJeG1hLmwJCWYzNCA9IGYxMSwgZjYsIGYwCisJeG1hLmh1CQlmMzUgPSBmMTEsIGY2LCBmMAorCTs7CisJZ2V0Zi5zaWcJcjI3ID0gZjM5CisJbGRmOAkJZjExID0gW3IzM10sIDgKKwk7OworCWdldGYuc2lnCXIyMCA9IGYzMgorCXhtYS5sCQlmMzYgPSBmMTIsIGY2LCBmMAorCXhtYS5odQkJZjM3ID0gZjEyLCBmNiwgZjAKKwlicgkJLkxMMTAKKworCisuTGIxMToJbGRmOAkJZjEyID0gW3IzM10sIDgKKwk7OworCWxkZjgJCWYxMyA9IFtyMzNdLCA4CisJYnIuY2xvb3AuZHB0awkuZ3J0MworCTs7CisKKwl4bWEubAkJZjM0ID0gZjksIGY2LCBmMAorCXhtYS5odQkJZjM1ID0gZjksIGY2LCBmMAorCTs7CisJeG1hLmwJCWYzNiA9IGYxMiwgZjYsIGYwCisJeG1hLmh1CQlmMzcgPSBmMTIsIGY2LCBmMAorCTs7CisJZ2V0Zi5zaWcJcjIyID0gZjM0CisJeG1hLmwJCWYzOCA9IGYxMywgZjYsIGYwCisJeG1hLmh1CQlmMzkgPSBmMTMsIGY2LCBmMAorCTs7CisJZ2V0Zi5zaWcJcjIzID0gZjM1CisJOzsKKwlnZXRmLnNpZwlyMjQgPSBmMzYKKwk7OworCWdldGYuc2lnCXIyNSA9IGYzNworCTs7CisJZ2V0Zi5zaWcJcjI2ID0gZjM4CisJYnIJCS5MY2ozCisKKy5ncnQzOglsZGY4CQlmMTAgPSBbcjMzXSwgOAorCTs7CisJeG1hLmwJCWYzNCA9IGY5LCBmNiwgZjAKKwl4bWEuaHUJCWYzNSA9IGY5LCBmNiwgZjAKKwk7OworCWxkZjgJCWYxMSA9IFtyMzNdLCA4CisJOzsKKwl4bWEubAkJZjM2ID0gZjEyLCBmNiwgZjAKKwl4bWEuaHUJCWYzNyA9IGYxMiwgZjYsIGYwCisJOzsKKwlsZGY4CQlmMTIgPSBbcjMzXSwgOAorCTs7CisJZ2V0Zi5zaWcJcjIyID0gZjM0CisJeG1hLmwJCWYzOCA9IGYxMywgZjYsIGYwCisJeG1hLmh1CQlmMzkgPSBmMTMsIGY2LCBmMAorCTs7CisJZ2V0Zi5zaWcJcjIzID0gZjM1CisJbGRmOAkJZjEzID0gW3IzM10sIDgKKwk7OworCWdldGYuc2lnCXIyNCA9IGYzNgorCXhtYS5sCQlmMzIgPSBmMTAsIGY2LCBmMAorCXhtYS5odQkJZjMzID0gZjEwLCBmNiwgZjAKKwlici5jbG9vcC5kcHRrCS5ncnQ3CisKKwlnZXRmLnNpZwlyMjUgPSBmMzcKKwk7OworCWdldGYuc2lnCXIyNiA9IGYzOAorCXhtYS5sCQlmMzQgPSBmMTEsIGY2LCBmMAorCXhtYS5odQkJZjM1ID0gZjExLCBmNiwgZjAKKwlicgkJLkxjajcKKworLmdydDc6CWdldGYuc2lnCXIyNSA9IGYzNworCWxkZjgJCWYxMCA9IFtyMzNdLCA4CisJOzsKKwlnZXRmLnNpZwlyMjYgPSBmMzgKKwl4bWEubAkJZjM0ID0gZjExLCBmNiwgZjAKKwl4bWEuaHUJCWYzNSA9IGYxMSwgZjYsIGYwCisJYnIJCS5MTDExCisKKworLkxiMDA6CWxkZjgJCWYxMSA9IFtyMzNdLCA4CisJOzsKKwlsZGY4CQlmMTIgPSBbcjMzXSwgOAorCTs7CisJbGRmOAkJZjEzID0gW3IzM10sIDgKKwlici5jbG9vcC5kcHRrCS5ncnQ0CisJOzsKKworCXhtYS5sCQlmMzIgPSBmOSwgZjYsIGYwCisJeG1hLmh1CQlmMzMgPSBmOSwgZjYsIGYwCisJOzsKKwl4bWEubAkJZjM0ID0gZjExLCBmNiwgZjAKKwl4bWEuaHUJCWYzNSA9IGYxMSwgZjYsIGYwCisJOzsKKwlnZXRmLnNpZwlyMjAgPSBmMzIKKwl4bWEubAkJZjM2ID0gZjEyLCBmNiwgZjAKKwl4bWEuaHUJCWYzNyA9IGYxMiwgZjYsIGYwCisJOzsKKwlnZXRmLnNpZwlyMjEgPSBmMzMKKwk7OworCWdldGYuc2lnCXIyMiA9IGYzNAorCXhtYS5sCQlmMzggPSBmMTMsIGY2LCBmMAorCXhtYS5odQkJZjM5ID0gZjEzLCBmNiwgZjAKKwk7OworCWdldGYuc2lnCXIyMyA9IGYzNQorCTs7CisJZ2V0Zi5zaWcJcjI0ID0gZjM2CisJYnIJCS5MY2o0CisKKy5ncnQ0Ogl4bWEubAkJZjMyID0gZjksIGY2LCBmMAorCXhtYS5odQkJZjMzID0gZjksIGY2LCBmMAorCTs7CisJbGRmOAkJZjEwID0gW3IzM10sIDgKKwk7OworCXhtYS5sCQlmMzQgPSBmMTEsIGY2LCBmMAorCXhtYS5odQkJZjM1ID0gZjExLCBmNiwgZjAKKwk7OworCWxkZjgJCWYxMSA9IFtyMzNdLCA4CisJOzsKKwlnZXRmLnNpZwlyMjAgPSBmMzIKKwl4bWEubAkJZjM2ID0gZjEyLCBmNiwgZjAKKwl4bWEuaHUJCWYzNyA9IGYxMiwgZjYsIGYwCisJOzsKKwlnZXRmLnNpZwlyMjEgPSBmMzMKKwlsZGY4CQlmMTIgPSBbcjMzXSwgOAorCTs7CisJZ2V0Zi5zaWcJcjIyID0gZjM0CisJeG1hLmwJCWYzOCA9IGYxMywgZjYsIGYwCisJeG1hLmh1CQlmMzkgPSBmMTMsIGY2LCBmMAorCTs7CisJZ2V0Zi5zaWcJcjIzID0gZjM1CisJbGRmOAkJZjEzID0gW3IzM10sIDgKKwk7OworCWdldGYuc2lnCXIyNCA9IGYzNgorCXhtYS5sCQlmMzIgPSBmMTAsIGY2LCBmMAorCXhtYS5odQkJZjMzID0gZjEwLCBmNiwgZjAKKwlici5jbG9vcC5kcHRrCS5MTDAwCisJYnIJCS5MY2o4CisKK0MgKioqIE1BSU4gTE9PUCBTVEFSVCAqKioKKwlBTElHTigzMikKKy5MdG9wOgorCS5wcmVkLnJlbCAibXV0ZXgiLHA2LHA3CitDCS5tZmkKKwlnZXRmLnNpZwlyMjQgPSBmMzYKKwl4bWEubAkJZjMyID0gZjEwLCBmNiwgZjAKKyAgKHA2KQlzdWIJCXIxNSA9IHIxOSwgcjI3LCAxCitDCS5tZmkKKwlzdDgJCVtyMzJdID0gcjE5LCA4CisJeG1hLmh1CQlmMzMgPSBmMTAsIGY2LCBmMAorICAocDcpCXN1YgkJcjE1ID0gcjE5LCByMjcKKwk7OworLkxMMDA6CitDCS5tZmkKKwlnZXRmLnNpZwlyMjUgPSBmMzcKKwlub3AuZiAwCisJY21wLmx0dQkJcDYsIHA3ID0gcjE1LCByMjAKK0MJLm1pYgorCWxkZjgJCWYxMCA9IFtyMzNdLCA4CisJc3ViCQlyMTYgPSByMTUsIHIyMAorCW5vcC5iIDAKKwk7OworCitDCS5tZmkKKwlnZXRmLnNpZwlyMjYgPSBmMzgKKwl4bWEubAkJZjM0ID0gZjExLCBmNiwgZjAKKyAgKHA2KQlzdWIJCXIxNSA9IHIxNiwgcjIxLCAxCitDCS5tZmkKKwlzdDgJCVtyMzJdID0gcjE2LCA4CisJeG1hLmh1CQlmMzUgPSBmMTEsIGY2LCBmMAorICAocDcpCXN1YgkJcjE1ID0gcjE2LCByMjEKKwk7OworLkxMMTE6CitDCS5tZmkKKwlnZXRmLnNpZwlyMjcgPSBmMzkKKwlub3AuZiAwCisJY21wLmx0dQkJcDYsIHA3ID0gcjE1LCByMjIKK0MJLm1pYgorCWxkZjgJCWYxMSA9IFtyMzNdLCA4CisJc3ViCQlyMTcgPSByMTUsIHIyMgorCW5vcC5iIDAKKwk7OworCitDCS5tZmkKKwlnZXRmLnNpZwlyMjAgPSBmMzIKKwl4bWEubAkJZjM2ID0gZjEyLCBmNiwgZjAKKyAgKHA2KQlzdWIJCXIxNSA9IHIxNywgcjIzLCAxCitDCS5tZmkKKwlzdDgJCVtyMzJdID0gcjE3LCA4CisJeG1hLmh1CQlmMzcgPSBmMTIsIGY2LCBmMAorICAocDcpCXN1YgkJcjE1ID0gcjE3LCByMjMKKwk7OworLkxMMTA6CitDCS5tZmkKKwlnZXRmLnNpZwlyMjEgPSBmMzMKKwlub3AuZiAwCisJY21wLmx0dQkJcDYsIHA3ID0gcjE1LCByMjQKK0MJLm1pYgorCWxkZjgJCWYxMiA9IFtyMzNdLCA4CisJc3ViCQlyMTggPSByMTUsIHIyNAorCW5vcC5iIDAKKwk7OworCitDCS5tZmkKKwlnZXRmLnNpZwlyMjIgPSBmMzQKKwl4bWEubAkJZjM4ID0gZjEzLCBmNiwgZjAKKyAgKHA2KQlzdWIJCXIxNSA9IHIxOCwgcjI1LCAxCitDCS5tZmkKKwlzdDgJCVtyMzJdID0gcjE4LCA4CisJeG1hLmh1CQlmMzkgPSBmMTMsIGY2LCBmMAorICAocDcpCXN1YgkJcjE1ID0gcjE4LCByMjUKKwk7OworLkxMMDE6CitDCS5tZmkKKwlnZXRmLnNpZwlyMjMgPSBmMzUKKwlub3AuZiAwCisJY21wLmx0dQkJcDYsIHA3ID0gcjE1LCByMjYKK0MJLm1pYgorCWxkZjgJCWYxMyA9IFtyMzNdLCA4CisJc3ViCQlyMTkgPSByMTUsIHIyNgorCWJyLmNsb29wLnNwdGsuZmV3IC5MdG9wCitDICoqKiBNQUlOIExPT1AgRU5EICoqKgorCTs7CisKKwlnZXRmLnNpZwlyMjQgPSBmMzYKKwl4bWEubAkJZjMyID0gZjEwLCBmNiwgZjAKKyAgKHA2KQlzdWIJCXIxNSA9IHIxOSwgcjI3LCAxCisJc3Q4CQlbcjMyXSA9IHIxOSwgOAorCXhtYS5odQkJZjMzID0gZjEwLCBmNiwgZjAKKyAgKHA3KQlzdWIJCXIxNSA9IHIxOSwgcjI3CisJOzsKKy5MY2o4OglnZXRmLnNpZwlyMjUgPSBmMzcKKwljbXAubHR1CQlwNiwgcDcgPSByMTUsIHIyMAorCXN1YgkJcjE2ID0gcjE1LCByMjAKKwk7OworCWdldGYuc2lnCXIyNiA9IGYzOAorCXhtYS5sCQlmMzQgPSBmMTEsIGY2LCBmMAorICAocDYpCXN1YgkJcjE1ID0gcjE2LCByMjEsIDEKKwlzdDgJCVtyMzJdID0gcjE2LCA4CisJeG1hLmh1CQlmMzUgPSBmMTEsIGY2LCBmMAorICAocDcpCXN1YgkJcjE1ID0gcjE2LCByMjEKKwk7OworLkxjajc6CWdldGYuc2lnCXIyNyA9IGYzOQorCWNtcC5sdHUJCXA2LCBwNyA9IHIxNSwgcjIyCisJc3ViCQlyMTcgPSByMTUsIHIyMgorCTs7CisJZ2V0Zi5zaWcJcjIwID0gZjMyCisJeG1hLmwJCWYzNiA9IGYxMiwgZjYsIGYwCisgIChwNikJc3ViCQlyMTUgPSByMTcsIHIyMywgMQorCXN0OAkJW3IzMl0gPSByMTcsIDgKKwl4bWEuaHUJCWYzNyA9IGYxMiwgZjYsIGYwCisgIChwNykJc3ViCQlyMTUgPSByMTcsIHIyMworCTs7CisuTGNqNjoJZ2V0Zi5zaWcJcjIxID0gZjMzCisJY21wLmx0dQkJcDYsIHA3ID0gcjE1LCByMjQKKwlzdWIJCXIxOCA9IHIxNSwgcjI0CisJOzsKKwlnZXRmLnNpZwlyMjIgPSBmMzQKKwl4bWEubAkJZjM4ID0gZjEzLCBmNiwgZjAKKyAgKHA2KQlzdWIJCXIxNSA9IHIxOCwgcjI1LCAxCisJc3Q4CQlbcjMyXSA9IHIxOCwgOAorCXhtYS5odQkJZjM5ID0gZjEzLCBmNiwgZjAKKyAgKHA3KQlzdWIJCXIxNSA9IHIxOCwgcjI1CisJOzsKKy5MY2o1OglnZXRmLnNpZwlyMjMgPSBmMzUKKwljbXAubHR1CQlwNiwgcDcgPSByMTUsIHIyNgorCXN1YgkJcjE5ID0gcjE1LCByMjYKKwk7OworCWdldGYuc2lnCXIyNCA9IGYzNgorICAocDYpCXN1YgkJcjE1ID0gcjE5LCByMjcsIDEKKwlzdDgJCVtyMzJdID0gcjE5LCA4CisgIChwNykJc3ViCQlyMTUgPSByMTksIHIyNworCTs7CisuTGNqNDoJZ2V0Zi5zaWcJcjI1ID0gZjM3CisJY21wLmx0dQkJcDYsIHA3ID0gcjE1LCByMjAKKwlzdWIJCXIxNiA9IHIxNSwgcjIwCisJOzsKKwlnZXRmLnNpZwlyMjYgPSBmMzgKKyAgKHA2KQlzdWIJCXIxNSA9IHIxNiwgcjIxLCAxCisJc3Q4CQlbcjMyXSA9IHIxNiwgOAorICAocDcpCXN1YgkJcjE1ID0gcjE2LCByMjEKKwk7OworLkxjajM6CWdldGYuc2lnCXIyNyA9IGYzOQorCWNtcC5sdHUJCXA2LCBwNyA9IHIxNSwgcjIyCisJc3ViCQlyMTcgPSByMTUsIHIyMgorCTs7CisgIChwNikJc3ViCQlyMTUgPSByMTcsIHIyMywgMQorCXN0OAkJW3IzMl0gPSByMTcsIDgKKyAgKHA3KQlzdWIJCXIxNSA9IHIxNywgcjIzCisJOzsKKy5MY2oyOgljbXAubHR1CQlwNiwgcDcgPSByMTUsIHIyNAorCXN1YgkJcjE4ID0gcjE1LCByMjQKKwk7OworICAocDYpCXN1YgkJcjE1ID0gcjE4LCByMjUsIDEKKwlzdDgJCVtyMzJdID0gcjE4LCA4CisgIChwNykJc3ViCQlyMTUgPSByMTgsIHIyNQorCTs7CisuTGNqMToJY21wLmx0dQkJcDYsIHA3ID0gcjE1LCByMjYKKwlzdWIJCXIxOSA9IHIxNSwgcjI2CisJOzsKKyAgKHA2KQlzdWIJCXI4ID0gcjE5LCByMjcsIDEKKwlzdDgJCVtyMzJdID0gcjE5CisgIChwNykJc3ViCQlyOCA9IHIxOSwgcjI3CisJbW92IGFyLmxjID0gcjIKKwlici5yZXQuc3B0ay5tYW55IGIwCitFUElMT0dVRSgpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vaWE2NC9jbmRfYW9yc19uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vaWE2NC9jbmRfYW9yc19uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGQwNTUyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9pYTY0L2NuZF9hb3JzX24uYXNtCkBAIC0wLDAgKzEsMjY0IEBACitkbmwgIElBLTY0IG1wbl9jbmRfYWRkX24vbXBuX2NuZF9zdWJfbi4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICAgIGN5Y2xlcy9saW1iCitDIEl0YW5pdW06ICAgICAgPworQyBJdGFuaXVtIDI6ICAgIDEuNQorCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgY25kJywgYHIzMicpCitkZWZpbmUoYHJwJywgIGByMzMnKQorZGVmaW5lKGB1cCcsICBgcjM0JykKK2RlZmluZShgdnAnLCAgYHIzNScpCitkZWZpbmUoYG4nLCAgIGByMzYnKQorCitpZmRlZihgT1BFUkFUSU9OX2NuZF9hZGRfbicsYAorICBkZWZpbmUoQUREU1VCLAlhZGQpCisgIGRlZmluZShDTkQsCQlsdHUpCisgIGRlZmluZShJTkNSLAkJMSkKKyAgZGVmaW5lKExJTSwJCS0xKQorICBkZWZpbmUoZnVuYywgICAgbXBuX2NuZF9hZGRfbikKKycpCitpZmRlZihgT1BFUkFUSU9OX2NuZF9zdWJfbicsYAorICBkZWZpbmUoQUREU1VCLAlzdWIpCisgIGRlZmluZShDTkQsCQlndHUpCisgIGRlZmluZShJTkNSLAkJLTEpCisgIGRlZmluZShMSU0sCQkwKQorICBkZWZpbmUoZnVuYywgICAgbXBuX2NuZF9zdWJfbikKKycpCisKK2RlZmluZShQRkRJU1QsIDE2MCkKKworQyBTb21lIHVzZWZ1bCBhbGlhc2VzIGZvciByZWdpc3RlcnMgd2UgdXNlCitkZWZpbmUoYHUwJyxgcjE0JykgZGVmaW5lKGB1MScsYHIxNScpIGRlZmluZShgdTInLGByMTYnKSBkZWZpbmUoYHUzJyxgcjE3JykKK2RlZmluZShgeDAnLGByMjAnKSBkZWZpbmUoYHgxJyxgcjIxJykgZGVmaW5lKGB4MicsYHIyMicpIGRlZmluZShgeDMnLGByMjMnKQorZGVmaW5lKGB2MCcsYHIyNCcpIGRlZmluZShgdjEnLGByMjUnKSBkZWZpbmUoYHYyJyxgcjI2JykgZGVmaW5lKGB2MycsYHIyNycpCitkZWZpbmUoYHcwJyxgcjI4JykgZGVmaW5lKGB3MScsYHIyOScpIGRlZmluZShgdzInLGByMzAnKSBkZWZpbmUoYHczJyxgcjMxJykKK2RlZmluZShgdXAxJyxgdXAnKSBkZWZpbmUoYHVwMicsYHI4JykgZGVmaW5lKGB1cGFkdicsYHIxJykKK2RlZmluZShgdnAxJyxgdnAnKSBkZWZpbmUoYHZwMicsYHI5JykgZGVmaW5lKGB2cGFkdicsYHIxMScpCitkZWZpbmUoYHJwMScsYHJwJykgZGVmaW5lKGBycDInLGByMTAnKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9jbmRfYWRkX24gbXBuX2NuZF9zdWJfbikKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKGZ1bmMpCisJLnByb2xvZ3VlCisJLnNhdmUJYXIubGMsIHIyCisJLmJvZHkKK2lmZGVmKGBIQVZFX0FCSV8zMicsYAorCWFkZHA0CXJwID0gMCwgcnAJCUMJCQkJTSBJCisJYWRkcDQJdXAgPSAwLCB1cAkJQwkJCQlNIEkKKwlub3AuaQkwCisJYWRkcDQJdnAgPSAwLCB2cAkJQwkJCQlNIEkKKwlub3AubQkwCisJenh0NAluID0gbgkJCUMJCQkJSQorCTs7CisnKQorIHsubW1pOwlhbmQJcjMgPSAzLCBuCQlDCQkJCU0gSQorCWFkZAluID0gLTEsIG4JCUMJCQkJTSBJCisJbW92CXIyID0gYXIubGMJCUMJCQkJSTAKK317Lm1taTsJY21wLm5lCXA2LCBwNyA9IDAsIGNuZAkJQwkJCQlNIEkKKwlhZGQJdnAyID0gOCwgdnAJCUMJCQkJTSBJCisJYWRkCXVwMiA9IDgsIHVwCQlDCQkJCU0gSQorCTs7Cit9ey5tbWk7CWFkZAl1cGFkdiA9IFBGRElTVCwgdXAJQwkJCQlNIEkKKwlhZGQJdnBhZHYgPSBQRkRJU1QsIHZwCUMJCQkJTSBJCisJc2hyLnUJbiA9IG4sIDIJCUMJCQkJSTAKKwkucHJlZC5yZWwgIm11dGV4IiwgcDYsIHA3Cit9ey5tbWk7CWFkZAlycDIgPSA4LCBycAkJQwkJCQlNIEkKKyAgIChwNikJbW92CWNuZCA9IC0xCQlDCQkJCU0gSQorICAgKHA3KQltb3YJY25kID0gMAkJCUMJCQkJTSBJCisJOzsKK30JY21wLmVxCXA5LCBwMCA9IDEsIHIzCQlDCQkJCU0gSQorCWNtcC5lcQlwNywgcDAgPSAyLCByMwkJQwkJCQlNIEkKKwljbXAuZXEJcDgsIHAwID0gMywgcjMJCUMJCQkJTSBJCisgICAocDkpCWJyCUwoYjEpCQkJQwkJCQlCCisgICAocDcpCWJyCUwoYjIpCQkJQwkJCQlCCisgICAocDgpCWJyCUwoYjMpCQkJQwkJCQlCCisJOzsKK0woYjApOgorIHsubW1pOwlsZDgJdjIgPSBbdnAxXSwgMTYJCUMJCQkJTTAxCisJbGQ4CXYzID0gW3ZwMl0sIDE2CQlDCQkJCU0wMQorCW1vdglhci5sYyA9IG4JCUMJCQkJSTAKKwk7OworfQlsZDgJdTIgPSBbdXAxXSwgMTYJCUMJCQkJTTAxCisJbGQ4CXUzID0gW3VwMl0sIDE2CQlDCQkJCU0wMQorCWFuZAl4MiA9IHYyLCBjbmQJCUMJCQkJTSBJCisJYW5kCXgzID0gdjMsIGNuZAkJQwkJCQlNIEkKKwk7OworCUFERFNVQgl3MiA9IHUyLCB4MgkJQwkJCQlNIEkKKwlBRERTVUIJdzMgPSB1MywgeDMJCUMJCQkJTSBJCisJOzsKKwlsZDgJdjAgPSBbdnAxXSwgMTYJCUMJCQkJTTAxCisJbGQ4CXYxID0gW3ZwMl0sIDE2CQlDCQkJCU0wMQorCWNtcC5DTkQJcDgsIHAwID0gdzIsIHUyCQlDCQkJCU0gSQorCWNtcC5DTkQJcDksIHAwID0gdzMsIHUzCQlDCQkJCU0gSQorCWJyCUwobG8wKQorCitMKGIxKToJbGQ4CXYxID0gW3ZwMV0sIDgJCUMJCQkJTTAxCisJYWRkCXZwMiA9IDgsIHZwMgkJQwkJCQlNIEkKKwlhZGQJcnAyID0gOCwgcnAyCQlDCQkJCU0gSQorCTs7CisJbGQ4CXUxID0gW3VwMV0sIDgJCUMJCQkJTTAxCisJYWRkCXVwMiA9IDgsIHVwMgkJQwkJCQlNIEkKKwlhbmQJeDEgPSB2MSwgY25kCQlDCQkJCU0gSQorCTs7CisJQUREU1VCCXcxID0gdTEsIHgxCQlDCQkJCU0gSQorCWNtcC5uZQlwMTAsIHAwID0gMCwgbgorCWFkZAluID0gLTEsIG4KKwk7OworCWNtcC5DTkQJcDcsIHAwID0gdzEsIHUxCQlDCQkJCU0gSQorCXN0OAlbcnAxXSA9IHcxLCA4CQlDCQkJCU0yMworICAocDEwKQlicglMKGIwKQorCTs7CisJbW92CXI4ID0gMAkJCUMJCQkJTSBJCisJYnIJTChlMSkKKworTChiMyk6CWxkOAl2MyA9IFt2cDFdLCA4CQlDCQkJCU0wMQorCWFkZAl2cDIgPSA4LCB2cDIJCUMJCQkJTSBJCisJYWRkCXJwMiA9IDgsIHJwMgkJQwkJCQlNIEkKKwk7OworCWxkOAl1MyA9IFt1cDFdLCA4CQlDCQkJCU0wMQorCWFkZAl1cDIgPSA4LCB1cDIJCUMJCQkJTSBJCisJYW5kCXgzID0gdjMsIGNuZAkJQwkJCQlNIEkKKwk7OworCUFERFNVQgl3MyA9IHUzLCB4MwkJQwkJCQlNIEkKKwk7OworCWNtcC5DTkQJcDksIHAwID0gdzMsIHUzCQlDCQkJCU0gSQorCXN0OAlbcnAxXSA9IHczLCA4CQlDCQkJCU0yMworCUMgZmFsbCB0aHJvdWdoCisKK0woYjIpOgorIHsubW1pOwlsZDgJdjAgPSBbdnAxXSwgMTYJCUMJCQkJTTAxCisJbGQ4CXYxID0gW3ZwMl0sIDE2CQlDCQkJCU0wMQorCW1vdglhci5sYyA9IG4JCUMJCQkJSTAKKwk7OworfQlsZDgJdTAgPSBbdXAxXSwgMTYJCUMJCQkJTTAxCisJbGQ4CXUxID0gW3VwMl0sIDE2CQlDCQkJCU0wMQorCWFuZAl4MCA9IHYwLCBjbmQJCUMJCQkJTSBJCisJYW5kCXgxID0gdjEsIGNuZAkJQwkJCQlNIEkKKwk7OworCUFERFNVQgl3MCA9IHUwLCB4MAkJQwkJCQlNIEkKKwlBRERTVUIJdzEgPSB1MSwgeDEJCUMJCQkJTSBJCisJYnIuY2xvb3AuZHB0awlMKGd0MikJCUMJCQkJQgorCTs7CisJY21wLkNORAlwNiwgcDAgPSB3MCwgdTAJCUMJCQkJTSBJCisJYnIJCUwoZTIpCQlDCQkJCUIKK0woZ3QyKToKKwlsZDgJdjIgPSBbdnAxXSwgMTYJCUMJCQkJTTAxCisJbGQ4CXYzID0gW3ZwMl0sIDE2CQlDCQkJCU0wMQorCWNtcC5DTkQJcDYsIHAwID0gdzAsIHUwCQlDCQkJCU0gSQorCWNtcC5DTkQJcDcsIHAwID0gdzEsIHUxCQlDCQkJCU0gSQorCWJyCQlMKGxvMikJCUMJCQkJQgorCisKK0MgKioqIE1BSU4gTE9PUCBTVEFSVCAqKioKK0MJQUxJR04oMzIpCitMKHRvcCk6Cisgey5tbWk7CWxkOAl2MiA9IFt2cDFdLCAxNgkJQwkJCQlNMDEKKwlsZDgJdjMgPSBbdnAyXSwgMTYJCUMJCQkJTTAxCisJY21wLkNORAlwNiwgcDAgPSB3MCwgdTAJCUMJCQkJTSBJCit9ey5tbWk7CXN0OAlbcnAxXSA9IHcyLCAxNgkJQwkJCQlNMjMKKwlzdDgJW3JwMl0gPSB3MywgMTYJCUMJCQkJTTIzCisJY21wLkNORAlwNywgcDAgPSB3MSwgdTEJCUMJCQkJTSBJCisJOzsKK30KK0wobG8yKToKKyB7Lm1taTsJbGQ4CXUyID0gW3VwMV0sIDE2CQlDCQkJCU0wMQorCWxkOAl1MyA9IFt1cDJdLCAxNgkJQwkJCQlNMDEKKyAgIChwOSkJY21wZXFvcglwNiwgcDAgPSBMSU0sIHcwCUMJCQkJTSBJCit9ey5tbWk7CWFuZAl4MiA9IHYyLCBjbmQJCUMJCQkJTSBJCisJYW5kCXgzID0gdjMsIGNuZAkJQwkJCQlNIEkKKyAgIChwOSkJYWRkCXcwID0gSU5DUiwgdzAJCUMJCQkJTSBJCisJOzsKK317Lm1taTsJQUREU1VCCXcyID0gdTIsIHgyCQlDCQkJCU0gSQorICAgKHA2KQljbXBlcW9yCXA3LCBwMCA9IExJTSwgdzEJQwkJCQlNIEkKKyAgIChwNikJYWRkCXcxID0gSU5DUiwgdzEJCUMJCQkJTSBJCit9ey5tbWk7CUFERFNVQgl3MyA9IHUzLCB4MwkJQwkJCQlNIEkKKwlsZmV0Y2gJW3VwYWR2XSwgMzIKKwlub3AJMAorCTs7Cit9ey5tbWk7CWxkOAl2MCA9IFt2cDFdLCAxNgkJQwkJCQlNMDEKKwlsZDgJdjEgPSBbdnAyXSwgMTYJCUMJCQkJTTAxCisJY21wLkNORAlwOCwgcDAgPSB3MiwgdTIJCUMJCQkJTSBJCit9ey5tbWk7CXN0OAlbcnAxXSA9IHcwLCAxNgkJQwkJCQlNMjMKKwlzdDgJW3JwMl0gPSB3MSwgMTYJCUMJCQkJTTIzCisJY21wLkNORAlwOSwgcDAgPSB3MywgdTMJCUMJCQkJTSBJCisJOzsKK30KK0wobG8wKToKKyB7Lm1taTsJbGQ4CXUwID0gW3VwMV0sIDE2CQlDCQkJCU0wMQorCWxkOAl1MSA9IFt1cDJdLCAxNgkJQwkJCQlNMDEKKyAgIChwNykJY21wZXFvcglwOCwgcDAgPSBMSU0sIHcyCUMJCQkJTSBJCit9ey5tbWk7CWFuZAl4MCA9IHYwLCBjbmQJCUMJCQkJTSBJCisJYW5kCXgxID0gdjEsIGNuZAkJQwkJCQlNIEkKKyAgIChwNykJYWRkCXcyID0gSU5DUiwgdzIJCUMJCQkJTSBJCisJOzsKK317Lm1taTsJQUREU1VCCXcwID0gdTAsIHgwCQlDCQkJCU0gSQorICAgKHA4KQljbXBlcW9yCXA5LCBwMCA9IExJTSwgdzMJQwkJCQlNIEkKKyAgIChwOCkJYWRkCXczID0gSU5DUiwgdzMJCUMJCQkJTSBJCit9ey5tbWI7CUFERFNVQgl3MSA9IHUxLCB4MQkJQwkJCQlNIEkKKwlsZmV0Y2gJW3ZwYWR2XSwgMzIKKwlici5jbG9vcC5kcHRrCUwodG9wKQkJQwkJCQlCCisJOzsKK30KK0MgKioqIE1BSU4gTE9PUCBFTkQgKioqCisKKworTChlbmQpOgorIHsubW1pOwlzdDgJW3JwMV0gPSB3MiwgMTYJCUMJCQkJTTIzCisJc3Q4CVtycDJdID0gdzMsIDE2CQlDCQkJCU0yMworCWNtcC5DTkQJcDYsIHAwID0gdzAsIHUwCQlDCQkJCU0gSQorCTs7Cit9CitMKGUyKToKKyB7Lm1taTsJY21wLkNORAlwNywgcDAgPSB3MSwgdTEJCUMJCQkJTSBJCisgICAocDkpCWNtcGVxb3IJcDYsIHAwID0gTElNLCB3MAlDCQkJCU0gSQorICAgKHA5KQlhZGQJdzAgPSBJTkNSLCB3MAkJQwkJCQlNIEkKKwk7OworfXsubW1pOwltb3YJcjggPSAwCQkJQwkJCQlNIEkKKyAgIChwNikJY21wZXFvcglwNywgcDAgPSBMSU0sIHcxCUMJCQkJTSBJCisgICAocDYpCWFkZAl3MSA9IElOQ1IsIHcxCQlDCQkJCU0gSQorCTs7Cit9ey5tbWk7CXN0OAlbcnAxXSA9IHcwLCAxNgkJQwkJCQlNMjMKKwlzdDgJW3JwMl0gPSB3MSwgMTYJCUMJCQkJTTIzCisJbW92CWFyLmxjID0gcjIJCUMJCQkJSTAKK30KK0woZTEpOgorIHsubW1iOwlub3AJMAorICAgKHA3KQltb3YJcjggPSAxCQkJQwkJCQlNIEkKKwlici5yZXQuc3B0ay5tYW55IGIwCQlDCQkJCUIKK30KK0VQSUxPR1VFKCkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9pYTY0L2NvcHlkLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vaWE2NC9jb3B5ZC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk0YTFhZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vaWE2NC9jb3B5ZC5hc20KQEAgLTAsMCArMSwxODYgQEAKK2RubCAgSUEtNjQgbXBuX2NvcHlkIC0tIGNvcHkgbGltYiB2ZWN0b3IsIGRlY3JlbWVudGluZy4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDEsIDIwMDIsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgIGN5Y2xlcy9saW1iCitDIEl0YW5pdW06ICAgIDEKK0MgSXRhbml1bSAyOiAgMC41CisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyBycCA9IHIzMgorQyBzcCA9IHIzMworQyBuID0gcjM0CisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fY29weWQpCisJLnByb2xvZ3VlCisJLnNhdmUgYXIubGMsIHIyCisJLmJvZHkKK2lmZGVmKGBIQVZFX0FCSV8zMicsCitgCWFkZHA0CQlyMzIgPSAwLCByMzIKKwlhZGRwNAkJcjMzID0gMCwgcjMzCisJc3h0NAkJcjM0ID0gcjM0CisJOzsKKycpCit7Lm1taQorCXNobGFkZAkJcjMyID0gcjM0LCAzLCByMzIKKwlzaGxhZGQJCXIzMyA9IHIzNCwgMywgcjMzCisJbW92LmkJCXIyID0gYXIubGMKK30KK3subW1pCisJYW5kCQlyMTQgPSAzLCByMzQKKwljbXAuZ2UJCXAxNCwgcDE1ID0gMywgcjM0CisJYWRkCQlyMzQgPSAtNCwgcjM0CisJOzsKK30KK3subW1pCisJY21wLmVxCQlwOCwgcDAgPSAxLCByMTQKKwljbXAuZXEJCXAxMCwgcDAgPSAyLCByMTQKKwljbXAuZXEJCXAxMiwgcDAgPSAzLCByMTQKK30KK3suYmJiCisgIChwOCkJYnIuZHB0awkJLkxiMDEKKyAgKHAxMCkJYnIuZHB0awkJLkxiMTAKKyAgKHAxMikJYnIuZHB0awkJLkxiMTEKK30KKworLkxiMDA6CUMgIG4gPSAwLCA0LCA4LCAxMiwgLi4uCisJYWRkCQlyMzIgPSAtOCwgcjMyCisJYWRkCQlyMzMgPSAtOCwgcjMzCisgIChwMTQpCWJyLmRwdGsJCS5MczAwCisJOzsKKwlhZGQJCXIyMSA9IC04LCByMzMKKwlsZDgJCXIxNiA9IFtyMzNdLCAtMTYKKwlzaHIJCXIxNSA9IHIzNCwgMgorCTs7CisJbGQ4CQlyMTcgPSBbcjIxXSwgLTE2CisJbW92LmkJCWFyLmxjID0gcjE1CisJbGQ4CQlyMTggPSBbcjMzXSwgLTE2CisJYWRkCQlyMjAgPSAtOCwgcjMyCisJOzsKKwlsZDgJCXIxOSA9IFtyMjFdLCAtMTYKKwlici5jbG9vcC5kcHRrCS5Mb29wCisJOzsKKwlici5zcHRrCQkuTGVuZAorCTs7CisKKy5MYjAxOglDICBuID0gMSwgNSwgOSwgMTMsIC4uLgorCWFkZAkJcjIxID0gLTgsIHIzMworCWFkZAkJcjIwID0gLTgsIHIzMgorCWFkZAkJcjMzID0gLTE2LCByMzMKKwlhZGQJCXIzMiA9IC0xNiwgcjMyCisJOzsKKwlsZDgJCXIxOSA9IFtyMjFdLCAtMTYKKwlzaHIJCXIxNSA9IHIzNCwgMgorICAocDE0KQlici5kcHRrCQkuTHMwMQorCTs7CisJbGQ4CQlyMTYgPSBbcjMzXSwgLTE2CisJbW92LmkJCWFyLmxjID0gcjE1CisJOzsKKwlsZDgJCXIxNyA9IFtyMjFdLCAtMTYKKwlsZDgJCXIxOCA9IFtyMzNdLCAtMTYKKwlici5zcHRrCQkuTGkwMQorCTs7CisKKy5MYjEwOglDICBuID0gMiw2LCAxMCwgMTQsIC4uLgorCWFkZAkJcjIxID0gLTE2LCByMzMKKwlzaHIJCXIxNSA9IHIzNCwgMgorCWFkZAkJcjIwID0gLTE2LCByMzIKKwlhZGQJCXIzMiA9IC04LCByMzIKKwlhZGQJCXIzMyA9IC04LCByMzMKKwk7OworCWxkOAkJcjE4ID0gW3IzM10sIC0xNgorCWxkOAkJcjE5ID0gW3IyMV0sIC0xNgorCW1vdi5pCQlhci5sYyA9IHIxNQorICAocDE0KQlici5kcHRrCQkuTHMxMAorCTs7CisJbGQ4CQlyMTYgPSBbcjMzXSwgLTE2CisJbGQ4CQlyMTcgPSBbcjIxXSwgLTE2CisJYnIuc3B0awkJLkxpMTAKKwk7OworCisuTGIxMToJQyAgbiA9IDMsIDcsIDExLCAxNSwgLi4uCisJYWRkCQlyMjEgPSAtOCwgcjMzCisJYWRkCQlyMjAgPSAtOCwgcjMyCisJYWRkCQlyMzMgPSAtMTYsIHIzMworCWFkZAkJcjMyID0gLTE2LCByMzIKKwk7OworCWxkOAkJcjE3ID0gW3IyMV0sIC0xNgorCXNocgkJcjE1ID0gcjM0LCAyCisJOzsKKwlsZDgJCXIxOCA9IFtyMzNdLCAtMTYKKwltb3YuaQkJYXIubGMgPSByMTUKKwlsZDgJCXIxOSA9IFtyMjFdLCAtMTYKKyAgKHAxNCkJYnIuZHB0awkJLkxzMTEKKwk7OworCWxkOAkJcjE2ID0gW3IzM10sIC0xNgorCWJyLnNwdGsJCS5MaTExCisJOzsKKworCUFMSUdOKDMyKQorLkxvb3A6CisuTGkwMDoKK3subW1iCisJc3Q4CQlbcjMyXSA9IHIxNiwgLTE2CisJbGQ4CQlyMTYgPSBbcjMzXSwgLTE2CisJbm9wLmIJCTAKK30KKy5MaTExOgorey5tbWIKKwlzdDgJCVtyMjBdID0gcjE3LCAtMTYKKwlsZDgJCXIxNyA9IFtyMjFdLCAtMTYKKwlub3AuYgkJMAorCTs7Cit9CisuTGkxMDoKK3subW1iCisJc3Q4CQlbcjMyXSA9IHIxOCwgLTE2CisJbGQ4CQlyMTggPSBbcjMzXSwgLTE2CisJbm9wLmIJCTAKK30KKy5MaTAxOgorey5tbWIKKwlzdDgJCVtyMjBdID0gcjE5LCAtMTYKKwlsZDgJCXIxOSA9IFtyMjFdLCAtMTYKKwlici5jbG9vcC5kcHRrCS5Mb29wCisJOzsKK30KKy5MZW5kOglzdDgJCVtyMzJdID0gcjE2LCAtMTYKKy5MczExOglzdDgJCVtyMjBdID0gcjE3LCAtMTYKKwk7OworLkxzMTA6CXN0OAkJW3IzMl0gPSByMTgsIC0xNgorLkxzMDE6CXN0OAkJW3IyMF0gPSByMTksIC0xNgorLkxzMDA6CW1vdi5pCQlhci5sYyA9IHIyCisJYnIucmV0LnNwdGsubWFueSBiMAorRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2lhNjQvY29weWkuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9pYTY0L2NvcHlpLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWVkMTkyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9pYTY0L2NvcHlpLmFzbQpAQCAtMCwwICsxLDE4MiBAQAorZG5sICBJQS02NCBtcG5fY29weWkgLS0gY29weSBsaW1iIHZlY3RvciwgaW5jcmVtZW50aW5nLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3Jiam9ybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAwMSwgMjAwMiwgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgY3ljbGVzL2xpbWIKK0MgSXRhbml1bTogICAgMQorQyBJdGFuaXVtIDI6ICAwLjUKKworQyBJTlBVVCBQQVJBTUVURVJTCitDIHJwID0gcjMyCitDIHNwID0gcjMzCitDIG4gPSByMzQKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9jb3B5aSkKKwkucHJvbG9ndWUKKwkuc2F2ZSBhci5sYywgcjIKKwkuYm9keQoraWZkZWYoYEhBVkVfQUJJXzMyJywKK2AJYWRkcDQJCXIzMiA9IDAsIHIzMgorCWFkZHA0CQlyMzMgPSAwLCByMzMKKwlzeHQ0CQlyMzQgPSByMzQKKwk7OworJykKK3subW1pCisJbm9wCQkwCisJbm9wCQkwCisJbW92LmkJCXIyID0gYXIubGMKK30KK3subW1pCisJYW5kCQlyMTQgPSAzLCByMzQKKwljbXAuZ2UJCXAxNCwgcDE1ID0gMywgcjM0CisJYWRkCQlyMzQgPSAtNCwgcjM0CisJOzsKK30KK3subW1pCisJY21wLmVxCQlwOCwgcDAgPSAxLCByMTQKKwljbXAuZXEJCXAxMCwgcDAgPSAyLCByMTQKKwljbXAuZXEJCXAxMiwgcDAgPSAzLCByMTQKK30KK3suYmJiCisgIChwOCkJYnIuZHB0awkJLkxiMDEKKyAgKHAxMCkJYnIuZHB0awkJLkxiMTAKKyAgKHAxMikJYnIuZHB0awkJLkxiMTEKK30KKworLkxiMDA6CUMgIG4gPSAwLCA0LCA4LCAxMiwgLi4uCisgIChwMTQpCWJyLmRwdGsJCS5MczAwCisJOzsKKwlhZGQJCXIyMSA9IDgsIHIzMworCWxkOAkJcjE2ID0gW3IzM10sIDE2CisJc2hyCQlyMTUgPSByMzQsIDIKKwk7OworCWxkOAkJcjE3ID0gW3IyMV0sIDE2CisJbW92LmkJCWFyLmxjID0gcjE1CisJbGQ4CQlyMTggPSBbcjMzXSwgMTYKKwlhZGQJCXIyMCA9IDgsIHIzMgorCTs7CisJbGQ4CQlyMTkgPSBbcjIxXSwgMTYKKwlici5jbG9vcC5kcHRrCS5Mb29wCisJOzsKKwlici5zcHRrCQkuTGVuZAorCTs7CisKKy5MYjAxOglDICBuID0gMSwgNSwgOSwgMTMsIC4uLgorCWFkZAkJcjIxID0gMCwgcjMzCisJYWRkCQlyMjAgPSAwLCByMzIKKwlhZGQJCXIzMyA9IDgsIHIzMworCWFkZAkJcjMyID0gOCwgcjMyCisJOzsKKwlsZDgJCXIxOSA9IFtyMjFdLCAxNgorCXNocgkJcjE1ID0gcjM0LCAyCisgIChwMTQpCWJyLmRwdGsJCS5MczAxCisJOzsKKwlsZDgJCXIxNiA9IFtyMzNdLCAxNgorCW1vdi5pCQlhci5sYyA9IHIxNQorCTs7CisJbGQ4CQlyMTcgPSBbcjIxXSwgMTYKKwlsZDgJCXIxOCA9IFtyMzNdLCAxNgorCWJyLnNwdGsJCS5MaTAxCisJOzsKKworLkxiMTA6CUMgIG4gPSAyLDYsIDEwLCAxNCwgLi4uCisJYWRkCQlyMjEgPSA4LCByMzMKKwlhZGQJCXIyMCA9IDgsIHIzMgorCWxkOAkJcjE4ID0gW3IzM10sIDE2CisJc2hyCQlyMTUgPSByMzQsIDIKKwk7OworCWxkOAkJcjE5ID0gW3IyMV0sIDE2CisJbW92LmkJCWFyLmxjID0gcjE1CisgIChwMTQpCWJyLmRwdGsJCS5MczEwCisJOzsKKwlsZDgJCXIxNiA9IFtyMzNdLCAxNgorCWxkOAkJcjE3ID0gW3IyMV0sIDE2CisJYnIuc3B0awkJLkxpMTAKKwk7OworCisuTGIxMToJQyAgbiA9IDMsIDcsIDExLCAxNSwgLi4uCisJYWRkCQlyMjEgPSAwLCByMzMKKwlhZGQJCXIyMCA9IDAsIHIzMgorCWFkZAkJcjMzID0gOCwgcjMzCisJYWRkCQlyMzIgPSA4LCByMzIKKwk7OworCWxkOAkJcjE3ID0gW3IyMV0sIDE2CisJc2hyCQlyMTUgPSByMzQsIDIKKwk7OworCWxkOAkJcjE4ID0gW3IzM10sIDE2CisJbW92LmkJCWFyLmxjID0gcjE1CisJbGQ4CQlyMTkgPSBbcjIxXSwgMTYKKyAgKHAxNCkJYnIuZHB0awkJLkxzMTEKKwk7OworCWxkOAkJcjE2ID0gW3IzM10sIDE2CisJYnIuc3B0awkJLkxpMTEKKwk7OworCisJQUxJR04oMzIpCisuTG9vcDoKKy5MaTAwOgorey5tbWIKKwlzdDgJCVtyMzJdID0gcjE2LCAxNgorCWxkOAkJcjE2ID0gW3IzM10sIDE2CisJbm9wLmIJCTAKK30KKy5MaTExOgorey5tbWIKKwlzdDgJCVtyMjBdID0gcjE3LCAxNgorCWxkOAkJcjE3ID0gW3IyMV0sIDE2CisJbm9wLmIJCTAKKwk7OworfQorLkxpMTA6Cit7Lm1tYgorCXN0OAkJW3IzMl0gPSByMTgsIDE2CisJbGQ4CQlyMTggPSBbcjMzXSwgMTYKKwlub3AuYgkJMAorfQorLkxpMDE6Cit7Lm1tYgorCXN0OAkJW3IyMF0gPSByMTksIDE2CisJbGQ4CQlyMTkgPSBbcjIxXSwgMTYKKwlici5jbG9vcC5kcHRrCS5Mb29wCisJOzsKK30KKy5MZW5kOglzdDgJCVtyMzJdID0gcjE2LCAxNgorLkxzMTE6CXN0OAkJW3IyMF0gPSByMTcsIDE2CisJOzsKKy5MczEwOglzdDgJCVtyMzJdID0gcjE4LCAxNgorLkxzMDE6CXN0OAkJW3IyMF0gPSByMTksIDE2CisuTHMwMDoJbW92LmkJCWFyLmxjID0gcjIKKwlici5yZXQuc3B0ay5tYW55IGIwCitFUElMT0dVRSgpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vaWE2NC9kaXZlXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9pYTY0L2RpdmVfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU0YTI3MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vaWE2NC9kaXZlXzEuYXNtCkBAIC0wLDAgKzEsMjM2IEBACitkbmwgIElBLTY0IG1wbl9kaXZleGFjdF8xIC0tIG1wbiBieSBsaW1iIGV4YWN0IGRpdmlzaW9uLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3Jiam9ybiBHcmFubHVuZCBhbmQgS2V2aW4gUnlkZS4KKworZG5sICBDb3B5cmlnaHQgMjAwMy0yMDA1LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICAgICBjeWNsZXMvbGltYgorQyBJdGFuaXVtOiAgICAgIDE2CitDIEl0YW5pdW0gMjogICAgIDgKKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywgYHIzMicpCitkZWZpbmUoYHVwJywgYHIzMycpCitkZWZpbmUoYG4nLCAgYHIzNCcpCitkZWZpbmUoYGRpdmlzb3InLCBgcjM1JykKKworZGVmaW5lKGBsc2hpZnQnLCBgcjI0JykKK2RlZmluZShgcnNoaWZ0JywgYHIyNScpCisKK0MgVGhpcyBjb2RlIGlzIGEgYml0IG1lc3N5LCBhbmQgbm90IGFzIHNpbWlsYXIgdG8gbW9kZTFvLmFzbSBhcyBkZXNpcmVkLgorCitDIFRoZSBjcml0aWNhbCBwYXRoIGR1cmluZyBpbml0aWFsaXphdGlvbiBpcyBmb3IgY29tcHV0aW5nIHRoZSBpbnZlcnNlIG9mIHRoZQorQyBkaXZpc29yLiAgU2luY2Ugb2RkIGRpdmlzb3JzIGFyZSBwcm9iYWJseSBjb21tb24sIHdlIGNvbmRpdGlvbmFsbHkgZXhlY3V0ZQorQyB0aGUgaW5pdGlhbCBjb3VudF90cmFpbGluZ196ZXJvcyBjb2RlIGFuZCB0aGUgZG93bnNoaWZ0LgorCitDIFBvc3NpYmxlIGltcHJvdmVtZW50OiBNZXJnZSBtb3JlIG9mIHRoZSBmZWVkLWluIGNvZGUgaW50byB0aGUgaW52ZXJzZQorQyBjb21wdXRhdGlvbi4KKworQVNNX1NUQVJUKCkKKwkudGV4dAorCS5hbGlnbgkzMgorLkx0YWI6CitkYXRhMQkwLDB4MDEsIDAsMHhBQiwgMCwweENELCAwLDB4QjcsIDAsMHgzOSwgMCwweEEzLCAwLDB4QzUsIDAsMHhFRgorZGF0YTEJMCwweEYxLCAwLDB4MUIsIDAsMHgzRCwgMCwweEE3LCAwLDB4MjksIDAsMHgxMywgMCwweDM1LCAwLDB4REYKK2RhdGExCTAsMHhFMSwgMCwweDhCLCAwLDB4QUQsIDAsMHg5NywgMCwweDE5LCAwLDB4ODMsIDAsMHhBNSwgMCwweENGCitkYXRhMQkwLDB4RDEsIDAsMHhGQiwgMCwweDFELCAwLDB4ODcsIDAsMHgwOSwgMCwweEYzLCAwLDB4MTUsIDAsMHhCRgorZGF0YTEJMCwweEMxLCAwLDB4NkIsIDAsMHg4RCwgMCwweDc3LCAwLDB4RjksIDAsMHg2MywgMCwweDg1LCAwLDB4QUYKK2RhdGExCTAsMHhCMSwgMCwweERCLCAwLDB4RkQsIDAsMHg2NywgMCwweEU5LCAwLDB4RDMsIDAsMHhGNSwgMCwweDlGCitkYXRhMQkwLDB4QTEsIDAsMHg0QiwgMCwweDZELCAwLDB4NTcsIDAsMHhEOSwgMCwweDQzLCAwLDB4NjUsIDAsMHg4RgorZGF0YTEJMCwweDkxLCAwLDB4QkIsIDAsMHhERCwgMCwweDQ3LCAwLDB4QzksIDAsMHhCMywgMCwweEQ1LCAwLDB4N0YKK2RhdGExCTAsMHg4MSwgMCwweDJCLCAwLDB4NEQsIDAsMHgzNywgMCwweEI5LCAwLDB4MjMsIDAsMHg0NSwgMCwweDZGCitkYXRhMQkwLDB4NzEsIDAsMHg5QiwgMCwweEJELCAwLDB4MjcsIDAsMHhBOSwgMCwweDkzLCAwLDB4QjUsIDAsMHg1RgorZGF0YTEJMCwweDYxLCAwLDB4MEIsIDAsMHgyRCwgMCwweDE3LCAwLDB4OTksIDAsMHgwMywgMCwweDI1LCAwLDB4NEYKK2RhdGExCTAsMHg1MSwgMCwweDdCLCAwLDB4OUQsIDAsMHgwNywgMCwweDg5LCAwLDB4NzMsIDAsMHg5NSwgMCwweDNGCitkYXRhMQkwLDB4NDEsIDAsMHhFQiwgMCwweDBELCAwLDB4RjcsIDAsMHg3OSwgMCwweEUzLCAwLDB4MDUsIDAsMHgyRgorZGF0YTEJMCwweDMxLCAwLDB4NUIsIDAsMHg3RCwgMCwweEU3LCAwLDB4NjksIDAsMHg1MywgMCwweDc1LCAwLDB4MUYKK2RhdGExCTAsMHgyMSwgMCwweENCLCAwLDB4RUQsIDAsMHhENywgMCwweDU5LCAwLDB4QzMsIDAsMHhFNSwgMCwweDBGCitkYXRhMQkwLDB4MTEsIDAsMHgzQiwgMCwweDVELCAwLDB4QzcsIDAsMHg0OSwgMCwweDMzLCAwLDB4NTUsIDAsMHhGRgorCisKK1BST0xPR1VFKG1wbl9kaXZleGFjdF8xKQorCS5wcm9sb2d1ZQorCS5zYXZlCQlhci5sYywgcjIKKwkuYm9keQorCisgey5tbWk7CWFkZAkJcjggPSAtMSwgZGl2aXNvcglDIE0wCisJbm9wCQkwCQkJQyBNMQorCXRiaXQuegkJcDgsIHA5ID0gZGl2aXNvciwgMAlDIEkwCit9CitpZmRlZihgSEFWRV9BQklfMzInLAorYAlhZGRwNAkJcnAgPSAwLCBycAkJQyBNMiAgcnAgZXh0ZW5kCisJYWRkcDQJCXVwID0gMCwgdXAJCUMgTTMgIHVwIGV4dGVuZAorCXN4dDQJCW4gPSBuJykJCQlDIEkxICBzaXplIGV4dGVuZAorCTs7CisuTGhlcmU6Cisgey5tbWk7CWxkOAkJcjIwID0gW3VwXSwgOAkJQyBNMCAgdXBbMF0KKyAgKHA4KQlhbmRjbQkJcjggPSByOCwgZGl2aXNvcglDIE0xCisJbW92CQlyMTUgPSBpcAkJQyBJMCAgLkxoZXJlCisJOzsKK317Lm1paQorCS5wcmVkLnJlbCAibXV0ZXgiLCBwOCwgcDkKKyAgKHA5KQltb3YJCXJzaGlmdCA9IDAJCUMgTTAKKyAgKHA4KQlwb3BjbnQJCXJzaGlmdCA9IHI4CQlDIEkwIHI4ID0gY250X2xvX3plcm9zKGRpdmlzb3IpCisJY21wLmVxCQlwNiwgcDEwID0gMSwgbgkJQyBJMQorCTs7Cit9ey5taWk7CWFkZAkJcjkgPSAuTHRhYi0uTGhlcmUsIHIxNQlDIE0wCisgIChwOCkJc2hyLnUJCWRpdmlzb3IgPSBkaXZpc29yLCByc2hpZnQgQyBJMAorCW5vcAkJMAkJCUMgSTEKKwk7OworfXsubW1pOwlhZGQJCW4gPSAtNCwgbgkJQyBNMCAgc2l6ZS0xCisgIChwMTApCWxkOAkJcjIxID0gW3VwXSwgOAkJQyBNMSAgdXBbMV0KKwltb3YJCXIxNCA9IDIJCQlDIE0xICAyCit9ey5tZmk7CXNldGYuc2lnCWY2ID0gZGl2aXNvcgkJQyBNMiAgZGl2aXNvcgorCW1vdgkJZjkgPSBmMAkJCUMgTTMgIGNhcnJ5CQlGSVhNRQorCXp4dDEJCXIzID0gZGl2aXNvcgkJQyBJMSAgZGl2aXNvciBsb3cgYnl0ZQorCTs7Cit9ey5tbWk7CWFkZAkJcjMgPSByOSwgcjMJCUMgTTAgIHRhYmxlIG9mZnNldCBpcCBhbmQgaW5kZXgKKwlzdWIJCXIxNiA9IDAsIGRpdmlzb3IJQyBNMSAgLWRpdmlzb3IKKwltb3YJCXIyID0gYXIubGMJCUMgSTAKK317Lm1taTsJc3ViCQlsc2hpZnQgPSA2NCwgcnNoaWZ0CUMgTTIKKwlzZXRmLnNpZwlmMTMgPSByMTQJCUMgTTMgIDIgaW4gc2lnbmlmaWNhbmQKKwltb3YJCXIxNyA9IC0xCQlDIEkxICAtMQorCTs7Cit9ey5tbWk7CWxkMQkJcjMgPSBbcjNdCQlDIE0wICBpbnZlcnNlLCA4IGJpdHMKKwlub3AJCTAJCQlDIE0xCisJbW92CQlhci5sYyA9IG4JCUMgSTAgIHNpemUtMSBsb29wIGNvdW50Cit9ey5tbWk7CXNldGYuc2lnCWYxMiA9IHIxNgkJQyBNMiAgLWRpdmlzb3IKKwlzZXRmLnNpZwlmOCA9IHIxNwkJQyBNMyAgLTEKKwljbXAuZXEJCXA3LCBwMCA9IC0yLCBuCQlDIEkxCisJOzsKK317Lm1taTsJc2V0Zi5zaWcJZjcgPSByMwkJCUMgTTIgIGludmVyc2UsIDggYml0cworCWNtcC5lcQkJcDgsIHAwID0gLTEsIG4JCUMgTTAKKwlzaHIudQkJcjIzID0gcjIwLCByc2hpZnQJQyBJMAorCTs7Cit9CisKKwlDIGY2CWRpdmlzb3IKKwlDIGY3CWludmVyc2UsIGJlaW5nIGNhbGN1bGF0ZWQKKwlDIGY4CS0xLCB3aWxsIGJlIC1pbnZlcnNlCisJQyBmOQljYXJyeQorCUMgZjEyCS1kaXZpc29yCisJQyBmMTMJMgorCUMgZjE0CXNjcmF0Y2gKKworCXhtcHkubAkJZjE0ID0gZjEzLCBmNwkJQyBOZXd0b24gMippCisJeG1weS5sCQlmNyA9IGY3LCBmNwkJQyBOZXd0b24gaSppCisJOzsKKwl4bWEubAkJZjcgPSBmNywgZjEyLCBmMTQJQyBOZXd0b24gaSppKi1kICsgMippLCAxNiBiaXRzCisJOzsKKwlzZXRmLnNpZwlmMTAgPSByMjMJCUMgc3BlY3VsYXRpdmUsIHVzZWQgaWZmIG4gPSAxCisJeG1weS5sCQlmMTQgPSBmMTMsIGY3CQlDIE5ld3RvbiAyKmkKKwlzaGwJCXIyMiA9IHIyMSwgbHNoaWZ0CUMgc3BlY3VsYXRpdmUsIHVzZWQgaWZmIG4gPiAxCisJeG1weS5sCQlmNyA9IGY3LCBmNwkJQyBOZXd0b24gaSppCisJOzsKKwlvcgkJcjMxID0gcjIyLCByMjMJCUMgc3BlY3VsYXRpdmUsIHVzZWQgaWZmIG4gPiAxCisJeG1hLmwJCWY3ID0gZjcsIGYxMiwgZjE0CUMgTmV3dG9uIGkqaSotZCArIDIqaSwgMzIgYml0cworCXNoci51CQlyMjMgPSByMjEsIHJzaGlmdAlDIHNwZWN1bGF0aXZlLCB1c2VkIGlmZiBuID4gMQorCTs7CisJc2V0Zi5zaWcJZjExID0gcjMxCQlDIHNwZWN1bGF0aXZlLCB1c2VkIGlmZiBuID4gMQorCXhtcHkubAkJZjE0ID0gZjEzLCBmNwkJQyBOZXd0b24gMippCisJeG1weS5sCQlmNyA9IGY3LCBmNwkJQyBOZXd0b24gaSppCisJOzsKKwl4bWEubAkJZjcgPSBmNywgZjEyLCBmMTQJQyBOZXd0b24gaSppKi1kICsgMippLCA2NCBiaXRzCisKKyAgKHA3KQlici5jb25kLmRwdGsJLkxuMgorICAocDEwKQlici5jb25kLmRwdGsJLmdydDMKKwk7OworCisuTG4xOgl4bXB5LmwJCWYxMiA9IGYxMCwgZjcJCUMgcSA9IHVsaW1iICogaW52ZXJzZQorCWJyCQkuTHgxCisKKy5MbjI6CisJeG1weS5sCQlmOCA9IGY3LCBmOAkJQyAtaW52ZXJzZSA9IGludmVyc2UgKiAtMQorCXhtcHkubAkJZjEyID0gZjExLCBmNwkJQyBxID0gdWxpbWIgKiBpbnZlcnNlCisJc2V0Zi5zaWcJZjExID0gcjIzCisJYnIJCS5MeDIKKworLmdydDM6CisJbGQ4CQlyMjEgPSBbdXBdLCA4CQlDIHVwWzJdCisJeG1weS5sCQlmOCA9IGY3LCBmOAkJQyAtaW52ZXJzZSA9IGludmVyc2UgKiAtMQorCTs7CisJc2hsCQlyMjIgPSByMjEsIGxzaGlmdAorCTs7CisJeG1weS5sCQlmMTIgPSBmMTEsIGY3CQlDIHEgPSB1bGltYiAqIGludmVyc2UKKwk7OworCW9yCQlyMzEgPSByMjIsIHIyMworCXNoci51CQlyMjMgPSByMjEsIHJzaGlmdAorCTs7CisJc2V0Zi5zaWcJZjExID0gcjMxCisgIChwOCkJYnIuY29uZC5kcHRrCS5MeDMJCQlDIGJyYW5jaCBmb3IgbiA9IDMKKwk7OworCWxkOAkJcjIxID0gW3VwXSwgOAorCWJyCQkuTGVudAorCisuTHRvcDoJbGQ4CQlyMjEgPSBbdXBdLCA4CisJeG1hLmwJCWYxMiA9IGY5LCBmOCwgZjEwCUMgcSA9IGMgKiAtaW52ZXJzZSArIHNpCisJbm9wLmIJCTAKKwk7OworLkxlbnQ6CWFkZAkJcjE2ID0gMTYwLCB1cAorCXNobAkJcjIyID0gcjIxLCBsc2hpZnQKKwlub3AuYgkJMAorCTs7CisJc3RmOAkJW3JwXSA9IGYxMiwgOAorCXhtYS5odQkJZjkgPSBmMTIsIGY2LCBmOQlDIGMgPSBoaWdoKHEgKiBkaXZpc29yICsgYykKKwlub3AuYgkJMAorCW5vcC5tCQkwCisJeG1weS5sCQlmMTAgPSBmMTEsIGY3CQlDIHNpID0gdWxpbWIgKiBpbnZlcnNlCisJbm9wLmIJCTAKKwk7OworCW9yCQlyMzEgPSByMjIsIHIyMworCXNoci51CQlyMjMgPSByMjEsIHJzaGlmdAorCW5vcC5iCQkwCisJOzsKKwlsZmV0Y2gJCVtyMTZdCisJc2V0Zi5zaWcJZjExID0gcjMxCisJYnIuY2xvb3Auc3B0ay5mZXcuY2xyIC5MdG9wCisKKworCXhtYS5sCQlmMTIgPSBmOSwgZjgsIGYxMAlDIHEgPSBjICogLWludmVyc2UgKyBzaQorCTs7CisuTHgzOglzdGY4CQlbcnBdID0gZjEyLCA4CisJeG1hLmh1CQlmOSA9IGYxMiwgZjYsIGY5CUMgYyA9IGhpZ2gocSAqIGRpdmlzb3IgKyBjKQorCXhtcHkubAkJZjEwID0gZjExLCBmNwkJQyBzaSA9IHVsaW1iICogaW52ZXJzZQorCTs7CisJc2V0Zi5zaWcJZjExID0gcjIzCisJOzsKKwl4bWEubAkJZjEyID0gZjksIGY4LCBmMTAJQyBxID0gYyAqIC1pbnZlcnNlICsgc2kKKwk7OworLkx4MjoJc3RmOAkJW3JwXSA9IGYxMiwgOAorCXhtYS5odQkJZjkgPSBmMTIsIGY2LCBmOQlDIGMgPSBoaWdoKHEgKiBkaXZpc29yICsgYykKKwl4bXB5LmwJCWYxMCA9IGYxMSwgZjcJCUMgc2kgPSB1bGltYiAqIGludmVyc2UKKwk7OworCXhtYS5sCQlmMTIgPSBmOSwgZjgsIGYxMAlDIHEgPSBjICogLWludmVyc2UgKyBzaQorCTs7CisuTHgxOglzdGY4CQlbcnBdID0gZjEyLCA4CisJbW92CQlhci5sYyA9IHIyCQlDIEkwCisJYnIucmV0LnNwdGsubWFueSBiMAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9pYTY0L2RpdnJlbV8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vaWE2NC9kaXZyZW1fMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg4NzgyMAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vaWE2NC9kaXZyZW1fMS5hc20KQEAgLTAsMCArMSw0NzcgQEAKK2RubCAgSUEtNjQgbXBuX2RpdnJlbV8xIGFuZCBtcG5fcHJlaW52X2RpdnJlbV8xIC0tIERpdmlkZSBhbiBtcG4gbnVtYmVyIGJ5IGFuCitkbmwgIHVubm9ybWFsaXplZCBsaW1iLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3Jiam9ybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAwMiwgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MgICAgICAgICBjeWNsZXMvbGltYgorQyBJdGFuaXVtOiAgICA0MC00MgorQyBJdGFuaXVtIDI6ICAyOS0zMAorCitDIFRoaXMgd2FzIGdlbmVyYXRlZCBieSBnY2MsIHRoZW4gdGhlIGxvb3BzIHdlcmUgb3B0aW1pemVkLiAgVGhlIHByZWludiBlbnRyeQorQyBwb2ludCB3YXMgc2hvZWhvcm5lZCBpbnRvIHRoZSBmaWxlLiAgTG90cyBvZiB0aGluZ3Mgb3V0c2lkZSB0aGUgbG9vcHMgY291bGQKK0MgYmUgc3RyZWFtbGluZWQuICBJdCB3b3VsZCBwcm9iYWJseSBiZSBhIGdvb2QgaWRlYSB0byBtZXJnZSB0aGUgbG9vcHMgZm9yCitDIG5vcm1hbGl6ZWQgYW5kIHVubm9ybWFsaXplZCBkaXZpc29yLCBzaW5jZSB0aGUgc2hpZnRpbmcgc3R1ZmYgaXMgZG9uZSBmb3IKK0MgZnJlZSBpbiBwYXJhbGxlbCB3aXRoIG90aGVyIG9wZXJhdGlvbnMuICBJdCB3b3VsZCBldmVuIGJlIHBvc3NpYmxlIHRvIG1lcmdlCitDIGFsbCBsb29wcywgaWYgdGhlIGxkOCB3ZXJlIG1hZGUgY29uZGl0aW9uYWwuCisKK0MgVE9ETworQyAgKiBDb25zaWRlciBkZWxheWluZyBpbnZlcnNpb24gZm9yIG5vcm1hbGl6ZWQgbXBuX2RpdnJlbV8xIGVudHJ5IHRpbGwgYWZ0ZXIKK0MgICAgY29tcHV0aW5nIGxlYWRpbmcgbGltYi4KK0MgICogSW5saW5lIGFuZCBpbnRlcmxlYXZlIGxpbWIgaW52ZXJzaW9uIGNvZGUgd2l0aCBsb29wIHNldHVwIGNvZGUuCisKK0FTTV9TVEFSVCgpCisKK0MgSFAncyBhc3NlbWJsZXIgcmVxdWlyZXMgdGhlc2UgZGVjbGFyYXRpb25zIGZvciBpbXBvcnRpbmcgbXBuX2ludmVydF9saW1iCisJLmdsb2JhbAltcG5faW52ZXJ0X2xpbWIKKwkudHlwZQltcG5faW52ZXJ0X2xpbWIsQGZ1bmN0aW9uCisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyBycCAgICA9IHIzMgorQyBxeG4gICA9IHIzMworQyB1cCAgICA9IHIzNAorQyBuICAgICA9IHIzNQorQyB2bCAgICA9IHIzNgorQyB2bGludiA9IHIzNyAgKHByZWludiBvbmx5KQorQyBjbnQgPSByMzggICAgKHByZWludiBvbmx5KQorCitQUk9MT0dVRShtcG5fcHJlaW52X2RpdnJlbV8xKQorCS5wcm9sb2d1ZQorCS5zYXZlCWFyLnBmcywgcjQyCisJYWxsb2MJCXI0MiA9IGFyLnBmcywgNywgOCwgMSwgMAorCS5zYXZlCWFyLmxjLCByNDQKKwltb3YJCXI0NCA9IGFyLmxjCisJLnNhdmUJcnAsIHI0MQorCW1vdgkJcjQxID0gYjAKKwkuYm9keQoraWZkZWYoYEhBVkVfQUJJXzMyJywKK2AJYWRkcDQJCXIzMiA9IDAsIHIzMgorCXN4dDQJCXIzMyA9IHIzMworCWFkZHA0CQlyMzQgPSAwLCByMzQKKwlzeHQ0CQlyMzUgPSByMzUKKwk7OworJykKKwltb3YJCXI0MCA9IHIzOAorCXNobGFkZAkJcjM0ID0gcjM1LCAzLCByMzQKKwk7OworCWFkZHMJCXIzNCA9IC04LCByMzQKKwk7OworCWxkOAkJcjM5ID0gW3IzNF0sIC04CisJOzsKKworCWFkZAkJcjE1ID0gcjM1LCByMzMKKwk7OworCW1vdgkJcjggPSByMzcKKwlzaGxhZGQJCXIzMiA9IHIxNSwgMywgcjMyCUMgcjMyID0gcnAgKyBuICsgcXhuCisJY21wLmxlCQlwOCwgcDAgPSAwLCByMzYKKwk7OworCWFkZHMJCXIzMiA9IC04LCByMzIJCUMgcjMyID0gcnAgKyBuICsgcXhuIC0gMQorCWNtcC5sZXUJCXA2LCBwNyA9IHIzNiwgcjM5CisgICAocDgpCWJyLmNvbmQuZHBudAkuTHB1bm5vcm0KKwk7OworCisgICAocDYpCWFkZGwJCXIxNSA9IDEsIHIwCisgICAocDcpCW1vdgkJcjE1ID0gcjAKKwk7OworICAgKHA2KQlzdWIJCXIzOCA9IHIzOSwgcjM2CisgICAocDcpCW1vdgkJcjM4ID0gcjM5CisJc3Q4CQlbcjMyXSA9IHIxNSwgLTgKKwlhZGRzCQlyMzUgPSAtMiwgcjM1CQlDIHVuIC09IDIKKwlicgkuTHBuCisKKy5McHVubm9ybToKKyAgIChwNikJYWRkCQlyMzQgPSA4LCByMzQKKwltb3YJCXIzOCA9IDAJCQlDIHIgPSAwCisJc2hsCQlyMzYgPSByMzYsIHI0MAorICAgKHA2KQlici5jb25kLmRwdGsJLkxwdQorCTs7CisJc2hsCQlyMzggPSByMzksIHI0MAkJQyByID0gYWhpZ2ggPDwgY250CisJY21wLm5lCQlwOCwgcDAgPSAxLCByMzUKKwlzdDgJCVtyMzJdID0gcjAsIC04CisJYWRkcwkJcjM1ID0gLTEsIHIzNQkJQyB1bi0tCisgICAocDgpCWJyLmNvbmQuZHBudAkuTHB1CisKKwltb3YJCXIyMyA9IDEKKwk7OworCXNldGYuc2lnCWY2ID0gcjgKKwlzZXRmLnNpZwlmMTIgPSByMjMKKwlicgkJLkw0MzUKK0VQSUxPR1VFKCkKKworCitQUk9MT0dVRShtcG5fZGl2cmVtXzEpCisJLnByb2xvZ3VlCisJLnNhdmUJYXIucGZzLCByNDIKKwlhbGxvYwkJcjQyID0gYXIucGZzLCA1LCA4LCAxLCAwCisJLnNhdmUJYXIubGMsIHI0NAorCW1vdgkJcjQ0ID0gYXIubGMKKwkuc2F2ZQlycCwgcjQxCisJbW92CQlyNDEgPSBiMAorCS5ib2R5CitpZmRlZihgSEFWRV9BQklfMzInLAorYAlhZGRwNAkJcjMyID0gMCwgcjMyCisJc3h0NAkJcjMzID0gcjMzCisJYWRkcDQJCXIzNCA9IDAsIHIzNAorCXN4dDQJCXIzNSA9IHIzNQorCTs7CisnKQorCW1vdgkJcjM4ID0gcjAKKwlhZGQJCXIxNSA9IHIzNSwgcjMzCisJOzsKKwljbXAubmUJCXA2LCBwNyA9IDAsIHIxNQorCTs7CisgICAocDcpCW1vdgkJcjggPSByMAorICAgKHA3KQlici5jb25kLmRwbnQJLkxyZXQKKwlzaGxhZGQJCXIxNCA9IHIxNSwgMywgcjMyCUMgcjE0ID0gcnAgKyBuICsgcXhuCisJY21wLmxlCQlwNiwgcDcgPSAwLCByMzYKKwk7OworCWFkZHMJCXIzMiA9IC04LCByMTQJCUMgcjMyID0gcnAgKyBuICsgcXhuIC0gMQorICAgKHA2KQlici5jb25kLmRwbnQJLkx1bm5vcm0KKwljbXAuZXEJCXA2LCBwNyA9IDAsIHIzNQorICAgKHA2KQlici5jb25kLmRwbnQJLkwxNzkKKwlzaGxhZGQJCXIxNCA9IHIzNSwgMywgcjM0CisJOzsKKwlhZGRzCQlyMTQgPSAtOCwgcjE0CisJYWRkcwkJcjM1ID0gLTEsIHIzNQorCTs7CisJbGQ4CQlyMzggPSBbcjE0XQorCTs7CisJY21wLmxldQkJcDYsIHA3ID0gcjM2LCByMzgKKwk7OworICAgKHA2KQlhZGRsCQlyMTUgPSAxLCByMAorICAgKHA3KQltb3YJCXIxNSA9IHIwCisJOzsKKwlzdDgJCVtyMzJdID0gcjE1LCAtOAorICAocDYpCXN1YgkJcjM4ID0gcjM4LCByMzYKKworLkwxNzk6CisJbW92CQlyNDUgPSByMzYKKwlhZGRzCQlyMzUgPSAtMSwgcjM1CisJYnIuY2FsbC5zcHRrLm1hbnkgYjAgPSBtcG5faW52ZXJ0X2xpbWIKKwk7OworCXNobGFkZAkJcjM0ID0gcjM1LCAzLCByMzQKKy5McG46CisJbW92CQlyMjMgPSAxCisJOzsKKwlzZXRmLnNpZwlmNiA9IHI4CisJc2V0Zi5zaWcJZjEyID0gcjIzCisJY21wLmxlCQlwNiwgcDcgPSAwLCByMzUKKwltb3YJCXI0MCA9IDAKKyAgIChwNykJYnIuY29uZC5kcG50CS5MNDM1CisJc2V0Zi5zaWcJZjEwID0gcjM2CisJbW92CQlhci5sYyA9IHIzNQorCXNldGYuc2lnCWY3ID0gcjM4CisJOzsKKwlzdWIJCXIyOCA9IC0xLCByMzYKK0MgRGV2ZWxvcCBxdW90aWVudCBsaW1icyBmb3Igbm9ybWFsaXplZCBkaXZpc29yCisuTG9vcDE6CQlDIDAwCQkJCUMgcT1yMTggbmg9cjM4L2Y3CisJbGQ4CQlyMjAgPSBbcjM0XSwgLTgKKwl4bWEuaHUJCWYxMSA9IGY3LCBmNiwgZjAKKwk7OwlDIDA0CisJeG1hLmwJCWY4ID0gZjExLCBmMTIsIGY3CUMgcSA9IHEgKyBuaAorCTs7CUMgMDgKKwlnZXRmLnNpZwlyMTggPSBmOAorCXhtYS5odQkJZjkgPSBmOCwgZjEwLCBmMAorCXhtYS5sCQlmOCA9IGY4LCBmMTAsIGYwCisJOzsJQyAxMgorCWdldGYuc2lnCXIxNiA9IGY5CisJCUMgMTMKKwlnZXRmLnNpZwlyMTUgPSBmOAorCTs7CUMgMTgKKwljbXAubHR1CQlwNiwgcDcgPSByMjAsIHIxNQorCXN1YgkJcjE1ID0gcjIwLCByMTUKKwlzdWIJCXIxNiA9IHIzOCwgcjE2CisJOzsJQyAxOQorICAgKHA2KQljbXAubmUJCXA4LCBwOSA9IDEsIHIxNgkJQyBpcyBySCAhPSAwPworICAgKHA3KQljbXAubmUJCXA4LCBwOSA9IDAsIHIxNgkJQyBpcyBySCAhPSAwPworICAgKHA2KQlhZGQJCXIxNiA9IC0xLCByMTYKKyAgIChwMCkJY21wLm5lLnVuYwlwNiwgcDcgPSByMCwgcjAKKwk7OwlDIDIwCisgICAocDgpCWNtcC5sdHUJCXA2LCBwNyA9IHIxNSwgcjM2CisgICAocDgpCXN1YgkJcjE1ID0gcjE1LCByMzYKKyAgIChwOCkJYWRkCQlyMTggPSAxLCByMTgJCUMgcSA9IHEgKyAxOwlkb25lIGlmOiBySCA+IDAKKwk7OwlDIDIxCisJLnByZWQucmVsICJtdXRleCIscDYscDcKKyAgIChwNikJY21wLm5lCQlwOCwgcDkgPSAxLCByMTYJCUMgaXMgckggIT0gMCBzdGlsbD8KKyAgIChwNykJY21wLm5lCQlwOCwgcDkgPSAwLCByMTYJCUMgaXMgckggIT0gMCBzdGlsbD8KKwljbXAubHR1CQlwNiwgcDcgPSByMTUsIHIzNglDIHNwZWN1bGF0aXZlCisJc3ViCQlyMjggPSByMTUsIHIzNgkJQyBzcGVjdWxhdGl2ZSwganVzdCBmb3IgY21wCisJOzsJQyAyMgorICAgKHA4KQljbXAubHR1CQlwNiwgcDcgPSByMjgsIHIzNglDIHJlZG8gbGFzdCBjbXAgaWYgbmVlZGVkCisgICAocDgpCW1vdgkJcjE1ID0gcjI4CisgICAocDgpCWFkZAkJcjE4ID0gMSwgcjE4CQlDIHEgPSBxICsgMTsJZG9uZSBpZjogckggPiAwCisJOzsJQyAyMworICAgKHA2KQlzZXRmLnNpZwlmNyA9IHIxNQorICAgKHA3KQlzdWIJCXIxNSA9IHIxNSwgcjM2CisgICAocDcpCWFkZAkJcjE4ID0gMSwgcjE4CQlDIHEgPSBxICsgMTsJZG9uZSBpZjogckggPiAwCisJOzsJQyAyNAorICAgKHA3KQlzZXRmLnNpZwlmNyA9IHIxNQorCXN0OAkJW3IzMl0gPSByMTgsIC04CisJbW92CQlyMzggPSByMTUKKwlici5jbG9vcC5kcHRrCS5Mb29wMQorCQlDIDI5LzMwCisJYnIuc3B0awkJLkw0MzUKKwk7OworLkx1bm5vcm06CisJbXV4MQkJcjE2ID0gcjM2LCBAcmV2CisJY21wLmVxCQlwNiwgcDcgPSAwLCByMzUKKyAgIChwNikJYnIuY29uZC5kcG50CS5MMzIyCisJc2hsYWRkCQlyMzQgPSByMzUsIDMsIHIzNAorCTs7CisJYWRkcwkJcjM0ID0gLTgsIHIzNAorCTs7CisJbGQ4CQlyMzkgPSBbcjM0XQorCTs7CisJY21wLmxldQkJcDYsIHA3ID0gcjM2LCByMzkKKyAgIChwNikJYnIuY29uZC5kcHRrCS5MMzIyCisJYWRkcwkJcjM0ID0gLTgsIHIzNAorCTs7CisJbW92CQlyMzggPSByMzkKKwk7OworCWNtcC5uZQkJcDYsIHA3ID0gMSwgcjE1CisJc3Q4CQlbcjMyXSA9IHIwLCAtOAorCTs7CisgICAocDcpCW1vdgkJcjggPSByMzgKKyAgIChwNykJYnIuY29uZC5kcG50CS5McmV0CisJYWRkcwkJcjM1ID0gLTEsIHIzNQorLkwzMjI6CisJc3ViCQlyMTQgPSByMCwgcjE2CisJOzsKKwlvcgkJcjE0ID0gcjE2LCByMTQKKwk7OworCW1vdgkJcjE2ID0gLTgKKwljengxLmwJCXIxNCA9IHIxNAorCTs7CisJc2hsYWRkCQlyMTYgPSByMTQsIDMsIHIxNgorCTs7CisJc2hyLnUJCXIxNCA9IHIzNiwgcjE2CisJOzsKKwljbXAuZ2V1CQlwNiwgcDcgPSAxNSwgcjE0CisJOzsKKyAgIChwNykJc2hyLnUJCXIxNCA9IHIxNCwgNAorICAgKHA3KQlhZGRzCQlyMTYgPSA0LCByMTYKKwk7OworCWNtcC5nZXUJCXA2LCBwNyA9IDMsIHIxNAorCTs7CisgICAocDcpCXNoci51CQlyMTQgPSByMTQsIDIKKyAgIChwNykJYWRkcwkJcjE2ID0gMiwgcjE2CisJOzsKKwl0Yml0Lm56CQlwNiwgcDcgPSByMTQsIDEKKwk7OworCS5wcmVkLnJlbCAibXV0ZXgiLHA2LHA3CisgIChwNikJc3ViCQlyNDAgPSA2MiwgcjE2CisgIChwNykJc3ViCQlyNDAgPSA2MywgcjE2CisJOzsKKwlzaGwJCXI0NSA9IHIzNiwgcjQwCisJc2hsCQlyMzYgPSByMzYsIHI0MAorCXNobAkJcjM4ID0gcjM4LCByNDAKKwlici5jYWxsLnNwdGsubWFueSBiMCA9IG1wbl9pbnZlcnRfbGltYgorCTs7CisuTHB1OgorCW1vdgkJcjIzID0gMQorCTs7CisJc2V0Zi5zaWcJZjYgPSByOAorCXNldGYuc2lnCWYxMiA9IHIyMworCWNtcC5lcQkJcDYsIHA3ID0gMCwgcjM1CisgICAocDYpCWJyLmNvbmQuZHBudAkuTDQzNQorCXN1YgkJcjE2ID0gNjQsIHI0MAorCWFkZHMJCXIzNSA9IC0yLCByMzUKKwk7OworCWxkOAkJcjM5ID0gW3IzNF0sIC04CisJY21wLmxlCQlwNiwgcDcgPSAwLCByMzUKKwk7OworCXNoci51CQlyMTQgPSByMzksIHIxNgorCTs7CisJb3IJCXIzOCA9IHIxNCwgcjM4CisgICAocDcpCWJyLmNvbmQuZHBudAkuTGVuZDMKKwk7OworCW1vdgkJcjIyID0gcjE2CisJc2V0Zi5zaWcJZjEwID0gcjM2CisJc2V0Zi5zaWcJZjcgPSByMzgKKwltb3YJCWFyLmxjID0gcjM1CisJOzsKK0MgRGV2ZWxvcCBxdW90aWVudCBsaW1icyBmb3IgdW5ub3JtYWxpemVkIGRpdmlzb3IKKy5Mb29wMzoKKwlsZDgJCXIxNCA9IFtyMzRdLCAtOAorCXhtYS5odQkJZjExID0gZjcsIGY2LCBmMAorCTs7CisJeG1hLmwJCWY4ID0gZjExLCBmMTIsIGY3CUMgcSA9IHEgKyBuaAorCTs7CisJZ2V0Zi5zaWcJcjE4ID0gZjgKKwl4bWEuaHUJCWY5ID0gZjgsIGYxMCwgZjAKKwlzaGwJCXIyMCA9IHIzOSwgcjQwCisJeG1hLmwJCWY4ID0gZjgsIGYxMCwgZjAKKwlzaHIudQkJcjI0ID0gcjE0LCByMjIKKwk7OworCWdldGYuc2lnCXIxNiA9IGY5CisJZ2V0Zi5zaWcJcjE1ID0gZjgKKwlvcgkJcjIwID0gcjI0LCByMjAKKwk7OworCWNtcC5sdHUJCXA2LCBwNyA9IHIyMCwgcjE1CisJc3ViCQlyMTUgPSByMjAsIHIxNQorCXN1YgkJcjE2ID0gcjM4LCByMTYKKwk7OworICAgKHA2KQljbXAubmUJCXA4LCBwOSA9IDEsIHIxNgkJQyBpcyBySCAhPSAwPworICAgKHA3KQljbXAubmUJCXA4LCBwOSA9IDAsIHIxNgkJQyBpcyBySCAhPSAwPworICAgKHA2KQlhZGQJCXIxNiA9IC0xLCByMTYKKyAgIChwMCkJY21wLm5lLnVuYwlwNiwgcDcgPSByMCwgcjAKKwk7OworICAgKHA4KQljbXAubHR1CQlwNiwgcDcgPSByMTUsIHIzNgorICAgKHA4KQlzdWIJCXIxNSA9IHIxNSwgcjM2CisgICAocDgpCWFkZAkJcjE4ID0gMSwgcjE4CQlDIHEgPSBxICsgMTsJZG9uZSBpZjogckggPiAwCisJOzsKKwkucHJlZC5yZWwgIm11dGV4IixwNixwNworICAgKHA2KQljbXAubmUJCXA4LCBwOSA9IDEsIHIxNgkJQyBpcyBySCAhPSAwIHN0aWxsPworICAgKHA3KQljbXAubmUJCXA4LCBwOSA9IDAsIHIxNgkJQyBpcyBySCAhPSAwIHN0aWxsPworCWNtcC5sdHUJCXA2LCBwNyA9IHIxNSwgcjM2CUMgc3BlY3VsYXRpdmUKKwlzdWIJCXIyOCA9IHIxNSwgcjM2CQlDIHNwZWN1bGF0aXZlLCBqdXN0IGZvciBjbXAKKwk7OworICAgKHA4KQljbXAubHR1CQlwNiwgcDcgPSByMjgsIHIzNglDIHJlZG8gbGFzdCBjbXAgaWYgbmVlZGVkCisgICAocDgpCW1vdgkJcjE1ID0gcjI4CisgICAocDgpCWFkZAkJcjE4ID0gMSwgcjE4CQlDIHEgPSBxICsgMTsJZG9uZSBpZjogckggPiAwCisJOzsKKyAgIChwNikJc2V0Zi5zaWcJZjcgPSByMTUKKyAgIChwNykJc3ViCQlyMTUgPSByMTUsIHIzNgorICAgKHA3KQlhZGQJCXIxOCA9IDEsIHIxOAkJQyBxID0gcSArIDE7CWRvbmUgaWY6IHJIID4gMAorCTs7CisgICAocDcpCXNldGYuc2lnCWY3ID0gcjE1CisJc3Q4CQlbcjMyXSA9IHIxOCwgLTgKKwltb3YJCXIzOSA9IHIxNAorCW1vdgkJcjM4ID0gcjE1CisJYnIuY2xvb3AuZHB0awkuTG9vcDMKKwk7OworLkxlbmQzOgorCXNldGYuc2lnCWYxMCA9IHIzNgorCXNldGYuc2lnCWY3ID0gcjM4CisJOzsKKwl4bWEuaHUJCWYxMSA9IGY3LCBmNiwgZjAKKwk7OworCXhtYS5sCQlmOCA9IGYxMSwgZjEyLCBmNwlDIHEgPSBxICsgbmgKKwk7OworCWdldGYuc2lnCXIxOCA9IGY4CisJeG1hLmh1CQlmOSA9IGY4LCBmMTAsIGYwCisJc2hsCQlyMjAgPSByMzksIHI0MAorCXhtYS5sCQlmOCA9IGY4LCBmMTAsIGYwCisJOzsKKwlnZXRmLnNpZwlyMTYgPSBmOQorCWdldGYuc2lnCXIxNSA9IGY4CisJOzsKKwljbXAubHR1CQlwNiwgcDcgPSByMjAsIHIxNQorCXN1YgkJcjE1ID0gcjIwLCByMTUKKwlzdWIJCXIxNiA9IHIzOCwgcjE2CisJOzsKKyAgIChwNikJY21wLm5lCQlwOCwgcDkgPSAxLCByMTYJCUMgaXMgckggIT0gMD8KKyAgIChwNykJY21wLm5lCQlwOCwgcDkgPSAwLCByMTYJCUMgaXMgckggIT0gMD8KKyAgIChwNikJYWRkCQlyMTYgPSAtMSwgcjE2CisgICAocDApCWNtcC5uZS51bmMJcDYsIHA3ID0gcjAsIHIwCisJOzsKKyAgIChwOCkJY21wLmx0dQkJcDYsIHA3ID0gcjE1LCByMzYKKyAgIChwOCkJc3ViCQlyMTUgPSByMTUsIHIzNgorICAgKHA4KQlhZGQJCXIxOCA9IDEsIHIxOAkJQyBxID0gcSArIDE7CWRvbmUgaWY6IHJIID4gMAorCTs7CisJLnByZWQucmVsICJtdXRleCIscDYscDcKKyAgIChwNikJY21wLm5lCQlwOCwgcDkgPSAxLCByMTYJCUMgaXMgckggIT0gMCBzdGlsbD8KKyAgIChwNykJY21wLm5lCQlwOCwgcDkgPSAwLCByMTYJCUMgaXMgckggIT0gMCBzdGlsbD8KKwk7OworICAgKHA4KQlzdWIJCXIxNSA9IHIxNSwgcjM2CisgICAocDgpCWFkZAkJcjE4ID0gMSwgcjE4CQlDIHEgPSBxICsgMTsJZG9uZSBpZjogckggPiAwCisJOzsKKwljbXAubHR1CQlwNiwgcDcgPSByMTUsIHIzNgorCTs7CisgICAocDcpCXN1YgkJcjE1ID0gcjE1LCByMzYKKyAgIChwNykJYWRkCQlyMTggPSAxLCByMTgJCUMgcSA9IHEgKyAxOwlkb25lIGlmOiBySCA+IDAKKwk7OworCXN0OAkJW3IzMl0gPSByMTgsIC04CisJbW92CQlyMzggPSByMTUKKy5MNDM1OgorCWFkZHMJCXIzNSA9IC0xLCByMzMKKwljbXAubGUJCXA2LCBwNyA9IDEsIHIzMworICAgKHA3KQlici5jb25kLmRwbnQJLkxlbmQ0CisJOzsKKwlzZXRmLnNpZwlmNyA9IHIzOAorCXNldGYuc2lnCWYxMCA9IHIzNgorCW1vdgkJYXIubGMgPSByMzUKKwk7OworLkxvb3A0OgorCXhtYS5odQkJZjExID0gZjcsIGY2LCBmMAorCTs7CisJeG1hLmwJCWY4ID0gZjExLCBmMTIsIGY3CUMgcSA9IHEgKyBuaAorCTs7CisJZ2V0Zi5zaWcJcjE4ID0gZjgKKwl4bWEuaHUJCWY5ID0gZjgsIGYxMCwgZjAKKwl4bWEubAkJZjggPSBmOCwgZjEwLCBmMAorCTs7CisJZ2V0Zi5zaWcJcjE2ID0gZjkKKwlnZXRmLnNpZwlyMTUgPSBmOAorCTs7CisJY21wLmx0dQkJcDYsIHA3ID0gMCwgcjE1CisJc3ViCQlyMTUgPSAwLCByMTUKKwlzdWIJCXIxNiA9IHIzOCwgcjE2CisJOzsKKyAgIChwNikJY21wLm5lCQlwOCwgcDkgPSAxLCByMTYJCUMgaXMgckggIT0gMD8KKyAgIChwNykJY21wLm5lCQlwOCwgcDkgPSAwLCByMTYJCUMgaXMgckggIT0gMD8KKyAgIChwNikJYWRkCQlyMTYgPSAtMSwgcjE2CisgICAocDApCWNtcC5uZS51bmMJcDYsIHA3ID0gcjAsIHIwCisJOzsKKyAgIChwOCkJY21wLmx0dQkJcDYsIHA3ID0gcjE1LCByMzYKKyAgIChwOCkJc3ViCQlyMTUgPSByMTUsIHIzNgorICAgKHA4KQlhZGQJCXIxOCA9IDEsIHIxOAkJQyBxID0gcSArIDE7CWRvbmUgaWY6IHJIID4gMAorCTs7CisJLnByZWQucmVsICJtdXRleCIscDYscDcKKyAgIChwNikJY21wLm5lCQlwOCwgcDkgPSAxLCByMTYJCUMgaXMgckggIT0gMCBzdGlsbD8KKyAgIChwNykJY21wLm5lCQlwOCwgcDkgPSAwLCByMTYJCUMgaXMgckggIT0gMCBzdGlsbD8KKwljbXAubHR1CQlwNiwgcDcgPSByMTUsIHIzNglDIHNwZWN1bGF0aXZlCisJc3ViCQlyMjggPSByMTUsIHIzNgkJQyBzcGVjdWxhdGl2ZSwganVzdCBmb3IgY21wCisJOzsKKyAgIChwOCkJY21wLmx0dQkJcDYsIHA3ID0gcjI4LCByMzYJQyByZWRvIGxhc3QgY21wIGlmIG5lZWRlZAorICAgKHA4KQltb3YJCXIxNSA9IHIyOAorICAgKHA4KQlhZGQJCXIxOCA9IDEsIHIxOAkJQyBxID0gcSArIDE7CWRvbmUgaWY6IHJIID4gMAorCTs7CisgICAocDYpCXNldGYuc2lnCWY3ID0gcjE1CisgICAocDcpCXN1YgkJcjE1ID0gcjE1LCByMzYKKyAgIChwNykJYWRkCQlyMTggPSAxLCByMTgJCUMgcSA9IHEgKyAxOwlkb25lIGlmOiBySCA+IDAKKwk7OworICAgKHA3KQlzZXRmLnNpZwlmNyA9IHIxNQorCXN0OAkJW3IzMl0gPSByMTgsIC04CisJbW92CQlyMzggPSByMTUKKwlici5jbG9vcC5kcHRrCS5Mb29wNAorCTs7CisuTGVuZDQ6CisJc2hyLnUJCXI4ID0gcjM4LCByNDAKKy5McmV0OgorCW1vdgkJYXIucGZzID0gcjQyCisJbW92CQlhci5sYyA9IHI0NAorCW1vdgkJYjAgPSByNDEKKwlici5yZXQuc3B0ay5tYW55IGIwCitFUElMT0dVRSgpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vaWE2NC9kaXZyZW1fMi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2lhNjQvZGl2cmVtXzIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4NjQzMTEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2lhNjQvZGl2cmVtXzIuYXNtCkBAIC0wLDAgKzEsMjgwIEBACitkbmwgIElBLTY0IG1wbl9kaXZyZW1fMiAtLSBEaXZpZGUgYW4gbXBuIG51bWJlciBieSBhIG5vcm1hbGl6ZWQgMi1saW1iIG51bWJlci4KKworZG5sICBDb3B5cmlnaHQgMjAxMCwgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgICAgICAgbm9ybSAgIGZyYWMKK0MgaXRhbml1bSAxCitDIGl0YW5pdW0gMiAgICAgMjkgICAgIDI5CisKKworQyBUT0RPCitDICAqIElubGluZSBhbmQgaW50ZXJsZWF2ZSBsaW1iIGludmVyc2lvbiBjb2RlIHdpdGggbG9vcCBzZXR1cCBjb2RlLgorQyAgKiBXZSBzaG91bGQgdXNlIGV4cGxpY2l0IGJ1bmRsaW5nIGluIG11Y2ggb2YgdGhlIGNvZGUsIHNpbmNlIGl0IHR5cGljYWxseQorQyAgICBjdXRzIHNvbWUgY3ljbGVzIHdpdGggdGhlIEdOVSBhc3NlbWJsZXIuCisKKworQVNNX1NUQVJUKCkKKworQyBIUCdzIGFzc2VtYmxlciByZXF1aXJlcyB0aGVzZSBkZWNsYXJhdGlvbnMgZm9yIGltcG9ydGluZyBtcG5faW52ZXJ0X2xpbWIKKwkuZ2xvYmFsCW1wbl9pbnZlcnRfbGltYgorCS50eXBlCW1wbl9pbnZlcnRfbGltYixAZnVuY3Rpb24KKworQyBJTlBVVCBQQVJBTUVURVJTCitDIHFwICAgPSByMzIKK0MgZm4gICA9IHIzMworQyBucCAgID0gcjM0CitDIG5uICAgPSByMzUKK0MgZHAgICA9IHIzNgorCitkZWZpbmUoYGYweDEnLCBgZjE1JykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9kaXZyZW1fMikKKwkucHJvbG9ndWUKK2lmZGVmKGBIQVZFX0FCSV8zMicsCitgCWFkZHA0CQlyMzIgPSAwLCByMzIJCUMgTSBJCisJYWRkcDQJCXIzNCA9IDAsIHIzNAkJQyBNIEkKKwl6eHQ0CQlyMzUgPSByMzUJCUMgSQorCWFkZHA0CQlyMzYgPSAwLCByMzYJCUMgTSBJCisJbm9wLm0JCTAKKwl6eHQ0CQlyMzMgPSByMzMJCUMgSQorCTs7CisnKQorCS5zYXZlIGFyLnBmcywgcjQyCisJYWxsb2MJIHI0MiA9IGFyLnBmcywgNSwgOSwgMSwgMAorCXNobGFkZAkgcjM0ID0gcjM1LCAzLCByMzQKKwlhZGRzCSByMTQgPSA4LCByMzYKKwltb3YJIHI0MyA9IHIxCisJOzsKKwlhZGRzCSByMTUgPSAtOCwgcjM0CisJbGQ4CSByMzkgPSBbcjE0XQorCS5zYXZlIGFyLmxjLCByNDUKKwltb3YJIHI0NSA9IGFyLmxjCisJYWRkcwkgcjE0ID0gLTE2LCByMzQKKwltb3YJIHI0MCA9IHIwCisJYWRkcwkgcjM0ID0gLTI0LCByMzQKKwk7OworCWxkOAkgcjM4ID0gW3IxNV0KKwkuc2F2ZSBycCwgcjQxCisJbW92CSByNDEgPSBiMAorCS5ib2R5CisJbGQ4CSByMzYgPSBbcjM2XQorCWxkOAkgcjM3ID0gW3IxNF0KKwk7OworCWNtcC5ndHUJIHA2LCBwNyA9IHIzOSwgcjM4CisgIChwNikJYnIuY29uZC5kcHRrIC5MOAorCTs7CisJY21wLmxldQkgcDgsIHA5ID0gcjM2LCByMzcKKwljbXAuZ2V1CSBwNiwgcDcgPSByMzksIHIzOAorCTs7CisgIChwOCkJY21wNC5uZS5hbmQub3JjbSBwNiwgcDcgPSAwLCByMAorICAocDcpCWJyLmNvbmQuZHB0ayAuTDUxCisuTDg6CisJYWRkCSByMTQgPSByMzMsIHIzNQkJLy8gdW4gKyBmbgorCW1vdgkgcjQ2ID0gcjM5CQkvLyBhcmd1bWVudCB0byBtcG5faW52ZXJ0X2xpbWIKKwk7OworCWFkZHMJIHIzNSA9IC0zLCByMTQKKwk7OworCWNtcC5ndAkgcDEyLCBwMCA9IHIwLCByMzUKKyAgKHAxMikJYnIuY29uZC5kcG50IEwoZW5kKQorCWJyLmNhbGwuc3B0ay5tYW55IGIwID0gbXBuX2ludmVydF9saW1iCisJOzsKKwlzZXRmLnNpZyBmMTEgPSByOAkJLy8gZGkgKG5vbi1maW5hbCkKKwlzZXRmLnNpZyBmMzQgPSByMzkJCS8vIGQxCisJc2V0Zi5zaWcgZjMzID0gcjM2CQkvLyBkMAorCW1vdgkgcjEgPSByNDMKKwk7OworCW1vdgkgcjE3ID0gMQorCXNldGYuc2lnIGY5ID0gcjM4CQkvLyBuMgorCXhtYS5sCSBmNiA9IGYxMSwgZjM0LCBmMAkvLyB0MCA9IExPKGRpICogZDEpCisJOzsKKwlzZXRmLnNpZyBmMTAgPSByMzcJCS8vIG4xCisJc2V0Zi5zaWcgZjE1ID0gcjE3CQkvLyAxCisJeG1hLmh1CSBmOCA9IGYxMSwgZjMzLCBmMAkvLyBzMCA9IEhJKGRpICogZDApCisJOzsKKwlnZXRmLnNpZyByMTcgPSBmNgorCWdldGYuc2lnIHIxNiA9IGY4CisJbW92CSBhci5sYyA9IHIzNQorCTs7CisJc3ViCSByMTggPSByMCwgcjM5CQkvLyAtZDEKKwlhZGQJIHIxNCA9IHIxNywgcjM2CisJOzsKKwlzZXRmLnNpZyBmMTQgPSByMTgJCS8vIC1kMQorCWNtcC5sZXUJIHA4LCBwOSA9IHIxNywgcjE0CisJYWRkCSByMTYgPSByMTQsIHIxNgorCTs7CisgIChwOSkJYWRkcwkgcjE5ID0gMCwgcjAKKyAgKHA4KQlhZGRzCSByMTkgPSAtMSwgcjAKKwljbXAuZ3R1CSBwNiwgcDcgPSByMTQsIHIxNgorCTs7CisgIChwNikJYWRkcwkgcjE5ID0gMSwgcjE5CisJOzsKK2lmZWxzZSgxLDEsYAorCWNtcC5ndAkgcDcsIHA2ID0gcjAsIHIxOQorCTs7CisgIChwNikJYWRkcwkgcjggPSAtMSwgcjgJCS8vIGRpLS0KKyAgKHA2KQlzdWIJIHIxNCA9IHIxNiwgcjM5CQkvLyB0MCAtPSBkMQorICAocDYpCWNtcC5sdHUJIHA2LCBwNyA9IHIxNiwgcjM5CS8vIGN5IGZvcjogdDAgLSBkMQorCTs7CisgIChwNikJY21wLmd0CSBwOSwgcDggPSAxLCByMTkKKyAgKHA3KQljbXAuZ3QJIHA5LCBwOCA9IDAsIHIxOQorICAocDYpCWFkZHMJIHIxOSA9IC0xLCByMTkJCS8vIHQxIC09IGN5CisJbW92CSByMTYgPSByMTQKKwk7OworICAocDgpCWFkZHMJIHI4ID0gLTEsIHI4CQkvLyBkaS0tCisgIChwOCkJc3ViCSByMTQgPSByMTYsIHIzOQkJLy8gdDAgLT0gZDEKKyAgKHA4KQljbXAubHR1CSBwOCwgcDkgPSByMTYsIHIzOQkvLyBjeSBmb3I6IHQwIC0gZDEKKwk7OworICAocDgpCWNtcC5ndAkgcDcsIHA2ID0gMSwgcjE5CisgIChwOSkJY21wLmd0CSBwNywgcDYgPSAwLCByMTkKKyAgKHA4KQlhZGRzCSByMTkgPSAtMSwgcjE5CQkvLyB0MSAtPSBjeQorCW1vdgkgcjE2ID0gcjE0CisJOzsKKyAgKHA2KQlhZGRzCSByOCA9IC0xLCByOAkJLy8gZGktLQorICAocDYpCXN1YgkgcjE0ID0gcjE2LCByMzkJCS8vIHQwIC09IGQxCisgIChwNikJY21wLmx0dQkgcDYsIHA3ID0gcjE2LCByMzkJLy8gY3kgZm9yOiB0MCAtIGQxCisJOzsKKyAgKHA2KQljbXAuZ3QJIHA5LCBwOCA9IDEsIHIxOQorICAocDcpCWNtcC5ndAkgcDksIHA4ID0gMCwgcjE5CisgIChwNikJYWRkcwkgcjE5ID0gLTEsIHIxOQkJLy8gdDEgLT0gY3kKKwltb3YJIHIxNiA9IHIxNAorCTs7CisgIChwOCkJYWRkcwkgcjggPSAtMSwgcjgJCS8vIGRpLS0KKyAgKHA4KQlzdWIJIHIxNCA9IHIxNiwgcjM5CQkvLyB0MCAtPSBkMQorICAocDgpCWNtcC5sdHUJIHA4LCBwOSA9IHIxNiwgcjM5CS8vIGN5IGZvcjogdDAgLSBkMQorCTs7CisgIChwOCkJYWRkcwkgcjE5ID0gLTEsIHIxOQkJLy8gdDEgLT0gY3kKKwltb3YJIHIxNiA9IHIxNAorJyxgCisJY21wLmd0CSBwOCwgcDkgPSByMCwgcjE5CisgIChwOCkJYnIuY29uZC5kcG50IC5MNDYKKy5MNTI6CisJY21wLmxldQkgcDYsIHA3ID0gcjM5LCByMTYKKwlzdWIJIHIxNCA9IHIxNiwgcjM5CisJYWRkcwkgcjggPSAtMSwgcjgKKwk7OworICAocDcpCWFkZHMJIHIxOSA9IC0xLCByMTkKKwltb3YJIHIxNiA9IHIxNAorCTs7CisgIChwNykJY21wLmd0CSBwOCwgcDkgPSByMCwgcjE5CisgIChwOSkJYnIuY29uZC5kcHRrIC5MNTIKKy5MNDY6CisnKQorCXNldGYuc2lnIGYzMiA9IHI4CQkvLyBkaQorCXNobGFkZAkgcjMyID0gcjM1LCAzLCByMzIKKwk7OworCisJQUxJR04oMTYpCitMKHRvcCk6CW5vcCAwCisJbm9wIDAKKwljbXAuZ3QJIHA4LCBwOSA9IHIzMywgcjM1CisJOzsKKyAocDgpCW1vdgkgcjM3ID0gcjAKKyAocDkpCWxkOAkgcjM3ID0gW3IzNF0sIC04CisJeG1hLmh1CSBmOCA9IGY5LCBmMzIsIGYxMAkvLwkJCQkwLDI5CisJeG1hLmwJIGYxMiA9IGY5LCBmMzIsIGYxMAkvLwkJCQkwCisJOzsKKwlnZXRmLnNpZyByMjAgPSBmMTIJCS8vIHEwCQkJCTQKKwl4bWEubAkgZjEzID0gZjE1LCBmOCwgZjkJLy8gcSArPSBuMgkJCTQKKwlzdWIJIHI4ID0gLTEsIHIzNgkJLy8gYml0bm90IGQwCisJOzsKKwlnZXRmLnNpZyByMTggPSBmMTMJCS8vCQkJCTgKKwl4bWEubAkgZjcgPSBmMTQsIGYxMywgZjEwCS8vCQkJCTgKKwl4bWEubAkgZjYgPSBmMzMsIGYxMywgZjMzCS8vIHQwID0gTE8oZDAqcStkMCkJCTgKKwl4bWEuaHUJIGY5ID0gZjMzLCBmMTMsIGYzMwkvLyB0MSA9IEhJKGQwKnErZDApCQk5CisJOzsKKwlnZXRmLnNpZyByMzggPSBmNwkJLy8gbjEJCQkJMTIKKwlnZXRmLnNpZyByMTYgPSBmNgkJLy8JCQkJMTMKKwlnZXRmLnNpZyByMTkgPSBmOQkJLy8JCQkJMTQKKwk7OworCXN1YgkgcjM4ID0gcjM4LCByMzkJCS8vIG4xIC09IGQxCQkJMTcKKwk7OworCWNtcC5uZQkgcDksIHAwID0gcjAsIHIwCS8vIGNsZWFyIHA5CisJY21wLmxldQkgcDEwLCBwMTEgPSByMTYsIHIzNwkvLyBjeSBmb3I6IG4wIC0gdDAJCTE4CisJOzsKKwlzdWIJIHIzNyA9IHIzNywgcjE2CQkvLyBuMCAtPSB0MAkJCTE5CisgIChwMTEpCXN1YgkgcjM4ID0gcjM4LCByMTksIDEJLy8gbjEgLT0gdDEgLSBjeQkJMTkKKyAgKHAxMCkJc3ViCSByMzggPSByMzgsIHIxOQkJLy8gbjEgLT0gdDEJCQkxOQorCTs7CisJY21wLmd0dQkgcDYsIHA3ID0gcjIwLCByMzgJLy8gbjEgPj0gcTAJCQkyMAorCTs7CisgIChwNykJY21wLmx0dQkgcDksIHAwID0gcjgsIHIzNwkvLwkJCQkyMQorICAocDYpCWFkZAkgcjE4ID0gMSwgcjE4CQkvLworICAocDcpCWFkZAkgcjM3ID0gcjM3LCByMzYJCS8vCQkJCTIxCisgIChwNykJYWRkCSByMzggPSByMzgsIHIzOQkJLy8JCQkJMjEKKwk7OworCXNldGYuc2lnIGYxMCA9IHIzNwkJLy8gbjEJCQkJMjIKKyAgKHA5KQlhZGQJIHIzOCA9IDEsIHIzOAkJLy8JCQkJMjIKKwk7OworCXNldGYuc2lnIGY5ID0gcjM4CQkvLyBuMgkJCQkyMworCWNtcC5ndHUJIHA2LCBwNyA9IHIzOSwgcjM4CS8vCQkJCTIzCisgIChwNykJYnIuY29uZC5zcG50IEwoZml4KQorTChiY2spOglzdDgJIFtyMzJdID0gcjE4LCAtOAorCWFkZHMJIHIzNSA9IC0xLCByMzUKKwlici5jbG9vcC5zcHRrLmZldyBMKHRvcCkKKwk7OworCitMKGVuZCk6CWFkZAlyMTQgPSA4LCByMzQKKwlhZGQJcjE1ID0gMTYsIHIzNAorCW1vdgkgYjAgPSByNDEKKwk7OworCXN0OAlbcjE0XSA9IHIzNworCXN0OAlbcjE1XSA9IHIzOAorCW1vdgkgYXIucGZzID0gcjQyCisJbW92CSByOCA9IHI0MAorCW1vdgkgYXIubGMgPSByNDUKKwlici5yZXQuc3B0ay5tYW55IGIwCisJOzsKKy5MNTE6CisJLnByZWQucmVsICJtdXRleCIsIHA4LCBwOQorCXN1YgkgcjM3ID0gcjM3LCByMzYKKyAgKHA5KQlzdWIJIHIzOCA9IHIzOCwgcjM5LCAxCisgIChwOCkJc3ViCSByMzggPSByMzgsIHIzOQorCWFkZHMJIHI0MCA9IDEsIHIwCisJYnIgLkw4CisJOzsKKworTChmaXgpOgljbXAuZ2V1CSBwNiwgcDcgPSByMzksIHIzOAorCWNtcC5sZXUJIHA4LCBwOSA9IHIzNiwgcjM3CisJOzsKKyAgKHA4KQljbXA0Lm5lLmFuZC5vcmNtIHA2LCBwNyA9IDAsIHIwCisgIChwNikJYnIuY29uZC5kcHRrIEwoYmNrKQorCXN1YgkgcjM3ID0gcjM3LCByMzYKKyAgKHA5KQlzdWIJIHIzOCA9IHIzOCwgcjM5LCAxCisgIChwOCkJc3ViCSByMzggPSByMzgsIHIzOQorCWFkZHMJIHIxOCA9IDEsIHIxOAorCTs7CisJc2V0Zi5zaWcgZjkgPSByMzgJCS8vIG4yCisJc2V0Zi5zaWcgZjEwID0gcjM3CQkvLyBuMQorCWJyCSBMKGJjaykKKworRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2lhNjQvZ2NkXzExLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vaWE2NC9nY2RfMTEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMzcyMjcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2lhNjQvZ2NkXzExLmFzbQpAQCAtMCwwICsxLDExMCBAQAorZG5sICBJdGFuaXVtLTIgbXBuX2djZF8xMQorCitkbmwgIENvcHlyaWdodCAyMDAyLTIwMDUsIDIwMTIsIDIwMTMsIDIwMTUsIDIwMTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDICAgICAgICAgICBjeWNsZXMvYml0cGFpciAoMXgxIGdjZCkKK0MgSXRhbml1bTogICAgICAgPworQyBJdGFuaXVtIDI6ICAgICA0LjUKKworCitBU01fU1RBUlQoKQorCitDIGN0el90YWJsZVtuXSBpcyB0aGUgbnVtYmVyIG9mIHRyYWlsaW5nIHplcm9zIG9uIG4sIG9yIE1BWFNISUZUIGlmIG49PTAuCisKK2RlZmxpdChNQVhTSElGVCwgNykKK2RlZmxpdChNQVNLLCBldmFsKChtNF9sc2hpZnQoMSxNQVhTSElGVCkpLTEpKQorCisJLnJvZGF0YQorCUFMSUdOKG00X2xzaGlmdCgxLE1BWFNISUZUKSkJQyBhbGlnbiB0YWJsZSB0byBhbGxvdyB1c2luZyBkZXAKK2N0el90YWJsZToKKwlkYXRhMQlNQVhTSElGVAorZm9ybG9vcChpLDEsTUFTSywKK2AJZGF0YTEJbTRfY291bnRfdHJhaWxpbmdfemVyb3MoaSktMQorJykKKworZGVmaW5lKGB4MCcsIHIzMikKK2RlZmluZShgeTAnLCByMzMpCisKK1BST0xPR1VFKG1wbl9nY2RfMTEpCisJLnByb2xvZ3VlCisJLmJvZHkKKwkJYWRkbAlyMjIgPSBAbHRvZmYoY3R6X3RhYmxlKSwgcjEKKwk7OworCQlsZDgJcjIyID0gW3IyMl0KKwkJYnIJTChlbnQpCisJOzsKKworCUFMSUdOKDMyKQorTCh0b3ApOgorCS5wcmVkLnJlbCAibXV0ZXgiLCBwNixwNworIHsubW1pOwkocDcpCW1vdgl5MCA9IHgwCisJKHA2KQlzdWIJeDAgPSB4MCwgeTAKKwkJZGVwCXIyMSA9IHIxOSwgcjIyLCAwLCBNQVhTSElGVAlDIGNvbmNhdCh0YWJsZSxsb3diaXRzKQorfXsubW1pOwkJYW5kCXIyMCA9IE1BU0ssIHIxOQorCShwNykJbW92CXgwID0gcjE5CisJCWFuZAlyMjMgPSA2LCByMTkKKwk7OworfXsubW1pOwkJY21wLmVxCXA2LHAwID0gNCwgcjIzCisJCWNtcC5lcQlwNyxwMCA9IDAsIHIyMworCQlzaHIudQl4MCA9IHgwLCAxCQlDIHNoaWZ0LWJ5LTEsIGFsd2F5cyBPSworfXsubW1iOwkJbGQxCXIxNiA9IFtyMjFdCisJCWNtcC5lcQlwMTAscDAgPSAwLCByMjAKKwkocDEwKQlici5zcG50LmZldy5jbHIJIEwoY291bnRfYmV0dGVyKQorCTs7Cit9CitMKGJjayk6CisJLnByZWQucmVsICJtdXRleCIsIHA2LHA3Cisgey5taWk7CQlub3AJMAorCShwNikJc2hyLnUJeDAgPSB4MCwgMQkJQyB1IHdhcyAuLi4xMDAgYmVmb3JlIHNoaWZ0LWJ5LTEgYWJvdmUKKwkocDcpCXNoci51CXgwID0geDAsIHIxNgkJQyB1IHdhcyAuLi4wMDAgYmVmb3JlIHNoaWZ0LWJ5LTEgYWJvdmUKKwk7OworfQorTChlbnQpOgorIHsubW1pOwkJc3ViCXIxOSA9IHkwLCB4MAorCQljbXAuZ3R1CXA2LHA3ID0geDAsIHkwCisJCWNtcC5uZQlwOCxwMCA9IHgwLCB5MAorfXsubW1iOwkJbm9wCTAKKwkJbm9wCTAKKwkocDgpCWJyLnNwdGsuZmV3LmNsciBMKHRvcCkKK30KKworTChlbmQpOgkJbW92CXI4ID0geTAKKwkJYnIucmV0LnNwdGsubWFueSBiMAorCitMKGNvdW50X2JldHRlcik6CisJCWFkZAlyMjAgPSAtMSwgeDAKKwk7OworCQlhbmRjbQlyMjMgPSByMjAsIHgwCisJOzsKKwkJcG9wY250CXIxNiA9IHIyMworCQlicglMKGJjaykKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vaWE2NC9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2lhNjQvZ21wLW1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZDJiZjMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2lhNjQvZ21wLW1wYXJhbS5oCkBAIC0wLDAgKzEsMjEyIEBACisvKiBnbXAtbXBhcmFtLmggLS0gQ29tcGlsZXIvbWFjaGluZSBwYXJhbWV0ZXIgaGVhZGVyIGZpbGUuCisKK0NvcHlyaWdodCAyMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgNjQKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgOAorCisvKiA5MDBNSHogSXRhbml1bTIgKG9seW1waWMuZ21wbGliLm9yZykgKi8KKy8qIEZGVCB0dW5pbmcgbGltaXQgPSA1OSwxOTQsNzA5ICovCisvKiBHZW5lcmF0ZWQgYnkgdHVuZXVwLmMsIDIwMTktMTAtMTMsIGdjYyA0LjIgKi8KKworI2RlZmluZSBNT0RfMV8xUF9NRVRIT0QgICAgICAgICAgICAgICAgICAgICAgMiAgLyogMTcuNDAlIGZhc3RlciB0aGFuIDEgKi8KKyNkZWZpbmUgTU9EXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PRF8xTl9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA4CisjZGVmaW5lIE1PRF8xVV9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA2CisjZGVmaW5lIE1PRF8xXzFfVE9fTU9EXzFfMl9USFJFU0hPTEQgICAgICAgIDE4CisjZGVmaW5lIE1PRF8xXzJfVE9fTU9EXzFfNF9USFJFU0hPTEQgICAgICAgICAwICAvKiBuZXZlciBtcG5fbW9kXzFzXzJwICovCisjZGVmaW5lIFBSRUlOVl9NT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgIDEzCisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAgICAxICAvKiBuYXRpdmUgKi8KKyNkZWZpbmUgRElWX1FSXzFOX1BJMV9NRVRIT0QgICAgICAgICAgICAgICAgIDEgIC8qIDEuMzUlIGZhc3RlciB0aGFuIDIgKi8KKyNkZWZpbmUgRElWX1FSXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWX1FSXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWX1FSXzJfUEkyX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgRElWRVhBQ1RfMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAobmF0aXZlKSAqLworI2RlZmluZSBCTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgICBNUF9TSVpFX1RfTUFYICAvKiBuZXZlciAqLworCisjZGVmaW5lIERJVl8xX1ZTX01VTF8xX1BFUkNFTlQgICAgICAgICAgICAgMzE2CisKKyNkZWZpbmUgTVVMX1RPT00yMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNDcKKyNkZWZpbmUgTVVMX1RPT00zM19USFJFU0hPTEQgICAgICAgICAgICAgICAgODkKKyNkZWZpbmUgTVVMX1RPT000NF9USFJFU0hPTEQgICAgICAgICAgICAgICAyMjAKKyNkZWZpbmUgTVVMX1RPT002SF9USFJFU0hPTEQgICAgICAgICAgICAgICAzMjcKKyNkZWZpbmUgTVVMX1RPT004SF9USFJFU0hPTEQgICAgICAgICAgICAgICA0NTQKKworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT000M19USFJFU0hPTEQgICAgICA5NworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT001M19USFJFU0hPTEQgICAgIDE1MworI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT001M19USFJFU0hPTEQgICAgIDE0MworI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT002M19USFJFU0hPTEQgICAgIDE1MworI2RlZmluZSBNVUxfVE9PTTQzX1RPX1RPT001NF9USFJFU0hPTEQgICAgIDIyNgorCisjZGVmaW5lIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgIDExCisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDk4CisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTM1CisjZGVmaW5lIFNRUl9UT09NNF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjcyCisjZGVmaW5lIFNRUl9UT09NNl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMzU0CisjZGVmaW5lIFNRUl9UT09NOF9USFJFU0hPTEQgICAgICAgICAgICAgICAgNDkwCisKKyNkZWZpbmUgTVVMTUlEX1RPT000Ml9USFJFU0hPTEQgICAgICAgICAgICAgOTkKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAyMworI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAyNworCisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgODQwICAvKiBrID0gNSAqLworI2RlZmluZSBNVUxfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgODQwLCA1fSwgeyAgICAgMzAsIDZ9LCB7ICAgICAxNiwgNX0sIHsgICAgIDMzLCA2fSwgXAorICAgIHsgICAgIDE3LCA1fSwgeyAgICAgMzYsIDZ9LCB7ICAgICAzNSwgN30sIHsgICAgIDE4LCA2fSwgXAorICAgIHsgICAgIDM3LCA3fSwgeyAgICAgMTksIDZ9LCB7ICAgICA0MiwgN30sIHsgICAgIDM3LCA4fSwgXAorICAgIHsgICAgIDE5LCA3fSwgeyAgICAgNDMsIDh9LCB7ICAgICAyMywgN30sIHsgICAgIDQ3LCA4fSwgXAorICAgIHsgICAgIDQzLCA5fSwgeyAgICAgMjMsIDh9LCB7ICAgICA1MSwgOX0sIHsgICAgIDI3LCA4fSwgXAorICAgIHsgICAgIDU3LCA5fSwgeyAgICAgMzEsIDh9LCB7ICAgICA2MywgOX0sIHsgICAgIDM1LCA4fSwgXAorICAgIHsgICAgIDcxLCA5fSwgeyAgICAgNDMsMTB9LCB7ICAgICAyMywgOX0sIHsgICAgIDU1LDEwfSwgXAorICAgIHsgICAgIDMxLCA5fSwgeyAgICAgNzEsMTB9LCB7ICAgICAzOSwgOX0sIHsgICAgIDgzLDEwfSwgXAorICAgIHsgICAgIDQ3LCA5fSwgeyAgICAgOTksMTB9LCB7ICAgICA1NSwxMX0sIHsgICAgIDMxLDEwfSwgXAorICAgIHsgICAgIDg3LDExfSwgeyAgICAgNDcsMTB9LCB7ICAgIDExMSwxMn0sIHsgICAgIDMxLDExfSwgXAorICAgIHsgICAgIDYzLDEwfSwgeyAgICAxMzUsMTF9LCB7ICAgICA3OSwxMH0sIHsgICAgMTY3LDExfSwgXAorICAgIHsgICAgIDk1LDEwfSwgeyAgICAxOTEsMTF9LCB7ICAgIDExMSwxMn0sIHsgICAgIDYzLDExfSwgXAorICAgIHsgICAgMTQzLDEwfSwgeyAgICAyODcsMTF9LCB7ICAgIDE1OSwxMn0sIHsgICAgIDk1LDExfSwgXAorICAgIHsgICAgMjA3LDEzfSwgeyAgICAgNjMsMTJ9LCB7ICAgIDEyNywxMX0sIHsgICAgMjcxLDEyfSwgXAorICAgIHsgICAgMTU5LDExfSwgeyAgICAzMzUsMTB9LCB7ICAgIDY3MSwxMn0sIHsgICAgMTkxLDEwfSwgXAorICAgIHsgICAgNzk5LDEyfSwgeyAgICAyMjMsMTN9LCB7ICAgIDEyNywxMn0sIHsgICAgMjg3LDExfSwgXAorICAgIHsgICAgNjA3LDEyfSwgeyAgICAzMTksMTF9LCB7ICAgIDY3MSwxM30sIHsgICAgMTkxLDEyfSwgXAorICAgIHsgICAgMzgzLDExfSwgeyAgICA3OTksMTB9LCB7ICAgMTU5OSwxMn0sIHsgICAgNDE1LDExfSwgXAorICAgIHsgICAgODYzLDE0fSwgeyAgICAxMjcsMTN9LCB7ICAgIDI1NSwxMn0sIHsgICAgNTQzLDExfSwgXAorICAgIHsgICAxMTE5LDEyfSwgeyAgICA2MDcsMTN9LCB7ICAgIDMxOSwxMn0sIHsgICAgNzM1LDExfSwgXAorICAgIHsgICAxNDcxLDEyfSwgeyAgICA4NjMsMTN9LCB7ICAgIDQ0NywxMn0sIHsgICAgOTI3LDExfSwgXAorICAgIHsgICAxODU1LDEyfSwgeyAgICA5NTksMTR9LCB7ICAgIDI1NSwxM30sIHsgICAgNTExLDEyfSwgXAorICAgIHsgICAxMDU1LDExfSwgeyAgIDIxMTEsMTJ9LCB7ICAgMTExOSwxM30sIHsgICAgNTc1LDEyfSwgXAorICAgIHsgICAxMjQ3LDEzfSwgeyAgICA2MzksMTJ9LCB7ICAgMTMxMSwxM30sIHsgICAgNzAzLDEyfSwgXAorICAgIHsgICAxNDcxLDEzfSwgeyAgICA4MzEsMTJ9LCB7ICAgMTcyNywxM30sIHsgICAgODk1LDEyfSwgXAorICAgIHsgICAxNzkxLDEzfSwgeyAgICA5NTksMTV9LCB7ICAgIDI1NSwxNH0sIHsgICAgNTExLDEzfSwgXAorICAgIHsgICAxMDg3LDEyfSwgeyAgIDIyMzksMTN9LCB7ICAgMTIxNSwxNH0sIHsgICAgNjM5LDEzfSwgXAorICAgIHsgICAxNDcxLDE0fSwgeyAgICA3NjcsMTN9LCB7ICAgMTcyNywxNH0sIHsgICAgODk1LDEzfSwgXAorICAgIHsgICAxODU1LDEyfSwgeyAgIDM3MTEsMTN9LCB7ICAgMTkxOSwxNX0sIHsgICAgNTExLDE0fSwgXAorICAgIHsgICAxMDIzLDEzfSwgeyAgIDIxMTEsMTJ9LCB7ICAgNDIyMywxM30sIHsgICAyMTc1LDE0fSwgXAorICAgIHsgICAxMTUxLDEzfSwgeyAgIDI0OTUsMTR9LCB7ICAgMTI3OSwxM30sIHsgICAyNjIzLDE0fSwgXAorICAgIHsgICAxNDA3LDE1fSwgeyAgICA3NjcsMTR9LCB7ICAgMTY2MywxM30sIHsgICAzNDU1LDE0fSwgXAorICAgIHsgICAxOTE5LDE2fSwgeyAgICA1MTEsMTV9LCB7ICAgMTAyMywxNH0sIHsgICAyMTc1LDEzfSwgXAorICAgIHsgICA0NDc5LDE0fSwgeyAgIDI0MzEsMTV9LCB7ICAgMTI3OSwxNH0sIHsgICAyOTQzLDE1fSwgXAorICAgIHsgICAxNTM1LDE0fSwgeyAgIDM0NTUsMTV9LCB7ICAgMTc5MSwxNH0sIHsgIDE2Mzg0LDE1fSwgXAorICAgIHsgIDMyNzY4LDE2fSwgeyAgNjU1MzYsMTd9LCB7IDEzMTA3MiwxOH0sIHsgMjYyMTQ0LDE5fSwgXAorICAgIHsgNTI0Mjg4LDIwfSwgezEwNDg1NzYsMjF9LCB7MjA5NzE1MiwyMn0sIHs0MTk0MzA0LDIzfSwgXAorICAgIHs4Mzg4NjA4LDI0fSB9CisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzX1NJWkUgMTQ5CisjZGVmaW5lIE1VTF9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA4NTc2CisKKyNkZWZpbmUgU1FSX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICA3NjUgIC8qIGsgPSA1ICovCisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICA3NjUsIDV9LCB7ICAgICAzNiwgNn0sIHsgICAgIDM3LCA3fSwgeyAgICAgMTksIDZ9LCBcCisgICAgeyAgICAgNDIsIDd9LCB7ICAgICA0MywgOH0sIHsgICAgIDM3LCA5fSwgeyAgICAgMTksIDh9LCBcCisgICAgeyAgICAgNDMsIDl9LCB7ICAgICAyMywgOH0sIHsgICAgIDQ5LCA5fSwgeyAgICAgMjcsIDh9LCBcCisgICAgeyAgICAgNTcsIDl9LCB7ICAgICA0MywxMH0sIHsgICAgIDIzLCA5fSwgeyAgICAgNTUsMTB9LCBcCisgICAgeyAgICAgMzEsIDl9LCB7ICAgICA3MSwxMH0sIHsgICAgIDM5LCA5fSwgeyAgICAgODMsMTB9LCBcCisgICAgeyAgICAgNDcsIDl9LCB7ICAgICA5OSwxMH0sIHsgICAgIDU1LDExfSwgeyAgICAgMzEsMTB9LCBcCisgICAgeyAgICAgODcsMTF9LCB7ICAgICA0NywxMH0sIHsgICAgMTExLDEyfSwgeyAgICAgMzEsMTF9LCBcCisgICAgeyAgICAgNjMsMTB9LCB7ICAgIDEzNSwxMX0sIHsgICAgIDc5LDEwfSwgeyAgICAxNzUsMTF9LCBcCisgICAgeyAgICAgOTUsMTB9LCB7ICAgIDE5OSwxMX0sIHsgICAgMTExLDEyfSwgeyAgICAgNjMsMTF9LCBcCisgICAgeyAgICAxNTksMTJ9LCB7ICAgICA5NSwxMX0sIHsgICAgMTkxLDEwfSwgeyAgICAzOTksMTF9LCBcCisgICAgeyAgICAyMDcsMTN9LCB7ICAgICA2MywxMn0sIHsgICAgMTI3LDEwfSwgeyAgICA1MTEsIDl9LCBcCisgICAgeyAgIDEwMjMsMTB9LCB7ICAgIDUyNywxMX0sIHsgICAgMjcxLDEyfSwgeyAgICAxNTksMTB9LCBcCisgICAgeyAgICA3MDMsMTJ9LCB7ICAgIDE5MSwxMX0sIHsgICAgMzk5LDEwfSwgeyAgICA3OTksMTF9LCBcCisgICAgeyAgICA0MzEsMTJ9LCB7ICAgIDIyMywxM30sIHsgICAgMTI3LDEyfSwgeyAgICAyNTUsMTF9LCBcCisgICAgeyAgICA1MjcsMTB9LCB7ICAgMTA1NSwxMX0sIHsgICAgNTU5LDEyfSwgeyAgICAyODcsMTF9LCBcCisgICAgeyAgICA2MDcsMTB9LCB7ICAgMTIxNSwxMX0sIHsgICAgNzAzLDEzfSwgeyAgICAxOTEsMTJ9LCBcCisgICAgeyAgICAzODMsMTF9LCB7ICAgIDc5OSwxMn0sIHsgICAgNDE1LDExfSwgeyAgICA4NjMsMTJ9LCBcCisgICAgeyAgICA0NDcsMTR9LCB7ICAgIDEyNywxM30sIHsgICAgMjU1LDEyfSwgeyAgICA1MTEsMTF9LCBcCisgICAgeyAgIDEwNTUsMTJ9LCB7ICAgIDU0MywxMX0sIHsgICAxMTE5LDEyfSwgeyAgICA2MDcsMTF9LCBcCisgICAgeyAgIDEyMTUsMTJ9LCB7ICAgIDczNSwxM30sIHsgICAgMzgzLDEyfSwgeyAgICA3OTksMTF9LCBcCisgICAgeyAgIDE1OTksMTJ9LCB7ICAgIDg2MywxM30sIHsgICAgNDQ3LDEyfSwgeyAgICA5OTEsMTR9LCBcCisgICAgeyAgICAyNTUsMTN9LCB7ICAgIDUxMSwxMn0sIHsgICAxMDU1LDExfSwgeyAgIDIxMTEsMTJ9LCBcCisgICAgeyAgIDExMTksMTN9LCB7ICAgIDU3NSwxMn0sIHsgICAxMjE1LDEzfSwgeyAgICA2MzksMTJ9LCBcCisgICAgeyAgIDEzMTEsMTN9LCB7ICAgIDcwMywxMn0sIHsgICAxNDA3LDE0fSwgeyAgICAzODMsMTN9LCBcCisgICAgeyAgICA3NjcsMTJ9LCB7ICAgMTU5OSwxM30sIHsgICAgODMxLDEyfSwgeyAgIDE3MjcsMTN9LCBcCisgICAgeyAgICA4OTUsMTJ9LCB7ICAgMTc5MSwxM30sIHsgICAgOTU5LDEyfSwgeyAgIDE5MTksMTV9LCBcCisgICAgeyAgICAyNTUsMTR9LCB7ICAgIDUxMSwxM30sIHsgICAxMDIzLDEyfSwgeyAgIDIwNDcsMTN9LCBcCisgICAgeyAgIDEwODcsMTJ9LCB7ICAgMjIzOSwxM30sIHsgICAxMTUxLDEyfSwgeyAgIDIzMDMsMTN9LCBcCisgICAgeyAgIDEyMTUsMTR9LCB7ICAgIDYzOSwxM30sIHsgICAxMjc5LDEyfSwgeyAgIDI1NTksMTN9LCBcCisgICAgeyAgIDE0NzEsMTR9LCB7ICAgIDc2NywxM30sIHsgICAxNzI3LDE0fSwgeyAgICA4OTUsMTN9LCBcCisgICAgeyAgIDE5MTksMTV9LCB7ICAgIDUxMSwxNH0sIHsgICAxMDIzLDEzfSwgeyAgIDIyMzksMTR9LCBcCisgICAgeyAgIDExNTEsMTN9LCB7ICAgMjQ5NSwxNH0sIHsgICAxMjc5LDEzfSwgeyAgIDI2MjMsMTR9LCBcCisgICAgeyAgIDE0MDcsMTV9LCB7ICAgIDc2NywxNH0sIHsgICAxNjYzLDEzfSwgeyAgIDM0NTUsMTR9LCBcCisgICAgeyAgIDE5MTksMTZ9LCB7ICAgIDUxMSwxNX0sIHsgICAxMDIzLDE0fSwgeyAgIDIxNzUsMTN9LCBcCisgICAgeyAgIDQ0NzksMTR9LCB7ICAgMjQzMSwxNX0sIHsgICAxMjc5LDE0fSwgeyAgIDI5NDMsMTV9LCBcCisgICAgeyAgIDE1MzUsMTR9LCB7ICAgMzQ1NSwxNX0sIHsgICAxNzkxLDE0fSwgeyAgMTYzODQsMTV9LCBcCisgICAgeyAgMzI3NjgsMTZ9LCB7ICA2NTUzNiwxN30sIHsgMTMxMDcyLDE4fSwgeyAyNjIxNDQsMTl9LCBcCisgICAgeyA1MjQyODgsMjB9LCB7MTA0ODU3NiwyMX0sIHsyMDk3MTUyLDIyfSwgezQxOTQzMDQsMjN9LCBcCisgICAgezgzODg2MDgsMjR9IH0KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTNfU0laRSAxNTMKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDYyNzIKKworI2RlZmluZSBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAzOQorI2RlZmluZSBNVUxMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgMCAgLyogbmV2ZXIgbXBuX211bGxvX2Jhc2VjYXNlICovCisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgIDE3MDUwCisjZGVmaW5lIFNRUkxPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgU1FSTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAxMzQKKyNkZWZpbmUgU1FSTE9fU1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTIzMjIKKworI2RlZmluZSBEQ19ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA3MworI2RlZmluZSBEQ19ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgIDI2MgorI2RlZmluZSBEQ19CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDExMQorI2RlZmluZSBEQ19CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDMxNQorCisjZGVmaW5lIElOVl9NVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgIDkyCisjZGVmaW5lIElOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIElOVl9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDE3CisKKyNkZWZpbmUgQklOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAyODAKKyNkZWZpbmUgUkVEQ18xX1RPX1JFRENfMl9USFJFU0hPTEQgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBSRURDXzJfVE9fUkVEQ19OX1RIUkVTSE9MRCAgICAgICAgIDE3MgorCisjZGVmaW5lIE1VX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAxNDcwCisjZGVmaW5lIE1VX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAxMjEwCisjZGVmaW5lIE1VUElfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTVVfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgIDE1NjYKKyNkZWZpbmUgTVVfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE3ODcKKworI2RlZmluZSBQT1dNX1NFQ19UQUJMRSAgMywyMiwxMzksMTg2NworCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgIDQyCisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAxMzM5CisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAzOTM0CisKKyNkZWZpbmUgRkFDX0RTQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICA4NjYKKyNkZWZpbmUgRkFDX09ERF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworCisjZGVmaW5lIE1BVFJJWDIyX1NUUkFTU0VOX1RIUkVTSE9MRCAgICAgICAgIDIwCisjZGVmaW5lIEhHQ0QyX0RJVjFfTUVUSE9EICAgICAgICAgICAgICAgICAgICAzICAvKiAxMy43MyUgZmFzdGVyIHRoYW4gMSAqLworI2RlZmluZSBIR0NEX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgIDEyOQorI2RlZmluZSBIR0NEX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDIwMgorI2RlZmluZSBIR0NEX1JFRFVDRV9USFJFU0hPTEQgICAgICAgICAgICAgNDQ1NQorI2RlZmluZSBHQ0RfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDY1OAorI2RlZmluZSBHQ0RFWFRfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDQ2OQorI2RlZmluZSBKQUNPQklfQkFTRV9NRVRIT0QgICAgICAgICAgICAgICAgICAgMiAgLyogMC42MiUgZmFzdGVyIHRoYW4gNCAqLworCisvKiBUdW5ldXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgdG9vayAxOTkwNDIgc2Vjb25kcyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9pYTY0L2hhbWRpc3QuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9pYTY0L2hhbWRpc3QuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3N2RmNGMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2lhNjQvaGFtZGlzdC5hc20KQEAgLTAsMCArMSwzNjUgQEAKK2RubCAgSUEtNjQgbXBuX2hhbWRpc3QgLS0gbXBuIGhhbW1pbmcgZGlzdGFuY2UuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqb3JuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDAzLTIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgSXRhbml1bTogICAgICAgMgorQyBJdGFuaXVtIDI6ICAgICAxCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGB1cCcsIGByMzInKQorZGVmaW5lKGB2cCcsIGByMzMnKQorZGVmaW5lKGBuJywgYHIzNCcpCisKK2RlZmluZShgdTAnLGByMTYnKSBkZWZpbmUoYHUxJyxgcjE3JykgZGVmaW5lKGB1MicsYHIxOCcpIGRlZmluZShgdTMnLGByMTknKQorZGVmaW5lKGB2MCcsYHIyMCcpIGRlZmluZShgdjEnLGByMjEnKSBkZWZpbmUoYHYyJyxgcjIyJykgZGVmaW5lKGB2MycsYHIyMycpCitkZWZpbmUoYHgwJyxgcjI0JykgZGVmaW5lKGB4MScsYHIyNScpIGRlZmluZShgeDInLGByMjYnKSBkZWZpbmUoYHgzJyxgcjI3JykKK2RlZmluZShgYzAnLGByMjgnKSBkZWZpbmUoYGMxJyxgcjI5JykgZGVmaW5lKGBjMicsYHIzMCcpIGRlZmluZShgYzMnLGByMzEnKQorZGVmaW5lKGBzJyxgcjgnKQorCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5faGFtZGlzdCkKKwkucHJvbG9ndWUKK2lmZGVmKGBIQVZFX0FCSV8zMicsCitgCWFkZHA0CQl1cCA9IDAsIHVwCQlDCQkJTSBJCisJYWRkcDQJCXZwID0gMCwgdnAJCUMJCQlNIEkKKwl6eHQ0CQluID0gbgkJCUMJCQlJCisJOzsKKycpCisKKyB7Lm1taTsJbGQ4CQlyMTAgPSBbdXBdLCA4CQlDIGxvYWQgZmlyc3QgdWxpbWIJTTAxCisJbGQ4CQlyMTEgPSBbdnBdLCA4CQlDIGxvYWQgZmlyc3QgdmxpbWIJTTAxCisJbW92LmkJCXIyID0gYXIubGMJCUMgc2F2ZSBhci5sYwkJSTAKK317Lm1taTsJYW5kCQlyMTQgPSAzLCBuCQlDCQkJTSBJCisJY21wLmx0CQlwMTUsIHAwID0gNCwgbgkJQyBzbWFsbCBjb3VudD8JCU0gSQorCWFkZAkJbiA9IC01LCBuCQlDCQkJTSBJCisJOzsKK317Lm1taTsJY21wLmVxCQlwNiwgcDAgPSAxLCByMTQJCUMJCQlNIEkKKwljbXAuZXEJCXA3LCBwMCA9IDIsIHIxNAkJQwkJCU0gSQorCWNtcC5lcQkJcDgsIHAwID0gMywgcjE0CQlDCQkJTSBJCit9ey5iYmIKKyAgKHA2KQlici5kcHRrCQkuTGIwMQkJCUMJCQlCCisgIChwNykJYnIuZHB0awkJLkxiMTAJCQlDCQkJQgorICAocDgpCWJyLmRwdGsJCS5MYjExCQkJQwkJCUIKK30KKworCisuTGIwMDoJbGQ4CQl1MSA9IFt1cF0sIDgJCUMJCQlNMDEKKwlsZDgJCXYxID0gW3ZwXSwgOAkJQwkJCU0wMQorCXNoci51CQluID0gbiwgMgkJQwkJCUkwCisJeG9yCQl4MCA9IHIxMCwgcjExCQlDCQkJTSBJCisJOzsKKwlsZDgJCXUyID0gW3VwXSwgOAkJQwkJCU0wMQorCWxkOAkJdjIgPSBbdnBdLCA4CQlDCQkJTTAxCisJbW92LmkJCWFyLmxjID0gbgkJQwkJCUkwCisJeG9yCQl4MSA9IHUxLCB2MQkJQwkJCU0gSQorCTs7CisJbGQ4CQl1MyA9IFt1cF0sIDgJCUMJCQlNMDEKKwlsZDgJCXYzID0gW3ZwXSwgOAkJQwkJCU0wMQorCXhvcgkJeDIgPSB1MiwgdjIJCUMJCQlNIEkKKwltb3YJCXMgPSAwCQkJQwkJCU0gSQorICAocDE1KQlici5jb25kLmRwdGsJLmdydDQJCQlDCQkJQgorCTs7CisJcG9wY250CQljMCA9IHgwCQkJQwkJCUkwCisJeG9yCQl4MyA9IHUzLCB2MwkJQwkJCU0gSQorCTs7CisJcG9wY250CQljMSA9IHgxCQkJQwkJCUkwCisJOzsKKwlwb3BjbnQJCWMyID0geDIJCQlDCQkJSTAKKwlicgkJLkxjajQJCQlDCQkJQgorCisuZ3J0NDoJbGQ4CQl1MCA9IFt1cF0sIDgJCUMJCQlNMDEKKwlsZDgJCXYwID0gW3ZwXSwgOAkJQwkJCU0wMQorCXhvcgkJeDEgPSB1MSwgdjEJCUMJCQlNIEkKKwk7OworCWxkOAkJdTEgPSBbdXBdLCA4CQlDCQkJTTAxCisJbGQ4CQl2MSA9IFt2cF0sIDgJCUMJCQlNMDEKKwl4b3IJCXgyID0gdTIsIHYyCQlDCQkJTSBJCisJOzsKKwlsZDgJCXUyID0gW3VwXSwgOAkJQwkJCU0wMQorCWxkOAkJdjIgPSBbdnBdLCA4CQlDCQkJTTAxCisJcG9wY250CQljMCA9IHgwCQkJQwkJCUkwCisJeG9yCQl4MyA9IHUzLCB2MwkJQwkJCU0gSQorCTs7CisJbGQ4CQl1MyA9IFt1cF0sIDgJCUMJCQlNMDEKKwlsZDgJCXYzID0gW3ZwXSwgOAkJQwkJCU0wMQorCXBvcGNudAkJYzEgPSB4MQkJCUMJCQlJMAorCXhvcgkJeDAgPSB1MCwgdjAJCUMJCQlNIEkKKwlici5jbG9vcC5kcG50CS5ncnQ4CQkJQwkJCUIKKworCXBvcGNudAkJYzIgPSB4MgkJCUMJCQlJMAorCXhvcgkJeDEgPSB1MSwgdjEJCUMJCQlNIEkKKwlicgkJLkxjajgJCQlDCQkJQgorCisuZ3J0ODoJbGQ4CQl1MCA9IFt1cF0sIDgJCUMJCQlNMDEKKwlsZDgJCXYwID0gW3ZwXSwgOAkJQwkJCU0wMQorCXBvcGNudAkJYzIgPSB4MgkJCUMJCQlJMAorCXhvcgkJeDEgPSB1MSwgdjEJCUMJCQlNIEkKKwlicgkJLkxMMDAJCQlDCQkJQgorCisKKy5MYjAxOgl4b3IJCXgzID0gcjEwLCByMTEJCUMJCQlNIEkKKwlzaHIudQkJbiA9IG4sIDIJCUMJCQlJMAorICAocDE1KQlici5jb25kLmRwdGsJLmdydDEJCQlDCQkJQgorCTs7CisJcG9wY250CQlyOCA9IHgzCQkJQwkJCUkwCisJYnIucmV0LnNwdGsubWFueSBiMAkJCUMJCQlCCisKKy5ncnQxOglsZDgJCXUwID0gW3VwXSwgOAkJQwkJCU0wMQorCWxkOAkJdjAgPSBbdnBdLCA4CQlDCQkJTTAxCisJbW92LmkJCWFyLmxjID0gbgkJQwkJCUkwCisJOzsKKwlsZDgJCXUxID0gW3VwXSwgOAkJQwkJCU0wMQorCWxkOAkJdjEgPSBbdnBdLCA4CQlDCQkJTTAxCisJbW92CQlzID0gMAkJCUMJCQlNIEkKKwk7OworCWxkOAkJdTIgPSBbdXBdLCA4CQlDCQkJTTAxCisJbGQ4CQl2MiA9IFt2cF0sIDgJCUMJCQlNMDEKKwk7OworCWxkOAkJdTMgPSBbdXBdLCA4CQlDCQkJTTAxCisJbGQ4CQl2MyA9IFt2cF0sIDgJCUMJCQlNMDEKKwl4b3IJCXgwID0gdTAsIHYwCQlDCQkJTSBJCisJYnIuY2xvb3AuZHBudAkuZ3J0NQkJCUMJCQlCCisKKwl4b3IJCXgxID0gdTEsIHYxCQlDCQkJTSBJCisJOzsKKwlwb3BjbnQJCWMzID0geDMJCQlDCQkJSTAKKwl4b3IJCXgyID0gdTIsIHYyCQlDCQkJTSBJCisJOzsKKwlwb3BjbnQJCWMwID0geDAJCQlDCQkJSTAKKwl4b3IJCXgzID0gdTMsIHYzCQlDCQkJTSBJCisJOzsKKwlwb3BjbnQJCWMxID0geDEJCQlDCQkJSTAKKwlicgkJLkxjajUJCQlDCQkJQgorCisuZ3J0NToJbGQ4CQl1MCA9IFt1cF0sIDgJCUMJCQlNMDEKKwlsZDgJCXYwID0gW3ZwXSwgOAkJQwkJCU0wMQorCXhvcgkJeDEgPSB1MSwgdjEJCUMJCQlNIEkKKwk7OworCWxkOAkJdTEgPSBbdXBdLCA4CQlDCQkJTTAxCisJbGQ4CQl2MSA9IFt2cF0sIDgJCUMJCQlNMDEKKwlwb3BjbnQJCWMzID0geDMJCQlDCQkJSTAKKwl4b3IJCXgyID0gdTIsIHYyCQlDCQkJTSBJCisJOzsKKwlsZDgJCXUyID0gW3VwXSwgOAkJQwkJCU0wMQorCWxkOAkJdjIgPSBbdnBdLCA4CQlDCQkJTTAxCisJcG9wY250CQljMCA9IHgwCQkJQwkJCUkwCisJeG9yCQl4MyA9IHUzLCB2MwkJQwkJCU0gSQorCTs7CisJbGQ4CQl1MyA9IFt1cF0sIDgJCUMJCQlNMDEKKwlsZDgJCXYzID0gW3ZwXSwgOAkJQwkJCU0wMQorCXBvcGNudAkJYzEgPSB4MQkJCUMJCQlJMAorCXhvcgkJeDAgPSB1MCwgdjAJCUMJCQlNIEkKKwlici5jbG9vcC5kcG50CS5Mb29wCQkJQwkJCUIKKwlicgkJLkxlbmQJCQlDCQkJQgorCisKKy5MYjEwOglsZDgJCXUzID0gW3VwXSwgOAkJQwkJCU0wMQorCWxkOAkJdjMgPSBbdnBdLCA4CQlDCQkJTTAxCisJeG9yCQl4MiA9IHIxMCwgcjExCQlDCQkJTSBJCisgIChwMTUpCWJyLmNvbmQuZHB0awkuZ3J0MgkJCUMJCQlCCisJOzsKKwl4b3IJCXgzID0gdTMsIHYzCQlDCQkJTSBJCisJOzsKKwlwb3BjbnQJCWMyID0geDIJCQlDCQkJSTAKKwk7OworCXBvcGNudAkJYzMgPSB4MwkJCUMJCQlJMAorCTs7CisJYWRkCQlzID0gYzIsIGMzCQlDCQkJTSBJCisJYnIucmV0LnNwdGsubWFueSBiMAkJCUMJCQlCCisKKy5ncnQyOglsZDgJCXUwID0gW3VwXSwgOAkJQwkJCU0wMQorCWxkOAkJdjAgPSBbdnBdLCA4CQlDCQkJTTAxCisJc2hyLnUJCW4gPSBuLCAyCQlDCQkJSTAKKwk7OworCWxkOAkJdTEgPSBbdXBdLCA4CQlDCQkJTTAxCisJbGQ4CQl2MSA9IFt2cF0sIDgJCUMJCQlNMDEKKwltb3YuaQkJYXIubGMgPSBuCQlDCQkJSTAKKwltb3YJCXMgPSAwCQkJQwkJCU0gSQorCTs7CisJbGQ4CQl1MiA9IFt1cF0sIDgJCUMJCQlNMDEKKwlsZDgJCXYyID0gW3ZwXSwgOAkJQwkJCU0wMQorCXhvcgkJeDMgPSB1MywgdjMJCUMJCQlNIEkKKwk7OworCWxkOAkJdTMgPSBbdXBdLCA4CQlDCQkJTTAxCisJbGQ4CQl2MyA9IFt2cF0sIDgJCUMJCQlNMDEKKwl4b3IJCXgwID0gdTAsIHYwCQlDCQkJTSBJCisJYnIuY2xvb3AuZHB0awkuZ3J0NgkJCUMJCQlCCisKKwlwb3BjbnQJCWMyID0geDIJCQlDCQkJSTAKKwl4b3IJCXgxID0gdTEsIHYxCQlDCQkJTSBJCisJOzsKKwlwb3BjbnQJCWMzID0geDMJCQlDCQkJSTAKKwl4b3IJCXgyID0gdTIsIHYyCQlDCQkJTSBJCisJOzsKKwlwb3BjbnQJCWMwID0geDAJCQlDCQkJSTAKKwl4b3IJCXgzID0gdTMsIHYzCQlDCQkJTSBJCisJYnIJCS5MY2o2CQkJQwkJCUIKKworLmdydDY6CWxkOAkJdTAgPSBbdXBdLCA4CQlDCQkJTTAxCisJbGQ4CQl2MCA9IFt2cF0sIDgJCUMJCQlNMDEKKwlwb3BjbnQJCWMyID0geDIJCQlDCQkJSTAKKwl4b3IJCXgxID0gdTEsIHYxCQlDCQkJTSBJCisJOzsKKwlsZDgJCXUxID0gW3VwXSwgOAkJQwkJCU0wMQorCWxkOAkJdjEgPSBbdnBdLCA4CQlDCQkJTTAxCisJcG9wY250CQljMyA9IHgzCQkJQwkJCUkwCisJeG9yCQl4MiA9IHUyLCB2MgkJQwkJCU0gSQorCTs7CisJbGQ4CQl1MiA9IFt1cF0sIDgJCUMJCQlNMDEKKwlsZDgJCXYyID0gW3ZwXSwgOAkJQwkJCU0wMQorCXBvcGNudAkJYzAgPSB4MAkJCUMJCQlJMAorCXhvcgkJeDMgPSB1MywgdjMJCUMJCQlNIEkKKwlicgkJLkxMMTAJCQlDCQkJQgorCisKKy5MYjExOglsZDgJCXUyID0gW3VwXSwgOAkJQwkJCU0wMQorCWxkOAkJdjIgPSBbdnBdLCA4CQlDCQkJTTAxCisJc2hyLnUJCW4gPSBuLCAyCQlDCQkJSTAKKwl4b3IJCXgxID0gcjEwLCByMTEJCUMJCQlNIEkKKwk7OworCWxkOAkJdTMgPSBbdXBdLCA4CQlDCQkJTTAxCisJbGQ4CQl2MyA9IFt2cF0sIDgJCUMJCQlNMDEKKwl4b3IJCXgyID0gdTIsIHYyCQlDCQkJTSBJCisgIChwMTUpCWJyLmNvbmQuZHB0awkuZ3J0MwkJCUMJCQlCCisJOzsKKwl4b3IJCXgzID0gdTMsIHYzCQlDCQkJTSBJCisJOzsKKwlwb3BjbnQJCWMxID0geDEJCQlDCQkJSTAKKwk7OworCXBvcGNudAkJYzIgPSB4MgkJCUMJCQlJMAorCTs7CisJcG9wY250CQljMyA9IHgzCQkJQwkJCUkwCisJOzsKKwlhZGQJCXMgPSBjMSwgYzIJCUMJCQlNIEkKKwk7OworCWFkZAkJcyA9IHMsIGMzCQlDCQkJTSBJCisJYnIucmV0LnNwdGsubWFueSBiMAkJCUMJCQlCCisKKy5ncnQzOglsZDgJCXUwID0gW3VwXSwgOAkJQwkJCU0wMQorCWxkOAkJdjAgPSBbdnBdLCA4CQlDCQkJTTAxCisJbW92LmkJCWFyLmxjID0gbgkJQwkJCUkwCisJOzsKKwlsZDgJCXUxID0gW3VwXSwgOAkJQwkJCU0wMQorCWxkOAkJdjEgPSBbdnBdLCA4CQlDCQkJTTAxCisJbW92CQlzID0gMAkJCUMJCQlNIEkKKwk7OworCWxkOAkJdTIgPSBbdXBdLCA4CQlDCQkJTTAxCisJbGQ4CQl2MiA9IFt2cF0sIDgJCUMJCQlNMDEKKwl4b3IJCXgzID0gdTMsIHYzCQlDCQkJTSBJCisJOzsKKwlsZDgJCXUzID0gW3VwXSwgOAkJQwkJCU0wMQorCWxkOAkJdjMgPSBbdnBdLCA4CQlDCQkJTTAxCisJcG9wY250CQljMSA9IHgxCQkJQwkJCUkwCisJeG9yCQl4MCA9IHUwLCB2MAkJQwkJCU0gSQorCWJyLmNsb29wLmRwdGsJLmdydDcJCQlDCQkJQgorCXBvcGNudAkJYzIgPSB4MgkJCUMJCQlJMAorCXhvcgkJeDEgPSB1MSwgdjEJCUMJCQlNIEkKKwk7OworCXBvcGNudAkJYzMgPSB4MwkJCUMJCQlJMAorCXhvcgkJeDIgPSB1MiwgdjIJCUMJCQlNIEkKKwlicgkJLkxjajcJCQlDCQkJQgorCisuZ3J0NzoJbGQ4CQl1MCA9IFt1cF0sIDgJCUMJCQlNMDEKKwlsZDgJCXYwID0gW3ZwXSwgOAkJQwkJCU0wMQorCXBvcGNudAkJYzIgPSB4MgkJCUMJCQlJMAorCXhvcgkJeDEgPSB1MSwgdjEJCUMJCQlNIEkKKwk7OworCWxkOAkJdTEgPSBbdXBdLCA4CQlDCQkJTTAxCisJbGQ4CQl2MSA9IFt2cF0sIDgJCUMJCQlNMDEKKwlwb3BjbnQJCWMzID0geDMJCQlDCQkJSTAKKwl4b3IJCXgyID0gdTIsIHYyCQlDCQkJTSBJCisJYnIJCS5MTDExCQkJQwkJCUIKKworCisJQUxJR04oMzIpCisuTG9vcDoJbGQ4CQl1MCA9IFt1cF0sIDgJCUMJCQlNMDEKKwlsZDgJCXYwID0gW3ZwXSwgOAkJQwkJCU0wMQorCXBvcGNudAkJYzIgPSB4MgkJCUMJCQlJMAorCWFkZAkJcyA9IHMsIGMzCQlDCQkJTSBJCisJeG9yCQl4MSA9IHUxLCB2MQkJQwkJCU0gSQorCW5vcC5iCQkxCQkJQwkJCS0KKwk7OworLkxMMDA6CWxkOAkJdTEgPSBbdXBdLCA4CQlDCQkJTTAxCisJbGQ4CQl2MSA9IFt2cF0sIDgJCUMJCQlNMDEKKwlwb3BjbnQJCWMzID0geDMJCQlDCQkJSTAKKwlhZGQJCXMgPSBzLCBjMAkJQwkJCU0gSQorCXhvcgkJeDIgPSB1MiwgdjIJCUMJCQlNIEkKKwlub3AuYgkJMQkJCUMJCQktCisJOzsKKy5MTDExOglsZDgJCXUyID0gW3VwXSwgOAkJQwkJCU0wMQorCWxkOAkJdjIgPSBbdnBdLCA4CQlDCQkJTTAxCisJcG9wY250CQljMCA9IHgwCQkJQwkJCUkwCisJYWRkCQlzID0gcywgYzEJCUMJCQlNIEkKKwl4b3IJCXgzID0gdTMsIHYzCQlDCQkJTSBJCisJbm9wLmIJCTEJCQlDCQkJLQorCTs7CisuTEwxMDoJbGQ4CQl1MyA9IFt1cF0sIDgJCUMJCQlNMDEKKwlsZDgJCXYzID0gW3ZwXSwgOAkJQwkJCU0wMQorCXBvcGNudAkJYzEgPSB4MQkJCUMJCQlJMAorCWFkZAkJcyA9IHMsIGMyCQlDCQkJTSBJCisJeG9yCQl4MCA9IHUwLCB2MAkJQwkJCU0gSQorCWJyLmNsb29wLmRwdGsJLkxvb3AJCQlDCQkJQgorCTs7CisKKy5MZW5kOglwb3BjbnQJCWMyID0geDIJCQlDCQkJSTAKKwlhZGQJCXMgPSBzLCBjMwkJQwkJCU0gSQorCXhvcgkJeDEgPSB1MSwgdjEJCUMJCQlNIEkKKwk7OworLkxjajg6CXBvcGNudAkJYzMgPSB4MwkJCUMJCQlJMAorCWFkZAkJcyA9IHMsIGMwCQlDCQkJTSBJCisJeG9yCQl4MiA9IHUyLCB2MgkJQwkJCU0gSQorCTs7CisuTGNqNzoJcG9wY250CQljMCA9IHgwCQkJQwkJCUkwCisJYWRkCQlzID0gcywgYzEJCUMJCQlNIEkKKwl4b3IJCXgzID0gdTMsIHYzCQlDCQkJTSBJCisJOzsKKy5MY2o2Oglwb3BjbnQJCWMxID0geDEJCQlDCQkJSTAKKwlhZGQJCXMgPSBzLCBjMgkJQwkJCU0gSQorCTs7CisuTGNqNToJcG9wY250CQljMiA9IHgyCQkJQwkJCUkwCisJYWRkCQlzID0gcywgYzMJCUMJCQlNIEkKKwk7OworLkxjajQ6CXBvcGNudAkJYzMgPSB4MwkJCUMJCQlJMAorCWFkZAkJcyA9IHMsIGMwCQlDCQkJTSBJCisJOzsKKwlhZGQJCXMgPSBzLCBjMQkJQwkJCU0gSQorCTs7CisJYWRkCQlzID0gcywgYzIJCUMJCQlNIEkKKwk7OworCWFkZAkJcyA9IHMsIGMzCQlDCQkJTSBJCisJbW92LmkJCWFyLmxjID0gcjIJCUMJCQlJMAorCWJyLnJldC5zcHRrLm1hbnkgYjAJCQlDCQkJQgorRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2lhNjQvaWE2NC1kZWZzLm00IGIvdGhpcmRfcGFydHkvZ21wL21wbi9pYTY0L2lhNjQtZGVmcy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzFkMjgwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9pYTY0L2lhNjQtZGVmcy5tNApAQCAtMCwwICsxLDE0NyBAQAorZGl2ZXJ0KC0xKQorCisKK2RubCAgQ29weXJpZ2h0IDIwMDAsIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCitkbmwgIGlhNjQgYXNzZW1ibGVyIGNvbW1lbnRzIGFyZSBDKysgc3R5bGUgIi8vIiB0byB0aGUgZW5kIG9mIGxpbmUuICBnYXMKK2RubCAgYWxzbyBhY2NlcHRzICIjIiBhcyBhIGNvbW1lbnQsIGlmIGl0J3MgdGhlIGZpcnN0IG5vbi1ibGFuayBvbiBhIGxpbmUuCitkbmwKK2RubCAgQlNEIG00IGNhbid0IGhhbmRsZSBhIG11bHRpLWNoYXJhY3RlciBjb21tZW50IGxpa2UgIi8vIiAoc2VlIG5vdGVzIGluCitkbmwgIG1wbi9hc20tZGVmcy5tNCkuICBGb3Igbm93IHRoZSBkZWZhdWx0ICIjIiBpcyBsZWZ0LCBidXQgd2l0aCBjYXJlIHRha2VuCitkbmwgIG5vdCB0byBwdXQgYW55IG1hY3JvcyBhZnRlciAiZm9vIyIgKHNpbmNlIG9mIGNvdXJzZSB0aGV5IHdvbid0IGV4cGFuZCkuCisKKworZGVmaW5lKGBBU01fU1RBUlQnLAorbTRfYXNzZXJ0X251bWFyZ3MoMCkKK2AnKQorCisKK2RubCAgQ2FsbGVkOiBQUk9MT0dVRV9jcHUoR1NZTV9QUkVGSVhgJ2ZvbykKK2RubCAgICAgICAgICBFUElMT0dVRV9jcHUoR1NZTV9QUkVGSVhgJ2ZvbykKK2RubAorZG5sICAzMi1ieXRlIGFsaWdubWVudCBpcyB1c2VkIGZvciB0aGUgYmVuZWZpdCBvZiBpdGFuaXVtLTIsIHdoZXJlIHRoZSBjb2RlCitkbmwgIGZldGNoZXIgd2lsbCBvbmx5IHRha2UgMiBidW5kbGVzIGZyb20gYSAzMi1ieXRlIGFsaWduZWQgdGFyZ2V0LiAgQXQKK2RubCAgMTZtb2QzMiBpdCBvbmx5IHJlYWRzIDEgaW4gdGhlIGZpcnN0IGN5Y2xlLiAgVGhpcyBtaWdodCBub3QgbWFrZSBhbnkKK2RubCAgZGlmZmVyZW5jZSBpZiB0aGUgcm90YXRlIGJ1ZmZlcnMgYXJlIGZ1bGwgb3IgdGhlcmUncyBvdGhlciB3b3JrIGhvbGRpbmcKK2RubCAgdXAgZXhlY3V0aW9uLCBidXQgd2UgdXNlIDMyLWJ5dGVzIHRvIGdpdmUgdGhlIGJlc3QgY2hhbmNlIG9mIHBlYWsKK2RubCAgdGhyb3VnaHB1dC4KK2RubAorZG5sICBXZSBjYW4gdXNlIC5hbGlnbiBoZXJlIGRlc3BpdGUgdGhlIGdhcyBidWcgbm90ZWQgaW4gbXBuL2lhNjQvUkVBRE1FLAorZG5sICBzaW5jZSB3ZSdyZSBub3QgZXhwZWN0aW5nIHRvIGV4ZWN1dGUgYWNyb3NzIGEgUFJPTE9HVUUoKSwgYXQgbGVhc3Qgbm90CitkbmwgIGN1cnJlbnRseS4KKworZGVmaW5lKGBQUk9MT0dVRV9jcHUnLAorbTRfYXNzZXJ0X251bWFyZ3MoMSkKKwlgCisJLnRleHQKKwkuYWxpZ24JMzIKKwkuZ2xvYmFsCSQxIworCS5wcm9jCSQxIworJDE6JykKKworZGVmaW5lKGBFUElMT0dVRV9jcHUnLAorbTRfYXNzZXJ0X251bWFyZ3MoMSkKKwlgCisJLmVuZHAJJDEjCisnKQorCitkZWZpbmUoYERBVEFTVEFSVCcsCisJYGRubAorCURBVEEKKyQxOicpCitkZWZpbmUoYERBVEFFTkQnLGBkbmwnKQorCitkZWZpbmUoYEFTTV9FTkQnLGBkbmwnKQorCisKK2RubCAgVXNhZ2U6IEFMSUdOKGJ5dGVzKQorZG5sCitkbmwgIEVtaXQgYSAiLmFsaWduIiBkaXJlY3RpdmUuICAiYnl0ZXMiIGlzIGV2YWwoKWVkLCBzbyBjYW4gYmUgYW4KK2RubCAgZXhwcmVzc2lvbi4KK2RubAorZG5sICBUaGlzIHZlcnNpb24gb3ZlcnJpZGVzIHRoZSBkZWZpbml0aW9uIGluIG1wbi9hc20tZGVmcy5tNC4gIFdlIHN1cHByZXNzCitkbmwgIGFueSAuYWxpZ24gaWYgdGhlIGdhcyBieXRlLXN3YXBwZWQtbm9wcyBidWcgd2FzIGRldGVjdGVkIGJ5IGNvbmZpZ3VyZQorZG5sICBHTVBfQVNNX0lBNjRfQUxJR05fT0suCisKK2RlZmluZShgQUxJR04nLAorbTRfYXNzZXJ0X251bWFyZ3MoMSkKK200X2Fzc2VydF9kZWZpbmVkKGBJQTY0X0FMSUdOX09LJykKK2BpZmVsc2UoSUE2NF9BTElHTl9PSyxubywsCitgLmFsaWduCWV2YWwoJDEpJyknKQorCisKK2RubCAgVXNhZ2U6IEFTU0VSVChbcHJdIFssY29kZV0pCitkbmwKK2RubCAgUmVxdWlyZSB0aGF0IHRoZSBnaXZlbiBwcmVkaWNhdGUgcmVnaXN0ZXIgaXMgdHJ1ZSBhZnRlciBleGVjdXRpbmcgdGhlCitkbmwgIHRlc3QgY29kZS4gIEZvciBleGFtcGxlLAorZG5sCitkbmwgICAgICAgICBBU1NFUlQocDYsCitkbmwgICAgICAgICBgICAgICAgIGNtcC5lcSAgcDYscDAgPSByMywgcjQnKQorZG5sCitkbmwgIElmIHRoZSBwcmVkaWNhdGUgcmVnaXN0ZXIgYXJndW1lbnQgaXMgZW1wdHkgdGhlbiBub3RoaW5nIGlzIHRlc3RlZCwgdGhlCitkbmwgIGNvZGUgaXMganVzdCBleGVjdXRlZC4gIFRoaXMgY2FuIGJlIHVzZWQgZm9yIHNldHVwcyByZXF1aXJlZCBieSBsYXRlcgorZG5sICBBU1NFUlRzLiAgVGhlIGNvZGUgYXJndW1lbnQgY2FuIGJlIG9taXR0ZWQgdG8ganVzdCB0ZXN0IGEgcHJlZGljYXRlCitkbmwgIHdpdGggbm8gc3BlY2lhbCBzZXR1cCBjb2RlLgorZG5sCitkbmwgIEZvciBjb252ZW5pZW5jZSwgc3RvcHMgYXJlIGluc2VydGVkIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGNvZGUgZW1pdHRlZC4KKworZGVmaW5lKEFTU0VSVCwKK200X2Fzc2VydF9udW1hcmdzX3JhbmdlKDEsMikKK200X2Fzc2VydF9kZWZpbmVkKGBXQU5UX0FTU0VSVCcpCitgaWZlbHNlKFdBTlRfQVNTRVJULDEsCitgCTs7CitpZmVsc2UoYCQyJywsLAorYCQyCisJOzsKKycpCitpZmVsc2UoYCQxJywsLAorYCgkMSkJYnIJLkxBU1NFUlRva2AnQVNTRVJUX2xhYmVsX2NvdW50ZXIgOzsKKwljbXAubmUJcDYscDYgPSByMCwgcjAJQyBpbGxlZ2FsIGluc3RydWN0aW9uCisJOzsKKy5MQVNTRVJUb2tgJ0FTU0VSVF9sYWJlbF9jb3VudGVyOgorZGVmaW5lKGBBU1NFUlRfbGFiZWxfY291bnRlcicsZXZhbChBU1NFUlRfbGFiZWxfY291bnRlcisxKSkKKycpCisnKScpCitkZWZpbmUoYEFTU0VSVF9sYWJlbF9jb3VudGVyJywxKQorCitkZWZpbmUoYGdldGZzaWcnLCBgZ2V0Zi5zaWcnKQorZGVmaW5lKGBzZXRmc2lnJywgYHNldGYuc2lnJykKK2RlZmluZShgY21wZXEnLCAgIGBjbXAuZXEnKQorZGVmaW5lKGBjbXBuZScsICAgYGNtcC5uZScpCitkZWZpbmUoYGNtcGx0dScsICBgY21wLmx0dScpCitkZWZpbmUoYGNtcGxldScsICBgY21wLmxldScpCitkZWZpbmUoYGNtcGd0dScsICBgY21wLmd0dScpCitkZWZpbmUoYGNtcGdldScsICBgY21wLmdldScpCitkZWZpbmUoYGNtcGxlJywgICBgY21wLmxlJykKK2RlZmluZShgY21wZ3QnLCAgIGBjbXAuZ3QnKQorZGVmaW5lKGBjbXBlcW9yJywgYGNtcC5lcS5vcicpCitkZWZpbmUoYGNtcGVxdWMnLCBgY21wLmVxLnVuYycpCisKK2RpdmVydApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9pYTY0L2ludmVydF9saW1iLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vaWE2NC9pbnZlcnRfbGltYi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVmZmRkYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vaWE2NC9pbnZlcnRfbGltYi5hc20KQEAgLTAsMCArMSwxMDUgQEAKK2RubCAgSUEtNjQgbXBuX2ludmVydF9saW1iIC0tIEludmVydCBhIG5vcm1hbGl6ZWQgbGltYi4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQgYW5kIEtldmluIFJ5ZGUuCisKK2RubCAgQ29weXJpZ2h0IDIwMDAsIDIwMDIsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBJTlBVVCBQQVJBTUVURVJTCitDIGQgPSByMzIKKworQyAgICAgICAgICAgY3ljbGVzCitDIEl0YW5pdW06ICAgIDc0CitDIEl0YW5pdW0gMjogIDUwKzYKKworQyBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gYXZvaWQgdGhlIHhtcHkuaHUgYW5kIHRoZSBmb2xsb3dpbmcgdGVzdHMgYnkKK0MgZXhwbGljaXRseSBjaG9wcGluZyBpbiB0aGUgbGFzdCBmbWEuICBUaGF0IHdvdWxkIHNhdmUgYWJvdXQgMTAgY3ljbGVzLgorCitBU01fU1RBUlQoKQorCS5zZGF0YQorCS5hbGlnbiAxNgoraWZkZWYoYEhBVkVfRE9VQkxFX0lFRUVfTElUVExFX0VORElBTicsYAorLkxDMDoJZGF0YTQgMHgwMDAwMDAwMCwgMHg4MDAwMDAwMCwgMHgwMDAwNDAzZiwgMHgwMDAwMDAwMAlDIDJeNjQKKy5MQzE6CWRhdGE0IDB4MDAwMDAwMDAsIDB4ODAwMDAwMDAsIDB4MDAwMDQwN2YsIDB4MDAwMDAwMDAJQyAyXjEyOAorCisnLGBpZmRlZihgSEFWRV9ET1VCTEVfSUVFRV9CSUdfRU5ESUFOJyxgCisuTEMwOglkYXRhNCAweDQwM2Y4MDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwCUMgMl42NAorLkxDMToJZGF0YTQgMHg0MDdmODAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMAlDIDJeMTI4CisKKycsYG00X2Vycm9yKGBPb3BzLCBuZWVkIHRvIGtub3cgZmxvYXQgZW5kaWFubmVzcworJyknKScpCisKKworUFJPTE9HVUUobXBuX2ludmVydF9saW1iKQorCQlDIDAwCisJYWRkbAkJcjE0ID0gQGdwcmVsKC5MQzApLCBncAorCWFkZGwJCXIxNSA9IEBncHJlbCguTEMxKSwgZ3AKKwlzZXRmLnNpZwlmNyA9IHIzMgorCWFkZAkJcjkgPSByMzIsIHIzMgkJQyBjaGVjayBmb3IgZCA9IDJeNjMKKwk7OwlDIDAxCisJbGRmZQkJZjEwID0gW3IxNF0JCUMgMl42NAorCWxkZmUJCWY4ID0gW3IxNV0JCUMgMl4xMjgKKwljbXAuZXEJCXA2LCBwMCA9IDAsIHI5CQlDIGNoZWNrIGZvciBkID0gMl42MworCW1vdgkJcjggPSAtMQkJCUMgcmV0dmFsIGZvciAyXjYzCisgICAocDYpCWJyLnJldC5zcG50Lm1hbnkgYjAKKwk7OwlDIDA3CisJZm1weS5zMQkJZjExID0gZjcsIGYxMAkJQyBmMTEgPSBkICogMl42NAorCWZubWEuczEJCWY2ID0gZjcsIGYxMCwgZjgJQyBmNiA9IDJeMTI4IC0gZCAqIDJeNjQKKwk7OwlDIDExCisJZnJjcGEuczEJZjgsIHA2ID0gZjYsIGY3CisJOzsJQyAxNQorICAgKHA2KQlmbm1hLnMxCQlmOSA9IGY3LCBmOCwgZjEKKyAgIChwNikJZm1weS5zMQkJZjEwID0gZjYsIGY4CisJOzsJQyAxOQorICAgKHA2KQlmbXB5LnMxCQlmMTEgPSBmOSwgZjkKKyAgIChwNikJZm1hLnMxCQlmMTAgPSBmOSwgZjEwLCBmMTAKKwk7OwlDIDIzCisgICAocDYpCWZtYS5zMQkJZjggPSBmOSwgZjgsIGY4CisgICAocDYpCWZtYS5zMQkJZjkgPSBmMTEsIGYxMCwgZjEwCisJOzsJQyAyNworICAgKHA2KQlmbWEuczEJCWY4ID0gZjExLCBmOCwgZjgKKyAgIChwNikJZm5tYS5zMQkJZjEwID0gZjcsIGY5LCBmNgorCTs7CUMgMzEKKyAgIChwNikJZm1hLnMxCQlmOCA9IGYxMCwgZjgsIGY5CisJOzsJQyAzNQorCWZjdnQuZnh1LnRydW5jLnMxIGY4ID0gZjgKKwk7OwlDIDM5CisJZ2V0Zi5zaWcJcjggPSBmOAorCXhtcHkuaHUJCWYxMCA9IGY4LCBmNwkJQyBkaSAqIGQKKwk7OwlDIDQzCisJZ2V0Zi5zaWcJcjE0ID0gZjEwCisJYW5kY20JCXI5ID0gLTEsIHIzMgkJQyBvbmUncyBjb21wbGVtZW50CisJOzsJQyA0OAorCWNtcC5sdHUJCXA2LCBwMCA9IHI5LCByMTQJQyBnb3Qgb3ZlcmZsb3c/CisJOzsJQyA0OQorICAgKHA2KQlhZGQJCXI4ID0gLTEsIHI4CQlDIGFkanVzdCBkaSBkb3duCisJYnIucmV0LnNwdGsubWFueSBiMAorRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2lhNjQvbG9nb3BzX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9pYTY0L2xvZ29wc19uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGEyZjYxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9pYTY0L2xvZ29wc19uLmFzbQpAQCAtMCwwICsxLDI5MiBAQAorZG5sICBJQS02NCBtcG5fYW5kX24sIG1wbl9hbmRuX24sIG1wbl9uYW5kX24sIG1wbl9pb3JfbiwgbXBuX2lvcm5fbiwKK2RubCAgbXBuX25pb3JfbiwgbXBuX3hvcl9uLCBtcG5feG5vcl9uIC0tIG1wbiBiaXR3aXNlIGxvZ2ljYWwgb3BlcmF0aW9ucy4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDMtMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgICBjeWNsZXMvbGltYgorQyBJdGFuaXVtOiAgICAgIDIKK0MgSXRhbml1bSAyOiAgICAxCisKK0MgVE9ETworQyAgKiBVc2UgcnAscnB4IHNjaGVtZSBvZiBhb3JzX24uYXNtIHRvIGFsbG93IHBhcmFsbGVsIHN0b3JlcyAodXNlZnVsIGluCitDICAgIHdpbmQtZG93biBjb2RlKS4KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywgYHIzMicpCitkZWZpbmUoYHVwJywgYHIzMycpCitkZWZpbmUoYHZwJywgYHIzNCcpCitkZWZpbmUoYG4nLCBgcjM1JykKKworaWZkZWYoYE9QRVJBVElPTl9hbmRfbicsCitgCWRlZmluZShgZnVuYycsYG1wbl9hbmRfbicpCisJZGVmaW5lKGBsb2dvcCcsCQlgYW5kCSQxID0gJDIsICQzJykKKwlkZWZpbmUoYG5vdG9ybW92JywJYG1vdgkkMSA9ICQyJyknKQoraWZkZWYoYE9QRVJBVElPTl9hbmRuX24nLAorYAlkZWZpbmUoYGZ1bmMnLGBtcG5fYW5kbl9uJykKKwlkZWZpbmUoYGxvZ29wJywJCWBhbmRjbQkkMSA9ICQyLCAkMycpCisJZGVmaW5lKGBub3Rvcm1vdicsCWBtb3YJJDEgPSAkMicpJykKK2lmZGVmKGBPUEVSQVRJT05fbmFuZF9uJywKK2AJZGVmaW5lKGBmdW5jJyxgbXBuX25hbmRfbicpCisJZGVmaW5lKGBsb2dvcCcsCQlgYW5kCSQxID0gJDIsICQzJykKKwlkZWZpbmUoYG5vdG9ybW92JywJYHN1YgkkMSA9IC0xLCAkMicpJykKK2lmZGVmKGBPUEVSQVRJT05faW9yX24nLAorYAlkZWZpbmUoYGZ1bmMnLGBtcG5faW9yX24nKQorCWRlZmluZShgbG9nb3AnLAkJYG9yCSQxID0gJDIsICQzJykKKwlkZWZpbmUoYG5vdG9ybW92JywJYG1vdgkkMSA9ICQyJyknKQoraWZkZWYoYE9QRVJBVElPTl9pb3JuX24nLAorYAlkZWZpbmUoYGZ1bmMnLGBtcG5faW9ybl9uJykKKwlkZWZpbmUoYGxvZ29wJywJCWBhbmRjbQkkMSA9ICQzLCAkMicpCisJZGVmaW5lKGBub3Rvcm1vdicsCWBzdWIJJDEgPSAtMSwgJDInKScpCitpZmRlZihgT1BFUkFUSU9OX25pb3JfbicsCitgCWRlZmluZShgZnVuYycsYG1wbl9uaW9yX24nKQorCWRlZmluZShgbG9nb3AnLAkJYG9yCSQxID0gJDIsICQzJykKKwlkZWZpbmUoYG5vdG9ybW92JywJYHN1YgkkMSA9IC0xLCAkMicpJykKK2lmZGVmKGBPUEVSQVRJT05feG9yX24nLAorYAlkZWZpbmUoYGZ1bmMnLGBtcG5feG9yX24nKQorCWRlZmluZShgbG9nb3AnLAkJYHhvcgkkMSA9ICQyLCAkMycpCisJZGVmaW5lKGBub3Rvcm1vdicsCWBtb3YJJDEgPSAkMicpJykKK2lmZGVmKGBPUEVSQVRJT05feG5vcl9uJywKK2AJZGVmaW5lKGBmdW5jJyxgbXBuX3hub3JfbicpCisJZGVmaW5lKGBsb2dvcCcsCQlgeG9yCSQxID0gJDIsICQzJykKKwlkZWZpbmUoYG5vdG9ybW92JywJYHN1YgkkMSA9IC0xLCAkMicpJykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fYW5kX24gbXBuX2FuZG5fbiBtcG5fbmFuZF9uIG1wbl9pb3JfbiBtcG5faW9ybl9uIG1wbl9uaW9yX24gbXBuX3hvcl9uIG1wbl94bm9yX24pCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShmdW5jKQorCS5wcm9sb2d1ZQorCS5zYXZlCWFyLmxjLCByMgorCS5ib2R5CitpZmRlZihgSEFWRV9BQklfMzInLAorYAlhZGRwNAlycCA9IDAsIHJwCQkJQwkJCU0gSQorCWFkZHA0CXVwID0gMCwgdXAJCQlDCQkJTSBJCisJYWRkcDQJdnAgPSAwLCB2cAkJCUMJCQlNIEkKKwlub3AubQkJMAorCW5vcC5tCQkwCisJenh0NAluID0gbgkJCQlDCQkJSQorCTs7CisnKQorey5tbWkKKwlsZDgJCXIxMCA9IFt1cF0sIDgJCUMJCQlNCisJbGQ4CQlyMTEgPSBbdnBdLCA4CQlDCQkJTQorCW1vdi5pCQlyMiA9IGFyLmxjCQlDCQkJSTAKK30KK3subW1pCisJYW5kCQlyMTQgPSAzLCBuCQlDCQkJTSBJCisJY21wLmx0CQlwMTUsIHAxNCA9IDQsIG4JCUMJCQlNIEkKKwlzaHIudQkJbiA9IG4sIDIJCUMJCQlJMAorCTs7Cit9Cit7Lm1taQorCWNtcC5lcQkJcDYsIHAwID0gMSwgcjE0CQlDCQkJTSBJCisJY21wLmVxCQlwNywgcDAgPSAyLCByMTQJCUMJCQlNIEkKKwljbXAuZXEJCXA4LCBwMCA9IDMsIHIxNAkJQwkJCU0gSQorfQorey5iYmIKKyAgIChwNikJYnIuZHB0awkJLkxiMDEJCQlDCQkJQgorICAgKHA3KQlici5kcHRrCQkuTGIxMAkJCUMJCQlCCisgICAocDgpCWJyLmRwdGsJCS5MYjExCQkJQwkJCUIKK30KKworLkxiMDA6CWxkOAkJcjE3ID0gW3VwXSwgOAkJQwkJCU0KKwlsZDgJCXIyMSA9IFt2cF0sIDgJCUMJCQlNCisJYWRkCQluID0gLTIsIG4JCUMJCQlNIEkKKwk7OworCWxkOAkJcjE4ID0gW3VwXSwgOAkJQwkJCU0KKwlsZDgJCXIyMiA9IFt2cF0sIDgJCUMJCQlNCisJOzsKKwlsZDgJCXIxOSA9IFt1cF0sIDgJCUMJCQlNCisJbGQ4CQlyMjMgPSBbdnBdLCA4CQlDCQkJTQorICAocDE1KQlici5jb25kLmRwbnQJLmdydDQJCQlDCQkJQgorCisJbG9nb3AoCQlyMTQsIHIxMCwgcjExKQkJQwkJCU0gSQorCTs7CisJbG9nb3AoCQlyMTUsIHIxNywgcjIxKQkJQwkJCU0gSQorCW5vdG9ybW92KAlyOCwgcjE0KQkJQwkJCU0gSQorCWJyCQkuTGNqNAkJCUMJCQlCCisKKy5ncnQ0Oglsb2dvcCgJCXIxNCwgcjEwLCByMTEpCQlDCQkJTSBJCisJbGQ4CQlyMTYgPSBbdXBdLCA4CQlDCQkJTQorCWxkOAkJcjIwID0gW3ZwXSwgOAkJQwkJCU0KKwk7OworCWxvZ29wKAkJcjE1LCByMTcsIHIyMSkJCUMJCQlNIEkKKwlsZDgJCXIxNyA9IFt1cF0sIDgJCUMJCQlNCisJbW92LmkJCWFyLmxjID0gbgkJQwkJCUkwCisJbm90b3Jtb3YoCXI4LCByMTQpCQlDCQkJTSBJCisJbGQ4CQlyMjEgPSBbdnBdLCA4CQlDCQkJTQorCWJyCQkuTEwwMAkJCUMJCQlCCisKKy5MYjAxOglhZGQJCW4gPSAtMSwgbgkJQwkJCU0gSQorCWxvZ29wKAkJcjE1LCByMTAsIHIxMSkJCUMJCQlNIEkKKyAgKHAxNSkJYnIuY29uZC5kcG50CS5ncnQxCQkJQwkJCUIKKwk7OworCisJbm90b3Jtb3YoCXI5LCByMTUpCQlDCQkJTSBJCisJYnIJCS5MY2oxCQkJQwkJCUIKKworLmdydDE6CWxkOAkJcjE2ID0gW3VwXSwgOAkJQwkJCU0KKwlsZDgJCXIyMCA9IFt2cF0sIDgJCUMJCQlNCisJOzsKKwlsZDgJCXIxNyA9IFt1cF0sIDgJCUMJCQlNCisJbGQ4CQlyMjEgPSBbdnBdLCA4CQlDCQkJTQorCW1vdi5pCQlhci5sYyA9IG4JCUMJCQlJMAorCTs7CisJbGQ4CQlyMTggPSBbdXBdLCA4CQlDCQkJTQorCWxkOAkJcjIyID0gW3ZwXSwgOAkJQwkJCU0KKwk7OworCWxkOAkJcjE5ID0gW3VwXSwgOAkJQwkJCU0KKwlsZDgJCXIyMyA9IFt2cF0sIDgJCUMJCQlNCisJYnIuY2xvb3AuZHB0awkuZ3J0NQkJCUMJCQlCCisJOzsKKworCWxvZ29wKAkJcjE0LCByMTYsIHIyMCkJCUMJCQlNIEkKKwlub3Rvcm1vdigJcjksIHIxNSkJCUMJCQlNIEkKKwlicgkJLkxjajUJCQlDCQkJQgorCisuZ3J0NToJbG9nb3AoCQlyMTQsIHIxNiwgcjIwKQkJQwkJCU0gSQorCWxkOAkJcjE2ID0gW3VwXSwgOAkJQwkJCU0KKwlub3Rvcm1vdigJcjksIHIxNSkJCUMJCQlNIEkKKwlsZDgJCXIyMCA9IFt2cF0sIDgJCUMJCQlNCisJYnIJCS5MTDAxCQkJQwkJCUIKKworLkxiMTA6CWxkOAkJcjE5ID0gW3VwXSwgOAkJQwkJCU0KKwlsZDgJCXIyMyA9IFt2cF0sIDgJCUMJCQlNCisgIChwMTUpCWJyLmNvbmQuZHBudAkuZ3J0MgkJCUMJCQlCCisKKwlsb2dvcCgJCXIxNCwgcjEwLCByMTEpCQlDCQkJTSBJCisJOzsKKwlsb2dvcCgJCXIxNSwgcjE5LCByMjMpCQlDCQkJTSBJCisJbm90b3Jtb3YoCXI4LCByMTQpCQlDCQkJTSBJCisJYnIJCS5MY2oyCQkJQwkJCUIKKworLmdydDI6CWxkOAkJcjE2ID0gW3VwXSwgOAkJQwkJCU0KKwlsZDgJCXIyMCA9IFt2cF0sIDgJCUMJCQlNCisJYWRkCQluID0gLTEsIG4JCUMJCQlNIEkKKwk7OworCWxkOAkJcjE3ID0gW3VwXSwgOAkJQwkJCU0KKwlsZDgJCXIyMSA9IFt2cF0sIDgJCUMJCQlNCisJbG9nb3AoCQlyMTQsIHIxMCwgcjExKQkJQwkJCU0gSQorCTs7CisJbGQ4CQlyMTggPSBbdXBdLCA4CQlDCQkJTQorCWxkOAkJcjIyID0gW3ZwXSwgOAkJQwkJCU0KKwltb3YuaQkJYXIubGMgPSBuCQlDCQkJSTAKKwk7OworCWxvZ29wKAkJcjE1LCByMTksIHIyMykJCUMJCQlNIEkKKwlsZDgJCXIxOSA9IFt1cF0sIDgJCUMJCQlNCisJbm90b3Jtb3YoCXI4LCByMTQpCQlDCQkJTSBJCisJbGQ4CQlyMjMgPSBbdnBdLCA4CQlDCQkJTQorCWJyLmNsb29wLmRwdGsJLkxvb3AJCQlDCQkJQgorCWJyCQkuTGNqNgkJCUMJCQlCCisKKy5MYjExOglsZDgJCXIxOCA9IFt1cF0sIDgJCUMJCQlNCisJbGQ4CQlyMjIgPSBbdnBdLCA4CQlDCQkJTQorCWFkZAkJbiA9IC0xLCBuCQlDCQkJTSBJCisJOzsKKwlsZDgJCXIxOSA9IFt1cF0sIDgJCUMJCQlNCisJbGQ4CQlyMjMgPSBbdnBdLCA4CQlDCQkJTQorCWxvZ29wKAkJcjE1LCByMTAsIHIxMSkJCUMJCQlNIEkKKyAgKHAxNSkJYnIuY29uZC5kcG50CS5ncnQzCQkJQwkJCUIKKwk7OworCisJbG9nb3AoCQlyMTQsIHIxOCwgcjIyKQkJQwkJCU0gSQorCW5vdG9ybW92KAlyOSwgcjE1KQkJQwkJCU0gSQorCWJyCQkuTGNqMwkJCUMJCQlCCisKKy5ncnQzOglsZDgJCXIxNiA9IFt1cF0sIDgJCUMJCQlNCisJbGQ4CQlyMjAgPSBbdnBdLCA4CQlDCQkJTQorCTs7CisJbGQ4CQlyMTcgPSBbdXBdLCA4CQlDCQkJTQorCWxkOAkJcjIxID0gW3ZwXSwgOAkJQwkJCU0KKwltb3YuaQkJYXIubGMgPSBuCQlDCQkJSTAKKwk7OworCWxvZ29wKAkJcjE0LCByMTgsIHIyMikJCUMJCQlNIEkKKwlsZDgJCXIxOCA9IFt1cF0sIDgJCUMJCQlNCisJbm90b3Jtb3YoCXI5LCByMTUpCQlDCQkJTSBJCisJbGQ4CQlyMjIgPSBbdnBdLCA4CQlDCQkJTQorCWJyCQkuTEwxMQkJCUMJCQlCCisKK0MgKioqIE1BSU4gTE9PUCBTVEFSVCAqKioKKwlBTElHTigzMikKKy5Mb29wOglzdDgJCVtycF0gPSByOCwgOAkJQwkJCU0KKwlsb2dvcCgJCXIxNCwgcjE2LCByMjApCQlDCQkJTSBJCisJbm90b3Jtb3YoCXI5LCByMTUpCQlDCQkJTSBJCisJbGQ4CQlyMTYgPSBbdXBdLCA4CQlDCQkJTQorCWxkOAkJcjIwID0gW3ZwXSwgOAkJQwkJCU0KKwlub3AuYgkJMAorCTs7CisuTEwwMToJc3Q4CQlbcnBdID0gcjksIDgJCUMJCQlNCisJbG9nb3AoCQlyMTUsIHIxNywgcjIxKQkJQwkJCU0gSQorCW5vdG9ybW92KAlyOCwgcjE0KQkJQwkJCU0gSQorCWxkOAkJcjE3ID0gW3VwXSwgOAkJQwkJCU0KKwlsZDgJCXIyMSA9IFt2cF0sIDgJCUMJCQlNCisJbm9wLmIJCTAKKwk7OworLkxMMDA6CXN0OAkJW3JwXSA9IHI4LCA4CQlDCQkJTQorCWxvZ29wKAkJcjE0LCByMTgsIHIyMikJCUMJCQlNIEkKKwlub3Rvcm1vdigJcjksIHIxNSkJCUMJCQlNIEkKKwlsZDgJCXIxOCA9IFt1cF0sIDgJCUMJCQlNCisJbGQ4CQlyMjIgPSBbdnBdLCA4CQlDCQkJTQorCW5vcC5iCQkwCisJOzsKKy5MTDExOglzdDgJCVtycF0gPSByOSwgOAkJQwkJCU0KKwlsb2dvcCgJCXIxNSwgcjE5LCByMjMpCQlDCQkJTSBJCisJbm90b3Jtb3YoCXI4LCByMTQpCQlDCQkJTSBJCisJbGQ4CQlyMTkgPSBbdXBdLCA4CQlDCQkJTQorCWxkOAkJcjIzID0gW3ZwXSwgOAkJQwkJCU0KKwlici5jbG9vcC5kcHRrCS5Mb29wCTs7CQlDCQkJQgorQyAqKiogTUFJTiBMT09QIEVORCAqKioKKworLkxjajY6CXN0OAkJW3JwXSA9IHI4LCA4CQlDCQkJTQorCWxvZ29wKAkJcjE0LCByMTYsIHIyMCkJCUMJCQlNIEkKKwlub3Rvcm1vdigJcjksIHIxNSkJCUMJCQlNIEkKKwk7OworLkxjajU6CXN0OAkJW3JwXSA9IHI5LCA4CQlDCQkJTQorCWxvZ29wKAkJcjE1LCByMTcsIHIyMSkJCUMJCQlNIEkKKwlub3Rvcm1vdigJcjgsIHIxNCkJCUMJCQlNIEkKKwk7OworLkxjajQ6CXN0OAkJW3JwXSA9IHI4LCA4CQlDCQkJTQorCWxvZ29wKAkJcjE0LCByMTgsIHIyMikJCUMJCQlNIEkKKwlub3Rvcm1vdigJcjksIHIxNSkJCUMJCQlNIEkKKwk7OworLkxjajM6CXN0OAkJW3JwXSA9IHI5LCA4CQlDCQkJTQorCWxvZ29wKAkJcjE1LCByMTksIHIyMykJCUMJCQlNIEkKKwlub3Rvcm1vdigJcjgsIHIxNCkJCUMJCQlNIEkKKwk7OworLkxjajI6CXN0OAkJW3JwXSA9IHI4LCA4CQlDCQkJTQorCW5vdG9ybW92KAlyOSwgcjE1KQkJQwkJCU0gSQorCTs7CisuTGNqMToJc3Q4CQlbcnBdID0gcjksIDgJCUMJCQlNCisJbW92LmkJCWFyLmxjID0gcjIJCUMJCQlJMAorCWJyLnJldC5zcHRrLm1hbnkgYjAJCQlDCQkJQgorRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2lhNjQvbG9ycnNoaWZ0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vaWE2NC9sb3Jyc2hpZnQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NGFhZjAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2lhNjQvbG9ycnNoaWZ0LmFzbQpAQCAtMCwwICsxLDM1OCBAQAorZG5sICBJQS02NCBtcG5fbHNoaWZ0L21wbl9yc2hpZnQuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqb3JuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDAwLTIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgSXRhbml1bTogICAgICAyCitDIEl0YW5pdW0gMjogICAgMQorCitDIFRoaXMgY29kZSBpcyBzY2hlZHVsZWQgZGVlcGx5IHNpbmNlIHRoZSBwbGFpbiBzaGlmdCBpbnN0cnVjdGlvbnMgc2hyIGFuZCBzaGwKK0MgaGF2ZSBhIGxhdGVuY3kgb2YgNCAob24gSXRhbml1bSkgb3IgMyAob24gSXRhbml1bSAyKS4gIFBvb3Igc2NoZWR1bGluZyBvZgorQyB0aGVzZSBpbnN0cnVjdGlvbnMgY2F1c2UgYSAxMCBjeWNsZSByZXBsYXkgdHJhcCBvbiBJdGFuaXVtLgorCitDIFRoZSBsZDggc2NoZWR1bGluZyBzaG91bGQgcHJvYmFibHkgYmUgZGVjcmVhc2VkIHRvIG1ha2UgdGhlIGZ1bmN0aW9uIHNtYWxsZXIuCitDIEdvb2QgbGZldGNoICB3aWxsIG1ha2Ugc3VyZSB3ZSBuZXZlciBzdGFsbCBhbnl3YXkuCisKK0MgV2Ugc2hvdWxkIGFjdHVhbGx5IGlzc3VlIHRoZSBmaXJzdCBsZDggYXQgY3ljbGUgMCwgYW5kIHRoZSBmaXJzdCBCU0gvRlNIIHBhaXIKK0MgYXQgY3ljbGUgMi4gIEp1ZGljaW91cyB1c2Ugb2YgcHJlZGljYXRlcyBjb3VsZCBhbGxvdyB1cyB0byBpc3N1ZSBtb3JlIGxkOCdzCitDIGluIHRoZSBwcm9sb2d1ZS4KKworCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLCBgcjMyJykKK2RlZmluZShgdXAnLCBgcjMzJykKK2RlZmluZShgbicsICBgcjM0JykKK2RlZmluZShgY250JyxgcjM1JykKKworZGVmaW5lKGB0bmMnLGByOScpCisKK2lmZGVmKGBPUEVSQVRJT05fbHNoaWZ0JyxgCisJZGVmaW5lKGBGU0gnLGBzaGwnKQorCWRlZmluZShgQlNIJyxgc2hyLnUnKQorCWRlZmluZShgVVBEJyxgLTgnKQorCWRlZmluZShgUE9GRicsYC01MTInKQorCWRlZmluZShgUFVQRCcsYC0zMicpCisJZGVmaW5lKGBmdW5jJyxgbXBuX2xzaGlmdCcpCisnKQoraWZkZWYoYE9QRVJBVElPTl9yc2hpZnQnLGAKKwlkZWZpbmUoYEZTSCcsYHNoci51JykKKwlkZWZpbmUoYEJTSCcsYHNobCcpCisJZGVmaW5lKGBVUEQnLGA4JykKKwlkZWZpbmUoYFBPRkYnLGA1MTInKQorCWRlZmluZShgUFVQRCcsYDMyJykKKwlkZWZpbmUoYGZ1bmMnLGBtcG5fcnNoaWZ0JykKKycpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2xzaGlmdCBtcG5fcnNoaWZ0KQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUoZnVuYykKKwkucHJvbG9ndWUKKwkuc2F2ZQlhci5sYywgcjIKKwkuYm9keQoraWZkZWYoYEhBVkVfQUJJXzMyJywKK2AJYWRkcDQJcnAgPSAwLCBycAkJQwkJCU0gSQorCWFkZHA0CXVwID0gMCwgdXAJCUMJCU0gSQorCXN4dDQJbiA9IG4JCQlDCQlNIEkKKwlub3AubQkJMAorCW5vcC5tCQkwCisJenh0NAljbnQgPSBjbnQJCUMJCUkKKwk7OworJykKKworIHsubW1pOwljbXAubHQJcDE0LCBwMTUgPSA0LCBuCQlDCQlNIEkKKwlhbmQJcjE0ID0gMywgbgkJQwkJTSBJCisJbW92LmkJcjIgPSBhci5sYwkJQwkJSTAKK317Lm1taTsJYWRkCXIxNSA9IC0xLCBuCQlDCQlNIEkKKwlzdWIJdG5jID0gNjQsIGNudAkJQwkJTSBJCisJYWRkCXIxNiA9IC01LCBuCisJOzsKK317Lm1taTsJY21wLmVxCXA2LCBwMCA9IDEsIHIxNAkJQwkJTSBJCisJY21wLmVxCXA3LCBwMCA9IDIsIHIxNAkJQwkJTSBJCisJc2hyLnUJbiA9IHIxNiwgMgkJQwkJSTAKK317Lm1taTsJY21wLmVxCXA4LCBwMCA9IDMsIHIxNAkJQwkJTSBJCitpZmRlZihgT1BFUkFUSU9OX2xzaGlmdCcsCitgCXNobGFkZAl1cCA9IHIxNSwgMywgdXAJCUMJCU0gSQorCXNobGFkZAlycCA9IHIxNSwgMywgcnAnKQlDCQlNIEkKKwk7OworfXsubW1pOwlhZGQJcjExID0gUE9GRiwgdXAJCUMJCU0gSQorCWxkOAlyMTAgPSBbdXBdLCBVUEQJCUMJCU0wMQorCW1vdi5pCWFyLmxjID0gbgkJQwkJSTAKK317LmJiYjsKKyAgIChwNikJYnIuZHB0awkuTGIwMQorICAgKHA3KQlici5kcHRrCS5MYjEwCisgICAocDgpCWJyLmRwdGsJLkxiMTEKKwk7OyB9CisKKy5MYjAwOglsZDgJcjE5ID0gW3VwXSwgVVBECisJOzsKKwlsZDgJcjE2ID0gW3VwXSwgVVBECisJOzsKKwlsZDgJcjE3ID0gW3VwXSwgVVBECisJQlNICXI4ID0gcjEwLCB0bmMJCUMgZnVuY3Rpb24gcmV0dXJuIHZhbHVlCisJOzsKKwlGU0gJcjI0ID0gcjEwLCBjbnQKKwlCU0gJcjI1ID0gcjE5LCB0bmMKKyAgKHAxNCkJYnIuY29uZC5kcHRrCS5ncnQ0CisJOzsKKwlGU0gJcjI2ID0gcjE5LCBjbnQKKwlCU0gJcjI3ID0gcjE2LCB0bmMKKwk7OworCUZTSAlyMjAgPSByMTYsIGNudAorCUJTSAlyMjEgPSByMTcsIHRuYworCTs7CisJb3IJcjE0ID0gcjI1LCByMjQKKwlGU0gJcjIyID0gcjE3LCBjbnQKKwlCU0gJcjIzID0gcjEwLCB0bmMKKwlicgkuTHI0CisKKy5ncnQ0OglsZDgJcjE4ID0gW3VwXSwgVVBECisJRlNICXIyNiA9IHIxOSwgY250CisJQlNICXIyNyA9IHIxNiwgdG5jCisJOzsKKwlsZDgJcjE5ID0gW3VwXSwgVVBECisJRlNICXIyMCA9IHIxNiwgY250CisJQlNICXIyMSA9IHIxNywgdG5jCisJOzsKKwlsZDgJcjE2ID0gW3VwXSwgVVBECisJRlNICXIyMiA9IHIxNywgY250CisJQlNICXIyMyA9IHIxOCwgdG5jCisJOzsKKwlvcglyMTQgPSByMjUsIHIyNAorCWxkOAlyMTcgPSBbdXBdLCBVUEQKKwlici5jbG9vcC5kcG50CS5MdG9wCisJYnIJLkxib3QKKworLkxiMDE6CisgIChwMTUpCUJTSAlyOCA9IHIxMCwgdG5jCQlDIGZ1bmN0aW9uIHJldHVybiB2YWx1ZQlJCisgIChwMTUpCUZTSAlyMjIgPSByMTAsIGNudAkJQwkJSQorICAocDE1KQlici5jb25kLmRwdGsJLkxyMQkJQyByZXR1cm4JQgorCisuZ3J0MToJbGQ4CXIxOCA9IFt1cF0sIFVQRAorCTs7CisJbGQ4CXIxOSA9IFt1cF0sIFVQRAorCUJTSAlyOCA9IHIxMCwgdG5jCQlDIGZ1bmN0aW9uIHJldHVybiB2YWx1ZQorCTs7CisJbGQ4CXIxNiA9IFt1cF0sIFVQRAorCUZTSAlyMjIgPSByMTAsIGNudAorCUJTSAlyMjMgPSByMTgsIHRuYworCTs7CisJbGQ4CXIxNyA9IFt1cF0sIFVQRAorCUZTSAlyMjQgPSByMTgsIGNudAorCUJTSAlyMjUgPSByMTksIHRuYworCWJyLmNsb29wLmRwbnQJLmdydDUKKwk7OworCW9yCXIxNSA9IHIyMywgcjIyCisJRlNICXIyNiA9IHIxOSwgY250CisJQlNICXIyNyA9IHIxNiwgdG5jCisJOzsKKwlGU0gJcjIwID0gcjE2LCBjbnQKKwlCU0gJcjIxID0gcjE3LCB0bmMKKwlicgkuTHI1CisKKy5ncnQ1OglsZDgJcjE4ID0gW3VwXSwgVVBECisJRlNICXIyNiA9IHIxOSwgY250CisJQlNICXIyNyA9IHIxNiwgdG5jCisJOzsKKwlsZDgJcjE5ID0gW3VwXSwgVVBECisJRlNICXIyMCA9IHIxNiwgY250CisJQlNICXIyMSA9IHIxNywgdG5jCisJOzsKKwlvcglyMTUgPSByMjMsIHIyMgorCWxkOAlyMTYgPSBbdXBdLCBVUEQKKwlicgkuTEwwMQorCisKKy5MYjEwOglsZDgJcjE3ID0gW3VwXSwgVVBECisgIChwMTQpCWJyLmNvbmQuZHB0awkuZ3J0MgorCisJQlNICXI4ID0gcjEwLCB0bmMJCUMgZnVuY3Rpb24gcmV0dXJuIHZhbHVlCisJOzsKKwlGU0gJcjIwID0gcjEwLCBjbnQKKwlCU0gJcjIxID0gcjE3LCB0bmMKKwk7OworCW9yCXIxNCA9IHIyMSwgcjIwCisJRlNICXIyMiA9IHIxNywgY250CisJYnIJLkxyMgkJCUMgcmV0dXJuCisKKy5ncnQyOglsZDgJcjE4ID0gW3VwXSwgVVBECisJQlNICXI4ID0gcjEwLCB0bmMJCUMgZnVuY3Rpb24gcmV0dXJuIHZhbHVlCisJOzsKKwlsZDgJcjE5ID0gW3VwXSwgVVBECisJRlNICXIyMCA9IHIxMCwgY250CisJQlNICXIyMSA9IHIxNywgdG5jCisJOzsKKwlsZDgJcjE2ID0gW3VwXSwgVVBECisJRlNICXIyMiA9IHIxNywgY250CisJQlNICXIyMyA9IHIxOCwgdG5jCisJOzsKKyB7Lm1taTsJbGQ4CXIxNyA9IFt1cF0sIFVQRAorCW9yCXIxNCA9IHIyMSwgcjIwCisJRlNICXIyNCA9IHIxOCwgY250Cit9ey5taWI7CW5vcAkwCisJQlNICXIyNSA9IHIxOSwgdG5jCisJYnIuY2xvb3AuZHBudAkuZ3J0NgorCTs7IH0KKworCUZTSAlyMjYgPSByMTksIGNudAorCUJTSAlyMjcgPSByMTYsIHRuYworCWJyCS5McjYKKworLmdydDY6CWxkOAlyMTggPSBbdXBdLCBVUEQKKwlGU0gJcjI2ID0gcjE5LCBjbnQKKwlCU0gJcjI3ID0gcjE2LCB0bmMKKwk7OworCWxkOAlyMTkgPSBbdXBdLCBVUEQKKwlicgkuTEwxMAorCisKKy5MYjExOglsZDgJcjE2ID0gW3VwXSwgVVBECisJOzsKKwlsZDgJcjE3ID0gW3VwXSwgVVBECisJQlNICXI4ID0gcjEwLCB0bmMJCUMgZnVuY3Rpb24gcmV0dXJuIHZhbHVlCisgIChwMTQpCWJyLmNvbmQuZHB0awkuZ3J0MworCTs7CisKKwlGU0gJcjI2ID0gcjEwLCBjbnQKKwlCU0gJcjI3ID0gcjE2LCB0bmMKKwk7OworCUZTSAlyMjAgPSByMTYsIGNudAorCUJTSAlyMjEgPSByMTcsIHRuYworCTs7CisJb3IJcjE1ID0gcjI3LCByMjYKKwlGU0gJcjIyID0gcjE3LCBjbnQKKwlicgkuTHIzCQkJQyByZXR1cm4KKworLmdydDM6CWxkOAlyMTggPSBbdXBdLCBVUEQKKwlGU0gJcjI2ID0gcjEwLCBjbnQKKwlCU0gJcjI3ID0gcjE2LCB0bmMKKwk7OworCWxkOAlyMTkgPSBbdXBdLCBVUEQKKwlGU0gJcjIwID0gcjE2LCBjbnQKKwlCU0gJcjIxID0gcjE3LCB0bmMKKwk7OworCWxkOAlyMTYgPSBbdXBdLCBVUEQKKwlGU0gJcjIyID0gcjE3LCBjbnQKKwlCU0gJcjIzID0gcjE4LCB0bmMKKwk7OworCWxkOAlyMTcgPSBbdXBdLCBVUEQKKwlici5jbG9vcC5kcG50CS5ncnQ3CisKKwlvcglyMTUgPSByMjcsIHIyNgorCUZTSAlyMjQgPSByMTgsIGNudAorCUJTSAlyMjUgPSByMTksIHRuYworCWJyCS5McjcKKworLmdydDc6CW9yCXIxNSA9IHIyNywgcjI2CisJRlNICXIyNCA9IHIxOCwgY250CisJQlNICXIyNSA9IHIxOSwgdG5jCisJbGQ4CXIxOCA9IFt1cF0sIFVQRAorCWJyCS5MTDExCisKK0MgKioqIE1BSU4gTE9PUCBTVEFSVCAqKioKKwlBTElHTigzMikKKy5MdG9wOgorIHsubW1pOwlzdDgJW3JwXSA9IHIxNCwgVVBECQlDIE0yCisJb3IJcjE1ID0gcjI3LCByMjYJCUMgTTMKKwlGU0gJcjI0ID0gcjE4LCBjbnQJCUMgSTAKK317Lm1taTsJbGQ4CXIxOCA9IFt1cF0sIFVQRAkJQyBNMQorCWxmZXRjaAlbcjExXSwgUFVQRAorCUJTSAlyMjUgPSByMTksIHRuYwkJQyBJMQorCTs7IH0KKy5MTDExOgorIHsubW1pOwlzdDgJW3JwXSA9IHIxNSwgVVBECisJb3IJcjE0ID0gcjIxLCByMjAKKwlGU0gJcjI2ID0gcjE5LCBjbnQKK317Lm1taTsJbGQ4CXIxOSA9IFt1cF0sIFVQRAorCW5vcC5tCTAKKwlCU0gJcjI3ID0gcjE2LCB0bmMKKwk7OyB9CisuTEwxMDoKKyB7Lm1taTsJc3Q4CVtycF0gPSByMTQsIFVQRAorCW9yCXIxNSA9IHIyMywgcjIyCisJRlNICXIyMCA9IHIxNiwgY250Cit9ey5tbWk7CWxkOAlyMTYgPSBbdXBdLCBVUEQKKwlub3AubQkwCisJQlNICXIyMSA9IHIxNywgdG5jCisJOzsgfQorLkxMMDE6Cisgey5tbWk7CXN0OAlbcnBdID0gcjE1LCBVUEQKKwlvcglyMTQgPSByMjUsIHIyNAorCUZTSAlyMjIgPSByMTcsIGNudAorfXsubWliOwlsZDgJcjE3ID0gW3VwXSwgVVBECisJQlNICXIyMyA9IHIxOCwgdG5jCisJYnIuY2xvb3AuZHB0awkuTHRvcAorCTs7IH0KK0MgKioqIE1BSU4gTE9PUCBFTkQgKioqCisKKy5MYm90OgorIHsubW1pOwlzdDgJW3JwXSA9IHIxNCwgVVBECisJb3IJcjE1ID0gcjI3LCByMjYKKwlGU0gJcjI0ID0gcjE4LCBjbnQKK317Lm1pYjsJbm9wCTAKKwlCU0gJcjI1ID0gcjE5LCB0bmMKKwlub3AJMAorCTs7IH0KKy5Mcjc6Cisgey5tbWk7CXN0OAlbcnBdID0gcjE1LCBVUEQKKwlvcglyMTQgPSByMjEsIHIyMAorCUZTSAlyMjYgPSByMTksIGNudAorfXsubWliOwlub3AJMAorCUJTSAlyMjcgPSByMTYsIHRuYworCW5vcAkwCisJOzsgfQorLkxyNjoKKyB7Lm1taTsJc3Q4CVtycF0gPSByMTQsIFVQRAorCW9yCXIxNSA9IHIyMywgcjIyCisJRlNICXIyMCA9IHIxNiwgY250Cit9ey5taWI7CW5vcAkwCisJQlNICXIyMSA9IHIxNywgdG5jCisJbm9wCTAKKwk7OyB9CisuTHI1OglzdDgJW3JwXSA9IHIxNSwgVVBECisJb3IJcjE0ID0gcjI1LCByMjQKKwlGU0gJcjIyID0gcjE3LCBjbnQKKwk7OworLkxyNDoJc3Q4CVtycF0gPSByMTQsIFVQRAorCW9yCXIxNSA9IHIyNywgcjI2CisJOzsKKy5McjM6CXN0OAlbcnBdID0gcjE1LCBVUEQKKwlvcglyMTQgPSByMjEsIHIyMAorCTs7CisuTHIyOglzdDgJW3JwXSA9IHIxNCwgVVBECisJOzsKKy5McjE6CXN0OAlbcnBdID0gcjIyLCBVUEQJCUMJCU0yMworCW1vdglhci5sYyA9IHIyCQlDCQlJMAorCWJyLnJldC5zcHRrLm1hbnkgYjAJCUMJCUIKK0VQSUxPR1VFKGZ1bmMpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vaWE2NC9sc2hpZnRjLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vaWE2NC9sc2hpZnRjLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGNlYzg3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9pYTY0L2xzaGlmdGMuYXNtCkBAIC0wLDAgKzEsNDYzIEBACitkbmwgIElBLTY0IG1wbl9sc2hpZnRjLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3Jiam9ybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAwMC0yMDA1LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICAgIGN5Y2xlcy9saW1iCitDIEl0YW5pdW06ICAgICAgPworQyBJdGFuaXVtIDI6ICAgIDEuMjUKKworQyBUaGlzIGNvZGUgaXMgc2NoZWR1bGVkIGRlZXBseSBzaW5jZSB0aGUgcGxhaW4gc2hpZnQgaW5zdHJ1Y3Rpb25zIHNociBhbmQgc2hsCitDIGhhdmUgYSBsYXRlbmN5IG9mIDQgKG9uIEl0YW5pdW0pIG9yIDMgKG9uIEl0YW5pdW0gMikuICBQb29yIHNjaGVkdWxpbmcgb2YKK0MgdGhlc2UgaW5zdHJ1Y3Rpb25zIGNhdXNlIGEgMTAgY3ljbGUgcmVwbGF5IHRyYXAgb24gSXRhbml1bS4KKworQyBUaGUgbGQ4IHNjaGVkdWxpbmcgc2hvdWxkIHByb2JhYmx5IGJlIGRlY3JlYXNlZCB0byBtYWtlIHRoZSBmdW5jdGlvbiBzbWFsbGVyLgorQyBHb29kIGxmZXRjaCAgd2lsbCBtYWtlIHN1cmUgd2UgbmV2ZXIgc3RhbGwgYW55d2F5LgorCitDIFdlIHNob3VsZCBhY3R1YWxseSBpc3N1ZSB0aGUgZmlyc3QgbGQ4IGF0IGN5Y2xlIDAsIGFuZCB0aGUgZmlyc3QgQlNIL0ZTSCBwYWlyCitDIGF0IGN5Y2xlIDIuICBKdWRpY2lvdXMgdXNlIG9mIHByZWRpY2F0ZXMgY291bGQgYWxsb3cgdXMgdG8gaXNzdWUgbW9yZSBsZDgncworQyBpbiB0aGUgcHJvbG9ndWUuCisKKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywgYHIzMicpCitkZWZpbmUoYHVwJywgYHIzMycpCitkZWZpbmUoYG4nLCAgYHIzNCcpCitkZWZpbmUoYGNudCcsYHIzNScpCisKK2RlZmluZShgdG5jJyxgcjknKQorCitkZWZpbmUoYEZTSCcsYHNobCcpCitkZWZpbmUoYEJTSCcsYHNoci51JykKK2RlZmluZShgVVBEJyxgLTgnKQorZGVmaW5lKGBQT0ZGJyxgLTUxMicpCitkZWZpbmUoYFBVUEQnLGAtMzInKQorZGVmaW5lKGBmdW5jJyxgbXBuX2xzaGlmdGMnKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2xzaGlmdGMpCisJLnByb2xvZ3VlCisJLnNhdmUJYXIubGMsIHIyCisJLmJvZHkKK2lmZGVmKGBIQVZFX0FCSV8zMicsCitgCWFkZHA0CXJwID0gMCwgcnAJCUMJCQkJTSBJCisJYWRkcDQJdXAgPSAwLCB1cAkJQwkJCQlNIEkKKwlzeHQ0CW4gPSBuCQkJQwkJCQlNIEkKKwlub3AubQkJMAorCW5vcC5tCQkwCisJenh0NAljbnQgPSBjbnQJCUMJCQkJSQorCTs7CisnKQorCisgey5tbWk7CW5vcAkwCQkJQwkJCQlNIEkKKwlhbmQJcjE0ID0gMywgbgkJQwkJCQlNIEkKKwltb3YuaQlyMiA9IGFyLmxjCQlDCQkJCUkwCit9ey5tbWk7CWFkZAlyMTUgPSAtMSwgbgkJQwkJCQlNIEkKKwlzdWIJdG5jID0gNjQsIGNudAkJQwkJCQlNIEkKKwlub3AJMAorCTs7Cit9ey5tbWk7CWNtcC5lcQlwNiwgcDAgPSAxLCByMTQJCUMJCQkJTSBJCisJY21wLmVxCXA3LCBwMCA9IDIsIHIxNAkJQwkJCQlNIEkKKwlzaHIudQluID0gcjE1LCAyCQlDCQkJCUkwCit9ey5tbWk7CWNtcC5lcQlwOCwgcDAgPSAzLCByMTQJCUMJCQkJTSBJCisJc2hsYWRkCXVwID0gcjE1LCAzLCB1cAkJQwkJCQlNIEkKKwlzaGxhZGQJcnAgPSByMTUsIDMsIHJwCQlDCQkJCU0gSQorCTs7Cit9ey5tbWk7CWFkZAlyMTEgPSBQT0ZGLCB1cAkJQwkJCQlNIEkKKwlsZDgJcjEwID0gW3VwXSwgVVBECQlDCQkJCU0wMQorCW1vdi5pCWFyLmxjID0gbgkJQwkJCQlJMAorfXsuYmJiOworICAgKHA2KQlici5kcHRrCS5MYjAxCisgICAocDcpCWJyLmRwdGsJLkxiMTAKKyAgIChwOCkJYnIuZHB0awkuTGIxMQorCTs7IH0KKworLkxiMDA6CisJbGQ4CXIxOSA9IFt1cF0sIFVQRAorCTs7CisJbGQ4CXIxNiA9IFt1cF0sIFVQRAorCTs7CisJbGQ4CXIxNyA9IFt1cF0sIFVQRAorCUJTSAlyOCA9IHIxMCwgdG5jCisJYnIuY2xvb3AuZHB0awlMKGd0NCkKKwk7OworCUZTSAlyMjQgPSByMTAsIGNudAorCUJTSAlyMjUgPSByMTksIHRuYworCTs7CisJRlNICXIyNiA9IHIxOSwgY250CisJQlNICXIyNyA9IHIxNiwgdG5jCisJOzsKKwlGU0gJcjIwID0gcjE2LCBjbnQKKwlCU0gJcjIxID0gcjE3LCB0bmMKKwk7OworCW9yCXIxNCA9IHIyNSwgcjI0CisJRlNICXIyMiA9IHIxNywgY250CisJOzsKKwlvcglyMTUgPSByMjcsIHIyNgorCXN1YglyMzEgPSAtMSwgcjE0CisJYnIJLkxyNAorCitMKGd0NCk6Cisgey5tbWk7CW5vcAkwCisJbm9wCTAKKwlGU0gJcjI0ID0gcjEwLCBjbnQKK317Lm1taTsJbGQ4CXIxOCA9IFt1cF0sIFVQRAorCW5vcAkwCisJQlNICXIyNSA9IHIxOSwgdG5jCisJOzsgfQorIHsubW1pOwlub3AJMAorCW5vcAkwCisJRlNICXIyNiA9IHIxOSwgY250Cit9ey5tbWk7CWxkOAlyMTkgPSBbdXBdLCBVUEQKKwlub3AJMAorCUJTSAlyMjcgPSByMTYsIHRuYworCTs7IH0KKyB7Lm1taTsJbm9wCTAKKwlub3AJMAorCUZTSAlyMjAgPSByMTYsIGNudAorfXsubW1pOwlsZDgJcjE2ID0gW3VwXSwgVVBECisJbm9wCTAKKwlCU0gJcjIxID0gcjE3LCB0bmMKKwk7OyB9Cisgey5tbWk7CW5vcAkwCisJb3IJcjE0ID0gcjI1LCByMjQKKwlGU0gJcjIyID0gcjE3LCBjbnQKK317Lm1pYjsJbGQ4CXIxNyA9IFt1cF0sIFVQRAorCUJTSAlyMjMgPSByMTgsIHRuYworCWJyLmNsb29wLmRwdGsJTChndDgpCisJOzsgfQorIHsubW1pOwlub3AJMAorCW9yCXIxNSA9IHIyNywgcjI2CisJRlNICXIyNCA9IHIxOCwgY250Cit9ey5taWI7CXN1YglyMzEgPSAtMSwgcjE0CisJQlNICXIyNSA9IHIxOSwgdG5jCisJYnIJLkxyOCB9CisKK0woZ3Q4KToKKwlvcglyMTUgPSByMjcsIHIyNgorCUZTSAlyMjQgPSByMTgsIGNudAorCWxkOAlyMTggPSBbdXBdLCBVUEQKKwlzdWIJcjMxID0gLTEsIHIxNAorCUJTSAlyMjUgPSByMTksIHRuYworCWJyCS5MTDAwCisKKy5MYjAxOgorCWJyLmNsb29wLmRwdGsJTChndDEpCisJOzsKKwlCU0gJcjggPSByMTAsIHRuYworCUZTSAlyMjIgPSByMTAsIGNudAorCTs7CisJc3ViCXIzMSA9IC0xLCByMjIKKwlicgkuTHIxCisJOzsKK0woZ3QxKToKKwlsZDgJcjE4ID0gW3VwXSwgVVBECisJQlNICXI4ID0gcjEwLCB0bmMKKwlGU0gJcjIyID0gcjEwLCBjbnQKKwk7OworCWxkOAlyMTkgPSBbdXBdLCBVUEQKKwk7OworCWxkOAlyMTYgPSBbdXBdLCBVUEQKKwk7OworCWxkOAlyMTcgPSBbdXBdLCBVUEQKKwlCU0gJcjIzID0gcjE4LCB0bmMKKwlici5jbG9vcC5kcHRrCUwoZ3Q1KQorCTs7CisJbm9wCTAKKwlGU0gJcjI0ID0gcjE4LCBjbnQKKwlCU0gJcjI1ID0gcjE5LCB0bmMKKwk7OworCW5vcAkwCisJRlNICXIyNiA9IHIxOSwgY250CisJQlNICXIyNyA9IHIxNiwgdG5jCisJOzsKKwlvcglyMTUgPSByMjMsIHIyMgorCUZTSAlyMjAgPSByMTYsIGNudAorCUJTSAlyMjEgPSByMTcsIHRuYworCTs7CisJb3IJcjE0ID0gcjI1LCByMjQKKwlGU0gJcjIyID0gcjE3LCBjbnQKKwlzdWIJcjMxID0gLTEsIHIxNQorCWJyCS5McjUKKworTChndDUpOgorIHsubW1pOwlub3AJMAorCW5vcAkwCisJRlNICXIyNCA9IHIxOCwgY250Cit9ey5tbWk7CWxkOAlyMTggPSBbdXBdLCBVUEQKKwlub3AJMAorCUJTSAlyMjUgPSByMTksIHRuYworCTs7IH0KKyB7Lm1taTsJbm9wCTAKKwlub3AJMAorCUZTSAlyMjYgPSByMTksIGNudAorfXsubW1pOwlsZDgJcjE5ID0gW3VwXSwgVVBECisJbm9wCTAKKwlCU0gJcjI3ID0gcjE2LCB0bmMKKwk7OyB9Cisgey5tbWk7CW5vcAkwCisJb3IJcjE1ID0gcjIzLCByMjIKKwlGU0gJcjIwID0gcjE2LCBjbnQKK317Lm1taTsJbGQ4CXIxNiA9IFt1cF0sIFVQRAorCW5vcAkwCisJQlNICXIyMSA9IHIxNywgdG5jCisJOzsgfQorIHsubW1pOwlvcglyMTQgPSByMjUsIHIyNAorCXN1YglyMzEgPSAtMSwgcjE1CisJRlNICXIyMiA9IHIxNywgY250Cit9ey5taWI7CWxkOAlyMTcgPSBbdXBdLCBVUEQKKwlCU0gJcjIzID0gcjE4LCB0bmMKKwlicglMKGVuZCkKKwk7OyB9CisKKy5MYjEwOgorCWxkOAlyMTcgPSBbdXBdLCBVUEQKKwlici5jbG9vcC5kcHRrCUwoZ3QyKQorCTs7CisJQlNICXI4ID0gcjEwLCB0bmMKKwlGU0gJcjIwID0gcjEwLCBjbnQKKwk7OworCUJTSAlyMjEgPSByMTcsIHRuYworCUZTSAlyMjIgPSByMTcsIGNudAorCTs7CisJb3IJcjE0ID0gcjIxLCByMjAKKwk7OworCXN1YglyMzEgPSAtMSwgcjE0CisJYnIJLkxyMgorCTs7CitMKGd0Mik6CisJbGQ4CXIxOCA9IFt1cF0sIFVQRAorCUJTSAlyOCA9IHIxMCwgdG5jCisJRlNICXIyMCA9IHIxMCwgY250CisJOzsKKwlsZDgJcjE5ID0gW3VwXSwgVVBECisJOzsKKwlsZDgJcjE2ID0gW3VwXSwgVVBECisJQlNICXIyMSA9IHIxNywgdG5jCisJRlNICXIyMiA9IHIxNywgY250CisJOzsKKwlsZDgJcjE3ID0gW3VwXSwgVVBECisJQlNICXIyMyA9IHIxOCwgdG5jCisJYnIuY2xvb3AuZHB0awlMKGd0NikKKwk7OworCW5vcAkwCisJRlNICXIyNCA9IHIxOCwgY250CisJQlNICXIyNSA9IHIxOSwgdG5jCisJOzsKKwlvcglyMTQgPSByMjEsIHIyMAorCUZTSAlyMjYgPSByMTksIGNudAorCUJTSAlyMjcgPSByMTYsIHRuYworCTs7Cisgey5tbWk7CW5vcAkwCisJb3IJcjE1ID0gcjIzLCByMjIKKwlGU0gJcjIwID0gcjE2LCBjbnQKK317Lm1pYjsJc3ViCXIzMSA9IC0xLCByMTQKKwlCU0gJcjIxID0gcjE3LCB0bmMKKwlicgkuTHI2CisJOzsgfQorTChndDYpOgorIHsubW1pOwlub3AJMAorCW5vcAkwCisJRlNICXIyNCA9IHIxOCwgY250Cit9ey5tbWk7CWxkOAlyMTggPSBbdXBdLCBVUEQKKwlub3AJMAorCUJTSAlyMjUgPSByMTksIHRuYworCTs7IH0KKyB7Lm1taTsgbm9wICAgMAorCW9yCXIxNCA9IHIyMSwgcjIwCisJRlNICXIyNiA9IHIxOSwgY250Cit9ey5tbWk7CWxkOAlyMTkgPSBbdXBdLCBVUEQKKwlub3AJMAorCUJTSAlyMjcgPSByMTYsIHRuYworCTs7IH0KKyB7Lm1taTsJb3IJcjE1ID0gcjIzLCByMjIKKwlzdWIJcjMxID0gLTEsIHIxNAorCUZTSAlyMjAgPSByMTYsIGNudAorfXsubWliOwlsZDgJcjE2ID0gW3VwXSwgVVBECisJQlNICXIyMSA9IHIxNywgdG5jCisJYnIJLkxMMTAKK30KKworLkxiMTE6CisJbGQ4CXIxNiA9IFt1cF0sIFVQRAorCTs7CisJbGQ4CXIxNyA9IFt1cF0sIFVQRAorCUJTSAlyOCA9IHIxMCwgdG5jCisJRlNICXIyNiA9IHIxMCwgY250CisJYnIuY2xvb3AuZHB0awlMKGd0MykKKwk7OworCUJTSAlyMjcgPSByMTYsIHRuYworCTs7CisJRlNICXIyMCA9IHIxNiwgY250CisJQlNICXIyMSA9IHIxNywgdG5jCisJOzsKKwlGU0gJcjIyID0gcjE3LCBjbnQKKwk7OworCW9yCXIxNSA9IHIyNywgcjI2CisJOzsKKwlvcglyMTQgPSByMjEsIHIyMAorCXN1YglyMzEgPSAtMSwgcjE1CisJYnIJLkxyMworCTs7CitMKGd0Myk6CisJbGQ4CXIxOCA9IFt1cF0sIFVQRAorCTs7CisJbGQ4CXIxOSA9IFt1cF0sIFVQRAorCUJTSAlyMjcgPSByMTYsIHRuYworCTs7Cisgey5tbWk7CW5vcAkwCisJbm9wCTAKKwlGU0gJcjIwID0gcjE2LCBjbnQKK317Lm1taTsJbGQ4CXIxNiA9IFt1cF0sIFVQRAorCW5vcAkwCisJQlNICXIyMSA9IHIxNywgdG5jCisJOzsKK317Lm1taTsJbm9wCTAKKwlub3AJMAorCUZTSAlyMjIgPSByMTcsIGNudAorfXsubWliOwlsZDgJcjE3ID0gW3VwXSwgVVBECisJQlNICXIyMyA9IHIxOCwgdG5jCisJYnIuY2xvb3AuZHB0awlMKGd0NykKKwk7OyB9CisJb3IJcjE1ID0gcjI3LCByMjYKKwlGU0gJcjI0ID0gcjE4LCBjbnQKKwlCU0gJcjI1ID0gcjE5LCB0bmMKKwk7OworIHsubW1pOwlub3AJMAorCW9yCXIxNCA9IHIyMSwgcjIwCisJRlNICXIyNiA9IHIxOSwgY250Cit9ey5taWI7CXN1YglyMzEgPSAtMSwgcjE1CisJQlNICXIyNyA9IHIxNiwgdG5jCisJYnIJLkxyNworfQorTChndDcpOgorIHsubW1pOwlub3AJMAorCW9yCXIxNSA9IHIyNywgcjI2CisJRlNICXIyNCA9IHIxOCwgY250Cit9ey5tbWk7CWxkOAlyMTggPSBbdXBdLCBVUEQKKwlub3AJMAorCUJTSAlyMjUgPSByMTksIHRuYworCTs7IH0KKyB7Lm1taTsJb3IJcjE0ID0gcjIxLCByMjAKKwlzdWIJcjMxID0gLTEsIHIxNQorCUZTSAlyMjYgPSByMTksIGNudAorfXsubWliOwlsZDgJcjE5ID0gW3VwXSwgVVBECisJQlNICXIyNyA9IHIxNiwgdG5jCisJYnIJLkxMMTEKK30KKworQyAqKiogTUFJTiBMT09QIFNUQVJUICoqKgorCUFMSUdOKDMyKQorTCh0b3ApOgorLkxMMDE6Cisgey5tbWk7CXN0OAlbcnBdID0gcjMxLCBVUEQJCUMgTTIKKwlvcglyMTUgPSByMjcsIHIyNgkJQyBNMworCUZTSAlyMjQgPSByMTgsIGNudAkJQyBJMAorfXsubW1pOwlsZDgJcjE4ID0gW3VwXSwgVVBECQlDIE0wCisJc3ViCXIzMSA9IC0xLCByMTQJCUMgTTEKKwlCU0gJcjI1ID0gcjE5LCB0bmMJCUMgSTEKKwk7OyB9CisuTEwwMDoKKyB7Lm1taTsJc3Q4CVtycF0gPSByMzEsIFVQRAorCW9yCXIxNCA9IHIyMSwgcjIwCisJRlNICXIyNiA9IHIxOSwgY250Cit9ey5tbWk7CWxkOAlyMTkgPSBbdXBdLCBVUEQKKwlzdWIJcjMxID0gLTEsIHIxNQorCUJTSAlyMjcgPSByMTYsIHRuYworCTs7IH0KKy5MTDExOgorIHsubW1pOwlzdDgJW3JwXSA9IHIzMSwgVVBECisJb3IJcjE1ID0gcjIzLCByMjIKKwlGU0gJcjIwID0gcjE2LCBjbnQKK317Lm1taTsJbGQ4CXIxNiA9IFt1cF0sIFVQRAorCXN1YglyMzEgPSAtMSwgcjE0CisJQlNICXIyMSA9IHIxNywgdG5jCisJOzsgfQorLkxMMTA6Cisgey5tbWk7CXN0OAlbcnBdID0gcjMxLCBVUEQKKwlvcglyMTQgPSByMjUsIHIyNAorCUZTSAlyMjIgPSByMTcsIGNudAorfXsubW1pOwlsZDgJcjE3ID0gW3VwXSwgVVBECisJc3ViCXIzMSA9IC0xLCByMTUKKwlCU0gJcjIzID0gcjE4LCB0bmMKKwk7OyB9CitMKGVuZCk6CWxmZXRjaAkJW3IxMV0sIFBVUEQKKwlici5jbG9vcC5kcHRrCUwodG9wKQorQyAqKiogTUFJTiBMT09QIEVORCAqKioKKworIHsubW1pOwlzdDgJW3JwXSA9IHIzMSwgVVBECisJb3IJcjE1ID0gcjI3LCByMjYKKwlGU0gJcjI0ID0gcjE4LCBjbnQKK317Lm1pYjsJc3ViCXIzMSA9IC0xLCByMTQKKwlCU0gJcjI1ID0gcjE5LCB0bmMKKwlub3AJMAorCTs7IH0KKy5Mcjg6Cisgey5tbWk7CXN0OAlbcnBdID0gcjMxLCBVUEQKKwlvcglyMTQgPSByMjEsIHIyMAorCUZTSAlyMjYgPSByMTksIGNudAorfXsubWliOwlzdWIJcjMxID0gLTEsIHIxNQorCUJTSAlyMjcgPSByMTYsIHRuYworCW5vcAkwCisJOzsgfQorLkxyNzoKKyB7Lm1taTsJc3Q4CVtycF0gPSByMzEsIFVQRAorCW9yCXIxNSA9IHIyMywgcjIyCisJRlNICXIyMCA9IHIxNiwgY250Cit9ey5taWI7CXN1YglyMzEgPSAtMSwgcjE0CisJQlNICXIyMSA9IHIxNywgdG5jCisJbm9wCTAKKwk7OyB9CisuTHI2OglzdDgJW3JwXSA9IHIzMSwgVVBECisJb3IJcjE0ID0gcjI1LCByMjQKKwlGU0gJcjIyID0gcjE3LCBjbnQKKwlzdWIJcjMxID0gLTEsIHIxNQorCTs7CisuTHI1OglzdDgJW3JwXSA9IHIzMSwgVVBECisJb3IJcjE1ID0gcjI3LCByMjYKKwlzdWIJcjMxID0gLTEsIHIxNAorCTs7CisuTHI0OglzdDgJW3JwXSA9IHIzMSwgVVBECisJb3IJcjE0ID0gcjIxLCByMjAKKwlzdWIJcjMxID0gLTEsIHIxNQorCTs7CisuTHIzOglzdDgJW3JwXSA9IHIzMSwgVVBECisJc3ViCXIzMSA9IC0xLCByMTQKKwk7OworLkxyMjoJc3Q4CVtycF0gPSByMzEsIFVQRAorCXN1YglyMzEgPSAtMSwgcjIyCisJOzsKKy5McjE6CXN0OAlbcnBdID0gcjMxLCBVUEQJCUMJCQkJTTIzCisJbW92CWFyLmxjID0gcjIJCUMJCQkJSTAKKwlici5yZXQuc3B0ay5tYW55IGIwCQlDCQkJCUIKK0VQSUxPR1VFKGZ1bmMpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vaWE2NC9tb2RfMzRsc3ViMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2lhNjQvbW9kXzM0bHN1YjEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ODkxMTcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2lhNjQvbW9kXzM0bHN1YjEuYXNtCkBAIC0wLDAgKzEsMjM3IEBACitkbmwgIElBLTY0IG1wbl9tb2RfMzRsc3ViMQorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3Jiam9ybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAwMy0yMDA1LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICAgIGN5Y2xlcy9saW1iCitDIEl0YW5pdW06ICAgICAgPworQyBJdGFuaXVtIDI6ICAgIDEKKworCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgdXAnLCBgcjMyJykKK2RlZmluZShgbicsICBgcjMzJykKKworQyBTb21lIHVzZWZ1bCBhbGlhc2VzIGZvciByZWdpc3RlcnMgd2UgdXNlCitkZWZpbmUoYHUwJyxgcjE0JykgZGVmaW5lKGB1MScsYHIxNScpIGRlZmluZShgdTInLGByMTYnKQorZGVmaW5lKGBhMCcsYHIxNycpIGRlZmluZShgYTEnLGByMTgnKSBkZWZpbmUoYGEyJyxgcjE5JykKK2RlZmluZShgYzAnLGByMjAnKSBkZWZpbmUoYGMxJyxgcjIxJykgZGVmaW5lKGBjMicsYHIyMicpCisKK0MgVGhpcyBpcyBhIGZhaXJseSBzaW1wbGUtbWluZGVkIGltcGxlbWVudGF0aW9uLiAgT25lIGNvdWxkIGFwcHJvYWNoIDAuNjcgYy9sCitDIHdpdGggYSBtb3JlIHNvcGhpc3RpY2F0ZWQgaW1wbGVtZW50YXRpb24uICBJZiB3ZSdyZSByZWFsbHkgY3JhenksIHdlIGNvdWxkCitDIHN1cGVyLXVucm9sbCwgc3RvcmluZyBjYXJyaWVzIGp1c3QgaW4gcHJlZGljYXRlIHJlZ2lzdGVycywgdGhlbiBjb3B5IHRoZW0gdG8KK0MgYSBnZW5lcmFsIHJlZ2lzdGVyLCBhbmQgcG9wdWxhdGlvbiBjb3VudCB0aGVtIGZyb20gdGhlcmUuICBUaGF0J2QgYnJpbmcgdXMKK0MgY2xvc2UgdG8gMyBpbnNuL2xpbWIsIGZvciBuZWFybHkgMC41IGMvbC4KKworQyBDb21wdXRpbmcgbi8zIG5lZWRzIDE2IGN5Y2xlcywgd2hpY2ggaXMgYSBsb3Qgb2Ygc3RhcnR1cCBvdmVyaGVhZC4KK0MgV2UgdGhlcmVmb3JlIHVzZSBhIHBsYWluIHdoaWxlLXN0eWxlIGxvb3A6CitDCWFkZAkJbiA9IC0zLCBuCitDCWNtcC5sZQkJcDksIHAwID0gMywgbgorQyAgKHA5KQlici5jb25kCQkuTG9vcAorQyBBbHRlcm5hdGl2ZWx5LCB3ZSBjb3VsZCB0YWJsZSBuLzMgZm9yLCBzYXksIG4gPCAyNTYsIGFuZCBwcmVkaWNhdGUgdGhlCitDIDE2LWN5Y2xlIGNvZGUuCisKK0MgVGhlIHN1bW1pbmctdXAgY29kZSBhdCB0aGUgZW5kIHdhcyB3cml0dGVuIHF1aWNrbHksIGFuZCBjb3VsZCBzdXJlbHkgYmUKK0MgdmFzdGx5IGltcHJvdmVkLgorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX21vZF8zNGxzdWIxKQorCS5wcm9sb2d1ZQorCS5zYXZlCWFyLmxjLCByMgorCS5ib2R5CitpZmRlZihgSEFWRV9BQklfMzInLGAKKwlhZGRwNAkJdXAgPSAwLCB1cAkJQwkJCU0gSQorCW5vcC5tCQkwCisJenh0NAkJbiA9IG4JCQlDCQkJSQorCTs7CisnKQorCitpZmVsc2UoMCwxLGAKKwltb3ZsCQlyMTQgPSAweEFBQUFBQUFBQUFBQUFBQUIKKwk7OworCXNldGYuc2lnCWY2ID0gcjE0CisJc2V0Zi5zaWcJZjcgPSByMzMKKwk7OworCXhtcHkuaHUJCWY2ID0gZjYsIGY3CisJOzsKKwlnZXRmLnNpZwlyOCA9IGY2CisJOzsKKwlzaHIudQkJcjggPSByOCwgMQkJQyBMb29wIGNvdW50CisJOzsKKwltb3YuaQkJYXIubGMgPSByOAorJykKKworCWxkOAl1MCA9IFt1cF0sIDgKKwljbXAubmUJcDksIHAwID0gMSwgbgorICAocDkpCWJyCUwoZ3QxKQorCTs7CisJc2hyLnUJcjggPSB1MCwgNDgKKwlkZXAueglyMjcgPSB1MCwgMCwgNDgKKwk7OworCWFkZAlyOCA9IHI4LCByMjcKKwlici5yZXQuc3B0ay5tYW55IGIwCisKKworTChndDEpOgorIHsubW1pOwlub3AubQkwCisJbW92CWEwID0gMAorCWFkZAluID0gLTIsIG4KK317Lm1taTsJbW92CWMwID0gMAorCW1vdgljMSA9IDAKKwltb3YJYzIgPSAwCisJOzsKK317Lm1taTsJbGQ4CXUxID0gW3VwXSwgOAorCW1vdglhMSA9IDAKKwljbXAubHR1CXA2LCBwMCA9IHIwLCByMAkJQyBjbGVhciBwNgorfXsubW1iOwljbXAuZ3QJcDksIHAwID0gMywgbgorCW1vdglhMiA9IDAKKyAgKHA5KQlici5jb25kLmRwdGsJTChlbmQpCisJOzsKK30KKwlBTElHTigzMikKK0wodG9wKToKKyB7Lm1taTsJbGQ4CXUyID0gW3VwXSwgOAorICAocDYpCWFkZAljMCA9IDEsIGMwCisJY21wLmx0dQlwNywgcDAgPSBhMCwgdTAKK317Lm1tYjsJc3ViCWEwID0gYTAsIHUwCisJYWRkCW4gPSAtMywgbgorCW5vcC5iCTAKKwk7OworfXsubW1pOwlsZDgJdTAgPSBbdXBdLCA4CisgIChwNykJYWRkCWMxID0gMSwgYzEKKwljbXAubHR1CXA4LCBwMCA9IGExLCB1MQorfXsubW1iOwlzdWIJYTEgPSBhMSwgdTEKKwljbXAubGUJcDksIHAwID0gMywgbgorCW5vcC5iCTAKKwk7OworfXsubW1pOwlsZDgJdTEgPSBbdXBdLCA4CisgIChwOCkJYWRkCWMyID0gMSwgYzIKKwljbXAubHR1CXA2LCBwMCA9IGEyLCB1MgorfXsubW1iOwlzdWIJYTIgPSBhMiwgdTIKKwlub3AubQkwCitkbmwJYnIuY2xvb3AuZHB0awlMKHRvcCkKKyAgKHA5KQlici5jb25kLmRwdGsJTCh0b3ApCisJOzsKK30KK0woZW5kKToKKwljbXAuZXEJcDEwLCBwMCA9IDAsIG4KKwljbXAuZXEJcDExLCBwMCA9IDEsIG4KKyAgKHAxMCkJYnIJTCgwKQorCitMKDIpOgorIHsubW1pOwlsZDgJdTIgPSBbdXBdLCA4CisgIChwNikJYWRkCWMwID0gMSwgYzAKKwljbXAubHR1CXA3LCBwMCA9IGEwLCB1MAorfXsubW1iOwlzdWIJYTAgPSBhMCwgdTAKKwlub3AubQkwCisgIChwMTEpCWJyCUwoMSkKKwk7OworfQlsZDgJdTAgPSBbdXBdLCA4CisgIChwNykJYWRkCWMxID0gMSwgYzEKKwljbXAubHR1CXA4LCBwMCA9IGExLCB1MQorCXN1YglhMSA9IGExLCB1MQorCTs7CisgIChwOCkJYWRkCWMyID0gMSwgYzIKKwljbXAubHR1CXA2LCBwMCA9IGEyLCB1MgorCXN1YglhMiA9IGEyLCB1MgorCTs7CisgIChwNikJYWRkCWMwID0gMSwgYzAKKwljbXAubHR1CXA3LCBwMCA9IGEwLCB1MAorCXN1YglhMCA9IGEwLCB1MAorCTs7CisgIChwNykJYWRkCWMxID0gMSwgYzEKKwlicglMKGNvbSkKKworCitMKDEpOgorICAocDcpCWFkZAljMSA9IDEsIGMxCisJY21wLmx0dQlwOCwgcDAgPSBhMSwgdTEKKwlzdWIJYTEgPSBhMSwgdTEKKwk7OworICAocDgpCWFkZAljMiA9IDEsIGMyCisJY21wLmx0dQlwNiwgcDAgPSBhMiwgdTIKKwlzdWIJYTIgPSBhMiwgdTIKKwk7OworICAocDYpCWFkZAljMCA9IDEsIGMwCisJYnIJTChjb20pCisKKworTCgwKToKKyAgKHA2KQlhZGQJYzAgPSAxLCBjMAorCWNtcC5sdHUJcDcsIHAwID0gYTAsIHUwCisJc3ViCWEwID0gYTAsIHUwCisJOzsKKyAgKHA3KQlhZGQJYzEgPSAxLCBjMQorCWNtcC5sdHUJcDgsIHAwID0gYTEsIHUxCisJc3ViCWExID0gYTEsIHUxCisJOzsKKyAgKHA4KQlhZGQJYzIgPSAxLCBjMgorCitMKGNvbSk6CitDIHwgICAgIGEyICAgIHwgICAgIGExICAgIHwgICAgIGEwICAgIHwKK0MgfCAgICAgICAgfCAgICAgICAgfCAgICAgICAgfCAgICAgICAgfAorCXNoci51CXIyNCA9IGEwLCA0OAkJQyAxNiBiaXRzCisJc2hyLnUJcjI1ID0gYTEsIDMyCQlDIDMyIGJpdHMKKwlzaHIudQlyMjYgPSBhMiwgMTYJCUMgNDggYml0cworCTs7CisJc2hyLnUJcjEwID0gYzAsIDQ4CQlDIDE2IGJpdHMsIGFsd2F5cyB6ZXJvCisJc2hyLnUJcjExID0gYzEsIDMyCQlDIDMyIGJpdHMKKwlzaHIudQlyMzAgPSBjMiwgMTYJCUMgNDggYml0cworCTs7CisJZGVwLnoJcjI3ID0gYTAsICAwLCA0OAlDIDQ4IGJpdHMKKwlkZXAueglyMjggPSBhMSwgMTYsIDMyCUMgNDggYml0cworCWRlcC56CXIyOSA9IGEyLCAzMiwgMTYJQyA0OCBiaXRzCisJZGVwLnoJcjMxID0gYzAsICAwLCA0OAlDIDQ4IGJpdHMKKwlkZXAueglyMTQgPSBjMSwgMTYsIDMyCUMgNDggYml0cworCWRlcC56CXIxNSA9IGMyLCAzMiwgMTYJQyA0OCBiaXRzCisJOzsKKyB7Lm1taTsJYWRkCXIyNCA9IHIyNCwgcjI1CisJYWRkCXIyNiA9IHIyNiwgcjI3CisJYWRkCXIyOCA9IHIyOCwgcjI5Cit9ey5tbWk7CWFkZAlyMTAgPSByMTAsIHIxMQorCWFkZAlyMzAgPSByMzAsIHIzMQorCWFkZAlyMTQgPSByMTQsIHIxNQorCTs7Cit9CisJbW92bAlyOCA9IDB4ZmZmZmZmZmZmZmZmMAorCWFkZAlyMjQgPSByMjQsIHIyNgorCWFkZAlyMTAgPSByMTAsIHIzMAorCTs7CisJYWRkCXIyNCA9IHIyNCwgcjI4CisJYWRkCXIxMCA9IHIxMCwgcjE0CisJOzsKKwlzdWIJcjggPSByOCwgcjI0CisJOzsKKwlhZGQJcjggPSByOCwgcjEwCisJYnIucmV0LnNwdGsubWFueSBiMAorRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2lhNjQvbW9kZTFvLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vaWE2NC9tb2RlMW8uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ZDVlODEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2lhNjQvbW9kZTFvLmFzbQpAQCAtMCwwICsxLDM0MiBAQAorZG5sICBJdGFuaXVtLTIgbXBuX21vZGV4YWN0XzFjX29kZCAtLSBtcG4gYnkgMSBleGFjdCByZW1haW5kZXIuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IEtldmluIFJ5ZGUuCisKK2RubCAgQ29weXJpZ2h0IDIwMDMtMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MgICAgICAgICAgICBjeWNsZXMvbGltYgorQyBJdGFuaXVtOiAgICAgIDE1CitDIEl0YW5pdW0gMjogICAgIDgKKworCitkbmwgIFVzYWdlOiBBQkkzMihgY29kZScpCitkbmwKK2RubCAgRW1pdCB0aGUgZ2l2ZW4gY29kZSBvbmx5IHVuZGVyIEhBVkVfQUJJXzMyLgorZG5sCitkZWZpbmUoQUJJMzIsCittNF9hc3NlcnRfb25lYXJnKCkKK2BpZmRlZihgSEFWRV9BQklfMzInLGAkMScpJykKKworCitDIG1wX2xpbWJfdCBtcG5fbW9kZXhhY3RfMWNfb2RkIChtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSwKK0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wX2xpbWJfdCBkaXZpc29yLCBtcF9saW1iX3QgY2FycnkpOworQworQyBUaGUgbW9kZXhhY3QgYWxnb3JpdGhtIGlzIHVzdWFsbHkgY29uY2VpdmVkIGFzIGEgZGVwZW5kZW50IGNoYWluCitDCitDCWwgPSBzcmNbaV0gLSBjCitDCXEgPSBsb3cobCAqIGludmVyc2UpCitDCWMgPSBoaWdoKHEqZGl2aXNvcikgKyAoc3JjW2ldPGMpCitDCitDIGJ1dCB3ZSBjYW4gd29yayB0aGUgc3JjW2ldLWMgaW50byBhbiB4bWEgYnkgY2FsY3VsYXRpbmcgc2k9c3JjW2ldKmludmVyc2UKK0Mgc2VwYXJhdGVseSAob2ZmIHRoZSBkZXBlbmRlbnQgY2hhaW4pIGFuZCB1c2luZworQworQwlxID0gbG93KGMgKiBpbnZlcnNlICsgc2kpCitDCWMgPSBoaWdoKHEqZGl2aXNvciArIGMpCitDCitDIFRoaXMgbWVhbnMgdGhlIGRlcGVuZGVudCBjaGFpbiBpcyBzaW1wbHkgeG1hLmwgZm9sbG93ZWQgYnkgeG1hLmh1LCBmb3IgYQorQyB0b3RhbCA4IGN5Y2xlcy9saW1iIG9uIGl0YW5pdW0tMi4KK0MKK0MgVGhlIHJlYXNvbiB4bWEuaHUgd29ya3MgZm9yIHRoZSBuZXcgYyBpcyB0aGF0IHRoZSBsb3cgb2YgcSpkaXZpc29yIGlzCitDIHNyY1tpXS1jIChiZWluZyB0aGUgd2hvbGUgcHVycG9zZSBvZiB0aGUgcSBnZW5lcmF0ZWQsIGFuZCBpdCBjYW4gYmUKK0MgdmVyaWZpZWQgYWxnZWJyYWljYWxseSkuICBJZiB0aGVyZSB3YXMgYW4gdW5kZXJmbG93IGZyb20gc3JjW2ldLWMsIHRoZW4KK0MgdGhlcmUgd2lsbCBiZSBhbiBvdmVyZmxvdyBmcm9tIChzcmMtYykrYywgdGhlcmVieSBhZGRpbmcgMSB0byB0aGUgbmV3IGMKK0MgdGhlIHNhbWUgYXMgdGhlIGJvcnJvdyBiaXQgKHNyY1tpXTxjKSBnaXZlcyBpbiB0aGUgZmlyc3Qgc3R5bGUgc2hvd24uCitDCitDIEluY2lkZW50YWxseSwgZmNtcCBpcyBub3QgYW4gb3B0aW9uIGZvciB0cmVhdGluZyBzcmNbaV0tYywgc2luY2UgaXQKK0MgYXBwYXJlbnRseSB0cmFwcyB0byB0aGUga2VybmVsIGZvciB1bm5vcm1hbGl6ZWQgb3BlcmFuZHMgbGlrZSB0aG9zZSB1c2VkCitDIGFuZCBnZW5lcmF0ZWQgYnkgbGRmOCBhbmQgeG1hLiAgT24gb25lIEdOVS9MaW51eCBzeXN0ZW0gaXQgdG9vayBhYm91dCAxMjAwCitDIGN5Y2xlcy4KK0MKK0MKK0MgRmlyc3QgTGltYjoKK0MKK0MgVGhlIGZpcnN0IGxpbWIgdXNlcyBxID0gKHNyY1swXS1jKSAqIGludmVyc2Ugc2hvd24gaW4gdGhlIGZpcnN0IHN0eWxlLgorQyBUaGlzIGxldHMgdXMgZ2V0IHRoZSBmaXJzdCBxIGFzIHNvb24gYXMgdGhlIGludmVyc2UgaXMgcmVhZHksIHdpdGhvdXQKK0MgZ29pbmcgdGhyb3VnaCBzaT1zKmludmVyc2UuICBCYXNpY2FsbHkgYXQgdGhlIHN0YXJ0IHdlIGhhdmUgYyBhbmQgY2FuIHVzZQorQyBpdCB3aGlsZSB3YWl0aW5nIGZvciB0aGUgaW52ZXJzZSwgd2hlcmVhcyBmb3IgdGhlIHNlY29uZCBhbmQgc3Vic2VxdWVudAorQyBsaW1icyBpdCdzIHRoZSBvdGhlciB3YXkgYXJvdW5kLCBpZS4gd2UgaGF2ZSB0aGUgaW52ZXJzZSBhbmQgYXJlIHdhaXRpbmcKK0MgZm9yIGMuCitDCitDIEF0IC5MZW50cnkgdGhlIGZpcnN0IHR3byBpbnN0cnVjdGlvbnMgaW4gdGhlIGxvb3AgaGF2ZSBiZWVuIGRvbmUgYWxyZWFkeS4KK0MgVGhlIGxvYWQgb2YgZjExPXNyY1sxXSBhdCB0aGUgc3RhcnQgKHByZWRpY2F0ZWQgb24gc2l6ZT49MiksIGFuZCB0aGUKK0MgY2FsY3VsYXRpb24gb2YgcSBieSB0aGUgaW5pdGlhbCBkaWZmZXJlbnQgc2NoZW1lLgorQworQworQyBFbnRyeSBTZXF1ZW5jZToKK0MKK0MgSW4gdGhlIGVudHJ5IHNlcXVlbmNlLCB0aGUgY3JpdGljYWwgcGF0aCBpcyB0aGUgY2FsY3VsYXRpb24gb2YgdGhlCitDIGludmVyc2UsIHNvIHRoaXMgaXMgYmVndW4gZmlyc3QgYW5kIG9wdGltaXplZC4gIEFwYXJ0IGZyb20gdGhhdCwgYXIubGMgaXMKK0MgZXN0YWJsaXNoZWQgbmljZSBhbmQgZWFybHkgc28gdGhlIGJyLmNsb29wJ3Mgc2hvdWxkIHByZWRpY3QgcGVyZmVjdGx5LgorQyBBbmQgdGhlIGxvYWQgZm9yIHRoZSBsb3cgbGltYnMgc3JjWzBdIGFuZCBzcmNbMV0gY2FuIGJlIGluaXRpYXRlZCBsb25nCitDIGFoZWFkIG9mIHdoZXJlIHRoZXkncmUgbmVlZGVkLgorQworQworQyBJbnZlcnNlIENhbGN1bGF0aW9uOgorQworQyBUaGUgaW5pdGlhbCA4LWJpdCBpbnZlcnNlIGlzIGNhbGN1bGF0ZWQgdXNpbmcgYSB0YWJsZSBsb29rdXAuICBJZiBpdCBoaXRzCitDIEwxICh3aGljaCBpcyBsaWtlbHkgaWYgd2UncmUgY2FsbGVkIHNldmVyYWwgdGltZXMpIHRoZW4gaXQgc2hvdWxkIHRha2UgYQorQyB0b3RhbCA0IGN5Y2xlcywgb3RoZXJ3aXNlIGhvcGVmdWxseSBMMiBmb3IgOSBjeWNsZXMuICBUaGlzIGlzIGNvbnNpZGVyZWQKK0MgdGhlIGJlc3QgYXBwcm9hY2gsIG9uIGJhbGFuY2UuICBJdCBjb3VsZCBiZSBkb25lIGJpdHdpc2UsIGJ1dCB0aGF0IHdvdWxkCitDIHByb2JhYmx5IGJlIGFib3V0IDE0IGN5Y2xlcyAoMiBwZXIgYml0IGJleW9uZCB0aGUgZmlyc3QgY291cGxlKS4gIE9yIGl0CitDIGNvdWxkIGJlIHRha2VuIGZyb20gNCBiaXRzIHRvIDggd2l0aCB4bXB5IGRvdWJsaW5nIGFzIHVzZWQgYmV5b25kIDggYml0cywKK0MgYnV0IHRoYXQgd291bGQgYmUgYWJvdXQgMTEgY3ljbGVzLgorQworQyBUaGUgdGFibGUgaXMgbm90IHRoZSBzYW1lIGFzIGJpbnZlcnRfbGltYl90YWJsZSwgaW5zdGVhZCBpdCdzIDI1NiBieXRlcywKK0MgZGVzaWduZWQgdG8gYmUgaW5kZXhlZCBieSB0aGUgbG93IGJ5dGUgb2YgdGhlIGRpdmlzb3IuICBUaGUgZGl2aXNvciBpcworQyBhbHdheXMgb2RkLCBzbyB0aGUgcmVsZXZhbnQgZGF0YSBpcyBldmVyeSBzZWNvbmQgYnl0ZSBpbiB0aGUgdGFibGUuICBUaGUKK0MgcGFkZGluZyBsZXRzIHVzIHVzZSB6eHQxIGluc3RlYWQgb2YgZXh0ci51LCB0aGUgbGF0dGVyIHdvdWxkIGNvc3QgYW4gZXh0cmEKK0MgY3ljbGUgYmVjYXVzZSBpdCBtdXN0IGdvIGRvd24gSTAsIGFuZCB3ZSdyZSB1c2luZyB0aGUgZmlyc3QgSTAgc2xvdCB0byBnZXQKK0MgaXAuICBUaGUgZXh0cmEgMTI4IGJ5dGVzIG9mIHBhZGRpbmcgc2hvdWxkIGJlIGluc2lnbmlmaWNhbnQgY29tcGFyZWQgdG8KK0MgdHlwaWNhbCBpYTY0IGNvZGUgYmxvYXQuCitDCitDIEhhdmluZyB0aGUgdGFibGUgaW4gLnRleHQgYWxsb3dzIHVzIHRvIHVzZSBJUC1yZWxhdGl2ZSBhZGRyZXNzaW5nLAorQyBhdm9pZGluZyBhIGZldGNoIGZyb20gbHRvZmYuICAucm9kYXRhIGlzIGFwcGFyZW50bHkgbm90IHN1aXRhYmxlIGZvciB1c2UKK0MgSVAtcmVsYXRpdmUsIGl0IGdldHMgYSBsaW5rZXIgcmVsb2NhdGlvbiBvdmVyZmxvdyBvbiBHTlUvTGludXguCitDCitDCitDIExvYWQgU2NoZWR1bGluZzoKK0MKK0MgSW4gdGhlIG1haW4gbG9vcCwgdGhlIGRhdGEgbG9hZHMgYXJlIHNjaGVkdWxlZCBmb3IgYW4gTDIgaGl0LCB3aGljaCBtZWFucworQyA2IGN5Y2xlcyBmb3IgdGhlIGRhdGEgcmVhZHkgdG8gdXNlLiAgSW4gZmFjdCB3ZSBlbmQgdXAgNyBjeWNsZXMgYWhlYWQuICBJbgorQyBhbnkgY2FzZSB0aGF0IHNjaGVkdWxpbmcgaXMgYWNoaWV2ZWQgc2ltcGx5IGJ5IGRvaW5nIHRoZSBsb2FkIChhbmQgeG1weS5sCitDIGZvciAic2kiKSBpbiB0aGUgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIGl0ZXJhdGlvbi4KK0MKK0MgVGhlIG1haW4gbG9vcCByZXF1aXJlcyBzaXplID49IDIsIGFuZCB3ZSBoYW5kbGUgc2l6ZT09MSBieSBhbiBpbml0aWFsCitDIGJyLmNsb29wIHRvIGVudGVyIHRoZSBsb29wIG9ubHkgaWYgc2l6ZT4xLiAgU2luY2UgYXIubGMgaXMgZXN0YWJsaXNoZWQKK0MgZWFybHksIHRoaXMgc2hvdWxkIHByZWRpY3QgcGVyZmVjdGx5LgorQworQworQyBOb3QgZG9uZToKK0MKK0MgQ29uc2lkZXJhdGlvbiB3YXMgZ2l2ZW4gdG8gdXNpbmcgYSBwbGFpbiAiKHNyY1swXS1jKSAlIGRpdmlzb3IiIGZvcgorQyBzaXplPT0xLCBidXQgY3ljbGUgY291bnRpbmcgc3VnZ2VzdHMgYWJvdXQgNTAgZm9yIHRoZSBzb3J0IG9mIGFwcHJvYWNoCitDIHRha2VuIGJ5IGdjYyBfX3Vtb2RzaTMsIHZlcnN1cyBhYm91dCA0NyBmb3IgdGhlIG1vZGV4YWN0LiAgKEJvdGggYXNzdW1pbmcKK0MgTDEgaGl0cyBmb3IgdGhlaXIgcmVzcGVjdGl2ZSBmZXRjaGluZy4pCitDCitDIENvbnNpZGVyYXRpb24gd2FzIGdpdmVuIHRvIGEgdGVzdCBmb3IgaGlnaDxkaXZpc29yIGFuZCByZXBsYWNpbmcgdGhlIGxhc3QKK0MgbG9vcCBpdGVyYXRpb24gd2l0aCBpbnN0ZWFkIGMtPXNyY1tzaXplLTFdIGZvbGxvd2VkIGJ5IGMrPWQgaWYgdW5kZXJmbG93LgorQyBCcmFuY2hpbmcgb24gaGlnaDxkaXZpc29yIHdvdWxkbid0IGJlIGdvb2Qgc2luY2UgYSBtaXNwcmVkaWN0IHdvdWxkIGNvc3QKK0MgbW9yZSB0aGFuIHRoZSBsb29wIGl0ZXJhdGlvbiBzYXZlZCwgYW5kIHRoZSBjb25kaXRpb24gaXMgb2YgY291cnNlIGRhdGEKK0MgZGVwZW5kZW50LiAgU28gdGhlIHRoZW9yeSB3b3VsZCBiZSB0byBzaG9ydGVuIHRoZSBsb29wIGNvdW50IGlmCitDIGhpZ2g8ZGl2aXNvciwgYW5kIHByZWRpY2F0ZSBleHRyYSBvcGVyYXRpb25zIGF0IHRoZSBlbmQuICBUaGF0IHdvdWxkIG1lYW4KK0MgYSBnYWluIG9mIDYgd2hlbiBoaWdoPGRpdmlzb3IsIG9yIGEgY29zdCBvZiAyIGlmIG5vdC4KK0MKK0MgV2hldGhlciBzdWNoIGEgdHJhZGVvZmYgaXMgYSB3aW4gb24gYXZlcmFnZSBkZXBlbmRzIG9uIGFzc3VtcHRpb25zIGFib3V0CitDIGhvdyBtYW55IGJpdHMgaW4gdGhlIGhpZ2ggYW5kIHRoZSBkaXZpc29yLiAgSWYgYm90aCBhcmUgdW5pZm9ybWx5CitDIGRpc3RyaWJ1dGVkIHRoZW4gaGlnaDxkaXZpc29yIGFib3V0IDUwJSBvZiB0aGUgdGltZS4gIEJ1dCBzbWFsbGlzaAorQyBkaXZpc29ycyAobGVzcyBjaGFuY2Ugb2YgaGlnaDxkaXZpc29yKSBtaWdodCBiZSBtb3JlIGxpa2VseSBmcm9tCitDIGFwcGxpY2F0aW9ucyAobXB6X2RpdmlzaWJsZV91aSwgbXB6X2djZF91aSwgZXRjKS4gIFRob3VnaCBiaWdnaXNoIGRpdmlzb3JzCitDIHdvdWxkIGJlIG5vcm1hbCBpbnRlcm5hbGx5IGZyb20gc2F5IG1wbi9nZW5lcmljL3BlcmZzcXIuYy4gIE9uIGJhbGFuY2UsCitDIGZvciB0aGUgbW9tZW50LCBpdCdzIGZlbHQgdGhlIGdhaW4gaXMgbm90IHJlYWxseSBlbm91Z2ggdG8gYmUgd29ydGggdGhlCitDIHRyb3VibGUuCitDCitDCitDIEVuaGFuY2VtZW50OgorQworQyBQcm9jZXNzIHR3byBzb3VyY2UgbGltYnMgcGVyIGl0ZXJhdGlvbiB1c2luZyBhIHR3by1saW1iIGludmVyc2UgYW5kIGEKK0Mgc2VxdWVuY2UgbGlrZQorQworQwlxbCAgPSBsb3cgKGMgKiBpbCArIHNpbCkJcXVvdGllbnQgbG93IGxpbWIKK0MJcWxjID0gaGlnaChjICogaWwgKyBzaWwpCitDCXFoMSA9IGxvdyAoYyAqIGloICsgc2loKQlxdW90aWVudCBoaWdoLCBwYXJ0aWFsCitDCitDCWNsID0gaGlnaCAocWwgKiBkICsgYykJCWNhcnJ5IG91dCBvZiBsb3cKK0MJcWggPSBsb3cgKHFsYyAqIDEgKyBxaDEpCXF1b3RpZW50IGhpZ2ggbGltYgorQworQwluZXcgYyA9IGhpZ2ggKHFoICogZCArIGNsKQljYXJyeSBvdXQgb2YgaGlnaAorQworQyBUaGlzIHdvdWxkIGJlIDEzIGN5Y2xlcy9pdGVyYXRpb24sIGdpdmluZyA2LjUgY3ljbGVzL2xpbWIuICBUaGUgdHdvIGxpbWIKK0MgcyppbnZlcnNlIGFzIHNpaDpzaWwgPSBzaDpzbCAqIGloOmlsIHdvdWxkIGJlIGNhbGN1bGF0ZWQgb2ZmIHRoZSBkZXBlbmRlbnQKK0MgY2hhaW4gd2l0aCA0IG11bHRpcGxpZXMuICBUaGUgYmlnZ2VyIGludmVyc2Ugd291bGQgdGFrZSBleHRyYSB0aW1lIHRvCitDIGNhbGN1bGF0ZSwgYnV0IGEgb25lIGxpbWIgaXRlcmF0aW9uIHRvIGhhbmRsZSBhbiBvZGQgc2l6ZSBjb3VsZCBiZSBkb25lIGFzCitDIHNvb24gYXMgNjQtYml0cyBvZiBpbnZlcnNlIHdlcmUgcmVhZHkuCitDCitDIFBlcmhhcHMgdGhpcyBjb3VsZCBldmVuIGV4dGVuZCB0byBhIDMgbGltYiBpbnZlcnNlLCB3aGljaCBtaWdodCBwcm9taXNlIDE3CitDIG9yIDE4IGN5Y2xlcyBmb3IgMyBsaW1icywgZ2l2aW5nIDUuNjYgb3IgNi4wIGN5Y2xlcy9saW1iLgorQworCitBU01fU1RBUlQoKQorCS5leHBsaWNpdAorCisJLnRleHQKKwkuYWxpZ24JMzIKKy5MdGFibGU6CitkYXRhMQkwLDB4MDEsIDAsMHhBQiwgMCwweENELCAwLDB4QjcsIDAsMHgzOSwgMCwweEEzLCAwLDB4QzUsIDAsMHhFRgorZGF0YTEJMCwweEYxLCAwLDB4MUIsIDAsMHgzRCwgMCwweEE3LCAwLDB4MjksIDAsMHgxMywgMCwweDM1LCAwLDB4REYKK2RhdGExCTAsMHhFMSwgMCwweDhCLCAwLDB4QUQsIDAsMHg5NywgMCwweDE5LCAwLDB4ODMsIDAsMHhBNSwgMCwweENGCitkYXRhMQkwLDB4RDEsIDAsMHhGQiwgMCwweDFELCAwLDB4ODcsIDAsMHgwOSwgMCwweEYzLCAwLDB4MTUsIDAsMHhCRgorZGF0YTEJMCwweEMxLCAwLDB4NkIsIDAsMHg4RCwgMCwweDc3LCAwLDB4RjksIDAsMHg2MywgMCwweDg1LCAwLDB4QUYKK2RhdGExCTAsMHhCMSwgMCwweERCLCAwLDB4RkQsIDAsMHg2NywgMCwweEU5LCAwLDB4RDMsIDAsMHhGNSwgMCwweDlGCitkYXRhMQkwLDB4QTEsIDAsMHg0QiwgMCwweDZELCAwLDB4NTcsIDAsMHhEOSwgMCwweDQzLCAwLDB4NjUsIDAsMHg4RgorZGF0YTEJMCwweDkxLCAwLDB4QkIsIDAsMHhERCwgMCwweDQ3LCAwLDB4QzksIDAsMHhCMywgMCwweEQ1LCAwLDB4N0YKK2RhdGExCTAsMHg4MSwgMCwweDJCLCAwLDB4NEQsIDAsMHgzNywgMCwweEI5LCAwLDB4MjMsIDAsMHg0NSwgMCwweDZGCitkYXRhMQkwLDB4NzEsIDAsMHg5QiwgMCwweEJELCAwLDB4MjcsIDAsMHhBOSwgMCwweDkzLCAwLDB4QjUsIDAsMHg1RgorZGF0YTEJMCwweDYxLCAwLDB4MEIsIDAsMHgyRCwgMCwweDE3LCAwLDB4OTksIDAsMHgwMywgMCwweDI1LCAwLDB4NEYKK2RhdGExCTAsMHg1MSwgMCwweDdCLCAwLDB4OUQsIDAsMHgwNywgMCwweDg5LCAwLDB4NzMsIDAsMHg5NSwgMCwweDNGCitkYXRhMQkwLDB4NDEsIDAsMHhFQiwgMCwweDBELCAwLDB4RjcsIDAsMHg3OSwgMCwweEUzLCAwLDB4MDUsIDAsMHgyRgorZGF0YTEJMCwweDMxLCAwLDB4NUIsIDAsMHg3RCwgMCwweEU3LCAwLDB4NjksIDAsMHg1MywgMCwweDc1LCAwLDB4MUYKK2RhdGExCTAsMHgyMSwgMCwweENCLCAwLDB4RUQsIDAsMHhENywgMCwweDU5LCAwLDB4QzMsIDAsMHhFNSwgMCwweDBGCitkYXRhMQkwLDB4MTEsIDAsMHgzQiwgMCwweDVELCAwLDB4QzcsIDAsMHg0OSwgMCwweDMzLCAwLDB4NTUsIDAsMHhGRgorCisKK1BST0xPR1VFKG1wbl9tb2RleGFjdF8xY19vZGQpCisKKwlDIHIzMglzcmMKKwlDIHIzMwlzaXplCisJQyByMzQJZGl2aXNvcgorCUMgcjM1CWNhcnJ5CisKKwkucHJvbG9ndWUKKy5MaGVyZToKK3sgLm1taTsJYWRkCXIzMyA9IC0xLCByMzMJCUMgTTAgIHNpemUtMQorCW1vdglyMTQgPSAyCQkJQyBNMSAgMgorCW1vdglyMTUgPSBpcAkJQyBJMCAgLkxoZXJlCit9ey5tbWk7CXNldGYuc2lnIGY2ID0gcjM0CQlDIE0yICBkaXZpc29yCisJc2V0Zi5zaWcgZjkgPSByMzUJCUMgTTMgIGNhcnJ5CisJenh0MQlyMyA9IHIzNAkJQyBJMSAgZGl2aXNvciBsb3cgYnl0ZQorfQk7OworCit7IC5tbWk7CWFkZAlyMyA9IC5MdGFibGUtLkxoZXJlLCByMwlDIE0wICB0YWJsZSBvZmZzZXQgaXAgYW5kIGluZGV4CisJc3ViCXIxNiA9IDAsIHIzNAkJQyBNMSAgLWRpdmlzb3IKKwkuc2F2ZQlhci5sYywgcjIKKwltb3YJcjIgPSBhci5sYwkJQyBJMAorfXsubW1pOwkuYm9keQorCXNldGYuc2lnIGYxMyA9IHIxNAkJQyBNMiAgMiBpbiBzaWduaWZpY2FuZAorCW1vdglyMTcgPSAtMQkJQyBNMyAgLTEKK0FCSTMyKGAJenh0NAlyMzMgPSByMzMnKQkJQyBJMSAgc2l6ZSBleHRlbmQKK30JOzsKKworeyAubW1pOwlhZGQJcjMgPSByMywgcjE1CQlDIE0wICB0YWJsZSBlbnRyeSBhZGRyZXNzCitBQkkzMihgIGFkZHA0CXIzMiA9IDAsIHIzMicpCQlDIE0xICBzcmMgZXh0ZW5kCisJbW92CWFyLmxjID0gcjMzCQlDIEkwICBzaXplLTEgbG9vcCBjb3VudAorfXsubW1pOwlzZXRmLnNpZyBmMTIgPSByMTYJCUMgTTIgIC1kaXZpc29yCisJc2V0Zi5zaWcgZjggPSByMTcJCUMgTTMgIC0xCit9CTs7CisKK3sgLm1taTsJbGQxCXIzID0gW3IzXQkJQyBNMCAgaW52ZXJzZSwgOCBiaXRzCisJbGRmOAlmMTAgPSBbcjMyXSwgOAkJQyBNMSAgc3JjWzBdCisJY21wLm5lCXA2LHAwID0gMCwgcjMzCQlDIEkwICB0ZXN0IHNpemUhPTEKK30JOzsKKworCUMgV2FpdCBmb3IgdGFibGUgbG9hZC4KKwlDIEhvcGUgZm9yIGFuIEwxIGhpdCBvZiAxIGN5Y2xlcyB0byBBTFUsIGJ1dCBjb3VsZCBiZSBtb3JlLgorCXNldGYuc2lnIGY3ID0gcjMJCUMgTTIgIGludmVyc2UsIDggYml0cworKHA2KQlsZGY4CWYxMSA9IFtyMzJdLCA4CQlDIE0xICBzcmNbMV0sIGlmIHNpemUhPTEKKwk7OworCisJQyA1IGN5Y2xlcworCisJQyBmNglkaXZpc29yCisJQyBmNwlpbnZlcnNlLCBiZWluZyBjYWxjdWxhdGVkCisJQyBmOAktMSwgd2lsbCBiZSAtaW52ZXJzZQorCUMgZjkJY2FycnkKKwlDIGYxMAlzcmNbMF0KKwlDIGYxMQlzcmNbMV0KKwlDIGYxMgktZGl2aXNvcgorCUMgZjEzCTIKKwlDIGYxNAlzY3JhdGNoCisKKwl4bXB5LmwJZjE0ID0gZjEzLCBmNwkJQyAyKmkKKwl4bXB5LmwJZjcgPSBmNywgZjcJCUMgaSppCisJOzsKKwl4bWEubAlmNyA9IGY3LCBmMTIsIGYxNAlDIGkqaSotZCArIDIqaSwgaW52ZXJzZSAxNiBiaXRzCisJOzsKKworCXhtcHkubAlmMTQgPSBmMTMsIGY3CQlDIDIqaQorCXhtcHkubAlmNyA9IGY3LCBmNwkJQyBpKmkKKwk7OworCXhtYS5sCWY3ID0gZjcsIGYxMiwgZjE0CUMgaSppKi1kICsgMippLCBpbnZlcnNlIDMyIGJpdHMKKwk7OworCisJeG1weS5sCWYxNCA9IGYxMywgZjcJCUMgMippCisJeG1weS5sCWY3ID0gZjcsIGY3CQlDIGkqaQorCTs7CisKKwl4bWEubAlmNyA9IGY3LCBmMTIsIGYxNAlDIGkqaSotZCArIDIqaSwgaW52ZXJzZSA2NCBiaXRzCisJeG1hLmwJZjEwID0gZjksIGY4LCBmMTAJQyBzYyA9IGMgKiAtMSArIHNyY1swXQorCTs7CitBU1NFUlQocDYsIGAKKwl4bXB5LmwJZjE1ID0gZjYsIGY3IDs7CUMgZGl2aXNvcippbnZlcnNlCisJZ2V0Zi5zaWcgcjMxID0gZjE1IDs7CisJY21wLmVxCXA2LHAwID0gMSwgcjMxCUMgc2hvdWxkID09IDEKKycpCisKKwl4bXB5LmwJZjEwID0gZjEwLCBmNwkJQyBxID0gc2MgKiBpbnZlcnNlCisJeG1weS5sCWY4ID0gZjcsIGY4CQlDIC1pbnZlcnNlID0gaW52ZXJzZSAqIC0xCisJYnIuY2xvb3Auc3B0ay5mZXcuY2xyIC5MZW50cnkJQyBtYWluIGxvb3AsIGlmIHNpemUgPiAxCisJOzsKKworCUMgc2l6ZT09MSwgZmluaXNoIHVwIG5vdworCXhtYS5odQlmOSA9IGYxMCwgZjYsIGY5CUMgYyA9IGhpZ2gocSAqIGRpdmlzb3IgKyBjKQorCW1vdglhci5sYyA9IHIyCQlDIEkwCisJOzsKKwlnZXRmLnNpZyByOCA9IGY5CQlDIE0yICByZXR1cm4gYworCWJyLnJldC5zcHRrLm1hbnkgYjAKKworCisKKy5MdG9wOgorCUMgcjIJc2F2ZWQgYXIubGMKKwlDIGY2CWRpdmlzb3IKKwlDIGY3CWludmVyc2UKKwlDIGY4CS1pbnZlcnNlCisJQyBmOQljYXJyeQorCUMgZjEwCXNyY1tpXSAqIGludmVyc2UKKwlDIGYxMQlzY3JhdGNoIHNyY1tpKzFdCisKKwlhZGQJcjE2ID0gMTYwLCByMzIKKwlsZGY4CWYxMSA9IFtyMzJdLCA4CQlDIHNyY1tpKzFdCisJOzsKKwlDIDIgY3ljbGVzCisKKwlsZmV0Y2gJW3IxNl0KKwl4bWEubAlmMTAgPSBmOSwgZjgsIGYxMAlDIHEgPSBjICogLWludmVyc2UgKyBzaQorCTs7CisJQyAzIGN5Y2xlcworCisuTGVudHJ5OgorCXhtYS5odQlmOSA9IGYxMCwgZjYsIGY5CUMgYyA9IGhpZ2gocSAqIGRpdmlzb3IgKyBjKQorCXhtcHkubAlmMTAgPSBmMTEsIGY3CQlDIHNpID0gc3JjW2ldICogaW52ZXJzZQorCWJyLmNsb29wLnNwdGsuZmV3LmNsciAuTHRvcAorCTs7CisKKworCisJeG1hLmwJZjEwID0gZjksIGY4LCBmMTAJQyBxID0gYyAqIC1pbnZlcnNlICsgc2kKKwltb3YJYXIubGMgPSByMgkJQyBJMAorCTs7CisJeG1hLmh1CWY5ID0gZjEwLCBmNiwgZjkJQyBjID0gaGlnaChxICogZGl2aXNvciArIGMpCisJOzsKKwlnZXRmLnNpZyByOCA9IGY5CQlDIE0yICByZXR1cm4gYworCWJyLnJldC5zcHRrLm1hbnkgYjAKKworRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9pYTY0L211bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vaWE2NC9tdWxfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFiZjZkMAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vaWE2NC9tdWxfMS5hc20KQEAgLTAsMCArMSw1ODQgQEAKK2RubCAgSUEtNjQgbXBuX211bF8xLCBtcG5fbXVsXzFjIC0tIE11bHRpcGx5IGEgbGltYiB2ZWN0b3Igd2l0aCBhIGxpbWIgYW5kCitkbmwgIHN0b3JlIHRoZSByZXN1bHQgaW4gYSBzZWNvbmQgbGltYiB2ZWN0b3IuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqb3JuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDAwLTIwMDQsIDIwMDYsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgIGN5Y2xlcy9saW1iCitDIEl0YW5pdW06ICAgIDQuMAorQyBJdGFuaXVtIDI6ICAyLjAKKworQyBUT0RPCitDICAqIEZ1cnRoZXIgb3B0aW1pemUgZmVlZC1pbiBhbmQgd2luZC1kb3duIGNvZGUsIGJvdGggZm9yIHNwZWVkIGFuZCBjb2RlIHNpemUuCitDICAqIEhhbmRsZSBsb3cgbGltYiBpbnB1dCBhbmQgcmVzdWx0cyBzcGVjaWFsbHksIHVzaW5nIGEgY29tbW9uIHN0ZjggaW4gdGhlCitDICAgIGVwaWxvZ3VlLgorQyAgKiBVc2UgMSBjL2wgY2FycnkgcHJvcGFnYXRpb24gc2NoZW1lIGluIHdpbmQtZG93biBjb2RlLgorQyAgKiBVc2UgZXh0cmEgcG9pbnRlciByZWdpc3RlciBmb3IgYHVwJyB0byBzcGVlZCB1cCBmZWVkLWluIGxvYWRzLgorQyAgKiBXb3JrIG91dCBmaW5hbCBkaWZmZXJlbmNlcyB3aXRoIGFkZG11bF8xLmFzbS4KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywgYHIzMicpCitkZWZpbmUoYHVwJywgYHIzMycpCitkZWZpbmUoYG4nLCBgcjM0JykKK2RlZmluZShgdmwnLCBgcjM1JykKK2RlZmluZShgY3knLCBgcjM2JykJQyBmb3IgbXBuX211bF8xYworCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX211bF8xKQorCS5wcm9sb2d1ZQorCS5zYXZlCWFyLmxjLCByMgorCS5ib2R5CisKK2lmZGVmKGBIQVZFX0FCSV8zMicsCitgCWFkZHA0CQlycCA9IDAsIHJwCQlDIE0gSQorCWFkZHA0CQl1cCA9IDAsIHVwCQlDIE0gSQorCXp4dDQJCW4gPSBuCQkJQyBJCisJOzsKKycpCit7Lm1maQorCWFkZHMJCXIxNSA9IC0xLCBuCQlDIE0gSQorCW1vdgkJZjkgPSBmMAkJCUMgRgorCW1vdi5pCQlyMiA9IGFyLmxjCQlDIEkwCit9Cit7Lm1taQorCWxkZjgJCWY3ID0gW3VwXSwgOAkJQyBNCisJbm9wLm0JCTAJCQlDIE0KKwlhbmQJCXIxNCA9IDMsIG4JCUMgTSBJCisJOzsKK30KKy5MY29tbW9uOgorey5taWkKKwlzZXRmLnNpZwlmNiA9IHZsCQkJQyBNMiBNMworCXNoci51CQlyMzEgPSByMTUsIDIJCUMgSTAKKwljbXAuZXEJCXAxMCwgcDAgPSAwLCByMTQJQyBNIEkKK30KK3subWlpCisJY21wLmVxCQlwMTEsIHAwID0gMiwgcjE0CUMgTSBJCisJY21wLmVxCQlwMTIsIHAwID0gMywgcjE0CUMgTSBJCisJbm9wLmkJCTAJCQlDIEkKKwk7OworfQorey5taWkKKwljbXAubmUJCXA2LCBwNyA9IHIwLCByMAkJQyBNIEkKKwltb3YuaQkJYXIubGMgPSByMzEJCUMgSTAKKwljbXAubmUJCXA4LCBwOSA9IHIwLCByMAkJQyBNIEkKK30KK3suYmJiCisgIChwMTApCWJyLmRwdGsJCS5MYjAwCQkJQyBCCisgIChwMTEpCWJyLmRwdGsJCS5MYjEwCQkJQyBCCisgIChwMTIpCWJyLmRwdGsJCS5MYjExCQkJQyBCCisJOzsKK30KKworLkxiMDE6CW1vdgkJcjIwID0gMAorCWJyLmNsb29wLmRwdGsJLmdydDEJCQlDIEIKKworCXhtYS5sCQlmMzkgPSBmNywgZjYsIGY5CUMgRgorCXhtYS5odQkJZjQzID0gZjcsIGY2LCBmOQlDIEYKKwk7OworCWdldGYuc2lnCXI4ID0gZjQzCQlDIE0yCisJc3RmOAkJW3JwXSA9IGYzOQkJQyBNMiBNMworCW1vdi5pCQlhci5sYyA9IHIyCQlDIEkwCisJYnIucmV0LnNwdGsubWFueSBiMAkJCUMgQgorCisuZ3J0MToKKwlsZGY4CQlmMzIgPSBbdXBdLCA4CisJOzsKKwlsZGY4CQlmMzMgPSBbdXBdLCA4CisJOzsKKwlsZGY4CQlmMzQgPSBbdXBdLCA4CisJeG1hLmwJCWYzOSA9IGY3LCBmNiwgZjkKKwl4bWEuaHUJCWY0MyA9IGY3LCBmNiwgZjkKKwk7OworCWxkZjgJCWYzNSA9IFt1cF0sIDgKKwlici5jbG9vcC5kcHRrCS5ncnQ1CisKKwl4bWEubAkJZjM2ID0gZjMyLCBmNiwgZjAKKwl4bWEuaHUJCWY0MCA9IGYzMiwgZjYsIGYwCisJOzsKKwlzdGY4CQlbcnBdID0gZjM5LCA4CisJeG1hLmwJCWYzNyA9IGYzMywgZjYsIGYwCisJeG1hLmh1CQlmNDEgPSBmMzMsIGY2LCBmMAorCTs7CisJZ2V0Zi5zaWcJcjIxID0gZjQzCisJZ2V0Zi5zaWcJcjE4ID0gZjM2CisJeG1hLmwJCWYzOCA9IGYzNCwgZjYsIGYwCisJeG1hLmh1CQlmNDIgPSBmMzQsIGY2LCBmMAorCTs7CisJZ2V0Zi5zaWcJcjIyID0gZjQwCisJZ2V0Zi5zaWcJcjE5ID0gZjM3CisJeG1hLmwJCWYzOSA9IGYzNSwgZjYsIGYwCisJeG1hLmh1CQlmNDMgPSBmMzUsIGY2LCBmMAorCTs7CisJZ2V0Zi5zaWcJcjIzID0gZjQxCisJZ2V0Zi5zaWcJcjE2ID0gZjM4CisJYnIJCS5MY2o1CisKKy5ncnQ1OgorCXhtYS5sCQlmMzYgPSBmMzIsIGY2LCBmMAorCXhtYS5odQkJZjQwID0gZjMyLCBmNiwgZjAKKwk7OworCWdldGYuc2lnCXIxNyA9IGYzOQorCWxkZjgJCWYzMiA9IFt1cF0sIDgKKwl4bWEubAkJZjM3ID0gZjMzLCBmNiwgZjAKKwl4bWEuaHUJCWY0MSA9IGYzMywgZjYsIGYwCisJOzsKKwlnZXRmLnNpZwlyMjEgPSBmNDMKKwlsZGY4CQlmMzMgPSBbdXBdLCA4CisJeG1hLmwJCWYzOCA9IGYzNCwgZjYsIGYwCisJOzsKKwlnZXRmLnNpZwlyMTggPSBmMzYKKwl4bWEuaHUJCWY0MiA9IGYzNCwgZjYsIGYwCisJOzsKKwlnZXRmLnNpZwlyMjIgPSBmNDAKKwlsZGY4CQlmMzQgPSBbdXBdLCA4CisJeG1hLmwJCWYzOSA9IGYzNSwgZjYsIGYwCisJOzsKKwlnZXRmLnNpZwlyMTkgPSBmMzcKKwl4bWEuaHUJCWY0MyA9IGYzNSwgZjYsIGYwCisJYnIJCS5MTDAxCisKKworLkxiMTA6CWxkZjgJCWYzNSA9IFt1cF0sIDgKKwltb3YJCXIyMyA9IDAKKwlici5jbG9vcC5kcHRrCS5ncnQyCisKKwl4bWEubAkJZjM4ID0gZjcsIGY2LCBmOQorCXhtYS5odQkJZjQyID0gZjcsIGY2LCBmOQorCTs7CisJc3RmOAkJW3JwXSA9IGYzOCwgOAorCXhtYS5sCQlmMzkgPSBmMzUsIGY2LCBmNDIKKwl4bWEuaHUJCWY0MyA9IGYzNSwgZjYsIGY0MgorCTs7CisJZ2V0Zi5zaWcJcjggPSBmNDMKKwlzdGY4CQlbcnBdID0gZjM5CisJbW92LmkJCWFyLmxjID0gcjIKKwlici5yZXQuc3B0ay5tYW55IGIwCisKKworLmdydDI6CisJbGRmOAkJZjMyID0gW3VwXSwgOAorCTs7CisJbGRmOAkJZjMzID0gW3VwXSwgOAorCXhtYS5sCQlmMzggPSBmNywgZjYsIGY5CisJeG1hLmh1CQlmNDIgPSBmNywgZjYsIGY5CisJOzsKKwlsZGY4CQlmMzQgPSBbdXBdLCA4CisJeG1hLmwJCWYzOSA9IGYzNSwgZjYsIGYwCisJeG1hLmh1CQlmNDMgPSBmMzUsIGY2LCBmMAorCTs7CisJbGRmOAkJZjM1ID0gW3VwXSwgOAorCWJyLmNsb29wLmRwdGsJLmdydDYKKworCXN0ZjgJCVtycF0gPSBmMzgsIDgKKwl4bWEubAkJZjM2ID0gZjMyLCBmNiwgZjAKKwl4bWEuaHUJCWY0MCA9IGYzMiwgZjYsIGYwCisJOzsKKwlnZXRmLnNpZwlyMjAgPSBmNDIKKwlnZXRmLnNpZwlyMTcgPSBmMzkKKwl4bWEubAkJZjM3ID0gZjMzLCBmNiwgZjAKKwl4bWEuaHUJCWY0MSA9IGYzMywgZjYsIGYwCisJOzsKKwlnZXRmLnNpZwlyMjEgPSBmNDMKKwlnZXRmLnNpZwlyMTggPSBmMzYKKwl4bWEubAkJZjM4ID0gZjM0LCBmNiwgZjAKKwl4bWEuaHUJCWY0MiA9IGYzNCwgZjYsIGYwCisJOzsKKwlnZXRmLnNpZwlyMjIgPSBmNDAKKwlnZXRmLnNpZwlyMTkgPSBmMzcKKwl4bWEubAkJZjM5ID0gZjM1LCBmNiwgZjAKKwl4bWEuaHUJCWY0MyA9IGYzNSwgZjYsIGYwCisJYnIJCS5MY2o2CisKKy5ncnQ2OgorCWdldGYuc2lnCXIxNiA9IGYzOAorCXhtYS5sCQlmMzYgPSBmMzIsIGY2LCBmMAorCXhtYS5odQkJZjQwID0gZjMyLCBmNiwgZjAKKwk7OworCWdldGYuc2lnCXIyMCA9IGY0MgorCWxkZjgJCWYzMiA9IFt1cF0sIDgKKwl4bWEubAkJZjM3ID0gZjMzLCBmNiwgZjAKKwk7OworCWdldGYuc2lnCXIxNyA9IGYzOQorCXhtYS5odQkJZjQxID0gZjMzLCBmNiwgZjAKKwk7OworCWdldGYuc2lnCXIyMSA9IGY0MworCWxkZjgJCWYzMyA9IFt1cF0sIDgKKwl4bWEubAkJZjM4ID0gZjM0LCBmNiwgZjAKKwk7OworCWdldGYuc2lnCXIxOCA9IGYzNgorCXhtYS5odQkJZjQyID0gZjM0LCBmNiwgZjAKKwlicgkJLkxMMTAKKworCisuTGIxMToJbGRmOAkJZjM0ID0gW3VwXSwgOAorCW1vdgkJcjIyID0gMAorCTs7CisJbGRmOAkJZjM1ID0gW3VwXSwgOAorCWJyLmNsb29wLmRwdGsJLmdydDMKKwk7OworCisJeG1hLmwJCWYzNyA9IGY3LCBmNiwgZjkKKwl4bWEuaHUJCWY0MSA9IGY3LCBmNiwgZjkKKwl4bWEubAkJZjM4ID0gZjM0LCBmNiwgZjAKKwl4bWEuaHUJCWY0MiA9IGYzNCwgZjYsIGYwCisJeG1hLmwJCWYzOSA9IGYzNSwgZjYsIGYwCisJeG1hLmh1CQlmNDMgPSBmMzUsIGY2LCBmMAorCTs7CisJZ2V0Zi5zaWcJcjIzID0gZjQxCisJc3RmOAkJW3JwXSA9IGYzNywgOAorCWdldGYuc2lnCXIxNiA9IGYzOAorCWdldGYuc2lnCXIyMCA9IGY0MgorCWdldGYuc2lnCXIxNyA9IGYzOQorCWdldGYuc2lnCXI4ID0gZjQzCisJYnIJCS5MY2ozCisKKy5ncnQzOgorCWxkZjgJCWYzMiA9IFt1cF0sIDgKKwl4bWEubAkJZjM3ID0gZjcsIGY2LCBmOQorCXhtYS5odQkJZjQxID0gZjcsIGY2LCBmOQorCTs7CisJbGRmOAkJZjMzID0gW3VwXSwgOAorCXhtYS5sCQlmMzggPSBmMzQsIGY2LCBmMAorCXhtYS5odQkJZjQyID0gZjM0LCBmNiwgZjAKKwk7OworCWdldGYuc2lnCXIxOSA9IGYzNworCWxkZjgJCWYzNCA9IFt1cF0sIDgKKwl4bWEubAkJZjM5ID0gZjM1LCBmNiwgZjAKKwl4bWEuaHUJCWY0MyA9IGYzNSwgZjYsIGYwCisJOzsKKwlnZXRmLnNpZwlyMjMgPSBmNDEKKwlsZGY4CQlmMzUgPSBbdXBdLCA4CisJYnIuY2xvb3AuZHB0awkuZ3J0NworCisJZ2V0Zi5zaWcJcjE2ID0gZjM4CisJeG1hLmwJCWYzNiA9IGYzMiwgZjYsIGYwCisJZ2V0Zi5zaWcJcjIwID0gZjQyCisJeG1hLmh1CQlmNDAgPSBmMzIsIGY2LCBmMAorCTs7CisJZ2V0Zi5zaWcJcjE3ID0gZjM5CisJeG1hLmwJCWYzNyA9IGYzMywgZjYsIGYwCisJZ2V0Zi5zaWcJcjIxID0gZjQzCisJeG1hLmh1CQlmNDEgPSBmMzMsIGY2LCBmMAorCTs7CisJZ2V0Zi5zaWcJcjE4ID0gZjM2CisJc3Q4CQlbcnBdID0gcjE5LCA4CisJeG1hLmwJCWYzOCA9IGYzNCwgZjYsIGYwCisJeG1hLmh1CQlmNDIgPSBmMzQsIGY2LCBmMAorCWJyCQkuTGNqNworCisuZ3J0NzoKKwlnZXRmLnNpZwlyMTYgPSBmMzgKKwl4bWEubAkJZjM2ID0gZjMyLCBmNiwgZjAKKwl4bWEuaHUJCWY0MCA9IGYzMiwgZjYsIGYwCisJOzsKKwlnZXRmLnNpZwlyMjAgPSBmNDIKKwlsZGY4CQlmMzIgPSBbdXBdLCA4CisJeG1hLmwJCWYzNyA9IGYzMywgZjYsIGYwCisJOzsKKwlnZXRmLnNpZwlyMTcgPSBmMzkKKwl4bWEuaHUJCWY0MSA9IGYzMywgZjYsIGYwCisJYnIJCS5MTDExCisKKworLkxiMDA6CWxkZjgJCWYzMyA9IFt1cF0sIDgKKwltb3YJCXIyMSA9IDAKKwk7OworCWxkZjgJCWYzNCA9IFt1cF0sIDgKKwk7OworCWxkZjgJCWYzNSA9IFt1cF0sIDgKKwl4bWEubAkJZjM2ID0gZjcsIGY2LCBmOQorCXhtYS5odQkJZjQwID0gZjcsIGY2LCBmOQorCWJyLmNsb29wLmRwdGsJLmdydDQKKworCXhtYS5sCQlmMzcgPSBmMzMsIGY2LCBmMAorCXhtYS5odQkJZjQxID0gZjMzLCBmNiwgZjAKKwl4bWEubAkJZjM4ID0gZjM0LCBmNiwgZjAKKwl4bWEuaHUJCWY0MiA9IGYzNCwgZjYsIGYwCisJOzsKKwlnZXRmLnNpZwlyMjIgPSBmNDAKKwlzdGY4CQlbcnBdID0gZjM2LCA4CisJeG1hLmwJCWYzOSA9IGYzNSwgZjYsIGYwCisJZ2V0Zi5zaWcJcjE5ID0gZjM3CisJeG1hLmh1CQlmNDMgPSBmMzUsIGY2LCBmMAorCTs7CisJZ2V0Zi5zaWcJcjIzID0gZjQxCisJZ2V0Zi5zaWcJcjE2ID0gZjM4CisJZ2V0Zi5zaWcJcjIwID0gZjQyCisJZ2V0Zi5zaWcJcjE3ID0gZjM5CisJYnIJCS5MY2o0CisKKy5ncnQ0OgorCWxkZjgJCWYzMiA9IFt1cF0sIDgKKwl4bWEubAkJZjM3ID0gZjMzLCBmNiwgZjAKKwl4bWEuaHUJCWY0MSA9IGYzMywgZjYsIGYwCisJOzsKKwlnZXRmLnNpZwlyMTggPSBmMzYKKwlsZGY4CQlmMzMgPSBbdXBdLCA4CisJeG1hLmwJCWYzOCA9IGYzNCwgZjYsIGYwCisJeG1hLmh1CQlmNDIgPSBmMzQsIGY2LCBmMAorCTs7CisJZ2V0Zi5zaWcJcjIyID0gZjQwCisJbGRmOAkJZjM0ID0gW3VwXSwgOAorCXhtYS5sCQlmMzkgPSBmMzUsIGY2LCBmMAorCTs7CisJZ2V0Zi5zaWcJcjE5ID0gZjM3CisJZ2V0Zi5zaWcJcjIzID0gZjQxCisJeG1hLmh1CQlmNDMgPSBmMzUsIGY2LCBmMAorCWxkZjgJCWYzNSA9IFt1cF0sIDgKKwlici5jbG9vcC5kcHRrCS5ncnQ4CisKKwlnZXRmLnNpZwlyMTYgPSBmMzgKKwl4bWEubAkJZjM2ID0gZjMyLCBmNiwgZjAKKwlnZXRmLnNpZwlyMjAgPSBmNDIKKwl4bWEuaHUJCWY0MCA9IGYzMiwgZjYsIGYwCisJOzsKKwlnZXRmLnNpZwlyMTcgPSBmMzkKKwlzdDgJCVtycF0gPSByMTgsIDgKKwl4bWEubAkJZjM3ID0gZjMzLCBmNiwgZjAKKwl4bWEuaHUJCWY0MSA9IGYzMywgZjYsIGYwCisJYnIJCS5MY2o4CisKKy5ncnQ4OgorCWdldGYuc2lnCXIxNiA9IGYzOAorCXhtYS5sCQlmMzYgPSBmMzIsIGY2LCBmMAorCXhtYS5odQkJZjQwID0gZjMyLCBmNiwgZjAKKwlicgkJLkxMMDAKKworCitDICoqKiBNQUlOIExPT1AgU1RBUlQgKioqCisJQUxJR04oMzIpCisuTG9vcDoKKwkucHJlZC5yZWwgIm11dGV4IixwNixwNworCWdldGYuc2lnCXIxNiA9IGYzOAorCXhtYS5sCQlmMzYgPSBmMzIsIGY2LCBmMAorICAgKHA2KQljbXAubGV1CQlwOCwgcDkgPSByMjQsIHIxNworCXN0OAkJW3JwXSA9IHIyNCwgOAorCXhtYS5odQkJZjQwID0gZjMyLCBmNiwgZjAKKyAgIChwNykJY21wLmx0dQkJcDgsIHA5ID0gcjI0LCByMTcKKwk7OworLkxMMDA6CisJLnByZWQucmVsICJtdXRleCIscDgscDkKKwlnZXRmLnNpZwlyMjAgPSBmNDIKKyAgIChwOCkJYWRkCQlyMjQgPSByMTgsIHIyMSwgMQorCW5vcC5iCQkwCisJbGRmOAkJZjMyID0gW3VwXSwgOAorICAgKHA5KQlhZGQJCXIyNCA9IHIxOCwgcjIxCisJbm9wLmIJCTAKKwk7OworCS5wcmVkLnJlbCAibXV0ZXgiLHA4LHA5CisJZ2V0Zi5zaWcJcjE3ID0gZjM5CisJeG1hLmwJCWYzNyA9IGYzMywgZjYsIGYwCisgICAocDgpCWNtcC5sZXUJCXA2LCBwNyA9IHIyNCwgcjE4CisJc3Q4CQlbcnBdID0gcjI0LCA4CisJeG1hLmh1CQlmNDEgPSBmMzMsIGY2LCBmMAorICAgKHA5KQljbXAubHR1CQlwNiwgcDcgPSByMjQsIHIxOAorCTs7CisuTEwxMToKKwkucHJlZC5yZWwgIm11dGV4IixwNixwNworCWdldGYuc2lnCXIyMSA9IGY0MworICAgKHA2KQlhZGQJCXIyNCA9IHIxOSwgcjIyLCAxCisJbm9wLmIJCTAKKwlsZGY4CQlmMzMgPSBbdXBdLCA4CisgICAocDcpCWFkZAkJcjI0ID0gcjE5LCByMjIKKwlub3AuYgkJMAorCTs7CisJLnByZWQucmVsICJtdXRleCIscDYscDcKKwlnZXRmLnNpZwlyMTggPSBmMzYKKwl4bWEubAkJZjM4ID0gZjM0LCBmNiwgZjAKKyAgIChwNikJY21wLmxldQkJcDgsIHA5ID0gcjI0LCByMTkKKwlzdDgJCVtycF0gPSByMjQsIDgKKwl4bWEuaHUJCWY0MiA9IGYzNCwgZjYsIGYwCisgICAocDcpCWNtcC5sdHUJCXA4LCBwOSA9IHIyNCwgcjE5CisJOzsKKy5MTDEwOgorCS5wcmVkLnJlbCAibXV0ZXgiLHA4LHA5CisJZ2V0Zi5zaWcJcjIyID0gZjQwCisgICAocDgpCWFkZAkJcjI0ID0gcjE2LCByMjMsIDEKKwlub3AuYgkJMAorCWxkZjgJCWYzNCA9IFt1cF0sIDgKKyAgIChwOSkJYWRkCQlyMjQgPSByMTYsIHIyMworCW5vcC5iCQkwCisJOzsKKwkucHJlZC5yZWwgIm11dGV4IixwOCxwOQorCWdldGYuc2lnCXIxOSA9IGYzNworCXhtYS5sCQlmMzkgPSBmMzUsIGY2LCBmMAorICAgKHA4KQljbXAubGV1CQlwNiwgcDcgPSByMjQsIHIxNgorCXN0OAkJW3JwXSA9IHIyNCwgOAorCXhtYS5odQkJZjQzID0gZjM1LCBmNiwgZjAKKyAgIChwOSkJY21wLmx0dQkJcDYsIHA3ID0gcjI0LCByMTYKKwk7OworLkxMMDE6CisJLnByZWQucmVsICJtdXRleCIscDYscDcKKwlnZXRmLnNpZwlyMjMgPSBmNDEKKyAgIChwNikJYWRkCQlyMjQgPSByMTcsIHIyMCwgMQorCW5vcC5iCQkwCisJbGRmOAkJZjM1ID0gW3VwXSwgOAorICAgKHA3KQlhZGQJCXIyNCA9IHIxNywgcjIwCisJYnIuY2xvb3AuZHB0awkuTG9vcAorQyAqKiogTUFJTiBMT09QIEVORCAqKioKKwk7OworCisuTGNqOToKKwkucHJlZC5yZWwgIm11dGV4IixwNixwNworCWdldGYuc2lnCXIxNiA9IGYzOAorCXhtYS5sCQlmMzYgPSBmMzIsIGY2LCBmMAorICAgKHA2KQljbXAubGV1CQlwOCwgcDkgPSByMjQsIHIxNworCXN0OAkJW3JwXSA9IHIyNCwgOAorCXhtYS5odQkJZjQwID0gZjMyLCBmNiwgZjAKKyAgIChwNykJY21wLmx0dQkJcDgsIHA5ID0gcjI0LCByMTcKKwk7OworCS5wcmVkLnJlbCAibXV0ZXgiLHA4LHA5CisJZ2V0Zi5zaWcJcjIwID0gZjQyCisgICAocDgpCWFkZAkJcjI0ID0gcjE4LCByMjEsIDEKKyAgIChwOSkJYWRkCQlyMjQgPSByMTgsIHIyMQorCTs7CisJLnByZWQucmVsICJtdXRleCIscDgscDkKKwlnZXRmLnNpZwlyMTcgPSBmMzkKKwl4bWEubAkJZjM3ID0gZjMzLCBmNiwgZjAKKyAgIChwOCkJY21wLmxldQkJcDYsIHA3ID0gcjI0LCByMTgKKwlzdDgJCVtycF0gPSByMjQsIDgKKwl4bWEuaHUJCWY0MSA9IGYzMywgZjYsIGYwCisgICAocDkpCWNtcC5sdHUJCXA2LCBwNyA9IHIyNCwgcjE4CisJOzsKKy5MY2o4OgorCS5wcmVkLnJlbCAibXV0ZXgiLHA2LHA3CisJZ2V0Zi5zaWcJcjIxID0gZjQzCisgICAocDYpCWFkZAkJcjI0ID0gcjE5LCByMjIsIDEKKyAgIChwNykJYWRkCQlyMjQgPSByMTksIHIyMgorCTs7CisJLnByZWQucmVsICJtdXRleCIscDYscDcKKwlnZXRmLnNpZwlyMTggPSBmMzYKKwl4bWEubAkJZjM4ID0gZjM0LCBmNiwgZjAKKyAgIChwNikJY21wLmxldQkJcDgsIHA5ID0gcjI0LCByMTkKKwlzdDgJCVtycF0gPSByMjQsIDgKKwl4bWEuaHUJCWY0MiA9IGYzNCwgZjYsIGYwCisgICAocDcpCWNtcC5sdHUJCXA4LCBwOSA9IHIyNCwgcjE5CisJOzsKKy5MY2o3OgorCS5wcmVkLnJlbCAibXV0ZXgiLHA4LHA5CisJZ2V0Zi5zaWcJcjIyID0gZjQwCisgICAocDgpCWFkZAkJcjI0ID0gcjE2LCByMjMsIDEKKyAgIChwOSkJYWRkCQlyMjQgPSByMTYsIHIyMworCTs7CisJLnByZWQucmVsICJtdXRleCIscDgscDkKKwlnZXRmLnNpZwlyMTkgPSBmMzcKKwl4bWEubAkJZjM5ID0gZjM1LCBmNiwgZjAKKyAgIChwOCkJY21wLmxldQkJcDYsIHA3ID0gcjI0LCByMTYKKwlzdDgJCVtycF0gPSByMjQsIDgKKwl4bWEuaHUJCWY0MyA9IGYzNSwgZjYsIGYwCisgICAocDkpCWNtcC5sdHUJCXA2LCBwNyA9IHIyNCwgcjE2CisJOzsKKy5MY2o2OgorCS5wcmVkLnJlbCAibXV0ZXgiLHA2LHA3CisJZ2V0Zi5zaWcJcjIzID0gZjQxCisgICAocDYpCWFkZAkJcjI0ID0gcjE3LCByMjAsIDEKKyAgIChwNykJYWRkCQlyMjQgPSByMTcsIHIyMAorCTs7CisJLnByZWQucmVsICJtdXRleCIscDYscDcKKyAgIChwNikJY21wLmxldQkJcDgsIHA5ID0gcjI0LCByMTcKKyAgIChwNykJY21wLmx0dQkJcDgsIHA5ID0gcjI0LCByMTcKKwlnZXRmLnNpZwlyMTYgPSBmMzgKKwlzdDgJCVtycF0gPSByMjQsIDgKKwk7OworLkxjajU6CisJLnByZWQucmVsICJtdXRleCIscDgscDkKKwlnZXRmLnNpZwlyMjAgPSBmNDIKKyAgIChwOCkJYWRkCQlyMjQgPSByMTgsIHIyMSwgMQorICAgKHA5KQlhZGQJCXIyNCA9IHIxOCwgcjIxCisJOzsKKwkucHJlZC5yZWwgIm11dGV4IixwOCxwOQorICAgKHA4KQljbXAubGV1CQlwNiwgcDcgPSByMjQsIHIxOAorICAgKHA5KQljbXAubHR1CQlwNiwgcDcgPSByMjQsIHIxOAorCWdldGYuc2lnCXIxNyA9IGYzOQorCXN0OAkJW3JwXSA9IHIyNCwgOAorCTs7CisuTGNqNDoKKwkucHJlZC5yZWwgIm11dGV4IixwNixwNworCWdldGYuc2lnCXI4ID0gZjQzCisgICAocDYpCWFkZAkJcjI0ID0gcjE5LCByMjIsIDEKKyAgIChwNykJYWRkCQlyMjQgPSByMTksIHIyMgorCTs7CisJLnByZWQucmVsICJtdXRleCIscDYscDcKKwlzdDgJCVtycF0gPSByMjQsIDgKKyAgIChwNikJY21wLmxldQkJcDgsIHA5ID0gcjI0LCByMTkKKyAgIChwNykJY21wLmx0dQkJcDgsIHA5ID0gcjI0LCByMTkKKwk7OworLkxjajM6CisJLnByZWQucmVsICJtdXRleCIscDgscDkKKyAgIChwOCkJYWRkCQlyMjQgPSByMTYsIHIyMywgMQorICAgKHA5KQlhZGQJCXIyNCA9IHIxNiwgcjIzCisJOzsKKwkucHJlZC5yZWwgIm11dGV4IixwOCxwOQorCXN0OAkJW3JwXSA9IHIyNCwgOAorICAgKHA4KQljbXAubGV1CQlwNiwgcDcgPSByMjQsIHIxNgorICAgKHA5KQljbXAubHR1CQlwNiwgcDcgPSByMjQsIHIxNgorCTs7CisuTGNqMjoKKwkucHJlZC5yZWwgIm11dGV4IixwNixwNworICAgKHA2KQlhZGQJCXIyNCA9IHIxNywgcjIwLCAxCisgICAocDcpCWFkZAkJcjI0ID0gcjE3LCByMjAKKwk7OworCS5wcmVkLnJlbCAibXV0ZXgiLHA2LHA3CisJc3Q4CQlbcnBdID0gcjI0LCA4CisgICAocDYpCWNtcC5sZXUJCXA4LCBwOSA9IHIyNCwgcjE3CisgICAocDcpCWNtcC5sdHUJCXA4LCBwOSA9IHIyNCwgcjE3CisJOzsKKyAgIChwOCkJYWRkCQlyOCA9IDEsIHI4CisJbW92LmkJCWFyLmxjID0gcjIKKwlici5yZXQuc3B0ay5tYW55IGIwCitFUElMT0dVRSgpCisKK1BST0xPR1VFKG1wbl9tdWxfMWMpCisJLnByb2xvZ3VlCisJLnNhdmUJYXIubGMsIHIyCisJLmJvZHkKKworaWZkZWYoYEhBVkVfQUJJXzMyJywKK2AJYWRkcDQJCXJwID0gMCwgcnAJCUMgTSBJCisJYWRkcDQJCXVwID0gMCwgdXAJCUMgTSBJCisJenh0NAkJbiA9IG4JCQlDIEkKKwk7OworJykKK3subW1pCisJYWRkcwkJcjE1ID0gLTEsIG4JCUMgTSBJCisJc2V0Zi5zaWcJZjkgPSBjeQkJCUMgTTIgTTMKKwltb3YuaQkJcjIgPSBhci5sYwkJQyBJMAorfQorey5tbWIKKwlsZGY4CQlmNyA9IFt1cF0sIDgJCUMgTQorCWFuZAkJcjE0ID0gMywgbgkJQyBNIEkKKwlici5zcHRrCQkuTGNvbW1vbgorCTs7Cit9CitFUElMT0dVRSgpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vaWE2NC9tdWxfMi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2lhNjQvbXVsXzIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNDNmNjQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2lhNjQvbXVsXzIuYXNtCkBAIC0wLDAgKzEsNjI1IEBACitkbmwgIElBLTY0IG1wbl9tdWxfMiAtLSBNdWx0aXBseSBhIG4tbGltYiBudW1iZXIgd2l0aCBhIDItbGltYiBudW1iZXIgYW5kIHN0b3JlCitkbmwgIHN0b3JlIHRoZSByZXN1bHQgdG8gYSAobisxKS1saW1iIG51bWJlci4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDQsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgIGN5Y2xlcy9saW1iCitDIEl0YW5pdW06ICAgID8KK0MgSXRhbml1bSAyOiAgMS41CisKK0MgVE9ETworQyAgKiBDbGVhbiB1cCB2YXJpYWJsZSBuYW1lcywgYW5kIHRyeSB0byBkZWNyZWFzZSB0aGUgbnVtYmVyIG9mIGRpc3RpbmN0CitDICAgIHJlZ2lzdGVycyB1c2VkLgorQyAgKiBDbGVhbiB1cCBmZWVkLWluIGNvZGUgdG8gbm90IHJlcXVpcmUgemVyb2luZyBzZXZlcmFsIHJlZ2lzdGVycy4KK0MgICogTWFrZSBzdXJlIHdlIGRvbid0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHByZWRpY2F0ZSByZWdpc3RlcnMuCitDICAqIENvdWxkIHBlcmhhcHMgc2F2ZSBhIGZldyBjeWNsZXMgYnkgdXNpbmcgMSBjL2wgY2FycnkgcHJvcGFnYXRpb24gaW4KK0MgICAgd2luZC1kb3duIGNvZGUuCitDICAqIFVsdGltYXRlbHkgcmV3cml0ZS4gIFRoZSBwcm9ibGVtIHdpdGggdGhpcyBjb2RlIGlzIHRoYXQgaXQgZmlyc3QgdXNlcyBhCitDICAgIGxvYWRlZCB1IHZhbHVlIGluIG9uZSB4bWEgcGFpciwgdGhlbiBsZWF2ZXMgaXQgbGl2ZSBvdmVyIHNldmVyYWwgdW5yZWxhdGVkCitDICAgIHhtYSBwYWlycywgYmVmb3JlIGl0IHVzZXMgaXQgYWdhaW4uICBJdCBzaG91bGQgYWN0dWFsbHkgYmUgcXVpdGUgcG9zc2libGUKK0MgICAgdG8ganVzdCBzd2FwIHNvbWUgYWxpZ25lZCB4bWEgcGFpcnMgYXJvdW5kLiAgQnV0IHdlIHNob3VsZCB0aGVuIHNjaGVkdWxlCitDICAgIHUgbG9hZHMgZnVydGhlciBmcm9tIHRoZSBmaXJzdCB1c2UuCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsYHIzMicpCitkZWZpbmUoYHVwJyxgcjMzJykKK2RlZmluZShgbicsYHIzNCcpCitkZWZpbmUoYHZwJyxgcjM1JykKKworZGVmaW5lKGBzcnAnLGByMycpCisKK2RlZmluZShgdjAnLGBmNicpCitkZWZpbmUoYHYxJyxgZjcnKQorCitkZWZpbmUoYHMwJyxgcjE0JykKK2RlZmluZShgYWNjMCcsYHIxNScpCisKK2RlZmluZShgcHIwXzAnLGByMTYnKSBkZWZpbmUoYHByMF8xJyxgcjE3JykKK2RlZmluZShgcHIwXzInLGByMTgnKSBkZWZpbmUoYHByMF8zJyxgcjE5JykKKworZGVmaW5lKGBwcjFfMCcsYHIyMCcpIGRlZmluZShgcHIxXzEnLGByMjEnKQorZGVmaW5lKGBwcjFfMicsYHIyMicpIGRlZmluZShgcHIxXzMnLGByMjMnKQorCitkZWZpbmUoYGFjYzFfMCcsYHIyNCcpIGRlZmluZShgYWNjMV8xJyxgcjI1JykKK2RlZmluZShgYWNjMV8yJyxgcjI2JykgZGVmaW5lKGBhY2MxXzMnLGByMjcnKQorCitkbmwgZGVmaW5lKGAnLGByMjgnKQorZG5sIGRlZmluZShgJyxgcjI5JykKK2RubCBkZWZpbmUoYCcsYHIzMCcpCitkbmwgZGVmaW5lKGAnLGByMzEnKQorCitkZWZpbmUoYGZwMGJfMCcsYGY4JykgZGVmaW5lKGBmcDBiXzEnLGBmOScpCitkZWZpbmUoYGZwMGJfMicsYGYxMCcpIGRlZmluZShgZnAwYl8zJyxgZjExJykKKworZGVmaW5lKGBmcDFhXzAnLGBmMTInKSBkZWZpbmUoYGZwMWFfMScsYGYxMycpCitkZWZpbmUoYGZwMWFfMicsYGYxNCcpIGRlZmluZShgZnAxYV8zJyxgZjE1JykKKworZGVmaW5lKGBmcDFiXzAnLGBmMzInKSBkZWZpbmUoYGZwMWJfMScsYGYzMycpCitkZWZpbmUoYGZwMWJfMicsYGYzNCcpIGRlZmluZShgZnAxYl8zJyxgZjM1JykKKworZGVmaW5lKGBmcDJhXzAnLGBmMzYnKSBkZWZpbmUoYGZwMmFfMScsYGYzNycpCitkZWZpbmUoYGZwMmFfMicsYGYzOCcpIGRlZmluZShgZnAyYV8zJyxgZjM5JykKKworZGVmaW5lKGB1XzAnLGBmNDQnKSBkZWZpbmUoYHVfMScsYGY0NScpCitkZWZpbmUoYHVfMicsYGY0NicpIGRlZmluZShgdV8zJyxgZjQ3JykKKworZGVmaW5lKGB1eCcsYGY0OScpCitkZWZpbmUoYHV5JyxgZjUxJykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9tdWxfMikKKwkucHJvbG9ndWUKKwkuc2F2ZQlhci5sYywgcjIKKwkuYm9keQorCitpZmRlZihgSEFWRV9BQklfMzInLGAKKyB7Lm1taTsJCWFkZHA0CXJwID0gMCwgcnAJCUMJCQlNIEkKKwkJYWRkcDQJdXAgPSAwLCB1cAkJQwkJCU0gSQorCQlhZGRwNAl2cCA9IDAsIHZwCQlDCQkJTSBJCit9ey5tbWk7CQlub3AJMQorCQlub3AJMQorCQl6eHQ0CW4gPSBuCQkJQwkJCUkKKwk7OworfScpCisKKyB7Lm1taTsJCWxkZjgJdXggPSBbdXBdLCA4CQlDCQkJTQorCQlsZGY4CXYwID0gW3ZwXSwgOAkJQwkJCU0KKwkJbW92CXIyID0gYXIubGMJCUMJCQlJMAorfXsubW1pOwkJbm9wCTEJCQlDCQkJTQorCQlhbmQJcjE0ID0gMywgbgkJQwkJCU0gSQorCQlhZGQJbiA9IC0yLCBuCQlDCQkJTSBJCisJOzsKK317Lm1taTsJCWxkZjgJdXkgPSBbdXBdLCA4CQlDCQkJTQorCQlsZGY4CXYxID0gW3ZwXQkJQwkJCU0KKwkJc2hyLnUJbiA9IG4sIDIJCUMJCQlJMAorfXsubW1pOwkJbm9wCTEJCQlDCQkJTQorCQljbXAuZXEJcDEwLCBwMCA9IDEsIHIxNAlDCQkJTSBJCisJCWNtcC5lcQlwMTEsIHAwID0gMiwgcjE0CUMJCQlNIEkKKwk7OworfXsubW1pOwkJbm9wCTEJCQlDCQkJTQorCQljbXAuZXEJcDEyLCBwMCA9IDMsIHIxNAlDCQkJTSBJCisJCW1vdglhci5sYyA9IG4JCUMJCQlJMAorfXsuYmJiOwkocDEwKQlici5kcHRrCUwoYjAxKQkJCUMJCQlCCisJKHAxMSkJYnIuZHB0awlMKGIxMCkJCQlDCQkJQgorCShwMTIpCWJyLmRwdGsJTChiMTEpCQkJQwkJCUIKKwk7OworfQorCUFMSUdOKDMyKQorTChiMDApOgkJbGRmOAl1XzEgPSBbdXBdLCA4CisJCW1vdglhY2MxXzIgPSAwCisJCW1vdglwcjFfMiA9IDAKKwkJbW92CXByMF8zID0gMAorCQljbXAubmUJcDgsIHA5ID0gcjAsIHIwCisJOzsKKwkJeG1hLmwJZnAwYl8zID0gdXgsIHYwLCBmMAorCQljbXAubmUJcDEyLCBwMTMgPSByMCwgcjAKKwkJbGRmOAl1XzIgPSBbdXBdLCA4CisJCXhtYS5odQlmcDFhXzMgPSB1eCwgdjAsIGYwCisJCWJyLmNsb29wLmRwdGsJTChndDQpCisKKwkJeG1hLmwJZnAwYl8wID0gdXksIHYwLCBmMAorCQl4bWEuaHUJZnAxYV8wID0gdXksIHYwLCBmMAorCTs7CisJCWdldGZzaWcJYWNjMCA9IGZwMGJfMworCQl4bWEubAlmcDFiXzMgPSB1eCwgdjEsIGZwMWFfMworCQl4bWEuaHUJZnAyYV8zID0gdXgsIHYxLCBmcDFhXzMKKwk7OworCQl4bWEubAlmcDBiXzEgPSB1XzEsIHYwLCBmMAorCQl4bWEuaHUJZnAxYV8xID0gdV8xLCB2MCwgZjAKKwk7OworCQlnZXRmc2lnCXByMF8wID0gZnAwYl8wCisJCXhtYS5sCWZwMWJfMCA9IHV5LCB2MSwgZnAxYV8wCisJCXhtYS5odQlmcDJhXzAgPSB1eSwgdjEsIGZwMWFfMAorCTs7CisJCWdldGZzaWcJcHIxXzMgPSBmcDFiXzMKKwkJZ2V0ZnNpZwlhY2MxXzMgPSBmcDJhXzMKKwkJeG1hLmwJZnAwYl8yID0gdV8yLCB2MCwgZjAKKwkJeG1hLmh1CWZwMWFfMiA9IHVfMiwgdjAsIGYwCisJCWJyCUwoY2o0KQorCitMKGd0NCk6CQl4bWEubAlmcDBiXzAgPSB1eSwgdjAsIGYwCisJCXhtYS5odQlmcDFhXzAgPSB1eSwgdjAsIGYwCisJOzsKKwkJZ2V0ZnNpZwlhY2MwID0gZnAwYl8zCisJCXhtYS5sCWZwMWJfMyA9IHV4LCB2MSwgZnAxYV8zCisJCWxkZjgJdV8zID0gW3VwXSwgOAorCQl4bWEuaHUJZnAyYV8zID0gdXgsIHYxLCBmcDFhXzMKKwk7OworCQl4bWEubAlmcDBiXzEgPSB1XzEsIHYwLCBmMAorCQl4bWEuaHUJZnAxYV8xID0gdV8xLCB2MCwgZjAKKwk7OworCQlnZXRmc2lnCXByMF8wID0gZnAwYl8wCisJCXhtYS5sCWZwMWJfMCA9IHV5LCB2MSwgZnAxYV8wCisJCXhtYS5odQlmcDJhXzAgPSB1eSwgdjEsIGZwMWFfMAorCTs7CisJCWxkZjgJdV8wID0gW3VwXSwgOAorCQlnZXRmc2lnCXByMV8zID0gZnAxYl8zCisJCXhtYS5sCWZwMGJfMiA9IHVfMiwgdjAsIGYwCisJOzsKKwkJZ2V0ZnNpZwlhY2MxXzMgPSBmcDJhXzMKKwkJeG1hLmh1CWZwMWFfMiA9IHVfMiwgdjAsIGYwCisJCWJyCUwoMDApCisKKworCUFMSUdOKDMyKQorTChiMDEpOgkJbGRmOAl1XzAgPSBbdXBdLCA4CQlDIE0KKwkJbW92CWFjYzFfMSA9IDAJCUMgTSBJCisJCW1vdglwcjFfMSA9IDAJCUMgTSBJCisJCW1vdglwcjBfMiA9IDAJCUMgTSBJCisJCWNtcC5uZQlwNiwgcDcgPSByMCwgcjAJCUMgTSBJCisJOzsKKwkJeG1hLmwJZnAwYl8yID0gdXgsIHYwLCBmMAlDIEYKKwkJY21wLm5lCXAxMCwgcDExID0gcjAsIHIwCUMgTSBJCisJCWxkZjgJdV8xID0gW3VwXSwgOAkJQyBNCisJCXhtYS5odQlmcDFhXzIgPSB1eCwgdjAsIGYwCUMgRgorCTs7CisJCXhtYS5sCWZwMGJfMyA9IHV5LCB2MCwgZjAJQyBGCisJCXhtYS5odQlmcDFhXzMgPSB1eSwgdjAsIGYwCUMgRgorCTs7CisJCWdldGZzaWcJYWNjMCA9IGZwMGJfMgkJQyBNCisJCXhtYS5sCWZwMWJfMiA9IHV4LCB2MSxmcDFhXzIJQyBGCisJCWxkZjgJdV8yID0gW3VwXSwgOAkJQyBNCisJCXhtYS5odQlmcDJhXzIgPSB1eCwgdjEsZnAxYV8yCUMgRgorCQlici5jbG9vcC5kcHRrCUwoZ3Q1KQorCisJCXhtYS5sCWZwMGJfMCA9IHVfMCwgdjAsIGYwCUMgRgorCQl4bWEuaHUJZnAxYV8wID0gdV8wLCB2MCwgZjAJQyBGCisJOzsKKwkJZ2V0ZnNpZwlwcjBfMyA9IGZwMGJfMwkJQyBNCisJCXhtYS5sCWZwMWJfMyA9IHV5LCB2MSxmcDFhXzMJQyBGCisJCXhtYS5odQlmcDJhXzMgPSB1eSwgdjEsZnAxYV8zCUMgRgorCTs7CisJCWdldGZzaWcJcHIxXzIgPSBmcDFiXzIJCUMgTQorCQlnZXRmc2lnCWFjYzFfMiA9IGZwMmFfMgkJQyBNCisJCXhtYS5sCWZwMGJfMSA9IHVfMSwgdjAsIGYwCUMgRgorCQl4bWEuaHUJZnAxYV8xID0gdV8xLCB2MCwgZjAJQyBGCisJCWJyCUwoY2o1KQorCitMKGd0NSk6CQl4bWEubAlmcDBiXzAgPSB1XzAsIHYwLCBmMAorCQl4bWEuaHUJZnAxYV8wID0gdV8wLCB2MCwgZjAKKwk7OworCQlnZXRmc2lnCXByMF8zID0gZnAwYl8zCisJCXhtYS5sCWZwMWJfMyA9IHV5LCB2MSwgZnAxYV8zCisJCXhtYS5odQlmcDJhXzMgPSB1eSwgdjEsIGZwMWFfMworCTs7CisJCWxkZjgJdV8zID0gW3VwXSwgOAorCQlnZXRmc2lnCXByMV8yID0gZnAxYl8yCisJCXhtYS5sCWZwMGJfMSA9IHVfMSwgdjAsIGYwCisJOzsKKwkJZ2V0ZnNpZwlhY2MxXzIgPSBmcDJhXzIKKwkJeG1hLmh1CWZwMWFfMSA9IHVfMSwgdjAsIGYwCisJCWJyCUwoMDEpCisKKworCUFMSUdOKDMyKQorTChiMTApOgkJYnIuY2xvb3AuZHB0awlMKGd0MikKKwkJeG1hLmwJZnAwYl8xID0gdXgsIHYwLCBmMAorCQl4bWEuaHUJZnAxYV8xID0gdXgsIHYwLCBmMAorCTs7CisJCXhtYS5sCWZwMGJfMiA9IHV5LCB2MCwgZjAKKwkJeG1hLmh1CWZwMWFfMiA9IHV5LCB2MCwgZjAKKwk7OworCQlzdGY4CVtycF0gPSBmcDBiXzEsIDgKKwkJeG1hLmwJZnAxYl8xID0gdXgsIHYxLCBmcDFhXzEKKwkJeG1hLmh1CWZwMmFfMSA9IHV4LCB2MSwgZnAxYV8xCisJOzsKKwkJZ2V0ZnNpZwlhY2MwID0gZnAwYl8yCisJCXhtYS5sCWZwMWJfMiA9IHV5LCB2MSwgZnAxYV8yCisJCXhtYS5odQlmcDJhXzIgPSB1eSwgdjEsIGZwMWFfMgorCTs7CisJCWdldGZzaWcJcHIxXzEgPSBmcDFiXzEKKwkJZ2V0ZnNpZwlhY2MxXzEgPSBmcDJhXzEKKwkJbW92CWFyLmxjID0gcjIKKwkJZ2V0ZnNpZwlwcjFfMiA9IGZwMWJfMgorCQlnZXRmc2lnCXI4ID0gZnAyYV8yCisJOzsKKwkJYWRkCXMwID0gcHIxXzEsIGFjYzAKKwk7OworCQlzdDgJW3JwXSA9IHMwLCA4CisJCWNtcC5sdHUJcDgsIHA5ID0gczAsIHByMV8xCisJCXN1YglyMzEgPSAtMSwgYWNjMV8xCisJOzsKKwkucHJlZC5yZWwgIm11dGV4IiwgcDgsIHA5CisJKHA4KQlhZGQJYWNjMCA9IHByMV8yLCBhY2MxXzEsIDEKKwkocDkpCWFkZAlhY2MwID0gcHIxXzIsIGFjYzFfMQorCShwOCkJY21wLmxldQlwMTAsIHAwID0gcjMxLCBwcjFfMgorCShwOSkJY21wLmx0dQlwMTAsIHAwID0gcjMxLCBwcjFfMgorCTs7CisJCXN0OAlbcnBdID0gYWNjMCwgOAorCShwMTApCWFkZAlyOCA9IDEsIHI4CisJCWJyLnJldC5zcHRrLm1hbnkgYjAKKworTChndDIpOgkJbGRmOAl1XzMgPSBbdXBdLCA4CisJCW1vdglhY2MxXzAgPSAwCisJCW1vdglwcjFfMCA9IDAKKwk7OworCQltb3YJcHIwXzEgPSAwCisJCXhtYS5sCWZwMGJfMSA9IHV4LCB2MCwgZjAKKwkJbGRmOAl1XzAgPSBbdXBdLCA4CisJCXhtYS5odQlmcDFhXzEgPSB1eCwgdjAsIGYwCisJOzsKKwkJeG1hLmwJZnAwYl8yID0gdXksIHYwLCBmMAorCQl4bWEuaHUJZnAxYV8yID0gdXksIHYwLCBmMAorCTs7CisJCWdldGZzaWcJYWNjMCA9IGZwMGJfMQorCQl4bWEubAlmcDFiXzEgPSB1eCwgdjEsIGZwMWFfMQorCQl4bWEuaHUJZnAyYV8xID0gdXgsIHYxLCBmcDFhXzEKKwk7OworCQlsZGY4CXVfMSA9IFt1cF0sIDgKKwkJeG1hLmwJZnAwYl8zID0gdV8zLCB2MCwgZjAKKwkJeG1hLmh1CWZwMWFfMyA9IHVfMywgdjAsIGYwCisJOzsKKwkJZ2V0ZnNpZwlwcjBfMiA9IGZwMGJfMgorCQl4bWEubAlmcDFiXzIgPSB1eSwgdjEsIGZwMWFfMgorCQl4bWEuaHUJZnAyYV8yID0gdXksIHYxLCBmcDFhXzIKKwk7OworCQlsZGY4CXVfMiA9IFt1cF0sIDgKKwkJZ2V0ZnNpZwlwcjFfMSA9IGZwMWJfMQorCTs7Cisgey5tZmk7CQlnZXRmc2lnCWFjYzFfMSA9IGZwMmFfMQorCQl4bWEubAlmcDBiXzAgPSB1XzAsIHYwLCBmMAorCQljbXAubmUJcDgsIHA5ID0gcjAsIHIwCit9ey5tZmI7CQljbXAubmUJcDEyLCBwMTMgPSByMCwgcjAKKwkJeG1hLmh1CWZwMWFfMCA9IHVfMCwgdjAsIGYwCisJCWJyCUwoMTApCit9CisKKwlBTElHTigzMikKK0woYjExKToJCW1vdglhY2MxXzMgPSAwCisJCW1vdglwcjFfMyA9IDAKKwkJbW92CXByMF8wID0gMAorCQlsZGY4CXVfMiA9IFt1cF0sIDgKKwkJY21wLm5lCXA2LCBwNyA9IHIwLCByMAorCQlici5jbG9vcC5kcHRrCUwoZ3QzKQorCTs7CisJCXhtYS5sCWZwMGJfMCA9IHV4LCB2MCwgZjAKKwkJeG1hLmh1CWZwMWFfMCA9IHV4LCB2MCwgZjAKKwk7OworCQljbXAubmUJcDEwLCBwMTEgPSByMCwgcjAKKwkJeG1hLmwJZnAwYl8xID0gdXksIHYwLCBmMAorCQl4bWEuaHUJZnAxYV8xID0gdXksIHYwLCBmMAorCTs7CisJCWdldGZzaWcJYWNjMCA9IGZwMGJfMAorCQl4bWEubAlmcDFiXzAgPSB1eCwgdjEsIGZwMWFfMAorCQl4bWEuaHUJZnAyYV8wID0gdXgsIHYxLCBmcDFhXzAKKwk7OworCQl4bWEubAlmcDBiXzIgPSB1XzIsIHYwLCBmMAorCQl4bWEuaHUJZnAxYV8yID0gdV8yLCB2MCwgZjAKKwk7OworCQlnZXRmc2lnCXByMF8xID0gZnAwYl8xCisJCXhtYS5sCWZwMWJfMSA9IHV5LCB2MSwgZnAxYV8xCisJCXhtYS5odQlmcDJhXzEgPSB1eSwgdjEsIGZwMWFfMQorCTs7CisJCWdldGZzaWcJcHIxXzAgPSBmcDFiXzAKKwkJZ2V0ZnNpZwlhY2MxXzAgPSBmcDJhXzAKKwkJYnIJTChjajMpCisKK0woZ3QzKToJCXhtYS5sCWZwMGJfMCA9IHV4LCB2MCwgZjAKKwkJY21wLm5lCXAxMCwgcDExID0gcjAsIHIwCisJCWxkZjgJdV8zID0gW3VwXSwgOAorCQl4bWEuaHUJZnAxYV8wID0gdXgsIHYwLCBmMAorCTs7CisJCXhtYS5sCWZwMGJfMSA9IHV5LCB2MCwgZjAKKwkJeG1hLmh1CWZwMWFfMSA9IHV5LCB2MCwgZjAKKwk7OworCQlnZXRmc2lnCWFjYzAgPSBmcDBiXzAKKwkJeG1hLmwJZnAxYl8wID0gdXgsIHYxLCBmcDFhXzAKKwkJbGRmOAl1XzAgPSBbdXBdLCA4CisJCXhtYS5odQlmcDJhXzAgPSB1eCwgdjEsIGZwMWFfMAorCTs7CisJCXhtYS5sCWZwMGJfMiA9IHVfMiwgdjAsIGYwCisJCXhtYS5odQlmcDFhXzIgPSB1XzIsIHYwLCBmMAorCTs7CisJCWdldGZzaWcJcHIwXzEgPSBmcDBiXzEKKwkJeG1hLmwJZnAxYl8xID0gdXksIHYxLCBmcDFhXzEKKwkJeG1hLmh1CWZwMmFfMSA9IHV5LCB2MSwgZnAxYV8xCisJOzsKKwkJbGRmOAl1XzEgPSBbdXBdLCA4CisJCWdldGZzaWcJcHIxXzAgPSBmcDFiXzAKKwk7OworCQlnZXRmc2lnCWFjYzFfMCA9IGZwMmFfMAorCQl4bWEubAlmcDBiXzMgPSB1XzMsIHYwLCBmMAorCQl4bWEuaHUJZnAxYV8zID0gdV8zLCB2MCwgZjAKKwkJYnIJTCgxMSkKKworCitDICoqKiBNQUlOIExPT1AgU1RBUlQgKioqCisJQUxJR04oMzIpCitMKHRvcCk6CQkJCQkJQyAwMAorCS5wcmVkLnJlbCAibXV0ZXgiLCBwOCwgcDkKKwkucHJlZC5yZWwgIm11dGV4IiwgcDEyLCBwMTMKKwkJbGRmOAl1XzMgPSBbdXBdLCA4CisJCWdldGZzaWcJcHIxXzIgPSBmcDFiXzIKKwkocDgpCWNtcC5sZXUJcDYsIHA3ID0gYWNjMCwgcHIwXzEKKwkocDkpCWNtcC5sdHUJcDYsIHA3ID0gYWNjMCwgcHIwXzEKKwkocDEyKQljbXAubGV1CXAxMCwgcDExID0gczAsIHByMV8wCisJKHAxMykJY21wLmx0dQlwMTAsIHAxMSA9IHMwLCBwcjFfMAorCTs7CQkJCQlDIDAxCisJLnByZWQucmVsICJtdXRleCIsIHA2LCBwNworCQlnZXRmc2lnCWFjYzFfMiA9IGZwMmFfMgorCQlzdDgJW3JwXSA9IHMwLCA4CisJCXhtYS5sCWZwMGJfMSA9IHVfMSwgdjAsIGYwCisJKHA2KQlhZGQJYWNjMCA9IHByMF8yLCBhY2MxXzAsIDEKKwkocDcpCWFkZAlhY2MwID0gcHIwXzIsIGFjYzFfMAorCQl4bWEuaHUJZnAxYV8xID0gdV8xLCB2MCwgZjAKKwk7OwkJCQkJQyAwMgorTCgwMSk6CisJLnByZWQucmVsICJtdXRleCIsIHAxMCwgcDExCisJCWdldGZzaWcJcHIwXzAgPSBmcDBiXzAKKwkJeG1hLmwJZnAxYl8wID0gdV8wLCB2MSwgZnAxYV8wCisJKHAxMCkJYWRkCXMwID0gcHIxXzEsIGFjYzAsIDEKKwkocDExKQlhZGQJczAgPSBwcjFfMSwgYWNjMAorCQl4bWEuaHUJZnAyYV8wID0gdV8wLCB2MSwgZnAxYV8wCisJCW5vcAkxCisJOzsJCQkJCUMgMDMKKwkucHJlZC5yZWwgIm11dGV4IiwgcDYsIHA3CisJLnByZWQucmVsICJtdXRleCIsIHAxMCwgcDExCisJCWxkZjgJdV8wID0gW3VwXSwgOAorCQlnZXRmc2lnCXByMV8zID0gZnAxYl8zCisJKHA2KQljbXAubGV1CXA4LCBwOSA9IGFjYzAsIHByMF8yCisJKHA3KQljbXAubHR1CXA4LCBwOSA9IGFjYzAsIHByMF8yCisJKHAxMCkJY21wLmxldQlwMTIsIHAxMyA9IHMwLCBwcjFfMQorCShwMTEpCWNtcC5sdHUJcDEyLCBwMTMgPSBzMCwgcHIxXzEKKwk7OwkJCQkJQyAwNAorCS5wcmVkLnJlbCAibXV0ZXgiLCBwOCwgcDkKKwkJZ2V0ZnNpZwlhY2MxXzMgPSBmcDJhXzMKKwkJc3Q4CVtycF0gPSBzMCwgOAorCQl4bWEubAlmcDBiXzIgPSB1XzIsIHYwLCBmMAorCShwOCkJYWRkCWFjYzAgPSBwcjBfMywgYWNjMV8xLCAxCisJKHA5KQlhZGQJYWNjMCA9IHByMF8zLCBhY2MxXzEKKwkJeG1hLmh1CWZwMWFfMiA9IHVfMiwgdjAsIGYwCisJOzsJCQkJCUMgMDUKK0woMDApOgorCS5wcmVkLnJlbCAibXV0ZXgiLCBwMTIsIHAxMworCQlnZXRmc2lnCXByMF8xID0gZnAwYl8xCisJCXhtYS5sCWZwMWJfMSA9IHVfMSwgdjEsIGZwMWFfMQorCShwMTIpCWFkZAlzMCA9IHByMV8yLCBhY2MwLCAxCisJKHAxMykJYWRkCXMwID0gcHIxXzIsIGFjYzAKKwkJeG1hLmh1CWZwMmFfMSA9IHVfMSwgdjEsIGZwMWFfMQorCQlub3AJMQorCTs7CQkJCQlDIDA2CisJLnByZWQucmVsICJtdXRleCIsIHA4LCBwOQorCS5wcmVkLnJlbCAibXV0ZXgiLCBwMTIsIHAxMworCQlsZGY4CXVfMSA9IFt1cF0sIDgKKwkJZ2V0ZnNpZwlwcjFfMCA9IGZwMWJfMAorCShwOCkJY21wLmxldQlwNiwgcDcgPSBhY2MwLCBwcjBfMworCShwOSkJY21wLmx0dQlwNiwgcDcgPSBhY2MwLCBwcjBfMworCShwMTIpCWNtcC5sZXUJcDEwLCBwMTEgPSBzMCwgcHIxXzIKKwkocDEzKQljbXAubHR1CXAxMCwgcDExID0gczAsIHByMV8yCisJOzsJCQkJCUMgMDcKKwkucHJlZC5yZWwgIm11dGV4IiwgcDYsIHA3CisJCWdldGZzaWcJYWNjMV8wID0gZnAyYV8wCisJCXN0OAlbcnBdID0gczAsIDgKKwkJeG1hLmwJZnAwYl8zID0gdV8zLCB2MCwgZjAKKwkocDYpCWFkZAlhY2MwID0gcHIwXzAsIGFjYzFfMiwgMQorCShwNykJYWRkCWFjYzAgPSBwcjBfMCwgYWNjMV8yCisJCXhtYS5odQlmcDFhXzMgPSB1XzMsIHYwLCBmMAorCTs7CQkJCQlDIDA4CitMKDExKToKKwkucHJlZC5yZWwgIm11dGV4IiwgcDEwLCBwMTEKKwkJZ2V0ZnNpZwlwcjBfMiA9IGZwMGJfMgorCQl4bWEubAlmcDFiXzIgPSB1XzIsIHYxLCBmcDFhXzIKKwkocDEwKQlhZGQJczAgPSBwcjFfMywgYWNjMCwgMQorCShwMTEpCWFkZAlzMCA9IHByMV8zLCBhY2MwCisJCXhtYS5odQlmcDJhXzIgPSB1XzIsIHYxLCBmcDFhXzIKKwkJbm9wCTEKKwk7OwkJCQkJQyAwOQorCS5wcmVkLnJlbCAibXV0ZXgiLCBwNiwgcDcKKwkucHJlZC5yZWwgIm11dGV4IiwgcDEwLCBwMTEKKwkJbGRmOAl1XzIgPSBbdXBdLCA4CisJCWdldGZzaWcJcHIxXzEgPSBmcDFiXzEKKwkocDYpCWNtcC5sZXUJcDgsIHA5ID0gYWNjMCwgcHIwXzAKKwkocDcpCWNtcC5sdHUJcDgsIHA5ID0gYWNjMCwgcHIwXzAKKwkocDEwKQljbXAubGV1CXAxMiwgcDEzID0gczAsIHByMV8zCisJKHAxMSkJY21wLmx0dQlwMTIsIHAxMyA9IHMwLCBwcjFfMworCTs7CQkJCQlDIDEwCisJLnByZWQucmVsICJtdXRleCIsIHA4LCBwOQorCQlnZXRmc2lnCWFjYzFfMSA9IGZwMmFfMQorCQlzdDgJW3JwXSA9IHMwLCA4CisJCXhtYS5sCWZwMGJfMCA9IHVfMCwgdjAsIGYwCisJKHA4KQlhZGQJYWNjMCA9IHByMF8xLCBhY2MxXzMsIDEKKwkocDkpCWFkZAlhY2MwID0gcHIwXzEsIGFjYzFfMworCQl4bWEuaHUJZnAxYV8wID0gdV8wLCB2MCwgZjAKKwk7OwkJCQkJQyAxMQorTCgxMCk6CisJLnByZWQucmVsICJtdXRleCIsIHAxMiwgcDEzCisJCWdldGZzaWcJcHIwXzMgPSBmcDBiXzMKKwkJeG1hLmwJZnAxYl8zID0gdV8zLCB2MSwgZnAxYV8zCisJKHAxMikJYWRkCXMwID0gcHIxXzAsIGFjYzAsIDEKKwkocDEzKQlhZGQJczAgPSBwcjFfMCwgYWNjMAorCQl4bWEuaHUJZnAyYV8zID0gdV8zLCB2MSwgZnAxYV8zCisJCWJyLmNsb29wLmRwdGsJTCh0b3ApCisJOzsKK0MgKioqIE1BSU4gTE9PUCBFTkQgKioqCisKKwkucHJlZC5yZWwgIm11dGV4IiwgcDgsIHA5CisJLnByZWQucmVsICJtdXRleCIsIHAxMiwgcDEzCisgey5tbWk7CQlnZXRmc2lnCXByMV8yID0gZnAxYl8yCisJCXN0OAlbcnBdID0gczAsIDgKKwkocDgpCWNtcC5sZXUJcDYsIHA3ID0gYWNjMCwgcHIwXzEKK317Lm1taTsJKHA5KQljbXAubHR1CXA2LCBwNyA9IGFjYzAsIHByMF8xCisJKHAxMikJY21wLmxldQlwMTAsIHAxMSA9IHMwLCBwcjFfMAorCShwMTMpCWNtcC5sdHUJcDEwLCBwMTEgPSBzMCwgcHIxXzAKKwk7OworfQkucHJlZC5yZWwgIm11dGV4IiwgcDYsIHA3Cisgey5tZmk7CQlnZXRmc2lnCWFjYzFfMiA9IGZwMmFfMgorCQl4bWEubAlmcDBiXzEgPSB1XzEsIHYwLCBmMAorCQlub3AJMQorfXsubW1mOwkocDYpCWFkZAlhY2MwID0gcHIwXzIsIGFjYzFfMCwgMQorCShwNykJYWRkCWFjYzAgPSBwcjBfMiwgYWNjMV8wCisJCXhtYS5odQlmcDFhXzEgPSB1XzEsIHYwLCBmMAorCTs7Cit9CitMKGNqNSk6CisJLnByZWQucmVsICJtdXRleCIsIHAxMCwgcDExCisgey5tZmk7CQlnZXRmc2lnCXByMF8wID0gZnAwYl8wCisJCXhtYS5sCWZwMWJfMCA9IHVfMCwgdjEsIGZwMWFfMAorCShwMTApCWFkZAlzMCA9IHByMV8xLCBhY2MwLCAxCit9ey5tZmk7CShwMTEpCWFkZAlzMCA9IHByMV8xLCBhY2MwCisJCXhtYS5odQlmcDJhXzAgPSB1XzAsIHYxLCBmcDFhXzAKKwkJbm9wCTEKKwk7OworfQkucHJlZC5yZWwgIm11dGV4IiwgcDYsIHA3CisJLnByZWQucmVsICJtdXRleCIsIHAxMCwgcDExCisgey5tbWk7CQlnZXRmc2lnCXByMV8zID0gZnAxYl8zCisJCXN0OAlbcnBdID0gczAsIDgKKwkocDYpCWNtcC5sZXUJcDgsIHA5ID0gYWNjMCwgcHIwXzIKK317Lm1taTsJKHA3KQljbXAubHR1CXA4LCBwOSA9IGFjYzAsIHByMF8yCisJKHAxMCkJY21wLmxldQlwMTIsIHAxMyA9IHMwLCBwcjFfMQorCShwMTEpCWNtcC5sdHUJcDEyLCBwMTMgPSBzMCwgcHIxXzEKKwk7OworfQkucHJlZC5yZWwgIm11dGV4IiwgcDgsIHA5Cisgey5tZmk7CQlnZXRmc2lnCWFjYzFfMyA9IGZwMmFfMworCQl4bWEubAlmcDBiXzIgPSB1XzIsIHYwLCBmMAorCQlub3AJMQorfXsubW1mOwkocDgpCWFkZAlhY2MwID0gcHIwXzMsIGFjYzFfMSwgMQorCShwOSkJYWRkCWFjYzAgPSBwcjBfMywgYWNjMV8xCisJCXhtYS5odQlmcDFhXzIgPSB1XzIsIHYwLCBmMAorCTs7Cit9CitMKGNqNCk6CisJLnByZWQucmVsICJtdXRleCIsIHAxMiwgcDEzCisgey5tZmk7CQlnZXRmc2lnCXByMF8xID0gZnAwYl8xCisJCXhtYS5sCWZwMWJfMSA9IHVfMSwgdjEsIGZwMWFfMQorCShwMTIpCWFkZAlzMCA9IHByMV8yLCBhY2MwLCAxCit9ey5tZmk7CShwMTMpCWFkZAlzMCA9IHByMV8yLCBhY2MwCisJCXhtYS5odQlmcDJhXzEgPSB1XzEsIHYxLCBmcDFhXzEKKwkJbm9wCTEKKwk7OworfQkucHJlZC5yZWwgIm11dGV4IiwgcDgsIHA5CisJLnByZWQucmVsICJtdXRleCIsIHAxMiwgcDEzCisgey5tbWk7CQlnZXRmc2lnCXByMV8wID0gZnAxYl8wCisJCXN0OAlbcnBdID0gczAsIDgKKwkocDgpCWNtcC5sZXUJcDYsIHA3ID0gYWNjMCwgcHIwXzMKK317Lm1taTsJKHA5KQljbXAubHR1CXA2LCBwNyA9IGFjYzAsIHByMF8zCisJKHAxMikJY21wLmxldQlwMTAsIHAxMSA9IHMwLCBwcjFfMgorCShwMTMpCWNtcC5sdHUJcDEwLCBwMTEgPSBzMCwgcHIxXzIKKwk7OworfQkucHJlZC5yZWwgIm11dGV4IiwgcDYsIHA3Cisgey5tbWk7CQlnZXRmc2lnCWFjYzFfMCA9IGZwMmFfMAorCShwNikJYWRkCWFjYzAgPSBwcjBfMCwgYWNjMV8yLCAxCisJKHA3KQlhZGQJYWNjMCA9IHByMF8wLCBhY2MxXzIKKwk7OworfQorTChjajMpOgorCS5wcmVkLnJlbCAibXV0ZXgiLCBwMTAsIHAxMQorIHsubWZpOwkJZ2V0ZnNpZwlwcjBfMiA9IGZwMGJfMgorCQl4bWEubAlmcDFiXzIgPSB1XzIsIHYxLCBmcDFhXzIKKwkocDEwKQlhZGQJczAgPSBwcjFfMywgYWNjMCwgMQorfXsubWZpOwkocDExKQlhZGQJczAgPSBwcjFfMywgYWNjMAorCQl4bWEuaHUJZnAyYV8yID0gdV8yLCB2MSwgZnAxYV8yCisJCW5vcAkxCisJOzsKK30JLnByZWQucmVsICJtdXRleCIsIHA2LCBwNworCS5wcmVkLnJlbCAibXV0ZXgiLCBwMTAsIHAxMQorIHsubW1pOwkJZ2V0ZnNpZwlwcjFfMSA9IGZwMWJfMQorCQlzdDgJW3JwXSA9IHMwLCA4CisJKHA2KQljbXAubGV1CXA4LCBwOSA9IGFjYzAsIHByMF8wCit9ey5tbWk7CShwNykJY21wLmx0dQlwOCwgcDkgPSBhY2MwLCBwcjBfMAorCShwMTApCWNtcC5sZXUJcDEyLCBwMTMgPSBzMCwgcHIxXzMKKwkocDExKQljbXAubHR1CXAxMiwgcDEzID0gczAsIHByMV8zCisJOzsKK30JLnByZWQucmVsICJtdXRleCIsIHA4LCBwOQorIHsubW1pOwkJZ2V0ZnNpZwlhY2MxXzEgPSBmcDJhXzEKKwkocDgpCWFkZAlhY2MwID0gcHIwXzEsIGFjYzFfMywgMQorCShwOSkJYWRkCWFjYzAgPSBwcjBfMSwgYWNjMV8zCisJOzsKK30JLnByZWQucmVsICJtdXRleCIsIHAxMiwgcDEzCisgey5tbWk7CShwMTIpCWFkZAlzMCA9IHByMV8wLCBhY2MwLCAxCisJKHAxMykJYWRkCXMwID0gcHIxXzAsIGFjYzAKKwkJbm9wCTEKKwk7OworfQkucHJlZC5yZWwgIm11dGV4IiwgcDgsIHA5CisJLnByZWQucmVsICJtdXRleCIsIHAxMiwgcDEzCisgey5tbWk7CQlnZXRmc2lnCXByMV8yID0gZnAxYl8yCisJCXN0OAlbcnBdID0gczAsIDgKKwkocDgpCWNtcC5sZXUJcDYsIHA3ID0gYWNjMCwgcHIwXzEKK317Lm1taTsJKHA5KQljbXAubHR1CXA2LCBwNyA9IGFjYzAsIHByMF8xCisJKHAxMikJY21wLmxldQlwMTAsIHAxMSA9IHMwLCBwcjFfMAorCShwMTMpCWNtcC5sdHUJcDEwLCBwMTEgPSBzMCwgcHIxXzAKKwk7OworfQkucHJlZC5yZWwgIm11dGV4IiwgcDYsIHA3Cisgey5tbWk7CQlnZXRmc2lnCXI4ID0gZnAyYV8yCisJKHA2KQlhZGQJYWNjMCA9IHByMF8yLCBhY2MxXzAsIDEKKwkocDcpCWFkZAlhY2MwID0gcHIwXzIsIGFjYzFfMAorCTs7Cit9CS5wcmVkLnJlbCAibXV0ZXgiLCBwMTAsIHAxMQorIHsubW1pOwkocDEwKQlhZGQJczAgPSBwcjFfMSwgYWNjMCwgMQorCShwMTEpCWFkZAlzMCA9IHByMV8xLCBhY2MwCisJKHA2KQljbXAubGV1CXA4LCBwOSA9IGFjYzAsIHByMF8yCisJOzsKK30JLnByZWQucmVsICJtdXRleCIsIHAxMCwgcDExCisgey5tbWk7CShwNykJY21wLmx0dQlwOCwgcDkgPSBhY2MwLCBwcjBfMgorCShwMTApCWNtcC5sZXUJcDEyLCBwMTMgPSBzMCwgcHIxXzEKKwkocDExKQljbXAubHR1CXAxMiwgcDEzID0gczAsIHByMV8xCisJOzsKK30JLnByZWQucmVsICJtdXRleCIsIHA4LCBwOQorIHsubW1pOwkJc3Q4CVtycF0gPSBzMCwgOAorCShwOCkJYWRkCWFjYzAgPSBwcjFfMiwgYWNjMV8xLCAxCisJKHA5KQlhZGQJYWNjMCA9IHByMV8yLCBhY2MxXzEKKwk7OworfQkucHJlZC5yZWwgIm11dGV4IiwgcDgsIHA5Cisgey5tbWk7CShwOCkJY21wLmxldQlwMTAsIHAxMSA9IGFjYzAsIHByMV8yCisJKHA5KQljbXAubHR1CXAxMCwgcDExID0gYWNjMCwgcHIxXzIKKwkocDEyKQlhZGQJYWNjMCA9IDEsIGFjYzAKKwk7OworfXsubW1pOwkJc3Q4CVtycF0gPSBhY2MwLCA4CisJKHAxMikJY21wZXFvcglwMTAsIHAwID0gMCwgYWNjMAorCQlub3AJMQorCTs7Cit9ey5taWI7CShwMTApCWFkZAlyOCA9IDEsIHI4CisJCW1vdglhci5sYyA9IHIyCisJCWJyLnJldC5zcHRrLm1hbnkgYjAKK30KK0VQSUxPR1VFKCkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9pYTY0L3BvcGNvdW50LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vaWE2NC9wb3Bjb3VudC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBiNWM1YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vaWE2NC9wb3Bjb3VudC5hc20KQEAgLTAsMCArMSwyMDAgQEAKK2RubCAgSUEtNjQgbXBuX3BvcGNvdW50IC0tIG1wbiBwb3B1bGF0aW9uIGNvdW50LgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3Jiam9ybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAwMC0yMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICAgIGN5Y2xlcy9saW1iCitDIEl0YW5pdW06ICAgICAgIDEuNQorQyBJdGFuaXVtIDI6ICAgICAxCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGB1cCcsIGByMzInKQorZGVmaW5lKGBuJywgYHIzMycpCisKK2RlZmluZShgdTAnLGByMTYnKSBkZWZpbmUoYHUxJyxgcjE3JykgZGVmaW5lKGB1MicsYHIxOCcpIGRlZmluZShgdTMnLGByMTknKQorZGVmaW5lKGBjMCcsYHIyOCcpIGRlZmluZShgYzEnLGByMjknKSBkZWZpbmUoYGMyJyxgcjMwJykgZGVmaW5lKGBjMycsYHIzMScpCitkZWZpbmUoYHMnLGByOCcpCisKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9wb3Bjb3VudCkKKwkucHJvbG9ndWUKK2lmZGVmKGBIQVZFX0FCSV8zMicsCitgCWFkZHA0CQl1cCA9IDAsIHVwCQlDCQkJTSBJCisJbm9wLm0JCTAKKwl6eHQ0CQluID0gbgkJCUMJCQlJCisJOzsKKycpCisKKyB7Lm1taTsJYWRkCQlyOSA9IDUxMiwgdXAJCUMgcHJlZmV0Y2ggcG9pbnRlcglNIEkKKwlsZDgJCXIxMCA9IFt1cF0sIDgJCUMgbG9hZCBmaXJzdCBsaW1iCU0wMQorCW1vdi5pCQlyMiA9IGFyLmxjCQlDIHNhdmUgYXIubGMJCUkwCit9ey5tbWk7CWFuZAkJcjE0ID0gMywgbgkJQwkJCU0gSQorCWNtcC5sdAkJcDE1LCBwMTQgPSA0LCBuCQlDIHNtYWxsIGNvdW50PwkJTSBJCisJYWRkCQluID0gLTUsIG4JCUMJCQlNIEkKKwk7OworfXsubW1pOwljbXAuZXEJCXA2LCBwMCA9IDEsIHIxNAkJQwkJCU0gSQorCWNtcC5lcQkJcDcsIHAwID0gMiwgcjE0CQlDCQkJTSBJCisJY21wLmVxCQlwOCwgcDAgPSAzLCByMTQJCUMJCQlNIEkKK317LmJiYgorICAocDYpCWJyLmRwdGsJCS5MYjAxCQkJQwkJCUIKKyAgKHA3KQlici5kcHRrCQkuTGIxMAkJCUMJCQlCCisgIChwOCkJYnIuZHB0awkJLkxiMTEJCQlDCQkJQgorfQorCisKKy5MYjAwOglsZDgJCXUxID0gW3VwXSwgOAkJQwkJCU0wMQorCXNoci51CQluID0gbiwgMgkJQwkJCUkwCisJbW92CQlzID0gMAkJCUMJCQlNIEkKKwk7OworCWxkOAkJdTIgPSBbdXBdLCA4CQlDCQkJTTAxCisJcG9wY250CQljMCA9IHIxMAkJQwkJCUkwCisJbW92LmkJCWFyLmxjID0gbgkJQwkJCUkwCisJOzsKKwlsZDgJCXUzID0gW3VwXSwgOAkJQwkJCU0wMQorCXBvcGNudAkJYzEgPSB1MQkJCUMJCQlJMAorICAocDE1KQlici5jb25kLmRwdGsJLmdydDQJCQlDCQkJQgorCTs7CisJbm9wLm0JMAkJCQlDCQkJLQorCW5vcC5tCTAJCQkJQwkJCS0KKwlwb3BjbnQJCWMyID0gdTIJCQlDCQkJSTAKKwk7OworCW1vdgkJcyA9IGMwCQkJQwkJCU0gSQorCXBvcGNudAkJYzMgPSB1MwkJCUMJCQlJMAorCWJyCQkuTGNqNAkJCUMJCQlCCisKKy5ncnQ0OglsZDgJCXUwID0gW3VwXSwgOAkJQwkJCU0wMQorCXBvcGNudAkJYzIgPSB1MgkJCUMJCQlJMAorCWJyCQkuTEwwMAkJCUMJCQlCCisKKworLkxiMDE6CisJcG9wY250CQlzID0gcjEwCQkJQwkJCUkwCisgIChwMTQpCWJyLnJldC5zcHRrLm1hbnkgYjAJCQlDCQkJQgorCisuZ3J0MToJbGQ4CQl1MCA9IFt1cF0sIDgJCUMJCQlNMDEKKwlzaHIudQkJbiA9IG4sIDIJCUMJCQlJMAorCTs7CisJbGQ4CQl1MSA9IFt1cF0sIDgJCUMJCQlNMDEKKwltb3YuaQkJYXIubGMgPSBuCQlDCQkJSTAKKwk7OworCWxkOAkJdTIgPSBbdXBdLCA4CQlDCQkJTTAxCisJcG9wY250CQljMCA9IHUwCQkJQwkJCUkwCisJbW92CQljMyA9IDAJCQlDCQkJSTAKKworCTs7CisJbGQ4CQl1MyA9IFt1cF0sIDgJCUMJCQlNMDEKKwlwb3BjbnQJCWMxID0gdTEJCQlDCQkJSTAKKwlici5jbG9vcC5kcHRrCS5Mb29wCQkJQwkJCUIKKwlicgkJLkxlbmQJCQlDCQkJQgorCisKKy5MYjEwOglsZDgJCXUzID0gW3VwXSwgOAkJQwkJCU0wMQorCXNoci51CQluID0gbiwgMgkJQwkJCUkwCisgIChwMTUpCWJyLmNvbmQuZHB0awkuZ3J0MgkJCUMJCQlCCisKKwlwb3BjbnQJCXMgPSByMTAJCQlDCQkJSTAKKwk7OworCXBvcGNudAkJYzMgPSB1MwkJCUMJCQlJMAorCWJyCQkuTGNqMgkJCUMJCQlCCisKKy5ncnQyOglsZDgJCXUwID0gW3VwXSwgOAkJQwkJCU0wMQorCW1vdi5pCQlhci5sYyA9IG4JCUMJCQlJMAorCXBvcGNudAkJYzIgPSByMTAJCUMJCQlJMAorCTs7CisJbGQ4CQl1MSA9IFt1cF0sIDgJCUMJCQlNMDEKKwlwb3BjbnQJCWMzID0gdTMJCQlDCQkJSTAKKwltb3YJCXMgPSAwCQkJQwkJCU0gSQorCTs7CisJbGQ4CQl1MiA9IFt1cF0sIDgJCUMJCQlNMDEKKwlwb3BjbnQJCWMwID0gdTAJCQlDCQkJSTAKKwlicgkJLkxMMTAJCQlDCQkJQgorCisKKy5MYjExOglsZDgJCXUyID0gW3VwXSwgOAkJQwkJCU0wMQorCXNoci51CQluID0gbiwgMgkJQwkJCUkwCisJbW92CQlzID0gMAkJCUMJCQlNIEkKKwk7OworCWxkOAkJdTMgPSBbdXBdLCA4CQlDCQkJTTAxCisJcG9wY250CQlzID0gcjEwCQkJQwkJCUkwCisgIChwMTUpCWJyLmNvbmQuZHB0awkuZ3J0MwkJCUMJCQlCCisKKwlwb3BjbnQJCWMyID0gdTIJCQlDCQkJSTAKKwk7OworCXBvcGNudAkJYzMgPSB1MwkJCUMJCQlJMAorCWJyCQkuTGNqMwkJCUMJCQlCCisKKy5ncnQzOglsZDgJCXUwID0gW3VwXSwgOAkJQwkJCU0wMQorCXBvcGNudAkJYzIgPSB1MgkJCUMJCQlJMAorCW1vdi5pCQlhci5sYyA9IG4JCUMJCQlJMAorCW1vdgkJYzEgPSAwCisJOzsKKwlsZDgJCXUxID0gW3VwXSwgOAkJQwkJCU0wMQorCXBvcGNudAkJYzMgPSB1MwkJCUMJCQlJMAorCWJyCQkuTEwxMQkJCUMJCQlCCisKKworLkxvb3A6CWxkOAkJdTAgPSBbdXBdLCA4CQlDCQkJTTAxCisJcG9wY250CQljMiA9IHUyCQkJQwkJCUkwCisJYWRkCQlzID0gcywgYzMJCUMJCQlNIEkKKwk7OworLkxMMDA6CWxkOAkJdTEgPSBbdXBdLCA4CQlDCQkJTTAxCisJcG9wY250CQljMyA9IHUzCQkJQwkJCUkwCisJYWRkCQlzID0gcywgYzAJCUMJCQlNIEkKKwk7OworLkxMMTE6CWxkOAkJdTIgPSBbdXBdLCA4CQlDCQkJTTAxCisJcG9wY250CQljMCA9IHUwCQkJQwkJCUkwCisJYWRkCQlzID0gcywgYzEJCUMJCQlNIEkKKwk7OworLkxMMTA6CWxkOAkJdTMgPSBbdXBdLCA4CQlDCQkJTTAxCisJcG9wY250CQljMSA9IHUxCQkJQwkJCUkwCisJYWRkCQlzID0gcywgYzIJCUMJCQlNIEkKKwlsZmV0Y2gJCVtyOV0sIDMyCQlDCQkJTTAxCisJbm9wLm0JCTAJCQlDCQkJLQorCWJyLmNsb29wLmRwdGsJLkxvb3AJCQlDCQkJQgorCTs7CisKKy5MZW5kOglwb3BjbnQJCWMyID0gdTIJCQlDCQkJSTAKKwlhZGQJCXMgPSBzLCBjMwkJQwkJCU0gSQorCTs7CisJcG9wY250CQljMyA9IHUzCQkJQwkJCUkwCisJYWRkCQlzID0gcywgYzAJCUMJCQlNIEkKKwk7OworLkxjajQ6CWFkZAkJcyA9IHMsIGMxCQlDCQkJTSBJCisJOzsKKy5MY2ozOglhZGQJCXMgPSBzLCBjMgkJQwkJCU0gSQorCTs7CisuTGNqMjoJYWRkCQlzID0gcywgYzMJCUMJCQlNIEkKKwltb3YuaQkJYXIubGMgPSByMgkJQwkJCUkwCisJYnIucmV0LnNwdGsubWFueSBiMAkJCUMJCQlCCitFUElMT0dVRSgpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vaWE2NC9yc2gxYW9yc19uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vaWE2NC9yc2gxYW9yc19uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzdkZWZiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9pYTY0L3JzaDFhb3JzX24uYXNtCkBAIC0wLDAgKzEsNDQ3IEBACitkbmwgIElBLTY0IG1wbl9yc2gxYWRkX24vbXBuX3JzaDFzdWJfbiAtLSBycFtdID0gKHVwW10gKy0gdnBbXSkgPj4gMS4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDMtMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgY3ljbGVzL2xpbWIKK0MgSXRhbml1bTogICAgMi41CitDIEl0YW5pdW0gMjogIDEuNQorCitDIFRPRE8KK0MgICogUmV3cml0ZSBmdW5jdGlvbiBlbnRyeSBjb2RlIHVzaW5nIGFvcnNsc2gxX24uYXNtIHN0eWxlLgorQyAgKiBNaWNyby1vcHRpbWl6ZSBmZWVkLWluIGFuZCB3aW5kLWRvd24gY29kZS4KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJyxgcjMyJykKK2RlZmluZShgdXAnLGByMzMnKQorZGVmaW5lKGB2cCcsYHIzNCcpCitkZWZpbmUoYG4nLGByMzUnKQorCitpZmRlZihgT1BFUkFUSU9OX3JzaDFhZGRfbicsYAorICBkZWZpbmUoQUREU1VCLCAgICAgICBhZGQpCisgIGRlZmluZShQUkVELAkgICAgICAgbHR1KQorICBkZWZpbmUoSU5DUiwJICAgICAgIDEpCisgIGRlZmluZShMSU0sCSAgICAgICAtMSkKKyAgZGVmaW5lKGZ1bmMsIG1wbl9yc2gxYWRkX24pCisnKQoraWZkZWYoYE9QRVJBVElPTl9yc2gxc3ViX24nLGAKKyAgZGVmaW5lKEFERFNVQiwgICAgICAgc3ViKQorICBkZWZpbmUoUFJFRCwJICAgICAgIGd0dSkKKyAgZGVmaW5lKElOQ1IsCSAgICAgICAtMSkKKyAgZGVmaW5lKExJTSwJICAgICAgIDApCisgIGRlZmluZShmdW5jLCBtcG5fcnNoMXN1Yl9uKQorJykKKworQyBTb21lIHVzZWZ1bCBhbGlhc2VzIGZvciByZWdpc3RlcnMgd2UgdXNlCitkZWZpbmUoYHUwJyxgcjE0JykgZGVmaW5lKGB1MScsYHIxNScpIGRlZmluZShgdTInLGByMTYnKSBkZWZpbmUoYHUzJyxgcjE3JykKK2RlZmluZShgdjAnLGByMTgnKSBkZWZpbmUoYHYxJyxgcjE5JykgZGVmaW5lKGB2MicsYHIyMCcpIGRlZmluZShgdjMnLGByMjEnKQorZGVmaW5lKGB3MCcsYHIyMicpIGRlZmluZShgdzEnLGByMjMnKSBkZWZpbmUoYHcyJyxgcjI0JykgZGVmaW5lKGB3MycsYHIyNScpCitkZWZpbmUoYHgwJyxgcjI2JykgZGVmaW5lKGB4MScsYHI5JykgZGVmaW5lKGB4MicsYHIzMCcpIGRlZmluZShgeDMnLGByMzEnKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9yc2gxYWRkX24gbXBuX3JzaDFzdWJfbikKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKGZ1bmMpCisJLnByb2xvZ3VlCisJLnNhdmUJYXIubGMsIHIyCisJLmJvZHkKK2lmZGVmKGBIQVZFX0FCSV8zMicsYAorCWFkZHA0CQlycCA9IDAsIHJwCQlDCQkJTSBJCisJYWRkcDQJCXVwID0gMCwgdXAJCUMJCQlNIEkKKwlhZGRwNAkJdnAgPSAwLCB2cAkJQwkJCU0gSQorCW5vcC5tCQkwCisJbm9wLm0JCTAKKwl6eHQ0CQluID0gbgkJCUMJCQlJCisJOzsKKycpCisgey5tbWk7CWxkOAkJcjExID0gW3ZwXSwgOAkJQwkJCU0wMQorCWxkOAkJcjEwID0gW3VwXSwgOAkJQwkJCU0wMQorCW1vdi5pCQlyMiA9IGFyLmxjCQlDCQkJSTAKK317Lm1taTsJYW5kCQlyMTQgPSAzLCBuCQlDCQkJTSBJCisJY21wLmx0CQlwMTUsIHAwID0gNCwgbgkJQwkJCU0gSQorCWFkZAkJbiA9IC00LCBuCQlDCQkJTSBJCisJOzsKK317Lm1taTsJY21wLmVxCQlwNiwgcDAgPSAxLCByMTQJCUMJCQlNIEkKKwljbXAuZXEJCXA3LCBwMCA9IDIsIHIxNAkJQwkJCU0gSQorCWNtcC5lcQkJcDgsIHAwID0gMywgcjE0CQlDCQkJTSBJCit9ey5iYmIKKyAgKHA2KQlici5kcHRrCQkuTGIwMQkJCUMJCQlCCisgIChwNykJYnIuZHB0awkJLkxiMTAJCQlDCQkJQgorICAocDgpCWJyLmRwdGsJCS5MYjExCQkJQwkJCUIKK30KKworLkxiMDA6CWxkOAkJdjAgPSBbdnBdLCA4CQlDCQkJTTAxCisJbGQ4CQl1MCA9IFt1cF0sIDgJCUMJCQlNMDEKKwlzaHIudQkJbiA9IG4sIDIJCUMJCQlJMAorCTs7CisJbGQ4CQl2MSA9IFt2cF0sIDgJCUMJCQlNMDEKKwlsZDgJCXUxID0gW3VwXSwgOAkJQwkJCU0wMQorCUFERFNVQgkJdzMgPSByMTAsIHIxMQkJQwkJCU0gSQorCTs7CisJbGQ4CQl2MiA9IFt2cF0sIDgJCUMJCQlNMDEKKwlsZDgJCXUyID0gW3VwXSwgOAkJQwkJCU0wMQorICAocDE1KQlici5kcG50CQkuZ3J0NAkJCUMJCQlCCisJOzsKKworCWNtcC5QUkVECXA3LCBwMCA9IHczLCByMTAJQwkJCU0gSQorCWFuZAkJcjggPSAxLCB3MwkJQwkJCU0gSQorCUFERFNVQgkJdzAgPSB1MCwgdjAJCUMJCQlNIEkKKwk7OworCWNtcC5QUkVECXA4LCBwMCA9IHcwLCB1MAkJQwkJCU0gSQorCUFERFNVQgkJdzEgPSB1MSwgdjEJCUMJCQlNIEkKKwk7OworCWNtcC5QUkVECXA5LCBwMCA9IHcxLCB1MQkJQwkJCU0gSQorICAgKHA3KQljbXAuZXEub3IJcDgsIHAwID0gTElNLCB3MAlDCQkJTSBJCisgICAocDcpCWFkZAkJdzAgPSBJTkNSLCB3MAkJQwkJCU0gSQorCTs7CisJc2hycAkJeDMgPSB3MCwgdzMsIDEJCUMJCQlJMAorCUFERFNVQgkJdzIgPSB1MiwgdjIJCUMJCQlNIEkKKyAgIChwOCkJY21wLmVxLm9yCXA5LCBwMCA9IExJTSwgdzEJQwkJCU0gSQorICAgKHA4KQlhZGQJCXcxID0gSU5DUiwgdzEJCUMJCQlNIEkKKwlicgkJLkxjajQJCQlDCQkJQgorCisuZ3J0NDoJbGQ4CQl2MyA9IFt2cF0sIDgJCUMJCQlNMDEKKwljbXAuUFJFRAlwNywgcDAgPSB3MywgcjEwCUMJCQlNIEkKKwlsZDgJCXUzID0gW3VwXSwgOAkJQwkJCU0wMQorCWFuZAkJcjggPSAxLCB3MwkJQwkJCU0gSQorCTs7CisJQUREU1VCCQl3MCA9IHUwLCB2MAkJQwkJCU0gSQorCWxkOAkJdjAgPSBbdnBdLCA4CQlDCQkJTTAxCisJYWRkCQluID0gLTEsIG4KKwk7OworCWNtcC5QUkVECXA4LCBwMCA9IHcwLCB1MAkJQwkJCU0gSQorCWxkOAkJdTAgPSBbdXBdLCA4CQlDCQkJTTAxCisJQUREU1VCCQl3MSA9IHUxLCB2MQkJQwkJCU0gSQorCTs7CisJbGQ4CQl2MSA9IFt2cF0sIDgJCUMJCQlNMDEKKwltb3YuaQkJYXIubGMgPSBuCQlDCQkJSTAKKwljbXAuUFJFRAlwOSwgcDAgPSB3MSwgdTEJCUMJCQlNIEkKKwlsZDgJCXUxID0gW3VwXSwgOAkJQwkJCU0wMQorICAgKHA3KQljbXAuZXEub3IJcDgsIHAwID0gTElNLCB3MAlDCQkJTSBJCisgICAocDcpCWFkZAkJdzAgPSBJTkNSLCB3MAkJQwkJCU0gSQorCTs7CisJQUREU1VCCQl3MiA9IHUyLCB2MgkJQwkJCU0gSQorCWxkOAkJdjIgPSBbdnBdLCA4CQlDCQkJTTAxCisJc2hycAkJeDMgPSB3MCwgdzMsIDEJCUMJCQlJMAorICAgKHA4KQljbXAuZXEub3IJcDksIHAwID0gTElNLCB3MQlDCQkJTSBJCisgICAocDgpCWFkZAkJdzEgPSBJTkNSLCB3MQkJQwkJCU0gSQorCWJyCQkuTEwwMAkJCUMJCQlCCisKKworLkxiMDE6CUFERFNVQgkJdzIgPSByMTAsIHIxMQkJQwkJCU0gSQorCXNoci51CQluID0gbiwgMgkJQwkJCUkwCisgIChwMTUpCWJyLmRwbnQJCS5ncnQxCQkJQwkJCUIKKwk7OworCisJY21wLlBSRUQJcDYsIHA3ID0gdzIsIHIxMAlDCQkJTSBJCisJc2hyLnUJCXgyID0gdzIsIDEJCUMJCQlJMAorCWFuZAkJcjggPSAxLCB3MgkJQwkJCU0gSQorCTs7CisgICAocDYpCWRlcAkJeDIgPSAtMSwgeDIsIDYzLCAxCUMJCQlJMAorCWJyCQkuTGNqMQkJCUMJCQlCCisKKy5ncnQxOglsZDgJCXYzID0gW3ZwXSwgOAkJQwkJCU0wMQorCWxkOAkJdTMgPSBbdXBdLCA4CQlDCQkJTTAxCisJOzsKKwlsZDgJCXYwID0gW3ZwXSwgOAkJQwkJCU0wMQorCWxkOAkJdTAgPSBbdXBdLCA4CQlDCQkJTTAxCisJbW92LmkJCWFyLmxjID0gbgkJQyBGSVhNRSBzd2FwIHdpdGggbmV4dAlJMAorCTs7CisJbGQ4CQl2MSA9IFt2cF0sIDgJCUMJCQlNMDEKKwlsZDgJCXUxID0gW3VwXSwgOAkJQwkJCU0wMQorCTs7CisJbGQ4CQl2MiA9IFt2cF0sIDgJCUMJCQlNMDEKKwlsZDgJCXUyID0gW3VwXSwgOAkJQwkJCU0wMQorCWNtcC5QUkVECXA2LCBwMCA9IHcyLCByMTAJQwkJCU0gSQorCWFuZAkJcjggPSAxLCB3MgkJQwkJCU0gSQorCUFERFNVQgkJdzMgPSB1MywgdjMJCUMJCQlNIEkKKwlici5jbG9vcC5kcHRrCS5ncnQ1CQkJQwkJCUIKKwk7OworCisJY21wLlBSRUQJcDcsIHAwID0gdzMsIHUzCQlDCQkJTSBJCisJOzsKKwlBRERTVUIJCXcwID0gdTAsIHYwCQlDCQkJTSBJCisgICAocDYpCWNtcC5lcS5vcglwNywgcDAgPSBMSU0sIHczCUMJCQlNIEkKKyAgIChwNikJYWRkCQl3MyA9IElOQ1IsIHczCQlDCQkJTSBJCisJOzsKKwljbXAuUFJFRAlwOCwgcDAgPSB3MCwgdTAJCUMJCQlNIEkKKwlzaHJwCQl4MiA9IHczLCB3MiwgMQkJQwkJCUkwCisJQUREU1VCCQl3MSA9IHUxLCB2MQkJQwkJCU0gSQorCTs7CisJY21wLlBSRUQJcDksIHAwID0gdzEsIHUxCQlDCQkJTSBJCisgICAocDcpCWNtcC5lcS5vcglwOCwgcDAgPSBMSU0sIHcwCUMJCQlNIEkKKyAgIChwNykJYWRkCQl3MCA9IElOQ1IsIHcwCQlDCQkJTSBJCisJYnIJCS5MY2o1CQkJQwkJCUIKKworLmdydDU6CWxkOAkJdjMgPSBbdnBdLCA4CQlDCQkJTTAxCisJY21wLlBSRUQJcDcsIHAwID0gdzMsIHUzCQlDCQkJTSBJCisJbGQ4CQl1MyA9IFt1cF0sIDgJCUMJCQlNMDEKKwk7OworCUFERFNVQgkJdzAgPSB1MCwgdjAJCUMJCQlNIEkKKwlsZDgJCXYwID0gW3ZwXSwgOAkJQwkJCU0wMQorICAgKHA2KQljbXAuZXEub3IJcDcsIHAwID0gTElNLCB3MwlDCQkJTSBJCisgICAocDYpCWFkZAkJdzMgPSBJTkNSLCB3MwkJQwkJCU0gSQorCTs7CisJY21wLlBSRUQJcDgsIHAwID0gdzAsIHUwCQlDCQkJTSBJCisJc2hycAkJeDIgPSB3MywgdzIsIDEJCUMJCQlJMAorCWxkOAkJdTAgPSBbdXBdLCA4CQlDCQkJTTAxCisJQUREU1VCCQl3MSA9IHUxLCB2MQkJQwkJCU0gSQorCTs7CisJbGQ4CQl2MSA9IFt2cF0sIDgJCUMJCQlNMDEKKwljbXAuUFJFRAlwOSwgcDAgPSB3MSwgdTEJCUMJCQlNIEkKKwlsZDgJCXUxID0gW3VwXSwgOAkJQwkJCU0wMQorICAgKHA3KQljbXAuZXEub3IJcDgsIHAwID0gTElNLCB3MAlDCQkJTSBJCisgICAocDcpCWFkZAkJdzAgPSBJTkNSLCB3MAkJQwkJCU0gSQorCWJyCQkuTEwwMQkJCUMJCQlCCisKKworLkxiMTA6CWxkOAkJdjIgPSBbdnBdLCA4CQlDCQkJTTAxCisJbGQ4CQl1MiA9IFt1cF0sIDgJCUMJCQlNMDEKKwlzaHIudQkJbiA9IG4sIDIJCUMJCQlJMAorCUFERFNVQgkJdzEgPSByMTAsIHIxMQkJQwkJCU0gSQorICAocDE1KQlici5kcG50CQkuZ3J0MgkJCUMJCQlCCisJOzsKKworCWNtcC5QUkVECXA5LCBwMCA9IHcxLCByMTAJQwkJCU0gSQorCWFuZAkJcjggPSAxLCB3MQkJQwkJCU0gSQorCUFERFNVQgkJdzIgPSB1MiwgdjIJCUMJCQlNIEkKKwk7OworCWNtcC5QUkVECXA2LCBwMCA9IHcyLCB1MgkJQwkJCU0gSQorCTs7CisgICAocDkpCWNtcC5lcS5vcglwNiwgcDAgPSBMSU0sIHcyCUMJCQlNIEkKKyAgIChwOSkJYWRkCQl3MiA9IElOQ1IsIHcyCQlDCQkJTSBJCisJOzsKKwlzaHJwCQl4MSA9IHcyLCB3MSwgMQkJQwkJCUkwCisJc2hyLnUJCXgyID0gdzIsIDEJCUMJCQlJMAorCWJyCQkuTGNqMgkJCUMJCQlCCisKKy5ncnQyOglsZDgJCXYzID0gW3ZwXSwgOAkJQwkJCU0wMQorCWxkOAkJdTMgPSBbdXBdLCA4CQlDCQkJTTAxCisJOzsKKwlsZDgJCXYwID0gW3ZwXSwgOAkJQwkJCU0wMQorCWxkOAkJdTAgPSBbdXBdLCA4CQlDCQkJTTAxCisJbW92LmkJCWFyLmxjID0gbgkJQwkJCUkwCisJOzsKKwlsZDgJCXYxID0gW3ZwXSwgOAkJQwkJCU0wMQorCWNtcC5QUkVECXA5LCBwMCA9IHcxLCByMTAJQwkJCU0gSQorCWxkOAkJdTEgPSBbdXBdLCA4CQlDCQkJTTAxCisJYW5kCQlyOCA9IDEsIHcxCQlDCQkJTSBJCisJOzsKKwlBRERTVUIJCXcyID0gdTIsIHYyCQlDCQkJTSBJCisJbGQ4CQl2MiA9IFt2cF0sIDgJCUMJCQlNMDEKKwk7OworCWNtcC5QUkVECXA2LCBwMCA9IHcyLCB1MgkJQwkJCU0gSQorCWxkOAkJdTIgPSBbdXBdLCA4CQlDCQkJTTAxCisJQUREU1VCCQl3MyA9IHUzLCB2MwkJQwkJCU0gSQorCWJyLmNsb29wLmRwdGsJLmdydDYJCQlDCQkJQgorCTs7CisKKwljbXAuUFJFRAlwNywgcDAgPSB3MywgdTMJCUMJCQlNIEkKKyAgIChwOSkJY21wLmVxLm9yCXA2LCBwMCA9IExJTSwgdzIJQwkJCU0gSQorICAgKHA5KQlhZGQJCXcyID0gSU5DUiwgdzIJCUMJCQlNIEkKKwk7OworCXNocnAJCXgxID0gdzIsIHcxLCAxCQlDCQkJSTAKKwlBRERTVUIJCXcwID0gdTAsIHYwCQlDCQkJTSBJCisgICAocDYpCWNtcC5lcS5vcglwNywgcDAgPSBMSU0sIHczCUMJCQlNIEkKKyAgIChwNikJYWRkCQl3MyA9IElOQ1IsIHczCQlDCQkJTSBJCisJYnIJCS5MY2o2CQkJQwkJCUIKKworLmdydDY6CWxkOAkJdjMgPSBbdnBdLCA4CQlDCQkJTTAxCisJY21wLlBSRUQJcDcsIHAwID0gdzMsIHUzCQlDCQkJTSBJCisJbGQ4CQl1MyA9IFt1cF0sIDgJCUMJCQlNMDEKKyAgIChwOSkJY21wLmVxLm9yCXA2LCBwMCA9IExJTSwgdzIJQwkJCU0gSQorICAgKHA5KQlhZGQJCXcyID0gSU5DUiwgdzIJCUMJCQlNIEkKKwk7OworCXNocnAJCXgxID0gdzIsIHcxLCAxCQlDCQkJSTAKKwlBRERTVUIJCXcwID0gdTAsIHYwCQlDCQkJTSBJCisJbGQ4CQl2MCA9IFt2cF0sIDgJCUMJCQlNMDEKKyAgIChwNikJY21wLmVxLm9yCXA3LCBwMCA9IExJTSwgdzMJQwkJCU0gSQorICAgKHA2KQlhZGQJCXczID0gSU5DUiwgdzMJCUMJCQlNIEkKKwlicgkJLkxMMTAJCQlDCQkJQgorCisKKy5MYjExOglsZDgJCXYxID0gW3ZwXSwgOAkJQwkJCU0wMQorCWxkOAkJdTEgPSBbdXBdLCA4CQlDCQkJTTAxCisJc2hyLnUJCW4gPSBuLCAyCQlDCQkJSTAKKwk7OworCWxkOAkJdjIgPSBbdnBdLCA4CQlDCQkJTTAxCisJbGQ4CQl1MiA9IFt1cF0sIDgJCUMJCQlNMDEKKwlBRERTVUIJCXcwID0gcjEwLCByMTEJCUMJCQlNIEkKKyAgKHAxNSkJYnIuZHBudAkJLmdydDMJCQlDCQkJQgorCTs7CisKKwljbXAuUFJFRAlwOCwgcDAgPSB3MCwgcjEwCUMJCQlNIEkKKwlBRERTVUIJCXcxID0gdTEsIHYxCQlDCQkJTSBJCisJYW5kCQlyOCA9IDEsIHcwCQlDCQkJTSBJCisJOzsKKwljbXAuUFJFRAlwOSwgcDAgPSB3MSwgdTEJCUMJCQlNIEkKKwk7OworCUFERFNVQgkJdzIgPSB1MiwgdjIJCUMJCQlNIEkKKyAgIChwOCkJY21wLmVxLm9yCXA5LCBwMCA9IExJTSwgdzEJQwkJCU0gSQorICAgKHA4KQlhZGQJCXcxID0gSU5DUiwgdzEJCUMJCQlNIEkKKwk7OworCWNtcC5QUkVECXA2LCBwMCA9IHcyLCB1MgkJQwkJCU0gSQorCXNocnAJCXgwID0gdzEsIHcwLCAxCQlDCQkJSTAKKwk7OworICAgKHA5KQljbXAuZXEub3IJcDYsIHAwID0gTElNLCB3MglDCQkJTSBJCisgICAocDkpCWFkZAkJdzIgPSBJTkNSLCB3MgkJQwkJCU0gSQorCWJyCQkuTGNqMwkJCUMJCQlCCisKKy5ncnQzOglsZDgJCXYzID0gW3ZwXSwgOAkJQwkJCU0wMQorCWxkOAkJdTMgPSBbdXBdLCA4CQlDCQkJTTAxCisJOzsKKwlsZDgJCXYwID0gW3ZwXSwgOAkJQwkJCU0wMQorCW1vdi5pCQlhci5sYyA9IG4JCUMJCQlJMAorCWNtcC5QUkVECXA4LCBwMCA9IHcwLCByMTAJQwkJCU0gSQorCWxkOAkJdTAgPSBbdXBdLCA4CQlDCQkJTTAxCisJQUREU1VCCQl3MSA9IHUxLCB2MQkJQwkJCU0gSQorCWFuZAkJcjggPSAxLCB3MAkJQwkJCU0gSQorCTs7CisJbGQ4CQl2MSA9IFt2cF0sIDgJCUMJCQlNMDEKKwljbXAuUFJFRAlwOSwgcDAgPSB3MSwgdTEJCUMJCQlNIEkKKwlsZDgJCXUxID0gW3VwXSwgOAkJQwkJCU0wMQorCTs7CisJQUREU1VCCQl3MiA9IHUyLCB2MgkJQwkJCU0gSQorCWxkOAkJdjIgPSBbdnBdLCA4CQlDCQkJTTAxCisgICAocDgpCWNtcC5lcS5vcglwOSwgcDAgPSBMSU0sIHcxCUMJCQlNIEkKKyAgIChwOCkJYWRkCQl3MSA9IElOQ1IsIHcxCQlDCQkJTSBJCisJOzsKKwljbXAuUFJFRAlwNiwgcDAgPSB3MiwgdTIJCUMJCQlNIEkKKwlzaHJwCQl4MCA9IHcxLCB3MCwgMQkJQwkJCUkwCisJbGQ4CQl1MiA9IFt1cF0sIDgJCUMJCQlNMDEKKwlBRERTVUIJCXczID0gdTMsIHYzCQlDCQkJTSBJCisJYnIuY2xvb3AuZHB0awkuZ3J0NwkJCUMJCQlCCisJOzsKKworCWNtcC5QUkVECXA3LCBwMCA9IHczLCB1MwkJQwkJCU0gSQorICAgKHA5KQljbXAuZXEub3IJcDYsIHAwID0gTElNLCB3MglDCQkJTSBJCisgICAocDkpCWFkZAkJdzIgPSBJTkNSLCB3MgkJQwkJCU0gSQorCWJyCQkuTGNqNwkJCUMJCQlCCisKKy5ncnQ3OglsZDgJCXYzID0gW3ZwXSwgOAkJQwkJCU0wMQorCWNtcC5QUkVECXA3LCBwMCA9IHczLCB1MwkJQwkJCU0gSQorCWxkOAkJdTMgPSBbdXBdLCA4CQlDCQkJTTAxCisgICAocDkpCWNtcC5lcS5vcglwNiwgcDAgPSBMSU0sIHcyCUMJCQlNIEkKKyAgIChwOSkJYWRkCQl3MiA9IElOQ1IsIHcyCQlDCQkJTSBJCisJYnIJCS5MTDExCQkJQwkJCUIKKworCitDICoqKiBNQUlOIExPT1AgU1RBUlQgKioqCisJQUxJR04oMzIpCisuTG9vcDoJc3Q4CQlbcnBdID0geDMsIDgJCUMJCQlNMjMKKwlsZDgJCXYzID0gW3ZwXSwgOAkJQwkJCU0wMQorCWNtcC5QUkVECXA3LCBwMCA9IHczLCB1MwkJQwkJCU0gSQorCWxkOAkJdTMgPSBbdXBdLCA4CQlDCQkJTTAxCisgICAocDkpCWNtcC5lcS5vcglwNiwgcDAgPSBMSU0sIHcyCUMJCQlNIEkKKyAgIChwOSkJYWRkCQl3MiA9IElOQ1IsIHcyCQlDCQkJTSBJCisJOzsKKy5MTDExOglzdDgJCVtycF0gPSB4MCwgOAkJQwkJCU0yMworCXNocnAJCXgxID0gdzIsIHcxLCAxCQlDCQkJSTAKKwlBRERTVUIJCXcwID0gdTAsIHYwCQlDCQkJTSBJCisJbGQ4CQl2MCA9IFt2cF0sIDgJCUMJCQlNMDEKKyAgIChwNikJY21wLmVxLm9yCXA3LCBwMCA9IExJTSwgdzMJQwkJCU0gSQorICAgKHA2KQlhZGQJCXczID0gSU5DUiwgdzMJCUMJCQlNIEkKKwk7OworLkxMMTA6CWNtcC5QUkVECXA4LCBwMCA9IHcwLCB1MAkJQwkJCU0gSQorCXNocnAJCXgyID0gdzMsIHcyLCAxCQlDCQkJSTAKKwlub3AuYgkJMAorCWxkOAkJdTAgPSBbdXBdLCA4CQlDCQkJTTAxCisJQUREU1VCCQl3MSA9IHUxLCB2MQkJQwkJCU0gSQorCW5vcC5iCQkwCisJOzsKKwlzdDgJCVtycF0gPSB4MSwgOAkJQwkJCU0yMworCWxkOAkJdjEgPSBbdnBdLCA4CQlDCQkJTTAxCisJY21wLlBSRUQJcDksIHAwID0gdzEsIHUxCQlDCQkJTSBJCisJbGQ4CQl1MSA9IFt1cF0sIDgJCUMJCQlNMDEKKyAgIChwNykJY21wLmVxLm9yCXA4LCBwMCA9IExJTSwgdzAJQwkJCU0gSQorICAgKHA3KQlhZGQJCXcwID0gSU5DUiwgdzAJCUMJCQlNIEkKKwk7OworLkxMMDE6CXN0OAkJW3JwXSA9IHgyLCA4CQlDCQkJTTIzCisJc2hycAkJeDMgPSB3MCwgdzMsIDEJCUMJCQlJMAorCUFERFNVQgkJdzIgPSB1MiwgdjIJCUMJCQlNIEkKKwlsZDgJCXYyID0gW3ZwXSwgOAkJQwkJCU0wMQorICAgKHA4KQljbXAuZXEub3IJcDksIHAwID0gTElNLCB3MQlDCQkJTSBJCisgICAocDgpCWFkZAkJdzEgPSBJTkNSLCB3MQkJQwkJCU0gSQorCTs7CisuTEwwMDoJY21wLlBSRUQJcDYsIHAwID0gdzIsIHUyCQlDCQkJTSBJCisJc2hycAkJeDAgPSB3MSwgdzAsIDEJCUMJCQlJMAorCW5vcC5iCQkwCisJbGQ4CQl1MiA9IFt1cF0sIDgJCUMJCQlNMDEKKwlBRERTVUIJCXczID0gdTMsIHYzCQlDCQkJTSBJCisJYnIuY2xvb3AuZHB0awkuTG9vcAkJCUMJCQlCCisJOzsKK0MgKioqIE1BSU4gTE9PUCBFTkQgKioqCisKKy5Mc2tpcDoJc3Q4CQlbcnBdID0geDMsIDgJCUMJCQlNMjMKKwljbXAuUFJFRAlwNywgcDAgPSB3MywgdTMJCUMJCQlNIEkKKyAgIChwOSkJY21wLmVxLm9yCXA2LCBwMCA9IExJTSwgdzIJQwkJCU0gSQorICAgKHA5KQlhZGQJCXcyID0gSU5DUiwgdzIJCUMJCQlNIEkKKwk7OworLkxjajc6CXN0OAkJW3JwXSA9IHgwLCA4CQlDCQkJTTIzCisJc2hycAkJeDEgPSB3MiwgdzEsIDEJCUMJCQlJMAorCUFERFNVQgkJdzAgPSB1MCwgdjAJCUMJCQlNIEkKKyAgIChwNikJY21wLmVxLm9yCXA3LCBwMCA9IExJTSwgdzMJQwkJCU0gSQorICAgKHA2KQlhZGQJCXczID0gSU5DUiwgdzMJCUMJCQlNIEkKKwk7OworLkxjajY6CWNtcC5QUkVECXA4LCBwMCA9IHcwLCB1MAkJQwkJCU0gSQorCXNocnAJCXgyID0gdzMsIHcyLCAxCQlDCQkJSTAKKwlBRERTVUIJCXcxID0gdTEsIHYxCQlDCQkJTSBJCisJOzsKKwlzdDgJCVtycF0gPSB4MSwgOAkJQwkJCU0yMworCWNtcC5QUkVECXA5LCBwMCA9IHcxLCB1MQkJQwkJCU0gSQorICAgKHA3KQljbXAuZXEub3IJcDgsIHAwID0gTElNLCB3MAlDCQkJTSBJCisgICAocDcpCWFkZAkJdzAgPSBJTkNSLCB3MAkJQwkJCU0gSQorCTs7CisuTGNqNToJc3Q4CQlbcnBdID0geDIsIDgJCUMJCQlNMjMKKwlzaHJwCQl4MyA9IHcwLCB3MywgMQkJQwkJCUkwCisJQUREU1VCCQl3MiA9IHUyLCB2MgkJQwkJCU0gSQorICAgKHA4KQljbXAuZXEub3IJcDksIHAwID0gTElNLCB3MQlDCQkJTSBJCisgICAocDgpCWFkZAkJdzEgPSBJTkNSLCB3MQkJQwkJCU0gSQorCTs7CisuTGNqNDoJY21wLlBSRUQJcDYsIHAwID0gdzIsIHUyCQlDCQkJTSBJCisJc2hycAkJeDAgPSB3MSwgdzAsIDEJCUMJCQlJMAorCTs7CisJc3Q4CQlbcnBdID0geDMsIDgJCUMJCQlNMjMKKyAgIChwOSkJY21wLmVxLm9yCXA2LCBwMCA9IExJTSwgdzIJQwkJCU0gSQorICAgKHA5KQlhZGQJCXcyID0gSU5DUiwgdzIJCUMJCQlNIEkKKwk7OworLkxjajM6CXN0OAkJW3JwXSA9IHgwLCA4CQlDCQkJTTIzCisJc2hycAkJeDEgPSB3MiwgdzEsIDEJCUMJCQlJMAorCXNoci51CQl4MiA9IHcyLCAxCQlDCQkJSTAKKwk7OworLkxjajI6CXN0OAkJW3JwXSA9IHgxLCA4CQlDCQkJTTIzCisgICAocDYpCWRlcAkJeDIgPSAtMSwgeDIsIDYzLCAxCUMJCQlJMAorCTs7CisuTGNqMToJc3Q4CQlbcnBdID0geDIJCUMJCQlNMjMKKwltb3YuaQkJYXIubGMgPSByMgkJQwkJCUkwCisJYnIucmV0LnNwdGsubWFueSBiMAkJCUMJCQlCCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2lhNjQvc2VjX3RhYnNlbGVjdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2lhNjQvc2VjX3RhYnNlbGVjdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIxMWNkZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vaWE2NC9zZWNfdGFic2VsZWN0LmFzbQpAQCAtMCwwICsxLDE0OCBAQAorZG5sICBJQS02NCBtcG5fc2VjX3RhYnNlbGVjdC4KKworZG5sICBDb3B5cmlnaHQgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgICBjeWNsZXMvbGltYgorQyBJdGFuaXVtOiAgICAgICA/CitDIEl0YW5pdW0gMjogICAgIDIuNQorCitDIE5PVEVTCitDICAqIFVzaW5nIHNvZnR3YXJlIHBpcGVsaW5pbmcgY291bGQgdHJpdmlhbGx5IHlpZWxkIDIgYy9sIHdpdGhvdXQgdW5yb2xsaW5nLAorQyAgICBvciAxK2Vwc2lsb24gd2l0aCB1bnJvbGxpbmcuICAoVGhpcyBjb2RlIHdhcyBtb2RlbGxlZCBhZnRlciB0aGUgcG93ZXJwYzY0CitDICAgIGNvZGUsIGZvciBzaW1wbGljaXR5LikKKworQyBtcG5fc2VjX3RhYnNlbGVjdCAobXBfbGltYl90ICpycCwgbXBfbGltYl90ICp0cCwgbXBfc2l6ZV90IG4sIG1wX3NpemVfdCBuZW50cywgbXBfc2l6ZV90IHdoaWNoKQorZGVmaW5lKGBycCcsICAgICBgcjMyJykKK2RlZmluZShgdHAnLCAgICAgYHIzMycpCitkZWZpbmUoYG4nLCAgICAgIGByMzQnKQorZGVmaW5lKGBuZW50cycsICBgcjM1JykKK2RlZmluZShgd2hpY2gnLCAgYHIzNicpCisKK2RlZmluZShgbWFzaycsICAgYHI4JykKKworZGVmaW5lKGBycDEnLCAgICAgYHIzMicpCitkZWZpbmUoYHRwMScsICAgICBgcjMzJykKK2RlZmluZShgcnAyJywgICAgIGByMTQnKQorZGVmaW5lKGB0cDInLCAgICAgYHIxNScpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fc2VjX3RhYnNlbGVjdCkKKwkucHJvbG9ndWUKKwkuc2F2ZQlhci5sYywgcjIKKwkuYm9keQoraWZkZWYoYEhBVkVfQUJJXzMyJyxgCisgey5tbWk7CWFkZHA0CXJwID0gMCwgcnAJCUMJCQlNIEkKKwlhZGRwNAl0cCA9IDAsIHRwCQlDCQkJTSBJCisJenh0NAluID0gbgkJCUMJCQlJCit9ey5taWk7CW5vcAkwCisJenh0NAluZW50cyA9IG5lbnRzCQlDCQkJSQorCXp4dDQJd2hpY2ggPSB3aGljaAkJQwkJCUkKKwk7OworfScpCisgey5tbWk7CWFkZAlycDIgPSA4LCBycDEKKwlhZGQJdHAyID0gOCwgdHAxCisJYWRkCXI2ID0gLTIsIG4KKwk7OworfXsubW1pOwljbXAuZXEJcDEwLCBwMCA9IDEsIG4KKwlhbmQJcjkgPSAxLCBuCQlDIHNldCBjcjAgZm9yIHVzZSBpbiBpbm5lciBsb29wCisJc2hyLnUJcjYgPSByNiwgMQkJQyBpbm5lciBsb29wIGNvdW50CisJOzsKK317Lm1taTsJY21wLmVxCXA4LCBwMCA9IDAsIHI5CisJc3ViCXdoaWNoID0gbmVudHMsIHdoaWNoCisJc2hsCW4gPSBuLCAzCisJOzsKK30KK0wob3V0ZXIpOgorIHsubW1pOwljbXAuZXEJcDYsIHA3ID0gd2hpY2gsIG5lbnRzCUMgYXJlIHdlIGF0IHRoZSBzZWxlY3RlZCB0YWJsZSBlbnRyeT8KKwlub3AJMAorCW1vdglhci5sYyA9IHI2CQlDCQkJSTAKKwk7OworfXsubW1iOworICAocDYpCW1vdgltYXNrID0gLTEKKyAgKHA3KQltb3YJbWFzayA9IDAKKyAgKHA4KQlici5kcHRrCUwodG9wKQkJCUMgYnJhbmNoIHRvIGxvb3AgZW50cnkgaWYgbiBldmVuCisJOzsKK317Lm1taTsJbGQ4CXIxNiA9IFt0cDFdLCA4CisJYWRkCXRwMiA9IDgsIHRwMgorCW5vcAkwCisJOzsKK317Lm1taTsJbGQ4CXIxOCA9IFtycDFdCisJYW5kCXIxNiA9IHIxNiwgbWFzaworCW5vcAkwCisJOzsKK317Lm1taTsJYW5kY20JcjE4ID0gcjE4LCBtYXNrCisJOzsKKwlvcglyMTYgPSByMTYsIHIxOAorCW5vcAkwCisJOzsKK317Lm1tYjsJc3Q4CVtycDFdID0gcjE2LCA4CisJYWRkCXJwMiA9IDgsIHJwMgorICAocDEwKQlici5kcG50CUwoZW5kKQorfQorCUFMSUdOKDMyKQorTCh0b3ApOgorIHsubW1pOwlsZDgJcjE2ID0gW3RwMV0sIDE2CisJbGQ4CXIxNyA9IFt0cDJdLCAxNgorCW5vcAkwCisJOzsKK317Lm1taTsJbGQ4CXIxOCA9IFtycDFdCisJYW5kCXIxNiA9IHIxNiwgbWFzaworCW5vcAkwCit9ey5tbWk7CWxkOAlyMTkgPSBbcnAyXQorCWFuZAlyMTcgPSByMTcsIG1hc2sKKwlub3AJMAorCTs7Cit9ey5tbWk7CWFuZGNtCXIxOCA9IHIxOCwgbWFzaworCWFuZGNtCXIxOSA9IHIxOSwgbWFzaworCW5vcAkwCisJOzsKK317Lm1taTsJb3IJcjE2ID0gcjE2LCByMTgKKwlvcglyMTcgPSByMTcsIHIxOQorCW5vcAkwCisJOzsKK317Lm1tYjsJc3Q4CVtycDFdID0gcjE2LCAxNgorCXN0OAlbcnAyXSA9IHIxNywgMTYKKwlici5jbG9vcC5kcHRrCUwodG9wKQorCTs7Cit9CitMKGVuZCk6Cisgey5tbWk7CXN1YglycDEgPSBycDEsIG4JCUMgbW92ZSBycCBiYWNrIHRvIGJlZ2lubmluZworCXN1YglycDIgPSBycDIsIG4JCUMgbW92ZSBycCBiYWNrIHRvIGJlZ2lubmluZworCWNtcC5uZQlwOSwgcDAgPSAxLCBuZW50cworfXsubW1iOwlhZGQJbmVudHMgPSAtMSwgbmVudHMKKwlub3AJMAorICAocDkpCWJyLmRwdGsJTChvdXRlcikKKwk7OworfXsubWliOwlub3AJMAorCW5vcAkwCisJYnIucmV0LnNwdGsubWFueSBiMAorfQorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9pYTY0L3Nxcl9kaWFnX2FkZGxzaDEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9pYTY0L3Nxcl9kaWFnX2FkZGxzaDEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyN2Y0ODkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL2lhNjQvc3FyX2RpYWdfYWRkbHNoMS5hc20KQEAgLTAsMCArMSwxNTYgQEAKK2RubCAgSUEtNjQgbXBuX3Nxcl9kaWFnX2FkZGxzaDEKKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgSXRhbml1bTogICAgICA/CitDIEl0YW5pdW0gMjogICAgMglVbnJvbGxpbmcgY291bGQgYnJpbmcgaXQgdG8gMS41ICsgZXBzaWxvbgorCitDIEV4YWN0IHBlcmZvcm1hbmNlIHRhYmxlLiAgVGhlIDJuZCBsaW5lIGlzIHRoaXMgY29kZSwgdGhlIDNyZCBsaW5lIGlzIGN0b3AtCitDIGxlc3MgY29kZS4gIEluIGFuIGFzc2VtYmx5IHNxcl9iYXNlY2FzZSwgdGhlIGN0b3AtZnVsbCBudW1iZXJzIHdpbGwgYmVjb21lIGEKK0MgZmV3IGN5Y2xlcyBiZXR0ZXIgc2luY2Ugd2UgY2FuIG1pdGlnYXRlIHRoZSBtYW55IEkwIGluc3RydWN0aW9ucy4KK0MKK0MgMSAgIDIgICAzICAgNCAgIDUgICA2ICAgNyAgIDggICA5ICAxMCAgMTEgIDEyICAxMyAgMTQgIDE1ICAxNiAgMTcgIDE4ICAxOSAgMjAKK0MgLSAgMjAgIDIyICAyNCAgMjYgIDI4ICAzMCAgMzIgIDM0ICAzNiAgMzggIDQwICA0MiAgNDQgIDQ2ICA0OCAgNTAgIDUyICA1NCAgNTYgTmVlZHMgdXBkYXRpbmcKK0MgLSAgMTMgIDE2ICAxNyAgMTggIDIwICAyMSAgMjMgIDI1ICAyNiAgMzAgIDMxICAzMSAgMzMgIDM0ICAzNiAgMzggIDM5ICA0MiAgNDMKKworQyBXZSBzaG91bGQga2VlcCBpbiBtaW5kIHRoYXQgdGhpcyBjb2RlIHRha2VzIGxpbmVhciB0aW1lIGluIGEgTyhuXjIpIGNvbnRleHQKK0MgYW5kIHRoYXQgaXQgd2lsbCBvbmx5IGJlIHVzZWQgdW5kZXIgU1FSX1RPT00yX1RIUkVTSE9MRCwgd2hpY2ggbWlnaHQgYmVjb21lCitDIGFyb3VuZCA2MC4gIEtlZXBpbmcgb3ZlcmhlYWQgZG93biBmb3Igc21hbGxpc2ggb3BlcmFuZHMgKDwgMTApIGlzIG1vcmUKK0MgaW1wb3J0YW50IHRoYW4gb3B0aW1hbCBjeWNsZSBjb3VudHMuCisKK0MgVE9ETworQyAgKiBNYWtlIHN1cmUgd2UgZG9uJ3QgZGVwZW5kIG9uIHVuaW5pdGlhbGlzZWQgci1yZWdpc3RlcnMsIGYtcmVnaXN0ZXJzLCBvcgorQyAgKiBwLXJlZ2lzdGVycy4KK0MgICogT3B0aW1pc2UgYnkgZG9pbmcgZmlyc3QgdHdvIGxvb3AgaXRlcmF0aW9ucyBpbiBmdW5jdGlvbiBoZWFkZXIuCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycF9wYXJhbScsIGByMzInKSAgZGVmaW5lKGBycCcsIGByMTQnKQkJQyBzaXplOiAybgorZGVmaW5lKGB0cF9wYXJhbScsIGByMzMnKSAgZGVmaW5lKGB0cCcsIGByMTUnKQkJQyBzaXplOiAybiAtIDIKK2RlZmluZShgdXBfcGFyYW0nLCBgcjM0JykgIGRlZmluZShgdXAnLCBgcjMxJykJCUMgc2l6ZTogbgorZGVmaW5lKGBuJywgIGByMzUnKQorCitpZmRlZihgSEFWRV9BQklfMzInLGAKKwlkZWZpbmUoYEFCSTY0JywgYCcpCisJZGVmaW5lKGBBQkkzMicsIGAkMScpCisnLGAKKwlkZWZpbmUoYEFCSTY0JywgYCQxJykKKwlkZWZpbmUoYEFCSTMyJywgYCcpCisnKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX3Nxcl9kaWFnX2FkZGxzaDEpCisKKwkucHJvbG9ndWUKKwkuc2F2ZQlhci5wZnMsIHIyCisJLnNhdmUJYXIubGMsIHIzCisJLmJvZHkKKworIHsubWlpOwkJYWxsb2MJcjIgPSBhci5wZnMsIDQsMjQsMCwyNAlDCQkJTQorCQltb3YJcjMgPSBhci5sYwkJQwkJCUkwCisJQUJJNjQoYAlub3AJNDcxMQkJJykKKwlBQkkzMihgCXp4dDQJbiA9IG4JCScpCit9ey5tbWk7CUFCSTY0KGAJbW92CXRwID0gdHBfcGFyYW0JJykJQwkJCU0gSQorCUFCSTMyKGAJYWRkcDQJdHAgPSAwLCB0cF9wYXJhbScpCUMJCQlNIEkKKwlBQkk2NChgCW1vdgl1cCA9IHVwX3BhcmFtCScpCUMJCQlNIEkKKwlBQkkzMihgCWFkZHA0CXVwID0gMCwgdXBfcGFyYW0nKQlDCQkJTSBJCisJQUJJNjQoYAltb3YJcnAgPSBycF9wYXJhbQknKQlDCQkJTSBJCisJQUJJMzIoYAlhZGRwNAlycCA9IDAsIHJwX3BhcmFtJykJQwkJCU0gSQorCTs7Cit9ey5tbWk7CQlsZDgJcjM2ID0gW3RwXSwgOAkJQwkJCU0KKwkJYWRkCXIyMCA9IC0yLCBuCQlDCQkJTSBJCisJCW1vdglyOSA9IGFyLmVjCQlDCQkJSTAKKwk7OworfXsubW1pOwkJbGQ4CXIzMiA9IFt0cF0sIDgJCUMJCQlNCisJCW1vdglyMTYgPSAwCQkJQwkJCU0gSQorCQltb3YJYXIuZWMgPSA3CQlDCQkJSTAKKwk7OworfXsubW1pOwkJbm9wCTQ3MTEKKwkJbW92CXI0NCA9IDAJCQlDCQkJTSBJCisJCW1vdglhci5sYyA9IHIyMAkJQwkJCUkwCisJOzsKK317Lm1paTsJCW1vdglyMzMgPSAwCisJCW1vdglyMTAgPSBwcgkJQwkJCUkwCisJCW1vdglwci5yb3QgPSAweDMwMDAwCUMJCQlJMAorCTs7Cit9CQlici5jZXhpdC5zcG50LmZldy5jbHIJTChlbmQpCisKK2RubCAqKiogTUFJTiBMT09QIFNUQVJUICoqKgorCUFMSUdOKDMyKQorTCh0b3ApOgorIHsubWZpOwkocDE4KQlsZGY4CWYzMyA9IFt1cF0sIDgJCUMJCQlNCisJKHAyMCkJeG1hLmwJZjM2ID0gZjM1LCBmMzUsIGY0MglDCQkJRgorCShwNDEpCWNtcGVxdWMJcDUwLCBwMCA9IC0xLCByNDQJQwkJCU0gSQorfXsubWZpOwkJc2V0ZnNpZwlmNDAgPSByMTYJCUMJCQlNMjMKKwkocDIwKQl4bWEuaHUJZjM4ID0gZjM1LCBmMzUsIGY0MglDCQkJRgorCShwMjMpCWFkZAlyNTAgPSByNDEsIHI0OQkJQwkJCU0gSQorCTs7Cit9ey5tbWk7CShwMTYpCWxkOAlyMzYgPSBbdHBdLCA4CQlDCQkJTQorCShwMjMpCWNtcGx0dQlwNDAsIHAwID0gcjUwLCByNDEJQyBjeW91dCBoaQkJTSBJCisJKHAxOSkJc2hycAlyNDUgPSByMzgsIHIzNSwgNjMJQyBub24tY3JpdGljYWwJCUkwCit9ey5tbWk7CShwMjEpCWdldGZzaWcJcjM5ID0gZjM5CQlDIGhpCQkJTTIKKwkocDI0KQlzdDgJW3JwXSA9IHI1MSwgOAkJQyBoaQkJCU0yMworCShwNDEpCWFkZAlyNDQgPSAxLCByNDQJCUMJCQlNIEkKKwk7OworfXsubW1pOwkocDE2KQlsZDgJcjMyID0gW3RwXSwgOAkJQwkJCU0KKwkocDUwKQljbXBlcW9yCXA0MCwgcDAgPSAtMSwgcjUwCUMgY3lvdXQgaGkJCU0gSQorCShwMTcpCXNocnAJcjE2ID0gcjMzLCByMzcsIDYzCUMgY3JpdGljYWwJCUkwCit9ey5tbWk7CShwMjEpCWdldGZzaWcJcjQyID0gZjM3CQlDIGxvCQkJTTIKKwkocDIzKQlzdDgJW3JwXSA9IHI0NCwgOAkJQyBsbwkJCU0yMworCShwNTApCWFkZAlyNTAgPSAxLCByNTAJCUMJCQlNIEkKKwk7OworfQkJYnIuY3RvcC5zcHRrLmZldy5jbHIgTCh0b3ApCUMJCQlCCitkbmwgKioqIE1BSU4gTE9PUCBFTkQgKioqCisJOzsKK0woZW5kKToKKyB7Lm1taTsJCW5vcAk0NzExCisJKHA0MSkJYWRkCXI0NCA9IDEsIHI0NAkJQwkJCU0gSQorCQlzaHIudQlyNDggPSByMzksIDYzCQlDCQkJSTAKKwk7OworfXsubW1pOwkJc3Q4CVtycF0gPSByNTEsIDgJCUMJCQlNMjMKKwkocDQxKQljbXBlcXVjCXA2LCBwMCA9IDAsIHI0NAkJQwkJCU0gSQorCQlhZGQJcjUwID0gcjQxLCByNDgJCUMJCQlNIEkKKwk7OworfXsubW1pOwkJc3Q4CVtycF0gPSByNDQsIDgJCUMJCQlNMjMKKwkocDYpCWFkZAlyNTAgPSAxLCByNTAJCUMJCQlNIEkKKwkJbW92CWFyLmxjID0gcjMJCUMJCQlJMAorCTs7Cit9ey5taWk7CQlzdDgJW3JwXSA9IHI1MAkJQwkJCU0yMworCQltb3YJYXIuZWMgPSByOQkJQwkJCUkwCisJCW1vdglwciA9IHIxMAkJQwkJCUkwCisJOzsKK317Lm1pYjsJCW5vcAk0NzExCisJCW1vdglhci5wZnMgPSByMgkJQwkJCUkwCisJCWJyLnJldC5zcHRrLm1hbnkgYjAJCUMJCQlCCit9CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL2lhNjQvc3VibXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9pYTY0L3N1Ym11bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjJhNTUyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9pYTY0L3N1Ym11bF8xLmFzbQpAQCAtMCwwICsxLDY0NyBAQAorZG5sICBJQS02NCBtcG5fc3VibXVsXzEgLS0gTXVsdGlwbHkgYSBsaW1iIHZlY3RvciB3aXRoIGEgbGltYiBhbmQgc3VidHJhY3QgdGhlCitkbmwgIHJlc3VsdCBmcm9tIGEgc2Vjb25kIGxpbWIgdmVjdG9yLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3Jiam9ybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAwMC0yMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICBjeWNsZXMvbGltYgorQyBJdGFuaXVtOiAgICA0LjAKK0MgSXRhbml1bSAyOiAgMi4yNSAoYWxpZ25tZW50IGRlcGVuZGVudCwgc29tZXRpbWVzIGl0IHNlZW1zIHRvIG5lZWQgMyBjL2wpCisKK0MgVE9ETworQyAgKiBPcHRpbWl6ZSBmZWVkLWluIGFuZCB3aW5kLWRvd24gY29kZSwgYm90aCBmb3Igc3BlZWQgYW5kIGNvZGUgc2l6ZS4KK0MgICogSGFuZGxlIGxvdyBsaW1iIGlucHV0IGFuZCByZXN1bHRzIHNwZWNpYWxseSwgdXNpbmcgYSBjb21tb24gc3RmOCBpbiB0aGUKK0MgICAgZXBpbG9ndWUuCitDICAqIERlbGF5IHI4LCByMTAgaW5pdGlhbGl6YXRpb24sIHB1dCBjbXAtcDYgaW4gMXN0IGJ1bmRsZSBhbmQgYnIgLkxkb25lIGluCitDICAgIDJuZCBidW5kbGUuICBUaGlzIHdpbGwgYWxsb3cgdGhlIGJiYiBidW5kbGUgdG8gYmUgb25lIGN5Y2xlIGVhcmxpZXIgYW5kCitDICAgIHNhdmUgYSBjeWNsZS4KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywgYHIzMicpCitkZWZpbmUoYHVwJywgYHIzMycpCitkZWZpbmUoYG4nLCAgYHIzNCcpCitkZWZpbmUoYHZsJywgYHIzNScpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fc3VibXVsXzEpCisJLnByb2xvZ3VlCisJLnNhdmUJYXIubGMsIHIyCisJLmJvZHkKKworaWZkZWYoYEhBVkVfQUJJXzMyJywKK2AJYWRkcDQJCXJwID0gMCwgcnAJCUMgTSBJCisJYWRkcDQJCXVwID0gMCwgdXAJCUMgTSBJCisJenh0NAkJbiA9IG4JCQlDIEkKKwk7OworJykKK3subW1pCisJbW92CQlyMTAgPSBycAkJQyBNIEkKKwltb3YJCXI5ID0gdXAJCQlDIE0gSQorCXN1YgkJdmwgPSByMCwgdmwJCUMgTSBJCW5lZ2F0ZSB2bAorfQorey5tbWkKKwlsZGY4CQlmOCA9IFtycF0sIDgJCUMgTQorCWxkZjgJCWY3ID0gW3VwXSwgOAkJQyBNCisJYWRkCQlyMTkgPSAtMSwgbgkJQyBNIEkJbiAtIDEKKwk7OworfQorey5tbWkKKwljbXAuZXEJCXA2LCBwMCA9IDAsIHZsCQlDIE0gSQorCW1vdgkJcjggPSAwCQkJQyBNIEkJemVybyBjeWxpbWIKKwltb3YJCXIyID0gYXIubGMJCUMgSTAKK30KK3subW1pCisJc2V0Zi5zaWcJZjYgPSB2bAkJCUMgTTIgTTMKKwlhbmQJCXIxNCA9IDMsIG4JCUMgTSBJCisJc2hyLnUJCXIxOSA9IHIxOSwgMgkJQyBJMAorCTs7Cit9Cit7Lm1tYgorCW5vcAkJMAorCWNtcC5lcQkJcDEwLCBwMCA9IDAsIHIxNAlDIE0gSQorICAgKHA2KQlici5zcG50CQkuTGRvbmUJCQlDIEIJdmwgPT0gMAorfQorey5tbWkKKwljbXAuZXEJCXAxMSwgcDAgPSAyLCByMTQJQyBNIEkKKwljbXAuZXEJCXAxMiwgcDAgPSAzLCByMTQJQyBNIEkKKwltb3YJCWFyLmxjID0gcjE5CQlDIEkwCit9Cit7LmJiYgorICAocDEwKQlici5kcHRrCQkuTGIwMAkJCUMgQgorICAocDExKQlici5kcHRrCQkuTGIxMAkJCUMgQgorICAocDEyKQlici5kcHRrCQkuTGIxMQkJCUMgQgorCTs7Cit9CisKKy5MYjAxOglici5jbG9vcC5kcHRrCS5ncnQxCisKKwl4bWEubAkJZjM5ID0gZjcsIGY2LCBmOAorCXhtYS5odQkJZjQzID0gZjcsIGY2LCBmOAorCTs7CisJZ2V0Zi5zaWcJcjI3ID0gZjM5CQkJQyBsbworCWdldGYuc2lnCXIzMSA9IGY0MwkJCUMgaGkKKwlsZDgJCXIyMCA9IFtyOV0sIDgKKwlicgkJLkxjajEKKworLmdydDE6CWxkZjgJCWY0NCA9IFtycF0sIDgKKwlsZGY4CQlmMzIgPSBbdXBdLCA4CisJOzsKKwlsZGY4CQlmNDUgPSBbcnBdLCA4CisJbGRmOAkJZjMzID0gW3VwXSwgOAorCTs7CisJbGRmOAkJZjQ2ID0gW3JwXSwgOAorCXhtYS5sCQlmMzkgPSBmNywgZjYsIGY4CisJbGRmOAkJZjM0ID0gW3VwXSwgOAorCXhtYS5odQkJZjQzID0gZjcsIGY2LCBmOAorCTs7CisJbGRmOAkJZjQ3ID0gW3JwXSwgOAorCXhtYS5sCQlmMzYgPSBmMzIsIGY2LCBmNDQKKwlsZGY4CQlmMzUgPSBbdXBdLCA4CisJeG1hLmh1CQlmNDAgPSBmMzIsIGY2LCBmNDQKKwlici5jbG9vcC5kcHRrCS5ncnQ1CisJOzsKKworCWdldGYuc2lnCXIyNyA9IGYzOQkJCUMgbG8KKwl4bWEubAkJZjM3ID0gZjMzLCBmNiwgZjQ1CisJbGQ4CQlyMjAgPSBbcjldLCA4CisJeG1hLmh1CQlmNDEgPSBmMzMsIGY2LCBmNDUKKwk7OworCWdldGYuc2lnCXIzMSA9IGY0MwkJCUMgaGkKKwlnZXRmLnNpZwlyMjQgPSBmMzYJCQlDIGxvCisJeG1hLmwJCWYzOCA9IGYzNCwgZjYsIGY0NgorCWxkOAkJcjIxID0gW3I5XSwgOAorCXhtYS5odQkJZjQyID0gZjM0LCBmNiwgZjQ2CisJOzsKKwlnZXRmLnNpZwlyMjggPSBmNDAJCQlDIGhpCisJZ2V0Zi5zaWcJcjI1ID0gZjM3CQkJQyBsbworCXhtYS5sCQlmMzkgPSBmMzUsIGY2LCBmNDcKKwlsZDgJCXIyMiA9IFtyOV0sIDgKKwl4bWEuaHUJCWY0MyA9IGYzNSwgZjYsIGY0NworCTs7CisJZ2V0Zi5zaWcJcjI5ID0gZjQxCQkJQyBoaQorCWdldGYuc2lnCXIyNiA9IGYzOAkJCUMgbG8KKwlsZDgJCXIyMyA9IFtyOV0sIDgKKwlicgkJLkxjajUKKworLmdydDU6CWxkZjgJCWY0NCA9IFtycF0sIDgKKwlsZGY4CQlmMzIgPSBbdXBdLCA4CisJOzsKKwlnZXRmLnNpZwlyMjcgPSBmMzkJCQlDIGxvCisJeG1hLmwJCWYzNyA9IGYzMywgZjYsIGY0NQorCWxkOAkJcjIwID0gW3I5XSwgOAorCXhtYS5odQkJZjQxID0gZjMzLCBmNiwgZjQ1CisJOzsKKwlsZGY4CQlmNDUgPSBbcnBdLCA4CisJZ2V0Zi5zaWcJcjMxID0gZjQzCQkJQyBoaQorCWxkZjgJCWYzMyA9IFt1cF0sIDgKKwk7OworCWdldGYuc2lnCXIyNCA9IGYzNgkJCUMgbG8KKwl4bWEubAkJZjM4ID0gZjM0LCBmNiwgZjQ2CisJbGQ4CQlyMjEgPSBbcjldLCA4CisJeG1hLmh1CQlmNDIgPSBmMzQsIGY2LCBmNDYKKwk7OworCWxkZjgJCWY0NiA9IFtycF0sIDgKKwlnZXRmLnNpZwlyMjggPSBmNDAJCQlDIGhpCisJbGRmOAkJZjM0ID0gW3VwXSwgOAorCTs7CisJZ2V0Zi5zaWcJcjI1ID0gZjM3CQkJQyBsbworCXhtYS5sCQlmMzkgPSBmMzUsIGY2LCBmNDcKKwlsZDgJCXIyMiA9IFtyOV0sIDgKKwl4bWEuaHUJCWY0MyA9IGYzNSwgZjYsIGY0NworCTs7CisJbGRmOAkJZjQ3ID0gW3JwXSwgOAorCWdldGYuc2lnCXIyOSA9IGY0MQkJCUMgaGkKKwlsZGY4CQlmMzUgPSBbdXBdLCA4CisJOzsKKwlnZXRmLnNpZwlyMjYgPSBmMzgJCQlDIGxvCisJeG1hLmwJCWYzNiA9IGYzMiwgZjYsIGY0NAorCWxkOAkJcjIzID0gW3I5XSwgOAorCXhtYS5odQkJZjQwID0gZjMyLCBmNiwgZjQ0CisJYnIuY2xvb3AuZHB0awkuTG9vcAorCWJyCQkuTGVuZAorCisKKy5MYjEwOglsZGY4CQlmNDcgPSBbcnBdLCA4CisJbGRmOAkJZjM1ID0gW3VwXSwgOAorCWJyLmNsb29wLmRwdGsJLmdydDIKKworCXhtYS5sCQlmMzggPSBmNywgZjYsIGY4CisJeG1hLmh1CQlmNDIgPSBmNywgZjYsIGY4CisJOzsKKwl4bWEubAkJZjM5ID0gZjM1LCBmNiwgZjQ3CisJeG1hLmh1CQlmNDMgPSBmMzUsIGY2LCBmNDcKKwk7OworCWdldGYuc2lnCXIyNiA9IGYzOAkJCUMgbG8KKwlnZXRmLnNpZwlyMzAgPSBmNDIJCQlDIGhpCisJbGQ4CQlyMjMgPSBbcjldLCA4CisJOzsKKwlnZXRmLnNpZwlyMjcgPSBmMzkJCQlDIGxvCisJZ2V0Zi5zaWcJcjMxID0gZjQzCQkJQyBoaQorCWxkOAkJcjIwID0gW3I5XSwgOAorCWJyCQkuTGNqMgorCisuZ3J0MjoJbGRmOAkJZjQ0ID0gW3JwXSwgOAorCWxkZjgJCWYzMiA9IFt1cF0sIDgKKwk7OworCWxkZjgJCWY0NSA9IFtycF0sIDgKKwlsZGY4CQlmMzMgPSBbdXBdLCA4CisJeG1hLmwJCWYzOCA9IGY3LCBmNiwgZjgKKwl4bWEuaHUJCWY0MiA9IGY3LCBmNiwgZjgKKwk7OworCWxkZjgJCWY0NiA9IFtycF0sIDgKKwlsZGY4CQlmMzQgPSBbdXBdLCA4CisJeG1hLmwJCWYzOSA9IGYzNSwgZjYsIGY0NworCXhtYS5odQkJZjQzID0gZjM1LCBmNiwgZjQ3CisJOzsKKwlsZGY4CQlmNDcgPSBbcnBdLCA4CisJbGRmOAkJZjM1ID0gW3VwXSwgOAorCTs7CisJZ2V0Zi5zaWcJcjI2ID0gZjM4CQkJQyBsbworCXhtYS5sCQlmMzYgPSBmMzIsIGY2LCBmNDQKKwlsZDgJCXIyMyA9IFtyOV0sIDgKKwl4bWEuaHUJCWY0MCA9IGYzMiwgZjYsIGY0NAorCWJyLmNsb29wLmRwdGsJLmdydDYKKworCWdldGYuc2lnCXIzMCA9IGY0MgkJCUMgaGkKKwk7OworCWdldGYuc2lnCXIyNyA9IGYzOQkJCUMgbG8KKwl4bWEubAkJZjM3ID0gZjMzLCBmNiwgZjQ1CisJbGQ4CQlyMjAgPSBbcjldLCA4CisJeG1hLmh1CQlmNDEgPSBmMzMsIGY2LCBmNDUKKwk7OworCWdldGYuc2lnCXIzMSA9IGY0MwkJCUMgaGkKKwlnZXRmLnNpZwlyMjQgPSBmMzYJCQlDIGxvCisJeG1hLmwJCWYzOCA9IGYzNCwgZjYsIGY0NgorCWxkOAkJcjIxID0gW3I5XSwgOAorCXhtYS5odQkJZjQyID0gZjM0LCBmNiwgZjQ2CisJOzsKKwlnZXRmLnNpZwlyMjggPSBmNDAJCQlDIGhpCisJZ2V0Zi5zaWcJcjI1ID0gZjM3CQkJQyBsbworCXhtYS5sCQlmMzkgPSBmMzUsIGY2LCBmNDcKKwlsZDgJCXIyMiA9IFtyOV0sIDgKKwl4bWEuaHUJCWY0MyA9IGYzNSwgZjYsIGY0NworCWJyCQkuTGNqNgorCisuZ3J0NjoJbGRmOAkJZjQ0ID0gW3JwXSwgOAorCWdldGYuc2lnCXIzMCA9IGY0MgkJCUMgaGkKKwlsZGY4CQlmMzIgPSBbdXBdLCA4CisJOzsKKwlnZXRmLnNpZwlyMjcgPSBmMzkJCQlDIGxvCisJeG1hLmwJCWYzNyA9IGYzMywgZjYsIGY0NQorCWxkOAkJcjIwID0gW3I5XSwgOAorCXhtYS5odQkJZjQxID0gZjMzLCBmNiwgZjQ1CisJOzsKKwlsZGY4CQlmNDUgPSBbcnBdLCA4CisJZ2V0Zi5zaWcJcjMxID0gZjQzCQkJQyBoaQorCWxkZjgJCWYzMyA9IFt1cF0sIDgKKwk7OworCWdldGYuc2lnCXIyNCA9IGYzNgkJCUMgbG8KKwl4bWEubAkJZjM4ID0gZjM0LCBmNiwgZjQ2CisJbGQ4CQlyMjEgPSBbcjldLCA4CisJeG1hLmh1CQlmNDIgPSBmMzQsIGY2LCBmNDYKKwk7OworCWxkZjgJCWY0NiA9IFtycF0sIDgKKwlnZXRmLnNpZwlyMjggPSBmNDAJCQlDIGhpCisJbGRmOAkJZjM0ID0gW3VwXSwgOAorCTs7CisJZ2V0Zi5zaWcJcjI1ID0gZjM3CQkJQyBsbworCXhtYS5sCQlmMzkgPSBmMzUsIGY2LCBmNDcKKwlsZDgJCXIyMiA9IFtyOV0sIDgKKwl4bWEuaHUJCWY0MyA9IGYzNSwgZjYsIGY0NworCWJyCQkuTEwxMAorCisKKy5MYjExOglsZGY4CQlmNDYgPSBbcnBdLCA4CisJbGRmOAkJZjM0ID0gW3VwXSwgOAorCTs7CisJbGRmOAkJZjQ3ID0gW3JwXSwgOAorCWxkZjgJCWYzNSA9IFt1cF0sIDgKKwlici5jbG9vcC5kcHRrCS5ncnQzCisKKwl4bWEubAkJZjM3ID0gZjcsIGY2LCBmOAorCXhtYS5odQkJZjQxID0gZjcsIGY2LCBmOAorCTs7CisJeG1hLmwJCWYzOCA9IGYzNCwgZjYsIGY0NgorCXhtYS5odQkJZjQyID0gZjM0LCBmNiwgZjQ2CisJOzsKKwlnZXRmLnNpZwlyMjUgPSBmMzcJCQlDIGxvCisJeG1hLmwJCWYzOSA9IGYzNSwgZjYsIGY0NworCXhtYS5odQkJZjQzID0gZjM1LCBmNiwgZjQ3CisJOzsKKwlnZXRmLnNpZwlyMjkgPSBmNDEJCQlDIGhpCisJbGQ4CQlyMjIgPSBbcjldLCA4CisJOzsKKwlnZXRmLnNpZwlyMjYgPSBmMzgJCQlDIGxvCisJZ2V0Zi5zaWcJcjMwID0gZjQyCQkJQyBoaQorCWxkOAkJcjIzID0gW3I5XSwgOAorCTs7CisJZ2V0Zi5zaWcJcjI3ID0gZjM5CQkJQyBsbworCWdldGYuc2lnCXIzMSA9IGY0MwkJCUMgaGkKKwlsZDgJCXIyMCA9IFtyOV0sIDgKKwlicgkJLkxjajMKKworLmdydDM6CWxkZjgJCWY0NCA9IFtycF0sIDgKKwl4bWEubAkJZjM3ID0gZjcsIGY2LCBmOAorCWxkZjgJCWYzMiA9IFt1cF0sIDgKKwl4bWEuaHUJCWY0MSA9IGY3LCBmNiwgZjgKKwk7OworCWxkZjgJCWY0NSA9IFtycF0sIDgKKwl4bWEubAkJZjM4ID0gZjM0LCBmNiwgZjQ2CisJbGRmOAkJZjMzID0gW3VwXSwgOAorCXhtYS5odQkJZjQyID0gZjM0LCBmNiwgZjQ2CisJOzsKKwlsZGY4CQlmNDYgPSBbcnBdLCA4CisJbGRmOAkJZjM0ID0gW3VwXSwgOAorCTs7CisJZ2V0Zi5zaWcJcjI1ID0gZjM3CQkJQyBsbworCXhtYS5sCQlmMzkgPSBmMzUsIGY2LCBmNDcKKwlsZDgJCXIyMiA9IFtyOV0sIDgKKwl4bWEuaHUJCWY0MyA9IGYzNSwgZjYsIGY0NworCTs7CisJbGRmOAkJZjQ3ID0gW3JwXSwgOAorCWdldGYuc2lnCXIyOSA9IGY0MQkJCUMgaGkKKwlsZGY4CQlmMzUgPSBbdXBdLCA4CisJOzsKKwlnZXRmLnNpZwlyMjYgPSBmMzgJCQlDIGxvCisJeG1hLmwJCWYzNiA9IGYzMiwgZjYsIGY0NAorCWxkOAkJcjIzID0gW3I5XSwgOAorCXhtYS5odQkJZjQwID0gZjMyLCBmNiwgZjQ0CisJYnIuY2xvb3AuZHB0awkuZ3J0NworCTs7CisKKwlnZXRmLnNpZwlyMzAgPSBmNDIJCQlDIGhpCisJZ2V0Zi5zaWcJcjI3ID0gZjM5CQkJQyBsbworCXhtYS5sCQlmMzcgPSBmMzMsIGY2LCBmNDUKKwlsZDgJCXIyMCA9IFtyOV0sIDgKKwl4bWEuaHUJCWY0MSA9IGYzMywgZjYsIGY0NQorCTs7CisJZ2V0Zi5zaWcJcjMxID0gZjQzCQkJQyBoaQorCWdldGYuc2lnCXIyNCA9IGYzNgkJCUMgbG8KKwl4bWEubAkJZjM4ID0gZjM0LCBmNiwgZjQ2CisJbGQ4CQlyMjEgPSBbcjldLCA4CisJeG1hLmh1CQlmNDIgPSBmMzQsIGY2LCBmNDYKKwlicgkJLkxjajcKKworLmdydDc6CWxkZjgJCWY0NCA9IFtycF0sIDgKKwlnZXRmLnNpZwlyMzAgPSBmNDIJCQlDIGhpCisJbGRmOAkJZjMyID0gW3VwXSwgOAorCTs7CisJZ2V0Zi5zaWcJcjI3ID0gZjM5CQkJQyBsbworCXhtYS5sCQlmMzcgPSBmMzMsIGY2LCBmNDUKKwlsZDgJCXIyMCA9IFtyOV0sIDgKKwl4bWEuaHUJCWY0MSA9IGYzMywgZjYsIGY0NQorCTs7CisJbGRmOAkJZjQ1ID0gW3JwXSwgOAorCWdldGYuc2lnCXIzMSA9IGY0MwkJCUMgaGkKKwlsZGY4CQlmMzMgPSBbdXBdLCA4CisJOzsKKwlnZXRmLnNpZwlyMjQgPSBmMzYJCQlDIGxvCisJeG1hLmwJCWYzOCA9IGYzNCwgZjYsIGY0NgorCWxkOAkJcjIxID0gW3I5XSwgOAorCXhtYS5odQkJZjQyID0gZjM0LCBmNiwgZjQ2CisJYnIJCS5MTDExCisKKworLkxiMDA6CWxkZjgJCWY0NSA9IFtycF0sIDgKKwlsZGY4CQlmMzMgPSBbdXBdLCA4CisJOzsKKwlsZGY4CQlmNDYgPSBbcnBdLCA4CisJbGRmOAkJZjM0ID0gW3VwXSwgOAorCTs7CisJbGRmOAkJZjQ3ID0gW3JwXSwgOAorCXhtYS5sCQlmMzYgPSBmNywgZjYsIGY4CisJbGRmOAkJZjM1ID0gW3VwXSwgOAorCXhtYS5odQkJZjQwID0gZjcsIGY2LCBmOAorCWJyLmNsb29wLmRwdGsJLmdydDQKKworCXhtYS5sCQlmMzcgPSBmMzMsIGY2LCBmNDUKKwl4bWEuaHUJCWY0MSA9IGYzMywgZjYsIGY0NQorCTs7CisJZ2V0Zi5zaWcJcjI0ID0gZjM2CQkJQyBsbworCXhtYS5sCQlmMzggPSBmMzQsIGY2LCBmNDYKKwlsZDgJCXIyMSA9IFtyOV0sIDgKKwl4bWEuaHUJCWY0MiA9IGYzNCwgZjYsIGY0NgorCTs7CisJZ2V0Zi5zaWcJcjI4ID0gZjQwCQkJQyBoaQorCXhtYS5sCQlmMzkgPSBmMzUsIGY2LCBmNDcKKwlnZXRmLnNpZwlyMjUgPSBmMzcJCQlDIGxvCisJbGQ4CQlyMjIgPSBbcjldLCA4CisJeG1hLmh1CQlmNDMgPSBmMzUsIGY2LCBmNDcKKwk7OworCWdldGYuc2lnCXIyOSA9IGY0MQkJCUMgaGkKKwlnZXRmLnNpZwlyMjYgPSBmMzgJCQlDIGxvCisJbGQ4CQlyMjMgPSBbcjldLCA4CisJOzsKKwlnZXRmLnNpZwlyMzAgPSBmNDIJCQlDIGhpCisJZ2V0Zi5zaWcJcjI3ID0gZjM5CQkJQyBsbworCWxkOAkJcjIwID0gW3I5XSwgOAorCWJyCQkuTGNqNAorCisuZ3J0NDoJbGRmOAkJZjQ0ID0gW3JwXSwgOAorCXhtYS5sCQlmMzcgPSBmMzMsIGY2LCBmNDUKKwlsZGY4CQlmMzIgPSBbdXBdLCA4CisJeG1hLmh1CQlmNDEgPSBmMzMsIGY2LCBmNDUKKwk7OworCWxkZjgJCWY0NSA9IFtycF0sIDgKKwlsZGY4CQlmMzMgPSBbdXBdLCA4CisJeG1hLmwJCWYzOCA9IGYzNCwgZjYsIGY0NgorCWdldGYuc2lnCXIyNCA9IGYzNgkJCUMgbG8KKwlsZDgJCXIyMSA9IFtyOV0sIDgKKwl4bWEuaHUJCWY0MiA9IGYzNCwgZjYsIGY0NgorCTs7CisJbGRmOAkJZjQ2ID0gW3JwXSwgOAorCWdldGYuc2lnCXIyOCA9IGY0MAkJCUMgaGkKKwlsZGY4CQlmMzQgPSBbdXBdLCA4CisJeG1hLmwJCWYzOSA9IGYzNSwgZjYsIGY0NworCWdldGYuc2lnCXIyNSA9IGYzNwkJCUMgbG8KKwlsZDgJCXIyMiA9IFtyOV0sIDgKKwl4bWEuaHUJCWY0MyA9IGYzNSwgZjYsIGY0NworCTs7CisJbGRmOAkJZjQ3ID0gW3JwXSwgOAorCWdldGYuc2lnCXIyOSA9IGY0MQkJCUMgaGkKKwlsZGY4CQlmMzUgPSBbdXBdLCA4CisJOzsKKwlnZXRmLnNpZwlyMjYgPSBmMzgJCQlDIGxvCisJeG1hLmwJCWYzNiA9IGYzMiwgZjYsIGY0NAorCWxkOAkJcjIzID0gW3I5XSwgOAorCXhtYS5odQkJZjQwID0gZjMyLCBmNiwgZjQ0CisJYnIuY2xvb3AuZHB0awkuZ3J0OAorCTs7CisKKwlnZXRmLnNpZwlyMzAgPSBmNDIJCQlDIGhpCisJZ2V0Zi5zaWcJcjI3ID0gZjM5CQkJQyBsbworCXhtYS5sCQlmMzcgPSBmMzMsIGY2LCBmNDUKKwlsZDgJCXIyMCA9IFtyOV0sIDgKKwl4bWEuaHUJCWY0MSA9IGYzMywgZjYsIGY0NQorCWJyCQkuTGNqOAorCisuZ3J0ODoJbGRmOAkJZjQ0ID0gW3JwXSwgOAorCWdldGYuc2lnCXIzMCA9IGY0MgkJCUMgaGkKKwlsZGY4CQlmMzIgPSBbdXBdLCA4CisJOzsKKwlnZXRmLnNpZwlyMjcgPSBmMzkJCQlDIGxvCisJeG1hLmwJCWYzNyA9IGYzMywgZjYsIGY0NQorCWxkOAkJcjIwID0gW3I5XSwgOAorCXhtYS5odQkJZjQxID0gZjMzLCBmNiwgZjQ1CisJYnIJCS5MTDAwCisKKwlBTElHTigzMikKKy5Mb29wOgorey5tbWkKKwlsZGY4CQlmNDQgPSBbcnBdLCA4CisJY21wLmx0dQkJcDYsIHAwID0gcjI3LCByOAlDIGxvIGNtcAorCXN1YgkJcjE0ID0gcjI3LCByOAkJQyBsbyBzdWIKK30KK3subW1pCisJZ2V0Zi5zaWcJcjMwID0gZjQyCQkJQyBoaQorCWxkZjgJCWYzMiA9IFt1cF0sIDgKKwlzdWIJCXI4ID0gcjIwLCByMzEJCUMgaGkgc3ViCisJOzsJCQkJQyAwMQorfQorey5tbWYKKwlnZXRmLnNpZwlyMjcgPSBmMzkJCQlDIGxvCisJc3Q4CQlbcjEwXSA9IHIxNCwgOAorCXhtYS5sCQlmMzcgPSBmMzMsIGY2LCBmNDUKK30KK3subWZpCisJbGQ4CQlyMjAgPSBbcjldLCA4CisJeG1hLmh1CQlmNDEgPSBmMzMsIGY2LCBmNDUKKyAgIChwNikJYWRkCQlyOCA9IDEsIHI4CisJOzsJCQkJQyAwMgorfQorey5tbWkKKy5MTDAwOglsZGY4CQlmNDUgPSBbcnBdLCA4CisJY21wLmx0dQkJcDYsIHAwID0gcjI0LCByOAorCXN1YgkJcjE0ID0gcjI0LCByOAorfQorey5tbWkKKwlnZXRmLnNpZwlyMzEgPSBmNDMJCQlDIGhpCisJbGRmOAkJZjMzID0gW3VwXSwgOAorCXN1YgkJcjggPSByMjEsIHIyOAorCTs7CQkJCUMgMDMKK30KK3subW1mCisJZ2V0Zi5zaWcJcjI0ID0gZjM2CQkJQyBsbworCXN0OAkJW3IxMF0gPSByMTQsIDgKKwl4bWEubAkJZjM4ID0gZjM0LCBmNiwgZjQ2Cit9Cit7Lm1maQorCWxkOAkJcjIxID0gW3I5XSwgOAorCXhtYS5odQkJZjQyID0gZjM0LCBmNiwgZjQ2CisgICAocDYpCWFkZAkJcjggPSAxLCByOAorCTs7CQkJCUMgMDQKK30KK3subW1pCisuTEwxMToJbGRmOAkJZjQ2ID0gW3JwXSwgOAorCWNtcC5sdHUJCXA2LCBwMCA9IHIyNSwgcjgKKwlzdWIJCXIxNCA9IHIyNSwgcjgKK30KK3subW1pCisJZ2V0Zi5zaWcJcjI4ID0gZjQwCQkJQyBoaQorCWxkZjgJCWYzNCA9IFt1cF0sIDgKKwlzdWIJCXI4ID0gcjIyLCByMjkKKwk7OwkJCQlDIDA1Cit9Cit7Lm1tZgorCWdldGYuc2lnCXIyNSA9IGYzNwkJCUMgbG8KKwlzdDgJCVtyMTBdID0gcjE0LCA4CisJeG1hLmwJCWYzOSA9IGYzNSwgZjYsIGY0NworfQorey5tZmkKKwlsZDgJCXIyMiA9IFtyOV0sIDgKKwl4bWEuaHUJCWY0MyA9IGYzNSwgZjYsIGY0NworICAgKHA2KQlhZGQJCXI4ID0gMSwgcjgKKwk7OwkJCQlDIDA2Cit9Cit7Lm1taQorLkxMMTA6CWxkZjgJCWY0NyA9IFtycF0sIDgKKwljbXAubHR1CQlwNiwgcDAgPSByMjYsIHI4CisJc3ViCQlyMTQgPSByMjYsIHI4Cit9Cit7Lm1taQorCWdldGYuc2lnCXIyOSA9IGY0MQkJCUMgaGkKKwlsZGY4CQlmMzUgPSBbdXBdLCA4CisJc3ViCQlyOCA9IHIyMywgcjMwCisJOzsJCQkJQyAwNworfQorey5tbWYKKwlnZXRmLnNpZwlyMjYgPSBmMzgJCQlDIGxvCisJc3Q4CQlbcjEwXSA9IHIxNCwgOAorCXhtYS5sCQlmMzYgPSBmMzIsIGY2LCBmNDQKK30KK3subWZpCisJbGQ4CQlyMjMgPSBbcjldLCA4CisJeG1hLmh1CQlmNDAgPSBmMzIsIGY2LCBmNDQKKyAgIChwNikJYWRkCQlyOCA9IDEsIHI4Cit9CisJYnIuY2xvb3AuZHB0awkuTG9vcAorCTs7CisKKy5MZW5kOgorCWNtcC5sdHUJCXA2LCBwMCA9IHIyNywgcjgKKwlzdWIJCXIxNCA9IHIyNywgcjgKKwlnZXRmLnNpZwlyMzAgPSBmNDIKKwlzdWIJCXI4ID0gcjIwLCByMzEKKwk7OworCWdldGYuc2lnCXIyNyA9IGYzOQorCXN0OAkJW3IxMF0gPSByMTQsIDgKKwl4bWEubAkJZjM3ID0gZjMzLCBmNiwgZjQ1CisJbGQ4CQlyMjAgPSBbcjldLCA4CisJeG1hLmh1CQlmNDEgPSBmMzMsIGY2LCBmNDUKKyAgIChwNikJYWRkCQlyOCA9IDEsIHI4CisJOzsKKy5MY2o4OgorCWNtcC5sdHUJCXA2LCBwMCA9IHIyNCwgcjgKKwlzdWIJCXIxNCA9IHIyNCwgcjgKKwlnZXRmLnNpZwlyMzEgPSBmNDMKKwlzdWIJCXI4ID0gcjIxLCByMjgKKwk7OworCWdldGYuc2lnCXIyNCA9IGYzNgorCXN0OAkJW3IxMF0gPSByMTQsIDgKKwl4bWEubAkJZjM4ID0gZjM0LCBmNiwgZjQ2CisJbGQ4CQlyMjEgPSBbcjldLCA4CisJeG1hLmh1CQlmNDIgPSBmMzQsIGY2LCBmNDYKKyAgIChwNikJYWRkCQlyOCA9IDEsIHI4CisJOzsKKy5MY2o3OgorCWNtcC5sdHUJCXA2LCBwMCA9IHIyNSwgcjgKKwlzdWIJCXIxNCA9IHIyNSwgcjgKKwlnZXRmLnNpZwlyMjggPSBmNDAKKwlzdWIJCXI4ID0gcjIyLCByMjkKKwk7OworCWdldGYuc2lnCXIyNSA9IGYzNworCXN0OAkJW3IxMF0gPSByMTQsIDgKKwl4bWEubAkJZjM5ID0gZjM1LCBmNiwgZjQ3CisJbGQ4CQlyMjIgPSBbcjldLCA4CisJeG1hLmh1CQlmNDMgPSBmMzUsIGY2LCBmNDcKKyAgIChwNikJYWRkCQlyOCA9IDEsIHI4CisJOzsKKy5MY2o2OgorCWNtcC5sdHUJCXA2LCBwMCA9IHIyNiwgcjgKKwlzdWIJCXIxNCA9IHIyNiwgcjgKKwlnZXRmLnNpZwlyMjkgPSBmNDEKKwlzdWIJCXI4ID0gcjIzLCByMzAKKwk7OworCWdldGYuc2lnCXIyNiA9IGYzOAorCXN0OAkJW3IxMF0gPSByMTQsIDgKKwlsZDgJCXIyMyA9IFtyOV0sIDgKKyAgIChwNikJYWRkCQlyOCA9IDEsIHI4CisJOzsKKy5MY2o1OgorCWNtcC5sdHUJCXA2LCBwMCA9IHIyNywgcjgKKwlzdWIJCXIxNCA9IHIyNywgcjgKKwlnZXRmLnNpZwlyMzAgPSBmNDIKKwlzdWIJCXI4ID0gcjIwLCByMzEKKwk7OworCWdldGYuc2lnCXIyNyA9IGYzOQorCXN0OAkJW3IxMF0gPSByMTQsIDgKKwlsZDgJCXIyMCA9IFtyOV0sIDgKKyAgIChwNikJYWRkCQlyOCA9IDEsIHI4CisJOzsKKy5MY2o0OgorCWNtcC5sdHUJCXA2LCBwMCA9IHIyNCwgcjgKKwlzdWIJCXIxNCA9IHIyNCwgcjgKKwlnZXRmLnNpZwlyMzEgPSBmNDMKKwlzdWIJCXI4ID0gcjIxLCByMjgKKwk7OworCXN0OAkJW3IxMF0gPSByMTQsIDgKKyAgIChwNikJYWRkCQlyOCA9IDEsIHI4CisJOzsKKy5MY2ozOgorCWNtcC5sdHUJCXA2LCBwMCA9IHIyNSwgcjgKKwlzdWIJCXIxNCA9IHIyNSwgcjgKKwlzdWIJCXI4ID0gcjIyLCByMjkKKwk7OworCXN0OAkJW3IxMF0gPSByMTQsIDgKKyAgIChwNikJYWRkCQlyOCA9IDEsIHI4CisJOzsKKy5MY2oyOgorCWNtcC5sdHUJCXA2LCBwMCA9IHIyNiwgcjgKKwlzdWIJCXIxNCA9IHIyNiwgcjgKKwlzdWIJCXI4ID0gcjIzLCByMzAKKwk7OworCXN0OAkJW3IxMF0gPSByMTQsIDgKKyAgIChwNikJYWRkCQlyOCA9IDEsIHI4CisJOzsKKy5MY2oxOgorCWNtcC5sdHUJCXA2LCBwMCA9IHIyNywgcjgKKwlzdWIJCXIxNCA9IHIyNywgcjgKKwlzdWIJCXI4ID0gcjIwLCByMzEKKwk7OworCXN0OAkJW3IxMF0gPSByMTQsIDgKKwltb3YJCWFyLmxjID0gcjIKKyAgIChwNikJYWRkCQlyOCA9IDEsIHI4CisJYnIucmV0LnNwdGsubWFueSBiMAorLkxkb25lOgltb3YJCWFyLmxjID0gcjIKKwlici5yZXQuc3B0ay5tYW55IGIwCitFUElMT0dVRSgpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vbGlzcC9nbXBhc20tbW9kZS5lbCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vbGlzcC9nbXBhc20tbW9kZS5lbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjJmZWEwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9saXNwL2dtcGFzbS1tb2RlLmVsCkBAIC0wLDAgKzEsMzg1IEBACis7OzsgZ21wYXNtLW1vZGUuZWwgLS0gR05VIE1QIGFzbSBhbmQgbTQgZWRpdGluZyBtb2RlLgorCisKKzs7IENvcHlyaWdodCAxOTk5LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKzs7ICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorOzsKKzs7ICAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKzs7ICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKzs7Cis7OyAgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorOzsgICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKzs7ICAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCis7OworOzsgICBvcgorOzsKKzs7ICAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKzs7ICAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Cis7OyAgICAgICBsYXRlciB2ZXJzaW9uLgorOzsKKzs7ICAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKzs7Cis7OyAgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKzs7ICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKzs7ICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCis7OyAgIGZvciBtb3JlIGRldGFpbHMuCis7OworOzsgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCis7OyAgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKKzs7ICAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKKzs7OyBDb21tZW50YXJ5OgorOzsKKzs7IGdtcGFzbS1tb2RlIGlzIGEgbWFqb3IgbW9kZSBmb3IgZWRpdGluZyBtNCBwcm9jZXNzZWQgYXNzZW1ibGVyIGNvZGUgYW5kCis7OyBtNCBtYWNybyBmaWxlcyBpbiBHTVAuICBJdCdzIHNpbWlsYXIgdG8gbTQtbW9kZSwgYnV0IGhhcyBhIG51bWJlciBvZgorOzsgc2V0dGluZ3MgYmV0dGVyIHN1aXRlZCB0byBHTVAuCis7OworOzsKKzs7IEluc3RhbGwKKzs7IC0tLS0tLS0KKzs7Cis7OyBUbyBtYWtlIE0teCBnbXBhc20tbW9kZSBhdmFpbGFibGUsIHB1dCBnbXBhc20tbW9kZS5lbCBzb21ld2hlcmUgaW4geW91cgorOzsgbG9hZC1wYXRoIGFuZCB0aGUgZm9sbG93aW5nIGluIHlvdXIgLmVtYWNzCis7OworOzsJKGF1dG9sb2FkICdnbXBhc20tbW9kZSAiZ21wYXNtLW1vZGUiIG5pbCB0KQorOzsKKzs7IFRvIHVzZSBnbXBhc20tbW9kZSBhdXRvbWF0aWNhbGx5IG9uIGFsbCAuYXNtIGFuZCAubTQgZmlsZXMsIHB1dCB0aGUKKzs7IGZvbGxvd2luZyBpbiB5b3VyIC5lbWFjcworOzsKKzs7CShhZGQtdG8tbGlzdCAnYXV0by1tb2RlLWFsaXN0ICcoIlxcLmFzbVxcJyIgLiBnbXBhc20tbW9kZSkpCis7OwkoYWRkLXRvLWxpc3QgJ2F1dG8tbW9kZS1hbGlzdCAnKCJcXC5tNFxcJyIgLiBnbXBhc20tbW9kZSkpCis7OworOzsgVG8gaGF2ZSBnbXBhc20tbW9kZSBvbmx5IG9uIGdtcCBmaWxlcywgdHJ5IGluc3RlYWQgc29tZXRoaW5nIGxpa2UgdGhlCis7OyBmb2xsb3dpbmcsIHdoaWNoIHVzZXMgaXQgb25seSBpbiBhIGRpcmVjdG9yeSBzdGFydGluZyB3aXRoICJnbXAiLCBvciBhCis7OyBzdWItZGlyZWN0b3J5IG9mIHN1Y2guCis7OworOzsJKGFkZC10by1saXN0ICdhdXRvLW1vZGUtYWxpc3QKKzs7CSAgICAgICAgICAgICAnKCIvZ21wLiovLipcXC5cXChhc21cXHxtNFxcKVxcJyIgLiBnbXBhc20tbW9kZSkpCis7OworOzsgQnl0ZSBjb21waWxpbmcgd2lsbCBzbGlnaHRseSBzcGVlZCB1cCBsb2FkaW5nLiAgSWYgeW91IHdhbnQgYSBkb2NzdHJpbmcKKzs7IGluIHRoZSBhdXRvbG9hZCB5b3UgY2FuIHVzZSBNLXggdXBkYXRlLWZpbGUtYXV0b2xvYWRzIGlmIHlvdSBzZXQgaXQgdXAKKzs7IHJpZ2h0LgorOzsKKzs7Cis7OyBFbWFjc2VuCis7OyAtLS0tLS0tCis7OworOzsgR05VIEVtYWNzIDIwLngsIDIxLnggYW5kIFhFbWFjcyAyMC54IGFsbCB3b3JrIHdlbGwuICBHTlUgRW1hY3MgMTkueAorOzsgc2hvdWxkIHdvcmsgaWYgcmVwbGFjZW1lbnRzIGZvciB0aGUgdmFyaW91cyAyMC54LWlzbXMgYXJlIGF2YWlsYWJsZSwKKzs7IHRob3VnaCBjb21tZW50LXJlZ2lvbiB3aXRoICJDIiBkb2Vzbid0IGRvIHRoZSByaWdodCB0aGluZy4KKworCis7OzsgQ29kZToKKworKGRlZmdyb3VwIGdtcGFzbSBuaWwKKyAgIkdOVSBNUCBtNCBhbmQgYXNtIGVkaXRpbmcuIgorICA6cHJlZml4ICJnbXBhc20tIgorICA6Z3JvdXAgJ2xhbmd1YWdlcykKKworKGRlZmN1c3RvbSBnbXBhc20tbW9kZS1ob29rIG5pbAorICAiKkhvb2sgY2FsbGVkIGJ5IGBnbXBhc20tbW9kZScuIgorICA6dHlwZSAnaG9vaworICA6Z3JvdXAgJ2dtcGFzbSkKKworKGRlZmN1c3RvbSBnbXBhc20tY29tbWVudC1zdGFydC1yZWdleHAgIlxcKFsjOyFAKnxDXVxcfC8vXFwpIgorICAiKlJlZ2V4cCBtYXRjaGluZyBwb3NzaWJsZSBjb21tZW50IHN0eWxlcy4KK1NlZSBgZ21wYXNtLW1vZGUnIGRvY3N0cmluZyBmb3IgaG93IHRoaXMgaXMgdXNlZC4KKworQ29tbWVudGluZyBzdHlsZXMgd2l0aGluIEdNUCBpbmNsdWRlCisgICMgICAtIGFscGhhLCBpMzg2LCBpOTYwLCB2YXgsIHRyYWRpdGlvbmFsIHVuaXgKKyAgOyAgIC0gYTI5aywgY2xpcHBlciwgaHBwYSwgbTg4aywgcHBjCisgICEgICAtIHNoLCBzcGFyYywgejgwMDAKKyAgfCAgIC0gbTY4aworICBAICAgLSBhcm0KKyAgKiAgIC0gY3JheQorICBDICAgLSBHTVAgbTQsIHNlZSBtcG4vYXNtLWRlZnMubTQKKyAgLy8gIC0gaWE2NCIKKyAgOnR5cGUgJ3JlZ2V4cAorICA6Z3JvdXAgJ2dtcGFzbSkKKworCisoZGVmdW4gZ21wYXNtLWFkZC10by1saXN0LXNlY29uZCAobGlzdC12YXIgZWxlbWVudCkKKyAgIihnbXBhc20tYWRkLXRvLWxpc3Qtc2Vjb25kIExJU1QtVkFSIEVMRU1FTlQpCisKK0FkZCBFTEVNRU5UIHRvIExJU1QtVkFSIGFzIHRoZSBzZWNvbmQgZWxlbWVudCBpbiB0aGUgbGlzdCwgaWYgaXQgaXNuJ3QKK2FscmVhZHkgaW4gdGhlIGxpc3QuICBJZiBMSVNULVZBUiBpcyBuaWwsIHRoZW4gRUxFTUVOVCBpcyBqdXN0IGFkZGVkIGFzIHRoZQorc29sZSBlbGVtZW50IGluIHRoZSBsaXN0LgorCitUaGlzIGlzIGxpa2UgYGFkZC10by1saXN0JywgYnV0IGl0IHB1dHMgdGhlIG5ldyB2YWx1ZSBzZWNvbmQgaW4gdGhlIGxpc3QuCisKK1RoZSBmaXJzdCBjb25zIGNlbGwgaXMgY29waWVkIHJhdGhlciB0aGFuIGNoYW5nZWQgaW4tcGxhY2UsIHNvIHJlZmVyZW5jZXMgdG8KK3RoZSBsaXN0IGVsc2V3aGVyZSB3b24ndCBiZSBhZmZlY3RlZC4iCisKKyAgKGlmIChtZW1iZXIgZWxlbWVudCAoc3ltYm9sLXZhbHVlIGxpc3QtdmFyKSkKKyAgICAgIChzeW1ib2wtdmFsdWUgbGlzdC12YXIpCisgICAgKHNldCBsaXN0LXZhcgorCSAoaWYgKHN5bWJvbC12YWx1ZSBsaXN0LXZhcikKKwkgICAgIChjb25zIChjYXIgKHN5bWJvbC12YWx1ZSBsaXN0LXZhcikpCisJCSAgIChjb25zIGVsZW1lbnQKKwkJCSAoY2RyIChzeW1ib2wtdmFsdWUgbGlzdC12YXIpKSkpCisJICAgKGxpc3QgZWxlbWVudCkpKSkpCisKKworKGRlZnVuIGdtcGFzbS1yZW1vdmUtZnJvbS1saXN0IChsaXN0LXZhciBlbGVtZW50KQorICAiKGdtcGFzbS1yZW1vdmUtZnJvbS1saXN0IExJU1QtVkFSIEVMRU1FTlQpCisKK1JlbW92ZSBFTEVNRU5UIGZyb20gTElTVC1WQVIsIHVzaW5nIGBjb3B5LXNlcXVlbmNlJyBhbmQgYGRlbGV0ZScuCitUaGlzIGlzIHZhZ3VlbHkgbGlrZSBgYWRkLXRvLWxpc3QnLCBidXQgdGhlIGVsZW1lbnQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0LgorVGhlIGxpc3QgaXMgY29waWVkIHJhdGhlciB0aGFuIGNoYW5nZWQgaW4tcGxhY2UsIHNvIHJlZmVyZW5jZXMgdG8gaXQgZWxzZXdoZXJlCithcmVuJ3QgYWZmZWN0ZWQuIgorCis7OyBPbmx5IHRoZSBwb3J0aW9uIG9mIHRoZSBsaXN0IHVwIHRvIHRoZSByZW1vdmVkIGVsZW1lbnQgbmVlZHMgdG8gYmUKKzs7IGNvcGllZCwgYnV0IHRoZXJlJ3Mgbm8gbmVlZCB0byBib3RoZXIgYXJyYW5naW5nIHRoYXQsIHNpbmNlIHRoaXMgZnVuY3Rpb24KKzs7IGlzIG9ubHkgdXNlZCBmb3IgYSBjb3VwbGUgb2YgaW5pdGlhbGl6YXRpb25zLgorCisgIChzZXQgbGlzdC12YXIgKGRlbGV0ZSBlbGVtZW50IChjb3B5LXNlcXVlbmNlIChzeW1ib2wtdmFsdWUgbGlzdC12YXIpKSkpKQorCisKKyhkZWZ2YXIgZ21wYXNtLW1vZGUtbWFwCisgIChsZXQgKChtYXAgKG1ha2Utc3BhcnNlLWtleW1hcCkpKQorCisgICAgOzsgYXNzZW1ibGVyIGFuZCBkbmwgY29tbWVudGluZworICAgIChkZWZpbmUta2V5IG1hcCAiXEMtY1xDLWMiICdjb21tZW50LXJlZ2lvbikKKyAgICAoZGVmaW5lLWtleSBtYXAgIlxDLWNcQy1kIiAnZ21wYXNtLWNvbW1lbnQtcmVnaW9uLWRubCkKKworICAgIDs7IGtpbGwgYW4gTS14IGNvbXBpbGUsIHNpbmNlIGl0J3Mgbm90IGhhcmQgdG8gcHV0IG00IGludG8gYW4gaW5maW5pdGUKKyAgICA7OyBsb29wCisgICAgKGRlZmluZS1rZXkgbWFwICJcQy1jXEMtayIgJ2tpbGwtY29tcGlsYXRpb24pCisKKyAgICBtYXApCisgICJLZXltYXAgZm9yIGBnbXBhc20tbW9kZScuIikKKworCisoZGVmdmFyIGdtcGFzbS1tb2RlLXN5bnRheC10YWJsZQorICAobGV0ICgodGFibGUgKG1ha2Utc3ludGF4LXRhYmxlKSkpCisgICAgOzsgdW5kZXJzY29yZSBsZWZ0IGFzIGEgc3ltYm9sIGNoYXIsIGxpa2UgQyBtb2RlCisKKyAgICA7OyBtNCBxdW90ZXMKKyAgICAobW9kaWZ5LXN5bnRheC1lbnRyeSA/YCAgIignIiAgdGFibGUpCisgICAgKG1vZGlmeS1zeW50YXgtZW50cnkgPycgICIpYCIgIHRhYmxlKQorCisgICAgdGFibGUpCisgICJTeW50YXggdGFibGUgdXNlZCBpbiBgZ21wYXNtLW1vZGUnLgorCisnIycgYW5kICdcbicgYXJlbid0IHNldCBhcyBjb21tZW50IHN5bnRheC4gIEluIG00IHRoZXNlIGFyZSBhIGNvbW1lbnQKK291dHNpZGUgcXVvdGVzLCBidXQgbm90IGluc2lkZS4gIE9taXR0aW5nIGEgc3ludGF4IGVudHJ5IGVuc3VyZXMgdGhhdCB3aGVuCitpbnNpZGUgcXVvdGVzIGVtYWNzIHRyZWF0cyBwYXJlbnRoZXNlcyBhbmQgYXBvc3Ryb3BoZXMgdGhlIHNhbWUgd2F5IHRoYXQgbTQKK2RvZXMuICBXaGVuIG91dHNpZGUgcXVvdGVzIHRoaXMgaXMgbm90IHF1aXRlIHJpZ2h0LCBidXQgaGF2aW5nIGl0IHJpZ2h0IHdoZW4KK25lc3RpbmcgZXhwcmVzc2lvbnMgaXMgbW9yZSBpbXBvcnRhbnQuCisKKycqJywgJyEnIG9yICd8JyBhcmVuJ3Qgc2V0dXAgYXMgY29tbWVudCBzeW50YXggZWl0aGVyLCBvbiBDUFVzIHdoaWNoIHVzZQordGhlc2UgZm9yIGNvbW1lbnRzLiAgVGhlIEdNUCBtYWNybyBzZXR1cHMgZG9uJ3Qgc2V0IHRoZW0gaW4gbTQgY2hhbmdlY29tKCksCitzaW5jZSB0aGF0IHByZXZlbnRzIHRoZW0gYmVpbmcgdXNlZCBpbiBldmFsKCkgZXhwcmVzc2lvbnMsIGFuZCBvbiB0aGF0IGJhc2lzCit0aGV5IGRvbid0IGNoYW5nZSB0aGUgd2F5IHF1b3RlcyBhbmQgcGFyZW50aGVzZXMgYXJlIHRyZWF0ZWQgYnkgbTQgYW5kCitzaG91bGQgYmUgdHJlYXRlZCBieSBlbWFjcy4iKQorCisKKyhkZWZ2YXIgZ21wYXNtLWZvbnQtbG9jay1rZXl3b3JkcworICAoZXZhbC13aGVuLWNvbXBpbGUKKyAgICAobGlzdAorICAgICAoY29ucworICAgICAgKGNvbmNhdAorICAgICAgICJcXGIiCisgICAgICAgKHJlZ2V4cC1vcHQKKwknKCJkZWZsaXQiICJkZWZyZWciICJkZWZmcmFtZSIgImRlZmZyYW1lX3B1c2hsIgorCSAgImRlZmluZV9ub3RfZm9yX2V4cGFuc2lvbiIKKwkgICJtNF9lcnJvciIgIm00X3dhcm5pbmciCisJICAiQVNNX1NUQVJUIiAiQVNNX0VORCIKKwkgICJQUk9MT0dVRSIgIlBST0xPR1VFX0dQIiAiTVVMRlVOQ19QUk9MT0dVRSIgIkVQSUxPR1VFIgorCSAgIkRBVEFTVEFSVCIgIkRBVEFFTkQiCisJICAiZm9ybG9vcCIKKwkgICJURVhUIiAiREFUQSIgIkFMSUdOIiAiVzMyIiAiRkxPQVQ2NCIKKwkgICJidWlsdGluIiAiY2hhbmdlY29tIiAiY2hhbmdlcXVvdGUiICJjaGFuZ2V3b3JkIiAiZGVidWdmaWxlIgorCSAgImRlYnVnbW9kZSIgImRlY3IiICJkZWZpbmUiICJkZWZuIiAiZGl2ZXJ0IiAiZGl2bnVtIiAiZHVtcGRlZiIKKwkgICJlcnJwcmludCIgImVzeXNjbWQiICJldmFsIiAiX19maWxlX18iICJmb3JtYXQiICJnbnUiICJpZmRlZiIKKwkgICJpZmVsc2UiICJpbmNsdWRlIiAiaW5jciIgImluZGV4IiAiaW5kaXIiICJsZW4iICJfX2xpbmVfXyIKKwkgICJtNGV4aXQiICJtNHdyYXAiICJtYWtldGVtcCIgInBhdHN1YnN0IiAicG9wZGVmIiAicHVzaGRlZiIKKwkgICJyZWdleHAiICJzaGlmdCIgInNpbmNsdWRlIiAic3Vic3RyIiAic3lzY21kIiAic3lzdmFsIgorCSAgInRyYWNlb2ZmIiAidHJhY2VvbiIgInRyYW5zbGl0IiAidW5kZWZpbmUiICJ1bmRpdmVydCIgInVuaXgiKQorCXQpCisgICAgICAgIlxcYiIpICdmb250LWxvY2sta2V5d29yZC1mYWNlKSkpCisKKyAgImBmb250LWxvY2sta2V5d29yZHMnIGZvciBgZ21wYXNtLW1vZGUnLgorCitUaGUga2V5d29yZHMgYXJlIG00IGJ1aWx0aW5zIGFuZCBzb21lIG9mIHRoZSBHTVAgbWFjcm9zIHVzZWQgaW4gYXNtIGZpbGVzLgorTCBkb2Vzbid0IGxvb2sgZ29vZCBmb250aWZpZWQsIHNvIGl0J3Mgb21pdHRlZC4KKworVGhlIHJpZ2h0IGFzc2VtYmxlciBjb21tZW50IHJlZ2V4cCBpcyBhZGRlZCBkeW5hbWljYWxseSBidWZmZXItbG9jYWwgKHdpdGgKK2RubCB0b28pLiIpCisKKworOzsgSW5pdGlhbGl6ZWQgaWYgZ21wYXNtLW1vZGUgZmluZHMgZmlsbGFkYXB0IGxvYWRlZC4KKyhkZWZ2YXIgZ21wYXNtLWZpbGxhZGFwdC10b2tlbi10YWJsZSBuaWwKKyAgIkZpbGxhZGFwdCB0b2tlbiB0YWJsZSB1c2VkIGluIGBnbXBhc20tbW9kZScuIikKKyhkZWZ2YXIgZ21wYXNtLWZpbGxhZGFwdC10b2tlbi1tYXRjaC10YWJsZSBuaWwKKyAgIkZpbGxhZGFwdCB0b2tlbiBtYXRjaCB0YWJsZSB1c2VkIGluIGBnbXBhc20tbW9kZScuIikKKyhkZWZ2YXIgZ21wYXNtLWZpbGxhZGFwdC10b2tlbi1jb252ZXJzaW9uLXRhYmxlIG5pbAorICAiRmlsbGFkYXB0IHRva2VuIGNvbnZlcnNpb24gdGFibGUgdXNlZCBpbiBgZ21wYXNtLW1vZGUnLiIpCisKKworOzs7IyMjYXV0b2xvYWQKKyhkZWZ1biBnbXBhc20tbW9kZSAoKQorICAiQSBtYWpvciBtb2RlIGZvciBlZGl0aW5nIEdOVSBNUCBhc20gYW5kIG00IGZpbGVzLgorCitcXHtnbXBhc20tbW9kZS1tYXB9CitgY29tbWVudC1zdGFydCcgYW5kIGBjb21tZW50LWVuZCcgYXJlIHNldCBidWZmZXItbG9jYWwgdG8gYXNzZW1ibGVyCitjb21tZW50aW5nIGFwcHJvcHJpYXRlIGZvciB0aGUgQ1BVIGJ5IGxvb2tpbmcgZm9yIHNvbWV0aGluZyBtYXRjaGluZworYGdtcGFzbS1jb21tZW50LXN0YXJ0LXJlZ2V4cCcgYXQgdGhlIHN0YXJ0IG9mIGEgbGluZSwgb3IgXCIjXCIgaXMgdXNlZCBpZgordGhlcmUncyBubyBtYXRjaCAoaWYgXCIjXCIgaXNuJ3Qgd2hhdCB5b3Ugd2FudCwgdHlwZSBpbiBhIGRlc2lyZWQgY29tbWVudAorYW5kIGRvIFxcW2dtcGFzbS1tb2RlXSB0byByZWluaXRpYWxpemUpLgorCitgYWRhcHRpdmUtZmlsbC1yZWdleHAnIGlzIHNldCBidWZmZXItbG9jYWwgdG8gdGhlIHN0YW5kYXJkIHJlZ2V4cCB3aXRoCitgY29tbWVudC1zdGFydCcgYW5kIGRubCBhZGRlZC4gIElmIGZpbGxhZGFwdC5lbCBoYXMgYmVlbiBsb2FkZWQgaXQgc2ltaWxhcmx5CitnZXRzIGBjb21tZW50LXN0YXJ0JyBhbmQgZG5sIGFkZGVkIGFzIGJ1ZmZlci1sb2NhbCBmaWxsIHByZWZpeGVzLgorCitGb250IGxvY2tpbmcgaGFzIHRoZSBtNCBidWlsdGlucywgc29tZSBvZiB0aGUgR01QIG1hY3JvcywgbTQgZG5sIGNvbW1lbnRpbmcsCithbmQgYXNzZW1ibGVyIGNvbW1lbnRpbmcgKGJhc2VkIG9uIHRoZSBgY29tbWVudC1zdGFydCcgZGV0ZXJtaW5lZCkuCisKK05vdGUgdGhhdCBgZ21wYXNtLWNvbW1lbnQtc3RhcnQtcmVnZXhwJyBpcyBvbmx5IG1hdGNoZWQgYXMgYSB3aG9sZSB3b3JkLCBzbwordGhlIGBDJyBpbiBpdCBpcyBvbmx5IG1hdGNoZWQgYXMgYSB3aG9sZSB3b3JkLCBub3Qgb24gc29tZXRoaW5nIHRoYXQgaGFwcGVucwordG8gc3RhcnQgd2l0aCBgQycuICBBbHNvIGl0J3Mgb25seSB0aGUgcGFydGljdWxhciBgY29tbWVudC1zdGFydCcgZGV0ZXJtaW5lZAordGhhdCdzIGFkZGVkIGZvciBmaWxsaW5nIGV0Yywgbm90IHRoZSB3aG9sZSBgZ21wYXNtLWNvbW1lbnQtc3RhcnQtcmVnZXhwJy4KKworYGdtcGFzbS1tb2RlLWhvb2snIGlzIHJ1biBhZnRlciBpbml0aWFsaXphdGlvbnMgYXJlIGNvbXBsZXRlLiIKKworICAoaW50ZXJhY3RpdmUpCisgIChraWxsLWFsbC1sb2NhbC12YXJpYWJsZXMpCisgIChzZXRxIG1ham9yLW1vZGUgJ2dtcGFzbS1tb2RlCisgICAgICAgIG1vZGUtbmFtZSAgImdtcGFzbSIpCisgICh1c2UtbG9jYWwtbWFwIGdtcGFzbS1tb2RlLW1hcCkKKyAgKHNldC1zeW50YXgtdGFibGUgZ21wYXNtLW1vZGUtc3ludGF4LXRhYmxlKQorICAoc2V0cSBmaWxsLWNvbHVtbiA3NikKKworICA7OyBTaG9ydCBpbnN0cnVjdGlvbnMgbWlnaHQgZml0IHdpdGggMzIsIGJ1dCBhbnl0aGluZyB3aXRoIGxhYmVscyBvcgorICA7OyBleHByZXNzaW9ucyBzb29uIG5lZWRzIHRoZSBjb21tZW50cyBwdXNoZWQgb3V0IHRvIGNvbHVtbiA0MC4KKyAgKHNldHEgY29tbWVudC1jb2x1bW4gNDApCisKKyAgOzsgRG9uJ3Qgd2FudCB0byBmaW5kIG91dCB0aGUgaGFyZCB3YXkgd2hpY2ggZHVtYiBhc3NlbWJsZXJzIGRvbid0IGxpa2UgYQorICA7OyBtaXNzaW5nIGZpbmFsIG5ld2xpbmUuCisgIChzZXQgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ3JlcXVpcmUtZmluYWwtbmV3bGluZSkgdCkKKworICA7OyBUaGUgZmlyc3QgbWF0Y2ggb2YgZ21wYXNtLWNvbW1lbnQtc3RhcnQtcmVnZXhwIGF0IHRoZSBzdGFydCBvZiBhIGxpbmUKKyAgOzsgZGV0ZXJtaW5lcyBjb21tZW50LXN0YXJ0LCBvciAiIyIgaWYgbm8gbWF0Y2guCisgIChzZXQgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2NvbW1lbnQtc3RhcnQpCisgICAgICAgKHNhdmUtZXhjdXJzaW9uCisJIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisJIChpZiAocmUtc2VhcmNoLWZvcndhcmQKKwkgICAgICAoY29uY2F0ICJeXFwoIiBnbXBhc20tY29tbWVudC1zdGFydC1yZWdleHAgIlxcKVxcKFxccy1cXHwkXFwpIikKKwkgICAgICBuaWwgdCkKKwkgICAgIChtYXRjaC1zdHJpbmcgMSkKKwkgICAiIyIpKSkKKyAgKHNldCAobWFrZS1sb2NhbC12YXJpYWJsZSAnY29tbWVudC1lbmQpICIiKQorCisgIDs7IElmIGNvbW1lbnQtc3RhcnQgZW5kcyBpbiBhbiBhbHBoYW51bWVyaWMgdGhlbiBcYiBpcyB1c2VkIHRvIG1hdGNoIGl0CisgIDs7IG9ubHkgYXMgYSBzZXBhcmF0ZSB3b3JkLiAgVGhlIHRlc3QgaXMgZm9yIGFuIGFscGhhbnVtZXJpYyByYXRoZXIgdGhhbgorICA7OyBcdyBzaW5jZSB3ZSBtaWdodCB0cnkgIyBvciAhIGFzIFx3IGNoYXJhY3RlcnMgYnV0IHdpdGhvdXQgd2FudGluZyBcYiBvbgorICA7OyB0aGVtLgorICAobGV0ICgoY29tbWVudC1yZWdleHAKKwkgKGNvbmNhdCAocmVnZXhwLXF1b3RlIGNvbW1lbnQtc3RhcnQpCisJCSAoaWYgKHN0cmluZy1tYXRjaCAiW2EtekEtWjAtOV1cXCciIGNvbW1lbnQtc3RhcnQpICJcXGIiKSkpKQorCisgICAgOzsgV2hpdGVzcGFjZSBpcyByZXF1aXJlZCBiZWZvcmUgYSBjb21tZW50LXN0YXJ0IHNvIG00ICQjIGRvZXNuJ3QgbWF0Y2gKKyAgICA7OyB3aGVuIGNvbW1lbnQtc3RhcnQgaXMgIiMiLgorICAgIChzZXQgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2NvbW1lbnQtc3RhcnQtc2tpcCkKKwkgKGNvbmNhdCAiXFwoXlxcfFxccy1cXClcXChcXDxkbmxcXD5cXHwiIGNvbW1lbnQtcmVnZXhwICJcXClbIFx0XSoiKSkKKworICAgIDs7IENvbW1lbnQgZm9udGlmaWNhdGlvbiBiYXNlZCBvbiBjb21tZW50LXN0YXJ0LCBhbmQgYWx3YXlzIHdpdGggZG5sLgorICAgIDs7IFNhbWUgdHJlYXRtZW50IG9mIGEgc3BhY2UgYmVmb3JlICIjIiBhcyBpbiBjb21tZW50LXN0YXJ0LXNraXAsIGJ1dAorICAgIDs7IGRvbid0IGZvbnRpZnkgdGhhdCBzcGFjZS4KKyAgICAoYWRkLXRvLWxpc3QgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2dtcGFzbS1mb250LWxvY2sta2V5d29yZHMpCisJCSAobGlzdCAoY29uY2F0ICJcXCheXFx8XFxzLVxcKVxcKFxcKFxcPGRubFxcPlxcfCIKKwkJCSAgICAgICBjb21tZW50LXJlZ2V4cAorCQkJICAgICAgICJcXCkuKiRcXCkiKQorCQkgICAgICAgMiAnZm9udC1sb2NrLWNvbW1lbnQtZmFjZSkpCisKKyAgICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlICdmb250LWxvY2stZGVmYXVsdHMpCisJICcoZ21wYXNtLWZvbnQtbG9jay1rZXl3b3JkcworCSAgIHQJICAgICAgICAgOyBubyBzeW50YWN0aWMgZm9udGlmaWNhdGlvbiAob2Ygc3RyaW5ncyBldGMpCisJICAgbmlsICAgICAgICAgICA7IG5vIGNhc2UtZm9sZAorCSAgICgoP18gLiAidyIpKSAgOyBfIHBhcnQgb2YgYSB3b3JkIHdoaWxlIGZvbnRpZnlpbmcKKwkgICApKQorCisgICAgOzsgUGFyYWdyYXBocyBhcmUgc2VwYXJhdGVkIGJ5IGJsYW5rIGxpbmVzLCBvciBsaW5lcyB3aXRoIG9ubHkgZG5sIG9yCisgICAgOzsgY29tbWVudC1zdGFydC4KKyAgICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlICdwYXJhZ3JhcGgtc2VwYXJhdGUpCisJIChjb25jYXQgIlsgXHRcZl0qXFwoXFwoIiBjb21tZW50LXJlZ2V4cCAiXFx8ZG5sXFwpWyBcdF0qXFwpKiQiKSkKKyAgICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlICdwYXJhZ3JhcGgtc3RhcnQpCisJIChjb25jYXQgIlxmXFx8IiBwYXJhZ3JhcGgtc2VwYXJhdGUpKQorCisgICAgOzsgU29tZSBzb3J0IG9mICJkZWYuLi4oIiBtNCBkZWZpbmUsIHBvc3NpYmx5IHdpdGggYCBmb3IgcXVvdGluZy4KKyAgICA7OyBDb3VsZCBkbyBzb21ldGhpbmcgd2l0aCBQUk9MT0dVRSBoZXJlLCBidXQgaW4gR01QIHRoZSBmaWxlbmFtZSBpcworICAgIDs7IGVub3VnaCwgaXQncyBub3Qgbm9ybWFsbHkgbmVjZXNzYXJ5IHRvIHNheSB0aGUgZnVuY3Rpb24gbmFtZS4KKyAgICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlICdhZGQtbG9nLWN1cnJlbnQtZGVmdW4taGVhZGVyLXJlZ2V4cCkKKwkgIl5kZWZbYS16MC05X10rKGA/XFwoW2EtekEtWjAtOV9dK1xcKSIpCisKKyAgICA7OyBBZGFwdGl2ZSBmaWxsIGdldHMgZG5sIGFuZCBjb21tZW50LXN0YXJ0IGFzIGNvbW1lbnQgc3R5bGUgcHJlZml4ZXMgb24KKyAgICA7OyB0b3Agb2YgdGhlIHN0YW5kYXJkIHJlZ2V4cCAod2hpY2ggaGFzICMgYW5kIDsgYWxyZWFkeSBhY3R1YWxseSkuCisgICAgKHNldCAobWFrZS1sb2NhbC12YXJpYWJsZSAnYWRhcHRpdmUtZmlsbC1yZWdleHApCisJIChjb25jYXQgIlsgXHRdKlxcKFxcKCIKKwkJIGNvbW1lbnQtcmVnZXhwCisJCSAiXFx8ZG5sXFx8Wy18Izs+Kl0rXFx8KD9bMC05XStbLildXFwpWyBcdF0qXFwpKiIpKQorICAgIChzZXQgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2FkYXB0aXZlLWZpbGwtZmlyc3QtbGluZS1yZWdleHApCisJICJcXGBcXChbIFx0XSpkbmxcXCk/WyBcdF0qXFwnIikKKworICAgICh3aGVuIChmYm91bmRwICdmaWxsYWRhcHQtbW9kZSkKKyAgICAgICh1bmxlc3MgZ21wYXNtLWZpbGxhZGFwdC10b2tlbi10YWJsZQorCShzZXRxIGdtcGFzbS1maWxsYWRhcHQtdG9rZW4tdGFibGUKKwkgICAgICBmaWxsYWRhcHQtdG9rZW4tdGFibGUpCisJKHNldHEgZ21wYXNtLWZpbGxhZGFwdC10b2tlbi1tYXRjaC10YWJsZQorCSAgICAgIGZpbGxhZGFwdC10b2tlbi1tYXRjaC10YWJsZSkKKwkoc2V0cSBnbXBhc20tZmlsbGFkYXB0LXRva2VuLWNvbnZlcnNpb24tdGFibGUKKwkgICAgICBmaWxsYWRhcHQtdG9rZW4tY29udmVyc2lvbi10YWJsZSkKKworCTs7IE51bWJlcmVkIGJ1bGxldCBwb2ludHMgbGlrZSAiMi4xIiBnZXQgbWF0Y2hlZCBhdCB0aGUgc3RhcnQgb2YgYQorCTs7IGxpbmUgd2hlbiBpdCdzIHJlYWxseSBzb21ldGhpbmcgbGlrZSAiMi4xIGN5Y2xlcy9saW1iIiwgc28gcmVtb3ZlCisJOzsgdGhpcyBmcm9tIHRoZSBsaXN0LiAgVGhlIHJlZ2V4cCBmb3IgIjEuIiwgIjIuIiBldGMgaXMgbGVmdAorCTs7IHRob3VnaC4KKwkoZ21wYXNtLXJlbW92ZS1mcm9tLWxpc3QgJ2dtcGFzbS1maWxsYWRhcHQtdG9rZW4tdGFibGUKKwkJCQkgJygiWzAtOV0rXFwoXFwuWzAtOV0rXFwpK1sgXHRdIgorCQkJCSAgIGJ1bGxldCkpCisKKwk7OyAiJSIgYXMgYSBjb21tZW50IHByZWZpeCBpbnRlcmZlcmVzIHdpdGggcmVnaXN0ZXIgbmFtZXMgb24gc29tZQorCTs7IENQVXMsIGxpa2UgJWVheCBvbiB4ODYsIHNvIHJlbW92ZSB0aGlzLgorCShnbXBhc20tcmVtb3ZlLWZyb20tbGlzdCAnZ21wYXNtLWZpbGxhZGFwdC10b2tlbi10YWJsZQorCQkJCSAnKCIlKyIgcG9zdHNjcmlwdC1jb21tZW50KSkKKworCShhZGQtdG8tbGlzdCAnZ21wYXNtLWZpbGxhZGFwdC10b2tlbi1tYXRjaC10YWJsZQorCQkgICAgICcoZ21wYXNtLWNvbW1lbnQgZ21wYXNtLWNvbW1lbnQpKQorCShhZGQtdG8tbGlzdCAnZ21wYXNtLWZpbGxhZGFwdC10b2tlbi1jb252ZXJzaW9uLXRhYmxlCisJCSAgICAgJyhnbXBhc20tY29tbWVudCAuIGV4YWN0KSkpCisKKyAgICAgIChzZXQgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2ZpbGxhZGFwdC10b2tlbi10YWJsZSkKKwkgICBnbXBhc20tZmlsbGFkYXB0LXRva2VuLXRhYmxlKQorICAgICAgKHNldCAobWFrZS1sb2NhbC12YXJpYWJsZSAnZmlsbGFkYXB0LXRva2VuLW1hdGNoLXRhYmxlKQorCSAgIGdtcGFzbS1maWxsYWRhcHQtdG9rZW4tbWF0Y2gtdGFibGUpCisgICAgICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlICdmaWxsYWRhcHQtdG9rZW4tY29udmVyc2lvbi10YWJsZSkKKwkgICBnbXBhc20tZmlsbGFkYXB0LXRva2VuLWNvbnZlcnNpb24tdGFibGUpCisKKyAgICAgIDs7IEFkZCBkbmwgYW5kIGNvbW1lbnQtc3RhcnQgYXMgZmlsbCBwcmVmaXhlcy4KKyAgICAgIDs7IENvbW1lbnRzIGluIGZpbGxhZGFwdC5lbCBzYXkgZmlsbGFkYXB0LXRva2VuLXRhYmxlIG11c3QgYmVnaW4KKyAgICAgIDs7IHdpdGggKCJeIiBiZWdpbm5pbmctb2YtbGluZSksIHNvIHB1dCBvdXIgYWRkaXRpb24gc2Vjb25kLgorICAgICAgKGdtcGFzbS1hZGQtdG8tbGlzdC1zZWNvbmQgJ2ZpbGxhZGFwdC10b2tlbi10YWJsZQorCQkJCSAobGlzdCAoY29uY2F0ICJkbmxbIFx0XVxcfCIgY29tbWVudC1yZWdleHApCisJCQkJICAgICAgICdnbXBhc20tY29tbWVudCkpKSkKKworICAocnVuLWhvb2tzICdnbXBhc20tbW9kZS1ob29rKSkKKworCisoZGVmdW4gZ21wYXNtLWNvbW1lbnQtcmVnaW9uLWRubCAoYmVnIGVuZCAmb3B0aW9uYWwgYXJnKQorICAiKGdtcGFzbS1jb21tZW50LXJlZ2lvbi1kbmwgQkVHIEVORCAmb3B0aW9uYWwgQVJHKQorCitDb21tZW50IG9yIHVuY29tbWVudCBlYWNoIGxpbmUgaW4gdGhlIHJlZ2lvbiB1c2luZyBgZG5sJy4KK1dpdGggXFxbdW5pdmVyc2FsLWFyZ3VtZW50XSBwcmVmaXggYXJnLCB1bmNvbW1lbnQgZWFjaCBsaW5lIGluIHJlZ2lvbi4KK1RoaXMgaXMgYGNvbW1lbnQtcmVnaW9uJywgYnV0IHVzaW5nIFwiZG5sXCIuIgorCisgIChpbnRlcmFjdGl2ZSAiclxuUCIpCisgIChsZXQgKChjb21tZW50LXN0YXJ0ICJkbmwiKQorCShjb21tZW50LWVuZCAiIikpCisgICAgKGNvbW1lbnQtcmVnaW9uIGJlZyBlbmQgYXJnKSkpCisKKworKHByb3ZpZGUgJ2dtcGFzbS1tb2RlKQorCis7OzsgZ21wYXNtLW1vZGUuZWwgZW5kcyBoZXJlCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL200LWNjYXMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL200LWNjYXMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTZkODBjNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vbTQtY2NhcwpAQCAtMCwwICsxLDEwNyBAQAorIyEvYmluL3NoCisjCisjIEEgaGVscGVyIHNjcmlwdCBmb3IgTWFrZWFzbS5hbSAuYXNtLmxvIHJ1bGUuCisKKyMgQ29weXJpZ2h0IDIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisjCisjICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKyMKKyMgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorIyAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisjICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgIG9yCisjCisjICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjICAgICAgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisjCisjICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjICBmb3IgbW9yZSBkZXRhaWxzLgorIworIyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorIyAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorIyAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKKyMgVXNhZ2U6IG00LWNjYXMgLS1tND1NNCBDQyAuLi4gZmlsZS5hc20gLi4uCisjCisjIFByb2Nlc3MgZmlsZS5hc20gd2l0aCB0aGUgZ2l2ZW4gTTQgcGx1cyBhbnkgLUQgYXJndW1lbnRzLCB0aGVuCisjIGFzc2VtYmxlIHdpdGggdGhlIGdpdmVuIENDIHBsdXMgYWxsIGFyZ3VtZW50cy4KKyMKKyMgVGhlIE00IGNvbW1hbmQgbXVzdCBiZSBpbiBhIHNpbmdsZSAtLW00PSBhcmd1bWVudCwgYW5kIHdpbGwgYmUgc3BsaXQKKyMgb24gd2hpdGVzcGFjZS4gIFdoZW4gQ0MgaXMgaW52b2tlZCBmaWxlLmFzbSBpcyByZXBsYWNlZCB3aXRoIGEKKyMgdGVtcG9yYXJ5IC5zIGZpbGUgd2hpY2ggaXMgdGhlIE00IG91dHB1dC4KKyMKKyMgVG8gYWxsb3cgcGFyYWxsZWwgYnVpbGRzLCB0aGUgdGVtcCBmaWxlIG5hbWUgaXMgYmFzZWQgb24gdGhlIC5hc20KKyMgZmlsZSBuYW1lLCB3aGljaCB3aWxsIGJlIHRoZSBvdXRwdXQgb2JqZWN0IGZpbGVuYW1lIGZvciBhbGwgdXNlcyB3ZQorIyBwdXQgdGhpcyBzY3JpcHQgdG8uCisKK000PQorQ0M9CitERUZTPQorQVNNPQorU0VFTl9PPW5vCisKK2ZvciBpIGluICIkQCI7IGRvCisgIGNhc2UgJGkgaW4KKyAgICAtLW00PSopCisgICAgICBNND1gZWNobyAiJGkiIHwgc2VkICdzL14tLW00PS8vJ2AKKyAgICAgIDs7CisgICAgLUQqKQorICAgICAgREVGUz0iJERFRlMgJGkiCisgICAgICBDQz0iJENDICRpIgorICAgICAgOzsKKyAgICAqLmFzbSkKKyAgICAgIGlmIHRlc3QgLW4gIiRBU00iOyB0aGVuCisgICAgICAgIGVjaG8gIk9ubHkgb25lIC5hc20gZmlsZSBwZXJtaXR0ZWQiCisgICAgICAgIGV4aXQgMQorICAgICAgZmkKKyAgICAgIEJBU0VOQU1FPWBlY2hvICIkaSIgfCBzZWQgLWUgJ3MvXC5hc20kLy8nIC1lICdzL14uKltcXC86XS8vJ2AKKyAgICAgIFRNUD10bXAtJEJBU0VOQU1FLnMKKyAgICAgIEFTTT0kaQorICAgICAgQ0M9IiRDQyAkVE1QIgorICAgICAgOzsKKyAgICAtbykKKyAgICAgIFNFRU5fTz15ZXMKKyAgICAgIENDPSIkQ0MgJGkiCisgICAgICA7OworICAgICopCisgICAgICBDQz0iJENDICRpIgorICAgICAgOzsKKyAgZXNhYworZG9uZQorCitpZiB0ZXN0IC16ICIkTTQiOyB0aGVuCisgIGVjaG8gIk5vIC0tbTQgc3BlY2lmaWVkIgorICBleGl0IDEKK2ZpCisKK2lmIHRlc3QgLXogIiRBU00iOyB0aGVuCisgIGVjaG8gIk5vIC5hc20gc3BlY2lmaWVkIgorICBleGl0IDEKK2ZpCisKKyMgTGlidG9vbCBhZGRzIGl0J3Mgb3duIC1vIHdoZW4gc2VuZGluZyBvdXRwdXQgdG8gLmxpYnMvZm9vLm8sIGJ1dCBub3QKKyMgd2hlbiBqdXN0IHdhbnRpbmcgZm9vLm8gaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgV2UgbmVlZCBhbgorIyBleHBsaWNpdCAtbyBpbiBib3RoIGNhc2VzIHNpbmNlIHdlJ3JlIGFzc2VtYmxpbmcgdG1wLWZvby5zLgorIworaWYgdGVzdCAkU0VFTl9PID0gbm87IHRoZW4KKyAgQ0M9IiRDQyAtbyAkQkFTRU5BTUUubyIKK2ZpCisKK2VjaG8gIiRNNCAkREVGUyAkQVNNID4kVE1QIgorJE00ICRERUZTICRBU00gPiRUTVAgfHwgZXhpdAorCitlY2hvICIkQ0MiCiskQ0MgfHwgZXhpdAorCisjIENvbW1lbnQgdGhpcyBvdXQgdG8gcHJlc2VydmUgLnMgaW50ZXJtZWRpYXRlcworcm0gLWYgJFRNUApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9tNjhrL1JFQURNRSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vbTY4ay9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI2MTU2NAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vbTY4ay9SRUFETUUKQEAgLTAsMCArMSwxMzggQEAKK0NvcHlyaWdodCAyMDAxLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworCisKKworICAgICAgICAgICAgICAgICAgICAgIE02OEsgTVBOIFNVQlJPVVRJTkVTCisKKworVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgbXBuIGZ1bmN0aW9ucyBmb3IgdmFyaW91cyBtNjhrIGZhbWlseSBjaGlwcy4KKworCitDT0RFIE9SR0FOSVpBVElPTgorCisJbTY4ayAgICAgICAgICAgICBtNjgwMDAsIG02ODAxMCwgbTY4MDYwCisJbTY4ay9tYzY4MDIwICAgICBtNjgwMjAsIG02ODAzMCwgbTY4MDQwLCBhbmQgQ1BVMzIKKworCitUaGUgbTUyMDAgImNvbGRmaXJlIiwgd2hpY2ggaXMgbTY4MDAwIGxlc3MgYSBmZXcgaW5zdHJ1Y3Rpb25zLCBjdXJyZW50bHkgaGFzCitubyBhc3NlbWJsZXIgY29kZSBzdXBwb3J0LgorCisKK1NUQVRVUworCitUaGUgY29kZSBoZXJlaW4gaXMgb2xkIGFuZCBwb29ybHkgbWFpbnRhaW5lZC4gIElmIHNvbWVib2R5IHJlYWxseSBjYXJlZCwgaXQKK2NvdWxkIGJlIG9wdGltaXplZCBzdWJzdGFudGlhbGx5LiAgRm9yIGV4YW1wbGUsCisKKyogbXBuX2FkZF9uIGFuZCBtcG5fc3ViX24gY291bGQsIHdpdGggbW9yZSB1bnJvbGxpbmcgYmUgaW1wcm92ZWQgZnJvbSA2IHRvCisgIGNsb3NlIHRvIDQgYy9sIChvbiBtNjgwNDApLgorCisqIFRoZSBtdWx0aXBsaWNhdGlvbiBsb29wcyBjb3VsZCBiZSBzcGVkIHVwIGJ5IHVzaW5nIHRoZSBGUFUuCisKKyogbXBuX2xzaGlmdCBieSAzMSBzaG91bGQgdXNlIHRoZSBzcGVjaWFsLWNhc2UgbXBuX3JzaGlmdCBieSAxIGNvZGUsIGFuZAorICB2aWNlIHZlcnNhIG1wbl9yc2hpZnQgYnkgMzEgdXNlIHRoZSBzcGVjaWFsIGxzaGlmdCBieSAxLCB3aGVuIG9wZXJhbmQKKyAgb3ZlcmxhcCBwZXJtaXRzLgorCisqIE9uIDY4MDAwLCBtcG5fbXVsXzEsIG1wbl9hZGRtdWxfMSBhbmQgbXBuX3N1Ym11bF8xIGNvdWxkIGNoZWNrIGZvciBhCisgIDE2LWJpdCBtdWx0aXBsaWVyIGFuZCB1c2UgdHdvIG11bHRpcGxpZXMgcGVyIGxpbWIsIG5vdCBmb3VyLgorCisgIFNpbWlsYXJseSB2YXJpb3VzIG90aGVyIF8xIG9wZXJhdGlvbnMgbGlrZSBtcG5fbW9kXzEsIG1wbl9kaXZyZW1fMSwKKyAgbXBuX2RpdmV4YWN0XzEsIG1wbl9tb2RleGFjdF8xY19vZGQuCisKKyogT24gNjgwMDAsIG1wbl9sc2hpZnQgYW5kIG1wbl9yc2hpZnQgY291bGQgdXNlIGEgcm9sbCBhbmQgbWFzayBpbnN0ZWFkIG9mCisgIGxzcmwgYW5kIGxzbGwuICBUaGlzIHByb21pc2VzIHRvIGJlIGEgc3BlZWR1cCwgZWZmZWN0aXZlbHkgdHJhZGluZyBhIDYrMipuCisgIHNoaWZ0IGZvciBvbmUgb3IgdHdvIDQgY3ljbGUgbWFza3MuICBTdWdnZXN0ZWQgYnkgSmVhbi1DaGFybGVzIE1leXJpZ25hYy4KKworKiBjb25maWcuZ3Vlc3MgZGV0ZWN0cyA2ODAwMCwgNjgwMTAsIENQVTMyIGFuZCA2ODAyMCBieSBydW5uaW5nIHNvbWUgY29kZSwKKyAgYnV0IHJlbGllcyBvbiBzeXN0ZW0gaW5mb3JtYXRpb24gZm9yIDAzMCwgMDQwIGFuZCAwNjAuICBDYW4gdGhleSBiZQorICBpZGVudGlmaWVkIGJ5IHJ1bm5pbmcgc29tZSBjb2RlPyAgQ3VycmVudGx5IHRoaXMgb25seSBtYWtlcyBhIGRpZmZlcmVuY2UKKyAgdG8gdGhlIGNvbXBpbGVyIG9wdGlvbnMgc2VsZWN0ZWQsIHNpbmNlIHdlIGhhdmUgbm8gc3BlY2lmaWMgYXNtIGNvZGUgZm9yCisgIHRob3NlIGNoaXBzLgorCitPbmUgbm92ZWwgaWRlYSBmb3IgNjgwMDAgd291bGQgYmUgdG8gdXNlIGEgMTYtYml0IGxpbWIgaW5zdGVhZCBvZiAzMi1iaXRzLgorVGhpcyB3b3VsZCBzdWl0IHRoZSBuYXRpdmUgMTZ4MTYgbXVsdGlwbHksIGJ1dCBtaWdodCBtYWtlIGl0IGRpZmZpY3VsdCB0bworZ2V0IGZ1bGwgdmFsdWUgZnJvbSB0aGUgbmF0aXZlIDMyeDMyIGFkZC9zdWIvZXRjLiAgVGhpcyB3b3VsZCBiZSBhbiBBQkkKK29wdGlvbiwgYW5kIHdvdWxkIHNlbGVjdCAiX19HTVBfU0hPUlRfTElNQiIgaW4gZ21wLmguCisKK05hdHVyYWxseSBhbiBlbnRpcmVseSBuZXcgc2V0IG9mIGFzbSBzdWJyb3V0aW5lcyB3b3VsZCBiZSBuZWVkZWQgZm9yIGEKKzE2LWJpdCBsaW1iLiAgQWxzbyB0aGVyZSdzIHZhcmlvdXMgcGxhY2VzIGluIHRoZSBDIGNvZGUgYXNzdW1pbmcgbGltYj49bG9uZywKK3doaWNoIHdvdWxkIG5lZWQgdG8gYmUgdXBkYXRlZCwgZWcuIG1wel9zZXRfdWkuICBTb21lIG9mIHRoZSBuYWlscyBjaGFuZ2VzCittYXkgaGF2ZSBoZWxwZWQgY292ZXIgc29tZSBvZiB0aGlzLgorCisKK0FTTSBGSUxFUworCitUaGUgLmFzbSBmaWxlcyBhcmUgcHV0IHRocm91Z2ggbTQgZm9yIG1hY3JvIHByb2Nlc3NpbmcsIGFuZCB3aXRoIHRoZSBoZWxwIG9mCitjb25maWd1cmUgZ2l2ZSBlaXRoZXIgTUlUIG9yIE1vdG9yb2xhIHN5bnRheC4gIFRoZSBnZW5lcmljIG1wbi9hc20tZGVmcy5tNAoraXMgdXNlZCwgdG9nZXRoZXIgd2l0aCBtcG4vbTY4ay9tNjhrLWRlZnMubTQuICBTZWUgY29tbWVudHMgaW4gdGhvc2UgZmlsZXMuCisKK05vdCBhbGwgcG9zc2libGUgc3ludGF4IHZhcmlhdGlvbnMgYXJlIGNvdmVyZWQuICBHQ0MgY29uZmlnL202OGsgZm9yCitpbnN0YW5jZSBoYXMgdGhpbmdzIGxpa2UgJCBmb3IgaW1tZWRpYXRlcyBvbiBDUkRTIG9yIHJldmVyc2VkIGNtcCBvcmRlciBmb3IKK0FUJlQgU0dTLiAgVGhlc2UgY291bGQgcHJvYmFibHkgYmUgaGFuZGxlZCBpZiBhbnlvbmUgcmVhbGx5IG5lZWRzIGl0LgorCisKK0NBTExJTkcgQ09OVkVOVElPTlMKKworVGhlIFNWUjQgc3RhbmRhcmQgaGFzIGFuIGludCBvZiAzMiBiaXRzLCBhbmQgYWxsIHBhcmFtZXRlcnMgMzItYml0IGFsaWduZWQKK29uIHRoZSBzdGFjay4KKworUGFsbU9TIGFuZCBwZXJoYXBzIHZhcmlvdXMgZW1iZWRkZWQgc3lzdGVtcyBpbnRlbmRlZCBmb3IgNjgwMDAgaG93ZXZlciB1c2UKK2FuIGludCBvZiAxNiBiaXRzIGFuZCBwYXJhbWV0ZXJzIG9ubHkgMTYtYml0IGFsaWduZWQgb24gdGhlIHN0YWNrLiAgVGhpcyBpcworZ2VuZXJhdGVkIGJ5ICJnY2MgLW1zaG9ydCIgKGFuZCBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlIFBhbG1PUyBnY2MgcG9ydCwgd2UKK2JlbGlldmUpLgorCitUaGUgYXNtIGZpbGVzIGFkYXB0IHRvIHRoZXNlIHR3byBBQklzIGJ5IGNoZWNraW5nIHNpemVvZih1bnNpZ25lZCksIGNvbWluZwordGhyb3VnaCBjb25maWcubTQgYXMgU0laRU9GX1VOU0lHTkVELiAgT25seSBtcG5fbHNoaWZ0IGFuZCBtcG5fcnNoaWZ0IGFyZQorYWZmZWN0ZWQsIGFsbCBvdGhlciByb3V0aW5lcyB0YWtlIGxvbmdzIGFuZCBwb2ludGVycywgd2hpY2ggYXJlIDMyLWJpdHMgaW4KK2JvdGggY2FzZXMuCisKK1N0cmljdGx5IHNwZWFraW5nIHRoZSBzaXplIG9mIGFuIGludCBkb2Vzbid0IGRldGVybWluZSB0aGUgc3RhY2sgcGFkZGluZworY29udmVudGlvbi4gIEJ1dCBpZiBpbnQgaXMgMTYgYml0cyB0aGVuIHdlIGNhbiBkZWZpbml0ZWx5IHNheSB0aGUgaG9zdAorc3lzdGVtIGlzIG5vdCBTVlI0LCBhbmQgdGhlcmVmb3JlIG1heSBhcyB3ZWxsIGFzc3VtZSB3ZSdyZSBpbiAxNi1iaXQgc3RhY2sKK2FsaWdubWVudC4KKworCitSRUZFUkVOQ0VTCisKKyJNb3Rvcm9sYSBNNjgwMDAgRmFtaWx5IFByb2dyYW1tZXIncyBSZWZlcmVuY2UgTWFudWFsIiwgYXZhaWxhYmxlIG9ubGluZSwKKworCWh0dHA6Ly9lLXd3dy5tb3Rvcm9sYS5jb20vYnJkYXRhL1BERkRCL2RvY3MvTTY4MDAwUE0ucGRmCisKKyJTeXN0ZW0gViBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlOiBNb3Rvcm9sYSA2ODAwMCBQcm9jZXNzb3IgRmFtaWx5CitTdXBwbGVtZW50IiwgQVQmVCwgMTk5MCwgSVNCTiAwLTEzLTg3NzU1My02LiAgSGFzIGRldGFpbHMgb2YgY2FsbGluZworY29udmVudGlvbnMgYW5kIEVMRiBzdHlsZSBQSUMgY29kaW5nLgorCisKKworLS0tLS0tLS0tLS0tLS0tLQorTG9jYWwgdmFyaWFibGVzOgorbW9kZTogdGV4dAorZmlsbC1jb2x1bW46IDc2CitFbmQ6CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL202OGsvYW9yc19uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vbTY4ay9hb3JzX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ZDM3OWUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL202OGsvYW9yc19uLmFzbQpAQCAtMCwwICsxLDk5IEBACitkbmwgIG1jNjgwMjAgbXBuX2FkZF9uLCBtcG5fc3ViX24gLS0gYWRkIG9yIHN1YnRyYWN0IGxpbWIgdmVjdG9ycworCitkbmwgIENvcHlyaWdodCAxOTkyLCAxOTk0LCAxOTk2LCAxOTk5LTIwMDMsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgIGN5Y2xlcy9saW1iCitDIDY4MDQwOiAgICAgIDYKKworaWZkZWYoYE9QRVJBVElPTl9hZGRfbicsYAorICBkZWZpbmUoTTRfaW5zdCwgICAgICAgYWRkeGwpCisgIGRlZmluZShNNF9mdW5jdGlvbl9uLCBtcG5fYWRkX24pCisnLGBpZmRlZihgT1BFUkFUSU9OX3N1Yl9uJyxgCisgIGRlZmluZShNNF9pbnN0LCAgICAgICBzdWJ4bCkKKyAgZGVmaW5lKE00X2Z1bmN0aW9uX24sIG1wbl9zdWJfbikKKycsCitgbTRfZXJyb3IoYE5lZWQgT1BFUkFUSU9OX2FkZF9uIG9yIE9QRVJBVElPTl9zdWJfbgorJyknKScpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FkZF9uIG1wbl9zdWJfbikKKworCitDIElOUFVUIFBBUkFNRVRFUlMKK0MgcmVzX3B0cgkoc3AgKyA0KQorQyBzMV9wdHIJKHNwICsgOCkKK0MgczJfcHRyCShzcCArIDEyKQorQyBzaXplCQkoc3AgKyAxNikKKworCitQUk9MT0dVRShNNF9mdW5jdGlvbl9uKQorCitDIFNhdmUgdXNlZCByZWdpc3RlcnMgb24gdGhlIHN0YWNrLgorCW1vdmVsCWQyLCBNKC0sc3ApCisJbW92ZWwJYTIsIE0oLSxzcCkKKworQyBDb3B5IHRoZSBhcmd1bWVudHMgdG8gcmVnaXN0ZXJzLiAgQmV0dGVyIHVzZSBtb3ZlbT8KKwltb3ZlbAlNKHNwLDEyKSwgYTIKKwltb3ZlbAlNKHNwLDE2KSwgYTAKKwltb3ZlbAlNKHNwLDIwKSwgYTEKKwltb3ZlbAlNKHNwLDI0KSwgZDIKKworCWVvcncJIzEsIGQyCisJbHNybAkjMSwgZDIKKwliY2MJTChMMSkKKwlzdWJxbAkjMSwgZDIJQyBjbGVhcnMgY3kgYXMgc2lkZSBlZmZlY3QKKworTChMb29wKToKKwltb3ZlbAlNKGEwLCspLCBkMAorCW1vdmVsCU0oYTEsKyksIGQxCisJTTRfaW5zdAlkMSwgZDAKKwltb3ZlbAlkMCwgTShhMiwrKQorTChMMSk6CW1vdmVsCU0oYTAsKyksIGQwCisJbW92ZWwJTShhMSwrKSwgZDEKKwlNNF9pbnN0CWQxLCBkMAorCW1vdmVsCWQwLCBNKGEyLCspCisKKwlkYmYJZDIsIEwoTG9vcCkJCUMgbG9vcCB1bnRpbCAxNiBsc2Igb2YgJTQgPT0gLTEKKwlzdWJ4bAlkMCwgZDAJCQlDIGQwIDw9IC1jeTsgc2F2ZSBjeSBhcyAwIG9yIC0xIGluIGQwCisJc3VibAkjMHgxMDAwMCwgZDIKKwliY3MJTChMMikKKwlhZGRsCWQwLCBkMAkJCUMgcmVzdG9yZSBjeQorCWJyYQlMKExvb3ApCisKK0woTDIpOgorCW5lZ2wJZDAKKworQyBSZXN0b3JlIHVzZWQgcmVnaXN0ZXJzIGZyb20gc3RhY2sgZnJhbWUuCisJbW92ZWwJTShzcCwrKSwgYTIKKwltb3ZlbAlNKHNwLCspLCBkMgorCisJcnRzCisKK0VQSUxPR1VFKE00X2Z1bmN0aW9uX24pCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL202OGsvZ21wLW1wYXJhbS5oIGIvdGhpcmRfcGFydHkvZ21wL21wbi9tNjhrL2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWM3YjQxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9tNjhrL2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDc2IEBACisvKiBnbXAtbXBhcmFtLmggLS0gQ29tcGlsZXIvbWFjaGluZSBwYXJhbWV0ZXIgaGVhZGVyIGZpbGUuCisKK0NvcHlyaWdodCAyMDAwLTIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKworI2RlZmluZSBHTVBfTElNQl9CSVRTIDMyCisjZGVmaW5lIEdNUF9MSU1CX0JZVEVTIDQKKworCisvKiAyNU1IeiA2ODA0MCAqLworCisvKiBHZW5lcmF0ZWQgYnkgdHVuZXVwLmMsIDIwMDQtMDItMDUsIGdjYyAzLjIgKi8KKworI2RlZmluZSBNVUxfVE9PTTIyX1RIUkVTSE9MRCAgICAgICAgICAgICAxNAorI2RlZmluZSBNVUxfVE9PTTMzX1RIUkVTSE9MRCAgICAgICAgICAgICA5MAorCisjZGVmaW5lIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICA1CisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgIDI4CisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgIDk4CisKKyNkZWZpbmUgRElWX1NCX1BSRUlOVl9USFJFU0hPTEQgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNTUKKyNkZWZpbmUgUE9XTV9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgNjUKKworI2RlZmluZSBIR0NEX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDExNgorI2RlZmluZSBHQ0RfQUNDRUxfVEhSRVNIT0xEICAgICAgICAgICAgICAgMworI2RlZmluZSBHQ0RfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDU5MAorI2RlZmluZSBKQUNPQklfQkFTRV9NRVRIT0QgICAgICAgICAgICAgICAgMgorCisjZGVmaW5lIERJVlJFTV8xX05PUk1fVEhSRVNIT0xEICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVlJFTV8xX1VOTk9STV9USFJFU0hPTEQgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIE1PRF8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAwCisjZGVmaW5lIFVTRV9QUkVJTlZfTU9EXzEgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIERJVlJFTV8yX1RIUkVTSE9MRCAgICAgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIE1PREVYQUNUXzFfT0REX1RIUkVTSE9MRCAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisKKyNkZWZpbmUgR0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgMTgKKyNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgNDMKKyNkZWZpbmUgU0VUX1NUUl9USFJFU0hPTEQgICAgICAgICAgICAgICA5MzcKKworI2RlZmluZSBNVUxfRkZUX1RBQkxFICB7IDMzNiwgNjcyLCAxNDA4LCAzNTg0LCAxMDI0MCwgMjQ1NzYsIDAgfQorI2RlZmluZSBNVUxfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgIDI5NgorI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTcyOAorCisjZGVmaW5lIFNRUl9GRlRfVEFCTEUgIHsgMzM2LCA3MzYsIDE0MDgsIDM1ODQsIDEwMjQwLCAyNDU3NiwgMCB9CisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgMjk2CisjZGVmaW5lIFNRUl9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAyMzA0CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL202OGsvbHNoaWZ0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vbTY4ay9sc2hpZnQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMDJhYmYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL202OGsvbHNoaWZ0LmFzbQpAQCAtMCwwICsxLDE3NSBAQAorZG5sICBtYzY4MDIwIG1wbl9sc2hpZnQgLS0gbXBuIGxlZnQgc2hpZnQuCisKK2RubCAgQ29weXJpZ2h0IDE5OTYsIDE5OTktMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MgICAgICAgICAgIGN5Y2xlcy9saW1iCitDICAgICAgICBzaGlmdD09MSAgc2hpZnQ+MQorQyA2ODA0MDogICAgNSAgICAgICAgIDEyCisKKworQyBtcF9saW1iX3QgbXBuX2xzaGlmdCAobXBfcHRyIHJlc19wdHIsIG1wX3NyY3B0ciBzX3B0ciwgbXBfc2l6ZV90IHNfc2l6ZSwKK0MgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNudCk7CitDCitDIFRoZSAiY250IiBwYXJhbWV0ZXIgaXMgZWl0aGVyIDE2IGJpdHMgb3IgMzIgYml0cyBkZXBlbmRpbmcgb24KK0MgU0laRU9GX1VOU0lHTkVEIChzZWUgQUJJIG5vdGVzIGluIG1wbi9tNjhrL1JFQURNRSkuICBUaGUgdmFsdWUgaXMgb2YKK0MgY291cnNlIG9ubHkgMSB0byAzMS4gIFdoZW4gbG9hZGVkIGFzIDE2IGJpdHMgdGhlcmUncyBnYXJiYWdlIGluIHRoZSB1cHBlcgorQyBoYWxmLCBoZW5jZSB0aGUgdXNlIG9mIGNtcHcuICBUaGUgc2hpZnQgaW5zdHJ1Y3Rpb25zIHRha2UgdGhlIHRoZWlyIGNvdW50CitDIG1vZHVsbyA2NCwgc28gdGhlIHVwcGVyIHBhcnQgZG9lc24ndCBtYXR0ZXIgdG8gdGhlbSBlaXRoZXIuCitDCisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyByZXNfcHRyCShzcCArIDQpCitDIHNfcHRyCQkoc3AgKyA4KQorQyBzX3NpemUJKHNwICsgMTIpCitDIGNudAkJKHNwICsgMTYpCisKK2RlZmluZShyZXNfcHRyLCBgYTEnKQorZGVmaW5lKHNfcHRyLCAgIGBhMCcpCitkZWZpbmUoc19zaXplLCAgYGQ2JykKK2RlZmluZShjbnQsICAgICBgZDQnKQorCitpZmRlZihgU0laRU9GX1VOU0lHTkVEJywsCitgbTRfZXJyb3IoYFNJWkVPRl9VTlNJR05FRCBub3QgZGVmaW5lZCwgc2hvdWxkIGJlIGluIGNvbmZpZy5tNAorJyknKQorCitQUk9MT0dVRShtcG5fbHNoaWZ0KQorQyBTYXZlIHVzZWQgcmVnaXN0ZXJzIG9uIHRoZSBzdGFjay4KKwltb3ZlbWwJZDItZDYvYTIsIE0oLSxzcCkKKworQyBDb3B5IHRoZSBhcmd1bWVudHMgdG8gcmVnaXN0ZXJzLgorCW1vdmVsCU0oc3AsMjgpLCByZXNfcHRyCisJbW92ZWwJTShzcCwzMiksIHNfcHRyCisJbW92ZWwJTShzcCwzNiksIHNfc2l6ZQoraWZlbHNlKFNJWkVPRl9VTlNJR05FRCwyLAorYAltb3ZldwlNKHNwLDQwKSwgY250JywKK2AJbW92ZWwJTShzcCw0MCksIGNudCcpCisKKwltb3ZlcWwJIzEsIGQ1CisJY21wdwlkNSwgY250CisJYm5lCUwoTG5vcm1hbCkKKwljbXBsCXNfcHRyLCByZXNfcHRyCisJYmxzCUwoTHNwZWNpYWwpCQlDIGp1bXAgaWYgc19wdHIgPj0gcmVzX3B0cgorCitpZmVsc2Uoc2NhbGVfYXZhaWxhYmxlX3AsMSxgCisJbGVhCU0oc19wdHIsc19zaXplLGwsNCksIGEyCisnLGAKKwltb3ZlbAlzX3NpemUsIGQwCisJYXNsbAkjMiwgZDAKKwlsZWEJTShzX3B0cixkMCxsKSwgYTIKKycpCisJY21wbAlyZXNfcHRyLCBhMgorCWJscwlMKExzcGVjaWFsKQkJQyBqdW1wIGlmIHJlc19wdHIgPj0gc19wdHIgKyBzX3NpemUKKworTChMbm9ybWFsKToKKwltb3ZlcWwJIzMyLCBkNQorCXN1YmwJY250LCBkNQorCitpZmVsc2Uoc2NhbGVfYXZhaWxhYmxlX3AsMSxgCisJbGVhCU0oc19wdHIsc19zaXplLGwsNCksIHNfcHRyCisJbGVhCU0ocmVzX3B0cixzX3NpemUsbCw0KSwgcmVzX3B0cgorJyxgCisJbW92ZWwJc19zaXplLCBkMAorCWFzbGwJIzIsIGQwCisJYWRkbAlkMCwgc19wdHIKKwlhZGRsCWQwLCByZXNfcHRyCisnKQorCW1vdmVsCU0oLSxzX3B0ciksIGQyCisJbW92ZWwJZDIsIGQwCisJbHNybAlkNSwgZDAJCUMgY29tcHV0ZSBjYXJyeSBsaW1iCisKKwlsc2xsCWNudCwgZDIKKwltb3ZlbAlkMiwgZDEKKwlzdWJxbAkjMSwgc19zaXplCisJYmVxCUwoTGVuZCkKKwlsc3JsCSMxLCBzX3NpemUKKwliY3MJTChMMSkKKwlzdWJxbAkjMSwgc19zaXplCisKK0woTG9vcCk6CisJbW92ZWwJTSgtLHNfcHRyKSwgZDIKKwltb3ZlbAlkMiwgZDMKKwlsc3JsCWQ1LCBkMworCW9ybAlkMywgZDEKKwltb3ZlbAlkMSwgTSgtLHJlc19wdHIpCisJbHNsbAljbnQsIGQyCitMKEwxKToKKwltb3ZlbAlNKC0sc19wdHIpLCBkMQorCW1vdmVsCWQxLCBkMworCWxzcmwJZDUsIGQzCisJb3JsCWQzLCBkMgorCW1vdmVsCWQyLCBNKC0scmVzX3B0cikKKwlsc2xsCWNudCwgZDEKKworCWRiZglzX3NpemUsIEwoTG9vcCkKKwlzdWJsCSMweDEwMDAwLCBzX3NpemUKKwliY2MJTChMb29wKQorCitMKExlbmQpOgorCW1vdmVsCWQxLCBNKC0scmVzX3B0cikJQyBzdG9yZSBsZWFzdCBzaWduaWZpY2FudCBsaW1iCisKK0MgUmVzdG9yZSB1c2VkIHJlZ2lzdGVycyBmcm9tIHN0YWNrIGZyYW1lLgorCW1vdmVtbAlNKHNwLCspLCBkMi1kNi9hMgorCXJ0cworCitDIFdlIGxvb3AgZnJvbSBsZWFzdCBzaWduaWZpY2FudCBlbmQgb2YgdGhlIGFycmF5cywgd2hpY2ggaXMgb25seQorQyBwZXJtaXNzYWJsZSBpZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkb24ndCBvdmVybGFwLCBzaW5jZSB0aGUKK0MgZnVuY3Rpb24gaXMgZG9jdW1lbnRlZCB0byB3b3JrIGZvciBvdmVybGFwcGluZyBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uLgorCitMKExzcGVjaWFsKToKKwljbHJsCWQwCQkJQyBpbml0aWFsaXplIGNhcnJ5CisJZW9ydwkjMSwgc19zaXplCisJbHNybAkjMSwgc19zaXplCisJYmNjCUwoTEwxKQorCXN1YnFsCSMxLCBzX3NpemUKKworTChMTG9vcCk6CisJbW92ZWwJTShzX3B0ciwrKSwgZDIKKwlhZGR4bAlkMiwgZDIKKwltb3ZlbAlkMiwgTShyZXNfcHRyLCspCitMKExMMSk6CisJbW92ZWwJTShzX3B0ciwrKSwgZDIKKwlhZGR4bAlkMiwgZDIKKwltb3ZlbAlkMiwgTShyZXNfcHRyLCspCisKKwlkYmYJc19zaXplLCBMKExMb29wKQorCWFkZHhsCWQwLCBkMAkJQyBzYXZlIGN5IGluIGxzYgorCXN1YmwJIzB4MTAwMDAsIHNfc2l6ZQorCWJjcwlMKExMZW5kKQorCWxzcmwJIzEsIGQwCQlDIHJlc3RvcmUgY3kKKwlicmEJTChMTG9vcCkKKworTChMTGVuZCk6CitDIFJlc3RvcmUgdXNlZCByZWdpc3RlcnMgZnJvbSBzdGFjayBmcmFtZS4KKwltb3ZlbWwJTShzcCwrKSwgZDItZDYvYTIKKwlydHMKKworRVBJTE9HVUUobXBuX2xzaGlmdCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vbTY4ay9tNjhrLWRlZnMubTQgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL202OGsvbTY4ay1kZWZzLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1Mjg5ZjYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL202OGsvbTY4ay1kZWZzLm00CkBAIC0wLDAgKzEsMjMwIEBACitkaXZlcnQoLTEpCisKK2RubCAgbTQgbWFjcm9zIGZvciA2OGsgYXNzZW1ibGVyLgorCitkbmwgIENvcHlyaWdodCAyMDAxLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCitkbmwgIFRoZSBkZWZhdWx0IG00IGAjJyBjb21tZW50aW5nIGludGVyZmVyZXMgd2l0aCB0aGUgYXNzZW1ibGVyIHN5bnRheCBmb3IKK2RubCAgaW1tZWRpYXRlcy4gIGB8JyB3b3VsZCBiZSBjb3JyZWN0LCBidXQgaXQgaW50ZXJmZXJlcyB3aXRoICJ8fCIgaW4KK2RubCAgZXZhbCgpLiAgV291bGQgbGlrZSB0byBkaXNhYmxlIGNvbW1lbnRpbmcsIGJ1dCB0aGF0J3Mgbm90IHBvc3NpYmxlIChzZWUKK2RubCAgbXBuL2FzbS1kZWZzLm00KSwgc28gdXNlIGA7JyB3aGljaCBzaG91bGQgYmUgaGFybWxlc3MuCisKK2NoYW5nZWNvbSg7KQorCisKK2RubCAgQ2FsbGVkOiBQUk9MT0dVRV9jcHUoR1NZTV9QUkVGSVhgJ2ZvbykKK2RubAorZG5sICBTYW1lIGFzIHRoZSBzdGFuZGFyZCBQUk9MT0dVRSwgYnV0IGFsaWduIHRvIDIgYnl0ZXMgbm90IDQuCisKK2RlZmluZShgUFJPTE9HVUVfY3B1JywKK200X2Fzc2VydF9udW1hcmdzKDEpCitgCVRFWFQKKwlBTElHTigyKQorCUdMT0JMCWAkMScgR0xPQkxfQVRUUgorCVRZUEUoYCQxJyxgZnVuY3Rpb24nKQorYCQxJ0xBQkVMX1NVRkZJWCcpCisKKworZG5sICBVc2FnZTogZDAsIGV0YworZG5sCitkbmwgIEV4cGFuZCB0byBkMCBvciAlZDAgYWNjb3JkaW5nIHRvIHRoZSBhc3NlbWJsZXIncyByZXF1aXJlbWVudHMuCitkbmwKK2RubCAgQWN0dWFsbHkgZDAgZXhwYW5kcyB0byBgZDAnIG9yICVgZDAnLCB0aGUgcXVvdGVzIHByb3RlY3RpbmcgYWdhaW5zdAorZG5sICBmdXJ0aGVyIGV4cGFuc2lvbi4gIERlZmluaXRpb25zIGFyZSBtYWRlIGV2ZW4gaWYgZDAgaXMgdG8gYmUganVzdCBgZDAnLAorZG5sICBzbyB0aGF0IGFueSBtNCBxdW90aW5nIHByb2JsZW1zIHdpbGwgc2hvdyB1cCBldmVyeXdoZXJlLCBub3QganVzdCBvbiBhCitkbmwgICVkMCBzeXN0ZW0uCitkbmwKK2RubCAgQ2FyZSBtdXN0IGJlIHRha2VuIHdpdGggcXVvdGluZyB3aGVuIHVzaW5nIHRoZXNlIGluIGEgZGVmaW5pdGlvbi4gIEZvcgorZG5sICBpbnN0YW5jZSB0aGUgcXVvdGVzIGluIHRoZSBmb2xsb3dpbmcgYXJlIGVzc2VudGlhbCBvciB0d28gJSdzIHdpbGwgYmUKK2RubCAgcHJvZHVjZWQgd2hlbiBgY291bnRlcicgaXMgdXNlZC4KK2RubAorZG5sICAgICAgICAgZGVmaW5lKGNvdW50ZXIsIGBkNycpCitkbmwKKworZG5sICBDYWxsZWQ6IG02OGtfcmVnKHIpCitkZWZpbmUobTY4a19yZWcsCittNF9hc3NlcnRfbnVtYXJncygxKQorbTRfYXNzZXJ0X2RlZmluZWQoYFdBTlRfUkVHSVNURVJfUEVSQ0VOVCcpCitgaWZlbHNlKFdBTlRfUkVHSVNURVJfUEVSQ0VOVCx5ZXMsJSlgJDEnJykKKworZG5sICBVc2FnZTogbTY4a19kZWZyZWcocikKK2RlZmluZShtNjhrX2RlZnJlZywKK200X2Fzc2VydF9udW1hcmdzKDEpCitgZGVmbGl0KCQxLGBtNjhrX3JlZyhgJDEnKScpJykKKworbTY4a19kZWZyZWcoZDApCittNjhrX2RlZnJlZyhkMSkKK202OGtfZGVmcmVnKGQyKQorbTY4a19kZWZyZWcoZDMpCittNjhrX2RlZnJlZyhkNCkKK202OGtfZGVmcmVnKGQ1KQorbTY4a19kZWZyZWcoZDYpCittNjhrX2RlZnJlZyhkNykKKworbTY4a19kZWZyZWcoYTApCittNjhrX2RlZnJlZyhhMSkKK202OGtfZGVmcmVnKGEyKQorbTY4a19kZWZyZWcoYTMpCittNjhrX2RlZnJlZyhhNCkKK202OGtfZGVmcmVnKGE1KQorbTY4a19kZWZyZWcoYTYpCittNjhrX2RlZnJlZyhhNykKKworbTY4a19kZWZyZWcoc3ApCittNjhrX2RlZnJlZyhwYykKKworCitkbmwgIFVzYWdlOiBNKGJhc2UpCitkbmwgICAgICAgICBNKGJhc2UsZGlzcGxhY2VtZW50KQorZG5sICAgICAgICAgTShiYXNlLGluZGV4LHNpemUpCitkbmwgICAgICAgICBNKGJhc2UsaW5kZXgsc2l6ZSxzY2FsZSkKK2RubCAgICAgICAgIE0oYmFzZSwrKQorZG5sICAgICAgICAgTSgtLGJhc2UpCitkbmwKK2RubCAgYGJhc2UnIGlzIGFuIGFkZHJlc3MgcmVnaXN0ZXIsIGBpbmRleCcgaXMgYSBkYXRhIHJlZ2lzdGVyLCBgc2l6ZScgaXMgdworZG5sICBvciBsLCBhbmQgc2NhbGUgaXMgMSwgMiwgNCBvciA4LgorZG5sCitkbmwgIE0oLSxiYXNlKSBoYXMgaXQncyBhcmd1bWVudHMgdGhhdCB3YXkgYXJvdW5kIHRvIGVtcGhhc2lzZSBpdCdzIGEKK2RubCAgcHJlLWRlY3JlbWVudCwgYXMgb3Bwb3NlZCB0byBNKGJhc2UsKykgYSBwb3N0LWluY3JlbWVudC4KK2RubAorZG5sICBFbmhhbmNlbWVudDogQWRkIHRoZSBtZW1vcnkgaW5kaXJlY3QgbW9kZXMsIGlmL3doZW4gdGhleSdyZSBuZWVkZWQuCisKK2RlZmluZShNLAorbTRfYXNzZXJ0X251bWFyZ3NfcmFuZ2UoMSw0KQorbTRfYXNzZXJ0X2RlZmluZWQoYFdBTlRfQUREUkVTU0lORycpCitgaWZlbHNlKFdBTlRfQUREUkVTU0lORyxtaXQsCitgaWZlbHNlKCQjLDEsIGBgJDEnQCcpZG5sCitpZmVsc2UoJCMsMiwKK2BpZmVsc2UoJDIsKywgYGAkMSdAKycsCitgaWZlbHNlKCQxLC0sIGBgJDInQC0nLAorICAgICAgICAgICAgICBgYCQxJ0AoJDIpJyknKScpZG5sCitpZmVsc2UoJCMsMywgIGBgJDEnQChgJDInOmAkMycpJylkbmwKK2lmZWxzZSgkIyw0LCAgYGAkMSdAKGAkMic6YCQzJzokNCknKScsCisKK2RubCAgV0FOVF9BRERSRVNTSU5HIGBtb3Rvcm9sYScKK2BpZmVsc2UoJCMsMSwgYChgJDEnKScpZG5sCitpZmVsc2UoJCMsMiwKK2BpZmVsc2UoJDIsKywgYChgJDEnKSsnLAorYGlmZWxzZSgkMSwtLCBgLShgJDInKScsCisgICAgICAgICAgICAgIGAkMihgJDEnKScpJyknKWRubAoraWZlbHNlKCQjLDMsICBgKGAkMScsYCQyJy4kMyknKWRubAoraWZlbHNlKCQjLDQsICBgKGAkMScsYCQyJy4kMyokNCknKScpJykKKworCitkbmwgIFVzYWdlOiBhZGRsIGV0YworZG5sCitkbmwgIG02OGsgaW5zdHJ1Y3Rpb25zIHdpdGggc3BlY2lhbCBoYW5kbGluZyBmb3IgdGhlIHN1ZmZpeCwgd2l0aCBmb3IKK2RubCAgaW5zdGFuY2UgYWRkbCBleHBhbmRpbmcgdG8gYWRkbCBvciBhZGQubCBhcyBuZWNlc3NhcnkuCitkbmwKK2RubCAgU2VlIGFsc28gdC1tNjhrLWRlZnMucGwgd2hpY2ggdmVyaWZpZXMgYWxsIG1uZW1vbmljcyB1c2VkIGluIHRoZSBhc20KK2RubCAgZmlsZXMgaGF2ZSBlbnRyaWVzIGhlcmUuCisKK2RubCAgQ2FsbGVkOiBtNjhrX2luc24obW5lbW9uaWMsc3VmZml4KQorZGVmaW5lKG02OGtfaW5zbiwKK200X2Fzc2VydF9udW1hcmdzKDIpCittNF9hc3NlcnRfZGVmaW5lZChgV0FOVF9ET1RfU0laRScpCitgaWZlbHNlKFdBTlRfRE9UX1NJWkUseWVzLCBgYCQxJy5gYCQyJycnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYGAkMSQyJycpJykKKworZG5sICBVc2FnZTogbTY4a19kZWZpbnNuKG1uZW1vbmljLHN1ZmZpeCkKK2RlZmluZShtNjhrX2RlZmluc24sCittNF9hc3NlcnRfbnVtYXJncygyKQorYGRlZmxpdCgkMWAnJDIsYG02OGtfaW5zbihgJDEnLGAkMicpJyknKQorCittNjhrX2RlZmluc24oYWRkLCAgbCkKK202OGtfZGVmaW5zbihhZGR4LCBsKQorbTY4a19kZWZpbnNuKGFkZHEsIGwpCittNjhrX2RlZmluc24oYXNsLCAgbCkKK202OGtfZGVmaW5zbihjbXAsICBsKQorbTY4a19kZWZpbnNuKGNtcCwgIHcpCittNjhrX2RlZmluc24oY2xyLCAgbCkKK202OGtfZGVmaW5zbihkaXZ1LCBsKQorbTY4a19kZWZpbnNuKGVvciwgIHcpCittNjhrX2RlZmluc24obHNsLCAgbCkKK202OGtfZGVmaW5zbihsc3IsICBsKQorbTY4a19kZWZpbnNuKG1vdmUsIGwpCittNjhrX2RlZmluc24obW92ZSwgdykKK202OGtfZGVmaW5zbihtb3ZlbSxsKQorbTY4a19kZWZpbnNuKG1vdmVxLGwpCittNjhrX2RlZmluc24obXVsdSwgbCkKK202OGtfZGVmaW5zbihuZWcsICBsKQorbTY4a19kZWZpbnNuKG9yLCAgIGwpCittNjhrX2RlZmluc24ocm94bCwgbCkKK202OGtfZGVmaW5zbihyb3hyLCBsKQorbTY4a19kZWZpbnNuKHN1YiwgIGwpCittNjhrX2RlZmluc24oc3VieCwgbCkKK202OGtfZGVmaW5zbihzdWJxLCBsKQorCisKK2RubCAgVXNhZ2U6IGJyYSBldGMKK2RubAorZG5sICBFeHBhbmQgdG8gYGJyYScsIGBqcmEnIG9yIGBqYnJhJyBhY2NvcmRpbmcgdG8gd2hhdCB0aGUgYXNzZW1ibGVyIHdpbGwKK2RubCAgYWNjZXB0LiAgVGhlIGxhdHRlciB0d28gZ2l2ZSB2YXJpYWJsZS1zaXplZCBicmFuY2hlcyBpbiBnYXMuCitkbmwKK2RubCAgU2VlIGFsc28gdC1tNjhrLWRlZnMucGwgd2hpY2ggdmVyaWZpZXMgYWxsIHRoZSBiWFggYnJhbmNoZXMgdXNlZCBpbiB0aGUKK2RubCAgYXNtIGZpbGVzIGhhdmUgZW50cmllcyBoZXJlLgorCitkbmwgIENhbGxlZDogbTY4a19icmFuY2goY29uZCkKK2RlZmluZShtNjhrX2JyYW5jaCwKK200X2Fzc2VydF9udW1hcmdzKDEpCittNF9hc3NlcnRfZGVmaW5lZChgV0FOVF9CUkFOQ0hFUycpCitgaWZlbHNlKFdBTlRfQlJBTkNIRVMsanJhLCBgaiQxJywKK2BpZmVsc2UoV0FOVF9CUkFOQ0hFUyxqYnJhLGBqYiQxJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgYiQxJycpJyknKQorCitkbmwgIENhbGxlZDogbTY4a19kZWZicmFuY2goY29uZCkKK2RlZmluZShtNjhrX2RlZmJyYW5jaCwKK200X2Fzc2VydF9udW1hcmdzKDEpCitgZGVmbGl0KGIkMSxgbTY4a19icmFuY2goYCQxJyknKScpCisKK202OGtfZGVmYnJhbmNoKHJhKQorbTY4a19kZWZicmFuY2goY2MpCittNjhrX2RlZmJyYW5jaChjcykKK202OGtfZGVmYnJhbmNoKGxzKQorbTY4a19kZWZicmFuY2goZXEpCittNjhrX2RlZmJyYW5jaChuZSkKKworCitkbmwgIFVzYWdlOiBzY2FsZV9hdmFpbGFibGVfcAorZG5sCitkbmwgIEV4cGFuZCB0byAxIGlmIGEgc2NhbGUgZmFjdG9yIGNhbiBiZSB1c2VkIGluIGFkZHJlc3NpbmcgbW9kZXMsIG9yIDAgaWYKK2RubCAgbm90LiAgTShhMCxkMCxsLDQpLCBtZWFuaW5nIGEwK2QwKjQsIGlzIG5vdCBhdmFpbGFibGUgaW4gNjgwMDAgb3IKK2RubCAgNjgwMTAsIGJ1dCBpcyBpbiBDUFUzMiBhbmQgaW4gNjgwMjAgYW5kIHVwLgorCitkZWZpbmUoc2NhbGVfYXZhaWxhYmxlX3AsCitgbTRfaWZkZWZfYW55b2ZfcCgKK2BIQVZFX0hPU1RfQ1BVX202ODM2MCcKK2BIQVZFX0hPU1RfQ1BVX202ODAyMCcKK2BIQVZFX0hPU1RfQ1BVX202ODAzMCcKK2BIQVZFX0hPU1RfQ1BVX202ODA0MCcKK2BIQVZFX0hPU1RfQ1BVX202ODA2MCcpJykKKworCitkaXZlcnQKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vbTY4ay9tYzY4MDIwL2FvcnNtdWxfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL202OGsvbWM2ODAyMC9hb3JzbXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZTMwYWQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL202OGsvbWM2ODAyMC9hb3JzbXVsXzEuYXNtCkBAIC0wLDAgKzEsMTAxIEBACitkbmwgIG1jNjgwMjAgbXBuX2FkZG11bF8xLCBtcG5fc3VibXVsXzEgLS0gYWRkIG9yIHN1YnRyYWN0IG1wbiBtdWx0aXBsZS4KKworZG5sICBDb3B5cmlnaHQgMTk5MiwgMTk5NCwgMTk5NiwgMTk5OS0yMDAyLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICBjeWNsZXMvbGltYgorQyA2ODA0MDogICAgIDI1CisKK2lmZGVmKGBPUEVSQVRJT05fYWRkbXVsXzEnLGAKKyAgZGVmaW5lKE00X2luc3QsICAgICAgIGFkZGwpCisgIGRlZmluZShNNF9mdW5jdGlvbl8xLCBtcG5fYWRkbXVsXzEpCisnLGBpZmRlZihgT1BFUkFUSU9OX3N1Ym11bF8xJyxgCisgIGRlZmluZShNNF9pbnN0LCAgICAgICBzdWJsKQorICBkZWZpbmUoTTRfZnVuY3Rpb25fMSwgbXBuX3N1Ym11bF8xKQorJywKK2BtNF9lcnJvcihgTmVlZCBPUEVSQVRJT05fYWRkbXVsXzEgb3IgT1BFUkFUSU9OX3N1Ym11bF8xCisnKScpJykKKworCitDIElOUFVUIFBBUkFNRVRFUlMKK0MgcmVzX3B0cgkoc3AgKyA0KQorQyBzMV9wdHIJKHNwICsgOCkKK0MgczFfc2l6ZQkoc3AgKyAxMikKK0MgczJfbGltYgkoc3AgKyAxNikKKworZGVmaW5lKHJlc19wdHIsIGBhMCcpCitkZWZpbmUoczFfcHRyLCAgYGExJykKK2RlZmluZShzMV9zaXplLCBgZDInKQorZGVmaW5lKHMyX2xpbWIsIGBkNCcpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FkZG11bF8xIG1wbl9zdWJtdWxfMSkKKworUFJPTE9HVUUoTTRfZnVuY3Rpb25fMSkKKworQyBTYXZlIHVzZWQgcmVnaXN0ZXJzIG9uIHRoZSBzdGFjay4KKwltb3ZlbWwJZDItZDUsIE0oLSxzcCkKKworQyBDb3B5IHRoZSBhcmd1bWVudHMgdG8gcmVnaXN0ZXJzLiAgQmV0dGVyIHVzZSBtb3ZlbT8KKwltb3ZlbAlNKHNwLDIwKSwgcmVzX3B0cgorCW1vdmVsCU0oc3AsMjQpLCBzMV9wdHIKKwltb3ZlbAlNKHNwLDI4KSwgczFfc2l6ZQorCW1vdmVsCU0oc3AsMzIpLCBzMl9saW1iCisKKwllb3J3CSMxLCBzMV9zaXplCisJY2xybAlkMQorCWNscmwJZDUKKwlsc3JsCSMxLCBzMV9zaXplCisJYmNjCUwoTDEpCisJc3VicWwJIzEsIHMxX3NpemUKKwlzdWJsCWQwLCBkMAkJQyAoZDAsY3kpIDw9ICgwLDApCisKK0woTG9vcCk6CisJbW92ZWwJTShzMV9wdHIsKyksIGQzCisJbXVsdWwJczJfbGltYiwgZDE6ZDMKKwlhZGR4bAlkMCwgZDMKKwlhZGR4bAlkNSwgZDEKKwlNNF9pbnN0CWQzLCBNKHJlc19wdHIsKykKK0woTDEpOgltb3ZlbAlNKHMxX3B0ciwrKSwgZDMKKwltdWx1bAlzMl9saW1iLCBkMDpkMworCWFkZHhsCWQxLCBkMworCWFkZHhsCWQ1LCBkMAorCU00X2luc3QJZDMsIE0ocmVzX3B0ciwrKQorCisJZGJmCXMxX3NpemUsIEwoTG9vcCkKKwlhZGR4bAlkNSwgZDAKKwlzdWJsCSMweDEwMDAwLCBzMV9zaXplCisJYmNjCUwoTG9vcCkKKworQyBSZXN0b3JlIHVzZWQgcmVnaXN0ZXJzIGZyb20gc3RhY2sgZnJhbWUuCisJbW92ZW1sCU0oc3AsKyksIGQyLWQ1CisKKwlydHMKKworRVBJTE9HVUUoTTRfZnVuY3Rpb25fMSkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vbTY4ay9tYzY4MDIwL211bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vbTY4ay9tYzY4MDIwL211bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWZiYjMwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9tNjhrL21jNjgwMjAvbXVsXzEuYXNtCkBAIC0wLDAgKzEsOTYgQEAKK2RubCAgbWM2ODAyMCBtcG5fbXVsXzEgLS0gbXBuIGJ5IGxpbWIgbXVsdGlwbHkKKworZG5sICBDb3B5cmlnaHQgMTk5MiwgMTk5NCwgMTk5NiwgMTk5OS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICBjeWNsZXMvbGltYgorQyA2ODA0MDogICAgIDI0CisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyByZXNfcHRyCShzcCArIDQpCitDIHMxX3B0cgkoc3AgKyA4KQorQyBzMV9zaXplCShzcCArIDEyKQorQyBzMl9saW1iCShzcCArIDE2KQorCisKK2RlZmluZShyZXNfcHRyLCBgYTAnKQorZGVmaW5lKHMxX3B0ciwgIGBhMScpCitkZWZpbmUoczFfc2l6ZSwgYGQyJykKK2RlZmluZShzMl9saW1iLCBgZDQnKQorCisKK1BST0xPR1VFKG1wbl9tdWxfMSkKKworQyBTYXZlIHVzZWQgcmVnaXN0ZXJzIG9uIHRoZSBzdGFjay4KKwltb3ZlbWwJZDItZDQsIE0oLSxzcCkKKworQwltb3ZlbAlkMiwgTSgtLHNwKQorQwltb3ZlbAlkMywgTSgtLHNwKQorQwltb3ZlbAlkNCwgTSgtLHNwKQorCitDIENvcHkgdGhlIGFyZ3VtZW50cyB0byByZWdpc3RlcnMuICBCZXR0ZXIgdXNlIG1vdmVtPworCW1vdmVsCU0oc3AsMTYpLCByZXNfcHRyCisJbW92ZWwJTShzcCwyMCksIHMxX3B0cgorCW1vdmVsCU0oc3AsMjQpLCBzMV9zaXplCisJbW92ZWwJTShzcCwyOCksIHMyX2xpbWIKKworCWVvcncJIzEsIHMxX3NpemUKKwljbHJsCWQxCisJbHNybAkjMSwgczFfc2l6ZQorCWJjYwlMKEwxKQorCXN1YnFsCSMxLCBzMV9zaXplCisJc3VibAlkMCwgZDAJCUMgKGQwLGN5KSA8PSAoMCwwKQorCitMKExvb3ApOgorCW1vdmVsCU0oczFfcHRyLCspLCBkMworCW11bHVsCXMyX2xpbWIsIGQxOmQzCisJYWRkeGwJZDAsIGQzCisJbW92ZWwJZDMsIE0ocmVzX3B0ciwrKQorTChMMSk6CW1vdmVsCU0oczFfcHRyLCspLCBkMworCW11bHVsCXMyX2xpbWIsIGQwOmQzCisJYWRkeGwJZDEsIGQzCisJbW92ZWwJZDMsIE0ocmVzX3B0ciwrKQorCisJZGJmCXMxX3NpemUsIEwoTG9vcCkKKwljbHJsCWQzCisJYWRkeGwJZDMsIGQwCisJc3VibAkjMHgxMDAwMCwgczFfc2l6ZQorCWJjYwlMKExvb3ApCisKK0MgUmVzdG9yZSB1c2VkIHJlZ2lzdGVycyBmcm9tIHN0YWNrIGZyYW1lLgorCW1vdmVtbAlNKHNwLCspLCBkMi1kNAorCitDCW1vdmVsCU0oc3AsKyksZDQKK0MJbW92ZWwJTShzcCwrKSxkMworQwltb3ZlbAlNKHNwLCspLGQyCisKKwlydHMKKworRVBJTE9HVUUobXBuX211bF8xKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9tNjhrL21jNjgwMjAvdWRpdi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL202OGsvbWM2ODAyMC91ZGl2LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWRlYWI5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9tNjhrL21jNjgwMjAvdWRpdi5hc20KQEAgLTAsMCArMSw0NSBAQAorZG5sICBtYzY4MDIwIG1wbl91ZGl2X3Fybm5kIC0tIDJ4MSBsaW1iIGRpdmlzaW9uCisKK2RubCAgQ29weXJpZ2h0IDE5OTktMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MgbXBfbGltYl90IG1wbl91ZGl2X3Fybm5kIChtcF9saW1iX3QgKnJwLAorQyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wX2xpbWJfdCBuaCwgbXBfbGltYl90IG5sLCBtcF9saW1iX3QgZCk7CitDCisKK1BST0xPR1VFKG1wbl91ZGl2X3Fybm5kKQorCW1vdmVsCU0oc3AsNCksIGEwCUMgcnAKKwltb3ZlbAlNKHNwLDgpLCBkMQlDIG5oCisJbW92ZWwJTShzcCwxMiksIGQwCUMgbmwKKwlkaXZ1bAlNKHNwLDE2KSwgZDE6ZDAKKwltb3ZlbAlkMSwgTShhMCkJQyByCisJcnRzCitFUElMT0dVRShtcG5fdWRpdl9xcm5uZCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vbTY4ay9tYzY4MDIwL3VtdWwuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9tNjhrL21jNjgwMjAvdW11bC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE5MzE0ZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vbTY4ay9tYzY4MDIwL3VtdWwuYXNtCkBAIC0wLDAgKzEsNDQgQEAKK2RubCAgbWM2ODAyMCBtcG5fdW11bF9wcG1tIC0tIGxpbWIgYnkgbGltYiBtdWx0aXBsaWNhdGlvbgorCitkbmwgIENvcHlyaWdodCAxOTk5LTIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDIG1wX2xpbWJfdCBtcG5fdW11bF9wcG1tIChtcF9saW1iX3QgKmxwLCBtcF9saW1iX3QgeCwgbXBfbGltYl90IHkpOworQworCitQUk9MT0dVRShtcG5fdW11bF9wcG1tKQorCW1vdmVsCU0oc3AsNCksIGEwCUMgbHAKKwltb3ZlbAlNKHNwLDgpLCBkMQlDIHgKKwltb3ZlbAlNKHNwLDEyKSwgZDAJQyB5CisJbXVsdWwJZDAsIGQwOmQxCisJbW92ZWwJZDEsIE0oYTApCUMgbG93CisJcnRzCitFUElMT0dVRShtcG5fdW11bF9wcG1tKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9tNjhrL3JzaGlmdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL202OGsvcnNoaWZ0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWI1Zjg5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9tNjhrL3JzaGlmdC5hc20KQEAgLTAsMCArMSwxNzUgQEAKK2RubCAgbWM2ODAyMCBtcG5fcnNoaWZ0IC0tIG1wbiByaWdodCBzaGlmdC4KKworZG5sICBDb3B5cmlnaHQgMTk5NiwgMTk5OS0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQyAgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgICAgICAgIHNoaWZ0PT0xICBzaGlmdD4xCitDIDY4MDQwOiAgICA5ICAgICAgICAgMTIKKworCitDIG1wX2xpbWJfdCBtcG5fcnNoaWZ0IChtcF9wdHIgcmVzX3B0ciwgbXBfc3JjcHRyIHNfcHRyLCBtcF9zaXplX3Qgc19zaXplLAorQyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY250KTsKK0MKK0MgVGhlICJjbnQiIHBhcmFtZXRlciBpcyBlaXRoZXIgMTYgYml0cyBvciAzMiBiaXRzIGRlcGVuZGluZyBvbgorQyBTSVpFT0ZfVU5TSUdORUQgKHNlZSBBQkkgbm90ZXMgaW4gbXBuL202OGsvUkVBRE1FKS4gIFRoZSB2YWx1ZSBpcyBvZgorQyBjb3Vyc2Ugb25seSAxIHRvIDMxLiAgV2hlbiBsb2FkZWQgYXMgMTYgYml0cyB0aGVyZSdzIGdhcmJhZ2UgaW4gdGhlIHVwcGVyCitDIGhhbGYsIGhlbmNlIHRoZSB1c2Ugb2YgY21wdy4gIFRoZSBzaGlmdCBpbnN0cnVjdGlvbnMgdGFrZSB0aGUgdGhlaXIgY291bnQKK0MgbW9kdWxvIDY0LCBzbyB0aGUgdXBwZXIgcGFydCBkb2Vzbid0IG1hdHRlciB0byB0aGVtIGVpdGhlci4KK0MKKworQyBJTlBVVCBQQVJBTUVURVJTCitDIHJlc19wdHIJKHNwICsgNCkKK0Mgc19wdHIJCShzcCArIDgpCitDIHNfc2l6ZQkoc3AgKyAxMikKK0MgY250CQkoc3AgKyAxNikKKworZGVmaW5lKHJlc19wdHIsIGBhMScpCitkZWZpbmUoc19wdHIsICAgYGEwJykKK2RlZmluZShzX3NpemUsICBgZDYnKQorZGVmaW5lKGNudCwgICAgIGBkNCcpCisKK2lmZGVmKGBTSVpFT0ZfVU5TSUdORUQnLCwKK2BtNF9lcnJvcihgU0laRU9GX1VOU0lHTkVEIG5vdCBkZWZpbmVkLCBzaG91bGQgYmUgaW4gY29uZmlnLm00CisnKScpCisKK1BST0xPR1VFKG1wbl9yc2hpZnQpCitDIFNhdmUgdXNlZCByZWdpc3RlcnMgb24gdGhlIHN0YWNrLgorCW1vdmVtbAlkMi1kNi9hMiwgTSgtLHNwKQorCitDIENvcHkgdGhlIGFyZ3VtZW50cyB0byByZWdpc3RlcnMuCisJbW92ZWwJTShzcCwyOCksIHJlc19wdHIKKwltb3ZlbAlNKHNwLDMyKSwgc19wdHIKKwltb3ZlbAlNKHNwLDM2KSwgc19zaXplCitpZmVsc2UoU0laRU9GX1VOU0lHTkVELDIsCitgCW1vdmV3CU0oc3AsNDApLCBjbnQnLAorYAltb3ZlbAlNKHNwLDQwKSwgY250JykKKworCW1vdmVxbAkjMSwgZDUKKwljbXB3CWQ1LCBjbnQKKwlibmUJTChMbm9ybWFsKQorCWNtcGwJcmVzX3B0ciwgc19wdHIKKwlibHMJTChMc3BlY2lhbCkJCUMganVtcCBpZiByZXNfcHRyID49IHNfcHRyCisKK2lmZWxzZShzY2FsZV9hdmFpbGFibGVfcCwxLGAKKwlsZWEJTShyZXNfcHRyLHNfc2l6ZSxsLDQpLCBhMgorJyxgCisJbW92ZWwJc19zaXplLCBkMAorCWFzbGwJIzIsIGQwCisJbGVhCU0ocmVzX3B0cixkMCxsKSwgYTIKKycpCisJY21wbAlzX3B0ciwgYTIKKwlibHMJTChMc3BlY2lhbCkJCUMganVtcCBpZiBzX3B0ciA+PSByZXNfcHRyICsgc19zaXplCisKK0woTG5vcm1hbCk6CisJbW92ZXFsCSMzMiwgZDUKKwlzdWJsCWNudCwgZDUKKwltb3ZlbAlNKHNfcHRyLCspLCBkMgorCW1vdmVsCWQyLCBkMAorCWxzbGwJZDUsIGQwCQlDIGNvbXB1dGUgY2FycnkgbGltYgorCisJbHNybAljbnQsIGQyCisJbW92ZWwJZDIsIGQxCisJc3VicWwJIzEsIHNfc2l6ZQorCWJlcQlMKExlbmQpCisJbHNybAkjMSwgc19zaXplCisJYmNzCUwoTDEpCisJc3VicWwJIzEsIHNfc2l6ZQorCitMKExvb3ApOgorCW1vdmVsCU0oc19wdHIsKyksIGQyCisJbW92ZWwJZDIsIGQzCisJbHNsbAlkNSwgZDMKKwlvcmwJZDMsIGQxCisJbW92ZWwJZDEsIE0ocmVzX3B0ciwrKQorCWxzcmwJY250LCBkMgorTChMMSk6CisJbW92ZWwJTShzX3B0ciwrKSwgZDEKKwltb3ZlbAlkMSwgZDMKKwlsc2xsCWQ1LCBkMworCW9ybAlkMywgZDIKKwltb3ZlbAlkMiwgTShyZXNfcHRyLCspCisJbHNybAljbnQsIGQxCisKKwlkYmYJc19zaXplLCBMKExvb3ApCisJc3VibAkjMHgxMDAwMCwgc19zaXplCisJYmNjCUwoTG9vcCkKKworTChMZW5kKToKKwltb3ZlbAlkMSwgTShyZXNfcHRyKQlDIHN0b3JlIG1vc3Qgc2lnbmlmaWNhbnQgbGltYgorCitDIFJlc3RvcmUgdXNlZCByZWdpc3RlcnMgZnJvbSBzdGFjayBmcmFtZS4KKwltb3ZlbWwJTShzcCwrKSwgZDItZDYvYTIKKwlydHMKKworQyBXZSBsb29wIGZyb20gbW9zdCBzaWduaWZpY2FudCBlbmQgb2YgdGhlIGFycmF5cywgd2hpY2ggaXMgb25seSBwZXJtaXNzYWJsZQorQyBpZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkb24ndCBvdmVybGFwLCBzaW5jZSB0aGUgZnVuY3Rpb24gaXMKK0MgZG9jdW1lbnRlZCB0byB3b3JrIGZvciBvdmVybGFwcGluZyBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uLgorCitMKExzcGVjaWFsKToKK2lmZWxzZShzY2FsZV9hdmFpbGFibGVfcCwxLGAKKwlsZWEJTShzX3B0cixzX3NpemUsbCw0KSwgc19wdHIKKwlsZWEJTShyZXNfcHRyLHNfc2l6ZSxsLDQpLCByZXNfcHRyCisnLGAKKwltb3ZlbAlzX3NpemUsIGQwCisJYXNsbAkjMiwgZDAKKwlhZGRsCWQwLCBzX3B0cgorCWFkZGwJZDAsIHJlc19wdHIKKycpCisKKwljbHJsCWQwCQkJQyBpbml0aWFsaXplIGNhcnJ5CisJZW9ydwkjMSwgc19zaXplCisJbHNybAkjMSwgc19zaXplCisJYmNjCUwoTEwxKQorCXN1YnFsCSMxLCBzX3NpemUKKworTChMTG9vcCk6CisJbW92ZWwJTSgtLHNfcHRyKSwgZDIKKwlyb3hybAkjMSwgZDIKKwltb3ZlbAlkMiwgTSgtLHJlc19wdHIpCitMKExMMSk6CisJbW92ZWwJTSgtLHNfcHRyKSwgZDIKKwlyb3hybAkjMSwgZDIKKwltb3ZlbAlkMiwgTSgtLHJlc19wdHIpCisKKwlkYmYJc19zaXplLCBMKExMb29wKQorCXJveHJsCSMxLCBkMAkJQyBzYXZlIGN5IGluIG1zYgorCXN1YmwJIzB4MTAwMDAsIHNfc2l6ZQorCWJjcwlMKExMZW5kKQorCWFkZGwJZDAsIGQwCQlDIHJlc3RvcmUgY3kKKwlicmEJTChMTG9vcCkKKworTChMTGVuZCk6CitDIFJlc3RvcmUgdXNlZCByZWdpc3RlcnMgZnJvbSBzdGFjayBmcmFtZS4KKwltb3ZlbWwJTShzcCwrKSwgZDItZDYvYTIKKwlydHMKKworRVBJTE9HVUUobXBuX3JzaGlmdCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vbTY4ay90LW02OGstZGVmcy5wbCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vbTY4ay90LW02OGstZGVmcy5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWMyMWZhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9tNjhrL3QtbTY4ay1kZWZzLnBsCkBAIC0wLDAgKzEsOTEgQEAKKyMhIC91c3IvYmluL3BlcmwgLXcKKworIyBDb3B5cmlnaHQgMjAwMSwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKyMKKyMgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorIworIyAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisjICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyMgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyAgb3IKKyMKKyMgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgICAgICBsYXRlciB2ZXJzaW9uLgorIworIyAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKyMKKyMgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgIGZvciBtb3JlIGRldGFpbHMuCisjCisjICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCisjICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCisjICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworIyBVc2FnZTogIHBlcmwgdC1tNjhrLWRlZnMucGwgWy10XQorIworIyBSdW4gdGhpcyBpbiB0aGUgbXBuL202OGsgc291cmNlIGRpcmVjdG9yeSB0byBjaGVjayB0aGF0IG02OGstZGVmcy5tNCBoYXMKKyMgbTY4a19kZWZicmFuY2goKXMgb3IgbTY4a19kZWZpbnNuKClzIGZvciBlYWNoIGluc3RydWN0aW9uIHVzZWQgaW4gKi5hc20KKyMgYW5kICovKi5hc20uICBQcmludCBub3RoaW5nIGlmIGV2ZXJ5dGhpbmcgaXMgb2suICBUaGUgLXQgb3B0aW9uIHByaW50cworIyBzb21lIGRpYWdub3N0aWMgdHJhY2VzLgorCit1c2Ugc3RyaWN0OwordXNlIEdldG9wdDo6U3RkOworCitteSAlb3B0OworZ2V0b3B0cygndCcsIFwlb3B0KTsKKworbXkgJWJyYW5jaDsKK215ICVpbnNuOworCitvcGVuKEZELCAiPG02OGstZGVmcy5tNCIpCisgICAgb3IgZGllICJDYW5ub3Qgb3BlbiBtNjhrLWRlZnMubTQ6ICQhXG5JcyB0aGlzIHRoZSBtcG4vbTY4ayBzb3VyY2UgZGlyZWN0b3J5P1xuIjsKK215ICgkc3JjZGlyLCAkdG9wX3NyY2Rpcik7Cit3aGlsZSAoPEZEPikgeworICAgIGlmICgvXm02OGtfZGVmYnJhbmNoXChccyooLiopXCkvKSB7ICRicmFuY2h7ImIiLiQxfSA9IDE7IH0KKyAgICBpZiAoL15tNjhrX2RlZmluc25cKFxzKiguKiksXHMqKC4qKVwpLykgeyAkaW5zbnskMS4kMn0gPSAxOyB9Cit9CitjbG9zZShGRCk7CisKK3ByaW50ICJicmFuY2hlczogIiwgam9pbigiICIsa2V5cyglYnJhbmNoKSksICJcbiIgaWYgJG9wdHsndCd9OworcHJpbnQgImluc25zOiAiLCBqb2luKCIgIixrZXlzKCVpbnNuKSksICJcbiIgaWYgJG9wdHsndCd9OworCisKK2ZvcmVhY2ggbXkgJGZpbGUgKGdsb2IoIiouYXNtIiksIGdsb2IoIiovKi5hc20iKSkgeworICAgIHByaW50ICJmaWxlICRmaWxlXG4iIGlmICRvcHR7J3QnfTsKKworICAgIG9wZW4oRkQsICI8JGZpbGUiKSBvciBkaWUgIkNhbm5vdCBvcGVuICRmaWxlOiAkISI7CisgICAgd2hpbGUgKDxGRD4pIHsKKwlpZiAoL15bIFx0XSpDLykgeyBuZXh0OyB9OworCWlmICgvXlx0KFthLXowLTldKykvKSB7CisJICAgIG15ICRvcGNvZGUgPSAkMTsKKwkgICAgcHJpbnQgIm9wY29kZSAkMVxuIiBpZiAkb3B0eyd0J307CisKKwkgICAgIyBpbnN0cnVjdGlvbnMgd2l0aCBhbiBsLCB3IG9yIGIgc3VmZml4IHNob3VsZCBoYXZlIGEgZGVmaW5zbgorCSAgICAjICh1bmxlc3MgdGhleSdyZSBhbHJlYWR5IGEgZGVmYnJhbmNoKQorCSAgICBpZiAoJG9wY29kZSA9fiAvW2x3Yl0kLworCQkmJiAhIGRlZmluZWQgJGluc257JG9wY29kZX0KKwkJJiYgISBkZWZpbmVkICRicmFuY2h7JG9wY29kZX0pCisJICAgIHsKKwkJcHJpbnQgIiRmaWxlOiAkLjogbWlzc2luZyBtNjhrX2RlZmluc246ICRvcGNvZGVcbiI7CisJICAgIH0KKworCSAgICAjIGluc3RydWN0aW9ucyBiWFggc2hvdWxkIGhhdmUgYSBkZWZicmFuY2ggKHVubGVzcyB0aGV5J3JlCisJICAgICMgYWxyZWFkeSBhIGRlZmluc24pCisJICAgIGlmICgkb3Bjb2RlID1+IC9eYi8KKwkJJiYgISBkZWZpbmVkICRpbnNueyRvcGNvZGV9CisJCSYmICEgZGVmaW5lZCAkYnJhbmNoeyRvcGNvZGV9KQorCSAgICB7CisJCXByaW50ICIkZmlsZTogJC46IG1pc3NpbmcgbTY4a19kZWZicmFuY2g6ICRvcGNvZGVcbiI7CisJICAgIH0KKwl9CisgICAgfQorICAgIGNsb3NlKEZEKTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vbTg4ay9SRUFETUUgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL204OGsvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNTFlODMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL204OGsvUkVBRE1FCkBAIC0wLDAgKzEsNjEgQEAKK0NvcHlyaWdodCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworCisKKworICAgICAgICAgICAgICAgICAgICAgIE04OEsgTVBOIFNVQlJPVVRJTkVTCisKK1RoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIG1wbiBmdW5jdGlvbnMgZm9yIHZhcmlvdXMgbTg4ayBmYW1pbHkgY2hpcHMuCisKK0NPREUgT1JHQU5JWkFUSU9OCisKKwltODhrICAgICAgICAgICAgIG04ODAwMCwgbTg4MTAwCisJbTg4ay9tYzg4MTEwICAgICBtODgxMTAKKworU1RBVFVTCisKK1RoZSBjb2RlIGhlcmVpbiBpcyBvbGQgYW5kIHBvb3JseSBtYWludGFpbmVkLgorCisqIFRoZSAucyBmaWxlcyBhc3N1bWUgdGhlIHN5c3RlbSB1c2VzIGEgIl8iIHVuZGVyc2NvcmUgcHJlZml4LCB3aGljaAorICBzaG91bGQgYmUgY29udHJvbGxlZCBieSBjb25maWd1cmUuCisKKyogVGhlIG1jODgxMTAvKi5TIGZpbGVzIGFyZSB1c2luZyB0aGUgZGVmdW5jdCAic3lzZGVwLmgiIGNvbmZpZ3VyYXRpb24KKyAgc2NoZW1lIGFuZCB3b24ndCBjb21waWxlLgorCitDb252ZXJzaW9uIHRvIHRoZSBjdXJyZW50IG00IC5hc20gc3R5bGUgd291bGRuJ3QgYmUgZGlmZmljdWx0LgorCisKKworCistLS0tLS0tLS0tLS0tLS0tCitMb2NhbCB2YXJpYWJsZXM6Cittb2RlOiB0ZXh0CitmaWxsLWNvbHVtbjogNzYKK0VuZDoKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vbTg4ay9hZGRfbi5zIGIvdGhpcmRfcGFydHkvZ21wL21wbi9tODhrL2FkZF9uLnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJkYjIyZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vbTg4ay9hZGRfbi5zCkBAIC0wLDAgKzEsMTEzIEBACis7IG1jODgxMDAgbXBuX2FkZF9uIC0tIEFkZCB0d28gbGltYiB2ZWN0b3JzIG9mIHRoZSBzYW1lIGxlbmd0aCA+IDAgYW5kIHN0b3JlCis7IHN1bSBpbiBhIHRoaXJkIGxpbWIgdmVjdG9yLgorCis7IENvcHlyaWdodCAxOTkyLCAxOTk0LCAxOTk1LCAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCis7ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCis7Cis7ICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorOyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKzsKKzsgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorOyAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCis7ICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKzsKKzsgIG9yCis7Cis7ICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorOyAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Cis7ICAgICAgbGF0ZXIgdmVyc2lvbi4KKzsKKzsgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCis7Cis7ICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Cis7ICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorOyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCis7ICBmb3IgbW9yZSBkZXRhaWxzLgorOworOyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorOyAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorOyAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKKzsgSU5QVVQgUEFSQU1FVEVSUworOyByZXNfcHRyCXIyCis7IHMxX3B0cglyMworOyBzMl9wdHIJcjQKKzsgc2l6ZQkJcjUKKworOyBUaGlzIGNvZGUgaGFzIGJlZW4gb3B0aW1pemVkIHRvIHJ1biBvbmUgaW5zdHJ1Y3Rpb24gcGVyIGNsb2NrLCBhdm9pZGluZworOyBsb2FkIHN0YWxscyBhbmQgd3JpdGViYWNrIGNvbnRlbnRpb24uICBBcyBhIHJlc3VsdCwgdGhlIGluc3RydWN0aW9uCis7IG9yZGVyIGlzIG5vdCBhbHdheXMgbmF0dXJhbC4KKworOyBUaGUgc3BlZWQgaXMgYWJvdXQgNC42IGNsb2Nrcy9saW1iICsgMTggY2xvY2tzL2xpbWItdmVjdG9yIG9uIGFuIDg4MTAwLAorOyBidXQgb24gdGhlIDg4MTEwLCBpdCBzZWVtcyB0byBydW4gbXVjaCBzbG93ZXIsIDYuNiBjbG9ja3MvbGltYi4KKworCXRleHQKKwlhbGlnbgkgMTYKKwlnbG9iYWwJIF9fX2dtcG5fYWRkX24KK19fX2dtcG5fYWRkX246CisJbGQJcjYscjMsMAkJCTsgcmVhZCBmaXJzdCBsaW1iIGZyb20gczFfcHRyCisJZXh0dQlyMTAscjUsMworCWxkCXI3LHI0LDAJCQk7IHJlYWQgZmlyc3QgbGltYiBmcm9tIHMyX3B0cgorCisJc3VidS5jbwlyNSxyMCxyNQkJOyAoY2xlYXIgY2FycnkgYXMgc2lkZSBlZmZlY3QpCisJbWFrCXI1LHI1LDM8ND4KKwliY25kCWVxMCxyNSxMemVybworCisJb3IJcjEyLHIwLGxvMTYoTGJhc2UpCisJb3IudQlyMTIscjEyLGhpMTYoTGJhc2UpCisJYWRkdQlyMTIscjEyLHI1CQk7IHIxMiBpcyBhZGRyZXNzIGZvciBlbnRlcmluZyBpbiBsb29wCisKKwlleHR1CXI1LHI1LDIJCQk7IGRpdmlkZSBieSA0CisJc3VidQlyMixyMixyNQkJOyBhZGp1c3QgcmVzX3B0cgorCXN1YnUJcjMscjMscjUJCTsgYWRqdXN0IHMxX3B0cgorCXN1YnUJcjQscjQscjUJCTsgYWRqdXN0IHMyX3B0cgorCisJb3IJcjgscjYscjAKKworCWptcC5uCXIxMgorCSBvcglyOSxyNyxyMAorCitMb29wOglhZGR1CXIzLHIzLDMyCisJc3QJcjgscjIsMjgKKwlhZGR1CXI0LHI0LDMyCisJbGQJcjYscjMsMAorCWFkZHUJcjIscjIsMzIKKwlsZAlyNyxyNCwwCitMemVybzoJc3VidQlyMTAscjEwLDEJCTsgYWRkIDAgKyA4ciBsaW1icyAoYWRqIGxvb3AgY250KQorTGJhc2U6CWxkCXI4LHIzLDQKKwlhZGR1LmNpbyByNixyNixyNworCWxkCXI5LHI0LDQKKwlzdAlyNixyMiwwCisJbGQJcjYscjMsOAkJCTsgYWRkIDcgKyA4ciBsaW1icworCWFkZHUuY2lvIHI4LHI4LHI5CisJbGQJcjcscjQsOAorCXN0CXI4LHIyLDQKKwlsZAlyOCxyMywxMgkJOyBhZGQgNiArIDhyIGxpbWJzCisJYWRkdS5jaW8gcjYscjYscjcKKwlsZAlyOSxyNCwxMgorCXN0CXI2LHIyLDgKKwlsZAlyNixyMywxNgkJOyBhZGQgNSArIDhyIGxpbWJzCisJYWRkdS5jaW8gcjgscjgscjkKKwlsZAlyNyxyNCwxNgorCXN0CXI4LHIyLDEyCisJbGQJcjgscjMsMjAJCTsgYWRkIDQgKyA4ciBsaW1icworCWFkZHUuY2lvIHI2LHI2LHI3CisJbGQJcjkscjQsMjAKKwlzdAlyNixyMiwxNgorCWxkCXI2LHIzLDI0CQk7IGFkZCAzICsgOHIgbGltYnMKKwlhZGR1LmNpbyByOCxyOCxyOQorCWxkCXI3LHI0LDI0CisJc3QJcjgscjIsMjAKKwlsZAlyOCxyMywyOAkJOyBhZGQgMiArIDhyIGxpbWJzCisJYWRkdS5jaW8gcjYscjYscjcKKwlsZAlyOSxyNCwyOAorCXN0CXI2LHIyLDI0CisJYmNuZC5uCW5lMCxyMTAsTG9vcAkJOyBhZGQgMSArIDhyIGxpbWJzCisJIGFkZHUuY2lvIHI4LHI4LHI5CisKKwlzdAlyOCxyMiwyOAkJOyBzdG9yZSBtb3N0IHNpZ25pZmljYW50IGxpbWIKKworCWptcC5uCSByMQorCSBhZGR1LmNpIHIyLHIwLHIwCQk7IHJldHVybiBjYXJyeS1vdXQgZnJvbSBtb3N0IHNpZ24uIGxpbWIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vbTg4ay9tYzg4MTEwL2FkZF9uLlMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL204OGsvbWM4ODExMC9hZGRfbi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzYjEyYjMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL204OGsvbWM4ODExMC9hZGRfbi5TCkBAIC0wLDAgKzEsMjA5IEBACis7IG1jODgxMTAgX19nbXBuX2FkZF9uIC0tIEFkZCB0d28gbGltYiB2ZWN0b3JzIG9mIHRoZSBzYW1lIGxlbmd0aCA+IDAgYW5kIHN0b3JlCis7IHN1bSBpbiBhIHRoaXJkIGxpbWIgdmVjdG9yLgorCis7IENvcHlyaWdodCAxOTk1LCAxOTk2LCAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCis7ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCis7Cis7ICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorOyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKzsKKzsgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorOyAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCis7ICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKzsKKzsgIG9yCis7Cis7ICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorOyAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Cis7ICAgICAgbGF0ZXIgdmVyc2lvbi4KKzsKKzsgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCis7Cis7ICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Cis7ICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorOyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCis7ICBmb3IgbW9yZSBkZXRhaWxzLgorOworOyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorOyAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorOyAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKKzsgSU5QVVQgUEFSQU1FVEVSUworI2RlZmluZSByZXNfcHRyCXIyCisjZGVmaW5lIHMxX3B0cglyMworI2RlZmluZSBzMl9wdHIJcjQKKyNkZWZpbmUgc2l6ZQlyNQorCisjaW5jbHVkZSAic3lzZGVwLmgiCisKKwl0ZXh0CisJYWxpZ24JMTYKKwlnbG9iYWwJQ19TWU1CT0xfTkFNRShfX2dtcG5fYWRkX24pCitDX1NZTUJPTF9OQU1FKF9fZ21wbl9hZGRfbik6CisJYWRkdS5jbwkgcjAscjAscjAJCTsgY2xlYXIgY3kgZmxhZworCXhvcgkgcjEyLHMyX3B0cixyZXNfcHRyCisJYmIxCSAyLHIxMixMMQorOyAqKiAgVjFhICAqKgorTDA6CWJiMAkgMixyZXNfcHRyLExfdjEJCTsgYnJhbmNoIGlmIHJlc19wdHIgaXMgYWxpZ25lZD8KKy8qIEFkZCBsZWFzdCBzaWduaWZpY2FudCBsaW1iIHNlcGFyYXRlbHkgdG8gYWxpZ24gcmVzX3B0ciBhbmQgczJfcHRyICovCisJbGQJIHIxMCxzMV9wdHIsMAorCWFkZHUJIHMxX3B0cixzMV9wdHIsNAorCWxkCSByOCxzMl9wdHIsMAorCWFkZHUJIHMyX3B0cixzMl9wdHIsNAorCXN1YnUJIHNpemUsc2l6ZSwxCisJYWRkdS5jbwkgcjYscjEwLHI4CisJc3QJIHI2LHJlc19wdHIsMAorCWFkZHUJIHJlc19wdHIscmVzX3B0ciw0CitMX3YxOgljbXAJIHIxMixzaXplLDIKKwliYjEJIGx0LHIxMixMZW5kMgorCisJbGQJIHIxMCxzMV9wdHIsMAorCWxkCSByMTIsczFfcHRyLDQKKwlsZC5kCSByOCxzMl9wdHIsMAorCXN1YnUJIHNpemUsc2l6ZSwxMAorCWJjbmQJIGx0MCxzaXplLExmaW4xCisvKiBBZGQgYmxvY2tzIG9mIDggbGltYnMgdW50aWwgbGVzcyB0aGFuIDggbGltYnMgcmVtYWluICovCisJYWxpZ24JIDgKK0xvb3AxOglzdWJ1CSBzaXplLHNpemUsOAorCWFkZHUuY2lvIHI2LHIxMCxyOAorCWxkCSByMTAsczFfcHRyLDgKKwlhZGR1LmNpbyByNyxyMTIscjkKKwlsZAkgcjEyLHMxX3B0ciwxMgorCWxkLmQJIHI4LHMyX3B0ciw4CisJc3QuZAkgcjYscmVzX3B0ciwwCisJYWRkdS5jaW8gcjYscjEwLHI4CisJbGQJIHIxMCxzMV9wdHIsMTYKKwlhZGR1LmNpbyByNyxyMTIscjkKKwlsZAkgcjEyLHMxX3B0ciwyMAorCWxkLmQJIHI4LHMyX3B0ciwxNgorCXN0LmQJIHI2LHJlc19wdHIsOAorCWFkZHUuY2lvIHI2LHIxMCxyOAorCWxkCSByMTAsczFfcHRyLDI0CisJYWRkdS5jaW8gcjcscjEyLHI5CisJbGQJIHIxMixzMV9wdHIsMjgKKwlsZC5kCSByOCxzMl9wdHIsMjQKKwlzdC5kCSByNixyZXNfcHRyLDE2CisJYWRkdS5jaW8gcjYscjEwLHI4CisJbGQJIHIxMCxzMV9wdHIsMzIKKwlhZGR1LmNpbyByNyxyMTIscjkKKwlsZAkgcjEyLHMxX3B0ciwzNgorCWFkZHUJIHMxX3B0cixzMV9wdHIsMzIKKwlsZC5kCSByOCxzMl9wdHIsMzIKKwlhZGR1CSBzMl9wdHIsczJfcHRyLDMyCisJc3QuZAkgcjYscmVzX3B0ciwyNAorCWFkZHUJIHJlc19wdHIscmVzX3B0ciwzMgorCWJjbmQJIGdlMCxzaXplLExvb3AxCisKK0xmaW4xOglhZGR1CSBzaXplLHNpemUsOC0yCisJYmNuZAkgbHQwLHNpemUsTGVuZDEKKy8qIEFkZCBibG9ja3Mgb2YgMiBsaW1icyB1bnRpbCBsZXNzIHRoYW4gMiBsaW1icyByZW1haW4gKi8KK0xvb3BlMToJYWRkdS5jaW8gcjYscjEwLHI4CisJbGQJIHIxMCxzMV9wdHIsOAorCWFkZHUuY2lvIHI3LHIxMixyOQorCWxkCSByMTIsczFfcHRyLDEyCisJbGQuZAkgcjgsczJfcHRyLDgKKwlzdC5kCSByNixyZXNfcHRyLDAKKwlzdWJ1CSBzaXplLHNpemUsMgorCWFkZHUJIHMxX3B0cixzMV9wdHIsOAorCWFkZHUJIHMyX3B0cixzMl9wdHIsOAorCWFkZHUJIHJlc19wdHIscmVzX3B0ciw4CisJYmNuZAkgZ2UwLHNpemUsTG9vcGUxCitMZW5kMToJYWRkdS5jaW8gcjYscjEwLHI4CisJYWRkdS5jaW8gcjcscjEyLHI5CisJc3QuZAkgcjYscmVzX3B0ciwwCisKKwliYjAJIDAsc2l6ZSxMcmV0MQorLyogQWRkIGxhc3QgbGltYiAqLworCWxkCSByMTAsczFfcHRyLDgKKwlsZAkgcjgsczJfcHRyLDgKKwlhZGR1LmNpbyByNixyMTAscjgKKwlzdAkgcjYscmVzX3B0ciw4CisKK0xyZXQxOglqbXAubgkgcjEKKwlhZGR1LmNpCSByMixyMCxyMAkJOyByZXR1cm4gY2Fycnktb3V0IGZyb20gbW9zdCBzaWduLiBsaW1iCisKK0wxOgl4b3IJIHIxMixzMV9wdHIscmVzX3B0cgorCWJiMQkgMixyMTIsTDIKKzsgKiogIFYxYiAgKioKKwlvcgkgcjEyLHIwLHMyX3B0cgorCW9yCSBzMl9wdHIscjAsczFfcHRyCisJb3IJIHMxX3B0cixyMCxyMTIKKwlicgkgTDAKKworOyAqKiAgVjIgICoqCisvKiBJZiB3ZSBjb21lIGhlcmUsIHRoZSBhbGlnbm1lbnQgb2YgczFfcHRyIGFuZCByZXNfcHRyIGFzIHdlbGwgYXMgdGhlCisgICBhbGlnbm1lbnQgb2YgczJfcHRyIGFuZCByZXNfcHRyIGRpZmZlci4gIFNpbmNlIHRoZXJlIGFyZSBvbmx5IHR3byB3YXlzCisgICB0aGluZ3MgY2FuIGJlIGFsaWduZWQgKHRoYXQgd2UgY2FyZSBhYm91dCkgd2Ugbm93IGtub3cgdGhhdCB0aGUgYWxpZ25tZW50CisgICBvZiBzMV9wdHIgYW5kIHMyX3B0ciBhcmUgdGhlIHNhbWUuICAqLworCitMMjoJY21wCSByMTIsc2l6ZSwxCisJYmIxCSBlcSxyMTIsTGpvbmUKKwliYjAJIDIsczFfcHRyLExfdjIJCTsgYnJhbmNoIGlmIHMxX3B0ciBpcyBhbGlnbmVkCisvKiBBZGQgbGVhc3Qgc2lnbmlmaWNhbnQgbGltYiBzZXBhcmF0ZWx5IHRvIGFsaWduIHJlc19wdHIgYW5kIHMyX3B0ciAqLworCWxkCSByMTAsczFfcHRyLDAKKwlhZGR1CSBzMV9wdHIsczFfcHRyLDQKKwlsZAkgcjgsczJfcHRyLDAKKwlhZGR1CSBzMl9wdHIsczJfcHRyLDQKKwlzdWJ1CSBzaXplLHNpemUsMQorCWFkZHUuY28JIHI2LHIxMCxyOAorCXN0CSByNixyZXNfcHRyLDAKKwlhZGR1CSByZXNfcHRyLHJlc19wdHIsNAorCitMX3YyOglzdWJ1CSBzaXplLHNpemUsOAorCWJjbmQJIGx0MCxzaXplLExmaW4yCisvKiBBZGQgYmxvY2tzIG9mIDggbGltYnMgdW50aWwgbGVzcyB0aGFuIDggbGltYnMgcmVtYWluICovCisJYWxpZ24JIDgKK0xvb3AyOglzdWJ1CSBzaXplLHNpemUsOAorCWxkLmQJIHI4LHMxX3B0ciwwCisJbGQuZAkgcjYsczJfcHRyLDAKKwlhZGR1LmNpbyByOCxyOCxyNgorCXN0CSByOCxyZXNfcHRyLDAKKwlhZGR1LmNpbyByOSxyOSxyNworCXN0CSByOSxyZXNfcHRyLDQKKwlsZC5kCSByOCxzMV9wdHIsOAorCWxkLmQJIHI2LHMyX3B0ciw4CisJYWRkdS5jaW8gcjgscjgscjYKKwlzdAkgcjgscmVzX3B0ciw4CisJYWRkdS5jaW8gcjkscjkscjcKKwlzdAkgcjkscmVzX3B0ciwxMgorCWxkLmQJIHI4LHMxX3B0ciwxNgorCWxkLmQJIHI2LHMyX3B0ciwxNgorCWFkZHUuY2lvIHI4LHI4LHI2CisJc3QJIHI4LHJlc19wdHIsMTYKKwlhZGR1LmNpbyByOSxyOSxyNworCXN0CSByOSxyZXNfcHRyLDIwCisJbGQuZAkgcjgsczFfcHRyLDI0CisJbGQuZAkgcjYsczJfcHRyLDI0CisJYWRkdS5jaW8gcjgscjgscjYKKwlzdAkgcjgscmVzX3B0ciwyNAorCWFkZHUuY2lvIHI5LHI5LHI3CisJc3QJIHI5LHJlc19wdHIsMjgKKwlhZGR1CSBzMV9wdHIsczFfcHRyLDMyCisJYWRkdQkgczJfcHRyLHMyX3B0ciwzMgorCWFkZHUJIHJlc19wdHIscmVzX3B0ciwzMgorCWJjbmQJIGdlMCxzaXplLExvb3AyCisKK0xmaW4yOglhZGR1CSBzaXplLHNpemUsOC0yCisJYmNuZAkgbHQwLHNpemUsTGVuZDIKK0xvb3BlMjoJbGQuZAkgcjgsczFfcHRyLDAKKwlsZC5kCSByNixzMl9wdHIsMAorCWFkZHUuY2lvIHI4LHI4LHI2CisJc3QJIHI4LHJlc19wdHIsMAorCWFkZHUuY2lvIHI5LHI5LHI3CisJc3QJIHI5LHJlc19wdHIsNAorCXN1YnUJIHNpemUsc2l6ZSwyCisJYWRkdQkgczFfcHRyLHMxX3B0ciw4CisJYWRkdQkgczJfcHRyLHMyX3B0ciw4CisJYWRkdQkgcmVzX3B0cixyZXNfcHRyLDgKKwliY25kCSBnZTAsc2l6ZSxMb29wZTIKK0xlbmQyOgliYjAJIDAsc2l6ZSxMcmV0MgorLyogQWRkIGxhc3QgbGltYiAqLworTGpvbmU6CWxkCSByMTAsczFfcHRyLDAKKwlsZAkgcjgsczJfcHRyLDAKKwlhZGR1LmNpbyByNixyMTAscjgKKwlzdAkgcjYscmVzX3B0ciwwCisKK0xyZXQyOglqbXAubgkgcjEKKwlhZGR1LmNpCSByMixyMCxyMAkJOyByZXR1cm4gY2Fycnktb3V0IGZyb20gbW9zdCBzaWduLiBsaW1iCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL204OGsvbWM4ODExMC9hZGRtdWxfMS5zIGIvdGhpcmRfcGFydHkvZ21wL21wbi9tODhrL21jODgxMTAvYWRkbXVsXzEucwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjEyMjFmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9tODhrL21jODgxMTAvYWRkbXVsXzEucwpAQCAtMCwwICsxLDcwIEBACis7IG1jODgxMTAgX19nbXBuX2FkZG11bF8xIC0tIE11bHRpcGx5IGEgbGltYiB2ZWN0b3Igd2l0aCBhIHNpbmdsZSBsaW1iIGFuZAorOyBzdG9yZSB0aGUgcHJvZHVjdCBpbiBhIHNlY29uZCBsaW1iIHZlY3Rvci4KKworOyBDb3B5cmlnaHQgMTk5NiwgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworOyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorOworOyAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKzsgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6Cis7Cis7ICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKzsgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorOyAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCis7Cis7ICBvcgorOworOyAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKzsgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorOyAgICAgIGxhdGVyIHZlcnNpb24uCis7Cis7ICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorOworOyAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorOyAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKzsgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorOyAgZm9yIG1vcmUgZGV0YWlscy4KKzsKKzsgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKKzsgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKKzsgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCis7IElOUFVUIFBBUkFNRVRFUlMKKzsgcmVzX3B0cglyMgorOyBzMV9wdHIJcjMKKzsgc2l6ZQkJcjQKKzsgczJfbGltYglyNQorCisJdGV4dAorCWFsaWduCTE2CisJZ2xvYmFsCV9fX2dtcG5fYWRkbXVsXzEKK19fX2dtcG5fYWRkbXVsXzE6CisJbGRhCSByMyxyM1tyNF0KKwlsZGEJIHI4LHIyW3I0XQkJOyBSRVNfUFRSIGluIHI4IHNpbmNlIHIyIGlzIHJldHZhbAorCXN1YnUJIHI0LHIwLHI0CisJYWRkdS5jbwkgcjIscjAscjAJCTsgcjIgPSBjeSA9IDAKKworCWxkCSByNixyM1tyNF0KKwlhZGR1CSByNCxyNCwxCisJc3VidQkgcjgscjgsNAorCWJjbmQubgkgZXEwLHI0LExlbmQKKwkgbXVsdS5kCSByMTAscjYscjUKKworTG9vcDoJbGQJIHI3LHI4W3I0XQorCWxkCSByNixyM1tyNF0KKwlhZGR1LmNpbyByOSxyMTEscjIKKwlhZGR1LmNpCSByMixyMTAscjAKKwlhZGR1LmNvCSByOSxyOSxyNworCXN0CSByOSxyOFtyNF0KKwlhZGR1CSByNCxyNCwxCisJbXVsdS5kCSByMTAscjYscjUKKwliY25kCSBuZTAscjQsTG9vcAorCitMZW5kOglsZAkgcjcscjgsMAorCWFkZHUuY2lvIHI5LHIxMSxyMgorCWFkZHUuY2kJIHIyLHIxMCxyMAorCWFkZHUuY28JIHI5LHI5LHI3CisJc3QJIHI5LHI4LDAKKwlqbXAubgkgcjEKKwkgYWRkdS5jaSByMixyMixyMApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9tODhrL21jODgxMTAvbXVsXzEucyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vbTg4ay9tYzg4MTEwL211bF8xLnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhmZDE0YgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vbTg4ay9tYzg4MTEwL211bF8xLnMKQEAgLTAsMCArMSw2OCBAQAorOyBtYzg4MTEwIF9fZ21wbl9tdWxfMSAtLSBNdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYSBzaW5nbGUgbGltYiBhbmQKKzsgc3RvcmUgdGhlIHByb2R1Y3QgaW4gYSBzZWNvbmQgbGltYiB2ZWN0b3IuCisKKzsgQ29weXJpZ2h0IDE5OTIsIDE5OTQsIDE5OTUsIDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKzsgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKzsKKzsgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cis7ICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorOworOyAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCis7ICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKzsgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorOworOyAgb3IKKzsKKzsgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCis7ICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKzsgICAgICBsYXRlciB2ZXJzaW9uLgorOworOyAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKzsKKzsgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKzsgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCis7ICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKzsgIGZvciBtb3JlIGRldGFpbHMuCis7Cis7ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCis7ICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCis7ICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworOyBJTlBVVCBQQVJBTUVURVJTCis7IHJlc19wdHIJcjIKKzsgczFfcHRyCXIzCis7IHNpemUJCXI0Cis7IHMyX2xpbWIJcjUKKworCXRleHQKKwlhbGlnbgkxNgorCWdsb2JhbAlfX19nbXBuX211bF8xCitfX19nbXBuX211bF8xOgorCTsgTWFrZSBTMV9QVFIgYW5kIFJFU19QVFIgcG9pbnQgYXQgdGhlIGVuZCBvZiB0aGVpciBibG9ja3MKKwk7IGFuZCBuZWdhdGUgU0laRS4KKwlsZGEJIHIzLHIzW3I0XQorCWxkYQkgcjgscjJbcjRdCQk7IFJFU19QVFIgaW4gcjggc2luY2UgcjIgaXMgcmV0dmFsCisJc3VidQkgcjQscjAscjQKKworCWFkZHUuY28JIHIyLHIwLHIwCQk7IHIyID0gY3kgPSAwCisKKwlsZAkgcjYscjNbcjRdCisJYWRkdQkgcjQscjQsMQorCW11bHUuZAkgcjEwLHI2LHI1CisJYmNuZC5uCSBlcTAscjQsTGVuZAorCSBzdWJ1CSByOCxyOCw4CisKK0xvb3A6CWxkCSByNixyM1tyNF0KKwlhZGR1LmNpbyByOSxyMTEscjIKKwlvcgkgcjIscjEwLHIwCQk7IGNvdWxkIGJlIGF2b2lkZWQgaWYgdW5yb2xsZWQKKwlhZGR1CSByNCxyNCwxCisJbXVsdS5kCSByMTAscjYscjUKKwliY25kLm4JIG5lMCxyNCxMb29wCisJIHN0CSByOSxyOFtyNF0KKworTGVuZDoJYWRkdS5jaW8gcjkscjExLHIyCisJc3QJIHI5LHI4LDQKKwlqbXAubgkgcjEKKwkgYWRkdS5jaSByMixyMTAscjAKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vbTg4ay9tYzg4MTEwL3N1Yl9uLlMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL204OGsvbWM4ODExMC9zdWJfbi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwYThlY2IKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL204OGsvbWM4ODExMC9zdWJfbi5TCkBAIC0wLDAgKzEsMjg1IEBACis7IG1jODgxMTAgX19nbXBuX3N1Yl9uIC0tIFN1YnRyYWN0IHR3byBsaW1iIHZlY3RvcnMgb2YgdGhlIHNhbWUgbGVuZ3RoID4gMCBhbmQKKzsgc3RvcmUgZGlmZmVyZW5jZSBpbiBhIHRoaXJkIGxpbWIgdmVjdG9yLgorCis7IENvcHlyaWdodCAxOTk1LCAxOTk2LCAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCis7ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCis7Cis7ICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorOyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKzsKKzsgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorOyAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCis7ICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKzsKKzsgIG9yCis7Cis7ICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorOyAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Cis7ICAgICAgbGF0ZXIgdmVyc2lvbi4KKzsKKzsgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCis7Cis7ICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Cis7ICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorOyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCis7ICBmb3IgbW9yZSBkZXRhaWxzLgorOworOyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorOyAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorOyAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKKzsgSU5QVVQgUEFSQU1FVEVSUworI2RlZmluZSByZXNfcHRyCXIyCisjZGVmaW5lIHMxX3B0cglyMworI2RlZmluZSBzMl9wdHIJcjQKKyNkZWZpbmUgc2l6ZQlyNQorCisjaW5jbHVkZSAic3lzZGVwLmgiCisKKwl0ZXh0CisJYWxpZ24JMTYKKwlnbG9iYWwJQ19TWU1CT0xfTkFNRShfX2dtcG5fc3ViX24pCitDX1NZTUJPTF9OQU1FKF9fZ21wbl9zdWJfbik6CisJc3VidS5jbwkgcjAscjAscjAJCTsgc2V0IGN5IGZsYWcKKwl4b3IJIHIxMixzMl9wdHIscmVzX3B0cgorCWJiMQkgMixyMTIsTDEKKzsgKiogIFYxYSAgKioKK0wwOgliYjAJIDIscmVzX3B0cixMX3YxCQk7IGJyYW5jaCBpZiByZXNfcHRyIGlzIGFsaWduZWQKKy8qIEFkZCBsZWFzdCBzaWduaWZpY2FudCBsaW1iIHNlcGFyYXRlbHkgdG8gYWxpZ24gcmVzX3B0ciBhbmQgczJfcHRyICovCisJbGQJIHIxMCxzMV9wdHIsMAorCWFkZHUJIHMxX3B0cixzMV9wdHIsNAorCWxkCSByOCxzMl9wdHIsMAorCWFkZHUJIHMyX3B0cixzMl9wdHIsNAorCXN1YnUJIHNpemUsc2l6ZSwxCisJc3VidS5jbwkgcjYscjEwLHI4CisJc3QJIHI2LHJlc19wdHIsMAorCWFkZHUJIHJlc19wdHIscmVzX3B0ciw0CitMX3YxOgljbXAJIHIxMixzaXplLDIKKwliYjEJIGx0LHIxMixMZW5kMgorCisJbGQJIHIxMCxzMV9wdHIsMAorCWxkCSByMTIsczFfcHRyLDQKKwlsZC5kCSByOCxzMl9wdHIsMAorCXN1YnUJIHNpemUsc2l6ZSwxMAorCWJjbmQJIGx0MCxzaXplLExmaW4xCisvKiBBZGQgYmxvY2tzIG9mIDggbGltYnMgdW50aWwgbGVzcyB0aGFuIDggbGltYnMgcmVtYWluICovCisJYWxpZ24JIDgKK0xvb3AxOglzdWJ1CSBzaXplLHNpemUsOAorCXN1YnUuY2lvIHI2LHIxMCxyOAorCWxkCSByMTAsczFfcHRyLDgKKwlzdWJ1LmNpbyByNyxyMTIscjkKKwlsZAkgcjEyLHMxX3B0ciwxMgorCWxkLmQJIHI4LHMyX3B0ciw4CisJc3QuZAkgcjYscmVzX3B0ciwwCisJc3VidS5jaW8gcjYscjEwLHI4CisJbGQJIHIxMCxzMV9wdHIsMTYKKwlzdWJ1LmNpbyByNyxyMTIscjkKKwlsZAkgcjEyLHMxX3B0ciwyMAorCWxkLmQJIHI4LHMyX3B0ciwxNgorCXN0LmQJIHI2LHJlc19wdHIsOAorCXN1YnUuY2lvIHI2LHIxMCxyOAorCWxkCSByMTAsczFfcHRyLDI0CisJc3VidS5jaW8gcjcscjEyLHI5CisJbGQJIHIxMixzMV9wdHIsMjgKKwlsZC5kCSByOCxzMl9wdHIsMjQKKwlzdC5kCSByNixyZXNfcHRyLDE2CisJc3VidS5jaW8gcjYscjEwLHI4CisJbGQJIHIxMCxzMV9wdHIsMzIKKwlzdWJ1LmNpbyByNyxyMTIscjkKKwlsZAkgcjEyLHMxX3B0ciwzNgorCWFkZHUJIHMxX3B0cixzMV9wdHIsMzIKKwlsZC5kCSByOCxzMl9wdHIsMzIKKwlhZGR1CSBzMl9wdHIsczJfcHRyLDMyCisJc3QuZAkgcjYscmVzX3B0ciwyNAorCWFkZHUJIHJlc19wdHIscmVzX3B0ciwzMgorCWJjbmQJIGdlMCxzaXplLExvb3AxCisKK0xmaW4xOglhZGR1CSBzaXplLHNpemUsOC0yCisJYmNuZAkgbHQwLHNpemUsTGVuZDEKKy8qIEFkZCBibG9ja3Mgb2YgMiBsaW1icyB1bnRpbCBsZXNzIHRoYW4gMiBsaW1icyByZW1haW4gKi8KK0xvb3BlMToJc3VidS5jaW8gcjYscjEwLHI4CisJbGQJIHIxMCxzMV9wdHIsOAorCXN1YnUuY2lvIHI3LHIxMixyOQorCWxkCSByMTIsczFfcHRyLDEyCisJbGQuZAkgcjgsczJfcHRyLDgKKwlzdC5kCSByNixyZXNfcHRyLDAKKwlzdWJ1CSBzaXplLHNpemUsMgorCWFkZHUJIHMxX3B0cixzMV9wdHIsOAorCWFkZHUJIHMyX3B0cixzMl9wdHIsOAorCWFkZHUJIHJlc19wdHIscmVzX3B0ciw4CisJYmNuZAkgZ2UwLHNpemUsTG9vcGUxCitMZW5kMToJc3VidS5jaW8gcjYscjEwLHI4CisJc3VidS5jaW8gcjcscjEyLHI5CisJc3QuZAkgcjYscmVzX3B0ciwwCisKKwliYjAJIDAsc2l6ZSxMcmV0MQorLyogQWRkIGxhc3QgbGltYiAqLworCWxkCSByMTAsczFfcHRyLDgKKwlsZAkgcjgsczJfcHRyLDgKKwlzdWJ1LmNpbyByNixyMTAscjgKKwlzdAkgcjYscmVzX3B0ciw4CisKK0xyZXQxOglhZGR1LmNpIHIyLHIwLHIwCQk7IHJldHVybiBjYXJyeS1vdXQgZnJvbSBtb3N0IHNpZ24uIGxpbWIKKwlqbXAubgkgcjEKKwkgeG9yCXIyLHIyLDEKKworTDE6CXhvcgkgcjEyLHMxX3B0cixyZXNfcHRyCisJYmIxCSAyLHIxMixMMgorOyAqKiAgVjFiICAqKgorCWJiMAkgMixyZXNfcHRyLExfdjFiCTsgYnJhbmNoIGlmIHJlc19wdHIgaXMgYWxpZ25lZAorLyogQWRkIGxlYXN0IHNpZ25pZmljYW50IGxpbWIgc2VwYXJhdGVseSB0byBhbGlnbiByZXNfcHRyIGFuZCBzMV9wdHIgKi8KKwlsZAkgcjEwLHMyX3B0ciwwCisJYWRkdQkgczJfcHRyLHMyX3B0ciw0CisJbGQJIHI4LHMxX3B0ciwwCisJYWRkdQkgczFfcHRyLHMxX3B0ciw0CisJc3VidQkgc2l6ZSxzaXplLDEKKwlzdWJ1LmNvCSByNixyOCxyMTAKKwlzdAkgcjYscmVzX3B0ciwwCisJYWRkdQkgcmVzX3B0cixyZXNfcHRyLDQKK0xfdjFiOgljbXAJIHIxMixzaXplLDIKKwliYjEJIGx0LHIxMixMZW5kMgorCisJbGQJIHIxMCxzMl9wdHIsMAorCWxkCSByMTIsczJfcHRyLDQKKwlsZC5kCSByOCxzMV9wdHIsMAorCXN1YnUJIHNpemUsc2l6ZSwxMAorCWJjbmQJIGx0MCxzaXplLExmaW4xYgorLyogQWRkIGJsb2NrcyBvZiA4IGxpbWJzIHVudGlsIGxlc3MgdGhhbiA4IGxpbWJzIHJlbWFpbiAqLworCWFsaWduCSA4CitMb29wMWI6CXN1YnUJIHNpemUsc2l6ZSw4CisJc3VidS5jaW8gcjYscjgscjEwCisJbGQJIHIxMCxzMl9wdHIsOAorCXN1YnUuY2lvIHI3LHI5LHIxMgorCWxkCSByMTIsczJfcHRyLDEyCisJbGQuZAkgcjgsczFfcHRyLDgKKwlzdC5kCSByNixyZXNfcHRyLDAKKwlzdWJ1LmNpbyByNixyOCxyMTAKKwlsZAkgcjEwLHMyX3B0ciwxNgorCXN1YnUuY2lvIHI3LHI5LHIxMgorCWxkCSByMTIsczJfcHRyLDIwCisJbGQuZAkgcjgsczFfcHRyLDE2CisJc3QuZAkgcjYscmVzX3B0ciw4CisJc3VidS5jaW8gcjYscjgscjEwCisJbGQJIHIxMCxzMl9wdHIsMjQKKwlzdWJ1LmNpbyByNyxyOSxyMTIKKwlsZAkgcjEyLHMyX3B0ciwyOAorCWxkLmQJIHI4LHMxX3B0ciwyNAorCXN0LmQJIHI2LHJlc19wdHIsMTYKKwlzdWJ1LmNpbyByNixyOCxyMTAKKwlsZAkgcjEwLHMyX3B0ciwzMgorCXN1YnUuY2lvIHI3LHI5LHIxMgorCWxkCSByMTIsczJfcHRyLDM2CisJYWRkdQkgczJfcHRyLHMyX3B0ciwzMgorCWxkLmQJIHI4LHMxX3B0ciwzMgorCWFkZHUJIHMxX3B0cixzMV9wdHIsMzIKKwlzdC5kCSByNixyZXNfcHRyLDI0CisJYWRkdQkgcmVzX3B0cixyZXNfcHRyLDMyCisJYmNuZAkgZ2UwLHNpemUsTG9vcDFiCisKK0xmaW4xYjoJYWRkdQkgc2l6ZSxzaXplLDgtMgorCWJjbmQJIGx0MCxzaXplLExlbmQxYgorLyogQWRkIGJsb2NrcyBvZiAyIGxpbWJzIHVudGlsIGxlc3MgdGhhbiAyIGxpbWJzIHJlbWFpbiAqLworTG9vcGUxYjpzdWJ1LmNpbyByNixyOCxyMTAKKwlsZAkgcjEwLHMyX3B0ciw4CisJc3VidS5jaW8gcjcscjkscjEyCisJbGQJIHIxMixzMl9wdHIsMTIKKwlsZC5kCSByOCxzMV9wdHIsOAorCXN0LmQJIHI2LHJlc19wdHIsMAorCXN1YnUJIHNpemUsc2l6ZSwyCisJYWRkdQkgczFfcHRyLHMxX3B0ciw4CisJYWRkdQkgczJfcHRyLHMyX3B0ciw4CisJYWRkdQkgcmVzX3B0cixyZXNfcHRyLDgKKwliY25kCSBnZTAsc2l6ZSxMb29wZTFiCitMZW5kMWI6CXN1YnUuY2lvIHI2LHI4LHIxMAorCXN1YnUuY2lvIHI3LHI5LHIxMgorCXN0LmQJIHI2LHJlc19wdHIsMAorCisJYmIwCSAwLHNpemUsTHJldDFiCisvKiBBZGQgbGFzdCBsaW1iICovCisJbGQJIHIxMCxzMl9wdHIsOAorCWxkCSByOCxzMV9wdHIsOAorCXN1YnUuY2lvIHI2LHI4LHIxMAorCXN0CSByNixyZXNfcHRyLDgKKworTHJldDFiOglhZGR1LmNpIHIyLHIwLHIwCQk7IHJldHVybiBjYXJyeS1vdXQgZnJvbSBtb3N0IHNpZ24uIGxpbWIKKwlqbXAubgkgcjEKKwkgeG9yCXIyLHIyLDEKKworOyAqKiAgVjIgICoqCisvKiBJZiB3ZSBjb21lIGhlcmUsIHRoZSBhbGlnbm1lbnQgb2YgczFfcHRyIGFuZCByZXNfcHRyIGFzIHdlbGwgYXMgdGhlCisgICBhbGlnbm1lbnQgb2YgczJfcHRyIGFuZCByZXNfcHRyIGRpZmZlci4gIFNpbmNlIHRoZXJlIGFyZSBvbmx5IHR3byB3YXlzCisgICB0aGluZ3MgY2FuIGJlIGFsaWduZWQgKHRoYXQgd2UgY2FyZSBhYm91dCkgd2Ugbm93IGtub3cgdGhhdCB0aGUgYWxpZ25tZW50CisgICBvZiBzMV9wdHIgYW5kIHMyX3B0ciBhcmUgdGhlIHNhbWUuICAqLworCitMMjoJY21wCSByMTIsc2l6ZSwxCisJYmIxCSBlcSxyMTIsTGpvbmUKKwliYjAJIDIsczFfcHRyLExfdjIJCTsgYnJhbmNoIGlmIHMxX3B0ciBpcyBhbGlnbmVkCisvKiBBZGQgbGVhc3Qgc2lnbmlmaWNhbnQgbGltYiBzZXBhcmF0ZWx5IHRvIGFsaWduIHJlc19wdHIgYW5kIHMyX3B0ciAqLworCWxkCSByMTAsczFfcHRyLDAKKwlhZGR1CSBzMV9wdHIsczFfcHRyLDQKKwlsZAkgcjgsczJfcHRyLDAKKwlhZGR1CSBzMl9wdHIsczJfcHRyLDQKKwlzdWJ1CSBzaXplLHNpemUsMQorCXN1YnUuY28JIHI2LHIxMCxyOAorCXN0CSByNixyZXNfcHRyLDAKKwlhZGR1CSByZXNfcHRyLHJlc19wdHIsNAorCitMX3YyOglzdWJ1CSBzaXplLHNpemUsOAorCWJjbmQJIGx0MCxzaXplLExmaW4yCisvKiBBZGQgYmxvY2tzIG9mIDggbGltYnMgdW50aWwgbGVzcyB0aGFuIDggbGltYnMgcmVtYWluICovCisJYWxpZ24JIDgKK0xvb3AyOglzdWJ1CSBzaXplLHNpemUsOAorCWxkLmQJIHI4LHMxX3B0ciwwCisJbGQuZAkgcjYsczJfcHRyLDAKKwlzdWJ1LmNpbyByOCxyOCxyNgorCXN0CSByOCxyZXNfcHRyLDAKKwlzdWJ1LmNpbyByOSxyOSxyNworCXN0CSByOSxyZXNfcHRyLDQKKwlsZC5kCSByOCxzMV9wdHIsOAorCWxkLmQJIHI2LHMyX3B0ciw4CisJc3VidS5jaW8gcjgscjgscjYKKwlzdAkgcjgscmVzX3B0ciw4CisJc3VidS5jaW8gcjkscjkscjcKKwlzdAkgcjkscmVzX3B0ciwxMgorCWxkLmQJIHI4LHMxX3B0ciwxNgorCWxkLmQJIHI2LHMyX3B0ciwxNgorCXN1YnUuY2lvIHI4LHI4LHI2CisJc3QJIHI4LHJlc19wdHIsMTYKKwlzdWJ1LmNpbyByOSxyOSxyNworCXN0CSByOSxyZXNfcHRyLDIwCisJbGQuZAkgcjgsczFfcHRyLDI0CisJbGQuZAkgcjYsczJfcHRyLDI0CisJc3VidS5jaW8gcjgscjgscjYKKwlzdAkgcjgscmVzX3B0ciwyNAorCXN1YnUuY2lvIHI5LHI5LHI3CisJc3QJIHI5LHJlc19wdHIsMjgKKwlhZGR1CSBzMV9wdHIsczFfcHRyLDMyCisJYWRkdQkgczJfcHRyLHMyX3B0ciwzMgorCWFkZHUJIHJlc19wdHIscmVzX3B0ciwzMgorCWJjbmQJIGdlMCxzaXplLExvb3AyCisKK0xmaW4yOglhZGR1CSBzaXplLHNpemUsOC0yCisJYmNuZAkgbHQwLHNpemUsTGVuZDIKK0xvb3BlMjoJbGQuZAkgcjgsczFfcHRyLDAKKwlsZC5kCSByNixzMl9wdHIsMAorCXN1YnUuY2lvIHI4LHI4LHI2CisJc3QJIHI4LHJlc19wdHIsMAorCXN1YnUuY2lvIHI5LHI5LHI3CisJc3QJIHI5LHJlc19wdHIsNAorCXN1YnUJIHNpemUsc2l6ZSwyCisJYWRkdQkgczFfcHRyLHMxX3B0ciw4CisJYWRkdQkgczJfcHRyLHMyX3B0ciw4CisJYWRkdQkgcmVzX3B0cixyZXNfcHRyLDgKKwliY25kCSBnZTAsc2l6ZSxMb29wZTIKK0xlbmQyOgliYjAJIDAsc2l6ZSxMcmV0MgorLyogQWRkIGxhc3QgbGltYiAqLworTGpvbmU6CWxkCSByMTAsczFfcHRyLDAKKwlsZAkgcjgsczJfcHRyLDAKKwlzdWJ1LmNpbyByNixyMTAscjgKKwlzdAkgcjYscmVzX3B0ciwwCisKK0xyZXQyOglhZGR1LmNpIHIyLHIwLHIwCQk7IHJldHVybiBjYXJyeS1vdXQgZnJvbSBtb3N0IHNpZ24uIGxpbWIKKwlqbXAubgkgcjEKKwkgeG9yCXIyLHIyLDEKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vbTg4ay9tdWxfMS5zIGIvdGhpcmRfcGFydHkvZ21wL21wbi9tODhrL211bF8xLnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhhYmRjMAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vbTg4ay9tdWxfMS5zCkBAIC0wLDAgKzEsMTM2IEBACis7IG1jODgxMDAgX19nbXBuX211bF8xIC0tIE11bHRpcGx5IGEgbGltYiB2ZWN0b3Igd2l0aCBhIHNpbmdsZSBsaW1iIGFuZAorOyBzdG9yZSB0aGUgcHJvZHVjdCBpbiBhIHNlY29uZCBsaW1iIHZlY3Rvci4KKworOyBDb3B5cmlnaHQgMTk5MiwgMTk5NCwgMTk5NSwgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworOyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorOworOyAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKzsgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6Cis7Cis7ICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKzsgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorOyAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCis7Cis7ICBvcgorOworOyAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKzsgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorOyAgICAgIGxhdGVyIHZlcnNpb24uCis7Cis7ICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorOworOyAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorOyAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKzsgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorOyAgZm9yIG1vcmUgZGV0YWlscy4KKzsKKzsgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKKzsgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKKzsgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCis7IElOUFVUIFBBUkFNRVRFUlMKKzsgcmVzX3B0cglyMgorOyBzMV9wdHIJcjMKKzsgc2l6ZQkJcjQKKzsgczJfbGltYglyNQorCis7IENvbW1vbiBvdmVyaGVhZCBpcyBhYm91dCAxMSBjeWNsZXMvaW52b2NhdGlvbi4KKworOyBUaGUgc3BlZWQgZm9yIFMyX0xJTUIgPj0gMHgxMDAwMCBpcyBhcHByb3hpbWF0ZWx5IDIxIGN5Y2xlcy9saW1iLiAgKFRoZQorOyBwaXBlbGluZSBzdGFsbHMgMiBjeWNsZXMgZHVlIHRvIFdCIGNvbnRlbnRpb24uKQorCis7IFRoZSBzcGVlZCBmb3IgUzJfTElNQiA8IDB4MTAwMDAgaXMgYXBwcm94aW1hdGVseSAxNiBjeWNsZXMvbGltYi4gIChUaGUKKzsgcGlwZWxpbmUgc3RhbGxzIDIgY3ljbGVzIGR1ZSB0byBXQiBjb250ZW50aW9uIGFuZCAxIGN5Y2xlIGR1ZSB0byBsYXRlbmN5LikKKworOyBUbyBlbmhhbmNlIHNwZWVkOgorOyAxLiBVbnJvbGwgbWFpbiBsb29wIDQtOCB0aW1lcy4KKzsgMi4gU2NoZWR1bGUgY29kZSB0byBhdm9pZCBXQiBjb250ZW50aW9uLiAgSXQgbWlnaHQgYmUgdGVtcHRpbmcgdG8gbW92ZSB0aGUKKzsgICAgbGQgaW5zdHJ1Y3Rpb24gaW4gdGhlIGxvb3BzIGRvd24gdG8gc2F2ZSAyIGN5Y2xlcyAobGVzcyBXQiBjb250ZW50aW9uKSwKKzsgICAgYnV0IHRoYXQgbG9vc2VzIGJlY2F1c2UgdGhlIHVsdGltYXRlIHZhbHVlIHdpbGwgYmUgcmVhZCBmcm9tIG91dHNpZGUKKzsgICAgdGhlIGFsbG9jYXRlZCBzcGFjZS4gIEJ1dCBpZiB3ZSBoYW5kbGUgdGhlIHVsdGltYXRlIG11bHRpcGxpY2F0aW9uIGluCis7ICAgIHRoZSB0YWlsLCB3ZSBjYW4gZG8gdGhpcy4KKzsgMy4gTWFrZSB0aGUgbXVsdGlwbGljYXRpb24gd2l0aCBsZXNzIGluc3RydWN0aW9ucy4gIEkgdGhpbmsgdGhlIGNvZGUgZm9yCis7ICAgIChTMl9MSU1CID49IDB4MTAwMDApIGlzIG5vdCBtaW5pbWFsLgorOyBXaXRoIHRoZXNlIHRlY2huaXF1ZXMgdGhlIChTMl9MSU1CID49IDB4MTAwMDApIGNhc2Ugd291bGQgcnVuIGluIDE3IG9yCis7IGxlc3MgY3ljbGVzL2xpbWI7IHRoZSAoUzJfTElNQiA8IDB4MTAwMDApIGNhc2Ugd291bGQgcnVuIGluIDExCis7IGN5Y2xlcy9saW1iLiAgKEFzc3VtaW5nIGluZmluaXRlIHVucm9sbGluZy4pCisKKwl0ZXh0CisJYWxpZ24JIDE2CisJZ2xvYmFsCSBfX19nbXBuX211bF8xCitfX19nbXBuX211bF8xOgorCisJOyBNYWtlIFMxX1BUUiBhbmQgUkVTX1BUUiBwb2ludCBhdCB0aGUgZW5kIG9mIHRoZWlyIGJsb2NrcworCTsgYW5kIG5lZ2F0ZSBTSVpFLgorCWxkYQkgcjMscjNbcjRdCisJbGRhCSByNixyMltyNF0JOyBSRVNfUFRSIGluIHI2IHNpbmNlIHIyIGlzIHJldHZhbAorCXN1YnUJIHI0LHIwLHI0CisKKwlhZGR1LmNvCSByMixyMCxyMAk7IHIyID0gY3kgPSAwCisJbGQJIHI5LHIzW3I0XQorCW1hc2sJIHI3LHI1LDB4ZmZmZgk7IHI3ID0gbG8oUzJfTElNQikKKwlleHR1CSByOCxyNSwxNgk7IHI4ID0gaGkoUzJfTElNQikKKwliY25kLm4JIGVxMCxyOCxMc21hbGwJOyBqdW1wIGlmIChoaShTMl9MSU1CKSA9PSAwKQorCSBzdWJ1CSByNixyNiw0CisKKzsgR2VuZXJhbCBjb2RlIGZvciBhbnkgdmFsdWUgb2YgUzJfTElNQi4KKworCTsgTWFrZSBhIHN0YWNrIGZyYW1lIGFuZCBzYXZlIHIyNSBhbmQgcjI2CisJc3VidQkgcjMxLHIzMSwxNgorCXN0LmQJIHIyNSxyMzEsOAorCisJOyBFbnRlciB0aGUgbG9vcCBpbiB0aGUgbWlkZGxlCisJYnIubglMMQorCWFkZHUJIHI0LHI0LDEKKworTG9vcDoJbGQJIHI5LHIzW3I0XQorCXN0CSByMjYscjZbcjRdCis7IGJjbmQJbmUwLHIwLDAJCTsgYnViYmxlCisJYWRkdQkgcjQscjQsMQorTDE6CW11bAkgcjI2LHI5LHI1CTsgbG93IHdvcmQgb2YgcHJvZHVjdAltdWxfMQlXQiBsZAorCW1hc2sJIHIxMixyOSwweGZmZmYJOyByMTIgPSBsbyhzMV9saW1iKQltYXNrXzEKKwltdWwJIHIxMSxyMTIscjcJOyByMTEgPSAgcHJvZF8wCQltdWxfMglXQiBtYXNrXzEKKwltdWwJIHIxMCxyMTIscjgJOyByMTAgPSBwcm9kXzFhCQltdWxfMworCWV4dHUJIHIxMyxyOSwxNgk7IHIxMyA9IGhpKHMxX2xpbWIpCWV4dHVfMQlXQiBtdWxfMQorCW11bAkgcjEyLHIxMyxyNwk7IHIxMiA9IHByb2RfMWIJCW11bF80CVdCIGV4dHVfMQorCW11bAkgcjI1LHIxMyxyOAk7IHIyNSAgPSBwcm9kXzIJCW11bF81CVdCIG11bF8yCisJZXh0dQkgcjExLHIxMSwxNgk7IHIxMSA9IGhpKHByb2RfMCkJZXh0dV8yCVdCIG11bF8zCisJYWRkdQkgcjEwLHIxMCxyMTEJOwkJCWFkZHVfMQlXQiBleHR1XzIKKzsgYmNuZAluZTAscjAsMAkJOyBidWJibGUJCQlXQiBhZGR1XzEKKwlhZGR1LmNvCSByMTAscjEwLHIxMgk7CQkJCVdCIG11bF80CisJbWFzay51CSByMTAscjEwLDB4ZmZmZgk7IG1vdmUgdGhlIDE2IG1vc3Qgc2lnbmlmaWNhbnQgYml0cy4uLgorCWFkZHUuY2kJIHIxMCxyMTAscjAJOyAuLi50byB0aGUgbG93IGhhbGYgb2YgdGhlIHdvcmQuLi4KKwlyb3QJIHIxMCxyMTAsMTYJOyAuLi5hbmQgcHV0IGNhcnJ5IGluIHBvcyAxNi4KKwlhZGR1LmNvCSByMjYscjI2LHIyCTsgYWRkIG9sZCBjYXJyeSBsaW1iCisJYmNuZC5uCSBuZTAscjQsTG9vcAorCSBhZGR1LmNpIHIyLHIyNSxyMTAJOyBjb21wdXRlIG5ldyBjYXJyeSBsaW1iCisKKwlzdAkgcjI2LHI2W3I0XQorCWxkLmQJIHIyNSxyMzEsOAorCWptcC5uCSByMQorCSBhZGR1CSByMzEscjMxLDE2CisKKzsgRmFzdCBjb2RlIGZvciBTMl9MSU1CIDwgMHgxMDAwMAorTHNtYWxsOgorCTsgRW50ZXIgdGhlIGxvb3AgaW4gdGhlIG1pZGRsZQorCWJyLm4JU0wxCisJYWRkdQkgcjQscjQsMQorCitTTG9vcDoJbGQJIHI5LHIzW3I0XQk7CisJc3QJIHI4LHI2W3I0XQk7CisJYWRkdQkgcjQscjQsMQk7CitTTDE6CW11bAkgcjgscjkscjUJOyBsb3cgd29yZCBvZiBwcm9kdWN0CisJbWFzawkgcjEyLHI5LDB4ZmZmZgk7IHIxMiA9IGxvKHMxX2xpbWIpCisJZXh0dQkgcjEzLHI5LDE2CTsgcjEzID0gaGkoczFfbGltYikKKwltdWwJIHIxMSxyMTIscjcJOyByMTEgPSAgcHJvZF8wCisJbXVsCSByMTIscjEzLHI3CTsgcjEyID0gcHJvZF8xYgorCWFkZHUuY2lvIHI4LHI4LHIyCTsgYWRkIG9sZCBjYXJyeSBsaW1iCisJZXh0dQkgcjEwLHIxMSwxNgk7IHIxMSA9IGhpKHByb2RfMCkKKwlhZGR1CSByMTAscjEwLHIxMgk7CisJYmNuZC5uCSBuZTAscjQsU0xvb3AKKwlleHR1CSByMixyMTAsMTYJOyByMiA9IG5ldyBjYXJyeSBsaW1iCisKKwlqbXAubgkgcjEKKwlzdAkgcjgscjZbcjRdCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL204OGsvc3ViX24ucyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vbTg4ay9zdWJfbi5zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZDhmMDkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL204OGsvc3ViX24ucwpAQCAtMCwwICsxLDExNSBAQAorOyBtYzg4MTAwIG1wbl9zdWJfbiAtLSBTdWJ0cmFjdCB0d28gbGltYiB2ZWN0b3JzIG9mIHRoZSBzYW1lIGxlbmd0aCA+IDAgYW5kCis7IHN0b3JlIGRpZmZlcmVuY2UgaW4gYSB0aGlyZCBsaW1iIHZlY3Rvci4KKworOyBDb3B5cmlnaHQgMTk5MiwgMTk5NCwgMTk5NiwgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworOyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorOworOyAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKzsgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6Cis7Cis7ICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKzsgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorOyAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCis7Cis7ICBvcgorOworOyAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKzsgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorOyAgICAgIGxhdGVyIHZlcnNpb24uCis7Cis7ICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorOworOyAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorOyAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKzsgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorOyAgZm9yIG1vcmUgZGV0YWlscy4KKzsKKzsgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKKzsgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKKzsgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCis7IElOUFVUIFBBUkFNRVRFUlMKKzsgcmVzX3B0cglyMgorOyBzMV9wdHIJcjMKKzsgczJfcHRyCXI0Cis7IHNpemUJCXI1CisKKzsgVGhpcyBjb2RlIGhhcyBiZWVuIG9wdGltaXplZCB0byBydW4gb25lIGluc3RydWN0aW9uIHBlciBjbG9jaywgYXZvaWRpbmcKKzsgbG9hZCBzdGFsbHMgYW5kIHdyaXRlYmFjayBjb250ZW50aW9uLiAgQXMgYSByZXN1bHQsIHRoZSBpbnN0cnVjdGlvbgorOyBvcmRlciBpcyBub3QgYWx3YXlzIG5hdHVyYWwuCisKKzsgVGhlIHNwZWVkIGlzIGFib3V0IDQuNiBjbG9ja3MvbGltYiArIDE4IGNsb2Nrcy9saW1iLXZlY3RvciBvbiBhbiA4ODEwMCwKKzsgYnV0IG9uIHRoZSA4ODExMCwgaXQgc2VlbXMgdG8gcnVuIG11Y2ggc2xvd2VyLCA2LjYgY2xvY2tzL2xpbWIuCisKKwl0ZXh0CisJYWxpZ24JIDE2CisJZ2xvYmFsCSBfX19nbXBuX3N1Yl9uCitfX19nbXBuX3N1Yl9uOgorCWxkCXI2LHIzLDAJCQk7IHJlYWQgZmlyc3QgbGltYiBmcm9tIHMxX3B0cgorCWV4dHUJcjEwLHI1LDMKKwlsZAlyNyxyNCwwCQkJOyByZWFkIGZpcnN0IGxpbWIgZnJvbSBzMl9wdHIKKworCXN1YnUJcjUscjAscjUKKwltYWsJcjUscjUsMzw0PgorCWJjbmQubgllcTAscjUsTHplcm8KKwlzdWJ1LmNvCXIwLHIwLHIwCQk7IGluaXRpYWxpemUgY2FycnkKKworCW9yCXIxMixyMCxsbzE2KExiYXNlKQorCW9yLnUJcjEyLHIxMixoaTE2KExiYXNlKQorCWFkZHUJcjEyLHIxMixyNQkJOyByMTIgaXMgYWRkcmVzcyBmb3IgZW50ZXJpbmcgaW4gbG9vcAorCisJZXh0dQlyNSxyNSwyCQkJOyBkaXZpZGUgYnkgNAorCXN1YnUJcjIscjIscjUJCTsgYWRqdXN0IHJlc19wdHIKKwlzdWJ1CXIzLHIzLHI1CQk7IGFkanVzdCBzMV9wdHIKKwlzdWJ1CXI0LHI0LHI1CQk7IGFkanVzdCBzMl9wdHIKKworCW9yCXI4LHI2LHIwCisKKwlqbXAubglyMTIKKwkgb3IJcjkscjcscjAKKworTG9vcDoJYWRkdQlyMyxyMywzMgorCXN0CXI4LHIyLDI4CisJYWRkdQlyNCxyNCwzMgorCWxkCXI2LHIzLDAKKwlhZGR1CXIyLHIyLDMyCisJbGQJcjcscjQsMAorTHplcm86CXN1YnUJcjEwLHIxMCwxCQk7IHN1YnRyYWN0IDAgKyA4ciBsaW1icyAoYWRqIGxvb3AgY250KQorTGJhc2U6CWxkCXI4LHIzLDQKKwlzdWJ1LmNpbyByNixyNixyNworCWxkCXI5LHI0LDQKKwlzdAlyNixyMiwwCisJbGQJcjYscjMsOAkJCTsgc3VidHJhY3QgNyArIDhyIGxpbWJzCisJc3VidS5jaW8gcjgscjgscjkKKwlsZAlyNyxyNCw4CisJc3QJcjgscjIsNAorCWxkCXI4LHIzLDEyCQk7IHN1YnRyYWN0IDYgKyA4ciBsaW1icworCXN1YnUuY2lvIHI2LHI2LHI3CisJbGQJcjkscjQsMTIKKwlzdAlyNixyMiw4CisJbGQJcjYscjMsMTYJCTsgc3VidHJhY3QgNSArIDhyIGxpbWJzCisJc3VidS5jaW8gcjgscjgscjkKKwlsZAlyNyxyNCwxNgorCXN0CXI4LHIyLDEyCisJbGQJcjgscjMsMjAJCTsgc3VidHJhY3QgNCArIDhyIGxpbWJzCisJc3VidS5jaW8gcjYscjYscjcKKwlsZAlyOSxyNCwyMAorCXN0CXI2LHIyLDE2CisJbGQJcjYscjMsMjQJCTsgc3VidHJhY3QgMyArIDhyIGxpbWJzCisJc3VidS5jaW8gcjgscjgscjkKKwlsZAlyNyxyNCwyNAorCXN0CXI4LHIyLDIwCisJbGQJcjgscjMsMjgJCTsgc3VidHJhY3QgMiArIDhyIGxpbWJzCisJc3VidS5jaW8gcjYscjYscjcKKwlsZAlyOSxyNCwyOAorCXN0CXI2LHIyLDI0CisJYmNuZC5uCW5lMCxyMTAsTG9vcAkJOyBzdWJ0cmFjdCAxICsgOHIgbGltYnMKKwkgc3VidS5jaW8gcjgscjgscjkKKworCXN0CXI4LHIyLDI4CQk7IHN0b3JlIG1vc3Qgc2lnbmlmaWNhbnQgbGltYgorCisJYWRkdS5jaSByMixyMCxyMAkJOyByZXR1cm4gY2Fycnktb3V0IGZyb20gbW9zdCBzaWduLiBsaW1iCisJam1wLm4JIHIxCisJIHhvcglyMixyMiwxCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL21pbml0aHJlcy9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL21pbml0aHJlcy9nbXAtbXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVmY2I3NwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vbWluaXRocmVzL2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDExMyBAQAorLyogTWluaW1hbCB2YWx1ZXMgZ21wLW1wYXJhbS5oIC0tIENvbXBpbGVyL21hY2hpbmUgcGFyYW1ldGVyIGhlYWRlciBmaWxlLgorCitDb3B5cmlnaHQgMTk5MSwgMTk5MywgMTk5NCwgMjAwMCwgMjAwNiwgMjAwOC0yMDEwLCAyMDEyIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworLyogVGhlIHZhbHVlcyBpbiB0aGlzIGZpbGUgYXJlIG5vdCBjdXJyZW50bHkgbWluaW1hbC4KKyAgIFRyaW1taW5nIHRoZW0gZnVydGhlciB3b3VsZCBiZSBnb29kLiAgKi8KKworI2RlZmluZSBNT0RfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PRF8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFOX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgIDIKKyNkZWZpbmUgTU9EXzFVX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgIDIKKyNkZWZpbmUgTU9EXzFfMV9UT19NT0RfMV8yX1RIUkVTSE9MRCAgICAgICAgIDMKKyNkZWZpbmUgTU9EXzFfMl9UT19NT0RfMV80X1RIUkVTSE9MRCAgICAgICAgIDQKKyNkZWZpbmUgUFJFSU5WX01PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgIDEKKyNkZWZpbmUgVVNFX1BSRUlOVl9ESVZSRU1fMSAgICAgICAgICAgICAgICAgIDEgIC8qIG5hdGl2ZSAqLworI2RlZmluZSBESVZFWEFDVF8xX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIEJNT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgICAgICAgICAzCisKKyNkZWZpbmUgTVVMX1RPT00yMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgTVVMX1RPT00zM19USFJFU0hPTEQgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgTVVMX1RPT000NF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgTVVMX1RPT002SF9USFJFU0hPTEQgICAgICAgICAgICAgICAgNzAgLyogRklYTUUgKi8KKyNkZWZpbmUgTVVMX1RPT004SF9USFJFU0hPTEQgICAgICAgICAgICAgICAgODYKKworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT000M19USFJFU0hPTEQgICAgICA1MCAvKiBGSVhNRSAqLworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT001M19USFJFU0hPTEQgICAgICA1MCAvKiBGSVhNRSAqLworI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT001M19USFJFU0hPTEQgICAgICA1MCAvKiBGSVhNRSAqLworI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT002M19USFJFU0hPTEQgICAgICA1MCAvKiBGSVhNRSAqLworCisjZGVmaW5lIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIFNRUl9UT09NNF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIFNRUl9UT09NNkhfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDcwIC8qIEZJWE1FICovCisjZGVmaW5lIFNRUl9UT09NOEhfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDg2CisKKyNkZWZpbmUgTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgMTAKKyNkZWZpbmUgU1FSTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgMTAKKworI2RlZmluZSBNVUxfRkZUX1RBQkxFICB7NjQsIDI1NiwgMTAyNCwgNDA5NiwgODE5MiwgNjU1MzYsIDB9CisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgIDY1CisjZGVmaW5lIE1VTF9GRlRfVEhSRVNIT0xEICAgICAgMjAwCisKKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRSAgezY0LCAyNTYsIDEwMjQsIDQwOTYsIDgxOTIsIDY1NTM2LCAwfQorI2RlZmluZSBTUVJfRkZUX01PREZfVEhSRVNIT0xEICA2NQorI2RlZmluZSBTUVJfRkZUX1RIUkVTSE9MRCAgICAgIDIwMAorCisjZGVmaW5lIE1VTExPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAwCisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFNRUkxPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAwCisjZGVmaW5lIFNRUkxPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFNRUkxPX1NRUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgICA0CisKKworI2RlZmluZSBEQ19ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBEQ19ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgNgorI2RlZmluZSBEQ19CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBEQ19CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgNAorCisjZGVmaW5lIElOVl9NVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAyCisjZGVmaW5lIElOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIElOVl9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICA0CisKKyNkZWZpbmUgQklOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgUkVEQ18xX1RPX1JFRENfTl9USFJFU0hPTEQgICAgICAgICAgIDkKKworI2RlZmluZSBNVV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBNVV9ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgOAorI2RlZmluZSBNVVBJX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgOAorI2RlZmluZSBNVV9CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBNVV9CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgOAorCisjZGVmaW5lIE1BVFJJWDIyX1NUUkFTU0VOX1RIUkVTSE9MRCAgICAgICAgICAyCisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIEdDREVYVF9TQ0hPRU5IQUdFX1RIUkVTSE9MRCAgICAgICAgIDIwCisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgR0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICAgMTAKKyNkZWZpbmUgU0VUX1NUUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgNjQKKyNkZWZpbmUgU0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICAxMDAKKworI2RlZmluZSBGQUNfT0REX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIEZBQ19EU0NfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDcwCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL21pcHMzMi9hZGRfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL21pcHMzMi9hZGRfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdkNGM0OAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vbWlwczMyL2FkZF9uLmFzbQpAQCAtMCwwICsxLDEyNCBAQAorZG5sICBNSVBTMzIgbXBuX2FkZF9uIC0tIEFkZCB0d28gbGltYiB2ZWN0b3JzIG9mIHRoZSBzYW1lIGxlbmd0aCA+IDAgYW5kIHN0b3JlCitkbmwgIHN1bSBpbiBhIHRoaXJkIGxpbWIgdmVjdG9yLgorCitkbmwgIENvcHlyaWdodCAxOTk1LCAyMDAwLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyByZXNfcHRyCSQ0CitDIHMxX3B0cgkkNQorQyBzMl9wdHIJJDYKK0Mgc2l6ZQkJJDcKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9hZGRfbikKKworCWx3CSQxMCwwKCQ1KQorCWx3CSQxMSwwKCQ2KQorCisJYWRkaXUJJDcsJDcsLTEKKwlhbmQJJDksJDcsNC0xCUMgbnVtYmVyIG9mIGxpbWJzIGluIGZpcnN0IGxvb3AKKwliZXEJJDksJDAsLkwwCUMgaWYgbXVsdGlwbGUgb2YgNCBsaW1icywgc2tpcCBmaXJzdCBsb29wCisJIG1vdmUJJDIsJDAKKworCXN1YnUJJDcsJDcsJDkKKworLkxvb3AwOglhZGRpdQkkOSwkOSwtMQorCWx3CSQxMiw0KCQ1KQorCWFkZHUJJDExLCQxMSwkMgorCWx3CSQxMyw0KCQ2KQorCXNsdHUJJDgsJDExLCQyCisJYWRkdQkkMTEsJDEwLCQxMQorCXNsdHUJJDIsJDExLCQxMAorCXN3CSQxMSwwKCQ0KQorCW9yCSQyLCQyLCQ4CisKKwlhZGRpdQkkNSwkNSw0CisJYWRkaXUJJDYsJDYsNAorCW1vdmUJJDEwLCQxMgorCW1vdmUJJDExLCQxMworCWJuZQkkOSwkMCwuTG9vcDAKKwkgYWRkaXUJJDQsJDQsNAorCisuTDA6CWJlcQkkNywkMCwuTGVuZAorCSBub3AKKworLkxvb3A6CWFkZGl1CSQ3LCQ3LC00CisKKwlsdwkkMTIsNCgkNSkKKwlhZGR1CSQxMSwkMTEsJDIKKwlsdwkkMTMsNCgkNikKKwlzbHR1CSQ4LCQxMSwkMgorCWFkZHUJJDExLCQxMCwkMTEKKwlzbHR1CSQyLCQxMSwkMTAKKwlzdwkkMTEsMCgkNCkKKwlvcgkkMiwkMiwkOAorCisJbHcJJDEwLDgoJDUpCisJYWRkdQkkMTMsJDEzLCQyCisJbHcJJDExLDgoJDYpCisJc2x0dQkkOCwkMTMsJDIKKwlhZGR1CSQxMywkMTIsJDEzCisJc2x0dQkkMiwkMTMsJDEyCisJc3cJJDEzLDQoJDQpCisJb3IJJDIsJDIsJDgKKworCWx3CSQxMiwxMigkNSkKKwlhZGR1CSQxMSwkMTEsJDIKKwlsdwkkMTMsMTIoJDYpCisJc2x0dQkkOCwkMTEsJDIKKwlhZGR1CSQxMSwkMTAsJDExCisJc2x0dQkkMiwkMTEsJDEwCisJc3cJJDExLDgoJDQpCisJb3IJJDIsJDIsJDgKKworCWx3CSQxMCwxNigkNSkKKwlhZGR1CSQxMywkMTMsJDIKKwlsdwkkMTEsMTYoJDYpCisJc2x0dQkkOCwkMTMsJDIKKwlhZGR1CSQxMywkMTIsJDEzCisJc2x0dQkkMiwkMTMsJDEyCisJc3cJJDEzLDEyKCQ0KQorCW9yCSQyLCQyLCQ4CisKKwlhZGRpdQkkNSwkNSwxNgorCWFkZGl1CSQ2LCQ2LDE2CisKKwlibmUJJDcsJDAsLkxvb3AKKwkgYWRkaXUJJDQsJDQsMTYKKworLkxlbmQ6CWFkZHUJJDExLCQxMSwkMgorCXNsdHUJJDgsJDExLCQyCisJYWRkdQkkMTEsJDEwLCQxMQorCXNsdHUJJDIsJDExLCQxMAorCXN3CSQxMSwwKCQ0KQorCWoJJDMxCisJb3IJJDIsJDIsJDgKK0VQSUxPR1VFKG1wbl9hZGRfbikKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vbWlwczMyL2FkZG11bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vbWlwczMyL2FkZG11bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWE5ZTE2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9taXBzMzIvYWRkbXVsXzEuYXNtCkBAIC0wLDAgKzEsMTAxIEBACitkbmwgIE1JUFMzMiBtcG5fYWRkbXVsXzEgLS0gTXVsdGlwbHkgYSBsaW1iIHZlY3RvciB3aXRoIGEgc2luZ2xlIGxpbWIgYW5kIGFkZAorZG5sICB0aGUgcHJvZHVjdCB0byBhIHNlY29uZCBsaW1iIHZlY3Rvci4KKworZG5sICBDb3B5cmlnaHQgMTk5MiwgMTk5NCwgMTk5NiwgMjAwMCwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDIElOUFVUIFBBUkFNRVRFUlMKK0MgcmVzX3B0cgkkNAorQyBzMV9wdHIJJDUKK0Mgc2l6ZQkJJDYKK0MgczJfbGltYgkkNworCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2FkZG11bF8xKQorCitDIGZlZWQtaW4gcGhhc2UgMAorCWx3CSQ4LDAoJDUpCisKK0MgZmVlZC1pbiBwaGFzZSAxCisJYWRkaXUJJDUsJDUsNAorCW11bHR1CSQ4LCQ3CisKKwlhZGRpdQkkNiwkNiwtMQorCWJlcQkkNiwkMCwkTEMwCisJIG1vdmUJJDIsJDAJCUMgemVybyBjeTIKKworCWFkZGl1CSQ2LCQ2LC0xCisJYmVxCSQ2LCQwLCRMQzEKKwlsdwkkOCwwKCQ1KQlDIGxvYWQgbmV3IHMxIGxpbWIgYXMgZWFybHkgYXMgcG9zc2libGUKKworTG9vcDoJbHcJJDEwLDAoJDQpCisJbWZsbwkkMworCW1maGkJJDkKKwlhZGRpdQkkNSwkNSw0CisJYWRkdQkkMywkMywkMglDIGFkZCBvbGQgY2FycnkgbGltYiB0byBsb3cgcHJvZHVjdCBsaW1iCisJbXVsdHUJJDgsJDcKKwlsdwkkOCwwKCQ1KQlDIGxvYWQgbmV3IHMxIGxpbWIgYXMgZWFybHkgYXMgcG9zc2libGUKKwlhZGRpdQkkNiwkNiwtMQlDIGRlY3JlbWVudCBsb29wIGNvdW50ZXIKKwlzbHR1CSQyLCQzLCQyCUMgY2FycnkgZnJvbSBwcmV2aW91cyBhZGRpdGlvbiAtPiAkMgorCWFkZHUJJDMsJDEwLCQzCisJc2x0dQkkMTAsJDMsJDEwCisJYWRkdQkkMiwkMiwkMTAKKwlzdwkkMywwKCQ0KQorCWFkZGl1CSQ0LCQ0LDQKKwlibmUJJDYsJDAsTG9vcAorCSBhZGR1CSQyLCQ5LCQyCUMgYWRkIGhpZ2ggcHJvZHVjdCBsaW1iIGFuZCBjYXJyeSBmcm9tIGFkZGl0aW9uCisKK0Mgd2luZC1kb3duIHBoYXNlIDEKKyRMQzE6CWx3CSQxMCwwKCQ0KQorCW1mbG8JJDMKKwltZmhpCSQ5CisJYWRkdQkkMywkMywkMgorCXNsdHUJJDIsJDMsJDIKKwltdWx0dQkkOCwkNworCWFkZHUJJDMsJDEwLCQzCisJc2x0dQkkMTAsJDMsJDEwCisJYWRkdQkkMiwkMiwkMTAKKwlzdwkkMywwKCQ0KQorCWFkZGl1CSQ0LCQ0LDQKKwlhZGR1CSQyLCQ5LCQyCUMgYWRkIGhpZ2ggcHJvZHVjdCBsaW1iIGFuZCBjYXJyeSBmcm9tIGFkZGl0aW9uCisKK0Mgd2luZC1kb3duIHBoYXNlIDAKKyRMQzA6CWx3CSQxMCwwKCQ0KQorCW1mbG8JJDMKKwltZmhpCSQ5CisJYWRkdQkkMywkMywkMgorCXNsdHUJJDIsJDMsJDIKKwlhZGR1CSQzLCQxMCwkMworCXNsdHUJJDEwLCQzLCQxMAorCWFkZHUJJDIsJDIsJDEwCisJc3cJJDMsMCgkNCkKKwlqCSQzMQorCWFkZHUJJDIsJDksJDIJQyBhZGQgaGlnaCBwcm9kdWN0IGxpbWIgYW5kIGNhcnJ5IGZyb20gYWRkaXRpb24KK0VQSUxPR1VFKG1wbl9hZGRtdWxfMSkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vbWlwczMyL2dtcC1tcGFyYW0uaCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vbWlwczMyL2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODYxMzVkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9taXBzMzIvZ21wLW1wYXJhbS5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qIGdtcC1tcGFyYW0uaCAtLSBDb21waWxlci9tYWNoaW5lIHBhcmFtZXRlciBoZWFkZXIgZmlsZS4KKworQ29weXJpZ2h0IDE5OTEsIDE5OTMsIDE5OTQsIDE5OTktMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgMzIKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgNAorCisKKy8qIEdlbmVyYXRlZCBieSB0dW5ldXAuYywgMjAwMi0wMi0yMCwgZ2NjIDIuOTUgKFIzMDAwKSAqLworCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgIDIwCisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgIDUwCisKKyNkZWZpbmUgU1FSX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgIDcKKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgNTcKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAgNzgKKworI2RlZmluZSBESVZfU0JfUFJFSU5WX1RIUkVTSE9MRCAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIERJVl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgIDU3CisjZGVmaW5lIFBPV01fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDc4CisKKyNkZWZpbmUgR0NEX0FDQ0VMX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgSkFDT0JJX0JBU0VfTUVUSE9EICAgICAgICAgICAgICAgIDIKKworI2RlZmluZSBESVZSRU1fMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIERJVlJFTV8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAxCisjZGVmaW5lIFVTRV9QUkVJTlZfTU9EXzEgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIERJVlJFTV8yX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgRElWRVhBQ1RfMV9USFJFU0hPTEQgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RFWEFDVF8xX09ERF9USFJFU0hPTEQgICAgICAgICAgMCAgLyogYWx3YXlzICovCisKKyNkZWZpbmUgR0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgMTkKKyNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgMjUKKyNkZWZpbmUgU0VUX1NUUl9USFJFU0hPTEQgICAgICAgICAgICAgICAzMDkKKworI2RlZmluZSBNVUxfRkZUX1RBQkxFICB7IDQ5NiwgMTA1NiwgMjE3NiwgNTYzMiwgMTQzMzYsIDQwOTYwLCAwIH0KKyNkZWZpbmUgTVVMX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICA2MjQKKyNkZWZpbmUgTVVMX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgIDU4ODgKKworI2RlZmluZSBTUVJfRkZUX1RBQkxFICB7IDQ5NiwgMTE4NCwgMjE3NiwgNTYzMiwgMTQzMzYsIDQwOTYwLCAwIH0KKyNkZWZpbmUgU1FSX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICA1NjAKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgIDUzNzYKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vbWlwczMyL2xzaGlmdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL21pcHMzMi9sc2hpZnQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNThiYjQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL21pcHMzMi9sc2hpZnQuYXNtCkBAIC0wLDAgKzEsOTkgQEAKK2RubCAgTUlQUzMyIG1wbl9sc2hpZnQgLS0gTGVmdCBzaGlmdC4KKworZG5sICBDb3B5cmlnaHQgMTk5NSwgMjAwMCwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDIElOUFVUIFBBUkFNRVRFUlMKK0MgcmVzX3B0cgkkNAorQyBzcmNfcHRyCSQ1CitDIHNpemUJCSQ2CitDIGNudAkJJDcKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9sc2hpZnQpCisJc2xsCSQyLCQ2LDIKKwlhZGR1CSQ1LCQ1LCQyCUMgbWFrZSByNSBwb2ludCBhdCBlbmQgb2Ygc3JjCisJbHcJJDEwLC00KCQ1KQlDIGxvYWQgZmlyc3QgbGltYgorCXN1YnUJJDEzLCQwLCQ3CisJYWRkdQkkNCwkNCwkMglDIG1ha2UgcjQgcG9pbnQgYXQgZW5kIG9mIHJlcworCWFkZGl1CSQ2LCQ2LC0xCisJYW5kCSQ5LCQ2LDQtMQlDIG51bWJlciBvZiBsaW1icyBpbiBmaXJzdCBsb29wCisJYmVxCSQ5LCQwLC5MMAlDIGlmIG11bHRpcGxlIG9mIDQgbGltYnMsIHNraXAgZmlyc3QgbG9vcAorCSBzcmwJJDIsJDEwLCQxMwlDIGNvbXB1dGUgZnVuY3Rpb24gcmVzdWx0CisKKwlzdWJ1CSQ2LCQ2LCQ5CisKKy5Mb29wMDoJbHcJJDMsLTgoJDUpCisJYWRkaXUJJDQsJDQsLTQKKwlhZGRpdQkkNSwkNSwtNAorCWFkZGl1CSQ5LCQ5LC0xCisJc2xsCSQxMSwkMTAsJDcKKwlzcmwJJDEyLCQzLCQxMworCW1vdmUJJDEwLCQzCisJb3IJJDgsJDExLCQxMgorCWJuZQkkOSwkMCwuTG9vcDAKKwkgc3cJJDgsMCgkNCkKKworLkwwOgliZXEJJDYsJDAsLkxlbmQKKwkgbm9wCisKKy5Mb29wOglsdwkkMywtOCgkNSkKKwlhZGRpdQkkNCwkNCwtMTYKKwlhZGRpdQkkNiwkNiwtNAorCXNsbAkkMTEsJDEwLCQ3CisJc3JsCSQxMiwkMywkMTMKKworCWx3CSQxMCwtMTIoJDUpCisJc2xsCSQxNCwkMywkNworCW9yCSQ4LCQxMSwkMTIKKwlzdwkkOCwxMigkNCkKKwlzcmwJJDksJDEwLCQxMworCisJbHcJJDMsLTE2KCQ1KQorCXNsbAkkMTEsJDEwLCQ3CisJb3IJJDgsJDE0LCQ5CisJc3cJJDgsOCgkNCkKKwlzcmwJJDEyLCQzLCQxMworCisJbHcJJDEwLC0yMCgkNSkKKwlzbGwJJDE0LCQzLCQ3CisJb3IJJDgsJDExLCQxMgorCXN3CSQ4LDQoJDQpCisJc3JsCSQ5LCQxMCwkMTMKKworCWFkZGl1CSQ1LCQ1LC0xNgorCW9yCSQ4LCQxNCwkOQorCWJndHoJJDYsLkxvb3AKKwkgc3cJJDgsMCgkNCkKKworLkxlbmQ6CXNsbAkkOCwkMTAsJDcKKwlqCSQzMQorCXN3CSQ4LC00KCQ0KQorRVBJTE9HVUUobXBuX2xzaGlmdCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vbWlwczMyL21pcHMtZGVmcy5tNCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vbWlwczMyL21pcHMtZGVmcy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmE4OWVjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9taXBzMzIvbWlwcy1kZWZzLm00CkBAIC0wLDAgKzEsODAgQEAKK2RpdmVydCgtMSkKKworZG5sICBtNCBtYWNyb3MgZm9yIE1JUFMgYXNzZW1ibHkgY29kZSAoYm90aCAzMi1iaXQgYW5kIDY0LWJpdCkuCisKKworZG5sICBDb3B5cmlnaHQgMjAwMC0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworZG5sICBVc2FnZTogQVNNX1NUQVJUKCkKK2RlZmluZShgQVNNX1NUQVJUJywKK200X2Fzc2VydF9udW1hcmdzKDApCitgCS5zZXQgbm9yZW9yZGVyCisJLnNldCBub21hY3JvJykKKworZG5sICBVc2FnZTogWCh2YWx1ZSkKK2RlZmluZShgWCcsCittNF9hc3NlcnRfbnVtYXJncygxKQorYDB4JDEnKQorCitkbmwgIENhbGxlZDogUFJPTE9HVUVfY3B1KEdTWU1fUFJFRklYYCdmb28pCitkbmwgICAgICAgICAgRVBJTE9HVUVfY3B1KEdTWU1fUFJFRklYYCdmb28pCisKK2RlZmluZShgUFJPTE9HVUVfY3B1JywKK200X2Fzc2VydF9udW1hcmdzKDEpCitgCS50ZXh0CisJLmFsaWduCTQKKwkuZ2xvYmwJJDEKKwkuZW50CSQxCiskMTonKQorCitkZWZpbmUoYEVQSUxPR1VFX2NwdScsCittNF9hc3NlcnRfbnVtYXJncygxKQorYAkuZW5kCSQxJykKKworCitkbmwgIFVzYWdlOiByMCAuLi4gcjMxCitkbmwgICAgICAgICBmMCAuLi4gZjMxCitkbmwKK2RubCAgTWFwIHJlZ2lzdGVyIG5hbWVzIHIwIHRvICQwLCBhbmQgZjAgdG8gJGYwLCBldGMuCitkbmwKK2RubCAgZGVmcmVnKCkgaXMgdXNlZCB0byBwcm90ZWN0IHRoZSAkIGluICQwIChvdGhlcndpc2UgaXQgd291bGQgcmVwcmVzZW50IGEKK2RubCAgbWFjcm8gYXJndW1lbnQpLiAgRG91YmxlIHF1b3RpbmcgaXMgdXNlZCB0byBwcm90ZWN0IHRoZSBmMCBpbiAkZjAKK2RubCAgKG90aGVyd2lzZSBpdCB3b3VsZCBiZSBhbiBpbmZpbml0ZSByZWN1cnNpb24pLgorCitmb3Jsb29wKGksMCwzMSxgZGVmcmVnKGByJ2ksJGkpJykKK2Zvcmxvb3AoaSwwLDMxLGBkZWZsaXQoYGYnaSxgYCRmJydpKScpCisKKworZG5sICBVc2FnZTogQVNNX0VORCgpCitkZWZpbmUoYEFTTV9FTkQnLAorbTRfYXNzZXJ0X251bWFyZ3MoMCkKKykKKworZGl2ZXJ0CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL21pcHMzMi9taXBzLm00IGIvdGhpcmRfcGFydHkvZ21wL21wbi9taXBzMzIvbWlwcy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjQ5ZTU3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9taXBzMzIvbWlwcy5tNApAQCAtMCwwICsxLDgwIEBACitkaXZlcnQoLTEpCisKK2RubCAgbTQgbWFjcm9zIGZvciBNSVBTIGFzc2VtYmx5IGNvZGUuCisKKworZG5sICBDb3B5cmlnaHQgMjAwMC0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworZG5sICBVc2FnZTogQVNNX1NUQVJUKCkKK2RlZmluZShgQVNNX1NUQVJUJywKK200X2Fzc2VydF9udW1hcmdzKDApCitgCS5zZXQgbm9yZW9yZGVyCisJLnNldCBub21hY3JvJykKKworZG5sICBVc2FnZTogWCh2YWx1ZSkKK2RlZmluZShgWCcsCittNF9hc3NlcnRfbnVtYXJncygxKQorYDB4JDEnKQorCitkbmwgIENhbGxlZDogUFJPTE9HVUVfY3B1KEdTWU1fUFJFRklYYCdmb28pCitkbmwgICAgICAgICAgRVBJTE9HVUVfY3B1KEdTWU1fUFJFRklYYCdmb28pCisKK2RlZmluZShgUFJPTE9HVUVfY3B1JywKK200X2Fzc2VydF9udW1hcmdzKDEpCitgCS50ZXh0CisJLmFsaWduCTQKKwkuZ2xvYmwJJDEKKwkuZW50CSQxCiskMTonKQorCitkZWZpbmUoYEVQSUxPR1VFX2NwdScsCittNF9hc3NlcnRfbnVtYXJncygxKQorYAkuZW5kCSQxJykKKworCitkbmwgIFVzYWdlOiByMCAuLi4gcjMxCitkbmwgICAgICAgICBmMCAuLi4gZjMxCitkbmwKK2RubCAgTWFwIHJlZ2lzdGVyIG5hbWVzIHIwIHRvICQwLCBhbmQgZjAgdG8gJGYwLCBldGMuCitkbmwKK2RubCAgZGVmcmVnKCkgaXMgdXNlZCB0byBwcm90ZWN0IHRoZSAkIGluICQwIChvdGhlcndpc2UgaXQgd291bGQgcmVwcmVzZW50IGEKK2RubCAgbWFjcm8gYXJndW1lbnQpLiAgRG91YmxlIHF1b3RpbmcgaXMgdXNlZCB0byBwcm90ZWN0IHRoZSBmMCBpbiAkZjAKK2RubCAgKG90aGVyd2lzZSBpdCB3b3VsZCBiZSBhbiBpbmZpbml0ZSByZWN1cnNpb24pLgorCitmb3Jsb29wKGksMCwzMSxgZGVmcmVnKGByJ2ksJGkpJykKK2Zvcmxvb3AoaSwwLDMxLGBkZWZsaXQoYGYnaSxgYCRmJydpKScpCisKKworZG5sICBVc2FnZTogQVNNX0VORCgpCitkZWZpbmUoYEFTTV9FTkQnLAorbTRfYXNzZXJ0X251bWFyZ3MoMCkKKykKKworZGl2ZXJ0CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL21pcHMzMi9tdWxfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL21pcHMzMi9tdWxfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMzN2JjMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vbWlwczMyL211bF8xLmFzbQpAQCAtMCwwICsxLDg5IEBACitkbmwgIE1JUFMzMiBtcG5fbXVsXzEgLS0gTXVsdGlwbHkgYSBsaW1iIHZlY3RvciB3aXRoIGEgc2luZ2xlIGxpbWIgYW5kIHN0b3JlCitkbmwgIHRoZSBwcm9kdWN0IGluIGEgc2Vjb25kIGxpbWIgdmVjdG9yLgorCitkbmwgIENvcHlyaWdodCAxOTkyLCAxOTk0LCAxOTk2LCAyMDAwLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyByZXNfcHRyCSQ0CitDIHMxX3B0cgkkNQorQyBzaXplCQkkNgorQyBzMl9saW1iCSQ3CisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fbXVsXzEpCisKK0MgZmVlZC1pbiBwaGFzZSAwCisJbHcJJDgsMCgkNSkKKworQyBmZWVkLWluIHBoYXNlIDEKKwlhZGRpdQkkNSwkNSw0CisJbXVsdHUJJDgsJDcKKworCWFkZGl1CSQ2LCQ2LC0xCisJYmVxCSQ2LCQwLCRMQzAKKwkgbW92ZQkkMiwkMAkJQyB6ZXJvIGN5MgorCisJYWRkaXUJJDYsJDYsLTEKKwliZXEJJDYsJDAsJExDMQorCWx3CSQ4LDAoJDUpCUMgbG9hZCBuZXcgczEgbGltYiBhcyBlYXJseSBhcyBwb3NzaWJsZQorCitMb29wOgltZmxvCSQxMAorCW1maGkJJDkKKwlhZGRpdQkkNSwkNSw0CisJYWRkdQkkMTAsJDEwLCQyCUMgYWRkIG9sZCBjYXJyeSBsaW1iIHRvIGxvdyBwcm9kdWN0IGxpbWIKKwltdWx0dQkkOCwkNworCWx3CSQ4LDAoJDUpCUMgbG9hZCBuZXcgczEgbGltYiBhcyBlYXJseSBhcyBwb3NzaWJsZQorCWFkZGl1CSQ2LCQ2LC0xCUMgZGVjcmVtZW50IGxvb3AgY291bnRlcgorCXNsdHUJJDIsJDEwLCQyCUMgY2FycnkgZnJvbSBwcmV2aW91cyBhZGRpdGlvbiAtPiAkMgorCXN3CSQxMCwwKCQ0KQorCWFkZGl1CSQ0LCQ0LDQKKwlibmUJJDYsJDAsTG9vcAorCSBhZGR1CSQyLCQ5LCQyCUMgYWRkIGhpZ2ggcHJvZHVjdCBsaW1iIGFuZCBjYXJyeSBmcm9tIGFkZGl0aW9uCisKK0Mgd2luZC1kb3duIHBoYXNlIDEKKyRMQzE6CW1mbG8JJDEwCisJbWZoaQkkOQorCWFkZHUJJDEwLCQxMCwkMgorCXNsdHUJJDIsJDEwLCQyCisJbXVsdHUJJDgsJDcKKwlzdwkkMTAsMCgkNCkKKwlhZGRpdQkkNCwkNCw0CisJYWRkdQkkMiwkOSwkMglDIGFkZCBoaWdoIHByb2R1Y3QgbGltYiBhbmQgY2FycnkgZnJvbSBhZGRpdGlvbgorCitDIHdpbmQtZG93biBwaGFzZSAwCiskTEMwOgltZmxvCSQxMAorCW1maGkJJDkKKwlhZGR1CSQxMCwkMTAsJDIKKwlzbHR1CSQyLCQxMCwkMgorCXN3CSQxMCwwKCQ0KQorCWoJJDMxCisJYWRkdQkkMiwkOSwkMglDIGFkZCBoaWdoIHByb2R1Y3QgbGltYiBhbmQgY2FycnkgZnJvbSBhZGRpdGlvbgorRVBJTE9HVUUobXBuX211bF8xKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9taXBzMzIvcnNoaWZ0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vbWlwczMyL3JzaGlmdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI1NDUxMAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vbWlwczMyL3JzaGlmdC5hc20KQEAgLTAsMCArMSw5NiBAQAorZG5sICBNSVBTMzIgbXBuX3JzaGlmdCAtLSBSaWdodCBzaGlmdC4KKworZG5sICBDb3B5cmlnaHQgMTk5NSwgMjAwMCwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDIElOUFVUIFBBUkFNRVRFUlMKK0MgcmVzX3B0cgkkNAorQyBzcmNfcHRyCSQ1CitDIHNpemUJCSQ2CitDIGNudAkJJDcKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9yc2hpZnQpCisJbHcJJDEwLDAoJDUpCUMgbG9hZCBmaXJzdCBsaW1iCisJc3VidQkkMTMsJDAsJDcKKwlhZGRpdQkkNiwkNiwtMQorCWFuZAkkOSwkNiw0LTEJQyBudW1iZXIgb2YgbGltYnMgaW4gZmlyc3QgbG9vcAorCWJlcQkkOSwkMCwuTDAJQyBpZiBtdWx0aXBsZSBvZiA0IGxpbWJzLCBza2lwIGZpcnN0IGxvb3AKKwkgc2xsCSQyLCQxMCwkMTMJQyBjb21wdXRlIGZ1bmN0aW9uIHJlc3VsdAorCisJc3VidQkkNiwkNiwkOQorCisuTG9vcDA6CWx3CSQzLDQoJDUpCisJYWRkaXUJJDQsJDQsNAorCWFkZGl1CSQ1LCQ1LDQKKwlhZGRpdQkkOSwkOSwtMQorCXNybAkkMTEsJDEwLCQ3CisJc2xsCSQxMiwkMywkMTMKKwltb3ZlCSQxMCwkMworCW9yCSQ4LCQxMSwkMTIKKwlibmUJJDksJDAsLkxvb3AwCisJIHN3CSQ4LC00KCQ0KQorCisuTDA6CWJlcQkkNiwkMCwuTGVuZAorCSBub3AKKworLkxvb3A6CWx3CSQzLDQoJDUpCisJYWRkaXUJJDQsJDQsMTYKKwlhZGRpdQkkNiwkNiwtNAorCXNybAkkMTEsJDEwLCQ3CisJc2xsCSQxMiwkMywkMTMKKworCWx3CSQxMCw4KCQ1KQorCXNybAkkMTQsJDMsJDcKKwlvcgkkOCwkMTEsJDEyCisJc3cJJDgsLTE2KCQ0KQorCXNsbAkkOSwkMTAsJDEzCisKKwlsdwkkMywxMigkNSkKKwlzcmwJJDExLCQxMCwkNworCW9yCSQ4LCQxNCwkOQorCXN3CSQ4LC0xMigkNCkKKwlzbGwJJDEyLCQzLCQxMworCisJbHcJJDEwLDE2KCQ1KQorCXNybAkkMTQsJDMsJDcKKwlvcgkkOCwkMTEsJDEyCisJc3cJJDgsLTgoJDQpCisJc2xsCSQ5LCQxMCwkMTMKKworCWFkZGl1CSQ1LCQ1LDE2CisJb3IJJDgsJDE0LCQ5CisJYmd0egkkNiwuTG9vcAorCSBzdwkkOCwtNCgkNCkKKworLkxlbmQ6CXNybAkkOCwkMTAsJDcKKwlqCSQzMQorCXN3CSQ4LDAoJDQpCitFUElMT0dVRShtcG5fcnNoaWZ0KQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9taXBzMzIvc3ViX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9taXBzMzIvc3ViX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NjJjZTEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL21pcHMzMi9zdWJfbi5hc20KQEAgLTAsMCArMSwxMjMgQEAKK2RubCAgTUlQUzMyIG1wbl9zdWJfbiAtLSBTdWJ0cmFjdCB0d28gbGltYiB2ZWN0b3JzIG9mIHRoZSBzYW1lIGxlbmd0aCA+IDAgYW5kCitkbmwgIHN0b3JlIGRpZmZlcmVuY2UgaW4gYSB0aGlyZCBsaW1iIHZlY3Rvci4KKworZG5sICBDb3B5cmlnaHQgMTk5NSwgMjAwMCwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDIElOUFVUIFBBUkFNRVRFUlMKK0MgcmVzX3B0cgkkNAorQyBzMV9wdHIJJDUKK0MgczJfcHRyCSQ2CitDIHNpemUJCSQ3CisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fc3ViX24pCisJbHcJJDEwLDAoJDUpCisJbHcJJDExLDAoJDYpCisKKwlhZGRpdQkkNywkNywtMQorCWFuZAkkOSwkNyw0LTEJQyBudW1iZXIgb2YgbGltYnMgaW4gZmlyc3QgbG9vcAorCWJlcQkkOSwkMCwuTDAJQyBpZiBtdWx0aXBsZSBvZiA0IGxpbWJzLCBza2lwIGZpcnN0IGxvb3AKKwkgbW92ZQkkMiwkMAorCisJc3VidQkkNywkNywkOQorCisuTG9vcDA6CWFkZGl1CSQ5LCQ5LC0xCisJbHcJJDEyLDQoJDUpCisJYWRkdQkkMTEsJDExLCQyCisJbHcJJDEzLDQoJDYpCisJc2x0dQkkOCwkMTEsJDIKKwlzdWJ1CSQxMSwkMTAsJDExCisJc2x0dQkkMiwkMTAsJDExCisJc3cJJDExLDAoJDQpCisJb3IJJDIsJDIsJDgKKworCWFkZGl1CSQ1LCQ1LDQKKwlhZGRpdQkkNiwkNiw0CisJbW92ZQkkMTAsJDEyCisJbW92ZQkkMTEsJDEzCisJYm5lCSQ5LCQwLC5Mb29wMAorCSBhZGRpdQkkNCwkNCw0CisKKy5MMDoJYmVxCSQ3LCQwLC5MZW5kCisJIG5vcAorCisuTG9vcDoJYWRkaXUJJDcsJDcsLTQKKworCWx3CSQxMiw0KCQ1KQorCWFkZHUJJDExLCQxMSwkMgorCWx3CSQxMyw0KCQ2KQorCXNsdHUJJDgsJDExLCQyCisJc3VidQkkMTEsJDEwLCQxMQorCXNsdHUJJDIsJDEwLCQxMQorCXN3CSQxMSwwKCQ0KQorCW9yCSQyLCQyLCQ4CisKKwlsdwkkMTAsOCgkNSkKKwlhZGR1CSQxMywkMTMsJDIKKwlsdwkkMTEsOCgkNikKKwlzbHR1CSQ4LCQxMywkMgorCXN1YnUJJDEzLCQxMiwkMTMKKwlzbHR1CSQyLCQxMiwkMTMKKwlzdwkkMTMsNCgkNCkKKwlvcgkkMiwkMiwkOAorCisJbHcJJDEyLDEyKCQ1KQorCWFkZHUJJDExLCQxMSwkMgorCWx3CSQxMywxMigkNikKKwlzbHR1CSQ4LCQxMSwkMgorCXN1YnUJJDExLCQxMCwkMTEKKwlzbHR1CSQyLCQxMCwkMTEKKwlzdwkkMTEsOCgkNCkKKwlvcgkkMiwkMiwkOAorCisJbHcJJDEwLDE2KCQ1KQorCWFkZHUJJDEzLCQxMywkMgorCWx3CSQxMSwxNigkNikKKwlzbHR1CSQ4LCQxMywkMgorCXN1YnUJJDEzLCQxMiwkMTMKKwlzbHR1CSQyLCQxMiwkMTMKKwlzdwkkMTMsMTIoJDQpCisJb3IJJDIsJDIsJDgKKworCWFkZGl1CSQ1LCQ1LDE2CisJYWRkaXUJJDYsJDYsMTYKKworCWJuZQkkNywkMCwuTG9vcAorCSBhZGRpdQkkNCwkNCwxNgorCisuTGVuZDoJYWRkdQkkMTEsJDExLCQyCisJc2x0dQkkOCwkMTEsJDIKKwlzdWJ1CSQxMSwkMTAsJDExCisJc2x0dQkkMiwkMTAsJDExCisJc3cJJDExLDAoJDQpCisJagkkMzEKKwlvcgkkMiwkMiwkOAorRVBJTE9HVUUobXBuX3N1Yl9uKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9taXBzMzIvc3VibXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9taXBzMzIvc3VibXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNTcyMmIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL21pcHMzMi9zdWJtdWxfMS5hc20KQEAgLTAsMCArMSwxMDEgQEAKK2RubCAgTUlQUzMyIG1wbl9zdWJtdWxfMSAtLSBNdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYSBzaW5nbGUgbGltYiBhbmQKK2RubCAgc3VidHJhY3QgdGhlIHByb2R1Y3QgZnJvbSBhIHNlY29uZCBsaW1iIHZlY3Rvci4KKworZG5sICBDb3B5cmlnaHQgMTk5MiwgMTk5NCwgMTk5NiwgMjAwMCwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDIElOUFVUIFBBUkFNRVRFUlMKK0MgcmVzX3B0cgkkNAorQyBzMV9wdHIJJDUKK0Mgc2l6ZQkJJDYKK0MgczJfbGltYgkkNworCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX3N1Ym11bF8xKQorCitDIGZlZWQtaW4gcGhhc2UgMAorCWx3CSQ4LDAoJDUpCisKK0MgZmVlZC1pbiBwaGFzZSAxCisJYWRkaXUJJDUsJDUsNAorCW11bHR1CSQ4LCQ3CisKKwlhZGRpdQkkNiwkNiwtMQorCWJlcQkkNiwkMCwkTEMwCisJIG1vdmUJJDIsJDAJCUMgemVybyBjeTIKKworCWFkZGl1CSQ2LCQ2LC0xCisJYmVxCSQ2LCQwLCRMQzEKKwlsdwkkOCwwKCQ1KQlDIGxvYWQgbmV3IHMxIGxpbWIgYXMgZWFybHkgYXMgcG9zc2libGUKKworTG9vcDoJbHcJJDEwLDAoJDQpCisJbWZsbwkkMworCW1maGkJJDkKKwlhZGRpdQkkNSwkNSw0CisJYWRkdQkkMywkMywkMglDIGFkZCBvbGQgY2FycnkgbGltYiB0byBsb3cgcHJvZHVjdCBsaW1iCisJbXVsdHUJJDgsJDcKKwlsdwkkOCwwKCQ1KQlDIGxvYWQgbmV3IHMxIGxpbWIgYXMgZWFybHkgYXMgcG9zc2libGUKKwlhZGRpdQkkNiwkNiwtMQlDIGRlY3JlbWVudCBsb29wIGNvdW50ZXIKKwlzbHR1CSQyLCQzLCQyCUMgY2FycnkgZnJvbSBwcmV2aW91cyBhZGRpdGlvbiAtPiAkMgorCXN1YnUJJDMsJDEwLCQzCisJc2d0dQkkMTAsJDMsJDEwCisJYWRkdQkkMiwkMiwkMTAKKwlzdwkkMywwKCQ0KQorCWFkZGl1CSQ0LCQ0LDQKKwlibmUJJDYsJDAsTG9vcAorCSBhZGR1CSQyLCQ5LCQyCUMgYWRkIGhpZ2ggcHJvZHVjdCBsaW1iIGFuZCBjYXJyeSBmcm9tIGFkZGl0aW9uCisKK0Mgd2luZC1kb3duIHBoYXNlIDEKKyRMQzE6CWx3CSQxMCwwKCQ0KQorCW1mbG8JJDMKKwltZmhpCSQ5CisJYWRkdQkkMywkMywkMgorCXNsdHUJJDIsJDMsJDIKKwltdWx0dQkkOCwkNworCXN1YnUJJDMsJDEwLCQzCisJc2d0dQkkMTAsJDMsJDEwCisJYWRkdQkkMiwkMiwkMTAKKwlzdwkkMywwKCQ0KQorCWFkZGl1CSQ0LCQ0LDQKKwlhZGR1CSQyLCQ5LCQyCUMgYWRkIGhpZ2ggcHJvZHVjdCBsaW1iIGFuZCBjYXJyeSBmcm9tIGFkZGl0aW9uCisKK0Mgd2luZC1kb3duIHBoYXNlIDAKKyRMQzA6CWx3CSQxMCwwKCQ0KQorCW1mbG8JJDMKKwltZmhpCSQ5CisJYWRkdQkkMywkMywkMgorCXNsdHUJJDIsJDMsJDIKKwlzdWJ1CSQzLCQxMCwkMworCXNndHUJJDEwLCQzLCQxMAorCWFkZHUJJDIsJDIsJDEwCisJc3cJJDMsMCgkNCkKKwlqCSQzMQorCWFkZHUJJDIsJDksJDIJQyBhZGQgaGlnaCBwcm9kdWN0IGxpbWIgYW5kIGNhcnJ5IGZyb20gYWRkaXRpb24KK0VQSUxPR1VFKG1wbl9zdWJtdWxfMSkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vbWlwczMyL3VtdWwuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9taXBzMzIvdW11bC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNlZDBlYgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vbWlwczMyL3VtdWwuYXNtCkBAIC0wLDAgKzEsNDUgQEAKK2RubCAgTUlQUzMyIHVtdWxfcHBtbSAtLSBsb25nbG9uZy5oIHN1cHBvcnQuCisKK2RubCAgQ29weXJpZ2h0IDE5OTksIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBJTlBVVCBQQVJBTUVURVJTCitDIHBscCAgICQ0CitDIHUgICAgICQ1CitDIHYgICAgICQ2CisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fdW11bF9wcG1tKQorCW11bHR1CSQ1LCQ2CisJbWZsbwkkMworCW1maGkJJDIKKwlqCSQzMQorCXN3CSQzLDAoJDQpCitFUElMT0dVRShtcG5fdW11bF9wcG1tKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9taXBzNjQvUkVBRE1FIGIvdGhpcmRfcGFydHkvZ21wL21wbi9taXBzNjQvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZGQwZTUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL21pcHM2NC9SRUFETUUKQEAgLTAsMCArMSw2MCBAQAorQ29weXJpZ2h0IDE5OTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCisKKworCitUaGlzIGRpcmVjdG9yeSBjb250YWlucyBtcG4gZnVuY3Rpb25zIG9wdGltaXplZCBmb3IgTUlQUzMuICBFeGFtcGxlIG9mCitwcm9jZXNzb3JzIHRoYXQgaW1wbGVtZW50IE1JUFMzIGFyZSBSNDAwMCwgUjQ0MDAsIFI0NjAwLCBSNDcwMCwgYW5kIFI4MDAwLgorCitSRUxFVkFOVCBPUFRJTUlaQVRJT04gSVNTVUVTCisKKzEuIE9uIHRoZSBSNDAwMCBhbmQgUjQ0MDAsIGJyYW5jaGVzLCBib3RoIHRoZSBwbGFpbiBhbmQgdGhlICJsaWtlbHkiIG9uZXMsCisgICB0YWtlIDMgY3ljbGVzIHRvIGV4ZWN1dGUuICAoVGhlIGZhc3Rlc3QgcG9zc2libGUgbG9vcCB3aWxsIHRha2UgNCBjeWNsZXMsCisgICBiZWNhdXNlIG9mIHRoZSBkZWxheSBpbnNuLikKKworICAgT24gdGhlIFI0NjAwLCBicmFuY2hlcyB0YWtlcyBhIHNpbmdsZSBjeWNsZQorCisgICBPbiB0aGUgUjgwMDAsIGJyYW5jaGVzIG9mdGVuIHRha2Ugbm8gbm90aWNlYWJsZSBjeWNsZXMsIGFzIHRoZXkgYXJlCisgICBleGVjdXRlZCBpbiBhIHNlcGFyYXRlIGZ1bmN0aW9uIHVuaXQuLgorCisyLiBUaGUgUjQwMDAgYW5kIFI0NDAwIGhhdmUgYSBsb2FkIGxhdGVuY3kgb2YgNCBjeWNsZXMuCisKKzMuIE9uIHRoZSBSNDAwMCBhbmQgUjQ0MDAsIG11bHRpcGxpZXMgdGFrZSBhIGRhdGEtZGVwZW5kZW50IG51bWJlciBvZgorICAgY3ljbGVzLCBjb250cmFyeSB0byB0aGUgU0dJIGRvY3VtZW50YXRpb24uICBUaGVyZSBzZWVtIHRvIGJlIDMgb3IgNAorICAgcG9zc2libGUgbGF0ZW5jaWVzLgorCis0LiBUaGUgUjF4MDAwIHByb2Nlc3NvcnMgY2FuIGlzc3VlIG9uZSBmbG9hdGluZy1wb2ludCBvcGVyYXRpb24sIHR3byBpbnRlZ2VyCisgICBvcGVyYXRpb25zLCBhbmQgb25lIG1lbW9yeSBvcGVyYXRpb24gcGVyIGN5Y2xlLiAgVGhlIEZQVSBoYXMgdmVyeSBzaG9ydAorICAgbGF0ZW5jaWVzLCB3aGlsZSB0aGUgaW50ZWdlciBtdWx0aXBseSB1bml0IGlzIG5vbi1waXBlbGluZWQuICBXZSBzaG91bGQKKyAgIHRoZXJlZm9yZSB3cml0ZSBmcCBiYXNlZCBtcG5fWG11bF8xLgorCitTVEFUVVMKKworR29vZC4uLgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9taXBzNjQvYWRkX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9taXBzNjQvYWRkX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NTY0MDcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL21pcHM2NC9hZGRfbi5hc20KQEAgLTAsMCArMSwxMzQgQEAKK2RubCAgTUlQUzY0IG1wbl9hZGRfbiAtLSBBZGQgdHdvIGxpbWIgdmVjdG9ycyBvZiB0aGUgc2FtZSBsZW5ndGggPiAwIGFuZCBzdG9yZQorZG5sICBzdW0gaW4gYSB0aGlyZCBsaW1iIHZlY3Rvci4KKworZG5sICBDb3B5cmlnaHQgMTk5NSwgMjAwMC0yMDAyLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyByZXNfcHRyCSQ0CitDIHMxX3B0cgkkNQorQyBzMl9wdHIJJDYKK0Mgc2l6ZQkJJDcKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9hZGRfbmMpCisJbGQJJDEwLDAoJDUpCisJbGQJJDExLDAoJDYpCisKKwlkYWRkaXUJJDcsJDcsLTEKKwlhbmQJJDksJDcsNC0xCUMgbnVtYmVyIG9mIGxpbWJzIGluIGZpcnN0IGxvb3AKKwliZXEJJDksJDAsLkwwCUMgaWYgbXVsdGlwbGUgb2YgNCBsaW1icywgc2tpcCBmaXJzdCBsb29wCisJIG1vdmUJJDIsJDgKKwliCS5Mb29wMAorCSBkc3VidQkkNywkNywkOQorRVBJTE9HVUUoKQorUFJPTE9HVUUobXBuX2FkZF9uKQorCWxkCSQxMCwwKCQ1KQorCWxkCSQxMSwwKCQ2KQorCisJZGFkZGl1CSQ3LCQ3LC0xCisJYW5kCSQ5LCQ3LDQtMQlDIG51bWJlciBvZiBsaW1icyBpbiBmaXJzdCBsb29wCisJYmVxCSQ5LCQwLC5MMAlDIGlmIG11bHRpcGxlIG9mIDQgbGltYnMsIHNraXAgZmlyc3QgbG9vcAorCSBtb3ZlCSQyLCQwCisKKwlkc3VidQkkNywkNywkOQorCisuTG9vcDA6CWRhZGRpdQkkOSwkOSwtMQorCWxkCSQxMiw4KCQ1KQorCWRhZGR1CSQxMSwkMTEsJDIKKwlsZAkkMTMsOCgkNikKKwlzbHR1CSQ4LCQxMSwkMgorCWRhZGR1CSQxMSwkMTAsJDExCisJc2x0dQkkMiwkMTEsJDEwCisJc2QJJDExLDAoJDQpCisJb3IJJDIsJDIsJDgKKworCWRhZGRpdQkkNSwkNSw4CisJZGFkZGl1CSQ2LCQ2LDgKKwltb3ZlCSQxMCwkMTIKKwltb3ZlCSQxMSwkMTMKKwlibmUJJDksJDAsLkxvb3AwCisJIGRhZGRpdQkkNCwkNCw4CisKKy5MMDoJYmVxCSQ3LCQwLC5MZW5kCisJIG5vcAorCisuTG9vcDoJZGFkZGl1CSQ3LCQ3LC00CisKKwlsZAkkMTIsOCgkNSkKKwlkYWRkdQkkMTEsJDExLCQxMAorCWxkCSQxMyw4KCQ2KQorCXNsdHUJJDgsJDExLCQxMAorCWRhZGR1CSQxMSwkMTEsJDIKKwlzbHR1CSQyLCQxMSwkMgorCXNkCSQxMSwwKCQ0KQorCW9yCSQyLCQyLCQ4CisKKwlsZAkkMTAsMTYoJDUpCisJZGFkZHUJJDEzLCQxMywkMTIKKwlsZAkkMTEsMTYoJDYpCisJc2x0dQkkOCwkMTMsJDEyCisJZGFkZHUJJDEzLCQxMywkMgorCXNsdHUJJDIsJDEzLCQyCisJc2QJJDEzLDgoJDQpCisJb3IJJDIsJDIsJDgKKworCWxkCSQxMiwyNCgkNSkKKwlkYWRkdQkkMTEsJDExLCQxMAorCWxkCSQxMywyNCgkNikKKwlzbHR1CSQ4LCQxMSwkMTAKKwlkYWRkdQkkMTEsJDExLCQyCisJc2x0dQkkMiwkMTEsJDIKKwlzZAkkMTEsMTYoJDQpCisJb3IJJDIsJDIsJDgKKworCWxkCSQxMCwzMigkNSkKKwlkYWRkdQkkMTMsJDEzLCQxMgorCWxkCSQxMSwzMigkNikKKwlzbHR1CSQ4LCQxMywkMTIKKwlkYWRkdQkkMTMsJDEzLCQyCisJc2x0dQkkMiwkMTMsJDIKKwlzZAkkMTMsMjQoJDQpCisJb3IJJDIsJDIsJDgKKworCWRhZGRpdQkkNSwkNSwzMgorCWRhZGRpdQkkNiwkNiwzMgorCisJYm5lCSQ3LCQwLC5Mb29wCisJIGRhZGRpdQkkNCwkNCwzMgorCisuTGVuZDoJZGFkZHUJJDExLCQxMSwkMgorCXNsdHUJJDgsJDExLCQyCisJZGFkZHUJJDExLCQxMCwkMTEKKwlzbHR1CSQyLCQxMSwkMTAKKwlzZAkkMTEsMCgkNCkKKwlqCSQzMQorCW9yCSQyLCQyLCQ4CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL21pcHM2NC9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL21pcHM2NC9nbXAtbXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdmY2YyNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vbWlwczY0L2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDcyIEBACisvKiBnbXAtbXBhcmFtLmggLS0gQ29tcGlsZXIvbWFjaGluZSBwYXJhbWV0ZXIgaGVhZGVyIGZpbGUuCisKK0NvcHlyaWdodCAxOTkxLCAxOTkzLCAxOTk0LCAxOTk5LTIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKworI2RlZmluZSBHTVBfTElNQl9CSVRTIDY0CisjZGVmaW5lIEdNUF9MSU1CX0JZVEVTIDgKKworCisvKiBHZW5lcmF0ZWQgYnkgdHVuZXVwLmMsIDIwMDQtMDItMTAsIGdjYyAzLjIgJiBNSVBTcHJvIEMgNy4yLjEgKFIxeDAwMCkgKi8KKworI2RlZmluZSBNVUxfVE9PTTIyX1RIUkVTSE9MRCAgICAgICAgICAgICAxNgorI2RlZmluZSBNVUxfVE9PTTMzX1RIUkVTSE9MRCAgICAgICAgICAgICA4OQorCisjZGVmaW5lIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICA2CisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgIDMyCisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgIDk4CisKKyNkZWZpbmUgRElWX1NCX1BSRUlOVl9USFJFU0hPTEQgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBESVZfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA1MworI2RlZmluZSBQT1dNX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICA2MQorCisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgMTE2CisjZGVmaW5lIEdDRF9BQ0NFTF9USFJFU0hPTEQgICAgICAgICAgICAgICAzCisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgNDkyCisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAyCisKKyNkZWZpbmUgTU9EXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAxCisjZGVmaW5lIFVTRV9QUkVJTlZfTU9EXzEgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIERJVlJFTV8yX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgRElWRVhBQ1RfMV9USFJFU0hPTEQgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RFWEFDVF8xX09ERF9USFJFU0hPTEQgICAgICAgICAgMCAgLyogYWx3YXlzICovCisKKyNkZWZpbmUgR0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgMjEKKyNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgMjYKKyNkZWZpbmUgU0VUX1NUUl9USFJFU0hPTEQgICAgICAgICAgICAgIDM5NjIKKworI2RlZmluZSBNVUxfRkZUX1RBQkxFICB7IDM2OCwgNzM2LCAxNjAwLCAzMzI4LCA3MTY4LCAyMDQ4MCwgNDkxNTIsIDAgfQorI2RlZmluZSBNVUxfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgIDI2NAorI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTkyMAorCisjZGVmaW5lIFNRUl9GRlRfVEFCTEUgIHsgMzY4LCA3MzYsIDE4NTYsIDMzMjgsIDcxNjgsIDIwNDgwLCA0OTE1MiwgMCB9CisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgMjgwCisjZGVmaW5lIFNRUl9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAxOTIwCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL21pcHM2NC9oaWxvL2FkZG11bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vbWlwczY0L2hpbG8vYWRkbXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmZjA5NzYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL21pcHM2NC9oaWxvL2FkZG11bF8xLmFzbQpAQCAtMCwwICsxLDEwMSBAQAorZG5sICBNSVBTNjQgbXBuX2FkZG11bF8xIC0tIE11bHRpcGx5IGEgbGltYiB2ZWN0b3Igd2l0aCBhIHNpbmdsZSBsaW1iIGFuZCBhZGQKK2RubCAgdGhlIHByb2R1Y3QgdG8gYSBzZWNvbmQgbGltYiB2ZWN0b3IuCisKK2RubCAgQ29weXJpZ2h0IDE5OTIsIDE5OTQsIDE5OTUsIDIwMDAtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDIElOUFVUIFBBUkFNRVRFUlMKK0MgcmVzX3B0cgkkNAorQyBzMV9wdHIJJDUKK0Mgc2l6ZQkJJDYKK0MgczJfbGltYgkkNworCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2FkZG11bF8xKQorCitDIGZlZWQtaW4gcGhhc2UgMAorCWxkCSQ4LDAoJDUpCisKK0MgZmVlZC1pbiBwaGFzZSAxCisJZGFkZGl1CSQ1LCQ1LDgKKwlkbXVsdHUJJDgsJDcKKworCWRhZGRpdQkkNiwkNiwtMQorCWJlcQkkNiwkMCwkTEMwCisJIG1vdmUJJDIsJDAJCUMgemVybyBjeTIKKworCWRhZGRpdQkkNiwkNiwtMQorCWJlcQkkNiwkMCwkTEMxCisJbGQJJDgsMCgkNSkJQyBsb2FkIG5ldyBzMSBsaW1iIGFzIGVhcmx5IGFzIHBvc3NpYmxlCisKK0xvb3A6CWxkCSQxMCwwKCQ0KQorCW1mbG8JJDMKKwltZmhpCSQ5CisJZGFkZGl1CSQ1LCQ1LDgKKwlkYWRkdQkkMywkMywkMglDIGFkZCBvbGQgY2FycnkgbGltYiB0byBsb3cgcHJvZHVjdCBsaW1iCisJZG11bHR1CSQ4LCQ3CisJbGQJJDgsMCgkNSkJQyBsb2FkIG5ldyBzMSBsaW1iIGFzIGVhcmx5IGFzIHBvc3NpYmxlCisJZGFkZGl1CSQ2LCQ2LC0xCUMgZGVjcmVtZW50IGxvb3AgY291bnRlcgorCXNsdHUJJDIsJDMsJDIJQyBjYXJyeSBmcm9tIHByZXZpb3VzIGFkZGl0aW9uIC0+ICQyCisJZGFkZHUJJDMsJDEwLCQzCisJc2x0dQkkMTAsJDMsJDEwCisJZGFkZHUJJDIsJDIsJDEwCisJc2QJJDMsMCgkNCkKKwlkYWRkaXUJJDQsJDQsOAorCWJuZQkkNiwkMCxMb29wCisJIGRhZGR1CSQyLCQ5LCQyCUMgYWRkIGhpZ2ggcHJvZHVjdCBsaW1iIGFuZCBjYXJyeSBmcm9tIGFkZGl0aW9uCisKK0Mgd2luZC1kb3duIHBoYXNlIDEKKyRMQzE6CWxkCSQxMCwwKCQ0KQorCW1mbG8JJDMKKwltZmhpCSQ5CisJZGFkZHUJJDMsJDMsJDIKKwlzbHR1CSQyLCQzLCQyCisJZG11bHR1CSQ4LCQ3CisJZGFkZHUJJDMsJDEwLCQzCisJc2x0dQkkMTAsJDMsJDEwCisJZGFkZHUJJDIsJDIsJDEwCisJc2QJJDMsMCgkNCkKKwlkYWRkaXUJJDQsJDQsOAorCWRhZGR1CSQyLCQ5LCQyCUMgYWRkIGhpZ2ggcHJvZHVjdCBsaW1iIGFuZCBjYXJyeSBmcm9tIGFkZGl0aW9uCisKK0Mgd2luZC1kb3duIHBoYXNlIDAKKyRMQzA6CWxkCSQxMCwwKCQ0KQorCW1mbG8JJDMKKwltZmhpCSQ5CisJZGFkZHUJJDMsJDMsJDIKKwlzbHR1CSQyLCQzLCQyCisJZGFkZHUJJDMsJDEwLCQzCisJc2x0dQkkMTAsJDMsJDEwCisJZGFkZHUJJDIsJDIsJDEwCisJc2QJJDMsMCgkNCkKKwlqCSQzMQorCWRhZGR1CSQyLCQ5LCQyCUMgYWRkIGhpZ2ggcHJvZHVjdCBsaW1iIGFuZCBjYXJyeSBmcm9tIGFkZGl0aW9uCitFUElMT0dVRShtcG5fYWRkbXVsXzEpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL21pcHM2NC9oaWxvL211bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vbWlwczY0L2hpbG8vbXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YWNmMGEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL21pcHM2NC9oaWxvL211bF8xLmFzbQpAQCAtMCwwICsxLDkyIEBACitkbmwgIE1JUFM2NCBtcG5fbXVsXzEgLS0gTXVsdGlwbHkgYSBsaW1iIHZlY3RvciB3aXRoIGEgc2luZ2xlIGxpbWIgYW5kIHN0b3JlCitkbmwgIHRoZSBwcm9kdWN0IGluIGEgc2Vjb25kIGxpbWIgdmVjdG9yLgorCitkbmwgIENvcHlyaWdodCAxOTkyLCAxOTk0LCAxOTk1LCAyMDAwLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBJTlBVVCBQQVJBTUVURVJTCitDIHJlc19wdHIJJDQKK0MgczFfcHRyCSQ1CitDIHNpemUJCSQ2CitDIHMyX2xpbWIJJDcKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9tdWxfMSkKKworQyBmZWVkLWluIHBoYXNlIDAKKwlsZAkkOCwwKCQ1KQorCitDIGZlZWQtaW4gcGhhc2UgMQorCWRhZGRpdQkkNSwkNSw4CisJZG11bHR1CSQ4LCQ3CisKKwlkYWRkaXUJJDYsJDYsLTEKKwliZXEJJDYsJDAsJExDMAorCSBtb3ZlCSQyLCQwCQlDIHplcm8gY3kyCisKKwlkYWRkaXUJJDYsJDYsLTEKKwliZXEJJDYsJDAsJExDMQorCWxkCSQ4LDAoJDUpCUMgbG9hZCBuZXcgczEgbGltYiBhcyBlYXJseSBhcyBwb3NzaWJsZQorCitMb29wOglub3AKKwltZmxvCSQxMAorCW1maGkJJDkKKwlkYWRkaXUJJDUsJDUsOAorCWRhZGR1CSQxMCwkMTAsJDIJQyBhZGQgb2xkIGNhcnJ5IGxpbWIgdG8gbG93IHByb2R1Y3QgbGltYgorCWRtdWx0dQkkOCwkNworCWxkCSQ4LDAoJDUpCUMgbG9hZCBuZXcgczEgbGltYiBhcyBlYXJseSBhcyBwb3NzaWJsZQorCWRhZGRpdQkkNiwkNiwtMQlDIGRlY3JlbWVudCBsb29wIGNvdW50ZXIKKwlzbHR1CSQyLCQxMCwkMglDIGNhcnJ5IGZyb20gcHJldmlvdXMgYWRkaXRpb24gLT4gJDIKKwlub3AKKwlub3AKKwlzZAkkMTAsMCgkNCkKKwlkYWRkaXUJJDQsJDQsOAorCWJuZQkkNiwkMCxMb29wCisJIGRhZGR1CSQyLCQ5LCQyCUMgYWRkIGhpZ2ggcHJvZHVjdCBsaW1iIGFuZCBjYXJyeSBmcm9tIGFkZGl0aW9uCisKK0Mgd2luZC1kb3duIHBoYXNlIDEKKyRMQzE6CW1mbG8JJDEwCisJbWZoaQkkOQorCWRhZGR1CSQxMCwkMTAsJDIKKwlzbHR1CSQyLCQxMCwkMgorCWRtdWx0dQkkOCwkNworCXNkCSQxMCwwKCQ0KQorCWRhZGRpdQkkNCwkNCw4CisJZGFkZHUJJDIsJDksJDIJQyBhZGQgaGlnaCBwcm9kdWN0IGxpbWIgYW5kIGNhcnJ5IGZyb20gYWRkaXRpb24KKworQyB3aW5kLWRvd24gcGhhc2UgMAorJExDMDoJbWZsbwkkMTAKKwltZmhpCSQ5CisJZGFkZHUJJDEwLCQxMCwkMgorCXNsdHUJJDIsJDEwLCQyCisJc2QJJDEwLDAoJDQpCisJagkkMzEKKwlkYWRkdQkkMiwkOSwkMglDIGFkZCBoaWdoIHByb2R1Y3QgbGltYiBhbmQgY2FycnkgZnJvbSBhZGRpdGlvbgorRVBJTE9HVUUobXBuX211bF8xKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9taXBzNjQvaGlsby9zcXJfZGlhZ29uYWwuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9taXBzNjQvaGlsby9zcXJfZGlhZ29uYWwuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjYjg3ZGMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL21pcHM2NC9oaWxvL3Nxcl9kaWFnb25hbC5hc20KQEAgLTAsMCArMSw3NyBAQAorZG5sICBNSVBTNjQgbXBuX3Nxcl9kaWFnb25hbC4KKworZG5sICBDb3B5cmlnaHQgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKK2RubCAgSU5QVVQgUEFSQU1FVEVSUworZG5sICBycAkJJDQKK2RubCAgdXAJCSQ1CitkbmwgIG4JCSQ2CisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fc3FyX2RpYWdvbmFsKQorCWxkCXI4LDAocjUpCisJZGFkZGl1CXI2LHI2LC0yCisJZG11bHR1CXI4LHI4CisJYmx0eglyNiwkTGVuZDEKKwlub3AKKwlsZAlyOCw4KHI1KQorCWJlcQlyNixyMCwkTGVuZDIKKwlub3AKKworJExvb3A6CW1mbG8JcjEwCisJbWZoaQlyOQorCWRhZGRpdQlyNixyNiwtMQorCXNkCXIxMCwwKHI0KQorCXNkCXI5LDgocjQpCisJZG11bHR1CXI4LHI4CisJbGQJcjgsMTYocjUpCisJZGFkZGl1CXI1LHI1LDgKKwlibmUJcjYscjAsJExvb3AKKwlkYWRkaXUJcjQscjQsMTYKKworJExlbmQyOiBtZmxvCXIxMAorCW1maGkJcjkKKwlzZAlyMTAsMChyNCkKKwlzZAlyOSw4KHI0KQorCWRtdWx0dQlyOCxyOAorCW1mbG8JcjEwCisJbWZoaQlyOQorCXNkCXIxMCwxNihyNCkKKwlqCXIzMQorCXNkCXI5LDI0KHI0KQorCiskTGVuZDE6IG1mbG8JcjEwCisJbWZoaQlyOQorCXNkCXIxMCwwKHI0KQorCWoJcjMxCisJc2QJcjksOChyNCkKK0VQSUxPR1VFKG1wbl9zcXJfZGlhZ29uYWwpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL21pcHM2NC9oaWxvL3N1Ym11bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vbWlwczY0L2hpbG8vc3VibXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4OTU4OWMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL21pcHM2NC9oaWxvL3N1Ym11bF8xLmFzbQpAQCAtMCwwICsxLDEwMSBAQAorZG5sICBNSVBTNjQgbXBuX3N1Ym11bF8xIC0tIE11bHRpcGx5IGEgbGltYiB2ZWN0b3Igd2l0aCBhIHNpbmdsZSBsaW1iIGFuZAorZG5sICBzdWJ0cmFjdCB0aGUgcHJvZHVjdCBmcm9tIGEgc2Vjb25kIGxpbWIgdmVjdG9yLgorCitkbmwgIENvcHlyaWdodCAxOTkyLCAxOTk0LCAxOTk1LCAyMDAwLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBJTlBVVCBQQVJBTUVURVJTCitDIHJlc19wdHIJJDQKK0MgczFfcHRyCSQ1CitDIHNpemUJCSQ2CitDIHMyX2xpbWIJJDcKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9zdWJtdWxfMSkKKworQyBmZWVkLWluIHBoYXNlIDAKKwlsZAkkOCwwKCQ1KQorCitDIGZlZWQtaW4gcGhhc2UgMQorCWRhZGRpdQkkNSwkNSw4CisJZG11bHR1CSQ4LCQ3CisKKwlkYWRkaXUJJDYsJDYsLTEKKwliZXEJJDYsJDAsJExDMAorCSBtb3ZlCSQyLCQwCQlDIHplcm8gY3kyCisKKwlkYWRkaXUJJDYsJDYsLTEKKwliZXEJJDYsJDAsJExDMQorCWxkCSQ4LDAoJDUpCUMgbG9hZCBuZXcgczEgbGltYiBhcyBlYXJseSBhcyBwb3NzaWJsZQorCitMb29wOglsZAkkMTAsMCgkNCkKKwltZmxvCSQzCisJbWZoaQkkOQorCWRhZGRpdQkkNSwkNSw4CisJZGFkZHUJJDMsJDMsJDIJQyBhZGQgb2xkIGNhcnJ5IGxpbWIgdG8gbG93IHByb2R1Y3QgbGltYgorCWRtdWx0dQkkOCwkNworCWxkCSQ4LDAoJDUpCUMgbG9hZCBuZXcgczEgbGltYiBhcyBlYXJseSBhcyBwb3NzaWJsZQorCWRhZGRpdQkkNiwkNiwtMQlDIGRlY3JlbWVudCBsb29wIGNvdW50ZXIKKwlzbHR1CSQyLCQzLCQyCUMgY2FycnkgZnJvbSBwcmV2aW91cyBhZGRpdGlvbiAtPiAkMgorCWRzdWJ1CSQzLCQxMCwkMworCXNndHUJJDEwLCQzLCQxMAorCWRhZGR1CSQyLCQyLCQxMAorCXNkCSQzLDAoJDQpCisJZGFkZGl1CSQ0LCQ0LDgKKwlibmUJJDYsJDAsTG9vcAorCSBkYWRkdQkkMiwkOSwkMglDIGFkZCBoaWdoIHByb2R1Y3QgbGltYiBhbmQgY2FycnkgZnJvbSBhZGRpdGlvbgorCitDIHdpbmQtZG93biBwaGFzZSAxCiskTEMxOglsZAkkMTAsMCgkNCkKKwltZmxvCSQzCisJbWZoaQkkOQorCWRhZGR1CSQzLCQzLCQyCisJc2x0dQkkMiwkMywkMgorCWRtdWx0dQkkOCwkNworCWRzdWJ1CSQzLCQxMCwkMworCXNndHUJJDEwLCQzLCQxMAorCWRhZGR1CSQyLCQyLCQxMAorCXNkCSQzLDAoJDQpCisJZGFkZGl1CSQ0LCQ0LDgKKwlkYWRkdQkkMiwkOSwkMglDIGFkZCBoaWdoIHByb2R1Y3QgbGltYiBhbmQgY2FycnkgZnJvbSBhZGRpdGlvbgorCitDIHdpbmQtZG93biBwaGFzZSAwCiskTEMwOglsZAkkMTAsMCgkNCkKKwltZmxvCSQzCisJbWZoaQkkOQorCWRhZGR1CSQzLCQzLCQyCisJc2x0dQkkMiwkMywkMgorCWRzdWJ1CSQzLCQxMCwkMworCXNndHUJJDEwLCQzLCQxMAorCWRhZGR1CSQyLCQyLCQxMAorCXNkCSQzLDAoJDQpCisJagkkMzEKKwlkYWRkdQkkMiwkOSwkMglDIGFkZCBoaWdoIHByb2R1Y3QgbGltYiBhbmQgY2FycnkgZnJvbSBhZGRpdGlvbgorRVBJTE9HVUUobXBuX3N1Ym11bF8xKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9taXBzNjQvaGlsby91bXVsLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vbWlwczY0L2hpbG8vdW11bC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlhYWM1NwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vbWlwczY0L2hpbG8vdW11bC5hc20KQEAgLTAsMCArMSw0NSBAQAorZG5sICBNSVBTNjQgdW11bF9wcG1tIC0tIGxvbmdsb25nLmggc3VwcG9ydC4KKworZG5sICBDb3B5cmlnaHQgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDIElOUFVUIFBBUkFNRVRFUlMKK0MgcGxwICAgJDQKK0MgdSAgICAgJDUKK0MgdiAgICAgJDYKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl91bXVsX3BwbW0pCisJZG11bHR1CSQ1LCQ2CisJbWZsbwkkMworCW1maGkJJDIKKwlqCSQzMQorCXNkCSQzLDAoJDQpCitFUElMT0dVRShtcG5fdW11bF9wcG1tKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9taXBzNjQvbHNoaWZ0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vbWlwczY0L2xzaGlmdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ0MGVhZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vbWlwczY0L2xzaGlmdC5hc20KQEAgLTAsMCArMSw5OSBAQAorZG5sICBNSVBTNjQgbXBuX2xzaGlmdCAtLSBMZWZ0IHNoaWZ0LgorCitkbmwgIENvcHlyaWdodCAxOTk1LCAyMDAwLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBJTlBVVCBQQVJBTUVURVJTCitDIHJlc19wdHIJJDQKK0Mgc3JjX3B0cgkkNQorQyBzaXplCQkkNgorQyBjbnQJCSQ3CisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fbHNoaWZ0KQorCWRzbGwJJDIsJDYsMworCWRhZGR1CSQ1LCQ1LCQyCUMgbWFrZSByNSBwb2ludCBhdCBlbmQgb2Ygc3JjCisJbGQJJDEwLC04KCQ1KQlDIGxvYWQgZmlyc3QgbGltYgorCWRzdWJ1CSQxMywkMCwkNworCWRhZGR1CSQ0LCQ0LCQyCUMgbWFrZSByNCBwb2ludCBhdCBlbmQgb2YgcmVzCisJZGFkZGl1CSQ2LCQ2LC0xCisJYW5kCSQ5LCQ2LDQtMQlDIG51bWJlciBvZiBsaW1icyBpbiBmaXJzdCBsb29wCisJYmVxCSQ5LCQwLC5MMAlDIGlmIG11bHRpcGxlIG9mIDQgbGltYnMsIHNraXAgZmlyc3QgbG9vcAorCSBkc3JsCSQyLCQxMCwkMTMJQyBjb21wdXRlIGZ1bmN0aW9uIHJlc3VsdAorCisJZHN1YnUJJDYsJDYsJDkKKworLkxvb3AwOglsZAkkMywtMTYoJDUpCisJZGFkZGl1CSQ0LCQ0LC04CisJZGFkZGl1CSQ1LCQ1LC04CisJZGFkZGl1CSQ5LCQ5LC0xCisJZHNsbAkkMTEsJDEwLCQ3CisJZHNybAkkMTIsJDMsJDEzCisJbW92ZQkkMTAsJDMKKwlvcgkkOCwkMTEsJDEyCisJYm5lCSQ5LCQwLC5Mb29wMAorCSBzZAkkOCwwKCQ0KQorCisuTDA6CWJlcQkkNiwkMCwuTGVuZAorCSBub3AKKworLkxvb3A6CWxkCSQzLC0xNigkNSkKKwlkYWRkaXUJJDQsJDQsLTMyCisJZGFkZGl1CSQ2LCQ2LC00CisJZHNsbAkkMTEsJDEwLCQ3CisJZHNybAkkMTIsJDMsJDEzCisKKwlsZAkkMTAsLTI0KCQ1KQorCWRzbGwJJDE0LCQzLCQ3CisJb3IJJDgsJDExLCQxMgorCXNkCSQ4LDI0KCQ0KQorCWRzcmwJJDksJDEwLCQxMworCisJbGQJJDMsLTMyKCQ1KQorCWRzbGwJJDExLCQxMCwkNworCW9yCSQ4LCQxNCwkOQorCXNkCSQ4LDE2KCQ0KQorCWRzcmwJJDEyLCQzLCQxMworCisJbGQJJDEwLC00MCgkNSkKKwlkc2xsCSQxNCwkMywkNworCW9yCSQ4LCQxMSwkMTIKKwlzZAkkOCw4KCQ0KQorCWRzcmwJJDksJDEwLCQxMworCisJZGFkZGl1CSQ1LCQ1LC0zMgorCW9yCSQ4LCQxNCwkOQorCWJndHoJJDYsLkxvb3AKKwkgc2QJJDgsMCgkNCkKKworLkxlbmQ6CWRzbGwJJDgsJDEwLCQ3CisJagkkMzEKKwlzZAkkOCwtOCgkNCkKK0VQSUxPR1VFKG1wbl9sc2hpZnQpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL21pcHM2NC9yc2hpZnQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9taXBzNjQvcnNoaWZ0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjUzY2I1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9taXBzNjQvcnNoaWZ0LmFzbQpAQCAtMCwwICsxLDk2IEBACitkbmwgIE1JUFM2NCBtcG5fcnNoaWZ0IC0tIFJpZ2h0IHNoaWZ0LgorCitkbmwgIENvcHlyaWdodCAxOTk1LCAyMDAwLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBJTlBVVCBQQVJBTUVURVJTCitDIHJlc19wdHIJJDQKK0Mgc3JjX3B0cgkkNQorQyBzaXplCQkkNgorQyBjbnQJCSQ3CisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fcnNoaWZ0KQorCWxkCSQxMCwwKCQ1KQlDIGxvYWQgZmlyc3QgbGltYgorCWRzdWJ1CSQxMywkMCwkNworCWRhZGRpdQkkNiwkNiwtMQorCWFuZAkkOSwkNiw0LTEJQyBudW1iZXIgb2YgbGltYnMgaW4gZmlyc3QgbG9vcAorCWJlcQkkOSwkMCwuTDAJQyBpZiBtdWx0aXBsZSBvZiA0IGxpbWJzLCBza2lwIGZpcnN0IGxvb3AKKwkgZHNsbAkkMiwkMTAsJDEzCUMgY29tcHV0ZSBmdW5jdGlvbiByZXN1bHQKKworCWRzdWJ1CSQ2LCQ2LCQ5CisKKy5Mb29wMDoJbGQJJDMsOCgkNSkKKwlkYWRkaXUJJDQsJDQsOAorCWRhZGRpdQkkNSwkNSw4CisJZGFkZGl1CSQ5LCQ5LC0xCisJZHNybAkkMTEsJDEwLCQ3CisJZHNsbAkkMTIsJDMsJDEzCisJbW92ZQkkMTAsJDMKKwlvcgkkOCwkMTEsJDEyCisJYm5lCSQ5LCQwLC5Mb29wMAorCSBzZAkkOCwtOCgkNCkKKworLkwwOgliZXEJJDYsJDAsLkxlbmQKKwkgbm9wCisKKy5Mb29wOglsZAkkMyw4KCQ1KQorCWRhZGRpdQkkNCwkNCwzMgorCWRhZGRpdQkkNiwkNiwtNAorCWRzcmwJJDExLCQxMCwkNworCWRzbGwJJDEyLCQzLCQxMworCisJbGQJJDEwLDE2KCQ1KQorCWRzcmwJJDE0LCQzLCQ3CisJb3IJJDgsJDExLCQxMgorCXNkCSQ4LC0zMigkNCkKKwlkc2xsCSQ5LCQxMCwkMTMKKworCWxkCSQzLDI0KCQ1KQorCWRzcmwJJDExLCQxMCwkNworCW9yCSQ4LCQxNCwkOQorCXNkCSQ4LC0yNCgkNCkKKwlkc2xsCSQxMiwkMywkMTMKKworCWxkCSQxMCwzMigkNSkKKwlkc3JsCSQxNCwkMywkNworCW9yCSQ4LCQxMSwkMTIKKwlzZAkkOCwtMTYoJDQpCisJZHNsbAkkOSwkMTAsJDEzCisKKwlkYWRkaXUJJDUsJDUsMzIKKwlvcgkkOCwkMTQsJDkKKwliZ3R6CSQ2LC5Mb29wCisJIHNkCSQ4LC04KCQ0KQorCisuTGVuZDoJZHNybAkkOCwkMTAsJDcKKwlqCSQzMQorCXNkCSQ4LDAoJDQpCitFUElMT0dVRShtcG5fcnNoaWZ0KQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9taXBzNjQvc3ViX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9taXBzNjQvc3ViX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNjk4OTcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL21pcHM2NC9zdWJfbi5hc20KQEAgLTAsMCArMSwxMzQgQEAKK2RubCAgTUlQUzY0IG1wbl9zdWJfbiAtLSBTdWJ0cmFjdCB0d28gbGltYiB2ZWN0b3JzIG9mIHRoZSBzYW1lIGxlbmd0aCA+IDAgYW5kCitkbmwgIHN0b3JlIGRpZmZlcmVuY2UgaW4gYSB0aGlyZCBsaW1iIHZlY3Rvci4KKworZG5sICBDb3B5cmlnaHQgMTk5NSwgMjAwMC0yMDAyLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyByZXNfcHRyCSQ0CitDIHMxX3B0cgkkNQorQyBzMl9wdHIJJDYKK0Mgc2l6ZQkJJDcKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9zdWJfbmMpCisJbGQJJDEwLDAoJDUpCisJbGQJJDExLDAoJDYpCisKKwlkYWRkaXUJJDcsJDcsLTEKKwlhbmQJJDksJDcsNC0xCUMgbnVtYmVyIG9mIGxpbWJzIGluIGZpcnN0IGxvb3AKKwliZXEJJDksJDAsLkwwCUMgaWYgbXVsdGlwbGUgb2YgNCBsaW1icywgc2tpcCBmaXJzdCBsb29wCisJIG1vdmUJJDIsJDgKKwliCS5Mb29wMAorCSBkc3VidQkkNywkNywkOQorRVBJTE9HVUUoKQorUFJPTE9HVUUobXBuX3N1Yl9uKQorCWxkCSQxMCwwKCQ1KQorCWxkCSQxMSwwKCQ2KQorCisJZGFkZGl1CSQ3LCQ3LC0xCisJYW5kCSQ5LCQ3LDQtMQlDIG51bWJlciBvZiBsaW1icyBpbiBmaXJzdCBsb29wCisJYmVxCSQ5LCQwLC5MMAlDIGlmIG11bHRpcGxlIG9mIDQgbGltYnMsIHNraXAgZmlyc3QgbG9vcAorCSBtb3ZlCSQyLCQwCisKKwlkc3VidQkkNywkNywkOQorCisuTG9vcDA6CWRhZGRpdQkkOSwkOSwtMQorCWxkCSQxMiw4KCQ1KQorCWRhZGR1CSQxMSwkMTEsJDIKKwlsZAkkMTMsOCgkNikKKwlzbHR1CSQ4LCQxMSwkMgorCWRzdWJ1CSQxMSwkMTAsJDExCisJc2x0dQkkMiwkMTAsJDExCisJc2QJJDExLDAoJDQpCisJb3IJJDIsJDIsJDgKKworCWRhZGRpdQkkNSwkNSw4CisJZGFkZGl1CSQ2LCQ2LDgKKwltb3ZlCSQxMCwkMTIKKwltb3ZlCSQxMSwkMTMKKwlibmUJJDksJDAsLkxvb3AwCisJIGRhZGRpdQkkNCwkNCw4CisKKy5MMDoJYmVxCSQ3LCQwLC5MZW5kCisJIG5vcAorCisuTG9vcDoJZGFkZGl1CSQ3LCQ3LC00CisKKwlsZAkkMTIsOCgkNSkKKwlkc3VidQkkMTEsJDEwLCQxMQorCWxkCSQxMyw4KCQ2KQorCXNsdHUJJDgsJDEwLCQxMQorCWRzdWJ1CSQxNCwkMTEsJDIKKwlzbHR1CSQyLCQxMSwkMTQKKwlzZAkkMTQsMCgkNCkKKwlvcgkkMiwkMiwkOAorCisJbGQJJDEwLDE2KCQ1KQorCWRzdWJ1CSQxMywkMTIsJDEzCisJbGQJJDExLDE2KCQ2KQorCXNsdHUJJDgsJDEyLCQxMworCWRzdWJ1CSQxNCwkMTMsJDIKKwlzbHR1CSQyLCQxMywkMTQKKwlzZAkkMTQsOCgkNCkKKwlvcgkkMiwkMiwkOAorCisJbGQJJDEyLDI0KCQ1KQorCWRzdWJ1CSQxMSwkMTAsJDExCisJbGQJJDEzLDI0KCQ2KQorCXNsdHUJJDgsJDEwLCQxMQorCWRzdWJ1CSQxNCwkMTEsJDIKKwlzbHR1CSQyLCQxMSwkMTQKKwlzZAkkMTQsMTYoJDQpCisJb3IJJDIsJDIsJDgKKworCWxkCSQxMCwzMigkNSkKKwlkc3VidQkkMTMsJDEyLCQxMworCWxkCSQxMSwzMigkNikKKwlzbHR1CSQ4LCQxMiwkMTMKKwlkc3VidQkkMTQsJDEzLCQyCisJc2x0dQkkMiwkMTMsJDE0CisJc2QJJDE0LDI0KCQ0KQorCW9yCSQyLCQyLCQ4CisKKwlkYWRkaXUJJDUsJDUsMzIKKwlkYWRkaXUJJDYsJDYsMzIKKworCWJuZQkkNywkMCwuTG9vcAorCSBkYWRkaXUJJDQsJDQsMzIKKworLkxlbmQ6CWRhZGR1CSQxMSwkMTEsJDIKKwlzbHR1CSQ4LCQxMSwkMgorCWRzdWJ1CSQxMSwkMTAsJDExCisJc2x0dQkkMiwkMTAsJDExCisJc2QJJDExLDAoJDQpCisJagkkMzEKKwlvcgkkMiwkMiwkOAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wYTMyL1JFQURNRSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcGEzMi9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMyMzM5MAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcGEzMi9SRUFETUUKQEAgLTAsMCArMSwxNjIgQEAKK0NvcHlyaWdodCAxOTk2LCAxOTk5LCAyMDAxLCAyMDAyLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworCisKKworCitUaGlzIGRpcmVjdG9yeSBjb250YWlucyBtcG4gZnVuY3Rpb25zIGZvciB2YXJpb3VzIEhQIFBBLVJJU0MgY2hpcHMuICBDb2RlCit0aGF0IHJ1bnMgZmFzdGVyIG9uIHRoZSBQQTcxMDAgYW5kIGxhdGVyIGltcGxlbWVudGF0aW9ucywgaXMgaW4gdGhlIHBhNzEwMAorZGlyZWN0b3J5LgorCitSRUxFVkFOVCBPUFRJTUlaQVRJT04gSVNTVUVTCisKKyAgTG9hZCBhbmQgU3RvcmUgdGltaW5nCisKK09uIHRoZSBQQTcwMDAgbm8gbWVtb3J5IGluc3RydWN0aW9ucyBjYW4gaXNzdWUgdGhlIHR3byBjeWNsZXMgYWZ0ZXIgYSBzdG9yZS4KK0ZvciB0aGUgUEE3MTAwLCB0aGlzIGlzIHJlZHVjZWQgdG8gb25lIGN5Y2xlLgorCitUaGUgUEE3MTAwIGhhcyBhIGxvb2t1cC1mcmVlIGNhY2hlLCBzbyBpdCBoZWxwcyB0byBzY2hlZHVsZSBsb2FkcyBhbmQgdGhlCitkZXBlbmRlbnQgaW5zdHJ1Y3Rpb24gcmVhbGx5IGZhciBmcm9tIGVhY2ggb3RoZXIuCisKK1NUQVRVUworCisxLiBtcG5fbXVsXzEgY291bGQgYmUgaW1wcm92ZWQgdG8gNi41IGN5Y2xlcy9saW1iIG9uIHRoZSBQQTcxMDAsIHVzaW5nIHRoZQorICAgaW5zdHJ1Y3Rpb25zIGJlbG93IChidXQgc29tZSBzdyBwaXBlbGluaW5nIGlzIG5lZWRlZCB0byBhdm9pZCB0aGUKKyAgIHhtcHl1LWZzdGRzIGRlbGF5KToKKworCWZsZGRzCXMxX3B0cgorCisJeG1weXUKKwlmc3RkcwlOKCVyMzApCisJeG1weXUKKwlmc3RkcwlOKCVyMzApCisKKwlsZHdzCU4oJXIzMCkKKwlsZHdzCU4oJXIzMCkKKwlsZHdzCU4oJXIzMCkKKwlsZHdzCU4oJXIzMCkKKworCWFkZGMKKwlzdHdzCXJlc19wdHIKKwlhZGRjCisJc3R3cwlyZXNfcHRyCisKKwlhZGRpYglMb29wCisKKzIuIG1wbl9hZGRtdWxfMSBjb3VsZCBiZSBpbXByb3ZlZCBmcm9tIHRoZSBjdXJyZW50IDEwIHRvIDcuNSBjeWNsZXMvbGltYgorICAgKGFzeW1wdG90aWNhbGx5KSBvbiB0aGUgUEE3MTAwLCB1c2luZyB0aGUgaW5zdHJ1Y3Rpb25zIGJlbG93LiAgV2l0aCBwcm9wZXIKKyAgIHN3IHBpcGVsaW5pbmcgYW5kIHRoZSB1bnJvbGxpbmcgbGV2ZWwgYmVsb3csIHRoZSBzcGVlZCBiZWNvbWVzIDgKKyAgIGN5Y2xlcy9saW1iLgorCisJZmxkZHMJczFfcHRyCisJZmxkZHMJczFfcHRyCisKKwl4bXB5dQorCWZzdGRzCU4oJXIzMCkKKwl4bXB5dQorCWZzdGRzCU4oJXIzMCkKKwl4bXB5dQorCWZzdGRzCU4oJXIzMCkKKwl4bXB5dQorCWZzdGRzCU4oJXIzMCkKKworCWxkd3MJTiglcjMwKQorCWxkd3MJTiglcjMwKQorCWxkd3MJTiglcjMwKQorCWxkd3MJTiglcjMwKQorCWxkd3MJTiglcjMwKQorCWxkd3MJTiglcjMwKQorCWxkd3MJTiglcjMwKQorCWxkd3MJTiglcjMwKQorCWFkZGMKKwlhZGRjCisJYWRkYworCWFkZGMKKwlhZGRjCSVyMCwlcjAsY3ktbGltYgorCisJbGR3cwlyZXNfcHRyCisJbGR3cwlyZXNfcHRyCisJbGR3cwlyZXNfcHRyCisJbGR3cwlyZXNfcHRyCisJYWRkCisJc3R3cwlyZXNfcHRyCisJYWRkYworCXN0d3MJcmVzX3B0cgorCWFkZGMKKwlzdHdzCXJlc19wdHIKKwlhZGRjCisJc3R3cwlyZXNfcHRyCisKKwlhZGRpYgorCiszLiBGb3IgdGhlIFBBODAwMCB3ZSBoYXZlIHRvIHN0aWNrIHRvIHVzaW5nIDMyLWJpdCBsaW1icyBiZWZvcmUgY29tcGlsZXIKKyAgIHN1cHBvcnQgZW1lcmdlcy4gIEJ1dCB3ZSB3YW50IHRvIHVzZSA2NC1iaXQgb3BlcmF0aW9ucyB3aGVuZXZlciBwb3NzaWJsZSwKKyAgIGluIHBhcnRpY3VsYXIgZm9yIGxvYWRzIGFuZCBzdG9yZXMuICBJdCBpcyBwb3NzaWJsZSB0byBoYW5kbGUgbXBuX2FkZF9uCisgICBlZmZpY2llbnRseSBieSByb3RhdGluZyAod2hlbiBzMS9zMiBhcmUgYWxpZ25lZCksIG1hc2tpbmcrYml0IGZpZWxkCisgICBpbnNlcnRpbmcgd2hlbiAodGhleSBhcmUgbm90KS4gIFRoZSBzcGVlZCBzaG91bGQgZG91YmxlIGNvbXBhcmVkIHRvIHRoZQorICAgY29kZSB1c2VkIHRvZGF5LgorCisKKworCitMQUJFTCBTWU5UQVgKKworVGhlIEhQLVVYIGFzc2VtYmxlciB0YWtlcyBsYWJlbHMgc3RhcnRpbmcgaW4gY29sdW1uIDAgd2l0aCBubyBjb2xvbiwKKworCUwkbG9vcCAgbGR3cyxtYiAtNCgwLCVyMjUpLCVyMjIKKworR2FzIG9uIGhwcGEgR05VL0xpbnV4IGhvd2V2ZXIgcmVxdWlyZXMgYSBjb2xvbiwKKworCUwkbG9vcDogbGR3cyxtYiAtNCgwLCVyMjUpLCVyMjIKKworVGhpcyBpcyBjb3ZlcmVkIGJ5IHVzaW5nIExERUYoKSBmcm9tIGFzbS1kZWZzLm00LiAgQW4gYWx0ZXJuYXRpdmUgd291bGQgYmUKK3RvIHVzZSAiLmxhYmVsIiB3aGljaCBpcyBhY2NlcHRlZCBieSBib3RoLAorCisJCS5sYWJlbCAgTCRsb29wCisJCWxkd3MsbWIgLTQoMCwlcjI1KSwlcjIyCisKK2J1dCB0aGF0J3Mgbm90IGFzIG5pY2UgdG8gbG9vayBhdCwgbm90IGlmIHlvdSdyZSB1c2VkIHRvIGFzc2VtYmxlciBjb2RlCitoYXZpbmcgbGFiZWxzIGluIGNvbHVtbiAwLgorCisKKworCitSRUZFUkVOQ0VTCisKK0hld2xldHQgUGFja2FyZCwgIkhQIEFzc2VtYmxlciBSZWZlcmVuY2UgTWFudWFsIiwgOXRoIGVkaXRpb24sIEp1bmUgMTk5OCwKK3BhcnQgbnVtYmVyIDkyNDMyLTkwMDEyLgorCisKKworLS0tLS0tLS0tLS0tLS0tLQorTG9jYWwgdmFyaWFibGVzOgorbW9kZTogdGV4dAorZmlsbC1jb2x1bW46IDc2CitFbmQ6CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3BhMzIvYWRkX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wYTMyL2FkZF9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmYzOTM3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wYTMyL2FkZF9uLmFzbQpAQCAtMCwwICsxLDYzIEBACitkbmwgIEhQLVBBIG1wbl9hZGRfbiAtLSBBZGQgdHdvIGxpbWIgdmVjdG9ycyBvZiB0aGUgc2FtZSBsZW5ndGggPiAwIGFuZCBzdG9yZQorZG5sICBzdW0gaW4gYSB0aGlyZCBsaW1iIHZlY3Rvci4KKworZG5sICBDb3B5cmlnaHQgMTk5MiwgMTk5NCwgMjAwMC0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyByZXNfcHRyCWdyMjYKK0MgczFfcHRyCWdyMjUKK0MgczJfcHRyCWdyMjQKK0Mgc2l6ZQkJZ3IyMworCitDIE9uZSBtaWdodCB3YW50IHRvIHVucm9sbCB0aGlzIGFzIGZvciBvdGhlciBwcm9jZXNzb3JzLCBidXQgaXQgdHVybnMgb3V0IHRoYXQKK0MgdGhlIGRhdGEgY2FjaGUgY29udGVudGlvbiBhZnRlciBhIHN0b3JlIG1ha2VzIHN1Y2ggdW5yb2xsaW5nIHVzZWxlc3MuICBXZQorQyBjYW4ndCBjb21lIHVuZGVyIDUgY3ljbGVzL2xpbWIgYW55d2F5LgorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2FkZF9uKQorCWxkd3MsbWEJCTQoMCwlcjI1KSwlcjIwCisJbGR3cyxtYQkJNCgwLCVyMjQpLCVyMTkKKworCWFkZGliLD0JCS0xLCVyMjMsTChlbmQpCUMgY2hlY2sgZm9yIChTSVpFID09IDEpCisJIGFkZAkJJXIyMCwlcjE5LCVyMjgJQyBhZGQgZmlyc3QgbGltYnMgaWdub3JpbmcgY3kKKworTERFRihsb29wKQorCWxkd3MsbWEJCTQoMCwlcjI1KSwlcjIwCisJbGR3cyxtYQkJNCgwLCVyMjQpLCVyMTkKKwlzdHdzLG1hCQklcjI4LDQoMCwlcjI2KQorCWFkZGliLDw+CS0xLCVyMjMsTChsb29wKQorCSBhZGRjCQklcjIwLCVyMTksJXIyOAorCitMREVGKGVuZCkKKwlzdHdzCQklcjI4LDAoMCwlcjI2KQorCWJ2CQkwKCVyMikKKwkgYWRkYwkJJXIwLCVyMCwlcjI4CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3BhMzIvZ21wLW1wYXJhbS5oIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wYTMyL2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzdlZmNiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wYTMyL2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDYxIEBACisvKiBIUC1QQSAxLjAgZ21wLW1wYXJhbS5oIC0tIENvbXBpbGVyL21hY2hpbmUgcGFyYW1ldGVyIGhlYWRlciBmaWxlLgorCitDb3B5cmlnaHQgMTk5MSwgMTk5MywgMTk5NCwgMTk5OS0yMDAyLCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgMzIKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgNAorCisvKiBUaGVzZSB2YWx1ZXMgYXJlIGZvciB0aGUgUEE3MTAwIHVzaW5nIEdDQy4gICovCisvKiBHZW5lcmF0ZWQgYnkgdHVuZXVwLmMsIDIwMDAtMTAtMjcuICovCisKKyNpZm5kZWYgTVVMX1RPT00yMl9USFJFU0hPTEQKKyNkZWZpbmUgTVVMX1RPT00yMl9USFJFU0hPTEQgICAgICAzMAorI2VuZGlmCisjaWZuZGVmIE1VTF9UT09NMzNfVEhSRVNIT0xECisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAxNDEKKyNlbmRpZgorCisjaWZuZGVmIFNRUl9UT09NMl9USFJFU0hPTEQKKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICA1OQorI2VuZGlmCisjaWZuZGVmIFNRUl9UT09NM19USFJFU0hPTEQKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgIDE3NworI2VuZGlmCisKKyNpZm5kZWYgRElWX0RDX1RIUkVTSE9MRAorI2RlZmluZSBESVZfRENfVEhSRVNIT0xEICAgICAgICAgMTA4CisjZW5kaWYKKworI2lmbmRlZiBQT1dNX1RIUkVTSE9MRAorI2RlZmluZSBQT1dNX1RIUkVTSE9MRCAgICAgICAgICAgIDE4CisjZW5kaWYKKworI2lmbmRlZiBHQ0RFWFRfVEhSRVNIT0xECisjZGVmaW5lIEdDREVYVF9USFJFU0hPTEQgICAgICAgICAgMzMKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wYTMyL2hwcGExXzEvYWRkbXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wYTMyL2hwcGExXzEvYWRkbXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMmYyMTkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3BhMzIvaHBwYTFfMS9hZGRtdWxfMS5hc20KQEAgLTAsMCArMSwxMDYgQEAKK2RubCAgSFAtUEEgMS4xIG1wbl9hZGRtdWxfMSAtLSBNdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYSBsaW1iIGFuZCBhZGQgdGhlCitkbmwgIHJlc3VsdCB0byBhIHNlY29uZCBsaW1iIHZlY3Rvci4KKworZG5sICBDb3B5cmlnaHQgMTk5Mi0xOTk0LCAyMDAwLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBJTlBVVCBQQVJBTUVURVJTCitDIHJlc19wdHIJcjI2CitDIHMxX3B0cglyMjUKK0Mgc2l6ZQkJcjI0CitDIHMyX2xpbWIJcjIzCisKK0MgVGhpcyBydW5zIGF0IDExIGN5Y2xlcy9saW1iIG9uIGEgUEE3MDAwLiAgV2l0aCB0aGUgdXNlZCBpbnN0cnVjdGlvbnMsIGl0IGNhbgorQyBub3QgYmVjb21lIGZhc3RlciBkdWUgdG8gZGF0YSBjYWNoZSBjb250ZW50aW9uIGFmdGVyIGEgc3RvcmUuICBPbiB0aGUgUEE3MTAwCitDIGl0IHJ1bnMgYXQgMTAgY3ljbGVzL2xpbWIuCisKK0MgVGhlcmUgYXJlIHNvbWUgaWRlYXMgZGVzY3JpYmVkIGluIG11bF8xLmFzbSB0aGF0IGFwcGxpZXMgdG8gdGhpcyBjb2RlIHRvby4KKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9hZGRtdWxfMSkKK0MJLmNhbGxpbmZvCWZyYW1lPTY0LG5vX2NhbGxzCisKKwlsZG8JCTY0KCVyMzApLCVyMzAKKwlmbGR3cyxtYQk0KCVyMjUpLCVmcjUKKwlzdHcJCSVyMjMsLTE2KCVyMzApCQlDIG1vdmUgczJfbGltYiAuLi4KKwlhZGRpYiw9CQktMSwlcjI0LEwoanVzdF9vbmVfbGltYikKKwkgZmxkd3MJCS0xNiglcjMwKSwlZnI0CQlDIC4uLiBpbnRvIGZyNAorCWFkZAkJJXIwLCVyMCwlcjAJCUMgY2xlYXIgY2FycnkKKwl4bXB5dQkJJWZyNCwlZnI1LCVmcjYKKwlmbGR3cyxtYQk0KCVyMjUpLCVmcjcKKwlmc3RkcwkJJWZyNiwtMTYoJXIzMCkKKwl4bXB5dQkJJWZyNCwlZnI3LCVmcjgKKwlsZHcJCS0xMiglcjMwKSwlcjE5CQlDIGxlYXN0IHNpZ25pZmljYW50IGxpbWIgaW4gcHJvZHVjdAorCWxkdwkJLTE2KCVyMzApLCVyMjgKKworCWZzdGRzCQklZnI4LC0xNiglcjMwKQorCWFkZGliLD0JCS0xLCVyMjQsTChlbmQpCisJIGxkdwkJLTEyKCVyMzApLCVyMQorCitDIE1haW4gbG9vcAorTERFRihsb29wKQorCWxkd3MJCTAoJXIyNiksJXIyOQorCWZsZHdzLG1hCTQoJXIyNSksJWZyNQorCWFkZAkJJXIyOSwlcjE5LCVyMTkKKwlzdHdzLG1hCQklcjE5LDQoJXIyNikKKwlhZGRjCQklcjI4LCVyMSwlcjE5CisJeG1weXUJCSVmcjQsJWZyNSwlZnI2CisJbGR3CQktMTYoJXIzMCksJXIyOAorCWZzdGRzCQklZnI2LC0xNiglcjMwKQorCWFkZGMJCSVyMCwlcjI4LCVyMjgKKwlhZGRpYiw8PgktMSwlcjI0LEwobG9vcCkKKwkgbGR3CQktMTIoJXIzMCksJXIxCisKK0xERUYoZW5kKQorCWxkdwkJMCglcjI2KSwlcjI5CisJYWRkCQklcjI5LCVyMTksJXIxOQorCXN0d3MsbWEJCSVyMTksNCglcjI2KQorCWFkZGMJCSVyMjgsJXIxLCVyMTkKKwlsZHcJCS0xNiglcjMwKSwlcjI4CisJbGR3cwkJMCglcjI2KSwlcjI5CisJYWRkYwkJJXIwLCVyMjgsJXIyOAorCWFkZAkJJXIyOSwlcjE5LCVyMTkKKwlzdHdzLG1hCQklcjE5LDQoJXIyNikKKwlhZGRjCQklcjAsJXIyOCwlcjI4CisJYnYJCTAoJXIyKQorCSBsZG8JCS02NCglcjMwKSwlcjMwCisKK0xERUYoanVzdF9vbmVfbGltYikKKwl4bXB5dQkJJWZyNCwlZnI1LCVmcjYKKwlsZHcJCTAoJXIyNiksJXIyOQorCWZzdGRzCQklZnI2LC0xNiglcjMwKQorCWxkdwkJLTEyKCVyMzApLCVyMQorCWxkdwkJLTE2KCVyMzApLCVyMjgKKwlhZGQJCSVyMjksJXIxLCVyMTkKKwlzdHcJCSVyMTksMCglcjI2KQorCWFkZGMJCSVyMCwlcjI4LCVyMjgKKwlidgkJMCglcjIpCisJIGxkbwkJLTY0KCVyMzApLCVyMzAKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcGEzMi9ocHBhMV8xL2dtcC1tcGFyYW0uaCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcGEzMi9ocHBhMV8xL2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjYxYjI0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wYTMyL2hwcGExXzEvZ21wLW1wYXJhbS5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qIEhQLVBBIDEuMSBnbXAtbXBhcmFtLmggLS0gQ29tcGlsZXIvbWFjaGluZSBwYXJhbWV0ZXIgaGVhZGVyIGZpbGUuCisKK0NvcHlyaWdodCAxOTkxLCAxOTkzLCAxOTk0LCAxOTk5LTIwMDIsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNkZWZpbmUgR01QX0xJTUJfQklUUyAzMgorI2RlZmluZSBHTVBfTElNQl9CWVRFUyA0CisKKy8qIEdlbmVyYXRlZCBieSB0dW5ldXAuYywgMjAwNC0wMi0wNywgZ2NjIDIuOCAocGE3MTAwLzEwME1IeikgKi8KKworI2RlZmluZSBNVUxfVE9PTTIyX1RIUkVTSE9MRCAgICAgICAgICAgICAzMAorI2RlZmluZSBNVUxfVE9PTTMzX1RIUkVTSE9MRCAgICAgICAgICAgICA4OQorCisjZGVmaW5lIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICA0CisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgIDU1CisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgMTAxCisKKyNkZWZpbmUgRElWX1NCX1BSRUlOVl9USFJFU0hPTEQgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBESVZfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA4NAorI2RlZmluZSBQT1dNX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDE2NgorCisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgMjMxCisjZGVmaW5lIEdDRF9BQ0NFTF9USFJFU0hPTEQgICAgICAgICAgICAgICAzCisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgODIzCisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAyCisKKyNkZWZpbmUgRElWUkVNXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgIDUKKyNkZWZpbmUgRElWUkVNXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgMTEKKyNkZWZpbmUgTU9EXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgIDUKKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgMTAKKyNkZWZpbmUgVVNFX1BSRUlOVl9ESVZSRU1fMSAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgVVNFX1BSRUlOVl9NT0RfMSAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgRElWUkVNXzJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBESVZFWEFDVF8xX1RIUkVTSE9MRCAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PREVYQUNUXzFfT0REX1RIUkVTSE9MRCAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKworI2RlZmluZSBHRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAxMworI2RlZmluZSBHRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAyMworI2RlZmluZSBTRVRfU1RSX1RIUkVTSE9MRCAgICAgICAgICAgICAgNjU4OQorCisjZGVmaW5lIE1VTF9GRlRfVEFCTEUgIHsgNDY0LCA5MjgsIDE5MjAsIDQ2MDgsIDE0MzM2LCA0MDk2MCwgMCB9CisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgNDgwCisjZGVmaW5lIE1VTF9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAzMzI4CisKKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRSAgeyA1MjgsIDExODQsIDIxNzYsIDU2MzIsIDE0MzM2LCA0MDk2MCwgMCB9CisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgNTIwCisjZGVmaW5lIFNRUl9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAzMzI4CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3BhMzIvaHBwYTFfMS9tdWxfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3BhMzIvaHBwYTFfMS9tdWxfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU2MGMyZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcGEzMi9ocHBhMV8xL211bF8xLmFzbQpAQCAtMCwwICsxLDEwMiBAQAorZG5sICBIUC1QQSAxLjEgbXBuX211bF8xIC0tIE11bHRpcGx5IGEgbGltYiB2ZWN0b3Igd2l0aCBhIGxpbWIgYW5kIHN0b3JlIHRoZQorZG5sICByZXN1bHQgaW4gYSBzZWNvbmQgbGltYiB2ZWN0b3IuCisKK2RubCAgQ29weXJpZ2h0IDE5OTItMTk5NCwgMjAwMC0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyByZXNfcHRyCXIyNgorQyBzMV9wdHIJcjI1CitDIHNpemUJCXIyNAorQyBzMl9saW1iCXIyMworCitDIFRoaXMgcnVucyBhdCA5IGN5Y2xlcy9saW1iIG9uIGEgUEE3MDAwLiAgV2l0aCB0aGUgdXNlZCBpbnN0cnVjdGlvbnMsIGl0IGNhbgorQyBub3QgYmVjb21lIGZhc3RlciBkdWUgdG8gZGF0YSBjYWNoZSBjb250ZW50aW9uIGFmdGVyIGEgc3RvcmUuICBPbiB0aGUgUEE3MTAwCitDIGl0IHJ1bnMgYXQgNyBjeWNsZXMvbGltYi4KKworQyBXZSBjb3VsZCB1c2UgZmxkZHMgdG8gcmVhZCB0d28gbGltYnMgYXQgYSB0aW1lIGZyb20gdGhlIFMxIGFycmF5LCBhbmQgdGhhdAorQyBjb3VsZCBicmluZyBkb3duIHRoZSB0aW1lcyB0byA4LjUgYW5kIDYuNSBjeWNsZXMvbGltYiBmb3IgdGhlIFBBNzAwMCBhbmQKK0MgUEE3MTAwLCByZXNwZWN0aXZlbHkuICBXZSBkb24ndCBkbyB0aGF0IHNpbmNlIGl0IGRvZXMgbm90IHNlZW0gd29ydGggdGhlCitDIChhbGlnbm1lbnQpIHRyb3VibGVzLi4uCisKK0MgQXQgbGVhc3QgdGhlIFBBNzEwMCBpcyBydW1vcmVkIHRvIGJlIGFibGUgdG8gZGVhbCB3aXRoIGNhY2hlLW1pc3NlcyB3aXRob3V0CitDIHN0YWxsaW5nIGluc3RydWN0aW9uIGlzc3VlLiAgSWYgdGhpcyBpcyB0cnVlLCBhbmQgdGhlIGNhY2hlIGlzIGFjdHVhbGx5IGFsc28KK0MgbG9ja3VwLWZyZWUsIHdlIHNob3VsZCB1c2UgYSBkZWVwZXIgc29mdHdhcmUgcGlwZWxpbmUsIGFuZCBsb2FkIGZyb20gUzEgdmVyeQorQyBlYXJseSEgIChUaGUgbG9hZHMgYW5kIHN0b3JlcyB0byAtMTIoc3ApIHdpbGwgc3VyZWx5IGJlIGluIHRoZSBjYWNoZS4pCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fbXVsXzEpCitDCS5jYWxsaW5mbwlmcmFtZT02NCxub19jYWxscworCisJbGRvCQk2NCglcjMwKSwlcjMwCisJZmxkd3MsbWEJNCglcjI1KSwlZnI1CisJc3R3CQklcjIzLC0xNiglcjMwKQkJQyBtb3ZlIHMyX2xpbWIgLi4uCisJYWRkaWIsPQkJLTEsJXIyNCxMKGp1c3Rfb25lX2xpbWIpCisJIGZsZHdzCQktMTYoJXIzMCksJWZyNAkJQyAuLi4gaW50byBmcjQKKwlhZGQJCSVyMCwlcjAsJXIwCQlDIGNsZWFyIGNhcnJ5CisJeG1weXUJCSVmcjQsJWZyNSwlZnI2CisJZmxkd3MsbWEJNCglcjI1KSwlZnI3CisJZnN0ZHMJCSVmcjYsLTE2KCVyMzApCisJeG1weXUJCSVmcjQsJWZyNywlZnI4CisJbGR3CQktMTIoJXIzMCksJXIxOQkJQyBsZWFzdCBzaWduaWZpY2FudCBsaW1iIGluIHByb2R1Y3QKKwlsZHcJCS0xNiglcjMwKSwlcjI4CisKKwlmc3RkcwkJJWZyOCwtMTYoJXIzMCkKKwlhZGRpYiw9CQktMSwlcjI0LEwoZW5kKQorCSBsZHcJCS0xMiglcjMwKSwlcjEKKworQyBNYWluIGxvb3AKK0xERUYobG9vcCkKKwlmbGR3cyxtYQk0KCVyMjUpLCVmcjUKKwlzdHdzLG1hCQklcjE5LDQoJXIyNikKKwlhZGRjCQklcjI4LCVyMSwlcjE5CisJeG1weXUJCSVmcjQsJWZyNSwlZnI2CisJbGR3CQktMTYoJXIzMCksJXIyOAorCWZzdGRzCQklZnI2LC0xNiglcjMwKQorCWFkZGliLDw+CS0xLCVyMjQsTChsb29wKQorCSBsZHcJCS0xMiglcjMwKSwlcjEKKworTERFRihlbmQpCisJc3R3cyxtYQkJJXIxOSw0KCVyMjYpCisJYWRkYwkJJXIyOCwlcjEsJXIxOQorCWxkdwkJLTE2KCVyMzApLCVyMjgKKwlzdHdzLG1hCQklcjE5LDQoJXIyNikKKwlhZGRjCQklcjAsJXIyOCwlcjI4CisJYnYJCTAoJXIyKQorCSBsZG8JCS02NCglcjMwKSwlcjMwCisKK0xERUYoanVzdF9vbmVfbGltYikKKwl4bXB5dQkJJWZyNCwlZnI1LCVmcjYKKwlmc3RkcwkJJWZyNiwtMTYoJXIzMCkKKwlsZHcJCS0xNiglcjMwKSwlcjI4CisJbGRvCQktNjQoJXIzMCksJXIzMAorCWJ2CQkwKCVyMikKKwkgZnN0d3MJCSVmcjZSLDAoJXIyNikKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcGEzMi9ocHBhMV8xL3BhNzEwMC9hZGRfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3BhMzIvaHBwYTFfMS9wYTcxMDAvYWRkX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NmQ0MDMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3BhMzIvaHBwYTFfMS9wYTcxMDAvYWRkX24uYXNtCkBAIC0wLDAgKzEsODMgQEAKK2RubCAgSFAtUEEgbXBuX2FkZF9uIC0tIEFkZCB0d28gbGltYiB2ZWN0b3JzIG9mIHRoZSBzYW1lIGxlbmd0aCA+IDAgYW5kIHN0b3JlCitkbmwgIHN1bSBpbiBhIHRoaXJkIGxpbWIgdmVjdG9yLiAgT3B0aW1pemVkIGZvciB0aGUgUEE3MTAwLCB3aGVyZSBpcyBydW5zIGF0CitkbmwgIDQuMjUgY3ljbGVzL2xpbWIuCisKK2RubCAgQ29weXJpZ2h0IDE5OTIsIDE5OTQsIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDIElOUFVUIFBBUkFNRVRFUlMKK0MgcmVzX3B0cglyMjYKK0MgczFfcHRyCXIyNQorQyBzMl9wdHIJcjI0CitDIHNpemUJCXIyMworCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2FkZF9uKQorCWxkd3MsbWEJCTQoMCwlcjI1KSwlcjIwCisJbGR3cyxtYQkJNCgwLCVyMjQpLCVyMTkKKworCWFkZGliLDw9CS01LCVyMjMsTChyZXN0KQorCSBhZGQJCSVyMjAsJXIxOSwlcjI4CUMgYWRkIGZpcnN0IGxpbWJzIGlnbm9yaW5nIGN5CisKK0xERUYobG9vcCkKKwlsZHdzLG1hCQk0KDAsJXIyNSksJXIyMAorCWxkd3MsbWEJCTQoMCwlcjI0KSwlcjE5CisJc3R3cyxtYQkJJXIyOCw0KDAsJXIyNikKKwlhZGRjCQklcjIwLCVyMTksJXIyOAorCWxkd3MsbWEJCTQoMCwlcjI1KSwlcjIwCisJbGR3cyxtYQkJNCgwLCVyMjQpLCVyMTkKKwlzdHdzLG1hCQklcjI4LDQoMCwlcjI2KQorCWFkZGMJCSVyMjAsJXIxOSwlcjI4CisJbGR3cyxtYQkJNCgwLCVyMjUpLCVyMjAKKwlsZHdzLG1hCQk0KDAsJXIyNCksJXIxOQorCXN0d3MsbWEJCSVyMjgsNCgwLCVyMjYpCisJYWRkYwkJJXIyMCwlcjE5LCVyMjgKKwlsZHdzLG1hCQk0KDAsJXIyNSksJXIyMAorCWxkd3MsbWEJCTQoMCwlcjI0KSwlcjE5CisJc3R3cyxtYQkJJXIyOCw0KDAsJXIyNikKKwlhZGRpYiw+CQktNCwlcjIzLEwobG9vcCkKKwlhZGRjCQklcjIwLCVyMTksJXIyOAorCitMREVGKHJlc3QpCisJYWRkaWIsPQkJNCwlcjIzLEwoZW5kKQorCW5vcAorCitMREVGKGVsb29wKQorCWxkd3MsbWEJCTQoMCwlcjI1KSwlcjIwCisJbGR3cyxtYQkJNCgwLCVyMjQpLCVyMTkKKwlzdHdzLG1hCQklcjI4LDQoMCwlcjI2KQorCWFkZGliLD4JCS0xLCVyMjMsTChlbG9vcCkKKwlhZGRjCQklcjIwLCVyMTksJXIyOAorCitMREVGKGVuZCkKKwlzdHdzCQklcjI4LDAoMCwlcjI2KQorCWJ2CQkwKCVyMikKKwkgYWRkYwkJJXIwLCVyMCwlcjI4CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3BhMzIvaHBwYTFfMS9wYTcxMDAvYWRkbXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wYTMyL2hwcGExXzEvcGE3MTAwL2FkZG11bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjE2MTAwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wYTMyL2hwcGExXzEvcGE3MTAwL2FkZG11bF8xLmFzbQpAQCAtMCwwICsxLDIwMSBAQAorZG5sICBIUC1QQSA3MTAwLzcyMDAgbXBuX2FkZG11bF8xIC0tIE11bHRpcGx5IGEgbGltYiB2ZWN0b3Igd2l0aCBhIGxpbWIgYW5kCitkbmwgIGFkZCB0aGUgcmVzdWx0IHRvIGEgc2Vjb25kIGxpbWIgdmVjdG9yLgorCitkbmwgIENvcHlyaWdodCAxOTk1LCAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJlc19wdHInLGAlcjI2JykKK2RlZmluZShgczFfcHRyJyxgJXIyNScpCitkZWZpbmUoYHNpemVfcGFyYW0nLGAlcjI0JykKK2RlZmluZShgczJfbGltYicsYCVyMjMnKQorCitkZWZpbmUoYGN5bGltYicsYCVyMjgnKQorZGVmaW5lKGBzMCcsYCVyMTknKQorZGVmaW5lKGBzMScsYCVyMjAnKQorZGVmaW5lKGBzMicsYCVyMycpCitkZWZpbmUoYHMzJyxgJXI0JykKK2RlZmluZShgbG8wJyxgJXIyMScpCitkZWZpbmUoYGxvMScsYCVyNScpCitkZWZpbmUoYGxvMicsYCVyNicpCitkZWZpbmUoYGxvMycsYCVyNycpCitkZWZpbmUoYGhpMCcsYCVyMjInKQorZGVmaW5lKGBoaTEnLGAlcjIzJykJCQkJQyBzYWZlIHRvIHJldXNlCitkZWZpbmUoYGhpMicsYCVyMjknKQorZGVmaW5lKGBoaTMnLGAlcjEnKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2FkZG11bF8xKQorQwkuY2FsbGluZm8JZnJhbWU9MTI4LG5vX2NhbGxzCisKKwlsZG8JMTI4KCVyMzApLCVyMzAKKwlzdHdzCXMyX2xpbWIsLTE2KCVyMzApCisJYWRkCSAlcjAsJXIwLGN5bGltYgkJCUMgY2xlYXIgY3kgYW5kIGN5bGltYgorCWFkZGliLDwJLTQsc2l6ZV9wYXJhbSxMKGZld19saW1icykKKwlmbGR3cwktMTYoJXIzMCksJWZyMzFSCisKKwlsZG8JLTExMiglcjMwKSwlcjMxCisJc3R3CSVyMywtOTYoJXIzMCkKKwlzdHcJJXI0LC05MiglcjMwKQorCXN0dwklcjUsLTg4KCVyMzApCisJc3R3CSVyNiwtODQoJXIzMCkKKwlzdHcJJXI3LC04MCglcjMwKQorCisJYmIsPj0sbgkgczFfcHRyLDI5LEwoMCkKKworCWZsZHdzLG1hIDQoczFfcHRyKSwlZnI0CisJbGR3cwkgMChyZXNfcHRyKSxzMAorCXhtcHl1CSAlZnI0LCVmcjMxUiwlZnI1CisJZnN0ZHMJICVmcjUsLTE2KCVyMzEpCisJbGR3cwktMTYoJXIzMSksY3lsaW1iCisJbGR3cwktMTIoJXIzMSksbG8wCisJYWRkCSBzMCxsbzAsczAKKwlhZGRpYiw8IC0xLHNpemVfcGFyYW0sTChmZXdfbGltYnMpCisJc3R3cyxtYQkgczAsNChyZXNfcHRyKQorCitDIHN0YXJ0IHNvZnR3YXJlIHBpcGVsaW5lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xERUYoMCkKKwlmbGRkcyxtYSA4KHMxX3B0ciksJWZyNAorCWZsZGRzLG1hIDgoczFfcHRyKSwlZnI4CisKKwl4bXB5dQkgJWZyNEwsJWZyMzFSLCVmcjUKKwl4bXB5dQkgJWZyNFIsJWZyMzFSLCVmcjYKKwl4bXB5dQkgJWZyOEwsJWZyMzFSLCVmcjkKKwl4bXB5dQkgJWZyOFIsJWZyMzFSLCVmcjEwCisKKwlmc3RkcwkgJWZyNSwtMTYoJXIzMSkKKwlmc3RkcwkgJWZyNiwtOCglcjMxKQorCWZzdGRzCSAlZnI5LDAoJXIzMSkKKwlmc3RkcwkgJWZyMTAsOCglcjMxKQorCisJbGR3cyAgIC0xNiglcjMxKSxoaTAKKwlsZHdzICAgLTEyKCVyMzEpLGxvMAorCWxkd3MJLTgoJXIzMSksaGkxCisJbGR3cwktNCglcjMxKSxsbzEKKwlsZHdzCSAwKCVyMzEpLGhpMgorCWxkd3MJIDQoJXIzMSksbG8yCisJbGR3cwkgOCglcjMxKSxoaTMKKwlsZHdzCTEyKCVyMzEpLGxvMworCisJYWRkYwkgbG8wLGN5bGltYixsbzAKKwlhZGRjCSBsbzEsaGkwLGxvMQorCWFkZGMJIGxvMixoaTEsbG8yCisJYWRkYwkgbG8zLGhpMixsbzMKKworCWFkZGliLDwJIC00LHNpemVfcGFyYW0sTChlbmQpCisJYWRkYwkgJXIwLGhpMyxjeWxpbWIJCQlDIHByb3BhZ2F0ZSBjYXJyeSBpbnRvIGN5bGltYgorQyBtYWluIGxvb3AgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMREVGKGxvb3ApCisJZmxkZHMsbWEgOChzMV9wdHIpLCVmcjQKKwlmbGRkcyxtYSA4KHMxX3B0ciksJWZyOAorCisJbGR3cwkgMChyZXNfcHRyKSxzMAorCXhtcHl1CSAlZnI0TCwlZnIzMVIsJWZyNQorCWxkd3MJIDQocmVzX3B0ciksczEKKwl4bXB5dQkgJWZyNFIsJWZyMzFSLCVmcjYKKwlsZHdzCSA4KHJlc19wdHIpLHMyCisJeG1weXUJICVmcjhMLCVmcjMxUiwlZnI5CisJbGR3cwkxMihyZXNfcHRyKSxzMworCXhtcHl1CSAlZnI4UiwlZnIzMVIsJWZyMTAKKworCWZzdGRzCSAlZnI1LC0xNiglcjMxKQorCWFkZAkgczAsbG8wLHMwCisJZnN0ZHMJICVmcjYsLTgoJXIzMSkKKwlhZGRjCSBzMSxsbzEsczEKKwlmc3RkcwkgJWZyOSwwKCVyMzEpCisJYWRkYwkgczIsbG8yLHMyCisJZnN0ZHMJICVmcjEwLDgoJXIzMSkKKwlhZGRjCSBzMyxsbzMsczMKKworCWxkd3MgICAtMTYoJXIzMSksaGkwCisJbGR3cyAgIC0xMiglcjMxKSxsbzAKKwlsZHdzCS04KCVyMzEpLGhpMQorCWxkd3MJLTQoJXIzMSksbG8xCisJbGR3cwkgMCglcjMxKSxoaTIKKwlsZHdzCSA0KCVyMzEpLGxvMgorCWxkd3MJIDgoJXIzMSksaGkzCisJbGR3cwkxMiglcjMxKSxsbzMKKworCWFkZGMJIGxvMCxjeWxpbWIsbG8wCisJc3R3cyxtYQkgczAsNChyZXNfcHRyKQorCWFkZGMJIGxvMSxoaTAsbG8xCisJc3R3cyxtYQkgczEsNChyZXNfcHRyKQorCWFkZGMJIGxvMixoaTEsbG8yCisJc3R3cyxtYQkgczIsNChyZXNfcHRyKQorCWFkZGMJIGxvMyxoaTIsbG8zCisJc3R3cyxtYQkgczMsNChyZXNfcHRyKQorCisJYWRkaWIsPj0gLTQsc2l6ZV9wYXJhbSxMKGxvb3ApCisJYWRkYwkgJXIwLGhpMyxjeWxpbWIJCQlDIHByb3BhZ2F0ZSBjYXJyeSBpbnRvIGN5bGltYgorQyBmaW5pc2ggc29mdHdhcmUgcGlwZWxpbmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMREVGKGVuZCkKKwlsZHdzCSAwKHJlc19wdHIpLHMwCisJbGR3cwkgNChyZXNfcHRyKSxzMQorCWxkd3MJIDgocmVzX3B0ciksczIKKwlsZHdzCTEyKHJlc19wdHIpLHMzCisKKwlhZGQJIHMwLGxvMCxzMAorCXN0d3MsbWEJIHMwLDQocmVzX3B0cikKKwlhZGRjCSBzMSxsbzEsczEKKwlzdHdzLG1hCSBzMSw0KHJlc19wdHIpCisJYWRkYwkgczIsbG8yLHMyCisJc3R3cyxtYQkgczIsNChyZXNfcHRyKQorCWFkZGMJIHMzLGxvMyxzMworCXN0d3MsbWEJIHMzLDQocmVzX3B0cikKKworQyByZXN0b3JlIGNhbGxlZS1zYXZlcyByZWdpc3RlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJbGR3CS05NiglcjMwKSwlcjMKKwlsZHcJLTkyKCVyMzApLCVyNAorCWxkdwktODgoJXIzMCksJXI1CisJbGR3CS04NCglcjMwKSwlcjYKKwlsZHcJLTgwKCVyMzApLCVyNworCitMREVGKGZld19saW1icykKKwlhZGRpYiw9LG4gNCxzaXplX3BhcmFtLEwocmV0KQorCitMREVGKGxvb3AyKQorCWZsZHdzLG1hIDQoczFfcHRyKSwlZnI0CisJbGR3cwkgMChyZXNfcHRyKSxzMAorCXhtcHl1CSAlZnI0LCVmcjMxUiwlZnI1CisJZnN0ZHMJICVmcjUsLTE2KCVyMzApCisJbGR3cwktMTYoJXIzMCksaGkwCisJbGR3cwktMTIoJXIzMCksbG8wCisJYWRkYwkgbG8wLGN5bGltYixsbzAKKwlhZGRjCSAlcjAsaGkwLGN5bGltYgorCWFkZAkgczAsbG8wLHMwCisJc3R3cyxtYQkgczAsNChyZXNfcHRyKQorCWFkZGliLDw+IC0xLHNpemVfcGFyYW0sTChsb29wMikKKwlub3AKKworTERFRihyZXQpCisJYWRkYwkgJXIwLGN5bGltYixjeWxpbWIKKwlidgkgMCglcjIpCisJbGRvCSAtMTI4KCVyMzApLCVyMzAKK0VQSUxPR1VFKG1wbl9hZGRtdWxfMSkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcGEzMi9ocHBhMV8xL3BhNzEwMC9sc2hpZnQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wYTMyL2hwcGExXzEvcGE3MTAwL2xzaGlmdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY1ZGIyYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcGEzMi9ocHBhMV8xL3BhNzEwMC9sc2hpZnQuYXNtCkBAIC0wLDAgKzEsOTUgQEAKK2RubCAgSFAtUEEgIG1wbl9sc2hpZnQgLS0gU2hpZnQgYSBudW1iZXIgbGVmdC4KK2RubCAgT3B0aW1pemVkIGZvciB0aGUgUEE3MTAwLCB3aGVyZSBpcyBydW5zIGF0IDMuMjUgY3ljbGVzL2xpbWIuCisKK2RubCAgQ29weXJpZ2h0IDE5OTIsIDE5OTQsIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDIElOUFVUIFBBUkFNRVRFUlMKK0MgcmVzX3B0cglyMjYKK0Mgc19wdHIJCXIyNQorQyBzaXplCQlyMjQKK0MgY250CQlyMjMKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9sc2hpZnQpCisJc2gyYWRkCQklcjI0LCVyMjUsJXIyNQorCXNoMmFkZAkJJXIyNCwlcjI2LCVyMjYKKwlsZHdzLG1iCQktNCgwLCVyMjUpLCVyMjIKKwlzdWJpCQkzMiwlcjIzLCVyMQorCW10c2FyCQklcjEKKwlhZGRpYiw9CQktMSwlcjI0LEwoMDAwNCkKKwl2c2hkCQklcjAsJXIyMiwlcjI4CQlDIGNvbXB1dGUgY2Fycnkgb3V0IGxpbWIKKwlsZHdzLG1iCQktNCgwLCVyMjUpLCVyMjkKKwlhZGRpYiw8PQktNSwlcjI0LEwocmVzdCkKKwl2c2hkCQklcjIyLCVyMjksJXIyMAorCitMREVGKGxvb3ApCisJbGR3cyxtYgkJLTQoMCwlcjI1KSwlcjIyCisJc3R3cyxtYgkJJXIyMCwtNCgwLCVyMjYpCisJdnNoZAkJJXIyOSwlcjIyLCVyMjAKKwlsZHdzLG1iCQktNCgwLCVyMjUpLCVyMjkKKwlzdHdzLG1iCQklcjIwLC00KDAsJXIyNikKKwl2c2hkCQklcjIyLCVyMjksJXIyMAorCWxkd3MsbWIJCS00KDAsJXIyNSksJXIyMgorCXN0d3MsbWIJCSVyMjAsLTQoMCwlcjI2KQorCXZzaGQJCSVyMjksJXIyMiwlcjIwCisJbGR3cyxtYgkJLTQoMCwlcjI1KSwlcjI5CisJc3R3cyxtYgkJJXIyMCwtNCgwLCVyMjYpCisJYWRkaWIsPgkJLTQsJXIyNCxMKGxvb3ApCisJdnNoZAkJJXIyMiwlcjI5LCVyMjAKKworTERFRihyZXN0KQorCWFkZGliLD0JCTQsJXIyNCxMKGVuZDEpCisJbm9wCisKK0xERUYoZWxvb3ApCisJbGR3cyxtYgkJLTQoMCwlcjI1KSwlcjIyCisJc3R3cyxtYgkJJXIyMCwtNCgwLCVyMjYpCisJYWRkaWIsPD0JLTEsJXIyNCxMKGVuZDIpCisJdnNoZAkJJXIyOSwlcjIyLCVyMjAKKwlsZHdzLG1iCQktNCgwLCVyMjUpLCVyMjkKKwlzdHdzLG1iCQklcjIwLC00KDAsJXIyNikKKwlhZGRpYiw+CQktMSwlcjI0LEwoZWxvb3ApCisJdnNoZAkJJXIyMiwlcjI5LCVyMjAKKworTERFRihlbmQxKQorCXN0d3MsbWIJCSVyMjAsLTQoMCwlcjI2KQorCXZzaGQJCSVyMjksJXIwLCVyMjAKKwlidgkJMCglcjIpCisJc3R3CQklcjIwLC00KDAsJXIyNikKKworTERFRihlbmQyKQorCXN0d3MsbWIJCSVyMjAsLTQoMCwlcjI2KQorCitMREVGKDAwMDQpCisJdnNoZAkJJXIyMiwlcjAsJXIyMAorCWJ2CQkwKCVyMikKKwlzdHcJCSVyMjAsLTQoMCwlcjI2KQorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wYTMyL2hwcGExXzEvcGE3MTAwL3JzaGlmdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3BhMzIvaHBwYTFfMS9wYTcxMDAvcnNoaWZ0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzg5NmZjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wYTMyL2hwcGExXzEvcGE3MTAwL3JzaGlmdC5hc20KQEAgLTAsMCArMSw5MiBAQAorZG5sICBIUC1QQSAgbXBuX3JzaGlmdCAtLSBTaGlmdCBhIG51bWJlciByaWdodC4KK2RubCAgT3B0aW1pemVkIGZvciB0aGUgUEE3MTAwLCB3aGVyZSBpcyBydW5zIGF0IDMuMjUgY3ljbGVzL2xpbWIuCisKK2RubCAgQ29weXJpZ2h0IDE5OTIsIDE5OTQsIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDIElOUFVUIFBBUkFNRVRFUlMKK0MgcmVzX3B0cglyMjYKK0Mgc19wdHIJCXIyNQorQyBzaXplCQlyMjQKK0MgY250CQlyMjMKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9yc2hpZnQpCisJbGR3cyxtYQkJNCgwLCVyMjUpLCVyMjIKKwltdHNhcgkJJXIyMworCWFkZGliLD0JCS0xLCVyMjQsTCgwMDA0KQorCXZzaGQJCSVyMjIsJXIwLCVyMjgJCUMgY29tcHV0ZSBjYXJyeSBvdXQgbGltYgorCWxkd3MsbWEJCTQoMCwlcjI1KSwlcjI5CisJYWRkaWIsPD0JLTUsJXIyNCxMKHJlc3QpCisJdnNoZAkJJXIyOSwlcjIyLCVyMjAKKworTERFRihsb29wKQorCWxkd3MsbWEJCTQoMCwlcjI1KSwlcjIyCisJc3R3cyxtYQkJJXIyMCw0KDAsJXIyNikKKwl2c2hkCQklcjIyLCVyMjksJXIyMAorCWxkd3MsbWEJCTQoMCwlcjI1KSwlcjI5CisJc3R3cyxtYQkJJXIyMCw0KDAsJXIyNikKKwl2c2hkCQklcjI5LCVyMjIsJXIyMAorCWxkd3MsbWEJCTQoMCwlcjI1KSwlcjIyCisJc3R3cyxtYQkJJXIyMCw0KDAsJXIyNikKKwl2c2hkCQklcjIyLCVyMjksJXIyMAorCWxkd3MsbWEJCTQoMCwlcjI1KSwlcjI5CisJc3R3cyxtYQkJJXIyMCw0KDAsJXIyNikKKwlhZGRpYiw+CQktNCwlcjI0LEwobG9vcCkKKwl2c2hkCQklcjI5LCVyMjIsJXIyMAorCitMREVGKHJlc3QpCisJYWRkaWIsPQkJNCwlcjI0LEwoZW5kMSkKKwlub3AKKworTERFRihlbG9vcCkKKwlsZHdzLG1hCQk0KDAsJXIyNSksJXIyMgorCXN0d3MsbWEJCSVyMjAsNCgwLCVyMjYpCisJYWRkaWIsPD0JLTEsJXIyNCxMKGVuZDIpCisJdnNoZAkJJXIyMiwlcjI5LCVyMjAKKwlsZHdzLG1hCQk0KDAsJXIyNSksJXIyOQorCXN0d3MsbWEJCSVyMjAsNCgwLCVyMjYpCisJYWRkaWIsPgkJLTEsJXIyNCxMKGVsb29wKQorCXZzaGQJCSVyMjksJXIyMiwlcjIwCisKK0xERUYoZW5kMSkKKwlzdHdzLG1hCQklcjIwLDQoMCwlcjI2KQorCXZzaGQJCSVyMCwlcjI5LCVyMjAKKwlidgkJMCglcjIpCisJc3R3CQklcjIwLDAoMCwlcjI2KQorCitMREVGKGVuZDIpCisJc3R3cyxtYQkJJXIyMCw0KDAsJXIyNikKKworTERFRigwMDA0KQorCXZzaGQJCSVyMCwlcjIyLCVyMjAKKwlidgkJMCglcjIpCisJc3R3CQklcjIwLDAoMCwlcjI2KQorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wYTMyL2hwcGExXzEvcGE3MTAwL3N1Yl9uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcGEzMi9ocHBhMV8xL3BhNzEwMC9zdWJfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYzZjZlOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcGEzMi9ocHBhMV8xL3BhNzEwMC9zdWJfbi5hc20KQEAgLTAsMCArMSw4NCBAQAorZG5sICBIUC1QQSBtcG5fc3ViX24gLS0gU3VidHJhY3QgdHdvIGxpbWIgdmVjdG9ycyBvZiB0aGUgc2FtZSBsZW5ndGggPiAwIGFuZAorZG5sICBzdG9yZSBkaWZmZXJlbmNlIGluIGEgdGhpcmQgbGltYiB2ZWN0b3IuICBPcHRpbWl6ZWQgZm9yIHRoZSBQQTcxMDAsIHdoZXJlCitkbmwgIGlzIHJ1bnMgYXQgNC4yNSBjeWNsZXMvbGltYi4KKworZG5sICBDb3B5cmlnaHQgMTk5MiwgMTk5NCwgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyByZXNfcHRyCXIyNgorQyBzMV9wdHIJcjI1CitDIHMyX3B0cglyMjQKK0Mgc2l6ZQkJcjIzCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fc3ViX24pCisJbGR3cyxtYQkJNCgwLCVyMjUpLCVyMjAKKwlsZHdzLG1hCQk0KDAsJXIyNCksJXIxOQorCisJYWRkaWIsPD0JLTUsJXIyMyxMKHJlc3QpCisJIHN1YgkJJXIyMCwlcjE5LCVyMjgJQyBzdWJ0cmFjdCBmaXJzdCBsaW1icyBpZ25vcmluZyBjeQorCitMREVGKGxvb3ApCisJbGR3cyxtYQkJNCgwLCVyMjUpLCVyMjAKKwlsZHdzLG1hCQk0KDAsJXIyNCksJXIxOQorCXN0d3MsbWEJCSVyMjgsNCgwLCVyMjYpCisJc3ViYgkJJXIyMCwlcjE5LCVyMjgKKwlsZHdzLG1hCQk0KDAsJXIyNSksJXIyMAorCWxkd3MsbWEJCTQoMCwlcjI0KSwlcjE5CisJc3R3cyxtYQkJJXIyOCw0KDAsJXIyNikKKwlzdWJiCQklcjIwLCVyMTksJXIyOAorCWxkd3MsbWEJCTQoMCwlcjI1KSwlcjIwCisJbGR3cyxtYQkJNCgwLCVyMjQpLCVyMTkKKwlzdHdzLG1hCQklcjI4LDQoMCwlcjI2KQorCXN1YmIJCSVyMjAsJXIxOSwlcjI4CisJbGR3cyxtYQkJNCgwLCVyMjUpLCVyMjAKKwlsZHdzLG1hCQk0KDAsJXIyNCksJXIxOQorCXN0d3MsbWEJCSVyMjgsNCgwLCVyMjYpCisJYWRkaWIsPgkJLTQsJXIyMyxMKGxvb3ApCisJc3ViYgkJJXIyMCwlcjE5LCVyMjgKKworTERFRihyZXN0KQorCWFkZGliLD0JCTQsJXIyMyxMKGVuZCkKKwlub3AKKworTERFRihlbG9vcCkKKwlsZHdzLG1hCQk0KDAsJXIyNSksJXIyMAorCWxkd3MsbWEJCTQoMCwlcjI0KSwlcjE5CisJc3R3cyxtYQkJJXIyOCw0KDAsJXIyNikKKwlhZGRpYiw+CQktMSwlcjIzLEwoZWxvb3ApCisJc3ViYgkJJXIyMCwlcjE5LCVyMjgKKworTERFRihlbmQpCisJc3R3cwkJJXIyOCwwKDAsJXIyNikKKwlhZGRjCQklcjAsJXIwLCVyMjgKKwlidgkJMCglcjIpCisJIHN1YmkJCTEsJXIyOCwlcjI4CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3BhMzIvaHBwYTFfMS9wYTcxMDAvc3VibXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wYTMyL2hwcGExXzEvcGE3MTAwL3N1Ym11bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWEwOGNiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wYTMyL2hwcGExXzEvcGE3MTAwL3N1Ym11bF8xLmFzbQpAQCAtMCwwICsxLDIwNyBAQAorZG5sICBIUC1QQSA3MTAwLzcyMDAgbXBuX3N1Ym11bF8xIC0tIE11bHRpcGx5IGEgbGltYiB2ZWN0b3Igd2l0aCBhIGxpbWIgYW5kCitkbmwgIHN1YnRyYWN0IHRoZSByZXN1bHQgZnJvbSBhIHNlY29uZCBsaW1iIHZlY3Rvci4KKworZG5sICBDb3B5cmlnaHQgMTk5NSwgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGByZXNfcHRyJyxgJXIyNicpCitkZWZpbmUoYHMxX3B0cicsYCVyMjUnKQorZGVmaW5lKGBzaXplX3BhcmFtJyxgJXIyNCcpCitkZWZpbmUoYHMyX2xpbWInLGAlcjIzJykKKworZGVmaW5lKGBjeWxpbWInLGAlcjI4JykKK2RlZmluZShgczAnLGAlcjE5JykKK2RlZmluZShgczEnLGAlcjIwJykKK2RlZmluZShgczInLGAlcjMnKQorZGVmaW5lKGBzMycsYCVyNCcpCitkZWZpbmUoYGxvMCcsYCVyMjEnKQorZGVmaW5lKGBsbzEnLGAlcjUnKQorZGVmaW5lKGBsbzInLGAlcjYnKQorZGVmaW5lKGBsbzMnLGAlcjcnKQorZGVmaW5lKGBoaTAnLGAlcjIyJykKK2RlZmluZShgaGkxJyxgJXIyMycpCQkJCUMgc2FmZSB0byByZXVzZQorZGVmaW5lKGBoaTInLGAlcjI5JykKK2RlZmluZShgaGkzJyxgJXIxJykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9zdWJtdWxfMSkKK0MJLmNhbGxpbmZvCWZyYW1lPTEyOCxub19jYWxscworCisJbGRvCTEyOCglcjMwKSwlcjMwCisJc3R3cwlzMl9saW1iLC0xNiglcjMwKQorCWFkZAkgJXIwLCVyMCxjeWxpbWIJCQlDIGNsZWFyIGN5IGFuZCBjeWxpbWIKKwlhZGRpYiw8CS00LHNpemVfcGFyYW0sTChmZXdfbGltYnMpCisJZmxkd3MJLTE2KCVyMzApLCVmcjMxUgorCisJbGRvCS0xMTIoJXIzMCksJXIzMQorCXN0dwklcjMsLTk2KCVyMzApCisJc3R3CSVyNCwtOTIoJXIzMCkKKwlzdHcJJXI1LC04OCglcjMwKQorCXN0dwklcjYsLTg0KCVyMzApCisJc3R3CSVyNywtODAoJXIzMCkKKworCWJiLD49LG4JIHMxX3B0ciwyOSxMKDApCisKKwlmbGR3cyxtYSA0KHMxX3B0ciksJWZyNAorCWxkd3MJIDAocmVzX3B0ciksczAKKwl4bXB5dQkgJWZyNCwlZnIzMVIsJWZyNQorCWZzdGRzCSAlZnI1LC0xNiglcjMxKQorCWxkd3MJLTE2KCVyMzEpLGN5bGltYgorCWxkd3MJLTEyKCVyMzEpLGxvMAorCXN1YgkgczAsbG8wLHMwCisJYWRkCSBzMCxsbzAsJXIwCQkJQyBpbnZlcnQgY3kKKwlhZGRpYiw8IC0xLHNpemVfcGFyYW0sTChmZXdfbGltYnMpCisJc3R3cyxtYQkgczAsNChyZXNfcHRyKQorCitDIHN0YXJ0IHNvZnR3YXJlIHBpcGVsaW5lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xERUYoMCkKKwlmbGRkcyxtYSA4KHMxX3B0ciksJWZyNAorCWZsZGRzLG1hIDgoczFfcHRyKSwlZnI4CisKKwl4bXB5dQkgJWZyNEwsJWZyMzFSLCVmcjUKKwl4bXB5dQkgJWZyNFIsJWZyMzFSLCVmcjYKKwl4bXB5dQkgJWZyOEwsJWZyMzFSLCVmcjkKKwl4bXB5dQkgJWZyOFIsJWZyMzFSLCVmcjEwCisKKwlmc3RkcwkgJWZyNSwtMTYoJXIzMSkKKwlmc3RkcwkgJWZyNiwtOCglcjMxKQorCWZzdGRzCSAlZnI5LDAoJXIzMSkKKwlmc3RkcwkgJWZyMTAsOCglcjMxKQorCisJbGR3cyAgIC0xNiglcjMxKSxoaTAKKwlsZHdzICAgLTEyKCVyMzEpLGxvMAorCWxkd3MJLTgoJXIzMSksaGkxCisJbGR3cwktNCglcjMxKSxsbzEKKwlsZHdzCSAwKCVyMzEpLGhpMgorCWxkd3MJIDQoJXIzMSksbG8yCisJbGR3cwkgOCglcjMxKSxoaTMKKwlsZHdzCTEyKCVyMzEpLGxvMworCisJYWRkYwkgbG8wLGN5bGltYixsbzAKKwlhZGRjCSBsbzEsaGkwLGxvMQorCWFkZGMJIGxvMixoaTEsbG8yCisJYWRkYwkgbG8zLGhpMixsbzMKKworCWFkZGliLDwJIC00LHNpemVfcGFyYW0sTChlbmQpCisJYWRkYwkgJXIwLGhpMyxjeWxpbWIJCQlDIHByb3BhZ2F0ZSBjYXJyeSBpbnRvIGN5bGltYgorQyBtYWluIGxvb3AgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMREVGKGxvb3ApCisJZmxkZHMsbWEgOChzMV9wdHIpLCVmcjQKKwlmbGRkcyxtYSA4KHMxX3B0ciksJWZyOAorCisJbGR3cwkgMChyZXNfcHRyKSxzMAorCXhtcHl1CSAlZnI0TCwlZnIzMVIsJWZyNQorCWxkd3MJIDQocmVzX3B0ciksczEKKwl4bXB5dQkgJWZyNFIsJWZyMzFSLCVmcjYKKwlsZHdzCSA4KHJlc19wdHIpLHMyCisJeG1weXUJICVmcjhMLCVmcjMxUiwlZnI5CisJbGR3cwkxMihyZXNfcHRyKSxzMworCXhtcHl1CSAlZnI4UiwlZnIzMVIsJWZyMTAKKworCWZzdGRzCSAlZnI1LC0xNiglcjMxKQorCXN1YgkgczAsbG8wLHMwCisJZnN0ZHMJICVmcjYsLTgoJXIzMSkKKwlzdWJiCSBzMSxsbzEsczEKKwlmc3RkcwkgJWZyOSwwKCVyMzEpCisJc3ViYgkgczIsbG8yLHMyCisJZnN0ZHMJICVmcjEwLDgoJXIzMSkKKwlzdWJiCSBzMyxsbzMsczMKKwlzdWJiCSAlcjAsJXIwLGxvMAkJCUMgdGhlc2UgdHdvIGluc25zIC4uLgorCWFkZAkgbG8wLGxvMCwlcjAJCQlDIC4uLiBqdXN0IGludmVydCBjeQorCisJbGR3cyAgIC0xNiglcjMxKSxoaTAKKwlsZHdzICAgLTEyKCVyMzEpLGxvMAorCWxkd3MJLTgoJXIzMSksaGkxCisJbGR3cwktNCglcjMxKSxsbzEKKwlsZHdzCSAwKCVyMzEpLGhpMgorCWxkd3MJIDQoJXIzMSksbG8yCisJbGR3cwkgOCglcjMxKSxoaTMKKwlsZHdzCTEyKCVyMzEpLGxvMworCisJYWRkYwkgbG8wLGN5bGltYixsbzAKKwlzdHdzLG1hCSBzMCw0KHJlc19wdHIpCisJYWRkYwkgbG8xLGhpMCxsbzEKKwlzdHdzLG1hCSBzMSw0KHJlc19wdHIpCisJYWRkYwkgbG8yLGhpMSxsbzIKKwlzdHdzLG1hCSBzMiw0KHJlc19wdHIpCisJYWRkYwkgbG8zLGhpMixsbzMKKwlzdHdzLG1hCSBzMyw0KHJlc19wdHIpCisKKwlhZGRpYiw+PSAtNCxzaXplX3BhcmFtLEwobG9vcCkKKwlhZGRjCSAlcjAsaGkzLGN5bGltYgkJCUMgcHJvcGFnYXRlIGNhcnJ5IGludG8gY3lsaW1iCitDIGZpbmlzaCBzb2Z0d2FyZSBwaXBlbGluZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xERUYoZW5kKQorCWxkd3MJIDAocmVzX3B0ciksczAKKwlsZHdzCSA0KHJlc19wdHIpLHMxCisJbGR3cwkgOChyZXNfcHRyKSxzMgorCWxkd3MJMTIocmVzX3B0ciksczMKKworCXN1YgkgczAsbG8wLHMwCisJc3R3cyxtYQkgczAsNChyZXNfcHRyKQorCXN1YmIJIHMxLGxvMSxzMQorCXN0d3MsbWEJIHMxLDQocmVzX3B0cikKKwlzdWJiCSBzMixsbzIsczIKKwlzdHdzLG1hCSBzMiw0KHJlc19wdHIpCisJc3ViYgkgczMsbG8zLHMzCisJc3R3cyxtYQkgczMsNChyZXNfcHRyKQorCXN1YmIJICVyMCwlcjAsbG8wCQkJQyB0aGVzZSB0d28gaW5zbnMgLi4uCisJYWRkCSBsbzAsbG8wLCVyMAkJCUMgLi4uIGludmVydCBjeQorCitDIHJlc3RvcmUgY2FsbGVlLXNhdmVzIHJlZ2lzdGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlsZHcJLTk2KCVyMzApLCVyMworCWxkdwktOTIoJXIzMCksJXI0CisJbGR3CS04OCglcjMwKSwlcjUKKwlsZHcJLTg0KCVyMzApLCVyNgorCWxkdwktODAoJXIzMCksJXI3CisKK0xERUYoZmV3X2xpbWJzKQorCWFkZGliLD0sbiA0LHNpemVfcGFyYW0sTChyZXQpCisKK0xERUYobG9vcDIpCisJZmxkd3MsbWEgNChzMV9wdHIpLCVmcjQKKwlsZHdzCSAwKHJlc19wdHIpLHMwCisJeG1weXUJICVmcjQsJWZyMzFSLCVmcjUKKwlmc3RkcwkgJWZyNSwtMTYoJXIzMCkKKwlsZHdzCS0xNiglcjMwKSxoaTAKKwlsZHdzCS0xMiglcjMwKSxsbzAKKwlhZGRjCSBsbzAsY3lsaW1iLGxvMAorCWFkZGMJICVyMCxoaTAsY3lsaW1iCisJc3ViCSBzMCxsbzAsczAKKwlhZGQJIHMwLGxvMCwlcjAJCQlDIGludmVydCBjeQorCXN0d3MsbWEJIHMwLDQocmVzX3B0cikKKwlhZGRpYiw8PiAtMSxzaXplX3BhcmFtLEwobG9vcDIpCisJbm9wCisKK0xERUYocmV0KQorCWFkZGMJICVyMCxjeWxpbWIsY3lsaW1iCisJYnYJIDAoJXIyKQorCWxkbwkgLTEyOCglcjMwKSwlcjMwCitFUElMT0dVRShtcG5fc3VibXVsXzEpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3BhMzIvaHBwYTFfMS9zcXJfZGlhZ29uYWwuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wYTMyL2hwcGExXzEvc3FyX2RpYWdvbmFsLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzdhMThlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wYTMyL2hwcGExXzEvc3FyX2RpYWdvbmFsLmFzbQpAQCAtMCwwICsxLDYwIEBACitkbmwgIEhQLVBBIDEuMSAzMi1iaXQgbXBuX3Nxcl9kaWFnb25hbC4KKworZG5sICBDb3B5cmlnaHQgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDIFRoaXMgY29kZSBydW5zIGF0IDYgY3ljbGVzL2xpbWIgb24gdGhlIFBBNzEwMCBhbmQgMi41IGN5Y2xlcy9saW1iIG9uIFBBOHgwMC4KK0MgMi13YXkgdW5yb2xsaW5nIHdvdWxkbid0IGhlbHAgdGhlIFBBNzEwMDsgaXQgY291bGQgaG93ZXZlciBicmluZyB0aW1lcyBkb3duCitDIHRvIDIuMCBjeWNsZXMvbGltYiBmb3IgdGhlIFBBOHgwMC4KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJyxgJXIyNicpCitkZWZpbmUoYHVwJyxgJXIyNScpCitkZWZpbmUoYG4nLGAlcjI0JykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9zcXJfZGlhZ29uYWwpCisJbGRvCQk0KHJwKSxycAorCWZsZHdzLG1hCTQodXApLCVmcjRyCisJYWRkaWIsPQkJLTEsbixMKGV4aXQpCisJeG1weXUJCSVmcjRyLCVmcjRyLCVmcjUKKworTERFRihsb29wKQorCWZsZHdzLG1hCTQodXApLCVmcjRyCisJZnN0d3MJCSVmcjVyLC00KHJwKQorCWZzdHdzLG1hCSVmcjVsLDgocnApCisJYWRkaWIsPD4JLTEsbixMKGxvb3ApCisJeG1weXUJCSVmcjRyLCVmcjRyLCVmcjUKKworTERFRihleGl0KQorCWZzdHdzCQklZnI1ciwtNChycCkKKwlidgkJMCglcjIpCisJZnN0d3MJCSVmcjVsLDAocnApCitFUElMT0dVRShtcG5fc3FyX2RpYWdvbmFsKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wYTMyL2hwcGExXzEvc3VibXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wYTMyL2hwcGExXzEvc3VibXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YjExZDIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3BhMzIvaHBwYTFfMS9zdWJtdWxfMS5hc20KQEAgLTAsMCArMSwxMTUgQEAKK2RubCAgSFAtUEEgMS4xIG1wbl9zdWJtdWxfMSAtLSBNdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYSBsaW1iIGFuZCBzdWJ0cmFjdAorZG5sICB0aGUgcmVzdWx0IGZyb20gYSBzZWNvbmQgbGltYiB2ZWN0b3IuCisKK2RubCAgQ29weXJpZ2h0IDE5OTItMTk5NCwgMjAwMC0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyByZXNfcHRyCXIyNgorQyBzMV9wdHIJcjI1CitDIHNpemUJCXIyNAorQyBzMl9saW1iCXIyMworCitDIFRoaXMgcnVucyBhdCAxMiBjeWNsZXMvbGltYiBvbiBhIFBBNzAwMC4gIFdpdGggdGhlIHVzZWQgaW5zdHJ1Y3Rpb25zLCBpdCBjYW4KK0Mgbm90IGJlY29tZSBmYXN0ZXIgZHVlIHRvIGRhdGEgY2FjaGUgY29udGVudGlvbiBhZnRlciBhIHN0b3JlLiAgT24gdGhlIFBBNzEwMAorQyBpdCBydW5zIGF0IDExIGN5Y2xlcy9saW1iLgorCitDIFRoZXJlIGFyZSBzb21lIGlkZWFzIGRlc2NyaWJlZCBpbiBtdWxfMS5hc20gdGhhdCBhcHBsaWVzIHRvIHRoaXMgY29kZSB0b28uCisKK0MgSXQgc2VlbXMgcG9zc2libGUgdG8gbWFrZSB0aGlzIHJ1biBhcyBmYXN0IGFzIG1wbl9hZGRtdWxfMSwgaWYgd2UgdXNlCitDCXN1Yiw+Pj0JJXIyOSwlcjE5LCVyMjIKK0MJYWRkaQkxLCVyMjgsJXIyOAorQyBidXQgdGhhdCByZXF1aXJlcyByZXdvcmtpbmcgdGhlIGhhaXJ5IHNvZnR3YXJlIHBpcGVsaW5lLi4uCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fc3VibXVsXzEpCitDCS5jYWxsaW5mbwlmcmFtZT02NCxub19jYWxscworCisJbGRvCQk2NCglcjMwKSwlcjMwCisJZmxkd3MsbWEJNCglcjI1KSwlZnI1CisJc3R3CQklcjIzLC0xNiglcjMwKQkJQyBtb3ZlIHMyX2xpbWIgLi4uCisJYWRkaWIsPQkJLTEsJXIyNCxMKGp1c3Rfb25lX2xpbWIpCisJIGZsZHdzCQktMTYoJXIzMCksJWZyNAkJQyAuLi4gaW50byBmcjQKKwlhZGQJCSVyMCwlcjAsJXIwCQlDIGNsZWFyIGNhcnJ5CisJeG1weXUJCSVmcjQsJWZyNSwlZnI2CisJZmxkd3MsbWEJNCglcjI1KSwlZnI3CisJZnN0ZHMJCSVmcjYsLTE2KCVyMzApCisJeG1weXUJCSVmcjQsJWZyNywlZnI4CisJbGR3CQktMTIoJXIzMCksJXIxOQkJQyBsZWFzdCBzaWduaWZpY2FudCBsaW1iIGluIHByb2R1Y3QKKwlsZHcJCS0xNiglcjMwKSwlcjI4CisKKwlmc3RkcwkJJWZyOCwtMTYoJXIzMCkKKwlhZGRpYiw9CQktMSwlcjI0LEwoZW5kKQorCSBsZHcJCS0xMiglcjMwKSwlcjEKKworQyBNYWluIGxvb3AKK0xERUYobG9vcCkKKwlsZHdzCQkwKCVyMjYpLCVyMjkKKwlmbGR3cyxtYQk0KCVyMjUpLCVmcjUKKwlzdWIJCSVyMjksJXIxOSwlcjIyCisJYWRkCQklcjIyLCVyMTksJXIwCisJc3R3cyxtYQkJJXIyMiw0KCVyMjYpCisJYWRkYwkJJXIyOCwlcjEsJXIxOQorCXhtcHl1CQklZnI0LCVmcjUsJWZyNgorCWxkdwkJLTE2KCVyMzApLCVyMjgKKwlmc3RkcwkJJWZyNiwtMTYoJXIzMCkKKwlhZGRjCQklcjAsJXIyOCwlcjI4CisJYWRkaWIsPD4JLTEsJXIyNCxMKGxvb3ApCisJIGxkdwkJLTEyKCVyMzApLCVyMQorCitMREVGKGVuZCkKKwlsZHcJCTAoJXIyNiksJXIyOQorCXN1YgkJJXIyOSwlcjE5LCVyMjIKKwlhZGQJCSVyMjIsJXIxOSwlcjAKKwlzdHdzLG1hCQklcjIyLDQoJXIyNikKKwlhZGRjCQklcjI4LCVyMSwlcjE5CisJbGR3CQktMTYoJXIzMCksJXIyOAorCWxkd3MJCTAoJXIyNiksJXIyOQorCWFkZGMJCSVyMCwlcjI4LCVyMjgKKwlzdWIJCSVyMjksJXIxOSwlcjIyCisJYWRkCQklcjIyLCVyMTksJXIwCisJc3R3cyxtYQkJJXIyMiw0KCVyMjYpCisJYWRkYwkJJXIwLCVyMjgsJXIyOAorCWJ2CQkwKCVyMikKKwkgbGRvCQktNjQoJXIzMCksJXIzMAorCitMREVGKGp1c3Rfb25lX2xpbWIpCisJeG1weXUJCSVmcjQsJWZyNSwlZnI2CisJbGR3CQkwKCVyMjYpLCVyMjkKKwlmc3RkcwkJJWZyNiwtMTYoJXIzMCkKKwlsZHcJCS0xMiglcjMwKSwlcjEKKwlsZHcJCS0xNiglcjMwKSwlcjI4CisJc3ViCQklcjI5LCVyMSwlcjIyCisJYWRkCQklcjIyLCVyMSwlcjAKKwlzdHcJCSVyMjIsMCglcjI2KQorCWFkZGMJCSVyMCwlcjI4LCVyMjgKKwlidgkJMCglcjIpCisJIGxkbwkJLTY0KCVyMzApLCVyMzAKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcGEzMi9ocHBhMV8xL3VkaXYuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wYTMyL2hwcGExXzEvdWRpdi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI2ZWNkMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcGEzMi9ocHBhMV8xL3VkaXYuYXNtCkBAIC0wLDAgKzEsMTAyIEBACitkbmwgIEhQLVBBICBfX3VkaXZfcXJubmQgZGl2aXNpb24gc3VwcG9ydCwgdXNlZCBmcm9tIGxvbmdsb25nLmguCitkbmwgIFRoaXMgdmVyc2lvbiBydW5zIGZhc3Qgb24gUEEgNzAwMCBhbmQgbGF0ZXIuCisKK2RubCAgQ29weXJpZ2h0IDE5OTMsIDE5OTQsIDIwMDAsIDIwMDEsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBJTlBVVCBQQVJBTUVURVJTCitDIHJlbV9wdHIJZ3IyNgorQyBuMQkJZ3IyNQorQyBuMAkJZ3IyNAorQyBkCQlncjIzCisKK0MgVGhpcyBmaWxlIGhhcyBjYXVzZWQgYSBsb3Qgb2YgdHJvdWJsZSwgc2luY2UgaXQgZGVtYW5kcyBQSUMgcmVmZXJlbmNlIHRvCitDIHN0YXRpYyBkYXRhLCB3aGljaCB0cmlnZ2VycyBidWdzIGluIGdhcyAoYXQgbGVhc3QgdmVyc2lvbiAyLjcgdGhyb3VnaAorQyAyLjExLjIpLiAgV2hlbiB0aGUgYnVnIGlzIHRyaWdnZXJlZCwgbWFueSBib2d1cyByZWxvY3MgYXJlIGdlbmVyYXRlZC4gIFRoZQorQyBjdXJyZW50IHNvbHV0aW9uIGlzIHRvIHN0dWZmIGRhdGEgcmlnaHQgaW50byB0aGUgY29kZSwgYW5kIHJlZmVyIGl0IHVzaW5nCitDIGFic29sdXRlIG9mZnNldHMuICBGcmFnaWxlIHRvIGJlIHN1cmUsIGJ1dCBub3RoaW5nIGVsc2Ugc2VlbXMgdG8gd29yay4KKworQVNNX1NUQVJUKCkKK2lmZGVmKGBQSUMnLGAnLAorYAlST0RBVEEKKwlJTlQ2NCgwMDAwLCAweDQzZjAwMDAwLCAweDApCUMgMl42NAorJykKKworUFJPTE9HVUUobXBuX3VkaXZfcXJubmQpCitDCS5jYWxsaW5mbwlmcmFtZT02NCxub19jYWxscworCisJbGRvCQk2NCglcjMwKSwlcjMwCisKKwlzdHdzCQklcjI1LC0xNigwLCVyMzApCUMgbl9oaQorCXN0d3MJCSVyMjQsLTEyKDAsJXIzMCkJQyBuX2xvCisKK2lmZGVmKGBQSUMnLAorYAlibAkJLisyMCwlcjMxCisJZGVwCQklcjAsMzEsMiwlcjMxCisJLndvcmQJMHgwCQkJCUMgcGFkZGluZyBmb3IgYWxpZ25tZW50CisJLndvcmQJMHg0M2YwMDAwMCwgMHgwCQkJQyAyXjY0CisJbGRvCQk0KCVyMzEpLCVyMzEnLAorYAlsZGlsCQlgTCclTCgwMDAwKSwlcjMxCisJbGRvCQlSJUwoMDAwMCkoJXIzMSksJXIzMScpCisKKwlmbGRkcwkJLTE2KDAsJXIzMCksJWZyNQorCXN0d3MJCSVyMjMsLTEyKDAsJXIzMCkKKwljb21pYiw8PQkwLCVyMjUsTCgxKQorCWZjbnZ4ZixkYmwsZGJsCSVmcjUsJWZyNQorCWZsZGRzCQkwKDAsJXIzMSksJWZyNAorCWZhZGQsZGJsCSVmcjQsJWZyNSwlZnI1CisKK0xERUYoMSkKKwlmY3B5LHNnbAklZnIwLCVmcjZMCisJZmxkd3MJCS0xMigwLCVyMzApLCVmcjZSCisJZmNudnhmLGRibCxkYmwJJWZyNiwlZnI0CisKKwlmZGl2LGRibAklZnI1LCVmcjQsJWZyNQorCisJZmNudmZ4LGRibCxkYmwJJWZyNSwlZnI0CisJZnN0d3MJCSVmcjRSLC0xNiglcjMwKQorCXhtcHl1CQklZnI0UiwlZnI2UiwlZnI2CisJbGR3cwkJLTE2KCVyMzApLCVyMjgKKwlmc3RkcwkJJWZyNiwtMTYoMCwlcjMwKQorCWxkd3MJCS0xMigwLCVyMzApLCVyMjEKKwlsZHdzCQktMTYoMCwlcjMwKSwlcjIwCisJc3ViCQklcjI0LCVyMjEsJXIyMgorCXN1YmIJCSVyMjUsJXIyMCwlcjIwCisJY29taWIsPQkJMCwlcjIwLEwoMikKKwlsZG8JCS02NCglcjMwKSwlcjMwCisKKwlhZGQJCSVyMjIsJXIyMywlcjIyCisJbGRvCQktMSglcjI4KSwlcjI4CisKK0xERUYoMikKKwlidgkJMCglcjIpCisJc3R3cwkJJXIyMiwwKDAsJXIyNikKKworRVBJTE9HVUUobXBuX3VkaXZfcXJubmQpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3BhMzIvaHBwYTFfMS91bXVsLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcGEzMi9ocHBhMV8xL3VtdWwuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4YjkyM2MKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3BhMzIvaHBwYTFfMS91bXVsLmFzbQpAQCAtMCwwICsxLDQ3IEBACitkbmwgIENvcHlyaWdodCAxOTk5LCAyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fdW11bF9wcG1tKQorQwkuY2FsbGluZm8gZnJhbWU9NjQsbm9fY2FsbHMKKworCWxkbwk2NCglcjMwKSwlcjMwCisJc3R3CSVyMjUsLTE2KDAsJXIzMCkKKwlmbGR3cwktMTYoMCwlcjMwKSwlZnIyMlIKKwlzdHcJJXIyNCwtMTYoMCwlcjMwKQorCWZsZHdzCS0xNigwLCVyMzApLCVmcjIyTAorCXhtcHl1CSVmcjIyUiwlZnIyMkwsJWZyMjIKKwlmc3RkcwklZnIyMiwtMTYoMCwlcjMwKQorCWxkdwktMTYoMCwlcjMwKSwlcjI4CisJbGR3CS0xMigwLCVyMzApLCVyMjkKKwlzdHcJJXIyOSwwKDAsJXIyNikKKwlidgkwKCVyMikKKwlsZG8JLTY0KCVyMzApLCVyMzAKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcGEzMi9ocHBhMl8wL2FkZF9uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcGEzMi9ocHBhMl8wL2FkZF9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDg4MWI4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wYTMyL2hwcGEyXzAvYWRkX24uYXNtCkBAIC0wLDAgKzEsMTA3IEBACitkbmwgIEhQLVBBIDIuMCAzMi1iaXQgbXBuX2FkZF9uIC0tIEFkZCB0d28gbGltYiB2ZWN0b3JzIG9mIHRoZSBzYW1lIGxlbmd0aCA+IDAKK2RubCAgYW5kIHN0b3JlIHN1bSBpbiBhIHRoaXJkIGxpbWIgdmVjdG9yLgorCitkbmwgIENvcHlyaWdodCAxOTk3LCAxOTk4LCAyMDAwLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBJTlBVVCBQQVJBTUVURVJTCitDIHJlc19wdHIJZ3IyNgorQyBzMV9wdHIJZ3IyNQorQyBzMl9wdHIJZ3IyNAorQyBzaXplCQlncjIzCisKK0MgVGhpcyBydW5zIGF0IDIgY3ljbGVzL2xpbWIgb24gUEE4MDAwLgorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2FkZF9uKQorCXN1YgkJJXIwLCVyMjMsJXIyMgorCXpkZXAJCSVyMjIsMzAsMywlcjI4CQlDIHIyOCA9IDIgKiAoLW4gJiA3KQorCXpkZXAJCSVyMjIsMjksMywlcjIyCQlDIHIyMiA9IDQgKiAoLW4gJiA3KQorCXN1YgkJJXIyNSwlcjIyLCVyMjUJCUMgb2Zmc2V0IHMxX3B0cgorCXN1YgkJJXIyNCwlcjIyLCVyMjQJCUMgb2Zmc2V0IHMyX3B0cgorCXN1YgkJJXIyNiwlcjIyLCVyMjYJCUMgb2Zmc2V0IHJlc19wdHIKKwlibHIJCSVyMjgsJXIwCQlDIGJyYW5jaCBpbnRvIGxvb3AKKwlhZGQJCSVyMCwlcjAsJXIwCQlDIHJlc2V0IGNhcnJ5CisKK0xERUYobG9vcCkKKwlsZHcJCTAoJXIyNSksJXIyMAorCWxkdwkJMCglcjI0KSwlcjMxCisJYWRkYwkJJXIyMCwlcjMxLCVyMjAKKwlzdHcJCSVyMjAsMCglcjI2KQorCitMREVGKDcpCisJbGR3CQk0KCVyMjUpLCVyMjEKKwlsZHcJCTQoJXIyNCksJXIxOQorCWFkZGMJCSVyMjEsJXIxOSwlcjIxCisJc3R3CQklcjIxLDQoJXIyNikKKworTERFRig2KQorCWxkdwkJOCglcjI1KSwlcjIwCisJbGR3CQk4KCVyMjQpLCVyMzEKKwlhZGRjCQklcjIwLCVyMzEsJXIyMAorCXN0dwkJJXIyMCw4KCVyMjYpCisKK0xERUYoNSkKKwlsZHcJCTEyKCVyMjUpLCVyMjEKKwlsZHcJCTEyKCVyMjQpLCVyMTkKKwlhZGRjCQklcjIxLCVyMTksJXIyMQorCXN0dwkJJXIyMSwxMiglcjI2KQorCitMREVGKDQpCisJbGR3CQkxNiglcjI1KSwlcjIwCisJbGR3CQkxNiglcjI0KSwlcjMxCisJYWRkYwkJJXIyMCwlcjMxLCVyMjAKKwlzdHcJCSVyMjAsMTYoJXIyNikKKworTERFRigzKQorCWxkdwkJMjAoJXIyNSksJXIyMQorCWxkdwkJMjAoJXIyNCksJXIxOQorCWFkZGMJCSVyMjEsJXIxOSwlcjIxCisJc3R3CQklcjIxLDIwKCVyMjYpCisKK0xERUYoMikKKwlsZHcJCTI0KCVyMjUpLCVyMjAKKwlsZHcJCTI0KCVyMjQpLCVyMzEKKwlhZGRjCQklcjIwLCVyMzEsJXIyMAorCXN0dwkJJXIyMCwyNCglcjI2KQorCitMREVGKDEpCisJbGR3CQkyOCglcjI1KSwlcjIxCisJbGRvCQkzMiglcjI1KSwlcjI1CisJbGR3CQkyOCglcjI0KSwlcjE5CisJYWRkYwkJJXIyMSwlcjE5LCVyMjEKKwlzdHcJCSVyMjEsMjgoJXIyNikKKwlsZG8JCTMyKCVyMjQpLCVyMjQKKwlhZGRpYiw+CQktOCwlcjIzLEwobG9vcCkKKwlsZG8JCTMyKCVyMjYpLCVyMjYKKworCWJ2CQkoJXIyKQorCWFkZGMJCSVyMCwlcjAsJXIyOAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wYTMyL2hwcGEyXzAvZ21wLW1wYXJhbS5oIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wYTMyL2hwcGEyXzAvZ21wLW1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMTYyNzQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3BhMzIvaHBwYTJfMC9nbXAtbXBhcmFtLmgKQEAgLTAsMCArMSwxNjcgQEAKKy8qIGdtcC1tcGFyYW0uaCAtLSBDb21waWxlci9tYWNoaW5lIHBhcmFtZXRlciBoZWFkZXIgZmlsZS4KKworQ29weXJpZ2h0IDE5OTEsIDE5OTMsIDE5OTQsIDE5OTktMjAwMiwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNkZWZpbmUgR01QX0xJTUJfQklUUyAzMgorI2RlZmluZSBHTVBfTElNQl9CWVRFUyA0CisKKy8qIDU1MiBNSHogUEE4NjAwIChnY2M2MS5mc2ZmcmFuY2Uub3JnKSAqLworCisjZGVmaW5lIERJVlJFTV8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAzCisjZGVmaW5lIERJVlJFTV8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICAzCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIE1PRF8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICA0CisjZGVmaW5lIE1PRF8xTl9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgIDExCisjZGVmaW5lIE1PRF8xVV9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA4CisjZGVmaW5lIE1PRF8xXzFfVE9fTU9EXzFfMl9USFJFU0hPTEQgICAgICAgICAwICAvKiBuZXZlciBtcG5fbW9kXzFfMXAgKi8KKyNkZWZpbmUgTU9EXzFfMl9UT19NT0RfMV80X1RIUkVTSE9MRCAgICAgICAgMjIKKyNkZWZpbmUgUFJFSU5WX01PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgMjgKKyNkZWZpbmUgVVNFX1BSRUlOVl9ESVZSRU1fMSAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgRElWRVhBQ1RfMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBCTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgICAgICAzNgorCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDY1CisjZGVmaW5lIE1VTF9UT09NNDRfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTY2CisjZGVmaW5lIE1VTF9UT09NNkhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjAyCisjZGVmaW5lIE1VTF9UT09NOEhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMzMzCisKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNDNfVEhSRVNIT0xEICAgICAxMDUKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxMzgKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxMDUKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNjNfVEhSRVNIT0xEICAgICAxMDIKKworI2RlZmluZSBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgICAgNworI2RlZmluZSBTUVJfVE9PTTJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA1NQorI2RlZmluZSBTUVJfVE9PTTNfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA5MworI2RlZmluZSBTUVJfVE9PTTRfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDI1MAorI2RlZmluZSBTUVJfVE9PTTZfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDMwNgorI2RlZmluZSBTUVJfVE9PTThfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDUyNworCisjZGVmaW5lIE1VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIFNRUk1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE1CisKKyNkZWZpbmUgTVVMX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICAyNDQgIC8qIGsgPSA1ICovCisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICAyNDQsIDV9LCB7ICAgICAgOCwgNH0sIHsgICAgIDE3LCA1fSwgeyAgICAgMTMsIDZ9LCBcCisgICAgeyAgICAgIDcsIDV9LCB7ICAgICAxNywgNn0sIHsgICAgICA5LCA1fSwgeyAgICAgMTksIDZ9LCBcCisgICAgeyAgICAgMTMsIDd9LCB7ICAgICAgNywgNn0sIHsgICAgIDE3LCA3fSwgeyAgICAgIDksIDZ9LCBcCisgICAgeyAgICAgMTksIDd9LCB7ICAgICAxMSwgNn0sIHsgICAgIDI0LCA3fSwgeyAgICAgMTMsIDh9LCBcCisgICAgeyAgICAgIDcsIDd9LCB7ICAgICAxOSwgOH0sIHsgICAgIDExLCA3fSwgeyAgICAgMjUsIDh9LCBcCisgICAgeyAgICAgMTUsIDd9LCB7ICAgICAzMywgOH0sIHsgICAgIDIzLCA5fSwgeyAgICAgMTUsIDh9LCBcCisgICAgeyAgICAgMzksIDl9LCB7ICAgICAyMywxMH0sIHsgICAgIDE1LCA5fSwgeyAgICAgMzEsIDh9LCBcCisgICAgeyAgICAgNjcsIDl9LCB7ICAgICAzOSwgOH0sIHsgICAgIDc5LCA5fSwgeyAgICAgNDcsMTB9LCBcCisgICAgeyAgICAgMzEsIDl9LCB7ICAgICA3MSwgOH0sIHsgICAgMTQzLCA5fSwgeyAgICAgNzksMTB9LCBcCisgICAgeyAgICAgNDcsMTF9LCB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA5fSwgeyAgICAxMjcsIDh9LCBcCisgICAgeyAgICAyNTUsIDl9LCB7ICAgIDEzNSwgOH0sIHsgICAgMjcxLCA5fSwgeyAgICAxNDMsMTB9LCBcCisgICAgeyAgICAgNzksIDl9LCB7ICAgIDE1OSwgOH0sIHsgICAgMzE5LCA5fSwgeyAgICAxNzUsIDh9LCBcCisgICAgeyAgICAzNTEsMTB9LCB7ICAgICA5NSwgOX0sIHsgICAgMTkxLCA4fSwgeyAgICAzODMsIDl9LCBcCisgICAgeyAgICAyMDcsMTF9LCB7ICAgICA2MywxMH0sIHsgICAgMTI3LCA5fSwgeyAgICAyNTUsIDh9LCBcCisgICAgeyAgICA1MTEsIDl9LCB7ICAgIDI3MSwxMH0sIHsgICAgMTQzLCA5fSwgeyAgICAyODcsIDh9LCBcCisgICAgeyAgICA1NzUsMTB9LCB7ICAgIDE1OSwgOX0sIHsgICAgMzE5LDEwfSwgeyAgICAxNzUsIDl9LCBcCisgICAgeyAgICAzNTEsMTF9LCB7ICAgICA5NSwxMH0sIHsgICAgMTkxLCA5fSwgeyAgICAzODMsMTB9LCBcCisgICAgeyAgICAyMDcsIDl9LCB7ICAgIDQxNSwxMn0sIHsgICAgIDYzLDExfSwgeyAgICAxMjcsMTB9LCBcCisgICAgeyAgICAyNTUsIDl9LCB7ICAgIDUxMSwxMH0sIHsgICAgMjcxLCA5fSwgeyAgICA1NDMsIDh9LCBcCisgICAgeyAgIDEwODcsMTB9LCB7ICAgIDI4NywgOX0sIHsgICAgNTc1LDEwfSwgeyAgICAzMDMsMTF9LCBcCisgICAgeyAgICAxNTksMTB9LCB7ICAgIDM1MSwgOX0sIHsgICAgNzAzLCA4fSwgeyAgIDE0MDcsMTF9LCBcCisgICAgeyAgICAxOTEsMTB9LCB7ICAgIDQxNSwgOX0sIHsgICAgODMxLDExfSwgeyAgICAyMjMsIDl9LCBcCisgICAgeyAgICA4OTUsMTB9LCB7ICAgIDQ3OSwxMn0sIHsgICAgMTI3LDExfSwgeyAgICAyNTUsMTB9LCBcCisgICAgeyAgICA1NDMsIDl9LCB7ICAgMTA4NywxMX0sIHsgICAgMjg3LDEwfSwgeyAgICA2MDcsIDl9LCBcCisgICAgeyAgIDEyMTUsMTF9LCB7ICAgIDM1MSwxMH0sIHsgICAgNzAzLCA5fSwgeyAgIDE0MDcsMTJ9LCBcCisgICAgeyAgICAxOTEsMTF9LCB7ICAgIDQxNSwxMH0sIHsgICAgODMxLDExfSwgeyAgICA0NzksMTN9LCBcCisgICAgeyAgIDgxOTIsMTR9LCB7ICAxNjM4NCwxNX0sIHsgIDMyNzY4LDE2fSB9CisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzX1NJWkUgMTA3CisjZGVmaW5lIE1VTF9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAyMTEyCisKKyNkZWZpbmUgU1FSX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICAyNDAgIC8qIGsgPSA1ICovCisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICAyNDAsIDV9LCB7ICAgICAgOCwgNH0sIHsgICAgIDE3LCA1fSwgeyAgICAgMTksIDZ9LCBcCisgICAgeyAgICAgMTcsIDd9LCB7ICAgICAgOSwgNn0sIHsgICAgIDIwLCA3fSwgeyAgICAgMTEsIDZ9LCBcCisgICAgeyAgICAgMjMsIDd9LCB7ICAgICAxMywgOH0sIHsgICAgICA3LCA3fSwgeyAgICAgMTksIDh9LCBcCisgICAgeyAgICAgMTEsIDd9LCB7ICAgICAyNSwgOH0sIHsgICAgIDE1LCA3fSwgeyAgICAgMzMsIDh9LCBcCisgICAgeyAgICAgMTksIDd9LCB7ICAgICAzOSwgOH0sIHsgICAgIDIzLCA5fSwgeyAgICAgMTUsIDh9LCBcCisgICAgeyAgICAgMzksIDl9LCB7ICAgICAyMywxMH0sIHsgICAgIDE1LCA5fSwgeyAgICAgMzEsIDh9LCBcCisgICAgeyAgICAgNjMsIDl9LCB7ICAgICA0NywxMH0sIHsgICAgIDMxLCA5fSwgeyAgICAgNjMsIDh9LCBcCisgICAgeyAgICAxMjcsIDl9LCB7ICAgICA3MSwgOH0sIHsgICAgMTQzLCA5fSwgeyAgICAgNzksMTB9LCBcCisgICAgeyAgICAgNDcsMTF9LCB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA5fSwgeyAgICAxMjcsIDh9LCBcCisgICAgeyAgICAyNTUsIDd9LCB7ICAgIDUxMSwgOX0sIHsgICAgMTM1LCA4fSwgeyAgICAyNzEsIDl9LCBcCisgICAgeyAgICAxNDMsMTB9LCB7ICAgICA3OSwgOX0sIHsgICAgMTU5LCA4fSwgeyAgICAzMTksIDl9LCBcCisgICAgeyAgICAxNzUsIDh9LCB7ICAgIDM1MSwgN30sIHsgICAgNzAzLDEwfSwgeyAgICAgOTUsIDl9LCBcCisgICAgeyAgICAxOTEsIDh9LCB7ICAgIDM4MywgOX0sIHsgICAgMjA3LDExfSwgeyAgICAgNjMsMTB9LCBcCisgICAgeyAgICAxMjcsIDl9LCB7ICAgIDI1NSwgOH0sIHsgICAgNTExLCA5fSwgeyAgICAyNzEsMTB9LCBcCisgICAgeyAgICAxNDMsIDl9LCB7ICAgIDI4NywgOH0sIHsgICAgNTc1LDEwfSwgeyAgICAxNTksIDl9LCBcCisgICAgeyAgICAzMTksMTB9LCB7ICAgIDE3NSwgOX0sIHsgICAgMzUxLCA4fSwgeyAgICA3MDMsMTF9LCBcCisgICAgeyAgICAgOTUsMTB9LCB7ICAgIDE5MSwgOX0sIHsgICAgMzgzLDEwfSwgeyAgICAyMDcsIDl9LCBcCisgICAgeyAgICA0MTUsMTJ9LCB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgeyAgICAyNTUsIDl9LCBcCisgICAgeyAgICA1MTEsMTB9LCB7ICAgIDI3MSwgOX0sIHsgICAgNTQzLCA4fSwgeyAgIDEwODcsMTB9LCBcCisgICAgeyAgICAyODcsIDl9LCB7ICAgIDU3NSwxMX0sIHsgICAgMTU5LDEwfSwgeyAgICAzMTksIDl9LCBcCisgICAgeyAgICA2MzksMTB9LCB7ICAgIDM1MSwgOX0sIHsgICAgNzAzLCA4fSwgeyAgIDE0MDcsMTF9LCBcCisgICAgeyAgICAxOTEsMTB9LCB7ICAgIDQxNSwgOX0sIHsgICAgODMxLDExfSwgeyAgICAyMjMsIDh9LCBcCisgICAgeyAgIDE3OTEsMTB9LCB7ICAgIDQ3OSwgOX0sIHsgICAgOTU5LDEyfSwgeyAgICAxMjcsMTF9LCBcCisgICAgeyAgICAyNTUsMTB9LCB7ICAgIDU0MywxMX0sIHsgICAgMjg3LDEwfSwgeyAgICA2MDcsMTF9LCBcCisgICAgeyAgICAzMTksMTB9LCB7ICAgIDYzOSwxMX0sIHsgICAgMzUxLDEwfSwgeyAgICA3MDMsIDl9LCBcCisgICAgeyAgIDE0MDcsMTJ9LCB7ICAgIDE5MSwxMX0sIHsgICAgNDE1LDEwfSwgeyAgICA4MzEsMTF9LCBcCisgICAgeyAgICA0NzksMTB9LCB7ICAgIDk1OSwxM30sIHsgICA4MTkyLDE0fSwgeyAgMTYzODQsMTV9LCBcCisgICAgeyAgMzI3NjgsMTZ9IH0KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTNfU0laRSAxMDkKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDE2MDAKKworI2RlZmluZSBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTE2CisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgICAzNTc0CisKKyNkZWZpbmUgRENfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMDAKKyNkZWZpbmUgRENfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAzNDgKKyNkZWZpbmUgRENfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAxMDkKKyNkZWZpbmUgRENfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyNTQKKworI2RlZmluZSBJTlZfTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAzNAorI2RlZmluZSBJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDI3NgorI2RlZmluZSBJTlZfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDI3NgorCisjZGVmaW5lIEJJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgMjc4CisjZGVmaW5lIFJFRENfMV9UT19SRURDX05fVEhSRVNIT0xEICAgICAgICAgIDc4CisKKyNkZWZpbmUgTVVfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA5NzkKKyNkZWZpbmUgTVVfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAyNjMKKyNkZWZpbmUgTVVQSV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAxMDIKKyNkZWZpbmUgTVVfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICA4MDcKKyNkZWZpbmUgTVVfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDExODcKKworI2RlZmluZSBNQVRSSVgyMl9TVFJBU1NFTl9USFJFU0hPTEQgICAgICAgICAxMQorI2RlZmluZSBIR0NEX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgIDEwMAorI2RlZmluZSBHQ0RfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDM3OQorI2RlZmluZSBHQ0RFWFRfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDI0OQorI2RlZmluZSBKQUNPQklfQkFTRV9NRVRIT0QgICAgICAgICAgICAgICAgICAgMgorCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgIDE2CisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjcwCisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgNzgyCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3BhMzIvaHBwYTJfMC9zcXJfZGlhZ29uYWwuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wYTMyL2hwcGEyXzAvc3FyX2RpYWdvbmFsLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTUxMTJmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wYTMyL2hwcGEyXzAvc3FyX2RpYWdvbmFsLmFzbQpAQCAtMCwwICsxLDExMiBAQAorZG5sICBIUC1QQSAzMi1iaXQgbXBuX3Nxcl9kaWFnb25hbCBvcHRpbWl6ZWQgZm9yIHRoZSBQQTh4MDAuCisKK2RubCAgQ29weXJpZ2h0IDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBUaGlzIGNvZGUgcnVucyBhdCA2IGN5Y2xlcy9saW1iIG9uIHRoZSBQQTcxMDAgYW5kIDIgY3ljbGVzL2xpbWIgb24gUEE4eDAwLgorQyBUaGUgMi13YXkgdW5yb2xsaW5nIGlzIGFjdHVhbGx5IG5vdCBoZWxwaW5nIHRoZSBQQTcxMDAuCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsYCVyMjYnKQorZGVmaW5lKGB1cCcsYCVyMjUnKQorZGVmaW5lKGBuJyxgJXIyNCcpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fc3FyX2RpYWdvbmFsKQorCisJZmxkd3MsbWEJNCh1cCksJWZyNHIKKwlhZGRpYiw9CQktMSxuLEwoZW5kMSkKKwlsZG8JCTQocnApLHJwCisKKwlmbGR3cyxtYQk0KHVwKSwlZnI2cgorCWFkZGliLD0JCS0xLG4sTChlbmQyKQorCXhtcHl1CQklZnI0ciwlZnI0ciwlZnI1CisKKwlmbGR3cyxtYQk0KHVwKSwlZnI0cgorCWFkZGliLD0JCS0xLG4sTChlbmQzKQorCXhtcHl1CQklZnI2ciwlZnI2ciwlZnI3CisKKworTERFRihsb29wKQorCWZsZHdzLG1hCTQodXApLCVmcjZyCisJZnN0d3MJCSVmcjVyLC00KHJwKQorCWZzdHdzLG1hCSVmcjVsLDgocnApCisJYWRkaWIsPQkJLTEsbixMKGV4aXRlKQorCXhtcHl1CQklZnI0ciwlZnI0ciwlZnI1CisJZmxkd3MsbWEJNCh1cCksJWZyNHIKKwlmc3R3cwkJJWZyN3IsLTQocnApCisJZnN0d3MsbWEJJWZyN2wsOChycCkKKwlhZGRpYiw8PgktMSxuLEwobG9vcCkKKwl4bXB5dQkJJWZyNnIsJWZyNnIsJWZyNworCitMREVGKGV4aXRvKQorCWZzdHdzCQklZnI1ciwtNChycCkKKwlmc3R3cwkJJWZyNWwsMChycCkKKwl4bXB5dQkJJWZyNHIsJWZyNHIsJWZyNQorCWZzdHdzCQklZnI3ciw0KHJwKQorCWZzdHdzCQklZnI3bCw4KHJwKQorCWZzdHdzLG1iCSVmcjVyLDEyKHJwKQorCWJ2CQkwKCVyMikKKwlmc3R3cwkJJWZyNWwsNChycCkKKworTERFRihleGl0ZSkKKwlmc3R3cwkJJWZyN3IsLTQocnApCisJZnN0d3MJCSVmcjdsLDAocnApCisJeG1weXUJCSVmcjZyLCVmcjZyLCVmcjcKKwlmc3R3cwkJJWZyNXIsNChycCkKKwlmc3R3cwkJJWZyNWwsOChycCkKKwlmc3R3cyxtYgklZnI3ciwxMihycCkKKwlidgkJMCglcjIpCisJZnN0d3MJCSVmcjdsLDQocnApCisKK0xERUYoZW5kMSkKKwl4bXB5dQkJJWZyNHIsJWZyNHIsJWZyNQorCWZzdHdzCQklZnI1ciwtNChycCkKKwlidgkJMCglcjIpCisJZnN0d3MsbWEJJWZyNWwsOChycCkKKworTERFRihlbmQyKQorCXhtcHl1CQklZnI2ciwlZnI2ciwlZnI3CisJZnN0d3MJCSVmcjVyLC00KHJwKQorCWZzdHdzCQklZnI1bCwwKHJwKQorCWZzdHdzCQklZnI3ciw0KHJwKQorCWJ2CQkwKCVyMikKKwlmc3R3cwkJJWZyN2wsOChycCkKKworTERFRihlbmQzKQorCWZzdHdzCQklZnI1ciwtNChycCkKKwlmc3R3cwkJJWZyNWwsMChycCkKKwl4bXB5dQkJJWZyNHIsJWZyNHIsJWZyNQorCWZzdHdzCQklZnI3ciw0KHJwKQorCWZzdHdzCQklZnI3bCw4KHJwKQorCWZzdHdzLG1iCSVmcjVyLDEyKHJwKQorCWJ2CQkwKCVyMikKKwlmc3R3cwkJJWZyNWwsNChycCkKK0VQSUxPR1VFKG1wbl9zcXJfZGlhZ29uYWwpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3BhMzIvaHBwYTJfMC9zdWJfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3BhMzIvaHBwYTJfMC9zdWJfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdiMzE2MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcGEzMi9ocHBhMl8wL3N1Yl9uLmFzbQpAQCAtMCwwICsxLDEwNyBAQAorZG5sICBIUC1QQSAyLjAgMzItYml0IG1wbl9zdWJfbiAtLSBTdWJ0cmFjdCB0d28gbGltYiB2ZWN0b3JzIG9mIHRoZSBzYW1lCitkbmwgIGxlbmd0aCA+IDAgYW5kIHN0b3JlIGRpZmZlcmVuY2UgaW4gYSB0aGlyZCBsaW1iIHZlY3Rvci4KKworZG5sICBDb3B5cmlnaHQgMTk5NywgMTk5OCwgMjAwMC0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyByZXNfcHRyCWdyMjYKK0MgczFfcHRyCWdyMjUKK0MgczJfcHRyCWdyMjQKK0Mgc2l6ZQkJZ3IyMworCitDIFRoaXMgcnVucyBhdCAyIGN5Y2xlcy9saW1iIG9uIFBBODAwMC4KKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9zdWJfbikKKwlzdWIJCSVyMCwlcjIzLCVyMjIKKwl6ZGVwCQklcjIyLDMwLDMsJXIyOAkJQyByMjggPSAyICogKC1uICYgNykKKwl6ZGVwCQklcjIyLDI5LDMsJXIyMgkJQyByMjIgPSA0ICogKC1uICYgNykKKwlzdWIJCSVyMjUsJXIyMiwlcjI1CQlDIG9mZnNldCBzMV9wdHIKKwlzdWIJCSVyMjQsJXIyMiwlcjI0CQlDIG9mZnNldCBzMl9wdHIKKwlibHIJCSVyMjgsJXIwCQlDIGJyYW5jaCBpbnRvIGxvb3AKKwlzdWIJCSVyMjYsJXIyMiwlcjI2CQlDIG9mZnNldCByZXNfcHRyIGFuZCBzZXQgY2FycnkKKworTERFRihsb29wKQorCWxkdwkJMCglcjI1KSwlcjIwCisJbGR3CQkwKCVyMjQpLCVyMzEKKwlzdWJiCQklcjIwLCVyMzEsJXIyMAorCXN0dwkJJXIyMCwwKCVyMjYpCisKK0xERUYoNykKKwlsZHcJCTQoJXIyNSksJXIyMQorCWxkdwkJNCglcjI0KSwlcjE5CisJc3ViYgkJJXIyMSwlcjE5LCVyMjEKKwlzdHcJCSVyMjEsNCglcjI2KQorCitMREVGKDYpCisJbGR3CQk4KCVyMjUpLCVyMjAKKwlsZHcJCTgoJXIyNCksJXIzMQorCXN1YmIJCSVyMjAsJXIzMSwlcjIwCisJc3R3CQklcjIwLDgoJXIyNikKKworTERFRig1KQorCWxkdwkJMTIoJXIyNSksJXIyMQorCWxkdwkJMTIoJXIyNCksJXIxOQorCXN1YmIJCSVyMjEsJXIxOSwlcjIxCisJc3R3CQklcjIxLDEyKCVyMjYpCisKK0xERUYoNCkKKwlsZHcJCTE2KCVyMjUpLCVyMjAKKwlsZHcJCTE2KCVyMjQpLCVyMzEKKwlzdWJiCQklcjIwLCVyMzEsJXIyMAorCXN0dwkJJXIyMCwxNiglcjI2KQorCitMREVGKDMpCisJbGR3CQkyMCglcjI1KSwlcjIxCisJbGR3CQkyMCglcjI0KSwlcjE5CisJc3ViYgkJJXIyMSwlcjE5LCVyMjEKKwlzdHcJCSVyMjEsMjAoJXIyNikKKworTERFRigyKQorCWxkdwkJMjQoJXIyNSksJXIyMAorCWxkdwkJMjQoJXIyNCksJXIzMQorCXN1YmIJCSVyMjAsJXIzMSwlcjIwCisJc3R3CQklcjIwLDI0KCVyMjYpCisKK0xERUYoMSkKKwlsZHcJCTI4KCVyMjUpLCVyMjEKKwlsZG8JCTMyKCVyMjUpLCVyMjUKKwlsZHcJCTI4KCVyMjQpLCVyMTkKKwlzdWJiCQklcjIxLCVyMTksJXIyMQorCXN0dwkJJXIyMSwyOCglcjI2KQorCWxkbwkJMzIoJXIyNCksJXIyNAorCWFkZGliLD4JCS04LCVyMjMsTChsb29wKQorCWxkbwkJMzIoJXIyNiksJXIyNgorCisJYWRkYwkJJXIwLCVyMCwlcjI4CisJYnYJCSglcjIpCisJc3ViaQkJMSwlcjI4LCVyMjgKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcGEzMi9sc2hpZnQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wYTMyL2xzaGlmdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVhNDk3YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcGEzMi9sc2hpZnQuYXNtCkBAIC0wLDAgKzEsNzUgQEAKK2RubCAgSFAtUEEgIG1wbl9sc2hpZnQgLS0gU2hpZnQgYSBudW1iZXIgbGVmdC4KKworZG5sICBDb3B5cmlnaHQgMTk5MiwgMTk5NCwgMjAwMC0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyByZXNfcHRyCWdyMjYKK0Mgc19wdHIJCWdyMjUKK0Mgc2l6ZQkJZ3IyNAorQyBjbnQJCWdyMjMKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9sc2hpZnQpCisJc2gyYWRkCQklcjI0LCVyMjUsJXIyNQorCXNoMmFkZAkJJXIyNCwlcjI2LCVyMjYKKwlsZHdzLG1iCQktNCgwLCVyMjUpLCVyMjIKKwlzdWJpCQkzMiwlcjIzLCVyMQorCW10c2FyCQklcjEKKwlhZGRpYiw9CQktMSwlcjI0LEwoMDAwNCkKKwl2c2hkCQklcjAsJXIyMiwlcjI4CQlDIGNvbXB1dGUgY2Fycnkgb3V0IGxpbWIKKwlsZHdzLG1iCQktNCgwLCVyMjUpLCVyMjkKKwlhZGRpYiw9CQktMSwlcjI0LEwoMDAwMikKKwl2c2hkCQklcjIyLCVyMjksJXIyMAorCitMREVGKGxvb3ApCisJbGR3cyxtYgkJLTQoMCwlcjI1KSwlcjIyCisJc3R3cyxtYgkJJXIyMCwtNCgwLCVyMjYpCisJYWRkaWIsPQkJLTEsJXIyNCxMKDAwMDMpCisJdnNoZAkJJXIyOSwlcjIyLCVyMjAKKwlsZHdzLG1iCQktNCgwLCVyMjUpLCVyMjkKKwlzdHdzLG1iCQklcjIwLC00KDAsJXIyNikKKwlhZGRpYiw8PgktMSwlcjI0LEwobG9vcCkKKwl2c2hkCQklcjIyLCVyMjksJXIyMAorCitMREVGKDAwMDIpCisJc3R3cyxtYgkJJXIyMCwtNCgwLCVyMjYpCisJdnNoZAkJJXIyOSwlcjAsJXIyMAorCWJ2CQkwKCVyMikKKwlzdHcJCSVyMjAsLTQoMCwlcjI2KQorCitMREVGKDAwMDMpCisJc3R3cyxtYgkJJXIyMCwtNCgwLCVyMjYpCisKK0xERUYoMDAwNCkKKwl2c2hkCQklcjIyLCVyMCwlcjIwCisJYnYJCTAoJXIyKQorCXN0dwkJJXIyMCwtNCgwLCVyMjYpCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3BhMzIvcGEtZGVmcy5tNCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcGEzMi9wYS1kZWZzLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNmU3MTUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3BhMzIvcGEtZGVmcy5tNApAQCAtMCwwICsxLDY0IEBACitkaXZlcnQoLTEpCisKK2RubCAgbTQgbWFjcm9zIGZvciBIUFBBIGFzc2VtYmxlci4KKworZG5sICBDb3B5cmlnaHQgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKK2RubCAgaHBwYSBhc3NlbWJsZXIgY29tbWVudHMgYXJlIGludHJvZHVjZWQgd2l0aCAiOyIuCitkbmwKK2RubCAgRm9yIGNvb3BlcmF0aW9uIHdpdGggY3BwLCBhcHBhcmVudGx5IGxpbmVzICIjIDEyMyIgc2V0IHRoZSBsaW5lIG51bWJlciwKK2RubCAgYW5kIG90aGVyIGxpbmVzIHN0YXJ0aW5nIHdpdGggYSAiIyIgYXJlIGlnbm9yZWQuCisKK2NoYW5nZWNvbSg7KQorCisKK2RubCAgQ2FsbGVkOiBQUk9MT0dVRV9jcHUoR1NZTV9QUkVGSVhgJ2ZvbykKK2RubCAgICAgICAgICBFUElMT0dVRV9jcHUoR1NZTV9QUkVGSVhgJ2ZvbykKK2RubAorZG5sICBUaGVzZSBhcmUgdGhlIHNhbWUgYXMgdGhlIGJhc2ljIFBST0xPR1VFX2NwdSBhbmQgRVBJTE9HVUVfY3B1IGluCitkbmwgIG1wbi9hc20tZGVmcy5tNCwgYnV0IHVzaW5nIC5wcm9jIC8gLnByb2NlbmQuICBUaGVzZSBhcmUgc3RhbmRhcmQgYW5kIG9uCitkbmwgIGFuIEVMRiBzeXN0ZW0gdGhleSBkbyB3aGF0IC50eXBlIGFuZCAuc2l6ZSBub3JtYWxseSBkby4KKworZGVmaW5lKGBQUk9MT0dVRV9jcHUnLAorbTRfYXNzZXJ0X251bWFyZ3MoMSkKKwlgLmNvZGUKKwlBTElHTig4KQorCS5leHBvcnQJYCQxJyxlbnRyeQorYCQxJ0xBQkVMX1NVRkZJWCcKKwkucHJvYworCS5jYWxsaW5mbykJZG5sICBUaGlzIGlzIHJlYWxseSBib2d1cywgYnV0IGFsbG93cyB1cyB0byBjb21waWxlCisJCQlkbmwgIGFnYWluIG9uIGhwcGEgbWFjaGluZXMuCisKKworZGVmaW5lKGBFUElMT0dVRV9jcHUnLAorbTRfYXNzZXJ0X251bWFyZ3MoMSkKK2AJLnByb2NlbmQnKQorCitkaXZlcnQKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcGEzMi9yc2hpZnQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wYTMyL3JzaGlmdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVlYWM4MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcGEzMi9yc2hpZnQuYXNtCkBAIC0wLDAgKzEsNzIgQEAKK2RubCAgSFAtUEEgIG1wbl9yc2hpZnQgLS0gU2hpZnQgYSBudW1iZXIgcmlnaHQuCisKK2RubCAgQ29weXJpZ2h0IDE5OTIsIDE5OTQsIDIwMDAtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDIElOUFVUIFBBUkFNRVRFUlMKK0MgcmVzX3B0cglncjI2CitDIHNfcHRyCQlncjI1CitDIHNpemUJCWdyMjQKK0MgY250CQlncjIzCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fcnNoaWZ0KQorCWxkd3MsbWEJCTQoMCwlcjI1KSwlcjIyCisJbXRzYXIJCSVyMjMKKwlhZGRpYiw9CQktMSwlcjI0LEwoMDAwNCkKKwl2c2hkCQklcjIyLCVyMCwlcjI4CQlDIGNvbXB1dGUgY2Fycnkgb3V0IGxpbWIKKwlsZHdzLG1hCQk0KDAsJXIyNSksJXIyOQorCWFkZGliLD0JCS0xLCVyMjQsTCgwMDAyKQorCXZzaGQJCSVyMjksJXIyMiwlcjIwCisKK0xERUYobG9vcCkKKwlsZHdzLG1hCQk0KDAsJXIyNSksJXIyMgorCXN0d3MsbWEJCSVyMjAsNCgwLCVyMjYpCisJYWRkaWIsPQkJLTEsJXIyNCxMKDAwMDMpCisJdnNoZAkJJXIyMiwlcjI5LCVyMjAKKwlsZHdzLG1hCQk0KDAsJXIyNSksJXIyOQorCXN0d3MsbWEJCSVyMjAsNCgwLCVyMjYpCisJYWRkaWIsPD4JLTEsJXIyNCxMKGxvb3ApCisJdnNoZAkJJXIyOSwlcjIyLCVyMjAKKworTERFRigwMDAyKQorCXN0d3MsbWEJCSVyMjAsNCgwLCVyMjYpCisJdnNoZAkJJXIwLCVyMjksJXIyMAorCWJ2CQkwKCVyMikKKwlzdHcJCSVyMjAsMCgwLCVyMjYpCisKK0xERUYoMDAwMykKKwlzdHdzLG1hCQklcjIwLDQoMCwlcjI2KQorCitMREVGKDAwMDQpCisJdnNoZAkJJXIwLCVyMjIsJXIyMAorCWJ2CQkwKCVyMikKKwlzdHcJCSVyMjAsMCgwLCVyMjYpCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3BhMzIvc3ViX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wYTMyL3N1Yl9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzcxNjU1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wYTMyL3N1Yl9uLmFzbQpAQCAtMCwwICsxLDY0IEBACitkbmwgIEhQLVBBIG1wbl9zdWJfbiAtLSBTdWJ0cmFjdCB0d28gbGltYiB2ZWN0b3JzIG9mIHRoZSBzYW1lIGxlbmd0aCA+IDAgYW5kCitkbmwgIHN0b3JlIGRpZmZlcmVuY2UgaW4gYSB0aGlyZCBsaW1iIHZlY3Rvci4KKworZG5sICBDb3B5cmlnaHQgMTk5MiwgMTk5NCwgMjAwMC0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyByZXNfcHRyCWdyMjYKK0MgczFfcHRyCWdyMjUKK0MgczJfcHRyCWdyMjQKK0Mgc2l6ZQkJZ3IyMworCitDIE9uZSBtaWdodCB3YW50IHRvIHVucm9sbCB0aGlzIGFzIGZvciBvdGhlciBwcm9jZXNzb3JzLCBidXQgaXQgdHVybnMgb3V0IHRoYXQKK0MgdGhlIGRhdGEgY2FjaGUgY29udGVudGlvbiBhZnRlciBhIHN0b3JlIG1ha2VzIHN1Y2ggdW5yb2xsaW5nIHVzZWxlc3MuICBXZQorQyBjYW4ndCBjb21lIHVuZGVyIDUgY3ljbGVzL2xpbWIgYW55d2F5LgorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX3N1Yl9uKQorCWxkd3MsbWEJCTQoMCwlcjI1KSwlcjIwCisJbGR3cyxtYQkJNCgwLCVyMjQpLCVyMTkKKworCWFkZGliLD0JCS0xLCVyMjMsTChlbmQpCUMgY2hlY2sgZm9yIChTSVpFID09IDEpCisJIHN1YgkJJXIyMCwlcjE5LCVyMjgJQyBzdWJ0cmFjdCBmaXJzdCBsaW1icyBpZ25vcmluZyBjeQorCitMREVGKGxvb3ApCisJbGR3cyxtYQkJNCgwLCVyMjUpLCVyMjAKKwlsZHdzLG1hCQk0KDAsJXIyNCksJXIxOQorCXN0d3MsbWEJCSVyMjgsNCgwLCVyMjYpCisJYWRkaWIsPD4JLTEsJXIyMyxMKGxvb3ApCisJIHN1YmIJCSVyMjAsJXIxOSwlcjI4CisKK0xERUYoZW5kKQorCXN0d3MJCSVyMjgsMCgwLCVyMjYpCisJYWRkYwkJJXIwLCVyMCwlcjI4CisJYnYJCTAoJXIyKQorCSBzdWJpCQkxLCVyMjgsJXIyOAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wYTMyL3VkaXYuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wYTMyL3VkaXYuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZGJmNDEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3BhMzIvdWRpdi5hc20KQEAgLTAsMCArMSwyOTEgQEAKK2RubCAgSFAtUEEgIF9fdWRpdl9xcm5uZCBkaXZpc2lvbiBzdXBwb3J0LCB1c2VkIGZyb20gbG9uZ2xvbmcuaC4KK2RubCAgVGhpcyB2ZXJzaW9uIHJ1bnMgZmFzdCBvbiBwcmUtUEE3MDAwIENQVXMuCisKK2RubCAgQ29weXJpZ2h0IDE5OTMsIDE5OTQsIDIwMDAtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDIElOUFVUIFBBUkFNRVRFUlMKK0MgcmVtX3B0cglncjI2CitDIG4xCQlncjI1CitDIG4wCQlncjI0CitDIGQJCWdyMjMKKworQyBUaGUgY29kZSBzaXplIGlzIGEgYml0IGV4Y2Vzc2l2ZS4gIFdlIGNvdWxkIG1lcmdlIHRoZSBsYXN0IHR3byBkczthZGRjCitDIHNlcXVlbmNlcyBieSBzaW1wbHkgbW92aW5nIHRoZSAiYmIsPCBPZGQiIGluc3RydWN0aW9uIGRvd24uICBUaGUgb25seQorQyB0cm91YmxlIGlzIHRoZSBGRkZGRkZGRiBjb2RlIHRoYXQgd291bGQgbmVlZCBzb21lIGhhY2tpbmcuCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fdWRpdl9xcm5uZCkKKwljb21iLDwJCSVyMjMsMCxMKGxhcmdlZGl2aXNvcikKKwkgc3ViCQklcjAsJXIyMywlcjEJCUMgY2xlYXIgY3kgYXMgc2lkZS1lZmZlY3QKKwlkcwkJJXIwLCVyMSwlcjAKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjMsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMywlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIzLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjMsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMywlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIzLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjMsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMywlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIzLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjMsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMywlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIzLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjMsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMywlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIzLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjMsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMywlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIzLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjMsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMywlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIzLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjMsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMywlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIzLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjMsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMywlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIzLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjMsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMywlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIzLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjMsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI4CisJZHMJCSVyMjUsJXIyMywlcjI1CisJY29tY2xyLD49CSVyMjUsJXIwLCVyMAorCWFkZGwJCSVyMjUsJXIyMywlcjI1CisJc3R3cwkJJXIyNSwwKDAsJXIyNikKKwlidgkJMCglcjIpCisJIGFkZGMJCSVyMjgsJXIyOCwlcjI4CisKK0xERUYobGFyZ2VkaXZpc29yKQorCWV4dHJ1CQklcjI0LDMxLDEsJXIxOQkJQyByMTkgPSBuMCAmIDEKKwliYiw8CQklcjIzLDMxLEwob2RkKQorCSBleHRydQkJJXIyMywzMCwzMSwlcjIyCQlDIHIyMiA9IGQgPj4gMQorCXNoZAkJJXIyNSwlcjI0LDEsJXIyNAlDIHIyNCA9IG5ldyBuMAorCWV4dHJ1CQklcjI1LDMwLDMxLCVyMjUJCUMgcjI1ID0gbmV3IG4xCisJc3ViCQklcjAsJXIyMiwlcjIxCisJZHMJCSVyMCwlcjIxLCVyMAorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwljb21jbHIsPj0JJXIyNSwlcjAsJXIwCisJYWRkbAkJJXIyNSwlcjIyLCVyMjUKKwlzaDFhZGRsCQklcjI1LCVyMTksJXIyNQorCXN0d3MJCSVyMjUsMCgwLCVyMjYpCisJYnYJCTAoJXIyKQorCSBhZGRjCQklcjI0LCVyMjQsJXIyOAorCitMREVGKG9kZCkKKwlhZGRpYixzdixuCTEsJXIyMixMKEZGRkZGRkZGKQlDIHIyMiA9IChkIC8gMiArIDEpCisJc2hkCQklcjI1LCVyMjQsMSwlcjI0CUMgcjI0ID0gbmV3IG4wCisJZXh0cnUJCSVyMjUsMzAsMzEsJXIyNQkJQyByMjUgPSBuZXcgbjEKKwlzdWIJCSVyMCwlcjIyLCVyMjEKKwlkcwkJJXIwLCVyMjEsJXIwCisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI0CisJZHMJCSVyMjUsJXIyMiwlcjI1CisJYWRkYwkJJXIyNCwlcjI0LCVyMjQKKwlkcwkJJXIyNSwlcjIyLCVyMjUKKwlhZGRjCQklcjI0LCVyMjQsJXIyNAorCWRzCQklcjI1LCVyMjIsJXIyNQorCWFkZGMJCSVyMjQsJXIyNCwlcjI4CisJY29tY2xyLD49CSVyMjUsJXIwLCVyMAorCWFkZGwJCSVyMjUsJXIyMiwlcjI1CisJc2gxYWRkbAkJJXIyNSwlcjE5LCVyMjUKK0MgV2UgaGF2ZSBjb21wdXRlZCAobjEsLG4wKSAvIChkICsgMSksIHEnID0gcjI4LCByJyA9IHIyNQorCWFkZCxudXYJCSVyMjgsJXIyNSwlcjI1CisJYWRkbAkJJXIyNSwlcjEsJXIyNQorCWFkZGMJCSVyMCwlcjI4LCVyMjgKKwlzdWIsPDwJCSVyMjUsJXIyMywlcjAKKwlhZGRsCQklcjI1LCVyMSwlcjI1CisJc3R3cwkJJXIyNSwwKDAsJXIyNikKKwlidgkJMCglcjIpCisJIGFkZGMJCSVyMCwlcjI4LCVyMjgKKworQyBUaGlzIGlzIGp1c3QgYSBzcGVjaWFsIGNhc2Ugb2YgdGhlIGNvZGUgYWJvdmUuCitDIFdlIGNvbWUgaGVyZSB3aGVuIGQgPT0gMHhGRkZGRkZGRgorTERFRihGRkZGRkZGRikKKwlhZGQsdXYJCSVyMjUsJXIyNCwlcjI0CisJc3ViLDw8CQklcjI0LCVyMjMsJXIwCisJbGRvCQkxKCVyMjQpLCVyMjQKKwlzdHdzCQklcjI0LDAoMCwlcjI2KQorCWJ2CQkwKCVyMikKKwkgYWRkYwkJJXIwLCVyMjUsJXIyOAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wYTY0L1JFQURNRSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcGE2NC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUxY2UwMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcGE2NC9SRUFETUUKQEAgLTAsMCArMSw3OCBAQAorQ29weXJpZ2h0IDE5OTksIDIwMDEsIDIwMDIsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCisKKworVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgbXBuIGZ1bmN0aW9ucyBmb3IgNjQtYml0IFBBLVJJU0MgMi4wLgorCitQSVBFTElORSBTVU1NQVJZCisKK1RoZSBQQTh4MDAgcHJvY2Vzc29ycyBoYXZlIGFuIG9ydGhvZ29uYWwgNC13YXkgb3V0LW9mLW9yZGVyIHBpcGVsaW5lLiAgRWFjaAorY3ljbGUgdHdvIEFMVSBvcGVyYXRpb25zIGFuZCB0d28gTUVNIG9wZXJhdGlvbnMgY2FuIGlzc3VlLCBidXQganVzdCBvbmUgb2YgdGhlCitNRU0gb3BlcmF0aW9ucyBtYXkgYmUgYSBzdG9yZS4gIFRoZSB0d28gQUxVIG9wZXJhdGlvbnMgY2FuIGJlIGFsbW9zdCBhbnkKK2NvbWJpbmF0aW9uIG9mIG5vbi1tZW1vcnkgb3BlcmF0aW9ucy4gIFVubGlrZSBldmVyeSBvdGhlciBwcm9jZXNzb3IsIGludGVnZXIKK2FuZCBmcCBvcGVyYXRpb25zIGFyZSBjb21wbGV0ZWx5IGVxdWFsIGhlcmU7IHRoZXkgYm90aCBjb3VudCBhcyBqdXN0IEFMVQorb3BlcmF0aW9ucy4KKworVW5mb3J0dW5hdGVseSwgc29tZSBvcGVyYXRpb25zIGNhdXNlIGhpY2t1cHMgaW4gdGhlIHBpcGVsaW5lLiAgQ29tYmluaW5nCitjYXJyeS1jb25zdW1pbmcgb3BlcmF0aW9ucyBsaWtlIEFERCxEQyB3aXRoIG9wZXJhdGlvbnMgdGhhdCBkb2VzIG5vdCBzZXQgY2FycnkKK2xpa2UgQURELEwgY2F1c2UgbG9uZyBkZWxheXMuICBTa2lwIG9wZXJhdGlvbnMgYWxzbyBzZWVtIHRvIGNhdXNlIGhpY2t1cHMuICBJZgorc2V2ZXJhbCBBREQsREMgYXJlIGlzc3VlZCBjb25zZWN1dGl2ZWx5LCBvciBpZiBwbGFpbiBjYXJyeS1nZW5lcmF0aW5nIEFERCBmZWVkCitBREQsREMsIHN0YWxsaW5nIGRvZXMgbm90IG9jY3VyLiAgV2UgY2FuIGVmZmVjdGl2ZWx5IGlzc3VlIHR3byBBREQsREMKK29wZXJhdGlvbnMvY3ljbGUuCisKK0xhdGVuY3kgc2NoZWR1bGluZyBpcyBub3QgYXMgaW1wb3J0YW50IGFzIG1ha2luZyBzdXJlIHRvIGhhdmUgYSBtaXggb2YgQUxVIGFuZAorTUVNIG9wZXJhdGlvbnMsIGJ1dCBmb3IgZnVsbCBwaXBlbGluZSB1dGlsaXphdGlvbiwgaXQgaXMgc3RpbGwgYSBnb29kIGlkZWEgdG8KK2RvIHNvbWUgYW1vdW50IG9mIGxhdGVuY3kgc2NoZWR1bGluZy4KKworTGlrZSBmb3IgYWxsIG90aGVyIHByb2Nlc3NvcnMsIFJBVyBtZW1vcnkgc2NoZWR1bGluZyBpcyBjcml0aWNhbGx5IGltcG9ydGFudC4KK1NpbmNlIGludGVnZXIgbXVsdGlwbGljYXRpb24gdGFrZXMgcGxhY2UgaW4gdGhlIGZsb2F0aW5nLXBvaW50IHVuaXQsIHRoZSBHTVAKK2NvZGUgbmVlZHMgdG8gaGFuZGxlIHRoaXMgcHJvYmxlbSBmcmVxdWVudGx5LgorCitTVEFUVVMKKworKiBtcG5fbHNoaWZ0IGFuZCBtcG5fcnNoaWZ0IHJ1biBhdCAxLjUgY3ljbGVzL2xpbWIgb24gUEE4MDAwIGFuZCBhdCAxLjAKKyAgY3ljbGVzL2xpbWIgb24gUEE4NTAwLiAgV2l0aCBsYXRlbmN5IHNjaGVkdWxpbmcsIHRoZSBudW1iZXJzIGNvdWxkCisgIHByb2JhYmx5IGJlIGltcHJvdmVkIHRvIDEuMCBjeWNsZXMvbGltYiBmb3IgYWxsIFBBOHgwMCBjaGlwcy4KKworKiBtcG5fYWRkX24gYW5kIG1wbl9zdWJfbiBydW4gYXQgMi4wIGN5Y2xlcy9saW1iIG9uIFBBODAwMCBhbmQgYXQgYWJvdXQKKyAgMS42ODc1IGN5Y2xlcy9saW1iIG9uIFBBODUwMC4gIFdpdGggbGF0ZW5jeSBzY2hlZHVsaW5nLCB0aGlzIGNvdWxkCisgIHByb2JhYmx5IGJlIGltcHJvdmVkIHRvIGdldCBjbG9zZSB0byAxLjUgY3ljbGVzL2xpbWIuICBBIHByb2JsZW0gaXMgdGhlCisgIHN0YWxsaW5nIG9mIGNhcnJ5LWlucHV0dGluZyBpbnN0cnVjdGlvbnMgYWZ0ZXIgaW5zdHJ1Y3Rpb25zIHRoYXQgZG8gbm90CisgIHdyaXRlIHRvIGNhcnJ5LgorCisqIG1wbl9tdWxfMSwgbXBuX2FkZG11bF8xLCBhbmQgbXBuX3N1Ym11bF8xIHJ1biBhdCBiZXR3ZWVuIDUuNjI1IGFuZCA2LjM3NQorICBvbiBQQTg1MDAgYW5kIGxhdGVyLCBhbmQgYWJvdXQgYSBjeWNsZS9saW1iIHNsb3dlciBvbiBvbGRlciBjaGlwcy4gIFRoZQorICBjb2RlIHVzZXMgQURELERDIGZvciBhZGphY2VudCBsaW1icywgYW5kIHJlbGllcyBoZWF2aWx5IG9uIHJlb3JkZXJpbmcuCisKKworUkVGRVJFTkNFUworCitIZXdsZXR0IFBhY2thcmQsICI2NC1CaXQgUnVudGltZSBBcmNoaXRlY3R1cmUgZm9yIFBBLVJJU0MgMi4wIiwgdmVyc2lvbiAzLjMsCitPY3RvYmVyIDE5OTcuCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3BhNjQvYWRkbXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wYTY0L2FkZG11bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2I5YWY5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wYTY0L2FkZG11bF8xLmFzbQpAQCAtMCwwICsxLDY5MyBAQAorZG5sICBIUC1QQSAyLjAgNjQtYml0IG1wbl9hZGRtdWxfMSAtLSBNdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYSBsaW1iIGFuZAorZG5sICBhZGQgdGhlIHJlc3VsdCB0byBhIHNlY29uZCBsaW1iIHZlY3Rvci4KKworZG5sICBDb3B5cmlnaHQgMTk5OC0yMDAwLCAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJCSAgICBjeWNsZXMvbGltYgorQyA4MDAwLDgyMDA6CQk3CitDIDg1MDAsODYwMCw4NzAwOgk2LjM3NQorCitDICBUaGUgZmVlZC1pbiBhbmQgd2luZC1kb3duIGNvZGUgaGFzIG5vdCB5ZXQgYmVlbiBzY2hlZHVsZWQuICBNYW55IGN5Y2xlcworQyAgY291bGQgYmUgc2F2ZWQgdGhlcmUgcGVyIGNhbGwuCisKK0MgIERFU0NSSVBUSU9OOgorQyAgVGhlIG1haW4gbG9vcCAiQklHIiBpcyA0LXdheSB1bnJvbGxlZCwgbWFpbmx5IHRvIGFsbG93CitDICBlZmZlY3RpdmUgdXNlIG9mIEFERCxEQy4gIERlbGF5cyBpbiBtb3ZpbmcgZGF0YSB2aWEgdGhlIGNhY2hlIGZyb20gdGhlIEZQCitDICByZWdpc3RlcnMgdG8gdGhlIElVIHJlZ2lzdGVycywgaGF2ZSBkZW1hbmRlZCBhIGRlZXAgc29mdHdhcmUgcGlwZWxpbmUsIGFuZAorQyAgYSBsb3Qgb2Ygc3RhY2sgc2xvdHMgZm9yIHBhcnRpYWwgcHJvZHVjdHMgaW4gZmxpZ2h0LgorQworQyAgQ09ERSBTVFJVQ1RVUkU6CitDICBzYXZlLXNvbWUtcmVnaXN0ZXJzCitDICBkbyAwLCAxLCAyLCBvciAzIGxpbWJzCitDICBpZiBkb25lLCByZXN0b3JlLXNvbWUtcmVncyBhbmQgcmV0dXJuCitDICBzYXZlLW1hbnktcmVncworQyAgZG8gNCwgOCwgLi4uIGxpbWIKK0MgIHJlc3RvcmUtYWxsLXJlZ3MKKworQyAgU1RBQ0sgTEFZT1VUOgorQyAgSFAtUEEgc3RhY2sgZ3Jvd3MgdXB3YXJkcy4gIFdlIGNvdWxkIGFsbG9jYXRlIDggZmV3ZXIgc2xvdHMgYnkgdXNpbmcgdGhlCitDICBzbG90cyBtYXJrZWQgRlJFRSwgYXMgd2VsbCBhcyBzb21lIHNsb3RzIGluIHRoZSBjYWxsZXIncyAiZnJhbWUgbWFya2VyIi4KK0MKK0MgLTAwIDwtIHIzMAorQyAtMDggIEZSRUUKK0MgLTEwICB0bXAKK0MgLTE4ICB0bXAKK0MgLTIwICB0bXAKK0MgLTI4ICB0bXAKK0MgLTMwICB0bXAKK0MgLTM4ICB0bXAKK0MgLTQwICB0bXAKK0MgLTQ4ICB0bXAKK0MgLTUwICB0bXAKK0MgLTU4ICB0bXAKK0MgLTYwICB0bXAKK0MgLTY4ICB0bXAKK0MgLTcwICB0bXAKK0MgLTc4ICB0bXAKK0MgLTgwICB0bXAKK0MgLTg4ICB0bXAKK0MgLTkwICBGUkVFCitDIC05OCAgRlJFRQorQyAtYTAgIEZSRUUKK0MgLWE4ICBGUkVFCitDIC1iMCAgcjEzCitDIC1iOCAgcjEyCitDIC1jMCAgcjExCitDIC1jOCAgcjEwCitDIC1kMCAgcjgKK0MgLWQ4ICByOAorQyAtZTAgIHI3CitDIC1lOCAgcjYKK0MgLWYwICByNQorQyAtZjggIHI0CitDIC0xMDAgcjMKK0MgIFByZXZpb3VzIGZyYW1lOgorQyAgW3VudXNlZCBhcmVhXQorQyAtMzgvLTEzOCB2bGltYiBob21lIHNsb3QuICBGb3IgMi4wTiwgdGhlIHZsaW1iIGFyZyB3aWxsIGFycml2ZSBoZXJlLgorCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgSU5QVVQgUEFSQU1FVEVSUzoKK2RlZmluZShgcnAnLGAlcjI2JykJQworZGVmaW5lKGB1cCcsYCVyMjUnKQlDCitkZWZpbmUoYG4nLGAlcjI0JykJQworZGVmaW5lKGB2bGltYicsYCVyMjMnKQlDCisKK2RlZmluZShgY2xpbWInLGAlcjIzJykJQworCitpZmRlZihgSEFWRV9BQklfMl8wdycsCitgCS5sZXZlbAkyLjB3CisnLGAJLmxldmVsCTIuMAorJykKK1BST0xPR1VFKG1wbl9hZGRtdWxfMSkKKworaWZkZWYoYEhBVkVfQUJJXzJfMHcnLAorYAlzdGQJCXZsaW1iLCAtMHgzOCglcjMwKQlDIHN0b3JlIHZsaW1iIGludG8gImhvbWUiIHNsb3QKKycpCisJc3RkLG1hCQklcjMsIDB4MTAwKCVyMzApCisJc3RkCQklcjQsIC0weGY4KCVyMzApCisJc3RkCQklcjUsIC0weGYwKCVyMzApCisJbGRvCQkwKCVyMCksIGNsaW1iCQlDIGNsZWFyIGNsaW1iCisJZmxkZAkJLTB4MTM4KCVyMzApLCAlZnI4CUMgcHV0IHZsaW1iIGluIGZwIHJlZ2lzdGVyCisKK2RlZmluZShgcDAzMmExJyxgJXIxJykJQworZGVmaW5lKGBwMDMyYTInLGAlcjE5JykJQworCitkZWZpbmUoYG0wMzInLGAlcjIwJykJQworZGVmaW5lKGBtMDk2JyxgJXIyMScpCUMKKworZGVmaW5lKGBwMDAwYScsYCVyMjInKQlDCitkZWZpbmUoYHAwNjRhJyxgJXIyOScpCUMKKworZGVmaW5lKGBzMDAwJyxgJXIzMScpCUMKKworZGVmaW5lKGBtYTAwMCcsYCVyNCcpCUMKK2RlZmluZShgbWEwNjQnLGAlcjIwJykJQworCitkZWZpbmUoYHIwMDAnLGAlcjMnKQlDCisKKwlleHRyZCx1CQluLCA2MywgMiwgJXI1CisJY21wYiw9CQklcjUsICVyMCwgTChCSUcpCisJbm9wCisKKwlmbGRkCQkwKHVwKSwgJWZyNAorCWxkbwkJOCh1cCksIHVwCisJeG1weXUJCSVmcjhSLCAlZnI0TCwgJWZyMjIKKwl4bXB5dQkJJWZyOEwsICVmcjRSLCAlZnIyMworCWZzdGQJCSVmcjIyLCAtMHg3OCglcjMwKQlDIG1pZCBwcm9kdWN0IHRvICAtMHg3OC4uLTB4NzEKKwl4bXB5dQkJJWZyOFIsICVmcjRSLCAlZnIyNAorCXhtcHl1CQklZnI4TCwgJWZyNEwsICVmcjI1CisJZnN0ZAkJJWZyMjMsIC0weDcwKCVyMzApCUMgbWlkIHByb2R1Y3QgdG8gIC0weDcwLi4tMHg2OQorCWZzdGQJCSVmcjI0LCAtMHg4MCglcjMwKQlDIGxvdyBwcm9kdWN0IHRvICAtMHg4MC4uLTB4NzkKKwlhZGRpYiw8PgktMSwgJXI1LCBMKHR3b19vcl9tb3JlKQorCWZzdGQJCSVmcjI1LCAtMHg2OCglcjMwKQlDIGhpZ2ggcHJvZHVjdCB0byAtMHg2OC4uLTB4NjEKK0xERUYob25lKQorCWxkZAkJLTB4NzgoJXIzMCksIHAwMzJhMQorCWxkZAkJLTB4NzAoJXIzMCksIHAwMzJhMgorCWxkZAkJLTB4ODAoJXIzMCksIHAwMDBhCisJYgkJTCgwX29uZV9vdXQpCisJbGRkCQktMHg2OCglcjMwKSwgcDA2NGEKKworTERFRih0d29fb3JfbW9yZSkKKwlmbGRkCQkwKHVwKSwgJWZyNAorCWxkbwkJOCh1cCksIHVwCisJeG1weXUJCSVmcjhSLCAlZnI0TCwgJWZyMjIKKwl4bXB5dQkJJWZyOEwsICVmcjRSLCAlZnIyMworCWxkZAkJLTB4NzgoJXIzMCksIHAwMzJhMQorCWZzdGQJCSVmcjIyLCAtMHg3OCglcjMwKQlDIG1pZCBwcm9kdWN0IHRvICAtMHg3OC4uLTB4NzEKKwl4bXB5dQkJJWZyOFIsICVmcjRSLCAlZnIyNAorCXhtcHl1CQklZnI4TCwgJWZyNEwsICVmcjI1CisJbGRkCQktMHg3MCglcjMwKSwgcDAzMmEyCisJZnN0ZAkJJWZyMjMsIC0weDcwKCVyMzApCUMgbWlkIHByb2R1Y3QgdG8gIC0weDcwLi4tMHg2OQorCWxkZAkJLTB4ODAoJXIzMCksIHAwMDBhCisJZnN0ZAkJJWZyMjQsIC0weDgwKCVyMzApCUMgbG93IHByb2R1Y3QgdG8gIC0weDgwLi4tMHg3OQorCWxkZAkJLTB4NjgoJXIzMCksIHAwNjRhCisJYWRkaWIsPD4JLTEsICVyNSwgTCh0aHJlZV9vcl9tb3JlKQorCWZzdGQJCSVmcjI1LCAtMHg2OCglcjMwKQlDIGhpZ2ggcHJvZHVjdCB0byAtMHg2OC4uLTB4NjEKK0xERUYodHdvKQorCWFkZAkJcDAzMmExLCBwMDMyYTIsIG0wMzIKKwlhZGQsZGMJCSVyMCwgJXIwLCBtMDk2CisJZGVwZCx6CQltMDMyLCAzMSwgMzIsIG1hMDAwCisJZXh0cmQsdQkJbTAzMiwgMzEsIDMyLCBtYTA2NAorCWxkZAkJMChycCksIHIwMDAKKwliCQlMKDBfdHdvX291dCkKKwlkZXBkCQltMDk2LCAzMSwgMzIsIG1hMDY0CisKK0xERUYodGhyZWVfb3JfbW9yZSkKKwlmbGRkCQkwKHVwKSwgJWZyNAorCWFkZAkJcDAzMmExLCBwMDMyYTIsIG0wMzIKKwlhZGQsZGMJCSVyMCwgJXIwLCBtMDk2CisJZGVwZCx6CQltMDMyLCAzMSwgMzIsIG1hMDAwCisJZXh0cmQsdQkJbTAzMiwgMzEsIDMyLCBtYTA2NAorCWxkZAkJMChycCksIHIwMDAKK0MJYWRkaWIsPQkJLTEsICVyNSwgTCgwX291dCkKKwlkZXBkCQltMDk2LCAzMSwgMzIsIG1hMDY0CitMREVGKGxvb3AwKQorQwl4bXB5dQkJJWZyOFIsICVmcjRMLCAlZnIyMgorQwl4bXB5dQkJJWZyOEwsICVmcjRSLCAlZnIyMworQwlsZGQJCS0weDc4KCVyMzApLCBwMDMyYTEKK0MJZnN0ZAkJJWZyMjIsIC0weDc4KCVyMzApCUMgbWlkIHByb2R1Y3QgdG8gIC0weDc4Li4tMHg3MQorQworQwl4bXB5dQkJJWZyOFIsICVmcjRSLCAlZnIyNAorQwl4bXB5dQkJJWZyOEwsICVmcjRMLCAlZnIyNQorQwlsZGQJCS0weDcwKCVyMzApLCBwMDMyYTIKK0MJZnN0ZAkJJWZyMjMsIC0weDcwKCVyMzApCUMgbWlkIHByb2R1Y3QgdG8gIC0weDcwLi4tMHg2OQorQworQwlsZG8JCTgocnApLCBycAorQwlhZGQJCWNsaW1iLCBwMDAwYSwgczAwMAorQwlsZGQJCS0weDgwKCVyMzApLCBwMDAwYQorQwlmc3RkCQklZnIyNCwgLTB4ODAoJXIzMCkJQyBsb3cgcHJvZHVjdCB0byAgLTB4ODAuLi0weDc5CitDCitDCWFkZCxkYwkJcDA2NGEsICVyMCwgY2xpbWIKK0MJbGRvCQk4KHVwKSwgdXAKK0MJbGRkCQktMHg2OCglcjMwKSwgcDA2NGEKK0MJZnN0ZAkJJWZyMjUsIC0weDY4KCVyMzApCUMgaGlnaCBwcm9kdWN0IHRvIC0weDY4Li4tMHg2MQorQworQwlhZGQJCW1hMDAwLCBzMDAwLCBzMDAwCitDCWFkZCxkYwkJbWEwNjQsIGNsaW1iLCBjbGltYgorQwlmbGRkCQkwKHVwKSwgJWZyNAorQworQwlhZGQJCXIwMDAsIHMwMDAsIHMwMDAKK0MJYWRkLGRjCQklcjAsIGNsaW1iLCBjbGltYgorQwlzdGQJCXMwMDAsIC04KHJwKQorQworQwlhZGQJCXAwMzJhMSwgcDAzMmEyLCBtMDMyCitDCWFkZCxkYwkJJXIwLCAlcjAsIG0wOTYKK0MKK0MJZGVwZCx6CQltMDMyLCAzMSwgMzIsIG1hMDAwCitDCWV4dHJkLHUJCW0wMzIsIDMxLCAzMiwgbWEwNjQKK0MJbGRkCQkwKHJwKSwgcjAwMAorQwlhZGRpYiw8PgktMSwgJXI1LCBMKGxvb3AwKQorQwlkZXBkCQltMDk2LCAzMSwgMzIsIG1hMDY0CitMREVGKDBfb3V0KQorCWxkbwkJOCh1cCksIHVwCisJeG1weXUJCSVmcjhSLCAlZnI0TCwgJWZyMjIKKwl4bXB5dQkJJWZyOEwsICVmcjRSLCAlZnIyMworCWxkZAkJLTB4NzgoJXIzMCksIHAwMzJhMQorCWZzdGQJCSVmcjIyLCAtMHg3OCglcjMwKQlDIG1pZCBwcm9kdWN0IHRvICAtMHg3OC4uLTB4NzEKKwl4bXB5dQkJJWZyOFIsICVmcjRSLCAlZnIyNAorCXhtcHl1CQklZnI4TCwgJWZyNEwsICVmcjI1CisJbGRkCQktMHg3MCglcjMwKSwgcDAzMmEyCisJZnN0ZAkJJWZyMjMsIC0weDcwKCVyMzApCUMgbWlkIHByb2R1Y3QgdG8gIC0weDcwLi4tMHg2OQorCWxkbwkJOChycCksIHJwCisJYWRkCQljbGltYiwgcDAwMGEsIHMwMDAKKwlsZGQJCS0weDgwKCVyMzApLCBwMDAwYQorCWZzdGQJCSVmcjI0LCAtMHg4MCglcjMwKQlDIGxvdyBwcm9kdWN0IHRvICAtMHg4MC4uLTB4NzkKKwlhZGQsZGMJCXAwNjRhLCAlcjAsIGNsaW1iCisJbGRkCQktMHg2OCglcjMwKSwgcDA2NGEKKwlmc3RkCQklZnIyNSwgLTB4NjgoJXIzMCkJQyBoaWdoIHByb2R1Y3QgdG8gLTB4NjguLi0weDYxCisJYWRkCQltYTAwMCwgczAwMCwgczAwMAorCWFkZCxkYwkJbWEwNjQsIGNsaW1iLCBjbGltYgorCWFkZAkJcjAwMCwgczAwMCwgczAwMAorCWFkZCxkYwkJJXIwLCBjbGltYiwgY2xpbWIKKwlzdGQJCXMwMDAsIC04KHJwKQorCWFkZAkJcDAzMmExLCBwMDMyYTIsIG0wMzIKKwlhZGQsZGMJCSVyMCwgJXIwLCBtMDk2CisJZGVwZCx6CQltMDMyLCAzMSwgMzIsIG1hMDAwCisJZXh0cmQsdQkJbTAzMiwgMzEsIDMyLCBtYTA2NAorCWxkZAkJMChycCksIHIwMDAKKwlkZXBkCQltMDk2LCAzMSwgMzIsIG1hMDY0CitMREVGKDBfdHdvX291dCkKKwlsZGQJCS0weDc4KCVyMzApLCBwMDMyYTEKKwlsZGQJCS0weDcwKCVyMzApLCBwMDMyYTIKKwlsZG8JCTgocnApLCBycAorCWFkZAkJY2xpbWIsIHAwMDBhLCBzMDAwCisJbGRkCQktMHg4MCglcjMwKSwgcDAwMGEKKwlhZGQsZGMJCXAwNjRhLCAlcjAsIGNsaW1iCisJbGRkCQktMHg2OCglcjMwKSwgcDA2NGEKKwlhZGQJCW1hMDAwLCBzMDAwLCBzMDAwCisJYWRkLGRjCQltYTA2NCwgY2xpbWIsIGNsaW1iCisJYWRkCQlyMDAwLCBzMDAwLCBzMDAwCisJYWRkLGRjCQklcjAsIGNsaW1iLCBjbGltYgorCXN0ZAkJczAwMCwgLTgocnApCitMREVGKDBfb25lX291dCkKKwlhZGQJCXAwMzJhMSwgcDAzMmEyLCBtMDMyCisJYWRkLGRjCQklcjAsICVyMCwgbTA5NgorCWRlcGQsegkJbTAzMiwgMzEsIDMyLCBtYTAwMAorCWV4dHJkLHUJCW0wMzIsIDMxLCAzMiwgbWEwNjQKKwlsZGQJCTAocnApLCByMDAwCisJZGVwZAkJbTA5NiwgMzEsIDMyLCBtYTA2NAorCisJYWRkCQljbGltYiwgcDAwMGEsIHMwMDAKKwlhZGQsZGMJCXAwNjRhLCAlcjAsIGNsaW1iCisJYWRkCQltYTAwMCwgczAwMCwgczAwMAorCWFkZCxkYwkJbWEwNjQsIGNsaW1iLCBjbGltYgorCWFkZAkJcjAwMCwgczAwMCwgczAwMAorCWFkZCxkYwkJJXIwLCBjbGltYiwgY2xpbWIKKwlzdGQJCXMwMDAsIDAocnApCisKKwljbXBpYiw+PQk0LCBuLCBMKGRvbmUpCisJbGRvCQk4KHJwKSwgcnAKKworQyA0LXdheSB1bnJvbGxlZCBjb2RlLgorCitMREVGKEJJRykKKworZGVmaW5lKGBwMDMyYTEnLGAlcjEnKQlDCitkZWZpbmUoYHAwMzJhMicsYCVyMTknKQlDCitkZWZpbmUoYHAwOTZiMScsYCVyMjAnKQlDCitkZWZpbmUoYHAwOTZiMicsYCVyMjEnKQlDCitkZWZpbmUoYHAxNjBjMScsYCVyMjInKQlDCitkZWZpbmUoYHAxNjBjMicsYCVyMjknKQlDCitkZWZpbmUoYHAyMjRkMScsYCVyMzEnKQlDCitkZWZpbmUoYHAyMjRkMicsYCVyMycpCUMKKwkJCUMKK2RlZmluZShgbTAzMicsYCVyNCcpCUMKK2RlZmluZShgbTA5NicsYCVyNScpCUMKK2RlZmluZShgbTE2MCcsYCVyNicpCUMKK2RlZmluZShgbTIyNCcsYCVyNycpCUMKK2RlZmluZShgbTI4OCcsYCVyOCcpCUMKKwkJCUMKK2RlZmluZShgcDAwMGEnLGAlcjEnKQlDCitkZWZpbmUoYHAwNjRhJyxgJXIxOScpCUMKK2RlZmluZShgcDA2NGInLGAlcjIwJykJQworZGVmaW5lKGBwMTI4YicsYCVyMjEnKQlDCitkZWZpbmUoYHAxMjhjJyxgJXIyMicpCUMKK2RlZmluZShgcDE5MmMnLGAlcjI5JykJQworZGVmaW5lKGBwMTkyZCcsYCVyMzEnKQlDCitkZWZpbmUoYHAyNTZkJyxgJXIzJykJQworCQkJQworZGVmaW5lKGBzMDAwJyxgJXIxMCcpCUMKK2RlZmluZShgczA2NCcsYCVyMTEnKQlDCitkZWZpbmUoYHMxMjgnLGAlcjEyJykJQworZGVmaW5lKGBzMTkyJyxgJXIxMycpCUMKKwkJCUMKK2RlZmluZShgbWEwMDAnLGAlcjknKQlDCitkZWZpbmUoYG1hMDY0JyxgJXI0JykJQworZGVmaW5lKGBtYTEyOCcsYCVyNScpCUMKK2RlZmluZShgbWExOTInLGAlcjYnKQlDCitkZWZpbmUoYG1hMjU2JyxgJXI3JykJQworCQkJQworZGVmaW5lKGByMDAwJyxgJXIxJykJQworZGVmaW5lKGByMDY0JyxgJXIxOScpCUMKK2RlZmluZShgcjEyOCcsYCVyMjAnKQlDCitkZWZpbmUoYHIxOTInLGAlcjIxJykJQworCisJc3RkCQklcjYsIC0weGU4KCVyMzApCisJc3RkCQklcjcsIC0weGUwKCVyMzApCisJc3RkCQklcjgsIC0weGQ4KCVyMzApCisJc3RkCQklcjksIC0weGQwKCVyMzApCisJc3RkCQklcjEwLCAtMHhjOCglcjMwKQorCXN0ZAkJJXIxMSwgLTB4YzAoJXIzMCkKKwlzdGQJCSVyMTIsIC0weGI4KCVyMzApCisJc3RkCQklcjEzLCAtMHhiMCglcjMwKQorCitpZmRlZihgSEFWRV9BQklfMl8wdycsCitgCWV4dHJkLHUJCW4sIDYxLCA2MiwgbgkJQyByaWdodCBzaGlmdCAyCisnLGAJZXh0cmQsdQkJbiwgNjEsIDMwLCBuCQlDIHJpZ2h0IHNoaWZ0IDIsIHplcm8gZXh0ZW5kCisnKQorCitMREVGKDRfb3JfbW9yZSkKKwlmbGRkCQkwKHVwKSwgJWZyNAorCWZsZGQJCTgodXApLCAlZnI1CisJZmxkZAkJMTYodXApLCAlZnI2CisJZmxkZAkJMjQodXApLCAlZnI3CisJeG1weXUJCSVmcjhSLCAlZnI0TCwgJWZyMjIKKwl4bXB5dQkJJWZyOEwsICVmcjRSLCAlZnIyMworCXhtcHl1CQklZnI4UiwgJWZyNUwsICVmcjI0CisJeG1weXUJCSVmcjhMLCAlZnI1UiwgJWZyMjUKKwl4bXB5dQkJJWZyOFIsICVmcjZMLCAlZnIyNgorCXhtcHl1CQklZnI4TCwgJWZyNlIsICVmcjI3CisJZnN0ZAkJJWZyMjIsIC0weDc4KCVyMzApCUMgbWlkIHByb2R1Y3QgdG8gIC0weDc4Li4tMHg3MQorCXhtcHl1CQklZnI4UiwgJWZyN0wsICVmcjI4CisJeG1weXUJCSVmcjhMLCAlZnI3UiwgJWZyMjkKKwlmc3RkCQklZnIyMywgLTB4NzAoJXIzMCkJQyBtaWQgcHJvZHVjdCB0byAgLTB4NzAuLi0weDY5CisJeG1weXUJCSVmcjhSLCAlZnI0UiwgJWZyMzAKKwl4bXB5dQkJJWZyOEwsICVmcjRMLCAlZnIzMQorCWZzdGQJCSVmcjI0LCAtMHgzOCglcjMwKQlDIG1pZCBwcm9kdWN0IHRvICAtMHgzOC4uLTB4MzEKKwl4bXB5dQkJJWZyOFIsICVmcjVSLCAlZnIyMgorCXhtcHl1CQklZnI4TCwgJWZyNUwsICVmcjIzCisJZnN0ZAkJJWZyMjUsIC0weDMwKCVyMzApCUMgbWlkIHByb2R1Y3QgdG8gIC0weDMwLi4tMHgyOQorCXhtcHl1CQklZnI4UiwgJWZyNlIsICVmcjI0CisJeG1weXUJCSVmcjhMLCAlZnI2TCwgJWZyMjUKKwlmc3RkCQklZnIyNiwgLTB4NTgoJXIzMCkJQyBtaWQgcHJvZHVjdCB0byAgLTB4NTguLi0weDUxCisJeG1weXUJCSVmcjhSLCAlZnI3UiwgJWZyMjYKKwlmc3RkCQklZnIyNywgLTB4NTAoJXIzMCkJQyBtaWQgcHJvZHVjdCB0byAgLTB4NTAuLi0weDQ5CisJYWRkaWIsPD4JLTEsIG4sIEwoOF9vcl9tb3JlKQorCXhtcHl1CQklZnI4TCwgJWZyN0wsICVmcjI3CisJZnN0ZAkJJWZyMjgsIC0weDE4KCVyMzApCUMgbWlkIHByb2R1Y3QgdG8gIC0weDE4Li4tMHgxMQorCWZzdGQJCSVmcjI5LCAtMHgxMCglcjMwKQlDIG1pZCBwcm9kdWN0IHRvICAtMHgxMC4uLTB4MDkKKwlmc3RkCQklZnIzMCwgLTB4ODAoJXIzMCkJQyBsb3cgcHJvZHVjdCB0byAgLTB4ODAuLi0weDc5CisJZnN0ZAkJJWZyMzEsIC0weDY4KCVyMzApCUMgaGlnaCBwcm9kdWN0IHRvIC0weDY4Li4tMHg2MQorCWZzdGQJCSVmcjIyLCAtMHg0MCglcjMwKQlDIGxvdyBwcm9kdWN0IHRvICAtMHg0MC4uLTB4MzkKKwlmc3RkCQklZnIyMywgLTB4MjgoJXIzMCkJQyBoaWdoIHByb2R1Y3QgdG8gLTB4MjguLi0weDIxCisJZnN0ZAkJJWZyMjQsIC0weDYwKCVyMzApCUMgbG93IHByb2R1Y3QgdG8gIC0weDYwLi4tMHg1OQorCWZzdGQJCSVmcjI1LCAtMHg0OCglcjMwKQlDIGhpZ2ggcHJvZHVjdCB0byAtMHg0OC4uLTB4NDEKKwlmc3RkCQklZnIyNiwgLTB4MjAoJXIzMCkJQyBsb3cgcHJvZHVjdCB0byAgLTB4MjAuLi0weDE5CisJZnN0ZAkJJWZyMjcsIC0weDg4KCVyMzApCUMgaGlnaCBwcm9kdWN0IHRvIC0weDg4Li4tMHg4MQorCWxkZAkJLTB4NzgoJXIzMCksIHAwMzJhMQorCWxkZAkJLTB4NzAoJXIzMCksIHAwMzJhMgorCWxkZAkJLTB4MzgoJXIzMCksIHAwOTZiMQorCWxkZAkJLTB4MzAoJXIzMCksIHAwOTZiMgorCWxkZAkJLTB4NTgoJXIzMCksIHAxNjBjMQorCWxkZAkJLTB4NTAoJXIzMCksIHAxNjBjMgorCWxkZAkJLTB4MTgoJXIzMCksIHAyMjRkMQorCWxkZAkJLTB4MTAoJXIzMCksIHAyMjRkMgorCWIJCUwoZW5kMSkKKwlub3AKKworTERFRig4X29yX21vcmUpCisJZnN0ZAkJJWZyMjgsIC0weDE4KCVyMzApCUMgbWlkIHByb2R1Y3QgdG8gIC0weDE4Li4tMHgxMQorCWZzdGQJCSVmcjI5LCAtMHgxMCglcjMwKQlDIG1pZCBwcm9kdWN0IHRvICAtMHgxMC4uLTB4MDkKKwlsZG8JCTMyKHVwKSwgdXAKKwlmc3RkCQklZnIzMCwgLTB4ODAoJXIzMCkJQyBsb3cgcHJvZHVjdCB0byAgLTB4ODAuLi0weDc5CisJZnN0ZAkJJWZyMzEsIC0weDY4KCVyMzApCUMgaGlnaCBwcm9kdWN0IHRvIC0weDY4Li4tMHg2MQorCWZzdGQJCSVmcjIyLCAtMHg0MCglcjMwKQlDIGxvdyBwcm9kdWN0IHRvICAtMHg0MC4uLTB4MzkKKwlmc3RkCQklZnIyMywgLTB4MjgoJXIzMCkJQyBoaWdoIHByb2R1Y3QgdG8gLTB4MjguLi0weDIxCisJZnN0ZAkJJWZyMjQsIC0weDYwKCVyMzApCUMgbG93IHByb2R1Y3QgdG8gIC0weDYwLi4tMHg1OQorCWZzdGQJCSVmcjI1LCAtMHg0OCglcjMwKQlDIGhpZ2ggcHJvZHVjdCB0byAtMHg0OC4uLTB4NDEKKwlmc3RkCQklZnIyNiwgLTB4MjAoJXIzMCkJQyBsb3cgcHJvZHVjdCB0byAgLTB4MjAuLi0weDE5CisJZnN0ZAkJJWZyMjcsIC0weDg4KCVyMzApCUMgaGlnaCBwcm9kdWN0IHRvIC0weDg4Li4tMHg4MQorCWZsZGQJCTAodXApLCAlZnI0CisJZmxkZAkJOCh1cCksICVmcjUKKwlmbGRkCQkxNih1cCksICVmcjYKKwlmbGRkCQkyNCh1cCksICVmcjcKKwl4bXB5dQkJJWZyOFIsICVmcjRMLCAlZnIyMgorCWxkZAkJLTB4NzgoJXIzMCksIHAwMzJhMQorCXhtcHl1CQklZnI4TCwgJWZyNFIsICVmcjIzCisJeG1weXUJCSVmcjhSLCAlZnI1TCwgJWZyMjQKKwlsZGQJCS0weDcwKCVyMzApLCBwMDMyYTIKKwl4bXB5dQkJJWZyOEwsICVmcjVSLCAlZnIyNQorCXhtcHl1CQklZnI4UiwgJWZyNkwsICVmcjI2CisJbGRkCQktMHgzOCglcjMwKSwgcDA5NmIxCisJeG1weXUJCSVmcjhMLCAlZnI2UiwgJWZyMjcKKwlmc3RkCQklZnIyMiwgLTB4NzgoJXIzMCkJQyBtaWQgcHJvZHVjdCB0byAgLTB4NzguLi0weDcxCisJeG1weXUJCSVmcjhSLCAlZnI3TCwgJWZyMjgKKwlsZGQJCS0weDMwKCVyMzApLCBwMDk2YjIKKwl4bXB5dQkJJWZyOEwsICVmcjdSLCAlZnIyOQorCWZzdGQJCSVmcjIzLCAtMHg3MCglcjMwKQlDIG1pZCBwcm9kdWN0IHRvICAtMHg3MC4uLTB4NjkKKwl4bXB5dQkJJWZyOFIsICVmcjRSLCAlZnIzMAorCWxkZAkJLTB4NTgoJXIzMCksIHAxNjBjMQorCXhtcHl1CQklZnI4TCwgJWZyNEwsICVmcjMxCisJZnN0ZAkJJWZyMjQsIC0weDM4KCVyMzApCUMgbWlkIHByb2R1Y3QgdG8gIC0weDM4Li4tMHgzMQorCXhtcHl1CQklZnI4UiwgJWZyNVIsICVmcjIyCisJbGRkCQktMHg1MCglcjMwKSwgcDE2MGMyCisJeG1weXUJCSVmcjhMLCAlZnI1TCwgJWZyMjMKKwlmc3RkCQklZnIyNSwgLTB4MzAoJXIzMCkJQyBtaWQgcHJvZHVjdCB0byAgLTB4MzAuLi0weDI5CisJeG1weXUJCSVmcjhSLCAlZnI2UiwgJWZyMjQKKwlsZGQJCS0weDE4KCVyMzApLCBwMjI0ZDEKKwl4bXB5dQkJJWZyOEwsICVmcjZMLCAlZnIyNQorCWZzdGQJCSVmcjI2LCAtMHg1OCglcjMwKQlDIG1pZCBwcm9kdWN0IHRvICAtMHg1OC4uLTB4NTEKKwl4bXB5dQkJJWZyOFIsICVmcjdSLCAlZnIyNgorCWxkZAkJLTB4MTAoJXIzMCksIHAyMjRkMgorCWZzdGQJCSVmcjI3LCAtMHg1MCglcjMwKQlDIG1pZCBwcm9kdWN0IHRvICAtMHg1MC4uLTB4NDkKKwlhZGRpYiw9CQktMSwgbiwgTChlbmQyKQorCXhtcHl1CQklZnI4TCwgJWZyN0wsICVmcjI3CitMREVGKGxvb3ApCisJYWRkCQlwMDMyYTEsIHAwMzJhMiwgbTAzMgorCWxkZAkJLTB4ODAoJXIzMCksIHAwMDBhCisJYWRkLGRjCQlwMDk2YjEsIHAwOTZiMiwgbTA5NgorCWZzdGQJCSVmcjI4LCAtMHgxOCglcjMwKQlDIG1pZCBwcm9kdWN0IHRvICAtMHgxOC4uLTB4MTEKKworCWFkZCxkYwkJcDE2MGMxLCBwMTYwYzIsIG0xNjAKKwlsZGQJCS0weDY4KCVyMzApLCBwMDY0YQorCWFkZCxkYwkJcDIyNGQxLCBwMjI0ZDIsIG0yMjQKKwlmc3RkCQklZnIyOSwgLTB4MTAoJXIzMCkJQyBtaWQgcHJvZHVjdCB0byAgLTB4MTAuLi0weDA5CisKKwlhZGQsZGMJCSVyMCwgJXIwLCBtMjg4CisJbGRkCQktMHg0MCglcjMwKSwgcDA2NGIKKwlsZG8JCTMyKHVwKSwgdXAKKwlmc3RkCQklZnIzMCwgLTB4ODAoJXIzMCkJQyBsb3cgcHJvZHVjdCB0byAgLTB4ODAuLi0weDc5CisKKwlkZXBkLHoJCW0wMzIsIDMxLCAzMiwgbWEwMDAKKwlsZGQJCS0weDI4KCVyMzApLCBwMTI4YgorCWV4dHJkLHUJCW0wMzIsIDMxLCAzMiwgbWEwNjQKKwlmc3RkCQklZnIzMSwgLTB4NjgoJXIzMCkJQyBoaWdoIHByb2R1Y3QgdG8gLTB4NjguLi0weDYxCisKKwlkZXBkCQltMDk2LCAzMSwgMzIsIG1hMDY0CisJbGRkCQktMHg2MCglcjMwKSwgcDEyOGMKKwlleHRyZCx1CQltMDk2LCAzMSwgMzIsIG1hMTI4CisJZnN0ZAkJJWZyMjIsIC0weDQwKCVyMzApCUMgbG93IHByb2R1Y3QgdG8gIC0weDQwLi4tMHgzOQorCisJZGVwZAkJbTE2MCwgMzEsIDMyLCBtYTEyOAorCWxkZAkJLTB4NDgoJXIzMCksIHAxOTJjCisJZXh0cmQsdQkJbTE2MCwgMzEsIDMyLCBtYTE5MgorCWZzdGQJCSVmcjIzLCAtMHgyOCglcjMwKQlDIGhpZ2ggcHJvZHVjdCB0byAtMHgyOC4uLTB4MjEKKworCWRlcGQJCW0yMjQsIDMxLCAzMiwgbWExOTIKKwlsZGQJCS0weDIwKCVyMzApLCBwMTkyZAorCWV4dHJkLHUJCW0yMjQsIDMxLCAzMiwgbWEyNTYKKwlmc3RkCQklZnIyNCwgLTB4NjAoJXIzMCkJQyBsb3cgcHJvZHVjdCB0byAgLTB4NjAuLi0weDU5CisKKwlkZXBkCQltMjg4LCAzMSwgMzIsIG1hMjU2CisJbGRkCQktMHg4OCglcjMwKSwgcDI1NmQKKwlhZGQJCWNsaW1iLCBwMDAwYSwgczAwMAorCWZzdGQJCSVmcjI1LCAtMHg0OCglcjMwKQlDIGhpZ2ggcHJvZHVjdCB0byAtMHg0OC4uLTB4NDEKKworCWFkZCxkYwkJcDA2NGEsIHAwNjRiLCBzMDY0CisJbGRkCQkwKHJwKSwgcjAwMAorCWFkZCxkYwkJcDEyOGIsIHAxMjhjLCBzMTI4CisJZnN0ZAkJJWZyMjYsIC0weDIwKCVyMzApCUMgbG93IHByb2R1Y3QgdG8gIC0weDIwLi4tMHgxOQorCisJYWRkLGRjCQlwMTkyYywgcDE5MmQsIHMxOTIKKwlsZGQJCTgocnApLCByMDY0CisJYWRkLGRjCQlwMjU2ZCwgJXIwLCBjbGltYgorCWZzdGQJCSVmcjI3LCAtMHg4OCglcjMwKQlDIGhpZ2ggcHJvZHVjdCB0byAtMHg4OC4uLTB4ODEKKworCWxkZAkJMTYocnApLCByMTI4CisJYWRkCQltYTAwMCwgczAwMCwgczAwMAlDIGFjY3VtIG1pZCAwCisJbGRkCQkyNChycCksIHIxOTIKKwlhZGQsZGMJCW1hMDY0LCBzMDY0LCBzMDY0CUMgYWNjdW0gbWlkIDEKKworCWFkZCxkYwkJbWExMjgsIHMxMjgsIHMxMjgJQyBhY2N1bSBtaWQgMgorCWZsZGQJCTAodXApLCAlZnI0CisJYWRkLGRjCQltYTE5MiwgczE5MiwgczE5MglDIGFjY3VtIG1pZCAzCisJZmxkZAkJOCh1cCksICVmcjUKKworCWFkZCxkYwkJbWEyNTYsIGNsaW1iLCBjbGltYgorCWZsZGQJCTE2KHVwKSwgJWZyNgorCWFkZAkJcjAwMCwgczAwMCwgczAwMAlDIGFjY3VtIHJsaW1iIDAKKwlmbGRkCQkyNCh1cCksICVmcjcKKworCWFkZCxkYwkJcjA2NCwgczA2NCwgczA2NAlDIGFjY3VtIHJsaW1iIDEKKwlhZGQsZGMJCXIxMjgsIHMxMjgsIHMxMjgJQyBhY2N1bSBybGltYiAyCisJc3RkCQlzMDAwLCAwKHJwKQorCisJYWRkLGRjCQlyMTkyLCBzMTkyLCBzMTkyCUMgYWNjdW0gcmxpbWIgMworCWFkZCxkYwkJJXIwLCBjbGltYiwgY2xpbWIKKwlzdGQJCXMwNjQsIDgocnApCisKKwl4bXB5dQkJJWZyOFIsICVmcjRMLCAlZnIyMgorCWxkZAkJLTB4NzgoJXIzMCksIHAwMzJhMQorCXhtcHl1CQklZnI4TCwgJWZyNFIsICVmcjIzCisJc3RkCQlzMTI4LCAxNihycCkKKworCXhtcHl1CQklZnI4UiwgJWZyNUwsICVmcjI0CisJbGRkCQktMHg3MCglcjMwKSwgcDAzMmEyCisJeG1weXUJCSVmcjhMLCAlZnI1UiwgJWZyMjUKKwlzdGQJCXMxOTIsIDI0KHJwKQorCisJeG1weXUJCSVmcjhSLCAlZnI2TCwgJWZyMjYKKwlsZGQJCS0weDM4KCVyMzApLCBwMDk2YjEKKwl4bXB5dQkJJWZyOEwsICVmcjZSLCAlZnIyNworCWZzdGQJCSVmcjIyLCAtMHg3OCglcjMwKQlDIG1pZCBwcm9kdWN0IHRvICAtMHg3OC4uLTB4NzEKKworCXhtcHl1CQklZnI4UiwgJWZyN0wsICVmcjI4CisJbGRkCQktMHgzMCglcjMwKSwgcDA5NmIyCisJeG1weXUJCSVmcjhMLCAlZnI3UiwgJWZyMjkKKwlmc3RkCQklZnIyMywgLTB4NzAoJXIzMCkJQyBtaWQgcHJvZHVjdCB0byAgLTB4NzAuLi0weDY5CisKKwl4bXB5dQkJJWZyOFIsICVmcjRSLCAlZnIzMAorCWxkZAkJLTB4NTgoJXIzMCksIHAxNjBjMQorCXhtcHl1CQklZnI4TCwgJWZyNEwsICVmcjMxCisJZnN0ZAkJJWZyMjQsIC0weDM4KCVyMzApCUMgbWlkIHByb2R1Y3QgdG8gIC0weDM4Li4tMHgzMQorCisJeG1weXUJCSVmcjhSLCAlZnI1UiwgJWZyMjIKKwlsZGQJCS0weDUwKCVyMzApLCBwMTYwYzIKKwl4bXB5dQkJJWZyOEwsICVmcjVMLCAlZnIyMworCWZzdGQJCSVmcjI1LCAtMHgzMCglcjMwKQlDIG1pZCBwcm9kdWN0IHRvICAtMHgzMC4uLTB4MjkKKworCXhtcHl1CQklZnI4UiwgJWZyNlIsICVmcjI0CisJbGRkCQktMHgxOCglcjMwKSwgcDIyNGQxCisJeG1weXUJCSVmcjhMLCAlZnI2TCwgJWZyMjUKKwlmc3RkCQklZnIyNiwgLTB4NTgoJXIzMCkJQyBtaWQgcHJvZHVjdCB0byAgLTB4NTguLi0weDUxCisKKwl4bXB5dQkJJWZyOFIsICVmcjdSLCAlZnIyNgorCWxkZAkJLTB4MTAoJXIzMCksIHAyMjRkMgorCWZzdGQJCSVmcjI3LCAtMHg1MCglcjMwKQlDIG1pZCBwcm9kdWN0IHRvICAtMHg1MC4uLTB4NDkKKwl4bXB5dQkJJWZyOEwsICVmcjdMLCAlZnIyNworCisJYWRkaWIsPD4JLTEsIG4sIEwobG9vcCkKKwlsZG8JCTMyKHJwKSwgcnAKKworTERFRihlbmQyKQorCWFkZAkJcDAzMmExLCBwMDMyYTIsIG0wMzIKKwlsZGQJCS0weDgwKCVyMzApLCBwMDAwYQorCWFkZCxkYwkJcDA5NmIxLCBwMDk2YjIsIG0wOTYKKwlmc3RkCQklZnIyOCwgLTB4MTgoJXIzMCkJQyBtaWQgcHJvZHVjdCB0byAgLTB4MTguLi0weDExCisJYWRkLGRjCQlwMTYwYzEsIHAxNjBjMiwgbTE2MAorCWxkZAkJLTB4NjgoJXIzMCksIHAwNjRhCisJYWRkLGRjCQlwMjI0ZDEsIHAyMjRkMiwgbTIyNAorCWZzdGQJCSVmcjI5LCAtMHgxMCglcjMwKQlDIG1pZCBwcm9kdWN0IHRvICAtMHgxMC4uLTB4MDkKKwlhZGQsZGMJCSVyMCwgJXIwLCBtMjg4CisJbGRkCQktMHg0MCglcjMwKSwgcDA2NGIKKwlmc3RkCQklZnIzMCwgLTB4ODAoJXIzMCkJQyBsb3cgcHJvZHVjdCB0byAgLTB4ODAuLi0weDc5CisJZGVwZCx6CQltMDMyLCAzMSwgMzIsIG1hMDAwCisJbGRkCQktMHgyOCglcjMwKSwgcDEyOGIKKwlleHRyZCx1CQltMDMyLCAzMSwgMzIsIG1hMDY0CisJZnN0ZAkJJWZyMzEsIC0weDY4KCVyMzApCUMgaGlnaCBwcm9kdWN0IHRvIC0weDY4Li4tMHg2MQorCWRlcGQJCW0wOTYsIDMxLCAzMiwgbWEwNjQKKwlsZGQJCS0weDYwKCVyMzApLCBwMTI4YworCWV4dHJkLHUJCW0wOTYsIDMxLCAzMiwgbWExMjgKKwlmc3RkCQklZnIyMiwgLTB4NDAoJXIzMCkJQyBsb3cgcHJvZHVjdCB0byAgLTB4NDAuLi0weDM5CisJZGVwZAkJbTE2MCwgMzEsIDMyLCBtYTEyOAorCWxkZAkJLTB4NDgoJXIzMCksIHAxOTJjCisJZXh0cmQsdQkJbTE2MCwgMzEsIDMyLCBtYTE5MgorCWZzdGQJCSVmcjIzLCAtMHgyOCglcjMwKQlDIGhpZ2ggcHJvZHVjdCB0byAtMHgyOC4uLTB4MjEKKwlkZXBkCQltMjI0LCAzMSwgMzIsIG1hMTkyCisJbGRkCQktMHgyMCglcjMwKSwgcDE5MmQKKwlleHRyZCx1CQltMjI0LCAzMSwgMzIsIG1hMjU2CisJZnN0ZAkJJWZyMjQsIC0weDYwKCVyMzApCUMgbG93IHByb2R1Y3QgdG8gIC0weDYwLi4tMHg1OQorCWRlcGQJCW0yODgsIDMxLCAzMiwgbWEyNTYKKwlsZGQJCS0weDg4KCVyMzApLCBwMjU2ZAorCWFkZAkJY2xpbWIsIHAwMDBhLCBzMDAwCisJZnN0ZAkJJWZyMjUsIC0weDQ4KCVyMzApCUMgaGlnaCBwcm9kdWN0IHRvIC0weDQ4Li4tMHg0MQorCWFkZCxkYwkJcDA2NGEsIHAwNjRiLCBzMDY0CisJbGRkCQkwKHJwKSwgcjAwMAorCWFkZCxkYwkJcDEyOGIsIHAxMjhjLCBzMTI4CisJZnN0ZAkJJWZyMjYsIC0weDIwKCVyMzApCUMgbG93IHByb2R1Y3QgdG8gIC0weDIwLi4tMHgxOQorCWFkZCxkYwkJcDE5MmMsIHAxOTJkLCBzMTkyCisJbGRkCQk4KHJwKSwgcjA2NAorCWFkZCxkYwkJcDI1NmQsICVyMCwgY2xpbWIKKwlmc3RkCQklZnIyNywgLTB4ODgoJXIzMCkJQyBoaWdoIHByb2R1Y3QgdG8gLTB4ODguLi0weDgxCisJbGRkCQkxNihycCksIHIxMjgKKwlhZGQJCW1hMDAwLCBzMDAwLCBzMDAwCUMgYWNjdW0gbWlkIDAKKwlsZGQJCTI0KHJwKSwgcjE5MgorCWFkZCxkYwkJbWEwNjQsIHMwNjQsIHMwNjQJQyBhY2N1bSBtaWQgMQorCWFkZCxkYwkJbWExMjgsIHMxMjgsIHMxMjgJQyBhY2N1bSBtaWQgMgorCWFkZCxkYwkJbWExOTIsIHMxOTIsIHMxOTIJQyBhY2N1bSBtaWQgMworCWFkZCxkYwkJbWEyNTYsIGNsaW1iLCBjbGltYgorCWFkZAkJcjAwMCwgczAwMCwgczAwMAlDIGFjY3VtIHJsaW1iIDAKKwlhZGQsZGMJCXIwNjQsIHMwNjQsIHMwNjQJQyBhY2N1bSBybGltYiAxCisJYWRkLGRjCQlyMTI4LCBzMTI4LCBzMTI4CUMgYWNjdW0gcmxpbWIgMgorCXN0ZAkJczAwMCwgMChycCkKKwlhZGQsZGMJCXIxOTIsIHMxOTIsIHMxOTIJQyBhY2N1bSBybGltYiAzCisJYWRkLGRjCQklcjAsIGNsaW1iLCBjbGltYgorCXN0ZAkJczA2NCwgOChycCkKKwlsZGQJCS0weDc4KCVyMzApLCBwMDMyYTEKKwlzdGQJCXMxMjgsIDE2KHJwKQorCWxkZAkJLTB4NzAoJXIzMCksIHAwMzJhMgorCXN0ZAkJczE5MiwgMjQocnApCisJbGRkCQktMHgzOCglcjMwKSwgcDA5NmIxCisJbGRkCQktMHgzMCglcjMwKSwgcDA5NmIyCisJbGRkCQktMHg1OCglcjMwKSwgcDE2MGMxCisJbGRkCQktMHg1MCglcjMwKSwgcDE2MGMyCisJbGRkCQktMHgxOCglcjMwKSwgcDIyNGQxCisJbGRkCQktMHgxMCglcjMwKSwgcDIyNGQyCisJbGRvCQkzMihycCksIHJwCisKK0xERUYoZW5kMSkKKwlhZGQJCXAwMzJhMSwgcDAzMmEyLCBtMDMyCisJbGRkCQktMHg4MCglcjMwKSwgcDAwMGEKKwlhZGQsZGMJCXAwOTZiMSwgcDA5NmIyLCBtMDk2CisJYWRkLGRjCQlwMTYwYzEsIHAxNjBjMiwgbTE2MAorCWxkZAkJLTB4NjgoJXIzMCksIHAwNjRhCisJYWRkLGRjCQlwMjI0ZDEsIHAyMjRkMiwgbTIyNAorCWFkZCxkYwkJJXIwLCAlcjAsIG0yODgKKwlsZGQJCS0weDQwKCVyMzApLCBwMDY0YgorCWRlcGQsegkJbTAzMiwgMzEsIDMyLCBtYTAwMAorCWxkZAkJLTB4MjgoJXIzMCksIHAxMjhiCisJZXh0cmQsdQkJbTAzMiwgMzEsIDMyLCBtYTA2NAorCWRlcGQJCW0wOTYsIDMxLCAzMiwgbWEwNjQKKwlsZGQJCS0weDYwKCVyMzApLCBwMTI4YworCWV4dHJkLHUJCW0wOTYsIDMxLCAzMiwgbWExMjgKKwlkZXBkCQltMTYwLCAzMSwgMzIsIG1hMTI4CisJbGRkCQktMHg0OCglcjMwKSwgcDE5MmMKKwlleHRyZCx1CQltMTYwLCAzMSwgMzIsIG1hMTkyCisJZGVwZAkJbTIyNCwgMzEsIDMyLCBtYTE5MgorCWxkZAkJLTB4MjAoJXIzMCksIHAxOTJkCisJZXh0cmQsdQkJbTIyNCwgMzEsIDMyLCBtYTI1NgorCWRlcGQJCW0yODgsIDMxLCAzMiwgbWEyNTYKKwlsZGQJCS0weDg4KCVyMzApLCBwMjU2ZAorCWFkZAkJY2xpbWIsIHAwMDBhLCBzMDAwCisJYWRkLGRjCQlwMDY0YSwgcDA2NGIsIHMwNjQKKwlsZGQJCTAocnApLCByMDAwCisJYWRkLGRjCQlwMTI4YiwgcDEyOGMsIHMxMjgKKwlhZGQsZGMJCXAxOTJjLCBwMTkyZCwgczE5MgorCWxkZAkJOChycCksIHIwNjQKKwlhZGQsZGMJCXAyNTZkLCAlcjAsIGNsaW1iCisJbGRkCQkxNihycCksIHIxMjgKKwlhZGQJCW1hMDAwLCBzMDAwLCBzMDAwCUMgYWNjdW0gbWlkIDAKKwlsZGQJCTI0KHJwKSwgcjE5MgorCWFkZCxkYwkJbWEwNjQsIHMwNjQsIHMwNjQJQyBhY2N1bSBtaWQgMQorCWFkZCxkYwkJbWExMjgsIHMxMjgsIHMxMjgJQyBhY2N1bSBtaWQgMgorCWFkZCxkYwkJbWExOTIsIHMxOTIsIHMxOTIJQyBhY2N1bSBtaWQgMworCWFkZCxkYwkJbWEyNTYsIGNsaW1iLCBjbGltYgorCWFkZAkJcjAwMCwgczAwMCwgczAwMAlDIGFjY3VtIHJsaW1iIDAKKwlhZGQsZGMJCXIwNjQsIHMwNjQsIHMwNjQJQyBhY2N1bSBybGltYiAxCisJYWRkLGRjCQlyMTI4LCBzMTI4LCBzMTI4CUMgYWNjdW0gcmxpbWIgMgorCXN0ZAkJczAwMCwgMChycCkKKwlhZGQsZGMJCXIxOTIsIHMxOTIsIHMxOTIJQyBhY2N1bSBybGltYiAzCisJYWRkLGRjCQklcjAsIGNsaW1iLCBjbGltYgorCXN0ZAkJczA2NCwgOChycCkKKwlzdGQJCXMxMjgsIDE2KHJwKQorCXN0ZAkJczE5MiwgMjQocnApCisKKwlsZGQJCS0weGIwKCVyMzApLCAlcjEzCisJbGRkCQktMHhiOCglcjMwKSwgJXIxMgorCWxkZAkJLTB4YzAoJXIzMCksICVyMTEKKwlsZGQJCS0weGM4KCVyMzApLCAlcjEwCisJbGRkCQktMHhkMCglcjMwKSwgJXI5CisJbGRkCQktMHhkOCglcjMwKSwgJXI4CisJbGRkCQktMHhlMCglcjMwKSwgJXI3CisJbGRkCQktMHhlOCglcjMwKSwgJXI2CitMREVGKGRvbmUpCitpZmRlZihgSEFWRV9BQklfMl8wdycsCitgCWNvcHkJCWNsaW1iLCAlcjI4CisnLGAJZXh0cmQsdQkJY2xpbWIsIDYzLCAzMiwgJXIyOQorCWV4dHJkLHUJCWNsaW1iLCAzMSwgMzIsICVyMjgKKycpCisJbGRkCQktMHhmMCglcjMwKSwgJXI1CisJbGRkCQktMHhmOCglcjMwKSwgJXI0CisJYnZlCQkoJXIyKQorCWxkZCxtYgkJLTB4MTAwKCVyMzApLCAlcjMKK0VQSUxPR1VFKG1wbl9hZGRtdWxfMSkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcGE2NC9hb3JzX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wYTY0L2FvcnNfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI0NTM2ZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcGE2NC9hb3JzX24uYXNtCkBAIC0wLDAgKzEsMTMwIEBACitkbmwgIEhQLVBBIDIuMCBtcG5fYWRkX24sIG1wbl9zdWJfbgorCitkbmwgIENvcHlyaWdodCAxOTk3LCAyMDAwLCAyMDAyLCAyMDAzLCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK2RubCAgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworZG5sICBUaGlzIHJ1bnMgYXQgMiBjeWNsZXMvbGltYiBvbiBQQTgwMDAgYW5kIDEuNjg3NSBjeWNsZXMvbGltYiBvbiBQQTg1MDAuICBJdAorZG5sICBzaG91bGQgYmUgcG9zc2libGUgdG8gcmVhY2ggdGhlIGNhY2hlIGJhbmR3aWR0aCAxLjUgY3ljbGVzL2xpbWIgYXQgbGVhc3QKK2RubCAgd2l0aCBQQTg1MDAuICBUaGUgcHJvYmxlbSBub3cgaXMgc3RhbGxpbmcgb2YgdGhlIGZpcnN0IEFERCxEQyBhZnRlciBMRE8sCitkbmwgIHdoZXJlIHRoZSBwcm9jZXNzb3IgZ2V0cyBjb25mdXNlZCBhYm91dCB3aGVyZSBjYXJyeSBjb21lcyBmcm9tLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitkbmwgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsYCVyMjYnKQorZGVmaW5lKGB1cCcsYCVyMjUnKQorZGVmaW5lKGB2cCcsYCVyMjQnKQorZGVmaW5lKGBuJyxgJXIyMycpCisKK2lmZGVmKGBPUEVSQVRJT05fYWRkX24nLCBgCisJZGVmaW5lKEFEQ1NCQywJICAgICAgYGFkZCxkYycpCisJZGVmaW5lKElOSVRDWSwJICAgICAgYGFkZGkgLTEsJXIyMiwlcjAnKQorCWRlZmluZShmdW5jLAkgICAgICBtcG5fYWRkX24pCisJZGVmaW5lKGZ1bmNfbmMsCSAgICAgIG1wbl9hZGRfbmMpJykKK2lmZGVmKGBPUEVSQVRJT05fc3ViX24nLCBgCisJZGVmaW5lKEFEQ1NCQywJICAgICAgYHN1YixkYicpCisJZGVmaW5lKElOSVRDWSwJICAgICAgYHN1YmkgMCwlcjIyLCVyMCcpCisJZGVmaW5lKGZ1bmMsCSAgICAgIG1wbl9zdWJfbikKKwlkZWZpbmUoZnVuY19uYywJICAgICAgbXBuX3N1Yl9uYyknKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRfbiBtcG5fYWRkX25jIG1wbl9zdWJfbiBtcG5fc3ViX25jKQorCitpZmRlZihgSEFWRV9BQklfMl8wdycsCitgICAgICAgIC5sZXZlbCAgMi4wdworJyxgICAgICAubGV2ZWwgIDIuMAorJykKK1BST0xPR1VFKGZ1bmNfbmMpCitpZmRlZihgSEFWRV9BQklfMl8wdycsCitgCWIJCUwoY29tKQorCW5vcAorJyxgCWIJCUwoY29tKQorCWxkdwkJLTUyKCVyMzApLCAlcjIyCisnKQorRVBJTE9HVUUoKQorUFJPTE9HVUUoZnVuYykKKwlsZGkJCTAsICVyMjIKK0xERUYoY29tKQorCXN1YgkJJXIwLCBuLCAlcjIxCisJZGVwdyx6CQklcjIxLCAzMCwgMywgJXIyOAlDIHIyOCA9IDIgKiAoLW4gJiA3KQorCWRlcHcsegkJJXIyMSwgMjgsIDMsICVyMjEJQyByMjEgPSA4ICogKC1uICYgNykKKwlzdWIJCXVwLCAlcjIxLCB1cAkJQyBvZmZzZXQgdXAKKwlzdWIJCXZwLCAlcjIxLCB2cAkJQyBvZmZzZXQgdnAKKwlzdWIJCXJwLCAlcjIxLCBycAkJQyBvZmZzZXQgcnAKKwlibHIJCSVyMjgsICVyMAkJQyBicmFuY2ggaW50byBsb29wCisJSU5JVENZCisKK0xERUYobG9vcCkKKwlsZGQJCTAodXApLCAlcjIwCisJbGRkCQkwKHZwKSwgJXIzMQorCUFEQ1NCQwkJJXIyMCwgJXIzMSwgJXIyMAorCXN0ZAkJJXIyMCwgMChycCkKK0xERUYoNykJbGRkCQk4KHVwKSwgJXIyMQorCWxkZAkJOCh2cCksICVyMTkKKwlBRENTQkMJCSVyMjEsICVyMTksICVyMjEKKwlzdGQJCSVyMjEsIDgocnApCitMREVGKDYpCWxkZAkJMTYodXApLCAlcjIwCisJbGRkCQkxNih2cCksICVyMzEKKwlBRENTQkMJCSVyMjAsICVyMzEsICVyMjAKKwlzdGQJCSVyMjAsIDE2KHJwKQorTERFRig1KQlsZGQJCTI0KHVwKSwgJXIyMQorCWxkZAkJMjQodnApLCAlcjE5CisJQURDU0JDCQklcjIxLCAlcjE5LCAlcjIxCisJc3RkCQklcjIxLCAyNChycCkKK0xERUYoNCkJbGRkCQkzMih1cCksICVyMjAKKwlsZGQJCTMyKHZwKSwgJXIzMQorCUFEQ1NCQwkJJXIyMCwgJXIzMSwgJXIyMAorCXN0ZAkJJXIyMCwgMzIocnApCitMREVGKDMpCWxkZAkJNDAodXApLCAlcjIxCisJbGRkCQk0MCh2cCksICVyMTkKKwlBRENTQkMJCSVyMjEsICVyMTksICVyMjEKKwlzdGQJCSVyMjEsIDQwKHJwKQorTERFRigyKQlsZGQJCTQ4KHVwKSwgJXIyMAorCWxkZAkJNDgodnApLCAlcjMxCisJQURDU0JDCQklcjIwLCAlcjMxLCAlcjIwCisJc3RkCQklcjIwLCA0OChycCkKK0xERUYoMSkJbGRkCQk1Nih1cCksICVyMjEKKwlsZGQJCTU2KHZwKSwgJXIxOQorCUFEQ1NCQwkJJXIyMSwgJXIxOSwgJXIyMQorCWxkbwkJNjQodXApLCB1cAorCXN0ZAkJJXIyMSwgNTYocnApCisJbGRvCQk2NCh2cCksIHZwCisJYWRkaWIsPgkJLTgsIG4sIEwobG9vcCkKKwlsZG8JCTY0KHJwKSwgcnAKKworCWFkZCxkYwkJJXIwLCAlcjAsICVyMjkKK2lmZGVmKGBPUEVSQVRJT05fc3ViX24nLGAKKwlzdWJpCQkxLCAlcjI5LCAlcjI5CisnKQorCWJ2ZQkJKCVyMikKK2lmZGVmKGBIQVZFX0FCSV8yXzB3JywKK2AJY29weQkJJXIyOSwgJXIyOAorJyxgCWxkaQkJMCwgJXIyOAorJykKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcGE2NC9hb3JzbHNoMV9uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcGE2NC9hb3JzbHNoMV9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTU1ZGRlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wYTY0L2FvcnNsc2gxX24uYXNtCkBAIC0wLDAgKzEsMjI4IEBACitkbmwgIFBBNjQgbXBuX2FkZGxzaDFfbi9tcG5fc3VibHNoMV9uIC0tIHJwW10gPSB1cFtdICstICh2cFtdIDw8IDEpLgorCitkbmwgIENvcHlyaWdodCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJCSAgICBjeWNsZXMvbGltYgorQyA4MDAwLDgyMDA6CQkyCitDIDg1MDAsODYwMCw4NzAwOgkxLjc1CisKK0MgVE9ETworQyAgKiBXcml0ZSBzcGVjaWFsIGZlZWQtaW4gY29kZSBmb3IgZWFjaCAobiBtb2QgOCkuIChTZWUgdGhlIGlhNjQgY29kZS4pCitDICAqIFRyeSB0byBtYWtlIHRoaXMgcnVuIGF0IGNsb3NlciB0byAxLjUgYy9sLgorQyAgKiBTZXQgdXAgcmVnaXN0ZXIgYWxpYXNlcyAoZGVmaW5lKGB1MCcsYCVyMTknKSkuCitDICAqIEV4cGxpY2l0bHkgYWxpZ24gbG9vcC4KKworZG5sIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLGAlcjI2JykKK2RlZmluZShgdXAnLGAlcjI1JykKK2RlZmluZShgdnAnLGAlcjI0JykKK2RlZmluZShgbicsYCVyMjMnKQorCitpZmRlZihgT1BFUkFUSU9OX2FkZGxzaDFfbicsYAorICBkZWZpbmUoQURDU0JDLAlgYWRkLGRjJykKKyAgZGVmaW5lKElOSVRDLAkJYGxkaQkwLCcpCisgIGRlZmluZShmdW5jLCBtcG5fYWRkbHNoMV9uKQorJykKK2lmZGVmKGBPUEVSQVRJT05fc3VibHNoMV9uJyxgCisgIGRlZmluZShBRENTQkMsCWBzdWIsZGInKQorICBkZWZpbmUoSU5JVEMsCQlgbGRpCTEsJykKKyAgZGVmaW5lKGZ1bmMsIG1wbl9zdWJsc2gxX24pCisnKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRsc2gxX24gbXBuX3N1YmxzaDFfbikKKworaWZkZWYoYEhBVkVfQUJJXzJfMHcnLGAKKyAgZGVmaW5lKExFVkVMLAkJYC5sZXZlbCAyLjB3JykKKyAgZGVmaW5lKFJFVFJFRywJYCVyMjgnKQorICBkZWZpbmUoQ0xSUkVUMSwJYGRubCcpCisnKQoraWZkZWYoYEhBVkVfQUJJXzJfMG4nLGAKKyAgZGVmaW5lKExFVkVMLAkJYC5sZXZlbCAyLjAnKQorICBkZWZpbmUoUkVUUkVHLAlgJXIyOScpCisgIGRlZmluZShDTFJSRVQxLAlgbGRpCTAsICVyMjgnKQorJykKKworCUxFVkVMCitQUk9MT0dVRShmdW5jKQorCXN0ZCxtYQkJJXIzLCAweDEwMCglcjMwKQlDIHNhdmUgcmVnCisKKwlJTklUQwkJJXIxCQkJQyBpbml0IHNhdmVkIGN5CisKK0MgUHJpbWl0aXZlIGNvZGUgZm9yIHRoZSBmaXJzdCAobiBtb2QgOCkgbGltYnM6CisJZXh0cmQsdQkJbiwgNjMsIDMsICVyMjIJCUMgY291bnQgZm9yIGxvb3AwCisJY29taWIsPQkJMCwgJXIyMiwgTCh1bnJvbGxlZCkJQyBza2lwIGxvb3AwPworCWNvcHkJCSVyMCwgJXIyOAorTERFRihsb29wMCkKKwlsZGQJMCh2cCksICVyMjEKKwlsZG8JCTgodnApLCB2cAorCWxkZAkwKHVwKSwgJXIxOQorCWxkbwkJOCh1cCksIHVwCisJc2hycGQJJXIyMSwgJXIyOCwgNjMsICVyMzEKKwlhZGRpCQktMSwgJXIxLCAlcjAJCUMgcmVzdG9yZSBjeQorCUFEQ1NCQwklcjE5LCAlcjMxLCAlcjI5CisJc3RkCSVyMjksIDAocnApCisJYWRkLGRjCQklcjAsICVyMCwgJXIxCQlDIHNhdmUgY3kKKwljb3B5CSVyMjEsICVyMjgKKwlhZGRpYiw+CQktMSwgJXIyMiwgTChsb29wMCkKKwlsZG8JCTgocnApLCBycAorCisJYWRkaWIsPj0JLTgsIG4sIEwodW5yb2xsZWQpCisJYWRkaQkJLTEsICVyMSwgJXIwCQlDIHJlc3RvcmUgY3kKKworCXNocnBkCSVyMCwgJXIyOCwgNjMsICVyMjgKKwlBRENTQkMJJXIwLCAlcjI4LCBSRVRSRUcKK2lmZGVmKGBPUEVSQVRJT05fc3VibHNoMV9uJywKK2AJc3ViCSVyMCwgUkVUUkVHLCBSRVRSRUcnKQorCUNMUlJFVDEKKworCWJ2ZQkJKCVyMikKKwlsZGQsbWIJCS0weDEwMCglcjMwKSwgJXIzCisKKworTERFRih1bnJvbGxlZCkKKwlzdGQJCSVyNCwgLTB4ZjgoJXIzMCkJQyBzYXZlIHJlZworCWxkZAkwKHZwKSwgJXI0CisJc3RkCQklcjUsIC0weGYwKCVyMzApCUMgc2F2ZSByZWcKKwlsZGQJOCh2cCksICVyNQorCXN0ZAkJJXI2LCAtMHhlOCglcjMwKQlDIHNhdmUgcmVnCisJbGRkCTE2KHZwKSwgJXI2CisJc3RkCQklcjcsIC0weGUwKCVyMzApCUMgc2F2ZSByZWcKKworCWxkZAkyNCh2cCksICVyNworCXNocnBkCSVyNCwgJXIyOCwgNjMsICVyMzEKKwlzdGQJCSVyOCwgLTB4ZDgoJXIzMCkJQyBzYXZlIHJlZworCWxkZAkzMih2cCksICVyOAorCXNocnBkCSVyNSwgJXI0LCA2MywgJXI0CisJc3RkCQklcjksIC0weGQwKCVyMzApCUMgc2F2ZSByZWcKKwlsZGQJNDAodnApLCAlcjkKKwlzaHJwZAklcjYsICVyNSwgNjMsICVyNQorCWxkZAk0OCh2cCksICVyMworCXNocnBkCSVyNywgJXI2LCA2MywgJXI2CisJbGRkCTU2KHZwKSwgJXIyOAorCXNocnBkCSVyOCwgJXI3LCA2MywgJXI3CisJbGRkCTAodXApLCAlcjE5CisJc2hycGQJJXI5LCAlcjgsIDYzLCAlcjgKKwlsZGQJOCh1cCksICVyMjAKKwlzaHJwZAklcjMsICVyOSwgNjMsICVyOQorCWxkZAkxNih1cCksICVyMjEKKwlzaHJwZAklcjI4LCAlcjMsIDYzLCAlcjMKKwlsZGQJMjQodXApLCAlcjIyCisKKwlub3AJCQkJCUMgYWxpZ25tZW50IEZJWE1FCisJYWRkaWIsPD0JLTgsIG4sIEwoZW5kKQorCWFkZGkJCS0xLCAlcjEsICVyMAkJQyByZXN0b3JlIGN5CitMREVGKGxvb3ApCisJQURDU0JDCSVyMTksICVyMzEsICVyMjkKKwlsZGQJMzIodXApLCAlcjE5CisJc3RkCSVyMjksIDAocnApCisJQURDU0JDCSVyMjAsICVyNCwgJXIyOQorCWxkZAk0MCh1cCksICVyMjAKKwlzdGQJJXIyOSwgOChycCkKKwlBRENTQkMJJXIyMSwgJXI1LCAlcjI5CisJbGRkCTQ4KHVwKSwgJXIyMQorCXN0ZAklcjI5LCAxNihycCkKKwlBRENTQkMJJXIyMiwgJXI2LCAlcjI5CisJbGRkCTU2KHVwKSwgJXIyMgorCXN0ZAklcjI5LCAyNChycCkKKwlBRENTQkMJJXIxOSwgJXI3LCAlcjI5CisJbGRkCTY0KHZwKSwgJXI0CisJc3RkCSVyMjksIDMyKHJwKQorCUFEQ1NCQwklcjIwLCAlcjgsICVyMjkKKwlsZGQJNzIodnApLCAlcjUKKwlzdGQJJXIyOSwgNDAocnApCisJQURDU0JDCSVyMjEsICVyOSwgJXIyOQorCWxkZAk4MCh2cCksICVyNgorCXN0ZAklcjI5LCA0OChycCkKKwlBRENTQkMJJXIyMiwgJXIzLCAlcjI5CisJc3RkCSVyMjksIDU2KHJwKQorCisJYWRkLGRjCQklcjAsICVyMCwgJXIxCQlDIHNhdmUgY3kKKworCWxkZAk4OCh2cCksICVyNworCXNocnBkCSVyNCwgJXIyOCwgNjMsICVyMzEKKwlsZGQJOTYodnApLCAlcjgKKwlzaHJwZAklcjUsICVyNCwgNjMsICVyNAorCWxkZAkxMDQodnApLCAlcjkKKwlzaHJwZAklcjYsICVyNSwgNjMsICVyNQorCWxkZAkxMTIodnApLCAlcjMKKwlzaHJwZAklcjcsICVyNiwgNjMsICVyNgorCWxkZAkxMjAodnApLCAlcjI4CisJc2hycGQJJXI4LCAlcjcsIDYzLCAlcjcKKwlsZGQJNjQodXApLCAlcjE5CisJc2hycGQJJXI5LCAlcjgsIDYzLCAlcjgKKwlsZGQJNzIodXApLCAlcjIwCisJc2hycGQJJXIzLCAlcjksIDYzLCAlcjkKKwlsZGQJODAodXApLCAlcjIxCisJc2hycGQJJXIyOCwgJXIzLCA2MywgJXIzCisJbGRkCTg4KHVwKSwgJXIyMgorCisJbGRvCQk2NCh2cCksIHZwCisJbGRvCQk2NChycCksIHJwCisJbGRvCQk2NCh1cCksIHVwCisJYWRkaWIsPgkJLTgsIG4sIEwobG9vcCkKKwlhZGRpCQktMSwgJXIxLCAlcjAJCUMgcmVzdG9yZSBjeQorTERFRihlbmQpCisJQURDU0JDCSVyMTksICVyMzEsICVyMjkKKwlsZGQJMzIodXApLCAlcjE5CisJc3RkCSVyMjksIDAocnApCisJQURDU0JDCSVyMjAsICVyNCwgJXIyOQorCWxkZAk0MCh1cCksICVyMjAKKwlzdGQJJXIyOSwgOChycCkKKwlBRENTQkMJJXIyMSwgJXI1LCAlcjI5CisJbGRkCTQ4KHVwKSwgJXIyMQorCXN0ZAklcjI5LCAxNihycCkKKwlBRENTQkMJJXIyMiwgJXI2LCAlcjI5CisJbGRkCTU2KHVwKSwgJXIyMgorCXN0ZAklcjI5LCAyNChycCkKKwlBRENTQkMJJXIxOSwgJXI3LCAlcjI5CisJbGRkCQktMHhmOCglcjMwKSwgJXI0CUMgcmVzdG9yZSByZWcKKwlzdGQJJXIyOSwgMzIocnApCisJQURDU0JDCSVyMjAsICVyOCwgJXIyOQorCWxkZAkJLTB4ZjAoJXIzMCksICVyNQlDIHJlc3RvcmUgcmVnCisJc3RkCSVyMjksIDQwKHJwKQorCUFEQ1NCQwklcjIxLCAlcjksICVyMjkKKwlsZGQJCS0weGU4KCVyMzApLCAlcjYJQyByZXN0b3JlIHJlZworCXN0ZAklcjI5LCA0OChycCkKKwlBRENTQkMJJXIyMiwgJXIzLCAlcjI5CisJbGRkCQktMHhlMCglcjMwKSwgJXI3CUMgcmVzdG9yZSByZWcKKwlzdGQJJXIyOSwgNTYocnApCisKKwlzaHJwZAklcjAsICVyMjgsIDYzLCAlcjI4CisJbGRkCQktMHhkOCglcjMwKSwgJXI4CUMgcmVzdG9yZSByZWcKKwlBRENTQkMJJXIwLCAlcjI4LCBSRVRSRUcKK2lmZGVmKGBPUEVSQVRJT05fc3VibHNoMV9uJywKK2AJc3ViCSVyMCwgUkVUUkVHLCBSRVRSRUcnKQorCUNMUlJFVDEKKworCWxkZAkJLTB4ZDAoJXIzMCksICVyOQlDIHJlc3RvcmUgcmVnCisJYnZlCQkoJXIyKQorCWxkZCxtYgkJLTB4MTAwKCVyMzApLCAlcjMJQyByZXN0b3JlIHJlZworRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wYTY0L2dtcC1tcGFyYW0uaCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcGE2NC9nbXAtbXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI3MTljMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcGE2NC9nbXAtbXBhcmFtLmgKQEAgLTAsMCArMSwyNDcgQEAKKy8qIGdtcC1tcGFyYW0uaCAtLSBDb21waWxlci9tYWNoaW5lIHBhcmFtZXRlciBoZWFkZXIgZmlsZS4KKworQ29weXJpZ2h0IDE5OTEsIDE5OTMsIDE5OTQsIDE5OTktMjAwNCwgMjAwOC0yMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgNjQKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgOAorCisvKiA0NDBNSHogUEE4MjAwICovCisKKyNkZWZpbmUgRElWUkVNXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBESVZSRU1fMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PRF8xXzFQX01FVEhPRCAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNAorI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAxMAorI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAgMCAgLyogbmV2ZXIgbXBuX21vZF8xXzFwICovCisjZGVmaW5lIE1PRF8xXzJfVE9fTU9EXzFfNF9USFJFU0hPTEQgICAgICAgIDE0CisjZGVmaW5lIFBSRUlOVl9NT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgIDExCisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIERJVl9RUl8yX1BJMl9USFJFU0hPTEQgICAgICAgICAgICAgIDIxCisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKworI2RlZmluZSBNVUxfVE9PTTIyX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzMQorI2RlZmluZSBNVUxfVE9PTTMzX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDExNAorI2RlZmluZSBNVUxfVE9PTTQ0X1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE3OQorI2RlZmluZSBNVUxfVE9PTTZIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDIyMgorI2RlZmluZSBNVUxfVE9PTThIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDI5NgorCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTQzX1RIUkVTSE9MRCAgICAgMTMwCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgMjI5CisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgMTI5CisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTYzX1RIUkVTSE9MRCAgICAgIDU0CisKKyNkZWZpbmUgU1FSX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNTgKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNTMKKyNkZWZpbmUgU1FSX1RPT000X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyNzgKKyNkZWZpbmUgU1FSX1RPT002X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBTUVJfVE9PTThfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisKKyNkZWZpbmUgTVVMTUlEX1RPT000Ml9USFJFU0hPTEQgICAgICAgICAgICAgNTYKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxNQorI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxOQorCisjZGVmaW5lIFBPV01fU0VDX1RBQkxFICAyLDIzLDIyOCwxMDg0CisKKyNkZWZpbmUgTVVMX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICAzMzYgIC8qIGsgPSA1ICovCisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICAzMzYsIDV9LCB7ICAgICAxMSwgNH0sIHsgICAgIDIzLCA1fSwgeyAgICAgMjEsIDZ9LCBcCisgICAgeyAgICAgMTEsIDV9LCB7ICAgICAyMywgNn0sIHsgICAgIDIxLCA3fSwgeyAgICAgMTEsIDZ9LCBcCisgICAgeyAgICAgMjMsIDd9LCB7ICAgICAxNSwgNn0sIHsgICAgIDMxLCA3fSwgeyAgICAgMjEsIDh9LCBcCisgICAgeyAgICAgMTEsIDd9LCB7ICAgICAyNCwgOH0sIHsgICAgIDEzLCA3fSwgeyAgICAgMjcsIDh9LCBcCisgICAgeyAgICAgMTUsIDd9LCB7ICAgICAzMSwgOH0sIHsgICAgIDE5LCA3fSwgeyAgICAgMzksIDh9LCBcCisgICAgeyAgICAgMjcsIDl9LCB7ICAgICAxNSwgOH0sIHsgICAgIDMzLCA5fSwgeyAgICAgMTksIDh9LCBcCisgICAgeyAgICAgMzksIDl9LCB7ICAgICAyMywgOH0sIHsgICAgIDQ3LCA5fSwgeyAgICAgMjcsMTB9LCBcCisgICAgeyAgICAgMTUsIDl9LCB7ICAgICAzOSwxMH0sIHsgICAgIDIzLCA5fSwgeyAgICAgNTEsMTB9LCBcCisgICAgeyAgICAgMzEsIDl9LCB7ICAgICA2NywxMH0sIHsgICAgIDM5LCA5fSwgeyAgICAgNzksMTB9LCBcCisgICAgeyAgICAgNDcsIDl9LCB7ICAgICA5NSwxMH0sIHsgICAgIDU1LDExfSwgeyAgICAgMzEsMTB9LCBcCisgICAgeyAgICAgNjMsIDl9LCB7ICAgIDEyNywxMH0sIHsgICAgIDcxLCA4fSwgeyAgICAyODcsMTB9LCBcCisgICAgeyAgICAgNzksMTF9LCB7ICAgICA0NywxMH0sIHsgICAgIDk1LCA5fSwgeyAgICAxOTEsIDh9LCBcCisgICAgeyAgICAzODMsIDd9LCB7ICAgIDc2NywxMH0sIHsgICAgMTAzLCA5fSwgeyAgICAyMDcsIDh9LCBcCisgICAgeyAgICA0MTUsIDd9LCB7ICAgIDgzMSwxMn0sIHsgICAgIDMxLDExfSwgeyAgICAgNjMsMTB9LCBcCisgICAgeyAgICAxMjcsIDl9LCB7ICAgIDI1NSwgOH0sIHsgICAgNTQzLCA3fSwgeyAgIDEwODcsIDZ9LCBcCisgICAgeyAgIDIxNzUsMTB9LCB7ICAgIDE0MywgOX0sIHsgICAgMjg3LCA4fSwgeyAgICA1NzUsMTF9LCBcCisgICAgeyAgICAgNzksIDl9LCB7ICAgIDMxOSwgOH0sIHsgICAgNjM5LCA3fSwgeyAgIDEyNzksIDl9LCBcCisgICAgeyAgICAzMzUsIDh9LCB7ICAgIDY3MSwxMH0sIHsgICAgMTc1LCA5fSwgeyAgICAzNTEsIDh9LCBcCisgICAgeyAgICA3MDMsMTF9LCB7ICAgICA5NSwxMH0sIHsgICAgMTkxLCA5fSwgeyAgICAzODMsIDh9LCBcCisgICAgeyAgICA3NjcsMTB9LCB7ICAgIDIwNywgOX0sIHsgICAgNDE1LCA4fSwgeyAgICA4MzEsIDd9LCBcCisgICAgeyAgIDE2NjMsMTF9LCB7ICAgIDExMSwxMH0sIHsgICAgMjIzLCA5fSwgeyAgICA0NDcsIDh9LCBcCisgICAgeyAgICA4OTUsMTJ9LCB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgeyAgICAyNTUsIDl9LCBcCisgICAgeyAgICA1NDMsIDh9LCB7ICAgMTA4NywgN30sIHsgICAyMTc1LDEwfSwgeyAgICAyODcsIDl9LCBcCisgICAgeyAgICA1NzUsIDh9LCB7ICAgMTIxNSwgN30sIHsgICAyNDMxLDEwfSwgeyAgICAzMTksIDl9LCBcCisgICAgeyAgICA2MzksIDh9LCB7ICAgMTI3OSwxMH0sIHsgICAgMzM1LCA5fSwgeyAgICA2NzEsIDh9LCBcCisgICAgeyAgIDEzNDMsIDl9LCB7ICAgIDcwMywgOH0sIHsgICAxNDA3LDEyfSwgeyAgICAgOTUsMTF9LCBcCisgICAgeyAgICAxOTEsMTB9LCB7ICAgIDM4MywxMX0sIHsgICAgMjA3LCA5fSwgeyAgICA4MzEsIDh9LCBcCisgICAgeyAgIDE2NjMsMTF9LCB7ICAgIDIyMywxMH0sIHsgICAgNDQ3LCA5fSwgeyAgICA5NTksMTN9LCBcCisgICAgeyAgICAgNjMsMTJ9LCB7ICAgIDEyNywxMX0sIHsgICAgMjU1LCA4fSwgeyAgIDIwNDcsMTF9LCBcCisgICAgeyAgICAyNzEsMTB9LCB7ICAgIDU0MywgOX0sIHsgICAxMDg3LCA4fSwgeyAgIDIxNzUsMTF9LCBcCisgICAgeyAgICAyODcsMTB9LCB7ICAgIDU3NSwgOX0sIHsgICAxMjE1LCA4fSwgeyAgIDI0MzEsMTF9LCBcCisgICAgeyAgICAzMTksMTB9LCB7ICAgIDY3MSwgOX0sIHsgICAxMzQzLCA4fSwgeyAgIDI2ODcsMTF9LCBcCisgICAgeyAgICAzNTEsMTB9LCB7ICAgIDcwMywgOX0sIHsgICAxNDcxLCA4fSwgeyAgIDI5NDMsMTJ9LCBcCisgICAgeyAgICAxOTEsMTF9LCB7ICAgIDM4MywgOH0sIHsgICAzMDcxLDExfSwgeyAgICA0MTUsMTB9LCBcCisgICAgeyAgICA4MzEsIDl9LCB7ICAgMTY2MywxMX0sIHsgICAgNDc5LDEwfSwgeyAgICA5NTksIDl9LCBcCisgICAgeyAgIDE5MTksIDh9LCB7ICAgMzgzOSwxM30sIHsgICAgMTI3LDEyfSwgeyAgICAyNTUsMTF9LCBcCisgICAgeyAgICA1NDMsMTB9LCB7ICAgMTA4NywgOX0sIHsgICAyMTc1LDEyfSwgeyAgICAyODcsMTF9LCBcCisgICAgeyAgICA2MDcsMTB9LCB7ICAgMTIxNSwgOX0sIHsgICAyNDMxLCA4fSwgeyAgIDQ4NjMsMTJ9LCBcCisgICAgeyAgICAzMTksMTF9LCB7ICAgIDY3MSwxMH0sIHsgICAxMzQzLDEzfSwgeyAgICAxOTEsIDl9LCBcCisgICAgeyAgIDMwNzEsMTJ9LCB7ICAgIDQxNSwxMX0sIHsgICAgODMxLDEwfSwgeyAgIDE2NjMsIDh9LCBcCisgICAgeyAgIDY2NTUsIDl9LCB7ICAgMzQ1NSwxMn0sIHsgICAgNDQ3LCA5fSwgeyAgIDM1ODMsMTN9LCBcCisgICAgeyAgICAyNTUsMTJ9LCB7ICAgIDUxMSwxMX0sIHsgICAxMDIzLDEwfSwgeyAgIDIxNzUsMTN9LCBcCisgICAgeyAgICAzMTksMTF9LCB7ICAgMTI3OSwxMn0sIHsgICAgNjcxLDEwfSwgeyAgIDI4MTUsMTJ9LCBcCisgICAgeyAgICA3MzUsMTB9LCB7ICAgMjk0MywgOX0sIHsgICA1ODg3LDEzfSwgeyAgICAzODMsMTJ9LCBcCisgICAgeyAgICA3NjcsMTF9LCB7ICAgMTUzNSwxMH0sIHsgICAzMDcxLDEzfSwgeyAgICA0NDcsMTB9LCBcCisgICAgeyAgIDM1ODMsMTJ9LCB7ICAgIDk1OSwxM30sIHsgICAgNTExLDEyfSwgeyAgIDEwODcsMTN9LCBcCisgICAgeyAgICA2MzksMTJ9LCB7ICAgMTM0MywxM30sIHsgICAgNzY3LDExfSwgeyAgIDMwNzEsMTN9LCBcCisgICAgeyAgICA4MzEsMTJ9LCB7ICAgMTY2MywxMX0sIHsgICAzNDU1LDEwfSwgeyAgIDY5MTEsMTN9LCBcCisgICAgeyAgICA4OTUsMTR9LCB7ICAgIDUxMSwxM30sIHsgICAxMDIzLDEyfSwgeyAgIDIwNDcsMTN9LCBcCisgICAgeyAgIDEwODcsMTJ9LCB7ICAgMjMwMywxM30sIHsgICAxMjE1LDEyfSwgeyAgIDI0MzEsMTR9LCBcCisgICAgeyAgICA2MzksMTN9LCB7ICAgMTI3OSwxMn0sIHsgICAyNTU5LDEzfSwgeyAgIDEzNDMsMTJ9LCBcCisgICAgeyAgIDI2ODcsMTF9LCB7ICAgNTM3NSwxM30sIHsgICAxNDA3LDEyfSwgeyAgIDI4MTUsMTF9LCBcCisgICAgeyAgIDU2MzEsMTJ9LCB7ICAgMjk0MywxM30sIHsgICAxNTM1LDEyfSwgeyAgIDMxOTksMTN9LCBcCisgICAgeyAgIDE2NjMsMTJ9LCB7ICAgMzMyNywxM30sIHsgICAxNzI3LDE0fSwgeyAgICA4OTUsMTN9LCBcCisgICAgeyAgIDE3OTEsMTJ9LCB7ICAgMzU4MywxM30sIHsgICAxOTE5LDE1fSwgeyAgICA1MTEsMTR9LCBcCisgICAgeyAgIDEwMjMsMTN9LCB7ICAgMjA0NywxMn0sIHsgICA0MDk1LDE0fSwgeyAgIDExNTEsMTN9LCBcCisgICAgeyAgIDI0MzEsMTR9LCB7ICAgMTI3OSwxM30sIHsgICAyNjg3LDE0fSwgeyAgIDE0MDcsMTN9LCBcCisgICAgeyAgIDI4MTUsMTJ9LCB7ICAgNTYzMSwxNX0sIHsgICAgNzY3LDE0fSwgeyAgIDE1MzUsMTN9LCBcCisgICAgeyAgIDMwNzEsMTR9LCB7ICAgMTY2MywxM30sIHsgICAzMzI3LDE0fSwgeyAgIDE3OTEsMTN9LCBcCisgICAgeyAgIDM1ODMsMTR9LCB7ICAgMTkxOSwxNX0sIHsgICAxMDIzLDE0fSwgeyAgIDIzMDMsMTN9LCBcCisgICAgeyAgIDQ2MDcsMTR9LCB7ICAgMjQzMSwxM30sIHsgICA0ODYzLDE1fSwgeyAgMzI3NjgsMTZ9LCBcCisgICAgeyAgNjU1MzYsMTd9LCB7IDEzMTA3MiwxOH0sIHsgMjYyMTQ0LDE5fSwgeyA1MjQyODgsMjB9LCBcCisgICAgezEwNDg1NzYsMjF9LCB7MjA5NzE1MiwyMn0sIHs0MTk0MzA0LDIzfSwgezgzODg2MDgsMjR9IH0KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTNfU0laRSAyNTIKKyNkZWZpbmUgTVVMX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDIzNjgKKworI2RlZmluZSBTUVJfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDI4NCAgLyogayA9IDUgKi8KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDI4NCwgNX0sIHsgICAgICA5LCA0fSwgeyAgICAgMjEsIDV9LCB7ICAgICAyMSwgNn0sIFwKKyAgICB7ICAgICAxMSwgNX0sIHsgICAgIDIzLCA2fSwgeyAgICAgMjUsIDd9LCB7ICAgICAyNSwgOH0sIFwKKyAgICB7ICAgICAxMywgN30sIHsgICAgIDI3LCA4fSwgeyAgICAgMTUsIDd9LCB7ICAgICAzMSwgOH0sIFwKKyAgICB7ICAgICAyNywgOX0sIHsgICAgIDE1LCA4fSwgeyAgICAgMzMsIDl9LCB7ICAgICAxOSwgOH0sIFwKKyAgICB7ICAgICAzOSwgOX0sIHsgICAgIDIzLCA4fSwgeyAgICAgNDcsIDl9LCB7ICAgICAyNywxMH0sIFwKKyAgICB7ICAgICAxNSwgOX0sIHsgICAgIDM5LDEwfSwgeyAgICAgMjMsIDl9LCB7ICAgICA1MSwxMX0sIFwKKyAgICB7ICAgICAxNSwxMH0sIHsgICAgIDMxLCA5fSwgeyAgICAgNjcsMTB9LCB7ICAgICAzOSwgOX0sIFwKKyAgICB7ICAgICA3OSwxMH0sIHsgICAgIDQ3LCA5fSwgeyAgICAgOTUsMTB9LCB7ICAgICA1NSwxMX0sIFwKKyAgICB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA4fSwgeyAgICAyNTUsIDd9LCB7ICAgIDUxMSwxMH0sIFwKKyAgICB7ICAgICA3MSwgOH0sIHsgICAgMjg3LCA3fSwgeyAgICA1NzUsMTB9LCB7ICAgICA3OSwxMX0sIFwKKyAgICB7ICAgICA0NywxMH0sIHsgICAgIDk1LCA5fSwgeyAgICAxOTEsIDh9LCB7ICAgIDM4MywgN30sIFwKKyAgICB7ICAgIDc2NywxMH0sIHsgICAgMTAzLCA5fSwgeyAgICAyMDcsIDh9LCB7ICAgIDQxNSwxMn0sIFwKKyAgICB7ICAgICAzMSwxMX0sIHsgICAgIDYzLDEwfSwgeyAgICAxMjcsIDl9LCB7ICAgIDI1NSwgOH0sIFwKKyAgICB7ICAgIDU0MywgN30sIHsgICAxMDg3LCA4fSwgeyAgICA1NzUsIDd9LCB7ICAgMTE1MSwxMX0sIFwKKyAgICB7ICAgICA3OSwgOH0sIHsgICAgNjM5LCA3fSwgeyAgIDEyNzksIDl9LCB7ICAgIDMzNSwgOH0sIFwKKyAgICB7ICAgIDY3MSwgN30sIHsgICAxMzQzLDEwfSwgeyAgICAxNzUsIDh9LCB7ICAgIDcwMywgN30sIFwKKyAgICB7ICAgMTQwNywxMX0sIHsgICAgIDk1LDEwfSwgeyAgICAxOTEsIDl9LCB7ICAgIDM4MywgOH0sIFwKKyAgICB7ICAgIDc2NywxMH0sIHsgICAgMjA3LCA5fSwgeyAgICA0MTUsIDh9LCB7ICAgIDgzMSwgN30sIFwKKyAgICB7ICAgMTY2MywgOX0sIHsgICAgNDQ3LCA4fSwgeyAgICA4OTUsMTJ9LCB7ICAgICA2MywxMX0sIFwKKyAgICB7ICAgIDEyNywxMH0sIHsgICAgMjU1LCA5fSwgeyAgICA1NDMsIDh9LCB7ICAgMTA4NywgN30sIFwKKyAgICB7ICAgMjE3NSwgOX0sIHsgICAgNTc1LCA4fSwgeyAgIDExNTEsMTB9LCB7ICAgIDMwMywgOX0sIFwKKyAgICB7ICAgIDYwNywgOH0sIHsgICAxMjE1LCA3fSwgeyAgIDI0MzEsMTB9LCB7ICAgIDMxOSwgOX0sIFwKKyAgICB7ICAgIDYzOSwgOH0sIHsgICAxMjc5LCA5fSwgeyAgICA2NzEsIDh9LCB7ICAgMTM0MywgN30sIFwKKyAgICB7ICAgMjY4NywxMH0sIHsgICAgMzUxLCA5fSwgeyAgICA3MDMsIDh9LCB7ICAgMTQwNywxMn0sIFwKKyAgICB7ICAgICA5NSwxMX0sIHsgICAgMTkxLDEwfSwgeyAgICAzODMsIDl9LCB7ICAgIDc2NywxMX0sIFwKKyAgICB7ICAgIDIwNywxMH0sIHsgICAgNDE1LCA5fSwgeyAgICA4MzEsIDh9LCB7ICAgMTY2MywxMX0sIFwKKyAgICB7ICAgIDIyMywxMH0sIHsgICAgNDQ3LCA5fSwgeyAgICA4OTUsMTN9LCB7ICAgICA2MywxMX0sIFwKKyAgICB7ICAgIDI1NSwxMH0sIHsgICAgNTQzLCA4fSwgeyAgIDIxNzUsMTF9LCB7ICAgIDI4NywxMH0sIFwKKyAgICB7ICAgIDU3NSwgOX0sIHsgICAxMTUxLDEwfSwgeyAgICA2MDcsIDl9LCB7ICAgMTIxNSwgOH0sIFwKKyAgICB7ICAgMjQzMSwxMX0sIHsgICAgMzE5LCA5fSwgeyAgIDEyNzksMTB9LCB7ICAgIDY3MSwgOX0sIFwKKyAgICB7ICAgMTM0MywgOH0sIHsgICAyNjg3LDExfSwgeyAgICAzNTEsMTB9LCB7ICAgIDcwMywgOX0sIFwKKyAgICB7ICAgMTQwNywxMH0sIHsgICAgNzM1LDEyfSwgeyAgICAxOTEsMTF9LCB7ICAgIDM4MywxMH0sIFwKKyAgICB7ICAgIDgzMSwgOX0sIHsgICAxNjYzLDEyfSwgeyAgICAyMjMsMTF9LCB7ICAgIDQ0NywxMH0sIFwKKyAgICB7ICAgIDg5NSwxMX0sIHsgICAgNDc5LCA5fSwgeyAgIDE5MTksIDh9LCB7ICAgMzgzOSwxMn0sIFwKKyAgICB7ICAgIDI1NSwxMX0sIHsgICAgNTExLDEwfSwgeyAgIDEwMjMsMTF9LCB7ICAgIDU0MywxMH0sIFwKKyAgICB7ICAgMTA4NywgOX0sIHsgICAyMTc1LDEyfSwgeyAgICAyODcsMTF9LCB7ICAgIDU3NSwxMH0sIFwKKyAgICB7ICAgMTE1MSwxMX0sIHsgICAgNjA3LDEwfSwgeyAgIDEyMTUsIDl9LCB7ICAgMjQzMSwgOH0sIFwKKyAgICB7ICAgNDg2MywxMH0sIHsgICAxMjc5LDExfSwgeyAgICA2NzEsMTB9LCB7ICAgMTM0MywgOX0sIFwKKyAgICB7ICAgMjY4NywxMn0sIHsgICAgMzUxLDExfSwgeyAgICA3MDMsMTB9LCB7ICAgMTQwNywxMX0sIFwKKyAgICB7ICAgIDczNSwxM30sIHsgICAgMTkxLCA5fSwgeyAgIDMwNzEsIDd9LCB7ICAxMjI4NywxMX0sIFwKKyAgICB7ICAgIDc5OSwxMn0sIHsgICAgNDE1LDExfSwgeyAgICA4MzEsMTB9LCB7ICAgMTY2MywxMn0sIFwKKyAgICB7ICAgIDQ0NywgOH0sIHsgICA3MTY3LDEyfSwgeyAgICA0NzksIDl9LCB7ICAgMzgzOSwxNH0sIFwKKyAgICB7ICAgIDEyNywxM30sIHsgICAgMjU1LDEyfSwgeyAgICA1MTEsMTF9LCB7ICAgMTAyMywxMn0sIFwKKyAgICB7ICAgIDU0MywxMH0sIHsgICAyMTc1LCA5fSwgeyAgIDQ2MDcsMTF9LCB7ICAgMTIxNSwxMH0sIFwKKyAgICB7ICAgMjQzMSwxMX0sIHsgICAxMjc5LDEwfSwgeyAgIDI1NTksMTN9LCB7ICAgIDM4MywxMn0sIFwKKyAgICB7ICAgIDc2NywxMX0sIHsgICAxNTM1LDEyfSwgeyAgICA3OTksMTB9LCB7ICAgMzE5OSwgOX0sIFwKKyAgICB7ICAgNjM5OSwxMn0sIHsgICAgODk1LDEzfSwgeyAgICA1MTEsMTJ9LCB7ICAgMTAyMywxMX0sIFwKKyAgICB7ICAgMjA0NywxMn0sIHsgICAxMDg3LDEzfSwgeyAgICA1NzUsMTJ9LCB7ICAgMTE1MSwxMH0sIFwKKyAgICB7ICAgNDYwNywxM30sIHsgICAgNjM5LDEyfSwgeyAgIDEyNzksMTF9LCB7ICAgMjY4NywxNH0sIFwKKyAgICB7ICAgIDM4MywxM30sIHsgICAgNzY3LDExfSwgeyAgIDMwNzEsMTJ9LCB7ICAgMTU5OSwxM30sIFwKKyAgICB7ICAgIDg5NSwxMn0sIHsgICAxNzkxLDExfSwgeyAgIDM1ODMsMTN9LCB7ICAgIDk1OSwxNX0sIFwKKyAgICB7ICAgIDI1NSwxMn0sIHsgICAyMTc1LDEzfSwgeyAgIDEyMTUsMTR9LCB7ICAgIDYzOSwxM30sIFwKKyAgICB7ICAgMTI3OSwxMn0sIHsgICAyNTU5LDEzfSwgeyAgIDEzNDMsMTJ9LCB7ICAgMjY4NywxM30sIFwKKyAgICB7ICAgMTQ3MSwxMX0sIHsgICA1ODg3LDE0fSwgeyAgICA3NjcsMTN9LCB7ICAgMTUzNSwxMn0sIFwKKyAgICB7ICAgMzA3MSwxM30sIHsgICAxNTk5LDEyfSwgeyAgIDMxOTksMTN9LCB7ICAgMTY2MywxMn0sIFwKKyAgICB7ICAgMzMyNywxM30sIHsgICAxNzI3LDE0fSwgeyAgICA4OTUsMTN9LCB7ICAgMTc5MSwxMn0sIFwKKyAgICB7ICAgMzU4MywxNX0sIHsgICAgNTExLDE0fSwgeyAgIDEwMjMsMTN9LCB7ICAgMjE3NSwxNH0sIFwKKyAgICB7ICAgMTE1MSwxMn0sIHsgICA0NjA3LDEzfSwgeyAgIDI0MzEsMTR9LCB7ICAgMTI3OSwxM30sIFwKKyAgICB7ICAgMjY4NywxNH0sIHsgICAxNDA3LDEzfSwgeyAgIDI4MTUsMTV9LCB7ICAgIDc2NywxM30sIFwKKyAgICB7ICAgMzE5OSwxNH0sIHsgICAxNjYzLDEzfSwgeyAgIDMzMjcsMTR9LCB7ICAgMTc5MSwxM30sIFwKKyAgICB7ICAgMzU4MywxNH0sIHsgICAxOTE5LDE1fSwgeyAgIDEwMjMsMTR9LCB7ICAgMjA0NywxM30sIFwKKyAgICB7ICAgNDA5NSwxNH0sIHsgICAyMzAzLDEzfSwgeyAgIDQ2MDcsMTR9LCB7ICAgMjQzMSwxNX0sIFwKKyAgICB7ICAzMjc2OCwxNn0sIHsgIDY1NTM2LDE3fSwgeyAxMzEwNzIsMTh9LCB7IDI2MjE0NCwxOX0sIFwKKyAgICB7IDUyNDI4OCwyMH0sIHsxMDQ4NTc2LDIxfSwgezIwOTcxNTIsMjJ9LCB7NDE5NDMwNCwyM30sIFwKKyAgICB7ODM4ODYwOCwyNH0gfQorI2RlZmluZSBTUVJfRkZUX1RBQkxFM19TSVpFIDI1NworI2RlZmluZSBTUVJfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTg1NgorCisjZGVmaW5lIE1VTExPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTVVMTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAxMTMKKyNkZWZpbmUgTVVMTE9fTVVMX05fVEhSRVNIT0xEICAgICAgICAgICAgIDQ2NTgKKworI2RlZmluZSBEQ19ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDEyMworI2RlZmluZSBEQ19ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgIDM3MgorI2RlZmluZSBEQ19CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE0MgorI2RlZmluZSBEQ19CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDMxMgorCisjZGVmaW5lIElOVl9NVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgIDU4CisjZGVmaW5lIElOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAgMzE1CisjZGVmaW5lIElOVl9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMzE1CisKKyNkZWZpbmUgQklOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAzNjAKKyNkZWZpbmUgUkVEQ18xX1RPX1JFRENfTl9USFJFU0hPTEQgICAgICAgICAxMDEKKworI2RlZmluZSBNVV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDk3OQorI2RlZmluZSBNVV9ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgMTE0MgorI2RlZmluZSBNVVBJX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICA5MworI2RlZmluZSBNVV9CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDg4OQorI2RlZmluZSBNVV9CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTE4NworCisjZGVmaW5lIE1BVFJJWDIyX1NUUkFTU0VOX1RIUkVTSE9MRCAgICAgICAgICA5CisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAgMjM0CisjZGVmaW5lIEhHQ0RfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMzAwCisjZGVmaW5lIEhHQ0RfUkVEVUNFX1RIUkVTSE9MRCAgICAgICAgICAgICAxNTUzCisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgNjg0CisjZGVmaW5lIEdDREVYVF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgNTI1CisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAgICAyCisKKyNkZWZpbmUgR0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICAgMjQKKyNkZWZpbmUgU0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgIDE5NTEKKyNkZWZpbmUgU0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgIDQwMzQKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcGE2NC9sc2hpZnQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wYTY0L2xzaGlmdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBmYzI5MgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcGE2NC9sc2hpZnQuYXNtCkBAIC0wLDAgKzEsMTE0IEBACitkbmwgIEhQLVBBIDIuMCBtcG5fbHNoaWZ0IC0tIExlZnQgc2hpZnQuCisKK2RubCAgQ29weXJpZ2h0IDE5OTcsIDIwMDAsIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCitkbmwgIFRoaXMgcnVucyBhdCAxLjUgY3ljbGVzL2xpbWIgb24gUEE4MDAwIGFuZCAxLjAgY3ljbGVzL2xpbWIgb24gUEE4NTAwLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitkbmwgIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLGAlcjI2JykKK2RlZmluZShgdXAnLGAlcjI1JykKK2RlZmluZShgbicsYCVyMjQnKQorZGVmaW5lKGBjbnQnLGAlcjIzJykKKworaWZkZWYoYEhBVkVfQUJJXzJfMHcnLAorYCAgICAgICAubGV2ZWwgIDIuMHcKKycsYCAgICAgLmxldmVsICAyLjAKKycpCitQUk9MT0dVRShtcG5fbHNoaWZ0KQorCXNobGFkZAkJbiwgMywgdXAsIHVwCisJc2hsYWRkCQluLCAzLCBycCwgcnAKKwlzdWJpCQk2NCwgY250LCBjbnQKKwltdHNhcgkJY250CisJbGRkCQktOCh1cCksICVyMjEKKwlhZGRpYiw9CQktMSwgbiwgTChlbmQpCisJc2hycGQJCSVyMCwgJXIyMSwgJXNhciwgJXIyOQlDIGNvbXB1dGUgY2Fycnkgb3V0IGxpbWIKKwlkZXB3LHoJCW4sIDMxLCAzLCAlcjI4CQlDIHIyOCA9IChzaXplICYgNykKKwlzdWIJCSVyMCwgbiwgJXIyMgorCWRlcHcsegkJJXIyMiwgMjgsIDMsICVyMjIJQyByMjIgPSA4ICogKC1zaXplICYgNykKKwlhZGQJCXVwLCAlcjIyLCB1cAkJQyBvZmZzZXQgdXAKKwlibHIJCSVyMjgsICVyMAkJQyBicmFuY2ggaW50byBqdW1wIHRhYmxlCisJYWRkCQlycCwgJXIyMiwgcnAJCUMgb2Zmc2V0IHJwCisJYgkJTCgwKQorCW5vcAorCWIJCUwoMSkKKwljb3B5CQklcjIxLCAlcjIwCisJYgkJTCgyKQorCW5vcAorCWIJCUwoMykKKwljb3B5CQklcjIxLCAlcjIwCisJYgkJTCg0KQorCW5vcAorCWIJCUwoNSkKKwljb3B5CQklcjIxLCAlcjIwCisJYgkJTCg2KQorCW5vcAorCWIJCUwoNykKKwljb3B5CQklcjIxLCAlcjIwCisKK0xERUYobG9vcCkKK0xERUYoMCkJbGRkCQktMTYodXApLCAlcjIwCisJc2hycGQJCSVyMjEsICVyMjAsICVzYXIsICVyMjEKKwlzdGQJCSVyMjEsIC04KHJwKQorTERFRig3KQlsZGQJCS0yNCh1cCksICVyMjEKKwlzaHJwZAkJJXIyMCwgJXIyMSwgJXNhciwgJXIyMAorCXN0ZAkJJXIyMCwgLTE2KHJwKQorTERFRig2KQlsZGQJCS0zMih1cCksICVyMjAKKwlzaHJwZAkJJXIyMSwgJXIyMCwgJXNhciwgJXIyMQorCXN0ZAkJJXIyMSwgLTI0KHJwKQorTERFRig1KQlsZGQJCS00MCh1cCksICVyMjEKKwlzaHJwZAkJJXIyMCwgJXIyMSwgJXNhciwgJXIyMAorCXN0ZAkJJXIyMCwgLTMyKHJwKQorTERFRig0KQlsZGQJCS00OCh1cCksICVyMjAKKwlzaHJwZAkJJXIyMSwgJXIyMCwgJXNhciwgJXIyMQorCXN0ZAkJJXIyMSwgLTQwKHJwKQorTERFRigzKQlsZGQJCS01Nih1cCksICVyMjEKKwlzaHJwZAkJJXIyMCwgJXIyMSwgJXNhciwgJXIyMAorCXN0ZAkJJXIyMCwgLTQ4KHJwKQorTERFRigyKQlsZGQJCS02NCh1cCksICVyMjAKKwlzaHJwZAkJJXIyMSwgJXIyMCwgJXNhciwgJXIyMQorCXN0ZAkJJXIyMSwgLTU2KHJwKQorTERFRigxKQlsZGQJCS03Mih1cCksICVyMjEKKwlsZG8JCS02NCh1cCksIHVwCisJc2hycGQJCSVyMjAsICVyMjEsICVzYXIsICVyMjAKKwlzdGQJCSVyMjAsIC02NChycCkKKwlhZGRpYiw+CQktOCwgbiwgTChsb29wKQorCWxkbwkJLTY0KHJwKSwgcnAKKworTERFRihlbmQpCisJc2hycGQJCSVyMjEsICVyMCwgJXNhciwgJXIyMQorCXN0ZAkJJXIyMSwgLTgocnApCisJYnZlCQkoJXIyKQoraWZkZWYoYEhBVkVfQUJJXzJfMHcnLAorYAljb3B5CQklcjI5LCVyMjgKKycsYAlleHRyZCx1CQklcjI5LCAzMSwgMzIsICVyMjgKKycpCitFUElMT0dVRShtcG5fbHNoaWZ0KQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wYTY0L211bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcGE2NC9tdWxfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkzNWMyMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcGE2NC9tdWxfMS5hc20KQEAgLTAsMCArMSw2NDYgQEAKK2RubCAgSFAtUEEgMi4wIDY0LWJpdCBtcG5fbXVsXzEgLS0gTXVsdGlwbHkgYSBsaW1iIHZlY3RvciB3aXRoIGEgbGltYiBhbmQgc3RvcmUKK2RubCAgdGhlIHJlc3VsdCBpbiBhIHNlY29uZCBsaW1iIHZlY3Rvci4KKworZG5sICBDb3B5cmlnaHQgMTk5OC0yMDAwLCAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJCSAgICBjeWNsZXMvbGltYgorQyA4MDAwLDgyMDA6CQk2LjUKK0MgODUwMCw4NjAwLDg3MDA6CTUuNjI1CisKK0MgIFRoZSBmZWVkLWluIGFuZCB3aW5kLWRvd24gY29kZSBoYXMgbm90IHlldCBiZWVuIHNjaGVkdWxlZC4gIE1hbnkgY3ljbGVzCitDICBjb3VsZCBiZSBzYXZlZCB0aGVyZSBwZXIgY2FsbC4KKworQyAgREVTQ1JJUFRJT046CitDICBUaGUgbWFpbiBsb29wICJCSUciIGlzIDQtd2F5IHVucm9sbGVkLCBtYWlubHkgdG8gYWxsb3cKK0MgIGVmZmVjdGl2ZSB1c2Ugb2YgQURELERDLiAgRGVsYXlzIGluIG1vdmluZyBkYXRhIHZpYSB0aGUgY2FjaGUgZnJvbSB0aGUgRlAKK0MgIHJlZ2lzdGVycyB0byB0aGUgSVUgcmVnaXN0ZXJzLCBoYXZlIGRlbWFuZGVkIGEgZGVlcCBzb2Z0d2FyZSBwaXBlbGluZSwgYW5kCitDICBhIGxvdCBvZiBzdGFjayBzbG90cyBmb3IgcGFydGlhbCBwcm9kdWN0cyBpbiBmbGlnaHQuCitDCitDICBDT0RFIFNUUlVDVFVSRToKK0MgIHNhdmUtc29tZS1yZWdpc3RlcnMKK0MgIGRvIDAsIDEsIDIsIG9yIDMgbGltYnMKK0MgIGlmIGRvbmUsIHJlc3RvcmUtc29tZS1yZWdzIGFuZCByZXR1cm4KK0MgIHNhdmUtbWFueS1yZWdzCitDICBkbyA0LCA4LCAuLi4gbGltYgorQyAgcmVzdG9yZS1hbGwtcmVncworCitDICBTVEFDSyBMQVlPVVQ6CitDICBIUC1QQSBzdGFjayBncm93cyB1cHdhcmRzLiAgV2UgY291bGQgYWxsb2NhdGUgOCBmZXdlciBzbG90cyBieSB1c2luZyB0aGUKK0MgIHNsb3RzIG1hcmtlZCBGUkVFLCBhcyB3ZWxsIGFzIHNvbWUgc2xvdHMgaW4gdGhlIGNhbGxlcidzICJmcmFtZSBtYXJrZXIiLgorQworQyAtMDAgPC0gcjMwCitDIC0wOCAgRlJFRQorQyAtMTAgIHRtcAorQyAtMTggIHRtcAorQyAtMjAgIHRtcAorQyAtMjggIHRtcAorQyAtMzAgIHRtcAorQyAtMzggIHRtcAorQyAtNDAgIHRtcAorQyAtNDggIHRtcAorQyAtNTAgIHRtcAorQyAtNTggIHRtcAorQyAtNjAgIHRtcAorQyAtNjggIHRtcAorQyAtNzAgIHRtcAorQyAtNzggIHRtcAorQyAtODAgIHRtcAorQyAtODggIHRtcAorQyAtOTAgIEZSRUUKK0MgLTk4ICBGUkVFCitDIC1hMCAgRlJFRQorQyAtYTggIEZSRUUKK0MgLWIwICByMTMKK0MgLWI4ICByMTIKK0MgLWMwICByMTEKK0MgLWM4ICByMTAKK0MgLWQwICByOAorQyAtZDggIHI4CitDIC1lMCAgcjcKK0MgLWU4ICByNgorQyAtZjAgIHI1CitDIC1mOCAgcjQKK0MgLTEwMCByMworQyAgUHJldmlvdXMgZnJhbWU6CitDICBbdW51c2VkIGFyZWFdCitDIC0zOC8tMTM4IHZsaW1iIGhvbWUgc2xvdC4gIEZvciAyLjBOLCB0aGUgdmxpbWIgYXJnIHdpbGwgYXJyaXZlIGhlcmUuCisKKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBJTlBVVCBQQVJBTUVURVJTOgorZGVmaW5lKGBycCcsYCVyMjYnKQlDCitkZWZpbmUoYHVwJyxgJXIyNScpCUMKK2RlZmluZShgbicsYCVyMjQnKQlDCitkZWZpbmUoYHZsaW1iJyxgJXIyMycpCUMKKworZGVmaW5lKGBjbGltYicsYCVyMjMnKQlDCisKK2lmZGVmKGBIQVZFX0FCSV8yXzB3JywKK2AJLmxldmVsCTIuMHcKKycsYAkubGV2ZWwJMi4wCisnKQorUFJPTE9HVUUobXBuX211bF8xKQorCitpZmRlZihgSEFWRV9BQklfMl8wdycsCitgCXN0ZAkJdmxpbWIsIC0weDM4KCVyMzApCUMgc3RvcmUgdmxpbWIgaW50byAiaG9tZSIgc2xvdAorJykKKwlzdGQsbWEJCSVyMywgMHgxMDAoJXIzMCkKKwlzdGQJCSVyNCwgLTB4ZjgoJXIzMCkKKwlzdGQJCSVyNSwgLTB4ZjAoJXIzMCkKKwlsZG8JCTAoJXIwKSwgY2xpbWIJCUMgY2xlYXIgY2xpbWIKKwlmbGRkCQktMHgxMzgoJXIzMCksICVmcjgJQyBwdXQgdmxpbWIgaW4gZnAgcmVnaXN0ZXIKKworZGVmaW5lKGBwMDMyYTEnLGAlcjEnKQlDCitkZWZpbmUoYHAwMzJhMicsYCVyMTknKQlDCisKK2RlZmluZShgbTAzMicsYCVyMjAnKQlDCitkZWZpbmUoYG0wOTYnLGAlcjIxJykJQworCitkZWZpbmUoYHAwMDBhJyxgJXIyMicpCUMKK2RlZmluZShgcDA2NGEnLGAlcjI5JykJQworCitkZWZpbmUoYHMwMDAnLGAlcjMxJykJQworCitkZWZpbmUoYG1hMDAwJyxgJXI0JykJQworZGVmaW5lKGBtYTA2NCcsYCVyMjAnKQlDCisKK0MgZGVmaW5lKGByMDAwJyxgJXIzJykJQwlGSVhNRSBkb24ndCBzYXZlIHIzIGZvciBuIDwgNC4KKworCWV4dHJkLHUJCW4sIDYzLCAyLCAlcjUKKwljbXBiLD0JCSVyNSwgJXIwLCBMKEJJRykKKwlub3AKKworCWZsZGQJCTAodXApLCAlZnI0CisJbGRvCQk4KHVwKSwgdXAKKwl4bXB5dQkJJWZyOFIsICVmcjRMLCAlZnIyMgorCXhtcHl1CQklZnI4TCwgJWZyNFIsICVmcjIzCisJZnN0ZAkJJWZyMjIsIC0weDc4KCVyMzApCUMgbWlkIHByb2R1Y3QgdG8gIC0weDc4Li4tMHg3MQorCXhtcHl1CQklZnI4UiwgJWZyNFIsICVmcjI0CisJeG1weXUJCSVmcjhMLCAlZnI0TCwgJWZyMjUKKwlmc3RkCQklZnIyMywgLTB4NzAoJXIzMCkJQyBtaWQgcHJvZHVjdCB0byAgLTB4NzAuLi0weDY5CisJZnN0ZAkJJWZyMjQsIC0weDgwKCVyMzApCUMgbG93IHByb2R1Y3QgdG8gIC0weDgwLi4tMHg3OQorCWFkZGliLDw+CS0xLCAlcjUsIEwodHdvX29yX21vcmUpCisJZnN0ZAkJJWZyMjUsIC0weDY4KCVyMzApCUMgaGlnaCBwcm9kdWN0IHRvIC0weDY4Li4tMHg2MQorTERFRihvbmUpCisJbGRkCQktMHg3OCglcjMwKSwgcDAzMmExCisJbGRkCQktMHg3MCglcjMwKSwgcDAzMmEyCisJbGRkCQktMHg4MCglcjMwKSwgcDAwMGEKKwliCQlMKDBfb25lX291dCkKKwlsZGQJCS0weDY4KCVyMzApLCBwMDY0YQorCitMREVGKHR3b19vcl9tb3JlKQorCWZsZGQJCTAodXApLCAlZnI0CisJbGRvCQk4KHVwKSwgdXAKKwl4bXB5dQkJJWZyOFIsICVmcjRMLCAlZnIyMgorCXhtcHl1CQklZnI4TCwgJWZyNFIsICVmcjIzCisJbGRkCQktMHg3OCglcjMwKSwgcDAzMmExCisJZnN0ZAkJJWZyMjIsIC0weDc4KCVyMzApCUMgbWlkIHByb2R1Y3QgdG8gIC0weDc4Li4tMHg3MQorCXhtcHl1CQklZnI4UiwgJWZyNFIsICVmcjI0CisJeG1weXUJCSVmcjhMLCAlZnI0TCwgJWZyMjUKKwlsZGQJCS0weDcwKCVyMzApLCBwMDMyYTIKKwlmc3RkCQklZnIyMywgLTB4NzAoJXIzMCkJQyBtaWQgcHJvZHVjdCB0byAgLTB4NzAuLi0weDY5CisJbGRkCQktMHg4MCglcjMwKSwgcDAwMGEKKwlmc3RkCQklZnIyNCwgLTB4ODAoJXIzMCkJQyBsb3cgcHJvZHVjdCB0byAgLTB4ODAuLi0weDc5CisJbGRkCQktMHg2OCglcjMwKSwgcDA2NGEKKwlhZGRpYiw8PgktMSwgJXI1LCBMKHRocmVlX29yX21vcmUpCisJZnN0ZAkJJWZyMjUsIC0weDY4KCVyMzApCUMgaGlnaCBwcm9kdWN0IHRvIC0weDY4Li4tMHg2MQorTERFRih0d28pCisJYWRkCQlwMDMyYTEsIHAwMzJhMiwgbTAzMgorCWFkZCxkYwkJJXIwLCAlcjAsIG0wOTYKKwlkZXBkLHoJCW0wMzIsIDMxLCAzMiwgbWEwMDAKKwlleHRyZCx1CQltMDMyLCAzMSwgMzIsIG1hMDY0CisJYgkJTCgwX3R3b19vdXQpCisJZGVwZAkJbTA5NiwgMzEsIDMyLCBtYTA2NAorCitMREVGKHRocmVlX29yX21vcmUpCisJZmxkZAkJMCh1cCksICVmcjQKKwlhZGQJCXAwMzJhMSwgcDAzMmEyLCBtMDMyCisJYWRkLGRjCQklcjAsICVyMCwgbTA5NgorCWRlcGQsegkJbTAzMiwgMzEsIDMyLCBtYTAwMAorCWV4dHJkLHUJCW0wMzIsIDMxLCAzMiwgbWEwNjQKK0MJYWRkaWIsPQkJLTEsICVyNSwgTCgwX291dCkKKwlkZXBkCQltMDk2LCAzMSwgMzIsIG1hMDY0CitMREVGKGxvb3AwKQorQwl4bXB5dQkJJWZyOFIsICVmcjRMLCAlZnIyMgorQwl4bXB5dQkJJWZyOEwsICVmcjRSLCAlZnIyMworQwlsZGQJCS0weDc4KCVyMzApLCBwMDMyYTEKK0MJZnN0ZAkJJWZyMjIsIC0weDc4KCVyMzApCUMgbWlkIHByb2R1Y3QgdG8gIC0weDc4Li4tMHg3MQorQworQwl4bXB5dQkJJWZyOFIsICVmcjRSLCAlZnIyNAorQwl4bXB5dQkJJWZyOEwsICVmcjRMLCAlZnIyNQorQwlsZGQJCS0weDcwKCVyMzApLCBwMDMyYTIKK0MJZnN0ZAkJJWZyMjMsIC0weDcwKCVyMzApCUMgbWlkIHByb2R1Y3QgdG8gIC0weDcwLi4tMHg2OQorQworQwlsZG8JCTgocnApLCBycAorQwlhZGQJCWNsaW1iLCBwMDAwYSwgczAwMAorQwlsZGQJCS0weDgwKCVyMzApLCBwMDAwYQorQwlmc3RkCQklZnIyNCwgLTB4ODAoJXIzMCkJQyBsb3cgcHJvZHVjdCB0byAgLTB4ODAuLi0weDc5CitDCitDCWFkZCxkYwkJcDA2NGEsICVyMCwgY2xpbWIKK0MJbGRvCQk4KHVwKSwgdXAKK0MJbGRkCQktMHg2OCglcjMwKSwgcDA2NGEKK0MJZnN0ZAkJJWZyMjUsIC0weDY4KCVyMzApCUMgaGlnaCBwcm9kdWN0IHRvIC0weDY4Li4tMHg2MQorQworQwlhZGQJCW1hMDAwLCBzMDAwLCBzMDAwCitDCWFkZCxkYwkJbWEwNjQsIGNsaW1iLCBjbGltYgorQwlmbGRkCQkwKHVwKSwgJWZyNAorQworQwlzdGQJCXMwMDAsIC04KHJwKQorQworQwlhZGQJCXAwMzJhMSwgcDAzMmEyLCBtMDMyCitDCWFkZCxkYwkJJXIwLCAlcjAsIG0wOTYKK0MKK0MJZGVwZCx6CQltMDMyLCAzMSwgMzIsIG1hMDAwCitDCWV4dHJkLHUJCW0wMzIsIDMxLCAzMiwgbWEwNjQKK0MJYWRkaWIsPD4JLTEsICVyNSwgTChsb29wMCkKK0MJZGVwZAkJbTA5NiwgMzEsIDMyLCBtYTA2NAorTERFRigwX291dCkKKwlsZG8JCTgodXApLCB1cAorCXhtcHl1CQklZnI4UiwgJWZyNEwsICVmcjIyCisJeG1weXUJCSVmcjhMLCAlZnI0UiwgJWZyMjMKKwlsZGQJCS0weDc4KCVyMzApLCBwMDMyYTEKKwlmc3RkCQklZnIyMiwgLTB4NzgoJXIzMCkJQyBtaWQgcHJvZHVjdCB0byAgLTB4NzguLi0weDcxCisJeG1weXUJCSVmcjhSLCAlZnI0UiwgJWZyMjQKKwl4bXB5dQkJJWZyOEwsICVmcjRMLCAlZnIyNQorCWxkZAkJLTB4NzAoJXIzMCksIHAwMzJhMgorCWZzdGQJCSVmcjIzLCAtMHg3MCglcjMwKQlDIG1pZCBwcm9kdWN0IHRvICAtMHg3MC4uLTB4NjkKKwlsZG8JCTgocnApLCBycAorCWFkZAkJY2xpbWIsIHAwMDBhLCBzMDAwCisJbGRkCQktMHg4MCglcjMwKSwgcDAwMGEKKwlmc3RkCQklZnIyNCwgLTB4ODAoJXIzMCkJQyBsb3cgcHJvZHVjdCB0byAgLTB4ODAuLi0weDc5CisJYWRkLGRjCQlwMDY0YSwgJXIwLCBjbGltYgorCWxkZAkJLTB4NjgoJXIzMCksIHAwNjRhCisJZnN0ZAkJJWZyMjUsIC0weDY4KCVyMzApCUMgaGlnaCBwcm9kdWN0IHRvIC0weDY4Li4tMHg2MQorCWFkZAkJbWEwMDAsIHMwMDAsIHMwMDAKKwlhZGQsZGMJCW1hMDY0LCBjbGltYiwgY2xpbWIKKwlzdGQJCXMwMDAsIC04KHJwKQorCWFkZAkJcDAzMmExLCBwMDMyYTIsIG0wMzIKKwlhZGQsZGMJCSVyMCwgJXIwLCBtMDk2CisJZGVwZCx6CQltMDMyLCAzMSwgMzIsIG1hMDAwCisJZXh0cmQsdQkJbTAzMiwgMzEsIDMyLCBtYTA2NAorCWRlcGQJCW0wOTYsIDMxLCAzMiwgbWEwNjQKK0xERUYoMF90d29fb3V0KQorCWxkZAkJLTB4NzgoJXIzMCksIHAwMzJhMQorCWxkZAkJLTB4NzAoJXIzMCksIHAwMzJhMgorCWxkbwkJOChycCksIHJwCisJYWRkCQljbGltYiwgcDAwMGEsIHMwMDAKKwlsZGQJCS0weDgwKCVyMzApLCBwMDAwYQorCWFkZCxkYwkJcDA2NGEsICVyMCwgY2xpbWIKKwlsZGQJCS0weDY4KCVyMzApLCBwMDY0YQorCWFkZAkJbWEwMDAsIHMwMDAsIHMwMDAKKwlhZGQsZGMJCW1hMDY0LCBjbGltYiwgY2xpbWIKKwlzdGQJCXMwMDAsIC04KHJwKQorTERFRigwX29uZV9vdXQpCisJYWRkCQlwMDMyYTEsIHAwMzJhMiwgbTAzMgorCWFkZCxkYwkJJXIwLCAlcjAsIG0wOTYKKwlkZXBkLHoJCW0wMzIsIDMxLCAzMiwgbWEwMDAKKwlleHRyZCx1CQltMDMyLCAzMSwgMzIsIG1hMDY0CisJZGVwZAkJbTA5NiwgMzEsIDMyLCBtYTA2NAorCisJYWRkCQljbGltYiwgcDAwMGEsIHMwMDAKKwlhZGQsZGMJCXAwNjRhLCAlcjAsIGNsaW1iCisJYWRkCQltYTAwMCwgczAwMCwgczAwMAorCWFkZCxkYwkJbWEwNjQsIGNsaW1iLCBjbGltYgorCXN0ZAkJczAwMCwgMChycCkKKworCWNtcGliLD49CTQsIG4sIEwoZG9uZSkKKwlsZG8JCTgocnApLCBycAorCitDIDQtd2F5IHVucm9sbGVkIGNvZGUuCisKK0xERUYoQklHKQorCitkZWZpbmUoYHAwMzJhMScsYCVyMScpCUMKK2RlZmluZShgcDAzMmEyJyxgJXIxOScpCUMKK2RlZmluZShgcDA5NmIxJyxgJXIyMCcpCUMKK2RlZmluZShgcDA5NmIyJyxgJXIyMScpCUMKK2RlZmluZShgcDE2MGMxJyxgJXIyMicpCUMKK2RlZmluZShgcDE2MGMyJyxgJXIyOScpCUMKK2RlZmluZShgcDIyNGQxJyxgJXIzMScpCUMKK2RlZmluZShgcDIyNGQyJyxgJXIzJykJQworCQkJQworZGVmaW5lKGBtMDMyJyxgJXI0JykJQworZGVmaW5lKGBtMDk2JyxgJXI1JykJQworZGVmaW5lKGBtMTYwJyxgJXI2JykJQworZGVmaW5lKGBtMjI0JyxgJXI3JykJQworZGVmaW5lKGBtMjg4JyxgJXI4JykJQworCQkJQworZGVmaW5lKGBwMDAwYScsYCVyMScpCUMKK2RlZmluZShgcDA2NGEnLGAlcjE5JykJQworZGVmaW5lKGBwMDY0YicsYCVyMjAnKQlDCitkZWZpbmUoYHAxMjhiJyxgJXIyMScpCUMKK2RlZmluZShgcDEyOGMnLGAlcjIyJykJQworZGVmaW5lKGBwMTkyYycsYCVyMjknKQlDCitkZWZpbmUoYHAxOTJkJyxgJXIzMScpCUMKK2RlZmluZShgcDI1NmQnLGAlcjMnKQlDCisJCQlDCitkZWZpbmUoYHMwMDAnLGAlcjEwJykJQworZGVmaW5lKGBzMDY0JyxgJXIxMScpCUMKK2RlZmluZShgczEyOCcsYCVyMTInKQlDCitkZWZpbmUoYHMxOTInLGAlcjEzJykJQworCQkJQworZGVmaW5lKGBtYTAwMCcsYCVyOScpCUMKK2RlZmluZShgbWEwNjQnLGAlcjQnKQlDCitkZWZpbmUoYG1hMTI4JyxgJXI1JykJQworZGVmaW5lKGBtYTE5MicsYCVyNicpCUMKK2RlZmluZShgbWEyNTYnLGAlcjcnKQlDCisKKwlzdGQJCSVyNiwgLTB4ZTgoJXIzMCkKKwlzdGQJCSVyNywgLTB4ZTAoJXIzMCkKKwlzdGQJCSVyOCwgLTB4ZDgoJXIzMCkKKwlzdGQJCSVyOSwgLTB4ZDAoJXIzMCkKKwlzdGQJCSVyMTAsIC0weGM4KCVyMzApCisJc3RkCQklcjExLCAtMHhjMCglcjMwKQorCXN0ZAkJJXIxMiwgLTB4YjgoJXIzMCkKKwlzdGQJCSVyMTMsIC0weGIwKCVyMzApCisKK2lmZGVmKGBIQVZFX0FCSV8yXzB3JywKK2AJZXh0cmQsdQkJbiwgNjEsIDYyLCBuCQlDIHJpZ2h0IHNoaWZ0IDIKKycsYAlleHRyZCx1CQluLCA2MSwgMzAsIG4JCUMgcmlnaHQgc2hpZnQgMiwgemVybyBleHRlbmQKKycpCisKK0xERUYoNF9vcl9tb3JlKQorCWZsZGQJCTAodXApLCAlZnI0CisJZmxkZAkJOCh1cCksICVmcjUKKwlmbGRkCQkxNih1cCksICVmcjYKKwlmbGRkCQkyNCh1cCksICVmcjcKKwl4bXB5dQkJJWZyOFIsICVmcjRMLCAlZnIyMgorCXhtcHl1CQklZnI4TCwgJWZyNFIsICVmcjIzCisJeG1weXUJCSVmcjhSLCAlZnI1TCwgJWZyMjQKKwl4bXB5dQkJJWZyOEwsICVmcjVSLCAlZnIyNQorCXhtcHl1CQklZnI4UiwgJWZyNkwsICVmcjI2CisJeG1weXUJCSVmcjhMLCAlZnI2UiwgJWZyMjcKKwlmc3RkCQklZnIyMiwgLTB4NzgoJXIzMCkJQyBtaWQgcHJvZHVjdCB0byAgLTB4NzguLi0weDcxCisJeG1weXUJCSVmcjhSLCAlZnI3TCwgJWZyMjgKKwl4bXB5dQkJJWZyOEwsICVmcjdSLCAlZnIyOQorCWZzdGQJCSVmcjIzLCAtMHg3MCglcjMwKQlDIG1pZCBwcm9kdWN0IHRvICAtMHg3MC4uLTB4NjkKKwl4bXB5dQkJJWZyOFIsICVmcjRSLCAlZnIzMAorCXhtcHl1CQklZnI4TCwgJWZyNEwsICVmcjMxCisJZnN0ZAkJJWZyMjQsIC0weDM4KCVyMzApCUMgbWlkIHByb2R1Y3QgdG8gIC0weDM4Li4tMHgzMQorCXhtcHl1CQklZnI4UiwgJWZyNVIsICVmcjIyCisJeG1weXUJCSVmcjhMLCAlZnI1TCwgJWZyMjMKKwlmc3RkCQklZnIyNSwgLTB4MzAoJXIzMCkJQyBtaWQgcHJvZHVjdCB0byAgLTB4MzAuLi0weDI5CisJeG1weXUJCSVmcjhSLCAlZnI2UiwgJWZyMjQKKwl4bXB5dQkJJWZyOEwsICVmcjZMLCAlZnIyNQorCWZzdGQJCSVmcjI2LCAtMHg1OCglcjMwKQlDIG1pZCBwcm9kdWN0IHRvICAtMHg1OC4uLTB4NTEKKwl4bXB5dQkJJWZyOFIsICVmcjdSLCAlZnIyNgorCWZzdGQJCSVmcjI3LCAtMHg1MCglcjMwKQlDIG1pZCBwcm9kdWN0IHRvICAtMHg1MC4uLTB4NDkKKwlhZGRpYiw8PgktMSwgbiwgTCg4X29yX21vcmUpCisJeG1weXUJCSVmcjhMLCAlZnI3TCwgJWZyMjcKKwlmc3RkCQklZnIyOCwgLTB4MTgoJXIzMCkJQyBtaWQgcHJvZHVjdCB0byAgLTB4MTguLi0weDExCisJZnN0ZAkJJWZyMjksIC0weDEwKCVyMzApCUMgbWlkIHByb2R1Y3QgdG8gIC0weDEwLi4tMHgwOQorCWZzdGQJCSVmcjMwLCAtMHg4MCglcjMwKQlDIGxvdyBwcm9kdWN0IHRvICAtMHg4MC4uLTB4NzkKKwlmc3RkCQklZnIzMSwgLTB4NjgoJXIzMCkJQyBoaWdoIHByb2R1Y3QgdG8gLTB4NjguLi0weDYxCisJZnN0ZAkJJWZyMjIsIC0weDQwKCVyMzApCUMgbG93IHByb2R1Y3QgdG8gIC0weDQwLi4tMHgzOQorCWZzdGQJCSVmcjIzLCAtMHgyOCglcjMwKQlDIGhpZ2ggcHJvZHVjdCB0byAtMHgyOC4uLTB4MjEKKwlmc3RkCQklZnIyNCwgLTB4NjAoJXIzMCkJQyBsb3cgcHJvZHVjdCB0byAgLTB4NjAuLi0weDU5CisJZnN0ZAkJJWZyMjUsIC0weDQ4KCVyMzApCUMgaGlnaCBwcm9kdWN0IHRvIC0weDQ4Li4tMHg0MQorCWZzdGQJCSVmcjI2LCAtMHgyMCglcjMwKQlDIGxvdyBwcm9kdWN0IHRvICAtMHgyMC4uLTB4MTkKKwlmc3RkCQklZnIyNywgLTB4ODgoJXIzMCkJQyBoaWdoIHByb2R1Y3QgdG8gLTB4ODguLi0weDgxCisJbGRkCQktMHg3OCglcjMwKSwgcDAzMmExCisJbGRkCQktMHg3MCglcjMwKSwgcDAzMmEyCisJbGRkCQktMHgzOCglcjMwKSwgcDA5NmIxCisJbGRkCQktMHgzMCglcjMwKSwgcDA5NmIyCisJbGRkCQktMHg1OCglcjMwKSwgcDE2MGMxCisJbGRkCQktMHg1MCglcjMwKSwgcDE2MGMyCisJbGRkCQktMHgxOCglcjMwKSwgcDIyNGQxCisJbGRkCQktMHgxMCglcjMwKSwgcDIyNGQyCisJYgkJTChlbmQxKQorCW5vcAorCitMREVGKDhfb3JfbW9yZSkKKwlmc3RkCQklZnIyOCwgLTB4MTgoJXIzMCkJQyBtaWQgcHJvZHVjdCB0byAgLTB4MTguLi0weDExCisJZnN0ZAkJJWZyMjksIC0weDEwKCVyMzApCUMgbWlkIHByb2R1Y3QgdG8gIC0weDEwLi4tMHgwOQorCWxkbwkJMzIodXApLCB1cAorCWZzdGQJCSVmcjMwLCAtMHg4MCglcjMwKQlDIGxvdyBwcm9kdWN0IHRvICAtMHg4MC4uLTB4NzkKKwlmc3RkCQklZnIzMSwgLTB4NjgoJXIzMCkJQyBoaWdoIHByb2R1Y3QgdG8gLTB4NjguLi0weDYxCisJZnN0ZAkJJWZyMjIsIC0weDQwKCVyMzApCUMgbG93IHByb2R1Y3QgdG8gIC0weDQwLi4tMHgzOQorCWZzdGQJCSVmcjIzLCAtMHgyOCglcjMwKQlDIGhpZ2ggcHJvZHVjdCB0byAtMHgyOC4uLTB4MjEKKwlmc3RkCQklZnIyNCwgLTB4NjAoJXIzMCkJQyBsb3cgcHJvZHVjdCB0byAgLTB4NjAuLi0weDU5CisJZnN0ZAkJJWZyMjUsIC0weDQ4KCVyMzApCUMgaGlnaCBwcm9kdWN0IHRvIC0weDQ4Li4tMHg0MQorCWZzdGQJCSVmcjI2LCAtMHgyMCglcjMwKQlDIGxvdyBwcm9kdWN0IHRvICAtMHgyMC4uLTB4MTkKKwlmc3RkCQklZnIyNywgLTB4ODgoJXIzMCkJQyBoaWdoIHByb2R1Y3QgdG8gLTB4ODguLi0weDgxCisJZmxkZAkJMCh1cCksICVmcjQKKwlmbGRkCQk4KHVwKSwgJWZyNQorCWZsZGQJCTE2KHVwKSwgJWZyNgorCWZsZGQJCTI0KHVwKSwgJWZyNworCXhtcHl1CQklZnI4UiwgJWZyNEwsICVmcjIyCisJbGRkCQktMHg3OCglcjMwKSwgcDAzMmExCisJeG1weXUJCSVmcjhMLCAlZnI0UiwgJWZyMjMKKwl4bXB5dQkJJWZyOFIsICVmcjVMLCAlZnIyNAorCWxkZAkJLTB4NzAoJXIzMCksIHAwMzJhMgorCXhtcHl1CQklZnI4TCwgJWZyNVIsICVmcjI1CisJeG1weXUJCSVmcjhSLCAlZnI2TCwgJWZyMjYKKwlsZGQJCS0weDM4KCVyMzApLCBwMDk2YjEKKwl4bXB5dQkJJWZyOEwsICVmcjZSLCAlZnIyNworCWZzdGQJCSVmcjIyLCAtMHg3OCglcjMwKQlDIG1pZCBwcm9kdWN0IHRvICAtMHg3OC4uLTB4NzEKKwl4bXB5dQkJJWZyOFIsICVmcjdMLCAlZnIyOAorCWxkZAkJLTB4MzAoJXIzMCksIHAwOTZiMgorCXhtcHl1CQklZnI4TCwgJWZyN1IsICVmcjI5CisJZnN0ZAkJJWZyMjMsIC0weDcwKCVyMzApCUMgbWlkIHByb2R1Y3QgdG8gIC0weDcwLi4tMHg2OQorCXhtcHl1CQklZnI4UiwgJWZyNFIsICVmcjMwCisJbGRkCQktMHg1OCglcjMwKSwgcDE2MGMxCisJeG1weXUJCSVmcjhMLCAlZnI0TCwgJWZyMzEKKwlmc3RkCQklZnIyNCwgLTB4MzgoJXIzMCkJQyBtaWQgcHJvZHVjdCB0byAgLTB4MzguLi0weDMxCisJeG1weXUJCSVmcjhSLCAlZnI1UiwgJWZyMjIKKwlsZGQJCS0weDUwKCVyMzApLCBwMTYwYzIKKwl4bXB5dQkJJWZyOEwsICVmcjVMLCAlZnIyMworCWZzdGQJCSVmcjI1LCAtMHgzMCglcjMwKQlDIG1pZCBwcm9kdWN0IHRvICAtMHgzMC4uLTB4MjkKKwl4bXB5dQkJJWZyOFIsICVmcjZSLCAlZnIyNAorCWxkZAkJLTB4MTgoJXIzMCksIHAyMjRkMQorCXhtcHl1CQklZnI4TCwgJWZyNkwsICVmcjI1CisJZnN0ZAkJJWZyMjYsIC0weDU4KCVyMzApCUMgbWlkIHByb2R1Y3QgdG8gIC0weDU4Li4tMHg1MQorCXhtcHl1CQklZnI4UiwgJWZyN1IsICVmcjI2CisJbGRkCQktMHgxMCglcjMwKSwgcDIyNGQyCisJZnN0ZAkJJWZyMjcsIC0weDUwKCVyMzApCUMgbWlkIHByb2R1Y3QgdG8gIC0weDUwLi4tMHg0OQorCWFkZGliLD0JCS0xLCBuLCBMKGVuZDIpCisJeG1weXUJCSVmcjhMLCAlZnI3TCwgJWZyMjcKK0xERUYobG9vcCkKKwlhZGQJCXAwMzJhMSwgcDAzMmEyLCBtMDMyCisJbGRkCQktMHg4MCglcjMwKSwgcDAwMGEKKwlhZGQsZGMJCXAwOTZiMSwgcDA5NmIyLCBtMDk2CisJZnN0ZAkJJWZyMjgsIC0weDE4KCVyMzApCUMgbWlkIHByb2R1Y3QgdG8gIC0weDE4Li4tMHgxMQorCisJYWRkLGRjCQlwMTYwYzEsIHAxNjBjMiwgbTE2MAorCWxkZAkJLTB4NjgoJXIzMCksIHAwNjRhCisJYWRkLGRjCQlwMjI0ZDEsIHAyMjRkMiwgbTIyNAorCWZzdGQJCSVmcjI5LCAtMHgxMCglcjMwKQlDIG1pZCBwcm9kdWN0IHRvICAtMHgxMC4uLTB4MDkKKworCWFkZCxkYwkJJXIwLCAlcjAsIG0yODgKKwlsZGQJCS0weDQwKCVyMzApLCBwMDY0YgorCWxkbwkJMzIodXApLCB1cAorCWZzdGQJCSVmcjMwLCAtMHg4MCglcjMwKQlDIGxvdyBwcm9kdWN0IHRvICAtMHg4MC4uLTB4NzkKKworCWRlcGQsegkJbTAzMiwgMzEsIDMyLCBtYTAwMAorCWxkZAkJLTB4MjgoJXIzMCksIHAxMjhiCisJZXh0cmQsdQkJbTAzMiwgMzEsIDMyLCBtYTA2NAorCWZzdGQJCSVmcjMxLCAtMHg2OCglcjMwKQlDIGhpZ2ggcHJvZHVjdCB0byAtMHg2OC4uLTB4NjEKKworCWRlcGQJCW0wOTYsIDMxLCAzMiwgbWEwNjQKKwlsZGQJCS0weDYwKCVyMzApLCBwMTI4YworCWV4dHJkLHUJCW0wOTYsIDMxLCAzMiwgbWExMjgKKwlmc3RkCQklZnIyMiwgLTB4NDAoJXIzMCkJQyBsb3cgcHJvZHVjdCB0byAgLTB4NDAuLi0weDM5CisKKwlkZXBkCQltMTYwLCAzMSwgMzIsIG1hMTI4CisJbGRkCQktMHg0OCglcjMwKSwgcDE5MmMKKwlleHRyZCx1CQltMTYwLCAzMSwgMzIsIG1hMTkyCisJZnN0ZAkJJWZyMjMsIC0weDI4KCVyMzApCUMgaGlnaCBwcm9kdWN0IHRvIC0weDI4Li4tMHgyMQorCisJZGVwZAkJbTIyNCwgMzEsIDMyLCBtYTE5MgorCWxkZAkJLTB4MjAoJXIzMCksIHAxOTJkCisJZXh0cmQsdQkJbTIyNCwgMzEsIDMyLCBtYTI1NgorCWZzdGQJCSVmcjI0LCAtMHg2MCglcjMwKQlDIGxvdyBwcm9kdWN0IHRvICAtMHg2MC4uLTB4NTkKKworCWRlcGQJCW0yODgsIDMxLCAzMiwgbWEyNTYKKwlsZGQJCS0weDg4KCVyMzApLCBwMjU2ZAorCWFkZAkJY2xpbWIsIHAwMDBhLCBzMDAwCisJZnN0ZAkJJWZyMjUsIC0weDQ4KCVyMzApCUMgaGlnaCBwcm9kdWN0IHRvIC0weDQ4Li4tMHg0MQorCisJYWRkLGRjCQlwMDY0YSwgcDA2NGIsIHMwNjQKKwlhZGQsZGMJCXAxMjhiLCBwMTI4YywgczEyOAorCWZzdGQJCSVmcjI2LCAtMHgyMCglcjMwKQlDIGxvdyBwcm9kdWN0IHRvICAtMHgyMC4uLTB4MTkKKworCWFkZCxkYwkJcDE5MmMsIHAxOTJkLCBzMTkyCisJYWRkLGRjCQlwMjU2ZCwgJXIwLCBjbGltYgorCWZzdGQJCSVmcjI3LCAtMHg4OCglcjMwKQlDIGhpZ2ggcHJvZHVjdCB0byAtMHg4OC4uLTB4ODEKKworCWFkZAkJbWEwMDAsIHMwMDAsIHMwMDAJQyBhY2N1bSBtaWQgMAorCWZsZGQJCTAodXApLCAlZnI0CisJYWRkLGRjCQltYTA2NCwgczA2NCwgczA2NAlDIGFjY3VtIG1pZCAxCisJc3RkCQlzMDAwLCAwKHJwKQorCisJYWRkLGRjCQltYTEyOCwgczEyOCwgczEyOAlDIGFjY3VtIG1pZCAyCisJZmxkZAkJOCh1cCksICVmcjUKKwlhZGQsZGMJCW1hMTkyLCBzMTkyLCBzMTkyCUMgYWNjdW0gbWlkIDMKKwlzdGQJCXMwNjQsIDgocnApCisKKwlhZGQsZGMJCW1hMjU2LCBjbGltYiwgY2xpbWIKKwlmbGRkCQkxNih1cCksICVmcjYKKwlzdGQJCXMxMjgsIDE2KHJwKQorCisJeG1weXUJCSVmcjhSLCAlZnI0TCwgJWZyMjIKKwlsZGQJCS0weDc4KCVyMzApLCBwMDMyYTEKKwl4bXB5dQkJJWZyOEwsICVmcjRSLCAlZnIyMworCWZsZGQJCTI0KHVwKSwgJWZyNworCisJeG1weXUJCSVmcjhSLCAlZnI1TCwgJWZyMjQKKwlsZGQJCS0weDcwKCVyMzApLCBwMDMyYTIKKwl4bXB5dQkJJWZyOEwsICVmcjVSLCAlZnIyNQorCXN0ZAkJczE5MiwgMjQocnApCisKKwl4bXB5dQkJJWZyOFIsICVmcjZMLCAlZnIyNgorCWxkZAkJLTB4MzgoJXIzMCksIHAwOTZiMQorCXhtcHl1CQklZnI4TCwgJWZyNlIsICVmcjI3CisJZnN0ZAkJJWZyMjIsIC0weDc4KCVyMzApCUMgbWlkIHByb2R1Y3QgdG8gIC0weDc4Li4tMHg3MQorCisJeG1weXUJCSVmcjhSLCAlZnI3TCwgJWZyMjgKKwlsZGQJCS0weDMwKCVyMzApLCBwMDk2YjIKKwl4bXB5dQkJJWZyOEwsICVmcjdSLCAlZnIyOQorCWZzdGQJCSVmcjIzLCAtMHg3MCglcjMwKQlDIG1pZCBwcm9kdWN0IHRvICAtMHg3MC4uLTB4NjkKKworCXhtcHl1CQklZnI4UiwgJWZyNFIsICVmcjMwCisJbGRkCQktMHg1OCglcjMwKSwgcDE2MGMxCisJeG1weXUJCSVmcjhMLCAlZnI0TCwgJWZyMzEKKwlmc3RkCQklZnIyNCwgLTB4MzgoJXIzMCkJQyBtaWQgcHJvZHVjdCB0byAgLTB4MzguLi0weDMxCisKKwl4bXB5dQkJJWZyOFIsICVmcjVSLCAlZnIyMgorCWxkZAkJLTB4NTAoJXIzMCksIHAxNjBjMgorCXhtcHl1CQklZnI4TCwgJWZyNUwsICVmcjIzCisJZnN0ZAkJJWZyMjUsIC0weDMwKCVyMzApCUMgbWlkIHByb2R1Y3QgdG8gIC0weDMwLi4tMHgyOQorCisJeG1weXUJCSVmcjhSLCAlZnI2UiwgJWZyMjQKKwlsZGQJCS0weDE4KCVyMzApLCBwMjI0ZDEKKwl4bXB5dQkJJWZyOEwsICVmcjZMLCAlZnIyNQorCWZzdGQJCSVmcjI2LCAtMHg1OCglcjMwKQlDIG1pZCBwcm9kdWN0IHRvICAtMHg1OC4uLTB4NTEKKworCXhtcHl1CQklZnI4UiwgJWZyN1IsICVmcjI2CisJbGRkCQktMHgxMCglcjMwKSwgcDIyNGQyCisJZnN0ZAkJJWZyMjcsIC0weDUwKCVyMzApCUMgbWlkIHByb2R1Y3QgdG8gIC0weDUwLi4tMHg0OQorCXhtcHl1CQklZnI4TCwgJWZyN0wsICVmcjI3CisKKwlhZGRpYiw8PgktMSwgbiwgTChsb29wKQorCWxkbwkJMzIocnApLCBycAorCitMREVGKGVuZDIpCisJYWRkCQlwMDMyYTEsIHAwMzJhMiwgbTAzMgorCWxkZAkJLTB4ODAoJXIzMCksIHAwMDBhCisJYWRkLGRjCQlwMDk2YjEsIHAwOTZiMiwgbTA5NgorCWZzdGQJCSVmcjI4LCAtMHgxOCglcjMwKQlDIG1pZCBwcm9kdWN0IHRvICAtMHgxOC4uLTB4MTEKKwlhZGQsZGMJCXAxNjBjMSwgcDE2MGMyLCBtMTYwCisJbGRkCQktMHg2OCglcjMwKSwgcDA2NGEKKwlhZGQsZGMJCXAyMjRkMSwgcDIyNGQyLCBtMjI0CisJZnN0ZAkJJWZyMjksIC0weDEwKCVyMzApCUMgbWlkIHByb2R1Y3QgdG8gIC0weDEwLi4tMHgwOQorCWFkZCxkYwkJJXIwLCAlcjAsIG0yODgKKwlsZGQJCS0weDQwKCVyMzApLCBwMDY0YgorCWZzdGQJCSVmcjMwLCAtMHg4MCglcjMwKQlDIGxvdyBwcm9kdWN0IHRvICAtMHg4MC4uLTB4NzkKKwlkZXBkLHoJCW0wMzIsIDMxLCAzMiwgbWEwMDAKKwlsZGQJCS0weDI4KCVyMzApLCBwMTI4YgorCWV4dHJkLHUJCW0wMzIsIDMxLCAzMiwgbWEwNjQKKwlmc3RkCQklZnIzMSwgLTB4NjgoJXIzMCkJQyBoaWdoIHByb2R1Y3QgdG8gLTB4NjguLi0weDYxCisJZGVwZAkJbTA5NiwgMzEsIDMyLCBtYTA2NAorCWxkZAkJLTB4NjAoJXIzMCksIHAxMjhjCisJZXh0cmQsdQkJbTA5NiwgMzEsIDMyLCBtYTEyOAorCWZzdGQJCSVmcjIyLCAtMHg0MCglcjMwKQlDIGxvdyBwcm9kdWN0IHRvICAtMHg0MC4uLTB4MzkKKwlkZXBkCQltMTYwLCAzMSwgMzIsIG1hMTI4CisJbGRkCQktMHg0OCglcjMwKSwgcDE5MmMKKwlleHRyZCx1CQltMTYwLCAzMSwgMzIsIG1hMTkyCisJZnN0ZAkJJWZyMjMsIC0weDI4KCVyMzApCUMgaGlnaCBwcm9kdWN0IHRvIC0weDI4Li4tMHgyMQorCWRlcGQJCW0yMjQsIDMxLCAzMiwgbWExOTIKKwlsZGQJCS0weDIwKCVyMzApLCBwMTkyZAorCWV4dHJkLHUJCW0yMjQsIDMxLCAzMiwgbWEyNTYKKwlmc3RkCQklZnIyNCwgLTB4NjAoJXIzMCkJQyBsb3cgcHJvZHVjdCB0byAgLTB4NjAuLi0weDU5CisJZGVwZAkJbTI4OCwgMzEsIDMyLCBtYTI1NgorCWxkZAkJLTB4ODgoJXIzMCksIHAyNTZkCisJYWRkCQljbGltYiwgcDAwMGEsIHMwMDAKKwlmc3RkCQklZnIyNSwgLTB4NDgoJXIzMCkJQyBoaWdoIHByb2R1Y3QgdG8gLTB4NDguLi0weDQxCisJYWRkLGRjCQlwMDY0YSwgcDA2NGIsIHMwNjQKKwlhZGQsZGMJCXAxMjhiLCBwMTI4YywgczEyOAorCWZzdGQJCSVmcjI2LCAtMHgyMCglcjMwKQlDIGxvdyBwcm9kdWN0IHRvICAtMHgyMC4uLTB4MTkKKwlhZGQsZGMJCXAxOTJjLCBwMTkyZCwgczE5MgorCWFkZCxkYwkJcDI1NmQsICVyMCwgY2xpbWIKKwlmc3RkCQklZnIyNywgLTB4ODgoJXIzMCkJQyBoaWdoIHByb2R1Y3QgdG8gLTB4ODguLi0weDgxCisJYWRkCQltYTAwMCwgczAwMCwgczAwMAlDIGFjY3VtIG1pZCAwCisJYWRkLGRjCQltYTA2NCwgczA2NCwgczA2NAlDIGFjY3VtIG1pZCAxCisJYWRkLGRjCQltYTEyOCwgczEyOCwgczEyOAlDIGFjY3VtIG1pZCAyCisJYWRkLGRjCQltYTE5MiwgczE5MiwgczE5MglDIGFjY3VtIG1pZCAzCisJYWRkLGRjCQltYTI1NiwgY2xpbWIsIGNsaW1iCisJc3RkCQlzMDAwLCAwKHJwKQorCXN0ZAkJczA2NCwgOChycCkKKwlsZGQJCS0weDc4KCVyMzApLCBwMDMyYTEKKwlzdGQJCXMxMjgsIDE2KHJwKQorCWxkZAkJLTB4NzAoJXIzMCksIHAwMzJhMgorCXN0ZAkJczE5MiwgMjQocnApCisJbGRkCQktMHgzOCglcjMwKSwgcDA5NmIxCisJbGRkCQktMHgzMCglcjMwKSwgcDA5NmIyCisJbGRkCQktMHg1OCglcjMwKSwgcDE2MGMxCisJbGRkCQktMHg1MCglcjMwKSwgcDE2MGMyCisJbGRkCQktMHgxOCglcjMwKSwgcDIyNGQxCisJbGRkCQktMHgxMCglcjMwKSwgcDIyNGQyCisJbGRvCQkzMihycCksIHJwCisKK0xERUYoZW5kMSkKKwlhZGQJCXAwMzJhMSwgcDAzMmEyLCBtMDMyCisJbGRkCQktMHg4MCglcjMwKSwgcDAwMGEKKwlhZGQsZGMJCXAwOTZiMSwgcDA5NmIyLCBtMDk2CisJYWRkLGRjCQlwMTYwYzEsIHAxNjBjMiwgbTE2MAorCWxkZAkJLTB4NjgoJXIzMCksIHAwNjRhCisJYWRkLGRjCQlwMjI0ZDEsIHAyMjRkMiwgbTIyNAorCWFkZCxkYwkJJXIwLCAlcjAsIG0yODgKKwlsZGQJCS0weDQwKCVyMzApLCBwMDY0YgorCWRlcGQsegkJbTAzMiwgMzEsIDMyLCBtYTAwMAorCWxkZAkJLTB4MjgoJXIzMCksIHAxMjhiCisJZXh0cmQsdQkJbTAzMiwgMzEsIDMyLCBtYTA2NAorCWRlcGQJCW0wOTYsIDMxLCAzMiwgbWEwNjQKKwlsZGQJCS0weDYwKCVyMzApLCBwMTI4YworCWV4dHJkLHUJCW0wOTYsIDMxLCAzMiwgbWExMjgKKwlkZXBkCQltMTYwLCAzMSwgMzIsIG1hMTI4CisJbGRkCQktMHg0OCglcjMwKSwgcDE5MmMKKwlleHRyZCx1CQltMTYwLCAzMSwgMzIsIG1hMTkyCisJZGVwZAkJbTIyNCwgMzEsIDMyLCBtYTE5MgorCWxkZAkJLTB4MjAoJXIzMCksIHAxOTJkCisJZXh0cmQsdQkJbTIyNCwgMzEsIDMyLCBtYTI1NgorCWRlcGQJCW0yODgsIDMxLCAzMiwgbWEyNTYKKwlsZGQJCS0weDg4KCVyMzApLCBwMjU2ZAorCWFkZAkJY2xpbWIsIHAwMDBhLCBzMDAwCisJYWRkLGRjCQlwMDY0YSwgcDA2NGIsIHMwNjQKKwlhZGQsZGMJCXAxMjhiLCBwMTI4YywgczEyOAorCWFkZCxkYwkJcDE5MmMsIHAxOTJkLCBzMTkyCisJYWRkLGRjCQlwMjU2ZCwgJXIwLCBjbGltYgorCWFkZAkJbWEwMDAsIHMwMDAsIHMwMDAJQyBhY2N1bSBtaWQgMAorCWFkZCxkYwkJbWEwNjQsIHMwNjQsIHMwNjQJQyBhY2N1bSBtaWQgMQorCWFkZCxkYwkJbWExMjgsIHMxMjgsIHMxMjgJQyBhY2N1bSBtaWQgMgorCWFkZCxkYwkJbWExOTIsIHMxOTIsIHMxOTIJQyBhY2N1bSBtaWQgMworCWFkZCxkYwkJbWEyNTYsIGNsaW1iLCBjbGltYgorCXN0ZAkJczAwMCwgMChycCkKKwlzdGQJCXMwNjQsIDgocnApCisJc3RkCQlzMTI4LCAxNihycCkKKwlzdGQJCXMxOTIsIDI0KHJwKQorCisJbGRkCQktMHhiMCglcjMwKSwgJXIxMworCWxkZAkJLTB4YjgoJXIzMCksICVyMTIKKwlsZGQJCS0weGMwKCVyMzApLCAlcjExCisJbGRkCQktMHhjOCglcjMwKSwgJXIxMAorCWxkZAkJLTB4ZDAoJXIzMCksICVyOQorCWxkZAkJLTB4ZDgoJXIzMCksICVyOAorCWxkZAkJLTB4ZTAoJXIzMCksICVyNworCWxkZAkJLTB4ZTgoJXIzMCksICVyNgorTERFRihkb25lKQoraWZkZWYoYEhBVkVfQUJJXzJfMHcnLAorYAljb3B5CQljbGltYiwgJXIyOAorJyxgCWV4dHJkLHUJCWNsaW1iLCA2MywgMzIsICVyMjkKKwlleHRyZCx1CQljbGltYiwgMzEsIDMyLCAlcjI4CisnKQorCWxkZAkJLTB4ZjAoJXIzMCksICVyNQorCWxkZAkJLTB4ZjgoJXIzMCksICVyNAorCWJ2ZQkJKCVyMikKKwlsZGQsbWIJCS0weDEwMCglcjMwKSwgJXIzCitFUElMT0dVRShtcG5fbXVsXzEpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3BhNjQvcnNoaWZ0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcGE2NC9yc2hpZnQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmYzI0MmUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3BhNjQvcnNoaWZ0LmFzbQpAQCAtMCwwICsxLDExMSBAQAorZG5sICBIUC1QQSAyLjAgbXBuX3JzaGlmdCAtLSBSaWdodCBzaGlmdC4KKworZG5sICBDb3B5cmlnaHQgMTk5NywgMjAwMCwgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKK2RubCAgVGhpcyBydW5zIGF0IDEuNSBjeWNsZXMvbGltYiBvbiBQQTgwMDAgYW5kIDEuMCBjeWNsZXMvbGltYiBvbiBQQTg1MDAuCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK2RubCAgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsYCVyMjYnKQorZGVmaW5lKGB1cCcsYCVyMjUnKQorZGVmaW5lKGBuJyxgJXIyNCcpCitkZWZpbmUoYGNudCcsYCVyMjMnKQorCitpZmRlZihgSEFWRV9BQklfMl8wdycsCitgICAgICAgIC5sZXZlbCAgMi4wdworJyxgICAgICAubGV2ZWwgIDIuMAorJykKK1BST0xPR1VFKG1wbl9yc2hpZnQpCisJbXRzYXIJCWNudAorCWxkZAkJMCh1cCksICVyMjEKKwlhZGRpYiw9CQktMSwgbiwgTChlbmQpCisJc2hycGQJCSVyMjEsICVyMCwgJXNhciwgJXIyOQlDIGNvbXB1dGUgY2Fycnkgb3V0IGxpbWIKKwlkZXB3LHoJCW4sIDMxLCAzLCAlcjI4CQlDIHIyOCA9IChzaXplICYgNykKKwlzdWIJCSVyMCwgbiwgJXIyMgorCWRlcHcsegkJJXIyMiwgMjgsIDMsICVyMjIJQyByMjIgPSA4ICogKC1zaXplICYgNykKKwlzdWIJCXVwLCAlcjIyLCB1cAkJQyBvZmZzZXQgdXAKKwlibHIJCSVyMjgsICVyMAkJQyBicmFuY2ggaW50byBqdW1wIHRhYmxlCisJc3ViCQlycCwgJXIyMiwgcnAJCUMgb2Zmc2V0IHJwCisJYgkJTCgwKQorCW5vcAorCWIJCUwoMSkKKwljb3B5CQklcjIxLCAlcjIwCisJYgkJTCgyKQorCW5vcAorCWIJCUwoMykKKwljb3B5CQklcjIxLCAlcjIwCisJYgkJTCg0KQorCW5vcAorCWIJCUwoNSkKKwljb3B5CQklcjIxLCAlcjIwCisJYgkJTCg2KQorCW5vcAorCWIJCUwoNykKKwljb3B5CQklcjIxLCAlcjIwCisKK0xERUYobG9vcCkKK0xERUYoMCkJbGRkCQk4KHVwKSwgJXIyMAorCXNocnBkCQklcjIwLCAlcjIxLCAlc2FyLCAlcjIxCisJc3RkCQklcjIxLCAwKHJwKQorTERFRig3KQlsZGQJCTE2KHVwKSwgJXIyMQorCXNocnBkCQklcjIxLCAlcjIwLCAlc2FyLCAlcjIwCisJc3RkCQklcjIwLCA4KHJwKQorTERFRig2KQlsZGQJCTI0KHVwKSwgJXIyMAorCXNocnBkCQklcjIwLCAlcjIxLCAlc2FyLCAlcjIxCisJc3RkCQklcjIxLCAxNihycCkKK0xERUYoNSkJbGRkCQkzMih1cCksICVyMjEKKwlzaHJwZAkJJXIyMSwgJXIyMCwgJXNhciwgJXIyMAorCXN0ZAkJJXIyMCwgMjQocnApCitMREVGKDQpCWxkZAkJNDAodXApLCAlcjIwCisJc2hycGQJCSVyMjAsICVyMjEsICVzYXIsICVyMjEKKwlzdGQJCSVyMjEsIDMyKHJwKQorTERFRigzKQlsZGQJCTQ4KHVwKSwgJXIyMQorCXNocnBkCQklcjIxLCAlcjIwLCAlc2FyLCAlcjIwCisJc3RkCQklcjIwLCA0MChycCkKK0xERUYoMikJbGRkCQk1Nih1cCksICVyMjAKKwlzaHJwZAkJJXIyMCwgJXIyMSwgJXNhciwgJXIyMQorCXN0ZAkJJXIyMSwgNDgocnApCitMREVGKDEpCWxkZAkJNjQodXApLCAlcjIxCisJbGRvCQk2NCh1cCksIHVwCisJc2hycGQJCSVyMjEsICVyMjAsICVzYXIsICVyMjAKKwlzdGQJCSVyMjAsIDU2KHJwKQorCWFkZGliLD4JCS04LCBuLCBMKGxvb3ApCisJbGRvCQk2NChycCksIHJwCisKK0xERUYoZW5kKQorCXNocnBkCQklcjAsICVyMjEsICVzYXIsICVyMjEKKwlzdGQJCSVyMjEsIDAocnApCisJYnZlCQkoJXIyKQoraWZkZWYoYEhBVkVfQUJJXzJfMHcnLAorYAljb3B5CQklcjI5LCVyMjgKKycsYAlleHRyZCx1CQklcjI5LCAzMSwgMzIsICVyMjgKKycpCitFUElMT0dVRShtcG5fcnNoaWZ0KQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wYTY0L3Nxcl9kaWFnb25hbC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3BhNjQvc3FyX2RpYWdvbmFsLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmZhZGM5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wYTY0L3Nxcl9kaWFnb25hbC5hc20KQEAgLTAsMCArMSwxOTEgQEAKK2RubCAgSFAtUEEgMi4wIDY0LWJpdCBtcG5fc3FyX2RpYWdvbmFsLgorCitkbmwgIENvcHlyaWdodCAyMDAxLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCitkbmwgIFRoaXMgY29kZSBydW5zIGF0IDcuMjUgY3ljbGVzL2xpbWIgb24gUEE4MDAwIGFuZCA3Ljc1IGN5Y2xlcy9saW1iIG9uCitkbmwgIFBBODUwMC4gIFRoZSBjYWNoZSB3b3VsZCBzYXR1cmF0ZSBhdCA1IGN5Y2xlcy9saW1iLCBzbyB0aGVyZSBpcyBzb21lIHJvb20KK2RubCAgZm9yIG9wdGltaXphdGlvbi4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJyxgJXIyNicpCitkZWZpbmUoYHVwJyxgJXIyNScpCitkZWZpbmUoYG4nLGAlcjI0JykKKworZGVmaW5lKGBwMDAnLGAlcjI4JykKK2RlZmluZShgcDMyJyxgJXIyOScpCitkZWZpbmUoYHA2NCcsYCVyMzEnKQorZGVmaW5lKGB0MCcsYCVyMTknKQorZGVmaW5lKGB0MScsYCVyMjAnKQorCitpZmRlZihgSEFWRV9BQklfMl8wdycsCitgCS5sZXZlbAkyLjB3CisnLGAJLmxldmVsCTIuMAorJykKK1BST0xPR1VFKG1wbl9zcXJfZGlhZ29uYWwpCisJbGRvCQkxMjgoJXIzMCksJXIzMAorCisJZmxkZHMsbWEJOCh1cCksJWZyOAorCWFkZGliLD0JCS0xLG4sTChlbmQxKQorCW5vcAorCWZsZGRzLG1hCTgodXApLCVmcjQKKwl4bXB5dQkJJWZyOGwsJWZyOHIsJWZyMTAKKwlmc3RkCQklZnIxMCwtMTIwKCVyMzApCisJeG1weXUJCSVmcjhyLCVmcjhyLCVmcjkKKwlmc3RkCQklZnI5LDAocnApCisJeG1weXUJCSVmcjhsLCVmcjhsLCVmcjExCisJZnN0ZAkJJWZyMTEsOChycCkKKwlhZGRpYiw9CQktMSxuLEwoZW5kMikKKwlsZG8JCTE2KHJwKSxycAorCitMREVGKGxvb3ApCisJZmxkZHMsbWEJOCh1cCksJWZyOAkJQyBsb2FkIG5leHQgdXAgbGltYgorCXhtcHl1CQklZnI0bCwlZnI0ciwlZnI2CisJZnN0ZAkJJWZyNiwtMTI4KCVyMzApCisJeG1weXUJCSVmcjRyLCVmcjRyLCVmcjUJQyBtdWx0aXBseSBpbiBmcCByZWdzCisJZnN0ZAkJJWZyNSwwKHJwKQorCXhtcHl1CQklZnI0bCwlZnI0bCwlZnI3CisJZnN0ZAkJJWZyNyw4KHJwKQorCWxkZAkJLTEyMCglcjMwKSxwMzIKKwlsZGQJCS0xNihycCkscDAwCQlDIGFjY3VtdWxhdGUgaW4gaW50IHJlZ3MKKwlsZGQJCS04KHJwKSxwNjQKKwlkZXBkLHoJCXAzMiwzMCwzMSx0MAorCWFkZAkJdDAscDAwLHAwMAorCXN0ZAkJcDAwLC0xNihycCkKKwlleHRyZCx1CQlwMzIsMzIsMzMsdDEKKwlhZGQsZGMJCXQxLHA2NCxwNjQKKwlzdGQJCXA2NCwtOChycCkKKwlhZGRpYiw9CQktMSxuLEwoZXhpdCkKKwlsZG8JCTE2KHJwKSxycAorCisJZmxkZHMsbWEJOCh1cCksJWZyNAorCXhtcHl1CQklZnI4bCwlZnI4ciwlZnIxMAorCWZzdGQJCSVmcjEwLC0xMjAoJXIzMCkKKwl4bXB5dQkJJWZyOHIsJWZyOHIsJWZyOQorCWZzdGQJCSVmcjksMChycCkKKwl4bXB5dQkJJWZyOGwsJWZyOGwsJWZyMTEKKwlmc3RkCQklZnIxMSw4KHJwKQorCWxkZAkJLTEyOCglcjMwKSxwMzIKKwlsZGQJCS0xNihycCkscDAwCisJbGRkCQktOChycCkscDY0CisJZGVwZCx6CQlwMzIsMzAsMzEsdDAKKwlhZGQJCXQwLHAwMCxwMDAKKwlzdGQJCXAwMCwtMTYocnApCisJZXh0cmQsdQkJcDMyLDMyLDMzLHQxCisJYWRkLGRjCQl0MSxwNjQscDY0CisJc3RkCQlwNjQsLTgocnApCisJYWRkaWIsPD4JLTEsbixMKGxvb3ApCisJbGRvCQkxNihycCkscnAKKworTERFRihlbmQyKQorCXhtcHl1CQklZnI0bCwlZnI0ciwlZnI2CisJZnN0ZAkJJWZyNiwtMTI4KCVyMzApCisJeG1weXUJCSVmcjRyLCVmcjRyLCVmcjUKKwlmc3RkCQklZnI1LDAocnApCisJeG1weXUJCSVmcjRsLCVmcjRsLCVmcjcKKwlmc3RkCQklZnI3LDgocnApCisJbGRkCQktMTIwKCVyMzApLHAzMgorCWxkZAkJLTE2KHJwKSxwMDAKKwlsZGQJCS04KHJwKSxwNjQKKwlkZXBkLHoJCXAzMiwzMCwzMSx0MAorCWFkZAkJdDAscDAwLHAwMAorCXN0ZAkJcDAwLC0xNihycCkKKwlleHRyZCx1CQlwMzIsMzIsMzMsdDEKKwlhZGQsZGMJCXQxLHA2NCxwNjQKKwlzdGQJCXA2NCwtOChycCkKKwlsZG8JCTE2KHJwKSxycAorCWxkZAkJLTEyOCglcjMwKSxwMzIKKwlsZGQJCS0xNihycCkscDAwCisJbGRkCQktOChycCkscDY0CisJZGVwZCx6CQlwMzIsMzAsMzEsdDAKKwlhZGQJCXQwLHAwMCxwMDAKKwlzdGQJCXAwMCwtMTYocnApCisJZXh0cmQsdQkJcDMyLDMyLDMzLHQxCisJYWRkLGRjCQl0MSxwNjQscDY0CisJc3RkCQlwNjQsLTgocnApCisJYnZlCQkoJXIyKQorCWxkbwkJLTEyOCglcjMwKSwlcjMwCisKK0xERUYoZXhpdCkKKwl4bXB5dQkJJWZyOGwsJWZyOHIsJWZyMTAKKwlmc3RkCQklZnIxMCwtMTIwKCVyMzApCisJeG1weXUJCSVmcjhyLCVmcjhyLCVmcjkKKwlmc3RkCQklZnI5LDAocnApCisJeG1weXUJCSVmcjhsLCVmcjhsLCVmcjExCisJZnN0ZAkJJWZyMTEsOChycCkKKwlsZGQJCS0xMjgoJXIzMCkscDMyCisJbGRkCQktMTYocnApLHAwMAorCWxkZAkJLTgocnApLHA2NAorCWRlcGQsegkJcDMyLDMxLDMyLHQwCisJYWRkCQl0MCxwMDAscDAwCisJZXh0cmQsdQkJcDMyLDMxLDMyLHQxCisJYWRkLGRjCQl0MSxwNjQscDY0CisJYWRkCQl0MCxwMDAscDAwCisJYWRkLGRjCQl0MSxwNjQscDY0CisJc3RkCQlwMDAsLTE2KHJwKQorCXN0ZAkJcDY0LC04KHJwKQorCWxkbwkJMTYocnApLHJwCisJbGRkCQktMTIwKCVyMzApLHAzMgorCWxkZAkJLTE2KHJwKSxwMDAKKwlsZGQJCS04KHJwKSxwNjQKKwlkZXBkLHoJCXAzMiwzMSwzMix0MAorCWFkZAkJdDAscDAwLHAwMAorCWV4dHJkLHUJCXAzMiwzMSwzMix0MQorCWFkZCxkYwkJdDEscDY0LHA2NAorCWFkZAkJdDAscDAwLHAwMAorCWFkZCxkYwkJdDEscDY0LHA2NAorCXN0ZAkJcDAwLC0xNihycCkKKwlzdGQJCXA2NCwtOChycCkKKwlidmUJCSglcjIpCisJbGRvCQktMTI4KCVyMzApLCVyMzAKKworTERFRihlbmQxKQorCXhtcHl1CQklZnI4bCwlZnI4ciwlZnIxMAorCWZzdGQJCSVmcjEwLC0xMjgoJXIzMCkKKwl4bXB5dQkJJWZyOHIsJWZyOHIsJWZyOQorCWZzdGQJCSVmcjksMChycCkKKwl4bXB5dQkJJWZyOGwsJWZyOGwsJWZyMTEKKwlmc3RkCQklZnIxMSw4KHJwKQorCWxkbwkJMTYocnApLHJwCisJbGRkCQktMTI4KCVyMzApLHAzMgorCWxkZAkJLTE2KHJwKSxwMDAKKwlsZGQJCS04KHJwKSxwNjQKKwlkZXBkLHoJCXAzMiwzMSwzMix0MAorCWFkZAkJdDAscDAwLHAwMAorCWV4dHJkLHUJCXAzMiwzMSwzMix0MQorCWFkZCxkYwkJdDEscDY0LHA2NAorCWFkZAkJdDAscDAwLHAwMAorCWFkZCxkYwkJdDEscDY0LHA2NAorCXN0ZAkJcDAwLC0xNihycCkKKwlzdGQJCXA2NCwtOChycCkKKwlidmUJCSglcjIpCisJbGRvCQktMTI4KCVyMzApLCVyMzAKK0VQSUxPR1VFKG1wbl9zcXJfZGlhZ29uYWwpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3BhNjQvc3VibXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wYTY0L3N1Ym11bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGExOTY4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wYTY0L3N1Ym11bF8xLmFzbQpAQCAtMCwwICsxLDcwMCBAQAorZG5sICBIUC1QQSAyLjAgNjQtYml0IG1wbl9zdWJtdWxfMSAtLSBNdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYSBsaW1iIGFuZAorZG5sICBzdWJ0cmFjdCB0aGUgcmVzdWx0IGZyb20gYSBzZWNvbmQgbGltYiB2ZWN0b3IuCisKK2RubCAgQ29weXJpZ2h0IDE5OTgtMjAwMCwgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCQkgICAgY3ljbGVzL2xpbWIKK0MgODAwMCw4MjAwOgkJNworQyA4NTAwLDg2MDAsODcwMDoJNi41CisKK0MgIFRoZSBmZWVkLWluIGFuZCB3aW5kLWRvd24gY29kZSBoYXMgbm90IHlldCBiZWVuIHNjaGVkdWxlZC4gIE1hbnkgY3ljbGVzCitDICBjb3VsZCBiZSBzYXZlZCB0aGVyZSBwZXIgY2FsbC4KKworQyAgREVTQ1JJUFRJT046CitDICBUaGUgbWFpbiBsb29wICJCSUciIGlzIDQtd2F5IHVucm9sbGVkLCBtYWlubHkgdG8gYWxsb3cKK0MgIGVmZmVjdGl2ZSB1c2Ugb2YgQURELERDLiAgRGVsYXlzIGluIG1vdmluZyBkYXRhIHZpYSB0aGUgY2FjaGUgZnJvbSB0aGUgRlAKK0MgIHJlZ2lzdGVycyB0byB0aGUgSVUgcmVnaXN0ZXJzLCBoYXZlIGRlbWFuZGVkIGEgZGVlcCBzb2Z0d2FyZSBwaXBlbGluZSwgYW5kCitDICBhIGxvdCBvZiBzdGFjayBzbG90cyBmb3IgcGFydGlhbCBwcm9kdWN0cyBpbiBmbGlnaHQuCitDCitDICBDT0RFIFNUUlVDVFVSRToKK0MgIHNhdmUtc29tZS1yZWdpc3RlcnMKK0MgIGRvIDAsIDEsIDIsIG9yIDMgbGltYnMKK0MgIGlmIGRvbmUsIHJlc3RvcmUtc29tZS1yZWdzIGFuZCByZXR1cm4KK0MgIHNhdmUtbWFueS1yZWdzCitDICBkbyA0LCA4LCAuLi4gbGltYgorQyAgcmVzdG9yZS1hbGwtcmVncworCitDICBTVEFDSyBMQVlPVVQ6CitDICBIUC1QQSBzdGFjayBncm93cyB1cHdhcmRzLiAgV2UgY291bGQgYWxsb2NhdGUgOCBmZXdlciBzbG90cyBieSB1c2luZyB0aGUKK0MgIHNsb3RzIG1hcmtlZCBGUkVFLCBhcyB3ZWxsIGFzIHNvbWUgc2xvdHMgaW4gdGhlIGNhbGxlcidzICJmcmFtZSBtYXJrZXIiLgorQworQyAtMDAgPC0gcjMwCitDIC0wOCAgRlJFRQorQyAtMTAgIHRtcAorQyAtMTggIHRtcAorQyAtMjAgIHRtcAorQyAtMjggIHRtcAorQyAtMzAgIHRtcAorQyAtMzggIHRtcAorQyAtNDAgIHRtcAorQyAtNDggIHRtcAorQyAtNTAgIHRtcAorQyAtNTggIHRtcAorQyAtNjAgIHRtcAorQyAtNjggIHRtcAorQyAtNzAgIHRtcAorQyAtNzggIHRtcAorQyAtODAgIHRtcAorQyAtODggIHRtcAorQyAtOTAgIEZSRUUKK0MgLTk4ICBGUkVFCitDIC1hMCAgRlJFRQorQyAtYTggIEZSRUUKK0MgLWIwICByMTMKK0MgLWI4ICByMTIKK0MgLWMwICByMTEKK0MgLWM4ICByMTAKK0MgLWQwICByOAorQyAtZDggIHI4CitDIC1lMCAgcjcKK0MgLWU4ICByNgorQyAtZjAgIHI1CitDIC1mOCAgcjQKK0MgLTEwMCByMworQyAgUHJldmlvdXMgZnJhbWU6CitDICBbdW51c2VkIGFyZWFdCitDIC0zOC8tMTM4IHZsaW1iIGhvbWUgc2xvdC4gIEZvciAyLjBOLCB0aGUgdmxpbWIgYXJnIHdpbGwgYXJyaXZlIGhlcmUuCisKKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBJTlBVVCBQQVJBTUVURVJTOgorZGVmaW5lKGBycCcsYCVyMjYnKQlDCitkZWZpbmUoYHVwJyxgJXIyNScpCUMKK2RlZmluZShgbicsYCVyMjQnKQlDCitkZWZpbmUoYHZsaW1iJyxgJXIyMycpCUMKKworZGVmaW5lKGBjbGltYicsYCVyMjMnKQlDCisKK2lmZGVmKGBIQVZFX0FCSV8yXzB3JywKK2AJLmxldmVsCTIuMHcKKycsYAkubGV2ZWwJMi4wCisnKQorUFJPTE9HVUUobXBuX3N1Ym11bF8xKQorCitpZmRlZihgSEFWRV9BQklfMl8wdycsCitgCXN0ZAkJdmxpbWIsIC0weDM4KCVyMzApCUMgc3RvcmUgdmxpbWIgaW50byAiaG9tZSIgc2xvdAorJykKKwlzdGQsbWEJCSVyMywgMHgxMDAoJXIzMCkKKwlzdGQJCSVyNCwgLTB4ZjgoJXIzMCkKKwlzdGQJCSVyNSwgLTB4ZjAoJXIzMCkKKwlsZG8JCTAoJXIwKSwgY2xpbWIJCUMgY2xlYXIgY2xpbWIKKwlmbGRkCQktMHgxMzgoJXIzMCksICVmcjgJQyBwdXQgdmxpbWIgaW4gZnAgcmVnaXN0ZXIKKworZGVmaW5lKGBwMDMyYTEnLGAlcjEnKQlDCitkZWZpbmUoYHAwMzJhMicsYCVyMTknKQlDCisKK2RlZmluZShgbTAzMicsYCVyMjAnKQlDCitkZWZpbmUoYG0wOTYnLGAlcjIxJykJQworCitkZWZpbmUoYHAwMDBhJyxgJXIyMicpCUMKK2RlZmluZShgcDA2NGEnLGAlcjI5JykJQworCitkZWZpbmUoYHMwMDAnLGAlcjMxJykJQworCitkZWZpbmUoYG1hMDAwJyxgJXI0JykJQworZGVmaW5lKGBtYTA2NCcsYCVyMjAnKQlDCisKK2RlZmluZShgcjAwMCcsYCVyMycpCUMKKworCWV4dHJkLHUJCW4sIDYzLCAyLCAlcjUKKwljbXBiLD0JCSVyNSwgJXIwLCBMKEJJRykKKwlub3AKKworCWZsZGQJCTAodXApLCAlZnI0CisJbGRvCQk4KHVwKSwgdXAKKwl4bXB5dQkJJWZyOFIsICVmcjRMLCAlZnIyMgorCXhtcHl1CQklZnI4TCwgJWZyNFIsICVmcjIzCisJZnN0ZAkJJWZyMjIsIC0weDc4KCVyMzApCUMgbWlkIHByb2R1Y3QgdG8gIC0weDc4Li4tMHg3MQorCXhtcHl1CQklZnI4UiwgJWZyNFIsICVmcjI0CisJeG1weXUJCSVmcjhMLCAlZnI0TCwgJWZyMjUKKwlmc3RkCQklZnIyMywgLTB4NzAoJXIzMCkJQyBtaWQgcHJvZHVjdCB0byAgLTB4NzAuLi0weDY5CisJZnN0ZAkJJWZyMjQsIC0weDgwKCVyMzApCUMgbG93IHByb2R1Y3QgdG8gIC0weDgwLi4tMHg3OQorCWFkZGliLDw+CS0xLCAlcjUsIEwodHdvX29yX21vcmUpCisJZnN0ZAkJJWZyMjUsIC0weDY4KCVyMzApCUMgaGlnaCBwcm9kdWN0IHRvIC0weDY4Li4tMHg2MQorTERFRihvbmUpCisJbGRkCQktMHg3OCglcjMwKSwgcDAzMmExCisJbGRkCQktMHg3MCglcjMwKSwgcDAzMmEyCisJbGRkCQktMHg4MCglcjMwKSwgcDAwMGEKKwliCQlMKDBfb25lX291dCkKKwlsZGQJCS0weDY4KCVyMzApLCBwMDY0YQorCitMREVGKHR3b19vcl9tb3JlKQorCWZsZGQJCTAodXApLCAlZnI0CisJbGRvCQk4KHVwKSwgdXAKKwl4bXB5dQkJJWZyOFIsICVmcjRMLCAlZnIyMgorCXhtcHl1CQklZnI4TCwgJWZyNFIsICVmcjIzCisJbGRkCQktMHg3OCglcjMwKSwgcDAzMmExCisJZnN0ZAkJJWZyMjIsIC0weDc4KCVyMzApCUMgbWlkIHByb2R1Y3QgdG8gIC0weDc4Li4tMHg3MQorCXhtcHl1CQklZnI4UiwgJWZyNFIsICVmcjI0CisJeG1weXUJCSVmcjhMLCAlZnI0TCwgJWZyMjUKKwlsZGQJCS0weDcwKCVyMzApLCBwMDMyYTIKKwlmc3RkCQklZnIyMywgLTB4NzAoJXIzMCkJQyBtaWQgcHJvZHVjdCB0byAgLTB4NzAuLi0weDY5CisJbGRkCQktMHg4MCglcjMwKSwgcDAwMGEKKwlmc3RkCQklZnIyNCwgLTB4ODAoJXIzMCkJQyBsb3cgcHJvZHVjdCB0byAgLTB4ODAuLi0weDc5CisJbGRkCQktMHg2OCglcjMwKSwgcDA2NGEKKwlhZGRpYiw8PgktMSwgJXI1LCBMKHRocmVlX29yX21vcmUpCisJZnN0ZAkJJWZyMjUsIC0weDY4KCVyMzApCUMgaGlnaCBwcm9kdWN0IHRvIC0weDY4Li4tMHg2MQorTERFRih0d28pCisJYWRkCQlwMDMyYTEsIHAwMzJhMiwgbTAzMgorCWFkZCxkYwkJJXIwLCAlcjAsIG0wOTYKKwlkZXBkLHoJCW0wMzIsIDMxLCAzMiwgbWEwMDAKKwlleHRyZCx1CQltMDMyLCAzMSwgMzIsIG1hMDY0CisJbGRkCQkwKHJwKSwgcjAwMAorCWIJCUwoMF90d29fb3V0KQorCWRlcGQJCW0wOTYsIDMxLCAzMiwgbWEwNjQKKworTERFRih0aHJlZV9vcl9tb3JlKQorCWZsZGQJCTAodXApLCAlZnI0CisJYWRkCQlwMDMyYTEsIHAwMzJhMiwgbTAzMgorCWFkZCxkYwkJJXIwLCAlcjAsIG0wOTYKKwlkZXBkLHoJCW0wMzIsIDMxLCAzMiwgbWEwMDAKKwlleHRyZCx1CQltMDMyLCAzMSwgMzIsIG1hMDY0CisJbGRkCQkwKHJwKSwgcjAwMAorQwlhZGRpYiw9CQktMSwgJXI1LCBMKDBfb3V0KQorCWRlcGQJCW0wOTYsIDMxLCAzMiwgbWEwNjQKK0xERUYobG9vcDApCitDCXhtcHl1CQklZnI4UiwgJWZyNEwsICVmcjIyCitDCXhtcHl1CQklZnI4TCwgJWZyNFIsICVmcjIzCitDCWxkZAkJLTB4NzgoJXIzMCksIHAwMzJhMQorQwlmc3RkCQklZnIyMiwgLTB4NzgoJXIzMCkJQyBtaWQgcHJvZHVjdCB0byAgLTB4NzguLi0weDcxCitDCitDCXhtcHl1CQklZnI4UiwgJWZyNFIsICVmcjI0CitDCXhtcHl1CQklZnI4TCwgJWZyNEwsICVmcjI1CitDCWxkZAkJLTB4NzAoJXIzMCksIHAwMzJhMgorQwlmc3RkCQklZnIyMywgLTB4NzAoJXIzMCkJQyBtaWQgcHJvZHVjdCB0byAgLTB4NzAuLi0weDY5CitDCitDCWxkbwkJOChycCksIHJwCitDCWFkZAkJY2xpbWIsIHAwMDBhLCBzMDAwCitDCWxkZAkJLTB4ODAoJXIzMCksIHAwMDBhCitDCWZzdGQJCSVmcjI0LCAtMHg4MCglcjMwKQlDIGxvdyBwcm9kdWN0IHRvICAtMHg4MC4uLTB4NzkKK0MKK0MJYWRkLGRjCQlwMDY0YSwgJXIwLCBjbGltYgorQwlsZG8JCTgodXApLCB1cAorQwlsZGQJCS0weDY4KCVyMzApLCBwMDY0YQorQwlmc3RkCQklZnIyNSwgLTB4NjgoJXIzMCkJQyBoaWdoIHByb2R1Y3QgdG8gLTB4NjguLi0weDYxCitDCitDCWFkZAkJbWEwMDAsIHMwMDAsIHMwMDAKK0MJYWRkLGRjCQltYTA2NCwgY2xpbWIsIGNsaW1iCitDCWZsZGQJCTAodXApLCAlZnI0CitDCitDCXN1YgkJcjAwMCwgczAwMCwgczAwMAorQwlzdWIsZGIJCSVyMCwgY2xpbWIsIGNsaW1iCitDCXN1YgkJJXIwLCBjbGltYiwgY2xpbWIKK0MJc3RkCQlzMDAwLCAtOChycCkKK0MKK0MJYWRkCQlwMDMyYTEsIHAwMzJhMiwgbTAzMgorQwlhZGQsZGMJCSVyMCwgJXIwLCBtMDk2CitDCitDCWRlcGQsegkJbTAzMiwgMzEsIDMyLCBtYTAwMAorQwlleHRyZCx1CQltMDMyLCAzMSwgMzIsIG1hMDY0CitDCWxkZAkJMChycCksIHIwMDAKK0MJYWRkaWIsPD4JLTEsICVyNSwgTChsb29wMCkKK0MJZGVwZAkJbTA5NiwgMzEsIDMyLCBtYTA2NAorTERFRigwX291dCkKKwlsZG8JCTgodXApLCB1cAorCXhtcHl1CQklZnI4UiwgJWZyNEwsICVmcjIyCisJeG1weXUJCSVmcjhMLCAlZnI0UiwgJWZyMjMKKwlsZGQJCS0weDc4KCVyMzApLCBwMDMyYTEKKwlmc3RkCQklZnIyMiwgLTB4NzgoJXIzMCkJQyBtaWQgcHJvZHVjdCB0byAgLTB4NzguLi0weDcxCisJeG1weXUJCSVmcjhSLCAlZnI0UiwgJWZyMjQKKwl4bXB5dQkJJWZyOEwsICVmcjRMLCAlZnIyNQorCWxkZAkJLTB4NzAoJXIzMCksIHAwMzJhMgorCWZzdGQJCSVmcjIzLCAtMHg3MCglcjMwKQlDIG1pZCBwcm9kdWN0IHRvICAtMHg3MC4uLTB4NjkKKwlsZG8JCTgocnApLCBycAorCWFkZAkJY2xpbWIsIHAwMDBhLCBzMDAwCisJbGRkCQktMHg4MCglcjMwKSwgcDAwMGEKKwlmc3RkCQklZnIyNCwgLTB4ODAoJXIzMCkJQyBsb3cgcHJvZHVjdCB0byAgLTB4ODAuLi0weDc5CisJYWRkLGRjCQlwMDY0YSwgJXIwLCBjbGltYgorCWxkZAkJLTB4NjgoJXIzMCksIHAwNjRhCisJZnN0ZAkJJWZyMjUsIC0weDY4KCVyMzApCUMgaGlnaCBwcm9kdWN0IHRvIC0weDY4Li4tMHg2MQorCWFkZAkJbWEwMDAsIHMwMDAsIHMwMDAKKwlhZGQsZGMJCW1hMDY0LCBjbGltYiwgY2xpbWIKKwlzdWIJCXIwMDAsIHMwMDAsIHMwMDAKKwlzdWIsZGIJCSVyMCwgY2xpbWIsIGNsaW1iCisJc3ViCQklcjAsIGNsaW1iLCBjbGltYgorCXN0ZAkJczAwMCwgLTgocnApCisJYWRkCQlwMDMyYTEsIHAwMzJhMiwgbTAzMgorCWFkZCxkYwkJJXIwLCAlcjAsIG0wOTYKKwlkZXBkLHoJCW0wMzIsIDMxLCAzMiwgbWEwMDAKKwlleHRyZCx1CQltMDMyLCAzMSwgMzIsIG1hMDY0CisJbGRkCQkwKHJwKSwgcjAwMAorCWRlcGQJCW0wOTYsIDMxLCAzMiwgbWEwNjQKK0xERUYoMF90d29fb3V0KQorCWxkZAkJLTB4NzgoJXIzMCksIHAwMzJhMQorCWxkZAkJLTB4NzAoJXIzMCksIHAwMzJhMgorCWxkbwkJOChycCksIHJwCisJYWRkCQljbGltYiwgcDAwMGEsIHMwMDAKKwlsZGQJCS0weDgwKCVyMzApLCBwMDAwYQorCWFkZCxkYwkJcDA2NGEsICVyMCwgY2xpbWIKKwlsZGQJCS0weDY4KCVyMzApLCBwMDY0YQorCWFkZAkJbWEwMDAsIHMwMDAsIHMwMDAKKwlhZGQsZGMJCW1hMDY0LCBjbGltYiwgY2xpbWIKKwlzdWIJCXIwMDAsIHMwMDAsIHMwMDAKKwlzdWIsZGIJCSVyMCwgY2xpbWIsIGNsaW1iCisJc3ViCQklcjAsIGNsaW1iLCBjbGltYgorCXN0ZAkJczAwMCwgLTgocnApCitMREVGKDBfb25lX291dCkKKwlhZGQJCXAwMzJhMSwgcDAzMmEyLCBtMDMyCisJYWRkLGRjCQklcjAsICVyMCwgbTA5NgorCWRlcGQsegkJbTAzMiwgMzEsIDMyLCBtYTAwMAorCWV4dHJkLHUJCW0wMzIsIDMxLCAzMiwgbWEwNjQKKwlsZGQJCTAocnApLCByMDAwCisJZGVwZAkJbTA5NiwgMzEsIDMyLCBtYTA2NAorCisJYWRkCQljbGltYiwgcDAwMGEsIHMwMDAKKwlhZGQsZGMJCXAwNjRhLCAlcjAsIGNsaW1iCisJYWRkCQltYTAwMCwgczAwMCwgczAwMAorCWFkZCxkYwkJbWEwNjQsIGNsaW1iLCBjbGltYgorCXN1YgkJcjAwMCwgczAwMCwgczAwMAorCXN1YixkYgkJJXIwLCBjbGltYiwgY2xpbWIKKwlzdWIJCSVyMCwgY2xpbWIsIGNsaW1iCisJc3RkCQlzMDAwLCAwKHJwKQorCisJY21waWIsPj0JNCwgbiwgTChkb25lKQorCWxkbwkJOChycCksIHJwCisKK0MgNC13YXkgdW5yb2xsZWQgY29kZS4KKworTERFRihCSUcpCisKK2RlZmluZShgcDAzMmExJyxgJXIxJykJQworZGVmaW5lKGBwMDMyYTInLGAlcjE5JykJQworZGVmaW5lKGBwMDk2YjEnLGAlcjIwJykJQworZGVmaW5lKGBwMDk2YjInLGAlcjIxJykJQworZGVmaW5lKGBwMTYwYzEnLGAlcjIyJykJQworZGVmaW5lKGBwMTYwYzInLGAlcjI5JykJQworZGVmaW5lKGBwMjI0ZDEnLGAlcjMxJykJQworZGVmaW5lKGBwMjI0ZDInLGAlcjMnKQlDCisJCQlDCitkZWZpbmUoYG0wMzInLGAlcjQnKQlDCitkZWZpbmUoYG0wOTYnLGAlcjUnKQlDCitkZWZpbmUoYG0xNjAnLGAlcjYnKQlDCitkZWZpbmUoYG0yMjQnLGAlcjcnKQlDCitkZWZpbmUoYG0yODgnLGAlcjgnKQlDCisJCQlDCitkZWZpbmUoYHAwMDBhJyxgJXIxJykJQworZGVmaW5lKGBwMDY0YScsYCVyMTknKQlDCitkZWZpbmUoYHAwNjRiJyxgJXIyMCcpCUMKK2RlZmluZShgcDEyOGInLGAlcjIxJykJQworZGVmaW5lKGBwMTI4YycsYCVyMjInKQlDCitkZWZpbmUoYHAxOTJjJyxgJXIyOScpCUMKK2RlZmluZShgcDE5MmQnLGAlcjMxJykJQworZGVmaW5lKGBwMjU2ZCcsYCVyMycpCUMKKwkJCUMKK2RlZmluZShgczAwMCcsYCVyMTAnKQlDCitkZWZpbmUoYHMwNjQnLGAlcjExJykJQworZGVmaW5lKGBzMTI4JyxgJXIxMicpCUMKK2RlZmluZShgczE5MicsYCVyMTMnKQlDCisJCQlDCitkZWZpbmUoYG1hMDAwJyxgJXI5JykJQworZGVmaW5lKGBtYTA2NCcsYCVyNCcpCUMKK2RlZmluZShgbWExMjgnLGAlcjUnKQlDCitkZWZpbmUoYG1hMTkyJyxgJXI2JykJQworZGVmaW5lKGBtYTI1NicsYCVyNycpCUMKKwkJCUMKK2RlZmluZShgcjAwMCcsYCVyMScpCUMKK2RlZmluZShgcjA2NCcsYCVyMTknKQlDCitkZWZpbmUoYHIxMjgnLGAlcjIwJykJQworZGVmaW5lKGByMTkyJyxgJXIyMScpCUMKKworCXN0ZAkJJXI2LCAtMHhlOCglcjMwKQorCXN0ZAkJJXI3LCAtMHhlMCglcjMwKQorCXN0ZAkJJXI4LCAtMHhkOCglcjMwKQorCXN0ZAkJJXI5LCAtMHhkMCglcjMwKQorCXN0ZAkJJXIxMCwgLTB4YzgoJXIzMCkKKwlzdGQJCSVyMTEsIC0weGMwKCVyMzApCisJc3RkCQklcjEyLCAtMHhiOCglcjMwKQorCXN0ZAkJJXIxMywgLTB4YjAoJXIzMCkKKworaWZkZWYoYEhBVkVfQUJJXzJfMHcnLAorYAlleHRyZCx1CQluLCA2MSwgNjIsIG4JCUMgcmlnaHQgc2hpZnQgMgorJyxgCWV4dHJkLHUJCW4sIDYxLCAzMCwgbgkJQyByaWdodCBzaGlmdCAyLCB6ZXJvIGV4dGVuZAorJykKKworTERFRig0X29yX21vcmUpCisJZmxkZAkJMCh1cCksICVmcjQKKwlmbGRkCQk4KHVwKSwgJWZyNQorCWZsZGQJCTE2KHVwKSwgJWZyNgorCWZsZGQJCTI0KHVwKSwgJWZyNworCXhtcHl1CQklZnI4UiwgJWZyNEwsICVmcjIyCisJeG1weXUJCSVmcjhMLCAlZnI0UiwgJWZyMjMKKwl4bXB5dQkJJWZyOFIsICVmcjVMLCAlZnIyNAorCXhtcHl1CQklZnI4TCwgJWZyNVIsICVmcjI1CisJeG1weXUJCSVmcjhSLCAlZnI2TCwgJWZyMjYKKwl4bXB5dQkJJWZyOEwsICVmcjZSLCAlZnIyNworCWZzdGQJCSVmcjIyLCAtMHg3OCglcjMwKQlDIG1pZCBwcm9kdWN0IHRvICAtMHg3OC4uLTB4NzEKKwl4bXB5dQkJJWZyOFIsICVmcjdMLCAlZnIyOAorCXhtcHl1CQklZnI4TCwgJWZyN1IsICVmcjI5CisJZnN0ZAkJJWZyMjMsIC0weDcwKCVyMzApCUMgbWlkIHByb2R1Y3QgdG8gIC0weDcwLi4tMHg2OQorCXhtcHl1CQklZnI4UiwgJWZyNFIsICVmcjMwCisJeG1weXUJCSVmcjhMLCAlZnI0TCwgJWZyMzEKKwlmc3RkCQklZnIyNCwgLTB4MzgoJXIzMCkJQyBtaWQgcHJvZHVjdCB0byAgLTB4MzguLi0weDMxCisJeG1weXUJCSVmcjhSLCAlZnI1UiwgJWZyMjIKKwl4bXB5dQkJJWZyOEwsICVmcjVMLCAlZnIyMworCWZzdGQJCSVmcjI1LCAtMHgzMCglcjMwKQlDIG1pZCBwcm9kdWN0IHRvICAtMHgzMC4uLTB4MjkKKwl4bXB5dQkJJWZyOFIsICVmcjZSLCAlZnIyNAorCXhtcHl1CQklZnI4TCwgJWZyNkwsICVmcjI1CisJZnN0ZAkJJWZyMjYsIC0weDU4KCVyMzApCUMgbWlkIHByb2R1Y3QgdG8gIC0weDU4Li4tMHg1MQorCXhtcHl1CQklZnI4UiwgJWZyN1IsICVmcjI2CisJZnN0ZAkJJWZyMjcsIC0weDUwKCVyMzApCUMgbWlkIHByb2R1Y3QgdG8gIC0weDUwLi4tMHg0OQorCWFkZGliLDw+CS0xLCBuLCBMKDhfb3JfbW9yZSkKKwl4bXB5dQkJJWZyOEwsICVmcjdMLCAlZnIyNworCWZzdGQJCSVmcjI4LCAtMHgxOCglcjMwKQlDIG1pZCBwcm9kdWN0IHRvICAtMHgxOC4uLTB4MTEKKwlmc3RkCQklZnIyOSwgLTB4MTAoJXIzMCkJQyBtaWQgcHJvZHVjdCB0byAgLTB4MTAuLi0weDA5CisJZnN0ZAkJJWZyMzAsIC0weDgwKCVyMzApCUMgbG93IHByb2R1Y3QgdG8gIC0weDgwLi4tMHg3OQorCWZzdGQJCSVmcjMxLCAtMHg2OCglcjMwKQlDIGhpZ2ggcHJvZHVjdCB0byAtMHg2OC4uLTB4NjEKKwlmc3RkCQklZnIyMiwgLTB4NDAoJXIzMCkJQyBsb3cgcHJvZHVjdCB0byAgLTB4NDAuLi0weDM5CisJZnN0ZAkJJWZyMjMsIC0weDI4KCVyMzApCUMgaGlnaCBwcm9kdWN0IHRvIC0weDI4Li4tMHgyMQorCWZzdGQJCSVmcjI0LCAtMHg2MCglcjMwKQlDIGxvdyBwcm9kdWN0IHRvICAtMHg2MC4uLTB4NTkKKwlmc3RkCQklZnIyNSwgLTB4NDgoJXIzMCkJQyBoaWdoIHByb2R1Y3QgdG8gLTB4NDguLi0weDQxCisJZnN0ZAkJJWZyMjYsIC0weDIwKCVyMzApCUMgbG93IHByb2R1Y3QgdG8gIC0weDIwLi4tMHgxOQorCWZzdGQJCSVmcjI3LCAtMHg4OCglcjMwKQlDIGhpZ2ggcHJvZHVjdCB0byAtMHg4OC4uLTB4ODEKKwlsZGQJCS0weDc4KCVyMzApLCBwMDMyYTEKKwlsZGQJCS0weDcwKCVyMzApLCBwMDMyYTIKKwlsZGQJCS0weDM4KCVyMzApLCBwMDk2YjEKKwlsZGQJCS0weDMwKCVyMzApLCBwMDk2YjIKKwlsZGQJCS0weDU4KCVyMzApLCBwMTYwYzEKKwlsZGQJCS0weDUwKCVyMzApLCBwMTYwYzIKKwlsZGQJCS0weDE4KCVyMzApLCBwMjI0ZDEKKwlsZGQJCS0weDEwKCVyMzApLCBwMjI0ZDIKKwliCQlMKGVuZDEpCisJbm9wCisKK0xERUYoOF9vcl9tb3JlKQorCWZzdGQJCSVmcjI4LCAtMHgxOCglcjMwKQlDIG1pZCBwcm9kdWN0IHRvICAtMHgxOC4uLTB4MTEKKwlmc3RkCQklZnIyOSwgLTB4MTAoJXIzMCkJQyBtaWQgcHJvZHVjdCB0byAgLTB4MTAuLi0weDA5CisJbGRvCQkzMih1cCksIHVwCisJZnN0ZAkJJWZyMzAsIC0weDgwKCVyMzApCUMgbG93IHByb2R1Y3QgdG8gIC0weDgwLi4tMHg3OQorCWZzdGQJCSVmcjMxLCAtMHg2OCglcjMwKQlDIGhpZ2ggcHJvZHVjdCB0byAtMHg2OC4uLTB4NjEKKwlmc3RkCQklZnIyMiwgLTB4NDAoJXIzMCkJQyBsb3cgcHJvZHVjdCB0byAgLTB4NDAuLi0weDM5CisJZnN0ZAkJJWZyMjMsIC0weDI4KCVyMzApCUMgaGlnaCBwcm9kdWN0IHRvIC0weDI4Li4tMHgyMQorCWZzdGQJCSVmcjI0LCAtMHg2MCglcjMwKQlDIGxvdyBwcm9kdWN0IHRvICAtMHg2MC4uLTB4NTkKKwlmc3RkCQklZnIyNSwgLTB4NDgoJXIzMCkJQyBoaWdoIHByb2R1Y3QgdG8gLTB4NDguLi0weDQxCisJZnN0ZAkJJWZyMjYsIC0weDIwKCVyMzApCUMgbG93IHByb2R1Y3QgdG8gIC0weDIwLi4tMHgxOQorCWZzdGQJCSVmcjI3LCAtMHg4OCglcjMwKQlDIGhpZ2ggcHJvZHVjdCB0byAtMHg4OC4uLTB4ODEKKwlmbGRkCQkwKHVwKSwgJWZyNAorCWZsZGQJCTgodXApLCAlZnI1CisJZmxkZAkJMTYodXApLCAlZnI2CisJZmxkZAkJMjQodXApLCAlZnI3CisJeG1weXUJCSVmcjhSLCAlZnI0TCwgJWZyMjIKKwlsZGQJCS0weDc4KCVyMzApLCBwMDMyYTEKKwl4bXB5dQkJJWZyOEwsICVmcjRSLCAlZnIyMworCXhtcHl1CQklZnI4UiwgJWZyNUwsICVmcjI0CisJbGRkCQktMHg3MCglcjMwKSwgcDAzMmEyCisJeG1weXUJCSVmcjhMLCAlZnI1UiwgJWZyMjUKKwl4bXB5dQkJJWZyOFIsICVmcjZMLCAlZnIyNgorCWxkZAkJLTB4MzgoJXIzMCksIHAwOTZiMQorCXhtcHl1CQklZnI4TCwgJWZyNlIsICVmcjI3CisJZnN0ZAkJJWZyMjIsIC0weDc4KCVyMzApCUMgbWlkIHByb2R1Y3QgdG8gIC0weDc4Li4tMHg3MQorCXhtcHl1CQklZnI4UiwgJWZyN0wsICVmcjI4CisJbGRkCQktMHgzMCglcjMwKSwgcDA5NmIyCisJeG1weXUJCSVmcjhMLCAlZnI3UiwgJWZyMjkKKwlmc3RkCQklZnIyMywgLTB4NzAoJXIzMCkJQyBtaWQgcHJvZHVjdCB0byAgLTB4NzAuLi0weDY5CisJeG1weXUJCSVmcjhSLCAlZnI0UiwgJWZyMzAKKwlsZGQJCS0weDU4KCVyMzApLCBwMTYwYzEKKwl4bXB5dQkJJWZyOEwsICVmcjRMLCAlZnIzMQorCWZzdGQJCSVmcjI0LCAtMHgzOCglcjMwKQlDIG1pZCBwcm9kdWN0IHRvICAtMHgzOC4uLTB4MzEKKwl4bXB5dQkJJWZyOFIsICVmcjVSLCAlZnIyMgorCWxkZAkJLTB4NTAoJXIzMCksIHAxNjBjMgorCXhtcHl1CQklZnI4TCwgJWZyNUwsICVmcjIzCisJZnN0ZAkJJWZyMjUsIC0weDMwKCVyMzApCUMgbWlkIHByb2R1Y3QgdG8gIC0weDMwLi4tMHgyOQorCXhtcHl1CQklZnI4UiwgJWZyNlIsICVmcjI0CisJbGRkCQktMHgxOCglcjMwKSwgcDIyNGQxCisJeG1weXUJCSVmcjhMLCAlZnI2TCwgJWZyMjUKKwlmc3RkCQklZnIyNiwgLTB4NTgoJXIzMCkJQyBtaWQgcHJvZHVjdCB0byAgLTB4NTguLi0weDUxCisJeG1weXUJCSVmcjhSLCAlZnI3UiwgJWZyMjYKKwlsZGQJCS0weDEwKCVyMzApLCBwMjI0ZDIKKwlmc3RkCQklZnIyNywgLTB4NTAoJXIzMCkJQyBtaWQgcHJvZHVjdCB0byAgLTB4NTAuLi0weDQ5CisJYWRkaWIsPQkJLTEsIG4sIEwoZW5kMikKKwl4bXB5dQkJJWZyOEwsICVmcjdMLCAlZnIyNworTERFRihsb29wKQorCWFkZAkJcDAzMmExLCBwMDMyYTIsIG0wMzIKKwlsZGQJCS0weDgwKCVyMzApLCBwMDAwYQorCWFkZCxkYwkJcDA5NmIxLCBwMDk2YjIsIG0wOTYKKwlmc3RkCQklZnIyOCwgLTB4MTgoJXIzMCkJQyBtaWQgcHJvZHVjdCB0byAgLTB4MTguLi0weDExCisKKwlhZGQsZGMJCXAxNjBjMSwgcDE2MGMyLCBtMTYwCisJbGRkCQktMHg2OCglcjMwKSwgcDA2NGEKKwlhZGQsZGMJCXAyMjRkMSwgcDIyNGQyLCBtMjI0CisJZnN0ZAkJJWZyMjksIC0weDEwKCVyMzApCUMgbWlkIHByb2R1Y3QgdG8gIC0weDEwLi4tMHgwOQorCisJYWRkLGRjCQklcjAsICVyMCwgbTI4OAorCWxkZAkJLTB4NDAoJXIzMCksIHAwNjRiCisJbGRvCQkzMih1cCksIHVwCisJZnN0ZAkJJWZyMzAsIC0weDgwKCVyMzApCUMgbG93IHByb2R1Y3QgdG8gIC0weDgwLi4tMHg3OQorCisJZGVwZCx6CQltMDMyLCAzMSwgMzIsIG1hMDAwCisJbGRkCQktMHgyOCglcjMwKSwgcDEyOGIKKwlleHRyZCx1CQltMDMyLCAzMSwgMzIsIG1hMDY0CisJZnN0ZAkJJWZyMzEsIC0weDY4KCVyMzApCUMgaGlnaCBwcm9kdWN0IHRvIC0weDY4Li4tMHg2MQorCisJZGVwZAkJbTA5NiwgMzEsIDMyLCBtYTA2NAorCWxkZAkJLTB4NjAoJXIzMCksIHAxMjhjCisJZXh0cmQsdQkJbTA5NiwgMzEsIDMyLCBtYTEyOAorCWZzdGQJCSVmcjIyLCAtMHg0MCglcjMwKQlDIGxvdyBwcm9kdWN0IHRvICAtMHg0MC4uLTB4MzkKKworCWRlcGQJCW0xNjAsIDMxLCAzMiwgbWExMjgKKwlsZGQJCS0weDQ4KCVyMzApLCBwMTkyYworCWV4dHJkLHUJCW0xNjAsIDMxLCAzMiwgbWExOTIKKwlmc3RkCQklZnIyMywgLTB4MjgoJXIzMCkJQyBoaWdoIHByb2R1Y3QgdG8gLTB4MjguLi0weDIxCisKKwlkZXBkCQltMjI0LCAzMSwgMzIsIG1hMTkyCisJbGRkCQktMHgyMCglcjMwKSwgcDE5MmQKKwlleHRyZCx1CQltMjI0LCAzMSwgMzIsIG1hMjU2CisJZnN0ZAkJJWZyMjQsIC0weDYwKCVyMzApCUMgbG93IHByb2R1Y3QgdG8gIC0weDYwLi4tMHg1OQorCisJZGVwZAkJbTI4OCwgMzEsIDMyLCBtYTI1NgorCWxkZAkJLTB4ODgoJXIzMCksIHAyNTZkCisJYWRkCQljbGltYiwgcDAwMGEsIHMwMDAKKwlmc3RkCQklZnIyNSwgLTB4NDgoJXIzMCkJQyBoaWdoIHByb2R1Y3QgdG8gLTB4NDguLi0weDQxCisKKwlhZGQsZGMJCXAwNjRhLCBwMDY0YiwgczA2NAorCWxkZAkJMChycCksIHIwMDAKKwlhZGQsZGMJCXAxMjhiLCBwMTI4YywgczEyOAorCWZzdGQJCSVmcjI2LCAtMHgyMCglcjMwKQlDIGxvdyBwcm9kdWN0IHRvICAtMHgyMC4uLTB4MTkKKworCWFkZCxkYwkJcDE5MmMsIHAxOTJkLCBzMTkyCisJbGRkCQk4KHJwKSwgcjA2NAorCWFkZCxkYwkJcDI1NmQsICVyMCwgY2xpbWIKKwlmc3RkCQklZnIyNywgLTB4ODgoJXIzMCkJQyBoaWdoIHByb2R1Y3QgdG8gLTB4ODguLi0weDgxCisKKwlsZGQJCTE2KHJwKSwgcjEyOAorCWFkZAkJbWEwMDAsIHMwMDAsIHMwMDAJQyBhY2N1bSBtaWQgMAorCWxkZAkJMjQocnApLCByMTkyCisJYWRkLGRjCQltYTA2NCwgczA2NCwgczA2NAlDIGFjY3VtIG1pZCAxCisKKwlhZGQsZGMJCW1hMTI4LCBzMTI4LCBzMTI4CUMgYWNjdW0gbWlkIDIKKwlmbGRkCQkwKHVwKSwgJWZyNAorCWFkZCxkYwkJbWExOTIsIHMxOTIsIHMxOTIJQyBhY2N1bSBtaWQgMworCWZsZGQJCTgodXApLCAlZnI1CisKKwlhZGQsZGMJCW1hMjU2LCBjbGltYiwgY2xpbWIKKwlmbGRkCQkxNih1cCksICVmcjYKKwlzdWIJCXIwMDAsIHMwMDAsIHMwMDAJQyBhY2N1bSBybGltYiAwCisJZmxkZAkJMjQodXApLCAlZnI3CisKKwlzdWIsZGIJCXIwNjQsIHMwNjQsIHMwNjQJQyBhY2N1bSBybGltYiAxCisJc3ViLGRiCQlyMTI4LCBzMTI4LCBzMTI4CUMgYWNjdW0gcmxpbWIgMgorCXN0ZAkJczAwMCwgMChycCkKKworCXN1YixkYgkJcjE5MiwgczE5MiwgczE5MglDIGFjY3VtIHJsaW1iIDMKKwlzdWIsZGIJCSVyMCwgY2xpbWIsIGNsaW1iCisJc3ViCQklcjAsIGNsaW1iLCBjbGltYgorCXN0ZAkJczA2NCwgOChycCkKKworCXhtcHl1CQklZnI4UiwgJWZyNEwsICVmcjIyCisJbGRkCQktMHg3OCglcjMwKSwgcDAzMmExCisJeG1weXUJCSVmcjhMLCAlZnI0UiwgJWZyMjMKKwlzdGQJCXMxMjgsIDE2KHJwKQorCisJeG1weXUJCSVmcjhSLCAlZnI1TCwgJWZyMjQKKwlsZGQJCS0weDcwKCVyMzApLCBwMDMyYTIKKwl4bXB5dQkJJWZyOEwsICVmcjVSLCAlZnIyNQorCXN0ZAkJczE5MiwgMjQocnApCisKKwl4bXB5dQkJJWZyOFIsICVmcjZMLCAlZnIyNgorCWxkZAkJLTB4MzgoJXIzMCksIHAwOTZiMQorCXhtcHl1CQklZnI4TCwgJWZyNlIsICVmcjI3CisJZnN0ZAkJJWZyMjIsIC0weDc4KCVyMzApCUMgbWlkIHByb2R1Y3QgdG8gIC0weDc4Li4tMHg3MQorCisJeG1weXUJCSVmcjhSLCAlZnI3TCwgJWZyMjgKKwlsZGQJCS0weDMwKCVyMzApLCBwMDk2YjIKKwl4bXB5dQkJJWZyOEwsICVmcjdSLCAlZnIyOQorCWZzdGQJCSVmcjIzLCAtMHg3MCglcjMwKQlDIG1pZCBwcm9kdWN0IHRvICAtMHg3MC4uLTB4NjkKKworCXhtcHl1CQklZnI4UiwgJWZyNFIsICVmcjMwCisJbGRkCQktMHg1OCglcjMwKSwgcDE2MGMxCisJeG1weXUJCSVmcjhMLCAlZnI0TCwgJWZyMzEKKwlmc3RkCQklZnIyNCwgLTB4MzgoJXIzMCkJQyBtaWQgcHJvZHVjdCB0byAgLTB4MzguLi0weDMxCisKKwl4bXB5dQkJJWZyOFIsICVmcjVSLCAlZnIyMgorCWxkZAkJLTB4NTAoJXIzMCksIHAxNjBjMgorCXhtcHl1CQklZnI4TCwgJWZyNUwsICVmcjIzCisJZnN0ZAkJJWZyMjUsIC0weDMwKCVyMzApCUMgbWlkIHByb2R1Y3QgdG8gIC0weDMwLi4tMHgyOQorCisJeG1weXUJCSVmcjhSLCAlZnI2UiwgJWZyMjQKKwlsZGQJCS0weDE4KCVyMzApLCBwMjI0ZDEKKwl4bXB5dQkJJWZyOEwsICVmcjZMLCAlZnIyNQorCWZzdGQJCSVmcjI2LCAtMHg1OCglcjMwKQlDIG1pZCBwcm9kdWN0IHRvICAtMHg1OC4uLTB4NTEKKworCXhtcHl1CQklZnI4UiwgJWZyN1IsICVmcjI2CisJbGRkCQktMHgxMCglcjMwKSwgcDIyNGQyCisJZnN0ZAkJJWZyMjcsIC0weDUwKCVyMzApCUMgbWlkIHByb2R1Y3QgdG8gIC0weDUwLi4tMHg0OQorCXhtcHl1CQklZnI4TCwgJWZyN0wsICVmcjI3CisKKwlhZGRpYiw8PgktMSwgbiwgTChsb29wKQorCWxkbwkJMzIocnApLCBycAorCitMREVGKGVuZDIpCisJYWRkCQlwMDMyYTEsIHAwMzJhMiwgbTAzMgorCWxkZAkJLTB4ODAoJXIzMCksIHAwMDBhCisJYWRkLGRjCQlwMDk2YjEsIHAwOTZiMiwgbTA5NgorCWZzdGQJCSVmcjI4LCAtMHgxOCglcjMwKQlDIG1pZCBwcm9kdWN0IHRvICAtMHgxOC4uLTB4MTEKKwlhZGQsZGMJCXAxNjBjMSwgcDE2MGMyLCBtMTYwCisJbGRkCQktMHg2OCglcjMwKSwgcDA2NGEKKwlhZGQsZGMJCXAyMjRkMSwgcDIyNGQyLCBtMjI0CisJZnN0ZAkJJWZyMjksIC0weDEwKCVyMzApCUMgbWlkIHByb2R1Y3QgdG8gIC0weDEwLi4tMHgwOQorCWFkZCxkYwkJJXIwLCAlcjAsIG0yODgKKwlsZGQJCS0weDQwKCVyMzApLCBwMDY0YgorCWZzdGQJCSVmcjMwLCAtMHg4MCglcjMwKQlDIGxvdyBwcm9kdWN0IHRvICAtMHg4MC4uLTB4NzkKKwlkZXBkLHoJCW0wMzIsIDMxLCAzMiwgbWEwMDAKKwlsZGQJCS0weDI4KCVyMzApLCBwMTI4YgorCWV4dHJkLHUJCW0wMzIsIDMxLCAzMiwgbWEwNjQKKwlmc3RkCQklZnIzMSwgLTB4NjgoJXIzMCkJQyBoaWdoIHByb2R1Y3QgdG8gLTB4NjguLi0weDYxCisJZGVwZAkJbTA5NiwgMzEsIDMyLCBtYTA2NAorCWxkZAkJLTB4NjAoJXIzMCksIHAxMjhjCisJZXh0cmQsdQkJbTA5NiwgMzEsIDMyLCBtYTEyOAorCWZzdGQJCSVmcjIyLCAtMHg0MCglcjMwKQlDIGxvdyBwcm9kdWN0IHRvICAtMHg0MC4uLTB4MzkKKwlkZXBkCQltMTYwLCAzMSwgMzIsIG1hMTI4CisJbGRkCQktMHg0OCglcjMwKSwgcDE5MmMKKwlleHRyZCx1CQltMTYwLCAzMSwgMzIsIG1hMTkyCisJZnN0ZAkJJWZyMjMsIC0weDI4KCVyMzApCUMgaGlnaCBwcm9kdWN0IHRvIC0weDI4Li4tMHgyMQorCWRlcGQJCW0yMjQsIDMxLCAzMiwgbWExOTIKKwlsZGQJCS0weDIwKCVyMzApLCBwMTkyZAorCWV4dHJkLHUJCW0yMjQsIDMxLCAzMiwgbWEyNTYKKwlmc3RkCQklZnIyNCwgLTB4NjAoJXIzMCkJQyBsb3cgcHJvZHVjdCB0byAgLTB4NjAuLi0weDU5CisJZGVwZAkJbTI4OCwgMzEsIDMyLCBtYTI1NgorCWxkZAkJLTB4ODgoJXIzMCksIHAyNTZkCisJYWRkCQljbGltYiwgcDAwMGEsIHMwMDAKKwlmc3RkCQklZnIyNSwgLTB4NDgoJXIzMCkJQyBoaWdoIHByb2R1Y3QgdG8gLTB4NDguLi0weDQxCisJYWRkLGRjCQlwMDY0YSwgcDA2NGIsIHMwNjQKKwlsZGQJCTAocnApLCByMDAwCisJYWRkLGRjCQlwMTI4YiwgcDEyOGMsIHMxMjgKKwlmc3RkCQklZnIyNiwgLTB4MjAoJXIzMCkJQyBsb3cgcHJvZHVjdCB0byAgLTB4MjAuLi0weDE5CisJYWRkLGRjCQlwMTkyYywgcDE5MmQsIHMxOTIKKwlsZGQJCTgocnApLCByMDY0CisJYWRkLGRjCQlwMjU2ZCwgJXIwLCBjbGltYgorCWZzdGQJCSVmcjI3LCAtMHg4OCglcjMwKQlDIGhpZ2ggcHJvZHVjdCB0byAtMHg4OC4uLTB4ODEKKwlsZGQJCTE2KHJwKSwgcjEyOAorCWFkZAkJbWEwMDAsIHMwMDAsIHMwMDAJQyBhY2N1bSBtaWQgMAorCWxkZAkJMjQocnApLCByMTkyCisJYWRkLGRjCQltYTA2NCwgczA2NCwgczA2NAlDIGFjY3VtIG1pZCAxCisJYWRkLGRjCQltYTEyOCwgczEyOCwgczEyOAlDIGFjY3VtIG1pZCAyCisJYWRkLGRjCQltYTE5MiwgczE5MiwgczE5MglDIGFjY3VtIG1pZCAzCisJYWRkLGRjCQltYTI1NiwgY2xpbWIsIGNsaW1iCisJc3ViCQlyMDAwLCBzMDAwLCBzMDAwCUMgYWNjdW0gcmxpbWIgMAorCXN1YixkYgkJcjA2NCwgczA2NCwgczA2NAlDIGFjY3VtIHJsaW1iIDEKKwlzdWIsZGIJCXIxMjgsIHMxMjgsIHMxMjgJQyBhY2N1bSBybGltYiAyCisJc3RkCQlzMDAwLCAwKHJwKQorCXN1YixkYgkJcjE5MiwgczE5MiwgczE5MglDIGFjY3VtIHJsaW1iIDMKKwlzdWIsZGIJCSVyMCwgY2xpbWIsIGNsaW1iCisJc3ViCQklcjAsIGNsaW1iLCBjbGltYgorCXN0ZAkJczA2NCwgOChycCkKKwlsZGQJCS0weDc4KCVyMzApLCBwMDMyYTEKKwlzdGQJCXMxMjgsIDE2KHJwKQorCWxkZAkJLTB4NzAoJXIzMCksIHAwMzJhMgorCXN0ZAkJczE5MiwgMjQocnApCisJbGRkCQktMHgzOCglcjMwKSwgcDA5NmIxCisJbGRkCQktMHgzMCglcjMwKSwgcDA5NmIyCisJbGRkCQktMHg1OCglcjMwKSwgcDE2MGMxCisJbGRkCQktMHg1MCglcjMwKSwgcDE2MGMyCisJbGRkCQktMHgxOCglcjMwKSwgcDIyNGQxCisJbGRkCQktMHgxMCglcjMwKSwgcDIyNGQyCisJbGRvCQkzMihycCksIHJwCisKK0xERUYoZW5kMSkKKwlhZGQJCXAwMzJhMSwgcDAzMmEyLCBtMDMyCisJbGRkCQktMHg4MCglcjMwKSwgcDAwMGEKKwlhZGQsZGMJCXAwOTZiMSwgcDA5NmIyLCBtMDk2CisJYWRkLGRjCQlwMTYwYzEsIHAxNjBjMiwgbTE2MAorCWxkZAkJLTB4NjgoJXIzMCksIHAwNjRhCisJYWRkLGRjCQlwMjI0ZDEsIHAyMjRkMiwgbTIyNAorCWFkZCxkYwkJJXIwLCAlcjAsIG0yODgKKwlsZGQJCS0weDQwKCVyMzApLCBwMDY0YgorCWRlcGQsegkJbTAzMiwgMzEsIDMyLCBtYTAwMAorCWxkZAkJLTB4MjgoJXIzMCksIHAxMjhiCisJZXh0cmQsdQkJbTAzMiwgMzEsIDMyLCBtYTA2NAorCWRlcGQJCW0wOTYsIDMxLCAzMiwgbWEwNjQKKwlsZGQJCS0weDYwKCVyMzApLCBwMTI4YworCWV4dHJkLHUJCW0wOTYsIDMxLCAzMiwgbWExMjgKKwlkZXBkCQltMTYwLCAzMSwgMzIsIG1hMTI4CisJbGRkCQktMHg0OCglcjMwKSwgcDE5MmMKKwlleHRyZCx1CQltMTYwLCAzMSwgMzIsIG1hMTkyCisJZGVwZAkJbTIyNCwgMzEsIDMyLCBtYTE5MgorCWxkZAkJLTB4MjAoJXIzMCksIHAxOTJkCisJZXh0cmQsdQkJbTIyNCwgMzEsIDMyLCBtYTI1NgorCWRlcGQJCW0yODgsIDMxLCAzMiwgbWEyNTYKKwlsZGQJCS0weDg4KCVyMzApLCBwMjU2ZAorCWFkZAkJY2xpbWIsIHAwMDBhLCBzMDAwCisJYWRkLGRjCQlwMDY0YSwgcDA2NGIsIHMwNjQKKwlsZGQJCTAocnApLCByMDAwCisJYWRkLGRjCQlwMTI4YiwgcDEyOGMsIHMxMjgKKwlhZGQsZGMJCXAxOTJjLCBwMTkyZCwgczE5MgorCWxkZAkJOChycCksIHIwNjQKKwlhZGQsZGMJCXAyNTZkLCAlcjAsIGNsaW1iCisJbGRkCQkxNihycCksIHIxMjgKKwlhZGQJCW1hMDAwLCBzMDAwLCBzMDAwCUMgYWNjdW0gbWlkIDAKKwlsZGQJCTI0KHJwKSwgcjE5MgorCWFkZCxkYwkJbWEwNjQsIHMwNjQsIHMwNjQJQyBhY2N1bSBtaWQgMQorCWFkZCxkYwkJbWExMjgsIHMxMjgsIHMxMjgJQyBhY2N1bSBtaWQgMgorCWFkZCxkYwkJbWExOTIsIHMxOTIsIHMxOTIJQyBhY2N1bSBtaWQgMworCWFkZCxkYwkJbWEyNTYsIGNsaW1iLCBjbGltYgorCXN1YgkJcjAwMCwgczAwMCwgczAwMAlDIGFjY3VtIHJsaW1iIDAKKwlzdWIsZGIJCXIwNjQsIHMwNjQsIHMwNjQJQyBhY2N1bSBybGltYiAxCisJc3ViLGRiCQlyMTI4LCBzMTI4LCBzMTI4CUMgYWNjdW0gcmxpbWIgMgorCXN0ZAkJczAwMCwgMChycCkKKwlzdWIsZGIJCXIxOTIsIHMxOTIsIHMxOTIJQyBhY2N1bSBybGltYiAzCisJc3ViLGRiCQklcjAsIGNsaW1iLCBjbGltYgorCXN1YgkJJXIwLCBjbGltYiwgY2xpbWIKKwlzdGQJCXMwNjQsIDgocnApCisJc3RkCQlzMTI4LCAxNihycCkKKwlzdGQJCXMxOTIsIDI0KHJwKQorCisJbGRkCQktMHhiMCglcjMwKSwgJXIxMworCWxkZAkJLTB4YjgoJXIzMCksICVyMTIKKwlsZGQJCS0weGMwKCVyMzApLCAlcjExCisJbGRkCQktMHhjOCglcjMwKSwgJXIxMAorCWxkZAkJLTB4ZDAoJXIzMCksICVyOQorCWxkZAkJLTB4ZDgoJXIzMCksICVyOAorCWxkZAkJLTB4ZTAoJXIzMCksICVyNworCWxkZAkJLTB4ZTgoJXIzMCksICVyNgorTERFRihkb25lKQoraWZkZWYoYEhBVkVfQUJJXzJfMHcnLAorYAljb3B5CQljbGltYiwgJXIyOAorJyxgCWV4dHJkLHUJCWNsaW1iLCA2MywgMzIsICVyMjkKKwlleHRyZCx1CQljbGltYiwgMzEsIDMyLCAlcjI4CisnKQorCWxkZAkJLTB4ZjAoJXIzMCksICVyNQorCWxkZAkJLTB4ZjgoJXIzMCksICVyNAorCWJ2ZQkJKCVyMikKKwlsZGQsbWIJCS0weDEwMCglcjMwKSwgJXIzCitFUElMT0dVRShtcG5fc3VibXVsXzEpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3BhNjQvdWRpdi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3BhNjQvdWRpdi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM4MGE4NQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcGE2NC91ZGl2LmFzbQpAQCAtMCwwICsxLDEyNSBAQAorZG5sICBIUC1QQSAyLjAgNjQtYml0IG1wbl91ZGl2X3Fybm5kX3IuCisKK2RubCAgQ29weXJpZ2h0IDIwMDEtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDIFRoaXMgcnVucyBhdCBhYm91dCAyODAgY3ljbGVzIG9uIGJvdGggUEE4MDAwIGFuZCBQQTg1MDAsIGNvcnJlc3BvbmRpbmcgdG8gYQorQyBiaXQgbW9yZSB0aGFuIDQgY3ljbGVzL2JpdC4KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYG4xJyxgJXIyNicpCitkZWZpbmUoYG4wJyxgJXIyNScpCitkZWZpbmUoYGQnLGAlcjI0JykKK2RlZmluZShgcmVtcHRyJyxgJXIyMycpCisKK2RlZmluZShgcScsYCVyMjgnKQorZGVmaW5lKGBkbicsYCVyMjknKQorCitkZWZpbmUoYG9sZF9kaXZzdGVwJywKKyAgICAgICBgYWRkLGRjCQluMCxuMCxuMAorCWFkZCxkYwkJbjEsbjEsbjEKKwlzdWIsKjw8CQluMSxkLCVyMjIKKwljb3B5CQklcjIyLG4xJykKKworZGVmaW5lKGBkaXZzdGVwJywKKyAgICAgICBgYWRkCQluMCxuMCxuMAorCWFkZCxkYwkJbjEsbjEsbjEKKwlzdWIJCW4xLGQsJXIxCisJYWRkLGRjCQlxLHEscQorCWNtcGNsciwqPDwJbjEsZCwlcjAKKwljb3B5CQklcjEsbjEKKycpCisKK2lmZGVmKGBIQVZFX0FCSV8yXzB3JywKK2AJLmxldmVsCTIuMHcKKycsYAkubGV2ZWwJMi4wCisnKQorUFJPTE9HVUUobXBuX3VkaXZfcXJubmRfcikKK2lmZGVmKGBIQVZFX0FCSV8yXzBuJywKK2AJZGVwZAkJJXIyNSwzMSwzMiwlcjI2CisJZGVwZAkJJXIyMywzMSwzMiwlcjI0CisJY29weQkJJXIyNCwlcjI1CisJbGRkCQktNTYoJXIzMCksJXIyNAorCWxkdwkJLTYwKCVyMzApLCVyMjMKKycpCisJbGRpCQkwLHEKKwljbXBpYiwqPj0JMCxkLEwobGFyZ2VfZGl2aXNvcikKKwlsZGkJCTgsJXIzMQkJQyBzZXR1cCBsb29wIGNvdW50ZXIKKworCXN1YgkJJXIwLGQsZG4KK0xERUYoTG9vcCkKKwlkaXZzdGVwIGRpdnN0ZXAgZGl2c3RlcCBkaXZzdGVwIGRpdnN0ZXAgZGl2c3RlcCBkaXZzdGVwIGRpdnN0ZXAKKwlhZGRpYiw8PgktMSwlcjMxLEwoTG9vcCkKKwlub3AKKworaWZkZWYoYEhBVkVfQUJJXzJfMG4nLAorYAljb3B5CQklcjI4LCVyMjkKKwlleHRyZCx1CQklcjI4LDMxLDMyLCVyMjgKKycpCisJYnZlCQkoJXIyKQorCXN0ZAkJbjEsMChyZW1wdHIpCUMgc3RvcmUgcmVtYWluZGVyCisKK0xERUYobGFyZ2VfZGl2aXNvcikKKwlleHRyZCx1CQluMCw2MywxLCVyMTkJQyBzYXZlIGxzYiBvZiBkaXZpZGVuZAorCXNocnBkCQluMSxuMCwxLG4wCUMgbjAgPSBsbyhuMW4wID4+IDEpCisJc2hycGQJCSVyMCxuMSwxLG4xCUMgbjEgPSBoaShuMW4wID4+IDEpCisJZXh0cmQsdQkJZCw2MywxLCVyMjAJQyBzYXZlIGxzYiBvZiBkaXZpc29yCisJc2hycGQJCSVyMCxkLDEsZAlDIGQgPSBmbG9vcihvcmlnX2QgLyAyKQorCWFkZCxsCQklcjIwLGQsZAlDIGQgPSBjZWlsKG9yaWdfZCAvIDIpCisKKwlzdWIJCSVyMCxkLGRuCitMREVGKExvb3AyKQorCWRpdnN0ZXAgZGl2c3RlcCBkaXZzdGVwIGRpdnN0ZXAgZGl2c3RlcCBkaXZzdGVwIGRpdnN0ZXAgZGl2c3RlcAorCWFkZGliLDw+CS0xLCVyMzEsTChMb29wMikKKwlub3AKKworCWNtcGliLCo9CTAsJXIyMCxMKGV2ZW5fZGl2aXNvcikKKwlzaGxhZGQJCW4xLDEsJXIxOSxuMQlDIHNoaWZ0IGluIG9taXR0ZWQgZGl2aWRlbmQgbHNiCisKKwlhZGQJCWQsZCxkCQlDIHJlc3RvcmUgb3JpZy4uLgorCXN1YgkJZCwlcjIwLGQJQyAuLi5kIHZhbHVlCisJc3ViCQklcjAsZCxkbglDIHIyMSA9IC1kCisKKwlhZGQsKm51dgluMSxxLG4xCQlDIGZpeCByZW1haW5kZXIgZm9yIG9taXR0ZWQgZGl2aXNvciBsc2IKKwlhZGQsbAkJbjEsZG4sbjEJQyBhZGp1c3QgcmVtYWluZGVyIGlmIHJlbS4gZml4IGNhcnJpZWQKKwlhZGQsZGMJCSVyMCxxLHEJCUMgYWRqdXN0IHF1b3RpZW50IGFjY29yZGluZ2x5CisKKwlzdWIsKjw8CQluMSxkLCVyMAlDIHJlbWFpbmRlciA+PSBkaXZpc29yPworCWFkZCxsCQluMSxkbixuMQlDIGFkanVzdCByZW1haW5kZXIKKwlhZGQsZGMJCSVyMCxxLHEJCUMgYWRqdXN0IHF1b3RpZW50CisKK0xERUYoZXZlbl9kaXZpc29yKQoraWZkZWYoYEhBVkVfQUJJXzJfMG4nLAorYAljb3B5CQklcjI4LCVyMjkKKwlleHRyZCx1CQklcjI4LDMxLDMyLCVyMjgKKycpCisJYnZlCQkoJXIyKQorCXN0ZAkJbjEsMChyZW1wdHIpCUMgc3RvcmUgcmVtYWluZGVyCitFUElMT0dVRShtcG5fdWRpdl9xcm5uZF9yKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wYTY0L3VtdWwuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wYTY0L3VtdWwuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNWE3MWYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3BhNjQvdW11bC5hc20KQEAgLTAsMCArMSw5NyBAQAorZG5sICBDb3B5cmlnaHQgMTk5OSwgMjAwMCwgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKK2RubCAgT3B0aW1pemF0aW9uczoKK2RubCAgKiBBdm9pZCBza2lwIGluc3RydWN0aW9ucworZG5sICAqIFB1dCBjYXJyeS1nZW5lcmF0aW5nIGFuZCBjYXJyeS1jb25zdW1pbmcgaW5zbnMgY29uc2VjdXRpdmVseQorZG5sICAqIERvbid0IGFsbG9jYXRlIGFueSBzdGFjaywgImhvbWUiIHBvc2l0aW9ucyBmb3IgcGFyYW1ldGVycyBjb3VsZCBiZSB1c2VkLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitkZWZpbmUoYHAwJyxgJXIyOCcpCitkZWZpbmUoYHAxJyxgJXIyOScpCitkZWZpbmUoYHQzMicsYCVyMTknKQorZGVmaW5lKGB0MCcsYCVyMjAnKQorZGVmaW5lKGB0MScsYCVyMjEnKQorZGVmaW5lKGB4JyxgJXIyMicpCitkZWZpbmUoYG0wJyxgJXIyMycpCitkZWZpbmUoYG0xJyxgJXIyNCcpCisKK2lmZGVmKGBIQVZFX0FCSV8yXzB3JywKK2AJLmxldmVsCTIuMHcKKycsYAkubGV2ZWwJMi4wCisnKQorUFJPTE9HVUUobXBuX3VtdWxfcHBtbV9yKQorCWxkbwkJMTI4KCVyMzApLCVyMzAKK2lmZGVmKGBIQVZFX0FCSV8yXzB3JywKK2AJc3RkCQklcjI2LC02NCglcjMwKQorCXN0ZAkJJXIyNSwtNTYoJXIzMCkKKwljb3B5CQklcjI0LCVyMzEKKycsYAorCWRlcGQJCSVyMjUsMzEsMzIsJXIyNgorCXN0ZAkJJXIyNiwtNjQoJXIzMCkKKwlkZXBkCQklcjIzLDMxLDMyLCVyMjQKKwlzdGQJCSVyMjQsLTU2KCVyMzApCisJbGR3CQktMTgwKCVyMzApLCVyMzEKKycpCisKKwlmbGRkCQktNjQoJXIzMCksJWZyNAorCWZsZGQJCS01NiglcjMwKSwlZnI1CisKKwl4bXB5dQkJJWZyNVIsJWZyNFIsJWZyNgorCWZzdGQJCSVmcjYsLTEyOCglcjMwKQorCXhtcHl1CQklZnI1UiwlZnI0TCwlZnI3CisJZnN0ZAkJJWZyNywtMTIwKCVyMzApCisJeG1weXUJCSVmcjVMLCVmcjRSLCVmcjgKKwlmc3RkCQklZnI4LC0xMTIoJXIzMCkKKwl4bXB5dQkJJWZyNUwsJWZyNEwsJWZyOQorCWZzdGQJCSVmcjksLTEwNCglcjMwKQorCisJZGVwZGksegkJMSwzMSwxLHQzMgkJQyB0MzIgPSAyXjMyCisKKwlsZGQJCS0xMjgoJXIzMCkscDAJCUMgbG8gPSBsb3cgNjQgYml0IG9mIHByb2R1Y3QKKwlsZGQJCS0xMjAoJXIzMCksbTAJCUMgbTAgPSBtaWQwIDY0IGJpdCBvZiBwcm9kdWN0CisJbGRkCQktMTEyKCVyMzApLG0xCQlDIG0xID0gbWlkMSA2NCBiaXQgb2YgcHJvZHVjdAorCWxkZAkJLTEwNCglcjMwKSxwMQkJQyBoaSA9IGhpZ2ggNjQgYml0IG9mIHByb2R1Y3QKKworCWFkZCxsLCpudXYJbTAsbTEseAkJCUMgeCA9IG0xK20wCisJIGFkZCxsCQl0MzIscDEscDEJCUMgcHJvcGFnYXRlIGNhcnJ5IHRvIG1pZCBvZiBwMQorCWRlcGQsegkJeCwzMSwzMix0MAkJQyBsbzMyKG0xK20wKQorCWFkZAkJdDAscDAscDAKKwlleHRyZCx1CQl4LDMxLDMyLHQxCQlDIGhpMzIobTErbTApCisJYWRkLGRjCQl0MSxwMSxwMQorCisJc3RkCQlwMCwwKCVyMzEpCQlDIHN0b3JlIGxvdyBoYWxmIG9mIHByb2R1Y3QKK2lmZGVmKGBIQVZFX0FCSV8yXzB3JywKK2AJY29weQkJcDEsJXIyOAkJCUMgcmV0dXJuIHZhbCBpbiAlcjI4CisnLGAJZXh0cmQsdQkJcDEsMzEsMzIsJXIyOAkJQyByZXR1cm4gdmFsIGluICVyMjgsJXIyOQorJykKKwlidmUJCSglcjIpCisJbGRvCQktMTI4KCVyMzApLCVyMzAKK0VQSUxPR1VFKG1wbl91bXVsX3BwbW1fcikKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXIvYWRkX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlci9hZGRfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ2Y2E3MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXIvYWRkX24uYXNtCkBAIC0wLDAgKzEsODMgQEAKK2RubCAgSUJNIFBPV0VSIG1wbl9hZGRfbiAtLSBBZGQgdHdvIGxpbWIgdmVjdG9ycyBvZiBlcXVhbCwgbm9uLXplcm8gbGVuZ3RoLgorCitkbmwgIENvcHlyaWdodCAxOTkyLCAxOTk0LTE5OTYsIDE5OTktMjAwMSwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKK2RubCAgSU5QVVQgUEFSQU1FVEVSUworZG5sICByZXNfcHRyCXIzCitkbmwgIHMxX3B0cglyNAorZG5sICBzMl9wdHIJcjUKK2RubCAgc2l6ZQlyNgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2FkZF9uKQorCWFuZGlsLgkxMCw2LDEJCUMgb2RkIG9yIGV2ZW4gbnVtYmVyIG9mIGxpbWJzPworCWwJOCwwKDQpCQlDIGxvYWQgbGVhc3Qgc2lnbmlmaWNhbnQgczEgbGltYgorCWwJMCwwKDUpCQlDIGxvYWQgbGVhc3Qgc2lnbmlmaWNhbnQgczIgbGltYgorCWNhbAkzLC00KDMpCQlDIG9mZnNldCByZXNfcHRyLCBpdCdzIHVwZGF0ZWQgYmVmb3JlIGl0J3MgdXNlZAorCXNyaQkxMCw2LDEJCUMgY291bnQgZm9yIHVucm9sbGVkIGxvb3AKKwlhCTcsMCw4CQlDIGFkZCBsZWFzdCBzaWduaWZpY2FudCBsaW1icywgc2V0IGN5CisJbXRjdHIJMTAJCUMgY29weSBjb3VudCBpbnRvIENUUgorCWJlcQkwLExldmVuCQlDIGJyYW5jaCBpZiBldmVuICMgb2YgbGltYnMgKCMgb2YgbGltYnMgPj0gMikKKworQyBXZSBoYXZlIGFuIG9kZCAjIG9mIGxpbWJzLiAgQWRkIHRoZSBmaXJzdCBsaW1icyBzZXBhcmF0ZWx5LgorCWNtcGkJMSwxMCwwCQlDIGlzIGNvdW50IGZvciB1bnJvbGxlZCBsb29wIHplcm8/CisJYmMJNCw2LEwxCQlDIGJuZSBjcjEsTDEgKG1pc2Fzc2VtYmxlZCBieSBnYXMpCisJc3QJNyw0KDMpCisJYXplCTMsMTAJCUMgdXNlIHRoZSBmYWN0IHRoYXQgcjEwIGlzIHplcm8uLi4KKwlicgkJCUMgcmV0dXJuCisKK0MgV2UgYWRkZWQgbGVhc3Qgc2lnbmlmaWNhbnQgbGltYnMuICBOb3cgcmVsb2FkIHRoZSBuZXh0IGxpbWJzIHRvIGVudGVyIGxvb3AuCitMMToJbHUJOCw0KDQpCQlDIGxvYWQgczEgbGltYiBhbmQgdXBkYXRlIHMxX3B0cgorCWx1CTAsNCg1KQkJQyBsb2FkIHMyIGxpbWIgYW5kIHVwZGF0ZSBzMl9wdHIKKwlzdHUJNyw0KDMpCisJYWUJNywwLDgJCUMgYWRkIGxpbWJzLCBzZXQgY3kKK0xldmVuOglsdQk5LDQoNCkJCUMgbG9hZCBzMSBsaW1iIGFuZCB1cGRhdGUgczFfcHRyCisJbHUJMTAsNCg1KQkJQyBsb2FkIHMyIGxpbWIgYW5kIHVwZGF0ZSBzMl9wdHIKKwliZHoJTGVuZAkJQyBJZiBkb25lLCBza2lwIGxvb3AKKworTG9vcDoJbHUJOCw0KDQpCQlDIGxvYWQgczEgbGltYiBhbmQgdXBkYXRlIHMxX3B0cgorCWx1CTAsNCg1KQkJQyBsb2FkIHMyIGxpbWIgYW5kIHVwZGF0ZSBzMl9wdHIKKwlhZQkxMSwxMCw5CQlDIGFkZCBwcmV2aW91cyBsaW1icyB3aXRoIGN5LCBzZXQgY3kKKwlzdHUJNyw0KDMpCQlDCisJbHUJOSw0KDQpCQlDIGxvYWQgczEgbGltYiBhbmQgdXBkYXRlIHMxX3B0cgorCWx1CTEwLDQoNSkJCUMgbG9hZCBzMiBsaW1iIGFuZCB1cGRhdGUgczJfcHRyCisJYWUJNywwLDgJCUMgYWRkIHByZXZpb3VzIGxpbWJzIHdpdGggY3ksIHNldCBjeQorCXN0dQkxMSw0KDMpCQlDCisJYmRuCUxvb3AJCUMgZGVjcmVtZW50IENUUiBhbmQgbG9vcCBiYWNrCisKK0xlbmQ6CWFlCTExLDEwLDkJCUMgYWRkIGxpbWJzIHdpdGggY3ksIHNldCBjeQorCXN0CTcsNCgzKQkJQworCXN0CTExLDgoMykJCUMKKwlsaWwJMywwCQlDIGxvYWQgY3kgaW50byAuLi4KKwlhemUJMywzCQlDIC4uLiByZXR1cm4gdmFsdWUgcmVnaXN0ZXIKKwlicgorRVBJTE9HVUUobXBuX2FkZF9uKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlci9hZGRtdWxfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VyL2FkZG11bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmQ4ZGYzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlci9hZGRtdWxfMS5hc20KQEAgLTAsMCArMSwxMjYgQEAKK2RubCAgSUJNIFBPV0VSIG1wbl9hZGRtdWxfMSAtLSBNdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYSBsaW1iIGFuZCBhZGQgdGhlCitkbmwgIHJlc3VsdCB0byBhIHNlY29uZCBsaW1iIHZlY3Rvci4KKworZG5sICBDb3B5cmlnaHQgMTk5MiwgMTk5NCwgMTk5OS0yMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworZG5sICBJTlBVVCBQQVJBTUVURVJTCitkbmwgIHJlc19wdHIJcjMKK2RubCAgczFfcHRyCXI0CitkbmwgIHNpemUJcjUKK2RubCAgczJfbGltYglyNgorCitkbmwgIFRoZSBQT1dFUiBhcmNoaXRlY3R1cmUgaGFzIG5vIHVuc2lnbmVkIDMyeDMyLT42NCBiaXQgbXVsdGlwbGljYXRpb24KK2RubCAgaW5zdHJ1Y3Rpb24uICBUbyBvYnRhaW4gdGhhdCBvcGVyYXRpb24sIHdlIGhhdmUgdG8gdXNlIHRoZSAzMngzMi0+NjQKK2RubCAgc2lnbmVkIG11bHRpcGxpY2F0aW9uIGluc3RydWN0aW9uLCBhbmQgYWRkIHRoZSBhcHByb3ByaWF0ZSBjb21wZW5zYXRpb24gdG8KK2RubCAgdGhlIGhpZ2ggbGltYiBvZiB0aGUgcmVzdWx0LiAgV2UgYWRkIHRoZSBtdWx0aXBsaWNhbmQgaWYgdGhlIG11bHRpcGxpZXIKK2RubCAgaGFzIGl0cyBtb3N0IHNpZ25pZmljYW50IGJpdCBzZXQsIGFuZCB3ZSBhZGQgdGhlIG11bHRpcGxpZXIgaWYgdGhlCitkbmwgIG11bHRpcGxpY2FuZCBoYXMgaXRzIG1vc3Qgc2lnbmlmaWNhbnQgYml0IHNldC4gIFdlIG5lZWQgdG8gcHJlc2VydmUgdGhlCitkbmwgIGNhcnJ5IGZsYWcgYmV0d2VlbiBlYWNoIGl0ZXJhdGlvbiwgc28gd2UgaGF2ZSB0byBjb21wdXRlIHRoZSBjb21wZW5zYXRpb24KK2RubCAgY2FyZWZ1bGx5ICh0aGUgbmF0dXJhbCwgc3JhaSthbmQgZG9lc24ndCB3b3JrKS4gIFNpbmNlIGFsbCBQT1dFUiBjYW4KK2RubCAgYnJhbmNoIGluIHplcm8gY3ljbGVzLCB3ZSB1c2UgY29uZGl0aW9uYWwgYnJhbmNoZXMgZm9yIHRoZSBjb21wZW5zYXRpb24uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fYWRkbXVsXzEpCisJY2FsCTMsLTQoMykKKwlsCTAsMCg0KQorCWNtcGkJMCw2LDAKKwltdGN0cgk1CisJbXVsCTksMCw2CisJc3JhaQk3LDAsMzEKKwlhbmQJNyw3LDYKKwltZm1xCTgKKwljYXgJOSw5LDcKKwlsCTcsNCgzKQorCWEJOCw4LDcJCUMgYWRkIHJlc19saW1iCisJYmx0CUxuZWcKK0xwb3M6CWJkeglMZW5kCisKK0xwbG9vcDoJbHUJMCw0KDQpCisJc3R1CTgsNCgzKQorCWNtcGkJMCwwLDAKKwltdWwJMTAsMCw2CisJbWZtcQkwCisJYWUJOCwwLDkJCUMgbG93IGxpbWIgKyBvbGRfY3lfbGltYiArIG9sZCBjeQorCWwJNyw0KDMpCisJYXplCTEwLDEwCQlDIHByb3BhZ2F0ZSBjeSB0byBuZXcgY3lfbGltYgorCWEJOCw4LDcJCUMgYWRkIHJlc19saW1iCisJYmdlCUxwMAorCWNheAkxMCwxMCw2CQlDIGFkanVzdCBoaWdoIGxpbWIgZm9yIG5lZ2F0aXZlIGxpbWIgZnJvbSBzMQorTHAwOgliZHoJTGVuZDAKKwlsdQkwLDQoNCkKKwlzdHUJOCw0KDMpCisJY21waQkwLDAsMAorCW11bAk5LDAsNgorCW1mbXEJMAorCWFlCTgsMCwxMAorCWwJNyw0KDMpCisJYXplCTksOQorCWEJOCw4LDcKKwliZ2UJTHAxCisJY2F4CTksOSw2CQlDIGFkanVzdCBoaWdoIGxpbWIgZm9yIG5lZ2F0aXZlIGxpbWIgZnJvbSBzMQorTHAxOgliZG4JTHBsb29wCisKKwliCUxlbmQKKworTG5lZzoJY2F4CTksOSwwCisJYmR6CUxlbmQKK0xubG9vcDoJbHUJMCw0KDQpCisJc3R1CTgsNCgzKQorCWNtcGkJMCwwLDAKKwltdWwJMTAsMCw2CisJbWZtcQk3CisJYWUJOCw3LDkKKwlsCTcsNCgzKQorCWFlCTEwLDEwLDAJCUMgcHJvcGFnYXRlIGN5IHRvIG5ldyBjeV9saW1iCisJYQk4LDgsNwkJQyBhZGQgcmVzX2xpbWIKKwliZ2UJTG4wCisJY2F4CTEwLDEwLDYJCUMgYWRqdXN0IGhpZ2ggbGltYiBmb3IgbmVnYXRpdmUgbGltYiBmcm9tIHMxCitMbjA6CWJkeglMZW5kMAorCWx1CTAsNCg0KQorCXN0dQk4LDQoMykKKwljbXBpCTAsMCwwCisJbXVsCTksMCw2CisJbWZtcQk3CisJYWUJOCw3LDEwCisJbAk3LDQoMykKKwlhZQk5LDksMAkJQyBwcm9wYWdhdGUgY3kgdG8gbmV3IGN5X2xpbWIKKwlhCTgsOCw3CQlDIGFkZCByZXNfbGltYgorCWJnZQlMbjEKKwljYXgJOSw5LDYJCUMgYWRqdXN0IGhpZ2ggbGltYiBmb3IgbmVnYXRpdmUgbGltYiBmcm9tIHMxCitMbjE6CWJkbglMbmxvb3AKKwliCUxlbmQKKworTGVuZDA6CWNhbAk5LDAoMTApCitMZW5kOglzdAk4LDQoMykKKwlhemUJMyw5CisJYnIKK0VQSUxPR1VFKG1wbl9hZGRtdWxfMSkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXIvZ21wLW1wYXJhbS5oIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlci9nbXAtbXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NiMzZmOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXIvZ21wLW1wYXJhbS5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qIFBPV0VSIGdtcC1tcGFyYW0uaCAtLSBDb21waWxlci9tYWNoaW5lIHBhcmFtZXRlciBoZWFkZXIgZmlsZS4KKworQ29weXJpZ2h0IDIwMDItMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworLyogR2VuZXJhdGVkIGJ5IHR1bmV1cC5jLCAyMDAzLTAyLTEwLCBnY2MgMy4yLCBQT1dFUjIgNjYuN01IeiAqLworCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgIDEyCisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgIDc1CisKKyNkZWZpbmUgU1FSX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgIDcKKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAgODYKKworI2RlZmluZSBESVZfU0JfUFJFSU5WX1RIUkVTSE9MRCAgICAgICBNUF9TSVpFX1RfTUFYICAvKiBuZXZlciAqLworI2RlZmluZSBESVZfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAzNgorI2RlZmluZSBQT1dNX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICA2OQorCisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDk3CisjZGVmaW5lIEdDRF9BQ0NFTF9USFJFU0hPTEQgICAgICAgICAgICAgICAzCisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgNTkwCisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAyCisKKyNkZWZpbmUgRElWUkVNXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgMTIKKyNkZWZpbmUgRElWUkVNXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgTU9EXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgMTAKKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgVVNFX1BSRUlOVl9ESVZSRU1fMSAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVVNFX1BSRUlOVl9NT0RfMSAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgRElWUkVNXzJfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgRElWRVhBQ1RfMV9USFJFU0hPTEQgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RFWEFDVF8xX09ERF9USFJFU0hPTEQgICAgICAgICAgMCAgLyogYWx3YXlzICovCisKKyNkZWZpbmUgR0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgMTAKKyNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgMjAKKyNkZWZpbmUgU0VUX1NUUl9USFJFU0hPTEQgICAgICAgICAgICAgIDI4OTkKKworI2RlZmluZSBNVUxfRkZUX1RBQkxFICB7IDMzNiwgODAwLCAxNDA4LCAzNTg0LCAxMDI0MCwgMjQ1NzYsIDAgfQorI2RlZmluZSBNVUxfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgIDI5NgorI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgMjMwNAorCisjZGVmaW5lIFNRUl9GRlRfVEFCTEUgIHsgMzM2LCA4MDAsIDE0MDgsIDM1ODQsIDEwMjQwLCAyNDU3NiwgMCB9CisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgMjk2CisjZGVmaW5lIFNRUl9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAyMzA0CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VyL2xzaGlmdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VyL2xzaGlmdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZhMjEwNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXIvbHNoaWZ0LmFzbQpAQCAtMCwwICsxLDYxIEBACitkbmwgIElCTSBQT1dFUiBtcG5fbHNoaWZ0IC0tIFNoaWZ0IGEgbnVtYmVyIGxlZnQuCisKK2RubCAgQ29weXJpZ2h0IDE5OTIsIDE5OTQsIDE5OTktMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKK2RubCAgSU5QVVQgUEFSQU1FVEVSUworZG5sICByZXNfcHRyCXIzCitkbmwgIHNfcHRyCXI0CitkbmwgIHNpemUJcjUKK2RubCAgY250CXI2CisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fbHNoaWZ0KQorCXNsaQkwLDUsMgorCWNheAk5LDMsMAorCWNheAk0LDQsMAorCXNmaQk4LDYsMzIKKwltdGN0cgk1CQlDIHB1dCBsaW1iIGNvdW50IGluIENUUiBsb29wIHJlZ2lzdGVyCisJbHUJMCwtNCg0KQkJQyByZWFkIG1vc3Qgc2lnbmlmaWNhbnQgbGltYgorCXNyZQkzLDAsOAkJQyBjb21wdXRlIGNhcnJ5IG91dCBsaW1iLCBhbmQgaW5pdCBNUSByZWdpc3RlcgorCWJkeglMZW5kMgkJQyBpZiBqdXN0IG9uZSBsaW1iLCBza2lwIGxvb3AKKwlsdQkwLC00KDQpCQlDIHJlYWQgMjpuZCBtb3N0IHNpZ25pZmljYW50IGxpbWIKKwlzcmVxCTcsMCw4CQlDIGNvbXB1dGUgbW9zdCBzaWduaWZpY2FudCBsaW1iIG9mIHJlc3VsdAorCWJkeglMZW5kCQlDIGlmIGp1c3QgdHdvIGxpbWIsIHNraXAgbG9vcAorTG9vcDoJbHUJMCwtNCg0KQkJQyBsb2FkIG5leHQgbG93ZXIgbGltYgorCXN0dQk3LC00KDkpCQlDIHN0b3JlIHByZXZpb3VzIHJlc3VsdCBkdXJpbmcgcmVhZCBsYXRlbmN5CisJc3JlcQk3LDAsOAkJQyBjb21wdXRlIHJlc3VsdCBsaW1iCisJYmRuCUxvb3AJCUMgbG9vcCBiYWNrIHVudGlsIENUUiBpcyB6ZXJvCitMZW5kOglzdHUJNywtNCg5KQkJQyBzdG9yZSAyOm5kIGxlYXN0IHNpZ25pZmljYW50IGxpbWIKK0xlbmQyOglzbGUJNywwLDYJCUMgY29tcHV0ZSBsZWFzdCBzaWduaWZpY2FudCBsaW1iCisJc3QJNywtNCg5KQkJQyBzdG9yZSBpdAorCWJyCitFUElMT0dVRShtcG5fbHNoaWZ0KQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlci9tdWxfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VyL211bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGI3YjY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlci9tdWxfMS5hc20KQEAgLTAsMCArMSwxMTMgQEAKK2RubCAgSUJNIFBPV0VSIG1wbl9tdWxfMSAtLSBNdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYSBsaW1iIGFuZCBzdG9yZSB0aGUKK2RubCAgcmVzdWx0IGluIGEgc2Vjb25kIGxpbWIgdmVjdG9yLgorCitkbmwgIENvcHlyaWdodCAxOTkyLCAxOTk0LCAxOTk5LTIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCitkbmwgIElOUFVUIFBBUkFNRVRFUlMKK2RubCAgcmVzX3B0cglyMworZG5sICBzMV9wdHIJcjQKK2RubCAgc2l6ZQlyNQorZG5sICBzMl9saW1iCXI2CisKK2RubCAgVGhlIFBPV0VSIGFyY2hpdGVjdHVyZSBoYXMgbm8gdW5zaWduZWQgMzJ4MzItPjY0IGJpdCBtdWx0aXBsaWNhdGlvbgorZG5sICBpbnN0cnVjdGlvbi4gIFRvIG9idGFpbiB0aGF0IG9wZXJhdGlvbiwgd2UgaGF2ZSB0byB1c2UgdGhlIDMyeDMyLT42NAorZG5sICBzaWduZWQgbXVsdGlwbGljYXRpb24gaW5zdHJ1Y3Rpb24sIGFuZCBhZGQgdGhlIGFwcHJvcHJpYXRlIGNvbXBlbnNhdGlvbiB0bworZG5sICB0aGUgaGlnaCBsaW1iIG9mIHRoZSByZXN1bHQuICBXZSBhZGQgdGhlIG11bHRpcGxpY2FuZCBpZiB0aGUgbXVsdGlwbGllcgorZG5sICBoYXMgaXRzIG1vc3Qgc2lnbmlmaWNhbnQgYml0IHNldCwgYW5kIHdlIGFkZCB0aGUgbXVsdGlwbGllciBpZiB0aGUKK2RubCAgbXVsdGlwbGljYW5kIGhhcyBpdHMgbW9zdCBzaWduaWZpY2FudCBiaXQgc2V0LiAgV2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGUKK2RubCAgY2FycnkgZmxhZyBiZXR3ZWVuIGVhY2ggaXRlcmF0aW9uLCBzbyB3ZSBoYXZlIHRvIGNvbXB1dGUgdGhlIGNvbXBlbnNhdGlvbgorZG5sICBjYXJlZnVsbHkgKHRoZSBuYXR1cmFsLCBzcmFpK2FuZCBkb2Vzbid0IHdvcmspLiAgU2luY2UgYWxsIFBPV0VSIGNhbgorZG5sICBicmFuY2ggaW4gemVybyBjeWNsZXMsIHdlIHVzZSBjb25kaXRpb25hbCBicmFuY2hlcyBmb3IgdGhlIGNvbXBlbnNhdGlvbi4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9tdWxfMSkKKwljYWwJMywtNCgzKQorCWwJMCwwKDQpCisJY21waQkwLDYsMAorCW10Y3RyCTUKKwltdWwJOSwwLDYKKwlzcmFpCTcsMCwzMQorCWFuZAk3LDcsNgorCW1mbXEJOAorCWFpCTAsMCwwCQlDIHJlc2V0IGNhcnJ5CisJY2F4CTksOSw3CisJYmx0CUxuZWcKK0xwb3M6CWJkeglMZW5kCitMcGxvb3A6CWx1CTAsNCg0KQorCXN0dQk4LDQoMykKKwljbXBpCTAsMCwwCisJbXVsCTEwLDAsNgorCW1mbXEJMAorCWFlCTgsMCw5CisJYmdlCUxwMAorCWNheAkxMCwxMCw2CQlDIGFkanVzdCBoaWdoIGxpbWIgZm9yIG5lZ2F0aXZlIGxpbWIgZnJvbSBzMQorTHAwOgliZHoJTGVuZDAKKwlsdQkwLDQoNCkKKwlzdHUJOCw0KDMpCisJY21waQkwLDAsMAorCW11bAk5LDAsNgorCW1mbXEJMAorCWFlCTgsMCwxMAorCWJnZQlMcDEKKwljYXgJOSw5LDYJCUMgYWRqdXN0IGhpZ2ggbGltYiBmb3IgbmVnYXRpdmUgbGltYiBmcm9tIHMxCitMcDE6CWJkbglMcGxvb3AKKwliCUxlbmQKKworTG5lZzoJY2F4CTksOSwwCisJYmR6CUxlbmQKK0xubG9vcDoJbHUJMCw0KDQpCisJc3R1CTgsNCgzKQorCWNtcGkJMCwwLDAKKwltdWwJMTAsMCw2CisJY2F4CTEwLDEwLDAJCUMgYWRqdXN0IGhpZ2ggbGltYiBmb3IgbmVnYXRpdmUgczJfbGltYgorCW1mbXEJMAorCWFlCTgsMCw5CisJYmdlCUxuMAorCWNheAkxMCwxMCw2CQlDIGFkanVzdCBoaWdoIGxpbWIgZm9yIG5lZ2F0aXZlIGxpbWIgZnJvbSBzMQorTG4wOgliZHoJTGVuZDAKKwlsdQkwLDQoNCkKKwlzdHUJOCw0KDMpCisJY21waQkwLDAsMAorCW11bAk5LDAsNgorCWNheAk5LDksMAkJQyBhZGp1c3QgaGlnaCBsaW1iIGZvciBuZWdhdGl2ZSBzMl9saW1iCisJbWZtcQkwCisJYWUJOCwwLDEwCisJYmdlCUxuMQorCWNheAk5LDksNgkJQyBhZGp1c3QgaGlnaCBsaW1iIGZvciBuZWdhdGl2ZSBsaW1iIGZyb20gczEKK0xuMToJYmRuCUxubG9vcAorCWIJTGVuZAorCitMZW5kMDoJY2FsCTksMCgxMCkKK0xlbmQ6CXN0CTgsNCgzKQorCWF6ZQkzLDkKKwlicgorRVBJTE9HVUUobXBuX211bF8xKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlci9yc2hpZnQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlci9yc2hpZnQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMTgxNWMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VyL3JzaGlmdC5hc20KQEAgLTAsMCArMSw1OSBAQAorZG5sICBJQk0gUE9XRVIgbXBuX3JzaGlmdCAtLSBTaGlmdCBhIG51bWJlciByaWdodC4KKworZG5sICBDb3B5cmlnaHQgMTk5MiwgMTk5NCwgMTk5OS0yMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworZG5sICBJTlBVVCBQQVJBTUVURVJTCitkbmwgIHJlc19wdHIJcjMKK2RubCAgc19wdHIJcjQKK2RubCAgc2l6ZQlyNQorZG5sICBjbnQJcjYKKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9yc2hpZnQpCisJc2ZpCTgsNiwzMgorCW10Y3RyCTUJCUMgcHV0IGxpbWIgY291bnQgaW4gQ1RSIGxvb3AgcmVnaXN0ZXIKKwlsCTAsMCg0KQkJQyByZWFkIGxlYXN0IHNpZ25pZmljYW50IGxpbWIKKwlhaQk5LDMsLTQJCUMgYWRqdXN0IHJlc19wdHIgc2luY2UgaXQncyBvZmZzZXQgaW4gdGhlIHN0dTpzCisJc2xlCTMsMCw4CQlDIGNvbXB1dGUgY2FycnkgbGltYiwgYW5kIGluaXQgTVEgcmVnaXN0ZXIKKwliZHoJTGVuZDIJCUMgaWYganVzdCBvbmUgbGltYiwgc2tpcCBsb29wCisJbHUJMCw0KDQpCQlDIHJlYWQgMjpuZCBsZWFzdCBzaWduaWZpY2FudCBsaW1iCisJc2xlcQk3LDAsOAkJQyBjb21wdXRlIGxlYXN0IHNpZ25pZmljYW50IGxpbWIgb2YgcmVzdWx0CisJYmR6CUxlbmQJCUMgaWYganVzdCB0d28gbGltYiwgc2tpcCBsb29wCitMb29wOglsdQkwLDQoNCkJCUMgbG9hZCBuZXh0IGhpZ2hlciBsaW1iCisJc3R1CTcsNCg5KQkJQyBzdG9yZSBwcmV2aW91cyByZXN1bHQgZHVyaW5nIHJlYWQgbGF0ZW5jeQorCXNsZXEJNywwLDgJCUMgY29tcHV0ZSByZXN1bHQgbGltYgorCWJkbglMb29wCQlDIGxvb3AgYmFjayB1bnRpbCBDVFIgaXMgemVybworTGVuZDoJc3R1CTcsNCg5KQkJQyBzdG9yZSAyOm5kIG1vc3Qgc2lnbmlmaWNhbnQgbGltYgorTGVuZDI6CXNyZQk3LDAsNgkJQyBjb21wdXRlIG1vc3Qgc2lnbmlmaWNhbnQgbGltYgorCXN0CTcsNCg5KQkJQyBzdG9yZSBpdAorCWJyCitFUElMT0dVRShtcG5fcnNoaWZ0KQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlci9zZGl2LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXIvc2Rpdi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE5ZWQxNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXIvc2Rpdi5hc20KQEAgLTAsMCArMSwzOSBAQAorZG5sICBDb3B5cmlnaHQgMTk5OSwgMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX3NkaXZfcXJubmQpCisJbXRtcQk1CisJZGl2CTAsNCw2CisJbWZtcQk5CisJc3QJOSwwKDMpCisJbXIJMywwCisJYnIKK0VQSUxPR1VFKG1wbl9zZGl2X3Fybm5kKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlci9zdWJfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VyL3N1Yl9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTBjODAyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlci9zdWJfbi5hc20KQEAgLTAsMCArMSw4NSBAQAorZG5sICBJQk0gUE9XRVIgbXBuX3N1Yl9uIC0tIFN1YnRyYWN0IHR3byBsaW1iIHZlY3RvcnMgb2YgZXF1YWwsIG5vbi16ZXJvCitkbmwgIGxlbmd0aC4KKworZG5sICBDb3B5cmlnaHQgMTk5MiwgMTk5NC0xOTk2LCAxOTk5LTIwMDEsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCitkbmwgIElOUFVUIFBBUkFNRVRFUlMKK2RubCAgcmVzX3B0cglyMworZG5sICBzMV9wdHIJcjQKK2RubCAgczJfcHRyCXI1CitkbmwgIHNpemUJcjYKKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9zdWJfbikKKwlhbmRpbC4JMTAsNiwxCQlDIG9kZCBvciBldmVuIG51bWJlciBvZiBsaW1icz8KKwlsCTgsMCg0KQkJQyBsb2FkIGxlYXN0IHNpZ25pZmljYW50IHMxIGxpbWIKKwlsCTAsMCg1KQkJQyBsb2FkIGxlYXN0IHNpZ25pZmljYW50IHMyIGxpbWIKKwljYWwJMywtNCgzKQkJQyBvZmZzZXQgcmVzX3B0ciwgaXQncyB1cGRhdGVkIGJlZm9yZSBpdCdzIHVzZWQKKwlzcmkJMTAsNiwxCQlDIGNvdW50IGZvciB1bnJvbGxlZCBsb29wCisJc2YJNywwLDgJCUMgc3VidHJhY3QgbGVhc3Qgc2lnbmlmaWNhbnQgbGltYnMsIHNldCBjeQorCW10Y3RyCTEwCQlDIGNvcHkgY291bnQgaW50byBDVFIKKwliZXEJMCxMZXZlbgkJQyBicmFuY2ggaWYgZXZlbiAjIG9mIGxpbWJzICgjIG9mIGxpbWJzID49IDIpCisKK0MgV2UgaGF2ZSBhbiBvZGQgIyBvZiBsaW1icy4gIEFkZCB0aGUgZmlyc3QgbGltYnMgc2VwYXJhdGVseS4KKwljbXBpCTEsMTAsMAkJQyBpcyBjb3VudCBmb3IgdW5yb2xsZWQgbG9vcCB6ZXJvPworCWJjCTQsNixMMQkJQyBibmUgY3IxLEwxIChtaXNhc3NlbWJsZWQgYnkgZ2FzKQorCXN0CTcsNCgzKQorCXNmZQkzLDAsMAkJQyBsb2FkICFjeSBpbnRvIC4uLgorCXNmaQkzLDMsMAkJQyAuLi4gcmV0dXJuIHZhbHVlIHJlZ2lzdGVyCisJYnIJCQlDIHJldHVybgorCitDIFdlIGFkZGVkIGxlYXN0IHNpZ25pZmljYW50IGxpbWJzLiAgTm93IHJlbG9hZCB0aGUgbmV4dCBsaW1icyB0byBlbnRlciBsb29wLgorTDE6CWx1CTgsNCg0KQkJQyBsb2FkIHMxIGxpbWIgYW5kIHVwZGF0ZSBzMV9wdHIKKwlsdQkwLDQoNSkJCUMgbG9hZCBzMiBsaW1iIGFuZCB1cGRhdGUgczJfcHRyCisJc3R1CTcsNCgzKQorCXNmZQk3LDAsOAkJQyBzdWJ0cmFjdCBsaW1icywgc2V0IGN5CitMZXZlbjoJbHUJOSw0KDQpCQlDIGxvYWQgczEgbGltYiBhbmQgdXBkYXRlIHMxX3B0cgorCWx1CTEwLDQoNSkJCUMgbG9hZCBzMiBsaW1iIGFuZCB1cGRhdGUgczJfcHRyCisJYmR6CUxlbmQJCUMgSWYgZG9uZSwgc2tpcCBsb29wCisKK0xvb3A6CWx1CTgsNCg0KQkJQyBsb2FkIHMxIGxpbWIgYW5kIHVwZGF0ZSBzMV9wdHIKKwlsdQkwLDQoNSkJCUMgbG9hZCBzMiBsaW1iIGFuZCB1cGRhdGUgczJfcHRyCisJc2ZlCTExLDEwLDkJCUMgc3VidHJhY3QgcHJldmlvdXMgbGltYnMgd2l0aCBjeSwgc2V0IGN5CisJc3R1CTcsNCgzKQkJQworCWx1CTksNCg0KQkJQyBsb2FkIHMxIGxpbWIgYW5kIHVwZGF0ZSBzMV9wdHIKKwlsdQkxMCw0KDUpCQlDIGxvYWQgczIgbGltYiBhbmQgdXBkYXRlIHMyX3B0cgorCXNmZQk3LDAsOAkJQyBzdWJ0cmFjdCBwcmV2aW91cyBsaW1icyB3aXRoIGN5LCBzZXQgY3kKKwlzdHUJMTEsNCgzKQkJQworCWJkbglMb29wCQlDIGRlY3JlbWVudCBDVFIgYW5kIGxvb3AgYmFjaworCitMZW5kOglzZmUJMTEsMTAsOQkJQyBzdWJ0cmFjdCBsaW1icyB3aXRoIGN5LCBzZXQgY3kKKwlzdAk3LDQoMykJCUMKKwlzdAkxMSw4KDMpCQlDCisJc2ZlCTMsMCwwCQlDIGxvYWQgIWN5IGludG8gLi4uCisJc2ZpCTMsMywwCQlDIC4uLiByZXR1cm4gdmFsdWUgcmVnaXN0ZXIKKwlicgorRVBJTE9HVUUobXBuX3N1Yl9uKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlci9zdWJtdWxfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VyL3N1Ym11bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzg4ZTBkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlci9zdWJtdWxfMS5hc20KQEAgLTAsMCArMSwxMzEgQEAKK2RubCAgSUJNIFBPV0VSIG1wbl9zdWJtdWxfMSAtLSBNdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYSBsaW1iIGFuZCBzdWJ0cmFjdAorZG5sICB0aGUgcmVzdWx0IGZyb20gYSBzZWNvbmQgbGltYiB2ZWN0b3IuCisKK2RubCAgQ29weXJpZ2h0IDE5OTIsIDE5OTQsIDE5OTktMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKK2RubCAgSU5QVVQgUEFSQU1FVEVSUworZG5sICByZXNfcHRyCXIzCitkbmwgIHMxX3B0cglyNAorZG5sICBzaXplCXI1CitkbmwgIHMyX2xpbWIJcjYKKworZG5sICBUaGUgUE9XRVIgYXJjaGl0ZWN0dXJlIGhhcyBubyB1bnNpZ25lZCAzMngzMi0+NjQgYml0IG11bHRpcGxpY2F0aW9uCitkbmwgIGluc3RydWN0aW9uLiAgVG8gb2J0YWluIHRoYXQgb3BlcmF0aW9uLCB3ZSBoYXZlIHRvIHVzZSB0aGUgMzJ4MzItPjY0CitkbmwgIHNpZ25lZCBtdWx0aXBsaWNhdGlvbiBpbnN0cnVjdGlvbiwgYW5kIGFkZCB0aGUgYXBwcm9wcmlhdGUgY29tcGVuc2F0aW9uIHRvCitkbmwgIHRoZSBoaWdoIGxpbWIgb2YgdGhlIHJlc3VsdC4gIFdlIGFkZCB0aGUgbXVsdGlwbGljYW5kIGlmIHRoZSBtdWx0aXBsaWVyCitkbmwgIGhhcyBpdHMgbW9zdCBzaWduaWZpY2FudCBiaXQgc2V0LCBhbmQgd2UgYWRkIHRoZSBtdWx0aXBsaWVyIGlmIHRoZQorZG5sICBtdWx0aXBsaWNhbmQgaGFzIGl0cyBtb3N0IHNpZ25pZmljYW50IGJpdCBzZXQuICBXZSBuZWVkIHRvIHByZXNlcnZlIHRoZQorZG5sICBjYXJyeSBmbGFnIGJldHdlZW4gZWFjaCBpdGVyYXRpb24sIHNvIHdlIGhhdmUgdG8gY29tcHV0ZSB0aGUgY29tcGVuc2F0aW9uCitkbmwgIGNhcmVmdWxseSAodGhlIG5hdHVyYWwsIHNyYWkrYW5kIGRvZXNuJ3Qgd29yaykuICBTaW5jZSBhbGwgUE9XRVIgY2FuCitkbmwgIGJyYW5jaCBpbiB6ZXJvIGN5Y2xlcywgd2UgdXNlIGNvbmRpdGlvbmFsIGJyYW5jaGVzIGZvciB0aGUgY29tcGVuc2F0aW9uLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX3N1Ym11bF8xKQorCWNhbAkzLC00KDMpCisJbAkwLDAoNCkKKwljbXBpCTAsNiwwCisJbXRjdHIJNQorCW11bAk5LDAsNgorCXNyYWkJNywwLDMxCisJYW5kCTcsNyw2CisJbWZtcQkxMQorCWNheAk5LDksNworCWwJNyw0KDMpCisJc2YJOCwxMSw3CQlDIGFkZCByZXNfbGltYgorCWEJMTEsOCwxMQkJQyBpbnZlcnQgY3kgKHIxMSBpcyBqdW5rKQorCWJsdAlMbmVnCitMcG9zOgliZHoJTGVuZAorCitMcGxvb3A6CWx1CTAsNCg0KQorCXN0dQk4LDQoMykKKwljbXBpCTAsMCwwCisJbXVsCTEwLDAsNgorCW1mbXEJMAorCWFlCTExLDAsOQkJQyBsb3cgbGltYiArIG9sZF9jeV9saW1iICsgb2xkIGN5CisJbAk3LDQoMykKKwlhemUJMTAsMTAJCUMgcHJvcGFnYXRlIGN5IHRvIG5ldyBjeV9saW1iCisJc2YJOCwxMSw3CQlDIGFkZCByZXNfbGltYgorCWEJMTEsOCwxMQkJQyBpbnZlcnQgY3kgKHIxMSBpcyBqdW5rKQorCWJnZQlMcDAKKwljYXgJMTAsMTAsNgkJQyBhZGp1c3QgaGlnaCBsaW1iIGZvciBuZWdhdGl2ZSBsaW1iIGZyb20gczEKK0xwMDoJYmR6CUxlbmQwCisJbHUJMCw0KDQpCisJc3R1CTgsNCgzKQorCWNtcGkJMCwwLDAKKwltdWwJOSwwLDYKKwltZm1xCTAKKwlhZQkxMSwwLDEwCisJbAk3LDQoMykKKwlhemUJOSw5CisJc2YJOCwxMSw3CisJYQkxMSw4LDExCQlDIGludmVydCBjeSAocjExIGlzIGp1bmspCisJYmdlCUxwMQorCWNheAk5LDksNgkJQyBhZGp1c3QgaGlnaCBsaW1iIGZvciBuZWdhdGl2ZSBsaW1iIGZyb20gczEKK0xwMToJYmRuCUxwbG9vcAorCisJYglMZW5kCisKK0xuZWc6CWNheAk5LDksMAorCWJkeglMZW5kCitMbmxvb3A6CWx1CTAsNCg0KQorCXN0dQk4LDQoMykKKwljbXBpCTAsMCwwCisJbXVsCTEwLDAsNgorCW1mbXEJNworCWFlCTExLDcsOQorCWwJNyw0KDMpCisJYWUJMTAsMTAsMAkJQyBwcm9wYWdhdGUgY3kgdG8gbmV3IGN5X2xpbWIKKwlzZgk4LDExLDcJCUMgYWRkIHJlc19saW1iCisJYQkxMSw4LDExCQlDIGludmVydCBjeSAocjExIGlzIGp1bmspCisJYmdlCUxuMAorCWNheAkxMCwxMCw2CQlDIGFkanVzdCBoaWdoIGxpbWIgZm9yIG5lZ2F0aXZlIGxpbWIgZnJvbSBzMQorTG4wOgliZHoJTGVuZDAKKwlsdQkwLDQoNCkKKwlzdHUJOCw0KDMpCisJY21waQkwLDAsMAorCW11bAk5LDAsNgorCW1mbXEJNworCWFlCTExLDcsMTAKKwlsCTcsNCgzKQorCWFlCTksOSwwCQlDIHByb3BhZ2F0ZSBjeSB0byBuZXcgY3lfbGltYgorCXNmCTgsMTEsNwkJQyBhZGQgcmVzX2xpbWIKKwlhCTExLDgsMTEJCUMgaW52ZXJ0IGN5IChyMTEgaXMganVuaykKKwliZ2UJTG4xCisJY2F4CTksOSw2CQlDIGFkanVzdCBoaWdoIGxpbWIgZm9yIG5lZ2F0aXZlIGxpbWIgZnJvbSBzMQorTG4xOgliZG4JTG5sb29wCisJYglMZW5kCisKK0xlbmQwOgljYWwJOSwwKDEwKQorTGVuZDoJc3QJOCw0KDMpCisJYXplCTMsOQorCWJyCitFUElMT0dVRShtcG5fc3VibXVsXzEpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VyL3VtdWwuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlci91bXVsLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTA1OTllCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlci91bXVsLmFzbQpAQCAtMCwwICsxLDQzIEBACitkbmwgIENvcHlyaWdodCAxOTk5LCAyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fdW11bF9wcG1tKQorCW11bAk5LDQsNQorCXNyYWkJMCw0LDMxCisJYW5kCTAsMCw1CisJc3JhaQk1LDUsMzEKKwlhbmQJNSw1LDQKKwljYXgJMCwwLDUKKwltZm1xCTExCisJc3QJMTEsMCgzKQorCWNheAkzLDksMAorCWJyCitFUElMT0dVRShtcG5fdW11bF9wcG1tKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvNzUwL2NvbS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi83NTAvY29tLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjhiNTc0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvNzUwL2NvbS5hc20KQEAgLTAsMCArMSw3OSBAQAorZG5sICBQb3dlclBDIDc1MCBtcG5fY29tIC0tIG1wbiBiaXR3aXNlIG9uZSdzIGNvbXBsZW1lbnQKKworZG5sICBDb3B5cmlnaHQgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MgICAgICAgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgNjAzZTogICAgICAgICAgICA/CitDIDYwNGU6ICAgICAgICAgICAgMy4wCitDIDc1eCAoRzMpOiAgICAgICAgMi4wCitDIDc0MDAsNzQxMCAoRzQpOiAgMi4wCitDIDc0NHgsNzQ1eCAoRzQrKTogMy4wCisKK0Mgdm9pZCBtcG5fY29tIChtcF9wdHIgZHN0LCBtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSk7CitDCitDIFRoaXMgbG9vcCBmb3JtIGlzIG5lY2Vzc2FyeSBmb3IgdGhlIGNsYWltZWQgc3BlZWQuCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fY29tKQorCisJQyByMwlkc3QKKwlDIHI0CXNyYworCUMgcjUJc2l6ZQorCisJbXRjdHIJcjUJCUMgc2l6ZQorCWx3eglyNSwgMChyNCkJQyBzcmMgbG93IGxpbWIKKworCXN1YglyNCwgcjQsIHIzCUMgc3JjLWRzdAorCXN1YmkJcjMsIHIzLCA0CUMgZHN0LTQKKworCWFkZGkJcjQsIHI0LCA4CUMgc3JjLWRzdCs4CisJYmR6CUwob25lKQorCitMKHRvcCk6CisJQyByMwkmZHN0W2ktMV0KKwlDIHI0CXNyYy1kc3QKKwlDIHI1CXNyY1tpXQorCUMgcjYJc2NyYXRjaAorCisJbm90CXI2LCByNQkJQyB+c3JjW2ldCisJbHd6eAlyNSwgcjQscjMJQyBzcmNbaSsxXQorCisJc3R3dQlyNiwgNChyMykJQyBkc3RbaV0KKwliZG56CUwodG9wKQorCitMKG9uZSk6CisJbm90CXI2LCByNQorCisJc3R3CXI2LCA0KHIzKQlDIGRzdFtzaXplLTFdCisJYmxyCisKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzMyLzc1MC9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi83NTAvZ21wLW1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NjdlODUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi83NTAvZ21wLW1wYXJhbS5oCkBAIC0wLDAgKzEsMTkyIEBACisvKiBQb3dlclBDLTMyIGdtcC1tcGFyYW0uaCAtLSBDb21waWxlci9tYWNoaW5lIHBhcmFtZXRlciBoZWFkZXIgZmlsZS4KKworQ29weXJpZ2h0IDIwMDIsIDIwMDQsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNkZWZpbmUgR01QX0xJTUJfQklUUyAzMgorI2RlZmluZSBHTVBfTElNQl9CWVRFUyA0CisKKworLyogVGhpcyBmaWxlIGlzIHVzZWQgZm9yIDc1eCAoRzMpIGFuZCBmb3IgNzQwMC83NDEwIChHNCksIGJvdGggd2hpY2ggaGF2ZQorICAgbXVjaCBzbG93IG11bHRpcGx5IGluc3RydWN0aW9ucy4gICovCisKKy8qIDQ1MCBNSHogUFBDIDc0MDAgKi8KKworI2RlZmluZSBESVZSRU1fMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIERJVlJFTV8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAxMQorI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNworI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAxMQorI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICAgICAxOAorI2RlZmluZSBQUkVJTlZfTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAzOAorI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBESVZFWEFDVF8xX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIEJNT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisKKyNkZWZpbmUgTVVMX1RPT00yMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgTVVMX1RPT00zM19USFJFU0hPTEQgICAgICAgICAgICAgICAgMzgKKyNkZWZpbmUgTVVMX1RPT000NF9USFJFU0hPTEQgICAgICAgICAgICAgICAgOTkKKyNkZWZpbmUgTVVMX1RPT002SF9USFJFU0hPTEQgICAgICAgICAgICAgICAxNDEKKyNkZWZpbmUgTVVMX1RPT004SF9USFJFU0hPTEQgICAgICAgICAgICAgICAyMTIKKworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT000M19USFJFU0hPTEQgICAgICA2NQorI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT001M19USFJFU0hPTEQgICAgICA2OQorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT001M19USFJFU0hPTEQgICAgICA2NQorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT002M19USFJFU0hPTEQgICAgICA2NgorCisjZGVmaW5lIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgICA0CisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgICAgIDU3CisjZGVmaW5lIFNRUl9UT09NNF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTQyCisjZGVmaW5lIFNRUl9UT09NNl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTczCisjZGVmaW5lIFNRUl9UT09NOF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMzA5CisKKyNkZWZpbmUgTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgU1FSTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTEKKworI2RlZmluZSBNVUxfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDIyMCAgLyogayA9IDUgKi8KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDIyMCwgNX0sIHsgICAgIDEzLCA2fSwgeyAgICAgIDcsIDV9LCB7ICAgICAxNSwgNn0sIFwKKyAgICB7ICAgICAgOCwgNX0sIHsgICAgIDE3LCA2fSwgeyAgICAgIDksIDV9LCB7ICAgICAxOSwgNn0sIFwKKyAgICB7ICAgICAxMywgN30sIHsgICAgICA3LCA2fSwgeyAgICAgMTcsIDd9LCB7ICAgICAgOSwgNn0sIFwKKyAgICB7ICAgICAxOSwgN30sIHsgICAgIDExLCA2fSwgeyAgICAgMjMsIDd9LCB7ICAgICAxMywgOH0sIFwKKyAgICB7ICAgICAgNywgN30sIHsgICAgIDE5LCA4fSwgeyAgICAgMTEsIDd9LCB7ICAgICAyMywgOX0sIFwKKyAgICB7ICAgICAgNywgOH0sIHsgICAgIDE1LCA3fSwgeyAgICAgMzMsIDh9LCB7ICAgICAxOSwgN30sIFwKKyAgICB7ICAgICAzOSwgOH0sIHsgICAgIDIzLCA5fSwgeyAgICAgMTUsIDh9LCB7ICAgICAzOSwgOX0sIFwKKyAgICB7ICAgICAyMywgOH0sIHsgICAgIDQ3LDEwfSwgeyAgICAgMTUsIDl9LCB7ICAgICAzMSwgOH0sIFwKKyAgICB7ICAgICA2NywgOX0sIHsgICAgIDU1LDEwfSwgeyAgICAgMzEsIDl9LCB7ICAgICA2MywgOH0sIFwKKyAgICB7ICAgIDEyNywgN30sIHsgICAgMjU1LCA5fSwgeyAgICAgNzEsIDh9LCB7ICAgIDE0MywgN30sIFwKKyAgICB7ICAgIDI4NywgOX0sIHsgICAgIDc5LDEwfSwgeyAgICAgNDcsIDl9LCB7ICAgICA5NSwxMX0sIFwKKyAgICB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA5fSwgeyAgICAxMjcsIDh9LCB7ICAgIDI1NSwgOX0sIFwKKyAgICB7ICAgIDE0MywgOH0sIHsgICAgMjg3LDEwfSwgeyAgICAgNzksIDl9LCB7ICAgIDE1OSwgOH0sIFwKKyAgICB7ICAgIDMxOSwgOX0sIHsgICAgMTc1LCA4fSwgeyAgICAzNTEsIDd9LCB7ICAgIDcwMywxMH0sIFwKKyAgICB7ICAgICA5NSwgOX0sIHsgICAgMTkxLCA4fSwgeyAgICAzODMsIDl9LCB7ICAgIDIwNywxMH0sIFwKKyAgICB7ICAgIDExMSwxMX0sIHsgICAgIDYzLDEwfSwgeyAgICAxMjcsIDl9LCB7ICAgIDI1NSwxMH0sIFwKKyAgICB7ICAgIDE0MywgOX0sIHsgICAgMjg3LCA4fSwgeyAgICA1NzUsMTB9LCB7ICAgIDE1OSwgOX0sIFwKKyAgICB7ICAgIDMxOSwxMH0sIHsgICAgMTc1LCA5fSwgeyAgICAzNTEsIDh9LCB7ICAgIDcwMywxMX0sIFwKKyAgICB7ICAgICA5NSwxMH0sIHsgICAgMTkxLCA5fSwgeyAgICAzODMsMTB9LCB7ICAgIDIwNywgOX0sIFwKKyAgICB7ICAgIDQxNSwgOH0sIHsgICAgODMxLDEyfSwgeyAgICAgNjMsMTF9LCB7ICAgIDEyNywxMH0sIFwKKyAgICB7ICAgIDI1NSwgOX0sIHsgICAgNTExLDEwfSwgeyAgICAyNzEsIDl9LCB7ICAgIDU0MywxMH0sIFwKKyAgICB7ICAgIDI4NywgOX0sIHsgICAgNTc1LDExfSwgeyAgICAxNTksMTB9LCB7ICAgIDM1MSwgOX0sIFwKKyAgICB7ICAgIDcwMywgOH0sIHsgICAxNDA3LDExfSwgeyAgICAxOTEsMTB9LCB7ICAgIDQxNSwgOX0sIFwKKyAgICB7ICAgIDgzMSwxMX0sIHsgICAgMjIzLDEwfSwgeyAgICA0NDcsIDl9LCB7ICAgIDg5NSwxMn0sIFwKKyAgICB7ICAgIDEyNywxMX0sIHsgICAgMjU1LDEwfSwgeyAgICA1NDMsMTF9LCB7ICAgIDI4NywxMH0sIFwKKyAgICB7ICAgIDU3NSwxMX0sIHsgICAgMzUxLDEwfSwgeyAgICA3MDMsIDl9LCB7ICAgMTQwNywxMn0sIFwKKyAgICB7ICAgIDE5MSwxMX0sIHsgICAgNDE1LDEwfSwgeyAgICA4MzEsMTF9LCB7ICAgIDQ0NywxMH0sIFwKKyAgICB7ICAgIDg5NSwxM30sIHsgICAgMTI3LDEyfSwgeyAgICAyNTUsMTF9LCB7ICAgIDU0MywxMH0sIFwKKyAgICB7ICAgMTA4NywxMX0sIHsgICAgNTc1LDEyfSwgeyAgICAzMTksMTF9LCB7ICAgIDcwMywxMH0sIFwKKyAgICB7ICAgMTQwNywxMn0sIHsgICAgMzgzLDExfSwgeyAgICA4MzEsMTJ9LCB7ICAgIDQ0NywxMX0sIFwKKyAgICB7ICAgIDg5NSwxMH0sIHsgICAxNzkxLDExfSwgeyAgICA5NTksMTN9LCB7ICAgIDI1NSwxMn0sIFwKKyAgICB7ICAgIDUxMSwxMX0sIHsgICAxMDg3LDEyfSwgeyAgICA1NzUsMTF9LCB7ICAgMTIxNSwxMn0sIFwKKyAgICB7ICAgIDcwMywxMX0sIHsgICAxNDA3LDEzfSwgeyAgICAzODMsMTJ9LCB7ICAgIDg5NSwxMX0sIFwKKyAgICB7ICAgMTc5MSwxMn0sIHsgICAgOTU5LDE0fSwgeyAgICAyNTUsMTN9LCB7ICAgIDUxMSwxMn0sIFwKKyAgICB7ICAgMTIxNSwxM30sIHsgICAgNjM5LDEyfSwgeyAgIDE0MDcsMTN9LCB7ICAgIDg5NSwxMn0sIFwKKyAgICB7ICAgMTkxOSwxNH0sIHsgICAgNTExLDEzfSwgeyAgIDEwMjMsMTJ9LCB7ICAgMjA0NywxM30sIFwKKyAgICB7ICAgMTE1MSwxMn0sIHsgICAyMzAzLDEzfSwgeyAgIDE0MDcsMTR9LCB7ICAgIDc2NywxM30sIFwKKyAgICB7ICAgMTkxOSwxMH0sIHsgIDE1MzU5LDEyfSwgeyAgIDQwOTYsMTN9LCB7ICAgODE5MiwxNH0sIFwKKyAgICB7ICAxNjM4NCwxNX0sIHsgIDMyNzY4LDE2fSB9CisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzX1NJWkUgMTU0CisjZGVmaW5lIE1VTF9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAyNjg4CisKKyNkZWZpbmUgU1FSX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICAxODQgIC8qIGsgPSA1ICovCisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICAxODQsIDV9LCB7ICAgICAgNiwgNH0sIHsgICAgIDEzLCA1fSwgeyAgICAgMTMsIDZ9LCBcCisgICAgeyAgICAgIDcsIDV9LCB7ICAgICAxNSwgNn0sIHsgICAgIDEzLCA3fSwgeyAgICAgIDcsIDZ9LCBcCisgICAgeyAgICAgMTYsIDd9LCB7ICAgICAgOSwgNn0sIHsgICAgIDE5LCA3fSwgeyAgICAgMTEsIDZ9LCBcCisgICAgeyAgICAgMjMsIDd9LCB7ICAgICAxMywgOH0sIHsgICAgICA3LCA3fSwgeyAgICAgMTksIDh9LCBcCisgICAgeyAgICAgMTEsIDd9LCB7ICAgICAyNSwgOX0sIHsgICAgICA3LCA4fSwgeyAgICAgMTUsIDd9LCBcCisgICAgeyAgICAgMzEsIDh9LCB7ICAgICAxOSwgN30sIHsgICAgIDM5LCA4fSwgeyAgICAgMjcsIDl9LCBcCisgICAgeyAgICAgMTUsIDh9LCB7ICAgICAzOSwgOX0sIHsgICAgIDIzLDEwfSwgeyAgICAgMTUsIDl9LCBcCisgICAgeyAgICAgMzEsIDh9LCB7ICAgICA2MywgOX0sIHsgICAgIDM5LCA4fSwgeyAgICAgNzksIDl9LCBcCisgICAgeyAgICAgNDcsIDh9LCB7ICAgICA5NSwxMH0sIHsgICAgIDMxLCA5fSwgeyAgICAgNjMsIDh9LCBcCisgICAgeyAgICAxMjcsIDd9LCB7ICAgIDI1NSwgOX0sIHsgICAgIDcxLCA4fSwgeyAgICAxNDMsIDd9LCBcCisgICAgeyAgICAyODcsIDl9LCB7ICAgICA3OSwgOH0sIHsgICAgMTU5LDEwfSwgeyAgICAgNDcsIDl9LCBcCisgICAgeyAgICAgOTUsMTF9LCB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA5fSwgeyAgICAxMjcsIDh9LCBcCisgICAgeyAgICAyNTUsIDl9LCB7ICAgIDE0MywgOH0sIHsgICAgMjg3LCA3fSwgeyAgICA1NzUsMTB9LCBcCisgICAgeyAgICAgNzksIDl9LCB7ICAgIDE1OSwgOH0sIHsgICAgMzE5LCA5fSwgeyAgICAxNzUsIDh9LCBcCisgICAgeyAgICAzNTEsMTB9LCB7ICAgICA5NSwgOX0sIHsgICAgMTkxLCA4fSwgeyAgICAzODMsIDl9LCBcCisgICAgeyAgICAyMDcsMTB9LCB7ICAgIDExMSwxMX0sIHsgICAgIDYzLDEwfSwgeyAgICAxMjcsIDl9LCBcCisgICAgeyAgICAyNTUsMTB9LCB7ICAgIDE0MywgOX0sIHsgICAgMjg3LCA4fSwgeyAgICA1NzUsMTB9LCBcCisgICAgeyAgICAxNTksIDl9LCB7ICAgIDMxOSwxMH0sIHsgICAgMTc1LCA5fSwgeyAgICAzNTEsMTF9LCBcCisgICAgeyAgICAgOTUsMTB9LCB7ICAgIDE5MSwgOX0sIHsgICAgMzgzLDEwfSwgeyAgICAyMDcsIDl9LCBcCisgICAgeyAgICA0MTUsIDh9LCB7ICAgIDgzMSwxMH0sIHsgICAgMjIzLDEyfSwgeyAgICAgNjMsMTF9LCBcCisgICAgeyAgICAxMjcsMTB9LCB7ICAgIDI1NSwgOX0sIHsgICAgNTExLDEwfSwgeyAgICAyODcsIDl9LCBcCisgICAgeyAgICA1NzUsMTF9LCB7ICAgIDE1OSwxMH0sIHsgICAgMzUxLCA5fSwgeyAgICA3MDMsMTF9LCBcCisgICAgeyAgICAxOTEsMTB9LCB7ICAgIDQxNSwgOX0sIHsgICAgODMxLDExfSwgeyAgICAyMjMsMTB9LCBcCisgICAgeyAgICA0NDcsIDl9LCB7ICAgIDg5NSwxMn0sIHsgICAgMTI3LDExfSwgeyAgICAyNTUsMTB9LCBcCisgICAgeyAgICA1MTEsMTF9LCB7ICAgIDI4NywxMH0sIHsgICAgNTc1LDExfSwgeyAgICAzMTksMTB9LCBcCisgICAgeyAgICA2MzksMTF9LCB7ICAgIDM1MSwxMH0sIHsgICAgNzAzLCA5fSwgeyAgIDE0MDcsMTJ9LCBcCisgICAgeyAgICAxOTEsMTF9LCB7ICAgIDM4MywxMH0sIHsgICAgNzY3LDExfSwgeyAgICA0MTUsMTB9LCBcCisgICAgeyAgICA4MzEsMTF9LCB7ICAgIDQ0NywxMH0sIHsgICAgODk1LDEzfSwgeyAgICAxMjcsMTJ9LCBcCisgICAgeyAgICAyNTUsMTF9LCB7ICAgIDUxMSwxMH0sIHsgICAxMDIzLDExfSwgeyAgICA1NzUsMTJ9LCBcCisgICAgeyAgICAzMTksMTF9LCB7ICAgIDcwMywxMH0sIHsgICAxNDA3LDEyfSwgeyAgICAzODMsMTF9LCBcCisgICAgeyAgICA4MzEsMTJ9LCB7ICAgIDQ0NywxMX0sIHsgICAgODk1LDEwfSwgeyAgIDE3OTEsMTF9LCBcCisgICAgeyAgICA5NTksMTN9LCB7ICAgIDI1NSwxMn0sIHsgICAgNTExLDExfSwgeyAgIDEwMjMsMTJ9LCBcCisgICAgeyAgICA1NzUsMTF9LCB7ICAgMTIxNSwxMn0sIHsgICAgNzAzLDExfSwgeyAgIDE0MDcsMTN9LCBcCisgICAgeyAgICAzODMsMTJ9LCB7ICAgIDg5NSwxMX0sIHsgICAxNzkxLDEyfSwgeyAgICA5NTksMTR9LCBcCisgICAgeyAgICAyNTUsMTN9LCB7ICAgIDUxMSwxMn0sIHsgICAxMjE1LDEzfSwgeyAgICA2MzksMTJ9LCBcCisgICAgeyAgIDE0NzEsMTN9LCB7ICAgIDc2NywxMn0sIHsgICAxNTM1LDEzfSwgeyAgICA4OTUsMTJ9LCBcCisgICAgeyAgIDE5MTksMTR9LCB7ICAgIDUxMSwxM30sIHsgICAxMTUxLDEyfSwgeyAgIDI0MzEsMTN9LCBcCisgICAgeyAgIDE0MDcsMTR9LCB7ICAgIDc2NywxM30sIHsgICAxOTE5LDE1fSwgeyAgMzI3NjgsMTZ9IH0KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTNfU0laRSAxNTIKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDE3MjgKKworI2RlZmluZSBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDMzCisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgICA1MjQwCisKKyNkZWZpbmUgRENfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgRENfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAxMDgKKyNkZWZpbmUgRENfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMzUKKyNkZWZpbmUgRENfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgODgKKworI2RlZmluZSBJTlZfTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICA0MgorI2RlZmluZSBJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE0OQorI2RlZmluZSBJTlZfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDEyNQorCisjZGVmaW5lIEJJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTU2CisjZGVmaW5lIFJFRENfMV9UT19SRURDX05fVEhSRVNIT0xEICAgICAgICAgIDM5CisKKyNkZWZpbmUgTVVfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA4MDcKKyNkZWZpbmUgTVVfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICA4MDcKKyNkZWZpbmUgTVVQSV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgNjYKKyNkZWZpbmUgTVVfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICA2NjcKKyNkZWZpbmUgTVVfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA4MDcKKworI2RlZmluZSBNQVRSSVgyMl9TVFJBU1NFTl9USFJFU0hPTEQgICAgICAgICAxMQorI2RlZmluZSBIR0NEX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgICA4NworI2RlZmluZSBHQ0RfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDIzMworI2RlZmluZSBHQ0RFWFRfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE5OAorI2RlZmluZSBKQUNPQklfQkFTRV9NRVRIT0QgICAgICAgICAgICAgICAgICAgMQorCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgIDI4CisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgMzkwCisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgODE0CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi83NTAvbHNoaWZ0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzMyLzc1MC9sc2hpZnQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMWMxYTcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi83NTAvbHNoaWZ0LmFzbQpAQCAtMCwwICsxLDE1NSBAQAorZG5sICBQb3dlclBDIDc1MCBtcG5fbHNoaWZ0IC0tIG1wbiBsZWZ0IHNoaWZ0LgorCitkbmwgIENvcHlyaWdodCAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQyAgICAgICBjeWNsZXMvbGltYgorQyA3NTA6ICAgICAzLjAKK0MgNzQwMDogICAgMy4wCisKKworQyBtcF9saW1iX3QgbXBuX2xzaGlmdCAobXBfcHRyIGRzdCwgbXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUsCitDICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaGlmdCk7CitDCitDIFRoaXMgY29kZSBpcyB0aGUgc2FtZSBwZXItbGltYiBzcGVlZCBhcyBtcG4vcG93ZXJwYzMyL2xzaGlmdC5hc20sIGJ1dAorQyBzbWFsbGVyIGFuZCBzYXZpbmcgYWJvdXQgMzAgb3Igc28gY3ljbGVzIG9mIG92ZXJoZWFkLgorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2xzaGlmdCkKKworCUMgcjMJZHN0CisJQyByNAlzcmMKKwlDIHI1CXNpemUKKwlDIHI2CXNoaWZ0CisKKwltdGN0cglyNQkJQyBzaXplCisJc2x3aQlyNSwgcjUsIDIJQyA0KnNpemUKKworCXN1YmZpYwlyNywgcjYsIDMyCUMgMzItc2hpZnQKKwlhZGQJcjQsIHI0LCByNQlDICZzcmNbc2l6ZV0KKworCWFkZAlyNSwgcjMsIHI1CUMgJmRzdFtzaXplXQorCWx3eglyOCwgLTQocjQpCUMgc3JjW3NpemUtMV0KKwliZHoJTChvbmUpCisKKwlsd3p1CXI5LCAtOChyNCkJQyBzcmNbc2l6ZS0yXQorCisJc3J3CXIzLCByOCwgcjcJQyByZXR1cm4gdmFsdWUKKwlzbHcJcjgsIHI4LCByNglDIHNyY1tzaXplLTFdIDw8IHNoaWZ0CisJYmR6CUwodHdvKQorCisKK0wodG9wKToKKwlDIHIzCXJldHVybiB2YWx1ZQorCUMgcjQJc3JjLCBpbmNyZW1lbnRpbmcKKwlDIHI1CWRzdCwgaW5jcmVtZW50aW5nCisJQyByNglsc2hpZnQKKwlDIHI3CTMyLXNoaWZ0CisJQyByOAlzcmNbaSsxXSA8PCBzaGlmdAorCUMgcjkJc3JjW2ldCisJQyByMTAKKworCWx3enUJcjEwLCAtNChyNCkKKwlzcncJcjExLCByOSwgcjcKKworCW9yCXI4LCByOCwgcjExCisJc3R3dQlyOCwgLTQocjUpCisKKwlzbHcJcjgsIHI5LCByNgorCWJkeglMKG9kZCkKKworCUMgcjgJc3JjW2krMV0gPDwgc2hpZnQKKwlDIHI5CisJQyByMTAJc3JjW2ldCisKKwlsd3p1CXI5LCAtNChyNCkKKwlzcncJcjExLCByMTAsIHI3CisKKwlvcglyOCwgcjgsIHIxMQorCXN0d3UJcjgsIC00KHI1KQorCisJc2x3CXI4LCByMTAsIHI2CisJYmRueglMKHRvcCkKKworCitMKHR3byk6CisJQyByMwlyZXR1cm4gdmFsdWUKKwlDIHI0CisJQyByNQkmZHN0WzJdCisJQyByNglzaGlmdAorCUMgcjcJMzItc2hpZnQKKwlDIHI4CXNyY1sxXSA8PCBzaGlmdAorCUMgcjkJc3JjWzBdCisJQyByMTAKKworCXNydwlyMTEsIHI5LCByNworCXNsdwlyMTIsIHI5LCByNglDIHNyY1swXSA8PCBzaGlmdAorCisJb3IJcjgsIHI4LCByMTEKKwlzdHcJcjEyLCAtOChyNSkJQyBkc3RbMF0KKworCXN0dwlyOCwgLTQocjUpCUMgZHN0WzFdCisJYmxyCisKKworTChvZGQpOgorCUMgcjMJcmV0dXJuIHZhbHVlCisJQyByNAorCUMgcjUJJmRzdFsyXQorCUMgcjYJc2hpZnQKKwlDIHI3CTMyLXNoaWZ0CisJQyByOAlzcmNbMV0gPDwgc2hpZnQKKwlDIHI5CisJQyByMTAJc3JjWzBdCisKKwlzcncJcjExLCByMTAsIHI3CisJc2x3CXIxMiwgcjEwLCByNgorCisJb3IJcjgsIHI4LCByMTEKKwlzdHcJcjEyLCAtOChyNSkJQyBkc3RbMF0KKworCXN0dwlyOCwgLTQocjUpCUMgZHN0WzFdCisJYmxyCisKKworTChvbmUpOgorCUMgcjUJJmRzdFsxXQorCUMgcjYJc2hpZnQKKwlDIHI3CTMyLXNoaWZ0CisJQyByOAlzcmNbMF0KKworCXNydwlyMywgcjgsIHI3CUMgcmV0dXJuIHZhbHVlCisJc2x3CXI4LCByOCwgcjYJQyBzcmNbc2l6ZS0xXSA8PCBzaGlmdAorCisJc3R3CXI4LCAtNChyNSkJQyBkc3RbMF0KKwlibHIKKworRVBJTE9HVUUobXBuX2xzaGlmdCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzMyLzc1MC9yc2hpZnQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvNzUwL3JzaGlmdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgyNWZlZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzMyLzc1MC9yc2hpZnQuYXNtCkBAIC0wLDAgKzEsMTUzIEBACitkbmwgIFBvd2VyUEMgNzUwIG1wbl9yc2hpZnQgLS0gbXBuIHJpZ2h0IHNoaWZ0LgorCitkbmwgIENvcHlyaWdodCAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQyAgICAgICBjeWNsZXMvbGltYgorQyA3NTA6ICAgICAzLjAKK0MgNzQwMDogICAgMy4wCisKKworQyBtcF9saW1iX3QgbXBuX3JzaGlmdCAobXBfcHRyIGRzdCwgbXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUsCitDICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaGlmdCk7CitDCitDIFRoaXMgY29kZSBpcyB0aGUgc2FtZSBwZXItbGltYiBzcGVlZCBhcyBtcG4vcG93ZXJwYzMyL3JzaGlmdC5hc20sIGJ1dAorQyBzbWFsbGVyIGFuZCBzYXZpbmcgYWJvdXQgMzAgb3Igc28gY3ljbGVzIG9mIG92ZXJoZWFkLgorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX3JzaGlmdCkKKworCUMgcjMJZHN0CisJQyByNAlzcmMKKwlDIHI1CXNpemUKKwlDIHI2CXNoaWZ0CisKKwltdGN0cglyNQkJQyBzaXplCisJbHd6CXI4LCAwKHI0KQlDIHNyY1swXQorCisJc3ViZmljCXI3LCByNiwgMzIJQyAzMi1zaGlmdAorCWFkZGkJcjUsIHIzLCAtNAlDIGRzdC00CisKKwlzbHcJcjMsIHI4LCByNwlDIHJldHVybiB2YWx1ZQorCWJkeglMKG9uZSkKKworCWx3enUJcjksIDQocjQpCUMgc3JjWzFdCisJc3J3CXI4LCByOCwgcjYJQyBzcmNbMF0gPj4gc2hpZnQKKwliZHoJTCh0d28pCisKKworTCh0b3ApOgorCUMgcjMJcmV0dXJuIHZhbHVlCisJQyByNAlzcmMsIGluY3JlbWVudGluZworCUMgcjUJZHN0LCBpbmNyZW1lbnRpbmcKKwlDIHI2CXNoaWZ0CisJQyByNwkzMi1zaGlmdAorCUMgcjgJc3JjW2ktMV0gPj4gc2hpZnQKKwlDIHI5CXNyY1tpXQorCUMgcjEwCisKKwlsd3p1CXIxMCwgNChyNCkKKwlzbHcJcjExLCByOSwgcjcKKworCW9yCXI4LCByOCwgcjExCisJc3R3dQlyOCwgNChyNSkKKworCXNydwlyOCwgcjksIHI2CisJYmR6CUwob2RkKQorCisJQyByOAlzcmNbaS0xXSA+PiBzaGlmdAorCUMgcjkKKwlDIHIxMAlzcmNbaV0KKworCWx3enUJcjksIDQocjQpCisJc2x3CXIxMSwgcjEwLCByNworCisJb3IJcjgsIHI4LCByMTEKKwlzdHd1CXI4LCA0KHI1KQorCisJc3J3CXI4LCByMTAsIHI2CisJYmRueglMKHRvcCkKKworCitMKHR3byk6CisJQyByMwlyZXR1cm4gdmFsdWUKKwlDIHI0CisJQyByNQkmZHN0W3NpemUtMl0KKwlDIHI2CXNoaWZ0CisJQyByNwkzMi1zaGlmdAorCUMgcjgJc3JjW3NpemUtMl0gPj4gc2hpZnQKKwlDIHI5CXNyY1tzaXplLTFdCisJQyByMTAKKworCXNsdwlyMTEsIHI5LCByNworCXNydwlyMTIsIHI5LCByNglDIHNyY1tzaXplLTFdID4+IHNoaWZ0CisKKwlvcglyOCwgcjgsIHIxMQorCXN0dwlyMTIsIDgocjUpCUMgZHN0W3NpemUtMV0KKworCXN0dwlyOCwgNChyNSkJQyBkc3Rbc2l6ZS0yXQorCWJscgorCisKK0wob2RkKToKKwlDIHIzCXJldHVybiB2YWx1ZQorCUMgcjQKKwlDIHI1CSZkc3Rbc2l6ZS0yXQorCUMgcjYJc2hpZnQKKwlDIHI3CTMyLXNoaWZ0CisJQyByOAlzcmNbc2l6ZS0yXSA+PiBzaGlmdAorCUMgcjkKKwlDIHIxMAlzcmNbc2l6ZS0xXQorCisJc2x3CXIxMSwgcjEwLCByNworCXNydwlyMTIsIHIxMCwgcjYKKworCW9yCXI4LCByOCwgcjExCisJc3R3CXIxMiwgOChyNSkJQyBkc3Rbc2l6ZS0xXQorCisJc3R3CXI4LCA0KHI1KQlDIGRzdFtzaXplLTJdCisJYmxyCisKKworTChvbmUpOgorCUMgcjMJcmV0dXJuIHZhbHVlCisJQyByNAorCUMgcjUJZHN0LTQKKwlDIHI2CXNoaWZ0CisJQyByNworCUMgcjgJc3JjWzBdCisKKwlzcncJcjgsIHI4LCByNgorCisJc3R3CXI4LCA0KHI1KQlDIGRzdFswXQorCWJscgorCitFUElMT0dVRShtcG5fcnNoaWZ0KQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvUkVBRE1FIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4N2U3OGIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi9SRUFETUUKQEAgLTAsMCArMSwxODAgQEAKK0NvcHlyaWdodCAyMDAyLCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworCisKKworICAgICAgICAgICAgICAgICAgICBQT1dFUlBDIDMyLUJJVCBNUE4gU1VCUk9VVElORVMKKworCitUaGlzIGRpcmVjdG9yeSBjb250YWlucyBtcG4gZnVuY3Rpb25zIGZvciB2YXJpb3VzIDMyLWJpdCBQb3dlclBDIGNoaXBzLgorCisKK0NPREUgT1JHQU5JWkFUSU9OCisKKwlkaXJlY3RvcnkJICB1c2VkIGZvcgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCXBvd2VycGMgICAgICAgICAgIGdlbmVyaWMsIDYwNCwgNjA0ZSwgNzQ0eCwgNzQ1eAorCXBvd2VycGMvNzUwICAgICAgIDc0MCwgNzUwLCA3NDAwLCA3NDEwCisKKworVGhlIHRvcC1sZXZlbCBwb3dlcnBjIGRpcmVjdG9yeSBpcyBjdXJyZW50bHkgbW9zdGx5IGFpbWVkIGF0IDYwNC82MDRlIGJ1dAorc2hvdWxkIGJlIHJlYXNvbmFibGUgb24gYWxsIHBvd2VycGNzLgorCisKKworU1RBVFVTCisKK1RoZSBjb2RlIGlzIHF1aXRlIHdlbGwgb3B0aW1pemVkIGZvciB0aGUgNjA0ZSwgb3RoZXIgY2hpcHMgaGF2ZSBoYWQgbGVzcworYXR0ZW50aW9uLgorCitBbHRpdmVjIFNJTUQgYXZhaWxhYmxlIGluIDc0eHggbWlnaHQgaG9sZCBzb21lIHByb21pc2UsIGJ1dCB1bmZvcnR1bmF0ZWx5CitHTVAgb25seSBndWFyYW50ZWVzIDMyLWJpdCBkYXRhIGFsaWdubWVudCwgc28gdGhlcmUncyBsb3RzIG9mIGZpZGRsaW5nCithcm91bmQgd2l0aCBwYXJ0aWFsIG9wZXJhdGlvbnMgYXQgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgbGltYiB2ZWN0b3JzLiAgQQorMTI4LWJpdCBsaW1iIHdvdWxkIGJlIGEgbm92ZWwgaWRlYSwgYnV0IGlzIHVubGlrZWx5IHRvIGJlIHByYWN0aWNhbCwgc2luY2UKK2l0IHdvdWxkIGhhdmUgdG8gd29yayB3aXRoIG9yZGluYXJ5ICssIC0sICogZXRjIGluIHRoZSBDIGNvZGUuCisKK0Fsc28sIEFsdGl2ZWMgaXNuJ3QgdmVyeSB3ZWxsIHN1aXRlZCBmb3IgdGhlIEdNUCBtdWx0aXBsaWNhdGlvbiBuZWVkcy4KK1VzaW5nIGZsb2F0aW5nLXBvaW50IGJhc2VkIG11bHRpcGxpY2F0aW9uIGhhcyBtdWNoIGJldHRlciBiZXR0ZXIgcGVyZm9ybWFuY2UKK3BvdGVudGlhbCBmb3IgYWxsIGN1cnJlbnQgcG93ZXJwY3MsIGJvdGggdGhlIG9uZXMgd2l0aCBzbG93IGludGVnZXIgbXVsdGlwbHkKK3VuaXRzICg2MDMsIDc0MCwgNzUwLCA3NDAwLCA3NDEwKSBhbmQgdGhvc2Ugd2l0aCBmYXN0ICg2MDQsIDYwNGUsIDc0NHgsCis3NDV4KS4gIFRoaXMgaXMgYmVjYXVzZSBhbGwgcG93ZXJwY3MgZG8gc29tZSBsZXZlbCBvZiBwaXBlbGluaW5nIGluIHRoZSBGUFU6CisKKzYwMyBhbmQgNzUwIGNhbiBzdXN0YWluIG9uZSBmbWFkZCBldmVyeSAybmQgY3ljbGUuCis2MDQgYW5kIDYwNGUgY2FuIHN1c3RhaW4gb25lIGZtYWRkIHBlciBjeWNsZS4KKzc0MDAgYW5kIDc0MTAgY2FuIHN1c3RhaW4gMyBmbWFkZCBpbiA0IGN5Y2xlcy4KKzc0NHggYW5kIDc0NXggY2FuIHN1c3RhaW4gNCBmbWFkZCBpbiA1IGN5Y2xlcy4KKworCisKK1JFR0lTVEVSIE5BTUVTCisKK1RoZSBub3JtYWwgcG93ZXJwYyBjb252ZW50aW9uIGlzIHRvIGdpdmUgcmVnaXN0ZXJzIGFzIHBsYWluIG51bWJlcnMsIGxpa2UKKyJtdGN0ciA2IiwgYnV0IG9uIEFwcGxlIE1hY09TIFggKHBvd2VycGMqLSotcmhhcHNvZHkqIGFuZAorcG93ZXJwYyotKi1kYXJ3aW4qKSB0aGUgYXNzZW1ibGVyIGRlbWFuZHMgYW4gInIiIGxpa2UgIm10Y3RyIHI2Ii4gIE5vdGUKK2hvd2V2ZXIgd2hlbiByZWdpc3RlciAwIGluIGFuIGluc3RydWN0aW9uIG1lYW5zIGEgbGl0ZXJhbCB6ZXJvIHRoZSAiciIgaXMKK29taXR0ZWQsIGZvciBpbnN0YW5jZSAibHd6eCByNiwwLHI3Ii4KKworVGhlIEdNUCBjb2RlIHVzZXMgdGhlICJyIiBmb3JtcywgcG93ZXJwYy1kZWZzLm00IHRyYW5zZm9ybXMgdGhlbSB0byBwbGFpbgorbnVtYmVycyBhY2NvcmRpbmcgdG8gd2hhdCBHTVBfQVNNX1BPV0VSUENfUl9SRUdJU1RFUlMgZmluZHMgaXMgbmVlZGVkLgorKE5vdGUgdGhhdCB0aGlzIHN0eWxlIGlzbid0IGZ1bGx5IGdlbmVyYWwsIGFzIHRoZSBpZGVudGlmaWVyIHI0IGFuZCB0aGUKK3JlZ2lzdGVyIHI0IHdpbGwgbm90IGJlIGRpc3Rpbmd1aXNoYWJsZSBvbiBzb21lIHN5c3RlbXMuICBIb3dldmVyLCB0aGlzIGlzCitub3QgYSBwcm9ibGVtIGZvciB0aGUgbGltaXRlZCBHTVAgYXNzZW1ibHkgdXNhZ2UuKQorCisKKworR0xPQkFMIFJFRkVSRU5DRVMKKworTGludXggbm9uLVBJQworCWxpcwk5LCBfX2dtcF9iaW52ZXJ0X2xpbWJfdGFibGVAaGEKKwlybHdpbm0JMTEsIDUsIDMxLCAyNSwgMzEKKwlsYQk5LCBfX2dtcF9iaW52ZXJ0X2xpbWJfdGFibGVAbCg5KQorCWxiengJMTEsIDksIDExCisKK0xpbnV4IFBJQyAoRklYTUUpCisuTENMMDoKKwkubG9uZyAuTENUT0MxLS5MQ0YwCisJYmNsCTIwLCAzMSwgLkxDRjAKKy5MQ0YwOgorCW1mbHIJMzAKKwlsd3oJNywgLkxDTDAtLkxDRjAoMzApCisJYWRkCTMwLCA3LCAzMAorCWx3egkxMSwgLkxDMC0uTENUT0MxKDMwKQorCXJsd2lubQkzLCA1LCAzMSwgMjUsIDMxCisJbGJ6eAk3LCAxMSwgMworCitBSVggKGFsd2F5cyBQSUMpCitMQy4uMDoKKwkudGMgX19nbXBfYmludmVydF9saW1iX3RhYmxlW1RDXSxfX2dtcF9iaW52ZXJ0X2xpbWJfdGFibGVbUlddCisJbHd6CTksIExDLi4wKDIpCisJcmx3aW5tCTAsIDUsIDMxLCAyNSwgMzEKKwlsYnp4CTAsIDksIDAKKworRGFyd2luIChub24tUElDKQorCWxpcwlyMiwgaGExNihfX19nbXBfYmludmVydF9saW1iX3RhYmxlKQorCXJsd2lubQlyOSwgcjUsIDMxLCAyNSwgMzEKKwlsYQlyMiwgbG8xNihfX19nbXBfYmludmVydF9saW1iX3RhYmxlKShyMikKKwlsYnp4CXIwLCByMiwgcjkKK0RhcndpbiAoUElDKQorCW1mbHIJcjAKKwliY2wJMjAsIDMxLCBMMDAwMSRwYgorTDAwMDEkcGI6CisJbWZscglyNworCW10bHIJcjAKKwlhZGRpcwlyMiwgcjcsIGhhMTYoTF9fX2dtcF9iaW52ZXJ0X2xpbWJfdGFibGUkbm9uX2xhenlfcHRyLUwwMDAxJHBiKQorCXJsd2lubQlyOSwgcjUsIDMxLCAyNSwgMzEKKwlsd3oJcjIsIGxvMTYoTF9fX2dtcF9iaW52ZXJ0X2xpbWJfdGFibGUkbm9uX2xhenlfcHRyLUwwMDAxJHBiKShyMikKKwlsYnp4CXIwLCByMiwgcjkKKy0tLS0tLQorCS5ub25fbGF6eV9zeW1ib2xfcG9pbnRlcgorTF9fX2dtcF9iaW52ZXJ0X2xpbWJfdGFibGUkbm9uX2xhenlfcHRyOgorCS5pbmRpcmVjdF9zeW1ib2wgX19fZ21wX2JpbnZlcnRfbGltYl90YWJsZQorCS5sb25nCTAKKwkuc3Vic2VjdGlvbnNfdmlhX3N5bWJvbHMKKworCitGb3IgR05VL0xpbnV4IGFuZCBEYXJ3aW4sIHdlIG1pZ2h0IHdhbnQgdG8gZHVwbGljYXRlIF9fZ21wX2JpbnZlcnRfbGltYl90YWJsZQoraW50byB0aGUgdGV4dCBzZWN0aW9uIGluIHRoaXMgZmlsZS4gIFdlIHNob3VsZCB0aHVzIGJlIGFibGUgdG8gcmVhY2ggaXQgbGlrZQordGhpczoKKworCWJscglMMAorTDA6CW1mbHIJcjIKKwlybHdpbm0JcjksIHI1LCAzMSwgMjUsIDMxCisJYWRkaQlyOSwgcjksIGxvMTYobG9jYWxfYmludmVydF90YWJsZS1MMCkKKwlsYnp4CXIwLCByMiwgcjkKKworCisKK1JFRkVSRU5DRVMKKworUG93ZXJQQyBNaWNyb3Byb2Nlc3NvciBGYW1pbHk6IFRoZSBQcm9ncmFtbWluZyBFbnZpcm9ubWVudHMgZm9yIDMyLWJpdAorTWljcm9wcm9jZXNzb3JzLCBJQk0gZG9jdW1lbnQgRzUyMi0wMjkwLTAxLCAyMDAwLgorCitQb3dlclBDIDYwNGUgUklTQyBNaWNyb3Byb2Nlc3NvciBVc2VyJ3MgTWFudWFsIHdpdGggU3VwcGxlbWVudCBmb3IgUG93ZXJQQworNjA0IE1pY3JvcHJvY2Vzc29yLCBJQk0gZG9jdW1lbnQgRzU1Mi0wMzMwLTAwLCBGcmVlc2NhbGUgZG9jdW1lbnQKK01QQzYwNEVVTS9BRCwgMy8xOTk4LgorCitNUEM3NDEwL01QQzc0MDAgUklTQyBNaWNyb3Byb2Nlc3NvciBVc2VyJ3MgTWFudWFsLCBGcmVlc2NhbGUgZG9jdW1lbnQKK01QQzc0MDBVTS9ELCByZXYgMSwgMTEvMjAwMi4KKworTVBDNzQ1MCBSSVNDIE1pY3JvcHJvY2Vzc29yIEZhbWlseSBSZWZlcmVuY2UgTWFudWFsLCBGcmVlc2NhbGUgZG9jdW1lbnQKK01QQzc0NTBVTSwgcmV2IDUsIDEvMjAwNS4KKworVGhlIGFib3ZlIGFyZSBhdmFpbGFibGUgb25saW5lIGZyb20KKworCWh0dHA6Ly93d3cuaWJtLmNvbS9jaGlwcy90ZWNobGliL3RlY2hsaWIubnNmL3Byb2R1Y3RmYW1pbGllcy9Qb3dlclBDCisJaHR0cDovL3d3dy5mcmVlc2NhbGUuY29tL1Bvd2VyUEMKKworCisKKy0tLS0tLS0tLS0tLS0tLS0KK0xvY2FsIHZhcmlhYmxlczoKK21vZGU6IHRleHQKK2ZpbGwtY29sdW1uOiA3NgorRW5kOgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvYWRkbHNoMV9uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzMyL2FkZGxzaDFfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE2NDVjMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzMyL2FkZGxzaDFfbi5hc20KQEAgLTAsMCArMSwxMDAgQEAKK2RubCAgUG93ZXJQQy0zMiBtcG5fYWRkbHNoMV9uIC0tIHJwW10gPSB1cFtdICsgKHZwW10gPDwgMSkKKworZG5sICBDb3B5cmlnaHQgMjAwMywgMjAwNSwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgICAgICAgIGN5Y2xlcy9saW1iCitDIDYwM2U6ICAgICAgICAgICAgPworQyA2MDRlOiAgICAgICAgICAgIDQuMAorQyA3NXggKEczKTogICAgICAgIDUuMAorQyA3NDAwLDc0MTAgKEc0KTogIDUuMAorQyA3NDR4LDc0NXggKEc0Kyk6IDUuMAorQyBwb3dlcjQvcHBjOTcwOiAgIDQuMjUKK0MgcG93ZXI1OiAgICAgICAgICA1LjAKKworQyBJTlBVVCBQQVJBTUVURVJTCitDIHJwCXIzCitDIHVwCXI0CitDIHZwCXI1CitDIG4JcjYKKworZGVmaW5lKGBycCcsYHIzJykKK2RlZmluZShgdXAnLGByNCcpCitkZWZpbmUoYHZwJyxgcjUnKQorCitkZWZpbmUoYHMwJyxgcjYnKQorZGVmaW5lKGBzMScsYHI3JykKK2RlZmluZShgdTAnLGByOCcpCitkZWZpbmUoYHYwJyxgcjEwJykKK2RlZmluZShgdjEnLGByMTEnKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2FkZGxzaDFfbikKKwltdGN0cglyNgkJQyBjb3B5IG4gaW4gY3RyCisJYWRkaWMJcjMxLCByMzEsIDAJQyBjbGVhciBjeQorCisJbHd6CXYwLCAwKHZwKQlDIGxvYWQgdiBsaW1iCisJbHd6CXUwLCAwKHVwKQlDIGxvYWQgdSBsaW1iCisJYWRkaQl1cCwgdXAsIC00CUMgdXBkYXRlIHVwCisJYWRkaQlycCwgcnAsIC00CUMgdXBkYXRlIHJwCisJc2x3aQlzMSwgdjAsIDEKKwliZHoJTChlbmQpCQlDIElmIGRvbmUsIHNraXAgbG9vcAorCitMKGxvb3ApOgorCWx3egl2MSwgNCh2cCkJQyBsb2FkIHYgbGltYgorCWFkZGUJczEsIHMxLCB1MAlDIGFkZCBsaW1icyB3aXRoIGN5LCBzZXQgY3kKKwlzcndpCXMwLCB2MCwgMzEJQyBzaGlmdCBkb3duIHByZXZpb3VzIHYgbGltYgorCXN0dwlzMSwgNChycCkJQyBzdG9yZSByZXN1bHQgbGltYgorCWx3enUJdTAsIDgodXApCUMgbG9hZCB1IGxpbWIgYW5kIHVwZGF0ZSB1cAorCXJsd2ltaQlzMCwgdjEsIDEsIDAsMzAJQyBsZWZ0IHNoaWZ0IHYgbGltYiBhbmQgbWVyZ2Ugd2l0aCBwcmV2IHYgbGltYgorCisJYmR6CUwoZXhpdCkJCUMgZGVjcmVtZW50IGN0ciBhbmQgZXhpdCBpZiBkb25lCisKKwlsd3p1CXYwLCA4KHZwKQlDIGxvYWQgdiBsaW1iIGFuZCB1cGRhdGUgdnAKKwlhZGRlCXMwLCBzMCwgdTAJQyBhZGQgbGltYnMgd2l0aCBjeSwgc2V0IGN5CisJc3J3aQlzMSwgdjEsIDMxCUMgc2hpZnQgZG93biBwcmV2aW91cyB2IGxpbWIKKwlzdHd1CXMwLCA4KHJwKQlDIHN0b3JlIHJlc3VsdCBsaW1iIGFuZCB1cGRhdGUgcnAKKwlsd3oJdTAsIDQodXApCUMgbG9hZCB1IGxpbWIKKwlybHdpbWkJczEsIHYwLCAxLCAwLDMwCUMgbGVmdCBzaGlmdCB2IGxpbWIgYW5kIG1lcmdlIHdpdGggcHJldiB2IGxpbWIKKworCWJkbnoJTChsb29wKQkJQyBkZWNyZW1lbnQgY3RyIGFuZCBsb29wIGJhY2sKKworTChlbmQpOglhZGRlCXI3LCBzMSwgdTAKKwlzcndpCXI0LCB2MCwgMzEKKwlzdHcJcjcsIDQocnApCUMgc3RvcmUgbGFzdCByZXN1bHQgbGltYgorCWFkZHplCXIzLCByNAorCWJscgorTChleGl0KToKKwlhZGRlCXI3LCBzMCwgdTAKKwlzcndpCXI0LCB2MSwgMzEKKwlzdHcJcjcsIDgocnApCUMgc3RvcmUgbGFzdCByZXN1bHQgbGltYgorCWFkZHplCXIzLCByNAorCWJscgorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvYWRkbXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvYWRkbXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NDg2ZGYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi9hZGRtdWxfMS5hc20KQEAgLTAsMCArMSwxNTkgQEAKK2RubCAgUG93ZXJQQy0zMiBtcG5fYWRkbXVsXzEgLS0gTXVsdGlwbHkgYSBsaW1iIHZlY3RvciB3aXRoIGEgbGltYiBhbmQgYWRkIHRoZQorZG5sICByZXN1bHQgdG8gYSBzZWNvbmQgbGltYiB2ZWN0b3IuCisKK2RubCAgQ29weXJpZ2h0IDE5OTUsIDE5OTcsIDE5OTgsIDIwMDAtMjAwMywgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgICAgICAgIGN5Y2xlcy9saW1iCitDIDYwM2U6ICAgICAgICAgICAgPworQyA2MDRlOiAgICAgICAgICAgIDYuNzUKK0MgNzV4IChHMyk6ICAgICAgICA4LjctMTQuMworQyA3NDAwLDc0MTAgKEc0KTogIDguNy0xNC4zCitDIDc0NHgsNzQ1eCAoRzQrKTogOS41CitDIHBvd2VyNC9wcGM5NzA6ICAgNi4yNQorQyBwb3dlcjU6ICAgICAgICAgIDYuMjUKKworQyBJTlBVVCBQQVJBTUVURVJTCitDIHJwCXIzCitDIHVwCXI0CitDIG4JcjUKK0MgdmwJcjYKKworQyBUaGlzIGlzIG9wdGltaXplZCBmb3IgdGhlIFBQQzYwNC4gIEl0IGhhcyBub3QgYmVlbiB0dW5lZCBmb3Igb3RoZXIKK0MgUG93ZXJQQyBwcm9jZXNzb3JzLgorQworQyBMb29wIEFuYWx5c2lzIGZvciB0aGUgNjA0OgorQyAxMiBtZW0gaW5zbgorQyA4IHNlcmlhbGl6aW5nIGluc24KK0MgOCBpbnQgbXVsdGlwbHkKK0MgMjUgaW50IHJlZyB3cml0ZQorQyA5IGludCBvcHMgKDggb2Ygd2hpY2ggc2VyaWFsaXplKQorQworQyBUaGUgbXVsdGlwbHkgaW5zbnMgbmVlZCAxNiBjeWNsZXMvNGxpbWIuCitDIFRoZSBpbnRlZ2VyIHJlZ2lzdGVyIHdyaXRlcyB3aWxsIG5lZWQgMTMgY3ljbGVzLzRsaW1iLgorQyBBbGwtaW4tYWxsLCBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gZ2V0IHRvIDQgb3IgNSBjeWNsZXMvbGltYiBvbiBQUEM2MDQsCitDIGJ1dCB0aGF0IHdpbGwgcmVxdWlyZSBzb21lIGNsZXZlciBGUE5PUFMgYW5kIEJOT1BTIGZvciBleGFjdAorQyBpc3N1ZSBjb250cm9sLgorCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fYWRkbXVsXzEpCisJY21wd2kJY3IwLHI1LDkJQyBtb3JlIHRoYW4gOSBsaW1icz8KKwliZ3QJY3IwLEwoYmlnKQlDIGJyYW5jaCBpZiBtb3JlIHRoYW4gOSBsaW1icworCisJbXRjdHIJcjUKKwlsd3oJcjAsMChyNCkKKwltdWxsdwlyNyxyMCxyNgorCW11bGh3dQlyMTAscjAscjYKKwlsd3oJcjksMChyMykKKwlhZGRjCXI4LHI3LHI5CisJYWRkaQlyMyxyMywtNAorCWJkeglMKGVuZCkKK0wobG9vcCk6CisJbHd6dQlyMCw0KHI0KQorCXN0d3UJcjgsNChyMykKKwltdWxsdwlyOCxyMCxyNgorCWFkZGUJcjcscjgscjEwCisJbXVsaHd1CXIxMCxyMCxyNgorCWx3eglyOSw0KHIzKQorCWFkZHplCXIxMCxyMTAKKwlhZGRjCXI4LHI3LHI5CisJYmRueglMKGxvb3ApCitMKGVuZCk6CXN0dwlyOCw0KHIzKQorCWFkZHplCXIzLHIxMAorCWJscgorCitMKGJpZyk6CXN0d3UJcjEsLTE2KHIxKQorCWFkZGkJcjUscjUsLTEKKwlzdHcJcjMwLDgocjEpCisJc3J3aQlyMCxyNSwyCisJc3R3CXIzMSwxMihyMSkKKwltdGN0cglyMAorCisJbHd6CXI3LDAocjQpCisJbXVsbHcJcjgscjcscjYKKwltdWxod3UJcjAscjcscjYKKwlsd3oJcjcsMChyMykKKwlhZGRjCXI4LHI4LHI3CisJc3R3CXI4LDAocjMpCisKK0wobG9vcFUpOgorCWx3eglyNyw0KHI0KQorCWx3eglyMTIsOChyNCkKKwlsd3oJcjMwLDEyKHI0KQorCWx3enUJcjMxLDE2KHI0KQorCW11bGx3CXI4LHI3LHI2CisJbXVsbHcJcjkscjEyLHI2CisJbXVsbHcJcjEwLHIzMCxyNgorCW11bGx3CXIxMSxyMzEscjYKKwlhZGRlCXI4LHI4LHIwCUMgYWRkIGN5X2xpbWIKKwltdWxod3UJcjAscjcscjYKKwlsd3oJcjcsNChyMykKKwlhZGRlCXI5LHI5LHIwCisJbXVsaHd1CXIwLHIxMixyNgorCWx3eglyMTIsOChyMykKKwlhZGRlCXIxMCxyMTAscjAKKwltdWxod3UJcjAscjMwLHI2CisJbHd6CXIzMCwxMihyMykKKwlhZGRlCXIxMSxyMTEscjAKKwltdWxod3UJcjAscjMxLHI2CisJbHd6CXIzMSwxNihyMykKKwlhZGR6ZQlyMCxyMAkJQyBuZXcgY3lfbGltYgorCWFkZGMJcjgscjgscjcKKwlzdHcJcjgsNChyMykKKwlhZGRlCXI5LHI5LHIxMgorCXN0dwlyOSw4KHIzKQorCWFkZGUJcjEwLHIxMCxyMzAKKwlzdHcJcjEwLDEyKHIzKQorCWFkZGUJcjExLHIxMSxyMzEKKwlzdHd1CXIxMSwxNihyMykKKwliZG56CUwobG9vcFUpCisKKwlhbmRpLglyMzEscjUsMworCW10Y3RyCXIzMQorCWJlcQljcjAsTChlbmR4KQorCitMKGxvb3BFKToKKwlsd3p1CXI3LDQocjQpCisJbXVsbHcJcjgscjcscjYKKwlhZGRlCXI4LHI4LHIwCUMgYWRkIGN5X2xpbWIKKwltdWxod3UJcjAscjcscjYKKwlsd3oJcjcsNChyMykKKwlhZGR6ZQlyMCxyMAkJQyBuZXcgY3lfbGltYgorCWFkZGMJcjgscjgscjcKKwlzdHd1CXI4LDQocjMpCisJYmRueglMKGxvb3BFKQorTChlbmR4KToKKwlhZGR6ZQlyMyxyMAorCWx3eglyMzAsOChyMSkKKwlsd3oJcjMxLDEyKHIxKQorCWFkZGkJcjEscjEsMTYKKwlibHIKK0VQSUxPR1VFKG1wbl9hZGRtdWxfMSkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzMyL2FpeC5tNCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzMyL2FpeC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGUyMDIwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvYWl4Lm00CkBAIC0wLDAgKzEsODIgQEAKK2RpdmVydCgtMSkKK2RubCAgbTQgbWFjcm9zIGZvciBBSVggMzItYml0IGFzc2VtYmx5LgorCitkbmwgIENvcHlyaWdodCAyMDAwLTIwMDIsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworZGVmaW5lKGBBU01fU1RBUlQnLAorYAkudG9jJykKKworZG5sICBDYWxsZWQ6IFBST0xPR1VFX2NwdShHU1lNX1BSRUZJWGAnZm9vKQorZG5sICAgICAgICAgIEVQSUxPR1VFX2NwdShHU1lNX1BSRUZJWGAnZm9vKQorZG5sCitkbmwgIERvbid0IHdhbnQgRUxGIHN0eWxlIC5zaXplIGluIHRoZSBlcGlsb2d1ZS4KKworZGVmaW5lKGBQUk9MT0dVRV9jcHUnLAorbTRfYXNzZXJ0X251bWFyZ3MoMSkKKwlgCisJLmdsb2JsCSQxCisJLmdsb2JsCS4kMQorCS5jc2VjdAlbRFNdLCAyCiskMToKKwkubG9uZwkuJDEsIFRPQ1t0YzBdLCAwCisJLmNzZWN0CVtQUl0KKwkuYWxpZ24JMgorLiQxOicpCisKK2RlZmluZShgRVBJTE9HVUVfY3B1JywKK200X2Fzc2VydF9udW1hcmdzKDEpCitgJykKKworZGVmaW5lKGBUT0NfRU5UUlknLCBgJykKKworZGVmaW5lKGBMRUEnLAorbTRfYXNzZXJ0X251bWFyZ3MoMikKK2BkZWZpbmUoYFRPQ19FTlRSWScsCitgCS50b2MKK3RjJDI6CisJLnRjCSQyW1RDXSwgJDInKScKK2AJbHd6CSQxLCB0YyQyKDIpJykKKworZGVmaW5lKGBFWFRFUk4nLAorbTRfYXNzZXJ0X251bWFyZ3MoMSkKK2AJLmdsb2JsCSQxJykKKworZGVmaW5lKGBERUZfT0JKRUNUJywKK200X2Fzc2VydF9udW1hcmdzX3JhbmdlKDEsMikKK2AJLmNzZWN0CVtST10sIDMKKwlBTElHTihpZmVsc2UoJCMsMSwyLCQyKSkKKyQxOgorJykKKworZGVmaW5lKGBFTkRfT0JKRUNUJywKK200X2Fzc2VydF9udW1hcmdzKDEpKQorCitkZWZpbmUoYEFTTV9FTkQnLCBgVE9DX0VOVFJZJykKKworZGl2ZXJ0CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi9hb3JzX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvYW9yc19uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWVjZTA5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvYW9yc19uLmFzbQpAQCAtMCwwICsxLDE1NyBAQAorZG5sICBQb3dlclBDLTMyIG1wbl9hZGRfbiBhbmQgbXBuX3N1Yl9uLgorCitkbmwgIENvcHlyaWdodCAyMDAyLCAyMDA1LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICAgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgNjAzZTogICAgICAgICAgICAgICAgICA/CitDIDYwNGU6ICAgICAgICAgICAgICAgICAgPwkJb2xkOiAzLjI1CitDIDc1eCAoRzMpOiAgICAgICAgICAgICAgPwkJb2xkOiAzLjUKK0MgNzQwMCw3NDEwIChHNCk6ICAgICAgICAzLjI1CitDIDc0NHgsNzQ1eCAoRzQrKTogICAgICAgNAorQyBQT1dFUjMvUFBDNjMwICAgICAgICAgIDIKK0MgUE9XRVI0L1BQQzk3MCAgICAgICAgICAyLjQKK0MgUE9XRVI1ICAgICAgICAgICAgICAgICAyLjc1CitDIFBPV0VSNiAgICAgICAgICAgICAgIDQwLTE0MAorQyBQT1dFUjcgICAgICAgICAgICAgICAgIDMKKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywJYHIzJykKK2RlZmluZShgdXAnLAlgcjQnKQorZGVmaW5lKGB2cCcsCWByNScpCitkZWZpbmUoYG4nLAlgcjYnKQorZGVmaW5lKGBjeScsCWByNycpCisKK2lmZGVmKGBPUEVSQVRJT05fYWRkX24nLCBgCisJZGVmaW5lKEFEQ1NCQywJYWRkZSkKKwlkZWZpbmUoZnVuYywJbXBuX2FkZF9uKQorCWRlZmluZShmdW5jX25jLAltcG5fYWRkX25jKQorCWRlZmluZShJRkFERCwJYCQxJykKKwlkZWZpbmUoSUZTVUIsCWAnKScpCitpZmRlZihgT1BFUkFUSU9OX3N1Yl9uJywgYAorCWRlZmluZShBRENTQkMsCXN1YmZlKQorCWRlZmluZShmdW5jLAltcG5fc3ViX24pCisJZGVmaW5lKGZ1bmNfbmMsCW1wbl9zdWJfbmMpCisJZGVmaW5lKElGQURELAlgJykKKwlkZWZpbmUoSUZTVUIsCWAkMScpJykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fYWRkX24gbXBuX2FkZF9uYyBtcG5fc3ViX24gbXBuX3N1Yl9uYykKKworQVNNX1NUQVJUKCkKKworUFJPTE9HVUUoZnVuY19uYykKK0lGQUREKGAJYWRkaWMJcjAsIGN5LCAtMScpCQlDIHNldCBjYXJyeSBmcm9tIGFyZ3VtZW50CitJRlNVQihgCXN1YmZpYwlyMCwgY3ksIDAnKQkJQyBzZXQgY2FycnkgZnJvbSBhcmd1bWVudAorCWIJTChlbnQpCitFUElMT0dVRSgpCisKK1BST0xPR1VFKGZ1bmMpCitJRkFERChgCWFkZGljCXIwLCBuLCAwJykJCUMgY2xlYXIgY2FycnkKK0lGU1VCKGAJYWRkaWMJcjAsIG4sIC0xJykJCUMgc2V0IGNhcnJ5CitMKGVudCk6CWFuZGkuCXIwLCBuLCAzCisJYWRkaQlyMywgcjMsIC0xMgorCWFkZGkJbiwgbiwgMQorCWNtcHdpCWNyNywgcjAsIDIKKwlzcndpCXIwLCBuLCAyCisJc3ViCXI0LCByNCwgcjMKKwlzdWIJcjUsIHI1LCByMworCW10Y3RyCXIwCisJYm5lCWNyMCwgTChuMDApCisKKwlsd3p4CXI3LCByNCwgcjMJCUMgbiA9IDQsIDgsIDEyLCAuLi4KKwlsd3p4CXI4LCByNSwgcjMKKwlhZGRpCXIzLCByMywgNAorCWx3engJcjksIHI0LCByMworCUFEQ1NCQwlyNywgcjgsIHI3CisJbHd6eAlyMTAsIHI1LCByMworCWFkZGkJcjMsIHIzLCA0CisJYglMKDAwKQorCitMKG4wMCk6CWJnZQljcjcsIEwobjAxKQorCWNtcHdpCWNyMCwgcjAsIDAJCUMgbiA9IDEsIDUsIDksIDEzLCAuLi4KKwlsd3p4CXIwLCByNCwgcjMKKwlsd3p4CXI2LCByNSwgcjMKKwlhZGRpCXIzLCByMywgNAorCUFEQ1NCQwlyMCwgcjYsIHIwCisJYmxlCUwocmV0KQorTChndDEpOglsd3p4CXI3LCByNCwgcjMKKwlsd3p4CXI4LCByNSwgcjMKKwlhZGRpCXIzLCByMywgNAorCWIJTCgwMSkKKworTChuMTApOgorCWx3engJcjksIHI0LCByMwkJQyBuID0gMywgNywgMTEsIDE1LCAuLi4KKwlsd3p4CXIxMCwgcjUsIHIzCisJYWRkaQlyMywgcjMsIDQKKwlsd3p4CXIxMSwgcjQsIHIzCisJQURDU0JDCXI5LCByMTAsIHI5CisJbHd6eAlyMTIsIHI1LCByMworCWFkZGkJcjMsIHIzLCA0CisJYglMKDExKQorCitMKG4wMSk6CWJuZQljcjcsIEwobjEwKQorCWNtcHdpCWNyMCwgcjAsIDAJCUMgbiA9IDIsIDYsIDEwLCAxNCwgLi4uCisJbHd6eAlyMTEsIHI0LCByMworCWx3engJcjEyLCByNSwgcjMKKwlhZGRpCXIzLCByMywgNAorCWx3engJcjAsIHI0LCByMworCUFEQ1NCQwlyMTEsIHIxMiwgcjExCisJbHd6eAlyNiwgcjUsIHIzCisJYWRkaQlyMywgcjMsIDQKKwlibGUJY3IwLCBMKGVuZCkKKworCitMKGxwKToJbHd6eAlyNywgcjQsIHIzCisJQURDU0JDCXIwLCByNiwgcjAKKwlsd3p4CXI4LCByNSwgcjMKKwlzdHd1CXIxMSwgNChyMykKK0woMDEpOglsd3p4CXI5LCByNCwgcjMKKwlBRENTQkMJcjcsIHI4LCByNworCWx3engJcjEwLCByNSwgcjMKKwlzdHd1CXIwLCA0KHIzKQorTCgwMCk6CWx3engJcjExLCByNCwgcjMKKwlBRENTQkMJcjksIHIxMCwgcjkKKwlsd3p4CXIxMiwgcjUsIHIzCisJc3R3dQlyNywgNChyMykKK0woMTEpOglsd3p4CXIwLCByNCwgcjMKKwlBRENTQkMJcjExLCByMTIsIHIxMQorCWx3engJcjYsIHI1LCByMworCXN0d3UJcjksIDQocjMpCisJYmRueglMKGxwKQorCitMKGVuZCk6CUFEQ1NCQwlyMCwgcjYsIHIwCisJc3R3CXIxMSwgNChyMykKK0wocmV0KToJc3R3CXIwLCA4KHIzKQorSUZBREQoYAlsaQlyMywgMAknKQorSUZBREQoYAlhZGR6ZQlyMywgcjMJJykKK0lGU1VCKGAJc3ViZmUJcjMsIHIwLCByMCcpCitJRlNVQihgCW5lZwlyMywgcjMnKQorCWJscgorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvYmRpdl9kYm0xYy5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi9iZGl2X2RibTFjLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmIyYzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvYmRpdl9kYm0xYy5hc20KQEAgLTAsMCArMSwxMzEgQEAKK2RubCAgUFBDMzIgbXBuX2JkaXZfZGJtMWMuCisKK2RubCAgQ29weXJpZ2h0IDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgICAgICAgICBjeWNsZXMvbGltYgorQyA2MDNlOiAgICAgICAgICAgID8KK0MgNjA0ZTogICAgICAgICAgICA/CitDIDc1eCAoRzMpOiAgICAgICAgPworQyA3NDAwLDc0MTAgKEc0KTogIDkuNDMKK0MgNzQ0eCw3NDV4IChHNCspOiA2LjI4CitDIHBvd2VyNC9wcGM5NzA6ICAgPworQyBwb3dlcjU6ICAgICAgICAgID8KKworQyBUT0RPCitDICAqIE5vdGhpbmcgdG8gZG8uLi4KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywgYHIzJykKK2RlZmluZShgdXAnLCBgcjQnKQorZGVmaW5lKGBuJywgIGByNScpCitkZWZpbmUoYGJkJywgYHI2JykKK2RlZmluZShgY3knLCBgcjcnKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2JkaXZfZGJtMWMpCisJbHd6CXIwLCAwKHI0KQorCisJcmx3aW5tLglyMTIsIHI1LCAwLDMwLDMxCisJY21wbHdpCWNyNiwgcjEyLCAyCisJY21wbHdpCWNyNywgcjUsIDQKKwlhZGRpCXI1LCByNSwgMQorCXNyd2kJcjUsIHI1LCAyCisJbXRjdHIJcjUKKwliZXEJY3IwLCBMKGIwMCkKKwlibHQJY3I2LCBMKGIwMSkKKwliZXEJY3I2LCBMKGIxMCkKKworTChiMTEpOgltdWxsdwlyNSwgcjAsIHI2CisJbXVsaHd1CXIxMiwgcjAsIHI2CisJbHd6CXIwLCA0KHI0KQorCWFkZGkJcjQsIHI0LCAtMTIKKwlhZGRpCXIzLCByMywgLTEyCisJYglMKDMpCisKK0woYjAwKToJbXVsbHcJcjksIHIwLCByNgorCW11bGh3dQlyOCwgcjAsIHI2CisJbHd6CXIwLCA0KHI0KQorCWFkZGkJcjQsIHI0LCAtOAorCWFkZGkJcjMsIHIzLCAtOAorCWIJTCgwKQorCitMKGIwMSk6CW11bGx3CXI1LCByMCwgcjYKKwltdWxod3UJcjEyLCByMCwgcjYKKwlhZGRpCXIzLCByMywgLTQKKwlibGUJY3I3LCBMKGUxKQorCWx3eglyMCwgNChyNCkKKwlhZGRpCXI0LCByNCwgLTQKKwliCUwoMSkKKworTChiMTApOgltdWxsdwlyOSwgcjAsIHI2CisJbXVsaHd1CXI4LCByMCwgcjYKKwlsd3oJcjAsIDQocjQpCisJYmxlCWNyNywgTChlMikKKworCUFMSUdOKDE2KQorTCh0b3ApOgltdWxsdwlyNSwgcjAsIHI2CisJbXVsaHd1CXIxMiwgcjAsIHI2CisJc3ViZmMJcjExLCByOSwgcjcKKwlsd3oJcjAsIDgocjQpCisJc3ViZmUJcjcsIHI4LCByMTEKKwlzdHcJcjExLCAwKHIzKQorTCgxKToJbXVsbHcJcjksIHIwLCByNgorCW11bGh3dQlyOCwgcjAsIHI2CisJc3ViZmMJcjExLCByNSwgcjcKKwlsd3oJcjAsIDEyKHI0KQorCXN1YmZlCXI3LCByMTIsIHIxMQorCXN0dwlyMTEsIDQocjMpCitMKDApOgltdWxsdwlyNSwgcjAsIHI2CisJbXVsaHd1CXIxMiwgcjAsIHI2CisJc3ViZmMJcjExLCByOSwgcjcKKwlsd3oJcjAsIDE2KHI0KQorCXN1YmZlCXI3LCByOCwgcjExCisJc3R3CXIxMSwgOChyMykKK0woMyk6CW11bGx3CXI5LCByMCwgcjYKKwltdWxod3UJcjgsIHIwLCByNgorCXN1YmZjCXIxMSwgcjUsIHI3CisJbHd6CXIwLCAyMChyNCkKKwlzdWJmZQlyNywgcjEyLCByMTEKKwlzdHcJcjExLCAxMihyMykKKwlhZGRpCXI0LCByNCwgMTYKKwlhZGRpCXIzLCByMywgMTYKKwliZG56CUwodG9wKQorCitMKGUyKToJbXVsbHcJcjUsIHIwLCByNgorCW11bGh3dQlyMTIsIHIwLCByNgorCXN1YmZjCXIxMSwgcjksIHI3CisJc3ViZmUJcjcsIHI4LCByMTEKKwlzdHcJcjExLCAwKHIzKQorTChlMSk6CXN1YmZjCXIxMSwgcjUsIHI3CisJc3R3CXIxMSwgNChyMykKKwlzdWJmZQlyMywgcjEyLCByMTEKKwlibHIKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzMyL2Rhcndpbi5tNCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzMyL2Rhcndpbi5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjQyMjY4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvZGFyd2luLm00CkBAIC0wLDAgKzEsOTEgQEAKK2RpdmVydCgtMSkKK2RubCAgbTQgbWFjcm9zIGZvciBNYWMgT1MgMzItYml0IGFzc2VtYmx5LgorCitkbmwgIENvcHlyaWdodCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2RlZmluZShgQVNNX1NUQVJUJyxgJykKKworZG5sICBDYWxsZWQ6IFBST0xPR1VFX2NwdShHU1lNX1BSRUZJWGAnZm9vWyx0b2NdKQorZG5sICAgICAgICAgIEVQSUxPR1VFX2NwdShHU1lNX1BSRUZJWGAnZm9vKQorZG5sCisKK2RlZmluZShgUFJPTE9HVUVfY3B1JywKK200X2Fzc2VydF9udW1hcmdzX3JhbmdlKDEsMikKK2BpZmVsc2UoYCQyJyx0b2MsLAorYGlmZWxzZShgJDInLCwsYG00X2Vycm9yKGBVbnJlY29nbmlzZWQgUFJPTE9HVUUgcGFyYW1ldGVyJyknKScpZG5sCisJLnRleHQKKwkuZ2xvYmwJJDEKKwkuYWxpZ24JMworJDE6JykKKworZGVmaW5lKGBFUElMT0dVRV9jcHUnLAorbTRfYXNzZXJ0X251bWFyZ3MoMSkpCisKKworZG5sICBMRUEgLS0gTG9hZCBFZmZlY3RpdmUgQWRkcmVzcy4KKworZGVmaW5lKGBMRUEnLAorbTRfYXNzZXJ0X251bWFyZ3MoMikKK2BpZmRlZihgUElDJywKK2AJbWZscglyMAkJCUMgc2F2ZSByZXR1cm4gYWRkcmVzcworCWJjbAkyMCwgMzEsIDFmCisxOgltZmxyCSQxCisJYWRkaXMJJDEsICQxLCBoYTE2KCQyLTFiKQorCWxhCSQxLCBsbzE2KCQyLTFiKSgkMSkKKwltdGxyCXIwCQkJQyByZXN0b3JlIHJldHVybiBhZGRyZXNzCisnLGAKKwlsaXMJJDEsIGhhMTYoJDIpCisJbGEJJDEsIGxvMTYoJDIpKCQxKQorJyknKQorCitkZWZpbmUoYExFQUwnLAorbTRfYXNzZXJ0X251bWFyZ3MoMikKK2BMRUEoJDEsJDIpJykKKworCitkZWZpbmUoYEVYVEVSTicsCittNF9hc3NlcnRfbnVtYXJncygxKQorYGRubCcpCisKK2RlZmluZShgREVGX09CSkVDVCcsCittNF9hc3NlcnRfbnVtYXJnc19yYW5nZSgxLDIpCitgCS5jb25zdAorCUFMSUdOKGlmZWxzZSgkIywxLDIsJDIpKQorJDE6CisnKQorCitkZWZpbmUoYEVORF9PQkpFQ1QnLAorbTRfYXNzZXJ0X251bWFyZ3MoMSkpCisKK2RlZmluZShgQVNNX0VORCcsIGBkbmwnKQorCitpZmRlZihgUElDJyxgCitkZWZpbmUoYFBJQ19TTE9XJyknKQorCitkaXZlcnQKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzMyL2RpdmVieTMuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvZGl2ZWJ5My5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg4YTdkMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzMyL2RpdmVieTMuYXNtCkBAIC0wLDAgKzEsOTMgQEAKK2RubCAgUG93ZXJQQy0zMiBtcG5fZGl2ZXhhY3RfYnkzIC0tIG1wbiBieSAzIGV4YWN0IGRpdmlzaW9uCisKK2RubCAgQ29weXJpZ2h0IDIwMDIsIDIwMDMsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgICAgICAgICBjeWNsZXMvbGltYgorQyA2MDNlOiAgICAgICAgICAgICAgPworQyA2MDRlOiAgICAgICAgICAgICAgNQorQyA3NXggKEczKTogICAgICAgICAgPworQyA3NDAwLDc0MTAgKEc0KTogICAgOAorQyA3NDR4LDc0NXggKEc0Kyk6ICAgNgorQyBwb3dlcjQvcHBjOTcwOiAgICAxMgorQyBwb3dlcjU6ICAgICAgICAgICAgPworCitDIHZvaWQgbXBuX2RpdmV4YWN0X2J5MyAobXBfcHRyIGRzdCwgbXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUpOworQworQyBXZSBhdm9pZCB0aGUgc2xvdyBzdWJmZSBpbnN0cnVjdGlvbiBhbmQgaW5zdGVhZCByZWx5IG9uIGFuIGV4dHJlbWVseSB1bmxpa2VseQorQyBicmFuY2guCitDCitDIFRoZSBtdWxsdyBoYXMgdGhlIGludmVyc2UgaW4gdGhlIGZpcnN0IG9wZXJhbmQsIHNpbmNlIDB4QUEuLkFCIHdvbid0IGFsbG93CitDIGFueSBlYXJseS1vdXQuICBUaGUgc3JjW10gZGF0YSBub3JtYWxseSB3b24ndCBlaXRoZXIsIGJ1dCB0aGVyZSdzIGF0IGxlYXN0CitDIGEgY2hhbmNlLCB3aGVyZWFzIDB4QUEuLkFCIG5ldmVyIHdpbGwuICBJZiwgZm9yIGluc3RhbmNlLCBzcmNbXSBpcyBhbGwKK0MgemVyb3MgKG5vdCBhIHNlbnNpYmxlIGlucHV0IG9mIGNvdXJzZSkgd2UgcnVuIGF0IDcuMCBjL2wgb24gcHBjNzUwLgorQworQyBUaGUgbXVsaHd1IGhhcyB0aGUgIjMiIG11bHRpcGxpZXIgaW4gdGhlIHNlY29uZCBvcGVyYW5kLCB3aGljaCBsZXRzIDc1MCBhbmQKK0MgNzQwMCB1c2UgYW4gZWFybHktb3V0LgorCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLCBgcjMnKQorZGVmaW5lKGB1cCcsIGByNCcpCitkZWZpbmUoYG4nLCAgYHI1JykKK2RlZmluZShgY3knLCBgcjYnKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2RpdmV4YWN0X2J5M2MpCisJbHd6CXIxMSwgMCh1cCkKKwltdGN0cgluCisJbGlzCXIxMiwgMHhBQUFBCisJb3JpCXIxMiwgcjEyLCAweEFBQUIKKwlsaQlyMTAsIDMKKworCWNtcGx3CWNyNywgY3ksIHIxMQorCXN1YmYJcjExLCBjeSwgcjExCisKKwltdWxsdwlyMCwgcjExLCByMTIKKwlzdHcJcjAsIDAocnApCisJYmR6CUwob25lKQorCitMKHRvcCk6CWx3enUJcjksIDQodXApCisJbXVsaHd1CXI3LCByMCwgcjEwCisJYmd0LQljcjcsIEwoYWRqKQkJQyB2ZXJ5IHVubGlrZWx5IGJyYW5jaAorTChia28pOgljbXBsdwljcjcsIHI3LCByOQorCXN1YmYJcjAsIHI3LCByOQorCW11bGx3CXIwLCByMTIsIHIwCisJc3R3dQlyMCwgNChycCkKKwliZG56CUwodG9wKQorCitMKG9uZSk6CW11bGh3dQlyMywgcjAsIHIxMAorCWJsZWxyKwljcjcKKwlhZGRpCXIzLCByMywgMQorCWJscgorCitMKGFkaik6CWFkZGkJcjcsIHI3LCAxCisJYglMKGJrbykKK0VQSUxPR1VFKCkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvZGl2cmVtXzIuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvZGl2cmVtXzIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NDIzZjQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi9kaXZyZW1fMi5hc20KQEAgLTAsMCArMSwxODIgQEAKK2RubCAgUFBDLTMyIG1wbl9kaXZyZW1fMiAtLSBEaXZpZGUgYW4gbXBuIG51bWJlciBieSBhIG5vcm1hbGl6ZWQgMi1saW1iIG51bWJlci4KKworZG5sICBDb3B5cmlnaHQgMjAwNywgMjAwOCwgMjAxMiwgMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCQljeWNsZXMvbGltYgorQwkJbm9ybQlmcmFjCitDIDc0MTAJCX4zNi41CX4zNi41CitDIDc0NHgsIDc0NXgJIDI5CSAyOQorCitDIElOUFVUIFBBUkFNRVRFUlMKK0MgcXAgID0gcjMKK0MgZm4gID0gcjQKK0MgdXAgID0gcjUKK0MgdW4gID0gcjYKK0MgZCAgID0gcjcKKworQyBUT0RPCitDICAqIERlY3JlYXNlIHJlZ2lzdGVyIHVzYWdlLgorQyAgKiBNYWtlIHN1cmUgbXVsIG9wZXJhbmRzIGFuZCBvcHRpbWFsIGZvciBlYXJseS1vdXQuCitDICAqIENoZWNrIHRoYXQgdGhpbmdzIHdvcmsgd2VsbCBmb3IgYSBzaGFyZWQgbGlicmFyeSBidWlsZC4KK0MgICogV3JpdGUgYW4gaW52ZXJ0X2xpbWIsIHBlcmhhcHMgaW5saW5lLCBwZXJoYXBzIGFzIGEgcHJpdmF0ZSBjYWxsLiAgT3IgYXQKK0MgICAgbGVhc3QgdmFzdGx5IGltcHJvdmUgdGhlIGN1cnJlbnQgX191ZGl2X3Fybm5kX2MgYmFzZWQgY29kZS4KKworCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2RpdnJlbV8yKQorCXN0d3UJcjEsIC0zMihyMSkKKwlzbHdpCXIwLCByNiwgMgorCWFkZAlyNSwgcjUsIHIwCisJc3RtdwlyMjgsIDgocjEpCisJYWRkaQlyMjksIHI1LCAtOAkJQyB1cCA9IHVwX3BhcmFtICsgdW4gLSAyCisJbHd6CXIxMCwgNChyNykKKwlsd3oJcjEyLCA0KHIyOSkKKwlhZGRpCXI4LCByMywgLTEyCisJbHd6CXI3LCAwKHI3KQorCWNtcGx3CWNyNywgcjEyLCByMTAKKwlsd3oJcjI4LCAwKHIyOSkKKwlibHQtCWNyNywgTCgyKQorCWJndCsJY3I3LCBMKDQpCisJY21wbHcJY3I3LCByMjgsIHI3CisJYmx0LQljcjcsIEwoMikKK0woNCk6CXN1YmZjCXIyOCwgcjcsIHIyOAorCXN1YmZlCXIxMiwgcjEwLCByMTIKKwlsaQlyMywgMQorCWIJTCg2KQorTCgyKToJbGkJcjMsIDAKKworTCg2KToJYWRkCXIwLCByNCwgcjYKKwlhZGRpYy4JcjMwLCByMCwgLTIKKwlibGUtCWNyMCwgTChyZXQpCisKKwlzbHdpCXI5LCByMCwgMgorCWFkZAlyOCwgcjgsIHI5CQlDIHJwICs9IHVuICsgZm4KKwltdGN0cglyMzAKKworQyBDb21wdXRlIGRpIGZyb20gZDEKKwlzcndpCXIxMSwgcjEwLCAxNgorCW5vcglyMCwgcjEwLCByMTAKKwlkaXZ3dQlyMzEsIHIwLCByMTEKKwlybHdpbm0JcjUsIHIxMCwgMCwgMTYsIDMxCisJbXVsbHcJcjksIHIxMSwgcjMxCisJbXVsbHcJcjYsIHI1LCByMzEKKwlzdWJmCXIwLCByOSwgcjAKKwlzbHdpCXIwLCByMCwgMTYKKwlvcmkJcjAsIHIwLCA2NTUzNQorCWNtcGx3CWNyNywgcjAsIHI2CisJYmdlLQljcjcsIEwoOSkKKwlhZGQJcjAsIHIwLCByMTAKKwljbXBsdwljcjcsIHIwLCByMTAKKwljbXBsdwljcjYsIHI2LCByMAorCWFkZGkJcjMxLCByMzEsIC0xCQlDIHExLS0KKwljcm9yYwkyOCwgMjgsIDI1CisJYmx0KwljcjcsIEwoOSkKKwlhZGRpCXIzMSwgcjMxLCAtMQkJQyBxMS0tCisJYWRkCXIwLCByMCwgcjEwCitMKDkpOglzdWJmCXIwLCByNiwgcjAKKwlkaXZ3dQlyNiwgcjAsIHIxMQorCW11bGx3CXI5LCByMTEsIHI2CisJbXVsbHcJcjExLCByNSwgcjYKKwlzdWJmCXIwLCByOSwgcjAKKwlzbHdpCXIwLCByMCwgMTYKKwlvcmkJcjAsIHIwLCA2NTUzNQorCWNtcGx3CWNyNywgcjAsIHIxMQorCWJnZS0JY3I3LCBMKDEzKQorCWFkZAlyMCwgcjAsIHIxMAorCWNtcGx3CWNyNywgcjAsIHIxMAorCWNtcGx3CWNyNiwgcjExLCByMAorCWFkZGkJcjYsIHI2LCAtMQkJQyBxMC0tCisJY3JvcmMJMjgsIDI4LCAyNQorCWJsdCsJY3I3LCBMKDEzKQorQwlhZGQJcjAsIHIwLCByMTAJCUMgZmluYWwgcmVtYWluZGVyCisJYWRkaQlyNiwgcjYsIC0xCQlDIHEwLS0KK0woMTMpOglybHdpbWkJcjYsIHIzMSwgMTYsIDAsIDE1CUMgYXNzZW1ibGUgZmluYWwgcXVvdGllbnQKKworQyBBZGp1c3QgZGkgYnkgaW5jbHVkaW5nIGQwCisJbXVsbHcJcjksIHIxMCwgcjYJCUMgdDAgPSBMTyhkaSAqIGQxKQorCWFkZGMJcjExLCByOSwgcjcKKwlzdWJmZQlyMCwgcjEsIHIxCisJbXVsaHd1CXI5LCByNiwgcjcJCUMgczEgPSBISShkaSAqIGQwKQorCWFkZGMJcjksIHIxMSwgcjkKKwlhZGR6ZS4JcjAsIHIwCisJYmx0CWNyMCwgTCgxNykKK0woMTgpOglzdWJmYwlyOSwgcjEwLCByOQorCWFkZGkJcjYsIHI2LCAtMQorCWFkZG1lLglyMCwgcjAKKwliZ2UrCWNyMCwgTCgxOCkKK0woMTcpOgorCitDIHIwICByMyAgcjQgIHI1ICByNiAgcjcgIHI4ICByOSByMTAgcjExIHIxMiByMjggcjI5IHIzMCByMzEKK0MgICAgIG1zbCAgICAgICAgIGRpICBkMCAgcXAgICAgIGQxICAgICAgICAgIGZuICB1cCAgdW4KK0wobG9vcCk6CisJbXVsbHcJcjAsIHIxMiwgcjYJCUMgcTAgPSBMTyhuMiAqIGRpKQorCWNtcHcJY3I3LCByMzAsIHI0CisJYWRkYwlyMzEsIHIwLCByMjgJCUMgcTAgKz0gbjEKKwltdWxod3UJcjksIHIxMiwgcjYJCUMgcSAgPSBISShuMiAqIGRpKQorCWFkZGUJcjEyLCByOSwgcjEyCQlDIHEgICs9IG4yCisJYWRkaQlyMzAsIHIzMCwgLTEKKwltdWxsdwlyMCwgcjEwLCByMTIJCUMgZDEgKiBxCisJbGkJcjksIDAKKwlzdWJmCXIwLCByMCwgcjI4CQlDIG4xIC09IGQxICogcQorCWFkZGkJcjUsIHIxMiwgMQorCWJsZS0JY3I3LCBMKDIzKQorCWx3enUJcjksIC00KHIyOSkKK0woMjMpOgltdWxsdwlyMTEsIHIxMiwgcjcJCUMgdDAgPSBMTyhkMCAqIHEpCisJc3ViZmMJcjI4LCByNywgcjkJCUMgbjAgLT0gZDAKKwlzdWJmZQlyMCwgcjEwLCByMAkJQyBuMSAtPSBkMQorCW11bGh3dQlyMTIsIHIxMiwgcjcJCUMgdDEgPSBISShkMCAqIHEpCisJc3ViZmMJcjI4LCByMTEsIHIyOAkJQyBuMCAtPSB0MAorCXN1YmZlCXIxMiwgcjEyLCByMAkJQyBuMSAtPSB0MQorCWNtcGx3CWNyNywgcjEyLCByMzEKKwlibHQrCWNyNywgTCgyNCkKKwlhZGRjCXIyOCwgcjI4LCByNworCWFkZGUJcjEyLCByMTIsIHIxMAorCWFkZGkJcjUsIHI1LCAtMQorTCgyNCk6CWNtcGx3CWNyNywgcjEyLCByMTAKKwliZ2UtCWNyNywgTChmaXgpCitMKGJjayk6CXN0dwlyNSwgMChyOCkKKwlhZGRpCXI4LCByOCwgLTQKKwliZG56CUwobG9vcCkKKworTChyZXQpOglzdHcJcjI4LCAwKHIyOSkKKwlzdHcJcjEyLCA0KHIyOSkKKwlsbXcJcjI4LCA4KHIxKQorCWFkZGkJcjEsIHIxLCAzMgorCWJscgorCitMKGZpeCk6CWNtcGx3CWNyNiwgcjI4LCByNworCWJndCsJY3I3LCBMKDI4KQorCWJsdC0JY3I2LCBMKGJjaykKK0woMjgpOglzdWJmYwlyMjgsIHI3LCByMjgKKwlzdWJmZQlyMTIsIHIxMCwgcjEyCisJYWRkaQlyNSwgcjUsIDEKKwliCUwoYmNrKQorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvZWFiaS5tNCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzMyL2VhYmkubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q3NjMzYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzMyL2VhYmkubTQKQEAgLTAsMCArMSw4NiBAQAorZGl2ZXJ0KC0xKQorZG5sICBtNCBtYWNyb3MgZm9yIHBvd2VycGMzMiBlQUJJIGFzc2VtYmx5LgorCitkbmwgIENvcHlyaWdodCAyMDAzLCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2RlZmluZShgQVNNX1NUQVJUJyxgJykKKworZG5sICBDYWxsZWQ6IFBST0xPR1VFX2NwdShHU1lNX1BSRUZJWGAnZm9vKQorZG5sICAgICAgICAgIEVQSUxPR1VFX2NwdShHU1lNX1BSRUZJWGAnZm9vKQorZG5sCisKK2RlZmluZShgUFJPTE9HVUVfY3B1JywKK200X2Fzc2VydF9udW1hcmdzKDEpCisJYAorCS5zZWN0aW9uCSIudGV4dCIKKwkuYWxpZ24JMworCS5nbG9ibAkkMQorCS50eXBlCSQxLCBAZnVuY3Rpb24KKyQxOicpCisKK2RlZmluZShgRVBJTE9HVUVfY3B1JywKK200X2Fzc2VydF9udW1hcmdzKDEpCitgCS5zaXplCSQxLCAuLSQxJykKKworZG5sICBUaGlzIG91Z2h0IHRvIHN1cHBvcnQgUElDLCBidXQgaXQgaXMgdW5jbGVhciBob3cgdGhhdCBpcyBkb25lIGZvciBlQUJJCitkZWZpbmUoYExFQScsCittNF9hc3NlcnRfbnVtYXJncygyKQorYAorCWxpcwkkMSwgJDJAaGEKKwlsYQkkMSwgJDJAbCgkMSkKKycpCisKK2RlZmluZShgRVhURVJOJywKK200X2Fzc2VydF9udW1hcmdzKDEpCitgZG5sJykKKworZGVmaW5lKGBERUZfT0JKRUNUJywKK200X2Fzc2VydF9udW1hcmdzX3JhbmdlKDEsMikKK2AKKwkuc2VjdGlvbgkucm9kYXRhCisJQUxJR04oaWZlbHNlKCQjLDEsMiwkMikpCisJLnR5cGUJJDEsIEBvYmplY3QKKyQxOgorJykKKworZGVmaW5lKGBFTkRfT0JKRUNUJywKK200X2Fzc2VydF9udW1hcmdzKDEpCitgCS5zaXplCSQxLCAuLSQxJykKKworZGVmaW5lKGBBU01fRU5EJywgYGRubCcpCisKK2lmZGVmKGBQSUMnLGAKK2RlZmluZShgUElDX1NMT1cnKScpCisKK2RubCAgNjQtYml0ICJsb25nIGxvbmciIHBhcmFtZXRlcnMgYXJlIHB1dCBpbiBhbiBldmVuLW9kZCBwYWlyLCBza2lwcGluZyBhbgorZG5sICBldmVuIHJlZ2lzdGVyIGlmIHRoYXQgd2FzIGluIHR1cm4uICBJIHdpc2ggc29tZWJvZHkgY291bGQgZXhwbGFpbiB3aHkgdGhhdAorZG5sICBpcyBhIGdvb2QgaWRlYS4KK2RlZmluZShgQlJPS0VOX0xPTkdMT05HX1BBUkFNJykKKworZGl2ZXJ0CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi9lbGYubTQgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi9lbGYubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVkOWMxMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzMyL2VsZi5tNApAQCAtMCwwICsxLDEwMCBAQAorZGl2ZXJ0KC0xKQorZG5sICBtNCBtYWNyb3MgZm9yIHBvd2VycGMzMiBHTlUvTGludXggYXNzZW1ibHkuCisKK2RubCAgQ29weXJpZ2h0IDIwMDMsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworZGVmaW5lKGBBU01fU1RBUlQnLGAnKQorCitkbmwgIENhbGxlZDogUFJPTE9HVUVfY3B1KEdTWU1fUFJFRklYYCdmb29bLHRvY10pCitkbmwgICAgICAgICAgRVBJTE9HVUVfY3B1KEdTWU1fUFJFRklYYCdmb28pCitkbmwKKworZGVmaW5lKGBQUk9MT0dVRV9jcHUnLAorbTRfYXNzZXJ0X251bWFyZ3NfcmFuZ2UoMSwyKQorYGlmZWxzZShgJDInLHRvYywsCitgaWZlbHNlKGAkMicsLCxgbTRfZXJyb3IoYFVucmVjb2duaXNlZCBQUk9MT0dVRSBwYXJhbWV0ZXInKScpJylkbmwKKwkuc2VjdGlvbgkiLnRleHQiCisJLmFsaWduCTMKKwkuZ2xvYmwJJDEKKwkudHlwZQkkMSwgQGZ1bmN0aW9uCiskMTonKQorCitkZWZpbmUoYEVQSUxPR1VFX2NwdScsCittNF9hc3NlcnRfbnVtYXJncygxKQorYAkuc2l6ZQkkMSwgLi0kMScpCisKK2RlZmluZShgTEVBJywKK200X2Fzc2VydF9udW1hcmdzKDIpCitgaWZkZWYoYFBJQycsYAorCW1mbHIJcjAKKwliY2wJMjAsIDMxLCAxZgorMToJbWZscgkkMQorCWFkZGlzCSQxLCAkMSwgKF9HTE9CQUxfT0ZGU0VUX1RBQkxFXy0xYilAaGEKKwlhZGRpCSQxLCAkMSwgKF9HTE9CQUxfT0ZGU0VUX1RBQkxFXy0xYilAbAorCW10bHIJcjAKKwlsd3oJJDEsICQyQGdvdCgkMSkKKycsYAorCWxpcwkkMSwgJDJAaGEKKwlsYQkkMSwgJDJAbCgkMSkKKycpJykKKworCitkZWZpbmUoYExFQUwnLAorbTRfYXNzZXJ0X251bWFyZ3MoMikKK2BMRUEoJDEsJDIpJykKKworCitkZWZpbmUoYEVYVEVSTicsCittNF9hc3NlcnRfbnVtYXJncygxKQorYGRubCcpCisKK2RlZmluZShgREVGX09CSkVDVCcsCittNF9hc3NlcnRfbnVtYXJnc19yYW5nZSgxLDIpCitgCisJLnNlY3Rpb24JLnJvZGF0YQorCUFMSUdOKGlmZWxzZSgkIywxLDIsJDIpKQorCS50eXBlCSQxLCBAb2JqZWN0CiskMToKKycpCisKK2RlZmluZShgRU5EX09CSkVDVCcsCittNF9hc3NlcnRfbnVtYXJncygxKQorYAkuc2l6ZQkkMSwgLi0kMScpCisKK2RlZmluZShgQVNNX0VORCcsIGBkbmwnKQorCitpZmRlZihgUElDJyxgCitkZWZpbmUoYFBJQ19TTE9XJyknKQorCitkbmwgIDY0LWJpdCAibG9uZyBsb25nIiBwYXJhbWV0ZXJzIGFyZSBwdXQgaW4gYW4gZXZlbi1vZGQgcGFpciwgc2tpcHBpbmcgYW4KK2RubCAgZXZlbiByZWdpc3RlciBpZiB0aGF0IHdhcyBpbiB0dXJuLiAgSSB3aXNoIHNvbWVib2R5IGNvdWxkIGV4cGxhaW4gd2h5IHRoYXQKK2RubCAgaXMgYSBnb29kIGlkZWEuCitkZWZpbmUoYEJST0tFTl9MT05HTE9OR19QQVJBTScpCisKK2RpdmVydApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvZ21wLW1wYXJhbS5oIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvZ21wLW1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MzVhMzkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi9nbXAtbXBhcmFtLmgKQEAgLTAsMCArMSwyMjIgQEAKKy8qIFBvd2VyUEMtMzIgZ21wLW1wYXJhbS5oIC0tIENvbXBpbGVyL21hY2hpbmUgcGFyYW1ldGVyIGhlYWRlciBmaWxlLgorCitDb3B5cmlnaHQgMTk5MSwgMTk5MywgMTk5NCwgMTk5OS0yMDA0LCAyMDA4LTIwMTAsIDIwMTQsIDIwMTUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgMzIKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgNAorCisKKy8qIFRoaXMgZmlsZSBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGZvciA2MDQsIDYwNGUsIDc0NHgvNzQ1eC83NDd4IChHNCspLCBpLmUuLAorICAgMzItYml0IFBvd2VyUEMgcHJvY2Vzc29ycyB3aXRoIHJlYXNvbmFibHkgZmFzdCBpbnRlZ2VyIG11bHRpcGx5IGluc25zLiAgVGhlCisgICB2YWx1ZXMgYmVsb3cgYXJlIGNob3NlbiB0byBiZSBiZXN0IGZvciB0aGUgbGF0dGVyIHByb2Nlc3NvcnMsIHNpbmNlIDYwNCBpcworICAgbGFyZ2VseSBpcnJlbGV2YW50IHRvZGF5LgorCisgICBJbiBtcG4vcG93ZXJwYzMyLzc1MC9nbXAtbXBhcmFtLmggdGhlcmUgYXJlIHZhbHVlcyBmb3IgNzV4IChHMykgYW5kIGZvcgorICAgNzQwMC83NDEwIChHNCksIGJvdGggd2hpY2ggaGF2ZSBtdWNoIHNsb3dlciBtdWx0aXBseSBpbnN0cnVjdGlvbnMuICAqLworCisvKiAxNDE3IE1IeiBQUEMgNzQ0N0EgKi8KKy8qIEZGVCB0dW5pbmcgbGltaXQgPSAxNSBNICovCisvKiBHZW5lcmF0ZWQgYnkgdHVuZXVwLmMsIDIwMTUtMTAtMDgsIGdjYyA0LjYgKi8KKworI2RlZmluZSBESVZSRU1fMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIERJVlJFTV8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfMVBfTUVUSE9EICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgTU9EXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PRF8xTl9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA4CisjZGVmaW5lIE1PRF8xVV9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA2CisjZGVmaW5lIE1PRF8xXzFfVE9fTU9EXzFfMl9USFJFU0hPTEQgICAgICAgICA4CisjZGVmaW5lIE1PRF8xXzJfVE9fTU9EXzFfNF9USFJFU0hPTEQgICAgICAgIDQ1CisjZGVmaW5lIFBSRUlOVl9NT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgIDE4CisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIERJVl9RUl8xTl9QSTFfTUVUSE9EICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIERJVl9RUl8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAyCisjZGVmaW5lIERJVl9RUl8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICAxCisjZGVmaW5lIERJVl9RUl8yX1BJMl9USFJFU0hPTEQgICAgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgICAgICAgNjkKKworI2RlZmluZSBNVUxfVE9PTTIyX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBNVUxfVE9PTTMzX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA3MworI2RlZmluZSBNVUxfVE9PTTQ0X1RIUkVTSE9MRCAgICAgICAgICAgICAgIDEwNgorI2RlZmluZSBNVUxfVE9PTTZIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE1NgorI2RlZmluZSBNVUxfVE9PTThIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDIzNgorCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTQzX1RIUkVTSE9MRCAgICAgIDczCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgIDcxCisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgIDczCisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTYzX1RIUkVTSE9MRCAgICAgIDcyCisjZGVmaW5lIE1VTF9UT09NNDNfVE9fVE9PTTU0X1RIUkVTSE9MRCAgICAgIDgyCisKKyNkZWZpbmUgU1FSX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBTUVJfVE9PTTJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAyMgorI2RlZmluZSBTUVJfVE9PTTNfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA3NAorI2RlZmluZSBTUVJfVE9PTTRfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE0MgorI2RlZmluZSBTUVJfVE9PTTZfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE5MAorI2RlZmluZSBTUVJfVE9PTThfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDMzMworCisjZGVmaW5lIE1VTE1JRF9UT09NNDJfVEhSRVNIT0xEICAgICAgICAgICAgIDMyCisKKyNkZWZpbmUgTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgU1FSTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTMKKworI2RlZmluZSBNVUxfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDI4NCAgLyogayA9IDUgKi8KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDI4NCwgNX0sIHsgICAgIDE1LCA2fSwgeyAgICAgIDgsIDV9LCB7ICAgICAxNywgNn0sIFwKKyAgICB7ICAgICAgOSwgNX0sIHsgICAgIDE5LCA2fSwgeyAgICAgMTcsIDd9LCB7ICAgICAgOSwgNn0sIFwKKyAgICB7ICAgICAyMCwgN30sIHsgICAgIDExLCA2fSwgeyAgICAgMjMsIDd9LCB7ICAgICAxMywgOH0sIFwKKyAgICB7ICAgICAgNywgN30sIHsgICAgIDE5LCA4fSwgeyAgICAgMTEsIDd9LCB7ICAgICAyNSwgOX0sIFwKKyAgICB7ICAgICAgNywgOH0sIHsgICAgIDE1LCA3fSwgeyAgICAgMzMsIDh9LCB7ICAgICAxOSwgN30sIFwKKyAgICB7ICAgICAzOSwgOH0sIHsgICAgIDIzLCA3fSwgeyAgICAgNDcsIDh9LCB7ICAgICAyNywgOX0sIFwKKyAgICB7ICAgICAxNSwgOH0sIHsgICAgIDM5LCA5fSwgeyAgICAgMjMsIDh9LCB7ICAgICA0NywxMH0sIFwKKyAgICB7ICAgICAxNSwgOX0sIHsgICAgIDMxLCA4fSwgeyAgICAgNjcsIDl9LCB7ICAgICAzOSwgOH0sIFwKKyAgICB7ICAgICA3OSwgOX0sIHsgICAgIDQ3LCA4fSwgeyAgICAgOTUsMTB9LCB7ICAgICAzMSwgOX0sIFwKKyAgICB7ICAgICA3MSwgOH0sIHsgICAgMTQzLCA5fSwgeyAgICAgNzksMTB9LCB7ICAgICA0NywgOX0sIFwKKyAgICB7ICAgICA5NSwxMX0sIHsgICAgIDMxLDEwfSwgeyAgICAgNjMsIDl9LCB7ICAgIDEyNywgOH0sIFwKKyAgICB7ICAgIDI1NSwgOX0sIHsgICAgMTM1LCA4fSwgeyAgICAyNzEsIDl9LCB7ICAgIDE0MywxMH0sIFwKKyAgICB7ICAgICA3OSwgOX0sIHsgICAgMTU5LCA4fSwgeyAgICAzMTksIDl9LCB7ICAgIDE3NSwxMH0sIFwKKyAgICB7ICAgICA5NSwgOX0sIHsgICAgMTkxLCA4fSwgeyAgICAzODMsIDl9LCB7ICAgIDIwNywgOH0sIFwKKyAgICB7ICAgIDQxNSwxMX0sIHsgICAgIDYzLDEwfSwgeyAgICAxMjcsIDl9LCB7ICAgIDI1NSwgOH0sIFwKKyAgICB7ICAgIDUxMSwgOX0sIHsgICAgMjcxLDEwfSwgeyAgICAxNDMsIDl9LCB7ICAgIDI4NywgOH0sIFwKKyAgICB7ICAgIDU3NSwxMH0sIHsgICAgMTU5LCA5fSwgeyAgICAzMTksMTB9LCB7ICAgIDE3NSwxMX0sIFwKKyAgICB7ICAgICA5NSwxMH0sIHsgICAgMTkxLCA5fSwgeyAgICAzODMsMTB9LCB7ICAgIDIwNywgOX0sIFwKKyAgICB7ICAgIDQxNSwgOH0sIHsgICAgODMxLDEyfSwgeyAgICAgNjMsMTF9LCB7ICAgIDEyNywxMH0sIFwKKyAgICB7ICAgIDI1NSwgOX0sIHsgICAgNTExLDEwfSwgeyAgICAyNzEsIDl9LCB7ICAgIDU0MywgOH0sIFwKKyAgICB7ICAgMTA4NywxMH0sIHsgICAgMjg3LCA5fSwgeyAgICA1NzUsMTF9LCB7ICAgIDE1OSwxMH0sIFwKKyAgICB7ICAgIDMxOSwgOX0sIHsgICAgNjM5LDEwfSwgeyAgICAzNTEsIDl9LCB7ICAgIDcwMywxMX0sIFwKKyAgICB7ICAgIDE5MSwxMH0sIHsgICAgNDE1LCA5fSwgeyAgICA4MzEsMTF9LCB7ICAgIDIyMywxMH0sIFwKKyAgICB7ICAgIDQ0NywgOX0sIHsgICAgODk1LDEwfSwgeyAgICA0NzksIDl9LCB7ICAgIDk1OSwxMn0sIFwKKyAgICB7ICAgIDEyNywxMX0sIHsgICAgMjU1LDEwfSwgeyAgICA1NDMsIDl9LCB7ICAgMTA4NywxMX0sIFwKKyAgICB7ICAgIDI4NywxMH0sIHsgICAgNjA3LDExfSwgeyAgICAzMTksMTB9LCB7ICAgIDYzOSwxMX0sIFwKKyAgICB7ICAgIDM1MSwxMH0sIHsgICAgNzAzLCA5fSwgeyAgIDE0MDcsMTJ9LCB7ICAgIDE5MSwxMX0sIFwKKyAgICB7ICAgIDM4MywxMH0sIHsgICAgNzY3LDExfSwgeyAgICA0MTUsMTB9LCB7ICAgIDgzMSwxMX0sIFwKKyAgICB7ICAgIDQ0NywxMH0sIHsgICAgODk1LDExfSwgeyAgICA0NzksMTB9LCB7ICAgIDk1OSwxM30sIFwKKyAgICB7ICAgIDEyNywxMn0sIHsgICAgMjU1LDExfSwgeyAgICA1NDMsMTB9LCB7ICAgMTA4NywxMX0sIFwKKyAgICB7ICAgIDYwNywxMn0sIHsgICAgMzE5LDExfSwgeyAgICA2MzksMTB9LCB7ICAgMTI3OSwxMX0sIFwKKyAgICB7ICAgIDcwMywxMH0sIHsgICAxNDA3LDEyfSwgeyAgICAzODMsMTF9LCB7ICAgIDgzMSwxMn0sIFwKKyAgICB7ICAgIDQ0NywxMX0sIHsgICAgOTU5LDEzfSwgeyAgICAyNTUsMTJ9LCB7ICAgIDUxMSwxMX0sIFwKKyAgICB7ICAgMTA4NywxMn0sIHsgICAgNTc1LDExfSwgeyAgIDEyMTUsMTB9LCB7ICAgMjQzMSwxMn0sIFwKKyAgICB7ICAgIDYzOSwxMX0sIHsgICAxMjc5LDEyfSwgeyAgICA3MDMsMTF9LCB7ICAgMTQwNywxM30sIFwKKyAgICB7ICAgIDM4MywxMn0sIHsgICAgOTU5LDE0fSwgeyAgICAyNTUsMTN9LCB7ICAgIDUxMSwxMn0sIFwKKyAgICB7ICAgMTIxNSwxMX0sIHsgICAyNDMxLDEzfSwgeyAgICA2MzksMTJ9LCB7ICAgMTQ3MSwxM30sIFwKKyAgICB7ICAgIDc2NywxMn0sIHsgICAxNTk5LDEzfSwgeyAgICA4OTUsMTJ9LCB7ICAgMTkxOSwxNH0sIFwKKyAgICB7ICAgIDUxMSwxM30sIHsgICAxMDIzLDEyfSwgeyAgIDIxMTEsMTN9LCB7ICAgMTE1MSwxMn0sIFwKKyAgICB7ICAgMjQzMSwxM30sIHsgICAxNDA3LDE0fSwgeyAgICA3NjcsMTN9LCB7ICAgMTUzNSwxMn0sIFwKKyAgICB7ICAgMzA3MSwxM30sIHsgICA4MTkyLDE0fSwgeyAgMTYzODQsMTV9LCB7ICAzMjc2OCwxNn0gfQorI2RlZmluZSBNVUxfRkZUX1RBQkxFM19TSVpFIDE2NAorI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMzcxMgorCisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgMjQ4ICAvKiBrID0gNSAqLworI2RlZmluZSBTUVJfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgMjQ4LCA1fSwgeyAgICAgMTcsIDZ9LCB7ICAgICAgOSwgNX0sIHsgICAgIDE5LCA2fSwgXAorICAgIHsgICAgIDE3LCA3fSwgeyAgICAgIDksIDZ9LCB7ICAgICAyMCwgN30sIHsgICAgIDExLCA2fSwgXAorICAgIHsgICAgIDIzLCA3fSwgeyAgICAgMTMsIDh9LCB7ICAgICAgNywgN30sIHsgICAgIDE5LCA4fSwgXAorICAgIHsgICAgIDExLCA3fSwgeyAgICAgMjUsIDl9LCB7ICAgICAgNywgOH0sIHsgICAgIDE1LCA3fSwgXAorICAgIHsgICAgIDMzLCA4fSwgeyAgICAgMTksIDd9LCB7ICAgICAzOSwgOH0sIHsgICAgIDI3LCA5fSwgXAorICAgIHsgICAgIDE1LCA4fSwgeyAgICAgMzksIDl9LCB7ICAgICAyMywgOH0sIHsgICAgIDQ3LDEwfSwgXAorICAgIHsgICAgIDE1LCA5fSwgeyAgICAgMzEsIDh9LCB7ICAgICA2MywgOX0sIHsgICAgIDM5LCA4fSwgXAorICAgIHsgICAgIDc5LCA5fSwgeyAgICAgNDcsMTB9LCB7ICAgICAzMSwgOX0sIHsgICAgIDYzLCA4fSwgXAorICAgIHsgICAgMTI3LCA5fSwgeyAgICAgNzEsIDh9LCB7ICAgIDE0MywgOX0sIHsgICAgIDc5LDEwfSwgXAorICAgIHsgICAgIDQ3LCA5fSwgeyAgICAgOTUsMTF9LCB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA5fSwgXAorICAgIHsgICAgMTI3LCA4fSwgeyAgICAyNTUsIDd9LCB7ICAgIDUxMSwgOX0sIHsgICAgMTQzLDEwfSwgXAorICAgIHsgICAgIDc5LCA5fSwgeyAgICAxNTksIDh9LCB7ICAgIDMxOSwgOX0sIHsgICAgMTc1LCA4fSwgXAorICAgIHsgICAgMzUxLDEwfSwgeyAgICAgOTUsIDl9LCB7ICAgIDE5MSwgOH0sIHsgICAgMzgzLCA5fSwgXAorICAgIHsgICAgMjA3LCA4fSwgeyAgICA0MTUsIDd9LCB7ICAgIDgzMSwxMX0sIHsgICAgIDYzLDEwfSwgXAorICAgIHsgICAgMTI3LCA5fSwgeyAgICAyNTUsIDh9LCB7ICAgIDUxMSwxMH0sIHsgICAgMTQzLCA5fSwgXAorICAgIHsgICAgMjg3LCA4fSwgeyAgICA1NzUsMTB9LCB7ICAgIDE1OSwgOX0sIHsgICAgMzE5LDEwfSwgXAorICAgIHsgICAgMTc1LCA5fSwgeyAgICAzNTEsMTF9LCB7ICAgICA5NSwxMH0sIHsgICAgMTkxLCA5fSwgXAorICAgIHsgICAgMzgzLDEwfSwgeyAgICAyMDcsIDl9LCB7ICAgIDQxNSwgOH0sIHsgICAgODMxLDEyfSwgXAorICAgIHsgICAgIDYzLDExfSwgeyAgICAxMjcsMTB9LCB7ICAgIDI1NSwgOX0sIHsgICAgNTExLDEwfSwgXAorICAgIHsgICAgMjcxLCA5fSwgeyAgICA1NDMsMTB9LCB7ICAgIDI4NywgOX0sIHsgICAgNTc1LDExfSwgXAorICAgIHsgICAgMTU5LDEwfSwgeyAgICAzMTksIDl9LCB7ICAgIDYzOSwxMH0sIHsgICAgMzUxLCA5fSwgXAorICAgIHsgICAgNzAzLDExfSwgeyAgICAxOTEsMTB9LCB7ICAgIDM4MywgOX0sIHsgICAgNzY3LDEwfSwgXAorICAgIHsgICAgNDE1LCA5fSwgeyAgICA4MzEsMTF9LCB7ICAgIDIyMywxMH0sIHsgICAgNDQ3LCA5fSwgXAorICAgIHsgICAgODk1LDEyfSwgeyAgICAxMjcsMTF9LCB7ICAgIDI1NSwxMH0sIHsgICAgNTQzLDExfSwgXAorICAgIHsgICAgMjg3LDEwfSwgeyAgICA2MDcsMTF9LCB7ICAgIDMxOSwxMH0sIHsgICAgNjM5LDExfSwgXAorICAgIHsgICAgMzUxLDEwfSwgeyAgICA3MDMsIDl9LCB7ICAgMTQwNywxMn0sIHsgICAgMTkxLDExfSwgXAorICAgIHsgICAgMzgzLDEwfSwgeyAgICA3NjcsMTF9LCB7ICAgIDQxNSwxMH0sIHsgICAgODMxLDExfSwgXAorICAgIHsgICAgNDQ3LDEwfSwgeyAgICA4OTUsMTF9LCB7ICAgIDQ3OSwxM30sIHsgICAgMTI3LDEyfSwgXAorICAgIHsgICAgMjU1LDExfSwgeyAgICA1NDMsMTB9LCB7ICAgMTA4NywxMX0sIHsgICAgNjA3LDEyfSwgXAorICAgIHsgICAgMzE5LDExfSwgeyAgICA2MzksMTB9LCB7ICAgMTI3OSwxMX0sIHsgICAgNzAzLDEwfSwgXAorICAgIHsgICAxNDA3LDEyfSwgeyAgICAzODMsMTF9LCB7ICAgIDgzMSwxMn0sIHsgICAgNDQ3LDExfSwgXAorICAgIHsgICAgOTU5LDEzfSwgeyAgICAyNTUsMTJ9LCB7ICAgIDUxMSwxMX0sIHsgICAxMDg3LDEyfSwgXAorICAgIHsgICAgNTc1LDExfSwgeyAgIDEyMTUsMTJ9LCB7ICAgIDYzOSwxMX0sIHsgICAxMjc5LDEyfSwgXAorICAgIHsgICAgNzAzLDExfSwgeyAgIDE0MDcsMTN9LCB7ICAgIDM4MywxMn0sIHsgICAgOTU5LDE0fSwgXAorICAgIHsgICAgMjU1LDEzfSwgeyAgICA1MTEsMTJ9LCB7ICAgMTIxNSwxM30sIHsgICAgNjM5LDEyfSwgXAorICAgIHsgICAxNDcxLDEzfSwgeyAgICA3NjcsMTJ9LCB7ICAgMTU5OSwxM30sIHsgICAgODk1LDEyfSwgXAorICAgIHsgICAxOTE5LDE0fSwgeyAgICA1MTEsMTN9LCB7ICAgMTAyMywxMn0sIHsgICAyMTExLDEzfSwgXAorICAgIHsgICAxMTUxLDEyfSwgeyAgIDI0MzEsMTN9LCB7ICAgMTQwNywxNH0sIHsgICAgNzY3LDEzfSwgXAorICAgIHsgICAxNTM1LDEyfSwgeyAgIDMxOTksMTN9LCB7ICAgODE5MiwxNH0sIHsgIDE2Mzg0LDE1fSwgXAorICAgIHsgIDMyNzY4LDE2fSB9CisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzX1NJWkUgMTU3CisjZGVmaW5lIFNRUl9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAyNjg4CisKKyNkZWZpbmUgTVVMTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDIKKyNkZWZpbmUgTVVMTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgNTAKKyNkZWZpbmUgTVVMTE9fTVVMX05fVEhSRVNIT0xEICAgICAgICAgICAgIDY2MzMKKyNkZWZpbmUgU1FSTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDQKKyNkZWZpbmUgU1FSTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAxMTUKKyNkZWZpbmUgU1FSTE9fU1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDUyNzQKKworI2RlZmluZSBEQ19ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA0MworI2RlZmluZSBEQ19ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgIDE0MQorI2RlZmluZSBEQ19CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA1MQorI2RlZmluZSBEQ19CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDEyMAorCisjZGVmaW5lIElOVl9NVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgIDQzCisjZGVmaW5lIElOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAgMTczCisjZGVmaW5lIElOVl9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTU2CisKKyNkZWZpbmUgQklOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAyMDQKKyNkZWZpbmUgUkVEQ18xX1RPX1JFRENfTl9USFJFU0hPTEQgICAgICAgICAgNTEKKworI2RlZmluZSBNVV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTAxNworI2RlZmluZSBNVV9ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgMTA3OAorI2RlZmluZSBNVVBJX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICA4NAorI2RlZmluZSBNVV9CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDg3MgorI2RlZmluZSBNVV9CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTA3OAorCisjZGVmaW5lIFBPV01fU0VDX1RBQkxFICAxLDE2LDEwMiw0MjgsMTM3OAorCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgIDI3CisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgNzgxCisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAxNTA1CisKKyNkZWZpbmUgRkFDX0RTQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAxNDEKKyNkZWZpbmUgRkFDX09ERF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgMzQKKworI2RlZmluZSBNQVRSSVgyMl9TVFJBU1NFTl9USFJFU0hPTEQgICAgICAgICAxMgorI2RlZmluZSBIR0NEX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgIDExOAorI2RlZmluZSBIR0NEX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE2MQorI2RlZmluZSBIR0NEX1JFRFVDRV9USFJFU0hPTEQgICAgICAgICAgICAgMTY3OQorI2RlZmluZSBHQ0RfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDM1MQorI2RlZmluZSBHQ0RFWFRfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDI3MworI2RlZmluZSBKQUNPQklfQkFTRV9NRVRIT0QgICAgICAgICAgICAgICAgICAgNApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvaW52ZXJ0X2xpbWIuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvaW52ZXJ0X2xpbWIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMmJmZTUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi9pbnZlcnRfbGltYi5hc20KQEAgLTAsMCArMSwxNDIgQEAKK2RubCAgUG93ZXJQQy0zMiBtcG5faW52ZXJ0X2xpbWIgLS0gSW52ZXJ0IGEgbm9ybWFsaXplZCBsaW1iLgorCitkbmwgIENvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJCSBjeWNsZXMvbGltYgorQyA2MDNlOgkJICAgICAgPworQyA2MDRlOgkJICAgICAgPworQyA3NXggKEczKToJICAgICAgPworQyA3NDAwLDc0MTAgKEc0KTogICAgID8KK0MgNzQ0eCw3NDV4IChHNCspOiAgIDMyCitDIHBvd2VyNC9wcGM5NzA6ICAgICAgPworQyBwb3dlcjU6CSAgICAgID8KKworRVhURVJOKGFwcHJveF90YWIpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5faW52ZXJ0X2xpbWIpCisJcmx3aW5tCXI2LCByMywgMTEsIDIyLCAzMAlDIGV4dHJhY3QgYml0cyAzMC4uMjIgdG8gcG9zIDJeMQorCXNyd2kJcjEwLCByMywgMTEJCUMgZXh0cmFjdCBiaXRzIDMxLi4xMQorCUxFQSgJcjksIGFwcHJveF90YWIpCQlDIE4uQi4gY2xvYmJlcnMgcjAgZm9yIEVMRiBhbmQgRGFyd2luCisJbGh6eAlyOSwgcjksIHI2CQlDIHcyCisJYWRkaQlyMCwgcjEwLCAxCisJbXVsbHcJcjExLCByOSwgcjkKKwlzbHdpCXI5LCByOSwgNAorCW11bGh3dQlyNywgcjExLCByMAorCXJsd2lubQlyMTEsIHIzLCAwLCAzMSwgMzEJQyBleHRyYWN0IGJpdCAwCisJYWRkaQlyMCwgcjksIC0xCisJc3J3aQlyOSwgcjMsIDEJCUMgZCA+PiAxCisJc3ViZglyMCwgcjcsIHIwCQlDIHcxCisJYWRkCXI5LCByOSwgcjExCQlDIGQzMQorCW11bGx3CXI5LCByMCwgcjkJCUMgdzEgKiBkMzEKKwlzcndpCXIxMCwgcjAsIDEJCUMgdzEgPj4gMQorCW5lZwlyMTEsIHIxMQorCWFuZAlyMTEsIHIxMCwgcjExCisJc3ViZglyMTEsIHI5LCByMTEKKwltdWxod3UJcjksIHIxMSwgcjAKKwlzbHdpCXIwLCByMCwgMTUKKwlzcndpCXI5LCByOSwgMQorCWFkZAlyMCwgcjksIHIwCQlDIHcwCisJbXVsbHcJcjEwLCByMCwgcjMKKwltdWxod3UJcjksIHIwLCByMworCWFkZGMJcjExLCByMTAsIHIzCisJYWRkZQlyMywgcjksIHIzCisJc3ViZglyMywgcjMsIHIwCisJYmxyCitFUElMT0dVRSgpCisKK0RFRl9PQkpFQ1QoYXBwcm94X3RhYikKKwkuc2hvcnQgMHg3ZmUxLDB4N2ZhMSwweDdmNjEsMHg3ZjIyLDB4N2VlMywweDdlYTQsMHg3ZTY1LDB4N2UyNworCS5zaG9ydCAweDdkZTksMHg3ZGFiLDB4N2Q2ZCwweDdkMzAsMHg3Y2YzLDB4N2NiNiwweDdjNzksMHg3YzNkCisJLnNob3J0IDB4N2MwMCwweDdiYzQsMHg3Yjg5LDB4N2I0ZCwweDdiMTIsMHg3YWQ3LDB4N2E5YywweDdhNjEKKwkuc2hvcnQgMHg3YTI3LDB4NzllYywweDc5YjIsMHg3OTc5LDB4NzkzZiwweDc5MDYsMHg3OGNjLDB4Nzg5NAorCS5zaG9ydCAweDc4NWIsMHg3ODIyLDB4NzdlYSwweDc3YjIsMHg3NzdhLDB4Nzc0MiwweDc3MGIsMHg3NmQzCisJLnNob3J0IDB4NzY5YywweDc2NjUsMHg3NjJmLDB4NzVmOCwweDc1YzIsMHg3NThjLDB4NzU1NiwweDc1MjAKKwkuc2hvcnQgMHg3NGVhLDB4NzRiNSwweDc0ODAsMHg3NDRiLDB4NzQxNiwweDczZTIsMHg3M2FkLDB4NzM3OQorCS5zaG9ydCAweDczNDUsMHg3MzExLDB4NzJkZCwweDcyYWEsMHg3Mjc3LDB4NzI0MywweDcyMTAsMHg3MWRlCisJLnNob3J0IDB4NzFhYiwweDcxNzksMHg3MTQ2LDB4NzExNCwweDcwZTIsMHg3MGIxLDB4NzA3ZiwweDcwNGUKKwkuc2hvcnQgMHg3MDFjLDB4NmZlYiwweDZmYmEsMHg2ZjhhLDB4NmY1OSwweDZmMjksMHg2ZWY5LDB4NmVjOAorCS5zaG9ydCAweDZlOTksMHg2ZTY5LDB4NmUzOSwweDZlMGEsMHg2ZGRiLDB4NmRhYiwweDZkN2QsMHg2ZDRlCisJLnNob3J0IDB4NmQxZiwweDZjZjEsMHg2Y2MyLDB4NmM5NCwweDZjNjYsMHg2YzM4LDB4NmMwYSwweDZiZGQKKwkuc2hvcnQgMHg2YmIwLDB4NmI4MiwweDZiNTUsMHg2YjI4LDB4NmFmYiwweDZhY2YsMHg2YWEyLDB4NmE3NgorCS5zaG9ydCAweDZhNDksMHg2YTFkLDB4NjlmMSwweDY5YzYsMHg2OTlhLDB4Njk2ZSwweDY5NDMsMHg2OTE4CisJLnNob3J0IDB4NjhlZCwweDY4YzIsMHg2ODk3LDB4Njg2YywweDY4NDIsMHg2ODE3LDB4NjdlZCwweDY3YzMKKwkuc2hvcnQgMHg2Nzk5LDB4Njc2ZiwweDY3NDUsMHg2NzFiLDB4NjZmMiwweDY2YzgsMHg2NjlmLDB4NjY3NgorCS5zaG9ydCAweDY2NGQsMHg2NjI0LDB4NjVmYywweDY1ZDMsMHg2NWFhLDB4NjU4MiwweDY1NWEsMHg2NTMyCisJLnNob3J0IDB4NjUwYSwweDY0ZTIsMHg2NGJhLDB4NjQ5MywweDY0NmIsMHg2NDQ0LDB4NjQxYywweDYzZjUKKwkuc2hvcnQgMHg2M2NlLDB4NjNhNywweDYzODEsMHg2MzVhLDB4NjMzMywweDYzMGQsMHg2MmU3LDB4NjJjMQorCS5zaG9ydCAweDYyOWEsMHg2Mjc1LDB4NjI0ZiwweDYyMjksMHg2MjAzLDB4NjFkZSwweDYxYjgsMHg2MTkzCisJLnNob3J0IDB4NjE2ZSwweDYxNDksMHg2MTI0LDB4NjBmZiwweDYwZGEsMHg2MGI2LDB4NjA5MSwweDYwNmQKKwkuc2hvcnQgMHg2MDQ5LDB4NjAyNCwweDYwMDAsMHg1ZmRjLDB4NWZiOCwweDVmOTUsMHg1ZjcxLDB4NWY0ZAorCS5zaG9ydCAweDVmMmEsMHg1ZjA3LDB4NWVlMywweDVlYzAsMHg1ZTlkLDB4NWU3YSwweDVlNTcsMHg1ZTM1CisJLnNob3J0IDB4NWUxMiwweDVkZWYsMHg1ZGNkLDB4NWRhYiwweDVkODgsMHg1ZDY2LDB4NWQ0NCwweDVkMjIKKwkuc2hvcnQgMHg1ZDAwLDB4NWNkZSwweDVjYmQsMHg1YzliLDB4NWM3YSwweDVjNTgsMHg1YzM3LDB4NWMxNgorCS5zaG9ydCAweDViZjUsMHg1YmQ0LDB4NWJiMywweDViOTIsMHg1YjcxLDB4NWI1MSwweDViMzAsMHg1YjEwCisJLnNob3J0IDB4NWFlZiwweDVhY2YsMHg1YWFmLDB4NWE4ZiwweDVhNmYsMHg1YTRmLDB4NWEyZiwweDVhMGYKKwkuc2hvcnQgMHg1OWVmLDB4NTlkMCwweDU5YjAsMHg1OTkxLDB4NTk3MiwweDU5NTIsMHg1OTMzLDB4NTkxNAorCS5zaG9ydCAweDU4ZjUsMHg1OGQ2LDB4NThiNywweDU4OTksMHg1ODdhLDB4NTg1YiwweDU4M2QsMHg1ODFmCisJLnNob3J0IDB4NTgwMCwweDU3ZTIsMHg1N2M0LDB4NTdhNiwweDU3ODgsMHg1NzZhLDB4NTc0YywweDU3MmUKKwkuc2hvcnQgMHg1NzExLDB4NTZmMywweDU2ZDUsMHg1NmI4LDB4NTY5YiwweDU2N2QsMHg1NjYwLDB4NTY0MworCS5zaG9ydCAweDU2MjYsMHg1NjA5LDB4NTVlYywweDU1Y2YsMHg1NWIyLDB4NTU5NiwweDU1NzksMHg1NTVkCisJLnNob3J0IDB4NTU0MCwweDU1MjQsMHg1NTA3LDB4NTRlYiwweDU0Y2YsMHg1NGIzLDB4NTQ5NywweDU0N2IKKwkuc2hvcnQgMHg1NDVmLDB4NTQ0MywweDU0MjgsMHg1NDBjLDB4NTNmMCwweDUzZDUsMHg1M2I5LDB4NTM5ZQorCS5zaG9ydCAweDUzODMsMHg1MzY4LDB4NTM0YywweDUzMzEsMHg1MzE2LDB4NTJmYiwweDUyZTAsMHg1MmM2CisJLnNob3J0IDB4NTJhYiwweDUyOTAsMHg1Mjc2LDB4NTI1YiwweDUyNDAsMHg1MjI2LDB4NTIwYywweDUxZjEKKwkuc2hvcnQgMHg1MWQ3LDB4NTFiZCwweDUxYTMsMHg1MTg5LDB4NTE2ZiwweDUxNTUsMHg1MTNiLDB4NTEyMQorCS5zaG9ydCAweDUxMDgsMHg1MGVlLDB4NTBkNSwweDUwYmIsMHg1MGEyLDB4NTA4OCwweDUwNmYsMHg1MDU2CisJLnNob3J0IDB4NTAzYywweDUwMjMsMHg1MDBhLDB4NGZmMSwweDRmZDgsMHg0ZmJmLDB4NGZhNiwweDRmOGUKKwkuc2hvcnQgMHg0Zjc1LDB4NGY1YywweDRmNDQsMHg0ZjJiLDB4NGYxMywweDRlZmEsMHg0ZWUyLDB4NGVjYQorCS5zaG9ydCAweDRlYjEsMHg0ZTk5LDB4NGU4MSwweDRlNjksMHg0ZTUxLDB4NGUzOSwweDRlMjEsMHg0ZTA5CisJLnNob3J0IDB4NGRmMSwweDRkZGEsMHg0ZGMyLDB4NGRhYSwweDRkOTMsMHg0ZDdiLDB4NGQ2NCwweDRkNGQKKwkuc2hvcnQgMHg0ZDM1LDB4NGQxZSwweDRkMDcsMHg0Y2YwLDB4NGNkOCwweDRjYzEsMHg0Y2FhLDB4NGM5MworCS5zaG9ydCAweDRjN2QsMHg0YzY2LDB4NGM0ZiwweDRjMzgsMHg0YzIxLDB4NGMwYiwweDRiZjQsMHg0YmRlCisJLnNob3J0IDB4NGJjNywweDRiYjEsMHg0YjlhLDB4NGI4NCwweDRiNmUsMHg0YjU4LDB4NGI0MSwweDRiMmIKKwkuc2hvcnQgMHg0YjE1LDB4NGFmZiwweDRhZTksMHg0YWQzLDB4NGFiZCwweDRhYTgsMHg0YTkyLDB4NGE3YworCS5zaG9ydCAweDRhNjYsMHg0YTUxLDB4NGEzYiwweDRhMjYsMHg0YTEwLDB4NDlmYiwweDQ5ZTUsMHg0OWQwCisJLnNob3J0IDB4NDliYiwweDQ5YTYsMHg0OTkwLDB4NDk3YiwweDQ5NjYsMHg0OTUxLDB4NDkzYywweDQ5MjcKKwkuc2hvcnQgMHg0OTEyLDB4NDhmZSwweDQ4ZTksMHg0OGQ0LDB4NDhiZiwweDQ4YWIsMHg0ODk2LDB4NDg4MQorCS5zaG9ydCAweDQ4NmQsMHg0ODU4LDB4NDg0NCwweDQ4MmYsMHg0ODFiLDB4NDgwNywweDQ3ZjMsMHg0N2RlCisJLnNob3J0IDB4NDdjYSwweDQ3YjYsMHg0N2EyLDB4NDc4ZSwweDQ3N2EsMHg0NzY2LDB4NDc1MiwweDQ3M2UKKwkuc2hvcnQgMHg0NzJhLDB4NDcxNywweDQ3MDMsMHg0NmVmLDB4NDZkYiwweDQ2YzgsMHg0NmI0LDB4NDZhMQorCS5zaG9ydCAweDQ2OGQsMHg0NjdhLDB4NDY2NiwweDQ2NTMsMHg0NjQwLDB4NDYyYywweDQ2MTksMHg0NjA2CisJLnNob3J0IDB4NDVmMywweDQ1ZTAsMHg0NWNkLDB4NDViYSwweDQ1YTcsMHg0NTk0LDB4NDU4MSwweDQ1NmUKKwkuc2hvcnQgMHg0NTViLDB4NDU0OCwweDQ1MzYsMHg0NTIzLDB4NDUxMCwweDQ0ZmUsMHg0NGViLDB4NDRkOAorCS5zaG9ydCAweDQ0YzYsMHg0NGIzLDB4NDRhMSwweDQ0OGYsMHg0NDdjLDB4NDQ2YSwweDQ0NTgsMHg0NDQ1CisJLnNob3J0IDB4NDQzMywweDQ0MjEsMHg0NDBmLDB4NDNmZCwweDQzZWIsMHg0M2Q5LDB4NDNjNywweDQzYjUKKwkuc2hvcnQgMHg0M2EzLDB4NDM5MSwweDQzN2YsMHg0MzZkLDB4NDM1YywweDQzNGEsMHg0MzM4LDB4NDMyNworCS5zaG9ydCAweDQzMTUsMHg0MzAzLDB4NDJmMiwweDQyZTAsMHg0MmNmLDB4NDJiZCwweDQyYWMsMHg0MjliCisJLnNob3J0IDB4NDI4OSwweDQyNzgsMHg0MjY3LDB4NDI1NiwweDQyNDQsMHg0MjMzLDB4NDIyMiwweDQyMTEKKwkuc2hvcnQgMHg0MjAwLDB4NDFlZiwweDQxZGUsMHg0MWNkLDB4NDFiYywweDQxYWIsMHg0MTlhLDB4NDE4YQorCS5zaG9ydCAweDQxNzksMHg0MTY4LDB4NDE1NywweDQxNDcsMHg0MTM2LDB4NDEyNSwweDQxMTUsMHg0MTA0CisJLnNob3J0IDB4NDBmNCwweDQwZTMsMHg0MGQzLDB4NDBjMiwweDQwYjIsMHg0MGEyLDB4NDA5MSwweDQwODEKKwkuc2hvcnQgMHg0MDcxLDB4NDA2MSwweDQwNTAsMHg0MDQwLDB4NDAzMCwweDQwMjAsMHg0MDEwLDB4NDAwMAorRU5EX09CSkVDVChhcHByb3hfdGFiKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi9sc2hpZnQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvbHNoaWZ0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTg1ZDRkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvbHNoaWZ0LmFzbQpAQCAtMCwwICsxLDE2OCBAQAorZG5sICBQb3dlclBDLTMyIG1wbl9sc2hpZnQgLS0gU2hpZnQgYSBudW1iZXIgbGVmdC4KKworZG5sICBDb3B5cmlnaHQgMTk5NSwgMTk5OCwgMjAwMCwgMjAwMi0yMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgNjAzZTogICAgICAgICAgICA/CitDIDYwNGU6ICAgICAgICAgICAgMy4wCitDIDc1eCAoRzMpOiAgICAgICAgMy4wCitDIDc0MDAsNzQxMCAoRzQpOiAgMy4wCitDIDc0NDUsNzQ1NSAoRzQrKTogMi41CitDIDc0NDcsNzQ1NyAoRzQrKTogMi4yNQorQyBwb3dlcjQvcHBjOTcwOiAgIDIuNQorQyBwb3dlcjU6ICAgICAgICAgIDIuNQorCitDIElOUFVUIFBBUkFNRVRFUlMKK0MgcnAJcjMKK0MgdXAJcjQKK0MgbglyNQorQyBjbnQJcjYKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9sc2hpZnQpCisJY21wd2kJY3IwLCByNSwgMzAJQyBtb3JlIHRoYW4gMzAgbGltYnM/CisJc2x3aQlyMCwgcjUsIDIKKwlhZGQJcjQsIHI0LCByMAlDIG1ha2UgcjQgcG9pbnQgYXQgZW5kIG9mIHMxCisJYWRkCXI3LCByMywgcjAJQyBtYWtlIHI3IHBvaW50IGF0IGVuZCBvZiByZXMKKwliZ3QJTChCSUcpCQlDIGJyYW5jaCBpZiBtb3JlIHRoYW4gMTIgbGltYnMKKworCW10Y3RyCXI1CQlDIGNvcHkgc2l6ZSBpbnRvIENUUgorCXN1YmZpYwlyOCwgcjYsIDMyCisJbHd6dQlyMTEsIC00KHI0KQlDIGxvYWQgZmlyc3QgczEgbGltYgorCXNydwlyMywgcjExLCByOAlDIGNvbXB1dGUgZnVuY3Rpb24gcmV0dXJuIHZhbHVlCisJYmR6CUwoZW5kMSkKKworTChvb3ApOglsd3p1CXIxMCwgLTQocjQpCisJc2x3CXI5LCByMTEsIHI2CisJc3J3CXIxMiwgcjEwLCByOAorCW9yCXI5LCByOSwgcjEyCisJc3R3dQlyOSwgLTQocjcpCisJYmR6CUwoZW5kMikKKwlsd3p1CXIxMSwgLTQocjQpCisJc2x3CXI5LCByMTAsIHI2CisJc3J3CXIxMiwgcjExLCByOAorCW9yCXI5LCByOSwgcjEyCisJc3R3dQlyOSwgLTQocjcpCisJYmRueglMKG9vcCkKKworTChlbmQxKToKKwlzbHcJcjAsIHIxMSwgcjYKKwlzdHcJcjAsIC00KHI3KQorCWJscgorTChlbmQyKToKKwlzbHcJcjAsIHIxMCwgcjYKKwlzdHcJcjAsIC00KHI3KQorCWJscgorCitMKEJJRyk6CisJc3R3dQlyMSwgLTQ4KHIxKQorCXN0bXcJcjI0LCA4KHIxKQlDIHNhdmUgcmVnaXN0ZXJzIHdlIGFyZSBzdXBwb3NlZCB0byBwcmVzZXJ2ZQorCWx3enUJcjksIC00KHI0KQorCXN1YmZpYwlyOCwgcjYsIDMyCisJc3J3CXIzLCByOSwgcjgJQyBjb21wdXRlIGZ1bmN0aW9uIHJldHVybiB2YWx1ZQorCXNsdwlyMCwgcjksIHI2CisJYWRkaQlyNSwgcjUsIC0xCisKKwlhbmRpLglyMTAsIHI1LCAzCUMgY291bnQgZm9yIHNwaWxsIGxvb3AKKwliZXEJTChlKQorCW10Y3RyCXIxMAorCWx3enUJcjI4LCAtNChyNCkKKwliZHoJTCh4ZTApCisKK0wobG9vcDApOgorCXNsdwlyMTIsIHIyOCwgcjYKKwlzcncJcjI0LCByMjgsIHI4CisJbHd6dQlyMjgsIC00KHI0KQorCW9yCXIyNCwgcjAsIHIyNAorCXN0d3UJcjI0LCAtNChyNykKKwltcglyMCwgcjEyCisJYmRueglMKGxvb3AwKQlDIHRha2VuIGF0IG1vc3Qgb25jZSEKKworTCh4ZTApOglzbHcJcjEyLCByMjgsIHI2CisJc3J3CXIyNCwgcjI4LCByOAorCW9yCXIyNCwgcjAsIHIyNAorCXN0d3UJcjI0LCAtNChyNykKKwltcglyMCwgcjEyCisKK0woZSk6CXNyd2kJcjUsIHI1LCAyCUMgY291bnQgZm9yIHVucm9sbGVkIGxvb3AKKwlhZGRpCXI1LCByNSwgLTEKKwltdGN0cglyNQorCWx3eglyMjgsIC00KHI0KQorCWx3eglyMjksIC04KHI0KQorCWx3eglyMzAsIC0xMihyNCkKKwlsd3p1CXIzMSwgLTE2KHI0KQorCitMKGxvb3BVKToKKwlzbHcJcjksIHIyOCwgcjYKKwlzcncJcjI0LCByMjgsIHI4CisJbHd6CXIyOCwgLTQocjQpCisJc2x3CXIxMCwgcjI5LCByNgorCXNydwlyMjUsIHIyOSwgcjgKKwlsd3oJcjI5LCAtOChyNCkKKwlzbHcJcjExLCByMzAsIHI2CisJc3J3CXIyNiwgcjMwLCByOAorCWx3eglyMzAsIC0xMihyNCkKKwlzbHcJcjEyLCByMzEsIHI2CisJc3J3CXIyNywgcjMxLCByOAorCWx3enUJcjMxLCAtMTYocjQpCisJb3IJcjI0LCByMCwgcjI0CisJc3R3CXIyNCwgLTQocjcpCisJb3IJcjI1LCByOSwgcjI1CisJc3R3CXIyNSwgLTgocjcpCisJb3IJcjI2LCByMTAsIHIyNgorCXN0dwlyMjYsIC0xMihyNykKKwlvcglyMjcsIHIxMSwgcjI3CisJc3R3dQlyMjcsIC0xNihyNykKKwltcglyMCwgcjEyCisJYmRueglMKGxvb3BVKQorCisJc2x3CXI5LCByMjgsIHI2CisJc3J3CXIyNCwgcjI4LCByOAorCXNsdwlyMTAsIHIyOSwgcjYKKwlzcncJcjI1LCByMjksIHI4CisJc2x3CXIxMSwgcjMwLCByNgorCXNydwlyMjYsIHIzMCwgcjgKKwlzbHcJcjEyLCByMzEsIHI2CisJc3J3CXIyNywgcjMxLCByOAorCW9yCXIyNCwgcjAsIHIyNAorCXN0dwlyMjQsIC00KHI3KQorCW9yCXIyNSwgcjksIHIyNQorCXN0dwlyMjUsIC04KHI3KQorCW9yCXIyNiwgcjEwLCByMjYKKwlzdHcJcjI2LCAtMTIocjcpCisJb3IJcjI3LCByMTEsIHIyNworCXN0dwlyMjcsIC0xNihyNykKKworCXN0dwlyMTIsIC0yMChyNykKKwlsbXcJcjI0LCA4KHIxKQlDIHJlc3RvcmUgcmVnaXN0ZXJzCisJYWRkaQlyMSwgcjEsIDQ4CisJYmxyCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi9sc2hpZnRjLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzMyL2xzaGlmdGMuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2ODNkZWYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi9sc2hpZnRjLmFzbQpAQCAtMCwwICsxLDE3MCBAQAorZG5sICBQb3dlclBDLTMyIG1wbl9sc2hpZnRjLgorCitkbmwgIENvcHlyaWdodCAxOTk1LCAxOTk4LCAyMDAwLCAyMDAyLTIwMDUsIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgICAgICAgICBjeWNsZXMvbGltYgorQyA2MDNlOiAgICAgICAgICAgID8KK0MgNjA0ZTogICAgICAgICAgICAzLjAKK0MgNzV4IChHMyk6ICAgICAgICAzLjAKK0MgNzQwMCw3NDEwIChHNCk6ICAzLjAKK0MgNzQ0NSw3NDU1IChHNCspOiAyLjUKK0MgNzQ0Nyw3NDU3IChHNCspOiAyLjI1CitDIHBvd2VyNC9wcGM5NzA6ICAgMi41CitDIHBvd2VyNTogICAgICAgICAgMi41CisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyBycAlyMworQyB1cAlyNAorQyBuCXI1CitDIGNudAlyNgorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2xzaGlmdGMpCisJY21wd2kJY3IwLCByNSwgMzAJQyBtb3JlIHRoYW4gMzAgbGltYnM/CisJc2x3aQlyMCwgcjUsIDIKKwlhZGQJcjQsIHI0LCByMAlDIG1ha2UgcjQgcG9pbnQgYXQgZW5kIG9mIHMxCisJYWRkCXI3LCByMywgcjAJQyBtYWtlIHI3IHBvaW50IGF0IGVuZCBvZiByZXMKKwliZ3QJTChCSUcpCQlDIGJyYW5jaCBpZiBtb3JlIHRoYW4gMTIgbGltYnMKKworCW10Y3RyCXI1CQlDIGNvcHkgc2l6ZSBpbnRvIENUUgorCXN1YmZpYwlyOCwgcjYsIDMyCisJbHd6dQlyMTEsIC00KHI0KQlDIGxvYWQgZmlyc3QgczEgbGltYgorCXNydwlyMywgcjExLCByOAlDIGNvbXB1dGUgZnVuY3Rpb24gcmV0dXJuIHZhbHVlCisJYmR6CUwoZW5kMSkKKworTChvb3ApOglsd3p1CXIxMCwgLTQocjQpCisJc2x3CXI5LCByMTEsIHI2CisJc3J3CXIxMiwgcjEwLCByOAorCW5vcglyOSwgcjksIHIxMgorCXN0d3UJcjksIC00KHI3KQorCWJkeglMKGVuZDIpCisJbHd6dQlyMTEsIC00KHI0KQorCXNsdwlyOSwgcjEwLCByNgorCXNydwlyMTIsIHIxMSwgcjgKKwlub3IJcjksIHI5LCByMTIKKwlzdHd1CXI5LCAtNChyNykKKwliZG56CUwob29wKQorCitMKGVuZDEpOgorCXNsdwlyMCwgcjExLCByNgorCW5vcglyMCwgcjAsIHIwCisJc3R3CXIwLCAtNChyNykKKwlibHIKK0woZW5kMik6CisJc2x3CXIwLCByMTAsIHI2CisJbm9yCXIwLCByMCwgcjAKKwlzdHcJcjAsIC00KHI3KQorCWJscgorCitMKEJJRyk6CisJc3R3dQlyMSwgLTQ4KHIxKQorCXN0bXcJcjI0LCA4KHIxKQlDIHNhdmUgcmVnaXN0ZXJzIHdlIGFyZSBzdXBwb3NlZCB0byBwcmVzZXJ2ZQorCWx3enUJcjksIC00KHI0KQorCXN1YmZpYwlyOCwgcjYsIDMyCisJc3J3CXIzLCByOSwgcjgJQyBjb21wdXRlIGZ1bmN0aW9uIHJldHVybiB2YWx1ZQorCXNsdwlyMCwgcjksIHI2CisJYWRkaQlyNSwgcjUsIC0xCisKKwlhbmRpLglyMTAsIHI1LCAzCUMgY291bnQgZm9yIHNwaWxsIGxvb3AKKwliZXEJTChlKQorCW10Y3RyCXIxMAorCWx3enUJcjI4LCAtNChyNCkKKwliZHoJTCh4ZTApCisKK0wobG9vcDApOgorCXNsdwlyMTIsIHIyOCwgcjYKKwlzcncJcjI0LCByMjgsIHI4CisJbHd6dQlyMjgsIC00KHI0KQorCW5vcglyMjQsIHIwLCByMjQKKwlzdHd1CXIyNCwgLTQocjcpCisJbXIJcjAsIHIxMgorCWJkbnoJTChsb29wMCkJQyB0YWtlbiBhdCBtb3N0IG9uY2UhCisKK0woeGUwKToJc2x3CXIxMiwgcjI4LCByNgorCXNydwlyMjQsIHIyOCwgcjgKKwlub3IJcjI0LCByMCwgcjI0CisJc3R3dQlyMjQsIC00KHI3KQorCW1yCXIwLCByMTIKKworTChlKToJc3J3aQlyNSwgcjUsIDIJQyBjb3VudCBmb3IgdW5yb2xsZWQgbG9vcAorCWFkZGkJcjUsIHI1LCAtMQorCW10Y3RyCXI1CisJbHd6CXIyOCwgLTQocjQpCisJbHd6CXIyOSwgLTgocjQpCisJbHd6CXIzMCwgLTEyKHI0KQorCWx3enUJcjMxLCAtMTYocjQpCisKK0wobG9vcFUpOgorCXNsdwlyOSwgcjI4LCByNgorCXNydwlyMjQsIHIyOCwgcjgKKwlsd3oJcjI4LCAtNChyNCkKKwlzbHcJcjEwLCByMjksIHI2CisJc3J3CXIyNSwgcjI5LCByOAorCWx3eglyMjksIC04KHI0KQorCXNsdwlyMTEsIHIzMCwgcjYKKwlzcncJcjI2LCByMzAsIHI4CisJbHd6CXIzMCwgLTEyKHI0KQorCXNsdwlyMTIsIHIzMSwgcjYKKwlzcncJcjI3LCByMzEsIHI4CisJbHd6dQlyMzEsIC0xNihyNCkKKwlub3IJcjI0LCByMCwgcjI0CisJc3R3CXIyNCwgLTQocjcpCisJbm9yCXIyNSwgcjksIHIyNQorCXN0dwlyMjUsIC04KHI3KQorCW5vcglyMjYsIHIxMCwgcjI2CisJc3R3CXIyNiwgLTEyKHI3KQorCW5vcglyMjcsIHIxMSwgcjI3CisJc3R3dQlyMjcsIC0xNihyNykKKwltcglyMCwgcjEyCisJYmRueglMKGxvb3BVKQorCisJc2x3CXI5LCByMjgsIHI2CisJc3J3CXIyNCwgcjI4LCByOAorCXNsdwlyMTAsIHIyOSwgcjYKKwlzcncJcjI1LCByMjksIHI4CisJc2x3CXIxMSwgcjMwLCByNgorCXNydwlyMjYsIHIzMCwgcjgKKwlzbHcJcjEyLCByMzEsIHI2CisJc3J3CXIyNywgcjMxLCByOAorCW5vcglyMjQsIHIwLCByMjQKKwlzdHcJcjI0LCAtNChyNykKKwlub3IJcjI1LCByOSwgcjI1CisJc3R3CXIyNSwgLTgocjcpCisJbm9yCXIyNiwgcjEwLCByMjYKKwlzdHcJcjI2LCAtMTIocjcpCisJbm9yCXIyNywgcjExLCByMjcKKwlzdHcJcjI3LCAtMTYocjcpCisJbm9yCXIxMiwgcjEyLCByMTIKKwlzdHcJcjEyLCAtMjAocjcpCisJbG13CXIyNCwgOChyMSkJQyByZXN0b3JlIHJlZ2lzdGVycworCWFkZGkJcjEsIHIxLCA0OAorCWJscgorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvbW9kXzM0bHN1YjEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvbW9kXzM0bHN1YjEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkN2ZlNGQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi9tb2RfMzRsc3ViMS5hc20KQEAgLTAsMCArMSwxNDUgQEAKK2RubCAgUG93ZXJQQy0zMiBtcG5fbW9kXzM0bHN1YjEgLS0gbXBuIHJlbWFpbmRlciBtb2QgMl4yNC0xLgorCitkbmwgIENvcHlyaWdodCAyMDAyLCAyMDAzLCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQyAgICAgICAgICAgICAgICBjeWNsZXMvbGltYgorQyA2MDNlOiAgICAgICAgICAgID8KK0MgNjA0ZTogICAgICAgICAgICAzCitDIDc1eCAoRzMpOiAgICAgICAgMworQyA3NDAwLDc0MTAgKEc0KTogIDMKK0MgNzQ0eCw3NDV4IChHNCspOiAzCitDIHBvd2VyNC9wcGM5NzA6ICAgMi41CitDIHBvd2VyNTogICAgICAgICAgMi41CisKK0MgbXBfbGltYl90IG1wbl9tb2RfMzRsc3ViMSAobXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUpCitDCitDIFRoZXJlIHNlZW1zIG5vIG5lZWQgdG8gc2NoZWR1bGUgdGhlIGxvYWRzIGJhY2ssIHRoZSBjb2RlIGlzIHN0aWxsIDMuMCBjL2wKK0Mgb24gNzUwLzc0MDAgbm8gbWF0dGVyIHdoZXJlIHRoZXkncmUgcGxhY2VkLgorQworQyBBbHRlcm5hdGl2ZXM6CitDCitDIEZldGNoaW5nIGhhbGYgd29yZHMgd291bGQgYWxsb3cgYWRkIGluc3RlYWQgZm9yIGFjY3VtdWxhdGluZywgaW5zdGVhZCBvZgorQyBhZGRlIGFuZCBpdHMgc2VyaWFsaXphdGlvbi4gIEFuIG91dGVyIGxvb3Agd291bGQgYmUgcmVxdWlyZWQgdGhvdWdoLCBzaW5jZQorQyAyXjE2IGhhbGZ3b3JkcyBjYW4gb3ZlcmZsb3cuICBsaHorYWRkIHdvdWxkIGJlIDIuMCBjL2wsIGJ1dCBpZiB0aGVyZSdzCitDIGFsc28gYSBiZHogb3IgYmRueiBmb3IgZWFjaCBhbmQgYSBwb2ludGVyIHVwZGF0ZSBzYXkgZXZlcnkgdGhyZWUgbGltYnMKK0MgdGhlbiB0aGUgdG90YWwgd291bGQgYmUgMi42NyBjL2wgd2hpY2ggaXNuJ3QgbXVjaCBmYXN0ZXIgdGhhbiB0aGUgY3VycmVudAorQyBzaW1wbGVyIGNvZGUuCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fbW9kXzM0bHN1YjEpCisKKwlDIHIzCXNyYworCUMgcjQJc2l6ZQorCisJbXRjdHIJcjQKKwlhZGRpYwlyNiwgcjMsIDgJCUMgJnNyY1syXSwgYW5kIGNsZWFyIENBCisKKwlsd3oJcjMsIDAocjMpCQlDIGFjYzAgPSBzcmNbMF0KKwliZHoJTChkb25lKQorCisJbHd6CXI0LCAtNChyNikJCUMgYWNjMSA9IHNyY1sxXQorCWJkeglMKHR3bykKKworCWx3eglyNSwgMChyNikJCUMgYWNjMiA9IHNyY1syXQorCWxpcwlyNywgMAkJCUMgbm8gY2FycnkgaWYganVzdCB0aHJlZSBsaW1icworCisJYmR6CUwodGhyZWUpCisJbGlzCXI3LCAxCQkJQyAweDEwMDAwIGNhcnJ5IHBvcworCitMKHRvcCk6CisJQyByMwlhY2MwCisJQyByNAlhY2MxCisJQyByNQlhY2MyCisJQyByNglzcmMsIGluY3JlbWVudGluZworCUMgcjcJY2FycnkgcG9zCisKKwlsd3oJcjAsIDQocjYpCisJYWRkZQlyMywgcjMsIHIwCisJYmR6CUwoZW5kMCkKKworCWx3eglyMCwgOChyNikKKwlhZGRlCXI0LCByNCwgcjAKKwliZHoJTChlbmQxKQorCisJbHd6dQlyMCwgMTIocjYpCisJYWRkZQlyNSwgcjUsIHIwCisJYmRueglMKHRvcCkKKworCisJc3J3aQlyNywgcjcsIDgKK0woZW5kMCk6CisJc3J3aQlyNywgcjcsIDgKK0woZW5kMSk6CisJc3ViZmUJcjAsIHIwLCByMAkJQyAtMSBpZiBub3QgQ0EKKworCWFuZGMJcjcsIHI3LCByMAkJQyBmaW5hbCBjYXJyeSwgMHgxMDAwMCwgMHgxMDAsIDEgb3IgMAorTCh0aHJlZSk6CisJcmx3aW5tCXI2LCByMywgMCw4LDMxCQlDIGFjYzAgbG93CisKKwlhZGQJcjcsIHI3LCByNgorCXJsd2lubQlyNiwgcjMsIDgsMjQsMzEJCUMgYWNjMCBoaWdoCisKKwlhZGQJcjcsIHI3LCByNgorCXJsd2lubQlyNiwgcjQsIDgsOCwyMwkJQyBhY2MxIGxvdworCisJYWRkCXI3LCByNywgcjYKKwlybHdpbm0JcjYsIHI0LCAxNiwxNiwzMQlDIGFjYzEgaGlnaAorCisJYWRkCXI3LCByNywgcjYKKwlybHdpbm0JcjYsIHI1LCAxNiw4LDE1CQlDIGFjYzIgbG93CisKKwlhZGQJcjcsIHI3LCByNgorCXJsd2lubQlyNiwgcjUsIDI0LDgsMzEJCUMgYWNjMiBoaWdoCisKKwlhZGQJcjMsIHI3LCByNgorCitMKGRvbmUpOgorCWJscgorCitMKHR3byk6CisJQyByMwlhY2MwCisJQyByNAlhY2MxCisKKwlybHdpbm0JcjUsIHIzLCA4LDI0LDMxCQlDIGFjYzAgaGlnaAorCXJsd2lubQlyMywgcjMsIDAsOCwzMQkJQyBhY2MwIGxvdworCisJYWRkCXIzLCByMywgcjUJCUMgYWNjMCBoaWdoICsgbG93CisJcmx3aW5tCXI1LCByNCwgMTYsMTYsMzEJQyBhY2MxIGhpZ2gKKworCWFkZAlyMywgcjMsIHI1CQlDIGFkZCBhY2MxIGhpZ2gKKwlybHdpbm0JcjUsIHI0LCA4LDgsMjMJCUMgYWNjMSBsb3cKKworCWFkZAlyMywgcjMsIHI1CQlDIGFkZCBhY2MxIGxvdworCisJYmxyCisKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzMyL21vZGUxby5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi9tb2RlMW8uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YTZiNWUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi9tb2RlMW8uYXNtCkBAIC0wLDAgKzEsMTI3IEBACitkbmwgIFBvd2VyUEMtMzIgbXBuX21vZGV4YWN0XzFfb2RkIC0tIG1wbiBieSBsaW1iIGV4YWN0IHJlbWFpbmRlci4KKworZG5sICBDb3B5cmlnaHQgMjAwMiwgMjAwMywgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MgICAgICAgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgNjAzZTogICAgICAgICAgICAgPworQyA2MDRlOiAgICAgICAgICAgICA2LjAKK0MgNzV4IChHMyk6ICAgICAgICAgNi4wLTEzLjAsIGRlcGVuZGluZyBvbiBkaXZpc29yCitDIDc0MDAsNzQxMCAoRzQpOiAgIDYuMC0xMy4wLCBkZXBlbmRpbmcgb24gZGl2aXNvcgorQyA3NDR4LDc0NXggKEc0Kyk6ICA4LjAtMTAuMCwgZGVwZW5kaW5nIG9uIGRpdmlzb3IKK0MgcG93ZXI0L3BwYzk3MDogICAxMi4wCitDIHBvd2VyNTogICAgICAgICAgMTIuMAorCisKK0MgbXBfbGltYl90IG1wbl9tb2RleGFjdF8xX29kZCAobXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUsCitDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wX2xpbWJfdCBkaXZpc29yKTsKK0MgbXBfbGltYl90IG1wbl9tb2RleGFjdF8xY19vZGQgKG1wX3NyY3B0ciBzcmMsIG1wX3NpemVfdCBzaXplLAorQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBfbGltYl90IGRpdmlzb3IsIG1wX2xpbWJfdCBjYXJyeSk7CitDCitDIEZvciBQSUMsIHRoZSBpbnZlcnNlIGlzIGVzdGFibGlzaGVkIGFyaXRobWV0aWNhbGx5IHNpbmNlIGl0IG1lYXN1cmVzIGFib3V0CitDIDUgY3ljbGVzIGZhc3RlciB0aGFuIHRoZSBub25zZW5zZSBuZWVkZWQgdG8gYWNjZXNzIGJpbnZlcnRfbGltYl90YWJsZSBpbgorQyBTVlI0IG9yIERhcndpbiBzdHlsZSBQSUMuICBBSVggbWlnaHQgYmUgYmV0dGVyLCBzaW5jZSBpdCBhdm9pZHMgYmwvbWZsciB0bworQyBnZXQgYXQgdGhlIEdPVC9UT0Mvd2hhdGV2ZXIuCitDCitDIFVzaW5nIGRpdnd1IGZvciBzaXplPT0xIG1lYXN1cmVkIGFib3V0IDEwIGN5Y2xlcyBzbG93ZXIgb24gNjA0ZSwgb3IgYWJvdXQKK0MgMy01IGN5Y2xlcyBmYXN0ZXIgb24gNzUwLiAgRm9yIG5vdyBpdCBkb2Vzbid0IHNlZW0gd29ydGggYm90aGVyaW5nIHdpdGguCitDCitDIFRoZSBsb29wIGFsbG93cyBhbiBlYXJseS1vdXQgb24gbXVsbHcgZm9yIHRoZSBpbnZlcnNlLCBhbmQgb24gbXVsaHd1IGZvcgorQyB0aGUgZGl2aXNvci4gIFNvIHRoZSBmYXN0ZXN0IGlzIGZvciBpbnN0YW5jZSBkaXZpc29yPT0xIChpbnZlcnNlPT0tMSksIGFuZAorQyB0aGUgc2xvd2VzdCBpcyBhbnl0aGluZyBnaXZpbmcgYSBmdWxsIDMyLWJpdHMgaW4gYm90aCwgc3VjaCBhcworQyBkaXZpc29yPT0weERFQURCRUVGIChpbnZlcnNlPT0weDkwNEIzMDBGKS4gIFRoZXNlIGVzdGFibGlzaCB0aGUgc3RhdGVkCitDIHJhbmdlIGFib3ZlIGZvciA3NTAgYW5kIDc0MDAuCisKKworQVNNX1NUQVJUKCkKKworRVhURVJOKGJpbnZlcnRfbGltYl90YWJsZSkKKworUFJPTE9HVUUobXBuX21vZGV4YWN0XzFfb2RkKQorCWxpCXI2LCAwCisKK1BST0xPR1VFKG1wbl9tb2RleGFjdF8xY19vZGQpCisKKwltdGN0cglyNAkJCUMgc2l6ZQorCitpZmRlZihgUElDX1NMT1cnLGAKK0MgTG9hZCBmcm9tIG91ciB0YWJsZSB3aXRoIFBJQyBpcyBzbyBzbG93IG9uIExpbnV4IGFuZCBEYXJ3aW4gdGhhdCB3ZSBhdm9pZCBpdAorCXJsd2lubQlyNywgcjUsIDEsMjgsMjgJCUMgKGRpdmlzb3IgPDwgMSkgJiA4CisJcmx3aW5tCXI4LCByNSwgMiwyOCwyOAkJQyAoZGl2aXNvciA8PCAyKSAmIDgKKwl4b3IJcjcsIHI3LCByOAkJQyAoKGRpdmlzb3IgPDwgMSkgXiAoZGl2aXNvciA8PCAyKSkgJiA4CisJcmx3aW5tCXI0LCByNSwgMCwyOCwzMQkJQyBkaXZpc29yIGxvdyA0IGJpdHMsIHNwZWVkdXAgbXVsbHcKKwl4b3IJcjQsIHI0LCByNwkJQyBpbnZlcnNlLCA0IGJpdHMKKwltdWxsdwlyNywgcjQsIHI0CQlDIGkqaQorCXNsd2kJcjQsIHI0LCAxCQlDIDIqaQorCXJsd2lubQlyOCwgcjUsIDAsMjQsMzEJCUMgZGl2aXNvciBsb3cgOCBiaXRzLCBzcGVlZHVwIG11bGx3CisJbXVsbHcJcjcsIHI3LCByOAkJQyBpKmkqZAorCXN1YglyNCwgcjQsIHI3CQlDIGludmVyc2UsIDggYml0cworJyxgCisJTEVBKAlyNywgYmludmVydF9saW1iX3RhYmxlKQorCXJsd2lubQlyNCwgcjUsIDMxLDI1LDMxCUMgKGRpdmlzb3IvMikgJiAweDdGCisJbGJ6eAlyNCwgcjQscjcJCUMgaW52ZXJzZSwgOCBiaXRzCisnKQorCisJbXVsbHcJcjcsIHI0LCByNAkJQyBpKmkKKwlzbHdpCXI0LCByNCwgMQkJQyAyKmkKKwltdWxsdwlyNywgcjUsIHI3CQlDIGkqaSpkICAgW2kqaSBpcyAxNiBiaXRzLCBzbyBzZWNvbmQgb3BlcmFuZF0KKwlzdWIJcjQsIHI0LCByNwkJQyBpbnZlcnNlLCAxNiBiaXRzCisJbXVsbHcJcjcsIHI0LCByNAkJQyBpKmkKKwlzbHdpCXI0LCByNCwgMQkJQyAyKmkKKwltdWxsdwlyNywgcjcsIHI1CQlDIGkqaSpkCisJbHd6CXIwLCAwKHIzKQkJQyBzcmNbMF0KKwlzdWIJcjQsIHI0LCByNwkJQyBpbnZlcnNlLCAzMiBiaXRzCisJc3ViZmMJcjcsIHI2LCByMAkJQyBsID0gc3JjWzBdIC0gY2FycnkKKworCW11bGx3CXI3LCByNywgcjQJCUMgcSA9IGwgKiBpbnZlcnNlCisJYmR6CUwob25lKQorCisJbHd6dQlyMCwgNChyMykJCUMgc3JjWzFdCisJbXVsaHd1CXI2LCByNywgcjUJCUMgY2FycnkgPSBoaWdoKHEqZGl2aXNvcikKKwlzdWJmZQlyNywgcjYsIHIwCQlDIGwgPSBzcmNbMV0gLSBjYXJyeQorCWJkeglMKHR3bykKKworTCh0b3ApOgorCW11bGx3CXI3LCByNywgcjQJCUMgcSA9IGwgKiBpbnZlcnNlCisJbHd6dQlyMCwgNChyMykJCUMgc3JjW2ldCisJbXVsaHd1CXI2LCByNywgcjUJCUMgY2FycnkgPSBoaWdoKHEqZGl2aXNvcikKKwlzdWJmZQlyNywgcjYsIHIwCQlDIGwgPSBzcmNbaV0gLSBjYXJyeQorCWJkbnoJTCh0b3ApCisKK0wodHdvKToJbXVsbHcJcjcsIHI3LCByNAkJQyBxID0gbCAqIGludmVyc2UKK0wob25lKToJc3ViZmUJcjMsIHIzLCByMwkJQyBjYSAwIG9yIC0xCisJbXVsaHd1CXI2LCByNywgcjUJCUMgY2FycnkgPSBoaWdoKHEqZGl2aXNvcikKKwlzdWJmCXIzLCByMywgcjYJCUMgY2FycnkgKyBjYQorCWJscgorCitFUElMT0dVRShtcG5fbW9kZXhhY3RfMWNfb2RkKQorRVBJTE9HVUUobXBuX21vZGV4YWN0XzFfb2RkKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi9tdWxfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi9tdWxfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQyMDg3YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzMyL211bF8xLmFzbQpAQCAtMCwwICsxLDEwMSBAQAorZG5sICBQb3dlclBDLTMyIG1wbl9tdWxfMSAtLSBNdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYSBsaW1iIGFuZCBzdG9yZSB0aGUKK2RubCAgcmVzdWx0IGluIGEgc2Vjb25kIGxpbWIgdmVjdG9yLgorCitkbmwgIENvcHlyaWdodCAxOTk1LCAxOTk3LCAyMDAwLCAyMDAyLCAyMDAzLCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK2RubCAgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgNjAzZTogICAgICAgICAgICA/CitDIDYwNGU6ICAgICAgICAgICAgNC4wCitDIDc1eCAoRzMpOiAgICAgICAgNC41LTExCitDIDc0MDAsNzQxMCAoRzQpOiAgNC41LTExCitDIDc0NHgsNzQ1eCAoRzQrKTogNi4wCitDIHBvd2VyNC9wcGM5NzA6ICAgNi4wCitDIHBvd2VyNTogICAgICAgICAgNS42MworCitDIElOUFVUIFBBUkFNRVRFUlMKK0MgcnAJcjMKK0MgdXAJcjQKK0MgbglyNQorQyB2bAlyNgorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX211bF8xKQorCW10Y3RyCXI1CisJYWRkaQlyMyxyMywtNAlDIGFkanVzdCByZXNfcHRyLCBpdCdzIG9mZnNldCBiZWZvcmUgaXQncyB1c2VkCisJbGkJcjEyLDAJCUMgY2xlYXIgdXBwZXIgcHJvZHVjdCByZWcKKwlhZGRpYwlyMCxyMCwwCQlDIGNsZWFyIGN5CitDIFN0YXJ0IHNvZnR3YXJlIHBpcGVsaW5lCisJbHd6CXI4LDAocjQpCisJYmR6CUwoZW5kMykKKwlsd3p1CXI5LDQocjQpCisJbXVsbHcJcjExLHI4LHI2CisJbXVsaHd1CXIwLHI4LHI2CisJYmR6CUwoZW5kMSkKK0MgU29mdHdhcmUgcGlwZWxpbmVkIG1haW4gbG9vcAorTChsb29wKToKKwlsd3oJcjgsNChyNCkKKwltdWxsdwlyMTAscjkscjYKKwlhZGRlCXI1LHIxMSxyMTIKKwltdWxod3UJcjEyLHI5LHI2CisJc3R3CXI1LDQocjMpCisJYmR6CUwoZW5kMikKKwlsd3p1CXI5LDgocjQpCisJbXVsbHcJcjExLHI4LHI2CisJYWRkZQlyNyxyMTAscjAKKwltdWxod3UJcjAscjgscjYKKwlzdHd1CXI3LDgocjMpCisJYmRueglMKGxvb3ApCitDIEZpbmlzaCBzb2Z0d2FyZSBwaXBlbGluZQorTChlbmQxKToKKwltdWxsdwlyMTAscjkscjYKKwlhZGRlCXI1LHIxMSxyMTIKKwltdWxod3UJcjEyLHI5LHI2CisJc3R3CXI1LDQocjMpCisJYWRkZQlyNyxyMTAscjAKKwlzdHd1CXI3LDgocjMpCisJYWRkemUJcjMscjEyCisJYmxyCitMKGVuZDIpOgorCW11bGx3CXIxMSxyOCxyNgorCWFkZGUJcjcscjEwLHIwCisJbXVsaHd1CXIwLHI4LHI2CisJc3R3dQlyNyw4KHIzKQorCWFkZGUJcjUscjExLHIxMgorCXN0dwlyNSw0KHIzKQorCWFkZHplCXIzLHIwCisJYmxyCitMKGVuZDMpOgorCW11bGx3CXIxMSxyOCxyNgorCXN0dwlyMTEsNChyMykKKwltdWxod3UJcjMscjgscjYKKwlibHIKK0VQSUxPR1VFKG1wbl9tdWxfMSkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzMyL3AzLXA3L2FvcnNfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi9wMy1wNy9hb3JzX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNjY4NWUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi9wMy1wNy9hb3JzX24uYXNtCkBAIC0wLDAgKzEsMTg3IEBACitkbmwgIFBvd2VyUEMtMzIgbXBuX2FkZF9uL21wbl9zdWJfbiAtLSBtcG4gYWRkaXRpb24gYW5kIHN1YnRyYWN0aW9uLgorCitkbmwgIENvcHlyaWdodCAxOTk5LTIwMDEsIDIwMDMtMjAwNSwgMjAwNywgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgICAgICAgICAgIGN5Y2xlcy9saW1iCitDIFBPV0VSMy9QUEM2MzAgICAgICAgICAgMS41CitDIFBPV0VSNC9QUEM5NzAgICAgICAgICAgMgorQyBQT1dFUjUgICAgICAgICAgICAgICAgIDIKK0MgUE9XRVI2ICAgICAgICAgICAgICAgICAyLjc4CitDIFBPV0VSNyAgICAgICAgICAgICAgIDIuMTUtMi44NworCitDIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBwb3dlcnBjNjQvYW9yc19uLmFzbS4KKworQyBJTlBVVCBQQVJBTUVURVJTCitDIHJwCXIzCitDIHVwCXI0CitDIHZwCXI1CitDIG4JcjYKKworaWZkZWYoYE9QRVJBVElPTl9hZGRfbicsYAorICBkZWZpbmUoQUREU1VCQywJYWRkZSkKKyAgZGVmaW5lKEFERFNVQiwJYWRkYykKKyAgZGVmaW5lKGZ1bmMsCQltcG5fYWRkX24pCisgIGRlZmluZShmdW5jX25jLAltcG5fYWRkX25jKQorICBkZWZpbmUoR0VOUlZBTCwJYGFkZGkJcjMsIHIzLCAxJykKKyAgZGVmaW5lKFNFVENCUiwJYGFkZGljCXIwLCAkMSwgLTEnKQorICBkZWZpbmUoQ0xSQ0IsCQlgYWRkaWMJcjAsIHIwLCAwJykKKycpCitpZmRlZihgT1BFUkFUSU9OX3N1Yl9uJyxgCisgIGRlZmluZShBRERTVUJDLAlzdWJmZSkKKyAgZGVmaW5lKEFERFNVQiwJc3ViZmMpCisgIGRlZmluZShmdW5jLAkJbXBuX3N1Yl9uKQorICBkZWZpbmUoZnVuY19uYywJbXBuX3N1Yl9uYykKKyAgZGVmaW5lKEdFTlJWQUwsCWBuZWcJcjMsIHIzJykKKyAgZGVmaW5lKFNFVENCUiwJYHN1YmZpYwlyMCwgJDEsIDAnKQorICBkZWZpbmUoQ0xSQ0IsCQlgYWRkaWMJcjAsIHIxLCAtMScpCisnKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRfbiBtcG5fYWRkX25jIG1wbl9zdWJfbiBtcG5fc3ViX25jKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUoZnVuY19uYykKKwlTRVRDQlIocjcpCisJYglMKGVudCkKK0VQSUxPR1VFKCkKKworUFJPTE9HVUUoZnVuYykKKwlDTFJDQgorTChlbnQpOglzdHd1CXIxLCAtMzIocjEpCisJcmx3aW5tLglyMCwgcjYsIDAsMzAsMzEJQyByMCA9IG4gJiAzLCBzZXQgY3IwCisJY21wd2kJY3I2LCByMCwgMgorCXN0dwlyMjgsIDgocjEpCisJYWRkaQlyNiwgcjYsIDMJQyBjb21wdXRlIGNvdW50Li4uCisJc3R3CXIyOSwgMTIocjEpCisJc3J3aQlyNiwgcjYsIDIJQyAuLi5mb3IgY3RyCisJc3R3CXIzMCwgMTYocjEpCisJbXRjdHIJcjYJCUMgY29weSBjb3VudCBpbnRvIGN0cgorCXN0dwlyMzEsIDIwKHIxKQorCWJlcQljcjAsIEwoYjAwKQorCWJsdAljcjYsIEwoYjAxKQorCWJlcQljcjYsIEwoYjEwKQorCitMKGIxMSk6CWx3eglyOCwgMChyNCkJQyBsb2FkIHMxIGxpbWIKKwlsd3oJcjksIDAocjUpCUMgbG9hZCBzMiBsaW1iCisJbHd6CXIxMCwgNChyNCkJQyBsb2FkIHMxIGxpbWIKKwlsd3oJcjExLCA0KHI1KQlDIGxvYWQgczIgbGltYgorCWx3eglyMTIsIDgocjQpCUMgbG9hZCBzMSBsaW1iCisJYWRkaQlyNCwgcjQsIDEyCisJbHd6CXIwLCA4KHI1KQlDIGxvYWQgczIgbGltYgorCWFkZGkJcjUsIHI1LCAxMgorCUFERFNVQkMJcjI5LCByOSwgcjgKKwlBRERTVUJDCXIzMCwgcjExLCByMTAKKwlBRERTVUJDCXIzMSwgcjAsIHIxMgorCXN0dwlyMjksIDAocjMpCisJc3R3CXIzMCwgNChyMykKKwlzdHcJcjMxLCA4KHIzKQorCWFkZGkJcjMsIHIzLCAxMgorCWJkbnoJTChnbykKKwliCUwocmV0KQorCitMKGIwMSk6CWx3eglyMTIsIDAocjQpCUMgbG9hZCBzMSBsaW1iCisJYWRkaQlyNCwgcjQsIDQKKwlsd3oJcjAsIDAocjUpCUMgbG9hZCBzMiBsaW1iCisJYWRkaQlyNSwgcjUsIDQKKwlBRERTVUJDCXIzMSwgcjAsIHIxMglDIGFkZAorCXN0dwlyMzEsIDAocjMpCisJYWRkaQlyMywgcjMsIDQKKwliZG56CUwoZ28pCisJYglMKHJldCkKKworTChiMTApOglsd3oJcjEwLCAwKHI0KQlDIGxvYWQgczEgbGltYgorCWx3eglyMTEsIDAocjUpCUMgbG9hZCBzMiBsaW1iCisJbHd6CXIxMiwgNChyNCkJQyBsb2FkIHMxIGxpbWIKKwlhZGRpCXI0LCByNCwgOAorCWx3eglyMCwgNChyNSkJQyBsb2FkIHMyIGxpbWIKKwlhZGRpCXI1LCByNSwgOAorCUFERFNVQkMJcjMwLCByMTEsIHIxMAlDIGFkZAorCUFERFNVQkMJcjMxLCByMCwgcjEyCUMgYWRkCisJc3R3CXIzMCwgMChyMykKKwlzdHcJcjMxLCA0KHIzKQorCWFkZGkJcjMsIHIzLCA4CisJYmRueglMKGdvKQorCWIJTChyZXQpCisKK0woYjAwKToJQyBJTklUQ1kJCUMgY2xlYXIvc2V0IGN5CitMKGdvKToJbHd6CXI2LCAwKHI0KQlDIGxvYWQgczEgbGltYgorCWx3eglyNywgMChyNSkJQyBsb2FkIHMyIGxpbWIKKwlsd3oJcjgsIDQocjQpCUMgbG9hZCBzMSBsaW1iCisJbHd6CXI5LCA0KHI1KQlDIGxvYWQgczIgbGltYgorCWx3eglyMTAsIDgocjQpCUMgbG9hZCBzMSBsaW1iCisJbHd6CXIxMSwgOChyNSkJQyBsb2FkIHMyIGxpbWIKKwlsd3oJcjEyLCAxMihyNCkJQyBsb2FkIHMxIGxpbWIKKwlsd3oJcjAsIDEyKHI1KQlDIGxvYWQgczIgbGltYgorCWJkeglMKGVuZCkKKworCWFkZGkJcjQsIHI0LCAxNgorCWFkZGkJcjUsIHI1LCAxNgorCisJQUxJR04oMTYpCitMKHRvcCk6CUFERFNVQkMJcjI4LCByNywgcjYKKwlsd3oJcjYsIDAocjQpCUMgbG9hZCBzMSBsaW1iCisJbHd6CXI3LCAwKHI1KQlDIGxvYWQgczIgbGltYgorCUFERFNVQkMJcjI5LCByOSwgcjgKKwlsd3oJcjgsIDQocjQpCUMgbG9hZCBzMSBsaW1iCisJbHd6CXI5LCA0KHI1KQlDIGxvYWQgczIgbGltYgorCUFERFNVQkMJcjMwLCByMTEsIHIxMAorCWx3eglyMTAsIDgocjQpCUMgbG9hZCBzMSBsaW1iCisJbHd6CXIxMSwgOChyNSkJQyBsb2FkIHMyIGxpbWIKKwlBRERTVUJDCXIzMSwgcjAsIHIxMgorCWx3eglyMTIsIDEyKHI0KQlDIGxvYWQgczEgbGltYgorCWx3eglyMCwgMTIocjUpCUMgbG9hZCBzMiBsaW1iCisJc3R3CXIyOCwgMChyMykKKwlhZGRpCXI0LCByNCwgMTYKKwlzdHcJcjI5LCA0KHIzKQorCWFkZGkJcjUsIHI1LCAxNgorCXN0dwlyMzAsIDgocjMpCisJc3R3CXIzMSwgMTIocjMpCisJYWRkaQlyMywgcjMsIDE2CisJYmRueglMKHRvcCkJCUMgZGVjcmVtZW50IGN0ciBhbmQgbG9vcCBiYWNrCisKK0woZW5kKToJQUREU1VCQwlyMjgsIHI3LCByNgorCUFERFNVQkMJcjI5LCByOSwgcjgKKwlBRERTVUJDCXIzMCwgcjExLCByMTAKKwlBRERTVUJDCXIzMSwgcjAsIHIxMgorCXN0dwlyMjgsIDAocjMpCisJc3R3CXIyOSwgNChyMykKKwlzdHcJcjMwLCA4KHIzKQorCXN0dwlyMzEsIDEyKHIzKQorCitMKHJldCk6CisJbHd6CXIyOCwgOChyMSkKKwlsd3oJcjI5LCAxMihyMSkKKwlzdWJmZQlyMywgcjAsIHIwCUMgLWN5CisJbHd6CXIzMCwgMTYocjEpCisJR0VOUlZBTAorCWx3eglyMzEsIDIwKHIxKQorCWFkZGkJcjEsIHIxLCAzMgorCWJscgorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvcDMvZ21wLW1wYXJhbS5oIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvcDMvZ21wLW1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzODI2OTUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi9wMy9nbXAtbXBhcmFtLmgKQEAgLTAsMCArMSwxNTUgQEAKKy8qIFBvd2VyUEMtMzIgZ21wLW1wYXJhbS5oIC0tIENvbXBpbGVyL21hY2hpbmUgcGFyYW1ldGVyIGhlYWRlciBmaWxlLgorCitDb3B5cmlnaHQgMTk5MSwgMTk5MywgMTk5NCwgMTk5OS0yMDA0LCAyMDA4LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNkZWZpbmUgR01QX0xJTUJfQklUUyAzMgorI2RlZmluZSBHTVBfTElNQl9CWVRFUyA0CisKKy8qIDQ1MCBNSHogUE9XRVIzICovCisKKyNkZWZpbmUgRElWUkVNXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBESVZSRU1fMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PRF8xXzFQX01FVEhPRCAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgMworI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgMgorI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAxMgorI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICAgICAxOAorI2RlZmluZSBQUkVJTlZfTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgOAorI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBESVZFWEFDVF8xX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIEJNT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisKKyNkZWZpbmUgTVVMX1RPT00yMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgTVVMX1RPT00zM19USFJFU0hPTEQgICAgICAgICAgICAgICAgMzgKKyNkZWZpbmUgTVVMX1RPT000NF9USFJFU0hPTEQgICAgICAgICAgICAgICAgNTgKKyNkZWZpbmUgTVVMX1RPT002SF9USFJFU0hPTEQgICAgICAgICAgICAgICAxMjkKKyNkZWZpbmUgTVVMX1RPT004SF9USFJFU0hPTEQgICAgICAgICAgICAgICAyMTIKKworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT000M19USFJFU0hPTEQgICAgICA2NQorI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT001M19USFJFU0hPTEQgICAgICA2MworI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT001M19USFJFU0hPTEQgICAgICA1OQorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT002M19USFJFU0hPTEQgICAgICA2NAorCisjZGVmaW5lIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNTMKKyNkZWZpbmUgU1FSX1RPT000X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNzYKKyNkZWZpbmUgU1FSX1RPT002X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMDYKKyNkZWZpbmUgU1FSX1RPT004X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyODQKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgOQorI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgOQorCisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgMjIwICAvKiBrID0gNSAqLworI2RlZmluZSBNVUxfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgMjIwLCA1fSwgeyAgICAgMTMsIDZ9LCB7ICAgICAgNywgNX0sIHsgICAgIDE1LCA2fSwgXAorICAgIHsgICAgICA5LCA1fSwgeyAgICAgMTksIDZ9LCB7ICAgICAxMywgN30sIHsgICAgICA3LCA2fSwgXAorICAgIHsgICAgIDE2LCA3fSwgeyAgICAgMTMsIDh9LCB7ICAgICAgNywgN30sIHsgICAgIDE5LCA4fSwgXAorICAgIHsgICAgIDExLCA3fSwgeyAgICAgMjMsIDl9LCB7ICAgICAgNywgOH0sIHsgICAgIDE1LCA3fSwgXAorICAgIHsgICAgIDMzLCA4fSwgeyAgICAgMjMsIDl9LCB7ICAgICAxNSwgOH0sIHsgICAgIDM1LCA5fSwgXAorICAgIHsgICAgIDIzLDEwfSwgeyAgICAgMTUsIDl9LCB7ICAgICAzMSwgOH0sIHsgICAgIDY3LCA5fSwgXAorICAgIHsgICAgIDM5LCA4fSwgeyAgICAgNzksIDl9LCB7ICAgICA0NywxMH0sIHsgICAgIDMxLCA5fSwgXAorICAgIHsgICAgIDYzLCA4fSwgeyAgICAxMjcsIDl9LCB7ICAgICA3MSwgOH0sIHsgICAgMTQzLCA5fSwgXAorICAgIHsgICAgIDc5LDEwfSwgeyAgICAgNDcsMTF9LCB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA5fSwgXAorICAgIHsgICAgMTI3LCA4fSwgeyAgICAyNTUsIDl9LCB7ICAgIDE0MywxMH0sIHsgICAgIDc5LCA5fSwgXAorICAgIHsgICAgMTU5LCA4fSwgeyAgICAzMTksIDl9LCB7ICAgIDE3NSwgOH0sIHsgICAgMzUxLDEwfSwgXAorICAgIHsgICAgIDk1LCA5fSwgeyAgICAxOTEsIDh9LCB7ICAgIDM4MywxMH0sIHsgICAgMTExLDExfSwgXAorICAgIHsgICAgIDYzLDEwfSwgeyAgICAxMjcsIDl9LCB7ICAgIDI1NSwxMH0sIHsgICAgMTQzLCA5fSwgXAorICAgIHsgICAgMjg3LCA4fSwgeyAgICA1NzUsMTB9LCB7ICAgIDE1OSwgOX0sIHsgICAgMzE5LDEwfSwgXAorICAgIHsgICAgMTc1LCA5fSwgeyAgICAzNTEsMTF9LCB7ICAgICA5NSwxMH0sIHsgICAgMTkxLCA5fSwgXAorICAgIHsgICAgMzgzLDEwfSwgeyAgICAyMDcsIDl9LCB7ICAgIDQxNSwxMn0sIHsgICAgIDYzLDExfSwgXAorICAgIHsgICAgMTI3LDEwfSwgeyAgICAyNTUsIDl9LCB7ICAgIDUxMSwxMH0sIHsgICAgMjg3LCA5fSwgXAorICAgIHsgICAgNTc1LDExfSwgeyAgICAxNTksMTB9LCB7ICAgIDM1MSwgOX0sIHsgICAgNzAzLCA4fSwgXAorICAgIHsgICAxNDA3LDExfSwgeyAgICAxOTEsMTB9LCB7ICAgIDQxNSwxMX0sIHsgICAgMjIzLDEwfSwgXAorICAgIHsgICAgNDQ3LCA5fSwgeyAgICA4OTUsMTJ9LCB7ICAgNDA5NiwxM30sIHsgICA4MTkyLDE0fSwgXAorICAgIHsgIDE2Mzg0LDE1fSwgeyAgMzI3NjgsMTZ9IH0KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTNfU0laRSA4MgorI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMjY4OAorCisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgMTc2ICAvKiBrID0gNSAqLworI2RlZmluZSBTUVJfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgMTc2LCA1fSwgeyAgICAgMTMsIDZ9LCB7ICAgICAgNywgNX0sIHsgICAgIDE1LCA2fSwgXAorICAgIHsgICAgIDEzLCA3fSwgeyAgICAgIDcsIDZ9LCB7ICAgICAxNiwgN30sIHsgICAgICA5LCA2fSwgXAorICAgIHsgICAgIDE5LCA3fSwgeyAgICAgMTEsIDZ9LCB7ICAgICAyMywgN30sIHsgICAgIDEzLCA4fSwgXAorICAgIHsgICAgICA3LCA3fSwgeyAgICAgMTksIDh9LCB7ICAgICAxMSwgN30sIHsgICAgIDIzLCA5fSwgXAorICAgIHsgICAgICA3LCA4fSwgeyAgICAgMTUsIDd9LCB7ICAgICAzMSwgOH0sIHsgICAgIDIzLCA5fSwgXAorICAgIHsgICAgIDE1LCA4fSwgeyAgICAgMzksIDl9LCB7ICAgICAyMywxMH0sIHsgICAgIDE1LCA5fSwgXAorICAgIHsgICAgIDMxLCA4fSwgeyAgICAgNjMsIDl9LCB7ICAgICAzOSwgOH0sIHsgICAgIDc5LCA5fSwgXAorICAgIHsgICAgIDQ3LCA4fSwgeyAgICAgOTUsMTB9LCB7ICAgICAzMSwgOX0sIHsgICAgIDYzLCA4fSwgXAorICAgIHsgICAgMTI3LCA5fSwgeyAgICAgNzEsIDh9LCB7ICAgIDE0MywgN30sIHsgICAgMjg3LCA2fSwgXAorICAgIHsgICAgNTc1LCA5fSwgeyAgICAgNzksIDh9LCB7ICAgIDE1OSwxMH0sIHsgICAgIDQ3LCA5fSwgXAorICAgIHsgICAgIDk1LDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA2MywgOX0sIHsgICAgMTI3LCA4fSwgXAorICAgIHsgICAgMjU1LCA5fSwgeyAgICAxNDMsIDh9LCB7ICAgIDI4NywgN30sIHsgICAgNTc1LDEwfSwgXAorICAgIHsgICAgIDc5LCA5fSwgeyAgICAxNTksIDh9LCB7ICAgIDMxOSwgOX0sIHsgICAgMTc1LDEwfSwgXAorICAgIHsgICAgIDk1LCA5fSwgeyAgICAxOTEsIDh9LCB7ICAgIDM4MywxMH0sIHsgICAgMTExLCA5fSwgXAorICAgIHsgICAgMjIzLDExfSwgeyAgICAgNjMsMTB9LCB7ICAgIDEyNywgOX0sIHsgICAgMjU1LDEwfSwgXAorICAgIHsgICAgMTQzLCA5fSwgeyAgICAyODcsIDh9LCB7ICAgIDU3NSwxMH0sIHsgICAgMTU5LCA5fSwgXAorICAgIHsgICAgMzE5LDEwfSwgeyAgICAxNzUsMTF9LCB7ICAgICA5NSwxMH0sIHsgICAgMTkxLCA5fSwgXAorICAgIHsgICAgMzgzLDEwfSwgeyAgICAyMjMsMTJ9LCB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgXAorICAgIHsgICAgMjg3LCA5fSwgeyAgICA1NzUsMTF9LCB7ICAgIDE1OSwxMH0sIHsgICAgMzUxLCA5fSwgXAorICAgIHsgICAgNzAzLCA4fSwgeyAgIDE0MDcsMTF9LCB7ICAgIDE5MSwxMH0sIHsgICAgMzgzLDExfSwgXAorICAgIHsgICAgMjIzLDEwfSwgeyAgICA0NDcsIDl9LCB7ICAgIDg5NSwxMn0sIHsgICA0MDk2LDEzfSwgXAorICAgIHsgICA4MTkyLDE0fSwgeyAgMTYzODQsMTV9LCB7ICAzMjc2OCwxNn0gfQorI2RlZmluZSBTUVJfRkZUX1RBQkxFM19TSVpFIDg3CisjZGVmaW5lIFNRUl9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAxNzI4CisKKyNkZWZpbmUgTVVMTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDIKKyNkZWZpbmUgTVVMTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgMzMKKyNkZWZpbmUgTVVMTE9fTVVMX05fVEhSRVNIT0xEICAgICAgICAgICAgIDUyNDAKKworI2RlZmluZSBEQ19ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBEQ19ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgIDEyMworI2RlZmluZSBEQ19CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzNAorI2RlZmluZSBEQ19CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA4NAorCisjZGVmaW5lIElOVl9NVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgIDQyCisjZGVmaW5lIElOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAgMTI5CisjZGVmaW5lIElOVl9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTI0CisKKyNkZWZpbmUgQklOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAxNDgKKyNkZWZpbmUgUkVEQ18xX1RPX1JFRENfTl9USFJFU0hPTEQgICAgICAgICAgMzgKKworI2RlZmluZSBNVV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDc0OAorI2RlZmluZSBNVV9ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgIDc0OAorI2RlZmluZSBNVVBJX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICA1OQorI2RlZmluZSBNVV9CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDU2MgorI2RlZmluZSBNVV9CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDY1NAorCisjZGVmaW5lIE1BVFJJWDIyX1NUUkFTU0VOX1RIUkVTSE9MRCAgICAgICAgIDExCisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAgIDc2CisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgMjA1CisjZGVmaW5lIEdDREVYVF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTc0CisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgR0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICAgMjcKKyNkZWZpbmUgU0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAxODEKKyNkZWZpbmUgU0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICA1MjUKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzMyL3A0L2dtcC1tcGFyYW0uaCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzMyL3A0L2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWM1OWY1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvcDQvZ21wLW1wYXJhbS5oCkBAIC0wLDAgKzEsMjA5IEBACisvKiBQb3dlclBDLTMyIGdtcC1tcGFyYW0uaCAtLSBDb21waWxlci9tYWNoaW5lIHBhcmFtZXRlciBoZWFkZXIgZmlsZS4KKworQ29weXJpZ2h0IDE5OTEsIDE5OTMsIDE5OTQsIDE5OTktMjAwNCwgMjAwOC0yMDExLCAyMDE0IEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworLyogMTgwMCBNSHogUG93ZXJQQy05NzAgKi8KKy8qIEZGVCB0dW5pbmcgbGltaXQgPSAxMDAwMDAwMCAqLworLyogR2VuZXJhdGVkIGJ5IHR1bmV1cC5jLCAyMDE0LTAzLTEyLCBnY2MgNC4wICovCisKKyNkZWZpbmUgRElWUkVNXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBESVZSRU1fMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PRF8xXzFQX01FVEhPRCAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNworI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNQorI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAgOQorI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICAgICA0MgorI2RlZmluZSBQUkVJTlZfTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAxNAorI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBESVZfUVJfMU5fUEkxX01FVEhPRCAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBESVZfUVJfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgMQorI2RlZmluZSBESVZfUVJfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgMQorI2RlZmluZSBESVZfUVJfMl9QSTJfVEhSRVNIT0xEICAgICAgICAgICBNUF9TSVpFX1RfTUFYICAvKiBuZXZlciAqLworI2RlZmluZSBESVZFWEFDVF8xX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIEJNT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgICAgICAgIDQ1CisKKyNkZWZpbmUgRElWXzFfVlNfTVVMXzFfUEVSQ0VOVCAgICAgICAgICAgICAyMjUKKworI2RlZmluZSBNVUxfVE9PTTIyX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBNVUxfVE9PTTMzX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA3MworI2RlZmluZSBNVUxfVE9PTTQ0X1RIUkVTSE9MRCAgICAgICAgICAgICAgIDEzMAorI2RlZmluZSBNVUxfVE9PTTZIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDIyMgorI2RlZmluZSBNVUxfVE9PTThIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDMzMworCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTQzX1RIUkVTSE9MRCAgICAgMTA3CisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgMTA4CisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgIDg5CisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTYzX1RIUkVTSE9MRCAgICAgIDkyCisjZGVmaW5lIE1VTF9UT09NNDNfVE9fVE9PTTU0X1RIUkVTSE9MRCAgICAgMTAwCisKKyNkZWZpbmUgU1FSX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgODUKKyNkZWZpbmUgU1FSX1RPT000X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNjAKKyNkZWZpbmUgU1FSX1RPT002X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxOTcKKyNkZWZpbmUgU1FSX1RPT004X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzNTcKKworI2RlZmluZSBNVUxNSURfVE9PTTQyX1RIUkVTSE9MRCAgICAgICAgICAgICAzMgorCisjZGVmaW5lIE1VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIFNRUk1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE2CisKKyNkZWZpbmUgTVVMX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICA0NDQgIC8qIGsgPSA1ICovCisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICA0NDQsIDV9LCB7ICAgICAxNywgNn0sIHsgICAgICA5LCA1fSwgeyAgICAgMjEsIDZ9LCBcCisgICAgeyAgICAgMTEsIDV9LCB7ICAgICAyMywgNn0sIHsgICAgIDIxLCA3fSwgeyAgICAgMTEsIDZ9LCBcCisgICAgeyAgICAgMjQsIDd9LCB7ICAgICAxMywgNn0sIHsgICAgIDI4LCA3fSwgeyAgICAgMTUsIDZ9LCBcCisgICAgeyAgICAgMzEsIDd9LCB7ICAgICAyMSwgOH0sIHsgICAgIDExLCA3fSwgeyAgICAgMjcsIDh9LCBcCisgICAgeyAgICAgMTUsIDd9LCB7ICAgICAzMywgOH0sIHsgICAgIDE5LCA3fSwgeyAgICAgNDEsIDh9LCBcCisgICAgeyAgICAgMjMsIDd9LCB7ICAgICA0NywgOH0sIHsgICAgIDI3LCA5fSwgeyAgICAgMTUsIDh9LCBcCisgICAgeyAgICAgMzksIDl9LCB7ICAgICAyMywgOH0sIHsgICAgIDUxLDEwfSwgeyAgICAgMTUsIDl9LCBcCisgICAgeyAgICAgMzEsIDh9LCB7ICAgICA2NywgOX0sIHsgICAgIDM5LCA4fSwgeyAgICAgNzksIDl9LCBcCisgICAgeyAgICAgNDcsIDh9LCB7ICAgICA5NSwxMH0sIHsgICAgIDMxLCA5fSwgeyAgICAgNjMsIDh9LCBcCisgICAgeyAgICAxMjcsIDl9LCB7ICAgICA3OSwxMH0sIHsgICAgIDQ3LCA5fSwgeyAgICAgOTUsMTF9LCBcCisgICAgeyAgICAgMzEsMTB9LCB7ICAgICA2MywgOX0sIHsgICAgMTM1LDEwfSwgeyAgICAgNzksIDl9LCBcCisgICAgeyAgICAxNjcsMTB9LCB7ICAgICA5NSwgOX0sIHsgICAgMTkxLCA4fSwgeyAgICAzODMsMTB9LCBcCisgICAgeyAgICAxMTEsMTF9LCB7ICAgICA2MywxMH0sIHsgICAgMTI3LCA5fSwgeyAgICAyNTUsIDh9LCBcCisgICAgeyAgICA1MTEsMTB9LCB7ICAgIDE0MywgOX0sIHsgICAgMjg3LCA4fSwgeyAgICA1NzUsIDl9LCBcCisgICAgeyAgICAzMDMsMTB9LCB7ICAgIDE1OSwgOX0sIHsgICAgMzE5LDExfSwgeyAgICAgOTUsMTB9LCBcCisgICAgeyAgICAxOTEsIDl9LCB7ICAgIDM4MywxMn0sIHsgICAgIDYzLDExfSwgeyAgICAxMjcsMTB9LCBcCisgICAgeyAgICAyNTUsIDl9LCB7ICAgIDUxMSwxMH0sIHsgICAgMjcxLCA5fSwgeyAgICA1NDMsIDh9LCBcCisgICAgeyAgIDEwODcsMTB9LCB7ICAgIDI4NywgOX0sIHsgICAgNTc1LDEwfSwgeyAgICAzMDMsMTF9LCBcCisgICAgeyAgICAxNTksMTB9LCB7ICAgIDMzNSwgOX0sIHsgICAgNjcxLCA4fSwgeyAgIDEzNDMsMTB9LCBcCisgICAgeyAgICAzNTEsIDl9LCB7ICAgIDcwMywxMX0sIHsgICAgMTkxLDEwfSwgeyAgICAzODMsIDl9LCBcCisgICAgeyAgICA3NjcsMTB9LCB7ICAgIDQxNSwgOX0sIHsgICAgODMxLDExfSwgeyAgICAyMjMsMTB9LCBcCisgICAgeyAgICA0NDcsMTJ9LCB7ICAgIDEyNywxMX0sIHsgICAgMjU1LDEwfSwgeyAgICA1NDMsIDl9LCBcCisgICAgeyAgIDEwODcsMTF9LCB7ICAgIDI4NywxMH0sIHsgICAgNjA3LCA5fSwgeyAgIDEyMTUsMTF9LCBcCisgICAgeyAgICAzMTksMTB9LCB7ICAgIDY3MSwgOX0sIHsgICAxMzQzLDExfSwgeyAgICAzNTEsMTB9LCBcCisgICAgeyAgICA3MDMsIDl9LCB7ICAgMTQwNywxMn0sIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTB9LCBcCisgICAgeyAgICA3NjcsMTF9LCB7ICAgIDQxNSwxMH0sIHsgICAgODMxLDExfSwgeyAgICA0NDcsMTN9LCBcCisgICAgeyAgICAxMjcsMTJ9LCB7ICAgIDI1NSwxMX0sIHsgICAgNTQzLDEwfSwgeyAgIDEwODcsMTF9LCBcCisgICAgeyAgICA2MDcsMTB9LCB7ICAgMTIxNSwxMn0sIHsgICAgMzE5LDExfSwgeyAgICA2NzEsMTB9LCBcCisgICAgeyAgIDEzNDMsMTF9LCB7ICAgIDcwMywxMH0sIHsgICAxNDA3LDExfSwgeyAgICA3MzUsMTJ9LCBcCisgICAgeyAgICAzODMsMTF9LCB7ICAgIDc2NywxMH0sIHsgICAxNTM1LDExfSwgeyAgICA4MzEsMTJ9LCBcCisgICAgeyAgICA0NDcsMTB9LCB7ICAgMTc5MSwxMX0sIHsgICAgOTU5LDEzfSwgeyAgICAyNTUsMTJ9LCBcCisgICAgeyAgICA1MTEsMTF9LCB7ICAgMTA4NywxMn0sIHsgICAgNTc1LDExfSwgeyAgIDEyMTUsMTB9LCBcCisgICAgeyAgIDI0MzEsMTJ9LCB7ICAgIDYzOSwxMX0sIHsgICAxMzQzLDEyfSwgeyAgICA3MDMsMTF9LCBcCisgICAgeyAgIDE0MDcsMTN9LCB7ICAgIDM4MywxMn0sIHsgICAgNzY3LDExfSwgeyAgIDE1MzUsMTJ9LCBcCisgICAgeyAgICA4MzEsMTF9LCB7ICAgMTcyNywxMH0sIHsgICAzNDU1LDExfSwgeyAgIDE3OTEsMTJ9LCBcCisgICAgeyAgICA5NTksMTR9LCB7ICAgIDI1NSwxM30sIHsgICAgNTExLDEyfSwgeyAgIDEyMTUsMTF9LCBcCisgICAgeyAgIDI0MzEsMTN9LCB7ICAgIDYzOSwxMn0sIHsgICAxNDcxLDEzfSwgeyAgICA3NjcsMTJ9LCBcCisgICAgeyAgIDE3MjcsMTF9LCB7ICAgMzQ1NSwxMn0sIHsgICAxNzkxLDE0fSwgeyAgICA1MTEsMTN9LCBcCisgICAgeyAgIDExNTEsMTJ9LCB7ICAgMjQzMSwxM30sIHsgICA4MTkyLDE0fSwgeyAgMTYzODQsMTV9LCBcCisgICAgeyAgMzI3NjgsMTZ9IH0KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTNfU0laRSAxNTcKKyNkZWZpbmUgTVVMX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDY3ODQKKworI2RlZmluZSBTUVJfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDM0MCAgLyogayA9IDUgKi8KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDM0MCwgNX0sIHsgICAgIDIxLCA2fSwgeyAgICAgMTEsIDV9LCB7ICAgICAyMywgNn0sIFwKKyAgICB7ICAgICAyMSwgN30sIHsgICAgIDExLCA2fSwgeyAgICAgMjQsIDd9LCB7ICAgICAxMywgNn0sIFwKKyAgICB7ICAgICAyOCwgN30sIHsgICAgIDIxLCA4fSwgeyAgICAgMTEsIDd9LCB7ICAgICAyNywgOH0sIFwKKyAgICB7ICAgICAxNSwgN30sIHsgICAgIDMzLCA4fSwgeyAgICAgMTksIDd9LCB7ICAgICAzOSwgOH0sIFwKKyAgICB7ICAgICAyMywgN30sIHsgICAgIDQ3LCA4fSwgeyAgICAgMjcsIDl9LCB7ICAgICAxNSwgOH0sIFwKKyAgICB7ICAgICAzOSwgOX0sIHsgICAgIDIzLCA4fSwgeyAgICAgNDcsMTB9LCB7ICAgICAxNSwgOX0sIFwKKyAgICB7ICAgICAzMSwgOH0sIHsgICAgIDYzLCA5fSwgeyAgICAgMzksIDh9LCB7ICAgICA3OSwgOX0sIFwKKyAgICB7ICAgICA0NywxMH0sIHsgICAgIDMxLCA5fSwgeyAgICAgNzksMTB9LCB7ICAgICA0NywgOX0sIFwKKyAgICB7ICAgICA5NSwxMX0sIHsgICAgIDMxLDEwfSwgeyAgICAgNjMsIDl9LCB7ICAgIDEyNywgOH0sIFwKKyAgICB7ICAgIDI1NSwgOX0sIHsgICAgMTM1LDEwfSwgeyAgICAgNzksIDl9LCB7ICAgIDE1OSwgOH0sIFwKKyAgICB7ICAgIDMxOSwxMH0sIHsgICAgIDk1LCA5fSwgeyAgICAxOTEsIDh9LCB7ICAgIDM4MywgOX0sIFwKKyAgICB7ICAgIDIwNywxMX0sIHsgICAgIDYzLDEwfSwgeyAgICAxMjcsIDl9LCB7ICAgIDI1NSwgOH0sIFwKKyAgICB7ICAgIDUxMSwgOX0sIHsgICAgMjcxLDEwfSwgeyAgICAxNDMsIDl9LCB7ICAgIDI4NywgOH0sIFwKKyAgICB7ICAgIDU3NSwgOX0sIHsgICAgMzAzLCA4fSwgeyAgICA2MDcsMTB9LCB7ICAgIDE1OSwgOX0sIFwKKyAgICB7ICAgIDMxOSwxMH0sIHsgICAgMTc1LDExfSwgeyAgICAgOTUsMTB9LCB7ICAgIDE5MSwgOX0sIFwKKyAgICB7ICAgIDM4MywxMH0sIHsgICAgMjA3LDEyfSwgeyAgICAgNjMsMTF9LCB7ICAgIDEyNywxMH0sIFwKKyAgICB7ICAgIDI1NSwgOX0sIHsgICAgNTExLDEwfSwgeyAgICAyNzEsIDl9LCB7ICAgIDU0MywgOH0sIFwKKyAgICB7ICAgMTA4NywxMH0sIHsgICAgMjg3LCA5fSwgeyAgICA1NzUsMTB9LCB7ICAgIDMwMywgOX0sIFwKKyAgICB7ICAgIDYwNywxMX0sIHsgICAgMTU5LDEwfSwgeyAgICAzMTksIDl9LCB7ICAgIDYzOSwxMH0sIFwKKyAgICB7ICAgIDMzNSwgOX0sIHsgICAgNjcxLDEwfSwgeyAgICAzNTEsIDl9LCB7ICAgIDcwMywxMX0sIFwKKyAgICB7ICAgIDE5MSwxMH0sIHsgICAgMzgzLCA5fSwgeyAgICA3NjcsMTB9LCB7ICAgIDQxNSwgOX0sIFwKKyAgICB7ICAgIDgzMSwxMX0sIHsgICAgMjIzLDEwfSwgeyAgICA0NDcsMTJ9LCB7ICAgIDEyNywxMX0sIFwKKyAgICB7ICAgIDI1NSwxMH0sIHsgICAgNTQzLCA5fSwgeyAgIDEwODcsMTF9LCB7ICAgIDI4NywxMH0sIFwKKyAgICB7ICAgIDYwNywgOX0sIHsgICAxMjE1LDExfSwgeyAgICAzMTksMTB9LCB7ICAgIDY3MSwxMX0sIFwKKyAgICB7ICAgIDM1MSwxMH0sIHsgICAgNzAzLDEyfSwgeyAgICAxOTEsMTF9LCB7ICAgIDM4MywxMH0sIFwKKyAgICB7ICAgIDc2NywxMX0sIHsgICAgNDE1LDEwfSwgeyAgICA4MzEsMTF9LCB7ICAgIDQ3OSwxM30sIFwKKyAgICB7ICAgIDEyNywxMn0sIHsgICAgMjU1LDExfSwgeyAgICA1NDMsMTB9LCB7ICAgMTA4NywxMX0sIFwKKyAgICB7ICAgIDYwNywxMH0sIHsgICAxMjE1LDEyfSwgeyAgICAzMTksMTF9LCB7ICAgIDY3MSwxMH0sIFwKKyAgICB7ICAgMTM0MywxMX0sIHsgICAgNzAzLDEwfSwgeyAgIDE0MDcsMTF9LCB7ICAgIDczNSwxMn0sIFwKKyAgICB7ICAgIDM4MywxMX0sIHsgICAgODMxLDEyfSwgeyAgICA0NDcsMTF9LCB7ICAgIDk1OSwxM30sIFwKKyAgICB7ICAgIDI1NSwxMn0sIHsgICAgNTExLDExfSwgeyAgIDEwODcsMTJ9LCB7ICAgIDU3NSwxMX0sIFwKKyAgICB7ICAgMTIxNSwxMn0sIHsgICAgNjM5LDExfSwgeyAgIDEzNDMsMTJ9LCB7ICAgIDcwMywxMX0sIFwKKyAgICB7ICAgMTQwNywxM30sIHsgICAgMzgzLDEyfSwgeyAgICA4MzEsMTF9LCB7ICAgMTcyNywxMn0sIFwKKyAgICB7ICAgIDk1OSwxNH0sIHsgICAgMjU1LDEzfSwgeyAgICA1MTEsMTJ9LCB7ICAgMTIxNSwxM30sIFwKKyAgICB7ICAgIDYzOSwxMn0sIHsgICAxNDcxLDEzfSwgeyAgICA3NjcsMTJ9LCB7ICAgMTcyNywxM30sIFwKKyAgICB7ICAgIDg5NSwxMn0sIHsgICAxOTE5LDE0fSwgeyAgICA1MTEsMTN9LCB7ICAgMTAyMywxMn0sIFwKKyAgICB7ICAgMjExMSwxM30sIHsgICAxMTUxLDEyfSwgeyAgIDI0MzEsMTN9LCB7ICAgODE5MiwxNH0sIFwKKyAgICB7ICAxNjM4NCwxNX0sIHsgIDMyNzY4LDE2fSB9CisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzX1NJWkUgMTUwCisjZGVmaW5lIFNRUl9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA0NzM2CisKKyNkZWZpbmUgTVVMTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNVUxMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICA1NQorI2RlZmluZSBNVUxMT19NVUxfTl9USFJFU0hPTEQgICAgICAgICAgICAxMzQ2MworI2RlZmluZSBTUVJMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgNAorI2RlZmluZSBTUVJMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgIDE2OQorI2RlZmluZSBTUVJMT19TUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgOTMzNQorCisjZGVmaW5lIERDX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDUwCisjZGVmaW5lIERDX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAgMTk2CisjZGVmaW5lIERDX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDUxCisjZGVmaW5lIERDX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTY2CisKKyNkZWZpbmUgSU5WX01VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgNTAKKyNkZWZpbmUgSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgICAyMjYKKyNkZWZpbmUgSU5WX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAyMDIKKworI2RlZmluZSBCSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgIDIyOAorI2RlZmluZSBSRURDXzFfVE9fUkVEQ19OX1RIUkVTSE9MRCAgICAgICAgICA2NworCisjZGVmaW5lIE1VX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAxMTg3CisjZGVmaW5lIE1VX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAxMzA4CisjZGVmaW5lIE1VUElfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTE0CisjZGVmaW5lIE1VX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgOTk4CisjZGVmaW5lIE1VX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAxMTQyCisKKyNkZWZpbmUgUE9XTV9TRUNfVEFCTEUgIDMsMjgsNzgsNDgwLDEwOTkKKworI2RlZmluZSBHRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBHRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgICAyNAorI2RlZmluZSBTRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDM4MQorI2RlZmluZSBTRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgMTAwMgorCisjZGVmaW5lIEZBQ19EU0NfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgMTc5CisjZGVmaW5lIEZBQ19PRERfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDI4CisKKyNkZWZpbmUgTUFUUklYMjJfU1RSQVNTRU5fVEhSRVNIT0xEICAgICAgICAgIDkKKyNkZWZpbmUgSEdDRF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgICAgOTMKKyNkZWZpbmUgSEdDRF9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMDkKKyNkZWZpbmUgSEdDRF9SRURVQ0VfVEhSRVNIT0xEICAgICAgICAgICAgIDI0NzkKKyNkZWZpbmUgR0NEX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAzNzkKKyNkZWZpbmUgR0NERVhUX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyNzMKKyNkZWZpbmUgSkFDT0JJX0JBU0VfTUVUSE9EICAgICAgICAgICAgICAgICAgIDQKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzMyL3A1L2dtcC1tcGFyYW0uaCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzMyL3A1L2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWExZTgxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvcDUvZ21wLW1wYXJhbS5oCkBAIC0wLDAgKzEsMTU2IEBACisvKiBQb3dlclBDLTMyIGdtcC1tcGFyYW0uaCAtLSBDb21waWxlci9tYWNoaW5lIHBhcmFtZXRlciBoZWFkZXIgZmlsZS4KKworQ29weXJpZ2h0IDE5OTEsIDE5OTMsIDE5OTQsIDE5OTktMjAwNCwgMjAwOC0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgMzIKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgNAorCisvKiAxNjUwIE1IeiBQT1dFUjUgKi8KKworI2RlZmluZSBESVZSRU1fMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIERJVlJFTV8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfMVBfTUVUSE9EICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgTU9EXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PRF8xTl9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA4CisjZGVmaW5lIE1PRF8xVV9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA2CisjZGVmaW5lIE1PRF8xXzFfVE9fTU9EXzFfMl9USFJFU0hPTEQgICAgICAgICA5CisjZGVmaW5lIE1PRF8xXzJfVE9fTU9EXzFfNF9USFJFU0hPTEQgICAgICAgIDUwCisjZGVmaW5lIFBSRUlOVl9NT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgIDE4CisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIERJVl9RUl8yX1BJMl9USFJFU0hPTEQgICAgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgICAgICAgNjEKKworI2RlZmluZSBNVUxfVE9PTTIyX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyMgorI2RlZmluZSBNVUxfVE9PTTMzX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA1NworI2RlZmluZSBNVUxfVE9PTTQ0X1RIUkVTSE9MRCAgICAgICAgICAgICAgIDEzMAorI2RlZmluZSBNVUxfVE9PTTZIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE4OQorI2RlZmluZSBNVUxfVE9PTThIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDMwOQorCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTQzX1RIUkVTSE9MRCAgICAgIDg5CisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgIDk5CisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgIDgzCisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTYzX1RIUkVTSE9MRCAgICAgIDg4CisKKyNkZWZpbmUgU1FSX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNDAKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNzcKKyNkZWZpbmUgU1FSX1RPT000X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMjQKKyNkZWZpbmUgU1FSX1RPT002X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNDAKKyNkZWZpbmUgU1FSX1RPT004X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyMzgKKworI2RlZmluZSBNVUxNSURfVE9PTTQyX1RIUkVTSE9MRCAgICAgICAgICAgICA0MAorCisjZGVmaW5lIE1VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIFNRUk1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE2CisKKyNkZWZpbmUgUE9XTV9TRUNfVEFCTEUgIDQsMjksMjUyLDg0MCwyMDgwCisKKyNkZWZpbmUgTVVMX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICA0MTIgIC8qIGsgPSA1ICovCisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICA0MTIsIDV9LCB7ICAgICAyMSwgNn0sIHsgICAgIDExLCA1fSwgeyAgICAgMjMsIDZ9LCBcCisgICAgeyAgICAgMTIsIDV9LCB7ICAgICAyNSwgNn0sIHsgICAgIDIxLCA3fSwgeyAgICAgMTEsIDZ9LCBcCisgICAgeyAgICAgMjUsIDd9LCB7ICAgICAxMywgNn0sIHsgICAgIDI3LCA3fSwgeyAgICAgMjEsIDh9LCBcCisgICAgeyAgICAgMTEsIDd9LCB7ICAgICAyNywgOH0sIHsgICAgIDE1LCA3fSwgeyAgICAgMzMsIDh9LCBcCisgICAgeyAgICAgMTksIDd9LCB7ICAgICAzOSwgOH0sIHsgICAgIDIzLCA3fSwgeyAgICAgNDcsIDh9LCBcCisgICAgeyAgICAgMjcsIDl9LCB7ICAgICAxNSwgOH0sIHsgICAgIDM5LCA5fSwgeyAgICAgMjMsIDh9LCBcCisgICAgeyAgICAgNTEsMTB9LCB7ICAgICAxNSwgOX0sIHsgICAgIDMxLCA4fSwgeyAgICAgNjcsIDl9LCBcCisgICAgeyAgICAgMzksIDh9LCB7ICAgICA3OSwgOX0sIHsgICAgIDU1LDEwfSwgeyAgICAgMzEsIDl9LCBcCisgICAgeyAgICAgNzksMTB9LCB7ICAgICA0NywgOX0sIHsgICAgIDk1LDExfSwgeyAgICAgMzEsMTB9LCBcCisgICAgeyAgICAgNjMsIDl9LCB7ICAgIDEzNSwxMH0sIHsgICAgIDc5LCA5fSwgeyAgICAxNTksMTB9LCBcCisgICAgeyAgICAgOTUsMTF9LCB7ICAgICA2MywxMH0sIHsgICAgMTI3LCA5fSwgeyAgICAyNTUsMTB9LCBcCisgICAgeyAgICAxNDMsIDl9LCB7ICAgIDI4NywxMH0sIHsgICAgMTU5LDExfSwgeyAgICAgOTUsMTB9LCBcCisgICAgeyAgICAxOTEsMTJ9LCB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgeyAgICAyNTUsIDl9LCBcCisgICAgeyAgICA1MTEsMTB9LCB7ICAgIDI3MSwgOX0sIHsgICAgNTQzLDEwfSwgeyAgICAyODcsMTF9LCBcCisgICAgeyAgICAxNTksMTB9LCB7ICAgIDMzNSwgOX0sIHsgICAgNjcxLDEwfSwgeyAgICAzNTEsIDl9LCBcCisgICAgeyAgICA3MDMsMTF9LCB7ICAgIDE5MSwxMH0sIHsgICAgMzgzLCA5fSwgeyAgICA3NjcsMTB9LCBcCisgICAgeyAgICA0MTUsIDl9LCB7ICAgIDgzMSwxMX0sIHsgICAgMjIzLDEyfSwgeyAgIDQwOTYsMTN9LCBcCisgICAgeyAgIDgxOTIsMTR9LCB7ICAxNjM4NCwxNX0sIHsgIDMyNzY4LDE2fSB9CisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzX1NJWkUgNzEKKyNkZWZpbmUgTVVMX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDQ3MzYKKworI2RlZmluZSBTUVJfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDM0MCAgLyogayA9IDUgKi8KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDM0MCwgNX0sIHsgICAgIDIxLCA2fSwgeyAgICAgMTEsIDV9LCB7ICAgICAyMywgNn0sIFwKKyAgICB7ICAgICAyMSwgN30sIHsgICAgIDExLCA2fSwgeyAgICAgMjQsIDd9LCB7ICAgICAxMywgNn0sIFwKKyAgICB7ICAgICAyNywgN30sIHsgICAgIDIxLCA4fSwgeyAgICAgMTEsIDd9LCB7ICAgICAyNywgOH0sIFwKKyAgICB7ICAgICAxNSwgN30sIHsgICAgIDMzLCA4fSwgeyAgICAgMTksIDd9LCB7ICAgICAzOSwgOH0sIFwKKyAgICB7ICAgICAyMywgN30sIHsgICAgIDQ3LCA4fSwgeyAgICAgMjcsIDl9LCB7ICAgICAxNSwgOH0sIFwKKyAgICB7ICAgICAzOSwgOX0sIHsgICAgIDIzLCA4fSwgeyAgICAgNDcsMTB9LCB7ICAgICAxNSwgOX0sIFwKKyAgICB7ICAgICAzMSwgOH0sIHsgICAgIDY3LCA5fSwgeyAgICAgNDcsMTB9LCB7ICAgICAzMSwgOX0sIFwKKyAgICB7ICAgICA3MSwxMH0sIHsgICAgIDQ3LDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA2MywgOX0sIFwKKyAgICB7ICAgIDEyNywgOH0sIHsgICAgMjU1LCA5fSwgeyAgICAxMzUsMTB9LCB7ICAgICA3OSwgOX0sIFwKKyAgICB7ICAgIDE1OSwxMH0sIHsgICAgIDk1LCA5fSwgeyAgICAxOTEsMTF9LCB7ICAgICA2MywxMH0sIFwKKyAgICB7ICAgIDEyNywgOX0sIHsgICAgMjU1LCA4fSwgeyAgICA1MTEsIDl9LCB7ICAgIDI3MSwxMH0sIFwKKyAgICB7ICAgIDE0MywgOX0sIHsgICAgMjg3LCA4fSwgeyAgICA1NzUsIDl9LCB7ICAgIDMwMywxMH0sIFwKKyAgICB7ICAgIDE1OSwxMX0sIHsgICAgIDk1LDEwfSwgeyAgICAxOTEsMTJ9LCB7ICAgICA2MywxMX0sIFwKKyAgICB7ICAgIDEyNywxMH0sIHsgICAgMjU1LCA5fSwgeyAgICA1MTEsMTB9LCB7ICAgIDI3MSwgOX0sIFwKKyAgICB7ICAgIDU0MywxMH0sIHsgICAgMjg3LCA5fSwgeyAgICA1NzUsMTB9LCB7ICAgIDMwMywxMX0sIFwKKyAgICB7ICAgIDE1OSwxMH0sIHsgICAgMzE5LCA5fSwgeyAgICA2MzksMTB9LCB7ICAgIDMzNSwgOX0sIFwKKyAgICB7ICAgIDY3MSwxMH0sIHsgICAgMzUxLDExfSwgeyAgICAxOTEsMTB9LCB7ICAgIDM4MywgOX0sIFwKKyAgICB7ICAgIDc2NywxMH0sIHsgICAgNDE1LDExfSwgeyAgICAyMjMsMTB9LCB7ICAgIDQ0NywxMn0sIFwKKyAgICB7ICAgNDA5NiwxM30sIHsgICA4MTkyLDE0fSwgeyAgMTYzODQsMTV9LCB7ICAzMjc2OCwxNn0gfQorI2RlZmluZSBTUVJfRkZUX1RBQkxFM19TSVpFIDc2CisjZGVmaW5lIFNRUl9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAzNzEyCisKKyNkZWZpbmUgTVVMTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDIKKyNkZWZpbmUgTVVMTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgNjgKKyNkZWZpbmUgTVVMTE9fTVVMX05fVEhSRVNIT0xEICAgICAgICAgICAgIDkyMzYKKworI2RlZmluZSBEQ19ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA2OQorI2RlZmluZSBEQ19ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgIDIyMAorI2RlZmluZSBEQ19CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA3NQorI2RlZmluZSBEQ19CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE4OAorCisjZGVmaW5lIElOVl9NVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgIDU0CisjZGVmaW5lIElOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAgMjMwCisjZGVmaW5lIElOVl9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMjMwCisKKyNkZWZpbmUgQklOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAyNzgKKyNkZWZpbmUgUkVEQ18xX1RPX1JFRENfTl9USFJFU0hPTEQgICAgICAgICAgODcKKworI2RlZmluZSBNVV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTIxMAorI2RlZmluZSBNVV9ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgMTMwOAorI2RlZmluZSBNVVBJX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgIDEwNgorI2RlZmluZSBNVV9CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTAxNworI2RlZmluZSBNVV9CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTIxMAorCisjZGVmaW5lIE1BVFJJWDIyX1NUUkFTU0VOX1RIUkVTSE9MRCAgICAgICAgIDE0CisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAgMTEwCisjZGVmaW5lIEhHQ0RfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTM4CisjZGVmaW5lIEhHQ0RfUkVEVUNFX1RIUkVTSE9MRCAgICAgICAgICAgICAyNTc4CisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgNDA4CisjZGVmaW5lIEdDREVYVF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMjk4CisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAgICA0CisKKyNkZWZpbmUgR0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICAgMjQKKyNkZWZpbmUgU0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICA1MjcKKyNkZWZpbmUgU0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgIDEwOTAKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzMyL3A2L2dtcC1tcGFyYW0uaCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzMyL3A2L2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTUwNGI2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvcDYvZ21wLW1wYXJhbS5oCkBAIC0wLDAgKzEsMTY1IEBACisvKiBQb3dlclBDLTMyIGdtcC1tcGFyYW0uaCAtLSBDb21waWxlci9tYWNoaW5lIHBhcmFtZXRlciBoZWFkZXIgZmlsZS4KKworQ29weXJpZ2h0IDE5OTEsIDE5OTMsIDE5OTQsIDE5OTktMjAwNCwgMjAwOC0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgMzIKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgNAorCisvKiAzNTAwIE1IeiBQT1dFUjYgKi8KKworI2RlZmluZSBESVZSRU1fMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIERJVlJFTV8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfMVBfTUVUSE9EICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgTU9EXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgMworI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgMworI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICBNUF9TSVpFX1RfTUFYCisjZGVmaW5lIE1PRF8xXzJfVE9fTU9EXzFfNF9USFJFU0hPTEQgICAgICAgICAwICAvKiBuZXZlciBtcG5fbW9kXzFzXzJwICovCisjZGVmaW5lIFBSRUlOVl9NT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgICA4CisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIERJVl9RUl8yX1BJMl9USFJFU0hPTEQgICAgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKworI2RlZmluZSBNVUxfVE9PTTIyX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxOQorI2RlZmluZSBNVUxfVE9PTTMzX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA1NQorI2RlZmluZSBNVUxfVE9PTTQ0X1RIUkVTSE9MRCAgICAgICAgICAgICAgICA4OAorI2RlZmluZSBNVUxfVE9PTTZIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDEzNworI2RlZmluZSBNVUxfVE9PTThIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE4MQorCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTQzX1RIUkVTSE9MRCAgICAgIDU3CisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgIDU2CisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgIDU3CisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTYzX1RIUkVTSE9MRCAgICAgIDU2CisKKyNkZWZpbmUgU1FSX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBTUVJfVE9PTTJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBTUVJfVE9PTTNfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA1NgorI2RlZmluZSBTUVJfVE9PTTRfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDEzMAorI2RlZmluZSBTUVJfVE9PTTZfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE4OQorI2RlZmluZSBTUVJfVE9PTThfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDI5NgorCisjZGVmaW5lIE1VTE1JRF9UT09NNDJfVEhSRVNIT0xEICAgICAgICAgICAgIDI2CisKKyNkZWZpbmUgTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgU1FSTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTIKKworI2RlZmluZSBQT1dNX1NFQ19UQUJMRSAgMiwyNiwxMjcsNDUzLDEwNjgKKworI2RlZmluZSBNVUxfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDIxMiAgLyogayA9IDUgKi8KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDIxMiwgNX0sIHsgICAgIDEzLCA2fSwgeyAgICAgIDcsIDV9LCB7ICAgICAxNSwgNn0sIFwKKyAgICB7ICAgICAxMywgN30sIHsgICAgICA3LCA2fSwgeyAgICAgMTYsIDd9LCB7ICAgICAgOSwgNn0sIFwKKyAgICB7ICAgICAxOSwgN30sIHsgICAgIDEzLCA4fSwgeyAgICAgIDcsIDd9LCB7ICAgICAxOSwgOH0sIFwKKyAgICB7ICAgICAxMSwgN30sIHsgICAgIDI1LCA5fSwgeyAgICAgIDcsIDh9LCB7ICAgICAxNSwgN30sIFwKKyAgICB7ICAgICAzMSwgOH0sIHsgICAgIDE5LCA3fSwgeyAgICAgMzksIDh9LCB7ICAgICAyMywgOX0sIFwKKyAgICB7ICAgICAxNSwgOH0sIHsgICAgIDM5LCA5fSwgeyAgICAgMjMsIDh9LCB7ICAgICA0NywxMH0sIFwKKyAgICB7ICAgICAxNSwgOX0sIHsgICAgIDMxLCA4fSwgeyAgICAgNjMsIDl9LCB7ICAgICAzOSwgOH0sIFwKKyAgICB7ICAgICA3OSwgOX0sIHsgICAgIDQ3LDEwfSwgeyAgICAgMzEsIDl9LCB7ICAgICA2MywgOH0sIFwKKyAgICB7ICAgIDEyNywgOX0sIHsgICAgIDcxLCA4fSwgeyAgICAxNDMsIDd9LCB7ICAgIDI4NywgOX0sIFwKKyAgICB7ICAgICA3OSwxMH0sIHsgICAgIDQ3LDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA2MywgOX0sIFwKKyAgICB7ICAgIDEyNywgOH0sIHsgICAgMjU1LCA3fSwgeyAgICA1MTEsIDl9LCB7ICAgIDE0MywgOH0sIFwKKyAgICB7ICAgIDI4NywxMH0sIHsgICAgIDc5LCA5fSwgeyAgICAxNTksIDh9LCB7ICAgIDMxOSwgOX0sIFwKKyAgICB7ICAgIDE3NSwgOH0sIHsgICAgMzUxLDEwfSwgeyAgICAgOTUsIDl9LCB7ICAgIDE5MSwgOH0sIFwKKyAgICB7ICAgIDM4MywgOX0sIHsgICAgMjA3LDEwfSwgeyAgICAxMTEsMTF9LCB7ICAgICA2MywxMH0sIFwKKyAgICB7ICAgIDEyNywgOX0sIHsgICAgMjU1LCA4fSwgeyAgICA1MTEsMTB9LCB7ICAgIDE0MywgOX0sIFwKKyAgICB7ICAgIDI4NywgOH0sIHsgICAgNTc1LDEwfSwgeyAgICAxNTksIDl9LCB7ICAgIDMxOSwxMH0sIFwKKyAgICB7ICAgIDE3NSwgOX0sIHsgICAgMzUxLDExfSwgeyAgICAgOTUsMTB9LCB7ICAgIDE5MSwgOX0sIFwKKyAgICB7ICAgIDM4MywxMH0sIHsgICAgMjA3LCA5fSwgeyAgICA0MTUsMTJ9LCB7ICAgICA2MywxMX0sIFwKKyAgICB7ICAgIDEyNywxMH0sIHsgICAgMjU1LCA5fSwgeyAgICA1MTEsMTB9LCB7ICAgIDI4NywgOX0sIFwKKyAgICB7ICAgIDU3NSwxMX0sIHsgICAgMTU5LDEwfSwgeyAgICAzNTEsIDl9LCB7ICAgIDcwMywxMX0sIFwKKyAgICB7ICAgIDE5MSwxMH0sIHsgICAgNDE1LCA5fSwgeyAgICA4MzEsMTF9LCB7ICAgIDIyMywxMH0sIFwKKyAgICB7ICAgIDQ0NywxMn0sIHsgICA0MDk2LDEzfSwgeyAgIDgxOTIsMTR9LCB7ICAxNjM4NCwxNX0sIFwKKyAgICB7ICAzMjc2OCwxNn0gfQorI2RlZmluZSBNVUxfRkZUX1RBQkxFM19TSVpFIDg5CisjZGVmaW5lIE1VTF9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAxNzI4CisKKyNkZWZpbmUgU1FSX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICAxODQgIC8qIGsgPSA1ICovCisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICAxODQsIDV9LCB7ICAgICAgNiwgNH0sIHsgICAgIDEzLCA1fSwgeyAgICAgMTMsIDZ9LCBcCisgICAgeyAgICAgIDcsIDV9LCB7ICAgICAxNSwgNn0sIHsgICAgIDEzLCA3fSwgeyAgICAgIDcsIDZ9LCBcCisgICAgeyAgICAgMTYsIDd9LCB7ICAgICAgOSwgNn0sIHsgICAgIDE5LCA3fSwgeyAgICAgMTEsIDZ9LCBcCisgICAgeyAgICAgMjMsIDd9LCB7ICAgICAxMywgOH0sIHsgICAgICA3LCA3fSwgeyAgICAgMTksIDh9LCBcCisgICAgeyAgICAgMTEsIDd9LCB7ICAgICAyMywgOX0sIHsgICAgICA3LCA4fSwgeyAgICAgMjMsIDl9LCBcCisgICAgeyAgICAgMTUsIDh9LCB7ICAgICAzOSwgOX0sIHsgICAgIDIzLDEwfSwgeyAgICAgMTUsIDl9LCBcCisgICAgeyAgICAgMzEsIDh9LCB7ICAgICA2MywgOX0sIHsgICAgIDM5LCA4fSwgeyAgICAgNzksIDl9LCBcCisgICAgeyAgICAgNDcsMTB9LCB7ICAgICAzMSwgOX0sIHsgICAgIDYzLCA4fSwgeyAgICAxMjcsIDd9LCBcCisgICAgeyAgICAyNTUsIDl9LCB7ICAgICA3MSwgOH0sIHsgICAgMTQzLCA3fSwgeyAgICAyODcsIDZ9LCBcCisgICAgeyAgICA1NzUsIDl9LCB7ICAgICA3OSwxMH0sIHsgICAgIDQ3LDExfSwgeyAgICAgMzEsMTB9LCBcCisgICAgeyAgICAgNjMsIDl9LCB7ICAgIDEyNywgOH0sIHsgICAgMjU1LCA5fSwgeyAgICAxNDMsIDh9LCBcCisgICAgeyAgICAyODcsIDd9LCB7ICAgIDU3NSwxMH0sIHsgICAgIDc5LCA5fSwgeyAgICAxNTksIDh9LCBcCisgICAgeyAgICAzMTksIDl9LCB7ICAgIDE3NSwgOH0sIHsgICAgMzUxLDEwfSwgeyAgICAgOTUsIDl9LCBcCisgICAgeyAgICAxOTEsIDh9LCB7ICAgIDM4MywgOX0sIHsgICAgMjA3LDEwfSwgeyAgICAxMTEsIDl9LCBcCisgICAgeyAgICAyMjMsMTF9LCB7ICAgICA2MywxMH0sIHsgICAgMTI3LCA5fSwgeyAgICAyNTUsMTB9LCBcCisgICAgeyAgICAxNDMsIDl9LCB7ICAgIDI4NywgOH0sIHsgICAgNTc1LDEwfSwgeyAgICAxNTksIDl9LCBcCisgICAgeyAgICAzMTksMTB9LCB7ICAgIDE3NSwgOX0sIHsgICAgMzUxLDExfSwgeyAgICAgOTUsMTB9LCBcCisgICAgeyAgICAxOTEsIDl9LCB7ICAgIDM4MywxMH0sIHsgICAgMjA3LCA5fSwgeyAgICA0MTUsMTB9LCBcCisgICAgeyAgICAyMjMsMTJ9LCB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgeyAgICAyNTUsIDl9LCBcCisgICAgeyAgICA1MTEsMTB9LCB7ICAgIDI4NywgOX0sIHsgICAgNTc1LDExfSwgeyAgICAxNTksMTB9LCBcCisgICAgeyAgICAzNTEsIDl9LCB7ICAgIDcwMywgOH0sIHsgICAxNDA3LDExfSwgeyAgICAxOTEsMTB9LCBcCisgICAgeyAgICA0MTUsMTF9LCB7ICAgIDIyMywxMH0sIHsgICAgNDQ3LCA5fSwgeyAgICA4OTUsMTJ9LCBcCisgICAgeyAgIDQwOTYsMTN9LCB7ICAgODE5MiwxNH0sIHsgIDE2Mzg0LDE1fSwgeyAgMzI3NjgsMTZ9IH0KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTNfU0laRSA5MgorI2RlZmluZSBTUVJfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTYwMAorCisjZGVmaW5lIE1VTExPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAyCisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDU3CisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgICAzMTc2CisKKyNkZWZpbmUgRENfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNTIKKyNkZWZpbmUgRENfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAxODcKKyNkZWZpbmUgRENfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNjQKKyNkZWZpbmUgRENfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNDYKKworI2RlZmluZSBJTlZfTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICA2OAorI2RlZmluZSBJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE4MgorI2RlZmluZSBJTlZfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDE4MgorCisjZGVmaW5lIEJJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTg2CisjZGVmaW5lIFJFRENfMV9UT19SRURDX05fVEhSRVNIT0xEICAgICAgICAgIDYwCisKKyNkZWZpbmUgTVVfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA5MjQKKyNkZWZpbmUgTVVfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICA4MDcKKyNkZWZpbmUgTVVQSV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgNzMKKyNkZWZpbmUgTVVfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICA2NjcKKyNkZWZpbmUgTVVfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA4MjMKKworI2RlZmluZSBNQVRSSVgyMl9TVFJBU1NFTl9USFJFU0hPTEQgICAgICAgICAgOAorI2RlZmluZSBIR0NEX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgICA2MQorI2RlZmluZSBIR0NEX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA1MAorI2RlZmluZSBIR0NEX1JFRFVDRV9USFJFU0hPTEQgICAgICAgICAgICAgIDk3NAorI2RlZmluZSBHQ0RfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDE5NQorI2RlZmluZSBHQ0RFWFRfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDEzNAorI2RlZmluZSBKQUNPQklfQkFTRV9NRVRIT0QgICAgICAgICAgICAgICAgICAgNAorCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgIDIxCisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTkwCisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgNDExCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi9wNy9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi9wNy9nbXAtbXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ0OGRhYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzMyL3A3L2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDE3MCBAQAorLyogUG93ZXJQQy0zMiBnbXAtbXBhcmFtLmggLS0gQ29tcGlsZXIvbWFjaGluZSBwYXJhbWV0ZXIgaGVhZGVyIGZpbGUuCisKK0NvcHlyaWdodCAyMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgMzIKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgNAorCisvKiA0MTUwIE1IeiBQT1dFUjgvVDQgKi8KKy8qIEZGVCB0dW5pbmcgbGltaXQgPSAwLjUgTSAqLworLyogR2VuZXJhdGVkIGJ5IHR1bmV1cC5jLCAyMDE3LTAyLTE4LCBnY2MgNi4xICovCisKKyNkZWZpbmUgRElWUkVNXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBESVZSRU1fMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PRF8xXzFQX01FVEhPRCAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgOQorI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgOAorI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAgMCAgLyogbmV2ZXIgbXBuX21vZF8xXzFwICovCisjZGVmaW5lIE1PRF8xXzJfVE9fTU9EXzFfNF9USFJFU0hPTEQgICAgICAgIDIyCisjZGVmaW5lIFBSRUlOVl9NT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgIDExCisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIERJVl9RUl8xTl9QSTFfTUVUSE9EICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIERJVl9RUl8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICA0CisjZGVmaW5lIERJVl9RUl8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICAzCisjZGVmaW5lIERJVl9RUl8yX1BJMl9USFJFU0hPTEQgICAgICAgICAgICAgIDE1CisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgICAgICAgMzkKKworI2RlZmluZSBESVZfMV9WU19NVUxfMV9QRVJDRU5UICAgICAgICAgICAgIDM0MworCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDczCisjZGVmaW5lIE1VTF9UT09NNDRfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjAyCisjZGVmaW5lIE1VTF9UT09NNkhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjg2CisjZGVmaW5lIE1VTF9UT09NOEhfVEhSRVNIT0xEICAgICAgICAgICAgICAgNDMwCisKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNDNfVEhSRVNIT0xEICAgICAxMzcKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxNDAKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxMjgKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNjNfVEhSRVNIT0xEICAgICAxNDUKKyNkZWZpbmUgTVVMX1RPT000M19UT19UT09NNTRfVEhSRVNIT0xEICAgICAxMjEKKworI2RlZmluZSBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDI2CisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgICAgIDk3CisjZGVmaW5lIFNRUl9UT09NNF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjM2CisjZGVmaW5lIFNRUl9UT09NNl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMzE4CisjZGVmaW5lIFNRUl9UT09NOF9USFJFU0hPTEQgICAgICAgICAgICAgICAgNDc4CisKKyNkZWZpbmUgTVVMTUlEX1RPT000Ml9USFJFU0hPTEQgICAgICAgICAgICAgMzQKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxOAorI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxOAorCisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgNDQ0ICAvKiBrID0gNSAqLworI2RlZmluZSBNVUxfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgNDQ0LCA1fSwgeyAgICAgMjEsIDZ9LCB7ICAgICAxMiwgNX0sIHsgICAgIDI1LCA2fSwgXAorICAgIHsgICAgIDEzLCA1fSwgeyAgICAgMjcsIDZ9LCB7ICAgICAyMSwgN30sIHsgICAgIDExLCA2fSwgXAorICAgIHsgICAgIDI1LCA3fSwgeyAgICAgMTMsIDZ9LCB7ICAgICAyNywgN30sIHsgICAgIDE3LCA2fSwgXAorICAgIHsgICAgIDM1LCA3fSwgeyAgICAgMjEsIDh9LCB7ICAgICAxMSwgN30sIHsgICAgIDI3LCA4fSwgXAorICAgIHsgICAgIDE1LCA3fSwgeyAgICAgMzUsIDh9LCB7ICAgICAxOSwgN30sIHsgICAgIDQxLCA4fSwgXAorICAgIHsgICAgIDI3LCA5fSwgeyAgICAgMTUsIDh9LCB7ICAgICAzOSwgOX0sIHsgICAgIDIzLCA4fSwgXAorICAgIHsgICAgIDUxLDEwfSwgeyAgICAgMTUsIDl9LCB7ICAgICAzMSwgOH0sIHsgICAgIDYzLCA5fSwgXAorICAgIHsgICAgIDM5LCA4fSwgeyAgICAgNzksIDl9LCB7ICAgICA0NywxMH0sIHsgICAgIDMxLCA5fSwgXAorICAgIHsgICAgIDc5LDEwfSwgeyAgICAgNDcsMTF9LCB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA5fSwgXAorICAgIHsgICAgMTM1LDEwfSwgeyAgICAgNzksIDl9LCB7ICAgIDE1OSwxMH0sIHsgICAgIDk1LCA5fSwgXAorICAgIHsgICAgMTkxLDEwfSwgeyAgICAxMTEsMTF9LCB7ICAgICA2MywxMH0sIHsgICAgMTI3LCA5fSwgXAorICAgIHsgICAgMjU1LDEwfSwgeyAgICAxNDMsIDl9LCB7ICAgIDI4NywxMH0sIHsgICAgMTU5LDExfSwgXAorICAgIHsgICAgIDk1LDEwfSwgeyAgICAxOTEsMTJ9LCB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgXAorICAgIHsgICAgMjU1LCA5fSwgeyAgICA1MTEsMTB9LCB7ICAgIDI3MSwgOX0sIHsgICAgNTQzLCA4fSwgXAorICAgIHsgICAxMDg3LDEwfSwgeyAgICAyODcsMTF9LCB7ICAgIDE1OSwxMH0sIHsgICAgMzE5LCA5fSwgXAorICAgIHsgICAgNjM5LDEwfSwgeyAgICAzNTEsMTF9LCB7ICAgIDE5MSwxMH0sIHsgICAgNDE1LCA5fSwgXAorICAgIHsgICAgODMxLDExfSwgeyAgICAyMjMsMTJ9LCB7ICAgNDA5NiwxM30sIHsgICA4MTkyLDE0fSwgXAorICAgIHsgIDE2Mzg0LDE1fSwgeyAgMzI3NjgsMTZ9IH0KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTNfU0laRSA3MAorI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNDU0NAorCisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgMzMyICAvKiBrID0gNSAqLworI2RlZmluZSBTUVJfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgMzMyLCA1fSwgeyAgICAgMjEsIDZ9LCB7ICAgICAxMSwgNX0sIHsgICAgIDIzLCA2fSwgXAorICAgIHsgICAgIDIxLCA3fSwgeyAgICAgMTEsIDZ9LCB7ICAgICAyNCwgN30sIHsgICAgIDEzLCA2fSwgXAorICAgIHsgICAgIDI3LCA3fSwgeyAgICAgMTUsIDZ9LCB7ICAgICAzMSwgN30sIHsgICAgIDIxLCA4fSwgXAorICAgIHsgICAgIDExLCA3fSwgeyAgICAgMjcsIDh9LCB7ICAgICAxNSwgN30sIHsgICAgIDMzLCA4fSwgXAorICAgIHsgICAgIDE5LCA3fSwgeyAgICAgMzksIDh9LCB7ICAgICAyNywgOX0sIHsgICAgIDE1LCA4fSwgXAorICAgIHsgICAgIDM5LCA5fSwgeyAgICAgMjMsIDh9LCB7ICAgICA0NywxMH0sIHsgICAgIDE1LCA5fSwgXAorICAgIHsgICAgIDMxLCA4fSwgeyAgICAgNjMsIDl9LCB7ICAgICA0NywxMH0sIHsgICAgIDMxLCA5fSwgXAorICAgIHsgICAgIDc5LDEwfSwgeyAgICAgNDcsMTF9LCB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA5fSwgXAorICAgIHsgICAgMTI3LCA4fSwgeyAgICAyNTUsIDl9LCB7ICAgIDEzNSwxMH0sIHsgICAgIDk1LCA5fSwgXAorICAgIHsgICAgMTkxLDExfSwgeyAgICAgNjMsMTB9LCB7ICAgIDEyNywgOX0sIHsgICAgMjU1LCA4fSwgXAorICAgIHsgICAgNTExLCA5fSwgeyAgICAyNzEsMTB9LCB7ICAgIDE0MywgOX0sIHsgICAgMjg3LCA4fSwgXAorICAgIHsgICAgNTc1LCA5fSwgeyAgICAzMDMsIDh9LCB7ICAgIDYwNywxMH0sIHsgICAgMTU5LDExfSwgXAorICAgIHsgICAgIDk1LDEwfSwgeyAgICAxOTEsMTJ9LCB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgXAorICAgIHsgICAgMjU1LCA5fSwgeyAgICA1MTEsMTB9LCB7ICAgIDI3MSwgOX0sIHsgICAgNTQzLDEwfSwgXAorICAgIHsgICAgMjg3LCA5fSwgeyAgICA1NzUsMTB9LCB7ICAgIDMwMywgOX0sIHsgICAgNjA3LDExfSwgXAorICAgIHsgICAgMTU5LDEwfSwgeyAgICAzMTksIDl9LCB7ICAgIDYzOSwxMH0sIHsgICAgMzUxLCA5fSwgXAorICAgIHsgICAgNzAzLDExfSwgeyAgICAxOTEsMTB9LCB7ICAgIDM4MywgOX0sIHsgICAgNzY3LDEwfSwgXAorICAgIHsgICAgNDE1LDExfSwgeyAgICAyMjMsMTB9LCB7ICAgIDQ0NywxMn0sIHsgICA0MDk2LDEzfSwgXAorICAgIHsgICA4MTkyLDE0fSwgeyAgMTYzODQsMTV9LCB7ICAzMjc2OCwxNn0gfQorI2RlZmluZSBTUVJfRkZUX1RBQkxFM19TSVpFIDc1CisjZGVmaW5lIFNRUl9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAzNTIwCisKKyNkZWZpbmUgTVVMTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNVUxMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAzNgorI2RlZmluZSBNVUxMT19NVUxfTl9USFJFU0hPTEQgICAgICAgICAgICAgODY0OAorI2RlZmluZSBTUVJMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgNQorI2RlZmluZSBTUVJMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgIDE5MworI2RlZmluZSBTUVJMT19TUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgNjY3NQorCisjZGVmaW5lIERDX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDMzCisjZGVmaW5lIERDX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAgMTM0CisjZGVmaW5lIERDX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDUxCisjZGVmaW5lIERDX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTM0CisKKyNkZWZpbmUgSU5WX01VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgNjYKKyNkZWZpbmUgSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgICAxMzIKKyNkZWZpbmUgSU5WX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAxMzEKKworI2RlZmluZSBCSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgIDI5MgorI2RlZmluZSBSRURDXzFfVE9fUkVEQ19OX1RIUkVTSE9MRCAgICAgICAgICA2NworCisjZGVmaW5lIE1VX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAxMzM0CisjZGVmaW5lIE1VX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAxMzM0CisjZGVmaW5lIE1VUElfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDYyCisjZGVmaW5lIE1VX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAxMTQyCisjZGVmaW5lIE1VX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAxNDcwCisKKyNkZWZpbmUgUE9XTV9TRUNfVEFCTEUgIDMsMjUsMTE0LDQ4MCwxNDg2CisKKyNkZWZpbmUgR0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICAgMTQKKyNkZWZpbmUgU0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICA2NDQKKyNkZWZpbmUgU0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgIDEzNjUKKworI2RlZmluZSBGQUNfRFNDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDEwNworI2RlZmluZSBGQUNfT0REX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAyOQorCisjZGVmaW5lIE1BVFJJWDIyX1NUUkFTU0VOX1RIUkVTSE9MRCAgICAgICAgIDE2CisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAgIDk1CisjZGVmaW5lIEhHQ0RfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTIxCisjZGVmaW5lIEhHQ0RfUkVEVUNFX1RIUkVTSE9MRCAgICAgICAgICAgICAyNjgxCisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgNDU2CisjZGVmaW5lIEdDREVYVF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMzg2CisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAgICA0CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi9wb3dlcnBjLWRlZnMubTQgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi9wb3dlcnBjLWRlZnMubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGExNDUxYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzMyL3Bvd2VycGMtZGVmcy5tNApAQCAtMCwwICsxLDEyMSBAQAorZGl2ZXJ0KC0xKQorCitkbmwgIG00IG1hY3JvcyBmb3IgUG93ZXJQQyBhc3NlbWJsZXIgKDMyIGFuZCA2NCBiaXQpLgorCitkbmwgIENvcHlyaWdodCAyMDAwLCAyMDAyLCAyMDAzLCAyMDE3LCAyMDE4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworZG5sICBDYWxsZWQ6IFBST0xPR1VFX2NwdShHU1lNX1BSRUZJWGAnZm9vKQorZG5sCitkbmwgIFRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIGRlZmF1bHQgaW4gbXBuL2FzbS1kZWZzLm00LCBidXQgd2l0aCBBTElHTig0KQorZG5sICBub3QgOC4KK2RubAorZG5sICA0LWJ5dGUgYWxpZ25tZW50IGlzIG5vcm1hbGx5IGVub3VnaCwgY2VydGFpbmx5IGl0J3Mgd2hhdCBnY2MgZ2l2ZXMuICBXZQorZG5sICBkb24ndCB3YW50IGJpZ2dlciBhbGlnbm1lbnQgd2l0aGluIFBST0xPR1VFIHNpbmNlIGl0IGNhbiBpbnRyb2R1Y2UKK2RubCAgcGFkZGluZyBpbnRvIG11bHRpcGxlLWVudHJ5cG9pbnQgcm91dGluZXMsIGFuZCB3aXRoIGdhcyBzdWNoIHBhZGRpbmcgaXMKK2RubCAgemVybyB3b3Jkcywgd2hpY2ggYXJlIG5vdCB2YWxpZCBpbnN0cnVjdGlvbnMuCisKK2RlZmluZShgUFJPTE9HVUVfY3B1JywKK200X2Fzc2VydF9udW1hcmdzKDEpCitgCVRFWFQKKwlBTElHTig0KQorCUdMT0JMCWAkMScgR0xPQkxfQVRUUgorCVRZUEUoYCQxJyxgZnVuY3Rpb24nKQorYCQxJ0xBQkVMX1NVRkZJWCcpCisKKworZG5sICBVc2FnZTogcjAgLi4uIHIzMSwgY3IwIC4uLiBjcjcKK2RubAorZG5sICBSZWdpc3RlcnMgbmFtZXMsIGVpdGhlciBsZWZ0IGFzICJyMCIgZXRjIG9yIG1hcHBlZCB0byBwbGFpbiAwIGV0YywKK2RubCAgYWNjb3JkaW5nIHRvIHRoZSByZXN1bHQgb2YgdGhlIEdNUF9BU01fUE9XRVJQQ19SRUdJU1RFUlMgY29uZmlndXJlCitkbmwgIHRlc3QuCisKK2lmZWxzZShXQU5UX1JfUkVHSVNURVJTLG5vLGAKK2Zvcmxvb3AoaSwwLDMxLGBkZWZsaXQoYHInaSxpKScpCitmb3Jsb29wKGksMCwzMSxgZGVmbGl0KGB2J2ksaSknKQorZm9ybG9vcChpLDAsMzEsYGRlZmxpdChgZidpLGkpJykKK2Zvcmxvb3AoaSwwLDcsIGBkZWZsaXQoYGNyJ2ksaSknKQorJykKKworCitkbmwgIFVzYWdlOiBBU1NFUlQoY29uZCxpbnN0cnVjdGlvbnMpCitkbmwKK2RubCAgSWYgV0FOVF9BU1NFUlQgaXMgMSwgb3V0cHV0IHRoZSBnaXZlbiBpbnN0cnVjdGlvbnMgYW5kIGV4cGVjdCB0aGUgZ2l2ZW4KK2RubCAgZmxhZ3MgY29uZGl0aW9uIHRvIHRoZW4gYmUgc2F0aXNmaWVkLiAgRm9yIGV4YW1wbGUsCitkbmwKK2RubCAgICAgICAgIEFTU0VSVChlcSwgYGNtcHdpIHI2LCAxMjMnKQorZG5sCitkbmwgIFRoZSBpbnN0cnVjdGlvbnMgY2FuIGJlIG9taXR0ZWQgdG8ganVzdCBhc3NlcnQgYSBmbGFncyBjb25kaXRpb24gd2l0aAorZG5sICBubyBleHRyYSBjYWxjdWxhdGlvbi4gIEZvciBleGFtcGxlLAorZG5sCitkbmwgICAgICAgICBBU1NFUlQobmUpCitkbmwKK2RubCAgVGhlIGNvbmRpdGlvbiBjYW4gYmUgb21pdHRlZCB0byBqdXN0IG91dHB1dCB0aGUgZ2l2ZW4gaW5zdHJ1Y3Rpb25zIHdoZW4KK2RubCAgYXNzZXJ0aW9uIGNoZWNraW5nIGlzIHdhbnRlZC4gIEZvciBleGFtcGxlLAorZG5sCitkbmwgICAgICAgICBBU1NFUlQoLCBgbXIgcjExLCByMCcpCitkbmwKK2RubCAgVXNpbmcgYSB6ZXJvIHdvcmQgZm9yIGFuIGlsbGVnYWwgaW5zdHJ1Y3Rpb24gaXMgcHJvYmFibHkgbm90IGlkZWFsLAorZG5sICBzaW5jZSBpdCBtYXJrcyB0aGUgYmVnaW5uaW5nIG9mIGEgdHJhY2ViYWNrIHRhYmxlIGluIHRoZSA2NC1iaXQgQUJJLgorZG5sICBCdXQgYXNzZXJ0aW9ucyBhcmUgb25seSBmb3IgZGV2ZWxvcG1lbnQsIHNvIGl0IGRvZXNuJ3QgbWF0dGVyIHRvbyBtdWNoLgorCitkZWZpbmUoQVNTRVJULAorbTRfYXNzZXJ0X251bWFyZ3NfcmFuZ2UoMSwyKQorbTRfYXNzZXJ0X2RlZmluZWQoYFdBTlRfQVNTRVJUJykKK2BpZmVsc2UoV0FOVF9BU1NFUlQsMSwKKwlgQyBBU1NFUlQKKwkkMgoraWZlbHNlKGAkMScsLCwKK2AJYiQxCUwoQVNTRVJUX29rYCdBU1NFUlRfY291bnRlcikKKwlXMzIJMAlDIGFzc2VydGlvbiBmYWlsZWQKK0woQVNTRVJUX29rYCdBU1NFUlRfY291bnRlcik6CitkZWZpbmUoYEFTU0VSVF9jb3VudGVyJyxpbmNyKEFTU0VSVF9jb3VudGVyKSkKKycpJyknKQorCitkZWZpbmUoQVNTRVJUX2NvdW50ZXIsMSkKKworZG5sICBNYW51YWxseSBhc3NlbWJsZSBzb21lIG5ldyBpbnN0cnVjdGlvbnMKK2RubAorCitkZWZpbmUoYG1hZGRsZCcsbTRfYXNzZXJ0X251bWFyZ3MoNClgZG5sCisubG9uZyBldmFsKDB4MTAwMDAwMzMrbTRfbHNoaWZ0KCQxLDIxKSttNF9sc2hpZnQoJDIsMTYpK200X2xzaGlmdCgkMywxMSkrbTRfbHNoaWZ0KCQ0LDYpKScpCisKK2RlZmluZShgbWFkZGhkdScsbTRfYXNzZXJ0X251bWFyZ3MoNClgZG5sCisubG9uZyBldmFsKDB4MTAwMDAwMzErbTRfbHNoaWZ0KCQxLDIxKSttNF9sc2hpZnQoJDIsMTYpK200X2xzaGlmdCgkMywxMSkrbTRfbHNoaWZ0KCQ0LDYpKScpCisKK2RlZmluZShgcG9wY250ZCcsbTRfYXNzZXJ0X251bWFyZ3MoMilgZG5sCisubG9uZyBldmFsKDB4N2MwMDAzZjQrbTRfbHNoaWZ0KCQyLDIxKSttNF9sc2hpZnQoJDEsMTYpKScpCisKK2RlZmluZShgZGl2ZGV1JyxtNF9hc3NlcnRfbnVtYXJncygzKWBkbmwKKy5sb25nIGV2YWwoMHg3YzAwMDMxMittNF9sc2hpZnQoJDEsMjEpK200X2xzaGlmdCgkMiwxNikrbTRfbHNoaWZ0KCQzLDExKSknKQorCitkZWZpbmUoYGFkZGV4JyxtNF9hc3NlcnRfbnVtYXJncyg0KWBkbmwKKy5sb25nIGV2YWwoMHg3YzAwMDE1NCttNF9sc2hpZnQoJDEsMjEpK200X2xzaGlmdCgkMiwxNikrbTRfbHNoaWZ0KCQzLDExKSttNF9sc2hpZnQoJDQsOSkpJykKKworZGl2ZXJ0CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi9yc2hpZnQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvcnNoaWZ0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODZjZGNiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvcnNoaWZ0LmFzbQpAQCAtMCwwICsxLDE2NiBAQAorZG5sICBQb3dlclBDLTMyIG1wbl9yc2hpZnQgLS0gU2hpZnQgYSBudW1iZXIgcmlnaHQuCisKK2RubCAgQ29weXJpZ2h0IDE5OTUsIDE5OTgsIDIwMDAsIDIwMDItMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgICAgICAgIGN5Y2xlcy9saW1iCitDIDYwM2U6ICAgICAgICAgICAgPworQyA2MDRlOiAgICAgICAgICAgIDMuMAorQyA3NXggKEczKTogICAgICAgIDMuMAorQyA3NDAwLDc0MTAgKEc0KTogIDMuMAorQyA3NDQ1LDc0NTUgKEc0Kyk6IDIuNQorQyA3NDQ3LDc0NTcgKEc0Kyk6IDIuMjUKK0MgcG93ZXI0L3BwYzk3MDogICAyLjUKK0MgcG93ZXI1OiAgICAgICAgICAyLjUKKworQyBJTlBVVCBQQVJBTUVURVJTCitDIHJwCXIzCitDIHVwCXI0CitDIG4JcjUKK0MgY250CXI2CisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fcnNoaWZ0KQorCWNtcHdpCWNyMCwgcjUsIDMwCUMgbW9yZSB0aGFuIDMwIGxpbWJzPworCWFkZGkJcjcsIHIzLCAtNAlDIGRzdC00CisJYmd0CUwoQklHKQkJQyBicmFuY2ggaWYgbW9yZSB0aGFuIDEyIGxpbWJzCisKKwltdGN0cglyNQkJQyBjb3B5IHNpemUgaW50byBDVFIKKwlzdWJmaWMJcjgsIHI2LCAzMgorCWx3eglyMTEsIDAocjQpCUMgbG9hZCBmaXJzdCBzMSBsaW1iCisJc2x3CXIzLCByMTEsIHI4CUMgY29tcHV0ZSBmdW5jdGlvbiByZXR1cm4gdmFsdWUKKwliZHoJTChlbmQxKQorCitMKG9vcCk6CWx3enUJcjEwLCA0KHI0KQorCXNydwlyOSwgcjExLCByNgorCXNsdwlyMTIsIHIxMCwgcjgKKwlvcglyOSwgcjksIHIxMgorCXN0d3UJcjksIDQocjcpCisJYmR6CUwoZW5kMikKKwlsd3p1CXIxMSwgNChyNCkKKwlzcncJcjksIHIxMCwgcjYKKwlzbHcJcjEyLCByMTEsIHI4CisJb3IJcjksIHI5LCByMTIKKwlzdHd1CXI5LCA0KHI3KQorCWJkbnoJTChvb3ApCisKK0woZW5kMSk6CisJc3J3CXIwLCByMTEsIHI2CisJc3R3CXIwLCA0KHI3KQorCWJscgorTChlbmQyKToKKwlzcncJcjAsIHIxMCwgcjYKKwlzdHcJcjAsIDQocjcpCisJYmxyCisKK0woQklHKToKKwlzdHd1CXIxLCAtNDgocjEpCisJc3RtdwlyMjQsIDgocjEpCUMgc2F2ZSByZWdpc3RlcnMgd2UgYXJlIHN1cHBvc2VkIHRvIHByZXNlcnZlCisJbHd6CXI5LCAwKHI0KQorCXN1YmZpYwlyOCwgcjYsIDMyCisJc2x3CXIzLCByOSwgcjgJQyBjb21wdXRlIGZ1bmN0aW9uIHJldHVybiB2YWx1ZQorCXNydwlyMCwgcjksIHI2CisJYWRkaQlyNSwgcjUsIC0xCisKKwlhbmRpLglyMTAsIHI1LCAzCUMgY291bnQgZm9yIHNwaWxsIGxvb3AKKwliZXEJTChlKQorCW10Y3RyCXIxMAorCWx3enUJcjI4LCA0KHI0KQorCWJkeglMKHhlMCkKKworTChsb29wMCk6CisJc3J3CXIxMiwgcjI4LCByNgorCXNsdwlyMjQsIHIyOCwgcjgKKwlsd3p1CXIyOCwgNChyNCkKKwlvcglyMjQsIHIwLCByMjQKKwlzdHd1CXIyNCwgNChyNykKKwltcglyMCwgcjEyCisJYmRueglMKGxvb3AwKQlDIHRha2VuIGF0IG1vc3Qgb25jZSEKKworTCh4ZTApOglzcncJcjEyLCByMjgsIHI2CisJc2x3CXIyNCwgcjI4LCByOAorCW9yCXIyNCwgcjAsIHIyNAorCXN0d3UJcjI0LCA0KHI3KQorCW1yCXIwLCByMTIKKworTChlKToJc3J3aQlyNSwgcjUsIDIJQyBjb3VudCBmb3IgdW5yb2xsZWQgbG9vcAorCWFkZGkJcjUsIHI1LCAtMQorCW10Y3RyCXI1CisJbHd6CXIyOCwgNChyNCkKKwlsd3oJcjI5LCA4KHI0KQorCWx3eglyMzAsIDEyKHI0KQorCWx3enUJcjMxLCAxNihyNCkKKworTChsb29wVSk6CisJc3J3CXI5LCByMjgsIHI2CisJc2x3CXIyNCwgcjI4LCByOAorCWx3eglyMjgsIDQocjQpCisJc3J3CXIxMCwgcjI5LCByNgorCXNsdwlyMjUsIHIyOSwgcjgKKwlsd3oJcjI5LCA4KHI0KQorCXNydwlyMTEsIHIzMCwgcjYKKwlzbHcJcjI2LCByMzAsIHI4CisJbHd6CXIzMCwgMTIocjQpCisJc3J3CXIxMiwgcjMxLCByNgorCXNsdwlyMjcsIHIzMSwgcjgKKwlsd3p1CXIzMSwgMTYocjQpCisJb3IJcjI0LCByMCwgcjI0CisJc3R3CXIyNCwgNChyNykKKwlvcglyMjUsIHI5LCByMjUKKwlzdHcJcjI1LCA4KHI3KQorCW9yCXIyNiwgcjEwLCByMjYKKwlzdHcJcjI2LCAxMihyNykKKwlvcglyMjcsIHIxMSwgcjI3CisJc3R3dQlyMjcsIDE2KHI3KQorCW1yCXIwLCByMTIKKwliZG56CUwobG9vcFUpCisKKwlzcncJcjksIHIyOCwgcjYKKwlzbHcJcjI0LCByMjgsIHI4CisJc3J3CXIxMCwgcjI5LCByNgorCXNsdwlyMjUsIHIyOSwgcjgKKwlzcncJcjExLCByMzAsIHI2CisJc2x3CXIyNiwgcjMwLCByOAorCXNydwlyMTIsIHIzMSwgcjYKKwlzbHcJcjI3LCByMzEsIHI4CisJb3IJcjI0LCByMCwgcjI0CisJc3R3CXIyNCwgNChyNykKKwlvcglyMjUsIHI5LCByMjUKKwlzdHcJcjI1LCA4KHI3KQorCW9yCXIyNiwgcjEwLCByMjYKKwlzdHcJcjI2LCAxMihyNykKKwlvcglyMjcsIHIxMSwgcjI3CisJc3R3CXIyNywgMTYocjcpCisKKwlzdHcJcjEyLCAyMChyNykKKwlsbXcJcjI0LCA4KHIxKQlDIHJlc3RvcmUgcmVnaXN0ZXJzCisJYWRkaQlyMSwgcjEsIDQ4CisJYmxyCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi9zZWNfdGFic2VsZWN0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzMyL3NlY190YWJzZWxlY3QuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MDcxOGUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi9zZWNfdGFic2VsZWN0LmFzbQpAQCAtMCwwICsxLDE0MyBAQAorZG5sICBQb3dlclBDLTMyIG1wbl9zZWNfdGFic2VsZWN0LgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgICAgICAgICAgIGN5Y2xlcy9saW1iCitDIDYwM2U6CQkJID8KK0MgNjA0ZToJCQkgPworQyA3NXggKEczKToJCSA/CitDIDc0MDAsNzQxMCAoRzQpOgkgMi41CitDIDc0NHgsNzQ1eCAoRzQrKToJIDIuMAorQyBwb3dlcjQvcHBjOTcwOgkgMi4wCitDIHBvd2VyNToJCSA/CisKK2RlZmluZShgcnAnLCAgICAgYHIzJykKK2RlZmluZShgdHAnLCAgICAgYHI0JykKK2RlZmluZShgbicsICAgICAgYHI1JykKK2RlZmluZShgbmVudHMnLCAgYHI2JykKK2RlZmluZShgd2hpY2gnLCAgYHI3JykKKworZGVmaW5lKGBpJywgICAgICBgcjgnKQorZGVmaW5lKGBqJywgICAgICBgcjknKQorZGVmaW5lKGBzdHJpZGUnLCBgcjEyJykKK2RlZmluZShgbWFzaycsICAgYHIxMScpCisKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9zZWNfdGFic2VsZWN0KQorCXN0d3UJcjEsIC0zMihyMSkKKwlhZGRpYy4JaiwgbiwgLTQJCUMgb3V0ZXIgbG9vcCBpbmR1Y3Rpb24gdmFyaWFibGUKKwlzdG13CXIyNywgOChyMSkKKwlzbHdpCXN0cmlkZSwgbiwgMgorCisJYmx0CWNyMCwgTChvdXRlcl9lbmQpCitMKG91dGVyX3RvcCk6CisJbXRjdHIJbmVudHMKKwltcglyMTAsIHRwCisJbGkJcjI4LCAwCisJbGkJcjI5LCAwCisJbGkJcjMwLCAwCisJbGkJcjMxLCAwCisJYWRkaWMuCWosIGosIC00CQlDIG91dGVyIGxvb3AgaW5kdWN0aW9uIHZhcmlhYmxlCisJbXIJaSwgd2hpY2gKKworCUFMSUdOKDE2KQorTCh0b3ApOglhZGRpYwlpLCBpLCAtMQkJQyBzZXQgY2FycnkgaWZmIGkgIT0gMAorCXN1YmZlCW1hc2ssIG1hc2ssIG1hc2sKKwlsd3oJcjAsIDAodHApCisJbHd6CXIyNywgNCh0cCkKKwlhbmQJcjAsIHIwLCBtYXNrCisJYW5kCXIyNywgcjI3LCBtYXNrCisJb3IJcjI4LCByMjgsIHIwCisJb3IJcjI5LCByMjksIHIyNworCWx3eglyMCwgOCh0cCkKKwlsd3oJcjI3LCAxMih0cCkKKwlhbmQJcjAsIHIwLCBtYXNrCisJYW5kCXIyNywgcjI3LCBtYXNrCisJb3IJcjMwLCByMzAsIHIwCisJb3IJcjMxLCByMzEsIHIyNworCWFkZAl0cCwgdHAsIHN0cmlkZQorCWJkbnoJTCh0b3ApCisKKwlzdHcJcjI4LCAwKHJwKQorCXN0dwlyMjksIDQocnApCisJc3R3CXIzMCwgOChycCkKKwlzdHcJcjMxLCAxMihycCkKKwlhZGRpCXRwLCByMTAsIDE2CisJYWRkaQlycCwgcnAsIDE2CisJYmdlCWNyMCwgTChvdXRlcl90b3ApCitMKG91dGVyX2VuZCk6CisKKwlhbmRpLglyMCwgbiwgMgorCWJlcQljcjAsIEwoYjB4KQorTChiMXgpOgltdGN0cgluZW50cworCW1yCXIxMCwgdHAKKwlsaQlyMjgsIDAKKwlsaQlyMjksIDAKKwltcglpLCB3aGljaAorCUFMSUdOKDE2KQorTCh0cDIpOglhZGRpYwlpLCBpLCAtMQorCXN1YmZlCW1hc2ssIG1hc2ssIG1hc2sKKwlsd3oJcjAsIDAodHApCisJbHd6CXIyNywgNCh0cCkKKwlhbmQJcjAsIHIwLCBtYXNrCisJYW5kCXIyNywgcjI3LCBtYXNrCisJb3IJcjI4LCByMjgsIHIwCisJb3IJcjI5LCByMjksIHIyNworCWFkZAl0cCwgdHAsIHN0cmlkZQorCWJkbnoJTCh0cDIpCisJc3R3CXIyOCwgMChycCkKKwlzdHcJcjI5LCA0KHJwKQorCWFkZGkJdHAsIHIxMCwgOAorCWFkZGkJcnAsIHJwLCA4CisKK0woYjB4KToJYW5kaS4JcjAsIG4sIDEKKwliZXEJY3IwLCBMKGIwMCkKK0woYjAxKToJbXRjdHIJbmVudHMKKwltcglyMTAsIHRwCisJbGkJcjI4LCAwCisJbXIJaSwgd2hpY2gKKwlBTElHTigxNikKK0wodHAxKToJYWRkaWMJaSwgaSwgLTEKKwlzdWJmZQltYXNrLCBtYXNrLCBtYXNrCisJbHd6CXIwLCAwKHRwKQorCWFuZAlyMCwgcjAsIG1hc2sKKwlvcglyMjgsIHIyOCwgcjAKKwlhZGQJdHAsIHRwLCBzdHJpZGUKKwliZG56CUwodHAxKQorCXN0dwlyMjgsIDAocnApCisKK0woYjAwKToJbG13CXIyNywgOChyMSkKKwlhZGRpCXIxLCByMSwgMzIKKwlibHIKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzMyL3Nxcl9kaWFnX2FkZGxzaDEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvc3FyX2RpYWdfYWRkbHNoMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdhYmEzMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzMyL3Nxcl9kaWFnX2FkZGxzaDEuYXNtCkBAIC0wLDAgKzEsODAgQEAKK2RubCAgUG93ZXJQQy0zMiBtcG5fc3FyX2RpYWdfYWRkbHNoMS4KKworZG5sICBDb3B5cmlnaHQgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgICAgICAgIGN5Y2xlcy9saW1iCitDIDYwM2UJCQkgPworQyA2MDRlCQkJID8KK0MgNzV4IChHMykJCSA/CitDIDc0MDAsNzQxMCAoRzQpCSA/CitDIDc0NHgsNzQ1eCAoRzQrKQkgNgorQyBwb3dlcjQvcHBjOTcwCQkgPworQyBwb3dlcjUJCSA/CisKK0MgVGhpcyBoYXMgYmVlbiBmZWVibHkgb3B0aW1pc2VkIGZvciA3NDQ3IGJ1dCBub3QgZm9yIGFueSBvdGhlciBDUFUuCisKK2RlZmluZShgcnAnLAlyMykKK2RlZmluZShgdHAnLAlyNCkKK2RlZmluZShgdXAnLAlyNSkKK2RlZmluZShgbicsCXI2KQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX3Nxcl9kaWFnX2FkZGxzaDEpCisJYWRkaQluLCBuLCAtMQorCWFkZGkJdHAsIHRwLCAtNAorCW10Y3RyCW4KKwlsd3oJcjAsIDAodXApCisJbGkJcjEwLCAwCisJbXVsbHcJcjcsIHIwLCByMAorCXN0dwlyNywgMChycCkKKwltdWxod3UJcjYsIHIwLCByMAorCWFkZGljCXIzMSwgcjMxLCAwCUMgY2xlYXIgQ0YKKworCUFMSUdOKDE2KQorTCh0b3ApOglsd3p1CXIwLCA0KHVwKQorCW11bGx3CXI3LCByMCwgcjAKKwlsd3oJcjgsIDQodHApCisJbHd6dQlyOSwgOCh0cCkKKwlybHdpbWkJcjEwLCByOCwgMSwwLDMwCisJc3J3aQlyMTEsIHI4LCAzMQorCXJsd2ltaQlyMTEsIHI5LCAxLDAsMzAKKwlhZGRlCXIxMCwgcjEwLCByNgorCWFkZGUJcjExLCByMTEsIHI3CisJc3R3CXIxMCwgNChycCkKKwlzcndpCXIxMCwgcjksIDMxCisJbXVsaHd1CXI2LCByMCwgcjAKKwlzdHd1CXIxMSwgOChycCkKKwliZG56CUwodG9wKQorCisJYWRkZQlyMTAsIHIxMCwgcjYKKwlzdHcJcjEwLCA0KHJwKQorCWJscgorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvc3VibHNoMV9uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzMyL3N1YmxzaDFfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRjNjQ2MAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzMyL3N1YmxzaDFfbi5hc20KQEAgLTAsMCArMSwxMDEgQEAKK2RubCAgUG93ZXJQQy0zMiBtcG5fc3VibHNoMV9uIC0tIHJwW10gPSB1cFtdIC0gKHZwW10gPDwgMSkKKworZG5sICBDb3B5cmlnaHQgMjAwMywgMjAwNSwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgICAgICAgIGN5Y2xlcy9saW1iCitDIDYwM2U6ICAgICAgICAgICAgPworQyA2MDRlOiAgICAgICAgICAgIDQuMAorQyA3NXggKEczKTogICAgICAgIDUuMAorQyA3NDAwLDc0MTAgKEc0KTogIDUuMAorQyA3NDR4LDc0NXggKEc0Kyk6IDUuMAorQyBwb3dlcjQvcHBjOTcwOiAgIDQuMjUKK0MgcG93ZXI1OiAgICAgICAgICA1LjAKKworQyBJTlBVVCBQQVJBTUVURVJTCitDIHJwCXIzCitDIHVwCXI0CitDIHZwCXI1CitDIG4JcjYKKworZGVmaW5lKGBycCcsYHIzJykKK2RlZmluZShgdXAnLGByNCcpCitkZWZpbmUoYHZwJyxgcjUnKQorCitkZWZpbmUoYHMwJyxgcjYnKQorZGVmaW5lKGBzMScsYHI3JykKK2RlZmluZShgdTAnLGByOCcpCitkZWZpbmUoYHYwJyxgcjEwJykKK2RlZmluZShgdjEnLGByMTEnKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX3N1YmxzaDFfbikKKwltdGN0cglyNgkJQyBjb3B5IG4gaW4gY3RyCisKKwlsd3oJdjAsIDAodnApCUMgbG9hZCB2IGxpbWIKKwlsd3oJdTAsIDAodXApCUMgbG9hZCB1IGxpbWIKKwlhZGRpYwl1cCwgdXAsIC00CUMgdXBkYXRlIHVwOyBzZXQgY3kKKwlhZGRpCXJwLCBycCwgLTQJQyB1cGRhdGUgcnAKKwlzbHdpCXMxLCB2MCwgMQorCWJkeglMKGVuZCkJCUMgSWYgZG9uZSwgc2tpcCBsb29wCisKK0wobG9vcCk6CisJbHd6CXYxLCA0KHZwKQlDIGxvYWQgdiBsaW1iCisJc3ViZmUJczEsIHMxLCB1MAlDIGFkZCBsaW1icyB3aXRoIGN5LCBzZXQgY3kKKwlzcndpCXMwLCB2MCwgMzEJQyBzaGlmdCBkb3duIHByZXZpb3VzIHYgbGltYgorCXN0dwlzMSwgNChycCkJQyBzdG9yZSByZXN1bHQgbGltYgorCWx3enUJdTAsIDgodXApCUMgbG9hZCB1IGxpbWIgYW5kIHVwZGF0ZSB1cAorCXJsd2ltaQlzMCwgdjEsIDEsIDAsMzAJQyBsZWZ0IHNoaWZ0IHYgbGltYiBhbmQgbWVyZ2Ugd2l0aCBwcmV2IHYgbGltYgorCisJYmR6CUwoZXhpdCkJCUMgZGVjcmVtZW50IGN0ciBhbmQgZXhpdCBpZiBkb25lCisKKwlsd3p1CXYwLCA4KHZwKQlDIGxvYWQgdiBsaW1iIGFuZCB1cGRhdGUgdnAKKwlzdWJmZQlzMCwgczAsIHUwCUMgYWRkIGxpbWJzIHdpdGggY3ksIHNldCBjeQorCXNyd2kJczEsIHYxLCAzMQlDIHNoaWZ0IGRvd24gcHJldmlvdXMgdiBsaW1iCisJc3R3dQlzMCwgOChycCkJQyBzdG9yZSByZXN1bHQgbGltYiBhbmQgdXBkYXRlIHJwCisJbHd6CXUwLCA0KHVwKQlDIGxvYWQgdSBsaW1iCisJcmx3aW1pCXMxLCB2MCwgMSwgMCwzMAlDIGxlZnQgc2hpZnQgdiBsaW1iIGFuZCBtZXJnZSB3aXRoIHByZXYgdiBsaW1iCisKKwliZG56CUwobG9vcCkJCUMgZGVjcmVtZW50IGN0ciBhbmQgbG9vcCBiYWNrCisKK0woZW5kKToJc3ViZmUJcjcsIHMxLCB1MAorCXNyd2kJcjQsIHYwLCAzMQorCXN0dwlyNywgNChycCkJQyBzdG9yZSBsYXN0IHJlc3VsdCBsaW1iCisJc3ViZnplCXIzLCByNAorCW5lZwlyMywgcjMKKwlibHIKK0woZXhpdCk6CisJc3ViZmUJcjcsIHMwLCB1MAorCXNyd2kJcjQsIHYxLCAzMQorCXN0dwlyNywgOChycCkJQyBzdG9yZSBsYXN0IHJlc3VsdCBsaW1iCisJc3ViZnplCXIzLCByNAorCW5lZwlyMywgcjMKKwlibHIKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzMyL3N1Ym11bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzMyL3N1Ym11bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWYzN2IwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvc3VibXVsXzEuYXNtCkBAIC0wLDAgKzEsMTUxIEBACitkbmwgIFBvd2VyUEMtMzIgbXBuX3N1Ym11bF8xIC0tIE11bHRpcGx5IGEgbGltYiB2ZWN0b3Igd2l0aCBhIGxpbWIgYW5kIHN1YnRyYWN0CitkbmwgIHRoZSByZXN1bHQgZnJvbSBhIHNlY29uZCBsaW1iIHZlY3Rvci4KKworZG5sICBDb3B5cmlnaHQgMTk5NSwgMTk5NywgMTk5OCwgMjAwMCwgMjAwMiwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitkbmwgIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgICAgICAgIGN5Y2xlcy9saW1iCitDIDYwM2U6ICAgICAgICAgICAgPworQyA2MDRlOiAgICAgICAgICAgIDcuNQorQyA3NXggKEczKTogICAgICAgIDkuMy0xNQorQyA3NDAwLDc0MTAgKEc0KTogIDkuMy0xNQorQyA3NDR4LDc0NXggKEc0Kyk6IDEwLjUKK0MgcG93ZXI0L3BwYzk3MDogICA2Ljc1CitDIHBvd2VyNTogICAgICAgICAgNi41CisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyBycAlyMworQyB1cAlyNAorQyBuCXI1CitDIHZsCXI2CisKK0MgVGhpcyBpcyBvcHRpbWl6ZWQgZm9yIHRoZSBQUEM2MDQuICBTZWUgYWRkbXVsXzEuYXNtIGZvciBhZGRpdGlvbmFsIGNvbW1lbnRzLgorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX3N1Ym11bF8xKQorCWNtcHdpCWNyMCxyNSw5CUMgbW9yZSB0aGFuIDkgbGltYnM/CisJYmd0CWNyMCxMKGJpZykJQyBicmFuY2ggaWYgbW9yZSB0aGFuIDkgbGltYnMKKworCW10Y3RyCXI1CisJbHd6CXIwLDAocjQpCisJbXVsbHcJcjcscjAscjYKKwltdWxod3UJcjEwLHIwLHI2CisJbHd6CXI5LDAocjMpCisJc3ViZmMJcjgscjcscjkKKwlhZGRjCXI3LHI3LHI4CUMgaW52ZXJ0IGN5IChyNyBpcyBqdW5rKQorCWFkZGkJcjMscjMsLTQKKwliZHoJTChlbmQpCitMKGxvb3ApOgorCWx3enUJcjAsNChyNCkKKwlzdHd1CXI4LDQocjMpCisJbXVsbHcJcjgscjAscjYKKwlhZGRlCXI3LHI4LHIxMAorCW11bGh3dQlyMTAscjAscjYKKwlsd3oJcjksNChyMykKKwlhZGR6ZQlyMTAscjEwCisJc3ViZmMJcjgscjcscjkKKwlhZGRjCXI3LHI3LHI4CUMgaW52ZXJ0IGN5IChyNyBpcyBqdW5rKQorCWJkbnoJTChsb29wKQorTChlbmQpOglzdHcJcjgsNChyMykKKwlhZGR6ZQlyMyxyMTAKKwlibHIKKworTChiaWcpOglzdHd1CXIxLC0xNihyMSkKKwlhZGRpCXI1LHI1LC0xCisJc3R3CXIzMCw4KHIxKQorCXNyd2kJcjAscjUsMgorCXN0dwlyMzEsMTIocjEpCisJbXRjdHIJcjAKKworCWx3eglyNywwKHI0KQorCW11bGx3CXI4LHI3LHI2CisJbXVsaHd1CXIwLHI3LHI2CisJbHd6CXI3LDAocjMpCisJc3ViZmMJcjcscjgscjcKKwlhZGRjCXI4LHI4LHI3CisJc3R3CXI3LDAocjMpCisKK0wobG9vcFUpOgorCWx3eglyNyw0KHI0KQorCWx3eglyMTIsOChyNCkKKwlsd3oJcjMwLDEyKHI0KQorCWx3enUJcjMxLDE2KHI0KQorCW11bGx3CXI4LHI3LHI2CisJbXVsbHcJcjkscjEyLHI2CisJbXVsbHcJcjEwLHIzMCxyNgorCW11bGx3CXIxMSxyMzEscjYKKwlhZGRlCXI4LHI4LHIwCUMgYWRkIGN5X2xpbWIKKwltdWxod3UJcjAscjcscjYKKwlsd3oJcjcsNChyMykKKwlhZGRlCXI5LHI5LHIwCisJbXVsaHd1CXIwLHIxMixyNgorCWx3eglyMTIsOChyMykKKwlhZGRlCXIxMCxyMTAscjAKKwltdWxod3UJcjAscjMwLHI2CisJbHd6CXIzMCwxMihyMykKKwlhZGRlCXIxMSxyMTEscjAKKwltdWxod3UJcjAscjMxLHI2CisJbHd6CXIzMSwxNihyMykKKwlhZGR6ZQlyMCxyMAkJQyBuZXcgY3lfbGltYgorCXN1YmZjCXI3LHI4LHI3CisJc3R3CXI3LDQocjMpCisJc3ViZmUJcjEyLHI5LHIxMgorCXN0dwlyMTIsOChyMykKKwlzdWJmZQlyMzAscjEwLHIzMAorCXN0dwlyMzAsMTIocjMpCisJc3ViZmUJcjMxLHIxMSxyMzEKKwlzdHd1CXIzMSwxNihyMykKKwlzdWJmZQlyMTEscjExLHIxMQlDIGludmVydCAuLi4KKwlhZGRpYwlyMTEscjExLDEJQyAuLi4gY2FycnkKKwliZG56CUwobG9vcFUpCisKKwlhbmRpLglyMzEscjUsMworCW10Y3RyCXIzMQorCWJlcQljcjAsTChlbmR4KQorCitMKGxvb3BFKToKKwlsd3p1CXI3LDQocjQpCisJbXVsbHcJcjgscjcscjYKKwlhZGRlCXI4LHI4LHIwCUMgYWRkIGN5X2xpbWIKKwltdWxod3UJcjAscjcscjYKKwlsd3oJcjcsNChyMykKKwlhZGR6ZQlyMCxyMAkJQyBuZXcgY3lfbGltYgorCXN1YmZjCXI3LHI4LHI3CisJYWRkYwlyOCxyOCxyNworCXN0d3UJcjcsNChyMykKKwliZG56CUwobG9vcEUpCitMKGVuZHgpOgorCWFkZHplCXIzLHIwCisJbHd6CXIzMCw4KHIxKQorCWx3eglyMzEsMTIocjEpCisJYWRkaQlyMSxyMSwxNgorCWJscgorRVBJTE9HVUUobXBuX3N1Ym11bF8xKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvdW11bC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi91bXVsLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTgxMWUxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvdW11bC5hc20KQEAgLTAsMCArMSw1MCBAQAorZG5sICBQb3dlclBDLTMyIHVtdWxfcHBtbSAtLSBzdXBwb3J0IGZvciBsb25nbG9uZy5oCisKK2RubCAgQ29weXJpZ2h0IDIwMDAsIDIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDIG1wX2xpbWJfdCBtcG5fdW11bF9wcG1tIChtcF9saW1iX3QgKmxvd3B0ciwgbXBfbGltYl90IG0xLCBtcF9saW1iX3QgbTIpOworQworCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX3VtdWxfcHBtbSkKKworCUMgcjMJbG93cHRyCisJQyByNAltMQorCUMgcjUJbTIKKworCW11bGx3CXIwLCByNCwgcjUKKwltdWxod3UJcjksIHI0LCByNQorCXN0dwlyMCwgMChyMykKKwltcglyMywgcjkKKwlibHIKKworRVBJTE9HVUUobXBuX3VtdWxfcHBtbSkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzMyL3ZteC9jb3B5ZC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi92bXgvY29weWQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZTcyNjYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi92bXgvY29weWQuYXNtCkBAIC0wLDAgKzEsMjAzIEBACitkbmwgIFBvd2VyUEMtMzIvVk1YIGFuZCBQb3dlclBDLTY0L1ZNWCBtcG5fY29weWQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgICAgICAgICAxNi1ieXRlIGNvYWxpZ25lZCAgICAgIHVuYWxpZ25lZAorQyAgICAgICAgICAgICAgICAgICBjeWNsZXMvbGltYiAgICAgICAgY3ljbGVzL2xpbWIKK0MgNzQwMCw3NDEwIChHNCk6ICAgICAgIDAuNSAgICAgICAgICAgICAgICAwLjY0CitDIDc0NHgsNzQ1eCAoRzQrKTogICAgICAwLjc1ICAgICAgICAgICAgICAgMC44MgorQyA5NzAgKEc1KTogICAgICAgICAgICAgMC43OCAgICAgICAgICAgICAgIDEuMDIJCSg2NC1iaXQgbGltYnMpCisKK0MgU1RBVFVTCitDICAqIFdvcmtzIGZvciBhbGwgc2l6ZXMgYW5kIGFsaWdubWVudHMuCisKK0MgVE9ETworQyAgKiBPcHRpbWl6ZSB1bmFsaWduZWQgY2FzZS4gIFNvbWUgYmFzaWMgdGVzdHMgd2l0aCAyLXdheSBhbmQgNC13YXkgdW5yb2xsaW5nCitDICAgIGluZGljYXRlIHRoYXQgd2UgY2FuIHJlYWNoIDAuNTYgYy9sIGZvciA3NDAwLCAwLjc1IGMvbCBmb3IgNzQ1eCwgYW5kIDAuODAKK0MgICAgYy9sIGZvciA5NzAuCitDICAqIENvbnNpZGVyIHVzaW5nIFZNWCBpbnN0cnVjdGlvbnMgYWxzbyBmb3IgaGVhZCBhbmQgdGFpbCwgYnkgdXNpbmcgc29tZQorQyAgICByZWFkLW1vZGlmeS13cml0ZSB0cmlja3MuCitDICAqIFRoZSBWTVggY29kZSBpcyB1c2VkIGZyb20gdGhlIHNtYWxsZXN0IHNpemVzIGl0IGhhbmRsZXMsIGJ1dCBtZWFzdXJlbWVudHMKK0MgICAgc2hvdyBhIGxhcmdlIHNwZWVkIGJ1bXAgYXQgdGhlIGN1dG9mZiBwb2ludHMuICBTbWFsbCBjb3B5aW5nIChwZXJoYXBzCitDICAgIHVzaW5nIHNvbWUgcmVhZC1tb2RpZnktd3JpdGUgdGVjaG5pcXVlKSBzaG91bGQgYmUgb3B0aW1pemVkLgorQyAgKiBNYWtlIGFuIG1wbl9jb20gYmFzZWQgb24gdGhpcyBjb2RlLgorCitkZWZpbmUoYEdNUF9MSU1CX0JZVEVTJywgZXZhbChHTVBfTElNQl9CSVRTLzgpKQorZGVmaW5lKGBMSU1CU19QRVJfVlInLCAgZXZhbCgxNi9HTVBfTElNQl9CWVRFUykpCitkZWZpbmUoYExJTUJTX1BFUl8yVlInLCBldmFsKDMyL0dNUF9MSU1CX0JZVEVTKSkKKworCitpZmVsc2UoR01QX0xJTUJfQklUUywzMixgCisJZGVmaW5lKGBMSU1CMzInLGAJJDEnKQorCWRlZmluZShgTElNQjY0JyxgJykKKycsYAorCWRlZmluZShgTElNQjMyJyxgJykKKwlkZWZpbmUoYExJTUI2NCcsYAkkMScpCisnKQorCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLAlgcjMnKQorZGVmaW5lKGB1cCcsCWByNCcpCitkZWZpbmUoYG4nLAlgcjUnKQorCitkZWZpbmUoYHVzJywJYHY0JykKKworCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2NvcHlkKQorCitMSU1CMzIoYHNsd2kuCXIwLCBuLCAyCScpCitMSU1CNjQoYHNsZGkuCXIwLCBuLCAzCScpCisJYWRkCXJwLCBycCwgcjAKKwlhZGQJdXAsIHVwLCByMAorCitMSU1CMzIoYGNtcGkJY3I3LCBuLCAxMQknKQorTElNQjY0KGBjbXBkaQljcjcsIG4sIDUJJykKKwliZ2UJY3I3LCBMKGJpZykKKworCWJlcWxyCWNyMAorCitDIEhhbmRsZSBzbWFsbCBjYXNlcyB3aXRoIHBsYWluIG9wZXJhdGlvbnMKKwltdGN0cgluCitMKHRvcFMpOgorTElNQjMyKGBsd3oJcjAsIC00KHVwKQknKQorTElNQjY0KGBsZAlyMCwgLTgodXApCScpCisJYWRkaQl1cCwgdXAsIC1HTVBfTElNQl9CWVRFUworTElNQjMyKGBzdHcJcjAsIC00KHJwKQknKQorTElNQjY0KGBzdGQJcjAsIC04KHJwKQknKQorCWFkZGkJcnAsIHJwLCAtR01QX0xJTUJfQllURVMKKwliZG56CUwodG9wUykKKwlibHIKKworQyBIYW5kbGUgbGFyZ2UgY2FzZXMgd2l0aCBWTVggb3BlcmF0aW9ucworTChiaWcpOgorCWFkZGkJcnAsIHJwLCAtMTYKKwlhZGRpCXVwLCB1cCwgLTE2CisJbWZzcHIJcjEyLCAyNTYKKwlvcmlzCXIwLCByMTIsIDB4ZjgwMAkJQyBTZXQgVlJTQVZFIGJpdCAwLTQKKwltdHNwcgkyNTYsIHIwCisKK0xJTUIzMihgcmx3aW5tLglyNywgcnAsIDMwLDMwLDMxJykJQyAocnAgPj4gMikgbW9kIDQKK0xJTUI2NChgcmx3aW5tLglyNywgcnAsIDI5LDMxLDMxJykJQyAocnAgPj4gMykgbW9kIDIKKwliZXEJTChycF9hbGlnbmVkKQorCisJc3ViZgluLCByNywgbgorTCh0b3AwKToKK0xJTUIzMihgbHd6CXIwLCAxMih1cCkJJykKK0xJTUI2NChgbGQJcjAsIDgodXApCScpCisJYWRkaQl1cCwgdXAsIC1HTVBfTElNQl9CWVRFUworTElNQjMyKGBhZGRpYy4JcjcsIHI3LCAtMQknKQorTElNQjMyKGBzdHcJcjAsIDEyKHJwKQknKQorTElNQjY0KGBzdGQJcjAsIDgocnApCScpCisJYWRkaQlycCwgcnAsIC1HTVBfTElNQl9CWVRFUworTElNQjMyKGBibmUJTCh0b3AwKQkJJykKKworTChycF9hbGlnbmVkKToKKworTElNQjMyKGBybHdpbm0uCXIwLCB1cCwgMzAsMzAsMzEnKQlDICh1cCA+PiAyKSBtb2QgNAorTElNQjY0KGBybHdpbm0uCXIwLCB1cCwgMjksMzEsMzEnKQlDICh1cCA+PiAzKSBtb2QgMgorCitMSU1CNjQoYHNyZGkJcjcsIG4sIDIJJykJQyBsb29wIGNvdW50IGNvcnJlc3BvbmRpbmcgdG8gbgorTElNQjMyKGBzcndpCXI3LCBuLCAzCScpCUMgbG9vcCBjb3VudCBjb3JyZXNwb25kaW5nIHRvIG4KKwltdGN0cglyNwkJCUMgY29weSBuIHRvIGNvdW50IHJlZ2lzdGVyCisKKwlsaQlyMTAsIC0xNgorCisJYmVxCUwodXBfYWxpZ25lZCkKKworCWx2c2wJdXMsIDAsIHVwCisKKwlhZGRpCXVwLCB1cCwgMTYKK0xJTUIzMihgYW5kaS4JcjAsIG4sIDB4NAknKQorTElNQjY0KGBhbmRpLglyMCwgbiwgMHgyCScpCisJYmVxCUwoMSkKKwlsdngJdjAsIDAsIHVwCisJbHZ4CXYyLCByMTAsIHVwCisJdnBlcm0JdjMsIHYyLCB2MCwgdXMKKwlzdHZ4CXYzLCAwLCBycAorCWFkZGkJdXAsIHVwLCAtMzIKKwlhZGRpCXJwLCBycCwgLTE2CisJYglMKGxwdSkKK0woMSk6CWx2eAl2MiwgMCwgdXAKKwlhZGRpCXVwLCB1cCwgLTE2CisJYglMKGxwdSkKKworCUFMSUdOKDMyKQorTChscHUpOglsdngJdjAsIDAsIHVwCisJdnBlcm0JdjMsIHYwLCB2MiwgdXMKKwlzdHZ4CXYzLCAwLCBycAorCWx2eAl2MiwgcjEwLCB1cAorCWFkZGkJdXAsIHVwLCAtMzIKKwl2cGVybQl2MywgdjIsIHYwLCB1cworCXN0dngJdjMsIHIxMCwgcnAKKwlhZGRpCXJwLCBycCwgLTMyCisJYmRueglMKGxwdSkKKworCWIJTCh0YWlsKQorCitMKHVwX2FsaWduZWQpOgorCitMSU1CMzIoYGFuZGkuCXIwLCBuLCAweDQJJykKK0xJTUI2NChgYW5kaS4JcjAsIG4sIDB4MgknKQorCWJlcQlMKGxwYSkKKwlsdngJdjAsIDAsICAgdXAKKwlzdHZ4CXYwLCAwLCAgIHJwCisJYWRkaQl1cCwgdXAsIC0xNgorCWFkZGkJcnAsIHJwLCAtMTYKKwliCUwobHBhKQorCisJQUxJR04oMzIpCitMKGxwYSk6CWx2eAl2MCwgMCwgICB1cAorCWx2eAl2MSwgcjEwLCB1cAorCWFkZGkJdXAsIHVwLCAtMzIKKwlub3AKKwlzdHZ4CXYwLCAwLCAgIHJwCisJc3R2eAl2MSwgcjEwLCBycAorCWFkZGkJcnAsIHJwLCAtMzIKKwliZG56CUwobHBhKQorCitMKHRhaWwpOgorTElNQjMyKGBybHdpbm0uCXI3LCBuLCAwLDMwLDMxCScpCUMgcjcgPSBuIG1vZCA0CitMSU1CNjQoYHJsd2lubS4JcjcsIG4sIDAsMzEsMzEJJykJQyByNyA9IG4gbW9kIDIKKwliZXEJTChyZXQpCitMSU1CMzIoYGxpCXIxMCwgMTIJCScpCitMKHRvcDIpOgorTElNQjMyKGBsd3p4CXIwLCByMTAsIHVwCScpCitMSU1CNjQoYGxkCXIwLCA4KHVwKQknKQorTElNQjMyKGBhZGRpYy4JcjcsIHI3LCAtMQknKQorTElNQjMyKGBzdHd4CXIwLCByMTAsIHJwCScpCitMSU1CNjQoYHN0ZAlyMCwgOChycCkJJykKK0xJTUIzMihgYWRkaQlyMTAsIHIxMCwgLUdNUF9MSU1CX0JZVEVTJykKK0xJTUIzMihgYm5lCUwodG9wMikJCScpCisKK0wocmV0KToJbXRzcHIJMjU2LCByMTIKKwlibHIKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzMyL3ZteC9jb3B5aS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi92bXgvY29weWkuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MmI0NjgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi92bXgvY29weWkuYXNtCkBAIC0wLDAgKzEsMTk4IEBACitkbmwgIFBvd2VyUEMtMzIvVk1YIGFuZCBQb3dlclBDLTY0L1ZNWCBtcG5fY29weWkuCisKK2RubCAgQ29weXJpZ2h0IDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgICAgICAgICAxNi1ieXRlIGNvYWxpZ25lZCAgICAgIHVuYWxpZ25lZAorQyAgICAgICAgICAgICAgICAgICBjeWNsZXMvbGltYiAgICAgICAgY3ljbGVzL2xpbWIKK0MgNzQwMCw3NDEwIChHNCk6ICAgICAgIDAuNSAgICAgICAgICAgICAgICAwLjY0CitDIDc0NHgsNzQ1eCAoRzQrKTogICAgICAwLjc1ICAgICAgICAgICAgICAgMC44MgorQyA5NzAgKEc1KTogICAgICAgICAgICAgMC43OCAgICAgICAgICAgICAgIDEuMDIJCSg2NC1iaXQgbGltYnMpCisKK0MgU1RBVFVTCitDICAqIFdvcmtzIGZvciBhbGwgc2l6ZXMgYW5kIGFsaWdubWVudHMuCisKK0MgVE9ETworQyAgKiBPcHRpbWl6ZSB1bmFsaWduZWQgY2FzZS4gIFNvbWUgYmFzaWMgdGVzdHMgd2l0aCAyLXdheSBhbmQgNC13YXkgdW5yb2xsaW5nCitDICAgIGluZGljYXRlIHRoYXQgd2UgY2FuIHJlYWNoIDAuNTYgYy9sIGZvciA3NDAwLCAwLjc1IGMvbCBmb3IgNzQ1eCwgYW5kIDAuODAKK0MgICAgYy9sIGZvciA5NzAuCitDICAqIENvbnNpZGVyIHVzaW5nIFZNWCBpbnN0cnVjdGlvbnMgYWxzbyBmb3IgaGVhZCBhbmQgdGFpbCwgYnkgdXNpbmcgc29tZQorQyAgICByZWFkLW1vZGlmeS13cml0ZSB0cmlja3MuCitDICAqIFRoZSBWTVggY29kZSBpcyB1c2VkIGZyb20gdGhlIHNtYWxsZXN0IHNpemVzIGl0IGhhbmRsZXMsIGJ1dCBtZWFzdXJlbWVudHMKK0MgICAgc2hvdyBhIGxhcmdlIHNwZWVkIGJ1bXAgYXQgdGhlIGN1dG9mZiBwb2ludHMuICBTbWFsbCBjb3B5aW5nIChwZXJoYXBzCitDICAgIHVzaW5nIHNvbWUgcmVhZC1tb2RpZnktd3JpdGUgdGVjaG5pcXVlKSBzaG91bGQgYmUgb3B0aW1pemVkLgorQyAgKiBNYWtlIGFuIG1wbl9jb20gYmFzZWQgb24gdGhpcyBjb2RlLgorCitkZWZpbmUoYEdNUF9MSU1CX0JZVEVTJywgZXZhbChHTVBfTElNQl9CSVRTLzgpKQorZGVmaW5lKGBMSU1CU19QRVJfVlInLCAgZXZhbCgxNi9HTVBfTElNQl9CWVRFUykpCitkZWZpbmUoYExJTUJTX1BFUl8yVlInLCBldmFsKDMyL0dNUF9MSU1CX0JZVEVTKSkKKworCitpZmVsc2UoR01QX0xJTUJfQklUUywzMixgCisJZGVmaW5lKGBMSU1CMzInLGAJJDEnKQorCWRlZmluZShgTElNQjY0JyxgJykKKycsYAorCWRlZmluZShgTElNQjMyJyxgJykKKwlkZWZpbmUoYExJTUI2NCcsYAkkMScpCisnKQorCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLAlgcjMnKQorZGVmaW5lKGB1cCcsCWByNCcpCitkZWZpbmUoYG4nLAlgcjUnKQorCitkZWZpbmUoYHVzJywJYHY0JykKKworCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2NvcHlpKQorCitMSU1CMzIoYGNtcGkJY3I3LCBuLCAxMQknKQorTElNQjY0KGBjbXBkaQljcjcsIG4sIDUJJykKKwliZ2UJY3I3LCBMKGJpZykKKworCW9yLglyMCwgbiwgbgorCWJlcWxyCWNyMAorCitDIEhhbmRsZSBzbWFsbCBjYXNlcyB3aXRoIHBsYWluIG9wZXJhdGlvbnMKKwltdGN0cgluCitMKHRvcFMpOgorTElNQjMyKGBsd3oJcjAsIDAodXApCScpCitMSU1CNjQoYGxkCXIwLCAwKHVwKQknKQorCWFkZGkJdXAsIHVwLCBHTVBfTElNQl9CWVRFUworTElNQjMyKGBzdHcJcjAsIDAocnApCScpCitMSU1CNjQoYHN0ZAlyMCwgMChycCkJJykKKwlhZGRpCXJwLCBycCwgR01QX0xJTUJfQllURVMKKwliZG56CUwodG9wUykKKwlibHIKKworQyBIYW5kbGUgbGFyZ2UgY2FzZXMgd2l0aCBWTVggb3BlcmF0aW9ucworTChiaWcpOgorCW1mc3ByCXIxMiwgMjU2CisJb3JpcwlyMCwgcjEyLCAweGY4MDAJCUMgU2V0IFZSU0FWRSBiaXQgMC00CisJbXRzcHIJMjU2LCByMAorCitMSU1CMzIoYHJsd2lubS4JcjcsIHJwLCAzMCwzMCwzMScpCUMgKHJwID4+IDIpIG1vZCA0CitMSU1CNjQoYHJsd2lubS4JcjcsIHJwLCAyOSwzMSwzMScpCUMgKHJwID4+IDMpIG1vZCAyCisJYmVxCUwocnBfYWxpZ25lZCkKKworCXN1YmZpYwlyNywgcjcsIExJTUJTX1BFUl9WUgorCXN1YmYJbiwgcjcsIG4KK0wodG9wMCk6CitMSU1CMzIoYGx3eglyMCwgMCh1cCkJJykKK0xJTUI2NChgbGQJcjAsIDAodXApCScpCisJYWRkaQl1cCwgdXAsIEdNUF9MSU1CX0JZVEVTCitMSU1CMzIoYGFkZGljLglyNywgcjcsIC0xCScpCitMSU1CMzIoYHN0dwlyMCwgMChycCkJJykKK0xJTUI2NChgc3RkCXIwLCAwKHJwKQknKQorCWFkZGkJcnAsIHJwLCBHTVBfTElNQl9CWVRFUworTElNQjMyKGBibmUJTCh0b3AwKQkJJykKKworTChycF9hbGlnbmVkKToKKworTElNQjMyKGBybHdpbm0uCXIwLCB1cCwgMzAsMzAsMzEnKQlDICh1cCA+PiAyKSBtb2QgNAorTElNQjY0KGBybHdpbm0uCXIwLCB1cCwgMjksMzEsMzEnKQlDICh1cCA+PiAzKSBtb2QgMgorCitMSU1CNjQoYHNyZGkJcjcsIG4sIDIJJykJQyBsb29wIGNvdW50IGNvcnJlc3BvbmRpbmcgdG8gbgorTElNQjMyKGBzcndpCXI3LCBuLCAzCScpCUMgbG9vcCBjb3VudCBjb3JyZXNwb25kaW5nIHRvIG4KKwltdGN0cglyNwkJCUMgY29weSBuIHRvIGNvdW50IHJlZ2lzdGVyCisKKwlsaQlyMTAsIDE2CisKKwliZXEJTCh1cF9hbGlnbmVkKQorCisJbHZzbAl1cywgMCwgdXAKKworTElNQjMyKGBhbmRpLglyMCwgbiwgMHg0CScpCitMSU1CNjQoYGFuZGkuCXIwLCBuLCAweDIJJykKKwliZXEJTCgxKQorCWx2eAl2MCwgMCwgdXAKKwlsdngJdjIsIHIxMCwgdXAKKwl2cGVybQl2MywgdjAsIHYyLCB1cworCXN0dngJdjMsIDAsIHJwCisJYWRkaQl1cCwgdXAsIDMyCisJYWRkaQlycCwgcnAsIDE2CisJYglMKGxwdSkKK0woMSk6CWx2eAl2MiwgMCwgdXAKKwlhZGRpCXVwLCB1cCwgMTYKKwliCUwobHB1KQorCisJQUxJR04oMzIpCitMKGxwdSk6CWx2eAl2MCwgMCwgdXAKKwl2cGVybQl2MywgdjIsIHYwLCB1cworCXN0dngJdjMsIDAsIHJwCisJbHZ4CXYyLCByMTAsIHVwCisJYWRkaQl1cCwgdXAsIDMyCisJdnBlcm0JdjMsIHYwLCB2MiwgdXMKKwlzdHZ4CXYzLCByMTAsIHJwCisJYWRkaQlycCwgcnAsIDMyCisJYmRueglMKGxwdSkKKworCWFkZGkJdXAsIHVwLCAtMTYKKwliCUwodGFpbCkKKworTCh1cF9hbGlnbmVkKToKKworTElNQjMyKGBhbmRpLglyMCwgbiwgMHg0CScpCitMSU1CNjQoYGFuZGkuCXIwLCBuLCAweDIJJykKKwliZXEJTChscGEpCisJbHZ4CXYwLCAwLCAgIHVwCisJc3R2eAl2MCwgMCwgICBycAorCWFkZGkJdXAsIHVwLCAxNgorCWFkZGkJcnAsIHJwLCAxNgorCWIJTChscGEpCisKKwlBTElHTigzMikKK0wobHBhKToJbHZ4CXYwLCAwLCAgIHVwCisJbHZ4CXYxLCByMTAsIHVwCisJYWRkaQl1cCwgdXAsIDMyCisJbm9wCisJc3R2eAl2MCwgMCwgICBycAorCXN0dngJdjEsIHIxMCwgcnAKKwlhZGRpCXJwLCBycCwgMzIKKwliZG56CUwobHBhKQorCitMKHRhaWwpOgorTElNQjMyKGBybHdpbm0uCXI3LCBuLCAwLDMwLDMxCScpCUMgcjcgPSBuIG1vZCA0CitMSU1CNjQoYHJsd2lubS4JcjcsIG4sIDAsMzEsMzEJJykJQyByNyA9IG4gbW9kIDIKKwliZXEJTChyZXQpCitMSU1CMzIoYGxpCXIxMCwgMAkJJykKK0wodG9wMik6CitMSU1CMzIoYGx3engJcjAsIHIxMCwgdXAJJykKK0xJTUI2NChgbGQJcjAsIDAodXApCScpCitMSU1CMzIoYGFkZGljLglyNywgcjcsIC0xCScpCitMSU1CMzIoYHN0d3gJcjAsIHIxMCwgcnAJJykKK0xJTUI2NChgc3RkCXIwLCAwKHJwKQknKQorTElNQjMyKGBhZGRpCXIxMCwgcjEwLCBHTVBfTElNQl9CWVRFUycpCitMSU1CMzIoYGJuZQlMKHRvcDIpCQknKQorCitMKHJldCk6CW10c3ByCTI1NiwgcjEyCisJYmxyCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi92bXgvbG9nb3BzX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvdm14L2xvZ29wc19uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjU2ZDNiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvdm14L2xvZ29wc19uLmFzbQpAQCAtMCwwICsxLDMxMCBAQAorZG5sICBQb3dlclBDLTMyL1ZNWCBhbmQgUG93ZXJQQy02NC9WTVggbXBuX2FuZF9uLCBtcG5fYW5kbl9uLCBtcG5fbmFuZF9uLAorZG5sICBtcG5faW9yX24sIG1wbl9pb3JuX24sIG1wbl9uaW9yX24sIG1wbl94b3JfbiwgbXBuX3hub3JfbiAtLSBtcG4gYml0d2lzZQorZG5sICBsb2dpY2FsIG9wZXJhdGlvbnMuCisKK2RubCAgQ29weXJpZ2h0IDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDICAgICAgICAgICAgICAgYW5kLGlvcixhbmRuLG5pb3IseG9yICAgIGlvcm4seG5vciAgICAgICAgIG5hbmQKK0MgICAgICAgICAgICAgICAgICAgY3ljbGVzL2xpbWIgICAgICAgICBjeWNsZXMvbGltYiAgICBjeWNsZXMvbGltYgorQyA3NDAwLDc0MTAgKEc0KTogICAgICAgMS4zOSAgICAgICAgICAgICAgICAgPyAgICAgICAgICAgICAgPworQyA3NDR4LDc0NXggKEc0Kyk6ICAgICAgMS4xNCAgICAgICAgICAgICAgICAxLjM5ICAgICAgICAgICAxLjM5CitDIDk3MDogICAgICAgICAgICAgICAgICAxLjcgICAgICAgICAgICAgICAgIDIuMCAgICAgICAgICAgIDIuMAorCitDIFNUQVRVUworQyAgKiBXb3JrcyBmb3IgYWxsIHNpemVzIGFuZCBhbGlnbm1lbnQgZm9yIDMyLWJpdCBsaW1icy4KK0MgICogV29ya3MgZm9yIG4gPj0gNCBmb3IgNjQtYml0IGxpbWJzOyB1bnRlc3RlZCBmb3Igc21hbGxlciBvcGVyYW5kcy4KK0MgICogQ3VycmVudCBwZXJmb3JtYW5jZSBtYWtlcyB0aGlzIHBvaW50bGVzcyBmb3IgOTcwCisKK0MgVE9ETworQyAgKiBNaWdodCB3YW50IHRvIG1ha2UgdmFyaWFudHMgd2hlbiBqdXN0IG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzIG5lZWRzCitDICAgIHZwZXJtLCBhbmQgd2hlbiBuZWl0aGVyIG5lZWRzIGl0LiAgVGhlIGxhdHRlciBydW5zIDUwJSBmYXN0ZXIgb24gNzQwMC4KK0MgICogSWRlYTogSWYgdGhlIHNvdXJjZSBvcGVyYW5kcyBhcmUgZXF1YWxseSBhbGlnbmVkLCB3ZSBjb3VsZCBkbyB0aGUgbG9nb3BzCitDICAgIGZpcnN0LCB0aGVuIHZwZXJtIGJlZm9yZSBzdG9yaW5nISAgVGhhdCBtZWFucyB3ZSBuZXZlciBuZWVkIG1vcmUgdGhhbiBvbmUKK0MgICAgdnBlcm0sIGV2ZXIhCitDICAqIFBlcmhhcHMgYWxpZ24gYHJwJyBhZnRlciBpbml0aWFsIGFsaWdubWVudCBsb29wPworQyAgKiBJbnN0ZWFkIG9mIGhhdmluZyBzY2FsYXIgY29kZSBpbiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQsIGNvbnNpZGVyIHVzaW5nCitDICAgIHJlYWQtbW9kaWZ5LXdyaXRlIHZlY3RvciBjb2RlLgorQyAgKiBTb2Z0d2FyZSBwaXBlbGluZT8gIEhvcGVmdWxseSBub3QgdG9vIGltcG9ydGFudCwgdGhpcyBpcyBoYWlyeSBlbm91Z2gKK0MgICAgYWxyZWFkeS4KK0MgICogQXQgbGVhc3QgYmUgbW9yZSBjbGV2ZXIgYWJvdXQgb3BlcmFuZCBsb2FkaW5nLCBpLmUuLCBsb2FkIHYgb3BlcmFuZHMgYmVmb3JlCitDICAgIHUgb3BlcmFuZHMsIHNpbmNlIHYgb3BlcmFuZHMgYXJlIHNvbWV0aW1lcyBuZWdhdGVkLgorCitkZWZpbmUoYEdNUF9MSU1CX0JZVEVTJywgZXZhbChHTVBfTElNQl9CSVRTLzgpKQorZGVmaW5lKGBMSU1CU19QRVJfVlInLCAgZXZhbCgxNi9HTVBfTElNQl9CWVRFUykpCitkZWZpbmUoYExJTUJTX1BFUl8yVlInLCBldmFsKDMyL0dNUF9MSU1CX0JZVEVTKSkKKworZGVmaW5lKGB2bmVnYicsIGAnKQkJQyBkZWZhdWx0IG5lZy1iZWZvcmUgdG8gbnVsbAorZGVmaW5lKGB2bmVnYScsIGAnKQkJQyBkZWZhdWx0IG5lZy1iZWZvcmUgdG8gbnVsbAorCitpZmRlZihgT1BFUkFUSU9OX2FuZF9uJywKK2AJZGVmaW5lKGBmdW5jJywJYG1wbl9hbmRfbicpCisJZGVmaW5lKGBsb2dvcFMnLGBhbmQJJDEsJDIsJDMnKQorCWRlZmluZShgbG9nb3AnLAlgdmFuZAkkMSwkMiwkMycpJykKK2lmZGVmKGBPUEVSQVRJT05fYW5kbl9uJywKK2AJZGVmaW5lKGBmdW5jJywJYG1wbl9hbmRuX24nKQorCWRlZmluZShgbG9nb3BTJyxgYW5kYwkkMSwkMiwkMycpCisJZGVmaW5lKGBsb2dvcCcsCWB2YW5kYwkkMSwkMiwkMycpJykKK2lmZGVmKGBPUEVSQVRJT05fbmFuZF9uJywKK2AJZGVmaW5lKGBmdW5jJywJYG1wbl9uYW5kX24nKQorCWRlZmluZShgbG9nb3BTJyxgbmFuZAkkMSwkMiwkMycpCisJZGVmaW5lKGBsb2dvcCcsCWB2YW5kCSQxLCQyLCQzJykKKwlkZWZpbmUoYHZuZWdhJywJYHZub3IJJDEsJDIsJDInKScpCitpZmRlZihgT1BFUkFUSU9OX2lvcl9uJywKK2AJZGVmaW5lKGBmdW5jJywJYG1wbl9pb3JfbicpCisJZGVmaW5lKGBsb2dvcFMnLGBvcgkkMSwkMiwkMycpCisJZGVmaW5lKGBsb2dvcCcsCWB2b3IJJDEsJDIsJDMnKScpCitpZmRlZihgT1BFUkFUSU9OX2lvcm5fbicsCitgCWRlZmluZShgZnVuYycsCWBtcG5faW9ybl9uJykKKwlkZWZpbmUoYGxvZ29wUycsYG9yYwkkMSwkMiwkMycpCisJZGVmaW5lKGB2bmVnYicsCWB2bm9yCSQxLCQyLCQyJykKKwlkZWZpbmUoYGxvZ29wJywJYHZvcgkkMSwkMiwkMycpJykKK2lmZGVmKGBPUEVSQVRJT05fbmlvcl9uJywKK2AJZGVmaW5lKGBmdW5jJywJYG1wbl9uaW9yX24nKQorCWRlZmluZShgbG9nb3BTJyxgbm9yCSQxLCQyLCQzJykKKwlkZWZpbmUoYGxvZ29wJywJYHZub3IJJDEsJDIsJDMnKScpCitpZmRlZihgT1BFUkFUSU9OX3hvcl9uJywKK2AJZGVmaW5lKGBmdW5jJywJYG1wbl94b3JfbicpCisJZGVmaW5lKGBsb2dvcFMnLGB4b3IJJDEsJDIsJDMnKQorCWRlZmluZShgbG9nb3AnLAlgdnhvcgkkMSwkMiwkMycpJykKK2lmZGVmKGBPUEVSQVRJT05feG5vcl9uJywKK2AJZGVmaW5lKGBmdW5jJyxgbXBuX3hub3JfbicpCisJZGVmaW5lKGBsb2dvcFMnLGBlcXYJJDEsJDIsJDMnKQorCWRlZmluZShgdm5lZ2InLAlgdm5vcgkkMSwkMiwkMicpCisJZGVmaW5lKGBsb2dvcCcsCWB2eG9yCSQxLCQyLCQzJyknKQorCitpZmVsc2UoR01QX0xJTUJfQklUUyxgMzInLGAKKwlkZWZpbmUoYExJTUIzMicsYAkkMScpCisJZGVmaW5lKGBMSU1CNjQnLGAnKQorJyxgCisJZGVmaW5lKGBMSU1CMzInLGAnKQorCWRlZmluZShgTElNQjY0JyxgCSQxJykKKycpCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsCWByMycpCitkZWZpbmUoYHVwJywJYHI0JykKK2RlZmluZShgdnAnLAlgcjUnKQorZGVmaW5lKGBuJywJYHI2JykKKworZGVmaW5lKGB1cycsCWB2OCcpCitkZWZpbmUoYHZzJywJYHY5JykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fYW5kX24gbXBuX2FuZG5fbiBtcG5fbmFuZF9uIG1wbl9pb3JfbiBtcG5faW9ybl9uIG1wbl9uaW9yX24gbXBuX3hvcl9uIG1wbl94bm9yX24pCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShmdW5jKQorCitMSU1CMzIoYGNtcHdpCWNyMCwgbiwgOAknKQorTElNQjY0KGBjbXBkaQljcjAsIG4sIDQJJykKKwliZ2UJTChiaWcpCisKKwltdGN0cgluCisKK0xJTUIzMihgbHd6CXI4LCAwKHVwKQknKQorTElNQjMyKGBsd3oJcjksIDAodnApCScpCitMSU1CMzIoYGxvZ29wUygJcjAsIHI4LCByOSkJJykKK0xJTUIzMihgc3R3CXIwLCAwKHJwKQknKQorTElNQjMyKGBiZHoJTChlbmRTKQkJJykKKworTCh0b3BTKToKK0xJTUIzMihgbHd6dQlyOCwgNCh1cCkJJykKK0xJTUI2NChgbGQJcjgsIDAodXApCScpCitMSU1CNjQoYGFkZGkJdXAsIHVwLCBHTVBfTElNQl9CWVRFUwknKQorTElNQjMyKGBsd3p1CXI5LCA0KHZwKQknKQorTElNQjY0KGBsZAlyOSwgMCh2cCkJJykKK0xJTUI2NChgYWRkaQl2cCwgdnAsIEdNUF9MSU1CX0JZVEVTCScpCisJbG9nb3BTKAlyMCwgcjgsIHI5KQorTElNQjMyKGBzdHd1CXIwLCA0KHJwKQknKQorTElNQjY0KGBzdGQJcjAsIDAocnApCScpCitMSU1CNjQoYGFkZGkJcnAsIHJwLCBHTVBfTElNQl9CWVRFUwknKQorCWJkbnoJTCh0b3BTKQorTChlbmRTKToKKwlibHIKKworTChiaWcpOgltZnNwcglyMTIsIDI1NgorCW9yaXMJcjAsIHIxMiwgMHhmZmZjCQlDIFNldCBWUlNBVkUgYml0IDAtMTMgRklYTUUKKwltdHNwcgkyNTYsIHIwCisKK0MgRmlyc3QgbG9vcCB1bnRpbCB0aGUgZGVzdGluYXRpb24gaXMgMTYtYnl0ZSBhbGlnbmVkLiAgVGhpcyB3aWxsIGV4ZWN1dGUgMCBvciAxCitDIHRpbWVzIGZvciA2NC1iaXQgbWFjaGluZXMsIGFuZCAwIHRvIDMgdGltZXMgZm9yIDMyLWJpdCBtYWNoaW5lcy4KKworTElNQjMyKGBybHdpbm0uCXIwLCBycCwgMzAsMzAsMzEnKQlDIChycCA+PiAyKSBtb2QgNAorTElNQjY0KGBybHdpbm0uCXIwLCBycCwgMjksMzEsMzEnKQlDIChycCA+PiAzKSBtb2QgMgorCWJlcQlMKGFsaWduZWQpCisKKwlzdWJmaWMJcjcsIHIwLCBMSU1CU19QRVJfVlIKK0xJTUIzMihgbGkJcjEwLCAwCQknKQorCXN1YmYJbiwgcjcsIG4KK0wodG9wMCk6CitMSU1CMzIoYGx3eglyOCwgMCh1cCkJJykKK0xJTUI2NChgbGQJcjgsIDAodXApCScpCisJYWRkaQl1cCwgdXAsIEdNUF9MSU1CX0JZVEVTCitMSU1CMzIoYGx3eglyOSwgMCh2cCkJJykKK0xJTUI2NChgbGQJcjksIDAodnApCScpCisJYWRkaQl2cCwgdnAsIEdNUF9MSU1CX0JZVEVTCitMSU1CMzIoYGFkZGljLglyNywgcjcsIC0xCScpCisJbG9nb3BTKAlyMCwgcjgsIHI5KQorTElNQjMyKGBzdHd4CXIwLCByMTAsIHJwCScpCitMSU1CNjQoYHN0ZAlyMCwgMChycCkJJykKK0xJTUIzMihgYWRkaQlyMTAsIHIxMCwgR01QX0xJTUJfQllURVMnKQorTElNQjMyKGBibmUJTCh0b3AwKQkJJykKKworCWFkZGkJcnAsIHJwLCAxNgkJQyB1cGRhdGUgcnAsIGJ1dCBwcmVzZXJ2ZSBpdHMgYWxpZ25tZW50CisKK0woYWxpZ25lZCk6CitMSU1CNjQoYHNyZGkJcjcsIG4sIDEJJykJQyBsb29wIGNvdW50IGNvcnJlc3BvbmRpbmcgdG8gbgorTElNQjMyKGBzcndpCXI3LCBuLCAyCScpCUMgbG9vcCBjb3VudCBjb3JyZXNwb25kaW5nIHRvIG4KKwltdGN0cglyNwkJCUMgY29weSBuIHRvIGNvdW50IHJlZ2lzdGVyCisKKwlsaQlyMTAsIDE2CisJbHZzbAl1cywgMCwgdXAKKwlsdnNsCXZzLCAwLCB2cAorCisJbHZ4CXYyLCAwLCB1cAorCWx2eAl2MywgMCwgdnAKKwliZG56CUwoZ3QxKQorCWx2eAl2MCwgcjEwLCB1cAorCWx2eAl2MSwgcjEwLCB2cAorCXZwZXJtCXY0LCB2MiwgdjAsIHVzCisJdnBlcm0JdjUsIHYzLCB2MSwgdnMKKwl2bmVnYigJdjUsIHY1KQorCWxvZ29wKAl2NiwgdjQsIHY1KQorCXZuZWdhKAl2NiwgdjYpCisJc3R2eAl2NiwgMCwgcnAKKwlhZGRpCXVwLCB1cCwgMTYKKwlhZGRpCXZwLCB2cCwgMTYKKwlhZGRpCXJwLCBycCwgNAorCWIJTCh0YWlsKQorCitMKGd0MSk6CWFkZGkJdXAsIHVwLCAxNgorCWFkZGkJdnAsIHZwLCAxNgorCitMKHRvcCk6CWx2eAl2MCwgMCwgdXAKKwlsdngJdjEsIDAsIHZwCisJdnBlcm0JdjQsIHYyLCB2MCwgdXMKKwl2cGVybQl2NSwgdjMsIHYxLCB2cworCXZuZWdiKAl2NSwgdjUpCisJbG9nb3AoCXY2LCB2NCwgdjUpCisJdm5lZ2EoCXY2LCB2NikKKwlzdHZ4CXY2LCAwLCBycAorCWJkeglMKGVuZCkKKwlsdngJdjIsIHIxMCwgdXAKKwlsdngJdjMsIHIxMCwgdnAKKwl2cGVybQl2NCwgdjAsIHYyLCB1cworCXZwZXJtCXY1LCB2MSwgdjMsIHZzCisJdm5lZ2IoCXY1LCB2NSkKKwlsb2dvcCgJdjYsIHY0LCB2NSkKKwl2bmVnYSgJdjYsIHY2KQorCXN0dngJdjYsIHIxMCwgcnAKKwlhZGRpCXVwLCB1cCwgMzIKKwlhZGRpCXZwLCB2cCwgMzIKKwlhZGRpCXJwLCBycCwgMzIKKwliZG56CUwodG9wKQorCisJYW5kaS4JcjAsIHVwLCAxNQorCXZ4b3IJdjAsIHYwLCB2MAorCWJlcQkxZgorCWx2eAl2MCwgMCwgdXAKKzE6CWFuZGkuCXIwLCB2cCwgMTUKKwl2eG9yCXYxLCB2MSwgdjEKKwliZXEJMWYKKwlsdngJdjEsIDAsIHZwCisxOgl2cGVybQl2NCwgdjIsIHYwLCB1cworCXZwZXJtCXY1LCB2MywgdjEsIHZzCisJdm5lZ2IoCXY1LCB2NSkKKwlsb2dvcCgJdjYsIHY0LCB2NSkKKwl2bmVnYSgJdjYsIHY2KQorCXN0dngJdjYsIDAsIHJwCisJYWRkaQlycCwgcnAsIDQKKwliCUwodGFpbCkKKworTChlbmQpOglhbmRpLglyMCwgdXAsIDE1CisJdnhvcgl2MiwgdjIsIHYyCisJYmVxCTFmCisJbHZ4CXYyLCByMTAsIHVwCisxOglhbmRpLglyMCwgdnAsIDE1CisJdnhvcgl2MywgdjMsIHYzCisJYmVxCTFmCisJbHZ4CXYzLCByMTAsIHZwCisxOgl2cGVybQl2NCwgdjAsIHYyLCB1cworCXZwZXJtCXY1LCB2MSwgdjMsIHZzCisJdm5lZ2IoCXY1LCB2NSkKKwlsb2dvcCgJdjYsIHY0LCB2NSkKKwl2bmVnYSgJdjYsIHY2KQorCXN0dngJdjYsIHIxMCwgcnAKKworCWFkZGkJdXAsIHVwLCAxNgorCWFkZGkJdnAsIHZwLCAxNgorCWFkZGkJcnAsIHJwLCAyMAorCitMKHRhaWwpOgorTElNQjMyKGBybHdpbm0uCXI3LCBuLCAwLDMwLDMxCScpCUMgcjcgPSBuIG1vZCA0CitMSU1CNjQoYHJsd2lubS4JcjcsIG4sIDAsMzEsMzEJJykJQyByNyA9IG4gbW9kIDIKKwliZXEJTChyZXQpCisJYWRkaQlycCwgcnAsIDE1CitMSU1CMzIoYHJsd2lubQlycCwgcnAsIDAsMCwyNwknKQorTElNQjY0KGBybGRpY3IJcnAsIHJwLCAwLDU5CScpCisJbGkJcjEwLCAwCitMKHRvcDIpOgorTElNQjMyKGBsd3p4CXI4LCByMTAsIHVwCScpCitMSU1CNjQoYGxkeAlyOCwgcjEwLCB1cAknKQorTElNQjMyKGBsd3p4CXI5LCByMTAsIHZwCScpCitMSU1CNjQoYGxkeAlyOSwgcjEwLCB2cAknKQorTElNQjMyKGBhZGRpYy4JcjcsIHI3LCAtMQknKQorCWxvZ29wUygJcjAsIHI4LCByOSkKK0xJTUIzMihgc3R3eAlyMCwgcjEwLCBycAknKQorTElNQjY0KGBzdGQJcjAsIDAocnApCScpCitMSU1CMzIoYGFkZGkJcjEwLCByMTAsIEdNUF9MSU1CX0JZVEVTJykKK0xJTUIzMihgYm5lCUwodG9wMikJCScpCisKK0wocmV0KToJbXRzcHIJMjU2LCByMTIKKwlibHIKK0VQSUxPR1VFKCkKKworQyBUaGlzIHdvcmtzIGZvciA2NC1iaXQgUG93ZXJQQywgc2luY2UgYSBsaW1iIHB0ciBjYW4gb25seSBiZSBhbGlnbmVkCitDIGluIDIgcmVsZXZhbnQgd2F5cywgd2hpY2ggbWVhbnMgd2UgY2FuIGFsd2F5cyBmaW5kIGEgcGFpciBvZiBhbGlnbmVkCitDIHBvaW50ZXJzIG9mIHJwLCB1cCwgYW5kIHZwLgorQyBwcm9jZXNzIHdvcmRzIHVudGlsIHJwIGlzIDE2LWJ5dGUgYWxpZ25lZAorQyBpZiAoKCh1cCB8IHZwKSAmIDE1KSA9PSAwKQorQyAgIHByb2Nlc3Mgd2l0aCBWTVggd2l0aG91dCBhbnkgdnBlcm0KK0MgZWxzZSBpZiAoKHVwICYgMTUpICE9IDAgJiYgKHZwICYgMTUpICE9IDApCitDICAgcHJvY2VzcyB3aXRoIFZNWCB1c2luZyB2cGVybSBvbiBzdG9yZSBkYXRhCitDIGVsc2UgaWYgKCh1cCAmIDE1KSAhPSAwKQorQyAgIHByb2Nlc3Mgd2l0aCBWTVggdXNpbmcgdnBlcm0gb24gdXAgZGF0YQorQyBlbHNlCitDICAgcHJvY2VzcyB3aXRoIFZNWCB1c2luZyB2cGVybSBvbiB2cCBkYXRhCitDCitDCXJsd2lubSwJcjAsIHVwLCAwLDI4LDMxCitDCXJsd2lubQlyMCwgdnAsIDAsMjgsMzEKK0MJY21wd2kJY3I3LCByMCwgMAorQwljcm9yCWNyNiwgY3IwLCBjcjcKK0MJY3JhbmQJY3IwLCBjcjAsIGNyNwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjMzIvdm14L21vZF8zNGxzdWIxLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzMyL3ZteC9tb2RfMzRsc3ViMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJiMTFjZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzMyL3ZteC9tb2RfMzRsc3ViMS5hc20KQEAgLTAsMCArMSwzODggQEAKK2RubCAgUG93ZXJQQy0zMiBtcG5fbW9kXzM0bHN1YjEgLS0gbXBuIHJlbWFpbmRlciBtb2QgMl4yNC0xLgorCitkbmwgIENvcHlyaWdodCAyMDAyLCAyMDAzLCAyMDA1LTIwMDcsIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MgICAgICAgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgNjAzZTogICAgICAgICAgICAgIC0KK0MgNjA0ZTogICAgICAgICAgICAgIC0KK0MgNzV4IChHMyk6ICAgICAgICAgIC0KK0MgNzQwMCw3NDEwIChHNCk6ICAgIDEgICAgICAgICAgc2ltcGxlIGxvYWQtdXNlIHNjaGVkdWxpbmcgcmVzdWx0cyBpbiAwLjc1CitDIDc0NHgsNzQ1eCAoRzQrKTogICAwLjc1CitDIHBwYzk3MDogICAgICAgICAgICAwLjc1CitDIHBvd2VyNDogICAgICAgICAgICAtCitDIHBvd2VyNTogICAgICAgICAgICAtCisKK0MgVE9ETworQyAgKiBFaXRoZXIgc3RhcnQgdXNpbmcgdGhlIGxvdy1lbmQgbWFza2luZyBjb25zdGFudHMsIG9yIHJlbW92ZSB0aGVtLgorQyAgKiBNZXJnZSBtdWx0aXBsZSBmZWVkLWluIGNhc2VzIGludG8gYSBwYXJhbWV0ZXJpemVkIGNvZGUgYmxvY2suCitDICAqIFJlZHVjZSByZWdpc3RlciB1c2FnZS4gIEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBhbG1vc3QgaGFsdmUgaXQuCisKK2RlZmluZShgdXAnLCBgcjMnKQorZGVmaW5lKGBuJywgYHI0JykKKworZGVmaW5lKGBhMCcsIGB2MycpCitkZWZpbmUoYGExJywgYHY0JykKK2RlZmluZShgYTInLCBgdjUnKQorZGVmaW5lKGBjMCcsIGB2NicpCitkZWZpbmUoYGMxJywgYHY3JykKK2RlZmluZShgYzInLCBgdjgnKQorZGVmaW5lKGB6JywgIGB2OScpCitkZWZpbmUoYHgwJywgYHYxMCcpCitkZWZpbmUoYHgxJywgYHYxMScpCitkZWZpbmUoYHgyJywgYHYxMicpCitkZWZpbmUoYHgzJywgYHYxMycpCitkZWZpbmUoYHB2JywgYHYxNCcpCitkZWZpbmUoYHkwJywgYHYwJykKK2RlZmluZShgeTEnLCBgdjEnKQorZGVmaW5lKGB5MicsIGB2MicpCitkZWZpbmUoYHkzJywgYHYxNScpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fbW9kXzM0bHN1YjEpCisJY21wd2kJY3IwLCBuLCAyMAkJQyB0dW5lZCBjdXRvZmYgcG9pbnQKKwliZ2UJTChsYXJnZSkKKworCWxpCXI5LCAwCQkJQyByZXN1bHQgYWNjdW11bGF0b3IKKwltdWxsaQlyMTAsIG4sIDB4YgkJQyAweGIgPSBjZWlsKDMyLzMpCisJc3J3aS4JcjEwLCByMTAsIDUJCUMgcjEwID0gZmxvb3Iobi8zKSwgbiA8IDMyCisJYmVxCUwoc21hbGxfdGFpbCkKKwltdGN0cglyMTAKKwlsd3oJcjYsIDAodXApCisJbHd6CXI3LCA0KHVwKQorCWx3enUJcjgsIDgodXApCisJc3ViZgluLCByMTAsIG4KKwlzdWJmCW4sIHIxMCwgbgorCXN1YmYJbiwgcjEwLCBuCisJYmR6CUwoc21hbGxfZW5kKQorCisJQUxJR04oMTYpCitMKGxvcyk6CXJsd2lubQlyMCwgcjYsIDAsOCwzMQorCWFkZAlyOSwgcjksIHIwCQlDIGFkZCAyNGIgZnJvbSB1MAorCXNyd2kJcjAsIHI2LCAyNAorCWx3eglyNiwgNCh1cCkKKwlybHdpbWkJcjAsIHI3LCA4LCAweDAwZmZmZjAwCUMgLS0xMTExMDAKKwlhZGQJcjksIHI5LCByMAkJQyBhZGQgOGIgZnJvbSB1MCBhbmQgMTZiIGZyb20gdTEKKwlzcndpCXIwLCByNywgMTYKKwlsd3oJcjcsIDgodXApCisJcmx3aW1pCXIwLCByOCwgMTYsIDB4MDBmZjAwMDAJQyAtLTIyMTExMQorCWFkZAlyOSwgcjksIHIwCQlDIGFkZCAxNmIgZnJvbSB1MSBhbmQgOGIgZnJvbSB1MgorCXNyd2kJcjAsIHI4LCA4CQlDIC0tMjIyMjIyCisJbHd6dQlyOCwgMTIodXApCisJYWRkCXI5LCByOSwgcjAJCUMgYWRkIDI0YiBmcm9tIHUyCisJYmRueglMKGxvcykKK0woc21hbGxfZW5kKToKKwlybHdpbm0JcjAsIHI2LCAwLDgsMzEKKwlhZGQJcjksIHI5LCByMAkJQyBhZGQgMjRiIGZyb20gdTAKKwlzcndpCXIwLCByNiwgMjQKKwlybHdpbWkJcjAsIHI3LCA4LCAweDAwZmZmZjAwCUMgLS0xMTExMDAKKwlhZGQJcjksIHI5LCByMAkJQyBhZGQgOGIgZnJvbSB1MCBhbmQgMTZiIGZyb20gdTEKKwlzcndpCXIwLCByNywgMTYKKwlybHdpbWkJcjAsIHI4LCAxNiwgMHgwMGZmMDAwMAlDIC0tMjIxMTExCisJYWRkCXI5LCByOSwgcjAJCUMgYWRkIDE2YiBmcm9tIHUxIGFuZCA4YiBmcm9tIHUyCisJc3J3aQlyMCwgcjgsIDgJCUMgLS0yMjIyMjIKKwlhZGQJcjksIHI5LCByMAkJQyBhZGQgMjRiIGZyb20gdTIKKworCWFkZGkJdXAsIHVwLCA0CisJcmx3aW5tCXIwLCByOSwgMCw4LDMxCisJc3J3aQlyOSwgcjksIDI0CisJYWRkCXI5LCByOSwgcjAKKworTChzbWFsbF90YWlsKToKKwljbXBpCWNyMCwgbiwgMQorCWJsdAlMKHJldCkKKworCWx3eglyNiwgMCh1cCkKKwlybHdpbm0JcjAsIHI2LCAwLDgsMzEKKwlzcndpCXI2LCByNiwgMjQKKwlhZGQJcjksIHI5LCByMAorCWFkZAlyOSwgcjksIHI2CisKKwliZXEJTChyZXQpCisKKwlsd3oJcjYsIDQodXApCisJcmx3aW5tCXIwLCByNiwgOCw4LDIzCisJc3J3aQlyNiwgcjYsIDE2CisJYWRkCXI5LCByOSwgcjAKKwlhZGQJcjksIHI5LCByNgorCitMKHJldCk6CW1yCXIzLCByOQorCWJscgorCisKK0wobGFyZ2UpOgorCXN0d3UJcjEsIC0zMihyMSkKKwltZnNwcglyMTAsIDI1NgorCW9yaXMJcjAsIHIxMCwgMHhmZmZmCQlDIFNldCBWUlNBVkUgYml0IDAtMTUKKwltdHNwcgkyNTYsIHIwCisKKwlhbmRpLglyNywgdXAsIDE1CisJdnhvcglhMCwgdjAsIHYwCisJbGlzCXI5LCAweGFhYWEKKwl2eG9yCWExLCB2MCwgdjAKKwlvcmkJcjksIHI5LCAweGFhYWIKKwl2eG9yCWEyLCB2MCwgdjAKKwlsaQlyNSwgMTYKKwl2eG9yCWMwLCB2MCwgdjAKKwlsaQlyNiwgMzIKKwl2eG9yCWMxLCB2MCwgdjAKKwlMRUFMKAlyMTEsIGNuc3RzKQkJQyBDQVVUSU9OIGNsb2JiZXJzIHIwIGZvciBlbGYsIGRhcndpbgorCXZ4b3IJYzIsIHYwLCB2MAorCXZ4b3IJeiwgdjAsIHYwCisKKwliZXEJTChhbGlnbmVkMTYpCisKKwljbXB3aQljcjcsIHI3LCA4CisJYmdlCWNyNywgTChuYTQpCisKKwlsdngJYTIsIDAsIHVwCisJYWRkaQl1cCwgdXAsIDE2CisJdnNsZG9pCWEyLCBhMiwgeiwgNAorCXZzbGRvaQlhMiwgeiwgYTIsIDEyCisKKwlhZGRpCW4sIG4sIDkKKwltdWxod3UJcjAsIG4sIHI5CisJc3J3aQlyMCwgcjAsIDMJCUMgcjAgPSBmbG9vcihuLzEyKQorCW10Y3RyCXIwCisKKwltdWxsaQlyOCwgcjAsIDEyCisJc3ViZgluLCByOCwgbgorCWIJTCgyKQorCitMKG5hNCk6CWJuZQljcjcsIEwobmE4KQorCisJbHZ4CWExLCAwLCB1cAorCWFkZGkJdXAsIHVwLCAtMTYKKwl2c2xkb2kJYTEsIGExLCB6LCA4CisJdnNsZG9pCWExLCB6LCBhMSwgOAorCisJYWRkaQluLCBuLCA2CisJbXVsaHd1CXIwLCBuLCByOQorCXNyd2kJcjAsIHIwLCAzCQlDIHIwID0gZmxvb3Iobi8xMikKKwltdGN0cglyMAorCisJbXVsbGkJcjgsIHIwLCAxMgorCXN1YmYJbiwgcjgsIG4KKwliCUwoMSkKKworTChuYTgpOgorCWx2eAlhMCwgMCwgdXAKKwl2c2xkb2kJYTAsIGEwLCB6LCAxMgorCXZzbGRvaQlhMCwgeiwgYTAsIDQKKworCWFkZGkJbiwgbiwgMworCW11bGh3dQlyMCwgbiwgcjkKKwlzcndpCXIwLCByMCwgMwkJQyByMCA9IGZsb29yKG4vMTIpCisJbXRjdHIJcjAKKworCW11bGxpCXI4LCByMCwgMTIKKwlzdWJmCW4sIHI4LCBuCisJYglMKDApCisKK0woYWxpZ25lZDE2KToKKwltdWxod3UJcjAsIG4sIHI5CisJc3J3aQlyMCwgcjAsIDMJCUMgcjAgPSBmbG9vcihuLzEyKQorCW10Y3RyCXIwCisKKwltdWxsaQlyOCwgcjAsIDEyCisJc3ViZgluLCByOCwgbgorCisJbHZ4CWEwLCAwLCB1cAorTCgwKToJbHZ4CWExLCByNSwgdXAKK0woMSk6CWx2eAlhMiwgcjYsIHVwCisJYWRkaQl1cCwgdXAsIDQ4CitMKDIpOgliZHoJTChlbmQpCisJbGkJcjEyLCAyNTYKKwlsaQlyOSwgMjg4CisJQUxJR04oMzIpCitMKHRvcCk6CisJbHZ4CXYwLCAwLCB1cAorCXZhZGRjdXcJdjEwLCBhMCwgdjAKKwl2YWRkdXdtCWEwLCBhMCwgdjAKKwl2YWRkdXdtCWMwLCBjMCwgdjEwCisKKwlsdngJdjEsIHI1LCB1cAorCXZhZGRjdXcJdjEwLCBhMSwgdjEKKwl2YWRkdXdtCWExLCBhMSwgdjEKKwl2YWRkdXdtCWMxLCBjMSwgdjEwCisKKwlsdngJdjIsIHI2LCB1cAorCWRjYnQJdXAsIHIxMgorCWRjYnQJdXAsIHI5CisJYWRkaQl1cCwgdXAsIDQ4CisJdmFkZGN1dwl2MTAsIGEyLCB2MgorCXZhZGR1d20JYTIsIGEyLCB2MgorCXZhZGR1d20JYzIsIGMyLCB2MTAKKwliZG56CUwodG9wKQorCitMKGVuZCk6CitDIG4gPSAwLi4uMTEKKwljbXB3aQljcjAsIG4sIDAKKwliZXEJTChzdW0pCisJY21wd2kJY3IwLCBuLCA0CisJYmxlCUwodGFpbC4xLi40KQorCWNtcHdpCWNyMCwgbiwgOAorCWJsZQlMKHRhaWwuNS4uOCkKKworTCh0YWlsLjkuLjExKToKKwlsdngJdjAsIDAsIHVwCisJdmFkZGN1dwl2MTAsIGEwLCB2MAorCXZhZGR1d20JYTAsIGEwLCB2MAorCXZhZGR1d20JYzAsIGMwLCB2MTAKKworCWx2eAl2MSwgcjUsIHVwCisJdmFkZGN1dwl2MTAsIGExLCB2MQorCXZhZGR1d20JYTEsIGExLCB2MQorCXZhZGR1d20JYzEsIGMxLCB2MTAKKworCWx2eAl2MiwgcjYsIHVwCisKKwlhZGRpCXI4LCByMTEsIDk2CisJcmx3aW5tCXIzLCBuICw0LDI2LDI3CisJbHZ4CXYxMSwgcjMsIHI4CisJdmFuZAl2MiwgdjIsIHYxMQorCisJdmFkZGN1dwl2MTAsIGEyLCB2MgorCXZhZGR1d20JYTIsIGEyLCB2MgorCXZhZGR1d20JYzIsIGMyLCB2MTAKKwliCUwoc3VtKQorCitMKHRhaWwuNS4uOCk6CisJbHZ4CXYwLCAwLCB1cAorCXZhZGRjdXcJdjEwLCBhMCwgdjAKKwl2YWRkdXdtCWEwLCBhMCwgdjAKKwl2YWRkdXdtCWMwLCBjMCwgdjEwCisKKwlsdngJdjEsIHI1LCB1cAorCisJYWRkaQlyOCwgcjExLCA5NgorCXJsd2lubQlyMywgbiAsNCwyNiwyNworCWx2eAl2MTEsIHIzLCByOAorCXZhbmQJdjEsIHYxLCB2MTEKKworCXZhZGRjdXcJdjEwLCBhMSwgdjEKKwl2YWRkdXdtCWExLCBhMSwgdjEKKwl2YWRkdXdtCWMxLCBjMSwgdjEwCisJYglMKHN1bSkKKworTCh0YWlsLjEuLjQpOgorCWx2eAl2MCwgMCwgdXAKKworCWFkZGkJcjgsIHIxMSwgOTYKKwlybHdpbm0JcjMsIG4gLDQsMjYsMjcKKwlsdngJdjExLCByMywgcjgKKwl2YW5kCXYwLCB2MCwgdjExCisKKwl2YWRkY3V3CXYxMCwgYTAsIHYwCisJdmFkZHV3bQlhMCwgYTAsIHYwCisJdmFkZHV3bQljMCwgYzAsIHYxMAorCitMKHN1bSk6CWx2eAlwdiwgMCwgcjExCisJdnBlcm0JeDAsIGEwLCB6LCBwdgkJQyBleHRyYWN0IDQgMjQtYml0IGZpZWxkIGZyb20gYTAKKwl2cGVybQl5MCwgYzIsIHosIHB2CisJbHZ4CXB2LCByNSwgcjExCisJdnBlcm0JeDEsIGExLCB6LCBwdgkJQyBleHRyYWN0IDQgMjQtYml0IGZpZWxkIGZyb20gYTEKKwl2cGVybQl5MSwgYzAsIHosIHB2CQlDIGV4dHJhY3QgNCAyNC1iaXQgZmllbGQgZnJvbSBhMQorCWx2eAlwdiwgcjYsIHIxMQorCXZwZXJtCXgyLCBhMiwgeiwgcHYJCUMgZXh0cmFjdCA0IDI0LWJpdCBmaWVsZCBmcm9tIGExCisJdnBlcm0JeTIsIGMxLCB6LCBwdgkJQyBleHRyYWN0IDQgMjQtYml0IGZpZWxkIGZyb20gYTEKKwlsaQlyMTAsICA0OAorCWx2eAlwdiwgcjEwLCByMTEKKwl2cGVybQl4MywgYTAsIHosIHB2CQlDIGV4dHJhY3QgcmVtYWluaW5nL3BhcnRpYWwgYTAgZmllbGRzCisJdnBlcm0JeTMsIGMyLCB6LCBwdgkJQyBleHRyYWN0IHJlbWFpbmluZy9wYXJ0aWFsIGEwIGZpZWxkcworCWxpCXIxMCwgIDY0CisJbHZ4CXB2LCByMTAsIHIxMQorCXZwZXJtCXgzLCBhMSwgeDMsIHB2CQlDIGluc2VydCByZW1haW5pbmcvcGFydGlhbCBhMSBmaWVsZHMKKwl2cGVybQl5MywgYzAsIHkzLCBwdgkJQyBpbnNlcnQgcmVtYWluaW5nL3BhcnRpYWwgYTEgZmllbGRzCisJbGkJcjEwLCAgODAKKwlsdngJcHYsIHIxMCwgcjExCisJdnBlcm0JeDMsIGEyLCB4MywgcHYJCUMgaW5zZXJ0IHJlbWFpbmluZy9wYXJ0aWFsIGEyIGZpZWxkcworCXZwZXJtCXkzLCBjMSwgeTMsIHB2CQlDIGluc2VydCByZW1haW5pbmcvcGFydGlhbCBhMiBmaWVsZHMKKworQyBXZSBub3cgaGF2ZSA0IDEyOC1iaXQgYWNjdW11bGF0b3JzIHRvIHN1bQorCXZhZGR1d20JeDAsIHgwLCB4MQorCXZhZGR1d20JeDIsIHgyLCB4MworCXZhZGR1d20JeDAsIHgwLCB4MgorCisJdmFkZHV3bQl5MCwgeTAsIHkxCisJdmFkZHV3bQl5MiwgeTIsIHkzCisJdmFkZHV3bQl5MCwgeTAsIHkyCisKKwl2YWRkdXdtCXgwLCB4MCwgeTAKKworQyBSZWR1Y2UgMzItYml0IGZpZWxkcworCXZzdW1zd3MJeDAsIHgwLCB6CisKKwlsaQlyNywgMTYKKwlzdHZ4CXgwLCByNywgcjEKKwlsd3oJcjMsIDI4KHIxKQorCisJbXRzcHIJMjU2LCByMTAKKwlhZGRpCXIxLCByMSwgMzIKKwlibHIKK0VQSUxPR1VFKCkKKworQyBsb2FkCXwgICAgICB2MCAgICAgICB8ICAgICAgdjEgICAgICAgfCAgICAgIHYyICAgICAgIHwKK0MgYWNjCXwgICAgICBhMCAgICAgICB8ICAgICAgYTEgICAgICAgfCAgICAgIGEyICAgICAgIHwKK0MgY2FycnkJfCAgICAgIGMwICAgICAgIHwgICAgICBjMSAgICAgICB8ICAgICAgYzIgICAgICAgfAorQwl8IDAgICAxICAgMiAgIDMgfCA0ICAgNSAgIDYgICA3IHwgOCAgIDkgIDEwICAxMSB8ICAxMjgKK0MJfC0tLXwtLS18LS0tfC0tLXwtLS18LS0tfC0tLXwtLS18LS0tfC0tLXwtLS18LS0tfCAgIDMyCitDCXwgIHwgIHwgIHwgIHwgIHwgIHwgIHwgIHwgIHwgIHwgIHwgIHwgIHwgIHwgIHwgIHwgICAyNAorQwl8ICAgICB8ICAgICB8ICAgICB8ICAgICB8ICAgICB8ICAgICB8ICAgICB8ICAgICB8ICAgNDgKKworQyAgICAgICAkLS0tLS0tLS0tLS0tLS0tJC0tLS0tLS0tLS0tLS0tLSQtLS0tLS0tLS0tLS0tLS0kLS0tLS0tLS0tLS0tLS0tJAorQyAgICAgICB8ICAgLiAgIC4gICAuICAgLiAgIC4gICAuICAgLiAgIC4gICAuICAgLiAgIC4gICAuICAgLiAgIC4gICAuICAgfAorQyAgICAgICB8X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19ffAorQyAgIHwgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgIHwKK0MgICAgICAgPC1oaTE2LT4gPC0tLSAyNCAtLT4gPC0tLSAyNCAtLT4gPC0tLSAyNCAtLT4gPC0tLSAyNCAtLT4gPC1sbzE2LT4KKworCitERUZfT0JKRUNUKGNuc3RzLDE2KQorQyBQZXJtdXRhdGlvbiB2ZWN0b3JzIGluIHRoZSBvcmRlciB0aGV5IGFyZSB1c2VkIGFib3ZlCitDICMgICAgICAwMCAgIDAxICAgMDIgICAwMyAgICAwNCAgIDA1ICAgMDYgICAwNyAgICAwOCAgIDA5ICAgMGEgICAwYiAgICAwYyAgIDBkICAgMGUgICAwZgorIC5ieXRlIDB4MTAsMHgwMSwweDAyLDB4MDMsIDB4MTAsMHgwNiwweDA3LDB4MDAsIDB4MTAsMHgwYiwweDA0LDB4MDUsIDB4MTAsMHgwOCwweDA5LDB4MGEgQyBhMAorIC5ieXRlIDB4MTAsMHgwNywweDAwLDB4MDEsIDB4MTAsMHgwNCwweDA1LDB4MDYsIDB4MTAsMHgwOSwweDBhLDB4MGIsIDB4MTAsMHgwZSwweDBmLDB4MDggQyBhMQorIC5ieXRlIDB4MTAsMHgwMCwweDAxLDB4MDIsIDB4MTAsMHgwNSwweDA2LDB4MDcsIDB4MTAsMHgwYSwweDBiLDB4MDQsIDB4MTAsMHgwZiwweDA4LDB4MDkgQyBhMgorIC5ieXRlIDB4MTAsMHgwZCwweDBlLDB4MGYsIDB4MTAsMHgxMCwweDEwLDB4MGMsIDB4MTAsMHgxMCwweDEwLDB4MTAsIDB4MTAsMHgxMCwweDEwLDB4MTAgQyBwYXJ0IGEwCisgLmJ5dGUgMHgxMCwweDExLDB4MTIsMHgxMywgMHgxMCwweDAyLDB4MDMsMHgxNywgMHgxMCwweDEwLDB4MGMsMHgwZCwgMHgxMCwweDEwLDB4MTAsMHgxMCBDIHBhcnQgYTEKKyAuYnl0ZSAweDEwLDB4MTEsMHgxMiwweDEzLCAweDEwLDB4MTUsMHgxNiwweDE3LCAweDEwLDB4MDMsMHgxYSwweDFiLCAweDEwLDB4MGMsMHgwZCwweDBlIEMgcGFydCBhMgorQyBNYXNrcyBmb3IgaGlnaCBlbmQgb2YgbnVtYmVyCisgLmJ5dGUgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZgorIC5ieXRlIDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKKyAuYnl0ZSAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCisgLmJ5dGUgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHgwMCwweDAwLDB4MDAsMHgwMAorQyBNYXNrcyBmb3IgbG93IGVuZCBvZiBudW1iZXIKK0MgLmJ5dGUJMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZgorQyAuYnl0ZQkweDAwLDB4MDAsMHgwMCwweDAwLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmCitDIC5ieXRlCTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYKK0MgLmJ5dGUJMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhmZiwweGZmLDB4ZmYsMHhmZgorRU5EX09CSkVDVChjbnN0cykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzMyL3ZteC9wb3Bjb3VudC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi92bXgvcG9wY291bnQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0M2M5MmQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGMzMi92bXgvcG9wY291bnQuYXNtCkBAIC0wLDAgKzEsMzQgQEAKK2RubCAgUG93ZXJQQy0zMi9WTVggbXBuX3BvcGNvdW50LgorCitkbmwgIENvcHlyaWdodCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX3BvcGNvdW50KQoraW5jbHVkZV9tcG4oYHBvd2VycGM2NC92bXgvcG9wY291bnQuYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L1JFQURNRSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGRkMzk5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvUkVBRE1FCkBAIC0wLDAgKzEsMTY2IEBACitDb3B5cmlnaHQgMTk5OS0yMDAxLCAyMDAzLTIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCisKKyAgICAgICAgICAgICAgICAgICAgUE9XRVJQQy02NCBNUE4gU1VCUk9VVElORVMKKworCitUaGlzIGRpcmVjdG9yeSBjb250YWlucyBtcG4gZnVuY3Rpb25zIGZvciA2NC1iaXQgUG93ZXJQQyBjaGlwcy4KKworCitDT0RFIE9SR0FOSVpBVElPTgorCisJbXBuL3Bvd2VycGM2NCAgICAgICAgICBtb2RlLW5ldXRyYWwgY29kZQorCW1wbi9wb3dlcnBjNjQvbW9kZTMyICAgY29kZSBmb3IgbW9kZTMyCisJbXBuL3Bvd2VycGM2NC9tb2RlNjQgICBjb2RlIGZvciBtb2RlNjQKKworCitUaGUgbW9kZTMyIGFuZCBtb2RlNjQgc3ViLWRpcmVjdG9yaWVzIGNvbnRhaW4gY29kZSB3aGljaCBpcyBmb3IgdXNlIGluIHRoZQorcmVzcGVjdGl2ZSBjaGlwIG1vZGUsIDMyIG9yIDY0LiAgVGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkgaXMgY29kZSB0aGF0J3MKK3VuYWZmZWN0ZWQgYnkgdGhlIG1vZGUuCisKK1RoZSAiYWRkZSIgaW5zdHJ1Y3Rpb24gaXMgdGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIG1vZGUzMiBhbmQgbW9kZTY0LiAgSXQKK29wZXJhdGVzIG9uIGVpdGhlciBvbiBhIDMyLWJpdCBvciA2NC1iaXQgcXVhbnRpdHkgYWNjb3JkaW5nIHRvIHRoZSBjaGlwIG1vZGUuCitPdGhlciBpbnN0cnVjdGlvbnMgaGF2ZSBhbiBvcGVyYW5kIHNpemUgaW4gdGhlaXIgb3Bjb2RlIGFuZCBoZW5jZSBkb24ndCB2YXJ5LgorCisKKworUE9XRVIzL1BQQzYzMCBwaXBlbGluZSBpbmZvcm1hdGlvbjoKKworRGVjb2RpbmcgaXMgNC13YXkgKyBicmFuY2ggYW5kIGlzc3VlIGlzIDgtd2F5IHdpdGggc29tZSBvdXQtb2Ytb3JkZXIKK2NhcGFiaWxpdHkuCisKK0Z1bmN0aW9uYWwgdW5pdHM6CitMUzEgIC0gbGQvc3QgdW5pdCAxCitMUzIgIC0gbGQvc3QgdW5pdCAyCitGWFUxIC0gaW50ZWdlciB1bml0IDEsIGhhbmRsZXMgYW55IHNpbXBsZSBpbnRlZ2VyIGluc3RydWN0aW9uCitGWFUyIC0gaW50ZWdlciB1bml0IDIsIGhhbmRsZXMgYW55IHNpbXBsZSBpbnRlZ2VyIGluc3RydWN0aW9uCitGWFUzIC0gaW50ZWdlciB1bml0IDMsIGhhbmRsZXMgaW50ZWdlciBtdWx0aXBseSBhbmQgZGl2aWRlCitGUFUxIC0gZmxvYXRpbmctcG9pbnQgdW5pdCAxCitGUFUyIC0gZmxvYXRpbmctcG9pbnQgdW5pdCAyCisKK01lbW9yeToJCSAgQW55IHR3byBtZW1vcnkgb3BlcmF0aW9ucyBjYW4gaXNzdWUsIGJ1dCBtZW1vcnkgc3Vic3lzdGVtCisJCSAgY2FuIHN1c3RhaW4ganVzdCBvbmUgc3RvcmUgcGVyIGN5Y2xlLiAgTm8gbmVlZCBmb3IgZGF0YQorCQkgIHByZWZldGNoOyB0aGUgaGFyZHdhcmUgaGFzIHZlcnkgc29waGlzdGljYXRlZCBwcmVmZXRjaCBsb2dpYy4KK1NpbXBsZSBpbnRlZ2VyOgkgIDIgb3BlcmF0aW9ucyAoc3VjaCBhcyBhZGQsIHJsKikKK0ludGVnZXIgbXVsdGlwbHk6IDEgb3BlcmF0aW9uIGV2ZXJ5IDl0aCBjeWNsZSB3b3JzdCBjYXNlOyBleGFjdCB0aW1pbmcgZGVwZW5kcworCQkgIG9uIDJuZCBvcGVyYW5kJ3MgbW9zdCBzaWduaWZpY2FudCBiaXQgcG9zaXRpb24gKDEwIGJpdHMgcGVyCisJCSAgY3ljbGUpLiAgTXVsdGlwbHkgdW5pdCBpcyBub3QgcGlwZWxpbmVkLCBvbmx5IG9uZSBtdWx0aXBseQorCQkgIG9wZXJhdGlvbiBpbiBwcm9ncmVzcyBpcyBhbGxvd2VkLgorSW50ZWdlciBkaXZpZGU6CSAgPworRmxvYXRpbmctcG9pbnQ6CSAgQW55IHBsYWluIDIgYXJpdGhtZXRpYyBpbnN0cnVjdGlvbnMgKHN1Y2ggYXMgZm11bCwgZmFkZCwgYW5kCisJCSAgZm1hZGQpLCBsYXRlbmN5IDQgY3ljbGVzLgorRmxvYXRpbmctcG9pbnQgZGl2aWRlOgorCQkgID8KK0Zsb2F0aW5nLXBvaW50IHNxdWFyZSByb290OgorCQkgID8KKworUE9XRVIzL1BQQzYzMCBiZXN0IHBvc3NpYmxlIHRpbWVzIGZvciB0aGUgbWFpbiBsb29wczoKK3NoaWZ0OgkgICAgICAxLjUgY3ljbGVzIGxpbWl0ZWQgYnkgaW50ZWdlciB1bml0IGNvbnRlbnRpb24uCisJICAgICAgV2l0aCA2MyBzcGVjaWFsIGxvb3BzLCBvbmUgZm9yIGVhY2ggc2hpZnQgY291bnQsIHdlIGNvdWxkCisJICAgICAgcmVkdWNlIHRoZSBuZWVkZWQgaW50ZWdlciBpbnN0cnVjdGlvbnMgdG8gMiwgd2hpY2ggd291bGQKKwkgICAgICByZWR1Y2UgdGhlIGJlc3QgcG9zc2libGUgdGltZSB0byAxIGN5Y2xlLgorYWRkL3N1YjogICAgICAxLjUgY3ljbGVzLCBsaW1pdGVkIGJ5IGxkL3N0IHVuaXQgY29udGVudGlvbi4KK211bDoJICAgICAgMTggY3ljbGVzIChhdmVyYWdlKSB1bmxlc3MgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucyBhcmUgdXNlZCwKKwkgICAgICBidXQgdGhhdCB3b3VsZCBvbmx5IGhlbHAgZm9yIG11bHRpcGxpZXMgb2YgcGVyaGFwcyAxMCBhbmQgbW9yZQorCSAgICAgIGxpbWJzLgorYWRkbXVsL3N1Ym11bDpTYW1lIHNpdHVhdGlvbiBhcyBmb3IgbXVsLgorCisKK1BPV0VSNC9QUEM5NzAgYW5kIFBPV0VSNSBwaXBlbGluZSBpbmZvcm1hdGlvbjoKKworVGhpcyBpcyBhIHZlcnkgb2RkIHBpcGVsaW5lLCBpdCBpcyBiYXNpY2FsbHkgYSBWTElXIG1hc3F1ZXJhZGluZyBhcyBhIHBsYWluCithcmNoaXRlY3R1cmUuICBJdHMgaXNzdWUgcnVsZXMgYXJlIG5vdCBtYWRlIHB1YmxpYywgYW5kIHNpbmNlIGl0IGlzIHNvIHdlaXJkLAoraXQgaXMgdmVyeSBoYXJkIHRvIGZpZ3VyZSBvdXQgYW55IHVzZWZ1bCBpbmZvcm1hdGlvbiBmcm9tIGV4cGVyaW1lbnRhdGlvbi4KK0FuIGV4YW1wbGU6CisKKyAgQSB3ZWxsLWFsaWduZWQgbG9vcCB3aXRoIG5vcCdzIHRha2UgMywgNCwgNiwgNywgLi4uIGN5Y2xlcy4KKyAgICAzIGN5Y2xlcyBmb3IgIDAsICAxLCAgMiwgIDMsICA0LCAgNSwgIDYsICA3IG5vcCdzCisgICAgNCBjeWNsZXMgZm9yICA4LCAgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSBub3AncworICAgIDYgY3ljbGVzIGZvciAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMgbm9wJ3MKKyAgICA3IGN5Y2xlcyBmb3IgMjQsIDI1LCAyNiwgMjcgbm9wJ3MKKyAgICA4IGN5Y2xlcyBmb3IgMjgsIDI5LCAzMCwgMzEgbm9wJ3MKKyAgICAuLi4gY29udGludWVzIHJlZ3VsYXJseQorCisKK0Z1bmN0aW9uYWwgdW5pdHM6CitMUzEgIC0gbGQvc3QgdW5pdCAxCitMUzIgIC0gbGQvc3QgdW5pdCAyCitGWFUxIC0gaW50ZWdlciB1bml0IDEsIGhhbmRsZXMgYW55IGludGVnZXIgaW5zdHJ1Y3Rpb24KK0ZYVTIgLSBpbnRlZ2VyIHVuaXQgMiwgaGFuZGxlcyBhbnkgaW50ZWdlciBpbnN0cnVjdGlvbgorRlBVMSAtIGZsb2F0aW5nLXBvaW50IHVuaXQgMQorRlBVMiAtIGZsb2F0aW5nLXBvaW50IHVuaXQgMgorCitXaGlsZSB0aGlzIGlzIG9uZSBpbnRlZ2VyIHVuaXQgbGVzcyB0aGFuIFBPV0VSMy9QUEM2MzAsIHRoZSByZW1haW5pbmcgdW5pdHMKK2FyZSBtb3JlIHBvd2VyZnVsOyBoZXJlIHRoZXkgaGFuZGxlIG11bHRpcGx5IGFuZCBkaXZpZGUuCisKK01lbW9yeToJCSAgMiBsZC9zdC4gIFN0b3JlcyBnbyB0byB0aGUgTDIgY2FjaGUsIHdoaWNoIGNhbiBzdXN0YWluIGp1c3QKKwkJICBvbmUgc3RvcmUgcGVyIGN5Y2xlLgorCQkgIEwxIGxvYWQgbGF0ZW5jeTogdG8gZ3JlZ3MgMy00IGN5Y2xlcywgdG8gZnJlZ3MgNS02IGN5Y2xlcy4KKwkJICBPcGVyYXRpb25zIHRoYXQgbW9kaWZ5IHRoZSBhZGRyZXNzIHJlZ2lzdGVyIG1pZ2h0IGJlIHNwbGl0CisJCSAgdG8gdXNlIGFsc28gYW4gaW50ZWdlciBpc3N1ZSBzbG90LgorU2ltcGxlIGludGVnZXI6CSAgMiBvcGVyYXRpb25zIGV2ZXJ5IGN5Y2xlLCBsYXRlbmN5IDIuCitJbnRlZ2VyIG11bHRpcGx5OiAyIG9wZXJhdGlvbnMgZXZlcnkgNnRoIGN5Y2xlLCBsYXRlbmN5IDcgY3ljbGVzLgorSW50ZWdlciBkaXZpZGU6CSAgPworRmxvYXRpbmctcG9pbnQ6CSAgQW55IHBsYWluIDIgYXJpdGhtZXRpYyBpbnN0cnVjdGlvbnMgKHN1Y2ggYXMgZm11bCwgZmFkZCwgYW5kCisJCSAgZm1hZGQpLCBsYXRlbmN5IDYgY3ljbGVzLgorRmxvYXRpbmctcG9pbnQgZGl2aWRlOgorCQkgID8KK0Zsb2F0aW5nLXBvaW50IHNxdWFyZSByb290OgorCQkgID8KKworCitJREVBUworCisqbXVsXzE6IEhhbmRsaW5nIG9uZSBsaW1iIHVzaW5nIG11bGxkL211bGhkdSBhbmQgdHdvIGxpbWJzIHVzaW5nIGZsb2F0aW5nLQorcG9pbnQgb3BlcmF0aW9ucyBzaG91bGQgZ2l2ZSBwZXJmb3JtYW5jZSBvZiBhYm91dCAyMCBjeWNsZXMgZm9yIDMgbGltYnMsIG9yIDcKK2N5Y2xlcy9saW1iLgorCitXZSBzaG91bGQgcHJvYmFibHkgc3BsaXQgdGhlIHNpbmdsZS1saW1iIG9wZXJhbmQgaW4gMzItYml0IGNodW5rcywgYW5kIHRoZQorbXVsdGktbGltYiBvcGVyYW5kIGluIDE2LWJpdCBjaHVua3MsIGFsbG93aW5nIHVzIHRvIGFjY3VtdWxhdGUgd2VsbCBpbiBmcAorcmVnaXN0ZXJzLgorCitQcm9ibGVtIGlzIHRvIGdldCAzMi1iaXQgb3IgMTYtYml0IHdvcmRzIHRvIHRoZSBmcCByZWdpc3RlcnMuICBPbmx5IDY0LWJpdCBmcAorbWVtb3BzIGNvcGllcyBiaXRzIHdpdGhvdXQgZmlkZGxpbmcgd2l0aCB0aGVtLiAgV2UgbWlnaHQgdGhlcmVmb3JlIG5lZWQgdG8KK2xvYWQgdG8gaW50ZWdlciByZWdpc3RlcnMgd2l0aCB6ZXJvIGV4dGVuc2lvbiwgc3RvcmUgYXMgNjQgYml0cyBpbnRvIHRlbXAKK3NwYWNlLCBhbmQgdGhlbiBsb2FkIHRvIGZwIHJlZ3MuICBBbHRlcm5hdGl2ZWx5LCBsb2FkIGRpcmVjdGx5IHRvIGZwIHNwYWNlCithbmQgYWRkIHdlbGwtY2hvc2VuIGNvbnN0YW50cyB0byBnZXQgY2FuY2VsbGF0aW9uLiAgKE90aGVyIHBhcnQgYWZ0ZXIgZ2l2ZW4gYnkKK3N1YnNlcXVlbnQgc3VidHJhY3Rpb24uKQorCitQb3NzaWJsZSBjb2RlIG1peCBmb3IgbG9hZC12aWEtaW50cmVncyB2YXJpYW50OgorCitsd3osc3RkLGxmZAorZm1hZGQsZm1hZGQsZm11bCxmbXVsCitmY3RpZHosc3RmZCxsZCxmY3RpZHosc3RmZCxsZAorYWRkLGFkZGUKK2x3eixzdGQsbGZkCitmbWFkZCxmbWFkZCxmbXVsLGZtdWwKK2ZjdGlkeixzdGZkLGxkLGZjdGlkeixzdGZkLGxkCithZGQsYWRkZQorc3JkLHNsZCxhZGQsYWRkZSxhZGQsYWRkZQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvYWl4Lm00IGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvYWl4Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0Mzc4YjgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9haXgubTQKQEAgLTAsMCArMSw5OSBAQAorZGl2ZXJ0KC0xKQorZG5sICBtNCBtYWNyb3MgZm9yIEFJWCA2NC1iaXQgYXNzZW1ibHkuCisKK2RubCAgQ29weXJpZ2h0IDIwMDAtMjAwMiwgMjAwNSwgMjAwNiwgMjAxMCwgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitkZWZpbmUoYEFJWCcpCisKK2RlZmluZShgQVNNX1NUQVJUJywKKwlgLm1hY2hpbmUJImFueSIKKwkudG9jJykKKworZG5sICBDYWxsZWQ6IFBST0xPR1VFX2NwdShHU1lNX1BSRUZJWGAnZm9vWyx0b2NdKQorZG5sICAgICAgICAgIEVQSUxPR1VFX2NwdShHU1lNX1BSRUZJWGAnZm9vKQorZG5sCitkbmwgIERvbid0IHdhbnQgRUxGIHN0eWxlIC5zaXplIGluIHRoZSBlcGlsb2d1ZS4KKworZGVmaW5lKGBQUk9MT0dVRV9jcHUnLAorbTRfYXNzZXJ0X251bWFyZ3NfcmFuZ2UoMSwyKQorYGlmZWxzZShgJDInLHRvYywsCitgaWZlbHNlKGAkMicsLCxgbTRfZXJyb3IoYFVucmVjb2duaXNlZCBQUk9MT0dVRSBwYXJhbWV0ZXInKScpJylkbmwKKwkuZ2xvYmwJJDEKKwkuZ2xvYmwJLiQxCisJLmNzZWN0CVtEU10sIDMKKyQxOgorCS5sbG9uZwkuJDEsIFRPQ1t0YzBdLCAwCisJLmNzZWN0CS4kMVtQUl0sIDYKKy4kMTonKQorCitkZWZpbmUoYEVQSUxPR1VFX2NwdScsCittNF9hc3NlcnRfbnVtYXJncygxKQorYCcpCisKK2RlZmluZShgVE9DX0VOVFJZJywgYCcpCisKK2RlZmluZShgTEVBJywKK200X2Fzc2VydF9udW1hcmdzKDIpCitgZGVmaW5lKGBUT0NfRU5UUlknLAorYAkudG9jCisuLiQyOgkudGMJJDJbVENdLCAkMicpJworCWBsZAkkMSwgLi4kMigyKScpCisKK2RlZmluZShgTEVBTCcsCittNF9hc3NlcnRfbnVtYXJncygyKQorYExFQSgkMSwkMiknKQorCisKK2RlZmluZShgRVhURVJOJywKK200X2Fzc2VydF9udW1hcmdzKDEpCitgCS5nbG9ibAkkMScpCisKK2RlZmluZShgRVhURVJOX0ZVTkMnLAorbTRfYXNzZXJ0X251bWFyZ3MoMSkKK2AJLmdsb2JsCS4kMScpCisKK2RlZmluZShgREVGX09CSkVDVCcsCittNF9hc3NlcnRfbnVtYXJnc19yYW5nZSgxLDIpCitgCS5jc2VjdAlbUk9dLCAzCisJQUxJR04oaWZlbHNlKCQjLDEsMiwkMikpCiskMToKKycpCisKK2RlZmluZShgRU5EX09CSkVDVCcsCittNF9hc3NlcnRfbnVtYXJncygxKSkKKworZGVmaW5lKGBDQUxMJywKKwlgYmwJLiQxCisJbm9wJykKKworZGVmaW5lKGBBU01fRU5EJywgYFRPQ19FTlRSWScpCisKK3VuZGVmaW5lKGBFWFRSQV9SRUdJU1RFUicpCisKK2RpdmVydApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvY29tLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L2NvbS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc0YjdmZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L2NvbS5hc20KQEAgLTAsMCArMSwxMzYgQEAKK2RubCAgUG93ZXJQQy02NCBtcG5fY29tLgorCitkbmwgIENvcHlyaWdodCAyMDA0LCAyMDA1LCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICAgICAgICAgICBjeWNsZXMvbGltYgorQyBQT1dFUjMvUFBDNjMwICAgICAgICAgID8KK0MgUE9XRVI0L1BQQzk3MCAgICAgICAgICAxLjI1CitDIFBPV0VSNSAgICAgICAgICAgICAgICAgPworQyBQT1dFUjYgICAgICAgICAgICAgICAgIDEuMzIKK0MgUE9XRVI3ICAgICAgICAgICAgICAgICAxLjEzCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsCWByMycpCitkZWZpbmUoYHVwJywJYHI0JykKK2RlZmluZShgbicsCWByNScpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fY29tKQorCitpZmRlZihgSEFWRV9BQklfbW9kZTMyJywKK2AJcmxkaWNsCW4sIG4sIDAsMzInKQorCisJY21wZGkJY3IwLCBuLCA0CisJYmx0CUwoc21sKQorCisJYWRkaQlyMTAsIG4sIDQKKwlzcmRpCXIxMCwgcjEwLCAzCisJbXRjdHIJcjEwCisKKwlhbmRpLglyMCwgbiwgMQorCXJsd2lubQlyMTEsIG4sIDAsMzAsMzAKKwlybHdpbm0JcjEyLCBuLCAwLDI5LDI5CisJY21wZGkJY3I2LCByMTEsIDAKKwljbXBkaQljcjcsIHIxMiwgMAorCisJYmVxCWNyMCwgTCh4eDApCitMKHh4MSk6CWxkCXI2LCAwKHVwKQorCWFkZGkJdXAsIHVwLCA4CisJbm9yCXI2LCByNiwgcjYKKwlzdGQJcjYsIDAocnApCisJYWRkaQlycCwgcnAsIDgKKworTCh4eDApOglibmUJY3I2LCBMKHgxMCkKK0woeDAwKToJbGQJcjYsIDAocjQpCisJbGQJcjcsIDgocjQpCisJYm5lCWNyNywgTCgxMDApCitMKDAwMCk6CWFkZGkJcnAsIHJwLCAtMzIKKwliCUwobG8wKQorTCgxMDApOglhZGRpCXVwLCB1cCwgLTMyCisJYglMKGxvNCkKK0woeDEwKToJbGQJcjgsIDAocjQpCisJbGQJcjksIDgocjQpCisJYm5lCWNyNywgTCgxMTApCitMKDAxMCk6CWFkZGkJdXAsIHVwLCAxNgorCWFkZGkJcnAsIHJwLCAtMTYKKwliCUwobG8yKQorTCgxMTApOglhZGRpCXVwLCB1cCwgLTE2CisJYWRkaQlycCwgcnAsIC00OAorCWIJTChsbzYpCisKK0woc21sKToJbXRjdHIJbgorTCh0KToJbGQJcjYsIDAodXApCisJYWRkaQl1cCwgdXAsIDgKKwlub3IJcjYsIHI2LCByNgorCXN0ZAlyNiwgMChycCkKKwlhZGRpCXJwLCBycCwgOAorCWJkbnoJTCh0KQorCWJscgorCisJQUxJR04oMzIpCitMKHRvcCk6CW5vcglyNiwgcjYsIHI2CisJbm9yCXI3LCByNywgcjcKKwlzdGQJcjYsIDAocnApCisJc3RkCXI3LCA4KHJwKQorTChsbzIpOglsZAlyNiwgMCh1cCkKKwlsZAlyNywgOCh1cCkKKwlub3IJcjgsIHI4LCByOAorCW5vcglyOSwgcjksIHI5CisJc3RkCXI4LCAxNihycCkKKwlzdGQJcjksIDI0KHJwKQorTChsbzApOglsZAlyOCwgMTYodXApCisJbGQJcjksIDI0KHVwKQorCW5vcglyNiwgcjYsIHI2CisJbm9yCXI3LCByNywgcjcKKwlzdGQJcjYsIDMyKHJwKQorCXN0ZAlyNywgNDAocnApCitMKGxvNik6CWxkCXI2LCAzMih1cCkKKwlsZAlyNywgNDAodXApCisJbm9yCXI4LCByOCwgcjgKKwlub3IJcjksIHI5LCByOQorCXN0ZAlyOCwgNDgocnApCisJc3RkCXI5LCA1NihycCkKKwlhZGRpCXJwLCBycCwgNjQKK0wobG80KToJbGQJcjgsIDQ4KHVwKQorCWxkCXI5LCA1Nih1cCkKKwlhZGRpCXVwLCB1cCwgNjQKKwliZG56CUwodG9wKQorCitMKGVuZCk6CW5vcglyNiwgcjYsIHI2CisJbm9yCXI3LCByNywgcjcKKwlzdGQJcjYsIDAocnApCisJc3RkCXI3LCA4KHJwKQorCW5vcglyOCwgcjgsIHI4CisJbm9yCXI5LCByOSwgcjkKKwlzdGQJcjgsIDE2KHJwKQorCXN0ZAlyOSwgMjQocnApCisJYmxyCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9jb3B5ZC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9jb3B5ZC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZjZTkzMAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L2NvcHlkLmFzbQpAQCAtMCwwICsxLDg0IEBACitkbmwgIFBvd2VyUEMtNjQgbXBuX2NvcHlkCisKK2RubCAgQ29weXJpZ2h0IDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgICAgICAgICAgIGN5Y2xlcy9saW1iCitDIFBPV0VSMy9QUEM2MzAgICAgICAgICAgMQorQyBQT1dFUjQvUFBDOTcwICAgICAgICAgIDEKK0MgUE9XRVI1ICAgICAgICAgICAgICAgICA/CitDIFBPV0VSNiAgICAgICAgICAgICAgICAgPworQyBQT1dFUjcgICAgICAgICAgICAgICAgIDEuNAorCitDIElOUFVUIFBBUkFNRVRFUlMKK0MgcnAJcjMKK0MgdXAJcjQKK0MgbglyNQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2NvcHlkKQorCXJsZGljLglyMCwgcjUsIDMsIDU5CUMgcjAgPSAocjUgJiAzKSA8PCAzOyBjcjAgPSAobiA9PSA0dCk/CisJY21wbGRpCWNyNiwgcjAsIDE2CUMgY3I2ID0gKG4gY21wIDR0ICsgMik/CisKK2lmZGVmKGBIQVZFX0FCSV9tb2RlMzInLAorYAlybGRpYwlyNiwgcjUsIDMsIDMyJywJQyBieXRlIGNvdW50IGNvcnJlc3BvbmRpbmcgdG8gbgorYAlybGRpY3IJcjYsIHI1LCAzLCA2MCcpCUMgYnl0ZSBjb3VudCBjb3JyZXNwb25kaW5nIHRvIG4KKworCWFkZGkJcjUsIHI1LCA0CUMgY29tcHV0ZS4uLgoraWZkZWYoYEhBVkVfQUJJX21vZGUzMicsCitgCXJsZGljbAlyNSwgcjUsIDYyLDM0JywJQyAuLi5icmFuY2ggY291bnQKK2AJcmxkaWNsCXI1LCByNSwgNjIsIDInKQlDIC4uLmJyYW5jaCBjb3VudAorCW10Y3RyCXI1CisKKwlhZGQJcjQsIHI0LCByNgorCWFkZAlyMywgcjMsIHI2CisJc3ViCXI0LCByNCwgcjAJQyBvZmZzZXQgdXAKKwlzdWIJcjMsIHIzLCByMAlDIG9mZnNldCBycAorCisJYmVxCWNyMCwgTChMMDApCisJYmx0CWNyNiwgTChMMDEpCisJYmVxCWNyNiwgTChMMTApCisJYglMKEwxMSkKKworCUFMSUdOKDE2KQorTChvb3ApOglsZAlyNiwgMjQocjQpCisJc3RkCXI2LCAyNChyMykKK0woTDExKToJbGQJcjYsIDE2KHI0KQorCXN0ZAlyNiwgMTYocjMpCitMKEwxMCk6CWxkCXI2LCA4KHI0KQorCXN0ZAlyNiwgOChyMykKK0woTDAxKToJbGQJcjYsIDAocjQpCisJc3RkCXI2LCAwKHIzKQorTChMMDApOglhZGRpCXI0LCByNCwgLTMyCisJYWRkaQlyMywgcjMsIC0zMgorCWJkbnoJTChvb3ApCisKKwlibHIKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L2NvcHlpLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L2NvcHlpLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTg2Y2IyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvY29weWkuYXNtCkBAIC0wLDAgKzEsNzggQEAKK2RubCAgUG93ZXJQQy02NCBtcG5fY29weWkuCisKK2RubCAgQ29weXJpZ2h0IDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgICAgICAgICAgIGN5Y2xlcy9saW1iCitDIFBPV0VSMy9QUEM2MzAgICAgICAgICAgMQorQyBQT1dFUjQvUFBDOTcwICAgICAgICAgIDEKK0MgUE9XRVI1ICAgICAgICAgICAgICAgICA/CitDIFBPV0VSNiAgICAgICAgICAgICAgICAgPworQyBQT1dFUjcgICAgICAgICAgICAgICAgIDEuNAorCitDIElOUFVUIFBBUkFNRVRFUlMKK0MgcnAJcjMKK0MgdXAJcjQKK0MgbglyNQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2NvcHlpKQorCXJsZGljLglyMCwgcjUsIDMsIDU5CUMgcjAgPSAocjUgJiAzKSA8PCAzOyBjcjAgPSAobiA9PSA0dCk/CisJY21wbGRpCWNyNiwgcjAsIDE2CUMgY3I2ID0gKG4gY21wIDR0ICsgMik/CisKKwlhZGRpCXI1LCByNSwgNAlDIGNvbXB1dGUuLi4KK2lmZGVmKGBIQVZFX0FCSV9tb2RlMzInLAorYAlybGRpY2wJcjUsIHI1LCA2MiwzNCcsCUMgLi4uYnJhbmNoIGNvdW50CitgCXJsZGljbAlyNSwgcjUsIDYyLCAyJykJQyAuLi5icmFuY2ggY291bnQKKwltdGN0cglyNQorCisJYWRkCXI0LCByNCwgcjAJQyBvZmZzZXQgdXAKKwlhZGQJcjMsIHIzLCByMAlDIG9mZnNldCBycAorCisJYmVxCWNyMCwgTChMMDApCisJYmx0CWNyNiwgTChMMDEpCisJYmVxCWNyNiwgTChMMTApCisJYglMKEwxMSkKKworCUFMSUdOKDE2KQorTChvb3ApOglsZAlyNiwgLTMyKHI0KQorCXN0ZAlyNiwgLTMyKHIzKQorTChMMTEpOglsZAlyNiwgLTI0KHI0KQorCXN0ZAlyNiwgLTI0KHIzKQorTChMMTApOglsZAlyNiwgLTE2KHI0KQorCXN0ZAlyNiwgLTE2KHIzKQorTChMMDEpOglsZAlyNiwgLTgocjQpCisJc3RkCXI2LCAtOChyMykKK0woTDAwKToJYWRkaQlyNCwgcjQsIDMyCisJYWRkaQlyMywgcjMsIDMyCisJYmRueglMKG9vcCkKKworCWJscgorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvZGFyd2luLm00IGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvZGFyd2luLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjOTk1ZTcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9kYXJ3aW4ubTQKQEAgLTAsMCArMSwxMjIgQEAKK2RpdmVydCgtMSkKK2RubCAgbTQgbWFjcm9zIGZvciBNYWMgT1MgNjQtYml0IGFzc2VtYmx5LgorCitkbmwgIENvcHlyaWdodCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2RlZmluZShgREFSV0lOJykKKworZGVmaW5lKGBBU01fU1RBUlQnLGAnKQorCitkbmwgIENhbGxlZDogUFJPTE9HVUVfY3B1KEdTWU1fUFJFRklYYCdmb29bLHRvY10pCitkbmwgICAgICAgICAgRVBJTE9HVUVfY3B1KEdTWU1fUFJFRklYYCdmb28pCitkbmwKKworZGVmaW5lKGBQUk9MT0dVRV9jcHUnLAorbTRfYXNzZXJ0X251bWFyZ3NfcmFuZ2UoMSwyKQorYGlmZWxzZShgJDInLHRvYywsCitgaWZlbHNlKGAkMicsLCxgbTRfZXJyb3IoYFVucmVjb2duaXNlZCBQUk9MT0dVRSBwYXJhbWV0ZXInKScpJylkbmwKKwkudGV4dAorCS5nbG9ibAkkMQorCS5hbGlnbgk1CiskMTonKQorCitkZWZpbmUoYGxlYV9saXN0JywgYCcpCisKK2RubCAgTEVBTCAtLSBMb2FkIEVmZmVjdGl2ZSBBZGRyZXNzIExvY2FsLiAgVGhpcyBpcyB0byBiZSB1c2VkIGZvciBzeW1ib2xzCitkbmwgIGRlZmluZWQgaW4gdGhlIHNhbWUgZmlsZS4gIEl0IHdpbGwgbm90IHdvcmsgZm9yIGV4dGVybmFsbHkgZGVmaW5lZAorZG5sICBzeW1ib2xzLgorCitkZWZpbmUoYExFQUwnLAorbTRfYXNzZXJ0X251bWFyZ3MoMikKK2BpZmRlZihgUElDJywKK2AKKwltZmxyCXIwCQkJQyBzYXZlIHJldHVybiBhZGRyZXNzCisJYmNsCTIwLCAzMSwgMWYKKzE6CW1mbHIJJDEKKwlhZGRpcwkkMSwgJDEsIGhhMTYoJDItMWIpCisJbGEJJDEsIGxvMTYoJDItMWIpKCQxKQorCW10bHIJcjAJCQlDIHJlc3RvcmUgcmV0dXJuIGFkZHJlc3MKKycsYAorCWxpcwkkMSwgaGExNigkMikKKwlsYQkkMSwgbG8xNigkMikoJDEpCisnKScpCisKK2RubCAgTEVBIC0tIExvYWQgRWZmZWN0aXZlIEFkZHJlc3MuICBUaGlzIGlzIHRvIGJlIHVzZWQgZm9yIHN5bWJvbHMgZGVmaW5lZCBpbgorZG5sICBhbm90aGVyIGZpbGUuICBJdCB3aWxsIG5vdCB3b3JrIGZvciBsb2NhbGx5IGRlZmluZWQgc3ltYm9scy4KKworZGVmaW5lKGBMRUEnLAorbTRfYXNzZXJ0X251bWFyZ3MoMikKK2BpZmRlZihgUElDJywKK2BkZWZpbmUoYGxlYV9saXN0JywKK2AJLm5vbl9sYXp5X3N5bWJvbF9wb2ludGVyCitgTCckMmAnJG5vbl9sYXp5X3B0cjoKKwkuaW5kaXJlY3Rfc3ltYm9sICQyCisJLnF1YWQJMAorJykKKwltZmxyCXIwCQkJQyBzYXZlIHJldHVybiBhZGRyZXNzCisJYmNsCTIwLCAzMSwgMWYKKzE6CW1mbHIJJDEKKwlhZGRpcwkkMSwgJDEsIGhhMTYoYEwnJDJgJyRub25fbGF6eV9wdHItMWIpCisJbGQJJDEsIGxvMTYoYEwnJDJgJyRub25fbGF6eV9wdHItMWIpKCQxKQorCW10bHIJcjAJCQlDIHJlc3RvcmUgcmV0dXJuIGFkZHJlc3MKKycsYAorCWxpcwkkMSwgaGExNigkMikKKwlsYQkkMSwgbG8xNigkMikoJDEpCisnKScpCisKK2RlZmluZShgRVhURVJOJywKK200X2Fzc2VydF9udW1hcmdzKDEpCitgZG5sJykKKworZGVmaW5lKGBFWFRFUk5fRlVOQycsCittNF9hc3NlcnRfbnVtYXJncygxKQorYGRubCcpCisKK2RlZmluZShgREVGX09CSkVDVCcsCittNF9hc3NlcnRfbnVtYXJnc19yYW5nZSgxLDIpCitgCS5jb25zdAorCUFMSUdOKGlmZWxzZSgkIywxLDIsJDIpKQorJDE6CisnKQorCitkZWZpbmUoYEVORF9PQkpFQ1QnLAorbTRfYXNzZXJ0X251bWFyZ3MoMSkpCisKK2RlZmluZShgQ0FMTCcsCisJYGJsCUdTWU1fUFJFRklYYCckMScpCisKK2RlZmluZShgRVBJTE9HVUVfY3B1JywKK2BsZWFfbGlzdCcKK2BkZWZpbmUoYGxlYV9saXN0JywgYCcpJykKKworZGVmaW5lKGBBU01fRU5EJywgYGRubCcpCisKK2RlZmluZShgRVhUUkFfUkVHSVNURVInLCByMikKKworZGl2ZXJ0CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9lbGYubTQgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9lbGYubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRiNWE4ZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L2VsZi5tNApAQCAtMCwwICsxLDEyMyBAQAorZGl2ZXJ0KC0xKQorZG5sICBtNCBtYWNyb3MgZm9yIHBvd2VycGM2NCBHTlUvTGludXggYXNzZW1ibHkuCisKK2RubCAgQ29weXJpZ2h0IDIwMDMsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworZGVmaW5lKGBBU01fU1RBUlQnLAorYGlmZGVmKGBFTEZ2Ml9BQkknLAorYAorCS5hYml2ZXJzaW9uIDIKKycpJykKKworZG5sICBDYWxsZWQ6IFBST0xPR1VFX2NwdShHU1lNX1BSRUZJWGAnZm9vWyx0b2NdKQorZG5sICAgICAgICAgIEVQSUxPR1VFX2NwdShHU1lNX1BSRUZJWGAnZm9vKQorZG5sCisKK2RlZmluZShgUFJPTE9HVUVfY3B1JywKK200X2Fzc2VydF9udW1hcmdzX3JhbmdlKDEsMikKK2BpZmVsc2UoYCQyJyx0b2MsLAorYGlmZWxzZShgJDInLCwsYG00X2Vycm9yKGBVbnJlY29nbmlzZWQgUFJPTE9HVUUgcGFyYW1ldGVyJyknKScpZG5sCitpZmRlZihgRUxGdjJfQUJJJywKK2AKKwkuZ2xvYmwJJDEKKwkudHlwZQkkMSwgQGZ1bmN0aW9uCisJLnNlY3Rpb24JIi50ZXh0IgorCS5hbGlnbgk1CiskMToKK2lmZWxzZShgJDInLHRvYyxgCiswOglhZGRpcwkyLCAxMiwgKC5UT0MuLTBiKUBoYQorCWFkZGkJMiwgMiwgKC5UT0MuLTBiKUBsCisJLmxvY2FsZW50cnkgJDEsIC4tJDEKKycsKQorJyxgCisJLmdsb2JsCSQxCisJLmdsb2JsCS4kMQorCS5zZWN0aW9uCSIub3BkIiwiYXciCisJLmFsaWduCTMKKyQxOgorCS5sbG9uZwkuJDEsIC5UT0MuQHRvY2Jhc2UsIDAKKwkuc2l6ZQkkMSwgMjQKKwkudHlwZQkuJDEsIEBmdW5jdGlvbgorCS5zZWN0aW9uCSIudGV4dCIKKwkuYWxpZ24JNQorLiQxOgorJyknKQorCitkZWZpbmUoYEVQSUxPR1VFX2NwdScsCittNF9hc3NlcnRfbnVtYXJncygxKQorYGlmZGVmKGBFTEZ2Ml9BQkknLGAKKwkuc2l6ZQkkMSwgLi0kMQorJyxgCisJLnNpemUJLiQxLCAuLS4kMQorJyknKQorCitkZWZpbmUoYFRPQ19FTlRSWScsIGAnKQorCitkZWZpbmUoYExFQScsCittNF9hc3NlcnRfbnVtYXJncygyKQorYGRlZmluZShgVE9DX0VOVFJZJywKK2AJLnNlY3Rpb24JIi50b2MiLCAiYXciCisuLiQyOgkudGMJJDJbVENdLCAkMicpJworCWBsZAkkMSwgLi4kMkB0b2MoMiknKQorCitkZWZpbmUoYExFQUwnLAorbTRfYXNzZXJ0X251bWFyZ3MoMikKK2BMRUEoJDEsJDIpJykKKworCitkZWZpbmUoYEVYVEVSTicsCittNF9hc3NlcnRfbnVtYXJncygxKQorYGRubCcpCisKK2RlZmluZShgRVhURVJOX0ZVTkMnLAorbTRfYXNzZXJ0X251bWFyZ3MoMSkKK2BkbmwnKQorCitkZWZpbmUoYERFRl9PQkpFQ1QnLAorbTRfYXNzZXJ0X251bWFyZ3NfcmFuZ2UoMSwyKQorYAorCS5zZWN0aW9uCS5yb2RhdGEKKwlBTElHTihpZmVsc2UoJCMsMSwyLCQyKSkKKwkudHlwZQkkMSwgQG9iamVjdAorJDE6CisnKQorCitkZWZpbmUoYEVORF9PQkpFQ1QnLAorbTRfYXNzZXJ0X251bWFyZ3MoMSkKK2AJLnNpemUJJDEsIC4tJDEnKQorCitkZWZpbmUoYENBTEwnLAorCWBibAlHU1lNX1BSRUZJWGAnJDEKKwlub3AnKQorCitkZWZpbmUoYEFTTV9FTkQnLCBgVE9DX0VOVFJZJykKKwordW5kZWZpbmUoYEVYVFJBX1JFR0lTVEVSJykKKworZGl2ZXJ0CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9sb2dvcHNfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9sb2dvcHNfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZhNjk4NQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L2xvZ29wc19uLmFzbQpAQCAtMCwwICsxLDE1MSBAQAorZG5sICBQb3dlclBDLTY0IG1wbl9hbmRfbiwgbXBuX2FuZG5fbiwgbXBuX25hbmRfbiwgbXBuX2lvcl9uLCBtcG5faW9ybl9uLAorZG5sICBtcG5fbmlvcl9uLCBtcG5feG9yX24sIG1wbl94bm9yX24gLS0gbXBuIGJpdHdpc2UgbG9naWNhbCBvcGVyYXRpb25zLgorCitkbmwgIENvcHlyaWdodCAyMDAzLTIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgICAgICAgICAgIGN5Y2xlcy9saW1iCitDIFBPV0VSMy9QUEM2MzAgICAgICAgICAgMS43NQorQyBQT1dFUjQvUFBDOTcwICAgICAgICAgIDIuMTAKK0MgUE9XRVI1ICAgICAgICAgICAgICAgICA/CitDIFBPV0VSNiAgICAgICAgICAgICAgICAgPworQyBQT1dFUjcgICAgICAgICAgICAgICAgIDEuNzUKKworQyAgIG4JICAgUE9XRVIzL1BQQzYzMCAgIFBPV0VSNC9QUEM5NzAKK0MgICAgIDEJICAgICAgIDE1LjAwCSAgICAgICAxNS4zMworQyAgICAgMgkJNy41MAkJNy45OQorQyAgICAgMwkJNS4zMwkJNi4wMAorQyAgICAgNAkJNC41MAkJNC43NAorQyAgICAgNQkJNC4yMAkJNC4zOQorQyAgICAgNgkJMy41MAkJMy45OQorQyAgICAgNwkJMy4xNAkJMy42NAorQyAgICAgOAkJMy4wMAkJMy4zNgorQyAgICAgOQkJMy4wMAkJMy4zNgorQyAgICAxMAkJMi43MAkJMy4yNQorQyAgICAxMQkJMi42MwkJMy4xMQorQyAgICAxMgkJMi41OAkJMy4wMAorQyAgICAxMwkJMi42MQkJMy4wMgorQyAgICAxNAkJMi40MgkJMi44MgorQyAgICAxNQkJMi40MAkJMi43OQorQyAgICA1MAkJMi4wOAkJMi42NworQyAgIDEwMAkJMS44NQkJMi4zMQorQyAgIDIwMAkJMS44MAkJMi4xOAorQyAgIDQwMAkJMS43NwkJMi4xNAorQyAgMTAwMAkJMS43NgkJMi4xMCMKK0MgIDIwMDAJCTEuNzUjCQkyLjEzCitDICA0MDAwCQkyLjMwCQkyLjU3CitDICA4MDAwCQkyLjYyCQkyLjU4CitDIDE2MDAwCQkyLjUyCQk0LjI1CitDIDMyMDAwCQkyLjQ5CSAgICAgICAxNi4yNQorQyA2NDAwMAkJMi42NgkgICAgICAgMTguNzYKKworaWZkZWYoYE9QRVJBVElPTl9hbmRfbicsCitgCWRlZmluZShgZnVuYycsYG1wbl9hbmRfbicpCisJZGVmaW5lKGBsb2dvcCcsCQlgYW5kJyknKQoraWZkZWYoYE9QRVJBVElPTl9hbmRuX24nLAorYAlkZWZpbmUoYGZ1bmMnLGBtcG5fYW5kbl9uJykKKwlkZWZpbmUoYGxvZ29wJywJCWBhbmRjJyknKQoraWZkZWYoYE9QRVJBVElPTl9uYW5kX24nLAorYAlkZWZpbmUoYGZ1bmMnLGBtcG5fbmFuZF9uJykKKwlkZWZpbmUoYGxvZ29wJywJCWBuYW5kJyknKQoraWZkZWYoYE9QRVJBVElPTl9pb3JfbicsCitgCWRlZmluZShgZnVuYycsYG1wbl9pb3JfbicpCisJZGVmaW5lKGBsb2dvcCcsCQlgb3InKScpCitpZmRlZihgT1BFUkFUSU9OX2lvcm5fbicsCitgCWRlZmluZShgZnVuYycsYG1wbl9pb3JuX24nKQorCWRlZmluZShgbG9nb3AnLAkJYG9yYycpJykKK2lmZGVmKGBPUEVSQVRJT05fbmlvcl9uJywKK2AJZGVmaW5lKGBmdW5jJyxgbXBuX25pb3JfbicpCisJZGVmaW5lKGBsb2dvcCcsCQlgbm9yJyknKQoraWZkZWYoYE9QRVJBVElPTl94b3JfbicsCitgCWRlZmluZShgZnVuYycsYG1wbl94b3JfbicpCisJZGVmaW5lKGBsb2dvcCcsCQlgeG9yJyknKQoraWZkZWYoYE9QRVJBVElPTl94bm9yX24nLAorYAlkZWZpbmUoYGZ1bmMnLGBtcG5feG5vcl9uJykKKwlkZWZpbmUoYGxvZ29wJywJCWBlcXYnKScpCisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyBycAlyMworQyB1cAlyNAorQyB2cAlyNQorQyBuCXI2CisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FuZF9uIG1wbl9hbmRuX24gbXBuX25hbmRfbiBtcG5faW9yX24gbXBuX2lvcm5fbiBtcG5fbmlvcl9uIG1wbl94b3JfbiBtcG5feG5vcl9uKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUoZnVuYykKKwlsZAlyOCwgMChyNCkJQyByZWFkIGxvd2VzdCB1IGxpbWIKKwlsZAlyOSwgMChyNSkJQyByZWFkIGxvd2VzdCB2IGxpbWIKKwlhZGRpCXI2LCByNiwgMwlDIGNvbXB1dGUgYnJhbmNoIGNvdW50ICgxKQorCXJsZGljLglyMCwgcjYsIDMsIDU5CUMgcjAgPSAobi0xICYgMykgPDwgMzsgY3IwID0gKG4gPT0gNCh0KzEpKT8KKwljbXBsZGkJY3I2LCByMCwgMTYJQyBjcjYgPSAobiBjbXAgNHQgKyAzKQorCitpZmRlZihgSEFWRV9BQklfbW9kZTMyJywKK2AJcmxkaWNsCXI2LCByNiwgNjIsMzQnLAlDIC4uLmJyYW5jaCBjb3VudAorYAlybGRpY2wJcjYsIHI2LCA2MiwgMicpCUMgLi4uYnJhbmNoIGNvdW50CisJbXRjdHIJcjYKKworCWxkCXI2LCAwKHI0KQlDIHJlYWQgbG93ZXN0IHUgbGltYiAoYWdhaW4pCisJbGQJcjcsIDAocjUpCUMgcmVhZCBsb3dlc3QgdiBsaW1iIChhZ2FpbikKKworCWFkZAlyNSwgcjUsIHIwCUMgb2Zmc2V0IHZwCisJYWRkCXI0LCByNCwgcjAJQyBvZmZzZXQgdXAKKwlhZGQJcjMsIHIzLCByMAlDIG9mZnNldCBycAorCisJYmVxCWNyMCwgTChMMDEpCisJYmx0CWNyNiwgTChMMTApCisJYmVxCWNyNiwgTChMMTEpCisJYglMKEwwMCkKKworTChvb3ApOglsZAlyOCwgLTI0KHI0KQorCWxkCXI5LCAtMjQocjUpCisJbG9nb3AJcjEwLCByNiwgcjcKKwlzdGQJcjEwLCAtMzIocjMpCitMKEwwMCk6CWxkCXI2LCAtMTYocjQpCisJbGQJcjcsIC0xNihyNSkKKwlsb2dvcAlyMTAsIHI4LCByOQorCXN0ZAlyMTAsIC0yNChyMykKK0woTDExKToJbGQJcjgsIC04KHI0KQorCWxkCXI5LCAtOChyNSkKKwlsb2dvcAlyMTAsIHI2LCByNworCXN0ZAlyMTAsIC0xNihyMykKK0woTDEwKToJbGQJcjYsIDAocjQpCisJbGQJcjcsIDAocjUpCisJbG9nb3AJcjEwLCByOCwgcjkKKwlzdGQJcjEwLCAtOChyMykKK0woTDAxKToJYWRkaQlyNSwgcjUsIDMyCisJYWRkaQlyNCwgcjQsIDMyCisJYWRkaQlyMywgcjMsIDMyCisJYmRueglMKG9vcCkKKworCWxvZ29wCXIxMCwgcjYsIHI3CisJc3RkCXIxMCwgLTMyKHIzKQorCWJscgorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbHNoaWZ0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L2xzaGlmdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgwOTQ0YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L2xzaGlmdC5hc20KQEAgLTAsMCArMSwyMDcgQEAKK2RubCAgUG93ZXJQQy02NCBtcG5fbHNoaWZ0IC0tIHJwW10gPSB1cFtdIDw8IGNudAorCitkbmwgIENvcHlyaWdodCAyMDAzLCAyMDA1LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICAgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgUE9XRVIzL1BQQzYzMCAgICAgICAgICA/CitDIFBPV0VSNC9QUEM5NzAgICAgICAgICAgPworQyBQT1dFUjUgICAgICAgICAgICAgICAgIDIuMjUKK0MgUE9XRVI2ICAgICAgICAgICAgICAgICA5Ljc1CitDIFBPV0VSNyAgICAgICAgICAgICAgICAgMi4xNQorCitDIFRPRE8KK0MgICogVHJ5IHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIG5lZWRlZCBsaXZlIHJlZ2lzdGVycworQyAgKiBNaWNyby1vcHRpbWlzZSBoZWFkZXIgY29kZQorQyAgKiBLZWVwIGluIHN5bmNoIHdpdGggcnNoaWZ0LmFzbSBhbmQgbHNoaWZ0Yy5hc20KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywgIGByMycpCitkZWZpbmUoYHVwJywgIGByNCcpCitkZWZpbmUoYG4nLCAgIGByNScpCitkZWZpbmUoYGNudCcsIGByNicpCisKK2RlZmluZShgdG5jJyxgcjAnKQorZGVmaW5lKGB1MCcsYHIzMCcpCitkZWZpbmUoYHUxJyxgcjMxJykKK2RlZmluZShgcmV0dmFsJyxgcjUnKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2xzaGlmdCkKKwlzdGQJcjMxLCAtOChyMSkKKwlzdGQJcjMwLCAtMTYocjEpCisJc3ViZmljCXRuYywgY250LCA2NAorCXNsZGkJcjcsIG4sIDMJQyBieXRlIGNvdW50IGNvcnJlc3BvbmRpbmcgdG8gbgorCWFkZAl1cCwgdXAsIHI3CUMgdXAgPSB1cCArIG4KKwlhZGQJcnAsIHJwLCByNwlDIHJwID0gcnAgKyBuCisJcmxkaWNsLglyMzAsIG4sIDAsNjIJQyByMzAgPSBuICYgMywgc2V0IGNyMAorCWNtcGRpCWNyNiwgcjMwLCAyCisJYWRkaQlyMzEsIG4sIDMJQyBjb21wdXRlIGNvdW50Li4uCisJbGQJcjEwLCAtOCh1cCkJQyBsb2FkIDFzdCBsaW1iIGZvciBiMDAuLi5iMTEKKwlzcmQJcmV0dmFsLCByMTAsIHRuYworaWZkZWYoYEhBVkVfQUJJX21vZGUzMicsCitgCXJsZGljbAlyMzEsIHIzMSwgNjIsMzQnLAlDIC4uLmJyYW5jaCBjb3VudAorYAlzcmRpCXIzMSwgcjMxLCAyJykJQyAuLi5mb3IgY3RyCisJbXRjdHIJcjMxCQlDIGNvcHkgY291bnQgaW50byBjdHIKKwliZXEJY3IwLCBMKGIwMCkKKwlibHQJY3I2LCBMKGIwMSkKKwlsZAlyMTEsIC0xNih1cCkJQyBsb2FkIDJuZCBsaW1iIGZvciBiMTAgYW5kIGIxMQorCWJlcQljcjYsIEwoYjEwKQorCisJQUxJR04oMTYpCitMKGIxMSk6CXNsZAlyOCwgcjEwLCBjbnQKKwlzcmQJcjksIHIxMSwgdG5jCisJbGQJdTEsIC0yNCh1cCkKKwlhZGRpCXVwLCB1cCwgLTI0CisJc2xkCXIxMiwgcjExLCBjbnQKKwlzcmQJcjcsIHUxLCB0bmMKKwlhZGRpCXJwLCBycCwgMTYKKwliZG56CUwoZ3QzKQorCisJb3IJcjExLCByOCwgcjkKKwlzbGQJcjgsIHUxLCBjbnQKKwliCUwoY2ozKQorCisJQUxJR04oMTYpCitMKGd0Myk6CWxkCXUwLCAtOCh1cCkKKwlvcglyMTEsIHI4LCByOQorCXNsZAlyOCwgdTEsIGNudAorCXNyZAlyOSwgdTAsIHRuYworCWxkCXUxLCAtMTYodXApCisJb3IJcjEwLCByMTIsIHI3CisJYglMKEwxMSkKKworCUFMSUdOKDMyKQorTChiMTApOglzbGQJcjEyLCByMTAsIGNudAorCWFkZGkJcnAsIHJwLCAyNAorCXNyZAlyNywgcjExLCB0bmMKKwliZG56CUwoZ3QyKQorCisJc2xkCXI4LCByMTEsIGNudAorCW9yCXIxMCwgcjEyLCByNworCWIJTChjajIpCisKK0woZ3QyKToJbGQJdTAsIC0yNCh1cCkKKwlzbGQJcjgsIHIxMSwgY250CisJc3JkCXI5LCB1MCwgdG5jCisJbGQJdTEsIC0zMih1cCkKKwlvcglyMTAsIHIxMiwgcjcKKwlzbGQJcjEyLCB1MCwgY250CisJc3JkCXI3LCB1MSwgdG5jCisJbGQJdTAsIC00MCh1cCkKKwlvcglyMTEsIHI4LCByOQorCWFkZGkJdXAsIHVwLCAtMTYKKwliCUwoTDEwKQorCisJQUxJR04oMTYpCitMKGIwMCk6CWxkCXUxLCAtMTYodXApCisJc2xkCXIxMiwgcjEwLCBjbnQKKwlzcmQJcjcsIHUxLCB0bmMKKwlsZAl1MCwgLTI0KHVwKQorCXNsZAlyOCwgdTEsIGNudAorCXNyZAlyOSwgdTAsIHRuYworCWxkCXUxLCAtMzIodXApCisJb3IJcjEwLCByMTIsIHI3CisJc2xkCXIxMiwgdTAsIGNudAorCXNyZAlyNywgdTEsIHRuYworCWFkZGkJcnAsIHJwLCA4CisJYmR6CUwoY2o0KQorCitMKGd0NCk6CWFkZGkJdXAsIHVwLCAtMzIKKwlsZAl1MCwgLTgodXApCisJb3IJcjExLCByOCwgcjkKKwliCUwoTDAwKQorCisJQUxJR04oMTYpCitMKGIwMSk6CWJkbnoJTChndDEpCisJc2xkCXI4LCByMTAsIGNudAorCXN0ZAlyOCwgLTgocnApCisJYglMKHJldCkKKworTChndDEpOglsZAl1MCwgLTE2KHVwKQorCXNsZAlyOCwgcjEwLCBjbnQKKwlzcmQJcjksIHUwLCB0bmMKKwlsZAl1MSwgLTI0KHVwKQorCXNsZAlyMTIsIHUwLCBjbnQKKwlzcmQJcjcsIHUxLCB0bmMKKwlsZAl1MCwgLTMyKHVwKQorCW9yCXIxMSwgcjgsIHI5CisJc2xkCXI4LCB1MSwgY250CisJc3JkCXI5LCB1MCwgdG5jCisJbGQJdTEsIC00MCh1cCkKKwlhZGRpCXVwLCB1cCwgLTQwCisJb3IJcjEwLCByMTIsIHI3CisJYmR6CUwoZW5kKQorCisJQUxJR04oMzIpCitMKHRvcCk6CXNsZAlyMTIsIHUwLCBjbnQKKwlzcmQJcjcsIHUxLCB0bmMKKwlsZAl1MCwgLTgodXApCisJc3RkCXIxMSwgLTgocnApCisJb3IJcjExLCByOCwgcjkKK0woTDAwKToJc2xkCXI4LCB1MSwgY250CisJc3JkCXI5LCB1MCwgdG5jCisJbGQJdTEsIC0xNih1cCkKKwlzdGQJcjEwLCAtMTYocnApCisJb3IJcjEwLCByMTIsIHI3CitMKEwxMSk6CXNsZAlyMTIsIHUwLCBjbnQKKwlzcmQJcjcsIHUxLCB0bmMKKwlsZAl1MCwgLTI0KHVwKQorCXN0ZAlyMTEsIC0yNChycCkKKwlvcglyMTEsIHI4LCByOQorTChMMTApOglzbGQJcjgsIHUxLCBjbnQKKwlzcmQJcjksIHUwLCB0bmMKKwlsZAl1MSwgLTMyKHVwKQorCWFkZGkJdXAsIHVwLCAtMzIKKwlzdGQJcjEwLCAtMzIocnApCisJYWRkaQlycCwgcnAsIC0zMgorCW9yCXIxMCwgcjEyLCByNworCWJkbnoJTCh0b3ApCisKKwlBTElHTigzMikKK0woZW5kKToJc2xkCXIxMiwgdTAsIGNudAorCXNyZAlyNywgdTEsIHRuYworCXN0ZAlyMTEsIC04KHJwKQorTChjajQpOglvcglyMTEsIHI4LCByOQorCXNsZAlyOCwgdTEsIGNudAorCXN0ZAlyMTAsIC0xNihycCkKK0woY2ozKToJb3IJcjEwLCByMTIsIHI3CisJc3RkCXIxMSwgLTI0KHJwKQorTChjajIpOglzdGQJcjEwLCAtMzIocnApCisJc3RkCXI4LCAtNDAocnApCisKK0wocmV0KToJbGQJcjMxLCAtOChyMSkKKwlsZAlyMzAsIC0xNihyMSkKK2lmZGVmKGBIQVZFX0FCSV9tb2RlMzInLAorYAlzcmRpCXIzLCByZXR2YWwsIDMyCisJbXIJcjQsIHJldHZhbAorJyxgCW1yCXIzLCByZXR2YWwnKQorCWJscgorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbHNoaWZ0Yy5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9sc2hpZnRjLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2Y2YTgzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbHNoaWZ0Yy5hc20KQEAgLTAsMCArMSwyMTAgQEAKK2RubCAgUG93ZXJQQy02NCBtcG5fbHNoaWZ0YyAtLSBycFtdID0gfnVwW10gPDwgY250CisKK2RubCAgQ29weXJpZ2h0IDIwMDMsIDIwMDUsIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgICAgICAgICAgICBjeWNsZXMvbGltYgorQyBQT1dFUjMvUFBDNjMwICAgICAgICAgID8KK0MgUE9XRVI0L1BQQzk3MCAgICAgICAgICA/CitDIFBPV0VSNSAgICAgICAgICAgICAgICAgMi4yNQorQyBQT1dFUjYgICAgICAgICAgICAgICAgIDkuNQorQyBQT1dFUjcgICAgICAgICAgICAgICAgIDIuMTUKKworQyBUT0RPCitDICAqIFRyeSB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBuZWVkZWQgbGl2ZSByZWdpc3RlcnMKK0MgICogTWljcm8tb3B0aW1pc2UgaGVhZGVyIGNvZGUKK0MgICogS2VlcCBpbiBzeW5jaCB3aXRoIGxzaGlmdC5hc20gYW5kIHJzaGlmdC5hc20KK0MgICogQ291bGQgdGhlIGxvbmctc2NoZWR1bGVkIHN0ZCBpbnNucyBiZSBsZXNzIHNjaGVkdWxlZD8KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywgIGByMycpCitkZWZpbmUoYHVwJywgIGByNCcpCitkZWZpbmUoYG4nLCAgIGByNScpCitkZWZpbmUoYGNudCcsIGByNicpCisKK2RlZmluZShgdG5jJyxgcjAnKQorZGVmaW5lKGB1MCcsYHIzMCcpCitkZWZpbmUoYHUxJyxgcjMxJykKK2RlZmluZShgcmV0dmFsJyxgcjUnKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2xzaGlmdGMpCisJc3RkCXIzMSwgLTgocjEpCisJc3RkCXIzMCwgLTE2KHIxKQorCXN1YmZpYwl0bmMsIGNudCwgNjQKKwlzbGRpCXI3LCBuLCAzCUMgYnl0ZSBjb3VudCBjb3JyZXNwb25kaW5nIHRvIG4KKwlhZGQJdXAsIHVwLCByNwlDIHVwID0gdXAgKyBuCisJYWRkCXJwLCBycCwgcjcJQyBycCA9IHJwICsgbgorCXJsZGljbC4JcjMwLCBuLCAwLDYyCUMgcjMwID0gbiAmIDMsIHNldCBjcjAKKwljbXBkaQljcjYsIHIzMCwgMgorCWFkZGkJcjMxLCBuLCAzCUMgY29tcHV0ZSBjb3VudC4uLgorCWxkCXIxMCwgLTgodXApCUMgbG9hZCAxc3QgbGltYiBmb3IgYjAwLi4uYjExCisJc3JkCXJldHZhbCwgcjEwLCB0bmMKKwlzcmRpCXIzMSwgcjMxLCAyCUMgLi4uZm9yIGN0cgorCW10Y3RyCXIzMQkJQyBjb3B5IGNvdW50IGludG8gY3RyCisJYmVxCWNyMCwgTChiMDApCisJYmx0CWNyNiwgTChiMDEpCisJbGQJcjExLCAtMTYodXApCUMgbG9hZCAybmQgbGltYiBmb3IgYjEwIGFuZCBiMTEKKwliZXEJY3I2LCBMKGIxMCkKKworCUFMSUdOKDE2KQorTChiMTEpOglzbGQJcjgsIHIxMCwgY250CisJc3JkCXI5LCByMTEsIHRuYworCWxkCXUxLCAtMjQodXApCisJYWRkaQl1cCwgdXAsIC0yNAorCXNsZAlyMTIsIHIxMSwgY250CisJc3JkCXI3LCB1MSwgdG5jCisJYWRkaQlycCwgcnAsIDE2CisJYmRueglMKGd0MykKKworCW5vcglyMTEsIHI4LCByOQorCXNsZAlyOCwgdTEsIGNudAorCW5vcglyOCwgcjgsIHI4CisJYglMKGNqMykKKworCUFMSUdOKDE2KQorTChndDMpOglsZAl1MCwgLTgodXApCisJbm9yCXIxMSwgcjgsIHI5CisJc2xkCXI4LCB1MSwgY250CisJc3JkCXI5LCB1MCwgdG5jCisJbGQJdTEsIC0xNih1cCkKKwlub3IJcjEwLCByMTIsIHI3CisJYglMKEwxMSkKKworCUFMSUdOKDMyKQorTChiMTApOglzbGQJcjEyLCByMTAsIGNudAorCWFkZGkJcnAsIHJwLCAyNAorCXNyZAlyNywgcjExLCB0bmMKKwliZG56CUwoZ3QyKQorCisJc2xkCXI4LCByMTEsIGNudAorCW5vcglyMTAsIHIxMiwgcjcKKwlub3IJcjgsIHI4LCByOAorCWIJTChjajIpCisKK0woZ3QyKToJbGQJdTAsIC0yNCh1cCkKKwlzbGQJcjgsIHIxMSwgY250CisJc3JkCXI5LCB1MCwgdG5jCisJbGQJdTEsIC0zMih1cCkKKwlub3IJcjEwLCByMTIsIHI3CisJc2xkCXIxMiwgdTAsIGNudAorCXNyZAlyNywgdTEsIHRuYworCWxkCXUwLCAtNDAodXApCisJbm9yCXIxMSwgcjgsIHI5CisJYWRkaQl1cCwgdXAsIC0xNgorCWIJTChMMTApCisKKwlBTElHTigxNikKK0woYjAwKToJbGQJdTEsIC0xNih1cCkKKwlzbGQJcjEyLCByMTAsIGNudAorCXNyZAlyNywgdTEsIHRuYworCWxkCXUwLCAtMjQodXApCisJc2xkCXI4LCB1MSwgY250CisJc3JkCXI5LCB1MCwgdG5jCisJbGQJdTEsIC0zMih1cCkKKwlub3IJcjEwLCByMTIsIHI3CisJc2xkCXIxMiwgdTAsIGNudAorCXNyZAlyNywgdTEsIHRuYworCWFkZGkJcnAsIHJwLCA4CisJYmR6CUwoY2o0KQorCitMKGd0NCk6CWFkZGkJdXAsIHVwLCAtMzIKKwlsZAl1MCwgLTgodXApCisJbm9yCXIxMSwgcjgsIHI5CisJYglMKEwwMCkKKworCUFMSUdOKDE2KQorTChiMDEpOgliZG56CUwoZ3QxKQorCXNsZAlyOCwgcjEwLCBjbnQKKwlub3IJcjgsIHI4LCByOAorCXN0ZAlyOCwgLTgocnApCisJYglMKHJldCkKKworTChndDEpOglsZAl1MCwgLTE2KHVwKQorCXNsZAlyOCwgcjEwLCBjbnQKKwlzcmQJcjksIHUwLCB0bmMKKwlsZAl1MSwgLTI0KHVwKQorCXNsZAlyMTIsIHUwLCBjbnQKKwlzcmQJcjcsIHUxLCB0bmMKKwlsZAl1MCwgLTMyKHVwKQorCW5vcglyMTEsIHI4LCByOQorCXNsZAlyOCwgdTEsIGNudAorCXNyZAlyOSwgdTAsIHRuYworCWxkCXUxLCAtNDAodXApCisJYWRkaQl1cCwgdXAsIC00MAorCW5vcglyMTAsIHIxMiwgcjcKKwliZHoJTChlbmQpCisKKwlBTElHTigzMikKK0wodG9wKToJc2xkCXIxMiwgdTAsIGNudAorCXNyZAlyNywgdTEsIHRuYworCWxkCXUwLCAtOCh1cCkKKwlzdGQJcjExLCAtOChycCkKKwlub3IJcjExLCByOCwgcjkKK0woTDAwKToJc2xkCXI4LCB1MSwgY250CisJc3JkCXI5LCB1MCwgdG5jCisJbGQJdTEsIC0xNih1cCkKKwlzdGQJcjEwLCAtMTYocnApCisJbm9yCXIxMCwgcjEyLCByNworTChMMTEpOglzbGQJcjEyLCB1MCwgY250CisJc3JkCXI3LCB1MSwgdG5jCisJbGQJdTAsIC0yNCh1cCkKKwlzdGQJcjExLCAtMjQocnApCisJbm9yCXIxMSwgcjgsIHI5CitMKEwxMCk6CXNsZAlyOCwgdTEsIGNudAorCXNyZAlyOSwgdTAsIHRuYworCWxkCXUxLCAtMzIodXApCisJYWRkaQl1cCwgdXAsIC0zMgorCXN0ZAlyMTAsIC0zMihycCkKKwlhZGRpCXJwLCBycCwgLTMyCisJbm9yCXIxMCwgcjEyLCByNworCWJkbnoJTCh0b3ApCisKKwlBTElHTigzMikKK0woZW5kKToJc2xkCXIxMiwgdTAsIGNudAorCXNyZAlyNywgdTEsIHRuYworCXN0ZAlyMTEsIC04KHJwKQorTChjajQpOglub3IJcjExLCByOCwgcjkKKwlzbGQJcjgsIHUxLCBjbnQKKwlzdGQJcjEwLCAtMTYocnApCisJbm9yCXI4LCByOCwgcjgKK0woY2ozKToJbm9yCXIxMCwgcjEyLCByNworCXN0ZAlyMTEsIC0yNChycCkKK0woY2oyKToJc3RkCXIxMCwgLTMyKHJwKQorCXN0ZAlyOCwgLTQwKHJwKQorCitMKHJldCk6CWxkCXIzMSwgLTgocjEpCisJbGQJcjMwLCAtMTYocjEpCitpZmRlZihgSEFWRV9BQklfbW9kZTMyJywKK2AJc3JkaQlyMywgcmV0dmFsLCAzMgorCW1yCXI0LCByZXR2YWwKKycsYAltcglyMywgcmV0dmFsJykKKwlibHIKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGUzMi9hZGRfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlMzIvYWRkX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYTgwODcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlMzIvYWRkX24uYXNtCkBAIC0wLDAgKzEsODYgQEAKK2RubCAgUG93ZXJQQy02NC9tb2RlMzIgbXBuX2FkZF9uIC0tIEFkZCB0d28gbGltYiB2ZWN0b3JzIG9mIHRoZSBzYW1lIGxlbmd0aCA+IDAKK2RubCAgYW5kIHN0b3JlIHN1bSBpbiBhIHRoaXJkIGxpbWIgdmVjdG9yLgorCitkbmwgIENvcHlyaWdodCAxOTk5LTIwMDEsIDIwMDMsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkJY3ljbGVzL2xpbWIKK0MgUE9XRVIzL1BQQzYzMDogICAgID8KK0MgUE9XRVI0L1BQQzk3MDogICAgIDQuMjUKKworQyBJTlBVVCBQQVJBTUVURVJTCitDIHJwCXIzCitDIHVwCXI0CitDIHZwCXI1CitDIG4JcjYKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9hZGRfbikKKwltdGN0cglyNgkJQyBjb3B5IHNpemUgaW50byBDVFIKKwlhZGRpYwlyMCwgcjAsIDAJQyBjbGVhciBjeQorCWxkCXI4LCAwKHI0KQlDIGxvYWQgbGVhc3Qgc2lnbmlmaWNhbnQgczEgbGltYgorCWxkCXIwLCAwKHI1KQlDIGxvYWQgbGVhc3Qgc2lnbmlmaWNhbnQgczIgbGltYgorCWFkZGkJcjMsIHIzLCAtOAlDIG9mZnNldCByZXNfcHRyLCBpdCdzIHVwZGF0ZWQgYmVmb3JlIGl0J3MgdXNlZAorCWJkeglMKGVuZCkJCUMgSWYgZG9uZSwgc2tpcCBsb29wCisKK0wob29wKToJbGQJcjksIDgocjQpCUMgbG9hZCBzMSBsaW1iCisJbGQJcjEwLCA4KHI1KQlDIGxvYWQgczIgbGltYgorCWFkZGUJcjcsIHIwLCByOAlDIGFkZCBsaW1icyB3aXRoIGN5LCBzZXQgY3kKKwlzcmRpCXI2LCByMCwgMzIKKwlzcmRpCXIxMSwgcjgsIDMyCisJYWRkZQlyNiwgcjYsIHIxMQlDIGFkZCBoaWdoIGxpbWIgcGFydHMsIHNldCBjeQorCXN0ZAlyNywgOChyMykJQyBzdG9yZSByZXN1bHQgbGltYgorCWJkeglMKGV4aXQpCQlDIGRlY3JlbWVudCBDVFIgYW5kIGV4aXQgaWYgZG9uZQorCWxkdQlyOCwgMTYocjQpCUMgbG9hZCBzMSBsaW1iIGFuZCB1cGRhdGUgczFfcHRyCisJbGR1CXIwLCAxNihyNSkJQyBsb2FkIHMyIGxpbWIgYW5kIHVwZGF0ZSBzMl9wdHIKKwlhZGRlCXI3LCByMTAsIHI5CUMgYWRkIGxpbWJzIHdpdGggY3ksIHNldCBjeQorCXNyZGkJcjYsIHIxMCwgMzIKKwlzcmRpCXIxMSwgcjksIDMyCisJYWRkZQlyNiwgcjYsIHIxMQlDIGFkZCBoaWdoIGxpbWIgcGFydHMsIHNldCBjeQorCXN0ZHUJcjcsIDE2KHIzKQlDIHN0b3JlIHJlc3VsdCBsaW1iIGFuZCB1cGRhdGUgcmVzX3B0cgorCWJkbnoJTChvb3ApCQlDIGRlY3JlbWVudCBDVFIgYW5kIGxvb3AgYmFjaworCitMKGVuZCk6CWFkZGUJcjcsIHIwLCByOAorCXNyZGkJcjYsIHIwLCAzMgorCXNyZGkJcjExLCByOCwgMzIKKwlhZGRlCXI2LCByNiwgcjExCUMgYWRkIGxpbWJzIHdpdGggY3ksIHNldCBjeQorCXN0ZAlyNywgOChyMykJQyBzdG9yZSB1bHRpbWF0ZSByZXN1bHQgbGltYgorCWxpCXIzLCAwCQlDIGxvYWQgY3kgaW50byAuLi4KKwlhZGR6ZQlyNCwgcjMJCUMgLi4uIHJldHVybiB2YWx1ZSByZWdpc3RlcgorCWJscgorTChleGl0KToJYWRkZQlyNywgcjEwLCByOQorCXNyZGkJcjYsIHIxMCwgMzIKKwlzcmRpCXIxMSwgcjksIDMyCisJYWRkZQlyNiwgcjYsIHIxMQlDIGFkZCBsaW1icyB3aXRoIGN5LCBzZXQgY3kKKwlzdGQJcjcsIDE2KHIzKQorCWxpCXIzLCAwCQlDIGxvYWQgY3kgaW50byAuLi4KKwlhZGR6ZQlyNCwgcjMJCUMgLi4uIHJldHVybiB2YWx1ZSByZWdpc3RlcgorCWJscgorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTMyL2FkZG11bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGUzMi9hZGRtdWxfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRjMzk1MQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGUzMi9hZGRtdWxfMS5hc20KQEAgLTAsMCArMSw3OSBAQAorZG5sICBQb3dlclBDLTY0IG1wbl9hZGRtdWxfMSAtLSBNdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYSBsaW1iIGFuZCBhZGQKK2RubCAgdGhlIHJlc3VsdCB0byBhIHNlY29uZCBsaW1iIHZlY3Rvci4KKworZG5sICBDb3B5cmlnaHQgMTk5OS0yMDAxLCAyMDAzLCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJCWN5Y2xlcy9saW1iCitDIFBPV0VSMy9QUEM2MzA6ICAgICA/CitDIFBPV0VSNC9QUEM5NzA6ICAgICAxMi41CisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyBycAlyMworQyB1cAlyNAorQyBuCXI1CitDIHYJcjYscjcgIG9yICByNyxyOAorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2FkZG11bF8xKQorCitpZmRlZihgQlJPS0VOX0xPTkdMT05HX1BBUkFNJywKK2AJcmxkaW1pCXI4LCByNywgMzIsMAlDIGFzc2VtYmxlIHZsaW1iIGZyb20gc2VwYXJhdGUgMzItYml0IGFyZ3VtZW50cworCW1yCXI2LCByOAorJyxgCisJcmxkaW1pCXI3LCByNiwgMzIsMAlDIGFzc2VtYmxlIHZsaW1iIGZyb20gc2VwYXJhdGUgMzItYml0IGFyZ3VtZW50cworCW1yCXI2LCByNworJykKKwlsaQlyNywgMAkJQyBjeV9saW1iID0gMAorCW10Y3RyCXI1CisJYWRkaWMJcjAsIHIwLCAwCisJYWRkaQlyMywgcjMsIC04CisJYWRkaQlyNCwgcjQsIC04CisKK0wob29wKToJbGR1CXIwLCA4KHI0KQorCW11bGxkCXI5LCByMCwgcjYKKwlhZGRlCXIxMiwgcjksIHI3CUMgYWRkIG9sZCBoaWdoIGxpbWIgYW5kIG5ldyBsb3cgbGltYgorCXNyZGkJcjUsIHI5LCAzMgorCXNyZGkJcjExLCByNywgMzIKKwlhZGRlCXI1LCByNSwgcjExCUMgYWRkIGhpZ2ggbGltYiBwYXJ0cywgc2V0IGN5CisJbXVsaGR1CXI3LCByMCwgcjYKKwlhZGR6ZQlyNywgcjcKKwlsZAlyMTAsIDgocjMpCisJYWRkYwlyOSwgcjEyLCByMTAKKwlzcmRpCXI1LCByMTIsIDMyCisJc3JkaQlyMTEsIHIxMCwgMzIKKwlhZGRlCXI1LCByNSwgcjExCUMgYWRkIGhpZ2ggbGltYiBwYXJ0cywgc2V0IGN5CisJc3RkdQlyOSwgOChyMykKKwliZG56CUwob29wKQorCisJYWRkemUJcjQsIHI3CisJc3JkaQlyMywgcjQsIDMyCisJYmxyCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlMzIvbXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTMyL211bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTE3ZTk4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTMyL211bF8xLmFzbQpAQCAtMCwwICsxLDczIEBACitkbmwgIFBvd2VyUEMtNjQgbXBuX211bF8xIC0tIE11bHRpcGx5IGEgbGltYiB2ZWN0b3Igd2l0aCBhIGxpbWIgYW5kIGFkZAorZG5sICB0aGUgcmVzdWx0IHRvIGEgc2Vjb25kIGxpbWIgdmVjdG9yLgorCitkbmwgIENvcHlyaWdodCAxOTk5LTIwMDEsIDIwMDMsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkJY3ljbGVzL2xpbWIKK0MgUE9XRVIzL1BQQzYzMDogICAgID8KK0MgUE9XRVI0L1BQQzk3MDogICAgIDEwCisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyBycAlyMworQyB1cAlyNAorQyBuCXI1CitDIHYJcjYscjcgIG9yICByNyxyOAorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX211bF8xKQorCitpZmRlZihgQlJPS0VOX0xPTkdMT05HX1BBUkFNJywKK2AJcmxkaW1pCXI4LCByNywgMzIsMAlDIGFzc2VtYmxlIHZsaW1iIGZyb20gc2VwYXJhdGUgMzItYml0IGFyZ3VtZW50cworCW1yCXI2LCByOAorJyxgCisJcmxkaW1pCXI3LCByNiwgMzIsMAlDIGFzc2VtYmxlIHZsaW1iIGZyb20gc2VwYXJhdGUgMzItYml0IGFyZ3VtZW50cworCW1yCXI2LCByNworJykKKwlsaQlyNywgMAkJQyBjeV9saW1iID0gMAorCW10Y3RyCXI1CisJYWRkaWMJcjAsIHIwLCAwCisJYWRkaQlyMywgcjMsIC04CisJYWRkaQlyNCwgcjQsIC04CisKK0wob29wKToJbGR1CXIwLCA4KHI0KQorCW11bGxkCXI5LCByMCwgcjYKKwlhZGRlCXIxMiwgcjksIHI3CUMgYWRkIG9sZCBoaWdoIGxpbWIgYW5kIG5ldyBsb3cgbGltYgorCXNyZGkJcjUsIHI5LCAzMgorCXNyZGkJcjExLCByNywgMzIKKwlhZGRlCXI1LCByNSwgcjExCUMgYWRkIGhpZ2ggbGltYiBwYXJ0cywgc2V0IGN5CisJbXVsaGR1CXI3LCByMCwgcjYKKwlzdGR1CXIxMiwgOChyMykKKwliZG56CUwob29wKQorCisJYWRkemUJcjQsIHI3CisJc3JkaQlyMywgcjQsIDMyCisJYmxyCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlMzIvcDQvZ21wLW1wYXJhbS5oIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTMyL3A0L2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTgwNWEwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTMyL3A0L2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDE4MiBAQAorLyogUG93ZXJQQy02NCBnbXAtbXBhcmFtLmggLS0gQ29tcGlsZXIvbWFjaGluZSBwYXJhbWV0ZXIgaGVhZGVyIGZpbGUuCisKK0NvcHlyaWdodCAyMDA4LCAyMDA5LCAyMDExLCAyMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisvKiAxODAwIE1IeiBQUEM5NzAgKi8KKy8qIEZGVCB0dW5pbmcgbGltaXQgPSAwLjUgTSAqLworLyogR2VuZXJhdGVkIGJ5IHR1bmV1cC5jLCAyMDE3LTAxLTAxLCBnY2MgNC4wICovCisKKyNkZWZpbmUgRElWUkVNXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBESVZSRU1fMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PRF8xXzFQX01FVEhPRCAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNworI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNQorI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAgNgorI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICAgICA0NgorI2RlZmluZSBQUkVJTlZfTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAxNQorI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBESVZfUVJfMU5fUEkxX01FVEhPRCAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBESVZfUVJfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgMgorI2RlZmluZSBESVZfUVJfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgMgorI2RlZmluZSBESVZfUVJfMl9QSTJfVEhSRVNIT0xEICAgICAgICAgICAgICAxNQorI2RlZmluZSBESVZFWEFDVF8xX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIEJNT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgICAgICAgIDg4CisKKyNkZWZpbmUgRElWXzFfVlNfTVVMXzFfUEVSQ0VOVCAgICAgICAgICAgICAyNjkKKworI2RlZmluZSBNVUxfVE9PTTIyX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBNVUxfVE9PTTMzX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA2MAorI2RlZmluZSBNVUxfVE9PTTQ0X1RIUkVTSE9MRCAgICAgICAgICAgICAgICA4OAorI2RlZmluZSBNVUxfVE9PTTZIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDEyNAorI2RlZmluZSBNVUxfVE9PTThIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE4NworCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTQzX1RIUkVTSE9MRCAgICAgIDYxCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgIDkxCisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgIDYxCisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTYzX1RIUkVTSE9MRCAgICAgIDYwCisjZGVmaW5lIE1VTF9UT09NNDNfVE9fVE9PTTU0X1RIUkVTSE9MRCAgICAgIDc0CisKKyNkZWZpbmUgU1FSX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgOTAKKyNkZWZpbmUgU1FSX1RPT000X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNDMKKyNkZWZpbmUgU1FSX1RPT002X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxODEKKyNkZWZpbmUgU1FSX1RPT004X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyNzIKKworI2RlZmluZSBNVUxNSURfVE9PTTQyX1RIUkVTSE9MRCAgICAgICAgICAgICAzNAorCisjZGVmaW5lIE1VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIFNRUk1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE1CisKKyNkZWZpbmUgTVVMX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICAyNTIgIC8qIGsgPSA1ICovCisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICAyNTIsIDV9LCB7ICAgICAxMSwgNn0sIHsgICAgICA2LCA1fSwgeyAgICAgMTMsIDZ9LCBcCisgICAgeyAgICAgIDcsIDV9LCB7ICAgICAxNSwgNn0sIHsgICAgIDEzLCA1fSwgeyAgICAgMjcsIDZ9LCBcCisgICAgeyAgICAgMTUsIDd9LCB7ICAgICAgOCwgNn0sIHsgICAgIDE3LCA3fSwgeyAgICAgIDksIDZ9LCBcCisgICAgeyAgICAgMTksIDd9LCB7ICAgICAxNywgOH0sIHsgICAgICA5LCA3fSwgeyAgICAgMjAsIDh9LCBcCisgICAgeyAgICAgMTEsIDd9LCB7ICAgICAyMywgOH0sIHsgICAgIDEzLCA5fSwgeyAgICAgIDcsIDh9LCBcCisgICAgeyAgICAgMjEsIDl9LCB7ICAgICAxMSwgOH0sIHsgICAgIDI3LDEwfSwgeyAgICAgIDcsIDl9LCBcCisgICAgeyAgICAgMTUsIDh9LCB7ICAgICAzMywgOX0sIHsgICAgIDE5LCA4fSwgeyAgICAgMzksIDl9LCBcCisgICAgeyAgICAgMjMsIDh9LCB7ICAgICA0NywgOX0sIHsgICAgIDI3LDEwfSwgeyAgICAgMTUsIDl9LCBcCisgICAgeyAgICAgMzksMTB9LCB7ICAgICAyMywgOX0sIHsgICAgIDQ3LDExfSwgeyAgICAgMTUsMTB9LCBcCisgICAgeyAgICAgMzEsIDl9LCB7ICAgICA2NywxMH0sIHsgICAgIDM5LCA5fSwgeyAgICAgODMsMTB9LCBcCisgICAgeyAgICAgNDcsIDl9LCB7ICAgICA5NSwgOH0sIHsgICAgMTkxLDEwfSwgeyAgICAgNTUsMTF9LCBcCisgICAgeyAgICAgMzEsMTB9LCB7ICAgICA2MywgOX0sIHsgICAgMTI3LCA4fSwgeyAgICAyNTUsMTB9LCBcCisgICAgeyAgICAgNzEsIDl9LCB7ICAgIDE0MywgOH0sIHsgICAgMjg3LDEwfSwgeyAgICAgNzksIDl9LCBcCisgICAgeyAgICAxNTksIDh9LCB7ICAgIDMxOSwxMX0sIHsgICAgIDQ3LDEwfSwgeyAgICAgOTUsIDl9LCBcCisgICAgeyAgICAxOTEsIDh9LCB7ICAgIDM4MywxMH0sIHsgICAgMTAzLDEyfSwgeyAgICAgMzEsMTF9LCBcCisgICAgeyAgICAgNjMsMTB9LCB7ICAgIDEyNywgOX0sIHsgICAgMjU1LCA4fSwgeyAgICA1MTEsMTB9LCBcCisgICAgeyAgICAxNDMsIDl9LCB7ICAgIDI4NywxMX0sIHsgICAgIDc5LDEwfSwgeyAgICAxNTksIDl9LCBcCisgICAgeyAgICAzMTksIDh9LCB7ICAgIDYzOSwxMH0sIHsgICAgMTc1LCA5fSwgeyAgICAzNTEsIDh9LCBcCisgICAgeyAgICA3MDMsMTF9LCB7ICAgICA5NSwxMH0sIHsgICAgMTkxLCA5fSwgeyAgICAzODMsIDh9LCBcCisgICAgeyAgICA3NjcsMTB9LCB7ICAgIDIwNywgOX0sIHsgICAgNDE1LDEwfSwgeyAgICAyMjMsIDl9LCBcCisgICAgeyAgICA0NDcsMTJ9LCB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgeyAgICAyNTUsIDl9LCBcCisgICAgeyAgICA1MTEsMTF9LCB7ICAgIDE0MywxMH0sIHsgICAgMjg3LCA5fSwgeyAgICA1NzUsMTF9LCBcCisgICAgeyAgICAxNTksMTB9LCB7ICAgIDMxOSwgOX0sIHsgICAgNjM5LDExfSwgeyAgICAxNzUsMTB9LCBcCisgICAgeyAgICAzNTEsIDl9LCB7ICAgIDcwMywxMn0sIHsgICAgIDk1LDExfSwgeyAgICAxOTEsMTB9LCBcCisgICAgeyAgICAzODMsIDl9LCB7ICAgIDc2NywxMX0sIHsgICAgMjA3LDEwfSwgeyAgICA0MTUsMTF9LCBcCisgICAgeyAgICAyMjMsMTB9LCB7ICAgIDQ0NywxM30sIHsgICA4MTkyLDE0fSwgeyAgMTYzODQsMTV9LCBcCisgICAgeyAgMzI3NjgsMTZ9IH0KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTNfU0laRSAxMDUKKyNkZWZpbmUgTVVMX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDUyNDgKKworI2RlZmluZSBTUVJfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDIzNiAgLyogayA9IDUgKi8KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDIzNiwgNX0sIHsgICAgIDEzLCA2fSwgeyAgICAgMTUsIDd9LCB7ICAgICAgOCwgNn0sIFwKKyAgICB7ICAgICAxNywgN30sIHsgICAgICA5LCA2fSwgeyAgICAgMTksIDd9LCB7ICAgICAxNywgOH0sIFwKKyAgICB7ICAgICAgOSwgN30sIHsgICAgIDIwLCA4fSwgeyAgICAgMTEsIDd9LCB7ICAgICAyNCwgOH0sIFwKKyAgICB7ICAgICAxMywgOX0sIHsgICAgICA3LCA4fSwgeyAgICAgMTksIDl9LCB7ICAgICAxMSwgOH0sIFwKKyAgICB7ICAgICAyNSwxMH0sIHsgICAgICA3LCA5fSwgeyAgICAgMTUsIDh9LCB7ICAgICAzMywgOX0sIFwKKyAgICB7ICAgICAxOSwgOH0sIHsgICAgIDM5LCA5fSwgeyAgICAgMjMsIDh9LCB7ICAgICA0NywgOX0sIFwKKyAgICB7ICAgICAyNywxMH0sIHsgICAgIDE1LCA5fSwgeyAgICAgMzksMTB9LCB7ICAgICAyMywgOX0sIFwKKyAgICB7ICAgICA0NywxMX0sIHsgICAgIDE1LDEwfSwgeyAgICAgMzEsIDl9LCB7ICAgICA2NywxMH0sIFwKKyAgICB7ICAgICAzOSwgOX0sIHsgICAgIDc5LCA4fSwgeyAgICAxNTksMTB9LCB7ICAgICA0NywgOX0sIFwKKyAgICB7ICAgICA5NSwgOH0sIHsgICAgMTkxLDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA2MywgOX0sIFwKKyAgICB7ICAgIDEyNywgOH0sIHsgICAgMjU1LDEwfSwgeyAgICAgNzEsIDl9LCB7ICAgIDE0MywgOH0sIFwKKyAgICB7ICAgIDI4NywxMH0sIHsgICAgIDc5LCA5fSwgeyAgICAxNTksIDh9LCB7ICAgIDMxOSwxMX0sIFwKKyAgICB7ICAgICA0NywxMH0sIHsgICAgIDk1LCA5fSwgeyAgICAxOTEsIDh9LCB7ICAgIDM4MywxMn0sIFwKKyAgICB7ICAgICAzMSwxMX0sIHsgICAgIDYzLDEwfSwgeyAgICAxMjcsIDl9LCB7ICAgIDI1NSwgOH0sIFwKKyAgICB7ICAgIDUxMSwxMH0sIHsgICAgMTQzLCA5fSwgeyAgICAyODcsIDh9LCB7ICAgIDU3NSwxMX0sIFwKKyAgICB7ICAgICA3OSwxMH0sIHsgICAgMTU5LCA5fSwgeyAgICAzMTksIDh9LCB7ICAgIDYzOSwxMH0sIFwKKyAgICB7ICAgIDE3NSwgOX0sIHsgICAgMzUxLCA4fSwgeyAgICA3MDMsMTF9LCB7ICAgICA5NSwxMH0sIFwKKyAgICB7ICAgIDE5MSwgOX0sIHsgICAgMzgzLCA4fSwgeyAgICA3NjcsMTB9LCB7ICAgIDIwNywgOX0sIFwKKyAgICB7ICAgIDQxNSwxMH0sIHsgICAgMjIzLDEyfSwgeyAgICAgNjMsMTF9LCB7ICAgIDEyNywxMH0sIFwKKyAgICB7ICAgIDI1NSwgOX0sIHsgICAgNTExLDExfSwgeyAgICAxNDMsMTB9LCB7ICAgIDI4NywgOX0sIFwKKyAgICB7ICAgIDU3NSwxMX0sIHsgICAgMTU5LDEwfSwgeyAgICAzMTksIDl9LCB7ICAgIDYzOSwxMX0sIFwKKyAgICB7ICAgIDE3NSwxMH0sIHsgICAgMzUxLCA5fSwgeyAgICA3MDMsMTF9LCB7ICAgIDE5MSwxMH0sIFwKKyAgICB7ICAgIDM4MywgOX0sIHsgICAgNzY3LDExfSwgeyAgICAyMDcsMTB9LCB7ICAgIDQxNSwxMX0sIFwKKyAgICB7ICAgIDIyMywxMH0sIHsgICAgNDQ3LDEzfSwgeyAgIDgxOTIsMTR9LCB7ICAxNjM4NCwxNX0sIFwKKyAgICB7ICAzMjc2OCwxNn0gfQorI2RlZmluZSBTUVJfRkZUX1RBQkxFM19TSVpFIDk3CisjZGVmaW5lIFNRUl9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAzMjAwCisKKyNkZWZpbmUgTVVMTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNVUxMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICA1NgorI2RlZmluZSBNVUxMT19NVUxfTl9USFJFU0hPTEQgICAgICAgICAgICAgODY0OAorI2RlZmluZSBTUVJMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgMgorI2RlZmluZSBTUVJMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgIDEwNgorI2RlZmluZSBTUVJMT19TUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgNjI5MworCisjZGVmaW5lIERDX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIERDX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAgMTAyCisjZGVmaW5lIERDX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDUxCisjZGVmaW5lIERDX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTI0CisKKyNkZWZpbmUgSU5WX01VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgMzQKKyNkZWZpbmUgSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgICAxMjMKKyNkZWZpbmUgSU5WX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAxMDkKKworI2RlZmluZSBCSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgIDIwNgorI2RlZmluZSBSRURDXzFfVE9fUkVEQ19OX1RIUkVTSE9MRCAgICAgICAgICA1MQorCisjZGVmaW5lIE1VX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgODA3CisjZGVmaW5lIE1VX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAgODA3CisjZGVmaW5lIE1VUElfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDUzCisjZGVmaW5lIE1VX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgNzQ4CisjZGVmaW5lIE1VX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAgODcyCisKKyNkZWZpbmUgUE9XTV9TRUNfVEFCTEUgIDIsMjMsNjYsNDQwLDE1NTUKKworI2RlZmluZSBHRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNworI2RlZmluZSBHRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgICAxNworI2RlZmluZSBTRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTAzNQorI2RlZmluZSBTRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgMjE3MAorCisjZGVmaW5lIEZBQ19EU0NfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgNTQyCisjZGVmaW5lIEZBQ19PRERfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDI0CisKKyNkZWZpbmUgTUFUUklYMjJfU1RSQVNTRU5fVEhSRVNIT0xEICAgICAgICAgMTAKKyNkZWZpbmUgSEdDRF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgICAxMDgKKyNkZWZpbmUgSEdDRF9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMTYKKyNkZWZpbmUgSEdDRF9SRURVQ0VfVEhSRVNIT0xEICAgICAgICAgICAgIDE0MzcKKyNkZWZpbmUgR0NEX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAyNjgKKyNkZWZpbmUgR0NERVhUX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyNDEKKyNkZWZpbmUgSkFDT0JJX0JBU0VfTUVUSE9EICAgICAgICAgICAgICAgICAgIDQKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGUzMi9zcXJfZGlhZ29uYWwuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTMyL3Nxcl9kaWFnb25hbC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY1ZjRiMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGUzMi9zcXJfZGlhZ29uYWwuYXNtCkBAIC0wLDAgKzEsMTE3IEBACitkbmwgIFBvd2VyUEMtNjQgbXBuX3Nxcl9kaWFnb25hbC4KKworZG5sICBDb3B5cmlnaHQgMjAwMS0yMDAzLCAyMDA1LCAyMDA2LCAyMDAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCQkgICAgY3ljbGVzL2xpbWIKK0MgUE9XRVIzL1BQQzYzMAkJMTgKK0MgUE9XRVI0L1BQQzk3MAkJID8KK0MgUE9XRVI1CQkgNy4yNQorQyBQT1dFUjYJCSA5LjUKKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywgIHIzKQorZGVmaW5lKGB1cCcsICByNCkKK2RlZmluZShgbicsICAgcjUpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fc3FyX2RpYWdvbmFsKQoraWZkZWYoYEhBVkVfQUJJX21vZGUzMicsCitgCXJsZGljbAluLCBuLCAwLCAzMicpCQlDIHplcm8gZXh0ZW5kIG4KKworCXJsZGljbC4JcjAsIG4sIDAsNjIJCUMgcjAgPSBuICYgMywgc2V0IGNyMAorCWFkZGkJbiwgbiwgMwkJCUMgY29tcHV0ZSBjb3VudC4uLgorCWNtcGRpCWNyNiwgcjAsIDIKKwlzcmRpCW4sIG4sIDIJCQlDIC4uLmZvciBjdHIKKwltdGN0cgluCQkJQyBjb3B5IGNvdW50IGludG8gY3RyCisJYmVxCWNyMCwgTChiMDApCisJYmx0CWNyNiwgTChiMDEpCisJYmVxCWNyNiwgTChiMTApCisKK0woYjExKToJbGQJcjAsIDAodXApCisJbGQJcjEwLCA4KHVwKQorCWxkCXIxMiwgMTYodXApCisJYWRkaQlycCwgcnAsIC0xNgorCW11bGxkCXI3LCByMCwgcjAKKwltdWxoZHUJcjgsIHIwLCByMAorCW11bGxkCXI5LCByMTAsIHIxMAorCW11bGhkdQlyMTAsIHIxMCwgcjEwCisJbXVsbGQJcjExLCByMTIsIHIxMgorCW11bGhkdQlyMTIsIHIxMiwgcjEyCisJYWRkaQl1cCwgdXAsIDI0CisJYglMKDExKQorCisJQUxJR04oMTYpCitMKGIwMSk6CWxkCXIwLCAwKHVwKQorCWFkZGkJcnAsIHJwLCAtNDgKKwlhZGRpCXVwLCB1cCwgOAorCW11bGxkCXIxMSwgcjAsIHIwCisJbXVsaGR1CXIxMiwgcjAsIHIwCisJYglMKDAxKQorCisJQUxJR04oMTYpCitMKGIxMCk6CWxkCXIwLCAwKHVwKQorCWxkCXIxMiwgOCh1cCkKKwlhZGRpCXJwLCBycCwgLTMyCisJYWRkaQl1cCwgdXAsIDE2CisJbXVsbGQJcjksIHIwLCByMAorCW11bGhkdQlyMTAsIHIwLCByMAorCW11bGxkCXIxMSwgcjEyLCByMTIKKwltdWxoZHUJcjEyLCByMTIsIHIxMgorCWIJTCgxMCkKKworCUFMSUdOKDMyKQorTChiMDApOgorTCh0b3ApOglsZAlyMCwgMCh1cCkKKwlsZAlyOCwgOCh1cCkKKwlsZAlyMTAsIDE2KHVwKQorCWxkCXIxMiwgMjQodXApCisJbXVsbGQJcjUsIHIwLCByMAorCW11bGhkdQlyNiwgcjAsIHIwCisJbXVsbGQJcjcsIHI4LCByOAorCW11bGhkdQlyOCwgcjgsIHI4CisJbXVsbGQJcjksIHIxMCwgcjEwCisJbXVsaGR1CXIxMCwgcjEwLCByMTAKKwltdWxsZAlyMTEsIHIxMiwgcjEyCisJbXVsaGR1CXIxMiwgcjEyLCByMTIKKwlhZGRpCXVwLCB1cCwgMzIKKwlzdGQJcjUsIDAocnApCisJc3RkCXI2LCA4KHJwKQorTCgxMSk6CXN0ZAlyNywgMTYocnApCisJc3RkCXI4LCAyNChycCkKK0woMTApOglzdGQJcjksIDMyKHJwKQorCXN0ZAlyMTAsIDQwKHJwKQorTCgwMSk6CXN0ZAlyMTEsIDQ4KHJwKQorCXN0ZAlyMTIsIDU2KHJwKQorCWFkZGkJcnAsIHJwLCA2NAorCWJkbnoJTCh0b3ApCisKKwlibHIKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGUzMi9zdWJfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlMzIvc3ViX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZGMxZDQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlMzIvc3ViX24uYXNtCkBAIC0wLDAgKzEsODggQEAKK2RubCAgUG93ZXJQQy02NC9tb2RlMzIgbXBuX3N1Yl9uIC0tIFN1YnRyYWN0IHR3byBsaW1iIHZlY3RvcnMgb2YgdGhlIHNhbWUKK2RubCAgbGVuZ3RoIGFuZCBzdG9yZSBkaWZmZXJlbmNlIGluIGEgdGhpcmQgbGltYiB2ZWN0b3IuCisKK2RubCAgQ29weXJpZ2h0IDE5OTktMjAwMSwgMjAwMywgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCQljeWNsZXMvbGltYgorQyBQT1dFUjMvUFBDNjMwOiAgICAgPworQyBQT1dFUjQvUFBDOTcwOiAgICAgNC4yNQorCitDIElOUFVUIFBBUkFNRVRFUlMKK0MgcnAJcjMKK0MgdXAJcjQKK0MgdnAJcjUKK0MgbglyNgorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX3N1Yl9uKQorCW10Y3RyCXI2CQlDIGNvcHkgc2l6ZSBpbnRvIENUUgorCWFkZGljCXIwLCByNiwgLTEJQyBzZXQgY3kKKwlsZAlyOCwgMChyNCkJQyBsb2FkIGxlYXN0IHNpZ25pZmljYW50IHMxIGxpbWIKKwlsZAlyMCwgMChyNSkJQyBsb2FkIGxlYXN0IHNpZ25pZmljYW50IHMyIGxpbWIKKwlhZGRpCXIzLCByMywgLTgJQyBvZmZzZXQgcmVzX3B0ciwgaXQncyB1cGRhdGVkIGJlZm9yZSBpdCdzIHVzZWQKKwliZHoJTChlbmQpCQlDIElmIGRvbmUsIHNraXAgbG9vcAorCitMKG9vcCk6CWxkCXI5LCA4KHI0KQlDIGxvYWQgczEgbGltYgorCWxkCXIxMCwgOChyNSkJQyBsb2FkIHMyIGxpbWIKKwlzdWJmZQlyNywgcjAsIHI4CUMgc3VidHJhY3QgbGltYnMgd2l0aCBjeSwgc2V0IGN5CisJc3JkaQlyNiwgcjAsIDMyCisJc3JkaQlyMTEsIHI4LCAzMgorCXN1YmZlCXI2LCByNiwgcjExCisJc3RkCXI3LCA4KHIzKQlDIHN0b3JlIHJlc3VsdCBsaW1iCisJYmR6CUwoZXhpdCkJCUMgZGVjcmVtZW50IENUUiBhbmQgZXhpdCBpZiBkb25lCisJbGR1CXI4LCAxNihyNCkJQyBsb2FkIHMxIGxpbWIgYW5kIHVwZGF0ZSBzMV9wdHIKKwlsZHUJcjAsIDE2KHI1KQlDIGxvYWQgczIgbGltYiBhbmQgdXBkYXRlIHMyX3B0cgorCXN1YmZlCXI3LCByMTAsIHI5CUMgc3VidHJhY3QgbGltYnMgd2l0aCBjeSwgc2V0IGN5CisJc3JkaQlyNiwgcjEwLCAzMgorCXNyZGkJcjExLCByOSwgMzIKKwlzdWJmZQlyNiwgcjYsIHIxMQorCXN0ZHUJcjcsIDE2KHIzKQlDIHN0b3JlIHJlc3VsdCBsaW1iIGFuZCB1cGRhdGUgcmVzX3B0cgorCWJkbnoJTChvb3ApCQlDIGRlY3JlbWVudCBDVFIgYW5kIGxvb3AgYmFjaworCitMKGVuZCk6CXN1YmZlCXI3LCByMCwgcjgKKwlzcmRpCXI2LCByMCwgMzIKKwlzcmRpCXIxMSwgcjgsIDMyCisJc3ViZmUJcjYsIHI2LCByMTEKKwlzdGQJcjcsIDgocjMpCUMgc3RvcmUgdWx0aW1hdGUgcmVzdWx0IGxpbWIKKwlzdWJmZQlyMywgcjAsIHIwCUMgbG9hZCAhY3kgaW50byAuLi4KKwlzdWJmaWMJcjQsIHIzLCAwCUMgLi4uIHJldHVybiB2YWx1ZSByZWdpc3RlcgorCWxpCXIzLCAwCQlDIHplcm8gZXh0ZW5kIHJldHVybiB2YWx1ZQorCWJscgorTChleGl0KToJc3ViZmUJcjcsIHIxMCwgcjkKKwlzcmRpCXI2LCByMTAsIDMyCisJc3JkaQlyMTEsIHI5LCAzMgorCXN1YmZlCXI2LCByNiwgcjExCisJc3RkCXI3LCAxNihyMykKKwlzdWJmZQlyMywgcjAsIHIwCUMgbG9hZCAhY3kgaW50byAuLi4KKwlzdWJmaWMJcjQsIHIzLCAwCUMgLi4uIHJldHVybiB2YWx1ZSByZWdpc3RlcgorCWxpCXIzLCAwCQlDIHplcm8gZXh0ZW5kIHJldHVybiB2YWx1ZQorCWJscgorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTMyL3N1Ym11bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGUzMi9zdWJtdWxfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk2ZWRhMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGUzMi9zdWJtdWxfMS5hc20KQEAgLTAsMCArMSw4MSBAQAorZG5sICBQb3dlclBDLTY0IG1wbl9zdWJtdWxfMSAtLSBNdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYSBsaW1iIGFuZCBzdWJ0cmFjdAorZG5sICB0aGUgcmVzdWx0IGZyb20gYSBzZWNvbmQgbGltYiB2ZWN0b3IuCisKK2RubCAgQ29weXJpZ2h0IDE5OTktMjAwMSwgMjAwMywgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCQljeWNsZXMvbGltYgorQyBQT1dFUjMvUFBDNjMwOiAgICAgPworQyBQT1dFUjQvUFBDOTcwOiAgICAgMTYKKworQyBJTlBVVCBQQVJBTUVURVJTCitDIHJwCXIzCitDIHVwCXI0CitDIG4JcjUKK0MgdglyNixyNyAgb3IgIHI3LHI4CisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fc3VibXVsXzEpCisKK2lmZGVmKGBCUk9LRU5fTE9OR0xPTkdfUEFSQU0nLAorYAlybGRpbWkJcjgsIHI3LCAzMiwwCUMgYXNzZW1ibGUgdmxpbWIgZnJvbSBzZXBhcmF0ZSAzMi1iaXQgYXJndW1lbnRzCisJbXIJcjYsIHI4CisnLGAKKwlybGRpbWkJcjcsIHI2LCAzMiwwCUMgYXNzZW1ibGUgdmxpbWIgZnJvbSBzZXBhcmF0ZSAzMi1iaXQgYXJndW1lbnRzCisJbXIJcjYsIHI3CisnKQorCWxpCXI3LCAwCQlDIGN5X2xpbWIgPSAwCisJbXRjdHIJcjUKKwlhZGRpYwlyMCwgcjAsIDAKKwlhZGRpCXIzLCByMywgLTgKKwlhZGRpCXI0LCByNCwgLTgKKworTChvb3ApOglsZHUJcjAsIDgocjQpCisJbXVsbGQJcjksIHIwLCByNgorCWFkZGUJcjEyLCByOSwgcjcJQyBhZGQgb2xkIGhpZ2ggbGltYiBhbmQgbmV3IGxvdyBsaW1iCisJc3JkaQlyNSwgcjksIDMyCisJc3JkaQlyMTEsIHI3LCAzMgorCWFkZGUJcjUsIHI1LCByMTEJQyBhZGQgaGlnaCBsaW1iIHBhcnRzLCBzZXQgY3kKKwltdWxoZHUJcjcsIHIwLCByNgorCWFkZHplCXI3LCByNworCWxkCXIxMCwgOChyMykKKwlzdWJmYwlyOSwgcjEyLCByMTAKKwlzcmRpCXI1LCByMTIsIDMyCisJc3JkaQlyMTEsIHIxMCwgMzIKKwlzdWJmZQlyNSwgcjUsIHIxMQlDIHN1YnRyYWN0IGhpZ2ggbGltYiBwYXJ0cywgc2V0IGN5CisJc3RkdQlyOSwgOChyMykKKwlzdWJmZQlyMTEsIHIxMSwgcjExCUMgaW52ZXJ0IC4uLgorCWFkZGljCXIxMSwgcjExLCAxCUMgLi4uIGNhcnJ5CisJYmRueglMKG9vcCkKKworCWFkZHplCXI0LCByNworCXNyZGkJcjMsIHI0LCAzMgorCWJscgorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L2FvcnNfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvYW9yc19uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTg0NzRmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L2FvcnNfbi5hc20KQEAgLTAsMCArMSwxODkgQEAKK2RubCAgUG93ZXJQQy02NCBtcG5fYWRkX24vbXBuX3N1Yl9uIC0tIG1wbiBhZGRpdGlvbiBhbmQgc3VidHJhY3Rpb24uCisKK2RubCAgQ29weXJpZ2h0IDE5OTktMjAwMSwgMjAwMy0yMDA1LCAyMDA3LCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICAgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgUE9XRVIzL1BQQzYzMCAgICAgICAgICAxLjUKK0MgUE9XRVI0L1BQQzk3MCAgICAgICAgICAyCitDIFBPV0VSNSAgICAgICAgICAgICAgICAgMgorQyBQT1dFUjYgICAgICAgICAgICAgICAgIDIuNjMKK0MgUE9XRVI3ICAgICAgICAgICAgICAgMi4yNS0yLjg3CisKK0MgVGhpcyBjb2RlIGlzIGEgbGl0dGxlIGJpdCBzbG93ZXIgZm9yIFBPV0VSMy9QUEM2MzAgdGhhbiB0aGUgc2ltcGxlIGNvZGUgdXNlZAorQyBwcmV2aW91c2x5LCBidXQgaXQgaXMgbXVjaCBmYXN0ZXIgZm9yIFBPV0VSNC9QUEM5NzAuICBUaGUgcmVhc29uIGZvciB0aGUKK0MgUE9XRVIzL1BQQzYzMCBzbG93ZG93biBjYW4gYmUgYXR0cmlidXRlZCB0byB0aGUgc2F2aW5nIGFuZCByZXN0b3Jpbmcgb2YgNAorQyByZWdpc3RlcnMuCisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyBycAlyMworQyB1cAlyNAorQyB2cAlyNQorQyBuCXI2CisKK2lmZGVmKGBPUEVSQVRJT05fYWRkX24nLGAKKyAgZGVmaW5lKEFERFNVQkMsCWFkZGUpCisgIGRlZmluZShBRERTVUIsCWFkZGMpCisgIGRlZmluZShmdW5jLAkJbXBuX2FkZF9uKQorICBkZWZpbmUoZnVuY19uYywJbXBuX2FkZF9uYykKKyAgZGVmaW5lKEdFTlJWQUwsCWBhZGRpCXIzLCByMywgMScpCisgIGRlZmluZShTRVRDQlIsCWBhZGRpYwlyMCwgJDEsIC0xJykKKyAgZGVmaW5lKENMUkNCLAkJYGFkZGljCXIwLCByMCwgMCcpCisnKQoraWZkZWYoYE9QRVJBVElPTl9zdWJfbicsYAorICBkZWZpbmUoQUREU1VCQywJc3ViZmUpCisgIGRlZmluZShBRERTVUIsCXN1YmZjKQorICBkZWZpbmUoZnVuYywJCW1wbl9zdWJfbikKKyAgZGVmaW5lKGZ1bmNfbmMsCW1wbl9zdWJfbmMpCisgIGRlZmluZShHRU5SVkFMLAlgbmVnCXIzLCByMycpCisgIGRlZmluZShTRVRDQlIsCWBzdWJmaWMJcjAsICQxLCAwJykKKyAgZGVmaW5lKENMUkNCLAkJYGFkZGljCXIwLCByMSwgLTEnKQorJykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fYWRkX24gbXBuX2FkZF9uYyBtcG5fc3ViX24gbXBuX3N1Yl9uYykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKGZ1bmNfbmMpCisJU0VUQ0JSKHI3KQorCWIJTChlbnQpCitFUElMT0dVRSgpCisKK1BST0xPR1VFKGZ1bmMpCisJQ0xSQ0IKK0woZW50KToJc3RkCXIzMSwgLTgocjEpCisJc3RkCXIzMCwgLTE2KHIxKQorCXN0ZAlyMjksIC0yNChyMSkKKwlzdGQJcjI4LCAtMzIocjEpCisKKwlybGRpY2wuCXIwLCByNiwgMCw2MglDIHIwID0gbiAmIDMsIHNldCBjcjAKKwljbXBkaQljcjYsIHIwLCAyCisJYWRkaQlyNiwgcjYsIDMJQyBjb21wdXRlIGNvdW50Li4uCisJc3JkaQlyNiwgcjYsIDIJQyAuLi5mb3IgY3RyCisJbXRjdHIJcjYJCUMgY29weSBjb3VudCBpbnRvIGN0cgorCWJlcQljcjAsIEwoYjAwKQorCWJsdAljcjYsIEwoYjAxKQorCWJlcQljcjYsIEwoYjEwKQorCitMKGIxMSk6CWxkCXI4LCAwKHI0KQlDIGxvYWQgczEgbGltYgorCWxkCXI5LCAwKHI1KQlDIGxvYWQgczIgbGltYgorCWxkCXIxMCwgOChyNCkJQyBsb2FkIHMxIGxpbWIKKwlsZAlyMTEsIDgocjUpCUMgbG9hZCBzMiBsaW1iCisJbGQJcjEyLCAxNihyNCkJQyBsb2FkIHMxIGxpbWIKKwlhZGRpCXI0LCByNCwgMjQKKwlsZAlyMCwgMTYocjUpCUMgbG9hZCBzMiBsaW1iCisJYWRkaQlyNSwgcjUsIDI0CisJQUREU1VCQwlyMjksIHI5LCByOAorCUFERFNVQkMJcjMwLCByMTEsIHIxMAorCUFERFNVQkMJcjMxLCByMCwgcjEyCisJc3RkCXIyOSwgMChyMykKKwlzdGQJcjMwLCA4KHIzKQorCXN0ZAlyMzEsIDE2KHIzKQorCWFkZGkJcjMsIHIzLCAyNAorCWJkbnoJTChnbykKKwliCUwocmV0KQorCitMKGIwMSk6CWxkCXIxMiwgMChyNCkJQyBsb2FkIHMxIGxpbWIKKwlhZGRpCXI0LCByNCwgOAorCWxkCXIwLCAwKHI1KQlDIGxvYWQgczIgbGltYgorCWFkZGkJcjUsIHI1LCA4CisJQUREU1VCQwlyMzEsIHIwLCByMTIJQyBhZGQKKwlzdGQJcjMxLCAwKHIzKQorCWFkZGkJcjMsIHIzLCA4CisJYmRueglMKGdvKQorCWIJTChyZXQpCisKK0woYjEwKToJbGQJcjEwLCAwKHI0KQlDIGxvYWQgczEgbGltYgorCWxkCXIxMSwgMChyNSkJQyBsb2FkIHMyIGxpbWIKKwlsZAlyMTIsIDgocjQpCUMgbG9hZCBzMSBsaW1iCisJYWRkaQlyNCwgcjQsIDE2CisJbGQJcjAsIDgocjUpCUMgbG9hZCBzMiBsaW1iCisJYWRkaQlyNSwgcjUsIDE2CisJQUREU1VCQwlyMzAsIHIxMSwgcjEwCUMgYWRkCisJQUREU1VCQwlyMzEsIHIwLCByMTIJQyBhZGQKKwlzdGQJcjMwLCAwKHIzKQorCXN0ZAlyMzEsIDgocjMpCisJYWRkaQlyMywgcjMsIDE2CisJYmRueglMKGdvKQorCWIJTChyZXQpCisKK0woYjAwKToJQyBJTklUQ1kJCUMgY2xlYXIvc2V0IGN5CitMKGdvKToJbGQJcjYsIDAocjQpCUMgbG9hZCBzMSBsaW1iCisJbGQJcjcsIDAocjUpCUMgbG9hZCBzMiBsaW1iCisJbGQJcjgsIDgocjQpCUMgbG9hZCBzMSBsaW1iCisJbGQJcjksIDgocjUpCUMgbG9hZCBzMiBsaW1iCisJbGQJcjEwLCAxNihyNCkJQyBsb2FkIHMxIGxpbWIKKwlsZAlyMTEsIDE2KHI1KQlDIGxvYWQgczIgbGltYgorCWxkCXIxMiwgMjQocjQpCUMgbG9hZCBzMSBsaW1iCisJbGQJcjAsIDI0KHI1KQlDIGxvYWQgczIgbGltYgorCWJkeglMKGVuZCkKKworCWFkZGkJcjQsIHI0LCAzMgorCWFkZGkJcjUsIHI1LCAzMgorCisJQUxJR04oMTYpCitMKHRvcCk6CUFERFNVQkMJcjI4LCByNywgcjYKKwlsZAlyNiwgMChyNCkJQyBsb2FkIHMxIGxpbWIKKwlsZAlyNywgMChyNSkJQyBsb2FkIHMyIGxpbWIKKwlBRERTVUJDCXIyOSwgcjksIHI4CisJbGQJcjgsIDgocjQpCUMgbG9hZCBzMSBsaW1iCisJbGQJcjksIDgocjUpCUMgbG9hZCBzMiBsaW1iCisJQUREU1VCQwlyMzAsIHIxMSwgcjEwCisJbGQJcjEwLCAxNihyNCkJQyBsb2FkIHMxIGxpbWIKKwlsZAlyMTEsIDE2KHI1KQlDIGxvYWQgczIgbGltYgorCUFERFNVQkMJcjMxLCByMCwgcjEyCisJbGQJcjEyLCAyNChyNCkJQyBsb2FkIHMxIGxpbWIKKwlsZAlyMCwgMjQocjUpCUMgbG9hZCBzMiBsaW1iCisJc3RkCXIyOCwgMChyMykKKwlhZGRpCXI0LCByNCwgMzIKKwlzdGQJcjI5LCA4KHIzKQorCWFkZGkJcjUsIHI1LCAzMgorCXN0ZAlyMzAsIDE2KHIzKQorCXN0ZAlyMzEsIDI0KHIzKQorCWFkZGkJcjMsIHIzLCAzMgorCWJkbnoJTCh0b3ApCQlDIGRlY3JlbWVudCBjdHIgYW5kIGxvb3AgYmFjaworCitMKGVuZCk6CUFERFNVQkMJcjI4LCByNywgcjYKKwlBRERTVUJDCXIyOSwgcjksIHI4CisJQUREU1VCQwlyMzAsIHIxMSwgcjEwCisJQUREU1VCQwlyMzEsIHIwLCByMTIKKwlzdGQJcjI4LCAwKHIzKQorCXN0ZAlyMjksIDgocjMpCisJc3RkCXIzMCwgMTYocjMpCisJc3RkCXIzMSwgMjQocjMpCisKK0wocmV0KToJbGQJcjMxLCAtOChyMSkKKwlsZAlyMzAsIC0xNihyMSkKKwlsZAlyMjksIC0yNChyMSkKKwlsZAlyMjgsIC0zMihyMSkKKworCXN1YmZlCXIzLCByMCwgcjAJQyAtY3kKKwlHRU5SVkFMCisJYmxyCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvYW9yc211bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9hb3JzbXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMTJmOWIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvYW9yc211bF8xLmFzbQpAQCAtMCwwICsxLDIyNSBAQAorZG5sICBQb3dlclBDLTY0IG1wbl9hZGRtdWxfMSBhbmQgbXBuX3N1Ym11bF8xLgorCitkbmwgIENvcHlyaWdodCAxOTk5LTIwMDEsIDIwMDMtMjAwNiwgMjAxMC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICAgICAgICAgICAgbXBuX2FkZG11bF8xICAgIG1wbl9zdWJtdWxfMQorQyAgICAgICAgICAgICAgICAgICBjeWNsZXMvbGltYiAgICAgY3ljbGVzL2xpbWIKK0MgUE9XRVIzL1BQQzYzMAkJNi0xOAkJNi0xOAorQyBQT1dFUjQvUFBDOTcwCQkgOAkJIDguMworQyBQT1dFUjUJCSA4CQkgOC4yNQorQyBQT1dFUjYJCTE2LjI1CQkxNi43NQorQyBQT1dFUjcJCSAzLjc3CQkgNC45CisKK0MgVE9ETworQyAgKiBUcnkgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgbmVlZGVkIGxpdmUgcmVnaXN0ZXJzCitDICAqIEFkZCBzdXBwb3J0IGZvciBfMWMgZW50cnkgcG9pbnRzCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsIGByMycpCitkZWZpbmUoYHVwJywgYHI0JykKK2RlZmluZShgbicsICBgcjUnKQorZGVmaW5lKGB2bCcsIGByNicpCisKK2lmZGVmKGBPUEVSQVRJT05fYWRkbXVsXzEnLGAKKyAgZGVmaW5lKEFERFNVQkMsCWFkZGUpCisgIGRlZmluZShBRERTVUIsCWFkZGMpCisgIGRlZmluZShmdW5jLAkJbXBuX2FkZG11bF8xKQorICBkZWZpbmUoZnVuY19uYywJbXBuX2FkZG11bF8xYykJQyBGSVhNRTogbm90IHJlYWxseSBzdXBwb3J0ZWQKKyAgZGVmaW5lKFNNLAkJYCcpCisnKQoraWZkZWYoYE9QRVJBVElPTl9zdWJtdWxfMScsYAorICBkZWZpbmUoQUREU1VCQywJc3ViZmUpCisgIGRlZmluZShBRERTVUIsCXN1YmZjKQorICBkZWZpbmUoZnVuYywJCW1wbl9zdWJtdWxfMSkKKyAgZGVmaW5lKGZ1bmNfbmMsCW1wbl9zdWJtdWxfMWMpCUMgRklYTUU6IG5vdCByZWFsbHkgc3VwcG9ydGVkCisgIGRlZmluZShTTSwJCWAkMScpCisnKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRtdWxfMSBtcG5fc3VibXVsXzEpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShmdW5jKQorCXN0ZAlyMzEsIC04KHIxKQorCXJsZGljbC4JcjAsIG4sIDAsNjIJQyByMCA9IG4gJiAzLCBzZXQgY3IwCisJc3RkCXIzMCwgLTE2KHIxKQorCWNtcGRpCWNyNiwgcjAsIDIKKwlzdGQJcjI5LCAtMjQocjEpCisJYWRkaQluLCBuLCAzCQlDIGNvbXB1dGUgY291bnQuLi4KKwlzdGQJcjI4LCAtMzIocjEpCisJc3JkaQluLCBuLCAyCQlDIC4uLmZvciBjdHIKKwlzdGQJcjI3LCAtNDAocjEpCisJbXRjdHIJbgkJQyBjb3B5IGNvdW50IGludG8gY3RyCisJYmVxCWNyMCwgTChiMDApCisJYmx0CWNyNiwgTChiMDEpCisJYmVxCWNyNiwgTChiMTApCisKK0woYjExKToJbGQJcjksIDAodXApCisJbGQJcjI4LCAwKHJwKQorCW11bGxkCXIwLCByOSwgcjYKKwltdWxoZHUJcjEyLCByOSwgcjYKKwlBRERTVUIJcjAsIHIwLCByMjgKKwlzdGQJcjAsIDAocnApCisJYWRkaQlycCwgcnAsIDgKKwlsZAlyOSwgOCh1cCkKKwlsZAlyMjcsIDE2KHVwKQorCWFkZGkJdXAsIHVwLCAyNAorU00oYAlzdWJmZQlyMTEsIHIxMSwgcjExICcpCisJYglMKGJvdCkKKworCUFMSUdOKDE2KQorTChiMDApOglsZAlyOSwgMCh1cCkKKwlsZAlyMjcsIDgodXApCisJbGQJcjI4LCAwKHJwKQorCWxkCXIyOSwgOChycCkKKwltdWxsZAlyMCwgcjksIHI2CisJbXVsaGR1CXI1LCByOSwgcjYKKwltdWxsZAlyNywgcjI3LCByNgorCW11bGhkdQlyOCwgcjI3LCByNgorCWFkZGMJcjcsIHI3LCByNQorCWFkZHplCXIxMiwgcjgKKwlBRERTVUIJcjAsIHIwLCByMjgKKwlzdGQJcjAsIDAocnApCisJQUREU1VCQwlyNywgcjcsIHIyOQorCXN0ZAlyNywgOChycCkKKwlhZGRpCXJwLCBycCwgMTYKKwlsZAlyOSwgMTYodXApCisJbGQJcjI3LCAyNCh1cCkKKwlhZGRpCXVwLCB1cCwgMzIKK1NNKGAJc3ViZmUJcjExLCByMTEsIHIxMSAnKQorCWIJTChib3QpCisKKwlBTElHTigxNikKK0woYjAxKToJYmRueglMKGd0MSkKKwlsZAlyOSwgMCh1cCkKKwlsZAlyMTEsIDAocnApCisJbXVsbGQJcjAsIHI5LCByNgorCW11bGhkdQlyOCwgcjksIHI2CisJQUREU1VCCXIwLCByMCwgcjExCisJc3RkCXIwLCAwKHJwKQorU00oYAlzdWJmZQlyMTEsIHIxMSwgcjExICcpCitTTShgCWFkZGljCXIxMSwgcjExLCAxICcpCisJYWRkemUJcjMsIHI4CisJYmxyCitMKGd0MSk6CWxkCXI5LCAwKHVwKQorCWxkCXIyNywgOCh1cCkKKwltdWxsZAlyMCwgcjksIHI2CisJbXVsaGR1CXI1LCByOSwgcjYKKwltdWxsZAlyNywgcjI3LCByNgorCW11bGhkdQlyOCwgcjI3LCByNgorCWxkCXI5LCAxNih1cCkKKwlsZAlyMjgsIDAocnApCisJbGQJcjI5LCA4KHJwKQorCWxkCXIzMCwgMTYocnApCisJbXVsbGQJcjExLCByOSwgcjYKKwltdWxoZHUJcjEwLCByOSwgcjYKKwlhZGRjCXI3LCByNywgcjUKKwlhZGRlCXIxMSwgcjExLCByOAorCWFkZHplCXIxMiwgcjEwCisJQUREU1VCCXIwLCByMCwgcjI4CisJc3RkCXIwLCAwKHJwKQorCUFERFNVQkMJcjcsIHI3LCByMjkKKwlzdGQJcjcsIDgocnApCisJQUREU1VCQwlyMTEsIHIxMSwgcjMwCisJc3RkCXIxMSwgMTYocnApCisJYWRkaQlycCwgcnAsIDI0CisJbGQJcjksIDI0KHVwKQorCWxkCXIyNywgMzIodXApCisJYWRkaQl1cCwgdXAsIDQwCitTTShgCXN1YmZlCXIxMSwgcjExLCByMTEgJykKKwliCUwoYm90KQorCitMKGIxMCk6CWFkZGljCXIwLCByMCwgMAorCWxpCXIxMiwgMAkJQyBjeV9saW1iID0gMAorCWxkCXI5LCAwKHVwKQorCWxkCXIyNywgOCh1cCkKKwliZHoJTChlbmQpCisJYWRkaQl1cCwgdXAsIDE2CisKKwlBTElHTigxNikKK0wodG9wKToJbXVsbGQJcjAsIHI5LCByNgorCW11bGhkdQlyNSwgcjksIHI2CUMgOQorCW11bGxkCXI3LCByMjcsIHI2CisJbXVsaGR1CXI4LCByMjcsIHI2CUMgMjcKKwlsZAlyOSwgMCh1cCkKKwlsZAlyMjgsIDAocnApCisJbGQJcjI3LCA4KHVwKQorCWxkCXIyOSwgOChycCkKKwlhZGRlCXIwLCByMCwgcjEyCUMgMCAxMgorCWFkZGUJcjcsIHI3LCByNQlDIDUgNworCW11bGxkCXI1LCByOSwgcjYKKwltdWxoZHUJcjEwLCByOSwgcjYJQyA5CisJbXVsbGQJcjExLCByMjcsIHI2CisJbXVsaGR1CXIxMiwgcjI3LCByNglDIDI3CisJbGQJcjksIDE2KHVwKQorCWxkCXIzMCwgMTYocnApCisJbGQJcjI3LCAyNCh1cCkKKwlsZAlyMzEsIDI0KHJwKQorCWFkZGUJcjUsIHI1LCByOAlDIDggNQorCWFkZGUJcjExLCByMTEsIHIxMAlDIDEwIDExCisJYWRkemUJcjEyLCByMTIJQyAxMgorCUFERFNVQglyMCwgcjAsIHIyOAlDIDAgMjgKKwlzdGQJcjAsIDAocnApCUMgMAorCUFERFNVQkMJcjcsIHI3LCByMjkJQyA3IDI5CisJc3RkCXI3LCA4KHJwKQlDIDcKKwlBRERTVUJDCXI1LCByNSwgcjMwCUMgNSAzMAorCXN0ZAlyNSwgMTYocnApCUMgNQorCUFERFNVQkMJcjExLCByMTEsIHIzMQlDIDExIDMxCisJc3RkCXIxMSwgMjQocnApCUMgMTEKKwlhZGRpCXVwLCB1cCwgMzIKK1NNKGAJc3ViZmUJcjExLCByMTEsIHIxMSAnKQorCWFkZGkJcnAsIHJwLCAzMgorTChib3QpOgorU00oYAlhZGRpYwlyMTEsIHIxMSwgMSAnKQorCWJkbnoJTCh0b3ApCisKK0woZW5kKToJbXVsbGQJcjAsIHI5LCByNgorCW11bGhkdQlyNSwgcjksIHI2CisJbXVsbGQJcjcsIHIyNywgcjYKKwltdWxoZHUJcjgsIHIyNywgcjYKKwlsZAlyMjgsIDAocnApCisJbGQJcjI5LCA4KHJwKQorCWFkZGUJcjAsIHIwLCByMTIKKwlhZGRlCXI3LCByNywgcjUKKwlhZGR6ZQlyOCwgcjgKKwlBRERTVUIJcjAsIHIwLCByMjgKKwlzdGQJcjAsIDAocnApCisJQUREU1VCQwlyNywgcjcsIHIyOQorCXN0ZAlyNywgOChycCkKK1NNKGAJc3ViZmUJcjExLCByMTEsIHIxMSAnKQorU00oYAlhZGRpYwlyMTEsIHIxMSwgMSAnKQorCWFkZHplCXIzLCByOAorCWxkCXIzMSwgLTgocjEpCisJbGQJcjMwLCAtMTYocjEpCisJbGQJcjI5LCAtMjQocjEpCisJbGQJcjI4LCAtMzIocjEpCisJbGQJcjI3LCAtNDAocjEpCisJYmxyCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvYW9yc29ycmxzaDFfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvYW9yc29ycmxzaDFfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM1NDAwYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9hb3Jzb3JybHNoMV9uLmFzbQpAQCAtMCwwICsxLDQzIEBACitkbmwgIFBvd2VyUEMtNjQgbXBuX2FkZGxzaDFfbiwgbXBuX3N1YmxzaDFfbiwgbXBuX3JzYmxzaDFfbi4KKworZG5sICBDb3B5cmlnaHQgMjAwMywgMjAwNSwgMjAwOSwgMjAxMCwgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK2RlZmluZShMU0gsCQkxKQorZGVmaW5lKFJTSCwJCTYzKQorCitpZmRlZihgT1BFUkFUSU9OX2FkZGxzaDFfbicsYGRlZmluZShgRE9fYWRkJyknKQoraWZkZWYoYE9QRVJBVElPTl9zdWJsc2gxX24nLGBkZWZpbmUoYERPX3N1YicpJykKK2lmZGVmKGBPUEVSQVRJT05fcnNibHNoMV9uJyxgZGVmaW5lKGBET19yc2InKScpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FkZGxzaDFfbiBtcG5fc3VibHNoMV9uIG1wbl9yc2Jsc2gxX24pCisKK2luY2x1ZGVfbXBuKGBwb3dlcnBjNjQvbW9kZTY0L2FvcnNvcnJsc2hDX24uYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9hb3Jzb3JybHNoMl9uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9hb3Jzb3JybHNoMl9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDc3OTFhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L2FvcnNvcnJsc2gyX24uYXNtCkBAIC0wLDAgKzEsNDMgQEAKK2RubCAgUG93ZXJQQy02NCBtcG5fYWRkbHNoMl9uLCBtcG5fc3VibHNoMl9uLCBtcG5fcnNibHNoMl9uLgorCitkbmwgIENvcHlyaWdodCAyMDAzLCAyMDA1LCAyMDA5LCAyMDEwLCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworZGVmaW5lKExTSCwJCTIpCitkZWZpbmUoUlNILAkJNjIpCisKK2lmZGVmKGBPUEVSQVRJT05fYWRkbHNoMl9uJyxgZGVmaW5lKGBET19hZGQnKScpCitpZmRlZihgT1BFUkFUSU9OX3N1YmxzaDJfbicsYGRlZmluZShgRE9fc3ViJyknKQoraWZkZWYoYE9QRVJBVElPTl9yc2Jsc2gyX24nLGBkZWZpbmUoYERPX3JzYicpJykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fYWRkbHNoMl9uIG1wbl9zdWJsc2gyX24gbXBuX3JzYmxzaDJfbikKKworaW5jbHVkZV9tcG4oYHBvd2VycGM2NC9tb2RlNjQvYW9yc29ycmxzaENfbi5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L2FvcnNvcnJsc2hDX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L2FvcnNvcnJsc2hDX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNThmNTQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvYW9yc29ycmxzaENfbi5hc20KQEAgLTAsMCArMSwxODcgQEAKK2RubCAgUG93ZXJQQy02NCBtcG5fYWRkbHNoQ19uLCBtcG5fc3VibHNoQ19uLCBtcG5fcnNibHNoQ19uLgorCitkbmwgIENvcHlyaWdodCAyMDAzLCAyMDA1LCAyMDA5LCAyMDEwLCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK0MgICAgICAgICAgICAgICAgICBjeWNsZXMvbGltYgorQyBQT1dFUjMvUFBDNjMwICAgICAgICAgIDEuODMgICAoMS41IGMvbCBzaG91bGQgYmUgcG9zc2libGUpCitDIFBPV0VSNC9QUEM5NzAgICAgICAgICAgMyAgICAgICgyLjAgYy9sIHNob3VsZCBiZSBwb3NzaWJsZSkKK0MgUE9XRVI1ICAgICAgICAgICAgICAgICAzCitDIFBPV0VSNiAgICAgICAgICAgICAgMy41LTQ3CitDIFBPV0VSNyAgICAgICAgICAgICAgICAgMworCitDIFNUQVRVUworQyAgKiBUcnkgY29tYmluaW5nIHVweCt1cCwgYW5kIHZweCt2cC4KK0MgICogVGhlIHdvcnN0IGNhc2UgNDcgYy9sIGZvciBQT1dFUjYgaGFwcGVucyBpZiB0aGUgM3JkIG9wZXJhbmQgZm9yIGxkeCBpcworQyAgICBncmVhdGVyIHRoYW4gdGhlIDJuZCBvcGVyYW5kLiAgWWVzLCB0aGlzIGFkZGl0aW9uIGlzIG5vbi1jb21tdXRhdGl2ZSB3cnQKK0MgICAgcGVyZm9ybWFuY2UuCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsIGByMycpCitkZWZpbmUoYHVwJywgYHI0JykKK2RlZmluZShgdnAnLCBgcjUnKQorZGVmaW5lKGBuJywgIGByNicpCisKK2lmZGVmKGBET19hZGQnLCBgCisgIGRlZmluZShgQUREU1VCQycsCWBhZGRjCSQxLCAkMiwgJDMnKQorICBkZWZpbmUoYEFERFNVQkUnLAlgYWRkZQkkMSwgJDIsICQzJykKKyAgZGVmaW5lKElOSVRDWSwJYGFkZGljCSQxLCByMSwgMCcpCisgIGRlZmluZShSRVRWQUwsCWBhZGR6ZQlyMywgJDEnKQorICBkZWZpbmUoYGZ1bmMnLAltcG5fYWRkbHNoYCdMU0hgJ19uKScpCitpZmRlZihgRE9fc3ViJywgYAorICBkZWZpbmUoYEFERFNVQkMnLAlgc3ViZmMJJDEsICQyLCAkMycpCisgIGRlZmluZShgQUREU1VCRScsCWBzdWJmZQkkMSwgJDIsICQzJykKKyAgZGVmaW5lKElOSVRDWSwJYGFkZGljCSQxLCByMSwgLTEnKQorICBkZWZpbmUoUkVUVkFMLAlgc3ViZnplCXIzLCAkMQorCQkJbmVnCXIzLCByMycpCisgIGRlZmluZShgZnVuYycsCW1wbl9zdWJsc2hgJ0xTSGAnX24pJykKK2lmZGVmKGBET19yc2InLCBgCisgIGRlZmluZShgQUREU1VCQycsCWBzdWJmYwkkMSwgJDMsICQyJykKKyAgZGVmaW5lKGBBRERTVUJFJywJYHN1YmZlCSQxLCAkMywgJDInKQorICBkZWZpbmUoSU5JVENZLAlgYWRkaWMJJDEsIHIxLCAtMScpCisgIGRlZmluZShSRVRWQUwsCWBhZGRtZQlyMywgJDEnKQorICBkZWZpbmUoYGZ1bmMnLAltcG5fcnNibHNoYCdMU0hgJ19uKScpCisKK2RlZmluZShgcnB4JywgYHI2JykKK2RlZmluZShgdXB4JywgYHI3JykKK2RlZmluZShgdnB4JywgYHIxMicpCisKK2RlZmluZShgczAnLCBgcjAnKSAgZGVmaW5lKGBzMScsIGByOScpCitkZWZpbmUoYHUwJywgYHI4JykKK2RlZmluZShgdjAnLCBgcjEwJykgZGVmaW5lKGB2MScsIGByMTEnKQorCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShmdW5jKQorCWNtcGxkaQljcjAsIG4sIDEzCisJYmd0CUwoYmlnKQorCisJbXRjdHIJbgkJQyBjb3B5IG4gaW4gY3RyCisJSU5JVENZKAlyMCkJCUMgY2xlYXIgY3kKKworCWxkCXYwLCAwKHZwKQlDIGxvYWQgdiBsaW1iCisJbGQJdTAsIDAodXApCUMgbG9hZCB1IGxpbWIKKwlhZGRpCXVwLCB1cCwgLTgJQyB1cGRhdGUgdXAKKwlhZGRpCXJwLCBycCwgLTgJQyB1cGRhdGUgcnAKKwlzbGRpCXMxLCB2MCwgTFNICisJYmR6CUwoZXgxKQkJQyBJZiBkb25lLCBza2lwIGxvb3AKKworCUFMSUdOKDE2KQorTChsbzApOglsZAl2MSwgOCh2cCkJQyBsb2FkIHYgbGltYgorCUFERFNVQkUoczEsIHMxLCB1MCkJQyBhZGQgbGltYnMgd2l0aCBjeSwgc2V0IGN5CisJbGR1CXUwLCAxNih1cCkJQyBsb2FkIHUgbGltYiBhbmQgdXBkYXRlIHVwCisJc3JkaQlzMCwgdjAsIFJTSAlDIHNoaWZ0IGRvd24gcHJldmlvdXMgdiBsaW1iCisJc3RkCXMxLCA4KHJwKQlDIHN0b3JlIHJlc3VsdCBsaW1iCisJcmxkaW1pCXMwLCB2MSwgTFNILCAwCUMgbGVmdCBzaGlmdCB2IGxpbWIgYW5kIG1lcmdlIHdpdGggcHJldiB2IGxpbWIKKwliZHoJTChleDApCQlDIGRlY3JlbWVudCBjdHIgYW5kIGV4aXQgaWYgZG9uZQorCWxkdQl2MCwgMTYodnApCUMgbG9hZCB2IGxpbWIgYW5kIHVwZGF0ZSB2cAorCUFERFNVQkUoczAsIHMwLCB1MCkJQyBhZGQgbGltYnMgd2l0aCBjeSwgc2V0IGN5CisJbGQJdTAsIDgodXApCUMgbG9hZCB1IGxpbWIKKwlzcmRpCXMxLCB2MSwgUlNICUMgc2hpZnQgZG93biBwcmV2aW91cyB2IGxpbWIKKwlzdGR1CXMwLCAxNihycCkJQyBzdG9yZSByZXN1bHQgbGltYiBhbmQgdXBkYXRlIHJwCisJcmxkaW1pCXMxLCB2MCwgTFNILCAwCUMgbGVmdCBzaGlmdCB2IGxpbWIgYW5kIG1lcmdlIHdpdGggcHJldiB2IGxpbWIKKwliZG56CUwobG8wKQkJQyBkZWNyZW1lbnQgY3RyIGFuZCBsb29wIGJhY2sKKworTChleDEpOglBRERTVUJFKHI3LCBzMSwgdTApCisJc3RkCXI3LCA4KHJwKQlDIHN0b3JlIGxhc3QgcmVzdWx0IGxpbWIKKwlzcmRpCXIwLCB2MCwgUlNICisJUkVUVkFMKAlyMCkKKwlibHIKK0woZXgwKToJQUREU1VCRShyNywgczAsIHUwKQorCXN0ZAlyNywgMTYocnApCUMgc3RvcmUgbGFzdCByZXN1bHQgbGltYgorCXNyZGkJcjAsIHYxLCBSU0gKKwlSRVRWQUwoCXIwKQorCWJscgorCisKK0woYmlnKToJcmxkaWNsLglyMCwgbiwgMCw2MwlDIHIwID0gbiAmIDEsIHNldCBjcjAKKwlhZGRpCXI2LCBuLCAtMQlDIC4uLmZvciBjdHIKKwlzcmRpCXI2LCByNiwgMQlDIC4uLmZvciBjdHIKKwltdGN0cglyNgkJQyBjb3B5IGNvdW50IGludG8gY3RyCisJYmVxCWNyMCwgTChiMCkKKworTChiMSk6CWxkCXYxLCAwKHZwKQorCWxkCXUwLCAwKHVwKQorCXNsZGkJczEsIHYxLCBMU0gKKwlzcmRpCXMwLCB2MSwgUlNICisJbGQJdjAsIDgodnApCisJQUREU1VCQyhzMSwgczEsIHUwKQlDIGFkZCBsaW1icyB3aXRob3V0IGN5LCBzZXQgY3kKKwlhZGRpCXJweCwgcnAsIC0xNgorCWFkZGkJcnAsIHJwLCAtOAorCXN1Ygl1cHgsIHVwLCBycAorCXN1Ygl2cHgsIHZwLCBycAorCXN1Ygl1cCwgdXAsIHJweAorCXN1Ygl2cCwgdnAsIHJweAorCWFkZGkJdXAsIHVwLCA4CisJYWRkaQl1cHgsIHVweCwgMTYKKwlhZGRpCXZwLCB2cCwgMTYKKwlhZGRpCXZweCwgdnB4LCAyNAorCWIJTChtaWQpCisKK0woYjApOglsZAl2MCwgMCh2cCkKKwlsZAl1MCwgMCh1cCkKKwlzbGRpCXMwLCB2MCwgTFNICisJc3JkaQlzMSwgdjAsIFJTSAorCWxkCXYxLCA4KHZwKQorCUFERFNVQkMoczAsIHMwLCB1MCkJQyBhZGQgbGltYnMgd2l0aG91dCBjeSwgc2V0IGN5CisJYWRkaQlycHgsIHJwLCAtOAorCWFkZGkJcnAsIHJwLCAtMTYKKwlzdWIJdXB4LCB1cCwgcnB4CisJc3ViCXZweCwgdnAsIHJweAorCXN1Ygl1cCwgdXAsIHJwCisJc3ViCXZwLCB2cCwgcnAKKwlhZGRpCXVwLCB1cCwgOAorCWFkZGkJdXB4LCB1cHgsIDE2CisJYWRkaQl2cCwgdnAsIDE2CisJYWRkaQl2cHgsIHZweCwgMjQKKworCUFMSUdOKDMyKQorTCh0b3ApOglsZHgJdTAsIHJwLCB1cAorCWxkeAl2MCwgcnAsIHZwCisJcmxkaW1pCXMxLCB2MSwgTFNILCAwCisJc3RkdQlzMCwgMTYocnApCisJc3JkaQlzMCwgdjEsIFJTSAorCUFERFNVQkUoczEsIHMxLCB1MCkJQyBhZGQgbGltYnMgd2l0aCBjeSwgc2V0IGN5CitMKG1pZCk6CWxkeAl1MCwgcnB4LCB1cHgKKwlsZHgJdjEsIHJweCwgdnB4CisJcmxkaW1pCXMwLCB2MCwgTFNILCAwCisJc3RkdQlzMSwgMTYocnB4KQorCXNyZGkJczEsIHYwLCBSU0gKKwlBRERTVUJFKHMwLCBzMCwgdTApCUMgYWRkIGxpbWJzIHdpdGggY3ksIHNldCBjeQorCWJkbnoJTCh0b3ApCQlDIGRlY3JlbWVudCBDVFIgYW5kIGxvb3AgYmFjaworCisJbGR4CXUwLCBycCwgdXAKKwlybGRpbWkJczEsIHYxLCBMU0gsIDAKKwlzdGQJczAsIDE2KHJwKQorCXNyZGkJczAsIHYxLCBSU0gKKwlBRERTVUJFKHMxLCBzMSwgdTApCUMgYWRkIGxpbWJzIHdpdGggY3ksIHNldCBjeQorCXN0ZAlzMSwgMjQocnApCisKKwlSRVRWQUwoCXMwKQorCWJscgorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L2JkaXZfZGJtMWMuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L2JkaXZfZGJtMWMuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1Y2RlZDkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvYmRpdl9kYm0xYy5hc20KQEAgLTAsMCArMSwxMzIgQEAKK2RubCAgUFBDNjQgbXBuX2JkaXZfZGJtMWMuCisKK2RubCAgQ29weXJpZ2h0IDIwMDgsIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgUE9XRVIzL1BQQzYzMCAgICAgICA2LTE4CitDIFBPV0VSNC9QUEM5NzAgICAgICAgOC4yNQorQyBQT1dFUjUgICAgICAgICAgICAgIDguNSAgZmx1Y3R1YXRpbmcgYXMgZnVuY3Rpb24gb2YgbiAlIDMKK0MgUE9XRVI2ICAgICAgICAgICAgIDE1CitDIFBPV0VSNyAgICAgICAgICAgICAgNC43NQorCitDIFRPRE8KK0MgICogTm90aGluZyB0byBkby4uLgorCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLCBgcjMnKQorZGVmaW5lKGB1cCcsIGByNCcpCitkZWZpbmUoYG4nLCAgYHI1JykKK2RlZmluZShgYmQnLCBgcjYnKQorZGVmaW5lKGBjeScsIGByNycpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fYmRpdl9kYm0xYykKKwlsZAlyMCwgMChyNCkKKworCXJsZGljbC4JcjEyLCByNSwgMCw2MgorCWNtcGxkaQljcjYsIHIxMiwgMgorCWNtcGxkaQljcjcsIHI1LCA0CisJYWRkaQlyNSwgcjUsIDEKKwlzcndpCXI1LCByNSwgMgorCW10Y3RyCXI1CisJYmVxCWNyMCwgTChiMDApCisJYmx0CWNyNiwgTChiMDEpCisJYmVxCWNyNiwgTChiMTApCisKKwlBTElHTigxNikKK0woYjExKToJbXVsbGQJcjUsIHIwLCByNgorCW11bGhkdQlyMTIsIHIwLCByNgorCWxkCXIwLCA4KHI0KQorCWFkZGkJcjQsIHI0LCAtMjQKKwlhZGRpCXIzLCByMywgLTI0CisJYglMKDMpCisKKwlBTElHTigxNikKK0woYjAwKToJbXVsbGQJcjksIHIwLCByNgorCW11bGhkdQlyOCwgcjAsIHI2CisJYWRkaQlyNCwgcjQsIC0xNgorCWFkZGkJcjMsIHIzLCAtMTYKKwliCUwoMCkKKworCUFMSUdOKDE2KQorTChiMDEpOgltdWxsZAlyNSwgcjAsIHI2CisJbXVsaGR1CXIxMiwgcjAsIHI2CisJYWRkaQlyMywgcjMsIC04CisJYmxlCWNyNywgTChlMSkKKwlsZAlyMCwgOChyNCkKKwlhZGRpCXI0LCByNCwgLTgKKwliCUwoMSkKKworCUFMSUdOKDE2KQorTChiMTApOgltdWxsZAlyOSwgcjAsIHI2CisJbXVsaGR1CXI4LCByMCwgcjYKKwlibGUJY3I3LCBMKGUyKQorCisJQUxJR04oMTYpCitMKHRvcCk6CXN1YmZjCXIxMSwgcjksIHI3CisJbGQJcjEwLCA4KHI0KQorCWxkCXIwLCAxNihyNCkKKwlzdWJmZQlyNywgcjgsIHIxMQorCXN0ZAlyMTEsIDAocjMpCisJbXVsbGQJcjUsIHIxMCwgcjYKKwltdWxoZHUJcjEyLCByMTAsIHI2CitMKDEpOgltdWxsZAlyOSwgcjAsIHI2CisJbXVsaGR1CXI4LCByMCwgcjYKKwlzdWJmYwlyMTEsIHI1LCByNworCXN1YmZlCXI3LCByMTIsIHIxMQorCXN0ZAlyMTEsIDgocjMpCitMKDApOglzdWJmYwlyMTEsIHI5LCByNworCWxkCXIxMCwgMjQocjQpCisJbGQJcjAsIDMyKHI0KQorCXN1YmZlCXI3LCByOCwgcjExCisJc3RkCXIxMSwgMTYocjMpCisJbXVsbGQJcjUsIHIxMCwgcjYKKwltdWxoZHUJcjEyLCByMTAsIHI2CitMKDMpOgltdWxsZAlyOSwgcjAsIHI2CisJbXVsaGR1CXI4LCByMCwgcjYKKwlzdWJmYwlyMTEsIHI1LCByNworCXN1YmZlCXI3LCByMTIsIHIxMQorCXN0ZAlyMTEsIDI0KHIzKQorCWFkZGkJcjQsIHI0LCAzMgorCWFkZGkJcjMsIHIzLCAzMgorCWJkbnoJTCh0b3ApCisKK0woZTIpOglsZAlyMTAsIDgocjQpCisJbXVsbGQJcjUsIHIxMCwgcjYKKwltdWxoZHUJcjEyLCByMTAsIHI2CisJc3ViZmMJcjExLCByOSwgcjcKKwlzdWJmZQlyNywgcjgsIHIxMQorCXN0ZAlyMTEsIDAocjMpCitMKGUxKToJc3ViZmMJcjExLCByNSwgcjcKKwlzdGQJcjExLCA4KHIzKQorCXN1YmZlCXIzLCByMTIsIHIxMQorCWJscgorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L2JkaXZfcV8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9iZGl2X3FfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA3YWFmYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9iZGl2X3FfMS5hc20KQEAgLTAsMCArMSwxNDYgQEAKK2RubCAgUG93ZXJQQy02NCBtcG5fYmRpdl9xXzEsIG1wbl9waTFfYmRpdl9xXzEgLS0gSGVuc2VsIGRpdmlzaW9uIGJ5IDEtbGltYgorZG5sICBkaXZpc29yLgorCitkbmwgIENvcHlyaWdodCAyMDA2LCAyMDEwLCAyMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJCQljeWNsZXMvbGltYgorQwkJCW5vcm0JdW5vcm0KK0MgUE9XRVIzL1BQQzYzMAkgICAgICAgMTMtMTkKK0MgUE9XRVI0L1BQQzk3MAkJMTYKK0MgUE9XRVI1CQkxNgkxNgorQyBQT1dFUjYJCTM3CTQ2CitDIFBPV0VSNwkJMTIJMTIKK0MgUE9XRVI4CQkxMgkxMgorCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLCBgcjMnKQorZGVmaW5lKGB1cCcsIGByNCcpCitkZWZpbmUoYG4nLCAgYHI1JykKK2RlZmluZShgZCcsICBgcjYnKQorZGVmaW5lKGBkaScsIGByNycpCitkZWZpbmUoYGNudCcsYHI4JykKKworZGVmaW5lKGB0bmMnLGByMTAnKQorCitBU01fU1RBUlQoKQorCitFWFRFUk4oYmludmVydF9saW1iX3RhYmxlKQorCitQUk9MT0dVRShtcG5fYmRpdl9xXzEsdG9jKQorCWFkZGkJcjcsIG4sIC0xCisJY21wZGkJY3IxLCBuLCAxCisJbGQJcjEyLCAwKHVwKQorCWxpCWNudCwgMAorCW5lZwlyMCwgZAorCWFuZAlyMCwgZCwgcjAKKwljbnRsemQJcjAsIHIwCisJc3ViZmljCWNudCwgcjAsIDYzCisJc3JkCWQsIGQsIGNudAorTCg3KToKKwltdGN0cglyNworCUxFQSgJcjEwLCBiaW52ZXJ0X2xpbWJfdGFibGUpCisJcmxkaWNsCXIxMSwgZCwgNjMsIDU3CisJbGJ6eAlyMCwgcjEwLCByMTEKKwltdWxsZAlyOSwgcjAsIHIwCisJc2xkaQlyMCwgcjAsIDEKKwltdWxsZAlyOSwgZCwgcjkKKwlzdWJmCXIwLCByOSwgcjAKKwltdWxsZAlyMTAsIHIwLCByMAorCXNsZGkJcjAsIHIwLCAxCisJbXVsbGQJcjEwLCBkLCByMTAKKwlzdWJmCXIwLCByMTAsIHIwCisJbXVsbGQJcjksIHIwLCByMAorCXNsZGkJcjAsIHIwLCAxCisJbXVsbGQJcjksIGQsIHI5CisJc3ViZglkaSwgcjksIHIwCQlDIGRpID0gMS9kIG1vZCAyXjY0CitpZmRlZihgQUlYJywKK2AJQyBGb3IgQUlYIGl0IGlzIG5vdCBjbGVhciBob3cgdG8ganVtcCBpbnRvIGFub3RoZXIgZnVuY3Rpb24uCisJYgkubXBuX3BpMV9iZGl2X3FfMQorJyxgCisJQyBGb3Igbm9uLUFJWCwgZGlzcGF0Y2ggaW50byB0aGUgcGkxIHZhcmlhbnQuCisJYm5lCWNyMCwgTChub3JtKQorCWIJTCh1bm9ybSkKKycpCitFUElMT0dVRSgpCisKK1BST0xPR1VFKG1wbl9waTFfYmRpdl9xXzEpCisJY21wZGkJY3IwLCBjbnQsIDAKKwlsZAlyMTIsIDAodXApCisJYWRkaWMJcjAsIG4sIC0xCQlDIHNldCBjYXJyeSBhcyBzaWRlIGVmZmVjdAorCWNtcGRpCWNyMSwgbiwgMQorCW10Y3RyCXIwCisJYmVxCWNyMCwgTChub3JtKQorCitMKHVub3JtKToKKwlzdWJmaWMJdG5jLCBjbnQsIDY0CQlDIHNldCBjYXJyeSBhcyBzaWRlIGVmZmVjdAorCWxpCXI1LCAwCisJc3JkCXIxMSwgcjEyLCBjbnQKKwliZXEJY3IxLCBMKGVkMSkKKworCUFMSUdOKDE2KQorTCh0cHUpOglsZAlyMTIsIDgodXApCisJbm9wCisJYWRkaQl1cCwgdXAsIDgKKwlzbGQJcjAsIHIxMiwgdG5jCisJb3IJcjExLCByMTEsIHIwCisJc3ViZmUJcjksIHI1LCByMTEKKwlzcmQJcjExLCByMTIsIGNudAorCW11bGxkCXIwLCBkaSwgcjkKKwltdWxoZHUJcjUsIHIwLCBkCisJc3RkCXIwLCAwKHJwKQorCWFkZGkJcnAsIHJwLCA4CisJYmRueglMKHRwdSkKKworCXN1YmZlCXIxMSwgcjUsIHIxMQorTChlZDEpOgltdWxsZAlyMCwgZGksIHIxMQorCXN0ZAlyMCwgMChycCkKKwlibHIKKworCUFMSUdOKDE2KQorTChub3JtKToKKwltdWxsZAlyMTEsIHIxMiwgZGkKKwltdWxoZHUJcjUsIHIxMSwgZAorCXN0ZAlyMTEsIDAocnApCisJYmVxbHIJY3IxCisKKwlBTElHTigxNikKK0wodHBuKToJbGQJcjksIDgodXApCisJYWRkaQl1cCwgdXAsIDgKKwlzdWJmZQlyNSwgcjUsIHI5CisJbXVsbGQJcjExLCBkaSwgcjUKKwltdWxoZHUJcjUsIHIxMSwgZAlDIHJlc3VsdCBub3QgdXNlZCBpbiBsYXN0IGl0ZXJhdGlvbgorCXN0ZAlyMTEsIDgocnApCisJYWRkaQlycCwgcnAsIDgKKwliZG56CUwodHBuKQorCisJYmxyCitFUElMT0dVRSgpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9jbmRfYW9yc19uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9jbmRfYW9yc19uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDk2OGMxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L2NuZF9hb3JzX24uYXNtCkBAIC0wLDAgKzEsMTk2IEBACitkbmwgIFBvd2VyUEMtNjQgbXBuX2NuZF9hZGRfbi9tcG5fY25kX3N1Yl9uLgorCitkbmwgIENvcHlyaWdodCAxOTk5LTIwMDEsIDIwMDMtMjAwNSwgMjAwNywgMjAxMSwgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitkbmwgIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgICAgICAgICAgIGN5Y2xlcy9saW1iCitDIFBPV0VSMy9QUEM2MzAgICAgICAgICAgPworQyBQT1dFUjQvUFBDOTcwICAgICAgICAgIDIuMjUKK0MgUE9XRVI1ICAgICAgICAgICAgICAgICA/CitDIFBPV0VSNiAgICAgICAgICAgICAgICAgMworQyBQT1dFUjcgICAgICAgICAgICAgICAgIDIKKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYGNuZCcsICBgcjMnKQorZGVmaW5lKGBycCcsICAgYHI0JykKK2RlZmluZShgdXAnLCAgIGByNScpCitkZWZpbmUoYHZwJywgICBgcjYnKQorZGVmaW5lKGBuJywgICAgYHI3JykKKworaWZkZWYoYE9QRVJBVElPTl9jbmRfYWRkX24nLGAKKyAgZGVmaW5lKEFERFNVQkMsCWFkZGUpCisgIGRlZmluZShBRERTVUIsCWFkZGMpCisgIGRlZmluZShmdW5jLAkJbXBuX2NuZF9hZGRfbikKKyAgZGVmaW5lKEdFTlJWQUwsCWBhZGRpCXIzLCByMywgMScpCisgIGRlZmluZShTRVRDQlIsCWBhZGRpYwlyMCwgJDEsIC0xJykKKyAgZGVmaW5lKENMUkNCLAkJYGFkZGljCXIwLCByMCwgMCcpCisnKQoraWZkZWYoYE9QRVJBVElPTl9jbmRfc3ViX24nLGAKKyAgZGVmaW5lKEFERFNVQkMsCXN1YmZlKQorICBkZWZpbmUoQUREU1VCLAlzdWJmYykKKyAgZGVmaW5lKGZ1bmMsCQltcG5fY25kX3N1Yl9uKQorICBkZWZpbmUoR0VOUlZBTCwJYG5lZwlyMywgcjMnKQorICBkZWZpbmUoU0VUQ0JSLAlgc3ViZmljCXIwLCAkMSwgMCcpCisgIGRlZmluZShDTFJDQiwJCWBhZGRpYwlyMCwgcjEsIC0xJykKKycpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2NuZF9hZGRfbiBtcG5fY25kX3N1Yl9uKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUoZnVuYykKKwlzdGQJcjMxLCAtOChyMSkKKwlzdGQJcjMwLCAtMTYocjEpCisJc3RkCXIyOSwgLTI0KHIxKQorCXN0ZAlyMjgsIC0zMihyMSkKKwlzdGQJcjI3LCAtNDAocjEpCisKKwlzdWJmaWMJY25kLCBjbmQsIDAKKwlzdWJmZQljbmQsIGNuZCwgY25kCisKKwlybGRpY2wuCXIwLCBuLCAwLDYyCUMgcjAgPSBuICYgMywgc2V0IGNyMAorCWNtcGRpCWNyNiwgcjAsIDIKKwlhZGRpCW4sIG4sIDMJQyBjb21wdXRlIGNvdW50Li4uCisJc3JkaQluLCBuLCAyCUMgLi4uZm9yIGN0cgorCW10Y3RyCW4JCUMgY29weSBjb3VudCBpbnRvIGN0cgorCWJlcQljcjAsIEwoYjAwKQorCWJsdAljcjYsIEwoYjAxKQorCWJlcQljcjYsIEwoYjEwKQorCitMKGIxMSk6CWxkCXI4LCAwKHVwKQlDIGxvYWQgczEgbGltYgorCWxkCXI5LCAwKHZwKQlDIGxvYWQgczIgbGltYgorCWxkCXIxMCwgOCh1cCkJQyBsb2FkIHMxIGxpbWIKKwlsZAlyMTEsIDgodnApCUMgbG9hZCBzMiBsaW1iCisJbGQJcjEyLCAxNih1cCkJQyBsb2FkIHMxIGxpbWIKKwlhZGRpCXVwLCB1cCwgMjQKKwlsZAlyMCwgMTYodnApCUMgbG9hZCBzMiBsaW1iCisJYWRkaQl2cCwgdnAsIDI0CisJYW5kCXI5LCByOSwgY25kCisJYW5kCXIxMSwgcjExLCBjbmQKKwlhbmQJcjAsIHIwLCBjbmQKKwlBRERTVUIJcjI5LCByOSwgcjgKKwlBRERTVUJDCXIzMCwgcjExLCByMTAKKwlBRERTVUJDCXIzMSwgcjAsIHIxMgorCXN0ZAlyMjksIDAocnApCisJc3RkCXIzMCwgOChycCkKKwlzdGQJcjMxLCAxNihycCkKKwlhZGRpCXJwLCBycCwgMjQKKwliZG56CUwoZ28pCisJYglMKHJldCkKKworTChiMDEpOglsZAlyMTIsIDAodXApCUMgbG9hZCBzMSBsaW1iCisJYWRkaQl1cCwgdXAsIDgKKwlsZAlyMCwgMCh2cCkJQyBsb2FkIHMyIGxpbWIKKwlhZGRpCXZwLCB2cCwgOAorCWFuZAlyMCwgcjAsIGNuZAorCUFERFNVQglyMzEsIHIwLCByMTIJQyBhZGQKKwlzdGQJcjMxLCAwKHJwKQorCWFkZGkJcnAsIHJwLCA4CisJYmRueglMKGdvKQorCWIJTChyZXQpCisKK0woYjEwKToJbGQJcjEwLCAwKHVwKQlDIGxvYWQgczEgbGltYgorCWxkCXIxMSwgMCh2cCkJQyBsb2FkIHMyIGxpbWIKKwlsZAlyMTIsIDgodXApCUMgbG9hZCBzMSBsaW1iCisJYWRkaQl1cCwgdXAsIDE2CisJbGQJcjAsIDgodnApCUMgbG9hZCBzMiBsaW1iCisJYWRkaQl2cCwgdnAsIDE2CisJYW5kCXIxMSwgcjExLCBjbmQKKwlhbmQJcjAsIHIwLCBjbmQKKwlBRERTVUIJcjMwLCByMTEsIHIxMAlDIGFkZAorCUFERFNVQkMJcjMxLCByMCwgcjEyCUMgYWRkCisJc3RkCXIzMCwgMChycCkKKwlzdGQJcjMxLCA4KHJwKQorCWFkZGkJcnAsIHJwLCAxNgorCWJkbnoJTChnbykKKwliCUwocmV0KQorCitMKGIwMCk6CUNMUkNCCQkJQyBjbGVhci9zZXQgY3kKK0woZ28pOglsZAlyNywgMCh1cCkJQyBsb2FkIHMxIGxpbWIKKwlsZAlyMjcsIDAodnApCUMgbG9hZCBzMiBsaW1iCisJbGQJcjgsIDgodXApCUMgbG9hZCBzMSBsaW1iCisJbGQJcjksIDgodnApCUMgbG9hZCBzMiBsaW1iCisJbGQJcjEwLCAxNih1cCkJQyBsb2FkIHMxIGxpbWIKKwlsZAlyMTEsIDE2KHZwKQlDIGxvYWQgczIgbGltYgorCWxkCXIxMiwgMjQodXApCUMgbG9hZCBzMSBsaW1iCisJbGQJcjAsIDI0KHZwKQlDIGxvYWQgczIgbGltYgorCWFuZAlyMjcsIHIyNywgY25kCisJYW5kCXI5LCByOSwgY25kCisJYW5kCXIxMSwgcjExLCBjbmQKKwlhbmQJcjAsIHIwLCBjbmQKKwliZHoJTChlbmQpCisKKwlhZGRpCXVwLCB1cCwgMzIKKwlhZGRpCXZwLCB2cCwgMzIKKworTCh0b3ApOglBRERTVUJDCXIyOCwgcjI3LCByNworCWxkCXI3LCAwKHVwKQlDIGxvYWQgczEgbGltYgorCWxkCXIyNywgMCh2cCkJQyBsb2FkIHMyIGxpbWIKKwlBRERTVUJDCXIyOSwgcjksIHI4CisJbGQJcjgsIDgodXApCUMgbG9hZCBzMSBsaW1iCisJbGQJcjksIDgodnApCUMgbG9hZCBzMiBsaW1iCisJQUREU1VCQwlyMzAsIHIxMSwgcjEwCisJbGQJcjEwLCAxNih1cCkJQyBsb2FkIHMxIGxpbWIKKwlsZAlyMTEsIDE2KHZwKQlDIGxvYWQgczIgbGltYgorCUFERFNVQkMJcjMxLCByMCwgcjEyCisJbGQJcjEyLCAyNCh1cCkJQyBsb2FkIHMxIGxpbWIKKwlsZAlyMCwgMjQodnApCUMgbG9hZCBzMiBsaW1iCisJc3RkCXIyOCwgMChycCkKKwlhZGRpCXVwLCB1cCwgMzIKKwlzdGQJcjI5LCA4KHJwKQorCWFkZGkJdnAsIHZwLCAzMgorCXN0ZAlyMzAsIDE2KHJwKQorCXN0ZAlyMzEsIDI0KHJwKQorCWFkZGkJcnAsIHJwLCAzMgorCWFuZAlyMjcsIHIyNywgY25kCisJYW5kCXI5LCByOSwgY25kCisJYW5kCXIxMSwgcjExLCBjbmQKKwlhbmQJcjAsIHIwLCBjbmQKKwliZG56CUwodG9wKQkJQyBkZWNyZW1lbnQgY3RyIGFuZCBsb29wIGJhY2sKKworTChlbmQpOglBRERTVUJDCXIyOCwgcjI3LCByNworCUFERFNVQkMJcjI5LCByOSwgcjgKKwlBRERTVUJDCXIzMCwgcjExLCByMTAKKwlBRERTVUJDCXIzMSwgcjAsIHIxMgorCXN0ZAlyMjgsIDAocnApCisJc3RkCXIyOSwgOChycCkKKwlzdGQJcjMwLCAxNihycCkKKwlzdGQJcjMxLCAyNChycCkKKworTChyZXQpOglsZAlyMzEsIC04KHIxKQorCWxkCXIzMCwgLTE2KHIxKQorCWxkCXIyOSwgLTI0KHIxKQorCWxkCXIyOCwgLTMyKHIxKQorCWxkCXIyNywgLTQwKHIxKQorCisJc3ViZmUJcjMsIHIwLCByMAlDIC1jeQorCUdFTlJWQUwKKwlibHIKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9kaXZlXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L2RpdmVfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJkMTBiZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9kaXZlXzEuYXNtCkBAIC0wLDAgKzEsMTM1IEBACitkbmwgIFBvd2VyUEMtNjQgbXBuX2RpdmV4YWN0XzEgLS0gbXBuIGJ5IGxpbWIgZXhhY3QgZGl2aXNpb24uCisKK2RubCAgQ29weXJpZ2h0IDIwMDYsIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkJCWN5Y2xlcy9saW1iCitDCQkJbm9ybQl1bm9ybQorQyBQT1dFUjMvUFBDNjMwCSAgICAgICAxMy0xOQorQyBQT1dFUjQvUFBDOTcwCQkxNgorQyBQT1dFUjUJCTE2CTE2CitDIFBPV0VSNgkJMzcJNDYKK0MgUE9XRVI3CQkxMgkxMgorQyBQT1dFUjgJCTEyCTEyCisKK0MgVE9ETworQyAgKiBDaGVjayBpZiBuPTEgY29kZSBpcyByZWFsbHkgYW4gaW1wcm92ZW1lbnQuICBJdCBwcm9iYWJseSBpc24ndC4KK0MgICogTWFrZSBtb3JlIHNpbWlsYXIgdG8gbW9kZTFvLmFzbS4KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywgYHIzJykKK2RlZmluZShgdXAnLCBgcjQnKQorZGVmaW5lKGBuJywgIGByNScpCitkZWZpbmUoYGQnLCAgYHI2JykKKworCitBU01fU1RBUlQoKQorCitFWFRFUk4oYmludmVydF9saW1iX3RhYmxlKQorCitQUk9MT0dVRShtcG5fZGl2ZXhhY3RfMSx0b2MpCisJYWRkaWMuCW4sIG4sIC0xCisJbGQJcjEyLCAwKHVwKQorCWJuZQljcjAsIEwoMikKKwlkaXZkdQlyMCwgcjEyLCBkCisJc3RkCXIwLCAwKHJwKQorCWJscgorTCgyKToKKwlybGRpY2wuCXIwLCBkLCAwLCA2MworCWxpCXIxMCwgMAorCWJuZQljcjAsIEwoNykKKwluZWcJcjAsIGQKKwlhbmQJcjAsIGQsIHIwCisJY250bHpkCXIwLCByMAorCXN1YmZpYwlyMCwgcjAsIDYzCisJcmxkaWNsCXIxMCwgcjAsIDAsIDMyCisJc3JkCWQsIGQsIHIwCitMKDcpOgorCW10Y3RyCW4KKwlMRUEoCXI1LCBiaW52ZXJ0X2xpbWJfdGFibGUpCisJcmxkaWNsCXIxMSwgZCwgNjMsIDU3CisJbGJ6eAlyMCwgcjUsIHIxMQorCW11bGxkCXI5LCByMCwgcjAKKwlzbGRpCXIwLCByMCwgMQorCW11bGxkCXI5LCBkLCByOQorCXN1YmYJcjAsIHI5LCByMAorCW11bGxkCXI1LCByMCwgcjAKKwlzbGRpCXIwLCByMCwgMQorCW11bGxkCXI1LCBkLCByNQorCXN1YmYJcjAsIHI1LCByMAorCW11bGxkCXI5LCByMCwgcjAKKwlzbGRpCXIwLCByMCwgMQorCW11bGxkCXI5LCBkLCByOQorCXN1YmYJcjcsIHI5LCByMAkJQyByNyA9IDEvZCBtb2QgMl42NAorCisJYm5lCWNyMCwgTChub3JtKQorCXN1YmZpYwlyOCwgcjEwLCA2NAkJQyBzZXQgY2FycnkgYXMgc2lkZSBlZmZlY3QKKwlsaQlyNSwgMAorCXNyZAlyMTEsIHIxMiwgcjEwCisKKwlBTElHTigxNikKK0wobG9vcDApOgorCWxkCXIxMiwgOCh1cCkKKwlub3AKKwlhZGRpCXVwLCB1cCwgOAorCXNsZAlyMCwgcjEyLCByOAorCW9yCXIxMSwgcjExLCByMAorCXN1YmZlCXI5LCByNSwgcjExCisJc3JkCXIxMSwgcjEyLCByMTAKKwltdWxsZAlyMCwgcjcsIHI5CisJbXVsaGR1CXI1LCByMCwgZAorCXN0ZAlyMCwgMChycCkKKwlhZGRpCXJwLCBycCwgOAorCWJkbnoJTChsb29wMCkKKworCXN1YmZlCXIwLCByNSwgcjExCisJbXVsbGQJcjAsIHI3LCByMAorCXN0ZAlyMCwgMChycCkKKwlibHIKKworCUFMSUdOKDE2KQorTChub3JtKToKKwltdWxsZAlyMTEsIHIxMiwgcjcKKwltdWxoZHUJcjUsIHIxMSwgZAorCXN0ZAlyMTEsIDAocnApCisJQUxJR04oMTYpCitMKGxvb3AxKToKKwlsZAlyOSwgOCh1cCkKKwlhZGRpCXVwLCB1cCwgOAorCXN1YmZlCXI1LCByNSwgcjkKKwltdWxsZAlyMTEsIHI3LCByNQorCW11bGhkdQlyNSwgcjExLCBkCUMgcmVzdWx0IG5vdCB1c2VkIGluIGxhc3QgaXRlcmF0aW9uCisJc3RkCXIxMSwgOChycCkKKwlhZGRpCXJwLCBycCwgOAorCWJkbnoJTChsb29wMSkKKworCWJscgorRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvZGl2cmVtXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L2RpdnJlbV8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjgzODc3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L2RpdnJlbV8xLmFzbQpAQCAtMCwwICsxLDI3NCBAQAorZG5sICBQb3dlclBDLTY0IG1wbl9kaXZyZW1fMSAtLSBEaXZpZGUgYW4gbXBuIG51bWJlciBieSBhbiB1bm5vcm1hbGl6ZWQgbGltYi4KKworZG5sICBDb3B5cmlnaHQgMjAwMy0yMDA1LCAyMDA3LCAyMDA4LCAyMDEwLCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICAgICAgICAgICAgICAgICAgICBjeWNsZXMvbGltYgorQyAgICAgICAgICAgICAgICAgICAgICAgbm9ybSAgICB1bm9ybSAgIGZyYWMKK0MgUE9XRVIzL1BQQzYzMCAgICAgICAgIDE2LTM0ICAgMTYtMzQgICB+MTEgICBvdXRkYXRlZCBmaWd1cmVzCitDIFBPV0VSNC9QUEM5NzAgICAgICAgICAgMjggICAgICAyOCAgICAgIDE5CitDIFBPV0VSNSAgICAgICAgICAgICAgICAgMjkgICAgICAyOSAgICAgfjE5CitDIFBPV0VSNiAgICAgICAgICAgICAgICAgNDkgICAgICA1OSAgICAgfjQyCitDIFBPV0VSNyAgICAgICAgICAgICAgICAgMjQuNSAgICAyMyAgICAgfjE0CisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyBxcCAgPSByMworQyBmbiAgPSByNAorQyB1cCAgPSByNQorQyB1biAgPSByNgorQyBkICAgPSByNworCitDIFdlIHVzZSBhIG5vdCB2ZXJ5IHByZWRpY3RhYmxlIGJyYW5jaCBpbiB0aGUgZnJhYyBjb2RlLCB0aGVyZWZvcmUgdGhlIGN5Y2xlCitDIGNvdW50IHdvYmJsZXMgc29tZXdoYXQuICBXaXRoIHRoZSBhbHRlcm5hdGl2ZSBicmFuY2gtZnJlZSBjb2RlLCB0aGluZ3MgcnVuCitDIGNvbnNpZGVyYWJseSBzbG93ZXIgb24gUE9XRVI0L1BQQzk3MCBhbmQgUE9XRVI1LgorCitDIEFkZCBwcmVpbnYgZW50cnkgcG9pbnQuCisKKworQVNNX1NUQVJUKCkKKworRVhURVJOX0ZVTkMobXBuX2ludmVydF9saW1iKQorCitQUk9MT0dVRShtcG5fZGl2cmVtXzEsdG9jKQorCisJbWZjcglyMTIKKwlhZGQuCXIxMCwgcjYsIHI0CisJc3RkCXIyNSwgLTU2KHIxKQorCW1yCXIyNSwgcjQKKwltZmxyCXIwCisJc3RkCXIyNiwgLTQ4KHIxKQorCW1yCXIyNiwgcjUKKwlzdGQJcjI4LCAtMzIocjEpCisJbXIJcjI4LCByNgorCXN0ZAlyMjksIC0yNChyMSkKKwltcglyMjksIHIzCisJbGkJcjMsIDAKKwlzdGQJcjMwLCAtMTYocjEpCisJbXIJcjMwLCByNworCXN0ZAlyMzEsIC04KHIxKQorCWxpCXIzMSwgMAorCXN0ZAlyMjcsIC00MChyMSkKKwlzdGQJcjAsIDE2KHIxKQorCXN0dwlyMTIsIDgocjEpCisJc3RkdQlyMSwgLTE3NihyMSkKKwliZXEtCWNyMCwgTCgxKQorCWNtcGRpCWNyNywgcjcsIDAKKwlzbGRpCXIwLCByMTAsIDMKKwlhZGQJcjExLCByMCwgcjI5CisJYWRkaQlyMjksIHIxMSwgLTgKKwlibHQtCWNyNywgTCgxNjIpCisJY21wZGkJY3I0LCByNiwgMAorCWJlcSsJY3I0LCBMKDcxKQorTCgxNjMpOgorCXNsZGkJcjksIHI2LCAzCisJYWRkCXI5LCByOSwgcjUKKwlsZAlyNywgLTgocjkpCisJY21wbGQJY3I3LCByNywgcjMwCisJYmdlLQljcjcsIEwoNzEpCisJY21wZGkJY3I3LCByMTAsIDEKKwlsaQlyMCwgMAorCW1yCXIzMSwgcjcKKwlzdGQJcjAsIC04KHIxMSkKKwlhZGRpCXIyOSwgcjI5LCAtOAorCW1yCXIzLCByNworCWJlcS0JY3I3LCBMKDEpCisJYWRkaQlyMjgsIHI2LCAtMQorCWNtcGRpCWNyNCwgcjI4LCAwCitMKDcxKToKKwljbnRsemQJcjI3LCByMzAKKwlzbGQJcjMwLCByMzAsIHIyNworCXNsZAlyMzEsIHIzMSwgcjI3CisJbXIJcjMsIHIzMAorCUNBTEwoCW1wbl9pbnZlcnRfbGltYikKKwliZXEtCWNyNCwgTCgxMTApCisJc2xkaQlyOSwgcjI4LCAzCisJYWRkaWMuCXI2LCByMjgsIC0yCisJYWRkCXI5LCByOSwgcjI2CisJc3ViZmljCXI1LCByMjcsIDY0CisJbGQJcjgsIC04KHI5KQorCXNyZAlyMCwgcjgsIHI1CisJb3IJcjMxLCByMzEsIHIwCisJc2xkCXI3LCByOCwgcjI3CisJYmx0LQljcjAsIEwoMTU0KQorCWFkZGkJcjI4LCByMjgsIC0xCisJbXRjdHIJcjI4CisJc2xkaQlyNiwgcjYsIDMKKwlBTElHTigxNikKK0wodWxvb3ApOgorCWxkeAlyOCwgcjI2LCByNgorCW5vcAorCW11bGxkCXIwLCByMzEsIHIzCisJbXVsaGR1CXIxMCwgcjMxLCByMworCWFkZGkJcjExLCByMzEsIDEKKwlzcmQJcjksIHI4LCByNQorCWFkZGkJcjYsIHI2LCAtOAorCW9yCXI5LCByNywgcjkKKwlhZGRjCXIwLCByMCwgcjkKKwlhZGRlCXIxMCwgcjEwLCByMTEKKwltdWxsZAlyMzEsIHIxMCwgcjMwCisJc3ViZglyMzEsIHIzMSwgcjkKKwlzdWJmYwlyMCwgcjMxLCByMAlDIHIgPD0gcWwKKwlzdWJmZQlyMCwgcjAsIHIwCUMgcjAgPSAtKHIgPD0gcWwpCisJYW5kCXI5LCByMzAsIHIwCisJYWRkCXIzMSwgcjMxLCByOQorCWFkZAlyMTAsIHIwLCByMTAJQyBxaCAtPSAociA+PSBxbCkKKwljbXBsZAljcjcsIHIzMSwgcjMwCisJYmdlLQljcjcsIEwoMTY0KQorTCgxMjMpOgorCXN0ZAlyMTAsIDAocjI5KQorCWFkZGkJcjI5LCByMjksIC04CisJc2xkCXI3LCByOCwgcjI3CisJYmRueglMKHVsb29wKQorTCgxNTQpOgorCWFkZGkJcjExLCByMzEsIDEKKwlub3AKKwltdWxsZAlyMCwgcjMxLCByMworCW11bGhkdQlyOCwgcjMxLCByMworCWFkZGMJcjAsIHIwLCByNworCWFkZGUJcjgsIHI4LCByMTEKKwltdWxsZAlyMzEsIHI4LCByMzAKKwlzdWJmCXIzMSwgcjMxLCByNworCXN1YmZjCXIwLCByMCwgcjMxCUMgciA+PSBxbAorCXN1YmZlCXIwLCByMCwgcjAJQyByMCA9IC0ociA+PSBxbCkKKwlub3QJcjcsIHIwCisJYWRkCXI4LCByNywgcjgJQyBxaCAtPSAociA+PSBxbCkKKwlhbmRjCXIwLCByMzAsIHIwCisJYWRkCXIzMSwgcjMxLCByMAorCWNtcGxkCWNyNywgcjMxLCByMzAKKwliZ2UtCWNyNywgTCgxNjUpCitMKDEzNCk6CisJc3RkCXI4LCAwKHIyOSkKKwlhZGRpCXIyOSwgcjI5LCAtOAorTCgxMTApOgorCWFkZGljLglyMCwgcjI1LCAtMQorCWJsdC0JY3IwLCBMKDE1NikKKwltdGN0cglyMjUKKwluZWcJcjksIHIzMAorCUFMSUdOKDE2KQorTCh1Zmxvb3ApOgorCWFkZGkJcjExLCByMzEsIDEKKwlub3AKKwltdWxsZAlyMCwgcjMsIHIzMQorCW11bGhkdQlyMTAsIHIzLCByMzEKKwlhZGQJcjEwLCByMTAsIHIxMQorCW11bGxkCXIzMSwgcjksIHIxMAoraWZlbHNlKDAsMSxgCisJc3ViZmMJcjAsIHIwLCByMzEKKwlzdWJmZQlyMCwgcjAsIHIwCUMgcjAgPSAtKHIgPj0gcWwpCisJbm90CXI3LCByMAorCWFkZAlyMTAsIHI3LCByMTAJQyBxaCAtPSAociA+PSBxbCkKKwlhbmRjCXIwLCByMzAsIHIwCisJYWRkCXIzMSwgcjMxLCByMAorJyxgCisJY21wbGQJY3I3LCByMzEsIHIwCisJYmx0CWNyNywgTCgyOSkKKwlhZGQJcjMxLCByMzAsIHIzMQorCWFkZGkJcjEwLCByMTAsIC0xCitMKDI5KToKKycpCisJc3RkCXIxMCwgMChyMjkpCisJYWRkaQlyMjksIHIyOSwgLTgKKwliZG56CUwodWZsb29wKQorTCgxNTYpOgorCXNyZAlyMywgcjMxLCByMjcKK0woMSk6CisJYWRkaQlyMSwgcjEsIDE3NgorCWxkCXIwLCAxNihyMSkKKwlsd3oJcjEyLCA4KHIxKQorCW10bHIJcjAKKwlsZAlyMjUsIC01NihyMSkKKwlsZAlyMjYsIC00OChyMSkKKwltdGNyZgk4LCByMTIKKwlsZAlyMjcsIC00MChyMSkKKwlsZAlyMjgsIC0zMihyMSkKKwlsZAlyMjksIC0yNChyMSkKKwlsZAlyMzAsIC0xNihyMSkKKwlsZAlyMzEsIC04KHIxKQorCWJscgorTCgxNjIpOgorCWNtcGRpCWNyNywgcjYsIDAKKwliZXEtCWNyNywgTCg4KQorCXNsZGkJcjksIHI2LCAzCisJYWRkaQlyMjksIHIyOSwgLTgKKwlhZGQJcjksIHI5LCByNQorCWFkZGkJcjI4LCByNiwgLTEKKwlsZAlyMzEsIC04KHI5KQorCXN1YmZjCXI5LCByNywgcjMxCisJbGkJcjksIDAKKwlhZGRlCXI5LCByOSwgcjkKKwluZWcJcjAsIHI5CisJc3RkCXI5LCAtOChyMTEpCisJYW5kCXIwLCByMCwgcjcKKwlzdWJmCXIzMSwgcjAsIHIzMQorTCg4KToKKwltcglyMywgcjMwCisJQ0FMTCgJbXBuX2ludmVydF9saW1iKQorCWxpCXIyNywgMAorCWFkZGljLglyNiwgcjI4LCAtMQorCWJsdC0JY3IwLCBMKDExMCkKKwltdGN0cglyMjgKKwlzbGRpCXI2LCByNiwgMworCUFMSUdOKDE2KQorTChubG9vcCk6CisJYWRkaQlyMTEsIHIzMSwgMQorCWxkeAlyOCwgcjI2LCByNgorCW11bGxkCXIwLCByMzEsIHIzCisJbXVsaGR1CXIxMCwgcjMxLCByMworCWFkZGkJcjYsIHI2LCAtOAorCWFkZGMJcjAsIHIwLCByOAorCWFkZGUJcjEwLCByMTAsIHIxMQorCW11bGxkCXIzMSwgcjEwLCByMzAKKwlzdWJmCXIzMSwgcjMxLCByOAlDIHIgPSBubCAtIHFoICogZAorCXN1YmZjCXIwLCByMzEsIHIwCUMgciA8PSBxbAorCXN1YmZlCXIwLCByMCwgcjAJQyByMCA9IC0ociA8PSBxbCkKKwlhbmQJcjksIHIzMCwgcjAKKwlhZGQJcjMxLCByMzEsIHI5CisJYWRkCXIxMCwgcjAsIHIxMAlDIHFoIC09IChyID49IHFsKQorCWNtcGxkCWNyNywgcjMxLCByMzAKKwliZ2UtCWNyNywgTCgxNjcpCitMKDUxKToKKwlzdGQJcjEwLCAwKHIyOSkKKwlhZGRpCXIyOSwgcjI5LCAtOAorCWJkbnoJTChubG9vcCkKKwliCUwoMTEwKQorCitMKDE2NCk6CisJc3ViZglyMzEsIHIzMCwgcjMxCisJYWRkaQlyMTAsIHIxMCwgMQorCWIJTCgxMjMpCitMKDE2Nyk6CisJc3ViZglyMzEsIHIzMCwgcjMxCisJYWRkaQlyMTAsIHIxMCwgMQorCWIJTCg1MSkKK0woMTY1KToKKwlzdWJmCXIzMSwgcjMwLCByMzEKKwlhZGRpCXI4LCByOCwgMQorCWIJTCgxMzQpCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvZGl2cmVtXzIuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L2RpdnJlbV8yLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTJjM2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L2RpdnJlbV8yLmFzbQpAQCAtMCwwICsxLDE4NyBAQAorZG5sICBQUEMtNjQgbXBuX2RpdnJlbV8yIC0tIERpdmlkZSBhbiBtcG4gbnVtYmVyIGJ5IGEgbm9ybWFsaXplZCAyLWxpbWIgbnVtYmVyLgorCitkbmwgIENvcHlyaWdodCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICAgICAgICAgICAgICAgIGN5Y2xlcy9saW1iCitDICAgICAgICAgICAgICAgICAgICAgICBub3JtICAgIGZyYWMKK0MgUE9XRVIzL1BQQzYzMAorQyBQT1dFUjQvUFBDOTcwICAgICAgICAgPyAgICAgICA/CitDIFBPV0VSNSAgICAgICAgICAgICAgICAzNyAgICAgID8KK0MgUE9XRVI2ICAgICAgICAgICAgICAgIDYyICAgICAgPworQyBQT1dFUjYgICAgICAgICAgICAgICAgMzAuNSAgICA/CisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyBxcCAgPSByMworQyBmbiAgPSByNAorQyB1cCAgPSByNQorQyB1biAgPSByNgorQyBkcCAgPSByNworCisKK2lmZGVmKGBEQVJXSU4nLCxgCitkZWZpbmUoYHIyJyxgcjMxJyknKQkJQyBGSVhNRSEKKworQVNNX1NUQVJUKCkKKworRVhURVJOX0ZVTkMobXBuX2ludmVydF9saW1iKQorCitQUk9MT0dVRShtcG5fZGl2cmVtXzIsdG9jKQorCW1mbHIJcjAKKwlzdGQJcjIzLCAtNzIocjEpCisJc3RkCXIyNCwgLTY0KHIxKQorCXN0ZAlyMjUsIC01NihyMSkKKwlzdGQJcjI2LCAtNDgocjEpCisJc3RkCXIyNywgLTQwKHIxKQorCXN0ZAlyMjgsIC0zMihyMSkKKwlzdGQJcjI5LCAtMjQocjEpCisJc3RkCXIzMCwgLTE2KHIxKQorCXN0ZAlyMzEsIC04KHIxKQorCXN0ZAlyMCwgMTYocjEpCisJc3RkdQlyMSwgLTE5MihyMSkKKwltcglyMjQsIHIzCisJbXIJcjI1LCByNAorCXNsZGkJcjAsIHI2LCAzCisJYWRkCXIyNiwgcjUsIHIwCisJYWRkaQlyMjYsIHIyNiwgLTI0CisJbGQJcjMwLCA4KHI3KQorCWxkCXIyOCwgMChyNykKKwlsZAlyMjksIDE2KHIyNikKKwlsZAlyMzEsIDgocjI2KQorCitpZmVsc2UoMCwxLGAKKwlsaQlyMjMsIDAKKwljbXBsZAljcjcsIHIyOSwgcjMwCisJYmx0CWNyNywgTCg4KQorCWJndAljcjcsIEwoOSkKKwljbXBsZAljcjAsIHIzMSwgcjI4CisJYmx0CWNyMCwgTCg4KQorTCg5KToJc3ViZmMJcjMxLCByMjgsIHIzMQorCXN1YmZlCXIyOSwgcjMwLCByMjkKKwlsaQlyMjMsIDEKKycsYAorCWxpCXIyMywgMAorCWNtcGxkCWNyNywgcjI5LCByMzAKKwlibHQJY3I3LCBMKDgpCisJbWZjcglyMAorCXJsd2lubQlyMCwgcjAsIDMwLCAzMSwgMzEKKwlzdWJmYwlyOSwgcjI4LCByMzEKKwlhZGR6ZS4JcjAsIHIwCisJbm9wCisJYmVxCWNyMCwgTCg4KQorCXN1YmZjCXIzMSwgcjI4LCByMzEKKwlzdWJmZQlyMjksIHIzMCwgcjI5CisJbGkJcjIzLCAxCisnKQorCitMKDgpOgorCWFkZAlyMjcsIHIyNSwgcjYKKwlhZGRpYy4JcjI3LCByMjcsIC0zCisJYmx0CWNyMCwgTCgxOCkKKwltcglyMywgcjMwCisJQ0FMTCgJbXBuX2ludmVydF9saW1iKQorCW11bGxkCXIxMCwgcjMsIHIzMAorCW11bGhkdQlyMCwgcjMsIHIyOAorCWFkZGMJcjgsIHIxMCwgcjI4CisJc3ViZmUJcjExLCByMSwgcjEKKwlhZGRjCXIxMCwgcjgsIHIwCisJYWRkemUuCXIxMSwgcjExCisJYmx0CWNyMCwgTCg5MSkKK0woNDApOgorCXN1YmZjCXIxMCwgcjMwLCByMTAKKwlhZGRtZS4JcjExLCByMTEKKwlhZGRpCXIzLCByMywgLTEKKwliZ2UJY3IwLCBMKDQwKQorTCg5MSk6CisJYWRkaQlyNSwgcjI3LCAgMQorCW10Y3RyCXI1CisJc2xkaQlyMCwgcjI3LCAzCisJYWRkCXIyNCwgcjI0LCByMAorCUFMSUdOKDE2KQorTChsb29wKToKKwltdWxoZHUJcjgsIHIyOSwgcjMKKwltdWxsZAlyNiwgcjI5LCByMworCWFkZGMJcjYsIHI2LCByMzEKKwlhZGRlCXI4LCByOCwgcjI5CisJY21wZAljcjcsIHIyNywgcjI1CisJbXVsbGQJcjAsIHIzMCwgcjgKKwltdWxoZHUJcjExLCByMjgsIHI4CisJbXVsbGQJcjEwLCByMjgsIHI4CisJc3ViZglyMzEsIHIwLCByMzEKKwlsaQlyNywgMAorCWJsdAljcjcsIEwoNjApCisJbGQJcjcsIDAocjI2KQorCWFkZGkJcjI2LCByMjYsIC04CisJbm9wCitMKDYwKToJc3ViZmMJcjcsIHIyOCwgcjcKKwlzdWJmZQlyMzEsIHIzMCwgcjMxCisJc3ViZmMJcjcsIHIxMCwgcjcKKwlzdWJmZQlyNCwgcjExLCByMzEKKwlzdWJmYwlyOSwgcjYsIHI0CisJc3ViZmUJcjksIHIxLCByMQorCWFuZGMJcjYsIHIyOCwgcjkKKwlhbmRjCXIwLCByMzAsIHI5CisJYWRkYwlyMzEsIHI3LCByNgorCWFkZGUJcjI5LCByNCwgcjAKKwlzdWJmCXI4LCByOSwgcjgKKwljbXBsZAljcjcsIHIyOSwgcjMwCisJYmdlLQljcjcsIEwoZml4KQorTChiY2spOglzdGQJcjgsIDAocjI0KQorCWFkZGkJcjI0LCByMjQsIC04CisJYWRkaQlyMjcsIHIyNywgLTEKKwliZG56CUwobG9vcCkKK0woMTgpOgorCXN0ZAlyMzEsIDgocjI2KQorCXN0ZAlyMjksIDE2KHIyNikKKwltcglyMywgcjIzCisJYWRkaQlyMSwgcjEsIDE5MgorCWxkCXIwLCAxNihyMSkKKwltdGxyCXIwCisJbGQJcjIzLCAtNzIocjEpCisJbGQJcjI0LCAtNjQocjEpCisJbGQJcjI1LCAtNTYocjEpCisJbGQJcjI2LCAtNDgocjEpCisJbGQJcjI3LCAtNDAocjEpCisJbGQJcjI4LCAtMzIocjEpCisJbGQJcjI5LCAtMjQocjEpCisJbGQJcjMwLCAtMTYocjEpCisJbGQJcjMxLCAtOChyMSkKKwlibHIKK0woZml4KToKKwltZmNyCXIwCisJcmx3aW5tCXIwLCByMCwgMzAsIDMxLCAzMQorCXN1YmZjCXI5LCByMjgsIHIzMQorCWFkZHplLglyMCwgcjAKKwliZXEJY3IwLCBMKGJjaykKKwlzdWJmYwlyMzEsIHIyOCwgcjMxCisJc3ViZmUJcjI5LCByMzAsIHIyOQorCWFkZGkJcjgsIHI4LCAxCisJYglMKGJjaykKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9nY2RfMTEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L2djZF8xMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk3OTJlNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9nY2RfMTEuYXNtCkBAIC0wLDAgKzEsNzcgQEAKK2RubCAgUG93ZXJQQy02NCBtcG5fZ2NkXzExLgorCitkbmwgIENvcHlyaWdodCAyMDAwLTIwMDIsIDIwMDUsIDIwMDksIDIwMTEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCQkgICAgY3ljbGVzL2JpdCAoYXBwcm94KQorQyBQT1dFUjMvUFBDNjMwCQkgPworQyBQT1dFUjQvUFBDOTcwCQkgOC41CW9ic29sZXRlCitDIFBPV0VSNQkJID8KK0MgUE9XRVI2CQkgPworQyBQT1dFUjcJCSA5LjQJb2Jzb2xldGUKK0MgUE9XRVI4CQkgPworQyBQT1dFUjkJCSA/CitDIE51bWJlcnMgbWVhc3VyZWQgd2l0aDogc3BlZWQgLUNEIC1zMTYtNjQgLXQ0OCBtcG5fZ2NkXzEKKworZGVmaW5lKGB1MCcsICAgIGByMycpCitkZWZpbmUoYHYwJywgICAgYHI0JykKKworZGVmaW5lKGBtYXNrJywgYHIwJylkbmwKK2RlZmluZShgYTEnLCAgIGByNCcpZG5sCitkZWZpbmUoYGEyJywgICBgcjUnKWRubAorZGVmaW5lKGBkMScsICAgYHI2JylkbmwKK2RlZmluZShgZDInLCAgIGByNycpZG5sCitkZWZpbmUoYGNudCcsICBgcjknKWRubAorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2djZF8xMSkKKwlsaQlyMTIsIDYzCisJbXIJcjgsIHYwCisJc3ViZi4JcjEwLCB1MCwgdjAJCUMgcjEwID0gZCAtIGEKKwliZXEJTChlbmQpCisKKwlBTElHTigxNikKK0wodG9wKToJc3ViZmMJcjExLCByOCwgcjMJCUMgcjExID0gYSAtIGQKKwlhbmQJZDIsIHIxMSwgcjEwCisJc3ViZmUJbWFzaywgbWFzaywgbWFzaworCWNudGx6ZAljbnQsIGQyCisJYW5kCWExLCByMTAsIG1hc2sJCUMgZCAtIGEKKwlhbmRjCWEyLCByMTEsICBtYXNrCQlDIGEgLSBkCisJYW5kCWQxLCByMywgbWFzawkJQyBhCisJYW5kYwlkMiwgcjgsIG1hc2sJCUMgZAorCW9yCXIzLCBhMSwgYTIJCUMgbmV3IGEKKwlzdWJmCWNudCwgY250LCByMTIKKwlvcglyOCwgZDEsIGQyCQlDIG5ldyBkCisJc3JkCXIzLCByMywgY250CisJc3ViZi4JcjEwLCByMywgcjgJCUMgcjEwID0gZCAtIGEKKwlibmUJTCh0b3ApCisKK0woZW5kKToJYmxyCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvZ21wLW1wYXJhbS5oIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODMwNWY0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDgyIEBACisvKiBQb3dlclBDLTY0IGdtcC1tcGFyYW0uaCAtLSBDb21waWxlci9tYWNoaW5lIHBhcmFtZXRlciBoZWFkZXIgZmlsZS4KKworQ29weXJpZ2h0IDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNkZWZpbmUgR01QX0xJTUJfQklUUyA2NAorI2RlZmluZSBHTVBfTElNQl9CWVRFUyA4CisKKy8qIDE2MDBNSHogUFBDOTcwICovCisKKy8qIEdlbmVyYXRlZCBieSB0dW5ldXAuYywgMjAwOS0wMS0xNCwgZ2NjIDQuMCAqLworCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgIDE0CisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgIDkzCisjZGVmaW5lIE1VTF9UT09NNDRfVEhSRVNIT0xEICAgICAgICAgICAgMTM1CisKKyNkZWZpbmUgU1FSX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgIDYKKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAgNzQKKyNkZWZpbmUgU1FSX1RPT000X1RIUkVTSE9MRCAgICAgICAgICAgICAxMzYKKworI2RlZmluZSBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDQ0CisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgMjM0CisKKyNkZWZpbmUgRElWX1NCX1BSRUlOVl9USFJFU0hPTEQgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBESVZfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAzMworI2RlZmluZSBQT1dNX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICA4OQorCisjZGVmaW5lIE1BVFJJWDIyX1NUUkFTU0VOX1RIUkVTSE9MRCAgICAgIDE1CisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDkzCisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMjM3CisjZGVmaW5lIEdDREVYVF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgMjczCisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgTU9EXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIE1PRF8xXzJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIE1PRF8xXzRfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAwCisjZGVmaW5lIFVTRV9QUkVJTlZfTU9EXzEgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgTU9ERVhBQ1RfMV9PRERfVEhSRVNIT0xEICAgICAgICAgIDAgIC8qIGFsd2F5cyAobmF0aXZlKSAqLworCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgIDEyCisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgIDI0CisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgNjUwCisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAxNzEzCisKKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRSAgeyAzMzYsIDY3MiwgMTg1NiwgMjgxNiwgNzE2OCwgMjA0ODAsIDgxOTIwLCAzMjc2ODAsIDAgfQorI2RlZmluZSBNVUxfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgIDMwNAorI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgNDIyNAorCisjZGVmaW5lIFNRUl9GRlRfVEFCTEUgIHsgMjcyLCA2NzIsIDE2MDAsIDI4MTYsIDcxNjgsIDIwNDgwLCA4MTkyMCwgMzI3NjgwLCA3ODY0MzIsIDAgfQorI2RlZmluZSBTUVJfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgIDI3MgorI2RlZmluZSBTUVJfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgMjY4OApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L2ludmVydF9saW1iLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9pbnZlcnRfbGltYi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZkYmE2NAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9pbnZlcnRfbGltYi5hc20KQEAgLTAsMCArMSw4OCBAQAorZG5sICBQb3dlclBDLTY0IG1wbl9pbnZlcnRfbGltYiAtLSBJbnZlcnQgYSBub3JtYWxpemVkIGxpbWIuCisKK2RubCAgQ29weXJpZ2h0IDIwMDQtMjAwNiwgMjAwOCwgMjAxMCwgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgICAgICAgICAgY3ljbGVzL2xpbWIgKGFwcHJveGltYXRlKQorQyBQT1dFUjMvUFBDNjMwICAgICAgICAgODAKK0MgUE9XRVI0L1BQQzk3MCAgICAgICAgIDg2CitDIFBPV0VSNSAgICAgICAgICAgICAgICA4NgorQyBQT1dFUjYgICAgICAgICAgICAgICAxNzAKK0MgUE9XRVI3ICAgICAgICAgICAgICAgIDY2CisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5faW52ZXJ0X2xpbWIsdG9jKQorCUxFQUwoCXIxMiwgYXBwcm94X3RhYikKKwlzcmRpCXI5LCByMywgMzIKKwlybHdpbm0JcjksIHI5LCAxMCwgMjMsIDMwCUMgKGQgPj4gNTUpICYgMHgxZmUKKwlzcmRpCXIxMCwgcjMsIDI0CQlDIGQgPj4gMjQKKwlsaXMJcjExLCAweDEwMDAKKwlybGRpY2wJcjgsIHIzLCAwLCA2MwkJQyBkIG1vZCAyCisJYWRkaQlyMTAsIHIxMCwgMQkJQyBkNDAKKwlzbGRpCXIxMSwgcjExLCAzMgkJQyAyXjYwCisJc3JkaQlyNywgcjMsIDEJCUMgZC8yCisJYWRkCXI3LCByNywgcjgJCUMgZDYzID0gY2VpbChkLzIpCisJbmVnCXI4LCByOAkJCUMgbWFzayA9IC0oZCBtb2QgMikKKwlsaHp4CXIwLCByOSwgcjEyCisJbXVsbHcJcjksIHIwLCByMAkJQyB2MCp2MAorCXNsZGkJcjYsIHIwLCAxMQkJQyB2MCA8PCAxMQorCWFkZGkJcjAsIHI2LCAtMQkJQyAodjAgPDwgMTEpIC0gMQorCW11bGxkCXI5LCByOSwgcjEwCQlDIHYwKnYwKmQ0MAorCXNyZGkJcjksIHI5LCA0MAkJQyB2MCp2MCpkNDAgPj4gNDAKKwlzdWJmCXI5LCByOSwgcjAJCUMgdjEgPSAodjAgPDwgMTEpIC0gKHYwKnYwKmQ0MCA+PiA0MCkgLSAxCisJbXVsbGQJcjAsIHI5LCByMTAJCUMgdjEqZDQwCisJc2xkaQlyNiwgcjksIDEzCQlDIHYxIDw8IDEzCisJc3ViZglyMCwgcjAsIHIxMQkJQyAyXjYwIC0gdjEqZDQwCisJbXVsbGQJcjAsIHIwLCByOQkJQyB2MSAqICgyXjYwIC0gdjEqZDQwKQorCXNyZGkJcjAsIHIwLCA0NwkJQyB2MSAqICgyXjYwIC0gdjEqZDQwKSA+PiA0NworCWFkZAlyMCwgcjAsIHI2CQlDIHYyID0gKHYxIDw8IDEzKSArICh2MSAqICgyXjYwIC0gdjEqZDQwKSA+PiA0NykKKwltdWxsZAlyMTEsIHIwLCByNwkJQyB2MiAqIGQ2MworCXNyZGkJcjEwLCByMCwgMQkJQyB2MiA+PiAxCisJc2xkaQlyOSwgcjAsIDMxCQlDIHYyIDw8IDMxCisJYW5kCXI4LCByMTAsIHI4CQlDICh2MiA+PiAxKSAmIG1hc2sKKwlzdWJmCXI4LCByMTEsIHI4CQlDICgodjIgPj4gMSkgJiBtYXNrKSAtIHYyICogZDYzCisJbXVsaGR1CXIwLCByOCwgcjAJCUMgcDEgPSB2MiAqICgoKHYyID4+IDEpICYgbWFzaykgLSB2MiAqIGQ2MykKKwlzcmRpCXIwLCByMCwgMQkJQyBwMSA+PiAxCisJYWRkCXIwLCByMCwgcjkJCUMgdjMgPSAodjIgPDwgMzEpICsgKHAxID4+IDEpCisJbm9wCisJbXVsbGQJcjExLCByMCwgcjMKKwltdWxoZHUJcjksIHIwLCByMworCWFkZGMJcjEwLCByMTEsIHIzCisJYWRkZQlyMywgcjksIHIzCisJc3ViZglyMywgcjMsIHIwCisJYmxyCitFUElMT0dVRSgpCisKK0RFRl9PQkpFQ1QoYXBwcm94X3RhYikKK2Zvcmxvb3AoaSwyNTYsNTEyLTEsZG5sCitgCS5zaG9ydAlldmFsKDB4N2ZkMDAvaSkKKycpZG5sCitFTkRfT0JKRUNUKGFwcHJveF90YWIpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9tb2RfMV8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9tb2RfMV8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzMzNzMwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L21vZF8xXzEuYXNtCkBAIC0wLDAgKzEsMTY0IEBACitkbmwgIFBvd2VyUEMtNjQgbXBuX21vZF8xXzFwCisKK2RubCAgQ29weXJpZ2h0IDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgICAgICAgICAgICBjeWNsZXMvbGltYgorQyBQT1dFUjMvUFBDNjMwICAgICAgICAgID8KK0MgUE9XRVI0L1BQQzk3MCAgICAgICAgIDE3CitDIFBPV0VSNSAgICAgICAgICAgICAgICAxNgorQyBQT1dFUjYgICAgICAgICAgICAgICAgMzAKK0MgUE9XRVI3ICAgICAgICAgICAgICAgIDEwLjIKKworQyBUT0RPCitDICAqIE9wdGltaXNlLCBpbiBwYXJ0aWN1bGFyIHRoZSBjcHMgZnVuY3Rpb24uICBUaGlzIHdhcyBjb21waWxlci1nZW5lcmF0ZWQgYW5kCitDICAgIHRoZW4gaGFuZCBvcHRpbWlzZWQuCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBhcCcsICBgcjMnKQorZGVmaW5lKGBuJywgICBgcjQnKQorZGVmaW5lKGBkJywgICBgcjUnKQorZGVmaW5lKGBjcHMnLCBgcjYnKQorCitBU01fU1RBUlQoKQorCitFWFRFUk5fRlVOQyhtcG5faW52ZXJ0X2xpbWIpCisKK1BST0xPR1VFKG1wbl9tb2RfMV8xcCkKKwlzbGRpCXIxMCwgcjQsIDMKKwlhZGRpCXI0LCByNCwgLTEKKwlhZGQJcjMsIHIzLCByMTAKKwlsZAlyMCwgMTYocjYpCQlDIEIxbW9kYgorCWxkCXIxMiwgMjQocjYpCQlDIEIybW9kYgorCWxkCXI5LCAtOChyMykKKwlsZAlyMTAsIC0xNihyMykKKwltdGN0cglyNAorCW11bGhkdQlyOCwgcjksIHIwCisJbXVsbGQJcjcsIHI5LCByMAorCWFkZGMJcjExLCByNywgcjEwCisJYWRkemUJcjksIHI4CisJYmR6CUwoZW5kKQorCisJQUxJR04oMTYpCitMKHRvcCk6CWxkCXI0LCAtMjQocjMpCisJYWRkaQlyMywgcjMsIC04CisJbm9wCisJbXVsbGQJcjEwLCByMTEsIHIwCisJbXVsbGQJcjgsIHI5LCByMTIKKwltdWxoZHUJcjExLCByMTEsIHIwCisJbXVsaGR1CXI5LCByOSwgcjEyCisJYWRkYwlyNywgcjEwLCByNAorCWFkZHplCXIxMCwgcjExCisJYWRkYwlyMTEsIHI4LCByNworCWFkZGUJcjksIHI5LCByMTAKKwliZG56CUwodG9wKQorCitMKGVuZCk6CitpZmRlZihgSEFWRV9MSU1CX0xJVFRMRV9FTkRJQU4nLAorYAlsd3oJcjAsIDgocjYpJywKK2AJbHd6CXIwLCAxMihyNiknKQorCWxkCXIzLCAwKHI2KQorCWNtcGRpCWNyNywgcjAsIDAKKwliZXEtCWNyNywgTCg0KQorCXN1YmZpYwlyMTAsIHIwLCA2NAorCXNsZAlyOSwgcjksIHIwCisJc3JkCXIxMCwgcjExLCByMTAKKwlvcglyOSwgcjEwLCByOQorTCg0KToJc3ViZmMJcjEwLCByNSwgcjkKKwlzdWJmZQlyMTAsIHIxMCwgcjEwCisJbmFuZAlyMTAsIHIxMCwgcjEwCisJc2xkCXIxMSwgcjExLCByMAorCWFuZAlyMTAsIHIxMCwgcjUKKwlzdWJmCXI5LCByMTAsIHI5CisJbXVsaGR1CXIxMCwgcjksIHIzCisJbXVsbGQJcjMsIHI5LCByMworCWFkZGkJcjksIHI5LCAxCisJYWRkYwlyOCwgcjMsIHIxMQorCWFkZGUJcjMsIHIxMCwgcjkKKwltdWxsZAlyMywgcjMsIHI1CisJc3ViZglyMywgcjMsIHIxMQorCWNtcGxkCWNyNywgcjgsIHIzCisJYmdlCWNyNywgTCg1KQkJQyBGSVhNRTogTWFrZSBicmFuY2gtbGVzcworCWFkZAlyMywgcjMsIHI1CitMKDUpOgljbXBsZAljcjcsIHIzLCByNQorCWJnZS0JY3I3LCBMKDEwKQorCXNyZAlyMywgcjMsIHIwCisJYmxyCisKK0woMTApOglzdWJmCXIzLCByNSwgcjMKKwlzcmQJcjMsIHIzLCByMAorCWJscgorRVBJTE9HVUUoKQorCitQUk9MT0dVRShtcG5fbW9kXzFfMXBfY3BzLHRvYykKKwltZmxyCXIwCisJc3RkCXIyOSwgLTI0KHIxKQorCXN0ZAlyMzAsIC0xNihyMSkKKwlzdGQJcjMxLCAtOChyMSkKKwljbnRsemQJcjMxLCByNAorCXN0ZAlyMCwgMTYocjEpCisJZXh0c3cJcjMxLCByMzEKKwltcglyMjksIHIzCisJc3RkdQlyMSwgLTE0NChyMSkKKwlzbGQJcjMwLCByNCwgcjMxCisJbXIJcjMsIHIzMAorCUNBTEwoCW1wbl9pbnZlcnRfbGltYikKKwljbXBkaQljcjcsIHIzMSwgMAorCW5lZwlyMCwgcjMwCisJYmVxLQljcjcsIEwoMTMpCisJc3ViZmljCXIxMSwgcjMxLCA2NAorCWxpCXIwLCAxCisJbmVnCXI5LCByMzAKKwlzcmQJcjExLCByMywgcjExCisJc2xkCXIwLCByMCwgcjMxCisJb3IJcjAsIHIxMSwgcjAKKwltdWxsZAlyMCwgcjAsIHI5CitMKDEzKToJbXVsaGR1CXI5LCByMCwgcjMKKwltdWxsZAlyMTEsIHIwLCByMworCWFkZAlyOSwgcjAsIHI5CisJbm9yCXI5LCByOSwgcjkKKwltdWxsZAlyOSwgcjksIHIzMAorCWNtcGxkCWNyNywgcjExLCByOQorCWJnZQljcjcsIEwoMTQpCisJYWRkCXI5LCByOSwgcjMwCitMKDE0KToJYWRkaQlyMSwgcjEsIDE0NAorCXNyZAlyMCwgcjAsIHIzMQorCXN0ZAlyMzEsIDgocjI5KQorCXN0ZAlyMywgMChyMjkpCisJc3RkCXIwLCAxNihyMjkpCisJbGQJcjAsIDE2KHIxKQorCXNyZAlyOSwgcjksIHIzMQorCWxkCXIzMCwgLTE2KHIxKQorCWxkCXIzMSwgLTgocjEpCisJc3RkCXI5LCAyNChyMjkpCisJbGQJcjI5LCAtMjQocjEpCisJbXRscglyMAorCWJscgorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L21vZF8xXzQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L21vZF8xXzQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiN2Q2YmYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvbW9kXzFfNC5hc20KQEAgLTAsMCArMSwyNzAgQEAKK2RubCAgUG93ZXJQQy02NCBtcG5fbW9kXzFzXzRwCisKK2RubCAgQ29weXJpZ2h0IDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgICAgICAgICAgICBjeWNsZXMvbGltYgorQyBQT1dFUjMvUFBDNjMwICAgICAgICAgID8KK0MgUE9XRVI0L1BQQzk3MCAgICAgICAgICA5CitDIFBPV0VSNSAgICAgICAgICAgICAgICAgOQorQyBQT1dFUjYgICAgICAgICAgICAgICAgMTMKK0MgUE9XRVI3ICAgICAgICAgICAgICAgIDMuNQorCitDIFRPRE8KK0MgICogT3B0aW1pc2UsIGluIHBhcnRpY3VsYXIgdGhlIGNwcyBmdW5jdGlvbi4gIFRoaXMgd2FzIGNvbXBpbGVyLWdlbmVyYXRlZCBhbmQKK0MgICAgdGhlbiBoYW5kIG9wdGltaXNlZC4KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYGFwJywgIGByMycpCitkZWZpbmUoYG4nLCAgIGByNCcpCitkZWZpbmUoYGQnLCAgIGByNScpCitkZWZpbmUoYGNwcycsIGByNicpCisKK0FTTV9TVEFSVCgpCisKK0VYVEVSTl9GVU5DKG1wbl9pbnZlcnRfbGltYikKKworUFJPTE9HVUUobXBuX21vZF8xc180cCkKKwlzdGQJcjIzLCAtNzIocjEpCisJbGQJcjIzLCA0OChjcHMpCisJc3RkCXIyNCwgLTY0KHIxKQorCXN0ZAlyMjUsIC01NihyMSkKKwlsZAlyMjQsIDMyKGNwcykKKwlsZAlyMjUsIDI0KGNwcykKKwlzdGQJcjI2LCAtNDgocjEpCisJc3RkCXIyNywgLTQwKHIxKQorCWxkCXIyNiwgMTYoY3BzKQorCXN0ZAlyMjgsIC0zMihyMSkKKwlzdGQJcjI5LCAtMjQocjEpCisJc3RkCXIzMCwgLTE2KHIxKQorCXN0ZAlyMzEsIC04KHIxKQorCWxkCXIzMCwgNDAoY3BzKQorCisJcmxkaWNsLglyMCwgbiwgMCw2MgorCXNsZGkJcjMxLCBuLCAzCisJYWRkCWFwLCBhcCwgcjMxCQlDIG1ha2UgYXAgcG9pbnQgYXQgZW5kIG9mIG9wZXJhbmQKKworCWNtcGRpCWNyNywgcjAsIDIKKwliZXEJY3IwLCBMKGIwMCkKKwlibHQJY3I3LCBMKGIwMSkKKwliZXEJY3I3LCBMKGIxMCkKKworTChiMTEpOglsZAlyMTEsIC0xNihhcCkKKwlsZAlyOSwgLTgoYXApCisJbGQJcjAsIC0yNChhcCkKKwltdWxoZHUJcjI3LCByMTEsIHIyNgorCW11bGxkCXI4LCByMTEsIHIyNgorCW11bGhkdQlyMTEsIHI5LCByMjUKKwltdWxsZAlyOSwgcjksIHIyNQorCWFkZGMJcjMxLCByOCwgcjAKKwlhZGR6ZQlyMTAsIHIyNworCWFkZGMJcjAsIHI5LCByMzEKKwlhZGRlCXI5LCByMTEsIHIxMAorCWFkZGkJYXAsIGFwLCAtNDAKKwliCUwoNikKKworCUFMSUdOKDE2KQorTChiMDApOglsZAlyMTEsIC0yNChhcCkKKwlsZAlyMTAsIC0xNihhcCkKKwlsZAlyOSwgLTgoYXApCisJbGQJcjAsIC0zMihhcCkKKwltdWxsZAlyOCwgcjExLCByMjYKKwltdWxoZHUJcjcsIHIxMCwgcjI1CisJbXVsaGR1CXIyNywgcjExLCByMjYKKwltdWxoZHUJcjExLCByOSwgcjI0CisJbXVsbGQJcjEwLCByMTAsIHIyNQorCW11bGxkCXI5LCByOSwgcjI0CisJYWRkYwlyMzEsIHI4LCByMAorCWFkZHplCXIwLCByMjcKKwlhZGRjCXI4LCByMzEsIHIxMAorCWFkZGUJcjEwLCByMCwgcjcKKwlhZGRjCXIwLCByOSwgcjgKKwlhZGRlCXI5LCByMTEsIHIxMAorCWFkZGkJYXAsIGFwLCAtNDgKKwliCUwoNikKKworCUFMSUdOKDE2KQorTChiMDEpOglsaQlyOSwgMAorCWxkCXIwLCAtOChhcCkKKwlhZGRpCWFwLCBhcCwgLTI0CisJYglMKDYpCisKKwlBTElHTigxNikKK0woYjEwKToJbGQJcjksIC04KGFwKQorCWxkCXIwLCAtMTYoYXApCisJYWRkaQlhcCwgYXAsIC0zMgorCisJQUxJR04oMTYpCitMKDYpOglhZGRpCXIxMCwgbiwgMworCXNyZGkJcjcsIHIxMCwgMgorCW10Y3RyCXI3CisJYmR6CUwoZW5kKQorCisJQUxJR04oMTYpCitMKHRvcCk6CWxkCXIzMSwgLTE2KGFwKQorCWxkCXIxMCwgLTgoYXApCisJbGQJcjExLCA4KGFwKQorCWxkCXIxMiwgMChhcCkKKwltdWxsZAlyMjksIHIwLCByMzAJCUMgcmwgKiBCNG1vZGIKKwltdWxoZHUJcjAsICByMCwgcjMwCQlDIHJsICogQjRtb2RiCisJbXVsaGR1CXIyNywgcjEwLCByMjYKKwltdWxsZAlyMTAsIHIxMCwgcjI2CisJbXVsaGR1CXI3LCByOSwgcjIzCQlDIHJoICogQjVtb2RiCisJbXVsbGQJcjksIHI5LCByMjMJCUMgcmggKiBCNW1vZGIKKwltdWxoZHUJcjI4LCByMTEsIHIyNAorCW11bGxkCXIxMSwgcjExLCByMjQKKwltdWxoZHUJcjQsIHIxMiwgcjI1CisJbXVsbGQJcjEyLCByMTIsIHIyNQorCWFkZGMJcjgsIHIxMCwgcjMxCisJYWRkemUJcjEwLCByMjcKKwlhZGRpCWFwLCBhcCwgLTMyCisJYWRkYwlyMjcsIHI4LCByMTIKKwlhZGRlCXIxMiwgcjEwLCByNAorCWFkZGMJcjExLCByMjcsIHIxMQorCWFkZGUJcjMxLCByMTIsIHIyOAorCWFkZGMJcjEyLCByMTEsIHIyOQorCWFkZGUJcjQsIHIzMSwgcjAKKwlhZGRjCXIwLCByOSwgcjEyCisJYWRkZQlyOSwgcjcsIHI0CisJYmRueglMKHRvcCkKKworTChlbmQpOgoraWZkZWYoYEhBVkVfTElNQl9MSVRUTEVfRU5ESUFOJywKK2AJbHd6CXIzLCA4KGNwcyknLAorYAlsd3oJcjMsIDEyKGNwcyknKQorCW11bGxkCXIxMCwgcjksIHIyNgorCW11bGhkdQlyOSwgcjksIHIyNgorCWFkZGMJcjExLCByMCwgcjEwCisJYWRkemUJcjksIHI5CisJbGQJcjEwLCAwKGNwcykKKwlzdWJmaWMJcjgsIHIzLCA2NAorCXNsZAlyOSwgcjksIHIzCisJc3JkCXI4LCByMTEsIHI4CisJc2xkCXIxMSwgcjExLCByMworCW9yCXI5LCByOCwgcjkKKwltdWxsZAlyMCwgcjksIHIxMAorCW11bGhkdQlyMTAsIHI5LCByMTAKKwlhZGRpCXI5LCByOSwgMQorCWFkZGMJcjgsIHIwLCByMTEKKwlhZGRlCXIwLCByMTAsIHI5CisJbXVsbGQJcjAsIHIwLCBkCisJc3ViZglyMCwgcjAsIHIxMQorCWNtcGxkCWNyNywgcjgsIHIwCisJYmdlCWNyNywgTCg5KQorCWFkZAlyMCwgcjAsIGQKK0woOSk6CWNtcGxkCWNyNywgcjAsIGQKKwliZ2UtCWNyNywgTCgxNikKK0woMTApOglzcmQJcjMsIHIwLCByMworCWxkCXIyMywgLTcyKHIxKQorCWxkCXIyNCwgLTY0KHIxKQorCWxkCXIyNSwgLTU2KHIxKQorCWxkCXIyNiwgLTQ4KHIxKQorCWxkCXIyNywgLTQwKHIxKQorCWxkCXIyOCwgLTMyKHIxKQorCWxkCXIyOSwgLTI0KHIxKQorCWxkCXIzMCwgLTE2KHIxKQorCWxkCXIzMSwgLTgocjEpCisJYmxyCisKK0woMTYpOglzdWJmCXIwLCBkLCByMAorCWIJTCgxMCkKK0VQSUxPR1VFKCkKKworUFJPTE9HVUUobXBuX21vZF8xc180cF9jcHMsdG9jKQorCW1mbHIJcjAKKwlzdGQJcjI5LCAtMjQocjEpCisJc3RkCXIzMCwgLTE2KHIxKQorCW1yCXIyOSwgcjMKKwlzdGQJcjAsIDE2KHIxKQorCXN0ZAlyMzEsIC04KHIxKQorCXN0ZHUJcjEsIC0xNDQocjEpCisJY250bHpkCXIzMSwgcjQKKwlzbGQJcjMwLCByNCwgcjMxCisJbXIJcjMsIHIzMAorCUNBTEwoCW1wbl9pbnZlcnRfbGltYikKKwlzdWJmaWMJcjksIHIzMSwgNjQKKwlsaQlyMTAsIDEKKwlzbGQJcjEwLCByMTAsIHIzMQorCXNyZAlyOSwgcjMsIHI5CisJbmVnCXIwLCByMzAKKwlvcglyMTAsIHIxMCwgcjkKKwltdWxsZAlyMTAsIHIxMCwgcjAKKwltdWxoZHUJcjExLCByMTAsIHIzCisJbm9yCXIxMSwgcjExLCByMTEKKwlzdWJmCXIxMSwgcjEwLCByMTEKKwltdWxsZAlyMTEsIHIxMSwgcjMwCisJbXVsbGQJcjAsIHIxMCwgcjMKKwljbXBsZAljcjcsIHIwLCByMTEKKwliZ2UJY3I3LCBMKDE4KQorCWFkZAlyMTEsIHIxMSwgcjMwCitMKDE4KToJbXVsaGR1CXI5LCByMTEsIHIzCisJYWRkCXI5LCByMTEsIHI5CisJbm9yCXI5LCByOSwgcjkKKwltdWxsZAlyOSwgcjksIHIzMAorCW11bGxkCXIwLCByMTEsIHIzCisJY21wbGQJY3I3LCByMCwgcjkKKwliZ2UJY3I3LCBMKDE5KQorCWFkZAlyOSwgcjksIHIzMAorTCgxOSk6CW11bGhkdQlyMCwgcjksIHIzCisJYWRkCXIwLCByOSwgcjAKKwlub3IJcjAsIHIwLCByMAorCW11bGxkCXIwLCByMCwgcjMwCisJbXVsbGQJcjgsIHI5LCByMworCWNtcGxkCWNyNywgcjgsIHIwCisJYmdlCWNyNywgTCgyMCkKKwlhZGQJcjAsIHIwLCByMzAKK0woMjApOgltdWxoZHUJcjgsIHIwLCByMworCWFkZAlyOCwgcjAsIHI4CisJbm9yCXI4LCByOCwgcjgKKwltdWxsZAlyOCwgcjgsIHIzMAorCW11bGxkCXI3LCByMCwgcjMKKwljbXBsZAljcjcsIHI3LCByOAorCWJnZQljcjcsIEwoMjEpCisJYWRkCXI4LCByOCwgcjMwCitMKDIxKToJc3JkCXIwLCByMCwgcjMxCisJYWRkaQlyMSwgcjEsIDE0NAorCXNyZAlyOCwgcjgsIHIzMQorCXNyZAlyMTAsIHIxMCwgcjMxCisJc3JkCXIxMSwgcjExLCByMzEKKwlzdGQJcjAsIDQwKHIyOSkKKwlzdGQJcjMxLCA4KHIyOSkKKwlzcmQJcjksIHI5LCByMzEKKwlsZAlyMCwgMTYocjEpCisJbGQJcjMwLCAtMTYocjEpCisJc3RkCXI4LCA0OChyMjkpCisJc3RkCXIzLCAwKHIyOSkKKwltdGxyCXIwCisJbGQJcjMxLCAtOChyMSkKKwlzdGQJcjEwLCAxNihyMjkpCisJc3RkCXIxMSwgMjQocjI5KQorCXN0ZAlyOSwgMzIocjI5KQorCWxkCXIyOSwgLTI0KHIxKQorCWJscgorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L21vZF8zNGxzdWIxLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9tb2RfMzRsc3ViMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM1ZTBlMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9tb2RfMzRsc3ViMS5hc20KQEAgLTAsMCArMSwxMzIgQEAKK2RubCAgUG93ZXJQQy02NCBtcG5fbW9kXzM0bHN1YjEgLS0gbW9kdWxvIDJeNDgtMS4KKworZG5sICBDb3B5cmlnaHQgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgICAgICAgICAgIGN5Y2xlcy9saW1iCitDIFBPV0VSMy9QUEM2MzAgICAgICAgICAgMS4zMworQyBQT1dFUjQvUFBDOTcwICAgICAgICAgIDEuNQorQyBQT1dFUjUgICAgICAgICAgICAgICAgIDEuMzIKK0MgUE9XRVI2ICAgICAgICAgICAgICAgICAyLjM1CitDIFBPV0VSNyAgICAgICAgICAgICAgICAgMQorCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgdXAnLGByMycpCitkZWZpbmUoYG4nLGByNCcpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fbW9kXzM0bHN1YjEpCisJbGkJcjgsIDAKKwlsaQlyOSwgMAorCWxpCXIxMCwgMAorCWxpCXIxMSwgMAorCisJY21wZGkJY3I2LCBuLCAzCisJYmx0CWNyNiwgTChsdDMpCisKKwlsaQlyMCwgLTB4NTU1NgkJQyAweEZGRkZGRkZGRkZGRkFBQUEKKwlybGRpbWkJcjAsIHIwLCAxNiwgMzIJCUMgMHhGRkZGRkZGRkFBQUFBQUFBCisJcmxkaW1pCXIwLCByMCwgMzIsIDYzCQlDIDB4QUFBQUFBQUFBQUFBQUFBQgorCW11bGhkdQlyMCwgcjAsIG4KKwlzcmRpCXIwLCByMCwgMQkJQyByMCA9IFtuIC8gM10KKwltdGN0cglyMAorCisJbGQJcjUsIDAodXApCisJbGQJcjYsIDgodXApCisJbGQJcjcsIDE2KHVwKQorCWFkZGkJdXAsIHVwLCAyNAorCWJkeglMKGVuZCkKKworCUFMSUdOKDE2KQorTCh0b3ApOglhZGRjCXI4LCByOCwgcjUKKwlub3AKKwlsZAlyNSwgMCh1cCkKKwlhZGRlCXI5LCByOSwgcjYKKwlsZAlyNiwgOCh1cCkKKwlhZGRlCXIxMCwgcjEwLCByNworCWxkCXI3LCAxNih1cCkKKwlhZGRpCXVwLCB1cCwgNDgKKwlhZGR6ZQlyMTEsIHIxMQorCWJkeglMKGVuZHgpCisJYWRkYwlyOCwgcjgsIHI1CisJbm9wCisJbGQJcjUsIC0yNCh1cCkKKwlhZGRlCXI5LCByOSwgcjYKKwlsZAlyNiwgLTE2KHVwKQorCWFkZGUJcjEwLCByMTAsIHI3CisJbGQJcjcsIC04KHVwKQorCWFkZHplCXIxMSwgcjExCisJYmRueglMKHRvcCkKKworCWFkZGkJdXAsIHVwLCAyNAorTChlbmR4KToKKwlhZGRpCXVwLCB1cCwgLTI0CisKK0woZW5kKToJYWRkYwlyOCwgcjgsIHI1CisJYWRkZQlyOSwgcjksIHI2CisJYWRkZQlyMTAsIHIxMCwgcjcKKwlhZGR6ZQlyMTEsIHIxMQorCisJc2xkaQlyNSwgcjAsIDEKKwlhZGQJcjUsIHI1LCByMAkJQyByMTEgPSBuIC8gMyAqIDMKKwlzdWIJbiwgbiwgcjUJCUMgbiA9IG4gbW9kIDMKK0wobHQzKToJY21wZGkJY3I2LCBuLCAxCisJYmx0CWNyNiwgTCgyKQorCisJbGQJcjUsIDAodXApCisJYWRkYwlyOCwgcjgsIHI1CisJbGkJcjYsIDAKKwliZXEJY3I2LCBMKDEpCisKKwlsZAlyNiwgOCh1cCkKK0woMSk6CWFkZGUJcjksIHI5LCByNgorCWFkZHplCXIxMCwgcjEwCisJYWRkemUJcjExLCByMTEKKworTCgyKToJcmxkaWNsCXIwLCByOCwgMCwgMTYJCUMgcjAgPSByOCBtb2QgMl40OAorCXNyZGkJcjMsIHI4LCA0OAkJQyByMyA9IHI4IGRpdiAyXjQ4CisJcmxkaWMJcjQsIHI5LCAxNiwgMTYJCUMgcjQgPSAocjkgbW9kIDJeMzIpIDw8IDE2CisJc3JkaQlyNSwgcjksIDMyCQlDIHI1ID0gcjkgZGl2IDJeMzIKKwlybGRpYwlyNiwgcjEwLCAzMiwgMTYJCUMgcjYgPSAocjEwIG1vZCAyXjE2KSA8PCAzMgorCXNyZGkJcjcsIHIxMCwgMTYJCUMgcjcgPSByMTAgZGl2IDJeMTYKKworCWFkZAlyMCwgcjAsIHIzCisJYWRkCXI0LCByNCwgcjUKKwlhZGQJcjYsIHI2LCByNworCisJYWRkCXIwLCByMCwgcjQKKwlhZGQJcjYsIHI2LCByMTEKKworCWFkZAlyMywgcjAsIHI2CisJYmxyCitFUElMT0dVRSgpCisKK0MgfF9fcjEwX198X19yOV9fX3xfX3I4X19ffAorQyB8LS0tLS18LS0tLS18LS0tLS18LS0tLS18CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvbW9kZTFvLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9tb2RlMW8uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNjMzOWEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvbW9kZTFvLmFzbQpAQCAtMCwwICsxLDExNyBAQAorZG5sICBQb3dlclBDLTY0IG1wbl9tb2RleGFjdF8xX29kZCAtLSBtcG4gYnkgbGltYiBleGFjdCByZW1haW5kZXIuCisKK2RubCAgQ29weXJpZ2h0IDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgICAgICAgICAgIGN5Y2xlcy9saW1iCitDIFBPV0VSMy9QUEM2MzAgICAgICAgIDEzLTE5CitDIFBPV0VSNC9QUEM5NzAgICAgICAgICAxNgorQyBQT1dFUjUgICAgICAgICAgICAgICAgMTYKK0MgUE9XRVI2ICAgICAgICAgICAgICAgICA/CitDIFBPV0VSNyAgICAgICAgICAgICAgICAxMgorCitDIFRPRE8KK0MgICogQ2hlY2sgaWYgbj0xIGNvZGUgaXMgcmVhbGx5IGFuIGltcHJvdmVtZW50LiAgSXQgcHJvYmFibHkgaXNuJ3QuCitDICAqIE1ha2UgbW9yZSBzaW1pbGFyIHRvIGRpdmVfMS5hc20uCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGB1cCcsIGByMycpCitkZWZpbmUoYG4nLCAgYHI0JykKK2RlZmluZShgZCcsICBgcjUnKQorZGVmaW5lKGBjeScsIGByNicpCisKKworQVNNX1NUQVJUKCkKKworRVhURVJOKGJpbnZlcnRfbGltYl90YWJsZSkKKworUFJPTE9HVUUobXBuX21vZGV4YWN0XzFjX29kZCx0b2MpCisJYWRkaWMuCW4sIG4sIC0xCQlDIHNldCBjYXJyeSBhcyBzaWRlIGVmZmVjdAorCWxkCXI4LCAwKHVwKQorCWJuZQljcjAsIEwoMikKKwljbXBsZAljcjcsIHI2LCByOAorCWJnZQljcjcsIEwoNCkKKwlzdWJmCXI4LCByNiwgcjgKKwlkaXZkdQlyMywgcjgsIGQKKwltdWxsZAlyMywgcjMsIGQKKwlzdWJmLglyMywgcjMsIHI4CisJYmVxbHIJY3IwCisJc3ViZglyMywgcjMsIGQKKwlibHIKKworTCg0KToJc3ViZglyMywgcjgsIHI2CisJZGl2ZHUJcjgsIHIzLCBkCisJbXVsbGQJcjgsIHI4LCBkCisJc3ViZglyMywgcjgsIHIzCisJYmxyCisKK0woMik6CUxFQSgJcjcsIGJpbnZlcnRfbGltYl90YWJsZSkKKwlybGRpY2wJcjksIGQsIDYzLCA1NworCW10Y3RyCW4KKwlsYnp4CXIwLCByNywgcjkKKwltdWxsZAlyNywgcjAsIHIwCisJc2xkaQlyMCwgcjAsIDEKKwltdWxsZAlyNywgZCwgcjcKKwlzdWJmCXIwLCByNywgcjAKKwltdWxsZAlyOSwgcjAsIHIwCisJc2xkaQlyMCwgcjAsIDEKKwltdWxsZAlyOSwgZCwgcjkKKwlzdWJmCXIwLCByOSwgcjAKKwltdWxsZAlyNywgcjAsIHIwCisJc2xkaQlyMCwgcjAsIDEKKwltdWxsZAlyNywgZCwgcjcKKwlzdWJmCXI5LCByNywgcjAKKworCUFMSUdOKDE2KQorTChsb29wKToKKwlzdWJmZQlyMCwgcjYsIHI4CisJbGQJcjgsIDgodXApCisJYWRkaQl1cCwgdXAsIDgKKwltdWxsZAlyMCwgcjksIHIwCisJbXVsaGR1CXI2LCByMCwgZAorCWJkbnoJTChsb29wKQorCisJY21wbGQJY3I3LCBkLCByOAorCWJsdAljcjcsIEwoMTApCisKKwlzdWJmZQlyMCwgcjAsIHIwCisJc3ViZglyNiwgcjAsIHI2CisJY21wbGQJY3I3LCByNiwgcjgKKwlzdWJmCXIzLCByOCwgcjYKKwliZ2VscgljcjcKKwlhZGQJcjMsIGQsIHIzCisJYmxyCisKK0woMTApOglzdWJmZQlyMCwgcjYsIHI4CisJbXVsbGQJcjAsIHI5LCByMAorCW11bGhkdQlyMywgcjAsIGQKKwlibHIKK0VQSUxPR1VFKCkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L211bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9tdWxfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdhOGY4ZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9tdWxfMS5hc20KQEAgLTAsMCArMSwxNjggQEAKK2RubCAgUG93ZXJQQy02NCBtcG5fbXVsXzEgLS0gTXVsdGlwbHkgYSBsaW1iIHZlY3RvciB3aXRoIGEgbGltYiBhbmQgc3RvcmUKK2RubCAgdGhlIHJlc3VsdCBpbiBhIHNlY29uZCBsaW1iIHZlY3Rvci4KKworZG5sICBDb3B5cmlnaHQgMTk5OS0yMDAxLCAyMDAzLTIwMDYsIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgICAgICAgIGN5Y2xlcy9saW1iCitDIFBPV0VSMy9QUEM2MzAgICAgIDYtMTgKK0MgUE9XRVI0L1BQQzk3MCAgICAgNy4yNT8gIG5vdCB1cGRhdGVkIGZvciBsYXN0IGZpbGUgcmV2aXNpb24KK0MgUE9XRVI1ICAgICAgICAgICAgNy4yNQorQyBQT1dFUjYgICAgICAgICAgIDE0CitDIFBPV0VSNyAgICAgICAgICAgIDIuOQorCitDIFRPRE8KK0MgICogVHJ5IHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIG5lZWRlZCBsaXZlIHJlZ2lzdGVycyAoYXQgbGVhc3QgcjUgYW5kIHIxMAorQyAgICBjb3VsZCBiZSBjb21iaW5lZCkKK0MgICogT3B0aW1pemUgZmVlZC1pbiBjb2RlLCBmb3Igc3BlZWQgYW5kIHNpemUuCitDICAqIENsZWFuIHVwIHIxMi9yNyB1c2FnZSBpbiBmZWVkLWluIGNvZGUuCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsIGByMycpCitkZWZpbmUoYHVwJywgYHI0JykKK2RlZmluZShgbicsIGByNScpCitkZWZpbmUoYHZsJywgYHI2JykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9tdWxfMWMpCisJc3RkCXIyNywgLTQwKHIxKQorCXN0ZAlyMjYsIC00OChyMSkKKwltcglyMTIsIHI3CisJYglMKGVudCkKK0VQSUxPR1VFKCkKK1BST0xPR1VFKG1wbl9tdWxfMSkKKwlzdGQJcjI3LCAtNDAocjEpCisJc3RkCXIyNiwgLTQ4KHIxKQorCWxpCXIxMiwgMAkJQyBjeV9saW1iID0gMAorTChlbnQpOglsZAlyMjYsIDAodXApCisKKwlybGRpY2wuCXIwLCBuLCAwLDYyCUMgcjAgPSBuICYgMywgc2V0IGNyMAorCWNtcGRpCWNyNiwgcjAsIDIKKwlhZGRpYwluLCBuLCAzCQlDIGNvbXB1dGUgY291bnQuLi4KKwlzcmRpCW4sIG4sIDIJCUMgLi4uZm9yIGN0cgorCW10Y3RyCW4JCUMgY29weSBjb3VudCBpbnRvIGN0cgorCWJlcQljcjAsIEwoYjAwKQorCWJsdAljcjYsIEwoYjAxKQorCWJlcQljcjYsIEwoYjEwKQorCitMKGIxMSk6CW1yCXI3LCByMTIKKwltdWxsZAlyMCwgcjI2LCByNgorCW11bGhkdQlyMTIsIHIyNiwgcjYKKwlhZGRpCXVwLCB1cCwgOAorCWFkZGMJcjAsIHIwLCByNworCXN0ZAlyMCwgMChycCkKKwlhZGRpCXJwLCBycCwgOAorCWIJTChmaWMpCisKK0woYjAwKToJbGQJcjI3LCA4KHVwKQorCWFkZGkJdXAsIHVwLCAxNgorCW11bGxkCXIwLCByMjYsIHI2CisJbXVsaGR1CXI1LCByMjYsIHI2CisJbXVsbGQJcjcsIHIyNywgcjYKKwltdWxoZHUJcjgsIHIyNywgcjYKKwlhZGRjCXIwLCByMCwgcjEyCisJYWRkZQlyNywgcjcsIHI1CisJYWRkemUJcjEyLCByOAorCXN0ZAlyMCwgMChycCkKKwlzdGQJcjcsIDgocnApCisJYWRkaQlycCwgcnAsIDE2CisJYglMKGZpYykKKworCW5vcAkJCUMgYWxpZ25tZW50CitMKGIwMSk6CWJkbnoJTChndDEpCisJbXVsbGQJcjAsIHIyNiwgcjYKKwltdWxoZHUJcjgsIHIyNiwgcjYKKwlhZGRjCXIwLCByMCwgcjEyCisJc3RkCXIwLCAwKHJwKQorCWIJTChyZXQpCitMKGd0MSk6CWxkCXIyNywgOCh1cCkKKwlub3AKKwltdWxsZAlyMCwgcjI2LCByNgorCW11bGhkdQlyNSwgcjI2LCByNgorCWxkCXIyNiwgMTYodXApCisJbXVsbGQJcjcsIHIyNywgcjYKKwltdWxoZHUJcjgsIHIyNywgcjYKKwltdWxsZAlyOSwgcjI2LCByNgorCW11bGhkdQlyMTAsIHIyNiwgcjYKKwlhZGRjCXIwLCByMCwgcjEyCisJYWRkZQlyNywgcjcsIHI1CisJYWRkZQlyOSwgcjksIHI4CisJYWRkemUJcjEyLCByMTAKKwlzdGQJcjAsIDAocnApCisJc3RkCXI3LCA4KHJwKQorCXN0ZAlyOSwgMTYocnApCisJYWRkaQl1cCwgdXAsIDI0CisJYWRkaQlycCwgcnAsIDI0CisJYglMKGZpYykKKworCW5vcAorTChmaWMpOglsZAlyMjYsIDAodXApCitMKGIxMCk6CWxkCXIyNywgOCh1cCkKKwlhZGRpCXVwLCB1cCwgMTYKKwliZHoJTChlbmQpCisKK0wodG9wKToJbXVsbGQJcjAsIHIyNiwgcjYKKwltdWxoZHUJcjUsIHIyNiwgcjYKKwltdWxsZAlyNywgcjI3LCByNgorCW11bGhkdQlyOCwgcjI3LCByNgorCWxkCXIyNiwgMCh1cCkKKwlsZAlyMjcsIDgodXApCisJYWRkZQlyMCwgcjAsIHIxMgorCWFkZGUJcjcsIHI3LCByNQorCW11bGxkCXI5LCByMjYsIHI2CisJbXVsaGR1CXIxMCwgcjI2LCByNgorCW11bGxkCXIxMSwgcjI3LCByNgorCW11bGhkdQlyMTIsIHIyNywgcjYKKwlsZAlyMjYsIDE2KHVwKQorCWxkCXIyNywgMjQodXApCisJc3RkCXIwLCAwKHJwKQorCWFkZGUJcjksIHI5LCByOAorCXN0ZAlyNywgOChycCkKKwlhZGRlCXIxMSwgcjExLCByMTAKKwlzdGQJcjksIDE2KHJwKQorCWFkZGkJdXAsIHVwLCAzMgorCXN0ZAlyMTEsIDI0KHJwKQorCisJYWRkaQlycCwgcnAsIDMyCisJYmRueglMKHRvcCkKKworTChlbmQpOgltdWxsZAlyMCwgcjI2LCByNgorCW11bGhkdQlyNSwgcjI2LCByNgorCW11bGxkCXI3LCByMjcsIHI2CisJbXVsaGR1CXI4LCByMjcsIHI2CisJYWRkZQlyMCwgcjAsIHIxMgorCWFkZGUJcjcsIHI3LCByNQorCXN0ZAlyMCwgMChycCkKKwlzdGQJcjcsIDgocnApCitMKHJldCk6CWFkZHplCXIzLCByOAorCWxkCXIyNywgLTQwKHIxKQorCWxkCXIyNiwgLTQ4KHIxKQorCWJscgorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L211bF9iYXNlY2FzZS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvbXVsX2Jhc2VjYXNlLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODczMTg3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L211bF9iYXNlY2FzZS5hc20KQEAgLTAsMCArMSw3MDggQEAKK2RubCAgUG93ZXJQQy02NCBtcG5fbXVsX2Jhc2VjYXNlLgorCitkbmwgIENvcHlyaWdodCAxOTk5LTIwMDEsIDIwMDMtMjAwNiwgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgUE9XRVIzL1BQQzYzMCAgICAgICAgIDYtMTgKK0MgUE9XRVI0L1BQQzk3MCAgICAgICAgICA4CitDIFBPV0VSNSAgICAgICAgICAgICAgICAgOAorQyBQT1dFUjYgICAgICAgICAgICAgICAgMjQKKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywgYHIzJykKK2RlZmluZShgdXAnLCBgcjQnKQorZGVmaW5lKGB1bicsIGByNScpCitkZWZpbmUoYHZwJywgYHI2JykKK2RlZmluZShgdm4nLCBgcjcnKQorCitkZWZpbmUoYHYwJywJICAgYHIyNScpCitkZWZpbmUoYG91dGVyX3JwJywgYHIyMicpCitkZWZpbmUoYG91dGVyX3VwJywgYHIyMycpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fbXVsX2Jhc2VjYXNlKQorCitDIFNwZWNpYWwgY29kZSBmb3IgdW4gPD0gMiwgZm9yIGVmZmljaWVuY3kgb2YgdGhlc2UgaW1wb3J0YW50IGNhc2VzLAorQyBhbmQgc2luY2UgaXQgc2ltcGxpZmllcyB0aGUgZGVmYXVsdCBjb2RlLgorCWNtcGRpCWNyMCwgdW4sIDIKKwliZ3QJY3IwLCBMKHVuX2d0MikKKwljbXBkaQljcjYsIHZuLCAxCisJbGQJcjcsIDAodnApCisJbGQJcjUsIDAodXApCisJbXVsbGQJcjgsIHI1LCByNwlDIHdlaWdodCAwCisJbXVsaGR1CXI5LCByNSwgcjcJQyB3ZWlnaHQgMQorCXN0ZAlyOCwgMChycCkKKwliZXEJY3IwLCBMKDJ4KQorCXN0ZAlyOSwgOChycCkKKwlibHIKKwlBTElHTigxNikKK0woMngpOglsZAlyMCwgOCh1cCkKKwltdWxsZAlyOCwgcjAsIHI3CUMgd2VpZ2h0IDEKKwltdWxoZHUJcjEwLCByMCwgcjcJQyB3ZWlnaHQgMgorCWFkZGMJcjksIHI5LCByOAorCWFkZHplCXIxMCwgcjEwCisJYm5lCWNyNiwgTCgyeDIpCisJc3RkCXI5LCA4KHJwKQorCXN0ZAlyMTAsIDE2KHJwKQorCWJscgorCUFMSUdOKDE2KQorTCgyeDIpOglsZAlyNiwgOCh2cCkKKwlub3AKKwltdWxsZAlyOCwgcjUsIHI2CUMgd2VpZ2h0IDEKKwltdWxoZHUJcjExLCByNSwgcjYJQyB3ZWlnaHQgMgorCWFkZGMJcjksIHI5LCByOAorCXN0ZAlyOSwgOChycCkKKwlhZGRlCXIxMSwgcjExLCByMTAKKwltdWxsZAlyMTIsIHIwLCByNglDIHdlaWdodCAyCisJbXVsaGR1CXIwLCByMCwgcjYJQyB3ZWlnaHQgMworCWFkZHplCXIwLCByMAorCWFkZGMJcjExLCByMTEsIHIxMgorCWFkZHplCXIwLCByMAorCXN0ZAlyMTEsIDE2KHJwKQorCXN0ZAlyMCwgMjQocnApCisJYmxyCisKK0wodW5fZ3QyKToKKwlzdGQJcjMxLCAtOChyMSkKKwlzdGQJcjMwLCAtMTYocjEpCisJc3RkCXIyOSwgLTI0KHIxKQorCXN0ZAlyMjgsIC0zMihyMSkKKwlzdGQJcjI3LCAtNDAocjEpCisJc3RkCXIyNiwgLTQ4KHIxKQorCXN0ZAlyMjUsIC01NihyMSkKKwlzdGQJcjI0LCAtNjQocjEpCisJc3RkCXIyMywgLTcyKHIxKQorCXN0ZAlyMjIsIC04MChyMSkKKworCW1yCW91dGVyX3JwLCBycAorCW1yCW91dGVyX3VwLCB1cAorCisJbGQJdjAsIDAodnApCUMgbmV3IHYgbGltYgorCWFkZGkJdnAsIHZwLCA4CisJbGQJcjI2LCAwKHVwKQorCisJcmxkaWNsLglyMCwgdW4sIDAsNjIJQyByMCA9IG4gJiAzLCBzZXQgY3IwCisJY21wZGkJY3I2LCByMCwgMgorCWFkZGkJdW4sIHVuLCAxCUMgY29tcHV0ZSBjb3VudC4uLgorCXNyZGkJdW4sIHVuLCAyCUMgLi4uZm9yIGN0cgorCW10Y3RyCXVuCQlDIGNvcHkgaW5uZXIgbG9vcCBjb3VudCBpbnRvIGN0cgorCWJlcQljcjAsIEwoYjApCisJYmx0CWNyNiwgTChiMSkKKwliZXEJY3I2LCBMKGIyKQorCisKKwlBTElHTigxNikKK0woYjMpOgltdWxsZAlyMCwgcjI2LCB2MAorCW11bGhkdQlyMTIsIHIyNiwgdjAKKwlhZGRpYwlyMCwgcjAsIDAKKwlzdGQJcjAsIDAocnApCisJbGQJcjI2LCA4KHVwKQorCWxkCXIyNywgMTYodXApCisJYmR6CUwoZW5kX21fMykKKworCUFMSUdOKDE2KQorTChsb19tXzMpOgorCW11bGxkCXIwLCByMjYsIHYwCisJbXVsaGR1CXIzMSwgcjI2LCB2MAorCWxkCXIyNiwgMjQodXApCisJbm9wCisJbXVsbGQJcjI0LCByMjcsIHYwCisJbXVsaGR1CXI4LCByMjcsIHYwCisJbGQJcjI3LCAzMih1cCkKKwlub3AKKwlhZGRlCXIwLCByMCwgcjEyCisJYWRkZQlyMjQsIHIyNCwgcjMxCisJbXVsbGQJcjksIHIyNiwgdjAKKwltdWxoZHUJcjEwLCByMjYsIHYwCisJbGQJcjI2LCA0MCh1cCkKKwlub3AKKwltdWxsZAlyMTEsIHIyNywgdjAKKwltdWxoZHUJcjEyLCByMjcsIHYwCisJbGQJcjI3LCA0OCh1cCkKKwlzdGQJcjAsIDgocnApCisJYWRkZQlyOSwgcjksIHI4CisJc3RkCXIyNCwgMTYocnApCisJYWRkZQlyMTEsIHIxMSwgcjEwCisJc3RkCXI5LCAyNChycCkKKwlhZGRpCXVwLCB1cCwgMzIKKwlzdGQJcjExLCAzMihycCkKKwlhZGRpCXJwLCBycCwgMzIKKwliZG56CUwobG9fbV8zKQorCisJQUxJR04oMTYpCitMKGVuZF9tXzMpOgorCW11bGxkCXIwLCByMjYsIHYwCisJbXVsaGR1CXIzMSwgcjI2LCB2MAorCisJbXVsbGQJcjI0LCByMjcsIHYwCisJbXVsaGR1CXI4LCByMjcsIHYwCisKKwlhZGRlCXIwLCByMCwgcjEyCisJYWRkZQlyMjQsIHIyNCwgcjMxCisKKwlzdGQJcjAsIDgocnApCisJc3RkCXIyNCwgMTYocnApCisJYWRkemUJcjgsIHI4CisJc3RkCXI4LCAyNChycCkKKwlhZGRpYy4Jdm4sIHZuLCAtMQorCWJlcQlMKHJldCkKKworCUFMSUdOKDE2KQorTChvdXRlcl9sb18zKToKKwltdGN0cgl1bgkJQyBjb3B5IGlubmVyIGxvb3AgY291bnQgaW50byBjdHIKKwlhZGRpCXJwLCBvdXRlcl9ycCwgOAorCW1yCXVwLCBvdXRlcl91cAorCWFkZGkJb3V0ZXJfcnAsIG91dGVyX3JwLCA4CisJbGQJdjAsIDAodnApCUMgbmV3IHYgbGltYgorCWFkZGkJdnAsIHZwLCA4CisJbGQJcjI2LCAwKHVwKQorCWxkCXIyOCwgMChycCkKKwltdWxsZAlyMCwgcjI2LCB2MAorCW11bGhkdQlyMTIsIHIyNiwgdjAKKwlhZGRjCXIwLCByMCwgcjI4CisJc3RkCXIwLCAwKHJwKQorCWxkCXIyNiwgOCh1cCkKKwlsZAlyMjcsIDE2KHVwKQorCWJkeglMKGVuZF8zKQorCisJQUxJR04oMTYpCQlDIHJlZ2lzdGVycyBkeWluZworTChsb18zKToKKwltdWxsZAlyMCwgcjI2LCB2MAlDCisJbXVsaGR1CXIxMCwgcjI2LCB2MAlDIDI2CisJbGQJcjI2LCAyNCh1cCkJQworCWxkCXIyOCwgOChycCkJQworCW11bGxkCXIyNCwgcjI3LCB2MAlDCisJbXVsaGR1CXI4LCByMjcsIHYwCUMgMjcKKwlsZAlyMjcsIDMyKHVwKQlDCisJbGQJcjI5LCAxNihycCkJQworCWFkZGUJcjAsIHIwLCByMTIJQyAwIDEyCisJYWRkZQlyMjQsIHIyNCwgcjEwCUMgMjQgMTAKKwltdWxsZAlyOSwgcjI2LCB2MAlDCisJbXVsaGR1CXIxMCwgcjI2LCB2MAlDIDI2CisJbGQJcjI2LCA0MCh1cCkJQworCWxkCXIzMCwgMjQocnApCUMKKwltdWxsZAlyMTEsIHIyNywgdjAJQworCW11bGhkdQlyMTIsIHIyNywgdjAJQyAyNworCWxkCXIyNywgNDgodXApCUMKKwlsZAlyMzEsIDMyKHJwKQlDCisJYWRkZQlyOSwgcjksIHI4CUMgOCA5CisJYWRkZQlyMTEsIHIxMSwgcjEwCUMgMTAgMTEKKwlhZGR6ZQlyMTIsIHIxMglDIDEyCisJYWRkYwlyMCwgcjAsIHIyOAlDIDAgMjgKKwlzdGQJcjAsIDgocnApCUMgMAorCWFkZGUJcjI0LCByMjQsIHIyOQlDIDcgMjkKKwlzdGQJcjI0LCAxNihycCkJQyA3CisJYWRkZQlyOSwgcjksIHIzMAlDIDkgMzAKKwlzdGQJcjksIDI0KHJwKQlDIDkKKwlhZGRlCXIxMSwgcjExLCByMzEJQyAxMSAzMQorCXN0ZAlyMTEsIDMyKHJwKQlDIDExCisJYWRkaQl1cCwgdXAsIDMyCUMKKwlhZGRpCXJwLCBycCwgMzIJQworCWJkbnoJTChsb18zKQlDCisKKwlBTElHTigxNikKK0woZW5kXzMpOgorCW11bGxkCXIwLCByMjYsIHYwCisJbXVsaGR1CXIxMCwgcjI2LCB2MAorCWxkCXIyOCwgOChycCkKKwlub3AKKwltdWxsZAlyMjQsIHIyNywgdjAKKwltdWxoZHUJcjgsIHIyNywgdjAKKwlsZAlyMjksIDE2KHJwKQorCW5vcAorCWFkZGUJcjAsIHIwLCByMTIKKwlhZGRlCXIyNCwgcjI0LCByMTAKKwlhZGR6ZQlyOCwgcjgKKwlhZGRjCXIwLCByMCwgcjI4CisJc3RkCXIwLCA4KHJwKQorCWFkZGUJcjI0LCByMjQsIHIyOQorCXN0ZAlyMjQsIDE2KHJwKQorCWFkZHplCXI4LCByOAorCXN0ZAlyOCwgMjQocnApCisKKwlhZGRpYy4Jdm4sIHZuLCAtMQorCWJuZQlMKG91dGVyX2xvXzMpCisJYglMKHJldCkKKworCisJQUxJR04oMTYpCitMKGIwKToJbGQJcjI3LCA4KHVwKQorCWFkZGkJdXAsIHVwLCA4CisJbXVsbGQJcjAsIHIyNiwgdjAKKwltdWxoZHUJcjEwLCByMjYsIHYwCisJbXVsbGQJcjI0LCByMjcsIHYwCisJbXVsaGR1CXI4LCByMjcsIHYwCisJYWRkYwlyMjQsIHIyNCwgcjEwCisJYWRkemUJcjEyLCByOAorCXN0ZAlyMCwgMChycCkKKwlzdGQJcjI0LCA4KHJwKQorCWFkZGkJcnAsIHJwLCA4CisJbGQJcjI2LCA4KHVwKQorCWxkCXIyNywgMTYodXApCisJYmR6CUwoZW5kX21fMCkKKworCUFMSUdOKDE2KQorTChsb19tXzApOgorCW11bGxkCXIwLCByMjYsIHYwCisJbXVsaGR1CXIzMSwgcjI2LCB2MAorCWxkCXIyNiwgMjQodXApCisJbm9wCisJbXVsbGQJcjI0LCByMjcsIHYwCisJbXVsaGR1CXI4LCByMjcsIHYwCisJbGQJcjI3LCAzMih1cCkKKwlub3AKKwlhZGRlCXIwLCByMCwgcjEyCisJYWRkZQlyMjQsIHIyNCwgcjMxCisJbXVsbGQJcjksIHIyNiwgdjAKKwltdWxoZHUJcjEwLCByMjYsIHYwCisJbGQJcjI2LCA0MCh1cCkKKwlub3AKKwltdWxsZAlyMTEsIHIyNywgdjAKKwltdWxoZHUJcjEyLCByMjcsIHYwCisJbGQJcjI3LCA0OCh1cCkKKwlzdGQJcjAsIDgocnApCisJYWRkZQlyOSwgcjksIHI4CisJc3RkCXIyNCwgMTYocnApCisJYWRkZQlyMTEsIHIxMSwgcjEwCisJc3RkCXI5LCAyNChycCkKKwlhZGRpCXVwLCB1cCwgMzIKKwlzdGQJcjExLCAzMihycCkKKwlhZGRpCXJwLCBycCwgMzIKKwliZG56CUwobG9fbV8wKQorCisJQUxJR04oMTYpCitMKGVuZF9tXzApOgorCW11bGxkCXIwLCByMjYsIHYwCisJbXVsaGR1CXIzMSwgcjI2LCB2MAorCisJbXVsbGQJcjI0LCByMjcsIHYwCisJbXVsaGR1CXI4LCByMjcsIHYwCisKKwlhZGRlCXIwLCByMCwgcjEyCisJYWRkZQlyMjQsIHIyNCwgcjMxCisKKwlzdGQJcjAsIDgocnApCisJYWRkemUJcjgsIHI4CisJc3RkCXIyNCwgMTYocnApCisJYWRkaWMuCXZuLCB2biwgLTEKKwlzdGQJcjgsIDI0KHJwKQorCW5vcAorCWJlcQlMKHJldCkKKworCUFMSUdOKDE2KQorTChvdXRlcl9sb18wKToKKwltdGN0cgl1bgkJQyBjb3B5IGlubmVyIGxvb3AgY291bnQgaW50byBjdHIKKwlhZGRpCXJwLCBvdXRlcl9ycCwgMTYKKwlhZGRpCXVwLCBvdXRlcl91cCwgOAorCWFkZGkJb3V0ZXJfcnAsIG91dGVyX3JwLCA4CisJbGQJdjAsIDAodnApCUMgbmV3IHYgbGltYgorCWFkZGkJdnAsIHZwLCA4CisJbGQJcjI2LCAtOCh1cCkKKwlsZAlyMjcsIDAodXApCisJbGQJcjI4LCAtOChycCkKKwlsZAlyMjksIDAocnApCisJbm9wCisJbm9wCisJbXVsbGQJcjAsIHIyNiwgdjAKKwltdWxoZHUJcjEwLCByMjYsIHYwCisJbXVsbGQJcjI0LCByMjcsIHYwCisJbXVsaGR1CXI4LCByMjcsIHYwCisJYWRkYwlyMjQsIHIyNCwgcjEwCisJYWRkemUJcjEyLCByOAorCWFkZGMJcjAsIHIwLCByMjgKKwlzdGQJcjAsIC04KHJwKQorCWFkZGUJcjI0LCByMjQsIHIyOQorCXN0ZAlyMjQsIDAocnApCisJbGQJcjI2LCA4KHVwKQorCWxkCXIyNywgMTYodXApCisJYmR6CUwoZW5kXzApCisKKwlBTElHTigxNikJCUMgcmVnaXN0ZXJzIGR5aW5nCitMKGxvXzApOgorCW11bGxkCXIwLCByMjYsIHYwCUMKKwltdWxoZHUJcjEwLCByMjYsIHYwCUMgMjYKKwlsZAlyMjYsIDI0KHVwKQlDCisJbGQJcjI4LCA4KHJwKQlDCisJbXVsbGQJcjI0LCByMjcsIHYwCUMKKwltdWxoZHUJcjgsIHIyNywgdjAJQyAyNworCWxkCXIyNywgMzIodXApCUMKKwlsZAlyMjksIDE2KHJwKQlDCisJYWRkZQlyMCwgcjAsIHIxMglDIDAgMTIKKwlhZGRlCXIyNCwgcjI0LCByMTAJQyAyNCAxMAorCW11bGxkCXI5LCByMjYsIHYwCUMKKwltdWxoZHUJcjEwLCByMjYsIHYwCUMgMjYKKwlsZAlyMjYsIDQwKHVwKQlDCisJbGQJcjMwLCAyNChycCkJQworCW11bGxkCXIxMSwgcjI3LCB2MAlDCisJbXVsaGR1CXIxMiwgcjI3LCB2MAlDIDI3CisJbGQJcjI3LCA0OCh1cCkJQworCWxkCXIzMSwgMzIocnApCUMKKwlhZGRlCXI5LCByOSwgcjgJQyA4IDkKKwlhZGRlCXIxMSwgcjExLCByMTAJQyAxMCAxMQorCWFkZHplCXIxMiwgcjEyCUMgMTIKKwlhZGRjCXIwLCByMCwgcjI4CUMgMCAyOAorCXN0ZAlyMCwgOChycCkJQyAwCisJYWRkZQlyMjQsIHIyNCwgcjI5CUMgNyAyOQorCXN0ZAlyMjQsIDE2KHJwKQlDIDcKKwlhZGRlCXI5LCByOSwgcjMwCUMgOSAzMAorCXN0ZAlyOSwgMjQocnApCUMgOQorCWFkZGUJcjExLCByMTEsIHIzMQlDIDExIDMxCisJc3RkCXIxMSwgMzIocnApCUMgMTEKKwlhZGRpCXVwLCB1cCwgMzIJQworCWFkZGkJcnAsIHJwLCAzMglDCisJYmRueglMKGxvXzApCUMKKworCUFMSUdOKDE2KQorTChlbmRfMCk6CisJbXVsbGQJcjAsIHIyNiwgdjAKKwltdWxoZHUJcjEwLCByMjYsIHYwCisJbGQJcjI4LCA4KHJwKQorCW5vcAorCW11bGxkCXIyNCwgcjI3LCB2MAorCW11bGhkdQlyOCwgcjI3LCB2MAorCWxkCXIyOSwgMTYocnApCisJbm9wCisJYWRkZQlyMCwgcjAsIHIxMgorCWFkZGUJcjI0LCByMjQsIHIxMAorCWFkZHplCXI4LCByOAorCWFkZGljLgl2biwgdm4sIC0xCisJYWRkYwlyMCwgcjAsIHIyOAorCXN0ZAlyMCwgOChycCkKKwlhZGRlCXIyNCwgcjI0LCByMjkKKwlzdGQJcjI0LCAxNihycCkKKwlhZGR6ZQlyOCwgcjgKKwlzdGQJcjgsIDI0KHJwKQorCWJuZQlMKG91dGVyX2xvXzApCisJYglMKHJldCkKKworCisJQUxJR04oMTYpCitMKGIxKToJbGQJcjI3LCA4KHVwKQorCW5vcAorCW11bGxkCXIwLCByMjYsIHYwCisJbXVsaGR1CXIzMSwgcjI2LCB2MAorCWxkCXIyNiwgMTYodXApCisJbXVsbGQJcjI0LCByMjcsIHYwCisJbXVsaGR1CXI4LCByMjcsIHYwCisJbXVsbGQJcjksIHIyNiwgdjAKKwltdWxoZHUJcjEwLCByMjYsIHYwCisJYWRkYwlyMjQsIHIyNCwgcjMxCisJYWRkZQlyOSwgcjksIHI4CisJYWRkemUJcjEyLCByMTAKKwlzdGQJcjAsIDAocnApCisJc3RkCXIyNCwgOChycCkKKwlzdGQJcjksIDE2KHJwKQorCWFkZGkJdXAsIHVwLCAxNgorCWFkZGkJcnAsIHJwLCAxNgorCWxkCXIyNiwgOCh1cCkKKwlsZAlyMjcsIDE2KHVwKQorCWJkeglMKGVuZF9tXzEpCisKKwlBTElHTigxNikKK0wobG9fbV8xKToKKwltdWxsZAlyMCwgcjI2LCB2MAorCW11bGhkdQlyMzEsIHIyNiwgdjAKKwlsZAlyMjYsIDI0KHVwKQorCW5vcAorCW11bGxkCXIyNCwgcjI3LCB2MAorCW11bGhkdQlyOCwgcjI3LCB2MAorCWxkCXIyNywgMzIodXApCisJbm9wCisJYWRkZQlyMCwgcjAsIHIxMgorCWFkZGUJcjI0LCByMjQsIHIzMQorCW11bGxkCXI5LCByMjYsIHYwCisJbXVsaGR1CXIxMCwgcjI2LCB2MAorCWxkCXIyNiwgNDAodXApCisJbm9wCisJbXVsbGQJcjExLCByMjcsIHYwCisJbXVsaGR1CXIxMiwgcjI3LCB2MAorCWxkCXIyNywgNDgodXApCisJc3RkCXIwLCA4KHJwKQorCWFkZGUJcjksIHI5LCByOAorCXN0ZAlyMjQsIDE2KHJwKQorCWFkZGUJcjExLCByMTEsIHIxMAorCXN0ZAlyOSwgMjQocnApCisJYWRkaQl1cCwgdXAsIDMyCisJc3RkCXIxMSwgMzIocnApCisJYWRkaQlycCwgcnAsIDMyCisJYmRueglMKGxvX21fMSkKKworCUFMSUdOKDE2KQorTChlbmRfbV8xKToKKwltdWxsZAlyMCwgcjI2LCB2MAorCW11bGhkdQlyMzEsIHIyNiwgdjAKKworCW11bGxkCXIyNCwgcjI3LCB2MAorCW11bGhkdQlyOCwgcjI3LCB2MAorCisJYWRkZQlyMCwgcjAsIHIxMgorCWFkZGUJcjI0LCByMjQsIHIzMQorCisJc3RkCXIwLCA4KHJwKQorCWFkZHplCXI4LCByOAorCXN0ZAlyMjQsIDE2KHJwKQorCWFkZGljLgl2biwgdm4sIC0xCisJc3RkCXI4LCAyNChycCkKKwlub3AKKwliZXEJTChyZXQpCisKKwlBTElHTigxNikKK0wob3V0ZXJfbG9fMSk6CisJbXRjdHIJdW4JCUMgY29weSBpbm5lciBsb29wIGNvdW50IGludG8gY3RyCisJYWRkaQlycCwgb3V0ZXJfcnAsIDI0CisJYWRkaQl1cCwgb3V0ZXJfdXAsIDE2CisJYWRkaQlvdXRlcl9ycCwgb3V0ZXJfcnAsIDgKKwlsZAl2MCwgMCh2cCkJQyBuZXcgdiBsaW1iCisJYWRkaQl2cCwgdnAsIDgKKwlsZAlyMjYsIC0xNih1cCkKKwlsZAlyMjcsIC04KHVwKQorCW11bGxkCXIwLCByMjYsIHYwCisJbXVsaGR1CXIzMSwgcjI2LCB2MAorCWxkCXIyNiwgMCh1cCkKKwlsZAlyMjgsIC0xNihycCkKKwltdWxsZAlyMjQsIHIyNywgdjAKKwltdWxoZHUJcjgsIHIyNywgdjAKKwlsZAlyMjksIC04KHJwKQorCWxkCXIzMCwgMChycCkKKwltdWxsZAlyOSwgcjI2LCB2MAorCW11bGhkdQlyMTAsIHIyNiwgdjAKKwlhZGRjCXIyNCwgcjI0LCByMzEKKwlhZGRlCXI5LCByOSwgcjgKKwlhZGR6ZQlyMTIsIHIxMAorCWFkZGMJcjAsIHIwLCByMjgKKwlzdGQJcjAsIC0xNihycCkKKwlhZGRlCXIyNCwgcjI0LCByMjkKKwlzdGQJcjI0LCAtOChycCkKKwlhZGRlCXI5LCByOSwgcjMwCisJc3RkCXI5LCAwKHJwKQorCWxkCXIyNiwgOCh1cCkKKwlsZAlyMjcsIDE2KHVwKQorCWJkeglMKGVuZF8xKQorCisJQUxJR04oMTYpCQlDIHJlZ2lzdGVycyBkeWluZworTChsb18xKToKKwltdWxsZAlyMCwgcjI2LCB2MAlDCisJbXVsaGR1CXIxMCwgcjI2LCB2MAlDIDI2CisJbGQJcjI2LCAyNCh1cCkJQworCWxkCXIyOCwgOChycCkJQworCW11bGxkCXIyNCwgcjI3LCB2MAlDCisJbXVsaGR1CXI4LCByMjcsIHYwCUMgMjcKKwlsZAlyMjcsIDMyKHVwKQlDCisJbGQJcjI5LCAxNihycCkJQworCWFkZGUJcjAsIHIwLCByMTIJQyAwIDEyCisJYWRkZQlyMjQsIHIyNCwgcjEwCUMgMjQgMTAKKwltdWxsZAlyOSwgcjI2LCB2MAlDCisJbXVsaGR1CXIxMCwgcjI2LCB2MAlDIDI2CisJbGQJcjI2LCA0MCh1cCkJQworCWxkCXIzMCwgMjQocnApCUMKKwltdWxsZAlyMTEsIHIyNywgdjAJQworCW11bGhkdQlyMTIsIHIyNywgdjAJQyAyNworCWxkCXIyNywgNDgodXApCUMKKwlsZAlyMzEsIDMyKHJwKQlDCisJYWRkZQlyOSwgcjksIHI4CUMgOCA5CisJYWRkZQlyMTEsIHIxMSwgcjEwCUMgMTAgMTEKKwlhZGR6ZQlyMTIsIHIxMglDIDEyCisJYWRkYwlyMCwgcjAsIHIyOAlDIDAgMjgKKwlzdGQJcjAsIDgocnApCUMgMAorCWFkZGUJcjI0LCByMjQsIHIyOQlDIDcgMjkKKwlzdGQJcjI0LCAxNihycCkJQyA3CisJYWRkZQlyOSwgcjksIHIzMAlDIDkgMzAKKwlzdGQJcjksIDI0KHJwKQlDIDkKKwlhZGRlCXIxMSwgcjExLCByMzEJQyAxMSAzMQorCXN0ZAlyMTEsIDMyKHJwKQlDIDExCisJYWRkaQl1cCwgdXAsIDMyCUMKKwlhZGRpCXJwLCBycCwgMzIJQworCWJkbnoJTChsb18xKQlDCisKKwlBTElHTigxNikKK0woZW5kXzEpOgorCW11bGxkCXIwLCByMjYsIHYwCisJbXVsaGR1CXIxMCwgcjI2LCB2MAorCWxkCXIyOCwgOChycCkKKwlub3AKKwltdWxsZAlyMjQsIHIyNywgdjAKKwltdWxoZHUJcjgsIHIyNywgdjAKKwlsZAlyMjksIDE2KHJwKQorCW5vcAorCWFkZGUJcjAsIHIwLCByMTIKKwlhZGRlCXIyNCwgcjI0LCByMTAKKwlhZGR6ZQlyOCwgcjgKKwlhZGRpYy4Jdm4sIHZuLCAtMQorCWFkZGMJcjAsIHIwLCByMjgKKwlzdGQJcjAsIDgocnApCisJYWRkZQlyMjQsIHIyNCwgcjI5CisJc3RkCXIyNCwgMTYocnApCisJYWRkemUJcjgsIHI4CisJc3RkCXI4LCAyNChycCkKKwlibmUJTChvdXRlcl9sb18xKQorCWIJTChyZXQpCisKKworCUFMSUdOKDE2KQorTChiMik6CWxkCXIyNywgOCh1cCkKKwlhZGRpCXVwLCB1cCwgLTgKKwlhZGRpCXJwLCBycCwgLTgKKwlsaQlyMTIsIDAKKwlhZGRpYwlyMTIsIHIxMiwgMAorCisJQUxJR04oMTYpCitMKGxvX21fMik6CisJbXVsbGQJcjAsIHIyNiwgdjAKKwltdWxoZHUJcjMxLCByMjYsIHYwCisJbGQJcjI2LCAyNCh1cCkKKwlub3AKKwltdWxsZAlyMjQsIHIyNywgdjAKKwltdWxoZHUJcjgsIHIyNywgdjAKKwlsZAlyMjcsIDMyKHVwKQorCW5vcAorCWFkZGUJcjAsIHIwLCByMTIKKwlhZGRlCXIyNCwgcjI0LCByMzEKKwltdWxsZAlyOSwgcjI2LCB2MAorCW11bGhkdQlyMTAsIHIyNiwgdjAKKwlsZAlyMjYsIDQwKHVwKQorCW5vcAorCW11bGxkCXIxMSwgcjI3LCB2MAorCW11bGhkdQlyMTIsIHIyNywgdjAKKwlsZAlyMjcsIDQ4KHVwKQorCXN0ZAlyMCwgOChycCkKKwlhZGRlCXI5LCByOSwgcjgKKwlzdGQJcjI0LCAxNihycCkKKwlhZGRlCXIxMSwgcjExLCByMTAKKwlzdGQJcjksIDI0KHJwKQorCWFkZGkJdXAsIHVwLCAzMgorCXN0ZAlyMTEsIDMyKHJwKQorCisJYWRkaQlycCwgcnAsIDMyCisJYmRueglMKGxvX21fMikKKworCUFMSUdOKDE2KQorTChlbmRfbV8yKToKKwltdWxsZAlyMCwgcjI2LCB2MAorCW11bGhkdQlyMzEsIHIyNiwgdjAKKworCW11bGxkCXIyNCwgcjI3LCB2MAorCW11bGhkdQlyOCwgcjI3LCB2MAorCisJYWRkZQlyMCwgcjAsIHIxMgorCWFkZGUJcjI0LCByMjQsIHIzMQorCisJc3RkCXIwLCA4KHJwKQorCWFkZHplCXI4LCByOAorCXN0ZAlyMjQsIDE2KHJwKQorCWFkZGljLgl2biwgdm4sIC0xCisJc3RkCXI4LCAyNChycCkKKwlub3AKKwliZXEJTChyZXQpCisKKwlBTElHTigxNikKK0wob3V0ZXJfbG9fMik6CisJbXRjdHIJdW4JCUMgY29weSBpbm5lciBsb29wIGNvdW50IGludG8gY3RyCisJYWRkaQlycCwgb3V0ZXJfcnAsIDAKKwlhZGRpCXVwLCBvdXRlcl91cCwgLTgKKwlhZGRpCW91dGVyX3JwLCBvdXRlcl9ycCwgOAorCWxkCXYwLCAwKHZwKQlDIG5ldyB2IGxpbWIKKwlhZGRpCXZwLCB2cCwgOAorCWxkCXIyNiwgOCh1cCkKKwlsZAlyMjcsIDE2KHVwKQorCWxpCXIxMiwgMAorCWFkZGljCXIxMiwgcjEyLCAwCisKKwlBTElHTigxNikJCUMgcmVnaXN0ZXJzIGR5aW5nCitMKGxvXzIpOgorCW11bGxkCXIwLCByMjYsIHYwCUMKKwltdWxoZHUJcjEwLCByMjYsIHYwCUMgMjYKKwlsZAlyMjYsIDI0KHVwKQlDCisJbGQJcjI4LCA4KHJwKQlDCisJbXVsbGQJcjI0LCByMjcsIHYwCUMKKwltdWxoZHUJcjgsIHIyNywgdjAJQyAyNworCWxkCXIyNywgMzIodXApCUMKKwlsZAlyMjksIDE2KHJwKQlDCisJYWRkZQlyMCwgcjAsIHIxMglDIDAgMTIKKwlhZGRlCXIyNCwgcjI0LCByMTAJQyAyNCAxMAorCW11bGxkCXI5LCByMjYsIHYwCUMKKwltdWxoZHUJcjEwLCByMjYsIHYwCUMgMjYKKwlsZAlyMjYsIDQwKHVwKQlDCisJbGQJcjMwLCAyNChycCkJQworCW11bGxkCXIxMSwgcjI3LCB2MAlDCisJbXVsaGR1CXIxMiwgcjI3LCB2MAlDIDI3CisJbGQJcjI3LCA0OCh1cCkJQworCWxkCXIzMSwgMzIocnApCUMKKwlhZGRlCXI5LCByOSwgcjgJQyA4IDkKKwlhZGRlCXIxMSwgcjExLCByMTAJQyAxMCAxMQorCWFkZHplCXIxMiwgcjEyCUMgMTIKKwlhZGRjCXIwLCByMCwgcjI4CUMgMCAyOAorCXN0ZAlyMCwgOChycCkJQyAwCisJYWRkZQlyMjQsIHIyNCwgcjI5CUMgNyAyOQorCXN0ZAlyMjQsIDE2KHJwKQlDIDcKKwlhZGRlCXI5LCByOSwgcjMwCUMgOSAzMAorCXN0ZAlyOSwgMjQocnApCUMgOQorCWFkZGUJcjExLCByMTEsIHIzMQlDIDExIDMxCisJc3RkCXIxMSwgMzIocnApCUMgMTEKKwlhZGRpCXVwLCB1cCwgMzIJQworCWFkZGkJcnAsIHJwLCAzMglDCisJYmRueglMKGxvXzIpCUMKKworCUFMSUdOKDE2KQorTChlbmRfMik6CisJbXVsbGQJcjAsIHIyNiwgdjAKKwltdWxoZHUJcjEwLCByMjYsIHYwCisJbGQJcjI4LCA4KHJwKQorCW5vcAorCW11bGxkCXIyNCwgcjI3LCB2MAorCW11bGhkdQlyOCwgcjI3LCB2MAorCWxkCXIyOSwgMTYocnApCisJbm9wCisJYWRkZQlyMCwgcjAsIHIxMgorCWFkZGUJcjI0LCByMjQsIHIxMAorCWFkZHplCXI4LCByOAorCWFkZGljLgl2biwgdm4sIC0xCisJYWRkYwlyMCwgcjAsIHIyOAorCXN0ZAlyMCwgOChycCkKKwlhZGRlCXIyNCwgcjI0LCByMjkKKwlzdGQJcjI0LCAxNihycCkKKwlhZGR6ZQlyOCwgcjgKKwlzdGQJcjgsIDI0KHJwKQorCWJuZQlMKG91dGVyX2xvXzIpCisJYglMKHJldCkKKworCitMKHJldCk6CWxkCXIzMSwgLTgocjEpCisJbGQJcjMwLCAtMTYocjEpCisJbGQJcjI5LCAtMjQocjEpCisJbGQJcjI4LCAtMzIocjEpCisJbGQJcjI3LCAtNDAocjEpCisJbGQJcjI2LCAtNDgocjEpCisJbGQJcjI1LCAtNTYocjEpCisJbGQJcjI0LCAtNjQocjEpCisJbGQJcjIzLCAtNzIocjEpCisJbGQJcjIyLCAtODAocjEpCisJYmxyCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvcDMvZ21wLW1wYXJhbS5oIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L3AzL2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWE0MzdiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L3AzL2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDE3OSBAQAorLyogUE9XRVIzL1Bvd2VyUEM2MzAgZ21wLW1wYXJhbS5oIC0tIENvbXBpbGVyL21hY2hpbmUgcGFyYW1ldGVyIGhlYWRlciBmaWxlLgorCitDb3B5cmlnaHQgMjAwOC0yMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgNjQKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgOAorCisKKyNkZWZpbmUgTU9EXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PRF8xTl9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA3CisjZGVmaW5lIE1PRF8xVV9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICAzCisjZGVmaW5lIE1PRF8xXzFfVE9fTU9EXzFfMl9USFJFU0hPTEQgICAgICAgIDE4CisjZGVmaW5lIE1PRF8xXzJfVE9fTU9EXzFfNF9USFJFU0hPTEQgICAgICAgICAwICAvKiBuZXZlciBtcG5fbW9kXzFzXzJwICovCisjZGVmaW5lIFBSRUlOVl9NT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgIDE3CisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIERJVl9RUl8yX1BJMl9USFJFU0hPTEQgICAgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKworI2RlZmluZSBNVUxfVE9PTTIyX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBNVUxfVE9PTTMzX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzMworI2RlZmluZSBNVUxfVE9PTTQ0X1RIUkVTSE9MRCAgICAgICAgICAgICAgICA0NgorI2RlZmluZSBNVUxfVE9PTTZIX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA3NworI2RlZmluZSBNVUxfVE9PTThIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDEzOQorCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTQzX1RIUkVTSE9MRCAgICAgIDQ5CisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgIDQ3CisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgIDQ5CisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTYzX1RIUkVTSE9MRCAgICAgIDQ5CisjZGVmaW5lIE1VTF9UT09NNDNfVE9fVE9PTTU0X1RIUkVTSE9MRCAgICAgIDM0CisKKyNkZWZpbmUgU1FSX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAobmF0aXZlKSAqLworI2RlZmluZSBTUVJfVE9PTTJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBTUVJfVE9PTTNfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA0NQorI2RlZmluZSBTUVJfVE9PTTRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA2NAorI2RlZmluZSBTUVJfVE9PTTZfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA4NQorI2RlZmluZSBTUVJfVE9PTThfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDEzOQorCisjZGVmaW5lIE1VTE1JRF9UT09NNDJfVEhSRVNIT0xEICAgICAgICAgICAgIDIyCisKKyNkZWZpbmUgTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgU1FSTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTAKKworI2RlZmluZSBNVUxfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDIyMCAgLyogayA9IDUgKi8KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDIyMCwgNX0sIHsgICAgICA5LCA2fSwgeyAgICAgIDUsIDV9LCB7ICAgICAxMSwgNn0sIFwKKyAgICB7ICAgICAxMywgN30sIHsgICAgICA3LCA2fSwgeyAgICAgMTUsIDd9LCB7ICAgICAxMywgOH0sIFwKKyAgICB7ICAgICAgNywgN30sIHsgICAgIDE1LCA4fSwgeyAgICAgMTMsIDl9LCB7ICAgICAgNywgOH0sIFwKKyAgICB7ICAgICAxOSwgOX0sIHsgICAgIDExLCA4fSwgeyAgICAgMjMsMTB9LCB7ICAgICAgNywgOX0sIFwKKyAgICB7ICAgICAxNSwgOH0sIHsgICAgIDMzLCA5fSwgeyAgICAgMjMsMTB9LCB7ICAgICAxNSwgOX0sIFwKKyAgICB7ICAgICAzNSwgOH0sIHsgICAgIDcxLDEwfSwgeyAgICAgMjMsIDl9LCB7ICAgICA0NywxMX0sIFwKKyAgICB7ICAgICAxNSwxMH0sIHsgICAgIDMxLCA5fSwgeyAgICAgNzEsMTB9LCB7ICAgICAzOSwgOX0sIFwKKyAgICB7ICAgICA3OSwxMH0sIHsgICAgIDU1LDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA2MywgOX0sIFwKKyAgICB7ICAgIDEyNywxMH0sIHsgICAgIDcxLCA5fSwgeyAgICAxNDMsIDh9LCB7ICAgIDI4NywxMH0sIFwKKyAgICB7ICAgICA3OSwxMX0sIHsgICAgIDQ3LDEwfSwgeyAgICAgOTUsIDl9LCB7ICAgIDE5MSwxMn0sIFwKKyAgICB7ICAgICAzMSwxMX0sIHsgICAgIDYzLDEwfSwgeyAgICAxMjcsIDl9LCB7ICAgIDI1NSwgOH0sIFwKKyAgICB7ICAgIDUxMSwxMH0sIHsgICAgMTQzLCA5fSwgeyAgICAyODcsMTF9LCB7ICAgICA3OSwxMH0sIFwKKyAgICB7ICAgIDE1OSwgOX0sIHsgICAgMzE5LCA4fSwgeyAgICA2MzksMTB9LCB7ICAgIDE3NSwgOX0sIFwKKyAgICB7ICAgIDM1MSwxMX0sIHsgICAgIDk1LDEwfSwgeyAgICAxOTEsIDl9LCB7ICAgIDM4MywxMX0sIFwKKyAgICB7ICAgIDExMSwxMH0sIHsgICAgMjIzLDEyfSwgeyAgICAgNjMsMTF9LCB7ICAgIDEyNywxMH0sIFwKKyAgICB7ICAgIDI1NSwgOX0sIHsgICAgNTExLDExfSwgeyAgICAxNDMsMTB9LCB7ICAgIDI4NywgOX0sIFwKKyAgICB7ICAgIDU3NSwxMX0sIHsgICAgMTU5LDEwfSwgeyAgICAzMTksIDl9LCB7ICAgIDYzOSwxMX0sIFwKKyAgICB7ICAgIDE3NSwxMH0sIHsgICAgMzUxLDEyfSwgeyAgICAgOTUsMTF9LCB7ICAgIDE5MSwxMH0sIFwKKyAgICB7ICAgIDM4MywgOX0sIHsgICAgNzY3LDExfSwgeyAgICAyMjMsMTN9LCB7ICAgICA2MywxMn0sIFwKKyAgICB7ICAgIDEyNywxMX0sIHsgICAgMjU1LDEwfSwgeyAgICA1MTEsMTF9LCB7ICAgIDI4NywxMH0sIFwKKyAgICB7ICAgIDU3NSwgOX0sIHsgICAxMTUxLDEyfSwgeyAgICAxNTksMTF9LCB7ICAgIDMxOSwxMH0sIFwKKyAgICB7ICAgIDYzOSwxMX0sIHsgICAgMzUxLDEyfSwgeyAgICAxOTEsMTF9LCB7ICAgIDM4MywxMH0sIFwKKyAgICB7ICAgIDc2NywxMn0sIHsgICAgMjIzLDExfSwgeyAgICA0NDcsMTB9LCB7ICAgIDg5NSwxM30sIFwKKyAgICB7ICAgIDEyNywxMn0sIHsgICAgMjU1LDExfSwgeyAgICA1MTEsMTJ9LCB7ICAgIDI4NywxMX0sIFwKKyAgICB7ICAgIDU3NSwxMH0sIHsgICAxMTUxLDEyfSwgeyAgICAzMTksMTF9LCB7ICAgIDYzOSwxMn0sIFwKKyAgICB7ICAgIDM1MSwxMX0sIHsgICAgNzAzLDEzfSwgeyAgICAxOTEsMTJ9LCB7ICAgIDM4MywxMX0sIFwKKyAgICB7ICAgIDc2NywxMn0sIHsgICAgNDE1LDExfSwgeyAgICA4MzEsMTB9LCB7ICAgMTY2MywxMn0sIFwKKyAgICB7ICAgIDQ0NywxMX0sIHsgICAgODk1LDE0fSwgeyAgMTYzODQsMTV9LCB7ICAzMjc2OCwxNn0sIFwKKyAgICB7ICA2NTUzNiwxN30sIHsgMTMxMDcyLDE4fSwgeyAyNjIxNDQsMTl9LCB7IDUyNDI4OCwyMH0sIFwKKyAgICB7MTA0ODU3NiwyMX0sIHsyMDk3MTUyLDIyfSwgezQxOTQzMDQsMjN9LCB7ODM4ODYwOCwyNH0gfQorI2RlZmluZSBNVUxfRkZUX1RBQkxFM19TSVpFIDEyMAorI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMjY4OAorCisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgMTg4ICAvKiBrID0gNSAqLworI2RlZmluZSBTUVJfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgMTg4LCA1fSwgeyAgICAgIDksIDZ9LCB7ICAgICAgNSwgNX0sIHsgICAgIDExLCA2fSwgXAorICAgIHsgICAgIDEzLCA3fSwgeyAgICAgMTMsIDh9LCB7ICAgICAgNywgN30sIHsgICAgIDE2LCA4fSwgXAorICAgIHsgICAgICA5LCA3fSwgeyAgICAgMTksIDh9LCB7ICAgICAxMywgOX0sIHsgICAgICA3LCA4fSwgXAorICAgIHsgICAgIDE5LCA5fSwgeyAgICAgMTEsIDh9LCB7ICAgICAyMywxMH0sIHsgICAgICA3LCA5fSwgXAorICAgIHsgICAgIDE1LCA4fSwgeyAgICAgMzEsIDl9LCB7ICAgICAxOSwgOH0sIHsgICAgIDM5LCA5fSwgXAorICAgIHsgICAgIDIzLDEwfSwgeyAgICAgMTUsIDl9LCB7ICAgICAzOSwxMH0sIHsgICAgIDIzLDExfSwgXAorICAgIHsgICAgIDE1LDEwfSwgeyAgICAgMzEsIDl9LCB7ICAgICA2NywxMH0sIHsgICAgIDM5LCA5fSwgXAorICAgIHsgICAgIDc5LCA4fSwgeyAgICAxNTksMTB9LCB7ICAgICA0NywgOX0sIHsgICAgIDk1LCA4fSwgXAorICAgIHsgICAgMTkxLDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA2MywgOX0sIHsgICAgMTI3LCA4fSwgXAorICAgIHsgICAgMjU1LDEwfSwgeyAgICAgNzEsIDl9LCB7ICAgIDE0MywgOH0sIHsgICAgMjg3LDEwfSwgXAorICAgIHsgICAgIDc5LCA5fSwgeyAgICAxNTksMTF9LCB7ICAgICA0NywxMH0sIHsgICAgIDk1LCA5fSwgXAorICAgIHsgICAgMTkxLDEyfSwgeyAgICAgMzEsMTF9LCB7ICAgICA2MywxMH0sIHsgICAgMTI3LCA5fSwgXAorICAgIHsgICAgMjU1LCA4fSwgeyAgICA1MTEsMTB9LCB7ICAgIDE0MywgOX0sIHsgICAgMjg3LDExfSwgXAorICAgIHsgICAgIDc5LDEwfSwgeyAgICAxNTksIDl9LCB7ICAgIDMxOSwgOH0sIHsgICAgNjM5LDEwfSwgXAorICAgIHsgICAgMTc1LDExfSwgeyAgICAgOTUsMTB9LCB7ICAgIDE5MSwgOX0sIHsgICAgMzgzLDExfSwgXAorICAgIHsgICAgMTExLDEwfSwgeyAgICAyMjMsMTJ9LCB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgXAorICAgIHsgICAgMjU1LCA5fSwgeyAgICA1MTEsMTF9LCB7ICAgIDE0MywxMH0sIHsgICAgMjg3LCA5fSwgXAorICAgIHsgICAgNTc1LDExfSwgeyAgICAxNTksMTB9LCB7ICAgIDMxOSwgOX0sIHsgICAgNjM5LDExfSwgXAorICAgIHsgICAgMTc1LDEyfSwgeyAgICAgOTUsMTF9LCB7ICAgIDE5MSwxMH0sIHsgICAgMzgzLCA5fSwgXAorICAgIHsgICAgNzY3LDExfSwgeyAgICAyMjMsMTN9LCB7ICAgICA2MywxMn0sIHsgICAgMTI3LDExfSwgXAorICAgIHsgICAgMjU1LDEwfSwgeyAgICA1MTEsMTF9LCB7ICAgIDI4NywxMH0sIHsgICAgNTc1LDEyfSwgXAorICAgIHsgICAgMTU5LDExfSwgeyAgICAzMTksMTB9LCB7ICAgIDYzOSwxMX0sIHsgICAgMzUxLDEyfSwgXAorICAgIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTB9LCB7ICAgIDc2NywxMn0sIHsgICAgMjIzLDExfSwgXAorICAgIHsgICAgNDQ3LDEwfSwgeyAgICA4OTUsMTN9LCB7ICAgIDEyNywxMn0sIHsgICAgMjU1LDExfSwgXAorICAgIHsgICAgNTExLDEyfSwgeyAgICAyODcsMTF9LCB7ICAgIDU3NSwxMH0sIHsgICAxMTUxLDEyfSwgXAorICAgIHsgICAgMzE5LDExfSwgeyAgICA2MzksMTJ9LCB7ICAgIDM1MSwxM30sIHsgICAgMTkxLDEyfSwgXAorICAgIHsgICAgMzgzLDExfSwgeyAgICA3NjcsMTJ9LCB7ICAgIDQ0NywxMX0sIHsgICAgODk1LDE0fSwgXAorICAgIHsgIDE2Mzg0LDE1fSwgeyAgMzI3NjgsMTZ9LCB7ICA2NTUzNiwxN30sIHsgMTMxMDcyLDE4fSwgXAorICAgIHsgMjYyMTQ0LDE5fSwgeyA1MjQyODgsMjB9LCB7MTA0ODU3NiwyMX0sIHsyMDk3MTUyLDIyfSwgXAorICAgIHs0MTk0MzA0LDIzfSwgezgzODg2MDgsMjR9IH0KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTNfU0laRSAxMTgKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDE3MjgKKworI2RlZmluZSBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgMgorI2RlZmluZSBNVUxMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAyNworI2RlZmluZSBNVUxMT19NVUxfTl9USFJFU0hPTEQgICAgICAgICAgICAgMjUxMQorCisjZGVmaW5lIERDX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lIERDX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAgIDg3CisjZGVmaW5lIERDX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lIERDX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDYwCisKKyNkZWZpbmUgSU5WX01VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgMjcKKyNkZWZpbmUgSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgICAgOTEKKyNkZWZpbmUgSU5WX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgOTEKKworI2RlZmluZSBCSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgIDExNQorI2RlZmluZSBSRURDXzFfVE9fUkVEQ19OX1RIUkVTSE9MRCAgICAgICAgICAzMQorCisjZGVmaW5lIE1VX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNTUxCisjZGVmaW5lIE1VX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAgNTUxCisjZGVmaW5lIE1VUElfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDQyCisjZGVmaW5lIE1VX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgNDgzCisjZGVmaW5lIE1VX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAgNDkyCisKKyNkZWZpbmUgUE9XTV9TRUNfVEFCTEUgIDIsMjMsMTQwLDU1Niw3MTMsNzQ2CisKKyNkZWZpbmUgTUFUUklYMjJfU1RSQVNTRU5fVEhSRVNIT0xEICAgICAgICAgIDgKKyNkZWZpbmUgSEdDRF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgICAgNTYKKyNkZWZpbmUgSEdDRF9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNTEKKyNkZWZpbmUgSEdDRF9SRURVQ0VfVEhSRVNIT0xEICAgICAgICAgICAgICA2ODgKKyNkZWZpbmUgR0NEX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAzMzMKKyNkZWZpbmUgR0NERVhUX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMjYKKyNkZWZpbmUgSkFDT0JJX0JBU0VfTUVUSE9EICAgICAgICAgICAgICAgICAgIDEKKworI2RlZmluZSBHRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNworI2RlZmluZSBHRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgICAyOAorI2RlZmluZSBTRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDM3NQorI2RlZmluZSBTRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgIDgxMgorCisjZGVmaW5lIEZBQ19EU0NfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgMzUxCisjZGVmaW5lIEZBQ19PRERfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9wNC9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvcDQvZ21wLW1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNDBmYjkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvcDQvZ21wLW1wYXJhbS5oCkBAIC0wLDAgKzEsMjE0IEBACisvKiBQT1dFUjQvUG93ZXJQQzk3MCBnbXAtbXBhcmFtLmggLS0gQ29tcGlsZXIvbWFjaGluZSBwYXJhbWV0ZXIgaGVhZGVyIGZpbGUuCisKK0NvcHlyaWdodCAyMDA4LTIwMTAsIDIwMTQsIDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNkZWZpbmUgR01QX0xJTUJfQklUUyA2NAorI2RlZmluZSBHTVBfTElNQl9CWVRFUyA4CisKKy8qIDE4MDAgTUh6IFBQQzk3MCAqLworLyogRkZUIHR1bmluZyBsaW1pdCA9IDE1IE0gKi8KKy8qIEdlbmVyYXRlZCBieSB0dW5ldXAuYywgMjAxNS0xMC0wOSwgZ2NjIDQuMCAqLworCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNworI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNQorI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAgOQorI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICAgICAyMgorI2RlZmluZSBQUkVJTlZfTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAxNgorI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBESVZfUVJfMU5fUEkxX01FVEhPRCAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBESVZfUVJfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgMQorI2RlZmluZSBESVZfUVJfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgMQorI2RlZmluZSBESVZfUVJfMl9QSTJfVEhSRVNIT0xEICAgICAgICAgICBNUF9TSVpFX1RfTUFYICAvKiBuZXZlciAqLworI2RlZmluZSBESVZFWEFDVF8xX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIEJNT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgICAgICAgIDM1CisKKyNkZWZpbmUgRElWXzFfVlNfTVVMXzFfUEVSQ0VOVCAgICAgICAgICAgICAyMTgKKworI2RlZmluZSBNVUxfVE9PTTIyX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBNVUxfVE9PTTMzX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA1MworI2RlZmluZSBNVUxfVE9PTTQ0X1RIUkVTSE9MRCAgICAgICAgICAgICAgIDEzNgorI2RlZmluZSBNVUxfVE9PTTZIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE5NworI2RlZmluZSBNVUxfVE9PTThIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDI3MgorCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTQzX1RIUkVTSE9MRCAgICAgIDg5CisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgIDkxCisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgIDg5CisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTYzX1RIUkVTSE9MRCAgICAgIDkwCisjZGVmaW5lIE1VTF9UT09NNDNfVE9fVE9PTTU0X1RIUkVTSE9MRCAgICAgIDc2CisKKyNkZWZpbmUgU1FSX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAobmF0aXZlKSAqLworI2RlZmluZSBTUVJfVE9PTTJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAyMgorI2RlZmluZSBTUVJfVE9PTTNfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA3MworI2RlZmluZSBTUVJfVE9PTTRfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDIwMgorI2RlZmluZSBTUVJfVE9PTTZfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIFNRUl9UT09NOF9USFJFU0hPTEQgICAgICAgICAgICAgICAgNDMwCisKKyNkZWZpbmUgTVVMTUlEX1RPT000Ml9USFJFU0hPTEQgICAgICAgICAgICAgMzQKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxMQorI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxMworCisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgNDQ0ICAvKiBrID0gNSAqLworI2RlZmluZSBNVUxfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgNDQ0LCA1fSwgeyAgICAgMTcsIDZ9LCB7ICAgICAgOSwgNX0sIHsgICAgIDE5LCA2fSwgXAorICAgIHsgICAgIDEwLCA1fSwgeyAgICAgMjEsIDZ9LCB7ICAgICAxMywgNX0sIHsgICAgIDI4LCA2fSwgXAorICAgIHsgICAgIDE5LCA3fSwgeyAgICAgMTAsIDZ9LCB7ICAgICAyMSwgN30sIHsgICAgIDExLCA2fSwgXAorICAgIHsgICAgIDIzLCA3fSwgeyAgICAgMTIsIDZ9LCB7ICAgICAyNSwgN30sIHsgICAgIDIxLCA4fSwgXAorICAgIHsgICAgIDExLCA3fSwgeyAgICAgMjUsIDh9LCB7ICAgICAxMywgN30sIHsgICAgIDI4LCA4fSwgXAorICAgIHsgICAgIDE1LCA3fSwgeyAgICAgMzEsIDh9LCB7ICAgICAyMSwgOX0sIHsgICAgIDExLCA4fSwgXAorICAgIHsgICAgIDI3LCA5fSwgeyAgICAgMTUsIDh9LCB7ICAgICAzNSwgOX0sIHsgICAgIDE5LCA4fSwgXAorICAgIHsgICAgIDM5LCA5fSwgeyAgICAgMjMsIDh9LCB7ICAgICA0OSwgOX0sIHsgICAgIDI3LDEwfSwgXAorICAgIHsgICAgIDE1LCA5fSwgeyAgICAgMzksMTB9LCB7ICAgICAyMywgOX0sIHsgICAgIDU1LDExfSwgXAorICAgIHsgICAgIDE1LDEwfSwgeyAgICAgMzEsIDl9LCB7ICAgICA3MSwxMH0sIHsgICAgIDM5LCA5fSwgXAorICAgIHsgICAgIDgzLDEwfSwgeyAgICAgNDcsIDl9LCB7ICAgICA5NSwxMH0sIHsgICAgIDU1LDExfSwgXAorICAgIHsgICAgIDMxLDEwfSwgeyAgICAgNjMsIDl9LCB7ICAgIDEyNywxMH0sIHsgICAgIDg3LDExfSwgXAorICAgIHsgICAgIDQ3LDEwfSwgeyAgICAxMDMsMTJ9LCB7ICAgICAzMSwxMX0sIHsgICAgIDYzLDEwfSwgXAorICAgIHsgICAgMTM1LCA5fSwgeyAgICAyNzEsMTF9LCB7ICAgICA3OSwxMH0sIHsgICAgMTU5LCA5fSwgXAorICAgIHsgICAgMzE5LDEwfSwgeyAgICAxNjcsMTF9LCB7ICAgICA5NSwgOX0sIHsgICAgMzgzLCA4fSwgXAorICAgIHsgICAgNzY3LDEwfSwgeyAgICAxOTksMTF9LCB7ICAgIDExMSwxMn0sIHsgICAgIDYzLDExfSwgXAorICAgIHsgICAgMTI3LDEwfSwgeyAgICAyNTUsIDl9LCB7ICAgIDUxMSwxMH0sIHsgICAgMjcxLCA5fSwgXAorICAgIHsgICAgNTQzLDExfSwgeyAgICAxNDMsMTB9LCB7ICAgIDI4NywgOX0sIHsgICAgNTc1LDEwfSwgXAorICAgIHsgICAgMzAzLCA5fSwgeyAgICA2MDcsMTF9LCB7ICAgIDE1OSwxMH0sIHsgICAgMzE5LCA5fSwgXAorICAgIHsgICAgNjM5LDEwfSwgeyAgICAzMzUsIDl9LCB7ICAgIDY3MSwxMH0sIHsgICAgMzUxLDEyfSwgXAorICAgIHsgICAgIDk1LDEwfSwgeyAgICAzODMsIDl9LCB7ICAgIDc2NywxMH0sIHsgICAgNDE1LCA5fSwgXAorICAgIHsgICAgODMxLDEzfSwgeyAgICAgNjMsMTJ9LCB7ICAgIDEyNywxMX0sIHsgICAgMjU1LDEwfSwgXAorICAgIHsgICAgNTExLDExfSwgeyAgICAyNzEsMTB9LCB7ICAgIDU0MywxMX0sIHsgICAgMjg3LDEwfSwgXAorICAgIHsgICAgNTc1LDExfSwgeyAgICAzMDMsMTB9LCB7ICAgIDYwNywxMn0sIHsgICAgMTU5LDExfSwgXAorICAgIHsgICAgMzE5LDEwfSwgeyAgICA2MzksMTF9LCB7ICAgIDMzNSwxMH0sIHsgICAgNjcxLDExfSwgXAorICAgIHsgICAgMzUxLDEwfSwgeyAgICA3MDMsMTF9LCB7ICAgIDM4MywxMH0sIHsgICAgNzY3LDExfSwgXAorICAgIHsgICAgNDE1LDEwfSwgeyAgICA4MzEsMTJ9LCB7ICAgIDIyMywxMH0sIHsgICAgODk1LDEzfSwgXAorICAgIHsgICAgMTI3LDEyfSwgeyAgICAyNTUsMTF9LCB7ICAgIDU0MywxMn0sIHsgICAgMjg3LDExfSwgXAorICAgIHsgICAgNjA3LDEyfSwgeyAgICAzMTksMTF9LCB7ICAgIDY3MSwxMn0sIHsgICAgMzUxLDExfSwgXAorICAgIHsgICAgNzAzLDEyfSwgeyAgICAzODMsMTF9LCB7ICAgIDc2NywxMn0sIHsgICAgNDE1LDExfSwgXAorICAgIHsgICAgODk1LDE0fSwgeyAgICAxMjcsMTN9LCB7ICAgIDI1NSwxMn0sIHsgICAgNjA3LDEzfSwgXAorICAgIHsgICAgMzE5LDEyfSwgeyAgICA3MDMsMTN9LCB7ICAgIDM4MywxMn0sIHsgICAgODk1LDE0fSwgXAorICAgIHsgICAgMjU1LDEzfSwgeyAgICA1MTEsMTJ9LCB7ICAgMTAyMywxM30sIHsgICAgNTc1LDEyfSwgXAorICAgIHsgICAxMTUxLDEzfSwgeyAgICA3MDMsMTR9LCB7ICAgIDM4MywxM30sIHsgICAgODk1LDE1fSwgXAorICAgIHsgICAgMjU1LDE0fSwgeyAgICA1MTEsMTN9LCB7ICAgMTAyMywxMn0sIHsgICAyMDQ3LDEzfSwgXAorICAgIHsgICAxMDg3LDEyfSwgeyAgIDIxNzUsMTN9LCB7ICAgMTE1MSwxNH0sIHsgICAgNjM5LDEzfSwgXAorICAgIHsgICAxMzQzLDEyfSwgeyAgIDI2ODcsMTN9LCB7ICAgMTQwNywxNH0sIHsgICAgNzY3LDEzfSwgXAorICAgIHsgICAxNjYzLDE0fSwgeyAgICA4OTUsMTV9LCB7ICAzMjc2OCwxNn0sIHsgIDY1NTM2LDE3fSwgXAorICAgIHsgMTMxMDcyLDE4fSwgeyAyNjIxNDQsMTl9LCB7IDUyNDI4OCwyMH0sIHsxMDQ4NTc2LDIxfSwgXAorICAgIHsyMDk3MTUyLDIyfSwgezQxOTQzMDQsMjN9LCB7ODM4ODYwOCwyNH0gfQorI2RlZmluZSBNVUxfRkZUX1RBQkxFM19TSVpFIDE1OQorI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgOTA4OAorCisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgMzQ0ICAvKiBrID0gNSAqLworI2RlZmluZSBTUVJfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgMzQ0LCA1fSwgeyAgICAgMTUsIDZ9LCB7ICAgICAgOCwgNX0sIHsgICAgIDE3LCA2fSwgXAorICAgIHsgICAgICA5LCA1fSwgeyAgICAgMTksIDZ9LCB7ICAgICAxMCwgNX0sIHsgICAgIDIxLCA2fSwgXAorICAgIHsgICAgIDEzLCA1fSwgeyAgICAgMjgsIDZ9LCB7ICAgICAyMSwgN30sIHsgICAgIDExLCA2fSwgXAorICAgIHsgICAgIDIzLCA3fSwgeyAgICAgMTIsIDZ9LCB7ICAgICAyNSwgN30sIHsgICAgIDE0LCA2fSwgXAorICAgIHsgICAgIDI5LCA3fSwgeyAgICAgMjEsIDh9LCB7ICAgICAxMSwgN30sIHsgICAgIDI1LCA4fSwgXAorICAgIHsgICAgIDEzLCA3fSwgeyAgICAgMjcsIDh9LCB7ICAgICAxNSwgN30sIHsgICAgIDMxLCA4fSwgXAorICAgIHsgICAgIDIxLCA5fSwgeyAgICAgMTEsIDh9LCB7ICAgICAyNywgOX0sIHsgICAgIDE1LCA4fSwgXAorICAgIHsgICAgIDM1LCA5fSwgeyAgICAgMTksIDh9LCB7ICAgICAzOSwgOX0sIHsgICAgIDIzLCA4fSwgXAorICAgIHsgICAgIDQ3LCA5fSwgeyAgICAgMjcsMTB9LCB7ICAgICAxNSwgOX0sIHsgICAgIDM5LDEwfSwgXAorICAgIHsgICAgIDIzLCA5fSwgeyAgICAgNTEsMTF9LCB7ICAgICAxNSwxMH0sIHsgICAgIDMxLCA5fSwgXAorICAgIHsgICAgIDY3LDEwfSwgeyAgICAgMzksIDl9LCB7ICAgICA3OSwxMH0sIHsgICAgIDQ3LCA5fSwgXAorICAgIHsgICAgIDk1LDEwfSwgeyAgICAgNTUsMTF9LCB7ICAgICAzMSwxMH0sIHsgICAgIDc5LDExfSwgXAorICAgIHsgICAgIDQ3LDEwfSwgeyAgICAgOTUsIDl9LCB7ICAgIDE5MSwxMH0sIHsgICAgMTAzLDEyfSwgXAorICAgIHsgICAgIDMxLDExfSwgeyAgICAgNjMsMTB9LCB7ICAgIDEyNywgOX0sIHsgICAgMjU1LCA4fSwgXAorICAgIHsgICAgNTExLDEwfSwgeyAgICAxMzUsIDl9LCB7ICAgIDI3MSwgOH0sIHsgICAgNTQzLDExfSwgXAorICAgIHsgICAgIDc5LCA5fSwgeyAgICAzMTksIDh9LCB7ICAgIDYzOSwxMX0sIHsgICAgIDk1LDEwfSwgXAorICAgIHsgICAgMTkxLCA5fSwgeyAgICAzODMsIDh9LCB7ICAgIDc2NywxMH0sIHsgICAgMjA3LCA5fSwgXAorICAgIHsgICAgNDE1LDEyfSwgeyAgICAgNjMsMTF9LCB7ICAgIDEyNywxMH0sIHsgICAgMjU1LCA5fSwgXAorICAgIHsgICAgNTExLDEwfSwgeyAgICAyNzEsIDl9LCB7ICAgIDU0MywxMH0sIHsgICAgMjg3LCA5fSwgXAorICAgIHsgICAgNTc1LDEwfSwgeyAgICAzMDMsIDl9LCB7ICAgIDYwNywxMH0sIHsgICAgMzE5LCA5fSwgXAorICAgIHsgICAgNjM5LDEwfSwgeyAgICAzMzUsMTF9LCB7ICAgIDE3NSwxMH0sIHsgICAgMzUxLCA5fSwgXAorICAgIHsgICAgNzAzLDExfSwgeyAgICAxOTEsMTB9LCB7ICAgIDM4MywgOX0sIHsgICAgNzY3LDExfSwgXAorICAgIHsgICAgMjA3LDEwfSwgeyAgICA0MTUsIDl9LCB7ICAgIDgzMSwxM30sIHsgICAgIDYzLDEyfSwgXAorICAgIHsgICAgMTI3LDExfSwgeyAgICAyNTUsMTB9LCB7ICAgIDUxMSwxMX0sIHsgICAgMjcxLDEwfSwgXAorICAgIHsgICAgNTQzLDExfSwgeyAgICAyODcsMTB9LCB7ICAgIDU3NSwxMX0sIHsgICAgMzAzLDEwfSwgXAorICAgIHsgICAgNjA3LDExfSwgeyAgICAzMTksMTB9LCB7ICAgIDYzOSwxMX0sIHsgICAgMzM1LDEwfSwgXAorICAgIHsgICAgNjcxLDExfSwgeyAgICAzNTEsMTB9LCB7ICAgIDcwMywxMn0sIHsgICAgMTkxLDExfSwgXAorICAgIHsgICAgMzgzLDEwfSwgeyAgICA3NjcsMTF9LCB7ICAgIDQxNSwxMH0sIHsgICAgODMxLDEyfSwgXAorICAgIHsgICAgMjIzLDEwfSwgeyAgICA4OTUsMTF9LCB7ICAgIDQ3OSwxM30sIHsgICAgMTI3LDEyfSwgXAorICAgIHsgICAgMjU1LDExfSwgeyAgICA1NDMsMTJ9LCB7ICAgIDI4NywxMX0sIHsgICAgNjA3LDEyfSwgXAorICAgIHsgICAgMzE5LDExfSwgeyAgICA2NzEsMTJ9LCB7ICAgIDM1MSwxMX0sIHsgICAgNzAzLDEzfSwgXAorICAgIHsgICAgMTkxLDEyfSwgeyAgICAzODMsMTF9LCB7ICAgIDc2NywxMn0sIHsgICAgNDE1LDExfSwgXAorICAgIHsgICAgODMxLDEwfSwgeyAgIDE2NjMsMTF9LCB7ICAgIDg5NSwxMn0sIHsgICAgNDc5LDE0fSwgXAorICAgIHsgICAgMTI3LDEzfSwgeyAgICAyNTUsMTJ9LCB7ICAgIDYwNywxM30sIHsgICAgMzE5LDEyfSwgXAorICAgIHsgICAgNzAzLDEzfSwgeyAgICAzODMsMTJ9LCB7ICAgIDgzMSwxMX0sIHsgICAxNjYzLDEyfSwgXAorICAgIHsgICAgOTI3LDE0fSwgeyAgICAyNTUsMTN9LCB7ICAgIDUxMSwxMn0sIHsgICAxMDIzLDEzfSwgXAorICAgIHsgICAgNTc1LDEyfSwgeyAgIDExNTEsMTN9LCB7ICAgIDYzOSwxMn0sIHsgICAxMjc5LDEzfSwgXAorICAgIHsgICAgNzAzLDE0fSwgeyAgICAzODMsMTN9LCB7ICAgIDg5NSwxNX0sIHsgICAgMjU1LDE0fSwgXAorICAgIHsgICAgNTExLDEzfSwgeyAgIDEwMjMsMTJ9LCB7ICAgMjE3NSwxM30sIHsgICAxMTUxLDEyfSwgXAorICAgIHsgICAyMzAzLDEzfSwgeyAgIDEyMTUsMTR9LCB7ICAgIDYzOSwxM30sIHsgICAxMzQzLDEyfSwgXAorICAgIHsgICAyNjg3LDEzfSwgeyAgIDE0MDcsMTR9LCB7ICAgIDc2NywxM30sIHsgICAxNjYzLDE0fSwgXAorICAgIHsgICAgODk1LDE1fSwgeyAgMzI3NjgsMTZ9LCB7ICA2NTUzNiwxN30sIHsgMTMxMDcyLDE4fSwgXAorICAgIHsgMjYyMTQ0LDE5fSwgeyA1MjQyODgsMjB9LCB7MTA0ODU3NiwyMX0sIHsyMDk3MTUyLDIyfSwgXAorICAgIHs0MTk0MzA0LDIzfSwgezgzODg2MDgsMjR9IH0KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTNfU0laRSAxNzQKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDYyNzIKKworI2RlZmluZSBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDQzCisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgIDE4MDg3CisjZGVmaW5lIFNRUkxPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAyCisjZGVmaW5lIFNRUkxPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDc5CisjZGVmaW5lIFNRUkxPX1NRUl9USFJFU0hPTEQgICAgICAgICAgICAgIDEyMzIyCisKKyNkZWZpbmUgRENfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNDIKKyNkZWZpbmUgRENfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAxNTkKKyNkZWZpbmUgRENfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNDYKKyNkZWZpbmUgRENfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMTAKKworI2RlZmluZSBJTlZfTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAyNgorI2RlZmluZSBJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE3NworI2RlZmluZSBJTlZfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDE2NQorCisjZGVmaW5lIEJJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTk4CisjZGVmaW5lIFJFRENfMV9UT19SRURDX05fVEhSRVNIT0xEICAgICAgICAgIDU2CisKKyNkZWZpbmUgTVVfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDEwMTcKKyNkZWZpbmUgTVVfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgIDExNDIKKyNkZWZpbmUgTVVQSV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgOTAKKyNkZWZpbmUgTVVfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICA5MjQKKyNkZWZpbmUgTVVfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDEwMTcKKworI2RlZmluZSBQT1dNX1NFQ19UQUJMRSAgNywxNyw4Niw1NzksMTkyNQorCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgIDIzCisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgNzg4CisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAxNzEzCisKKyNkZWZpbmUgRkFDX0RTQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICA1MTIKKyNkZWZpbmUgRkFDX09ERF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgMjUKKworI2RlZmluZSBNQVRSSVgyMl9TVFJBU1NFTl9USFJFU0hPTEQgICAgICAgICAxMAorI2RlZmluZSBIR0NEX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgIDExMworI2RlZmluZSBIR0NEX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDExNQorI2RlZmluZSBIR0NEX1JFRFVDRV9USFJFU0hPTEQgICAgICAgICAgICAgNDYzMworI2RlZmluZSBHQ0RfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDMzMAorI2RlZmluZSBHQ0RFWFRfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDI0MgorI2RlZmluZSBKQUNPQklfQkFTRV9NRVRIT0QgICAgICAgICAgICAgICAgICAgNApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L3A1L2dtcC1tcGFyYW0uaCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9wNS9nbXAtbXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTViMDA5YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9wNS9nbXAtbXBhcmFtLmgKQEAgLTAsMCArMSwyMTkgQEAKKy8qIFBPV0VSNSBnbXAtbXBhcmFtLmggLS0gQ29tcGlsZXIvbWFjaGluZSBwYXJhbWV0ZXIgaGVhZGVyIGZpbGUuCisKK0NvcHlyaWdodCAxOTkxLCAxOTkzLCAxOTk0LCAxOTk5LTIwMDMsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgNjQKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgOAorCisvKiBQT1dFUjUgKGZyaWdnbXMuaHBjLm50bnUubm8pICovCisKKyNkZWZpbmUgTU9EXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PRF8xTl9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA2CisjZGVmaW5lIE1PRF8xVV9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA1CisjZGVmaW5lIE1PRF8xXzFfVE9fTU9EXzFfMl9USFJFU0hPTEQgICAgICAgIDE1CisjZGVmaW5lIE1PRF8xXzJfVE9fTU9EXzFfNF9USFJFU0hPTEQgICAgICAgICAwICAvKiBuZXZlciBtcG5fbW9kXzFzXzJwICovCisjZGVmaW5lIFBSRUlOVl9NT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgIDExCisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIERJVl9RUl8yX1BJMl9USFJFU0hPTEQgICAgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgICAgICAgNDAKKworI2RlZmluZSBNVUxfVE9PTTIyX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyMQorI2RlZmluZSBNVUxfVE9PTTMzX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBNVUxfVE9PTTQ0X1RIUkVTSE9MRCAgICAgICAgICAgICAgICA3MAorI2RlZmluZSBNVUxfVE9PTTZIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDI2MgorI2RlZmluZSBNVUxfVE9PTThIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDM5MworCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTQzX1RIUkVTSE9MRCAgICAgIDQ5CisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgMTI2CisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgIDg1CisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTYzX1RIUkVTSE9MRCAgICAgIDk0CisjZGVmaW5lIE1VTF9UT09NNDNfVE9fVE9PTTU0X1RIUkVTSE9MRCAgICAgIDcwCisKKyNkZWZpbmUgU1FSX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAobmF0aXZlKSAqLworI2RlZmluZSBTUVJfVE9PTTJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBTUVJfVE9PTTNfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA4MQorI2RlZmluZSBTUVJfVE9PTTRfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE0MgorI2RlZmluZSBTUVJfVE9PTTZfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE4OQorI2RlZmluZSBTUVJfVE9PTThfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDI4NAorCisjZGVmaW5lIE1VTE1JRF9UT09NNDJfVEhSRVNIT0xEICAgICAgICAgICAgIDM2CisKKyNkZWZpbmUgTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgU1FSTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTUKKworI2RlZmluZSBNVUxfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDMwNCAgLyogayA9IDUgKi8KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDM0OCwgNX0sIHsgICAgIDE3LCA2fSwgeyAgICAgIDksIDV9LCB7ICAgICAxOSwgNn0sIFwKKyAgICB7ICAgICAxMCwgNX0sIHsgICAgIDIxLCA2fSwgeyAgICAgMjEsIDd9LCB7ICAgICAxMSwgNn0sIFwKKyAgICB7ICAgICAyMywgN30sIHsgICAgIDEyLCA2fSwgeyAgICAgMjUsIDd9LCB7ICAgICAyMSwgOH0sIFwKKyAgICB7ICAgICAxMSwgN30sIHsgICAgIDI1LCA4fSwgeyAgICAgMTMsIDd9LCB7ICAgICAyNywgOH0sIFwKKyAgICB7ICAgICAxNSwgN30sIHsgICAgIDMxLCA4fSwgeyAgICAgMjEsIDl9LCB7ICAgICAxMSwgOH0sIFwKKyAgICB7ICAgICAyNywgOX0sIHsgICAgIDE1LCA4fSwgeyAgICAgMzMsIDl9LCB7ICAgICAxOSwgOH0sIFwKKyAgICB7ICAgICAzOSwgOX0sIHsgICAgIDIzLCA4fSwgeyAgICAgNDcsIDl9LCB7ICAgICAyNywxMH0sIFwKKyAgICB7ICAgICAxNSwgOX0sIHsgICAgIDM5LDEwfSwgeyAgICAgMjMsIDl9LCB7ICAgICA1MSwxMX0sIFwKKyAgICB7ICAgICAxNSwxMH0sIHsgICAgIDMxLCA5fSwgeyAgICAgNjcsMTB9LCB7ICAgICAzOSwgOX0sIFwKKyAgICB7ICAgICA3OSwxMH0sIHsgICAgIDQ3LCA5fSwgeyAgICAgOTUsMTB9LCB7ICAgICA1NSwxMX0sIFwKKyAgICB7ICAgICAzMSwxMH0sIHsgICAgIDc5LDExfSwgeyAgICAgNDcsMTB9LCB7ICAgICA5NSwxMn0sIFwKKyAgICB7ICAgICAzMSwxMX0sIHsgICAgIDYzLDEwfSwgeyAgICAxMjcsIDl9LCB7ICAgIDI1NSwxMH0sIFwKKyAgICB7ICAgIDEzNSwxMX0sIHsgICAgIDc5LDEwfSwgeyAgICAxNTksIDl9LCB7ICAgIDMxOSwxMX0sIFwKKyAgICB7ICAgICA5NSwxMH0sIHsgICAgMTkxLCA5fSwgeyAgICAzODMsMTJ9LCB7ICAgICA2MywxMX0sIFwKKyAgICB7ICAgIDEyNywxMH0sIHsgICAgMjU1LCA5fSwgeyAgICA1MTEsMTB9LCB7ICAgIDI3MSwxMX0sIFwKKyAgICB7ICAgIDE0MywxMH0sIHsgICAgMjg3LCA5fSwgeyAgICA1NzUsMTB9LCB7ICAgIDMxOSwxMn0sIFwKKyAgICB7ICAgICA5NSwxMX0sIHsgICAgMTkxLDEwfSwgeyAgICAzODMsMTN9LCB7ICAgICA2MywxMn0sIFwKKyAgICB7ICAgIDEyNywxMX0sIHsgICAgMjU1LDEwfSwgeyAgICA1MTEsMTF9LCB7ICAgIDI3MSwxMH0sIFwKKyAgICB7ICAgIDU0MywxMX0sIHsgICAgMjg3LDEwfSwgeyAgICA1NzUsIDl9LCB7ICAgMTE1MSwxMX0sIFwKKyAgICB7ICAgIDMxOSwxMH0sIHsgICAgNjM5LDExfSwgeyAgICAzNTEsMTB9LCB7ICAgIDcwMywxMn0sIFwKKyAgICB7ICAgIDE5MSwxMX0sIHsgICAgMzgzLDEwfSwgeyAgICA3NjcsMTF9LCB7ICAgIDQxNSwxMn0sIFwKKyAgICB7ICAgIDIyMywxMX0sIHsgICAgNDQ3LDEzfSwgeyAgICAxMjcsMTJ9LCB7ICAgIDI1NSwxMX0sIFwKKyAgICB7ICAgIDUxMSwxMH0sIHsgICAxMDIzLDExfSwgeyAgICA1NDMsMTB9LCB7ICAgMTA4NywxMn0sIFwKKyAgICB7ICAgIDI4NywxMX0sIHsgICAgNTc1LDEwfSwgeyAgIDExNTEsMTJ9LCB7ICAgIDMxOSwxMX0sIFwKKyAgICB7ICAgIDYzOSwxMn0sIHsgICAgMzUxLDExfSwgeyAgICA3MDMsMTN9LCB7ICAgIDE5MSwxMn0sIFwKKyAgICB7ICAgIDM4MywxMX0sIHsgICAgNzY3LDEyfSwgeyAgICA0MTUsMTF9LCB7ICAgIDgzMSwxMn0sIFwKKyAgICB7ICAgIDQ0NywxMX0sIHsgICAgODk1LDE0fSwgeyAgICAxMjcsMTN9LCB7ICAgIDI1NSwxMn0sIFwKKyAgICB7ICAgIDUxMSwxMX0sIHsgICAxMDIzLDEyfSwgeyAgICA1NDMsMTF9LCB7ICAgMTA4NywxMH0sIFwKKyAgICB7ICAgMjE3NSwxMn0sIHsgICAgNTc1LDExfSwgeyAgIDExNTEsMTJ9LCB7ICAgIDYwNywxM30sIFwKKyAgICB7ICAgIDMxOSwxMn0sIHsgICAgNjM5LDExfSwgeyAgIDEyNzksMTJ9LCB7ICAgIDY3MSwxMX0sIFwKKyAgICB7ICAgMTM0MywxMn0sIHsgICAgNzAzLDExfSwgeyAgIDE0MDcsMTN9LCB7ICAgIDM4MywxMn0sIFwKKyAgICB7ICAgIDc2NywxMX0sIHsgICAxNTM1LDEyfSwgeyAgICA4MzEsMTN9LCB7ICAgIDQ0NywxMn0sIFwKKyAgICB7ICAgIDk1OSwxMX0sIHsgICAxOTE5LDE0fSwgeyAgICAyNTUsMTN9LCB7ICAgIDUxMSwxMn0sIFwKKyAgICB7ICAgMTA4NywxMX0sIHsgICAyMTc1LDEzfSwgeyAgICA1NzUsMTJ9LCB7ICAgMTIxNSwxMX0sIFwKKyAgICB7ICAgMjQzMSwxMH0sIHsgICA0ODYzLDEzfSwgeyAgICA2MzksMTJ9LCB7ICAgMTM0MywxM30sIFwKKyAgICB7ICAgIDcwMywxMn0sIHsgICAxNDA3LDE0fSwgeyAgICAzODMsMTN9LCB7ICAgIDc2NywxMn0sIFwKKyAgICB7ICAgMTUzNSwxM30sIHsgICAgODMxLDEyfSwgeyAgIDE2NjMsMTN9LCB7ICAgIDk1OSwxMn0sIFwKKyAgICB7ICAgMTkxOSwxMX0sIHsgICAzODM5LDE1fSwgeyAgICAyNTUsMTR9LCB7ICAgIDUxMSwxM30sIFwKKyAgICB7ICAgMTA4NywxMn0sIHsgICAyMTc1LDEzfSwgeyAgIDEyMTUsMTJ9LCB7ICAgMjQzMSwxMX0sIFwKKyAgICB7ICAgNDg2MywxNH0sIHsgICAgNjM5LDEzfSwgeyAgIDEzNDMsMTJ9LCB7ICAgMjY4NywxM30sIFwKKyAgICB7ICAgMTQwNywxMn0sIHsgICAyODE1LDEzfSwgeyAgIDE0NzEsMTJ9LCB7ICAgMjk0MywxNH0sIFwKKyAgICB7ICAgIDc2NywxM30sIHsgICAxNTk5LDEyfSwgeyAgIDMxOTksMTN9LCB7ICAgMTY2MywxNH0sIFwKKyAgICB7ICAgIDg5NSwxM30sIHsgICAxOTE5LDEyfSwgeyAgIDM4MzksMTV9LCB7ICAgIDUxMSwxNH0sIFwKKyAgICB7ICAgMTAyMywxM30sIHsgICAyMTc1LDE0fSwgeyAgIDExNTEsMTN9LCB7ICAgMjQzMSwxMn0sIFwKKyAgICB7ICAgNDg2MywxNH0sIHsgICAxMjc5LDEzfSwgeyAgIDI2ODcsMTR9LCB7ICAgMTQwNywxM30sIFwKKyAgICB7ICAgMjk0MywxNX0sIHsgICAgNzY3LDE0fSwgeyAgIDE1MzUsMTN9LCB7ICAgMzE5OSwxNH0sIFwKKyAgICB7ICAgMTY2MywxM30sIHsgICAzMzI3LDE0fSwgeyAgIDE5MTksMTN9LCB7ICAgMzgzOSwxNn0sIFwKKyAgICB7ICAgIDUxMSwxNX0sIHsgICAxMDIzLDE0fSwgeyAgIDI0MzEsMTN9LCB7ICAgNDg2MywxNX0sIFwKKyAgICB7ICAgMTI3OSwxNH0sIHsgICAyOTQzLDEyfSwgeyAgMTE3NzUsMTV9LCB7ICAgMTUzNSwxNH0sIFwKKyAgICB7ICAgMzMyNywxNX0sIHsgICAxNzkxLDE0fSwgeyAgMTYzODQsMTV9LCB7ICAzMjc2OCwxNn0sIFwKKyAgICB7ICA2NTUzNiwxN30sIHsgMTMxMDcyLDE4fSwgeyAyNjIxNDQsMTl9LCB7IDUyNDI4OCwyMH0sIFwKKyAgICB7MTA0ODU3NiwyMX0sIHsyMDk3MTUyLDIyfSwgezQxOTQzMDQsMjN9LCB7ODM4ODYwOCwyNH0gfQorI2RlZmluZSBNVUxfRkZUX1RBQkxFM19TSVpFIDIwOAorI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNDIyNAorCisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgMjg0ICAvKiBrID0gNSAqLworI2RlZmluZSBTUVJfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgMjcyLCA1fSwgeyAgICAgMTUsIDZ9LCB7ICAgICAgOCwgNX0sIHsgICAgIDE3LCA2fSwgXAorICAgIHsgICAgIDE5LCA3fSwgeyAgICAgMTcsIDh9LCB7ICAgICAgOSwgN30sIHsgICAgIDIxLCA4fSwgXAorICAgIHsgICAgIDExLCA3fSwgeyAgICAgMjQsIDh9LCB7ICAgICAxMywgN30sIHsgICAgIDI3LCA4fSwgXAorICAgIHsgICAgIDE1LCA3fSwgeyAgICAgMzEsIDh9LCB7ICAgICAyMSwgOX0sIHsgICAgIDExLCA4fSwgXAorICAgIHsgICAgIDI3LCA5fSwgeyAgICAgMTUsIDh9LCB7ICAgICAzMywgOX0sIHsgICAgIDE5LCA4fSwgXAorICAgIHsgICAgIDM5LCA5fSwgeyAgICAgMjMsIDh9LCB7ICAgICA0NywgOX0sIHsgICAgIDI3LDEwfSwgXAorICAgIHsgICAgIDE1LCA5fSwgeyAgICAgMzksMTB9LCB7ICAgICAyMywgOX0sIHsgICAgIDQ3LDExfSwgXAorICAgIHsgICAgIDE1LDEwfSwgeyAgICAgMzEsIDl9LCB7ICAgICA2MywxMH0sIHsgICAgIDQ3LDExfSwgXAorICAgIHsgICAgIDMxLDEwfSwgeyAgICAgNzEsIDl9LCB7ICAgIDE0MywxMH0sIHsgICAgIDc5LDExfSwgXAorICAgIHsgICAgIDQ3LDEwfSwgeyAgICAgOTUsMTJ9LCB7ICAgICAzMSwxMX0sIHsgICAgIDYzLDEwfSwgXAorICAgIHsgICAgMTI3LCA5fSwgeyAgICAyNTUsIDh9LCB7ICAgIDUxMSwgOX0sIHsgICAgMjcxLDEwfSwgXAorICAgIHsgICAgMTQzLDExfSwgeyAgICAgNzksMTB9LCB7ICAgIDE1OSwgOX0sIHsgICAgMzE5LDEwfSwgXAorICAgIHsgICAgMTc1LCA5fSwgeyAgICAzNTEsMTF9LCB7ICAgICA5NSwxMH0sIHsgICAgMTkxLCA5fSwgXAorICAgIHsgICAgMzgzLDEwfSwgeyAgICAyMDcsIDl9LCB7ICAgIDQxNSwxMn0sIHsgICAgIDYzLDExfSwgXAorICAgIHsgICAgMTI3LDEwfSwgeyAgICAyNTUsIDl9LCB7ICAgIDUxMSwxMH0sIHsgICAgMjcxLDExfSwgXAorICAgIHsgICAgMTQzLDEwfSwgeyAgICAyODcsIDl9LCB7ICAgIDU3NSwxMX0sIHsgICAgMTU5LDEwfSwgXAorICAgIHsgICAgMzE5LDExfSwgeyAgICAxNzUsMTB9LCB7ICAgIDM1MSwxMn0sIHsgICAgIDk1LDExfSwgXAorICAgIHsgICAgMTkxLDEwfSwgeyAgICAzODMsMTF9LCB7ICAgIDIwNywxMH0sIHsgICAgNDE1LDEzfSwgXAorICAgIHsgICAgIDYzLDEyfSwgeyAgICAxMjcsMTF9LCB7ICAgIDI1NSwxMH0sIHsgICAgNTExLDExfSwgXAorICAgIHsgICAgMjcxLDEwfSwgeyAgICA1NDMsMTF9LCB7ICAgIDI4NywxMH0sIHsgICAgNTc1LDEyfSwgXAorICAgIHsgICAgMTU5LDExfSwgeyAgICAzMTksMTB9LCB7ICAgIDYzOSwxMX0sIHsgICAgMzUxLDEwfSwgXAorICAgIHsgICAgNzAzLDEyfSwgeyAgICAxOTEsMTF9LCB7ICAgIDM4MywxMH0sIHsgICAgNzY3LDExfSwgXAorICAgIHsgICAgNDE1LDEyfSwgeyAgICAyMjMsMTF9LCB7ICAgIDQ0NywxMH0sIHsgICAgODk1LDExfSwgXAorICAgIHsgICAgNDc5LDEwfSwgeyAgICA5NTksMTJ9LCB7ICAgIDI1NSwxMX0sIHsgICAgNTExLDEwfSwgXAorICAgIHsgICAxMDIzLDExfSwgeyAgICA1NDMsMTJ9LCB7ICAgIDI4NywxMX0sIHsgICAgNTc1LDEyfSwgXAorICAgIHsgICAgMzE5LDExfSwgeyAgICA2MzksMTJ9LCB7ICAgIDM1MSwxMX0sIHsgICAgNzAzLDEzfSwgXAorICAgIHsgICAgMTkxLDEyfSwgeyAgICAzODMsMTF9LCB7ICAgIDc2NywxMn0sIHsgICAgNDE1LDExfSwgXAorICAgIHsgICAgODMxLDEyfSwgeyAgICA0NDcsMTF9LCB7ICAgIDg5NSwxMn0sIHsgICAgNDc5LDExfSwgXAorICAgIHsgICAgOTU5LDEzfSwgeyAgICAyNTUsMTJ9LCB7ICAgIDUxMSwxMX0sIHsgICAxMDIzLDEyfSwgXAorICAgIHsgICAgNTQzLDExfSwgeyAgIDEwODcsMTJ9LCB7ICAgIDU3NSwxM30sIHsgICAgMzE5LDEyfSwgXAorICAgIHsgICAgNjM5LDExfSwgeyAgIDEyNzksMTJ9LCB7ICAgIDcwMywxMX0sIHsgICAxNDA3LDEzfSwgXAorICAgIHsgICAgMzgzLDEyfSwgeyAgICA4MzEsMTN9LCB7ICAgIDQ0NywxMn0sIHsgICAgOTU5LDE0fSwgXAorICAgIHsgICAgMjU1LDEzfSwgeyAgICA1MTEsMTJ9LCB7ICAgMTA4NywxM30sIHsgICAgNTc1LDEyfSwgXAorICAgIHsgICAxMjE1LDEzfSwgeyAgICA2MzksMTJ9LCB7ICAgMTI3OSwxM30sIHsgICAgNzAzLDEyfSwgXAorICAgIHsgICAxNDA3LDE0fSwgeyAgICAzODMsMTN9LCB7ICAgIDgzMSwxMn0sIHsgICAxNjYzLDEzfSwgXAorICAgIHsgICAgOTU5LDEyfSwgeyAgIDE5MTksMTV9LCB7ICAgIDI1NSwxNH0sIHsgICAgNTExLDEzfSwgXAorICAgIHsgICAxMDIzLDEyfSwgeyAgIDIwNDcsMTN9LCB7ICAgMTA4NywxMn0sIHsgICAyMTc1LDEzfSwgXAorICAgIHsgICAxMjE1LDE0fSwgeyAgICA2MzksMTN9LCB7ICAgMTQwNywxMn0sIHsgICAyODE1LDE0fSwgXAorICAgIHsgICAgNzY3LDEzfSwgeyAgIDE2NjMsMTR9LCB7ICAgIDg5NSwxM30sIHsgICAxOTE5LDE1fSwgXAorICAgIHsgICAgNTExLDE0fSwgeyAgIDEwMjMsMTN9LCB7ICAgMjE3NSwxNH0sIHsgICAxMTUxLDEzfSwgXAorICAgIHsgICAyNDMxLDEyfSwgeyAgIDQ4NjMsMTR9LCB7ICAgMTQwNywxM30sIHsgICAyODE1LDE1fSwgXAorICAgIHsgICAgNzY3LDE0fSwgeyAgIDE2NjMsMTN9LCB7ICAgMzMyNywxNH0sIHsgICAxOTE5LDEzfSwgXAorICAgIHsgICAzODM5LDE2fSwgeyAgICA1MTEsMTV9LCB7ICAgMTAyMywxNH0sIHsgICAyNDMxLDEzfSwgXAorICAgIHsgICA0ODYzLDE1fSwgeyAgIDEyNzksMTR9LCB7ICAgMjk0MywxM30sIHsgICA1ODg3LDEyfSwgXAorICAgIHsgIDExNzc1LDE1fSwgeyAgIDE1MzUsMTR9LCB7ICAgMzMyNywxNX0sIHsgICAxNzkxLDE0fSwgXAorICAgIHsgIDE2Mzg0LDE1fSwgeyAgMzI3NjgsMTZ9LCB7ICA2NTUzNiwxN30sIHsgMTMxMDcyLDE4fSwgXAorICAgIHsgMjYyMTQ0LDE5fSwgeyA1MjQyODgsMjB9LCB7MTA0ODU3NiwyMX0sIHsyMDk3MTUyLDIyfSwgXAorICAgIHs0MTk0MzA0LDIzfSwgezgzODg2MDgsMjR9IH0KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTNfU0laRSAxOTAKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDMyNjQKKworI2RlZmluZSBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgNgorI2RlZmluZSBNVUxMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICA2MAorI2RlZmluZSBNVUxMT19NVUxfTl9USFJFU0hPTEQgICAgICAgICAgICAgNzQ2MworCisjZGVmaW5lIERDX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDU4CisjZGVmaW5lIERDX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAgMjMyCisjZGVmaW5lIERDX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDc4CisjZGVmaW5lIERDX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjM4CisKKyNkZWZpbmUgSU5WX01VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgOTIKKyNkZWZpbmUgSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgICAxNTUKKyNkZWZpbmUgSU5WX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAxNTcKKworI2RlZmluZSBCSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgIDE1NQorI2RlZmluZSBSRURDXzFfVE9fUkVEQ19OX1RIUkVTSE9MRCAgICAgICAgICA2MQorCisjZGVmaW5lIE1VX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgOTk4CisjZGVmaW5lIE1VX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAgOTc5CisjZGVmaW5lIE1VUElfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDc5CisjZGVmaW5lIE1VX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgODIzCisjZGVmaW5lIE1VX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAgOTQyCisKKyNkZWZpbmUgTUFUUklYMjJfU1RSQVNTRU5fVEhSRVNIT0xEICAgICAgICAgMTQKKyNkZWZpbmUgSEdDRF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgICAgNzQKKyNkZWZpbmUgSEdDRF9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNTUKKyNkZWZpbmUgSEdDRF9SRURVQ0VfVEhSRVNIT0xEICAgICAgICAgICAgIDI0NzkKKyNkZWZpbmUgR0NEX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAzNTEKKyNkZWZpbmUgR0NERVhUX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyODgKKyNkZWZpbmUgSkFDT0JJX0JBU0VfTUVUSE9EICAgICAgICAgICAgICAgICAgIDQKKworI2RlZmluZSBHRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBHRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgICAyMQorI2RlZmluZSBTRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDY1MAorI2RlZmluZSBTRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgMTU4NQorCisjZGVmaW5lIEZBQ19EU0NfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgNjYyCisjZGVmaW5lIEZBQ19PRERfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDI4CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvcDYvYW9yc211bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9wNi9hb3JzbXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NzJiOTEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvcDYvYW9yc211bF8xLmFzbQpAQCAtMCwwICsxLDE4NSBAQAorZG5sICBQb3dlclBDLTY0IG1wbl9hZGRtdWxfMSBhbmQgbXBuX3N1Ym11bF8xIG9wdGltaXNlZCBmb3IgcG93ZXI2LgorCitkbmwgIENvcHlyaWdodCAxOTk5LTIwMDEsIDIwMDMtMjAwNiwgMjAwOCwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitkbmwgIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgICAgICAgbXBuX2FkZG11bF8xICAgIG1wbl9zdWJtdWxfMQorQyAgICAgICAgICAgICAgIGN5Y2xlcy9saW1iICAgICBjeWNsZXMvbGltYgorQyBQT1dFUjMvUFBDNjMwICAgICA/ICAgICAgICAgICAgICAgPworQyBQT1dFUjQvUFBDOTcwICAgICA/ICAgICAgICAgICAgICAgPworQyBQT1dFUjUgICAgICAgICAgICA/ICAgICAgICAgICAgICAgPworQyBQT1dFUjYgICAgICAgICAgIDEyLjI1ICAgICAgICAgICAxMi44CitDIFBPV0VSNyAgICAgICAgICAgID8gICAgICAgICAgICAgICA/CisKK0MgVE9ETworQyAgKiBSZWR1Y2UgcmVnaXN0ZXIgdXNhZ2UuCitDICAqIFNjaGVkdWxlIGZ1bmN0aW9uIGVudHJ5IGNvZGUuCitDICAqIFVucm9sbCBtb3JlLiAgOC13YXkgdW5yb2xsaW5nIHdvdWxkIGJyaW5nIHVzIHRvIDEwIGMvbCwgMTYtd2F5IHVucm9sbGluZworQyAgICB3b3VsZCBicmluZyB1cyB0byA5IGMvbC4KK0MgICogSGFuZGxlIG4gPSAxIGFuZCBwZXJoYXBzIG4gPSAyIHNlcGFyYXRlbHksIHdpdGhvdXQgc2F2aW5nIGFueSByZWdpc3RlcnMuCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsICBgcjMnKQorZGVmaW5lKGB1cCcsICBgcjQnKQorZGVmaW5lKGBuJywgICBgcjUnKQorZGVmaW5lKGB2MCcsICBgcjYnKQorCitpZmRlZihgT1BFUkFUSU9OX2FkZG11bF8xJyxgCisgIGRlZmluZShBRERTVUJDLAlhZGRlKQorICBkZWZpbmUoQUREU1VCLAlhZGRjKQorICBkZWZpbmUoZnVuYywJCW1wbl9hZGRtdWxfMSkKKyAgZGVmaW5lKGZ1bmNfbmMsCW1wbl9hZGRtdWxfMWMpCUMgRklYTUU6IG5vdCByZWFsbHkgc3VwcG9ydGVkCisgIGRlZmluZShBTSwJCWAkMScpCisgIGRlZmluZShTTSwJCWAnKQorICBkZWZpbmUoQ0xSUlNDLAlgYWRkaWMJJDEsIHIwLCAwJykKKycpCitpZmRlZihgT1BFUkFUSU9OX3N1Ym11bF8xJyxgCisgIGRlZmluZShBRERTVUJDLAlzdWJmZSkKKyAgZGVmaW5lKEFERFNVQiwJc3ViZmMpCisgIGRlZmluZShmdW5jLAkJbXBuX3N1Ym11bF8xKQorICBkZWZpbmUoZnVuY19uYywJbXBuX3N1Ym11bF8xYykJQyBGSVhNRTogbm90IHJlYWxseSBzdXBwb3J0ZWQKKyAgZGVmaW5lKEFNLAkJYCcpCisgIGRlZmluZShTTSwJCWAkMScpCisgIGRlZmluZShDTFJSU0MsCWBzdWJmYwkkMSwgcjAsIHIwJykKKycpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FkZG11bF8xIG1wbl9zdWJtdWxfMSkKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKGZ1bmMpCisJc3RkCXIzMSwgLTgocjEpCisJc3RkCXIzMCwgLTE2KHIxKQorCXN0ZAlyMjksIC0yNChyMSkKKwlzdGQJcjI4LCAtMzIocjEpCisJc3RkCXIyNywgLTQwKHIxKQorCisJcmxkaWNsLglyMCwgbiwgMCw2MglDIHIwID0gbiAmIDMsIHNldCBjcjAKKwljbXBkaQljcjYsIHIwLCAyCisJYWRkaQluLCBuLCAzCQlDIGNvbXB1dGUgY291bnQuLi4KKwlzcmRpCW4sIG4sIDIJCUMgLi4uZm9yIGN0cgorCW10Y3RyCW4JCUMgY29weSBsb29wIGNvdW50IGludG8gY3RyCisJYmVxCWNyMCwgTChiMCkKKwlibHQJY3I2LCBMKGIxKQorCWJlcQljcjYsIEwoYjIpCisKK0woYjMpOglsZAlyOCwgMCh1cCkKKwlsZAlyNywgOCh1cCkKKwlsZAlyMjcsIDE2KHVwKQorCWFkZGkJdXAsIHVwLCAxNgorCWFkZGkJcnAsIHJwLCAxNgorCW11bGxkCXI1LCAgcjgsIHYwCisJbXVsaGR1CXI4LCAgcjgsIHYwCisJbXVsbGQJcjksICByNywgdjAKKwltdWxoZHUJcjcsICByNywgdjAKKwltdWxsZAlyMTEsIHIyNywgdjAKKwltdWxoZHUJcjI3LCByMjcsIHYwCisJbGQJcjI5LCAtMTYocnApCisJbGQJcjMwLCAtOChycCkKKwlsZAlyMzEsIDAocnApCisJYWRkYwlyOSwgcjksIHI4CisJYWRkZQlyMTEsIHIxMSwgcjcKKwlhZGR6ZQlyMTIsIHIyNworCUFERFNVQglyNSwgcjUsIHIyOQorCWIJTChsMykKKworTChiMik6CWxkCXI3LCAwKHVwKQorCWxkCXIyNywgOCh1cCkKKwlhZGRpCXVwLCB1cCwgOAorCWFkZGkJcnAsIHJwLCA4CisJbXVsbGQJcjksICByNywgdjAKKwltdWxoZHUJcjcsICByNywgdjAKKwltdWxsZAlyMTEsIHIyNywgdjAKKwltdWxoZHUJcjI3LCByMjcsIHYwCisJbGQJcjMwLCAtOChycCkKKwlsZAlyMzEsIDAocnApCisJYWRkYwlyMTEsIHIxMSwgcjcKKwlhZGR6ZQlyMTIsIHIyNworCUFERFNVQglyOSwgcjksIHIzMAorCWIJTChsMikKKworTChiMSk6CWxkCXIyNywgMCh1cCkKKwlsZAlyMzEsIDAocnApCisJbXVsbGQJcjExLCByMjcsIHYwCisJbXVsaGR1CXIxMiwgcjI3LCB2MAorCUFERFNVQglyMTEsIHIxMSwgcjMxCisJYglMKGwxKQorCitMKGIwKToJYWRkaQl1cCwgdXAsIC04CisJYWRkaQlycCwgcnAsIC04CisJQ0xSUlNDKAlyMTIpCQlDIGNsZWFyIHIxMiBhbmQgY2xyL3NldCBjeQorCisJQUxJR04oMzIpCitMKHRvcCk6CitTTShgCXN1YmZlCXIxMSwgcjAsIHIwJykJQyBjb21wbGVtZW50Li4uCitTTShgCWFkZGljCXIxMSwgcjExLCAxJykJQyAuLi5jYXJyeSBmbGFnCisJbGQJcjEwLCA4KHVwKQorCWxkCXI4LCAxNih1cCkKKwlsZAlyNywgMjQodXApCisJbGQJcjI3LCAzMih1cCkKKwlhZGRpCXVwLCB1cCwgMzIKKwlhZGRpCXJwLCBycCwgMzIKKwltdWxsZAlyMCwgIHIxMCwgdjAKKwltdWxoZHUJcjEwLCByMTAsIHYwCisJbXVsbGQJcjUsICByOCwgdjAKKwltdWxoZHUJcjgsICByOCwgdjAKKwltdWxsZAlyOSwgIHI3LCB2MAorCW11bGhkdQlyNywgIHI3LCB2MAorCW11bGxkCXIxMSwgcjI3LCB2MAorCW11bGhkdQlyMjcsIHIyNywgdjAKKwlsZAlyMjgsIC0yNChycCkKKwlhZGRlCXIwLCByMCwgcjEyCisJbGQJcjI5LCAtMTYocnApCisJYWRkZQlyNSwgcjUsIHIxMAorCWxkCXIzMCwgLTgocnApCisJbGQJcjMxLCAwKHJwKQorCWFkZGUJcjksIHI5LCByOAorCWFkZGUJcjExLCByMTEsIHI3CisJYWRkemUJcjEyLCByMjcKKwlBRERTVUIJcjAsIHIwLCByMjgKKwlzdGQJcjAsIC0yNChycCkKKwlBRERTVUJDCXI1LCByNSwgcjI5CitMKGwzKToJc3RkCXI1LCAtMTYocnApCisJQUREU1VCQwlyOSwgcjksIHIzMAorTChsMik6CXN0ZAlyOSwgLTgocnApCisJQUREU1VCQwlyMTEsIHIxMSwgcjMxCitMKGwxKToJc3RkCXIxMSwgMChycCkKKwliZG56CUwodG9wKQorCitBTShgCWFkZHplCXIzLCByMTInKQorU00oYAlzdWJmZQlyMTEsIHIwLCByMCcpCQlDIGNvbXBsZW1lbnQuLi4KKwlsZAlyMzEsIC04KHIxKQorU00oYAlzdWJmCXIzLCByMTEsIHIxMicpCisJbGQJcjMwLCAtMTYocjEpCisJbGQJcjI5LCAtMjQocjEpCisJbGQJcjI4LCAtMzIocjEpCisJbGQJcjI3LCAtNDAocjEpCisJYmxyCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvcDYvZ21wLW1wYXJhbS5oIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L3A2L2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2UyZjg5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L3A2L2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDE2MCBAQAorLyogUE9XRVI2IGdtcC1tcGFyYW0uaCAtLSBDb21waWxlci9tYWNoaW5lIHBhcmFtZXRlciBoZWFkZXIgZmlsZS4KKworQ29weXJpZ2h0IDE5OTEsIDE5OTMsIDE5OTQsIDE5OTktMjAwMywgMjAwOS0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgNjQKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgOAorCisvKiAzNTAwIE1IeiBQT1dFUjYgKGtvbGdhLmJpYnN5cy5ubykgKi8KKworI2RlZmluZSBNT0RfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PRF8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFOX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgIDMKKyNkZWZpbmUgTU9EXzFVX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgIDMKKyNkZWZpbmUgTU9EXzFfMV9UT19NT0RfMV8yX1RIUkVTSE9MRCAgICAgICAgMTIKKyNkZWZpbmUgTU9EXzFfMl9UT19NT0RfMV80X1RIUkVTSE9MRCAgICAgICAgIDAgIC8qIG5ldmVyIG1wbl9tb2RfMXNfMnAgKi8KKyNkZWZpbmUgUFJFSU5WX01PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgIDYKKyNkZWZpbmUgVVNFX1BSRUlOVl9ESVZSRU1fMSAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRElWX1FSXzJfUEkyX1RIUkVTSE9MRCAgICAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWRVhBQ1RfMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAobmF0aXZlKSAqLworI2RlZmluZSBCTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgICAgICAyMQorCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDUwCisjZGVmaW5lIE1VTF9UT09NNDRfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTA2CisjZGVmaW5lIE1VTF9UT09NNkhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjc0CisjZGVmaW5lIE1VTF9UT09NOEhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMzM5CisKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNDNfVEhSRVNIT0xEICAgICAgNjIKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNTNfVEhSRVNIT0xEICAgICAgNzYKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNTNfVEhSRVNIT0xEICAgICAgNzMKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNjNfVEhSRVNIT0xEICAgICAgNjYKKyNkZWZpbmUgTVVMX1RPT000M19UT19UT09NNTRfVEhSRVNIT0xEICAgICAgODgKKworI2RlZmluZSBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgICAgIDQ5CisjZGVmaW5lIFNRUl9UT09NNF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTMwCisjZGVmaW5lIFNRUl9UT09NNl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjI2CisjZGVmaW5lIFNRUl9UT09NOF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjcyCisKKyNkZWZpbmUgTVVMTUlEX1RPT000Ml9USFJFU0hPTEQgICAgICAgICAgICAgMzYKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxNAorI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxNAorCisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgMzgwICAvKiBrID0gNSAqLworI2RlZmluZSBNVUxfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgMzQwLCA1fSwgeyAgICAgMTksIDZ9LCB7ICAgICAxMCwgNX0sIHsgICAgIDIxLCA2fSwgXAorICAgIHsgICAgIDExLCA1fSwgeyAgICAgMjMsIDZ9LCB7ICAgICAyMSwgN30sIHsgICAgIDExLCA2fSwgXAorICAgIHsgICAgIDIzLCA3fSwgeyAgICAgMTIsIDZ9LCB7ICAgICAyNSwgN30sIHsgICAgIDIxLCA4fSwgXAorICAgIHsgICAgIDExLCA3fSwgeyAgICAgMjQsIDh9LCB7ICAgICAxMywgN30sIHsgICAgIDI3LCA4fSwgXAorICAgIHsgICAgIDIxLCA5fSwgeyAgICAgMTEsIDh9LCB7ICAgICAyNSwgOX0sIHsgICAgIDE1LCA4fSwgXAorICAgIHsgICAgIDMzLCA5fSwgeyAgICAgMjMsIDh9LCB7ICAgICA0NywgOX0sIHsgICAgIDI3LDEwfSwgXAorICAgIHsgICAgIDE1LCA5fSwgeyAgICAgMzksMTB9LCB7ICAgICAyMywgOX0sIHsgICAgIDQ3LDExfSwgXAorICAgIHsgICAgIDE1LDEwfSwgeyAgICAgMzEsIDl9LCB7ICAgICA2MywxMH0sIHsgICAgIDQ3LDExfSwgXAorICAgIHsgICAgIDMxLDEwfSwgeyAgICAgNzEsMTF9LCB7ICAgICA0NywxMn0sIHsgICAgIDMxLDExfSwgXAorICAgIHsgICAgIDYzLDEwfSwgeyAgICAxMjcsIDl9LCB7ICAgIDI1NSwgOH0sIHsgICAgNTExLDEwfSwgXAorICAgIHsgICAgMTM1LCA5fSwgeyAgICAyNzEsMTF9LCB7ICAgICA3OSwgOX0sIHsgICAgMzE5LCA4fSwgXAorICAgIHsgICAgNjM5LDEwfSwgeyAgICAxNzUsMTF9LCB7ICAgICA5NSwxMH0sIHsgICAgMTkxLCA5fSwgXAorICAgIHsgICAgMzgzLDEwfSwgeyAgICAyMDcsMTJ9LCB7ICAgICA2MywxMH0sIHsgICAgMjU1LCA5fSwgXAorICAgIHsgICAgNTExLDEwfSwgeyAgICAyNzEsIDl9LCB7ICAgIDU0MywxMX0sIHsgICAgMTQzLDEwfSwgXAorICAgIHsgICAgMjg3LCA5fSwgeyAgICA1NzUsMTB9LCB7ICAgIDMwMywgOX0sIHsgICAgNjA3LDEwfSwgXAorICAgIHsgICAgMzE5LCA5fSwgeyAgICA2MzksMTF9LCB7ICAgIDE3NSwxMn0sIHsgICAgIDk1LDExfSwgXAorICAgIHsgICAgMTkxLDEwfSwgeyAgICAzODMsMTF9LCB7ICAgIDIwNywxMH0sIHsgICAgNDE1LDEzfSwgXAorICAgIHsgICA4MTkyLDE0fSwgeyAgMTYzODQsMTV9LCB7ICAzMjc2OCwxNn0sIHsgIDY1NTM2LDE3fSwgXAorICAgIHsgMTMxMDcyLDE4fSwgeyAyNjIxNDQsMTl9LCB7IDUyNDI4OCwyMH0sIHsxMDQ4NTc2LDIxfSwgXAorICAgIHsyMDk3MTUyLDIyfSwgezQxOTQzMDQsMjN9LCB7ODM4ODYwOCwyNH0gfQorI2RlZmluZSBNVUxfRkZUX1RBQkxFM19TSVpFIDc5CisjZGVmaW5lIE1VTF9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAzNTIwCisKKyNkZWZpbmUgU1FSX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICAzMDggIC8qIGsgPSA1ICovCisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICAyODAsIDV9LCB7ICAgICAxNywgNn0sIHsgICAgICA5LCA1fSwgeyAgICAgMTksIDZ9LCBcCisgICAgeyAgICAgMjEsIDd9LCB7ICAgICAxMSwgNn0sIHsgICAgIDIzLCA3fSwgeyAgICAgMjEsIDh9LCBcCisgICAgeyAgICAgMTEsIDd9LCB7ICAgICAyNCwgOH0sIHsgICAgIDEzLCA3fSwgeyAgICAgMjcsIDh9LCBcCisgICAgeyAgICAgMjEsIDl9LCB7ICAgICAxMSwgOH0sIHsgICAgIDI1LCA5fSwgeyAgICAgMTUsIDh9LCBcCisgICAgeyAgICAgMzMsIDl9LCB7ICAgICAxOSwgOH0sIHsgICAgIDM5LCA5fSwgeyAgICAgMjMsIDh9LCBcCisgICAgeyAgICAgNDcsIDl9LCB7ICAgICAyNywxMH0sIHsgICAgIDE1LCA5fSwgeyAgICAgMzksMTB9LCBcCisgICAgeyAgICAgMjMsIDl9LCB7ICAgICA0NywxMX0sIHsgICAgIDE1LDEwfSwgeyAgICAgMzEsIDl9LCBcCisgICAgeyAgICAgNjMsMTB9LCB7ICAgICA0NywxMX0sIHsgICAgIDMxLDEwfSwgeyAgICAgNzEsIDl9LCBcCisgICAgeyAgICAxNDMsMTF9LCB7ICAgICA0NywxMn0sIHsgICAgIDMxLDExfSwgeyAgICAgNjMsIDl9LCBcCisgICAgeyAgICAyNTUsIDh9LCB7ICAgIDUxMSwgOX0sIHsgICAgMjcxLDEwfSwgeyAgICAxNDMsMTF9LCBcCisgICAgeyAgICAgNzksMTB9LCB7ICAgIDE1OSwgOX0sIHsgICAgMzE5LDEwfSwgeyAgICAxNzUsIDl9LCBcCisgICAgeyAgICAzNTEsMTF9LCB7ICAgICA5NSwxMH0sIHsgICAgMTkxLCA5fSwgeyAgICAzODMsMTB9LCBcCisgICAgeyAgICAyMDcsMTJ9LCB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgeyAgICAyNTUsIDl9LCBcCisgICAgeyAgICA1MTEsIDh9LCB7ICAgMTAyMywxMH0sIHsgICAgMjcxLCA5fSwgeyAgICA1NDMsMTF9LCBcCisgICAgeyAgICAxNDMsMTB9LCB7ICAgIDI4NywgOX0sIHsgICAgNTc1LDExfSwgeyAgICAxNTksMTB9LCBcCisgICAgeyAgICAzMTksIDl9LCB7ICAgIDYzOSwxMX0sIHsgICAgMTc1LDEwfSwgeyAgICAzNTEsMTJ9LCBcCisgICAgeyAgICAgOTUsMTF9LCB7ICAgIDE5MSwxMH0sIHsgICAgMzgzLDExfSwgeyAgICAyMDcsMTB9LCBcCisgICAgeyAgICA0MTUsMTN9LCB7ICAgODE5MiwxNH0sIHsgIDE2Mzg0LDE1fSwgeyAgMzI3NjgsMTZ9LCBcCisgICAgeyAgNjU1MzYsMTd9LCB7IDEzMTA3MiwxOH0sIHsgMjYyMTQ0LDE5fSwgeyA1MjQyODgsMjB9LCBcCisgICAgezEwNDg1NzYsMjF9LCB7MjA5NzE1MiwyMn0sIHs0MTk0MzA0LDIzfSwgezgzODg2MDgsMjR9IH0KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTNfU0laRSA4MAorI2RlZmluZSBTUVJfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMjc1MgorCisjZGVmaW5lIE1VTExPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICA1CisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDYyCisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgICAyOTk1CisKKyNkZWZpbmUgRENfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNTkKKyNkZWZpbmUgRENfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAyMDAKKyNkZWZpbmUgRENfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNzAKKyNkZWZpbmUgRENfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNjgKKworI2RlZmluZSBJTlZfTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICA1MworI2RlZmluZSBJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE3MAorI2RlZmluZSBJTlZfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDE2NgorCisjZGVmaW5lIEJJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgMjIwCisjZGVmaW5lIFJFRENfMV9UT19SRURDX05fVEhSRVNIT0xEICAgICAgICAgIDY3CisKKyNkZWZpbmUgTVVfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA5OTgKKyNkZWZpbmUgTVVfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICA5NDIKKyNkZWZpbmUgTVVQSV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgNTcKKyNkZWZpbmUgTVVfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICA4ODkKKyNkZWZpbmUgTVVfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDEwNzgKKworI2RlZmluZSBQT1dNX1NFQ19UQUJMRSAgNCwyNiwyMTYsODA0LDE3MzEKKworI2RlZmluZSBNQVRSSVgyMl9TVFJBU1NFTl9USFJFU0hPTEQgICAgICAgICAxMworI2RlZmluZSBIR0NEX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgIDEwNgorI2RlZmluZSBIR0NEX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDEwOQorI2RlZmluZSBIR0NEX1JFRFVDRV9USFJFU0hPTEQgICAgICAgICAgICAgMjIwNQorI2RlZmluZSBHQ0RfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDQ5MgorI2RlZmluZSBHQ0RFWFRfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDMyNworI2RlZmluZSBKQUNPQklfQkFTRV9NRVRIT0QgICAgICAgICAgICAgICAgICAgNAorCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgIDI4CisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgNTM3CisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAxNTc2CisKKyNkZWZpbmUgRkFDX0RTQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICA0MjYKKyNkZWZpbmUgRkFDX09ERF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L3A2L211bF9iYXNlY2FzZS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvcDYvbXVsX2Jhc2VjYXNlLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDMyYjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L3A2L211bF9iYXNlY2FzZS5hc20KQEAgLTAsMCArMSw1ODkgQEAKK2RubCAgUG93ZXJQQy02NCBtcG5fbXVsX2Jhc2VjYXNlLgorCitkbmwgIENvcHlyaWdodCAxOTk5LTIwMDEsIDIwMDMtMjAwNiwgMjAwOCwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCQkgICAgY3ljbGVzL2xpbWIKK0MgUE9XRVIzL1BQQzYzMAkJID8KK0MgUE9XRVI0L1BQQzk3MAkJID8KK0MgUE9XRVI1CQkgPworQyBQT1dFUjYJCTEyLjI1CisKK0MgVE9ETworQyAgKiBSZWR1Y2UgcmVnaXN0ZXIgdXNhZ2UuICBBdCBsZWFzdCA0IHJlZ2lzdGVyIGxlc3MgY2FuIGJlIHVzZWQuCitDICAqIFVucm9sbCBtb3JlLiAgOC13YXkgdW5yb2xsaW5nIHdvdWxkIGJyaW5nIHVzIHRvIDEwIGMvbCwgMTYtd2F5IHVucm9sbGluZworQyAgICB3b3VsZCBicmluZyB1cyB0byA5IGMvbC4KK0MgICogVGhlIGJkeiBpbnNucyBmb3IgYjEgYW5kIGIyIHdpbGwgbmV2ZXIgYnJhbmNoLAorQyAgKiBBbGlnbiB0aGluZ3MgYmV0dGVyLCBwZXJoYXBzIGJ5IG1vdmluZyB0aGluZ3MgbGlrZSBwb2ludGVyIHVwZGF0ZXMgZnJvbQorQyAgICBiZWZvcmUgdG8gYWZ0ZXIgbG9vcHMuCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsIGByMycpCitkZWZpbmUoYHVwJywgYHI0JykKK2RlZmluZShgdW4nLCBgcjUnKQorZGVmaW5lKGB2cCcsIGByNicpCitkZWZpbmUoYHZuJywgYHI3JykKKworZGVmaW5lKGB2MCcsCSAgIGByMjUnKQorZGVmaW5lKGBvdXRlcl9ycCcsIGByMjInKQorZGVmaW5lKGBvdXRlcl91cCcsIGByMjMnKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX211bF9iYXNlY2FzZSkKKworQyBTcGVjaWFsIGNvZGUgZm9yIHVuIDw9IDIsIGZvciBlZmZpY2llbmN5IG9mIHRoZXNlIGltcG9ydGFudCBjYXNlcywKK0MgYW5kIHNpbmNlIGl0IHNpbXBsaWZpZXMgdGhlIGRlZmF1bHQgY29kZS4KKwljbXBkaQljcjAsIHVuLCAyCisJYmd0CWNyMCwgTCh1bl9ndDIpCisJY21wZGkJY3I2LCB2biwgMQorCWxkCXI3LCAwKHZwKQorCWxkCXI1LCAwKHVwKQorCW11bGxkCXI4LCByNSwgcjcJQyB3ZWlnaHQgMAorCW11bGhkdQlyOSwgcjUsIHI3CUMgd2VpZ2h0IDEKKwlzdGQJcjgsIDAocnApCisJYmVxCWNyMCwgTCgyeCkKKwlzdGQJcjksIDgocnApCisJYmxyCisJQUxJR04oMTYpCitMKDJ4KToJbGQJcjAsIDgodXApCisJbXVsbGQJcjgsIHIwLCByNwlDIHdlaWdodCAxCisJbXVsaGR1CXIxMCwgcjAsIHI3CUMgd2VpZ2h0IDIKKwlhZGRjCXI5LCByOSwgcjgKKwlhZGR6ZQlyMTAsIHIxMAorCWJuZQljcjYsIEwoMngyKQorCXN0ZAlyOSwgOChycCkKKwlzdGQJcjEwLCAxNihycCkKKwlibHIKKwlBTElHTigxNikKK0woMngyKToJbGQJcjYsIDgodnApCisJbm9wCisJbXVsbGQJcjgsIHI1LCByNglDIHdlaWdodCAxCisJbXVsaGR1CXIxMSwgcjUsIHI2CUMgd2VpZ2h0IDIKKwltdWxsZAlyMTIsIHIwLCByNglDIHdlaWdodCAyCisJbXVsaGR1CXIwLCByMCwgcjYJQyB3ZWlnaHQgMworCWFkZGMJcjksIHI5LCByOAorCXN0ZAlyOSwgOChycCkKKwlhZGRlCXIxMSwgcjExLCByMTAKKwlhZGR6ZQlyMCwgcjAKKwlhZGRjCXIxMSwgcjExLCByMTIKKwlhZGR6ZQlyMCwgcjAKKwlzdGQJcjExLCAxNihycCkKKwlzdGQJcjAsIDI0KHJwKQorCWJscgorCitMKHVuX2d0Mik6CisJc3RkCXIzMSwgLTgocjEpCisJc3RkCXIzMCwgLTE2KHIxKQorCXN0ZAlyMjksIC0yNChyMSkKKwlzdGQJcjI4LCAtMzIocjEpCisJc3RkCXIyNywgLTQwKHIxKQorCXN0ZAlyMjYsIC00OChyMSkKKwlzdGQJcjI1LCAtNTYocjEpCisJc3RkCXIyNCwgLTY0KHIxKQorCXN0ZAlyMjMsIC03MihyMSkKKwlzdGQJcjIyLCAtODAocjEpCisJc3RkCXIyMSwgLTg4KHIxKQorCXN0ZAlyMjAsIC05NihyMSkKKworCW1yCW91dGVyX3JwLCBycAorCW1yCW91dGVyX3VwLCB1cAorCisJbGQJdjAsIDAodnApCUMgbmV3IHYgbGltYgorCWFkZGkJdnAsIHZwLCA4CisJbGQJcjI2LCAwKHVwKQorCisJcmxkaWNsLglyMCwgdW4sIDAsNjIJQyByMCA9IG4gJiAzLCBzZXQgY3IwCisJY21wZGkJY3I2LCByMCwgMgorCWFkZGkJdW4sIHVuLCA0CUMgY29tcHV0ZSBjb3VudC4uLgorCXNyZGkJdW4sIHVuLCAyCUMgLi4uZm9yIGN0cgorCW10Y3RyCXVuCQlDIGNvcHkgaW5uZXIgbG9vcCBjb3VudCBpbnRvIGN0cgorCWJlcQljcjAsIEwoYjApCisJYmx0CWNyNiwgTChiMSkKKwliZXEJY3I2LCBMKGIyKQorCisKKwlBTElHTigxNikKK0woYjMpOgorCWxkCXIyNywgOCh1cCkKKwlsZAlyMjAsIDE2KHVwKQorCW11bGxkCXIwLCByMjYsIHYwCisJbXVsaGR1CXIzMSwgcjI2LCB2MAorCW11bGxkCXIyNCwgcjI3LCB2MAorCW11bGhkdQlyOCwgcjI3LCB2MAorCW11bGxkCXI5LCByMjAsIHYwCisJbXVsaGR1CXIxMCwgcjIwLCB2MAorCWFkZGMJcjI0LCByMjQsIHIzMQorCWFkZGUJcjksIHI5LCByOAorCWFkZHplCXIxMiwgcjEwCisJc3RkCXIwLCAwKHJwKQorCXN0ZAlyMjQsIDgocnApCisJc3RkCXI5LCAxNihycCkKKwlhZGRpCXVwLCB1cCwgMTYKKwlhZGRpCXJwLCBycCwgMTYKKwliZHoJTChlbmRfbV8zKQorCisJQUxJR04oMzIpCitMKGxvX21fMyk6CisJbGQJcjI2LCA4KHVwKQorCWxkCXIyNywgMTYodXApCisJbGQJcjIwLCAyNCh1cCkKKwlsZAlyMjEsIDMyKHVwKQorCW11bGxkCXIwLCByMjYsIHYwCisJbXVsaGR1CXIzMSwgcjI2LCB2MAorCW11bGxkCXIyNCwgcjI3LCB2MAorCW11bGhkdQlyOCwgcjI3LCB2MAorCW11bGxkCXI5LCByMjAsIHYwCisJbXVsaGR1CXIyNywgcjIwLCB2MAorCW11bGxkCXIxMSwgcjIxLCB2MAorCW11bGhkdQlyMjYsIHIyMSwgdjAKKwlhZGRlCXIwLCByMCwgcjEyCisJYWRkZQlyMjQsIHIyNCwgcjMxCisJc3RkCXIwLCA4KHJwKQorCWFkZGUJcjksIHI5LCByOAorCXN0ZAlyMjQsIDE2KHJwKQorCWFkZGUJcjExLCByMTEsIHIyNworCXN0ZAlyOSwgMjQocnApCisJYWRkaQl1cCwgdXAsIDMyCisJc3RkCXIxMSwgMzIocnApCisJYWRkaQlycCwgcnAsIDMyCisJbXIJcjEyLCByMjYKKwliZG56CUwobG9fbV8zKQorCisJQUxJR04oMTYpCitMKGVuZF9tXzMpOgorCWFkZHplCXIxMiwgcjEyCisJYWRkaWMuCXZuLCB2biwgLTEKKwlzdGQJcjEyLCA4KHJwKQorCWJlcQlMKHJldCkKKworCUFMSUdOKDE2KQorTChvdXRlcl9sb18zKToKKwltdGN0cgl1bgkJQyBjb3B5IGlubmVyIGxvb3AgY291bnQgaW50byBjdHIKKwlhZGRpCXJwLCBvdXRlcl9ycCwgMjQKKwlhZGRpCXVwLCBvdXRlcl91cCwgMTYKKwlhZGRpCW91dGVyX3JwLCBvdXRlcl9ycCwgOAorCWxkCXYwLCAwKHZwKQlDIG5ldyB2IGxpbWIKKwlhZGRpCXZwLCB2cCwgOAorCWxkCXIyNiwgLTE2KHVwKQorCWxkCXIyNywgLTgodXApCisJbGQJcjIwLCAwKHVwKQorCW11bGxkCXIwLCByMjYsIHYwCisJbXVsaGR1CXIzMSwgcjI2LCB2MAorCW11bGxkCXIyNCwgcjI3LCB2MAorCW11bGhkdQlyOCwgcjI3LCB2MAorCW11bGxkCXI5LCByMjAsIHYwCisJbXVsaGR1CXIxMCwgcjIwLCB2MAorCWxkCXIyOCwgLTE2KHJwKQorCWxkCXIyOSwgLTgocnApCisJbGQJcjMwLCAwKHJwKQorCWFkZGMJcjI0LCByMjQsIHIzMQorCWFkZGUJcjksIHI5LCByOAorCWFkZHplCXIxMiwgcjEwCisJYWRkYwlyMCwgcjAsIHIyOAorCXN0ZAlyMCwgLTE2KHJwKQorCWFkZGUJcjI0LCByMjQsIHIyOQorCXN0ZAlyMjQsIC04KHJwKQorCWFkZGUJcjksIHI5LCByMzAKKwlzdGQJcjksIDAocnApCisJYmR6CUwoZW5kXzMpCisKKwlBTElHTigzMikJCUMgcmVnaXN0ZXJzIGR5aW5nCitMKGxvXzMpOgorCWxkCXIyNiwgOCh1cCkKKwlsZAlyMjcsIDE2KHVwKQorCWxkCXIyMCwgMjQodXApCUMKKwlsZAlyMjEsIDMyKHVwKQlDCisJYWRkaQl1cCwgdXAsIDMyCUMKKwlhZGRpCXJwLCBycCwgMzIJQworCW11bGxkCXIwLCByMjYsIHYwCUMKKwltdWxoZHUJcjEwLCByMjYsIHYwCUMgMjYKKwltdWxsZAlyMjQsIHIyNywgdjAJQworCW11bGhkdQlyOCwgcjI3LCB2MAlDIDI3CisJbXVsbGQJcjksIHIyMCwgdjAJQworCW11bGhkdQlyMjcsIHIyMCwgdjAJQyAyNgorCW11bGxkCXIxMSwgcjIxLCB2MAlDCisJbXVsaGR1CXIyNiwgcjIxLCB2MAlDIDI3CisJbGQJcjI4LCAtMjQocnApCUMKKwlhZGRlCXIwLCByMCwgcjEyCUMgMCAxMgorCWxkCXIyOSwgLTE2KHJwKQlDCisJYWRkZQlyMjQsIHIyNCwgcjEwCUMgMjQgMTAKKwlsZAlyMzAsIC04KHJwKQlDCisJbGQJcjMxLCAwKHJwKQlDCisJYWRkZQlyOSwgcjksIHI4CUMgOCA5CisJYWRkZQlyMTEsIHIxMSwgcjI3CUMgMjcgMTEKKwlhZGR6ZQlyMTIsIHIyNglDIDI2CisJYWRkYwlyMCwgcjAsIHIyOAlDIDAgMjgKKwlzdGQJcjAsIC0yNChycCkJQyAwCisJYWRkZQlyMjQsIHIyNCwgcjI5CUMgNyAyOQorCXN0ZAlyMjQsIC0xNihycCkJQyA3CisJYWRkZQlyOSwgcjksIHIzMAlDIDkgMzAKKwlzdGQJcjksIC04KHJwKQlDIDkKKwlhZGRlCXIxMSwgcjExLCByMzEJQyAxMSAzMQorCXN0ZAlyMTEsIDAocnApCUMgMTEKKwliZG56CUwobG9fMykJCUMKKworCUFMSUdOKDE2KQorTChlbmRfMyk6CisJYWRkemUJcjEyLCByMTIKKwlhZGRpYy4Jdm4sIHZuLCAtMQorCXN0ZAlyMTIsIDgocnApCisJYm5lCUwob3V0ZXJfbG9fMykKKwliCUwocmV0KQorCisKKwlBTElHTigxNikKK0woYjEpOgorCW11bGxkCXIwLCByMjYsIHYwCisJbXVsaGR1CXIxMiwgcjI2LCB2MAorCWFkZGljCXIwLCByMCwgMAorCXN0ZAlyMCwgMChycCkKKwliZHoJTChlbmRfbV8xKQorCisJQUxJR04oMTYpCitMKGxvX21fMSk6CisJbGQJcjI2LCA4KHVwKQorCWxkCXIyNywgMTYodXApCisJbGQJcjIwLCAyNCh1cCkKKwlsZAlyMjEsIDMyKHVwKQorCW11bGxkCXIwLCByMjYsIHYwCisJbXVsaGR1CXIzMSwgcjI2LCB2MAorCW11bGxkCXIyNCwgcjI3LCB2MAorCW11bGhkdQlyOCwgcjI3LCB2MAorCW11bGxkCXI5LCByMjAsIHYwCisJbXVsaGR1CXIyNywgcjIwLCB2MAorCW11bGxkCXIxMSwgcjIxLCB2MAorCW11bGhkdQlyMjYsIHIyMSwgdjAKKwlhZGRlCXIwLCByMCwgcjEyCisJYWRkZQlyMjQsIHIyNCwgcjMxCisJc3RkCXIwLCA4KHJwKQorCWFkZGUJcjksIHI5LCByOAorCXN0ZAlyMjQsIDE2KHJwKQorCWFkZGUJcjExLCByMTEsIHIyNworCXN0ZAlyOSwgMjQocnApCisJYWRkaQl1cCwgdXAsIDMyCisJc3RkCXIxMSwgMzIocnApCisJYWRkaQlycCwgcnAsIDMyCisJbXIJcjEyLCByMjYKKwliZG56CUwobG9fbV8xKQorCisJQUxJR04oMTYpCitMKGVuZF9tXzEpOgorCWFkZHplCXIxMiwgcjEyCisJYWRkaWMuCXZuLCB2biwgLTEKKwlzdGQJcjEyLCA4KHJwKQorCWJlcQlMKHJldCkKKworCUFMSUdOKDE2KQorTChvdXRlcl9sb18xKToKKwltdGN0cgl1bgkJQyBjb3B5IGlubmVyIGxvb3AgY291bnQgaW50byBjdHIKKwlhZGRpCXJwLCBvdXRlcl9ycCwgOAorCW1yCXVwLCBvdXRlcl91cAorCWFkZGkJb3V0ZXJfcnAsIG91dGVyX3JwLCA4CisJbGQJdjAsIDAodnApCUMgbmV3IHYgbGltYgorCWFkZGkJdnAsIHZwLCA4CisJbGQJcjI2LCAwKHVwKQorCWxkCXIyOCwgMChycCkKKwltdWxsZAlyMCwgcjI2LCB2MAorCW11bGhkdQlyMTIsIHIyNiwgdjAKKwlhZGRjCXIwLCByMCwgcjI4CisJc3RkCXIwLCAwKHJwKQorCWJkeglMKGVuZF8xKQorCisJQUxJR04oMzIpCQlDIHJlZ2lzdGVycyBkeWluZworTChsb18xKToKKwlsZAlyMjYsIDgodXApCisJbGQJcjI3LCAxNih1cCkKKwlsZAlyMjAsIDI0KHVwKQlDCisJbGQJcjIxLCAzMih1cCkJQworCWFkZGkJdXAsIHVwLCAzMglDCisJYWRkaQlycCwgcnAsIDMyCUMKKwltdWxsZAlyMCwgcjI2LCB2MAlDCisJbXVsaGR1CXIxMCwgcjI2LCB2MAlDIDI2CisJbXVsbGQJcjI0LCByMjcsIHYwCUMKKwltdWxoZHUJcjgsIHIyNywgdjAJQyAyNworCW11bGxkCXI5LCByMjAsIHYwCUMKKwltdWxoZHUJcjI3LCByMjAsIHYwCUMgMjYKKwltdWxsZAlyMTEsIHIyMSwgdjAJQworCW11bGhkdQlyMjYsIHIyMSwgdjAJQyAyNworCWxkCXIyOCwgLTI0KHJwKQlDCisJYWRkZQlyMCwgcjAsIHIxMglDIDAgMTIKKwlsZAlyMjksIC0xNihycCkJQworCWFkZGUJcjI0LCByMjQsIHIxMAlDIDI0IDEwCisJbGQJcjMwLCAtOChycCkJQworCWxkCXIzMSwgMChycCkJQworCWFkZGUJcjksIHI5LCByOAlDIDggOQorCWFkZGUJcjExLCByMTEsIHIyNwlDIDI3IDExCisJYWRkemUJcjEyLCByMjYJQyAyNgorCWFkZGMJcjAsIHIwLCByMjgJQyAwIDI4CisJc3RkCXIwLCAtMjQocnApCUMgMAorCWFkZGUJcjI0LCByMjQsIHIyOQlDIDcgMjkKKwlzdGQJcjI0LCAtMTYocnApCUMgNworCWFkZGUJcjksIHI5LCByMzAJQyA5IDMwCisJc3RkCXI5LCAtOChycCkJQyA5CisJYWRkZQlyMTEsIHIxMSwgcjMxCUMgMTEgMzEKKwlzdGQJcjExLCAwKHJwKQlDIDExCisJYmRueglMKGxvXzEpCQlDCisKKwlBTElHTigxNikKK0woZW5kXzEpOgorCWFkZHplCXIxMiwgcjEyCisJYWRkaWMuCXZuLCB2biwgLTEKKwlzdGQJcjEyLCA4KHJwKQorCWJuZQlMKG91dGVyX2xvXzEpCisJYglMKHJldCkKKworCisJQUxJR04oMTYpCitMKGIwKToKKwlhZGRpCXVwLCB1cCwgLTgKKwlhZGRpCXJwLCBycCwgLTgKKwlsaQlyMTIsIDAKKwlhZGRpYwlyMTIsIHIxMiwgMAorCWJkeglMKGVuZF9tXzApCisKKwlBTElHTigxNikKK0wobG9fbV8wKToKKwlsZAlyMjYsIDgodXApCisJbGQJcjI3LCAxNih1cCkKKwlsZAlyMjAsIDI0KHVwKQorCWxkCXIyMSwgMzIodXApCisJbXVsbGQJcjAsIHIyNiwgdjAKKwltdWxoZHUJcjMxLCByMjYsIHYwCisJbXVsbGQJcjI0LCByMjcsIHYwCisJbXVsaGR1CXI4LCByMjcsIHYwCisJbXVsbGQJcjksIHIyMCwgdjAKKwltdWxoZHUJcjI3LCByMjAsIHYwCisJbXVsbGQJcjExLCByMjEsIHYwCisJbXVsaGR1CXIyNiwgcjIxLCB2MAorCWFkZGUJcjAsIHIwLCByMTIKKwlhZGRlCXIyNCwgcjI0LCByMzEKKwlzdGQJcjAsIDgocnApCisJYWRkZQlyOSwgcjksIHI4CisJc3RkCXIyNCwgMTYocnApCisJYWRkZQlyMTEsIHIxMSwgcjI3CisJc3RkCXI5LCAyNChycCkKKwlhZGRpCXVwLCB1cCwgMzIKKwlzdGQJcjExLCAzMihycCkKKwlhZGRpCXJwLCBycCwgMzIKKwltcglyMTIsIHIyNgorCWJkbnoJTChsb19tXzApCisKKwlBTElHTigxNikKK0woZW5kX21fMCk6CisJYWRkemUJcjEyLCByMTIKKwlhZGRpYy4Jdm4sIHZuLCAtMQorCXN0ZAlyMTIsIDgocnApCisJYmVxCUwocmV0KQorCisJQUxJR04oMTYpCitMKG91dGVyX2xvXzApOgorCW10Y3RyCXVuCQlDIGNvcHkgaW5uZXIgbG9vcCBjb3VudCBpbnRvIGN0cgorCWFkZGkJcnAsIG91dGVyX3JwLCAwCisJYWRkaQl1cCwgb3V0ZXJfdXAsIC04CisJYWRkaQlvdXRlcl9ycCwgb3V0ZXJfcnAsIDgKKwlsZAl2MCwgMCh2cCkJQyBuZXcgdiBsaW1iCisJYWRkaQl2cCwgdnAsIDgKKwlsaQlyMTIsIDAKKwlhZGRpYwlyMTIsIHIxMiwgMAorCWJkeglMKGVuZF8wKQorCisJQUxJR04oMzIpCQlDIHJlZ2lzdGVycyBkeWluZworTChsb18wKToKKwlsZAlyMjYsIDgodXApCisJbGQJcjI3LCAxNih1cCkKKwlsZAlyMjAsIDI0KHVwKQlDCisJbGQJcjIxLCAzMih1cCkJQworCWFkZGkJdXAsIHVwLCAzMglDCisJYWRkaQlycCwgcnAsIDMyCUMKKwltdWxsZAlyMCwgcjI2LCB2MAlDCisJbXVsaGR1CXIxMCwgcjI2LCB2MAlDIDI2CisJbXVsbGQJcjI0LCByMjcsIHYwCUMKKwltdWxoZHUJcjgsIHIyNywgdjAJQyAyNworCW11bGxkCXI5LCByMjAsIHYwCUMKKwltdWxoZHUJcjI3LCByMjAsIHYwCUMgMjYKKwltdWxsZAlyMTEsIHIyMSwgdjAJQworCW11bGhkdQlyMjYsIHIyMSwgdjAJQyAyNworCWxkCXIyOCwgLTI0KHJwKQlDCisJYWRkZQlyMCwgcjAsIHIxMglDIDAgMTIKKwlsZAlyMjksIC0xNihycCkJQworCWFkZGUJcjI0LCByMjQsIHIxMAlDIDI0IDEwCisJbGQJcjMwLCAtOChycCkJQworCWxkCXIzMSwgMChycCkJQworCWFkZGUJcjksIHI5LCByOAlDIDggOQorCWFkZGUJcjExLCByMTEsIHIyNwlDIDI3IDExCisJYWRkemUJcjEyLCByMjYJQyAyNgorCWFkZGMJcjAsIHIwLCByMjgJQyAwIDI4CisJc3RkCXIwLCAtMjQocnApCUMgMAorCWFkZGUJcjI0LCByMjQsIHIyOQlDIDcgMjkKKwlzdGQJcjI0LCAtMTYocnApCUMgNworCWFkZGUJcjksIHI5LCByMzAJQyA5IDMwCisJc3RkCXI5LCAtOChycCkJQyA5CisJYWRkZQlyMTEsIHIxMSwgcjMxCUMgMTEgMzEKKwlzdGQJcjExLCAwKHJwKQlDIDExCisJYmRueglMKGxvXzApCQlDCisKKwlBTElHTigxNikKK0woZW5kXzApOgorCWFkZHplCXIxMiwgcjEyCisJYWRkaWMuCXZuLCB2biwgLTEKKwlzdGQJcjEyLCA4KHJwKQorCWJuZQlMKG91dGVyX2xvXzApCisJYglMKHJldCkKKworCisJQUxJR04oMTYpCitMKGIyKToJbGQJcjI3LCA4KHVwKQorCWFkZGkJdXAsIHVwLCA4CisJbXVsbGQJcjAsIHIyNiwgdjAKKwltdWxoZHUJcjEwLCByMjYsIHYwCisJbXVsbGQJcjI0LCByMjcsIHYwCisJbXVsaGR1CXI4LCByMjcsIHYwCisJYWRkYwlyMjQsIHIyNCwgcjEwCisJYWRkemUJcjEyLCByOAorCXN0ZAlyMCwgMChycCkKKwlzdGQJcjI0LCA4KHJwKQorCWFkZGkJcnAsIHJwLCA4CisJYmR6CUwoZW5kX21fMikKKworCUFMSUdOKDE2KQorTChsb19tXzIpOgorCWxkCXIyNiwgOCh1cCkKKwlsZAlyMjcsIDE2KHVwKQorCWxkCXIyMCwgMjQodXApCisJbGQJcjIxLCAzMih1cCkKKwltdWxsZAlyMCwgcjI2LCB2MAorCW11bGhkdQlyMzEsIHIyNiwgdjAKKwltdWxsZAlyMjQsIHIyNywgdjAKKwltdWxoZHUJcjgsIHIyNywgdjAKKwltdWxsZAlyOSwgcjIwLCB2MAorCW11bGhkdQlyMjcsIHIyMCwgdjAKKwltdWxsZAlyMTEsIHIyMSwgdjAKKwltdWxoZHUJcjI2LCByMjEsIHYwCisJYWRkZQlyMCwgcjAsIHIxMgorCWFkZGUJcjI0LCByMjQsIHIzMQorCXN0ZAlyMCwgOChycCkKKwlhZGRlCXI5LCByOSwgcjgKKwlzdGQJcjI0LCAxNihycCkKKwlhZGRlCXIxMSwgcjExLCByMjcKKwlzdGQJcjksIDI0KHJwKQorCWFkZGkJdXAsIHVwLCAzMgorCXN0ZAlyMTEsIDMyKHJwKQorCWFkZGkJcnAsIHJwLCAzMgorCW1yCXIxMiwgcjI2CisJYmRueglMKGxvX21fMikKKworCUFMSUdOKDE2KQorTChlbmRfbV8yKToKKwlhZGR6ZQlyMTIsIHIxMgorCWFkZGljLgl2biwgdm4sIC0xCisJc3RkCXIxMiwgOChycCkKKwliZXEJTChyZXQpCisKKwlBTElHTigxNikKK0wob3V0ZXJfbG9fMik6CisJbXRjdHIJdW4JCUMgY29weSBpbm5lciBsb29wIGNvdW50IGludG8gY3RyCisJYWRkaQlycCwgb3V0ZXJfcnAsIDE2CisJYWRkaQl1cCwgb3V0ZXJfdXAsIDgKKwlhZGRpCW91dGVyX3JwLCBvdXRlcl9ycCwgOAorCWxkCXYwLCAwKHZwKQlDIG5ldyB2IGxpbWIKKwlhZGRpCXZwLCB2cCwgOAorCWxkCXIyNiwgLTgodXApCisJbGQJcjI3LCAwKHVwKQorCWxkCXIyOCwgLTgocnApCisJbGQJcjI5LCAwKHJwKQorCW11bGxkCXIwLCByMjYsIHYwCisJbXVsaGR1CXIxMCwgcjI2LCB2MAorCW11bGxkCXIyNCwgcjI3LCB2MAorCW11bGhkdQlyOCwgcjI3LCB2MAorCWFkZGMJcjI0LCByMjQsIHIxMAorCWFkZHplCXIxMiwgcjgKKwlhZGRjCXIwLCByMCwgcjI4CisJc3RkCXIwLCAtOChycCkKKwlhZGRlCXIyNCwgcjI0LCByMjkKKwlzdGQJcjI0LCAwKHJwKQorCWJkeglMKGVuZF8yKQorCisJQUxJR04oMTYpCQlDIHJlZ2lzdGVycyBkeWluZworTChsb18yKToKKwlsZAlyMjYsIDgodXApCisJbGQJcjI3LCAxNih1cCkKKwlsZAlyMjAsIDI0KHVwKQlDCisJbGQJcjIxLCAzMih1cCkJQworCWFkZGkJdXAsIHVwLCAzMglDCisJYWRkaQlycCwgcnAsIDMyCUMKKwltdWxsZAlyMCwgcjI2LCB2MAlDCisJbXVsaGR1CXIxMCwgcjI2LCB2MAlDIDI2CisJbXVsbGQJcjI0LCByMjcsIHYwCUMKKwltdWxoZHUJcjgsIHIyNywgdjAJQyAyNworCW11bGxkCXI5LCByMjAsIHYwCUMKKwltdWxoZHUJcjI3LCByMjAsIHYwCUMgMjYKKwltdWxsZAlyMTEsIHIyMSwgdjAJQworCW11bGhkdQlyMjYsIHIyMSwgdjAJQyAyNworCWxkCXIyOCwgLTI0KHJwKQlDCisJYWRkZQlyMCwgcjAsIHIxMglDIDAgMTIKKwlsZAlyMjksIC0xNihycCkJQworCWFkZGUJcjI0LCByMjQsIHIxMAlDIDI0IDEwCisJbGQJcjMwLCAtOChycCkJQworCWxkCXIzMSwgMChycCkJQworCWFkZGUJcjksIHI5LCByOAlDIDggOQorCWFkZGUJcjExLCByMTEsIHIyNwlDIDI3IDExCisJYWRkemUJcjEyLCByMjYJQyAyNgorCWFkZGMJcjAsIHIwLCByMjgJQyAwIDI4CisJc3RkCXIwLCAtMjQocnApCUMgMAorCWFkZGUJcjI0LCByMjQsIHIyOQlDIDcgMjkKKwlzdGQJcjI0LCAtMTYocnApCUMgNworCWFkZGUJcjksIHI5LCByMzAJQyA5IDMwCisJc3RkCXI5LCAtOChycCkJQyA5CisJYWRkZQlyMTEsIHIxMSwgcjMxCUMgMTEgMzEKKwlzdGQJcjExLCAwKHJwKQlDIDExCisJYmRueglMKGxvXzIpCQlDCisKKwlBTElHTigxNikKK0woZW5kXzIpOgorCWFkZHplCXIxMiwgcjEyCisJYWRkaWMuCXZuLCB2biwgLTEKKwlzdGQJcjEyLCA4KHJwKQorCWJuZQlMKG91dGVyX2xvXzIpCitDCWIJTChyZXQpCisKK0wocmV0KToJbGQJcjMxLCAtOChyMSkKKwlsZAlyMzAsIC0xNihyMSkKKwlsZAlyMjksIC0yNChyMSkKKwlsZAlyMjgsIC0zMihyMSkKKwlsZAlyMjcsIC00MChyMSkKKwlsZAlyMjYsIC00OChyMSkKKwlsZAlyMjUsIC01NihyMSkKKwlsZAlyMjQsIC02NChyMSkKKwlsZAlyMjMsIC03MihyMSkKKwlsZAlyMjIsIC04MChyMSkKKwlsZAlyMjEsIC04OChyMSkKKwlsZAlyMjAsIC05NihyMSkKKwlibHIKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9wNy9hb3JtdWxfMi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvcDcvYW9ybXVsXzIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MzFlMDEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvcDcvYW9ybXVsXzIuYXNtCkBAIC0wLDAgKzEsMTM1IEBACitkbmwgIFBvd2VyUEMtNjQgbXBuX211bF8yIGFuZCBtcG5fYWRkbXVsXzIuCisKK2RubCAgQ29weXJpZ2h0IDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgICAgICAgICAgICAgY3ljbGVzL2xpbWIgICAgY3ljbGVzL2xpbWIKK0MJCQltdWxfMiAgICAgICAgIGFkZG11bF8yCitDIFBPV0VSMy9QUEM2MzAJCSA/CQkgPworQyBQT1dFUjQvUFBDOTcwCQkgPwkJID8KK0MgUE9XRVI1CQkgPwkJID8KK0MgUE9XRVI2CQkgPwkJID8KK0MgUE9XRVI3LVNNVDQJCSAzCQkgMworQyBQT1dFUjctU01UMgkJID8JCSA/CitDIFBPV0VSNy1TTVQxCQkgPwkJID8KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywgYHIzJykKK2RlZmluZShgdXAnLCBgcjQnKQorZGVmaW5lKGBuJywgIGByNScpCitkZWZpbmUoYHZwJywgYHI2JykKKworZGVmaW5lKGBjeTAnLCBgcjEwJykKK2lmZGVmKGBFWFRSQV9SRUdJU1RFUicsCitgIGRlZmluZShgY3kxJywgRVhUUkFfUkVHSVNURVIpJywKK2AgZGVmaW5lKGBjeTEnLCBgcjMxJyknKQorCitpZmRlZihgT1BFUkFUSU9OX211bF8yJyxgCisgIGRlZmluZShgQU0nLAkJYCcpCisgIGRlZmluZShgQUREWCcsCWBhZGRjJykKKyAgZGVmaW5lKGBmdW5jJywJYG1wbl9tdWxfMicpCisnKQoraWZkZWYoYE9QRVJBVElPTl9hZGRtdWxfMicsYAorICBkZWZpbmUoYEFNJywJCWAkMScpCisgIGRlZmluZShgQUREWCcsCWBhZGRlJykKKyAgZGVmaW5lKGBmdW5jJywJYG1wbl9hZGRtdWxfMicpCisnKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9tdWxfMiBtcG5fYWRkbXVsXzIpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShmdW5jKQorCitpZmRlZihgRVhUUkFfUkVHSVNURVInLCxgCisJc3RkCXIzMSwgLTgocjEpCisnKQorCWFuZGkuCXIxMiwgbiwgMQorCWFkZGkJcjAsIG4sIDEKKwlzcmRpCXIwLCByMCwgMQorCW10Y3RyCXIwCisJbGQJcjExLCAwKHZwKQkJQyB2MAorCWxpCWN5MCwgMAorCWxkCXIxMiwgOCh2cCkJCUMgdjEKKwlsaQljeTEsIDAKKwlsZAlyNSwgMCh1cCkKKwliZXEJTChsbzApCisJYWRkaQl1cCwgdXAsIC04CisJYWRkaQlycCwgcnAsIC04CisJYglMKGxvMSkKKworCUFMSUdOKDMyKQorTCh0b3ApOgorQU0oYAlsZAlyMCwgLTgocnApJykKKwlsZAlyNSwgMCh1cCkKK0FNKGAJYWRkYwlyNiwgcjYsIHIwJykKKwlBRERYCXI3LCByNywgcjgKKwlhZGR6ZQlyOSwgcjkKKwlhZGRjCXI2LCByNiwgY3kwCisJYWRkZQljeTAsIHI3LCBjeTEKKwlzdGQJcjYsIC04KHJwKQorCWFkZHplCWN5MSwgcjkKK0wobG8wKToJbXVsbGQJcjYsIHIxMSwgcjUJCUMgdjAgKiB1W2ldICB3ZWlnaHQgMAorCW11bGhkdQlyNywgcjExLCByNQkJQyB2MCAqIHVbaV0gIHdlaWdodCAxCisJbXVsbGQJcjgsIHIxMiwgcjUJCUMgdjEgKiB1W2ldICB3ZWlnaHQgMQorCW11bGhkdQlyOSwgcjEyLCByNQkJQyB2MSAqIHVbaV0gIHdlaWdodCAyCitBTShgCWxkCXIwLCAwKHJwKScpCisJbGQJcjUsIDgodXApCitBTShgCWFkZGMJcjYsIHI2LCByMCcpCisJQUREWAlyNywgcjcsIHI4CisJYWRkemUJcjksIHI5CisJYWRkYwlyNiwgcjYsIGN5MAorCWFkZGUJY3kwLCByNywgY3kxCisJc3RkCXI2LCAwKHJwKQorCWFkZHplCWN5MSwgcjkKK0wobG8xKToJbXVsbGQJcjYsIHIxMSwgcjUJCUMgdjAgKiB1W2ldICB3ZWlnaHQgMAorCW11bGhkdQlyNywgcjExLCByNQkJQyB2MCAqIHVbaV0gIHdlaWdodCAxCisJYWRkaQl1cCwgdXAsIDE2CisJYWRkaQlycCwgcnAsIDE2CisJbXVsbGQJcjgsIHIxMiwgcjUJCUMgdjEgKiB1W2ldICB3ZWlnaHQgMQorCW11bGhkdQlyOSwgcjEyLCByNQkJQyB2MSAqIHVbaV0gIHdlaWdodCAyCisJYmRueglMKHRvcCkKKworTChlbmQpOgorQU0oYAlsZAlyMCwgLTgocnApJykKK0FNKGAJYWRkYwlyNiwgcjYsIHIwJykKKwlBRERYCXI3LCByNywgcjgKKwlhZGR6ZQlyOSwgcjkKKwlhZGRjCXI2LCByNiwgY3kwCisJc3RkCXI2LCAtOChycCkKKwlhZGRlCWN5MCwgcjcsIGN5MQorCWFkZHplCWN5MSwgcjkKKwlzdGQJY3kwLCAwKHJwKQorCW1yCXIzLCBjeTEKKworaWZkZWYoYEVYVFJBX1JFR0lTVEVSJywsYAorCWxkCXIzMSwgLTgocjEpCisnKQorCWJscgorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L3A3L2FvcnNfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvcDcvYW9yc19uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTdjNzAxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L3A3L2FvcnNfbi5hc20KQEAgLTAsMCArMSwxMjggQEAKK2RubCAgUG93ZXJQQy02NCBtcG5fYWRkX24sIG1wbl9zdWJfbiBvcHRpbWlzZWQgZm9yIFBPV0VSNy4KKworZG5sICBDb3B5cmlnaHQgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCQkgICBjeWNsZXMvbGltYgorQyBQT1dFUjMvUFBDNjMwCQkgPworQyBQT1dFUjQvUFBDOTcwCQkgPworQyBQT1dFUjUJCSA/CitDIFBPV0VSNgkJID8KK0MgUE9XRVI3CQkgMi4xOAorCitDIFRoaXMgaXMgYSB0YWQgYml0IHNsb3dlciB0aGFuIHRoZSBjbmRfYW9yc19uLmFzbSBjb2RlLCB3aGljaCBpcyBvZiBjb3Vyc2UgYW4KK0MgYW5vbWFseS4KKworaWZkZWYoYE9QRVJBVElPTl9hZGRfbicsYAorICBkZWZpbmUoQUREU1VCQywJYWRkZSkKKyAgZGVmaW5lKEFERFNVQiwJYWRkYykKKyAgZGVmaW5lKGZ1bmMsCQltcG5fYWRkX24pCisgIGRlZmluZShmdW5jX25jLAltcG5fYWRkX25jKQorICBkZWZpbmUoR0VOUlZBTCwJYGFkZGkJcjMsIHIzLCAxJykKKyAgZGVmaW5lKFNFVENCUiwJYGFkZGljCXIwLCAkMSwgLTEnKQorICBkZWZpbmUoQ0xSQ0IsCQlgYWRkaWMJcjAsIHIwLCAwJykKKycpCitpZmRlZihgT1BFUkFUSU9OX3N1Yl9uJyxgCisgIGRlZmluZShBRERTVUJDLAlzdWJmZSkKKyAgZGVmaW5lKEFERFNVQiwJc3ViZmMpCisgIGRlZmluZShmdW5jLAkJbXBuX3N1Yl9uKQorICBkZWZpbmUoZnVuY19uYywJbXBuX3N1Yl9uYykKKyAgZGVmaW5lKEdFTlJWQUwsCWBuZWcJcjMsIHIzJykKKyAgZGVmaW5lKFNFVENCUiwJYHN1YmZpYwlyMCwgJDEsIDAnKQorICBkZWZpbmUoQ0xSQ0IsCQlgYWRkaWMJcjAsIHIxLCAtMScpCisnKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRfbiBtcG5fYWRkX25jIG1wbl9zdWJfbiBtcG5fc3ViX25jKQorCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLAlgcjMnKQorZGVmaW5lKGB1cCcsCWByNCcpCitkZWZpbmUoYHZwJywJYHI1JykKK2RlZmluZShgbicsCWByNicpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShmdW5jX25jKQorCVNFVENCUihyNykKKwliCUwoZW50KQorRVBJTE9HVUUoKQorCitQUk9MT0dVRShmdW5jKQorCUNMUkNCCitMKGVudCk6CisJYW5kaS4JcjcsIG4sIDEKKwliZXEJTChieDApCisKK0woYngxKToJbGQJcjcsIDAodXApCisJbGQJcjksIDAodnApCisJQUREU1VCQwlyMTEsIHI5LCByNworCXN0ZAlyMTEsIDAocnApCisJY21wbGRpCWNyNiwgbiwgMQorCWJlcQljcjYsIEwoZW5kKQorCWFkZGkJdXAsIHVwLCA4CisJYWRkaQl2cCwgdnAsIDgKKwlhZGRpCXJwLCBycCwgOAorCitMKGJ4MCk6CWFkZGkJcjAsIG4sIDIJQyBjb21wdXRlIGJyYW5jaC4uLgorCXNyZGkJcjAsIHIwLCAyCUMgLi4uY291bnQKKwltdGN0cglyMAorCisJYW5kaS4JcjcsIG4sIDIKKwlibmUJTChtaWQpCisKKwlhZGRpCXVwLCB1cCwgMTYKKwlhZGRpCXZwLCB2cCwgMTYKKwlhZGRpCXJwLCBycCwgMTYKKworCUFMSUdOKDMyKQorTCh0b3ApOglsZAlyNiwgLTE2KHVwKQorCWxkCXI3LCAtOCh1cCkKKwlsZAlyOCwgLTE2KHZwKQorCWxkCXI5LCAtOCh2cCkKKwlBRERTVUJDCXIxMCwgcjgsIHI2CisJQUREU1VCQwlyMTEsIHI5LCByNworCXN0ZAlyMTAsIC0xNihycCkKKwlzdGQJcjExLCAtOChycCkKK0wobWlkKToJbGQJcjYsIDAodXApCisJbGQJcjcsIDgodXApCisJbGQJcjgsIDAodnApCisJbGQJcjksIDgodnApCisJQUREU1VCQwlyMTAsIHI4LCByNgorCUFERFNVQkMJcjExLCByOSwgcjcKKwlzdGQJcjEwLCAwKHJwKQorCXN0ZAlyMTEsIDgocnApCisJYWRkaQl1cCwgdXAsIDMyCisJYWRkaQl2cCwgdnAsIDMyCisJYWRkaQlycCwgcnAsIDMyCisJYmRueglMKHRvcCkKKworTChlbmQpOglzdWJmZQlyMywgcjAsIHIwCUMgLWN5CisJR0VOUlZBTAorCWJscgorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L3A3L2FvcnNvcnJsc2gxX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L3A3L2FvcnNvcnJsc2gxX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZjVmZDgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvcDcvYW9yc29ycmxzaDFfbi5hc20KQEAgLTAsMCArMSw0MyBAQAorZG5sICBQb3dlclBDLTY0IG1wbl9hZGRsc2gxX24sIG1wbl9zdWJsc2gxX24sIG1wbl9yc2Jsc2gxX24uCisKK2RubCAgQ29weXJpZ2h0IDIwMDMsIDIwMDUsIDIwMDksIDIwMTAsIDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitkZWZpbmUoTFNILAkJMSkKK2RlZmluZShSU0gsCQk2MykKKworaWZkZWYoYE9QRVJBVElPTl9hZGRsc2gxX24nLGBkZWZpbmUoYERPX2FkZCcpJykKK2lmZGVmKGBPUEVSQVRJT05fc3VibHNoMV9uJyxgZGVmaW5lKGBET19zdWInKScpCitpZmRlZihgT1BFUkFUSU9OX3JzYmxzaDFfbicsYGRlZmluZShgRE9fcnNiJyknKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRsc2gxX24gbXBuX3N1YmxzaDFfbiBtcG5fcnNibHNoMV9uKQorCitpbmNsdWRlX21wbihgcG93ZXJwYzY0L21vZGU2NC9wNy9hb3Jzb3JybHNoQ19uLmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvcDcvYW9yc29ycmxzaDJfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvcDcvYW9yc29ycmxzaDJfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y5ZDg4ZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9wNy9hb3Jzb3JybHNoMl9uLmFzbQpAQCAtMCwwICsxLDQzIEBACitkbmwgIFBvd2VyUEMtNjQgbXBuX2FkZGxzaDJfbiwgbXBuX3N1YmxzaDJfbiwgbXBuX3JzYmxzaDJfbi4KKworZG5sICBDb3B5cmlnaHQgMjAwMywgMjAwNSwgMjAwOSwgMjAxMCwgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK2RlZmluZShMU0gsCQkyKQorZGVmaW5lKFJTSCwJCTYyKQorCitpZmRlZihgT1BFUkFUSU9OX2FkZGxzaDJfbicsYGRlZmluZShgRE9fYWRkJyknKQoraWZkZWYoYE9QRVJBVElPTl9zdWJsc2gyX24nLGBkZWZpbmUoYERPX3N1YicpJykKK2lmZGVmKGBPUEVSQVRJT05fcnNibHNoMl9uJyxgZGVmaW5lKGBET19yc2InKScpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FkZGxzaDJfbiBtcG5fc3VibHNoMl9uIG1wbl9yc2Jsc2gyX24pCisKK2luY2x1ZGVfbXBuKGBwb3dlcnBjNjQvbW9kZTY0L3A3L2FvcnNvcnJsc2hDX24uYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9wNy9hb3Jzb3JybHNoQ19uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9wNy9hb3Jzb3JybHNoQ19uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjUxMjAyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L3A3L2FvcnNvcnJsc2hDX24uYXNtCkBAIC0wLDAgKzEsMTI5IEBACitkbmwgIFBvd2VyUEMtNjQgbXBuX2FkZGxzaENfbiwgbXBuX3N1YmxzaENfbiwgbXBuX3JzYmxzaENfbi4KKworZG5sICBDb3B5cmlnaHQgMjAwMywgMjAwNSwgMjAwOSwgMjAxMCwgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitDICAgICAgICAgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgUE9XRVIzL1BQQzYzMCAgICAgICAgICA/CitDIFBPV0VSNC9QUEM5NzAgICAgICAgICAgPworQyBQT1dFUjUgICAgICAgICAgICAgICAgID8KK0MgUE9XRVI2ICAgICAgICAgICAgICAgICA/CitDIFBPV0VSNyAgICAgICAgICAgICAgICAgMi41CisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsIGByMycpCitkZWZpbmUoYHVwJywgYHI0JykKK2RlZmluZShgdnAnLCBgcjUnKQorZGVmaW5lKGBuJywgIGByNicpCisKK2lmZGVmKGBET19hZGQnLCBgCisgIGRlZmluZShgQUREU1VCQycsCWBhZGRjCSQxLCAkMiwgJDMnKQorICBkZWZpbmUoYEFERFNVQkUnLAlgYWRkZQkkMSwgJDIsICQzJykKKyAgZGVmaW5lKElOSVRDWSwJYGFkZGljCSQxLCByMSwgMCcpCisgIGRlZmluZShSRVRWQUwsCWBhZGR6ZQlyMywgJDEnKQorICBkZWZpbmUoYGZ1bmMnLAltcG5fYWRkbHNoYCdMU0hgJ19uKScpCitpZmRlZihgRE9fc3ViJywgYAorICBkZWZpbmUoYEFERFNVQkMnLAlgc3ViZmMJJDEsICQyLCAkMycpCisgIGRlZmluZShgQUREU1VCRScsCWBzdWJmZQkkMSwgJDIsICQzJykKKyAgZGVmaW5lKElOSVRDWSwJYGFkZGljCSQxLCByMSwgLTEnKQorICBkZWZpbmUoUkVUVkFMLAlgc3ViZnplCXIzLCAkMQorCQkJbmVnCXIzLCByMycpCisgIGRlZmluZShgZnVuYycsCW1wbl9zdWJsc2hgJ0xTSGAnX24pJykKK2lmZGVmKGBET19yc2InLCBgCisgIGRlZmluZShgQUREU1VCQycsCWBzdWJmYwkkMSwgJDMsICQyJykKKyAgZGVmaW5lKGBBRERTVUJFJywJYHN1YmZlCSQxLCAkMywgJDInKQorICBkZWZpbmUoSU5JVENZLAlgYWRkaWMJJDEsIHIxLCAtMScpCisgIGRlZmluZShSRVRWQUwsCWBhZGRtZQlyMywgJDEnKQorICBkZWZpbmUoYGZ1bmMnLAltcG5fcnNibHNoYCdMU0hgJ19uKScpCisKK2RlZmluZShgczAnLCBgcjAnKSAgZGVmaW5lKGBzMScsIGByOScpCitkZWZpbmUoYHUwJywgYHI2JykgIGRlZmluZShgdTEnLCBgcjcnKQorZGVmaW5lKGB2MCcsIGByMTAnKSBkZWZpbmUoYHYxJywgYHIxMScpCisKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKGZ1bmMpCisJcmxkaWMJcjcsIG4sIDMsIDU5CisJYWRkCXVwLCB1cCwgcjcKKwlhZGQJdnAsIHZwLCByNworCWFkZAlycCwgcnAsIHI3CisKK2lmZGVmKGBET19hZGQnLCBgCisJYWRkaWMJcjAsIG4sIDMJQyBzZXQgY3kgZmxhZyBhcyBzaWRlIGVmZmVjdAorJyxgCisJc3ViZmMJcjAsIHIwLCByMAlDIHNldCBjeSBmbGFnCisJYWRkaQlyMCwgbiwgMworJykKKwlzcmRpCXIwLCByMCwgMgorCW10Y3RyCXIwCisKKwlhbmRpLglyMCwgbiwgMQorCWJlcQlMKGJ4MCkKKworTChieDEpOglhbmRpLglyMCwgbiwgMgorCWxpCXMwLCAwCisJYm5lCUwobG8zKQorCWIJTChsbzEpCisKK0woYngwKToJYW5kaS4JcjAsIG4sIDIKKwlsaQlzMSwgMAorCWJuZQlMKGxvMikKKworCUFMSUdOKDMyKQorTCh0b3ApOglhZGRpCXJwLCBycCwgMzIKKwlsZAl2MCwgMCh2cCkKKwlhZGRpCXZwLCB2cCwgMzIKKwlybGRpbWkJczEsIHYwLCBMU0gsIDAKKwlsZAl1MCwgMCh1cCkKKwlhZGRpCXVwLCB1cCwgMzIKKwlzcmRpCXMwLCB2MCwgUlNICisJQUREU1VCRShzMSwgczEsIHUwKQorCXN0ZAlzMSwgLTMyKHJwKQorTChsbzMpOglsZAl2MSwgLTI0KHZwKQorCXJsZGltaQlzMCwgdjEsIExTSCwgMAorCWxkCXUxLCAtMjQodXApCisJc3JkaQlzMSwgdjEsIFJTSAorCUFERFNVQkUoczAsIHMwLCB1MSkKKwlzdGQJczAsIC0yNChycCkKK0wobG8yKToJbGQJdjAsIC0xNih2cCkKKwlybGRpbWkJczEsIHYwLCBMU0gsIDAKKwlsZAl1MCwgLTE2KHVwKQorCXNyZGkJczAsIHYwLCBSU0gKKwlBRERTVUJFKHMxLCBzMSwgdTApCisJc3RkCXMxLCAtMTYocnApCitMKGxvMSk6CWxkCXYxLCAtOCh2cCkKKwlybGRpbWkJczAsIHYxLCBMU0gsIDAKKwlsZAl1MSwgLTgodXApCisJc3JkaQlzMSwgdjEsIFJTSAorCUFERFNVQkUoczAsIHMwLCB1MSkKKwlzdGQJczAsIC04KHJwKQorCWJkbnoJTCh0b3ApCQlDIGRlY3JlbWVudCBDVFIgYW5kIGxvb3AgYmFjaworCisJUkVUVkFMKAlzMSkKKwlibHIKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9wNy9nY2RfMTEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L3A3L2djZF8xMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA0ZTg5NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9wNy9nY2RfMTEuYXNtCkBAIC0wLDAgKzEsNjcgQEAKK2RubCAgUG93ZXJQQy02NCBtcG5fZ2NkXzExLgorCitkbmwgIENvcHlyaWdodCAyMDAwLTIwMDIsIDIwMDUsIDIwMDksIDIwMTEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCQkgICAgY3ljbGVzL2JpdCAoYXBwcm94KQorQyBQT1dFUjMvUFBDNjMwCQkgLQorQyBQT1dFUjQvUFBDOTcwCQkgLQorQyBQT1dFUjUJCSAtCitDIFBPV0VSNgkJIC0KK0MgUE9XRVI3CQkgNy42ICAgIG9ic29sZXRlCitDIFBPV0VSOAkJID8KK0MgUE9XRVI5CQkgPworQyBOdW1iZXJzIG1lYXN1cmVkIHdpdGg6IHNwZWVkIC1DRCAtczE2LTY0IC10NDggbXBuX2djZF8xCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGB1MCcsICAgIGByMycpCitkZWZpbmUoYHYwJywgICAgYHI0JykKKworZGVmaW5lKGBjbnQnLCAgYHI5JylkbmwKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9nY2RfMTEpCisJbGkJcjEyLCA2MworCWIJTChvZGQpCisKKwlBTElHTigxNikKK0wodG9wKToJYW5kCXI4LCByMTEsIHIxMAkJQyBpc29sYXRlIGxzYgorCWNudGx6ZAljbnQsIHI4CisJaXNlbAl2MCwgdTAsIHYwLCAyOQkJQyB2ID0gbWluKHUsdikKKwlpc2VsCXUwLCByMTAsIHIxMSwgMjkJQyB1ID0gfHUgLSB2fAorCXN1YmYJY250LCBjbnQsIHIxMgkJQyBjbnQgPSA2My1jbnQKKwlzcmQJdTAsIHUwLCBjbnQKK0wob2RkKToJY21wbGQJY3I3LCB2MCwgdTAKKwlzdWJmCXIxMCwgdTAsIHYwCQlDIHIxMCA9IHYgLSB1CisJc3ViZglyMTEsIHYwLCB1MAkJQyByMTEgPSB1IC0gdgorCWJuZQljcjcsIEwodG9wKQorCitMKGVuZCk6CWJscgorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L3A3L2djZF8yMi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvcDcvZ2NkXzIyLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGUzMGU0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L3A3L2djZF8yMi5hc20KQEAgLTAsMCArMSwxNDYgQEAKK2RubCAgUG93ZXJQQy02NCBtcG5fZ2NkXzIyIG9wdGltaXNlZCBmb3IgUE9XRVI3IGFuZCBQT1dFUjguCisKK2RubCAgQ29weXJpZ2h0IDIwMDAtMjAwMiwgMjAwNSwgMjAwOSwgMjAxMS0yMDEzLCAyMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK2RubCAgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJCSAgICBjeWNsZXMvYml0IChhcHByb3gpCitDIFBPV0VSMy9QUEM2MzAJCSAtCitDIFBPV0VSNC9QUEM5NzAJCSAtCitDIFBPV0VSNQkJIC0KK0MgUE9XRVI2CQkgLQorQyBQT1dFUjcJCTEyLjMKK0MgUE9XRVI4CQkxMy40CitDIFBPV0VSOQkJMTAuNgorCitDIFdlIGRlZmluZSBTTE9XIGlmIHRoaXMgdGFyZ2V0IHVzZXMgYSBzbG93IHN0cnVjdCByZXR1cm4gbWVjaGFuaXNtLCB3aXRoCitDIHIzIGFzIGFuIGltcGxpY2l0IHBhcmFtZXRlciBmb3IgdGhlIHN0cnVjdCBwb2ludGVyLgordW5kZWZpbmUoYFNMT1cnKWRubAoraWZkZWYoYEFJWCcsYGRlZmluZShgU0xPVycsYGR1ZSB0byBBSVgnKScsYAorICBpZmRlZihgREFSV0lOJywsYAorICAgIGlmZGVmKGBFTEZ2Ml9BQkknLCxgZGVmaW5lKGBTTE9XJyxgZHVlIHRvIEVMRnYxJyknKWRubAorICAnKQorJykKKworaWZkZWYoYFNMT1cnLGAKK2RlZmluZShgSUZTTE9XJywgYCQxJykKK2RlZmluZShgdTEnLCAgICBgcjQnKQorZGVmaW5lKGB1MCcsICAgIGByNScpCitkZWZpbmUoYHYxJywgICAgYHI2JykKK2RlZmluZShgdjAnLCAgICBgcjcnKQorJyxgCitkZWZpbmUoYElGU0xPVycsIGAnKQorZGVmaW5lKGB1MScsICAgIGByMycpCitkZWZpbmUoYHUwJywgICAgYHI0JykKK2RlZmluZShgdjEnLCAgICBgcjUnKQorZGVmaW5lKGB2MCcsICAgIGByNicpCisnKQorCitkZWZpbmUoYHRtcCcsICAgYHIwJykKK2RlZmluZShgdDAnLCAgICBgcjgnKQorZGVmaW5lKGB0MScsICAgIGByOScpCitkZWZpbmUoYHMwJywgICAgYHIxMCcpCitkZWZpbmUoYHMxJywgICAgYHIxMScpCitkZWZpbmUoYGNudCcsICAgYHIxMicpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fZ2NkXzIyKQorTCh0b3ApOglzdWJmYy4JdDAsIHYwLCB1MAkJQyAwIDEyCisJYmVxCWNyMCwgTChsb3d6KQorCXN1YmZlCXQxLCB2MSwgdTEJCUMgMiAxNAorCXN1YmZlLgl0bXAsIHRtcCwgdG1wCQlDIDQJc2V0IGNyMCBmcm9tIHRoZSBjYXJyeSBiaXQKKwlzdWJmYwlzMCwgdTAsIHYwCQlDIDAKKwlzdWJmZQlzMSwgdTEsIHYxCQlDIDIKKworTChiY2spOglhbmQJdG1wLCBzMCwgdDAJCUMgMgorCWNudGx6ZAljbnQsIHRtcAkJQyA0CisJYWRkaQl0bXAsIGNudCwgMQkJQyA2CisJc3ViZmljCWNudCwgY250LCA2MwkJQyA2CisKKwlpc2VsCXYwLCB2MCwgdTAsIDIJCUMgNgl1c2UgY29uZGl0aW9uIHNldCBieSBzdWJmZQorCWlzZWwJdjEsIHYxLCB1MSwgMgkJQyA2CisJaXNlbAl1MCwgdDAsIHMwLCAyCQlDIDYKKwlpc2VsCXUxLCB0MSwgczEsIDIJCUMgNgorCisJc3JkCXUwLCB1MCwgY250CQlDIDgKKwlzbGQJdG1wLCB1MSwgdG1wCQlDIDgKKwlzcmQJdTEsIHUxLCBjbnQJCUMgOAorCW9yCXUwLCB1MCwgdG1wCQlDIDEwCisKKwlvci4JcjAsIHUxLCB2MQkJQyAxMAorCWJuZQlMKHRvcCkKKworCisJbGkJcjAsIDYzCisJYglMKG9kZCkKKwlBTElHTigxNikKK0wodG9wMSk6aXNlbAl2MCwgdTAsIHYwLCAyOQkJQyB2ID0gbWluKHUsdikKKwlpc2VsCXUwLCByMTAsIHIxMSwgMjkJQyB1ID0gfHUgLSB2fAorCXN1YmYJY250LCBjbnQsIHIwCQlDIGNudCA9IDYzLWNudAorCXNyZAl1MCwgdTAsIGNudAorTChvZGQpOglzdWJmCXIxMCwgdTAsIHYwCQlDIHIxMCA9IHYgLSB1CisJc3ViZglyMTEsIHYwLCB1MAkJQyByMTEgPSB1IC0gdgorCWNtcGxkCWNyNywgdjAsIHUwCisJYW5kCXI4LCByMTEsIHIxMAkJQyBpc29sYXRlIGxzYgorCWNudGx6ZAljbnQsIHI4CisJYm5lCWNyNywgTCh0b3AxKQorCitpZmRlZihgU0xPVycsYAorCXN0ZAl2MCwgMChyMykKKwlzdGQJcjEwLCA4KHIzKQkJQyB6ZXJvCisnLGAKKwltcglyMywgdjAKKwlsaQlyNCwgMAorJykKKwlibHIKKworCitMKGxvd3opOkMgV2UgY29tZSBoZXJlIHdoZW4gdjAgLSB1MCA9IDAKKwlDIDEuIElmIHYxIC0gdTEgPSAwLCB0aGVuIGdjZCBpcyB1ID0gdi4KKwlDIDIuIEVsc2UgY29tcHV0ZSBnY2RfMjEoe3YxLHYwfSwgfHUxLXYxfCkKKwlzdWJmYy4JdDAsIHYxLCB1MQkJQyAyIDgKKwliZXEJTChlbmQpCisJbGkJdDEsIDAKKwlzdWJmZS4JdG1wLCB0bXAsIHRtcAkJQyA0CXNldCBjcjAgZnJvbSB0aGUgY2FycnkgYml0CisJc3ViZglzMCwgdTEsIHYxCQlDIDIKKwlsaQlzMSwgMAorCWIJTChiY2spCisKK0woZW5kKToKK2lmZGVmKGBTTE9XJyxgCisJc3RkCXYwLCAwKHIzKQorCXN0ZAl2MSwgOChyMykKKwlibHIKKycsYAorCW1yCXIzLCB2MAorCW1yCXI0LCB2MQorCWJscgorJykKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9wNy9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvcDcvZ21wLW1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmYTYyY2YKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvcDcvZ21wLW1wYXJhbS5oCkBAIC0wLDAgKzEsMTc0IEBACisvKiBQT1dFUjcgZ21wLW1wYXJhbS5oIC0tIENvbXBpbGVyL21hY2hpbmUgcGFyYW1ldGVyIGhlYWRlciBmaWxlLgorCitDb3B5cmlnaHQgMjAxOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2RlZmluZSBHTVBfTElNQl9CSVRTIDY0CisjZGVmaW5lIEdNUF9MSU1CX0JZVEVTIDgKKworLyogMzcyMCBNSHogUE9XRVI3L1NNVDQgKi8KKy8qIEZGVCB0dW5pbmcgbGltaXQgPSAwLjUgTSAqLworLyogR2VuZXJhdGVkIGJ5IHR1bmV1cC5jLCAyMDE5LTEwLTAyLCBnY2MgNC44ICovCisKKyNkZWZpbmUgTU9EXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PRF8xTl9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA2CisjZGVmaW5lIE1PRF8xVV9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA0CisjZGVmaW5lIE1PRF8xXzFfVE9fTU9EXzFfMl9USFJFU0hPTEQgICAgICAgICA4CisjZGVmaW5lIE1PRF8xXzJfVE9fTU9EXzFfNF9USFJFU0hPTEQgICAgICAgIDE2CisjZGVmaW5lIFBSRUlOVl9NT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgIDEzCisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIERJVl9RUl8xTl9QSTFfTUVUSE9EICAgICAgICAgICAgICAgICAxICAvKiAzLjQ3JSBmYXN0ZXIgdGhhbiAyICovCisjZGVmaW5lIERJVl9RUl8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAxCisjZGVmaW5lIERJVl9RUl8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICAxCisjZGVmaW5lIERJVl9RUl8yX1BJMl9USFJFU0hPTEQgICAgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgICAgICAgMjcKKworI2RlZmluZSBESVZfMV9WU19NVUxfMV9QRVJDRU5UICAgICAgICAgICAgIDM0MQorCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDcxCisjZGVmaW5lIE1VTF9UT09NNDRfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTk2CisjZGVmaW5lIE1VTF9UT09NNkhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjk4CisjZGVmaW5lIE1VTF9UT09NOEhfVEhSRVNIT0xEICAgICAgICAgICAgICAgNDA2CisKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNDNfVEhSRVNIT0xEICAgICAgODEKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxNDAKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxMzIKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNjNfVEhSRVNIT0xEICAgICAxMzkKKyNkZWZpbmUgTVVMX1RPT000M19UT19UT09NNTRfVEhSRVNIT0xEICAgICAxMjAKKworI2RlZmluZSBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTA1CisjZGVmaW5lIFNRUl9UT09NNF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTkwCisjZGVmaW5lIFNRUl9UT09NNl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMzE4CisjZGVmaW5lIFNRUl9UT09NOF9USFJFU0hPTEQgICAgICAgICAgICAgICAgNTQ3CisKKyNkZWZpbmUgTVVMTUlEX1RPT000Ml9USFJFU0hPTEQgICAgICAgICAgICAgNTYKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxOAorI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAyMAorCisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgNDM2ICAvKiBrID0gNSAqLworI2RlZmluZSBNVUxfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgNDM2LCA1fSwgeyAgICAgMjEsIDZ9LCB7ICAgICAyMSwgN30sIHsgICAgIDExLCA2fSwgXAorICAgIHsgICAgIDIzLCA3fSwgeyAgICAgMTIsIDZ9LCB7ICAgICAyNSwgN30sIHsgICAgIDIxLCA4fSwgXAorICAgIHsgICAgIDExLCA3fSwgeyAgICAgMjUsIDh9LCB7ICAgICAxMywgN30sIHsgICAgIDI4LCA4fSwgXAorICAgIHsgICAgIDE1LCA3fSwgeyAgICAgMzMsIDh9LCB7ICAgICAxNywgN30sIHsgICAgIDM1LCA4fSwgXAorICAgIHsgICAgIDE5LCA3fSwgeyAgICAgMzksIDh9LCB7ICAgICAyMSwgOX0sIHsgICAgIDExLCA4fSwgXAorICAgIHsgICAgIDI5LCA5fSwgeyAgICAgMTUsIDh9LCB7ICAgICAzNSwgOX0sIHsgICAgIDE5LCA4fSwgXAorICAgIHsgICAgIDQxLCA5fSwgeyAgICAgMjMsIDh9LCB7ICAgICA0OSwgOX0sIHsgICAgIDI3LDEwfSwgXAorICAgIHsgICAgIDE1LCA5fSwgeyAgICAgMzEsIDh9LCB7ICAgICA2MywgOX0sIHsgICAgIDQzLDEwfSwgXAorICAgIHsgICAgIDIzLCA5fSwgeyAgICAgNTUsMTF9LCB7ICAgICAxNSwxMH0sIHsgICAgIDMxLCA5fSwgXAorICAgIHsgICAgIDY3LDEwfSwgeyAgICAgMzksIDl9LCB7ICAgICA3OSwxMH0sIHsgICAgIDQ3LCA5fSwgXAorICAgIHsgICAgIDk1LDEwfSwgeyAgICAgNTUsMTF9LCB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA5fSwgXAorICAgIHsgICAgMTI3LDEwfSwgeyAgICAgNzksMTF9LCB7ICAgICA0NywxMH0sIHsgICAgMTAzLDEyfSwgXAorICAgIHsgICAgIDMxLDExfSwgeyAgICAgNjMsMTB9LCB7ICAgIDEzNSwxMX0sIHsgICAgIDc5LDEwfSwgXAorICAgIHsgICAgMTU5LDExfSwgeyAgICAgOTUsMTB9LCB7ICAgIDE5MSwgOX0sIHsgICAgMzgzLDExfSwgXAorICAgIHsgICAgMTExLDEyfSwgeyAgICAgNjMsMTF9LCB7ICAgIDEyNywxMH0sIHsgICAgMjU1LCA5fSwgXAorICAgIHsgICAgNTExLDExfSwgeyAgICAxNDMsMTB9LCB7ICAgIDI4NywgOX0sIHsgICAgNTc1LDExfSwgXAorICAgIHsgICAgMTU5LDEwfSwgeyAgICAzMTksMTJ9LCB7ICAgICA5NSwxMX0sIHsgICAgMTkxLDEwfSwgXAorICAgIHsgICAgMzgzLCA5fSwgeyAgICA3NjcsMTF9LCB7ICAgIDIwNywxMH0sIHsgICAgNDE1LDEzfSwgXAorICAgIHsgICA4MTkyLDE0fSwgeyAgMTYzODQsMTV9LCB7ICAzMjc2OCwxNn0sIHsgIDY1NTM2LDE3fSwgXAorICAgIHsgMTMxMDcyLDE4fSwgeyAyNjIxNDQsMTl9LCB7IDUyNDI4OCwyMH0sIHsxMDQ4NTc2LDIxfSwgXAorICAgIHsyMDk3MTUyLDIyfSwgezQxOTQzMDQsMjN9LCB7ODM4ODYwOCwyNH0gfQorI2RlZmluZSBNVUxfRkZUX1RBQkxFM19TSVpFIDgzCisjZGVmaW5lIE1VTF9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA0NzM2CisKKyNkZWZpbmUgU1FSX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICAzNjggIC8qIGsgPSA1ICovCisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICAzNjgsIDV9LCB7ICAgICAxOSwgNn0sIHsgICAgIDEwLCA1fSwgeyAgICAgMjEsIDZ9LCBcCisgICAgeyAgICAgMjEsIDd9LCB7ICAgICAxMSwgNn0sIHsgICAgIDIzLCA3fSwgeyAgICAgMTIsIDZ9LCBcCisgICAgeyAgICAgMjUsIDd9LCB7ICAgICAxMywgNn0sIHsgICAgIDI3LCA3fSwgeyAgICAgMjUsIDh9LCBcCisgICAgeyAgICAgMTMsIDd9LCB7ICAgICAyOCwgOH0sIHsgICAgIDE1LCA3fSwgeyAgICAgMzIsIDh9LCBcCisgICAgeyAgICAgMTcsIDd9LCB7ICAgICAzNSwgOH0sIHsgICAgIDE5LCA3fSwgeyAgICAgMzksIDh9LCBcCisgICAgeyAgICAgMjEsIDl9LCB7ICAgICAxMSwgOH0sIHsgICAgIDI5LCA5fSwgeyAgICAgMTUsIDh9LCBcCisgICAgeyAgICAgMzUsIDl9LCB7ICAgICAxOSwgOH0sIHsgICAgIDQxLCA5fSwgeyAgICAgMjMsIDh9LCBcCisgICAgeyAgICAgNDcsIDl9LCB7ICAgICAyNywxMH0sIHsgICAgIDE1LCA5fSwgeyAgICAgMzEsIDh9LCBcCisgICAgeyAgICAgNjMsIDl9LCB7ICAgICAzOSwxMH0sIHsgICAgIDIzLCA5fSwgeyAgICAgNTEsMTF9LCBcCisgICAgeyAgICAgMTUsMTB9LCB7ICAgICAzMSwgOX0sIHsgICAgIDY3LDEwfSwgeyAgICAgMzksIDl9LCBcCisgICAgeyAgICAgNzksMTB9LCB7ICAgICA0NywgOX0sIHsgICAgIDk1LDEwfSwgeyAgICAgNTUsMTF9LCBcCisgICAgeyAgICAgMzEsMTB9LCB7ICAgICA3OSwxMX0sIHsgICAgIDQ3LDEwfSwgeyAgICAgOTUsMTJ9LCBcCisgICAgeyAgICAgMzEsMTF9LCB7ICAgICA2MywxMH0sIHsgICAgMTM1LDExfSwgeyAgICAgNzksMTB9LCBcCisgICAgeyAgICAxNTksIDl9LCB7ICAgIDMxOSwxMX0sIHsgICAgIDk1LDEwfSwgeyAgICAxOTEsIDl9LCBcCisgICAgeyAgICAzODMsMTF9LCB7ICAgIDExMSwxMn0sIHsgICAgIDYzLDExfSwgeyAgICAxMjcsMTB9LCBcCisgICAgeyAgICAyNTUsIDl9LCB7ICAgIDUxMSwxMX0sIHsgICAgMTQzLDEwfSwgeyAgICAyODcsIDl9LCBcCisgICAgeyAgICA1NzUsMTB9LCB7ICAgIDMwMywxMX0sIHsgICAgMTU5LDEwfSwgeyAgICAzMTksIDl9LCBcCisgICAgeyAgICA2MzksMTJ9LCB7ICAgICA5NSwxMX0sIHsgICAgMTkxLDEwfSwgeyAgICAzODMsIDl9LCBcCisgICAgeyAgICA3NjcsMTN9LCB7ICAgODE5MiwxNH0sIHsgIDE2Mzg0LDE1fSwgeyAgMzI3NjgsMTZ9LCBcCisgICAgeyAgNjU1MzYsMTd9LCB7IDEzMTA3MiwxOH0sIHsgMjYyMTQ0LDE5fSwgeyA1MjQyODgsMjB9LCBcCisgICAgezEwNDg1NzYsMjF9LCB7MjA5NzE1MiwyMn0sIHs0MTk0MzA0LDIzfSwgezgzODg2MDgsMjR9IH0KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTNfU0laRSA4NAorI2RlZmluZSBTUVJfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMzI2NAorCisjZGVmaW5lIE1VTExPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAzCisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDM1CisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgICA5NDQ5CisjZGVmaW5lIFNRUkxPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAzCisjZGVmaW5lIFNRUkxPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTE5CisjZGVmaW5lIFNRUkxPX1NRUl9USFJFU0hPTEQgICAgICAgICAgICAgICA2NDQwCisKKyNkZWZpbmUgRENfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMzMKKyNkZWZpbmUgRENfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAxMjQKKyNkZWZpbmUgRENfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNjIKKyNkZWZpbmUgRENfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNDQKKworI2RlZmluZSBJTlZfTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICA2NworI2RlZmluZSBJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDEyMworI2RlZmluZSBJTlZfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDEyMworCisjZGVmaW5lIEJJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgMjg0CisjZGVmaW5lIFJFRENfMV9UT19SRURDXzJfVEhSRVNIT0xEICAgICAgICAgIDE4CisjZGVmaW5lIFJFRENfMl9UT19SRURDX05fVEhSRVNIT0xEICAgICAgICAgMTA5CisKKyNkZWZpbmUgTVVfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDEzODcKKyNkZWZpbmUgTVVfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgIDEzMzQKKyNkZWZpbmUgTVVQSV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgNTAKKyNkZWZpbmUgTVVfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgIDEzMDgKKyNkZWZpbmUgTVVfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE0OTkKKworI2RlZmluZSBQT1dNX1NFQ19UQUJMRSAgMSwyMywxMjEsNTc5LDY0MgorCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgIDE4CisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAxNTYyCisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAzMTAwCisKKyNkZWZpbmUgRkFDX0RTQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICA3NzQKKyNkZWZpbmUgRkFDX09ERF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgMjUKKworI2RlZmluZSBNQVRSSVgyMl9TVFJBU1NFTl9USFJFU0hPTEQgICAgICAgICAxOAorI2RlZmluZSBIR0NEMl9ESVYxX01FVEhPRCAgICAgICAgICAgICAgICAgICAgNSAgLyogMy4yNyUgZmFzdGVyIHRoYW4gMyAqLworI2RlZmluZSBIR0NEX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgIDExOAorI2RlZmluZSBIR0NEX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE1MAorI2RlZmluZSBIR0NEX1JFRFVDRV9USFJFU0hPTEQgICAgICAgICAgICAgMzAxNAorI2RlZmluZSBHQ0RfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDM4NgorI2RlZmluZSBHQ0RFWFRfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDM2NQorI2RlZmluZSBKQUNPQklfQkFTRV9NRVRIT0QgICAgICAgICAgICAgICAgICAgNCAgLyogMjcuNjQlIGZhc3RlciB0aGFuIDEgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9wOC9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvcDgvZ21wLW1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGRiMjgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvcDgvZ21wLW1wYXJhbS5oCkBAIC0wLDAgKzEsMTcwIEBACisvKiBQT1dFUjggZ21wLW1wYXJhbS5oIC0tIENvbXBpbGVyL21hY2hpbmUgcGFyYW1ldGVyIGhlYWRlciBmaWxlLgorCitDb3B5cmlnaHQgMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2RlZmluZSBHTVBfTElNQl9CSVRTIDY0CisjZGVmaW5lIEdNUF9MSU1CX0JZVEVTIDgKKworLyogNDE1MCBNSHogUE9XRVI4L1NNVDQgKi8KKy8qIEZGVCB0dW5pbmcgbGltaXQgPSAwLjUgTSAqLworLyogR2VuZXJhdGVkIGJ5IHR1bmV1cC5jLCAyMDE5LTA5LTI0LCBnY2MgNy4yICovCisKKyNkZWZpbmUgTU9EXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PRF8xTl9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA3CisjZGVmaW5lIE1PRF8xVV9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA2CisjZGVmaW5lIE1PRF8xXzFfVE9fTU9EXzFfMl9USFJFU0hPTEQgICAgICAgIDExCisjZGVmaW5lIE1PRF8xXzJfVE9fTU9EXzFfNF9USFJFU0hPTEQgICAgICAgIDIyCisjZGVmaW5lIFBSRUlOVl9NT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgIDEwCisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIERJVl9RUl8xTl9QSTFfTUVUSE9EICAgICAgICAgICAgICAgICAyICAvKiAxNi45NyUgZmFzdGVyIHRoYW4gMSAqLworI2RlZmluZSBESVZfUVJfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgMgorI2RlZmluZSBESVZfUVJfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgMQorI2RlZmluZSBESVZfUVJfMl9QSTJfVEhSRVNIT0xEICAgICAgICAgICAgICAgOQorI2RlZmluZSBESVZFWEFDVF8xX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIEJNT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgICAgICAgIDM0CisKKyNkZWZpbmUgRElWXzFfVlNfTVVMXzFfUEVSQ0VOVCAgICAgICAgICAgICAyNzYKKworI2RlZmluZSBNVUxfVE9PTTIyX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBNVUxfVE9PTTMzX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA3MworI2RlZmluZSBNVUxfVE9PTTQ0X1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE5NQorI2RlZmluZSBNVUxfVE9PTTZIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDI3OAorI2RlZmluZSBNVUxfVE9PTThIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDQwNgorCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTQzX1RIUkVTSE9MRCAgICAgIDczCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgMTMxCisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgMTIxCisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTYzX1RIUkVTSE9MRCAgICAgMTM4CisjZGVmaW5lIE1VTF9UT09NNDNfVE9fVE9PTTU0X1RIUkVTSE9MRCAgICAgMTA2CisKKyNkZWZpbmUgU1FSX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAobmF0aXZlKSAqLworI2RlZmluZSBTUVJfVE9PTTJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBTUVJfVE9PTTNfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA5NworI2RlZmluZSBTUVJfVE9PTTRfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE3OAorI2RlZmluZSBTUVJfVE9PTTZfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDMwMworI2RlZmluZSBTUVJfVE9PTThfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDQ1NAorCisjZGVmaW5lIE1VTE1JRF9UT09NNDJfVEhSRVNIT0xEICAgICAgICAgICAgIDQyCisKKyNkZWZpbmUgTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgU1FSTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTkKKworI2RlZmluZSBNVUxfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDQwNCAgLyogayA9IDUgKi8KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDQwNCwgNX0sIHsgICAgIDE5LCA2fSwgeyAgICAgMTAsIDV9LCB7ICAgICAyMSwgNn0sIFwKKyAgICB7ICAgICAyMSwgN30sIHsgICAgIDExLCA2fSwgeyAgICAgMjMsIDd9LCB7ICAgICAxMiwgNn0sIFwKKyAgICB7ICAgICAyNSwgN30sIHsgICAgIDIxLCA4fSwgeyAgICAgMTEsIDd9LCB7ICAgICAyNSwgOH0sIFwKKyAgICB7ICAgICAxMywgN30sIHsgICAgIDI3LCA4fSwgeyAgICAgMTUsIDd9LCB7ICAgICAzMSwgOH0sIFwKKyAgICB7ICAgICAxNywgN30sIHsgICAgIDM1LCA4fSwgeyAgICAgMTksIDd9LCB7ICAgICAzOSwgOH0sIFwKKyAgICB7ICAgICAyMSwgOX0sIHsgICAgIDExLCA4fSwgeyAgICAgMjcsIDl9LCB7ICAgICAxNSwgOH0sIFwKKyAgICB7ICAgICAzNSwgOX0sIHsgICAgIDE5LCA4fSwgeyAgICAgNDEsIDl9LCB7ICAgICAyMywgOH0sIFwKKyAgICB7ICAgICA0NywgOX0sIHsgICAgIDI3LDEwfSwgeyAgICAgMTUsIDl9LCB7ICAgICAzOSwxMH0sIFwKKyAgICB7ICAgICAyMywgOX0sIHsgICAgIDUxLDExfSwgeyAgICAgMTUsMTB9LCB7ICAgICAzMSwgOX0sIFwKKyAgICB7ICAgICA2MywxMH0sIHsgICAgIDM5LCA5fSwgeyAgICAgNzksMTB9LCB7ICAgICA0NywgOX0sIFwKKyAgICB7ICAgICA5NSwxMX0sIHsgICAgIDMxLDEwfSwgeyAgICAgNjMsIDl9LCB7ICAgIDEzMSwxMH0sIFwKKyAgICB7ICAgICA3OSwxMX0sIHsgICAgIDQ3LDEwfSwgeyAgICAgOTUsMTJ9LCB7ICAgICAzMSwxMX0sIFwKKyAgICB7ICAgICA2MywxMH0sIHsgICAgMTI3LCA5fSwgeyAgICAyNTUsMTB9LCB7ICAgIDEzNSwxMX0sIFwKKyAgICB7ICAgICA3OSwxMH0sIHsgICAgMTU5LDExfSwgeyAgICAgOTUsIDh9LCB7ICAgIDc2NywgN30sIFwKKyAgICB7ICAgMTU5OSwxMX0sIHsgICAgMTExLDEyfSwgeyAgICAgNjMsMTF9LCB7ICAgIDEyNywxMH0sIFwKKyAgICB7ICAgIDI1NSwgOX0sIHsgICAgNTExLDExfSwgeyAgICAxNDMsMTB9LCB7ICAgIDI4NywgOX0sIFwKKyAgICB7ICAgIDU3NSwxMX0sIHsgICAgMTU5LDEyfSwgeyAgICAgOTUsMTF9LCB7ICAgIDE5MSwxMH0sIFwKKyAgICB7ICAgIDM4MywxM30sIHsgICA4MTkyLDE0fSwgeyAgMTYzODQsMTV9LCB7ICAzMjc2OCwxNn0sIFwKKyAgICB7ICA2NTUzNiwxN30sIHsgMTMxMDcyLDE4fSwgeyAyNjIxNDQsMTl9LCB7IDUyNDI4OCwyMH0sIFwKKyAgICB7MTA0ODU3NiwyMX0sIHsyMDk3MTUyLDIyfSwgezQxOTQzMDQsMjN9LCB7ODM4ODYwOCwyNH0gfQorI2RlZmluZSBNVUxfRkZUX1RBQkxFM19TSVpFIDgwCisjZGVmaW5lIE1VTF9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA0NzM2CisKKyNkZWZpbmUgU1FSX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICAzNDAgIC8qIGsgPSA1ICovCisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICAzNDAsIDV9LCB7ICAgICAxOSwgNn0sIHsgICAgIDEwLCA1fSwgeyAgICAgMjEsIDZ9LCBcCisgICAgeyAgICAgMjEsIDd9LCB7ICAgICAxMSwgNn0sIHsgICAgIDIzLCA3fSwgeyAgICAgMjEsIDh9LCBcCisgICAgeyAgICAgMTEsIDd9LCB7ICAgICAyNSwgOH0sIHsgICAgIDEzLCA3fSwgeyAgICAgMjcsIDh9LCBcCisgICAgeyAgICAgMTUsIDd9LCB7ICAgICAzMSwgOH0sIHsgICAgIDIxLCA5fSwgeyAgICAgMTEsIDh9LCBcCisgICAgeyAgICAgMjcsIDl9LCB7ICAgICAxNSwgOH0sIHsgICAgIDMzLCA5fSwgeyAgICAgMTksIDh9LCBcCisgICAgeyAgICAgNDEsIDl9LCB7ICAgICAyMywgOH0sIHsgICAgIDQ3LCA5fSwgeyAgICAgMjcsMTB9LCBcCisgICAgeyAgICAgMTUsIDl9LCB7ICAgICAzOSwxMH0sIHsgICAgIDIzLCA5fSwgeyAgICAgNDcsMTF9LCBcCisgICAgeyAgICAgMTUsMTB9LCB7ICAgICAzMSwgOX0sIHsgICAgIDY3LDEwfSwgeyAgICAgMzksIDl9LCBcCisgICAgeyAgICAgNzksMTB9LCB7ICAgICA0NywxMX0sIHsgICAgIDMxLDEwfSwgeyAgICAgNzksMTF9LCBcCisgICAgeyAgICAgNDcsMTB9LCB7ICAgICA5NSwxMn0sIHsgICAgIDMxLDExfSwgeyAgICAgNjMsMTB9LCBcCisgICAgeyAgICAxMjcsIDl9LCB7ICAgIDI1NSwxMX0sIHsgICAgIDc5LCA5fSwgeyAgICAzMTksMTF9LCBcCisgICAgeyAgICAgOTUsMTB9LCB7ICAgIDE5MSwxMn0sIHsgICAgIDYzLDExfSwgeyAgICAxMjcsMTB9LCBcCisgICAgeyAgICAyNTUsIDl9LCB7ICAgIDUxMSwxMH0sIHsgICAgMjcxLDExfSwgeyAgICAxNDMsMTB9LCBcCisgICAgeyAgICAyODcsIDl9LCB7ICAgIDU3NSwxMH0sIHsgICAgMzAzLCA5fSwgeyAgICA2MDcsMTB9LCBcCisgICAgeyAgICAzMTksMTJ9LCB7ICAgICA5NSwxMX0sIHsgICAgMTkxLDEwfSwgeyAgICAzODMsMTN9LCBcCisgICAgeyAgIDgxOTIsMTR9LCB7ICAxNjM4NCwxNX0sIHsgIDMyNzY4LDE2fSwgeyAgNjU1MzYsMTd9LCBcCisgICAgeyAxMzEwNzIsMTh9LCB7IDI2MjE0NCwxOX0sIHsgNTI0Mjg4LDIwfSwgezEwNDg1NzYsMjF9LCBcCisgICAgezIwOTcxNTIsMjJ9LCB7NDE5NDMwNCwyM30sIHs4Mzg4NjA4LDI0fSB9CisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzX1NJWkUgNzEKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDMyNjQKKworI2RlZmluZSBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgMworI2RlZmluZSBNVUxMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAzMworI2RlZmluZSBNVUxMT19NVUxfTl9USFJFU0hPTEQgICAgICAgICAgICAgOTE3NAorI2RlZmluZSBTUVJMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIFNRUkxPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTE0CisjZGVmaW5lIFNRUkxPX1NRUl9USFJFU0hPTEQgICAgICAgICAgICAgICA2NDYxCisKKyNkZWZpbmUgRENfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMzgKKyNkZWZpbmUgRENfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAxNTgKKyNkZWZpbmUgRENfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNDgKKyNkZWZpbmUgRENfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMTIKKworI2RlZmluZSBJTlZfTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICA3NAorI2RlZmluZSBJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDEzMgorI2RlZmluZSBJTlZfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDEzMQorCisjZGVmaW5lIEJJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgMjc4CisjZGVmaW5lIFJFRENfMV9UT19SRURDXzJfVEhSRVNIT0xEICAgICAgICAgIDU2CisjZGVmaW5lIFJFRENfMl9UT19SRURDX05fVEhSRVNIT0xEICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKworI2RlZmluZSBNVV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTE0MgorI2RlZmluZSBNVV9ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgMTE0MgorI2RlZmluZSBNVVBJX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICA0NgorI2RlZmluZSBNVV9CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTE0MgorI2RlZmluZSBNVV9CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTQ3MAorCisjZGVmaW5lIFBPV01fU0VDX1RBQkxFICAzLDE5LDExNyw2NzIsMTg2NworCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgIDE4CisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgNjA4CisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAyNDA1CisKKyNkZWZpbmUgRkFDX0RTQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAxNjQKKyNkZWZpbmUgRkFDX09ERF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworCisjZGVmaW5lIE1BVFJJWDIyX1NUUkFTU0VOX1RIUkVTSE9MRCAgICAgICAgIDE0CisjZGVmaW5lIEhHQ0QyX0RJVjFfTUVUSE9EICAgICAgICAgICAgICAgICAgICAxICAvKiA2Ljg4JSBmYXN0ZXIgdGhhbiAzICovCisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAgMTE0CisjZGVmaW5lIEhHQ0RfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTE4CisjZGVmaW5lIEhHQ0RfUkVEVUNFX1RIUkVTSE9MRCAgICAgICAgICAgICAyMjA1CisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgNDQwCisjZGVmaW5lIEdDREVYVF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMzQ1CisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAgICAxICAvKiAwLjc0JSBmYXN0ZXIgdGhhbiA0ICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvcDgvaW52ZXJ0X2xpbWIuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L3A4L2ludmVydF9saW1iLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2VhMGUwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L3A4L2ludmVydF9saW1iLmFzbQpAQCAtMCwwICsxLDUzIEBACitkbmwgIFBvd2VyUEMtNjQgbXBuX2ludmVydF9saW1iIC0tIEludmVydCBhIG5vcm1hbGl6ZWQgbGltYi4KKworZG5sICBDb3B5cmlnaHQgMjAxNSwgMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgICAgICAgICAgY3ljbGVzL2xpbWIgKGFwcHJveGltYXRlKQorQyBQT1dFUjMvUFBDNjMwICAgICAgICAgLQorQyBQT1dFUjQvUFBDOTcwICAgICAgICAgLQorQyBQT1dFUjUgICAgICAgICAgICAgICAgLQorQyBQT1dFUjYgICAgICAgICAgICAgICAgLQorQyBQT1dFUjcgICAgICAgICAgICAgICAgPworQyBQT1dFUjggICAgICAgICAgICAgICAzMgorCitDIFRoaXMgcnVucyBvbiBQT1dFUjcgYW5kIGxhdGVyLCBidXQgaXMgZmFzdGVyIG9ubHkgb24gbGF0ZXIgQ1BVcy4KK0MgV2UgbWlnaHQgd2FudCB0byBpbmxpbmUgdGhpcywgY29uc2lkZXJpbmcgaXRzIHNtYWxsIGZvb3RwcmludC4KKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9pbnZlcnRfbGltYikKKwlzbGRpLglyNCwgcjMsIDEKKwluZWcJcjUsIHIzCisJZGl2ZGV1KAlyMywgcjUsIHIzKQorCWJlcS0JTCgxKQorCWJscgorTCgxKToJbGkJcjMsIC0xCisJYmxyCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvcDkvYWRkX25fc3ViX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L3A5L2FkZF9uX3N1Yl9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDI2YTAwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L3A5L2FkZF9uX3N1Yl9uLmFzbQpAQCAtMCwwICsxLDExMiBAQAorZG5sICBQb3dlclBDLTY0IG1wbl9hZGRfbl9zdWJfbiBvcHRpbWlzZWQgZm9yIFBPV0VSOS4KKworZG5sICBDb3B5cmlnaHQgMjAxOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCQkgICBjeWNsZXMvbGltYgorQyBQT1dFUjMvUFBDNjMwCQkgLQorQyBQT1dFUjQvUFBDOTcwCQkgLQorQyBQT1dFUjUJCSAtCitDIFBPV0VSNgkJIC0KK0MgUE9XRVI3CQkgLQorQyBQT1dFUjgJCSAtCitDIFBPV0VSOQkJIDIuMjUKKworCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgYXJwJywJYHIzJykKK2RlZmluZShgc3JwJywJYHI0JykKK2RlZmluZShgdXAnLAlgcjUnKQorZGVmaW5lKGB2cCcsCWByNicpCitkZWZpbmUoYG4nLAlgcjcnKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2FkZF9uX3N1Yl9uKQorCWNtcGRpCWNyNywgbiwgMgorCXN1YmZvCXIwLCByMCwgcjAJCUMgY2xlYXIgT1YKKwlybGRpY2wuCXI5LCBuLCAwLCA2MwkJQyBuICYgMQorCWJlcQljcjAsIEwoYngwKQorCitMKGJ4MSk6CWxkCXIxMCwgMCh1cCkKKwlsZAlyMTEsIDAodnApCisJYmxlCWNyNywgTCgxKQorCXNyZGkJcjcsIHI3LCAxCisJbXRjdHIJcjcKKwlsZAlyOCwgOCh1cCkKKwlsZAlyOSwgOCh2cCkKKwlhZGRleCgJcjAsIHIxMCwgcjExLCAwKQorCXN1YmZjCXIxMiwgcjExLCByMTAKKwlhZGRpCXVwLCB1cCwgLTgKKwlhZGRpCXZwLCB2cCwgLTgKKwliCUwobG8xKQorCitMKGJ4MCk6CWxkCXI4LCAwKHVwKQorCWxkCXI5LCAwKHZwKQorCWxkCXIxMCwgOCh1cCkKKwlsZAlyMTEsIDgodnApCisJYWRkZXgoCXIwLCByOCwgcjksIDApCisJc3ViZmMJcjEyLCByOSwgcjgKKwlhZGRpCWFycCwgYXJwLCA4CisJYWRkaQlzcnAsIHNycCwgOAorCWJsZQljcjcsIEwoZW5kKQorCWFkZGkJcjcsIHI3LCAtMQorCXNyZGkJcjcsIHI3LCAxCisJbXRjdHIJcjcKKworTCh0b3ApOglsZAlyOCwgMTYodXApCisJbGQJcjksIDE2KHZwKQorCXN0ZAlyMCwgLTgoYXJwKQorCXN0ZAlyMTIsIC04KHNycCkKKwlhZGRleCgJcjAsIHIxMCwgcjExLCAwKQorCXN1YmZlCXIxMiwgcjExLCByMTAKK0wobG8xKToJbGQJcjEwLCAyNCh1cCkKKwlsZAlyMTEsIDI0KHZwKQorCXN0ZAlyMCwgMChhcnApCisJc3RkCXIxMiwgMChzcnApCisJYWRkZXgoCXIwLCByOCwgcjksIDApCisJc3ViZmUJcjEyLCByOSwgcjgKKwlhZGRpCXVwLCB1cCwgMTYKKwlhZGRpCXZwLCB2cCwgMTYKKwlhZGRpCWFycCwgYXJwLCAxNgorCWFkZGkJc3JwLCBzcnAsIDE2CisJYmRueglMKHRvcCkKKworTChlbmQpOglzdGQJcjAsIC04KGFycCkKKwlzdGQJcjEyLCAtOChzcnApCitMKDEpOglhZGRleCgJcjAsIHIxMCwgcjExLCAwKQorCXN1YmZlCXIxMiwgcjExLCByMTAKKwlzdGQJcjAsIDAoYXJwKQorCXN0ZAlyMTIsIDAoc3JwKQorCXN1YmZlCXIzLCByMywgcjMKKwlhZGRleCgJcjMsIHIzLCByMywgMCkKKwlybGRpY2wJcjMsIHIzLCAxLCA2MgorCWJscgorRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvcDkvYWRkbXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L3A5L2FkZG11bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjQ5NjA2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L3A5L2FkZG11bF8xLmFzbQpAQCAtMCwwICsxLDEzMCBAQAorZG5sICBQb3dlcjkgbXBuX2FkZG11bF8xLgorCitkbmwgIENvcHlyaWdodCAyMDE3LCAyMDE4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICAgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgUE9XRVIzL1BQQzYzMAkJIC0KK0MgUE9XRVI0L1BQQzk3MAkJIC0KK0MgUE9XRVI1CQkgLQorQyBQT1dFUjYJCSAtCitDIFBPV0VSNwkJIC0KK0MgUE9XRVI4CQkgLQorQyBQT1dFUjkJCSAyLjUKKworQyBUT0RPCitDICAqIFNjaGVkdWxlIGZvciBQb3dlcjkgcGlwZWxpbmUuCitDICAqIFVucm9sbCA0eCBpZiB0aGF0IHByb3ZlcyBiZW5lZmljaWFsLgorQyAgKiBUaGlzIGlzIG1hcmdpbmFsbHkgZmFzdGVyIChidXQgbXVjaCBzbWFsbGVyKSB0aGFuIC4uL2FvcnNtdWxfMS5hc20uCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsIGByMycpCitkZWZpbmUoYHVwJywgYHI0JykKK2RlZmluZShgbicsICBgcjUnKQorZGVmaW5lKGB2MCcsIGByNicpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fYWRkbXVsXzEpCisJY21wZGkJY3I2LCBuLCAyCisJYWRkaQlyMCwgbiwgLTEJQyBGSVhNRTogcG9zdHBvbmUKKwlzcmRpCXIwLCByMCwgMQlDIEZJWE1FOiBwb3N0cG9uZQorCW10Y3RyCXIwCQlDIEZJWE1FOiBwb3N0cG9uZQorCXJsZGljbC4JcjAsIG4sIDAsNjMJQyByMCA9IG4gJiAzLCBzZXQgY3IwCisJYm5lCWNyMCwgTChiMSkKKworTChiMCk6CWxkCXIxMCwgMChycCkKKwlsZAlyMTIsIDAodXApCisJbGQJcjExLCA4KHJwKQorCWxkCXIwLCA4KHVwKQorCW1hZGRsZCgJcjksIHIxMiwgdjAsIHIxMCkKKwltYWRkaGR1KHI3LCByMTIsIHYwLCByMTApCisJYmxlCWNyNiwgTCgyKQorCWxkCXIxMCwgMTYocnApCisJbGQJcjEyLCAxNih1cCkKKwltYWRkbGQoCXI4LCByMCwgdjAsIHIxMSkKKwltYWRkaGR1KHI1LCByMCwgdjAsIHIxMSkKKwlhZGRpYwl1cCwgdXAsIDE2CisJYWRkaQlycCwgcnAsIC04CisJYglMKG1pZCkKKworTChiMSk6CWxkCXIxMSwgMChycCkKKwlsZAlyMCwgMCh1cCkKKwlibGUJY3I2LCBMKDEpCisJbGQJcjEwLCA4KHJwKQorCWxkCXIxMiwgOCh1cCkKKwltYWRkbGQoCXI4LCByMCwgdjAsIHIxMSkKKwltYWRkaGR1KHI1LCByMCwgdjAsIHIxMSkKKwlsZAlyMTEsIDE2KHJwKQorCWxkCXIwLCAxNih1cCkKKwltYWRkbGQoCXI5LCByMTIsIHYwLCByMTApCisJbWFkZGhkdShyNywgcjEyLCB2MCwgcjEwKQorCWFkZGljCXVwLCB1cCwgMjQKKwliZHoJTChlbmQpCisKKwlBTElHTigxNikKK0wodG9wKToJbGQJcjEwLCAyNChycCkKKwlsZAlyMTIsIDAodXApCisJc3RkCXI4LCAwKHJwKQorCWFkZGUJcjksIHI1LCByOQorCW1hZGRsZCgJcjgsIHIwLCB2MCwgcjExKQlDIFc6MCwyLDQKKwltYWRkaGR1KHI1LCByMCwgdjAsIHIxMSkJQyBXOjEsMyw1CitMKG1pZCk6CWxkCXIxMSwgMzIocnApCisJbGQJcjAsIDgodXApCisJc3RkCXI5LCA4KHJwKQorCWFkZGUJcjgsIHI3LCByOAorCW1hZGRsZCgJcjksIHIxMiwgdjAsIHIxMCkJQyBXOjEsMyw1CisJbWFkZGhkdShyNywgcjEyLCB2MCwgcjEwKQlDIFc6Miw0LDYKKwlhZGRpCXJwLCBycCwgMTYKKwlhZGRpCXVwLCB1cCwgMTYKKwliZG56CUwodG9wKQorCitMKGVuZCk6CXN0ZAlyOCwgMChycCkKKwltYWRkbGQoCXI4LCByMCwgdjAsIHIxMSkKKwlhZGRlCXI5LCByNSwgcjkKKwltYWRkaGR1KHI1LCByMCwgdjAsIHIxMSkKKwlzdGQJcjksIDgocnApCisJYWRkZQlyOCwgcjcsIHI4CisJc3RkCXI4LCAxNihycCkKKwlhZGR6ZQlyMywgcjUKKwlibHIKKworTCgyKToJbWFkZGxkKAlyOCwgcjAsIHYwLCByMTEpCisJbWFkZGhkdShyNSwgcjAsIHYwLCByMTEpCisJc3RkCXI5LCAwKHJwKQorCWFkZGMJcjgsIHI3LCByOAorCXN0ZAlyOCwgOChycCkKKwlhZGR6ZQlyMywgcjUKKwlibHIKKworTCgxKToJbWFkZGxkKAlyOCwgIHIwLCB2MCwgcjExKQorCXN0ZAlyOCwgMChycCkKKwltYWRkaGR1KHIzLCByMCwgdjAsIHIxMSkKKwlibHIKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9wOS9hZGRtdWxfMi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvcDkvYWRkbXVsXzIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkZDU5ZWEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvcDkvYWRkbXVsXzIuYXNtCkBAIC0wLDAgKzEsMTgyIEBACitkbmwgIFBvd2VyOSBtcG5fYWRkbXVsXzIuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqw7ZybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAxOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCitkbmwgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAorZG5sICB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworZG5sICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgIGN5Y2xlcy9saW1iCitDIHBvd2VyOTogICAgMS42MgorCitDIFNUQVRVUworQyAgKiBOb3Qgd3JpdHRlbiB3aXRoIGFueSBwb3dlcjkgcGlwZWxpbmUgdW5kZXJzdGFuZGluZy4KK0MgICogVGhlIDR4IHVucm9sbGluZyB3YXMgbm90IG1vdGl2YXRlZCBieSBhbnkgdGltaW5nIHRlc3RzLgorQyAgKiBObyBsb2NhbCBzY2hlZHVsaW5nIGZvciBwZXJmb3JtYW5jZSB0d2Vha2luZyBoYXMgYmVlbiBkb25lLgorQyAgKiBEZWNyZWFzZSBsb2FkIHNjaGVkdWxpbmchCisKK2RlZmluZShgcnAnLCBgcjMnKQorZGVmaW5lKGB1cCcsIGByNCcpCitkZWZpbmUoYG4nLCAgYHI1JykJCUMgTm90ZTogUmV1c2VkIGFzIHNjcmF0Y2gKK2RlZmluZShgdnAnLCBgcjYnKQkJQyBOb3RlOiBSZXVzZWQgZm9yIHYxCisKK2RlZmluZShgdjAnLCBgcjcnKQorZGVmaW5lKGB2MScsIGByNicpCisKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9hZGRtdWxfMikKKwlzdGQJcjI2LCAtNDgocjEpCisJc3RkCXIyNywgLTQwKHIxKQorCXN0ZAlyMjgsIC0zMihyMSkKKwlzdGQJcjI5LCAtMjQocjEpCisJc3RkCXIzMCwgLTE2KHIxKQorCXN0ZAlyMzEsIC04KHIxKQorCisJc3ViZmljCXIwLCByMSwgMAlDIGNsZWFyIENBCisJc3ViZm8JcjAsIHIwLCByMAlDIGNsZWFyIE9WIGFuZCByMAorCisJY21wZGkJY3I3LCBuLCA0CisKKwlsZAl2MCwgMCh2cCkKKwlsZAl2MSwgOCh2cCkKKworCXNyZGkJcjEwLCBuLCAyCisJbXRjdHIJcjEwCisKKwlybGRpY2wuCXI5LCBuLCAwLCA2MworCWJuZQljcjAsIEwoYngxKQorCitMKGJ4MCk6CXJsZGljbC4gcjksIG4sIDYzLCA2MworCisJbGQJcjI4LCAwKHJwKQorCWxkCXI4LCAwKHVwKQorCWxkCXIxMSwgOChycCkKKwlsZAlyOSwgOCh1cCkKKwltYWRkbGQoCXIyNiwgcjgsIHYwLCByMjgpCisJbWFkZGhkdShyMzEsIHI4LCB2MCwgcjI4KQorCWJsdAljcjcsIEwoMikKKwlsZAlyMjgsIDE2KHJwKQorCW11bGxkCXI1LCByOCwgdjEKKwltdWxoZHUJcjEwLCByOCwgdjEKKwlibmUJY3IwLCBMKGIxMCkKKworTChiMDApOglhZGRpCXVwLCB1cCwgLTgKKwlhZGRpCXJwLCBycCwgLTI0CisJYglMKGxvMCkKKworTChiMTApOglhZGRpCXVwLCB1cCwgOAorCWFkZGkJcnAsIHJwLCAtOAorCWIJTChsbzIpCisKK0woMik6CWFkZGkJcnAsIHJwLCAtOAorCW11bGxkCXI1LCByOCwgdjEKKwltdWxoZHUJcjEwLCByOCwgdjEKKwliCUwoY2oyKQorCitMKGJ4MSk6CXJsZGljbC4gcjksIG4sIDYzLCA2MworCisJbGQJcjI5LCAwKHJwKQorCWxkCXI5LCAwKHVwKQorCWxkCXIxMCwgOChycCkKKwlsZAlyOCwgOCh1cCkKKwltYWRkbGQoCXIyNywgcjksIHYwLCByMjkpCisJbWFkZGhkdShyMzAsIHI5LCB2MCwgcjI5KQorCWxkCXIyOSwgMTYocnApCisJbXVsbGQJcjEyLCByOSwgdjEKKwltdWxoZHUJcjExLCByOSwgdjEKKwlibmUJY3IwLCBMKGIxMSkKKworTChiMDEpOglhZGRpCXJwLCBycCwgLTE2CisJYglMKGxvMSkKK0woYjExKToJYWRkaQl1cCwgdXAsIDE2CisJYmx0CWNyNywgTChlbmQpCisKK0wodG9wKToJbGQJcjksIDAodXApCisJbWFkZGxkKAlyMjYsIHI4LCB2MCwgcjEwKQlDIDAgIDQgICAtPiBhZGRlCisJbWFkZGhkdShyMzEsIHI4LCB2MCwgcjEwKQlDIDEgIDUKKwlhZGRlCXIwLCByMjcsIHIwCQlDICAgIDcgMTEKKwlsZAlyMjgsIDI0KHJwKQorCXN0ZAlyMCwgMChycCkKKwltYWRkbGQoCXI1LCByOCwgdjEsIHIyOSkJQyAxICA1ICAgLT4gYWRkZXgKKwltYWRkaGR1KHIxMCwgcjgsIHYxLCByMjkpCUMgMiAgNgorCWFkZGV4KAlyMCwgcjEyLCByMzAsIDApCUMgICAgOCAxMgorTChsbzIpOglsZAlyOCwgOCh1cCkKKwltYWRkbGQoCXIyNywgcjksIHYwLCByMTEpCUMgMSAgNSAgIC0+IGFkZGUKKwltYWRkaGR1KHIzMCwgcjksIHYwLCByMTEpCUMgMiAgNgorCWFkZGUJcjAsIHIyNiwgcjAJCUMgICAgOCAxMgorCWxkCXIyOSwgMzIocnApCisJc3RkCXIwLCA4KHJwKQorCW1hZGRsZCgJcjEyLCByOSwgdjEsIHIyOCkJQyAyICA2ICAgLT4gYWRkZXgKKwltYWRkaGR1KHIxMSwgcjksIHYxLCByMjgpCUMgMyAgNworCWFkZGV4KAlyMCwgcjUsIHIzMSwgMCkJCUMgNSAgOSAxMworTChsbzEpOglsZAlyOSwgMTYodXApCisJbWFkZGxkKAlyMjYsIHI4LCB2MCwgcjEwKQlDIDIgIDYgICAtPiBhZGRlCisJbWFkZGhkdShyMzEsIHI4LCB2MCwgcjEwKQlDIDMgIDcKKwlhZGRlCXIwLCByMjcsIHIwCQlDICAgIDUgIDkgMTMKKwlsZAlyMjgsIDQwKHJwKQorCXN0ZAlyMCwgMTYocnApCisJbWFkZGxkKAlyNSwgcjgsIHYxLCByMjkpCUMgMyAgNyAgIC0+IGFkZGV4CisJbWFkZGhkdShyMTAsIHI4LCB2MSwgcjI5KQlDIDQgIDgKKwlhZGRleCgJcjAsIHIxMiwgcjMwLCAwKQlDICAgIDYgMTAKK0wobG8wKToJbGQJcjgsIDI0KHVwKQorCW1hZGRsZCgJcjI3LCByOSwgdjAsIHIxMSkJQyAzICA3ICAgLT4gYWRkZQorCW1hZGRoZHUocjMwLCByOSwgdjAsIHIxMSkJQyA0ICA4CisJYWRkZQlyMCwgcjI2LCByMAkJQyAgICA2IDEwCisJbGQJcjI5LCA0OChycCkKKwlzdGQJcjAsIDI0KHJwKQorCW1hZGRsZCgJcjEyLCByOSwgdjEsIHIyOCkJQyA0ICA4ICAgLT4gYWRkZXgKKwltYWRkaGR1KHIxMSwgcjksIHYxLCByMjgpCUMgNSAgOQorCWFkZGV4KAlyMCwgcjUsIHIzMSwgMCkJCUMgICAgNyAxMQorCWFkZGkJdXAsIHVwLCAzMgorCWFkZGkJcnAsIHJwLCAzMgorCWJkbnoJTCh0b3ApCisKK0woZW5kKToJbGQJcjksIDAodXApCisJbWFkZGxkKAlyMjYsIHI4LCB2MCwgcjEwKQlDIDAgIDQKKwltYWRkaGR1KHIzMSwgcjgsIHYwLCByMTApCUMgMSAgNQorCWFkZGUJcjAsIHIyNywgcjAJCUMgICAgNyAxMQorCXN0ZAlyMCwgMChycCkJCUMJCS00CisJbWFkZGxkKAlyNSwgcjgsIHYxLCByMjkpCUMgMSAgNQorCW1hZGRoZHUocjEwLCByOCwgdjEsIHIyOSkJQyAyICA2CisJYWRkZXgoCXIwLCByMTIsIHIzMCwgMCkJQyAgICA4IDEyCitMKGNqMik6CW1hZGRsZCgJcjI3LCByOSwgdjAsIHIxMSkJQyAxICA1CQktMgorCW1hZGRoZHUocjMwLCByOSwgdjAsIHIxMSkJQyAyICA2CQktMQorCWFkZGUJcjAsIHIyNiwgcjAJCUMgICAgOCAxMgktMworCXN0ZAlyMCwgOChycCkJCUMJCS0zCisJbXVsbGQJcjEyLCByOSwgdjEJCUMgMiAgNgkJLTEKKwltdWxoZHUJcjExLCByOSwgdjEJCUMgMyAgNwkJMCA9IHJldHVybiBsaW1iCisJYWRkZXgoCXIwLCByNSwgcjMxLCAwKQkJQyA1ICA5IDEzCisJYWRkZQlyMCwgcjI3LCByMAkJQyAgICA1ICA5IDEzCS0yCisJc3RkCXIwLCAxNihycCkJCUMJCS0yCisJYWRkZXgoCXIwLCByMTIsIHIzMCwgMCkJQyAgICA2IDEwCS0xCisJYWRkZQlyMCwgcjAsIHIxMAkJQwkJLTEKKwlzdGQJcjAsIDI0KHJwKQkJQwkJLTEKKwlsaQlyNCwgMAorCWFkZHplCXIzLCByMTEKKwlhZGRleCgJcjMsIHIzLCByNCwgMCkKKworTChyZXQpOglsZAlyMjYsIC00OChyMSkKKwlsZAlyMjcsIC00MChyMSkKKwlsZAlyMjgsIC0zMihyMSkKKwlsZAlyMjksIC0yNChyMSkKKwlsZAlyMzAsIC0xNihyMSkKKwlsZAlyMzEsIC04KHIxKQorCWJscgorRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvcDkvYW9yc211bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9wOS9hb3JzbXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0Y2EzYTgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvcDkvYW9yc211bF8xLmFzbQpAQCAtMCwwICsxLDE3OSBAQAorZG5sICBQT1dFUjkgbXBuX2FkZG11bF8xIGFuZCBtcG5fc3VibXVsXzEuCisKK2RubCAgQ29weXJpZ2h0IDIwMTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgICAgICAgICAgICBtcG5fYWRkbXVsXzEgICAgbXBuX3N1Ym11bF8xCitDICAgICAgICAgICAgICAgICAgIGN5Y2xlcy9saW1iICAgICBjeWNsZXMvbGltYgorQyBQT1dFUjMvUFBDNjMwCQkgLQkJIC0KK0MgUE9XRVI0L1BQQzk3MAkJIC0JCSAtCitDIFBPV0VSNQkJIC0JCSAtCitDIFBPV0VSNgkJIC0JCSAtCitDIFBPV0VSNwkJIC0JCSAtCitDIFBPV0VSOAkJIC0JCSAtCitDIFBPV0VSOQkJIDIuNjMJCSAyLjYzCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsIGByMycpCitkZWZpbmUoYHVwJywgYHI0JykKK2RlZmluZShgbicsICBgcjUnKQorZGVmaW5lKGB2MCcsIGByNicpCisKKworaWZkZWYoYE9QRVJBVElPTl9hZGRtdWxfMScsYAorICBkZWZpbmUoYEFERFNVQkMnLAlhZGRlKQorICBkZWZpbmUoYEFERFNVQicsCWFkZGMpCisgIGRlZmluZShgZnVuYycsCW1wbl9hZGRtdWxfMSkKKyAgZGVmaW5lKGBBTScsCQlgJDEnKQorICBkZWZpbmUoYFNNJywJCWAnKQorJykKK2lmZGVmKGBPUEVSQVRJT05fc3VibXVsXzEnLGAKKyAgZGVmaW5lKGBBRERTVUJDJywJc3ViZmUpCisgIGRlZmluZShgQUREU1VCJywJc3ViZmMpCisgIGRlZmluZShgZnVuYycsCW1wbl9zdWJtdWxfMSkKKyAgZGVmaW5lKGBBTScsCQlgJykKKyAgZGVmaW5lKGBTTScsCQlgJDEnKQorJykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fYWRkbXVsXzEgbXBuX3N1Ym11bF8xKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUoZnVuYykKKwljbXBkaQljcjcsIG4sIDMKKwlzcmRpCXIxMCwgbiwgMgorCW10Y3RyCXIxMAorCXJsZGljbC4JcjksIG4sIDAsIDYzCisJbGQJcjExLCAwKHVwKQorCWJuZQljcjAsIEwoYngxKQorCitMKGJ4MCk6CXJsZGljbC4gcjksIG4sIDYzLCA2MworQU0oYAlzdWJmemVvCXIxMiwgbgkJJykJQyBvdiA9IDAsIGNhID0gMAorQU0oYAlsaQlyMTIsIDAJCScpCitTTShgCXN1YmZjbwlyMTIsIHIxMiwgcjEyCScpCUMgcjEyID0gMCwgb3YgPSAwLCBjYSA9IDEKKwlsZAlyOSwgOCh1cCkKKwltdWxsZAlyMCwgcjExLCB2MAorCW11bGhkdQlyNSwgcjExLCB2MAorCWJsdAljcjcsIEwoMikKKwlsZAlyOCwgMTYodXApCisJYm5lCWNyMCwgTChiMTApCisKK0woYjAwKToJYWRkaQlycCwgcnAsIC0yNAorCWIJTChsbzApCitMKGIxMCk6CWFkZGkJcnAsIHJwLCAtOAorCWFkZGkJdXAsIHVwLCAxNgorCWIJTChsbzIpCisKK0woMik6CWFkZGkJcnAsIHJwLCAtOAorCWIJTChjajIpCisKK0woYngxKToJcmxkaWNsLiByOSwgbiwgNjMsIDYzCitBTShgCXN1YmZ6ZW8JcjUsIG4JCScpCUMgb3YgPSAwLCBjYSA9IDAKK0FNKGAJbGkJcjUsIDAJCScpCitTTShgCXN1YmZjbwlyNSwgcjUsIHI1CScpCUMgcjUgPSAwLCBvdiA9IDAsIGNhID0gMQorCWJsdAljcjcsIEwoMSkKKwlsZAlyOCwgOCh1cCkKKwltdWxsZAlyNywgcjExLCB2MAorCW11bGhkdQlyMTIsIHIxMSwgdjAKKwlsZAlyOSwgMTYodXApCisJYm5lCWNyMCwgTChiMTEpCisKK0woYjAxKToJYWRkaQlycCwgcnAsIC0xNgorCWFkZGkJdXAsIHVwLCA4CisJYglMKGxvMSkKKworTCgxKToJbXVsbGQJcjcsIHIxMSwgdjAKKwltdWxoZHUJcjEyLCByMTEsIHYwCisJbGQJcjExLCAwKHJwKQorCUFERFNVQglyMTAsIHI3LCByMTEKKwlzdGQJcjEwLCAwKHJwKQorQU0oYAlhZGR6ZQlyMywgcjEyCQknKQorU00oYAlzdWJmZQlyMCwgcjAsIHIwCScpCitTTShgCXN1YglyMywgcjEyLCByMAknKQorCWJscgorCitMKGIxMSk6CWFkZGkJdXAsIHVwLCAyNAorCWJsZQljcjcsIEwoZW5kKQorCisJQUxJR04oMTYpCitMKHRvcCk6CWxkCXIxMSwgMChycCkKKwltdWxsZAlyMCwgcjgsIHYwCisJYWRkZXgoCXI3LCByNywgcjUsIDApCisJbXVsaGR1CXI1LCByOCwgdjAKKwlsZAlyOCwgMCh1cCkKKwlBRERTVUJDCXIxMCwgcjcsIHIxMQorCXN0ZAlyMTAsIDAocnApCitMKGxvMik6CWxkCXIxMSwgOChycCkKKwltdWxsZAlyNywgcjksIHYwCisJYWRkZXgoCXIwLCByMCwgcjEyLCAwKQorCW11bGhkdQlyMTIsIHI5LCB2MAorCWxkCXI5LCA4KHVwKQorCUFERFNVQkMJcjEwLCByMCwgcjExCisJc3RkCXIxMCwgOChycCkKK0wobG8xKToJbGQJcjExLCAxNihycCkKKwltdWxsZAlyMCwgcjgsIHYwCisJYWRkZXgoCXI3LCByNywgcjUsIDApCisJbXVsaGR1CXI1LCByOCwgdjAKKwlsZAlyOCwgMTYodXApCisJQUREU1VCQwlyMTAsIHI3LCByMTEKKwlzdGQJcjEwLCAxNihycCkKK0wobG8wKToJbGQJcjExLCAyNChycCkKKwltdWxsZAlyNywgcjksIHYwCisJYWRkZXgoCXIwLCByMCwgcjEyLCAwKQorCW11bGhkdQlyMTIsIHI5LCB2MAorCWxkCXI5LCAyNCh1cCkKKwlBRERTVUJDCXIxMCwgcjAsIHIxMQorCXN0ZAlyMTAsIDI0KHJwKQorCWFkZGkJdXAsIHVwLCAzMgorCWFkZGkJcnAsIHJwLCAzMgorCWJkbnoJTCh0b3ApCisKK0woZW5kKToJbGQJcjExLCAwKHJwKQorCW11bGxkCXIwLCByOCwgdjAKKwlhZGRleCgJcjcsIHI3LCByNSwgMCkKKwltdWxoZHUJcjUsIHI4LCB2MAorCUFERFNVQkMJcjEwLCByNywgcjExCisJc3RkCXIxMCwgMChycCkKK0woY2oyKToJbGQJcjExLCA4KHJwKQorCW11bGxkCXI3LCByOSwgdjAKKwlhZGRleCgJcjAsIHIwLCByMTIsIDApCisJbXVsaGR1CXIxMiwgcjksIHYwCisJQUREU1VCQwlyMTAsIHIwLCByMTEKKwlzdGQJcjEwLCA4KHJwKQorCWxkCXIxMSwgMTYocnApCisJYWRkZXgoCXI3LCByNywgcjUsIDApCisJQUREU1VCQwlyMTAsIHI3LCByMTEKKwlzdGQJcjEwLCAxNihycCkKKwlsaQlyMCwgMAorCWFkZGV4KAlyMywgcjEyLCByMCwgMCkKK0FNKGAJYWRkemUJcjMsIHIzCQknKQorU00oYAlzdWJmZQlyMCwgcjAsIHIwCScpCitTTShgCXN1YglyMywgcjMsIHIwCScpCisJYmxyCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvcDkvZ2NkXzExLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9wOS9nY2RfMTEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkYzk4MmQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvcDkvZ2NkXzExLmFzbQpAQCAtMCwwICsxLDY0IEBACitkbmwgIFBvd2VyUEMtNjQgbXBuX2djZF8xMS4KKworZG5sICBDb3B5cmlnaHQgMjAwMC0yMDAyLCAyMDA1LCAyMDA5LCAyMDExLTIwMTMsIDIwMTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorZG5sICBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkJICAgIGN5Y2xlcy9iaXQgKGFwcHJveCkKK0MgUE9XRVIzL1BQQzYzMAkJIC0KK0MgUE9XRVI0L1BQQzk3MAkJIC0KK0MgUE9XRVI1CQkgLQorQyBQT1dFUjYJCSAtCitDIFBPV0VSNwkJIC0KK0MgUE9XRVI4CQkgLQorQyBQT1dFUjkJCSA1Ljc1CitDIE51bWJlcnMgbWVhc3VyZWQgd2l0aDogc3BlZWQgLUNEIC1zMTYtNjQgLXQ0OCBtcG5fZ2NkXzEKKworZGVmaW5lKGB1MCcsICAgIGByMycpCitkZWZpbmUoYHYwJywgICAgYHI0JykKKworZGVmaW5lKGBjbnQnLCAgYHI5JylkbmwKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9nY2RfMTEpCisJYglMKG9kZCkKKworCUFMSUdOKDE2KQorTCh0b3ApOglpc2VsCXYwLCB1MCwgdjAsIDI5CQlDIHYgPSBtaW4odSx2KQorCWlzZWwJdTAsIHIxMCwgcjExLCAyOQlDIHUgPSB8diAtIHV8CisJc3JkCXUwLCB1MCwgY250CitMKG9kZCk6CXN1YmYJcjEwLCB1MCwgdjAJCUMgcjEwID0gdiAtIHUKKwlzdWJmCXIxMSwgdjAsIHUwCQlDIHIxMSA9IHUgLSB2CisJY21wbGQJY3I3LCB2MCwgdTAKKwljbnR0emQJY250LCByMTAKKwlibmUJY3I3LCBMKHRvcCkKKworTChlbmQpOglibHIKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9wOS9nY2RfMjIuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L3A5L2djZF8yMi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJkMTFiMAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9wOS9nY2RfMjIuYXNtCkBAIC0wLDAgKzEsMTQzIEBACitkbmwgIFBvd2VyUEMtNjQgbXBuX2djZF8yMiBvcHRpbWlzZWQgZm9yIFBPV0VSOS4KKworZG5sICBDb3B5cmlnaHQgMjAwMC0yMDAyLCAyMDA1LCAyMDA5LCAyMDExLTIwMTMsIDIwMTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorZG5sICBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkJICAgIGN5Y2xlcy9iaXQgKGFwcHJveCkKK0MgUE9XRVIzL1BQQzYzMAkJIC0KK0MgUE9XRVI0L1BQQzk3MAkJIC0KK0MgUE9XRVI1CQkgLQorQyBQT1dFUjYJCSAtCitDIFBPV0VSNwkJIC0KK0MgUE9XRVI4CQkgLQorQyBQT1dFUjkJCSA5LjU4CisKK0MgV2UgZGVmaW5lIFNMT1cgaWYgdGhpcyB0YXJnZXQgdXNlcyBhIHNsb3cgc3RydWN0IHJldHVybiBtZWNoYW5pc20sIHdpdGgKK0MgcjMgYXMgYW4gaW1wbGljaXQgcGFyYW1ldGVyIGZvciB0aGUgc3RydWN0IHBvaW50ZXIuCit1bmRlZmluZShgU0xPVycpZG5sCitpZmRlZihgQUlYJyxgZGVmaW5lKGBTTE9XJyxgZHVlIHRvIEFJWCcpJyxgCisgIGlmZGVmKGBEQVJXSU4nLCxgCisgICAgaWZkZWYoYEVMRnYyX0FCSScsLGBkZWZpbmUoYFNMT1cnLGBkdWUgdG8gRUxGdjEnKScpZG5sCisgICcpCisnKQorCitpZmRlZihgU0xPVycsYAorZGVmaW5lKGBJRlNMT1cnLCBgJDEnKQorZGVmaW5lKGB1MScsICAgIGByNCcpCitkZWZpbmUoYHUwJywgICAgYHI1JykKK2RlZmluZShgdjEnLCAgICBgcjYnKQorZGVmaW5lKGB2MCcsICAgIGByNycpCisnLGAKK2RlZmluZShgSUZTTE9XJywgYCcpCitkZWZpbmUoYHUxJywgICAgYHIzJykKK2RlZmluZShgdTAnLCAgICBgcjQnKQorZGVmaW5lKGB2MScsICAgIGByNScpCitkZWZpbmUoYHYwJywgICAgYHI2JykKKycpCisKK2RlZmluZShgdG1wJywgICBgcjAnKQorZGVmaW5lKGB0MCcsICAgIGByOCcpCitkZWZpbmUoYHQxJywgICAgYHI5JykKK2RlZmluZShgczAnLCAgICBgcjEwJykKK2RlZmluZShgczEnLCAgICBgcjExJykKK2RlZmluZShgY250JywgICBgcjEyJykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9nY2RfMjIpCisJY21wbGQJY3I3LCB2MCwgdTAKK0wodG9wKToJc3ViZmMJdDAsIHYwLCB1MAkJQyAwIDEyCisJYmVxCWNyNywgTChsb3d6KQorCXN1YmZlCXQxLCB2MSwgdTEJCUMgMiAxNAorCXN1YmZlLgl0bXAsIHRtcCwgdG1wCQlDIDQJc2V0IGNyMCBmcm9tIHRoZSBjYXJyeSBiaXQKKwlzdWJmYwlzMCwgdTAsIHYwCQlDIDAKKwlzdWJmZQlzMSwgdTEsIHYxCQlDIDIKKworTChiY2spOgljbnR0emQJY250LCB0MAkJCUMgMgorCXN1YmZpYwl0bXAsIGNudCwgNjQJCUMgNAorCisJaXNlbAl2MCwgdjAsIHUwLCAyCQlDIDYJdXNlIGNvbmRpdGlvbiBzZXQgYnkgc3ViZmUKKwlpc2VsCXUwLCB0MCwgczAsIDIJCUMgNgorCWlzZWwJdjEsIHYxLCB1MSwgMgkJQyA2CisJaXNlbAl1MSwgdDEsIHMxLCAyCQlDIDYKKworCXNyZAl1MCwgdTAsIGNudAkJQyA4CisJc2xkCXRtcCwgdTEsIHRtcAkJQyA4CisJc3JkCXUxLCB1MSwgY250CQlDIDgKKwlvcgl1MCwgdTAsIHRtcAkJQyAxMAorCisJb3IuCXIwLCB1MSwgdjEJCUMgMTAKKwljbXBsZAljcjcsIHYwLCB1MAorCWJuZQlMKHRvcCkKKworCisJYglMKG9kZCkKKwlBTElHTigxNikKK0wodG9wMSk6aXNlbAl2MCwgdTAsIHYwLCAyOQkJQyB2ID0gbWluKHUsdikKKwlpc2VsCXUwLCByMTAsIHIxMSwgMjkJQyB1ID0gfHUgLSB2fAorCXNyZAl1MCwgdTAsIGNudAorTChvZGQpOglzdWJmCXIxMCwgdTAsIHYwCQlDIHIxMCA9IHYgLSB1CisJc3ViZglyMTEsIHYwLCB1MAkJQyByMTEgPSB1IC0gdgorCWNtcGxkCWNyNywgdjAsIHUwCisJY250dHpkCWNudCwgcjEwCisJYm5lCWNyNywgTCh0b3AxKQorCitpZmRlZihgU0xPVycsYAorCXN0ZAl2MCwgMChyMykKKwlzdGQJcjEwLCA4KHIzKQorJyxgCisJbXIJcjMsIHYwCisJbGkJcjQsIDAKKycpCisJYmxyCisKKworTChsb3d6KTpDIFdlIGNvbWUgaGVyZSB3aGVuIHYwIC0gdTAgPSAwCisJQyAxLiBJZiB2MSAtIHUxID0gMCwgdGhlbiBnY2QgaXMgdSA9IHYuCisJQyAyLiBFbHNlIGNvbXB1dGUgZ2NkXzIxKHt2MSx2MH0sIHx1MS12MXwpCisJc3ViZmMuCXQwLCB2MSwgdTEJCUMgMiA4CisJYmVxCUwoZW5kKQorCWxpCXQxLCAwCisJc3ViZmUuCXRtcCwgdG1wLCB0bXAJCUMgNAlzZXQgY3IwIGZyb20gdGhlIGNhcnJ5IGJpdAorCXN1YmYJczAsIHUxLCB2MQkJQyAyCisJbGkJczEsIDAKKwliCUwoYmNrKQorCitMKGVuZCk6CitpZmRlZihgU0xPVycsYAorCXN0ZAl2MCwgMChyMykKKwlzdGQJdjEsIDgocjMpCisJYmxyCisnLGAKKwltcglyMywgdjAKKwltcglyNCwgdjEKKwlibHIKKycpCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvcDkvZ21wLW1wYXJhbS5oIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L3A5L2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjUwZGVmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L3A5L2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDI1MyBAQAorLyogUE9XRVI5IGdtcC1tcGFyYW0uaCAtLSBDb21waWxlci9tYWNoaW5lIHBhcmFtZXRlciBoZWFkZXIgZmlsZS4KKworQ29weXJpZ2h0IDIwMTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNkZWZpbmUgR01QX0xJTUJfQklUUyA2NAorI2RlZmluZSBHTVBfTElNQl9CWVRFUyA4CisKKy8qIDIyMDBNSHogUE9XRVI5ICovCisvKiBGRlQgdHVuaW5nIGxpbWl0ID0gMjIxLDI0NSw4MzggKi8KKy8qIEdlbmVyYXRlZCBieSB0dW5ldXAuYywgMjAxOS0xMC0yOSwgZ2NjIDguMyAqLworCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgOAorI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNQorI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAgNworI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICAgICA0NAorI2RlZmluZSBQUkVJTlZfTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAxMQorI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBESVZfUVJfMU5fUEkxX01FVEhPRCAgICAgICAgICAgICAgICAgMiAgLyogMTkuMjglIGZhc3RlciB0aGFuIDEgKi8KKyNkZWZpbmUgRElWX1FSXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgIDMKKyNkZWZpbmUgRElWX1FSXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgIDIKKyNkZWZpbmUgRElWX1FSXzJfUEkyX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRElWRVhBQ1RfMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAobmF0aXZlKSAqLworI2RlZmluZSBCTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgICAgICAzMworCisjZGVmaW5lIERJVl8xX1ZTX01VTF8xX1BFUkNFTlQgICAgICAgICAgICAgMzY1CisKKyNkZWZpbmUgTVVMX1RPT00yMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMzQKKyNkZWZpbmUgTVVMX1RPT00zM19USFJFU0hPTEQgICAgICAgICAgICAgICAxMDkKKyNkZWZpbmUgTVVMX1RPT000NF9USFJFU0hPTEQgICAgICAgICAgICAgICA0NTgKKyNkZWZpbmUgTVVMX1RPT002SF9USFJFU0hPTEQgICAgICAgICAgICAgICA1MTcKKyNkZWZpbmUgTVVMX1RPT004SF9USFJFU0hPTEQgICAgICAgICAgICAgICA2MDgKKworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT000M19USFJFU0hPTEQgICAgIDExMworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT001M19USFJFU0hPTEQgICAgIDI5MgorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT001M19USFJFU0hPTEQgICAgIDIwNAorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT002M19USFJFU0hPTEQgICAgIDIxMQorI2RlZmluZSBNVUxfVE9PTTQzX1RPX1RPT001NF9USFJFU0hPTEQgICAgIDE3OAorCisjZGVmaW5lIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNDYKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNTgKKyNkZWZpbmUgU1FSX1RPT000X1RIUkVTSE9MRCAgICAgICAgICAgICAgICA2NzQKKyNkZWZpbmUgU1FSX1RPT002X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBTUVJfVE9PTThfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDg5OAorCisjZGVmaW5lIE1VTE1JRF9UT09NNDJfVEhSRVNIT0xEICAgICAgICAgICAgIDcwCisKKyNkZWZpbmUgTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgU1FSTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjUKKworI2RlZmluZSBNVUxfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDQwNCAgLyogayA9IDUgKi8KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDQwNCwgNX0sIHsgICAgIDIzLCA2fSwgeyAgICAgMTIsIDV9LCB7ICAgICAyNSwgNn0sIFwKKyAgICB7ICAgICAxMywgNX0sIHsgICAgIDI3LCA2fSwgeyAgICAgMjcsIDd9LCB7ICAgICAxNCwgNn0sIFwKKyAgICB7ICAgICAyOSwgN30sIHsgICAgIDE1LCA2fSwgeyAgICAgMzEsIDd9LCB7ICAgICAyNSwgOH0sIFwKKyAgICB7ICAgICAxMywgN30sIHsgICAgIDI4LCA4fSwgeyAgICAgMTUsIDd9LCB7ICAgICAzMiwgOH0sIFwKKyAgICB7ICAgICAxNywgN30sIHsgICAgIDM1LCA4fSwgeyAgICAgMjcsIDl9LCB7ICAgICAxNSwgOH0sIFwKKyAgICB7ICAgICAzNSwgOX0sIHsgICAgIDE5LCA4fSwgeyAgICAgMzksIDl9LCB7ICAgICAyMywgOH0sIFwKKyAgICB7ICAgICA0NywgOX0sIHsgICAgIDI3LDEwfSwgeyAgICAgMTUsIDl9LCB7ICAgICAzMSwgOH0sIFwKKyAgICB7ICAgICA2MywgOX0sIHsgICAgIDM1LCA4fSwgeyAgICAgNzEsIDl9LCB7ICAgICAzOSwxMH0sIFwKKyAgICB7ICAgICAyMywgOX0sIHsgICAgIDUxLDExfSwgeyAgICAgMTUsMTB9LCB7ICAgICAzMSwgOX0sIFwKKyAgICB7ICAgICA3MSwxMH0sIHsgICAgIDM5LCA5fSwgeyAgICAgODMsMTB9LCB7ICAgICA0NywgOX0sIFwKKyAgICB7ICAgICA5NSwxMH0sIHsgICAgIDU1LDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA3OSwxMX0sIFwKKyAgICB7ICAgICA0NywxMH0sIHsgICAgIDk1LDEyfSwgeyAgICAgMzEsMTF9LCB7ICAgICA2MywxMH0sIFwKKyAgICB7ICAgIDEzNSwxMX0sIHsgICAgIDc5LDEwfSwgeyAgICAxNTksMTF9LCB7ICAgICA5NSwxMn0sIFwKKyAgICB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgeyAgICAyNTUsIDl9LCB7ICAgIDUxMSwxMX0sIFwKKyAgICB7ICAgIDE0MywxMH0sIHsgICAgMjg3LCA5fSwgeyAgICA1NzUsMTB9LCB7ICAgIDMwMywxMX0sIFwKKyAgICB7ICAgIDE1OSwxMn0sIHsgICAgIDk1LDExfSwgeyAgICAxOTEsMTN9LCB7ICAgICA2MywxMn0sIFwKKyAgICB7ICAgIDEyNywxMX0sIHsgICAgMjU1LDEwfSwgeyAgICA1MTEsMTF9LCB7ICAgIDI3MSwxMH0sIFwKKyAgICB7ICAgIDU0MywxMX0sIHsgICAgMjg3LDEwfSwgeyAgICA1NzUsMTF9LCB7ICAgIDMwMywxMn0sIFwKKyAgICB7ICAgIDE1OSwxMX0sIHsgICAgMzE5LDEwfSwgeyAgICA2MzksMTF9LCB7ICAgIDMzNSwxMH0sIFwKKyAgICB7ICAgIDY3MSwxMX0sIHsgICAgMzUxLDEwfSwgeyAgICA3MDMsMTF9LCB7ICAgIDM2NywxMH0sIFwKKyAgICB7ICAgIDczNSwxMn0sIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTB9LCB7ICAgIDc2NywxMX0sIFwKKyAgICB7ICAgIDQxNSwxMH0sIHsgICAgODMxLDEyfSwgeyAgICAyMjMsMTF9LCB7ICAgIDQ0NywxMH0sIFwKKyAgICB7ICAgIDg5NSwxMX0sIHsgICAgNDc5LDEzfSwgeyAgICAxMjcsMTJ9LCB7ICAgIDI1NSwxMX0sIFwKKyAgICB7ICAgIDUxMSwxMH0sIHsgICAxMDIzLDExfSwgeyAgICA1NDMsMTJ9LCB7ICAgIDI4NywxMX0sIFwKKyAgICB7ICAgIDU3NSwxMH0sIHsgICAxMTUxLDExfSwgeyAgICA2MDcsMTJ9LCB7ICAgIDMxOSwxMX0sIFwKKyAgICB7ICAgIDYzOSwxMH0sIHsgICAxMjc5LDExfSwgeyAgICA2NzEsMTJ9LCB7ICAgIDM1MSwxMX0sIFwKKyAgICB7ICAgIDcwMywxMH0sIHsgICAxNDA3LDExfSwgeyAgICA3MzUsMTN9LCB7ICAgIDE5MSwxMn0sIFwKKyAgICB7ICAgIDM4MywxMX0sIHsgICAgNzY3LDEwfSwgeyAgIDE1MzUsMTF9LCB7ICAgIDc5OSwxMn0sIFwKKyAgICB7ICAgIDQxNSwxMX0sIHsgICAgODMxLDEwfSwgeyAgIDE2NjMsMTF9LCB7ICAgIDg2MywxMn0sIFwKKyAgICB7ICAgIDQ0NywxMX0sIHsgICAgODk1LDEyfSwgeyAgICA0NzksMTR9LCB7ICAgIDEyNywxM30sIFwKKyAgICB7ICAgIDI1NSwxMn0sIHsgICAgNTExLDExfSwgeyAgIDEwMjMsMTJ9LCB7ICAgIDU0MywxMX0sIFwKKyAgICB7ICAgMTA4NywxMn0sIHsgICAgNTc1LDExfSwgeyAgIDExNTEsMTJ9LCB7ICAgIDYwNywxM30sIFwKKyAgICB7ICAgIDMxOSwxMn0sIHsgICAgNjM5LDExfSwgeyAgIDEyNzksMTJ9LCB7ICAgIDY3MSwxMX0sIFwKKyAgICB7ICAgMTM0MywxMn0sIHsgICAgNzAzLDExfSwgeyAgIDE0MDcsMTJ9LCB7ICAgIDczNSwxMX0sIFwKKyAgICB7ICAgMTQ3MSwxM30sIHsgICAgMzgzLDEyfSwgeyAgICA3NjcsMTF9LCB7ICAgMTUzNSwxMn0sIFwKKyAgICB7ICAgIDc5OSwxMX0sIHsgICAxNTk5LDEyfSwgeyAgICA4MzEsMTF9LCB7ICAgMTY2MywxM30sIFwKKyAgICB7ICAgIDQ0NywxMn0sIHsgICAgODk1LDExfSwgeyAgIDE3OTEsMTJ9LCB7ICAgIDk1OSwxNH0sIFwKKyAgICB7ICAgIDI1NSwxM30sIHsgICAgNTExLDEyfSwgeyAgIDEwODcsMTF9LCB7ICAgMjE3NSwxM30sIFwKKyAgICB7ICAgIDU3NSwxMn0sIHsgICAxMjE1LDEzfSwgeyAgICA2MzksMTJ9LCB7ICAgMTM0MywxM30sIFwKKyAgICB7ICAgIDcwMywxMn0sIHsgICAxNDcxLDE0fSwgeyAgICAzODMsMTN9LCB7ICAgIDc2NywxMn0sIFwKKyAgICB7ICAgMTU5OSwxM30sIHsgICAgODMxLDEyfSwgeyAgIDE3MjcsMTN9LCB7ICAgIDg5NSwxMX0sIFwKKyAgICB7ICAgMzU4MywxMn0sIHsgICAxOTE5LDE1fSwgeyAgICAyNTUsMTR9LCB7ICAgIDUxMSwxM30sIFwKKyAgICB7ICAgMTA4NywxMn0sIHsgICAyMTc1LDEzfSwgeyAgIDEyMTUsMTR9LCB7ICAgIDYzOSwxM30sIFwKKyAgICB7ICAgMTM0MywxMn0sIHsgICAyNjg3LDEzfSwgeyAgIDE0NzEsMTR9LCB7ICAgIDc2NywxM30sIFwKKyAgICB7ICAgMTU5OSwxMn0sIHsgICAzMTk5LDEzfSwgeyAgIDE3MjcsMTR9LCB7ICAgIDg5NSwxM30sIFwKKyAgICB7ICAgMTkxOSwxNX0sIHsgICAgNTExLDE0fSwgeyAgIDEwMjMsMTN9LCB7ICAgMjE3NSwxNH0sIFwKKyAgICB7ICAgMTE1MSwxM30sIHsgICAyNDMxLDEyfSwgeyAgIDQ4NjMsMTR9LCB7ICAgMTI3OSwxM30sIFwKKyAgICB7ICAgMjY4NywxNH0sIHsgICAxNDA3LDEzfSwgeyAgIDI5NDMsMTV9LCB7ICAgIDc2NywxNH0sIFwKKyAgICB7ICAgMTUzNSwxM30sIHsgICAzMTk5LDE0fSwgeyAgIDE2NjMsMTN9LCB7ICAgMzQ1NSwxMn0sIFwKKyAgICB7ICAgNjkxMSwxNH0sIHsgICAxOTE5LDE2fSwgeyAgICA1MTEsMTV9LCB7ICAgMTAyMywxNH0sIFwKKyAgICB7ICAgMjE3NSwxM30sIHsgICA0NDc5LDE0fSwgeyAgIDI0MzEsMTN9LCB7ICAgNDg2MywxNX0sIFwKKyAgICB7ICAgMTI3OSwxNH0sIHsgICAyOTQzLDEzfSwgeyAgIDU4ODcsMTV9LCB7ICAgMTUzNSwxNH0sIFwKKyAgICB7ICAgMzQ1NSwxM30sIHsgICA2OTExLDE1fSwgeyAgIDE3OTEsMTR9LCB7ICAgMzgzOSwxM30sIFwKKyAgICB7ICAgNzY3OSwxNn0sIHsgICAxMDIzLDE1fSwgeyAgIDIwNDcsMTR9LCB7ICAgNDM1MSwxNX0sIFwKKyAgICB7ICAgMjMwMywxNH0sIHsgICA0ODYzLDE1fSwgeyAgIDI4MTUsMTR9LCB7ICAgNTg4NywxNn0sIFwKKyAgICB7ICAgMTUzNSwxNX0sIHsgICAzMzI3LDE0fSwgeyAgIDY5MTEsMTV9LCB7ICAgMzgzOSwxNH0sIFwKKyAgICB7ICAgNzY3OSwxN30sIHsgICAxMDIzLDE2fSwgeyAgIDIwNDcsMTV9LCB7ICAgNDM1MSwxNH0sIFwKKyAgICB7ICAgODk1OSwxNX0sIHsgICA0ODYzLDE2fSwgeyAgIDI1NTksMTV9LCB7ICAgNTg4NywxNH0sIFwKKyAgICB7ICAxMTc3NSwxNn0sIHsgICAzMDcxLDE1fSwgeyAgMzI3NjgsMTZ9LCB7ICA2NTUzNiwxN30sIFwKKyAgICB7IDEzMTA3MiwxOH0sIHsgMjYyMTQ0LDE5fSwgeyA1MjQyODgsMjB9LCB7MTA0ODU3NiwyMX0sIFwKKyAgICB7MjA5NzE1MiwyMn0sIHs0MTk0MzA0LDIzfSwgezgzODg2MDgsMjR9IH0KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTNfU0laRSAyNDMKKyNkZWZpbmUgTVVMX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDM3MTIKKworI2RlZmluZSBTUVJfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDQwNCAgLyogayA9IDUgKi8KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDQwNCwgNX0sIHsgICAgIDI1LCA2fSwgeyAgICAgMTMsIDV9LCB7ICAgICAyNywgNn0sIFwKKyAgICB7ICAgICAyOSwgN30sIHsgICAgIDE1LCA2fSwgeyAgICAgMzEsIDd9LCB7ICAgICAyNSwgOH0sIFwKKyAgICB7ICAgICAxMywgN30sIHsgICAgIDI4LCA4fSwgeyAgICAgMTUsIDd9LCB7ICAgICAzMiwgOH0sIFwKKyAgICB7ICAgICAxNywgN30sIHsgICAgIDM1LCA4fSwgeyAgICAgMjksIDl9LCB7ICAgICAxNSwgOH0sIFwKKyAgICB7ICAgICAzNSwgOX0sIHsgICAgIDE5LCA4fSwgeyAgICAgNDEsIDl9LCB7ICAgICAyMywgOH0sIFwKKyAgICB7ICAgICA0NywgOX0sIHsgICAgIDI3LDEwfSwgeyAgICAgMTUsIDl9LCB7ICAgICAzOSwxMH0sIFwKKyAgICB7ICAgICAyMywgOX0sIHsgICAgIDUxLDExfSwgeyAgICAgMTUsMTB9LCB7ICAgICAzMSwgOX0sIFwKKyAgICB7ICAgICA3MSwxMH0sIHsgICAgIDM5LCA5fSwgeyAgICAgODMsMTB9LCB7ICAgICA0NywgOX0sIFwKKyAgICB7ICAgICA5NSwxMH0sIHsgICAgIDU1LDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA3OSwxMX0sIFwKKyAgICB7ICAgICA0NywxMH0sIHsgICAgIDk1LDEyfSwgeyAgICAgMzEsMTF9LCB7ICAgICA2MywxMH0sIFwKKyAgICB7ICAgIDEyNywgOX0sIHsgICAgMjU1LDEwfSwgeyAgICAxMzUsMTF9LCB7ICAgICA3OSwxMH0sIFwKKyAgICB7ICAgIDE1OSwxMX0sIHsgICAgIDk1LDEyfSwgeyAgICAgNjMsMTF9LCB7ICAgIDEyNywxMH0sIFwKKyAgICB7ICAgIDI1NSwgOX0sIHsgICAgNTExLDEwfSwgeyAgICAyNzEsMTF9LCB7ICAgIDE0MywxMH0sIFwKKyAgICB7ICAgIDI4NywgOX0sIHsgICAgNTc1LDEwfSwgeyAgICAzMDMsMTF9LCB7ICAgIDE1OSwxMn0sIFwKKyAgICB7ICAgICA5NSwxM30sIHsgICAgIDYzLDEyfSwgeyAgICAxMjcsMTF9LCB7ICAgIDI1NSwxMH0sIFwKKyAgICB7ICAgIDUxMSwxMX0sIHsgICAgMjcxLDEwfSwgeyAgICA1NDMsMTF9LCB7ICAgIDI4NywxMH0sIFwKKyAgICB7ICAgIDU3NSwxMX0sIHsgICAgMzAzLDEyfSwgeyAgICAxNTksMTF9LCB7ICAgIDMxOSwxMH0sIFwKKyAgICB7ICAgIDYzOSwxMX0sIHsgICAgMzM1LDEwfSwgeyAgICA2NzEsMTF9LCB7ICAgIDM1MSwxMH0sIFwKKyAgICB7ICAgIDcwMywxMX0sIHsgICAgMzY3LDEwfSwgeyAgICA3MzUsMTJ9LCB7ICAgIDE5MSwxMX0sIFwKKyAgICB7ICAgIDM4MywxMH0sIHsgICAgNzY3LDExfSwgeyAgICA0MTUsMTJ9LCB7ICAgIDIyMywxMX0sIFwKKyAgICB7ICAgIDQ0NywxMH0sIHsgICAgODk1LDEzfSwgeyAgICAxMjcsMTJ9LCB7ICAgIDI1NSwxMX0sIFwKKyAgICB7ICAgIDUxMSwxMH0sIHsgICAxMDIzLDExfSwgeyAgICA1NDMsMTJ9LCB7ICAgIDI4NywxMX0sIFwKKyAgICB7ICAgIDU3NSwxMH0sIHsgICAxMTUxLDExfSwgeyAgICA2MDcsMTJ9LCB7ICAgIDMxOSwxMX0sIFwKKyAgICB7ICAgIDY3MSwxMn0sIHsgICAgMzUxLDExfSwgeyAgICA3MDMsMTB9LCB7ICAgMTQwNywxMX0sIFwKKyAgICB7ICAgIDczNSwxM30sIHsgICAgMTkxLDEyfSwgeyAgICAzODMsMTF9LCB7ICAgIDc2NywxMH0sIFwKKyAgICB7ICAgMTUzNSwxMn0sIHsgICAgNDE1LDExfSwgeyAgICA4MzEsMTJ9LCB7ICAgIDQ0NywxMX0sIFwKKyAgICB7ICAgIDg5NSwxMn0sIHsgICAgNDc5LDE0fSwgeyAgICAxMjcsMTN9LCB7ICAgIDI1NSwxMn0sIFwKKyAgICB7ICAgIDUxMSwxMX0sIHsgICAxMDIzLDEyfSwgeyAgICA1NDMsMTF9LCB7ICAgMTA4NywxMn0sIFwKKyAgICB7ICAgIDU3NSwxMX0sIHsgICAxMTUxLDEyfSwgeyAgICA2MDcsMTN9LCB7ICAgIDMxOSwxMn0sIFwKKyAgICB7ICAgIDYzOSwxMX0sIHsgICAxMjc5LDEyfSwgeyAgICA2NzEsMTF9LCB7ICAgMTM0MywxMn0sIFwKKyAgICB7ICAgIDcwMywxMX0sIHsgICAxNDA3LDEyfSwgeyAgICA3MzUsMTN9LCB7ICAgIDM4MywxMn0sIFwKKyAgICB7ICAgIDc2NywxMX0sIHsgICAxNTM1LDEyfSwgeyAgICA3OTksMTF9LCB7ICAgMTU5OSwxMn0sIFwKKyAgICB7ICAgIDgzMSwxM30sIHsgICAgNDQ3LDEyfSwgeyAgICA4OTUsMTF9LCB7ICAgMTc5MSwxMn0sIFwKKyAgICB7ICAgIDk1OSwxNH0sIHsgICAgMjU1LDEzfSwgeyAgICA1MTEsMTJ9LCB7ICAgMTAyMywxMX0sIFwKKyAgICB7ICAgMjA0NywxMn0sIHsgICAxMDg3LDEzfSwgeyAgICA1NzUsMTJ9LCB7ICAgMTIxNSwxM30sIFwKKyAgICB7ICAgIDYzOSwxMn0sIHsgICAxMzQzLDEzfSwgeyAgICA3MDMsMTJ9LCB7ICAgMTQwNywxNH0sIFwKKyAgICB7ICAgIDM4MywxM30sIHsgICAgNzY3LDEyfSwgeyAgIDE1OTksMTN9LCB7ICAgIDgzMSwxMn0sIFwKKyAgICB7ICAgMTcyNywxM30sIHsgICAgODk1LDEyfSwgeyAgIDE3OTEsMTN9LCB7ICAgIDk1OSwxNX0sIFwKKyAgICB7ICAgIDI1NSwxNH0sIHsgICAgNTExLDEzfSwgeyAgIDEwMjMsMTJ9LCB7ICAgMjA0NywxM30sIFwKKyAgICB7ICAgMTA4NywxMn0sIHsgICAyMTc1LDEzfSwgeyAgIDEyMTUsMTR9LCB7ICAgIDYzOSwxM30sIFwKKyAgICB7ICAgMTM0MywxMn0sIHsgICAyNjg3LDEzfSwgeyAgIDE0NzEsMTR9LCB7ICAgIDc2NywxM30sIFwKKyAgICB7ICAgMTU5OSwxMn0sIHsgICAzMTk5LDEzfSwgeyAgIDE3MjcsMTR9LCB7ICAgIDg5NSwxM30sIFwKKyAgICB7ICAgMTkxOSwxNX0sIHsgICAgNTExLDE0fSwgeyAgIDEwMjMsMTN9LCB7ICAgMjE3NSwxNH0sIFwKKyAgICB7ICAgMTE1MSwxM30sIHsgICAyNDMxLDEyfSwgeyAgIDQ4NjMsMTR9LCB7ICAgMTI3OSwxM30sIFwKKyAgICB7ICAgMjY4NywxNH0sIHsgICAxNDA3LDEzfSwgeyAgIDI4MTUsMTV9LCB7ICAgIDc2NywxNH0sIFwKKyAgICB7ICAgMTUzNSwxM30sIHsgICAzMTk5LDE0fSwgeyAgIDE2NjMsMTN9LCB7ICAgMzQ1NSwxNH0sIFwKKyAgICB7ICAgMTkxOSwxNn0sIHsgICAgNTExLDE1fSwgeyAgIDEwMjMsMTR9LCB7ICAgMjE3NSwxM30sIFwKKyAgICB7ICAgNDQ3OSwxNH0sIHsgICAyNDMxLDEzfSwgeyAgIDQ4NjMsMTV9LCB7ICAgMTI3OSwxNH0sIFwKKyAgICB7ICAgMjk0MywxM30sIHsgICA1ODg3LDE1fSwgeyAgIDE1MzUsMTR9LCB7ICAgMzQ1NSwxM30sIFwKKyAgICB7ICAgNjkxMSwxNX0sIHsgICAxNzkxLDE0fSwgeyAgIDM4MzksMTZ9LCB7ICAgMTAyMywxNX0sIFwKKyAgICB7ICAgMjA0NywxNH0sIHsgICA0NDc5LDE1fSwgeyAgIDIzMDMsMTR9LCB7ICAgNDg2MywxNX0sIFwKKyAgICB7ICAgMjU1OSwxNH0sIHsgICA1MTE5LDE1fSwgeyAgIDI4MTUsMTR9LCB7ICAgNTg4NywxNn0sIFwKKyAgICB7ICAgMTUzNSwxNX0sIHsgICAzMzI3LDE0fSwgeyAgIDY5MTEsMTV9LCB7ICAgMzgzOSwxN30sIFwKKyAgICB7ICAgMTAyMywxNn0sIHsgICAyMDQ3LDE1fSwgeyAgIDQzNTEsMTR9LCB7ICAgODk1OSwxNX0sIFwKKyAgICB7ICAgNDg2MywxNn0sIHsgICAyNTU5LDE1fSwgeyAgIDU4ODcsMTR9LCB7ICAxMTc3NSwxNn0sIFwKKyAgICB7ICAgMzA3MSwxNX0sIHsgIDMyNzY4LDE2fSwgeyAgNjU1MzYsMTd9LCB7IDEzMTA3MiwxOH0sIFwKKyAgICB7IDI2MjE0NCwxOX0sIHsgNTI0Mjg4LDIwfSwgezEwNDg1NzYsMjF9LCB7MjA5NzE1MiwyMn0sIFwKKyAgICB7NDE5NDMwNCwyM30sIHs4Mzg4NjA4LDI0fSB9CisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzX1NJWkUgMjMwCisjZGVmaW5lIFNRUl9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAzMjY0CisKKyNkZWZpbmUgTVVMTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDMKKyNkZWZpbmUgTVVMTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgMzkKKyNkZWZpbmUgTVVMTE9fTVVMX05fVEhSRVNIT0xEICAgICAgICAgICAgIDcyNDYKKyNkZWZpbmUgU1FSTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDYKKyNkZWZpbmUgU1FSTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgNDAKKyNkZWZpbmUgU1FSTE9fU1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDY0NDAKKworI2RlZmluZSBEQ19ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBEQ19ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgICA4OAorI2RlZmluZSBEQ19CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzNQorI2RlZmluZSBEQ19CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA2MgorCisjZGVmaW5lIElOVl9NVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgIDc5CisjZGVmaW5lIElOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIElOVl9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDExCisKKyNkZWZpbmUgQklOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAyNjQKKyNkZWZpbmUgUkVEQ18xX1RPX1JFRENfMl9USFJFU0hPTEQgICAgICAgICAgIDgKKyNkZWZpbmUgUkVEQ18yX1RPX1JFRENfTl9USFJFU0hPTEQgICAgICAgICAgNzkKKworI2RlZmluZSBNVV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTQ0MgorI2RlZmluZSBNVV9ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgMTQ3MAorI2RlZmluZSBNVVBJX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1VX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAxNDcwCisjZGVmaW5lIE1VX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAxNjUyCisKKyNkZWZpbmUgUE9XTV9TRUNfVEFCTEUgIDEsMTYsMTUxLDgzOQorCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgIDE1CisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgNDA2CisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgODg1CisKKyNkZWZpbmUgRkFDX0RTQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAxNzkKKyNkZWZpbmUgRkFDX09ERF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgNTMKKworI2RlZmluZSBNQVRSSVgyMl9TVFJBU1NFTl9USFJFU0hPTEQgICAgICAgICAxOQorI2RlZmluZSBIR0NEMl9ESVYxX01FVEhPRCAgICAgICAgICAgICAgICAgICAgMSAgLyogOS4xMCUgZmFzdGVyIHRoYW4gMyAqLworI2RlZmluZSBIR0NEX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgICA0NQorI2RlZmluZSBIR0NEX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA1MAorI2RlZmluZSBIR0NEX1JFRFVDRV9USFJFU0hPTEQgICAgICAgICAgICAgMjQ3OQorI2RlZmluZSBHQ0RfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDMyMQorI2RlZmluZSBHQ0RFWFRfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDI1OAorI2RlZmluZSBKQUNPQklfQkFTRV9NRVRIT0QgICAgICAgICAgICAgICAgICAgNCAgLyogMTUuNDUlIGZhc3RlciB0aGFuIDEgKi8KKworLyogVHVuZXVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIHRvb2sgMTc5NDIyIHNlY29uZHMgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9wOS9tdWxfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvcDkvbXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2M2YwOTUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvcDkvbXVsXzEuYXNtCkBAIC0wLDAgKzEsMTI2IEBACitkbmwgIFBvd2VyOSBtcG5fbXVsXzEuCisKK2RubCAgQ29weXJpZ2h0IDIwMTcsIDIwMTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgICAgICAgICAgICBjeWNsZXMvbGltYgorQyBQT1dFUjMvUFBDNjMwCQkgPworQyBQT1dFUjQvUFBDOTcwCQkgPworQyBQT1dFUjUJCSA/CitDIFBPV0VSNgkJID8KK0MgUE9XRVI3CQkgPworQyBQT1dFUjgJCSA/CitDIFBPV0VSOQkJIDIuNDcKKworQyBUT0RPCitDICAqIFNjaGVkdWxlIGZvciBQb3dlcjkgcGlwZWxpbmUuCitDICAqIFVucm9sbCA0eCBpZiB0aGF0IHByb3ZlcyBiZW5lZmljaWFsLgorQyAgKiBUaGlzIGlzIG1hcmdpbmFsbHkgZmFzdGVyIChidXQgbXVjaCBzbWFsbGVyKSB0aGFuIC4uL211bF8xLmFzbS4KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywgYHIzJykKK2RlZmluZShgdXAnLCBgcjQnKQorZGVmaW5lKGBuJywgIGByNScpCitkZWZpbmUoYHYwJywgYHI2JykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9tdWxfMWMpCisJYglMKGVudCkKK0VQSUxPR1VFKCkKK1BST0xPR1VFKG1wbl9tdWxfMSkKKwlsaQlyNywgMAorTChlbnQpOglsZAlyMTEsIDAodXApCisJY21wZGkJY3I2LCBuLCAyCisJYWRkaQlyMCwgbiwgLTEJQyBGSVhNRTogcG9zdHBvbmUKKwlzcmRpCXIwLCByMCwgMQlDIEZJWE1FOiBwb3N0cG9uZQorCW10Y3RyCXIwCQlDIEZJWE1FOiBwb3N0cG9uZQorCXJsZGljbC4JcjEyLCBuLCAwLDYzCUMgcjAgPSBuICYgMywgc2V0IGNyMAorCWJuZQljcjAsIEwoYjEpCisKK0woYjApOglsZAlyMCwgOCh1cCkKKwltYWRkbGQoCXI5LCByMTEsIHYwLCByNykKKwltYWRkaGR1KHI3LCByMTEsIHYwLCByNykKKwlibGUJY3I2LCBMKDIpCisJbGQJcjEyLCAxNih1cCkKKwltdWxsZAlyOCwgcjAsIHYwCisJbXVsaGR1CXI1LCByMCwgdjAKKwlhZGRpYwl1cCwgdXAsIDE2CisJYWRkaQlycCwgcnAsIC04CisJYglMKG1pZCkKKworTChiMSk6CWxkCXIwLCAwKHVwKQorCWJsZQljcjYsIEwoMSkKKwlsZAlyMTIsIDgodXApCisJbWFkZGxkKAlyOCwgcjExLCB2MCwgcjcpCisJbWFkZGhkdShyNSwgcjExLCB2MCwgcjcpCisJbGQJcjAsIDE2KHVwKQorCW11bGxkCXI5LCByMTIsIHYwCisJbXVsaGR1CXI3LCByMTIsIHYwCisJYWRkaWMJdXAsIHVwLCAyNAorCWJkeglMKGVuZCkKKworCUFMSUdOKDE2KQorTCh0b3ApOglsZAlyMTIsIDAodXApCisJc3RkCXI4LCAwKHJwKQorCWFkZGUJcjksIHI1LCByOQorCW11bGxkCXI4LCByMCwgdjAKKwltdWxoZHUJcjUsIHIwLCB2MAorTChtaWQpOglsZAlyMCwgOCh1cCkKKwlzdGQJcjksIDgocnApCisJYWRkZQlyOCwgcjcsIHI4CisJbXVsbGQJcjksIHIxMiwgdjAKKwltdWxoZHUJcjcsIHIxMiwgdjAKKwlhZGRpCXJwLCBycCwgMTYKKwlhZGRpCXVwLCB1cCwgMTYKKwliZG56CUwodG9wKQorCitMKGVuZCk6CXN0ZAlyOCwgMChycCkKKwltdWxsZAlyOCwgcjAsIHYwCisJYWRkZQlyOSwgcjUsIHI5CisJbXVsaGR1CXI1LCByMCwgdjAKKwlzdGQJcjksIDgocnApCisJYWRkZQlyOCwgcjcsIHI4CisJc3RkCXI4LCAxNihycCkKKwlhZGR6ZQlyMywgcjUKKwlibHIKKworTCgyKToJbXVsbGQJcjgsIHIwLCB2MAorCW11bGhkdQlyNSwgcjAsIHYwCisJc3RkCXI5LCAwKHJwKQorCWFkZGMJcjgsIHI3LCByOAorCXN0ZAlyOCwgOChycCkKKwlhZGR6ZQlyMywgcjUKKwlibHIKKworTCgxKToJbWFkZGxkKAlyOCwgIHIwLCB2MCwgcjcpCisJc3RkCXI4LCAwKHJwKQorCW1hZGRoZHUocjMsIHIwLCB2MCwgcjcpCisJYmxyCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvcDkvbXVsXzIuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L3A5L211bF8yLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzJiNmNiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L3A5L211bF8yLmFzbQpAQCAtMCwwICsxLDE3MCBAQAorZG5sICBQb3dlcjkgbXBuX211bF8yLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorZG5sICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKK2RubCAgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK2RubCAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICBjeWNsZXMvbGltYgorQyBwb3dlcjk6ICAgIDEuNTgKKworQyBTVEFUVVMKK0MgICogTm90IHdyaXR0ZW4gd2l0aCBhbnkgcG93ZXI5IHBpcGVsaW5lIHVuZGVyc3RhbmRpbmcuCitDICAqIFRoZSA0eCB1bnJvbGxpbmcgd2FzIG5vdCBtb3RpdmF0ZWQgYnkgYW55IHRpbWluZyB0ZXN0cy4KK0MgICogTm8gbG9jYWwgc2NoZWR1bGluZyBmb3IgcGVyZm9ybWFuY2UgdHdlYWtpbmcgaGFzIGJlZW4gZG9uZS4KK0MgICogRGVjcmVhc2UgbG9hZCBzY2hlZHVsaW5nIQorCitkZWZpbmUoYHJwJywgYHIzJykKK2RlZmluZShgdXAnLCBgcjQnKQorZGVmaW5lKGBuJywgIGByNScpCQlDIE5vdGU6IFJldXNlZCBhcyBzY3JhdGNoCitkZWZpbmUoYHZwJywgYHI2JykJCUMgTm90ZTogUmV1c2VkIGZvciB2MQorCitkZWZpbmUoYHYwJywgYHI3JykKK2RlZmluZShgdjEnLCBgcjYnKQorCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fbXVsXzIpCisJc3RkCXIyOCwgLTMyKHIxKQorCXN0ZAlyMjksIC0yNChyMSkKKwlzdGQJcjMwLCAtMTYocjEpCisJc3RkCXIzMSwgLTgocjEpCisKKwlzdWJmaWMJcjAsIG4sIDAJQyBjbGVhciBDQQorCXN1YmZvCXIwLCByMCwgcjAJQyBjbGVhciBPViBhbmQgcjAKKworCWNtcGRpCWNyNywgbiwgNAorCisJbGQJdjAsIDAodnApCisJbGQJdjEsIDgodnApCisKKwlzcmRpCXIxMCwgbiwgMgorCW10Y3RyCXIxMAorCisJcmxkaWNsLglyOSwgbiwgMCwgNjMKKwlibmUJY3IwLCBMKGJ4MSkKKworTChieDApOglybGRpY2wuIHI5LCBuLCA2MywgNjMKKworCWxkCXI4LCAwKHVwKQorCWxkCXI5LCA4KHVwKQorCWxpCXIxMSwgMAorCW11bGxkCXIyOCwgcjgsIHYwCisJbXVsaGR1CXIzMSwgcjgsIHYwCisJYmx0CWNyNywgTCgyKQorCW11bGxkCXI1LCByOCwgdjEKKwltdWxoZHUJcjEwLCByOCwgdjEKKwlibmUJY3IwLCBMKGIxMCkKKworTChiMDApOglhZGRpCXVwLCB1cCwgLTgKKwlhZGRpCXJwLCBycCwgLTI0CisJYglMKGxvMCkKKworTChiMTApOglhZGRpCXVwLCB1cCwgOAorCWFkZGkJcnAsIHJwLCAtOAorCWIJTChsbzIpCisKK0woMik6CWFkZGkJcnAsIHJwLCAtOAorCW11bGxkCXI1LCByOCwgdjEKKwltdWxoZHUJcjEwLCByOCwgdjEKKwliCUwoY2oyKQorCitMKGJ4MSk6CXJsZGljbC4gcjksIG4sIDYzLCA2MworCisJbGQJcjksIDAodXApCisJbGQJcjgsIDgodXApCisJbGkJcjEwLCAwCisJbXVsbGQJcjI5LCByOSwgdjAKKwltdWxoZHUJcjMwLCByOSwgdjAKKwltdWxsZAlyMTIsIHI5LCB2MQorCW11bGhkdQlyMTEsIHI5LCB2MQorCWJuZQljcjAsIEwoYjExKQorCitMKGIwMSk6CWFkZGkJcnAsIHJwLCAtMTYKKwliCUwobG8xKQorTChiMTEpOglhZGRpCXVwLCB1cCwgMTYKKwlibHQJY3I3LCBMKGVuZCkKKworTCh0b3ApOglsZAlyOSwgMCh1cCkKKwltYWRkbGQoCXIyOCwgcjgsIHYwLCByMTApCUMgMCAgNCAgIC0+IGFkZGUKKwltYWRkaGR1KHIzMSwgcjgsIHYwLCByMTApCUMgMSAgNQorCWFkZGUJcjAsIHIyOSwgcjAJCUMgICAgNyAxMQorCXN0ZAlyMCwgMChycCkKKwltdWxsZAlyNSwgcjgsIHYxCQlDIDEgIDUgICAtPiBhZGRleAorCW11bGhkdQlyMTAsIHI4LCB2MQkJQyAyICA2CisJYWRkZXgoCXIwLCByMTIsIHIzMCwgMCkJQyAgICA4IDEyCitMKGxvMik6CWxkCXI4LCA4KHVwKQorCW1hZGRsZCgJcjI5LCByOSwgdjAsIHIxMSkJQyAxICA1ICAgLT4gYWRkZQorCW1hZGRoZHUocjMwLCByOSwgdjAsIHIxMSkJQyAyICA2CisJYWRkZQlyMCwgcjI4LCByMAkJQyAgICA4IDEyCisJc3RkCXIwLCA4KHJwKQorCW11bGxkCXIxMiwgcjksIHYxCQlDIDIgIDYgICAtPiBhZGRleAorCW11bGhkdQlyMTEsIHI5LCB2MQkJQyAzICA3CisJYWRkZXgoCXIwLCByNSwgcjMxLCAwKQkJQyA1ICA5IDEzCitMKGxvMSk6CWxkCXI5LCAxNih1cCkKKwltYWRkbGQoCXIyOCwgcjgsIHYwLCByMTApCUMgMiAgNiAgIC0+IGFkZGUKKwltYWRkaGR1KHIzMSwgcjgsIHYwLCByMTApCUMgMyAgNworCWFkZGUJcjAsIHIyOSwgcjAJCUMgICAgNSAgOSAxMworCXN0ZAlyMCwgMTYocnApCisJbXVsbGQJcjUsIHI4LCB2MQkJQyAzICA3ICAgLT4gYWRkZXgKKwltdWxoZHUJcjEwLCByOCwgdjEJCUMgNCAgOAorCWFkZGV4KAlyMCwgcjEyLCByMzAsIDApCUMgICAgNiAxMAorTChsbzApOglsZAlyOCwgMjQodXApCisJbWFkZGxkKAlyMjksIHI5LCB2MCwgcjExKQlDIDMgIDcgICAtPiBhZGRlCisJbWFkZGhkdShyMzAsIHI5LCB2MCwgcjExKQlDIDQgIDgKKwlhZGRlCXIwLCByMjgsIHIwCQlDICAgIDYgMTAKKwlzdGQJcjAsIDI0KHJwKQorCW11bGxkCXIxMiwgcjksIHYxCQlDIDQgIDggICAtPiBhZGRleAorCW11bGhkdQlyMTEsIHI5LCB2MQkJQyA1ICA5CisJYWRkZXgoCXIwLCByNSwgcjMxLCAwKQkJQyAgICA3IDExCisJYWRkaQl1cCwgdXAsIDMyCisJYWRkaQlycCwgcnAsIDMyCisJYmRueglMKHRvcCkKKworTChlbmQpOglsZAlyOSwgMCh1cCkKKwltYWRkbGQoCXIyOCwgcjgsIHYwLCByMTApCUMgMCAgNAorCW1hZGRoZHUocjMxLCByOCwgdjAsIHIxMCkJQyAxICA1CisJYWRkZQlyMCwgcjI5LCByMAkJQyAgICA3IDExCisJc3RkCXIwLCAwKHJwKQkJQwkJLTQKKwltdWxsZAlyNSwgcjgsIHYxCQlDIDEgIDUKKwltdWxoZHUJcjEwLCByOCwgdjEJCUMgMiAgNgorCWFkZGV4KAlyMCwgcjEyLCByMzAsIDApCUMgICAgOCAxMgorTChjajIpOgltYWRkbGQoCXIyOSwgcjksIHYwLCByMTEpCUMgMSAgNQkJLTIKKwltYWRkaGR1KHIzMCwgcjksIHYwLCByMTEpCUMgMiAgNgkJLTEKKwlhZGRlCXIwLCByMjgsIHIwCQlDICAgIDggMTIJLTMKKwlzdGQJcjAsIDgocnApCQlDCQktMworCW11bGxkCXIxMiwgcjksIHYxCQlDIDIgIDYJCS0xCisJbXVsaGR1CXIxMSwgcjksIHYxCQlDIDMgIDcJCTAgPSByZXR1cm4gbGltYgorCWFkZGV4KAlyMCwgcjUsIHIzMSwgMCkJCUMgNSAgOSAxMworCWFkZGUJcjAsIHIyOSwgcjAJCUMgICAgNSAgOSAxMwktMgorCXN0ZAlyMCwgMTYocnApCQlDCQktMgorCWFkZGV4KAlyMCwgcjEyLCByMzAsIDApCUMgICAgNiAxMAktMQorCWFkZGUJcjAsIHIwLCByMTAJCUMJCS0xCisJc3RkCXIwLCAyNChycCkJCUMJCS0xCisJbGkJcjQsIDAKKwlhZGR6ZQlyMywgcjExCisJYWRkZXgoCXIzLCByMywgcjQsIDApCisKK0wocmV0KToJbGQJcjI4LCAtMzIocjEpCisJbGQJcjI5LCAtMjQocjEpCisJbGQJcjMwLCAtMTYocjEpCisJbGQJcjMxLCAtOChyMSkKKwlibHIKK0VQSUxPR1VFKCkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L3A5L211bF9iYXNlY2FzZS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvcDkvbXVsX2Jhc2VjYXNlLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjNkMzIyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L3A5L211bF9iYXNlY2FzZS5hc20KQEAgLTAsMCArMSw0MTUgQEAKK2RubCAgUG93ZXI5IG1wbl9tdWxfYmFzZWNhc2UuCisKK2RubCAgQ29weXJpZ2h0IDE5OTktMjAwMSwgMjAwMy0yMDA2LCAyMDA4LCAyMDE3LTIwMTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorZG5sICBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgICAgICAgICAgIGN5Y2xlcy9saW1iCitDIFBPV0VSMy9QUEM2MzAgICAgICAgICAgLQorQyBQT1dFUjQvUFBDOTcwICAgICAgICAgIC0KK0MgUE9XRVI1ICAgICAgICAgICAgICAgICAtCitDIFBPV0VSNiAgICAgICAgICAgICAgICAgLQorQyBQT1dFUjcgICAgICAgICAgICAgICAgIC0KK0MgUE9XRVI4ICAgICAgICAgICAgICAgICAtCitDIFBPV0VSOSAgICAgICAgICAgICAgICAgMS42MgorCitDIFRPRE8KK0MgICogQ2hlY2sgaWYgKGlubmVyKSBsb29wIGFsaWdubWVudCBhZmZlY3RzIHBlcmZvcm1hbmNlLgorQyAgKiBDb3VsZCB3ZSBzY2hlZHVsZSBsb2FkcyBsZXNzIGluIGFkZG11bF8yL211bF8yPyBUaGF0IHdvdWxkIHNhdmUgc29tZSByZWdzCitDICAgIGFuZCBtYWtlIHRoZSB0YWlsIGNvZGUgbW9yZSBtYW5hZ2VhYmxlLgorQyAgKiBQb3N0cG9uZSBzb21lIHJlZ2lzdGVyIHNhdmVzIHRvIG1haW4gbG9vcC4KK0MgICogUGVyaGFwcyB3cml0ZSBtb3JlIHNtYWxsIG9wZXJhbmRzICgzeDEsIDN4MiwgM3gzKSBjb2RlLgorQyAgKiBDb25zaWRlciByZXN0b3JpbmcgcnAsdXAgYWZ0ZXIgbG9vcCB1c2luZyBhcml0aG1ldGljLCBlbGltaW5hdGluZyBycDIsIHVwMi4KK0MgICAgT24gdGhlIG90aGVyIGhhbmQsIHRoZSBjdXJyZW50IHJwLHVwIHJlc3RvcmUgcmVnaXN0ZXIgYXJlIHVzZWZ1bCBmb3IgT1NQLgorQyAgKiBEbyBPU1AuIFRoaXMgc2hvdWxkIHNhdmUgYSBsb3Qgd2l0aCB0aGUgY3VycmVudCBkZWVwIGFkZG11bF8yIHBpcGVsaW5lLgorCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLCBgcjMnKQorZGVmaW5lKGB1cCcsIGByNCcpCitkZWZpbmUoYHVuJywgYHI1JykKK2RlZmluZShgdnAnLCBgcjYnKQorZGVmaW5lKGB2bicsIGByNycpCisKK2RlZmluZShgdjAnLCBgcjAnKQorZGVmaW5lKGB2MScsIGByNycpCitkZWZpbmUoYHJwMicsIGByMjQnKQorZGVmaW5lKGB1cDInLCBgcjI1JykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9tdWxfYmFzZWNhc2UpCisJY21wZGkJY3IwLCB1biwgMgorCWJndAljcjAsIEwodW5fZ3QyKQorCWNtcGRpCWNyNiwgdm4sIDEKKwlsZAlyNywgMCh2cCkKKwlsZAlyNSwgMCh1cCkKKwltdWxsZAlyOCwgcjUsIHI3CUMgd2VpZ2h0IDAKKwltdWxoZHUJcjksIHI1LCByNwlDIHdlaWdodCAxCisJc3RkCXI4LCAwKHJwKQorCWJlcQljcjAsIEwoMngpCisJc3RkCXI5LCA4KHJwKQorCWJscgorCUFMSUdOKDE2KQorTCgyeCk6CWxkCXIwLCA4KHVwKQorCW11bGxkCXI4LCByMCwgcjcJQyB3ZWlnaHQgMQorCW11bGhkdQlyMTAsIHIwLCByNwlDIHdlaWdodCAyCisJYWRkYwlyOSwgcjksIHI4CisJYWRkemUJcjEwLCByMTAKKwlibmUJY3I2LCBMKDJ4MikKKwlzdGQJcjksIDgocnApCisJc3RkCXIxMCwgMTYocnApCisJYmxyCisJQUxJR04oMTYpCitMKDJ4Mik6CWxkCXI2LCA4KHZwKQorCW11bGxkCXI4LCByNSwgcjYJQyB3ZWlnaHQgMQorCW11bGhkdQlyMTEsIHI1LCByNglDIHdlaWdodCAyCisJYWRkYwlyOSwgcjksIHI4CisJc3RkCXI5LCA4KHJwKQorCWFkZGUJcjExLCByMTEsIHIxMAorCW11bGxkCXIxMiwgcjAsIHI2CUMgd2VpZ2h0IDIKKwltdWxoZHUJcjAsIHIwLCByNglDIHdlaWdodCAzCisJYWRkemUJcjAsIHIwCisJYWRkYwlyMTEsIHIxMSwgcjEyCisJYWRkemUJcjAsIHIwCisJc3RkCXIxMSwgMTYocnApCisJc3RkCXIwLCAyNChycCkKKwlibHIKKworTCh1bl9ndDIpOgorCXN0ZAlyMjIsIC04MChyMSkKKwlzdGQJcjIzLCAtNzIocjEpCisJc3RkCXIyNCwgLTY0KHIxKQorCXN0ZAlyMjUsIC01NihyMSkKKwlzdGQJcjI2LCAtNDgocjEpCisJc3RkCXIyNywgLTQwKHIxKQorCXN0ZAlyMjgsIC0zMihyMSkKKwlzdGQJcjI5LCAtMjQocjEpCisJc3RkCXIzMCwgLTE2KHIxKQorCXN0ZAlyMzEsIC04KHIxKQorCW1yCXJwMiwgcjMJCQlDIHJwCisJbXIJdXAyLCByNAkJCUMgdXAKKwlzcmRpCXIyMiwgcjUsIDIJCUMgdW4KKwlzdWJmaWMJcjIzLCByNywgMAkJQyAtdm4sIGNsZWFyIENBCisJc3ViZm8JcjAsIHIwLCByMAkJQyBjbGVhciBPViAoYW5kIHIwKQorCisJY21wZGkJY3I2LCB1biwgMworCXJsZGljbAlyMCwgdW4sIDAsIDYzCQlDIHIwID0gdW4gJiAxCisJY21wZGkJY3I3LCByMCwgMAorCXJsZGljbAlyMCwgdW4sIDYzLCA2MwkJQyBGSVhNRTogdW51c2VkIGZvciB2biA9IDEKKwljbXBkaQljcjUsIHIwLCAwCQlDIEZJWE1FOiB1bnVzZWQgZm9yIHZuID0gMQorCisJbGQJdjAsIDAodnApCisJcmxkaWNsLglyOSwgdm4sIDAsIDYzCisJYmVxCWNyMCwgTCh2bl9ldm4pCisKK0wodm5fb2RkKToKKwlhZGRpCXIxMCwgdW4sIC0yCisJbGQJcjUsIDAodXApCisJc3JkaQlyMTAsIHIxMCwgMQorCW10Y3RyCXIxMAorCWJuZQljcjcsIEwobTFfYjEpCisKK0wobTFfYjApOgorCWxkCXIxMCwgOCh1cCkKKwltdWxsZAlyOSwgcjUsIHYwCisJbXVsaGR1CXIxMSwgcjUsIHYwCisJbGQJcjEyLCAxNih1cCkKKwltdWxsZAlyOCwgcjEwLCB2MAorCW11bGhkdQlyNSwgcjEwLCB2MAorCWFkZGkJcnAsIHJwLCAtOAorCWIJTChtMV9taWQpCisKK0wobTFfYjEpOgorCWxkCXIxMiwgOCh1cCkKKwltdWxsZAlyOCwgcjUsIHYwCisJbXVsaGR1CXI1LCByNSwgdjAKKwlsZAlyMTAsIDE2KHVwKQorCW11bGxkCXI5LCByMTIsIHYwCisJbXVsaGR1CXIxMSwgcjEyLCB2MAorCWFkZGkJdXAsIHVwLCA4CisJYmVxCWNyNiwgTChtMV9lbmQpCQlDIGp1bXAgdGFrZW4gbWVhbnMgdW4gPSAzLCB2biA9IHsxLDN9CisKKwlBTElHTigxNikKK0wobTFfdG9wKToKKwlsZAlyMTIsIDE2KHVwKQorCXN0ZAlyOCwgMChycCkKKwlhZGRlCXI5LCByNSwgcjkKKwltdWxsZAlyOCwgcjEwLCB2MAorCW11bGhkdQlyNSwgcjEwLCB2MAorTChtMV9taWQpOgorCWxkCXIxMCwgMjQodXApCisJc3RkCXI5LCA4KHJwKQorCWFkZGUJcjgsIHIxMSwgcjgKKwltdWxsZAlyOSwgcjEyLCB2MAorCW11bGhkdQlyMTEsIHIxMiwgdjAKKwlhZGRpCXJwLCBycCwgMTYKKwlhZGRpCXVwLCB1cCwgMTYKKwliZG56CUwobTFfdG9wKQorCitMKG0xX2VuZCk6CisJc3RkCXI4LCAwKHJwKQorCW11bGxkCXI4LCByMTAsIHYwCisJYWRkZQlyOSwgcjUsIHI5CisJbXVsaGR1CXI1LCByMTAsIHYwCisJc3RkCXI5LCA4KHJwKQorCWFkZGUJcjgsIHIxMSwgcjgKKwlzdGQJcjgsIDE2KHJwKQorCWFkZHplCXIxMCwgcjUKKwlzdGQJcjEwLCAyNChycCkKKworCWFkZGkJcnAyLCBycDIsIDgKKwlhZGRpCXZwLCB2cCwgOAorCWFkZGljLglyMjMsIHIyMywgMQorCWIJTChkb19vdXRlcikKKworTCh2bl9ldm4pOgorCWxkCXYxLCA4KHZwKQorCWFkZGkJcjIzLCByMjMsIDIKKwltdGN0cglyMjIKKwlibmUJY3I3LCBMKG0yX2J4MSkKKworTChtMl9ieDApOgorCWxkCXI4LCAwKHVwKQorCWxkCXI5LCA4KHVwKQorCWxpCXIxMSwgMAorCW11bGxkCXIyOCwgcjgsIHYwCisJbXVsaGR1CXIzMSwgcjgsIHYwCisJbXVsbGQJcjUsIHI4LCB2MQorCW11bGhkdQlyMTAsIHI4LCB2MQorCWxpCXIxMiwgMAorCWJuZQljcjUsIEwobTJfYjEwKQorCitMKG0yX2IwMCk6CisJYWRkaQl1cCwgdXAsIC04CisJYWRkaQlycCwgcnAsIC0yNAorCWIJTChtMl9sbzApCisKK0wobTJfYjEwKToKKwlhZGRpCXVwLCB1cCwgOAorCWFkZGkJcnAsIHJwLCAtOAorCWIJTChtMl9sbzIpCisKK0wobTJfYngxKToKKwlsZAlyOSwgMCh1cCkKKwlsZAlyOCwgOCh1cCkKKwlsaQlyMTAsIDAKKwltdWxsZAlyMjksIHI5LCB2MAorCW11bGhkdQlyMzAsIHI5LCB2MAorCW11bGxkCXIxMiwgcjksIHYxCisJbXVsaGR1CXIxMSwgcjksIHYxCisJbGkJcjUsIDAKKwlibmUJY3I1LCBMKG0yX2IxMSkKKworTChtMl9iMDEpOgorCWFkZGkJcnAsIHJwLCAtMTYKKwliCUwobTJfbG8xKQorTChtMl9iMTEpOgorCWFkZGkJdXAsIHVwLCAxNgorCWJlcQljcjYsIEwobTJfZW5kKQkJQyB0YWtlbiBtZWFucyB1biA9IDMsIHZuID0gMi4gV2UncmUgZG9uZS4KKworTChtMl90b3ApOgorCWxkCXI5LCAwKHVwKQorCW1hZGRsZCgJcjI4LCByOCwgdjAsIHIxMCkKKwltYWRkaGR1KHIzMSwgcjgsIHYwLCByMTApCisJYWRkZQlyNSwgcjI5LCByNQorCXN0ZAlyNSwgMChycCkKKwltdWxsZAlyNSwgcjgsIHYxCisJbXVsaGR1CXIxMCwgcjgsIHYxCisJYWRkZXgoCXIxMiwgcjEyLCByMzAsIDApCitMKG0yX2xvMik6CisJbGQJcjgsIDgodXApCisJbWFkZGxkKAlyMjksIHI5LCB2MCwgcjExKQorCW1hZGRoZHUocjMwLCByOSwgdjAsIHIxMSkKKwlhZGRlCXIxMiwgcjI4LCByMTIKKwlzdGQJcjEyLCA4KHJwKQorCW11bGxkCXIxMiwgcjksIHYxCisJbXVsaGR1CXIxMSwgcjksIHYxCisJYWRkZXgoCXI1LCByNSwgcjMxLCAwKQorTChtMl9sbzEpOgorCWxkCXI5LCAxNih1cCkKKwltYWRkbGQoCXIyOCwgcjgsIHYwLCByMTApCisJbWFkZGhkdShyMzEsIHI4LCB2MCwgcjEwKQorCWFkZGUJcjUsIHIyOSwgcjUKKwlzdGQJcjUsIDE2KHJwKQorCW11bGxkCXI1LCByOCwgdjEKKwltdWxoZHUJcjEwLCByOCwgdjEKKwlhZGRleCgJcjEyLCByMTIsIHIzMCwgMCkKK0wobTJfbG8wKToKKwlsZAlyOCwgMjQodXApCisJbWFkZGxkKAlyMjksIHI5LCB2MCwgcjExKQorCW1hZGRoZHUocjMwLCByOSwgdjAsIHIxMSkKKwlhZGRlCXIxMiwgcjI4LCByMTIKKwlzdGQJcjEyLCAyNChycCkKKwltdWxsZAlyMTIsIHI5LCB2MQorCW11bGhkdQlyMTEsIHI5LCB2MQorCWFkZGV4KAlyNSwgcjUsIHIzMSwgMCkKKwlhZGRpCXVwLCB1cCwgMzIKKwlhZGRpCXJwLCBycCwgMzIKKwliZG56CUwobTJfdG9wKQorCitMKG0yX2VuZCk6CisJbGQJcjksIDAodXApCisJbWFkZGxkKAlyMjgsIHI4LCB2MCwgcjEwKQorCW1hZGRoZHUocjMxLCByOCwgdjAsIHIxMCkKKwlhZGRlCXI1LCByMjksIHI1CisJc3RkCXI1LCAwKHJwKQorCW11bGxkCXI1LCByOCwgdjEKKwltdWxoZHUJcjEwLCByOCwgdjEKKwliCUwoY2opCisKK0wob3V0ZXIpOgorCWxkCXYwLCAwKHZwKQorCWxkCXYxLCA4KHZwKQorCWFkZGkJcjIzLCByMjMsIDIKKwltdGN0cglyMjIKKwlibmUJY3I3LCBMKGJ4MSkKKworTChieDApOglsZAlyMjYsIDAocnAyKQorCWxkCXI4LCAwKHVwMikKKwlsZAlyMTEsIDgocnAyKQorCWxkCXI5LCA4KHVwMikKKwltYWRkbGQoCXIyOCwgcjgsIHYwLCByMjYpCisJbWFkZGhkdShyMzEsIHI4LCB2MCwgcjI2KQorCWxkCXIyNiwgMTYocnAyKQorCW11bGxkCXI1LCByOCwgdjEKKwltdWxoZHUJcjEwLCByOCwgdjEKKwlsaQlyMTIsIDAKKwlibmUJY3I1LCBMKGIxMCkKKworTChiMDApOglhZGRpCXVwLCB1cDIsIC04CisJYWRkaQlycCwgcnAyLCAtMjQKKwliCUwobG8wKQorCitMKGIxMCk6CWFkZGkJdXAsIHVwMiwgOAorCWFkZGkJcnAsIHJwMiwgLTgKKwliCUwobG8yKQorCitMKGJ4MSk6CWxkCXIyNywgMChycDIpCisJbGQJcjksIDAodXAyKQorCWxkCXIxMCwgOChycDIpCisJbGQJcjgsIDgodXAyKQorCW1hZGRsZCgJcjI5LCByOSwgdjAsIHIyNykKKwltYWRkaGR1KHIzMCwgcjksIHYwLCByMjcpCisJbGQJcjI3LCAxNihycDIpCisJbXVsbGQJcjEyLCByOSwgdjEKKwltdWxoZHUJcjExLCByOSwgdjEKKwlsaQlyNSwgMAorCWJuZQljcjUsIEwoYjExKQorCitMKGIwMSk6CWFkZGkJdXAsIHVwMiwgMAorCWFkZGkJcnAsIHJwMiwgLTE2CisJYglMKGxvMSkKK0woYjExKToJYWRkaQl1cCwgdXAyLCAxNgorCWFkZGkJcnAsIHJwMiwgMAorCWJlcQljcjYsIEwoZW5kKQkJQyB0YWtlbiBtZWFucyB1biA9IDMsIHZuID0gMy4gV2UncmUgZG9uZS4KKworTCh0b3ApOglsZAlyOSwgMCh1cCkKKwltYWRkbGQoCXIyOCwgcjgsIHYwLCByMTApCisJbWFkZGhkdShyMzEsIHI4LCB2MCwgcjEwKQorCWFkZGUJcjUsIHIyOSwgcjUKKwlsZAlyMjYsIDI0KHJwKQorCXN0ZAlyNSwgMChycCkKKwltYWRkbGQoCXI1LCByOCwgdjEsIHIyNykKKwltYWRkaGR1KHIxMCwgcjgsIHYxLCByMjcpCisJYWRkZXgoCXIxMiwgcjEyLCByMzAsIDApCitMKGxvMik6CWxkCXI4LCA4KHVwKQorCW1hZGRsZCgJcjI5LCByOSwgdjAsIHIxMSkKKwltYWRkaGR1KHIzMCwgcjksIHYwLCByMTEpCisJYWRkZQlyMTIsIHIyOCwgcjEyCisJbGQJcjI3LCAzMihycCkKKwlzdGQJcjEyLCA4KHJwKQorCW1hZGRsZCgJcjEyLCByOSwgdjEsIHIyNikKKwltYWRkaGR1KHIxMSwgcjksIHYxLCByMjYpCisJYWRkZXgoCXI1LCByNSwgcjMxLCAwKQorTChsbzEpOglsZAlyOSwgMTYodXApCisJbWFkZGxkKAlyMjgsIHI4LCB2MCwgcjEwKQorCW1hZGRoZHUocjMxLCByOCwgdjAsIHIxMCkKKwlhZGRlCXI1LCByMjksIHI1CisJbGQJcjI2LCA0MChycCkKKwlzdGQJcjUsIDE2KHJwKQorCW1hZGRsZCgJcjUsIHI4LCB2MSwgcjI3KQorCW1hZGRoZHUocjEwLCByOCwgdjEsIHIyNykKKwlhZGRleCgJcjEyLCByMTIsIHIzMCwgMCkKK0wobG8wKToJbGQJcjgsIDI0KHVwKQorCW1hZGRsZCgJcjI5LCByOSwgdjAsIHIxMSkKKwltYWRkaGR1KHIzMCwgcjksIHYwLCByMTEpCisJYWRkZQlyMTIsIHIyOCwgcjEyCisJbGQJcjI3LCA0OChycCkKKwlzdGQJcjEyLCAyNChycCkKKwltYWRkbGQoCXIxMiwgcjksIHYxLCByMjYpCisJbWFkZGhkdShyMTEsIHI5LCB2MSwgcjI2KQorCWFkZGV4KAlyNSwgcjUsIHIzMSwgMCkKKwlhZGRpCXVwLCB1cCwgMzIKKwlhZGRpCXJwLCBycCwgMzIKKwliZG56CUwodG9wKQorCitMKGVuZCk6CWxkCXI5LCAwKHVwKQorCW1hZGRsZCgJcjI4LCByOCwgdjAsIHIxMCkKKwltYWRkaGR1KHIzMSwgcjgsIHYwLCByMTApCisJYWRkZQlyNSwgcjI5LCByNQorCXN0ZAlyNSwgMChycCkKKwltYWRkbGQoCXI1LCByOCwgdjEsIHIyNykKKwltYWRkaGR1KHIxMCwgcjgsIHYxLCByMjcpCitMKGNqKToJYWRkZXgoCXIxMiwgcjEyLCByMzAsIDApCisJbWFkZGxkKAlyMjksIHI5LCB2MCwgcjExKQorCW1hZGRoZHUocjMwLCByOSwgdjAsIHIxMSkKKwlhZGRlCXIxMiwgcjI4LCByMTIKKwlzdGQJcjEyLCA4KHJwKQorCW11bGxkCXIxMiwgcjksIHYxCisJbXVsaGR1CXIxMSwgcjksIHYxCisJYWRkZXgoCXI1LCByNSwgcjMxLCAwKQorCWFkZGUJcjUsIHIyOSwgcjUKKwlzdGQJcjUsIDE2KHJwKQorCWFkZGV4KAlyMTIsIHIxMiwgcjMwLCAwKQorCWFkZGUJcjEyLCByMTIsIHIxMAorCXN0ZAlyMTIsIDI0KHJwKQorCWxpCXI0LCAwCisJYWRkemUJcjUsIHIxMQorCWFkZGV4KAlyNSwgcjUsIHI0LCAwKQorCXN0ZAlyNSwgMzIocnApCisKKwljbXBkaQljcjAsIHIyMywgMAorCWFkZGkJcnAyLCBycDIsIDE2CisJYWRkaQl2cCwgdnAsIDE2CitMKGRvX291dGVyKToKKwlibmUJY3IwLCBMKG91dGVyKQorTChyZXQpOgorCWxkCXIyMiwgLTgwKHIxKQorCWxkCXIyMywgLTcyKHIxKQorCWxkCXIyNCwgLTY0KHIxKQorCWxkCXIyNSwgLTU2KHIxKQorCWxkCXIyNiwgLTQ4KHIxKQorCWxkCXIyNywgLTQwKHIxKQorCWxkCXIyOCwgLTMyKHIxKQorCWxkCXIyOSwgLTI0KHIxKQorCWxkCXIzMCwgLTE2KHIxKQorCWxkCXIzMSwgLTgocjEpCisJYmxyCitFUElMT0dVRSgpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9wOS9zcXJfYmFzZWNhc2UuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvbW9kZTY0L3A5L3Nxcl9iYXNlY2FzZS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ0ZmE2MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9wOS9zcXJfYmFzZWNhc2UuYXNtCkBAIC0wLDAgKzEsNTU1IEBACitkbmwgIFBvd2VyOSBtcG5fc3FyX2Jhc2VjYXNlLgorCitkbmwgIENvcHlyaWdodCAxOTk5LTIwMDEsIDIwMDMtMjAwNiwgMjAwOCwgMjAxNy0yMDE4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK2RubCAgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICAgICAgICAgICBjeWNsZXMvbGltYgorQyBQT1dFUjMvUFBDNjMwICAgICAgICAgIC0KK0MgUE9XRVI0L1BQQzk3MCAgICAgICAgICAtCitDIFBPV0VSNSAgICAgICAgICAgICAgICAgLQorQyBQT1dFUjYgICAgICAgICAgICAgICAgIC0KK0MgUE9XRVI3ICAgICAgICAgICAgICAgICAtCitDIFBPV0VSOCAgICAgICAgICAgICAgICAgLQorQyBQT1dFUjkgICAgICAgICAgICAgICAgIDEuNjIKKworQyBUT0RPCitDICAqIENvbXBsZXRlbHkgc2VwYXJhdGUgZXZuIGFuZCBvZGQgY29kZSBpbnRvIHR3byBvdXRlciBsb29wcy4gQWxzbyBjb25zaWRlcgorQyAgICB1bnJvbGxpbmcgdGhlc2UgdHdvIG91dGVyIGxvb3BzIGFuZCB0aGVyZWJ5IGVsaW1pbmF0ZSBhbGwgYnJhbmNoZXMuCitDICAqIEF2b2lkIHRoZSByZWxvYWRpbmcgb2YgdTEgYmVmb3JlIGV2ZXJ5IGxvb3Agc3RhcnQuCitDICAqIFJlZHVjZSByZWdpc3RlciB1c2FnZS4KK0MgICogQ29uc2lkZXIgZ2V0dGluZyByaWQgb2YgY3kgYW5kIGluc3RlYWQgbG9hZCAzIHUgbGltYnMsIHVzZSBhZGRjK2FkZGUrYWRkZS4KK0MgICogQ29uc2lkZXIgc2tld2luZyBjb25kaXRpb25hbCBhZGp1c3RtZW50cyB0byBhbGxvdyBtYXNrIGNyZWF0aW9uIHdpdGggc3ViZmUKK0MgICAgbGlrZSBpbiB0aGUgdW49MyBjb2RlLiBJdCBtaWdodCBzdHJlYW1saW5lIHRoZSBhZGp1c3RtZW50cyAob3Igbm90KS4KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywgYHIzJykKK2RlZmluZShgdXAnLCBgcjQnKQorZGVmaW5lKGB1bicsIGByNScpCisKK2RlZmluZShgdTAnLCBgcjAnKQorZGVmaW5lKGB1MScsIGByNycpCitkZWZpbmUoYHJwMicsIGByMjQnKQorZGVmaW5lKGB1cDInLCBgcjI1JykKK2RlZmluZShgY3knLCAgYHI2JykKKworZGVmaW5lKGBMU0hVMVUwJyxgCisJYWRkYwl1MCwgdTAsIHUwCisJYWRkZQl1MSwgdTEsIHUxCisJbGkJY3ksIDAKKwlhZGR6ZQljeSwgY3kKKycpCitkZWZpbmUoYExTSFUxVScsYAorCWFkZGMJdTAsIHUwLCB1MAorCWFkZAl1MCwgdTAsIGN5CisJYWRkZQl1MSwgdTEsIHUxCisJbGkJY3ksIDAKKwlhZGR6ZQljeSwgY3kKKycpCitkZWZpbmUoYExTSFUxVUYnLGAKKwlhZGRjCXUwLCB1MCwgdTAKKwlhZGQJdTAsIHUwLCBjeQorCWFkZGUJdTEsIHUxLCB1MQorJykKK2RlZmluZShgTFNIVTFVSEYnLGAKKwlhZGQJdTAsIHUwLCB1MAorCWFkZAl1MCwgdTAsIGN5CisnKQorQyBUaGVzZSBhcmUgY2xldmVyZXIgcmVwbGFjZW1lbnRzLCBidXQgdGhleSB0ZW5kIHRvIGxlYXZlIENBIHNldCwgZGlzdHVyYmluZworQyB0aGUgbWFpbiBhY2N1bXVsYXRpb24gY29kZSEgQnJlYWtpbmcgdGhhdCBmYWxzZSBkZXBlbmRlbmN5IG1pZ2h0IGhhdmUgYQorQyBwb3NpdGl2ZSBwZXJmb3JtYW5jZSBpbXBhY3QuIE5vdGUgdGhhdCB0aGUgc3ViZmUgaGVyZSByZXN1bHRzIGluIGEgbWFzayBmb3IKK0Mgb3VyIGFkanVzdG1lbnRzLgorZGVmaW5lKGB4TFNIVTFVMCcsYAorCWFkZGMJdTAsIHUwLCB1MAorCWFkZGUJdTEsIHUxLCB1MQorCXN1YmZlCWN5LCBjeSwgY3kKKycpCitkZWZpbmUoYHhMU0hVMVUnLGAKKwlzdWJmaWMJY3ksIGN5LCAwCisJYWRkZQl1MCwgdTAsIHUwCisJYWRkZQl1MSwgdTEsIHUxCisJc3ViZmUJY3ksIGN5LCBjeQorJykKK2RlZmluZShgeExTSFUxVScsYAorCXN1YmZpYwljeSwgY3ksIDAKKwlhZGRlCXUwLCB1MCwgdTAKKycpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fc3FyX2Jhc2VjYXNlKQorCWxkCXIwLCAwKHVwKQlDIG4gPSAxCisJbXVsbGQJcjgsIHIwLCByMAlDIHdlaWdodCAwCisJbXVsaGR1CXI5LCByMCwgcjAJQyB3ZWlnaHQgMQorCXN0ZAlyOCwgMChycCkKKwljbXBkaQljcjAsIHVuLCAyCisJYmdlCWNyMCwgTChnZTIpCisJc3RkCXI5LCA4KHJwKQorCWJscgorCitMKGdlMik6CWJndAljcjAsIEwoZ3QyKQorCWxkCXI2LCA4KHVwKQorCW11bGxkCXIxMCwgcjYsIHI2CUMgdTEgKiB1MQorCW11bGhkdQlyMTEsIHI2LCByNglDIHUxICogdTEKKwltdWxsZAlyNCwgcjYsIHIwCUMgdTEgKiB1MAorCW11bGhkdQlyNSwgcjYsIHIwCUMgdTEgKiB1MAorCWFkZGMJcjQsIHI0LCByNAorCWFkZGUJcjUsIHI1LCByNQorCWFkZHplCXIxMSwgcjExCisJYWRkYwlyOSwgcjksIHI0CisJYWRkZQlyMTAsIHIxMCwgcjUKKwlhZGR6ZQlyMTEsIHIxMQorCXN0ZAlyOSwgOChycCkKKwlzdGQJcjEwLCAxNihycCkKKwlzdGQJcjExLCAyNChycCkKKwlibHIKKworTChndDIpOgljbXBkaQljcjAsIHVuLCAzCisJYmd0CWNyMCwgTChndDMpCisJc3RkCXIzMCwgLTE2KHIxKQorCXN0ZAlyMzEsIC04KHIxKQorCXN1YmZvCXIxMiwgcjEyLCByMTIJCUMgY2xlYXIgT1YgKGFuZCByZXN1bHQgcmVnaXN0ZXIpCisJbGQJcjgsIDgocjQpCisJbXVsbGQJcjUsIHI4LCByOAkJQyBXMgorCW11bGhkdQlyMTAsIHI4LCByOAkJQyBXMworCXNyYWRpCXIxMSwgdTAsIDYzCQlDIENBVVRJT046IGNsb2JiZXJzIENBCisJYW5kCXIxMSwgcjExLCByOAkJQyBXMworCWFkZGMJdTAsIHUwLCB1MAorCWFkZGUJdTEsIHI4LCByOAorCXN1YmZlCXI2LCByNiwgcjYJCUMJbWFzaworCWxkCXI0LCAxNihyNCkJCUMgVzIKKwltdWxsZAlyMTIsIHI4LCB1MAkJQyBXMQl1MSB4IHUwCisJbXVsaGR1CXI4LCByOCwgdTAJCUMgVzIJdTEgeCB1MAorCW1hZGRsZCgJcjMxLCByNCwgdTAsIHIxMSkJQyBXMgorCW1hZGRoZHUocjMwLCByNCwgdTAsIHIxMSkJQyBXMworCWFuZGMJcjYsIHI0LCByNgkJQyBXNAorCWFkZGMJcjksIHIxMiwgcjkJCUMgVzEKKwlzdGQJcjksIDgocnApCQlDIFcxCisJbXVsbGQJcjksIHI0LCB1MQkJQyBXMworCW11bGhkdQlyMTEsIHI0LCB1MQkJQyBXNAorCWFkZGV4KAlyNSwgcjUsIHI4LCAwKQkJQyBXMgorCWFkZGUJcjUsIHIzMSwgcjUJCUMgVzIKKwlzdGQJcjUsIDE2KHJwKQkJQyBXMgorCW1hZGRsZCgJcjUsIHI0LCByNCwgcjYpCQlDIFc0CXUyXjIKKwltYWRkaGR1KHI2LCByNCwgcjQsIHI2KQkJQyBXNQl1Ml4yCisJYWRkZXgoCXI5LCByOSwgcjMwLCAwKQkJQyBXMworCWFkZGUJcjksIHI5LCByMTAJCUMgVzMKKwlzdGQJcjksIDI0KHJwKQkJQyBXMworCWFkZGUJcjUsIHI1LCByMTEJCUMgVzQKKwlhZGR6ZQlyNiwgcjYJCQlDIFc1CisJbGkJcjgsIDAKKwlhZGRleCgJcjUsIHI1LCByOCwgMCkJCUMgVzQKKwlzdGQJcjUsIDMyKHJwKQkJQyBXNAorCWFkZGV4KAlyNiwgcjYsIHI4LCAwKQkJQyBXNQorCXN0ZAlyNiwgNDAocnApCQlDIFc1CisJbGQJcjMwLCAtMTYocjEpCisJbGQJcjMxLCAtOChyMSkKKwlibHIKKworTChndDMpOglzdGQJcjIyLCAtODAocjEpCisJc3RkCXIyMywgLTcyKHIxKQorCXN0ZAlyMjQsIC02NChyMSkKKwlzdGQJcjI1LCAtNTYocjEpCisJc3RkCXIyNiwgLTQ4KHIxKQorCXN0ZAlyMjcsIC00MChyMSkKKwlzdGQJcjI4LCAtMzIocjEpCisJc3RkCXIyOSwgLTI0KHIxKQorCXN0ZAlyMzAsIC0xNihyMSkKKwlzdGQJcjMxLCAtOChyMSkKKworCW1yCXJwMiwgcnAKKwltcgl1cDIsIHVwCisJYWRkaQlyMjIsIHVuLCAtMQkJQyBjb3VudCBmb3IgbG9vcCBGSVhNRTogQWRqdXN0CisJc3ViZm8JcjAsIHIwLCByMAkJQyBjbGVhciBPViAoYW5kIHIwKQorCXJsZGljbAlyMCwgdW4sIDAsIDYzCQlDIHIwID0gdW4gJiAxCisJY21wZGkJY3I3LCByMCwgMAorCisJbGQJdTAsIDAodXAyKQorCWxkCXUxLCA4KHVwMikKKworCWNtcGRpCWNyNSwgcjIyLCA0CisJc3JkaQlyMzEsIHIyMiwgMgorCWFkZGkJcjIyLCByMjIsIC0yCisJbXRjdHIJcjMxCisKKwliZXEJY3I3LCBMKG0yX2V2bikKK0wobTJfb2RkKToKKwlybGRpY2wuCXIzMSwgcjIyLCA2MywgNjMJQyByMjIgJiAyCisJbXVsbGQJcjIzLCB1MCwgdTAKKwltdWxoZHUJcjEyLCB1MCwgdTAKKwltdWxsZAlyNSwgdTEsIHUxCisJbXVsaGR1CXIxMCwgdTEsIHUxCisKKwlzcmFkaQlyMTEsIHUwLCA2MworCWFuZAlyMTEsIHIxMSwgdTEKKworCUxTSFUxVTAKKworCWxkCXI4LCA4KHVwMikKKwlsZAlyOSwgMTYodXAyKQorCW11bGxkCXIyOCwgcjgsIHUwCQlDIFcJdTEgeCB1MAorCW11bGhkdQlyMzEsIHI4LCB1MAkJQyBXCXUxIHggdTAKKwlzdGQJcjIzLCAwKHJwMikKKworCWJuZQljcjAsIEwobTJfMTEpCitMKG0yXzAxKToKKwlhZGRpCXVwLCB1cDIsIDE2CisJYWRkaQlycCwgcnAyLCAwCisJYglMKG0yX2xvMikKK0wobTJfMTEpOgorCWFkZGkJdXAsIHVwMiwgMAorCWFkZGkJcnAsIHJwMiwgLTE2CisJYglMKG0yX2xvMCkKKworTChtMl9ldm4pOgorCXJsZGljbC4JcjMxLCByMjIsIDYzLCA2MwlDIHIyMiAmIDIKKwltdWxsZAlyMjMsIHUwLCB1MAorCW11bGhkdQlyNSwgdTAsIHUwCisJbXVsbGQJcjEyLCB1MSwgdTEKKwltdWxoZHUJcjExLCB1MSwgdTEKKworCXNyYWRpCXIxMCwgdTAsIDYzCisJYW5kCXIxMCwgcjEwLCB1MQorCisJTFNIVTFVMAorCisJbGQJcjksIDgodXAyKQorCWxkCXI4LCAxNih1cDIpCisJbXVsbGQJcjI5LCByOSwgdTAJCUMgVwl1MSB4IHUwCisJbXVsaGR1CXIzMCwgcjksIHUwCQlDIFcJdTEgeCB1MAorCXN0ZAlyMjMsIDAocnAyKQorCisJYmVxCWNyMCwgTChtMl8xMCkKK0wobTJfMDApOgorCWFkZGkJdXAsIHVwMiwgOAorCWFkZGkJcnAsIHJwMiwgLTgKKwliCUwobTJfbG8xKQorTChtMl8xMCk6CisJYWRkaQl1cCwgdXAyLCAyNAorCWFkZGkJcnAsIHJwMiwgOAorCWJsZQljcjUsIEwobTJfZW5kKQorCitMKG0yX3RvcCk6CisJbGQJcjksIDAodXApCisJbWFkZGxkKAlyMjgsIHI4LCB1MCwgcjEwKQorCW1hZGRoZHUocjMxLCByOCwgdTAsIHIxMCkKKwlhZGRlCXI1LCByMjksIHI1CisJc3RkCXI1LCAwKHJwKQorCW11bGxkCXI1LCByOCwgdTEKKwltdWxoZHUJcjEwLCByOCwgdTEKKwlhZGRleCgJcjEyLCByMTIsIHIzMCwgMCkKK0wobTJfbG8yKToKKwlsZAlyOCwgOCh1cCkKKwltYWRkbGQoCXIyOSwgcjksIHUwLCByMTEpCisJbWFkZGhkdShyMzAsIHI5LCB1MCwgcjExKQorCWFkZGUJcjEyLCByMjgsIHIxMgorCXN0ZAlyMTIsIDgocnApCisJbXVsbGQJcjEyLCByOSwgdTEKKwltdWxoZHUJcjExLCByOSwgdTEKKwlhZGRleCgJcjUsIHI1LCByMzEsIDApCitMKG0yX2xvMSk6CisJbGQJcjksIDE2KHVwKQorCW1hZGRsZCgJcjI4LCByOCwgdTAsIHIxMCkKKwltYWRkaGR1KHIzMSwgcjgsIHUwLCByMTApCisJYWRkZQlyNSwgcjI5LCByNQorCXN0ZAlyNSwgMTYocnApCisJbXVsbGQJcjUsIHI4LCB1MQorCW11bGhkdQlyMTAsIHI4LCB1MQorCWFkZGV4KAlyMTIsIHIxMiwgcjMwLCAwKQorTChtMl9sbzApOgorCWxkCXI4LCAyNCh1cCkKKwltYWRkbGQoCXIyOSwgcjksIHUwLCByMTEpCisJbWFkZGhkdShyMzAsIHI5LCB1MCwgcjExKQorCWFkZGUJcjEyLCByMjgsIHIxMgorCXN0ZAlyMTIsIDI0KHJwKQorCW11bGxkCXIxMiwgcjksIHUxCisJbXVsaGR1CXIxMSwgcjksIHUxCisJYWRkZXgoCXI1LCByNSwgcjMxLCAwKQorCWFkZGkJdXAsIHVwLCAzMgorCWFkZGkJcnAsIHJwLCAzMgorCWJkbnoJTChtMl90b3ApCisKK0wobTJfZW5kKToKKwlsZAlyOSwgMCh1cCkKKwltYWRkbGQoCXIyOCwgcjgsIHUwLCByMTApCisJbWFkZGhkdShyMzEsIHI4LCB1MCwgcjEwKQorCWFkZGUJcjUsIHIyOSwgcjUKKwlzdGQJcjUsIDAocnApCisJbXVsbGQJcjUsIHI4LCB1MQorCW11bGhkdQlyMTAsIHI4LCB1MQorCWIJTChjaikJCQlDIGp1bXAgdG8gYWRkbXVsXzIgdGFpbAorCitMKG91dGVyKToKKwlhZGRpCXVwMiwgdXAyLCAxNgorCWFkZGkJcnAyLCBycDIsIDMyCisKKwlsZAl1MCwgMCh1cDIpCisJbGQJdTEsIDgodXAyKQorCisJY21wZGkJY3I1LCByMjIsIDQKKwlzcmRpCXIzMSwgcjIyLCAyCisJYWRkaQlyMjIsIHIyMiwgLTIKKwltdGN0cglyMzEKKworCWxkCXIyNiwgMChycDIpCisJbGQJcjI3LCAxNihycDIpCisKKwlybGRpY2wuCXIzMSwgcjIyLCA2MywgNjMJQyByMjIgJiAyCisJYmVxCWNyNywgTChldm4pCisKK0wob2RkKToJbWFkZGxkKAlyMjMsIHUwLCB1MCwgcjI2KQlDIFcJdTJeMgorCW1hZGRoZHUocjEyLCB1MCwgdTAsIHIyNikJQyBXCXUyXjIKKwltYWRkbGQoCXI1LCB1MSwgdTEsIHIyNykJQyBXCXUzXjIKKwltYWRkaGR1KHIxMCwgdTEsIHUxLCByMjcpCUMgVwl1M14yCisJbGQJcjI2LCA4KHJwMikKKworCWxkCXI4LCAtOCh1cDIpCisJc3JhZGkJcjgsIHI4LCA2MwkJQyBDQVVUSU9OOiBjbG9iYmVycyBDQQorCWFuZAlyOCwgcjgsIHUwCisJc3JhZGkJcjExLCB1MCwgNjMJCUMgQ0FVVElPTjogY2xvYmJlcnMgQ0EKKwlhbmQJcjExLCByMTEsIHUxCisKKwlMU0hVMVUKKworCWFkZGMJcjIzLCByMjMsIHI4CisKKwlsZAlyOCwgOCh1cDIpCisJbGQJcjksIDE2KHVwMikKKwltYWRkbGQoCXIyOCwgcjgsIHUwLCByMjYpCUMgVwl1MyB4IHUyCisJbWFkZGhkdShyMzEsIHI4LCB1MCwgcjI2KQlDIFcJdTMgeCB1MgorCWxkCXIyNiwgMjQocnAyKQorCXN0ZAlyMjMsIDAocnAyKQkJQyBXMAorCisJYm5lCWNyMCwgTCgxMSkKK0woMDEpOgorCWFkZGkJdXAsIHVwMiwgMTYKKwlhZGRpCXJwLCBycDIsIDAKKwliCUwobG8yKQorTCgxMSk6CisJYWRkaQl1cCwgdXAyLCAwCisJYWRkaQlycCwgcnAyLCAtMTYKKwliCUwobG8wKQorCitMKGV2bik6CW1hZGRsZCgJcjIzLCB1MCwgdTAsIHIyNikJQyBXCXUyXjIKKwltYWRkaGR1KHI1LCB1MCwgdTAsIHIyNikJQyBXCXUyXjIKKwltYWRkbGQoCXIxMiwgdTEsIHUxLCByMjcpCUMgVwl1M14yCisJbWFkZGhkdShyMTEsIHUxLCB1MSwgcjI3KQlDIFcJdTNeMgorCWxkCXIyNywgOChycDIpCisKKwlsZAlyOSwgLTgodXAyKQorCXNyYWRpCXI5LCByOSwgNjMJCUMgQ0FVVElPTjogY2xvYmJlcnMgQ0EKKwlhbmQJcjksIHI5LCB1MAorCXNyYWRpCXIxMCwgdTAsIDYzCQlDIENBVVRJT046IGNsb2JiZXJzIENBCisJYW5kCXIxMCwgcjEwLCB1MQorCisJTFNIVTFVCisKKwlhZGRjCXIyMywgcjIzLCByOQorCisJbGQJcjksIDgodXAyKQorCWxkCXI4LCAxNih1cDIpCisJbWFkZGxkKAlyMjksIHI5LCB1MCwgcjI3KQlDIFcJdTMgeCB1MgorCW1hZGRoZHUocjMwLCByOSwgdTAsIHIyNykJQyBXCXUzIHggdTIKKwlsZAlyMjcsIDI0KHJwMikKKwlzdGQJcjIzLCAwKHJwMikJCUMgVzAKKworCWJlcQljcjAsIEwoMTApCitMKDAwKToKKwlhZGRpCXVwLCB1cDIsIDgKKwlhZGRpCXJwLCBycDIsIC04CisJYglMKGxvMSkKK0woMTApOgorCWFkZGkJdXAsIHVwMiwgMjQKKwlhZGRpCXJwLCBycDIsIDgKKwlibGUJY3I1LCBMKGVuZCkKKworTCh0b3ApOglsZAlyOSwgMCh1cCkKKwltYWRkbGQoCXIyOCwgcjgsIHUwLCByMTApCisJbWFkZGhkdShyMzEsIHI4LCB1MCwgcjEwKQorCWFkZGUJcjUsIHIyOSwgcjUKKwlsZAlyMjYsIDI0KHJwKQorCXN0ZAlyNSwgMChycCkKKwltYWRkbGQoCXI1LCByOCwgdTEsIHIyNykKKwltYWRkaGR1KHIxMCwgcjgsIHUxLCByMjcpCisJYWRkZXgoCXIxMiwgcjEyLCByMzAsIDApCitMKGxvMik6CWxkCXI4LCA4KHVwKQorCW1hZGRsZCgJcjI5LCByOSwgdTAsIHIxMSkKKwltYWRkaGR1KHIzMCwgcjksIHUwLCByMTEpCisJYWRkZQlyMTIsIHIyOCwgcjEyCisJbGQJcjI3LCAzMihycCkKKwlzdGQJcjEyLCA4KHJwKQorCW1hZGRsZCgJcjEyLCByOSwgdTEsIHIyNikKKwltYWRkaGR1KHIxMSwgcjksIHUxLCByMjYpCisJYWRkZXgoCXI1LCByNSwgcjMxLCAwKQorTChsbzEpOglsZAlyOSwgMTYodXApCisJbWFkZGxkKAlyMjgsIHI4LCB1MCwgcjEwKQorCW1hZGRoZHUocjMxLCByOCwgdTAsIHIxMCkKKwlhZGRlCXI1LCByMjksIHI1CisJbGQJcjI2LCA0MChycCkKKwlzdGQJcjUsIDE2KHJwKQorCW1hZGRsZCgJcjUsIHI4LCB1MSwgcjI3KQorCW1hZGRoZHUocjEwLCByOCwgdTEsIHIyNykKKwlhZGRleCgJcjEyLCByMTIsIHIzMCwgMCkKK0wobG8wKToJbGQJcjgsIDI0KHVwKQorCW1hZGRsZCgJcjI5LCByOSwgdTAsIHIxMSkKKwltYWRkaGR1KHIzMCwgcjksIHUwLCByMTEpCisJYWRkZQlyMTIsIHIyOCwgcjEyCisJbGQJcjI3LCA0OChycCkKKwlzdGQJcjEyLCAyNChycCkKKwltYWRkbGQoCXIxMiwgcjksIHUxLCByMjYpCisJbWFkZGhkdShyMTEsIHI5LCB1MSwgcjI2KQorCWFkZGV4KAlyNSwgcjUsIHIzMSwgMCkKKwlhZGRpCXVwLCB1cCwgMzIKKwlhZGRpCXJwLCBycCwgMzIKKwliZG56CUwodG9wKQorCitMKGVuZCk6CWxkCXI5LCAwKHVwKQorCW1hZGRsZCgJcjI4LCByOCwgdTAsIHIxMCkKKwltYWRkaGR1KHIzMSwgcjgsIHUwLCByMTApCisJYWRkZQlyNSwgcjI5LCByNQorCXN0ZAlyNSwgMChycCkKKwltYWRkbGQoCXI1LCByOCwgdTEsIHIyNykKKwltYWRkaGR1KHIxMCwgcjgsIHUxLCByMjcpCitMKGNqKToJYWRkZXgoCXIxMiwgcjEyLCByMzAsIDApCisJbWFkZGxkKAlyMjksIHI5LCB1MCwgcjExKQorCW1hZGRoZHUocjMwLCByOSwgdTAsIHIxMSkKKwlhZGRlCXIxMiwgcjI4LCByMTIKKwlzdGQJcjEyLCA4KHJwKQorCW11bGxkCXIxMiwgcjksIHUxCisJbXVsaGR1CXIxMSwgcjksIHUxCisJYWRkZXgoCXI1LCByNSwgcjMxLCAwKQorCWFkZGUJcjUsIHIyOSwgcjUKKwlzdGQJcjUsIDE2KHJwKQorCWFkZGV4KAlyMTIsIHIxMiwgcjMwLCAwKQorCWFkZGUJcjEyLCByMTIsIHIxMAorCXN0ZAlyMTIsIDI0KHJwKQorCWxpCXI0LCAwCisJYWRkemUJcjUsIHIxMQorCWFkZGV4KAlyNSwgcjUsIHI0LCAwKQorCXN0ZAlyNSwgMzIocnApCisJYmd0CWNyNSwgTChvdXRlcikKKworTChjb3JuZXIpOgorCWxkCXUwLCAxNih1cDIpCisJbGQJdTEsIDI0KHVwMikKKwlsZAlyMjYsIDMyKHJwMikKKwlibmUJY3I3LCBMKGNvcm5lcl9vZGQpCisKK0woY29ybmVyX2V2bik6CisJbGQJcjI3LCA0MChycDIpCisJbWFkZGxkKAlyMjMsIHUwLCB1MCwgcjI2KQlDIFcJdTJeMgorCW1hZGRoZHUocjUsIHUwLCB1MCwgcjI2KQlDIFcJdTJeMgorCW11bGxkCXIxMiwgdTEsIHUxCQlDIFcJdTNeMgorCW11bGhkdQlyMTEsIHUxLCB1MQkJQyBXCXUzXjIKKworCWxkCXI5LCA4KHVwMikKKwlzcmFkaQlyOSwgcjksIDYzCQlDIENBVVRJT046IGNsb2JiZXJzIENBCisJYW5kCXI5LCByOSwgdTAKKwlzcmFkaQlyMTAsIHUwLCA2MwkJQyBDQVVUSU9OOiBjbG9iYmVycyBDQQorCWFuZAlyMTAsIHIxMCwgdTEKKworCUxTSFUxVUhGCisKKwlhZGRjCXIyMywgcjIzLCByOQorCisJbGQJcjksIDI0KHVwMikKKwltYWRkbGQoCXIyOSwgcjksIHUwLCByMjcpCUMgVwl1MyB4IHUyCisJbWFkZGhkdShyMzAsIHI5LCB1MCwgcjI3KQlDIFcJdTMgeCB1MgorCXN0ZAlyMjMsIDMyKHJwMikKKwlhZGRlCXI1LCByMjksIHI1CisJc3RkCXI1LCA0MChycDIpCisJYWRkZXgoCXIxMiwgcjEyLCByMzAsIDApCisJYWRkZQlyMTIsIHIxMiwgcjEwCQlDIFcJRklYTUUgY2FuIHRoaXMgY28/CisJc3RkCXIxMiwgNDgocnAyKQorCWxpCXI0LCAwCisJYWRkZXgoCXI1LCByMTEsIHI0LCAwKQorCWFkZHplCXI1LCByNQorCXN0ZAlyNSwgNTYocnAyKQorCWIJTChyZXQpCisKK0woY29ybmVyX29kZCk6CisJbGQJcjI3LCA0OChycDIpCisJbWFkZGxkKAlyMjMsIHUwLCB1MCwgcjI2KQlDIFcJdTJeMgorCW1hZGRoZHUocjEyLCB1MCwgdTAsIHIyNikJQyBXCXUyXjIKKwltYWRkbGQoCXI1LCB1MSwgdTEsIHIyNykJQyBXCXUzXjIKKwltYWRkaGR1KHIxMCwgdTEsIHUxLCByMjcpCUMgVwl1M14yCisJbGQJcjI2LCA0MChycDIpCisKKwlsZAlyOCwgOCh1cDIpCisJc3JhZGkJcjgsIHI4LCA2MwkJQyBDQVVUSU9OOiBjbG9iYmVycyBDQQorCWFuZAlyOCwgcjgsIHUwCisJc3JhZGkJcjExLCB1MCwgNjMJCUMgQ0FVVElPTjogY2xvYmJlcnMgQ0EKKwlhbmQJcjExLCByMTEsIHUxCisKKwlMU0hVMVVGCisKKwlhZGRjCXIyMywgcjIzLCByOAorCisJbGQJcjgsIDI0KHVwMikKKwlsZAlyOSwgMzIodXAyKQorCW1hZGRsZCgJcjI4LCByOCwgdTAsIHIyNikJQyBXCXUzIHggdTIKKwltYWRkaGR1KHIzMSwgcjgsIHUwLCByMjYpCUMgVwl1MyB4IHUyCisJc3RkCXIyMywgMzIocnAyKQorCW1hZGRsZCgJcjI5LCByOSwgdTAsIHIxMSkKKwltYWRkaGR1KHIzMCwgcjksIHUwLCByMTEpCisJYWRkZQlyMTIsIHIyOCwgcjEyCisJc3RkCXIxMiwgNDAocnAyKQorCW11bGxkCXIxMiwgcjksIHUxCisJbXVsaGR1CXIxMSwgcjksIHUxCisJYWRkZXgoCXI1LCByNSwgcjMxLCAwKQorCWFkZGUJcjUsIHIyOSwgcjUKKwlzdGQJcjUsIDQ4KHJwMikKKwlhZGRleCgJcjEyLCByMTIsIHIzMCwgMCkKKwlhZGRlCXIxMiwgcjEyLCByMTAKKwlzdGQJcjEyLCA1NihycDIpCisJbXVsbGQJcjIzLCByOSwgcjkJCUMgVwl1Ml4yCisJbXVsaGR1CXIxMiwgcjksIHI5CQlDIFcJdTJeMgorCWFkZGUJcjIzLCByMjMsIHIxMQorCWFkZHplCXIxMiwgcjEyCisJc3JhZGkJcjQsIHI4LCA2MwkJQyBDQVVUSU9OOiBjbG9iYmVycyBDQQorCWFuZAlyNCwgcjQsIHI5CisJYWRkZXgoCXIyMywgcjIzLCByNCwgMCkKKwlzdGQJcjIzLCA2NChycDIpCisJbGkJcjQsIDAKKwlhZGRleCgJcjEyLCByMTIsIHI0LCAwKQorCXN0ZAlyMTIsIDcyKHJwMikKKworTChyZXQpOglsZAlyMjIsIC04MChyMSkKKwlsZAlyMjMsIC03MihyMSkKKwlsZAlyMjQsIC02NChyMSkKKwlsZAlyMjUsIC01NihyMSkKKwlsZAlyMjYsIC00OChyMSkKKwlsZAlyMjcsIC00MChyMSkKKwlsZAlyMjgsIC0zMihyMSkKKwlsZAlyMjksIC0yNChyMSkKKwlsZAlyMzAsIC0xNihyMSkKKwlsZAlyMzEsIC04KHIxKQorCWJscgorRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvcnNoMWFvcnNfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvcnNoMWFvcnNfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY1N2JkZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9yc2gxYW9yc19uLmFzbQpAQCAtMCwwICsxLDE3MyBAQAorZG5sICBQb3dlclBDLTY0IG1wbl9yc2gxYWRkX24sIG1wbl9yc2gxc3ViX24KKworZG5sICBDb3B5cmlnaHQgMjAwMywgMjAwNSwgMjAxMCwgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCQkgICBjeWNsZXMvbGltYgorQyBQT1dFUjMvUFBDNjMwCQkgPworQyBQT1dFUjQvUFBDOTcwCQkgMi45CitDIFBPV0VSNQkJID8KK0MgUE9XRVI2CQkgMy41CitDIFBPV0VSNwkJIDIuMjUKKworZGVmaW5lKGBycCcsIGByMycpCitkZWZpbmUoYHVwJywgYHI0JykKK2RlZmluZShgdnAnLCBgcjUnKQorZGVmaW5lKGBuJywgIGByNicpCisKK2lmZGVmKGBPUEVSQVRJT05fcnNoMWFkZF9uJywgYAorICBkZWZpbmUoYEFERFNVQkMnLAlgYWRkYycpCisgIGRlZmluZShgQUREU1VCRScsCWBhZGRlJykKKyAgZGVmaW5lKElOSVRDWSwJYGFkZGljCSQxLCByMSwgMCcpCisgIGRlZmluZShgZnVuYycsCW1wbl9yc2gxYWRkX24pJykKK2lmZGVmKGBPUEVSQVRJT05fcnNoMXN1Yl9uJywgYAorICBkZWZpbmUoYEFERFNVQkMnLAlgc3ViZmMnKQorICBkZWZpbmUoYEFERFNVQkUnLAlgc3ViZmUnKQorICBkZWZpbmUoSU5JVENZLAlgYWRkaWMJJDEsIHIxLCAtMScpCisgIGRlZmluZShgZnVuYycsCW1wbl9yc2gxc3ViX24pJykKKworZGVmaW5lKGBzMCcsIGByOScpCitkZWZpbmUoYHMxJywgYHI3JykKK2RlZmluZShgeDAnLCBgcjAnKQorZGVmaW5lKGB4MScsIGByMTInKQorZGVmaW5lKGB1MCcsIGByOCcpCitkZWZpbmUoYHYwJywgYHIxMCcpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX3JzaDFhZGRfbiBtcG5fcnNoMXN1Yl9uKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUoZnVuYykKKwlsZAl1MCwgMCh1cCkKKwlsZAl2MCwgMCh2cCkKKworCWNtcGRpCWNyNiwgbiwgMgorCisJYWRkaQlyMCwgbiwgMQorCXNyZGkJcjAsIHIwLCAyCisJbXRjdHIJcjAJCQlDIGNvcHkgc2l6ZSB0byBjb3VudCByZWdpc3RlcgorCisJYW5kaS4JcjAsIG4sIDEKKwlibmUJY3IwLCBMKGJ4MSkKKworTChieDApOglBRERTVUJDCXgxLCB2MCwgdTAKKwlsZAl1MCwgOCh1cCkKKwlsZAl2MCwgOCh2cCkKKwlBRERTVUJFCXgwLCB2MCwgdTAKKwlibGUJY3I2LCBMKG4yKQorCWxkCXUwLCAxNih1cCkKKwlsZAl2MCwgMTYodnApCisJc3JkaQlzMCwgeDEsIDEKKwlybGRpY2wJcjExLCB4MSwgMCwgNjMJCUMgcmV0dXJuIHZhbHVlCisJQUREU1VCRQl4MSwgdjAsIHUwCisJYW5kaS4JbiwgbiwgMgorCWJuZQljcjAsIEwoYjEwKQorTChiMDApOglhZGRpCXJwLCBycCwgLTI0CisJYglMKGxvMCkKK0woYjEwKToJYWRkaQl1cCwgdXAsIDE2CisJYWRkaQl2cCwgdnAsIDE2CisJYWRkaQlycCwgcnAsIC04CisJYglMKGxvMikKKworCUFMSUdOKDE2KQorTChieDEpOglBRERTVUJDCXgwLCB2MCwgdTAKKwlibGUJY3I2LCBMKG4xKQorCWxkCXUwLCA4KHVwKQorCWxkCXYwLCA4KHZwKQorCUFERFNVQkUJeDEsIHYwLCB1MAorCWxkCXUwLCAxNih1cCkKKwlsZAl2MCwgMTYodnApCisJc3JkaQlzMSwgeDAsIDEKKwlybGRpY2wJcjExLCB4MCwgMCwgNjMJCUMgcmV0dXJuIHZhbHVlCisJQUREU1VCRQl4MCwgdjAsIHUwCisJYW5kaS4JbiwgbiwgMgorCWJuZQljcjAsIEwoYjExKQorTChiMDEpOglhZGRpCXVwLCB1cCwgOAorCWFkZGkJdnAsIHZwLCA4CisJYWRkaQlycCwgcnAsIC0xNgorCWIJTChsbzEpCitMKGIxMSk6CWFkZGkJdXAsIHVwLCAyNAorCWFkZGkJdnAsIHZwLCAyNAorCWJkeglMKGVuZCkKKworCUFMSUdOKDMyKQorTCh0b3ApOglsZAl1MCwgMCh1cCkKKwlsZAl2MCwgMCh2cCkKKwlzcmRpCXMwLCB4MSwgMQorCXJsZGltaQlzMSwgeDEsIDYzLCAwCisJc3RkCXMxLCAwKHJwKQorCUFERFNVQkUJeDEsIHYwLCB1MAorTChsbzIpOglsZAl1MCwgOCh1cCkKKwlsZAl2MCwgOCh2cCkKKwlzcmRpCXMxLCB4MCwgMQorCXJsZGltaQlzMCwgeDAsIDYzLCAwCisJc3RkCXMwLCA4KHJwKQorCUFERFNVQkUJeDAsIHYwLCB1MAorTChsbzEpOglsZAl1MCwgMTYodXApCisJbGQJdjAsIDE2KHZwKQorCXNyZGkJczAsIHgxLCAxCisJcmxkaW1pCXMxLCB4MSwgNjMsIDAKKwlzdGQJczEsIDE2KHJwKQorCUFERFNVQkUJeDEsIHYwLCB1MAorTChsbzApOglsZAl1MCwgMjQodXApCisJbGQJdjAsIDI0KHZwKQorCXNyZGkJczEsIHgwLCAxCisJcmxkaW1pCXMwLCB4MCwgNjMsIDAKKwlzdGQJczAsIDI0KHJwKQorCUFERFNVQkUJeDAsIHYwLCB1MAorCWFkZGkJdXAsIHVwLCAzMgorCWFkZGkJdnAsIHZwLCAzMgorCWFkZGkJcnAsIHJwLCAzMgorCWJkbnoJTCh0b3ApCisKK0woZW5kKToJc3JkaQlzMCwgeDEsIDEKKwlybGRpbWkJczEsIHgxLCA2MywgMAorCXN0ZAlzMSwgMChycCkKK0woY2oyKToJc3JkaQlzMSwgeDAsIDEKKwlybGRpbWkJczAsIHgwLCA2MywgMAorCXN0ZAlzMCwgOChycCkKK0woY2oxKToJQUREU1VCRQl4MSwgeDEsIHgxCQlDIHBzZXVkby1kZXBlbmRzIG9uIHgxCisJcmxkaW1pCXMxLCB4MSwgNjMsIDAKKwlzdGQJczEsIDE2KHJwKQorCW1yCXIzLCByMTEKKwlibHIKKworTChuMSk6CXNyZGkJczEsIHgwLCAxCisJcmxkaWNsCXIxMSwgeDAsIDAsIDYzCQlDIHJldHVybiB2YWx1ZQorCUFERFNVQkUJeDEsIHgxLCB4MQkJQyBwc2V1ZG8tZGVwZW5kcyBvbiB4MQorCXJsZGltaQlzMSwgeDEsIDYzLCAwCisJc3RkCXMxLCAwKHJwKQorCW1yCXIzLCByMTEKKwlibHIKKworTChuMik6CWFkZGkJcnAsIHJwLCAtOAorCXNyZGkJczAsIHgxLCAxCisJcmxkaWNsCXIxMSwgeDEsIDAsIDYzCQlDIHJldHVybiB2YWx1ZQorCWIJTChjajIpCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvc3FyX2Jhc2VjYXNlLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L21vZGU2NC9zcXJfYmFzZWNhc2UuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NmJiODgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9tb2RlNjQvc3FyX2Jhc2VjYXNlLmFzbQpAQCAtMCwwICsxLDg2MyBAQAorZG5sICBQb3dlclBDLTY0IG1wbl9zcXJfYmFzZWNhc2UuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqb3JuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAxOTk5LTIwMDEsIDIwMDMtMjAwNiwgMjAwOCwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitkbmwgIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgUE9XRVIzL1BQQzYzMCAgICAgICAgIDYtMTgKK0MgUE9XRVI0L1BQQzk3MCAgICAgICAgICA4CitDIFBPV0VSNSAgICAgICAgICAgICAgICAgOAorQyBQT1dFUjYgICAgICAgICAgICAgICAgMTYuMjUKK0MgUE9XRVI3ICAgICAgICAgICAgICAgICAzLjc3CisKK0MgTk9URVMKK0MgICogVGhpcyBpcyB2ZXJ5IGNydWRlLCBjbGVhbnVwIQorQyAgKiBUcnkgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgbmVlZGVkIGxpdmUgcmVnaXN0ZXJzLgorQyAgKiBSZXdyaXRlIGZvciBQT1dFUjYgdG8gdXNlIDggY29uc2VjdXRpdmUgbXVscywgbm90IDIgZ3JvdXBzIG9mIDQuICBUaGUKK0MgICAgY29zdCB3aWxsIGJlIG1vcmUgbGl2ZSByZWdpc3RlcnMuCitDICAqIFJld3JpdGUgZm9yIFBPV0VSNyB0byB1c2UgYWRkbXVsXzIgYnVpbGRpbmcgYmxvY2tzOyB0aGlzIHdpbGwgcmVkdWNlIGNvZGUKK0MgICAgc2l6ZSBhIGxvdCBhbmQgc3BlZWQgdGhpbmdzIHVwIHBlcmhhcHMgMjUlLgorQyAgKiBVc2UgY29tcHV0ZWQgZ290byBpbiBvcmRlciB0byBjb21wcmVzcyB0aGUgY29kZS4KK0MgICogSW1wbGVtZW50IGEgbGFyZ2VyIGZpbmFsIGNvcm5lci4KK0MgICogU2NoZWR1bGUgY2FsbGVlLXNhdmVzIHJlZ2lzdGVyIHNhdmVzIGludG8gb3RoZXIgaW5zbnMuICBUaGlzIGNvdWxkIHNhdmUKK0MgICAgYWJvdXQgNSBjeWNsZXMvY2FsbC4gIChXZSBjYW5ub3QgYW5hbG9nb3VzbHkgb3B0aW1pc2UgdGhlIHJlc3RvcmVzLCBzaW5jZQorQyAgICB0aGUgc3FyX2RpYWdfYWRkbHNoMSBsb29wIGhhcyBubyB3aW5kLWRvd24gY29kZSBhcyBjdXJyZW50bHkgd3JpdHRlbi4pCitDICAqIFNob3VsZCB0aGUgYWx0ZXJuYXRpbmcgc3RkL2FkZGUgc2VxdWVuY2VzIGJlIHNwbGl0PyAgU29tZSBwaXBlbGluZXMgaGFuZGxlCitDICAgIGFkZGUgcG9vcmx5LCBhbmQgbWlnaHQgc2VxdWVudGlhbGlzZSBhbGwgdGhlc2UgaW5zdHJ1Y3Rpb25zLgorQyAgKiBUaGUgc3FyX2RpYWdfYWRkbHNoMSBsb29wIHdhcyB3cml0dGVuIGZvciBQT1dFUjYgYW5kIGl0cyBwcmVmZXJlbmNlcyBmb3IKK0MgICAgYWRqYWNlbnQgaW50ZWdlciBtdWx0aXBseSBpbnNucy4gIEV4Y2VwdCBmb3IgdGhlIG11bHRpcGx5IGluc25zLCB0aGUgY29kZQorQyAgICB3YXMgbm90IGNhcmVmdWxseSBvcHRpbWlzZWQgZm9yIFBPV0VSNiBvciBhbnkgb3RoZXIgQ1BVLgorQyAgKiBQZXJmb3JtIGNyb3NzLWp1bXBpbmcgaW4gc3FyX2RpYWdfYWRkbHNoMSdzIGZlZWQtaW4gY29kZSwgaW50byB0aGUgbG9vcC4KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywgYHIzJykKK2RlZmluZShgdXAnLCBgcjQnKQorZGVmaW5lKGBuJywgIGByNScpCisKK2RlZmluZShgcnBfb3V0ZXInLCBgcjI1JykKK2RlZmluZShgdXBfb3V0ZXInLCBgcjIxJykKK2RlZmluZShgcnBfc2F2ZWQnLCBgcjIyJykKK2RlZmluZShgdXBfc2F2ZWQnLCBgcjIzJykKK2RlZmluZShgbl9zYXZlZCcsICBgcjI0JykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9zcXJfYmFzZWNhc2UpCisJY21wZGkJY3IwLCBuLCAyCisJYmdlCWNyMCwgTChnZTIpCisJbGQJcjUsIDAodXApCUMgbiA9IDEKKwlub3AKKwltdWxsZAlyOCwgcjUsIHI1CUMgd2VpZ2h0IDAKKwltdWxoZHUJcjksIHI1LCByNQlDIHdlaWdodCAxCisJc3RkCXI4LCAwKHJwKQorCXN0ZAlyOSwgOChycCkKKwlibHIKKwlBTElHTigxNikKK0woZ2UyKToJYmd0CWNyMCwgTChndDIpCisJbGQJcjAsIDAodXApCUMgbiA9IDIKKwlub3AKKwltdWxsZAlyOCwgcjAsIHIwCUMgdTAgKiB1MAorCW11bGhkdQlyOSwgcjAsIHIwCUMgdTAgKiB1MAorCWxkCXI2LCA4KHVwKQorCW11bGxkCXIxMCwgcjYsIHI2CUMgdTEgKiB1MQorCW11bGhkdQlyMTEsIHI2LCByNglDIHUxICogdTEKKwltdWxsZAlyNCwgcjYsIHIwCUMgdTEgKiB1MAorCW11bGhkdQlyNSwgcjYsIHIwCUMgdTEgKiB1MAorCWFkZGMJcjQsIHI0LCByNAorCWFkZGUJcjUsIHI1LCByNQorCWFkZHplCXIxMSwgcjExCisJYWRkYwlyOSwgcjksIHI0CisJYWRkZQlyMTAsIHIxMCwgcjUKKwlhZGR6ZQlyMTEsIHIxMQorCXN0ZAlyOCwgMChycCkKKwlzdGQJcjksIDgocnApCisJc3RkCXIxMCwgMTYocnApCisJc3RkCXIxMSwgMjQocnApCisJYmxyCisKKwlBTElHTigxNikKK0woZ3QyKToJc3RkCXIzMSwgIC04KHIxKQorCXN0ZAlyMzAsIC0xNihyMSkKKwlzdGQJcjI5LCAtMjQocjEpCisJc3RkCXIyOCwgLTMyKHIxKQorCXN0ZAlyMjcsIC00MChyMSkKKwlzdGQJcjI2LCAtNDgocjEpCisJc3RkCXIyNSwgLTU2KHIxKQorCXN0ZAlyMjQsIC02NChyMSkKKwlzdGQJcjIzLCAtNzIocjEpCisJc3RkCXIyMiwgLTgwKHIxKQorCXN0ZAlyMjEsIC04OChyMSkKKworCW1yCXJwX3NhdmVkLCBycAorCW1yCXVwX3NhdmVkLCB1cAorCW1yCW5fc2F2ZWQsIG4KKwltcglycF9vdXRlciwgcnAKKwltcgl1cF9vdXRlciwgdXAKKworCXJsZGljbC4JcjAsIG4sIDAsNjIJQyByMCA9IG4gJiAzLCBzZXQgY3IwCisJY21wZGkJY3I2LCByMCwgMgorCWFkZGljCXI3LCBuLCAyCUMgY29tcHV0ZSBjb3VudC4uLgorCXNyZGkJcjcsIHI3LCAyCUMgLi4uZm9yIGN0cgorCW10Y3RyCXI3CQlDIGNvcHkgY291bnQgaW50byBjdHIKKwliZXEtCWNyMCwgTChiMCkKKwlibHQtCWNyNiwgTChiMSkKKwliZXEtCWNyNiwgTChiMikKKworTChiMyk6CWxkCXI2LCAwKHVwKQorCWxkCXI5LCA4KHVwKQorCWxkCXIyNywgMTYodXApCisJYWRkaQl1cCwgdXAsIDI0CisJbGkJcjEyLCAwCQlDIGNhcnJ5IGxpbWIKKwliZHoJTChlbTMpCisKKwlBTElHTigxNikKK0wodG0zKToJbXVsbGQJcjAsIHI5LCByNgorCW11bGhkdQlyMjYsIHI5LCByNgorCW11bGxkCXI3LCByMjcsIHI2CisJbXVsaGR1CXI4LCByMjcsIHI2CisJbGQJcjksIDAodXApCisJbGQJcjI3LCA4KHVwKQorCWFkZGUJcjAsIHIwLCByMTIKKwlhZGRlCXI3LCByNywgcjI2CisJbXVsbGQJcjI2LCByOSwgcjYKKwltdWxoZHUJcjEwLCByOSwgcjYKKwltdWxsZAlyMTEsIHIyNywgcjYKKwltdWxoZHUJcjEyLCByMjcsIHI2CisJbGQJcjksIDE2KHVwKQorCWxkCXIyNywgMjQodXApCisJc3RkCXIwLCA4KHJwKQorCWFkZGUJcjI2LCByMjYsIHI4CisJc3RkCXI3LCAxNihycCkKKwlhZGRlCXIxMSwgcjExLCByMTAKKwlzdGQJcjI2LCAyNChycCkKKwlhZGRpCXVwLCB1cCwgMzIKKwlzdGQJcjExLCAzMihycCkKKwlhZGRpCXJwLCBycCwgMzIKKwliZG56CUwodG0zKQorCitMKGVtMyk6CW11bGxkCXIwLCByOSwgcjYKKwltdWxoZHUJcjI2LCByOSwgcjYKKwltdWxsZAlyNywgcjI3LCByNgorCW11bGhkdQlyOCwgcjI3LCByNgorCWFkZGUJcjAsIHIwLCByMTIKKwlhZGRlCXI3LCByNywgcjI2CisJc3RkCXIwLCA4KHJwKQorCXN0ZAlyNywgMTYocnApCisJYWRkemUJcjgsIHI4CisJc3RkCXI4LCAyNChycCkKKwlhZGRpCW4sIG4sIDIKKwliCUwob3V0ZXJfbG9vcCkKKworTChiMCk6CWxkCXI2LCAwKHVwKQorCWxkCXIyNywgOCh1cCkKKwltdWxsZAlyNywgcjI3LCByNgorCW11bGhkdQlyMTIsIHIyNywgcjYKKwlzdGQJcjcsIDgocnApCisJYWRkaQlycCwgcnAsIDgKKwlsZAlyOSwgMTYodXApCisJbGQJcjI3LCAyNCh1cCkKKwlhZGRpCXVwLCB1cCwgMzIKKwliZHoJTChlbTApCisKKwlBTElHTigxNikKK0wodG0wKToJbXVsbGQJcjAsIHI5LCByNgorCW11bGhkdQlyMjYsIHI5LCByNgorCW11bGxkCXI3LCByMjcsIHI2CisJbXVsaGR1CXI4LCByMjcsIHI2CisJbGQJcjksIDAodXApCisJbGQJcjI3LCA4KHVwKQorCWFkZGUJcjAsIHIwLCByMTIKKwlhZGRlCXI3LCByNywgcjI2CisJbXVsbGQJcjI2LCByOSwgcjYKKwltdWxoZHUJcjEwLCByOSwgcjYKKwltdWxsZAlyMTEsIHIyNywgcjYKKwltdWxoZHUJcjEyLCByMjcsIHI2CisJbGQJcjksIDE2KHVwKQorCWxkCXIyNywgMjQodXApCisJc3RkCXIwLCA4KHJwKQorCWFkZGUJcjI2LCByMjYsIHI4CisJc3RkCXI3LCAxNihycCkKKwlhZGRlCXIxMSwgcjExLCByMTAKKwlzdGQJcjI2LCAyNChycCkKKwlhZGRpCXVwLCB1cCwgMzIKKwlzdGQJcjExLCAzMihycCkKKwlhZGRpCXJwLCBycCwgMzIKKwliZG56CUwodG0wKQorCitMKGVtMCk6CW11bGxkCXIwLCByOSwgcjYKKwltdWxoZHUJcjI2LCByOSwgcjYKKwltdWxsZAlyNywgcjI3LCByNgorCW11bGhkdQlyOCwgcjI3LCByNgorCWFkZGUJcjAsIHIwLCByMTIKKwlhZGRlCXI3LCByNywgcjI2CisJc3RkCXIwLCA4KHJwKQorCXN0ZAlyNywgMTYocnApCisJYWRkemUJcjgsIHI4CisJc3RkCXI4LCAyNChycCkKKwlhZGRpCW4sIG4sIDIKKwliCUwob3V0ZXJfbG9vcF9lbnRfMikKKworTChiMSk6CWxkCXI2LCAwKHVwKQorCWxkCXI5LCA4KHVwKQorCWxkCXIyNywgMTYodXApCisJbXVsbGQJcjAsIHI5LCByNgorCW11bGhkdQlyMjYsIHI5LCByNgorCW11bGxkCXI3LCByMjcsIHI2CisJbXVsaGR1CXIxMiwgcjI3LCByNgorCWFkZGMJcjcsIHI3LCByMjYKKwlzdGQJcjAsIDgocnApCisJc3RkCXI3LCAxNihycCkKKwlhZGRpCXJwLCBycCwgMTYKKwlsZAlyOSwgMjQodXApCisJbGQJcjI3LCAzMih1cCkKKwlhZGRpCXVwLCB1cCwgNDAKKwliZHoJTChlbTEpCisKKwlBTElHTigxNikKK0wodG0xKToJbXVsbGQJcjAsIHI5LCByNgorCW11bGhkdQlyMjYsIHI5LCByNgorCW11bGxkCXI3LCByMjcsIHI2CisJbXVsaGR1CXI4LCByMjcsIHI2CisJbGQJcjksIDAodXApCisJbGQJcjI3LCA4KHVwKQorCWFkZGUJcjAsIHIwLCByMTIKKwlhZGRlCXI3LCByNywgcjI2CisJbXVsbGQJcjI2LCByOSwgcjYKKwltdWxoZHUJcjEwLCByOSwgcjYKKwltdWxsZAlyMTEsIHIyNywgcjYKKwltdWxoZHUJcjEyLCByMjcsIHI2CisJbGQJcjksIDE2KHVwKQorCWxkCXIyNywgMjQodXApCisJc3RkCXIwLCA4KHJwKQorCWFkZGUJcjI2LCByMjYsIHI4CisJc3RkCXI3LCAxNihycCkKKwlhZGRlCXIxMSwgcjExLCByMTAKKwlzdGQJcjI2LCAyNChycCkKKwlhZGRpCXVwLCB1cCwgMzIKKwlzdGQJcjExLCAzMihycCkKKwlhZGRpCXJwLCBycCwgMzIKKwliZG56CUwodG0xKQorCitMKGVtMSk6CW11bGxkCXIwLCByOSwgcjYKKwltdWxoZHUJcjI2LCByOSwgcjYKKwltdWxsZAlyNywgcjI3LCByNgorCW11bGhkdQlyOCwgcjI3LCByNgorCWFkZGUJcjAsIHIwLCByMTIKKwlhZGRlCXI3LCByNywgcjI2CisJc3RkCXIwLCA4KHJwKQorCXN0ZAlyNywgMTYocnApCisJYWRkemUJcjgsIHI4CisJc3RkCXI4LCAyNChycCkKKwlhZGRpCW4sIG4sIDIKKwliCUwob3V0ZXJfbG9vcF9lbnRfMykKKworTChiMik6CWFkZGkJcjcsIHI3LCAtMQlDIEZJWE1FCisJbXRjdHIJcjcJCUMgRklYTUUKKwlsZAlyNiwgMCh1cCkKKwlsZAlyOSwgOCh1cCkKKwlsZAlyMjcsIDE2KHVwKQorCW11bGxkCXIwLCByOSwgcjYKKwltdWxoZHUJcjI2LCByOSwgcjYKKwltdWxsZAlyNywgcjI3LCByNgorCW11bGhkdQlyOCwgcjI3LCByNgorCWxkCXI5LCAyNCh1cCkKKwltdWxsZAlyMTEsIHI5LCByNgorCW11bGhkdQlyMTAsIHI5LCByNgorCWFkZGMJcjcsIHI3LCByMjYKKwlhZGRlCXIxMSwgcjExLCByOAorCWFkZHplCXIxMiwgcjEwCisJc3RkCXIwLCA4KHJwKQorCXN0ZAlyNywgMTYocnApCisJc3RkCXIxMSwgMjQocnApCisJYWRkaQlycCwgcnAsIDI0CisJbGQJcjksIDMyKHVwKQorCWxkCXIyNywgNDAodXApCisJYWRkaQl1cCwgdXAsIDQ4CisJYmR6CUwoZW0yKQorCisJQUxJR04oMTYpCitMKHRtMik6CW11bGxkCXIwLCByOSwgcjYKKwltdWxoZHUJcjI2LCByOSwgcjYKKwltdWxsZAlyNywgcjI3LCByNgorCW11bGhkdQlyOCwgcjI3LCByNgorCWxkCXI5LCAwKHVwKQorCWxkCXIyNywgOCh1cCkKKwlhZGRlCXIwLCByMCwgcjEyCisJYWRkZQlyNywgcjcsIHIyNgorCW11bGxkCXIyNiwgcjksIHI2CisJbXVsaGR1CXIxMCwgcjksIHI2CisJbXVsbGQJcjExLCByMjcsIHI2CisJbXVsaGR1CXIxMiwgcjI3LCByNgorCWxkCXI5LCAxNih1cCkKKwlsZAlyMjcsIDI0KHVwKQorCXN0ZAlyMCwgOChycCkKKwlhZGRlCXIyNiwgcjI2LCByOAorCXN0ZAlyNywgMTYocnApCisJYWRkZQlyMTEsIHIxMSwgcjEwCisJc3RkCXIyNiwgMjQocnApCisJYWRkaQl1cCwgdXAsIDMyCisJc3RkCXIxMSwgMzIocnApCisJYWRkaQlycCwgcnAsIDMyCisJYmRueglMKHRtMikKKworTChlbTIpOgltdWxsZAlyMCwgcjksIHI2CisJbXVsaGR1CXIyNiwgcjksIHI2CisJbXVsbGQJcjcsIHIyNywgcjYKKwltdWxoZHUJcjgsIHIyNywgcjYKKwlhZGRlCXIwLCByMCwgcjEyCisJYWRkZQlyNywgcjcsIHIyNgorCXN0ZAlyMCwgOChycCkKKwlzdGQJcjcsIDE2KHJwKQorCWFkZHplCXI4LCByOAorCXN0ZAlyOCwgMjQocnApCisJYWRkaQluLCBuLCAyCisJYglMKG91dGVyX2xvb3BfZW50XzApCisKKworTChvdXRlcl9sb29wKToKKwlhZGRpCW4sIG4sIC0xCisJYWRkaQl1cF9vdXRlciwgdXBfb3V0ZXIsIDgKKwlhZGRpCXJwX291dGVyLCBycF9vdXRlciwgMTYKKworCW1yCXVwLCB1cF9vdXRlcgorCWFkZGkJcnAsIHJwX291dGVyLCA4CisKKwlzcmRpCXIwLCBuLCAyCisJbXRjdHIJcjAKKworCWJkeglMKG91dGVyX2VuZCkKKworCWxkCXI2LCAwKHVwKQorCWxkCXI5LCA4KHVwKQorCWxkCXIyNywgMTYodXApCisJbXVsbGQJcjAsIHI5LCByNgorCW11bGhkdQlyMjYsIHI5LCByNgorCW11bGxkCXI3LCByMjcsIHI2CisJbXVsaGR1CXI4LCByMjcsIHI2CisJbGQJcjksIDI0KHVwKQorCWxkCXIyOCwgMChycCkKKwlsZAlyMjksIDgocnApCisJbGQJcjMwLCAxNihycCkKKwltdWxsZAlyMTEsIHI5LCByNgorCW11bGhkdQlyMTAsIHI5LCByNgorCWFkZGMJcjcsIHI3LCByMjYKKwlhZGRlCXIxMSwgcjExLCByOAorCWFkZHplCXIxMiwgcjEwCisJYWRkYwlyMCwgcjAsIHIyOAorCXN0ZAlyMCwgMChycCkKKwlhZGRlCXI3LCByNywgcjI5CisJc3RkCXI3LCA4KHJwKQorCWFkZGUJcjExLCByMTEsIHIzMAorCXN0ZAlyMTEsIDE2KHJwKQorCWFkZGkJcnAsIHJwLCAyNAorCWxkCXI5LCAzMih1cCkKKwlsZAlyMjcsIDQwKHVwKQorCWFkZGkJdXAsIHVwLCA0OAorCWJkeglMKGVhMSkKKworCUFMSUdOKDE2KQorTCh0YTEpOgltdWxsZAlyMCwgcjksIHI2CisJbXVsaGR1CXIyNiwgcjksIHI2CUMgOQorCW11bGxkCXI3LCByMjcsIHI2CisJbXVsaGR1CXI4LCByMjcsIHI2CUMgMjcKKwlsZAlyOSwgMCh1cCkKKwlsZAlyMjgsIDAocnApCisJbGQJcjI3LCA4KHVwKQorCWxkCXIyOSwgOChycCkKKwlhZGRlCXIwLCByMCwgcjEyCUMgMCAxMgorCWFkZGUJcjcsIHI3LCByMjYJQyA1IDcKKwltdWxsZAlyMjYsIHI5LCByNgorCW11bGhkdQlyMTAsIHI5LCByNglDIDkKKwltdWxsZAlyMTEsIHIyNywgcjYKKwltdWxoZHUJcjEyLCByMjcsIHI2CUMgMjcKKwlsZAlyOSwgMTYodXApCisJbGQJcjMwLCAxNihycCkKKwlsZAlyMjcsIDI0KHVwKQorCWxkCXIzMSwgMjQocnApCisJYWRkZQlyMjYsIHIyNiwgcjgJQyA4IDUKKwlhZGRlCXIxMSwgcjExLCByMTAJQyAxMCAxMQorCWFkZHplCXIxMiwgcjEyCUMgMTIKKwlhZGRjCXIwLCByMCwgcjI4CUMgMCAyOAorCXN0ZAlyMCwgMChycCkJQyAwCisJYWRkZQlyNywgcjcsIHIyOQlDIDcgMjkKKwlzdGQJcjcsIDgocnApCUMgNworCWFkZGUJcjI2LCByMjYsIHIzMAlDIDUgMzAKKwlzdGQJcjI2LCAxNihycCkJQyA1CisJYWRkZQlyMTEsIHIxMSwgcjMxCUMgMTEgMzEKKwlzdGQJcjExLCAyNChycCkJQyAxMQorCWFkZGkJdXAsIHVwLCAzMgorCWFkZGkJcnAsIHJwLCAzMgorCWJkbnoJTCh0YTEpCisKK0woZWExKToJbXVsbGQJcjAsIHI5LCByNgorCW11bGhkdQlyMjYsIHI5LCByNgorCW11bGxkCXI3LCByMjcsIHI2CisJbXVsaGR1CXI4LCByMjcsIHI2CisJbGQJcjI4LCAwKHJwKQorCWxkCXIyOSwgOChycCkKKwlhZGRlCXIwLCByMCwgcjEyCisJYWRkZQlyNywgcjcsIHIyNgorCWFkZHplCXI4LCByOAorCWFkZGMJcjAsIHIwLCByMjgKKwlzdGQJcjAsIDAocnApCisJYWRkZQlyNywgcjcsIHIyOQorCXN0ZAlyNywgOChycCkKKwlhZGR6ZQlyOCwgcjgKKwlzdGQJcjgsIDE2KHJwKQorCitMKG91dGVyX2xvb3BfZW50XzApOgorCWFkZGkJbiwgbiwgLTEKKwlhZGRpCXVwX291dGVyLCB1cF9vdXRlciwgOAorCWFkZGkJcnBfb3V0ZXIsIHJwX291dGVyLCAxNgorCisJbXIJdXAsIHVwX291dGVyCisJYWRkaQlycCwgcnBfb3V0ZXIsIDgKKworCXNyZGkJcjAsIG4sIDIKKwltdGN0cglyMAorCisJbGQJcjYsIDAodXApCisJbGQJcjksIDgodXApCisJbGQJcjI3LCAxNih1cCkKKwlsZAlyMjgsIDAocnApCisJbGQJcjI5LCA4KHJwKQorCW11bGxkCXIwLCByOSwgcjYKKwltdWxoZHUJcjI2LCByOSwgcjYKKwltdWxsZAlyNywgcjI3LCByNgorCW11bGhkdQlyOCwgcjI3LCByNgorCWFkZGMJcjAsIHIwLCByMjgKKwlhZGRlCXI3LCByNywgcjI2CisJYWRkemUJcjEyLCByOAorCXN0ZAlyMCwgMChycCkKKwlhZGRlCXI3LCByNywgcjI5CisJc3RkCXI3LCA4KHJwKQorCWFkZGkJcnAsIHJwLCAxNgorCWxkCXI5LCAyNCh1cCkKKwlsZAlyMjcsIDMyKHVwKQorCWFkZGkJdXAsIHVwLCA0MAorCWJkeglMKGVhMCkKKworCUFMSUdOKDE2KQorTCh0YTApOgltdWxsZAlyMCwgcjksIHI2CisJbXVsaGR1CXIyNiwgcjksIHI2CUMgOQorCW11bGxkCXI3LCByMjcsIHI2CisJbXVsaGR1CXI4LCByMjcsIHI2CUMgMjcKKwlsZAlyOSwgMCh1cCkKKwlsZAlyMjgsIDAocnApCisJbGQJcjI3LCA4KHVwKQorCWxkCXIyOSwgOChycCkKKwlhZGRlCXIwLCByMCwgcjEyCUMgMCAxMgorCWFkZGUJcjcsIHI3LCByMjYJQyA1IDcKKwltdWxsZAlyMjYsIHI5LCByNgorCW11bGhkdQlyMTAsIHI5LCByNglDIDkKKwltdWxsZAlyMTEsIHIyNywgcjYKKwltdWxoZHUJcjEyLCByMjcsIHI2CUMgMjcKKwlsZAlyOSwgMTYodXApCisJbGQJcjMwLCAxNihycCkKKwlsZAlyMjcsIDI0KHVwKQorCWxkCXIzMSwgMjQocnApCisJYWRkZQlyMjYsIHIyNiwgcjgJQyA4IDUKKwlhZGRlCXIxMSwgcjExLCByMTAJQyAxMCAxMQorCWFkZHplCXIxMiwgcjEyCUMgMTIKKwlhZGRjCXIwLCByMCwgcjI4CUMgMCAyOAorCXN0ZAlyMCwgMChycCkJQyAwCisJYWRkZQlyNywgcjcsIHIyOQlDIDcgMjkKKwlzdGQJcjcsIDgocnApCUMgNworCWFkZGUJcjI2LCByMjYsIHIzMAlDIDUgMzAKKwlzdGQJcjI2LCAxNihycCkJQyA1CisJYWRkZQlyMTEsIHIxMSwgcjMxCUMgMTEgMzEKKwlzdGQJcjExLCAyNChycCkJQyAxMQorCWFkZGkJdXAsIHVwLCAzMgorCWFkZGkJcnAsIHJwLCAzMgorCWJkbnoJTCh0YTApCisKK0woZWEwKToJbXVsbGQJcjAsIHI5LCByNgorCW11bGhkdQlyMjYsIHI5LCByNgorCW11bGxkCXI3LCByMjcsIHI2CisJbXVsaGR1CXI4LCByMjcsIHI2CisJbGQJcjI4LCAwKHJwKQorCWxkCXIyOSwgOChycCkKKwlhZGRlCXIwLCByMCwgcjEyCisJYWRkZQlyNywgcjcsIHIyNgorCWFkZHplCXI4LCByOAorCWFkZGMJcjAsIHIwLCByMjgKKwlzdGQJcjAsIDAocnApCisJYWRkZQlyNywgcjcsIHIyOQorCXN0ZAlyNywgOChycCkKKwlhZGR6ZQlyOCwgcjgKKwlzdGQJcjgsIDE2KHJwKQorCitMKG91dGVyX2xvb3BfZW50XzMpOgorCWFkZGkJbiwgbiwgLTEKKwlhZGRpCXVwX291dGVyLCB1cF9vdXRlciwgOAorCWFkZGkJcnBfb3V0ZXIsIHJwX291dGVyLCAxNgorCisJbXIJdXAsIHVwX291dGVyCisJYWRkaQlycCwgcnBfb3V0ZXIsIDgKKworCXNyZGkJcjAsIG4sIDIKKwltdGN0cglyMAorCisJbGQJcjYsIDAodXApCisJbGQJcjksIDgodXApCisJbGQJcjI4LCAwKHJwKQorCW11bGxkCXIwLCByOSwgcjYKKwltdWxoZHUJcjEyLCByOSwgcjYKKwlhZGRjCXIwLCByMCwgcjI4CisJc3RkCXIwLCAwKHJwKQorCWFkZGkJcnAsIHJwLCA4CisJbGQJcjksIDE2KHVwKQorCWxkCXIyNywgMjQodXApCisJYWRkaQl1cCwgdXAsIDMyCisJYmR6CUwoZWEzKQorCisJQUxJR04oMTYpCitMKHRhMyk6CW11bGxkCXIwLCByOSwgcjYKKwltdWxoZHUJcjI2LCByOSwgcjYJQyA5CisJbXVsbGQJcjcsIHIyNywgcjYKKwltdWxoZHUJcjgsIHIyNywgcjYJQyAyNworCWxkCXI5LCAwKHVwKQorCWxkCXIyOCwgMChycCkKKwlsZAlyMjcsIDgodXApCisJbGQJcjI5LCA4KHJwKQorCWFkZGUJcjAsIHIwLCByMTIJQyAwIDEyCisJYWRkZQlyNywgcjcsIHIyNglDIDUgNworCW11bGxkCXIyNiwgcjksIHI2CisJbXVsaGR1CXIxMCwgcjksIHI2CUMgOQorCW11bGxkCXIxMSwgcjI3LCByNgorCW11bGhkdQlyMTIsIHIyNywgcjYJQyAyNworCWxkCXI5LCAxNih1cCkKKwlsZAlyMzAsIDE2KHJwKQorCWxkCXIyNywgMjQodXApCisJbGQJcjMxLCAyNChycCkKKwlhZGRlCXIyNiwgcjI2LCByOAlDIDggNQorCWFkZGUJcjExLCByMTEsIHIxMAlDIDEwIDExCisJYWRkemUJcjEyLCByMTIJQyAxMgorCWFkZGMJcjAsIHIwLCByMjgJQyAwIDI4CisJc3RkCXIwLCAwKHJwKQlDIDAKKwlhZGRlCXI3LCByNywgcjI5CUMgNyAyOQorCXN0ZAlyNywgOChycCkJQyA3CisJYWRkZQlyMjYsIHIyNiwgcjMwCUMgNSAzMAorCXN0ZAlyMjYsIDE2KHJwKQlDIDUKKwlhZGRlCXIxMSwgcjExLCByMzEJQyAxMSAzMQorCXN0ZAlyMTEsIDI0KHJwKQlDIDExCisJYWRkaQl1cCwgdXAsIDMyCisJYWRkaQlycCwgcnAsIDMyCisJYmRueglMKHRhMykKKworTChlYTMpOgltdWxsZAlyMCwgcjksIHI2CisJbXVsaGR1CXIyNiwgcjksIHI2CisJbXVsbGQJcjcsIHIyNywgcjYKKwltdWxoZHUJcjgsIHIyNywgcjYKKwlsZAlyMjgsIDAocnApCisJbGQJcjI5LCA4KHJwKQorCWFkZGUJcjAsIHIwLCByMTIKKwlhZGRlCXI3LCByNywgcjI2CisJYWRkemUJcjgsIHI4CisJYWRkYwlyMCwgcjAsIHIyOAorCXN0ZAlyMCwgMChycCkKKwlhZGRlCXI3LCByNywgcjI5CisJc3RkCXI3LCA4KHJwKQorCWFkZHplCXI4LCByOAorCXN0ZAlyOCwgMTYocnApCisKKworTChvdXRlcl9sb29wX2VudF8yKToKKwlhZGRpCW4sIG4sIC0xCisJYWRkaQl1cF9vdXRlciwgdXBfb3V0ZXIsIDgKKwlhZGRpCXJwX291dGVyLCBycF9vdXRlciwgMTYKKworCW1yCXVwLCB1cF9vdXRlcgorCWFkZGkJcnAsIHJwX291dGVyLCA4CisKKwlzcmRpCXIwLCBuLCAyCisJbXRjdHIJcjAKKworCWFkZGljCXIwLCByMCwgMAorCWxpCXIxMiwgMAkJQyBjeV9saW1iID0gMAorCWxkCXI2LCAwKHVwKQorCWxkCXI5LCA4KHVwKQorCWxkCXIyNywgMTYodXApCisJYmR6CUwoZWEyKQorCWFkZGkJdXAsIHVwLCAyNAorCisJQUxJR04oMTYpCitMKHRhMik6CW11bGxkCXIwLCByOSwgcjYKKwltdWxoZHUJcjI2LCByOSwgcjYJQyA5CisJbXVsbGQJcjcsIHIyNywgcjYKKwltdWxoZHUJcjgsIHIyNywgcjYJQyAyNworCWxkCXI5LCAwKHVwKQorCWxkCXIyOCwgMChycCkKKwlsZAlyMjcsIDgodXApCisJbGQJcjI5LCA4KHJwKQorCWFkZGUJcjAsIHIwLCByMTIJQyAwIDEyCisJYWRkZQlyNywgcjcsIHIyNglDIDUgNworCW11bGxkCXIyNiwgcjksIHI2CisJbXVsaGR1CXIxMCwgcjksIHI2CUMgOQorCW11bGxkCXIxMSwgcjI3LCByNgorCW11bGhkdQlyMTIsIHIyNywgcjYJQyAyNworCWxkCXI5LCAxNih1cCkKKwlsZAlyMzAsIDE2KHJwKQorCWxkCXIyNywgMjQodXApCisJbGQJcjMxLCAyNChycCkKKwlhZGRlCXIyNiwgcjI2LCByOAlDIDggNQorCWFkZGUJcjExLCByMTEsIHIxMAlDIDEwIDExCisJYWRkemUJcjEyLCByMTIJQyAxMgorCWFkZGMJcjAsIHIwLCByMjgJQyAwIDI4CisJc3RkCXIwLCAwKHJwKQlDIDAKKwlhZGRlCXI3LCByNywgcjI5CUMgNyAyOQorCXN0ZAlyNywgOChycCkJQyA3CisJYWRkZQlyMjYsIHIyNiwgcjMwCUMgNSAzMAorCXN0ZAlyMjYsIDE2KHJwKQlDIDUKKwlhZGRlCXIxMSwgcjExLCByMzEJQyAxMSAzMQorCXN0ZAlyMTEsIDI0KHJwKQlDIDExCisJYWRkaQl1cCwgdXAsIDMyCisJYWRkaQlycCwgcnAsIDMyCisJYmRueglMKHRhMikKKworTChlYTIpOgltdWxsZAlyMCwgcjksIHI2CisJbXVsaGR1CXIyNiwgcjksIHI2CisJbXVsbGQJcjcsIHIyNywgcjYKKwltdWxoZHUJcjgsIHIyNywgcjYKKwlsZAlyMjgsIDAocnApCisJbGQJcjI5LCA4KHJwKQorCWFkZGUJcjAsIHIwLCByMTIKKwlhZGRlCXI3LCByNywgcjI2CisJYWRkemUJcjgsIHI4CisJYWRkYwlyMCwgcjAsIHIyOAorCXN0ZAlyMCwgMChycCkKKwlhZGRlCXI3LCByNywgcjI5CisJc3RkCXI3LCA4KHJwKQorCWFkZHplCXI4LCByOAorCXN0ZAlyOCwgMTYocnApCisKKwliCUwob3V0ZXJfbG9vcCkKKworTChvdXRlcl9lbmQpOgorCWxkCXI2LCAwKHVwKQorCWxkCXI5LCA4KHVwKQorCWxkCXIxMSwgMChycCkKKwltdWxsZAlyMCwgcjksIHI2CisJbXVsaGR1CXI4LCByOSwgcjYKKwlhZGRjCXIwLCByMCwgcjExCisJc3RkCXIwLCAwKHJwKQorCWFkZHplCXI4LCByOAorCXN0ZAlyOCwgOChycCkKKworZGVmaW5lKGBycCcsICBgcnBfc2F2ZWQnKQorZGVmaW5lKGB1cCcsICBgcjUnKQorZGVmaW5lKGBuJywgICBgcjYnKQorZGVmaW5lKGBjbGltYicsCWByMCcpCisKKwlhZGRpCXI0LCBycF9zYXZlZCwgOAorCW1yCXI1LCB1cF9zYXZlZAorCW1yCXI2LCBuX3NhdmVkCisKKwlybGRpY2wuCXIwLCBuLCAwLDYyCQlDIHIwID0gbiAmIDMsIHNldCBjcjAKKwljbXBkaQljcjYsIHIwLCAyCisJYWRkaQluLCBuLCAyCQkJQyBjb21wdXRlIGNvdW50Li4uCisJc3JkaQluLCBuLCAyCQkJQyAuLi5mb3IgY3RyCisJbXRjdHIJbgkJCUMgcHV0IGxvb3AgY291bnQgaW50byBjdHIKKwliZXEJY3IwLCBMKHhiMCkKKwlibHQJY3I2LCBMKHhiMSkKKwliZXEJY3I2LCBMKHhiMikKKworTCh4YjMpOglsZAlyNiwgICAwKHVwKQorCWxkCXI3LCAgIDgodXApCisJbGQJcjEyLCAxNih1cCkKKwlhZGRpCXVwLCB1cCwgMjQKKwltdWxsZAlyMjQsIHI2LCByNgorCW11bGhkdQlyMjUsIHI2LCByNgorCW11bGxkCXIyNiwgcjcsIHI3CisJbXVsaGR1CXIyNywgcjcsIHI3CisJbXVsbGQJcjI4LCByMTIsIHIxMgorCW11bGhkdQlyMjksIHIxMiwgcjEyCisJbGQJcjEwLCAgOChycCkKKwlsZAlyMTEsIDE2KHJwKQorCWxkCXI2LCAgMjQocnApCisJbGQJcjcsICAzMihycCkKKwlhZGRjCXIxMCwgcjEwLCByMTAKKwlhZGRlCXIxMSwgcjExLCByMTEKKwlhZGRlCXI2LCByNiwgcjYKKwlhZGRlCXI3LCByNywgcjcKKwlhZGR6ZQljbGltYiwgcjI5CisJYWRkYwlyMTAsIHIxMCwgcjI1CisJYWRkZQlyMTEsIHIxMSwgcjI2CisJYWRkZQlyNiwgcjYsIHIyNworCWFkZGUJcjcsIHI3LCByMjgKKwlzdGQJcjI0LCAgMChycCkKKwlzdGQJcjEwLCAgOChycCkKKwlzdGQJcjExLCAxNihycCkKKwlzdGQJcjYsICAyNChycCkKKwlzdGQJcjcsICAzMihycCkKKwlhZGRpCXJwLCBycCwgNDAKKwliZG56CUwodG9wKQorCWIJTChlbmQpCisKK0woeGIyKToJbGQJcjYsICAwKHVwKQorCWxkCXI3LCAgOCh1cCkKKwlhZGRpCXVwLCB1cCwgMTYKKwltdWxsZAlyMjQsIHI2LCByNgorCW11bGhkdQlyMjUsIHI2LCByNgorCW11bGxkCXIyNiwgcjcsIHI3CisJbXVsaGR1CXIyNywgcjcsIHI3CisJbGQJcjEwLCAgOChycCkKKwlsZAlyMTEsIDE2KHJwKQorCWFkZGMJcjEwLCByMTAsIHIxMAorCWFkZGUJcjExLCByMTEsIHIxMQorCWFkZHplCWNsaW1iLCByMjcKKwlhZGRjCXIxMCwgcjEwLCByMjUKKwlhZGRlCXIxMSwgcjExLCByMjYKKwlzdGQJcjI0LCAgMChycCkKKwlzdGQJcjEwLCAgOChycCkKKwlzdGQJcjExLCAxNihycCkKKwlhZGRpCXJwLCBycCwgMjQKKwliZG56CUwodG9wKQorCWIJTChlbmQpCisKK0woeGIwKToJbGQJcjYsICAgMCh1cCkKKwlsZAlyNywgICA4KHVwKQorCWxkCXIxMiwgMTYodXApCisJbGQJcjIzLCAyNCh1cCkKKwlhZGRpCXVwLCB1cCwgMzIKKwltdWxsZAlyMjQsIHI2LCByNgorCW11bGhkdQlyMjUsIHI2LCByNgorCW11bGxkCXIyNiwgcjcsIHI3CisJbXVsaGR1CXIyNywgcjcsIHI3CisJbXVsbGQJcjI4LCByMTIsIHIxMgorCW11bGhkdQlyMjksIHIxMiwgcjEyCisJbXVsbGQJcjMwLCByMjMsIHIyMworCW11bGhkdQlyMzEsIHIyMywgcjIzCisJbGQJcjEwLCAgOChycCkKKwlsZAlyMTEsIDE2KHJwKQorCWxkCXI2LCAgMjQocnApCisJbGQJcjcsICAzMihycCkKKwlsZAlyMTIsIDQwKHJwKQorCWxkCXIyMywgNDgocnApCisJYWRkYwlyMTAsIHIxMCwgcjEwCisJYWRkZQlyMTEsIHIxMSwgcjExCisJYWRkZQlyNiwgcjYsIHI2CisJYWRkZQlyNywgcjcsIHI3CisJYWRkZQlyMTIsIHIxMiwgcjEyCisJYWRkZQlyMjMsIHIyMywgcjIzCisJYWRkemUJY2xpbWIsIHIzMQorCXN0ZAlyMjQsICAwKHJwKQorCWFkZGMJcjEwLCByMTAsIHIyNQorCXN0ZAlyMTAsICA4KHJwKQorCWFkZGUJcjExLCByMTEsIHIyNgorCXN0ZAlyMTEsIDE2KHJwKQorCWFkZGUJcjYsIHI2LCByMjcKKwlzdGQJcjYsICAyNChycCkKKwlhZGRlCXI3LCByNywgcjI4CisJc3RkCXI3LCAgMzIocnApCisJYWRkZQlyMTIsIHIxMiwgcjI5CisJc3RkCXIxMiwgNDAocnApCisJYWRkZQlyMjMsIHIyMywgcjMwCisJc3RkCXIyMywgNDgocnApCisJYWRkaQlycCwgcnAsIDU2CisJYmRueglMKHRvcCkKKwliCUwoZW5kKQorCitMKHhiMSk6CWxkCXI2LCAgMCh1cCkKKwlhZGRpCXVwLCB1cCwgOAorCW11bGxkCXIyNCwgcjYsIHI2CisJbXVsaGR1CWNsaW1iLCByNiwgcjYKKwlzdGQJcjI0LCAwKHJwKQorCWFkZGljCXJwLCBycCwgOAkJQyBjbGVhciBjYXJyeSBhcyBzaWRlLWVmZmVjdAorCisJQUxJR04oMzIpCitMKHRvcCk6CWxkCXI2LCAgIDAodXApCisJbGQJcjcsICAgOCh1cCkKKwlsZAlyMTIsIDE2KHVwKQorCWxkCXIyMywgMjQodXApCisJYWRkaQl1cCwgdXAsIDMyCisJbXVsbGQJcjI0LCByNiwgcjYKKwltdWxoZHUJcjI1LCByNiwgcjYKKwltdWxsZAlyMjYsIHI3LCByNworCW11bGhkdQlyMjcsIHI3LCByNworCW11bGxkCXIyOCwgcjEyLCByMTIKKwltdWxoZHUJcjI5LCByMTIsIHIxMgorCW11bGxkCXIzMCwgcjIzLCByMjMKKwltdWxoZHUJcjMxLCByMjMsIHIyMworCWxkCXI4LCAgIDAocnApCisJbGQJcjksICAgOChycCkKKwlhZGRlCXI4LCByOCwgcjgKKwlhZGRlCXI5LCByOSwgcjkKKwlsZAlyMTAsIDE2KHJwKQorCWxkCXIxMSwgMjQocnApCisJYWRkZQlyMTAsIHIxMCwgcjEwCisJYWRkZQlyMTEsIHIxMSwgcjExCisJbGQJcjYsICAzMihycCkKKwlsZAlyNywgIDQwKHJwKQorCWFkZGUJcjYsIHI2LCByNgorCWFkZGUJcjcsIHI3LCByNworCWxkCXIxMiwgNDgocnApCisJbGQJcjIzLCA1NihycCkKKwlhZGRlCXIxMiwgcjEyLCByMTIKKwlhZGRlCXIyMywgcjIzLCByMjMKKwlhZGR6ZQlyMzEsIHIzMQorCWFkZGMJcjgsIHI4LCBjbGltYgorCXN0ZAlyOCwgICAwKHJwKQorCWFkZGUJcjksIHI5LCByMjQKKwlzdGQJcjksICAgOChycCkKKwlhZGRlCXIxMCwgcjEwLCByMjUKKwlzdGQJcjEwLCAxNihycCkKKwlhZGRlCXIxMSwgcjExLCByMjYKKwlzdGQJcjExLCAyNChycCkKKwlhZGRlCXI2LCByNiwgcjI3CisJc3RkCXI2LCAgMzIocnApCisJYWRkZQlyNywgcjcsIHIyOAorCXN0ZAlyNywgIDQwKHJwKQorCWFkZGUJcjEyLCByMTIsIHIyOQorCXN0ZAlyMTIsIDQ4KHJwKQorCWFkZGUJcjIzLCByMjMsIHIzMAorCXN0ZAlyMjMsIDU2KHJwKQorCW1yCWNsaW1iLCByMzEKKwlhZGRpCXJwLCBycCwgNjQKKwliZG56CUwodG9wKQorCitMKGVuZCk6CWFkZHplCWNsaW1iLCBjbGltYgorCXN0ZAljbGltYiwgIDAocnApCisKKwlsZAlyMzEsICAtOChyMSkKKwlsZAlyMzAsIC0xNihyMSkKKwlsZAlyMjksIC0yNChyMSkKKwlsZAlyMjgsIC0zMihyMSkKKwlsZAlyMjcsIC00MChyMSkKKwlsZAlyMjYsIC00OChyMSkKKwlsZAlyMjUsIC01NihyMSkKKwlsZAlyMjQsIC02NChyMSkKKwlsZAlyMjMsIC03MihyMSkKKwlsZAlyMjIsIC04MChyMSkKKwlsZAlyMjEsIC04OChyMSkKKwlibHIKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L3A2L2xzaGlmdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9wNi9sc2hpZnQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMjAwZmIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9wNi9sc2hpZnQuYXNtCkBAIC0wLDAgKzEsMTMyIEBACitkbmwgIFBvd2VyUEMtNjQgbXBuX2xzaGlmdCAtLSBycFtdID0gdXBbXSA8PCBjbnQKKworZG5sICBDb3B5cmlnaHQgMjAwMywgMjAwNSwgMjAxMCwgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCQkgICAgY3ljbGVzL2xpbWIKK0MgUE9XRVIzL1BQQzYzMAkJID8KK0MgUE9XRVI0L1BQQzk3MAkJID8KK0MgUE9XRVI1CQkgMi4yNQorQyBQT1dFUjYJCSA0CisKK0MgVE9ETworQyAgKiBNaWNyby1vcHRpbWlzZSBoZWFkZXIgY29kZQorQyAgKiBQZXJoYXBzIGRvIDQtd2F5IHVucm9sbGluZywgZm9yIDIuNSBjL2wgb24gUE9XRVI2LiAgVGhlIGNvZGUgaXMgNDIzNgorQyAgICBieXRlcywgNC13YXkgY29kZSB3b3VsZCBiZWNvbWUgYWJvdXQgNTAlIGxhcmdlci4KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwX3BhcmFtJywgIGByMycpCitkZWZpbmUoYHVwJywgIGByNCcpCitkZWZpbmUoYG4nLCAgIGByNScpCitkZWZpbmUoYGNudCcsIGByNicpCisKK2RlZmluZShgdG5jJyxgcjAnKQorZGVmaW5lKGByZXR2YWwnLGByMycpCitkZWZpbmUoYHJwJywgIGByNycpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fbHNoaWZ0LHRvYykKKworaWZkZWYoYEhBVkVfQUJJX21vZGUzMicsYAorCXJsZGljbAluLCBuLCAwLDMyCQlDIEZJWE1FOiBhdm9pZCB0aGlzIHplcm8gZXh0ZW5kCisnKQorCW1mbHIJcjEyCisJc2xkaQlyOCwgbiwgMworCXNsZGkJcjEwLCBjbnQsIDYJCUMgbXVsdGlwbHkgY250IGJ5IHNpemUgb2YgYSBTSElGVCBibG9jaworCUxFQUwoCXIxMSwgTChlMSkpCQlDIGFkZHJlc3Mgb2YgTChlMSkgbGFiZWwgaW4gU0hJRlQoMSkKKwlhZGQJdXAsIHVwLCByOAkJQyBtYWtlIHVwIHBvaW50IGF0IGVuZCBvZiB1cFtdCisJYWRkCXIxMSwgcjExLCByMTAJCUMgYWRkcmVzcyBvZiBMKG9OKSBmb3IgTiA9IGNudAorCXNyZGkJcjEwLCBuLCAxCisJYWRkCXJwLCBycF9wYXJhbSwgcjgJQyBtYWtlIHJwIHBvaW50IGF0IGVuZCBvZiBycFtdCisJc3ViZmljCXRuYywgY250LCA2NAorCXJsd2lubS4JcjgsIG4sIDAsMzEsMzEJCUMgZXh0cmFjdCBiaXQgMAorCW10Y3RyCXIxMAorCWJlcQlMKGV2bikKKworTChvZGQpOglsZAlyOSwgLTgodXApCisJY21wZGkJY3IwLCBuLCAxCQlDIG4gPSAxPworCWJlcQlMKDEpCisJbGQJcjgsIC0xNih1cCkKKwlhZGRpCXIxMSwgcjExLCAtODQJCUMgTChvMSkgLSBMKGUxKSAtIDY0CisJbXRscglyMTEKKwlzcmQJcjMsIHI5LCB0bmMJCUMgcmV0dmFsCisJYWRkaQl1cCwgdXAsIDgKKwlhZGRpCXJwLCBycCwgLTgKKwlibHIJCQkJQyBicmFuY2ggdG8gTChvTikKKworTChldm4pOglsZAlyOCwgLTgodXApCisJbGQJcjksIC0xNih1cCkKKwlhZGRpCXIxMSwgcjExLCAtNjQKKwltdGxyCXIxMQorCXNyZAlyMywgcjgsIHRuYwkJQyByZXR2YWwKKwlibHIJCQkJQyBicmFuY2ggdG8gTChlTikKKworTCgxKToJc3JkCXIzLCByOSwgdG5jCQlDIHJldHZhbAorCXNsZAlyOCwgcjksIGNudAorCXN0ZAlyOCwgLTgocnApCisJbXRscglyMTIKK2lmZGVmKGBIQVZFX0FCSV9tb2RlMzInLAorYAltcglyNCwgcjMKKwlzcmRpCXIzLCByMywgMzIKKycpCisJYmxyCisKKworZGVmaW5lKFNISUZULGAKK0wobG8kMSk6bGQJcjgsIC0yNCh1cCkKKwlzdGQJcjExLCAtOChycCkKKwlhZGRpCXJwLCBycCwgLTE2CitMKG8kMSk6CXNyZGkJcjEwLCByOCwgZXZhbCg2NC0kMSkKKwlybGRpbWkJcjEwLCByOSwgJDEsIDAKKwlsZAlyOSwgLTMyKHVwKQorCWFkZGkJdXAsIHVwLCAtMTYKKwlzdGQJcjEwLCAwKHJwKQorTChlJDEpOglzcmRpCXIxMSwgcjksIGV2YWwoNjQtJDEpCisJcmxkaW1pCXIxMSwgcjgsICQxLCAwCisJYmRueglMKGxvJDEpCisJc3RkCXIxMSwgLTgocnApCisJc2xkaQlyMTAsIHI5LCAkMQorCWIJTChjb20pCisJbm9wCisJbm9wCisnKQorCisJQUxJR04oNjQpCitmb3Jsb29wKGBpJywxLDYzLGBTSElGVChpKScpCisKK0woY29tKToJc3RkCXIxMCwgLTE2KHJwKQorCW10bHIJcjEyCitpZmRlZihgSEFWRV9BQklfbW9kZTMyJywKK2AJbXIJcjQsIHIzCisJc3JkaQlyMywgcjMsIDMyCisnKQorCWJscgorRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9wNi9sc2hpZnRjLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L3A2L2xzaGlmdGMuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0YjNjYWEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9wNi9sc2hpZnRjLmFzbQpAQCAtMCwwICsxLDEzNiBAQAorZG5sICBQb3dlclBDLTY0IG1wbl9sc2hpZnRjIC0tIHJwW10gPSB+dXBbXSA8PCBjbnQKKworZG5sICBDb3B5cmlnaHQgMjAwMywgMjAwNSwgMjAxMCwgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCQkgICAgY3ljbGVzL2xpbWIKK0MgUE9XRVIzL1BQQzYzMAkJID8KK0MgUE9XRVI0L1BQQzk3MAkJID8KK0MgUE9XRVI1CQkgMi4yNQorQyBQT1dFUjYJCSA0CisKK0MgVE9ETworQyAgKiBNaWNyby1vcHRpbWlzZSBoZWFkZXIgY29kZQorQyAgKiBQZXJoYXBzIGRvIDQtd2F5IHVucm9sbGluZywgZm9yIDIuNSBjL2wgb24gUE9XRVI2LiAgVGhlIGNvZGUgaXMgNDIzNgorQyAgICBieXRlcywgNC13YXkgY29kZSB3b3VsZCBiZWNvbWUgYWJvdXQgNTAlIGxhcmdlci4KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwX3BhcmFtJywgIGByMycpCitkZWZpbmUoYHVwJywgIGByNCcpCitkZWZpbmUoYG4nLCAgIGByNScpCitkZWZpbmUoYGNudCcsIGByNicpCisKK2RlZmluZShgdG5jJyxgcjAnKQorZGVmaW5lKGByZXR2YWwnLGByMycpCitkZWZpbmUoYHJwJywgIGByNycpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fbHNoaWZ0Yyx0b2MpCisKK2lmZGVmKGBIQVZFX0FCSV9tb2RlMzInLGAKKwlybGRpY2wJbiwgbiwgMCwzMgkJQyBGSVhNRTogYXZvaWQgdGhpcyB6ZXJvIGV4dGVuZAorJykKKwltZmxyCXIxMgorCXNsZGkJcjgsIG4sIDMKKwlzbGRpCXIxMCwgY250LCA2CQlDIG11bHRpcGx5IGNudCBieSBzaXplIG9mIGEgU0hJRlQgYmxvY2sKKwlMRUFMKAlyMTEsIEwoZTEpKQkJQyBhZGRyZXNzIG9mIEwoZTEpIGxhYmVsIGluIFNISUZUKDEpCisJYWRkCXVwLCB1cCwgcjgJCUMgbWFrZSB1cCBwb2ludCBhdCBlbmQgb2YgdXBbXQorCWFkZAlyMTEsIHIxMSwgcjEwCQlDIGFkZHJlc3Mgb2YgTChvTikgZm9yIE4gPSBjbnQKKwlzcmRpCXIxMCwgbiwgMQorCWFkZAlycCwgcnBfcGFyYW0sIHI4CUMgbWFrZSBycCBwb2ludCBhdCBlbmQgb2YgcnBbXQorCXN1YmZpYwl0bmMsIGNudCwgNjQKKwlybHdpbm0uCXI4LCBuLCAwLDMxLDMxCQlDIGV4dHJhY3QgYml0IDAKKwltdGN0cglyMTAKKwliZXEJTChldm4pCisKK0wob2RkKToJbGQJcjksIC04KHVwKQorCWNtcGRpCWNyMCwgbiwgMQkJQyBuID0gMT8KKwliZXEJTCgxKQorCWxkCXI4LCAtMTYodXApCisJYWRkaQlyMTEsIHIxMSwgLTg4CQlDIEwobzEpIC0gTChlMSkgLSA2NAorCW10bHIJcjExCisJc3JkCXIzLCByOSwgdG5jCQlDIHJldHZhbAorCWFkZGkJdXAsIHVwLCA4CisJYWRkaQlycCwgcnAsIC04CisJYmxyCQkJCUMgYnJhbmNoIHRvIEwob04pCisKK0woZXZuKToJbGQJcjgsIC04KHVwKQorCWxkCXI5LCAtMTYodXApCisJYWRkaQlyMTEsIHIxMSwgLTY0CisJbXRscglyMTEKKwlzcmQJcjMsIHI4LCB0bmMJCUMgcmV0dmFsCisJYmxyCQkJCUMgYnJhbmNoIHRvIEwoZU4pCisKK0woMSk6CXNyZAlyMywgcjksIHRuYwkJQyByZXR2YWwKKwlzbGQJcjgsIHI5LCBjbnQKKwlub3IJcjgsIHI4LCByOAorCXN0ZAlyOCwgLTgocnApCisJbXRscglyMTIKK2lmZGVmKGBIQVZFX0FCSV9tb2RlMzInLAorYAltcglyNCwgcjMKKwlzcmRpCXIzLCByMywgMzIKKycpCisJYmxyCisKKworZGVmaW5lKFNISUZULGAKK0wobG8kMSk6bGQJcjgsIC0yNCh1cCkKKwlub3IJcjExLCByMTEsIHIxMQorCXN0ZAlyMTEsIC04KHJwKQorCWFkZGkJcnAsIHJwLCAtMTYKK0wobyQxKToJc3JkaQlyMTAsIHI4LCBldmFsKDY0LSQxKQorCXJsZGltaQlyMTAsIHI5LCAkMSwgMAorCWxkCXI5LCAtMzIodXApCisJYWRkaQl1cCwgdXAsIC0xNgorCW5vcglyMTAsIHIxMCwgcjEwCisJc3RkCXIxMCwgMChycCkKK0woZSQxKToJc3JkaQlyMTEsIHI5LCBldmFsKDY0LSQxKQorCXJsZGltaQlyMTEsIHI4LCAkMSwgMAorCWJkbnoJTChsbyQxKQorCXNsZGkJcjEwLCByOSwgJDEKKwliCUwoY29tKQorCW5vcAorJykKKworCUFMSUdOKDY0KQorZm9ybG9vcChgaScsMSw2MyxgU0hJRlQoaSknKQorCitMKGNvbSk6CW5vcglyMTEsIHIxMSwgcjExCisJbm9yCXIxMCwgcjEwLCByMTAKKwlzdGQJcjExLCAtOChycCkKKwlzdGQJcjEwLCAtMTYocnApCisJbXRscglyMTIKK2lmZGVmKGBIQVZFX0FCSV9tb2RlMzInLAorYAltcglyNCwgcjMKKwlzcmRpCXIzLCByMywgMzIKKycpCisJYmxyCitFUElMT0dVRSgpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L3A2L3JzaGlmdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9wNi9yc2hpZnQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllODQ4YzEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9wNi9yc2hpZnQuYXNtCkBAIC0wLDAgKzEsMTMxIEBACitkbmwgIFBvd2VyUEMtNjQgbXBuX3JzaGlmdCAtLSBycFtdID0gdXBbXSA8PCBjbnQKKworZG5sICBDb3B5cmlnaHQgMjAwMywgMjAwNSwgMjAxMCwgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCQkgICAgY3ljbGVzL2xpbWIKK0MgUE9XRVIzL1BQQzYzMAkJID8KK0MgUE9XRVI0L1BQQzk3MAkJID8KK0MgUE9XRVI1CQkgMgorQyBQT1dFUjYJCSAzLjUgIChteXN0ZXJpb3VzbHkgMy4wIGZvciBjbnQ9MSkKKworQyBUT0RPCitDICAqIE1pY3JvLW9wdGltaXNlIGhlYWRlciBjb2RlCitDICAqIFBlcmhhcHMgZG8gNC13YXkgdW5yb2xsaW5nLCBmb3IgMi41IGMvbCBvbiBQT1dFUjYuICBUaGUgY29kZSBpcyA0MjQ4CitDICAgIGJ5dGVzLCA0LXdheSBjb2RlIHdvdWxkIGJlY29tZSBhYm91dCA1MCUgbGFyZ2VyLgorCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnBfcGFyYW0nLCAgYHIzJykKK2RlZmluZShgdXAnLCAgYHI0JykKK2RlZmluZShgbicsICAgYHI1JykKK2RlZmluZShgY250JywgYHI2JykKKworZGVmaW5lKGB0bmMnLGByMCcpCitkZWZpbmUoYHJldHZhbCcsYHIzJykKK2RlZmluZShgcnAnLCAgYHI3JykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9yc2hpZnQsdG9jKQorCitpZmRlZihgSEFWRV9BQklfbW9kZTMyJyxgCisJcmxkaWNsCW4sIG4sIDAsMzIJCUMgRklYTUU6IGF2b2lkIHRoaXMgemVybyBleHRlbmQKKycpCisJbWZscglyMTIKKwlMRUFMKAlyMTEsIEwoZTEpKQkJQyBhZGRyZXNzIG9mIEwoZTEpIGxhYmVsIGluIFNISUZUKDEpCisJc2xkaQlyMTAsIGNudCwgNgkJQyBtdWx0aXBseSBjbnQgYnkgc2l6ZSBvZiBhIFNISUZUIGJsb2NrCisJYWRkCXIxMSwgcjExLCByMTAJCUMgYWRkcmVzcyBvZiBMKG9OKSBmb3IgTiA9IGNudAorCXNyZGkJcjEwLCBuLCAxCisJbXIJcnAsIHJwX3BhcmFtCisJc3ViZmljCXRuYywgY250LCA2NAorCXJsd2lubS4JcjgsIG4sIDAsMzEsMzEJCUMgZXh0cmFjdCBiaXQgMAorCW10Y3RyCXIxMAorCWJlcQlMKGV2bikKKworTChvZGQpOglsZAlyOSwgMCh1cCkKKwljbXBkaQljcjAsIG4sIDEJCUMgbiA9IDE/CisJYmVxCUwoMSkKKwlsZAlyOCwgOCh1cCkKKwlhZGRpCXIxMSwgcjExLCAtODQJCUMgTChvMSkgLSBMKGUxKSAtIDY0CisJbXRscglyMTEKKwlzbGQJcjMsIHI5LCB0bmMJCUMgcmV0dmFsCisJYWRkaQl1cCwgdXAsIDgKKwlhZGRpCXJwLCBycCwgOAorCWJscgkJCQlDIGJyYW5jaCB0byBMKG9OKQorCitMKGV2bik6CWxkCXI4LCAwKHVwKQorCWxkCXI5LCA4KHVwKQorCWFkZGkJcjExLCByMTEsIC02NAorCW10bHIJcjExCisJc2xkCXIzLCByOCwgdG5jCQlDIHJldHZhbAorCWFkZGkJdXAsIHVwLCAxNgorCWJscgkJCQlDIGJyYW5jaCB0byBMKGVOKQorCitMKDEpOglzbGQJcjMsIHI5LCB0bmMJCUMgcmV0dmFsCisJc3JkCXI4LCByOSwgY250CisJc3RkCXI4LCAwKHJwKQorCW10bHIJcjEyCitpZmRlZihgSEFWRV9BQklfbW9kZTMyJywKK2AJbXIJcjQsIHIzCisJc3JkaQlyMywgcjMsIDMyCisnKQorCWJscgorCisKK2RlZmluZShTSElGVCxgCitMKGxvJDEpOmxkCXI4LCAwKHVwKQorCXN0ZAlyMTEsIDAocnApCisJYWRkaQlycCwgcnAsIDE2CitMKG8kMSk6CXNyZGkJcjEwLCByOSwgJDEKKwlybGRpbWkJcjEwLCByOCwgZXZhbCg2NC0kMSksIDAKKwlsZAlyOSwgOCh1cCkKKwlhZGRpCXVwLCB1cCwgMTYKKwlzdGQJcjEwLCAtOChycCkKK0woZSQxKToJc3JkaQlyMTEsIHI4LCAkMQorCXJsZGltaQlyMTEsIHI5LCBldmFsKDY0LSQxKSwgMAorCWJkbnoJTChsbyQxKQorCXN0ZAlyMTEsIDAocnApCisJc3JkaQlyMTAsIHI5LCAkMQorCWIJTChjb20pCisJbm9wCisJbm9wCisnKQorCisJQUxJR04oNjQpCitmb3Jsb29wKGBpJywxLDYzLGBTSElGVChpKScpCisKK0woY29tKToJc3RkCXIxMCwgOChycCkKKwltdGxyCXIxMgoraWZkZWYoYEhBVkVfQUJJX21vZGUzMicsCitgCW1yCXI0LCByMworCXNyZGkJcjMsIHIzLCAzMgorJykKKwlibHIKK0VQSUxPR1VFKCkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvcDcvY29weWQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvcDcvY29weWQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNGNhNTgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9wNy9jb3B5ZC5hc20KQEAgLTAsMCArMSwxMjggQEAKK2RubCAgUG93ZXJQQy02NCBtcG5fY29weWQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDQsIDIwMDUsIDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgICAgICAgICAgIGN5Y2xlcy9saW1iCitDIFBPV0VSMy9QUEM2MzAgICAgICAgICAgPworQyBQT1dFUjQvUFBDOTcwICAgICAgICAgID8KK0MgUE9XRVI1ICAgICAgICAgICAgICAgICA/CitDIFBPV0VSNiAgICAgICAgICAgICAgICAgMS4yNQorQyBQT1dFUjcgICAgICAgICAgICAgICAgIDEuMDkKKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywJYHIzJykKK2RlZmluZShgdXAnLAlgcjQnKQorZGVmaW5lKGBuJywJYHI1JykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9jb3B5ZCkKKworaWZkZWYoYEhBVkVfQUJJX21vZGUzMicsCitgCXJsZGljbAluLCBuLCAwLDMyJykKKworCXNsZGkJcjAsIG4sIDMKKwlhZGQJdXAsIHVwLCByMAkJQyBwb2ludCBhdCB1W10gZW5kCisJYWRkCXJwLCBycCwgcjAJCUMgcG9pbnQgYXQgcltdIGVuZAorCisJY21wZGkJY3IwLCBuLCA0CisJYmx0CUwoc21sKQorCisJYWRkaQlyMTAsIG4sIDQKKwlzcmRpCXIxMCwgcjEwLCAzCisJbXRjdHIJcjEwCisKKwlhbmRpLglyMCwgbiwgMQorCXJsd2lubQlyMTEsIG4sIDAsMzAsMzAKKwlybHdpbm0JcjEyLCBuLCAwLDI5LDI5CisJY21wZGkJY3I2LCByMTEsIDAKKwljbXBkaQljcjcsIHIxMiwgMAorCisJYmVxCWNyMCwgTCh4eDApCitMKHh4MSk6CWxkCXI2LCAtOCh1cCkKKwlhZGRpCXVwLCB1cCwgLTgKKwlzdGQJcjYsIC04KHJwKQorCWFkZGkJcnAsIHJwLCAtOAorCitMKHh4MCk6CWJuZQljcjYsIEwoeDEwKQorTCh4MDApOglsZAlyNiwgLTgodXApCisJbGQJcjcsIC0xNih1cCkKKwlibmUJY3I3LCBMKDEwMCkKK0woMDAwKToJYWRkaQlycCwgcnAsIDMyCisJYglMKGxvMCkKK0woMTAwKToJYWRkaQl1cCwgdXAsIDMyCisJYglMKGxvNCkKK0woeDEwKToJbGQJcjgsIC04KHVwKQorCWxkCXI5LCAtMTYodXApCisJYm5lCWNyNywgTCgxMTApCitMKDAxMCk6CWFkZGkJdXAsIHVwLCAtMTYKKwlhZGRpCXJwLCBycCwgMTYKKwliCUwobG8yKQorTCgxMTApOglhZGRpCXVwLCB1cCwgMTYKKwlhZGRpCXJwLCBycCwgNDgKKwliCUwobG82KQorCitMKHNtbCk6CWNtcGRpCWNyMCwgbiwgMAorCWJlcWxyLQljcjAKKwltdGN0cgluCitMKHQpOglsZAlyNiwgLTgodXApCisJYWRkaQl1cCwgdXAsIC04CisJc3RkCXI2LCAtOChycCkKKwlhZGRpCXJwLCBycCwgLTgKKwliZG56CUwodCkKKwlibHIKKworCUFMSUdOKDMyKQorTCh0b3ApOglzdGQJcjYsIC04KHJwKQorCXN0ZAlyNywgLTE2KHJwKQorTChsbzIpOglsZAlyNiwgLTgodXApCisJbGQJcjcsIC0xNih1cCkKKwlzdGQJcjgsIC0yNChycCkKKwlzdGQJcjksIC0zMihycCkKK0wobG8wKToJbGQJcjgsIC0yNCh1cCkKKwlsZAlyOSwgLTMyKHVwKQorCXN0ZAlyNiwgLTQwKHJwKQorCXN0ZAlyNywgLTQ4KHJwKQorTChsbzYpOglsZAlyNiwgLTQwKHVwKQorCWxkCXI3LCAtNDgodXApCisJc3RkCXI4LCAtNTYocnApCisJc3RkCXI5LCAtNjQocnApCisJYWRkaQlycCwgcnAsIC02NAorTChsbzQpOglsZAlyOCwgLTU2KHVwKQorCWxkCXI5LCAtNjQodXApCisJYWRkaQl1cCwgdXAsIC02NAorCWJkbnoJTCh0b3ApCisKK0woZW5kKToJc3RkCXI2LCAtOChycCkKKwlzdGQJcjcsIC0xNihycCkKKwlzdGQJcjgsIC0yNChycCkKKwlzdGQJcjksIC0zMihycCkKKwlibHIKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L3A3L2NvcHlpLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L3A3L2NvcHlpLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTRjZjlmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvcDcvY29weWkuYXNtCkBAIC0wLDAgKzEsMTI5IEBACitkbmwgIFBvd2VyUEMtNjQgbXBuX2NvcHlpLgorCitkbmwgIENvcHlyaWdodCAyMDA0LCAyMDA1LCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICAgICAgICAgICBjeWNsZXMvbGltYgorQyBQT1dFUjMvUFBDNjMwICAgICAgICAgID8KK0MgUE9XRVI0L1BQQzk3MCAgICAgICAgICA/CitDIFBPV0VSNSAgICAgICAgICAgICAgICAgPworQyBQT1dFUjYgICAgICAgICAgICAgICAgIDEuMjUKK0MgUE9XRVI3ICAgICAgICAgICAgICAgICAxLjA5CisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsCWByMycpCitkZWZpbmUoYHVwJywJYHI0JykKK2RlZmluZShgbicsCWByNScpCisKK0MgVE9ETworQyAgKiBUcnkgcm9sbGluZyB0aGUgdHdvIGxvb3AgbGVhZGluZyBzdGQgdG8gdGhlIGVuZCwgYWxsb3dpbmcgdGhlIGNvZGUgdG8KK0MgICAgaGFuZGxlIGFsc28gbiA9IDIuCitDICAqIENvbnNpZGVyIHVzaW5nIDQgcG9pbnRlcnMsIHNjaGVkdWxlIHB0ciB1cGRhdGUgZWFybHkgd3J0IHVzZS4KKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9jb3B5aSkKKworaWZkZWYoYEhBVkVfQUJJX21vZGUzMicsCitgCXJsZGljbAluLCBuLCAwLDMyJykKKworCWNtcGRpCWNyMCwgbiwgNAorCWJsdAlMKHNtbCkKKworCWFkZGkJcjEwLCBuLCA0CisJc3JkaQlyMTAsIHIxMCwgMworCW10Y3RyCXIxMAorCisJYW5kaS4JcjAsIG4sIDEKKwlybHdpbm0JcjExLCBuLCAwLDMwLDMwCisJcmx3aW5tCXIxMiwgbiwgMCwyOSwyOQorCWNtcGRpCWNyNiwgcjExLCAwCisJY21wZGkJY3I3LCByMTIsIDAKKworCWJlcQljcjAsIEwoeHgwKQorTCh4eDEpOglsZAlyNiwgMCh1cCkKKwlhZGRpCXVwLCB1cCwgOAorCXN0ZAlyNiwgMChycCkKKwlhZGRpCXJwLCBycCwgOAorCitMKHh4MCk6CWJuZQljcjYsIEwoeDEwKQorTCh4MDApOglsZAlyNiwgMCh1cCkKKwlsZAlyNywgOCh1cCkKKwlibmUJY3I3LCBMKDEwMCkKK0woMDAwKToJYWRkaQlycCwgcnAsIC0zMgorCWIJTChsbzApCitMKDEwMCk6CWFkZGkJdXAsIHVwLCAtMzIKKwliCUwobG80KQorTCh4MTApOglsZAlyOCwgMCh1cCkKKwlsZAlyOSwgOCh1cCkKKwlibmUJY3I3LCBMKDExMCkKK0woMDEwKToJYWRkaQl1cCwgdXAsIDE2CisJYWRkaQlycCwgcnAsIC0xNgorCWIJTChsbzIpCitMKDExMCk6CWFkZGkJdXAsIHVwLCAtMTYKKwlhZGRpCXJwLCBycCwgLTQ4CisJYglMKGxvNikKKworTChzbWwpOgljbXBkaQljcjAsIG4sIDAKKwliZXFsci0JY3IwCisJbXRjdHIJbgorTCh0KToJbGQJcjYsIDAodXApCisJYWRkaQl1cCwgdXAsIDgKKwlzdGQJcjYsIDAocnApCisJYWRkaQlycCwgcnAsIDgKKwliZG56CUwodCkKKwlibHIKKworCUFMSUdOKDMyKQorTCh0b3ApOglzdGQJcjYsIDAocnApCisJc3RkCXI3LCA4KHJwKQorTChsbzIpOglsZAlyNiwgMCh1cCkKKwlsZAlyNywgOCh1cCkKKwlzdGQJcjgsIDE2KHJwKQorCXN0ZAlyOSwgMjQocnApCitMKGxvMCk6CWxkCXI4LCAxNih1cCkKKwlsZAlyOSwgMjQodXApCisJc3RkCXI2LCAzMihycCkKKwlzdGQJcjcsIDQwKHJwKQorTChsbzYpOglsZAlyNiwgMzIodXApCisJbGQJcjcsIDQwKHVwKQorCXN0ZAlyOCwgNDgocnApCisJc3RkCXI5LCA1NihycCkKKwlhZGRpCXJwLCBycCwgNjQKK0wobG80KToJbGQJcjgsIDQ4KHVwKQorCWxkCXI5LCA1Nih1cCkKKwlhZGRpCXVwLCB1cCwgNjQKKwliZG56CUwodG9wKQorCitMKGVuZCk6CXN0ZAlyNiwgMChycCkKKwlzdGQJcjcsIDgocnApCisJc3RkCXI4LCAxNihycCkKKwlzdGQJcjksIDI0KHJwKQorCWJscgorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvcDcvaGFtZGlzdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9wNy9oYW1kaXN0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjBiM2JjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvcDcvaGFtZGlzdC5hc20KQEAgLTAsMCArMSwxMTAgQEAKK2RubCAgUG93ZXJQQy02NCBtcG5faGFtZGlzdC4KKworZG5sICBDb3B5cmlnaHQgMjAxMiwgMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgICAgICAgICAgIGN5Y2xlcy9saW1iCitDIFBPV0VSMy9QUEM2MzAgICAgICAgICAgLQorQyBQT1dFUjQvUFBDOTcwICAgICAgICAgIC0KK0MgUE9XRVI1ICAgICAgICAgICAgICAgICAtCitDIFBPV0VSNiAgICAgICAgICAgICAgICAgLQorQyBQT1dFUjcgICAgICAgICAgICAgICAgIDIuODcKKworZGVmaW5lKGB1cCcsIHIzKQorZGVmaW5lKGB2cCcsIHI0KQorZGVmaW5lKGBuJywgIHI1KQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2hhbWRpc3QpCisJc3RkCXIzMCwgLTE2KHIxKQorCXN0ZAlyMzEsIC04KHIxKQorCisJYWRkaQlyMCwgbiwgMQoraWZkZWYoYEhBVkVfQUJJX21vZGUzMicsCitgCXJsZGljbAlyMCwgcjAsIDYzLDMzJywJQyAuLi5icmFuY2ggY291bnQKK2AJc3JkaQlyMCwgcjAsIDEnKQlDIC4uLmZvciBjdHIKKwltdGN0cglyMAorCisJYW5kaS4JcjAsIG4sIDEKKworCWxpCXIwLCAwCisJbGkJcjEyLCAwCisKKwliZXEJTChldm4pCisKK0wob2RkKToJbGQJcjYsIDAodXApCisJYWRkaQl1cCwgdXAsIDgKKwlsZAlyOCwgMCh2cCkKKwlhZGRpCXZwLCB2cCwgOAorCXhvcglyMTAsIHI2LCByOAorCXBvcGNudGQocjAsIHIxMCkKKwliZHoJTChlMSkKKworTChldm4pOglsZAlyNiwgMCh1cCkKKwlsZAlyOCwgMCh2cCkKKwlsZAlyNywgOCh1cCkKKwlsZAlyOSwgOCh2cCkKKwl4b3IJcjEwLCByNiwgcjgKKwlhZGRpCXVwLCB1cCwgMTYKKwlhZGRpCXZwLCB2cCwgMTYKKwlsaQlyMzAsIDAKKwlsaQlyMzEsIDAKKwliZHoJTChlbmQpCisKKwlub3AKKwlub3AKK0MJQUxJR04oMTYpCitMKHRvcCk6CWFkZAlyMCwgcjAsIHIzMAorCWxkCXI2LCAwKHVwKQorCWxkCXI4LCAwKHZwKQorCXhvcglyMTEsIHI3LCByOQorCXBvcGNudGQocjMwLCByMTApCisJYWRkCXIxMiwgcjEyLCByMzEKKwlsZAlyNywgOCh1cCkKKwlsZAlyOSwgOCh2cCkKKwl4b3IJcjEwLCByNiwgcjgKKwlwb3BjbnRkKHIzMSwgcjExKQorCWFkZGkJdXAsIHVwLCAxNgorCWFkZGkJdnAsIHZwLCAxNgorCWJkbnoJTCh0b3ApCisKK0woZW5kKToJYWRkCXIwLCByMCwgcjMwCisJeG9yCXIxMSwgcjcsIHI5CisJcG9wY250ZChyMzAsIHIxMCkKKwlhZGQJcjEyLCByMTIsIHIzMQorCXBvcGNudGQocjMxLCByMTEpCisKKwlhZGQJcjAsIHIwLCByMzAKKwlhZGQJcjEyLCByMTIsIHIzMQorTChlMSk6CWFkZAlyMywgcjAsIHIxMgorCWxkCXIzMCwgLTE2KHIxKQorCWxkCXIzMSwgLTgocjEpCisJYmxyCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9wNy9wb3Bjb3VudC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9wNy9wb3Bjb3VudC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI5ZmZlZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L3A3L3BvcGNvdW50LmFzbQpAQCAtMCwwICsxLDkwIEBACitkbmwgIFBvd2VyUEMtNjQgbXBuX3BvcGNvdW50LgorCitkbmwgIENvcHlyaWdodCAyMDEyLCAyMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICAgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgUE9XRVIzL1BQQzYzMCAgICAgICAgICAtCitDIFBPV0VSNC9QUEM5NzAgICAgICAgICAgLQorQyBQT1dFUjUgICAgICAgICAgICAgICAgIC0KK0MgUE9XRVI2ICAgICAgICAgICAgICAgICAtCitDIFBPV0VSNyAgICAgICAgICAgICAgICAgMgorCitkZWZpbmUoYHVwJywgcjMpCitkZWZpbmUoYG4nLCAgcjQpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fcG9wY291bnQpCisJYWRkaQlyMCwgbiwgMQoraWZkZWYoYEhBVkVfQUJJX21vZGUzMicsCitgCXJsZGljbAlyMCwgcjAsIDYzLDMzJywJQyAuLi5icmFuY2ggY291bnQKK2AJc3JkaQlyMCwgcjAsIDEnKQlDIC4uLmZvciBjdHIKKwltdGN0cglyMAorCisJYW5kaS4JcjAsIG4sIDEKKworCWxpCXIwLCAwCisJbGkJcjEyLCAwCisJYmVxCUwoZXZuKQorCitMKG9kZCk6CWxkCXI0LCAwKHVwKQorCWFkZGkJdXAsIHVwLCA4CisJcG9wY250ZChyMCwgcjQpCisJYmR6CUwoZTEpCisKK0woZXZuKToJbGQJcjQsIDAodXApCisJbGQJcjUsIDgodXApCisJcG9wY250ZChyOCwgcjQpCisJcG9wY250ZChyOSwgcjUpCisJYmR6CUwoZTIpCisKKwlsZAlyNCwgMTYodXApCisJbGQJcjUsIDI0KHVwKQorCWJkeglMKGU0KQorCWFkZGkJdXAsIHVwLCAzMgorCitMKHRvcCk6CWFkZAlyMCwgcjAsIHI4CisJcG9wY250ZChyOCwgcjQpCisJbGQJcjQsIDAodXApCisJYWRkCXIxMiwgcjEyLCByOQorCXBvcGNudGQocjksIHI1KQorCWxkCXI1LCA4KHVwKQorCWFkZGkJdXAsIHVwLCAxNgorCWJkbnoJTCh0b3ApCisKK0woZTQpOglhZGQJcjAsIHIwLCByOAorCXBvcGNudGQocjgsIHI0KQorCWFkZAlyMTIsIHIxMiwgcjkKKwlwb3BjbnRkKHI5LCByNSkKK0woZTIpOglhZGQJcjAsIHIwLCByOAorCWFkZAlyMTIsIHIxMiwgcjkKK0woZTEpOglhZGQJcjMsIHIwLCByMTIKKwlibHIKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L3JzaGlmdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9yc2hpZnQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NTRhMTYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9yc2hpZnQuYXNtCkBAIC0wLDAgKzEsMjA3IEBACitkbmwgIFBvd2VyUEMtNjQgbXBuX3JzaGlmdCAtLSBycFtdID0gdXBbXSA+PiBjbnQKKworZG5sICBDb3B5cmlnaHQgMjAwMywgMjAwNSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgICAgICAgICAgIGN5Y2xlcy9saW1iCitDIFBPV0VSMy9QUEM2MzAgICAgICAgICAgPworQyBQT1dFUjQvUFBDOTcwICAgICAgICAgID8KK0MgUE9XRVI1ICAgICAgICAgICAgICAgICAyLjI1CitDIFBPV0VSNiAgICAgICAgICAgICAgICAgOS43NQorQyBQT1dFUjcgICAgICAgICAgICAgICAgIDIuMTUKKworQyBUT0RPCitDICAqIFRyeSB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBuZWVkZWQgbGl2ZSByZWdpc3RlcnMKK0MgICogTWljcm8tb3B0aW1pc2UgaGVhZGVyIGNvZGUKK0MgICogS2VlcCBpbiBzeW5jaCB3aXRoIGxzaGlmdC5hc20gYW5kIGxzaGlmdGMuYXNtCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsICBgcjMnKQorZGVmaW5lKGB1cCcsICBgcjQnKQorZGVmaW5lKGBuJywgICBgcjUnKQorZGVmaW5lKGBjbnQnLCBgcjYnKQorCitkZWZpbmUoYHRuYycsYHIwJykKK2RlZmluZShgdTAnLGByMzAnKQorZGVmaW5lKGB1MScsYHIzMScpCitkZWZpbmUoYHJldHZhbCcsYHI1JykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9yc2hpZnQpCisJc3RkCXIzMSwgLTgocjEpCisJc3RkCXIzMCwgLTE2KHIxKQorCXN1YmZpYwl0bmMsIGNudCwgNjQKK0MJc2xkaQlyMzAsIG4sIDMJQyBieXRlIGNvdW50IGNvcnJlc3BvbmRpbmcgdG8gbgorQwlhZGQJcnAsIHJwLCByMzAJQyBycCA9IHJwICsgbgorQwlhZGQJdXAsIHVwLCByMzAJQyB1cCA9IHVwICsgbgorCXJsZGljbC4JcjMwLCBuLCAwLDYyCUMgcjMwID0gbiAmIDMsIHNldCBjcjAKKwljbXBkaQljcjYsIHIzMCwgMgorCWFkZGkJcjMxLCBuLCAzCUMgY29tcHV0ZSBjb3VudC4uLgorCWxkCXIxMCwgMCh1cCkJQyBsb2FkIDFzdCBsaW1iIGZvciBiMDAuLi5iMTEKKwlzbGQJcmV0dmFsLCByMTAsIHRuYworaWZkZWYoYEhBVkVfQUJJX21vZGUzMicsCitgCXJsZGljbAlyMzEsIHIzMSwgNjIsMzQnLAlDIC4uLmJyYW5jaCBjb3VudAorYAlzcmRpCXIzMSwgcjMxLCAyJykJQyAuLi5mb3IgY3RyCisJbXRjdHIJcjMxCQlDIGNvcHkgY291bnQgaW50byBjdHIKKwliZXEJY3IwLCBMKGIwMCkKKwlibHQJY3I2LCBMKGIwMSkKKwlsZAlyMTEsIDgodXApCUMgbG9hZCAybmQgbGltYiBmb3IgYjEwIGFuZCBiMTEKKwliZXEJY3I2LCBMKGIxMCkKKworCUFMSUdOKDE2KQorTChiMTEpOglzcmQJcjgsIHIxMCwgY250CisJc2xkCXI5LCByMTEsIHRuYworCWxkCXUxLCAxNih1cCkKKwlhZGRpCXVwLCB1cCwgMjQKKwlzcmQJcjEyLCByMTEsIGNudAorCXNsZAlyNywgdTEsIHRuYworCWFkZGkJcnAsIHJwLCAtMTYKKwliZG56CUwoZ3QzKQorCisJb3IJcjExLCByOCwgcjkKKwlzcmQJcjgsIHUxLCBjbnQKKwliCUwoY2ozKQorCisJQUxJR04oMTYpCitMKGd0Myk6CWxkCXUwLCAwKHVwKQorCW9yCXIxMSwgcjgsIHI5CisJc3JkCXI4LCB1MSwgY250CisJc2xkCXI5LCB1MCwgdG5jCisJbGQJdTEsIDgodXApCisJb3IJcjEwLCByMTIsIHI3CisJYglMKEwxMSkKKworCUFMSUdOKDMyKQorTChiMTApOglzcmQJcjEyLCByMTAsIGNudAorCWFkZGkJcnAsIHJwLCAtMjQKKwlzbGQJcjcsIHIxMSwgdG5jCisJYmRueglMKGd0MikKKworCXNyZAlyOCwgcjExLCBjbnQKKwlvcglyMTAsIHIxMiwgcjcKKwliCUwoY2oyKQorCitMKGd0Mik6CWxkCXUwLCAxNih1cCkKKwlzcmQJcjgsIHIxMSwgY250CisJc2xkCXI5LCB1MCwgdG5jCisJbGQJdTEsIDI0KHVwKQorCW9yCXIxMCwgcjEyLCByNworCXNyZAlyMTIsIHUwLCBjbnQKKwlzbGQJcjcsIHUxLCB0bmMKKwlsZAl1MCwgMzIodXApCisJb3IJcjExLCByOCwgcjkKKwlhZGRpCXVwLCB1cCwgMTYKKwliCUwoTDEwKQorCisJQUxJR04oMTYpCitMKGIwMCk6CWxkCXUxLCA4KHVwKQorCXNyZAlyMTIsIHIxMCwgY250CisJc2xkCXI3LCB1MSwgdG5jCisJbGQJdTAsIDE2KHVwKQorCXNyZAlyOCwgdTEsIGNudAorCXNsZAlyOSwgdTAsIHRuYworCWxkCXUxLCAyNCh1cCkKKwlvcglyMTAsIHIxMiwgcjcKKwlzcmQJcjEyLCB1MCwgY250CisJc2xkCXI3LCB1MSwgdG5jCisJYWRkaQlycCwgcnAsIC04CisJYmR6CUwoY2o0KQorCitMKGd0NCk6CWFkZGkJdXAsIHVwLCAzMgorCWxkCXUwLCAwKHVwKQorCW9yCXIxMSwgcjgsIHI5CisJYglMKEwwMCkKKworCUFMSUdOKDE2KQorTChiMDEpOgliZG56CUwoZ3QxKQorCXNyZAlyOCwgcjEwLCBjbnQKKwlzdGQJcjgsIDAocnApCisJYglMKHJldCkKKworTChndDEpOglsZAl1MCwgOCh1cCkKKwlzcmQJcjgsIHIxMCwgY250CisJc2xkCXI5LCB1MCwgdG5jCisJbGQJdTEsIDE2KHVwKQorCXNyZAlyMTIsIHUwLCBjbnQKKwlzbGQJcjcsIHUxLCB0bmMKKwlsZAl1MCwgMjQodXApCisJb3IJcjExLCByOCwgcjkKKwlzcmQJcjgsIHUxLCBjbnQKKwlzbGQJcjksIHUwLCB0bmMKKwlsZAl1MSwgMzIodXApCisJYWRkaQl1cCwgdXAsIDQwCisJb3IJcjEwLCByMTIsIHI3CisJYmR6CUwoZW5kKQorCisJQUxJR04oMzIpCitMKHRvcCk6CXNyZAlyMTIsIHUwLCBjbnQKKwlzbGQJcjcsIHUxLCB0bmMKKwlsZAl1MCwgMCh1cCkKKwlzdGQJcjExLCAwKHJwKQorCW9yCXIxMSwgcjgsIHI5CitMKEwwMCk6CXNyZAlyOCwgdTEsIGNudAorCXNsZAlyOSwgdTAsIHRuYworCWxkCXUxLCA4KHVwKQorCXN0ZAlyMTAsIDgocnApCisJb3IJcjEwLCByMTIsIHI3CitMKEwxMSk6CXNyZAlyMTIsIHUwLCBjbnQKKwlzbGQJcjcsIHUxLCB0bmMKKwlsZAl1MCwgMTYodXApCisJc3RkCXIxMSwgMTYocnApCisJb3IJcjExLCByOCwgcjkKK0woTDEwKToJc3JkCXI4LCB1MSwgY250CisJc2xkCXI5LCB1MCwgdG5jCisJbGQJdTEsIDI0KHVwKQorCWFkZGkJdXAsIHVwLCAzMgorCXN0ZAlyMTAsIDI0KHJwKQorCWFkZGkJcnAsIHJwLCAzMgorCW9yCXIxMCwgcjEyLCByNworCWJkbnoJTCh0b3ApCisKKwlBTElHTigzMikKK0woZW5kKToJc3JkCXIxMiwgdTAsIGNudAorCXNsZAlyNywgdTEsIHRuYworCXN0ZAlyMTEsIDAocnApCitMKGNqNCk6CW9yCXIxMSwgcjgsIHI5CisJc3JkCXI4LCB1MSwgY250CisJc3RkCXIxMCwgOChycCkKK0woY2ozKToJb3IJcjEwLCByMTIsIHI3CisJc3RkCXIxMSwgMTYocnApCitMKGNqMik6CXN0ZAlyMTAsIDI0KHJwKQorCXN0ZAlyOCwgMzIocnApCisKK0wocmV0KToJbGQJcjMxLCAtOChyMSkKKwlsZAlyMzAsIC0xNihyMSkKK2lmZGVmKGBIQVZFX0FCSV9tb2RlMzInLAorYAlzcmRpCXIzLCByZXR2YWwsIDMyCisJbXIJcjQsIHJldHZhbAorJyxgCW1yCXIzLCByZXR2YWwnKQorCWJscgorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvc2VjX3RhYnNlbGVjdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Bvd2VycGM2NC9zZWNfdGFic2VsZWN0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODU1NzdjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvc2VjX3RhYnNlbGVjdC5hc20KQEAgLTAsMCArMSwxNDcgQEAKK2RubCAgUG93ZXJQQy02NCBtcG5fc2VjX3RhYnNlbGVjdC4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDExLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgICAgICAgICAgICBjeWNsZXMvbGltYgorQyBQT1dFUjMvUFBDNjMwCQkgMS43NQorQyBQT1dFUjQvUFBDOTcwCQkgMi4wCitDIFBPV0VSNQkJID8KK0MgUE9XRVI2CQkgNS4wCitDIFBPV0VSNwkJIDEuNzUKKworZGVmaW5lKGBycCcsICAgICBgcjMnKQorZGVmaW5lKGB0cCcsICAgICBgcjQnKQorZGVmaW5lKGBuJywgICAgICBgcjUnKQorZGVmaW5lKGBuZW50cycsICBgcjYnKQorZGVmaW5lKGB3aGljaCcsICBgcjcnKQorCitkZWZpbmUoYGknLCAgICAgIGByOCcpCitkZWZpbmUoYGonLCAgICAgIGByOScpCitkZWZpbmUoYHN0cmlkZScsIGByMTInKQorZGVmaW5lKGBtYXNrJywgICBgcjExJykKKworCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX3NlY190YWJzZWxlY3QpCisJYWRkaWMuCWosIG4sIC00CQlDIG91dGVyIGxvb3AgaW5kdWN0aW9uIHZhcmlhYmxlCisJc3RkCXIzMSwgLTgocjEpCisJc3RkCXIzMCwgLTE2KHIxKQorCXN0ZAlyMjksIC0yNChyMSkKKwlzdGQJcjI4LCAtMzIocjEpCisJc3RkCXIyNywgLTQwKHIxKQorCXNsZGkJc3RyaWRlLCBuLCAzCisKKwlibHQJY3IwLCBMKG91dGVyX2VuZCkKK0wob3V0ZXJfdG9wKToKKwltdGN0cgluZW50cworCW1yCXIxMCwgdHAKKwlsaQlyMjgsIDAKKwlsaQlyMjksIDAKKwlsaQlyMzAsIDAKKwlsaQlyMzEsIDAKKwlhZGRpYy4JaiwgaiwgLTQJCUMgb3V0ZXIgbG9vcCBpbmR1Y3Rpb24gdmFyaWFibGUKKwltcglpLCB3aGljaAorCisJQUxJR04oMTYpCitMKHRvcCk6CWFkZGljCWksIGksIC0xCQlDIHNldCBjYXJyeSBpZmYgaSAhPSAwCisJc3ViZmUJbWFzaywgbWFzaywgbWFzaworCWxkCXIwLCAwKHRwKQorCWxkCXIyNywgOCh0cCkKKwlhbmQJcjAsIHIwLCBtYXNrCisJYW5kCXIyNywgcjI3LCBtYXNrCisJb3IJcjI4LCByMjgsIHIwCisJb3IJcjI5LCByMjksIHIyNworCWxkCXIwLCAxNih0cCkKKwlsZAlyMjcsIDI0KHRwKQorCWFuZAlyMCwgcjAsIG1hc2sKKwlhbmQJcjI3LCByMjcsIG1hc2sKKwlvcglyMzAsIHIzMCwgcjAKKwlvcglyMzEsIHIzMSwgcjI3CisJYWRkCXRwLCB0cCwgc3RyaWRlCisJYmRueglMKHRvcCkKKworCXN0ZAlyMjgsIDAocnApCisJc3RkCXIyOSwgOChycCkKKwlzdGQJcjMwLCAxNihycCkKKwlzdGQJcjMxLCAyNChycCkKKwlhZGRpCXRwLCByMTAsIDMyCisJYWRkaQlycCwgcnAsIDMyCisJYmdlCWNyMCwgTChvdXRlcl90b3ApCitMKG91dGVyX2VuZCk6CisKKwlybGRpY2wuCXIwLCBuLCA2MywgNjMKKwliZXEJY3IwLCBMKGIweCkKK0woYjF4KToJbXRjdHIJbmVudHMKKwltcglyMTAsIHRwCisJbGkJcjI4LCAwCisJbGkJcjI5LCAwCisJbXIJaSwgd2hpY2gKKwlBTElHTigxNikKK0wodHAyKToJYWRkaWMJaSwgaSwgLTEKKwlzdWJmZQltYXNrLCBtYXNrLCBtYXNrCisJbGQJcjAsIDAodHApCisJbGQJcjI3LCA4KHRwKQorCWFuZAlyMCwgcjAsIG1hc2sKKwlhbmQJcjI3LCByMjcsIG1hc2sKKwlvcglyMjgsIHIyOCwgcjAKKwlvcglyMjksIHIyOSwgcjI3CisJYWRkCXRwLCB0cCwgc3RyaWRlCisJYmRueglMKHRwMikKKwlzdGQJcjI4LCAwKHJwKQorCXN0ZAlyMjksIDgocnApCisJYWRkaQl0cCwgcjEwLCAxNgorCWFkZGkJcnAsIHJwLCAxNgorCitMKGIweCk6CXJsZGljbC4JcjAsIG4sIDAsIDYzCisJYmVxCWNyMCwgTChiMDApCitMKGIwMSk6CW10Y3RyCW5lbnRzCisJbXIJcjEwLCB0cAorCWxpCXIyOCwgMAorCW1yCWksIHdoaWNoCisJQUxJR04oMTYpCitMKHRwMSk6CWFkZGljCWksIGksIC0xCisJc3ViZmUJbWFzaywgbWFzaywgbWFzaworCWxkCXIwLCAwKHRwKQorCWFuZAlyMCwgcjAsIG1hc2sKKwlvcglyMjgsIHIyOCwgcjAKKwlhZGQJdHAsIHRwLCBzdHJpZGUKKwliZG56CUwodHAxKQorCXN0ZAlyMjgsIDAocnApCisKK0woYjAwKToJbGQJcjMxLCAtOChyMSkKKwlsZAlyMzAsIC0xNihyMSkKKwlsZAlyMjksIC0yNChyMSkKKwlsZAlyMjgsIC0zMihyMSkKKwlsZAlyMjcsIC00MChyMSkKKwlibHIKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L3VtdWwuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvdW11bC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZjYzcyZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L3VtdWwuYXNtCkBAIC0wLDAgKzEsNTMgQEAKK2RubCAgUG93ZXJQQy02NCB1bXVsX3BwbW0gLS0gc3VwcG9ydCBmb3IgbG9uZ2xvbmcuaAorCitkbmwgIENvcHlyaWdodCAyMDAwLCAyMDAxLCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQyBtcF9saW1iX3QgbXBuX3VtdWxfcHBtbSAobXBfbGltYl90ICpsb3dwdHIsIG1wX2xpbWJfdCBtMSwgbXBfbGltYl90IG0yKTsKK0MKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl91bXVsX3BwbW0pCisKKwlDIHIzCWxvd3B0cgorCUMgcjQJbTEKKwlDIHI1CW0yCisKKwltdWxsZAlyMCwgcjQsIHI1CisJbXVsaGR1CXI0LCByNCwgcjUKKwlzdGQJcjAsIDAocjMpCitpZmRlZihgSEFWRV9BQklfbW9kZTMyJywKK2AJc3JkaQlyMywgcjQsIDMyCisnLGAJbXIJcjMsIHI0CisnKQorCWJscgorCitFUElMT0dVRShtcG5fdW11bF9wcG1tKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9wb3dlcnBjNjQvdm14L3BvcGNvdW50LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L3ZteC9wb3Bjb3VudC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk1ZmI4OAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcG93ZXJwYzY0L3ZteC9wb3Bjb3VudC5hc20KQEAgLTAsMCArMSwyMzAgQEAKK2RubCAgUG93ZXJQQy0zMi9WTVggYW5kIFBvd2VyUEMtNjQvVk1YIG1wbl9wb3Bjb3VudC4KKworZG5sICBDb3B5cmlnaHQgMjAwNiwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgICAgICAgICAgIGN5Y2xlcy9saW1iCitDIDc0MDAsNzQxMCAoRzQpOiAgICAgICA/CitDIDc0NHgsNzQ1eCAoRzQrKTogICAgICAxLjEyNQorQyA5NzAgKEc1KTogICAgICAgICAgICAgMi4yNQorCitDIFRPRE8KK0MgICogUmV3cml0ZSB0aGUgYXdrd2FyZCBodWdlIG4gb3V0ZXIgbG9vcCBjb2RlLgorQyAgKiBUd28gbHZ4LCB0d28gdnBlcm0sIGFuZCB0d28gdnhvciBjb3VsZCBtYWtlIHVzIGEgc2ltaWxhciBoYW1kaXN0LgorQyAgKiBDb21wcmVzcyBjbnN0cyB0YWJsZSBpbiA2NC1iaXQgbW9kZSwgb25seSBoYWxmIHRoZSB2YWx1ZXMgYXJlIG5lZWRlZC4KKworZGVmaW5lKGBHTVBfTElNQl9CWVRFUycsIGV2YWwoR01QX0xJTUJfQklUUy84KSkKK2RlZmluZShgTElNQlNfUEVSX1ZSJywgIGV2YWwoMTYvR01QX0xJTUJfQllURVMpKQorZGVmaW5lKGBMSU1CU19QRVJfMlZSJywgZXZhbCgzMi9HTVBfTElNQl9CWVRFUykpCisKK2RlZmluZShgT1BFUkFUSU9OX3BvcGNvdW50JykKKworZGVmaW5lKGBhcCcsCWByMycpCitkZWZpbmUoYG4nLAlgcjQnKQorCitkZWZpbmUoYHJ0YWInLAlgdjEwJykKK2RlZmluZShgY250NCcsCWB2MTEnKQorCitpZmVsc2UoR01QX0xJTUJfQklUUywzMixgCisJZGVmaW5lKGBMSU1CMzInLGAJJDEnKQorCWRlZmluZShgTElNQjY0JyxgJykKKycsYAorCWRlZmluZShgTElNQjMyJyxgJykKKwlkZWZpbmUoYExJTUI2NCcsYAkkMScpCisnKQorCitDIFRoZSBpbm5lciBsb29wIGhhbmRsZXMgdXAgdG8gMl4zNCBiaXRzLCBpLmUuLCAyXjMxIDY0LWxpbWJzLCBkdWUgdG8gb3ZlcmZsb3cKK0MgaW4gdnN1bTR1YnMuICBGb3IgbGFyZ2Ugb3BlcmFuZHMsIHdlIHdvcmsgaW4gY2h1bmtzLCBvZiBzaXplIExJTUJTX1BFUl9DSFVOSy4KK2RlZmluZShgTElNQlNfUEVSX0NIVU5LJywgMHgxMDAwKQorZGVmaW5lKGBMSU1CU19DSFVOS19USFJFUycsIDB4MTAwMSkKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9wb3Bjb3VudCx0b2MpCisJbWZzcHIJcjEwLCAyNTYKKwlvcmlzCXIwLCByMTAsIDB4ZmZmYwkJQyBTZXQgVlJTQVZFIGJpdCAwLTEzCisJbXRzcHIJMjU2LCByMAorCitpZmRlZihgSEFWRV9BQklfbW9kZTMyJywKK2AJcmxkaWNsCW4sIG4sIDAsIDMyJykJCUMgemVybyBleHRlbmQgbgorCitDIExvYWQgdmFyaW91cyBjb25zdGFudHMgaW50byB2ZWN0b3IgcmVnaXN0ZXJzCisJTEVBTCgJcjExLCBjbnN0cykKKwlsaQlyMTIsIDE2CisJdnNwbHRpc2IgY250NCwgNAkJQyAweDA0MDQuLi4wNCB1c2VkIGFzIHNoaWZ0IGNvdW50CisKKwlsaQlyNywgMTYwCisJbHZ4CXJ0YWIsIDAsIHIxMQorCitMSU1CNjQoYGxpcwlyMCwgTElNQlNfQ0hVTktfVEhSRVMJJykKK0xJTUI2NChgY21wZAljcjcsIG4sIHIwCQknKQorCisJbHZ4CXYwLCAwLCBhcAorCWFkZGkJcjcsIHIxMSwgODAKKwlybHdpbm0JcjYsIGFwLCAyLDI2LDI5CisJbHZ4CXY4LCByNywgcjYKKwl2YW5kCXYwLCB2MCwgdjgKKworTElNQjMyKGBybHdpbm0JcjgsIGFwLCAzMCwzMCwzMQknKQorTElNQjY0KGBybHdpbm0JcjgsIGFwLCAyOSwzMSwzMQknKQorCWFkZAluLCBuLCByOAkJQyBjb21wZW5zYXRlIG4gZm9yIHJvdW5kZWQgZG93biBgYXAnCisKKwl2eG9yCXYxLCB2MSwgdjEKKwlsaQlyOCwgMAkJCUMgZ3JhbmQgdG90YWwgY291bnQKKworCXZ4b3IJdjEyLCB2MTIsIHYxMgkJQyB6ZXJvIHRvdGFsIGNvdW50CisJdnhvcgl2MTMsIHYxMywgdjEzCQlDIHplcm8gdG90YWwgY291bnQKKworCWFkZGljLgluLCBuLCAtTElNQlNfUEVSX1ZSCisJYmxlCUwoc3VtKQorCisJYWRkaWMuCW4sIG4sIC1MSU1CU19QRVJfVlIKKwlibGUJTChsc3VtKQorCitDIEZvciA2NC1iaXQgbWFjaGluZXMsIGhhbmRsZSBodWdlIG4gdGhhdCB3b3VsZCBvdmVyZmxvdyB2c3VtNHVicworTElNQjY0KGBibGUJY3I3LCBMKHNtYWxsKQkJJykKK0xJTUI2NChgYWRkaXMJcjksIG4sIC1MSU1CU19QRVJfQ0hVTksJJykgQyByZW1haW5pbmcgbgorTElNQjY0KGBsaXMJbiwgTElNQlNfUEVSX0NIVU5LCScpCisKKwlBTElHTigxNikKK0woc21hbGwpOgorTElNQjMyKGBzcndpCXI3LCBuLCAzCScpCUMgbG9vcCBjb3VudCBjb3JyZXNwb25kaW5nIHRvIG4KK0xJTUI2NChgc3JkaQlyNywgbiwgMgknKQlDIGxvb3AgY291bnQgY29ycmVzcG9uZGluZyB0byBuCisJYWRkaQlyNywgcjcsIDEKKwltdGN0cglyNwkJCUMgY29weSBuIHRvIGNvdW50IHJlZ2lzdGVyCisJYglMKGVudCkKKworCUFMSUdOKDE2KQorTCh0b3ApOgorCWx2eAl2MCwgMCwgYXAKK0woZW50KToJbHZ4CXYxLCByMTIsIGFwCisJYWRkaQlhcCwgYXAsIDMyCisJdnNyYgl2OCwgdjAsIGNudDQKKwl2c3JiCXY5LCB2MSwgY250NAorCXZwZXJtCXYyLCBydGFiLCBydGFiLCB2MAorCXZwZXJtCXYzLCBydGFiLCBydGFiLCB2OAorCXZwZXJtCXY0LCBydGFiLCBydGFiLCB2MQorCXZwZXJtCXY1LCBydGFiLCBydGFiLCB2OQorCXZhZGR1Ym0JdjYsIHYyLCB2MworCXZhZGR1Ym0JdjcsIHY0LCB2NQorCXZzdW00dWJzIHYxMiwgdjYsIHYxMgorCXZzdW00dWJzIHYxMywgdjcsIHYxMworCWJkbnoJTCh0b3ApCisKKwlhbmRpLgluLCBuLCBldmFsKExJTUJTX1BFUl8yVlItMSkKKwliZXEJTChydCkKKworCWx2eAl2MCwgMCwgYXAKKwl2eG9yCXYxLCB2MSwgdjEKKwljbXB3aQluLCBMSU1CU19QRVJfVlIKKwlibGUJTChzdW0pCitMKGxzdW0pOgorCXZvcgl2MSwgdjAsIHYwCisJbHZ4CXYwLCByMTIsIGFwCitMKHN1bSk6CitMSU1CMzIoYHJsd2lubQlyNiwgbiwgNCwyNiwyNwknKQorTElNQjY0KGBybHdpbm0JcjYsIG4sIDUsMjYsMjYJJykKKwlhZGRpCXI3LCByMTEsIDE2CisJbHZ4CXY4LCByNywgcjYKKwl2YW5kCXYwLCB2MCwgdjgKKwl2c3JiCXY4LCB2MCwgY250NAorCXZzcmIJdjksIHYxLCBjbnQ0CisJdnBlcm0JdjIsIHJ0YWIsIHJ0YWIsIHYwCisJdnBlcm0JdjMsIHJ0YWIsIHJ0YWIsIHY4CisJdnBlcm0JdjQsIHJ0YWIsIHJ0YWIsIHYxCisJdnBlcm0JdjUsIHJ0YWIsIHJ0YWIsIHY5CisJdmFkZHVibQl2NiwgdjIsIHYzCisJdmFkZHVibQl2NywgdjQsIHY1CisJdnN1bTR1YnMgdjEyLCB2NiwgdjEyCisJdnN1bTR1YnMgdjEzLCB2NywgdjEzCisKKwlBTElHTigxNikKK0wocnQpOgl2YWRkdXdtCXYzLCB2MTIsIHYxMworCWxpCXI3LCAtMTYJCQlDIEZJWE1FOiBkb2VzIGFsbCBwcGMzMiBhbmQgcHBjNjQgQUJJcworCXN0dngJdjMsIHI3LCByMQkJQyBGSVhNRTogLi4uc3VwcG9ydCBzdG9yaW5nIGJlbG93IHNwPworCisJbHd6CXI3LCAtMTYocjEpCisJYWRkCXI4LCByOCwgcjcKKwlsd3oJcjcsIC0xMihyMSkKKwlhZGQJcjgsIHI4LCByNworCWx3eglyNywgLTgocjEpCisJYWRkCXI4LCByOCwgcjcKKwlsd3oJcjcsIC00KHIxKQorCWFkZAlyOCwgcjgsIHI3CisKK0MgSGFuZGxlIG91dGVyIGxvb3AgZm9yIGh1Z2Ugbi4gIFdlIGluaGVyaXQgY3I3IGFuZCByMCBmcm9tIGFib3ZlLgorTElNQjY0KGBibGUJY3I3LCBMKHJldCkKKwl2eG9yCXYxMiwgdjEyLCB2MTIJCUMgemVybyB0b3RhbCBjb3VudAorCXZ4b3IJdjEzLCB2MTMsIHYxMwkJQyB6ZXJvIHRvdGFsIGNvdW50CisJbXIJbiwgcjkKKwljbXBkCWNyNywgbiwgcjAKKwlibGUJY3I3LCBMKDIpCisJYWRkaXMJcjksIG4sIC1MSU1CU19QRVJfQ0hVTksJQyByZW1haW5pbmcgbgorCWxpcwluLCBMSU1CU19QRVJfQ0hVTksKK0woMik6CXNyZGkJcjcsIG4sIDIJCUMgbG9vcCBjb3VudCBjb3JyZXNwb25kaW5nIHRvIG4KKwltdGN0cglyNwkJCUMgY29weSBuIHRvIGNvdW50IHJlZ2lzdGVyCisJYglMKHRvcCkKKycpCisKKwlBTElHTigxNikKK0wocmV0KToJbXIJcjMsIHI4CisJbXRzcHIJMjU2LCByMTAKKwlibHIKK0VQSUxPR1VFKCkKKworREVGX09CSkVDVChjbnN0cywxNikKK0MgQ291bnRzIGZvciB2cGVybQorCS5ieXRlCTB4MDAsMHgwMSwweDAxLDB4MDIsMHgwMSwweDAyLDB4MDIsMHgwMworCS5ieXRlCTB4MDEsMHgwMiwweDAyLDB4MDMsMHgwMiwweDAzLDB4MDMsMHgwNAorQyBNYXNrcyBmb3IgaGlnaCBlbmQgb2YgbnVtYmVyCisJLmJ5dGUJMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmCisJLmJ5dGUJMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmCisKKwkuYnl0ZQkweGZmLDB4ZmYsMHhmZiwweGZmLDB4MDAsMHgwMCwweDAwLDB4MDAKKwkuYnl0ZQkweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKKworCS5ieXRlCTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZgorCS5ieXRlCTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAorCisJLmJ5dGUJMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmCisJLmJ5dGUJMHhmZiwweGZmLDB4ZmYsMHhmZiwweDAwLDB4MDAsMHgwMCwweDAwCitDIE1hc2tzIGZvciBsb3cgZW5kIG9mIG51bWJlcgorCS5ieXRlCTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZgorCS5ieXRlCTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZgorCisJLmJ5dGUJMHgwMCwweDAwLDB4MDAsMHgwMCwweGZmLDB4ZmYsMHhmZiwweGZmCisJLmJ5dGUJMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmCisKKwkuYnl0ZQkweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKKwkuYnl0ZQkweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYKKworCS5ieXRlCTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAorCS5ieXRlCTB4MDAsMHgwMCwweDAwLDB4MDAsMHhmZiwweGZmLDB4ZmYsMHhmZgorRU5EX09CSkVDVChjbnN0cykKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9yaXNjdi82NC9hb3JzX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9yaXNjdi82NC9hb3JzX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMzgwODMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Jpc2N2LzY0L2FvcnNfbi5hc20KQEAgLTAsMCArMSw4OSBAQAorZG5sICBSSVNDLVYvNjQgbXBuX2FkZF9uIGFuZCBtcG5fc3ViX24uCisKK2RubCAgQ29weXJpZ2h0IDIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsCWBhMCcpCitkZWZpbmUoYHVwJywJYGExJykKK2RlZmluZShgdnAnLAlgYTInKQorZGVmaW5lKGBuJywJYGEzJykKKworaWZkZWYoYE9QRVJBVElPTl9hZGRfbicsYAorICAgIGRlZmluZShgQUREU1VCJywJYGFkZCcpCisgICAgZGVmaW5lKGBDTVBDWScsCWBzbHR1CSQxLCAkMiwgJDMnKQorICAgIGRlZmluZShgZnVuYycsCWBtcG5fYWRkX24nKQorJykKK2lmZGVmKGBPUEVSQVRJT05fc3ViX24nLGAKKyAgICBkZWZpbmUoYEFERFNVQicsCWBzdWInKQorICAgIGRlZmluZShgQ01QQ1knLAlgc2x0dQkkMSwgJDMsICQyJykKKyAgICBkZWZpbmUoYGZ1bmMnLAlgbXBuX3N1Yl9uJykKKycpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FkZF9uIG1wbl9zdWJfbikKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKGZ1bmMpCisJbGkJdDYsIDAKKworCWFuZGkJdDAsIG4sIDEKKwliZXEJdDAsIHgwLCBMKHRvcCkKKwlhZGRpCXVwLCB1cCwgOAorCWFkZGkJdnAsIHZwLCAtOAorCWFkZGkJcnAsIHJwLCAtOAorCWFkZGkJbiwgbiwgLTEKKwlqCUwobWlkKQorCitMKHRvcCk6CWxkCWE0LCAwKHVwKQorCWxkCWE2LCAwKHZwKQorCWFkZGkJbiwgbiwgLTIJQyBib29ra2VlcGluZworCWFkZGkJdXAsIHVwLCAxNglDIGJvb2trZWVwaW5nCisJQUREU1VCCXQwLCBhNCwgYTYKKwlDTVBDWSgJdDIsIHQwLCBhNCkKKwlBRERTVUIJdDQsIHQwLCB0NglDIGN5Y2xlIDMsIDksIC4uLgorCUNNUENZKAl0MywgdDQsIHQwKQlDIGN5Y2xlIDQsIDEwLCAuLi4KKwlzZAl0NCwgMChycCkKKwlhZGQJdDYsIHQyLCB0MwlDIGN5Y2xlIDUsIDExLCAuLi4KK0wobWlkKToJbGQJYTUsIC04KHVwKQorCWxkCWE3LCA4KHZwKQorCWFkZGkJdnAsIHZwLCAxNglDIGJvb2trZWVwaW5nCisJYWRkaQlycCwgcnAsIDE2CUMgYm9va2tlZXBpbmcKKwlBRERTVUIJdDEsIGE1LCBhNworCUNNUENZKAl0MiwgdDEsIGE1KQorCUFERFNVQgl0NCwgdDEsIHQ2CUMgY3ljbGUgMCwgNiwgLi4uCisJQ01QQ1koCXQzLCB0NCwgdDEpCUMgY3ljbGUgMSwgNywgLi4uCisJc2QJdDQsIC04KHJwKQorCWFkZAl0NiwgdDIsIHQzCUMgY3ljbGUgMiwgOCwgLi4uCisJYm5lCW4sIHgwLCBMKHRvcCkJQyBib29ra2VlcGluZworCitMKGVuZCk6CW12CWEwLCB0NgorCXJldAorRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Jpc2N2LzY0L2FvcnNtdWxfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Jpc2N2LzY0L2FvcnNtdWxfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEyNWE5ZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcmlzY3YvNjQvYW9yc211bF8xLmFzbQpAQCAtMCwwICsxLDc1IEBACitkbmwgIFJJU0MtVi82NCBtcG5fYWRkbXVsXzEgYW5kIG1wbl9zdWJtdWxfMS4KKworZG5sICBDb3B5cmlnaHQgMjAxNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywJYGEwJykKK2RlZmluZShgdXAnLAlgYTEnKQorZGVmaW5lKGBuJywJYGEyJykKK2RlZmluZShgdjAnLAlgYTMnKQorCitpZmRlZihgT1BFUkFUSU9OX2FkZG11bF8xJyxgCisgICAgZGVmaW5lKGBBRERTVUInLAlgYWRkJykKKyAgICBkZWZpbmUoYENNUENZJywJYHNsdHUJJDEsICQyLCAkMycpCisgICAgZGVmaW5lKGBmdW5jJywJYG1wbl9hZGRtdWxfMScpCisnKQoraWZkZWYoYE9QRVJBVElPTl9zdWJtdWxfMScsYAorICAgIGRlZmluZShgQUREU1VCJywJYHN1YicpCisgICAgZGVmaW5lKGBDTVBDWScsCWBzbHR1CSQxLCAkMywgJDInKQorICAgIGRlZmluZShgZnVuYycsCWBtcG5fc3VibXVsXzEnKQorJykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fYWRkbXVsXzEgbXBuX3N1Ym11bF8xKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUoZnVuYykKKwlsaQlhNiwgMAorCitMKHRvcCk6CWxkCWE3LCAwKHVwKQorCWFkZGkJdXAsIHVwLCA4CUMgYm9va2tlZXBpbmcKKwlsZAlhNCwgMChycCkKKwlhZGRpCXJwLCBycCwgOAlDIGJvb2trZWVwaW5nCisJbXVsCWE1LCBhNywgdjAKKwlhZGRpCW4sIG4sIC0xCUMgYm9va2tlZXBpbmcKKwltdWxodQlhNywgYTcsIHYwCisJQUREU1VCCWE1LCBhNCwgYTUKKwlBRERTVUIJYTYsIGE1LCBhNglDIGN5Y2xlIDAsIDMsIC4uLgorCUNNUENZKAlhNCwgYTUsIGE0KQorCWFkZAlhNCwgYTQsIGE3CisJQ01QQ1koCWE1LCBhNiwgYTUpCUMgY3ljbGUgMSwgNCwgLi4uCisJc2QJYTYsIC04KHJwKQorCWFkZAlhNiwgYTQsIGE1CUMgY3ljbGUgMiwgNSwgLi4uCisJYm5lCW4sIHgwLCBMKHRvcCkJQyBib29ra2VlcGluZworCitMKGVuZCk6CW12CWEwLCBhNgorCXJldAorRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3Jpc2N2LzY0L211bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vcmlzY3YvNjQvbXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNWVhYTkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3Jpc2N2LzY0L211bF8xLmFzbQpAQCAtMCwwICsxLDU4IEBACitkbmwgIFJJU0MtVi82NCBtcG5fbXVsXzEuCisKK2RubCAgQ29weXJpZ2h0IDIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsCWBhMCcpCitkZWZpbmUoYHVwJywJYGExJykKK2RlZmluZShgbicsCWBhMicpCitkZWZpbmUoYHYwJywJYGEzJykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9tdWxfMSkKKwlsaQlhNiwgMAorCitMKHRvcCk6CWxkCWE3LCAwKHVwKQorCWFkZGkJdXAsIHVwLCA4CUMgYm9va2tlZXBpbmcKKwlhZGRpCXJwLCBycCwgOAlDIGJvb2trZWVwaW5nCisJbXVsCWE1LCBhNywgdjAKKwlhZGRpCW4sIG4sIC0xCUMgYm9va2tlZXBpbmcKKwltdWxodQlhNywgYTcsIHYwCisJYWRkCWE2LCBhNSwgYTYJQyBjeWNsZSAwLCAzLCAuLi4KKwlzbHR1CWE1LCBhNiwgYTUJQyBjeWNsZSAxLCA0LCAuLi4KKwlzZAlhNiwgLTgocnApCisJYWRkCWE2LCBhNywgYTUJQyBjeWNsZSAyLCA1LCAuLi4KKwlibmUJbiwgeDAsIEwodG9wKQlDIGJvb2trZWVwaW5nCisKK0woZW5kKToJbXYJYTAsIGE2CisJcmV0CitFUElMT0dVRSgpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vczM5MF8zMi9SRUFETUUgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfMzIvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NTE5YmEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfMzIvUkVBRE1FCkBAIC0wLDAgKzEsMzcgQEAKK0FsbCBjdXJyZW50ICgyMDAxKSBTLzM5MCBhbmQgei9BcmNoaXRlY3R1cmUgbWFjaGluZXMgYXJlIHNpbmdsZS1pc3N1ZSwKK2J1dCBzb21lIG5ld2VyIG1hY2hpbmVzIGhhdmUgYSBkZWVwIHBpcGVsaW5lLiAgU29mdHdhcmUtcGlwZWxpbmluZyBpcwordGhlcmVmb3JlIGJlbmVmaWNpYWwuCisKKyogbXBuX2FkZF9uLCBtcG5fc3ViX246IFVzZSBjb2RlIGFsb25nIHRoZSBsaW5lcyBiZWxvdy4gIFR3by13YXkgdW5yb2xsaW5nCisgIHdvdWxkIGJlIGFkZXF1YXRlLgorCisgIG1wX2xpbWJfdAorICBtcG5fYWRkX24gKG1wX3B0ciBycCwgbXBfc3JjcHRyIHVwLCBtcF9zcmNwdHIgdnAsIG1wX3NpemVfdCBuKQorICB7CisgICAgbXBfbGltYl90IGEsIGIsIHIsIGN5OworICAgIG1wX3NpemVfdCBpOworICAgIG1wX2xpbWJfdCBtbSA9IC0xOworCisgICAgY3kgPSAwOworICAgIHVwICs9IG47CisgICAgdnAgKz0gbjsKKyAgICBycCArPSBuOworICAgIGkgPSAtbjsKKyAgICBkbworICAgICAgeworCWEgPSB1cFtpXTsKKwliID0gdnBbaV07CisJciA9IGEgKyBiICsgY3k7CisJcnBbaV0gPSByOworCWN5ID0gKCgoYSAmIGIpIHwgKChhIHwgYikgJiAociBeIG1tKSkpKSA+PiAzMTsKKwlpKys7CisgICAgICB9CisgICAgd2hpbGUgKGkgPCAwKTsKKyAgICByZXR1cm4gY3k7CisgIH0KKworKiBtcG5fbHNoaWZ0LCBtcG5fcnNoaWZ0OiBVc2UgU0xETC9TUkRMLCBhbmQgdHdvLXdheSB1bnJvbGxpbmcuCisKKyogbXBuX211bF8xLCBtcG5fYWRkbXVsXzEsIG1wbl9zdWJtdWxfMTogRm9yIG1hY2hpbmVzIHdpdGgganVzdCBzaWduZWQKKyAgbXVsdGlwbHkgKE1SKSwgdXNlIHR3byBsb29wcywgc2ltaWxhciB0byB0aGUgY29ycmVzcG9uZGluZyBWQVggb3IKKyAgUE9XRVIgZnVuY3Rpb25zLiAgSGFuZGxlIGNhcnJ5IGxpa2UgZm9yIG1wbl9hZGRfbi4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vczM5MF8zMi9hZGRtdWxfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfMzIvYWRkbXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3MTg5YTgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfMzIvYWRkbXVsXzEuYXNtCkBAIC0wLDAgKzEsOTMgQEAKK2RubCAgUy8zOTAgbXBuX2FkZG11bF8xIC0tIE11bHRpcGx5IGEgbGltYiB2ZWN0b3Igd2l0aCBhIGxpbWIgYW5kIGFkZCB0aGUKK2RubCAgcmVzdWx0IHRvIGEgc2Vjb25kIGxpbWIgdmVjdG9yLgorCitkbmwgIENvcHlyaWdodCAyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK2RlZmluZShgcnAnLDIpCitkZWZpbmUoYHVwJywzKQorZGVmaW5lKGBuJyw0KQorZGVmaW5lKGB2bGltYicsNSkKK2RlZmluZShgY3lsaW1iJyw3KQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2FkZG11bF8xKQorCXN0bQk2LDcsMjQoMTUpCisJc2xyCWN5bGltYixjeWxpbWIJIyBjbGVhciBjeWxpbWIKKwlsdHIJdmxpbWIsdmxpbWIKKwlqbmwJLkxvb3BwCisKKy5Mb29wbjoJbAkxLDAodXApCQkjIGxvYWQgZnJvbSB1CisJbHIJNiwxCQkjCisJbXIJMCx2bGltYgkJIyBtdWx0aXBseSBzaWduZWQKKwlhbHIJMCw2CQkjIGFkZCB2bGltYiB0byBwaGkKKwlzcmEJNiwzMQkJIyBtYWtlIG1hc2sKKwlucgk2LHZsaW1iCQkjIDAgb3IgdmxpbWIKKwlhbHIJMCw2CQkjIGNvbmRpdGlvbmFsbHkgYWRkIHZsaW1iIHRvIHBoaQorCWFscgkxLGN5bGltYgkjIGFkZCBjYXJyeSBsaW1iIHRvIHBsbworCWJyYwk4KzQsKzgJCSMgYnJhbmNoIGlmIG5vdCBjYXJyeQorCWFoaQkwLDEJCSMgaW5jcmVtZW50IHBoaQorCWwJNiwwKHJwKQkJIyBsb2FkIHIgbGltYgorCWFscgk2LDEJCSMgYWRkIHUgbGltYiB0byBwbG8KKwlicmMJOCs0LCs4CQkjIGJyYW5jaCBpZiBub3QgY2FycnkKKwlhaGkJMCwxCQkjIGluY3JlbWVudCBwaGkKKwlscgljeWxpbWIsMAkjIG5ldyBjeWxpbWIKKwlzdAk2LDAocnApCQkjIHN0b3JlCisJbGEJdXAsNCgsdXApCisJbGEJcnAsNCgscnApCisJYnJjdAluLC5Mb29wbgorCisJbHIJMixjeWxpbWIKKwlsbQk2LDcsMjQoMTUpCisJYnIJMTQKKworLkxvb3BwOglsCTEsMCh1cCkJCSMgbG9hZCBmcm9tIHUKKwlscgk2LDEJCSMKKwltcgkwLHZsaW1iCQkjIG11bHRpcGx5IHNpZ25lZAorCXNyYQk2LDMxCQkjIG1ha2UgbWFzaworCW5yCTYsdmxpbWIJCSMgMCBvciB2bGltYgorCWFscgkwLDYJCSMgY29uZGl0aW9uYWxseSBhZGQgdmxpbWIgdG8gcGhpCisJYWxyCTEsY3lsaW1iCSMgYWRkIGNhcnJ5IGxpbWIgdG8gcGxvCisJYnJjCTgrNCwrOAkJIyBicmFuY2ggaWYgbm90IGNhcnJ5CisJYWhpCTAsMQkJIyBpbmNyZW1lbnQgcGhpCisJbAk2LDAocnApCQkjIGxvYWQgciBsaW1iCisJYWxyCTYsMQkJIyBhZGQgdSBsaW1iIHRvIHBsbworCWJyYwk4KzQsKzgJCSMgYnJhbmNoIGlmIG5vdCBjYXJyeQorCWFoaQkwLDEJCSMgaW5jcmVtZW50IHBoaQorCWxyCWN5bGltYiwwCSMgbmV3IGN5bGltYgorCXN0CTYsMChycCkJCSMgc3RvcmUKKwlsYQl1cCw0KCx1cCkKKwlsYQlycCw0KCxycCkKKwlicmN0CW4sLkxvb3BwCisKKwlscgkyLGN5bGltYgorCWxtCTYsNywyNCgxNSkKKwlicgkxNAorRVBJTE9HVUUobXBuX2FkZG11bF8xKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzMyL2NvcHlkLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vczM5MF8zMi9jb3B5ZC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYyNTJiYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vczM5MF8zMi9jb3B5ZC5hc20KQEAgLTAsMCArMSwxNDUgQEAKK2RubCAgUy8zOTAtMzIgbXBuX2NvcHlkCisKK2RubCAgQ29weXJpZ2h0IDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgICAgICAgICAgICBjeWNsZXMvbGltYgorQyB6OTAwCQkgMS42NQorQyB6OTkwICAgICAgICAgICAxLjEyNQorQyB6OQkJID8KK0MgejEwCQkgPworQyB6MTk2CQkgPworCitDIEZJWE1FOgorQyAgKiBBdm9pZCBzYXZpbmcvcmVzdG9yaW5nIGNhbGxlZS1zYXZlcyByZWdpc3RlcnMgZm9yIG4gPCAzLiAgVGhpcyBjb3VsZCBiZQorQyAgICBkb25lIGJ5IHNldHRpbmcgcnA9cjEsIHVwPXIyLCBpPXIwIGFuZCByMyxyNCxyNSBmb3IgY2xvY2sgcmVncy4KK0MgICAgV2UgY291bGQgdGhlbiB1c2UgcjMuLi5yMTAgaW4gbWFpbiBsb29wLgorCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnBfcGFyYW0nLAlgJXIyJykKK2RlZmluZShgdXBfcGFyYW0nLAlgJXIzJykKK2RlZmluZShgbicsCQlgJXI0JykKKworZGVmaW5lKGBycCcsCWAlcjgnKQorZGVmaW5lKGB1cCcsCWAlcjknKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2NvcHlkKQorCXN0bQklcjYsICVyMTEsIDI0KCVyMTUpCisKKwlscgklcjEsIG4KKwlzbGwJJXIxLCAyCisJbGEJJXIxMCwgOChuKQorCWFoaQklcjEsIC0zMgorCXNybAklcjEwLCAzCisJbGhpCSVyMTEsIC0zMgorCisJbGEJcnAsIDAoJXIxLHJwX3BhcmFtKQlDIEZJWE1FIHVzZSBsYXkgb24gejk5MCBhbmQgbGF0ZXIKKwlsYQl1cCwgMCglcjEsdXBfcGFyYW0pCUMgRklYTUUgdXNlIGxheSBvbiB6OTkwIGFuZCBsYXRlcgorCisJbGhpCSVyNywgNworCW5yCSVyNywgbgkJCUMgbiBtb2QgOAorCWNoaQklcjcsIDIKKwlqaAlMKGIzNDU2NykKKwljaGkJJXI3LCAxCisJamUJTChiMSkKKwlqaAlMKGIyKQorCitMKGIwKToJYnJjdAklcjEwLCBMKHRvcCkKKwlqCUwoZW5kKQorCitMKGIxKToJbAklcjAsIDI4KHVwKQorCWFoaQl1cCwgLTQKKwlzdAklcjAsIDI4KHJwKQorCWFoaQlycCwgLTQKKwlicmN0CSVyMTAsIEwodG9wKQorCWoJTChlbmQpCisKK0woYjIpOglsbQklcjAsICVyMSwgMjQodXApCisJYWhpCXVwLCAtOAorCXN0bQklcjAsICVyMSwgMjQocnApCisJYWhpCXJwLCAtOAorCWJyY3QJJXIxMCwgTCh0b3ApCisJaglMKGVuZCkKKworTChiMzQ1NjcpOgorCWNoaQklcjcsIDQKKwlqbAlMKGIzKQorCWplCUwoYjQpCisJY2hpCSVyNywgNgorCWplCUwoYjYpCisJamgJTChiNykKKworTChiNSk6CWxtCSVyMCwgJXI0LCAxMih1cCkKKwlhaGkJdXAsIC0yMAorCXN0bQklcjAsICVyNCwgMTIocnApCisJYWhpCXJwLCAtMjAKKwlicmN0CSVyMTAsIEwodG9wKQorCWoJTChlbmQpCisKK0woYjMpOglsbQklcjAsICVyMiwgMjAodXApCisJYWhpCXVwLCAtMTIKKwlzdG0JJXIwLCAlcjIsIDIwKHJwKQorCWFoaQlycCwgLTEyCisJYnJjdAklcjEwLCBMKHRvcCkKKwlqCUwoZW5kKQorCitMKGI0KToJbG0JJXIwLCAlcjMsIDE2KHVwKQorCWFoaQl1cCwgLTE2CisJc3RtCSVyMCwgJXIzLCAxNihycCkKKwlhaGkJcnAsIC0xNgorCWJyY3QJJXIxMCwgTCh0b3ApCisJaglMKGVuZCkKKworTChiNik6CWxtCSVyMCwgJXI1LCA4KHVwKQorCWFoaQl1cCwgLTI0CisJc3RtCSVyMCwgJXI1LCA4KHJwKQorCWFoaQlycCwgLTI0CisJYnJjdAklcjEwLCBMKHRvcCkKKwlqCUwoZW5kKQorCitMKGI3KToJbG0JJXIwLCAlcjYsIDQodXApCisJYWhpCXVwLCAtMjgKKwlzdG0JJXIwLCAlcjYsIDQocnApCisJYWhpCXJwLCAtMjgKKwlicmN0CSVyMTAsIEwodG9wKQorCWoJTChlbmQpCisKK0wodG9wKToJbG0JJXIwLCAlcjcsIDAodXApCisJbGEJdXAsIDAoJXIxMSx1cCkKKwlzdG0JJXIwLCAlcjcsIDAocnApCisJbGEJcnAsIDAoJXIxMSxycCkKKwlicmN0CSVyMTAsIEwodG9wKQorCitMKGVuZCk6CWxtCSVyNiwgJXIxMSwgMjQoJXIxNSkKKwlicgklcjE0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfMzIvY29weWkuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzMyL2NvcHlpLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGYzMmYxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzMyL2NvcHlpLmFzbQpAQCAtMCwwICsxLDY5IEBACitkbmwgIFMvMzkwLTMyIG1wbl9jb3B5aQorCitkbmwgIENvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgICAgIGN5Y2xlcy9saW1iCitDIHo5MDAJCSAwLjc1CitDIHo5OTAgICAgICAgICAgIDAuMzc1CitDIHo5CQkgPworQyB6MTAJCSA/CitDIHoxOTYJCSA/CisKK0MgTk9URQorQyAgKiBUaGlzIGlzIGJhc2VkIG9uIEdOVSBsaWJjIG1lbWNweSB3aGljaCB3YXMgd3JpdHRlbiBieSBNYXJ0aW4gU2Nod2lkZWZza3kuCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsCWAlcjInKQorZGVmaW5lKGB1cCcsCWAlcjMnKQorZGVmaW5lKGBuJywJYCVyNCcpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fY29weWkpCisJbHRyCSVyNCwgJXI0CisJc2xsCSVyNCwgMgorCWplCUwocnRuKQorCWFoaQklcjQsIC0xCisJbHIJJXI1LCAlcjQKKwlzcmwJJXI1LCA4CisJbHRyCSVyNSwgJXI1CQlDIDwgMjU2IGJ5dGVzIHRvIGNvcHk/CisJamUJTCgxKQorCitMKHRvcCk6CW12YwkwKDI1NiwgcnApLCAwKHVwKQorCWxhCXJwLCAyNTYocnApCisJbGEJdXAsIDI1Nih1cCkKKwlicmN0CSVyNSwgTCh0b3ApCisKK0woMSk6CWJyYXMJJXI1LCBMKDIpCQlDIG1ha2UgcjUgcG9pbnQgdG8gbXZjIGluc24KKwltdmMJMCgxLCBycCksIDAodXApCitMKDIpOglleAklcjQsIDAoJXI1KQkJQyBleGVjdXRlIG12YyB3aXRoIGxlbmd0aCAoKG4tMSkgbW9kIDI1NikrMQorTChydG4pOglicgklcjE0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfMzIvZXNhbWUvYWRkbXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzMyL2VzYW1lL2FkZG11bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Mzc1Yjc0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzMyL2VzYW1lL2FkZG11bF8xLmFzbQpAQCAtMCwwICsxLDcyIEBACitkbmwgIFMvMzkwLTMyIG1wbl9hZGRtdWxfMSBmb3Igc3lzdGVtcyB3aXRoIE1MUiBpbnN0cnVjdGlvbgorCitkbmwgIENvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICAgICBjeWNsZXMvbGltYgorQyB6OTAwCQkxOC41CitDIHo5OTAJCTEwCitDIHo5CQkgPworQyB6MTAJCSA/CitDIHoxOTYJCSA/CisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsCWAlcjInKQorZGVmaW5lKGB1cCcsCWAlcjMnKQorZGVmaW5lKGBuJywJYCVyNCcpCitkZWZpbmUoYHYwJywJYCVyNScpCisKK2RlZmluZShgeicsCWAlcjknKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2FkZG11bF8xKQorCXN0bQklcjksICVyMTIsIDM2KCVyMTUpCisJbGhpCSVyMTIsIDAJCQlDIHplcm8gaW5kZXggcmVnaXN0ZXIKKwlhaGkJJXIxMiwgMAkJCUMgY2xlYXIgY2FycnkgZmxhCisJbGhpCSVyMTEsIDAJCQlDIGNsZWFyIGNhcnJ5IGxpbWIKKwlsaGkJeiwgMAkJCUMgY2xlYXIgY2FycnkgbGltYgorCitMKHRvcCk6CWwJJXIxLCAwKCVyMTIsdXApCisJbAklcjEwLCAwKCVyMTIscnApCisJbWxyCSVyMCwgdjAKKwlhbGNyCSVyMSwgJXIxMAorCWFsY3IJJXIwLCB6CisJYWxyCSVyMSwgJXIxMQorCWxyCSVyMTEsICVyMAorCXN0CSVyMSwgMCglcjEyLHJwKQorCWxhCSVyMTIsIDQoJXIxMikKKwlicmN0CW4sIEwodG9wKQorCisJbGhpCSVyMiwgMAorCWFsY3IJJXIyLCAlcjExCisKKwlsbQklcjksICVyMTIsIDM2KCVyMTUpCisJYnIJJXIxNAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzMyL2VzYW1lL2FvcnNfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfMzIvZXNhbWUvYW9yc19uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGIwZGJjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzMyL2VzYW1lL2FvcnNfbi5hc20KQEAgLTAsMCArMSwxMzcgQEAKK2RubCAgUy8zOTAtMzIgbXBuX2FkZF9uIGFuZCBtcG5fc3ViX24uCisKK2RubCAgQ29weXJpZ2h0IDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgICAgIGN5Y2xlcy9saW1iCitDIHo5MDAJCSA/CitDIHo5OTAJICAgICAgMi43NS0zCQkoZmFzdCBmb3IgZXZlbiBuLCBzbG93IGZvciBvZGQgbikKK0MgejkJCSA/CitDIHoxMAkJID8KK0MgejE5NgkJID8KKworQyBUT0RPCitDICAqIE9wdGltaXNlIGZvciBzbWFsbCBuCitDICAqIFVzZSByMCBhbmQgc2F2ZS9yZXN0b3JlIG9uZSBsZXNzIHJlZ2lzdGVyCitDICAqIFVzaW5nIGxvZ29wc19uJ3MgdjEgaW5uZXIgbG9vcCBvcGVyYW5kIG9yZGVyIG1ha2UgdGhlIGxvb3AgYWJvdXQgMjAlCitDICAgIGZhc3RlciwgYXQgdGhlIGV4cGVuc2Ugb2YgaGlnaGx5IGFsaWdubWVudC1kZXBlbmRlbnQgcGVyZm9ybWFuY2UuCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsCWAlcjInKQorZGVmaW5lKGB1cCcsCWAlcjMnKQorZGVmaW5lKGB2cCcsCWAlcjQnKQorZGVmaW5lKGBuJywJYCVyNScpCisKK2lmZGVmKGBPUEVSQVRJT05fYWRkX24nLCBgCisgIGRlZmluZShBRFNCLAkJYWwpCisgIGRlZmluZShBRFNCQ1IsCWFsY3IpCisgIGRlZmluZShBRFNCQywJCWFsYykKKyAgZGVmaW5lKFJFVFZBTCxgZG5sCisJbGhpCSVyMiwgMAorCWFsY3IJJXIyLCAlcjInKQorICBkZWZpbmUoZnVuYywJCW1wbl9hZGRfbikKKyAgZGVmaW5lKGZ1bmNfbmMsCW1wbl9hZGRfbmMpJykKK2lmZGVmKGBPUEVSQVRJT05fc3ViX24nLCBgCisgIGRlZmluZShBRFNCLAkJc2wpCisgIGRlZmluZShBRFNCQ1IsCXNsYnIpCisgIGRlZmluZShBRFNCQywJCXNsYikKKyAgZGVmaW5lKFJFVFZBTCxgZG5sCisJc2xicgklcjIsICVyMgorCWxjcgklcjIsICVyMicpCisgIGRlZmluZShmdW5jLAkJbXBuX3N1Yl9uKQorICBkZWZpbmUoZnVuY19uYywJbXBuX3N1Yl9uYyknKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRfbiBtcG5fc3ViX24pCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShmdW5jKQorCXN0bQklcjYsICVyOCwgMjQoJXIxNSkKKworCWFoaQluLCAzCisJbGhpCSVyNywgMworCWxyCSVyMSwgbgorCXNybAklcjEsIDIKKwlucgklcjcsIG4JCQlDIG4gbW9kIDQKKwlqZQlMKGIxKQorCWNoaQklcjcsIDIKKwlqbAlMKGIyKQorCWpuZQlMKGIwKQorCitMKGIzKToJbG0JJXI1LCAlcjcsIDAodXApCisJbGEJdXAsIDEyKHVwKQorCUFEU0IJJXI1LCAwKHZwKQorCUFEU0JDCSVyNiwgNCh2cCkKKwlBRFNCQwklcjcsIDgodnApCisJbGEJdnAsIDEyKHZwKQorCXN0bQklcjUsICVyNywgMChycCkKKwlsYQlycCwgMTIocnApCisJYnJjdAklcjEsIEwodG9wKQorCWoJTChlbmQpCisKK0woYjApOglsbQklcjUsICVyOCwgMCh1cCkJCUMgVGhpcyByZWR1bmRhbnQgaW5zbnMgaXMgbm8gbWlzdGFrZSwKKwlsYQl1cCwgMTYodXApCQlDIGl0IGlzIG5lZWRlZCB0byBtYWtlIG1haW4gbG9vcCBydW4KKwlBRFNCCSVyNSwgMCh2cCkJCUMgZmFzdCBmb3IgbiA9IDAgKG1vZCA0KS4KKwlBRFNCQwklcjYsIDQodnApCisJaglMKG0wKQorCitMKGIxKToJbAklcjUsIDAodXApCisJbGEJdXAsIDQodXApCisJQURTQgklcjUsIDAodnApCisJbGEJdnAsIDQodnApCisJc3QJJXI1LCAwKHJwKQorCWxhCXJwLCA0KHJwKQorCWJyY3QJJXIxLCBMKHRvcCkKKwlqCUwoZW5kKQorCitMKGIyKToJbG0JJXI1LCAlcjYsIDAodXApCisJbGEJdXAsIDgodXApCisJQURTQgklcjUsIDAodnApCisJQURTQkMJJXI2LCA0KHZwKQorCWxhCXZwLCA4KHZwKQorCXN0bQklcjUsICVyNiwgMChycCkKKwlsYQlycCwgOChycCkKKwlicmN0CSVyMSwgTCh0b3ApCisJaglMKGVuZCkKKworTCh0b3ApOglsbQklcjUsICVyOCwgMCh1cCkKKwlsYQl1cCwgMTYodXApCisJQURTQkMJJXI1LCAwKHZwKQorCUFEU0JDCSVyNiwgNCh2cCkKK0wobTApOglBRFNCQwklcjcsIDgodnApCisJQURTQkMJJXI4LCAxMih2cCkKKwlsYQl2cCwgMTYodnApCisJc3RtCSVyNSwgJXI4LCAwKHJwKQorCWxhCXJwLCAxNihycCkKKwlicmN0CSVyMSwgTCh0b3ApCisKK0woZW5kKToJUkVUVkFMCisJbG0JJXI2LCAlcjgsIDI0KCVyMTUpCisJYnIJJXIxNAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzMyL2VzYW1lL2FvcnNsc2gxX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzMyL2VzYW1lL2FvcnNsc2gxX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYjIyMmIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfMzIvZXNhbWUvYW9yc2xzaDFfbi5hc20KQEAgLTAsMCArMSwxNzMgQEAKK2RubCAgUy8zOTAtMzIgbXBuX2FkZGxzaDFfbgorCitkbmwgIENvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICAgICBjeWNsZXMvbGltYgorQyB6OTAwCQkgOS4yNQorQyB6OTkwCQkgNQorQyB6OQkJID8KK0MgejEwCQkgPworQyB6MTk2CQkgPworCitDIFRPRE8KK0MgICogT3B0aW1pc2UgZm9yIHNtYWxsIG4KK0MgICogQ29tcHV0ZSBSRVRWQUwgZm9yIHN1YmxzaDFfbiBsZXNzIHN0dXBpZGx5CisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsCWAlcjInKQorZGVmaW5lKGB1cCcsCWAlcjMnKQorZGVmaW5lKGB2cCcsCWAlcjQnKQorZGVmaW5lKGBuJywJYCVyNScpCisKK2lmZGVmKGBPUEVSQVRJT05fYWRkbHNoMV9uJyxgCisgIGRlZmluZShBRERTVUJDLCAgICAgICBhbHIpCisgIGRlZmluZShBRERTVUJFLCAgICAgICBhbGNyKQorICBkZWZpbmUoSU5JVENZLCAgICAgICAgYGxoaQklcjEzLCAtMScpCisgIGRlZmluZShSRVRWQUwsICAgICAgICBgYWxyCSVyMSwgJXIxMworCQkJbGhpCSVyMiwgMgorCQkJYWxyCSVyMiwgJXIxJykKKyAgZGVmaW5lKGZ1bmMsIG1wbl9hZGRsc2gxX24pCisnKQoraWZkZWYoYE9QRVJBVElPTl9zdWJsc2gxX24nLGAKKyAgZGVmaW5lKEFERFNVQkMsICAgICAgIHNscikKKyAgZGVmaW5lKEFERFNVQkUsICAgICAgIHNsYnIpCisgIGRlZmluZShJTklUQ1ksICAgICAgICBgbGhpCSVyMTMsIDAnKQorICBkZWZpbmUoUkVUVkFMLCAgICAgICAgYHNscgklcjEsICVyMTMKKwkJCWxoaQklcjIsIDEKKwkJCWFscgklcjIsICVyMScpCisgIGRlZmluZShmdW5jLCBtcG5fc3VibHNoMV9uKQorJykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fYWRkbHNoMV9uIG1wbl9zdWJsc2gxX24pCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShmdW5jKQorCXN0bQklcjYsICVyMTMsIDI0KCVyMTUpCisKKwlsYQklcjAsIDMobikKKwlsaGkJJXI3LCAzCisJc3JsCSVyMCwgMgorCW5yCSVyNywgbgkJCUMgbiBtb2QgNAorCWplCUwoYjApCisJY2hpCSVyNywgMgorCWpsCUwoYjEpCisJamUJTChiMikKKworTChiMyk6CWxtCSVyNSwgJXI3LCAwKHVwKQorCWxhCXVwLCAxMih1cCkKKwlsbQklcjksICVyMTEsIDAodnApCisJbGEJdnAsIDEyKHZwKQorCisJYWxyCSVyOSwgJXI5CisJYWxjcgklcjEwLCAlcjEwCisJYWxjcgklcjExLCAlcjExCisJc2xicgklcjEsICVyMQorCisJQUREU1VCQwklcjUsICVyOQorCUFERFNVQkUJJXI2LCAlcjEwCisJQUREU1VCRQklcjcsICVyMTEKKwlzbGJyCSVyMTMsICVyMTMKKworCXN0bQklcjUsICVyNywgMChycCkKKwlsYQlycCwgMTIocnApCisJYnJjdAklcjAsIEwodG9wKQorCWoJTChlbmQpCisKK0woYjApOglsaGkJJXIxLCAtMQorCUlOSVRDWQorCWoJTCh0b3ApCisKK0woYjEpOglsCSVyNSwgMCh1cCkKKwlsYQl1cCwgNCh1cCkKKwlsCSVyOSwgMCh2cCkKKwlsYQl2cCwgNCh2cCkKKworCWFscgklcjksICVyOQorCXNsYnIJJXIxLCAlcjEKKwlBRERTVUJDCSVyNSwgJXI5CisJc2xicgklcjEzLCAlcjEzCisKKwlzdAklcjUsIDAocnApCisJbGEJcnAsIDQocnApCisJYnJjdAklcjAsIEwodG9wKQorCWoJTChlbmQpCisKK0woYjIpOglsbQklcjUsICVyNiwgMCh1cCkKKwlsYQl1cCwgOCh1cCkKKwlsbQklcjksICVyMTAsIDAodnApCisJbGEJdnAsIDgodnApCisKKwlhbHIJJXI5LCAlcjkKKwlhbGNyCSVyMTAsICVyMTAKKwlzbGJyCSVyMSwgJXIxCisKKwlBRERTVUJDCSVyNSwgJXI5CisJQUREU1VCRQklcjYsICVyMTAKKwlzbGJyCSVyMTMsICVyMTMKKworCXN0bQklcjUsICVyNiwgMChycCkKKwlsYQlycCwgOChycCkKKwlicmN0CSVyMCwgTCh0b3ApCisJaglMKGVuZCkKKworTCh0b3ApOglsbQklcjksICVyMTIsIDAodnApCisJbGEJdnAsIDE2KHZwKQorCisJYWhpCSVyMSwgMQkJCUMgcmVzdG9yZSBjYXJyeQorCisJYWxjcgklcjksICVyOQorCWFsY3IJJXIxMCwgJXIxMAorCWFsY3IJJXIxMSwgJXIxMQorCWFsY3IJJXIxMiwgJXIxMgorCisJc2xicgklcjEsICVyMQkJQyBzYXZlIGNhcnJ5CisKKwlsbQklcjUsICVyOCwgMCh1cCkKKwlsYQl1cCwgMTYodXApCisKKwlhaGkJJXIxMywgMQkJCUMgcmVzdG9yZSBjYXJyeQorCisJQUREU1VCRQklcjUsICVyOQorCUFERFNVQkUJJXI2LCAlcjEwCisJQUREU1VCRQklcjcsICVyMTEKKwlBRERTVUJFCSVyOCwgJXIxMgorCisJc2xicgklcjEzLCAlcjEzCisKKwlzdG0JJXI1LCAlcjgsIDAocnApCisJbGEJcnAsIDE2KHJwKQorCWJyY3QJJXIwLCBMKHRvcCkKKworTChlbmQpOgorCVJFVFZBTAorCWxtCSVyNiwgJXIxMywgMjQoJXIxNSkKKwlicgklcjE0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfMzIvZXNhbWUvYmRpdl9kYm0xYy5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfMzIvZXNhbWUvYmRpdl9kYm0xYy5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY4YTJhNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vczM5MF8zMi9lc2FtZS9iZGl2X2RibTFjLmFzbQpAQCAtMCwwICsxLDY1IEBACitkbmwgIFMvMzkwLTMyIG1wbl9iZGl2X2RibTFjIGZvciBzeXN0ZW1zIHdpdGggTUxSIGluc3RydWN0aW9uLgorCitkbmwgIENvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICAgICBjeWNsZXMvbGltYgorQyB6OTAwCQkxNAorQyB6OTkwCQkxMAorQyB6OQkJID8KK0MgejEwCQkgPworQyB6MTk2CQkgPworCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcXAnLAkgIGAlcjInKQorZGVmaW5lKGB1cCcsCSAgYCVyMycpCitkZWZpbmUoYG4nLAkgIGAlcjQnKQorZGVmaW5lKGBiZCcsCSAgYCVyNScpCitkZWZpbmUoYGN5JywJICBgJXI2JykKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMTYpCitQUk9MT0dVRShtcG5fYmRpdl9kYm0xYykKKwlzdG0JJXI2LCAlcjcsIDI0KCVyMTUpCisJbGhpCSVyNywgMAkJCUMgemVybyBpbmRleCByZWdpc3RlcgorCitMKHRvcCk6CWwJJXIxLCAwKCVyNyx1cCkKKwltbHIJJXIwLCBiZAorCXNscgklcjYsICVyMQorCXN0CSVyNiwgMCglcjcscXApCisJc2xicgklcjYsICVyMAorCWxhCSVyNywgNCglcjcpCisJYnJjdAluLCBMKHRvcCkKKworCWxyCSVyMiwgJXI2CisJbG0JJXI2LCAlcjcsIDI0KCVyMTUpCisJYnIJJXIxNAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzMyL2VzYW1lL2dtcC1tcGFyYW0uaCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vczM5MF8zMi9lc2FtZS9nbXAtbXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBlNTA0NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vczM5MF8zMi9lc2FtZS9nbXAtbXBhcmFtLmgKQEAgLTAsMCArMSwxNzcgQEAKKy8qIFMvMzkwLTMyIGdtcC1tcGFyYW0uaCAtLSBDb21waWxlci9tYWNoaW5lIHBhcmFtZXRlciBoZWFkZXIgZmlsZS4KKworQ29weXJpZ2h0IDE5OTEsIDE5OTMsIDE5OTQsIDIwMDAtMjAwOC0yMDExLCAyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgMzIKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgNAorCisvKiA0NDAwIE1IeiBJQk0gejE5NiBydW5uaW5nIGluIDMyLWJpdCBtb2RlICovCisvKiBGRlQgdHVuaW5nIGxpbWl0ID0gMC41TSAqLworLyogR2VuZXJhdGVkIGJ5IHR1bmV1cC5jLCAyMDE3LTAxLTAyLCBnY2MgNC45ICovCisKKyNkZWZpbmUgRElWUkVNXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWUkVNXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgTU9EXzFfMVBfTUVUSE9EICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgTU9EXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgTU9EXzFOX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgNDUKKyNkZWZpbmUgTU9EXzFVX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgMTgKKyNkZWZpbmUgTU9EXzFfMV9UT19NT0RfMV8yX1RIUkVTSE9MRCAgICAgICAgIDAgIC8qIG5ldmVyIG1wbl9tb2RfMV8xcCAqLworI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICBNUF9TSVpFX1RfTUFYCisjZGVmaW5lIFBSRUlOVl9NT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgICAzCisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIERJVl9RUl8xTl9QSTFfTUVUSE9EICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIERJVl9RUl8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVl9RUl8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVl9RUl8yX1BJMl9USFJFU0hPTEQgICAgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEJNT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKworI2RlZmluZSBESVZfMV9WU19NVUxfMV9QRVJDRU5UICAgICAgICAgICAgIDMyMAorCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDgxCisjZGVmaW5lIE1VTF9UT09NNDRfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTMwCisjZGVmaW5lIE1VTF9UT09NNkhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTczCisjZGVmaW5lIE1VTF9UT09NOEhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjYwCisKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNDNfVEhSRVNIT0xEICAgICAgODEKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNTNfVEhSRVNIT0xEICAgICAgOTEKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNTNfVEhSRVNIT0xEICAgICAgODMKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNjNfVEhSRVNIT0xEICAgICAgODYKKyNkZWZpbmUgTVVMX1RPT000M19UT19UT09NNTRfVEhSRVNIT0xEICAgICAxMTIKKworI2RlZmluZSBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgICAgIDY5CisjZGVmaW5lIFNRUl9UT09NNF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTc4CisjZGVmaW5lIFNRUl9UT09NNl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjU0CisjZGVmaW5lIFNRUl9UT09NOF9USFJFU0hPTEQgICAgICAgICAgICAgICAgNDA2CisKKyNkZWZpbmUgTVVMTUlEX1RPT000Ml9USFJFU0hPTEQgICAgICAgICAgICAgMzAKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxMgorI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgNworCisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgMjc2ICAvKiBrID0gNSAqLworI2RlZmluZSBNVUxfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgMjc2LCA1fSwgeyAgICAgMTUsIDZ9LCB7ICAgICAgOCwgNX0sIHsgICAgIDE3LCA2fSwgXAorICAgIHsgICAgICA5LCA1fSwgeyAgICAgMTksIDZ9LCB7ICAgICAxMywgN30sIHsgICAgICA3LCA2fSwgXAorICAgIHsgICAgIDE3LCA3fSwgeyAgICAgIDksIDZ9LCB7ICAgICAxOSwgN30sIHsgICAgIDExLCA2fSwgXAorICAgIHsgICAgIDIzLCA3fSwgeyAgICAgMTMsIDh9LCB7ICAgICAgNywgN30sIHsgICAgIDE5LCA4fSwgXAorICAgIHsgICAgIDExLCA3fSwgeyAgICAgMjUsIDh9LCB7ICAgICAxNSwgN30sIHsgICAgIDMxLCA4fSwgXAorICAgIHsgICAgIDE5LCA3fSwgeyAgICAgMzksIDh9LCB7ICAgICAyMywgOX0sIHsgICAgIDE1LCA4fSwgXAorICAgIHsgICAgIDM5LCA5fSwgeyAgICAgMjMsMTB9LCB7ICAgICAxNSwgOX0sIHsgICAgIDMxLCA4fSwgXAorICAgIHsgICAgIDY3LCA5fSwgeyAgICAgMzksIDh9LCB7ICAgICA3OSwgOX0sIHsgICAgIDQ3LDEwfSwgXAorICAgIHsgICAgIDMxLCA5fSwgeyAgICAgNzEsIDh9LCB7ICAgIDE0MywgOX0sIHsgICAgIDc5LDEwfSwgXAorICAgIHsgICAgIDQ3LDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA2MywgOX0sIHsgICAgMTI3LCA4fSwgXAorICAgIHsgICAgMjU1LCA3fSwgeyAgICA1MTEsIDl9LCB7ICAgIDE0MywxMH0sIHsgICAgIDc5LCA5fSwgXAorICAgIHsgICAgMTU5LCA4fSwgeyAgICAzMTksIDl9LCB7ICAgIDE3NSwgOH0sIHsgICAgMzUxLDEwfSwgXAorICAgIHsgICAgIDk1LCA5fSwgeyAgICAxOTEsIDh9LCB7ICAgIDM4MywxMX0sIHsgICAgIDYzLDEwfSwgXAorICAgIHsgICAgMTI3LCA5fSwgeyAgICAyNTUsIDh9LCB7ICAgIDUxMSwxMH0sIHsgICAgMTQzLCA5fSwgXAorICAgIHsgICAgMjg3LCA4fSwgeyAgICA1NzUsMTB9LCB7ICAgIDE1OSwgOX0sIHsgICAgMzE5LDEwfSwgXAorICAgIHsgICAgMTc1LCA5fSwgeyAgICAzNTEsMTF9LCB7ICAgICA5NSwxMH0sIHsgICAgMTkxLCA5fSwgXAorICAgIHsgICAgMzgzLDEyfSwgeyAgICAgNjMsMTF9LCB7ICAgIDEyNywxMH0sIHsgICAgMjU1LCA5fSwgXAorICAgIHsgICAgNTExLDEwfSwgeyAgICAyNzEsIDl9LCB7ICAgIDU0MywgOH0sIHsgICAxMDg3LDEwfSwgXAorICAgIHsgICAgMjg3LCA5fSwgeyAgICA1NzUsMTF9LCB7ICAgIDE1OSwxMH0sIHsgICAgMzUxLCA5fSwgXAorICAgIHsgICAgNzAzLCA4fSwgeyAgIDE0MDcsMTF9LCB7ICAgIDE5MSwxMH0sIHsgICAgNDE1LCA5fSwgXAorICAgIHsgICAgODMxLDExfSwgeyAgICAyMjMsMTB9LCB7ICAgIDQ3OSwgOX0sIHsgICAgOTU5LCA4fSwgXAorICAgIHsgICAxOTE5LDEyfSwgeyAgIDQwOTYsMTN9LCB7ICAgODE5MiwxNH0sIHsgIDE2Mzg0LDE1fSwgXAorICAgIHsgIDMyNzY4LDE2fSB9CisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzX1NJWkUgODkKKyNkZWZpbmUgTVVMX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDI2ODgKKworI2RlZmluZSBTUVJfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDI0MCAgLyogayA9IDUgKi8KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDI0MCwgNX0sIHsgICAgIDE3LCA2fSwgeyAgICAgMTcsIDd9LCB7ICAgICAgOSwgNn0sIFwKKyAgICB7ICAgICAxOSwgN30sIHsgICAgIDExLCA2fSwgeyAgICAgMjMsIDd9LCB7ICAgICAxMywgOH0sIFwKKyAgICB7ICAgICAgNywgN30sIHsgICAgIDE5LCA4fSwgeyAgICAgMTEsIDd9LCB7ICAgICAyNSwgOH0sIFwKKyAgICB7ICAgICAxNSwgN30sIHsgICAgIDMzLCA4fSwgeyAgICAgMTksIDd9LCB7ICAgICAzOSwgOH0sIFwKKyAgICB7ICAgICAyMywgOX0sIHsgICAgIDE1LCA4fSwgeyAgICAgMzksIDl9LCB7ICAgICAyMywxMH0sIFwKKyAgICB7ICAgICAxNSwgOX0sIHsgICAgIDMxLCA4fSwgeyAgICAgNjMsIDl9LCB7ICAgICA0NywxMH0sIFwKKyAgICB7ICAgICAzMSwgOX0sIHsgICAgIDYzLCA4fSwgeyAgICAxMjcsIDl9LCB7ICAgICA3MSwgOH0sIFwKKyAgICB7ICAgIDE0MywxMH0sIHsgICAgIDQ3LDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA2MywgOX0sIFwKKyAgICB7ICAgIDEyNywgOH0sIHsgICAgMjU1LCA3fSwgeyAgICA1MTEsIDl9LCB7ICAgIDE0MywxMH0sIFwKKyAgICB7ICAgICA3OSwgOX0sIHsgICAgMTU5LCA4fSwgeyAgICAzMTksIDl9LCB7ICAgIDE3NSwgOH0sIFwKKyAgICB7ICAgIDM1MSwgN30sIHsgICAgNzAzLDEwfSwgeyAgICAgOTUsIDl9LCB7ICAgIDE5MSwgOH0sIFwKKyAgICB7ICAgIDM4MywgOX0sIHsgICAgMjA3LCA4fSwgeyAgICA0MTUsMTF9LCB7ICAgICA2MywxMH0sIFwKKyAgICB7ICAgIDEyNywgOX0sIHsgICAgMjU1LCA4fSwgeyAgICA1MTEsMTB9LCB7ICAgIDE0MywgOX0sIFwKKyAgICB7ICAgIDI4NywgOH0sIHsgICAgNTc1LDEwfSwgeyAgICAxNTksIDl9LCB7ICAgIDMxOSwxMH0sIFwKKyAgICB7ICAgIDE3NSwgOX0sIHsgICAgMzUxLCA4fSwgeyAgICA3MDMsIDd9LCB7ICAgMTQwNywxMX0sIFwKKyAgICB7ICAgICA5NSwxMH0sIHsgICAgMTkxLCA5fSwgeyAgICAzODMsMTB9LCB7ICAgIDIwNywgOX0sIFwKKyAgICB7ICAgIDQxNSwxMn0sIHsgICAgIDYzLDExfSwgeyAgICAxMjcsMTB9LCB7ICAgIDI1NSwgOX0sIFwKKyAgICB7ICAgIDUxMSwxMH0sIHsgICAgMjg3LCA5fSwgeyAgICA1NzUsMTF9LCB7ICAgIDE1OSwxMH0sIFwKKyAgICB7ICAgIDM1MSwgOX0sIHsgICAgNzAzLCA4fSwgeyAgIDE0MDcsMTF9LCB7ICAgIDE5MSwxMH0sIFwKKyAgICB7ICAgIDQxNSwgOX0sIHsgICAgODMxLDExfSwgeyAgICAyMjMsMTB9LCB7ICAgIDQ3OSwxMn0sIFwKKyAgICB7ICAgNDA5NiwxM30sIHsgICA4MTkyLDE0fSwgeyAgMTYzODQsMTV9LCB7ICAzMjc2OCwxNn0gfQorI2RlZmluZSBTUVJfRkZUX1RBQkxFM19TSVpFIDg0CisjZGVmaW5lIFNRUl9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAxODU2CisKKyNkZWZpbmUgTVVMTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNVUxMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAyNworI2RlZmluZSBNVUxMT19NVUxfTl9USFJFU0hPTEQgICAgICAgICAgICAgNTI0MAorI2RlZmluZSBTUVJMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIFNRUkxPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDY1CisjZGVmaW5lIFNRUkxPX1NRUl9USFJFU0hPTEQgICAgICAgICAgICAgICAzNDcwCisKKyNkZWZpbmUgRENfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgRENfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAxMzUKKyNkZWZpbmUgRENfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgRENfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgODAKKworI2RlZmluZSBJTlZfTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICA0MgorI2RlZmluZSBJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE3NworI2RlZmluZSBJTlZfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDEzOQorCisjZGVmaW5lIEJJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTc5CisjZGVmaW5lIFJFRENfMV9UT19SRURDX05fVEhSRVNIT0xEICAgICAgICAgIDM5CisKKyNkZWZpbmUgTVVfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA4NzIKKyNkZWZpbmUgTVVfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICA5OTgKKyNkZWZpbmUgTVVQSV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgNjYKKyNkZWZpbmUgTVVfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICA3NDgKKyNkZWZpbmUgTVVfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA5MDYKKworI2RlZmluZSBQT1dNX1NFQ19UQUJMRSAgOSwzNCwyNTcsOTQ2LDI5MTMKKworI2RlZmluZSBHRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBHRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgICAxNgorI2RlZmluZSBTRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTA0NQorI2RlZmluZSBTRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgMTgwMAorCisjZGVmaW5lIEZBQ19EU0NfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDc3CisjZGVmaW5lIEZBQ19PRERfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDI0CisKKyNkZWZpbmUgTUFUUklYMjJfU1RSQVNTRU5fVEhSRVNIT0xEICAgICAgICAgMTUKKyNkZWZpbmUgSEdDRF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgICAxMjEKKyNkZWZpbmUgSEdDRF9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNDIKKyNkZWZpbmUgSEdDRF9SRURVQ0VfVEhSRVNIT0xEICAgICAgICAgICAgIDE2NzkKKyNkZWZpbmUgR0NEX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAzODkKKyNkZWZpbmUgR0NERVhUX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyODUKKyNkZWZpbmUgSkFDT0JJX0JBU0VfTUVUSE9EICAgICAgICAgICAgICAgICAgIDQKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vczM5MF8zMi9lc2FtZS9tdWxfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfMzIvZXNhbWUvbXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YmU5NjMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfMzIvZXNhbWUvbXVsXzEuYXNtCkBAIC0wLDAgKzEsNjYgQEAKK2RubCAgUy8zOTAtMzIgbXBuX211bF8xIGZvciBzeXN0ZW1zIHdpdGggTUxSIGluc3RydWN0aW9uCisKK2RubCAgQ29weXJpZ2h0IDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgICAgIGN5Y2xlcy9saW1iCitDIHo5MDAJCTE0CitDIHo5OTAJCSA5CitDIHo5CQkgPworQyB6MTAJCSA/CitDIHoxOTYJCSA/CisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsCWAlcjInKQorZGVmaW5lKGB1cCcsCWAlcjMnKQorZGVmaW5lKGBuJywJYCVyNCcpCitkZWZpbmUoYHYwJywJYCVyNScpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fbXVsXzEpCisJc3RtCSVyMTEsICVyMTIsIDQ0KCVyMTUpCisJbGhpCSVyMTIsIDAJCQlDIHplcm8gaW5kZXggcmVnaXN0ZXIKKwlhaGkJJXIxMiwgMAkJCUMgY2xlYXIgY2FycnkgZmxhZworCWxoaQklcjExLCAwCQkJQyBjbGVhciBjYXJyeSBsaW1iCisKK0wodG9wKToJbAklcjEsIDAoJXIxMix1cCkKKwltbHIJJXIwLCB2MAorCWFsY3IJJXIxLCAlcjExCisJbHIJJXIxMSwgJXIwCQlDIGNvcHkgaGlnaCBwYXJ0IHRvIGNhcnJ5IGxpbWIKKwlzdAklcjEsIDAoJXIxMixycCkKKwlsYQklcjEyLCA0KCVyMTIpCisJYnJjdAluLCBMKHRvcCkKKworCWxoaQklcjIsIDAKKwlhbGNyCSVyMiwgJXIxMQorCisJbG0JJXIxMSwgJXIxMiwgNDQoJXIxNSkKKwlicgklcjE0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfMzIvZXNhbWUvbXVsX2Jhc2VjYXNlLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vczM5MF8zMi9lc2FtZS9tdWxfYmFzZWNhc2UuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjODEzOGQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfMzIvZXNhbWUvbXVsX2Jhc2VjYXNlLmFzbQpAQCAtMCwwICsxLDEzMCBAQAorZG5sICBTLzM5MC0zMi9lc2FtZSBtcG5fbXVsX2Jhc2VjYXNlLgorCitkbmwgIENvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICAgICBjeWNsZXMvbGltYgorQyB6OTAwCQkgPworQyB6OTkwCQkgPworQyB6OQkJID8KK0MgejEwCQkgPworQyB6MTk2CQkgPworCitDIFRPRE8KK0MgICogUGVyaGFwcyBhZGQgc3BlY2lhbCBjYXNlIGZvciB1biA8PSAyLgorQyAgKiBSZXBsYWNlIGxvb3BzIGJ5IGZhc3RlciBjb2RlLiAgVGhlIG11bF8xIGFuZCBhZGRtdWxfMSBsb29wcyBjb3VsZCBiZSBzcGVkCitDICAgIHVwIGJ5IGFib3V0IDEwJS4KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywJYCVyMicpCitkZWZpbmUoYHVwJywJYCVyMycpCitkZWZpbmUoYHVuJywJYCVyNCcpCitkZWZpbmUoYHZwJywJYCVyNScpCitkZWZpbmUoYHZuJywJYCVyNicpCisKK2RlZmluZShgemVybycsCWAlcjgnKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX211bF9iYXNlY2FzZSkKKwljaGkJdW4sIDIKKwlqaGUJTChnZTIpCisKK0MgdW4gPSB2biA9IDEKKwlsCSVyMSwgMCh2cCkKKwltbAklcjAsIDAodXApCisJc3QJJXIxLCAwKHJwKQorCXN0CSVyMCwgNChycCkKKwlicgklcjE0CisKK0woZ2UyKToJQyBqbmUJTChnZW4pCisKKworTChnZW4pOgorQyBtdWxfMSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJc3RtCSVyNiwgJXIxMiwgMjQoJXIxNSkKKwlsaGkJemVybywgMAorCWFoaQl1biwgLTEKKworCWwJJXI3LCAwKHZwKQorCWwJJXIxMSwgMCh1cCkKKwlsaGkJJXIxMiwgNAkJCUMgaW5pdCBpbmRleCByZWdpc3RlcgorCW1scgklcjEwLCAlcjcKKwlscgklcjksIHVuCisJc3QJJXIxMSwgMChycCkKKwljcgklcjE1LCAlcjE1CQlDIGNsZWFyIGNhcnJ5IGZsYWcKKworTCh0bSk6CWwJJXIxLCAwKCVyMTIsdXApCisJbWxyCSVyMCwgJXI3CisJYWxjcgklcjEsICVyMTAKKwlscgklcjEwLCAlcjAJCUMgY29weSBoaWdoIHBhcnQgdG8gY2FycnkgbGltYgorCXN0CSVyMSwgMCglcjEyLHJwKQorCWxhCSVyMTIsIDQoJXIxMikKKwlicmN0CSVyOSwgTCh0bSkKKworCWFsY3IJJXIwLCB6ZXJvCisJc3QJJXIwLCAwKCVyMTIscnApCisKK0MgYWRkbXVsXzEgbG9vcCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCWFoaQl2biwgLTEKKwlqZQlMKG91dGVyX2VuZCkKK0wob3V0ZXJfbG9vcCk6CisKKwlsYQlycCwgNChycCkJCUMgcnAgKz0gMQorCWxhCXZwLCA0KHZwKQkJQyB1cCArPSAxCisJbAklcjcsIDAodnApCisJbAklcjExLCAwKHVwKQorCWxoaQklcjEyLCA0CQkJQyBpbml0IGluZGV4IHJlZ2lzdGVyCisJbWxyCSVyMTAsICVyNworCWxyCSVyOSwgdW4KKwlhbAklcjExLCAwKHJwKQorCXN0CSVyMTEsIDAocnApCisKK0wodGFtKToJbAklcjEsIDAoJXIxMix1cCkKKwlsCSVyMTEsIDAoJXIxMixycCkKKwltbHIJJXIwLCAlcjcKKwlhbGNyCSVyMSwgJXIxMQorCWFsY3IJJXIwLCB6ZXJvCisJYWxyCSVyMSwgJXIxMAorCWxyCSVyMTAsICVyMAorCXN0CSVyMSwgMCglcjEyLHJwKQorCWxhCSVyMTIsIDQoJXIxMikKKwlicmN0CSVyOSwgTCh0YW0pCisKKwlhbGNyCSVyMCwgemVybworCXN0CSVyMCwgMCglcjEyLHJwKQorCisJYnJjdAl2biwgTChvdXRlcl9sb29wKQorTChvdXRlcl9lbmQpOgorCisJbG0JJXI2LCAlcjEyLCAyNCglcjE1KQorCWJyCSVyMTQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vczM5MF8zMi9lc2FtZS9zcXJfYmFzZWNhc2UuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzMyL2VzYW1lL3Nxcl9iYXNlY2FzZS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ1Zjg3YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vczM5MF8zMi9lc2FtZS9zcXJfYmFzZWNhc2UuYXNtCkBAIC0wLDAgKzEsMjAzIEBACitkbmwgIFMvMzkwLTMyIG1wbl9zcXJfYmFzZWNhc2UuCisKK2RubCAgQ29weXJpZ2h0IDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgICAgIGN5Y2xlcy9saW1iCitDIHo5MDAJCSA/CitDIHo5OTAJCTIzCitDIHo5CQkgPworQyB6MTAJCSA/CitDIHoxOTYJCSA/CisKK0MgVE9ETworQyAgKiBDbGVhbiB1cC4KK0MgICogU3RvcCBpdGVyYXRpbmcgYWRkbXVsXzEgbG9vcCBhdCBsYXRlc3QgZm9yIG4gPSAyLCBpbXBsZW1lbnQgbG9uZ2VyIHRhaWwuCitDICAgIFRoaXMgd2lsbCBhc2sgZm9yIGJhc2VjYXNlIGhhbmRsaW5nIG9mIG4gPSAzLgorQyAgKiBVcGRhdGUgY291bnRlcnMgYW5kIHBvaW50ZXJzIG1vcmUgc3RyYWlnaHRmb3J3YXJkbHksIHBvc3NpYmx5IGxvd2VyaW5nCitDICAgIHJlZ2lzdGVyIHVzYWdlLgorQyAgKiBTaG91bGQgd2UgdXNlIHRoaXMgYWxsb2NhdGlvbi1mcmVlIHN0eWxlIGZvciBtb3JlIHNxcl9iYXNlY2FzZSBhc20KK0MgICAgaW1wbGVtZW50YXRpb25zPyAgVGhlIG9ubHkgZGlzYWR2YW50YWdlIGlzIHRoYXQgaXQgcmVxdWlyZXMgUiAhPSBVLgorQyAgKiBSZXBsYWNlIGxvb3BzIGJ5IGZhc3RlciBjb2RlLiAgVGhlIG11bF8xIGFuZCBhZGRtdWxfMSBsb29wcyBjb3VsZCBiZSBzcGVkCitDICAgIHVwIGJ5IGFib3V0IDEwJS4gIFRoZSBzcXJfZGlhZ19hZGRsc2gxIGxvb3AgY291bGQgcHJvYmFibHkgYmUgc3BlZCB1cCBldmVuCitDICAgIG1vcmUuCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsCWAlcjInKQorZGVmaW5lKGB1cCcsCWAlcjMnKQorZGVmaW5lKGBuJywJYCVyNCcpCisKK2RlZmluZShgemVybycsCWAlcjgnKQorZGVmaW5lKGBycF9zYXZlZCcsCWAlcjknKQorZGVmaW5lKGB1cF9zYXZlZCcsCWAlcjEzJykKK2RlZmluZShgbl9zYXZlZCcsCWAlcjE0JykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9zcXJfYmFzZWNhc2UpCisJYWhpCW4sIC0yCisJamhlCUwoZ2UyKQorCitDIG4gPSAxCisJbAklcjUsIDAodXApCisJbWxyCSVyNCwgJXI1CisJc3QJJXI1LCAwKHJwKQorCXN0CSVyNCwgNChycCkKKwlicgklcjE0CisKK0woZ2UyKToJam5lCUwoZ2VuKQorCitDIG4gPSAyCisJc3RtCSVyNiwgJXI4LCAyNCglcjE1KQorCWxoaQl6ZXJvLCAwCisKKwlsCSVyNSwgMCh1cCkKKwltbHIJJXI0LCAlcjUJCUMgdTAgKiB1MAorCWwJJXIxLCA0KHVwKQorCW1scgklcjAsICVyMQkJQyB1MSAqIHUxCisJc3QJJXI1LCAwKHJwKQorCisJbAklcjcsIDAodXApCisJbWwJJXI2LCA0KHVwKQkJQyB1MCAqIHUxCisJYWxyCSVyNywgJXI3CisJYWxjcgklcjYsICVyNgorCWFsY3IJJXIwLCB6ZXJvCisKKwlhbHIJJXI0LCAlcjcKKwlhbGNyCSVyMSwgJXI2CisJYWxjcgklcjAsIHplcm8KKwlzdAklcjQsIDQocnApCisJc3QJJXIxLCA4KHJwKQorCXN0CSVyMCwgMTIocnApCisKKwlsbQklcjYsICVyOCwgMjQoJXIxNSkKKwlicgklcjE0CisKK0woZ2VuKToKK0MgbXVsXzEgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCXN0bQklcjYsICVyMTQsIDI0KCVyMTUpCisJbGhpCXplcm8sIDAKKwlscgl1cF9zYXZlZCwgdXAKKwlscglycF9zYXZlZCwgcnAKKwlscgluX3NhdmVkLCBuCisKKwlsCSVyNiwgMCh1cCkKKwlsCSVyMTEsIDQodXApCisJbGhpCSVyMTIsIDgJCUMgaW5pdCBpbmRleCByZWdpc3RlcgorCW1scgklcjEwLCAlcjYKKwlscgklcjUsIG4KKwlzdAklcjExLCA0KHJwKQorCWNyCSVyMTUsICVyMTUJCUMgY2xlYXIgY2FycnkgZmxhZworCitMKHRtKToJbAklcjEsIDAoJXIxMix1cCkKKwltbHIJJXIwLCAlcjYKKwlhbGNyCSVyMSwgJXIxMAorCWxyCSVyMTAsICVyMAkJQyBjb3B5IGhpZ2ggcGFydCB0byBjYXJyeSBsaW1iCisJc3QJJXIxLCAwKCVyMTIscnApCisJbGEJJXIxMiwgNCglcjEyKQorCWJyY3QJJXI1LCBMKHRtKQorCisJYWxjcgklcjAsIHplcm8KKwlzdAklcjAsIDAoJXIxMixycCkKKworQyBhZGRtdWxfMSBsb29wID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJYWhpCW4sIC0xCisJamUJTChvdXRlcl9lbmQpCitMKG91dGVyX2xvb3ApOgorCisJbGEJcnAsIDgocnApCQlDIHJwICs9IDIKKwlsYQl1cCwgNCh1cCkJCUMgdXAgKz0gMQorCWwJJXI2LCAwKHVwKQorCWwJJXIxMSwgNCh1cCkKKwlsaGkJJXIxMiwgOAkJQyBpbml0IGluZGV4IHJlZ2lzdGVyCisJbWxyCSVyMTAsICVyNgorCWxyCSVyNSwgbgorCWFsCSVyMTEsIDQocnApCisJc3QJJXIxMSwgNChycCkKKworTCh0YW0pOglsCSVyMSwgMCglcjEyLHVwKQorCWwJJXI3LCAwKCVyMTIscnApCisJbWxyCSVyMCwgJXI2CisJYWxjcgklcjEsICVyNworCWFsY3IJJXIwLCB6ZXJvCisJYWxyCSVyMSwgJXIxMAorCWxyCSVyMTAsICVyMAorCXN0CSVyMSwgMCglcjEyLHJwKQorCWxhCSVyMTIsIDQoJXIxMikKKwlicmN0CSVyNSwgTCh0YW0pCisKKwlhbGNyCSVyMCwgemVybworCXN0CSVyMCwgMCglcjEyLHJwKQorCisJYnJjdAluLCBMKG91dGVyX2xvb3ApCitMKG91dGVyX2VuZCk6CisKKwlsCSVyNiwgNCh1cCkKKwlsCSVyMSwgOCh1cCkKKwlscgklcjcsICVyMAkJQyBTYW1lIGFzOiBsICVyNywgMTIoLHJwKQorCW1scgklcjAsICVyNgorCWFscgklcjEsICVyNworCWFsY3IJJXIwLCB6ZXJvCisJc3QJJXIxLCAxMihycCkKKwlzdAklcjAsIDE2KHJwKQorCitDIHNxcl9kaWFnX2FkZGxzaDEgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2RlZmluZShgdXAnLCBgdXBfc2F2ZWQnKQorZGVmaW5lKGBycCcsIGBycF9zYXZlZCcpCisJbGEJbiwgMShuX3NhdmVkKQorCisJbAklcjEsIDAodXApCisJbWxyCSVyMCwgJXIxCisJc3QJJXIxLCAwKHJwKQorQwljbHIJJXIxNSwgJXIxNQkJQyBjbGVhciBjYXJyeSAoYWxyZWFkeSBjbGVhciBwZXIgYWJvdmUpCisKK0wodG9wKToJbAklcjExLCA0KHVwKQorCWxhCXVwLCA0KHVwKQorCWwJJXI2LCA0KHJwKQorCWwJJXI3LCA4KHJwKQorCW1scgklcjEwLCAlcjExCisJYWxjcgklcjYsICVyNgorCWFsY3IJJXI3LCAlcjcKKwlhbGNyCSVyMTAsIHplcm8JCUMgcHJvcGFnYXRlIGNhcnJ5IHRvIGhpZ2ggcHJvZHVjdCBsaW1iCisJYWxyCSVyNiwgJXIwCisJYWxjcgklcjcsICVyMTEKKwlzdG0JJXI2LCAlcjcsIDQocnApCisJbGEJcnAsIDgocnApCisJbHIJJXIwLCAlcjEwCQlDIGNvcHkgY2FycnkgbGltYgorCWJyY3QJbiwgTCh0b3ApCisKKwlhbGNyCSVyMCwgemVybworCXN0CSVyMCwgNChycCkKKworCWxtCSVyNiwgJXIxNCwgMjQoJXIxNSkKKwlicgklcjE0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfMzIvZXNhbWUvc3VibXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzMyL2VzYW1lL3N1Ym11bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzFlNTdlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzMyL2VzYW1lL3N1Ym11bF8xLmFzbQpAQCAtMCwwICsxLDcwIEBACitkbmwgIFMvMzkwLTMyIG1wbl9zdWJtdWxfMSBmb3Igc3lzdGVtcyB3aXRoIE1MUiBpbnN0cnVjdGlvbi4KKworZG5sICBDb3B5cmlnaHQgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgejkwMAkJMjAKK0Mgejk5MAkJMTEKK0MgejkJCSA/CitDIHoxMAkJID8KK0MgejE5NgkJID8KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywJYCVyMicpCitkZWZpbmUoYHVwJywJYCVyMycpCitkZWZpbmUoYG4nLAlgJXI0JykKK2RlZmluZShgdjAnLAlgJXI1JykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9zdWJtdWxfMSkKKwlzdG0JJXI5LCAlcjEyLCAzNiglcjE1KQorCWxoaQklcjEyLCAwCisJc2xyCSVyMTEsICVyMTEKKworTCh0b3ApOglsCSVyMSwgMCglcjEyLCB1cCkKKwlsCSVyMTAsIDAoJXIxMiwgcnApCisJbWxyCSVyMCwgdjAKKwlzbGJyCSVyMTAsICVyMQorCXNsYnIJJXI5LCAlcjkKKwlzbHIJJXIwLCAlcjkJCUMgY29uZGl0aW9uYWwgaW5jcgorCXNscgklcjEwLCAlcjExCisJbHIJJXIxMSwgJXIwCisJc3QJJXIxMCwgMCglcjEyLCBycCkKKwlsYQklcjEyLCA0KCVyMTIpCisJYnJjdAklcjQsICBMKHRvcCkKKworCWxyCSVyMiwgJXIxMQorCXNsYnIJJXI5LCAlcjkKKwlzbHIJJXIyLCAlcjkKKworCWxtCSVyOSwgJXIxMiwgMzYoJXIxNSkKKwlicgklcjE0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfMzIvZ21wLW1wYXJhbS5oIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzMyL2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWNhNzRhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzMyL2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDEzOCBAQAorLyogUy8zOTAtMzIgZ21wLW1wYXJhbS5oIC0tIENvbXBpbGVyL21hY2hpbmUgcGFyYW1ldGVyIGhlYWRlciBmaWxlLgorCitDb3B5cmlnaHQgMTk5MSwgMTk5MywgMTk5NCwgMjAwMC0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgMzIKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgNAorCisvKiA3NzAgTUh6IElCTSB6OTAwIHJ1bm5pbmcgaW4gMzItYml0IG1vZGUsIHVzaW5nIGp1c3QgdHJhZGl0aW9uYWwgaW5zbnMgKi8KKworI2RlZmluZSBESVZSRU1fMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIERJVlJFTV8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICA1CisjZGVmaW5lIE1PRF8xXzFQX01FVEhPRCAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgTU9EXzFOX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgTU9EXzFVX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgMTUKKyNkZWZpbmUgTU9EXzFfMV9UT19NT0RfMV8yX1RIUkVTSE9MRCAgICAgICAgIDAgIC8qIG5ldmVyIG1wbl9tb2RfMV8xcCAqLworI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICAgICAzMAorI2RlZmluZSBQUkVJTlZfTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICBNUF9TSVpFX1RfTUFYICAvKiBuZXZlciAqLworI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBESVZfUVJfMl9QSTJfVEhSRVNIT0xEICAgICAgICAgICBNUF9TSVpFX1RfTUFYICAvKiBuZXZlciAqLworI2RlZmluZSBESVZFWEFDVF8xX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIEJNT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisKKyNkZWZpbmUgTVVMX1RPT00yMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgTVVMX1RPT00zM19USFJFU0hPTEQgICAgICAgICAgICAgICAxMTQKKyNkZWZpbmUgTVVMX1RPT000NF9USFJFU0hPTEQgICAgICAgICAgICAgICAxNjYKKyNkZWZpbmUgTVVMX1RPT002SF9USFJFU0hPTEQgICAgICAgICAgICAgICAyMjYKKyNkZWZpbmUgTVVMX1RPT004SF9USFJFU0hPTEQgICAgICAgICAgICAgICAzMzMKKworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT000M19USFJFU0hPTEQgICAgIDEwNgorI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT001M19USFJFU0hPTEQgICAgIDEyMgorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT001M19USFJFU0hPTEQgICAgIDEwNQorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT002M19USFJFU0hPTEQgICAgIDExMworCisjZGVmaW5lIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgICA3CisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDQwCisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTI2CisjZGVmaW5lIFNRUl9UT09NNF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTkyCisjZGVmaW5lIFNRUl9UT09NNl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjQ2CisjZGVmaW5lIFNRUl9UT09NOF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMzU3CisKKyNkZWZpbmUgTVVMTUlEX1RPT000Ml9USFJFU0hPTEQgICAgICAgICAgICAgMjgKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxMgorI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxOAorCisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgMjQ0ICAvKiBrID0gNSAqLworI2RlZmluZSBNVUxfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgMjQ0LCA1fSwgeyAgICAgMTMsIDZ9LCB7ICAgICAgNywgNX0sIHsgICAgIDE1LCA2fSwgXAorICAgIHsgICAgICA4LCA1fSwgeyAgICAgMTcsIDZ9LCB7ICAgICAxMywgN30sIHsgICAgICA3LCA2fSwgXAorICAgIHsgICAgIDE2LCA3fSwgeyAgICAgIDksIDZ9LCB7ICAgICAxOSwgN30sIHsgICAgIDExLCA2fSwgXAorICAgIHsgICAgIDIzLCA3fSwgeyAgICAgMTMsIDh9LCB7ICAgICAgNywgN30sIHsgICAgIDE5LCA4fSwgXAorICAgIHsgICAgIDExLCA3fSwgeyAgICAgMjUsIDl9LCB7ICAgICAgNywgOH0sIHsgICAgIDE1LCA3fSwgXAorICAgIHsgICAgIDMzLCA4fSwgeyAgICAgMTksIDd9LCB7ICAgICAzOSwgOH0sIHsgICAgIDIzLCA3fSwgXAorICAgIHsgICAgIDQ3LCA4fSwgeyAgICAgMjcsIDl9LCB7ICAgICAxNSwgOH0sIHsgICAgIDM5LCA5fSwgXAorICAgIHsgICAgIDIzLCA4fSwgeyAgICAgNDcsMTB9LCB7ICAgICAxNSwgOX0sIHsgICAgIDMxLCA4fSwgXAorICAgIHsgICAgIDYzLCA5fSwgeyAgICAgMzksIDh9LCB7ICAgICA3OSwgOX0sIHsgICAgIDQ3LDEwfSwgXAorICAgIHsgICAgIDMxLCA5fSwgeyAgICAgNjMsIDh9LCB7ICAgIDEyNywgOX0sIHsgICAgIDcxLCA4fSwgXAorICAgIHsgICAgMTQzLCA5fSwgeyAgICAgNzksMTB9LCB7ICAgICA0NywxMX0sIHsgICAyMDQ4LDEyfSwgXAorICAgIHsgICA0MDk2LDEzfSwgeyAgIDgxOTIsMTR9LCB7ICAxNjM4NCwxNX0sIHsgIDMyNzY4LDE2fSB9CisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzX1NJWkUgNDgKKyNkZWZpbmUgTVVMX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDI2ODgKKworI2RlZmluZSBTUVJfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDIxNiAgLyogayA9IDUgKi8KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDIxNiwgNX0sIHsgICAgICA3LCA0fSwgeyAgICAgMTUsIDV9LCB7ICAgICAxNywgNn0sIFwKKyAgICB7ICAgICAxMywgN30sIHsgICAgICA3LCA2fSwgeyAgICAgMTcsIDd9LCB7ICAgICAgOSwgNn0sIFwKKyAgICB7ICAgICAyMCwgN30sIHsgICAgIDExLCA2fSwgeyAgICAgMjMsIDd9LCB7ICAgICAxMywgOH0sIFwKKyAgICB7ICAgICAgNywgN30sIHsgICAgIDE5LCA4fSwgeyAgICAgMTEsIDd9LCB7ICAgICAyNSwgOX0sIFwKKyAgICB7ICAgICAgNywgOH0sIHsgICAgIDE1LCA3fSwgeyAgICAgMzMsIDh9LCB7ICAgICAxOSwgN30sIFwKKyAgICB7ICAgICAzOSwgOH0sIHsgICAgIDIzLCA5fSwgeyAgICAgMTUsIDh9LCB7ICAgICAzOSwgOX0sIFwKKyAgICB7ICAgICAyMywgOH0sIHsgICAgIDQ3LDEwfSwgeyAgICAgMTUsIDl9LCB7ICAgICAzMSwgOH0sIFwKKyAgICB7ICAgICA2MywgOX0sIHsgICAgIDM5LCA4fSwgeyAgICAgNzksIDl9LCB7ICAgICA0NywxMH0sIFwKKyAgICB7ICAgICAzMSwgOX0sIHsgICAgIDYzLCA4fSwgeyAgICAxMjcsIDl9LCB7ICAgICA3MSwgOH0sIFwKKyAgICB7ICAgIDE0MywgOX0sIHsgICAgIDc5LDEwfSwgeyAgICAgNDcsMTF9LCB7ICAgMjA0OCwxMn0sIFwKKyAgICB7ICAgNDA5NiwxM30sIHsgICA4MTkyLDE0fSwgeyAgMTYzODQsMTV9LCB7ICAzMjc2OCwxNn0gfQorI2RlZmluZSBTUVJfRkZUX1RBQkxFM19TSVpFIDQ0CisjZGVmaW5lIFNRUl9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAxODU2CisKKyNkZWZpbmUgTVVMTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNVUxMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICA2MQorI2RlZmluZSBNVUxMT19NVUxfTl9USFJFU0hPTEQgICAgICAgICAgICAgNTI0MAorCisjZGVmaW5lIERDX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDcwCisjZGVmaW5lIERDX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAgMjM0CisjZGVmaW5lIERDX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDU5CisjZGVmaW5lIERDX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTM3CisKKyNkZWZpbmUgSU5WX01VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgMzYKKyNkZWZpbmUgSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgICAzMjcKKyNkZWZpbmUgSU5WX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAyNjgKKworI2RlZmluZSBCSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgIDMyNAorI2RlZmluZSBSRURDXzFfVE9fUkVEQ19OX1RIUkVTSE9MRCAgICAgICAgICA2MworCisjZGVmaW5lIE1VX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAxMDk5CisjZGVmaW5lIE1VX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAxMzYwCisjZGVmaW5lIE1VUElfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTM4CisjZGVmaW5lIE1VX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgODg5CisjZGVmaW5lIE1VX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAxMjM0CisKKyNkZWZpbmUgTUFUUklYMjJfU1RSQVNTRU5fVEhSRVNIT0xEICAgICAgICAgMTgKKyNkZWZpbmUgSEdDRF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgICAxNjcKKyNkZWZpbmUgR0NEX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICA1MTgKKyNkZWZpbmUgR0NERVhUX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzNzgKKyNkZWZpbmUgSkFDT0JJX0JBU0VfTUVUSE9EICAgICAgICAgICAgICAgICAgIDIKKworI2RlZmluZSBHRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBHRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgICAyNQorI2RlZmluZSBTRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDU3NworI2RlZmluZSBTRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgMTIxNwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzMyL2xvZ29wc19uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vczM5MF8zMi9sb2dvcHNfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYyY2QyYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vczM5MF8zMi9sb2dvcHNfbi5hc20KQEAgLTAsMCArMSwyOTUgQEAKK2RubCAgUy8zOTAtMzIgbG9nb3BzLgorCitkbmwgIENvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgY3ljbGVzL2xpbWIgICAgIHZhcmlhbnQgMSAgICAgICAgICAgdmFyaWFudCAyICAgICAgIHZhcmlhbnQgMworQwkgICAgICAgIHJwIT11cCAgcnA9dXAKK0MgejkwMAkJID8JID8JCSA/CQkgPworQyB6OTkwCQkgMi41CSAxCQkgMi43NQkJIDIuNzUKK0MgejkJCSA/CQkJID8JCSA/CitDIHoxMAkJID8JCQkgPwkJID8KK0MgejE5NgkJID8JCQkgPwkJID8KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywJYCVyMicpCitkZWZpbmUoYHVwJywJYCVyMycpCitkZWZpbmUoYHZwJywJYCVyNCcpCitkZWZpbmUoYG5uJywJYCVyNScpCisKK2lmZGVmKGBPUEVSQVRJT05fYW5kX24nLGAKKyAgZGVmaW5lKGBmdW5jJyxgbXBuX2FuZF9uJykKKyAgZGVmaW5lKGBWQVJJQU5UXzEnKQorICBkZWZpbmUoYExPR09QQycsYG5jJykKKyAgZGVmaW5lKGBMT0dPUCcsYG4nKScpCitpZmRlZihgT1BFUkFUSU9OX2FuZG5fbicsYAorICBkZWZpbmUoYGZ1bmMnLGBtcG5fYW5kbl9uJykKKyAgZGVmaW5lKGBWQVJJQU5UXzInKQorICBkZWZpbmUoYExPR09QJyxgbicpJykKK2lmZGVmKGBPUEVSQVRJT05fbmFuZF9uJyxgCisgIGRlZmluZShgZnVuYycsYG1wbl9uYW5kX24nKQorICBkZWZpbmUoYFZBUklBTlRfMycpCisgIGRlZmluZShgTE9HT1AnLGBuJyknKQoraWZkZWYoYE9QRVJBVElPTl9pb3JfbicsYAorICBkZWZpbmUoYGZ1bmMnLGBtcG5faW9yX24nKQorICBkZWZpbmUoYFZBUklBTlRfMScpCisgIGRlZmluZShgTE9HT1BDJyxgb2MnKQorICBkZWZpbmUoYExPR09QJyxgbycpJykKK2lmZGVmKGBPUEVSQVRJT05faW9ybl9uJyxgCisgIGRlZmluZShgZnVuYycsYG1wbl9pb3JuX24nKQorICBkZWZpbmUoYFZBUklBTlRfMicpCisgIGRlZmluZShgTE9HT1AnLGBvJyknKQoraWZkZWYoYE9QRVJBVElPTl9uaW9yX24nLGAKKyAgZGVmaW5lKGBmdW5jJyxgbXBuX25pb3JfbicpCisgIGRlZmluZShgVkFSSUFOVF8zJykKKyAgZGVmaW5lKGBMT0dPUCcsYG8nKScpCitpZmRlZihgT1BFUkFUSU9OX3hvcl9uJyxgCisgIGRlZmluZShgZnVuYycsYG1wbl94b3JfbicpCisgIGRlZmluZShgVkFSSUFOVF8xJykKKyAgZGVmaW5lKGBMT0dPUEMnLGB4YycpCisgIGRlZmluZShgTE9HT1AnLGB4JyknKQoraWZkZWYoYE9QRVJBVElPTl94bm9yX24nLGAKKyAgZGVmaW5lKGBmdW5jJyxgbXBuX3hub3JfbicpCisgIGRlZmluZShgVkFSSUFOVF8yJykKKyAgZGVmaW5lKGBMT0dPUCcsYHgnKScpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FuZF9uIG1wbl9hbmRuX24gbXBuX25hbmRfbiBtcG5faW9yX24gbXBuX2lvcm5fbiBtcG5fbmlvcl9uIG1wbl94b3JfbiBtcG5feG5vcl9uKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUoZnVuYykKK2lmZGVmKGBWQVJJQU5UXzEnLGAKKwljcglycCwgdXAKKwlqbmUJTChub3JtYWwpCisKKwlzbGwJbm4sIDIKKwlhaGkJbm4sIC0xCisJbHIJJXIxLCBubgorCXNybAklcjEsIDgKKwlsdHIJJXIxLCAlcjEJCUMgPCAyNTYgYnl0ZXMgdG8gY29weT8KKwlqZQlMKDEpCisKK0wodHApOglMT0dPUEMJMCgyNTYsIHJwKSwgMCh2cCkKKwlsYQlycCwgMjU2KHJwKQorCWxhCXZwLCAyNTYodnApCisJYnJjdAklcjEsIEwodHApCisKK0woMSk6CWJyYXMJJXIxLCBMKDIpCQlDIG1ha2UgcjEgcG9pbnQgdG8gbXZjIGluc24KKwlMT0dPUEMJMCgxLCBycCksIDAodnApCitMKDIpOglleAlubiwgMCglcjEpCQlDIGV4ZWN1dGUgbXZjIHdpdGggbGVuZ3RoICgobm4tMSkgbW9kIDI1NikrMQorTChydG4pOglicgklcjE0CisKKworTChub3JtYWwpOgorCXN0bQklcjYsICVyOCwgMTIoJXIxNSkKKwlhaGkJbm4sIDMKKwlsaGkJJXI3LCAzCisJbHIJJXIwLCBubgorCXNybAklcjAsIDIKKwlucgklcjcsIG5uCQkJQyBubiBtb2QgNAorCWplCUwoYjEpCisJY2hpCSVyNywgMgorCWpsCUwoYjIpCisJam5lCUwodG9wKQorCitMKGIzKToJbG0JJXI1LCAlcjcsIDAodXApCisJbGEJdXAsIDEyKHVwKQorCUxPR09QCSVyNSwgMCh2cCkKKwlMT0dPUAklcjYsIDQodnApCisJTE9HT1AJJXI3LCA4KHZwKQorCXN0bQklcjUsICVyNywgMChycCkKKwlsYQlycCwgMTIocnApCisJbGEJdnAsIDEyKHZwKQorCWoJTChtaWQpCisKK0woYjEpOglsCSVyNSwgMCh1cCkKKwlsYQl1cCwgNCh1cCkKKwlMT0dPUAklcjUsIDAodnApCisJc3QJJXI1LCAwKHJwKQorCWxhCXJwLCA0KHJwKQorCWxhCXZwLCA0KHZwKQorCWoJTChtaWQpCisKK0woYjIpOglsbQklcjUsICVyNiwgMCh1cCkKKwlsYQl1cCwgOCh1cCkKKwlMT0dPUAklcjUsIDAodnApCisJTE9HT1AJJXI2LCA0KHZwKQorCXN0bQklcjUsICVyNiwgMChycCkKKwlsYQlycCwgOChycCkKKwlsYQl2cCwgOCh2cCkKKwlqCUwobWlkKQorCitMKHRvcCk6CWxtCSVyNSwgJXI4LCAwKHVwKQorCWxhCXVwLCAxNih1cCkKKwlMT0dPUAklcjUsIDAodnApCisJTE9HT1AJJXI2LCA0KHZwKQorCUxPR09QCSVyNywgOCh2cCkKKwlMT0dPUAklcjgsIDEyKHZwKQorCXN0bQklcjUsICVyOCwgMChycCkKKwlsYQlycCwgMTYocnApCisJbGEJdnAsIDE2KHZwKQorTChtaWQpOglicmN0CSVyMCwgTCh0b3ApCisKKwlsbQklcjYsICVyOCwgMTIoJXIxNSkKKwlicgklcjE0CisnKQorCitpZmRlZihgVkFSSUFOVF8yJyxgCisJc3RtCSVyNiwgJXI4LCAxMiglcjE1KQorCWxoaQklcjEsIC0xCisKKwlhaGkJbm4sIDMKKwlsaGkJJXI3LCAzCisJbHIJJXIwLCBubgorCXNybAklcjAsIDIKKwlucgklcjcsIG5uCQkJQyBubiBtb2QgNAorCWplCUwoYjEpCisJY2hpCSVyNywgMgorCWpsCUwoYjIpCisJam5lCUwodG9wKQorCitMKGIzKToJbG0JJXI1LCAlcjcsIDAodnApCisJbGEJdnAsIDEyKHZwKQorCXhyCSVyNSwgJXIxCisJeHIJJXI2LCAlcjEKKwl4cgklcjcsICVyMQorCUxPR09QCSVyNSwgMCh1cCkKKwlMT0dPUAklcjYsIDQodXApCisJTE9HT1AJJXI3LCA4KHVwKQorCXN0bQklcjUsICVyNywgMChycCkKKwlsYQlycCwgMTIocnApCisJbGEJdXAsIDEyKHVwKQorCWoJTChtaWQpCisKK0woYjEpOglsCSVyNSwgMCh2cCkKKwlsYQl2cCwgNCh2cCkKKwl4cgklcjUsICVyMQorCUxPR09QCSVyNSwgMCh1cCkKKwlzdAklcjUsIDAocnApCisJbGEJcnAsIDQocnApCisJbGEJdXAsIDQodXApCisJaglMKG1pZCkKKworTChiMik6CWxtCSVyNSwgJXI2LCAwKHZwKQorCWxhCXZwLCA4KHZwKQorCXhyCSVyNSwgJXIxCisJeHIJJXI2LCAlcjEKKwlMT0dPUAklcjUsIDAodXApCisJTE9HT1AJJXI2LCA0KHVwKQorCXN0bQklcjUsICVyNiwgMChycCkKKwlsYQlycCwgOChycCkKKwlsYQl1cCwgOCh1cCkKKwlqCUwobWlkKQorCitMKHRvcCk6CWxtCSVyNSwgJXI4LCAwKHZwKQorCWxhCXZwLCAxNih2cCkKKwl4cgklcjUsICVyMQorCXhyCSVyNiwgJXIxCisJeHIJJXI3LCAlcjEKKwl4cgklcjgsICVyMQorCUxPR09QCSVyNSwgMCh1cCkKKwlMT0dPUAklcjYsIDQodXApCisJTE9HT1AJJXI3LCA4KHVwKQorCUxPR09QCSVyOCwgMTIodXApCisJbGEJdXAsIDE2KHVwKQorCXN0bQklcjUsICVyOCwgMChycCkKKwlsYQlycCwgMTYocnApCitMKG1pZCk6CWJyY3QJJXIwLCBMKHRvcCkKKworCWxtCSVyNiwgJXI4LCAxMiglcjE1KQorCWJyCSVyMTQKKycpCisKK2lmZGVmKGBWQVJJQU5UXzMnLGAKKwlzdG0JJXI2LCAlcjgsIDEyKCVyMTUpCisJbGhpCSVyMSwgLTEKKworCWFoaQlubiwgMworCWxoaQklcjcsIDMKKwlscgklcjAsIG5uCisJc3JsCSVyMCwgMgorCW5yCSVyNywgbm4JCQlDIG5uIG1vZCA0CisJamUJTChiMSkKKwljaGkJJXI3LCAyCisJamwJTChiMikKKwlqbmUJTCh0b3ApCisKK0woYjMpOglsbQklcjUsICVyNywgMCh2cCkKKwlsYQl2cCwgMTIodnApCisJTE9HT1AJJXI1LCAwKHVwKQorCUxPR09QCSVyNiwgNCh1cCkKKwl4cgklcjUsICVyMQorCXhyCSVyNiwgJXIxCisJTE9HT1AJJXI3LCA4KHVwKQorCXhyCSVyNywgJXIxCisJc3RtCSVyNSwgJXI3LCAwKHJwKQorCWxhCXJwLCAxMihycCkKKwlsYQl1cCwgMTIodXApCisJaglMKG1pZCkKKworTChiMSk6CWwJJXI1LCAwKHZwKQorCWxhCXZwLCA0KHZwKQorCUxPR09QCSVyNSwgMCh1cCkKKwl4cgklcjUsICVyMQorCXN0CSVyNSwgMChycCkKKwlsYQlycCwgNChycCkKKwlsYQl1cCwgNCh1cCkKKwlqCUwobWlkKQorCitMKGIyKToJbG0JJXI1LCAlcjYsIDAodnApCisJbGEJdnAsIDgodnApCisJTE9HT1AJJXI1LCAwKHVwKQorCUxPR09QCSVyNiwgNCh1cCkKKwl4cgklcjUsICVyMQorCXhyCSVyNiwgJXIxCisJc3RtCSVyNSwgJXI2LCAwKHJwKQorCWxhCXJwLCA4KHJwKQorCWxhCXVwLCA4KHVwKQorCWoJTChtaWQpCisKK0wodG9wKToJbG0JJXI1LCAlcjgsIDAodnApCisJbGEJdnAsIDE2KHZwKQorCUxPR09QCSVyNSwgMCh1cCkKKwlMT0dPUAklcjYsIDQodXApCisJeHIJJXI1LCAlcjEKKwl4cgklcjYsICVyMQorCUxPR09QCSVyNywgOCh1cCkKKwlMT0dPUAklcjgsIDEyKHVwKQorCXhyCSVyNywgJXIxCisJeHIJJXI4LCAlcjEKKwlzdG0JJXI1LCAlcjgsIDAocnApCisJbGEJdXAsIDE2KHVwKQorCWxhCXJwLCAxNihycCkKK0wobWlkKToJYnJjdAklcjAsIEwodG9wKQorCisJbG0JJXI2LCAlcjgsIDEyKCVyMTUpCisJYnIJJXIxNAorJykKKworRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzMyL2xzaGlmdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfMzIvbHNoaWZ0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTdkNzZlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzMyL2xzaGlmdC5hc20KQEAgLTAsMCArMSwxNDQgQEAKK2RubCAgUy8zOTAtMzIgbXBuX2xzaGlmdC4KKworZG5sICBDb3B5cmlnaHQgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgejkwMAkJIDYKK0Mgejk5MAkgICAgICAgICAzCitDIHo5CQkgPworQyB6MTAJCSA/CitDIHoxOTYJCSA/CisKK0MgVE9ETworQyAgKgorCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLAlgJXIyJykKK2RlZmluZShgdXAnLAlgJXIzJykKK2RlZmluZShgbicsCWAlcjQnKQorZGVmaW5lKGBjbnQnLAlgJXI1JykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9sc2hpZnQpCisJbHIJJXIxLCBuCisJc2xsCSVyMSwgMgorCXN0bQklcjYsICVyMTIsIDI0KCVyMTUpCisJbGEJdXAsIDAoJXIxLHVwKQkJQyBwdXQgdXAgbmVhciBlbmQgb2YgVQorCWxhCXJwLCAwKCVyMSxycCkJCUMgcHV0IHJwIG5lYXIgZW5kIG9mIFIKKwlhaGkJdXAsIC0yMAorCWFoaQlycCwgLTE2CisJbGhpCSVyOCwgMzIKKwlzcgklcjgsIGNudAorCWwJJXIxMiwgMTYodXApCisJc3JsCSVyMTIsIDAoJXI4KQkJQyByZXR1cm4gdmFsdWUKKwlsaGkJJXI3LCAzCisJbnIJJXI3LCBuCisJc3JsCW4sIDIKKwlqZQlMKGIwKQorCWNoaQklcjcsIDIKKwlqbAlMKGIxKQorCWplCUwoYjIpCisKK0woYjMpOglsCSVyMTAsIDE2KHVwKQorCWwJJXIxMSwgMTIodXApCisJbAklcjksICAgOCh1cCkKKwlhaGkJdXAsIC04CisJbHIJJXI4LCAlcjExCisJc2xkbAklcjEwLCAwKGNudCkKKwlzbGRsCSVyOCwgIDAoY250KQorCXN0CSVyMTAsIDEyKHJwKQorCXN0CSVyOCwgICA4KHJwKQorCWFoaQlycCwgLTgKKwlsdHIJbiwgbgorCWplCUwoZW5kKQorCWoJTCh0b3ApCisKK0woYjIpOglsCSVyMTAsIDE2KHVwKQorCWwJJXIxMSwgMTIodXApCisJYWhpCXVwLCAtNAorCXNsZGwJJXIxMCwgMChjbnQpCisJc3QJJXIxMCwgMTIocnApCisJYWhpCXJwLCAtNAorCWx0cgluLCBuCisJamUJTChlbmQpCisJaglMKHRvcCkKKworTChiMSk6CWx0cgluLCBuCisJamUJTChlbmQpCisJaglMKHRvcCkKKworTChiMCk6CWwJJXIxMCwxNih1cCkKKwlsCSVyOCwgMTIodXApCisJbAklcjYsICA4KHVwKQorCWwJJXIwLCAgNCh1cCkKKwlhaGkJdXAsIC0xMgorCWxyCSVyMTEsICVyOAorCWxyCSVyOSwgICVyNgorCWxyCSVyNywgICVyMAorCXNsZGwJJXIxMCwwKGNudCkKKwlzbGRsCSVyOCwgMChjbnQpCisJc2xkbAklcjYsIDAoY250KQorCXN0CSVyMTAsIDEyKHJwKQorCXN0CSVyOCwgICA4KHJwKQorCXN0CSVyNiwgICA0KHJwKQorCWFoaQlycCwgLTEyCisJYWhpCW4sIC0xCisJamUJTChlbmQpCisKKwlBTElHTig4KQorTCh0b3ApOglsCSVyMTAsIDE2KHVwKQorCWwJJXI4LCAgMTIodXApCisJbAklcjYsICAgOCh1cCkKKwlsCSVyMCwgICA0KHVwKQorCWwJJXIxLCAgIDAodXApCisJbHIJJXIxMSwgJXI4CisJbHIJJXI5LCAgJXI2CisJbHIJJXI3LCAgJXIwCisJYWhpCXVwLCAtMTYKKwlzbGRsCSVyMTAsIDAoY250KQorCXNsZGwJJXI4LCAgMChjbnQpCisJc2xkbAklcjYsICAwKGNudCkKKwlzbGRsCSVyMCwgIDAoY250KQorCXN0CSVyMTAsIDEyKHJwKQorCXN0CSVyOCwgICA4KHJwKQorCXN0CSVyNiwgICA0KHJwKQorCXN0CSVyMCwgICAwKHJwKQorCWFoaQlycCwgLTE2CisJYnJjdAluLCBMKHRvcCkKKworTChlbmQpOglsCSVyMTAsIDE2KHVwKQorCXNsbAklcjEwLCAwKGNudCkKKwlzdAklcjEwLCAxMihycCkKKworCWxyCSVyMiwgJXIxMgorCWxtCSVyNiwgJXIxMiwgMjQoJXIxNSkKKwlicgklcjE0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfMzIvbHNoaWZ0Yy5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfMzIvbHNoaWZ0Yy5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYwMTY3MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vczM5MF8zMi9sc2hpZnRjLmFzbQpAQCAtMCwwICsxLDE1NiBAQAorZG5sICBTLzM5MC0zMiBtcG5fbHNoaWZ0Yy4KKworZG5sICBDb3B5cmlnaHQgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgejkwMAkJIDcKK0Mgejk5MAkgICAgICAgICAzLjM3NQorQyB6OQkJID8KK0MgejEwCQkgPworQyB6MTk2CQkgPworCitDIFRPRE8KK0MgICoKKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywJYCVyMicpCitkZWZpbmUoYHVwJywJYCVyMycpCitkZWZpbmUoYG4nLAlgJXI0JykKK2RlZmluZShgY250JywJYCVyNScpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fbHNoaWZ0YykKKwlscgklcjEsIG4KKwlzbGwJJXIxLCAyCisJc3RtCSVyNiwgJXIxMywgMjQoJXIxNSkKKwlsYQl1cCwgMCglcjEsdXApCQlDIHB1dCB1cCBuZWFyIGVuZCBvZiBVCisJbGEJcnAsIDAoJXIxLHJwKQkJQyBwdXQgcnAgbmVhciBlbmQgb2YgUgorCWFoaQl1cCwgLTIwCisJYWhpCXJwLCAtMTYKKwlsaGkJJXI4LCAzMgorCXNyCSVyOCwgY250CisJbAklcjEyLCAxNih1cCkKKwlzcmwJJXIxMiwgMCglcjgpCQlDIHJldHVybiB2YWx1ZQorCWxoaQklcjEzLCAtMQorCWxoaQklcjcsIDMKKwlucgklcjcsIG4KKwlzcmwJbiwgMgorCWplCUwoYjApCisJY2hpCSVyNywgMgorCWpsCUwoYjEpCisJamUJTChiMikKKworTChiMyk6CWwJJXIxMCwgMTYodXApCisJbAklcjExLCAxMih1cCkKKwlsCSVyOSwgICA4KHVwKQorCWFoaQl1cCwgLTgKKwlscgklcjgsICVyMTEKKwlzbGRsCSVyMTAsIDAoY250KQorCXNsZGwJJXI4LCAgMChjbnQpCisJeHIJJXIxMCwgJXIxMworCXhyCSVyOCwgJXIxMworCXN0CSVyMTAsIDEyKHJwKQorCXN0CSVyOCwgICA4KHJwKQorCWFoaQlycCwgLTgKKwlsdHIJbiwgbgorCWplCUwoZW5kKQorCWoJTCh0b3ApCisKK0woYjIpOglsCSVyMTAsIDE2KHVwKQorCWwJJXIxMSwgMTIodXApCisJYWhpCXVwLCAtNAorCXNsZGwJJXIxMCwgMChjbnQpCisJeHIJJXIxMCwgJXIxMworCXN0CSVyMTAsIDEyKHJwKQorCWFoaQlycCwgLTQKKwlsdHIJbiwgbgorCWplCUwoZW5kKQorCWoJTCh0b3ApCisKK0woYjEpOglsdHIJbiwgbgorCWplCUwoZW5kKQorCWoJTCh0b3ApCisKK0woYjApOglsCSVyMTAsMTYodXApCisJbAklcjgsIDEyKHVwKQorCWwJJXI2LCAgOCh1cCkKKwlsCSVyMCwgIDQodXApCisJYWhpCXVwLCAtMTIKKwlscgklcjExLCAlcjgKKwlscgklcjksICAlcjYKKwlscgklcjcsICAlcjAKKwlzbGRsCSVyMTAsMChjbnQpCisJc2xkbAklcjgsIDAoY250KQorCXNsZGwJJXI2LCAwKGNudCkKKwl4cgklcjEwLCAlcjEzCisJeHIJJXI4LCAlcjEzCisJeHIJJXI2LCAlcjEzCisJc3QJJXIxMCwgMTIocnApCisJc3QJJXI4LCAgIDgocnApCisJc3QJJXI2LCAgIDQocnApCisJYWhpCXJwLCAtMTIKKwlhaGkJbiwgLTEKKwlqZQlMKGVuZCkKKworCUFMSUdOKDgpCitMKHRvcCk6CWwJJXIxMCwgMTYodXApCisJbAklcjgsICAxMih1cCkKKwlsCSVyNiwgICA4KHVwKQorCWwJJXIwLCAgIDQodXApCisJbAklcjEsICAgMCh1cCkKKwlscgklcjExLCAlcjgKKwlscgklcjksICAlcjYKKwlscgklcjcsICAlcjAKKwlhaGkJdXAsIC0xNgorCXNsZGwJJXIxMCwgMChjbnQpCisJc2xkbAklcjgsICAwKGNudCkKKwlzbGRsCSVyNiwgIDAoY250KQorCXNsZGwJJXIwLCAgMChjbnQpCisJeHIJJXIxMCwgJXIxMworCXhyCSVyOCwgJXIxMworCXhyCSVyNiwgJXIxMworCXhyCSVyMCwgJXIxMworCXN0CSVyMTAsIDEyKHJwKQorCXN0CSVyOCwgICA4KHJwKQorCXN0CSVyNiwgICA0KHJwKQorCXN0CSVyMCwgICAwKHJwKQorCWFoaQlycCwgLTE2CisJYnJjdAluLCBMKHRvcCkKKworTChlbmQpOglsCSVyMTAsIDE2KHVwKQorCXNsbAklcjEwLCAwKGNudCkKKwl4cgklcjEwLCAlcjEzCisJc3QJJXIxMCwgMTIocnApCisKKwlscgklcjIsICVyMTIKKwlsbQklcjYsICVyMTMsIDI0KCVyMTUpCisJYnIJJXIxNAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzMyL211bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vczM5MF8zMi9tdWxfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNhZDBjNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vczM5MF8zMi9tdWxfMS5hc20KQEAgLTAsMCArMSw4NSBAQAorZG5sICBTLzM5MCBtcG5fbXVsXzEgLS0gTXVsdGlwbHkgYSBsaW1iIHZlY3RvciB3aXRoIGEgbGltYiBhbmQgc3RvcmUgdGhlCitkbmwgIHJlc3VsdCBpbiBhIHNlY29uZCBsaW1iIHZlY3Rvci4KKworZG5sICBDb3B5cmlnaHQgMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitkZWZpbmUoYHJwJywyKQorZGVmaW5lKGB1cCcsMykKK2RlZmluZShgbicsNCkKK2RlZmluZShgdmxpbWInLDUpCitkZWZpbmUoYGN5bGltYicsNykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9tdWxfMSkKKwlzdG0JNiw3LDI0KDE1KQorCXNscgljeWxpbWIsY3lsaW1iCSMgY2xlYXIgY3lsaW1iCisJbHRyCXZsaW1iLHZsaW1iCisJam5sCS5Mb29wcAorCisuTG9vcG46CWwJMSwwKHVwKQkJIyBsb2FkIGZyb20gdQorCWxyCTYsMQkJIworCW1yCTAsdmxpbWIJCSMgbXVsdGlwbHkgc2lnbmVkCisJYWxyCTAsNgkJIyBhZGQgdmxpbWIgdG8gcGhpCisJc3JhCTYsMzEJCSMgbWFrZSBtYXNrCisJbnIJNix2bGltYgkJIyAwIG9yIHZsaW1iCisJYWxyCTAsNgkJIyBjb25kaXRpb25hbGx5IGFkZCB2bGltYiB0byBwaGkKKwlhbHIJMSxjeWxpbWIJIyBhZGQgY2FycnkgbGltYiB0byBwbG8KKwlicmMJOCs0LCs4CQkjIGJyYW5jaCBpZiBub3QgY2FycnkKKwlhaGkJMCwxCQkjIGluY3JlbWVudCBwaGkKKwlscgljeWxpbWIsMAkjIG5ldyBjeWxpbWIKKwlzdAkxLDAocnApCQkjIHN0b3JlCisJbGEJdXAsNCgsdXApCisJbGEJcnAsNCgscnApCisJYnJjdAluLC5Mb29wbgorCisJbHIJMixjeWxpbWIKKwlsbQk2LDcsMjQoMTUpCisJYnIJMTQKKworLkxvb3BwOglsCTEsMCh1cCkJCSMgbG9hZCBmcm9tIHUKKwlscgk2LDEJCSMKKwltcgkwLHZsaW1iCQkjIG11bHRpcGx5IHNpZ25lZAorCXNyYQk2LDMxCQkjIG1ha2UgbWFzaworCW5yCTYsdmxpbWIJCSMgMCBvciB2bGltYgorCWFscgkwLDYJCSMgY29uZGl0aW9uYWxseSBhZGQgdmxpbWIgdG8gcGhpCisJYWxyCTEsY3lsaW1iCSMgYWRkIGNhcnJ5IGxpbWIgdG8gcGxvCisJYnJjCTgrNCwrOAkJIyBicmFuY2ggaWYgbm90IGNhcnJ5CisJYWhpCTAsMQkJIyBpbmNyZW1lbnQgcGhpCisJbHIJY3lsaW1iLDAJIyBuZXcgY3lsaW1iCisJc3QJMSwwKHJwKQkJIyBzdG9yZQorCWxhCXVwLDQoLHVwKQorCWxhCXJwLDQoLHJwKQorCWJyY3QJbiwuTG9vcHAKKworCWxyCTIsY3lsaW1iCisJbG0JNiw3LDI0KDE1KQorCWJyCTE0CitFUElMT0dVRShtcG5fbXVsXzEpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfMzIvcnNoaWZ0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vczM5MF8zMi9yc2hpZnQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMmNmMzcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfMzIvcnNoaWZ0LmFzbQpAQCAtMCwwICsxLDEzOCBAQAorZG5sICBTLzM5MC0zMiBtcG5fcnNoaWZ0LgorCitkbmwgIENvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICAgICBjeWNsZXMvbGltYgorQyB6OTAwCQkgNgorQyB6OTkwCSAgICAgICAgIDMKK0MgejkJCSA/CitDIHoxMAkJID8KK0MgejE5NgkJID8KKworQyBUT0RPCitDICAqCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsCWAlcjInKQorZGVmaW5lKGB1cCcsCWAlcjMnKQorZGVmaW5lKGBuJywJYCVyNCcpCitkZWZpbmUoYGNudCcsCWAlcjUnKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX3JzaGlmdCkKKwlzdG0JJXI2LCAlcjEyLCAyNCglcjE1KQorCWxoaQklcjgsIDMyCisJc3IJJXI4LCBjbnQKKwlsCSVyMTIsIDAodXApCisJc2xsCSVyMTIsIDAoJXI4KQkJQyByZXR1cm4gdmFsdWUKKwlsaGkJJXI3LCAzCisJbnIJJXI3LCBuCisJc3JsCW4sIDIKKwlqZQlMKGIwKQorCWNoaQklcjcsIDIKKwlqbAlMKGIxKQorCWplCUwoYjIpCisKK0woYjMpOglsCSVyMTEsIDAodXApCisJbAklcjEwLCA0KHVwKQorCWwJJXI4LCAgOCh1cCkKKwlhaGkJdXAsIDgKKwlscgklcjksICVyMTAKKwlzcmRsCSVyMTAsIDAoY250KQorCXNyZGwJJXI4LCAgMChjbnQpCisJc3QJJXIxMSwgMChycCkKKwlzdAklcjksICA0KHJwKQorCWFoaQlycCwgOAorCWx0cgluLCBuCisJamUJTChlbmQpCisJaglMKHRvcCkKKworTChiMik6CWwJJXIxMSwgMCh1cCkKKwlsCSVyMTAsIDQodXApCisJYWhpCXVwLCA0CisJc3JkbAklcjEwLCAwKGNudCkKKwlzdAklcjExLCAwKHJwKQorCWFoaQlycCwgNAorCWx0cgluLCBuCisJamUJTChlbmQpCisJaglMKHRvcCkKKworTChiMSk6CWx0cgluLCBuCisJamUJTChlbmQpCisJaglMKHRvcCkKKworTChiMCk6CWwJJXIxMSwgMCh1cCkKKwlsCSVyOSwgIDQodXApCisJbAklcjcsICA4KHVwKQorCWwJJXIxLCAxMih1cCkKKwlhaGkJdXAsIDEyCisJbHIJJXIxMCwgJXI5CisJbHIJJXI4LCAgJXI3CisJbHIJJXI2LCAgJXIxCisJc3JkbAklcjEwLCAwKGNudCkKKwlzcmRsCSVyOCwgIDAoY250KQorCXNyZGwJJXI2LCAgMChjbnQpCisJc3QJJXIxMSwgMChycCkKKwlzdAklcjksICA0KHJwKQorCXN0CSVyNywgIDgocnApCisJYWhpCXJwLCAxMgorCWFoaQluLCAtMQorCWplCUwoZW5kKQorCisJQUxJR04oOCkKK0wodG9wKToJbAklcjExLCAwKHVwKQorCWwJJXI5LCAgNCh1cCkKKwlsCSVyNywgIDgodXApCisJbAklcjEsIDEyKHVwKQorCWwJJXIwLCAxNih1cCkKKwlscgklcjEwLCAlcjkKKwlscgklcjgsICAlcjcKKwlscgklcjYsICAlcjEKKwlhaGkJdXAsIDE2CisJc3JkbAklcjEwLCAwKGNudCkKKwlzcmRsCSVyOCwgIDAoY250KQorCXNyZGwJJXI2LCAgMChjbnQpCisJc3JkbAklcjAsICAwKGNudCkKKwlzdAklcjExLCAwKHJwKQorCXN0CSVyOSwgIDQocnApCisJc3QJJXI3LCAgOChycCkKKwlzdAklcjEsIDEyKHJwKQorCWFoaQlycCwgMTYKKwlicmN0CW4sIEwodG9wKQorCitMKGVuZCk6CWwJJXIxMSwgMCh1cCkKKwlzcmwJJXIxMSwgMChjbnQpCisJc3QJJXIxMSwgMChycCkKKworCWxyCSVyMiwgJXIxMgorCWxtCSVyNiwgJXIxMiwgMjQoJXIxNSkKKwlicgklcjE0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfMzIvc3VibXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzMyL3N1Ym11bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTdkODQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzMyL3N1Ym11bF8xLmFzbQpAQCAtMCwwICsxLDkzIEBACitkbmwgIFMvMzkwIG1wbl9zdWJtdWxfMSAtLSBNdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYSBsaW1iIGFuZCBzdWJ0cmFjdCB0aGUKK2RubCAgcmVzdWx0IGZyb20gYSBzZWNvbmQgbGltYiB2ZWN0b3IuCisKK2RubCAgQ29weXJpZ2h0IDIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworZGVmaW5lKGBycCcsMikKK2RlZmluZShgdXAnLDMpCitkZWZpbmUoYG4nLDQpCitkZWZpbmUoYHZsaW1iJyw1KQorZGVmaW5lKGBjeWxpbWInLDcpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fc3VibXVsXzEpCisJc3RtCTYsNywyNCgxNSkKKwlzbHIJY3lsaW1iLGN5bGltYgkjIGNsZWFyIGN5bGltYgorCWx0cgl2bGltYix2bGltYgorCWpubAkuTG9vcHAKKworLkxvb3BuOglsCTEsMCh1cCkJCSMgbG9hZCBmcm9tIHUKKwlscgk2LDEJCSMKKwltcgkwLHZsaW1iCQkjIG11bHRpcGx5IHNpZ25lZAorCWFscgkwLDYJCSMgYWRkIHZsaW1iIHRvIHBoaQorCXNyYQk2LDMxCQkjIG1ha2UgbWFzaworCW5yCTYsdmxpbWIJCSMgMCBvciB2bGltYgorCWFscgkwLDYJCSMgY29uZGl0aW9uYWxseSBhZGQgdmxpbWIgdG8gcGhpCisJYWxyCTEsY3lsaW1iCSMgYWRkIGNhcnJ5IGxpbWIgdG8gcGxvCisJYnJjCTgrNCwrOAkJIyBicmFuY2ggaWYgbm90IGNhcnJ5CisJYWhpCTAsMQkJIyBpbmNyZW1lbnQgcGhpCisJbAk2LDAocnApCQkjIGxvYWQgciBsaW1iCisJc2xyCTYsMQkJIyBhZGQgdSBsaW1iIHRvIHBsbworCWJyYwkyKzEsKzgJCSMgYnJhbmNoIGlmIG5vdCBjYXJyeQorCWFoaQkwLDEJCSMgaW5jcmVtZW50IHBoaQorCWxyCWN5bGltYiwwCSMgbmV3IGN5bGltYgorCXN0CTYsMChycCkJCSMgc3RvcmUKKwlsYQl1cCw0KCx1cCkKKwlsYQlycCw0KCxycCkKKwlicmN0CW4sLkxvb3BuCisKKwlscgkyLGN5bGltYgorCWxtCTYsNywyNCgxNSkKKwlicgkxNAorCisuTG9vcHA6CWwJMSwwKHVwKQkJIyBsb2FkIGZyb20gdQorCWxyCTYsMQkJIworCW1yCTAsdmxpbWIJCSMgbXVsdGlwbHkgc2lnbmVkCisJc3JhCTYsMzEJCSMgbWFrZSBtYXNrCisJbnIJNix2bGltYgkJIyAwIG9yIHZsaW1iCisJYWxyCTAsNgkJIyBjb25kaXRpb25hbGx5IGFkZCB2bGltYiB0byBwaGkKKwlhbHIJMSxjeWxpbWIJIyBhZGQgY2FycnkgbGltYiB0byBwbG8KKwlicmMJOCs0LCs4CQkjIGJyYW5jaCBpZiBub3QgY2FycnkKKwlhaGkJMCwxCQkjIGluY3JlbWVudCBwaGkKKwlsCTYsMChycCkJCSMgbG9hZCByIGxpbWIKKwlzbHIJNiwxCQkjIGFkZCB1IGxpbWIgdG8gcGxvCisJYnJjCTIrMSwrOAkJIyBicmFuY2ggaWYgbm90IGNhcnJ5CisJYWhpCTAsMQkJIyBpbmNyZW1lbnQgcGhpCisJbHIJY3lsaW1iLDAJIyBuZXcgY3lsaW1iCisJc3QJNiwwKHJwKQkJIyBzdG9yZQorCWxhCXVwLDQoLHVwKQorCWxhCXJwLDQoLHJwKQorCWJyY3QJbiwuTG9vcHAKKworCWxyCTIsY3lsaW1iCisJbG0JNiw3LDI0KDE1KQorCWJyCTE0CitFUElMT0dVRShtcG5fc3VibXVsXzEpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfNjQvUkVBRE1FIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzY0L1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzcwMmRiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzY0L1JFQURNRQpAQCAtMCwwICsxLDg4IEBACitDb3B5cmlnaHQgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKKworVGhlcmUgYXJlIDUgZ2VuZXJhdGlvbnMgb2YgNjQtYml0IHMzOTAgcHJvY2Vzc29ycywgejkwMCwgejk5MCwgejksCit6MTAsIGFuZCB6MTk2LiAgVGhlIGN1cnJlbnQgR01QIGNvZGUgd2FzIG9wdGltaXNlZCBmb3IgdGhlIHR3byBvbGRlc3QsCit6OTAwIGFuZCB6OTkwLgorCisKK21wbl9jb3B5aQorCitUaGlzIGNvZGUgbWFrZXMgdXNlIG9mIGEgbG9vcCBhcm91bmQgTVZDLiAgSXQgYWxtb3N0IHN1cmVseSBydW5zIHZlcnkKK2Nsb3NlIHRvIG9wdGltYWxseS4gIEEgc21hbGwgaW1wcm92ZW1lbnQgY291bGQgYmUgZG9uZSBieSB1c2luZyBvbmUKK01WQyBmb3Igc2l6ZSAyNTYgYnl0ZXMsIG5vdyB3ZSB1c2UgdHdvICh3ZSB1c2UgYW4gZXh0cmEgTVZDIHdoZW4KK2NvcHlpbmcgYW55IG11bHRpcGxlIG9mIDI1NiBieXRlcykuCisKKworbXBuX2NvcHlkCisKK1dlIGhhdmUgdHJpZWQgc2V2ZXJhbCBmZWVkLWluIHZhcmlhbnRzIGhlcmUsIGJyYW5jaCB0cmVlLCBqdW1wIHRhYmxlCithbmQgY29tcHV0ZWQgZ290by4gIFRoZSBmYXN0ZXN0IChvbiB6OTkwKSB0dXJuZWQgb3V0IHRvIGJlIGNvbXB1dGVkCitnb3RvLgorCitBbiBhcHByb2FjaCBub3QgdHJpZWQgaXMgRVggb2YgTE1HIGFuZCBTVE1HLCBtb2RpZnlpbmcgdGhlIHJlZ2lzdGVyIHNldAorb24tdGhlLWZseS4gIFVzaW5nIHRoYXQgdHJpY2ssIHdlIGNvdWxkIGNvbXBsZXRlbHkgYXZvaWQgdXNpbmcKK3NlcGFyYXRlIGZlZWQtaW4gcGF0aHMuCisKKworbXBuX2xzaGlmdCwgbXBuX3JzaGlmdAorCitUaGUgY3VycmVudCBjb2RlIHJ1bnMgYXQgcGlwZWxpbmUgZGVjb2RlIGJhbmR3aWR0aCBvbiB6OTkwLgorCisKK21wbl9hZGRfbiwgbXBuX3N1Yl9uCisKK1RoZSBjdXJyZW50IGNvZGUgaXMgNC13YXkgdW5yb2xsZWQuICBJdCBzaG91bGQgYmUgdW5yb2xsZWQgbW9yZSwgYXQKK2xlYXN0IDh4LCBpbiBvcmRlciB0byByZWFjaCAyLjUgYy9sLgorCisKK21wbl9tdWxfMSwgbXBuX2FkZG11bF8xLCBtcG5fc3VibXVsXzEKKworVGhlIGN1cnJlbnQgY29kZSBpcyB2ZXJ5IG5haXZlLCBidXQgZHVlIHRvIHRoZSBub24tcGlwZWxpbmVkIG5hdHVyZSBvZgorTUxHUiBvbiB6OTAwIGFuZCB6OTkwLCBtb3JlIHNvcGhpc3RpY2F0ZWQgY29kZSB3b3VsZCBub3QgZ2FpbiBtdWNoLgorCitPbiB6MTAgb25lIHdvdWxkIG5lZWQgdG8gY2x1c3RlciBhdCBsZWFzdCA0IE1MR1IgdG9nZXRoZXIsIGluIG9yZGVyIHRvCityZWR1Y2Ugc3RhbGxpbmcuCisKK09uIHoxOTYsIG9uZSBzdXJlbHkgd2FudCB0byB1c2UgdW5yb2xsaW5nIGFuZCBwaXBlbGluaW5nLCB0byBwZXJoYXBzCityZWFjaCBhcm91bmQgMTIgYy9sLiAgQSBtYWpvciBpc3N1ZSBoZXJlIGFuZCBvbiB6MTAgaXMgQUxDR1IncyAzIGN5Y2xlCitzdGFsbGluZy4KKworCittcG5fbXVsXzIsIG1wbl9hZGRtdWxfMgorCitBdCBsZWFzdCBmb3Igb2xkZXIgbWFjaGluZXMgKHo5MDAsIHo5OTApIHdpdGggdmVyeSBzbG93IE1MR1IsIHdlCitzaG91bGQgdXNlIEthcmF0c3ViYSdzIGFsZ29yaXRobSBvbiAyLWxpbWIgdW5pdHMsIG1ha2luZyBtdWxfMiBhbmQKK2FkZG11bF8yIHRoZSBtYWluIG11bHRpcGxpY2F0aW9uIHByaW1pdGl2ZXMuICBUaGUgbmV3ZXIgbWFjaGluZXMgbWlnaHQKK2JlbmVmaXQgbGVzcyBmcm9tIHRoaXMgYXBwcm9hY2gsIHBlcmhhcHMgaW4gcGFydGljdWxhciB6MTAsIHdoZXJlIE1MR1IKK2NsdXN0ZXJpbmcgaXMgbW9yZSBpbXBvcnRhbnQuCisKK1dpdGggS2FyYXRzdWJhLCBvbmUgY291bGQgaG9wZSBmb3IgYXJvdW5kIDE2IGN5Y2xlcyBwZXIgYWNjdW11bGF0ZWQKKzEyOCBjcm9zcyBwcm9kdWN0LCBvbiB6OTkwLgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzY0L2FkZG11bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vczM5MF82NC9hZGRtdWxfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRjY2ExMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vczM5MF82NC9hZGRtdWxfMS5hc20KQEAgLTAsMCArMSw3MiBAQAorZG5sICBTLzM5MC02NCBtcG5fYWRkbXVsXzEKKworZG5sICBDb3B5cmlnaHQgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgejkwMAkJMzQKK0Mgejk5MAkJMjMKK0MgejkJCSA/CitDIHoxMAkJMjgKK0MgejE5NgkJID8KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywJYCVyMicpCitkZWZpbmUoYHVwJywJYCVyMycpCitkZWZpbmUoYG4nLAlgJXI0JykKK2RlZmluZShgdjAnLAlgJXI1JykKKworZGVmaW5lKGB6JywJYCVyOScpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fYWRkbXVsXzEpCisJc3RtZwklcjksICVyMTIsIDcyKCVyMTUpCisJbGdoaQklcjEyLCAwCQkJQyB6ZXJvIGluZGV4IHJlZ2lzdGVyCisJYWdoaQklcjEyLCAwCQkJQyBjbGVhciBjYXJyeSBmbGFnCisJbGdoaQklcjExLCAwCQkJQyBjbGVhciBjYXJyeSBsaW1iCisJbGdoaQl6LCAwCQkJQyBrZWVwIHJlZ2lzdGVyIHplcm8KKworTCh0b3ApOglsZwklcjEsIDAoJXIxMix1cCkKKwlsZwklcjEwLCAwKCVyMTIscnApCisJbWxncgklcjAsIHYwCisJYWxjZ3IJJXIxLCAlcjEwCisJYWxjZ3IJJXIwLCB6CisJYWxncgklcjEsICVyMTEKKwlsZ3IJJXIxMSwgJXIwCisJc3RnCSVyMSwgMCglcjEyLHJwKQorCWxhCSVyMTIsIDgoJXIxMikKKwlicmN0ZwluLCBMKHRvcCkKKworCWxnaGkJJXIyLCAwCisJYWxjZ3IJJXIyLCAlcjExCisKKwlsbWcJJXI5LCAlcjEyLCA3MiglcjE1KQorCWJyCSVyMTQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vczM5MF82NC9hb3JybHNoMV9uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vczM5MF82NC9hb3JybHNoMV9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTcyNTllCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzY0L2FvcnJsc2gxX24uYXNtCkBAIC0wLDAgKzEsMTY4IEBACitkbmwgIFMvMzkwLTY0IG1wbl9hZGRsc2gxX24gYW5kIG1wbl9yc2Jsc2gxX24uCisKK2RubCAgQ29weXJpZ2h0IDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgICAgIGN5Y2xlcy9saW1iCitDIHo5MDAJCSA5CitDIHo5OTAJCSA0Ljc1CitDIHo5CQkgPworQyB6MTAJCTExCitDIHoxOTYJCSA/CisKK0MgVE9ETworQyAgKiBPcHRpbWlzZSBmb3Igc21hbGwgbiwgYXZvaWQgJ2xhJyBsaWtlIGluIGFvcnNfbi5hc20uCitDICAqIFR1bmUgdG8gcmVhY2ggMy41IGMvbC4gIEZvciBhZGRsc2gxLCB3ZSBjb3VsZCBsZXQgdGhlIG1haW4gYWxjZ3IgcHJvcGFnYXRlCitDICAgIGNhcnJ5IHRvIHRoZSBsc2gxIGFsY2dyLgorQyAgKiBDb21wdXRlIFJFVFZBTCBmb3Igc3VibHNoMV9uIGxlc3Mgc3R1cGlkbHkuCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsCWAlcjInKQorZGVmaW5lKGB1cCcsCWAlcjMnKQorZGVmaW5lKGB2cCcsCWAlcjQnKQorZGVmaW5lKGBuJywJYCVyNScpCisKK2lmZGVmKGBPUEVSQVRJT05fYWRkbHNoMV9uJyxgCisgIGRlZmluZShBRFNCLAkJYWxnKQorICBkZWZpbmUoQURTQkMsCQlhbGNnKQorICBkZWZpbmUoSU5JVENZLAlgbGdoaQklcjksIC0xJykKKyAgZGVmaW5lKFJFVFZBTCwJYGxhCSVyMiwgMiglcjEsJXI5KScpCisgIGRlZmluZShmdW5jLCBtcG5fYWRkbHNoMV9uKQorJykKK2lmZGVmKGBPUEVSQVRJT05fcnNibHNoMV9uJyxgCisgIGRlZmluZShBRFNCLAkJc2xnKQorICBkZWZpbmUoQURTQkMsCQlzbGJnKQorICBkZWZpbmUoSU5JVENZLAlgbGdoaQklcjksIDAnKQorICBkZWZpbmUoUkVUVkFMLGBkbmwKKwlhbGdyCSVyMSwgJXI5CisJbGdoaQklcjIsIDEKKwlhbGdyCSVyMiwgJXIxJykKKyAgZGVmaW5lKGZ1bmMsIG1wbl9yc2Jsc2gxX24pCisnKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRsc2gxX24gbXBuX3JzYmxzaDFfbikKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKGZ1bmMpCisJc3RtZwklcjYsICVyOSwgNDgoJXIxNSkKKworCWFnaGkJbiwgMworCWxnaGkJJXI3LCAzCisJc3JsZwklcjAsIG4sIDIKKwluZ3IJJXI3LCBuCQkJQyBuIG1vZCA0CisJamUJTChiMSkKKwljZ2hpCSVyNywgMgorCWpsCUwoYjIpCisJam5lCUwoYjApCisKK0woYjMpOglsbWcJJXI1LCAlcjcsIDAodnApCisJbGEJdnAsIDI0KHZwKQorCisJYWxncgklcjUsICVyNQorCWFsY2dyCSVyNiwgJXI2CisJYWxjZ3IJJXI3LCAlcjcKKwlzbGJncgklcjEsICVyMQorCisJQURTQgklcjUsIDAodXApCisJQURTQkMJJXI2LCA4KHVwKQorCUFEU0JDCSVyNywgMTYodXApCisJbGEJdXAsIDI0KHVwKQorCXNsYmdyCSVyOSwgJXI5CisKKwlzdG1nCSVyNSwgJXI3LCAwKHJwKQorCWxhCXJwLCAyNChycCkKKwlicmN0ZwklcjAsIEwodG9wKQorCWoJTChlbmQpCisKK0woYjApOglsZ2hpCSVyMSwgLTEKKwlJTklUQ1kKKwlqCUwodG9wKQorCitMKGIxKToJbGcJJXI1LCAwKHZwKQorCWxhCXZwLCA4KHZwKQorCisJYWxncgklcjUsICVyNQorCXNsYmdyCSVyMSwgJXIxCisJQURTQgklcjUsIDAodXApCisJbGEJdXAsIDgodXApCisJc2xiZ3IJJXI5LCAlcjkKKworCXN0ZwklcjUsIDAocnApCisJbGEJcnAsIDgocnApCisJYnJjdGcJJXIwLCBMKHRvcCkKKwlqCUwoZW5kKQorCitMKGIyKToJbG1nCSVyNSwgJXI2LCAwKHZwKQorCWxhCXZwLCAxNih2cCkKKworCWFsZ3IJJXI1LCAlcjUKKwlhbGNncgklcjYsICVyNgorCXNsYmdyCSVyMSwgJXIxCisKKwlBRFNCCSVyNSwgMCh1cCkKKwlBRFNCQwklcjYsIDgodXApCisJbGEJdXAsIDE2KHVwKQorCXNsYmdyCSVyOSwgJXI5CisKKwlzdG1nCSVyNSwgJXI2LCAwKHJwKQorCWxhCXJwLCAxNihycCkKKwlicmN0ZwklcjAsIEwodG9wKQorCWoJTChlbmQpCisKK0wodG9wKToJbG1nCSVyNSwgJXI4LCAwKHZwKQorCWxhCXZwLCAzMih2cCkKKworCWFnaGkJJXIxLCAxCQkJQyByZXN0b3JlIGNhcnJ5CisKKwlhbGNncgklcjUsICVyNQorCWFsY2dyCSVyNiwgJXI2CisJYWxjZ3IJJXI3LCAlcjcKKwlhbGNncgklcjgsICVyOAorCisJc2xiZ3IJJXIxLCAlcjEJCUMgc2F2ZSBjYXJyeQorCisJYWdoaQklcjksIDEJCQlDIHJlc3RvcmUgY2FycnkKKworCUFEU0JDCSVyNSwgMCh1cCkKKwlBRFNCQwklcjYsIDgodXApCisJQURTQkMJJXI3LCAxNih1cCkKKwlBRFNCQwklcjgsIDI0KHVwKQorCWxhCXVwLCAzMih1cCkKKworCXNsYmdyCSVyOSwgJXI5CQlDIHNhdmUgY2FycnkKKworCXN0bWcJJXI1LCAlcjgsIDAocnApCisJbGEJcnAsIDMyKHJwKQorCWJyY3RnCSVyMCwgTCh0b3ApCisKK0woZW5kKToJUkVUVkFMCisJbG1nCSVyNiwgJXI5LCA0OCglcjE1KQorCWJyCSVyMTQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vczM5MF82NC9hb3JzX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzY0L2FvcnNfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNjM2NhNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vczM5MF82NC9hb3JzX24uYXNtCkBAIC0wLDAgKzEsMTM2IEBACitkbmwgIFMvMzkwLTY0IG1wbl9hZGRfbiBhbmQgbXBuX3N1Yl9uLgorCitkbmwgIENvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICAgICBjeWNsZXMvbGltYgorQyB6OTAwCQkgNS41CitDIHo5OTAJCSAzCitDIHo5CQkgPworQyB6MTAJCSA2CitDIHoxOTYJCSA/CisKK0MgVE9ETworQyAgKiBPcHRpbWlzZSBmb3Igc21hbGwgbgorQyAgKiBVc2UgcjAgYW5kIHNhdmUvcmVzdG9yZSBvbmUgbGVzcyByZWdpc3RlcgorQyAgKiBVc2luZyBsb2dvcHNfbidzIHYxIGlubmVyIGxvb3Agb3BlcmFuZCBvcmRlciBtYWtlIHRoZSBsb29wIGFib3V0IDIwJQorQyAgICBmYXN0ZXIsIGF0IHRoZSBleHBlbnNlIG9mIGhpZ2hseSBhbGlnbm1lbnQtZGVwZW5kZW50IHBlcmZvcm1hbmNlLgorCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLAlgJXIyJykKK2RlZmluZShgdXAnLAlgJXIzJykKK2RlZmluZShgdnAnLAlgJXI0JykKK2RlZmluZShgbicsCWAlcjUnKQorCitpZmRlZihgT1BFUkFUSU9OX2FkZF9uJywgYAorICBkZWZpbmUoQURTQiwJCWFsZykKKyAgZGVmaW5lKEFEU0JDUiwJYWxjZ3IpCisgIGRlZmluZShBRFNCQywJCWFsY2cpCisgIGRlZmluZShSRVRWQUwsYGRubAorCWxnaGkJJXIyLCAwCisJYWxjZ3IJJXIyLCAlcjInKQorICBkZWZpbmUoZnVuYywJCW1wbl9hZGRfbikKKyAgZGVmaW5lKGZ1bmNfbmMsCW1wbl9hZGRfbmMpJykKK2lmZGVmKGBPUEVSQVRJT05fc3ViX24nLCBgCisgIGRlZmluZShBRFNCLAkJc2xnKQorICBkZWZpbmUoQURTQkNSLAlzbGJncikKKyAgZGVmaW5lKEFEU0JDLAkJc2xiZykKKyAgZGVmaW5lKFJFVFZBTCxgZG5sCisJc2xiZ3IJJXIyLCAlcjIKKwlsY2dyCSVyMiwgJXIyJykKKyAgZGVmaW5lKGZ1bmMsCQltcG5fc3ViX24pCisgIGRlZmluZShmdW5jX25jLAltcG5fc3ViX25jKScpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FkZF9uIG1wbl9zdWJfbikKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKGZ1bmMpCisJc3RtZwklcjYsICVyOCwgNDgoJXIxNSkKKworCWFnaGkJbiwgMworCWxnaGkJJXI3LCAzCisJc3JsZwklcjEsIG4sIDIKKwluZ3IJJXI3LCBuCQkJQyBuIG1vZCA0CisJamUJTChiMSkKKwljZ2hpCSVyNywgMgorCWpsCUwoYjIpCisJam5lCUwoYjApCisKK0woYjMpOglsbWcJJXI1LCAlcjcsIDAodXApCisJbGEJdXAsIDI0KHVwKQorCUFEU0IJJXI1LCAwKHZwKQorCUFEU0JDCSVyNiwgOCh2cCkKKwlBRFNCQwklcjcsIDE2KHZwKQorCWxhCXZwLCAyNCh2cCkKKwlzdG1nCSVyNSwgJXI3LCAwKHJwKQorCWxhCXJwLCAyNChycCkKKwlicmN0ZwklcjEsIEwodG9wKQorCWoJTChlbmQpCisKK0woYjApOglsbWcJJXI1LCAlcjgsIDAodXApCQlDIFRoaXMgcmVkdW5kYW50IGluc25zIGlzIG5vIG1pc3Rha2UsCisJbGEJdXAsIDMyKHVwKQkJQyBpdCBpcyBuZWVkZWQgdG8gbWFrZSBtYWluIGxvb3AgcnVuCisJQURTQgklcjUsIDAodnApCQlDIGZhc3QgZm9yIG4gPSAwIChtb2QgNCkuCisJQURTQkMJJXI2LCA4KHZwKQorCWoJTChtMCkKKworTChiMSk6CWxnCSVyNSwgMCh1cCkKKwlsYQl1cCwgOCh1cCkKKwlBRFNCCSVyNSwgMCh2cCkKKwlsYQl2cCwgOCh2cCkKKwlzdGcJJXI1LCAwKHJwKQorCWxhCXJwLCA4KHJwKQorCWJyY3RnCSVyMSwgTCh0b3ApCisJaglMKGVuZCkKKworTChiMik6CWxtZwklcjUsICVyNiwgMCh1cCkKKwlsYQl1cCwgMTYodXApCisJQURTQgklcjUsIDAodnApCisJQURTQkMJJXI2LCA4KHZwKQorCWxhCXZwLCAxNih2cCkKKwlzdG1nCSVyNSwgJXI2LCAwKHJwKQorCWxhCXJwLCAxNihycCkKKwlicmN0ZwklcjEsIEwodG9wKQorCWoJTChlbmQpCisKK0wodG9wKToJbG1nCSVyNSwgJXI4LCAwKHVwKQorCWxhCXVwLCAzMih1cCkKKwlBRFNCQwklcjUsIDAodnApCisJQURTQkMJJXI2LCA4KHZwKQorTChtMCk6CUFEU0JDCSVyNywgMTYodnApCisJQURTQkMJJXI4LCAyNCh2cCkKKwlsYQl2cCwgMzIodnApCisJc3RtZwklcjUsICVyOCwgMChycCkKKwlsYQlycCwgMzIocnApCisJYnJjdGcJJXIxLCBMKHRvcCkKKworTChlbmQpOglSRVRWQUwKKwlsbWcJJXI2LCAlcjgsIDQ4KCVyMTUpCisJYnIJJXIxNAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzY0L2JkaXZfZGJtMWMuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzY0L2JkaXZfZGJtMWMuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZTkwMGEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfNjQvYmRpdl9kYm0xYy5hc20KQEAgLTAsMCArMSw2NSBAQAorZG5sICBTLzM5MC02NCBtcG5fYmRpdl9kYm0xYworCitkbmwgIENvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICAgICBjeWNsZXMvbGltYgorQyB6OTAwCQkyOQorQyB6OTkwCQkyMgorQyB6OQkJID8KK0MgejEwCQkxOQorQyB6MTk2CQkgPworCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcXAnLAkgIGAlcjInKQorZGVmaW5lKGB1cCcsCSAgYCVyMycpCitkZWZpbmUoYG4nLAkgIGAlcjQnKQorZGVmaW5lKGBiZCcsCSAgYCVyNScpCitkZWZpbmUoYGN5JywJICBgJXI2JykKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMTYpCitQUk9MT0dVRShtcG5fYmRpdl9kYm0xYykKKwlzdG1nCSVyNiwgJXI3LCA0OCglcjE1KQorCWxnaGkJJXI3LCAwCQkJQyB6ZXJvIGluZGV4IHJlZ2lzdGVyCisKK0wodG9wKToJbGcJJXIxLCAwKCVyNyx1cCkKKwltbGdyCSVyMCwgYmQKKwlzbGdyCSVyNiwgJXIxCisJc3RnCSVyNiwgMCglcjcscXApCisJbGEJJXI3LCA4KCVyNykKKwlzbGJncgklcjYsICVyMAorCWJyY3RnCW4sIEwodG9wKQorCisJbGdyCSVyMiwgJXI2CisJbG1nCSVyNiwgJXI3LCA0OCglcjE1KQorCWJyCSVyMTQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vczM5MF82NC9jb3B5ZC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfNjQvY29weWQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MzFlMTkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfNjQvY29weWQuYXNtCkBAIC0wLDAgKzEsMTQ0IEBACitkbmwgIFMvMzkwLTY0IG1wbl9jb3B5ZAorCitkbmwgIENvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgICAgIGN5Y2xlcy9saW1iCitDIHo5MDAJCSAyLjY3CitDIHo5OTAgICAgICAgICAgIDEuNQorQyB6OQkJID8KK0MgejEwCQkgMS44CitDIHoxOTYJCSA/CisKK0MgRklYTUU6CitDICAqIEF2b2lkIHNhdmluZy9yZXN0b3JpbmcgY2FsbGVlLXNhdmVzIHJlZ2lzdGVycyBmb3IgbiA8IDMuICBUaGlzIGNvdWxkIGJlCitDICAgIGRvbmUgYnkgc2V0dGluZyBycD1yMSwgdXA9cjIsIGk9cjAgYW5kIHIzLHI0LHI1IGZvciBjbG9jayByZWdzLgorQyAgICBXZSBjb3VsZCB0aGVuIHVzZSByMy4uLnIxMCBpbiBtYWluIGxvb3AuCitDICAqIENvdWxkIHdlIHVzZSBzb21lIEVYIHRyaWNrLCBtb2RpZnlpbmcgbG1nL3N0bWcsIGZvciB0aGUgZmVlZC1pbiBjb2RlPworCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnBfcGFyYW0nLAlgJXIyJykKK2RlZmluZShgdXBfcGFyYW0nLAlgJXIzJykKK2RlZmluZShgbicsCQlgJXI0JykKKworZGVmaW5lKGBycCcsCWAlcjgnKQorZGVmaW5lKGB1cCcsCWAlcjknKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2NvcHlkKQorCXN0bWcJJXI2LCAlcjExLCA0OCglcjE1KQorCisJc2xsZwklcjEsIG4sIDMKKwlsYQklcjEwLCA4KG4pCisJYWdoaQklcjEsIC02NAorCXNybGcJJXIxMCwgJXIxMCwgMworCWxnaGkJJXIxMSwgLTY0CisKKwlsYQlycCwgMCglcjEscnBfcGFyYW0pCUMgRklYTUUgdXNlIGxheSBvbiB6OTkwIGFuZCBsYXRlcgorCWxhCXVwLCAwKCVyMSx1cF9wYXJhbSkJQyBGSVhNRSB1c2UgbGF5IG9uIHo5OTAgYW5kIGxhdGVyCisKKwlsZ2hpCSVyNywgNworCW5ncgklcjcsIG4JCQlDIG4gbW9kIDgKKwljZ2hpCSVyNywgMgorCWpoCUwoYjM0NTY3KQorCWNnaGkJJXI3LCAxCisJamUJTChiMSkKKwlqaAlMKGIyKQorCitMKGIwKToJYnJjdGcJJXIxMCwgTCh0b3ApCisJaglMKGVuZCkKKworTChiMSk6CWxnCSVyMCwgNTYodXApCisJYWdoaQl1cCwgLTgKKwlzdGcJJXIwLCA1NihycCkKKwlhZ2hpCXJwLCAtOAorCWJyY3RnCSVyMTAsIEwodG9wKQorCWoJTChlbmQpCisKK0woYjIpOglsbWcJJXIwLCAlcjEsIDQ4KHVwKQorCWFnaGkJdXAsIC0xNgorCXN0bWcJJXIwLCAlcjEsIDQ4KHJwKQorCWFnaGkJcnAsIC0xNgorCWJyY3RnCSVyMTAsIEwodG9wKQorCWoJTChlbmQpCisKK0woYjM0NTY3KToKKwljZ2hpCSVyNywgNAorCWpsCUwoYjMpCisJamUJTChiNCkKKwljZ2hpCSVyNywgNgorCWplCUwoYjYpCisJamgJTChiNykKKworTChiNSk6CWxtZwklcjAsICVyNCwgMjQodXApCisJYWdoaQl1cCwgLTQwCisJc3RtZwklcjAsICVyNCwgMjQocnApCisJYWdoaQlycCwgLTQwCisJYnJjdGcJJXIxMCwgTCh0b3ApCisJaglMKGVuZCkKKworTChiMyk6CWxtZwklcjAsICVyMiwgNDAodXApCisJYWdoaQl1cCwgLTI0CisJc3RtZwklcjAsICVyMiwgNDAocnApCisJYWdoaQlycCwgLTI0CisJYnJjdGcJJXIxMCwgTCh0b3ApCisJaglMKGVuZCkKKworTChiNCk6CWxtZwklcjAsICVyMywgMzIodXApCisJYWdoaQl1cCwgLTMyCisJc3RtZwklcjAsICVyMywgMzIocnApCisJYWdoaQlycCwgLTMyCisJYnJjdGcJJXIxMCwgTCh0b3ApCisJaglMKGVuZCkKKworTChiNik6CWxtZwklcjAsICVyNSwgMTYodXApCisJYWdoaQl1cCwgLTQ4CisJc3RtZwklcjAsICVyNSwgMTYocnApCisJYWdoaQlycCwgLTQ4CisJYnJjdGcJJXIxMCwgTCh0b3ApCisJaglMKGVuZCkKKworTChiNyk6CWxtZwklcjAsICVyNiwgOCh1cCkKKwlhZ2hpCXVwLCAtNTYKKwlzdG1nCSVyMCwgJXI2LCA4KHJwKQorCWFnaGkJcnAsIC01NgorCWJyY3RnCSVyMTAsIEwodG9wKQorCWoJTChlbmQpCisKK0wodG9wKToJbG1nCSVyMCwgJXI3LCAwKHVwKQorCWxhCXVwLCAwKCVyMTEsdXApCisJc3RtZwklcjAsICVyNywgMChycCkKKwlsYQlycCwgMCglcjExLHJwKQorCWJyY3RnCSVyMTAsIEwodG9wKQorCitMKGVuZCk6CWxtZwklcjYsICVyMTEsIDQ4KCVyMTUpCisJYnIJJXIxNAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzY0L2NvcHlpLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vczM5MF82NC9jb3B5aS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZiODg4MQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vczM5MF82NC9jb3B5aS5hc20KQEAgLTAsMCArMSw2OCBAQAorZG5sICBTLzM5MC02NCBtcG5fY29weWkKKworZG5sICBDb3B5cmlnaHQgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICAgICBjeWNsZXMvbGltYgorQyB6OTAwCQkgMS4yNQorQyB6OTkwICAgICAgICAgICAwLjc1CitDIHo5CQkgPworQyB6MTAJCSAxCitDIHoxOTYJCSA/CisKK0MgTk9URQorQyAgKiBUaGlzIGlzIGJhc2VkIG9uIEdOVSBsaWJjIG1lbWNweSB3aGljaCB3YXMgd3JpdHRlbiBieSBNYXJ0aW4gU2Nod2lkZWZza3kuCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsCWAlcjInKQorZGVmaW5lKGB1cCcsCWAlcjMnKQorZGVmaW5lKGBuJywJYCVyNCcpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fY29weWkpCisJbHRncgklcjQsICVyNAorCXNsbGcJJXI0LCAlcjQsIDMKKwlqZQlMKHJ0bikKKwlhZ2hpCSVyNCwgLTEKKwlzcmxnCSVyNSwgJXI0LCA4CisJbHRncgklcjUsICVyNQkJQyA8IDI1NiBieXRlcyB0byBjb3B5PworCWplCUwoMSkKKworTCh0b3ApOgltdmMJMCgyNTYsIHJwKSwgMCh1cCkKKwlsYQlycCwgMjU2KHJwKQorCWxhCXVwLCAyNTYodXApCisJYnJjdGcJJXI1LCBMKHRvcCkKKworTCgxKToJYnJhcwklcjUsIEwoMikJCUMgbWFrZSByNSBwb2ludCB0byBtdmMgaW5zbgorCW12YwkwKDEsIHJwKSwgMCh1cCkKK0woMik6CWV4CSVyNCwgMCglcjUpCQlDIGV4ZWN1dGUgbXZjIHdpdGggbGVuZ3RoICgobi0xKSBtb2QgMjU2KSsxCitMKHJ0bik6CWJyCSVyMTQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vczM5MF82NC9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfNjQvZ21wLW1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MmMzZDIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfNjQvZ21wLW1wYXJhbS5oCkBAIC0wLDAgKzEsMTgxIEBACisvKiBTLzM5MC02NCBnbXAtbXBhcmFtLmggLS0gQ29tcGlsZXIvbWFjaGluZSBwYXJhbWV0ZXIgaGVhZGVyIGZpbGUuCisKK0NvcHlyaWdodCAxOTkxLCAxOTkzLCAxOTk0LCAyMDAwLTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNkZWZpbmUgR01QX0xJTUJfQklUUyA2NAorI2RlZmluZSBHTVBfTElNQl9CWVRFUyA4CisKKy8qIDQ0MDAgTUh6IHoxOTYgKi8KKy8qIEdlbmVyYXRlZCBieSB0dW5ldXAuYywgMjAxNy0wMS0wMiwgZ2NjIDQuOSAqLworCisjZGVmaW5lIERJVlJFTV8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVlJFTV8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIE1PRF8xXzFQX01FVEhPRCAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIE1PRF8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIE1PRF8xTl9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgIDE0CisjZGVmaW5lIE1PRF8xVV9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgIDE1CisjZGVmaW5lIE1PRF8xXzFfVE9fTU9EXzFfMl9USFJFU0hPTEQgICAgICAgICAwICAvKiBuZXZlciBtcG5fbW9kXzFfMXAgKi8KKyNkZWZpbmUgTU9EXzFfMl9UT19NT0RfMV80X1RIUkVTSE9MRCAgICAgICAgMzEKKyNkZWZpbmUgUFJFSU5WX01PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgIDIKKyNkZWZpbmUgVVNFX1BSRUlOVl9ESVZSRU1fMSAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRElWX1FSXzFOX1BJMV9NRVRIT0QgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgRElWX1FSXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWX1FSXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWX1FSXzJfUEkyX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgRElWRVhBQ1RfMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworCisjZGVmaW5lIERJVl8xX1ZTX01VTF8xX1BFUkNFTlQgICAgICAgICAgICAgMzE3CisKKyNkZWZpbmUgTVVMX1RPT00yMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgTVVMX1RPT00zM19USFJFU0hPTEQgICAgICAgICAgICAgICAgNDUKKyNkZWZpbmUgTVVMX1RPT000NF9USFJFU0hPTEQgICAgICAgICAgICAgICAxMjEKKyNkZWZpbmUgTVVMX1RPT002SF9USFJFU0hPTEQgICAgICAgICAgICAgICAxNzcKKyNkZWZpbmUgTVVMX1RPT004SF9USFJFU0hPTEQgICAgICAgICAgICAgICAyNjAKKworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT000M19USFJFU0hPTEQgICAgICA4MQorI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT001M19USFJFU0hPTEQgICAgICA3OAorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT001M19USFJFU0hPTEQgICAgICA4MQorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT002M19USFJFU0hPTEQgICAgICA4OAorI2RlZmluZSBNVUxfVE9PTTQzX1RPX1RPT001NF9USFJFU0hPTEQgICAgIDExOAorCisjZGVmaW5lIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgODkKKyNkZWZpbmUgU1FSX1RPT000X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyNDIKKyNkZWZpbmUgU1FSX1RPT002X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzNjMKKyNkZWZpbmUgU1FSX1RPT004X1RIUkVTSE9MRCAgICAgICAgICAgICAgICA0ODIKKworI2RlZmluZSBNVUxNSURfVE9PTTQyX1RIUkVTSE9MRCAgICAgICAgICAgICAzOAorCisjZGVmaW5lIE1VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA5CisjZGVmaW5lIFNRUk1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA5CisKKyNkZWZpbmUgTVVMX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICAyMzYgIC8qIGsgPSA1ICovCisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICAyMzYsIDV9LCB7ICAgICAxMSwgNn0sIHsgICAgICA2LCA1fSwgeyAgICAgMTMsIDZ9LCBcCisgICAgeyAgICAgMTMsIDd9LCB7ICAgICAgNywgNn0sIHsgICAgIDE1LCA3fSwgeyAgICAgIDgsIDZ9LCBcCisgICAgeyAgICAgMTcsIDd9LCB7ICAgICAxNywgOH0sIHsgICAgICA5LCA3fSwgeyAgICAgMTksIDh9LCBcCisgICAgeyAgICAgMTMsIDl9LCB7ICAgICAgNywgOH0sIHsgICAgIDE5LCA5fSwgeyAgICAgMTEsIDh9LCBcCisgICAgeyAgICAgMjUsMTB9LCB7ICAgICAgNywgOX0sIHsgICAgIDE1LCA4fSwgeyAgICAgMzMsIDl9LCBcCisgICAgeyAgICAgMTksIDh9LCB7ICAgICAzOSwgOX0sIHsgICAgIDIzLDEwfSwgeyAgICAgMTUsIDl9LCBcCisgICAgeyAgICAgMzksMTB9LCB7ICAgICAyMywgOX0sIHsgICAgIDQ3LDExfSwgeyAgICAgMTUsMTB9LCBcCisgICAgeyAgICAgMzEsIDl9LCB7ICAgICA2NywxMH0sIHsgICAgIDM5LCA5fSwgeyAgICAgNzksMTB9LCBcCisgICAgeyAgICAgNDcsMTF9LCB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA5fSwgeyAgICAxMjcsIDh9LCBcCisgICAgeyAgICAyNTUsMTB9LCB7ICAgICA3MSwgOX0sIHsgICAgMTQzLCA4fSwgeyAgICAyODcsIDd9LCBcCisgICAgeyAgICA1NzUsIDl9LCB7ICAgIDE1OSwxMX0sIHsgICAgIDQ3LDEyfSwgeyAgICAgMzEsMTF9LCBcCisgICAgeyAgICAgNjMsMTB9LCB7ICAgIDEyNywgOX0sIHsgICAgMjU1LCA4fSwgeyAgICA1MTEsMTB9LCBcCisgICAgeyAgICAxNDMsIDl9LCB7ICAgIDI4NywxMX0sIHsgICAgIDc5LDEwfSwgeyAgICAxNTksIDl9LCBcCisgICAgeyAgICAzMTksIDh9LCB7ICAgIDYzOSwxMH0sIHsgICAgMTc1LCA5fSwgeyAgICAzNTEsIDh9LCBcCisgICAgeyAgICA3MDMsMTF9LCB7ICAgICA5NSwxMH0sIHsgICAgMTkxLCA5fSwgeyAgICAzODMsIDh9LCBcCisgICAgeyAgICA3NjcsMTB9LCB7ICAgIDIwNywgOX0sIHsgICAgNDE1LCA4fSwgeyAgICA4MzEsMTB9LCBcCisgICAgeyAgICAyMjMsMTJ9LCB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgeyAgICAyNTUsIDl9LCBcCisgICAgeyAgICA1MTEsMTF9LCB7ICAgIDE0MywxMH0sIHsgICAgMjg3LCA5fSwgeyAgICA1NzUsIDh9LCBcCisgICAgeyAgIDExNTEsMTF9LCB7ICAgIDE1OSwxMH0sIHsgICAgMzE5LCA5fSwgeyAgICA2MzksMTF9LCBcCisgICAgeyAgICAxNzUsMTB9LCB7ICAgIDM1MSwgOX0sIHsgICAgNzAzLCA4fSwgeyAgIDE0MDcsMTJ9LCBcCisgICAgeyAgICAgOTUsMTF9LCB7ICAgIDE5MSwxMH0sIHsgICAgMzgzLCA5fSwgeyAgICA3NjcsMTF9LCBcCisgICAgeyAgICAyMDcsMTB9LCB7ICAgIDQxNSwgOX0sIHsgICAgODMxLDExfSwgeyAgICAyMjMsMTN9LCBcCisgICAgeyAgIDgxOTIsMTR9LCB7ICAxNjM4NCwxNX0sIHsgIDMyNzY4LDE2fSwgeyAgNjU1MzYsMTd9LCBcCisgICAgeyAxMzEwNzIsMTh9LCB7IDI2MjE0NCwxOX0sIHsgNTI0Mjg4LDIwfSwgezEwNDg1NzYsMjF9LCBcCisgICAgezIwOTcxNTIsMjJ9LCB7NDE5NDMwNCwyM30sIHs4Mzg4NjA4LDI0fSB9CisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzX1NJWkUgOTkKKyNkZWZpbmUgTVVMX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDIyNDAKKworI2RlZmluZSBTUVJfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDIyMCAgLyogayA9IDUgKi8KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDIyMCwgNX0sIHsgICAgICA3LCA0fSwgeyAgICAgMTUsIDV9LCB7ICAgICAxMywgNn0sIFwKKyAgICB7ICAgICAgNywgNX0sIHsgICAgIDE1LCA2fSwgeyAgICAgIDgsIDV9LCB7ICAgICAxNywgNn0sIFwKKyAgICB7ICAgICAxMywgN30sIHsgICAgICA3LCA2fSwgeyAgICAgMTUsIDd9LCB7ICAgICAgOCwgNn0sIFwKKyAgICB7ICAgICAxNywgN30sIHsgICAgICA5LCA2fSwgeyAgICAgMTksIDd9LCB7ICAgICAxMywgOH0sIFwKKyAgICB7ICAgICAgNywgN30sIHsgICAgIDE3LCA4fSwgeyAgICAgIDksIDd9LCB7ICAgICAyMCwgOH0sIFwKKyAgICB7ICAgICAxMSwgN30sIHsgICAgIDIzLCA4fSwgeyAgICAgMTMsIDl9LCB7ICAgICAgNywgOH0sIFwKKyAgICB7ICAgICAxOSwgOX0sIHsgICAgIDExLCA4fSwgeyAgICAgMjMsIDl9LCB7ICAgICAxNSwgOH0sIFwKKyAgICB7ICAgICAzMSwgOX0sIHsgICAgIDE5LCA4fSwgeyAgICAgMzksIDl9LCB7ICAgICAyMywxMH0sIFwKKyAgICB7ICAgICAxNSwgOX0sIHsgICAgIDM5LDEwfSwgeyAgICAgMjMsMTF9LCB7ICAgICAxNSwxMH0sIFwKKyAgICB7ICAgICAzMSwgOX0sIHsgICAgIDYzLDEwfSwgeyAgICAgNDcsMTF9LCB7ICAgICAzMSwxMH0sIFwKKyAgICB7ICAgICA2MywgOX0sIHsgICAgMTI3LCA4fSwgeyAgICAyNTUsMTB9LCB7ICAgICA3MSwgOX0sIFwKKyAgICB7ICAgIDE0MywgOH0sIHsgICAgMjg3LDExfSwgeyAgICAgNDcsMTJ9LCB7ICAgICAzMSwxMX0sIFwKKyAgICB7ICAgICA2MywxMH0sIHsgICAgMTI3LCA5fSwgeyAgICAyNTUsIDh9LCB7ICAgIDUxMSwxMH0sIFwKKyAgICB7ICAgIDE0MywgOX0sIHsgICAgMjg3LCA4fSwgeyAgICA1NzUsIDd9LCB7ICAgMTE1MSwxMH0sIFwKKyAgICB7ICAgIDE1OSwgOX0sIHsgICAgMzE5LCA4fSwgeyAgICA2MzksMTB9LCB7ICAgIDE3NSwgOX0sIFwKKyAgICB7ICAgIDM1MSwgOH0sIHsgICAgNzAzLDExfSwgeyAgICAgOTUsMTB9LCB7ICAgIDE5MSwgOX0sIFwKKyAgICB7ICAgIDM4MywxMn0sIHsgICAgIDYzLDExfSwgeyAgICAxMjcsMTB9LCB7ICAgIDI1NSwgOX0sIFwKKyAgICB7ICAgIDUxMSwxMX0sIHsgICAgMTQzLDEwfSwgeyAgICAyODcsIDl9LCB7ICAgIDU3NSwgOH0sIFwKKyAgICB7ICAgMTE1MSwxMX0sIHsgICAgMTU5LDEwfSwgeyAgICAzMTksIDl9LCB7ICAgIDYzOSwxMX0sIFwKKyAgICB7ICAgIDE3NSwxMH0sIHsgICAgMzUxLCA5fSwgeyAgICA3MDMsMTJ9LCB7ICAgICA5NSwxMX0sIFwKKyAgICB7ICAgIDE5MSwxMH0sIHsgICAgMzgzLDExfSwgeyAgICAyMDcsMTN9LCB7ICAgODE5MiwxNH0sIFwKKyAgICB7ICAxNjM4NCwxNX0sIHsgIDMyNzY4LDE2fSwgeyAgNjU1MzYsMTd9LCB7IDEzMTA3MiwxOH0sIFwKKyAgICB7IDI2MjE0NCwxOX0sIHsgNTI0Mjg4LDIwfSwgezEwNDg1NzYsMjF9LCB7MjA5NzE1MiwyMn0sIFwKKyAgICB7NDE5NDMwNCwyM30sIHs4Mzg4NjA4LDI0fSB9CisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzX1NJWkUgOTQKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDE3MjgKKworI2RlZmluZSBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDM4CisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgICA0MzkyCisjZGVmaW5lIFNRUkxPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgU1FSTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgNTQKKyNkZWZpbmUgU1FSTE9fU1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDMxNzYKKworI2RlZmluZSBEQ19ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA0MgorI2RlZmluZSBEQ19ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgIDE0OAorI2RlZmluZSBEQ19CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA0NgorI2RlZmluZSBEQ19CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDEwNworCisjZGVmaW5lIElOVl9NVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgIDM0CisjZGVmaW5lIElOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAgMTYzCisjZGVmaW5lIElOVl9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTMxCisKKyNkZWZpbmUgQklOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAxODMKKyNkZWZpbmUgUkVEQ18xX1RPX1JFRENfTl9USFJFU0hPTEQgICAgICAgICAgNDMKKworI2RlZmluZSBNVV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDgwNworI2RlZmluZSBNVV9ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgIDk0MgorI2RlZmluZSBNVVBJX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICA3OAorI2RlZmluZSBNVV9CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDY4MAorI2RlZmluZSBNVV9CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDgyOAorCisjZGVmaW5lIFBPV01fU0VDX1RBQkxFICAzLDM1LDI4NSwxNjAzCisKKyNkZWZpbmUgR0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICAgMjEKKyNkZWZpbmUgU0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgIDEzOTEKKyNkZWZpbmUgU0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgIDI4NzIKKworI2RlZmluZSBGQUNfRFNDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDE1MQorI2RlZmluZSBGQUNfT0REX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAyMworCisjZGVmaW5lIE1BVFJJWDIyX1NUUkFTU0VOX1RIUkVTSE9MRCAgICAgICAgIDE1CisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAgMTM1CisjZGVmaW5lIEhHQ0RfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTY5CisjZGVmaW5lIEhHQ0RfUkVEVUNFX1RIUkVTSE9MRCAgICAgICAgICAgICAxNDM3CisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgNDY5CisjZGVmaW5lIEdDREVYVF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMzQyCisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAgICA0CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfNjQvaW52ZXJ0X2xpbWIuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzY0L2ludmVydF9saW1iLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGNlYmRkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzY0L2ludmVydF9saW1iLmFzbQpAQCAtMCwwICsxLDk0IEBACitkbmwgIFMvMzkwLTY0IG1wbl9pbnZlcnRfbGltYgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3Jiam9ybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAxMSwgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgejkwMAkgICAgICAgMTQyCitDIHo5OTAgICAgICAgICAgODYKK0MgejkJCSA/CitDIHoxMAkgICAgICAgMTIwCitDIHoxOTYJCSA/CisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX2ludmVydF9saW1iKQorCXN0ZwklcjksIDcyKCVyMTUpCisJc3JsZwklcjksICVyMiwgNTUKKwlhZ3IJJXI5LCAlcjkKKwlsYXJsCSVyNCwgYXBwcm94X3RhYi01MTIKKwlzcmxnCSVyMywgJXIyLCAyNAorCWFnaGkJJXIzLCAxCisJbGdoaQklcjUsIDEKKwlsbGdoCSVyNCwgMCglcjksICVyNCkKKwlzbGxnCSVyOSwgJXI0LCAxMQorCW1zZ3IJJXI0LCAlcjQKKwltc2dyCSVyNCwgJXIzCisJc3JsZwklcjQsICVyNCwgNDAKKwlhZ2hpCSVyOSwgLTEKKwlzZ3IJJXI5LCAlcjQKKwlzbGxnCSVyMCwgJXI5LCA2MAorCXNsbGcJJXIxLCAlcjksIDEzCisJbXNncgklcjksICVyOQorCW1zZ3IJJXI5LCAlcjMKKwlzZ3IJJXIwLCAlcjkKKwluZ3IJJXI1LCAlcjIKKwlzcmxnCSVyNCwgJXIyLCAxCisJc3JsZwklcjMsICVyMCwgNDcKKwlhZ3IJJXIzLCAlcjEKKwlhZ3IJJXI0LCAlcjUKKwltc2dyCSVyNCwgJXIzCisJc3JsZwklcjEsICVyMywgMQorCWxjZ3IJJXI1LCAlcjUKKwluZ3IJJXIxLCAlcjUKKwlzZ3IJJXIxLCAlcjQKKwltbGdyCSVyMCwgJXIzCisJc3JsZwklcjksICVyMCwgMQorCXNsbGcJJXI0LCAlcjMsIDMxCisJYWdyCSVyNCwgJXI5CisJbGdyCSVyMSwgJXI0CisJbWxncgklcjAsICVyMgorCWFsZ3IJJXIxLCAlcjIKKwlhbGNncgklcjAsICVyMgorCWxncgklcjIsICVyNAorCXNncgklcjIsICVyMAorCWxnCSVyOSwgNzIoJXIxNSkKKwlicgklcjE0CitFUElMT0dVRSgpCisJUk9EQVRBCisJQUxJR04oMikKK2FwcHJveF90YWI6Citmb3Jsb29wKGksMjU2LDUxMi0xLGRubAorYAkud29yZAlldmFsKDB4N2ZkMDAvaSkKKycpZG5sCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vczM5MF82NC9sb2dvcHNfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfNjQvbG9nb3BzX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNGNmYjYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfNjQvbG9nb3BzX24uYXNtCkBAIC0wLDAgKzEsMjkxIEBACitkbmwgIFMvMzkwLTY0IGxvZ29wcy4KKworZG5sICBDb3B5cmlnaHQgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDIGN5Y2xlcy9saW1iICAgICB2YXJpYW50IDEgICAgICAgICAgIHZhcmlhbnQgMiAgICAgICB2YXJpYW50IDMKK0MJICAgICAgICBycCE9dXAgIHJwPXVwCitDIHo5MDAJCSA0LjUJIDIuMjUJCSA1LjUJCSA1LjUKK0Mgejk5MAkJIDIuNzUJIDIJCSAzLjI1CQkgMy4yNQorQyB6OQkJID8JCQkgPwkJID8KK0MgejEwCQkgMy4yNQkJCSAzLjc1CQkgMy43NQorQyB6MTk2CQkgPwkJCSA/CQkgPworCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLAlgJXIyJykKK2RlZmluZShgdXAnLAlgJXIzJykKK2RlZmluZShgdnAnLAlgJXI0JykKK2RlZmluZShgbicsCWAlcjUnKQorCitpZmRlZihgT1BFUkFUSU9OX2FuZF9uJyxgCisgIGRlZmluZShgZnVuYycsYG1wbl9hbmRfbicpCisgIGRlZmluZShgVkFSSUFOVF8xJykKKyAgZGVmaW5lKGBMT0dPUEMnLGBuYycpCisgIGRlZmluZShgTE9HT1AnLGBuZycpJykKK2lmZGVmKGBPUEVSQVRJT05fYW5kbl9uJyxgCisgIGRlZmluZShgZnVuYycsYG1wbl9hbmRuX24nKQorICBkZWZpbmUoYFZBUklBTlRfMicpCisgIGRlZmluZShgTE9HT1AnLGBuZycpJykKK2lmZGVmKGBPUEVSQVRJT05fbmFuZF9uJyxgCisgIGRlZmluZShgZnVuYycsYG1wbl9uYW5kX24nKQorICBkZWZpbmUoYFZBUklBTlRfMycpCisgIGRlZmluZShgTE9HT1AnLGBuZycpJykKK2lmZGVmKGBPUEVSQVRJT05faW9yX24nLGAKKyAgZGVmaW5lKGBmdW5jJyxgbXBuX2lvcl9uJykKKyAgZGVmaW5lKGBWQVJJQU5UXzEnKQorICBkZWZpbmUoYExPR09QQycsYG9jJykKKyAgZGVmaW5lKGBMT0dPUCcsYG9nJyknKQoraWZkZWYoYE9QRVJBVElPTl9pb3JuX24nLGAKKyAgZGVmaW5lKGBmdW5jJyxgbXBuX2lvcm5fbicpCisgIGRlZmluZShgVkFSSUFOVF8yJykKKyAgZGVmaW5lKGBMT0dPUCcsYG9nJyknKQoraWZkZWYoYE9QRVJBVElPTl9uaW9yX24nLGAKKyAgZGVmaW5lKGBmdW5jJyxgbXBuX25pb3JfbicpCisgIGRlZmluZShgVkFSSUFOVF8zJykKKyAgZGVmaW5lKGBMT0dPUCcsYG9nJyknKQoraWZkZWYoYE9QRVJBVElPTl94b3JfbicsYAorICBkZWZpbmUoYGZ1bmMnLGBtcG5feG9yX24nKQorICBkZWZpbmUoYFZBUklBTlRfMScpCisgIGRlZmluZShgTE9HT1BDJyxgeGMnKQorICBkZWZpbmUoYExPR09QJyxgeGcnKScpCitpZmRlZihgT1BFUkFUSU9OX3hub3JfbicsYAorICBkZWZpbmUoYGZ1bmMnLGBtcG5feG5vcl9uJykKKyAgZGVmaW5lKGBWQVJJQU5UXzInKQorICBkZWZpbmUoYExPR09QJyxgeGcnKScpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FuZF9uIG1wbl9hbmRuX24gbXBuX25hbmRfbiBtcG5faW9yX24gbXBuX2lvcm5fbiBtcG5fbmlvcl9uIG1wbl94b3JfbiBtcG5feG5vcl9uKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUoZnVuYykKK2lmZGVmKGBWQVJJQU5UXzEnLGAKKwljZ3IJcnAsIHVwCisJam5lCUwobm9ybWFsKQorCisJc2xsZwluLCBuLCAzCisJYWdoaQluLCAtMQorCXNybGcJJXIxLCBuLCA4CisJbHRncgklcjEsICVyMQkJQyA8IDI1NiBieXRlcyB0byBjb3B5PworCWplCUwoMSkKKworTCh0cCk6CUxPR09QQwkwKDI1NiwgcnApLCAwKHZwKQorCWxhCXJwLCAyNTYocnApCisJbGEJdnAsIDI1Nih2cCkKKwlicmN0ZwklcjEsIEwodHApCisKK0woMSk6CWJyYXMJJXIxLCBMKDIpCQlDIG1ha2UgcjEgcG9pbnQgdG8gbXZjIGluc24KKwlMT0dPUEMJMCgxLCBycCksIDAodnApCitMKDIpOglleAluLCAwKCVyMSkJCUMgZXhlY3V0ZSBtdmMgd2l0aCBsZW5ndGggKChuLTEpIG1vZCAyNTYpKzEKK0wocnRuKToJYnIJJXIxNAorCisKK0wobm9ybWFsKToKKwlzdG1nCSVyNiwgJXI4LCA0OCglcjE1KQorCWFnaGkJbiwgMworCWxnaGkJJXI3LCAzCisJc3JsZwklcjAsIG4sIDIKKwluZ3IJJXI3LCBuCQkJQyBuIG1vZCA0CisJamUJTChiMSkKKwljZ2hpCSVyNywgMgorCWpsCUwoYjIpCisJam5lCUwodG9wKQorCitMKGIzKToJbG1nCSVyNSwgJXI3LCAwKHVwKQorCWxhCXVwLCAyNCh1cCkKKwlMT0dPUAklcjUsIDAodnApCisJTE9HT1AJJXI2LCA4KHZwKQorCUxPR09QCSVyNywgMTYodnApCisJc3RtZwklcjUsICVyNywgMChycCkKKwlsYQlycCwgMjQocnApCisJbGEJdnAsIDI0KHZwKQorCWoJTChtaWQpCisKK0woYjEpOglsZwklcjUsIDAodXApCisJbGEJdXAsIDgodXApCisJTE9HT1AJJXI1LCAwKHZwKQorCXN0ZwklcjUsIDAocnApCisJbGEJcnAsIDgocnApCisJbGEJdnAsIDgodnApCisJaglMKG1pZCkKKworTChiMik6CWxtZwklcjUsICVyNiwgMCh1cCkKKwlsYQl1cCwgMTYodXApCisJTE9HT1AJJXI1LCAwKHZwKQorCUxPR09QCSVyNiwgOCh2cCkKKwlzdG1nCSVyNSwgJXI2LCAwKHJwKQorCWxhCXJwLCAxNihycCkKKwlsYQl2cCwgMTYodnApCisJaglMKG1pZCkKKworTCh0b3ApOglsbWcJJXI1LCAlcjgsIDAodXApCisJbGEJdXAsIDMyKHVwKQorCUxPR09QCSVyNSwgMCh2cCkKKwlMT0dPUAklcjYsIDgodnApCisJTE9HT1AJJXI3LCAxNih2cCkKKwlMT0dPUAklcjgsIDI0KHZwKQorCXN0bWcJJXI1LCAlcjgsIDAocnApCisJbGEJcnAsIDMyKHJwKQorCWxhCXZwLCAzMih2cCkKK0wobWlkKToJYnJjdGcJJXIwLCBMKHRvcCkKKworCWxtZwklcjYsICVyOCwgNDgoJXIxNSkKKwlicgklcjE0CisnKQorCitpZmRlZihgVkFSSUFOVF8yJyxgCisJc3RtZwklcjYsICVyOCwgNDgoJXIxNSkKKwlsZ2hpCSVyMSwgLTEKKworCWFnaGkJbiwgMworCWxnaGkJJXI3LCAzCisJc3JsZwklcjAsIG4sIDIKKwluZ3IJJXI3LCBuCQkJQyBuIG1vZCA0CisJamUJTChiMSkKKwljZ2hpCSVyNywgMgorCWpsCUwoYjIpCisJam5lCUwodG9wKQorCitMKGIzKToJbG1nCSVyNSwgJXI3LCAwKHZwKQorCWxhCXZwLCAyNCh2cCkKKwl4Z3IJJXI1LCAlcjEKKwl4Z3IJJXI2LCAlcjEKKwl4Z3IJJXI3LCAlcjEKKwlMT0dPUAklcjUsIDAodXApCisJTE9HT1AJJXI2LCA4KHVwKQorCUxPR09QCSVyNywgMTYodXApCisJc3RtZwklcjUsICVyNywgMChycCkKKwlsYQlycCwgMjQocnApCisJbGEJdXAsIDI0KHVwKQorCWoJTChtaWQpCisKK0woYjEpOglsZwklcjUsIDAodnApCisJbGEJdnAsIDgodnApCisJeGdyCSVyNSwgJXIxCisJTE9HT1AJJXI1LCAwKHVwKQorCXN0ZwklcjUsIDAocnApCisJbGEJcnAsIDgocnApCisJbGEJdXAsIDgodXApCisJaglMKG1pZCkKKworTChiMik6CWxtZwklcjUsICVyNiwgMCh2cCkKKwlsYQl2cCwgMTYodnApCisJeGdyCSVyNSwgJXIxCisJeGdyCSVyNiwgJXIxCisJTE9HT1AJJXI1LCAwKHVwKQorCUxPR09QCSVyNiwgOCh1cCkKKwlzdG1nCSVyNSwgJXI2LCAwKHJwKQorCWxhCXJwLCAxNihycCkKKwlsYQl1cCwgMTYodXApCisJaglMKG1pZCkKKworTCh0b3ApOglsbWcJJXI1LCAlcjgsIDAodnApCisJbGEJdnAsIDMyKHZwKQorCXhncgklcjUsICVyMQorCXhncgklcjYsICVyMQorCXhncgklcjcsICVyMQorCXhncgklcjgsICVyMQorCUxPR09QCSVyNSwgMCh1cCkKKwlMT0dPUAklcjYsIDgodXApCisJTE9HT1AJJXI3LCAxNih1cCkKKwlMT0dPUAklcjgsIDI0KHVwKQorCWxhCXVwLCAzMih1cCkKKwlzdG1nCSVyNSwgJXI4LCAwKHJwKQorCWxhCXJwLCAzMihycCkKK0wobWlkKToJYnJjdGcJJXIwLCBMKHRvcCkKKworCWxtZwklcjYsICVyOCwgNDgoJXIxNSkKKwlicgklcjE0CisnKQorCitpZmRlZihgVkFSSUFOVF8zJyxgCisJc3RtZwklcjYsICVyOCwgNDgoJXIxNSkKKwlsZ2hpCSVyMSwgLTEKKworCWFnaGkJbiwgMworCWxnaGkJJXI3LCAzCisJc3JsZwklcjAsIG4sIDIKKwluZ3IJJXI3LCBuCQkJQyBuIG1vZCA0CisJamUJTChiMSkKKwljZ2hpCSVyNywgMgorCWpsCUwoYjIpCisJam5lCUwodG9wKQorCitMKGIzKToJbG1nCSVyNSwgJXI3LCAwKHZwKQorCWxhCXZwLCAyNCh2cCkKKwlMT0dPUAklcjUsIDAodXApCisJTE9HT1AJJXI2LCA4KHVwKQorCXhncgklcjUsICVyMQorCXhncgklcjYsICVyMQorCUxPR09QCSVyNywgMTYodXApCisJeGdyCSVyNywgJXIxCisJc3RtZwklcjUsICVyNywgMChycCkKKwlsYQlycCwgMjQocnApCisJbGEJdXAsIDI0KHVwKQorCWoJTChtaWQpCisKK0woYjEpOglsZwklcjUsIDAodnApCisJbGEJdnAsIDgodnApCisJTE9HT1AJJXI1LCAwKHVwKQorCXhncgklcjUsICVyMQorCXN0ZwklcjUsIDAocnApCisJbGEJcnAsIDgocnApCisJbGEJdXAsIDgodXApCisJaglMKG1pZCkKKworTChiMik6CWxtZwklcjUsICVyNiwgMCh2cCkKKwlsYQl2cCwgMTYodnApCisJTE9HT1AJJXI1LCAwKHVwKQorCUxPR09QCSVyNiwgOCh1cCkKKwl4Z3IJJXI1LCAlcjEKKwl4Z3IJJXI2LCAlcjEKKwlzdG1nCSVyNSwgJXI2LCAwKHJwKQorCWxhCXJwLCAxNihycCkKKwlsYQl1cCwgMTYodXApCisJaglMKG1pZCkKKworTCh0b3ApOglsbWcJJXI1LCAlcjgsIDAodnApCisJbGEJdnAsIDMyKHZwKQorCUxPR09QCSVyNSwgMCh1cCkKKwlMT0dPUAklcjYsIDgodXApCisJeGdyCSVyNSwgJXIxCisJeGdyCSVyNiwgJXIxCisJTE9HT1AJJXI3LCAxNih1cCkKKwlMT0dPUAklcjgsIDI0KHVwKQorCXhncgklcjcsICVyMQorCXhncgklcjgsICVyMQorCXN0bWcJJXI1LCAlcjgsIDAocnApCisJbGEJdXAsIDMyKHVwKQorCWxhCXJwLCAzMihycCkKK0wobWlkKToJYnJjdGcJJXIwLCBMKHRvcCkKKworCWxtZwklcjYsICVyOCwgNDgoJXIxNSkKKwlicgklcjE0CisnKQorCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfNjQvbHNoaWZ0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vczM5MF82NC9sc2hpZnQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkYWUwMzUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfNjQvbHNoaWZ0LmFzbQpAQCAtMCwwICsxLDE5NiBAQAorZG5sICBTLzM5MC02NCBtcG5fbHNoaWZ0LgorCitkbmwgIENvcHlyaWdodCAyMDExLCAyMDEyLCAyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICAgICBjeWNsZXMvbGltYgorQyB6OTAwCQkgNworQyB6OTkwICAgICAgICAgICAzCitDIHo5CQkgPworQyB6MTAJCSA2CitDIHoxOTYJCSA/CisKK0MgTk9URVMKK0MgICogVGhpcyB1c2VzIGRpc2NyZXRlIGxvYWRzIGFuZCBzdG9yZXMgaW4gYSBzb2Z0d2FyZSBwaXBlbGluZS4gIFVzaW5nIGxtZyBhbmQKK0MgICAgc3RtZyBpcyBub3QgZmFzdGVyLgorQyAgKiBPbmUgY291bGQgYXNzdW1lIG1vcmUgcGlwZWxpbmluZyBjb3VsZCBhcHByb2FjaCAyLjUgYy9sLCBidXQgd2UgaGF2ZSBub3QKK0MgICAgZm91bmQgYW55IDgtd2F5IGxvb3AgdGhhdCBydW5zIGJldHRlciB0aGFuIHRoZSBjdXJyZW50IDQtd2F5IGxvb3AuCitDICAqIENvbnNpZGVyIHVzaW5nIHRoZSBzYW1lIGZlZWQtaW4gY29kZSBmb3IgMSA8PSBuIDw9IDMgYXMgZm9yIG4gbW9kIDQsCitDICAgIHNpbWlsYXJseSB0byB0aGUgeDg2XzY0IHNxcl9iYXNlY2FzZSBmZWVkLWluLgorCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLAlgJXIyJykKK2RlZmluZShgdXAnLAlgJXIzJykKK2RlZmluZShgbicsCWAlcjQnKQorZGVmaW5lKGBjbnQnLAlgJXI1JykKKworZGVmaW5lKGB0bmMnLAlgJXI2JykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9sc2hpZnQpCisJY2doaQluLCAzCisJamgJTChndDEpCisKKwlzdG1nCSVyNiwgJXI3LCA0OCglcjE1KQorCWxhcmwJJXIxLCBMKHRhYiktNAorCWxjZ3IJdG5jLCBjbnQKKwlzbGxnCW4sIG4sIDIKKwliCTAobiwlcjEpCitMKHRhYik6CWoJTChuMSkKKwlqCUwobjIpCisJaglMKG4zKQorCitMKG4xKToJbGcJJXIxLCAwKHVwKQorCXNsbGcJJXIwLCAlcjEsIDAoY250KQorCXN0ZwklcjAsIDAocnApCisJc3JsZwklcjIsICVyMSwgMCh0bmMpCisJbGcJJXI2LCA0OCglcjE1KQkJQyByZXN0b3Jpbmcgcjcgbm90IG5lZWRlZAorCWJyCSVyMTQKKworTChuMik6CWxnCSVyMSwgOCh1cCkKKwlzcmxnCSVyNCwgJXIxLCAwKHRuYykKKwlzbGxnCSVyMCwgJXIxLCAwKGNudCkKKwlqCUwoY2opCisKK0wobjMpOglsZwklcjEsIDE2KHVwKQorCXNybGcJJXI0LCAlcjEsIDAodG5jKQorCXNsbGcJJXIwLCAlcjEsIDAoY250KQorCWxnCSVyMSwgOCh1cCkKKwlzcmxnCSVyNywgJXIxLCAwKHRuYykKKwlvZ3IJJXI3LCAlcjAKKwlzbGxnCSVyMCwgJXIxLCAwKGNudCkKKwlzdGcJJXI3LCAxNihycCkKK0woY2opOglsZwklcjEsIDAodXApCisJc3JsZwklcjcsICVyMSwgMCh0bmMpCisJb2dyCSVyNywgJXIwCisJc2xsZwklcjAsICVyMSwgMChjbnQpCisJc3RnCSVyNywgOChycCkKKwlzdGcJJXIwLCAwKHJwKQorCWxncgklcjIsICVyNAorCWxtZwklcjYsICVyNywgNDgoJXIxNSkKKwlicgklcjE0CisKK0woZ3QxKToJc3RtZwklcjYsICVyMTMsIDQ4KCVyMTUpCisJbGNncgl0bmMsIGNudAkJQyB0bmMgPSAtY250CisKKwlzbGxnCSVyMSwgbiwgMworCXNybGcJJXIwLCBuLCAyCQlDIGxvb3AgY291bnQKKworCWFncgl1cCwgJXIxCQkJQyBwb2ludCB1cCBhdCBlbmQgb2YgVQorCWFncglycCwgJXIxCQkJQyBwb2ludCBycCBhdCBlbmQgb2YgUgorCWFnaGkJdXAsIC01NgorCWFnaGkJcnAsIC00MAorCisJbGdoaQklcjcsIDMKKwluZ3IJJXI3LCBuCisJamUJTChiMCkKKwljZ2hpCSVyNywgMgorCWpsCUwoYjEpCisJamUJTChiMikKKworTChiMyk6CWxnCSVyNywgNDgodXApCisJc3JsZwklcjksICVyNywgMCh0bmMpCisJc2xsZwklcjExLCAlcjcsIDAoY250KQorCWxnCSVyOCwgNDAodXApCisJbGcJJXI3LCAzMih1cCkKKwlzcmxnCSVyNCwgJXI4LCAwKHRuYykKKwlzbGxnCSVyMTMsICVyOCwgMChjbnQpCisJb2dyCSVyMTEsICVyNAorCWxhCXJwLCAxNihycCkKKwlqCUwobG0zKQorCitMKGIyKToJbGcJJXI4LCA0OCh1cCkKKwlsZwklcjcsIDQwKHVwKQorCXNybGcJJXI5LCAlcjgsIDAodG5jKQorCXNsbGcJJXIxMywgJXI4LCAwKGNudCkKKwlsYQlycCwgMjQocnApCisJbGEJdXAsIDgodXApCisJaglMKGxtMikKKworTChiMSk6CWxnCSVyNywgNDgodXApCisJc3JsZwklcjksICVyNywgMCh0bmMpCisJc2xsZwklcjExLCAlcjcsIDAoY250KQorCWxnCSVyOCwgNDAodXApCisJbGcJJXI3LCAzMih1cCkKKwlzcmxnCSVyNCwgJXI4LCAwKHRuYykKKwlzbGxnCSVyMTAsICVyOCwgMChjbnQpCisJb2dyCSVyMTEsICVyNAorCWxhCXJwLCAzMihycCkKKwlsYQl1cCwgMTYodXApCisJaglMKGxtMSkKKworTChiMCk6CWxnCSVyOCwgNDgodXApCisJbGcJJXI3LCA0MCh1cCkKKwlzcmxnCSVyOSwgJXI4LCAwKHRuYykKKwlzbGxnCSVyMTAsICVyOCwgMChjbnQpCisJbGEJcnAsIDQwKHJwKQorCWxhCXVwLCAyNCh1cCkKKwlqCUwobG0wKQorCisJQUxJR04oOCkKK0wodG9wKToJc3JsZwklcjQsICVyOCwgMCh0bmMpCisJc2xsZwklcjEzLCAlcjgsIDAoY250KQorCW9ncgklcjExLCAlcjQKKwlzdGcJJXIxMCwgMjQocnApCitMKGxtMyk6CXN0ZwklcjExLCAxNihycCkKK0wobG0yKToJc3JsZwklcjEyLCAlcjcsIDAodG5jKQorCXNsbGcJJXIxMSwgJXI3LCAwKGNudCkKKwlsZwklcjgsIDI0KHVwKQorCWxnCSVyNywgMTYodXApCisJb2dyCSVyMTMsICVyMTIKKwlzcmxnCSVyNCwgJXI4LCAwKHRuYykKKwlzbGxnCSVyMTAsICVyOCwgMChjbnQpCisJb2dyCSVyMTEsICVyNAorCXN0ZwklcjEzLCA4KHJwKQorTChsbTEpOglzdGcJJXIxMSwgMChycCkKK0wobG0wKToJc3JsZwklcjEyLCAlcjcsIDAodG5jKQorCWFnaGkJcnAsIC0zMgorCXNsbGcJJXIxMSwgJXI3LCAwKGNudCkKKwlsZwklcjgsIDgodXApCisJbGcJJXI3LCAwKHVwKQorCWFnaGkJdXAsIC0zMgorCW9ncgklcjEwLCAlcjEyCisJYnJjdGcJJXIwLCBMKHRvcCkKKworTChlbmQpOglzcmxnCSVyNCwgJXI4LCAwKHRuYykKKwlzbGxnCSVyMTMsICVyOCwgMChjbnQpCisJb2dyCSVyMTEsICVyNAorCXN0ZwklcjEwLCAyNChycCkKKwlzdGcJJXIxMSwgMTYocnApCisJc3JsZwklcjEyLCAlcjcsIDAodG5jKQorCXNsbGcJJXIxMSwgJXI3LCAwKGNudCkKKwlvZ3IJJXIxMywgJXIxMgorCXN0ZwklcjEzLCA4KHJwKQorCXN0ZwklcjExLCAwKHJwKQorCWxncgklcjIsICVyOQorCisJbG1nCSVyNiwgJXIxMywgNDgoJXIxNSkKKwlicgklcjE0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfNjQvbHNoaWZ0Yy5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfNjQvbHNoaWZ0Yy5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI1NTJkNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vczM5MF82NC9sc2hpZnRjLmFzbQpAQCAtMCwwICsxLDIwNyBAQAorZG5sICBTLzM5MC02NCBtcG5fbHNoaWZ0Yy4KKworZG5sICBDb3B5cmlnaHQgMjAxMSwgMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgejkwMAkJIDkKK0Mgejk5MCAgICAgICAgICAgMy41CitDIHo5CQkgPworQyB6MTAJCSA3CitDIHoxOTYJCSA/CisKK0MgTk9URVMKK0MgICogU2VlIG5vdGVzIGluIGxzaGlmdC5hc20uCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsCWAlcjInKQorZGVmaW5lKGB1cCcsCWAlcjMnKQorZGVmaW5lKGBuJywJYCVyNCcpCitkZWZpbmUoYGNudCcsCWAlcjUnKQorCitkZWZpbmUoYHRuYycsCWAlcjYnKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2xzaGlmdGMpCisJY2doaQluLCAzCisJamgJTChndDEpCisKKwlzdG1nCSVyNiwgJXI4LCA0OCglcjE1KQorCWxhcmwJJXIxLCBMKHRhYiktNAorCWxjZ3IJdG5jLCBjbnQKKwlzbGxnCW4sIG4sIDIKKwlsZ2hpCSVyOCwgLTEKKwliCTAobiwlcjEpCitMKHRhYik6CWoJTChuMSkKKwlqCUwobjIpCisJaglMKG4zKQorCitMKG4xKToJbGcJJXIxLCAwKHVwKQorCXNsbGcJJXIwLCAlcjEsIDAoY250KQorCXhncgklcjAsICVyOAorCXN0ZwklcjAsIDAocnApCisJc3JsZwklcjIsICVyMSwgMCh0bmMpCisJbG1nCSVyNiwgJXI4LCA0OCglcjE1KQorCWJyCSVyMTQKKworTChuMik6CWxnCSVyMSwgOCh1cCkKKwlzcmxnCSVyNCwgJXIxLCAwKHRuYykKKwlzbGxnCSVyMCwgJXIxLCAwKGNudCkKKwlqCUwoY2opCisKK0wobjMpOglsZwklcjEsIDE2KHVwKQorCXNybGcJJXI0LCAlcjEsIDAodG5jKQorCXNsbGcJJXIwLCAlcjEsIDAoY250KQorCWxnCSVyMSwgOCh1cCkKKwlzcmxnCSVyNywgJXIxLCAwKHRuYykKKwlvZ3IJJXI3LCAlcjAKKwlzbGxnCSVyMCwgJXIxLCAwKGNudCkKKwl4Z3IJJXI3LCAlcjgKKwlzdGcJJXI3LCAxNihycCkKK0woY2opOglsZwklcjEsIDAodXApCisJc3JsZwklcjcsICVyMSwgMCh0bmMpCisJb2dyCSVyNywgJXIwCisJc2xsZwklcjAsICVyMSwgMChjbnQpCisJeGdyCSVyNywgJXI4CisJeGdyCSVyMCwgJXI4CisJc3RnCSVyNywgOChycCkKKwlzdGcJJXIwLCAwKHJwKQorCWxncgklcjIsICVyNAorCWxtZwklcjYsICVyOCwgNDgoJXIxNSkKKwlicgklcjE0CisKK0woZ3QxKToJc3RtZwklcjYsICVyMTQsIDQ4KCVyMTUpCisJbGNncgl0bmMsIGNudAkJQyB0bmMgPSAtY250CisKKwlzbGxnCSVyMSwgbiwgMworCXNybGcJJXIwLCBuLCAyCQlDIGxvb3AgY291bnQKKworCWFncgl1cCwgJXIxCQkJQyBwb2ludCB1cCBhdCBlbmQgb2YgVQorCWFncglycCwgJXIxCQkJQyBwb2ludCBycCBhdCBlbmQgb2YgUgorCWFnaGkJdXAsIC01NgorCWFnaGkJcnAsIC00MAorCisJbGdoaQklcjcsIDMKKwlsZ2hpCSVyMTQsIC0xCisJbmdyCSVyNywgbgorCWplCUwoYjApCisJY2doaQklcjcsIDIKKwlqbAlMKGIxKQorCWplCUwoYjIpCisKK0woYjMpOglsZwklcjcsIDQ4KHVwKQorCXNybGcJJXI5LCAlcjcsIDAodG5jKQorCXNsbGcJJXIxMSwgJXI3LCAwKGNudCkKKwlsZwklcjgsIDQwKHVwKQorCWxnCSVyNywgMzIodXApCisJc3JsZwklcjQsICVyOCwgMCh0bmMpCisJc2xsZwklcjEzLCAlcjgsIDAoY250KQorCW9ncgklcjExLCAlcjQKKwlsYQlycCwgMTYocnApCisJeGdyCSVyMTEsICVyMTQKKwlqCUwobG0zKQorCitMKGIyKToJbGcJJXI4LCA0OCh1cCkKKwlsZwklcjcsIDQwKHVwKQorCXNybGcJJXI5LCAlcjgsIDAodG5jKQorCXNsbGcJJXIxMywgJXI4LCAwKGNudCkKKwlsYQlycCwgMjQocnApCisJbGEJdXAsIDgodXApCisJaglMKGxtMikKKworTChiMSk6CWxnCSVyNywgNDgodXApCisJc3JsZwklcjksICVyNywgMCh0bmMpCisJc2xsZwklcjExLCAlcjcsIDAoY250KQorCWxnCSVyOCwgNDAodXApCisJbGcJJXI3LCAzMih1cCkKKwlzcmxnCSVyNCwgJXI4LCAwKHRuYykKKwlzbGxnCSVyMTAsICVyOCwgMChjbnQpCisJb2dyCSVyMTEsICVyNAorCWxhCXJwLCAzMihycCkKKwlsYQl1cCwgMTYodXApCisJeGdyCSVyMTEsICVyMTQKKwlqCUwobG0xKQorCitMKGIwKToJbGcJJXI4LCA0OCh1cCkKKwlsZwklcjcsIDQwKHVwKQorCXNybGcJJXI5LCAlcjgsIDAodG5jKQorCXNsbGcJJXIxMCwgJXI4LCAwKGNudCkKKwlsYQlycCwgNDAocnApCisJbGEJdXAsIDI0KHVwKQorCWoJTChsbTApCisKKwlBTElHTig4KQorTCh0b3ApOglzcmxnCSVyNCwgJXI4LCAwKHRuYykKKwlzbGxnCSVyMTMsICVyOCwgMChjbnQpCisJb2dyCSVyMTEsICVyNAorCXhncgklcjEwLCAlcjE0CisJeGdyCSVyMTEsICVyMTQKKwlzdGcJJXIxMCwgMjQocnApCitMKGxtMyk6CXN0ZwklcjExLCAxNihycCkKK0wobG0yKToJc3JsZwklcjEyLCAlcjcsIDAodG5jKQorCXNsbGcJJXIxMSwgJXI3LCAwKGNudCkKKwlsZwklcjgsIDI0KHVwKQorCWxnCSVyNywgMTYodXApCisJb2dyCSVyMTMsICVyMTIKKwlzcmxnCSVyNCwgJXI4LCAwKHRuYykKKwlzbGxnCSVyMTAsICVyOCwgMChjbnQpCisJb2dyCSVyMTEsICVyNAorCXhncgklcjEzLCAlcjE0CisJeGdyCSVyMTEsICVyMTQKKwlzdGcJJXIxMywgOChycCkKK0wobG0xKToJc3RnCSVyMTEsIDAocnApCitMKGxtMCk6CXNybGcJJXIxMiwgJXI3LCAwKHRuYykKKwlhZ2hpCXJwLCAtMzIKKwlzbGxnCSVyMTEsICVyNywgMChjbnQpCisJbGcJJXI4LCA4KHVwKQorCWxnCSVyNywgMCh1cCkKKwlhZ2hpCXVwLCAtMzIKKwlvZ3IJJXIxMCwgJXIxMgorCWJyY3RnCSVyMCwgTCh0b3ApCisKK0woZW5kKToJc3JsZwklcjQsICVyOCwgMCh0bmMpCisJc2xsZwklcjEzLCAlcjgsIDAoY250KQorCW9ncgklcjExLCAlcjQKKwl4Z3IJJXIxMCwgJXIxNAorCXhncgklcjExLCAlcjE0CisJc3RnCSVyMTAsIDI0KHJwKQorCXN0ZwklcjExLCAxNihycCkKKwlzcmxnCSVyMTIsICVyNywgMCh0bmMpCisJc2xsZwklcjExLCAlcjcsIDAoY250KQorCW9ncgklcjEzLCAlcjEyCisJeGdyCSVyMTMsICVyMTQKKwl4Z3IJJXIxMSwgJXIxNAorCXN0ZwklcjEzLCA4KHJwKQorCXN0ZwklcjExLCAwKHJwKQorCWxncgklcjIsICVyOQorCisJbG1nCSVyNiwgJXIxNCwgNDgoJXIxNSkKKwlicgklcjE0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfNjQvbW9kXzM0bHN1YjEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzY0L21vZF8zNGxzdWIxLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDQwMDExCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzY0L21vZF8zNGxzdWIxLmFzbQpAQCAtMCwwICsxLDEwOSBAQAorZG5sICBTLzM5MC02NCBtcG5fbW9kXzM0bHN1YjEKKworZG5sICBDb3B5cmlnaHQgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgejkwMAkJIDUuOAorQyB6OTkwICAgICAgICAgICAyCitDIHo5CQkgPworQyB6MTAJCSA0LjUKK0MgejE5NgkJID8KKworQyBUT0RPCitDICAqIE9wdGltaXNlIHN1bW1hdGlvbiBjb2RlLCBzZWUgeDg2XzY0LgorCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLAlgJXIyJykKK2RlZmluZShgbicsCWAlcjMnKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX21vZF8zNGxzdWIxKQorCXN0bWcJJXI3LCAlcjEyLCA1NiglcjE1KQorCWxnaGkJJXIxMSwgMAorCWxnaGkJJXIxMiwgMAorCWxnaGkJJXIwLCAwCisJbGdoaQklcjgsIDAKKwlsZ2hpCSVyOSwgMAorCWxnaGkJJXIxMCwgMAorCWxnaGkJJXI3LCAwCisJYWdoaQklcjMsIC0zCisJamwJLkwzCisKK0wodG9wKToJYWxnCSVyMCwgMCglcjIpCisJYWxjZwklcjEyLCA4KCVyMikKKwlhbGNnCSVyMTEsIDE2KCVyMikKKwlhbGNncgklcjgsICVyNworCWxhCSVyMiwgMjQoJXIyKQorCWFnaGkJJXIzLCAtMworCWpubAlMKHRvcCkKKworCWxncgklcjcsICVyOAorCXNybGcJJXIxLCAlcjExLCAxNgorCW5paGgJJXI3LCAwCQkJQyAweGZmZmZmZmZmZmZmZgorCWFncgklcjcsICVyMQorCXNybGcJJXI4LCAlcjgsIDQ4CisJYWdyCSVyNywgJXI4CisJc2xsZwklcjExLCAlcjExLCAzMgorCW5paGgJJXIxMSwgMAorCWFncgklcjcsICVyMTEKKy5MMzoKKwljZ2hpCSVyMywgLTMKKwlqZQkuTDYKKwlhbGcJJXIwLCAwKCVyMikKKwlhbGNncgklcjEwLCAlcjEwCisJY2doaQklcjMsIC0yCisJamUJLkw2CisJYWxnCSVyMTIsIDgoJXIyKQorCWFsY2dyCSVyOSwgJXI5CisuTDY6CisJc3JsZwklcjEsICVyMCwgNDgKKwluaWhoCSVyMCwgMAkJCUMgMHhmZmZmZmZmZmZmZmYKKwlhZ3IJJXIwLCAlcjEKKwlhZ3IJJXIwLCAlcjcKKwlzcmxnCSVyMSwgJXIxMiwgMzIKKwlhZ3IJJXIwLCAlcjEKKwlzcmxnCSVyMSwgJXIxMCwgMzIKKwlhZ3IJJXIwLCAlcjEKKwlsbGdmcgklcjEyLCAlcjEyCisJc3JsZwklcjEsICVyOSwgMTYKKwlzbGxnCSVyMTIsICVyMTIsIDE2CisJbGxnZnIJJXIxMCwgJXIxMAorCWFncgklcjAsICVyMQorCWxsaWxsCSVyMiwgNjU1MzUKKwlhZ3IJJXIwLCAlcjEyCisJc2xsZwklcjEwLCAlcjEwLCAxNgorCW5ncgklcjIsICVyOQorCWFncgklcjAsICVyMTAKKwlzbGxnCSVyMiwgJXIyLCAzMgorCWFncgklcjIsICVyMAorCWxtZwklcjcsICVyMTIsIDU2KCVyMTUpCisJYnIJJXIxNAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzY0L211bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vczM5MF82NC9tdWxfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThmNmRhOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vczM5MF82NC9tdWxfMS5hc20KQEAgLTAsMCArMSw2NiBAQAorZG5sICBTLzM5MC02NCBtcG5fbXVsXzEKKworZG5sICBDb3B5cmlnaHQgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgejkwMAkJMjkKK0Mgejk5MAkJMjIKK0MgejkJCSA/CitDIHoxMAkJMjAKK0MgejE5NgkJID8KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywJYCVyMicpCitkZWZpbmUoYHVwJywJYCVyMycpCitkZWZpbmUoYG4nLAlgJXI0JykKK2RlZmluZShgdjAnLAlgJXI1JykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9tdWxfMSkKKwlzdG1nCSVyMTEsICVyMTIsIDg4KCVyMTUpCisJbGdoaQklcjEyLCAwCQkJQyB6ZXJvIGluZGV4IHJlZ2lzdGVyCisJYWdoaQklcjEyLCAwCQkJQyBjbGVhciBjYXJyeSBmbGFnCisJbGdoaQklcjExLCAwCQkJQyBjbGVhciBjYXJyeSBsaW1iCisKK0wodG9wKToJbGcJJXIxLCAwKCVyMTIsdXApCisJbWxncgklcjAsIHYwCisJYWxjZ3IJJXIxLCAlcjExCisJbGdyCSVyMTEsICVyMAkJQyBjb3B5IGhpZ2ggcGFydCB0byBjYXJyeSBsaW1iCisJc3RnCSVyMSwgMCglcjEyLHJwKQorCWxhCSVyMTIsIDgoJXIxMikKKwlicmN0ZwluLCBMKHRvcCkKKworCWxnaGkJJXIyLCAwCisJYWxjZ3IJJXIyLCAlcjExCisKKwlsbWcJJXIxMSwgJXIxMiwgODgoJXIxNSkKKwlicgklcjE0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfNjQvbXVsX2Jhc2VjYXNlLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vczM5MF82NC9tdWxfYmFzZWNhc2UuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMTRlYTkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfNjQvbXVsX2Jhc2VjYXNlLmFzbQpAQCAtMCwwICsxLDEzMCBAQAorZG5sICBTLzM5MC02NCBtcG5fbXVsX2Jhc2VjYXNlLgorCitkbmwgIENvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICAgICBjeWNsZXMvbGltYgorQyB6OTAwCQkgPworQyB6OTkwCQkyMworQyB6OQkJID8KK0MgejEwCQkyOAorQyB6MTk2CQkgPworCitDIFRPRE8KK0MgICogUGVyaGFwcyBhZGQgc3BlY2lhbCBjYXNlIGZvciB1biA8PSAyLgorQyAgKiBSZXBsYWNlIGxvb3BzIGJ5IGZhc3RlciBjb2RlLiAgVGhlIG11bF8xIGFuZCBhZGRtdWxfMSBsb29wcyBjb3VsZCBiZSBzcGVkCitDICAgIHVwIGJ5IGFib3V0IDEwJS4KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywJYCVyMicpCitkZWZpbmUoYHVwJywJYCVyMycpCitkZWZpbmUoYHVuJywJYCVyNCcpCitkZWZpbmUoYHZwJywJYCVyNScpCitkZWZpbmUoYHZuJywJYCVyNicpCisKK2RlZmluZShgemVybycsCWAlcjgnKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX211bF9iYXNlY2FzZSkKKwljZ2hpCXVuLCAyCisJamhlCUwoZ2UyKQorCitDIHVuID0gdm4gPSAxCisJbGcJJXIxLCAwKHZwKQorCW1sZwklcjAsIDAodXApCisJc3RnCSVyMSwgMChycCkKKwlzdGcJJXIwLCA4KHJwKQorCWJyCSVyMTQKKworTChnZTIpOglDIGpuZQlMKGdlbikKKworCitMKGdlbik6CitDIG11bF8xID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlzdG1nCSVyNiwgJXIxMiwgNDgoJXIxNSkKKwlsZ2hpCXplcm8sIDAKKwlhZ2hpCXVuLCAtMQorCisJbGcJJXI3LCAwKHZwKQorCWxnCSVyMTEsIDAodXApCisJbGdoaQklcjEyLCA4CQkJQyBpbml0IGluZGV4IHJlZ2lzdGVyCisJbWxncgklcjEwLCAlcjcKKwlsZ3IJJXI5LCB1bgorCXN0ZwklcjExLCAwKHJwKQorCWNyCSVyMTUsICVyMTUJCUMgY2xlYXIgY2FycnkgZmxhZworCitMKHRtKToJbGcJJXIxLCAwKCVyMTIsdXApCisJbWxncgklcjAsICVyNworCWFsY2dyCSVyMSwgJXIxMAorCWxncgklcjEwLCAlcjAJCUMgY29weSBoaWdoIHBhcnQgdG8gY2FycnkgbGltYgorCXN0ZwklcjEsIDAoJXIxMixycCkKKwlsYQklcjEyLCA4KCVyMTIpCisJYnJjdGcJJXI5LCBMKHRtKQorCisJYWxjZ3IJJXIwLCB6ZXJvCisJc3RnCSVyMCwgMCglcjEyLHJwKQorCitDIGFkZG11bF8xIGxvb3AgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlhZ2hpCXZuLCAtMQorCWplCUwob3V0ZXJfZW5kKQorTChvdXRlcl9sb29wKToKKworCWxhCXJwLCA4KHJwKQkJQyBycCArPSAxCisJbGEJdnAsIDgodnApCQlDIHVwICs9IDEKKwlsZwklcjcsIDAodnApCisJbGcJJXIxMSwgMCh1cCkKKwlsZ2hpCSVyMTIsIDgJCQlDIGluaXQgaW5kZXggcmVnaXN0ZXIKKwltbGdyCSVyMTAsICVyNworCWxncgklcjksIHVuCisJYWxnCSVyMTEsIDAocnApCisJc3RnCSVyMTEsIDAocnApCisKK0wodGFtKToJbGcJJXIxLCAwKCVyMTIsdXApCisJbGcJJXIxMSwgMCglcjEyLHJwKQorCW1sZ3IJJXIwLCAlcjcKKwlhbGNncgklcjEsICVyMTEKKwlhbGNncgklcjAsIHplcm8KKwlhbGdyCSVyMSwgJXIxMAorCWxncgklcjEwLCAlcjAKKwlzdGcJJXIxLCAwKCVyMTIscnApCisJbGEJJXIxMiwgOCglcjEyKQorCWJyY3RnCSVyOSwgTCh0YW0pCisKKwlhbGNncgklcjAsIHplcm8KKwlzdGcJJXIwLCAwKCVyMTIscnApCisKKwlicmN0Zwl2biwgTChvdXRlcl9sb29wKQorTChvdXRlcl9lbmQpOgorCisJbG1nCSVyNiwgJXIxMiwgNDgoJXIxNSkKKwlicgklcjE0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfNjQvcnNoaWZ0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vczM5MF82NC9yc2hpZnQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NzA5NzEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfNjQvcnNoaWZ0LmFzbQpAQCAtMCwwICsxLDE5NSBAQAorZG5sICBTLzM5MC02NCBtcG5fcnNoaWZ0LgorCitkbmwgIENvcHlyaWdodCAyMDExLCAyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICAgICBjeWNsZXMvbGltYgorQyB6OTAwCQkgNworQyB6OTkwICAgICAgICAgICAzCitDIHo5CQkgPworQyB6MTAJCSA2CitDIHoxOTYJCSA/CisKK0MgTk9URVMKK0MgICogU2VlIG5vdGVzIGluIGxzaGlmdC5hc20uCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsCWAlcjInKQorZGVmaW5lKGB1cCcsCWAlcjMnKQorZGVmaW5lKGBuJywJYCVyNCcpCitkZWZpbmUoYGNudCcsCWAlcjUnKQorCitkZWZpbmUoYHRuYycsCWAlcjYnKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX3JzaGlmdCkKKwljZ2hpCW4sIDMKKwlqaAlMKGd0MSkKKworCXN0bWcJJXI2LCAlcjcsIDQ4KCVyMTUpCisJbGFybAklcjEsIEwodGFiKS00CisJbGNncgl0bmMsIGNudAorCXNsbGcJbiwgbiwgMgorCWIJMChuLCVyMSkKK0wodGFiKToJaglMKG4xKQorCWoJTChuMikKKwlqCUwobjMpCisKK0wobjEpOglsZwklcjEsIDAodXApCisJc3JsZwklcjAsICVyMSwgMChjbnQpCisJc3RnCSVyMCwgMChycCkKKwlzbGxnCSVyMiwgJXIxLCAwKHRuYykKKwlsZwklcjYsIDQ4KCVyMTUpCQlDIHJlc3RvcmluZyByNyBub3QgbmVlZGVkCisJYnIJJXIxNAorCitMKG4yKToJbGcJJXIxLCAwKHVwKQorCXNsbGcJJXI0LCAlcjEsIDAodG5jKQorCXNybGcJJXIwLCAlcjEsIDAoY250KQorCWxnCSVyMSwgOCh1cCkKKwlzbGxnCSVyNywgJXIxLCAwKHRuYykKKwlvZ3IJJXI3LCAlcjAKKwlzcmxnCSVyMCwgJXIxLCAwKGNudCkKKwlzdGcJJXI3LCAwKHJwKQorCXN0ZwklcjAsIDgocnApCisJbGdyCSVyMiwgJXI0CisJbG1nCSVyNiwgJXI3LCA0OCglcjE1KQorCWJyCSVyMTQKKworCitMKG4zKToJbGcJJXIxLCAwKHVwKQorCXNsbGcJJXI0LCAlcjEsIDAodG5jKQorCXNybGcJJXIwLCAlcjEsIDAoY250KQorCWxnCSVyMSwgOCh1cCkKKwlzbGxnCSVyNywgJXIxLCAwKHRuYykKKwlvZ3IJJXI3LCAlcjAKKwlzcmxnCSVyMCwgJXIxLCAwKGNudCkKKwlzdGcJJXI3LCAwKHJwKQorCWxnCSVyMSwgMTYodXApCisJc2xsZwklcjcsICVyMSwgMCh0bmMpCisJb2dyCSVyNywgJXIwCisJc3JsZwklcjAsICVyMSwgMChjbnQpCisJc3RnCSVyNywgOChycCkKKwlzdGcJJXIwLCAxNihycCkKKwlsZ3IJJXIyLCAlcjQKKwlsbWcJJXI2LCAlcjcsIDQ4KCVyMTUpCisJYnIJJXIxNAorCitMKGd0MSk6CXN0bWcJJXI2LCAlcjEzLCA0OCglcjE1KQorCWxjZ3IJdG5jLCBjbnQJCUMgdG5jID0gLWNudAorCisJc2xsZwklcjEsIG4sIDMKKwlzcmxnCSVyMCwgbiwgMgkJQyBsb29wIGNvdW50CisKKwlsZ2hpCSVyNywgMworCW5ncgklcjcsIG4KKwlqZQlMKGIwKQorCWNnaGkJJXI3LCAyCisJamwJTChiMSkKKwlqZQlMKGIyKQorCitMKGIzKToJYWdoaQlycCwgLTgKKwlsZwklcjcsIDAodXApCisJc2xsZwklcjksICVyNywgMCh0bmMpCisJc3JsZwklcjExLCAlcjcsIDAoY250KQorCWxnCSVyOCwgOCh1cCkKKwlsZwklcjcsIDE2KHVwKQorCXNsbGcJJXI0LCAlcjgsIDAodG5jKQorCXNybGcJJXIxMywgJXI4LCAwKGNudCkKKwlvZ3IJJXIxMSwgJXI0CisJbGEJdXAsIDI0KHVwKQorCWoJTChsbTMpCisKK0woYjIpOglhZ2hpCXJwLCAtMTYKKwlsZwklcjgsIDAodXApCisJbGcJJXI3LCA4KHVwKQorCXNsbGcJJXI5LCAlcjgsIDAodG5jKQorCXNybGcJJXIxMywgJXI4LCAwKGNudCkKKwlsYQl1cCwgMTYodXApCisJaglMKGxtMikKKworTChiMSk6CWFnaGkJcnAsIC0yNAorCWxnCSVyNywgMCh1cCkKKwlzbGxnCSVyOSwgJXI3LCAwKHRuYykKKwlzcmxnCSVyMTEsICVyNywgMChjbnQpCisJbGcJJXI4LCA4KHVwKQorCWxnCSVyNywgMTYodXApCisJc2xsZwklcjQsICVyOCwgMCh0bmMpCisJc3JsZwklcjEwLCAlcjgsIDAoY250KQorCW9ncgklcjExLCAlcjQKKwlsYQl1cCwgOCh1cCkKKwlqCUwobG0xKQorCitMKGIwKToJYWdoaQlycCwgLTMyCisJbGcJJXI4LCAwKHVwKQorCWxnCSVyNywgOCh1cCkKKwlzbGxnCSVyOSwgJXI4LCAwKHRuYykKKwlzcmxnCSVyMTAsICVyOCwgMChjbnQpCisJaglMKGxtMCkKKworCUFMSUdOKDgpCitMKHRvcCk6CXNsbGcJJXI0LCAlcjgsIDAodG5jKQorCXNybGcJJXIxMywgJXI4LCAwKGNudCkKKwlvZ3IJJXIxMSwgJXI0CisJc3RnCSVyMTAsIDAocnApCitMKGxtMyk6CXN0ZwklcjExLCA4KHJwKQorTChsbTIpOglzbGxnCSVyMTIsICVyNywgMCh0bmMpCisJc3JsZwklcjExLCAlcjcsIDAoY250KQorCWxnCSVyOCwgMCh1cCkKKwlsZwklcjcsIDgodXApCisJb2dyCSVyMTMsICVyMTIKKwlzbGxnCSVyNCwgJXI4LCAwKHRuYykKKwlzcmxnCSVyMTAsICVyOCwgMChjbnQpCisJb2dyCSVyMTEsICVyNAorCXN0ZwklcjEzLCAxNihycCkKK0wobG0xKToJc3RnCSVyMTEsIDI0KHJwKQorTChsbTApOglzbGxnCSVyMTIsICVyNywgMCh0bmMpCisJYWdoaQlycCwgMzIKKwlzcmxnCSVyMTEsICVyNywgMChjbnQpCisJbGcJJXI4LCAxNih1cCkKKwlsZwklcjcsIDI0KHVwKQorCWFnaGkJdXAsIDMyCisJb2dyCSVyMTAsICVyMTIKKwlicmN0ZwklcjAsIEwodG9wKQorCitMKGVuZCk6CXNsbGcJJXI0LCAlcjgsIDAodG5jKQorCXNybGcJJXIxMywgJXI4LCAwKGNudCkKKwlvZ3IJJXIxMSwgJXI0CisJc3RnCSVyMTAsIDAocnApCisJc3RnCSVyMTEsIDgocnApCisJc2xsZwklcjEyLCAlcjcsIDAodG5jKQorCXNybGcJJXIxMSwgJXI3LCAwKGNudCkKKwlvZ3IJJXIxMywgJXIxMgorCXN0ZwklcjEzLCAxNihycCkKKwlzdGcJJXIxMSwgMjQocnApCisJbGdyCSVyMiwgJXI5CisKKwlsbWcJJXI2LCAlcjEzLCA0OCglcjE1KQorCWJyCSVyMTQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vczM5MF82NC9zcXJfYmFzZWNhc2UuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzY0L3Nxcl9iYXNlY2FzZS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYzMWJkNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vczM5MF82NC9zcXJfYmFzZWNhc2UuYXNtCkBAIC0wLDAgKzEsMjAzIEBACitkbmwgIFMvMzkwLTY0IG1wbl9zcXJfYmFzZWNhc2UuCisKK2RubCAgQ29weXJpZ2h0IDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgICAgIGN5Y2xlcy9saW1iCitDIHo5MDAJCSA/CitDIHo5OTAJCTIzCitDIHo5CQkgPworQyB6MTAJCTI4CitDIHoxOTYJCSA/CisKK0MgVE9ETworQyAgKiBDbGVhbiB1cC4KK0MgICogU3RvcCBpdGVyYXRpbmcgYWRkbXVsXzEgbG9vcCBhdCBsYXRlc3QgZm9yIG4gPSAyLCBpbXBsZW1lbnQgbG9uZ2VyIHRhaWwuCitDICAgIFRoaXMgd2lsbCBhc2sgZm9yIGJhc2VjYXNlIGhhbmRsaW5nIG9mIG4gPSAzLgorQyAgKiBVcGRhdGUgY291bnRlcnMgYW5kIHBvaW50ZXJzIG1vcmUgc3RyYWlnaHRmb3J3YXJkbHksIHBvc3NpYmx5IGxvd2VyaW5nCitDICAgIHJlZ2lzdGVyIHVzYWdlLgorQyAgKiBTaG91bGQgd2UgdXNlIHRoaXMgYWxsb2NhdGlvbi1mcmVlIHN0eWxlIGZvciBtb3JlIHNxcl9iYXNlY2FzZSBhc20KK0MgICAgaW1wbGVtZW50YXRpb25zPyAgVGhlIG9ubHkgZGlzYWR2YW50YWdlIGlzIHRoYXQgaXQgcmVxdWlyZXMgUiAhPSBVLgorQyAgKiBSZXBsYWNlIGxvb3BzIGJ5IGZhc3RlciBjb2RlLiAgVGhlIG11bF8xIGFuZCBhZGRtdWxfMSBsb29wcyBjb3VsZCBiZSBzcGVkCitDICAgIHVwIGJ5IGFib3V0IDEwJS4gIFRoZSBzcXJfZGlhZ19hZGRsc2gxIGxvb3AgY291bGQgcHJvYmFibHkgYmUgc3BlZCB1cCBldmVuCitDICAgIG1vcmUuCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsCWAlcjInKQorZGVmaW5lKGB1cCcsCWAlcjMnKQorZGVmaW5lKGBuJywJYCVyNCcpCisKK2RlZmluZShgemVybycsCWAlcjgnKQorZGVmaW5lKGBycF9zYXZlZCcsCWAlcjknKQorZGVmaW5lKGB1cF9zYXZlZCcsCWAlcjEzJykKK2RlZmluZShgbl9zYXZlZCcsCWAlcjE0JykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9zcXJfYmFzZWNhc2UpCisJYWdoaQluLCAtMgorCWpoZQlMKGdlMikKKworQyBuID0gMQorCWxnCSVyNSwgMCh1cCkKKwltbGdyCSVyNCwgJXI1CisJc3RnCSVyNSwgMChycCkKKwlzdGcJJXI0LCA4KHJwKQorCWJyCSVyMTQKKworTChnZTIpOglqbmUJTChnZW4pCisKK0MgbiA9IDIKKwlzdG1nCSVyNiwgJXI4LCA0OCglcjE1KQorCWxnaGkJemVybywgMAorCisJbGcJJXI1LCAwKHVwKQorCW1sZ3IJJXI0LCAlcjUJCUMgdTAgKiB1MAorCWxnCSVyMSwgOCh1cCkKKwltbGdyCSVyMCwgJXIxCQlDIHUxICogdTEKKwlzdGcJJXI1LCAwKHJwKQorCisJbGcJJXI3LCAwKHVwKQorCW1sZwklcjYsIDgodXApCQlDIHUwICogdTEKKwlhbGdyCSVyNywgJXI3CisJYWxjZ3IJJXI2LCAlcjYKKwlhbGNncgklcjAsIHplcm8KKworCWFsZ3IJJXI0LCAlcjcKKwlhbGNncgklcjEsICVyNgorCWFsY2dyCSVyMCwgemVybworCXN0ZwklcjQsIDgocnApCisJc3RnCSVyMSwgMTYocnApCisJc3RnCSVyMCwgMjQocnApCisKKwlsbWcJJXI2LCAlcjgsIDQ4KCVyMTUpCisJYnIJJXIxNAorCitMKGdlbik6CitDIG11bF8xID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlzdG1nCSVyNiwgJXIxNCwgNDgoJXIxNSkKKwlsZ2hpCXplcm8sIDAKKwlsZ3IJdXBfc2F2ZWQsIHVwCisJbGdyCXJwX3NhdmVkLCBycAorCWxncgluX3NhdmVkLCBuCisKKwlsZwklcjYsIDAodXApCisJbGcJJXIxMSwgOCh1cCkKKwlsZ2hpCSVyMTIsIDE2CQlDIGluaXQgaW5kZXggcmVnaXN0ZXIKKwltbGdyCSVyMTAsICVyNgorCWxncgklcjUsIG4KKwlzdGcJJXIxMSwgOChycCkKKwljcgklcjE1LCAlcjE1CQlDIGNsZWFyIGNhcnJ5IGZsYWcKKworTCh0bSk6CWxnCSVyMSwgMCglcjEyLHVwKQorCW1sZ3IJJXIwLCAlcjYKKwlhbGNncgklcjEsICVyMTAKKwlsZ3IJJXIxMCwgJXIwCQlDIGNvcHkgaGlnaCBwYXJ0IHRvIGNhcnJ5IGxpbWIKKwlzdGcJJXIxLCAwKCVyMTIscnApCisJbGEJJXIxMiwgOCglcjEyKQorCWJyY3RnCSVyNSwgTCh0bSkKKworCWFsY2dyCSVyMCwgemVybworCXN0ZwklcjAsIDAoJXIxMixycCkKKworQyBhZGRtdWxfMSBsb29wID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJYWdoaQluLCAtMQorCWplCUwob3V0ZXJfZW5kKQorTChvdXRlcl9sb29wKToKKworCWxhCXJwLCAxNihycCkJCUMgcnAgKz0gMgorCWxhCXVwLCA4KHVwKQkJQyB1cCArPSAxCisJbGcJJXI2LCAwKHVwKQorCWxnCSVyMTEsIDgodXApCisJbGdoaQklcjEyLCAxNgkJQyBpbml0IGluZGV4IHJlZ2lzdGVyCisJbWxncgklcjEwLCAlcjYKKwlsZ3IJJXI1LCBuCisJYWxnCSVyMTEsIDgocnApCisJc3RnCSVyMTEsIDgocnApCisKK0wodGFtKToJbGcJJXIxLCAwKCVyMTIsdXApCisJbGcJJXI3LCAwKCVyMTIscnApCisJbWxncgklcjAsICVyNgorCWFsY2dyCSVyMSwgJXI3CisJYWxjZ3IJJXIwLCB6ZXJvCisJYWxncgklcjEsICVyMTAKKwlsZ3IJJXIxMCwgJXIwCisJc3RnCSVyMSwgMCglcjEyLHJwKQorCWxhCSVyMTIsIDgoJXIxMikKKwlicmN0ZwklcjUsIEwodGFtKQorCisJYWxjZ3IJJXIwLCB6ZXJvCisJc3RnCSVyMCwgMCglcjEyLHJwKQorCisJYnJjdGcJbiwgTChvdXRlcl9sb29wKQorTChvdXRlcl9lbmQpOgorCisJbGcJJXI2LCA4KHVwKQorCWxnCSVyMSwgMTYodXApCisJbGdyCSVyNywgJXIwCQlDIFNhbWUgYXM6IGxnICVyNywgMjQoLHJwKQorCW1sZ3IJJXIwLCAlcjYKKwlhbGdyCSVyMSwgJXI3CisJYWxjZ3IJJXIwLCB6ZXJvCisJc3RnCSVyMSwgMjQocnApCisJc3RnCSVyMCwgMzIocnApCisKK0Mgc3FyX2RpYWdfYWRkbHNoMSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworZGVmaW5lKGB1cCcsIGB1cF9zYXZlZCcpCitkZWZpbmUoYHJwJywgYHJwX3NhdmVkJykKKwlsYQluLCAxKG5fc2F2ZWQpCisKKwlsZwklcjEsIDAodXApCisJbWxncgklcjAsICVyMQorCXN0ZwklcjEsIDAocnApCitDCWNscgklcjE1LCAlcjE1CQlDIGNsZWFyIGNhcnJ5IChhbHJlYWR5IGNsZWFyIHBlciBhYm92ZSkKKworTCh0b3ApOglsZwklcjExLCA4KHVwKQorCWxhCXVwLCA4KHVwKQorCWxnCSVyNiwgOChycCkKKwlsZwklcjcsIDE2KHJwKQorCW1sZ3IJJXIxMCwgJXIxMQorCWFsY2dyCSVyNiwgJXI2CisJYWxjZ3IJJXI3LCAlcjcKKwlhbGNncgklcjEwLCB6ZXJvCQlDIHByb3BhZ2F0ZSBjYXJyeSB0byBoaWdoIHByb2R1Y3QgbGltYgorCWFsZ3IJJXI2LCAlcjAKKwlhbGNncgklcjcsICVyMTEKKwlzdG1nCSVyNiwgJXI3LCA4KHJwKQorCWxhCXJwLCAxNihycCkKKwlsZ3IJJXIwLCAlcjEwCQlDIGNvcHkgY2FycnkgbGltYgorCWJyY3RnCW4sIEwodG9wKQorCisJYWxjZ3IJJXIwLCB6ZXJvCisJc3RnCSVyMCwgOChycCkKKworCWxtZwklcjYsICVyMTQsIDQ4KCVyMTUpCisJYnIJJXIxNAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzY0L3N1YmxzaDFfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfNjQvc3VibHNoMV9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGYxMjdhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzY0L3N1YmxzaDFfbi5hc20KQEAgLTAsMCArMSwxNjkgQEAKK2RubCAgUy8zOTAtNjQgbXBuX3N1YmxzaDFfbgorCitkbmwgIENvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICAgICBjeWNsZXMvbGltYgorQyB6OTAwCQkxMAorQyB6OTkwCQkgNQorQyB6OQkJID8KK0MgejEwCQkxMgorQyB6MTk2CQkgPworCitDIFRPRE8KK0MgICogT3B0aW1pc2UgZm9yIHNtYWxsIG4KK0MgICogQ29tcHV0ZSBSRVRWQUwgZm9yIHN1YmxzaDFfbiBsZXNzIHN0dXBpZGx5CisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsCWAlcjInKQorZGVmaW5lKGB1cCcsCWAlcjMnKQorZGVmaW5lKGB2cCcsCWAlcjQnKQorZGVmaW5lKGBuJywJYCVyNScpCisKK2lmZGVmKGBPUEVSQVRJT05fYWRkbHNoMV9uJyxgCisgIGRlZmluZShBRFNCUiwJCWFsZ3IpCisgIGRlZmluZShBRFNCQ1IsCWFsY2dyKQorICBkZWZpbmUoSU5JVENZLAlgbGdoaQklcjEzLCAtMScpCisgIGRlZmluZShSRVRWQUwsCWBsYQklcjIsIDIoJXIxLCVyMTMpJykKKyAgZGVmaW5lKGZ1bmMsIG1wbl9hZGRsc2gxX24pCisnKQoraWZkZWYoYE9QRVJBVElPTl9zdWJsc2gxX24nLGAKKyAgZGVmaW5lKEFEU0JSLAkJc2xncikKKyAgZGVmaW5lKEFEU0JDUiwJc2xiZ3IpCisgIGRlZmluZShJTklUQ1ksCWBsZ2hpCSVyMTMsIDAnKQorICBkZWZpbmUoUkVUVkFMLGBkbmwKKwlzbGdyCSVyMSwgJXIxMworCWxnaGkJJXIyLCAxCisJYWxncgklcjIsICVyMScpCisgIGRlZmluZShmdW5jLCBtcG5fc3VibHNoMV9uKQorJykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9zdWJsc2gxX24pCisJc3RtZwklcjYsICVyMTMsIDQ4KCVyMTUpCisKKwlhZ2hpCW4sIDMKKwlsZ2hpCSVyNywgMworCXNybGcJJXIwLCBuLCAyCisJbmdyCSVyNywgbgkJCUMgbiBtb2QgNAorCWplCUwoYjEpCisJY2doaQklcjcsIDIKKwlqbAlMKGIyKQorCWpuZQlMKGIwKQorCitMKGIzKToJbG1nCSVyNSwgJXI3LCAwKHVwKQorCWxhCXVwLCAyNCh1cCkKKwlsbWcJJXI5LCAlcjExLCAwKHZwKQorCWxhCXZwLCAyNCh2cCkKKworCWFsZ3IJJXI5LCAlcjkKKwlhbGNncgklcjEwLCAlcjEwCisJYWxjZ3IJJXIxMSwgJXIxMQorCXNsYmdyCSVyMSwgJXIxCisKKwlBRFNCUgklcjUsICVyOQorCUFEU0JDUgklcjYsICVyMTAKKwlBRFNCQ1IJJXI3LCAlcjExCisJc2xiZ3IJJXIxMywgJXIxMworCisJc3RtZwklcjUsICVyNywgMChycCkKKwlsYQlycCwgMjQocnApCisJYnJjdGcJJXIwLCBMKHRvcCkKKwlqCUwoZW5kKQorCitMKGIwKToJbGdoaQklcjEsIC0xCisJSU5JVENZCisJaglMKHRvcCkKKworTChiMSk6CWxnCSVyNSwgMCh1cCkKKwlsYQl1cCwgOCh1cCkKKwlsZwklcjksIDAodnApCisJbGEJdnAsIDgodnApCisKKwlhbGdyCSVyOSwgJXI5CisJc2xiZ3IJJXIxLCAlcjEKKwlBRFNCUgklcjUsICVyOQorCXNsYmdyCSVyMTMsICVyMTMKKworCXN0ZwklcjUsIDAocnApCisJbGEJcnAsIDgocnApCisJYnJjdGcJJXIwLCBMKHRvcCkKKwlqCUwoZW5kKQorCitMKGIyKToJbG1nCSVyNSwgJXI2LCAwKHVwKQorCWxhCXVwLCAxNih1cCkKKwlsbWcJJXI5LCAlcjEwLCAwKHZwKQorCWxhCXZwLCAxNih2cCkKKworCWFsZ3IJJXI5LCAlcjkKKwlhbGNncgklcjEwLCAlcjEwCisJc2xiZ3IJJXIxLCAlcjEKKworCUFEU0JSCSVyNSwgJXI5CisJQURTQkNSCSVyNiwgJXIxMAorCXNsYmdyCSVyMTMsICVyMTMKKworCXN0bWcJJXI1LCAlcjYsIDAocnApCisJbGEJcnAsIDE2KHJwKQorCWJyY3RnCSVyMCwgTCh0b3ApCisJaglMKGVuZCkKKworTCh0b3ApOglsbWcJJXI5LCAlcjEyLCAwKHZwKQorCWxhCXZwLCAzMih2cCkKKworCWFnaGkJJXIxLCAxCQkJQyByZXN0b3JlIGNhcnJ5CisKKwlhbGNncgklcjksICVyOQorCWFsY2dyCSVyMTAsICVyMTAKKwlhbGNncgklcjExLCAlcjExCisJYWxjZ3IJJXIxMiwgJXIxMgorCisJc2xiZ3IJJXIxLCAlcjEJCUMgc2F2ZSBjYXJyeQorCisJbG1nCSVyNSwgJXI4LCAwKHVwKQorCWxhCXVwLCAzMih1cCkKKworCWFnaGkJJXIxMywgMQkJCUMgcmVzdG9yZSBjYXJyeQorCisJQURTQkNSCSVyNSwgJXI5CisJQURTQkNSCSVyNiwgJXIxMAorCUFEU0JDUgklcjcsICVyMTEKKwlBRFNCQ1IJJXI4LCAlcjEyCisKKwlzbGJncgklcjEzLCAlcjEzCQlDIHNhdmUgY2FycnkKKworCXN0bWcJJXI1LCAlcjgsIDAocnApCisJbGEJcnAsIDMyKHJwKQorCWJyY3RnCSVyMCwgTCh0b3ApCisKK0woZW5kKToJUkVUVkFMCisJbG1nCSVyNiwgJXIxMywgNDgoJXIxNSkKKwlicgklcjE0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfNjQvc3VibXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzY0L3N1Ym11bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWM0YjA2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzY0L3N1Ym11bF8xLmFzbQpAQCAtMCwwICsxLDcwIEBACitkbmwgIFMvMzkwLTY0IG1wbl9zdWJtdWxfMQorCitkbmwgIENvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICAgICBjeWNsZXMvbGltYgorQyB6OTAwCQkzNQorQyB6OTkwCQkyNAorQyB6OQkJID8KK0MgejEwCQkyOAorQyB6MTk2CQkgPworCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLAlgJXIyJykKK2RlZmluZShgdXAnLAlgJXIzJykKK2RlZmluZShgbicsCWAlcjQnKQorZGVmaW5lKGB2MCcsCWAlcjUnKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX3N1Ym11bF8xKQorCXN0bWcJJXI5LCAlcjEyLCA3MiglcjE1KQorCWxnaGkJJXIxMiwgMAorCXNsZ3IJJXIxMSwgJXIxMQorCitMKHRvcCk6CWxnCSVyMSwgMCglcjEyLCB1cCkKKwlsZwklcjEwLCAwKCVyMTIsIHJwKQorCW1sZ3IJJXIwLCB2MAorCXNsYmdyCSVyMTAsICVyMQorCXNsYmdyCSVyOSwgJXI5CisJc2xncgklcjAsICVyOQkJQyBjb25kaXRpb25hbCBpbmNyCisJc2xncgklcjEwLCAlcjExCisJbGdyCSVyMTEsICVyMAorCXN0ZwklcjEwLCAwKCVyMTIsIHJwKQorCWxhCSVyMTIsIDgoJXIxMikKKwlicmN0ZwklcjQsICBMKHRvcCkKKworCWxncgklcjIsICVyMTEKKwlzbGJncgklcjksICVyOQorCXNsZ3IJJXIyLCAlcjkKKworCWxtZwklcjksICVyMTIsIDcyKCVyMTUpCisJYnIJJXIxNAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzY0L3oxMC9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3MzOTBfNjQvejEwL2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2E5NDE2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zMzkwXzY0L3oxMC9nbXAtbXBhcmFtLmgKQEAgLTAsMCArMSwyMzMgQEAKKy8qIFMvMzkwLTY0IGdtcC1tcGFyYW0uaCAtLSBDb21waWxlci9tYWNoaW5lIHBhcmFtZXRlciBoZWFkZXIgZmlsZS4KKworQ29weXJpZ2h0IDE5OTEsIDE5OTMsIDE5OTQsIDIwMDAtMjAxMSwgMjAxNCwgMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNkZWZpbmUgR01QX0xJTUJfQklUUyA2NAorI2RlZmluZSBHTVBfTElNQl9CWVRFUyA4CisKKy8qIDQ0MDAgTUh6IElCTSB6MTAgKi8KKy8qIEZGVCB0dW5pbmcgbGltaXQgPSAzMCBNICovCisvKiBHZW5lcmF0ZWQgYnkgdHVuZXVwLmMsIDIwMTUtMTAtMDksIGdjYyA0LjggKi8KKworI2RlZmluZSBESVZSRU1fMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIERJVlJFTV8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICAzCisjZGVmaW5lIE1PRF8xXzFQX01FVEhPRCAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgTU9EXzFOX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgIDYKKyNkZWZpbmUgTU9EXzFVX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgIDUKKyNkZWZpbmUgTU9EXzFfMV9UT19NT0RfMV8yX1RIUkVTSE9MRCAgICAgICAgMTUKKyNkZWZpbmUgTU9EXzFfMl9UT19NT0RfMV80X1RIUkVTSE9MRCAgICAgICAgMTcKKyNkZWZpbmUgUFJFSU5WX01PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgMjQKKyNkZWZpbmUgVVNFX1BSRUlOVl9ESVZSRU1fMSAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgRElWX1FSXzFOX1BJMV9NRVRIT0QgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgRElWX1FSXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRElWX1FSXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWX1FSXzJfUEkyX1RIUkVTSE9MRCAgICAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWRVhBQ1RfMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBCTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgICAgICA0OAorCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDY1CisjZGVmaW5lIE1VTF9UT09NNDRfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDk0CisjZGVmaW5lIE1VTF9UT09NNkhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTI5CisjZGVmaW5lIE1VTF9UT09NOEhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTg3CisKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNDNfVEhSRVNIT0xEICAgICAgNjUKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNTNfVEhSRVNIT0xEICAgICAgNjEKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNTNfVEhSRVNIT0xEICAgICAgNjIKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNjNfVEhSRVNIT0xEICAgICAgNjQKKyNkZWZpbmUgTVVMX1RPT000M19UT19UT09NNTRfVEhSRVNIT0xEICAgICAgODUKKworI2RlZmluZSBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgICAgIDgwCisjZGVmaW5lIFNRUl9UT09NNF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTE4CisjZGVmaW5lIFNRUl9UT09NNl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTg5CisjZGVmaW5lIFNRUl9UT09NOF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjM2CisKKyNkZWZpbmUgTVVMTUlEX1RPT000Ml9USFJFU0hPTEQgICAgICAgICAgICAgMjQKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgNworI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgOQorCisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgMjUyICAvKiBrID0gNSAqLworI2RlZmluZSBNVUxfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgMjUyLCA1fSwgeyAgICAgIDksIDZ9LCB7ICAgICAgNSwgNX0sIHsgICAgIDExLCA2fSwgXAorICAgIHsgICAgICA2LCA1fSwgeyAgICAgMTMsIDZ9LCB7ICAgICAgNywgNX0sIHsgICAgIDE1LCA2fSwgXAorICAgIHsgICAgIDEzLCA3fSwgeyAgICAgIDcsIDZ9LCB7ICAgICAxNSwgN30sIHsgICAgIDEzLCA4fSwgXAorICAgIHsgICAgICA3LCA3fSwgeyAgICAgMTUsIDh9LCB7ICAgICAgOSwgN30sIHsgICAgIDE5LCA4fSwgXAorICAgIHsgICAgIDExLCA3fSwgeyAgICAgMjMsIDh9LCB7ICAgICAxMywgOX0sIHsgICAgICA3LCA4fSwgXAorICAgIHsgICAgIDE1LCA3fSwgeyAgICAgMzEsIDh9LCB7ICAgICAxOSwgOX0sIHsgICAgIDExLCA4fSwgXAorICAgIHsgICAgIDI3LDEwfSwgeyAgICAgIDcsIDl9LCB7ICAgICAxNSwgOH0sIHsgICAgIDMxLCA5fSwgXAorICAgIHsgICAgIDE5LCA4fSwgeyAgICAgNDEsIDl9LCB7ICAgICAyNywxMH0sIHsgICAgIDE1LCA5fSwgXAorICAgIHsgICAgIDM5LDEwfSwgeyAgICAgMjMsIDl9LCB7ICAgICA0NywxMX0sIHsgICAgIDE1LDEwfSwgXAorICAgIHsgICAgIDMxLCA5fSwgeyAgICAgNjcsMTB9LCB7ICAgICAzOSwgOX0sIHsgICAgIDc5LDEwfSwgXAorICAgIHsgICAgIDQ3LDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA2MywgOX0sIHsgICAgMTI3LCA4fSwgXAorICAgIHsgICAgMjU1LDEwfSwgeyAgICAgNzEsIDl9LCB7ICAgIDE0MywgOH0sIHsgICAgMjg3LCA3fSwgXAorICAgIHsgICAgNTc1LCA2fSwgeyAgIDExNTEsMTB9LCB7ICAgICA3OSwxMX0sIHsgICAgIDQ3LDEyfSwgXAorICAgIHsgICAgIDMxLDExfSwgeyAgICAgNjMsMTB9LCB7ICAgIDEyNywgOX0sIHsgICAgMjU1LCA4fSwgXAorICAgIHsgICAgNTExLDEwfSwgeyAgICAxNDMsMTF9LCB7ICAgICA3OSwxMH0sIHsgICAgMTU5LCA5fSwgXAorICAgIHsgICAgMzE5LCA4fSwgeyAgICA2MzksMTB9LCB7ICAgIDE3NSwgOH0sIHsgICAgNzAzLDExfSwgXAorICAgIHsgICAgIDk1LDEwfSwgeyAgICAxOTEsIDl9LCB7ICAgIDM4MywgOH0sIHsgICAgNzY3LCA5fSwgXAorICAgIHsgICAgNDE1LCA4fSwgeyAgICA4MzEsIDd9LCB7ICAgMTY2MywxMH0sIHsgICAgMjM5LCA5fSwgXAorICAgIHsgICAgNDc5LDEyfSwgeyAgICAgNjMsMTF9LCB7ICAgIDEyNywxMH0sIHsgICAgMjU1LCA5fSwgXAorICAgIHsgICAgNTExLDExfSwgeyAgICAxNDMsMTB9LCB7ICAgIDI4NywgOX0sIHsgICAgNTc1LCA4fSwgXAorICAgIHsgICAxMTUxLDEwfSwgeyAgICAzMTksIDl9LCB7ICAgIDYzOSwxMX0sIHsgICAgMTc1LDEwfSwgXAorICAgIHsgICAgMzUxLCA5fSwgeyAgICA3MDMsIDh9LCB7ICAgMTQwNywgN30sIHsgICAyODE1LDExfSwgXAorICAgIHsgICAgMTkxLDEwfSwgeyAgICAzODMsIDl9LCB7ICAgIDc2NywxMH0sIHsgICAgNDE1LDExfSwgXAorICAgIHsgICAgMjIzLDEwfSwgeyAgICA0NDcsIDl9LCB7ICAgIDg5NSwxM30sIHsgICAgIDYzLDExfSwgXAorICAgIHsgICAgMjU1LDEwfSwgeyAgICA1NzUsIDl9LCB7ICAgMTE1MSwxMn0sIHsgICAgMTU5LDExfSwgXAorICAgIHsgICAgMzE5LDEwfSwgeyAgICA2MzksIDl9LCB7ICAgMTI3OSwxMH0sIHsgICAgNzAzLCA5fSwgXAorICAgIHsgICAxNDA3LDEyfSwgeyAgICAxOTEsMTB9LCB7ICAgIDc2NywxMX0sIHsgICAgNDE1LDEyfSwgXAorICAgIHsgICAgMjIzLDExfSwgeyAgICA0NDcsMTB9LCB7ICAgIDg5NSwxMX0sIHsgICAgNDc5LDEzfSwgXAorICAgIHsgICAgMTI3LDEyfSwgeyAgICAyNTUsMTF9LCB7ICAgIDUxMSwxMn0sIHsgICAgMjg3LDEwfSwgXAorICAgIHsgICAxMTUxLDEyfSwgeyAgICAzMTksMTF9LCB7ICAgIDcwMywxMH0sIHsgICAxNDA3LCA5fSwgXAorICAgIHsgICAyODE1LDEyfSwgeyAgICAzODMsMTF9LCB7ICAgIDc2NywxMn0sIHsgICAgNDE1LDExfSwgXAorICAgIHsgICAgODMxLDEwfSwgeyAgIDE2NjMsMTJ9LCB7ICAgIDQ0NywxMX0sIHsgICAgODk1LDEwfSwgXAorICAgIHsgICAxNzkxLCA5fSwgeyAgIDM1ODMsMTJ9LCB7ICAgIDQ3OSwxMX0sIHsgICAgOTU5LDEwfSwgXAorICAgIHsgICAxOTE5LCA5fSwgeyAgIDM4MzksMTJ9LCB7ICAgIDUxMSwgOX0sIHsgICA0MDk1LCA2fSwgXAorICAgIHsgIDMyNzY3LCA4fSwgeyAgIDg0NDcsMTF9LCB7ICAgMTE1MSwxM30sIHsgICAgMzE5LDEyfSwgXAorICAgIHsgICAgNjM5LDEwfSwgeyAgIDI1NTksMTJ9LCB7ICAgIDcwMywxMH0sIHsgICAyODE1LDEyfSwgXAorICAgIHsgICAgODMxLDExfSwgeyAgIDE2NjMsMTJ9LCB7ICAgIDg5NSwxMX0sIHsgICAxNzkxLDEyfSwgXAorICAgIHsgICAgOTU5LDExfSwgeyAgIDE5MTksMTR9LCB7ICAgIDI1NSwxM30sIHsgICAgNTExLDExfSwgXAorICAgIHsgICAyMDQ3LDEyfSwgeyAgIDEyMTUsMTB9LCB7ICAgNDg2MywxMX0sIHsgICAyNTU5LDE0fSwgXAorICAgIHsgICAgMzgzLDEyfSwgeyAgIDE1MzUsMTN9LCB7ICAgIDgzMSwxMn0sIHsgICAxNjYzLDEzfSwgXAorICAgIHsgICAgODk1LDEyfSwgeyAgIDE3OTEsMTF9LCB7ICAgMzU4MywxNX0sIHsgICAgMjU1LDE0fSwgXAorICAgIHsgICAgNTExLDEzfSwgeyAgIDExNTEsMTR9LCB7ICAgIDYzOSwxM30sIHsgICAxMjc5LDEyfSwgXAorICAgIHsgICAyNTU5LDEzfSwgeyAgIDE0MDcsMTJ9LCB7ICAgMjgxNSwxNH0sIHsgICAgNzY3LDEzfSwgXAorICAgIHsgICAxNjYzLDEwfSwgeyAgMTMzMTEsMTR9LCB7ICAgIDg5NSwxM30sIHsgICAxNzkxLDEyfSwgXAorICAgIHsgICAzNTgzLDEzfSwgeyAgIDE5MTksMTJ9LCB7ICAgMzgzOSwxMH0sIHsgIDE1MzU5LDE0fSwgXAorICAgIHsgICAxMTUxLDEzfSwgeyAgIDI0MzEsMTJ9LCB7ICAgNDg2MywxNH0sIHsgICAxMjc5LDEzfSwgXAorICAgIHsgICAyNTU5LDE0fSwgeyAgIDE0MDcsMTN9LCB7ICAgMjgxNSwxNX0sIHsgICAgNzY3LDE0fSwgXAorICAgIHsgICAxNzkxLDEzfSwgeyAgIDgxOTIsMTR9LCB7ICAxNjM4NCwxNX0sIHsgIDMyNzY4LDE2fSwgXAorICAgIHsgIDY1NTM2LDE3fSwgeyAxMzEwNzIsMTh9LCB7IDI2MjE0NCwxOX0sIHsgNTI0Mjg4LDIwfSwgXAorICAgIHsxMDQ4NTc2LDIxfSwgezIwOTcxNTIsMjJ9LCB7NDE5NDMwNCwyM30sIHs4Mzg4NjA4LDI0fSB9CisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzX1NJWkUgMjAwCisjZGVmaW5lIE1VTF9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAxNzI4CisKKyNkZWZpbmUgU1FSX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICAyMTIgIC8qIGsgPSA1ICovCisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICAyMTIsIDV9LCB7ICAgICAgNywgNH0sIHsgICAgIDE1LCA1fSwgeyAgICAgIDksIDR9LCBcCisgICAgeyAgICAgMTksIDZ9LCB7ICAgICAgNSwgNX0sIHsgICAgIDExLCA2fSwgeyAgICAgIDYsIDV9LCBcCisgICAgeyAgICAgMTMsIDZ9LCB7ICAgICAgNywgNX0sIHsgICAgIDE1LCA2fSwgeyAgICAgIDksIDV9LCBcCisgICAgeyAgICAgMTksIDZ9LCB7ICAgICAxMywgN30sIHsgICAgICA3LCA2fSwgeyAgICAgMTUsIDd9LCBcCisgICAgeyAgICAgIDksIDZ9LCB7ICAgICAxOSwgN30sIHsgICAgIDEzLCA4fSwgeyAgICAgIDcsIDd9LCBcCisgICAgeyAgICAgMTYsIDh9LCB7ICAgICAgOSwgN30sIHsgICAgIDE5LCA4fSwgeyAgICAgMTEsIDd9LCBcCisgICAgeyAgICAgMjMsIDh9LCB7ICAgICAxMywgOX0sIHsgICAgICA3LCA4fSwgeyAgICAgMTksIDl9LCBcCisgICAgeyAgICAgMTEsIDh9LCB7ICAgICAyNSwxMH0sIHsgICAgICA3LCA5fSwgeyAgICAgMTUsIDh9LCBcCisgICAgeyAgICAgMzEsIDl9LCB7ICAgICAyMywxMH0sIHsgICAgIDE1LCA5fSwgeyAgICAgMzksMTB9LCBcCisgICAgeyAgICAgMjMsMTF9LCB7ICAgICAxNSwxMH0sIHsgICAgIDMxLCA5fSwgeyAgICAgNjMsMTB9LCBcCisgICAgeyAgICAgNDcsMTF9LCB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA5fSwgeyAgICAxMjcsIDh9LCBcCisgICAgeyAgICAyNTUsMTB9LCB7ICAgICA3MSwgOX0sIHsgICAgMTQzLCA4fSwgeyAgICAyODcsIDd9LCBcCisgICAgeyAgICA1NzUsMTF9LCB7ICAgICA0NywxMn0sIHsgICAgIDMxLDExfSwgeyAgICAgNjMsMTB9LCBcCisgICAgeyAgICAxMjcsIDl9LCB7ICAgIDI1NSwgOH0sIHsgICAgNTExLDEwfSwgeyAgICAxNDMsIDl9LCBcCisgICAgeyAgICAyODcsIDh9LCB7ICAgIDU3NSwgN30sIHsgICAxMTUxLDExfSwgeyAgICAgNzksMTB9LCBcCisgICAgeyAgICAxNTksIDl9LCB7ICAgIDMxOSwxMH0sIHsgICAgMTc1LCA5fSwgeyAgICAzNTEsIDh9LCBcCisgICAgeyAgICA3MDMsIDd9LCB7ICAgMTQwNywxMH0sIHsgICAgMTkxLCA5fSwgeyAgICAzODMsMTB9LCBcCisgICAgeyAgICAyMDcsMTF9LCB7ICAgIDExMSwxMH0sIHsgICAgMjIzLDEyfSwgeyAgICAgNjMsMTF9LCBcCisgICAgeyAgICAxMjcsMTB9LCB7ICAgIDI1NSwgOX0sIHsgICAgNTExLDExfSwgeyAgICAxNDMsMTB9LCBcCisgICAgeyAgICAyODcsIDl9LCB7ICAgIDU3NSwgOH0sIHsgICAxMTUxLDExfSwgeyAgICAxNTksMTB9LCBcCisgICAgeyAgICAzMTksIDl9LCB7ICAgIDYzOSwxMX0sIHsgICAgMTc1LDEwfSwgeyAgICAzNTEsIDl9LCBcCisgICAgeyAgICA3MDMsIDh9LCB7ICAgMTQwNywxMX0sIHsgICAgMTkxLDEwfSwgeyAgICAzODMsMTF9LCBcCisgICAgeyAgICAyMDcsMTB9LCB7ICAgIDQxNSwxMX0sIHsgICAgMjIzLDEwfSwgeyAgICA0NDcsMTN9LCBcCisgICAgeyAgICAgNjMsMTJ9LCB7ICAgIDEyNywxMX0sIHsgICAgMjU1LDEwfSwgeyAgICA1MTEsMTF9LCBcCisgICAgeyAgICAyODcsMTB9LCB7ICAgIDU3NSwgOX0sIHsgICAxMTUxLDEyfSwgeyAgICAxNTksMTF9LCBcCisgICAgeyAgICAzMTksMTB9LCB7ICAgIDYzOSwxMX0sIHsgICAgMzUxLDEwfSwgeyAgICA3MDMsIDl9LCBcCisgICAgeyAgIDE0MDcsMTJ9LCB7ICAgIDE5MSwxMX0sIHsgICAgMzgzLDEwfSwgeyAgICA3NjcsMTF9LCBcCisgICAgeyAgICA0MTUsMTJ9LCB7ICAgIDIyMywxMX0sIHsgICAgNDQ3LDEwfSwgeyAgICA4OTUsIDl9LCBcCisgICAgeyAgIDE3OTEsMTN9LCB7ICAgIDEyNywxMn0sIHsgICAgMjU1LDExfSwgeyAgICA1MTEsMTJ9LCBcCisgICAgeyAgICAyODcsMTF9LCB7ICAgIDU3NSwxMH0sIHsgICAxMTUxLDExfSwgeyAgICA2MDcsMTJ9LCBcCisgICAgeyAgICAzMTksMTF9LCB7ICAgIDYzOSwxMn0sIHsgICAgMzUxLDExfSwgeyAgICA3MDMsMTB9LCBcCisgICAgeyAgIDE0MDcsMTN9LCB7ICAgIDE5MSwxMn0sIHsgICAgMzgzLDExfSwgeyAgICA3NjcsMTJ9LCBcCisgICAgeyAgICA0MTUsMTF9LCB7ICAgIDgzMSwxMH0sIHsgICAxNjYzLDEyfSwgeyAgICA0NDcsMTF9LCBcCisgICAgeyAgICA4OTUsMTB9LCB7ICAgMTc5MSwxNH0sIHsgICAgMTI3LDEzfSwgeyAgICAyNTUsMTJ9LCBcCisgICAgeyAgICA1MTEsMTF9LCB7ICAgMTAyMywxMH0sIHsgICAyMDQ3LDExfSwgeyAgIDExNTEsMTJ9LCBcCisgICAgeyAgICA2MDcsMTN9LCB7ICAgIDMxOSwxMX0sIHsgICAxMjc5LCA5fSwgeyAgIDUxMTksIDh9LCBcCisgICAgeyAgMTA3NTEsIDR9LCB7IDE3MjAzMSwgN30sIHsgIDIyMDE1LDExfSwgeyAgIDE0MDcsMTB9LCBcCisgICAgeyAgIDI5NDMsIDh9LCB7ICAxMTc3NSwgOX0sIHsgICA2MTQzLDEyfSwgeyAgICA4MzEsIDh9LCBcCisgICAgeyAgMTMzMTEsMTF9LCB7ICAgMTc5MSwxNH0sIHsgICAgMjU1LDExfSwgeyAgIDIwNDcsMTN9LCBcCisgICAgeyAgICA1NzUsMTJ9LCB7ICAgMTE1MSwxM30sIHsgICAgNjM5LDEyfSwgeyAgIDEyNzksMTN9LCBcCisgICAgeyAgICA3MDMsMTJ9LCB7ICAgMTQwNywxMX0sIHsgICAyODE1LDEyfSwgeyAgIDE0NzEsIDl9LCBcCisgICAgeyAgMTE3NzUsMTN9LCB7ICAgIDc2NywxMn0sIHsgICAxNTM1LDEzfSwgeyAgICA4MzEsMTJ9LCBcCisgICAgeyAgIDE2NjMsMTN9LCB7ICAgIDg5NSwxMX0sIHsgICAzNTgzLDEzfSwgeyAgICA5NTksMTJ9LCBcCisgICAgeyAgIDE5MTksMTB9LCB7ICAgNzY3OSwgOX0sIHsgIDE1MzU5LDExfSwgeyAgIDM5NjcsMTR9LCBcCisgICAgeyAgICA1MTEsMTN9LCB7ICAgMTE1MSwxMn0sIHsgICAyMzAzLDEzfSwgeyAgIDEyMTUsMTR9LCBcCisgICAgeyAgICA2MzksMTN9LCB7ICAgMTI3OSwxMn0sIHsgICAyNTU5LDE0fSwgeyAgICA3NjcsMTN9LCBcCisgICAgeyAgIDE2NjMsMTR9LCB7ICAgIDg5NSwxNX0sIHsgICAgNTExLDEzfSwgeyAgIDIwNDcsMTR9LCBcCisgICAgeyAgIDEyNzksMTN9LCB7ICAgMjgxNSwxNX0sIHsgICAgNzY3LDE0fSwgeyAgIDE3OTEsMTN9LCBcCisgICAgeyAgIDM1ODMsMTZ9LCB7ICA2NTUzNiwxN30sIHsgMTMxMDcyLDE4fSwgeyAyNjIxNDQsMTl9LCBcCisgICAgeyA1MjQyODgsMjB9LCB7MTA0ODU3NiwyMX0sIHsyMDk3MTUyLDIyfSwgezQxOTQzMDQsMjN9LCBcCisgICAgezgzODg2MDgsMjR9IH0KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTNfU0laRSAyMDEKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDEzNDQKKworI2RlZmluZSBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDMzCisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgICAyNTg2CisjZGVmaW5lIFNRUkxPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgU1FSTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgNjMKKyNkZWZpbmUgU1FSTE9fU1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDI2NjMKKworI2RlZmluZSBEQ19ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAzNworI2RlZmluZSBEQ19ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgIDE0MworI2RlZmluZSBEQ19CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzNworI2RlZmluZSBEQ19CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA4NgorCisjZGVmaW5lIElOVl9NVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgIDE2CisjZGVmaW5lIElOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAgMTQ3CisjZGVmaW5lIElOVl9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTQxCisKKyNkZWZpbmUgQklOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAxNDEKKyNkZWZpbmUgUkVEQ18xX1RPX1JFRENfTl9USFJFU0hPTEQgICAgICAgICAgMzkKKworI2RlZmluZSBNVV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDgwNworI2RlZmluZSBNVV9ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgIDgwNworI2RlZmluZSBNVVBJX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICA4MQorI2RlZmluZSBNVV9CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDY1NAorI2RlZmluZSBNVV9CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDc5MgorCisjZGVmaW5lIFBPV01fU0VDX1RBQkxFICAxLDI4LDE2MywxMDgzLDIxMTEKKworI2RlZmluZSBHRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxOQorI2RlZmluZSBHRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgICAzMworI2RlZmluZSBTRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDg5OAorI2RlZmluZSBTRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgMjAzMQorCisjZGVmaW5lIEZBQ19EU0NfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgMzcyCisjZGVmaW5lIEZBQ19PRERfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDIzCisKKyNkZWZpbmUgTUFUUklYMjJfU1RSQVNTRU5fVEhSRVNIT0xEICAgICAgICAgMTcKKyNkZWZpbmUgSEdDRF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgICAxMDUKKyNkZWZpbmUgSEdDRF9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMTEKKyNkZWZpbmUgSEdDRF9SRURVQ0VfVEhSRVNIT0xEICAgICAgICAgICAgIDExMzcKKyNkZWZpbmUgR0NEX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAyODUKKyNkZWZpbmUgR0NERVhUX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyMTAKKyNkZWZpbmUgSkFDT0JJX0JBU0VfTUVUSE9EICAgICAgICAgICAgICAgICAgIDQKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc2gvYWRkX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zaC9hZGRfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlkMTdkMAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc2gvYWRkX24uYXNtCkBAIC0wLDAgKzEsNTkgQEAKK2RubCAgU0ggbXBuX2FkZF9uIC0tIEFkZCB0d28gbGltYiB2ZWN0b3JzIG9mIHRoZSBzYW1lIGxlbmd0aCA+IDAgYW5kIHN0b3JlIHN1bQorZG5sICBpbiBhIHRoaXJkIGxpbWIgdmVjdG9yLgorCitkbmwgIENvcHlyaWdodCAxOTk1LCAxOTk3LCAyMDAwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBJTlBVVCBQQVJBTUVURVJTCitDIHJwCQlyNAorQyB1cAkJcjUKK0MgdnAJCXI2CitDIG4JCXI3CisKK2NoYW5nZWNvbShibGFoKQkJCUMgZGlzYWJsZSAjIHRvIG1ha2UgYWxsIEMgY29tbWVudHMgYmVsb3cgd29yaworCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2FkZF9uKQorCW1vdgkjMCxyMwkJQyBjbGVhciBjeSBzYXZlIHJlZworCitMKHRvcCk6CW1vdi5sCUByNSsscjEKKwltb3YubAlAcjYrLHIyCisJc2hscglyMwkJQyByZXN0b3JlIGN5CisJYWRkYwlyMixyMQorCW1vdnQJcjMJCUMgc2F2ZSBjeQorCW1vdi5sCXIxLEByNAorCWR0CXI3CisJYmYucwlMKHRvcCkKKwkgYWRkCSM0LHI0CisKKwlydHMKKwltb3YJcjMscjAJCUMgcmV0dXJuIGNhcnJ5LW91dCBmcm9tIG1vc3Qgc2lnbmlmaWNhbnQgbGltYgorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zaC9zaDIvYWRkbXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zaC9zaDIvYWRkbXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MTRiMjkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NoL3NoMi9hZGRtdWxfMS5hc20KQEAgLTAsMCArMSw2NSBAQAorZG5sICBTSDIgbXBuX2FkZG11bF8xIC0tIE11bHRpcGx5IGEgbGltYiB2ZWN0b3Igd2l0aCBhIGxpbWIgYW5kIGFkZCB0aGUgcmVzdWx0CitkbmwgIHRvIGEgc2Vjb25kIGxpbWIgdmVjdG9yLgorCitkbmwgIENvcHlyaWdodCAxOTk1LCAyMDAwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBJTlBVVCBQQVJBTUVURVJTCitDIHJlc19wdHIJcjQKK0MgczFfcHRyCXI1CitDIHNpemUJCXI2CitDIHMyX2xpbWIJcjcKKworY2hhbmdlY29tKGJsYWgpCQkJQyBkaXNhYmxlICMgdG8gbWFrZSBhbGwgQyBjb21tZW50cyBiZWxvdyB3b3JrCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fYWRkbXVsXzEpCisJbW92CSMwLHIyCQlDIGN5X2xpbWIgPSAwCisJbW92CSMwLHIwCQlDIEtlZXAgcjAgPSAwIGZvciBlbnRpcmUgbG9vcAorCWNscnQKKworTCh0b3ApOgltb3YubAlAcjUrLHIzCisJZG11bHUubAlyMyxyNworCXN0cwltYWNsLHIxCisJYWRkYwlyMixyMQkJQyBsb19wcm9kICs9IG9sZCBjeV9saW1iCisJc3RzCW1hY2gscjIJCUMgbmV3IGN5X2xpbWIgPSBoaV9wcm9kCisJbW92LmwJQHI0LHIzCisJYWRkYwlyMCxyMgkJQyBjeV9saW1iICs9IFQsIFQgPSAwCisJYWRkYwlyMyxyMQorCWFkZGMJcjAscjIJCUMgY3lfbGltYiArPSBULCBUID0gMAorCWR0CXI2CisJbW92LmwJcjEsQHI0CisJYmYucwlMKHRvcCkKKwlhZGQJIzQscjQKKworCXJ0cworCW1vdglyMixyMAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zaC9zaDIvbXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zaC9zaDIvbXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNTQ4YTYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NoL3NoMi9tdWxfMS5hc20KQEAgLTAsMCArMSw2MiBAQAorZG5sICBTSDIgbXBuX211bF8xIC0tIE11bHRpcGx5IGEgbGltYiB2ZWN0b3Igd2l0aCBhIGxpbWIgYW5kIHN0b3JlIHRoZSByZXN1bHQKK2RubCAgaW4gYSBzZWNvbmQgbGltYiB2ZWN0b3IuCisKK2RubCAgQ29weXJpZ2h0IDE5OTUsIDIwMDAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDIElOUFVUIFBBUkFNRVRFUlMKK0MgcmVzX3B0cglyNAorQyBzMV9wdHIJcjUKK0Mgc2l6ZQkJcjYKK0MgczJfbGltYglyNworCitjaGFuZ2Vjb20oYmxhaCkJCQlDIGRpc2FibGUgIyB0byBtYWtlIGFsbCBDIGNvbW1lbnRzIGJlbG93IHdvcmsKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9tdWxfMSkKKwltb3YJIzAscjIJCUMgY3lfbGltYiA9IDAKKwltb3YJIzAscjAJCUMgS2VlcCByMCA9IDAgZm9yIGVudGlyZSBsb29wCisJY2xydAorCitMKHRvcCk6CW1vdi5sCUByNSsscjMKKwlkbXVsdS5sCXIzLHI3CisJc3RzCW1hY2wscjEKKwlhZGRjCXIyLHIxCisJc3RzCW1hY2gscjIKKwlhZGRjCXIwLHIyCQlDIHByb3BhZ2F0ZSBjYXJyeSB0byBjeV9saW1iIChkdCBjbG9iYmVycyBUKQorCWR0CXI2CisJbW92LmwJcjEsQHI0CisJYmYucwlMKHRvcCkKKwlhZGQJIzQscjQKKworCXJ0cworCW1vdglyMixyMAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zaC9zaDIvc3VibXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zaC9zaDIvc3VibXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZjJhYmQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NoL3NoMi9zdWJtdWxfMS5hc20KQEAgLTAsMCArMSw2NSBAQAorZG5sICBTSDIgbXBuX3N1Ym11bF8xIC0tIE11bHRpcGx5IGEgbGltYiB2ZWN0b3Igd2l0aCBhIGxpbWIgYW5kIHN1YnRyYWN0IHRoZQorZG5sICByZXN1bHQgZnJvbSBhIHNlY29uZCBsaW1iIHZlY3Rvci4KKworZG5sICBDb3B5cmlnaHQgMTk5NSwgMjAwMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyByZXNfcHRyCXI0CitDIHMxX3B0cglyNQorQyBzaXplCQlyNgorQyBzMl9saW1iCXI3CisKK2NoYW5nZWNvbShibGFoKQkJCUMgZGlzYWJsZSAjIHRvIG1ha2UgYWxsIEMgY29tbWVudHMgYmVsb3cgd29yaworCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX3N1Ym11bF8xKQorCW1vdgkjMCxyMgkJQyBjeV9saW1iID0gMAorCW1vdgkjMCxyMAkJQyBLZWVwIHIwID0gMCBmb3IgZW50aXJlIGxvb3AKKwljbHJ0CisKK0wodG9wKToJbW92LmwJQHI1KyxyMworCWRtdWx1LmwJcjMscjcKKwlzdHMJbWFjbCxyMQorCWFkZGMJcjIscjEJCUMgbG9fcHJvZCArPSBvbGQgY3lfbGltYgorCXN0cwltYWNoLHIyCQlDIG5ldyBjeV9saW1iID0gaGlfcHJvZAorCW1vdi5sCUByNCxyMworCWFkZGMJcjAscjIJCUMgY3lfbGltYiArPSBULCBUID0gMAorCXN1YmMJcjEscjMKKwlhZGRjCXIwLHIyCQlDIGN5X2xpbWIgKz0gVCwgVCA9IDAKKwlkdAlyNgorCW1vdi5sCXIzLEByNAorCWJmLnMJTCh0b3ApCisJYWRkCSM0LHI0CisKKwlydHMKKwltb3YJcjIscjAKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc2gvc3ViX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zaC9zdWJfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY1YmM4MAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc2gvc3ViX24uYXNtCkBAIC0wLDAgKzEsNTkgQEAKK2RubCAgU0ggbXBuX3N1Yl9uIC0tIFN1YnRyYWN0IHR3byBsaW1iIHZlY3RvcnMgb2YgdGhlIHNhbWUgbGVuZ3RoID4gMCBhbmQgc3RvcmUKK2RubCAgZGlmZmVyZW5jZSBpbiBhIHRoaXJkIGxpbWIgdmVjdG9yLgorCitkbmwgIENvcHlyaWdodCAxOTk1LCAxOTk3LCAyMDAwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBJTlBVVCBQQVJBTUVURVJTCitDIHJwCQlyNAorQyB1cAkJcjUKK0MgdnAJCXI2CitDIG4JCXI3CisKK2NoYW5nZWNvbShibGFoKQkJCUMgZGlzYWJsZSAjIHRvIG1ha2UgYWxsIEMgY29tbWVudHMgYmVsb3cgd29yaworCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX3N1Yl9uKQorCW1vdgkjMCxyMwkJQyBjbGVhciBjeSBzYXZlIHJlZworCitMKHRvcCk6CW1vdi5sCUByNSsscjEKKwltb3YubAlAcjYrLHIyCisJc2hscglyMwkJQyByZXN0b3JlIGN5CisJc3ViYwlyMixyMQorCW1vdnQJcjMJCUMgc2F2ZSBjeQorCW1vdi5sCXIxLEByNAorCWR0CXI3CisJYmYucwlMKHRvcCkKKwkgYWRkCSM0LHI0CisKKwlydHMKKwltb3YJcjMscjAJCUMgcmV0dXJuIGNhcnJ5LW91dCBmcm9tIG1vc3Qgc2lnbmlmaWNhbnQgbGltYgorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL1JFQURNRSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmMzMi9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJkZDExNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmMzMi9SRUFETUUKQEAgLTAsMCArMSw3MSBAQAorQ29weXJpZ2h0IDE5OTYsIDIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCisKKworCitUaGlzIGRpcmVjdG9yeSBjb250YWlucyBtcG4gZnVuY3Rpb25zIGZvciB2YXJpb3VzIFNQQVJDIGNoaXBzLiAgQ29kZSB0aGF0CitydW5zIG9ubHkgb24gdmVyc2lvbiA4IFNQQVJDIGltcGxlbWVudGF0aW9ucywgaXMgaW4gdGhlIHY4IHN1YmRpcmVjdG9yeS4KKworUkVMRVZBTlQgT1BUSU1JWkFUSU9OIElTU1VFUworCisgIExvYWQgYW5kIFN0b3JlIHRpbWluZworCitPbiBtb3N0IGVhcmx5IFNQQVJDIGltcGxlbWVudGF0aW9ucywgdGhlIFNUIGluc3RydWN0aW9ucyB0YWtlcyBtdWx0aXBsZQorY3ljbGVzLCB3aGlsZSBhIFNURCB0YWtlcyBqdXN0IGEgc2luZ2xlIGN5Y2xlIG1vcmUgdGhhbiBhbiBTVC4gIEZvciB0aGUgQ1BVcworaW4gU1BBUkNzdGF0aW9uIEkgYW5kIElJLCB0aGUgdGltZXMgYXJlIDMgYW5kIDQgY3ljbGVzLCByZXNwZWN0aXZlbHkuCitUaGVyZWZvcmUsIGNvbWJpbmluZyB0d28gU1QgaW5zdHJ1Y3Rpb25zIGludG8gYSBTVEQgd2hlbiBwb3NzaWJsZSBpcyBhCitzaWduaWZpY2FudCBvcHRpbWl6YXRpb24uCisKK0xhdGVyIFNQQVJDIGltcGxlbWVudGF0aW9ucyBoYXZlIHNpbmdsZSBjeWNsZSBTVC4KKworRm9yIFN1cGVyU1BBUkMsIHdlIGNhbiBwZXJmb3JtIGp1c3Qgb25lIG1lbW9yeSBpbnN0cnVjdGlvbiBwZXIgY3ljbGUsIGV2ZW4KK2lmIHVwIHRvIHR3byBpbnRlZ2VyIGluc3RydWN0aW9ucyBjYW4gYmUgZXhlY3V0ZWQgaW4gaXRzIHBpcGVsaW5lLiAgRm9yCitwcm9ncmFtcyB0aGF0IHBlcmZvcm0gc28gbWFueSBtZW1vcnkgb3BlcmF0aW9ucyB0aGF0IHRoZXJlIGFyZSBub3QgZW5vdWdoCitub24tbWVtb3J5IG9wZXJhdGlvbnMgdG8gaXNzdWUgaW4gcGFyYWxsZWwgd2l0aCBhbGwgbWVtb3J5IG9wZXJhdGlvbnMsIHVzaW5nCitMREQgYW5kIFNURCB3aGVuIHBvc3NpYmxlIGhlbHBzLgorCitVbHRyYVNQQVJDLTEvMiBoYXMgdmVyeSBzbG93IGludGVnZXIgbXVsdGlwbGljYXRpb24uICBJbiB0aGUgdjkgc3ViZGlyZWN0b3J5LAord2UgdGhlcmVmb3JlIHVzZSBmbG9hdGluZy1wb2ludCBtdWx0aXBsaWNhdGlvbi4KKworU1RBVFVTCisKKzEuIE9uIGEgU3VwZXJTUEFSQywgbXBuX2xzaGlmdCBhbmQgbXBuX3JzaGlmdCBydW4gYXQgMyBjeWNsZXMvbGltYiwgb3IgMi41CisgICBjeWNsZXMvbGltYiBhc3ltcHRvdGljYWxseS4gIFdlIGNvdWxkIG9wdGltaXplIHNwZWVkIGZvciBzcGVjaWFsIGNvdW50cworICAgYnkgdXNpbmcgQUREWENDLgorCisyLiBPbiBhIFN1cGVyU1BBUkMsIG1wbl9hZGRfbiBhbmQgbXBuX3N1Yl9uIHJ1bnMgYXQgMi41IGN5Y2xlcy9saW1iLCBvciAyCisgICBjeWNsZXMvbGltYiBhc3ltcHRvdGljYWxseS4KKworMy4gbXBuX211bF8xIHJ1bnMgYXQgd2hhdCBpcyBiZWxpZXZlZCB0byBiZSBvcHRpbWFsIHNwZWVkLgorCis0LiBPbiBTdXBlclNQQVJDLCBtcG5fYWRkbXVsXzEgYW5kIG1wbl9zdWJtdWxfMSBjb3VsZCBib3RoIGJlIGltcHJvdmVkIGJ5IGEKKyAgIGN5Y2xlIGJ5IGF2b2lkaW5nIG9uZSBvZiB0aGUgYWRkIGluc3RydWN0aW9ucy4gIFNlZSBhMjlrL2FkZG11bF8xLgorCitUaGUgc3BlZWQgb2YgdGhlIGNvZGUgZm9yIG90aGVyIFNQQVJDIGltcGxlbWVudGF0aW9ucyBpcyB1bmNlcnRhaW4uCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjMzIvYWRkX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL2FkZF9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTQ5MTk1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL2FkZF9uLmFzbQpAQCAtMCwwICsxLDI0NSBAQAorZG5sICBTUEFSQyBtcG5fYWRkX24gLS0gQWRkIHR3byBsaW1iIHZlY3RvcnMgb2YgdGhlIHNhbWUgbGVuZ3RoID4gMCBhbmQgc3RvcmUKK2RubCAgc3VtIGluIGEgdGhpcmQgbGltYiB2ZWN0b3IuCisKK2RubCAgQ29weXJpZ2h0IDE5OTUsIDE5OTYsIDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShyZXNfcHRyLCVvMCkKK2RlZmluZShzMV9wdHIsJW8xKQorZGVmaW5lKHMyX3B0ciwlbzIpCitkZWZpbmUobiwlbzMpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fYWRkX24pCisJeG9yCXMyX3B0cixyZXNfcHRyLCVnMQorCWFuZGNjCSVnMSw0LCVnMAorCWJuZQlMKDEpCQkJQyBicmFuY2ggaWYgYWxpZ25tZW50IGRpZmZlcnMKKwlub3AKK0MgKiogIFYxYSAgKioKK0woMCk6CWFuZGNjCXJlc19wdHIsNCwlZzAJCUMgcmVzX3B0ciB1bmFsaWduZWQ/IFNpZGUgZWZmZWN0OiBjeT0wCisJYmUJTCh2MSkJCQlDIGlmIG5vLCBicmFuY2gKKwlub3AKK0MgQWRkIGxlYXN0IHNpZ25pZmljYW50IGxpbWIgc2VwYXJhdGVseSB0byBhbGlnbiByZXNfcHRyIGFuZCBzMl9wdHIKKwlsZAlbczFfcHRyXSwlZzQKKwlhZGQJczFfcHRyLDQsczFfcHRyCisJbGQJW3MyX3B0cl0sJWcyCisJYWRkCXMyX3B0ciw0LHMyX3B0cgorCWFkZAluLC0xLG4KKwlhZGRjYwklZzQsJWcyLCVvNAorCXN0CSVvNCxbcmVzX3B0cl0KKwlhZGQJcmVzX3B0ciw0LHJlc19wdHIKK0wodjEpOglhZGR4CSVnMCwlZzAsJW80CQlDIHNhdmUgY3kgaW4gcmVnaXN0ZXIKKwljbXAJbiwyCQkJQyBpZiBuIDwgMiAuLi4KKwlibAlMKGVuZDIpCQkJQyAuLi4gYnJhbmNoIHRvIHRhaWwgY29kZQorCXN1YmNjCSVnMCwlbzQsJWcwCQlDIHJlc3RvcmUgY3kKKworCWxkCVtzMV9wdHIrMF0sJWc0CisJYWRkY2MJbiwtMTAsbgorCWxkCVtzMV9wdHIrNF0sJWcxCisJbGRkCVtzMl9wdHIrMF0sJWcyCisJYmx0CUwoZmluMSkKKwlzdWJjYwklZzAsJW80LCVnMAkJQyByZXN0b3JlIGN5CitDIEFkZCBibG9ja3Mgb2YgOCBsaW1icyB1bnRpbCBsZXNzIHRoYW4gOCBsaW1icyByZW1haW4KK0wobG9vcDEpOgorCWFkZHhjYwklZzQsJWcyLCVvNAorCWxkCVtzMV9wdHIrOF0sJWc0CisJYWRkeGNjCSVnMSwlZzMsJW81CisJbGQJW3MxX3B0cisxMl0sJWcxCisJbGRkCVtzMl9wdHIrOF0sJWcyCisJc3RkCSVvNCxbcmVzX3B0ciswXQorCWFkZHhjYwklZzQsJWcyLCVvNAorCWxkCVtzMV9wdHIrMTZdLCVnNAorCWFkZHhjYwklZzEsJWczLCVvNQorCWxkCVtzMV9wdHIrMjBdLCVnMQorCWxkZAlbczJfcHRyKzE2XSwlZzIKKwlzdGQJJW80LFtyZXNfcHRyKzhdCisJYWRkeGNjCSVnNCwlZzIsJW80CisJbGQJW3MxX3B0cisyNF0sJWc0CisJYWRkeGNjCSVnMSwlZzMsJW81CisJbGQJW3MxX3B0cisyOF0sJWcxCisJbGRkCVtzMl9wdHIrMjRdLCVnMgorCXN0ZAklbzQsW3Jlc19wdHIrMTZdCisJYWRkeGNjCSVnNCwlZzIsJW80CisJbGQJW3MxX3B0ciszMl0sJWc0CisJYWRkeGNjCSVnMSwlZzMsJW81CisJbGQJW3MxX3B0ciszNl0sJWcxCisJbGRkCVtzMl9wdHIrMzJdLCVnMgorCXN0ZAklbzQsW3Jlc19wdHIrMjRdCisJYWRkeAklZzAsJWcwLCVvNAkJQyBzYXZlIGN5IGluIHJlZ2lzdGVyCisJYWRkY2MJbiwtOCxuCisJYWRkCXMxX3B0ciwzMixzMV9wdHIKKwlhZGQJczJfcHRyLDMyLHMyX3B0cgorCWFkZAlyZXNfcHRyLDMyLHJlc19wdHIKKwliZ2UJTChsb29wMSkKKwlzdWJjYwklZzAsJW80LCVnMAkJQyByZXN0b3JlIGN5CisKK0woZmluMSk6CisJYWRkY2MJbiw4LTIsbgorCWJsdAlMKGVuZDEpCisJc3ViY2MJJWcwLCVvNCwlZzAJCUMgcmVzdG9yZSBjeQorQyBBZGQgYmxvY2tzIG9mIDIgbGltYnMgdW50aWwgbGVzcyB0aGFuIDIgbGltYnMgcmVtYWluCitMKGxvb3BlMSk6CisJYWRkeGNjCSVnNCwlZzIsJW80CisJbGQJW3MxX3B0cis4XSwlZzQKKwlhZGR4Y2MJJWcxLCVnMywlbzUKKwlsZAlbczFfcHRyKzEyXSwlZzEKKwlsZGQJW3MyX3B0cis4XSwlZzIKKwlzdGQJJW80LFtyZXNfcHRyKzBdCisJYWRkeAklZzAsJWcwLCVvNAkJQyBzYXZlIGN5IGluIHJlZ2lzdGVyCisJYWRkY2MJbiwtMixuCisJYWRkCXMxX3B0ciw4LHMxX3B0cgorCWFkZAlzMl9wdHIsOCxzMl9wdHIKKwlhZGQJcmVzX3B0ciw4LHJlc19wdHIKKwliZ2UJTChsb29wZTEpCisJc3ViY2MJJWcwLCVvNCwlZzAJCUMgcmVzdG9yZSBjeQorTChlbmQxKToKKwlhZGR4Y2MJJWc0LCVnMiwlbzQKKwlhZGR4Y2MJJWcxLCVnMywlbzUKKwlzdGQJJW80LFtyZXNfcHRyKzBdCisJYWRkeAklZzAsJWcwLCVvNAkJQyBzYXZlIGN5IGluIHJlZ2lzdGVyCisKKwlhbmRjYwluLDEsJWcwCisJYmUJTChyZXQxKQorCXN1YmNjCSVnMCwlbzQsJWcwCQlDIHJlc3RvcmUgY3kKK0MgQWRkIGxhc3QgbGltYgorCWxkCVtzMV9wdHIrOF0sJWc0CisJbGQJW3MyX3B0cis4XSwlZzIKKwlhZGR4Y2MJJWc0LCVnMiwlbzQKKwlzdAklbzQsW3Jlc19wdHIrOF0KKworTChyZXQxKToKKwlyZXRsCisJYWRkeAklZzAsJWcwLCVvMAlDIHJldHVybiBjYXJyeS1vdXQgZnJvbSBtb3N0IHNpZ24uIGxpbWIKKworTCgxKToJeG9yCXMxX3B0cixyZXNfcHRyLCVnMQorCWFuZGNjCSVnMSw0LCVnMAorCWJuZQlMKDIpCisJbm9wCitDICoqICBWMWIgICoqCisJbW92CXMyX3B0ciwlZzEKKwltb3YJczFfcHRyLHMyX3B0cgorCWIJTCgwKQorCW1vdgklZzEsczFfcHRyCisKK0MgKiogIFYyICAqKgorQyBJZiB3ZSBjb21lIGhlcmUsIHRoZSBhbGlnbm1lbnQgb2YgczFfcHRyIGFuZCByZXNfcHRyIGFzIHdlbGwgYXMgdGhlCitDIGFsaWdubWVudCBvZiBzMl9wdHIgYW5kIHJlc19wdHIgZGlmZmVyLiAgU2luY2UgdGhlcmUgYXJlIG9ubHkgdHdvIHdheXMKK0MgdGhpbmdzIGNhbiBiZSBhbGlnbmVkICh0aGF0IHdlIGNhcmUgYWJvdXQpIHdlIG5vdyBrbm93IHRoYXQgdGhlIGFsaWdubWVudAorQyBvZiBzMV9wdHIgYW5kIHMyX3B0ciBhcmUgdGhlIHNhbWUuCisKK0woMik6CWNtcAluLDEKKwliZQlMKGpvbmUpCisJbm9wCisJYW5kY2MJczFfcHRyLDQsJWcwCQlDIHMxX3B0ciB1bmFsaWduZWQ/IFNpZGUgZWZmZWN0OiBjeT0wCisJYmUJTCh2MikJCQlDIGlmIG5vLCBicmFuY2gKKwlub3AKK0MgQWRkIGxlYXN0IHNpZ25pZmljYW50IGxpbWIgc2VwYXJhdGVseSB0byBhbGlnbiBzMV9wdHIgYW5kIHMyX3B0cgorCWxkCVtzMV9wdHJdLCVnNAorCWFkZAlzMV9wdHIsNCxzMV9wdHIKKwlsZAlbczJfcHRyXSwlZzIKKwlhZGQJczJfcHRyLDQsczJfcHRyCisJYWRkCW4sLTEsbgorCWFkZGNjCSVnNCwlZzIsJW80CisJc3QJJW80LFtyZXNfcHRyXQorCWFkZAlyZXNfcHRyLDQscmVzX3B0cgorCitMKHYyKToJYWRkeAklZzAsJWcwLCVvNAkJQyBzYXZlIGN5IGluIHJlZ2lzdGVyCisJYWRkY2MJbiwtOCxuCisJYmx0CUwoZmluMikKKwlzdWJjYwklZzAsJW80LCVnMAkJQyByZXN0b3JlIGN5CitDIEFkZCBibG9ja3Mgb2YgOCBsaW1icyB1bnRpbCBsZXNzIHRoYW4gOCBsaW1icyByZW1haW4KK0wobG9vcDIpOgorCWxkZAlbczFfcHRyKzBdLCVnMgorCWxkZAlbczJfcHRyKzBdLCVvNAorCWFkZHhjYwklZzIsJW80LCVnMgorCXN0CSVnMixbcmVzX3B0ciswXQorCWFkZHhjYwklZzMsJW81LCVnMworCXN0CSVnMyxbcmVzX3B0cis0XQorCWxkZAlbczFfcHRyKzhdLCVnMgorCWxkZAlbczJfcHRyKzhdLCVvNAorCWFkZHhjYwklZzIsJW80LCVnMgorCXN0CSVnMixbcmVzX3B0cis4XQorCWFkZHhjYwklZzMsJW81LCVnMworCXN0CSVnMyxbcmVzX3B0cisxMl0KKwlsZGQJW3MxX3B0cisxNl0sJWcyCisJbGRkCVtzMl9wdHIrMTZdLCVvNAorCWFkZHhjYwklZzIsJW80LCVnMgorCXN0CSVnMixbcmVzX3B0cisxNl0KKwlhZGR4Y2MJJWczLCVvNSwlZzMKKwlzdAklZzMsW3Jlc19wdHIrMjBdCisJbGRkCVtzMV9wdHIrMjRdLCVnMgorCWxkZAlbczJfcHRyKzI0XSwlbzQKKwlhZGR4Y2MJJWcyLCVvNCwlZzIKKwlzdAklZzIsW3Jlc19wdHIrMjRdCisJYWRkeGNjCSVnMywlbzUsJWczCisJc3QJJWczLFtyZXNfcHRyKzI4XQorCWFkZHgJJWcwLCVnMCwlbzQJCUMgc2F2ZSBjeSBpbiByZWdpc3RlcgorCWFkZGNjCW4sLTgsbgorCWFkZAlzMV9wdHIsMzIsczFfcHRyCisJYWRkCXMyX3B0ciwzMixzMl9wdHIKKwlhZGQJcmVzX3B0ciwzMixyZXNfcHRyCisJYmdlCUwobG9vcDIpCisJc3ViY2MJJWcwLCVvNCwlZzAJCUMgcmVzdG9yZSBjeQorCitMKGZpbjIpOgorCWFkZGNjCW4sOC0yLG4KKwlibHQJTChlbmQyKQorCXN1YmNjCSVnMCwlbzQsJWcwCQlDIHJlc3RvcmUgY3kKK0wobG9vcGUyKToKKwlsZGQJW3MxX3B0ciswXSwlZzIKKwlsZGQJW3MyX3B0ciswXSwlbzQKKwlhZGR4Y2MJJWcyLCVvNCwlZzIKKwlzdAklZzIsW3Jlc19wdHIrMF0KKwlhZGR4Y2MJJWczLCVvNSwlZzMKKwlzdAklZzMsW3Jlc19wdHIrNF0KKwlhZGR4CSVnMCwlZzAsJW80CQlDIHNhdmUgY3kgaW4gcmVnaXN0ZXIKKwlhZGRjYwluLC0yLG4KKwlhZGQJczFfcHRyLDgsczFfcHRyCisJYWRkCXMyX3B0ciw4LHMyX3B0cgorCWFkZAlyZXNfcHRyLDgscmVzX3B0cgorCWJnZQlMKGxvb3BlMikKKwlzdWJjYwklZzAsJW80LCVnMAkJQyByZXN0b3JlIGN5CitMKGVuZDIpOgorCWFuZGNjCW4sMSwlZzAKKwliZQlMKHJldDIpCisJc3ViY2MJJWcwLCVvNCwlZzAJCUMgcmVzdG9yZSBjeQorQyBBZGQgbGFzdCBsaW1iCitMKGpvbmUpOgorCWxkCVtzMV9wdHJdLCVnNAorCWxkCVtzMl9wdHJdLCVnMgorCWFkZHhjYwklZzQsJWcyLCVvNAorCXN0CSVvNCxbcmVzX3B0cl0KKworTChyZXQyKToKKwlyZXRsCisJYWRkeAklZzAsJWcwLCVvMAlDIHJldHVybiBjYXJyeS1vdXQgZnJvbSBtb3N0IHNpZ24uIGxpbWIKK0VQSUxPR1VFKG1wbl9hZGRfbikKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmMzMi9hZGRtdWxfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjMzIvYWRkbXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZDVkNzgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjMzIvYWRkbXVsXzEuYXNtCkBAIC0wLDAgKzEsMTU1IEBACitkbmwgIFNQQVJDIG1wbl9hZGRtdWxfMSAtLSBNdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYSBsaW1iIGFuZCBhZGQgdGhlCitkbmwgIHJlc3VsdCB0byBhIHNlY29uZCBsaW1iIHZlY3Rvci4KKworZG5sICBDb3B5cmlnaHQgMTk5Mi0xOTk0LCAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBJTlBVVCBQQVJBTUVURVJTCitDIHJlc19wdHIJbzAKK0MgczFfcHRyCW8xCitDIHNpemUJCW8yCitDIHMyX2xpbWIJbzMKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9hZGRtdWxfMSkKKwlDIE1ha2UgUzFfUFRSIGFuZCBSRVNfUFRSIHBvaW50IGF0IHRoZSBlbmQgb2YgdGhlaXIgYmxvY2tzCisJQyBhbmQgcHV0ICgtIDQgeCBTSVpFKSBpbiBpbmRleC9sb29wIGNvdW50ZXIuCisJc2xsCSVvMiwyLCVvMgorCWFkZAklbzAsJW8yLCVvNAlDIFJFU19QVFIgaW4gbzQgc2luY2UgbzAgaXMgcmV0dmFsCisJYWRkCSVvMSwlbzIsJW8xCisJc3ViCSVnMCwlbzIsJW8yCisKKwljbXAJJW8zLDB4ZmZmCisJYmd1CUwobGFyZ2UpCisJbm9wCisKKwlsZAlbJW8xKyVvMl0sJW81CisJbW92CTAsJW8wCisJYglMKDApCisJIGFkZAklbzQsLTQsJW80CitMKGxvb3AwKToKKwlhZGRjYwklbzUsJWcxLCVnMQorCWxkCVslbzErJW8yXSwlbzUKKwlhZGR4CSVvMCwlZzAsJW8wCisJc3QJJWcxLFslbzQrJW8yXQorTCgwKToJd3IJJWcwLCVvMywleQorCXNyYQklbzUsMzEsJWcyCisJYW5kCSVvMywlZzIsJWcyCisJYW5kY2MJJWcxLDAsJWcxCisJbXVsc2NjCSVnMSwlbzUsJWcxCisJbXVsc2NjCSVnMSwlbzUsJWcxCisJbXVsc2NjCSVnMSwlbzUsJWcxCisJbXVsc2NjCSVnMSwlbzUsJWcxCisJbXVsc2NjCSVnMSwlbzUsJWcxCisJbXVsc2NjCSVnMSwlbzUsJWcxCisJbXVsc2NjCSVnMSwlbzUsJWcxCisJbXVsc2NjCSVnMSwlbzUsJWcxCisJbXVsc2NjCSVnMSwlbzUsJWcxCisJbXVsc2NjCSVnMSwlbzUsJWcxCisJbXVsc2NjCSVnMSwlbzUsJWcxCisJbXVsc2NjCSVnMSwlbzUsJWcxCisJbXVsc2NjCSVnMSwwLCVnMQorCXNyYQklZzEsMjAsJWc0CisJc2xsCSVnMSwxMiwlZzEKKwlyZAkleSwlZzMKKwlzcmwJJWczLDIwLCVnMworCW9yCSVnMSwlZzMsJWcxCisKKwlhZGRjYwklZzEsJW8wLCVnMQorCWFkZHgJJWcyLCVnNCwlbzAJQyBhZGQgc2lnbi1jb21wZW5zYXRpb24gYW5kIGN5IHRvIGhpIGxpbWIKKwlhZGRjYwklbzIsNCwlbzIJQyBsb29wIGNvdW50ZXIKKwlibmUJTChsb29wMCkKKwkgbGQJWyVvNCslbzJdLCVvNQorCisJYWRkY2MJJW81LCVnMSwlZzEKKwlhZGR4CSVvMCwlZzAsJW8wCisJcmV0bAorCXN0CSVnMSxbJW80KyVvMl0KKworTChsYXJnZSk6CisJbGQJWyVvMSslbzJdLCVvNQorCW1vdgkwLCVvMAorCXNyYQklbzMsMzEsJWc0CUMgZzQgPSBtYXNrIG9mIG9uZXMgaWZmIFMyX0xJTUIgPCAwCisJYglMKDEpCisJIGFkZAklbzQsLTQsJW80CitMKGxvb3ApOgorCWFkZGNjCSVvNSwlZzMsJWczCisJbGQJWyVvMSslbzJdLCVvNQorCWFkZHgJJW8wLCVnMCwlbzAKKwlzdAklZzMsWyVvNCslbzJdCitMKDEpOgl3cgklZzAsJW81LCV5CisJYW5kCSVvNSwlZzQsJWcyCisJYW5kY2MJJWcwLCVnMCwlZzEKKwltdWxzY2MJJWcxLCVvMywlZzEKKwltdWxzY2MJJWcxLCVvMywlZzEKKwltdWxzY2MJJWcxLCVvMywlZzEKKwltdWxzY2MJJWcxLCVvMywlZzEKKwltdWxzY2MJJWcxLCVvMywlZzEKKwltdWxzY2MJJWcxLCVvMywlZzEKKwltdWxzY2MJJWcxLCVvMywlZzEKKwltdWxzY2MJJWcxLCVvMywlZzEKKwltdWxzY2MJJWcxLCVvMywlZzEKKwltdWxzY2MJJWcxLCVvMywlZzEKKwltdWxzY2MJJWcxLCVvMywlZzEKKwltdWxzY2MJJWcxLCVvMywlZzEKKwltdWxzY2MJJWcxLCVvMywlZzEKKwltdWxzY2MJJWcxLCVvMywlZzEKKwltdWxzY2MJJWcxLCVvMywlZzEKKwltdWxzY2MJJWcxLCVvMywlZzEKKwltdWxzY2MJJWcxLCVvMywlZzEKKwltdWxzY2MJJWcxLCVvMywlZzEKKwltdWxzY2MJJWcxLCVvMywlZzEKKwltdWxzY2MJJWcxLCVvMywlZzEKKwltdWxzY2MJJWcxLCVvMywlZzEKKwltdWxzY2MJJWcxLCVvMywlZzEKKwltdWxzY2MJJWcxLCVvMywlZzEKKwltdWxzY2MJJWcxLCVvMywlZzEKKwltdWxzY2MJJWcxLCVvMywlZzEKKwltdWxzY2MJJWcxLCVvMywlZzEKKwltdWxzY2MJJWcxLCVvMywlZzEKKwltdWxzY2MJJWcxLCVvMywlZzEKKwltdWxzY2MJJWcxLCVvMywlZzEKKwltdWxzY2MJJWcxLCVvMywlZzEKKwltdWxzY2MJJWcxLCVvMywlZzEKKwltdWxzY2MJJWcxLCVvMywlZzEKKwltdWxzY2MJJWcxLCVnMCwlZzEKKwlyZAkleSwlZzMKKwlhZGRjYwklZzMsJW8wLCVnMworCWFkZHgJJWcyLCVnMSwlbzAKKwlhZGRjYwklbzIsNCwlbzIKKwlibmUJTChsb29wKQorCSBsZAlbJW80KyVvMl0sJW81CisKKwlhZGRjYwklbzUsJWczLCVnMworCWFkZHgJJW8wLCVnMCwlbzAKKwlyZXRsCisJc3QJJWczLFslbzQrJW8yXQorRVBJTE9HVUUobXBuX2FkZG11bF8xKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL2dtcC1tcGFyYW0uaCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmMzMi9nbXAtbXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNiYzYxMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmMzMi9nbXAtbXBhcmFtLmgKQEAgLTAsMCArMSw2NyBAQAorLyogU1BBUkMgdjcgZ21wLW1wYXJhbS5oIC0tIENvbXBpbGVyL21hY2hpbmUgcGFyYW1ldGVyIGhlYWRlciBmaWxlLgorCitDb3B5cmlnaHQgMTk5MSwgMTk5MywgMTk5NCwgMTk5OS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisvKiBHZW5lcmF0ZWQgYnkgdHVuZXVwLmMsIDIwMDItMDMtMTMsIGdjYyAyLjk1LCBXZWl0ZWsgODcwMSAqLworCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgICA4CisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgNDY2CisKKyNkZWZpbmUgU1FSX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgIDQKKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAyNTgKKworI2RlZmluZSBESVZfU0JfUFJFSU5WX1RIUkVTSE9MRCAgICAgICAgICAgNAorI2RlZmluZSBESVZfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAyOAorI2RlZmluZSBQT1dNX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAyOAorCisjZGVmaW5lIEdDRF9BQ0NFTF9USFJFU0hPTEQgICAgICAgICAgICAgICAzCisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAyCisKKyNkZWZpbmUgRElWUkVNXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgIDMKKyNkZWZpbmUgRElWUkVNXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgIDQKKyNkZWZpbmUgTU9EXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgIDMKKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgIDQKKyNkZWZpbmUgVVNFX1BSRUlOVl9ESVZSRU1fMSAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgVVNFX1BSRUlOVl9NT0RfMSAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgRElWUkVNXzJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBESVZFWEFDVF8xX1RIUkVTSE9MRCAgICAgICAgICAgIDEyMAorI2RlZmluZSBNT0RFWEFDVF8xX09ERF9USFJFU0hPTEQgICAgICBNUF9TSVpFX1RfTUFYICAvKiBuZXZlciAqLworCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgIDIxCisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgIDI1CisjZGVmaW5lIFNFVF9TVFJfVEhSRVNIT0xEICAgICAgICAgICAgICAxMDEyCisKKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRSAgeyAyNzIsIDY3MiwgMTE1MiwgMzU4NCwgMTAyNDAsIDI0NTc2LCAwIH0KKyNkZWZpbmUgTVVMX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAyNjQKKyNkZWZpbmUgTVVMX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgIDIzMDQKKworI2RlZmluZSBTUVJfRkZUX1RBQkxFICB7IDMwNCwgNzM2LCAxMTUyLCAzNTg0LCAxMDI0MCwgMjQ1NzYsIDAgfQorI2RlZmluZSBTUVJfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgIDI0OAorI2RlZmluZSBTUVJfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgMjMwNApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL2xzaGlmdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjMzIvbHNoaWZ0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzIxMzQzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL2xzaGlmdC5hc20KQEAgLTAsMCArMSwxMDUgQEAKK2RubCAgU1BBUkMgbXBuX2xzaGlmdCAtLSBTaGlmdCBhIG51bWJlciBsZWZ0LgorCitkbmwgIENvcHlyaWdodCAxOTk1LCAxOTk2LCAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBJTlBVVCBQQVJBTUVURVJTCitDIHJlc19wdHIJJW8wCitDIHNyY19wdHIJJW8xCitDIHNpemUJCSVvMgorQyBjbnQJCSVvMworCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2xzaGlmdCkKKwlzbGwJJW8yLDIsJWcxCisJYWRkCSVvMSwlZzEsJW8xCUMgbWFrZSAlbzEgcG9pbnQgYXQgZW5kIG9mIHNyYworCWxkCVslbzEtNF0sJWcyCUMgbG9hZCBmaXJzdCBsaW1iCisJc3ViCSVnMCwlbzMsJW81CUMgbmVnYXRlIHNoaWZ0IGNvdW50CisJYWRkCSVvMCwlZzEsJW8wCUMgbWFrZSAlbzAgcG9pbnQgYXQgZW5kIG9mIHJlcworCWFkZAklbzIsLTEsJW8yCisJYW5kY2MJJW8yLDQtMSwlZzQJQyBudW1iZXIgb2YgbGltYnMgaW4gZmlyc3QgbG9vcAorCXNybAklZzIsJW81LCVnMQlDIGNvbXB1dGUgZnVuY3Rpb24gcmVzdWx0CisJYmUJTCgwKQkJQyBpZiBtdWx0aXBsZSBvZiA0IGxpbWJzLCBza2lwIGZpcnN0IGxvb3AKKwlzdAklZzEsWyVzcCs4MF0KKworCXN1YgklbzIsJWc0LCVvMglDIGFkanVzdCBjb3VudCBmb3IgbWFpbiBsb29wCisKK0wobG9vcDApOgorCWxkCVslbzEtOF0sJWczCisJYWRkCSVvMCwtNCwlbzAKKwlhZGQJJW8xLC00LCVvMQorCWFkZGNjCSVnNCwtMSwlZzQKKwlzbGwJJWcyLCVvMywlbzQKKwlzcmwJJWczLCVvNSwlZzEKKwltb3YJJWczLCVnMgorCW9yCSVvNCwlZzEsJW80CisJYm5lCUwobG9vcDApCisJIHN0CSVvNCxbJW8wKzBdCisKK0woMCk6CXRzdAklbzIKKwliZQlMKGVuZCkKKwkgbm9wCisKK0wobG9vcCk6CisJbGQJWyVvMS04XSwlZzMKKwlhZGQJJW8wLC0xNiwlbzAKKwlhZGRjYwklbzIsLTQsJW8yCisJc2xsCSVnMiwlbzMsJW80CisJc3JsCSVnMywlbzUsJWcxCisKKwlsZAlbJW8xLTEyXSwlZzIKKwlzbGwJJWczLCVvMywlZzQKKwlvcgklbzQsJWcxLCVvNAorCXN0CSVvNCxbJW8wKzEyXQorCXNybAklZzIsJW81LCVnMQorCisJbGQJWyVvMS0xNl0sJWczCisJc2xsCSVnMiwlbzMsJW80CisJb3IJJWc0LCVnMSwlZzQKKwlzdAklZzQsWyVvMCs4XQorCXNybAklZzMsJW81LCVnMQorCisJbGQJWyVvMS0yMF0sJWcyCisJc2xsCSVnMywlbzMsJWc0CisJb3IJJW80LCVnMSwlbzQKKwlzdAklbzQsWyVvMCs0XQorCXNybAklZzIsJW81LCVnMQorCisJYWRkCSVvMSwtMTYsJW8xCisJb3IJJWc0LCVnMSwlZzQKKwlibmUJTChsb29wKQorCSBzdAklZzQsWyVvMCswXQorCitMKGVuZCk6CXNsbAklZzIsJW8zLCVnMgorCXN0CSVnMixbJW8wLTRdCisJcmV0bAorCWxkCVslc3ArODBdLCVvMAorRVBJTE9HVUUobXBuX2xzaGlmdCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmMzMi9tdWxfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjMzIvbXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyYjQxNjgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjMzIvbXVsXzEuYXNtCkBAIC0wLDAgKzEsMTQ2IEBACitkbmwgIFNQQVJDIG1wbl9tdWxfMSAtLSBNdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYSBsaW1iIGFuZCBzdG9yZQorZG5sICB0aGUgcmVzdWx0IGluIGEgc2Vjb25kIGxpbWIgdmVjdG9yLgorCitkbmwgIENvcHlyaWdodCAxOTkyLTE5OTQsIDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDIElOUFVUIFBBUkFNRVRFUlMKK0MgcmVzX3B0cglvMAorQyBzMV9wdHIJbzEKK0Mgc2l6ZQkJbzIKK0MgczJfbGltYglvMworCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX211bF8xKQorCUMgTWFrZSBTMV9QVFIgYW5kIFJFU19QVFIgcG9pbnQgYXQgdGhlIGVuZCBvZiB0aGVpciBibG9ja3MKKwlDIGFuZCBwdXQgKC0gNCB4IFNJWkUpIGluIGluZGV4L2xvb3AgY291bnRlci4KKwlzbGwJJW8yLDIsJW8yCisJYWRkCSVvMCwlbzIsJW80CUMgUkVTX1BUUiBpbiBvNCBzaW5jZSBvMCBpcyByZXR2YWwKKwlhZGQJJW8xLCVvMiwlbzEKKwlzdWIJJWcwLCVvMiwlbzIKKworCWNtcAklbzMsMHhmZmYKKwliZ3UJTChsYXJnZSkKKwlub3AKKworCWxkCVslbzErJW8yXSwlbzUKKwltb3YJMCwlbzAKKwliCUwoMCkKKwkgYWRkCSVvNCwtNCwlbzQKK0wobG9vcDApOgorCXN0CSVnMSxbJW80KyVvMl0KK0woMCk6CXdyCSVnMCwlbzMsJXkKKwlzcmEJJW81LDMxLCVnMgorCWFuZAklbzMsJWcyLCVnMgorCWFuZGNjCSVnMSwwLCVnMQorCW11bHNjYwklZzEsJW81LCVnMQorCW11bHNjYwklZzEsJW81LCVnMQorCW11bHNjYwklZzEsJW81LCVnMQorCW11bHNjYwklZzEsJW81LCVnMQorCW11bHNjYwklZzEsJW81LCVnMQorCW11bHNjYwklZzEsJW81LCVnMQorCW11bHNjYwklZzEsJW81LCVnMQorCW11bHNjYwklZzEsJW81LCVnMQorCW11bHNjYwklZzEsJW81LCVnMQorCW11bHNjYwklZzEsJW81LCVnMQorCW11bHNjYwklZzEsJW81LCVnMQorCW11bHNjYwklZzEsJW81LCVnMQorCW11bHNjYwklZzEsMCwlZzEKKwlzcmEJJWcxLDIwLCVnNAorCXNsbAklZzEsMTIsJWcxCisJcmQJJXksJWczCisJc3JsCSVnMywyMCwlZzMKKwlvcgklZzEsJWczLCVnMQorCisJYWRkY2MJJWcxLCVvMCwlZzEKKwlhZGR4CSVnMiwlZzQsJW8wCUMgYWRkIHNpZ24tY29tcGVuc2F0aW9uIGFuZCBjeSB0byBoaSBsaW1iCisJYWRkY2MJJW8yLDQsJW8yCUMgbG9vcCBjb3VudGVyCisJYm5lLGEJTChsb29wMCkKKwkgbGQJWyVvMSslbzJdLCVvNQorCisJcmV0bAorCXN0CSVnMSxbJW80KyVvMl0KKworCitMKGxhcmdlKToKKwlsZAlbJW8xKyVvMl0sJW81CisJbW92CTAsJW8wCisJc3JhCSVvMywzMSwlZzQJQyBnNCA9IG1hc2sgb2Ygb25lcyBpZmYgUzJfTElNQiA8IDAKKwliCUwoMSkKKwkgYWRkCSVvNCwtNCwlbzQKK0wobG9vcCk6CisJc3QJJWczLFslbzQrJW8yXQorTCgxKToJd3IJJWcwLCVvNSwleQorCWFuZAklbzUsJWc0LCVnMglDIGcyID0gUzFfTElNQiBpZmYgUzJfTElNQiA8IDAsIGVsc2UgMAorCWFuZGNjCSVnMCwlZzAsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlZzAsJWcxCisJcmQJJXksJWczCisJYWRkY2MJJWczLCVvMCwlZzMKKwlhZGR4CSVnMiwlZzEsJW8wCUMgYWRkIHNpZ24tY29tcGVuc2F0aW9uIGFuZCBjeSB0byBoaSBsaW1iCisJYWRkY2MJJW8yLDQsJW8yCUMgbG9vcCBjb3VudGVyCisJYm5lLGEJTChsb29wKQorCSBsZAlbJW8xKyVvMl0sJW81CisKKwlyZXRsCisJc3QJJWczLFslbzQrJW8yXQorRVBJTE9HVUUobXBuX211bF8xKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL3JzaGlmdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjMzIvcnNoaWZ0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTU1NDc2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL3JzaGlmdC5hc20KQEAgLTAsMCArMSwxMDIgQEAKK2RubCAgU1BBUkMgbXBuX3JzaGlmdCAtLSBTaGlmdCBhIG51bWJlciByaWdodC4KKworZG5sICBDb3B5cmlnaHQgMTk5NSwgMTk5NiwgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyByZXNfcHRyCSVvMAorQyBzcmNfcHRyCSVvMQorQyBzaXplCQklbzIKK0MgY250CQklbzMKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9yc2hpZnQpCisJbGQJWyVvMV0sJWcyCUMgbG9hZCBmaXJzdCBsaW1iCisJc3ViCSVnMCwlbzMsJW81CUMgbmVnYXRlIHNoaWZ0IGNvdW50CisJYWRkCSVvMiwtMSwlbzIKKwlhbmRjYwklbzIsNC0xLCVnNAlDIG51bWJlciBvZiBsaW1icyBpbiBmaXJzdCBsb29wCisJc2xsCSVnMiwlbzUsJWcxCUMgY29tcHV0ZSBmdW5jdGlvbiByZXN1bHQKKwliZQlMKDApCQlDIGlmIG11bHRpcGxlIG9mIDQgbGltYnMsIHNraXAgZmlyc3QgbG9vcAorCXN0CSVnMSxbJXNwKzgwXQorCisJc3ViCSVvMiwlZzQsJW8yCUMgYWRqdXN0IGNvdW50IGZvciBtYWluIGxvb3AKKworTChsb29wMCk6CisJbGQJWyVvMSs0XSwlZzMKKwlhZGQJJW8wLDQsJW8wCisJYWRkCSVvMSw0LCVvMQorCWFkZGNjCSVnNCwtMSwlZzQKKwlzcmwJJWcyLCVvMywlbzQKKwlzbGwJJWczLCVvNSwlZzEKKwltb3YJJWczLCVnMgorCW9yCSVvNCwlZzEsJW80CisJYm5lCUwobG9vcDApCisJIHN0CSVvNCxbJW8wLTRdCisKK0woMCk6CXRzdAklbzIKKwliZQlMKGVuZCkKKwkgbm9wCisKK0wobG9vcCk6CisJbGQJWyVvMSs0XSwlZzMKKwlhZGQJJW8wLDE2LCVvMAorCWFkZGNjCSVvMiwtNCwlbzIKKwlzcmwJJWcyLCVvMywlbzQKKwlzbGwJJWczLCVvNSwlZzEKKworCWxkCVslbzErOF0sJWcyCisJc3JsCSVnMywlbzMsJWc0CisJb3IJJW80LCVnMSwlbzQKKwlzdAklbzQsWyVvMC0xNl0KKwlzbGwJJWcyLCVvNSwlZzEKKworCWxkCVslbzErMTJdLCVnMworCXNybAklZzIsJW8zLCVvNAorCW9yCSVnNCwlZzEsJWc0CisJc3QJJWc0LFslbzAtMTJdCisJc2xsCSVnMywlbzUsJWcxCisKKwlsZAlbJW8xKzE2XSwlZzIKKwlzcmwJJWczLCVvMywlZzQKKwlvcgklbzQsJWcxLCVvNAorCXN0CSVvNCxbJW8wLThdCisJc2xsCSVnMiwlbzUsJWcxCisKKwlhZGQJJW8xLDE2LCVvMQorCW9yCSVnNCwlZzEsJWc0CisJYm5lCUwobG9vcCkKKwkgc3QJJWc0LFslbzAtNF0KKworTChlbmQpOglzcmwJJWcyLCVvMywlZzIKKwlzdAklZzIsWyVvMC0wXQorCXJldGwKKwlsZAlbJXNwKzgwXSwlbzAKK0VQSUxPR1VFKG1wbl9yc2hpZnQpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjMzIvc3BhcmMtZGVmcy5tNCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmMzMi9zcGFyYy1kZWZzLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzYTBjNTMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjMzIvc3BhcmMtZGVmcy5tNApAQCAtMCwwICsxLDkzIEBACitkaXZlcnQoLTEpCisKK2RubCAgbTQgbWFjcm9zIGZvciBTUEFSQyBhc3NlbWJsZXIgKDMyIGFuZCA2NCBiaXQpLgorCisKK2RubCAgQ29weXJpZ2h0IDIwMDIsIDIwMTEsIDIwMTMsIDIwMTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCitjaGFuZ2Vjb20oOykJZG5sIGNhbm5vdCB1c2UgZGVmYXVsdCAjIHNpbmNlIHRoYXQncyB1c2VkIGluIFJFR0lTVEVSIGRlY2xzCisKKworZG5sICBVc2FnZTogUkVHSVNURVIocmVnLGF0dHIpCitkbmwKK2RubCAgR2l2ZSBhICIucmVnaXN0ZXIgcmVnLGF0dHIiIGRpcmVjdGl2ZSwgaWYgdGhlIGFzc2VtYmxlciBzdXBwb3J0cyBpdC4KK2RubCAgSEFWRV9SRUdJU1RFUiBjb21lcyBmcm9tIHRoZSBHTVBfQVNNX1NQQVJDX1JFR0lTVEVSIGNvbmZpZ3VyZSB0ZXN0LgorCitkZWZpbmUoUkVHSVNURVIsCittNF9hc3NlcnRfbnVtYXJncygyKQorbTRfYXNzZXJ0X2RlZmluZWQoYEhBVkVfUkVHSVNURVInKQorYGlmZWxzZShIQVZFX1JFR0lTVEVSLHllcywKK2AucmVnaXN0ZXIgYCQxJyxgJDInJyknKQorCisKK0MgVGVzdGluZyBtZWNoYW5pc20gZm9yIHJ1bm5pbmcgbmV3ZXIgY29kZSBvbiBvbGRlciBwcm9jZXNzb3JzCitpZmRlZihgRkFLRV9UMycsYAorICBpbmNsdWRlX21wbihgc3BhcmM2NC91bHRyYXNwYXJjdDMvbWlzc2luZy5tNCcpCisnLGAKKyAgZGVmaW5lKGBhZGR4Y2NjJywJYGBhZGR4Y2NjJwkkMSwgJDIsICQzJykKKyAgZGVmaW5lKGBhZGR4YycsCWBgYWRkeGMnCSQxLCAkMiwgJDMnKQorICBkZWZpbmUoYHVtdWx4aGknLAlgYHVtdWx4aGknCSQxLCAkMiwgJDMnKQorICBkZWZpbmUoYGx6Y250JywJYGBsemQnCSQxLCAkMicpCisnKQorCitkbmwgIFVzYWdlOiBMRUE2NChzeW1ib2wscmVnLHBpY19yZWcpCitkbmwKK2RubCAgVXNlIHdoYXRldmVyIDY0LWJpdCBjb2RlIHNlcXVlbmNlIGlzIGFwcHJvcHJpYXRlIHRvIGxvYWQgInN5bWJvbCIgaW50bworZG5sICByZWdpc3RlciAicmVnIiwgcG90ZW50aWFsbHkgdXNpbmcgcmVnaXN0ZXIgInBpY19yZWciIHRvIHBlcmZvcm0gdGhlCitkbmwgIGNhbGN1bGF0aW9ucy4KK2RubAorZG5sICBDYXZlYXQ6IFdlIHVzZWQgdG8gdXNlIHRoZSBzZXR4IHBzZXVkbyBpbnNuIGhlcmUsIGJ1dCBzb21lIEdOVS9MaW51eAorZG5sICByZWxlYXNlcyBjYXVzZXMgaW52YWxpZCBjb2RlIG9yIHJlbG9jcyBmb3IgdGhhdC4KK2RubAorZG5sICBPcHRpbWlzYXRpb24gMTogVXNlIHRodW5rIGNhbGwgaW5zdGVhZCBvZiBSRFBDIHdoaWNoIGNhdXNlcyBwaXBlbGluZQorZG5sICByZXBsYXkgZm9yIHNvbWUgc3BhcmNzLgorZG5sCitkbmwgIE9wdGltaXNhdGlvbiAyOiBEbyB0aGUgdHdvIHN5bWJvbCBidWlsZGluZyBzZXF1ZW5jZXMgaW4gcGFyYWxsZWwgaW5zdGVhZAorZG5sICBvZiBvbmUgYWZ0ZXIgdGhlIG90aGVyLiAgVGhhdCBtaWdodCBuZWVkIG9uZSBtb3JlIHNjcmF0Y2ggcmVnaXN0ZXIuCisKK2RlZmluZShMRUE2NCwKK200X2Fzc2VydF9udW1hcmdzKDMpCittNF9hc3NlcnRfZGVmaW5lZChgSEFWRV9HT1REQVRBJykKK2BpZmRlZihgUElDJyxgCisJcmQJJXBjLCAlYCQyJworCXNldGhpCSVoaShfR0xPQkFMX09GRlNFVF9UQUJMRV8rNCksICVgJDMnCisJYWRkCSVgJDMnLCAlbG8oX0dMT0JBTF9PRkZTRVRfVEFCTEVfKzgpLCAlYCQzJworCWFkZAklYCQyJywgJWAkMycsICVgJDMnCisJc2V0aGkJJWdkb3BfaGl4MjIoYCQxJyksICVgJDInCisJeG9yCSVgJDInLCAlZ2RvcF9sb3gxMChgJDEnKSwgJWAkMicKKwlsZHgJWyVgJDMnICsgJWAkMiddLCAlYCQyJywgJWdkb3AoYCQxJykKKycsYAorCXNldGhpCSVoNDQoYCQxJyksICVgJDInCisJb3IJJWAkMicsICVtNDQoYCQxJyksICVgJDInCisJc2xseAklYCQyJywgMTIsICVgJDInCisJb3IJJWAkMicsICVsNDQoYCQxJyksICUkMgorJyknKQorCitkaXZlcnQKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmMzMi9zdWJfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjMzIvc3ViX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0YTU3NmQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjMzIvc3ViX24uYXNtCkBAIC0wLDAgKzEsMzM1IEBACitkbmwgIFNQQVJDIG1wbl9zdWJfbiAtLSBTdWJ0cmFjdCB0d28gbGltYiB2ZWN0b3JzIG9mIHRoZSBzYW1lIGxlbmd0aCA+IDAgYW5kCitkbmwgIHN0b3JlIGRpZmZlcmVuY2UgaW4gYSB0aGlyZCBsaW1iIHZlY3Rvci4KKworZG5sICBDb3B5cmlnaHQgMTk5NSwgMTk5NiwgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKHJlc19wdHIsJW8wKQorZGVmaW5lKHMxX3B0ciwlbzEpCitkZWZpbmUoczJfcHRyLCVvMikKK2RlZmluZShuLCVvMykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9zdWJfbikKKwl4b3IJczJfcHRyLHJlc19wdHIsJWcxCisJYW5kY2MJJWcxLDQsJWcwCisJYm5lCUwoMSkJCQlDIGJyYW5jaCBpZiBhbGlnbm1lbnQgZGlmZmVycworCW5vcAorQyAqKiAgVjFhICAqKgorCWFuZGNjCXJlc19wdHIsNCwlZzAJCUMgcmVzX3B0ciB1bmFsaWduZWQ/IFNpZGUgZWZmZWN0OiBjeT0wCisJYmUJTCh2MSkJCQlDIGlmIG5vLCBicmFuY2gKKwlub3AKK0MgQWRkIGxlYXN0IHNpZ25pZmljYW50IGxpbWIgc2VwYXJhdGVseSB0byBhbGlnbiByZXNfcHRyIGFuZCBzMl9wdHIKKwlsZAlbczFfcHRyXSwlZzQKKwlhZGQJczFfcHRyLDQsczFfcHRyCisJbGQJW3MyX3B0cl0sJWcyCisJYWRkCXMyX3B0ciw0LHMyX3B0cgorCWFkZAluLC0xLG4KKwlzdWJjYwklZzQsJWcyLCVvNAorCXN0CSVvNCxbcmVzX3B0cl0KKwlhZGQJcmVzX3B0ciw0LHJlc19wdHIKK0wodjEpOglhZGR4CSVnMCwlZzAsJW80CQlDIHNhdmUgY3kgaW4gcmVnaXN0ZXIKKwljbXAJbiwyCQkJQyBpZiBuIDwgMiAuLi4KKwlibAlMKGVuZDIpCQkJQyAuLi4gYnJhbmNoIHRvIHRhaWwgY29kZQorCXN1YmNjCSVnMCwlbzQsJWcwCQlDIHJlc3RvcmUgY3kKKworCWxkCVtzMV9wdHIrMF0sJWc0CisJYWRkY2MJbiwtMTAsbgorCWxkCVtzMV9wdHIrNF0sJWcxCisJbGRkCVtzMl9wdHIrMF0sJWcyCisJYmx0CUwoZmluMSkKKwlzdWJjYwklZzAsJW80LCVnMAkJQyByZXN0b3JlIGN5CitDIEFkZCBibG9ja3Mgb2YgOCBsaW1icyB1bnRpbCBsZXNzIHRoYW4gOCBsaW1icyByZW1haW4KK0wobG9vcDEpOgorCXN1YnhjYwklZzQsJWcyLCVvNAorCWxkCVtzMV9wdHIrOF0sJWc0CisJc3VieGNjCSVnMSwlZzMsJW81CisJbGQJW3MxX3B0cisxMl0sJWcxCisJbGRkCVtzMl9wdHIrOF0sJWcyCisJc3RkCSVvNCxbcmVzX3B0ciswXQorCXN1YnhjYwklZzQsJWcyLCVvNAorCWxkCVtzMV9wdHIrMTZdLCVnNAorCXN1YnhjYwklZzEsJWczLCVvNQorCWxkCVtzMV9wdHIrMjBdLCVnMQorCWxkZAlbczJfcHRyKzE2XSwlZzIKKwlzdGQJJW80LFtyZXNfcHRyKzhdCisJc3VieGNjCSVnNCwlZzIsJW80CisJbGQJW3MxX3B0cisyNF0sJWc0CisJc3VieGNjCSVnMSwlZzMsJW81CisJbGQJW3MxX3B0cisyOF0sJWcxCisJbGRkCVtzMl9wdHIrMjRdLCVnMgorCXN0ZAklbzQsW3Jlc19wdHIrMTZdCisJc3VieGNjCSVnNCwlZzIsJW80CisJbGQJW3MxX3B0ciszMl0sJWc0CisJc3VieGNjCSVnMSwlZzMsJW81CisJbGQJW3MxX3B0ciszNl0sJWcxCisJbGRkCVtzMl9wdHIrMzJdLCVnMgorCXN0ZAklbzQsW3Jlc19wdHIrMjRdCisJYWRkeAklZzAsJWcwLCVvNAkJQyBzYXZlIGN5IGluIHJlZ2lzdGVyCisJYWRkY2MJbiwtOCxuCisJYWRkCXMxX3B0ciwzMixzMV9wdHIKKwlhZGQJczJfcHRyLDMyLHMyX3B0cgorCWFkZAlyZXNfcHRyLDMyLHJlc19wdHIKKwliZ2UJTChsb29wMSkKKwlzdWJjYwklZzAsJW80LCVnMAkJQyByZXN0b3JlIGN5CisKK0woZmluMSk6CisJYWRkY2MJbiw4LTIsbgorCWJsdAlMKGVuZDEpCisJc3ViY2MJJWcwLCVvNCwlZzAJCUMgcmVzdG9yZSBjeQorQyBBZGQgYmxvY2tzIG9mIDIgbGltYnMgdW50aWwgbGVzcyB0aGFuIDIgbGltYnMgcmVtYWluCitMKGxvb3BlMSk6CisJc3VieGNjCSVnNCwlZzIsJW80CisJbGQJW3MxX3B0cis4XSwlZzQKKwlzdWJ4Y2MJJWcxLCVnMywlbzUKKwlsZAlbczFfcHRyKzEyXSwlZzEKKwlsZGQJW3MyX3B0cis4XSwlZzIKKwlzdGQJJW80LFtyZXNfcHRyKzBdCisJYWRkeAklZzAsJWcwLCVvNAkJQyBzYXZlIGN5IGluIHJlZ2lzdGVyCisJYWRkY2MJbiwtMixuCisJYWRkCXMxX3B0ciw4LHMxX3B0cgorCWFkZAlzMl9wdHIsOCxzMl9wdHIKKwlhZGQJcmVzX3B0ciw4LHJlc19wdHIKKwliZ2UJTChsb29wZTEpCisJc3ViY2MJJWcwLCVvNCwlZzAJCUMgcmVzdG9yZSBjeQorTChlbmQxKToKKwlzdWJ4Y2MJJWc0LCVnMiwlbzQKKwlzdWJ4Y2MJJWcxLCVnMywlbzUKKwlzdGQJJW80LFtyZXNfcHRyKzBdCisJYWRkeAklZzAsJWcwLCVvNAkJQyBzYXZlIGN5IGluIHJlZ2lzdGVyCisKKwlhbmRjYwluLDEsJWcwCisJYmUJTChyZXQxKQorCXN1YmNjCSVnMCwlbzQsJWcwCQlDIHJlc3RvcmUgY3kKK0MgQWRkIGxhc3QgbGltYgorCWxkCVtzMV9wdHIrOF0sJWc0CisJbGQJW3MyX3B0cis4XSwlZzIKKwlzdWJ4Y2MJJWc0LCVnMiwlbzQKKwlzdAklbzQsW3Jlc19wdHIrOF0KKworTChyZXQxKToKKwlyZXRsCisJYWRkeAklZzAsJWcwLCVvMAlDIHJldHVybiBjYXJyeS1vdXQgZnJvbSBtb3N0IHNpZ24uIGxpbWIKKworTCgxKToJeG9yCXMxX3B0cixyZXNfcHRyLCVnMQorCWFuZGNjCSVnMSw0LCVnMAorCWJuZQlMKDIpCisJbm9wCitDICoqICBWMWIgICoqCisJYW5kY2MJcmVzX3B0ciw0LCVnMAkJQyByZXNfcHRyIHVuYWxpZ25lZD8gU2lkZSBlZmZlY3Q6IGN5PTAKKwliZQlMKHYxYikJCQlDIGlmIG5vLCBicmFuY2gKKwlub3AKK0MgQWRkIGxlYXN0IHNpZ25pZmljYW50IGxpbWIgc2VwYXJhdGVseSB0byBhbGlnbiByZXNfcHRyIGFuZCBzMV9wdHIKKwlsZAlbczJfcHRyXSwlZzQKKwlhZGQJczJfcHRyLDQsczJfcHRyCisJbGQJW3MxX3B0cl0sJWcyCisJYWRkCXMxX3B0ciw0LHMxX3B0cgorCWFkZAluLC0xLG4KKwlzdWJjYwklZzIsJWc0LCVvNAorCXN0CSVvNCxbcmVzX3B0cl0KKwlhZGQJcmVzX3B0ciw0LHJlc19wdHIKK0wodjFiKToJYWRkeAklZzAsJWcwLCVvNAkJQyBzYXZlIGN5IGluIHJlZ2lzdGVyCisJY21wCW4sMgkJCUMgaWYgbiA8IDIgLi4uCisJYmwJTChlbmQyKQkJCUMgLi4uIGJyYW5jaCB0byB0YWlsIGNvZGUKKwlzdWJjYwklZzAsJW80LCVnMAkJQyByZXN0b3JlIGN5CisKKwlsZAlbczJfcHRyKzBdLCVnNAorCWFkZGNjCW4sLTEwLG4KKwlsZAlbczJfcHRyKzRdLCVnMQorCWxkZAlbczFfcHRyKzBdLCVnMgorCWJsdAlMKGZpbjFiKQorCXN1YmNjCSVnMCwlbzQsJWcwCQlDIHJlc3RvcmUgY3kKK0MgQWRkIGJsb2NrcyBvZiA4IGxpbWJzIHVudGlsIGxlc3MgdGhhbiA4IGxpbWJzIHJlbWFpbgorTChsb29wMWIpOgorCXN1YnhjYwklZzIsJWc0LCVvNAorCWxkCVtzMl9wdHIrOF0sJWc0CisJc3VieGNjCSVnMywlZzEsJW81CisJbGQJW3MyX3B0cisxMl0sJWcxCisJbGRkCVtzMV9wdHIrOF0sJWcyCisJc3RkCSVvNCxbcmVzX3B0ciswXQorCXN1YnhjYwklZzIsJWc0LCVvNAorCWxkCVtzMl9wdHIrMTZdLCVnNAorCXN1YnhjYwklZzMsJWcxLCVvNQorCWxkCVtzMl9wdHIrMjBdLCVnMQorCWxkZAlbczFfcHRyKzE2XSwlZzIKKwlzdGQJJW80LFtyZXNfcHRyKzhdCisJc3VieGNjCSVnMiwlZzQsJW80CisJbGQJW3MyX3B0cisyNF0sJWc0CisJc3VieGNjCSVnMywlZzEsJW81CisJbGQJW3MyX3B0cisyOF0sJWcxCisJbGRkCVtzMV9wdHIrMjRdLCVnMgorCXN0ZAklbzQsW3Jlc19wdHIrMTZdCisJc3VieGNjCSVnMiwlZzQsJW80CisJbGQJW3MyX3B0ciszMl0sJWc0CisJc3VieGNjCSVnMywlZzEsJW81CisJbGQJW3MyX3B0ciszNl0sJWcxCisJbGRkCVtzMV9wdHIrMzJdLCVnMgorCXN0ZAklbzQsW3Jlc19wdHIrMjRdCisJYWRkeAklZzAsJWcwLCVvNAkJQyBzYXZlIGN5IGluIHJlZ2lzdGVyCisJYWRkY2MJbiwtOCxuCisJYWRkCXMxX3B0ciwzMixzMV9wdHIKKwlhZGQJczJfcHRyLDMyLHMyX3B0cgorCWFkZAlyZXNfcHRyLDMyLHJlc19wdHIKKwliZ2UJTChsb29wMWIpCisJc3ViY2MJJWcwLCVvNCwlZzAJCUMgcmVzdG9yZSBjeQorCitMKGZpbjFiKToKKwlhZGRjYwluLDgtMixuCisJYmx0CUwoZW5kMWIpCisJc3ViY2MJJWcwLCVvNCwlZzAJCUMgcmVzdG9yZSBjeQorQyBBZGQgYmxvY2tzIG9mIDIgbGltYnMgdW50aWwgbGVzcyB0aGFuIDIgbGltYnMgcmVtYWluCitMKGxvb3BlMWIpOgorCXN1YnhjYwklZzIsJWc0LCVvNAorCWxkCVtzMl9wdHIrOF0sJWc0CisJc3VieGNjCSVnMywlZzEsJW81CisJbGQJW3MyX3B0cisxMl0sJWcxCisJbGRkCVtzMV9wdHIrOF0sJWcyCisJc3RkCSVvNCxbcmVzX3B0ciswXQorCWFkZHgJJWcwLCVnMCwlbzQJCUMgc2F2ZSBjeSBpbiByZWdpc3RlcgorCWFkZGNjCW4sLTIsbgorCWFkZAlzMV9wdHIsOCxzMV9wdHIKKwlhZGQJczJfcHRyLDgsczJfcHRyCisJYWRkCXJlc19wdHIsOCxyZXNfcHRyCisJYmdlCUwobG9vcGUxYikKKwlzdWJjYwklZzAsJW80LCVnMAkJQyByZXN0b3JlIGN5CitMKGVuZDFiKToKKwlzdWJ4Y2MJJWcyLCVnNCwlbzQKKwlzdWJ4Y2MJJWczLCVnMSwlbzUKKwlzdGQJJW80LFtyZXNfcHRyKzBdCisJYWRkeAklZzAsJWcwLCVvNAkJQyBzYXZlIGN5IGluIHJlZ2lzdGVyCisKKwlhbmRjYwluLDEsJWcwCisJYmUJTChyZXQxYikKKwlzdWJjYwklZzAsJW80LCVnMAkJQyByZXN0b3JlIGN5CitDIEFkZCBsYXN0IGxpbWIKKwlsZAlbczJfcHRyKzhdLCVnNAorCWxkCVtzMV9wdHIrOF0sJWcyCisJc3VieGNjCSVnMiwlZzQsJW80CisJc3QJJW80LFtyZXNfcHRyKzhdCisKK0wocmV0MWIpOgorCXJldGwKKwlhZGR4CSVnMCwlZzAsJW8wCQlDIHJldHVybiBjYXJyeS1vdXQgZnJvbSBtb3N0IHNpZ24uIGxpbWIKKworQyAqKiAgVjIgICoqCitDIElmIHdlIGNvbWUgaGVyZSwgdGhlIGFsaWdubWVudCBvZiBzMV9wdHIgYW5kIHJlc19wdHIgYXMgd2VsbCBhcyB0aGUKK0MgYWxpZ25tZW50IG9mIHMyX3B0ciBhbmQgcmVzX3B0ciBkaWZmZXIuICBTaW5jZSB0aGVyZSBhcmUgb25seSB0d28gd2F5cworQyB0aGluZ3MgY2FuIGJlIGFsaWduZWQgKHRoYXQgd2UgY2FyZSBhYm91dCkgd2Ugbm93IGtub3cgdGhhdCB0aGUgYWxpZ25tZW50CitDIG9mIHMxX3B0ciBhbmQgczJfcHRyIGFyZSB0aGUgc2FtZS4KKworTCgyKToJY21wCW4sMQorCWJlCUwoam9uZSkKKwlub3AKKwlhbmRjYwlzMV9wdHIsNCwlZzAJCUMgczFfcHRyIHVuYWxpZ25lZD8gU2lkZSBlZmZlY3Q6IGN5PTAKKwliZQlMKHYyKQkJCUMgaWYgbm8sIGJyYW5jaAorCW5vcAorQyBBZGQgbGVhc3Qgc2lnbmlmaWNhbnQgbGltYiBzZXBhcmF0ZWx5IHRvIGFsaWduIHMxX3B0ciBhbmQgczJfcHRyCisJbGQJW3MxX3B0cl0sJWc0CisJYWRkCXMxX3B0ciw0LHMxX3B0cgorCWxkCVtzMl9wdHJdLCVnMgorCWFkZAlzMl9wdHIsNCxzMl9wdHIKKwlhZGQJbiwtMSxuCisJc3ViY2MJJWc0LCVnMiwlbzQKKwlzdAklbzQsW3Jlc19wdHJdCisJYWRkCXJlc19wdHIsNCxyZXNfcHRyCisKK0wodjIpOglhZGR4CSVnMCwlZzAsJW80CQlDIHNhdmUgY3kgaW4gcmVnaXN0ZXIKKwlhZGRjYwluLC04LG4KKwlibHQJTChmaW4yKQorCXN1YmNjCSVnMCwlbzQsJWcwCQlDIHJlc3RvcmUgY3kKK0MgQWRkIGJsb2NrcyBvZiA4IGxpbWJzIHVudGlsIGxlc3MgdGhhbiA4IGxpbWJzIHJlbWFpbgorTChsb29wMik6CisJbGRkCVtzMV9wdHIrMF0sJWcyCisJbGRkCVtzMl9wdHIrMF0sJW80CisJc3VieGNjCSVnMiwlbzQsJWcyCisJc3QJJWcyLFtyZXNfcHRyKzBdCisJc3VieGNjCSVnMywlbzUsJWczCisJc3QJJWczLFtyZXNfcHRyKzRdCisJbGRkCVtzMV9wdHIrOF0sJWcyCisJbGRkCVtzMl9wdHIrOF0sJW80CisJc3VieGNjCSVnMiwlbzQsJWcyCisJc3QJJWcyLFtyZXNfcHRyKzhdCisJc3VieGNjCSVnMywlbzUsJWczCisJc3QJJWczLFtyZXNfcHRyKzEyXQorCWxkZAlbczFfcHRyKzE2XSwlZzIKKwlsZGQJW3MyX3B0cisxNl0sJW80CisJc3VieGNjCSVnMiwlbzQsJWcyCisJc3QJJWcyLFtyZXNfcHRyKzE2XQorCXN1YnhjYwklZzMsJW81LCVnMworCXN0CSVnMyxbcmVzX3B0cisyMF0KKwlsZGQJW3MxX3B0cisyNF0sJWcyCisJbGRkCVtzMl9wdHIrMjRdLCVvNAorCXN1YnhjYwklZzIsJW80LCVnMgorCXN0CSVnMixbcmVzX3B0cisyNF0KKwlzdWJ4Y2MJJWczLCVvNSwlZzMKKwlzdAklZzMsW3Jlc19wdHIrMjhdCisJYWRkeAklZzAsJWcwLCVvNAkJQyBzYXZlIGN5IGluIHJlZ2lzdGVyCisJYWRkY2MJbiwtOCxuCisJYWRkCXMxX3B0ciwzMixzMV9wdHIKKwlhZGQJczJfcHRyLDMyLHMyX3B0cgorCWFkZAlyZXNfcHRyLDMyLHJlc19wdHIKKwliZ2UJTChsb29wMikKKwlzdWJjYwklZzAsJW80LCVnMAkJQyByZXN0b3JlIGN5CisKK0woZmluMik6CisJYWRkY2MJbiw4LTIsbgorCWJsdAlMKGVuZDIpCisJc3ViY2MJJWcwLCVvNCwlZzAJCUMgcmVzdG9yZSBjeQorTChsb29wZTIpOgorCWxkZAlbczFfcHRyKzBdLCVnMgorCWxkZAlbczJfcHRyKzBdLCVvNAorCXN1YnhjYwklZzIsJW80LCVnMgorCXN0CSVnMixbcmVzX3B0ciswXQorCXN1YnhjYwklZzMsJW81LCVnMworCXN0CSVnMyxbcmVzX3B0cis0XQorCWFkZHgJJWcwLCVnMCwlbzQJCUMgc2F2ZSBjeSBpbiByZWdpc3RlcgorCWFkZGNjCW4sLTIsbgorCWFkZAlzMV9wdHIsOCxzMV9wdHIKKwlhZGQJczJfcHRyLDgsczJfcHRyCisJYWRkCXJlc19wdHIsOCxyZXNfcHRyCisJYmdlCUwobG9vcGUyKQorCXN1YmNjCSVnMCwlbzQsJWcwCQlDIHJlc3RvcmUgY3kKK0woZW5kMik6CisJYW5kY2MJbiwxLCVnMAorCWJlCUwocmV0MikKKwlzdWJjYwklZzAsJW80LCVnMAkJQyByZXN0b3JlIGN5CitDIEFkZCBsYXN0IGxpbWIKK0woam9uZSk6CisJbGQJW3MxX3B0cl0sJWc0CisJbGQJW3MyX3B0cl0sJWcyCisJc3VieGNjCSVnNCwlZzIsJW80CisJc3QJJW80LFtyZXNfcHRyXQorCitMKHJldDIpOgorCXJldGwKKwlhZGR4CSVnMCwlZzAsJW8wCQlDIHJldHVybiBjYXJyeS1vdXQgZnJvbSBtb3N0IHNpZ24uIGxpbWIKK0VQSUxPR1VFKG1wbl9zdWJfbikKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmMzMi9zdWJtdWxfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjMzIvc3VibXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczZjkzNzcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjMzIvc3VibXVsXzEuYXNtCkBAIC0wLDAgKzEsMTU1IEBACitkbmwgIFNQQVJDIG1wbl9zdWJtdWxfMSAtLSBNdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYSBsaW1iIGFuZCBzdWJ0cmFjdAorZG5sICB0aGUgcmVzdWx0IGZyb20gYSBzZWNvbmQgbGltYiB2ZWN0b3IuCisKK2RubCAgQ29weXJpZ2h0IDE5OTItMTk5NCwgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyByZXNfcHRyCW8wCitDIHMxX3B0cglvMQorQyBzaXplCQlvMgorQyBzMl9saW1iCW8zCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fc3VibXVsXzEpCisJQyBNYWtlIFMxX1BUUiBhbmQgUkVTX1BUUiBwb2ludCBhdCB0aGUgZW5kIG9mIHRoZWlyIGJsb2NrcworCUMgYW5kIHB1dCAoLSA0IHggU0laRSkgaW4gaW5kZXgvbG9vcCBjb3VudGVyLgorCXNsbAklbzIsMiwlbzIKKwlhZGQJJW8wLCVvMiwlbzQJQyBSRVNfUFRSIGluIG80IHNpbmNlIG8wIGlzIHJldHZhbAorCWFkZAklbzEsJW8yLCVvMQorCXN1YgklZzAsJW8yLCVvMgorCisJY21wCSVvMywweGZmZgorCWJndQlMKGxhcmdlKQorCW5vcAorCisJbGQJWyVvMSslbzJdLCVvNQorCW1vdgkwLCVvMAorCWIJTCgwKQorCSBhZGQJJW80LC00LCVvNAorTChsb29wMCk6CisJc3ViY2MJJW81LCVnMSwlZzEKKwlsZAlbJW8xKyVvMl0sJW81CisJYWRkeAklbzAsJWcwLCVvMAorCXN0CSVnMSxbJW80KyVvMl0KK0woMCk6CXdyCSVnMCwlbzMsJXkKKwlzcmEJJW81LDMxLCVnMgorCWFuZAklbzMsJWcyLCVnMgorCWFuZGNjCSVnMSwwLCVnMQorCW11bHNjYwklZzEsJW81LCVnMQorCW11bHNjYwklZzEsJW81LCVnMQorCW11bHNjYwklZzEsJW81LCVnMQorCW11bHNjYwklZzEsJW81LCVnMQorCW11bHNjYwklZzEsJW81LCVnMQorCW11bHNjYwklZzEsJW81LCVnMQorCW11bHNjYwklZzEsJW81LCVnMQorCW11bHNjYwklZzEsJW81LCVnMQorCW11bHNjYwklZzEsJW81LCVnMQorCW11bHNjYwklZzEsJW81LCVnMQorCW11bHNjYwklZzEsJW81LCVnMQorCW11bHNjYwklZzEsJW81LCVnMQorCW11bHNjYwklZzEsMCwlZzEKKwlzcmEJJWcxLDIwLCVnNAorCXNsbAklZzEsMTIsJWcxCisJcmQJJXksJWczCisJc3JsCSVnMywyMCwlZzMKKwlvcgklZzEsJWczLCVnMQorCisJYWRkY2MJJWcxLCVvMCwlZzEKKwlhZGR4CSVnMiwlZzQsJW8wCUMgYWRkIHNpZ24tY29tcGVuc2F0aW9uIGFuZCBjeSB0byBoaSBsaW1iCisJYWRkY2MJJW8yLDQsJW8yCUMgbG9vcCBjb3VudGVyCisJYm5lCUwobG9vcDApCisJIGxkCVslbzQrJW8yXSwlbzUKKworCXN1YmNjCSVvNSwlZzEsJWcxCisJYWRkeAklbzAsJWcwLCVvMAorCXJldGwKKwlzdAklZzEsWyVvNCslbzJdCisKK0wobGFyZ2UpOgorCWxkCVslbzErJW8yXSwlbzUKKwltb3YJMCwlbzAKKwlzcmEJJW8zLDMxLCVnNAlDIGc0ID0gbWFzayBvZiBvbmVzIGlmZiBTMl9MSU1CIDwgMAorCWIJTCgxKQorCSBhZGQJJW80LC00LCVvNAorTChsb29wKToKKwlzdWJjYwklbzUsJWczLCVnMworCWxkCVslbzErJW8yXSwlbzUKKwlhZGR4CSVvMCwlZzAsJW8wCisJc3QJJWczLFslbzQrJW8yXQorTCgxKToJd3IJJWcwLCVvNSwleQorCWFuZAklbzUsJWc0LCVnMgorCWFuZGNjCSVnMCwlZzAsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlbzMsJWcxCisJbXVsc2NjCSVnMSwlZzAsJWcxCisJcmQJJXksJWczCisJYWRkY2MJJWczLCVvMCwlZzMKKwlhZGR4CSVnMiwlZzEsJW8wCisJYWRkY2MJJW8yLDQsJW8yCisJYm5lCUwobG9vcCkKKwkgbGQJWyVvNCslbzJdLCVvNQorCisJc3ViY2MJJW81LCVnMywlZzMKKwlhZGR4CSVvMCwlZzAsJW8wCisJcmV0bAorCXN0CSVnMyxbJW80KyVvMl0KK0VQSUxPR1VFKG1wbl9zdWJtdWxfMSkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmMzMi91ZGl2LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmMzMi91ZGl2LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2FiM2RlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL3VkaXYuYXNtCkBAIC0wLDAgKzEsMTY3IEBACitkbmwgIFNQQVJDIHY3IF9fdWRpdl9xcm5uZCBkaXZpc2lvbiBzdXBwb3J0LCB1c2VkIGZyb20gbG9uZ2xvbmcuaC4KK2RubCAgVGhpcyBpcyBmb3IgdjcgQ1BVcyB3aXRoIGEgZmxvYXRpbmctcG9pbnQgdW5pdC4KKworZG5sICBDb3B5cmlnaHQgMTk5MywgMTk5NCwgMTk5NiwgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyByZW1fcHRyCWkwCitDIG4xCQlpMQorQyBuMAkJaTIKK0MgZAkJaTMKKworQVNNX1NUQVJUKCkKKworaWZkZWYoYFBJQycsCitgCVRFWFQKK0woZ2V0cGMpOgorCXJldGwKKwlub3AnKQorCisJVEVYVAorCUFMSUdOKDgpCitMKEMwKToJLmRvdWJsZQkwcjQyOTQ5NjcyOTYKK0woQzEpOgkuZG91YmxlCTByMjE0NzQ4MzY0OAorCitQUk9MT0dVRShtcG5fdWRpdl9xcm5uZCkKKwlzYXZlCSVzcCwtMTA0LCVzcAorCXN0CSVpMSxbJWZwLThdCisJbGQJWyVmcC04XSwlZjEwCisKK2lmZGVmKGBQSUMnLAorYEwocGMpOgljYWxsCUwoZ2V0cGMpCQlDIHB1dCBhZGRyZXNzIG9mIHRoaXMgaW5zbiBpbiAlbzcKKwlsZGQJWyVvNytMKEMwKS1MKHBjKV0sJWY4JywKK2AJc2V0aGkJJWhpKEwoQzApKSwlbzcKKwlsZGQJWyVvNyslbG8oTChDMCkpXSwlZjgnKQorCisJZml0b2QJJWYxMCwlZjQKKwljbXAJJWkxLDAKKwliZ2UJTCgyNDgpCisJbW92CSVpMCwlaTUKKwlmYWRkZAklZjQsJWY4LCVmNAorTCgyNDgpOgorCXN0CSVpMixbJWZwLThdCisJbGQJWyVmcC04XSwlZjEwCisJZm11bGQJJWY0LCVmOCwlZjYKKwljbXAJJWkyLDAKKwliZ2UJTCgyNDkpCisJZml0b2QJJWYxMCwlZjIKKwlmYWRkZAklZjIsJWY4LCVmMgorTCgyNDkpOgorCXN0CSVpMyxbJWZwLThdCisJZmFkZGQJJWY2LCVmMiwlZjIKKwlsZAlbJWZwLThdLCVmMTAKKwljbXAJJWkzLDAKKwliZ2UJTCgyNTApCisJZml0b2QJJWYxMCwlZjQKKwlmYWRkZAklZjQsJWY4LCVmNAorTCgyNTApOgorCWZkaXZkCSVmMiwlZjQsJWYyCisKK2lmZGVmKGBQSUMnLAorYAlsZGQJWyVvNytMKEMxKS1MKHBjKV0sJWY0JywKK2AJc2V0aGkJJWhpKEwoQzEpKSwlbzcKKwlsZGQJWyVvNyslbG8oTChDMSkpXSwlZjQnKQorCisJZmNtcGVkCSVmMiwlZjQKKwlub3AKKwlmYmdlLGEJTCgyNTEpCisJZnN1YmQJJWYyLCVmNCwlZjIKKwlmZHRvaQklZjIsJWYyCisJc3QJJWYyLFslZnAtOF0KKwliCUwoMjUyKQorCWxkCVslZnAtOF0sJWk0CitMKDI1MSk6CisJZmR0b2kJJWYyLCVmMgorCXN0CSVmMixbJWZwLThdCisJbGQJWyVmcC04XSwlaTQKKwlzZXRoaQklaGkoLTIxNDc0ODM2NDgpLCVnMgorCXhvcgklaTQsJWcyLCVpNAorTCgyNTIpOgorCXdyCSVnMCwlaTQsJXkKKwlzcmEJJWkzLDMxLCVnMgorCWFuZAklaTQsJWcyLCVnMgorCWFuZGNjCSVnMCwwLCVnMQorCW11bHNjYwklZzEsJWkzLCVnMQorCW11bHNjYwklZzEsJWkzLCVnMQorCW11bHNjYwklZzEsJWkzLCVnMQorCW11bHNjYwklZzEsJWkzLCVnMQorCW11bHNjYwklZzEsJWkzLCVnMQorCW11bHNjYwklZzEsJWkzLCVnMQorCW11bHNjYwklZzEsJWkzLCVnMQorCW11bHNjYwklZzEsJWkzLCVnMQorCW11bHNjYwklZzEsJWkzLCVnMQorCW11bHNjYwklZzEsJWkzLCVnMQorCW11bHNjYwklZzEsJWkzLCVnMQorCW11bHNjYwklZzEsJWkzLCVnMQorCW11bHNjYwklZzEsJWkzLCVnMQorCW11bHNjYwklZzEsJWkzLCVnMQorCW11bHNjYwklZzEsJWkzLCVnMQorCW11bHNjYwklZzEsJWkzLCVnMQorCW11bHNjYwklZzEsJWkzLCVnMQorCW11bHNjYwklZzEsJWkzLCVnMQorCW11bHNjYwklZzEsJWkzLCVnMQorCW11bHNjYwklZzEsJWkzLCVnMQorCW11bHNjYwklZzEsJWkzLCVnMQorCW11bHNjYwklZzEsJWkzLCVnMQorCW11bHNjYwklZzEsJWkzLCVnMQorCW11bHNjYwklZzEsJWkzLCVnMQorCW11bHNjYwklZzEsJWkzLCVnMQorCW11bHNjYwklZzEsJWkzLCVnMQorCW11bHNjYwklZzEsJWkzLCVnMQorCW11bHNjYwklZzEsJWkzLCVnMQorCW11bHNjYwklZzEsJWkzLCVnMQorCW11bHNjYwklZzEsJWkzLCVnMQorCW11bHNjYwklZzEsJWkzLCVnMQorCW11bHNjYwklZzEsJWkzLCVnMQorCW11bHNjYwklZzEsMCwlZzEKKwlhZGQJJWcxLCVnMiwlaTAKKwlyZAkleSwlZzMKKwlzdWJjYwklaTIsJWczLCVvNworCXN1YnhjYwklaTEsJWkwLCVnMAorCWJlCUwoMjUzKQorCWNtcAklbzcsJWkzCisKKwlhZGQJJWk0LC0xLCVpMAorCWFkZAklbzcsJWkzLCVvNworCXN0CSVvNyxbJWk1XQorCXJldAorCXJlc3RvcmUKK0woMjUzKToKKwlibHUJTCgyNDYpCisJbW92CSVpNCwlaTAKKwlhZGQJJWk0LDEsJWkwCisJc3ViCSVvNywlaTMsJW83CitMKDI0Nik6CisJc3QJJW83LFslaTVdCisJcmV0CisJcmVzdG9yZQorRVBJTE9HVUUobXBuX3VkaXZfcXJubmQpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjMzIvdWRpdl9uZnAuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL3VkaXZfbmZwLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmJiODIwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL3VkaXZfbmZwLmFzbQpAQCAtMCwwICsxLDIwMiBAQAorZG5sICBTUEFSQyB2NyBfX3VkaXZfcXJubmQgZGl2aXNpb24gc3VwcG9ydCwgdXNlZCBmcm9tIGxvbmdsb25nLmguCitkbmwgIFRoaXMgaXMgZm9yIHY3IENQVXMgd2l0aG91dCBhIGZsb2F0aW5nLXBvaW50IHVuaXQuCisKK2RubCAgQ29weXJpZ2h0IDE5OTMsIDE5OTQsIDE5OTYsIDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDIElOUFVUIFBBUkFNRVRFUlMKK0MgcmVtX3B0cglvMAorQyBuMQkJbzEKK0MgbjAJCW8yCitDIGQJCW8zCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fdWRpdl9xcm5uZCkKKwl0c3QJJW8zCisJYm5lZwlMKGxhcmdlZGl2aXNvcikKKwltb3YJOCwlZzEKKworCWIJTChwMSkKKwlhZGR4Y2MJJW8yLCVvMiwlbzIKKworTChwbG9wKToKKwliY2MJTChuMSkKKwlhZGR4Y2MJJW8yLCVvMiwlbzIKK0wocDEpOglhZGR4CSVvMSwlbzEsJW8xCisJc3ViY2MJJW8xLCVvMywlbzQKKwliY2MJTChuMikKKwlhZGR4Y2MJJW8yLCVvMiwlbzIKK0wocDIpOglhZGR4CSVvMSwlbzEsJW8xCisJc3ViY2MJJW8xLCVvMywlbzQKKwliY2MJTChuMykKKwlhZGR4Y2MJJW8yLCVvMiwlbzIKK0wocDMpOglhZGR4CSVvMSwlbzEsJW8xCisJc3ViY2MJJW8xLCVvMywlbzQKKwliY2MJTChuNCkKKwlhZGR4Y2MJJW8yLCVvMiwlbzIKK0wocDQpOglhZGR4CSVvMSwlbzEsJW8xCisJYWRkY2MJJWcxLC0xLCVnMQorCWJuZQlMKHBsb3ApCisJc3ViY2MJJW8xLCVvMywlbzQKKwliY2MJTChuNSkKKwlhZGR4Y2MJJW8yLCVvMiwlbzIKK0wocDUpOglzdAklbzEsWyVvMF0KKwlyZXRsCisJeG5vcgklZzAsJW8yLCVvMAorCitMKG5sb3ApOgorCWJjYwlMKHAxKQorCWFkZHhjYwklbzIsJW8yLCVvMgorTChuMSk6CWFkZHgJJW80LCVvNCwlbzQKKwlzdWJjYwklbzQsJW8zLCVvMQorCWJjYwlMKHAyKQorCWFkZHhjYwklbzIsJW8yLCVvMgorTChuMik6CWFkZHgJJW80LCVvNCwlbzQKKwlzdWJjYwklbzQsJW8zLCVvMQorCWJjYwlMKHAzKQorCWFkZHhjYwklbzIsJW8yLCVvMgorTChuMyk6CWFkZHgJJW80LCVvNCwlbzQKKwlzdWJjYwklbzQsJW8zLCVvMQorCWJjYwlMKHA0KQorCWFkZHhjYwklbzIsJW8yLCVvMgorTChuNCk6CWFkZHgJJW80LCVvNCwlbzQKKwlhZGRjYwklZzEsLTEsJWcxCisJYm5lCUwobmxvcCkKKwlzdWJjYwklbzQsJW8zLCVvMQorCWJjYwlMKHA1KQorCWFkZHhjYwklbzIsJW8yLCVvMgorTChuNSk6CXN0CSVvNCxbJW8wXQorCXJldGwKKwl4bm9yCSVnMCwlbzIsJW8wCisKK0wobGFyZ2VkaXZpc29yKToKKwlhbmQJJW8yLDEsJW81CUMgJW81ID0gbjAgJiAxCisKKwlzcmwJJW8yLDEsJW8yCisJc2xsCSVvMSwzMSwlZzIKKwlvcgklZzIsJW8yLCVvMglDICVvMiA9IGxvKG4xbjAgPj4gMSkKKwlzcmwJJW8xLDEsJW8xCUMgJW8xID0gaGkobjFuMCA+PiAxKQorCisJYW5kCSVvMywxLCVnMgorCXNybAklbzMsMSwlZzMJQyAlZzMgPSBmbG9vcihkIC8gMikKKwlhZGQJJWczLCVnMiwlZzMJQyAlZzMgPSBjZWlsKGQgLyAyKQorCisJYglMKExwMSkKKwlhZGR4Y2MJJW8yLCVvMiwlbzIKKworTChMcGxvcCk6CisJYmNjCUwoTG4xKQorCWFkZHhjYwklbzIsJW8yLCVvMgorTChMcDEpOglhZGR4CSVvMSwlbzEsJW8xCisJc3ViY2MJJW8xLCVnMywlbzQKKwliY2MJTChMbjIpCisJYWRkeGNjCSVvMiwlbzIsJW8yCitMKExwMik6CWFkZHgJJW8xLCVvMSwlbzEKKwlzdWJjYwklbzEsJWczLCVvNAorCWJjYwlMKExuMykKKwlhZGR4Y2MJJW8yLCVvMiwlbzIKK0woTHAzKToJYWRkeAklbzEsJW8xLCVvMQorCXN1YmNjCSVvMSwlZzMsJW80CisJYmNjCUwoTG40KQorCWFkZHhjYwklbzIsJW8yLCVvMgorTChMcDQpOglhZGR4CSVvMSwlbzEsJW8xCisJYWRkY2MJJWcxLC0xLCVnMQorCWJuZQlMKExwbG9wKQorCXN1YmNjCSVvMSwlZzMsJW80CisJYmNjCUwoTG41KQorCWFkZHhjYwklbzIsJW8yLCVvMgorTChMcDUpOglhZGQJJW8xLCVvMSwlbzEJQyA8PCAxCisJdHN0CSVnMgorCWJuZQlMKG9kZHApCisJYWRkCSVvNSwlbzEsJW8xCisJc3QJJW8xLFslbzBdCisJcmV0bAorCXhub3IJJWcwLCVvMiwlbzAKKworTChMbmxvcCk6CisJYmNjCUwoTHAxKQorCWFkZHhjYwklbzIsJW8yLCVvMgorTChMbjEpOglhZGR4CSVvNCwlbzQsJW80CisJc3ViY2MJJW80LCVnMywlbzEKKwliY2MJTChMcDIpCisJYWRkeGNjCSVvMiwlbzIsJW8yCitMKExuMik6CWFkZHgJJW80LCVvNCwlbzQKKwlzdWJjYwklbzQsJWczLCVvMQorCWJjYwlMKExwMykKKwlhZGR4Y2MJJW8yLCVvMiwlbzIKK0woTG4zKToJYWRkeAklbzQsJW80LCVvNAorCXN1YmNjCSVvNCwlZzMsJW8xCisJYmNjCUwoTHA0KQorCWFkZHhjYwklbzIsJW8yLCVvMgorTChMbjQpOglhZGR4CSVvNCwlbzQsJW80CisJYWRkY2MJJWcxLC0xLCVnMQorCWJuZQlMKExubG9wKQorCXN1YmNjCSVvNCwlZzMsJW8xCisJYmNjCUwoTHA1KQorCWFkZHhjYwklbzIsJW8yLCVvMgorTChMbjUpOglhZGQJJW80LCVvNCwlbzQJQyA8PCAxCisJdHN0CSVnMgorCWJuZQlMKG9kZG4pCisJYWRkCSVvNSwlbzQsJW80CisJc3QJJW80LFslbzBdCisJcmV0bAorCXhub3IJJWcwLCVvMiwlbzAKKworTChvZGRwKToKKwl4bm9yCSVnMCwlbzIsJW8yCisJQyBxJyBpbiAlbzIuIHInIGluICVvMQorCWFkZGNjCSVvMSwlbzIsJW8xCisJYmNjCUwoTHA2KQorCWFkZHgJJW8yLDAsJW8yCisJc3ViCSVvMSwlbzMsJW8xCitMKExwNik6CXN1YmNjCSVvMSwlbzMsJWcwCisJYmNzCUwoTHA3KQorCXN1YngJJW8yLC0xLCVvMgorCXN1YgklbzEsJW8zLCVvMQorTChMcDcpOglzdAklbzEsWyVvMF0KKwlyZXRsCisJbW92CSVvMiwlbzAKKworTChvZGRuKToKKwl4bm9yCSVnMCwlbzIsJW8yCisJQyBxJyBpbiAlbzIuIHInIGluICVvNAorCWFkZGNjCSVvNCwlbzIsJW80CisJYmNjCUwoTG42KQorCWFkZHgJJW8yLDAsJW8yCisJc3ViCSVvNCwlbzMsJW80CitMKExuNik6CXN1YmNjCSVvNCwlbzMsJWcwCisJYmNzCUwoTG43KQorCXN1YngJJW8yLC0xLCVvMgorCXN1YgklbzQsJW8zLCVvNAorTChMbjcpOglzdAklbzQsWyVvMF0KKwlyZXRsCisJbW92CSVvMiwlbzAKK0VQSUxPR1VFKG1wbl91ZGl2X3Fybm5kKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL3VsdHJhc3BhcmN0MS9hZGRfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjMzIvdWx0cmFzcGFyY3QxL2FkZF9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzgxNTk2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL3VsdHJhc3BhcmN0MS9hZGRfbi5hc20KQEAgLTAsMCArMSw3MCBAQAorZG5sICBTUEFSQyBUMSAzMi1iaXQgbXBuX2FkZF9uLgorCitkbmwgIENvcHlyaWdodCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsICAlbzApCitkZWZpbmUoYGFwJywgICVvMSkKK2RlZmluZShgYnAnLCAgJW8yKQorZGVmaW5lKGBuJywgICAlbzMpCitkZWZpbmUoYGN5JywgICVvNCkKKworZGVmaW5lKGBpJywgICAlbzMpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FkZF9uIG1wbl9hZGRfbmMpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fYWRkX25jKQorCWIJTChlbnQpCisJc3JsCWN5LCAwLCBjeQlDIHN0cmlwIGFueSBib2d1cyBoaWdoIGJpdHMKK0VQSUxPR1VFKCkKKworUFJPTE9HVUUobXBuX2FkZF9uKQorCW1vdgkwLCBjeQorTChlbnQpOglzcmwJbiwgMCwgbgkJQyBzdHJpcCBhbnkgYm9ndXMgaGlnaCBiaXRzCisJc2xsCW4sIDIsIG4KKwlhZGQJYXAsIG4sIGFwCisJYWRkCWJwLCBuLCBicAorCWFkZAlycCwgbiwgcnAKKwluZWcJbiwgaQorCitMKHRvcCk6CWxkdXcJW2FwK2ldLCAlZzEKKwlsZHV3CVticCtpXSwgJWcyCisJYWRkCSVnMSwgJWcyLCAlZzMKKwlhZGQJJWczLCBjeSwgJWczCisJc3R3CSVnMywgW3JwK2ldCisJYWRkCWksIDQsIGkKKwlicm56CWksIEwodG9wKQorCXNybHgJJWczLCAzMiwgY3kKKworCXJldGwKKwltb3YJY3ksICVvMAkJQyByZXR1cm4gdmFsdWUKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmMzMi91bHRyYXNwYXJjdDEvYWRkbXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL3VsdHJhc3BhcmN0MS9hZGRtdWxfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlkYTE4NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmMzMi91bHRyYXNwYXJjdDEvYWRkbXVsXzEuYXNtCkBAIC0wLDAgKzEsOTAgQEAKK2RubCAgU1BBUkMgVDEgMzItYml0IG1wbl9hZGRtdWxfMS4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgRGF2aWQgTWlsbGVyLgorCitkbmwgIENvcHlyaWdodCAyMDEwLCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJCSAgIGN5Y2xlcy9saW1iCitDIFVsdHJhU1BBUkMgVDE6ICAgICAgIDI0CitDIFVsdHJhU1BBUkMgVDI6ICAgICAgIDE5CitDIFVsdHJhU1BBUkMgVDM6ICAgICAgIDE5CitDIFVsdHJhU1BBUkMgVDQ6ICAgICAgIDUKKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywJYCVpMCcpCitkZWZpbmUoYHVwJywJYCVpMScpCitkZWZpbmUoYG4nLAlgJWkyJykKK2RlZmluZShgdjAnLAlgJWkzJykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9hZGRtdWxfMSkKKwlzYXZlCSVzcCwgLTk2LCAlc3AKKwlzcmwJbiwgMCwgJW80CisJc3JsCXYwLCAwLCAlZzEKKwlzdWJjYwklbzQsIDEsICVvNAorCWJlCUwoZmluYWxfb25lKQorCSBjbHIJJW81CisKK0wodG9wKToJbGR1dwlbdXArMF0sICVsMAorCWxkdXcJW3JwKzBdLCAlbDIKKwlsZHV3CVt1cCs0XSwgJWwxCisJbGR1dwlbcnArNF0sICVsMworCW11bHgJJWwwLCAlZzEsICVnMworCWFkZAl1cCwgOCwgdXAKKwltdWx4CSVsMSwgJWcxLCAlbzMKKwlzdWIJJW80LCAyLCAlbzQKKwlhZGQJcnAsIDgsIHJwCisJYWRkCSVsMiwgJWczLCAlZzMKKwlhZGQJJW81LCAlZzMsICVnMworCXN0dwklZzMsIFtycC04XQorCXNybHgJJWczLCAzMiwgJW81CisJYWRkCSVsMywgJW8zLCAlbzMKKwlhZGQJJW81LCAlbzMsICVvMworCXN0dwklbzMsIFtycC00XQorCWJyZ3oJJW80LCBMKHRvcCkKKwkgc3JseAklbzMsIDMyLCAlbzUKKworCWJybHoscHQJJW80LCBMKGRvbmUpCisJIG5vcAorCitMKGZpbmFsX29uZSk6CisJbGR1dwlbdXArMF0sICVsMAorCWxkdXcJW3JwKzBdLCAlbDIKKwltdWx4CSVsMCwgJWcxLCAlZzMKKwlhZGQJJWwyLCAlZzMsICVnMworCWFkZAklbzUsICVnMywgJWczCisJc3R3CSVnMywgW3JwKzBdCisJc3JseAklZzMsIDMyLCAlbzUKKworTChkb25lKToKKwlyZXQKKwkgcmVzdG9yZSAlbzUsIDAsICVvMAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL3VsdHJhc3BhcmN0MS9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjMzIvdWx0cmFzcGFyY3QxL2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjlkNWE0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL3VsdHJhc3BhcmN0MS9nbXAtbXBhcmFtLmgKQEAgLTAsMCArMSwxNTMgQEAKKy8qIFVsdHJhU1BBUkMgVCAzMi1iaXQgZ21wLW1wYXJhbS5oIC0tIENvbXBpbGVyL21hY2hpbmUgcGFyYW1ldGVyIGhlYWRlciBmaWxlLgorCitDb3B5cmlnaHQgMTk5MSwgMTk5MywgMTk5NCwgMjAwMC0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIERJVlJFTV8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgRElWUkVNXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgIDMKKyNkZWZpbmUgTU9EXzFfMVBfTUVUSE9EICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgTU9EXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PRF8xTl9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA5CisjZGVmaW5lIE1PRF8xVV9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgIDEwCisjZGVmaW5lIE1PRF8xXzFfVE9fTU9EXzFfMl9USFJFU0hPTEQgICAgICAgICAwICAvKiBuZXZlciBtcG5fbW9kXzFfMXAgKi8KKyNkZWZpbmUgTU9EXzFfMl9UT19NT0RfMV80X1RIUkVTSE9MRCAgICAgICAgMjEKKyNkZWZpbmUgUFJFSU5WX01PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgMjIKKyNkZWZpbmUgVVNFX1BSRUlOVl9ESVZSRU1fMSAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgRElWX1FSXzJfUEkyX1RIUkVTSE9MRCAgICAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWRVhBQ1RfMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBCTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgICAgICAzNQorCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDk4CisjZGVmaW5lIE1VTF9UT09NNDRfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTY2CisjZGVmaW5lIE1VTF9UT09NNkhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjI2CisjZGVmaW5lIE1VTF9UT09NOEhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMzMzCisKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNDNfVEhSRVNIT0xEICAgICAgOTcKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxMzkKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNTNfVEhSRVNIT0xEICAgICAgOTcKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNjNfVEhSRVNIT0xEICAgICAgOTgKKyNkZWZpbmUgTVVMX1RPT000M19UT19UT09NNTRfVEhSRVNIT0xEICAgICAxMjAKKworI2RlZmluZSBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgICAgNgorI2RlZmluZSBTUVJfVE9PTTJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAzNAorI2RlZmluZSBTUVJfVE9PTTNfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDExMAorI2RlZmluZSBTUVJfVE9PTTRfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE3OAorI2RlZmluZSBTUVJfVE9PTTZfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDI0MAorI2RlZmluZSBTUVJfVE9PTThfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDMzMworCisjZGVmaW5lIE1VTE1JRF9UT09NNDJfVEhSRVNIT0xEICAgICAgICAgICAgIDIyCisKKyNkZWZpbmUgTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgU1FSTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTMKKworI2RlZmluZSBNVUxfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDI4MCAgLyogayA9IDUgKi8KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDI4MCwgNX0sIHsgICAgIDE1LCA2fSwgeyAgICAgIDgsIDV9LCB7ICAgICAxNywgNn0sIFwKKyAgICB7ICAgICAgOSwgNX0sIHsgICAgIDE5LCA2fSwgeyAgICAgMTMsIDd9LCB7ICAgICAgNywgNn0sIFwKKyAgICB7ICAgICAxNywgN30sIHsgICAgICA5LCA2fSwgeyAgICAgMjAsIDd9LCB7ICAgICAxMSwgNn0sIFwKKyAgICB7ICAgICAyMywgN30sIHsgICAgIDEzLCA4fSwgeyAgICAgIDcsIDd9LCB7ICAgICAyMSwgOH0sIFwKKyAgICB7ICAgICAxMSwgN30sIHsgICAgIDI1LCA5fSwgeyAgICAgIDcsIDh9LCB7ICAgICAxNSwgN30sIFwKKyAgICB7ICAgICAzMywgOH0sIHsgICAgIDE5LCA3fSwgeyAgICAgNDEsIDh9LCB7ICAgICAyMywgN30sIFwKKyAgICB7ICAgICA0OSwgOH0sIHsgICAgIDI3LCA5fSwgeyAgICAgMTUsIDh9LCB7ICAgICAzMSwgN30sIFwKKyAgICB7ICAgICA2MywgOH0sIHsgICAgIDM5LCA5fSwgeyAgICAgMjMsIDh9LCB7ICAgICA0NywxMH0sIFwKKyAgICB7ICAgICAxNSwgOX0sIHsgICAgIDMxLCA4fSwgeyAgICAgNjcsIDl9LCB7ICAgICAzOSwgOH0sIFwKKyAgICB7ICAgICA3OSwgOX0sIHsgICAgIDQ3LDEwfSwgeyAgICAgMzEsIDl9LCB7ICAgICA3OSwxMH0sIFwKKyAgICB7ICAgICA0NywxMX0sIHsgICAgIDMxLDEwfSwgeyAgICAgNjMsIDl9LCB7ICAgIDEyNywgOH0sIFwKKyAgICB7ICAgIDI1NSwxMH0sIHsgICAgIDc5LCA5fSwgeyAgICAxNTksIDh9LCB7ICAgIDMxOSwxMH0sIFwKKyAgICB7ICAgICA5NSwgOX0sIHsgICAgMTkxLCA4fSwgeyAgICAzODMsMTF9LCB7ICAgICA2MywxMH0sIFwKKyAgICB7ICAgIDEyNywgOX0sIHsgICAgMjU1LDEwfSwgeyAgICAxNDMsIDl9LCB7ICAgIDI4NywxMH0sIFwKKyAgICB7ICAgIDE1OSwgOX0sIHsgICAgMzE5LDEwfSwgeyAgICAxNzUsMTF9LCB7ICAgICA5NSwxMH0sIFwKKyAgICB7ICAgIDE5MSwgOX0sIHsgICAgMzgzLDEyfSwgeyAgIDQwOTYsMTN9LCB7ICAgODE5MiwxNH0sIFwKKyAgICB7ICAxNjM4NCwxNX0sIHsgIDMyNzY4LDE2fSB9CisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzX1NJWkUgNjYKKyNkZWZpbmUgTVVMX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDM3MTIKKworI2RlZmluZSBTUVJfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDI0MCAgLyogayA9IDUgKi8KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDI0MCwgNX0sIHsgICAgIDE1LCA2fSwgeyAgICAgIDgsIDV9LCB7ICAgICAxNywgNn0sIFwKKyAgICB7ICAgICAxMywgN30sIHsgICAgICA3LCA2fSwgeyAgICAgMTcsIDd9LCB7ICAgICAgOSwgNn0sIFwKKyAgICB7ICAgICAyMCwgN30sIHsgICAgIDExLCA2fSwgeyAgICAgMjMsIDd9LCB7ICAgICAxMywgOH0sIFwKKyAgICB7ICAgICAgNywgN30sIHsgICAgIDE5LCA4fSwgeyAgICAgMTEsIDd9LCB7ICAgICAyNSwgOX0sIFwKKyAgICB7ICAgICAgNywgOH0sIHsgICAgIDE1LCA3fSwgeyAgICAgMzMsIDh9LCB7ICAgICAxOSwgN30sIFwKKyAgICB7ICAgICAzOSwgOH0sIHsgICAgIDIzLCA3fSwgeyAgICAgNDcsIDh9LCB7ICAgICAyNywgOX0sIFwKKyAgICB7ICAgICAxNSwgOH0sIHsgICAgIDM5LCA5fSwgeyAgICAgMjMsIDh9LCB7ICAgICA0NywxMH0sIFwKKyAgICB7ICAgICAxNSwgOX0sIHsgICAgIDMxLCA4fSwgeyAgICAgNjMsIDl9LCB7ICAgICAzOSwgOH0sIFwKKyAgICB7ICAgICA3OSwgOX0sIHsgICAgIDQ3LDEwfSwgeyAgICAgMzEsIDl9LCB7ICAgICA2MywgOH0sIFwKKyAgICB7ICAgIDEyNywgOX0sIHsgICAgIDcxLCA4fSwgeyAgICAxNDMsIDl9LCB7ICAgICA3OSwxMH0sIFwKKyAgICB7ICAgICA0NywxMX0sIHsgICAgIDMxLDEwfSwgeyAgICAgNjMsIDl9LCB7ICAgIDEyNywgOH0sIFwKKyAgICB7ICAgIDI1NSwgOX0sIHsgICAgMTQzLDEwfSwgeyAgICAgNzksIDl9LCB7ICAgIDE1OSwgOH0sIFwKKyAgICB7ICAgIDMxOSwgOX0sIHsgICAgMTc1LDEwfSwgeyAgICAgOTUsIDl9LCB7ICAgIDE5MSwgOH0sIFwKKyAgICB7ICAgIDM4MywgOX0sIHsgICAgMjA3LDExfSwgeyAgICAgNjMsMTB9LCB7ICAgIDEyNywgOX0sIFwKKyAgICB7ICAgIDI1NSwxMH0sIHsgICAgMTQzLCA5fSwgeyAgICAyODcsMTB9LCB7ICAgIDE1OSwgOX0sIFwKKyAgICB7ICAgIDMxOSwxMH0sIHsgICAgMTc1LDExfSwgeyAgICAgOTUsMTB9LCB7ICAgIDE5MSwgOX0sIFwKKyAgICB7ICAgIDM4MywxMH0sIHsgICAgMjA3LDEyfSwgeyAgIDQwOTYsMTN9LCB7ICAgODE5MiwxNH0sIFwKKyAgICB7ICAxNjM4NCwxNX0sIHsgIDMyNzY4LDE2fSB9CisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzX1NJWkUgNzAKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDI2MjQKKworI2RlZmluZSBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDUxCisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgICA2NjMzCisKKyNkZWZpbmUgRENfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNTEKKyNkZWZpbmUgRENfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAyMDIKKyNkZWZpbmUgRENfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNDcKKyNkZWZpbmUgRENfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMjQKKworI2RlZmluZSBJTlZfTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAyNgorI2RlZmluZSBJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDI2NgorI2RlZmluZSBJTlZfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDIyMgorCisjZGVmaW5lIEJJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgMjk2CisjZGVmaW5lIFJFRENfMV9UT19SRURDX05fVEhSRVNIT0xEICAgICAgICAgIDU5CisKKyNkZWZpbmUgTVVfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDEzMzQKKyNkZWZpbmUgTVVfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgIDE0OTkKKyNkZWZpbmUgTVVQSV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAxMTYKKyNkZWZpbmUgTVVfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgIDEwNTcKKyNkZWZpbmUgTVVfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDEzMzQKKworI2RlZmluZSBQT1dNX1NFQ19UQUJMRSAgNiwzNSwyMTMsNzI0LDI2MTgKKworI2RlZmluZSBNQVRSSVgyMl9TVFJBU1NFTl9USFJFU0hPTEQgICAgICAgICAxNQorI2RlZmluZSBIR0NEX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgICA4NAorI2RlZmluZSBIR0NEX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDEwMQorI2RlZmluZSBIR0NEX1JFRFVDRV9USFJFU0hPTEQgICAgICAgICAgICAgMTQzNworI2RlZmluZSBHQ0RfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDM3MgorI2RlZmluZSBHQ0RFWFRfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDI1MworI2RlZmluZSBKQUNPQklfQkFTRV9NRVRIT0QgICAgICAgICAgICAgICAgICAgMgorCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgIDI3CisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgMzk5CisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgODg1CisKKyNkZWZpbmUgRkFDX0RTQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAxNzkKKyNkZWZpbmUgRkFDX09ERF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgMjkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmMzMi91bHRyYXNwYXJjdDEvbXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL3VsdHJhc3BhcmN0MS9tdWxfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIzOWNkMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmMzMi91bHRyYXNwYXJjdDEvbXVsXzEuYXNtCkBAIC0wLDAgKzEsODMgQEAKK2RubCAgU1BBUkMgVDEgMzItYml0IG1wbl9tdWxfMS4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgRGF2aWQgTWlsbGVyLgorCitkbmwgIENvcHlyaWdodCAyMDEwLCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJCSAgIGN5Y2xlcy9saW1iCitDIFVsdHJhU1BBUkMgVDE6ICAgICAgIDIwCitDIFVsdHJhU1BBUkMgVDI6ICAgICAgIDE4CitDIFVsdHJhU1BBUkMgVDM6ICAgICAgIDE4CitDIFVsdHJhU1BBUkMgVDQ6ICAgICAgIDQKKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywJYCVvMCcpCitkZWZpbmUoYHVwJywJYCVvMScpCitkZWZpbmUoYG4nLAlgJW8yJykKK2RlZmluZShgdjAnLAlgJW8zJykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9tdWxfMSkKKwlzcmwJbiwgMCwgbgorCXNybAl2MCwgMCwgdjAKKwlzdWJjYwluLCAxLCBuCisJYmUJTChmaW5hbF9vbmUpCisJIGNscgklbzUKKworTCh0b3ApOglsZHV3CVt1cCswXSwgJWcxCisJbGR1dwlbdXArNF0sICVnMgorCW11bHgJJWcxLCB2MCwgJWczCisJYWRkCXVwLCA4LCB1cAorCW11bHgJJWcyLCB2MCwgJW80CisJc3ViCW4sIDIsIG4KKwlhZGQJcnAsIDgsIHJwCisJYWRkCSVvNSwgJWczLCAlZzMKKwlzdHcJJWczLCBbcnAtOF0KKwlzcmx4CSVnMywgMzIsICVvNQorCWFkZAklbzUsICVvNCwgJW80CisJc3R3CSVvNCwgW3JwLTRdCisJYnJnegluLCBMKHRvcCkKKwkgc3JseAklbzQsIDMyLCAlbzUKKworCWJybHoscHQJbiwgTChkb25lKQorCSBub3AKKworTChmaW5hbF9vbmUpOgorCWxkdXcJW3VwKzBdLCAlZzEKKwltdWx4CSVnMSwgdjAsICVnMworCWFkZAklbzUsICVnMywgJWczCisJc3R3CSVnMywgW3JwKzBdCisJc3JseAklZzMsIDMyLCAlbzUKKworTChkb25lKToKKwlyZXRsCisJIG1vdgklbzUsICVvMAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL3VsdHJhc3BhcmN0MS9zcXJfZGlhZ29uYWwuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL3VsdHJhc3BhcmN0MS9zcXJfZGlhZ29uYWwuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiOTA2ZWYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjMzIvdWx0cmFzcGFyY3QxL3Nxcl9kaWFnb25hbC5hc20KQEAgLTAsMCArMSw1NSBAQAorZG5sICBTUEFSQyBUMSAzMi1iaXQgbXBuX3Nxcl9kaWFnb25hbC4KKworZG5sICBDb3B5cmlnaHQgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLAlgJW8wJykKK2RlZmluZShgdXAnLAlgJW8xJykKK2RlZmluZShgbicsCWAlbzInKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX3Nxcl9kaWFnb25hbCkKKwlkZWNjYwluCQkJQyBuLS0KKwlub3AKKworTCh0b3ApOglsZHV3CVt1cCswXSwgJWcxCisJYWRkCXVwLCA0LCB1cAkJQyB1cCsrCisJbXVseAklZzEsICVnMSwgJWczCisJc3R3CSVnMywgW3JwKzBdCisJc3JseAklZzMsIDMyLCAlZzQKKwlzdHcJJWc0LCBbcnArNF0KKwlhZGQJcnAsIDgsIHJwCQlDIHJwICs9IDIKKwlibnoJJWljYywgTCh0b3ApCisJZGVjY2MJbgkJCUMgbi0tCisKKwlyZXRsCisJbm9wCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjMzIvdWx0cmFzcGFyY3QxL3N1Yl9uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmMzMi91bHRyYXNwYXJjdDEvc3ViX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NmJjM2YKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjMzIvdWx0cmFzcGFyY3QxL3N1Yl9uLmFzbQpAQCAtMCwwICsxLDcwIEBACitkbmwgIFNQQVJDIFQxIDMyLWJpdCBtcG5fc3ViX24uCisKK2RubCAgQ29weXJpZ2h0IDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywgICVvMCkKK2RlZmluZShgYXAnLCAgJW8xKQorZGVmaW5lKGBicCcsICAlbzIpCitkZWZpbmUoYG4nLCAgICVvMykKK2RlZmluZShgY3knLCAgJW80KQorCitkZWZpbmUoYGknLCAgICVvMykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fc3ViX24gbXBuX3N1Yl9uYykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9zdWJfbmMpCisJYglMKGVudCkKKwlzcmwJY3ksIDAsIGN5CUMgc3RyaXAgYW55IGJvZ3VzIGhpZ2ggYml0cworRVBJTE9HVUUoKQorCitQUk9MT0dVRShtcG5fc3ViX24pCisJbW92CTAsIGN5CitMKGVudCk6CXNybAluLCAwLCBuCQlDIHN0cmlwIGFueSBib2d1cyBoaWdoIGJpdHMKKwlzbGwJbiwgMiwgbgorCWFkZAlhcCwgbiwgYXAKKwlhZGQJYnAsIG4sIGJwCisJYWRkCXJwLCBuLCBycAorCW5lZwluLCBpCisKK0wodG9wKToJbGR1dwlbYXAraV0sICVnMQorCWxkdXcJW2JwK2ldLCAlZzIKKwlzdWIJJWcxLCAlZzIsICVnMworCXN1YgklZzMsIGN5LCAlZzMKKwlzdHcJJWczLCBbcnAraV0KKwlhZGQJaSwgNCwgaQorCWJybnoJaSwgTCh0b3ApCisJc3JseAklZzMsIDYzLCBjeQorCisJcmV0bAorCW1vdgljeSwgJW8wCQlDIHJldHVybiB2YWx1ZQorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL3VsdHJhc3BhcmN0MS9zdWJtdWxfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjMzIvdWx0cmFzcGFyY3QxL3N1Ym11bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTIwMDcwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL3VsdHJhc3BhcmN0MS9zdWJtdWxfMS5hc20KQEAgLTAsMCArMSw5MSBAQAorZG5sICBTUEFSQyBUMSAzMi1iaXQgbXBuX3N1Ym11bF8xLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBEYXZpZCBNaWxsZXIuCisKK2RubCAgQ29weXJpZ2h0IDIwMTAsIDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkJICAgY3ljbGVzL2xpbWIKK0MgVWx0cmFTUEFSQyBUMTogICAgICAgMjQKK0MgVWx0cmFTUEFSQyBUMjogICAgICAgMTkKK0MgVWx0cmFTUEFSQyBUMzogICAgICAgMTkKK0MgVWx0cmFTUEFSQyBUNDogICAgICAgNQorCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLAlgJWkwJykKK2RlZmluZShgdXAnLAlgJWkxJykKK2RlZmluZShgbicsCWAlaTInKQorZGVmaW5lKGB2MCcsCWAlaTMnKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX3N1Ym11bF8xKQorCXNhdmUJJXNwLCAtOTYsICVzcAorCXNybAluLCAwLCAlbzQKKwlzcmwJdjAsIDAsICVnMQorCXN1YmNjCSVvNCwgMSwgJW80CisJYmUJTChmaW5hbF9vbmUpCisJIHN1YmNjCSVnMCwgMCwgJW81CisKK0wodG9wKToJbGR1dwlbdXArMF0sICVsMAorCWxkdXcJW3JwKzBdLCAlbDIKKwlsZHV3CVt1cCs0XSwgJWwxCisJbGR1dwlbcnArNF0sICVsMworCW11bHgJJWwwLCAlZzEsICVnMworCWFkZAl1cCwgOCwgdXAKKwltdWx4CSVsMSwgJWcxLCAlbzMKKwlzdWIJJW80LCAyLCAlbzQKKwlhZGQJcnAsIDgsIHJwCisJYWRkeAklbzUsICVnMywgJWczCisJc3JseAklZzMsIDMyLCAlbzUKKwlzdWJjYwklbDIsICVnMywgJWczCisJc3R3CSVnMywgW3JwLThdCisJYWRkeAklbzUsICVvMywgJW8zCisJc3JseAklbzMsIDMyLCAlbzUKKwlzdWJjYwklbDMsICVvMywgJW8zCisJYnJnegklbzQsIEwodG9wKQorCSBzdHcJJW8zLCBbcnAtNF0KKworCWJybHoscHQJJW80LCBMKGRvbmUpCisJIG5vcAorCitMKGZpbmFsX29uZSk6CisJbGR1dwlbdXArMF0sICVsMAorCWxkdXcJW3JwKzBdLCAlbDIKKwltdWx4CSVsMCwgJWcxLCAlZzMKKwlhZGR4CSVvNSwgJWczLCAlZzMKKwlzcmx4CSVnMywgMzIsICVvNQorCXN1YmNjCSVsMiwgJWczLCAlZzMKKwlzdHcJJWczLCBbcnArMF0KKworTChkb25lKToKKwlhZGR4CSVvNSwgMCwgJW81CisJcmV0CisJIHJlc3RvcmUgJW81LCAwLCAlbzAKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmMzMi91bXVsLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmMzMi91bXVsLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTIwYjk1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL3VtdWwuYXNtCkBAIC0wLDAgKzEsNzcgQEAKK2RubCAgU1BBUkMgbXBuX3VtdWxfcHBtbSAtLSBzdXBwb3J0IGZvciBsb25nbG9uZy5oIGZvciBub24tZ2NjLgorCitkbmwgIENvcHlyaWdodCAxOTk1LCAxOTk2LCAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl91bXVsX3BwbW0pCisJd3IJJWcwLCVvMSwleQorCXNyYQklbzIsMzEsJWcyCUMgRG9uJ3QgbW92ZSB0aGlzIGluc24KKwlhbmQJJW8xLCVnMiwlZzIJQyBEb24ndCBtb3ZlIHRoaXMgaW5zbgorCWFuZGNjCSVnMCwwLCVnMQlDIERvbid0IG1vdmUgdGhpcyBpbnNuCisJbXVsc2NjCSVnMSwlbzIsJWcxCisJbXVsc2NjCSVnMSwlbzIsJWcxCisJbXVsc2NjCSVnMSwlbzIsJWcxCisJbXVsc2NjCSVnMSwlbzIsJWcxCisJbXVsc2NjCSVnMSwlbzIsJWcxCisJbXVsc2NjCSVnMSwlbzIsJWcxCisJbXVsc2NjCSVnMSwlbzIsJWcxCisJbXVsc2NjCSVnMSwlbzIsJWcxCisJbXVsc2NjCSVnMSwlbzIsJWcxCisJbXVsc2NjCSVnMSwlbzIsJWcxCisJbXVsc2NjCSVnMSwlbzIsJWcxCisJbXVsc2NjCSVnMSwlbzIsJWcxCisJbXVsc2NjCSVnMSwlbzIsJWcxCisJbXVsc2NjCSVnMSwlbzIsJWcxCisJbXVsc2NjCSVnMSwlbzIsJWcxCisJbXVsc2NjCSVnMSwlbzIsJWcxCisJbXVsc2NjCSVnMSwlbzIsJWcxCisJbXVsc2NjCSVnMSwlbzIsJWcxCisJbXVsc2NjCSVnMSwlbzIsJWcxCisJbXVsc2NjCSVnMSwlbzIsJWcxCisJbXVsc2NjCSVnMSwlbzIsJWcxCisJbXVsc2NjCSVnMSwlbzIsJWcxCisJbXVsc2NjCSVnMSwlbzIsJWcxCisJbXVsc2NjCSVnMSwlbzIsJWcxCisJbXVsc2NjCSVnMSwlbzIsJWcxCisJbXVsc2NjCSVnMSwlbzIsJWcxCisJbXVsc2NjCSVnMSwlbzIsJWcxCisJbXVsc2NjCSVnMSwlbzIsJWcxCisJbXVsc2NjCSVnMSwlbzIsJWcxCisJbXVsc2NjCSVnMSwlbzIsJWcxCisJbXVsc2NjCSVnMSwlbzIsJWcxCisJbXVsc2NjCSVnMSwlbzIsJWcxCisJbXVsc2NjCSVnMSwwLCVnMQorCXJkCSV5LCVnMworCXN0CSVnMyxbJW8wXQorCXJldGwKKwlhZGQJJWcxLCVnMiwlbzAKK0VQSUxPR1VFKG1wbl91bXVsX3BwbW0pCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjMzIvdjgvYWRkbXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL3Y4L2FkZG11bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDUyMDkyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL3Y4L2FkZG11bF8xLmFzbQpAQCAtMCwwICsxLDEzMSBAQAorZG5sICBTUEFSQyB2OCBtcG5fYWRkbXVsXzEgLS0gTXVsdGlwbHkgYSBsaW1iIHZlY3RvciB3aXRoIGEgbGltYiBhbmQKK2RubCAgYWRkIHRoZSByZXN1bHQgdG8gYSBzZWNvbmQgbGltYiB2ZWN0b3IuCisKK2RubCAgQ29weXJpZ2h0IDE5OTItMTk5NSwgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyByZXNfcHRyCW8wCitDIHMxX3B0cglvMQorQyBzaXplCQlvMgorQyBzMl9saW1iCW8zCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fYWRkbXVsXzEpCisJb3JjYwklZzAsJWcwLCVnMgorCWxkCVslbzErMF0sJW80CUMgMQorCisJc2xsCSVvMiw0LCVnMQorCWFuZAklZzEsKDQtMSk8PDQsJWcxCitpZmRlZihgUElDJywKK2AJbW92CSVvNywlZzQJCUMgU2F2ZSByZXR1cm4gYWRkcmVzcyByZWdpc3RlcgorMDoJY2FsbAkxZgorCWFkZAklbzcsTCgxKS0wYiwlZzMKKzE6CW1vdgklZzQsJW83CQlDIFJlc3RvcmUgcmV0dXJuIGFkZHJlc3MgcmVnaXN0ZXIKKycsCitgCXNldGhpCSVoaShMKDEpKSwlZzMKKwlvcgklZzMsJWxvKEwoMSkpLCVnMworJykKKwlqbXAJJWczKyVnMQorCW5vcAorTCgxKToKK0woTDAwKToJYWRkCSVvMCwtNCwlbzAKKwliCUwobG9vcDAwKQlDIDQsIDgsIDEyLCAuLi4KKwlhZGQJJW8xLC00LCVvMQorCW5vcAorTChMMDEpOgliCUwobG9vcDAxKQlDIDEsIDUsIDksIC4uLgorCW5vcAorCW5vcAorCW5vcAorTChMMTApOglhZGQJJW8wLC0xMiwlbzAJQyAyLCA2LCAxMCwgLi4uCisJYglMKGxvb3AxMCkKKwlhZGQJJW8xLDQsJW8xCisJbm9wCitMKEwxMSk6CWFkZAklbzAsLTgsJW8wCUMgMywgNywgMTEsIC4uLgorCWIJTChsb29wMTEpCisJYWRkCSVvMSwtOCwlbzEKKwlub3AKKworTChsb29wKToKKwlhZGRjYwklZzMsJWcyLCVnMwlDIDEKKwlsZAlbJW8xKzRdLCVvNAlDIDIKKwlyZAkleSwlZzIJCUMgMQorCWFkZHgJJWcwLCVnMiwlZzIKKwlsZAlbJW8wKzBdLCVnMQlDIDIKKwlhZGRjYwklZzEsJWczLCVnMworCXN0CSVnMyxbJW8wKzBdCUMgMQorTChsb29wMDApOgorCXVtdWwJJW80LCVvMywlZzMJQyAyCisJbGQJWyVvMCs0XSwlZzEJQyAyCisJYWRkeGNjCSVnMywlZzIsJWczCUMgMgorCWxkCVslbzErOF0sJW80CUMgMworCXJkCSV5LCVnMgkJQyAyCisJYWRkeAklZzAsJWcyLCVnMgorCW5vcAorCWFkZGNjCSVnMSwlZzMsJWczCisJc3QJJWczLFslbzArNF0JQyAyCitMKGxvb3AxMSk6CisJdW11bAklbzQsJW8zLCVnMwlDIDMKKwlhZGR4Y2MJJWczLCVnMiwlZzMJQyAzCisJbGQJWyVvMSsxMl0sJW80CUMgNAorCXJkCSV5LCVnMgkJQyAzCisJYWRkCSVvMSwxNiwlbzEKKwlhZGR4CSVnMCwlZzIsJWcyCisJbGQJWyVvMCs4XSwlZzEJQyAyCisJYWRkY2MJJWcxLCVnMywlZzMKKwlzdAklZzMsWyVvMCs4XQlDIDMKK0wobG9vcDEwKToKKwl1bXVsCSVvNCwlbzMsJWczCUMgNAorCWFkZHhjYwklZzMsJWcyLCVnMwlDIDQKKwlsZAlbJW8xKzBdLCVvNAlDIDEKKwlyZAkleSwlZzIJCUMgNAorCWFkZHgJJWcwLCVnMiwlZzIKKwlsZAlbJW8wKzEyXSwlZzEJQyAyCisJYWRkY2MJJWcxLCVnMywlZzMKKwlzdAklZzMsWyVvMCsxMl0JQyA0CisJYWRkCSVvMCwxNiwlbzAKKwlhZGR4CSVnMCwlZzIsJWcyCitMKGxvb3AwMSk6CisJYWRkY2MJJW8yLC00LCVvMgorCWJnCUwobG9vcCkKKwl1bXVsCSVvNCwlbzMsJWczCUMgMQorCisJYWRkY2MJJWczLCVnMiwlZzMJQyA0CisJcmQJJXksJWcyCQlDIDQKKwlhZGR4CSVnMCwlZzIsJWcyCisJbGQJWyVvMCswXSwlZzEJQyAyCisJYWRkY2MJJWcxLCVnMywlZzMKKwlzdAklZzMsWyVvMCswXQlDIDQKKwlhZGR4CSVnMCwlZzIsJW8wCisKKwlyZXRsCisJIG5vcAorRVBJTE9HVUUobXBuX2FkZG11bF8xKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL3Y4L2dtcC1tcGFyYW0uaCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmMzMi92OC9nbXAtbXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU3ODk3YgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmMzMi92OC9nbXAtbXBhcmFtLmgKQEAgLTAsMCArMSw3MyBAQAorLyogU1BBUkMgdjggZ21wLW1wYXJhbS5oIC0tIENvbXBpbGVyL21hY2hpbmUgcGFyYW1ldGVyIGhlYWRlciBmaWxlLgorCitDb3B5cmlnaHQgMTk5MSwgMTk5MywgMTk5NCwgMTk5OS0yMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisKKyNkZWZpbmUgR01QX0xJTUJfQklUUyAzMgorI2RlZmluZSBHTVBfTElNQl9CWVRFUyA0CisKKy8qIEdlbmVyYXRlZCBieSB0dW5ldXAuYywgMjAwNC0wMi0wNywgZ2NjIDIuOTUgKi8KKworI2RlZmluZSBNVUxfVE9PTTIyX1RIUkVTSE9MRCAgICAgICAgICAgICAxMAorI2RlZmluZSBNVUxfVE9PTTMzX1RIUkVTSE9MRCAgICAgICAgICAgICA2NQorCisjZGVmaW5lIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICA0CisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgIDE4CisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgIDY1CisKKyNkZWZpbmUgRElWX1NCX1BSRUlOVl9USFJFU0hPTEQgICAgICAgICAgIDUKKyNkZWZpbmUgRElWX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgUE9XTV9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgMzgKKworI2RlZmluZSBIR0NEX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICA2OQorI2RlZmluZSBHQ0RfQUNDRUxfVEhSRVNIT0xEICAgICAgICAgICAgICAgMworI2RlZmluZSBHQ0RfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDQ5OAorI2RlZmluZSBKQUNPQklfQkFTRV9NRVRIT0QgICAgICAgICAgICAgICAgMgorCisjZGVmaW5lIERJVlJFTV8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICA2CisjZGVmaW5lIERJVlJFTV8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgIDExCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICA1CisjZGVmaW5lIE1PRF8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICA5CisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAxCisjZGVmaW5lIFVTRV9QUkVJTlZfTU9EXzEgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIERJVlJFTV8yX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgRElWRVhBQ1RfMV9USFJFU0hPTEQgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RFWEFDVF8xX09ERF9USFJFU0hPTEQgICAgICAgICAgNAorCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgIDE0CisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgIDIzCisjZGVmaW5lIFNFVF9TVFJfVEhSRVNIT0xEICAgICAgICAgICAgICAxNjc5CisKKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRSAgeyAyNzIsIDY3MiwgMTE1MiwgMjU2MCwgMTAyNDAsIDI0NTc2LCAwIH0KKyNkZWZpbmUgTVVMX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAyNjQKKyNkZWZpbmUgTVVMX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgIDE3OTIKKworI2RlZmluZSBTUVJfRkZUX1RBQkxFICB7IDMwNCwgNjcyLCAxMTUyLCAzNTg0LCAxMDI0MCwgMjQ1NzYsIDAgfQorI2RlZmluZSBTUVJfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgIDI2NAorI2RlZmluZSBTUVJfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTcyOApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL3Y4L211bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmMzMi92OC9tdWxfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI2Yzg1MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmMzMi92OC9tdWxfMS5hc20KQEAgLTAsMCArMSwxMTIgQEAKK2RubCAgU1BBUkMgdjggbXBuX211bF8xIC0tIE11bHRpcGx5IGEgbGltYiB2ZWN0b3Igd2l0aCBhIHNpbmdsZSBsaW1iIGFuZAorZG5sICBzdG9yZSB0aGUgcHJvZHVjdCBpbiBhIHNlY29uZCBsaW1iIHZlY3Rvci4KKworZG5sICBDb3B5cmlnaHQgMTk5MiwgMTk5NCwgMTk5NSwgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyByZXNfcHRyCW8wCitDIHMxX3B0cglvMQorQyBzaXplCQlvMgorQyBzMl9saW1iCW8zCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fbXVsXzEpCisJc2xsCSVvMiw0LCVnMQorCWFuZAklZzEsKDQtMSk8PDQsJWcxCitpZmRlZihgUElDJywKK2AJbW92CSVvNywlZzQJCUMgU2F2ZSByZXR1cm4gYWRkcmVzcyByZWdpc3RlcgorMDoJY2FsbAkxZgorCWFkZAklbzcsTCgxKS0wYiwlZzMKKzE6CW1vdgklZzQsJW83CQlDIFJlc3RvcmUgcmV0dXJuIGFkZHJlc3MgcmVnaXN0ZXIKKycsCitgCXNldGhpCSVoaShMKDEpKSwlZzMKKwlvcgklZzMsJWxvKEwoMSkpLCVnMworJykKKwlqbXAJJWczKyVnMQorCWxkCVslbzErMF0sJW80CUMgMQorTCgxKToKK0woTDAwKToJYWRkCSVvMCwtNCwlbzAKKwlhZGQJJW8xLC00LCVvMQorCWIJTChsb29wMDApCUMgNCwgOCwgMTIsIC4uLgorCW9yY2MJJWcwLCVnMCwlZzIKK0woTDAxKToJYglMKGxvb3AwMSkJQyAxLCA1LCA5LCAuLi4KKwlvcmNjCSVnMCwlZzAsJWcyCisJbm9wCisJbm9wCitMKEwxMCk6CWFkZAklbzAsLTEyLCVvMAlDIDIsIDYsIDEwLCAuLi4KKwlhZGQJJW8xLDQsJW8xCisJYglMKGxvb3AxMCkKKwlvcmNjCSVnMCwlZzAsJWcyCisJbm9wCitMKEwxMSk6CWFkZAklbzAsLTgsJW8wCUMgMywgNywgMTEsIC4uLgorCWFkZAklbzEsLTgsJW8xCisJYglMKGxvb3AxMSkKKwlvcmNjCSVnMCwlZzAsJWcyCisKK0wobG9vcCk6CisJYWRkY2MJJWczLCVnMiwlZzMJQyAxCisJbGQJWyVvMSs0XSwlbzQJQyAyCisJc3QJJWczLFslbzArMF0JQyAxCisJcmQJJXksJWcyCQlDIDEKK0wobG9vcDAwKToKKwl1bXVsCSVvNCwlbzMsJWczCUMgMgorCWFkZHhjYwklZzMsJWcyLCVnMwlDIDIKKwlsZAlbJW8xKzhdLCVvNAlDIDMKKwlzdAklZzMsWyVvMCs0XQlDIDIKKwlyZAkleSwlZzIJCUMgMgorTChsb29wMTEpOgorCXVtdWwJJW80LCVvMywlZzMJQyAzCisJYWRkeGNjCSVnMywlZzIsJWczCUMgMworCWxkCVslbzErMTJdLCVvNAlDIDQKKwlhZGQJJW8xLDE2LCVvMQorCXN0CSVnMyxbJW8wKzhdCUMgMworCXJkCSV5LCVnMgkJQyAzCitMKGxvb3AxMCk6CisJdW11bAklbzQsJW8zLCVnMwlDIDQKKwlhZGR4Y2MJJWczLCVnMiwlZzMJQyA0CisJbGQJWyVvMSswXSwlbzQJQyAxCisJc3QJJWczLFslbzArMTJdCUMgNAorCWFkZAklbzAsMTYsJW8wCisJcmQJJXksJWcyCQlDIDQKKwlhZGR4CSVnMCwlZzIsJWcyCitMKGxvb3AwMSk6CisJYWRkY2MJJW8yLC00LCVvMgorCWJnCUwobG9vcCkKKwl1bXVsCSVvNCwlbzMsJWczCUMgMQorCisJYWRkY2MJJWczLCVnMiwlZzMJQyA0CisJc3QJJWczLFslbzArMF0JQyA0CisJcmQJJXksJWcyCQlDIDQKKworCXJldGwKKwlhZGR4CSVnMCwlZzIsJW8wCitFUElMT0dVRShtcG5fbXVsXzEpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjMzIvdjgvc3VibXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL3Y4L3N1Ym11bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODczMTRlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL3Y4L3N1Ym11bF8xLmFzbQpAQCAtMCwwICsxLDY3IEBACitkbmwgIFNQQVJDIHY4IG1wbl9zdWJtdWxfMSAtLSBNdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYSBsaW1iIGFuZAorZG5sICBzdWJ0cmFjdCB0aGUgcmVzdWx0IGZyb20gYSBzZWNvbmQgbGltYiB2ZWN0b3IuCisKK2RubCAgQ29weXJpZ2h0IDE5OTItMTk5NCwgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyByZXNfcHRyCW8wCitDIHMxX3B0cglvMQorQyBzaXplCQlvMgorQyBzMl9saW1iCW8zCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fc3VibXVsXzEpCisJc3ViCSVnMCwlbzIsJW8yCQlDIG5lZ2F0ZSAuLi4KKwlzbGwJJW8yLDIsJW8yCQlDIC4uLiBhbmQgc2NhbGUgc2l6ZQorCXN1YgklbzEsJW8yLCVvMQkJQyBvMSBpcyBvZmZzZXQgczFfcHRyCisJc3ViCSVvMCwlbzIsJWcxCQlDIGcxIGlzIG9mZnNldCByZXNfcHRyCisKKwltb3YJMCwlbzAJCQlDIGNsZWFyIGN5X2xpbWIKKworTChsb29wKToKKwlsZAlbJW8xKyVvMl0sJW80CisJbGQJWyVnMSslbzJdLCVnMgorCXVtdWwJJW80LCVvMywlbzUKKwlyZAkleSwlZzMKKwlhZGRjYwklbzUsJW8wLCVvNQorCWFkZHgJJWczLDAsJW8wCisJc3ViY2MJJWcyLCVvNSwlZzIKKwlhZGR4CSVvMCwwLCVvMAorCXN0CSVnMixbJWcxKyVvMl0KKworCWFkZGNjCSVvMiw0LCVvMgorCWJuZQlMKGxvb3ApCisJIG5vcAorCisJcmV0bAorCSBub3AKK0VQSUxPR1VFKG1wbl9zdWJtdWxfMSkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmMzMi92OC9zdXBlcnNwYXJjL2dtcC1tcGFyYW0uaCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmMzMi92OC9zdXBlcnNwYXJjL2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWM5MjM5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL3Y4L3N1cGVyc3BhcmMvZ21wLW1wYXJhbS5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qIFN1cGVyU1BBUkMgZ21wLW1wYXJhbS5oIC0tIENvbXBpbGVyL21hY2hpbmUgcGFyYW1ldGVyIGhlYWRlciBmaWxlLgorCitDb3B5cmlnaHQgMTk5MSwgMTk5MywgMTk5NCwgMTk5OS0yMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisKKyNkZWZpbmUgR01QX0xJTUJfQklUUyAzMgorI2RlZmluZSBHTVBfTElNQl9CWVRFUyA0CisKKy8qIEdlbmVyYXRlZCBieSB0dW5ldXAuYywgMjAwNC0wMi0xMCwgZ2NjIDMuMyAqLworCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgIDE0CisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgIDgxCisKKyNkZWZpbmUgU1FSX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgIDUKKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAgODYKKworI2RlZmluZSBESVZfU0JfUFJFSU5WX1RIUkVTSE9MRCAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIERJVl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgIDI2CisjZGVmaW5lIFBPV01fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDc5CisKKyNkZWZpbmUgSEdDRF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgOTcKKyNkZWZpbmUgR0NEX0FDQ0VMX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgR0NEX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA0NzAKKyNkZWZpbmUgSkFDT0JJX0JBU0VfTUVUSE9EICAgICAgICAgICAgICAgIDIKKworI2RlZmluZSBESVZSRU1fMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIERJVlJFTV8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAzCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgIDMKKyNkZWZpbmUgVVNFX1BSRUlOVl9ESVZSRU1fMSAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgVVNFX1BSRUlOVl9NT0RfMSAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgRElWUkVNXzJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBESVZFWEFDVF8xX1RIUkVTSE9MRCAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PREVYQUNUXzFfT0REX1RIUkVTSE9MRCAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKworI2RlZmluZSBHRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAxOQorI2RlZmluZSBHRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAzNAorI2RlZmluZSBTRVRfU1RSX1RIUkVTSE9MRCAgICAgICAgICAgICAgMzUyNAorCisjZGVmaW5lIE1VTF9GRlRfVEFCTEUgIHsgMzA0LCA4MDAsIDE0MDgsIDM1ODQsIDEwMjQwLCAyNDU3NiwgMCB9CisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgMjY0CisjZGVmaW5lIE1VTF9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAyMzA0CisKKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRSAgeyAzMzYsIDgwMCwgMTQwOCwgMzU4NCwgMTAyNDAsIDI0NTc2LCAwIH0KKyNkZWZpbmUgU1FSX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAyODAKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgIDIzMDQKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmMzMi92OC9zdXBlcnNwYXJjL3VkaXYuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL3Y4L3N1cGVyc3BhcmMvdWRpdi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJmNjZjZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmMzMi92OC9zdXBlcnNwYXJjL3VkaXYuYXNtCkBAIC0wLDAgKzEsMTMxIEBACitkbmwgIFN1cGVyU1BBUkMgbXBuX3VkaXZfcXJubmQgZGl2aXNpb24gc3VwcG9ydCwgdXNlZCBmcm9tIGxvbmdsb25nLmguCitkbmwgIFRoaXMgaXMgZm9yIFN1cGVyU1BBUkMgb25seSwgdG8gY29tcGVuc2F0ZSBmb3IgaXRzIHNlbWktZnVuY3Rpb25hbAorZG5sICB1ZGl2IGluc3RydWN0aW9uLgorCitkbmwgIENvcHlyaWdodCAxOTkzLCAxOTk0LCAxOTk2LCAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBJTlBVVCBQQVJBTUVURVJTCitDIHJlbV9wdHIJaTAKK0MgbjEJCWkxCitDIG4wCQlpMgorQyBkCQlpMworCitBU01fU1RBUlQoKQorCitpZmRlZihgUElDJywKK2AJVEVYVAorTChnZXRwYyk6CisJcmV0bAorCW5vcCcpCisKKwlURVhUCisJQUxJR04oOCkKK0woQzApOgkuZG91YmxlCTByNDI5NDk2NzI5NgorTChDMSk6CS5kb3VibGUJMHIyMTQ3NDgzNjQ4CisKK1BST0xPR1VFKG1wbl91ZGl2X3Fybm5kKQorCXNhdmUJJXNwLC0xMDQsJXNwCisJc3QJJWkxLFslZnAtOF0KKwlsZAlbJWZwLThdLCVmMTAKKworaWZkZWYoYFBJQycsCitgTChwYyk6CWNhbGwJTChnZXRwYykJCUMgcHV0IGFkZHJlc3Mgb2YgdGhpcyBpbnNuIGluICVvNworCWxkZAlbJW83K0woQzApLUwocGMpXSwlZjgnLAorYAlzZXRoaQklaGkoTChDMCkpLCVvNworCWxkZAlbJW83KyVsbyhMKEMwKSldLCVmOCcpCisKKwlmaXRvZAklZjEwLCVmNAorCWNtcAklaTEsMAorCWJnZQlMKDI0OCkKKwltb3YJJWkwLCVpNQorCWZhZGRkCSVmNCwlZjgsJWY0CitMKDI0OCk6CisJc3QJJWkyLFslZnAtOF0KKwlsZAlbJWZwLThdLCVmMTAKKwlmbXVsZAklZjQsJWY4LCVmNgorCWNtcAklaTIsMAorCWJnZQlMKDI0OSkKKwlmaXRvZAklZjEwLCVmMgorCWZhZGRkCSVmMiwlZjgsJWYyCitMKDI0OSk6CisJc3QJJWkzLFslZnAtOF0KKwlmYWRkZAklZjYsJWYyLCVmMgorCWxkCVslZnAtOF0sJWYxMAorCWNtcAklaTMsMAorCWJnZQlMKDI1MCkKKwlmaXRvZAklZjEwLCVmNAorCWZhZGRkCSVmNCwlZjgsJWY0CitMKDI1MCk6CisJZmRpdmQJJWYyLCVmNCwlZjIKKworaWZkZWYoYFBJQycsCitgCWxkZAlbJW83K0woQzEpLUwocGMpXSwlZjQnLAorYAlzZXRoaQklaGkoTChDMSkpLCVvNworCWxkZAlbJW83KyVsbyhMKEMxKSldLCVmNCcpCisKKwlmY21wZWQJJWYyLCVmNAorCW5vcAorCWZiZ2UsYQlMKDI1MSkKKwlmc3ViZAklZjIsJWY0LCVmMgorCWZkdG9pCSVmMiwlZjIKKwlzdAklZjIsWyVmcC04XQorCWIJTCgyNTIpCisJbGQJWyVmcC04XSwlaTQKK0woMjUxKToKKwlmZHRvaQklZjIsJWYyCisJc3QJJWYyLFslZnAtOF0KKwlsZAlbJWZwLThdLCVpNAorCXNldGhpCSVoaSgtMjE0NzQ4MzY0OCksJWcyCisJeG9yCSVpNCwlZzIsJWk0CitMKDI1Mik6CisJdW11bAklaTMsJWk0LCVnMworCXJkCSV5LCVpMAorCXN1YmNjCSVpMiwlZzMsJW83CisJc3VieGNjCSVpMSwlaTAsJWcwCisJYmUJTCgyNTMpCisJY21wCSVvNywlaTMKKworCWFkZAklaTQsLTEsJWkwCisJYWRkCSVvNywlaTMsJW83CisJc3QJJW83LFslaTVdCisJcmV0CisJcmVzdG9yZQorTCgyNTMpOgorCWJsdQlMKDI0NikKKwltb3YJJWk0LCVpMAorCWFkZAklaTQsMSwlaTAKKwlzdWIJJW83LCVpMywlbzcKK0woMjQ2KToKKwlzdAklbzcsWyVpNV0KKwlyZXQKKwlyZXN0b3JlCitFUElMT0dVRShtcG5fdWRpdl9xcm5uZCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmMzMi92OC91ZGl2LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmMzMi92OC91ZGl2LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmY2NmNlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL3Y4L3VkaXYuYXNtCkBAIC0wLDAgKzEsMTMxIEBACitkbmwgIFN1cGVyU1BBUkMgbXBuX3VkaXZfcXJubmQgZGl2aXNpb24gc3VwcG9ydCwgdXNlZCBmcm9tIGxvbmdsb25nLmguCitkbmwgIFRoaXMgaXMgZm9yIFN1cGVyU1BBUkMgb25seSwgdG8gY29tcGVuc2F0ZSBmb3IgaXRzIHNlbWktZnVuY3Rpb25hbAorZG5sICB1ZGl2IGluc3RydWN0aW9uLgorCitkbmwgIENvcHlyaWdodCAxOTkzLCAxOTk0LCAxOTk2LCAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBJTlBVVCBQQVJBTUVURVJTCitDIHJlbV9wdHIJaTAKK0MgbjEJCWkxCitDIG4wCQlpMgorQyBkCQlpMworCitBU01fU1RBUlQoKQorCitpZmRlZihgUElDJywKK2AJVEVYVAorTChnZXRwYyk6CisJcmV0bAorCW5vcCcpCisKKwlURVhUCisJQUxJR04oOCkKK0woQzApOgkuZG91YmxlCTByNDI5NDk2NzI5NgorTChDMSk6CS5kb3VibGUJMHIyMTQ3NDgzNjQ4CisKK1BST0xPR1VFKG1wbl91ZGl2X3Fybm5kKQorCXNhdmUJJXNwLC0xMDQsJXNwCisJc3QJJWkxLFslZnAtOF0KKwlsZAlbJWZwLThdLCVmMTAKKworaWZkZWYoYFBJQycsCitgTChwYyk6CWNhbGwJTChnZXRwYykJCUMgcHV0IGFkZHJlc3Mgb2YgdGhpcyBpbnNuIGluICVvNworCWxkZAlbJW83K0woQzApLUwocGMpXSwlZjgnLAorYAlzZXRoaQklaGkoTChDMCkpLCVvNworCWxkZAlbJW83KyVsbyhMKEMwKSldLCVmOCcpCisKKwlmaXRvZAklZjEwLCVmNAorCWNtcAklaTEsMAorCWJnZQlMKDI0OCkKKwltb3YJJWkwLCVpNQorCWZhZGRkCSVmNCwlZjgsJWY0CitMKDI0OCk6CisJc3QJJWkyLFslZnAtOF0KKwlsZAlbJWZwLThdLCVmMTAKKwlmbXVsZAklZjQsJWY4LCVmNgorCWNtcAklaTIsMAorCWJnZQlMKDI0OSkKKwlmaXRvZAklZjEwLCVmMgorCWZhZGRkCSVmMiwlZjgsJWYyCitMKDI0OSk6CisJc3QJJWkzLFslZnAtOF0KKwlmYWRkZAklZjYsJWYyLCVmMgorCWxkCVslZnAtOF0sJWYxMAorCWNtcAklaTMsMAorCWJnZQlMKDI1MCkKKwlmaXRvZAklZjEwLCVmNAorCWZhZGRkCSVmNCwlZjgsJWY0CitMKDI1MCk6CisJZmRpdmQJJWYyLCVmNCwlZjIKKworaWZkZWYoYFBJQycsCitgCWxkZAlbJW83K0woQzEpLUwocGMpXSwlZjQnLAorYAlzZXRoaQklaGkoTChDMSkpLCVvNworCWxkZAlbJW83KyVsbyhMKEMxKSldLCVmNCcpCisKKwlmY21wZWQJJWYyLCVmNAorCW5vcAorCWZiZ2UsYQlMKDI1MSkKKwlmc3ViZAklZjIsJWY0LCVmMgorCWZkdG9pCSVmMiwlZjIKKwlzdAklZjIsWyVmcC04XQorCWIJTCgyNTIpCisJbGQJWyVmcC04XSwlaTQKK0woMjUxKToKKwlmZHRvaQklZjIsJWYyCisJc3QJJWYyLFslZnAtOF0KKwlsZAlbJWZwLThdLCVpNAorCXNldGhpCSVoaSgtMjE0NzQ4MzY0OCksJWcyCisJeG9yCSVpNCwlZzIsJWk0CitMKDI1Mik6CisJdW11bAklaTMsJWk0LCVnMworCXJkCSV5LCVpMAorCXN1YmNjCSVpMiwlZzMsJW83CisJc3VieGNjCSVpMSwlaTAsJWcwCisJYmUJTCgyNTMpCisJY21wCSVvNywlaTMKKworCWFkZAklaTQsLTEsJWkwCisJYWRkCSVvNywlaTMsJW83CisJc3QJJW83LFslaTVdCisJcmV0CisJcmVzdG9yZQorTCgyNTMpOgorCWJsdQlMKDI0NikKKwltb3YJJWk0LCVpMAorCWFkZAklaTQsMSwlaTAKKwlzdWIJJW83LCVpMywlbzcKK0woMjQ2KToKKwlzdAklbzcsWyVpNV0KKwlyZXQKKwlyZXN0b3JlCitFUElMT0dVRShtcG5fdWRpdl9xcm5uZCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmMzMi92OC91bXVsLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmMzMi92OC91bXVsLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTJlODRiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL3Y4L3VtdWwuYXNtCkBAIC0wLDAgKzEsNDAgQEAKK2RubCAgU1BBUkMgdjggbXBuX3VtdWxfcHBtbSAtLSBzdXBwb3J0IGZvciBsb25nbG9uZy5oIGZvciBub24tZ2NjLgorCitkbmwgIENvcHlyaWdodCAxOTk1LCAxOTk2LCAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl91bXVsX3BwbW0pCisJdW11bAklbzEsJW8yLCVnMgorCXN0CSVnMixbJW8wXQorCXJldGwKKwlyZAkleSwlbzAKK0VQSUxPR1VFKG1wbl91bXVsX3BwbW0pCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjMzIvdjkvUkVBRE1FIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL3Y5L1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjM5NzEzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL3Y5L1JFQURNRQpAQCAtMCwwICsxLDQgQEAKK0NvZGUgZm9yIFNQQVJDIHByb2Nlc3NvcnMgaW1wbGVtZW50aW5nIHZlcnNpb24gOSBvZiB0aGUgU1BBUkMgYXJjaGl0ZWN0dXJlLgorVGhpcyBjb2RlIGlzIGZvciBzeXN0ZW1zIHRoYXQgZG9lc24ndCBwcmVzZXJ2ZSB0aGUgZnVsbCA2NC1iaXQgY29udGVudHMgb2YKK2ludGVnZXIgcmVnaXN0ZXIgYXQgY29udGV4dCBzd2l0Y2guICBGb3Igb3RoZXIgc3lzdGVtcyAoc3VjaCBhcyBTb2xhcmlzIDcgb3IKK2xhdGVyKSB1c2UgdGhlIGNvZGUgaW4gLi4vLi4vc3BhcmM2NC4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmMzMi92OS9hZGRfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjMzIvdjkvYWRkX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiZDU5NzQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjMzIvdjkvYWRkX24uYXNtCkBAIC0wLDAgKzEsMTI5IEBACitkbmwgIFNQQVJDIG1wbl9hZGRfbiAtLSBBZGQgdHdvIGxpbWIgdmVjdG9ycyBvZiB0aGUgc2FtZSBsZW5ndGggPiAwIGFuZCBzdG9yZQorZG5sICBzdW0gaW4gYSB0aGlyZCBsaW1iIHZlY3Rvci4KKworZG5sICBDb3B5cmlnaHQgMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKHJwLCVvMCkKK2RlZmluZShzMXAsJW8xKQorZGVmaW5lKHMycCwlbzIpCitkZWZpbmUobiwlbzMpCitkZWZpbmUoY3ksJWcxKQorCitDIFRoaXMgY29kZSB1c2VzIDY0LWJpdCBvcGVyYXRpb25zIG9uIGBvJyBhbmQgYGcnIHJlZ2lzdGVycy4gIEl0IGRvZXNuJ3QKK0MgcmVxdWlyZSB0aGF0IGBvJyByZWdpc3RlcnMnIHVwcGVyIDMyIGJpdHMgYXJlIHByZXNlcnZlZCBieSB0aGUgb3BlcmF0aW5nCitDIHN5c3RlbSwgYnV0IGlmIHRoZXkgYXJlIG5vdCwgdGhleSBtdXN0IGJlIHplcm9lZC4gIFRoYXQgaXMgaW5kZWVkIHdoYXQKK0MgaGFwcGVucyBhdCBsZWFzdCBvbiBTbG93YXJpcyAyLjUgYW5kIDIuNi4KKworQyBPbiBVbHRyYVNQQVJDIDEgYW5kIDIsIHRoaXMgY29kZSBydW5zIGF0IDMgY3ljbGVzL2xpbWIgZnJvbSB0aGUgRGNhY2hlIGFuZCBhdAorQyBhYm91dCAxMCBjeWNsZXMvbGltYiBmcm9tIHRoZSBFY2FjaGUuCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fYWRkX24pCisJbGR1dwlbczFwKzBdLCVvNAorCWxkdXcJW3MycCswXSwlbzUKKwlhZGRjYwluLC0yLG4KKwlibCxwbgklaWNjLEwoZW5kMSkKKwlsZHV3CVtzMXArNF0sJWcyCisJbGR1dwlbczJwKzRdLCVnMworCWJlLHBuCSVpY2MsTChlbmQyKQorCW1vdgkwLGN5CisKKwkuYWxpZ24JMTYKK0wobG9vcCk6CisJYWRkCSVvNCwlbzUsJWc0CisJYWRkCXJwLDgscnAKKwlsZHV3CVtzMXArOF0sJW80CisJZml0b2QJJWYwLCVmMgorQyAtLS0KKwlhZGQJY3ksJWc0LCVnNAorCWFkZGNjCW4sLTEsbgorCWxkdXcJW3MycCs4XSwlbzUKKwlmaXRvZAklZjAsJWYyCitDIC0tLQorCXNybHgJJWc0LDMyLGN5CisJYWRkCXMycCw4LHMycAorCXN0dwklZzQsW3JwLThdCisJYmUscG4JJWljYyxMKGV4aXRvKSs0CitDIC0tLQorCWFkZAklZzIsJWczLCVnNAorCWFkZGNjCW4sLTEsbgorCWxkdXcJW3MxcCsxMl0sJWcyCisJZml0b2QJJWYwLCVmMgorQyAtLS0KKwlhZGQJY3ksJWc0LCVnNAorCWFkZAlzMXAsOCxzMXAKKwlsZHV3CVtzMnArNF0sJWczCisJZml0b2QJJWYwLCVmMgorQyAtLS0KKwlzcmx4CSVnNCwzMixjeQorCWJuZSxwdAklaWNjLEwobG9vcCkKKwlzdHcJJWc0LFtycC00XQorQyAtLS0KK0woZXhpdGUpOgorCWFkZAklbzQsJW81LCVnNAorCWFkZAljeSwlZzQsJWc0CisJc3JseAklZzQsMzIsY3kKKwlzdHcJJWc0LFtycCswXQorCWFkZAklZzIsJWczLCVnNAorCWFkZAljeSwlZzQsJWc0CisJc3R3CSVnNCxbcnArNF0KKwlyZXRsCisJc3JseAklZzQsMzIsJW8wCisKK0woZXhpdG8pOgorCWFkZAklZzIsJWczLCVnNAorCWFkZAljeSwlZzQsJWc0CisJc3JseAklZzQsMzIsY3kKKwlzdHcJJWc0LFtycC00XQorCWFkZAklbzQsJW81LCVnNAorCWFkZAljeSwlZzQsJWc0CisJc3R3CSVnNCxbcnArMF0KKwlyZXRsCisJc3JseAklZzQsMzIsJW8wCisKK0woZW5kMSk6CisJYWRkCSVvNCwlbzUsJWc0CisJc3R3CSVnNCxbcnArMF0KKwlyZXRsCisJc3JseAklZzQsMzIsJW8wCisKK0woZW5kMik6CisJYWRkCSVvNCwlbzUsJWc0CisJc3JseAklZzQsMzIsY3kKKwlzdHcJJWc0LFtycCswXQorCWFkZAklZzIsJWczLCVnNAorCWFkZAljeSwlZzQsJWc0CisJc3R3CSVnNCxbcnArNF0KKwlyZXRsCisJc3JseAklZzQsMzIsJW8wCitFUElMT0dVRShtcG5fYWRkX24pCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjMzIvdjkvYWRkbXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL3Y5L2FkZG11bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWRmN2E4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL3Y5L2FkZG11bF8xLmFzbQpAQCAtMCwwICsxLDMwNiBAQAorZG5sICBTUEFSQyB2OSAzMi1iaXQgbXBuX2FkZG11bF8xIC0tIE11bHRpcGx5IGEgbGltYiB2ZWN0b3Igd2l0aCBhIGxpbWIgYW5kIGFkZAorZG5sICB0aGUgcmVzdWx0IHRvIGEgc2Vjb25kIGxpbWIgdmVjdG9yLgorCitkbmwgIENvcHlyaWdodCAxOTk4LCAyMDAwLCAyMDAxLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgQWxnb3JpdGhtOiBXZSB1c2UgdHdvIGZsb2F0aW5nLXBvaW50IG11bHRpcGxpZXMgcGVyIGxpbWIgcHJvZHVjdCwgd2l0aCB0aGUKK0MgaW52YXJpYW50IHYgb3BlcmFuZCBzcGxpdCBpbnRvIHR3byAxNi1iaXQgcGllY2VzLCBhbmQgdGhlIHUgb3BlcmFuZCBzcGxpdAorQyBpbnRvIDMyLWJpdCBwaWVjZXMuICBXZSBjb252ZXJ0IHRoZSB0d28gNDgtYml0IHByb2R1Y3RzIGFuZCB0cmFuc2ZlciB0aGVtIHRvCitDIHRoZSBpbnRlZ2VyIHVuaXQuCisKK0MJCSAgIGN5Y2xlcy9saW1iCitDIFVsdHJhU1BBUkMgMSYyOiAgICAgNi41CitDIFVsdHJhU1BBUkMgMzoJICAgICAgPworCitDIFBvc3NpYmxlIG9wdGltaXphdGlvbnM6CitDICAgMS4gQ29tYmluZSAzMi1iaXQgbWVtb3J5IG9wZXJhdGlvbnMgaW50byA2NC1iaXQgb3BlcmF0aW9ucy4gIFNpbmNlIHdlJ3JlCitDICAgICAgbWVtb3J5IGJhbmR3aWR0aCBsaW1pdGVkLCB0aGlzIGNvdWxkIHNhdmUgMS41IGN5Y2xlcy9saW1iLgorQyAgIDIuIFVucm9sbCB0aGUgaW5uZXIgbG9vcC4gIFNpbmNlIHdlIGFscmVhZHkgdXNlIGFsdGVybmF0ZSB0ZW1wb3JhcnkgYXJlYXMsCitDICAgICAgaXQgaXMgdmVyeSBzdHJhaWdodGZvcndhcmQgdG8gdW5yb2xsLCB1c2luZyBhbiBleGl0IGJyYW5jaCBtaWR3YXlzLgorQyAgICAgIFVucm9sbGluZyB3b3VsZCBhbGxvdyBkZWVwZXIgc2NoZWR1bGluZyB3aGljaCBjb3VsZCBpbXByb3ZlIHNwZWVkIGZvciBMMgorQyAgICAgIGNhY2hlIGNhc2UuCitDICAgMy4gRm9yIG1wbl9tdWxfMTogVXNlIG1vcmUgYWx0ZXJuYXRpbmcgdGVtcCBhcmVhcy4gIFRoZSBzdGQnZXMgYW5kIGxkeCdlcworQyAgICAgIGFyZW4ndCBzdWZmaWNpZW50bHkgYXBhcnQtc2NoZWR1bGVkIHdpdGgganVzdCB0d28gdGVtcCBhcmVhcy4KK0MgICA0LiBTcGVjaWFsaXplIGZvciBwYXJ0aWN1bGFyIHYgdmFsdWVzLiAgSWYgaXRzIHVwcGVyIDE2IGJpdHMgYXJlIHplcm8sIHdlCitDICAgICAgY291bGQgc2F2ZSBtYW55IG9wZXJhdGlvbnMuCisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyBycAlpMAorQyB1cAlpMQorQyBuCWkyCitDIHYJaTMKKworZGVmaW5lKGBGU0laRScsMjI0KQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2FkZG11bF8xKQorCWFkZAklc3AsIC1GU0laRSwgJXNwCisJc2V0aGkJJWhpKDB4ZmZmZiksICVnMQorCXNybAklbzMsIDE2LCAlZzIKKwlvcgklZzEsICVsbygweGZmZmYpLCAlZzEKKwlhbmQJJW8zLCAlZzEsICVnMQorCXN0eAklZzEsIFslc3ArMTA0XQorCXN0eAklZzIsIFslc3ArMTEyXQorCWxkZAlbJXNwKzEwNF0sICVmNgorCWxkZAlbJXNwKzExMl0sICVmOAorCWZ4dG9kCSVmNiwgJWY2CisJZnh0b2QJJWY4LCAlZjgKKwlsZAlbJXNwKzEwNF0sICVmMTAJCUMgemVybyBmMTAKKworCW1vdgkwLCAlZzMJCQlDIGN5ID0gMAorCitkZWZpbmUoYGZhbm9wJywgYGZpdG9kICVmMTgsICVmMCcpCUMgIEEgcXVhc2kgbm9wIHJ1bm5pbmcgaW4gdGhlIEZBIHBpcGUKKworCWFkZAklc3AsIDE2MCwgJW81CQlDIHBvaW50IGluIHNjcmF0Y2ggYXJlYQorCWFuZAklbzUsIC0zMiwgJW81CQlDIGFsaWduIGF0IDAgKG1vZCAzMikgaW4gc2NyYXRjaCBhcmVhCisKKwlzdWJjYwklbzIsIDEsICVvMgorCWxkCVslbzFdLCAlZjExCQlDIHJlYWQgdXBbaV0KKwlhZGQJJW8xLCA0LCAlbzEJCUMgdXArKworCWJuZSxwdAklaWNjLCAuTF90d29fb3JfbW9yZQorCWZ4dG9kCSVmMTAsICVmMgorCisJZm11bGQJJWYyLCAlZjgsICVmMTYKKwlmbXVsZAklZjIsICVmNiwgJWY0CisJZmR0b3gJJWYxNiwgJWYxNAorCWZkdG94CSVmNCwgJWYxMgorCXN0ZAklZjE0LCBbJW81KzE2XQorCXN0ZAklZjEyLCBbJW81KzI0XQorCWxkeAlbJW81KzE2XSwgJWcyCQlDIHAxNgorCWxkeAlbJW81KzI0XSwgJWcxCQlDIHAwCisJbGR1dwlbJW8wXSwgJWc1CQlDIHJlYWQgcnBbaV0KKwliCS5MMQorCWFkZAklbzAsIC0xNiwgJW8wCisKKwkuYWxpZ24JMTYKKy5MX3R3b19vcl9tb3JlOgorCXN1YmNjCSVvMiwgMSwgJW8yCisJbGQJWyVvMV0sICVmMTEJCUMgcmVhZCB1cFtpXQorCWZtdWxkCSVmMiwgJWY4LCAlZjE2CisJZm11bGQJJWYyLCAlZjYsICVmNAorCWFkZAklbzEsIDQsICVvMQkJQyB1cCsrCisJYm5lLHB0CSVpY2MsIC5MX3RocmVlX29yX21vcmUKKwlmeHRvZAklZjEwLCAlZjIKKworCWZkdG94CSVmMTYsICVmMTQKKwlmZHRveAklZjQsICVmMTIKKwlzdGQJJWYxNCwgWyVvNSsxNl0KKwlmbXVsZAklZjIsICVmOCwgJWYxNgorCXN0ZAklZjEyLCBbJW81KzI0XQorCWZtdWxkCSVmMiwgJWY2LCAlZjQKKwlmZHRveAklZjE2LCAlZjE0CisJZmR0b3gJJWY0LCAlZjEyCisJc3RkCSVmMTQsIFslbzUrMF0KKwlzdGQJJWYxMiwgWyVvNSs4XQorCWxkdXcJWyVvMF0sICVnNQkJQyByZWFkIHJwW2ldCisJbGR4CVslbzUrMTZdLCAlZzIJCUMgcDE2CisJbGR4CVslbzUrMjRdLCAlZzEJCUMgcDAKKwliCS5MMgorCWFkZAklbzAsIC0xMiwgJW8wCisKKwkuYWxpZ24JMTYKKy5MX3RocmVlX29yX21vcmU6CisJc3ViY2MJJW8yLCAxLCAlbzIKKwlsZAlbJW8xXSwgJWYxMQkJQyByZWFkIHVwW2ldCisJZmR0b3gJJWYxNiwgJWYxNAorCWZkdG94CSVmNCwgJWYxMgorCXN0ZAklZjE0LCBbJW81KzE2XQorCWZtdWxkCSVmMiwgJWY4LCAlZjE2CisJc3RkCSVmMTIsIFslbzUrMjRdCisJZm11bGQJJWYyLCAlZjYsICVmNAorCWFkZAklbzEsIDQsICVvMQkJQyB1cCsrCisJYm5lLHB0CSVpY2MsIC5MX2ZvdXJfb3JfbW9yZQorCWZ4dG9kCSVmMTAsICVmMgorCisJZmR0b3gJJWYxNiwgJWYxNAorCWZkdG94CSVmNCwgJWYxMgorCXN0ZAklZjE0LCBbJW81KzBdCisJZm11bGQJJWYyLCAlZjgsICVmMTYKKwlzdGQJJWYxMiwgWyVvNSs4XQorCWZtdWxkCSVmMiwgJWY2LCAlZjQKKwlmZHRveAklZjE2LCAlZjE0CisJbGR4CVslbzUrMTZdLCAlZzIJCUMgcDE2CisJZmR0b3gJJWY0LCAlZjEyCisJbGR4CVslbzUrMjRdLCAlZzEJCUMgcDAKKwlzdGQJJWYxNCwgWyVvNSsxNl0KKwlzdGQJJWYxMiwgWyVvNSsyNF0KKwlsZHV3CVslbzBdLCAlZzUJCUMgcmVhZCBycFtpXQorCWIJLkwzCisJYWRkCSVvMCwgLTgsICVvMAorCisJLmFsaWduCTE2CisuTF9mb3VyX29yX21vcmU6CisJc3ViY2MJJW8yLCAxLCAlbzIKKwlsZAlbJW8xXSwgJWYxMQkJQyByZWFkIHVwW2ldCisJZmR0b3gJJWYxNiwgJWYxNAorCWZkdG94CSVmNCwgJWYxMgorCXN0ZAklZjE0LCBbJW81KzBdCisJZm11bGQJJWYyLCAlZjgsICVmMTYKKwlzdGQJJWYxMiwgWyVvNSs4XQorCWZtdWxkCSVmMiwgJWY2LCAlZjQKKwlhZGQJJW8xLCA0LCAlbzEJCUMgdXArKworCWJuZSxwdAklaWNjLCAuTF9maXZlX29yX21vcmUKKwlmeHRvZAklZjEwLCAlZjIKKworCWZkdG94CSVmMTYsICVmMTQKKwlsZHgJWyVvNSsxNl0sICVnMgkJQyBwMTYKKwlmZHRveAklZjQsICVmMTIKKwlsZHgJWyVvNSsyNF0sICVnMQkJQyBwMAorCXN0ZAklZjE0LCBbJW81KzE2XQorCWZtdWxkCSVmMiwgJWY4LCAlZjE2CisJc3RkCSVmMTIsIFslbzUrMjRdCisJZm11bGQJJWYyLCAlZjYsICVmNAorCWFkZAklbzEsIDQsICVvMQkJQyB1cCsrCisJbGR1dwlbJW8wXSwgJWc1CQlDIHJlYWQgcnBbaV0KKwliCS5MNAorCWFkZAklbzAsIC00LCAlbzAKKworCS5hbGlnbgkxNgorLkxfZml2ZV9vcl9tb3JlOgorCXN1YmNjCSVvMiwgMSwgJW8yCisJbGQJWyVvMV0sICVmMTEJCUMgcmVhZCB1cFtpXQorCWZkdG94CSVmMTYsICVmMTQKKwlsZHgJWyVvNSsxNl0sICVnMgkJQyBwMTYKKwlmZHRveAklZjQsICVmMTIKKwlsZHgJWyVvNSsyNF0sICVnMQkJQyBwMAorCXN0ZAklZjE0LCBbJW81KzE2XQorCWZtdWxkCSVmMiwgJWY4LCAlZjE2CisJc3RkCSVmMTIsIFslbzUrMjRdCisJZm11bGQJJWYyLCAlZjYsICVmNAorCWFkZAklbzEsIDQsICVvMQkJQyB1cCsrCisJbGR1dwlbJW8wXSwgJWc1CQlDIHJlYWQgcnBbaV0KKwlibmUscHQJJWljYywgLkxvb3AKKwlmeHRvZAklZjEwLCAlZjIKKwliLGEJLkw1CisKK0MgQkVHSU4gTUFJTiBMT09QCisJLmFsaWduIDE2CitDIC0tIDAKKy5Mb29wOglub3AKKwlzdWJjYwklbzIsIDEsICVvMgorCWxkCVslbzFdLCAlZjExCQlDIHJlYWQgdXBbaV0KKwlmZHRveAklZjE2LCAlZjE0CitDIC0tIDEKKwlzbGx4CSVnMiwgMTYsICVnNAkJQyAocDE2IDw8IDE2KQorCWFkZAklbzAsIDQsICVvMAkJQyBycCsrCisJbGR4CVslbzUrMF0sICVnMgkJQyBwMTYKKwlmZHRveAklZjQsICVmMTIKK0MgLS0gMgorCW5vcAorCWFkZAklZzEsICVnNCwgJWc0CQlDIHAgPSBwMCArIChwMTYgPDwgMTYpCisJbGR4CVslbzUrOF0sICVnMQkJQyBwMAorCWZhbm9wCitDIC0tIDMKKwlub3AKKwlhZGQJJWczLCAlZzQsICVnNAkJQyBwICs9IGN5CisJc3RkCSVmMTQsIFslbzUrMF0KKwlmbXVsZAklZjIsICVmOCwgJWYxNgorQyAtLSA0CisJbm9wCisJYWRkCSVnNSwgJWc0LCAlZzQJCUMgcCArPSBycFtpXQorCXN0ZAklZjEyLCBbJW81KzhdCisJZm11bGQJJWYyLCAlZjYsICVmNAorQyAtLSA1CisJeG9yCSVvNSwgMTYsICVvNQkJQyBhbHRlcm5hdGUgc2NyYXRjaCB2YXJpYWJsZXMKKwlhZGQJJW8xLCA0LCAlbzEJCUMgdXArKworCXN0dwklZzQsIFslbzAtNF0KKwlmYW5vcAorQyAtLSA2CisJc3JseAklZzQsIDMyLCAlZzMJCUMgbmV3IGN5CisJbGR1dwlbJW8wXSwgJWc1CQlDIHJlYWQgcnBbaV0KKwlibmUscHQJJWljYywgLkxvb3AKKwlmeHRvZAklZjEwLCAlZjIKK0MgRU5EIE1BSU4gTE9PUAorCisuTDU6CWZkdG94CSVmMTYsICVmMTQKKwlzbGx4CSVnMiwgMTYsICVnNAkJQyAocDE2IDw8IDE2KQorCWxkeAlbJW81KzBdLCAlZzIJCUMgcDE2CisJZmR0b3gJJWY0LCAlZjEyCisJYWRkCSVnMSwgJWc0LCAlZzQJCUMgcCA9IHAwICsgKHAxNiA8PCAxNikKKwlsZHgJWyVvNSs4XSwgJWcxCQlDIHAwCisJYWRkCSVnNCwgJWczLCAlZzQJCUMgcCArPSBjeQorCXN0ZAklZjE0LCBbJW81KzBdCisJZm11bGQJJWYyLCAlZjgsICVmMTYKKwlhZGQJJWc1LCAlZzQsICVnNAkJQyBwICs9IHJwW2ldCisJc3RkCSVmMTIsIFslbzUrOF0KKwlmbXVsZAklZjIsICVmNiwgJWY0CisJeG9yCSVvNSwgMTYsICVvNQorCXN0dwklZzQsIFslbzArMF0KKwlzcmx4CSVnNCwgMzIsICVnMwkJQyBuZXcgY3kKKwlsZHV3CVslbzArNF0sICVnNQkJQyByZWFkIHJwW2ldCisKKy5MNDoJZmR0b3gJJWYxNiwgJWYxNAorCXNsbHgJJWcyLCAxNiwgJWc0CQlDIChwMTYgPDwgMTYpCisJbGR4CVslbzUrMF0sICVnMgkJQyBwMTYKKwlmZHRveAklZjQsICVmMTIKKwlhZGQJJWcxLCAlZzQsICVnNAkJQyBwID0gcDAgKyAocDE2IDw8IDE2KQorCWxkeAlbJW81KzhdLCAlZzEJCUMgcDAKKwlhZGQJJWczLCAlZzQsICVnNAkJQyBwICs9IGN5CisJc3RkCSVmMTQsIFslbzUrMF0KKwlhZGQJJWc1LCAlZzQsICVnNAkJQyBwICs9IHJwW2ldCisJc3RkCSVmMTIsIFslbzUrOF0KKwl4b3IJJW81LCAxNiwgJW81CisJc3R3CSVnNCwgWyVvMCs0XQorCXNybHgJJWc0LCAzMiwgJWczCQlDIG5ldyBjeQorCWxkdXcJWyVvMCs4XSwgJWc1CQlDIHJlYWQgcnBbaV0KKworLkwzOglzbGx4CSVnMiwgMTYsICVnNAkJQyAocDE2IDw8IDE2KQorCWxkeAlbJW81KzBdLCAlZzIJCUMgcDE2CisJYWRkCSVnMSwgJWc0LCAlZzQJCUMgcCA9IHAwICsgKHAxNiA8PCAxNikKKwlsZHgJWyVvNSs4XSwgJWcxCQlDIHAwCisJYWRkCSVnMywgJWc0LCAlZzQJCUMgcCArPSBjeQorCWFkZAklZzUsICVnNCwgJWc0CQlDIHAgKz0gcnBbaV0KKwl4b3IJJW81LCAxNiwgJW81CisJc3R3CSVnNCwgWyVvMCs4XQorCXNybHgJJWc0LCAzMiwgJWczCQlDIG5ldyBjeQorCWxkdXcJWyVvMCsxMl0sICVnNQkJQyByZWFkIHJwW2ldCisKKy5MMjoJc2xseAklZzIsIDE2LCAlZzQJCUMgKHAxNiA8PCAxNikKKwlsZHgJWyVvNSswXSwgJWcyCQlDIHAxNgorCWFkZAklZzEsICVnNCwgJWc0CQlDIHAgPSBwMCArIChwMTYgPDwgMTYpCisJbGR4CVslbzUrOF0sICVnMQkJQyBwMAorCWFkZAklZzMsICVnNCwgJWc0CQlDIHAgKz0gY3kKKwlhZGQJJWc1LCAlZzQsICVnNAkJQyBwICs9IHJwW2ldCisJc3R3CSVnNCwgWyVvMCsxMl0KKwlzcmx4CSVnNCwgMzIsICVnMwkJQyBuZXcgY3kKKwlsZHV3CVslbzArMTZdLCAlZzUJCUMgcmVhZCBycFtpXQorCisuTDE6CXNsbHgJJWcyLCAxNiwgJWc0CQlDIChwMTYgPDwgMTYpCisJYWRkCSVnMSwgJWc0LCAlZzQJCUMgcCA9IHAwICsgKHAxNiA8PCAxNikKKwlhZGQJJWczLCAlZzQsICVnNAkJQyBwICs9IGN5CisJYWRkCSVnNSwgJWc0LCAlZzQJCUMgcCArPSBycFtpXQorCXN0dwklZzQsIFslbzArMTZdCisJc3JseAklZzQsIDMyLCAlZzMJCUMgbmV3IGN5CisKKwltb3YJJWczLCAlbzAKKwlyZXRsCisJc3ViCSVzcCwgLUZTSVpFLCAlc3AKK0VQSUxPR1VFKG1wbl9hZGRtdWxfMSkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmMzMi92OS9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjMzIvdjkvZ21wLW1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MDllMmMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjMzIvdjkvZ21wLW1wYXJhbS5oCkBAIC0wLDAgKzEsMjA0IEBACisvKiBTUEFSQyB2OSAzMi1iaXQgZ21wLW1wYXJhbS5oIC0tIENvbXBpbGVyL21hY2hpbmUgcGFyYW1ldGVyIGhlYWRlciBmaWxlLgorCitDb3B5cmlnaHQgMTk5MSwgMTk5MywgMTk5NCwgMTk5OS0yMDAyLCAyMDA0LCAyMDA5LTIwMTEsIDIwMTQgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgMzIKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgNAorCisvKiAxNTkzIE1IeiB1bHRyYXNwYXJjMyBydW5uaW5nIFNvbGFyaXMgMTAgKHN3aWZ0Lm5hZGEua3RoLnNlKSAqLworLyogRkZUIHR1bmluZyBsaW1pdCA9IDI1MDAwMDAwICovCisvKiBHZW5lcmF0ZWQgYnkgdHVuZXVwLmMsIDIwMTQtMDMtMTYsIGdjYyAzLjQgKi8KKworI2RlZmluZSBESVZSRU1fMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgMworI2RlZmluZSBESVZSRU1fMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgNAorI2RlZmluZSBNT0RfMV8xUF9NRVRIT0QgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBNT0RfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMworI2RlZmluZSBNT0RfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgNAorI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAxMworI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAxMgorI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAgMCAgLyogbmV2ZXIgbXBuX21vZF8xXzFwICovCisjZGVmaW5lIE1PRF8xXzJfVE9fTU9EXzFfNF9USFJFU0hPTEQgICAgICAgIDIyCisjZGVmaW5lIFBSRUlOVl9NT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgIDMyCisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIERJVl9RUl8xTl9QSTFfTUVUSE9EICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIERJVl9RUl8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICA0CisjZGVmaW5lIERJVl9RUl8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVl9RUl8yX1BJMl9USFJFU0hPTEQgICAgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKworI2RlZmluZSBNVUxfVE9PTTIyX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyOAorI2RlZmluZSBNVUxfVE9PTTMzX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA0MworI2RlZmluZSBNVUxfVE9PTTQ0X1RIUkVTSE9MRCAgICAgICAgICAgICAgIDEyNgorI2RlZmluZSBNVUxfVE9PTTZIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE2MQorI2RlZmluZSBNVUxfVE9PTThIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDIwOAorCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTQzX1RIUkVTSE9MRCAgICAgIDczCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgIDgwCisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgIDg1CisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTYzX1RIUkVTSE9MRCAgICAgIDU1CisjZGVmaW5lIE1VTF9UT09NNDNfVE9fVE9PTTU0X1RIUkVTSE9MRCAgICAgIDcyCisKKyNkZWZpbmUgU1FSX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNjQKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgODUKKyNkZWZpbmUgU1FSX1RPT000X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNTIKKyNkZWZpbmUgU1FSX1RPT002X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxODUKKyNkZWZpbmUgU1FSX1RPT004X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzMjQKKworI2RlZmluZSBNVUxNSURfVE9PTTQyX1RIUkVTSE9MRCAgICAgICAgICAgICA2NAorCisjZGVmaW5lIE1VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIFNRUk1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE2CisKKyNkZWZpbmUgTVVMX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICAyODggIC8qIGsgPSA1ICovCisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICAyODgsIDV9LCB7ICAgICAgOSwgNH0sIHsgICAgIDE5LCA1fSwgeyAgICAgMTEsIDZ9LCBcCisgICAgeyAgICAgIDYsIDV9LCB7ICAgICAxNCwgNn0sIHsgICAgICA4LCA1fSwgeyAgICAgMTcsIDZ9LCBcCisgICAgeyAgICAgIDksIDV9LCB7ICAgICAyMCwgNn0sIHsgICAgIDEzLCA3fSwgeyAgICAgIDcsIDZ9LCBcCisgICAgeyAgICAgMTYsIDd9LCB7ICAgICAgOSwgNn0sIHsgICAgIDE5LCA3fSwgeyAgICAgMTEsIDZ9LCBcCisgICAgeyAgICAgMjMsIDd9LCB7ICAgICAxMywgOH0sIHsgICAgICA3LCA3fSwgeyAgICAgMTUsIDZ9LCBcCisgICAgeyAgICAgMzEsIDd9LCB7ICAgICAxOSwgOH0sIHsgICAgIDExLCA3fSwgeyAgICAgMjMsIDl9LCBcCisgICAgeyAgICAgIDcsIDh9LCB7ICAgICAxNSwgN30sIHsgICAgIDMxLCA4fSwgeyAgICAgMTksIDd9LCBcCisgICAgeyAgICAgMzksIDh9LCB7ICAgICAyNywgOX0sIHsgICAgIDE1LCA4fSwgeyAgICAgMzEsIDd9LCBcCisgICAgeyAgICAgNjMsIDh9LCB7ICAgICAzOSwgOX0sIHsgICAgIDIzLCA4fSwgeyAgICAgNDcsMTB9LCBcCisgICAgeyAgICAgMTUsIDl9LCB7ICAgICAzMSwgOH0sIHsgICAgIDY3LCA5fSwgeyAgICAgMzksIDh9LCBcCisgICAgeyAgICAgNzksIDl9LCB7ICAgICA0NywxMH0sIHsgICAgIDMxLCA5fSwgeyAgICAgNzEsIDh9LCBcCisgICAgeyAgICAxNDMsIDl9LCB7ICAgICA3OSwxMH0sIHsgICAgIDQ3LCA5fSwgeyAgICAgOTUsMTF9LCBcCisgICAgeyAgICAgMzEsMTB9LCB7ICAgICA2MywgOX0sIHsgICAgMTM1LCA4fSwgeyAgICAyNzEsIDl9LCBcCisgICAgeyAgICAxNDMsIDh9LCB7ICAgIDI4NywxMH0sIHsgICAgIDc5LCA5fSwgeyAgICAxNzUsMTB9LCBcCisgICAgeyAgICAgOTUsIDl9LCB7ICAgIDE5MSwgOH0sIHsgICAgMzgzLDEwfSwgeyAgICAxMTEsMTF9LCBcCisgICAgeyAgICAgNjMsMTB9LCB7ICAgIDE0MywgOX0sIHsgICAgMjg3LCA4fSwgeyAgICA1NzUsMTB9LCBcCisgICAgeyAgICAxNzUsMTF9LCB7ICAgICA5NSwxMH0sIHsgICAgMTkxLCA5fSwgeyAgICA0MTUsIDh9LCBcCisgICAgeyAgICA4MzEsMTJ9LCB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgeyAgICAyODcsIDl9LCBcCisgICAgeyAgICA1NzUsMTF9LCB7ICAgIDE1OSwxMH0sIHsgICAgMzUxLCA5fSwgeyAgICA3MDMsMTF9LCBcCisgICAgeyAgICAxOTEsMTB9LCB7ICAgIDQxNSwgOX0sIHsgICAgODMxLDExfSwgeyAgICAyMjMsMTB9LCBcCisgICAgeyAgICA0NDcsIDl9LCB7ICAgIDg5NSwgOH0sIHsgICAxNzkxLDEyfSwgeyAgICAxMjcsMTF9LCBcCisgICAgeyAgICAyODcsMTB9LCB7ICAgIDYwNywgOX0sIHsgICAxMjE1LCA4fSwgeyAgIDI0MzEsMTF9LCBcCisgICAgeyAgICAzMTksIDl9LCB7ICAgMTI3OSwxMX0sIHsgICAgMzUxLDEyfSwgeyAgICAxOTEsMTF9LCBcCisgICAgeyAgICA0MTUsMTB9LCB7ICAgIDgzMSwxMX0sIHsgICAgNDQ3LDEwfSwgeyAgICA4OTUsIDl9LCBcCisgICAgeyAgIDE3OTEsMTF9LCB7ICAgIDQ3OSwxM30sIHsgICAgMTI3LDEyfSwgeyAgICAyNTUsMTF9LCBcCisgICAgeyAgICA1NzUsMTB9LCB7ICAgMTE1MSwxMX0sIHsgICAgNjA3LDEyfSwgeyAgICAzMTksMTF9LCBcCisgICAgeyAgICA3MDMsMTJ9LCB7ICAgIDM4MywxMX0sIHsgICAgODMxLDEyfSwgeyAgICA0NDcsMTF9LCBcCisgICAgeyAgICA4OTUsMTB9LCB7ICAgMTc5MSwxMX0sIHsgICAgOTU5LDEzfSwgeyAgICAyNTUsMTJ9LCBcCisgICAgeyAgICA1NzUsMTF9LCB7ICAgMTIxNSwxMH0sIHsgICAyNDMxLDEyfSwgeyAgICA3MDMsMTN9LCBcCisgICAgeyAgICAzODMsMTJ9LCB7ICAgIDk1OSwxNH0sIHsgICAgMjU1LDEzfSwgeyAgICA1MTEsMTJ9LCBcCisgICAgeyAgIDEwODcsMTF9LCB7ICAgMjE3NSwxMn0sIHsgICAxMjE1LDExfSwgeyAgIDI0MzEsMTN9LCBcCisgICAgeyAgICA2MzksMTJ9LCB7ICAgMTQwNywxMX0sIHsgICAyOTQzLDEzfSwgeyAgICA4OTUsMTJ9LCBcCisgICAgeyAgIDE5MTksMTR9LCB7ICAgIDUxMSwxM30sIHsgICAxMTUxLDEyfSwgeyAgIDI0MzEsMTN9LCBcCisgICAgeyAgIDE0MDcsMTR9LCB7ICAgIDc2NywxM30sIHsgICAxNzkxLDE1fSwgeyAgICA1MTEsMTR9LCBcCisgICAgeyAgIDEwMjMsMTN9LCB7ICAgMjQzMSwxNH0sIHsgICAxMjc5LDEzfSwgeyAgIDI5NDMsMTJ9LCBcCisgICAgeyAgIDU4ODcsMTR9LCB7ICAxNjM4NCwxNX0sIHsgIDMyNzY4LDE2fSB9CisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzX1NJWkUgMTQzCisjZGVmaW5lIE1VTF9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAyMjQwCisKKyNkZWZpbmUgU1FSX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICAyNDQgIC8qIGsgPSA1ICovCisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICAyNDQsIDV9LCB7ICAgICAgOCwgNH0sIHsgICAgIDE3LCA1fSwgeyAgICAgMTcsIDZ9LCBcCisgICAgeyAgICAgIDksIDV9LCB7ICAgICAxOSwgNn0sIHsgICAgIDE3LCA3fSwgeyAgICAgIDksIDZ9LCBcCisgICAgeyAgICAgMjAsIDd9LCB7ICAgICAxMSwgNn0sIHsgICAgIDIzLCA3fSwgeyAgICAgMTMsIDh9LCBcCisgICAgeyAgICAgIDcsIDd9LCB7ICAgICAxOSwgOH0sIHsgICAgIDExLCA3fSwgeyAgICAgMjUsIDl9LCBcCisgICAgeyAgICAgIDcsIDh9LCB7ICAgICAxNSwgN30sIHsgICAgIDMzLCA4fSwgeyAgICAgMTksIDd9LCBcCisgICAgeyAgICAgMzksIDh9LCB7ICAgICAyMywgOX0sIHsgICAgIDE1LCA4fSwgeyAgICAgMzksIDl9LCBcCisgICAgeyAgICAgMjMsMTB9LCB7ICAgICAxNSwgOX0sIHsgICAgIDMxLCA4fSwgeyAgICAgNjMsIDl9LCBcCisgICAgeyAgICAgNDcsMTB9LCB7ICAgICAzMSwgOX0sIHsgICAgIDYzLCA4fSwgeyAgICAxMjcsIDl9LCBcCisgICAgeyAgICAgNzEsIDh9LCB7ICAgIDE0MywgN30sIHsgICAgMjg3LCA5fSwgeyAgICAgNzksMTB9LCBcCisgICAgeyAgICAgNDcsMTF9LCB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA5fSwgeyAgICAxMjcsIDh9LCBcCisgICAgeyAgICAyNTUsIDl9LCB7ICAgIDE0MywgOH0sIHsgICAgMjg3LDEwfSwgeyAgICAgNzksIDl9LCBcCisgICAgeyAgICAxNTksIDh9LCB7ICAgIDMxOSwgOX0sIHsgICAgMTc1LCA4fSwgeyAgICAzNTEsIDd9LCBcCisgICAgeyAgICA3MDMsMTB9LCB7ICAgICA5NSwgOX0sIHsgICAgMTkxLCA4fSwgeyAgICAzODMsIDl9LCBcCisgICAgeyAgICAyMDcsIDh9LCB7ICAgIDQxNSwgOX0sIHsgICAgMjIzLDExfSwgeyAgICAgNjMsMTB9LCBcCisgICAgeyAgICAxMjcsIDl9LCB7ICAgIDI3MSwxMH0sIHsgICAgMTQzLCA5fSwgeyAgICAyODcsIDh9LCBcCisgICAgeyAgICA1NzUsMTB9LCB7ICAgIDE1OSwgOX0sIHsgICAgMzE5LDEwfSwgeyAgICAxNzUsIDl9LCBcCisgICAgeyAgICAzNTEsIDh9LCB7ICAgIDcwMywxMX0sIHsgICAgIDk1LDEwfSwgeyAgICAxOTEsIDl9LCBcCisgICAgeyAgICAzODMsMTB9LCB7ICAgIDIwNywgOX0sIHsgICAgNDE1LCA4fSwgeyAgICA4MzEsMTB9LCBcCisgICAgeyAgICAyMjMsMTJ9LCB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgeyAgICAyNzEsIDl9LCBcCisgICAgeyAgICA1NDMsMTB9LCB7ICAgIDI4NywgOX0sIHsgICAgNTc1LDExfSwgeyAgICAxNTksMTB9LCBcCisgICAgeyAgICAzMTksIDl9LCB7ICAgIDYzOSwxMH0sIHsgICAgMzUxLCA5fSwgeyAgICA3MDMsIDh9LCBcCisgICAgeyAgIDE0MDcsMTF9LCB7ICAgIDE5MSwxMH0sIHsgICAgNDE1LCA5fSwgeyAgICA4MzEsMTF9LCBcCisgICAgeyAgICAyMjMsMTB9LCB7ICAgIDQ0NywgOX0sIHsgICAgODk1LDEwfSwgeyAgICA0NzksMTJ9LCBcCisgICAgeyAgICAxMjcsMTF9LCB7ICAgIDI1NSwxMH0sIHsgICAgNTQzLDExfSwgeyAgICAyODcsMTB9LCBcCisgICAgeyAgICA1NzUsMTF9LCB7ICAgIDMxOSwxMH0sIHsgICAgNjM5LDExfSwgeyAgICAzNTEsMTB9LCBcCisgICAgeyAgICA3MDMsMTJ9LCB7ICAgIDE5MSwxMX0sIHsgICAgNDE1LDEwfSwgeyAgICA4MzEsMTF9LCBcCisgICAgeyAgICA0NDcsMTB9LCB7ICAgIDg5NSwgOX0sIHsgICAxNzkxLDEzfSwgeyAgICAxMjcsMTJ9LCBcCisgICAgeyAgICAyNTUsMTF9LCB7ICAgIDU3NSwxMn0sIHsgICAgMzE5LDExfSwgeyAgICA3MDMsMTB9LCBcCisgICAgeyAgIDE0MDcsMTJ9LCB7ICAgIDM4MywxMX0sIHsgICAgODMxLDEyfSwgeyAgICA0NDcsMTF9LCBcCisgICAgeyAgICA5NTksMTB9LCB7ICAgMTkxOSwgOX0sIHsgICAzODM5LDEzfSwgeyAgICAyNTUsMTJ9LCBcCisgICAgeyAgICA1NzUsMTF9LCB7ICAgMTE1MSwxMn0sIHsgICAgNzAzLDExfSwgeyAgIDE0MDcsMTN9LCBcCisgICAgeyAgICAzODMsMTJ9LCB7ICAgIDk1OSwxNH0sIHsgICAgMjU1LDEzfSwgeyAgICA1MTEsMTJ9LCBcCisgICAgeyAgIDEyMTUsMTF9LCB7ICAgMjQzMSwxM30sIHsgICAgNjM5LDEyfSwgeyAgIDE0MDcsMTN9LCBcCisgICAgeyAgICA3NjcsMTJ9LCB7ICAgMTU5OSwxM30sIHsgICAgODk1LDEyfSwgeyAgIDE5MTksMTR9LCBcCisgICAgeyAgICA1MTEsMTN9LCB7ICAgMTE1MSwxMn0sIHsgICAyNDMxLDEzfSwgeyAgIDE0MDcsMTJ9LCBcCisgICAgeyAgIDI4MTUsMTR9LCB7ICAgIDc2NywxM30sIHsgICAxNTM1LDEyfSwgeyAgIDMwNzEsMTN9LCBcCisgICAgeyAgIDE5MTksMTV9LCB7ICAgIDUxMSwxNH0sIHsgICAxMDIzLDEzfSwgeyAgIDI0MzEsMTR9LCBcCisgICAgeyAgIDEyNzksMTN9LCB7ICAgMjk0MywxMn0sIHsgICA1ODg3LDE0fSwgeyAgMTYzODQsMTV9LCBcCisgICAgeyAgMzI3NjgsMTZ9IH0KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTNfU0laRSAxNTMKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDIxMTIKKworI2RlZmluZSBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTQ0CisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgICA0MjkyCisKKyNkZWZpbmUgRENfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNzQKKyNkZWZpbmUgRENfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICA0MDYKKyNkZWZpbmUgRENfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNjMKKyNkZWZpbmUgRENfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzNjMKKworI2RlZmluZSBJTlZfTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgIDEwOAorI2RlZmluZSBJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDM1MQorI2RlZmluZSBJTlZfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDMwMworCisjZGVmaW5lIEJJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgMzU0CisjZGVmaW5lIFJFRENfMV9UT19SRURDX05fVEhSRVNIT0xEICAgICAgICAgIDYxCisKKyNkZWZpbmUgTVVfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA5OTgKKyNkZWZpbmUgTVVfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgIDEwOTkKKyNkZWZpbmUgTVVQSV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAxMTgKKyNkZWZpbmUgTVVfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICA4MDcKKyNkZWZpbmUgTVVfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA5NzkKKworI2RlZmluZSBQT1dNX1NFQ19UQUJMRSAgMywyMiwxMjcsNjI0LDc3OSwyMzUxCisKKyNkZWZpbmUgTUFUUklYMjJfU1RSQVNTRU5fVEhSRVNIT0xEICAgICAgICAgIDcKKyNkZWZpbmUgSEdDRF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgICAgOTAKKyNkZWZpbmUgSEdDRF9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMjMKKyNkZWZpbmUgSEdDRF9SRURVQ0VfVEhSRVNIT0xEICAgICAgICAgICAgIDE0OTQKKyNkZWZpbmUgR0NEX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAyODMKKyNkZWZpbmUgR0NERVhUX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxOTIKKyNkZWZpbmUgSkFDT0JJX0JBU0VfTUVUSE9EICAgICAgICAgICAgICAgICAgIDQKKworI2RlZmluZSBHRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBHRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgICAyNworI2RlZmluZSBTRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDI5MAorI2RlZmluZSBTRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgIDYzNAorCisjZGVmaW5lIEZBQ19EU0NfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgMTU2CisjZGVmaW5lIEZBQ19PRERfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDI1CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjMzIvdjkvbXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL3Y5L211bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGFlZmZhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL3Y5L211bF8xLmFzbQpAQCAtMCwwICsxLDI4NyBAQAorZG5sICBTUEFSQyB2OSAzMi1iaXQgbXBuX211bF8xIC0tIE11bHRpcGx5IGEgbGltYiB2ZWN0b3Igd2l0aCBhIGxpbWIgYW5kIHN0b3JlCitkbmwgIHRoZSByZXN1bHQgaW4gYSBzZWNvbmQgbGltYiB2ZWN0b3IuCisKK2RubCAgQ29weXJpZ2h0IDE5OTgsIDIwMDAsIDIwMDEsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBBbGdvcml0aG06IFdlIHVzZSB0d28gZmxvYXRpbmctcG9pbnQgbXVsdGlwbGllcyBwZXIgbGltYiBwcm9kdWN0LCB3aXRoIHRoZQorQyBpbnZhcmlhbnQgdiBvcGVyYW5kIHNwbGl0IGludG8gdHdvIDE2LWJpdCBwaWVjZXMsIGFuZCB0aGUgdSBvcGVyYW5kIHNwbGl0CitDIGludG8gMzItYml0IHBpZWNlcy4gIFdlIGNvbnZlcnQgdGhlIHR3byA0OC1iaXQgcHJvZHVjdHMgYW5kIHRyYW5zZmVyIHRoZW0gdG8KK0MgdGhlIGludGVnZXIgdW5pdC4KKworQwkJICAgY3ljbGVzL2xpbWIKK0MgVWx0cmFTUEFSQyAxJjI6ICAgICA2LjUKK0MgVWx0cmFTUEFSQyAzOgkgICAgICA/CisKK0MgUG9zc2libGUgb3B0aW1pemF0aW9uczoKK0MgICAxLiBDb21iaW5lIDMyLWJpdCBtZW1vcnkgb3BlcmF0aW9ucyBpbnRvIDY0LWJpdCBvcGVyYXRpb25zLiAgU2luY2Ugd2UncmUKK0MgICAgICBtZW1vcnkgYmFuZHdpZHRoIGxpbWl0ZWQsIHRoaXMgY291bGQgc2F2ZSAxLjUgY3ljbGVzL2xpbWIuCitDICAgMi4gVW5yb2xsIHRoZSBpbm5lciBsb29wLiAgU2luY2Ugd2UgYWxyZWFkeSB1c2UgYWx0ZXJuYXRlIHRlbXBvcmFyeSBhcmVhcywKK0MgICAgICBpdCBpcyB2ZXJ5IHN0cmFpZ2h0Zm9yd2FyZCB0byB1bnJvbGwsIHVzaW5nIGFuIGV4aXQgYnJhbmNoIG1pZHdheXMuCitDICAgICAgVW5yb2xsaW5nIHdvdWxkIGFsbG93IGRlZXBlciBzY2hlZHVsaW5nIHdoaWNoIGNvdWxkIGltcHJvdmUgc3BlZWQgZm9yIEwyCitDICAgICAgY2FjaGUgY2FzZS4KK0MgICAzLiBGb3IgbXBuX211bF8xOiBVc2UgbW9yZSBhbHRlcm5hdGluZyB0ZW1wIGFyZWFzLiAgVGhlIHN0ZCdlcyBhbmQgbGR4J2VzCitDICAgICAgYXJlbid0IHN1ZmZpY2llbnRseSBhcGFydC1zY2hlZHVsZWQgd2l0aCBqdXN0IHR3byB0ZW1wIGFyZWFzLgorQyAgIDQuIFNwZWNpYWxpemUgZm9yIHBhcnRpY3VsYXIgdiB2YWx1ZXMuICBJZiBpdHMgdXBwZXIgMTYgYml0cyBhcmUgemVybywgd2UKK0MgICAgICBjb3VsZCBzYXZlIG1hbnkgb3BlcmF0aW9ucy4KKworQyBJTlBVVCBQQVJBTUVURVJTCitDIHJwCWkwCitDIHVwCWkxCitDIG4JaTIKK0MgdglpMworCitkZWZpbmUoYEZTSVpFJywyMjQpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fbXVsXzEpCisJYWRkCSVzcCwgLUZTSVpFLCAlc3AKKwlzZXRoaQklaGkoMHhmZmZmKSwgJWcxCisJc3JsCSVvMywgMTYsICVnMgorCW9yCSVnMSwgJWxvKDB4ZmZmZiksICVnMQorCWFuZAklbzMsICVnMSwgJWcxCisJc3R4CSVnMSwgWyVzcCsxMDRdCisJc3R4CSVnMiwgWyVzcCsxMTJdCisJbGRkCVslc3ArMTA0XSwgJWY2CisJbGRkCVslc3ArMTEyXSwgJWY4CisJZnh0b2QJJWY2LCAlZjYKKwlmeHRvZAklZjgsICVmOAorCWxkCVslc3ArMTA0XSwgJWYxMAkJQyB6ZXJvIGYxMAorCisJbW92CTAsICVnMwkJCUMgY3kgPSAwCisKK2RlZmluZShgZmFub3AnLCBgZml0b2QgJWYxOCwgJWYwJykJQyAgQSBxdWFzaSBub3AgcnVubmluZyBpbiB0aGUgRkEgcGlwZQorCisJYWRkCSVzcCwgMTYwLCAlbzUJCUMgcG9pbnQgaW4gc2NyYXRjaCBhcmVhCisJYW5kCSVvNSwgLTMyLCAlbzUJCUMgYWxpZ24gYXQgMCAobW9kIDMyKSBpbiBzY3JhdGNoIGFyZWEKKworCXN1YmNjCSVvMiwgMSwgJW8yCisJbGQJWyVvMV0sICVmMTEJCUMgcmVhZCB1cFtpXQorCWFkZAklbzEsIDQsICVvMQkJQyB1cCsrCisJYm5lLHB0CSVpY2MsIC5MX3R3b19vcl9tb3JlCisJZnh0b2QJJWYxMCwgJWYyCisKKwlmbXVsZAklZjIsICVmOCwgJWYxNgorCWZtdWxkCSVmMiwgJWY2LCAlZjQKKwlmZHRveAklZjE2LCAlZjE0CisJZmR0b3gJJWY0LCAlZjEyCisJc3RkCSVmMTQsIFslbzUrMTZdCisJc3RkCSVmMTIsIFslbzUrMjRdCisJbGR4CVslbzUrMTZdLCAlZzIJCUMgcDE2CisJbGR4CVslbzUrMjRdLCAlZzEJCUMgcDAKKwliCS5MMQorCWFkZAklbzAsIC0xNiwgJW8wCisKKwkuYWxpZ24JMTYKKy5MX3R3b19vcl9tb3JlOgorCXN1YmNjCSVvMiwgMSwgJW8yCisJbGQJWyVvMV0sICVmMTEJCUMgcmVhZCB1cFtpXQorCWZtdWxkCSVmMiwgJWY4LCAlZjE2CisJZm11bGQJJWYyLCAlZjYsICVmNAorCWFkZAklbzEsIDQsICVvMQkJQyB1cCsrCisJYm5lLHB0CSVpY2MsIC5MX3RocmVlX29yX21vcmUKKwlmeHRvZAklZjEwLCAlZjIKKworCWZkdG94CSVmMTYsICVmMTQKKwlmZHRveAklZjQsICVmMTIKKwlzdGQJJWYxNCwgWyVvNSsxNl0KKwlmbXVsZAklZjIsICVmOCwgJWYxNgorCXN0ZAklZjEyLCBbJW81KzI0XQorCWZtdWxkCSVmMiwgJWY2LCAlZjQKKwlmZHRveAklZjE2LCAlZjE0CisJZmR0b3gJJWY0LCAlZjEyCisJc3RkCSVmMTQsIFslbzUrMF0KKwlzdGQJJWYxMiwgWyVvNSs4XQorCWxkeAlbJW81KzE2XSwgJWcyCQlDIHAxNgorCWxkeAlbJW81KzI0XSwgJWcxCQlDIHAwCisJYgkuTDIKKwlhZGQJJW8wLCAtMTIsICVvMAorCisJLmFsaWduCTE2CisuTF90aHJlZV9vcl9tb3JlOgorCXN1YmNjCSVvMiwgMSwgJW8yCisJbGQJWyVvMV0sICVmMTEJCUMgcmVhZCB1cFtpXQorCWZkdG94CSVmMTYsICVmMTQKKwlmZHRveAklZjQsICVmMTIKKwlzdGQJJWYxNCwgWyVvNSsxNl0KKwlmbXVsZAklZjIsICVmOCwgJWYxNgorCXN0ZAklZjEyLCBbJW81KzI0XQorCWZtdWxkCSVmMiwgJWY2LCAlZjQKKwlhZGQJJW8xLCA0LCAlbzEJCUMgdXArKworCWJuZSxwdAklaWNjLCAuTF9mb3VyX29yX21vcmUKKwlmeHRvZAklZjEwLCAlZjIKKworCWZkdG94CSVmMTYsICVmMTQKKwlmZHRveAklZjQsICVmMTIKKwlzdGQJJWYxNCwgWyVvNSswXQorCWZtdWxkCSVmMiwgJWY4LCAlZjE2CisJc3RkCSVmMTIsIFslbzUrOF0KKwlmbXVsZAklZjIsICVmNiwgJWY0CisJZmR0b3gJJWYxNiwgJWYxNAorCWxkeAlbJW81KzE2XSwgJWcyCQlDIHAxNgorCWZkdG94CSVmNCwgJWYxMgorCWxkeAlbJW81KzI0XSwgJWcxCQlDIHAwCisJc3RkCSVmMTQsIFslbzUrMTZdCisJc3RkCSVmMTIsIFslbzUrMjRdCisJYgkuTDMKKwlhZGQJJW8wLCAtOCwgJW8wCisKKwkuYWxpZ24JMTYKKy5MX2ZvdXJfb3JfbW9yZToKKwlzdWJjYwklbzIsIDEsICVvMgorCWxkCVslbzFdLCAlZjExCQlDIHJlYWQgdXBbaV0KKwlmZHRveAklZjE2LCAlZjE0CisJZmR0b3gJJWY0LCAlZjEyCisJc3RkCSVmMTQsIFslbzUrMF0KKwlmbXVsZAklZjIsICVmOCwgJWYxNgorCXN0ZAklZjEyLCBbJW81KzhdCisJZm11bGQJJWYyLCAlZjYsICVmNAorCWFkZAklbzEsIDQsICVvMQkJQyB1cCsrCisJYm5lLHB0CSVpY2MsIC5MX2ZpdmVfb3JfbW9yZQorCWZ4dG9kCSVmMTAsICVmMgorCisJZmR0b3gJJWYxNiwgJWYxNAorCWxkeAlbJW81KzE2XSwgJWcyCQlDIHAxNgorCWZkdG94CSVmNCwgJWYxMgorCWxkeAlbJW81KzI0XSwgJWcxCQlDIHAwCisJc3RkCSVmMTQsIFslbzUrMTZdCisJZm11bGQJJWYyLCAlZjgsICVmMTYKKwlzdGQJJWYxMiwgWyVvNSsyNF0KKwlmbXVsZAklZjIsICVmNiwgJWY0CisJYWRkCSVvMSwgNCwgJW8xCQlDIHVwKysKKwliCS5MNAorCWFkZAklbzAsIC00LCAlbzAKKworCS5hbGlnbgkxNgorLkxfZml2ZV9vcl9tb3JlOgorCXN1YmNjCSVvMiwgMSwgJW8yCisJbGQJWyVvMV0sICVmMTEJCUMgcmVhZCB1cFtpXQorCWZkdG94CSVmMTYsICVmMTQKKwlsZHgJWyVvNSsxNl0sICVnMgkJQyBwMTYKKwlmZHRveAklZjQsICVmMTIKKwlsZHgJWyVvNSsyNF0sICVnMQkJQyBwMAorCXN0ZAklZjE0LCBbJW81KzE2XQorCWZtdWxkCSVmMiwgJWY4LCAlZjE2CisJc3RkCSVmMTIsIFslbzUrMjRdCisJZm11bGQJJWYyLCAlZjYsICVmNAorCWFkZAklbzEsIDQsICVvMQkJQyB1cCsrCisJYm5lLHB0CSVpY2MsIC5Mb29wCisJZnh0b2QJJWYxMCwgJWYyCisJYixhCS5MNQorCitDIEJFR0lOIE1BSU4gTE9PUAorCS5hbGlnbiAxNgorQyAtLSAwCisuTG9vcDoJbm9wCisJc3ViY2MJJW8yLCAxLCAlbzIKKwlsZAlbJW8xXSwgJWYxMQkJQyByZWFkIHVwW2ldCisJZmR0b3gJJWYxNiwgJWYxNAorQyAtLSAxCisJc2xseAklZzIsIDE2LCAlZzQJCUMgKHAxNiA8PCAxNikKKwlhZGQJJW8wLCA0LCAlbzAJCUMgcnArKworCWxkeAlbJW81KzBdLCAlZzIJCUMgcDE2CisJZmR0b3gJJWY0LCAlZjEyCitDIC0tIDIKKwlub3AKKwlhZGQJJWcxLCAlZzQsICVnNAkJQyBwID0gcDAgKyAocDE2IDw8IDE2KQorCWxkeAlbJW81KzhdLCAlZzEJCUMgcDAKKwlmYW5vcAorQyAtLSAzCisJbm9wCisJYWRkCSVnMywgJWc0LCAlZzQJCUMgcCArPSBjeQorCXN0ZAklZjE0LCBbJW81KzBdCisJZm11bGQJJWYyLCAlZjgsICVmMTYKK0MgLS0gNAorCXNybHgJJWc0LCAzMiwgJWczCQlDIG5ldyBjeQorCWFkZAklbzEsIDQsICVvMQkJQyB1cCsrCisJc3RkCSVmMTIsIFslbzUrOF0KKwlmbXVsZAklZjIsICVmNiwgJWY0CitDIC0tIDUKKwl4b3IJJW81LCAxNiwgJW81CQlDIGFsdGVybmF0ZSBzY3JhdGNoIHZhcmlhYmxlcworCXN0dwklZzQsIFslbzAtNF0KKwlibmUscHQJJWljYywgLkxvb3AKKwlmeHRvZAklZjEwLCAlZjIKK0MgRU5EIE1BSU4gTE9PUAorCisuTDU6CWZkdG94CSVmMTYsICVmMTQKKwlzbGx4CSVnMiwgMTYsICVnNAkJQyAocDE2IDw8IDE2KQorCWxkeAlbJW81KzBdLCAlZzIJCUMgcDE2CisJZmR0b3gJJWY0LCAlZjEyCisJYWRkCSVnMSwgJWc0LCAlZzQJCUMgcCA9IHAwICsgKHAxNiA8PCAxNikKKwlsZHgJWyVvNSs4XSwgJWcxCQlDIHAwCisJYWRkCSVnNCwgJWczLCAlZzQJCUMgcCArPSBjeQorCXN0ZAklZjE0LCBbJW81KzBdCisJZm11bGQJJWYyLCAlZjgsICVmMTYKKwlzdGQJJWYxMiwgWyVvNSs4XQorCWZtdWxkCSVmMiwgJWY2LCAlZjQKKwl4b3IJJW81LCAxNiwgJW81CisJc3R3CSVnNCwgWyVvMCswXQorCXNybHgJJWc0LCAzMiwgJWczCQlDIG5ldyBjeQorCisuTDQ6CWZkdG94CSVmMTYsICVmMTQKKwlzbGx4CSVnMiwgMTYsICVnNAkJQyAocDE2IDw8IDE2KQorCWxkeAlbJW81KzBdLCAlZzIJCUMgcDE2CisJZmR0b3gJJWY0LCAlZjEyCisJYWRkCSVnMSwgJWc0LCAlZzQJCUMgcCA9IHAwICsgKHAxNiA8PCAxNikKKwlsZHgJWyVvNSs4XSwgJWcxCQlDIHAwCisJYWRkCSVnMywgJWc0LCAlZzQJCUMgcCArPSBjeQorCXN0ZAklZjE0LCBbJW81KzBdCisJc3RkCSVmMTIsIFslbzUrOF0KKwl4b3IJJW81LCAxNiwgJW81CisJc3R3CSVnNCwgWyVvMCs0XQorCXNybHgJJWc0LCAzMiwgJWczCQlDIG5ldyBjeQorCisuTDM6CXNsbHgJJWcyLCAxNiwgJWc0CQlDIChwMTYgPDwgMTYpCisJbGR4CVslbzUrMF0sICVnMgkJQyBwMTYKKwlhZGQJJWcxLCAlZzQsICVnNAkJQyBwID0gcDAgKyAocDE2IDw8IDE2KQorCWxkeAlbJW81KzhdLCAlZzEJCUMgcDAKKwlhZGQJJWczLCAlZzQsICVnNAkJQyBwICs9IGN5CisJeG9yCSVvNSwgMTYsICVvNQorCXN0dwklZzQsIFslbzArOF0KKwlzcmx4CSVnNCwgMzIsICVnMwkJQyBuZXcgY3kKKworLkwyOglzbGx4CSVnMiwgMTYsICVnNAkJQyAocDE2IDw8IDE2KQorCWxkeAlbJW81KzBdLCAlZzIJCUMgcDE2CisJYWRkCSVnMSwgJWc0LCAlZzQJCUMgcCA9IHAwICsgKHAxNiA8PCAxNikKKwlsZHgJWyVvNSs4XSwgJWcxCQlDIHAwCisJYWRkCSVnMywgJWc0LCAlZzQJCUMgcCArPSBjeQorCXN0dwklZzQsIFslbzArMTJdCisJc3JseAklZzQsIDMyLCAlZzMJCUMgbmV3IGN5CisKKy5MMToJc2xseAklZzIsIDE2LCAlZzQJCUMgKHAxNiA8PCAxNikKKwlhZGQJJWcxLCAlZzQsICVnNAkJQyBwID0gcDAgKyAocDE2IDw8IDE2KQorCWFkZAklZzMsICVnNCwgJWc0CQlDIHAgKz0gY3kKKwlzdHcJJWc0LCBbJW8wKzE2XQorCXNybHgJJWc0LCAzMiwgJWczCQlDIG5ldyBjeQorCisJbW92CSVnMywgJW8wCisJcmV0bAorCXN1Ygklc3AsIC1GU0laRSwgJXNwCitFUElMT0dVRShtcG5fbXVsXzEpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjMzIvdjkvc3FyX2RpYWdvbmFsLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmMzMi92OS9zcXJfZGlhZ29uYWwuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMjQyNzkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjMzIvdjkvc3FyX2RpYWdvbmFsLmFzbQpAQCAtMCwwICsxLDQ2MiBAQAorZG5sICBTUEFSQyB2OSAzMi1iaXQgbXBuX3Nxcl9kaWFnb25hbC4KKworZG5sICBDb3B5cmlnaHQgMjAwMSwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyBycAlpMAorQyB1cAlpMQorQyBuCWkyCisKK0MgVGhpcyBjb2RlIHVzZXMgYSB2ZXJ5IGRlZXAgc29mdHdhcmUgcGlwZWxpbmUsIGR1ZSB0byB0aGUgbmVlZCBmb3IgbW92aW5nIGRhdGEKK0MgZm9ydGggYW5kIGJhY2sgYmV0d2VlbiB0aGUgaW50ZWdlciByZWdpc3RlcnMgYW5kIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycy4KK0MKK0MgQSBWSVMgdmFyaWFudCBvZiB0aGlzIGNvZGUgd291bGQgbWFrZSB0aGUgcGlwZWxpbmUgbGVzcyBkZWVwLCBzaW5jZSB0aGUKK0MgbWFza2luZyBub3cgZG9uZSBpbiB0aGUgaW50ZWdlciB1bml0IGNvdWxkIHRha2UgcGxhY2UgaW4gdGhlIGZsb2F0aW5nLXBvaW50CitDIHVuaXQgdXNpbmcgdGhlIEZBTkQgaW5zdHJ1Y3Rpb24uICBJdCB3b3VsZCBiZSBwb3NzaWJsZSB0byBzYXZlIHNldmVyYWwgY3ljbGVzCitDIHRvby4KK0MKK0MgT24gVWx0cmFTUEFSQyAxIGFuZCAyLCB0aGlzIGNvZGUgcnVucyBhdCAxMSBjeWNsZXMvbGltYiBmcm9tIHRoZSBEY2FjaGUgYW5kCitDIG5vdCBtdWNoIHNsb3dlciBmcm9tIHRoZSBFY2FjaGUuICBJdCB3b3VsZCBwZXJoYXBzIGJlIHBvc3NpYmxlIHRvIHNoYXZlIG9mZgorQyBvbmUgY3ljbGUsIGJ1dCBub3QgZWFzaWx5LiAgV2UgY2Fubm90IGRvIGJldHRlciB0aGFuIDEwIGN5Y2xlcy9saW1iIHdpdGggdGhlCitDIHVzZWQgaW5zdHJ1Y3Rpb25zLCBzaW5jZSB3ZSBoYXZlIDEwIG1lbW9yeSBvcGVyYXRpb25zIHBlciBsaW1iLiAgQnV0IGEgVklTCitDIHZhcmlhbnQgY291bGQgcnVuIHRocmVlIGN5Y2xlcyBmYXN0ZXIgdGhhbiB0aGUgY29ycmVzcG9uZGluZyBub24tVklTIGNvZGUuCisKK0MgVGhpcyBpcyBub24tcGlwZWxpbmVkIGNvZGUgc2hvd2luZyB0aGUgYWxnb3JpdGhtOgorQworQyAuTG9vcDoKK0MJbGR1dwlbdXArMF0sJWc0CQlDIDAwMDAwMDAwaGhoaGxsbGwKK0MJc2xseAklZzQsMTYsJWczCQlDIDAwMDBoaGhobGxsbDAwMDAKK0MJb3IJJWczLCVnNCwlZzIJCUMgMDAwMGhoaGhYWFhYbGxsbAorQwlhbmRuCSVnMiwlZzUsJWcyCQlDIDAwMDBoaGhoMDAwMGxsbGwKK0MJc3R4CSVnMixbJWZwKzgwXQorQwlsZGQJWyVmcCs4MF0sJWYwCitDCWZpdG9kCSVmMCwlZjQJCQlDIGhpMTYKK0MJZml0b2QJJWYxLCVmNgkJCUMgbG8xNgorQwlsZAlbdXArMF0sJWY5CitDCWZ4dG9kCSVmOCwlZjIKK0MJZm11bGQJJWYyLCVmNCwlZjQKK0MJZm11bGQJJWYyLCVmNiwlZjYKK0MJZmR0b3gJJWY0LCVmNAorQwlmZHRveAklZjYsJWY2CitDCXN0ZAklZjQsWyVmcC0yNF0KK0MJc3RkCSVmNixbJWZwLTE2XQorQwlsZHgJWyVmcC0yNF0sJWcyCitDCWxkeAlbJWZwLTE2XSwlZzEKK0MJc2xseAklZzIsMTYsJWcyCitDCWFkZAklZzIsJWcxLCVnMQorQwlzdHcJJWcxLFtycCswXQorQwlzcmx4CSVnMSwzMiwlbDAKK0MJc3R3CSVsMCxbcnArNF0KK0MJYWRkCXVwLDQsdXAKK0MJc3ViY2MJbiwxLG4KK0MJYm5lLHB0CSVpY2MsLkxvb3AKK0MJYWRkCXJwLDgscnAKKworZGVmaW5lKGBmYW5vcCcsYGZpdG9kICVmMTIsJWYxMCcpCWRubCAgQSBxdWFzaSBub3AgcnVubmluZyBpbiB0aGUgRkEgcGlwZQorCitBU01fU1RBUlQoKQorCisJVEVYVAorCUFMSUdOKDQpCisuTG5vbGw6CisJLndvcmQJMAorCitQUk9MT0dVRShtcG5fc3FyX2RpYWdvbmFsKQorCXNhdmUJJXNwLC0yNTYsJXNwCisKK2lmZGVmKGBQSUMnLAorYC5McGM6CXJkCSVwYywlbzcKKwlsZAlbJW83Ky5Mbm9sbC0uTHBjXSwlZjgnLAorYAlzZXRoaQklaGkoLkxub2xsKSwlZzEKKwlsZAlbJWcxKyVsbyguTG5vbGwpXSwlZjgnKQorCisJc2V0aGkJJWhpKDB4ZmZmZjAwMDApLCVnNQorCWFkZAklaTEsLTgsJWkxCisKKwlsZHV3CVslaTErOF0sJWc0CisJYWRkCSVpMSw0LCVpMQkJQyBzMV9wdHIrKworCXNsbHgJJWc0LDE2LCVnMwkJQyAwMDAwaGhoaGxsbGwwMDAwCisJb3IJJWczLCVnNCwlZzIJCUMgMDAwMGhoaGhYWFhYbGxsbAorCXN1YmNjCSVpMiwxLCVpMgorCWJuZSxwdAklaWNjLC5MX2dydF8xCisJYW5kbgklZzIsJWc1LCVnMgkJQyAwMDAwaGhoaDAwMDBsbGxsCisKKwlhZGQJJWkxLDQsJWkxCQlDIHMxX3B0cisrCisJc3R4CSVnMixbJWZwKzgwXQorCWxkCVslaTFdLCVmOQorCWxkZAlbJWZwKzgwXSwlZjAKKwlmeHRvZAklZjgsJWYyCisJZml0b2QJJWYwLCVmNAorCWZpdG9kCSVmMSwlZjYKKwlmbXVsZAklZjIsJWY0LCVmNAorCWZtdWxkCSVmMiwlZjYsJWY2CisJZmR0b3gJJWY0LCVmNAorCWZkdG94CSVmNiwlZjYKKwlzdGQJJWY0LFslZnAtMjRdCisJc3RkCSVmNixbJWZwLTE2XQorCisJYWRkCSVmcCwgODAsICVsMworCWFkZAklZnAsIC0yNCwgJWw0CisJYWRkCSVmcCwgNzIsICVsNQorCWIJLkwxCisJYWRkCSVmcCwgLTQwLCAlbDYKKworLkxfZ3J0XzE6CisJc3R4CSVnMixbJWZwKzgwXQorCWxkdXcJWyVpMSs4XSwlZzQKKwlhZGQJJWkxLDQsJWkxCQlDIHMxX3B0cisrCisJc2xseAklZzQsMTYsJWczCQlDIDAwMDBoaGhobGxsbDAwMDAKKwlvcgklZzMsJWc0LCVnMgkJQyAwMDAwaGhoaFhYWFhsbGxsCisJc3ViY2MJJWkyLDEsJWkyCisJYm5lLHB0CSVpY2MsLkxfZ3J0XzIKKwlhbmRuCSVnMiwlZzUsJWcyCQlDIDAwMDBoaGhoMDAwMGxsbGwKKworCXN0eAklZzIsWyVmcCs3Ml0KKwlsZAlbJWkxXSwlZjkKKwlhZGQJJWkxLDQsJWkxCQlDIHMxX3B0cisrCisJbGRkCVslZnArODBdLCVmMAorCWZ4dG9kCSVmOCwlZjIKKwlmaXRvZAklZjAsJWY0CisJZml0b2QJJWYxLCVmNgorCWZtdWxkCSVmMiwlZjQsJWY0CisJbGQJWyVpMV0sJWY5CisJZm11bGQJJWYyLCVmNiwlZjYKKwlsZGQJWyVmcCs3Ml0sJWYwCisJZmR0b3gJJWY0LCVmNAorCWZkdG94CSVmNiwlZjYKKwlzdGQJJWY0LFslZnAtMjRdCisJZnh0b2QJJWY4LCVmMgorCXN0ZAklZjYsWyVmcC0xNl0KKwlmaXRvZAklZjAsJWY0CisJZml0b2QJJWYxLCVmNgorCWZtdWxkCSVmMiwlZjQsJWY0CisJZm11bGQJJWYyLCVmNiwlZjYKKwlmZHRveAklZjQsJWY0CisKKwlhZGQJJWZwLCA3MiwgJWwzCisJYWRkCSVmcCwgLTQwLCAlbDQKKwlhZGQJJWZwLCA4MCwgJWw1CisJYgkuTDIKKwlhZGQJJWZwLCAtMjQsICVsNgorCisuTF9ncnRfMjoKKwlzdHgJJWcyLFslZnArNzJdCisJbGR1dwlbJWkxKzhdLCVnNAorCWxkCVslaTFdLCVmOQorCWFkZAklaTEsNCwlaTEJCUMgczFfcHRyKysKKwlsZGQJWyVmcCs4MF0sJWYwCisJc2xseAklZzQsMTYsJWczCQlDIDAwMDBoaGhobGxsbDAwMDAKKwlvcgklZzMsJWc0LCVnMgkJQyAwMDAwaGhoaFhYWFhsbGxsCisJc3ViY2MJJWkyLDEsJWkyCisJZnh0b2QJJWY4LCVmMgorCWJuZSxwdAklaWNjLC5MX2dydF8zCisJYW5kbgklZzIsJWc1LCVnMgkJQyAwMDAwaGhoaDAwMDBsbGxsCisKKwlzdHgJJWcyLFslZnArODBdCisJZml0b2QJJWYwLCVmNAorCWZpdG9kCSVmMSwlZjYKKwlmbXVsZAklZjIsJWY0LCVmNAorCWxkCVslaTFdLCVmOQorCWZtdWxkCSVmMiwlZjYsJWY2CisJYWRkCSVpMSw0LCVpMQkJQyBzMV9wdHIrKworCWxkZAlbJWZwKzcyXSwlZjAKKwlmZHRveAklZjQsJWY0CisJZmR0b3gJJWY2LCVmNgorCXN0ZAklZjQsWyVmcC0yNF0KKwlmeHRvZAklZjgsJWYyCisJc3RkCSVmNixbJWZwLTE2XQorCWZpdG9kCSVmMCwlZjQKKwlmaXRvZAklZjEsJWY2CisJZm11bGQJJWYyLCVmNCwlZjQKKwlsZAlbJWkxXSwlZjkKKwlhZGQJJWZwLCA4MCwgJWwzCisJZm11bGQJJWYyLCVmNiwlZjYKKwlhZGQJJWZwLCAtMjQsICVsNAorCWxkZAlbJWZwKzgwXSwlZjAKKwlhZGQJJWZwLCA3MiwgJWw1CisJZmR0b3gJJWY0LCVmNAorCWIJLkwzCisJYWRkCSVmcCwgLTQwLCAlbDYKKworLkxfZ3J0XzM6CisJc3R4CSVnMixbJWZwKzgwXQorCWZpdG9kCSVmMCwlZjQKKwlsZHV3CVslaTErOF0sJWc0CisJZml0b2QJJWYxLCVmNgorCWZtdWxkCSVmMiwlZjQsJWY0CisJbGQJWyVpMV0sJWY5CisJZm11bGQJJWYyLCVmNiwlZjYKKwlhZGQJJWkxLDQsJWkxCQlDIHMxX3B0cisrCisJbGRkCVslZnArNzJdLCVmMAorCWZkdG94CSVmNCwlZjQKKwlzbGx4CSVnNCwxNiwlZzMJCUMgMDAwMGhoaGhsbGxsMDAwMAorCWZkdG94CSVmNiwlZjYKKwlvcgklZzMsJWc0LCVnMgkJQyAwMDAwaGhoaFhYWFhsbGxsCisJc3ViY2MJJWkyLDEsJWkyCisJc3RkCSVmNCxbJWZwLTI0XQorCWZ4dG9kCSVmOCwlZjIKKwlzdGQJJWY2LFslZnAtMTZdCisJYm5lLHB0CSVpY2MsLkxfZ3J0XzQKKwlhbmRuCSVnMiwlZzUsJWcyCQlDIDAwMDBoaGhoMDAwMGxsbGwKKworCXN0eAklZzIsWyVmcCs3Ml0KKwlmaXRvZAklZjAsJWY0CisJZml0b2QJJWYxLCVmNgorCWFkZAklZnAsIDcyLCAlbDMKKwlmbXVsZAklZjIsJWY0LCVmNAorCWFkZAklZnAsIC00MCwgJWw0CisJbGQJWyVpMV0sJWY5CisJZm11bGQJJWYyLCVmNiwlZjYKKwlhZGQJJWkxLDQsJWkxCQlDIHMxX3B0cisrCisJbGRkCVslZnArODBdLCVmMAorCWFkZAklZnAsIDgwLCAlbDUKKwlmZHRveAklZjQsJWY0CisJYgkuTDQKKwlhZGQJJWZwLCAtMjQsICVsNgorCisuTF9ncnRfNDoKKwlzdHgJJWcyLFslZnArNzJdCisJZml0b2QJJWYwLCVmNAorCWxkdXcJWyVpMSs4XSwlZzQKKwlmaXRvZAklZjEsJWY2CisJZm11bGQJJWYyLCVmNCwlZjQKKwlsZAlbJWkxXSwlZjkKKwlmbXVsZAklZjIsJWY2LCVmNgorCWFkZAklaTEsNCwlaTEJCUMgczFfcHRyKysKKwlsZGQJWyVmcCs4MF0sJWYwCisJZmR0b3gJJWY0LCVmNAorCXNsbHgJJWc0LDE2LCVnMwkJQyAwMDAwaGhoaGxsbGwwMDAwCisJZmR0b3gJJWY2LCVmNgorCW9yCSVnMywlZzQsJWcyCQlDIDAwMDBoaGhoWFhYWGxsbGwKKwlzdWJjYwklaTIsMSwlaTIKKwlzdGQJJWY0LFslZnAtNDBdCisJZnh0b2QJJWY4LCVmMgorCXN0ZAklZjYsWyVmcC0zMl0KKwliZSxwbgklaWNjLC5MNQorCWFuZG4JJWcyLCVnNSwlZzIJCUMgMDAwMGhoaGgwMDAwbGxsbAorCisJYixhCS5Mb29wCisKKwkuYWxpZ24JMTYKK0MgLS0tIExPT1AgQkVHSU4KKy5Mb29wOglub3AKKwlub3AKKwlzdHgJJWcyLFslZnArODBdCisJZml0b2QJJWYwLCVmNAorQyAtLS0KKwlub3AKKwlub3AKKwlsZHV3CVslaTErOF0sJWc0CisJZml0b2QJJWYxLCVmNgorQyAtLS0KKwlub3AKKwlub3AKKwlsZHgJWyVmcC0yNF0sJWcyCQlDIHAxNgorCWZhbm9wCitDIC0tLQorCW5vcAorCW5vcAorCWxkeAlbJWZwLTE2XSwlZzEJCUMgcDAKKwlmbXVsZAklZjIsJWY0LCVmNAorQyAtLS0KKwlzbGx4CSVnMiwxNiwlZzIJCUMgYWxpZ24gcDE2CisJYWRkCSVpMCw4LCVpMAkJQyByZXNfcHRyKysKKwlsZAlbJWkxXSwlZjkKKwlmbXVsZAklZjIsJWY2LCVmNgorQyAtLS0KKwlhZGQJJWcyLCVnMSwlZzEJCUMgYWRkIHAxNiB0byBwMCAoQUREMSkKKwlhZGQJJWkxLDQsJWkxCQlDIHMxX3B0cisrCisJbGRkCVslZnArNzJdLCVmMAorCWZhbm9wCitDIC0tLQorCXNybHgJJWcxLDMyLCVsMAorCW5vcAorCXN0dwklZzEsWyVpMC04XQorCWZkdG94CSVmNCwlZjQKK0MgLS0tCisJc2xseAklZzQsMTYsJWczCQlDIDAwMDBoaGhobGxsbDAwMDAKKwlub3AKKwlzdHcJJWwwLFslaTAtNF0KKwlmZHRveAklZjYsJWY2CitDIC0tLQorCW9yCSVnMywlZzQsJWcyCQlDIDAwMDBoaGhoWFhYWGxsbGwKKwlzdWJjYwklaTIsMSwlaTIKKwlzdGQJJWY0LFslZnAtMjRdCisJZnh0b2QJJWY4LCVmMgorQyAtLS0KKwlzdGQJJWY2LFslZnAtMTZdCisJYW5kbgklZzIsJWc1LCVnMgkJQyAwMDAwaGhoaDAwMDBsbGxsCisJYmUscG4JJWljYywuTGVuZAorCWZhbm9wCitDIC0tLSAgTE9PUCBNSURETEUKKwlub3AKKwlub3AKKwlzdHgJJWcyLFslZnArNzJdCisJZml0b2QJJWYwLCVmNAorQyAtLS0KKwlub3AKKwlub3AKKwlsZHV3CVslaTErOF0sJWc0CisJZml0b2QJJWYxLCVmNgorQyAtLS0KKwlub3AKKwlub3AKKwlsZHgJWyVmcC00MF0sJWcyCQlDIHAxNgorCWZhbm9wCitDIC0tLQorCW5vcAorCW5vcAorCWxkeAlbJWZwLTMyXSwlZzEJCUMgcDAKKwlmbXVsZAklZjIsJWY0LCVmNAorQyAtLS0KKwlzbGx4CSVnMiwxNiwlZzIJCUMgYWxpZ24gcDE2CisJYWRkCSVpMCw4LCVpMAkJQyByZXNfcHRyKysKKwlsZAlbJWkxXSwlZjkKKwlmbXVsZAklZjIsJWY2LCVmNgorQyAtLS0KKwlhZGQJJWcyLCVnMSwlZzEJCUMgYWRkIHAxNiB0byBwMCAoQUREMSkKKwlhZGQJJWkxLDQsJWkxCQlDIHMxX3B0cisrCisJbGRkCVslZnArODBdLCVmMAorCWZhbm9wCitDIC0tLQorCXNybHgJJWcxLDMyLCVsMAorCW5vcAorCXN0dwklZzEsWyVpMC04XQorCWZkdG94CSVmNCwlZjQKK0MgLS0tCisJc2xseAklZzQsMTYsJWczCQlDIDAwMDBoaGhobGxsbDAwMDAKKwlub3AKKwlzdHcJJWwwLFslaTAtNF0KKwlmZHRveAklZjYsJWY2CitDIC0tLQorCW9yCSVnMywlZzQsJWcyCQlDIDAwMDBoaGhoWFhYWGxsbGwKKwlzdWJjYwklaTIsMSwlaTIKKwlzdGQJJWY0LFslZnAtNDBdCisJZnh0b2QJJWY4LCVmMgorQyAtLS0KKwlzdGQJJWY2LFslZnAtMzJdCisJYW5kbgklZzIsJWc1LCVnMgkJQyAwMDAwaGhoaDAwMDBsbGxsCisJYm5lLHB0CSVpY2MsLkxvb3AKKwlmYW5vcAorQyAtLS0gTE9PUCBFTkQKKworLkw1OglhZGQJJWZwLCA4MCwgJWwzCisJYWRkCSVmcCwgLTI0LCAlbDQKKwlhZGQJJWZwLCA3MiwgJWw1CisJYgkuTHRhaWwKKwlhZGQJJWZwLCAtNDAsICVsNgorCisuTGVuZDoJYWRkCSVmcCwgNzIsICVsMworCWFkZAklZnAsIC00MCwgJWw0CisJYWRkCSVmcCwgODAsICVsNQorCWFkZAklZnAsIC0yNCwgJWw2CisuTHRhaWw6CXN0eAklZzIsWyVsM10KKwlmaXRvZAklZjAsJWY0CisJZml0b2QJJWYxLCVmNgorCWxkeAlbJWw0XSwlZzIJCUMgcDE2CisJbGR4CVslbDQrOF0sJWcxCQlDIHAwCisJZm11bGQJJWYyLCVmNCwlZjQKKwlzbGx4CSVnMiwxNiwlZzIJCUMgYWxpZ24gcDE2CisJYWRkCSVpMCw4LCVpMAkJQyByZXNfcHRyKysKKwlsZAlbJWkxXSwlZjkKKwlmbXVsZAklZjIsJWY2LCVmNgorCWFkZAklZzIsJWcxLCVnMQkJQyBhZGQgcDE2IHRvIHAwIChBREQxKQorCWFkZAklaTEsNCwlaTEJCUMgczFfcHRyKysKKwlsZGQJWyVsNV0sJWYwCisJc3JseAklZzEsMzIsJWwwCisJc3R3CSVnMSxbJWkwLThdCisJZmR0b3gJJWY0LCVmNAorCXN0dwklbDAsWyVpMC00XQorLkw0OglmZHRveAklZjYsJWY2CisJc3RkCSVmNCxbJWw0XQorCWZ4dG9kCSVmOCwlZjIKKwlzdGQJJWY2LFslbDQrOF0KKworCWZpdG9kCSVmMCwlZjQKKwlmaXRvZAklZjEsJWY2CisJbGR4CVslbDZdLCVnMgkJQyBwMTYKKwlsZHgJWyVsNis4XSwlZzEJCUMgcDAKKwlmbXVsZAklZjIsJWY0LCVmNAorCXNsbHgJJWcyLDE2LCVnMgkJQyBhbGlnbiBwMTYKKwlhZGQJJWkwLDgsJWkwCQlDIHJlc19wdHIrKworCWxkCVslaTFdLCVmOQorCWZtdWxkCSVmMiwlZjYsJWY2CisJYWRkCSVnMiwlZzEsJWcxCQlDIGFkZCBwMTYgdG8gcDAgKEFERDEpCisJbGRkCVslbDNdLCVmMAorCXNybHgJJWcxLDMyLCVsMAorCXN0dwklZzEsWyVpMC04XQorCWZkdG94CSVmNCwlZjQKKwlzdHcJJWwwLFslaTAtNF0KKy5MMzoJZmR0b3gJJWY2LCVmNgorCXN0ZAklZjQsWyVsNl0KKwlmeHRvZAklZjgsJWYyCisJc3RkCSVmNixbJWw2KzhdCisKKwlmaXRvZAklZjAsJWY0CisJZml0b2QJJWYxLCVmNgorCWxkeAlbJWw0XSwlZzIJCUMgcDE2CisJbGR4CVslbDQrOF0sJWcxCQlDIHAwCisJZm11bGQJJWYyLCVmNCwlZjQKKwlzbGx4CSVnMiwxNiwlZzIJCUMgYWxpZ24gcDE2CisJYWRkCSVpMCw4LCVpMAkJQyByZXNfcHRyKysKKwlmbXVsZAklZjIsJWY2LCVmNgorCWFkZAklZzIsJWcxLCVnMQkJQyBhZGQgcDE2IHRvIHAwIChBREQxKQorCXNybHgJJWcxLDMyLCVsMAorCXN0dwklZzEsWyVpMC04XQorCWZkdG94CSVmNCwlZjQKKwlzdHcJJWwwLFslaTAtNF0KKy5MMjoJZmR0b3gJJWY2LCVmNgorCXN0ZAklZjQsWyVsNF0KKwlzdGQJJWY2LFslbDQrOF0KKworCWxkeAlbJWw2XSwlZzIJCUMgcDE2CisJbGR4CVslbDYrOF0sJWcxCQlDIHAwCisJc2xseAklZzIsMTYsJWcyCQlDIGFsaWduIHAxNgorCWFkZAklaTAsOCwlaTAJCUMgcmVzX3B0cisrCisJYWRkCSVnMiwlZzEsJWcxCQlDIGFkZCBwMTYgdG8gcDAgKEFERDEpCisJc3JseAklZzEsMzIsJWwwCisJc3R3CSVnMSxbJWkwLThdCisJc3R3CSVsMCxbJWkwLTRdCisKKy5MMToJbGR4CVslbDRdLCVnMgkJQyBwMTYKKwlsZHgJWyVsNCs4XSwlZzEJCUMgcDAKKwlzbGx4CSVnMiwxNiwlZzIJCUMgYWxpZ24gcDE2CisJYWRkCSVpMCw4LCVpMAkJQyByZXNfcHRyKysKKwlhZGQJJWcyLCVnMSwlZzEJCUMgYWRkIHAxNiB0byBwMCAoQUREMSkKKwlzcmx4CSVnMSwzMiwlbDAKKwlzdHcJJWcxLFslaTAtOF0KKwlzdHcJJWwwLFslaTAtNF0KKworCXJldAorCXJlc3RvcmUJJWcwLCVnMCwlbzAKKworRVBJTE9HVUUobXBuX3Nxcl9kaWFnb25hbCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmMzMi92OS9zdWJfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjMzIvdjkvc3ViX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNmM3M2IKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjMzIvdjkvc3ViX24uYXNtCkBAIC0wLDAgKzEsMTI5IEBACitkbmwgIFNQQVJDIG1wbl9zdWJfbiAtLSBTdWJ0cmFjdCB0d28gbGltYiB2ZWN0b3JzIG9mIHRoZSBzYW1lIGxlbmd0aCA+IDAgYW5kCitkbmwgIHN0b3JlIGRpZmZlcmVuY2UgaW4gYSB0aGlyZCBsaW1iIHZlY3Rvci4KKworZG5sICBDb3B5cmlnaHQgMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKHJwLCVvMCkKK2RlZmluZShzMXAsJW8xKQorZGVmaW5lKHMycCwlbzIpCitkZWZpbmUobiwlbzMpCitkZWZpbmUoY3ksJWcxKQorCitDIFRoaXMgY29kZSB1c2VzIDY0LWJpdCBvcGVyYXRpb25zIG9uIGBvJyBhbmQgYGcnIHJlZ2lzdGVycy4gIEl0IGRvZXNuJ3QKK0MgcmVxdWlyZSB0aGF0IGBvJyByZWdpc3RlcnMnIHVwcGVyIDMyIGJpdHMgYXJlIHByZXNlcnZlZCBieSB0aGUgb3BlcmF0aW5nCitDIHN5c3RlbSwgYnV0IGlmIHRoZXkgYXJlIG5vdCwgdGhleSBtdXN0IGJlIHplcm9lZC4gIFRoYXQgaXMgaW5kZWVkIHdoYXQKK0MgaGFwcGVucyBhdCBsZWFzdCBvbiBTbG93YXJpcyAyLjUgYW5kIDIuNi4KKworQyBPbiBVbHRyYVNQQVJDIDEgYW5kIDIsIHRoaXMgY29kZSBydW5zIGF0IDMgY3ljbGVzL2xpbWIgZnJvbSB0aGUgRGNhY2hlIGFuZCBhdAorQyBhYm91dCAxMCBjeWNsZXMvbGltYiBmcm9tIHRoZSBFY2FjaGUuCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fc3ViX24pCisJbGR1dwlbczFwKzBdLCVvNAorCWxkdXcJW3MycCswXSwlbzUKKwlhZGRjYwluLC0yLG4KKwlibCxwbgklaWNjLEwoZW5kMSkKKwlsZHV3CVtzMXArNF0sJWcyCisJbGR1dwlbczJwKzRdLCVnMworCWJlLHBuCSVpY2MsTChlbmQyKQorCW1vdgkwLGN5CisKKwkuYWxpZ24JMTYKK0wobG9vcCk6CisJc3ViCSVvNCwlbzUsJWc0CisJYWRkCXJwLDgscnAKKwlsZHV3CVtzMXArOF0sJW80CisJZml0b2QJJWYwLCVmMgorQyAtLS0KKwlzdWIJJWc0LGN5LCVnNAorCWFkZGNjCW4sLTEsbgorCWxkdXcJW3MycCs4XSwlbzUKKwlmaXRvZAklZjAsJWYyCitDIC0tLQorCXNybHgJJWc0LDYzLGN5CisJYWRkCXMycCw4LHMycAorCXN0dwklZzQsW3JwLThdCisJYmUscG4JJWljYyxMKGV4aXRvKSs0CitDIC0tLQorCXN1YgklZzIsJWczLCVnNAorCWFkZGNjCW4sLTEsbgorCWxkdXcJW3MxcCsxMl0sJWcyCisJZml0b2QJJWYwLCVmMgorQyAtLS0KKwlzdWIJJWc0LGN5LCVnNAorCWFkZAlzMXAsOCxzMXAKKwlsZHV3CVtzMnArNF0sJWczCisJZml0b2QJJWYwLCVmMgorQyAtLS0KKwlzcmx4CSVnNCw2MyxjeQorCWJuZSxwdAklaWNjLEwobG9vcCkKKwlzdHcJJWc0LFtycC00XQorQyAtLS0KK0woZXhpdGUpOgorCXN1YgklbzQsJW81LCVnNAorCXN1YgklZzQsY3ksJWc0CisJc3JseAklZzQsNjMsY3kKKwlzdHcJJWc0LFtycCswXQorCXN1YgklZzIsJWczLCVnNAorCXN1YgklZzQsY3ksJWc0CisJc3R3CSVnNCxbcnArNF0KKwlyZXRsCisJc3JseAklZzQsNjMsJW8wCisKK0woZXhpdG8pOgorCXN1YgklZzIsJWczLCVnNAorCXN1YgklZzQsY3ksJWc0CisJc3JseAklZzQsNjMsY3kKKwlzdHcJJWc0LFtycC00XQorCXN1YgklbzQsJW81LCVnNAorCXN1YgklZzQsY3ksJWc0CisJc3R3CSVnNCxbcnArMF0KKwlyZXRsCisJc3JseAklZzQsNjMsJW8wCisKK0woZW5kMSk6CisJc3ViCSVvNCwlbzUsJWc0CisJc3R3CSVnNCxbcnArMF0KKwlyZXRsCisJc3JseAklZzQsNjMsJW8wCisKK0woZW5kMik6CisJc3ViCSVvNCwlbzUsJWc0CisJc3JseAklZzQsNjMsY3kKKwlzdHcJJWc0LFtycCswXQorCXN1YgklZzIsJWczLCVnNAorCXN1YgklZzQsY3ksJWc0CisJc3R3CSVnNCxbcnArNF0KKwlyZXRsCisJc3JseAklZzQsNjMsJW8wCitFUElMT0dVRShtcG5fc3ViX24pCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjMzIvdjkvc3VibXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL3Y5L3N1Ym11bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmQwY2U3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL3Y5L3N1Ym11bF8xLmFzbQpAQCAtMCwwICsxLDMxNiBAQAorZG5sICBTUEFSQyB2OSAzMi1iaXQgbXBuX3N1Ym11bF8xIC0tIE11bHRpcGx5IGEgbGltYiB2ZWN0b3Igd2l0aCBhIGxpbWIgYW5kCitkbmwgIHN1YnRyYWN0IHRoZSByZXN1bHQgZnJvbSBhIHNlY29uZCBsaW1iIHZlY3Rvci4KKworZG5sICBDb3B5cmlnaHQgMTk5OCwgMjAwMCwgMjAwMSwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDIEFsZ29yaXRobTogV2UgdXNlIHR3byBmbG9hdGluZy1wb2ludCBtdWx0aXBsaWVzIHBlciBsaW1iIHByb2R1Y3QsIHdpdGggdGhlCitDIGludmFyaWFudCB2IG9wZXJhbmQgc3BsaXQgaW50byB0d28gMTYtYml0IHBpZWNlcywgYW5kIHRoZSB1IG9wZXJhbmQgc3BsaXQKK0MgaW50byAzMi1iaXQgcGllY2VzLiAgV2UgY29udmVydCB0aGUgdHdvIDQ4LWJpdCBwcm9kdWN0cyBhbmQgdHJhbnNmZXIgdGhlbSB0bworQyB0aGUgaW50ZWdlciB1bml0LgorCitDCQkgICBjeWNsZXMvbGltYgorQyBVbHRyYVNQQVJDIDEmMjogICAgIDYuNQorQyBVbHRyYVNQQVJDIDM6CSAgICAgID8KKworQyBQb3NzaWJsZSBvcHRpbWl6YXRpb25zOgorQyAgIDEuIENvbWJpbmUgMzItYml0IG1lbW9yeSBvcGVyYXRpb25zIGludG8gNjQtYml0IG9wZXJhdGlvbnMuICBTaW5jZSB3ZSdyZQorQyAgICAgIG1lbW9yeSBiYW5kd2lkdGggbGltaXRlZCwgdGhpcyBjb3VsZCBzYXZlIDEuNSBjeWNsZXMvbGltYi4KK0MgICAyLiBVbnJvbGwgdGhlIGlubmVyIGxvb3AuICBTaW5jZSB3ZSBhbHJlYWR5IHVzZSBhbHRlcm5hdGUgdGVtcG9yYXJ5IGFyZWFzLAorQyAgICAgIGl0IGlzIHZlcnkgc3RyYWlnaHRmb3J3YXJkIHRvIHVucm9sbCwgdXNpbmcgYW4gZXhpdCBicmFuY2ggbWlkd2F5cy4KK0MgICAgICBVbnJvbGxpbmcgd291bGQgYWxsb3cgZGVlcGVyIHNjaGVkdWxpbmcgd2hpY2ggY291bGQgaW1wcm92ZSBzcGVlZCBmb3IgTDIKK0MgICAgICBjYWNoZSBjYXNlLgorQyAgIDMuIEZvciBtcG5fbXVsXzE6IFVzZSBtb3JlIGFsdGVybmF0aW5nIHRlbXAgYXJlYXMuICBUaGUgc3RkJ2VzIGFuZCBsZHgnZXMKK0MgICAgICBhcmVuJ3Qgc3VmZmljaWVudGx5IGFwYXJ0LXNjaGVkdWxlZCB3aXRoIGp1c3QgdHdvIHRlbXAgYXJlYXMuCitDICAgNC4gU3BlY2lhbGl6ZSBmb3IgcGFydGljdWxhciB2IHZhbHVlcy4gIElmIGl0cyB1cHBlciAxNiBiaXRzIGFyZSB6ZXJvLCB3ZQorQyAgICAgIGNvdWxkIHNhdmUgbWFueSBvcGVyYXRpb25zLgorCitDIElOUFVUIFBBUkFNRVRFUlMKK0MgcnAJaTAKK0MgdXAJaTEKK0MgbglpMgorQyB2CWkzCisKK2RlZmluZShgRlNJWkUnLDIyNCkKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9zdWJtdWxfMSkKKwlhZGQJJXNwLCAtRlNJWkUsICVzcAorCXNldGhpCSVoaSgweGZmZmYpLCAlZzEKKwlzcmwJJW8zLCAxNiwgJWcyCisJb3IJJWcxLCAlbG8oMHhmZmZmKSwgJWcxCisJYW5kCSVvMywgJWcxLCAlZzEKKwlzdHgJJWcxLCBbJXNwKzEwNF0KKwlzdHgJJWcyLCBbJXNwKzExMl0KKwlsZGQJWyVzcCsxMDRdLCAlZjYKKwlsZGQJWyVzcCsxMTJdLCAlZjgKKwlmeHRvZAklZjYsICVmNgorCWZ4dG9kCSVmOCwgJWY4CisJbGQJWyVzcCsxMDRdLCAlZjEwCQlDIHplcm8gZjEwCisKKwltb3YJMCwgJWczCQkJQyBjeSA9IDAKKworZGVmaW5lKGBmYW5vcCcsIGBmaXRvZCAlZjE4LCAlZjAnKQlDICBBIHF1YXNpIG5vcCBydW5uaW5nIGluIHRoZSBGQSBwaXBlCisKKwlhZGQJJXNwLCAxNjAsICVvNQkJQyBwb2ludCBpbiBzY3JhdGNoIGFyZWEKKwlhbmQJJW81LCAtMzIsICVvNQkJQyBhbGlnbiBhdCAwIChtb2QgMzIpIGluIHNjcmF0Y2ggYXJlYQorCisJc3ViY2MJJW8yLCAxLCAlbzIKKwlsZAlbJW8xXSwgJWYxMQkJQyByZWFkIHVwW2ldCisJYWRkCSVvMSwgNCwgJW8xCQlDIHVwKysKKwlibmUscHQJJWljYywgLkxfdHdvX29yX21vcmUKKwlmeHRvZAklZjEwLCAlZjIKKworCWZtdWxkCSVmMiwgJWY4LCAlZjE2CisJZm11bGQJJWYyLCAlZjYsICVmNAorCWZkdG94CSVmMTYsICVmMTQKKwlmZHRveAklZjQsICVmMTIKKwlzdGQJJWYxNCwgWyVvNSsxNl0KKwlzdGQJJWYxMiwgWyVvNSsyNF0KKwlsZHgJWyVvNSsxNl0sICVnMgkJQyBwMTYKKwlsZHgJWyVvNSsyNF0sICVnMQkJQyBwMAorCWxkdXcJWyVvMF0sICVnNQkJQyByZWFkIHJwW2ldCisJYgkuTDEKKwlhZGQJJW8wLCAtMTYsICVvMAorCisJLmFsaWduCTE2CisuTF90d29fb3JfbW9yZToKKwlzdWJjYwklbzIsIDEsICVvMgorCWxkCVslbzFdLCAlZjExCQlDIHJlYWQgdXBbaV0KKwlmbXVsZAklZjIsICVmOCwgJWYxNgorCWZtdWxkCSVmMiwgJWY2LCAlZjQKKwlhZGQJJW8xLCA0LCAlbzEJCUMgdXArKworCWJuZSxwdAklaWNjLCAuTF90aHJlZV9vcl9tb3JlCisJZnh0b2QJJWYxMCwgJWYyCisKKwlmZHRveAklZjE2LCAlZjE0CisJZmR0b3gJJWY0LCAlZjEyCisJc3RkCSVmMTQsIFslbzUrMTZdCisJZm11bGQJJWYyLCAlZjgsICVmMTYKKwlzdGQJJWYxMiwgWyVvNSsyNF0KKwlmbXVsZAklZjIsICVmNiwgJWY0CisJZmR0b3gJJWYxNiwgJWYxNAorCWZkdG94CSVmNCwgJWYxMgorCXN0ZAklZjE0LCBbJW81KzBdCisJc3RkCSVmMTIsIFslbzUrOF0KKwlsZHV3CVslbzBdLCAlZzUJCUMgcmVhZCBycFtpXQorCWxkeAlbJW81KzE2XSwgJWcyCQlDIHAxNgorCWxkeAlbJW81KzI0XSwgJWcxCQlDIHAwCisJYgkuTDIKKwlhZGQJJW8wLCAtMTIsICVvMAorCisJLmFsaWduCTE2CisuTF90aHJlZV9vcl9tb3JlOgorCXN1YmNjCSVvMiwgMSwgJW8yCisJbGQJWyVvMV0sICVmMTEJCUMgcmVhZCB1cFtpXQorCWZkdG94CSVmMTYsICVmMTQKKwlmZHRveAklZjQsICVmMTIKKwlzdGQJJWYxNCwgWyVvNSsxNl0KKwlmbXVsZAklZjIsICVmOCwgJWYxNgorCXN0ZAklZjEyLCBbJW81KzI0XQorCWZtdWxkCSVmMiwgJWY2LCAlZjQKKwlhZGQJJW8xLCA0LCAlbzEJCUMgdXArKworCWJuZSxwdAklaWNjLCAuTF9mb3VyX29yX21vcmUKKwlmeHRvZAklZjEwLCAlZjIKKworCWZkdG94CSVmMTYsICVmMTQKKwlmZHRveAklZjQsICVmMTIKKwlzdGQJJWYxNCwgWyVvNSswXQorCWZtdWxkCSVmMiwgJWY4LCAlZjE2CisJc3RkCSVmMTIsIFslbzUrOF0KKwlmbXVsZAklZjIsICVmNiwgJWY0CisJZmR0b3gJJWYxNiwgJWYxNAorCWxkeAlbJW81KzE2XSwgJWcyCQlDIHAxNgorCWZkdG94CSVmNCwgJWYxMgorCWxkeAlbJW81KzI0XSwgJWcxCQlDIHAwCisJc3RkCSVmMTQsIFslbzUrMTZdCisJc3RkCSVmMTIsIFslbzUrMjRdCisJbGR1dwlbJW8wXSwgJWc1CQlDIHJlYWQgcnBbaV0KKwliCS5MMworCWFkZAklbzAsIC04LCAlbzAKKworCS5hbGlnbgkxNgorLkxfZm91cl9vcl9tb3JlOgorCXN1YmNjCSVvMiwgMSwgJW8yCisJbGQJWyVvMV0sICVmMTEJCUMgcmVhZCB1cFtpXQorCWZkdG94CSVmMTYsICVmMTQKKwlmZHRveAklZjQsICVmMTIKKwlzdGQJJWYxNCwgWyVvNSswXQorCWZtdWxkCSVmMiwgJWY4LCAlZjE2CisJc3RkCSVmMTIsIFslbzUrOF0KKwlmbXVsZAklZjIsICVmNiwgJWY0CisJYWRkCSVvMSwgNCwgJW8xCQlDIHVwKysKKwlibmUscHQJJWljYywgLkxfZml2ZV9vcl9tb3JlCisJZnh0b2QJJWYxMCwgJWYyCisKKwlmZHRveAklZjE2LCAlZjE0CisJbGR4CVslbzUrMTZdLCAlZzIJCUMgcDE2CisJZmR0b3gJJWY0LCAlZjEyCisJbGR4CVslbzUrMjRdLCAlZzEJCUMgcDAKKwlzdGQJJWYxNCwgWyVvNSsxNl0KKwlmbXVsZAklZjIsICVmOCwgJWYxNgorCXN0ZAklZjEyLCBbJW81KzI0XQorCWZtdWxkCSVmMiwgJWY2LCAlZjQKKwlhZGQJJW8xLCA0LCAlbzEJCUMgdXArKworCWxkdXcJWyVvMF0sICVnNQkJQyByZWFkIHJwW2ldCisJYgkuTDQKKwlhZGQJJW8wLCAtNCwgJW8wCisKKwkuYWxpZ24JMTYKKy5MX2ZpdmVfb3JfbW9yZToKKwlzdWJjYwklbzIsIDEsICVvMgorCWxkCVslbzFdLCAlZjExCQlDIHJlYWQgdXBbaV0KKwlmZHRveAklZjE2LCAlZjE0CisJbGR4CVslbzUrMTZdLCAlZzIJCUMgcDE2CisJZmR0b3gJJWY0LCAlZjEyCisJbGR4CVslbzUrMjRdLCAlZzEJCUMgcDAKKwlzdGQJJWYxNCwgWyVvNSsxNl0KKwlmbXVsZAklZjIsICVmOCwgJWYxNgorCXN0ZAklZjEyLCBbJW81KzI0XQorCWZtdWxkCSVmMiwgJWY2LCAlZjQKKwlhZGQJJW8xLCA0LCAlbzEJCUMgdXArKworCWxkdXcJWyVvMF0sICVnNQkJQyByZWFkIHJwW2ldCisJYm5lLHB0CSVpY2MsIC5Mb29wCisJZnh0b2QJJWYxMCwgJWYyCisJYixhCS5MNQorCitDIEJFR0lOIE1BSU4gTE9PUAorCS5hbGlnbiAxNgorQyAtLSAwCisuTG9vcDoJc3ViCSVnMCwgJWczLCAlZzMKKwlzdWJjYwklbzIsIDEsICVvMgorCWxkCVslbzFdLCAlZjExCQlDIHJlYWQgdXBbaV0KKwlmZHRveAklZjE2LCAlZjE0CitDIC0tIDEKKwlzbGx4CSVnMiwgMTYsICVnNAkJQyAocDE2IDw8IDE2KQorCWFkZAklbzAsIDQsICVvMAkJQyBycCsrCisJbGR4CVslbzUrMF0sICVnMgkJQyBwMTYKKwlmZHRveAklZjQsICVmMTIKK0MgLS0gMgorCXNybAklZzMsIDAsICVnMwkJQyB6ZXJvIG1vc3Qgc2lnbmlmaWNhbnQgMzIgYml0cworCWFkZAklZzEsICVnNCwgJWc0CQlDIHAgPSBwMCArIChwMTYgPDwgMTYpCisJbGR4CVslbzUrOF0sICVnMQkJQyBwMAorCWZhbm9wCitDIC0tIDMKKwlub3AKKwlhZGQJJWczLCAlZzQsICVnNAkJQyBwICs9IGN5CisJc3RkCSVmMTQsIFslbzUrMF0KKwlmbXVsZAklZjIsICVmOCwgJWYxNgorQyAtLSA0CisJbm9wCisJc3ViCSVnNSwgJWc0LCAlZzQJCUMgcCArPSBycFtpXQorCXN0ZAklZjEyLCBbJW81KzhdCisJZm11bGQJJWYyLCAlZjYsICVmNAorQyAtLSA1CisJeG9yCSVvNSwgMTYsICVvNQkJQyBhbHRlcm5hdGUgc2NyYXRjaCB2YXJpYWJsZXMKKwlhZGQJJW8xLCA0LCAlbzEJCUMgdXArKworCXN0dwklZzQsIFslbzAtNF0KKwlmYW5vcAorQyAtLSA2CisJc3JseAklZzQsIDMyLCAlZzMJCUMgbmV3IGN5CisJbGR1dwlbJW8wXSwgJWc1CQlDIHJlYWQgcnBbaV0KKwlibmUscHQJJWljYywgLkxvb3AKKwlmeHRvZAklZjEwLCAlZjIKK0MgRU5EIE1BSU4gTE9PUAorCisuTDU6CXN1YgklZzAsICVnMywgJWczCisJZmR0b3gJJWYxNiwgJWYxNAorCXNsbHgJJWcyLCAxNiwgJWc0CQlDIChwMTYgPDwgMTYpCisJbGR4CVslbzUrMF0sICVnMgkJQyBwMTYKKwlmZHRveAklZjQsICVmMTIKKwlzcmwJJWczLCAwLCAlZzMJCUMgemVybyBtb3N0IHNpZ25pZmljYW50IDMyIGJpdHMKKwlhZGQJJWcxLCAlZzQsICVnNAkJQyBwID0gcDAgKyAocDE2IDw8IDE2KQorCWxkeAlbJW81KzhdLCAlZzEJCUMgcDAKKwlhZGQJJWc0LCAlZzMsICVnNAkJQyBwICs9IGN5CisJc3RkCSVmMTQsIFslbzUrMF0KKwlmbXVsZAklZjIsICVmOCwgJWYxNgorCXN1YgklZzUsICVnNCwgJWc0CQlDIHAgKz0gcnBbaV0KKwlzdGQJJWYxMiwgWyVvNSs4XQorCWZtdWxkCSVmMiwgJWY2LCAlZjQKKwl4b3IJJW81LCAxNiwgJW81CisJc3R3CSVnNCwgWyVvMCswXQorCXNybHgJJWc0LCAzMiwgJWczCQlDIG5ldyBjeQorCWxkdXcJWyVvMCs0XSwgJWc1CQlDIHJlYWQgcnBbaV0KKworCXN1YgklZzAsICVnMywgJWczCisuTDQ6CWZkdG94CSVmMTYsICVmMTQKKwlzbGx4CSVnMiwgMTYsICVnNAkJQyAocDE2IDw8IDE2KQorCWxkeAlbJW81KzBdLCAlZzIJCUMgcDE2CisJZmR0b3gJJWY0LCAlZjEyCisJc3JsCSVnMywgMCwgJWczCQlDIHplcm8gbW9zdCBzaWduaWZpY2FudCAzMiBiaXRzCisJYWRkCSVnMSwgJWc0LCAlZzQJCUMgcCA9IHAwICsgKHAxNiA8PCAxNikKKwlsZHgJWyVvNSs4XSwgJWcxCQlDIHAwCisJYWRkCSVnMywgJWc0LCAlZzQJCUMgcCArPSBjeQorCXN0ZAklZjE0LCBbJW81KzBdCisJc3ViCSVnNSwgJWc0LCAlZzQJCUMgcCArPSBycFtpXQorCXN0ZAklZjEyLCBbJW81KzhdCisJeG9yCSVvNSwgMTYsICVvNQorCXN0dwklZzQsIFslbzArNF0KKwlzcmx4CSVnNCwgMzIsICVnMwkJQyBuZXcgY3kKKwlsZHV3CVslbzArOF0sICVnNQkJQyByZWFkIHJwW2ldCisKKwlzdWIJJWcwLCAlZzMsICVnMworLkwzOglzbGx4CSVnMiwgMTYsICVnNAkJQyAocDE2IDw8IDE2KQorCWxkeAlbJW81KzBdLCAlZzIJCUMgcDE2CisJc3JsCSVnMywgMCwgJWczCQlDIHplcm8gbW9zdCBzaWduaWZpY2FudCAzMiBiaXRzCisJYWRkCSVnMSwgJWc0LCAlZzQJCUMgcCA9IHAwICsgKHAxNiA8PCAxNikKKwlsZHgJWyVvNSs4XSwgJWcxCQlDIHAwCisJYWRkCSVnMywgJWc0LCAlZzQJCUMgcCArPSBjeQorCXN1YgklZzUsICVnNCwgJWc0CQlDIHAgKz0gcnBbaV0KKwl4b3IJJW81LCAxNiwgJW81CisJc3R3CSVnNCwgWyVvMCs4XQorCXNybHgJJWc0LCAzMiwgJWczCQlDIG5ldyBjeQorCWxkdXcJWyVvMCsxMl0sICVnNQkJQyByZWFkIHJwW2ldCisKKwlzdWIJJWcwLCAlZzMsICVnMworLkwyOglzbGx4CSVnMiwgMTYsICVnNAkJQyAocDE2IDw8IDE2KQorCWxkeAlbJW81KzBdLCAlZzIJCUMgcDE2CisJc3JsCSVnMywgMCwgJWczCQlDIHplcm8gbW9zdCBzaWduaWZpY2FudCAzMiBiaXRzCisJYWRkCSVnMSwgJWc0LCAlZzQJCUMgcCA9IHAwICsgKHAxNiA8PCAxNikKKwlsZHgJWyVvNSs4XSwgJWcxCQlDIHAwCisJYWRkCSVnMywgJWc0LCAlZzQJCUMgcCArPSBjeQorCXN1YgklZzUsICVnNCwgJWc0CQlDIHAgKz0gcnBbaV0KKwlzdHcJJWc0LCBbJW8wKzEyXQorCXNybHgJJWc0LCAzMiwgJWczCQlDIG5ldyBjeQorCWxkdXcJWyVvMCsxNl0sICVnNQkJQyByZWFkIHJwW2ldCisKKwlzdWIJJWcwLCAlZzMsICVnMworLkwxOglzbGx4CSVnMiwgMTYsICVnNAkJQyAocDE2IDw8IDE2KQorCXNybAklZzMsIDAsICVnMwkJQyB6ZXJvIG1vc3Qgc2lnbmlmaWNhbnQgMzIgYml0cworCWFkZAklZzEsICVnNCwgJWc0CQlDIHAgPSBwMCArIChwMTYgPDwgMTYpCisJYWRkCSVnMywgJWc0LCAlZzQJCUMgcCArPSBjeQorCXN1YgklZzUsICVnNCwgJWc0CQlDIHAgKz0gcnBbaV0KKwlzdHcJJWc0LCBbJW8wKzE2XQorCXNybHgJJWc0LCAzMiwgJWczCQlDIG5ldyBjeQorCisJc3ViCSVnMCwgJWczLCAlbzAKKwlyZXRsCisJc3ViCSVzcCwgLUZTSVpFLCAlc3AKK0VQSUxPR1VFKG1wbl9zdWJtdWxfMSkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmMzMi92OS91ZGl2LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmMzMi92OS91ZGl2LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWRkZTk3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzMyL3Y5L3VkaXYuYXNtCkBAIC0wLDAgKzEsNTIgQEAKK2RubCAgU1BBUkMgdjkgMzItYml0IG1wbl91ZGl2X3Fybm5kIC0gZGl2aXNpb24gc3VwcG9ydCBmb3IgbG9uZ2xvbmcuaC4KKworZG5sICBDb3B5cmlnaHQgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyByZW1fcHRyCW8wCitDIG4xCQlvMQorQyBuMAkJbzIKK0MgZAkJbzMKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl91ZGl2X3Fybm5kKQorCXNsbHgJJW8xLCAzMiwgJWcxCQlDIHNoaWZ0IHVwcGVyIGRpdmlkZW5kIGxpbWIKKwlzcmwJJW8yLCAwLCAlZzIJCUMgemVybyBleHRlbmQgbG93ZXIgZGl2aWRlbmQgbGltYgorCXNybAklbzMsIDAsICVnMwkJQyB6ZXJvIGV4dGVuZCBkaXZpc29yCisJb3IJJWcyLCAlZzEsICVnMQkJQyBhc3NlbWJsZSA2NC1iaXQgZGl2aWRlbmQKKwl1ZGl2eAklZzEsICVnMywgJWcxCisJbXVseAklZzEsICVnMywgJWc0CisJc3ViCSVnMiwgJWc0LCAlZzIKKwlzdAklZzIsIFslbzBdCQlDIHN0b3JlIHJlbWFpbmRlcgorCXJldGwKKwltb3YJJWcxLCAlbzAJCUMgcmV0dXJuIHF1b3RpZW50CitFUElMT0dVRShtcG5fdWRpdl9xcm5uZCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC9SRUFETUUgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYzA1MWEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvUkVBRE1FCkBAIC0wLDAgKzEsMTI1IEBACitDb3B5cmlnaHQgMTk5NywgMTk5OS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworCisKKworVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgbXBuIGZ1bmN0aW9ucyBmb3IgNjQtYml0IFY5IFNQQVJDCisKK1JFTEVWQU5UIE9QVElNSVpBVElPTiBJU1NVRVMKKworTm90YXRpb246CisgIElBTlkgPSBzaGlmdC9hZGQvc3ViL2xvZ2ljYWwvc2V0aGkKKyAgSUFERExPRyA9IGFkZC9zdWIvbG9naWNhbC9zZXRoaQorICBNRU0gPSBsZCovc3QqCisgIEZBID0gZmFkZCovZnN1YiovZip0byovZm1vdioKKyAgRk0gPSBmbXVsKgorCitVbHRyYVNQQVJDIGNhbiBpc3N1ZSBmb3VyIGluc3RydWN0aW9ucyBwZXIgY3ljbGUsIHdpdGggdGhlc2UgcmVzdHJpY3Rpb25zOgorKiBUd28gSUFOWSBpbnN0cnVjdGlvbnMsIGJ1dCBvbmx5IG9uZSBvZiB0aGVzZSBtYXkgYmUgYSBzaGlmdC4gIElmIHRoZXJlIGlzIGEKKyAgc2hpZnQgYW5kIGFuIElBTlkgaW5zdHJ1Y3Rpb24sIHRoZSBzaGlmdCBtdXN0IHByZWNlZGUgdGhlIElBTlkgaW5zdHJ1Y3Rpb24uCisqIE9uZSBGQS4KKyogT25lIEZNLgorKiBPbmUgYnJhbmNoLgorKiBPbmUgTUVNLgorKiBJQU5ZL0lBRERMT0cvTUVNIG11c3QgYmUgaW5zbiAxLCAyLCBvciAzIGluIGFuIGlzc3VlIGJ1bmRsZS4gIFRha2VuIGJyYW5jaGVzCisgIHNob3VsZCBub3QgYmUgaW4gc2xvdCA0LCBzaW5jZSB0aGF0IG1ha2VzIHRoZSBkZWxheSBpbnNuIGNvbWUgZnJvbSBzZXBhcmF0ZQorICBidW5kbGUuCisqIElmIHR3byBJQU5ZL0lBRERMT0cgaW5zdHJ1Y3Rpb25zIGFyZSB0byBiZSBleGVjdXRlZCBpbiB0aGUgc2FtZSBjeWNsZSBhbmQgb25lCisgIG9mIHRoZXNlIGlzIHNldHRpbmcgdGhlIGNvbmRpdGlvbiBjb2RlcywgdGhhdCBpbnN0cnVjdGlvbiBtdXN0IGJlIHRoZSBzZWNvbmQKKyAgb25lLgorCitUbyBzdW1tYXJpemUsIGlnbm9yaW5nIGJyYW5jaGVzLCB0aGVzZSBhcmUgdGhlIGJ1bmRsZXMgdGhhdCBjYW4gcmVhY2ggdGhlIHBlYWsKK2V4ZWN1dGlvbiBzcGVlZDoKKworaW5zbjEJaWFueQlpYW55CW1lbQlpYW55CWlhbnkJbWVtCWlhbnkJaWFueQltZW0KK2luc24yCWlhZGRsb2cJbWVtCWlhbnkJbWVtCWlhZGRsb2cJaWFueQltZW0JaWFkZGxvZwlpYW55CitpbnNuMwltZW0JaWFkZGxvZwlpYWRkbG9nCWZhCWZhCWZhCWZtCWZtCWZtCitpbnNuNAlmYS9mbQlmYS9mbQlmYS9mbQlmbQlmbQlmbQlmYQlmYQlmYQorCitUaGUgNjQtYml0IGludGVnZXIgbXVsdGlwbHkgaW5zdHJ1Y3Rpb24gbXVseCB0YWtlcyBmcm9tIDUgY3ljbGVzIHRvIDM1IGN5Y2xlcywKK2RlcGVuZGluZyBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IG9mIHRoZSBmaXJzdCBzb3VyY2UKK29wZXJhbmQuICBXaGVuIHVzZWQgZm9yIDMyeDMyLT42NCBtdWx0aXBsaWNhdGlvbiwgaXQgbmVlZHMgMjAgY3ljbGVzLgorRnVydGhlcm1vcmUsIGl0IHN0YWxscyB0aGUgcHJvY2Vzc29yIHdoaWxlIGV4ZWN1dGluZy4gIFdlIHN0YXkgYXdheSBmcm9tIHRoYXQKK2luc3RydWN0aW9uLCBhbmQgaW5zdGVhZCB1c2UgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucy4KKworRmxvYXRpbmctcG9pbnQgYWRkIGFuZCBtdWx0aXBseSB1bml0cyBhcmUgZnVsbHkgcGlwZWxpbmVkLiAgVGhlIGxhdGVuY3kgZm9yCitVbHRyYVNQQVJDLTEvMiBpcyAzIGN5Y2xlcyBhbmQgZm9yIFVsdHJhU1BBUkMtMyBpdCBpcyA0IGN5Y2xlcy4KKworSW50ZWdlciBjb25kaXRpb25hbCBtb3ZlIGluc3RydWN0aW9ucyBjYW5ub3QgZHVhbC1pc3N1ZSB3aXRoIG90aGVyIGludGVnZXIKK2luc3RydWN0aW9ucy4gIE5vIGNvbmRpdGlvbmFsIG1vdmUgY2FuIGlzc3VlIDEtNSBjeWNsZXMgYWZ0ZXIgYSBsb2FkLiAgKFRoaXMKK21pZ2h0IGhhdmUgYmVlbiBmaXhlZCBmb3IgVWx0cmFTUEFSQy0zLikKKworVGhlIFVsdHJhU1BBUkMtMyBwaXBlbGluZSBpcyB2ZXJ5IHNpbXVsYXIgdG8gdGhlIG9uZSBvZiBVbHRyYVNQQVJDLTEvMiAsIGJ1dCBpcworc29tZXdoYXQgc2xvd2VyLiAgQnJhbmNoZXMgZXhlY3V0ZSBzbG93ZXIsIGFuZCB0aGVyZSBtYXkgYmUgb3RoZXIgbmV3IHN0YWxscy4KK0J1dCBpbnRlZ2VyIG11bHRpcGx5IGRvZXNuJ3Qgc3RhbGwgdGhlIGVudGlyZSBDUFUgYW5kIGFsc28gaGFzIGEgbXVjaCBsb3dlcgorbGF0ZW5jeS4gIEJ1dCBpdCdzIHN0aWxsIG5vdCBwaXBlbGluZWQsIGFuZCB0aHVzIHVzZWxlc3MgZm9yIG91ciBuZWVkcy4KKworU1RBVFVTCisKKyogbXBuX2xzaGlmdCwgbXBuX3JzaGlmdDogVGhlIGN1cnJlbnQgY29kZSBydW5zIGF0IDIuMCBjeWNsZXMvbGltYiBvbgorICBVbHRyYVNQQVJDLTEvMiBhbmQgMi42NSBvbiBVbHRyYVNQQVJDLTMuICBGb3IgVWx0cmFTUEFSQy0xLzIsIHRoZSBJRVUwCisgIGZ1bmN0aW9uYWwgdW5pdCBpcyBzYXR1cmF0ZWQgd2l0aCBzaGlmdHMuCisKKyogbXBuX2FkZF9uLCBtcG5fc3ViX246IFRoZSBjdXJyZW50IGNvZGUgcnVucyBhdCA0IGN5Y2xlcy9saW1iIG9uCisgIFVsdHJhU1BBUkMtMS8yIGFuZCA0LjUgY3ljbGVzL2xpbWIgb24gVWx0cmFTUEFSQy0zLiAgVGhlIDQgaW5zdHJ1Y3Rpb24KKyAgcmVjdXJyZW5jeSBpcyB0aGUgc3BlZWQgbGltaXRlci4KKworKiBtcG5fYWRkbXVsXzE6IFRoZSBjdXJyZW50IGNvZGUgcnVucyBhdCAxNCBjeWNsZXMvbGltYiBhc3ltcHRvdGljYWxseSBvbgorICBVbHRyYVNQQVJDLTEvMiBhbmQgMTcuNSBjeWNsZXMvbGltYiBvbiBVbHRyYVNQQVJDLTMuICBPbiBVbHRyYVNQQVJDLTEvMiwgdGhlCisgIGNvZGUgc3VzdGFpbnMgNCBpbnN0cnVjdGlvbnMvY3ljbGUuICBJdCBtaWdodCBiZSBwb3NzaWJsZSB0byBpbnZlbnQgYSBiZXR0ZXIKKyAgd2F5IG9mIHN1bW1pbmcgdGhlIGludGVybWVkaWF0ZSA0OS1iaXQgb3BlcmFuZHMsIGJ1dCBpdCBpcyB1bmxpa2VseSB0aGF0IGl0CisgIHdpbGwgc2F2ZSBlbm91Z2ggaW5zdHJ1Y3Rpb25zIHRvIHNhdmUgYW4gZW50aXJlIGN5Y2xlLgorCisgIFRoZSBsb2FkLXVzZSBvZiB0aGUgdSBvcGVyYW5kIGlzIG5vdCBlbm91Z2ggc2NoZWR1bGVkIGZvciBnb29kIEwyIGNhY2hlCisgIHBlcmZvcm1hbmNlLiAgVGhlIFVsdHJhU1BBUkMtMS8yIEwxIGNhY2hlIGlzIGRpcmVjdCBtYXBwZWQsIGFuZCBzaW5jZSB3ZSB1c2UKKyAgdGVtcG9yYXJ5IHN0YWNrIHNsb3RzIHRoYXQgd2lsbCBjb25mbGljdCB3aXRoIHRoZSB1IGFuZCByIG9wZXJhbmRzLCB3ZSBtaXNzCisgIHRvIEwyIHZlcnkgb2Z0ZW4uICBUaGUgbG9hZC11c2Ugb2YgdGhlIHN0ZC9sZHggcGFpcnMgdmlhIHRoZSBzdGFjayBhcmUKKyAgcGVyaGFwcyBvdmVyLXNjaGVkdWxlZC4KKworICBJdCB3b3VsZCBiZSBwb3NzaWJsZSB0byBzYXZlIHR3byBpbnN0cnVjdGlvbnM6ICgxKSBUaGUgbW92IGNvdWxkIGJlIGF2b2lkZWQKKyAgaWYgdGhlIHN0ZC9sZHggd2VyZSBsZXNzIHNjaGVkdWxlZC4gICgyKSBUaGUgbGR4IG9mIHRoZSByIG9wZXJhbmQgY291bGQgYmUKKyAgc3BsaXQgaW50byB0d28gbGQgaW5zdHJ1Y3Rpb25zLCBzYXZpbmcgdGhlIHNoaWZ0cy9tYXNrcy4KKworICBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gcmVhY2ggMTQgY3ljbGVzL2xpbWIgZm9yIFVsdHJhU1BBUkMtMyBpZiB0aGUgZnAKKyAgb3BlcmF0aW9ucyB3aGVyZSByZXNjaGVkdWxlZCBmb3IgdGhpcyBwcm9jZXNzb3IncyA0LWN5Y2xlIGxhdGVuY3kuCisKKyogbXBuX211bF8xOiBUaGUgY3VycmVudCBjb2RlIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGVkaXQgb2YgdGhlIG1wbl9hZGRtdWxfMQorICBjb2RlLiAgSXQgd291bGQgYmUgcG9zc2libGUgdG8gc2hhdmUgb25lIG9yIHR3byBjeWNsZXMgZnJvbSBpdCwgd2l0aCBzb21lCisgIGxhYm91ci4KKworKiBtcG5fc3VibXVsXzE6IFNpbXBsZW1pbmRlZCBjb2RlIGp1c3QgY2FsbGluZyBtcG5fbXVsXzEgKyBtcG5fc3ViX24uICBUaGlzCisgIG1lYW5zIHRoYXQgaXQgcnVucyBhdCAxOCBjeWNsZXMvbGltYiBvbiBVbHRyYVNQQVJDLTEvMiBhbmQgMjMgY3ljbGVzL2xpbWIgb24KKyAgVWx0cmFTUEFSQy0zLiAgSXQgd291bGQgYmUgcG9zc2libGUgdG8gZWl0aGVyIG1hdGNoIHRoZSBtcG5fYWRkbXVsXzEKKyAgcGVyZm9ybWFuY2UsIG9yIGluIHRoZSB3b3JzdCBjYXNlIHVzZSBvbmUgbW9yZSBpbnN0cnVjdGlvbiBncm91cC4KKworKiBVUzEvVVMyIGNhY2hlIGNvbmZsaWN0IHJlc29sdmluZy4gIFRoZSBkaXJlY3QgbWFwcGVkIEwxIGRhdGUgY2FjaGUgb2YgVVMxL1VTMgorICBpcyBhIHByb2JsZW0gZm9yIG11bF8xLCBhZGRtdWxfMSAoYW5kIGEgcHJvc3BlY3RpdmUgc3VibXVsXzEpLiAgV2Ugc2hvdWxkCisgIGFsbG9jYXRlIGEgbGFyZ2VyIGNhY2hlIGFyZWEsIGFuZCBwdXQgdGhlIHN0YWNrIHRlbXAgYXJlYSBpbiBhIHBsYWNlIHRoYXQKKyAgZG9lc24ndCBjYXVzZSBjYWNoZSBjb25mbGljdHMuCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvY29weWQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L2NvcHlkLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjEwNWQzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L2NvcHlkLmFzbQpAQCAtMCwwICsxLDg5IEBACitkbmwgIFNQQVJDIHY5IG1wbl9jb3B5ZCAtLSBDb3B5IGEgbGltYiB2ZWN0b3IsIGRlY3JlbWVudGluZy4KKworZG5sICBDb3B5cmlnaHQgMTk5OS0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJCSAgIGN5Y2xlcy9saW1iCitDIFVsdHJhU1BBUkMgMSYyOgkgMgorQyBVbHRyYVNQQVJDIDM6CQkgMi41CitDIFVsdHJhU1BBUkMgVDE6CTE3CitDIFVsdHJhU1BBUkMgVDM6CSA2CitDIFVsdHJhU1BBUkMgVDQvVDU6CSAyCisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyBycHRyCSVvMAorQyBzcHRyCSVvMQorQyBuCSVvMgorCitBU01fU1RBUlQoKQorCVJFR0lTVEVSKCVnMiwjc2NyYXRjaCkKKwlSRUdJU1RFUiglZzMsI3NjcmF0Y2gpCitQUk9MT0dVRShtcG5fY29weWQpCisJc2xseAklbzIsMywlZzEKKwlhZGQJJWcxLCVvMCwlbzAKKwlhZGQJJWcxLCVvMSwlbzEKKwlhZGRjYwklbzIsLTgsJW8yCisJYmwscHQJJXhjYyxMKGVuZDAxMjM0NTY3KQorCW5vcAorTChsb29wMSk6CisJbGR4CVslbzEtOF0sJWcxCisJbGR4CVslbzEtMTZdLCVnMgorCWxkeAlbJW8xLTI0XSwlZzMKKwlsZHgJWyVvMS0zMl0sJWc0CisJbGR4CVslbzEtNDBdLCVnNQorCWxkeAlbJW8xLTQ4XSwlbzMKKwlsZHgJWyVvMS01Nl0sJW80CisJbGR4CVslbzEtNjRdLCVvNQorCWFkZAklbzEsLTY0LCVvMQorCXN0eAklZzEsWyVvMC04XQorCXN0eAklZzIsWyVvMC0xNl0KKwlzdHgJJWczLFslbzAtMjRdCisJc3R4CSVnNCxbJW8wLTMyXQorCXN0eAklZzUsWyVvMC00MF0KKwlzdHgJJW8zLFslbzAtNDhdCisJc3R4CSVvNCxbJW8wLTU2XQorCXN0eAklbzUsWyVvMC02NF0KKwlhZGRjYwklbzIsLTgsJW8yCisJYmdlLHB0CSV4Y2MsTChsb29wMSkKKwlhZGQJJW8wLC02NCwlbzAKK0woZW5kMDEyMzQ1NjcpOgorCWFkZGNjCSVvMiw4LCVvMgorCWJ6LHBuCSV4Y2MsTChlbmQpCisJbm9wCitMKGxvb3AyKToKKwlsZHgJWyVvMS04XSwlZzEKKwlhZGQJJW8xLC04LCVvMQorCWFkZGNjCSVvMiwtMSwlbzIKKwlzdHgJJWcxLFslbzAtOF0KKwliZyxwdAkleGNjLEwobG9vcDIpCisJYWRkCSVvMCwtOCwlbzAKK0woZW5kKToJcmV0bAorCW5vcAorRVBJTE9HVUUobXBuX2NvcHlkKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L2NvcHlpLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC9jb3B5aS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU2NjNkYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC9jb3B5aS5hc20KQEAgLTAsMCArMSw4NiBAQAorZG5sICBTUEFSQyB2OSBtcG5fY29weWkgLS0gQ29weSBhIGxpbWIgdmVjdG9yLCBpbmNyZW1lbnRpbmcuCisKK2RubCAgQ29weXJpZ2h0IDE5OTktMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCQkgICBjeWNsZXMvbGltYgorQyBVbHRyYVNQQVJDIDEmMjoJIDIKK0MgVWx0cmFTUEFSQyAzOgkJIDIuNQorQyBVbHRyYVNQQVJDIFQxOgkxNworQyBVbHRyYVNQQVJDIFQzOgkgNgorQyBVbHRyYVNQQVJDIFQ0L1Q1OgkgMgorCitDIElOUFVUIFBBUkFNRVRFUlMKK0MgcnB0cgklbzAKK0Mgc3B0cgklbzEKK0MgbgklbzIKKworQVNNX1NUQVJUKCkKKwlSRUdJU1RFUiglZzIsI3NjcmF0Y2gpCisJUkVHSVNURVIoJWczLCNzY3JhdGNoKQorUFJPTE9HVUUobXBuX2NvcHlpKQorCWFkZGNjCSVvMiwtOCwlbzIKKwlibCxwdAkleGNjLEwoZW5kMDEyMzQ1NjcpCisJbm9wCitMKGxvb3AxKToKKwlsZHgJWyVvMSswXSwlZzEKKwlsZHgJWyVvMSs4XSwlZzIKKwlsZHgJWyVvMSsxNl0sJWczCisJbGR4CVslbzErMjRdLCVnNAorCWxkeAlbJW8xKzMyXSwlZzUKKwlsZHgJWyVvMSs0MF0sJW8zCisJbGR4CVslbzErNDhdLCVvNAorCWxkeAlbJW8xKzU2XSwlbzUKKwlhZGQJJW8xLDY0LCVvMQorCXN0eAklZzEsWyVvMCswXQorCXN0eAklZzIsWyVvMCs4XQorCXN0eAklZzMsWyVvMCsxNl0KKwlzdHgJJWc0LFslbzArMjRdCisJc3R4CSVnNSxbJW8wKzMyXQorCXN0eAklbzMsWyVvMCs0MF0KKwlzdHgJJW80LFslbzArNDhdCisJc3R4CSVvNSxbJW8wKzU2XQorCWFkZGNjCSVvMiwtOCwlbzIKKwliZ2UscHQJJXhjYyxMKGxvb3AxKQorCWFkZAklbzAsNjQsJW8wCitMKGVuZDAxMjM0NTY3KToKKwlhZGRjYwklbzIsOCwlbzIKKwlieixwbgkleGNjLEwoZW5kKQorCW5vcAorTChsb29wMik6CisJbGR4CVslbzErMF0sJWcxCisJYWRkCSVvMSw4LCVvMQorCWFkZGNjCSVvMiwtMSwlbzIKKwlzdHgJJWcxLFslbzArMF0KKwliZyxwdAkleGNjLEwobG9vcDIpCisJYWRkCSVvMCw4LCVvMAorTChlbmQpOglyZXRsCisJbm9wCitFUElMT0dVRShtcG5fY29weWkpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvZGl2ZV8xLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvZGl2ZV8xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI2NGYyOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC9kaXZlXzEuYwpAQCAtMCwwICsxLDE2MSBAQAorLyogVWx0cmFTUEFSQyA2NCBtcG5fZGl2ZXhhY3RfMSAtLSBtcG4gYnkgbGltYiBleGFjdCBkaXZpc2lvbi4KKworICAgVEhFIEZVTkNUSU9OUyBJTiBUSElTIEZJTEUgQVJFIEZPUiBJTlRFUk5BTCBVU0UgT05MWS4gIFRIRVknUkUgQUxNT1NUCisgICBDRVJUQUlOIFRPIEJFIFNVQkpFQ1QgVE8gSU5DT01QQVRJQkxFIENIQU5HRVMgT1IgRElTQVBQRUFSIENPTVBMRVRFTFkgSU4KKyAgIEZVVFVSRSBHTlUgTVAgUkVMRUFTRVMuCisKK0NvcHlyaWdodCAyMDAwLCAyMDAxLCAyMDAzLCAyMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKyNpbmNsdWRlICJsb25nbG9uZy5oIgorCisjaW5jbHVkZSAibXBuL3NwYXJjNjQvc3BhcmM2NC5oIgorCisKKy8qICAgICAgICAgICAgICAgICA2NC1iaXQgZGl2aXNvciAgIDMyLWJpdCBkaXZpc29yCisgICAgICAgICAgICAgICAgICAgIGN5Y2xlcy9saW1iICAgICAgY3ljbGVzL2xpbWIKKyAgICAgICAgICAgICAgICAgICAgIChhcHByb3gpICAgICAgICAgKGFwcHJveCkKKyAgIFVsdHJhc3BhcmMgMmk6ICAgICAgMTEwICAgICAgICAgICAgICAgNzAKKyovCisKKworLyogVGhlcmUgYXJlIHR3byBrZXkgaWRlYXMgaGVyZSB0byByZWR1Y2UgbXVseCdzLiAgRmlyc3RseSB3aGVuIHRoZSBkaXZpc29yCisgICBpcyAzMi1iaXRzIHRoZSBoaWdoIG9mIHEqZCBjYW4gYmUgY2FsY3VsYXRlZCB3aXRob3V0IHRoZSB0d28gMzJ4MzItPjY0CisgICBjcm9zcy1wcm9kdWN0cyBpbnZvbHZpbmcgdGhlIGhpZ2ggMzItYml0cyBvZiB0aGUgZGl2aXNvciwgdGhhdCBiZWluZyB6ZXJvCisgICBvZiBjb3Vyc2UuICBTZWNvbmRseSB1bXVsX3BwbW1fbG93ZXF1YWwgYW5kIHVtdWxfcHBtbV9oYWxmX2xvd2VxdWFsIHNhdmUKKyAgIG9uZSBtdWx4IChlYWNoKSBrbm93aW5nIHRoZSBsb3cgb2YgcSpkIGlzIGVxdWFsIHRvIHRoZSBpbnB1dCBsaW1iIGwuCisKKyAgIEZvciBzaXplPT0xLCBhIHNpbXBsZSB1ZGl2eCBpcyB1c2VkLiAgVGhpcyBpcyBmYXN0ZXIgdGhhbiBjYWxjdWxhdGluZyBhbgorICAgaW52ZXJzZS4KKworICAgRm9yIGEgMzItYml0IGRpdmlzb3IgYW5kIHNtYWxsIHNpemVzLCBhbiBhdHRlbXB0IHdhcyBtYWRlIGF0IGEgc2ltcGxlCisgICB1ZGl2eCBsb29wICh0d28gcGVyIDY0LWJpdCBsaW1iKSwgYnV0IGl0IHR1cm5lZCBvdXQgdG8gYmUgc2xvd2VyIHRoYW4KKyAgIG11bC1ieS1pbnZlcnNlLiAgQXQgc2l6ZT09MiB0aGUgaW52ZXJzZSBpcyBhYm91dCAyNjAgY3ljbGVzIHRvdGFsCisgICBjb21wYXJlZCB0byBhIHVkaXZ4IGF0IDI5MS4gIFBlcmhhcHMgdGhlIGxhdHRlciB3b3VsZCBzdWl0IHdoZW4gc2l6ZT09MgorICAgYnV0IHRoZSBoaWdoIDMyLWJpdHMgb2YgdGhlIHNlY29uZCBsaW1iIGlzIHplcm8gKHNhdmluZyBvbmUgdWRpdngpLCBidXQKKyAgIGl0IGRvZXNuJ3Qgc2VlbSB3b3J0aCBhIHNwZWNpYWwgY2FzZSBqdXN0IGZvciB0aGF0LiAgKi8KKwordm9pZAorbXBuX2RpdmV4YWN0XzEgKG1wX3B0ciBkc3QsIG1wX3NyY3B0ciBzcmMsIG1wX3NpemVfdCBzaXplLCBtcF9saW1iX3QgZGl2aXNvcikKK3sKKyAgbXBfbGltYl90ICBpbnZlcnNlLCBzLCBzX25leHQsIGMsIGwsIGxzLCBxOworICB1bnNpZ25lZCAgIHJzaGlmdCwgbHNoaWZ0OworICBtcF9saW1iX3QgIGxzaGlmdF9tYXNrOworICBtcF9saW1iX3QgIGRpdmlzb3JfaDsKKworICBBU1NFUlQgKHNpemUgPj0gMSk7CisgIEFTU0VSVCAoZGl2aXNvciAhPSAwKTsKKyAgQVNTRVJUIChNUE5fU0FNRV9PUl9TRVBBUkFURV9QIChkc3QsIHNyYywgc2l6ZSkpOworICBBU1NFUlRfTVBOIChzcmMsIHNpemUpOworICBBU1NFUlRfTElNQiAoZGl2aXNvcik7CisKKyAgcyA9ICpzcmMrKzsgICAgICAgICAgICAgICAgIC8qIHNyYyBsb3cgbGltYiAqLworICBzaXplLS07CisgIGlmIChzaXplID09IDApCisgICAgeworICAgICAgKmRzdCA9IHMgLyBkaXZpc29yOworICAgICAgcmV0dXJuOworICAgIH0KKworICBpZiAoKGRpdmlzb3IgJiAxKSA9PSAwKQorICAgIHsKKyAgICAgIGNvdW50X3RyYWlsaW5nX3plcm9zIChyc2hpZnQsIGRpdmlzb3IpOworICAgICAgZGl2aXNvciA+Pj0gcnNoaWZ0OworICAgICAgbHNoaWZ0ID0gNjQgLSByc2hpZnQ7CisKKyAgICAgIGxzaGlmdF9tYXNrID0gTVBfTElNQl9UX01BWDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICByc2hpZnQgPSAwOworCisgICAgICAvKiByc2hpZnQ9PTAgbWVhbnMgbm8gc2hpZnQsIHNvIG11c3QgbWFzayBvdXQgb3RoZXIgcGFydCBpbiB0aGlzIGNhc2UgKi8KKyAgICAgIGxzaGlmdCA9IDA7CisgICAgICBsc2hpZnRfbWFzayA9IDA7CisgICAgfQorCisgIGJpbnZlcnRfbGltYiAoaW52ZXJzZSwgZGl2aXNvcik7CisKKyAgYyA9IDA7CisgIGRpdmlzb3JfaCA9IEhJR0gzMiAoZGl2aXNvcik7CisKKyAgaWYgKGRpdmlzb3JfaCA9PSAwKQorICAgIHsKKyAgICAgIC8qIDMyLWJpdCBkaXZpc29yICovCisgICAgICBkbworICAgICAgICB7CisgICAgICAgICAgc19uZXh0ID0gKnNyYysrOworICAgICAgICAgIGxzID0gKHMgPj4gcnNoaWZ0KSB8ICgoc19uZXh0IDw8IGxzaGlmdCkgJiBsc2hpZnRfbWFzayk7CisgICAgICAgICAgcyA9IHNfbmV4dDsKKworICAgICAgICAgIFNVQkNfTElNQiAoYywgbCwgbHMsIGMpOworCisgICAgICAgICAgcSA9IGwgKiBpbnZlcnNlOworICAgICAgICAgICpkc3QrKyA9IHE7CisKKyAgICAgICAgICB1bXVsX3BwbW1faGFsZl9sb3dlcXVhbCAobCwgcSwgZGl2aXNvciwgbCk7CisgICAgICAgICAgYyArPSBsOworCisgICAgICAgICAgc2l6ZS0tOworICAgICAgICB9CisgICAgICB3aGlsZSAoc2l6ZSAhPSAwKTsKKworICAgICAgbHMgPSBzID4+IHJzaGlmdDsKKyAgICAgIGwgPSBscyAtIGM7CisgICAgICBxID0gbCAqIGludmVyc2U7CisgICAgICAqZHN0ID0gcTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiA2NC1iaXQgZGl2aXNvciAqLworICAgICAgbXBfbGltYl90ICBkaXZpc29yX2wgPSBMT1czMiAoZGl2aXNvcik7CisgICAgICBkbworICAgICAgICB7CisgICAgICAgICAgc19uZXh0ID0gKnNyYysrOworICAgICAgICAgIGxzID0gKHMgPj4gcnNoaWZ0KSB8ICgoc19uZXh0IDw8IGxzaGlmdCkgJiBsc2hpZnRfbWFzayk7CisgICAgICAgICAgcyA9IHNfbmV4dDsKKworICAgICAgICAgIFNVQkNfTElNQiAoYywgbCwgbHMsIGMpOworCisgICAgICAgICAgcSA9IGwgKiBpbnZlcnNlOworICAgICAgICAgICpkc3QrKyA9IHE7CisKKyAgICAgICAgICB1bXVsX3BwbW1fbG93ZXF1YWwgKGwsIHEsIGRpdmlzb3IsIGRpdmlzb3JfaCwgZGl2aXNvcl9sLCBsKTsKKyAgICAgICAgICBjICs9IGw7CisKKyAgICAgICAgICBzaXplLS07CisgICAgICAgIH0KKyAgICAgIHdoaWxlIChzaXplICE9IDApOworCisgICAgICBscyA9IHMgPj4gcnNoaWZ0OworICAgICAgbCA9IGxzIC0gYzsKKyAgICAgIHEgPSBsICogaW52ZXJzZTsKKyAgICAgICpkc3QgPSBxOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC9kaXZyZW1fMS5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L2RpdnJlbV8xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM5NDU2NQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC9kaXZyZW1fMS5jCkBAIC0wLDAgKzEsMjQyIEBACisvKiBVbHRyYVNwYXJjIDY0IG1wbl9kaXZyZW1fMSAtLSBtcG4gYnkgbGltYiBkaXZpc2lvbi4KKworQ29weXJpZ2h0IDE5OTEsIDE5OTMsIDE5OTQsIDE5OTYsIDE5OTgtMjAwMSwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorI2luY2x1ZGUgImxvbmdsb25nLmgiCisKKyNpbmNsdWRlICJtcG4vc3BhcmM2NC9zcGFyYzY0LmgiCisKKworLyogICAgICAgICAgICAgICAgICAgNjQtYml0IGRpdmlzb3IgICAgICAgMzItYml0IGRpdmlzb3IKKyAgICAgICAgICAgICAgICAgICAgICAgY3ljbGVzL2xpbWIgICAgICAgICAgY3ljbGVzL2xpbWIKKyAgICAgICAgICAgICAgICAgICAgICAgIChhcHByb3gpICAgICAgICAgICAgIChhcHByb3gpCisgICAgICAgICAgICAgICAgICAgaW50ZWdlciAgZnJhY3Rpb24gICAgaW50ZWdlciAgZnJhY3Rpb24KKyAgIFVsdHJhc3BhcmMgMmk6ICAgIDE2MCAgICAgIDE2MCAgICAgICAgICAxMjIgICAgICA5NgorKi8KKworCisvKiAzMi1iaXQgZGl2aXNvcnMgYXJlIHRyZWF0ZWQgaW4gc3BlY2lhbCBjYXNlIGNvZGUuICBUaGlzIHJlcXVpcmVzIDQgbXVseAorICAgcGVyIGxpbWIgaW5zdGVhZCBvZiA4IGluIHRoZSBnZW5lcmFsIGNhc2UuCisKKyAgIEZvciBiaWcgZW5kaWFuIHN5c3RlbXMgd2UgbmVlZCBIQUxGX0VORElBTl9BREogaW5jbHVkZWQgaW4gdGhlIHNyY1tpXQorICAgYWRkcmVzc2luZywgdG8gZ2V0IHRoZSB0d28gaGFsdmVzIG9mIGVhY2ggbGltYiByZWFkIGluIHRoZSBjb3JyZWN0IG9yZGVyLgorICAgVGhpcyBpcyBrZXB0IGluIGFuIGFkaiB2YXJpYWJsZS4gIERvaW5nIHRoYXQgbWVhc3VyZXMgYWJvdXQgNCBjL2wgZmFzdGVyCisgICB0aGFuIGp1c3Qgd3JpdGluZyBIQUxGX0VORElBTl9BREooaSkgaW4gdGhlIGludGVnZXIgbG9vcC4gIFRoZSBsYXR0ZXIKKyAgIHNob3VsZG4ndCBiZSA2IGN5Y2xlcyB3b3J0aCBvZiB3b3JrLCBidXQgcGVyaGFwcyBpdCBkb2Vzbid0IHNjaGVkdWxlIHdlbGwKKyAgIChvbiBnY2MgMy4yLjEgYXQgbGVhc3QpLiAgVGhlIGZyYWN0aW9uIGxvb3AgZG9lc24ndCBzZWVtIGFmZmVjdGVkLCBidXQgd2UKKyAgIHN0aWxsIHVzZSBhIHZhcmlhYmxlIHNpbmNlIHRoYXQgb3VnaHQgdG8gd29yayBvdXQgYmVzdC4gICovCisKK21wX2xpbWJfdAorbXBuX2RpdnJlbV8xIChtcF9wdHIgcXBfbGltYnB0ciwgbXBfc2l6ZV90IHhzaXplX2xpbWJzLAorICAgICAgICAgICAgICBtcF9zcmNwdHIgYXBfbGltYnB0ciwgbXBfc2l6ZV90IHNpemVfbGltYnMsIG1wX2xpbWJfdCBkX2xpbWIpCit7CisgIG1wX3NpemVfdCAgdG90YWxfc2l6ZV9saW1iczsKKyAgbXBfc2l6ZV90ICBpOworCisgIEFTU0VSVCAoeHNpemVfbGltYnMgPj0gMCk7CisgIEFTU0VSVCAoc2l6ZV9saW1icyA+PSAwKTsKKyAgQVNTRVJUIChkX2xpbWIgIT0gMCk7CisgIC8qIEZJWE1FOiBXaGF0J3MgdGhlIGNvcnJlY3Qgb3ZlcmxhcCBydWxlIHdoZW4geHNpemUhPTA/ICovCisgIEFTU0VSVCAoTVBOX1NBTUVfT1JfU0VQQVJBVEVfUCAocXBfbGltYnB0ciArIHhzaXplX2xpbWJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwX2xpbWJwdHIsIHNpemVfbGltYnMpKTsKKworICB0b3RhbF9zaXplX2xpbWJzID0gc2l6ZV9saW1icyArIHhzaXplX2xpbWJzOworICBpZiAoVU5MSUtFTFkgKHRvdGFsX3NpemVfbGltYnMgPT0gMCkpCisgICAgcmV0dXJuIDA7CisKKyAgLyogdWRpdnggaXMgZ29vZCBmb3IgdG90YWxfc2l6ZT09MSwgYW5kIG5vIG5lZWQgdG8gYm90aGVyIGNoZWNraW5nCisgICAgIGxpbWI8ZGl2aXNvciwgc2luY2UgaWYgdGhhdCdzIGxpa2VseSB0aGUgY2FsbGVyIHNob3VsZCBjaGVjayAqLworICBpZiAoVU5MSUtFTFkgKHRvdGFsX3NpemVfbGltYnMgPT0gMSkpCisgICAgeworICAgICAgbXBfbGltYl90ICBhLCBxOworICAgICAgYSA9IChMSUtFTFkgKHNpemVfbGltYnMgIT0gMCkgPyBhcF9saW1icHRyWzBdIDogMCk7CisgICAgICBxID0gYSAvIGRfbGltYjsKKyAgICAgIHFwX2xpbWJwdHJbMF0gPSBxOworICAgICAgcmV0dXJuIGEgLSBxKmRfbGltYjsKKyAgICB9CisKKyAgaWYgKGRfbGltYiA8PSBDTlNUX0xJTUIoMHhGRkZGRkZGRikpCisgICAgeworICAgICAgbXBfc2l6ZV90ICBzaXplLCB4c2l6ZSwgdG90YWxfc2l6ZSwgYWRqOworICAgICAgdW5zaWduZWQgICAqcXAsIG4xLCBuMCwgcSwgciwgbnNoaWZ0LCBub3JtX3JtYXNrOworICAgICAgbXBfbGltYl90ICBkaW52X2xpbWI7CisgICAgICBjb25zdCB1bnNpZ25lZCAqYXA7CisgICAgICBpbnQgICAgICAgIG5vcm0sIG5vcm1fcnNoaWZ0OworCisgICAgICBzaXplID0gMiAqIHNpemVfbGltYnM7CisgICAgICB4c2l6ZSA9IDIgKiB4c2l6ZV9saW1iczsKKyAgICAgIHRvdGFsX3NpemUgPSBzaXplICsgeHNpemU7CisKKyAgICAgIGFwID0gKHVuc2lnbmVkICopIGFwX2xpbWJwdHI7CisgICAgICBxcCA9ICh1bnNpZ25lZCAqKSBxcF9saW1icHRyOworCisgICAgICBxcCArPSB4c2l6ZTsKKyAgICAgIHIgPSAwOyAgICAgICAgLyogaW5pdGlhbCByZW1haW5kZXIgKi8KKworICAgICAgaWYgKExJS0VMWSAoc2l6ZSAhPSAwKSkKKyAgICAgICAgeworICAgICAgICAgIG4xID0gYXBbc2l6ZS0xICsgSEFMRl9FTkRJQU5fQURKKDEpXTsKKworICAgICAgICAgIC8qIElmIHRoZSBsZW5ndGggb2YgdGhlIHNvdXJjZSBpcyB1bmlmb3JtbHkgZGlzdHJpYnV0ZWQsIHRoZW4KKyAgICAgICAgICAgICB0aGVyZSdzIGEgNTAlIGNoYW5jZSBvZiB0aGUgaGlnaCAzMi1iaXRzIGJlaW5nIHplcm8sIHdoaWNoIHdlCisgICAgICAgICAgICAgY2FuIHNraXAuICAqLworICAgICAgICAgIGlmIChuMSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBuMSA9IGFwW3NpemUtMiArIEhBTEZfRU5ESUFOX0FESigwKV07CisgICAgICAgICAgICAgIHRvdGFsX3NpemUtLTsKKyAgICAgICAgICAgICAgc2l6ZS0tOworICAgICAgICAgICAgICBBU1NFUlQgKHNpemUgPiAwKTsgIC8qIGJlY2F1c2UgYWx3YXlzIGV2ZW4gKi8KKyAgICAgICAgICAgICAgcXBbc2l6ZSArIEhBTEZfRU5ESUFOX0FESigxKV0gPSAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgLyogU2tpcCBhIGRpdmlzaW9uIGlmIGhpZ2ggPCBkaXZpc29yIChoaWdoIHF1b3RpZW50IDApLiAgVGVzdGluZworICAgICAgICAgICAgIGhlcmUgYmVmb3JlIGJlZm9yZSBub3JtYWxpemluZyB3aWxsIHN0aWxsIHNraXAgYXMgb2Z0ZW4gYXMKKyAgICAgICAgICAgICBwb3NzaWJsZS4gICovCisgICAgICAgICAgaWYgKG4xIDwgZF9saW1iKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICByID0gbjE7CisgICAgICAgICAgICAgIHNpemUtLTsKKyAgICAgICAgICAgICAgcXBbc2l6ZSArIEhBTEZfRU5ESUFOX0FESihzaXplKV0gPSAwOworICAgICAgICAgICAgICB0b3RhbF9zaXplLS07CisgICAgICAgICAgICAgIGlmICh0b3RhbF9zaXplID09IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIHI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgY291bnRfbGVhZGluZ196ZXJvc18zMiAobm9ybSwgZF9saW1iKTsKKyAgICAgIG5vcm0gLT0gMzI7CisgICAgICBkX2xpbWIgPDw9IG5vcm07CisgICAgICByIDw8PSBub3JtOworCisgICAgICBub3JtX3JzaGlmdCA9IDMyIC0gbm9ybTsKKyAgICAgIG5vcm1fcm1hc2sgPSAobm9ybSA9PSAwID8gMCA6IDB4RkZGRkZGRkYpOworCisgICAgICBpbnZlcnRfaGFsZl9saW1iIChkaW52X2xpbWIsIGRfbGltYik7CisKKyAgICAgIGlmIChMSUtFTFkgKHNpemUgIT0gMCkpCisgICAgICAgIHsKKyAgICAgICAgICBpID0gc2l6ZSAtIDE7CisgICAgICAgICAgYWRqID0gSEFMRl9FTkRJQU5fQURKIChpKTsKKyAgICAgICAgICBuMSA9IGFwW2kgKyBhZGpdOworICAgICAgICAgIGFkaiA9IC1hZGo7CisgICAgICAgICAgciB8PSAoKG4xID4+IG5vcm1fcnNoaWZ0KSAmIG5vcm1fcm1hc2spOworICAgICAgICAgIGZvciAoIDsgaSA+IDA7IGktLSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgbjAgPSBhcFtpLTEgKyBhZGpdOworICAgICAgICAgICAgICBhZGogPSAtYWRqOworICAgICAgICAgICAgICBuc2hpZnQgPSAobjEgPDwgbm9ybSkgfCAoKG4wID4+IG5vcm1fcnNoaWZ0KSAmIG5vcm1fcm1hc2spOworICAgICAgICAgICAgICB1ZGl2X3Fybm5kX2hhbGZfcHJlaW52IChxLCByLCByLCBuc2hpZnQsIGRfbGltYiwgZGludl9saW1iKTsKKyAgICAgICAgICAgICAgcXBbaSArIGFkal0gPSBxOworICAgICAgICAgICAgICBuMSA9IG4wOworICAgICAgICAgICAgfQorICAgICAgICAgIG5zaGlmdCA9IG4xIDw8IG5vcm07CisgICAgICAgICAgdWRpdl9xcm5uZF9oYWxmX3ByZWludiAocSwgciwgciwgbnNoaWZ0LCBkX2xpbWIsIGRpbnZfbGltYik7CisgICAgICAgICAgcXBbMCArIEhBTEZfRU5ESUFOX0FESigwKV0gPSBxOworICAgICAgICB9CisgICAgICBxcCAtPSB4c2l6ZTsKKyAgICAgIGFkaiA9IEhBTEZfRU5ESUFOX0FESiAoMCk7CisgICAgICBmb3IgKGkgPSB4c2l6ZS0xOyBpID49IDA7IGktLSkKKyAgICAgICAgeworICAgICAgICAgIHVkaXZfcXJubmRfaGFsZl9wcmVpbnYgKHEsIHIsIHIsIDAsIGRfbGltYiwgZGludl9saW1iKTsKKyAgICAgICAgICBhZGogPSAtYWRqOworICAgICAgICAgIHFwW2kgKyBhZGpdID0gcTsKKyAgICAgICAgfQorCisgICAgICByZXR1cm4gciA+PiBub3JtOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIG1wX3NyY3B0ciAgYXA7CisgICAgICBtcF9wdHIgICAgIHFwOworICAgICAgbXBfc2l6ZV90ICBzaXplLCB4c2l6ZSwgdG90YWxfc2l6ZTsKKyAgICAgIG1wX2xpbWJfdCAgZCwgbjEsIG4wLCBxLCByLCBkaW52LCBuc2hpZnQsIG5vcm1fcm1hc2s7CisgICAgICBpbnQgICAgICAgIG5vcm0sIG5vcm1fcnNoaWZ0OworCisgICAgICBhcCA9IGFwX2xpbWJwdHI7CisgICAgICBxcCA9IHFwX2xpbWJwdHI7CisgICAgICBzaXplID0gc2l6ZV9saW1iczsKKyAgICAgIHhzaXplID0geHNpemVfbGltYnM7CisgICAgICB0b3RhbF9zaXplID0gdG90YWxfc2l6ZV9saW1iczsKKyAgICAgIGQgPSBkX2xpbWI7CisKKyAgICAgIHFwICs9IHRvdGFsX3NpemU7ICAgLyogYWJvdmUgaGlnaCBsaW1iICovCisgICAgICByID0gMDsgICAgICAgICAgICAgIC8qIGluaXRpYWwgcmVtYWluZGVyICovCisKKyAgICAgIGlmIChMSUtFTFkgKHNpemUgIT0gMCkpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBTa2lwIGEgZGl2aXNpb24gaWYgaGlnaCA8IGRpdmlzb3IgKGhpZ2ggcXVvdGllbnQgMCkuICBUZXN0aW5nCisgICAgICAgICAgICAgaGVyZSBiZWZvcmUgYmVmb3JlIG5vcm1hbGl6aW5nIHdpbGwgc3RpbGwgc2tpcCBhcyBvZnRlbiBhcworICAgICAgICAgICAgIHBvc3NpYmxlLiAgKi8KKyAgICAgICAgICBuMSA9IGFwW3NpemUtMV07CisgICAgICAgICAgaWYgKG4xIDwgZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgciA9IG4xOworICAgICAgICAgICAgICAqLS1xcCA9IDA7CisgICAgICAgICAgICAgIHRvdGFsX3NpemUtLTsKKyAgICAgICAgICAgICAgaWYgKHRvdGFsX3NpemUgPT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcjsKKyAgICAgICAgICAgICAgc2l6ZS0tOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIGNvdW50X2xlYWRpbmdfemVyb3MgKG5vcm0sIGQpOworICAgICAgZCA8PD0gbm9ybTsKKyAgICAgIHIgPDw9IG5vcm07CisKKyAgICAgIG5vcm1fcnNoaWZ0ID0gR01QX0xJTUJfQklUUyAtIG5vcm07CisgICAgICBub3JtX3JtYXNrID0gKG5vcm0gPT0gMCA/IDAgOiB+Q05TVF9MSU1CKDApKTsKKworICAgICAgaW52ZXJ0X2xpbWIgKGRpbnYsIGQpOworCisgICAgICBpZiAoTElLRUxZIChzaXplICE9IDApKQorICAgICAgICB7CisgICAgICAgICAgbjEgPSBhcFtzaXplLTFdOworICAgICAgICAgIHIgfD0gKChuMSA+PiBub3JtX3JzaGlmdCkgJiBub3JtX3JtYXNrKTsKKyAgICAgICAgICBmb3IgKGkgPSBzaXplLTI7IGkgPj0gMDsgaS0tKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBuMCA9IGFwW2ldOworICAgICAgICAgICAgICBuc2hpZnQgPSAobjEgPDwgbm9ybSkgfCAoKG4wID4+IG5vcm1fcnNoaWZ0KSAmIG5vcm1fcm1hc2spOworICAgICAgICAgICAgICB1ZGl2X3Fybm5kX3ByZWludiAocSwgciwgciwgbnNoaWZ0LCBkLCBkaW52KTsKKyAgICAgICAgICAgICAgKi0tcXAgPSBxOworICAgICAgICAgICAgICBuMSA9IG4wOworICAgICAgICAgICAgfQorICAgICAgICAgIG5zaGlmdCA9IG4xIDw8IG5vcm07CisgICAgICAgICAgdWRpdl9xcm5uZF9wcmVpbnYgKHEsIHIsIHIsIG5zaGlmdCwgZCwgZGludik7CisgICAgICAgICAgKi0tcXAgPSBxOworICAgICAgICB9CisgICAgICBmb3IgKGkgPSAwOyBpIDwgeHNpemU7IGkrKykKKyAgICAgICAgeworICAgICAgICAgIHVkaXZfcXJubmRfcHJlaW52IChxLCByLCByLCBDTlNUX0xJTUIoMCksIGQsIGRpbnYpOworICAgICAgICAgICotLXFwID0gcTsKKyAgICAgICAgfQorICAgICAgcmV0dXJuIHIgPj4gbm9ybTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvZ2NkXzExLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC9nY2RfMTEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NjQ3NTEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvZ2NkXzExLmFzbQpAQCAtMCwwICsxLDg4IEBACitkbmwgIFNQQVJDNjQgbXBuX2djZF8xMS4KKworZG5sICBCYXNlZCBvbiB0aGUgSzcgZ2NkXzEuYXNtLCBieSBLZXZpbiBSeWRlLiAgUmVoYWNrZWQgZm9yIFNQQVJDIGJ5IFRvcmJqw7ZybgorZG5sICBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAwMC0yMDAyLCAyMDA1LCAyMDA5LCAyMDExLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDCQkgIGN5Y2xlcy9iaXQgKGFwcHJveCkKK0MgVWx0cmFTUEFSQyAxJjI6CSA1LjEKK0MgVWx0cmFTUEFSQyAzOgkJIDUuMAorQyBVbHRyYVNQQVJDIFQxOgkxMS40CitDIFVsdHJhU1BBUkMgVDM6CTEwCitDIFVsdHJhU1BBUkMgVDQ6CSA2CitDIE51bWJlcnMgbWVhc3VyZWQgd2l0aDogc3BlZWQgLUNEIC1zMzItNjQgLXQzMiBtcG5fZ2NkXzEKKworQyBjdHpfdGFibGVbbl0gaXMgdGhlIG51bWJlciBvZiB0cmFpbGluZyB6ZXJvcyBvbiBuLCBvciBNQVhTSElGVCBpZiBuPT0wLgorCitkZWZsaXQoTUFYU0hJRlQsIDcpCitkZWZsaXQoTUFTSywgZXZhbCgobTRfbHNoaWZ0KDEsTUFYU0hJRlQpKS0xKSkKKworCVJPREFUQQorCVRZUEUoY3R6X3RhYmxlLG9iamVjdCkKK2N0el90YWJsZToKKwkuYnl0ZQlNQVhTSElGVAorZm9ybG9vcChpLDEsTUFTSywKK2AJLmJ5dGUJbTRfY291bnRfdHJhaWxpbmdfemVyb3MoaSkKKycpCisJU0laRShjdHpfdGFibGUsLi1jdHpfdGFibGUpCisKK2RlZmluZShgdTAnLCAgICBgJW8wJykKK2RlZmluZShgdjAnLCAgICBgJW8xJykKKworQVNNX1NUQVJUKCkKKwlSRUdJU1RFUiglZzIsI3NjcmF0Y2gpCisJUkVHSVNURVIoJWczLCNzY3JhdGNoKQorUFJPTE9HVUUobXBuX2djZF8xMSkKKwlMRUE2NChjdHpfdGFibGUsIG81LCBnNCkKKwliCUwob2RkKQorCSBtb3YJdTAsICVvNAorCisJQUxJR04oMTYpCitMKHRvcCk6CW1vdmNjCSV4Y2MsICVvNCwgdjAJCUMgdiA9IG1pbih1LHYpCisJbW92Y2MJJXhjYywgJW8yLCAlbzAJCUMgdSA9IHx2IC0gdV0KK0wobWlkKToJbGR1YglbJW81KyVnM10sICVnNQkJQworCWJyeixhLHBuICVnMywgTChzaGlmdF9hbG90KQlDCisJIHNybHgJJW8wLCBNQVhTSElGVCwgJW8wCisJc3JseAklbzAsICVnNSwgJW80CQlDIG5ldyB1LCBvZGQKK0wob2RkKToJc3ViY2MJdjAsICVvNCwgJW8yCQlDIHYgLSB1LCBzZXQgZmxhZ3MgZm9yIGJyYW5jaCBhbmQgbW92Y2MKKwlzdWIJJW80LCB2MCwgJW8wCQlDIHUgLSB2CisJYm56LHB0CSV4Y2MsIEwodG9wKQkJQworCSBhbmQJJW8yLCBNQVNLLCAlZzMJCUMgZXh0cmFjdCBsb3cgTUFYU0hJRlQgYml0cyBmcm9tICh2LXUpCisKKwlyZXRsCisJIG1vdgl2MCwgJW8wCisKK0woc2hpZnRfYWxvdCk6CisJYglMKG1pZCkKKwkgYW5kCSVvMCwgTUFTSywgJWczCQlDCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvZ21wLW1wYXJhbS5oIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWMyYzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDEzOSBAQAorLyogU3BhcmM2NCBnbXAtbXBhcmFtLmggLS0gQ29tcGlsZXIvbWFjaGluZSBwYXJhbWV0ZXIgaGVhZGVyIGZpbGUuCisKK0NvcHlyaWdodCAxOTkxLCAxOTkzLCAxOTk0LCAxOTk5LTIwMDIsIDIwMDQsIDIwMDYsIDIwMDgtMjAxMCBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNkZWZpbmUgR01QX0xJTUJfQklUUyA2NAorI2RlZmluZSBHTVBfTElNQl9CWVRFUyA4CisKKy8qIDUwMCBNSHogdWx0cmFzcGFyYzIgcnVubmluZyBHTlUvTGludXggKi8KKworI2RlZmluZSBESVZSRU1fMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgMworI2RlZmluZSBESVZSRU1fMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgNAorI2RlZmluZSBNT0RfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMworI2RlZmluZSBNT0RfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgMworI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICBNUF9TSVpFX1RfTUFYICAvKiBuZXZlciAqLworI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAyMgorI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAgMCAgLyogbmV2ZXIgbXBuX21vZF8xXzFwICovCisjZGVmaW5lIE1PRF8xXzJfVE9fTU9EXzFfNF9USFJFU0hPTEQgICAgICAgIDI3CisjZGVmaW5lIFBSRUlOVl9NT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKworI2RlZmluZSBNVUxfVE9PTTIyX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBNVUxfVE9PTTMzX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE4NworI2RlZmluZSBNVUxfVE9PTTQ0X1RIUkVTSE9MRCAgICAgICAgICAgICAgIDI3OAorI2RlZmluZSBNVUxfVE9PTTZIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDI3OAorI2RlZmluZSBNVUxfVE9PTThIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDM1NworCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTQzX1RIUkVTSE9MRCAgICAgMjAxCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgMTk5CisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgMTU0CisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTYzX1RIUkVTSE9MRCAgICAgMTA3CisKKyNkZWZpbmUgU1FSX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNjkKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMTYKKyNkZWZpbmUgU1FSX1RPT000X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzMzYKKyNkZWZpbmUgU1FSX1RPT002X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzMzYKKyNkZWZpbmUgU1FSX1RPT004X1RIUkVTSE9MRCAgICAgICAgICAgICAgICA0NTQKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxNworI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAyMworCisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgMjQ4ICAvKiBrID0gNSAqLworI2RlZmluZSBNVUxfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgMjQ4LCA1fSwgeyAgICAgIDksIDR9LCB7ICAgICAxOSwgNn0sIHsgICAgICA1LCA1fSwgXAorICAgIHsgICAgIDE1LCA2fSwgeyAgICAgIDgsIDV9LCB7ICAgICAxNywgNn0sIHsgICAgIDIxLCA3fSwgXAorICAgIHsgICAgIDE5LCA4fSwgeyAgICAgMTEsIDd9LCB7ICAgICAyNSwgOH0sIHsgICAgIDE1LCA3fSwgXAorICAgIHsgICAgIDMxLCA4fSwgeyAgICAgMjcsIDl9LCB7ICAgICAxNSwgOH0sIHsgICAgIDMzLCA5fSwgXAorICAgIHsgICAgIDE5LCA4fSwgeyAgICAgMzksIDl9LCB7ICAgICAyNywxMH0sIHsgICAgIDE1LCA5fSwgXAorICAgIHsgICAgIDM5LDEwfSwgeyAgICAgMjMsIDl9LCB7ICAgICA0NywxMX0sIHsgICAgIDE1LDEwfSwgXAorICAgIHsgICAgIDMxLCA5fSwgeyAgICAgNjcsMTB9LCB7ICAgICAzOSwgOX0sIHsgICAgIDc5LDEwfSwgXAorICAgIHsgICAgIDQ3LDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA2MywgOX0sIHsgICAgMTI3LCA4fSwgXAorICAgIHsgICAgMjU1LDEwfSwgeyAgICAgNzEsIDl9LCB7ICAgIDE0MywgOH0sIHsgICAgMjg3LDEwfSwgXAorICAgIHsgICAgIDc5LDExfSwgeyAgICAgNDcsMTJ9LCB7ICAgNDA5NiwxM30sIHsgICA4MTkyLDE0fSwgXAorICAgIHsgIDE2Mzg0LDE1fSwgeyAgMzI3NjgsMTZ9LCB7ICA2NTUzNiwxN30sIHsgMTMxMDcyLDE4fSwgXAorICAgIHsgMjYyMTQ0LDE5fSwgeyA1MjQyODgsMjB9LCB7MTA0ODU3NiwyMX0sIHsyMDk3MTUyLDIyfSwgXAorICAgIHs0MTk0MzA0LDIzfSwgezgzODg2MDgsMjR9IH0KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTNfU0laRSA1MAorI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTk4NAorCisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgMjM2ICAvKiBrID0gNSAqLworI2RlZmluZSBTUVJfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgMjM2LCA1fSwgeyAgICAgIDgsIDR9LCB7ICAgICAxNywgNX0sIHsgICAgIDE5LCA2fSwgXAorICAgIHsgICAgIDEwLCA1fSwgeyAgICAgMjEsIDZ9LCB7ICAgICAxOSwgN30sIHsgICAgIDEwLCA2fSwgXAorICAgIHsgICAgIDIxLCA3fSwgeyAgICAgMjEsIDh9LCB7ICAgICAyMSwgOX0sIHsgICAgIDExLCA4fSwgXAorICAgIHsgICAgIDIzLCA5fSwgeyAgICAgMTksIDh9LCB7ICAgICA0MywgOX0sIHsgICAgIDIzLDEwfSwgXAorICAgIHsgICAgIDE1LCA5fSwgeyAgICAgNDMsMTB9LCB7ICAgICAyMywxMX0sIHsgICAgIDE1LDEwfSwgXAorICAgIHsgICAgIDMxLCA5fSwgeyAgICAgNjMsMTB9LCB7ICAgICA0NywgOH0sIHsgICAgMTkxLDExfSwgXAorICAgIHsgICAgIDMxLDEwfSwgeyAgICAgNjMsIDh9LCB7ICAgIDI1NSwgN30sIHsgICAgNTExLCA5fSwgXAorICAgIHsgICAgMTM1LCA4fSwgeyAgICAyNzEsMTB9LCB7ICAgICA3MSwgOX0sIHsgICAgMTQzLCA4fSwgXAorICAgIHsgICAgMjg3LCA3fSwgeyAgICA1NzUsMTF9LCB7ICAgICA0NywgOX0sIHsgICAgMTkxLCA4fSwgXAorICAgIHsgICAgMzgzLDEyfSwgeyAgIDQwOTYsMTN9LCB7ICAgODE5MiwxNH0sIHsgIDE2Mzg0LDE1fSwgXAorICAgIHsgIDMyNzY4LDE2fSwgeyAgNjU1MzYsMTd9LCB7IDEzMTA3MiwxOH0sIHsgMjYyMTQ0LDE5fSwgXAorICAgIHsgNTI0Mjg4LDIwfSwgezEwNDg1NzYsMjF9LCB7MjA5NzE1MiwyMn0sIHs0MTk0MzA0LDIzfSwgXAorICAgIHs4Mzg4NjA4LDI0fSB9CisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzX1NJWkUgNDkKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDExMjAKKworI2RlZmluZSBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAxNgorI2RlZmluZSBNVUxMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICA0MQorI2RlZmluZSBNVUxMT19NVUxfTl9USFJFU0hPTEQgICAgICAgICAgICAgMzc5MQorCisjZGVmaW5lIERDX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lIERDX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAgMTAwCisjZGVmaW5lIERDX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDQ3CisjZGVmaW5lIERDX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTc0CisKKyNkZWZpbmUgSU5WX01VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgNTgKKyNkZWZpbmUgSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgSU5WX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDkKKworI2RlZmluZSBCSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgIDE4NworI2RlZmluZSBSRURDXzFfVE9fUkVEQ18yX1RIUkVTSE9MRCAgICAgICAgICAxMAorI2RlZmluZSBSRURDXzJfVE9fUkVEQ19OX1RIUkVTSE9MRCAgICAgICAgIDExNQorCisjZGVmaW5lIE1VX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNjgwCisjZGVmaW5lIE1VX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAgNjE4CisjZGVmaW5lIE1VUElfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTVVfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICA3NDgKKyNkZWZpbmUgTVVfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA4ODkKKworI2RlZmluZSBNQVRSSVgyMl9TVFJBU1NFTl9USFJFU0hPTEQgICAgICAgICAxMworI2RlZmluZSBIR0NEX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgICA1MworI2RlZmluZSBHQ0RfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDI4MworI2RlZmluZSBHQ0RFWFRfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE4NgorI2RlZmluZSBKQUNPQklfQkFTRV9NRVRIT0QgICAgICAgICAgICAgICAgICAgMgorCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgIDE2CisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgMzkwCisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAxNjY1CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvbHNoaWZ0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC9sc2hpZnQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwYmJiNDUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvbHNoaWZ0LmFzbQpAQCAtMCwwICsxLDE0MCBAQAorZG5sICBTUEFSQyB2OSBtcG5fbHNoaWZ0CisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IERhdmlkIE1pbGxlci4KKworZG5sICBDb3B5cmlnaHQgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCQkgICAgY3ljbGVzL2xpbWIKK0MgVWx0cmFTUEFSQyAxJjI6CSAyCitDIFVsdHJhU1BBUkMgMzoJCSAyLjUKK0MgVWx0cmFTUEFSQyBUMToJMTcuNQorQyBVbHRyYVNQQVJDIFQzOgkgOAorQyBVbHRyYVNQQVJDIFQ0OgkgMworCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLCAgICAgYCVpMCcpCitkZWZpbmUoYHVwJywgICAgIGAlaTEnKQorZGVmaW5lKGBuJywgICAgICBgJWkyJykKK2RlZmluZShgY250JywgICAgYCVpMycpCisKK2RlZmluZShgdGNudCcsICAgYCVpNCcpCitkZWZpbmUoYHJldHZhbCcsIGAlaTUnKQorZGVmaW5lKGB1MCcsICAgICBgJWwwJykKK2RlZmluZShgdTEnLCAgICAgYCVsMScpCitkZWZpbmUoYHIwJywgICAgIGAlbDYnKQorZGVmaW5lKGByMScsICAgICBgJWw3JykKK2RlZmluZShgdTBfb2ZmJywgYCVvMCcpCitkZWZpbmUoYHUxX29mZicsIGAlbzEnKQorZGVmaW5lKGByMF9vZmYnLCBgJW8yJykKK2RlZmluZShgcjFfb2ZmJywgYCVvMycpCisKK0FTTV9TVEFSVCgpCisJUkVHSVNURVIoJWcyLCNzY3JhdGNoKQorCVJFR0lTVEVSKCVnMywjc2NyYXRjaCkKK1BST0xPR1VFKG1wbl9sc2hpZnQpCisJc2F2ZQklc3AsIC0xNzYsICVzcAorCisJc2xseAluLCAzLCBuCisJc3ViCSVnMCwgY250LCB0Y250CisKKwlzdWIJdXAsIDgsIHUxX29mZgorCWFkZAlycCwgKDUgKiA4KSwgcjFfb2ZmCisKKwlsZHgJW24gKyB1MV9vZmZdLCB1MQlDIFdBUzogdXAgLSA4CisJYWRkCXUxX29mZiwgKDMgKiA4KSwgdTFfb2ZmCisKKwlzdWIJcjFfb2ZmLCA4LCByMF9vZmYKKwlzdWIJdTFfb2ZmLCA4LCB1MF9vZmYKKworCXN1YmNjCW4sICgzICogOCksIG4KKwlzcmx4CXUxLCB0Y250LCByZXR2YWwKKworCWJsLHBuCSV4Y2MsIEwoZW5kMTIpCisJIHNsbHgJdTEsIGNudCwgJWwzCisKKwlsZHgJW24gKyB1MF9vZmZdLCB1MAlDIFdBUzogdXAgLSAxNgorCXN1YmNjCW4sICgyICogOCksIG4KKworCWxkeAlbbiArIHUxX29mZl0sIHUxCUMgV0FTOiB1cCAtIDI0CisKKwlibCxwbgkleGNjLCBMKGVuZDM0KQorCSBzcmx4CXUwLCB0Y250LCAlbDQKKworCWIsYQlMKHRvcCkKKwlBTElHTigxNikKK0wodG9wKToKKwlzbGx4CXUwLCBjbnQsICVsMgorCW9yCSVsNCwgJWwzLCByMAorCisJbGR4CVtuICsgdTBfb2ZmXSwgdTAJQyBXQVM6IHVwIC0gMTYKKwlzcmx4CXUxLCB0Y250LCAlbDUKKworCXN0eAlyMCwgW24gKyByMF9vZmZdCUMgV0FTOiBycCAtIDgKKwlzdWJjYwluLCAoMiAqIDgpLCBuCisKKwlzbGx4CXUxLCBjbnQsICVsMworCW9yCSVsMiwgJWw1LCByMQorCisJbGR4CVtuICsgdTFfb2ZmXSwgdTEJQyBXQVM6IHVwIC0gMjQKKwlzcmx4CXUwLCB0Y250LCAlbDQKKworCWJnZSxwdAkleGNjLCBMKHRvcCkKKwkgc3R4CXIxLCBbbiArIHIxX29mZl0JQyBXQVM6IHJwIC0gMTYKKworTChlbmQzNCk6CisJc2xseAl1MCwgY250LCAlbDIKKwlvcgklbDQsICVsMywgcjAKKworCXNybHgJdTEsIHRjbnQsICVsNQorCXN0eAlyMCwgW24gKyByMF9vZmZdCUMgV0FTOiBycCAtIDgKKworCW9yCSVsMiwgJWw1LCByMQorCXN1YgluLCAoMiAqIDgpLCAlbzUKKworCXNsbHgJdTEsIGNudCwgJWwzCisJc3R4CXIxLCBbJW81ICsgcjFfb2ZmXQlDIFdBUzogcnAgLSAxNgorCitMKGVuZDEyKToKKwlhbmRjYwluLCA4LCAlZzAKKwlieixwbgkleGNjLCBMKGRvbmUpCisJIG5vcAorCisJbGR4CVtuICsgdTBfb2ZmXSwgdTEKKwlzcmx4CXUxLCB0Y250LCAlbDQKKwlvcgklbDQsICVsMywgcjAKKwlzdHgJcjAsIFtyMF9vZmYgLSAyNF0KKwlzbGx4CXUxLCBjbnQsICVsMworTChkb25lKToKKwlzdHgJJWwzLCBbcjBfb2ZmIC0gMzJdCisKKwlyZXQKKwlyZXN0b3JlIHJldHZhbCwgMCwgJW8wCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvbHNoaWZ0Yy5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvbHNoaWZ0Yy5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEwZjBhMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC9sc2hpZnRjLmFzbQpAQCAtMCwwICsxLDE0NyBAQAorZG5sICBTUEFSQyB2OSBtcG5fbHNoaWZ0YworCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBEYXZpZCBNaWxsZXIuCisKK2RubCAgQ29weXJpZ2h0IDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkJICAgIGN5Y2xlcy9saW1iCitDIFVsdHJhU1BBUkMgMSYyOgkgMworQyBVbHRyYVNQQVJDIDM6CQkgMworQyBVbHRyYVNQQVJDIFQxOgkxNworQyBVbHRyYVNQQVJDIFQzOgkxMAorQyBVbHRyYVNQQVJDIFQ0OgkgMy41CisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsICAgICBgJWkwJykKK2RlZmluZShgdXAnLCAgICAgYCVpMScpCitkZWZpbmUoYG4nLCAgICAgIGAlaTInKQorZGVmaW5lKGBjbnQnLCAgICBgJWkzJykKKworZGVmaW5lKGB0Y250JywgICBgJWk0JykKK2RlZmluZShgcmV0dmFsJywgYCVpNScpCitkZWZpbmUoYHUwJywgICAgIGAlbDAnKQorZGVmaW5lKGB1MScsICAgICBgJWwxJykKK2RlZmluZShgcjAnLCAgICAgYCVsNicpCitkZWZpbmUoYHIxJywgICAgIGAlbDcnKQorZGVmaW5lKGB1MF9vZmYnLCBgJW8wJykKK2RlZmluZShgdTFfb2ZmJywgYCVvMScpCitkZWZpbmUoYHIwX29mZicsIGAlbzInKQorZGVmaW5lKGByMV9vZmYnLCBgJW8zJykKKworQVNNX1NUQVJUKCkKKwlSRUdJU1RFUiglZzIsI3NjcmF0Y2gpCisJUkVHSVNURVIoJWczLCNzY3JhdGNoKQorUFJPTE9HVUUobXBuX2xzaGlmdGMpCisJc2F2ZQklc3AsIC0xNzYsICVzcAorCisJc2xseAluLCAzLCBuCisJc3ViCSVnMCwgY250LCB0Y250CisKKwlzdWIJdXAsIDgsIHUxX29mZgorCWFkZAlycCwgKDUgKiA4KSwgcjFfb2ZmCisKKwlsZHgJW24gKyB1MV9vZmZdLCB1MQlDIFdBUzogdXAgLSA4CisJYWRkCXUxX29mZiwgKDMgKiA4KSwgdTFfb2ZmCisKKwlzdWIJcjFfb2ZmLCA4LCByMF9vZmYKKwlzdWIJdTFfb2ZmLCA4LCB1MF9vZmYKKworCXN1YmNjCW4sICgzICogOCksIG4KKwlzcmx4CXUxLCB0Y250LCByZXR2YWwKKworCWJsLHBuCSV4Y2MsIEwoZW5kMTIpCisJIHNsbHgJdTEsIGNudCwgJWwzCisKKwlsZHgJW24gKyB1MF9vZmZdLCB1MAlDIFdBUzogdXAgLSAxNgorCXN1YmNjCW4sICgyICogOCksIG4KKworCWxkeAlbbiArIHUxX29mZl0sIHUxCUMgV0FTOiB1cCAtIDI0CisKKwlibCxwbgkleGNjLCBMKGVuZDM0KQorCSBzcmx4CXUwLCB0Y250LCAlbDQKKworCWIsYQlMKHRvcCkKKwlBTElHTigxNikKK0wodG9wKToKKwlub3QJJWwzLCAlbDMKKwlzbGx4CXUwLCBjbnQsICVsMgorCisJYW5kbgklbDMsICVsNCwgcjAKKwlsZHgJW24gKyB1MF9vZmZdLCB1MAlDIFdBUzogdXAgLSAxNgorCisJc3JseAl1MSwgdGNudCwgJWw1CisJc3R4CXIwLCBbbiArIHIwX29mZl0JQyBXQVM6IHJwIC0gOAorCisJc3ViY2MJbiwgKDIgKiA4KSwgbgorCW5vdAklbDIsICVsMgorCisJc2xseAl1MSwgY250LCAlbDMKKwlhbmRuCSVsMiwgJWw1LCByMQorCisJbGR4CVtuICsgdTFfb2ZmXSwgdTEJQyBXQVM6IHVwIC0gMjQKKwlzcmx4CXUwLCB0Y250LCAlbDQKKworCWJnZSxwdAkleGNjLCBMKHRvcCkKKwkgc3R4CXIxLCBbbiArIHIxX29mZl0JQyBXQVM6IHJwIC0gMTYKKworTChlbmQzNCk6CisJbm90CSVsMywgJWwzCisJc2xseAl1MCwgY250LCAlbDIKKworCWFuZG4JJWwzLCAlbDQsIHIwCisJc3JseAl1MSwgdGNudCwgJWw1CisKKwlzdHgJcjAsIFtuICsgcjBfb2ZmXQlDIFdBUzogcnAgLSA4CisJbm90CSVsMiwgJWwyCisKKwlhbmRuCSVsMiwgJWw1LCByMQorCXN1YgluLCAoMiAqIDgpLCAlbzUKKworCXNsbHgJdTEsIGNudCwgJWwzCisJc3R4CXIxLCBbJW81ICsgcjFfb2ZmXQlDIFdBUzogcnAgLSAxNgorCitMKGVuZDEyKToKKwlhbmRjYwluLCA4LCAlZzAKKwliegkleGNjLCBMKGRvbmUpKzQKKwkgbm90CSVsMywgJWwzCisKKwlsZHgJW24gKyB1MF9vZmZdLCB1MQorCXNybHgJdTEsIHRjbnQsICVsNAorCWFuZG4JJWwzLCAlbDQsIHIwCisJc3R4CXIwLCBbcjBfb2ZmIC0gMjRdCisJc2xseAl1MSwgY250LCAlbDMKK0woZG9uZSk6CisJbm90CSVsMywgJWwzCisJc3R4CSVsMywgW3IwX29mZiAtIDMyXQorCisJcmV0CisJcmVzdG9yZSByZXR2YWwsIDAsICVvMAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L21vZF8xLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvbW9kXzEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjUzZjlkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L21vZF8xLmMKQEAgLTAsMCArMSwyMzggQEAKKy8qIFVsdHJhU1BBUkMgNjQgbXBuX21vZF8xIC0tIG1wbiBieSBsaW1iIHJlbWFpbmRlci4KKworQ29weXJpZ2h0IDE5OTEsIDE5OTMsIDE5OTQsIDE5OTktMjAwMSwgMjAwMywgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorI2luY2x1ZGUgImxvbmdsb25nLmgiCisKKyNpbmNsdWRlICJtcG4vc3BhcmM2NC9zcGFyYzY0LmgiCisKKworLyogICAgICAgICAgICAgICAgIDY0LWJpdCBkaXZpc29yICAgMzItYml0IGRpdmlzb3IKKyAgICAgICAgICAgICAgICAgICAgY3ljbGVzL2xpbWIgICAgICBjeWNsZXMvbGltYgorICAgICAgICAgICAgICAgICAgICAgKGFwcHJveCkgICAgICAgICAoYXBwcm94KQorICAgVWx0cmFzcGFyYyAyaTogICAgICAxNjAgICAgICAgICAgICAgICAxMjAKKyovCisKKworLyogMzItYml0IGRpdmlzb3JzIGFyZSB0cmVhdGVkIGluIHNwZWNpYWwgY2FzZSBjb2RlLiAgVGhpcyByZXF1aXJlcyA0IG11bHgKKyAgIHBlciBsaW1iIGluc3RlYWQgb2YgOCBpbiB0aGUgZ2VuZXJhbCBjYXNlLgorCisgICBGb3IgYmlnIGVuZGlhbiBzeXN0ZW1zIHdlIG5lZWQgSEFMRl9FTkRJQU5fQURKIGluY2x1ZGVkIGluIHRoZSBzcmNbaV0KKyAgIGFkZHJlc3NpbmcsIHRvIGdldCB0aGUgdHdvIGhhbHZlcyBvZiBlYWNoIGxpbWIgcmVhZCBpbiB0aGUgY29ycmVjdCBvcmRlci4KKyAgIFRoaXMgaXMga2VwdCBpbiBhbiBhZGogdmFyaWFibGUuICBEb2luZyB0aGF0IG1lYXN1cmVzIGFib3V0IDYgYy9sIGZhc3RlcgorICAgdGhhbiBqdXN0IHdyaXRpbmcgSEFMRl9FTkRJQU5fQURKKGkpIGluIHRoZSBsb29wLiAgVGhlIGxhdHRlciBzaG91bGRuJ3QKKyAgIGJlIDYgY3ljbGVzIHdvcnRoIG9mIHdvcmssIGJ1dCBwZXJoYXBzIGl0IGRvZXNuJ3Qgc2NoZWR1bGUgd2VsbCAob24gZ2NjCisgICAzLjIuMSBhdCBsZWFzdCkuCisKKyAgIEEgc2ltcGxlIHVkaXZ4L3VtdWx4IGxvb3AgZm9yIHRoZSAzMi1iaXQgY2FzZSB3YXMgYXR0ZW1wdGVkIGZvciBzbWFsbAorICAgc2l6ZXMsIGJ1dCBhdCBzaXplPT0yIGl0IHdhcyBvbmx5IGFib3V0IHRoZSBzYW1lIHNwZWVkIGFuZCBhdCBzaXplPT0zIHdhcworICAgc2xvd2VyLiAgKi8KKworc3RhdGljIG1wX2xpbWJfdAorbXBuX21vZF8xX2FueW5vcm0gKG1wX3NyY3B0ciBzcmNfbGltYnB0ciwgbXBfc2l6ZV90IHNpemVfbGltYnMsIG1wX2xpbWJfdCBkX2xpbWIpCit7CisgIGludCAgICAgICAgbm9ybSwgbm9ybV9yc2hpZnQ7CisgIG1wX2xpbWJfdCAgc3JjX2hpZ2hfbGltYjsKKyAgbXBfc2l6ZV90ICBpOworCisgIEFTU0VSVCAoc2l6ZV9saW1icyA+PSAwKTsKKyAgQVNTRVJUIChkX2xpbWIgIT0gMCk7CisKKyAgaWYgKFVOTElLRUxZIChzaXplX2xpbWJzID09IDApKQorICAgIHJldHVybiAwOworCisgIHNyY19oaWdoX2xpbWIgPSBzcmNfbGltYnB0cltzaXplX2xpbWJzLTFdOworCisgIC8qIHVkaXZ4IGlzIGdvb2QgZm9yIHNpemU9PTEsIGFuZCBubyBuZWVkIHRvIGJvdGhlciBjaGVja2luZyBsaW1iPGRpdmlzb3IsCisgICAgIHNpbmNlIGlmIHRoYXQncyBsaWtlbHkgdGhlIGNhbGxlciBzaG91bGQgY2hlY2sgKi8KKyAgaWYgKFVOTElLRUxZIChzaXplX2xpbWJzID09IDEpKQorICAgIHJldHVybiBzcmNfaGlnaF9saW1iICUgZF9saW1iOworCisgIGlmIChkX2xpbWIgPD0gQ05TVF9MSU1CKDB4RkZGRkZGRkYpKQorICAgIHsKKyAgICAgIHVuc2lnbmVkICAgKnNyYywgbjEsIG4wLCByLCBkdW1teV9xLCBuc2hpZnQsIG5vcm1fcm1hc2s7CisgICAgICBtcF9zaXplX3QgIHNpemUsIGFkajsKKyAgICAgIG1wX2xpbWJfdCAgZGludl9saW1iOworCisgICAgICBzaXplID0gMiAqIHNpemVfbGltYnM7ICAgIC8qIGhhbGZ3b3JkcyAqLworICAgICAgc3JjID0gKHVuc2lnbmVkICopIHNyY19saW1icHRyOworCisgICAgICAvKiBwcm9zcGVjdGl2ZSBpbml0aWFsIHJlbWFpbmRlciwgaWYgPCBkICovCisgICAgICByID0gc3JjX2hpZ2hfbGltYiA+PiAzMjsKKworICAgICAgLyogSWYgdGhlIGxlbmd0aCBvZiB0aGUgc291cmNlIGlzIHVuaWZvcm1seSBkaXN0cmlidXRlZCwgdGhlbiB0aGVyZSdzCisgICAgICAgICBhIDUwJSBjaGFuY2Ugb2YgdGhlIGhpZ2ggMzItYml0cyBiZWluZyB6ZXJvLCB3aGljaCB3ZSBjYW4gc2tpcC4gICovCisgICAgICBpZiAociA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgciA9ICh1bnNpZ25lZCkgc3JjX2hpZ2hfbGltYjsKKyAgICAgICAgICBzaXplLS07CisgICAgICAgICAgQVNTRVJUIChzaXplID4gMCk7ICAvKiBiZWNhdXNlIGFsd2F5cyBldmVuICovCisgICAgICAgIH0KKworICAgICAgLyogU2tpcCBhIGRpdmlzaW9uIGlmIGhpZ2ggPCBkaXZpc29yLiAgSGF2aW5nIHRoZSB0ZXN0IGhlcmUgYmVmb3JlCisgICAgICAgICBub3JtYWxpemluZyB3aWxsIHN0aWxsIHNraXAgYXMgb2Z0ZW4gYXMgcG9zc2libGUuICAqLworICAgICAgaWYgKHIgPCBkX2xpbWIpCisgICAgICAgIHsKKyAgICAgICAgICBzaXplLS07CisgICAgICAgICAgQVNTRVJUIChzaXplID4gMCk7ICAvKiBiZWNhdXNlIHNpemU9PTEgaGFuZGxlZCBhYm92ZSAqLworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHIgPSAwOworCisgICAgICBjb3VudF9sZWFkaW5nX3plcm9zXzMyIChub3JtLCBkX2xpbWIpOworICAgICAgbm9ybSAtPSAzMjsKKyAgICAgIGRfbGltYiA8PD0gbm9ybTsKKworICAgICAgbm9ybV9yc2hpZnQgPSAzMiAtIG5vcm07CisgICAgICBub3JtX3JtYXNrID0gKG5vcm0gPT0gMCA/IDAgOiAweEZGRkZGRkZGKTsKKyAgICAgIGkgPSBzaXplLTE7CisgICAgICBhZGogPSBIQUxGX0VORElBTl9BREogKGkpOworICAgICAgbjEgPSBzcmMgW2kgKyBhZGpdOworICAgICAgciA9IChyIDw8IG5vcm0pIHwgKChuMSA+PiBub3JtX3JzaGlmdCkgJiBub3JtX3JtYXNrKTsKKworICAgICAgaW52ZXJ0X2hhbGZfbGltYiAoZGludl9saW1iLCBkX2xpbWIpOworICAgICAgYWRqID0gLWFkajsKKworICAgICAgZm9yIChpLS07IGkgPj0gMDsgaS0tKQorICAgICAgICB7CisgICAgICAgICAgbjAgPSBzcmMgW2kgKyBhZGpdOworICAgICAgICAgIGFkaiA9IC1hZGo7CisgICAgICAgICAgbnNoaWZ0ID0gKG4xIDw8IG5vcm0pIHwgKChuMCA+PiBub3JtX3JzaGlmdCkgJiBub3JtX3JtYXNrKTsKKyAgICAgICAgICB1ZGl2X3Fybm5kX2hhbGZfcHJlaW52IChkdW1teV9xLCByLCByLCBuc2hpZnQsIGRfbGltYiwgZGludl9saW1iKTsKKyAgICAgICAgICBuMSA9IG4wOworICAgICAgICB9CisKKyAgICAgIC8qIHNhbWUgYXMgbG9vcCwgYnV0IHdpdGhvdXQgbjAgKi8KKyAgICAgIG5zaGlmdCA9IG4xIDw8IG5vcm07CisgICAgICB1ZGl2X3Fybm5kX2hhbGZfcHJlaW52IChkdW1teV9xLCByLCByLCBuc2hpZnQsIGRfbGltYiwgZGludl9saW1iKTsKKworICAgICAgQVNTRVJUICgociAmICgoMSA8PCBub3JtKSAtIDEpKSA9PSAwKTsKKyAgICAgIHJldHVybiByID4+IG5vcm07CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgbXBfc3JjcHRyICBzcmM7CisgICAgICBtcF9zaXplX3QgIHNpemU7CisgICAgICBtcF9saW1iX3QgIG4xLCBuMCwgciwgZGludiwgZHVtbXlfcSwgbnNoaWZ0LCBub3JtX3JtYXNrOworCisgICAgICBzcmMgPSBzcmNfbGltYnB0cjsKKyAgICAgIHNpemUgPSBzaXplX2xpbWJzOworICAgICAgciA9IHNyY19oaWdoX2xpbWI7ICAvKiBpbml0aWFsIHJlbWFpbmRlciAqLworCisgICAgICAvKiBTa2lwIGEgZGl2aXNpb24gaWYgaGlnaCA8IGRpdmlzb3IuICBIYXZpbmcgdGhlIHRlc3QgaGVyZSBiZWZvcmUKKyAgICAgICAgIG5vcm1hbGl6aW5nIHdpbGwgc3RpbGwgc2tpcCBhcyBvZnRlbiBhcyBwb3NzaWJsZS4gICovCisgICAgICBpZiAociA8IGRfbGltYikKKyAgICAgICAgeworICAgICAgICAgIHNpemUtLTsKKyAgICAgICAgICBBU1NFUlQgKHNpemUgPiAwKTsgIC8qIGJlY2F1c2Ugc2l6ZT09MSBoYW5kbGVkIGFib3ZlICovCisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgciA9IDA7CisKKyAgICAgIGNvdW50X2xlYWRpbmdfemVyb3MgKG5vcm0sIGRfbGltYik7CisgICAgICBkX2xpbWIgPDw9IG5vcm07CisKKyAgICAgIG5vcm1fcnNoaWZ0ID0gR01QX0xJTUJfQklUUyAtIG5vcm07CisgICAgICBub3JtX3JtYXNrID0gKG5vcm0gPT0gMCA/IDAgOiAweEZGRkZGRkZGKTsKKworICAgICAgc3JjICs9IHNpemU7CisgICAgICBuMSA9ICotLXNyYzsKKyAgICAgIHIgPSAociA8PCBub3JtKSB8ICgobjEgPj4gbm9ybV9yc2hpZnQpICYgbm9ybV9ybWFzayk7CisKKyAgICAgIGludmVydF9saW1iIChkaW52LCBkX2xpbWIpOworCisgICAgICBmb3IgKGkgPSBzaXplLTI7IGkgPj0gMDsgaS0tKQorICAgICAgICB7CisgICAgICAgICAgbjAgPSAqLS1zcmM7CisgICAgICAgICAgbnNoaWZ0ID0gKG4xIDw8IG5vcm0pIHwgKChuMCA+PiBub3JtX3JzaGlmdCkgJiBub3JtX3JtYXNrKTsKKyAgICAgICAgICB1ZGl2X3Fybm5kX3ByZWludiAoZHVtbXlfcSwgciwgciwgbnNoaWZ0LCBkX2xpbWIsIGRpbnYpOworICAgICAgICAgIG4xID0gbjA7CisgICAgICAgIH0KKworICAgICAgLyogc2FtZSBhcyBsb29wLCBidXQgd2l0aG91dCBuMCAqLworICAgICAgbnNoaWZ0ID0gbjEgPDwgbm9ybTsKKyAgICAgIHVkaXZfcXJubmRfcHJlaW52IChkdW1teV9xLCByLCByLCBuc2hpZnQsIGRfbGltYiwgZGludik7CisKKyAgICAgIEFTU0VSVCAoKHIgJiAoKENOU1RfTElNQigxKSA8PCBub3JtKSAtIDEpKSA9PSAwKTsKKyAgICAgIHJldHVybiByID4+IG5vcm07CisgICAgfQorfQorCittcF9saW1iX3QKK21wbl9tb2RfMSAobXBfc3JjcHRyIGFwLCBtcF9zaXplX3QgbiwgbXBfbGltYl90IGIpCit7CisgIEFTU0VSVCAobiA+PSAwKTsKKyAgQVNTRVJUIChiICE9IDApOworCisgIC8qIFNob3VsZCB0aGlzIGJlIGhhbmRsZWQgYXQgYWxsPyAgUmVseSBvbiBjYWxsZXJzPyAgTm90ZSB1bj09MCBpcyBjdXJyZW50bHkKKyAgICAgcmVxdWlyZWQgYnkgbXB6L2ZkaXZfcl91aS5jIGFuZCBwb3NzaWJseSBvdGhlciBwbGFjZXMuICAqLworICBpZiAobiA9PSAwKQorICAgIHJldHVybiAwOworCisgIGlmIChVTkxJS0VMWSAoKGIgJiBHTVBfTlVNQl9ISUdIQklUKSAhPSAwKSkKKyAgICB7CisgICAgICBpZiAoQkVMT1dfVEhSRVNIT0xEIChuLCBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQpKQorCXsKKwkgIHJldHVybiBtcG5fbW9kXzFfYW55bm9ybSAoYXAsIG4sIGIpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBtcF9saW1iX3QgcHJlWzRdOworCSAgbXBuX21vZF8xXzFwX2NwcyAocHJlLCBiKTsKKwkgIHJldHVybiBtcG5fbW9kXzFfMXAgKGFwLCBuLCBiLCBwcmUpOworCX0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAoQkVMT1dfVEhSRVNIT0xEIChuLCBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQpKQorCXsKKwkgIHJldHVybiBtcG5fbW9kXzFfYW55bm9ybSAoYXAsIG4sIGIpOworCX0KKyAgICAgIGVsc2UgaWYgKEJFTE9XX1RIUkVTSE9MRCAobiwgTU9EXzFfMV9UT19NT0RfMV8yX1RIUkVTSE9MRCkpCisJeworCSAgbXBfbGltYl90IHByZVs0XTsKKwkgIG1wbl9tb2RfMV8xcF9jcHMgKHByZSwgYik7CisJICByZXR1cm4gbXBuX21vZF8xXzFwIChhcCwgbiwgYiA8PCBwcmVbMV0sIHByZSk7CisJfQorICAgICAgZWxzZSBpZiAoQkVMT1dfVEhSRVNIT0xEIChuLCBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEKSB8fCBVTkxJS0VMWSAoYiA+IEdNUF9OVU1CX01BU0sgLyA0KSkKKwl7CisJICBtcF9saW1iX3QgcHJlWzVdOworCSAgbXBuX21vZF8xc18ycF9jcHMgKHByZSwgYik7CisJICByZXR1cm4gbXBuX21vZF8xc18ycCAoYXAsIG4sIGIgPDwgcHJlWzFdLCBwcmUpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBtcF9saW1iX3QgcHJlWzddOworCSAgbXBuX21vZF8xc180cF9jcHMgKHByZSwgYik7CisJICByZXR1cm4gbXBuX21vZF8xc180cCAoYXAsIG4sIGIgPDwgcHJlWzFdLCBwcmUpOworCX0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvbW9kXzFfNC5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L21vZF8xXzQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzVhNDAyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L21vZF8xXzQuYwpAQCAtMCwwICsxLDIzNSBAQAorLyogbXBuX21vZF8xc180cCAoYXAsIG4sIGIsIGNwcykKKyAgIERpdmlkZSAoYXAsLG4pIGJ5IGIuICBSZXR1cm4gdGhlIHNpbmdsZS1saW1iIHJlbWFpbmRlci4KKyAgIFJlcXVpcmVzIHRoYXQgZCA8IEIgLyA0LgorCisgICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisgICBCYXNlZCBvbiBhIHN1Z2dlc3Rpb24gYnkgUGV0ZXIgTC4gTW9udGdvbWVyeS4KKworICAgVEhFIEZVTkNUSU9OUyBJTiBUSElTIEZJTEUgQVJFIElOVEVSTkFMIFdJVEggTVVUQUJMRSBJTlRFUkZBQ0VTLiAgSVQgSVMgT05MWQorICAgU0FGRSBUTyBSRUFDSCBUSEVNIFRIUk9VR0ggRE9DVU1FTlRFRCBJTlRFUkZBQ0VTLiAgSU4gRkFDVCwgSVQgSVMgQUxNT1NUCisgICBHVUFSQU5URUVEIFRIQVQgVEhFWSBXSUxMIENIQU5HRSBPUiBESVNBUFBFQVIgSU4gQSBGVVRVUkUgR05VIE1QIFJFTEVBU0UuCisKK0NvcHlyaWdodCAyMDA4LTIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorI2luY2x1ZGUgImxvbmdsb25nLmgiCisKKyNpbmNsdWRlICJtcG4vc3BhcmM2NC9zcGFyYzY0LmgiCisKK3ZvaWQKK21wbl9tb2RfMXNfNHBfY3BzIChtcF9saW1iX3QgY3BzWzddLCBtcF9saW1iX3QgYikKK3sKKyAgbXBfbGltYl90IGJpOworICBtcF9saW1iX3QgQjFtb2RiLCBCMm1vZGIsIEIzbW9kYiwgQjRtb2RiLCBCNW1vZGI7CisgIGludCBjbnQ7CisKKyAgQVNTRVJUIChiIDw9ICh+KG1wX2xpbWJfdCkgMCkgLyA0KTsKKworICBjb3VudF9sZWFkaW5nX3plcm9zIChjbnQsIGIpOworCisgIGIgPDw9IGNudDsKKyAgaW52ZXJ0X2xpbWIgKGJpLCBiKTsKKworICBjcHNbMF0gPSBiaTsKKyAgY3BzWzFdID0gY250OworCisgIEIxbW9kYiA9IC1iICogKChiaSA+PiAoR01QX0xJTUJfQklUUy1jbnQpKSB8IChDTlNUX0xJTUIoMSkgPDwgY250KSk7CisgIEFTU0VSVCAoQjFtb2RiIDw9IGIpOwkJLyogTkI6IG5vdCBmdWxseSByZWR1Y2VkIG1vZCBiICovCisgIGNwc1syXSA9IEIxbW9kYiA+PiBjbnQ7CisKKyAgdWRpdl9ybm5kX3ByZWludiAoQjJtb2RiLCBCMW1vZGIsIENOU1RfTElNQigwKSwgYiwgYmkpOworICBjcHNbM10gPSBCMm1vZGIgPj4gY250OworCisgIHVkaXZfcm5uZF9wcmVpbnYgKEIzbW9kYiwgQjJtb2RiLCBDTlNUX0xJTUIoMCksIGIsIGJpKTsKKyAgY3BzWzRdID0gQjNtb2RiID4+IGNudDsKKworICB1ZGl2X3JubmRfcHJlaW52IChCNG1vZGIsIEIzbW9kYiwgQ05TVF9MSU1CKDApLCBiLCBiaSk7CisgIGNwc1s1XSA9IEI0bW9kYiA+PiBjbnQ7CisKKyAgdWRpdl9ybm5kX3ByZWludiAoQjVtb2RiLCBCNG1vZGIsIENOU1RfTElNQigwKSwgYiwgYmkpOworICBjcHNbNl0gPSBCNW1vZGIgPj4gY250OworCisjaWYgV0FOVF9BU1NFUlQKKyAgeworICAgIGludCBpOworICAgIGIgPSBjcHNbMl07CisgICAgZm9yIChpID0gMzsgaSA8PSA2OyBpKyspCisgICAgICB7CisJYiArPSBjcHNbaV07CisJQVNTRVJUIChiID49IGNwc1tpXSk7CisgICAgICB9CisgIH0KKyNlbmRpZgorfQorCittcF9saW1iX3QKK21wbl9tb2RfMXNfNHAgKG1wX3NyY3B0ciBhcCwgbXBfc2l6ZV90IG4sIG1wX2xpbWJfdCBiLCBjb25zdCBtcF9saW1iX3QgY3BzWzddKQoreworICBtcF9saW1iX3QgcmgsIHJsLCBiaSwgcGgsIHBsLCBjaCwgY2wsIHI7CisgIG1wX2xpbWJfdCBCMW1vZGIsIEIybW9kYiwgQjNtb2RiLCBCNG1vZGIsIEI1bW9kYjsKKyAgbXBfc2l6ZV90IGk7CisgIGludCBjbnQ7CisKKyAgQVNTRVJUIChuID49IDEpOworCisgIEIxbW9kYiA9IGNwc1syXTsKKyAgQjJtb2RiID0gY3BzWzNdOworICBCM21vZGIgPSBjcHNbNF07CisgIEI0bW9kYiA9IGNwc1s1XTsKKyAgQjVtb2RiID0gY3BzWzZdOworCisgIGlmICgoYiA+PiAzMikgPT0gMCkKKyAgICB7CisgICAgICBzd2l0Y2ggKG4gJiAzKQorCXsKKwljYXNlIDA6CisJICB1bXVsX3BwbW1fcyAocGgsIHBsLCBhcFtuIC0gM10sIEIxbW9kYik7CisJICBhZGRfc3NhYWFhIChwaCwgcGwsIHBoLCBwbCwgQ05TVF9MSU1CKDApLCBhcFtuIC0gNF0pOworCSAgdW11bF9wcG1tX3MgKGNoLCBjbCwgYXBbbiAtIDJdLCBCMm1vZGIpOworCSAgYWRkX3NzYWFhYSAocGgsIHBsLCBwaCwgcGwsIGNoLCBjbCk7CisJICB1bXVsX3BwbW1fcyAocmgsIHJsLCBhcFtuIC0gMV0sIEIzbW9kYik7CisJICBhZGRfc3NhYWFhIChyaCwgcmwsIHJoLCBybCwgcGgsIHBsKTsKKwkgIG4gLT0gNDsKKwkgIGJyZWFrOworCWNhc2UgMToKKwkgIHJoID0gMDsKKwkgIHJsID0gYXBbbiAtIDFdOworCSAgbiAtPSAxOworCSAgYnJlYWs7CisJY2FzZSAyOgorCSAgcmggPSBhcFtuIC0gMV07CisJICBybCA9IGFwW24gLSAyXTsKKwkgIG4gLT0gMjsKKwkgIGJyZWFrOworCWNhc2UgMzoKKwkgIHVtdWxfcHBtbV9zIChwaCwgcGwsIGFwW24gLSAyXSwgQjFtb2RiKTsKKwkgIGFkZF9zc2FhYWEgKHBoLCBwbCwgcGgsIHBsLCBDTlNUX0xJTUIoMCksIGFwW24gLSAzXSk7CisJICB1bXVsX3BwbW1fcyAocmgsIHJsLCBhcFtuIC0gMV0sIEIybW9kYik7CisJICBhZGRfc3NhYWFhIChyaCwgcmwsIHJoLCBybCwgcGgsIHBsKTsKKwkgIG4gLT0gMzsKKwkgIGJyZWFrOworCX0KKworICAgICAgZm9yIChpID0gbiAtIDQ7IGkgPj0gMDsgaSAtPSA0KQorCXsKKwkgIC8qIHJyID0gYXBbaV0JCQkJPCBCCisJCSsgYXBbaSsxXSAqIChCIG1vZCBiKQkJPD0gKEItMSkoYi0xKQorCQkrIGFwW2krMl0gKiAoQl4yIG1vZCBiKQkJPD0gKEItMSkoYi0xKQorCQkrIGFwW2krM10gKiAoQl4zIG1vZCBiKQkJPD0gKEItMSkoYi0xKQorCQkrIExPKHJyKSAgKiAoQl40IG1vZCBiKQkJPD0gKEItMSkoYi0xKQorCQkrIEhJKHJyKSAgKiAoQl41IG1vZCBiKQkJPD0gKEItMSkoYi0xKQorCSAgKi8KKwkgIHVtdWxfcHBtbV9zIChwaCwgcGwsIGFwW2kgKyAxXSwgQjFtb2RiKTsKKwkgIGFkZF9zc2FhYWEgKHBoLCBwbCwgcGgsIHBsLCBDTlNUX0xJTUIoMCksIGFwW2kgKyAwXSk7CisKKwkgIHVtdWxfcHBtbV9zIChjaCwgY2wsIGFwW2kgKyAyXSwgQjJtb2RiKTsKKwkgIGFkZF9zc2FhYWEgKHBoLCBwbCwgcGgsIHBsLCBjaCwgY2wpOworCisJICB1bXVsX3BwbW1fcyAoY2gsIGNsLCBhcFtpICsgM10sIEIzbW9kYik7CisJICBhZGRfc3NhYWFhIChwaCwgcGwsIHBoLCBwbCwgY2gsIGNsKTsKKworCSAgdW11bF9wcG1tX3MgKGNoLCBjbCwgcmwsIEI0bW9kYik7CisJICBhZGRfc3NhYWFhIChwaCwgcGwsIHBoLCBwbCwgY2gsIGNsKTsKKworCSAgdW11bF9wcG1tX3MgKHJoLCBybCwgcmgsIEI1bW9kYik7CisJICBhZGRfc3NhYWFhIChyaCwgcmwsIHJoLCBybCwgcGgsIHBsKTsKKwl9CisKKyAgICAgIHVtdWxfcHBtbV9zIChyaCwgY2wsIHJoLCBCMW1vZGIpOworICAgICAgYWRkX3NzYWFhYSAocmgsIHJsLCByaCwgcmwsIENOU1RfTElNQigwKSwgY2wpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHN3aXRjaCAobiAmIDMpCisJeworCWNhc2UgMDoKKwkgIHVtdWxfcHBtbSAocGgsIHBsLCBhcFtuIC0gM10sIEIxbW9kYik7CisJICBhZGRfc3NhYWFhIChwaCwgcGwsIHBoLCBwbCwgMCwgYXBbbiAtIDRdKTsKKwkgIHVtdWxfcHBtbSAoY2gsIGNsLCBhcFtuIC0gMl0sIEIybW9kYik7CisJICBhZGRfc3NhYWFhIChwaCwgcGwsIHBoLCBwbCwgY2gsIGNsKTsKKwkgIHVtdWxfcHBtbSAocmgsIHJsLCBhcFtuIC0gMV0sIEIzbW9kYik7CisJICBhZGRfc3NhYWFhIChyaCwgcmwsIHJoLCBybCwgcGgsIHBsKTsKKwkgIG4gLT0gNDsKKwkgIGJyZWFrOworCWNhc2UgMToKKwkgIHJoID0gMDsKKwkgIHJsID0gYXBbbiAtIDFdOworCSAgbiAtPSAxOworCSAgYnJlYWs7CisJY2FzZSAyOgorCSAgcmggPSBhcFtuIC0gMV07CisJICBybCA9IGFwW24gLSAyXTsKKwkgIG4gLT0gMjsKKwkgIGJyZWFrOworCWNhc2UgMzoKKwkgIHVtdWxfcHBtbSAocGgsIHBsLCBhcFtuIC0gMl0sIEIxbW9kYik7CisJICBhZGRfc3NhYWFhIChwaCwgcGwsIHBoLCBwbCwgMCwgYXBbbiAtIDNdKTsKKwkgIHVtdWxfcHBtbSAocmgsIHJsLCBhcFtuIC0gMV0sIEIybW9kYik7CisJICBhZGRfc3NhYWFhIChyaCwgcmwsIHJoLCBybCwgcGgsIHBsKTsKKwkgIG4gLT0gMzsKKwkgIGJyZWFrOworCX0KKworICAgICAgZm9yIChpID0gbiAtIDQ7IGkgPj0gMDsgaSAtPSA0KQorCXsKKwkgIC8qIHJyID0gYXBbaV0JCQkJPCBCCisJCSsgYXBbaSsxXSAqIChCIG1vZCBiKQkJPD0gKEItMSkoYi0xKQorCQkrIGFwW2krMl0gKiAoQl4yIG1vZCBiKQkJPD0gKEItMSkoYi0xKQorCQkrIGFwW2krM10gKiAoQl4zIG1vZCBiKQkJPD0gKEItMSkoYi0xKQorCQkrIExPKHJyKSAgKiAoQl40IG1vZCBiKQkJPD0gKEItMSkoYi0xKQorCQkrIEhJKHJyKSAgKiAoQl41IG1vZCBiKQkJPD0gKEItMSkoYi0xKQorCSAgKi8KKwkgIHVtdWxfcHBtbSAocGgsIHBsLCBhcFtpICsgMV0sIEIxbW9kYik7CisJICBhZGRfc3NhYWFhIChwaCwgcGwsIHBoLCBwbCwgMCwgYXBbaSArIDBdKTsKKworCSAgdW11bF9wcG1tIChjaCwgY2wsIGFwW2kgKyAyXSwgQjJtb2RiKTsKKwkgIGFkZF9zc2FhYWEgKHBoLCBwbCwgcGgsIHBsLCBjaCwgY2wpOworCisJICB1bXVsX3BwbW0gKGNoLCBjbCwgYXBbaSArIDNdLCBCM21vZGIpOworCSAgYWRkX3NzYWFhYSAocGgsIHBsLCBwaCwgcGwsIGNoLCBjbCk7CisKKwkgIHVtdWxfcHBtbSAoY2gsIGNsLCBybCwgQjRtb2RiKTsKKwkgIGFkZF9zc2FhYWEgKHBoLCBwbCwgcGgsIHBsLCBjaCwgY2wpOworCisJICB1bXVsX3BwbW0gKHJoLCBybCwgcmgsIEI1bW9kYik7CisJICBhZGRfc3NhYWFhIChyaCwgcmwsIHJoLCBybCwgcGgsIHBsKTsKKwl9CisKKyAgICAgIHVtdWxfcHBtbSAocmgsIGNsLCByaCwgQjFtb2RiKTsKKyAgICAgIGFkZF9zc2FhYWEgKHJoLCBybCwgcmgsIHJsLCAwLCBjbCk7CisgICAgfQorCisgIGJpID0gY3BzWzBdOworICBjbnQgPSBjcHNbMV07CisKKyAgciA9IChyaCA8PCBjbnQpIHwgKHJsID4+IChHTVBfTElNQl9CSVRTIC0gY250KSk7CisgIHVkaXZfcm5uZF9wcmVpbnYgKHIsIHIsIHJsIDw8IGNudCwgYiwgYmkpOworCisgIHJldHVybiByID4+IGNudDsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC9tb2RlMW8uYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC9tb2RlMW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzFjOTk5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L21vZGUxby5jCkBAIC0wLDAgKzEsMTk2IEBACisvKiBVbHRyYVNQQVJDIDY0IG1wbl9tb2RleGFjdF8xY19vZGQgLS0gbXBuIGJ5IGxpbWIgZXhhY3Qgc3R5bGUgcmVtYWluZGVyLgorCisgICBUSEUgRlVOQ1RJT05TIElOIFRISVMgRklMRSBBUkUgRk9SIElOVEVSTkFMIFVTRSBPTkxZLiAgVEhFWSdSRSBBTE1PU1QKKyAgIENFUlRBSU4gVE8gQkUgU1VCSkVDVCBUTyBJTkNPTVBBVElCTEUgQ0hBTkdFUyBPUiBESVNBUFBFQVIgQ09NUExFVEVMWSBJTgorICAgRlVUVVJFIEdOVSBNUCBSRUxFQVNFUy4KKworQ29weXJpZ2h0IDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisjaW5jbHVkZSAibG9uZ2xvbmcuaCIKKworI2luY2x1ZGUgIm1wbi9zcGFyYzY0L3NwYXJjNjQuaCIKKworCisvKiAgICAgICAgICAgICAgICAgNjQtYml0IGRpdmlzb3IgICAzMi1iaXQgZGl2aXNvcgorICAgICAgICAgICAgICAgICAgICBjeWNsZXMvbGltYiAgICAgIGN5Y2xlcy9saW1iCisgICAgICAgICAgICAgICAgICAgICAoYXBwcm94KSAgICAgICAgIChhcHByb3gpCisgICBVbHRyYXNwYXJjIDJpOiAgICAgICA/ICAgICAgICAgICAgICAgID8KKyovCisKKworLyogVGhpcyBpbXBsZW1lbnRhdGlvbiByZWR1Y2VzIHRoZSBudW1iZXIgb2YgbXVsdGlwbGllcyBkb25lLCBrbm93aW5nIHRoYXQKKyAgIG9uIHVsdHJhc3BhcmMgMSBhbmQgMiB0aGUgbXVseCBpbnN0cnVjdGlvbiBzdGFsbHMgdGhlIHdob2xlIGNoaXAuCisKKyAgIFRoZSBrZXkgaWRlYSBpcyB0byB1c2UgdGhlIGZhY3QgdGhhdCB0aGUgbG93IGxpbWIgb2YgcSpkIGVxdWFscyBsLCB0aGlzCisgICBiZWluZyB0aGUgd2hvbGUgcHVycG9zZSBvZiB0aGUgcSBjYWxjdWxhdGVkLiAgSXQgbWVhbnMgdGhlcmUncyBubyBuZWVkIHRvCisgICBjYWxjdWxhdGUgdGhlIGxvd2VzdCAzMngzMi0+NjQgcGFydCBvZiB0aGUgcSpkLCBpbnN0ZWFkIGl0IGNhbiBiZQorICAgaW5mZXJyZWQgZnJvbSBsIGFuZCB0aGUgb3RoZXIgdGhyZWUgMzJ4MzItPjY0IHBhcnRzLiAgU2VlIHNwYXJjNjQuaCBmb3IKKyAgIGRldGFpbHMuCisKKyAgIFdoZW4gZCBpcyAzMi1iaXRzLCB0aGUgc2FtZSBhcHBsaWVzLCBidXQgaW4gdGhpcyBjYXNlIHRoZXJlJ3Mgb25seSBvbmUKKyAgIG90aGVyIDMyeDMyLT42NCBwYXJ0IChpZS4gSElHSChxKSpkKS4KKworICAgVGhlIG5ldCBlZmZlY3QgaXMgdGhhdCBmb3IgNjQtYml0IGRpdmlzb3IgZWFjaCBsaW1iIGlzIDQgbXVseCwgb3IgZm9yCisgICAzMi1iaXQgZGl2aXNvciBlYWNoIGlzIDIgbXVseC4KKworICAgRW5oYW5jZW1lbnRzOgorCisgICBObyBkb3VidCB0aGlzIGNvdWxkIGJlIGRvbmUgaW4gYXNzZW1ibGVyLCBpZiB0aGF0IGhlbHBlZCB0aGUgc2NoZWR1bGluZywKKyAgIG9yIHBlcmhhcHMgZ3VhcmFudGVlZCBnb29kIGNvZGUgaXJyZXNwZWN0aXZlIG9mIHRoZSBjb21waWxlci4KKworICAgQWx0ZXJuYXRpdmVzOgorCisgICBJdCBtaWdodCBiZSBwb3NzaWJseSB0byB1c2UgZmxvYXRpbmcgcG9pbnQuICBUaGUgbG9vcCBpcyBkb21pbmF0ZWQgYnkKKyAgIG11bHRpcGx5IGxhdGVuY3ksIHNvIG5vdCBzdXJlIGlmIGZsb2F0cyB3b3VsZCBpbXByb3ZlIHRoYXQuICBPbmUKKyAgIHBvc3NpYmlsaXR5IHdvdWxkIGJlIHRvIHRha2UgdHdvIGxpbWJzIGF0IGEgdGltZSwgd2l0aCBhIDEyOCBiaXQgaW52ZXJzZSwKKyAgIGlmIHRoZXJlJ3MgZW5vdWdoIHJlZ2lzdGVycywgd2hpY2ggY291bGQgZWZmZWN0aXZlbHkgdXNlIGZsb2F0IHRocm91Z2hwdXQKKyAgIHRvIHJlZHVjZSB0b3RhbCBsYXRlbmN5IGFjcm9zcyB0d28gbGltYnMuICAqLworCisjZGVmaW5lIEFTU0VSVF9SRVRWQUwocikgICAgICAgICAgICAgICAgXAorICBBU1NFUlQgKG9yaWdfYyA8IGQgPyByIDwgZCA6IHIgPD0gZCkKKworbXBfbGltYl90CittcG5fbW9kZXhhY3RfMWNfb2RkIChtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSwgbXBfbGltYl90IGQsIG1wX2xpbWJfdCBvcmlnX2MpCit7CisgIG1wX2xpbWJfdCAgYyA9IG9yaWdfYzsKKyAgbXBfbGltYl90ICBzLCBsLCBxLCBoLCBpbnZlcnNlOworCisgIEFTU0VSVCAoc2l6ZSA+PSAxKTsKKyAgQVNTRVJUIChkICYgMSk7CisgIEFTU0VSVF9NUE4gKHNyYywgc2l6ZSk7CisgIEFTU0VSVF9MSU1CIChkKTsKKyAgQVNTRVJUX0xJTUIgKGMpOworCisgIC8qIHVkaXZ4IGlzIGZhc3RlciB0aGFuIDEwIG9yIDEyIG11bHgncyBmb3Igb25lIGxpbWIgdmlhIGFuIGludmVyc2UgKi8KKyAgaWYgKHNpemUgPT0gMSkKKyAgICB7CisgICAgICBzID0gc3JjWzBdOworICAgICAgaWYgKHMgPiBjKQorCXsKKwkgIGwgPSBzLWM7CisJICBoID0gbCAlIGQ7CisJICBpZiAoaCAhPSAwKQorCSAgICBoID0gZCAtIGg7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGwgPSBjLXM7CisJICBoID0gbCAlIGQ7CisJfQorICAgICAgcmV0dXJuIGg7CisgICAgfQorCisgIGJpbnZlcnRfbGltYiAoaW52ZXJzZSwgZCk7CisKKyAgaWYgKGQgPD0gMHhGRkZGRkZGRikKKyAgICB7CisgICAgICBzID0gKnNyYysrOworICAgICAgc2l6ZS0tOworICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAgIFNVQkNfTElNQiAoYywgbCwgcywgYyk7CisgICAgICAgICAgcyA9ICpzcmMrKzsKKyAgICAgICAgICBxID0gbCAqIGludmVyc2U7CisgICAgICAgICAgdW11bF9wcG1tX2hhbGZfbG93ZXF1YWwgKGgsIHEsIGQsIGwpOworICAgICAgICAgIGMgKz0gaDsKKyAgICAgICAgICBzaXplLS07CisgICAgICAgIH0KKyAgICAgIHdoaWxlIChzaXplICE9IDApOworCisgICAgICBpZiAocyA8PSBkKQorICAgICAgICB7CisgICAgICAgICAgLyogV2l0aCBoaWdoIHMgPD0gZCB0aGUgZmluYWwgc3RlcCBjYW4gYmUgYSBzdWJ0cmFjdCBhbmQgYWRkYmFjay4KKyAgICAgICAgICAgICBJZiBjPT0wIHRoZW4gdGhlIGFkZGJhY2sgd2lsbCByZXN0b3JlIHRvIGw+PTAuICBJZiBjPT1kIHRoZW4KKyAgICAgICAgICAgICB3aWxsIGdldCBsPT1kIGlmIHM9PTAsIGJ1dCB0aGF0J3Mgb2sgcGVyIHRoZSBmdW5jdGlvbgorICAgICAgICAgICAgIGRlZmluaXRpb24uICAqLworCisgICAgICAgICAgbCA9IGMgLSBzOworICAgICAgICAgIGwgKz0gKGwgPiBjID8gZCA6IDApOworCisgICAgICAgICAgQVNTRVJUX1JFVFZBTCAobCk7CisgICAgICAgICAgcmV0dXJuIGw7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIC8qIENhbid0IHNraXAgYSBkaXZpZGUsIGp1c3QgZG8gdGhlIGxvb3AgY29kZSBvbmNlIG1vcmUuICovCisgICAgICAgICAgU1VCQ19MSU1CIChjLCBsLCBzLCBjKTsKKyAgICAgICAgICBxID0gbCAqIGludmVyc2U7CisgICAgICAgICAgdW11bF9wcG1tX2hhbGZfbG93ZXF1YWwgKGgsIHEsIGQsIGwpOworICAgICAgICAgIGMgKz0gaDsKKworICAgICAgICAgIEFTU0VSVF9SRVRWQUwgKGMpOworICAgICAgICAgIHJldHVybiBjOworICAgICAgICB9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgbXBfbGltYl90ICBkbCA9IExPVzMyIChkKTsKKyAgICAgIG1wX2xpbWJfdCAgZGggPSBISUdIMzIgKGQpOworICAgICAgbG9uZyBpOworCisgICAgICBzID0gKnNyYysrOworICAgICAgc2l6ZS0tOworICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAgIFNVQkNfTElNQiAoYywgbCwgcywgYyk7CisgICAgICAgICAgcyA9ICpzcmMrKzsKKyAgICAgICAgICBxID0gbCAqIGludmVyc2U7CisgICAgICAgICAgdW11bF9wcG1tX2xvd2VxdWFsIChoLCBxLCBkLCBkaCwgZGwsIGwpOworICAgICAgICAgIGMgKz0gaDsKKyAgICAgICAgICBzaXplLS07CisgICAgICAgIH0KKyAgICAgIHdoaWxlIChzaXplICE9IDApOworCisgICAgICBpZiAocyA8PSBkKQorICAgICAgICB7CisgICAgICAgICAgLyogV2l0aCBoaWdoIHMgPD0gZCB0aGUgZmluYWwgc3RlcCBjYW4gYmUgYSBzdWJ0cmFjdCBhbmQgYWRkYmFjay4KKyAgICAgICAgICAgICBJZiBjPT0wIHRoZW4gdGhlIGFkZGJhY2sgd2lsbCByZXN0b3JlIHRvIGw+PTAuICBJZiBjPT1kIHRoZW4KKyAgICAgICAgICAgICB3aWxsIGdldCBsPT1kIGlmIHM9PTAsIGJ1dCB0aGF0J3Mgb2sgcGVyIHRoZSBmdW5jdGlvbgorICAgICAgICAgICAgIGRlZmluaXRpb24uICAqLworCisgICAgICAgICAgbCA9IGMgLSBzOworICAgICAgICAgIGwgKz0gKGwgPiBjID8gZCA6IDApOworCisgICAgICAgICAgQVNTRVJUX1JFVFZBTCAobCk7CisgICAgICAgICAgcmV0dXJuIGw7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIC8qIENhbid0IHNraXAgYSBkaXZpZGUsIGp1c3QgZG8gdGhlIGxvb3AgY29kZSBvbmNlIG1vcmUuICovCisgICAgICAgICAgU1VCQ19MSU1CIChjLCBsLCBzLCBjKTsKKyAgICAgICAgICBxID0gbCAqIGludmVyc2U7CisgICAgICAgICAgdW11bF9wcG1tX2xvd2VxdWFsIChoLCBxLCBkLCBkaCwgZGwsIGwpOworICAgICAgICAgIGMgKz0gaDsKKworICAgICAgICAgIEFTU0VSVF9SRVRWQUwgKGMpOworICAgICAgICAgIHJldHVybiBjOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3JzaGlmdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvcnNoaWZ0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjhlMTFmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3JzaGlmdC5hc20KQEAgLTAsMCArMSwxNDIgQEAKK2RubCAgU1BBUkMgdjkgbXBuX3JzaGlmdAorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBEYXZpZCBNaWxsZXIuCisKK2RubCAgQ29weXJpZ2h0IDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkJICAgIGN5Y2xlcy9saW1iCitDIFVsdHJhU1BBUkMgMSYyOgkgMgorQyBVbHRyYVNQQVJDIDM6CQkgMi41CitDIFVsdHJhU1BBUkMgVDE6CTE3LjUKK0MgVWx0cmFTUEFSQyBUMzoJIDgKK0MgVWx0cmFTUEFSQyBUNDoJIDMKKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywgICAgIGAlaTAnKQorZGVmaW5lKGB1cCcsICAgICBgJWkxJykKK2RlZmluZShgbicsICAgICAgYCVpMicpCitkZWZpbmUoYGNudCcsICAgIGAlaTMnKQorCitkZWZpbmUoYHRjbnQnLCAgIGAlaTQnKQorZGVmaW5lKGByZXR2YWwnLCBgJWk1JykKK2RlZmluZShgdTAnLCAgICAgYCVsMCcpCitkZWZpbmUoYHUxJywgICAgIGAlbDEnKQorZGVmaW5lKGByMCcsICAgICBgJWw2JykKK2RlZmluZShgcjEnLCAgICAgYCVsNycpCitkZWZpbmUoYHUwX29mZicsIGAlbzAnKQorZGVmaW5lKGB1MV9vZmYnLCBgJW8xJykKK2RlZmluZShgcjBfb2ZmJywgYCVvMicpCitkZWZpbmUoYHIxX29mZicsIGAlbzMnKQorCitBU01fU1RBUlQoKQorCVJFR0lTVEVSKCVnMiwjc2NyYXRjaCkKKwlSRUdJU1RFUiglZzMsI3NjcmF0Y2gpCitQUk9MT0dVRShtcG5fcnNoaWZ0KQorCXNhdmUJJXNwLCAtMTc2LCAlc3AKKworCXNsbHgJbiwgMywgbgorCXN1YgklZzAsIGNudCwgdGNudAorCisJYWRkCXVwLCBuLCB1cAorCWFkZAlycCwgbiwgcnAKKworCW5lZwluLCBuCisJc3ViCXVwLCAoMiAqIDgpLCB1MF9vZmYKKwlzdWIJcnAsICg1ICogOCksIHIwX29mZgorCisJbGR4CVtuICsgdXBdLCB1MQkJQyBXQVM6IHVwICsgMAorCXN1Ygl1MF9vZmYsICgxICogOCksIHUxX29mZgorCXN1YglyMF9vZmYsICgxICogOCksIHIxX29mZgorCisJc3ViY2MJbiwgLSgzICogOCksIG4KKwlzbGx4CXUxLCB0Y250LCByZXR2YWwKKworCWJnLHBuCSV4Y2MsIEwoZW5kMTIpCisJIHNybHgJdTEsIGNudCwgJWwzCisKKwlsZHgJW24gKyB1MF9vZmZdLCB1MAlDIFdBUzogdXAgKyAwCisJc3ViY2MJbiwgLSgyICogOCksIG4KKworCWxkeAlbbiArIHUxX29mZl0sIHUxCUMgV0FTOiB1cCArIDgKKworCWJnLHBuCSV4Y2MsIEwoZW5kMzQpCisJIHNsbHgJdTAsIHRjbnQsICVsNAorCisJYixhCUwodG9wKQorCUFMSUdOKDE2KQorTCh0b3ApOgorCXNybHgJdTAsIGNudCwgJWwyCisJb3IJJWwzLCAlbDQsIHIwCisKKwlsZHgJW24gKyB1MF9vZmZdLCB1MAlDIFdBUzogdXAgKyAwCisJc2xseAl1MSwgdGNudCwgJWw1CisKKwlzdHgJcjAsIFtuICsgcjBfb2ZmXQlDIFdBUzogcnAgKyAwCisJc3ViY2MJbiwgLSgyICogOCksIG4KKworCXNybHgJdTEsIGNudCwgJWwzCisJb3IJJWwyLCAlbDUsIHIxCisKKwlsZHgJW24gKyB1MV9vZmZdLCB1MQlDIFdBUzogdXAgKyA4CisJc2xseAl1MCwgdGNudCwgJWw0CisKKwlibGUscHQJJXhjYywgTCh0b3ApCisJIHN0eAlyMSwgW24gKyByMV9vZmZdCUMgV0FTOiBycCArIDgKKworTChlbmQzNCk6CisJc3JseAl1MCwgY250LCAlbDIKKwlvcgklbDMsICVsNCwgcjAKKworCXNsbHgJdTEsIHRjbnQsICVsNQorCXN0eAlyMCwgW24gKyByMF9vZmZdCUMgV0FTOiBycCArIDAKKworCW9yCSVsMiwgJWw1LCByMQorCXN1YgluLCAtKDIgKiA4KSwgJW81CisKKwlzcmx4CXUxLCBjbnQsICVsMworCXN0eAlyMSwgWyVvNSArIHIxX29mZl0JQyBXQVM6IHJwICsgOAorCitMKGVuZDEyKToKKwlhbmRjYwluLCA4LCAlZzAKKwlieixwbgkleGNjLCBMKGRvbmUpCisJIG5vcAorCisJbGR4CVtuICsgdTBfb2ZmXSwgdTEKKwlzbGx4CXUxLCB0Y250LCAlbDQKKwlvcgklbDMsICVsNCwgcjAKKwlzdHgJcjAsIFtyMF9vZmYgKyAyNF0KKwlzcmx4CXUxLCBjbnQsICVsMworTChkb25lKToKKwlzdHgJJWwzLCBbcjBfb2ZmICsgMzJdCisKKwlyZXQKKwlyZXN0b3JlIHJldHZhbCwgMCwgJW8wCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvc2VjX3RhYnNlbGVjdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvc2VjX3RhYnNlbGVjdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJlMGRjNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC9zZWNfdGFic2VsZWN0LmFzbQpAQCAtMCwwICsxLDE2MiBAQAorZG5sICBTUEFSQyB2OSBtcG5fc2VjX3RhYnNlbGVjdC4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kIGFuZCBEYXZpZCBNaWxsZXIuCisKK2RubCAgQ29weXJpZ2h0IDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkJICAgY3ljbGVzL2xpbWIKK0MgVWx0cmFTUEFSQyAxJjI6CSAyIGhvcGVmdWxseQorQyBVbHRyYVNQQVJDIDM6CQkgMworQyBVbHRyYVNQQVJDIFQxOgkxNworQyBVbHRyYVNQQVJDIFQzOgkgPworQyBVbHRyYVNQQVJDIFQ0L1Q1OgkgMi4yNSBob3BlZnVsbHkKKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywgICAgIGAlaTAnKQorZGVmaW5lKGB0cCcsICAgICBgJWkxJykKK2RlZmluZShgbicsICAgICAgYCVpMicpCitkZWZpbmUoYG5lbnRzJywgIGAlaTMnKQorZGVmaW5lKGB3aGljaCcsICBgJWk0JykKKworZGVmaW5lKGBpJywgICAgICBgJWcxJykKK2RlZmluZShgaicsICAgICAgYCVnMycpCitkZWZpbmUoYHN0cmlkZScsIGAlZzQnKQorZGVmaW5lKGB0cG9yaWcnLCBgJWc1JykKK2RlZmluZShgbWFzaycsICAgYCVvMCcpCisKK2RlZmluZShgZGF0YTAnLCAgYCVsMCcpCitkZWZpbmUoYGRhdGExJywgIGAlbDEnKQorZGVmaW5lKGBkYXRhMicsICBgJWwyJykKK2RlZmluZShgZGF0YTMnLCAgYCVsMycpCitkZWZpbmUoYHQwJywgICAgIGAlbDQnKQorZGVmaW5lKGB0MScsICAgICBgJWw1JykKK2RlZmluZShgdDInLCAgICAgYCVsNicpCitkZWZpbmUoYHQzJywgICAgIGAlbDcnKQorCitBU01fU1RBUlQoKQorCVJFR0lTVEVSKCVnMiwjc2NyYXRjaCkKKwlSRUdJU1RFUiglZzMsI3NjcmF0Y2gpCitQUk9MT0dVRShtcG5fc2VjX3RhYnNlbGVjdCkKKwlzYXZlCSVzcCwgLTE3NiwgJXNwCisKKwlzbGx4CW4sIDMsIHN0cmlkZQorCXN1YgluLCA0LCBqCisJYnJseglqLCBMKG91dGVyX2VuZCkKKwkgbW92CXRwLCB0cG9yaWcKKworTChvdXRlcl9sb29wKToKKwljbHIJZGF0YTAKKwljbHIJZGF0YTEKKwljbHIJZGF0YTIKKwljbHIJZGF0YTMKKwltb3YJdHBvcmlnLCB0cAorCW1vdgluZW50cywgaQorCW1vdgl3aGljaCwgJW8xCisKK0wodG9wKToJc3ViY2MJJW8xLCAxLCAlbzEJCUMgc2V0IGNhcnJ5IGlmZiBvMSA9IDAKKwlsZHgJW3RwICsgMF0sIHQwCisJc3ViYwklZzAsICVnMCwgbWFzaworCWxkeAlbdHAgKyA4XSwgdDEKKwlzdWIJaSwgMSwgaQorCWxkeAlbdHAgKyAxNl0sIHQyCisJbGR4CVt0cCArIDI0XSwgdDMKKwlhZGQJdHAsIHN0cmlkZSwgdHAKKwlhbmQJdDAsIG1hc2ssIHQwCisJYW5kCXQxLCBtYXNrLCB0MQorCW9yCXQwLCBkYXRhMCwgZGF0YTAKKwlhbmQJdDIsIG1hc2ssIHQyCisJb3IJdDEsIGRhdGExLCBkYXRhMQorCWFuZAl0MywgbWFzaywgdDMKKwlvcgl0MiwgZGF0YTIsIGRhdGEyCisJYnJueglpLCBMKHRvcCkKKwkgb3IJdDMsIGRhdGEzLCBkYXRhMworCisJc3R4CWRhdGEwLCBbcnAgKyAwXQorCXN1YmNjCWosIDQsIGoKKwlzdHgJZGF0YTEsIFtycCArIDhdCisJc3R4CWRhdGEyLCBbcnAgKyAxNl0KKwlzdHgJZGF0YTMsIFtycCArIDI0XQorCWFkZAl0cG9yaWcsICg0ICogOCksIHRwb3JpZworCisJYnJnZXoJaiwgTChvdXRlcl9sb29wKQorCSBhZGQJcnAsICg0ICogOCksIHJwCitMKG91dGVyX2VuZCk6CisKKworCWFuZGNjCW4sIDIsICVnMAorCWJlCUwoYjB4KQorCSBub3AKK0woYjF4KToJY2xyCWRhdGEwCisJY2xyCWRhdGExCisJbW92CXRwb3JpZywgdHAKKwltb3YJbmVudHMsIGkKKwltb3YJd2hpY2gsICVvMQorCitMKHRwMik6CXN1YmNjCSVvMSwgMSwgJW8xCisJbGR4CVt0cCArIDBdLCB0MAorCXN1YmMJJWcwLCAlZzAsIG1hc2sKKwlsZHgJW3RwICsgOF0sIHQxCisJc3ViCWksIDEsIGkKKwlhZGQJdHAsIHN0cmlkZSwgdHAKKwlhbmQJdDAsIG1hc2ssIHQwCisJYW5kCXQxLCBtYXNrLCB0MQorCW9yCXQwLCBkYXRhMCwgZGF0YTAKKwlicm56CWksIEwodHAyKQorCSBvcgl0MSwgZGF0YTEsIGRhdGExCisKKwlzdHgJZGF0YTAsIFtycCArIDBdCisJc3R4CWRhdGExLCBbcnAgKyA4XQorCWFkZAl0cG9yaWcsICgyICogOCksIHRwb3JpZworCWFkZAlycCwgKDIgKiA4KSwgcnAKKworCitMKGIweCk6CWFuZGNjCW4sIDEsICVnMAorCWJlCUwoYjAwKQorCSBub3AKK0woYjAxKToJY2xyCWRhdGEwCisJbW92CXRwb3JpZywgdHAKKwltb3YJbmVudHMsIGkKKwltb3YJd2hpY2gsICVvMQorCitMKHRwMSk6CXN1YmNjCSVvMSwgMSwgJW8xCisJbGR4CVt0cCArIDBdLCB0MAorCXN1YmMJJWcwLCAlZzAsIG1hc2sKKwlzdWIJaSwgMSwgaQorCWFkZAl0cCwgc3RyaWRlLCB0cAorCWFuZAl0MCwgbWFzaywgdDAKKwlicm56CWksIEwodHAxKQorCSBvcgl0MCwgZGF0YTAsIGRhdGEwCisKKwlzdHgJZGF0YTAsIFtycCArIDBdCisKK0woYjAwKToJIHJldAorCSAgcmVzdG9yZQorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3NwYXJjNjQuaCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC9zcGFyYzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY5OGE4MgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC9zcGFyYzY0LmgKQEAgLTAsMCArMSwyMTcgQEAKKy8qIFVsdHJhU1BBUkMgNjQgc3VwcG9ydCBtYWNyb3MuCisKKyAgIFRIRSBGVU5DVElPTlMgSU4gVEhJUyBGSUxFIEFSRSBGT1IgSU5URVJOQUwgVVNFIE9OTFkuICBUSEVZJ1JFIEFMTU9TVAorICAgQ0VSVEFJTiBUTyBCRSBTVUJKRUNUIFRPIElOQ09NUEFUSUJMRSBDSEFOR0VTIE9SIERJU0FQUEVBUiBDT01QTEVURUxZIElOCisgICBGVVRVUkUgR05VIE1QIFJFTEVBU0VTLgorCitDb3B5cmlnaHQgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworCisjZGVmaW5lIExPVzMyKHgpICAgKCh4KSAmIDB4RkZGRkZGRkYpCisjZGVmaW5lIEhJR0gzMih4KSAgKCh4KSA+PiAzMikKKworCisvKiBIYWxmd29yZCBudW1iZXIgaSBpbiBzcmMgaXMgYWNjZXNzZWQgYXMgc3JjW2krSEFMRl9FTkRJQU5fQURKKGkpXS4KKyAgIFBsYWluIHNyY1tpXSB3b3VsZCBiZSBpbmNvcnJlY3QgaW4gYmlnIGVuZGlhbiwgSEFMRl9FTkRJQU5fQURKIGhhcyB0aGUKKyAgIGVmZmVjdCBvZiBzd2FwcGluZyB0aGUgdHdvIGhhbHZlcyBpbiB0aGlzIGNhc2UuICAqLworI2lmIEhBVkVfTElNQl9CSUdfRU5ESUFOCisjZGVmaW5lIEhBTEZfRU5ESUFOX0FESihpKSAgKDEgLSAoKChpKSAmIDEpIDw8IDEpKSAgIC8qICsxIGV2ZW4sIC0xIG9kZCAqLworI2VuZGlmCisjaWYgSEFWRV9MSU1CX0xJVFRMRV9FTkRJQU4KKyNkZWZpbmUgSEFMRl9FTkRJQU5fQURKKGkpICAwICAgICAgICAgICAgICAgICAgICAgICAgLyogbm8gYWRqdXN0ICovCisjZW5kaWYKKyNpZm5kZWYgSEFMRl9FTkRJQU5fQURKCitFcnJvciwgZXJyb3IsIHVua25vd24gbGltYiBlbmRpYW5uZXNzOworI2VuZGlmCisKKworLyogdW11bF9wcG1tX2xvd2VxdWFsIHNldHMgaCB0byB0aGUgaGlnaCBsaW1iIG9mIHEqZCwgYXNzdW1pbmcgdGhlIGxvdyBsaW1iCisgICBvZiB0aGF0IHByb2R1Y3QgaXMgZXF1YWwgdG8gbC4gIGRoIGFuZCBkbCBhcmUgdGhlIDMyLWJpdCBoYWx2ZXMgb2YgZC4KKworICAgfC0tLS0taGlnaC0tLS18fC0tLS1sb3ctLS0tLXwKKyAgICstLS0tLS0rLS0tLS0tKworICAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICBwaCA9IHFoICogZGgKKyAgICstLS0tLS0rLS0tLS0tKworICAgICAgICAgICstLS0tLS0rLS0tLS0tKworICAgICAgICAgIHwgICAgICAgICAgICAgfCAgICAgICAgICBwbTEgPSBxbCAqIGRoCisgICAgICAgICAgKy0tLS0tLSstLS0tLS0rCisgICAgICAgICAgKy0tLS0tLSstLS0tLS0rCisgICAgICAgICAgfCAgICAgICAgICAgICB8ICAgICAgICAgIHBtMiA9IHFoICogZGwKKyAgICAgICAgICArLS0tLS0tKy0tLS0tLSsKKyAgICAgICAgICAgICAgICAgKy0tLS0tLSstLS0tLS0rCisgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfCAgIHBsID0gcWwgKiBkbCAobm90IGNhbGN1bGF0ZWQpCisgICAgICAgICAgICAgICAgICstLS0tLS0rLS0tLS0tKworCisgICBLbm93aW5nIHRoYXQgdGhlIGxvdyA2NCBiaXRzIGlzIGVxdWFsIHRvIGwgbWVhbnMgdGhhdCBMT1cocG0xKSArIExPVyhwbTIpCisgICArIEhJR0gocGwpID09IEhJR0gobCkuICBUaGUgb25seSB0aGluZyB3ZSBuZWVkIGZyb20gdGhvc2UgcHJvZHVjdCBwYXJ0cworICAgaXMgd2hldGhlciB0aGV5IHByb2R1Y2UgYSBjYXJyeSBpbnRvIHRoZSBoaWdoLgorCisgICBwbV9sID0gTE9XKHBtMSkrTE9XKHBtMikgaXMgZG9uZSB0byBjb250cmlidXRlIGl0cyBjYXJyeSwgdGhlbiB0aGUgb25seQorICAgdGltZSB0aGVyZSdzIGEgZnVydGhlciBjYXJyeSBmcm9tIExPVyhwbV9sKStISUdIKHBsKSBpcyBpZiBMT1cocG1fbCkgPgorICAgSElHSChsKS4gIHBsIGlzIG5ldmVyIGFjdHVhbGx5IGNhbGN1bGF0ZWQuICAqLworCisjZGVmaW5lIHVtdWxfcHBtbV9sb3dlcXVhbChoLCBxLCBkLCBkaCwgZGwsIGwpICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbXBfbGltYl90ICBxbCwgcWgsIHBoLCBwbTEsIHBtMiwgcG1fbDsgICAgICBcCisgICAgQVNTRVJUIChkaCA9PSBISUdIMzIoZCkpOyAgICAgICAgICAgICAgICAgICBcCisgICAgQVNTRVJUIChkbCA9PSBMT1czMihkKSk7ICAgICAgICAgICAgICAgICAgICBcCisgICAgQVNTRVJUIChxKmQgPT0gbCk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcWwgPSBMT1czMiAocSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcWggPSBISUdIMzIgKHEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcG0xID0gcWwgKiBkaDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcG0yID0gcWggKiBkbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcGggID0gcWggKiBkaDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcG1fbCA9IExPVzMyIChwbTEpICsgTE9XMzIgKHBtMik7ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKGgpID0gcGggKyBISUdIMzIgKHBtMSkgKyBISUdIMzIgKHBtMikgICAgICBcCisgICAgICArIEhJR0gzMiAocG1fbCkgKyAoKHBtX2wgPDwgMzIpID4gbCk7ICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQVNTRVJUX0hJR0hfUFJPRFVDVCAoaCwgcSwgZCk7ICAgICAgICAgICAgICBcCisgIH0gd2hpbGUgKDApCisKKworLyogU2V0IGggdG8gdGhlIGhpZ2ggb2YgcSpkLCBhc3N1bWluZyB0aGUgbG93IGxpbWIgb2YgdGhhdCBwcm9kdWN0IGlzIGVxdWFsCisgICB0byBsLCBhbmQgdGhhdCBkIGZpdHMgaW4gMzItYml0cy4KKworICAgfC0tLS0taGlnaC0tLS18fC0tLS1sb3ctLS0tLXwKKyAgICAgICAgICArLS0tLS0tKy0tLS0tLSsKKyAgICAgICAgICB8ICAgICAgICAgICAgIHwgICAgICAgICAgcG0gPSBxaCAqIGRsCisgICAgICAgICAgKy0tLS0tLSstLS0tLS0rCisgICAgICAgICAgICAgICAgICstLS0tLS0rLS0tLS0tKworICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHwgICBwbCA9IHFsICogZGwgKG5vdCBjYWxjdWxhdGVkKQorICAgICAgICAgICAgICAgICArLS0tLS0tKy0tLS0tLSsKKworICAgS25vd2luZyB0aGF0IExPVyhwbSkgKyBISUdIKHBsKSA9PSBISUdIKGwpIChtb2QgMl4zMikgbWVhbnMgdGhhdCB0aGUgb25seQorICAgdGltZSB0aGVyZSdzIGEgY2FycnkgZnJvbSB0aGF0IHN1bSBpcyB3aGVuIExPVyhwbSkgPiBISUdIKGwpLiAgVGhlcmUncyBubworICAgbmVlZCB0byBjYWxjdWxhdGUgcGwgdG8gZGV0ZXJtaW5lIHRoaXMuICAqLworCisjZGVmaW5lIHVtdWxfcHBtbV9oYWxmX2xvd2VxdWFsKGgsIHEsIGQsIGwpICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbXBfbGltYl90IHBtOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQVNTRVJUIChxKmQgPT0gbCk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQVNTRVJUIChISUdIMzIoZCkgPT0gMCk7ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcG0gPSBISUdIMzIocSkgKiBkOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKGgpID0gSElHSDMyKHBtKSArICgocG0gPDwgMzIpID4gbCk7ICAgICAgICBcCisgICAgQVNTRVJUX0hJR0hfUFJPRFVDVCAoaCwgcSwgZCk7ICAgICAgICAgICAgICBcCisgIH0gd2hpbGUgKDApCisKKworLyogY2hlY2sgdGhhdCBoIGlzIHRoZSBoaWdoIGxpbWIgb2YgeCp5ICovCisjaWYgV0FOVF9BU1NFUlQKKyNkZWZpbmUgQVNTRVJUX0hJR0hfUFJPRFVDVChoLCB4LCB5KSAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1wX2xpbWJfdCAgd2FudF9oLCBkdW1teTsgICAgICAgICAgIFwKKyAgICB1bXVsX3BwbW0gKHdhbnRfaCwgZHVtbXksIHgsIHkpOyAgICBcCisgICAgQVNTRVJUIChoID09IHdhbnRfaCk7ICAgICAgICAgICAgICAgXAorICB9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgQVNTRVJUX0hJR0hfUFJPRFVDVChoLCBxLCBkKSAgICBcCisgIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisKKy8qIE11bHRpcGx5IHUgYW52IHYsIHdoZXJlIHYgPCAyXjMyLiAgKi8KKyNkZWZpbmUgdW11bF9wcG1tX3ModzEsIHcwLCB1LCB2KQkJCQkJXAorICBkbyB7CQkJCQkJCQkJXAorICAgIFVXdHlwZSBfX3gwLCBfX3gyOwkJCQkJCQlcCisgICAgVVd0eXBlIF9fdWwsIF9fdmwsIF9fdWg7CQkJCQkJXAorICAgIFVXdHlwZSBfX3UgPSAodSksIF9fdiA9ICh2KTsJCQkJCVwKKwkJCQkJCQkJCVwKKyAgICBfX3VsID0gX19sbF9sb3dwYXJ0IChfX3UpOwkJCQkJCVwKKyAgICBfX3VoID0gX19sbF9oaWdocGFydCAoX191KTsJCQkJCQlcCisgICAgX192bCA9IF9fbGxfbG93cGFydCAoX192KTsJCQkJCQlcCisJCQkJCQkJCQlcCisgICAgX194MCA9IChVV3R5cGUpIF9fdWwgKiBfX3ZsOwkJCQkJXAorICAgIF9feDIgPSAoVVd0eXBlKSBfX3VoICogX192bDsJCQkJCVwKKwkJCQkJCQkJCVwKKyAgICAodzEpID0gKF9feDIgKyAoX194MCA+PiBXX1RZUEVfU0laRS8yKSkgPj4gV19UWVBFX1NJWkUvMjsJCVwKKyAgICAodzApID0gKF9feDIgPDwgV19UWVBFX1NJWkUvMikgKyBfX3gwOwkJCQlcCisgIH0gd2hpbGUgKDApCisKKy8qIENvdW50IHRoZSBsZWFkaW5nIHplcm9zIG9uIGEgbGltYiwgYnV0IGFzc3VtaW5nIGl0IGZpdHMgaW4gMzIgYml0cy4KKyAgIFRoZSBjb3VudCByZXR1cm5lZCB3aWxsIGJlIGluIHRoZSByYW5nZSAzMiB0byA2My4KKyAgIFRoaXMgaXMgdGhlIDMyLWJpdCBnZW5lcmljIEMgY291bnRfbGVhZGluZ196ZXJvcyBmcm9tIGxvbmdsb25nLmguICovCisjZGVmaW5lIGNvdW50X2xlYWRpbmdfemVyb3NfMzIoY291bnQsIHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbXBfbGltYl90ICBfX3hyID0gKHgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdW5zaWduZWQgICBfX2E7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQVNTRVJUICgoeCkgIT0gMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQVNTRVJUICgoeCkgPD0gQ05TVF9MSU1CKDB4RkZGRkZGRkYpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX19hID0gX194ciA8ICgoVVd0eXBlKSAxIDw8IDE2KSA/IChfX3hyIDwgKChVV3R5cGUpIDEgPDwgOCkgPyAxIDogOCArIDEpICBcCisgICAgICA6IChfX3hyIDwgKChVV3R5cGUpIDEgPDwgMjQpICA/IDE2ICsgMSA6IDI0ICsgMSk7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKGNvdW50KSA9IFdfVFlQRV9TSVpFICsgMSAtIF9fYSAtIF9fY2x6X3RhYltfX3hyID4+IF9fYV07ICAgICAgICAgICAgICAgICBcCisgIH0gd2hpbGUgKDApCisKKworLyogU2V0IGludiB0byBhIDMyLWJpdCBpbnZlcnNlIGZsb29yKChiKihiLWQpLTEpIC8gZCksIGtub3dpbmcgdGhhdCBkIGZpdHMKKyAgIDMyIGJpdHMgYW5kIGlzIG5vcm1hbGl6ZWQgKGhpZ2ggYml0IHNldCkuICAqLworI2RlZmluZSBpbnZlcnRfaGFsZl9saW1iKGludiwgZCkgICAgICAgICAgICAgICAgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1wX2xpbWJfdCAgX247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEFTU0VSVCAoKGQpIDw9IDB4RkZGRkZGRkYpOyAgICAgICAgICAgICAgICAgXAorICAgIEFTU0VSVCAoKGQpICYgMHg4MDAwMDAwMCk7ICAgICAgICAgICAgICAgICAgXAorICAgIF9uID0gKCgobXBfbGltYl90KSAtKGQpKSA8PCAzMikgLSAxOyAgICAgICAgXAorICAgIChpbnYpID0gKG1wX2xpbWJfdCkgKHVuc2lnbmVkKSAoX24gLyAoZCkpOyAgXAorICB9IHdoaWxlICgwKQorCisKKy8qIERpdmlkZSBuaDpubCBieSBkLCBzZXR0aW5nIHEgdG8gdGhlIHF1b3RpZW50IGFuZCByIHRvIHRoZSByZW1haW5kZXIuCisgICBxLCByLCBuaCBhbmQgbmwgYXJlIDMyLWJpdHMgZWFjaCwgZF9saW1iIGlzIDMyLWJpdHMgYnV0IGluIGFuIG1wX2xpbWJfdCwKKyAgIGRpbnZfbGltYiBpcyBzaW1pbGFybHkgYSAzMi1iaXQgaW52ZXJzZSBidXQgaW4gYW4gbXBfbGltYl90LiAgKi8KKworI2RlZmluZSB1ZGl2X3Fybm5kX2hhbGZfcHJlaW52KHEsIHIsIG5oLCBubCwgZF9saW1iLCBkaW52X2xpbWIpICAgICAgICAgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVuc2lnbmVkICAgX24yLCBfbjEwLCBfbjEsIF9uYWRqLCBfcTExbiwgX3hoLCBfciwgX3E7ICAgICAgICAgICAgICAgXAorICAgIG1wX2xpbWJfdCAgX24sIF94OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEFTU0VSVCAoZF9saW1iIDw9IDB4RkZGRkZGRkYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEFTU0VSVCAoZGludl9saW1iIDw9IDB4RkZGRkZGRkYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEFTU0VSVCAoZF9saW1iICYgMHg4MDAwMDAwMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEFTU0VSVCAobmggPCBkX2xpbWIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9uMTAgPSAobmwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9uMiA9IChuaCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9uMSA9IChpbnQpIF9uMTAgPj4gMzE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9uYWRqID0gX24xMCArIChfbjEgJiBkX2xpbWIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF94ID0gZGludl9saW1iICogKF9uMiAtIF9uMSkgKyBfbmFkajsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9xMTFuID0gfihfbjIgKyBISUdIMzIgKF94KSk7ICAgICAgICAgICAgIC8qIC1xMS0xICovICAgICAgICAgICAgICAgXAorICAgIF9uID0gKChtcF9saW1iX3QpIF9uMiA8PCAzMikgKyBfbjEwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF94ID0gX24gKyBkX2xpbWIgKiBfcTExbjsgICAgICAgICAgICAgICAgIC8qIG4tcTEqZC1kICovICAgICAgICAgICAgXAorICAgIF94aCA9IEhJR0gzMiAoX3gpIC0gZF9saW1iOyAgICAgICAgICAgICAgIC8qIGhpZ2gobi1xMSpkLWQpICovICAgICAgXAorICAgIEFTU0VSVCAoX3hoID09IDAgfHwgX3hoID09IH4wKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9yID0gX3ggKyAoZF9saW1iICYgX3hoKTsgICAgICAgICAgICAgICAgIC8qIGFkZGJhY2sgKi8gICAgICAgICAgICAgXAorICAgIF9xID0gX3hoIC0gX3ExMW47ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHExKzEtYWRkYmFjayAqLyAgICAgICAgXAorICAgIEFTU0VSVCAoX3IgPCBkX2xpbWIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEFTU0VSVCAoZF9saW1iICogX3EgKyBfciA9PSBfbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChyKSA9IF9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChxKSA9IF9xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmMxMjM0L2FkZF9uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjMTIzNC9hZGRfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIzNzRkMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjMTIzNC9hZGRfbi5hc20KQEAgLTAsMCArMSwyNDEgQEAKK2RubCAgU1BBUkMgdjkgbXBuX2FkZF9uIC0tIEFkZCB0d28gbGltYiB2ZWN0b3JzIG9mIHRoZSBzYW1lIGxlbmd0aCA+IDAgYW5kCitkbmwgIHN0b3JlIHN1bSBpbiBhIHRoaXJkIGxpbWIgdmVjdG9yLgorCitkbmwgIENvcHlyaWdodCAyMDAxLTIwMDMsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkJICAgY3ljbGVzL2xpbWIKK0MgVWx0cmFTUEFSQyAxJjI6ICAgICA0CitDIFVsdHJhU1BBUkMgMzoJICAgICAgNC41CisKK0MgQ29tcHV0ZSBjYXJyeS1vdXQgZnJvbSB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXRzIG9mIHUsdiwgYW5kIHIsIHdoZXJlCitDIHI9dSt2K2NhcnJ5X2luLCB1c2luZyBsb2dpYyBvcGVyYXRpb25zLgorCitDIFRoaXMgY29kZSBydW5zIGF0IDQgY3ljbGVzL2xpbWIgb24gVWx0cmFTUEFSQyAxIGFuZCAyLiAgSXQgaGFzIGEgNCBpbnNuCitDIHJlY3VycmVuY3ksIGFuZCB0aGUgVWx0cmFTUEFSQyAxIGFuZCAyIHRoZSBJRSB1bml0cyBhcmUgMTAwJSBzYXR1cmF0ZWQuCitDIFRoZXJlZm9yZSwgaXQgc2VlbXMgZnV0aWxlIHRvIHRyeSB0byBvcHRpbWl6ZSB0aGlzIGFueSBmdXJ0aGVyLi4uCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsIGAlaTAnKQorZGVmaW5lKGB1cCcsIGAlaTEnKQorZGVmaW5lKGB2cCcsIGAlaTInKQorZGVmaW5lKGBuJywgIGAlaTMnKQorCitkZWZpbmUoYHUwJywgYCVsMCcpCitkZWZpbmUoYHUxJywgYCVsMicpCitkZWZpbmUoYHUyJywgYCVsNCcpCitkZWZpbmUoYHUzJywgYCVsNicpCitkZWZpbmUoYHYwJywgYCVsMScpCitkZWZpbmUoYHYxJywgYCVsMycpCitkZWZpbmUoYHYyJywgYCVsNScpCitkZWZpbmUoYHYzJywgYCVsNycpCisKK2RlZmluZShgY3knLGAlaTQnKQorCitkZWZpbmUoYGZhbm9wJyxgZml0b2QgJWYwLCVmMicpCQlkbmwgIEEgcXVhc2kgbm9wIHJ1bm5pbmcgaW4gdGhlIEZBIHBpcGUKK2RlZmluZShgZm1ub3AnLGBmbXVsZCAlZjAsJWYwLCVmNCcpCWRubCAgQSBxdWFzaSBub3AgcnVubmluZyBpbiB0aGUgRk0gcGlwZQorCitBU01fU1RBUlQoKQorCVJFR0lTVEVSKCVnMiwjc2NyYXRjaCkKKwlSRUdJU1RFUiglZzMsI3NjcmF0Y2gpCitQUk9MT0dVRShtcG5fYWRkX25jKQorCXNhdmUJJXNwLC0xNjAsJXNwCisKKwlmaXRvZAklZjAsJWYwCQlDIG1ha2Ugc3VyZSBmMCBjb250YWlucyBzbWFsbCwgcXVpZXQgbnVtYmVyCisJc3ViY2MJbiw0LCVnMAorCWJsLHBuCSV4Y2MsLkxvb3AwCisJbm9wCisJYixhCUwoY29tKQorRVBJTE9HVUUoKQorCitQUk9MT0dVRShtcG5fYWRkX24pCisJc2F2ZQklc3AsLTE2MCwlc3AKKworCWZpdG9kCSVmMCwlZjAJCUMgbWFrZSBzdXJlIGYwIGNvbnRhaW5zIHNtYWxsLCBxdWlldCBudW1iZXIKKwlzdWJjYwluLDQsJWcwCisJYmwscG4JJXhjYywuTG9vcDAKKwltb3YJMCxjeQorTChjb20pOgorCWxkeAlbdXArMF0sdTAKKwlsZHgJW3ZwKzBdLHYwCisJYWRkCXVwLDMyLHVwCisJbGR4CVt1cC0yNF0sdTEKKwlsZHgJW3ZwKzhdLHYxCisJYWRkCXZwLDMyLHZwCisJbGR4CVt1cC0xNl0sdTIKKwlsZHgJW3ZwLTE2XSx2MgorCWxkeAlbdXAtOF0sdTMKKwlsZHgJW3ZwLThdLHYzCisJc3ViY2MJbiw4LG4KKwlhZGQJdTAsdjAsJWcxCUMgbWFpbiBhZGQKKwlhZGQJJWcxLGN5LCVnNQlDIGNhcnJ5IGFkZAorCW9yCXUwLHYwLCVnMgorCWJsLHBuCSV4Y2MsLkxlbmQ0NTY3CisJZmFub3AKKwliLGEJLkxvb3AKKworCS5hbGlnbgkxNgorQyBTVEFSVCBNQUlOIExPT1AKKy5Mb29wOglhbmRuCSVnMiwlZzUsJWcyCisJYW5kCXUwLHYwLCVnMworCWxkeAlbdXArMF0sdTAKKwlmYW5vcAorQyAtLQorCW9yCSVnMywlZzIsJWcyCisJbGR4CVt2cCswXSx2MAorCWFkZAl1cCwzMix1cAorCWZhbm9wCitDIC0tCisJc3JseAklZzIsNjMsY3kKKwlhZGQJdTEsdjEsJWcxCisJc3R4CSVnNSxbcnArMF0KKwlmYW5vcAorQyAtLQorCWFkZAklZzEsY3ksJWc1CisJb3IJdTEsdjEsJWcyCisJZm1ub3AKKwlmYW5vcAorQyAtLQorCWFuZG4JJWcyLCVnNSwlZzIKKwlhbmQJdTEsdjEsJWczCisJbGR4CVt1cC0yNF0sdTEKKwlmYW5vcAorQyAtLQorCW9yCSVnMywlZzIsJWcyCisJbGR4CVt2cCs4XSx2MQorCWFkZAl2cCwzMix2cAorCWZhbm9wCitDIC0tCisJc3JseAklZzIsNjMsY3kKKwlhZGQJdTIsdjIsJWcxCisJc3R4CSVnNSxbcnArOF0KKwlmYW5vcAorQyAtLQorCWFkZAklZzEsY3ksJWc1CisJb3IJdTIsdjIsJWcyCisJZm1ub3AKKwlmYW5vcAorQyAtLQorCWFuZG4JJWcyLCVnNSwlZzIKKwlhbmQJdTIsdjIsJWczCisJbGR4CVt1cC0xNl0sdTIKKwlmYW5vcAorQyAtLQorCW9yCSVnMywlZzIsJWcyCisJbGR4CVt2cC0xNl0sdjIKKwlhZGQJcnAsMzIscnAKKwlmYW5vcAorQyAtLQorCXNybHgJJWcyLDYzLGN5CisJYWRkCXUzLHYzLCVnMQorCXN0eAklZzUsW3JwLTE2XQorCWZhbm9wCitDIC0tCisJYWRkCSVnMSxjeSwlZzUKKwlvcgl1Myx2MywlZzIKKwlmbW5vcAorCWZhbm9wCitDIC0tCisJYW5kbgklZzIsJWc1LCVnMgorCWFuZAl1Myx2MywlZzMKKwlsZHgJW3VwLThdLHUzCisJZmFub3AKK0MgLS0KKwlvcgklZzMsJWcyLCVnMgorCXN1YmNjCW4sNCxuCisJbGR4CVt2cC04XSx2MworCWZhbm9wCitDIC0tCisJc3JseAklZzIsNjMsY3kKKwlhZGQJdTAsdjAsJWcxCisJc3R4CSVnNSxbcnAtOF0KKwlmYW5vcAorQyAtLQorCWFkZAklZzEsY3ksJWc1CisJb3IJdTAsdjAsJWcyCisJYmdlLHB0CSV4Y2MsLkxvb3AKKwlmYW5vcAorQyBFTkQgTUFJTiBMT09QCisuTGVuZDQ1Njc6CisJYW5kbgklZzIsJWc1LCVnMgorCWFuZAl1MCx2MCwlZzMKKwlvcgklZzMsJWcyLCVnMgorCXNybHgJJWcyLDYzLGN5CisJYWRkCXUxLHYxLCVnMQorCXN0eAklZzUsW3JwKzBdCisJYWRkCSVnMSxjeSwlZzUKKwlvcgl1MSx2MSwlZzIKKwlhbmRuCSVnMiwlZzUsJWcyCisJYW5kCXUxLHYxLCVnMworCW9yCSVnMywlZzIsJWcyCisJc3JseAklZzIsNjMsY3kKKwlhZGQJdTIsdjIsJWcxCisJc3R4CSVnNSxbcnArOF0KKwlhZGQJJWcxLGN5LCVnNQorCW9yCXUyLHYyLCVnMgorCWFuZG4JJWcyLCVnNSwlZzIKKwlhbmQJdTIsdjIsJWczCisJb3IJJWczLCVnMiwlZzIKKwlhZGQJcnAsMzIscnAKKwlzcmx4CSVnMiw2MyxjeQorCWFkZAl1Myx2MywlZzEKKwlzdHgJJWc1LFtycC0xNl0KKwlhZGQJJWcxLGN5LCVnNQorCW9yCXUzLHYzLCVnMgorCWFuZG4JJWcyLCVnNSwlZzIKKwlhbmQJdTMsdjMsJWczCisJb3IJJWczLCVnMiwlZzIKKwlzcmx4CSVnMiw2MyxjeQorCXN0eAklZzUsW3JwLThdCisKKwlhZGRjYwluLDQsbgorCWJ6LHBuCSV4Y2MsLkxyZXQKKwlmYW5vcAorCisuTG9vcDA6CWxkeAlbdXBdLHUwCisJYWRkCXVwLDgsdXAKKwlsZHgJW3ZwXSx2MAorCWFkZAl2cCw4LHZwCisJYWRkCXJwLDgscnAKKwlzdWJjYwluLDEsbgorCWFkZAl1MCx2MCwlZzEKKwlvcgl1MCx2MCwlZzIKKwlhZGQJJWcxLGN5LCVnNQorCWFuZAl1MCx2MCwlZzMKKwlhbmRuCSVnMiwlZzUsJWcyCisJc3R4CSVnNSxbcnAtOF0KKwlvcgklZzMsJWcyLCVnMgorCWJueixwdAkleGNjLC5Mb29wMAorCXNybHgJJWcyLDYzLGN5CisKKy5McmV0Ogltb3YJY3ksJWkwCisJcmV0CisJcmVzdG9yZQorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmMxMjM0L2FkZG11bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjMTIzNC9hZGRtdWxfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhhOTQxNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjMTIzNC9hZGRtdWxfMS5hc20KQEAgLTAsMCArMSw2MDYgQEAKK2RubCAgU1BBUkMgdjkgNjQtYml0IG1wbl9hZGRtdWxfMSAtLSBNdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYSBsaW1iIGFuZCBhZGQKK2RubCAgdGhlIHJlc3VsdCB0byBhIHNlY29uZCBsaW1iIHZlY3Rvci4KKworZG5sICBDb3B5cmlnaHQgMTk5OCwgMjAwMC0yMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJCSAgIGN5Y2xlcy9saW1iCitDIFVsdHJhU1BBUkMgMSYyOiAgICAgMTQKK0MgVWx0cmFTUEFSQyAzOgkgICAgICAxNy41CisKK0MgQWxnb3JpdGhtOiBXZSB1c2UgZWlnaHQgZmxvYXRpbmctcG9pbnQgbXVsdGlwbGllcyBwZXIgbGltYiBwcm9kdWN0LCB3aXRoIHRoZQorQyBpbnZhcmlhbnQgdiBvcGVyYW5kIHNwbGl0IGludG8gZm91ciAxNi1iaXQgcGllY2VzLCBhbmQgdGhlIHVwIG9wZXJhbmQgc3BsaXQKK0MgaW50byAzMi1iaXQgcGllY2VzLiAgV2Ugc3VtIHBhaXJzIG9mIDQ4LWJpdCBwYXJ0aWFsIHByb2R1Y3RzIHVzaW5nCitDIGZsb2F0aW5nLXBvaW50IGFkZCwgdGhlbiBjb252ZXJ0IHRoZSBmb3VyIDQ5LWJpdCBwcm9kdWN0LXN1bXMgYW5kIHRyYW5zZmVyCitDIHRoZW0gdG8gdGhlIGludGVnZXIgdW5pdC4KKworQyBQb3NzaWJsZSBvcHRpbWl6YXRpb25zOgorQyAgIDAuIFJld3JpdGUgdG8gdXNlIGFsZ29yaXRobSBvZiBtcG5fYWRkbXVsXzIuCitDICAgMS4gQWxpZ24gdGhlIHN0YWNrIGFyZWEgd2hlcmUgd2UgdHJhbnNmZXIgdGhlIGZvdXIgNDktYml0IHByb2R1Y3Qtc3VtcworQyAgICAgIHRvIGEgMzItYnl0ZSBib3VuZGFyeS4gIFRoYXQgd291bGQgbWluaW1pemUgdGhlIGNhY2hlIGNvbGxpc2lvbi4KK0MgICAgICAoVWx0cmFTUEFSQy0xLzIgdXNlIGEgZGlyZWN0LW1hcHBlZCBjYWNoZS4pICAoUGVyaGFwcyBldmVuIGJldHRlciB3b3VsZAorQyAgICAgIGJlIHRvIGFsaWduIHRoZSBhcmVhIHRvIG1hcCB0byB0aGUgYXJlYSBpbW1lZGlhdGVseSBiZWZvcmUgdXA/KQorQyAgIDIuIFN1bSB0aGUgNCA0OS1iaXQgcXVhbnRpdGllcyB1c2luZyAzMi1iaXQgb3BlcmF0aW9ucywgYXMgaW4gdGhlCitDICAgICAgZGV2ZWxvcCBtcG5fYWRkbXVsXzIuICBUaGlzIHdvdWxkIHNhdmUgbWFueSBpbnRlZ2VyIGluc3RydWN0aW9ucy4KK0MgICAzLiBVbnJvbGxpbmcuICBRdWVzdGlvbmFibGUgaWYgaXQgaXMgd29ydGggdGhlIGNvZGUgZXhwYW5zaW9uLCBnaXZlbiB0aGF0CitDICAgICAgaXQgY291bGQgb25seSBzYXZlIDEgY3ljbGUvbGltYi4KK0MgICA0LiBTcGVjaWFsaXplIGZvciBwYXJ0aWN1bGFyIHYgdmFsdWVzLiAgSWYgaXRzIHVwcGVyIDMyIGJpdHMgYXJlIHplcm8sIHdlCitDICAgICAgY291bGQgc2F2ZSBtYW55IG9wZXJhdGlvbnMsIGluIHRoZSBGUFUgKGZtdWxkKSwgYnV0IG1vcmUgc28gaW4gdGhlIElFVQorQyAgICAgIHNpbmNlIHdlJ2xsIGJlIHN1bW1pbmcgNDgtYml0IHF1YW50aXRpZXMsIHdoaWNoIG1pZ2h0IGJlIHNpbXBsZXIuCitDICAgNS4gSWRlYWxseSwgd2Ugc2hvdWxkIHNjaGVkdWxlIHRoZSBmMi9mMyBhbmQgZjQvZjUgUkFXIGZ1cnRoZXIgYXBhcnQsIGFuZAorQyAgICAgIHRoZSBpMDAsaTE2LGkzMixpNDggUkFXIGxlc3MgYXBhcnQuICBUaGUgbGF0dGVyIGFwYXJ0LXNjaGVkdWxpbmcgc2hvdWxkCitDICAgICAgbm90IGJlIGdyZWF0ZXIgdGhhbiBuZWVkZWQgZm9yIEwyIGNhY2hlIGxhdGVuY3ksIGFuZCBhbHNvIG5vdCBzbyBncmVhdAorQyAgICAgIHRoYXQgaTE2IG5lZWRzIHRvIGJlIGNvcGllZC4KK0MgICA2LiBBdm9pZCBwZXJmb3JtaW5nIG1lbStmYStmbSBpbiB0aGUgc2FtZSBjeWNsZSwgYXQgbGVhc3Qgbm90IHdoZW4gd2Ugd2FudAorQyAgICAgIHRvIGdldCBoaWdoIElFVSBiYW5kd2lkdGguICAoMTIgb2YgdGhlIDE0IGN5Y2xlcyB3aWxsIGJlIGZyZWUgZm9yIDIgSUVVCitDICAgICAgb3BzLikKKworQyBJbnN0cnVjdGlvbiBjbGFzc2lmaWNhdGlvbiAoYXMgcGVyIFVsdHJhU1BBUkMtMS8yIGZ1bmN0aW9uYWwgdW5pdHMpOgorQyAgICA4IEZNCitDICAgMTAgRkEKK0MgICAxMiBNRU0KK0MgICAxMCBJU0hJRlQgKyAxNCBJQURETE9HCitDICAgIDEgQlJBTkNICitDICAgNTUgaW5zbnMgdG90YWxseSAocGx1cyBvbmUgbW92IGluc24gdGhhdCBzaG91bGQgYmUgb3B0aW1pemVkIG91dCkKKworQyBUaGUgbG9vcCBleGVjdXRlcyA1NiBpbnN0cnVjdGlvbnMgaW4gMTQgY3ljbGVzIG9uIFVsdHJhU1BBUkMtMS8yLCBpLmUgd2UKK0Mgc3VzdGFpbiB0aGUgcGVhayBleGVjdXRpb24gcmF0ZSBvZiA0IGluc3RydWN0aW9ucy9jeWNsZS4KKworQyBJTlBVVCBQQVJBTUVURVJTCitDIHJwCWkwCitDIHVwCWkxCitDIG4JaTIKK0MgdglpMworCitBU01fU1RBUlQoKQorCVJFR0lTVEVSKCVnMiwjc2NyYXRjaCkKKwlSRUdJU1RFUiglZzMsI3NjcmF0Y2gpCisKK2RlZmluZShgcDAwJywgYCVmOCcpIGRlZmluZShgcDE2JyxgJWYxMCcpIGRlZmluZShgcDMyJyxgJWYxMicpIGRlZmluZShgcDQ4JyxgJWYxNCcpCitkZWZpbmUoYHIzMicsYCVmMTYnKSBkZWZpbmUoYHI0OCcsYCVmMTgnKSBkZWZpbmUoYHI2NCcsYCVmMjAnKSBkZWZpbmUoYHI4MCcsYCVmMjInKQorZGVmaW5lKGB2MDAnLGAlZjI0JykgZGVmaW5lKGB2MTYnLGAlZjI2JykgZGVmaW5lKGB2MzInLGAlZjI4JykgZGVmaW5lKGB2NDgnLGAlZjMwJykKK2RlZmluZShgdTAwJyxgJWYzMicpIGRlZmluZShgdTMyJywgYCVmMzQnKQorZGVmaW5lKGBhMDAnLGAlZjM2JykgZGVmaW5lKGBhMTYnLGAlZjM4JykgZGVmaW5lKGBhMzInLGAlZjQwJykgZGVmaW5lKGBhNDgnLGAlZjQyJykKK2RlZmluZShgY3knLGAlZzEnKQorZGVmaW5lKGBybGltYicsYCVnMycpCitkZWZpbmUoYGkwMCcsYCVsMCcpIGRlZmluZShgaTE2JyxgJWwxJykgZGVmaW5lKGBpMzInLGAlbDInKSBkZWZpbmUoYGk0OCcsYCVsMycpCitkZWZpbmUoYHhmZmZmZmZmZicsYCVsNycpCitkZWZpbmUoYHhmZmZmJyxgJW8wJykKKworUFJPTE9HVUUobXBuX2FkZG11bF8xKQorCitDIEluaXRpYWxpemF0aW9uLiAgKDEpIFNwbGl0IHYgb3BlcmFuZCBpbnRvIGZvdXIgMTYtYml0IGNodW5rcyBhbmQgc3RvcmUgdGhlbQorQyBhcyBJRUVFIGRvdWJsZSBpbiBmcCByZWdpc3RlcnMuICAoMikgQ2xlYXIgdXBwZXIgMzIgYml0cyBvZiBmcCByZWdpc3RlciBwYWlycworQyBmMiBhbmQgZjQuICAoMykgU3RvcmUgbWFza3MgaW4gcmVnaXN0ZXJzIGFsaWFzZWQgdG8gYHhmZmZmJyBhbmQgYHhmZmZmZmZmZicuCisKKwlzYXZlCSVzcCwgLTI1NiwgJXNwCisJbW92CS0xLCAlZzQKKwlzcmx4CSVnNCwgNDgsIHhmZmZmCQlDIHN0b3JlIG1hc2sgaW4gcmVnaXN0ZXIgYHhmZmZmJworCWFuZAklaTMsIHhmZmZmLCAlZzIKKwlzdHgJJWcyLCBbJXNwKzIyMjMrMF0KKwlzcmx4CSVpMywgMTYsICVnMworCWFuZAklZzMsIHhmZmZmLCAlZzMKKwlzdHgJJWczLCBbJXNwKzIyMjMrOF0KKwlzcmx4CSVpMywgMzIsICVnMgorCWFuZAklZzIsIHhmZmZmLCAlZzIKKwlzdHgJJWcyLCBbJXNwKzIyMjMrMTZdCisJc3JseAklaTMsIDQ4LCAlZzMKKwlzdHgJJWczLCBbJXNwKzIyMjMrMjRdCisJc3JseAklZzQsIDMyLCB4ZmZmZmZmZmYJQyBzdG9yZSBtYXNrIGluIHJlZ2lzdGVyIGB4ZmZmZmZmZmYnCisKKwlzbGx4CSVpMiwgMywgJWkyCisJbW92CTAsIGN5CQkJQyBjbGVhciBjeQorCWFkZAklaTAsICVpMiwgJWkwCisJYWRkCSVpMSwgJWkyLCAlaTEKKwluZWcJJWkyCisJYWRkCSVpMSwgNCwgJWk1CisJYWRkCSVpMCwgLTMyLCAlaTQKKwlhZGQJJWkwLCAtMTYsICVpMAorCisJbGRkCVslc3ArMjIyMyswXSwgdjAwCisJbGRkCVslc3ArMjIyMys4XSwgdjE2CisJbGRkCVslc3ArMjIyMysxNl0sIHYzMgorCWxkZAlbJXNwKzIyMjMrMjRdLCB2NDgKKwlsZAlbJXNwKzIyMjMrMF0sJWYyCUMgemVybyBmMgorCWxkCVslc3ArMjIyMyswXSwlZjQJQyB6ZXJvIGY0CisJbGQJWyVpNSslaTJdLCAlZjMJCUMgcmVhZCBsb3cgMzIgYml0cyBvZiB1cFtpXQorCWxkCVslaTErJWkyXSwgJWY1CQlDIHJlYWQgaGlnaCAzMiBiaXRzIG9mIHVwW2ldCisJZnh0b2QJdjAwLCB2MDAKKwlmeHRvZAl2MTYsIHYxNgorCWZ4dG9kCXYzMiwgdjMyCisJZnh0b2QJdjQ4LCB2NDgKKworQyBTdGFydCByZWFsIHdvcmsuICAoV2Ugc25lYWtpbmdseSByZWFkIGYzIGFuZCBmNSBhYm92ZS4uLikKK0MgVGhlIHNvZnR3YXJlIHBpcGVsaW5lIGlzIHZlcnkgZGVlcCwgcmVxdWlyaW5nIDQgZmVlZC1pbiBzdGFnZXMuCisKKwlmeHRvZAklZjIsIHUwMAorCWZ4dG9kCSVmNCwgdTMyCisJZm11bGQJdTAwLCB2MDAsIGEwMAorCWZtdWxkCXUwMCwgdjE2LCBhMTYKKwlmbXVsZAl1MDAsIHYzMiwgcDMyCisJZm11bGQJdTMyLCB2MDAsIHIzMgorCWZtdWxkCXUwMCwgdjQ4LCBwNDgKKwlhZGRjYwklaTIsIDgsICVpMgorCWJueixwdAkleGNjLCAuTF90d29fb3JfbW9yZQorCWZtdWxkCXUzMiwgdjE2LCByNDgKKworLkxfb25lOgorCWZtdWxkCXUzMiwgdjMyLCByNjQJQyBGSVhNRSBub3QgdXJnZW50CisJZmFkZGQJcDMyLCByMzIsIGEzMgorCWZkdG94CWEwMCwgYTAwCisJZmFkZGQJcDQ4LCByNDgsIGE0OAorCWZtdWxkCXUzMiwgdjQ4LCByODAJQyBGSVhNRSBub3QgdXJnZW50CisJZmR0b3gJYTE2LCBhMTYKKwlmZHRveAlhMzIsIGEzMgorCWZkdG94CWE0OCwgYTQ4CisJc3RkCWEwMCwgWyVzcCsyMjIzKzBdCisJc3RkCWExNiwgWyVzcCsyMjIzKzhdCisJc3RkCWEzMiwgWyVzcCsyMjIzKzE2XQorCXN0ZAlhNDgsIFslc3ArMjIyMysyNF0KKwlhZGQJJWkyLCA4LCAlaTIKKworCWZkdG94CXI2NCwgYTAwCisJbGR4CVslaTArJWkyXSwgcmxpbWIJQyByZWFkIHJwW2ldCisJZmR0b3gJcjgwLCBhMTYKKwlsZHgJWyVzcCsyMjIzKzBdLCBpMDAKKwlsZHgJWyVzcCsyMjIzKzhdLCBpMTYKKwlsZHgJWyVzcCsyMjIzKzE2XSwgaTMyCisJbGR4CVslc3ArMjIyMysyNF0sIGk0OAorCXN0ZAlhMDAsIFslc3ArMjIyMyswXQorCXN0ZAlhMTYsIFslc3ArMjIyMys4XQorCWFkZAklaTIsIDgsICVpMgorCisJc3JseAlybGltYiwgMzIsICVnNAkJQyBISShybGltYikKKwlhbmQJcmxpbWIsIHhmZmZmZmZmZiwgJWc1CUMgTE8ocmxpbWIpCisJYWRkCWkwMCwgJWc1LCAlZzUJCUMgaTAwKyBub3cgaW4gZzUKKwlsZHgJWyVzcCsyMjIzKzBdLCBpMDAKKwlzcmx4CWkxNiwgNDgsICVsNAkJQyAoaTE2ID4+IDQ4KQorCW1vdglpMTYsICVnMgorCWxkeAlbJXNwKzIyMjMrOF0sIGkxNgorCXNybHgJaTQ4LCAxNiwgJWw1CQlDIChpNDggPj4gMTYpCisJYWRkCWkzMiwgJWc0LCAlZzQJCUMgaTMyKyBub3cgaW4gZzQKKwlzbGx4CWk0OCwgMzIsICVsNgkJQyAoaTQ4IDw8IDMyKQorCXNybHgJJWc0LCAzMiwgJW8zCQlDIChpMzIgPj4gMzIpCisJYWRkCSVsNSwgJWw0LCAlbzEJCUMgaGk2NC0gaW4gJW8xCisJc3RkCWEwMCwgWyVzcCsyMjIzKzBdCisJc2xseAklZzQsIDE2LCAlbzIJCUMgKGkzMiA8PCAxNikKKwlhZGQJJW8zLCAlbzEsICVvMQkJQyBoaTY0IGluICVvMSAgIDFzdCBBU1NJR05NRU5UCisJc3RkCWExNiwgWyVzcCsyMjIzKzhdCisJc2xseAklbzEsIDQ4LCAlbzMJCUMgKGhpNjQgPDwgNDgpCisJYWRkCSVnMiwgJW8yLCAlbzIJCUMgbWk2NC0gaW4gJW8yCisJYWRkCSVsNiwgJW8yLCAlbzIJCUMgbWk2NC0gaW4gJW8yCisJc3ViCSVvMiwgJW8zLCAlbzIJCUMgbWk2NCBpbiAlbzIgICAxc3QgQVNTSUdOTUVOVAorCWFkZAljeSwgJWc1LCAlbzQJCUMgeCA9IHByZXYoaTAwKSArIGN5CisJYgkuTF9vdXRfMQorCWFkZAklaTIsIDgsICVpMgorCisuTF90d29fb3JfbW9yZToKKwlsZAlbJWk1KyVpMl0sICVmMwkJQyByZWFkIGxvdyAzMiBiaXRzIG9mIHVwW2ldCisJZm11bGQJdTMyLCB2MzIsIHI2NAlDIEZJWE1FIG5vdCB1cmdlbnQKKwlmYWRkZAlwMzIsIHIzMiwgYTMyCisJbGQJWyVpMSslaTJdLCAlZjUJCUMgcmVhZCBoaWdoIDMyIGJpdHMgb2YgdXBbaV0KKwlmZHRveAlhMDAsIGEwMAorCWZhZGRkCXA0OCwgcjQ4LCBhNDgKKwlmbXVsZAl1MzIsIHY0OCwgcjgwCUMgRklYTUUgbm90IHVyZ2VudAorCWZkdG94CWExNiwgYTE2CisJZmR0b3gJYTMyLCBhMzIKKwlmeHRvZAklZjIsIHUwMAorCWZ4dG9kCSVmNCwgdTMyCisJZmR0b3gJYTQ4LCBhNDgKKwlzdGQJYTAwLCBbJXNwKzIyMjMrMF0KKwlmbXVsZAl1MDAsIHYwMCwgcDAwCisJc3RkCWExNiwgWyVzcCsyMjIzKzhdCisJZm11bGQJdTAwLCB2MTYsIHAxNgorCXN0ZAlhMzIsIFslc3ArMjIyMysxNl0KKwlmbXVsZAl1MDAsIHYzMiwgcDMyCisJc3RkCWE0OCwgWyVzcCsyMjIzKzI0XQorCWZhZGRkCXAwMCwgcjY0LCBhMDAKKwlmbXVsZAl1MzIsIHYwMCwgcjMyCisJZmFkZGQJcDE2LCByODAsIGExNgorCWZtdWxkCXUwMCwgdjQ4LCBwNDgKKwlhZGRjYwklaTIsIDgsICVpMgorCWJueixwdAkleGNjLCAuTF90aHJlZV9vcl9tb3JlCisJZm11bGQJdTMyLCB2MTYsIHI0OAorCisuTF90d286CisJZm11bGQJdTMyLCB2MzIsIHI2NAlDIEZJWE1FIG5vdCB1cmdlbnQKKwlmYWRkZAlwMzIsIHIzMiwgYTMyCisJZmR0b3gJYTAwLCBhMDAKKwlsZHgJWyVpMCslaTJdLCBybGltYglDIHJlYWQgcnBbaV0KKwlmYWRkZAlwNDgsIHI0OCwgYTQ4CisJZm11bGQJdTMyLCB2NDgsIHI4MAlDIEZJWE1FIG5vdCB1cmdlbnQKKwlmZHRveAlhMTYsIGExNgorCWxkeAlbJXNwKzIyMjMrMF0sIGkwMAorCWZkdG94CWEzMiwgYTMyCisJbGR4CVslc3ArMjIyMys4XSwgaTE2CisJbGR4CVslc3ArMjIyMysxNl0sIGkzMgorCWxkeAlbJXNwKzIyMjMrMjRdLCBpNDgKKwlmZHRveAlhNDgsIGE0OAorCXN0ZAlhMDAsIFslc3ArMjIyMyswXQorCXN0ZAlhMTYsIFslc3ArMjIyMys4XQorCXN0ZAlhMzIsIFslc3ArMjIyMysxNl0KKwlzdGQJYTQ4LCBbJXNwKzIyMjMrMjRdCisJYWRkCSVpMiwgOCwgJWkyCisKKwlmZHRveAlyNjQsIGEwMAorCXNybHgJcmxpbWIsIDMyLCAlZzQJCUMgSEkocmxpbWIpCisJYW5kCXJsaW1iLCB4ZmZmZmZmZmYsICVnNQlDIExPKHJsaW1iKQorCWxkeAlbJWkwKyVpMl0sIHJsaW1iCUMgcmVhZCBycFtpXQorCWFkZAlpMDAsICVnNSwgJWc1CQlDIGkwMCsgbm93IGluIGc1CisJZmR0b3gJcjgwLCBhMTYKKwlsZHgJWyVzcCsyMjIzKzBdLCBpMDAKKwlzcmx4CWkxNiwgNDgsICVsNAkJQyAoaTE2ID4+IDQ4KQorCW1vdglpMTYsICVnMgorCWxkeAlbJXNwKzIyMjMrOF0sIGkxNgorCXNybHgJaTQ4LCAxNiwgJWw1CQlDIChpNDggPj4gMTYpCisJYWRkCWkzMiwgJWc0LCAlZzQJCUMgaTMyKyBub3cgaW4gZzQKKwlsZHgJWyVzcCsyMjIzKzE2XSwgaTMyCisJc2xseAlpNDgsIDMyLCAlbDYJCUMgKGk0OCA8PCAzMikKKwlsZHgJWyVzcCsyMjIzKzI0XSwgaTQ4CisJc3JseAklZzQsIDMyLCAlbzMJCUMgKGkzMiA+PiAzMikKKwlhZGQJJWw1LCAlbDQsICVvMQkJQyBoaTY0LSBpbiAlbzEKKwlzdGQJYTAwLCBbJXNwKzIyMjMrMF0KKwlzbGx4CSVnNCwgMTYsICVvMgkJQyAoaTMyIDw8IDE2KQorCWFkZAklbzMsICVvMSwgJW8xCQlDIGhpNjQgaW4gJW8xICAgMXN0IEFTU0lHTk1FTlQKKwlzdGQJYTE2LCBbJXNwKzIyMjMrOF0KKwlzbGx4CSVvMSwgNDgsICVvMwkJQyAoaGk2NCA8PCA0OCkKKwlhZGQJJWcyLCAlbzIsICVvMgkJQyBtaTY0LSBpbiAlbzIKKwlhZGQJJWw2LCAlbzIsICVvMgkJQyBtaTY0LSBpbiAlbzIKKwlzdWIJJW8yLCAlbzMsICVvMgkJQyBtaTY0IGluICVvMiAgIDFzdCBBU1NJR05NRU5UCisJYWRkCWN5LCAlZzUsICVvNAkJQyB4ID0gcHJldihpMDApICsgY3kKKwliCS5MX291dF8yCisJYWRkCSVpMiwgOCwgJWkyCisKKy5MX3RocmVlX29yX21vcmU6CisJbGQJWyVpNSslaTJdLCAlZjMJCUMgcmVhZCBsb3cgMzIgYml0cyBvZiB1cFtpXQorCWZtdWxkCXUzMiwgdjMyLCByNjQJQyBGSVhNRSBub3QgdXJnZW50CisJZmFkZGQJcDMyLCByMzIsIGEzMgorCWxkCVslaTErJWkyXSwgJWY1CQlDIHJlYWQgaGlnaCAzMiBiaXRzIG9mIHVwW2ldCisJZmR0b3gJYTAwLCBhMDAKKwlsZHgJWyVpMCslaTJdLCBybGltYglDIHJlYWQgcnBbaV0KKwlmYWRkZAlwNDgsIHI0OCwgYTQ4CisJZm11bGQJdTMyLCB2NDgsIHI4MAlDIEZJWE1FIG5vdCB1cmdlbnQKKwlmZHRveAlhMTYsIGExNgorCWxkeAlbJXNwKzIyMjMrMF0sIGkwMAorCWZkdG94CWEzMiwgYTMyCisJbGR4CVslc3ArMjIyMys4XSwgaTE2CisJZnh0b2QJJWYyLCB1MDAKKwlsZHgJWyVzcCsyMjIzKzE2XSwgaTMyCisJZnh0b2QJJWY0LCB1MzIKKwlsZHgJWyVzcCsyMjIzKzI0XSwgaTQ4CisJZmR0b3gJYTQ4LCBhNDgKKwlzdGQJYTAwLCBbJXNwKzIyMjMrMF0KKwlmbXVsZAl1MDAsIHYwMCwgcDAwCisJc3RkCWExNiwgWyVzcCsyMjIzKzhdCisJZm11bGQJdTAwLCB2MTYsIHAxNgorCXN0ZAlhMzIsIFslc3ArMjIyMysxNl0KKwlmbXVsZAl1MDAsIHYzMiwgcDMyCisJc3RkCWE0OCwgWyVzcCsyMjIzKzI0XQorCWZhZGRkCXAwMCwgcjY0LCBhMDAKKwlmbXVsZAl1MzIsIHYwMCwgcjMyCisJZmFkZGQJcDE2LCByODAsIGExNgorCWZtdWxkCXUwMCwgdjQ4LCBwNDgKKwlhZGRjYwklaTIsIDgsICVpMgorCWJueixwdAkleGNjLCAuTF9mb3VyX29yX21vcmUKKwlmbXVsZAl1MzIsIHYxNiwgcjQ4CisKKy5MX3RocmVlOgorCWZtdWxkCXUzMiwgdjMyLCByNjQJQyBGSVhNRSBub3QgdXJnZW50CisJZmFkZGQJcDMyLCByMzIsIGEzMgorCWZkdG94CWEwMCwgYTAwCisJc3JseAlybGltYiwgMzIsICVnNAkJQyBISShybGltYikKKwlhbmQJcmxpbWIsIHhmZmZmZmZmZiwgJWc1CUMgTE8ocmxpbWIpCisJbGR4CVslaTArJWkyXSwgcmxpbWIJQyByZWFkIHJwW2ldCisJZmFkZGQJcDQ4LCByNDgsIGE0OAorCWFkZAlpMDAsICVnNSwgJWc1CQlDIGkwMCsgbm93IGluIGc1CisJZm11bGQJdTMyLCB2NDgsIHI4MAlDIEZJWE1FIG5vdCB1cmdlbnQKKwlmZHRveAlhMTYsIGExNgorCWxkeAlbJXNwKzIyMjMrMF0sIGkwMAorCWZkdG94CWEzMiwgYTMyCisJc3JseAlpMTYsIDQ4LCAlbDQJCUMgKGkxNiA+PiA0OCkKKwltb3YJaTE2LCAlZzIKKwlsZHgJWyVzcCsyMjIzKzhdLCBpMTYKKwlzcmx4CWk0OCwgMTYsICVsNQkJQyAoaTQ4ID4+IDE2KQorCWFkZAlpMzIsICVnNCwgJWc0CQlDIGkzMisgbm93IGluIGc0CisJbGR4CVslc3ArMjIyMysxNl0sIGkzMgorCXNsbHgJaTQ4LCAzMiwgJWw2CQlDIChpNDggPDwgMzIpCisJbGR4CVslc3ArMjIyMysyNF0sIGk0OAorCWZkdG94CWE0OCwgYTQ4CisJc3JseAklZzQsIDMyLCAlbzMJCUMgKGkzMiA+PiAzMikKKwlhZGQJJWw1LCAlbDQsICVvMQkJQyBoaTY0LSBpbiAlbzEKKwlzdGQJYTAwLCBbJXNwKzIyMjMrMF0KKwlzbGx4CSVnNCwgMTYsICVvMgkJQyAoaTMyIDw8IDE2KQorCWFkZAklbzMsICVvMSwgJW8xCQlDIGhpNjQgaW4gJW8xICAgMXN0IEFTU0lHTk1FTlQKKwlzdGQJYTE2LCBbJXNwKzIyMjMrOF0KKwlzbGx4CSVvMSwgNDgsICVvMwkJQyAoaGk2NCA8PCA0OCkKKwlhZGQJJWcyLCAlbzIsICVvMgkJQyBtaTY0LSBpbiAlbzIKKwlzdGQJYTMyLCBbJXNwKzIyMjMrMTZdCisJYWRkCSVsNiwgJW8yLCAlbzIJCUMgbWk2NC0gaW4gJW8yCisJc3RkCWE0OCwgWyVzcCsyMjIzKzI0XQorCXN1YgklbzIsICVvMywgJW8yCQlDIG1pNjQgaW4gJW8yICAgMXN0IEFTU0lHTk1FTlQKKwlhZGQJY3ksICVnNSwgJW80CQlDIHggPSBwcmV2KGkwMCkgKyBjeQorCWIJLkxfb3V0XzMKKwlhZGQJJWkyLCA4LCAlaTIKKworLkxfZm91cl9vcl9tb3JlOgorCWxkCVslaTUrJWkyXSwgJWYzCQlDIHJlYWQgbG93IDMyIGJpdHMgb2YgdXBbaV0KKwlmbXVsZAl1MzIsIHYzMiwgcjY0CUMgRklYTUUgbm90IHVyZ2VudAorCWZhZGRkCXAzMiwgcjMyLCBhMzIKKwlsZAlbJWkxKyVpMl0sICVmNQkJQyByZWFkIGhpZ2ggMzIgYml0cyBvZiB1cFtpXQorCWZkdG94CWEwMCwgYTAwCisJc3JseAlybGltYiwgMzIsICVnNAkJQyBISShybGltYikKKwlhbmQJcmxpbWIsIHhmZmZmZmZmZiwgJWc1CUMgTE8ocmxpbWIpCisJbGR4CVslaTArJWkyXSwgcmxpbWIJQyByZWFkIHJwW2ldCisJZmFkZGQJcDQ4LCByNDgsIGE0OAorCWFkZAlpMDAsICVnNSwgJWc1CQlDIGkwMCsgbm93IGluIGc1CisJZm11bGQJdTMyLCB2NDgsIHI4MAlDIEZJWE1FIG5vdCB1cmdlbnQKKwlmZHRveAlhMTYsIGExNgorCWxkeAlbJXNwKzIyMjMrMF0sIGkwMAorCWZkdG94CWEzMiwgYTMyCisJc3JseAlpMTYsIDQ4LCAlbDQJCUMgKGkxNiA+PiA0OCkKKwltb3YJaTE2LCAlZzIKKwlsZHgJWyVzcCsyMjIzKzhdLCBpMTYKKwlmeHRvZAklZjIsIHUwMAorCXNybHgJaTQ4LCAxNiwgJWw1CQlDIChpNDggPj4gMTYpCisJYWRkCWkzMiwgJWc0LCAlZzQJCUMgaTMyKyBub3cgaW4gZzQKKwlsZHgJWyVzcCsyMjIzKzE2XSwgaTMyCisJZnh0b2QJJWY0LCB1MzIKKwlzbGx4CWk0OCwgMzIsICVsNgkJQyAoaTQ4IDw8IDMyKQorCWxkeAlbJXNwKzIyMjMrMjRdLCBpNDgKKwlmZHRveAlhNDgsIGE0OAorCXNybHgJJWc0LCAzMiwgJW8zCQlDIChpMzIgPj4gMzIpCisJYWRkCSVsNSwgJWw0LCAlbzEJCUMgaGk2NC0gaW4gJW8xCisJc3RkCWEwMCwgWyVzcCsyMjIzKzBdCisJZm11bGQJdTAwLCB2MDAsIHAwMAorCXNsbHgJJWc0LCAxNiwgJW8yCQlDIChpMzIgPDwgMTYpCisJYWRkCSVvMywgJW8xLCAlbzEJCUMgaGk2NCBpbiAlbzEgICAxc3QgQVNTSUdOTUVOVAorCXN0ZAlhMTYsIFslc3ArMjIyMys4XQorCWZtdWxkCXUwMCwgdjE2LCBwMTYKKwlzbGx4CSVvMSwgNDgsICVvMwkJQyAoaGk2NCA8PCA0OCkKKwlhZGQJJWcyLCAlbzIsICVvMgkJQyBtaTY0LSBpbiAlbzIKKwlzdGQJYTMyLCBbJXNwKzIyMjMrMTZdCisJZm11bGQJdTAwLCB2MzIsIHAzMgorCWFkZAklbDYsICVvMiwgJW8yCQlDIG1pNjQtIGluICVvMgorCXN0ZAlhNDgsIFslc3ArMjIyMysyNF0KKwlmYWRkZAlwMDAsIHI2NCwgYTAwCisJZm11bGQJdTMyLCB2MDAsIHIzMgorCXN1YgklbzIsICVvMywgJW8yCQlDIG1pNjQgaW4gJW8yICAgMXN0IEFTU0lHTk1FTlQKKwlmYWRkZAlwMTYsIHI4MCwgYTE2CisJZm11bGQJdTAwLCB2NDgsIHA0OAorCWFkZAljeSwgJWc1LCAlbzQJCUMgeCA9IHByZXYoaTAwKSArIGN5CisJYWRkY2MJJWkyLCA4LCAlaTIKKwlibnoscHQJJXhjYywgLkxvb3AKKwlmbXVsZAl1MzIsIHYxNiwgcjQ4CisKKy5MX2ZvdXI6CisJYixhCS5MX291dF80CisKK0MgQkVHSU4gTUFJTiBMT09QCisJLmFsaWduCTE2CisuTG9vcDoKK0MgMDAKKwlzcmx4CSVvNCwgMTYsICVvNQkJQyAoeCA+PiAxNikKKwlsZAlbJWk1KyVpMl0sICVmMwkJQyByZWFkIGxvdyAzMiBiaXRzIG9mIHVwW2ldCisJZm11bGQJdTMyLCB2MzIsIHI2NAlDIEZJWE1FIG5vdCB1cmdlbnQKKwlmYWRkZAlwMzIsIHIzMiwgYTMyCitDIDAxCisJYWRkCSVvNSwgJW8yLCAlbzIJCUMgbWk2NCBpbiAlbzIgICAybmQgQVNTSUdOTUVOVAorCWFuZAklbzQsIHhmZmZmLCAlbzUJCUMgKHggJiAweGZmZmYpCisJbGQJWyVpMSslaTJdLCAlZjUJCUMgcmVhZCBoaWdoIDMyIGJpdHMgb2YgdXBbaV0KKwlmZHRveAlhMDAsIGEwMAorQyAwMgorCXNybHgJcmxpbWIsIDMyLCAlZzQJCUMgSEkocmxpbWIpCisJYW5kCXJsaW1iLCB4ZmZmZmZmZmYsICVnNQlDIExPKHJsaW1iKQorCWxkeAlbJWkwKyVpMl0sIHJsaW1iCUMgcmVhZCBycFtpXQorCWZhZGRkCXA0OCwgcjQ4LCBhNDgKK0MgMDMKKwlzcmx4CSVvMiwgNDgsICVvNwkJQyAobWk2NCA+PiA0OCkKKwlhZGQJaTAwLCAlZzUsICVnNQkJQyBpMDArIG5vdyBpbiBnNQorCWZtdWxkCXUzMiwgdjQ4LCByODAJQyBGSVhNRSBub3QgdXJnZW50CisJZmR0b3gJYTE2LCBhMTYKK0MgMDQKKwlzbGx4CSVvMiwgMTYsICVpMwkJQyAobWk2NCA8PCAxNikKKwlhZGQJJW83LCAlbzEsIGN5CQlDIG5ldyBjeQorCWxkeAlbJXNwKzIyMjMrMF0sIGkwMAorCWZkdG94CWEzMiwgYTMyCitDIDA1CisJc3JseAlpMTYsIDQ4LCAlbDQJCUMgKGkxNiA+PiA0OCkKKwltb3YJaTE2LCAlZzIKKwlsZHgJWyVzcCsyMjIzKzhdLCBpMTYKKwlmeHRvZAklZjIsIHUwMAorQyAwNgorCXNybHgJaTQ4LCAxNiwgJWw1CQlDIChpNDggPj4gMTYpCisJYWRkCWkzMiwgJWc0LCAlZzQJCUMgaTMyKyBub3cgaW4gZzQKKwlsZHgJWyVzcCsyMjIzKzE2XSwgaTMyCisJZnh0b2QJJWY0LCB1MzIKK0MgMDcKKwlzbGx4CWk0OCwgMzIsICVsNgkJQyAoaTQ4IDw8IDMyKQorCW9yCSVpMywgJW81LCAlbzUKKwlsZHgJWyVzcCsyMjIzKzI0XSwgaTQ4CisJZmR0b3gJYTQ4LCBhNDgKK0MgMDgKKwlzcmx4CSVnNCwgMzIsICVvMwkJQyAoaTMyID4+IDMyKQorCWFkZAklbDUsICVsNCwgJW8xCQlDIGhpNjQtIGluICVvMQorCXN0ZAlhMDAsIFslc3ArMjIyMyswXQorCWZtdWxkCXUwMCwgdjAwLCBwMDAKK0MgMDkKKwlzbGx4CSVnNCwgMTYsICVvMgkJQyAoaTMyIDw8IDE2KQorCWFkZAklbzMsICVvMSwgJW8xCQlDIGhpNjQgaW4gJW8xICAgMXN0IEFTU0lHTk1FTlQKKwlzdGQJYTE2LCBbJXNwKzIyMjMrOF0KKwlmbXVsZAl1MDAsIHYxNiwgcDE2CitDIDEwCisJc2xseAklbzEsIDQ4LCAlbzMJCUMgKGhpNjQgPDwgNDgpCisJYWRkCSVnMiwgJW8yLCAlbzIJCUMgbWk2NC0gaW4gJW8yCisJc3RkCWEzMiwgWyVzcCsyMjIzKzE2XQorCWZtdWxkCXUwMCwgdjMyLCBwMzIKK0MgMTEKKwlhZGQJJWw2LCAlbzIsICVvMgkJQyBtaTY0LSBpbiAlbzIKKwlzdGQJYTQ4LCBbJXNwKzIyMjMrMjRdCisJZmFkZGQJcDAwLCByNjQsIGEwMAorCWZtdWxkCXUzMiwgdjAwLCByMzIKK0MgMTIKKwlzdWIJJW8yLCAlbzMsICVvMgkJQyBtaTY0IGluICVvMiAgIDFzdCBBU1NJR05NRU5UCisJc3R4CSVvNSwgWyVpNCslaTJdCisJZmFkZGQJcDE2LCByODAsIGExNgorCWZtdWxkCXUwMCwgdjQ4LCBwNDgKK0MgMTMKKwlhZGQJY3ksICVnNSwgJW80CQlDIHggPSBwcmV2KGkwMCkgKyBjeQorCWFkZGNjCSVpMiwgOCwgJWkyCisJYm56LHB0CSV4Y2MsIC5Mb29wCisJZm11bGQJdTMyLCB2MTYsIHI0OAorQyBFTkQgTUFJTiBMT09QCisKKy5MX291dF80OgorCXNybHgJJW80LCAxNiwgJW81CQlDICh4ID4+IDE2KQorCWZtdWxkCXUzMiwgdjMyLCByNjQJQyBGSVhNRSBub3QgdXJnZW50CisJZmFkZGQJcDMyLCByMzIsIGEzMgorCWFkZAklbzUsICVvMiwgJW8yCQlDIG1pNjQgaW4gJW8yICAgMm5kIEFTU0lHTk1FTlQKKwlhbmQJJW80LCB4ZmZmZiwgJW81CQlDICh4ICYgMHhmZmZmKQorCWZkdG94CWEwMCwgYTAwCisJc3JseAlybGltYiwgMzIsICVnNAkJQyBISShybGltYikKKwlhbmQJcmxpbWIsIHhmZmZmZmZmZiwgJWc1CUMgTE8ocmxpbWIpCisJbGR4CVslaTArJWkyXSwgcmxpbWIJQyByZWFkIHJwW2ldCisJZmFkZGQJcDQ4LCByNDgsIGE0OAorCXNybHgJJW8yLCA0OCwgJW83CQlDIChtaTY0ID4+IDQ4KQorCWFkZAlpMDAsICVnNSwgJWc1CQlDIGkwMCsgbm93IGluIGc1CisJZm11bGQJdTMyLCB2NDgsIHI4MAlDIEZJWE1FIG5vdCB1cmdlbnQKKwlmZHRveAlhMTYsIGExNgorCXNsbHgJJW8yLCAxNiwgJWkzCQlDIChtaTY0IDw8IDE2KQorCWFkZAklbzcsICVvMSwgY3kJCUMgbmV3IGN5CisJbGR4CVslc3ArMjIyMyswXSwgaTAwCisJZmR0b3gJYTMyLCBhMzIKKwlzcmx4CWkxNiwgNDgsICVsNAkJQyAoaTE2ID4+IDQ4KQorCW1vdglpMTYsICVnMgorCWxkeAlbJXNwKzIyMjMrOF0sIGkxNgorCXNybHgJaTQ4LCAxNiwgJWw1CQlDIChpNDggPj4gMTYpCisJYWRkCWkzMiwgJWc0LCAlZzQJCUMgaTMyKyBub3cgaW4gZzQKKwlsZHgJWyVzcCsyMjIzKzE2XSwgaTMyCisJc2xseAlpNDgsIDMyLCAlbDYJCUMgKGk0OCA8PCAzMikKKwlvcgklaTMsICVvNSwgJW81CisJbGR4CVslc3ArMjIyMysyNF0sIGk0OAorCWZkdG94CWE0OCwgYTQ4CisJc3JseAklZzQsIDMyLCAlbzMJCUMgKGkzMiA+PiAzMikKKwlhZGQJJWw1LCAlbDQsICVvMQkJQyBoaTY0LSBpbiAlbzEKKwlzdGQJYTAwLCBbJXNwKzIyMjMrMF0KKwlzbGx4CSVnNCwgMTYsICVvMgkJQyAoaTMyIDw8IDE2KQorCWFkZAklbzMsICVvMSwgJW8xCQlDIGhpNjQgaW4gJW8xICAgMXN0IEFTU0lHTk1FTlQKKwlzdGQJYTE2LCBbJXNwKzIyMjMrOF0KKwlzbGx4CSVvMSwgNDgsICVvMwkJQyAoaGk2NCA8PCA0OCkKKwlhZGQJJWcyLCAlbzIsICVvMgkJQyBtaTY0LSBpbiAlbzIKKwlzdGQJYTMyLCBbJXNwKzIyMjMrMTZdCisJYWRkCSVsNiwgJW8yLCAlbzIJCUMgbWk2NC0gaW4gJW8yCisJc3RkCWE0OCwgWyVzcCsyMjIzKzI0XQorCXN1YgklbzIsICVvMywgJW8yCQlDIG1pNjQgaW4gJW8yICAgMXN0IEFTU0lHTk1FTlQKKwlzdHgJJW81LCBbJWk0KyVpMl0KKwlhZGQJY3ksICVnNSwgJW80CQlDIHggPSBwcmV2KGkwMCkgKyBjeQorCWFkZAklaTIsIDgsICVpMgorLkxfb3V0XzM6CisJc3JseAklbzQsIDE2LCAlbzUJCUMgKHggPj4gMTYpCisJYWRkCSVvNSwgJW8yLCAlbzIJCUMgbWk2NCBpbiAlbzIgICAybmQgQVNTSUdOTUVOVAorCWFuZAklbzQsIHhmZmZmLCAlbzUJCUMgKHggJiAweGZmZmYpCisJZmR0b3gJcjY0LCBhMDAKKwlzcmx4CXJsaW1iLCAzMiwgJWc0CQlDIEhJKHJsaW1iKQorCWFuZAlybGltYiwgeGZmZmZmZmZmLCAlZzUJQyBMTyhybGltYikKKwlsZHgJWyVpMCslaTJdLCBybGltYglDIHJlYWQgcnBbaV0KKwlzcmx4CSVvMiwgNDgsICVvNwkJQyAobWk2NCA+PiA0OCkKKwlhZGQJaTAwLCAlZzUsICVnNQkJQyBpMDArIG5vdyBpbiBnNQorCWZkdG94CXI4MCwgYTE2CisJc2xseAklbzIsIDE2LCAlaTMJCUMgKG1pNjQgPDwgMTYpCisJYWRkCSVvNywgJW8xLCBjeQkJQyBuZXcgY3kKKwlsZHgJWyVzcCsyMjIzKzBdLCBpMDAKKwlzcmx4CWkxNiwgNDgsICVsNAkJQyAoaTE2ID4+IDQ4KQorCW1vdglpMTYsICVnMgorCWxkeAlbJXNwKzIyMjMrOF0sIGkxNgorCXNybHgJaTQ4LCAxNiwgJWw1CQlDIChpNDggPj4gMTYpCisJYWRkCWkzMiwgJWc0LCAlZzQJCUMgaTMyKyBub3cgaW4gZzQKKwlsZHgJWyVzcCsyMjIzKzE2XSwgaTMyCisJc2xseAlpNDgsIDMyLCAlbDYJCUMgKGk0OCA8PCAzMikKKwlvcgklaTMsICVvNSwgJW81CisJbGR4CVslc3ArMjIyMysyNF0sIGk0OAorCXNybHgJJWc0LCAzMiwgJW8zCQlDIChpMzIgPj4gMzIpCisJYWRkCSVsNSwgJWw0LCAlbzEJCUMgaGk2NC0gaW4gJW8xCisJc3RkCWEwMCwgWyVzcCsyMjIzKzBdCisJc2xseAklZzQsIDE2LCAlbzIJCUMgKGkzMiA8PCAxNikKKwlhZGQJJW8zLCAlbzEsICVvMQkJQyBoaTY0IGluICVvMSAgIDFzdCBBU1NJR05NRU5UCisJc3RkCWExNiwgWyVzcCsyMjIzKzhdCisJc2xseAklbzEsIDQ4LCAlbzMJCUMgKGhpNjQgPDwgNDgpCisJYWRkCSVnMiwgJW8yLCAlbzIJCUMgbWk2NC0gaW4gJW8yCisJYWRkCSVsNiwgJW8yLCAlbzIJCUMgbWk2NC0gaW4gJW8yCisJc3ViCSVvMiwgJW8zLCAlbzIJCUMgbWk2NCBpbiAlbzIgICAxc3QgQVNTSUdOTUVOVAorCXN0eAklbzUsIFslaTQrJWkyXQorCWFkZAljeSwgJWc1LCAlbzQJCUMgeCA9IHByZXYoaTAwKSArIGN5CisJYWRkCSVpMiwgOCwgJWkyCisuTF9vdXRfMjoKKwlzcmx4CSVvNCwgMTYsICVvNQkJQyAoeCA+PiAxNikKKwlhZGQJJW81LCAlbzIsICVvMgkJQyBtaTY0IGluICVvMiAgIDJuZCBBU1NJR05NRU5UCisJYW5kCSVvNCwgeGZmZmYsICVvNQkJQyAoeCAmIDB4ZmZmZikKKwlzcmx4CXJsaW1iLCAzMiwgJWc0CQlDIEhJKHJsaW1iKQorCWFuZAlybGltYiwgeGZmZmZmZmZmLCAlZzUJQyBMTyhybGltYikKKwlzcmx4CSVvMiwgNDgsICVvNwkJQyAobWk2NCA+PiA0OCkKKwlhZGQJaTAwLCAlZzUsICVnNQkJQyBpMDArIG5vdyBpbiBnNQorCXNsbHgJJW8yLCAxNiwgJWkzCQlDIChtaTY0IDw8IDE2KQorCWFkZAklbzcsICVvMSwgY3kJCUMgbmV3IGN5CisJbGR4CVslc3ArMjIyMyswXSwgaTAwCisJc3JseAlpMTYsIDQ4LCAlbDQJCUMgKGkxNiA+PiA0OCkKKwltb3YJaTE2LCAlZzIKKwlsZHgJWyVzcCsyMjIzKzhdLCBpMTYKKwlzcmx4CWk0OCwgMTYsICVsNQkJQyAoaTQ4ID4+IDE2KQorCWFkZAlpMzIsICVnNCwgJWc0CQlDIGkzMisgbm93IGluIGc0CisJc2xseAlpNDgsIDMyLCAlbDYJCUMgKGk0OCA8PCAzMikKKwlvcgklaTMsICVvNSwgJW81CisJc3JseAklZzQsIDMyLCAlbzMJCUMgKGkzMiA+PiAzMikKKwlhZGQJJWw1LCAlbDQsICVvMQkJQyBoaTY0LSBpbiAlbzEKKwlzbGx4CSVnNCwgMTYsICVvMgkJQyAoaTMyIDw8IDE2KQorCWFkZAklbzMsICVvMSwgJW8xCQlDIGhpNjQgaW4gJW8xICAgMXN0IEFTU0lHTk1FTlQKKwlzbGx4CSVvMSwgNDgsICVvMwkJQyAoaGk2NCA8PCA0OCkKKwlhZGQJJWcyLCAlbzIsICVvMgkJQyBtaTY0LSBpbiAlbzIKKwlhZGQJJWw2LCAlbzIsICVvMgkJQyBtaTY0LSBpbiAlbzIKKwlzdWIJJW8yLCAlbzMsICVvMgkJQyBtaTY0IGluICVvMiAgIDFzdCBBU1NJR05NRU5UCisJc3R4CSVvNSwgWyVpNCslaTJdCisJYWRkCWN5LCAlZzUsICVvNAkJQyB4ID0gcHJldihpMDApICsgY3kKKwlhZGQJJWkyLCA4LCAlaTIKKy5MX291dF8xOgorCXNybHgJJW80LCAxNiwgJW81CQlDICh4ID4+IDE2KQorCWFkZAklbzUsICVvMiwgJW8yCQlDIG1pNjQgaW4gJW8yICAgMm5kIEFTU0lHTk1FTlQKKwlhbmQJJW80LCB4ZmZmZiwgJW81CQlDICh4ICYgMHhmZmZmKQorCXNybHgJJW8yLCA0OCwgJW83CQlDIChtaTY0ID4+IDQ4KQorCXNsbHgJJW8yLCAxNiwgJWkzCQlDIChtaTY0IDw8IDE2KQorCWFkZAklbzcsICVvMSwgY3kJCUMgbmV3IGN5CisJb3IJJWkzLCAlbzUsICVvNQorCXN0eAklbzUsIFslaTQrJWkyXQorCisJc2xseAlpMDAsIDAsICVnMgorCWFkZAklZzIsIGN5LCBjeQorCXNsbHgJaTE2LCAxNiwgJWczCisJYWRkCSVnMywgY3ksIGN5CisKKwlyZXR1cm4JJWk3KzgKKwltb3YJY3ksICVvMAorRVBJTE9HVUUobXBuX2FkZG11bF8xKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmMxMjM0L2FkZG11bF8yLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjMTIzNC9hZGRtdWxfMi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc2NzRkNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjMTIzNC9hZGRtdWxfMi5hc20KQEAgLTAsMCArMSw1NTEgQEAKK2RubCAgU1BBUkMgdjkgNjQtYml0IG1wbl9hZGRtdWxfMiAtLSBNdWx0aXBseSBhbiBuIGxpbWIgbnVtYmVyIHdpdGggMi1saW1iCitkbmwgIG51bWJlciBhbmQgYWRkIHRoZSByZXN1bHQgdG8gYSBuIGxpbWIgdmVjdG9yLgorCitkbmwgIENvcHlyaWdodCAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICAgICAgICAgICBjeWNsZXMvbGltYgorQyBVbHRyYVNQQVJDIDEmMjogICAgICA5CitDIFVsdHJhU1BBUkMgMzogICAgICAgMTAKKworQyBBbGdvcml0aG06IFdlIHVzZSAxNiBmbG9hdGluZy1wb2ludCBtdWx0aXBsaWVzIHBlciBsaW1iIHByb2R1Y3QsIHdpdGggdGhlCitDIDItbGltYiB2IG9wZXJhbmQgc3BsaXQgaW50byBlaWdodCAxNi1iaXQgcGllY2VzLCBhbmQgdGhlIG4tbGltYiB1IG9wZXJhbmQKK0Mgc3BsaXQgaW50byAzMi1iaXQgcGllY2VzLiAgV2Ugc3VtIGZvdXIgNDgtYml0IHBhcnRpYWwgcHJvZHVjdHMgdXNpbmcKK0MgZmxvYXRpbmctcG9pbnQgYWRkLCB0aGVuIGNvbnZlcnQgdGhlIHJlc3VsdGluZyBmb3VyIDUwLWJpdCBxdWFudGl0aWVzIGFuZAorQyB0cmFuc2ZlciB0aGVtIHRvIHRoZSBpbnRlZ2VyIHVuaXQuCisKK0MgUG9zc2libGUgb3B0aW1pemF0aW9uczoKK0MgICAxLiBBbGlnbiB0aGUgc3RhY2sgYXJlYSB3aGVyZSB3ZSB0cmFuc2ZlciB0aGUgZm91ciA1MC1iaXQgcHJvZHVjdC1zdW1zCitDICAgICAgdG8gYSAzMi1ieXRlIGJvdW5kYXJ5LiAgVGhhdCB3b3VsZCBtaW5pbWl6ZSB0aGUgY2FjaGUgY29sbGlzaW9uLgorQyAgICAgIChVbHRyYVNQQVJDLTEvMiB1c2UgYSBkaXJlY3QtbWFwcGVkIGNhY2hlLikgIChQZXJoYXBzIGV2ZW4gYmV0dGVyIHdvdWxkCitDICAgICAgYmUgdG8gYWxpZ24gdGhlIGFyZWEgdG8gbWFwIHRvIHRoZSBhcmVhIGltbWVkaWF0ZWx5IGJlZm9yZSB1cD8pCitDICAgMi4gUGVyZm9ybSB0d28gb2YgdGhlIGZwLT5pbnQgY29udmVyc2lvbnMgd2l0aCBpbnRlZ2VyIGluc3RydWN0aW9ucy4gIFdlCitDICAgICAgY2FuIGdldCBhbG1vc3QgdGVuIGZyZWUgSUVVIHNsb3RzLCBpZiB3ZSBjbGVhbiB1cCBib29ra2VlcGluZyBhbmQgdGhlCitDICAgICAgc2lsbHkgY2FycnktbGltYiBjb2RlLgorQyAgIDMuIEZvciBhbiBtcG5fYWRkbXVsXzEgYmFzZWQgb24gdGhpcywgd2UgbmVlZCB0byBmaXggdGhlIHNpbGx5IGNhcnJ5LWxpbWIKK0MgICAgICBjb2RlLgorCitDIE9TUCAoT3ZlcmxhcHBpbmcgc29mdHdhcmUgcGlwZWxpbmUpIHZlcnNpb24gb2YgbXBuX211bF9iYXNlY2FzZToKK0MgT3BlcmFuZCBzd2FwIHdpbGwgcmVxdWlyZSA4IExEREEgYW5kIDggRlhUT0QsIHdoaWNoIHdpbGwgbWVhbiA4IGN5Y2xlcy4KK0MgRkkJPSAyMAorQyBMCT0gIDkgeCB1biAqIHZuCitDIFdERkkJPSAxMCB4IHZuIC8gMgorQyBXRAk9IDQKKworQyBJbnN0cnVjdGlvbiBjbGFzc2lmaWNhdGlvbiAoYXMgcGVyIFVsdHJhU1BBUkMgZnVuY3Rpb25hbCB1bml0cykuCitDIEFzc3VtaW5nIHNpbGx5IGNhcnJ5IGNvZGUgaXMgZml4ZWQuICBJbmNsdWRlcyBib29ra2VlcGluZy4KK0MKK0MgICAgICAgICAgICAgICBtcG5fYWRkbXVsX1ggICAgIG1wbl9tdWxfWAorQyAgICAgICAgICAgICAgICAxICAgICAgIDIgICAgICAgMSAgICAgICAyCitDICAgICAgICAgICAgICAgPT09PT09PT09PSAgICAgID09PT09PT09PT0KK0MgICAgICBGTSAgICAgICAgOCAgICAgIDE2ICAgICAgIDggICAgICAxNgorQyAgICAgIEZBICAgICAgIDEwICAgICAgMTggICAgICAxMCAgICAgIDE4CitDICAgICBNRU0gICAgICAgMTIgICAgICAxMiAgICAgIDEwICAgICAgMTAKK0MgIElTSElGVCAgICAgICAgNiAgICAgICA2ICAgICAgIDYgICAgICAgNgorQyBJQURETE9HICAgICAgIDExICAgICAgMTEgICAgICAxMCAgICAgIDEwCitDICBCUkFOQ0ggICAgICAgIDEgICAgICAgMSAgICAgICAxICAgICAgIDEKK0MKK0MgVE9UQUwgSUVVICAgICAxNyAgICAgIDE3ICAgICAgMTYgICAgICAxNgorQyBUT1RBTCAgICAgICAgIDQ4ICAgICAgNjQgICAgICA0NSAgICAgIDYxCitDCitDIElFVSBjeWNsZXMgICAgIDguNSAgICAgOC41ICAgICA4ICAgICAgIDgKK0MgTUVNIGN5Y2xlcyAgICAxMiAgICAgIDEyICAgICAgMTAgICAgICAxMAorQyBJU1NVRSBjeWNsZXMgIDEyICAgICAgMTYgICAgICAxMS4yNSAgIDE1LjI1CitDIEZQVSBjeWNsZXMgICAgMTAgICAgICAxOCAgICAgIDEwICAgICAgMTgKK0MgY3ljbGVzL2xvb3AgICAxMiAgICAgIDE4ICAgICAgMTIgICAgICAxOAorQyBjeWNsZXMvbGltYiAgIDEyICAgICAgIDkgICAgICAxMiAgICAgICA5CisKKworQyBJTlBVVCBQQVJBTUVURVJTCitDIHJwW24gKyAxXQlpMAorQyB1cFtuXQkJaTEKK0MgbgkJaTIKK0MgdnBbMl0JCWkzCisKKworQVNNX1NUQVJUKCkKKwlSRUdJU1RFUiglZzIsI3NjcmF0Y2gpCisJUkVHSVNURVIoJWczLCNzY3JhdGNoKQorCitDIENvbWJpbmUgcmVnaXN0ZXJzOgorQyB1MDBfaGk9IHUzMl9oaQorQyB1MDBfbG89IHUzMl9sbworQyBhMDAwICA9IG91dDAwMAorQyBhMDE2ICA9IG91dDAxNgorQyBGcmVlOiBmNTIgZjU0CisKKworZGVmaW5lKGBwMDAwJywgYCVmOCcpICBkZWZpbmUoYHAwMTYnLGAlZjEwJykKK2RlZmluZShgcDAzMicsYCVmMTInKSAgZGVmaW5lKGBwMDQ4JyxgJWYxNCcpCitkZWZpbmUoYHAwNjQnLGAlZjE2JykgIGRlZmluZShgcDA4MCcsYCVmMTgnKQorZGVmaW5lKGBwMDk2YScsYCVmMjAnKSBkZWZpbmUoYHAxMTJhJyxgJWYyMicpCitkZWZpbmUoYHAwOTZiJyxgJWY1NicpIGRlZmluZShgcDExMmInLGAlZjU4JykKKworZGVmaW5lKGBvdXQwMDAnLGAlZjAnKSBkZWZpbmUoYG91dDAxNicsYCVmNicpCisKK2RlZmluZShgdjAwMCcsYCVmMjQnKSAgZGVmaW5lKGB2MDE2JyxgJWYyNicpCitkZWZpbmUoYHYwMzInLGAlZjI4JykgIGRlZmluZShgdjA0OCcsYCVmMzAnKQorZGVmaW5lKGB2MDY0JyxgJWY0NCcpICBkZWZpbmUoYHYwODAnLGAlZjQ2JykKK2RlZmluZShgdjA5NicsYCVmNDgnKSAgZGVmaW5lKGB2MTEyJyxgJWY1MCcpCisKK2RlZmluZShgdTAwJyxgJWYzMicpICAgZGVmaW5lKGB1MzInLCBgJWYzNCcpCisKK2RlZmluZShgYTAwMCcsYCVmMzYnKSAgZGVmaW5lKGBhMDE2JyxgJWYzOCcpCitkZWZpbmUoYGEwMzInLGAlZjQwJykgIGRlZmluZShgYTA0OCcsYCVmNDInKQorZGVmaW5lKGBhMDY0JyxgJWY2MCcpICBkZWZpbmUoYGEwODAnLGAlZjYyJykKKworZGVmaW5lKGB1MDBfaGknLGAlZjInKSBkZWZpbmUoYHUzMl9oaScsYCVmNCcpCitkZWZpbmUoYHUwMF9sbycsYCVmMycpIGRlZmluZShgdTMyX2xvJyxgJWY1JykKKworZGVmaW5lKGBjeScsYCVnMScpCitkZWZpbmUoYHJsaW1iJyxgJWczJykKK2RlZmluZShgaTAwJyxgJWwwJykgICAgZGVmaW5lKGBpMTYnLGAlbDEnKQorZGVmaW5lKGByMDAnLGAlbDInKSAgICBkZWZpbmUoYHIzMicsYCVsMycpCitkZWZpbmUoYHhmZmZmZmZmZicsYCVsNycpCitkZWZpbmUoYHhmZmZmJyxgJW8wJykKKworCitQUk9MT0dVRShtcG5fYWRkbXVsXzIpCisKK0MgSW5pdGlhbGl6YXRpb24uICAoMSkgU3BsaXQgdiBvcGVyYW5kIGludG8gZWlnaHQgMTYtYml0IGNodW5rcyBhbmQgc3RvcmUgdGhlbQorQyBhcyBJRUVFIGRvdWJsZSBpbiBmcCByZWdpc3RlcnMuICAoMikgQ2xlYXIgdXBwZXIgMzIgYml0cyBvZiBmcCByZWdpc3RlciBwYWlycworQyBmMiBhbmQgZjQuICAoMykgU3RvcmUgbWFza3MgaW4gcmVnaXN0ZXJzIGFsaWFzZWQgdG8gYHhmZmZmJyBhbmQgYHhmZmZmZmZmZicuCitDIFRoaXMgY29kZSBjb3VsZCBiZSBiZXR0ZXIgc2NoZWR1bGVkLgorCisJc2F2ZQklc3AsIC0yNTYsICVzcAorCitpZmRlZihgSEFWRV9WSVMnLAorYAltb3YJLTEsICVnNAorCXdyCSVnMCwgMHhEMiwgJWFzaQorCXNybHgJJWc0LCAzMiwgeGZmZmZmZmZmCUMgc3RvcmUgbWFzayBpbiByZWdpc3RlciBgeGZmZmZmZmZmJworCWxkZGEJWyVpMys2XSAlYXNpLCB2MDAwCisJbGRkYQlbJWkzKzRdICVhc2ksIHYwMTYKKwlsZGRhCVslaTMrMl0gJWFzaSwgdjAzMgorCWxkZGEJWyVpMyswXSAlYXNpLCB2MDQ4CisJZnh0b2QJdjAwMCwgdjAwMAorCWxkZGEJWyVpMysxNF0gJWFzaSwgdjA2NAorCWZ4dG9kCXYwMTYsIHYwMTYKKwlsZGRhCVslaTMrMTJdICVhc2ksIHYwODAKKwlmeHRvZAl2MDMyLCB2MDMyCisJbGRkYQlbJWkzKzEwXSAlYXNpLCB2MDk2CisJZnh0b2QJdjA0OCwgdjA0OAorCWxkZGEJWyVpMys4XSAlYXNpLCB2MTEyCisJZnh0b2QJdjA2NCwgdjA2NAorCWZ4dG9kCXYwODAsIHYwODAKKwlmeHRvZAl2MDk2LCB2MDk2CisJZnh0b2QJdjExMiwgdjExMgorCWZ6ZXJvCXUwMF9oaQorCWZ6ZXJvCXUzMl9oaQorJywKK2AJbW92CS0xLCAlZzQKKwlsZHgJWyVpMyswXSwgJWwwCQlDIHZwWzBdCisJc3JseAklZzQsIDQ4LCB4ZmZmZgkJQyBzdG9yZSBtYXNrIGluIHJlZ2lzdGVyIGB4ZmZmZicKKwlsZHgJWyVpMys4XSwgJWwxCQlDIHZwWzFdCisKKwlhbmQJJWwwLCB4ZmZmZiwgJWcyCisJc3R4CSVnMiwgWyVzcCsyMjIzKzBdCisJc3JseAklbDAsIDE2LCAlZzMKKwlhbmQJJWczLCB4ZmZmZiwgJWczCisJc3R4CSVnMywgWyVzcCsyMjIzKzhdCisJc3JseAklbDAsIDMyLCAlZzIKKwlhbmQJJWcyLCB4ZmZmZiwgJWcyCisJc3R4CSVnMiwgWyVzcCsyMjIzKzE2XQorCXNybHgJJWwwLCA0OCwgJWczCisJc3R4CSVnMywgWyVzcCsyMjIzKzI0XQorCWFuZAklbDEsIHhmZmZmLCAlZzIKKwlzdHgJJWcyLCBbJXNwKzIyMjMrMzJdCisJc3JseAklbDEsIDE2LCAlZzMKKwlhbmQJJWczLCB4ZmZmZiwgJWczCisJc3R4CSVnMywgWyVzcCsyMjIzKzQwXQorCXNybHgJJWwxLCAzMiwgJWcyCisJYW5kCSVnMiwgeGZmZmYsICVnMgorCXN0eAklZzIsIFslc3ArMjIyMys0OF0KKwlzcmx4CSVsMSwgNDgsICVnMworCXN0eAklZzMsIFslc3ArMjIyMys1Nl0KKworCXNybHgJJWc0LCAzMiwgeGZmZmZmZmZmCUMgc3RvcmUgbWFzayBpbiByZWdpc3RlciBgeGZmZmZmZmZmJworCisJbGRkCVslc3ArMjIyMyswXSwgdjAwMAorCWxkZAlbJXNwKzIyMjMrOF0sIHYwMTYKKwlsZGQJWyVzcCsyMjIzKzE2XSwgdjAzMgorCWxkZAlbJXNwKzIyMjMrMjRdLCB2MDQ4CisJZnh0b2QJdjAwMCwgdjAwMAorCWxkZAlbJXNwKzIyMjMrMzJdLCB2MDY0CisJZnh0b2QJdjAxNiwgdjAxNgorCWxkZAlbJXNwKzIyMjMrNDBdLCB2MDgwCisJZnh0b2QJdjAzMiwgdjAzMgorCWxkZAlbJXNwKzIyMjMrNDhdLCB2MDk2CisJZnh0b2QJdjA0OCwgdjA0OAorCWxkZAlbJXNwKzIyMjMrNTZdLCB2MTEyCisJZnh0b2QJdjA2NCwgdjA2NAorCWxkCVslc3ArMjIyMyswXSwgdTAwX2hpCUMgemVybyB1MDBfaGkKKwlmeHRvZAl2MDgwLCB2MDgwCisJbGQJWyVzcCsyMjIzKzBdLCB1MzJfaGkJQyB6ZXJvIHUzMl9oaQorCWZ4dG9kCXYwOTYsIHYwOTYKKwlmeHRvZAl2MTEyLCB2MTEyCisnKQorQyBJbml0aWFsaXphdGlvbiBkb25lLgorCW1vdgkwLCAlZzIKKwltb3YJMCwgcmxpbWIKKwltb3YJMCwgJWc0CisJYWRkCSVpMCwgLTgsICVpMAkJQyBCT09LS0VFUElORworCitDIFN0YXJ0IHNvZnR3YXJlIHBpcGVsaW5lLgorCisJbGQJWyVpMSs0XSwgdTAwX2xvCQlDIHJlYWQgbG93IDMyIGJpdHMgb2YgdXBbaV0KKwlmeHRvZAl1MDBfaGksIHUwMAorQyBtaWQKKwlsZAlbJWkxKzBdLCB1MzJfbG8JCUMgcmVhZCBoaWdoIDMyIGJpdHMgb2YgdXBbaV0KKwlmbXVsZAl1MDAsIHYwMDAsIGEwMDAKKwlmbXVsZAl1MDAsIHYwMTYsIGEwMTYKKwlmbXVsZAl1MDAsIHYwMzIsIGEwMzIKKwlmbXVsZAl1MDAsIHYwNDgsIGEwNDgKKwlhZGQJJWkyLCAtMSwgJWkyCQlDIEJPT0tLRUVQSU5HCisJZm11bGQJdTAwLCB2MDY0LCBwMDY0CisJYWRkCSVpMSwgOCwgJWkxCQlDIEJPT0tLRUVQSU5HCisJZnh0b2QJdTMyX2hpLCB1MzIKKwlmbXVsZAl1MDAsIHYwODAsIHAwODAKKwlmbXVsZAl1MDAsIHYwOTYsIHAwOTZhCisJYnJueixwdAklaTIsIC5MXzJfb3JfbW9yZQorCSBmbXVsZAl1MDAsIHYxMTIsIHAxMTJhCisKKy5MMToJZmR0b3gJYTAwMCwgb3V0MDAwCisJZm11bGQJdTMyLCB2MDAwLCBwMDAwCisJZmR0b3gJYTAxNiwgb3V0MDE2CisJZm11bGQJdTMyLCB2MDE2LCBwMDE2CisJZm1vdmQJcDA2NCwgYTA2NAorCWZtdWxkCXUzMiwgdjAzMiwgcDAzMgorCWZtb3ZkCXAwODAsIGEwODAKKwlmbXVsZAl1MzIsIHYwNDgsIHAwNDgKKwlzdGQJb3V0MDAwLCBbJXNwKzIyMjMrMTZdCisJZmFkZGQJcDAwMCwgYTAzMiwgYTAwMAorCWZtdWxkCXUzMiwgdjA2NCwgcDA2NAorCXN0ZAlvdXQwMTYsIFslc3ArMjIyMysyNF0KKwlmeHRvZAl1MDBfaGksIHUwMAorCWZhZGRkCXAwMTYsIGEwNDgsIGEwMTYKKwlmbXVsZAl1MzIsIHYwODAsIHAwODAKKwlmYWRkZAlwMDMyLCBhMDY0LCBhMDMyCisJZm11bGQJdTMyLCB2MDk2LCBwMDk2YgorCWZhZGRkCXAwNDgsIGEwODAsIGEwNDgKKwlmbXVsZAl1MzIsIHYxMTIsIHAxMTJiCitDIG1pZAorCWZkdG94CWEwMDAsIG91dDAwMAorCWZkdG94CWEwMTYsIG91dDAxNgorCWZhZGRkCXAwNjQsIHAwOTZhLCBhMDY0CisJZmFkZGQJcDA4MCwgcDExMmEsIGEwODAKKwlzdGQJb3V0MDAwLCBbJXNwKzIyMjMrMF0KKwliCS5MX3dkMgorCSBzdGQJb3V0MDE2LCBbJXNwKzIyMjMrOF0KKworLkxfMl9vcl9tb3JlOgorCWxkCVslaTErNF0sIHUwMF9sbwkJQyByZWFkIGxvdyAzMiBiaXRzIG9mIHVwW2ldCisJZmR0b3gJYTAwMCwgb3V0MDAwCisJZm11bGQJdTMyLCB2MDAwLCBwMDAwCisJZmR0b3gJYTAxNiwgb3V0MDE2CisJZm11bGQJdTMyLCB2MDE2LCBwMDE2CisJZm1vdmQJcDA2NCwgYTA2NAorCWZtdWxkCXUzMiwgdjAzMiwgcDAzMgorCWZtb3ZkCXAwODAsIGEwODAKKwlmbXVsZAl1MzIsIHYwNDgsIHAwNDgKKwlzdGQJb3V0MDAwLCBbJXNwKzIyMjMrMTZdCisJZmFkZGQJcDAwMCwgYTAzMiwgYTAwMAorCWZtdWxkCXUzMiwgdjA2NCwgcDA2NAorCXN0ZAlvdXQwMTYsIFslc3ArMjIyMysyNF0KKwlmeHRvZAl1MDBfaGksIHUwMAorCWZhZGRkCXAwMTYsIGEwNDgsIGEwMTYKKwlmbXVsZAl1MzIsIHYwODAsIHAwODAKKwlmYWRkZAlwMDMyLCBhMDY0LCBhMDMyCisJZm11bGQJdTMyLCB2MDk2LCBwMDk2YgorCWZhZGRkCXAwNDgsIGEwODAsIGEwNDgKKwlmbXVsZAl1MzIsIHYxMTIsIHAxMTJiCitDIG1pZAorCWxkCVslaTErMF0sIHUzMl9sbwkJQyByZWFkIGhpZ2ggMzIgYml0cyBvZiB1cFtpXQorCWZkdG94CWEwMDAsIG91dDAwMAorCWZtdWxkCXUwMCwgdjAwMCwgcDAwMAorCWZkdG94CWEwMTYsIG91dDAxNgorCWZtdWxkCXUwMCwgdjAxNiwgcDAxNgorCWZhZGRkCXAwNjQsIHAwOTZhLCBhMDY0CisJZm11bGQJdTAwLCB2MDMyLCBwMDMyCisJZmFkZGQJcDA4MCwgcDExMmEsIGEwODAKKwlmbXVsZAl1MDAsIHYwNDgsIHAwNDgKKwlhZGQJJWkyLCAtMSwgJWkyCQlDIEJPT0tLRUVQSU5HCisJc3RkCW91dDAwMCwgWyVzcCsyMjIzKzBdCisJZmFkZGQJcDAwMCwgYTAzMiwgYTAwMAorCWZtdWxkCXUwMCwgdjA2NCwgcDA2NAorCWFkZAklaTEsIDgsICVpMQkJQyBCT09LS0VFUElORworCXN0ZAlvdXQwMTYsIFslc3ArMjIyMys4XQorCWZ4dG9kCXUzMl9oaSwgdTMyCisJZmFkZGQJcDAxNiwgYTA0OCwgYTAxNgorCWZtdWxkCXUwMCwgdjA4MCwgcDA4MAorCWZhZGRkCXAwMzIsIGEwNjQsIGEwMzIKKwlmbXVsZAl1MDAsIHYwOTYsIHAwOTZhCisJZmFkZGQJcDA0OCwgYTA4MCwgYTA0OAorCWJybnoscHQJJWkyLCAuTF8zX29yX21vcmUKKwkgZm11bGQJdTAwLCB2MTEyLCBwMTEyYQorCisJYgkuTGVuZAorCSBub3AKKworQyAgNjQgICAgICAzMiAgICAgICAwCitDICAgLiAgICAgICAuICAgICAgIC4KK0MgICAuICAgICAgIHxfX3JYWFhffAkzMgorQyAgIC4gICAgICB8X19fY3lfX198CTM0CitDICAgLiAgfF9fX19fX19pMDBfX3wJNTAKK0MgIHxfX19fX19faTE2X198ICAgLgk1MAorCisKK0MgQkVHSU4gTUFJTiBMT09QCisJLmFsaWduCTE2CisuTF8zX29yX21vcmU6CisuTG9vcDoJbGQJWyVpMSs0XSwgdTAwX2xvCQlDIHJlYWQgbG93IDMyIGJpdHMgb2YgdXBbaV0KKwlhbmQJJWcyLCB4ZmZmZmZmZmYsICVnMgorCWZkdG94CWEwMDAsIG91dDAwMAorCWZtdWxkCXUzMiwgdjAwMCwgcDAwMAorQworCWxkdXcJWyVpMCs0KzhdLCByMDAJCUMgcmVhZCBsb3cgMzIgYml0cyBvZiBycFtpXQorCWFkZAklZzIsIHJsaW1iLCAlbDUKKwlmZHRveAlhMDE2LCBvdXQwMTYKKwlmbXVsZAl1MzIsIHYwMTYsIHAwMTYKK0MKKwlzcmx4CSVsNSwgMzIsIGN5CisJbGR4CVslc3ArMjIyMysxNl0sIGkwMAorCWZhZGRkCXAwNjQsIHAwOTZiLCBhMDY0CisJZm11bGQJdTMyLCB2MDMyLCBwMDMyCitDCisJYWRkCSVnNCwgY3ksIGN5CQlDIG5ldyBjeQorCWxkeAlbJXNwKzIyMjMrMjRdLCBpMTYKKwlmYWRkZAlwMDgwLCBwMTEyYiwgYTA4MAorCWZtdWxkCXUzMiwgdjA0OCwgcDA0OAorQworCW5vcAorCXN0ZAlvdXQwMDAsIFslc3ArMjIyMysxNl0KKwlmYWRkZAlwMDAwLCBhMDMyLCBhMDAwCisJZm11bGQJdTMyLCB2MDY0LCBwMDY0CitDCisJYWRkCWkwMCwgcjAwLCBybGltYgorCWFkZAklaTAsIDgsICVpMAkJQyBCT09LS0VFUElORworCXN0ZAlvdXQwMTYsIFslc3ArMjIyMysyNF0KKwlmeHRvZAl1MDBfaGksIHUwMAorQworCXNsbHgJaTE2LCAxNiwgJWcyCisJYWRkCWN5LCBybGltYiwgcmxpbWIKKwlmYWRkZAlwMDE2LCBhMDQ4LCBhMDE2CisJZm11bGQJdTMyLCB2MDgwLCBwMDgwCitDCisJc3JseAlpMTYsIDE2LCAlZzQKKwlhZGQJJWcyLCBybGltYiwgJWw1CisJZmFkZGQJcDAzMiwgYTA2NCwgYTAzMgorCWZtdWxkCXUzMiwgdjA5NiwgcDA5NmIKK0MKKwlzdHcJJWw1LCBbJWkwKzRdCisJbm9wCisJZmFkZGQJcDA0OCwgYTA4MCwgYTA0OAorCWZtdWxkCXUzMiwgdjExMiwgcDExMmIKK0MgbWlkbG9vcAorCWxkCVslaTErMF0sIHUzMl9sbwkJQyByZWFkIGhpZ2ggMzIgYml0cyBvZiB1cFtpXQorCWFuZAklZzIsIHhmZmZmZmZmZiwgJWcyCisJZmR0b3gJYTAwMCwgb3V0MDAwCisJZm11bGQJdTAwLCB2MDAwLCBwMDAwCitDCisJbGR1dwlbJWkwKzBdLCByMzIJCUMgcmVhZCBoaWdoIDMyIGJpdHMgb2YgcnBbaV0KKwlhZGQJJWcyLCBybGltYiwgJWw1CisJZmR0b3gJYTAxNiwgb3V0MDE2CisJZm11bGQJdTAwLCB2MDE2LCBwMDE2CitDCisJc3JseAklbDUsIDMyLCBjeQorCWxkeAlbJXNwKzIyMjMrMF0sIGkwMAorCWZhZGRkCXAwNjQsIHAwOTZhLCBhMDY0CisJZm11bGQJdTAwLCB2MDMyLCBwMDMyCitDCisJYWRkCSVnNCwgY3ksIGN5CQlDIG5ldyBjeQorCWxkeAlbJXNwKzIyMjMrOF0sIGkxNgorCWZhZGRkCXAwODAsIHAxMTJhLCBhMDgwCisJZm11bGQJdTAwLCB2MDQ4LCBwMDQ4CitDCisJYWRkCSVpMiwgLTEsICVpMgkJQyBCT09LS0VFUElORworCXN0ZAlvdXQwMDAsIFslc3ArMjIyMyswXQorCWZhZGRkCXAwMDAsIGEwMzIsIGEwMDAKKwlmbXVsZAl1MDAsIHYwNjQsIHAwNjQKK0MKKwlhZGQJaTAwLCByMzIsIHJsaW1iCisJYWRkCSVpMSwgOCwgJWkxCQlDIEJPT0tLRUVQSU5HCisJc3RkCW91dDAxNiwgWyVzcCsyMjIzKzhdCisJZnh0b2QJdTMyX2hpLCB1MzIKK0MKKwlzbGx4CWkxNiwgMTYsICVnMgorCWFkZAljeSwgcmxpbWIsIHJsaW1iCisJZmFkZGQJcDAxNiwgYTA0OCwgYTAxNgorCWZtdWxkCXUwMCwgdjA4MCwgcDA4MAorQworCXNybHgJaTE2LCAxNiwgJWc0CisJYWRkCSVnMiwgcmxpbWIsICVsNQorCWZhZGRkCXAwMzIsIGEwNjQsIGEwMzIKKwlmbXVsZAl1MDAsIHYwOTYsIHAwOTZhCitDCisJc3R3CSVsNSwgWyVpMCswXQorCWZhZGRkCXAwNDgsIGEwODAsIGEwNDgKKwlicm56LHB0CSVpMiwgLkxvb3AKKwkgZm11bGQJdTAwLCB2MTEyLCBwMTEyYQorQyBFTkQgTUFJTiBMT09QCisKK0MgV0lORC1ET1dOIFBIQVNFIDEKKy5MZW5kOglhbmQJJWcyLCB4ZmZmZmZmZmYsICVnMgorCWZkdG94CWEwMDAsIG91dDAwMAorCWZtdWxkCXUzMiwgdjAwMCwgcDAwMAorCWxkdXcJWyVpMCs0KzhdLCByMDAJCUMgcmVhZCBsb3cgMzIgYml0cyBvZiBycFtpXQorCWFkZAklZzIsIHJsaW1iLCAlbDUKKwlmZHRveAlhMDE2LCBvdXQwMTYKKwlmbXVsZAl1MzIsIHYwMTYsIHAwMTYKKwlzcmx4CSVsNSwgMzIsIGN5CisJbGR4CVslc3ArMjIyMysxNl0sIGkwMAorCWZhZGRkCXAwNjQsIHAwOTZiLCBhMDY0CisJZm11bGQJdTMyLCB2MDMyLCBwMDMyCisJYWRkCSVnNCwgY3ksIGN5CQlDIG5ldyBjeQorCWxkeAlbJXNwKzIyMjMrMjRdLCBpMTYKKwlmYWRkZAlwMDgwLCBwMTEyYiwgYTA4MAorCWZtdWxkCXUzMiwgdjA0OCwgcDA0OAorCXN0ZAlvdXQwMDAsIFslc3ArMjIyMysxNl0KKwlmYWRkZAlwMDAwLCBhMDMyLCBhMDAwCisJZm11bGQJdTMyLCB2MDY0LCBwMDY0CisJYWRkCWkwMCwgcjAwLCBybGltYgorCWFkZAklaTAsIDgsICVpMAkJQyBCT09LS0VFUElORworCXN0ZAlvdXQwMTYsIFslc3ArMjIyMysyNF0KKwlzbGx4CWkxNiwgMTYsICVnMgorCWFkZAljeSwgcmxpbWIsIHJsaW1iCisJZmFkZGQJcDAxNiwgYTA0OCwgYTAxNgorCWZtdWxkCXUzMiwgdjA4MCwgcDA4MAorCXNybHgJaTE2LCAxNiwgJWc0CisJYWRkCSVnMiwgcmxpbWIsICVsNQorCWZhZGRkCXAwMzIsIGEwNjQsIGEwMzIKKwlmbXVsZAl1MzIsIHYwOTYsIHAwOTZiCisJc3R3CSVsNSwgWyVpMCs0XQorCWZhZGRkCXAwNDgsIGEwODAsIGEwNDgKKwlmbXVsZAl1MzIsIHYxMTIsIHAxMTJiCitDIG1pZAorCWFuZAklZzIsIHhmZmZmZmZmZiwgJWcyCisJZmR0b3gJYTAwMCwgb3V0MDAwCisJbGR1dwlbJWkwKzBdLCByMzIJCUMgcmVhZCBoaWdoIDMyIGJpdHMgb2YgcnBbaV0KKwlhZGQJJWcyLCBybGltYiwgJWw1CisJZmR0b3gJYTAxNiwgb3V0MDE2CisJc3JseAklbDUsIDMyLCBjeQorCWxkeAlbJXNwKzIyMjMrMF0sIGkwMAorCWZhZGRkCXAwNjQsIHAwOTZhLCBhMDY0CisJYWRkCSVnNCwgY3ksIGN5CQlDIG5ldyBjeQorCWxkeAlbJXNwKzIyMjMrOF0sIGkxNgorCWZhZGRkCXAwODAsIHAxMTJhLCBhMDgwCisJc3RkCW91dDAwMCwgWyVzcCsyMjIzKzBdCisJYWRkCWkwMCwgcjMyLCBybGltYgorCXN0ZAlvdXQwMTYsIFslc3ArMjIyMys4XQorCXNsbHgJaTE2LCAxNiwgJWcyCisJYWRkCWN5LCBybGltYiwgcmxpbWIKKwlzcmx4CWkxNiwgMTYsICVnNAorCWFkZAklZzIsIHJsaW1iLCAlbDUKKwlzdHcJJWw1LCBbJWkwKzBdCisKK0MgV0lORC1ET1dOIFBIQVNFIDIKKy5MX3dkMjoJYW5kCSVnMiwgeGZmZmZmZmZmLCAlZzIKKwlmZHRveAlhMDMyLCBvdXQwMDAKKwlsZHV3CVslaTArNCs4XSwgcjAwCQlDIHJlYWQgbG93IDMyIGJpdHMgb2YgcnBbaV0KKwlhZGQJJWcyLCBybGltYiwgJWw1CisJZmR0b3gJYTA0OCwgb3V0MDE2CisJc3JseAklbDUsIDMyLCBjeQorCWxkeAlbJXNwKzIyMjMrMTZdLCBpMDAKKwlhZGQJJWc0LCBjeSwgY3kJCUMgbmV3IGN5CisJbGR4CVslc3ArMjIyMysyNF0sIGkxNgorCXN0ZAlvdXQwMDAsIFslc3ArMjIyMysxNl0KKwlhZGQJaTAwLCByMDAsIHJsaW1iCisJYWRkCSVpMCwgOCwgJWkwCQlDIEJPT0tLRUVQSU5HCisJc3RkCW91dDAxNiwgWyVzcCsyMjIzKzI0XQorCXNsbHgJaTE2LCAxNiwgJWcyCisJYWRkCWN5LCBybGltYiwgcmxpbWIKKwlzcmx4CWkxNiwgMTYsICVnNAorCWFkZAklZzIsIHJsaW1iLCAlbDUKKwlzdHcJJWw1LCBbJWkwKzRdCitDIG1pZAorCWFuZAklZzIsIHhmZmZmZmZmZiwgJWcyCisJZmR0b3gJYTA2NCwgb3V0MDAwCisJbGR1dwlbJWkwKzBdLCByMzIJCUMgcmVhZCBoaWdoIDMyIGJpdHMgb2YgcnBbaV0KKwlhZGQJJWcyLCBybGltYiwgJWw1CisJZmR0b3gJYTA4MCwgb3V0MDE2CisJc3JseAklbDUsIDMyLCBjeQorCWxkeAlbJXNwKzIyMjMrMF0sIGkwMAorCWFkZAklZzQsIGN5LCBjeQkJQyBuZXcgY3kKKwlsZHgJWyVzcCsyMjIzKzhdLCBpMTYKKwlzdGQJb3V0MDAwLCBbJXNwKzIyMjMrMF0KKwlhZGQJaTAwLCByMzIsIHJsaW1iCisJc3RkCW91dDAxNiwgWyVzcCsyMjIzKzhdCisJc2xseAlpMTYsIDE2LCAlZzIKKwlhZGQJY3ksIHJsaW1iLCBybGltYgorCXNybHgJaTE2LCAxNiwgJWc0CisJYWRkCSVnMiwgcmxpbWIsICVsNQorCXN0dwklbDUsIFslaTArMF0KKworQyBXSU5ELURPV04gUEhBU0UgMworLkxfd2QzOglhbmQJJWcyLCB4ZmZmZmZmZmYsICVnMgorCWZkdG94CXAwOTZiLCBvdXQwMDAKKwlhZGQJJWcyLCBybGltYiwgJWw1CisJZmR0b3gJcDExMmIsIG91dDAxNgorCXNybHgJJWw1LCAzMiwgY3kKKwlsZHgJWyVzcCsyMjIzKzE2XSwgcmxpbWIKKwlhZGQJJWc0LCBjeSwgY3kJCUMgbmV3IGN5CisJbGR4CVslc3ArMjIyMysyNF0sIGkxNgorCXN0ZAlvdXQwMDAsIFslc3ArMjIyMysxNl0KKwlhZGQJJWkwLCA4LCAlaTAJCUMgQk9PS0tFRVBJTkcKKwlzdGQJb3V0MDE2LCBbJXNwKzIyMjMrMjRdCisJc2xseAlpMTYsIDE2LCAlZzIKKwlhZGQJY3ksIHJsaW1iLCBybGltYgorCXNybHgJaTE2LCAxNiwgJWc0CisJYWRkCSVnMiwgcmxpbWIsICVsNQorCXN0dwklbDUsIFslaTArNF0KK0MgbWlkCisJYW5kCSVnMiwgeGZmZmZmZmZmLCAlZzIKKwlhZGQJJWcyLCBybGltYiwgJWw1CisJc3JseAklbDUsIDMyLCBjeQorCWxkeAlbJXNwKzIyMjMrMF0sIHJsaW1iCisJYWRkCSVnNCwgY3ksIGN5CQlDIG5ldyBjeQorCWxkeAlbJXNwKzIyMjMrOF0sIGkxNgorCXNsbHgJaTE2LCAxNiwgJWcyCisJYWRkCWN5LCBybGltYiwgcmxpbWIKKwlzcmx4CWkxNiwgMTYsICVnNAorCWFkZAklZzIsIHJsaW1iLCAlbDUKKwlzdHcJJWw1LCBbJWkwKzBdCisKKwlhbmQJJWcyLCB4ZmZmZmZmZmYsICVnMgorCWFkZAklZzIsIHJsaW1iLCAlbDUKKwlzcmx4CSVsNSwgMzIsIGN5CisJbGR4CVslc3ArMjIyMysxNl0sIGkwMAorCWFkZAklZzQsIGN5LCBjeQkJQyBuZXcgY3kKKwlsZHgJWyVzcCsyMjIzKzI0XSwgaTE2CisKKwlzbGx4CWkxNiwgMTYsICVnMgorCWFkZAlpMDAsIGN5LCBjeQorCXJldHVybgklaTcrOAorCWFkZAklZzIsIGN5LCAlbzAKK0VQSUxPR1VFKG1wbl9hZGRtdWxfMikKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjMTIzNC9sc2hpZnRjLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjMTIzNC9sc2hpZnRjLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzI4NmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmMxMjM0L2xzaGlmdGMuYXNtCkBAIC0wLDAgKzEsMTY1IEBACitkbmwgIFNQQVJDIHY5IG1wbl9sc2hpZnRjCisKK2RubCAgQ29weXJpZ2h0IDE5OTYsIDIwMDAtMjAwMywgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJCSAgIGN5Y2xlcy9saW1iCitDIFVsdHJhU1BBUkMgMSYyOiAgICAgMworQyBVbHRyYVNQQVJDIDM6CSAgICAgIDIuNjcKKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywgYCVpMCcpCitkZWZpbmUoYHVwJywgYCVpMScpCitkZWZpbmUoYG4nLCAgYCVpMicpCitkZWZpbmUoYGNudCcsYCVpMycpCisKK2RlZmluZShgdTAnLCBgJWwwJykKK2RlZmluZShgdTEnLCBgJWwyJykKK2RlZmluZShgdTInLCBgJWw0JykKK2RlZmluZShgdTMnLCBgJWw2JykKKworZGVmaW5lKGB0bmMnLGAlaTQnKQorCitkZWZpbmUoYGZhbm9wJyxgZml0b2QgJWYwLCVmMicpCQlkbmwgIEEgcXVhc2kgbm9wIHJ1bm5pbmcgaW4gdGhlIEZBIHBpcGUKKworQVNNX1NUQVJUKCkKKwlSRUdJU1RFUiglZzIsI3NjcmF0Y2gpCisJUkVHSVNURVIoJWczLCNzY3JhdGNoKQorUFJPTE9HVUUobXBuX2xzaGlmdGMpCisJc2F2ZQklc3AsLTE2MCwlc3AKKworCXNsbHgJbiwzLCVnMQorCXN1YgklZzAsY250LHRuYwkJQyBuZWdhdGUgc2hpZnQgY291bnQKKwlhZGQJdXAsJWcxLHVwCQlDIG1ha2UgJW8xIHBvaW50IGF0IGVuZCBvZiBzcmMKKwlhZGQJcnAsJWcxLHJwCQlDIG1ha2UgJW8wIHBvaW50IGF0IGVuZCBvZiByZXMKKwlsZHgJW3VwLThdLHUzCQlDIGxvYWQgZmlyc3QgbGltYgorCXN1YmNjCW4sNSxuCisJc3JseAl1Myx0bmMsJWk1CQlDIGNvbXB1dGUgZnVuY3Rpb24gcmVzdWx0CisJYmwscG4JJXhjYywuTGVuZDEyMzQKKwlzbGx4CXUzLGNudCwlZzMKKworCXN1YmNjCW4sNCxuCisJbGR4CVt1cC0xNl0sdTAKKwlsZHgJW3VwLTI0XSx1MQorCWFkZAl1cCwtMzIsdXAKKwlsZHgJW3VwLTBdLHUyCisJbGR4CVt1cC04XSx1MworCXNybHgJdTAsdG5jLCVnMgorCWJsLHBuCSV4Y2MsLkxlbmQ1Njc4CisJbm90CSVnMywgJWczCisKKwliLGEJLkxvb3AKKwlBTElHTigxNikKKy5Mb29wOgorCXNsbHgJdTAsY250LCVnMQorCWFuZG4JJWczLCVnMiwlZzMKKwlsZHgJW3VwLTE2XSx1MAorCWZhbm9wCitDIC0tCisJc3JseAl1MSx0bmMsJWcyCisJc3ViY2MJbiw0LG4KKwlzdHgJJWczLFtycC04XQorCW5vdAklZzEsICVnMQorQyAtLQorCXNsbHgJdTEsY250LCVnMworCWFuZG4JJWcxLCVnMiwlZzEKKwlsZHgJW3VwLTI0XSx1MQorCWZhbm9wCitDIC0tCisJc3JseAl1Mix0bmMsJWcyCisJc3R4CSVnMSxbcnAtMTZdCisJYWRkCXVwLC0zMix1cAorCW5vdAklZzMsICVnMworQyAtLQorCXNsbHgJdTIsY250LCVnMQorCWFuZG4JJWczLCVnMiwlZzMKKwlsZHgJW3VwLTBdLHUyCisJZmFub3AKK0MgLS0KKwlzcmx4CXUzLHRuYywlZzIKKwlzdHgJJWczLFtycC0yNF0KKwlhZGQJcnAsLTMyLHJwCisJbm90CSVnMSwgJWcxCitDIC0tCisJc2xseAl1MyxjbnQsJWczCisJYW5kbgklZzEsJWcyLCVnMQorCWxkeAlbdXAtOF0sdTMKKwlmYW5vcAorQyAtLQorCXNybHgJdTAsdG5jLCVnMgorCXN0eAklZzEsW3JwLTBdCisJYmdlLHB0CSV4Y2MsLkxvb3AKKwlub3QJJWczLCAlZzMKK0MgLS0KKy5MZW5kNTY3ODoKKwlzbGx4CXUwLGNudCwlZzEKKwlhbmRuCSVnMywlZzIsJWczCisJc3JseAl1MSx0bmMsJWcyCisJc3R4CSVnMyxbcnAtOF0KKwlub3QJJWcxLCAlZzEKKwlzbGx4CXUxLGNudCwlZzMKKwlhbmRuCSVnMSwlZzIsJWcxCisJc3JseAl1Mix0bmMsJWcyCisJc3R4CSVnMSxbcnAtMTZdCisJbm90CSVnMywgJWczCisJc2xseAl1MixjbnQsJWcxCisJYW5kbgklZzMsJWcyLCVnMworCXNybHgJdTMsdG5jLCVnMgorCXN0eAklZzMsW3JwLTI0XQorCWFkZAlycCwtMzIscnAKKwlub3QJJWcxLCAlZzEKKwlzbGx4CXUzLGNudCwlZzMJCUMgY2FycnkuLi4KKwlhbmRuCSVnMSwlZzIsJWcxCisJc3R4CSVnMSxbcnAtMF0KKworLkxlbmQxMjM0OgorCWFkZGNjCW4sNCxuCisJYnoscG4JJXhjYywuTHJldAorCWZhbm9wCisuTG9vcDA6CisJYWRkCXJwLC04LHJwCisJc3ViY2MJbiwxLG4KKwlsZHgJW3VwLTE2XSx1MworCWFkZAl1cCwtOCx1cAorCXNybHgJdTMsdG5jLCVnMgorCW5vdAklZzMsICVnMworCWFuZG4JJWczLCVnMiwlZzMKKwlzdHgJJWczLFtycF0KKwlzbGx4CXUzLGNudCwlZzMKKwlibnoscHQJJXhjYywuTG9vcDAKKwlmYW5vcAorLkxyZXQ6CisJbm90CSVnMywgJWczCisJc3R4CSVnMyxbcnAtOF0KKwltb3YJJWk1LCVpMAorCXJldAorCXJlc3RvcmUKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjMTIzNC9tdWxfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvdWx0cmFzcGFyYzEyMzQvbXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MWQ1NjIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvdWx0cmFzcGFyYzEyMzQvbXVsXzEuYXNtCkBAIC0wLDAgKzEsNTgwIEBACitkbmwgIFNQQVJDIHY5IDY0LWJpdCBtcG5fbXVsXzEgLS0gTXVsdGlwbHkgYSBsaW1iIHZlY3RvciB3aXRoIGEgbGltYiBhbmQgc3RvcmUKK2RubCAgdGhlIHJlc3VsdCBpbiBhIHNlY29uZCBsaW1iIHZlY3Rvci4KKworZG5sICBDb3B5cmlnaHQgMTk5OCwgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJCSAgIGN5Y2xlcy9saW1iCitDIFVsdHJhU1BBUkMgMSYyOiAgICAgMTQKK0MgVWx0cmFTUEFSQyAzOgkgICAgICAxOC41CisKK0MgQWxnb3JpdGhtOiBXZSB1c2UgZWlnaHQgZmxvYXRpbmctcG9pbnQgbXVsdGlwbGllcyBwZXIgbGltYiBwcm9kdWN0LCB3aXRoIHRoZQorQyBpbnZhcmlhbnQgdiBvcGVyYW5kIHNwbGl0IGludG8gZm91ciAxNi1iaXQgcGllY2VzLCBhbmQgdGhlIHMxIG9wZXJhbmQgc3BsaXQKK0MgaW50byAzMi1iaXQgcGllY2VzLiAgV2Ugc3VtIHBhaXJzIG9mIDQ4LWJpdCBwYXJ0aWFsIHByb2R1Y3RzIHVzaW5nCitDIGZsb2F0aW5nLXBvaW50IGFkZCwgdGhlbiBjb252ZXJ0IHRoZSBmb3VyIDQ5LWJpdCBwcm9kdWN0LXN1bXMgYW5kIHRyYW5zZmVyCitDIHRoZW0gdG8gdGhlIGludGVnZXIgdW5pdC4KKworQyBQb3NzaWJsZSBvcHRpbWl6YXRpb25zOgorQyAgIDEuIEFsaWduIHRoZSBzdGFjayBhcmVhIHdoZXJlIHdlIHRyYW5zZmVyIHRoZSBmb3VyIDQ5LWJpdCBwcm9kdWN0LXN1bXMKK0MgICAgICB0byBhIDMyLWJ5dGUgYm91bmRhcnkuICBUaGF0IHdvdWxkIG1pbmltaXplIHRoZSBjYWNoZSBjb2xsaXNpb24uCitDICAgICAgKFVsdHJhU1BBUkMtMS8yIHVzZSBhIGRpcmVjdC1tYXBwZWQgY2FjaGUuKSAgKFBlcmhhcHMgZXZlbiBiZXR0ZXIgd291bGQKK0MgICAgICBiZSB0byBhbGlnbiB0aGUgYXJlYSB0byBtYXAgdG8gdGhlIGFyZWEgaW1tZWRpYXRlbHkgYmVmb3JlIHMxPykKK0MgICAyLiBTdW0gdGhlIDQgNDktYml0IHF1YW50aXRpZXMgdXNpbmcgMzItYml0IG9wZXJhdGlvbnMsIGFzIGluIHRoZQorQyAgICAgIGRldmVsb3AgbXBuX2FkZG11bF8yLiAgVGhpcyB3b3VsZCBzYXZlIG1hbnkgaW50ZWdlciBpbnN0cnVjdGlvbnMuCitDICAgMy4gVW5yb2xsaW5nLiAgUXVlc3Rpb25hYmxlIGlmIGl0IGlzIHdvcnRoIHRoZSBjb2RlIGV4cGFuc2lvbiwgZ2l2ZW4gdGhhdAorQyAgICAgIGl0IGNvdWxkIG9ubHkgc2F2ZSAxIGN5Y2xlL2xpbWIuCitDICAgNC4gU3BlY2lhbGl6ZSBmb3IgcGFydGljdWxhciB2IHZhbHVlcy4gIElmIGl0cyB1cHBlciAzMiBiaXRzIGFyZSB6ZXJvLCB3ZQorQyAgICAgIGNvdWxkIHNhdmUgbWFueSBvcGVyYXRpb25zLCBpbiB0aGUgRlBVIChmbXVsZCksIGJ1dCBtb3JlIHNvIGluIHRoZSBJRVUKK0MgICAgICBzaW5jZSB3ZSdsbCBiZSBzdW1taW5nIDQ4LWJpdCBxdWFudGl0aWVzLCB3aGljaCBtaWdodCBiZSBzaW1wbGVyLgorQyAgIDUuIElkZWFsbHksIHdlIHNob3VsZCBzY2hlZHVsZSB0aGUgZjIvZjMgYW5kIGY0L2Y1IFJBVyBmdXJ0aGVyIGFwYXJ0LCBhbmQKK0MgICAgICB0aGUgaTAwLGkxNixpMzIsaTQ4IFJBVyBsZXNzIGFwYXJ0LiAgVGhlIGxhdHRlciBhcGFydC1zY2hlZHVsaW5nIHNob3VsZAorQyAgICAgIG5vdCBiZSBncmVhdGVyIHRoYW4gbmVlZGVkIGZvciBMMiBjYWNoZSBsYXRlbmN5LCBhbmQgYWxzbyBub3Qgc28gZ3JlYXQKK0MgICAgICB0aGF0IGkxNiBuZWVkcyB0byBiZSBjb3BpZWQuCitDICAgNi4gQXZvaWQgcGVyZm9ybWluZyBtZW0rZmErZm0gaW4gdGhlIHNhbWUgY3ljbGUsIGF0IGxlYXN0IG5vdCB3aGVuIHdlIHdhbnQKK0MgICAgICB0byBnZXQgaGlnaCBJRVUgYmFuZHdpZHRoLiAgKDEyIG9mIHRoZSAxNCBjeWNsZXMgd2lsbCBiZSBmcmVlIGZvciAyIElFVQorQyAgICAgIG9wcy4pCisKK0MgSW5zdHJ1Y3Rpb24gY2xhc3NpZmljYXRpb24gKGFzIHBlciBVbHRyYVNQQVJDLTEvMiBmdW5jdGlvbmFsIHVuaXRzKToKK0MgICAgOCBGTQorQyAgIDEwIEZBCitDICAgMTEgTUVNCitDICAgOSBJU0hJRlQgKyAxMD8gSUFERExPRworQyAgICAxIEJSQU5DSAorQyAgIDQ5IGluc25zIHRvdGFsbHkgKHBsdXMgdGhyZWUgbW92IGluc25zIHRoYXQgc2hvdWxkIGJlIG9wdGltaXplZCBvdXQpCisKK0MgVGhlIGxvb3AgZXhlY3V0ZXMgNTMgaW5zdHJ1Y3Rpb25zIGluIDE0IGN5Y2xlcyBvbiBVbHRyYVNQQVJDLTEvMiwgaS5lIHdlCitDIHN1c3RhaW4gMy43OSBpbnN0cnVjdGlvbnMvY3ljbGUuCisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyBycAlpMAorQyB1cAlpMQorQyBuCWkyCitDIHYJaTMKKworQVNNX1NUQVJUKCkKKwlSRUdJU1RFUiglZzIsI3NjcmF0Y2gpCisJUkVHSVNURVIoJWczLCNzY3JhdGNoKQorCitkZWZpbmUoYHAwMCcsIGAlZjgnKSBkZWZpbmUoYHAxNicsYCVmMTAnKSBkZWZpbmUoYHAzMicsYCVmMTInKSBkZWZpbmUoYHA0OCcsYCVmMTQnKQorZGVmaW5lKGByMzInLGAlZjE2JykgZGVmaW5lKGByNDgnLGAlZjE4JykgZGVmaW5lKGByNjQnLGAlZjIwJykgZGVmaW5lKGByODAnLGAlZjIyJykKK2RlZmluZShgdjAwJyxgJWYyNCcpIGRlZmluZShgdjE2JyxgJWYyNicpIGRlZmluZShgdjMyJyxgJWYyOCcpIGRlZmluZShgdjQ4JyxgJWYzMCcpCitkZWZpbmUoYHUwMCcsYCVmMzInKSBkZWZpbmUoYHUzMicsIGAlZjM0JykKK2RlZmluZShgYTAwJyxgJWYzNicpIGRlZmluZShgYTE2JyxgJWYzOCcpIGRlZmluZShgYTMyJyxgJWY0MCcpIGRlZmluZShgYTQ4JyxgJWY0MicpCitkZWZpbmUoYGN5JyxgJWcxJykKK2RlZmluZShgcmxpbWInLGAlZzMnKQorZGVmaW5lKGBpMDAnLGAlbDAnKSBkZWZpbmUoYGkxNicsYCVsMScpIGRlZmluZShgaTMyJyxgJWwyJykgZGVmaW5lKGBpNDgnLGAlbDMnKQorZGVmaW5lKGB4ZmZmZmZmZmYnLGAlbDcnKQorZGVmaW5lKGB4ZmZmZicsYCVvMCcpCisKK1BST0xPR1VFKG1wbl9tdWxfMSkKKworQyBJbml0aWFsaXphdGlvbi4gICgxKSBTcGxpdCB2IG9wZXJhbmQgaW50byBmb3VyIDE2LWJpdCBjaHVua3MgYW5kIHN0b3JlIHRoZW0KK0MgYXMgSUVFRSBkb3VibGUgaW4gZnAgcmVnaXN0ZXJzLiAgKDIpIENsZWFyIHVwcGVyIDMyIGJpdHMgb2YgZnAgcmVnaXN0ZXIgcGFpcnMKK0MgZjIgYW5kIGY0LiAgKDMpIFN0b3JlIG1hc2tzIGluIHJlZ2lzdGVycyBhbGlhc2VkIHRvIGB4ZmZmZicgYW5kIGB4ZmZmZmZmZmYnLgorCisJc2F2ZQklc3AsIC0yNTYsICVzcAorCW1vdgktMSwgJWc0CisJc3JseAklZzQsIDQ4LCB4ZmZmZgkJQyBzdG9yZSBtYXNrIGluIHJlZ2lzdGVyIGB4ZmZmZicKKwlhbmQJJWkzLCB4ZmZmZiwgJWcyCisJc3R4CSVnMiwgWyVzcCsyMjIzKzBdCisJc3JseAklaTMsIDE2LCAlZzMKKwlhbmQJJWczLCB4ZmZmZiwgJWczCisJc3R4CSVnMywgWyVzcCsyMjIzKzhdCisJc3JseAklaTMsIDMyLCAlZzIKKwlhbmQJJWcyLCB4ZmZmZiwgJWcyCisJc3R4CSVnMiwgWyVzcCsyMjIzKzE2XQorCXNybHgJJWkzLCA0OCwgJWczCisJc3R4CSVnMywgWyVzcCsyMjIzKzI0XQorCXNybHgJJWc0LCAzMiwgeGZmZmZmZmZmCUMgc3RvcmUgbWFzayBpbiByZWdpc3RlciBgeGZmZmZmZmZmJworCisJc2xseAklaTIsIDMsICVpMgorCW1vdgkwLCBjeQkJCUMgY2xlYXIgY3kKKwlhZGQJJWkwLCAlaTIsICVpMAorCWFkZAklaTEsICVpMiwgJWkxCisJbmVnCSVpMgorCWFkZAklaTEsIDQsICVpNQorCWFkZAklaTAsIC0zMiwgJWk0CisJYWRkCSVpMCwgLTE2LCAlaTAKKworCWxkZAlbJXNwKzIyMjMrMF0sIHYwMAorCWxkZAlbJXNwKzIyMjMrOF0sIHYxNgorCWxkZAlbJXNwKzIyMjMrMTZdLCB2MzIKKwlsZGQJWyVzcCsyMjIzKzI0XSwgdjQ4CisJbGQJWyVzcCsyMjIzKzBdLCVmMglDIHplcm8gZjIKKwlsZAlbJXNwKzIyMjMrMF0sJWY0CUMgemVybyBmNAorCWxkCVslaTUrJWkyXSwgJWYzCQlDIHJlYWQgbG93IDMyIGJpdHMgb2YgdXBbaV0KKwlsZAlbJWkxKyVpMl0sICVmNQkJQyByZWFkIGhpZ2ggMzIgYml0cyBvZiB1cFtpXQorCWZ4dG9kCXYwMCwgdjAwCisJZnh0b2QJdjE2LCB2MTYKKwlmeHRvZAl2MzIsIHYzMgorCWZ4dG9kCXY0OCwgdjQ4CisKK0MgU3RhcnQgcmVhbCB3b3JrLiAgKFdlIHNuZWFraW5nbHkgcmVhZCBmMyBhbmQgZjUgYWJvdmUuLi4pCitDIFRoZSBzb2Z0d2FyZSBwaXBlbGluZSBpcyB2ZXJ5IGRlZXAsIHJlcXVpcmluZyA0IGZlZWQtaW4gc3RhZ2VzLgorCisJZnh0b2QJJWYyLCB1MDAKKwlmeHRvZAklZjQsIHUzMgorCWZtdWxkCXUwMCwgdjAwLCBhMDAKKwlmbXVsZAl1MDAsIHYxNiwgYTE2CisJZm11bGQJdTAwLCB2MzIsIHAzMgorCWZtdWxkCXUzMiwgdjAwLCByMzIKKwlmbXVsZAl1MDAsIHY0OCwgcDQ4CisJYWRkY2MJJWkyLCA4LCAlaTIKKwlibnoscHQJJXhjYywgLkxfdHdvX29yX21vcmUKKwlmbXVsZAl1MzIsIHYxNiwgcjQ4CisKKy5MX29uZToKKwlmbXVsZAl1MzIsIHYzMiwgcjY0CUMgRklYTUUgbm90IHVyZ2VudAorCWZhZGRkCXAzMiwgcjMyLCBhMzIKKwlmZHRveAlhMDAsIGEwMAorCWZhZGRkCXA0OCwgcjQ4LCBhNDgKKwlmbXVsZAl1MzIsIHY0OCwgcjgwCUMgRklYTUUgbm90IHVyZ2VudAorCWZkdG94CWExNiwgYTE2CisJZmR0b3gJYTMyLCBhMzIKKwlmZHRveAlhNDgsIGE0OAorCXN0ZAlhMDAsIFslc3ArMjIyMyswXQorCXN0ZAlhMTYsIFslc3ArMjIyMys4XQorCXN0ZAlhMzIsIFslc3ArMjIyMysxNl0KKwlzdGQJYTQ4LCBbJXNwKzIyMjMrMjRdCisJYWRkCSVpMiwgOCwgJWkyCisKKwlmZHRveAlyNjQsIGEwMAorCWZkdG94CXI4MCwgYTE2CisJbGR4CVslc3ArMjIyMyswXSwgaTAwCisJbGR4CVslc3ArMjIyMys4XSwgaTE2CisJbGR4CVslc3ArMjIyMysxNl0sIGkzMgorCWxkeAlbJXNwKzIyMjMrMjRdLCBpNDgKKwlzdGQJYTAwLCBbJXNwKzIyMjMrMF0KKwlzdGQJYTE2LCBbJXNwKzIyMjMrOF0KKwlhZGQJJWkyLCA4LCAlaTIKKworCW1vdglpMDAsICVnNQkJQyBpMDArIG5vdyBpbiBnNQorCWxkeAlbJXNwKzIyMjMrMF0sIGkwMAorCXNybHgJaTE2LCA0OCwgJWw0CQlDIChpMTYgPj4gNDgpCisJbW92CWkxNiwgJWcyCisJbGR4CVslc3ArMjIyMys4XSwgaTE2CisJc3JseAlpNDgsIDE2LCAlbDUJCUMgKGk0OCA+PiAxNikKKwltb3YJaTMyLCAlZzQJCUMgaTMyKyBub3cgaW4gZzQKKwlzbGx4CWk0OCwgMzIsICVsNgkJQyAoaTQ4IDw8IDMyKQorCXNybHgJJWc0LCAzMiwgJW8zCQlDIChpMzIgPj4gMzIpCisJYWRkCSVsNSwgJWw0LCAlbzEJCUMgaGk2NC0gaW4gJW8xCisJc3RkCWEwMCwgWyVzcCsyMjIzKzBdCisJc2xseAklZzQsIDE2LCAlbzIJCUMgKGkzMiA8PCAxNikKKwlhZGQJJW8zLCAlbzEsICVvMQkJQyBoaTY0IGluICVvMSAgIDFzdCBBU1NJR05NRU5UCisJc3RkCWExNiwgWyVzcCsyMjIzKzhdCisJc2xseAklbzEsIDQ4LCAlbzMJCUMgKGhpNjQgPDwgNDgpCisJYWRkCSVnMiwgJW8yLCAlbzIJCUMgbWk2NC0gaW4gJW8yCisJYWRkCSVsNiwgJW8yLCAlbzIJCUMgbWk2NC0gaW4gJW8yCisJc3ViCSVvMiwgJW8zLCAlbzIJCUMgbWk2NCBpbiAlbzIgICAxc3QgQVNTSUdOTUVOVAorCWFkZAljeSwgJWc1LCAlbzQJCUMgeCA9IHByZXYoaTAwKSArIGN5CisJYgkuTF9vdXRfMQorCWFkZAklaTIsIDgsICVpMgorCisuTF90d29fb3JfbW9yZToKKwlsZAlbJWk1KyVpMl0sICVmMwkJQyByZWFkIGxvdyAzMiBiaXRzIG9mIHVwW2ldCisJZm11bGQJdTMyLCB2MzIsIHI2NAlDIEZJWE1FIG5vdCB1cmdlbnQKKwlmYWRkZAlwMzIsIHIzMiwgYTMyCisJbGQJWyVpMSslaTJdLCAlZjUJCUMgcmVhZCBoaWdoIDMyIGJpdHMgb2YgdXBbaV0KKwlmZHRveAlhMDAsIGEwMAorCWZhZGRkCXA0OCwgcjQ4LCBhNDgKKwlmbXVsZAl1MzIsIHY0OCwgcjgwCUMgRklYTUUgbm90IHVyZ2VudAorCWZkdG94CWExNiwgYTE2CisJZmR0b3gJYTMyLCBhMzIKKwlmeHRvZAklZjIsIHUwMAorCWZ4dG9kCSVmNCwgdTMyCisJZmR0b3gJYTQ4LCBhNDgKKwlzdGQJYTAwLCBbJXNwKzIyMjMrMF0KKwlmbXVsZAl1MDAsIHYwMCwgcDAwCisJc3RkCWExNiwgWyVzcCsyMjIzKzhdCisJZm11bGQJdTAwLCB2MTYsIHAxNgorCXN0ZAlhMzIsIFslc3ArMjIyMysxNl0KKwlmbXVsZAl1MDAsIHYzMiwgcDMyCisJc3RkCWE0OCwgWyVzcCsyMjIzKzI0XQorCWZhZGRkCXAwMCwgcjY0LCBhMDAKKwlmbXVsZAl1MzIsIHYwMCwgcjMyCisJZmFkZGQJcDE2LCByODAsIGExNgorCWZtdWxkCXUwMCwgdjQ4LCBwNDgKKwlhZGRjYwklaTIsIDgsICVpMgorCWJueixwdAkleGNjLCAuTF90aHJlZV9vcl9tb3JlCisJZm11bGQJdTMyLCB2MTYsIHI0OAorCisuTF90d286CisJZm11bGQJdTMyLCB2MzIsIHI2NAlDIEZJWE1FIG5vdCB1cmdlbnQKKwlmYWRkZAlwMzIsIHIzMiwgYTMyCisJZmR0b3gJYTAwLCBhMDAKKwlmYWRkZAlwNDgsIHI0OCwgYTQ4CisJZm11bGQJdTMyLCB2NDgsIHI4MAlDIEZJWE1FIG5vdCB1cmdlbnQKKwlmZHRveAlhMTYsIGExNgorCWxkeAlbJXNwKzIyMjMrMF0sIGkwMAorCWZkdG94CWEzMiwgYTMyCisJbGR4CVslc3ArMjIyMys4XSwgaTE2CisJbGR4CVslc3ArMjIyMysxNl0sIGkzMgorCWxkeAlbJXNwKzIyMjMrMjRdLCBpNDgKKwlmZHRveAlhNDgsIGE0OAorCXN0ZAlhMDAsIFslc3ArMjIyMyswXQorCXN0ZAlhMTYsIFslc3ArMjIyMys4XQorCXN0ZAlhMzIsIFslc3ArMjIyMysxNl0KKwlzdGQJYTQ4LCBbJXNwKzIyMjMrMjRdCisJYWRkCSVpMiwgOCwgJWkyCisKKwlmZHRveAlyNjQsIGEwMAorCW1vdglpMDAsICVnNQkJQyBpMDArIG5vdyBpbiBnNQorCWZkdG94CXI4MCwgYTE2CisJbGR4CVslc3ArMjIyMyswXSwgaTAwCisJc3JseAlpMTYsIDQ4LCAlbDQJCUMgKGkxNiA+PiA0OCkKKwltb3YJaTE2LCAlZzIKKwlsZHgJWyVzcCsyMjIzKzhdLCBpMTYKKwlzcmx4CWk0OCwgMTYsICVsNQkJQyAoaTQ4ID4+IDE2KQorCW1vdglpMzIsICVnNAkJQyBpMzIrIG5vdyBpbiBnNAorCWxkeAlbJXNwKzIyMjMrMTZdLCBpMzIKKwlzbGx4CWk0OCwgMzIsICVsNgkJQyAoaTQ4IDw8IDMyKQorCWxkeAlbJXNwKzIyMjMrMjRdLCBpNDgKKwlzcmx4CSVnNCwgMzIsICVvMwkJQyAoaTMyID4+IDMyKQorCWFkZAklbDUsICVsNCwgJW8xCQlDIGhpNjQtIGluICVvMQorCXN0ZAlhMDAsIFslc3ArMjIyMyswXQorCXNsbHgJJWc0LCAxNiwgJW8yCQlDIChpMzIgPDwgMTYpCisJYWRkCSVvMywgJW8xLCAlbzEJCUMgaGk2NCBpbiAlbzEgICAxc3QgQVNTSUdOTUVOVAorCXN0ZAlhMTYsIFslc3ArMjIyMys4XQorCXNsbHgJJW8xLCA0OCwgJW8zCQlDIChoaTY0IDw8IDQ4KQorCWFkZAklZzIsICVvMiwgJW8yCQlDIG1pNjQtIGluICVvMgorCWFkZAklbDYsICVvMiwgJW8yCQlDIG1pNjQtIGluICVvMgorCXN1YgklbzIsICVvMywgJW8yCQlDIG1pNjQgaW4gJW8yICAgMXN0IEFTU0lHTk1FTlQKKwlhZGQJY3ksICVnNSwgJW80CQlDIHggPSBwcmV2KGkwMCkgKyBjeQorCWIJLkxfb3V0XzIKKwlhZGQJJWkyLCA4LCAlaTIKKworLkxfdGhyZWVfb3JfbW9yZToKKwlsZAlbJWk1KyVpMl0sICVmMwkJQyByZWFkIGxvdyAzMiBiaXRzIG9mIHVwW2ldCisJZm11bGQJdTMyLCB2MzIsIHI2NAlDIEZJWE1FIG5vdCB1cmdlbnQKKwlmYWRkZAlwMzIsIHIzMiwgYTMyCisJbGQJWyVpMSslaTJdLCAlZjUJCUMgcmVhZCBoaWdoIDMyIGJpdHMgb2YgdXBbaV0KKwlmZHRveAlhMDAsIGEwMAorCWZhZGRkCXA0OCwgcjQ4LCBhNDgKKwlmbXVsZAl1MzIsIHY0OCwgcjgwCUMgRklYTUUgbm90IHVyZ2VudAorCWZkdG94CWExNiwgYTE2CisJbGR4CVslc3ArMjIyMyswXSwgaTAwCisJZmR0b3gJYTMyLCBhMzIKKwlsZHgJWyVzcCsyMjIzKzhdLCBpMTYKKwlmeHRvZAklZjIsIHUwMAorCWxkeAlbJXNwKzIyMjMrMTZdLCBpMzIKKwlmeHRvZAklZjQsIHUzMgorCWxkeAlbJXNwKzIyMjMrMjRdLCBpNDgKKwlmZHRveAlhNDgsIGE0OAorCXN0ZAlhMDAsIFslc3ArMjIyMyswXQorCWZtdWxkCXUwMCwgdjAwLCBwMDAKKwlzdGQJYTE2LCBbJXNwKzIyMjMrOF0KKwlmbXVsZAl1MDAsIHYxNiwgcDE2CisJc3RkCWEzMiwgWyVzcCsyMjIzKzE2XQorCWZtdWxkCXUwMCwgdjMyLCBwMzIKKwlzdGQJYTQ4LCBbJXNwKzIyMjMrMjRdCisJZmFkZGQJcDAwLCByNjQsIGEwMAorCWZtdWxkCXUzMiwgdjAwLCByMzIKKwlmYWRkZAlwMTYsIHI4MCwgYTE2CisJZm11bGQJdTAwLCB2NDgsIHA0OAorCWFkZGNjCSVpMiwgOCwgJWkyCisJYm56LHB0CSV4Y2MsIC5MX2ZvdXJfb3JfbW9yZQorCWZtdWxkCXUzMiwgdjE2LCByNDgKKworLkxfdGhyZWU6CisJZm11bGQJdTMyLCB2MzIsIHI2NAlDIEZJWE1FIG5vdCB1cmdlbnQKKwlmYWRkZAlwMzIsIHIzMiwgYTMyCisJZmR0b3gJYTAwLCBhMDAKKwlmYWRkZAlwNDgsIHI0OCwgYTQ4CisJbW92CWkwMCwgJWc1CQlDIGkwMCsgbm93IGluIGc1CisJZm11bGQJdTMyLCB2NDgsIHI4MAlDIEZJWE1FIG5vdCB1cmdlbnQKKwlmZHRveAlhMTYsIGExNgorCWxkeAlbJXNwKzIyMjMrMF0sIGkwMAorCWZkdG94CWEzMiwgYTMyCisJc3JseAlpMTYsIDQ4LCAlbDQJCUMgKGkxNiA+PiA0OCkKKwltb3YJaTE2LCAlZzIKKwlsZHgJWyVzcCsyMjIzKzhdLCBpMTYKKwlzcmx4CWk0OCwgMTYsICVsNQkJQyAoaTQ4ID4+IDE2KQorCW1vdglpMzIsICVnNAkJQyBpMzIrIG5vdyBpbiBnNAorCWxkeAlbJXNwKzIyMjMrMTZdLCBpMzIKKwlzbGx4CWk0OCwgMzIsICVsNgkJQyAoaTQ4IDw8IDMyKQorCWxkeAlbJXNwKzIyMjMrMjRdLCBpNDgKKwlmZHRveAlhNDgsIGE0OAorCXNybHgJJWc0LCAzMiwgJW8zCQlDIChpMzIgPj4gMzIpCisJYWRkCSVsNSwgJWw0LCAlbzEJCUMgaGk2NC0gaW4gJW8xCisJc3RkCWEwMCwgWyVzcCsyMjIzKzBdCisJc2xseAklZzQsIDE2LCAlbzIJCUMgKGkzMiA8PCAxNikKKwlhZGQJJW8zLCAlbzEsICVvMQkJQyBoaTY0IGluICVvMSAgIDFzdCBBU1NJR05NRU5UCisJc3RkCWExNiwgWyVzcCsyMjIzKzhdCisJc2xseAklbzEsIDQ4LCAlbzMJCUMgKGhpNjQgPDwgNDgpCisJYWRkCSVnMiwgJW8yLCAlbzIJCUMgbWk2NC0gaW4gJW8yCisJc3RkCWEzMiwgWyVzcCsyMjIzKzE2XQorCWFkZAklbDYsICVvMiwgJW8yCQlDIG1pNjQtIGluICVvMgorCXN0ZAlhNDgsIFslc3ArMjIyMysyNF0KKwlzdWIJJW8yLCAlbzMsICVvMgkJQyBtaTY0IGluICVvMiAgIDFzdCBBU1NJR05NRU5UCisJYWRkCWN5LCAlZzUsICVvNAkJQyB4ID0gcHJldihpMDApICsgY3kKKwliCS5MX291dF8zCisJYWRkCSVpMiwgOCwgJWkyCisKKy5MX2ZvdXJfb3JfbW9yZToKKwlsZAlbJWk1KyVpMl0sICVmMwkJQyByZWFkIGxvdyAzMiBiaXRzIG9mIHVwW2ldCisJZm11bGQJdTMyLCB2MzIsIHI2NAlDIEZJWE1FIG5vdCB1cmdlbnQKKwlmYWRkZAlwMzIsIHIzMiwgYTMyCisJbGQJWyVpMSslaTJdLCAlZjUJCUMgcmVhZCBoaWdoIDMyIGJpdHMgb2YgdXBbaV0KKwlmZHRveAlhMDAsIGEwMAorCWZhZGRkCXA0OCwgcjQ4LCBhNDgKKwltb3YJaTAwLCAlZzUJCUMgaTAwKyBub3cgaW4gZzUKKwlmbXVsZAl1MzIsIHY0OCwgcjgwCUMgRklYTUUgbm90IHVyZ2VudAorCWZkdG94CWExNiwgYTE2CisJbGR4CVslc3ArMjIyMyswXSwgaTAwCisJZmR0b3gJYTMyLCBhMzIKKwlzcmx4CWkxNiwgNDgsICVsNAkJQyAoaTE2ID4+IDQ4KQorCW1vdglpMTYsICVnMgorCWxkeAlbJXNwKzIyMjMrOF0sIGkxNgorCWZ4dG9kCSVmMiwgdTAwCisJc3JseAlpNDgsIDE2LCAlbDUJCUMgKGk0OCA+PiAxNikKKwltb3YJaTMyLCAlZzQJCUMgaTMyKyBub3cgaW4gZzQKKwlsZHgJWyVzcCsyMjIzKzE2XSwgaTMyCisJZnh0b2QJJWY0LCB1MzIKKwlzbGx4CWk0OCwgMzIsICVsNgkJQyAoaTQ4IDw8IDMyKQorCWxkeAlbJXNwKzIyMjMrMjRdLCBpNDgKKwlmZHRveAlhNDgsIGE0OAorCXNybHgJJWc0LCAzMiwgJW8zCQlDIChpMzIgPj4gMzIpCisJYWRkCSVsNSwgJWw0LCAlbzEJCUMgaGk2NC0gaW4gJW8xCisJc3RkCWEwMCwgWyVzcCsyMjIzKzBdCisJZm11bGQJdTAwLCB2MDAsIHAwMAorCXNsbHgJJWc0LCAxNiwgJW8yCQlDIChpMzIgPDwgMTYpCisJYWRkCSVvMywgJW8xLCAlbzEJCUMgaGk2NCBpbiAlbzEgICAxc3QgQVNTSUdOTUVOVAorCXN0ZAlhMTYsIFslc3ArMjIyMys4XQorCWZtdWxkCXUwMCwgdjE2LCBwMTYKKwlzbGx4CSVvMSwgNDgsICVvMwkJQyAoaGk2NCA8PCA0OCkKKwlhZGQJJWcyLCAlbzIsICVvMgkJQyBtaTY0LSBpbiAlbzIKKwlzdGQJYTMyLCBbJXNwKzIyMjMrMTZdCisJZm11bGQJdTAwLCB2MzIsIHAzMgorCWFkZAklbDYsICVvMiwgJW8yCQlDIG1pNjQtIGluICVvMgorCXN0ZAlhNDgsIFslc3ArMjIyMysyNF0KKwlmYWRkZAlwMDAsIHI2NCwgYTAwCisJZm11bGQJdTMyLCB2MDAsIHIzMgorCXN1YgklbzIsICVvMywgJW8yCQlDIG1pNjQgaW4gJW8yICAgMXN0IEFTU0lHTk1FTlQKKwlmYWRkZAlwMTYsIHI4MCwgYTE2CisJZm11bGQJdTAwLCB2NDgsIHA0OAorCWFkZAljeSwgJWc1LCAlbzQJCUMgeCA9IHByZXYoaTAwKSArIGN5CisJYWRkY2MJJWkyLCA4LCAlaTIKKwlibnoscHQJJXhjYywgLkxvb3AKKwlmbXVsZAl1MzIsIHYxNiwgcjQ4CisKKy5MX2ZvdXI6CisJYixhCS5MX291dF80CisKK0MgQkVHSU4gTUFJTiBMT09QCisJLmFsaWduCTE2CisuTG9vcDoKK0MgMDAKKwlzcmx4CSVvNCwgMTYsICVvNQkJQyAoeCA+PiAxNikKKwlsZAlbJWk1KyVpMl0sICVmMwkJQyByZWFkIGxvdyAzMiBiaXRzIG9mIHVwW2ldCisJZm11bGQJdTMyLCB2MzIsIHI2NAlDIEZJWE1FIG5vdCB1cmdlbnQKKwlmYWRkZAlwMzIsIHIzMiwgYTMyCitDIDAxCisJYWRkCSVvNSwgJW8yLCAlbzIJCUMgbWk2NCBpbiAlbzIgICAybmQgQVNTSUdOTUVOVAorCWFuZAklbzQsIHhmZmZmLCAlbzUJCUMgKHggJiAweGZmZmYpCisJbGQJWyVpMSslaTJdLCAlZjUJCUMgcmVhZCBoaWdoIDMyIGJpdHMgb2YgdXBbaV0KKwlmZHRveAlhMDAsIGEwMAorQyAwMgorCWZhZGRkCXA0OCwgcjQ4LCBhNDgKK0MgMDMKKwlzcmx4CSVvMiwgNDgsICVvNwkJQyAobWk2NCA+PiA0OCkKKwltb3YJaTAwLCAlZzUJCUMgaTAwKyBub3cgaW4gZzUKKwlmbXVsZAl1MzIsIHY0OCwgcjgwCUMgRklYTUUgbm90IHVyZ2VudAorCWZkdG94CWExNiwgYTE2CitDIDA0CisJc2xseAklbzIsIDE2LCAlaTMJCUMgKG1pNjQgPDwgMTYpCisJYWRkCSVvNywgJW8xLCBjeQkJQyBuZXcgY3kKKwlsZHgJWyVzcCsyMjIzKzBdLCBpMDAKKwlmZHRveAlhMzIsIGEzMgorQyAwNQorCXNybHgJaTE2LCA0OCwgJWw0CQlDIChpMTYgPj4gNDgpCisJbW92CWkxNiwgJWcyCisJbGR4CVslc3ArMjIyMys4XSwgaTE2CisJZnh0b2QJJWYyLCB1MDAKK0MgMDYKKwlzcmx4CWk0OCwgMTYsICVsNQkJQyAoaTQ4ID4+IDE2KQorCW1vdglpMzIsICVnNAkJQyBpMzIrIG5vdyBpbiBnNAorCWxkeAlbJXNwKzIyMjMrMTZdLCBpMzIKKwlmeHRvZAklZjQsIHUzMgorQyAwNworCXNsbHgJaTQ4LCAzMiwgJWw2CQlDIChpNDggPDwgMzIpCisJb3IJJWkzLCAlbzUsICVvNQorCWxkeAlbJXNwKzIyMjMrMjRdLCBpNDgKKwlmZHRveAlhNDgsIGE0OAorQyAwOAorCXNybHgJJWc0LCAzMiwgJW8zCQlDIChpMzIgPj4gMzIpCisJYWRkCSVsNSwgJWw0LCAlbzEJCUMgaGk2NC0gaW4gJW8xCisJc3RkCWEwMCwgWyVzcCsyMjIzKzBdCisJZm11bGQJdTAwLCB2MDAsIHAwMAorQyAwOQorCXNsbHgJJWc0LCAxNiwgJW8yCQlDIChpMzIgPDwgMTYpCisJYWRkCSVvMywgJW8xLCAlbzEJCUMgaGk2NCBpbiAlbzEgICAxc3QgQVNTSUdOTUVOVAorCXN0ZAlhMTYsIFslc3ArMjIyMys4XQorCWZtdWxkCXUwMCwgdjE2LCBwMTYKK0MgMTAKKwlzbGx4CSVvMSwgNDgsICVvMwkJQyAoaGk2NCA8PCA0OCkKKwlhZGQJJWcyLCAlbzIsICVvMgkJQyBtaTY0LSBpbiAlbzIKKwlzdGQJYTMyLCBbJXNwKzIyMjMrMTZdCisJZm11bGQJdTAwLCB2MzIsIHAzMgorQyAxMQorCWFkZAklbDYsICVvMiwgJW8yCQlDIG1pNjQtIGluICVvMgorCXN0ZAlhNDgsIFslc3ArMjIyMysyNF0KKwlmYWRkZAlwMDAsIHI2NCwgYTAwCisJZm11bGQJdTMyLCB2MDAsIHIzMgorQyAxMgorCXN1YgklbzIsICVvMywgJW8yCQlDIG1pNjQgaW4gJW8yICAgMXN0IEFTU0lHTk1FTlQKKwlzdHgJJW81LCBbJWk0KyVpMl0KKwlmYWRkZAlwMTYsIHI4MCwgYTE2CisJZm11bGQJdTAwLCB2NDgsIHA0OAorQyAxMworCWFkZAljeSwgJWc1LCAlbzQJCUMgeCA9IHByZXYoaTAwKSArIGN5CisJYWRkY2MJJWkyLCA4LCAlaTIKKwlibnoscHQJJXhjYywgLkxvb3AKKwlmbXVsZAl1MzIsIHYxNiwgcjQ4CitDIEVORCBNQUlOIExPT1AKKworLkxfb3V0XzQ6CisJc3JseAklbzQsIDE2LCAlbzUJCUMgKHggPj4gMTYpCisJZm11bGQJdTMyLCB2MzIsIHI2NAlDIEZJWE1FIG5vdCB1cmdlbnQKKwlmYWRkZAlwMzIsIHIzMiwgYTMyCisJYWRkCSVvNSwgJW8yLCAlbzIJCUMgbWk2NCBpbiAlbzIgICAybmQgQVNTSUdOTUVOVAorCWFuZAklbzQsIHhmZmZmLCAlbzUJCUMgKHggJiAweGZmZmYpCisJZmR0b3gJYTAwLCBhMDAKKwlmYWRkZAlwNDgsIHI0OCwgYTQ4CisJc3JseAklbzIsIDQ4LCAlbzcJCUMgKG1pNjQgPj4gNDgpCisJbW92CWkwMCwgJWc1CQlDIGkwMCsgbm93IGluIGc1CisJZm11bGQJdTMyLCB2NDgsIHI4MAlDIEZJWE1FIG5vdCB1cmdlbnQKKwlmZHRveAlhMTYsIGExNgorCXNsbHgJJW8yLCAxNiwgJWkzCQlDIChtaTY0IDw8IDE2KQorCWFkZAklbzcsICVvMSwgY3kJCUMgbmV3IGN5CisJbGR4CVslc3ArMjIyMyswXSwgaTAwCisJZmR0b3gJYTMyLCBhMzIKKwlzcmx4CWkxNiwgNDgsICVsNAkJQyAoaTE2ID4+IDQ4KQorCW1vdglpMTYsICVnMgorCWxkeAlbJXNwKzIyMjMrOF0sIGkxNgorCXNybHgJaTQ4LCAxNiwgJWw1CQlDIChpNDggPj4gMTYpCisJbW92CWkzMiwgJWc0CQlDIGkzMisgbm93IGluIGc0CisJbGR4CVslc3ArMjIyMysxNl0sIGkzMgorCXNsbHgJaTQ4LCAzMiwgJWw2CQlDIChpNDggPDwgMzIpCisJb3IJJWkzLCAlbzUsICVvNQorCWxkeAlbJXNwKzIyMjMrMjRdLCBpNDgKKwlmZHRveAlhNDgsIGE0OAorCXNybHgJJWc0LCAzMiwgJW8zCQlDIChpMzIgPj4gMzIpCisJYWRkCSVsNSwgJWw0LCAlbzEJCUMgaGk2NC0gaW4gJW8xCisJc3RkCWEwMCwgWyVzcCsyMjIzKzBdCisJc2xseAklZzQsIDE2LCAlbzIJCUMgKGkzMiA8PCAxNikKKwlhZGQJJW8zLCAlbzEsICVvMQkJQyBoaTY0IGluICVvMSAgIDFzdCBBU1NJR05NRU5UCisJc3RkCWExNiwgWyVzcCsyMjIzKzhdCisJc2xseAklbzEsIDQ4LCAlbzMJCUMgKGhpNjQgPDwgNDgpCisJYWRkCSVnMiwgJW8yLCAlbzIJCUMgbWk2NC0gaW4gJW8yCisJc3RkCWEzMiwgWyVzcCsyMjIzKzE2XQorCWFkZAklbDYsICVvMiwgJW8yCQlDIG1pNjQtIGluICVvMgorCXN0ZAlhNDgsIFslc3ArMjIyMysyNF0KKwlzdWIJJW8yLCAlbzMsICVvMgkJQyBtaTY0IGluICVvMiAgIDFzdCBBU1NJR05NRU5UCisJc3R4CSVvNSwgWyVpNCslaTJdCisJYWRkCWN5LCAlZzUsICVvNAkJQyB4ID0gcHJldihpMDApICsgY3kKKwlhZGQJJWkyLCA4LCAlaTIKKy5MX291dF8zOgorCXNybHgJJW80LCAxNiwgJW81CQlDICh4ID4+IDE2KQorCWFkZAklbzUsICVvMiwgJW8yCQlDIG1pNjQgaW4gJW8yICAgMm5kIEFTU0lHTk1FTlQKKwlhbmQJJW80LCB4ZmZmZiwgJW81CQlDICh4ICYgMHhmZmZmKQorCWZkdG94CXI2NCwgYTAwCisJc3JseAklbzIsIDQ4LCAlbzcJCUMgKG1pNjQgPj4gNDgpCisJbW92CWkwMCwgJWc1CQlDIGkwMCsgbm93IGluIGc1CisJZmR0b3gJcjgwLCBhMTYKKwlzbGx4CSVvMiwgMTYsICVpMwkJQyAobWk2NCA8PCAxNikKKwlhZGQJJW83LCAlbzEsIGN5CQlDIG5ldyBjeQorCWxkeAlbJXNwKzIyMjMrMF0sIGkwMAorCXNybHgJaTE2LCA0OCwgJWw0CQlDIChpMTYgPj4gNDgpCisJbW92CWkxNiwgJWcyCisJbGR4CVslc3ArMjIyMys4XSwgaTE2CisJc3JseAlpNDgsIDE2LCAlbDUJCUMgKGk0OCA+PiAxNikKKwltb3YJaTMyLCAlZzQJCUMgaTMyKyBub3cgaW4gZzQKKwlsZHgJWyVzcCsyMjIzKzE2XSwgaTMyCisJc2xseAlpNDgsIDMyLCAlbDYJCUMgKGk0OCA8PCAzMikKKwlvcgklaTMsICVvNSwgJW81CisJbGR4CVslc3ArMjIyMysyNF0sIGk0OAorCXNybHgJJWc0LCAzMiwgJW8zCQlDIChpMzIgPj4gMzIpCisJYWRkCSVsNSwgJWw0LCAlbzEJCUMgaGk2NC0gaW4gJW8xCisJc3RkCWEwMCwgWyVzcCsyMjIzKzBdCisJc2xseAklZzQsIDE2LCAlbzIJCUMgKGkzMiA8PCAxNikKKwlhZGQJJW8zLCAlbzEsICVvMQkJQyBoaTY0IGluICVvMSAgIDFzdCBBU1NJR05NRU5UCisJc3RkCWExNiwgWyVzcCsyMjIzKzhdCisJc2xseAklbzEsIDQ4LCAlbzMJCUMgKGhpNjQgPDwgNDgpCisJYWRkCSVnMiwgJW8yLCAlbzIJCUMgbWk2NC0gaW4gJW8yCisJYWRkCSVsNiwgJW8yLCAlbzIJCUMgbWk2NC0gaW4gJW8yCisJc3ViCSVvMiwgJW8zLCAlbzIJCUMgbWk2NCBpbiAlbzIgICAxc3QgQVNTSUdOTUVOVAorCXN0eAklbzUsIFslaTQrJWkyXQorCWFkZAljeSwgJWc1LCAlbzQJCUMgeCA9IHByZXYoaTAwKSArIGN5CisJYWRkCSVpMiwgOCwgJWkyCisuTF9vdXRfMjoKKwlzcmx4CSVvNCwgMTYsICVvNQkJQyAoeCA+PiAxNikKKwlhZGQJJW81LCAlbzIsICVvMgkJQyBtaTY0IGluICVvMiAgIDJuZCBBU1NJR05NRU5UCisJYW5kCSVvNCwgeGZmZmYsICVvNQkJQyAoeCAmIDB4ZmZmZikKKwlzcmx4CSVvMiwgNDgsICVvNwkJQyAobWk2NCA+PiA0OCkKKwltb3YJaTAwLCAlZzUJCUMgaTAwKyBub3cgaW4gZzUKKwlzbGx4CSVvMiwgMTYsICVpMwkJQyAobWk2NCA8PCAxNikKKwlhZGQJJW83LCAlbzEsIGN5CQlDIG5ldyBjeQorCWxkeAlbJXNwKzIyMjMrMF0sIGkwMAorCXNybHgJaTE2LCA0OCwgJWw0CQlDIChpMTYgPj4gNDgpCisJbW92CWkxNiwgJWcyCisJbGR4CVslc3ArMjIyMys4XSwgaTE2CisJc3JseAlpNDgsIDE2LCAlbDUJCUMgKGk0OCA+PiAxNikKKwltb3YJaTMyLCAlZzQJCUMgaTMyKyBub3cgaW4gZzQKKwlzbGx4CWk0OCwgMzIsICVsNgkJQyAoaTQ4IDw8IDMyKQorCW9yCSVpMywgJW81LCAlbzUKKwlzcmx4CSVnNCwgMzIsICVvMwkJQyAoaTMyID4+IDMyKQorCWFkZAklbDUsICVsNCwgJW8xCQlDIGhpNjQtIGluICVvMQorCXNsbHgJJWc0LCAxNiwgJW8yCQlDIChpMzIgPDwgMTYpCisJYWRkCSVvMywgJW8xLCAlbzEJCUMgaGk2NCBpbiAlbzEgICAxc3QgQVNTSUdOTUVOVAorCXNsbHgJJW8xLCA0OCwgJW8zCQlDIChoaTY0IDw8IDQ4KQorCWFkZAklZzIsICVvMiwgJW8yCQlDIG1pNjQtIGluICVvMgorCWFkZAklbDYsICVvMiwgJW8yCQlDIG1pNjQtIGluICVvMgorCXN1YgklbzIsICVvMywgJW8yCQlDIG1pNjQgaW4gJW8yICAgMXN0IEFTU0lHTk1FTlQKKwlzdHgJJW81LCBbJWk0KyVpMl0KKwlhZGQJY3ksICVnNSwgJW80CQlDIHggPSBwcmV2KGkwMCkgKyBjeQorCWFkZAklaTIsIDgsICVpMgorLkxfb3V0XzE6CisJc3JseAklbzQsIDE2LCAlbzUJCUMgKHggPj4gMTYpCisJYWRkCSVvNSwgJW8yLCAlbzIJCUMgbWk2NCBpbiAlbzIgICAybmQgQVNTSUdOTUVOVAorCWFuZAklbzQsIHhmZmZmLCAlbzUJCUMgKHggJiAweGZmZmYpCisJc3JseAklbzIsIDQ4LCAlbzcJCUMgKG1pNjQgPj4gNDgpCisJc2xseAklbzIsIDE2LCAlaTMJCUMgKG1pNjQgPDwgMTYpCisJYWRkCSVvNywgJW8xLCBjeQkJQyBuZXcgY3kKKwlvcgklaTMsICVvNSwgJW81CisJc3R4CSVvNSwgWyVpNCslaTJdCisKKwlzbGx4CWkwMCwgMCwgJWcyCisJYWRkCSVnMiwgY3ksIGN5CisJc2xseAlpMTYsIDE2LCAlZzMKKwlhZGQJJWczLCBjeSwgY3kKKworCXJldHVybgklaTcrOAorCW1vdgljeSwgJW8wCitFUElMT0dVRShtcG5fbXVsXzEpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvdWx0cmFzcGFyYzEyMzQvc3FyX2RpYWdvbmFsLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjMTIzNC9zcXJfZGlhZ29uYWwuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzYzY5ZDMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvdWx0cmFzcGFyYzEyMzQvc3FyX2RpYWdvbmFsLmFzbQpAQCAtMCwwICsxLDM0MiBAQAorZG5sICBTUEFSQyB2OSA2NC1iaXQgbXBuX3Nxcl9kaWFnb25hbC4KKworZG5sICBDb3B5cmlnaHQgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCQkgICBjeWNsZXMvbGltYgorQyBVbHRyYVNQQVJDIDEmMjogICAgIDIyCitDIFVsdHJhU1BBUkMgMzoJICAgICAgMzYKKworQyBUaGlzIHdhcyBnZW5lcmF0ZWQgYnkgdGhlIFN1biBDIGNvbXBpbGVyLiAgSXQgcnVucyBhdCAyMiBjeWNsZXMvbGltYiBvbiB0aGUKK0MgVWx0cmFTUEFSQy0xLzIsIHRocmVlIGN5Y2xlcyBzbG93ZXIgdGhhbiB0aGVvcmV0aWNhbGx5IHBvc3NpYmxlIGZvciBvcHRpbWFsCitDIGNvZGUgdXNpbmcgdGhlIHNhbWUgYWxnb3JpdGhtLiAgRm9yIDEtMyBsaW1icywgYSBzcGVjaWFsIGxvb3Agd2FzIGdlbmVyYXRlZCwKK0Mgd2hpY2ggY2F1c2VzIHBlcmZvcm1hbmNlIHByb2JsZW1zIGluIHBhcnRpY3VsYXIgZm9yIDIgYW5kIDMgbGltYnMuCitDIFVsdGltYXRlbHksIHRoaXMgc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGhhbmQtd3JpdHRlbiBjb2RlIGluIHRoZSBzYW1lIHNvZnR3YXJlCitDIHBpcGVsaW5lIHN0eWxlIGFzIGUuZy4sIGFkZG11bF8xLmFzbS4KKworQVNNX1NUQVJUKCkKKwlSRUdJU1RFUiglZzIsI3NjcmF0Y2gpCisJUkVHSVNURVIoJWczLCNzY3JhdGNoKQorUFJPTE9HVUUobXBuX3Nxcl9kaWFnb25hbCkKKwlzYXZlCSVzcCwgLTI0MCwgJXNwCisKKwlzZXRoaQklaGkoMHgxZmZjMDApLCAlbzAKKwlzZXRoaQklaGkoMHgzZmZjMDApLCAlbzEKKwlhZGQJJW8wLCAxMDIzLCAlbzcKKwljbXAJJWkyLCA0CisJYWRkCSVvMSwgMTAyMywgJW80CisJb3IJJWcwLCAlaTEsICVnMQorCW9yCSVnMCwgJWkwLCAlbzAKKwlibCxwbgkleGNjLCAuTHNtYWxsCisJb3IJJWcwLCAwLCAlZzIKKworCWxkeAlbJWkxXSwgJW8xCisJYWRkCSVpMSwgMjQsICVnMQorCW9yCSVnMCwgMywgJWcyCisJc3JseAklbzEsIDQyLCAlZzMKKwlzdHgJJWczLCBbJXNwKzIyNzldCisJYW5kCSVvMSwgJW83LCAlbzIKKwlzdHgJJW8yLCBbJXNwKzIyNjNdCisJc3JseAklbzEsIDIxLCAlbzEKKwlsZGQJWyVzcCsyMjc5XSwgJWYwCisJYW5kCSVvMSwgJW83LCAlbzEKKwlzdHgJJW8xLCBbJXNwKzIyNzFdCisJbGR4CVslaTErOF0sICVvMgorCWZ4dG9kCSVmMCwgJWYxMgorCXNybHgJJW8yLCAyMSwgJW8xCisJYW5kCSVvMiwgJW83LCAlZzMKKwlsZGQJWyVzcCsyMjYzXSwgJWYyCisJZm11bGQJJWYxMiwgJWYxMiwgJWYxMAorCXNybHgJJW8yLCA0MiwgJW8yCisJbGRkCVslc3ArMjI3MV0sICVmMAorCWFuZAklbzEsICVvNywgJW8xCisJZnh0b2QJJWYyLCAlZjgKKwlzdHgJJW8yLCBbJXNwKzIyNzldCisJc3R4CSVvMSwgWyVzcCsyMjcxXQorCWZ4dG9kCSVmMCwgJWYwCisJc3R4CSVnMywgWyVzcCsyMjYzXQorCWZkdG94CSVmMTAsICVmMTQKKwlmbXVsZAklZjEyLCAlZjgsICVmNgorCWxkeAlbJWkxKzE2XSwgJW8yCisJc3RkCSVmMTQsIFslc3ArMjI1NV0KKwlmbXVsZAklZjAsICVmMCwgJWYyCisJZm11bGQJJWY4LCAlZjgsICVmMTAKKwlzcmx4CSVvMiwgNDIsICVvMQorCWZhZGRkCSVmNiwgJWY2LCAlZjYKKwlmbXVsZAklZjEyLCAlZjAsICVmMTIKKwlmbXVsZAklZjAsICVmOCwgJWY4CisJbGRkCVslc3ArMjI3OV0sICVmMAorCWxkZAlbJXNwKzIyNjNdLCAlZjQKKwlmZHRveAklZjEwLCAlZjEwCisJc3RkCSVmMTAsIFslc3ArMjIzOV0KKwlmYWRkZAklZjIsICVmNiwgJWY2CisJbGRkCVslc3ArMjI3MV0sICVmMgorCWZkdG94CSVmMTIsICVmMTIKKwlzdGQJJWYxMiwgWyVzcCsyMjQ3XQorCWZkdG94CSVmOCwgJWY4CisJc3RkCSVmOCwgWyVzcCsyMjMxXQorCWZkdG94CSVmNiwgJWY2CisJc3RkCSVmNiwgWyVzcCsyMjIzXQorCisuTG9vcDoJc3JseAklbzIsIDIxLCAlZzMKKwlzdHgJJW8xLCBbJXNwKzIyNzldCisJYWRkCSVnMiwgMSwgJWcyCisJYW5kCSVnMywgJW83LCAlbzEKKwlsZHgJWyVzcCsyMjU1XSwgJWc0CisJY21wCSVnMiwgJWkyCisJc3R4CSVvMSwgWyVzcCsyMjcxXQorCWFkZAklZzEsIDgsICVnMQorCWFkZAklbzAsIDE2LCAlbzAKKwlsZHgJWyVzcCsyMjM5XSwgJW8xCisJZnh0b2QJJWYwLCAlZjEwCisJZnh0b2QJJWY0LCAlZjE0CisJbGR4CVslc3ArMjIzMV0sICVpMAorCWxkeAlbJXNwKzIyMjNdLCAlZzUKKwlsZHgJWyVzcCsyMjQ3XSwgJWczCisJYW5kCSVvMiwgJW83LCAlbzIKKwlmeHRvZAklZjIsICVmOAorCWZtdWxkCSVmMTAsICVmMTAsICVmMAorCXN0eAklbzIsIFslc3ArMjI2M10KKwlmbXVsZAklZjEwLCAlZjE0LCAlZjYKKwlsZHgJWyVnMS04XSwgJW8yCisJZm11bGQJJWYxMCwgJWY4LCAlZjEyCisJZmR0b3gJJWYwLCAlZjIKKwlsZGQJWyVzcCsyMjc5XSwgJWYwCisJZm11bGQJJWY4LCAlZjgsICVmNAorCWZhZGRkCSVmNiwgJWY2LCAlZjYKKwlmbXVsZAklZjE0LCAlZjE0LCAlZjEwCisJc3RkCSVmMiwgWyVzcCsyMjU1XQorCXNsbHgJJWc0LCAyMCwgJWc0CisJbGRkCVslc3ArMjI3MV0sICVmMgorCWZtdWxkCSVmOCwgJWYxNCwgJWY4CisJc2xseAklaTAsIDIyLCAlaTEKKwlmZHRveAklZjEyLCAlZjEyCisJc3RkCSVmMTIsIFslc3ArMjI0N10KKwlzbGx4CSVnNSwgNDIsICVpMAorCWFkZAklbzEsICVpMSwgJW8xCisJZmFkZGQJJWY0LCAlZjYsICVmNgorCWxkZAlbJXNwKzIyNjNdLCAlZjQKKwlhZGQJJW8xLCAlaTAsICVvMQorCWFkZAklZzMsICVnNCwgJWczCisJZmR0b3gJJWYxMCwgJWYxMAorCXN0ZAklZjEwLCBbJXNwKzIyMzldCisJc3JseAklbzEsIDQyLCAlZzQKKwlhbmQJJWc1LCAlbzQsICVpMAorCWZkdG94CSVmOCwgJWY4CisJc3RkCSVmOCwgWyVzcCsyMjMxXQorCXNybHgJJWc1LCAyMiwgJWc1CisJc3ViCSVnNCwgJWkwLCAlZzQKKwlmZHRveAklZjYsICVmNgorCXN0ZAklZjYsIFslc3ArMjIyM10KKwlzcmx4CSVnNCwgNjMsICVnNAorCWFkZAklZzMsICVnNSwgJWczCisJYWRkCSVnMywgJWc0LCAlZzMKKwlzdHgJJW8xLCBbJW8wLTE2XQorCXNybHgJJW8yLCA0MiwgJW8xCisJYmwscHQJJXhjYywgLkxvb3AKKwlzdHgJJWczLCBbJW8wLThdCisKKwlzdHgJJW8xLCBbJXNwKzIyNzldCisJc3JseAklbzIsIDIxLCAlbzEKKwlmeHRvZAklZjAsICVmMTYKKwlsZHgJWyVzcCsyMjIzXSwgJWczCisJZnh0b2QJJWY0LCAlZjYKKwlhbmQJJW8yLCAlbzcsICVvMworCXN0eAklbzMsIFslc3ArMjI2M10KKwlmeHRvZAklZjIsICVmNAorCWFuZAklbzEsICVvNywgJW8xCisJbGR4CVslc3ArMjIzMV0sICVvMgorCXNsbHgJJWczLCA0MiwgJWc0CisJZm11bGQJJWYxNiwgJWYxNiwgJWYxNAorCXN0eAklbzEsIFslc3ArMjI3MV0KKwlmbXVsZAklZjE2LCAlZjYsICVmOAorCWFkZAklbzAsIDQ4LCAlbzAKKwlsZHgJWyVzcCsyMjM5XSwgJW8xCisJc2xseAklbzIsIDIyLCAlbzIKKwlmbXVsZAklZjQsICVmNCwgJWYxMAorCWxkeAlbJXNwKzIyNTVdLCAlbzMKKwlmZHRveAklZjE0LCAlZjE0CisJZm11bGQJJWY0LCAlZjYsICVmMgorCXN0ZAklZjE0LCBbJXNwKzIyNTVdCisJZmFkZGQJJWY4LCAlZjgsICVmMTIKKwlhZGQJJW8xLCAlbzIsICVvMgorCWZtdWxkCSVmMTYsICVmNCwgJWY0CisJbGRkCVslc3ArMjI3OV0sICVmMAorCXNsbHgJJW8zLCAyMCwgJWc1CisJYWRkCSVvMiwgJWc0LCAlbzIKKwlmbXVsZAklZjYsICVmNiwgJWY2CisJc3JseAklbzIsIDQyLCAlbzMKKwlhbmQJJWczLCAlbzQsICVnNAorCXNybHgJJWczLCAyMiwgJWczCisJZmFkZGQJJWYxMCwgJWYxMiwgJWYxNgorCWxkZAlbJXNwKzIyNzFdLCAlZjEyCisJbGRkCVslc3ArMjI2M10sICVmOAorCWZ4dG9kCSVmMCwgJWYwCisJc3ViCSVvMywgJWc0LCAlbzMKKwlsZHgJWyVzcCsyMjQ3XSwgJW8xCisJc3JseAklbzMsIDYzLCAlbzMKKwlmZHRveAklZjIsICVmMTAKKwlmeHRvZAklZjgsICVmOAorCXN0ZAklZjEwLCBbJXNwKzIyMzFdCisJZmR0b3gJJWY2LCAlZjYKKwlzdGQJJWY2LCBbJXNwKzIyMzldCisJYWRkCSVvMSwgJWc1LCAlbzEKKwlmbXVsZAklZjAsICVmMCwgJWYyCisJZmR0b3gJJWYxNiwgJWYxNgorCXN0ZAklZjE2LCBbJXNwKzIyMjNdCisJYWRkCSVvMSwgJWczLCAlbzEKKwlmZHRveAklZjQsICVmNAorCXN0ZAklZjQsIFslc3ArMjI0N10KKwlmbXVsZAklZjAsICVmOCwgJWYxMAorCWZ4dG9kCSVmMTIsICVmMTIKKwlhZGQJJW8xLCAlbzMsICVvMQorCXN0eAklbzIsIFslbzAtNDhdCisJZm11bGQJJWY4LCAlZjgsICVmNgorCXN0eAklbzEsIFslbzAtNDBdCisJZmR0b3gJJWYyLCAlZjIKKwlsZHgJWyVzcCsyMjMxXSwgJW8yCisJZmFkZGQJJWYxMCwgJWYxMCwgJWYxMAorCWxkeAlbJXNwKzIyMjNdLCAlZzMKKwlmbXVsZAklZjEyLCAlZjEyLCAlZjQKKwlmZHRveAklZjYsICVmNgorCWxkeAlbJXNwKzIyMzldLCAlbzEKKwlzbGx4CSVvMiwgMjIsICVvMgorCWZtdWxkCSVmMTIsICVmOCwgJWY4CisJc2xseAklZzMsIDQyLCAlZzUKKwlsZHgJWyVzcCsyMjU1XSwgJW8zCisJZm11bGQJJWYwLCAlZjEyLCAlZjAKKwlhZGQJJW8xLCAlbzIsICVvMgorCWZhZGRkCSVmNCwgJWYxMCwgJWY0CisJbGR4CVslc3ArMjI0N10sICVvMQorCWFkZAklbzIsICVnNSwgJW8yCisJYW5kCSVnMywgJW80LCAlZzQKKwlmZHRveAklZjgsICVmOAorCXNsbHgJJW8zLCAyMCwgJWc1CisJc3RkCSVmOCwgWyVzcCsyMjMxXQorCWZkdG94CSVmMCwgJWYwCisJc3JseAklbzIsIDQyLCAlbzMKKwlhZGQJJW8xLCAlZzUsICVvMQorCWZkdG94CSVmNCwgJWY0CisJc3JseAklZzMsIDIyLCAlZzMKKwlzdWIJJW8zLCAlZzQsICVvMworCXN0ZAklZjYsIFslc3ArMjIzOV0KKwlzdGQJJWY0LCBbJXNwKzIyMjNdCisJc3JseAklbzMsIDYzLCAlbzMKKwlhZGQJJW8xLCAlZzMsICVvMQorCXN0ZAklZjIsIFslc3ArMjI1NV0KKwlhZGQJJW8xLCAlbzMsICVvMQorCXN0ZAklZjAsIFslc3ArMjI0N10KKwlzdHgJJW8yLCBbJW8wLTMyXQorCXN0eAklbzEsIFslbzAtMjRdCisJbGR4CVslc3ArMjIzMV0sICVvMgorCWxkeAlbJXNwKzIyMjNdLCAlbzMKKwlsZHgJWyVzcCsyMjM5XSwgJW8xCisJc2xseAklbzIsIDIyLCAlbzIKKwlzbGx4CSVvMywgNDIsICVnNQorCWxkeAlbJXNwKzIyNTVdLCAlZzQKKwlhbmQJJW8zLCAlbzQsICVnMworCWFkZAklbzEsICVvMiwgJW8yCisJbGR4CVslc3ArMjI0N10sICVvMQorCWFkZAklbzIsICVnNSwgJW8yCisJc3R4CSVvMiwgWyVvMC0xNl0KKwlzbGx4CSVnNCwgMjAsICVnNAorCXNybHgJJW8yLCA0MiwgJW8yCisJYWRkCSVvMSwgJWc0LCAlbzEKKwlzcmx4CSVvMywgMjIsICVvMworCXN1YgklbzIsICVnMywgJW8yCisJc3JseAklbzIsIDYzLCAlbzIKKwlhZGQJJW8xLCAlbzMsICVvMQorCWFkZAklbzEsICVvMiwgJW8xCisJc3R4CSVvMSwgWyVvMC04XQorCXJldAorCXJlc3RvcmUJJWcwLCAlZzAsICVnMAorLkxzbWFsbDoKKwlsZHgJWyVnMV0sICVvMgorLkxvb3AwOgorCWFuZAklbzIsICVvNywgJW8xCisJc3R4CSVvMSwgWyVzcCsyMjYzXQorCWFkZAklZzIsIDEsICVnMgorCXNybHgJJW8yLCAyMSwgJW8xCisJYWRkCSVnMSwgOCwgJWcxCisJc3JseAklbzIsIDQyLCAlbzIKKwlzdHgJJW8yLCBbJXNwKzIyNzldCisJYW5kCSVvMSwgJW83LCAlbzEKKwlsZGQJWyVzcCsyMjYzXSwgJWYwCisJY21wCSVnMiwgJWkyCisJc3R4CSVvMSwgWyVzcCsyMjcxXQorCWZ4dG9kCSVmMCwgJWY2CisJbGRkCVslc3ArMjI3OV0sICVmMAorCWxkZAlbJXNwKzIyNzFdLCAlZjQKKwlmeHRvZAklZjAsICVmMgorCWZtdWxkCSVmNiwgJWY2LCAlZjAKKwlmeHRvZAklZjQsICVmMTAKKwlmbXVsZAklZjIsICVmNiwgJWY0CisJZmR0b3gJJWYwLCAlZjAKKwlzdGQJJWYwLCBbJXNwKzIyMzldCisJZm11bGQJJWYxMCwgJWY2LCAlZjgKKwlmbXVsZAklZjEwLCAlZjEwLCAlZjAKKwlmYWRkZAklZjQsICVmNCwgJWY2CisJZm11bGQJJWYyLCAlZjIsICVmNAorCWZkdG94CSVmOCwgJWY4CisJc3RkCSVmOCwgWyVzcCsyMjMxXQorCWZtdWxkCSVmMiwgJWYxMCwgJWYyCisJZmFkZGQJJWYwLCAlZjYsICVmMAorCWZkdG94CSVmNCwgJWY0CisJc3RkCSVmNCwgWyVzcCsyMjU1XQorCWZkdG94CSVmMiwgJWYyCisJc3RkCSVmMiwgWyVzcCsyMjQ3XQorCWZkdG94CSVmMCwgJWYwCisJc3RkCSVmMCwgWyVzcCsyMjIzXQorCWxkeAlbJXNwKzIyMzldLCAlbzEKKwlsZHgJWyVzcCsyMjU1XSwgJWc0CisJbGR4CVslc3ArMjIzMV0sICVvMgorCXNsbHgJJWc0LCAyMCwgJWc0CisJbGR4CVslc3ArMjIyM10sICVvMworCXNsbHgJJW8yLCAyMiwgJW8yCisJc2xseAklbzMsIDQyLCAlZzUKKwlhZGQJJW8xLCAlbzIsICVvMgorCWxkeAlbJXNwKzIyNDddLCAlbzEKKwlhZGQJJW8yLCAlZzUsICVvMgorCXN0eAklbzIsIFslbzBdCisJYW5kCSVvMywgJW80LCAlZzMKKwlzcmx4CSVvMiwgNDIsICVvMgorCWFkZAklbzEsICVnNCwgJW8xCisJc3JseAklbzMsIDIyLCAlbzMKKwlzdWIJJW8yLCAlZzMsICVvMgorCXNybHgJJW8yLCA2MywgJW8yCisJYWRkCSVvMSwgJW8zLCAlbzEKKwlhZGQJJW8xLCAlbzIsICVvMQorCXN0eAklbzEsIFslbzArOF0KKwlhZGQJJW8wLCAxNiwgJW8wCisJYmwsYSxwdAkleGNjLCAuTG9vcDAKKwlsZHgJWyVnMV0sICVvMgorCXJldAorCXJlc3RvcmUJJWcwLCAlZzAsICVnMAorRVBJTE9HVUUobXBuX3Nxcl9kaWFnb25hbCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjMTIzNC9zdWJfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvdWx0cmFzcGFyYzEyMzQvc3ViX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYjdmNzAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvdWx0cmFzcGFyYzEyMzQvc3ViX24uYXNtCkBAIC0wLDAgKzEsMjQxIEBACitkbmwgIFNQQVJDIHY5IG1wbl9zdWJfbiAtLSBTdWJ0cmFjdCB0d28gbGltYiB2ZWN0b3JzIG9mIHRoZSBzYW1lIGxlbmd0aCA+IDAgYW5kCitkbmwgIHN0b3JlIGRpZmZlcmVuY2UgaW4gYSB0aGlyZCBsaW1iIHZlY3Rvci4KKworZG5sICBDb3B5cmlnaHQgMjAwMS0yMDAzLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJCSAgIGN5Y2xlcy9saW1iCitDIFVsdHJhU1BBUkMgMSYyOiAgICAgNAorQyBVbHRyYVNQQVJDIDM6CSAgICAgIDQuNQorCitDIENvbXB1dGUgY2Fycnktb3V0IGZyb20gdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiB1LHYsIGFuZCByLCB3aGVyZQorQyByPXUtdi1jYXJyeV9pbiwgdXNpbmcgbG9naWMgb3BlcmF0aW9ucy4KKworQyBUaGlzIGNvZGUgcnVucyBhdCA0IGN5Y2xlcy9saW1iIG9uIFVsdHJhU1BBUkMgMSBhbmQgMi4gIEl0IGhhcyBhIDQgaW5zbgorQyByZWN1cnJlbmN5LCBhbmQgdGhlIFVsdHJhU1BBUkMgMSBhbmQgMiB0aGUgSUUgdW5pdHMgYXJlIDEwMCUgc2F0dXJhdGVkLgorQyBUaGVyZWZvcmUsIGl0IHNlZW1zIGZ1dGlsZSB0byB0cnkgdG8gb3B0aW1pemUgdGhpcyBhbnkgZnVydGhlci4uLgorCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLGAlaTAnKQorZGVmaW5lKGB1cCcsYCVpMScpCitkZWZpbmUoYHZwJyxgJWkyJykKK2RlZmluZShgbicsYCVpMycpCisKK2RlZmluZShgdTAnLGAlbDAnKQorZGVmaW5lKGB1MScsYCVsMicpCitkZWZpbmUoYHUyJyxgJWw0JykKK2RlZmluZShgdTMnLGAlbDYnKQorZGVmaW5lKGB2MCcsYCVsMScpCitkZWZpbmUoYHYxJyxgJWwzJykKK2RlZmluZShgdjInLGAlbDUnKQorZGVmaW5lKGB2MycsYCVsNycpCisKK2RlZmluZShgY3knLGAlaTQnKQorCitkZWZpbmUoYGZhbm9wJyxgZml0b2QgJWYwLCVmMicpCQlkbmwgIEEgcXVhc2kgbm9wIHJ1bm5pbmcgaW4gdGhlIEZBIHBpcGUKK2RlZmluZShgZm1ub3AnLGBmbXVsZCAlZjAsJWYwLCVmNCcpCWRubCAgQSBxdWFzaSBub3AgcnVubmluZyBpbiB0aGUgRk0gcGlwZQorCitBU01fU1RBUlQoKQorCVJFR0lTVEVSKCVnMiwjc2NyYXRjaCkKKwlSRUdJU1RFUiglZzMsI3NjcmF0Y2gpCitQUk9MT0dVRShtcG5fc3ViX25jKQorCXNhdmUJJXNwLC0xNjAsJXNwCisKKwlmaXRvZAklZjAsJWYwCQlDIG1ha2Ugc3VyZSBmMCBjb250YWlucyBzbWFsbCwgcXVpZXQgbnVtYmVyCisJc3ViY2MJbiw0LCVnMAorCWJsLHBuCSV4Y2MsLkxvb3AwCisJbm9wCisJYixhCUwoY29tKQorRVBJTE9HVUUoKQorCitQUk9MT0dVRShtcG5fc3ViX24pCisJc2F2ZQklc3AsLTE2MCwlc3AKKworCWZpdG9kCSVmMCwlZjAJCUMgbWFrZSBzdXJlIGYwIGNvbnRhaW5zIHNtYWxsLCBxdWlldCBudW1iZXIKKwlzdWJjYwluLDQsJWcwCisJYmwscG4JJXhjYywuTG9vcDAKKwltb3YJMCxjeQorTChjb20pOgorCWxkeAlbdXArMF0sdTAKKwlsZHgJW3ZwKzBdLHYwCisJYWRkCXVwLDMyLHVwCisJbGR4CVt1cC0yNF0sdTEKKwlsZHgJW3ZwKzhdLHYxCisJYWRkCXZwLDMyLHZwCisJbGR4CVt1cC0xNl0sdTIKKwlsZHgJW3ZwLTE2XSx2MgorCWxkeAlbdXAtOF0sdTMKKwlsZHgJW3ZwLThdLHYzCisJc3ViY2MJbiw4LG4KKwlzdWIJdTAsdjAsJWcxCUMgbWFpbiBzdWIKKwlzdWIJJWcxLGN5LCVnNQlDIGNhcnJ5IHN1YgorCW9ybgl1MCx2MCwlZzIKKwlibCxwbgkleGNjLC5MZW5kNDU2NworCWZhbm9wCisJYixhCS5Mb29wCisKKwkuYWxpZ24JMTYKK0MgU1RBUlQgTUFJTiBMT09QCisuTG9vcDoJb3JuCSVnNSwlZzIsJWcyCisJYW5kbgl1MCx2MCwlZzMKKwlsZHgJW3VwKzBdLHUwCisJZmFub3AKK0MgLS0KKwlhbmRuCSVnMiwlZzMsJWcyCisJbGR4CVt2cCswXSx2MAorCWFkZAl1cCwzMix1cAorCWZhbm9wCitDIC0tCisJc3JseAklZzIsNjMsY3kKKwlzdWIJdTEsdjEsJWcxCisJc3R4CSVnNSxbcnArMF0KKwlmYW5vcAorQyAtLQorCXN1YgklZzEsY3ksJWc1CisJb3JuCXUxLHYxLCVnMgorCWZtbm9wCisJZmFub3AKK0MgLS0KKwlvcm4JJWc1LCVnMiwlZzIKKwlhbmRuCXUxLHYxLCVnMworCWxkeAlbdXAtMjRdLHUxCisJZmFub3AKK0MgLS0KKwlhbmRuCSVnMiwlZzMsJWcyCisJbGR4CVt2cCs4XSx2MQorCWFkZAl2cCwzMix2cAorCWZhbm9wCitDIC0tCisJc3JseAklZzIsNjMsY3kKKwlzdWIJdTIsdjIsJWcxCisJc3R4CSVnNSxbcnArOF0KKwlmYW5vcAorQyAtLQorCXN1YgklZzEsY3ksJWc1CisJb3JuCXUyLHYyLCVnMgorCWZtbm9wCisJZmFub3AKK0MgLS0KKwlvcm4JJWc1LCVnMiwlZzIKKwlhbmRuCXUyLHYyLCVnMworCWxkeAlbdXAtMTZdLHUyCisJZmFub3AKK0MgLS0KKwlhbmRuCSVnMiwlZzMsJWcyCisJbGR4CVt2cC0xNl0sdjIKKwlhZGQJcnAsMzIscnAKKwlmYW5vcAorQyAtLQorCXNybHgJJWcyLDYzLGN5CisJc3ViCXUzLHYzLCVnMQorCXN0eAklZzUsW3JwLTE2XQorCWZhbm9wCitDIC0tCisJc3ViCSVnMSxjeSwlZzUKKwlvcm4JdTMsdjMsJWcyCisJZm1ub3AKKwlmYW5vcAorQyAtLQorCW9ybgklZzUsJWcyLCVnMgorCWFuZG4JdTMsdjMsJWczCisJbGR4CVt1cC04XSx1MworCWZhbm9wCitDIC0tCisJYW5kbgklZzIsJWczLCVnMgorCXN1YmNjCW4sNCxuCisJbGR4CVt2cC04XSx2MworCWZhbm9wCitDIC0tCisJc3JseAklZzIsNjMsY3kKKwlzdWIJdTAsdjAsJWcxCisJc3R4CSVnNSxbcnAtOF0KKwlmYW5vcAorQyAtLQorCXN1YgklZzEsY3ksJWc1CisJb3JuCXUwLHYwLCVnMgorCWJnZSxwdAkleGNjLC5Mb29wCisJZmFub3AKK0MgRU5EIE1BSU4gTE9PUAorLkxlbmQ0NTY3OgorCW9ybgklZzUsJWcyLCVnMgorCWFuZG4JdTAsdjAsJWczCisJYW5kbgklZzIsJWczLCVnMgorCXNybHgJJWcyLDYzLGN5CisJc3ViCXUxLHYxLCVnMQorCXN0eAklZzUsW3JwKzBdCisJc3ViCSVnMSxjeSwlZzUKKwlvcm4JdTEsdjEsJWcyCisJb3JuCSVnNSwlZzIsJWcyCisJYW5kbgl1MSx2MSwlZzMKKwlhbmRuCSVnMiwlZzMsJWcyCisJc3JseAklZzIsNjMsY3kKKwlzdWIJdTIsdjIsJWcxCisJc3R4CSVnNSxbcnArOF0KKwlzdWIJJWcxLGN5LCVnNQorCW9ybgl1Mix2MiwlZzIKKwlvcm4JJWc1LCVnMiwlZzIKKwlhbmRuCXUyLHYyLCVnMworCWFuZG4JJWcyLCVnMywlZzIKKwlhZGQJcnAsMzIscnAKKwlzcmx4CSVnMiw2MyxjeQorCXN1Ygl1Myx2MywlZzEKKwlzdHgJJWc1LFtycC0xNl0KKwlzdWIJJWcxLGN5LCVnNQorCW9ybgl1Myx2MywlZzIKKwlvcm4JJWc1LCVnMiwlZzIKKwlhbmRuCXUzLHYzLCVnMworCWFuZG4JJWcyLCVnMywlZzIKKwlzcmx4CSVnMiw2MyxjeQorCXN0eAklZzUsW3JwLThdCisKKwlhZGRjYwluLDQsbgorCWJ6LHBuCSV4Y2MsLkxyZXQKKwlmYW5vcAorCisuTG9vcDA6CWxkeAlbdXBdLHUwCisJYWRkCXVwLDgsdXAKKwlsZHgJW3ZwXSx2MAorCWFkZAl2cCw4LHZwCisJYWRkCXJwLDgscnAKKwlzdWJjYwluLDEsbgorCXN1Ygl1MCx2MCwlZzEKKwlvcm4JdTAsdjAsJWcyCisJc3ViCSVnMSxjeSwlZzUKKwlhbmRuCXUwLHYwLCVnMworCW9ybgklZzUsJWcyLCVnMgorCXN0eAklZzUsW3JwLThdCisJYW5kbgklZzIsJWczLCVnMgorCWJueixwdAkleGNjLC5Mb29wMAorCXNybHgJJWcyLDYzLGN5CisKKy5McmV0Ogltb3YJY3ksJWkwCisJcmV0CisJcmVzdG9yZQorRVBJTE9HVUUobXBuX3N1Yl9uKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmMxMjM0L3N1Ym11bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjMTIzNC9zdWJtdWxfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJkYjU2NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjMTIzNC9zdWJtdWxfMS5hc20KQEAgLTAsMCArMSw2OCBAQAorZG5sICBTUEFSQyB2OSA2NC1iaXQgbXBuX3N1Ym11bF8xIC0tIE11bHRpcGx5IGEgbGltYiB2ZWN0b3Igd2l0aCBhIGxpbWIgYW5kCitkbmwgIHN1YnRyYWN0IHRoZSByZXN1bHQgZnJvbSBhIHNlY29uZCBsaW1iIHZlY3Rvci4KKworZG5sICBDb3B5cmlnaHQgMjAwMS0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJCSAgIGN5Y2xlcy9saW1iCitDIFVsdHJhU1BBUkMgMSYyOiAgICAgMTgKK0MgVWx0cmFTUEFSQyAzOgkgICAgICAyMworCitDIElOUFVUIFBBUkFNRVRFUlMKK0MgcnAJaTAKK0MgdXAJaTEKK0MgbglpMgorQyB2CWkzCisKK0FTTV9TVEFSVCgpCisJUkVHSVNURVIoJWcyLCNzY3JhdGNoKQorCitQUk9MT0dVRShtcG5fc3VibXVsXzEpCisJc2F2ZQklc3AsLTE3Niwlc3AKKworCXNsbHgJJWkyLCAzLCAlZzIKKwlvcgklZzAsICVpMSwgJW8xCisJYWRkCSVnMiwgMTUsICVvMAorCW9yCSVnMCwgJWkyLCAlbzIKKwlhbmQJJW8wLCAtMTYsICVvMAorCXN1Ygklc3AsICVvMCwgJXNwCisJYWRkCSVzcCwgMjIyMywgJW8wCisJb3IJJWcwLCAlbzAsICVsMAorCWNhbGwJbXBuX211bF8xCisJb3IJJWcwLCAlaTMsICVvMworCW9yCSVnMCwgJW8wLCAlbDEJCUMgcHJlc2VydmUgY2FycnkgdmFsdWUgZnJvbSBtcG5fbXVsXzEKKwlvcgklZzAsICVpMCwgJW8wCisJb3IJJWcwLCAlaTAsICVvMQorCW9yCSVnMCwgJWwwLCAlbzIKKwljYWxsCW1wbl9zdWJfbgorCW9yCSVnMCwgJWkyLCAlbzMKKwlyZXQKKwlyZXN0b3JlCSVsMSwgJW8wLCAlbzAJCUMgc3VtIGNhcnJ5IHZhbHVlcworRVBJTE9HVUUobXBuX3N1Ym11bF8xKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmMzNC9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvdWx0cmFzcGFyYzM0L2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODhlNjgwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmMzNC9nbXAtbXBhcmFtLmgKQEAgLTAsMCArMSwyMjIgQEAKKy8qIHVsdHJhc3BhcmMzLzQgZ21wLW1wYXJhbS5oIC0tIENvbXBpbGVyL21hY2hpbmUgcGFyYW1ldGVyIGhlYWRlciBmaWxlLgorCitDb3B5cmlnaHQgMTk5MSwgMTk5MywgMTk5NCwgMTk5OS0yMDAyLCAyMDA0LCAyMDA2LCAyMDA4LTIwMTAsIDIwMTQsIDIwMTUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgNjQKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgOAorCisvKiAxNTkzIE1IeiB1bHRyYXNwYXJjMyBydW5uaW5nIFNvbGFyaXMgMTAgKHN3aWZ0Lm5hZGEua3RoLnNlKSAqLworLyogRkZUIHR1bmluZyBsaW1pdCA9IDEwMCBNICovCisvKiBHZW5lcmF0ZWQgYnkgdHVuZXVwLmMsIDIwMTUtMTAtMDksIGdjYyAzLjQgKi8KKworI2RlZmluZSBESVZSRU1fMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIERJVlJFTV8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfMVBfTUVUSE9EICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgTU9EXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PRF8xTl9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA3CisjZGVmaW5lIE1PRF8xVV9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA1CisjZGVmaW5lIE1PRF8xXzFfVE9fTU9EXzFfMl9USFJFU0hPTEQgICAgICAgIDIyCisjZGVmaW5lIE1PRF8xXzJfVE9fTU9EXzFfNF9USFJFU0hPTEQgICAgICAgICAwICAvKiBuZXZlciBtcG5fbW9kXzFzXzJwICovCisjZGVmaW5lIFBSRUlOVl9NT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgIDI5CisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIERJVl9RUl8xTl9QSTFfTUVUSE9EICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIERJVl9RUl8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAyCisjZGVmaW5lIERJVl9RUl8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICAxCisjZGVmaW5lIERJVl9RUl8yX1BJMl9USFJFU0hPTEQgICAgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKworI2RlZmluZSBNVUxfVE9PTTIyX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyOAorI2RlZmluZSBNVUxfVE9PTTMzX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA5MworI2RlZmluZSBNVUxfVE9PTTQ0X1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE0MgorI2RlZmluZSBNVUxfVE9PTTZIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE2NQorI2RlZmluZSBNVUxfVE9PTThIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDI3OAorCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTQzX1RIUkVTSE9MRCAgICAgIDkzCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgMTE0CisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgIDg4CisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTYzX1RIUkVTSE9MRCAgICAgIDUwCisjZGVmaW5lIE1VTF9UT09NNDNfVE9fVE9PTTU0X1RIUkVTSE9MRCAgICAgIDY3CisKKyNkZWZpbmUgU1FSX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNzAKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMDEKKyNkZWZpbmUgU1FSX1RPT000X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxODQKKyNkZWZpbmUgU1FSX1RPT002X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBTUVJfVE9PTThfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDMzOQorCisjZGVmaW5lIE1VTE1JRF9UT09NNDJfVEhSRVNIT0xEICAgICAgICAgICAgIDQwCisKKyNkZWZpbmUgTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgU1FSTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDkKKworI2RlZmluZSBNVUxfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDIxMiAgLyogayA9IDUgKi8KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDIxMiwgNX0sIHsgICAgIDEzLCA2fSwgeyAgICAgMTcsIDd9LCB7ICAgICAgOSwgNn0sIFwKKyAgICB7ICAgICAxOSwgN30sIHsgICAgIDE3LCA4fSwgeyAgICAgIDksIDd9LCB7ICAgICAyMCwgOH0sIFwKKyAgICB7ICAgICAxMSwgN30sIHsgICAgIDIzLCA4fSwgeyAgICAgMTMsIDl9LCB7ICAgICAgNywgOH0sIFwKKyAgICB7ICAgICAxOSwgOX0sIHsgICAgIDExLCA4fSwgeyAgICAgMjUsMTB9LCB7ICAgICAgNywgOX0sIFwKKyAgICB7ICAgICAxNSwgOH0sIHsgICAgIDMzLCA5fSwgeyAgICAgMTksIDh9LCB7ICAgICAzOSwgOX0sIFwKKyAgICB7ICAgICAyMywgOH0sIHsgICAgIDQ3LCA5fSwgeyAgICAgMjcsMTB9LCB7ICAgICAxNSwgOX0sIFwKKyAgICB7ICAgICAzOSwxMH0sIHsgICAgIDIzLCA5fSwgeyAgICAgNDcsMTF9LCB7ICAgICAxNSwxMH0sIFwKKyAgICB7ICAgICAzMSwgOX0sIHsgICAgIDYzLCA4fSwgeyAgICAxMjcsIDd9LCB7ICAgIDI1NSwgOX0sIFwKKyAgICB7ICAgICA2NywxMH0sIHsgICAgIDM5LCA5fSwgeyAgICAgNzksIDh9LCB7ICAgIDE1OSwgN30sIFwKKyAgICB7ICAgIDMxOSwgOX0sIHsgICAgIDgzLDEwfSwgeyAgICAgNDcsIDl9LCB7ICAgICA5NSwgOH0sIFwKKyAgICB7ICAgIDE5MSwgN30sIHsgICAgMzgzLDEwfSwgeyAgICAgNTUsMTF9LCB7ICAgICAzMSwxMH0sIFwKKyAgICB7ICAgICA2MywgOX0sIHsgICAgMTI3LCA4fSwgeyAgICAyNTUsIDd9LCB7ICAgIDUxMSwxMH0sIFwKKyAgICB7ICAgICA3MSwgOX0sIHsgICAgMTQzLCA4fSwgeyAgICAyODcsMTB9LCB7ICAgICA3OSwgOX0sIFwKKyAgICB7ICAgIDE1OSwgOH0sIHsgICAgMzE5LCA5fSwgeyAgICAxNzUsIDh9LCB7ICAgIDM1MSwxMX0sIFwKKyAgICB7ICAgICA0NywxMH0sIHsgICAgIDk1LCA5fSwgeyAgICAxOTEsIDh9LCB7ICAgIDM4MywgN30sIFwKKyAgICB7ICAgIDc2NywxMH0sIHsgICAgMTAzLDEyfSwgeyAgICAgMzEsMTF9LCB7ICAgICA2MywxMH0sIFwKKyAgICB7ICAgIDEyNywgOX0sIHsgICAgMjg3LDExfSwgeyAgICAgNzksMTB9LCB7ICAgIDE1OSwgOX0sIFwKKyAgICB7ICAgIDMxOSwgOH0sIHsgICAgNjM5LDEwfSwgeyAgICAxNzUsIDl9LCB7ICAgIDM1MSwgOH0sIFwKKyAgICB7ICAgIDcwMywxMX0sIHsgICAgIDk1LDEwfSwgeyAgICAyMDcsIDl9LCB7ICAgIDQxNSwxMX0sIFwKKyAgICB7ICAgIDExMSwxMH0sIHsgICAgMjIzLCA5fSwgeyAgICA0NzksMTJ9LCB7ICAgICA2MywxMX0sIFwKKyAgICB7ICAgIDEyNywxMH0sIHsgICAgMjU1LDExfSwgeyAgICAxNDMsMTB9LCB7ICAgIDI4NywgOX0sIFwKKyAgICB7ICAgIDU3NSwxMH0sIHsgICAgMzE5LCA5fSwgeyAgICA2MzksMTF9LCB7ICAgIDE3NSwxMH0sIFwKKyAgICB7ICAgIDM1MSwxMX0sIHsgICAgMTkxLDEwfSwgeyAgICAzODMsMTF9LCB7ICAgIDIwNywxMH0sIFwKKyAgICB7ICAgIDQxNSwxMX0sIHsgICAgMjIzLDEwfSwgeyAgICA0NDcsMTN9LCB7ICAgICA2MywxMn0sIFwKKyAgICB7ICAgIDEyNywxMX0sIHsgICAgMjg3LDEwfSwgeyAgICA1NzUsMTF9LCB7ICAgIDMxOSwxMH0sIFwKKyAgICB7ICAgIDcwMywxMn0sIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTJ9LCB7ICAgIDIyMywxMX0sIFwKKyAgICB7ICAgIDQ0NywxM30sIHsgICAgMTI3LDEyfSwgeyAgICAyODcsMTF9LCB7ICAgIDU3NSwxMn0sIFwKKyAgICB7ICAgIDM1MSwxM30sIHsgICAgMTkxLDEyfSwgeyAgICA0NzksMTR9LCB7ICAgIDEyNywxM30sIFwKKyAgICB7ICAgIDI1NSwxMn0sIHsgICAgNTc1LDEzfSwgeyAgICAzMTksMTJ9LCB7ICAgIDcwMywxM30sIFwKKyAgICB7ICAgIDM4MywxMn0sIHsgICAgNzY3LDEzfSwgeyAgICA0NDcsMTJ9LCB7ICAgIDg5NSwxNH0sIFwKKyAgICB7ICAgIDI1NSwxM30sIHsgICAgNTExLDEyfSwgeyAgIDEwMjMsMTN9LCB7ICAgIDU3NSwxMn0sIFwKKyAgICB7ICAgMTE1MSwxM30sIHsgICAgNzAzLDE0fSwgeyAgICAzODMsMTN9LCB7ICAgIDgzMSwxMn0sIFwKKyAgICB7ICAgMTY2MywxM30sIHsgICAgODk1LDE1fSwgeyAgICAyNTUsMTR9LCB7ICAgIDUxMSwxM30sIFwKKyAgICB7ICAgMTE1MSwxNH0sIHsgICAgNjM5LDEzfSwgeyAgIDE0MDcsMTJ9LCB7ICAgMjgxNSwxNH0sIFwKKyAgICB7ICAgIDc2NywxM30sIHsgICAxNjYzLDE0fSwgeyAgICA4OTUsMTN9LCB7ICAgMTc5MSwxNX0sIFwKKyAgICB7ICAgIDUxMSwxNH0sIHsgICAxMDIzLDEzfSwgeyAgIDIwNDcsMTR9LCB7ICAgMTE1MSwxM30sIFwKKyAgICB7ICAgMjMwMywxNH0sIHsgICAxNDA3LDEzfSwgeyAgIDI4MTUsMTV9LCB7ICAgIDc2NywxNH0sIFwKKyAgICB7ICAgMTc5MSwxNn0sIHsgICAgNTExLDE1fSwgeyAgIDEwMjMsMTR9LCB7ICAgMjMwMywxNX0sIFwKKyAgICB7ICAgMTI3OSwxNH0sIHsgICAyODE1LDE1fSwgeyAgIDE1MzUsMTR9LCB7ICAgMzE5OSwxNX0sIFwKKyAgICB7ICAgMTc5MSwxNn0sIHsgICAxMDIzLDE1fSwgeyAgIDIwNDcsMTR9LCB7ICAgNDIyMywxNX0sIFwKKyAgICB7ICAgMjMwMywxNH0sIHsgICA0ODYzLDE1fSwgeyAgIDI4MTUsMTZ9LCB7ICA2NTUzNiwxN30sIFwKKyAgICB7IDEzMTA3MiwxOH0sIHsgMjYyMTQ0LDE5fSwgeyA1MjQyODgsMjB9LCB7MTA0ODU3NiwyMX0sIFwKKyAgICB7MjA5NzE1MiwyMn0sIHs0MTk0MzA0LDIzfSwgezgzODg2MDgsMjR9IH0KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTNfU0laRSAxNzEKKyNkZWZpbmUgTVVMX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDIyNDAKKworI2RlZmluZSBTUVJfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDI0NCAgLyogayA9IDUgKi8KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDI0NCwgNX0sIHsgICAgICA4LCA0fSwgeyAgICAgMTcsIDV9LCB7ICAgICAxNSwgNn0sIFwKKyAgICB7ICAgICAgOCwgNX0sIHsgICAgIDE3LCA2fSwgeyAgICAgMTcsIDd9LCB7ICAgICAgOSwgNn0sIFwKKyAgICB7ICAgICAxOSwgN30sIHsgICAgIDE3LCA4fSwgeyAgICAgIDksIDd9LCB7ICAgICAyMCwgOH0sIFwKKyAgICB7ICAgICAxMSwgN30sIHsgICAgIDIzLCA4fSwgeyAgICAgMTMsIDl9LCB7ICAgICAgNywgOH0sIFwKKyAgICB7ICAgICAxOSwgOX0sIHsgICAgIDExLCA4fSwgeyAgICAgMjUsMTB9LCB7ICAgICAgNywgOX0sIFwKKyAgICB7ICAgICAxNSwgOH0sIHsgICAgIDMxLCA5fSwgeyAgICAgMTksIDh9LCB7ICAgICAzOSwgOX0sIFwKKyAgICB7ICAgICAyNywxMH0sIHsgICAgIDE1LCA5fSwgeyAgICAgMzksMTB9LCB7ICAgICAyMywgOX0sIFwKKyAgICB7ICAgICA0NywxMX0sIHsgICAgIDE1LDEwfSwgeyAgICAgMzEsIDl9LCB7ICAgICA2NywxMH0sIFwKKyAgICB7ICAgICAzOSwgOX0sIHsgICAgIDc5LCA4fSwgeyAgICAxNTksMTB9LCB7ICAgICA0NywgOX0sIFwKKyAgICB7ICAgICA5NSwxMH0sIHsgICAgIDU1LDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA2MywgOX0sIFwKKyAgICB7ICAgIDEyNywgOH0sIHsgICAgMjU1LDEwfSwgeyAgICAgNzEsIDl9LCB7ICAgIDE0MywgOH0sIFwKKyAgICB7ICAgIDI4NywgN30sIHsgICAgNTc1LDEwfSwgeyAgICAgNzksIDl9LCB7ICAgIDE1OSwxMX0sIFwKKyAgICB7ICAgICA0NywgOX0sIHsgICAgMTkxLCA4fSwgeyAgICAzODMsIDd9LCB7ICAgIDc2NywgOX0sIFwKKyAgICB7ICAgIDIwNywxMn0sIHsgICAgIDMxLDExfSwgeyAgICAgNjMsMTB9LCB7ICAgIDEyNywgOX0sIFwKKyAgICB7ICAgIDI1NSwgOH0sIHsgICAgNTExLDEwfSwgeyAgICAxMzUsIDl9LCB7ICAgIDI3MSwxMH0sIFwKKyAgICB7ICAgIDE0MywgOX0sIHsgICAgMjg3LDExfSwgeyAgICAgNzksMTB9LCB7ICAgIDE1OSwgOX0sIFwKKyAgICB7ICAgIDMxOSwgOH0sIHsgICAgNjM5LDEwfSwgeyAgICAxNzUsIDl9LCB7ICAgIDM1MSwgOH0sIFwKKyAgICB7ICAgIDcwMywgN30sIHsgICAxNDA3LDExfSwgeyAgICAgOTUsMTB9LCB7ICAgIDE5MSwgOX0sIFwKKyAgICB7ICAgIDM4MywgOH0sIHsgICAgNzY3LDEwfSwgeyAgICAyMDcsIDl9LCB7ICAgIDQxNSwxMH0sIFwKKyAgICB7ICAgIDIyMywgOX0sIHsgICAgNDQ3LDEyfSwgeyAgICAgNjMsMTF9LCB7ICAgIDEyNywxMH0sIFwKKyAgICB7ICAgIDI3MSwgOX0sIHsgICAgNTQzLDEwfSwgeyAgICAyODcsIDl9LCB7ICAgIDU3NSwgOH0sIFwKKyAgICB7ICAgMTE1MSwxMX0sIHsgICAgMTU5LDEwfSwgeyAgICAzMTksIDl9LCB7ICAgIDYzOSwxMH0sIFwKKyAgICB7ICAgIDM1MSwgOX0sIHsgICAgNzAzLCA4fSwgeyAgIDE0MDcsIDd9LCB7ICAgMjgxNSwxMX0sIFwKKyAgICB7ICAgIDIwNywxMH0sIHsgICAgNDE1LCA5fSwgeyAgICA4MzEsMTF9LCB7ICAgIDIyMywxMH0sIFwKKyAgICB7ICAgIDQ0NywgOX0sIHsgICAgODk1LDEzfSwgeyAgICAgNjMsMTF9LCB7ICAgIDI3MSwxMH0sIFwKKyAgICB7ICAgIDU0MywxMX0sIHsgICAgMjg3LDEyfSwgeyAgICAxNTksMTF9LCB7ICAgIDM1MSwxMH0sIFwKKyAgICB7ICAgIDcwMywxMn0sIHsgICAgMTkxLDExfSwgeyAgICA0MTUsMTB9LCB7ICAgIDgzMSwxMn0sIFwKKyAgICB7ICAgIDIyMywxM30sIHsgICAgMTI3LDEyfSwgeyAgICAyNTUsMTF9LCB7ICAgIDUxMSwxMH0sIFwKKyAgICB7ICAgMTAyMywxMX0sIHsgICAgNTQzLDEyfSwgeyAgICAyODcsMTF9LCB7ICAgIDYwNywxMn0sIFwKKyAgICB7ICAgIDMxOSwxMX0sIHsgICAgNjM5LDEyfSwgeyAgICA0MTUsMTF9LCB7ICAgIDg5NSwxMn0sIFwKKyAgICB7ICAgIDQ3OSwxNH0sIHsgICAgMTI3LDEzfSwgeyAgICAyNTUsMTJ9LCB7ICAgIDU0MywxMX0sIFwKKyAgICB7ICAgMTA4NywxMn0sIHsgICAgNTc1LDExfSwgeyAgIDExNTEsMTN9LCB7ICAgIDMxOSwxMn0sIFwKKyAgICB7ICAgIDYzOSwxMX0sIHsgICAxMjc5LDEyfSwgeyAgICA3MDMsMTB9LCB7ICAgMjgxNSwxMn0sIFwKKyAgICB7ICAgIDgzMSwxMX0sIHsgICAxNjYzLDEzfSwgeyAgICA0NDcsMTJ9LCB7ICAgIDk1OSwxNH0sIFwKKyAgICB7ICAgIDI1NSwxM30sIHsgICAgNTExLDEyfSwgeyAgIDEwODcsMTN9LCB7ICAgIDcwMywxMn0sIFwKKyAgICB7ICAgMTQwNywxNH0sIHsgICAgMzgzLDEzfSwgeyAgICA3NjcsMTJ9LCB7ICAgMTUzNSwxM30sIFwKKyAgICB7ICAgIDg5NSwxNX0sIHsgICAgMjU1LDE0fSwgeyAgICA1MTEsMTN9LCB7ICAgMTIxNSwxNH0sIFwKKyAgICB7ICAgIDYzOSwxM30sIHsgICAxMjc5LDE0fSwgeyAgICA3NjcsMTN9LCB7ICAgMTY2MywxNH0sIFwKKyAgICB7ICAgIDg5NSwxM30sIHsgICAxOTE5LDE1fSwgeyAgICA1MTEsMTR9LCB7ICAgMTAyMywxM30sIFwKKyAgICB7ICAgMjE3NSwxNH0sIHsgICAxMTUxLDEzfSwgeyAgIDI0MzEsMTR9LCB7ICAgMTQwNywxNX0sIFwKKyAgICB7ICAgIDc2NywxNH0sIHsgICAxNzkxLDE2fSwgeyAgICA1MTEsMTV9LCB7ICAgMTAyMywxNH0sIFwKKyAgICB7ICAgMjMwMywxNX0sIHsgICAxMjc5LDE0fSwgeyAgIDI4MTUsMTV9LCB7ICAgMTUzNSwxNH0sIFwKKyAgICB7ICAgMzE5OSwxNX0sIHsgICAxNzkxLDE2fSwgeyAgIDEwMjMsMTV9LCB7ICAgMjA0NywxNH0sIFwKKyAgICB7ICAgNDM1MSwxNX0sIHsgICAyMzAzLDE0fSwgeyAgIDQ4NjMsMTV9LCB7ICAgMjgxNSwxNn0sIFwKKyAgICB7ICA2NTUzNiwxN30sIHsgMTMxMDcyLDE4fSwgeyAyNjIxNDQsMTl9LCB7IDUyNDI4OCwyMH0sIFwKKyAgICB7MTA0ODU3NiwyMX0sIHsyMDk3MTUyLDIyfSwgezQxOTQzMDQsMjN9LCB7ODM4ODYwOCwyNH0gfQorI2RlZmluZSBTUVJfRkZUX1RBQkxFM19TSVpFIDE4NAorI2RlZmluZSBTUVJfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTcyOAorCisjZGVmaW5lIE1VTExPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTVVMTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgTVVMTE9fTVVMX05fVEhSRVNIT0xEICAgICAgICAgICAgIDQzOTIKKyNkZWZpbmUgU1FSTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDIKKyNkZWZpbmUgU1FSTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgNjMKKyNkZWZpbmUgU1FSTE9fU1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDMxNzYKKworI2RlZmluZSBEQ19ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBEQ19ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgICA2NAorI2RlZmluZSBEQ19CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBEQ19CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA4NgorCisjZGVmaW5lIElOVl9NVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgIDU4CisjZGVmaW5lIElOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIElOVl9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDE1CisKKyNkZWZpbmUgQklOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAxMDkKKyNkZWZpbmUgUkVEQ18xX1RPX1JFRENfMl9USFJFU0hPTEQgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBSRURDXzJfVE9fUkVEQ19OX1RIUkVTSE9MRCAgICAgICAgIDExNworCisjZGVmaW5lIE1VX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNjE4CisjZGVmaW5lIE1VX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAgNjE4CisjZGVmaW5lIE1VUElfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTVVfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICA2ODAKKyNkZWZpbmUgTVVfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA4MDcKKworI2RlZmluZSBQT1dNX1NFQ19UQUJMRSAgMywyMiwxMDIsNTc5LDE1NTUKKworI2RlZmluZSBHRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBHRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgICAyOAorI2RlZmluZSBTRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDM4MQorI2RlZmluZSBTRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgMTA0MgorCisjZGVmaW5lIEZBQ19EU0NfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgNDYyCisjZGVmaW5lIEZBQ19PRERfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKworI2RlZmluZSBNQVRSSVgyMl9TVFJBU1NFTl9USFJFU0hPTEQgICAgICAgICAxMgorI2RlZmluZSBIR0NEX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgICA0NQorI2RlZmluZSBIR0NEX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA1MAorI2RlZmluZSBIR0NEX1JFRFVDRV9USFJFU0hPTEQgICAgICAgICAgICAgMTA5NAorI2RlZmluZSBHQ0RfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDEyNgorI2RlZmluZSBHQ0RFWFRfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDEzMgorI2RlZmluZSBKQUNPQklfQkFTRV9NRVRIT0QgICAgICAgICAgICAgICAgICAgNApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmN0MS9hZGRfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvdWx0cmFzcGFyY3QxL2FkZF9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTRjN2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmN0MS9hZGRfbi5hc20KQEAgLTAsMCArMSw2OCBAQAorZG5sICBTUEFSQyB2OSBtcG5fYWRkX24gZm9yIFQxL1QyLgorCitkbmwgIENvcHlyaWdodCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJCSAgIGN5Y2xlcy9saW1iCitDIFVsdHJhU1BBUkMgVDE6CSA/CitDIFVsdHJhU1BBUkMgVDI6CSA/CisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsIGAlbzAnKQorZGVmaW5lKGB1cCcsIGAlbzEnKQorZGVmaW5lKGB2cCcsIGAlbzInKQorZGVmaW5lKGBuJywgIGAlbzMnKQorZGVmaW5lKGBjeScsIGAlbzQnKQorCitBU01fU1RBUlQoKQorCVJFR0lTVEVSKCVnMiwjc2NyYXRjaCkKKwlSRUdJU1RFUiglZzMsI3NjcmF0Y2gpCitQUk9MT0dVRShtcG5fYWRkX25jKQorCWIsYQlMKGVudCkKK0VQSUxPR1VFKCkKK1BST0xPR1VFKG1wbl9hZGRfbikKKwltb3YJMCwgY3kKK0woZW50KToJY21wCSVnMCwgY3kKK0wodG9wKToJbGR4CVt1cCswXSwgJW80CisJYWRkCXVwLCA4LCB1cAorCWxkeAlbdnArMF0sICVvNQorCWFkZAl2cCwgOCwgdnAKKwlhZGQJcnAsIDgsIHJwCisJYWRkCW4sIC0xLCBuCisJc3JseAklbzQsIDMyLCAlZzEKKwlzcmx4CSVvNSwgMzIsICVnMgorCWFkZGNjYwklbzQsICVvNSwgJWczCisJYWRkY2NjCSVnMSwgJWcyLCAlZzAKKwlicmd6CW4sIEwodG9wKQorCSBzdHgJJWczLCBbcnAtOF0KKworCXJldGwKKwlhZGRjCSVnMCwgJWcwLCAlbzAKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDEvYWRkbHNoMV9uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDEvYWRkbHNoMV9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTM0Nzk3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmN0MS9hZGRsc2gxX24uYXNtCkBAIC0wLDAgKzEsNDEgQEAKK2RubCAgU1BBUkMgdjkgbXBuX2FkZGxzaDFfbiBmb3IgVDEvVDIuCisKK2RubCAgQ29weXJpZ2h0IDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitkZWZpbmUoTFNILCAgICAgICAgICAgICAxKQorZGVmaW5lKFJTSCwgICAgICAgICAgICAgNjMpCisKK2RlZmluZShmdW5jLCBtcG5fYWRkbHNoMV9uKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRsc2gxX24pCisKK2luY2x1ZGVfbXBuKGBzcGFyYzY0L3VsdHJhc3BhcmN0MS9hZGRsc2hDX24uYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDEvYWRkbHNoMl9uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDEvYWRkbHNoMl9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTFhZmQwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmN0MS9hZGRsc2gyX24uYXNtCkBAIC0wLDAgKzEsNDEgQEAKK2RubCAgU1BBUkMgdjkgbXBuX2FkZGxzaDJfbiBmb3IgVDEvVDIuCisKK2RubCAgQ29weXJpZ2h0IDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitkZWZpbmUoTFNILCAgICAgICAgICAgICAyKQorZGVmaW5lKFJTSCwgICAgICAgICAgICAgNjIpCisKK2RlZmluZShmdW5jLCBtcG5fYWRkbHNoMl9uKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRsc2gyX24pCisKK2luY2x1ZGVfbXBuKGBzcGFyYzY0L3VsdHJhc3BhcmN0MS9hZGRsc2hDX24uYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDEvYWRkbHNoQ19uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDEvYWRkbHNoQ19uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmU5YTBkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmN0MS9hZGRsc2hDX24uYXNtCkBAIC0wLDAgKzEsNjkgQEAKK2RubCAgU1BBUkMgdjkgbXBuX2FkZGxzaENfbiBmb3IgVDEvVDIuCisKK2RubCAgQ29weXJpZ2h0IDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworQwkJICAgY3ljbGVzL2xpbWIKK0MgVWx0cmFTUEFSQyBUMToJMjEKK0MgVWx0cmFTUEFSQyBUMjoJID8KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywgYCVvMCcpCitkZWZpbmUoYHVwJywgYCVvMScpCitkZWZpbmUoYHZwJywgYCVvMicpCitkZWZpbmUoYG4nLCAgYCVvMycpCitkZWZpbmUoYGN5JywgYCVvNCcpCisKK0FTTV9TVEFSVCgpCisJUkVHSVNURVIoJWcyLCNzY3JhdGNoKQorCVJFR0lTVEVSKCVnMywjc2NyYXRjaCkKK1BST0xPR1VFKGZ1bmMpCisJbW92CTAsIGN5CisJbW92CTAsICVnNQorCWNtcAklZzAsIGN5CitMKHRvcCk6CWxkeAlbdXArMF0sICVvNAorCWFkZAl1cCwgOCwgdXAKKwlsZHgJW3ZwKzBdLCAlbzUKKwlhZGQJdnAsIDgsIHZwCisJYWRkCXJwLCA4LCBycAorCisJc2xseAklbzUsIExTSCwgJWc0CisJYWRkCW4sIC0xLCBuCisJb3IJJWc1LCAlZzQsICVnNAorCXNybHgJJW81LCBSU0gsICVnNQorCisJc3JseAklbzQsIDMyLCAlZzEKKwlzcmx4CSVnNCwgMzIsICVnMgorCWFkZGNjYwklbzQsICVnNCwgJWczCisJYWRkY2NjCSVnMSwgJWcyLCAlZzAKKwlicmd6CW4sIEwodG9wKQorCSBzdHgJJWczLCBbcnAtOF0KKworCXJldGwKKwlhZGRjCSVnNSwgJWcwLCAlbzAKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDEvYWRkbXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmN0MS9hZGRtdWxfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjlkYmE5NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDEvYWRkbXVsXzEuYXNtCkBAIC0wLDAgKzEsODYgQEAKK2RubCAgU1BBUkMgdjkgbXBuX2FkZG11bF8xIGZvciBUMS9UMi4KKworZG5sICBDb3B5cmlnaHQgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCQkgICBjeWNsZXMvbGltYgorQyBVbHRyYVNQQVJDIFQxOgk3NAorQyBVbHRyYVNQQVJDIFQyOgkgPworCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLCBgJWkwJykKK2RlZmluZShgdXAnLCBgJWkxJykKK2RlZmluZShgbicsICBgJWkyJykKK2RlZmluZShgdjAnLCBgJWkzJykKKworQVNNX1NUQVJUKCkKKwlSRUdJU1RFUiglZzIsI3NjcmF0Y2gpCisJUkVHSVNURVIoJWczLCNzY3JhdGNoKQorUFJPTE9HVUUobXBuX2FkZG11bF8xKQorCXNhdmUJJXNwLCAtMTc2LCAlc3AKKwltb3YJMSwgJW8yCisJbW92CSVpMCwgJWcyCisJc3JseAklaTMsIDMyLCAlbzQKKwlzbGx4CSVvMiwgMzIsICVvMgorCXNybAklaTMsIDAsICVpMworCW1vdgkwLCAlZzMKKwltb3YJMCwgJWkwCisKK0wodG9wKToJbGR4CVslaTErJWczXSwgJWcxCisJc3JsCSVnMSwgMCwgJWc0CisJbXVseAklZzQsICVpMywgJW81CisJc3JseAklZzEsIDMyLCAlZzEKKwltdWx4CSVnMSwgJWkzLCAlZzUKKwltdWx4CSVnNCwgJW80LCAlZzQKKwltdWx4CSVnMSwgJW80LCAlZzEKKwlzcmx4CSVvNSwgMzIsICVvMQorCWFkZAklZzUsICVvMSwgJW8xCisJYWRkY2MJJW8xLCAlZzQsICVnNAorCXNybAklbzUsIDAsICVvMAorCWxkeAlbJWcyKyVnM10sICVvNQorCXNsbHgJJWc0LCAzMiwgJW8xCisJYWRkCSVnMSwgJW8yLCAlbDEKKwltb3ZsdQkleGNjLCAlbDEsICVnMQorCWFkZAklbzEsICVvMCwgJWwwCisJYWRkY2MJJWwwLCAlaTAsICVnNQorCXNybHgJJWc0LCAzMiwgJWkwCisJYWRkCSVpMCwgMSwgJWc0CisJbW92bHUJJXhjYywgJWc0LCAlaTAKKwlhZGRjYwklbzUsICVnNSwgJWc1CisJc3R4CSVnNSwgWyVnMislZzNdCisJYWRkCSVpMCwgMSwgJWc0CisJbW92bHUJJXhjYywgJWc0LCAlaTAKKwlhZGQJJWkyLCAtMSwgJWkyCisJYWRkCSVpMCwgJWcxLCAlaTAKKwlicm56LHB0CSVpMiwgTCh0b3ApCisJIGFkZAklZzMsIDgsICVnMworCXJldHVybgklaTcrOAorCSBub3AKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDEvZ21wLW1wYXJhbS5oIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmN0MS9nbXAtbXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlkYjc4YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDEvZ21wLW1wYXJhbS5oCkBAIC0wLDAgKzEsMTU0IEBACisvKiBTcGFyYzY0IGdtcC1tcGFyYW0uaCAtLSBDb21waWxlci9tYWNoaW5lIHBhcmFtZXRlciBoZWFkZXIgZmlsZS4KKworQ29weXJpZ2h0IDE5OTEsIDE5OTMsIDE5OTQsIDE5OTktMjAwMiwgMjAwNCwgMjAwNiwgMjAwOC0yMDEwIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2RlZmluZSBHTVBfTElNQl9CSVRTIDY0CisjZGVmaW5lIEdNUF9MSU1CX0JZVEVTIDgKKworLyogMTAwMCBNSHogdWx0cmFzcGFyYyB0MSBydW5uaW5nIEdOVS9MaW51eCAqLworCisjZGVmaW5lIERJVlJFTV8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgRElWUkVNXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMV8xUF9NRVRIT0QgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBNT0RfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PRF8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFOX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgMTMKKyNkZWZpbmUgTU9EXzFVX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgTVBfU0laRV9UX01BWAorI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAgMCAgLyogbmV2ZXIgbXBuX21vZF8xXzFwICovCisjZGVmaW5lIE1PRF8xXzJfVE9fTU9EXzFfNF9USFJFU0hPTEQgICAgICAgICAwICAvKiBuZXZlciBtcG5fbW9kXzFzXzJwICovCisjZGVmaW5lIFBSRUlOVl9NT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgIDM0CisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIERJVl9RUl8yX1BJMl9USFJFU0hPTEQgICAgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKworI2RlZmluZSBNVUxfVE9PTTIyX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBNVUxfVE9PTTMzX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA1MAorI2RlZmluZSBNVUxfVE9PTTQ0X1RIUkVTSE9MRCAgICAgICAgICAgICAgICA5OQorI2RlZmluZSBNVUxfVE9PTTZIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDEyNQorI2RlZmluZSBNVUxfVE9PTThIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE4NworCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTQzX1RIUkVTSE9MRCAgICAgIDY1CisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgIDc3CisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgIDY1CisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTYzX1RIUkVTSE9MRCAgICAgIDUwCisjZGVmaW5lIE1VTF9UT09NNDNfVE9fVE9PTTU0X1RIUkVTSE9MRCAgICAgIDM0CisKKyNkZWZpbmUgU1FSX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBTUVJfVE9PTTJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBTUVJfVE9PTTNfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA1NworI2RlZmluZSBTUVJfVE9PTTRfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDEzMworI2RlZmluZSBTUVJfVE9PTTZfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE1NgorI2RlZmluZSBTUVJfVE9PTThfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDI2MAorCisjZGVmaW5lIE1VTE1JRF9UT09NNDJfVEhSRVNIT0xEICAgICAgICAgICAgIDEyCisKKyNkZWZpbmUgTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgU1FSTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDcKKworI2RlZmluZSBNVUxfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDE3NiAgLyogayA9IDUgKi8KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDE3NiwgNX0sIHsgICAgICA3LCA2fSwgeyAgICAgIDQsIDV9LCB7ICAgICAgOSwgNn0sIFwKKyAgICB7ICAgICAgNSwgNX0sIHsgICAgIDExLCA2fSwgeyAgICAgMTEsIDd9LCB7ICAgICAgNiwgNn0sIFwKKyAgICB7ICAgICAxMywgN30sIHsgICAgICA3LCA2fSwgeyAgICAgMTUsIDd9LCB7ICAgICAgOSwgOH0sIFwKKyAgICB7ICAgICAgNSwgN30sIHsgICAgIDEzLCA4fSwgeyAgICAgIDcsIDd9LCB7ICAgICAxNSwgNn0sIFwKKyAgICB7ICAgICAzMiwgN30sIHsgICAgIDI0LCA4fSwgeyAgICAgMjEsIDl9LCB7ICAgICAxMSwgOH0sIFwKKyAgICB7ICAgICAyMywxMH0sIHsgICAgICA3LCA5fSwgeyAgICAgMTUsIDh9LCB7ICAgICAzMywgOX0sIFwKKyAgICB7ICAgICAxOSwgOH0sIHsgICAgIDM5LCA5fSwgeyAgICAgMjMsMTB9LCB7ICAgICAxNSwgOX0sIFwKKyAgICB7ICAgICA0MywxMH0sIHsgICAgIDIzLDExfSwgeyAgICAgMTUsMTB9LCB7ICAgICAzMSwgOX0sIFwKKyAgICB7ICAgICA2MywgOH0sIHsgICAgMTI3LCA5fSwgeyAgICAgNjcsMTB9LCB7ICAgICAzOSwgOX0sIFwKKyAgICB7ICAgICA3OSwgOH0sIHsgICAgMTU5LDEwfSwgeyAgICAgNDcsIDl9LCB7ICAgICA5NSwxMX0sIFwKKyAgICB7ICAgMjA0OCwxMn0sIHsgICA0MDk2LDEzfSwgeyAgIDgxOTIsMTR9LCB7ICAxNjM4NCwxNX0sIFwKKyAgICB7ICAzMjc2OCwxNn0sIHsgIDY1NTM2LDE3fSwgeyAxMzEwNzIsMTh9LCB7IDI2MjE0NCwxOX0sIFwKKyAgICB7IDUyNDI4OCwyMH0sIHsxMDQ4NTc2LDIxfSwgezIwOTcxNTIsMjJ9LCB7NDE5NDMwNCwyM30sIFwKKyAgICB7ODM4ODYwOCwyNH0gfQorI2RlZmluZSBNVUxfRkZUX1RBQkxFM19TSVpFIDUzCisjZGVmaW5lIE1VTF9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAxNzI4CisKKworI2RlZmluZSBTUVJfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDE0OCAgLyogayA9IDUgKi8KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDE0OCwgNX0sIHsgICAgICA3LCA2fSwgeyAgICAgIDQsIDV9LCB7ICAgICAgOSwgNn0sIFwKKyAgICB7ICAgICAgNSwgNX0sIHsgICAgIDExLCA2fSwgeyAgICAgMTEsIDd9LCB7ICAgICAgNiwgNn0sIFwKKyAgICB7ICAgICAxMywgN30sIHsgICAgICA3LCA2fSwgeyAgICAgMTUsIDd9LCB7ICAgICAxMywgOH0sIFwKKyAgICB7ICAgICAgNywgN30sIHsgICAgIDE2LCA4fSwgeyAgICAgIDksIDZ9LCB7ICAgICAzOCwgN30sIFwKKyAgICB7ICAgICAyMCwgOH0sIHsgICAgIDExLCA3fSwgeyAgICAgMjQsIDh9LCB7ICAgICAxMywgOX0sIFwKKyAgICB7ICAgICAgNywgN30sIHsgICAgIDMwLCA4fSwgeyAgICAgMTksIDl9LCB7ICAgICAxMSwgOH0sIFwKKyAgICB7ICAgICAyNSwxMH0sIHsgICAgICA3LCA5fSwgeyAgICAgMTUsIDh9LCB7ICAgICAzMSwgOX0sIFwKKyAgICB7ICAgICAxOSwgOH0sIHsgICAgIDM5LCA5fSwgeyAgICAgMjcsMTB9LCB7ICAgICAxNSwgOX0sIFwKKyAgICB7ICAgICAzOSwxMH0sIHsgICAgIDIzLCA5fSwgeyAgICAgNDcsIDh9LCB7ICAgICA5NSwgOX0sIFwKKyAgICB7ICAgICA1MSwxMX0sIHsgICAgIDE1LDEwfSwgeyAgICAgMzEsIDh9LCB7ICAgIDEyNywxMH0sIFwKKyAgICB7ICAgICAzOSwgOX0sIHsgICAgIDc5LCA4fSwgeyAgICAxNTksMTB9LCB7ICAgICA0NywgOX0sIFwKKyAgICB7ICAgICA5NSwxMX0sIHsgICAyMDQ4LDEyfSwgeyAgIDQwOTYsMTN9LCB7ICAgODE5MiwxNH0sIFwKKyAgICB7ICAxNjM4NCwxNX0sIHsgIDMyNzY4LDE2fSwgeyAgNjU1MzYsMTd9LCB7IDEzMTA3MiwxOH0sIFwKKyAgICB7IDI2MjE0NCwxOX0sIHsgNTI0Mjg4LDIwfSwgezEwNDg1NzYsMjF9LCB7MjA5NzE1MiwyMn0sIFwKKyAgICB7NDE5NDMwNCwyM30sIHs4Mzg4NjA4LDI0fSB9CisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzX1NJWkUgNTgKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDEzNDQKKworI2RlZmluZSBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgICAzMTc2CisKKyNkZWZpbmUgRENfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgRENfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAxMDYKKyNkZWZpbmUgRENfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgRENfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNjIKKworI2RlZmluZSBJTlZfTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAxNAorI2RlZmluZSBJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE2MworI2RlZmluZSBJTlZfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDExNworCisjZGVmaW5lIEJJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTY2CisjZGVmaW5lIFJFRENfMV9UT19SRURDX05fVEhSRVNIT0xEICAgICAgICAgIDMxCisKKyNkZWZpbmUgTVVfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA3MzQKKyNkZWZpbmUgTVVfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICA3NDgKKyNkZWZpbmUgTVVQSV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgNjcKKyNkZWZpbmUgTVVfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICA1NjIKKyNkZWZpbmUgTVVfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA3MzQKKworI2RlZmluZSBQT1dNX1NFQ19UQUJMRSAgNCwyOSwxODgsNjQzLDI3NDEKKworI2RlZmluZSBNQVRSSVgyMl9TVFJBU1NFTl9USFJFU0hPTEQgICAgICAgICAxMQorI2RlZmluZSBIR0NEX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgICA1OAorI2RlZmluZSBIR0NEX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA1NQorI2RlZmluZSBIR0NEX1JFRFVDRV9USFJFU0hPTEQgICAgICAgICAgICAgIDYzNworI2RlZmluZSBHQ0RfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDE4NgorI2RlZmluZSBHQ0RFWFRfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE0MAorI2RlZmluZSBKQUNPQklfQkFTRV9NRVRIT0QgICAgICAgICAgICAgICAgICAgMworCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgIDMzCisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjY4CisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgOTYwCisKKyNkZWZpbmUgRkFDX0RTQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAyNjgKKyNkZWZpbmUgRkFDX09ERF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmN0MS9tdWxfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvdWx0cmFzcGFyY3QxL211bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmVhMmExCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmN0MS9tdWxfMS5hc20KQEAgLTAsMCArMSw4MiBAQAorZG5sICBTUEFSQyB2OSBtcG5fbXVsXzEgZm9yIFQxL1QyLgorCitkbmwgIENvcHlyaWdodCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJCSAgIGN5Y2xlcy9saW1iCitDIFVsdHJhU1BBUkMgVDE6CTY4CitDIFVsdHJhU1BBUkMgVDI6CSA/CisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsIGAlaTAnKQorZGVmaW5lKGB1cCcsIGAlaTEnKQorZGVmaW5lKGBuJywgIGAlaTInKQorZGVmaW5lKGB2MCcsIGAlaTMnKQorCitBU01fU1RBUlQoKQorCVJFR0lTVEVSKCVnMiwjc2NyYXRjaCkKKwlSRUdJU1RFUiglZzMsI3NjcmF0Y2gpCitQUk9MT0dVRShtcG5fbXVsXzEpCisJc2F2ZQklc3AsIC0xNzYsICVzcAorCW1vdgkxLCAlbzIKKwltb3YJJWkwLCAlZzIKKwlzcmx4CSVpMywgMzIsICVvNAorCXNsbHgJJW8yLCAzMiwgJW8yCisJc3JsCSVpMywgMCwgJWkzCisJbW92CTAsICVnMworCW1vdgkwLCAlaTAKKworTCh0b3ApOglsZHgJWyVpMSslZzNdLCAlZzEKKwlzcmwJJWcxLCAwLCAlZzQKKwltdWx4CSVnNCwgJWkzLCAlbzUKKwlzcmx4CSVnMSwgMzIsICVnMQorCW11bHgJJWcxLCAlaTMsICVnNQorCW11bHgJJWc0LCAlbzQsICVnNAorCW11bHgJJWcxLCAlbzQsICVnMQorCXNybHgJJW81LCAzMiwgJW8xCisJYWRkCSVnNSwgJW8xLCAlbzEKKwlhZGRjYwklbzEsICVnNCwgJWc0CisJc3JsCSVvNSwgMCwgJW8wCisJc2xseAklZzQsIDMyLCAlbzEKKwlhZGQJJWcxLCAlbzIsICVsMQorCW1vdmx1CSV4Y2MsICVsMSwgJWcxCisJYWRkCSVvMSwgJW8wLCAlbDAKKwlhZGRjYwklbDAsICVpMCwgJWc1CisJc3JseAklZzQsIDMyLCAlaTAKKwlhZGQJJWkwLCAxLCAlZzQKKwltb3ZsdQkleGNjLCAlZzQsICVpMAorCXN0eAklZzUsIFslZzIrJWczXQorCWFkZAklaTIsIC0xLCAlaTIKKwlhZGQJJWkwLCAlZzEsICVpMAorCWJybnoscHQJJWkyLCBMKHRvcCkKKwkgYWRkCSVnMywgOCwgJWczCisJcmV0dXJuCSVpNys4CisJIG5vcAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmN0MS9yc2Jsc2gxX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmN0MS9yc2Jsc2gxX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxYmQ0YWIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvdWx0cmFzcGFyY3QxL3JzYmxzaDFfbi5hc20KQEAgLTAsMCArMSw0MSBAQAorZG5sICBTUEFSQyB2OSBtcG5fcnNibHNoMV9uIGZvciBUMS9UMi4KKworZG5sICBDb3B5cmlnaHQgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK2RlZmluZShMU0gsICAgICAgICAgICAgIDEpCitkZWZpbmUoUlNILCAgICAgICAgICAgICA2MykKKworZGVmaW5lKGZ1bmMsIG1wbl9yc2Jsc2gxX24pCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX3JzYmxzaDFfbikKKworaW5jbHVkZV9tcG4oYHNwYXJjNjQvdWx0cmFzcGFyY3QxL3JzYmxzaENfbi5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmN0MS9yc2Jsc2gyX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmN0MS9yc2Jsc2gyX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwZDIwOGUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvdWx0cmFzcGFyY3QxL3JzYmxzaDJfbi5hc20KQEAgLTAsMCArMSw0MSBAQAorZG5sICBTUEFSQyB2OSBtcG5fcnNibHNoMl9uIGZvciBUMS9UMi4KKworZG5sICBDb3B5cmlnaHQgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK2RlZmluZShMU0gsICAgICAgICAgICAgIDIpCitkZWZpbmUoUlNILCAgICAgICAgICAgICA2MikKKworZGVmaW5lKGZ1bmMsIG1wbl9yc2Jsc2gyX24pCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX3JzYmxzaDJfbikKKworaW5jbHVkZV9tcG4oYHNwYXJjNjQvdWx0cmFzcGFyY3QxL3JzYmxzaENfbi5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmN0MS9yc2Jsc2hDX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmN0MS9yc2Jsc2hDX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMDNlOWYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvdWx0cmFzcGFyY3QxL3JzYmxzaENfbi5hc20KQEAgLTAsMCArMSw2OSBAQAorZG5sICBTUEFSQyB2OSBtcG5fcnNibHNoQ19uIGZvciBUMS9UMi4KKworZG5sICBDb3B5cmlnaHQgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitDCQkgICBjeWNsZXMvbGltYgorQyBVbHRyYVNQQVJDIFQxOgkyMQorQyBVbHRyYVNQQVJDIFQyOgkgPworCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLCBgJW8wJykKK2RlZmluZShgdXAnLCBgJW8xJykKK2RlZmluZShgdnAnLCBgJW8yJykKK2RlZmluZShgbicsICBgJW8zJykKK2RlZmluZShgY3knLCBgJW80JykKKworQVNNX1NUQVJUKCkKKwlSRUdJU1RFUiglZzIsI3NjcmF0Y2gpCisJUkVHSVNURVIoJWczLCNzY3JhdGNoKQorUFJPTE9HVUUoZnVuYykKKwltb3YJMCwgY3kKKwltb3YJMCwgJWc1CisJY21wCSVnMCwgY3kKK0wodG9wKToJbGR4CVt1cCswXSwgJW80CisJYWRkCXVwLCA4LCB1cAorCWxkeAlbdnArMF0sICVvNQorCWFkZAl2cCwgOCwgdnAKKwlhZGQJcnAsIDgsIHJwCisKKwlzbGx4CSVvNSwgTFNILCAlZzQKKwlhZGQJbiwgLTEsIG4KKwlvcgklZzUsICVnNCwgJWc0CisJc3JseAklbzUsIFJTSCwgJWc1CisKKwlzcmx4CSVvNCwgMzIsICVnMQorCXNybHgJJWc0LCAzMiwgJWcyCisJc3ViY2NjCSVnNCwgJW80LCAlZzMKKwlzdWJjY2MJJWcyLCAlZzEsICVnMAorCWJyZ3oJbiwgTCh0b3ApCisJIHN0eAklZzMsIFtycC04XQorCisJcmV0bAorCXN1YmMJJWc1LCAlZzAsICVvMAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmN0MS9zdWJfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvdWx0cmFzcGFyY3QxL3N1Yl9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmFmODlmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmN0MS9zdWJfbi5hc20KQEAgLTAsMCArMSw2OCBAQAorZG5sICBTUEFSQyB2OSBtcG5fc3ViX24gZm9yIFQxL1QyLgorCitkbmwgIENvcHlyaWdodCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJCSAgIGN5Y2xlcy9saW1iCitDIFVsdHJhU1BBUkMgVDE6CSA/CitDIFVsdHJhU1BBUkMgVDI6CSA/CisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsIGAlbzAnKQorZGVmaW5lKGB1cCcsIGAlbzEnKQorZGVmaW5lKGB2cCcsIGAlbzInKQorZGVmaW5lKGBuJywgIGAlbzMnKQorZGVmaW5lKGBjeScsIGAlbzQnKQorCitBU01fU1RBUlQoKQorCVJFR0lTVEVSKCVnMiwjc2NyYXRjaCkKKwlSRUdJU1RFUiglZzMsI3NjcmF0Y2gpCitQUk9MT0dVRShtcG5fc3ViX25jKQorCWIsYQlMKGVudCkKK0VQSUxPR1VFKCkKK1BST0xPR1VFKG1wbl9zdWJfbikKKwltb3YJMCwgY3kKK0woZW50KToJY21wCSVnMCwgY3kKK0wodG9wKToJbGR4CVt1cCswXSwgJW80CisJYWRkCXVwLCA4LCB1cAorCWxkeAlbdnArMF0sICVvNQorCWFkZAl2cCwgOCwgdnAKKwlhZGQJcnAsIDgsIHJwCisJYWRkCW4sIC0xLCBuCisJc3JseAklbzQsIDMyLCAlZzEKKwlzcmx4CSVvNSwgMzIsICVnMgorCXN1YmNjYwklbzQsICVvNSwgJWczCisJc3ViY2NjCSVnMSwgJWcyLCAlZzAKKwlicmd6CW4sIEwodG9wKQorCSBzdHgJJWczLCBbcnAtOF0KKworCXJldGwKKwlhZGRjCSVnMCwgJWcwLCAlbzAKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDEvc3VibHNoMV9uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDEvc3VibHNoMV9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzhmYTgwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmN0MS9zdWJsc2gxX24uYXNtCkBAIC0wLDAgKzEsNDEgQEAKK2RubCAgU1BBUkMgdjkgbXBuX3N1YmxzaDFfbiBmb3IgVDEvVDIuCisKK2RubCAgQ29weXJpZ2h0IDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitkZWZpbmUoTFNILCAgICAgICAgICAgICAxKQorZGVmaW5lKFJTSCwgICAgICAgICAgICAgNjMpCisKK2RlZmluZShmdW5jLCBtcG5fc3VibHNoMV9uKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9zdWJsc2gxX24pCisKK2luY2x1ZGVfbXBuKGBzcGFyYzY0L3VsdHJhc3BhcmN0MS9zdWJsc2hDX24uYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDEvc3VibHNoMl9uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDEvc3VibHNoMl9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmQ1ZWVlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmN0MS9zdWJsc2gyX24uYXNtCkBAIC0wLDAgKzEsNDEgQEAKK2RubCAgU1BBUkMgdjkgbXBuX3N1YmxzaDJfbiBmb3IgVDEvVDIuCisKK2RubCAgQ29weXJpZ2h0IDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitkZWZpbmUoTFNILCAgICAgICAgICAgICAyKQorZGVmaW5lKFJTSCwgICAgICAgICAgICAgNjIpCisKK2RlZmluZShmdW5jLCBtcG5fc3VibHNoMl9uKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9zdWJsc2gyX24pCisKK2luY2x1ZGVfbXBuKGBzcGFyYzY0L3VsdHJhc3BhcmN0MS9zdWJsc2hDX24uYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDEvc3VibHNoQ19uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDEvc3VibHNoQ19uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWVhZmVmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmN0MS9zdWJsc2hDX24uYXNtCkBAIC0wLDAgKzEsNjkgQEAKK2RubCAgU1BBUkMgdjkgbXBuX3N1YmxzaENfbiBmb3IgVDEvVDIuCisKK2RubCAgQ29weXJpZ2h0IDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworQwkJICAgY3ljbGVzL2xpbWIKK0MgVWx0cmFTUEFSQyBUMToJMjEKK0MgVWx0cmFTUEFSQyBUMjoJID8KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywgYCVvMCcpCitkZWZpbmUoYHVwJywgYCVvMScpCitkZWZpbmUoYHZwJywgYCVvMicpCitkZWZpbmUoYG4nLCAgYCVvMycpCitkZWZpbmUoYGN5JywgYCVvNCcpCisKK0FTTV9TVEFSVCgpCisJUkVHSVNURVIoJWcyLCNzY3JhdGNoKQorCVJFR0lTVEVSKCVnMywjc2NyYXRjaCkKK1BST0xPR1VFKGZ1bmMpCisJbW92CTAsIGN5CisJbW92CTAsICVnNQorCWNtcAklZzAsIGN5CitMKHRvcCk6CWxkeAlbdXArMF0sICVvNAorCWFkZAl1cCwgOCwgdXAKKwlsZHgJW3ZwKzBdLCAlbzUKKwlhZGQJdnAsIDgsIHZwCisJYWRkCXJwLCA4LCBycAorCisJc2xseAklbzUsIExTSCwgJWc0CisJYWRkCW4sIC0xLCBuCisJb3IJJWc1LCAlZzQsICVnNAorCXNybHgJJW81LCBSU0gsICVnNQorCisJc3JseAklbzQsIDMyLCAlZzEKKwlzcmx4CSVnNCwgMzIsICVnMgorCXN1YmNjYwklbzQsICVnNCwgJWczCisJc3ViY2NjCSVnMSwgJWcyLCAlZzAKKwlicmd6CW4sIEwodG9wKQorCSBzdHgJJWczLCBbcnAtOF0KKworCXJldGwKKwlhZGRjCSVnNSwgJWcwLCAlbzAKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDEvc3VibXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmN0MS9zdWJtdWxfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY1NTNhOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDEvc3VibXVsXzEuYXNtCkBAIC0wLDAgKzEsODYgQEAKK2RubCAgU1BBUkMgdjkgbXBuX3N1Ym11bF8xIGZvciBUMS9UMi4KKworZG5sICBDb3B5cmlnaHQgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCQkgICBjeWNsZXMvbGltYgorQyBVbHRyYVNQQVJDIFQxOgk3NAorQyBVbHRyYVNQQVJDIFQyOgkgPworCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLCBgJWkwJykKK2RlZmluZShgdXAnLCBgJWkxJykKK2RlZmluZShgbicsICBgJWkyJykKK2RlZmluZShgdjAnLCBgJWkzJykKKworQVNNX1NUQVJUKCkKKwlSRUdJU1RFUiglZzIsI3NjcmF0Y2gpCisJUkVHSVNURVIoJWczLCNzY3JhdGNoKQorUFJPTE9HVUUobXBuX3N1Ym11bF8xKQorCXNhdmUJJXNwLCAtMTc2LCAlc3AKKwltb3YJMSwgJW8yCisJbW92CSVpMCwgJWcyCisJc3JseAklaTMsIDMyLCAlbzQKKwlzbGx4CSVvMiwgMzIsICVvMgorCXNybAklaTMsIDAsICVpMworCW1vdgkwLCAlZzMKKwltb3YJMCwgJWkwCisKK0wodG9wKToJbGR4CVslaTErJWczXSwgJWcxCisJc3JsCSVnMSwgMCwgJWc0CisJbXVseAklZzQsICVpMywgJW81CisJc3JseAklZzEsIDMyLCAlZzEKKwltdWx4CSVnMSwgJWkzLCAlZzUKKwltdWx4CSVnNCwgJW80LCAlZzQKKwltdWx4CSVnMSwgJW80LCAlZzEKKwlzcmx4CSVvNSwgMzIsICVvMQorCWFkZAklZzUsICVvMSwgJW8xCisJYWRkY2MJJW8xLCAlZzQsICVnNAorCXNybAklbzUsIDAsICVvMAorCWxkeAlbJWcyKyVnM10sICVvNQorCXNsbHgJJWc0LCAzMiwgJW8xCisJYWRkCSVnMSwgJW8yLCAlbDEKKwltb3ZsdQkleGNjLCAlbDEsICVnMQorCWFkZAklbzEsICVvMCwgJWwwCisJYWRkY2MJJWwwLCAlaTAsICVnNQorCXNybHgJJWc0LCAzMiwgJWkwCisJYWRkCSVpMCwgMSwgJWc0CisJbW92bHUJJXhjYywgJWc0LCAlaTAKKwlzdWJjYwklbzUsICVnNSwgJWc1CisJc3R4CSVnNSwgWyVnMislZzNdCisJYWRkCSVpMCwgMSwgJWc0CisJbW92bHUJJXhjYywgJWc0LCAlaTAKKwlhZGQJJWkyLCAtMSwgJWkyCisJYWRkCSVpMCwgJWcxLCAlaTAKKwlicm56LHB0CSVpMiwgTCh0b3ApCisJIGFkZAklZzMsIDgsICVnMworCXJldHVybgklaTcrOAorCSBub3AKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDMvYWRkX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmN0My9hZGRfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE3MDc0NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDMvYWRkX24uYXNtCkBAIC0wLDAgKzEsMTI2IEBACitkbmwgIFNQQVJDIHY5IG1wbl9hZGRfbiBmb3IgVDMvVDQuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IERhdmlkIE1pbGxlci4KKworZG5sICBDb3B5cmlnaHQgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCQkgICBjeWNsZXMvbGltYgorQyBVbHRyYVNQQVJDIFQzOgkgOAorQyBVbHRyYVNQQVJDIFQ0OgkgMworCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLCBgJWkwJykKK2RlZmluZShgdXAnLCBgJWkxJykKK2RlZmluZShgdnAnLCBgJWkyJykKK2RlZmluZShgbicsICBgJWkzJykKK2RlZmluZShgY3knLCBgJWk0JykKKworZGVmaW5lKGB1MF9vZmYnLCBgJWwyJykKK2RlZmluZShgdTFfb2ZmJywgYCVsMycpCitkZWZpbmUoYGxvb3BfbicsIGAlbDYnKQorZGVmaW5lKGB0bXAnLCBgJWw3JykKKworQVNNX1NUQVJUKCkKKwlSRUdJU1RFUiglZzIsI3NjcmF0Y2gpCisJUkVHSVNURVIoJWczLCNzY3JhdGNoKQorUFJPTE9HVUUobXBuX2FkZF9uYykKKwlzYXZlCSVzcCwgLTE3NiwgJXNwCisJYixhCUwoZW50KQorRVBJTE9HVUUoKQorUFJPTE9HVUUobXBuX2FkZF9uKQorCXNhdmUJJXNwLCAtMTc2LCAlc3AKKworCW1vdgkwLCBjeQorTChlbnQpOgorCXN1YmNjCW4sIDEsIG4KKwliZQlMKGZpbmFsX29uZSkKKwkgY21wCSVnMCwgY3kKKworCWxkeAlbdXAgKyAwXSwgJW80CisJc2xseAluLCAzLCB0bXAKKworCWxkeAlbdnAgKyAwXSwgJW81CisJYWRkCXVwLCB0bXAsIHUwX29mZgorCisJbGR4CVt1cCArIDhdLCAlZzUKKwluZWcJdG1wLCBsb29wX24KKworCWxkeAlbdnAgKyA4XSwgJWcxCisJYWRkCXUwX29mZiwgOCwgdTFfb2ZmCisKKwlzdWIJbG9vcF9uLCAtKDIgKiA4KSwgbG9vcF9uCisKKwlicmdleixwbiBsb29wX24sIEwobG9vcF90YWlsKQorCSBhZGQJdnAsICgyICogOCksIHZwCisKKwliLGEJTCh0b3ApCisJQUxJR04oMTYpCitMKHRvcCk6CisJYWRkeGNjYyglbzQsICVvNSwgdG1wKQorCWxkeAlbdnAgKyAwXSwgJW81CisKKwlhZGQJcnAsICgyICogOCksIHJwCisJbGR4CVtsb29wX24gKyB1MF9vZmZdLCAlbzQKKworCWFkZAl2cCwgKDIgKiA4KSwgdnAKKwlzdHgJdG1wLCBbcnAgLSAxNl0KKworCWFkZHhjY2MoJWcxLCAlZzUsIHRtcCkKKwlsZHgJW3ZwIC0gOF0sICVnMQorCisJbGR4CVtsb29wX24gKyB1MV9vZmZdLCAlZzUKKwlzdWIJbG9vcF9uLCAtKDIgKiA4KSwgbG9vcF9uCisKKwlicmx6CWxvb3BfbiwgTCh0b3ApCisJIHN0eAl0bXAsIFtycCAtIDhdCisKK0wobG9vcF90YWlsKToKKwlhZGR4Y2NjKCVvNCwgJW81LCAlZzMpCisJYWRkCWxvb3BfbiwgdTBfb2ZmLCB1cAorCisJYWRkeGNjYyglZzEsICVnNSwgJWc1KQorCXN0eAklZzMsIFtycCArIDBdCisKKwlicmd6LHB0CWxvb3BfbiwgTChkb25lKQorCSBzdHgJJWc1LCBbcnAgKyA4XQorCisJYWRkCXJwLCAoMiAqIDgpLCBycAorTChmaW5hbF9vbmUpOgorCWxkeAlbdXArMF0sICVvNAorCWxkeAlbdnArMF0sICVvNQorCWFkZHhjY2MoJW80LCAlbzUsICVnMykKKwlzdHgJJWczLCBbcnArMF0KKworTChkb25lKToKKwlhZGR4YyglZzAsICVnMCwgJWkwKQorCXJldAorCSByZXN0b3JlCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvdWx0cmFzcGFyY3QzL2FkZG11bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDMvYWRkbXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzOTgxMWUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvdWx0cmFzcGFyY3QzL2FkZG11bF8xLmFzbQpAQCAtMCwwICsxLDE4MiBAQAorZG5sICBTUEFSQyB2OSBtcG5fYWRkbXVsXzEgZm9yIFQzL1Q0L1Q1LgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBEYXZpZCBNaWxsZXIgYW5kIFRvcmJqw7ZybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCQkgICBjeWNsZXMvbGltYgorQyBVbHRyYVNQQVJDIFQzOgkyNgorQyBVbHRyYVNQQVJDIFQ0Ogk0LjUKKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywgYCVpMCcpCitkZWZpbmUoYHVwJywgYCVpMScpCitkZWZpbmUoYG4nLCAgYCVpMicpCitkZWZpbmUoYHYwJywgYCVpMycpCisKK2RlZmluZShgdTAnLCAgYCVsMCcpCitkZWZpbmUoYHUxJywgIGAlbDEnKQorZGVmaW5lKGB1MicsICBgJWwyJykKK2RlZmluZShgdTMnLCAgYCVsMycpCitkZWZpbmUoYHIwJywgIGAlbDQnKQorZGVmaW5lKGByMScsICBgJWw1JykKK2RlZmluZShgcjInLCAgYCVsNicpCitkZWZpbmUoYHIzJywgIGAlbDcnKQorCitBU01fU1RBUlQoKQorCVJFR0lTVEVSKCVnMiwjc2NyYXRjaCkKKwlSRUdJU1RFUiglZzMsI3NjcmF0Y2gpCitQUk9MT0dVRShtcG5fYWRkbXVsXzEpCisJc2F2ZQklc3AsIC0xNzYsICVzcAorCWxkeAlbdXArMF0sICVnMQorCisJYW5kCW4sIDMsICVnMworCWJyegklZzMsIEwoYjApCisJIGFkZGNjCSVnMCwgJWcwLCAlZzUJCQlDIGNsZWFyIGNhcnJ5IGxpbWIsIGZsYWcKKwljbXAJJWczLCAyCisJYmNzCSV4Y2MsIEwoYjAxKQorCSBub3AKKwliZQkleGNjLCBMKGIxMCkKKwkgbGR4CVt1cCs4XSwgJWc1CisKK0woYjExKToJbGR4CVt1cCsxNl0sIHUzCisJbXVseAklZzEsIHYwLCAlbzIKKwl1bXVseGhpKCVnMSwgdjAsICVvMykKKwlsZHgJW3JwKzBdLCByMQorCW11bHgJJWc1LCB2MCwgJW80CisJbGR4CVtycCs4XSwgcjIKKwl1bXVseGhpKCVnNSwgdjAsICVvNSkKKwlsZHgJW3JwKzE2XSwgcjMKKwltdWx4CXUzLCB2MCwgJWc0CisJdW11bHhoaSh1MywgdjAsICVnNSkKKwlhZGRjYwklbzMsICVvNCwgJW80CisJYWRkeGNjYyglbzUsICVnNCwgJWc0KQorCWFkZHhjKAklZzAsICVnNSwgJWc1KQorCWFkZGNjCXIxLCAlbzIsIHIxCisJc3R4CXIxLCBbcnArMF0KKwlhZGR4Y2NjKHIyLCAlbzQsIHIyKQorCXN0eAlyMiwgW3JwKzhdCisJYWRkeGNjYyhyMywgJWc0LCByMykKKwlzdHgJcjMsIFtycCsxNl0KKwlhZGQJbiwgLTMsIG4KKwlhZGQJdXAsIDI0LCB1cAorCWJyegluLCBMKHhpdCkKKwkgYWRkCXJwLCAyNCwgcnAKKwliCUwoY29tKQorCSBub3AKKworTChiMTApOgltdWx4CSVnMSwgdjAsICVvNAorCWxkeAlbcnArMF0sIHIyCisJdW11bHhoaSglZzEsIHYwLCAlbzUpCisJbGR4CVtycCs4XSwgcjMKKwltdWx4CSVnNSwgdjAsICVnNAorCXVtdWx4aGkoJWc1LCB2MCwgJWc1KQorCWFkZGNjCSVvNSwgJWc0LCAlZzQKKwlhZGR4YygJJWcwLCAlZzUsICVnNSkKKwlhZGRjYwlyMiwgJW80LCByMgorCXN0eAlyMiwgW3JwKzBdCisJYWRkeGNjYyhyMywgJWc0LCByMykKKwlzdHgJcjMsIFtycCs4XQorCWFkZAluLCAtMiwgbgorCWFkZAl1cCwgMTYsIHVwCisJYnJ6CW4sIEwoeGl0KQorCSBhZGQJcnAsIDE2LCBycAorCWIJTChjb20pCisJIG5vcAorCitMKGIwMSk6CWxkeAlbcnArMF0sIHIzCisJbXVseAklZzEsIHYwLCAlZzQKKwl1bXVseGhpKCVnMSwgdjAsICVnNSkKKwlhZGRjYwlyMywgJWc0LCByMworCXN0eAlyMywgW3JwKzBdCisJYWRkCW4sIC0xLCBuCisJYWRkCXVwLCA4LCB1cAorCWJyegluLCBMKHhpdCkKKwkgYWRkCXJwLCA4LCBycAorCitMKGNvbSk6CWxkeAlbdXArMF0sICVnMQorTChiMCk6CWxkeAlbdXArOF0sIHUxCisJbGR4CVt1cCsxNl0sIHUyCisJbGR4CVt1cCsyNF0sIHUzCisJbXVseAklZzEsIHYwLCAlbzAKKwl1bXVseGhpKCVnMSwgdjAsICVvMSkKKwliCUwobG8wKQorCSBub3AKKworCUFMSUdOKDE2KQorTCh0b3ApOglsZHgJW3VwKzBdLCB1MAorCWFkZHhjKAklZzAsICVnNSwgJWc1KQkJQyBwcm9wYWdhdGUgY2FycnkgaW50byBjYXJyeSBsaW1iCisJbGR4CVt1cCs4XSwgdTEKKwlhZGRjYwlyMCwgJW8wLCByMAorCWxkeAlbdXArMTZdLCB1MgorCWFkZHhjY2MocjEsICVvMiwgcjEpCisJbGR4CVt1cCsyNF0sIHUzCisJYWRkeGNjYyhyMiwgJW80LCByMikKKwlzdHgJcjAsIFtycC0zMl0KKwlhZGR4Y2NjKHIzLCAlZzQsIHIzKQorCXN0eAlyMSwgW3JwLTI0XQorCW11bHgJdTAsIHYwLCAlbzAKKwlzdHgJcjIsIFtycC0xNl0KKwl1bXVseGhpKHUwLCB2MCwgJW8xKQorCXN0eAlyMywgW3JwLThdCitMKGxvMCk6CW11bHgJdTEsIHYwLCAlbzIKKwlsZHgJW3JwKzBdLCByMAorCXVtdWx4aGkodTEsIHYwLCAlbzMpCisJbGR4CVtycCs4XSwgcjEKKwltdWx4CXUyLCB2MCwgJW80CisJbGR4CVtycCsxNl0sIHIyCisJdW11bHhoaSh1MiwgdjAsICVvNSkKKwlsZHgJW3JwKzI0XSwgcjMKKwltdWx4CXUzLCB2MCwgJWc0CisJYWRkeGNjYyglZzUsICVvMCwgJW8wKQorCXVtdWx4aGkodTMsIHYwLCAlZzUpCisJYWRkCXVwLCAzMiwgdXAKKwlhZGR4Y2NjKCVvMSwgJW8yLCAlbzIpCisJYWRkCXJwLCAzMiwgcnAKKwlhZGR4Y2NjKCVvMywgJW80LCAlbzQpCisJYWRkCW4sIC00LCBuCisJYWRkeGNjYyglbzUsICVnNCwgJWc0KQorCWJyZ3oJbiwgTCh0b3ApCisJIG5vcAorCisJYWRkeGMoCSVnMCwgJWc1LCAlZzUpCisJYWRkY2MJcjAsICVvMCwgcjAKKwlzdHgJcjAsIFtycC0zMl0KKwlhZGR4Y2NjKHIxLCAlbzIsIHIxKQorCXN0eAlyMSwgW3JwLTI0XQorCWFkZHhjY2MocjIsICVvNCwgcjIpCisJc3R4CXIyLCBbcnAtMTZdCisJYWRkeGNjYyhyMywgJWc0LCByMykKKwlzdHgJcjMsIFtycC04XQorTCh4aXQpOglhZGR4YygJJWcwLCAlZzUsICVpMCkKKwlyZXQKKwkgcmVzdG9yZQorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmN0My9hb3JtdWxfMi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvdWx0cmFzcGFyY3QzL2Fvcm11bF8yLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2M2YTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmN0My9hb3JtdWxfMi5hc20KQEAgLTAsMCArMSwyMjggQEAKK2RubCAgU1BBUkMgdjkgbXBuX211bF8yIGFuZCBtcG5fYWRkbXVsXzIgZm9yIFQzL1Q0L1Q1LgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDCQkgICAgY3ljbGVzL2xpbWIgICAgICBjeWNsZXMvbGltYgorQwkJICAgICAgIG11bF8yICAgICAgICAgICBhZGRtdWxfMgorQyBVbHRyYVNQQVJDIFQzOgkyMi41CQkgMjMuNQorQyBVbHRyYVNQQVJDIFQ0OgkgMy4yNQkJIDMuNzUKKworCitDIFRoZSBjb2RlIGlzIHJlYXNvbmFibHkgc2NoZWR1bGVkIGJ1dCBhbHNvIHJlbGllcyBvbiBPb08uICBUaGVyZSB3YXMgaG9wZSB0aGF0CitDIHRoaXMgY291bGQgcnVuIGF0IGFyb3VuZCAzLjAgYW5kIDMuNSBjL2wgcmVzcGVjdGl2ZWx5LCBvbiBUNC4gIFR3byBjeWNsZXMgcGVyCitDIGl0ZXJhdGlvbiBuZWVkcyB0byBiZSByZW1vdmVkLgorQworQyBXZSBjb3VsZCBhbG1vc3QgdXNlIDItd2F5IHVucm9sbGluZywgYnV0IGN1cnJlbnRseSB0aGUgd04gcmVnaXN0ZXJzIGxpdmUgdG9vCitDIGxvbmcuICBCeSBjaGFuZ2luZyBhZGQgeCx3MSx3MSB0byBhZGQgeCx3MSx3MCwgaS5lLiBtaWdyYXRlIHRoZSB2YWx1ZXMgZG93bi0KK0Mgd2FyZHMsIDItd2F5IHVucm9sbGluZyBzaG91bGQgYmVjb21lIHBvc3NpYmxlLiAgV2l0aCBuLWluZGV4ZWQgYWRkcmVzc2luZyBpdAorQyBzaG91bGQgcnVuIG5vIHNsb3dlci4KK0MKK0MgVGhlIHJwIGxvYWRzIHRvIGcxL2czIGFyZSB2ZXJ5IG11Y2ggb3Zlci1zY2hlZHVsZWQuICBQcmVzdW1hYmx5LCB0aGV5IGNvdWxkCitDIGJlIHBvc3Rwb25lZCBhIGZ1bGwgd2F5LCBhbmQgdGhlbiBqdXN0IG9uZSByZWdpc3RlciBjb3VsZCBiZSB1c2VkLgorCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLCBgJWkwJykKK2RlZmluZShgdXAnLCBgJWkxJykKK2RlZmluZShgbicsICBgJWkyJykKK2RlZmluZShgdnAnLCBgJWkzJykKKworZGVmaW5lKGB2MCcsIGAlbzAnKQorZGVmaW5lKGB2MScsIGAlbzEnKQorCitkZWZpbmUoYHcwJywgYCVvMicpCitkZWZpbmUoYHcxJywgYCVvMycpCitkZWZpbmUoYHcyJywgYCVvNCcpCitkZWZpbmUoYHczJywgYCVvNScpCisKK2lmZGVmKGBPUEVSQVRJT05fbXVsXzInLGAKKyAgICAgIGRlZmluZShgQU0yJywgICAgICBgJykKKyAgICAgIGRlZmluZShgQUREWCcsCSBgYWRkY2NgJyQxJykKKyAgICAgIGRlZmluZShgZnVuYycsICAgICBgbXBuX211bF8yJykKKycpCitpZmRlZihgT1BFUkFUSU9OX2FkZG11bF8yJyxgCisgICAgICBkZWZpbmUoYEFNMicsICAgICAgYCQxJykKKyAgICAgIGRlZmluZShgQUREWCcsCSBgYWRkeGNjYygkMSwkMiwkMyknKQorICAgICAgZGVmaW5lKGBmdW5jJywgICAgIGBtcG5fYWRkbXVsXzInKQorJykKKworCitNVUxGVU5DX1BST0xPR1VFKG1wbl9tdWxfMiBtcG5fYWRkbXVsXzIpCisKK0FTTV9TVEFSVCgpCisJUkVHSVNURVIoJWcyLCNzY3JhdGNoKQorCVJFR0lTVEVSKCVnMywjc2NyYXRjaCkKK1BST0xPR1VFKGZ1bmMpCisJc2F2ZQklc3AsIC0xNzYsICVzcAorCisJbGR4CVt2cCswXSwgdjAJCUMgbG9hZCB2MAorCWFuZAluLCAzLCAlZzUKKwlsZHgJW3ZwKzhdLCB2MQkJQyBsb2FkIHYxCisJYWRkCW4sIC02LCBuCisJbGR4CVt1cCswXSwgJWc0CisJYnJ6CSVnNSwgTChiMCkKKwkgY21wCSVnNSwgMgorCWJjcwlMKGIxKQorCSBub3AKKwliZQlMKGIyKQorCSBub3AKKworTChiMyk6CitBTTIoYAlsZHgJW3JwKzBdLCAlZzEnKQorCW11bHgJJWc0LCB2MCwgdzIKKwl1bXVseGhpKCVnNCwgdjAsIHczKQorCWxkeAlbdXArOF0sICVpNQorCW11bHgJJWc0LCB2MSwgJWwzCisJdW11bHhoaSglZzQsIHYxLCAlbDcpCitBTTIoYAlsZHgJW3JwKzhdLCAlZzMnKQorCWFkZAl1cCwgLTgsIHVwCisJYWRkCXJwLCAtOCwgcnAKKwliCUwobG8zKQorCSBtb3YJMCwgdzAKKworTChiMik6CitBTTIoYAlsZHgJW3JwKzBdLCAlZzMnKQorCW11bHgJJWc0LCB2MCwgdzMKKwl1bXVseGhpKCVnNCwgdjAsIHcwKQorCWxkeAlbdXArOF0sICVpNAorCW11bHgJJWc0LCB2MSwgJWwxCisJdW11bHhoaSglZzQsIHYxLCAlbDUpCitBTTIoYAlsZHgJW3JwKzhdLCAlZzEnKQorCWFkZAlycCwgMTYsIHJwCisJYnJsegluLCBMKGVuZCkKKwkgbW92CTAsIHcxCisJYmEJTCh0b3ApCisJIGFkZAl1cCwgMTYsIHVwCisKK0woYjEpOgorQU0yKGAJbGR4CVtycCswXSwgJWcxJykKKwltdWx4CSVnNCwgdjAsIHcwCisJdW11bHhoaSglZzQsIHYwLCB3MSkKKwlsZHgJW3VwKzhdLCAlaTUKKwltdWx4CSVnNCwgdjEsICVsMworCXVtdWx4aGkoJWc0LCB2MSwgJWw3KQorQU0yKGAJbGR4CVtycCs4XSwgJWczJykKKwlhZGQJdXAsIDgsIHVwCisJYWRkCXJwLCA4LCBycAorCWIJTChsbzEpCisJIG1vdgkwLCB3MgorCitMKGIwKToKK0FNMihgCWxkeAlbcnArMF0sICVnMycpCisJbXVseAklZzQsIHYwLCB3MQorCXVtdWx4aGkoJWc0LCB2MCwgdzIpCisJbGR4CVt1cCs4XSwgJWk0CisJbXVseAklZzQsIHYxLCAlbDEKKwl1bXVseGhpKCVnNCwgdjEsICVsNSkKK0FNMihgCWxkeAlbcnArOF0sICVnMScpCisJYglMKGxvMCkKKwkgbW92CTAsIHczCisKKwlBTElHTigxNikJCQlDIGN5Y2xlCitMKHRvcCk6CW11bHgJJWk0LCB2MCwgJWwyCQlDIDAtPjUKKwl1bXVseGhpKCVpNCwgdjAsICVsNikJCUMgMC0+NQorCWxkeAlbdXArMF0sICVpNQkJQyAxLT42CitBTTIoYAlhZGRjYwl3MywgJWczLCB3MycpCQlDIDEKKwlzdHgJdzMsIFtycC0xNl0JCUMgMgorCUFERFgoYAklbDEsIHcwLCB3MCcpCQlDIDIKKwlhZGR4Y2NjKCVsNSwgdzEsIHcxKQkJQyAzCisJbXVseAklaTQsIHYxLCAlbDMJCUMgMy0+OQorCXVtdWx4aGkoJWk0LCB2MSwgJWw3KQkJQyA0LT45CitBTTIoYAlsZHgJW3JwKzBdLCAlZzMnKQkJQyA0CisJYWRkY2MJJWwyLCB3MCwgdzAJCUMgNQorCWFkZHhjY2MoJWw2LCB3MSwgdzEpCQlDIDUKKwlhZGR4YygJJWcwLCAlZzAsIHcyKQkJQyA2CitMKGxvMSk6CW11bHgJJWk1LCB2MCwgJWwwCQlDIDYKKwl1bXVseGhpKCVpNSwgdjAsICVsNCkJCUMgNworCWxkeAlbdXArOF0sICVpNAkJQyA3CitBTTIoYAlhZGRjYwl3MCwgJWcxLCB3MCcpCQlDIDgKKwlzdHgJdzAsIFtycC04XQkJQyA4CisJQUREWChgCSVsMywgdzEsIHcxJykJCUMgOQorCWFkZHhjY2MoJWw3LCB3MiwgdzIpCQlDIDkKKwltdWx4CSVpNSwgdjEsICVsMQkJQyAxMAorCXVtdWx4aGkoJWk1LCB2MSwgJWw1KQkJQyAxMAorQU0yKGAJbGR4CVtycCs4XSwgJWcxJykJCUMgMTEKKwlhZGRjYwklbDAsIHcxLCB3MQkJQyAxMQorCWFkZHhjY2MoJWw0LCB3MiwgdzIpCQlDIDEyCisJYWRkeGMoCSVnMCwgJWcwLCB3MykJCUMgMTIKK0wobG8wKToJbXVseAklaTQsIHYwLCAlbDIJCUMgMTMKKwl1bXVseGhpKCVpNCwgdjAsICVsNikJCUMgMTMKKwlsZHgJW3VwKzE2XSwgJWk1CQlDIDE0CitBTTIoYAlhZGRjYwl3MSwgJWczLCB3MScpCQlDIDE0CisJc3R4CXcxLCBbcnArMF0JCUMgMTUKKwlBRERYKGAJJWwxLCB3MiwgdzInKQkJQyAxNQorCWFkZHhjY2MoJWw1LCB3MywgdzMpCQlDIDE2CisJbXVseAklaTQsIHYxLCAlbDMJCUMgMTYKKwl1bXVseGhpKCVpNCwgdjEsICVsNykJCUMgMTcKK0FNMihgCWxkeAlbcnArMTZdLCAlZzMnKQkJQyAxNworCWFkZGNjCSVsMiwgdzIsIHcyCQlDIDE4CisJYWRkeGNjYyglbDYsIHczLCB3MykJCUMgMTgKKwlhZGR4YygJJWcwLCAlZzAsIHcwKQkJQyAxOQorTChsbzMpOgltdWx4CSVpNSwgdjAsICVsMAkJQyAxOQorCXVtdWx4aGkoJWk1LCB2MCwgJWw0KQkJQyAyMAorCWxkeAlbdXArMjRdLCAlaTQJCUMgMjAKK0FNMihgCWFkZGNjCXcyLCAlZzEsIHcyJykJCUMgMjEKKwlzdHgJdzIsIFtycCs4XQkJQyAyMQorCUFERFgoYAklbDMsIHczLCB3MycpCQlDIDIyCisJYWRkeGNjYyglbDcsIHcwLCB3MCkJCUMgMjIKKwltdWx4CSVpNSwgdjEsICVsMQkJQyAyMworCXVtdWx4aGkoJWk1LCB2MSwgJWw1KQkJQyAyMworQU0yKGAJbGR4CVtycCsyNF0sICVnMScpCQlDIDI0CisJYWRkY2MJJWwwLCB3MywgdzMJCUMgMjQKKwlhZGR4Y2NjKCVsNCwgdzAsIHcwKQkJQyAyNQorCWFkZHhjKAklZzAsICVnMCwgdzEpCQlDIDI1CisJYWRkCXVwLCAzMiwgdXAKKwlhZGQJcnAsIDMyLCBycAorCWJyZ3oJbiwgTCh0b3ApCisJIGFkZAluLCAtNCwgbgorCitMKGVuZCk6CW11bHgJJWk0LCB2MCwgJWwyCisJdW11bHhoaSglaTQsIHYwLCAlbDYpCitBTTIoYAlhZGRjYwl3MywgJWczLCB3MycpCisJc3R4CXczLCBbcnAtMTZdCisJQUREWChgCSVsMSwgdzAsIHcwJykKKwlhZGR4Y2NjKCVsNSwgdzEsIHcxKQorCW11bHgJJWk0LCB2MSwgJWwzCisJdW11bHhoaSglaTQsIHYxLCAlbDcpCisJYWRkY2MJJWwyLCB3MCwgdzAKKwlhZGR4Y2NjKCVsNiwgdzEsIHcxKQorCWFkZHhjKAklZzAsICVnMCwgdzIpCitBTTIoYAlhZGRjYwl3MCwgJWcxLCB3MCcpCisJc3R4CXcwLCBbcnAtOF0KKwlBRERYKGAJJWwzLCB3MSwgdzEnKQorCXN0eAl3MSwgW3JwKzBdCisJYWRkeGMoJWw3LCB3MiwgJWkwKQorCisJcmV0CisJIHJlc3RvcmUKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDMvYW9ybXVsXzQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmN0My9hb3JtdWxfNC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ1ZjZkNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDMvYW9ybXVsXzQuYXNtCkBAIC0wLDAgKzEsMjE5IEBACitkbmwgIFNQQVJDIHY5IG1wbl9tdWxfNCBhbmQgbXBuX2FkZG11bF80IGZvciBUMy9UNC9UNS4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQwkJICAgIGN5Y2xlcy9saW1iICAgICAgY3ljbGVzL2xpbWIKK0MJCSAgICAgICBtdWxfNCAgICAgICAgICAgYWRkbXVsXzQKK0MgVWx0cmFTUEFSQyBUMzoJMjEuNQkJMjIuMAorQyBVbHRyYVNQQVJDIFQ0OgkgMi42MjUJCSAyLjc1CisKKworQyBUaGUgY29kZSBpcyB3ZWxsLXNjaGVkdWxlZCBhbmQgcmVsaWVzIG9uIE9vTyB2ZXJ5IGxpdHRsZS4gIFRoZXJlIGlzIGhvcGUgdGhhdAorQyB0aGlzIHdpbGwgcnVuIGF0IGFyb3VuZCAyLjUgYW5kIDIuNzUgYy9sIHJlc3BlY3RpdmVseSwgb24gVDQuCisKK2RlZmluZShgcnAnLCBgJWkwJykKK2RlZmluZShgdXAnLCBgJWkxJykKK2RlZmluZShgbicsICBgJWkyJykKK2RlZmluZShgdnAnLCBgJWkzJykKKworZGVmaW5lKGB2MCcsIGAlZzEnKQorZGVmaW5lKGB2MScsIGAlbzcnKQorZGVmaW5lKGB2MicsIGAlZzInKQorZGVmaW5lKGB2MycsIGAlaTMnKQorCitkZWZpbmUoYHcwJywgYCVvMCcpCitkZWZpbmUoYHcxJywgYCVvMScpCitkZWZpbmUoYHcyJywgYCVvMicpCitkZWZpbmUoYHczJywgYCVvMycpCitkZWZpbmUoYHc0JywgYCVvNCcpCisKK2RlZmluZShgcjAnLCBgJW81JykKKworZGVmaW5lKGB1MCcsIGAlaTQnKQorZGVmaW5lKGB1MScsIGAlaTUnKQorCitkZWZpbmUoYHJwMCcsIGBycCcpCitkZWZpbmUoYHJwMScsIGAlZzMnKQorZGVmaW5lKGBycDInLCBgJWc0JykKK2RlZmluZShgdXAwJywgYHVwJykKK2RlZmluZShgdXAxJywgYCVnNScpCisKK2lmZGVmKGBPUEVSQVRJT05fbXVsXzQnLGAKKyAgICAgIGRlZmluZShgQU00JywgICAgICBgJykKKyAgICAgIGRlZmluZShgQUREWCcsCSBgYWRkY2NgJyQxJykKKyAgICAgIGRlZmluZShgZnVuYycsICAgICBgbXBuX211bF80JykKKycpCitpZmRlZihgT1BFUkFUSU9OX2FkZG11bF80JyxgCisgICAgICBkZWZpbmUoYEFNNCcsICAgICAgYCQxJykKKyAgICAgIGRlZmluZShgQUREWCcsCSBgYWRkeGNjYygkMSwkMiwkMyknKQorICAgICAgZGVmaW5lKGBmdW5jJywgICAgIGBtcG5fYWRkbXVsXzQnKQorJykKKworCitNVUxGVU5DX1BST0xPR1VFKG1wbl9tdWxfNCBtcG5fYWRkbXVsXzQpCisKK0FTTV9TVEFSVCgpCisJUkVHSVNURVIoJWcyLCNzY3JhdGNoKQorCVJFR0lTVEVSKCVnMywjc2NyYXRjaCkKK1BST0xPR1VFKGZ1bmMpCisJc2F2ZQklc3AsIC0xNzYsICVzcAorCisJbGR4CVt1cCArIDBdLCB1MQkJQyBsb2FkIHVwWzBdIGVhcmx5CisJYW5kY2MJbiwgMSwgJWcwCQlDIGlzIG4gb2RkPworCWxkeAlbdnAgKyAwXSwgdjAKKwlzbGx4CW4sIDMsIG4KKwlsZHgJW3ZwICsgOF0sIHYxCisJYWRkCW4sIC0yOCwgbgorCWxkeAlbdnAgKyAxNl0sIHYyCisJYWRkCXJwLCAtMTYsIHJwCisJbGR4CVt2cCArIDI0XSwgdjMKKwlhZGQJdXAsIG4sIHVwMAorCWFkZAlycCwgbiwgcnAwCisJYWRkCXVwMCwgOCwgdXAxCisJYWRkCXJwMCwgOCwgcnAxCisJYWRkCXJwMCwgMTYsIHJwMgorCW11bHgJdTEsIHYwLCAlbDAKKwltb3YJMCwgdzAKKwltdWx4CXUxLCB2MSwgJWwxCisJbW92CTAsIHcxCisJbXVseAl1MSwgdjIsICVsMgorCW1vdgkwLCB3MgorCW11bHgJdTEsIHYzLCAlbDMKKwltb3YJMCwgdzMKKworCWJlCUwoZXZuKQorCSBuZWcJbiwgbgorCitMKG9kZCk6CW1vdgl1MSwgdTAKKwlsZHgJW3VwMSArIG5dLCB1MQorQU00KGAJbGR4CVtycDIgKyBuXSwgcjAnKQorCXVtdWx4aGkodTAsIHYwLCAlbDQpCisJdW11bHhoaSh1MCwgdjEsICVsNSkKKwl1bXVseGhpKHUwLCB2MiwgJWw2KQorCXVtdWx4aGkodTAsIHYzLCAlbDcpCisJYglMKG1pZCkKKwkgYWRkCW4sIDgsIG4KKworTChldm4pOglsZHgJW3VwMSArIG5dLCB1MAorQU00KGAJbGR4CVtycDIgKyBuXSwgcjAnKQorCXVtdWx4aGkodTEsIHYwLCAlbDQpCisJdW11bHhoaSh1MSwgdjEsICVsNSkKKwl1bXVseGhpKHUxLCB2MiwgJWw2KQorCXVtdWx4aGkodTEsIHYzLCAlbDcpCisJYWRkCW4sIDE2LCBuCisKKwlBTElHTigxNikKK0wodG9wKToJYWRkY2MJJWwwLCB3MCwgdzAKKwltdWx4CXUwLCB2MCwgJWwwCUMgdyAwCisJYWRkeGNjYyglbDEsIHcxLCB3MSkKKwltdWx4CXUwLCB2MSwgJWwxCUMgdyAxCisJYWRkeGNjYyglbDIsIHcyLCB3MikKKwltdWx4CXUwLCB2MiwgJWwyCUMgdyAyCisJYWRkeGNjYyglbDMsIHczLCB3MykKKwltdWx4CXUwLCB2MywgJWwzCUMgdyAzCisJbGR4CVt1cDAgKyBuXSwgdTEKKwlhZGR4YygJJWcwLCAlZzAsIHc0KQorQU00KGAJYWRkY2MJcjAsIHcwLCB3MCcpCisJc3R4CXcwLCBbcnAwICsgbl0KKwlBRERYKGAJJWw0LCB3MSwgdzAnKQorCXVtdWx4aGkodTAsIHYwLCAlbDQpCUMgdyAxCitBTTQoYAlsZHgJW3JwMSArIG5dLCByMCcpCisJYWRkeGNjYyglbDUsIHcyLCB3MSkKKwl1bXVseGhpKHUwLCB2MSwgJWw1KQlDIHcgMgorCWFkZHhjY2MoJWw2LCB3MywgdzIpCisJdW11bHhoaSh1MCwgdjIsICVsNikJQyB3IDMKKwlhZGR4YygJJWw3LCB3NCwgdzMpCisJdW11bHhoaSh1MCwgdjMsICVsNykJQyB3IDQKK0wobWlkKToJYWRkY2MJJWwwLCB3MCwgdzAKKwltdWx4CXUxLCB2MCwgJWwwCUMgdyAxCisJYWRkeGNjYyglbDEsIHcxLCB3MSkKKwltdWx4CXUxLCB2MSwgJWwxCUMgdyAyCisJYWRkeGNjYyglbDIsIHcyLCB3MikKKwltdWx4CXUxLCB2MiwgJWwyCUMgdyAzCisJYWRkeGNjYyglbDMsIHczLCB3MykKKwltdWx4CXUxLCB2MywgJWwzCUMgdyA0CisJbGR4CVt1cDEgKyBuXSwgdTAKKwlhZGR4YygJJWcwLCAlZzAsIHc0KQorQU00KGAJYWRkY2MJcjAsIHcwLCB3MCcpCisJc3R4CXcwLCBbcnAxICsgbl0KKwlBRERYKGAJJWw0LCB3MSwgdzAnKQorCXVtdWx4aGkodTEsIHYwLCAlbDQpCUMgdyAyCitBTTQoYAlsZHgJW3JwMiArIG5dLCByMCcpCisJYWRkeGNjYyglbDUsIHcyLCB3MSkKKwl1bXVseGhpKHUxLCB2MSwgJWw1KQlDIHcgMworCWFkZHhjY2MoJWw2LCB3MywgdzIpCisJdW11bHhoaSh1MSwgdjIsICVsNikJQyB3IDQKKwlhZGR4YygJJWw3LCB3NCwgdzMpCisJdW11bHhoaSh1MSwgdjMsICVsNykJQyB3IDUKKwlicmx6CW4sIEwodG9wKQorCSBhZGQJbiwgMTYsIG4KKworTChlbmQpOglhZGRjYwklbDAsIHcwLCB3MAorCW11bHgJdTAsIHYwLCAlbDAKKwlhZGR4Y2NjKCVsMSwgdzEsIHcxKQorCW11bHgJdTAsIHYxLCAlbDEKKwlhZGR4Y2NjKCVsMiwgdzIsIHcyKQorCW11bHgJdTAsIHYyLCAlbDIKKwlhZGR4Y2NjKCVsMywgdzMsIHczKQorCW11bHgJdTAsIHYzLCAlbDMKKwlhZGR4YygJJWcwLCAlZzAsIHc0KQorQU00KGAJYWRkY2MJcjAsIHcwLCB3MCcpCisJc3R4CXcwLCBbcnAwICsgbl0KKwlBRERYKGAJJWw0LCB3MSwgdzAnKQorCXVtdWx4aGkodTAsIHYwLCAlbDQpCitBTTQoYAlsZHgJW3JwMSArIG5dLCByMCcpCisJYWRkeGNjYyglbDUsIHcyLCB3MSkKKwl1bXVseGhpKHUwLCB2MSwgJWw1KQorCWFkZHhjY2MoJWw2LCB3MywgdzIpCisJdW11bHhoaSh1MCwgdjIsICVsNikKKwlhZGR4YygJJWw3LCB3NCwgdzMpCisJdW11bHhoaSh1MCwgdjMsICVsNykKKwlhZGRjYwklbDAsIHcwLCB3MAorCWFkZHhjY2MoJWwxLCB3MSwgdzEpCisJYWRkeGNjYyglbDIsIHcyLCB3MikKKwlhZGR4Y2NjKCVsMywgdzMsIHczKQorCWFkZHhjKAklZzAsICVnMCwgdzQpCitBTTQoYAlhZGRjYwlyMCwgdzAsIHcwJykKKwlzdHgJdzAsIFtycDEgKyBuXQorCUFERFgoYAklbDQsIHcxLCB3MCcpCisJYWRkeGNjYyglbDUsIHcyLCB3MSkKKwlhZGR4Y2NjKCVsNiwgdzMsIHcyKQorCXN0eAl3MCwgW3JwMiArIG5dCisJYWRkCW4sIDE2LCBuCisJc3R4CXcxLCBbcnAxICsgbl0KKwlzdHgJdzIsIFtycDIgKyBuXQorCWFkZHhjKAklbDcsIHc0LCAlaTApCisJcmV0CisJIHJlc3RvcmUKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDMvYW9yc2xzaF9uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDMvYW9yc2xzaF9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDE0YjFiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmN0My9hb3JzbHNoX24uYXNtCkBAIC0wLDAgKzEsMTQ3IEBACitkbmwgIFNQQVJDIHY5IG1wbl9hZGRsc2hfbiBhbmQgbXBuX3N1YmxzaF9uIGZvciBUMy9UNC9UNS4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJCSAgIGN5Y2xlcy9saW1iCitDIFVsdHJhU1BBUkMgVDM6CTExCitDIFVsdHJhU1BBUkMgVDQ6CSA0CisKK0MgRm9yIHN1YmxzaF9uIHdlIGNvbWJpbmUgdGhlIHR3byBzaGlmdGVkIGxpbWJzIHVzaW5nIHhub3IsIHVzaW5nIHRoZSBpZGVudGl0eQorQyAoYSB4b3Igbm90IGIpID0gKG5vdCAoYSB4b3IgYikpIHdoaWNoIGVxdWFscyAobm90IChhIG9yIGIpKSB3aGVuIChhIGFuZCBiKSA9CitDIDAgYXMgaXQgaXMgaW4gb3VyIHVzYWdlLiAgVGhpcyBnaXZlcyB1cyB0aGUgb25lcyBjb21wbGVtZW50IGZvciBmcmVlLgorQyBVbmZvcnR1bmF0ZWx5LCB0aGUgc2FtZSB0cmljayB3aWxsIG5vdCB3b3JrIGZvciByc2Jsc2hfbiwgd2hpY2ggd2lsbCBpbnN0ZWFkCitDIHJlcXVpcmUgYSBzZXBhcmF0ZSBuZWdhdGlvbi4KK0MKK0MgRklYTUU6IEFkZCByc2Jsc2hfbiB0byB0aGlzIGZpbGUuCisKK2RlZmluZShgcnAnLCBgJWkwJykKK2RlZmluZShgdXAnLCBgJWkxJykKK2RlZmluZShgdnAnLCBgJWkyJykKK2RlZmluZShgbicsICBgJWkzJykKK2RlZmluZShgY250JyxgJWk0JykKKworZGVmaW5lKGB0bmMnLGAlbzUnKQorCitpZmRlZihgT1BFUkFUSU9OX2FkZGxzaF9uJyxgCisgIGRlZmluZShgSU5JVENZJywgYHN1YmNjCSVnMCwgMCwgJWcwJykKKyAgZGVmaW5lKGBNRVJHRScsICBgb3InKQorICBkZWZpbmUoYGZ1bmMnLCAgIGBtcG5fYWRkbHNoX24nKQorJykKK2lmZGVmKGBPUEVSQVRJT05fc3VibHNoX24nLGAKKyAgZGVmaW5lKGBJTklUQ1knLCBgc3ViY2MJJWcwLCAxLCAlZzAnKQorICBkZWZpbmUoYE1FUkdFJywgIGB4bm9yJykKKyAgZGVmaW5lKGBmdW5jJywgICBgbXBuX3N1YmxzaF9uJykKKycpCisKK2RlZmluZShgcnAwJywgIGBycCcpCitkZWZpbmUoYHJwMScsICBgJW8yJykKK2RlZmluZShgdXAwJywgIGB1cCcpCitkZWZpbmUoYHVwMScsICBgJW8zJykKK2RlZmluZShgdnAwJywgIGB2cCcpCitkZWZpbmUoYHZwMScsICBgJW80JykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fYWRkbHNoX24gbXBuX3N1YmxzaF9uKQorQVNNX1NUQVJUKCkKKwlSRUdJU1RFUiglZzIsI3NjcmF0Y2gpCisJUkVHSVNURVIoJWczLCNzY3JhdGNoKQorUFJPTE9HVUUoZnVuYykKKwlzYXZlCSVzcCwgLTE3NiwgJXNwCisJbW92CTY0LCB0bmMKKwlzdWIJdG5jLCBjbnQsIHRuYworCisJYW5kY2MJbiwgMSwgJWcwCisJc2xseAluLCAzLCBuCisJYWRkCW4sIC0xNiwgbgorCWFkZAl1cCwgbiwgdXAwCisJYWRkCXZwLCBuLCB2cDAKKwlhZGQJcnAsIG4sIHJwMAorCWFkZAl1cDAsIDgsIHVwMQorCWFkZAl2cDAsIDgsIHZwMQorCWFkZAlycDAsIC04LCBycDEKKwlhZGQJcnAwLCAtMTYsIHJwMAorCW5lZwluLCBuCisJYmUJTChldm4pCisJIElOSVRDWQorCitMKG9kZCk6CWxkeAlbdnAwICsgbl0sICVsMQorCW1vdgkwLCAlbDIKKwlsZHgJW3VwMCArIG5dLCAlbDUKKwlzbGx4CSVsMSwgY250LCAlZzMKKwlicmdlegluLCBMKHdkMSkKKwkgYWRkCW4sIDgsIG4KKwlsZHgJW3ZwMCArIG5dLCAlbDAKKwliCUwobG8xKQorCSBzbGx4CSVsMSwgY250LCAlZzMKKworTChldm4pOglsZHgJW3ZwMCArIG5dLCAlbDAKKwltb3YJMCwgJWwzCisJbGR4CVt1cDAgKyBuXSwgJWw0CisJbGR4CVt2cDEgKyBuXSwgJWwxCisJYglMKGxvMCkKKwkgc2xseAklbDAsIGNudCwgJWcxCisKK0wodG9wKToJYWRkeGNjYyglbDYsICVsNCwgJW8wKQorCWxkeAlbdnAwICsgbl0sICVsMAorCXNsbHgJJWwxLCBjbnQsICVnMworCXN0eAklbzAsIFtycDAgKyBuXQorTChsbzEpOglzcmx4CSVsMSwgdG5jLCAlbDMKKwlNRVJHRQklbDIsICVnMywgJWw3CisJbGR4CVt1cDAgKyBuXSwgJWw0CisJYWRkeGNjYyglbDcsICVsNSwgJW8xKQorCWxkeAlbdnAxICsgbl0sICVsMQorCXNsbHgJJWwwLCBjbnQsICVnMQorCXN0eAklbzEsIFtycDEgKyBuXQorTChsbzApOglzcmx4CSVsMCwgdG5jLCAlbDIKKwlNRVJHRQklbDMsICVnMSwgJWw2CisJbGR4CVt1cDEgKyBuXSwgJWw1CisJYnJseixwdAluLCBMKHRvcCkKKwkgYWRkCW4sIDE2LCBuCisKKwlhZGR4Y2NjKCVsNiwgJWw0LCAlbzApCisJc2xseAklbDEsIGNudCwgJWczCisJc3R4CSVvMCwgW3JwMCArIG5dCitMKHdkMSk6CXNybHgJJWwxLCB0bmMsICVsMworCU1FUkdFCSVsMiwgJWczLCAlbDcKKwlhZGR4Y2NjKCVsNywgJWw1LCAlbzEpCisJc3R4CSVvMSwgW3JwMSArIG5dCisKK2lmZGVmKGBPUEVSQVRJT05fYWRkbHNoX24nLAorYAlhZGR4YygJJWwzLCAlZzAsICVpMCknKQoraWZkZWYoYE9QRVJBVElPTl9zdWJsc2hfbicsCitgCWFkZHhjKAklZzAsICVnMCwgJWcxKQorCWFkZAklZzEsIC0xLCAlZzEKKwlzdWIJJWwzLCAlZzEsICVpMCcpCisKKwlyZXQKKwkgcmVzdG9yZQorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmN0My9iZGl2X2RibTFjLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDMvYmRpdl9kYm0xYy5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUwODYwZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDMvYmRpdl9kYm0xYy5hc20KQEAgLTAsMCArMSwxNDcgQEAKK2RubCAgU1BBUkMgVDMvVDQvVDUgbXBuX2JkaXZfZGJtMWMuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqw7ZybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgVWx0cmFTUEFSQyBUMzoJMjUKK0MgVWx0cmFTUEFSQyBUNC9UNToJIDQKKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHFwJywgIGAlaTAnKQorZGVmaW5lKGBhcCcsICBgJWkxJykKK2RlZmluZShgbicsICAgYCVpMicpCitkZWZpbmUoYGJkJywgIGAlaTMnKQorZGVmaW5lKGBoJywgICBgJWk0JykKKworZGVmaW5lKGBwbG8wJyxgJWc0JykgIGRlZmluZShgcGxvMScsYCVnNScpCitkZWZpbmUoYHBoaTAnLGAlbDAnKSAgZGVmaW5lKGBwaGkxJyxgJWwxJykKK2RlZmluZShgYTAnLCAgYCVnMScpICBkZWZpbmUoYGExJywgIGAlZzMnKQorCitBU01fU1RBUlQoKQorCVJFR0lTVEVSKCVnMiwjc2NyYXRjaCkKKwlSRUdJU1RFUiglZzMsI3NjcmF0Y2gpCitQUk9MT0dVRShtcG5fYmRpdl9kYm0xYykKKwlzYXZlCSVzcCwgLTE3NiwgJXNwCisKKwlhbmQJbiwgMywgJWc1CisJbGR4CVthcCArIDBdLCAlZzIKKwlhZGQJbiwgLTUsIG4KKwlicnoJJWc1LCBMKGIwKQorCSBjbXAJJWc1LCAyCisJYmNzCSV4Y2MsIEwoYjEpCisJIG5vcAorCWJlCSV4Y2MsIEwoYjIpCisJIG5vcAorCitMKGIzKToJbGR4CVthcCArIDhdLCBhMAorCW11bHgJYmQsICVnMiwgcGxvMQorCXVtdWx4aGkoYmQsICVnMiwgcGhpMSkKKwlsZHgJW2FwICsgMTZdLCBhMQorCWFkZAlxcCwgLTI0LCBxcAorCWIJTChsbzMpCisJIGFkZAlhcCwgLTgsIGFwCisKK0woYjIpOglsZHgJW2FwICsgOF0sIGExCisJbXVseAliZCwgJWcyLCBwbG8wCisJdW11bHhoaShiZCwgJWcyLCBwaGkwKQorCWJybHoscHQgbiwgTCh3ZDIpCisJIG5vcAorTChndDIpOglsZHgJW2FwICsgMTZdLCBhMAorCWFkZAlhcCwgMTYsIGFwCisJYglMKGxvMikKKwkgYWRkCW4sIC0xLCBuCisKK0woYjEpOgltdWx4CWJkLCAlZzIsIHBsbzEKKwkgdW11bHhoaShiZCwgJWcyLCBwaGkxKQorCWJybHoscG4JbiwgTCh3ZDEpCisJIGFkZAlxcCwgLTgsIHFwCitMKGd0MSk6CWxkeAlbYXAgKyA4XSwgYTAKKwlsZHgJW2FwICsgMTZdLCBhMQorCWIJTChsbzEpCisJIGFkZAlhcCwgOCwgYXAKKworTChiMCk6CWxkeAlbYXAgKyA4XSwgYTEKKwltdWx4CWJkLCAlZzIsIHBsbzAKKwl1bXVseGhpKGJkLCAlZzIsIHBoaTApCisJbGR4CVthcCArIDE2XSwgYTAKKwliCUwobG8wKQorCSBhZGQJcXAsIC0xNiwgcXAKKworTCh0b3ApOglsZHgJW2FwICsgMF0sIGEwCisJc3ViCWgsIHBoaTEsIGgKK0wobG8yKToJbXVseAliZCwgYTEsIHBsbzEKKwl1bXVseGhpKGJkLCBhMSwgcGhpMSkKKwlzdWJjYwloLCBwbG8wLCBoCisJYWRkeGMoCXBoaTAsICVnMCwgcGhpMCkKKwlzdHgJaCwgW3FwICsgMF0KKwlsZHgJW2FwICsgOF0sIGExCisJc3ViCWgsIHBoaTAsIGgKK0wobG8xKToJbXVseAliZCwgYTAsIHBsbzAKKwl1bXVseGhpKGJkLCBhMCwgcGhpMCkKKwlzdWJjYwloLCBwbG8xLCBoCisJYWRkeGMoCXBoaTEsICVnMCwgcGhpMSkKKwlzdHgJaCwgW3FwICsgOF0KKwlsZHgJW2FwICsgMTZdLCBhMAorCXN1YgloLCBwaGkxLCBoCitMKGxvMCk6CW11bHgJYmQsIGExLCBwbG8xCisJdW11bHhoaShiZCwgYTEsIHBoaTEpCisJc3ViY2MJaCwgcGxvMCwgaAorCWFkZHhjKAlwaGkwLCAlZzAsIHBoaTApCisJc3R4CWgsIFtxcCArIDE2XQorCWxkeAlbYXAgKyAyNF0sIGExCisJc3ViCWgsIHBoaTAsIGgKK0wobG8zKToJbXVseAliZCwgYTAsIHBsbzAKKwl1bXVseGhpKGJkLCBhMCwgcGhpMCkKKwlzdWJjYwloLCBwbG8xLCBoCisJYWRkeGMoCXBoaTEsICVnMCwgcGhpMSkKKwlzdHgJaCwgW3FwICsgMjRdCisJYWRkCWFwLCAzMiwgYXAKKwlhZGQJcXAsIDMyLCBxcAorCWJyZ3oscHQJbiwgTCh0b3ApCisJIGFkZAluLCAtNCwgbgorCitMKGVuZCk6CXN1YgloLCBwaGkxLCBoCitMKHdkMik6CW11bHgJYmQsIGExLCBwbG8xCisJdW11bHhoaShiZCwgYTEsIHBoaTEpCisJc3ViY2MJaCwgcGxvMCwgaAorCWFkZHhjKAlwaGkwLCAlZzAsIHBoaTApCisJc3R4CWgsIFtxcCArIDBdCisJc3ViCWgsIHBoaTAsIGgKK0wod2QxKToJc3ViY2MJaCwgcGxvMSwgaAorCWFkZHhjKAlwaGkxLCAlZzAsIHBoaTEpCisJc3R4CWgsIFtxcCArIDhdCisJc3ViCWgsIHBoaTEsICVpMAorCisJcmV0CisJIHJlc3RvcmUKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDMvYmRpdl9xXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmN0My9iZGl2X3FfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg0NzA0NwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDMvYmRpdl9xXzEuYXNtCkBAIC0wLDAgKzEsMTM3IEBACitkbmwgIFNQQVJDIFQzL1Q0L1Q1IG1wbl9iZGl2X3FfMS4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDEzLCAyMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICAgICAgICAgICBjeWNsZXMvbGltYgorQyBVbHRyYVNQQVJDIFQzOgkzMQorQyBVbHRyYVNQQVJDIFQ0L1Q1OgkyMC0yNiAgaGl0cyAyMCBlYXJseSwgdGhlbiBzaGFycGx5IGRyb3BzCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBxcCcsICBgJWkwJykKK2RlZmluZShgYXAnLCAgYCVpMScpCitkZWZpbmUoYG4nLCAgIGAlaTInKQorZGVmaW5lKGBkJywgICBgJWkzJykKK2RlZmluZShgZGludicsYCVpNCcpCitkZWZpbmUoYGNudCcsIGAlaTUnKQorCitkZWZpbmUoYHRuYycsIGAlbzInKQorCitBU01fU1RBUlQoKQorCVJFR0lTVEVSKCVnMiwjc2NyYXRjaCkKKwlSRUdJU1RFUiglZzMsI3NjcmF0Y2gpCitQUk9MT0dVRShtcG5fYmRpdl9xXzEpCisJc2F2ZQklc3AsIC0xNzYsICVzcAorCWxkeAlbYXBdLCAlbzUKKwlhZGQJZCwgLTEsICVnMQorCWFuZG4JJWcxLCBkLCAlZzEKKwlwb3BjCSVnMSwgY250CisKKwlzcmx4CWQsIGNudCwgZAorCXNybHgJZCwgMSwgJWcxCisJYW5kCSVnMSwgMTI3LCAlZzEKKwlMRUE2NChiaW52ZXJ0X2xpbWJfdGFibGUsIGcyLCBnNCkKKwlsZHViCVslZzIrJWcxXSwgJWcxCisJYWRkCSVnMSwgJWcxLCAlZzIKKwltdWx4CSVnMSwgJWcxLCAlZzEKKwltdWx4CSVnMSwgZCwgJWcxCisJc3ViCSVnMiwgJWcxLCAlZzIKKwlhZGQJJWcyLCAlZzIsICVnMQorCW11bHgJJWcyLCAlZzIsICVnMgorCW11bHgJJWcyLCBkLCAlZzIKKwlzdWIJJWcxLCAlZzIsICVnMQorCWFkZAklZzEsICVnMSwgJW83CisJbXVseAklZzEsICVnMSwgJWcxCisJbXVseAklZzEsIGQsICVnMQorCWFkZAluLCAtMiwgbgorCWJyeixwdAljbnQsIEwobm9ybSkKKwkgc3ViCSVvNywgJWcxLCBkaW52CisKKwlicmx6LHB0CW4sIEwoZWR1KQorCSBzcmx4CSVvNSwgY250LCAlbzUKKwliCUwoZWVlKQorCSBtb3YJMCwgJWc0CitFUElMT0dVRSgpCisKK1BST0xPR1VFKG1wbl9waTFfYmRpdl9xXzEpCisJc2F2ZQklc3AsIC0xNzYsICVzcAorCWxkeAlbYXBdLCAlbzUKKworCWJyeixwdAljbnQsIEwobm9ybSkKKwkgYWRkCW4sIC0yLCBuCisKK0wodW5vcm0pOgorCWJybHoscHQJbiwgTChlZHUpCisJIHNybHgJJW81LCBjbnQsICVvNQorCW1vdgkwLCAlZzQKK0woZWVlKToJc3ViCSVnMCwgY250LCB0bmMKKworTCh0cHUpOglsZHgJW2FwKzhdLCAlZzMKKwlhZGQJYXAsIDgsIGFwCisJc2xseAklZzMsIHRuYywgJWc1CisJb3IJJWc1LCAlbzUsICVnNQorCXNybHgJJWczLCBjbnQsICVvNQorCXN1YmNjCSVnNSwgJWc0LCAlZzQKKwltdWx4CSVnNCwgZGludiwgJWcxCisJc3R4CSVnMSwgW3FwXQorCWFkZAlxcCwgOCwgcXAKKwl1bXVseGhpKGQsICVnMSwgJWcxKQorCWFkZHhjKAklZzEsICVnMCwgJWc0KQorCWJyZ3oscHQJbiwgTCh0cHUpCisJIGFkZAluLCAtMSwgbgorCisJc3ViCSVvNSwgJWc0LCAlbzUKK0woZWR1KToJbXVseAklbzUsIGRpbnYsICVnMQorCXJldHVybgklaTcrOAorCSBzdHgJJWcxLCBbJW8wXQorCitMKG5vcm0pOgorCW11bHgJZGludiwgJW81LCAlZzEKKwlicmx6LHB0CW4sIEwoZWRuKQorCSBzdHgJJWcxLCBbcXBdCisJYWRkCXFwLCA4LCBxcAorCWFkZGNjCSVnMCwgMCwgJWc0CisKK0wodHBuKToJdW11bHhoaShkLCAlZzEsICVnMSkKKwlsZHgJW2FwKzhdLCAlZzUKKwlhZGQJYXAsIDgsIGFwCisJYWRkeGMoCSVnMSwgJWcwLCAlZzEpCisJc3ViY2MJJWc1LCAlZzEsICVnMQorCW11bHgJJWcxLCBkaW52LCAlZzEKKwlzdHgJJWcxLCBbcXBdCisJYWRkCXFwLCA4LCBxcAorCWJyZ3oscHQJbiwgTCh0cG4pCisJIGFkZAluLCAtMSwgbgorCitMKGVkbik6CXJldHVybgklaTcrOAorCSBub3AKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDMvY25kX2FvcnNfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvdWx0cmFzcGFyY3QzL2NuZF9hb3JzX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5Y2NhZWMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvdWx0cmFzcGFyY3QzL2NuZF9hb3JzX24uYXNtCkBAIC0wLDAgKzEsMTQ1IEBACitkbmwgIFNQQVJDIHY5IG1wbl9jbmRfYWRkX24gYW5kIG1wbl9jbmRfc3ViX24gZm9yIFQzL1Q0L1Q1LgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBEYXZpZCBNaWxsZXIgYW5kIFRvcmJqw7ZybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAxMywgMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCQkgICBjeWNsZXMvbGltYgorQyBVbHRyYVNQQVJDIFQzOgkgOC41CitDIFVsdHJhU1BBUkMgVDQ6CSAzCisKK0MgV2UgdXNlIGEgZG91YmxlLXBvaW50ZXIgdHJpY2sgdG8gYWxsb3cgaW5kZXhlZCBhZGRyZXNzaW5nLiAgSXRzIHNldHVwCitDIGNvc3QgbWlnaHQgYmUgYSBwcm9ibGVtIGluIHRoZXNlIGZ1bmN0aW9ucywgc2luY2Ugd2UgZG9uJ3QgZXhwZWN0IGh1Z2UgbgorQyBhcmd1bWVudHMuCitDCitDIEZvciBzdWIgd2UgbmVlZCB+KGEgJiBtYXNrKSA9ICh+YSB8IH5tYXNrKSBidXQgYnkgY29tcGxlbWVudGluZyBtYXNrIHdlIGNhbgorQyBpbnN0ZWFkIGRvIH4oYSAmIH5tYXNrKSA9ICh+YSB8IG1hc2spLCBhbGxvd2luZyB1cyB0byB1c2UgdGhlIG9ybiBpbnNuLgorCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgY25kJywgYCVpMCcpCitkZWZpbmUoYHJwJywgIGAlaTEnKQorZGVmaW5lKGB1cCcsICBgJWkyJykKK2RlZmluZShgdnAnLCAgYCVpMycpCitkZWZpbmUoYG4nLCAgIGAlaTQnKQorCitkZWZpbmUoYG1hc2snLCAgIGBjbmQnKQorZGVmaW5lKGB1cDAnLCBgJWwwJykgIGRlZmluZShgdXAxJywgYCVsMScpCitkZWZpbmUoYHZwMCcsIGAlbDInKSAgZGVmaW5lKGB2cDEnLCBgJWwzJykKK2RlZmluZShgcnAwJywgYCVnNCcpICBkZWZpbmUoYHJwMScsIGAlZzUnKQorZGVmaW5lKGB1MCcsICBgJWw0JykgIGRlZmluZShgdTEnLCAgYCVsNScpCitkZWZpbmUoYHYwJywgIGAlbDYnKSAgZGVmaW5lKGB2MScsICBgJWw3JykKK2RlZmluZShgeDAnLCAgYCVnMScpICBkZWZpbmUoYHgxJywgIGAlZzMnKQorZGVmaW5lKGB3MCcsICBgJWcxJykgIGRlZmluZShgdzEnLCAgYCVnMycpCisKK2lmZGVmKGBPUEVSQVRJT05fY25kX2FkZF9uJyxgCisgIGRlZmluZShgTE9HT1AnLCAgIGBhbmQJJDEsICQyLCAkMycpCisgIGRlZmluZShgTUFLRU1BU0snLGBjbXAJJWcwLCAkMQorCQkgICAgIGFkZHhjKAklZzAsICVnMCwgJDIpCisJCSAgICAgbmVnCSQyLCAkMicpCisgIGRlZmluZShgSU5JVENZJywgIGBhZGRjYwklZzAsIDAsICVnMCcpCisgIGRlZmluZShgUkVUVkFMJywgIGBhZGR4YygJJWcwLCAlZzAsICVpMCknKQorICBkZWZpbmUoYGZ1bmMnLCAgICBgbXBuX2NuZF9hZGRfbicpCisnKQoraWZkZWYoYE9QRVJBVElPTl9jbmRfc3ViX24nLGAKKyAgZGVmaW5lKGBMT0dPUCcsICAgYG9ybgkkMiwgJDEsICQzJykKKyAgZGVmaW5lKGBNQUtFTUFTSycsYGNtcAkkMSwgMQorCQkgICAgIGFkZHhjKAklZzAsICVnMCwgJDIpCisJCSAgICAgbmVnCSQyLCAkMicpCisgIGRlZmluZShgSU5JVENZJywgIGBzdWJjYwklZzAsIDEsICVnMCcpCisgIGRlZmluZShgUkVUVkFMJywgIGBhZGR4YygJJWcwLCAlZzAsICVpMCkKKwkJICAgICB4b3IJJWkwLCAxLCAlaTAnKQorICBkZWZpbmUoYGZ1bmMnLCAgICBgbXBuX2NuZF9zdWJfbicpCisnKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9jbmRfYWRkX24gbXBuX2NuZF9zdWJfbikKKworQVNNX1NUQVJUKCkKKwlSRUdJU1RFUiglZzIsI3NjcmF0Y2gpCisJUkVHSVNURVIoJWczLCNzY3JhdGNoKQorUFJPTE9HVUUoZnVuYykKKwlzYXZlCSVzcCwgLTE3NiwgJXNwCisKKwlNQUtFTUFTSyhjbmQsbWFzaykKKworCWFuZGNjCW4sIDEsICVnMAorCXNsbHgJbiwgMywgbgorCWFkZAluLCAtMTYsIG4KKwlhZGQJdnAsIG4sIHZwMAorCWFkZAl1cCwgbiwgdXAwCisJYWRkCXJwLCBuLCBycDAKKwluZWcJbiwgbgorCWJlCUwoZXZuKQorCSBJTklUQ1kKKworTChvZGQpOglsZHgJW3ZwMCArIG5dLCB2MQorCWxkeAlbdXAwICsgbl0sIHUxCisJTE9HT1AoCXYxLCBtYXNrLCB4MSkKKwlhZGR4Y2NjKHUxLCB4MSwgdzEpCisJc3R4CXcxLCBbcnAwICsgbl0KKwlhZGQJbiwgOCwgbgorCWJyZ3oJbiwgTChydG4pCisJIG5vcAorCitMKGV2bik6CWFkZAl2cDAsIDgsIHZwMQorCWFkZAl1cDAsIDgsIHVwMQorCWFkZAlycDAsIC0yNCwgcnAxCisJbGR4CVt2cDAgKyBuXSwgdjAKKwlsZHgJW3ZwMSArIG5dLCB2MQorCWxkeAlbdXAwICsgbl0sIHUwCisJbGR4CVt1cDEgKyBuXSwgdTEKKwlhZGQJbiwgMTYsIG4KKwlicmd6CW4sIEwoZW5kKQorCSBhZGQJcnAwLCAtMTYsIHJwMAorCitMKHRvcCk6CUxPR09QKAl2MCwgbWFzaywgeDApCisJbGR4CVt2cDAgKyBuXSwgdjAKKwlMT0dPUCgJdjEsIG1hc2ssIHgxKQorCWxkeAlbdnAxICsgbl0sIHYxCisJYWRkeGNjYyh1MCwgeDAsIHcwKQorCWxkeAlbdXAwICsgbl0sIHUwCisJYWRkeGNjYyh1MSwgeDEsIHcxKQorCWxkeAlbdXAxICsgbl0sIHUxCisJc3R4CXcwLCBbcnAwICsgbl0KKwlhZGQJbiwgMTYsIG4KKwlicmxlegluLCBMKHRvcCkKKwkgc3R4CXcxLCBbcnAxICsgbl0KKworTChlbmQpOglMT0dPUCgJdjAsIG1hc2ssIHgwKQorCUxPR09QKAl2MSwgbWFzaywgeDEpCisJYWRkeGNjYyh1MCwgeDAsIHcwKQorCWFkZHhjY2ModTEsIHgxLCB3MSkKKwlzdHgJdzAsIFtycDAgKyBuXQorCXN0eAl3MSwgW3JwMSArIDMyXQorCitMKHJ0bik6CVJFVFZBTAorCXJldAorCSByZXN0b3JlCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvdWx0cmFzcGFyY3QzL2RpdmVfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvdWx0cmFzcGFyY3QzL2RpdmVfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdkYmRmOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDMvZGl2ZV8xLmFzbQpAQCAtMCwwICsxLDEyOSBAQAorZG5sICBTUEFSQyBUMy9UNC9UNSBtcG5fZGl2ZXhhY3RfMS4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgICAgICAgICAgICAgICAgICBjeWNsZXMvbGltYgorQyBVbHRyYVNQQVJDIFQzOgkzMQorQyBVbHRyYVNQQVJDIFQ0L1Q1OgkyMC0yNiAgaGl0cyAyMCBlYXJseSwgdGhlbiBzaGFycGx5IGRyb3BzCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBxcCcsICBgJWkwJykKK2RlZmluZShgYXAnLCAgYCVpMScpCitkZWZpbmUoYG4nLCAgIGAlaTInKQorZGVmaW5lKGBkJywgICBgJWkzJykKKworZGVmaW5lKGBkaW52JyxgJW80JykKKworQVNNX1NUQVJUKCkKKwlSRUdJU1RFUiglZzIsI3NjcmF0Y2gpCisJUkVHSVNURVIoJWczLCNzY3JhdGNoKQorUFJPTE9HVUUobXBuX2RpdmV4YWN0XzEpCisJc2F2ZQklc3AsIC0xNzYsICVzcAorCWNtcAluLCAxCisJYm5lLHB0CSV4Y2MsIEwoZ3QxKQorCSBsZHgJW2FwXSwgJW81CisJdWRpdngJJW81LCBkLCAlZzEKKwlzdHgJJWcxLCBbcXBdCisJcmV0dXJuCSVpNys4CisJIG5vcAorCitMKGd0MSk6CWFkZAlkLCAtMSwgJWcxCisJYW5kbgklZzEsIGQsICVnMQorCXBvcGMJJWcxLCAlaTQJCUMgaTQgPSBjb3VudF90cmFpbGluZ196ZXJvcyhkKQorCisJc3JseAlkLCAlaTQsIGQKKwlzcmx4CWQsIDEsICVnMQorCWFuZAklZzEsIDEyNywgJWcxCisKKwlMRUE2NChiaW52ZXJ0X2xpbWJfdGFibGUsIGcyLCBnNCkKKwlsZHViCVslZzIrJWcxXSwgJWcxCisJYWRkCSVnMSwgJWcxLCAlZzIKKwltdWx4CSVnMSwgJWcxLCAlZzEKKwltdWx4CSVnMSwgZCwgJWcxCisJc3ViCSVnMiwgJWcxLCAlZzIKKwlhZGQJJWcyLCAlZzIsICVnMQorCW11bHgJJWcyLCAlZzIsICVnMgorCW11bHgJJWcyLCBkLCAlZzIKKwlzdWIJJWcxLCAlZzIsICVnMQorCWFkZAklZzEsICVnMSwgJW83CisJbXVseAklZzEsICVnMSwgJWcxCisJbXVseAklZzEsIGQsICVnMQorCWFkZAluLCAtMiwgbgorCWJyeixwdAklaTQsIEwobm9ybSkKKwkgc3ViCSVvNywgJWcxLCBkaW52CisKK0wodW5ub3JtKToKKwltb3YJMCwgJWc0CisJc3ViCSVnMCwgJWk0LCAlbzIKKwlzcmx4CSVvNSwgJWk0LCAlbzUKK0wodG9wX3Vubm9ybSk6CisJbGR4CVthcCs4XSwgJWczCisJYWRkCWFwLCA4LCBhcAorCXNsbHgJJWczLCAlbzIsICVnNQorCW9yCSVnNSwgJW81LCAlZzUKKwlzcmx4CSVnMywgJWk0LCAlbzUKKwlzdWJjYwklZzUsICVnNCwgJWc0CisJbXVseAklZzQsIGRpbnYsICVnMQorCXN0eAklZzEsIFtxcF0KKwlhZGQJcXAsIDgsIHFwCisJdW11bHhoaShkLCAlZzEsICVnMSkKKwlhZGR4YygJJWcxLCAlZzAsICVnNCkKKwlicmd6LHB0CW4sIEwodG9wX3Vubm9ybSkKKwkgYWRkCW4sIC0xLCBuCisKKwlzdWIJJW81LCAlZzQsICVnNAorCW11bHgJJWc0LCBkaW52LCAlZzEKKwlzdHgJJWcxLCBbcXBdCisJcmV0dXJuCSVpNys4CisJIG5vcAorCitMKG5vcm0pOgorCW11bHgJZGludiwgJW81LCAlZzEKKwlzdHgJJWcxLCBbcXBdCisJYWRkCXFwLCA4LCBxcAorCWFkZGNjCSVnMCwgMCwgJWc0CitMKHRvcF9ub3JtKToKKwl1bXVseGhpKGQsICVnMSwgJWcxKQorCWxkeAlbYXArOF0sICVnNQorCWFkZAlhcCwgOCwgYXAKKwlhZGR4YygJJWcxLCAlZzAsICVnMSkKKwlzdWJjYwklZzUsICVnMSwgJWcxCisJbXVseAklZzEsIGRpbnYsICVnMQorCXN0eAklZzEsIFtxcF0KKwlhZGQJcXAsIDgsIHFwCisJYnJneixwdAluLCBMKHRvcF9ub3JtKQorCSBhZGQJbiwgLTEsIG4KKworCXJldHVybgklaTcrOAorCSBub3AKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDMvaGFtZGlzdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvdWx0cmFzcGFyY3QzL2hhbWRpc3QuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZWQ4YmYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvdWx0cmFzcGFyY3QzL2hhbWRpc3QuYXNtCkBAIC0wLDAgKzEsNzggQEAKK2RubCAgU1BBUkMgdjkgbXBuX2hhbWRpc3QgZm9yIFQzL1Q0LgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBEYXZpZCBNaWxsZXIuCisKK2RubCAgQ29weXJpZ2h0IDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkJICAgY3ljbGVzL2xpbWIKK0MgVWx0cmFTUEFSQyBUMzoJMTgKK0MgVWx0cmFTUEFSQyBUNDoJIDMuNQorCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgdXAnLCAgIGAlbzAnKQorZGVmaW5lKGB2cCcsICAgYCVvMScpCitkZWZpbmUoYG4nLCAgICBgJW8yJykKK2RlZmluZShgcGNudCcsIGAlbzUnKQorCitBU01fU1RBUlQoKQorCVJFR0lTVEVSKCVnMiwjc2NyYXRjaCkKKwlSRUdJU1RFUiglZzMsI3NjcmF0Y2gpCitQUk9MT0dVRShtcG5faGFtZGlzdCkKKwlzdWJjYwluLCAxLCBuCisJYmUJTChmaW5hbF9vbmUpCisJIGNscglwY250CitMKHRvcCk6CisJbGR4CVt1cCArIDBdLCAlZzEKKwlsZHgJW3ZwICsgMF0sICVnMgorCWxkeAlbdXAgKyA4XSwgJW80CisJbGR4CVt2cCArIDhdLCAlZzMKKwlzdWIJbiwgMiwgbgorCXhvcgklZzEsICVnMiwgJWcxCisJYWRkCXVwLCAxNiwgdXAKKwlwb3BjCSVnMSwgJWcyCisJYWRkCXZwLCAxNiwgdnAKKwl4b3IJJW80LCAlZzMsICVvNAorCWFkZAlwY250LCAlZzIsIHBjbnQKKwlwb3BjCSVvNCwgJWczCisJYnJnegluLCBMKHRvcCkKKwkgYWRkCXBjbnQsICVnMywgcGNudAorCWJybHoscHQJbiwgTChkb25lKQorCSBub3AKK0woZmluYWxfb25lKToKKwlsZHgJW3VwICsgMF0sICVnMQorCWxkeAlbdnAgKyAwXSwgJWcyCisJeG9yCSVnMSwlZzIsICVnMQorCXBvcGMJJWcxLCAlZzIKKwlhZGQJcGNudCwgJWcyLCBwY250CitMKGRvbmUpOgorCXJldGwKKwkgbW92CXBjbnQsICVvMAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmN0My9pbnZlcnRfbGltYi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvdWx0cmFzcGFyY3QzL2ludmVydF9saW1iLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGE0OWNmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmN0My9pbnZlcnRfbGltYi5hc20KQEAgLTAsMCArMSw5MiBAQAorZG5sICBTUEFSQyBUMy9UNC9UNSBtcG5faW52ZXJ0X2xpbWIuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqw7ZybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgVWx0cmFTUEFSQyBUMzoJID8KK0MgVWx0cmFTUEFSQyBUNC9UNToJID8KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYGQnLCAgYCVvMCcpCisKK0FTTV9TVEFSVCgpCisJUkVHSVNURVIoJWcyLCNzY3JhdGNoKQorCVJFR0lTVEVSKCVnMywjc2NyYXRjaCkKK1BST0xPR1VFKG1wbl9pbnZlcnRfbGltYikKKwlzcmx4CWQsIDU0LCAlZzEKKwlMRUE2NChhcHByb3hfdGFiLCBnMiwgZzMpCisJYW5kCSVnMSwgMHgxZmUsICVnMQorCXNybHgJZCwgMjQsICVnNAorCWxkdWgJWyVnMislZzFdLCAlZzMKKwlhZGQJJWc0LCAxLCAlZzQKKwlzbGx4CSVnMywgMTEsICVnMgorCWFkZAklZzIsIC0xLCAlZzIKKwltdWx4CSVnMywgJWczLCAlZzMKKwltdWx4CSVnMywgJWc0LCAlZzMKKwlzcmx4CSVnMywgNDAsICVnMworCXN1YgklZzIsICVnMywgJWcyCisJc2xseAklZzIsIDYwLCAlZzEKKwltdWx4CSVnMiwgJWcyLCAlZzMKKwltdWx4CSVnMywgJWc0LCAlZzQKKwlzdWIJJWcxLCAlZzQsICVnMQorCXNybHgJJWcxLCA0NywgJWcxCisJc2xseAklZzIsIDEzLCAlZzIKKwlhZGQJJWcxLCAlZzIsICVnMQorCWFuZAlkLCAxLCAlZzIKKwlzcmx4CSVnMSwgMSwgJWc0CisJc3ViCSVnMCwgJWcyLCAlZzMKKwlhbmQJJWc0LCAlZzMsICVnMworCXNybHgJZCwgMSwgJWc0CisJYWRkCSVnNCwgJWcyLCAlZzIKKwltdWx4CSVnMSwgJWcyLCAlZzIKKwlzdWIJJWczLCAlZzIsICVnMgorCXVtdWx4aGkoJWcxLCAlZzIsICVnMikKKwlzcmx4CSVnMiwgMSwgJWcyCisJc2xseAklZzEsIDMxLCAlZzEKKwlhZGQJJWcyLCAlZzEsICVnMQorCW11bHgJJWcxLCBkLCAlZzMKKwl1bXVseGhpKGQsICVnMSwgJWc0KQorCWFkZGNjCSVnMywgZCwgJWcwCisJYWRkeGMoCSVnNCwgZCwgJW8wKQorCWptcAklbzcrOAorCSBzdWIJJWcxLCAlbzAsICVvMAorRVBJTE9HVUUoKQorCisJUk9EQVRBCisJQUxJR04oMikKKwlUWVBFKAlhcHByb3hfdGFiLCBvYmplY3QpCisJU0laRSgJYXBwcm94X3RhYiwgNTEyKQorYXBwcm94X3RhYjoKK2Zvcmxvb3AoaSwyNTYsNTEyLTEsZG5sCitgCS5oYWxmCWV2YWwoMHg3ZmQwMC9pKQorJylkbmwKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDMvbWlzc2luZy5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvdWx0cmFzcGFyY3QzL21pc3NpbmcuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3OTAzMmQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvdWx0cmFzcGFyY3QzL21pc3NpbmcuYXNtCkBAIC0wLDAgKzEsNzcgQEAKK2RubCAgU1BBUkMgdjktMjAxMSBzaW11bGF0aW9uIHN1cHBvcnQuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqw7ZybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUoX19nbXBuX3VtdWxoKQorCXNhdmUJJXNwLCAtMTc2LCAlc3AKKwlsZHgJWyVzcCsyMDQ3KzE3NisyNTZdLCAlbzAKKwlsZHgJWyVzcCsyMDQ3KzE3NisyNTYrOF0sICVvMQorCXJkCSVjY3IsICVvNAorCXNybAklbzAsIDAsICVsNAorCXNybAklbzEsIDAsICVsMQorCXNybHgJJW8xLCAzMiwgJW8xCisJbXVseAklbzEsICVsNCwgJWwyCisJc3JseAklbzAsIDMyLCAlbzAKKwltdWx4CSVvMCwgJWwxLCAlbDMKKwltdWx4CSVsMSwgJWw0LCAlbDEKKwlzcmx4CSVsMSwgMzIsICVsMQorCWFkZAklbDIsICVsMSwgJWwyCisJYWRkY2MJJWwyLCAlbDMsICVsMgorCW11bHgJJW8xLCAlbzAsICVvMQorCW1vdgkwLCAlbDEKKwltb3ZjcwkleGNjLCAxLCAlbDEKKwlzbGx4CSVsMSwgMzIsICVsMQorCWFkZAklbzEsICVsMSwgJW8xCisJc3JseAklbDIsIDMyLCAlbzAKKwlhZGQJJW8xLCAlbzAsICVvMAorCXN0eAklbzAsIFslc3ArMjA0NysxNzYrMjU2XQorCXdyCSVvNCwgMCwgJWNjcgorCXJldAorCSByZXN0b3JlCitFUElMT0dVRSgpCisKK1BST0xPR1VFKF9fZ21wbl9semNudCkKKwlzYXZlCSVzcCwgLTE3NiwgJXNwCisJbGR4CVslc3ArMjA0NysxNzYrMjU2XSwgJW8wCisJYnJ6LGEJJW8wLCAyZgorCSBtb3YJNjQsICVvMQorCWJybHoJJW8wLCAyZgorCSBtb3YJMCwgJW8xCisxOglzbGx4CSVvMCwgMSwgJW8wCisJYnJnegklbzAsIDFiCisJIGFkZAklbzEsIDEsICVvMQorCXN0eAklbzEsIFslc3ArMjA0NysxNzYrMjU2XQorMjoJcmV0CisJIHJlc3RvcmUKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDMvbWlzc2luZy5tNCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDMvbWlzc2luZy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWQ2ZDhlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmN0My9taXNzaW5nLm00CkBAIC0wLDAgKzEsODggQEAKK2RubCAgU1BBUkMgdjktMjAxMSBzaW11bGF0aW9uIHN1cHBvcnQuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqw7ZybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKK2RubCBVc2FnZSBhZGR4Y2NjKHIxLHIyLHIzLCB0MSkKK2RubCAgNjQtYml0IGFkZCB3aXRoIGNhcnJ5LWluIGFuZCBjYXJyeS1vdXQKK2RubCAgRklYTUU6IFJlZ2lzdGVyIGcyIG11c3Qgbm90IGJlIGRlc3RpbmF0aW9uCisKK2RlZmluZShgYWRkeGNjYycsYGRubAorCWFkZAklc3AsIC01MTIsICVzcAorCXN0eAklZzIsIFslc3ArMjA0NysyNTYrMTZdCisJbW92CTAsICVnMgorCW1vdmNzCSV4Y2MsIC0xLCAlZzIKKwlhZGRjYwklZzIsIDEsICVnMAorCWFkZGNjYwkkMSwgJDIsICQzCisJbGR4CVslc3ArMjA0NysyNTYrMTZdLCAlZzIKKwlzdWIJJXNwLCAtNTEyLCAlc3AKKycpCisKKworZG5sIFVzYWdlIGFkZHhjKHIxLHIyLHIzLCB0MSx0MikKK2RubCAgNjQtYml0IGFkZCB3aXRoIGNhcnJ5LWluCisKK2RlZmluZShgYWRkeGMnLGBkbmwKKwliY2MJJXhjYywgMWYKKwkgYWRkCSQxLCAkMiwgJDMKKwlhZGQJJDMsIDEsICQzCisxOgorJykKKworCitkbmwgVXNhZ2UgdW11bHhoaShyMSxyMixyMykKK2RubCAgNjQtYml0IG11bHRpcGx5IHJldHVybmluZyB1cHBlciA2NCBiaXRzCitkbmwgIENhbGxzIF9fZ21wbl91bXVsaCB1c2luZyBhIG5vbi1zdGFuZGFyZCBjYWxsaW5nIGNvbnZlbnRpb24KKworZGVmaW5lKGB1bXVseGhpJyxgZG5sCisJYWRkCSVzcCwgLTUxMiwgJXNwCisJc3R4CSQxLCBbJXNwKzIwNDcrMjU2XQorCXN0eAkkMiwgWyVzcCsyMDQ3KzI1Nis4XQorCXN0eAklbzcsIFslc3ArMjA0NysyNTYrMTZdCisJY2FsbAlfX2dtcG5fdW11bGgKKwkgbm9wCisJbGR4CVslc3ArMjA0NysyNTYrMTZdLCAlbzcKKwlsZHgJWyVzcCsyMDQ3KzI1Nl0sICQzCisJc3ViCSVzcCwgLTUxMiwgJXNwCisnKQorZG5sIFVzYWdlIGx6Y250KHIxLHIyKQorZG5sICBQbGFpbiBjb3VudCBsZWFkaW5nIHplcm9zCitkbmwgIENhbGxzIF9fZ21wbl9semNudCB1c2luZyBhIG5vbi1zdGFuZGFyZCBjYWxsaW5nIGNvbnZlbnRpb24KKworZGVmaW5lKGBsemNudCcsYGRubAorCWFkZAklc3AsIC01MTIsICVzcAorCXN0eAklbzcsIFslc3ArMjA0NysyNTYrMTZdCisJY2FsbAlfX2dtcG5fbHpjbnQKKwkgc3R4CSQxLCBbJXNwKzIwNDcrMjU2XQorCWxkeAlbJXNwKzIwNDcrMjU2KzE2XSwgJW83CisJbGR4CVslc3ArMjA0NysyNTZdLCAkMgorCXN1Ygklc3AsIC01MTIsICVzcAorJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDMvbW9kXzFfNC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvdWx0cmFzcGFyY3QzL21vZF8xXzQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZmFjYmQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvdWx0cmFzcGFyY3QzL21vZF8xXzQuYXNtCkBAIC0wLDAgKzEsMjMzIEBACitkbmwgIFNQQVJDIFQzL1Q0L1Q1IG1wbl9tb2RfMXNfNHAuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqw7ZybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgVWx0cmFTUEFSQyBUMzoJMzAKK0MgVWx0cmFTUEFSQyBUNC9UNToJIDQKKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYGFwJywgIGAlbzAnKQorZGVmaW5lKGBuJywgICBgJW8xJykKK2RlZmluZShgZCcsICAgYCVvMicpCitkZWZpbmUoYGNwcycsIGAlbzMnKQorCisKK0FTTV9TVEFSVCgpCisJUkVHSVNURVIoJWcyLCNzY3JhdGNoKQorCVJFR0lTVEVSKCVnMywjc2NyYXRjaCkKK1BST0xPR1VFKG1wbl9tb2RfMXNfNHApCisJc2F2ZQklc3AsIC0xNzYsICVzcAorCWxkeAlbJWkzKzE2XSwgJW80CisJbGR4CVslaTMrMjRdLCAlbzMKKwlsZHgJWyVpMyszMl0sICVvMgorCWxkeAlbJWkzKzQwXSwgJW8xCisJbGR4CVslaTMrNDhdLCAlbzAKKworCWFuZAklaTEsIDMsICVnMworCXNsbHgJJWkxLCAzLCAlZzEKKwlhZGQJJWkwLCAlZzEsICVpMAorCWJyegklZzMsIEwoYjAwKQorCSBjbXAJJWczLCAyCisJYmNzCSV4Y2MsIEwoYjAxKQorCSBub3AKKwliZQkleGNjLCBMKGIxMCkKKwkgbm9wCisKK0woYjExKToJbGR4CVslaTAtMTZdLCAlZzIKKwltdWx4CSVnMiwgJW80LCAlZzUKKwl1bXVseGhpKCVnMiwgJW80LCAlZzMpCisJbGR4CVslaTAtMjRdLCAlZzQKKwlhZGRjYwklZzUsICVnNCwgJWc1CisJYWRkeGMoCSVnMywgJWcwLCAlZzQpCisJbGR4CVslaTAtOF0sICVnMgorCW11bHgJJWcyLCAlbzMsICVnMQorCXVtdWx4aGkoJWcyLCAlbzMsICVnMykKKwlhZGRjYwklZzEsICVnNSwgJWcxCisJYWRkeGMoCSVnMywgJWc0LCAlZzIpCisJYmEscHQJJXhjYywgLkw4CisJIGFkZAklaTAsIC0zMiwgJWkwCisKK0woYjAwKToJbGR4CVslaTAtMjRdLCAlZzMKKwltdWx4CSVnMywgJW80LCAlZzIKKwl1bXVseGhpKCVnMywgJW80LCAlZzUpCisJbGR4CVslaTAtMzJdLCAlZzQKKwlhZGRjYwklZzIsICVnNCwgJWcyCisJYWRkeGMoCSVnNSwgJWcwLCAlZzMpCisJbGR4CVslaTAtMTZdLCAlZzQKKwltdWx4CSVnNCwgJW8zLCAlZzUKKwl1bXVseGhpKCVnNCwgJW8zLCAlaTUpCisJYWRkY2MJJWcyLCAlZzUsICVnNQorCWFkZHhjKAklZzMsICVpNSwgJWc0KQorCWxkeAlbJWkwLThdLCAlZzIKKwltdWx4CSVnMiwgJW8yLCAlZzEKKwl1bXVseGhpKCVnMiwgJW8yLCAlZzMpCisJYWRkY2MJJWcxLCAlZzUsICVnMQorCWFkZHhjKAklZzMsICVnNCwgJWcyKQorCWJhLHB0CSV4Y2MsIC5MOAorCSBhZGQJJWkwLCAtNDAsICVpMAorCitMKGIwMSk6CWxkeAlbJWkwLThdLCAlZzEKKwltb3YJMCwgJWcyCisJYmEscHQJJXhjYywgLkw4CisJIGFkZAklaTAsIC0xNiwgJWkwCisKK0woYjEwKToJbGR4CVslaTAtOF0sICVnMgorCWxkeAlbJWkwLTE2XSwgJWcxCisJYWRkCSVpMCwgLTI0LCAlaTAKKworLkw4OglhZGQJJWkxLCAtNSwgJWczCisJYnJseixwbgklZzMsIEwoZW5kKQorCSBub3AKKworTCh0b3ApOglsZHgJWyVpMC0xNl0sICVpNAorCW11bHgJJWk0LCAlbzQsICVvNQorCXVtdWx4aGkoJWk0LCAlbzQsICVpMSkKKwlsZHgJWyVpMC0yNF0sICVpNQorCWFkZGNjCSVvNSwgJWk1LCAlbzUKKwlhZGR4YygJJWkxLCAlZzAsICVpNCkKKwlsZHgJWyVpMC04XSwgJWk1CisJbXVseAklaTUsICVvMywgJW83CisJdW11bHhoaSglaTUsICVvMywgJWkxKQorCWFkZGNjCSVvNSwgJW83LCAlbzcKKwlhZGR4YygJJWk0LCAlaTEsICVpNSkKKwlsZHgJWyVpMCswXSwgJWc0CisJbXVseAklZzQsICVvMiwgJWkxCisJdW11bHhoaSglZzQsICVvMiwgJWk0KQorCWFkZGNjCSVvNywgJWkxLCAlaTEKKwlhZGR4YygJJWk1LCAlaTQsICVnNCkKKwltdWx4CSVnMSwgJW8xLCAlaTUKKwl1bXVseGhpKCVnMSwgJW8xLCAlaTQpCisJYWRkY2MJJWkxLCAlaTUsICVpNQorCWFkZHhjKAklZzQsICVpNCwgJWc1KQorCW11bHgJJWcyLCAlbzAsICVnMQorCXVtdWx4aGkoJWcyLCAlbzAsICVnNCkKKwlhZGRjYwklZzEsICVpNSwgJWcxCisJYWRkeGMoCSVnNCwgJWc1LCAlZzIpCisJYWRkCSVnMywgLTQsICVnMworCWJyZ2V6LHB0ICVnMywgTCh0b3ApCisJIGFkZAklaTAsIC0zMiwgJWkwCisKK0woZW5kKToJbXVseAklZzIsICVvNCwgJWc1CisJdW11bHhoaSglZzIsICVvNCwgJWczKQorCWFkZGNjCSVnMSwgJWc1LCAlZzUKKwlhZGR4YygJJWczLCAlZzAsICVnMikKKwlsZHgJWyVpMys4XSwgJWkwCisJbGR4CVslaTNdLCAlZzQKKwlzdWIJJWcwLCAlaTAsICVpNQorCXNybHgJJWc1LCAlaTUsICVpNQorCXNsbHgJJWcyLCAlaTAsICVnMgorCW9yCSVpNSwgJWcyLCAlZzEKKwltdWx4CSVnMSwgJWc0LCAlbDcKKwl1bXVseGhpKCVnMSwgJWc0LCAlZzMpCisJc2xseAklZzUsICVpMCwgJWcyCisJYWRkCSVnMSwgMSwgJWcxCisJYWRkY2MJJWw3LCAlZzIsICVnNQorCWFkZHhjKAklZzMsICVnMSwgJWcxKQorCW11bHgJJWcxLCAlaTIsICVnMQorCXN1YgklZzIsICVnMSwgJWcyCisJY21wCSVnMiwgJWc1CisJYWRkCSVpMiwgJWcyLCAlZzEKKwltb3ZsdQkleGNjLCAlZzIsICVnMQorCXN1YmNjCSVnMSwgJWkyLCAlZzIKKwltb3ZnZXUJJXhjYywgJWcyLCAlZzEKKwlyZXR1cm4JJWk3KzgKKwkgc3JseAklZzEsICVvMCwgJW8wCitFUElMT0dVRSgpCisKK1BST0xPR1VFKG1wbl9tb2RfMXNfNHBfY3BzKQorCXNhdmUJJXNwLCAtMTc2LCAlc3AKKwlsemNudCgJJWkxLCAlaTUpCisJc2xseAklaTEsICVpNSwgJWkxCisJY2FsbAltcG5faW52ZXJ0X2xpbWIsIDAKKwkgbW92CSVpMSwgJW8wCisJc3R4CSVvMCwgWyVpMF0KKwlzcmEJJWk1LCAwLCAlZzEKKwlzdHgJJWcxLCBbJWkwKzhdCisJc3ViCSVnMCwgJWk1LCAlZzIKKwlzcmx4CSVvMCwgJWcyLCAlZzIKKwltb3YJMSwgJWcxCisJc2xseAklZzEsICVpNSwgJWcxCisJb3IJJWcyLCAlZzEsICVnMgorCXN1YgklZzAsICVpMSwgJWcxCisJbXVseAklZzIsICVnMSwgJWcyCisJc3JseAklZzIsICVpNSwgJWcxCisJc3R4CSVnMSwgWyVpMCsxNl0KKworCXVtdWx4aGkoJW8wLCAlZzIsICVnMykKKwlhZGQJJWcyLCAlZzMsICVnMworCXhub3IJJWcwLCAlZzMsICVnMworCW11bHgJJWczLCAlaTEsICVnMworCW11bHgJJWcyLCAlbzAsICVnMgorCWNtcAklZzIsICVnMworCWFkZAklaTEsICVnMywgJWcxCisJbW92Z2V1CSV4Y2MsICVnMywgJWcxCisJc3JseAklZzEsICVpNSwgJWcyCisJc3R4CSVnMiwgWyVpMCsyNF0KKworCXVtdWx4aGkoJW8wLCAlZzEsICVnMykKKwlhZGQJJWcxLCAlZzMsICVnMworCXhub3IJJWcwLCAlZzMsICVnMworCW11bHgJJWczLCAlaTEsICVnMworCW11bHgJJWcxLCAlbzAsICVnMQorCWNtcAklZzEsICVnMworCWFkZAklaTEsICVnMywgJWcyCisJbW92Z2V1CSV4Y2MsICVnMywgJWcyCisJc3JseAklZzIsICVpNSwgJWcxCisJc3R4CSVnMSwgWyVpMCszMl0KKworCXVtdWx4aGkoJW8wLCAlZzIsICVnMykKKwlhZGQJJWcyLCAlZzMsICVnMworCXhub3IJJWcwLCAlZzMsICVnMworCW11bHgJJWczLCAlaTEsICVnMworCW11bHgJJWcyLCAlbzAsICVnMgorCWNtcAklZzIsICVnMworCWFkZAklaTEsICVnMywgJWcxCisJbW92Z2V1CSV4Y2MsICVnMywgJWcxCisJc3JseAklZzEsICVpNSwgJWcyCisJc3R4CSVnMiwgWyVpMCs0MF0KKworCXVtdWx4aGkoJW8wLCAlZzEsICVnMikKKwlhZGQJJWcxLCAlZzIsICVnMgorCXhub3IJJWcwLCAlZzIsICVnMgorCW11bHgJJWcyLCAlaTEsICVnMgorCW11bHgJJWcxLCAlbzAsICVvMAorCWNtcAklbzAsICVnMgorCWFkZAklaTEsICVnMiwgJWczCisJbW92Z2V1CSV4Y2MsICVnMiwgJWczCisJc3JseAklZzMsICVpNSwgJWk1CisJc3R4CSVpNSwgWyVpMCs0OF0KKworCXJldHVybgklaTcrOAorCSBub3AKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDMvbW9kXzM0bHN1YjEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmN0My9tb2RfMzRsc3ViMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc0NDI4MAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDMvbW9kXzM0bHN1YjEuYXNtCkBAIC0wLDAgKzEsMTE3IEBACitkbmwgIFNQQVJDIHY5IG1wbl9tb2RfMzRsc3ViMSBmb3IgVDMvVDQvVDUuCisKK2RubCAgQ29weXJpZ2h0IDIwMDUsIDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkJICAgIGN5Y2xlcy9saW1iCitDIFVsdHJhU1BBUkMgVDE6CSAtCitDIFVsdHJhU1BBUkMgVDM6CSA1CitDIFVsdHJhU1BBUkMgVDQ6CSAxLjU3CisKK0MgVGhpcyBpcyBiYXNlZCBvbiB0aGUgcG93ZXJwYzY0L21vZGU2NCBjb2RlLgorCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgdXAnLCBgJWkwJykKK2RlZmluZShgbicsICBgJWkxJykKKworQVNNX1NUQVJUKCkKKwlSRUdJU1RFUiglZzIsI3NjcmF0Y2gpCisJUkVHSVNURVIoJWczLCNzY3JhdGNoKQorUFJPTE9HVUUobXBuX21vZF8zNGxzdWIxKQorCXNhdmUJJXNwLCAtMTc2LCAlc3AKKworCW1vdgkwLCAlZzEKKwltb3YJMCwgJWczCisJbW92CTAsICVnNAorCWFkZGNjCSVnMCwgMCwgJWc1CisKKwlhZGQJbiwgLTMsIG4KKwlicmx6CW4sIEwobHQzKQorCSBub3AKKworCWFkZAluLCAtMywgbgorCWxkeAlbdXArMF0sICVsNQorCWxkeAlbdXArOF0sICVsNgorCWxkeAlbdXArMTZdLCAlbDcKKwlicmx6CW4sIEwoZW5kKQorCSBhZGQJdXAsIDI0LCB1cAorCisJQUxJR04oMTYpCitMKHRvcCk6CWFkZHhjY2MoJWcxLCAlbDUsICVnMSkKKwlsZHgJW3VwKzBdLCAlbDUKKwlhZGR4Y2NjKCVnMywgJWw2LCAlZzMpCisJbGR4CVt1cCs4XSwgJWw2CisJYWRkeGNjYyglZzQsICVsNywgJWc0KQorCWxkeAlbdXArMTZdLCAlbDcKKwlhZGQJbiwgLTMsIG4KKwlicmdlegluLCBMKHRvcCkKKwkgYWRkCXVwLCAyNCwgdXAKKworTChlbmQpOglhZGR4Y2NjKAklZzEsICVsNSwgJWcxKQorCWFkZHhjY2MoJWczLCAlbDYsICVnMykKKwlhZGR4Y2NjKCVnNCwgJWw3LCAlZzQpCisJYWRkeGMoCSVnNSwgJWcwLCAlZzUpCisKK0wobHQzKToJY21wCW4sIC0yCisJYmx0CUwoMikKKwkgbm9wCisKKwlsZHgJW3VwKzBdLCAlbDUKKwltb3YJMCwgJWw2CisJYmVxCUwoMSkKKwkgYWRkY2MJJWcxLCAlbDUsICVnMQorCisJbGR4CVt1cCs4XSwgJWw2CitMKDEpOglhZGR4Y2NjKCVnMywgJWw2LCAlZzMpCisJYWRkeGNjYyglZzQsICVnMCwgJWc0KQorCWFkZHhjKAklZzUsICVnMCwgJWc1KQorCitMKDIpOglzbGx4CSVnMSwgMTYsICVsMAorCXNybHgJJWwwLCAxNiwgJWwwCQlDICVsMCA9ICVnMSBtb2QgMl40OAorCXNybHgJJWcxLCA0OCwgJWwzCQlDICVsMyA9ICVnMSBkaXYgMl40OAorCXNybAklZzMsIDAsICVnMQorCXNsbHgJJWcxLCAxNiwgJWw0CQlDICVsNCA9ICglZzMgbW9kIDJeMzIpIDw8IDE2CisJc3JseAklZzMsIDMyLCAlbDUJCUMgJWw1ID0gJWczIGRpdiAyXjMyCisJc2V0aGkJJWhpKDB4ZmZmZjAwMDApLCAlZzEKKwlhbmRuCSVnNCwgJWcxLCAlZzEKKwlzbGx4CSVnMSwgMzIsICVsNgkJQyAlbDYgPSAoJWc0IG1vZCAyXjE2KSA8PCAzMgorCXNybHgJJWc0LCAxNiwgJWw3CQlDICVsNyA9ICVnNCBkaXYgMl4xNgorCisJYWRkCSVsMCwgJWwzLCAlbDAKKwlhZGQJJWw0LCAlbDUsICVsNAorCWFkZAklbDYsICVsNywgJWw2CisKKwlhZGQJJWwwLCAlbDQsICVsMAorCWFkZAklbDYsICVnNSwgJWw2CisKKwlhZGQJJWwwLCAlbDYsICVpMAorCXJldAorCSByZXN0b3JlCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvdWx0cmFzcGFyY3QzL21vZGUxby5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvdWx0cmFzcGFyY3QzL21vZGUxby5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk0ZTFkMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDMvbW9kZTFvLmFzbQpAQCAtMCwwICsxLDgyIEBACitkbmwgIFNQQVJDIFQzL1Q0L1Q1IG1wbl9tb2RleGFjdF8xY19vZGQuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqw7ZybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgVWx0cmFTUEFSQyBUMzoJMzAKK0MgVWx0cmFTUEFSQyBUNC9UNToJMjYKKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYGFwJywgIGAlbzAnKQorZGVmaW5lKGBuJywgICBgJW8xJykKK2RlZmluZShgZCcsICAgYCVvMicpCitkZWZpbmUoYGN5JywgIGAlbzMnKQorCitkZWZpbmUoYGRpbnYnLGAlbzUnKQorZGVmaW5lKGBhMCcsICBgJWcxJykKKworQVNNX1NUQVJUKCkKKwlSRUdJU1RFUiglZzIsI3NjcmF0Y2gpCisJUkVHSVNURVIoJWczLCNzY3JhdGNoKQorUFJPTE9HVUUobXBuX21vZGV4YWN0XzFjX29kZCkKKwlzcmx4CWQsIDEsICVnMQorCWFuZAklZzEsIDEyNywgJWcxCisKKwlMRUE2NChiaW52ZXJ0X2xpbWJfdGFibGUsIGcyLCBnNCkKKwlsZHViCVslZzIrJWcxXSwgJWcxCisJYWRkCSVnMSwgJWcxLCAlZzIKKwltdWx4CSVnMSwgJWcxLCAlZzEKKwltdWx4CSVnMSwgZCwgJWcxCisJc3ViCSVnMiwgJWcxLCAlZzIKKwlhZGQJJWcyLCAlZzIsICVnMQorCW11bHgJJWcyLCAlZzIsICVnMgorCW11bHgJJWcyLCBkLCAlZzIKKwlzdWIJJWcxLCAlZzIsICVnMQorCWFkZAklZzEsICVnMSwgJW81CisJbXVseAklZzEsICVnMSwgJWcxCisJbXVseAklZzEsIGQsICVnMQorCXN1YgklbzUsICVnMSwgZGludgorCWFkZAluLCAtMSwgbgorCitMKHRvcCk6CWxkeAlbYXBdLCBhMAorCWFkZAlhcCwgOCwgYXAKKwlzdWJjYwlhMCwgY3ksICVnMworCW11bHgJJWczLCBkaW52LCAlZzUKKwl1bXVseGhpKGQsICVnNSwgJWc1KQorCWFkZHhjKAklZzUsICVnMCwgY3kpCisJYnJueixwdAluLCBMKHRvcCkKKwkgYWRkCW4sIC0xLCBuCisKKwlyZXRsCisJIG1vdgljeSwgJW8wCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvdWx0cmFzcGFyY3QzL211bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDMvbXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMDVkNjIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvdWx0cmFzcGFyY3QzL211bF8xLmFzbQpAQCAtMCwwICsxLDE3NCBAQAorZG5sICBTUEFSQyB2OSBtcG5fbXVsXzEgZm9yIFQzL1Q0L1Q1LgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBEYXZpZCBNaWxsZXIgYW5kIFRvcmJqw7ZybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCQkgICBjeWNsZXMvbGltYgorQyBVbHRyYVNQQVJDIFQzOgkyMworQyBVbHRyYVNQQVJDIFQ0OgkgMworCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLCBgJWkwJykKK2RlZmluZShgdXAnLCBgJWkxJykKK2RlZmluZShgbicsICBgJWkyJykKK2RlZmluZShgdjAnLCBgJWkzJykKKworQVNNX1NUQVJUKCkKKwlSRUdJU1RFUiglZzIsI3NjcmF0Y2gpCisJUkVHSVNURVIoJWczLCNzY3JhdGNoKQorUFJPTE9HVUUobXBuX211bF8xKQorCXNhdmUJJXNwLCAtMTc2LCAlc3AKKworCWFuZAluLCAzLCAlZzUKKwlhZGQJbiwgLTQsIG4KKwlicnoJJWc1LCBMKGIwKQorCSBjbXAJJWc1LCAyCisJYmNzCSV4Y2MsIEwoYjEpCisJIG5vcAorCWJlCSV4Y2MsIEwoYjIpCisJIG5vcAorCitMKGIzKToJYWRkY2MJJWcwLCAlZzAsICVpNQorCWxkeAlbdXArMF0sICVsMAorCWxkeAlbdXArOF0sICVsMQorCWxkeAlbdXArMTZdLCAlbDIKKwltdWx4CSVsMCwgdjAsICVvMAorCXVtdWx4aGkoJWwwLCB2MCwgJW8xKQorCWJyZ3oJbiwgTChndDMpCisJIGFkZAlycCwgLTgsIHJwCisJbXVseAklbDEsIHYwLCAlbzIKKwl1bXVseGhpKCVsMSwgdjAsICVvMykKKwliCUwod2QzKQorCSBub3AKK0woZ3QzKToJbGR4CVt1cCsyNF0sICVsMworCW11bHgJJWwxLCB2MCwgJW8yCisJdW11bHhoaSglbDEsIHYwLCAlbzMpCisJYWRkCXVwLCAyNCwgdXAKKwliCUwobG8zKQorCSBhZGQJbiwgLTMsIG4KKworTChiMik6CWFkZGNjCSVnMCwgJWcwLCAlbzEKKwlsZHgJW3VwKzBdLCAlbDEKKwlsZHgJW3VwKzhdLCAlbDIKKwlicmd6CW4sIEwoZ3QyKQorCSBhZGQJcnAsIC0xNiwgcnAKKwltdWx4CSVsMSwgdjAsICVvMgorCXVtdWx4aGkoJWwxLCB2MCwgJW8zKQorCW11bHgJJWwyLCB2MCwgJW80CisJdW11bHhoaSglbDIsIHYwLCAlbzUpCisJYglMKHdkMikKKwkgbm9wCitMKGd0Mik6CWxkeAlbdXArMTZdLCAlbDMKKwltdWx4CSVsMSwgdjAsICVvMgorCXVtdWx4aGkoJWwxLCB2MCwgJW8zKQorCWxkeAlbdXArMjRdLCAlbDAKKwltdWx4CSVsMiwgdjAsICVvNAorCXVtdWx4aGkoJWwyLCB2MCwgJW81KQorCWFkZAl1cCwgMTYsIHVwCisJYglMKGxvMikKKwkgYWRkCW4sIC0yLCBuCisKK0woYjEpOglhZGRjYwklZzAsICVnMCwgJW8zCisJbGR4CVt1cCswXSwgJWwyCisJYnJnegluLCBMKGd0MSkKKwlub3AKKwltdWx4CSVsMiwgdjAsICVvNAorCXN0eAklbzQsIFtycCswXQorCXVtdWx4aGkoJWwyLCB2MCwgJWkwKQorCXJldAorCSByZXN0b3JlCitMKGd0MSk6CWxkeAlbdXArOF0sICVsMworCWxkeAlbdXArMTZdLCAlbDAKKwltdWx4CSVsMiwgdjAsICVvNAorCXVtdWx4aGkoJWwyLCB2MCwgJW81KQorCWxkeAlbdXArMjRdLCAlbDEKKwltdWx4CSVsMywgdjAsICVpNAorCXVtdWx4aGkoJWwzLCB2MCwgJWk1KQorCWFkZAlycCwgLTI0LCBycAorCWFkZAl1cCwgOCwgdXAKKwliCUwobG8xKQorCSBhZGQJbiwgLTEsIG4KKworTChiMCk6CWFkZGNjCSVnMCwgJWcwLCAlbzUKKwlsZHgJW3VwKzBdLCAlbDMKKwlsZHgJW3VwKzhdLCAlbDAKKwlsZHgJW3VwKzE2XSwgJWwxCisJbXVseAklbDMsIHYwLCAlaTQKKwl1bXVseGhpKCVsMywgdjAsICVpNSkKKwlsZHgJW3VwKzI0XSwgJWwyCisJbXVseAklbDAsIHYwLCAlbzAKKwl1bXVseGhpKCVsMCwgdjAsICVvMSkKKwliCUwobG8wKQorCSBub3AKKworCUFMSUdOKDE2KQorTCh0b3ApOglsZHgJW3VwKzBdLCAlbDMJQyAwCisJYWRkeGNjYyglaTQsICVvNSwgJWk0KQlDIDAKKwltdWx4CSVsMSwgdjAsICVvMglDIDEKKwlzdHgJJWk0LCBbcnArMF0JQyAxCisJdW11bHhoaSglbDEsIHYwLCAlbzMpCUMgMgorTChsbzMpOglsZHgJW3VwKzhdLCAlbDAJQyAyCisJYWRkeGNjYyglbzAsICVpNSwgJW8wKQlDIDMKKwltdWx4CSVsMiwgdjAsICVvNAlDIDMKKwlzdHgJJW8wLCBbcnArOF0JQyA0CisJdW11bHhoaSglbDIsIHYwLCAlbzUpCUMgNAorTChsbzIpOglsZHgJW3VwKzE2XSwgJWwxCUMgNQorCWFkZHhjY2MoJW8yLCAlbzEsICVvMikJQyA1CisJbXVseAklbDMsIHYwLCAlaTQJQyA2CisJc3R4CSVvMiwgW3JwKzE2XQlDIDYKKwl1bXVseGhpKCVsMywgdjAsICVpNSkJQyA3CitMKGxvMSk6CWxkeAlbdXArMjRdLCAlbDIJQyA3CisJYWRkeGNjYyglbzQsICVvMywgJW80KQlDIDgKKwltdWx4CSVsMCwgdjAsICVvMAlDIDgKKwlzdHgJJW80LCBbcnArMjRdCUMgOQorCXVtdWx4aGkoJWwwLCB2MCwgJW8xKQlDIDkKKwlhZGQJcnAsIDMyLCBycAlDIDEwCitMKGxvMCk6CWFkZAl1cCwgMzIsIHVwCUMgMTAKKwlicmd6CW4sIEwodG9wKQlDIDExCisJIGFkZAluLCAtNCwgbglDIDExCisKK0woZW5kKToJYWRkeGNjYyglaTQsICVvNSwgJWk0KQorCW11bHgJJWwxLCB2MCwgJW8yCisJc3R4CSVpNCwgW3JwKzBdCisJdW11bHhoaSglbDEsIHYwLCAlbzMpCisJYWRkeGNjYyglbzAsICVpNSwgJW8wKQorTCh3ZDMpOgltdWx4CSVsMiwgdjAsICVvNAorCXN0eAklbzAsIFtycCs4XQorCXVtdWx4aGkoJWwyLCB2MCwgJW81KQorCWFkZHhjY2MoJW8yLCAlbzEsICVvMikKK0wod2QyKToJc3R4CSVvMiwgW3JwKzE2XQorCWFkZHhjY2MoJW80LCAlbzMsICVvNCkKKwlzdHgJJW80LCBbcnArMjRdCisJYWRkeGMoCSVnMCwgJW81LCAlaTApCisJcmV0CisJIHJlc3RvcmUKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDMvcG9wY291bnQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmN0My9wb3Bjb3VudC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU4MGYzYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDMvcG9wY291bnQuYXNtCkBAIC0wLDAgKzEsNzAgQEAKK2RubCAgU1BBUkMgdjkgbXBuX3BvcGNvdW50IGZvciBUMy9UNC4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgRGF2aWQgTWlsbGVyLgorCitkbmwgIENvcHlyaWdodCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJCSAgIGN5Y2xlcy9saW1iCitDIFVsdHJhU1BBUkMgVDM6CTE1CitDIFVsdHJhU1BBUkMgVDQ6CSAyLjUKKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHVwJywgICBgJW8wJykKK2RlZmluZShgbicsICAgIGAlbzEnKQorZGVmaW5lKGBwY250JywgYCVvNScpCisKK0FTTV9TVEFSVCgpCisJUkVHSVNURVIoJWcyLCNzY3JhdGNoKQorCVJFR0lTVEVSKCVnMywjc2NyYXRjaCkKK1BST0xPR1VFKG1wbl9wb3Bjb3VudCkKKwlzdWJjYwluLCAxLCBuCisJYmUJTChmaW5hbF9vbmUpCisJIGNscglwY250CitMKHRvcCk6CisJbGR4CVt1cCArIDBdLCAlZzEKKwlzdWIJbiwgMiwgbgorCWxkeAlbdXAgKyA4XSwgJW80CisJYWRkCXVwLCAxNiwgdXAKKwlwb3BjCSVnMSwgJWcyCisJcG9wYwklbzQsICVnMworCWFkZAlwY250LCAlZzIsIHBjbnQKKwlicmd6CW4sIEwodG9wKQorCSBhZGQJcGNudCwgJWczLCBwY250CisJYnJseixwdAluLCBMKGRvbmUpCisJIG5vcAorTChmaW5hbF9vbmUpOgorCWxkeAlbdXAgKyAwXSwgJWcxCisJcG9wYwklZzEsICVnMgorCWFkZAlwY250LCAlZzIsIHBjbnQKK0woZG9uZSk6CisJcmV0bAorCSBtb3YJcGNudCwgJW8wCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvdWx0cmFzcGFyY3QzL3Nxcl9kaWFnX2FkZGxzaDEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmN0My9zcXJfZGlhZ19hZGRsc2gxLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDY0OTlmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmN0My9zcXJfZGlhZ19hZGRsc2gxLmFzbQpAQCAtMCwwICsxLDkzIEBACitkbmwgIFNQQVJDIHY5IG1wbl9zcXJfZGlhZ19hZGRsc2gxIGZvciBUMy9UNC9UNS4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJCSAgIGN5Y2xlcy9saW1iCitDIFVsdHJhU1BBUkMgVDM6CT8KK0MgVWx0cmFTUEFSQyBUNDoJPj0gNC41CisKKworZGVmaW5lKGBycCcsIGAlaTAnKQorZGVmaW5lKGB0cCcsIGAlaTEnKQorZGVmaW5lKGB1cCcsIGAlaTInKQorZGVmaW5lKGBuJywgIGAlaTMnKQorCitBU01fU1RBUlQoKQorCVJFR0lTVEVSKCVnMiwjc2NyYXRjaCkKKwlSRUdJU1RFUiglZzMsI3NjcmF0Y2gpCitQUk9MT0dVRShtcG5fc3FyX2RpYWdfYWRkbHNoMSkKKwlzYXZlCSVzcCwgLTE3NiwgJXNwCisKKwlsZHgJW3VwKzBdLCAlZzEKKwltdWx4CSVnMSwgJWcxLCAlbzAKKwl1bXVseGhpKCVnMSwgJWcxLCAlZzIpCisJc3R4CSVvMCwgW3JwKzBdCisKKwlsZHgJW3VwKzhdLCAlZzEKKwlsZHgJW3RwKzBdLCAlZzQKKwlsZHgJW3RwKzhdLCAlZzUKKwltdWx4CSVnMSwgJWcxLCAlbzAKKwlvcmNjCSVnMCwgJWcwLCAlbzUKKwliCUwoZG0pCisJIGFkZAluLCAtMiwgbgorCisJQUxJR04oMTYpCitMKHRvcCk6CWxkeAlbdXArOF0sICVnMQorCWFkZGNjCSVnNCwgJW8yLCAlbzIKKwlhZGR4Y2NjKCVnNSwgJW8wLCAlZzMpCisJbGR4CVt0cCsxNl0sICVnNAorCWxkeAlbdHArMjRdLCAlZzUKKwltdWx4CSVnMSwgJWcxLCAlbzAKKwlzdHgJJW8yLCBbcnArOF0KKwlzdHgJJWczLCBbcnArMTZdCisJYWRkCXJwLCAxNiwgcnAKKwlhZGQJdHAsIDE2LCB0cAorTChkbSk6CWFkZAklZzIsICVvNSwgJW8yCisJdW11bHhoaSglZzEsICVnMSwgJWcyKQorCWFkZHhjY2MoJWc0LCAlZzQsICVnNCkKKwlhZGR4Y2NjKCVnNSwgJWc1LCAlZzUpCisJYWRkCXVwLCA4LCB1cAorCWFkZHhjKAklZzAsICVnMCwgJW81KQorCWJybnoJbiwgTCh0b3ApCisJIGFkZAluLCAtMSwgbgorCisJYWRkY2MJJW8yLCAlZzQsICVnNAorCWFkZHhjY2MoJW8wLCAlZzUsICVnNSkKKwlzdHgJJWc0LCBbcnArOF0KKwlzdHgJJWc1LCBbcnArMTZdCisJYWRkeGMoCSVvNSwgJWcyLCAlZzIpCisJc3R4CSVnMiwgW3JwKzI0XQorCisJcmV0CisJIHJlc3RvcmUKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDMvc3ViX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmN0My9zdWJfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU0YmM5MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDMvc3ViX24uYXNtCkBAIC0wLDAgKzEsMTQ0IEBACitkbmwgIFNQQVJDIHY5IG1wbl9zdWJfbiBmb3IgVDMvVDQuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IERhdmlkIE1pbGxlci4KKworZG5sICBDb3B5cmlnaHQgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCQkgICBjeWNsZXMvbGltYgorQyBVbHRyYVNQQVJDIFQzOgkgOAorQyBVbHRyYVNQQVJDIFQ0OgkgMworCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLCBgJWkwJykKK2RlZmluZShgdXAnLCBgJWkxJykKK2RlZmluZShgdnAnLCBgJWkyJykKK2RlZmluZShgbicsICBgJWkzJykKK2RlZmluZShgY3knLCBgJWk0JykKKworZGVmaW5lKGB1MF9vZmYnLCBgJWwwJykKK2RlZmluZShgdTFfb2ZmJywgYCVsMScpCitkZWZpbmUoYHYwX29mZicsIGAlbDInKQorZGVmaW5lKGB2MV9vZmYnLCBgJWwzJykKK2RlZmluZShgcjBfb2ZmJywgYCVsNCcpCitkZWZpbmUoYHIxX29mZicsIGAlbDUnKQorZGVmaW5lKGBsb29wX24nLCBgJWw2JykKK2RlZmluZShgdG1wJywgYCVsNycpCisKK0FTTV9TVEFSVCgpCisJUkVHSVNURVIoJWcyLCNzY3JhdGNoKQorCVJFR0lTVEVSKCVnMywjc2NyYXRjaCkKK1BST0xPR1VFKG1wbl9zdWJfbmMpCisJc2F2ZQklc3AsIC0xNzYsICVzcAorCWJhLHB0CSV4Y2MsIEwoZW50KQorCSB4b3IJY3ksIDEsIGN5CitFUElMT0dVRSgpCitQUk9MT0dVRShtcG5fc3ViX24pCisJc2F2ZQklc3AsIC0xNzYsICVzcAorCW1vdgkxLCBjeQorTChlbnQpOgorCXN1YmNjCW4sIDEsIG4KKwliZQlMKGZpbmFsX29uZSkKKwkgY21wCSVnMCwgY3kKKworCWxkeAlbdXAgKyAwXSwgJW80CisJc2xseAluLCAzLCB0bXAKKworCWxkeAlbdnAgKyAwXSwgJW81CisJYWRkCXVwLCB0bXAsIHUwX29mZgorCisJbGR4CVt1cCArIDhdLCAlZzUKKwlhZGQJdnAsIHRtcCwgdjBfb2ZmCisKKwlsZHgJW3ZwICsgOF0sICVnMQorCWFkZAlycCwgdG1wLCByMF9vZmYKKworCW5lZwl0bXAsIGxvb3BfbgorCWFkZAl1MF9vZmYsIDgsIHUxX29mZgorCisJYWRkCXYwX29mZiwgOCwgdjFfb2ZmCisJc3ViCWxvb3BfbiwgLSgyICogOCksIGxvb3BfbgorCisJc3ViCXIwX29mZiwgMTYsIHIwX29mZgorCWJyZ2V6LHBuIGxvb3BfbiwgTChsb29wX3RhaWwpCisJIHN1YglyMF9vZmYsIDgsIHIxX29mZgorCisJYixhCUwodG9wKQorCUFMSUdOKDE2KQorTCh0b3ApOgorCXhub3IJJW81LCAwLCB0bXAKKwlsZHgJW2xvb3BfbiArIHYwX29mZl0sICVvNQorCisJYWRkeGNjYyglbzQsIHRtcCwgJWczKQorCWxkeAlbbG9vcF9uICsgdTBfb2ZmXSwgJW80CisKKwl4bm9yCSVnMSwgMCwgJWcxCisJc3R4CSVnMywgW2xvb3BfbiArIHIwX29mZl0KKworCWFkZHhjY2MoJWc1LCAlZzEsIHRtcCkKKwlsZHgJW2xvb3BfbiArIHYxX29mZl0sICVnMQorCisJbGR4CVtsb29wX24gKyB1MV9vZmZdLCAlZzUKKwlzdWIJbG9vcF9uLCAtKDIgKiA4KSwgbG9vcF9uCisKKwlicmx6CWxvb3BfbiwgTCh0b3ApCisJIHN0eAl0bXAsIFtsb29wX24gKyByMV9vZmZdCisKK0wobG9vcF90YWlsKToKKwl4bm9yCSVvNSwgMCwgdG1wCisJeG5vcgklZzEsIDAsICVnMQorCisJYWRkeGNjYyglbzQsIHRtcCwgJWczKQorCWFkZAlsb29wX24sIHUwX29mZiwgdXAKKworCWFkZHhjY2MoJWc1LCAlZzEsICVnNSkKKwlhZGQJbG9vcF9uLCByMF9vZmYsIHJwCisKKwlzdHgJJWczLCBbcnAgKyAwXQorCWFkZAlsb29wX24sIHYwX29mZiwgdnAKKworCWJyZ3oscHQJbG9vcF9uLCBMKGRvbmUpCisJIHN0eAklZzUsIFtycCArIDhdCisKKwlhZGQJcnAsICgyICogOCksIHJwCisKK0woZmluYWxfb25lKToKKwlsZHgJW3VwKzBdLCAlbzQKKwlsZHgJW3ZwKzBdLCAlbzUKKwl4bm9yCSVvNSwgJWcwLCAlbzUKKwlhZGR4Y2NjKCVvNCwgJW81LCAlZzMpCisJc3R4CSVnMywgW3JwKzBdCisKK0woZG9uZSk6CisJY2xyCSVpMAorCW1vdmNjCSV4Y2MsIDEsICVpMAorCXJldAorCSByZXN0b3JlCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvdWx0cmFzcGFyY3QzL3N1Ym11bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vc3BhcmM2NC91bHRyYXNwYXJjdDMvc3VibXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MzVkMWIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvdWx0cmFzcGFyY3QzL3N1Ym11bF8xLmFzbQpAQCAtMCwwICsxLDE3MCBAQAorZG5sICBTUEFSQyB2OSBtcG5fc3VibXVsXzEgZm9yIFQzL1Q0L1Q1LgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBEYXZpZCBNaWxsZXIgYW5kIFRvcmJqw7ZybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCQkgICBjeWNsZXMvbGltYgorQyBVbHRyYVNQQVJDIFQzOgkyNgorQyBVbHRyYVNQQVJDIFQ0OgkgNC41CisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsIGAlaTAnKQorZGVmaW5lKGB1cCcsIGAlaTEnKQorZGVmaW5lKGBuJywgIGAlaTInKQorZGVmaW5lKGB2MCcsIGAlaTMnKQorCitBU01fU1RBUlQoKQorCVJFR0lTVEVSKCVnMiwjc2NyYXRjaCkKKwlSRUdJU1RFUiglZzMsI3NjcmF0Y2gpCitQUk9MT0dVRShtcG5fc3VibXVsXzEpCisJc2F2ZQklc3AsIC0xNzYsICVzcAorCWxkeAlbdXArMF0sICVnMQorCisJYW5kCW4sIDMsICVnNQorCWFkZAluLCAtNCwgbgorCWJyegklZzUsIEwoYjAwKQorCSBjbXAJJWc1LCAyCisJYmNzCSV4Y2MsIEwoYjAxKQorCSBub3AKKwlibmUJJXhjYywgTChiMTEpCisJIGxkeAlbdXArOF0sICVnNAorCitMKGIxMCk6CWFkZAl1cCwgMTYsIHVwCisJYWRkY2MJJWcwLCAwLCAlZzMKKwltdWx4CSVnMSwgdjAsICVsNAorCXVtdWx4aGkoJWcxLCB2MCwgJWw1KQorCWxkeAlbcnArMF0sICVvMgorCW11bHgJJWc0LCB2MCwgJWw2CisJdW11bHhoaSglZzQsIHYwLCAlbDcpCisJYnJsegluLCBMKHdkMikKKwkgbm9wCitMKGd0Mik6CWxkeAlbdXArMF0sICVvMAorCWIJTChsbzIpCisJIG5vcAorCitMKGIwMCk6CWFkZAlycCwgLTE2LCBycAorCWFkZGNjCSVnMCwgMCwgJWczCisJbGR4CVt1cCs4XSwgJW8xCisJbXVseAklZzEsIHYwLCAlbDAKKwl1bXVseGhpKCVnMSwgdjAsICVsMSkKKwlsZHgJW3VwKzE2XSwgJW8wCisJbGR4CVtycCsxNl0sICVvMgorCW11bHgJJW8xLCB2MCwgJWwyCisJdW11bHhoaSglbzEsIHYwLCAlbDMpCisJYgkgICAgIEwobG8wKQorCSBub3AKKworTChiMDEpOglhZGQJdXAsIDgsIHVwCisJYWRkCXJwLCAtOCwgcnAKKwlhZGRjYwklZzAsIDAsICVnMworCWxkeAlbcnArOF0sICVvMworCW11bHgJJWcxLCB2MCwgJWw2CisJdW11bHhoaSglZzEsIHYwLCAlbDcpCisJYnJsegluLCBMKHdkMSkKKwkgbm9wCisJbGR4CVt1cCswXSwgJW8wCisJbGR4CVt1cCs4XSwgJW8xCisJbXVseAklbzAsIHYwLCAlbDAKKwl1bXVseGhpKCVvMCwgdjAsICVsMSkKKwliCUwobG8xKQorCSBub3AKKworTChiMTEpOglhZGQJdXAsIDI0LCB1cAorCWFkZAlycCwgOCwgcnAKKwlhZGRjYwklZzAsIDAsICVnMworCW11bHgJJWcxLCB2MCwgJWwyCisJdW11bHhoaSglZzEsIHYwLCAlbDMpCisJbGR4CVt1cC04XSwgJW8xCisJbGR4CVtycC04XSwgJW8zCisJbXVseAklZzQsIHYwLCAlbDQKKwl1bXVseGhpKCVnNCwgdjAsICVsNSkKKwlicmx6CW4sIEwoZW5kKQorCSBub3AKKworCUFMSUdOKDE2KQorTCh0b3ApOglsZHgJW3VwKzBdLCAlbzAKKwlhZGR4Y2NjKCVnMywgJWwyLCAlZzEpCisJbGR4CVtycCswXSwgJW8yCisJYWRkeGMoCSVnMCwgJWwzLCAlZzMpCisJbXVseAklbzEsIHYwLCAlbDYKKwlzdWJjYwklbzMsICVnMSwgJWc0CisJdW11bHhoaSglbzEsIHYwLCAlbDcpCisJc3R4CSVnNCwgW3JwLThdCitMKGxvMik6CWxkeAlbdXArOF0sICVvMQorCWFkZHhjY2MoJWczLCAlbDQsICVnMSkKKwlsZHgJW3JwKzhdLCAlbzMKKwlhZGR4YygJJWcwLCAlbDUsICVnMykKKwltdWx4CSVvMCwgdjAsICVsMAorCXN1YmNjCSVvMiwgJWcxLCAlZzQKKwl1bXVseGhpKCVvMCwgdjAsICVsMSkKKwlzdHgJJWc0LCBbcnArMF0KK0wobG8xKToJbGR4CVt1cCsxNl0sICVvMAorCWFkZHhjY2MoJWczLCAlbDYsICVnMSkKKwlsZHgJW3JwKzE2XSwgJW8yCisJYWRkeGMoCSVnMCwgJWw3LCAlZzMpCisJbXVseAklbzEsIHYwLCAlbDIKKwlzdWJjYwklbzMsICVnMSwgJWc0CisJdW11bHhoaSglbzEsIHYwLCAlbDMpCisJc3R4CSVnNCwgW3JwKzhdCitMKGxvMCk6CWxkeAlbdXArMjRdLCAlbzEKKwlhZGR4Y2NjKCVnMywgJWwwLCAlZzEpCisJbGR4CVtycCsyNF0sICVvMworCWFkZHhjKAklZzAsICVsMSwgJWczKQorCW11bHgJJW8wLCB2MCwgJWw0CisJc3ViY2MJJW8yLCAlZzEsICVnNAorCXVtdWx4aGkoJW8wLCB2MCwgJWw1KQorCXN0eAklZzQsIFtycCsxNl0KKwlhZGQJbiwgLTQsIG4KKwlhZGQJdXAsIDMyLCB1cAorCWJyZ2V6CW4sIEwodG9wKQorCSBhZGQJcnAsIDMyLCBycAorCitMKGVuZCk6CWFkZHhjY2MoJWczLCAlbDIsICVnMSkKKwlsZHgJW3JwKzBdLCAlbzIKKwlhZGR4YygJJWcwLCAlbDMsICVnMykKKwltdWx4CSVvMSwgdjAsICVsNgorCXN1YmNjCSVvMywgJWcxLCAlZzQKKwl1bXVseGhpKCVvMSwgdjAsICVsNykKKwlzdHgJJWc0LCBbcnAtOF0KK0wod2QyKToJYWRkeGNjYyglZzMsICVsNCwgJWcxKQorCWxkeAlbcnArOF0sICVvMworCWFkZHhjKAklZzAsICVsNSwgJWczKQorCXN1YmNjCSVvMiwgJWcxLCAlZzQKKwlzdHgJJWc0LCBbcnArMF0KK0wod2QxKToJYWRkeGNjYyglZzMsICVsNiwgJWcxKQorCWFkZHhjKAklZzAsICVsNywgJWczKQorCXN1YmNjCSVvMywgJWcxLCAlZzQKKwlzdHgJJWc0LCBbcnArOF0KKwlhZGR4YygJJWcwLCAlZzMsICVpMCkKKwlyZXQKKwkgcmVzdG9yZQorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmN0NDUvZ21wLW1wYXJhbS5oIGIvdGhpcmRfcGFydHkvZ21wL21wbi9zcGFyYzY0L3VsdHJhc3BhcmN0NDUvZ21wLW1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZWNkYmEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3NwYXJjNjQvdWx0cmFzcGFyY3Q0NS9nbXAtbXBhcmFtLmgKQEAgLTAsMCArMSwxNzMgQEAKKy8qIFNwYXJjNjQgVDQtVDUgZ21wLW1wYXJhbS5oIC0tIENvbXBpbGVyL21hY2hpbmUgcGFyYW1ldGVyIGhlYWRlciBmaWxlLgorCitDb3B5cmlnaHQgMjAxOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2RlZmluZSBHTVBfTElNQl9CSVRTIDY0CisjZGVmaW5lIEdNUF9MSU1CX0JZVEVTIDgKKworLyogMzYwMCBNSHogdWx0cmFzcGFyY3Q1IHJ1bm5pbmcgR05VL0xpbnV4ICovCisvKiBGRlQgdHVuaW5nIGxpbWl0ID0gMC41IE0gKi8KKy8qIEdlbmVyYXRlZCBieSB0dW5ldXAuYywgMjAxOS0xMC0wMSwgZ2NjIDcuNCAqLworCisjZGVmaW5lIERJVlJFTV8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAzCisjZGVmaW5lIERJVlJFTV8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICAzCisjZGVmaW5lIE1PRF8xXzFQX01FVEhPRCAgICAgICAgICAgICAgICAgICAgICAyICAvKiAwLjM0JSBmYXN0ZXIgdGhhbiAxICovCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgTU9EXzFOX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgIDYKKyNkZWZpbmUgTU9EXzFVX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgIDYKKyNkZWZpbmUgTU9EXzFfMV9UT19NT0RfMV8yX1RIUkVTSE9MRCAgICAgICAgIDgKKyNkZWZpbmUgTU9EXzFfMl9UT19NT0RfMV80X1RIUkVTSE9MRCAgICAgICAgIDAgIC8qIG5ldmVyIG1wbl9tb2RfMXNfMnAgKi8KKyNkZWZpbmUgUFJFSU5WX01PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgMTMKKyNkZWZpbmUgVVNFX1BSRUlOVl9ESVZSRU1fMSAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgRElWX1FSXzFOX1BJMV9NRVRIT0QgICAgICAgICAgICAgICAgIDIgIC8qIDI3Ljg0JSBmYXN0ZXIgdGhhbiAxICovCisjZGVmaW5lIERJVl9RUl8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAzCisjZGVmaW5lIERJVl9RUl8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICAyCisjZGVmaW5lIERJVl9RUl8yX1BJMl9USFJFU0hPTEQgICAgICAgICAgICAgICA1CisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgICAgICAgMTkKKworI2RlZmluZSBESVZfMV9WU19NVUxfMV9QRVJDRU5UICAgICAgICAgICAgIDY1NAorCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDQwCisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTI5CisjZGVmaW5lIE1VTF9UT09NNDRfVEhSRVNIT0xEICAgICAgICAgICAgICAgMzcyCisjZGVmaW5lIE1VTF9UT09NNkhfVEhSRVNIT0xEICAgICAgICAgICAgICAgNDk0CisjZGVmaW5lIE1VTF9UT09NOEhfVEhSRVNIT0xEICAgICAgICAgICAgICAgNjU2CisKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNDNfVEhSRVNIT0xEICAgICAxMjYKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNTNfVEhSRVNIT0xEICAgICAyNDcKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNTNfVEhSRVNIT0xEICAgICAyMjUKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNjNfVEhSRVNIT0xEICAgICAyMTkKKyNkZWZpbmUgTVVMX1RPT000M19UT19UT09NNTRfVEhSRVNIT0xEICAgICAxODgKKworI2RlZmluZSBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgICAyMAorI2RlZmluZSBTUVJfVE9PTTJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA1OQorI2RlZmluZSBTUVJfVE9PTTNfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDEwNworI2RlZmluZSBTUVJfVE9PTTRfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDI5OAorI2RlZmluZSBTUVJfVE9PTTZfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDM5OQorI2RlZmluZSBTUVJfVE9PTThfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDU2MgorCisjZGVmaW5lIE1VTE1JRF9UT09NNDJfVEhSRVNIT0xEICAgICAgICAgICAgIDQ4CisKKyNkZWZpbmUgTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgU1FSTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjMKKworI2RlZmluZSBNVUxfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDU1NSAgLyogayA9IDUgKi8KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDU1NSwgNX0sIHsgICAgIDI5LCA2fSwgeyAgICAgMzEsIDd9LCB7ICAgICAzMSwgOH0sIFwKKyAgICB7ICAgICAxNywgN30sIHsgICAgIDM2LCA4fSwgeyAgICAgMTksIDd9LCB7ICAgICAzOSwgOH0sIFwKKyAgICB7ICAgICAyMSwgN30sIHsgICAgIDQzLCA4fSwgeyAgICAgMjksIDl9LCB7ICAgICAxNSwgOH0sIFwKKyAgICB7ICAgICAzMSwgN30sIHsgICAgIDYzLCA4fSwgeyAgICAgMzUsIDl9LCB7ICAgICAxOSwgOH0sIFwKKyAgICB7ICAgICA0MywgOX0sIHsgICAgIDIzLCA4fSwgeyAgICAgNTEsIDl9LCB7ICAgICAyNywgOH0sIFwKKyAgICB7ICAgICA1NywxMH0sIHsgICAgIDE1LCA4fSwgeyAgICAgNjEsIDl9LCB7ICAgICAzMSwgOH0sIFwKKyAgICB7ICAgICA2NywgOX0sIHsgICAgIDM1LCA4fSwgeyAgICAgNzEsIDl9LCB7ICAgICAzOSwgOH0sIFwKKyAgICB7ICAgICA4MSwgOX0sIHsgICAgIDQzLDEwfSwgeyAgICAgMjMsIDl9LCB7ICAgICA1OSwxMX0sIFwKKyAgICB7ICAgICAxNSwxMH0sIHsgICAgIDMxLCA5fSwgeyAgICAgNzEsMTB9LCB7ICAgICAzOSwgOX0sIFwKKyAgICB7ICAgICA4NywxMH0sIHsgICAgIDQ3LCA5fSwgeyAgICAgOTksMTB9LCB7ICAgICA1NSwgOX0sIFwKKyAgICB7ICAgIDExNSwxMX0sIHsgICAgIDMxLDEwfSwgeyAgICAgNjMsIDl9LCB7ICAgIDEzMSwxMH0sIFwKKyAgICB7ICAgICA4NywxMX0sIHsgICAgIDQ3LDEwfSwgeyAgICAxMTEsIDl9LCB7ICAgIDIyMywxMn0sIFwKKyAgICB7ICAgICAzMSwxMX0sIHsgICAgIDYzLDEwfSwgeyAgICAxMzUsMTF9LCB7ICAgICA3OSwxMH0sIFwKKyAgICB7ICAgIDE1OSwxMX0sIHsgICAgIDk1LDEwfSwgeyAgICAxOTEsMTF9LCB7ICAgIDExMSwxMn0sIFwKKyAgICB7ICAgICA2MywxMX0sIHsgICAgMTQzLDEwfSwgeyAgICAyODcsMTF9LCB7ICAgIDE1OSwxMn0sIFwKKyAgICB7ICAgICA5NSwxMX0sIHsgICAgMTkxLDEwfSwgeyAgICAzODMsIDl9LCB7ICAgIDc2NywxM30sIFwKKyAgICB7ICAgODE5MiwxNH0sIHsgIDE2Mzg0LDE1fSwgeyAgMzI3NjgsMTZ9LCB7ICA2NTUzNiwxN30sIFwKKyAgICB7IDEzMTA3MiwxOH0sIHsgMjYyMTQ0LDE5fSwgeyA1MjQyODgsMjB9LCB7MTA0ODU3NiwyMX0sIFwKKyAgICB7MjA5NzE1MiwyMn0sIHs0MTk0MzA0LDIzfSwgezgzODg2MDgsMjR9IH0KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTNfU0laRSA3NQorI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNTc2MAorCisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgMzcyICAvKiBrID0gNSAqLworI2RlZmluZSBTUVJfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgMzcyLCA1fSwgeyAgICAgMjMsIDZ9LCB7ICAgICAxMiwgNX0sIHsgICAgIDI1LCA2fSwgXAorICAgIHsgICAgIDI1LCA3fSwgeyAgICAgMTMsIDZ9LCB7ICAgICAyNywgN30sIHsgICAgIDI1LCA4fSwgXAorICAgIHsgICAgIDEzLCA3fSwgeyAgICAgMjgsIDh9LCB7ICAgICAxNSwgN30sIHsgICAgIDMxLCA4fSwgXAorICAgIHsgICAgIDI3LCA5fSwgeyAgICAgMTUsIDh9LCB7ICAgICAzNSwgOX0sIHsgICAgIDE5LCA4fSwgXAorICAgIHsgICAgIDQxLCA5fSwgeyAgICAgMjMsIDh9LCB7ICAgICA0NywgOX0sIHsgICAgIDI3LDEwfSwgXAorICAgIHsgICAgIDE1LCA5fSwgeyAgICAgMzksMTB9LCB7ICAgICAyMywgOX0sIHsgICAgIDUxLDExfSwgXAorICAgIHsgICAgIDE1LDEwfSwgeyAgICAgMzEsIDl9LCB7ICAgICA2NywxMH0sIHsgICAgIDM5LCA5fSwgXAorICAgIHsgICAgIDc5LDEwfSwgeyAgICAgNDcsIDl9LCB7ICAgICA5NSwxMH0sIHsgICAgIDU1LDExfSwgXAorICAgIHsgICAgIDMxLDEwfSwgeyAgICAgNzksMTF9LCB7ICAgICA0NywxMH0sIHsgICAgIDk1LDEyfSwgXAorICAgIHsgICAgIDMxLDExfSwgeyAgICAgNjMsMTB9LCB7ICAgIDEzNSwxMX0sIHsgICAgIDc5LDEwfSwgXAorICAgIHsgICAgMTU5LCA5fSwgeyAgICAzMTksMTF9LCB7ICAgICA5NSwxMH0sIHsgICAgMTkxLCA5fSwgXAorICAgIHsgICAgMzgzLDExfSwgeyAgICAxMTEsMTJ9LCB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgXAorICAgIHsgICAgMjU1LCA5fSwgeyAgICA1MTEsMTB9LCB7ICAgIDI3MSwxMX0sIHsgICAgMTQzLDEwfSwgXAorICAgIHsgICAgMjg3LCA5fSwgeyAgICA1NzUsMTB9LCB7ICAgIDMwMywgOX0sIHsgICAgNjA3LDExfSwgXAorICAgIHsgICAgMTU5LDEwfSwgeyAgICAzMTksIDl9LCB7ICAgIDYzOSwxMn0sIHsgICAgIDk1LDExfSwgXAorICAgIHsgICAgMTkxLDEwfSwgeyAgICAzODMsIDl9LCB7ICAgIDc2NywxMX0sIHsgICAgMjA3LDEzfSwgXAorICAgIHsgICA4MTkyLDE0fSwgeyAgMTYzODQsMTV9LCB7ICAzMjc2OCwxNn0sIHsgIDY1NTM2LDE3fSwgXAorICAgIHsgMTMxMDcyLDE4fSwgeyAyNjIxNDQsMTl9LCB7IDUyNDI4OCwyMH0sIHsxMDQ4NTc2LDIxfSwgXAorICAgIHsyMDk3MTUyLDIyfSwgezQxOTQzMDQsMjN9LCB7ODM4ODYwOCwyNH0gfQorI2RlZmluZSBTUVJfRkZUX1RBQkxFM19TSVpFIDc1CisjZGVmaW5lIFNRUl9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAzNzc2CisKKyNkZWZpbmUgTVVMTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNVUxMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAzNQorI2RlZmluZSBNVUxMT19NVUxfTl9USFJFU0hPTEQgICAgICAgICAgICAxMTI3OAorI2RlZmluZSBTUVJMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIFNRUkxPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTY4CisjZGVmaW5lIFNRUkxPX1NRUl9USFJFU0hPTEQgICAgICAgICAgICAgICA3NTExCisKKyNkZWZpbmUgRENfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMzYKKyNkZWZpbmUgRENfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAxMDMKKyNkZWZpbmUgRENfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgRENfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgODgKKworI2RlZmluZSBJTlZfTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICA3OAorI2RlZmluZSBJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE4MQorI2RlZmluZSBJTlZfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDExOAorCisjZGVmaW5lIEJJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgMjk2CisjZGVmaW5lIFJFRENfMV9UT19SRURDXzJfVEhSRVNIT0xEICAgICAgICAgICA0CisjZGVmaW5lIFJFRENfMl9UT19SRURDX05fVEhSRVNIT0xEICAgICAgICAgIDc5CisKKyNkZWZpbmUgTVVfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE5NzAKKyNkZWZpbmUgTVVfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgIDE5NzAKKyNkZWZpbmUgTVVQSV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgODIKKyNkZWZpbmUgTVVfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgIDE1MjgKKyNkZWZpbmUgTVVfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE5NzAKKworI2RlZmluZSBQT1dNX1NFQ19UQUJMRSAgMSw1OCwxMDIsMTUwOQorCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgIDI5CisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgNjg2CisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAyNzE3CisKKyNkZWZpbmUgRkFDX0RTQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAzMzYKKyNkZWZpbmUgRkFDX09ERF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgMjQKKworI2RlZmluZSBNQVRSSVgyMl9TVFJBU1NFTl9USFJFU0hPTEQgICAgICAgICAzMgorI2RlZmluZSBIR0NEMl9ESVYxX01FVEhPRCAgICAgICAgICAgICAgICAgICAgMSAgLyogMC42NiUgZmFzdGVyIHRoYW4gMyAqLworI2RlZmluZSBIR0NEX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgICA1NworI2RlZmluZSBIR0NEX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA1MAorI2RlZmluZSBIR0NEX1JFRFVDRV9USFJFU0hPTEQgICAgICAgICAgICAgMzM4OQorI2RlZmluZSBHQ0RfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDM4NgorI2RlZmluZSBHQ0RFWFRfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDI4OAorI2RlZmluZSBKQUNPQklfQkFTRV9NRVRIT0QgICAgICAgICAgICAgICAgICAgNCAgLyogMi41MCUgZmFzdGVyIHRoYW4gMyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi90aHVtYi9hZGRfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3RodW1iL2FkZF9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGVkNjBiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi90aHVtYi9hZGRfbi5hc20KQEAgLTAsMCArMSw2MyBAQAorZG5sICBBUk0vVGh1bWIgbXBuX2FkZF9uLgorCitkbmwgIENvcHlyaWdodCAxOTk3LCAyMDAwLCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsCXIwKQorZGVmaW5lKGB1cCcsCXIxKQorZGVmaW5lKGB2cCcsCXIyKQorZGVmaW5lKGBuJywJcjMpCisKK0FTTV9TVEFSVCgpCisJLnRodW1iCitQUk9MT0dVRShtcG5fYWRkX25jKQorCXB1c2gJe3I0LCByNSwgcjZ9CisJbGRyCXI2LCBbc3AsICMxMl0JCUMgaW5pdCBjYXJyeSBzYXZlIHJlZ2lzdGVyCisJc3ViCXI2LCAjMQorCWIJTCh0b3ApCitFUElMT0dVRSgpCitQUk9MT0dVRShtcG5fYWRkX24pCisJcHVzaAl7cjQsIHI1LCByNn0KKwluZWcJcjYsIG4JCQlDIGluaXQgY2Fycnkgc2F2ZSByZWdpc3RlcgorCitMKHRvcCk6CWxkbWlhCXVwISwge3I0fQkJQyBsb2FkIG5leHQgbGltYiBmcm9tIFMxCisJY21wCW4sIHI2CQkJQyB0cmlja3kgY2FycnkgcmVzdG9yZQorCWxkbWlhCXZwISwge3I1fQkJQyBsb2FkIG5leHQgbGltYiBmcm9tIFMyCisJYWRjCXI0LCByNQorCXN0bWlhCXJwISwge3I0fQkJQyBzdG9yZSByZXN1bHQgbGltYiB0byBSRVMKKwlzYmMJcjYsIHI2CQkJQyBzYXZlIG5lZ2F0ZWQgY2FycnkKKwlzdWIJbiwgIzEKKwlibmUJTCh0b3ApCisKKwlhZGQJcjAsIHI2LCAjMQorCXBvcAl7cjQsIHI1LCByNn0KKwlieAlscgorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi90aHVtYi9zdWJfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3RodW1iL3N1Yl9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzg1NzIwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi90aHVtYi9zdWJfbi5hc20KQEAgLTAsMCArMSw2MyBAQAorZG5sICBBUk0vVGh1bWIgbXBuX3N1Yl9uLgorCitkbmwgIENvcHlyaWdodCAxOTk3LCAyMDAwLCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsCXIwKQorZGVmaW5lKGB1cCcsCXIxKQorZGVmaW5lKGB2cCcsCXIyKQorZGVmaW5lKGBuJywJcjMpCisKK0FTTV9TVEFSVCgpCisJLnRodW1iCitQUk9MT0dVRShtcG5fc3ViX25jKQorCXB1c2gJe3I0LCByNSwgcjZ9CisJbGRyCXI2LCBbc3AsICMxMl0JCUMgaW5pdCBjYXJyeSBzYXZlIHJlZ2lzdGVyCisJbmVnCXI2LCByNgorCWIJTCh0b3ApCitFUElMT0dVRSgpCitQUk9MT0dVRShtcG5fc3ViX24pCisJcHVzaAl7cjQsIHI1LCByNn0KKwltb3YJcjYsIG4JCQlDIGluaXQgY2Fycnkgc2F2ZSByZWdpc3RlcgorCitMKHRvcCk6CWxkbWlhCXVwISwge3I0fQkJQyBsb2FkIG5leHQgbGltYiBmcm9tIFMxCisJY21wCW4sIHI2CQkJQyB0cmlja3kgY2FycnkgcmVzdG9yZQorCWxkbWlhCXZwISwge3I1fQkJQyBsb2FkIG5leHQgbGltYiBmcm9tIFMyCisJc2JjCXI0LCByNQorCXN0bWlhCXJwISwge3I0fQkJQyBzdG9yZSByZXN1bHQgbGltYiB0byBSRVMKKwlzYmMJcjYsIHI2CQkJQyBzYXZlIG5lZ2F0ZWQgY2FycnkKKwlzdWIJbiwgIzEKKwlibmUJTCh0b3ApCisKKwluZWcJcjAsIHI2CisJcG9wCXtyNCwgcjUsIHI2fQorCWJ4CWxyCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3ZheC9hZGRfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3ZheC9hZGRfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEwYmY3OAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vdmF4L2FkZF9uLmFzbQpAQCAtMCwwICsxLDY0IEBACitkbmwgIFZBWCBtcG5fYWRkX24gLS0gQWRkIHR3byBsaW1iIHZlY3RvcnMgb2YgdGhlIHNhbWUgbGVuZ3RoID4gMCBhbmQgc3RvcmUgc3VtCitkbmwgIGluIGEgdGhpcmQgbGltYiB2ZWN0b3IuCisKK2RubCAgQ29weXJpZ2h0IDE5OTksIDIwMDAsIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9hZGRfbikKKwkud29yZAkweDAKKwltb3ZsCTE2KGFwKSwgcjAKKwltb3ZsCTEyKGFwKSwgcjEKKwltb3ZsCTgoYXApLCByMgorCW1vdmwJNChhcCksIHIzCisJbW5lZ2wJcjAsIHI1CisJYWRkbDIJJDMsIHIwCisJYXNobAkkLTIsIHIwLCByMAlDIHVucm9sbCBsb29wIGNvdW50CisJYmljbDIJJC00LCByNQkJQyBtYXNrIG91dCBsb3cgMiBiaXRzCisJbW92YXEJKHI1KVtyNV0sIHI1CUMgOXgKKwlqbXAJTCh0b3ApW3I1XQorCitMKHRvcCk6CW1vdmwJKHIyKSssIHI0CisJYWR3YwkocjEpKywgcjQKKwltb3ZsCXI0LCAocjMpKworCW1vdmwJKHIyKSssIHI0CisJYWR3YwkocjEpKywgcjQKKwltb3ZsCXI0LCAocjMpKworCW1vdmwJKHIyKSssIHI0CisJYWR3YwkocjEpKywgcjQKKwltb3ZsCXI0LCAocjMpKworCW1vdmwJKHIyKSssIHI0CisJYWR3YwkocjEpKywgcjQKKwltb3ZsCXI0LCAocjMpKworCXNvYmd0cglyMCwgTCh0b3ApCisKKwlhZHdjCXIwLCByMAorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi92YXgvYWRkbXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi92YXgvYWRkbXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNmY2MzYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3ZheC9hZGRtdWxfMS5hc20KQEAgLTAsMCArMSwxMjQgQEAKK2RubCAgVkFYIG1wbl9hZGRtdWxfMSAtLSBNdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYSBsaW1iIGFuZCBhZGQgdGhlIHJlc3VsdAorZG5sICB0byBhIHNlY29uZCBsaW1iIHZlY3Rvci4KKworZG5sICBDb3B5cmlnaHQgMTk5MiwgMTk5NCwgMTk5NiwgMjAwMCwgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX2FkZG11bF8xKQorCS53b3JkCTB4ZmMwCisJbW92bAkxMihhcCksIHI0CisJbW92bAk4KGFwKSwgcjgKKwltb3ZsCTQoYXApLCByOQorCWNscmwJcjMKKwlpbmNsCXI0CisJYXNobAkkLTEsIHI0LCByNworCWNscmwJcjExCisJbW92bAkxNihhcCksIHI2CisJamxzcwlMKHYwX2JpZykKKwlqbGJjCXI0LCBMKDEpCisKK0MgTG9vcCBmb3IgdjAgPCAweDgwMDAwMDAwCitMKHRwMSk6CW1vdmwJKHI4KSssIHIxCisJamxzcwlMKDFuMCkKKwllbXVsCXIxLCByNiwgJDAsIHIyCisJYWRkbDIJcjExLCByMgorCWFkd2MJJDAsIHIzCisJYWRkbDIJcjIsIChyOSkrCisJYWR3YwkkMCwgcjMKK0woMSk6CW1vdmwJKHI4KSssIHIxCisJamxzcwlMKDFuMSkKK0woMXAxKToJZW11bAlyMSwgcjYsICQwLCByMTAKKwlhZGRsMglyMywgcjEwCisJYWR3YwkkMCwgcjExCisJYWRkbDIJcjEwLCAocjkpKworCWFkd2MJJDAsIHIxMQorCisJc29iZ3RyCXI3LCBMKHRwMSkKKwltb3ZsCXIxMSwgcjAKKwlyZXQKKworTCgxbjApOgllbXVsCXIxLCByNiwgJDAsIHIyCisJYWRkbDIJcjExLCByMgorCWFkd2MJcjYsIHIzCisJYWRkbDIJcjIsIChyOSkrCisJYWR3YwkkMCwgcjMKKwltb3ZsCShyOCkrLCByMQorCWpnZXEJTCgxcDEpCitMKDFuMSk6CWVtdWwJcjEsIHI2LCAkMCwgcjEwCisJYWRkbDIJcjMsIHIxMAorCWFkd2MJcjYsIHIxMQorCWFkZGwyCXIxMCwgKHI5KSsKKwlhZHdjCSQwLCByMTEKKworCXNvYmd0cglyNywgTCh0cDEpCisJbW92bAlyMTEsIHIwCisJcmV0CisKK0wodjBfYmlnKToKKwlqbGJjCXI0LCBMKDIpCisKK0MgTG9vcCBmb3IgdjAgPj0gMHg4MDAwMDAwMAorTCh0cDIpOgltb3ZsCShyOCkrLCByMQorCWpsc3MJTCgybjApCisJZW11bAlyMSwgcjYsICQwLCByMgorCWFkZGwyCXIxMSwgcjIKKwlhZHdjCXIxLCByMworCWFkZGwyCXIyLCAocjkpKworCWFkd2MJJDAsIHIzCitMKDIpOgltb3ZsCShyOCkrLCByMQorCWpsc3MJTCgybjEpCitMKDJwMSk6CWVtdWwJcjEsIHI2LCAkMCwgcjEwCisJYWRkbDIJcjMsIHIxMAorCWFkd2MJcjEsIHIxMQorCWFkZGwyCXIxMCwgKHI5KSsKKwlhZHdjCSQwLCByMTEKKworCXNvYmd0cglyNywgTCh0cDIpCisJbW92bAlyMTEsIHIwCisJcmV0CisKK0woMm4wKToJZW11bAlyMSwgcjYsICQwLCByMgorCWFkZGwyCXIxMSwgcjIKKwlhZHdjCXI2LCByMworCWFkZGwyCXIyLCAocjkpKworCWFkd2MJcjEsIHIzCisJbW92bAkocjgpKywgcjEKKwlqZ2VxCUwoMnAxKQorTCgybjEpOgllbXVsCXIxLCByNiwgJDAsIHIxMAorCWFkZGwyCXIzLCByMTAKKwlhZHdjCXI2LCByMTEKKwlhZGRsMglyMTAsIChyOSkrCisJYWR3YwlyMSwgcjExCisKKwlzb2JndHIJcjcsIEwodHAyKQorCW1vdmwJcjExLCByMAorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi92YXgvZWxmLm00IGIvdGhpcmRfcGFydHkvZ21wL21wbi92YXgvZWxmLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNGYwYmEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3ZheC9lbGYubTQKQEAgLTAsMCArMSw1NCBAQAorZGl2ZXJ0KC0xKQorCitkbmwgIG00IG1hY3JvcyBmb3IgVkFYIGFzc2VtYmxlci4KKworZG5sICBDb3B5cmlnaHQgMjAwMSwgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKK2RlZnJlZyhyMCxgJXJgYCcnMCcpCitkZWZyZWcocjEsYCVyYGAnJzEnKQorZGVmcmVnKHIyLGAlcmBgJycyJykKK2RlZnJlZyhyMyxgJXJgYCcnMycpCitkZWZyZWcocjQsYCVyYGAnJzQnKQorZGVmcmVnKHI1LGAlcmBgJyc1JykKK2RlZnJlZyhyNixgJXJgYCcnNicpCitkZWZyZWcocjcsYCVyYGAnJzcnKQorZGVmcmVnKHI4LGAlcmBgJyc4JykKK2RlZnJlZyhyOSxgJXJgYCcnOScpCitkZWZyZWcocjEwLGAlcmBgJycxMCcpCitkZWZyZWcocjExLGAlcmBgJycxMScpCitkZWZyZWcocjEyLGAlcmBgJycxMicpCitkZWZyZWcocjEzLGAlcmBgJycxMycpCitkZWZyZWcocjE0LGAlcmBgJycxNCcpCitkZWZyZWcocjE1LGAlcmBgJycxNScpCitkZWZyZWcoYXAsYCVhYGAnJ3AnKQorCitkZWZpbmUoYGZvbycsIGJsYWJsYWJsYSkKKworZGl2ZXJ0CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3ZheC9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3ZheC9nbXAtbXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYyMGI5YgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vdmF4L2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDYwIEBACisvKiBWQVggZ21wLW1wYXJhbS5oIC0tIENvbXBpbGVyL21hY2hpbmUgcGFyYW1ldGVyIGhlYWRlciBmaWxlLgorCitDb3B5cmlnaHQgMjAwMC0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisvKiBUaGVzZSBudW1iZXJzIHdlcmUgbWVhc3VyZWQgbWFudWFsbHkgdXNpbmcgdGhlIHR1bmUvc3BlZWQgcHJvZ3JhbS4KKyAgIFRoZSBzdGFuZGFyZCB0dW5lL3R1bmV1cCB0YWtlcyB0b28gbG9uZy4gIChWQVggODgwMCkgKi8KKworI2RlZmluZSBNVUxfVE9PTTIyX1RIUkVTSE9MRCAgICAgICAgICAgICAxNAorI2RlZmluZSBNVUxfVE9PTTMzX1RIUkVTSE9MRCAgICAgICAgICAgIDExMAorCisjZGVmaW5lIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICA2CisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgIDQyCisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgMjUwCisKKy8qICNkZWZpbmUgRElWX1NCX1BSRUlOVl9USFJFU0hPTEQgICAgICAgICAqLworLyogI2RlZmluZSBESVZfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICovCisvKiAjZGVmaW5lIFBPV01fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgKi8KKworLyogI2RlZmluZSBHQ0RfQUNDRUxfVEhSRVNIT0xEICAgICAgICAgICAgICovCisvKiAjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgKi8KKworLyogI2RlZmluZSBESVZSRU1fMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICovCisvKiAjZGVmaW5lIERJVlJFTV8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgKi8KKy8qICNkZWZpbmUgTU9EXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAqLworLyogI2RlZmluZSBNT0RfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICovCisvKiAjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgKi8KKy8qICNkZWZpbmUgVVNFX1BSRUlOVl9NT0RfMSAgICAgICAgICAgICAgICAqLworLyogI2RlZmluZSBESVZSRU1fMl9USFJFU0hPTEQgICAgICAgICAgICAgICovCisvKiAjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgKi8KKy8qICNkZWZpbmUgTU9ERVhBQ1RfMV9PRERfVEhSRVNIT0xEICAgICAgICAqLworCisvKiAjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgKi8KKy8qICNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAqLworI2RlZmluZSBTRVRfU1RSX1RIUkVTSE9MRCAgICAgICAgICAgICAgMzQwMApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi92YXgvbHNoaWZ0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vdmF4L2xzaGlmdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQxZTk5OQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vdmF4L2xzaGlmdC5hc20KQEAgLTAsMCArMSw1OSBAQAorZG5sICBWQVggbXBuX2xzaGlmdCAtLSBsZWZ0IHNoaWZ0LgorCitkbmwgIENvcHlyaWdodCAxOTk5LTIwMDEsIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQVNNX1NUQVJUKCkKK1BST0xPR1VFKG1wbl9sc2hpZnQpCisJLndvcmQJMHgxYzAKKwltb3ZsCTQoYXApLCByNworCW1vdmwJOChhcCksIHI2CisJbW92bAkxMihhcCksIHIxCisJbW92bAkxNihhcCksIHI4CisKKwltb3ZhbAkocjYpW3IxXSwgcjYKKwltb3ZhbAkocjcpW3IxXSwgcjcKKwljbHJsCXIzCisJbW92bAktKHI2KSwgcjIKKwlhc2hxCXI4LCByMiwgcjQKKwltb3ZsCXI1LCByMAorCW1vdmwJcjIsIHIzCisJZGVjbAlyMQorCWplcWwJTChlbmQpCisKK0wodG9wKToJbW92bAktKHI2KSwgcjIKKwlhc2hxCXI4LCByMiwgcjQKKwltb3ZsCXI1LCAtKHI3KQorCW1vdmwJcjIsIHIzCisJc29iZ3RyCXIxLCBMKHRvcCkKKworTChlbmQpOgltb3ZsCXI0LCAtNChyNykKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vdmF4L211bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vdmF4L211bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTRkY2QyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi92YXgvbXVsXzEuYXNtCkBAIC0wLDAgKzEsMTE4IEBACitkbmwgIFZBWCBtcG5fbXVsXzEgLS0gTXVsdGlwbHkgYSBsaW1iIHZlY3RvciB3aXRoIGEgbGltYiBhbmQgc3RvcmUgdGhlIHJlc3VsdAorZG5sICBpbiBhIHNlY29uZCBsaW1iIHZlY3Rvci4KKworZG5sICBDb3B5cmlnaHQgMTk5MiwgMTk5NCwgMTk5NiwgMjAwMCwgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX211bF8xKQorCS53b3JkCTB4ZmMwCisJbW92bAkxMihhcCksIHI0CisJbW92bAk4KGFwKSwgcjgKKwltb3ZsCTQoYXApLCByOQorCWNscmwJcjMKKwlpbmNsCXI0CisJYXNobAkkLTEsIHI0LCByNworCWNscmwJcjExCisJbW92bAkxNihhcCksIHI2CisJamxzcwlMKHYwX2JpZykKKwlqbGJjCXI0LCBMKDEpCisKK0MgTG9vcCBmb3IgdjAgPCAweDgwMDAwMDAwCitMKHRwMSk6CW1vdmwJKHI4KSssIHIxCisJamxzcwlMKDFuMCkKKwllbXVsCXIxLCByNiwgJDAsIHIyCisJYWRkbDIJcjExLCByMgorCWFkd2MJJDAsIHIzCisJbW92bAlyMiwgKHI5KSsKK0woMSk6CW1vdmwJKHI4KSssIHIxCisJamxzcwlMKDFuMSkKK0woMXAxKToJZW11bAlyMSwgcjYsICQwLCByMTAKKwlhZGRsMglyMywgcjEwCisJYWR3YwkkMCwgcjExCisJbW92bAlyMTAsIChyOSkrCisKKwlzb2JndHIJcjcsIEwodHAxKQorCW1vdmwJcjExLCByMAorCXJldAorCitMKDFuMCk6CWVtdWwJcjEsIHI2LCAkMCwgcjIKKwlhZGRsMglyMTEsIHIyCisJYWR3YwlyNiwgcjMKKwltb3ZsCXIyLCAocjkpKworCW1vdmwJKHI4KSssIHIxCisJamdlcQlMKDFwMSkKK0woMW4xKToJZW11bAlyMSwgcjYsICQwLCByMTAKKwlhZGRsMglyMywgcjEwCisJYWR3YwlyNiwgcjExCisJbW92bAlyMTAsIChyOSkrCisKKwlzb2JndHIJcjcsIEwodHAxKQorCW1vdmwJcjExLCByMAorCXJldAorCitMKHYwX2JpZyk6CisJamxiYwlyNCwgTCgyKQorCitDIExvb3AgZm9yIHYwID49IDB4ODAwMDAwMDAKK0wodHAyKToJbW92bAkocjgpKywgcjEKKwlqbHNzCUwoMm4wKQorCWVtdWwJcjEsIHI2LCAkMCwgcjIKKwlhZGRsMglyMTEsIHIyCisJYWR3YwlyMSwgcjMKKwltb3ZsCXIyLCAocjkpKworTCgyKToJbW92bAkocjgpKywgcjEKKwlqbHNzCUwoMm4xKQorTCgycDEpOgllbXVsCXIxLCByNiwgJDAsIHIxMAorCWFkZGwyCXIzLCByMTAKKwlhZHdjCXIxLCByMTEKKwltb3ZsCXIxMCwgKHI5KSsKKworCXNvYmd0cglyNywgTCh0cDIpCisJbW92bAlyMTEsIHIwCisJcmV0CisKK0woMm4wKToJZW11bAlyMSwgcjYsICQwLCByMgorCWFkZGwyCXIxLCByMworCWFkZGwyCXIxMSwgcjIKKwlhZHdjCXI2LCByMworCW1vdmwJcjIsIChyOSkrCisJbW92bAkocjgpKywgcjEKKwlqZ2VxCUwoMnAxKQorTCgybjEpOgllbXVsCXIxLCByNiwgJDAsIHIxMAorCWFkZGwyCXIxLCByMTEKKwlhZGRsMglyMywgcjEwCisJYWR3YwlyNiwgcjExCisJbW92bAlyMTAsIChyOSkrCisKKwlzb2JndHIJcjcsIEwodHAyKQorCW1vdmwJcjExLCByMAorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi92YXgvcnNoaWZ0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vdmF4L3JzaGlmdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBiMmRhYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vdmF4L3JzaGlmdC5hc20KQEAgLTAsMCArMSw1NyBAQAorZG5sICBWQVggbXBuX3JzaGlmdCAtLSByaWdodCBzaGlmdC4KKworZG5sICBDb3B5cmlnaHQgMTk5OS0yMDAxLCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0FTTV9TVEFSVCgpCitQUk9MT0dVRShtcG5fcnNoaWZ0KQorCS53b3JkCTB4MWMwCisJbW92bAk0KGFwKSwgcjcKKwltb3ZsCTgoYXApLCByNgorCW1vdmwJMTIoYXApLCByMQorCW1vdmwJMTYoYXApLCByOAorCisJbW92bAkocjYpKywgcjIKKwlzdWJsMwlyOCwgJDMyLCByOAorCWFzaGwJcjgsIHIyLCByMAorCWRlY2wJcjEKKwlqZXFsCUwoZW5kKQorCitMKHRvcCk6CW1vdmwJKHI2KSssIHIzCisJYXNocQlyOCwgcjIsIHI0CisJbW92bAlyNSwgKHI3KSsKKwltb3ZsCXIzLCByMgorCXNvYmd0cglyMSwgTCh0b3ApCisKK0woZW5kKToJY2xybAlyMworCWFzaHEJcjgsIHIyLCByNAorCW1vdmwJcjUsIChyNykKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4vdmF4L3N1Yl9uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vdmF4L3N1Yl9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODQ0ZWYyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi92YXgvc3ViX24uYXNtCkBAIC0wLDAgKzEsNjQgQEAKK2RubCAgVkFYIG1wbl9zdWJfbiAtLSBTdWJ0cmFjdCB0d28gbGltYiB2ZWN0b3JzIG9mIHRoZSBzYW1lIGxlbmd0aCA+IDAgYW5kCitkbmwgIHN0b3JlIGRpZmZlcmVuY2UgaW4gYSB0aGlyZCBsaW1iIHZlY3Rvci4KKworZG5sICBDb3B5cmlnaHQgMTk5OSwgMjAwMCwgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX3N1Yl9uKQorCS53b3JkCTB4MAorCW1vdmwJMTYoYXApLCByMAorCW1vdmwJMTIoYXApLCByMQorCW1vdmwJOChhcCksIHIyCisJbW92bAk0KGFwKSwgcjMKKwltbmVnbAlyMCwgcjUKKwlhZGRsMgkkMywgcjAKKwlhc2hsCSQtMiwgcjAsIHIwCUMgdW5yb2xsIGxvb3AgY291bnQKKwliaWNsMgkkLTQsIHI1CQlDIG1hc2sgb3V0IGxvdyAyIGJpdHMKKwltb3ZhcQkocjUpW3I1XSwgcjUJQyA5eAorCWptcAlMKHRvcClbcjVdCisKK0wodG9wKToJbW92bAkocjIpKywgcjQKKwlzYndjCShyMSkrLCByNAorCW1vdmwJcjQsIChyMykrCisJbW92bAkocjIpKywgcjQKKwlzYndjCShyMSkrLCByNAorCW1vdmwJcjQsIChyMykrCisJbW92bAkocjIpKywgcjQKKwlzYndjCShyMSkrLCByNAorCW1vdmwJcjQsIChyMykrCisJbW92bAkocjIpKywgcjQKKwlzYndjCShyMSkrLCByNAorCW1vdmwJcjQsIChyMykrCisJc29iZ3RyCXIwLCBMKHRvcCkKKworCWFkd2MJcjAsIHIwCisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3ZheC9zdWJtdWxfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3ZheC9zdWJtdWxfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBkNDdmYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4vdmF4L3N1Ym11bF8xLmFzbQpAQCAtMCwwICsxLDEyNCBAQAorZG5sICBWQVggbXBuX3N1Ym11bF8xIC0tIE11bHRpcGx5IGEgbGltYiB2ZWN0b3Igd2l0aCBhIGxpbWIgYW5kIHN1YnRyYWN0IHRoZQorZG5sICByZXN1bHQgZnJvbSBhIHNlY29uZCBsaW1iIHZlY3Rvci4KKworZG5sICBDb3B5cmlnaHQgMTk5MiwgMTk5NCwgMTk5NiwgMjAwMCwgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBU01fU1RBUlQoKQorUFJPTE9HVUUobXBuX3N1Ym11bF8xKQorCS53b3JkCTB4ZmMwCisJbW92bAkxMihhcCksIHI0CisJbW92bAk4KGFwKSwgcjgKKwltb3ZsCTQoYXApLCByOQorCWNscmwJcjMKKwlpbmNsCXI0CisJYXNobAkkLTEsIHI0LCByNworCWNscmwJcjExCisJbW92bAkxNihhcCksIHI2CisJamxzcwlMKHYwX2JpZykKKwlqbGJjCXI0LCBMKDEpCisKK0MgTG9vcCBmb3IgdjAgPCAweDgwMDAwMDAwCitMKHRwMSk6CW1vdmwJKHI4KSssIHIxCisJamxzcwlMKDFuMCkKKwllbXVsCXIxLCByNiwgJDAsIHIyCisJYWRkbDIJcjExLCByMgorCWFkd2MJJDAsIHIzCisJc3VibDIJcjIsIChyOSkrCisJYWR3YwkkMCwgcjMKK0woMSk6CW1vdmwJKHI4KSssIHIxCisJamxzcwlMKDFuMSkKK0woMXAxKToJZW11bAlyMSwgcjYsICQwLCByMTAKKwlhZGRsMglyMywgcjEwCisJYWR3YwkkMCwgcjExCisJc3VibDIJcjEwLCAocjkpKworCWFkd2MJJDAsIHIxMQorCisJc29iZ3RyCXI3LCBMKHRwMSkKKwltb3ZsCXIxMSwgcjAKKwlyZXQKKworTCgxbjApOgllbXVsCXIxLCByNiwgJDAsIHIyCisJYWRkbDIJcjExLCByMgorCWFkd2MJcjYsIHIzCisJc3VibDIJcjIsIChyOSkrCisJYWR3YwkkMCwgcjMKKwltb3ZsCShyOCkrLCByMQorCWpnZXEJTCgxcDEpCitMKDFuMSk6CWVtdWwJcjEsIHI2LCAkMCwgcjEwCisJYWRkbDIJcjMsIHIxMAorCWFkd2MJcjYsIHIxMQorCXN1YmwyCXIxMCwgKHI5KSsKKwlhZHdjCSQwLCByMTEKKworCXNvYmd0cglyNywgTCh0cDEpCisJbW92bAlyMTEsIHIwCisJcmV0CisKK0wodjBfYmlnKToKKwlqbGJjCXI0LCBMKDIpCisKK0MgTG9vcCBmb3IgdjAgPj0gMHg4MDAwMDAwMAorTCh0cDIpOgltb3ZsCShyOCkrLCByMQorCWpsc3MJTCgybjApCisJZW11bAlyMSwgcjYsICQwLCByMgorCWFkZGwyCXIxMSwgcjIKKwlhZHdjCXIxLCByMworCXN1YmwyCXIyLCAocjkpKworCWFkd2MJJDAsIHIzCitMKDIpOgltb3ZsCShyOCkrLCByMQorCWpsc3MJTCgybjEpCitMKDJwMSk6CWVtdWwJcjEsIHI2LCAkMCwgcjEwCisJYWRkbDIJcjMsIHIxMAorCWFkd2MJcjEsIHIxMQorCXN1YmwyCXIxMCwgKHI5KSsKKwlhZHdjCSQwLCByMTEKKworCXNvYmd0cglyNywgTCh0cDIpCisJbW92bAlyMTEsIHIwCisJcmV0CisKK0woMm4wKToJZW11bAlyMSwgcjYsICQwLCByMgorCWFkZGwyCXIxMSwgcjIKKwlhZHdjCXI2LCByMworCXN1YmwyCXIyLCAocjkpKworCWFkd2MJcjEsIHIzCisJbW92bAkocjgpKywgcjEKKwlqZ2VxCUwoMnAxKQorTCgybjEpOgllbXVsCXIxLCByNiwgJDAsIHIxMAorCWFkZGwyCXIzLCByMTAKKwlhZHdjCXI2LCByMTEKKwlzdWJsMglyMTAsIChyOSkrCisJYWR3YwlyMSwgcjExCisKKwlzb2JndHIJcjcsIEwodHAyKQorCW1vdmwJcjExLCByMAorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvUkVBRE1FIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkN2FjOTAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9SRUFETUUKQEAgLTAsMCArMSw1MjUgQEAKK0NvcHlyaWdodCAxOTk5LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCisKKworCisgICAgICAgICAgICAgICAgICAgICAgWDg2IE1QTiBTVUJST1VUSU5FUworCisKK1RoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIG1wbiBmdW5jdGlvbnMgZm9yIHZhcmlvdXMgODB4ODYgY2hpcHMuCisKKworQ09ERSBPUkdBTklaQVRJT04KKworCXg4NiAgICAgICAgICAgICAgIGkzODYsIGdlbmVyaWMKKwl4ODYvaTQ4NiAgICAgICAgICBpNDg2CisJeDg2L3BlbnRpdW0gICAgICAgSW50ZWwgUGVudGl1bSAoUDUsIFA1NCkKKwl4ODYvcGVudGl1bS9tbXggICBJbnRlbCBQZW50aXVtIHdpdGggTU1YIChQNTUpCisJeDg2L3A2ICAgICAgICAgICAgSW50ZWwgUGVudGl1bSBQcm8KKwl4ODYvcDYvbW14ICAgICAgICBJbnRlbCBQZW50aXVtIElJLCBJSUkKKwl4ODYvcDYvcDNtbXggICAgICBJbnRlbCBQZW50aXVtIElJSQorCXg4Ni9rNiAgICAgICAgICAgIFwgQU1EIEs2CisJeDg2L2s2L21teCAgICAgICAgLworCXg4Ni9rNi9rNjJtbXggICAgIEFNRCBLNi0yCisJeDg2L2s3ICAgICAgICAgICAgXCBBTUQgQXRobG9uCisJeDg2L2s3L21teCAgICAgICAgLworCXg4Ni9wZW50aXVtNCAgICAgIFwKKwl4ODYvcGVudGl1bTQvbW14ICB8IEludGVsIFBlbnRpdW0gNAorCXg4Ni9wZW50aXVtNC9zc2UyIC8KKworCitUaGUgdG9wLWxldmVsIHg4NiBkaXJlY3RvcnkgY29udGFpbnMgYmxlbmRlZCBzdHlsZSBjb2RlLCBtZWFudCB0byBiZQorcmVhc29uYWJsZSBvbiBhbGwgeDg2cy4KKworCisKK1NUQVRVUworCitUaGUgY29kZSBpcyB3ZWxsLW9wdGltaXplZCBmb3IgQU1EIGFuZCBJbnRlbCBjaGlwcywgYnV0IHRoZXJlJ3Mgbm90aGluZworc3BlY2lmaWMgZm9yIEN5cml4IGNoaXBzLCBub3IgZm9yIGFjdHVhbCA4MDM4NiBhbmQgODA0ODYgY2hpcHMuCisKKworCitBU00gRklMRVMKKworVGhlIHg4NiAuYXNtIGZpbGVzIGFyZSBCU0Qgc3R5bGUgYXNzZW1ibGVyIGNvZGUsIGZpcnN0IHB1dCB0aHJvdWdoIG00IGZvcgorbWFjcm8gcHJvY2Vzc2luZy4gIFRoZSBnZW5lcmljIG1wbi9hc20tZGVmcy5tNCBpcyB1c2VkLCB0b2dldGhlciB3aXRoCittcG4veDg2L3g4Ni1kZWZzLm00LiAgU2VlIGNvbW1lbnRzIGluIHRob3NlIGZpbGVzLgorCitUaGUgY29kZSBpcyBtZWFudCBmb3IgdXNlIHdpdGggR05VICJnYXMiIG9yIGEgc3lzdGVtICJhcyIuICBUaGVyZSdzIG5vCitzdXBwb3J0IGZvciBhc3NlbWJsZXJzIHRoYXQgZGVtYW5kIEludGVsIHN0eWxlIGNvZGUuCisKKworCitTVEFDSyBGUkFNRQorCittNCBtYWNyb3MgYXJlIHVzZWQgdG8gZGVmaW5lIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCBvbiB0aGUgc3RhY2ssIGFuZCB0aGVzZQorYWN0IGxpa2UgY29tbWVudHMgb24gd2hhdCB0aGUgc3RhY2sgZnJhbWUgbG9va3MgbGlrZSB0b28uICBGb3IgZXhhbXBsZSwKK21wbl9tdWxfMSgpIGhhcyB0aGUgZm9sbG93aW5nLgorCisgICAgICAgIGRlZmZyYW1lKFBBUkFNX01VTFRJUExJRVIsIDE2KQorICAgICAgICBkZWZmcmFtZShQQVJBTV9TSVpFLCAgICAgICAxMikKKyAgICAgICAgZGVmZnJhbWUoUEFSQU1fU1JDLCAgICAgICAgIDgpCisgICAgICAgIGRlZmZyYW1lKFBBUkFNX0RTVCwgICAgICAgICA0KQorCitQQVJBTV9NVUxUSVBMSUVSIGJlY29tZXMgYEZSQU1FKzE2KCVlc3ApJywgYW5kIHRoZSBvdGhlcnMgc2ltaWxhcmx5LiAgVGhlCityZXR1cm4gYWRkcmVzcyBpcyBhdCBvZmZzZXQgMCwgYnV0IHRoZXJlJ3Mgbm90IG5vcm1hbGx5IGFueSBuZWVkIHRvIGFjY2VzcwordGhhdC4KKworRlJBTUUgaXMgcmVkZWZpbmVkIGFzIG5lY2Vzc2FyeSB0aHJvdWdoIHRoZSBjb2RlIHNvIGl0J3MgdGhlIG51bWJlciBvZiBieXRlcworcHVzaGVkIG9uIHRoZSBzdGFjaywgYW5kIGhlbmNlIHRoZSBvZmZzZXRzIGluIHRoZSBwYXJhbWV0ZXIgbWFjcm9zIHN0YXkKK2NvcnJlY3QuICBBdCB0aGUgc3RhcnQgb2YgYSByb3V0aW5lIEZSQU1FIHNob3VsZCBiZSB6ZXJvLgorCisgICAgICAgIGRlZmxpdChgRlJBTUUnLDApCisJLi4uCisJZGVmbGl0KGBGUkFNRScsNCkKKwkuLi4KKwlkZWZsaXQoYEZSQU1FJyw4KQorCS4uLgorCitIZWxwZXIgbWFjcm9zIEZSQU1FX3B1c2hsKCksIEZSQU1FX3BvcGwoKSwgRlJBTUVfYWRkbF9lc3AoKSBhbmQKK0ZSQU1FX3N1YmxfZXNwKCkgZXhpc3QgdG8gYWRqdXN0IEZSQU1FIGZvciB0aGUgZWZmZWN0IG9mIHRob3NlIGluc3RydWN0aW9ucywKK2FuZCBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mIGV4cGxpY2l0IGRlZmluaXRpb25zIGlmIHByZWZlcnJlZC4KK2RlZmZyYW1lX3B1c2hsKCkgaXMgYSBjb21iaW5hdGlvbiBGUkFNRV9wdXNobCgpIGFuZCBkZWZmcmFtZSgpLgorCitUaGVyZSdzIGdlbmVyYWxseSBzb21lIHNsYWNrbmVzcyBpbiByZWRlZmluaW5nIEZSQU1FLiAgSWYgbmV3IHZhbHVlcyBhcmVuJ3QKK2dvaW5nIHRvIGdldCB1c2VkIHRoZW4gdGhlIHJlZGVmaW5pdGlvbnMgYXJlIG9taXR0ZWQgdG8ga2VlcCBmcm9tIGNsdXR0ZXJpbmcKK3VwIHRoZSBjb2RlLiAgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSBhdCB0aGUgZW5kIG9mIGEgcm91dGluZSwgd2hlcmUgdGhlcmUKK21pZ2h0IGJlIGp1c3QgZm91ciBwb3BzIGFuZCB0aGVuIGEgcmV0LCBzbyBGUkFNRSBpc24ndCBnZXR0aW5nIHVzZWQuCisKK0xvY2FsIHZhcmlhYmxlcyBhbmQgc2F2ZWQgcmVnaXN0ZXJzIGNhbiBiZSBzaW1pbGFybHkgZGVmaW5lZCwgd2l0aCBuZWdhdGl2ZQorb2Zmc2V0cyByZXByZXNlbnRpbmcgc3RhY2sgc3BhY2UgYmVsb3cgdGhlIGluaXRpYWwgc3RhY2sgcG9pbnRlci4gIEZvcgorZXhhbXBsZSwKKworCWRlZmZyYW1lKFNBVkVfRVNJLCAgIC00KQorCWRlZmZyYW1lKFNBVkVfRURJLCAgIC04KQorCWRlZmZyYW1lKFZBUl9DT1VOVEVSLC0xMikKKworCWRlZmxpdChTVEFDS19TUEFDRSwgMTIpCisKK0hlcmUgU1RBQ0tfU1BBQ0UgZ2V0cyB1c2VkIGluIGEgInN1YmwgJFNUQUNLX1NQQUNFLCAlZXNwIiB0byBhbGxvY2F0ZSB0aGUKK3NwYWNlLCBhbmQgdGhhdCBpbnN0cnVjdGlvbiBtdXN0IGJlIGZvbGxvd2VkIGJ5IGEgcmVkZWZpbml0aW9uIG9mIEZSQU1FCisoc2V0dGluZyBpdCBlcXVhbCB0byBTVEFDS19TUEFDRSkgdG8gcmVmbGVjdCB0aGUgY2hhbmdlIGluICVlc3AuCisKK0RlZmluaXRpb25zIGZvciBwdXNoZWQgcmVnaXN0ZXJzIGFyZSBvbmx5IHB1dCBpbiB3aGVuIHRoZXkncmUgZ29pbmcgdG8gYmUKK3VzZWQuICBJZiByZWdpc3RlcnMgYXJlIGp1c3Qgc2F2ZWQgYW5kIHJlc3RvcmVkIHdpdGggcHVzaGVzIGFuZCBwb3BzIHRoZW4KK2RlZmluaXRpb25zIGFyZW4ndCBtYWRlLgorCisKKworQVNTRU1CTEVSIEVYUFJFU1NJT05TCisKK09ubHkgYWRkaXRpb24gYW5kIHN1YnRyYWN0aW9uIHNlZW0gdG8gYmUgdW5pdmVyc2FsbHkgYXZhaWxhYmxlLCBjZXJ0YWlubHkKK3RoYXQncyBhbGwgdGhlIFNvbGFyaXMgOCAiYXMiIHNlZW1zIHRvIGFjY2VwdC4gIElmIGV4cHJlc3Npb25zIGFyZSB3YW50ZWQKK3RoZW4gbTQgZXZhbCgpIHNob3VsZCBiZSB1c2VkLgorCitJbiBwYXJ0aWN1bGFyIG5vdGUgdGhhdCBhICIvIiBhbnl3aGVyZSBpbiBhIGxpbmUgc3RhcnRzIGEgY29tbWVudCBpbiBTb2xhcmlzCisiYXMiLCBhbmQgaW4gc29tZSBjb25maWd1cmF0aW9ucyBvZiBnYXMgdG9vLgorCisJYWRkbAkkMzIvMiwgJWVheCAgICAgICAgICAgPC0tIHdyb25nCisKKwlhZGRsCSRldmFsKDMyLzIpLCAlZWF4ICAgICA8LS0gcmlnaHQKKworQmludXRpbHMgZ2FzL2NvbmZpZy90Yy1pMzg2LmMgaGFzIGEgY2hvaWNlIGJldHdlZW4gIi8iIGJlaW5nIGEgY29tbWVudAorYW55d2hlcmUgaW4gYSBsaW5lLCBvciBvbmx5IGF0IHRoZSBzdGFydC4gIEZyZWVCU0QgcGF0Y2hlcyAyLjkuMSB0byBzZWxlY3QKK3RoZSBsYXR0ZXIsIGFuZCBmcm9tIDIuOS41IGl0J3MgdGhlIGRlZmF1bHQgZm9yIEdOVS9MaW51eCB0b28uCisKKworCitBU1NFTUJMRVIgQ09NTUVOVFMKKworU29sYXJpcyAiYXMiIGRvZXNuJ3Qgc3VwcG9ydCAiIyIgY29tbWVudGluZywgdXNpbmcgLyogKi8gaW5zdGVhZC4gIEZvciB0aGF0CityZWFzb24gIkMiIGNvbW1lbnRpbmcgaXMgdXNlZCAoc2VlIGFzbS1kZWZzLm00KSBhbmQgdGhlIGludGVybWVkaWF0ZSAiLnMiCitmaWxlcyBoYXZlIG5vIGNvbW1lbnRzLgorCitBbnkgY29tbWVudHMgYmVmb3JlIGluY2x1ZGUoYC4uL2NvbmZpZy5tNCcpIG11c3QgdXNlIG00ICJkbmwiLCBzaW5jZSBpdCdzCitvbmx5IGFmdGVyIHRoZSBpbmNsdWRlIHRoYXQgIkMiIGlzIGF2YWlsYWJsZS4gIEJ5IGNvbnZlbnRpb24gImRubCIgaXMgYWxzbwordXNlZCBmb3IgY29tbWVudHMgYWJvdXQgbTQgbWFjcm9zLgorCisKKworVEVNUE9SQVJZIExBQkVMUworCitUZW1wb3JhcnkgbnVtYmVyZWQgbGFiZWxzIGxpa2UgIjE6IiB1c2VkIGFzICIxZiIgb3IgIjFiIiBhcmUgYXZhaWxhYmxlIGluCisiZ2FzIiBhbmQgU29sYXJpcyAiYXMiLCBidXQgbm90IGluIFNDTyAiYXMiLiAgTm9ybWFsIEwoKSBsYWJlbHMgc2hvdWxkIGJlCit1c2VkIGluc3RlYWQsIHBvc3NpYmx5IHdpdGggYSBjb3VudGVyIHRvIG1ha2UgdGhlbSB1bmlxdWUsIHNlZSBqYWRjbDAoKSBpbgoreDg2LWRlZnMubTQgZm9yIGluc3RhbmNlLiAgQSBzZXBhcmF0ZSBjb3VudGVyIGZvciBlYWNoIG1hY3JvIG1ha2VzIGl0Citwb3NzaWJsZSB0byBuZXN0IHRoZW0sIGZvciBpbnN0YW5jZSBtb3ZsX3RleHRfYWRkcmVzcygpIGNhbiBiZSB1c2VkIHdpdGhpbgorYW4gQVNTRVJUKCkuCisKKyIxOiIgZXRjIG11c3QgYmUgYXZvaWRlZCBpbiBnY2MgX19hc21fXyBibG9ja3MgdG9vLiAgIiU9IiBmb3IgZ2VuZXJhdGluZyBhCit1bmlxdWUgbnVtYmVyIGxvb2tzIGxpa2UgYSBnb29kIGFsdGVybmF0aXZlLCBidXQgaXMgdGhhdCBhY3R1YWxseSBhCitkb2N1bWVudGVkIGZlYXR1cmU/ICBJbiBhbnkgY2FzZSB0aGlzIHByb2JsZW0gZG9lc24ndCBjdXJyZW50bHkgYXJpc2UuCisKKworCitaRVJPIERJU1BMQUNFTUVOVFMKKworSW4gYSBjb3VwbGUgb2YgcGxhY2VzIGFkZHJlc3NpbmcgbW9kZXMgbGlrZSAwKCVlYngpIHdpdGggYSBieXRlLXNpemVkIHplcm8KK2Rpc3BsYWNlbWVudCBhcmUgd2FudGVkLCByYXRoZXIgdGhhbiAoJWVieCkgd2l0aCBubyBkaXNwbGFjZW1lbnQuICBUaGVzZSBhcmUKK2VpdGhlciBmb3IgY29tcHV0ZWQganVtcHMgb3IgdG8gZ2V0IGRlc2lyYWJsZSBjb2RlIGFsaWdubWVudC4gIEV4cGxpY2l0CisuYnl0ZSBzZXF1ZW5jZXMgYXJlIHVzZWQgdG8gZW5zdXJlIHRoZSBhc3NlbWJsZXIgZG9lc24ndCB0dXJuIDAoJWVieCkgaW50bworKCVlYngpLiAgVGhlIFpkaXNwKCkgbWFjcm8gaW4geDg2LWRlZnMubTQgaXMgdXNlZCBmb3IgdGhpcy4KKworQ3VycmVudCBnYXMgMi45LjUgb3IgcmVjZW50IDIuOS4xIGxlYXZlIDAoJWVieCkgYXMgd3JpdHRlbiwgYnV0IG9sZCBnYXMKKzEuOTIuMyBjaGFuZ2VzIGl0LiAgSW4gZ2VuZXJhbCBjaGFuZ2luZyB3b3VsZCBiZSB0aGUgc29ydCBvZiAib3B0aW1pemF0aW9uIgorYW4gYXNzZW1ibGVyIG1pZ2h0IHBlcmZvcm0sIGhlbmNlIGV4cGxpY2l0ICIuYnl0ZSJzIGFyZSB1c2VkIHdoZXJlCituZWNlc3NhcnkuCisKKworCitTSExEL1NIUkQgSU5TVFJVQ1RJT05TCisKK1RoZSAlY2wgY291bnQgZm9ybXMgb2YgZG91YmxlIHNoaWZ0IGluc3RydWN0aW9ucyBsaWtlICJzaGxkbCAlY2wsJWVheCwlZWJ4IgorbXVzdCBiZSB3cml0dGVuICJzaGxkbCAlZWF4LCVlYngiIGZvciBzb21lIGFzc2VtYmxlcnMuICBnYXMgdGFrZXMgZWl0aGVyLAorU29sYXJpcyAiYXMiIGRvZXNuJ3QgYWxsb3cgJWNsLCBnY2MgZ2VuZXJhdGVzICVjbCBmb3IgZ2FzIGFuZCBOZVhUICh3aGljaCBpcworZ2FzKSwgYW5kIG9taXRzICVjbCBlbHNld2hlcmUuCisKK0ZvciBHTVAgYW4gYXV0b2NvbmYgdGVzdCBHTVBfQVNNX1g4Nl9TSExETF9DTCBpcyB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyCislY2wgc2hvdWxkIGJlIHVzZWQsIGFuZCB0aGUgbWFjcm9zIHNobGRsLCBzaHJkbCwgc2hsZHcgYW5kIHNocmR3IGluCittcG4veDg2L3g4Ni1kZWZzLm00IHBhc3MgdGhyb3VnaCBvciBvbWl0ICVjbCBhcyBuZWNlc3NhcnkuICBTZWUgdGhlIGNvbW1lbnRzCit3aXRoIHRob3NlIG1hY3JvcyBmb3IgdXNhZ2UuCisKKworCitJTVVMIElOU1RSVUNUSU9OCisKK0dDQyBjb25maWcvaTM4Ni9pMzg2Lm1kIChjdnMgcmV2IDEuMTg3LCAyMSBPY3QgMDApIHVuZGVyICptdWxzaTNfMSBub3RlcwordGhhdCB0aGUgZm9sbG93aW5nIHR3byBmb3JtcyBwcm9kdWNlIGlkZW50aWNhbCBvYmplY3QgY29kZQorCisJaW11bAkkMTIsICVlYXgKKwlpbXVsCSQxMiwgJWVheCwgJWVheAorCitidXQgdGhhdCB0aGUgZm9ybWVyIGlzbid0IGFjY2VwdGVkIGJ5IHNvbWUgYXNzZW1ibGVycywgaW4gcGFydGljdWxhciB0aGUgU0NPCitPU1I1IENPRkYgYXNzZW1ibGVyLiAgR01QIGZvbGxvd3MgR0NDIGFuZCB1c2VzIG9ubHkgdGhlIGxhdHRlciBmb3JtLgorCisoVGhpcyBhcHBsaWVzIG9ubHkgdG8gaW1tZWRpYXRlIG9wZXJhbmRzLCB0aGUgdGhyZWUgb3BlcmFuZCBmb3JtIGlzIG9ubHkKK3ZhbGlkIHdpdGggYW4gaW1tZWRpYXRlLikKKworCisKK0RJUkVDVElPTiBGTEFHCisKK1RoZSB4ODYgY2FsbGluZyBjb252ZW50aW9ucyBzYXkgdGhhdCB0aGUgZGlyZWN0aW9uIGZsYWcgc2hvdWxkIGJlIGNsZWFyIGF0CitmdW5jdGlvbiBlbnRyeSBhbmQgZXhpdC4gIChTZWUgaUJDUzIgYW5kIFNWUjQgQUJJIGJvb2tzLCByZWZlcmVuY2VzIGJlbG93LikKK0FsdGhvdWdoIHRoaXMgaGFzIGJlZW4gc28gc2luY2UgdGhlIHllYXIgZG90LCBpdCdzIG5vdCBhYnNvbHV0ZWx5IGNsZWFyCit3aGV0aGVyIGl0J3MgdW5pdmVyc2FsbHkgcmVzcGVjdGVkLiAgU2luY2UgaXQncyBiZXR0ZXIgdG8gYmUgc2FmZSB0aGFuCitzb3JyeSwgR01QIGZvbGxvd3MgZ2xpYmMgYW5kIGRvZXMgYSAiY2xkIiBpZiBpdCBkZXBlbmRzIG9uIHRoZSBkaXJlY3Rpb24KK2ZsYWcgYmVpbmcgY2xlYXIuICBUaGlzIGhhcHBlbnMgb25seSBpbiBhIGZldyBwbGFjZXMuCisKKworCitQT1NJVElPTiBJTkRFUEVOREVOVCBDT0RFCisKKyAgQ29kaW5nIFN0eWxlCisKKyAgICBEZWZpbmluZyB0aGUgc3ltYm9sIFBJQyBpbiBtNCBwcm9jZXNzaW5nIHNlbGVjdHMgU1ZSNCAvIEVMRiBzdHlsZQorICAgIHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUuICBUaGlzIGlzIG5lY2Vzc2FyeSBmb3Igc2hhcmVkIGxpYnJhcmllcworICAgIGJlY2F1c2UgdGhleSBjYW4gYmUgbWFwcGVkIGludG8gZGlmZmVyZW50IHByb2Nlc3NlcyBhdCBkaWZmZXJlbnQgdmlydHVhbAorICAgIGFkZHJlc3Nlcy4gIEFjdHVhbGx5LCByZWxvY2F0aW9ucyBhcmUgYWxsb3dlZCBidXQgdGV4dCBwYWdlcyB3aXRoCisgICAgcmVsb2NhdGlvbnMgYXJlbid0IHNoYXJlZCwgZGVmZWF0aW5nIHRoZSBwdXJwb3NlIG9mIGEgc2hhcmVkIGxpYnJhcnkuCisKKyAgICBUaGUgR09UIGlzIHVzZWQgdG8gYWNjZXNzIGdsb2JhbCBkYXRhLCBhbmQgdGhlIFBMVCBpcyB1c2VkIGZvcgorICAgIGZ1bmN0aW9ucy4gIFRoZSB1c2Ugb2YgdGhlIFBMVCBhZGRzIGEgZml4ZWQgY29zdCB0byBldmVyeSBmdW5jdGlvbiBjYWxsLAorICAgIGFuZCB0aGUgR09UIGFkZHMgYSBjb3N0IHRvIGFueSBmdW5jdGlvbiBhY2Nlc3NpbmcgZ2xvYmFsIHZhcmlhYmxlcy4KKyAgICBUaGVzZSBhcmUgc21hbGwgYnV0IG1pZ2h0IGJlIG5vdGljZWFibGUgd2hlbiB3b3JraW5nIHdpdGggc21hbGwKKyAgICBvcGVyYW5kcy4KKworICBTY29wZQorCisgICAgSXQncyBpbnRlbmRlZCwgYXMgYSBtYXR0ZXIgb2YgcG9saWN5LCB0aGF0IHJlZmVyZW5jZXMgd2l0aGluIGxpYmdtcCBhcmUKKyAgICByZXNvbHZlZCB3aXRoaW4gbGliZ21wLiAgQ2VydGFpbmx5IHRoZXJlJ3Mgbm8gbmVlZCBmb3IgYW4gYXBwbGljYXRpb24gdG8KKyAgICByZXBsYWNlIGFueSBpbnRlcm5hbHMsIGFuZCB3ZSB0YWtlIHRoZSB2aWV3IHRoYXQgdGhlcmUncyBubyB2YWx1ZSBpbiBhbgorICAgIGFwcGxpY2F0aW9uIHN1YnZlcnRpbmcgYW55dGhpbmcgZG9jdW1lbnRlZCBlaXRoZXIuCisKKyAgICBSZXNvbHZpbmcgcmVmZXJlbmNlcyB3aXRoaW4gbGliZ21wIGluIHRoZW9yeSBtZWFucyBjYWxscyBjYW4gYmUgbWFkZSB3aXRoIGEKKyAgICBwbGFpbiBQQy1yZWxhdGl2ZSBjYWxsIGluc3RydWN0aW9uLCB3aGljaCBpcyBmYXN0ZXIgYW5kIHNtYWxsZXIgdGhhbiBnb2luZworICAgIHRocm91Z2ggdGhlIFBMVCwgYW5kIGRhdGEgcmVmZXJlbmNlcyBjYW4gYmUgc2ltaWxhcmx5IFBDLXJlbGF0aXZlLCBzYXZpbmcgYQorICAgIEdPVCBlbnRyeSBhbmQgZmV0Y2ggZnJvbSB0aGVyZS4gIFVuZm9ydHVuYXRlbHkgdGhlIG5vcm1hbCBsaW5rZXIgYmVoYXZpb3VyCisgICAgZG9lc24ndCBhbGxvdyB1cyB0byBkbyB0aGlzLgorCisgICAgQnkgZGVmYXVsdCBhbiBSXzM4Nl9QQzMyIFBDLXJlbGF0aXZlIHJlZmVyZW5jZSwgZWl0aGVyIGZvciBhIGNhbGwgb3IgZm9yCisgICAgZGF0YSwgaXMgbGVmdCBpbiBsaWJnbXAuc28gYnkgdGhlIGxpbmtlciBzbyB0aGF0IGl0IGNhbiBiZSByZXNvbHZlZCBhdAorICAgIHJ1bnRpbWUgdG8gYSBsb2NhdGlvbiBpbiB0aGUgYXBwbGljYXRpb24gb3IgYW5vdGhlciBzaGFyZWQgbGlicmFyeS4gIFRoaXMKKyAgICBtZWFucyBhIHRleHQgc2VnbWVudCByZWxvY2F0aW9uIHdoaWNoIHdlIGRvbid0IHdhbnQuCisKKyAgLUJzeW1ib2xpYworCisgICAgVW5kZXIgdGhlICItQnN5bWJvbGljIiBvcHRpb24sIHRoZSBsaW5rZXIgcmVzb2x2ZXMgcmVmZXJlbmNlcyB0byBzeW1ib2xzCisgICAgd2l0aGluIGxpYmdtcC5zby4gIFRoaXMgZ2l2ZXMgdXMgdGhlIGRlc2lyZWQgZWZmZWN0IGZvciBSXzM4Nl9QQzMyLAorICAgIGllLiBpdCdzIHJlc29sdmVkIGF0IGxpbmsgdGltZS4gIEl0IGFsc28gcmVzb2x2ZXMgUl8zODZfUExUMzIgY2FsbHMKKyAgICBkaXJlY3RseSB0byB0aGVpciB0YXJnZXQgd2l0aG91dCBjcmVhdGluZyBhIFBMVCBlbnRyeSAodGhvdWdoIGlmIHRoaXMgaXMKKyAgICBkb25lIHRvIG5vcm1hbCBjb21waWxlci1nZW5lcmF0ZWQgY29kZSBpdCBzdGlsbCBsZWF2ZXMgYSBzZXR1cCBvZiAlZWJ4CisgICAgdG8gX0dMT0JBTF9PRkZTRVRfVEFCTEVfIHdoaWNoIG1heSB0aGVuIGJlIHVubmVjZXNzYXJ5KS4KKworICAgIFVuZm9ydHVuYXRlbHkgLUJzeW1ib2xpYyBkb2VzIGJhZCB0aGluZ3MgdG8gZ2xvYmFsIHZhcmlhYmxlcyBkZWZpbmVkIGluCisgICAgYSBzaGFyZWQgbGlicmFyeSBidXQgYWNjZXNzZWQgYnkgbm9uLVBJQyBjb2RlIGZyb20gdGhlIG1haW5saW5lIChvciBhCisgICAgc3RhdGljIGxpYnJhcnkpLgorCisgICAgVGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgbWFpbmxpbmUgbmVlZHMgYSBmaXhlZCBkYXRhIGFkZHJlc3MgdG8gYXZvaWQKKyAgICB0ZXh0IHNlZ21lbnQgcmVsb2NhdGlvbnMsIHNvIHNwYWNlIGlzIGFsbG9jYXRlZCBpbiBpdHMgZGF0YSBzZWdtZW50IGFuZAorICAgIHRoZSB2YWx1ZSBmcm9tIHRoZSB2YXJpYWJsZSBpcyBjb3BpZWQgZnJvbSB0aGUgc2hhcmVkIGxpYnJhcnkncyBkYXRhCisgICAgc2VnbWVudCB3aGVuIHRoZSBsaWJyYXJ5IGlzIGxvYWRlZC4gIFVuZGVyIC1Cc3ltYm9saWMsIGhvd2V2ZXIsCisgICAgcmVmZXJlbmNlcyBpbiB0aGUgc2hhcmVkIGxpYnJhcnkgYXJlIHRoZW4gcmVzb2x2ZWQgc3RpbGwgdG8gdGhlIHNoYXJlZAorICAgIGxpYnJhcnkgZGF0YSBhcmVhLiAgTm90IHN1cnByaXNpbmdseSBpdCBib21icyBiYWRseSB0byBoYXZlIG1haW5saW5lCisgICAgY29kZSBhbmQgbGlicmFyeSBjb2RlIGFjY2Vzc2luZyBkaWZmZXJlbnQgbG9jYXRpb25zIGZvciB3aGF0IHNob3VsZCBiZQorICAgIG9uZSB2YXJpYWJsZS4KKworICAgIE5vdGUgdGhhdCB0aGlzIC1Cc3ltYm9saWMgZWZmZWN0IGZvciB0aGUgc2hhcmVkIGxpYnJhcnkgaXMgbm90IGp1c3QgZm9yCisgICAgUl8zODZfUEMzMiBvZmZzZXRzIHdoaWNoIG1pZ2h0IGhhdmUgYmVlbiBjb29rZWQgdXAgaW4gYXNzZW1ibGVyLCBidXQgaXMKKyAgICBkb25lIGFsc28gZm9yIHRoZSBjb250ZW50cyBvZiBHT1QgZW50cmllcy4gIC1Cc3ltYm9saWMgc2ltcGx5IGFwcGxpZXMgYQorICAgIGdlbmVyYWwgcnVsZSB0aGF0IHN5bWJvbHMgYXJlIHJlc29sdmVkIGZpcnN0IGZyb20gdGhlIGxvY2FsIG1vZHVsZS4KKworICBWaXNpYmlsaXR5IEF0dHJpYnV0ZXMKKworICAgIEdDQyBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoInByb3RlY3RlZCIpKSksIHdoaWNoIGlzIGF2YWlsYWJsZSBpbgorICAgIHJlY2VudCB2ZXJzaW9ucywgZWcuIDMuMywgaXMgcHJvYmFibHkgd2hhdCB3ZSdkIGxpa2UgdG8gdXNlLiAgSXQgbWFrZXMKKyAgICBnY2MgZ2VuZXJhdGUgcGxhaW4gUEMtcmVsYXRpdmUgY2FsbHMgdG8gaW5kaWNhdGVkIGZ1bmN0aW9ucywgYW5kIGRpcmVjdHMKKyAgICB0aGUgbGlua2VyIHRvIHJlc29sdmUgcmVmZXJlbmNlcyB0byB0aGUgZ2l2ZW4gZnVuY3Rpb24gd2l0aGluIHRoZSBsaW5rCisgICAgbW9kdWxlLgorCisgICAgVW5mb3J0dW5hdGVseSwgYXMgb2YgZGViaWFuIGJpbnV0aWxzIDIuMTMuOTAuMC4xNiBhdCBsZWFzdCwgdGhlCisgICAgcmVzdWx0aW5nIGxpYmdtcC5zbyBjb21lcyBvdXQgd2l0aCB0ZXh0IHNlZ21lbnQgcmVsb2NhdGlvbnMsIHJlZmVyZW5jZXMKKyAgICBhcmUgbm90IHJlc29sdmVkIGF0IGxpbmsgdGltZS4gIElmIHRoZSBnY2MgZGVzY3JpcHRpb24gaXMgdG8gYmUgYmVsaWV2ZWQKKyAgICB0aGlzIGlzIHRoaXMgbm90IGhvdyBpdCBzaG91bGQgd29yay4gIElmIGEgc3ltYm9sIGNhbm5vdCBiZSBvdmVycmlkZGVuCisgICAgYnkgYW5vdGhlciBtb2R1bGUgdGhlbiBzdXJlbHkgcmVmZXJlbmNlcyB3aXRoaW4gdGhhdCBtb2R1bGUgY2FuIGJlCisgICAgcmVzb2x2ZWQgaW1tZWRpYXRlbHkgKGllLiBhdCBsaW5rIHRpbWUpLgorCisgIFByZXNlbnQKKworICAgIEluIGFueSBjYXNlLCBhbGwgdGhpcyBtZWFucyB0aGF0IHdlIGhhdmUgbm8gb3B0aW1pemF0aW9ucyB3ZSBjYW4KKyAgICB1c2VmdWxseSBtYWtlIHRvIGZ1bmN0aW9uIG9yIHZhcmlhYmxlIHVzYWdlcywgbmVpdGhlciBmb3IgYXNzZW1ibGVyIG5vcgorICAgIEMgY29kZS4gIFBlcmhhcHMgaW4gdGhlIGZ1dHVyZSB0aGUgdmlzaWJpbGl0eSBhdHRyaWJ1dGUgd2lsbCB3b3JrIGFzCisgICAgd2UnZCBsaWtlLgorCisKKworCitHTE9CQUwgT0ZGU0VUIFRBQkxFCisKK1RoZSBtYWdpYyBfR0xPQkFMX09GRlNFVF9UQUJMRV8gdXNlZCBieSBjb2RlIGVzdGFibGlzaGluZyB0aGUgYWRkcmVzcyBvZiB0aGUKK0dPVCBzb21ldGltZXMgcmVxdWlyZXMgYW4gZXh0cmEgdW5kZXJzY29yZSBwcmVmaXguICBTVlI0IHN5c3RlbXMgYW5kIE5ldEJTRAorZG9uJ3QgbmVlZCBhIHByZWZpeCwgT3BlbkJTRCBkb2VzIG5lZWQgb25lLiAgTm90ZSB0aGF0IE5ldEJTRCBhbmQgT3BlbkJTRAorYXJlIGJvdGggYS5vdXQgdW5kZXJzY29yZSBzeXN0ZW1zLCBzbyB0aGUgcHJlZml4IGZvciBfR0xPQkFMX09GRlNFVF9UQUJMRV8KK2lzIG5vdCBzaW1wbHkgdGhlIHNhbWUgYXMgdGhlIHByZWZpeCBmb3Igb3JkaW5hcnkgZ2xvYmFscy4KKworSW4gYW55IGNhc2UgaW4gdGhlIGFzbSBjb2RlIHdlIHdyaXRlIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyBhbmQgbGV0IGEgbWFjcm8KK2luIHg4Ni1kZWZzLm00IGFkZCBhbiBleHRyYSB1bmRlcnNjb3JlIGlmIHJlcXVpcmVkIChhY2NvcmRpbmcgdG8gYSBjb25maWd1cmUKK3Rlc3QpLgorCitPbGQgZ2FzIDEuOTIuMyB3aGljaCBjb21lcyB3aXRoIEZyZWVCU0QgMi4yLjggZ2V0cyBhIHNlZ21lbnRhdGlvbiBmYXVsdCB3aGVuCithc2tlZCB0byBhc3NlbWJsZSB0aGUgZm9sbG93aW5nLAorCisgICAgICAgIEwxOgorICAgICAgICAgICAgYWRkbCAgJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXytbLi1MMV0sICVlYngKKworSXQgc2VlbXMgdGhhdCB1c2luZyB0aGUgbGFiZWwgaW4gdGhlIHNhbWUgaW5zdHJ1Y3Rpb24gaXQgcmVmZXJzIHRvIGlzIHRoZQorcHJvYmxlbSwgc2luY2UgYSBub3AgaW4gYmV0d2VlbiB3b3Jrcy4gIEJ1dCB0aGUgc2ltcGxlc3Qgd29ya2Fyb3VuZCBpcyB0bworZm9sbG93IGdjYyBhbmQgb21pdCB0aGUgK1suLUwxXSBzaW5jZSBpdCBkb2VzIG5vdGhpbmcsCisKKyAgICAgICAgICAgIGFkZGwgICRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKKworQ3VycmVudCBnYXMgMi4xMCBnZW5lcmF0ZXMgaW5jb3JyZWN0IG9iamVjdCBjb2RlIHdoZW4gJWVheCBpcyB1c2VkIGluIHN1Y2ggYQorY29uc3RydWN0aW9uICh3aXRoIG9yIHdpdGhvdXQgK1suLUwxXSksCisKKyAgICAgICAgICAgIGFkZGwgICRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYXgKKworVGhlIFJfMzg2X0dPVFBDIGdldHMgYSBkaXNwbGFjZW1lbnQgb2YgMiByYXRoZXIgdGhhbiB0aGUgMSBhcHByb3ByaWF0ZSBmb3IKK3RoZSAxIGJ5dGUgb3Bjb2RlIG9mICJhZGRsICRuLCVlYXgiLiAgVGhlIGJlc3Qgd29ya2Fyb3VuZCBpcyBqdXN0IHRvIHVzZSBhbnkKK290aGVyIHJlZ2lzdGVyLCBzaW5jZSB0aGVuIGl0J3MgYSB0d28gYnl0ZSBvcGNvZGUrbW9kL3JtLiAgR0NDIGZvciBleGFtcGxlCithbHdheXMgdXNlcyAlZWJ4ICh3aGljaCBpcyBuZWVkZWQgZm9yIGNhbGxzIHRocm91Z2ggdGhlIFBMVCkuCisKK0Egc2ltaWxhciBwcm9ibGVtIG9jY3VycyBpbiBhbiBsZWFsIChhZ2FpbiB3aXRoIG9yIHdpdGhvdXQgYSArWy4tTDFdKSwKKworICAgICAgICAgICAgbGVhbCAgX0dMT0JBTF9PRkZTRVRfVEFCTEVfKCVlZGkpLCAlZWJ4CisKK1RoaXMgdGltZSB0aGUgUl8zODZfR09UUEMgZ2V0cyBhIGRpc3BsYWNlbWVudCBvZiAwIHJhdGhlciB0aGFuIHRoZSAyCithcHByb3ByaWF0ZSBmb3IgdGhlIG9wY29kZSBhbmQgbW9kL3JtLCBtYWtpbmcgdGhpcyBmb3JtIHVudXNhYmxlLgorCisKKworCitTSU1QTEUgTE9PUFMKKworVGhlIG92ZXJoZWFkcyBpbiBzZXR0aW5nIHVwIGZvciBhbiB1bnJvbGxlZCBsb29wIGNhbiBtZWFuIHRoYXQgYXQgc21hbGwKK3NpemVzIGEgc2ltcGxlIGxvb3AgaXMgZmFzdGVyLiAgTWFraW5nIHNtYWxsIHNpemVzIGdvIGZhc3QgaXMgaW1wb3J0YW50LAorZXZlbiBpZiBpdCBhZGRzIGEgY3ljbGUgb3IgdHdvIHRvIGJpZ2dlciBzaXplcy4gIFRvIHRoaXMgZW5kIHZhcmlvdXMKK3JvdXRpbmVzIGNob29zZSBiZXR3ZWVuIGEgc2ltcGxlIGxvb3AgYW5kIGFuIHVucm9sbGVkIGxvb3AgYWNjb3JkaW5nIHRvCitvcGVyYW5kIHNpemUuICBUaGUgcGF0aCB0byB0aGUgc2ltcGxlIGxvb3AsIG9yIHRvIHNwZWNpYWwgY2FzZSBjb2RlIGZvcgorc21hbGwgc2l6ZXMsIGlzIGFsd2F5cyBhcyBmYXN0IGFzIHBvc3NpYmxlLgorCitBZGRpbmcgYSBzaW1wbGUgbG9vcCByZXF1aXJlcyBhIGNvbmRpdGlvbmFsIGp1bXAgdG8gY2hvb3NlIGJldHdlZW4gdGhlCitzaW1wbGUgYW5kIHVucm9sbGVkIGNvZGUuICBUaGUgc2l6ZSBvZiBhIGJyYW5jaCBtaXNwcmVkaWN0aW9uIHBlbmFsdHkKK2FmZmVjdHMgd2hldGhlciBhIHNpbXBsZSBsb29wIGlzIHdvcnRod2hpbGUuCisKK1RoZSBjb252ZW50aW9uIGlzIGZvciBhbiBtNCBkZWZpbml0aW9uIFVOUk9MTF9USFJFU0hPTEQgdG8gc2V0IHRoZSBjcm9zc292ZXIKK3BvaW50LCB3aXRoIHNpemVzIDwgVU5ST0xMX1RIUkVTSE9MRCB1c2luZyB0aGUgc2ltcGxlIGxvb3AsIHNpemVzID49CitVTlJPTExfVEhSRVNIT0xEIHVzaW5nIHRoZSB1bnJvbGxlZCBsb29wLiAgSWYgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBhZGRzCithIGNvdXBsZSBvZiBjeWNsZXMgdG8gYW4gdW5yb2xsZWQgbG9vcCBzZXR1cCwgdGhlIHRocmVzaG9sZCB3aWxsIHZhcnkgd2l0aAorUElDIG9yIG5vbi1QSUMuICBTb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nIGlzIHR5cGljYWwuCisKKwlkZWZsaXQoVU5ST0xMX1RIUkVTSE9MRCwgaWZkZWYoYFBJQycsMTAsOCkpCisKK1RoZXJlJ3Mgbm8gYXV0b21hdGVkIHdheSB0byBkZXRlcm1pbmUgdGhlIHRocmVzaG9sZC4gIFNldHRpbmcgaXQgdG8gYSBzbWFsbAordmFsdWUgYW5kIHRoZW4gdG8gYSBiaWcgdmFsdWUgbWFrZXMgaXQgcG9zc2libGUgdG8gbWVhc3VyZSB0aGUgc2ltcGxlIGFuZAordW5yb2xsZWQgbG9vcHMgZWFjaCBvdmVyIGEgcmFuZ2Ugb2Ygc2l6ZXMsIGZyb20gd2hpY2ggdGhlIGNyb3Nzb3ZlciBwb2ludAorY2FuIGJlIGRldGVybWluZWQuICBBbHRlcm5hdGVseSwganVzdCBhZGp1c3QgdGhlIHRocmVzaG9sZCB1cCBvciBkb3duIHVudGlsCit0aGVyZSdzIG5vIG1vcmUgc3BlZWR1cHMuCisKKworCitVTlJPTExFRCBMT09QIENPRElORworCitUaGUgeDg2IGFkZHJlc3NpbmcgbW9kZXMgYWxsb3cgYSBieXRlIGRpc3BsYWNlbWVudCBvZiAtMTI4IHRvICsxMjcsIG1ha2luZworaXQgcG9zc2libGUgdG8gYWNjZXNzIDI1NiBieXRlcywgd2hpY2ggaXMgNjQgbGltYnMsIHdpdGhvdXQgYWRqdXN0aW5nCitwb2ludGVyIHJlZ2lzdGVycyB3aXRoaW4gdGhlIGxvb3AuICBEd29yZCBzaXplZCBkaXNwbGFjZW1lbnRzIGNhbiBiZSB1c2VkCit0b28sIGJ1dCB0aGV5IGluY3JlYXNlIGNvZGUgc2l6ZSwgYW5kIHVucm9sbGluZyB0byA2NCBvdWdodCB0byBiZSBlbm91Z2guCisKK1doZW4gdW5yb2xsaW5nIHRvIHRoZSBmdWxsIDY0IGxpbWJzL2xvb3AsIHRoZSBsaW1iIGF0IHRoZSB0b3Agb2YgdGhlIGxvb3AKK3dpbGwgaGF2ZSBhIGRpc3BsYWNlbWVudCBvZiAtMTI4LCBzbyBwb2ludGVycyBoYXZlIHRvIGhhdmUgYSBjb3JyZXNwb25kaW5nCisrMTI4IGFkZGVkIGJlZm9yZSBlbnRlcmluZyB0aGUgbG9vcC4gIFdoZW4gdW5yb2xsaW5nIHRvIDMyIGxpbWJzL2xvb3AKK2Rpc3BsYWNlbWVudHMgMCB0byAxMjcgY2FuIGJlIHVzZWQgd2l0aCAwIGF0IHRoZSB0b3Agb2YgdGhlIGxvb3AgYW5kIG5vCithZGp1c3RtZW50IG5lZWRlZCB0byB0aGUgcG9pbnRlcnMuCisKK1doZXJlIDY0IGxpbWJzL2xvb3AgaXMgc3VwcG9ydGVkLCB0aGUgKzEyOCBhZGp1c3RtZW50IGlzIGRvbmUgb25seSB3aGVuIDY0CitsaW1icy9sb29wIGlzIHNlbGVjdGVkLiAgVXN1YWxseSB0aGUgZ2FpbiBpbiBzcGVlZCB1c2luZyA2NCBpbnN0ZWFkIG9mIDMyIG9yCisxNiBpcyBzbWFsbCwgc28gc3VwcG9ydCBmb3IgNjQgbGltYnMvbG9vcCBpcyBnZW5lcmFsbHkgb25seSBmb3IgY29tcGFyaXNvbi4KKworCisKK0NPTVBVVEVEIEpVTVBTCisKK1doZW4gd29ya2luZyBmcm9tIGxlYXN0IHNpZ25pZmljYW50IGxpbWIgdG8gbW9zdCBzaWduaWZpY2FudCBsaW1iIChtb3N0Cityb3V0aW5lcykgdGhlIGNvbXB1dGVkIGp1bXAgYW5kIHBvaW50ZXIgY2FsY3VsYXRpb25zIGluIHByZXBhcmF0aW9uIGZvciBhbgordW5yb2xsZWQgbG9vcCBhcmUgYXMgZm9sbG93cy4KKworCVMgPSBvcGVyYW5kIHNpemUgaW4gbGltYnMKKwlOID0gbnVtYmVyIG9mIGxpbWJzIHBlciBsb29wIChVTlJPTExfQ09VTlQpCisJTCA9IGxvZzIgb2YgdW5yb2xsaW5nIChVTlJPTExfTE9HMikKKwlNID0gbWFzayBmb3IgdW5yb2xsaW5nIChVTlJPTExfTUFTSykKKwlDID0gY29kZSBieXRlcyBwZXIgbGltYiBpbiB0aGUgbG9vcAorCUIgPSBieXRlcyBwZXIgbGltYiAoNCBmb3IgeDg2KQorCisJY29tcHV0ZWQganVtcCAgICAgICAgICAgICgtUyAmIE0pICogQyArIGVudHJ5cG9pbnQKKwlzdWJ0cmFjdCBmcm9tIHBvaW50ZXJzICAgKC1TICYgTSkgKiBCCisJaW5pdGlhbCBsb29wIGNvdW50ZXIgICAgIChTLTEpID4+IEwKKwlkaXNwbGFjZW1lbnRzICAgICAgICAgICAgMCB0byBCKihOLTEpCisKK1RoZSBsb29wIGNvdW50ZXIgaXMgZGVjcmVtZW50ZWQgYXQgdGhlIGVuZCBvZiBlYWNoIGxvb3AsIGFuZCB0aGUgbG9vcGluZworc3RvcHMgd2hlbiB0aGUgZGVjcmVtZW50IHRha2VzIHRoZSBjb3VudGVyIHRvIC0xLiAgVGhlIGRpc3BsYWNlbWVudHMgYXJlIGZvcgordGhlIGFkZHJlc3NpbmcgYWNjZXNzaW5nIGVhY2ggbGltYiwgZWcuIGEgbG9hZCB3aXRoICJtb3ZsIGRpc3AoJWVieCksICVlYXgiLgorCitVc3VhbGx5IHRoZSBtdWx0aXBseSBieSAiQyIgY2FuIGJlIGhhbmRsZWQgd2l0aG91dCBhbiBpbXVsLCB1c2luZyBpbnN0ZWFkIGFuCitsZWFsLCBvciBhIHNoaWZ0IGFuZCBzdWJ0cmFjdC4KKworV2hlbiB3b3JraW5nIGZyb20gbW9zdCBzaWduaWZpY2FudCB0byBsZWFzdCBzaWduaWZpY2FudCBsaW1iIChlZy4gbXBuX2xzaGlmdAorYW5kIG1wbl9jb3B5ZCksIHRoZSBjYWxjdWxhdGlvbnMgY2hhbmdlIGFzIGZvbGxvd3MuCisKKwlhZGQgdG8gcG9pbnRlcnMgICAgICAgICAgKC1TICYgTSkgKiBCCisJZGlzcGxhY2VtZW50cyAgICAgICAgICAgIDAgdG8gLUIqKE4tMSkKKworCisKK09MRCBHQVMgMS45Mi4zCisKK1RoaXMgdmVyc2lvbiBjb21lcyB3aXRoIEZyZWVCU0QgMi4yLjggYW5kIGhhcyBhIGNvdXBsZSBvZiBncmVtbGlucyB0aGF0CithZmZlY3QgR01QIGNvZGUuCisKK0ZpcnN0bHksIGFuIGV4cHJlc3Npb24gaW52b2x2aW5nIHR3byBmb3J3YXJkIHJlZmVyZW5jZXMgdG8gbGFiZWxzIGNvbWVzIG91dAorYXMgemVyby4gIEZvciBleGFtcGxlLAorCisJCWFkZGwJJGJhci1mb28sICVlYXgKKwlmb286CisJCW5vcAorCWJhcjoKKworVGhpcyBzaG91bGQgbGVhZCB0byAiYWRkbCAkMSwgJWVheCIsIGJ1dCBpdCBjb21lcyBvdXQgYXMgImFkZGwgJDAsICVlYXgiLgorV2hlbiBvbmx5IG9uZSBmb3J3YXJkIHJlZmVyZW5jZSBpcyBpbnZvbHZlZCwgaXQgd29ya3MgY29ycmVjdGx5LCBhcyBmb3IKK2V4YW1wbGUsCisKKwlmb286CisJCWFkZGwJJGJhci1mb28sICVlYXgKKwkJbm9wCisJYmFyOgorCitTZWNvbmRseSwgYW4gZXhwcmVzc2lvbiBpbnZvbHZpbmcgdHdvIGxhYmVscyBjYW4ndCBiZSB1c2VkIGFzIHRoZQorZGlzcGxhY2VtZW50IGZvciBhbiBsZWFsLiAgRm9yIGV4YW1wbGUsCisKKwlmb286CisJCW5vcAorCWJhcjoKKwkJbGVhbAliYXItZm9vKCVlYXgsJWVieCw4KSwgJWVjeAorCitBIHNsaWdodGx5IGNyeXB0aWMgZXJyb3IgaXMgZ2l2ZW4sICJVbmltcGxlbWVudGVkIHNlZ21lbnQgdHlwZSAwIGluCitwYXJzZV9vcGVyYW5kIi4gIFdoZW4gb25seSBvbmUgbGFiZWwgaXMgdXNlZCBpdCdzIG9rLCBhbmQgdGhlIGxhYmVsIGNhbiBiZSBhCitmb3J3YXJkIHJlZmVyZW5jZSB0b28sIGFzIGZvciBleGFtcGxlLAorCisJCWxlYWwJZm9vKCVlYXgsJWVieCw4KSwgJWVjeAorCQlub3AKKwlmb286CisKK1RoZXNlIHByb2JsZW1zIG9ubHkgYWZmZWN0IFBJQyBjb21wdXRlZCBqdW1wIGNhbGN1bGF0aW9ucy4gIFRoZSB3b3JrYXJvdW5kcworYXJlIGp1c3QgdG8gZG8gYW4gbGVhbCB3aXRob3V0IGEgZGlzcGxhY2VtZW50IGFuZCB0aGVuIGFuIGFkZGwsIGFuZCB0byBtYWtlCitzdXJlIHRoZSBjb2RlIGlzIHBsYWNlZCBzbyB0aGF0IHRoZXJlJ3MgYXQgbW9zdCBvbmUgZm9yd2FyZCByZWZlcmVuY2UgaW4gdGhlCithZGRsLgorCisKKworUkVGRVJFTkNFUworCisiSW50ZWwgQXJjaGl0ZWN0dXJlIFNvZnR3YXJlIERldmVsb3BlcidzIE1hbnVhbCIsIHZvbHVtZXMgMSwgMmEsIDJiLCAzYSwgM2IsCisyMDA2LCBvcmRlciBudW1iZXJzIDI1MzY2NSB0aHJvdWdoIDI1MzY2OS4gIEF2YWlsYWJsZSBvbi1saW5lLAorCisJZnRwOi8vZG93bmxvYWQuaW50ZWwuY29tL2Rlc2lnbi9QZW50aXVtNC9tYW51YWxzLzI1MzY2NTE4LnBkZgorCWZ0cDovL2Rvd25sb2FkLmludGVsLmNvbS9kZXNpZ24vUGVudGl1bTQvbWFudWFscy8yNTM2NjYxOC5wZGYKKwlmdHA6Ly9kb3dubG9hZC5pbnRlbC5jb20vZGVzaWduL1BlbnRpdW00L21hbnVhbHMvMjUzNjY3MTgucGRmCisJZnRwOi8vZG93bmxvYWQuaW50ZWwuY29tL2Rlc2lnbi9QZW50aXVtNC9tYW51YWxzLzI1MzY2ODE4LnBkZgorCWZ0cDovL2Rvd25sb2FkLmludGVsLmNvbS9kZXNpZ24vUGVudGl1bTQvbWFudWFscy8yNTM2NjkxOC5wZGYKKworCisiU3lzdGVtIFYgQXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZSIsIFVuaXggU3lzdGVtIExhYm9yYXRvcmllcyBJbmMsIDE5OTIsCitwdWJsaXNoZWQgYnkgUHJlbnRpY2UgSGFsbCwgSVNCTiAwLTEzLTg4MDQxMC05LiAgQW5kIHRoZSAiSW50ZWwzODYgUHJvY2Vzc29yCitTdXBwbGVtZW50IiwgQVQmVCwgMTk5MSwgSVNCTiAwLTEzLTg3NzY4OS1YLiAgVGhlc2UgaGF2ZSBkZXRhaWxzIG9mIGNhbGxpbmcKK2NvbnZlbnRpb25zIGFuZCBFTEYgc2hhcmVkIGxpYnJhcnkgUElDIGNvZGluZy4gIFZlcnNpb25zIG9mIGJvdGggYXZhaWxhYmxlCitvbi1saW5lLAorCisJaHR0cDovL3d3dy5zY28uY29tL2RldmVsb3Blci9kZXZzcGVjcworCisiSW50ZWwzODYgRmFtaWx5IEJpbmFyeSBDb21wYXRpYmlsaXR5IFNwZWNpZmljYXRpb24gMiIsIEludGVsIENvcnBvcmF0aW9uLAorcHVibGlzaGVkIGJ5IE1jR3Jhdy1IaWxsLCAxOTkxLCBJU0JOIDAtMDctMDMxMjE5LTIuICAoU2FtZSBhcyB0aGUgYWJvdmUgMzg2CitBQkkgc3VwcGxlbWVudC4pCisKKworCistLS0tLS0tLS0tLS0tLS0tCitMb2NhbCB2YXJpYWJsZXM6Cittb2RlOiB0ZXh0CitmaWxsLWNvbHVtbjogNzYKK0VuZDoKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2FvcnNfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9hb3JzX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMzU5ZjUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9hb3JzX24uYXNtCkBAIC0wLDAgKzEsMjAyIEBACitkbmwgIHg4NiBtcG5fYWRkX24vbXBuX3N1Yl9uIC0tIG1wbiBhZGRpdGlvbiBhbmQgc3VidHJhY3Rpb24uCisKK2RubCAgQ29weXJpZ2h0IDE5OTIsIDE5OTQtMTk5NiwgMTk5OS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQyAgICAgY3ljbGVzL2xpbWIKK0MgUDUJMy4zNzUKK0MgUDYJMy4xMjUKK0MgSzYJMy41CitDIEs3CTIuMjUKK0MgUDQJOC43NQorCisKK2lmZGVmKGBPUEVSQVRJT05fYWRkX24nLGAKKwlkZWZpbmUoTTRfaW5zdCwgICAgICAgIGFkY2wpCisJZGVmaW5lKE00X2Z1bmN0aW9uX24sICBtcG5fYWRkX24pCisJZGVmaW5lKE00X2Z1bmN0aW9uX25jLCBtcG5fYWRkX25jKQorCisnLGBpZmRlZihgT1BFUkFUSU9OX3N1Yl9uJyxgCisJZGVmaW5lKE00X2luc3QsICAgICAgICBzYmJsKQorCWRlZmluZShNNF9mdW5jdGlvbl9uLCAgbXBuX3N1Yl9uKQorCWRlZmluZShNNF9mdW5jdGlvbl9uYywgbXBuX3N1Yl9uYykKKworJyxgbTRfZXJyb3IoYE5lZWQgT1BFUkFUSU9OX2FkZF9uIG9yIE9QRVJBVElPTl9zdWJfbgorJyknKScpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FkZF9uIG1wbl9hZGRfbmMgbXBuX3N1Yl9uIG1wbl9zdWJfbmMpCisKKworQyBtcF9saW1iX3QgTTRfZnVuY3Rpb25fbiAobXBfcHRyIGRzdCwgbXBfc3JjcHRyIHNyYzEsIG1wX3NyY3B0ciBzcmMyLAorQyAgICAgICAgICAgICAgICAgICAgICAgICAgbXBfc2l6ZV90IHNpemUpOworQyBtcF9saW1iX3QgTTRfZnVuY3Rpb25fbmMgKG1wX3B0ciBkc3QsIG1wX3NyY3B0ciBzcmMxLCBtcF9zcmNwdHIgc3JjMiwKK0MJICAgICAgICAgICAgICAgICAgICBtcF9zaXplX3Qgc2l6ZSwgbXBfbGltYl90IGNhcnJ5KTsKKworZGVmZnJhbWUoUEFSQU1fQ0FSUlksMjApCitkZWZmcmFtZShQQVJBTV9TSVpFLCAxNikKK2RlZmZyYW1lKFBBUkFNX1NSQzIsIDEyKQorZGVmZnJhbWUoUEFSQU1fU1JDMSwgOCkKK2RlZmZyYW1lKFBBUkFNX0RTVCwgIDQpCisKKwlURVhUCisJQUxJR04oOCkKKworUFJPTE9HVUUoTTRfZnVuY3Rpb25fbmMpCitkZWZsaXQoYEZSQU1FJywwKQorCisJcHVzaGwJJWVkaQkJRlJBTUVfcHVzaGwoKQorCXB1c2hsCSVlc2kJCUZSQU1FX3B1c2hsKCkKKworCW1vdmwJUEFSQU1fRFNULCVlZGkKKwltb3ZsCVBBUkFNX1NSQzEsJWVzaQorCW1vdmwJUEFSQU1fU1JDMiwlZWR4CisJbW92bAlQQVJBTV9TSVpFLCVlY3gKKworCW1vdmwJJWVjeCwlZWF4CisJc2hybAkkMywlZWN4CQkJQyBjb21wdXRlIGNvdW50IGZvciB1bnJvbGxlZCBsb29wCisJbmVnbAklZWF4CisJYW5kbAkkNywlZWF4CQkJQyBnZXQgaW5kZXggd2hlcmUgdG8gc3RhcnQgbG9vcAorCWp6CUwob29wZ28pCQlDIG5lY2Vzc2FyeSBzcGVjaWFsIGNhc2UgZm9yIDAKKwlpbmNsCSVlY3gJCQlDIGFkanVzdCBsb29wIGNvdW50CisJc2hsbAkkMiwlZWF4CQkJQyBhZGp1c3RtZW50IGZvciBwb2ludGVycy4uLgorCXN1YmwJJWVheCwlZWRpCQlDIC4uLiBzaW5jZSB0aGV5IGFyZSBvZmZzZXQgLi4uCisJc3VibAklZWF4LCVlc2kJCUMgLi4uIGJ5IGEgY29uc3RhbnQgd2hlbiB3ZSAuLi4KKwlzdWJsCSVlYXgsJWVkeAkJQyAuLi4gZW50ZXIgdGhlIGxvb3AKKwlzaHJsCSQyLCVlYXgJCQlDIHJlc3RvcmUgcHJldmlvdXMgdmFsdWUKKworaWZkZWYoYFBJQycsYAorCUMgQ2FsY3VsYXRlIHN0YXJ0IGFkZHJlc3MgaW4gbG9vcCBmb3IgUElDLiAgRHVlIHRvIGxpbWl0YXRpb25zIGluCisJQyBvbGQgZ2FzLCBMRihNNF9mdW5jdGlvbl9uLG9vcCktTCgwYSktMyBjYW5ub3QgYmUgcHV0IGludG8gdGhlIGxlYWwKKwljYWxsCUwoMGEpCitMKDBhKToJbGVhbAkoJWVheCwlZWF4LDgpLCVlYXgKKwlhZGRsCSglZXNwKSwlZWF4CisJYWRkbAkkTChvb3ApLUwoMGEpLTMsJWVheAorCWFkZGwJJDQsJWVzcAorJyxgCisJQyBDYWxjdWxhdGUgc3RhcnQgYWRkcmVzcyBpbiBsb29wIGZvciBub24tUElDLgorCWxlYWwJTChvb3ApLTMoJWVheCwlZWF4LDgpLCVlYXgKKycpCisKKwlDIFRoZXNlIGxpbmVzIGluaXRpYWxpemUgY2FycnkgZnJvbSB0aGUgNXRoIHBhcmFtZXRlci4gIFNob3VsZCBiZQorCUMgcG9zc2libGUgdG8gc2ltcGxpZnkuCisJcHVzaGwJJWVicAkJRlJBTUVfcHVzaGwoKQorCW1vdmwJUEFSQU1fQ0FSUlksJWVicAorCXNocmwJJWVicAkJCUMgc2hpZnQgYml0IDAgaW50byBjYXJyeQorCXBvcGwJJWVicAkJRlJBTUVfcG9wbCgpCisKKwlqbXAJKiVlYXgJCQlDIGp1bXAgaW50byBsb29wCisKK0VQSUxPR1VFKCkKKworCisJQUxJR04oMTYpCitQUk9MT0dVRShNNF9mdW5jdGlvbl9uKQorZGVmbGl0KGBGUkFNRScsMCkKKworCXB1c2hsCSVlZGkJCUZSQU1FX3B1c2hsKCkKKwlwdXNobAklZXNpCQlGUkFNRV9wdXNobCgpCisKKwltb3ZsCVBBUkFNX0RTVCwlZWRpCisJbW92bAlQQVJBTV9TUkMxLCVlc2kKKwltb3ZsCVBBUkFNX1NSQzIsJWVkeAorCW1vdmwJUEFSQU1fU0laRSwlZWN4CisKKwltb3ZsCSVlY3gsJWVheAorCXNocmwJJDMsJWVjeAkJCUMgY29tcHV0ZSBjb3VudCBmb3IgdW5yb2xsZWQgbG9vcAorCW5lZ2wJJWVheAorCWFuZGwJJDcsJWVheAkJCUMgZ2V0IGluZGV4IHdoZXJlIHRvIHN0YXJ0IGxvb3AKKwlqeglMKG9vcCkJCQlDIG5lY2Vzc2FyeSBzcGVjaWFsIGNhc2UgZm9yIDAKKwlpbmNsCSVlY3gJCQlDIGFkanVzdCBsb29wIGNvdW50CisJc2hsbAkkMiwlZWF4CQkJQyBhZGp1c3RtZW50IGZvciBwb2ludGVycy4uLgorCXN1YmwJJWVheCwlZWRpCQlDIC4uLiBzaW5jZSB0aGV5IGFyZSBvZmZzZXQgLi4uCisJc3VibAklZWF4LCVlc2kJCUMgLi4uIGJ5IGEgY29uc3RhbnQgd2hlbiB3ZSAuLi4KKwlzdWJsCSVlYXgsJWVkeAkJQyAuLi4gZW50ZXIgdGhlIGxvb3AKKwlzaHJsCSQyLCVlYXgJCQlDIHJlc3RvcmUgcHJldmlvdXMgdmFsdWUKKworaWZkZWYoYFBJQycsYAorCUMgQ2FsY3VsYXRlIHN0YXJ0IGFkZHJlc3MgaW4gbG9vcCBmb3IgUElDLiAgRHVlIHRvIGxpbWl0YXRpb25zIGluCisJQyBzb21lIGFzc2VtYmxlcnMsIEwob29wKS1MKDBiKS0zIGNhbm5vdCBiZSBwdXQgaW50byB0aGUgbGVhbAorCWNhbGwJTCgwYikKK0woMGIpOglsZWFsCSglZWF4LCVlYXgsOCksJWVheAorCWFkZGwJKCVlc3ApLCVlYXgKKwlhZGRsCSRMKG9vcCktTCgwYiktMywlZWF4CisJYWRkbAkkNCwlZXNwCisnLGAKKwlDIENhbGN1bGF0ZSBzdGFydCBhZGRyZXNzIGluIGxvb3AgZm9yIG5vbi1QSUMuCisJbGVhbAlMKG9vcCktMyglZWF4LCVlYXgsOCksJWVheAorJykKKwlqbXAJKiVlYXgJCQlDIGp1bXAgaW50byBsb29wCisKK0wob29wZ28pOgorCXB1c2hsCSVlYnAJCUZSQU1FX3B1c2hsKCkKKwltb3ZsCVBBUkFNX0NBUlJZLCVlYnAKKwlzaHJsCSVlYnAJCQlDIHNoaWZ0IGJpdCAwIGludG8gY2FycnkKKwlwb3BsCSVlYnAJCUZSQU1FX3BvcGwoKQorCisJQUxJR04oMTYpCitMKG9vcCk6CW1vdmwJKCVlc2kpLCVlYXgKKwlNNF9pbnN0CSglZWR4KSwlZWF4CisJbW92bAklZWF4LCglZWRpKQorCW1vdmwJNCglZXNpKSwlZWF4CisJTTRfaW5zdAk0KCVlZHgpLCVlYXgKKwltb3ZsCSVlYXgsNCglZWRpKQorCW1vdmwJOCglZXNpKSwlZWF4CisJTTRfaW5zdAk4KCVlZHgpLCVlYXgKKwltb3ZsCSVlYXgsOCglZWRpKQorCW1vdmwJMTIoJWVzaSksJWVheAorCU00X2luc3QJMTIoJWVkeCksJWVheAorCW1vdmwJJWVheCwxMiglZWRpKQorCW1vdmwJMTYoJWVzaSksJWVheAorCU00X2luc3QJMTYoJWVkeCksJWVheAorCW1vdmwJJWVheCwxNiglZWRpKQorCW1vdmwJMjAoJWVzaSksJWVheAorCU00X2luc3QJMjAoJWVkeCksJWVheAorCW1vdmwJJWVheCwyMCglZWRpKQorCW1vdmwJMjQoJWVzaSksJWVheAorCU00X2luc3QJMjQoJWVkeCksJWVheAorCW1vdmwJJWVheCwyNCglZWRpKQorCW1vdmwJMjgoJWVzaSksJWVheAorCU00X2luc3QJMjgoJWVkeCksJWVheAorCW1vdmwJJWVheCwyOCglZWRpKQorCWxlYWwJMzIoJWVkaSksJWVkaQorCWxlYWwJMzIoJWVzaSksJWVzaQorCWxlYWwJMzIoJWVkeCksJWVkeAorCWRlY2wJJWVjeAorCWpueglMKG9vcCkKKworCXNiYmwJJWVheCwlZWF4CisJbmVnbAklZWF4CisKKwlwb3BsCSVlc2kKKwlwb3BsCSVlZGkKKwlyZXQKKworRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYW9yc211bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2FvcnNtdWxfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRhODkwNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2FvcnNtdWxfMS5hc20KQEAgLTAsMCArMSwxNTYgQEAKK2RubCAgeDg2IF9fZ21wbl9hZGRtdWxfMSAoZm9yIDM4NiBhbmQgNDg2KSAtLSBNdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYQorZG5sICBsaW1iIGFuZCBhZGQgdGhlIHJlc3VsdCB0byBhIHNlY29uZCBsaW1iIHZlY3Rvci4KKworZG5sICBDb3B5cmlnaHQgMTk5MiwgMTk5NCwgMTk5NywgMTk5OS0yMDAyLCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJCQkgICAgY3ljbGVzL2xpbWIKK0MgUDUJCQkJMTQuNzUKK0MgUDYgbW9kZWwgMC04LDEwLTEyCQkgNy41CitDIFA2IG1vZGVsIDkgIChCYW5pYXMpCQkgNi43CitDIFA2IG1vZGVsIDEzIChEb3RoYW4pCQkgNi43NQorQyBQNCBtb2RlbCAwICAoV2lsbGFtZXR0ZSkJMjQuMAorQyBQNCBtb2RlbCAxICAoPykJCTI0LjAKK0MgUDQgbW9kZWwgMiAgKE5vcnRod29vZCkJMjQuMAorQyBQNCBtb2RlbCAzICAoUHJlc2NvdHQpCitDIFA0IG1vZGVsIDQgIChOb2NvbmEpCitDIEludGVsIEF0b20KK0MgQU1EIEs2CQkJMTIuNQorQyBBTUQgSzcJCQkgNS4yNQorQyBBTUQgSzgKK0MgQU1EIEsxMAorCisKK2lmZGVmKGBPUEVSQVRJT05fYWRkbXVsXzEnLGAKKyAgICAgIGRlZmluZShNNF9pbnN0LCAgICAgICAgYWRkbCkKKyAgICAgIGRlZmluZShNNF9mdW5jdGlvbl8xLCAgbXBuX2FkZG11bF8xKQorCisnLGBpZmRlZihgT1BFUkFUSU9OX3N1Ym11bF8xJyxgCisgICAgICBkZWZpbmUoTTRfaW5zdCwgICAgICAgIHN1YmwpCisgICAgICBkZWZpbmUoTTRfZnVuY3Rpb25fMSwgIG1wbl9zdWJtdWxfMSkKKworJyxgbTRfZXJyb3IoYE5lZWQgT1BFUkFUSU9OX2FkZG11bF8xIG9yIE9QRVJBVElPTl9zdWJtdWxfMQorJyknKScpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FkZG11bF8xIG1wbl9zdWJtdWxfMSkKKworCitDIG1wX2xpbWJfdCBNNF9mdW5jdGlvbl8xIChtcF9wdHIgZHN0LCBtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSwKK0MgICAgICAgICAgICAgICAgICAgICAgICAgIG1wX2xpbWJfdCBtdWx0KTsKKworZGVmaW5lKFBBUkFNX01VTFRJUExJRVIsIGBGUkFNRSsxNiglZXNwKScpCitkZWZpbmUoUEFSQU1fU0laRSwgICAgICAgYEZSQU1FKzEyKCVlc3ApJykKK2RlZmluZShQQVJBTV9TUkMsICAgICAgICBgRlJBTUUrOCglZXNwKScpCitkZWZpbmUoUEFSQU1fRFNULCAgICAgICAgYEZSQU1FKzQoJWVzcCknKQorCisJVEVYVAorCUFMSUdOKDgpCisKK1BST0xPR1VFKE00X2Z1bmN0aW9uXzEpCitkZWZsaXQoYEZSQU1FJywwKQorCisJcHVzaGwJJWVkaQorCXB1c2hsCSVlc2kKKwlwdXNobAklZWJ4CisJcHVzaGwJJWVicAorZGVmbGl0KGBGUkFNRScsMTYpCisKKwltb3ZsCVBBUkFNX0RTVCwlZWRpCisJbW92bAlQQVJBTV9TUkMsJWVzaQorCW1vdmwJUEFSQU1fU0laRSwlZWN4CisKKwl4b3JsCSVlYngsJWVieAorCWFuZGwJJDMsJWVjeAorCWp6CUwoZW5kMCkKKworTChvb3AwKToKKwltb3ZsCSglZXNpKSwlZWF4CisJbXVsbAlQQVJBTV9NVUxUSVBMSUVSCisJbGVhbAk0KCVlc2kpLCVlc2kKKwlhZGRsCSVlYngsJWVheAorCW1vdmwJJDAsJWVieAorCWFkY2wJJWVieCwlZWR4CisJTTRfaW5zdAklZWF4LCglZWRpKQorCWFkY2wJJWVkeCwlZWJ4CUMgcHJvcGFnYXRlIGNhcnJ5IGludG8gY3lsaW1iCisKKwlsZWFsCTQoJWVkaSksJWVkaQorCWRlY2wJJWVjeAorCWpueglMKG9vcDApCisKK0woZW5kMCk6CisJbW92bAlQQVJBTV9TSVpFLCVlY3gKKwlzaHJsCSQyLCVlY3gKKwlqeglMKGVuZCkKKworCUFMSUdOKDgpCitMKG9vcCk6CW1vdmwJKCVlc2kpLCVlYXgKKwltdWxsCVBBUkFNX01VTFRJUExJRVIKKwlhZGRsCSVlYXgsJWVieAorCW1vdmwJJDAsJWVicAorCWFkY2wJJWVkeCwlZWJwCisKKwltb3ZsCTQoJWVzaSksJWVheAorCW11bGwJUEFSQU1fTVVMVElQTElFUgorCU00X2luc3QJJWVieCwoJWVkaSkKKwlhZGNsCSVlYXgsJWVicAlDIG5ldyBsbyArIGN5bGltYgorCW1vdmwJJDAsJWVieAorCWFkY2wJJWVkeCwlZWJ4CisKKwltb3ZsCTgoJWVzaSksJWVheAorCW11bGwJUEFSQU1fTVVMVElQTElFUgorCU00X2luc3QJJWVicCw0KCVlZGkpCisJYWRjbAklZWF4LCVlYngJQyBuZXcgbG8gKyBjeWxpbWIKKwltb3ZsCSQwLCVlYnAKKwlhZGNsCSVlZHgsJWVicAorCisJbW92bAkxMiglZXNpKSwlZWF4CisJbXVsbAlQQVJBTV9NVUxUSVBMSUVSCisJTTRfaW5zdAklZWJ4LDgoJWVkaSkKKwlhZGNsCSVlYXgsJWVicAlDIG5ldyBsbyArIGN5bGltYgorCW1vdmwJJDAsJWVieAorCWFkY2wJJWVkeCwlZWJ4CisKKwlNNF9pbnN0CSVlYnAsMTIoJWVkaSkKKwlhZGNsCSQwLCVlYngJCUMgcHJvcGFnYXRlIGNhcnJ5IGludG8gY3lsaW1iCisKKwlsZWFsCTE2KCVlc2kpLCVlc2kKKwlsZWFsCTE2KCVlZGkpLCVlZGkKKwlkZWNsCSVlY3gKKwlqbnoJTChvb3ApCisKK0woZW5kKToJbW92bAklZWJ4LCVlYXgKKworCXBvcGwJJWVicAorCXBvcGwJJWVieAorCXBvcGwJJWVzaQorCXBvcGwJJWVkaQorCXJldAorCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9hdG9tL2FvcnJsc2gxX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYXRvbS9hb3JybHNoMV9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDFhNjUwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYXRvbS9hb3JybHNoMV9uLmFzbQpAQCAtMCwwICsxLDUzIEBACitkbmwgIEludGVsIEF0b20gbXBuX3JzYmxzaDFfbiAtLSBycFtdID0gKHZwW10gPDwgMSkgLSB1cFtdCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IE1hcmNvIEJvZHJhdG8uCisKK2RubCAgQ29weXJpZ2h0IDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworZGVmaW5lKExTSCwgMSkKK2RlZmluZShSU0gsIDMxKQorCitpZmRlZihgT1BFUkFUSU9OX2FkZGxzaDFfbicsIGAKKwlkZWZpbmUoTTRfaW5zdCwgICAgICAgIGFkYykKKwlkZWZpbmUoTTRfb3BwLCAgICAgICAgIHN1YikKKwlkZWZpbmUoTTRfZnVuY3Rpb24sICAgIG1wbl9hZGRsc2gxX24pCisJZGVmaW5lKE00X2Z1bmN0aW9uX2MsICBtcG5fYWRkbHNoMV9uYykKKycsYGlmZGVmKGBPUEVSQVRJT05fcnNibHNoMV9uJywgYAorCWRlZmluZShNNF9pbnN0LCAgICAgICAgc2JiKQorCWRlZmluZShNNF9vcHAsICAgICAgICAgYWRkKQorCWRlZmluZShNNF9mdW5jdGlvbiwgICAgbXBuX3JzYmxzaDFfbikKKwlkZWZpbmUoTTRfZnVuY3Rpb25fYywgIG1wbl9yc2Jsc2gxX25jKQorJyxgbTRfZXJyb3IoYE5lZWQgT1BFUkFUSU9OX2FkZGxzaDFfbiBvciBPUEVSQVRJT05fcnNibHNoMV9uCisnKScpJykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fYWRkbHNoMV9uIG1wbl9hZGRsc2gxX25jIG1wbl9yc2Jsc2gxX24gbXBuX3JzYmxzaDFfbmMpCisKK2luY2x1ZGVfbXBuKGB4ODYvYXRvbS9hb3JybHNoQ19uLmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9hdG9tL2FvcnJsc2gyX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYXRvbS9hb3JybHNoMl9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGY0NDE5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYXRvbS9hb3JybHNoMl9uLmFzbQpAQCAtMCwwICsxLDUzIEBACitkbmwgIEludGVsIEF0b20gbXBuX2FkZGxzaDJfbi9tcG5fcnNibHNoMl9uIC0tIHJwW10gPSAodnBbXSA8PCAyKSArLSB1cFtdCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IE1hcmNvIEJvZHJhdG8uCisKK2RubCAgQ29weXJpZ2h0IDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworZGVmaW5lKExTSCwgMikKK2RlZmluZShSU0gsIDMwKQorCitpZmRlZihgT1BFUkFUSU9OX2FkZGxzaDJfbicsIGAKKwlkZWZpbmUoTTRfaW5zdCwgICAgICAgIGFkY2wpCisJZGVmaW5lKE00X29wcCwgICAgICAgICBzdWJsKQorCWRlZmluZShNNF9mdW5jdGlvbiwgICAgbXBuX2FkZGxzaDJfbikKKwlkZWZpbmUoTTRfZnVuY3Rpb25fYywgIG1wbl9hZGRsc2gyX25jKQorJyxgaWZkZWYoYE9QRVJBVElPTl9yc2Jsc2gyX24nLCBgCisJZGVmaW5lKE00X2luc3QsICAgICAgICBzYmJsKQorCWRlZmluZShNNF9vcHAsICAgICAgICAgYWRkbCkKKwlkZWZpbmUoTTRfZnVuY3Rpb24sICAgIG1wbl9yc2Jsc2gyX24pCisJZGVmaW5lKE00X2Z1bmN0aW9uX2MsICBtcG5fcnNibHNoMl9uYykKKycsYG00X2Vycm9yKGBOZWVkIE9QRVJBVElPTl9hZGRsc2gyX24gb3IgT1BFUkFUSU9OX3JzYmxzaDJfbgorJyknKScpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FkZGxzaDJfbiBtcG5fYWRkbHNoMl9uYyBtcG5fcnNibHNoMl9uIG1wbl9yc2Jsc2gyX25jKQorCitpbmNsdWRlX21wbihgeDg2L2F0b20vYW9ycmxzaENfbi5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYXRvbS9hb3JybHNoQ19uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2F0b20vYW9ycmxzaENfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFjZmU0OQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2F0b20vYW9ycmxzaENfbi5hc20KQEAgLTAsMCArMSwxNTYgQEAKK2RubCAgSW50ZWwgQXRvbSBtcG5fYWRkbHNoQ19uL21wbl9yc2Jsc2hDX24gLS0gcnBbXSA9ICh2cFtdIDw8IEMpICstIHVwW10KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgTWFyY28gQm9kcmF0by4KKworZG5sICBDb3B5cmlnaHQgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDIG1wX2xpbWJfdCBtcG5fYWRkbHNoQ19uIChtcF9wdHIgZHN0LCBtcF9zcmNwdHIgc3JjMSwgbXBfc3JjcHRyIHNyYzIsCitDICAgICAgICAgICAgICAgICAgICAgICAgICBtcF9zaXplX3Qgc2l6ZSk7CitDIG1wX2xpbWJfdCBtcG5fYWRkbHNoQ19uYyAobXBfcHRyIGRzdCwgbXBfc3JjcHRyIHNyYzEsIG1wX3NyY3B0ciBzcmMyLAorQyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wX3NpemVfdCBzaXplLCBtcF9saW1iX3QgY2FycnkpOworQyBtcF9saW1iX3QgbXBuX3JzYmxzaENfbiAobXBfcHRyIGRzdCwgbXBfc3JjcHRyIHNyYzEsIG1wX3NyY3B0ciBzcmMyLAorQyAgICAgICAgICAgICAgICAgICAgICAgICAgbXBfc2l6ZV90IHNpemUpOworQyBtcF9saW1iX3QgbXBuX3JzYmxzaENfbmMgKG1wX3B0ciBkc3QsIG1wX3NyY3B0ciBzcmMxLCBtcF9zcmNwdHIgc3JjMiwKK0MgICAgICAgICAgICAgICAgICAgICAgICAgICBtcF9zaXplX3Qgc2l6ZSwgbXBfc2lnbmVkX2xpbWJfdCBjYXJyeSk7CisKK0MJCQkJY3ljbGVzL2xpbWIKK0MgUDUKK0MgUDYgbW9kZWwgMC04LDEwLTEyCitDIFA2IG1vZGVsIDkgIChCYW5pYXMpCitDIFA2IG1vZGVsIDEzIChEb3RoYW4pCitDIFA0IG1vZGVsIDAgIChXaWxsYW1ldHRlKQorQyBQNCBtb2RlbCAxICAoPykKK0MgUDQgbW9kZWwgMiAgKE5vcnRod29vZCkKK0MgUDQgbW9kZWwgMyAgKFByZXNjb3R0KQorQyBQNCBtb2RlbCA0ICAoTm9jb25hKQorQyBJbnRlbCBBdG9tCQkJIDYKK0MgQU1EIEs2CitDIEFNRCBLNworQyBBTUQgSzgKK0MgQU1EIEsxMAorCitkZWZmcmFtZShQQVJBTV9DT1JCLAkyMCkKK2RlZmZyYW1lKFBBUkFNX1NJWkUsCTE2KQorZGVmZnJhbWUoUEFSQU1fREJMRCwJMTIpCitkZWZmcmFtZShQQVJBTV9TUkMsCSA4KQorZGVmZnJhbWUoUEFSQU1fRFNULAkgNCkKKworZG5sICByZS11c2UgcGFyYW1ldGVyIHNwYWNlCitkZWZpbmUoVkFSX0NPVU5ULGBQQVJBTV9TSVpFJykKK2RlZmluZShTQVZFX0VCUCxgUEFSQU1fREJMRCcpCitkZWZpbmUoU0FWRV9WUCxgUEFSQU1fU1JDJykKK2RlZmluZShTQVZFX1VQLGBQQVJBTV9EU1QnKQorCitkZWZpbmUoTSwgZXZhbChtNF9sc2hpZnQoMSxMU0gpKSkKK2RlZmluZShgcnAnLCAgYCVlZGknKQorZGVmaW5lKGB1cCcsICBgJWVzaScpCitkZWZpbmUoYHZwJywgIGAlZWJ4JykKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oOCkKKworUFJPTE9HVUUoTTRfZnVuY3Rpb25fYykKK2RlZmxpdChgRlJBTUUnLDApCisJbW92bAlQQVJBTV9DT1JCLCAlZWF4CisJbW92bAklZWF4LCAlZWR4CisJc2hyCSRMU0gsICVlZHgKKwlhbmRsCSQxLCAlZWR4CisJTTRfb3BwCSVlZHgsICVlYXgKKwlqbXAJTChzdGFydF9uYykKK0VQSUxPR1VFKCkKKworUFJPTE9HVUUoTTRfZnVuY3Rpb24pCitkZWZsaXQoYEZSQU1FJywwKQorCisJeG9yCSVlYXgsICVlYXgKKwl4b3IJJWVkeCwgJWVkeAorTChzdGFydF9uYyk6CisJcHVzaAlycAkJCUZSQU1FX3B1c2hsKCkKKworCW1vdglQQVJBTV9TSVpFLCAlZWN4CUMgc2l6ZQorCW1vdglQQVJBTV9EU1QsIHJwCisJbW92CXVwLCBTQVZFX1VQCisJaW5jbAklZWN4CQkJQyBzaXplICsgMQorCW1vdglQQVJBTV9TUkMsIHVwCisJbW92CXZwLCBTQVZFX1ZQCisJc2hyCSVlY3gJCQlDIChzaXplKzEpXDIKKwltb3YJUEFSQU1fREJMRCwgdnAKKwltb3YJJWVicCwgU0FWRV9FQlAKKwltb3YJJWVjeCwgVkFSX0NPVU5UCisJam5jCUwoZW50cnkpCQlDIHNpemUgb2RkCisKKwlzaHIJJWVkeAkJCUMgc2l6ZSBldmVuCisJbW92CSh2cCksICVlY3gKKwlsZWEJNCh2cCksIHZwCisJbGVhCSglZWF4LCVlY3gsTSksICVlZHgKKwltb3YJJWVjeCwgJWVheAorCWxlYQktNCh1cCksIHVwCisJbGVhCS00KHJwKSwgcnAKKwlqbXAJTChlbnRldmVuKQorCisJQUxJR04oMTYpCitMKG9vcCk6CisJbGVhCSglZWF4LCVlY3gsTSksICVlYnAKKwlzaHIJJFJTSCwgJWVjeAorCW1vdgk0KHZwKSwgJWVheAorCXNocgklZWR4CisJbGVhCTgodnApLCB2cAorCU00X2luc3QJKHVwKSwgJWVicAorCWxlYQkoJWVjeCwlZWF4LE0pLCAlZWR4CisJbW92CSVlYnAsIChycCkKK0woZW50ZXZlbik6CisJTTRfaW5zdAk0KHVwKSwgJWVkeAorCWxlYQk4KHVwKSwgdXAKKwltb3YJJWVkeCwgNChycCkKKwlhZGMJJWVkeCwgJWVkeAorCXNocgkkUlNILCAlZWF4CisJbGVhCTgocnApLCBycAorTChlbnRyeSk6CisJbW92CSh2cCksICVlY3gKKwlkZWNsCVZBUl9DT1VOVAorCWpueglMKG9vcCkKKworCWxlYQkoJWVheCwlZWN4LE0pLCAlZWJwCisJc2hyCSRSU0gsICVlY3gKKwlzaHIJJWVkeAorCW1vdglTQVZFX1ZQLCB2cAorCU00X2luc3QJKHVwKSwgJWVicAorCW1vdgklZWN4LCAlZWF4CisJbW92CVNBVkVfVVAsIHVwCisJTTRfaW5zdAkkMCwgJWVheAorCW1vdgklZWJwLCAocnApCisJbW92CVNBVkVfRUJQLCAlZWJwCisJcG9wCXJwCQkJRlJBTUVfcG9wbCgpCisJcmV0CitFUElMT0dVRSgpCisKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYXRvbS9hb3JzX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYXRvbS9hb3JzX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZWMyODcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9hdG9tL2FvcnNfbi5hc20KQEAgLTAsMCArMSwxNTkgQEAKK2RubCAgSW50ZWwgQXRvbSBtcG5fYWRkX24vbXBuX3N1Yl9uIC0tIHJwW10gPSB1cFtdICstIHZwW10uCisKK2RubCAgQ29weXJpZ2h0IDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IE1hcmNvIEJvZHJhdG8uCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkJCSAgICBjeWNsZXMvbGltYgorQyBQNQorQyBQNiBtb2RlbCAwLTgsMTAtMTIKK0MgUDYgbW9kZWwgOSAgKEJhbmlhcykKK0MgUDYgbW9kZWwgMTMgKERvdGhhbikKK0MgUDQgbW9kZWwgMCAgKFdpbGxhbWV0dGUpCitDIFA0IG1vZGVsIDEgICg/KQorQyBQNCBtb2RlbCAyICAoTm9ydGh3b29kKQorQyBQNCBtb2RlbCAzICAoUHJlc2NvdHQpCitDIFA0IG1vZGVsIDQgIChOb2NvbmEpCitDIEludGVsIEF0b20JCQkgMworQyBBTUQgSzYKK0MgQU1EIEs3CitDIEFNRCBLOAorQyBBTUQgSzEwCisKK2lmZGVmKGBPUEVSQVRJT05fYWRkX24nLCBgCisJZGVmaW5lKE00X2luc3QsICAgICAgICBhZGNsKQorCWRlZmluZShNNF9mdW5jdGlvbl9uLCAgbXBuX2FkZF9uKQorCWRlZmluZShNNF9mdW5jdGlvbl9uYywgbXBuX2FkZF9uYykKKwlkZWZpbmUoTTRfZGVzY3JpcHRpb24sIGFkZCkKKycsYGlmZGVmKGBPUEVSQVRJT05fc3ViX24nLCBgCisJZGVmaW5lKE00X2luc3QsICAgICAgICBzYmJsKQorCWRlZmluZShNNF9mdW5jdGlvbl9uLCAgbXBuX3N1Yl9uKQorCWRlZmluZShNNF9mdW5jdGlvbl9uYywgbXBuX3N1Yl9uYykKKwlkZWZpbmUoTTRfZGVzY3JpcHRpb24sIHN1YnRyYWN0KQorJyxgbTRfZXJyb3IoYE5lZWQgT1BFUkFUSU9OX2FkZF9uIG9yIE9QRVJBVElPTl9zdWJfbgorJyknKScpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FkZF9uIG1wbl9hZGRfbmMgbXBuX3N1Yl9uIG1wbl9zdWJfbmMpCisKK0MgbXBfbGltYl90IE00X2Z1bmN0aW9uX24gKG1wX3B0ciBkc3QsIG1wX3NyY3B0ciBzcmMxLCBtcF9zcmNwdHIgc3JjMiwKK0MgICAgICAgICAgICAgICAgICAgICAgICAgbXBfc2l6ZV90IHNpemUpOworQyBtcF9saW1iX3QgTTRfZnVuY3Rpb25fbmMgKG1wX3B0ciBkc3QsIG1wX3NyY3B0ciBzcmMxLCBtcF9zcmNwdHIgc3JjMiwKK0MJICAgICAgICAgICAgICAgICAgIG1wX3NpemVfdCBzaXplLCBtcF9saW1iX3QgY2FycnkpOworQworQyBDYWxjdWxhdGUgc3JjMSxzaXplIE00X2Rlc2NyaXB0aW9uIHNyYzIsc2l6ZSwgYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4KK0MgZHN0LHNpemUuICBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBjYXJyeSBiaXQgZnJvbSB0aGUgdG9wIG9mIHRoZSByZXN1bHQgKDEKK0Mgb3IgMCkuCitDCitDIFRoZSBfbmMgdmVyc2lvbiBhY2NlcHRzIDEgb3IgMCBmb3IgYW4gaW5pdGlhbCBjYXJyeSBpbnRvIHRoZSBsb3cgbGltYiBvZgorQyB0aGUgY2FsY3VsYXRpb24uICBOb3RlIHZhbHVlcyBvdGhlciB0aGFuIDEgb3IgMCBoZXJlIHdpbGwgbGVhZCB0byBnYXJiYWdlCitDIHJlc3VsdHMuCisKK2RlZmZyYW1lKFBBUkFNX0NBUlJZLDIwKQorZGVmZnJhbWUoUEFSQU1fU0laRSwgMTYpCitkZWZmcmFtZShQQVJBTV9TUkMyLCAxMikKK2RlZmZyYW1lKFBBUkFNX1NSQzEsIDgpCitkZWZmcmFtZShQQVJBTV9EU1QsICA0KQorCitkbmwgIHJlLXVzZSBwYXJhbWV0ZXIgc3BhY2UKK2RlZmluZShTQVZFX1JQLGBQQVJBTV9TSVpFJykKK2RlZmluZShTQVZFX1ZQLGBQQVJBTV9TUkMxJykKK2RlZmluZShTQVZFX1VQLGBQQVJBTV9EU1QnKQorCitkZWZpbmUoYHJwJywgIGAlZWRpJykKK2RlZmluZShgdXAnLCAgYCVlc2knKQorZGVmaW5lKGB2cCcsICBgJWVieCcpCitkZWZpbmUoYGN5JywgIGAlZWN4JykKK2RlZmluZShgcjEnLCAgYCVlY3gnKQorZGVmaW5lKGByMicsICBgJWVkeCcpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorZGVmbGl0KGBGUkFNRScsMCkKKworUFJPTE9HVUUoTTRfZnVuY3Rpb25fbikKKwl4b3IJY3ksIGN5CQkJQyBjYXJyeQorTChzdGFydCk6CisJbW92CVBBUkFNX1NJWkUsICVlYXgJQyBzaXplCisJbW92CXJwLCBTQVZFX1JQCisJbW92CVBBUkFNX0RTVCwgcnAKKwltb3YJdXAsIFNBVkVfVVAKKwltb3YJUEFSQU1fU1JDMSwgdXAKKwlzaHIJJWVheAkJCUMgc2l6ZSA+PiAxCisJbW92CXZwLCBTQVZFX1ZQCisJbW92CVBBUkFNX1NSQzIsIHZwCisJanoJTChvbmUpCQkJQyBzaXplID09IDEKKwlqYwlMKHRocmVlKQkJQyBzaXplICUgMiA9PSAxCisKKwlzaHIJY3kKKwltb3YJKHVwKSwgcjIKKwlsZWEJNCh1cCksIHVwCisJbGVhCTQodnApLCB2cAorCWxlYQktNChycCksIHJwCisJam1wCUwoZW50cnkpCitMKG9uZSk6CisJc2hyCWN5CisJbW92CSh1cCksIHIxCisJam1wCUwoZW5kKQorTCh0aHJlZSk6CisJc2hyCWN5CisJbW92CSh1cCksIHIxCisKKwlBTElHTigxNikKK0wob29wKToKKwlNNF9pbnN0CSh2cCksIHIxCisJbGVhCTgodXApLCB1cAorCW1vdgktNCh1cCksIHIyCisJbGVhCTgodnApLCB2cAorCW1vdglyMSwgKHJwKQorTChlbnRyeSk6CisJTTRfaW5zdAktNCh2cCksIHIyCisJbGVhCTgocnApLCBycAorCWRlYwklZWF4CisJbW92CSh1cCksIHIxCisJbW92CXIyLCAtNChycCkKKwlqbnoJTChvb3ApCisKK0woZW5kKToJCQkJCUMgJWVheCBpcyB6ZXJvIGhlcmUKKwltb3YJU0FWRV9VUCwgdXAKKwlNNF9pbnN0CSh2cCksIHIxCisJbW92CVNBVkVfVlAsIHZwCisJbW92CXIxLCAocnApCisJYWRjCSVlYXgsICVlYXgKKwltb3YJU0FWRV9SUCwgcnAKKwlyZXQKK0VQSUxPR1VFKCkKKworUFJPTE9HVUUoTTRfZnVuY3Rpb25fbmMpCisJbW92CVBBUkFNX0NBUlJZLCBjeQkJQyBjYXJyeQorCWptcAlMKHN0YXJ0KQorRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9hdG9tL2FvcnNsc2hDX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYXRvbS9hb3JzbHNoQ19uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWFjZTY1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYXRvbS9hb3JzbHNoQ19uLmFzbQpAQCAtMCwwICsxLDI0NyBAQAorZG5sICBJbnRlbCBBdG9tIG1wbl9hZGRsc2hDX24vbXBuX3N1YmxzaENfbiAtLSBycFtdID0gdXBbXSArLSAodnBbXSA8PCBDKQorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBNYXJjbyBCb2RyYXRvLgorCitkbmwgIENvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgbXBfbGltYl90IG1wbl9hZGRsc2hDX25faXAxIChtcF9wdHIgZHN0LCBtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSk7CitDIG1wX2xpbWJfdCBtcG5fYWRkbHNoQ19uY19pcDEgKG1wX3B0ciBkc3QsIG1wX3NyY3B0ciBzcmMsIG1wX3NpemVfdCBzaXplLAorQwkJCQltcF9saW1iX3QgY2FycnkpOworQyBtcF9saW1iX3QgbXBuX3N1YmxzaENfbl9pcDEgKG1wX3B0ciBkc3QsIG1wX3NyY3B0ciBzcmMsIG1wX3NpemVfdCBzaXplLCk7CitDIG1wX2xpbWJfdCBtcG5fc3VibHNoQ19uY19pcDEgKG1wX3B0ciBkc3QsIG1wX3NyY3B0ciBzcmMsIG1wX3NpemVfdCBzaXplLAorQwkJCQltcF9zaWduZWRfbGltYl90IGJvcnJvdyk7CisKK2RlZmZyYW1lKFBBUkFNX0NPUkIsCTE2KQorZGVmZnJhbWUoUEFSQU1fU0laRSwJMTIpCitkZWZmcmFtZShQQVJBTV9TUkMsCSA4KQorZGVmZnJhbWUoUEFSQU1fRFNULAkgNCkKKworQyBtcF9saW1iX3QgbXBuX2FkZGxzaENfbiAobXBfcHRyIGRzdCwgbXBfc3JjcHRyIHNyYzEsIG1wX3NyY3B0ciBzcmMyLAorQyAgICAgICAgICAgICAgICAgICAgICAgICAgbXBfc2l6ZV90IHNpemUsKTsKK0MgbXBfbGltYl90IG1wbl9hZGRsc2hDX25jIChtcF9wdHIgZHN0LCBtcF9zcmNwdHIgc3JjMSwgbXBfc3JjcHRyIHNyYzIsCitDICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBfc2l6ZV90IHNpemUsIG1wX2xpbWJfdCBjYXJyeSk7CitDIG1wX2xpbWJfdCBtcG5fc3VibHNoQ19uIChtcF9wdHIgZHN0LCBtcF9zcmNwdHIgc3JjMSwgbXBfc3JjcHRyIHNyYzIsCitDICAgICAgICAgICAgICAgICAgICAgICAgICBtcF9zaXplX3Qgc2l6ZSwpOworQyBtcF9saW1iX3QgbXBuX3N1YmxzaENfbmMgKG1wX3B0ciBkc3QsIG1wX3NyY3B0ciBzcmMxLCBtcF9zcmNwdHIgc3JjMiwKK0MgICAgICAgICAgICAgICAgICAgICAgICAgICBtcF9zaXplX3Qgc2l6ZSwgbXBfbGltYl90IGJvcnJvdyk7CisKK0MgaWYgc3JjMSA9PSBkc3QsIF9pcDEgaXMgdXNlZAorCitDCQkJCQljeWNsZXMvbGltYgorQwkJCQlkc3QhPXNyYzEsc3JjMglkc3Q9PXNyYzEKK0MgUDUKK0MgUDYgbW9kZWwgMC04LDEwLTEyCitDIFA2IG1vZGVsIDkgIChCYW5pYXMpCitDIFA2IG1vZGVsIDEzIChEb3RoYW4pCitDIFA0IG1vZGVsIDAgIChXaWxsYW1ldHRlKQorQyBQNCBtb2RlbCAxICAoPykKK0MgUDQgbW9kZWwgMiAgKE5vcnRod29vZCkKK0MgUDQgbW9kZWwgMyAgKFByZXNjb3R0KQorQyBQNCBtb2RlbCA0ICAoTm9jb25hKQorQyBJbnRlbCBBdG9tCQkJIDcJCSA2CitDIEFNRCBLNgorQyBBTUQgSzcKK0MgQU1EIEs4CitDIEFNRCBLMTAKKworZGVmZnJhbWUoR1BBUkFNX0NPUkIsCTIwKQorZGVmZnJhbWUoR1BBUkFNX1NJWkUsCTE2KQorZGVmZnJhbWUoR1BBUkFNX1NSQzIsCTEyKQorCitkbmwgIHJlLXVzZSBwYXJhbWV0ZXIgc3BhY2UKK2RlZmluZShTQVZFX0VCUCxgUEFSQU1fU0laRScpCitkZWZpbmUoU0FWRV9FQlgsYFBBUkFNX1NSQycpCitkZWZpbmUoU0FWRV9VUCxgUEFSQU1fRFNUJykKKworZGVmaW5lKE0sIGV2YWwobTRfbHNoaWZ0KDEsTFNIKSkpCitkZWZpbmUoYHJwJywgIGAlZWRpJykKK2RlZmluZShgdXAnLCAgYCVlc2knKQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTig4KQorCitQUk9MT0dVRShNNF9pcF9mdW5jdGlvbl9jKQorZGVmbGl0KGBGUkFNRScsMCkKKwltb3ZsCVBBUkFNX0NPUkIsICVlY3gKKwltb3ZsCSVlY3gsICVlZHgKKwlzaHIJJExTSCwgJWVkeAorCWFuZGwJJDEsICVlZHgKKwlNNF9vcHAJJWVkeCwgJWVjeAorCWptcAlMKHN0YXJ0X25jKQorRVBJTE9HVUUoKQorCitQUk9MT0dVRShNNF9pcF9mdW5jdGlvbikKK2RlZmxpdChgRlJBTUUnLDApCisKKwl4b3IJJWVjeCwgJWVjeAorCXhvcgklZWR4LCAlZWR4CitMKHN0YXJ0X25jKToKKwlwdXNoCXJwCQkJRlJBTUVfcHVzaGwoKQorCW1vdglQQVJBTV9EU1QsIHJwCisJbW92CXVwLCBTQVZFX1VQCisJbW92CVBBUkFNX1NSQywgdXAKKwltb3YJJWVieCwgU0FWRV9FQlgKKwltb3YJUEFSQU1fU0laRSwgJWVieAlDIHNpemUKK0woaW5wbGFjZSk6CisJaW5jbAklZWJ4CQkJQyBzaXplICsgMQorCXNocgklZWJ4CQkJQyAoc2l6ZSsxKVwyCisJbW92CSVlYnAsIFNBVkVfRUJQCisJam5jCUwoZW50cnkpCQlDIHNpemUgb2RkCisKKwlhZGQJJWVkeCwgJWVkeAkJQyBzaXplIGV2ZW4KKwltb3YJJWVjeCwgJWVicAorCW1vdgkodXApLCAlZWN4CisJbGVhCS00KHJwKSwgcnAKKwlsZWEJKCVlYnAsJWVjeCxNKSwgJWVheAorCWxlYQk0KHVwKSwgdXAKKwlqbXAJTChlbnRldmVuKQorCisJQUxJR04oMTYpCitMKG9vcCk6CisJbGVhCSglZWN4LCVlYXgsTSksICVlYnAKKwlzaHIJJFJTSCwgJWVheAorCW1vdgk0KHVwKSwgJWVjeAorCWFkZAklZWR4LCAlZWR4CisJbGVhCTgodXApLCB1cAorCU00X2luc3QJJWVicCwgKHJwKQorCWxlYQkoJWVheCwlZWN4LE0pLCAlZWF4CisKK0woZW50ZXZlbik6CisJTTRfaW5zdAklZWF4LCA0KHJwKQorCWxlYQk4KHJwKSwgcnAKKworCXNiYgklZWR4LCAlZWR4CisJc2hyCSRSU0gsICVlY3gKKworTChlbnRyeSk6CisJbW92CSh1cCksICVlYXgKKwlkZWNsCSVlYngKKwlqbnoJTChvb3ApCisKKwlsZWEJKCVlY3gsJWVheCxNKSwgJWVicAorCXNocgkkUlNILCAlZWF4CisJc2hyCSVlZHgKKwlNNF9pbnN0CSVlYnAsIChycCkKKwltb3YJU0FWRV9VUCwgdXAKKwlhZGMJJDAsICVlYXgKKwltb3YJU0FWRV9FQlAsICVlYnAKKwltb3YJU0FWRV9FQlgsICVlYngKKwlwb3AJcnAJCQlGUkFNRV9wb3BsKCkKKwlyZXQKK0VQSUxPR1VFKCkKKworUFJPTE9HVUUoTTRfZnVuY3Rpb25fYykKK2RlZmxpdChgRlJBTUUnLDApCisJbW92bAlHUEFSQU1fQ09SQiwgJWVjeAorCW1vdmwJJWVjeCwgJWVkeAorCXNocgkkTFNILCAlZWR4CisJYW5kbAkkMSwgJWVkeAorCU00X29wcAklZWR4LCAlZWN4CisJam1wCUwoZ2VuZXJpY19uYykKK0VQSUxPR1VFKCkKKworUFJPTE9HVUUoTTRfZnVuY3Rpb24pCitkZWZsaXQoYEZSQU1FJywwKQorCisJeG9yCSVlY3gsICVlY3gKKwl4b3IJJWVkeCwgJWVkeAorTChnZW5lcmljX25jKToKKwlwdXNoCXJwCQkJRlJBTUVfcHVzaGwoKQorCW1vdglQQVJBTV9EU1QsIHJwCisJbW92CXVwLCBTQVZFX1VQCisJbW92CVBBUkFNX1NSQywgdXAKKwljbXAJcnAsIHVwCisJbW92CSVlYngsIFNBVkVfRUJYCisJam5lCUwoZ2VuZXJhbCkKKwltb3YJR1BBUkFNX1NJWkUsICVlYngJQyBzaXplCisJbW92CUdQQVJBTV9TUkMyLCB1cAorCWptcAlMKGlucGxhY2UpCisKK0woZ2VuZXJhbCk6CisJbW92CUdQQVJBTV9TSVpFLCAlZWF4CUMgc2l6ZQorCW1vdgklZWJ4LCBTQVZFX0VCWAorCWluY2wJJWVheAkJCUMgc2l6ZSArIDEKKwltb3YJdXAsICVlYngJCUMgdnAKKwltb3YJR1BBUkFNX1NSQzIsIHVwCQlDIHVwCisJc2hyCSVlYXgJCQlDIChzaXplKzEpXDIKKwltb3YJJWVicCwgU0FWRV9FQlAKKwltb3YJJWVheCwgR1BBUkFNX1NJWkUKKwlqbmMJTChlbnRyeTIpCQlDIHNpemUgb2RkCisKKwlhZGQJJWVkeCwgJWVkeAkJQyBzaXplIGV2ZW4KKwltb3YJJWVjeCwgJWVicAorCW1vdgkodXApLCAlZWN4CisJbGVhCS00KHJwKSwgcnAKKwlsZWEJLTQoJWVieCksICVlYngKKwlsZWEJKCVlYnAsJWVjeCxNKSwgJWVheAorCWxlYQk0KHVwKSwgdXAKKwlqbXAJTChlbnRldmVuMikKKworCUFMSUdOKDE2KQorTChvb3AyKToKKwlsZWEJKCVlY3gsJWVheCxNKSwgJWVicAorCXNocgkkUlNILCAlZWF4CisJbW92CTQodXApLCAlZWN4CisJYWRkCSVlZHgsICVlZHgKKwlsZWEJOCh1cCksIHVwCisJbW92CSglZWJ4KSwgJWVkeAorCU00X2luc3QJJWVicCwgJWVkeAorCWxlYQkoJWVheCwlZWN4LE0pLCAlZWF4CisJbW92CSVlZHgsIChycCkKK0woZW50ZXZlbjIpOgorCW1vdgk0KCVlYngpLCAlZWR4CisJbGVhCTgoJWVieCksICVlYngKKwlNNF9pbnN0CSVlYXgsICVlZHgKKwltb3YJJWVkeCwgNChycCkKKwlzYmIJJWVkeCwgJWVkeAorCXNocgkkUlNILCAlZWN4CisJbGVhCTgocnApLCBycAorTChlbnRyeTIpOgorCW1vdgkodXApLCAlZWF4CisJZGVjbAlHUEFSQU1fU0laRQorCWpueglMKG9vcDIpCisKKwlsZWEJKCVlY3gsJWVheCxNKSwgJWVicAorCXNocgkkUlNILCAlZWF4CisJc2hyCSVlZHgKKwltb3YJKCVlYngpLCAlZWR4CisJTTRfaW5zdAklZWJwLCAlZWR4CisJbW92CSVlZHgsIChycCkKKwltb3YJU0FWRV9VUCwgdXAKKwlhZGMJJDAsICVlYXgKKwltb3YJU0FWRV9FQlAsICVlYnAKKwltb3YJU0FWRV9FQlgsICVlYngKKwlwb3AJcnAJCQlGUkFNRV9wb3BsKCkKKwlyZXQKK0VQSUxPR1VFKCkKKworQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9hdG9tL2JkaXZfcV8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2F0b20vYmRpdl9xXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZTkwOGUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9hdG9tL2JkaXZfcV8xLmFzbQpAQCAtMCwwICsxLDM1IEBACitkbmwgIEludGVsIEF0b20gbXBuX2JkaXZfcV8xLCBtcG5fcGkxX2JkaXZfcV8xIC0tIHNjaG9vbGJvb2sgSGVuc2VsCitkbmwgIGRpdmlzaW9uIGJ5IDEtbGltYiBkaXZpc29yLCByZXR1cm5pbmcgcXVvdGllbnQgb25seS4KKworZG5sICBDb3B5cmlnaHQgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9iZGl2X3FfMSBtcG5fcGkxX2JkaXZfcV8xKQoraW5jbHVkZV9tcG4oYHg4Ni9wZW50aXVtL2JkaXZfcV8xLmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9hdG9tL2NuZF9hZGRfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9hdG9tL2NuZF9hZGRfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBiZjJhZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2F0b20vY25kX2FkZF9uLmFzbQpAQCAtMCwwICsxLDExMyBAQAorZG5sICBYODYgbXBuX2NuZF9hZGRfbiBvcHRpbWlzZWQgZm9yIEludGVsIEF0b20uCisKK2RubCAgQ29weXJpZ2h0IDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkJCSAgICBjeWNsZXMvbGltYgorQyBQNQkJCQkgPworQyBQNiBtb2RlbCAwLTgsMTAtMTIJCSA/CitDIFA2IG1vZGVsIDkgICAoQmFuaWFzKQkJID8KK0MgUDYgbW9kZWwgMTMgIChEb3RoYW4pCQkgPworQyBQNCBtb2RlbCAwLTEgKFdpbGxhbWV0dGUpCSA/CitDIFA0IG1vZGVsIDIgICAoTm9ydGh3b29kKQkgPworQyBQNCBtb2RlbCAzLTQgKFByZXNjb3R0KQkgPworQyBJbnRlbCBhdG9tCQkJIDQuNjcKK0MgQU1EIEs2CQkJID8KK0MgQU1EIEs3CQkJID8KK0MgQU1EIEs4CQkJID8KKworCitkZWZpbmUoYHJwJywgIGAlZWRpJykKK2RlZmluZShgdXAnLCAgYCVlc2knKQorZGVmaW5lKGB2cCcsICBgJWVicCcpCitkZWZpbmUoYG4nLCAgIGAlZWN4JykKK2RlZmluZShgY25kJywgYDIwKCVlc3ApJykKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMTYpCitQUk9MT0dVRShtcG5fY25kX2FkZF9uKQorCXB1c2gJJWVkaQorCXB1c2gJJWVzaQorCXB1c2gJJWVieAorCXB1c2gJJWVicAorCisJbW92CWNuZCwgJWVheAkJQyBtYWtlIGNuZCBpbnRvIGEgbWFzayAoMSkKKwltb3YJMjQoJWVzcCksIHJwCisJbmVnCSVlYXgJCQlDIG1ha2UgY25kIGludG8gYSBtYXNrICgxKQorCW1vdgkyOCglZXNwKSwgdXAKKwlzYmIJJWVheCwgJWVheAkJQyBtYWtlIGNuZCBpbnRvIGEgbWFzayAoMSkKKwltb3YJMzIoJWVzcCksIHZwCisJbW92CSVlYXgsIGNuZAkJQyBtYWtlIGNuZCBpbnRvIGEgbWFzayAoMSkKKwltb3YJMzYoJWVzcCksIG4KKworCXhvcgklZWR4LCAlZWR4CisKKwlzaHIJJDEsIG4KKwlqbmMJTCh0b3ApCisKKwltb3YJMCh2cCksICVlYXgKKwlhbmQJY25kLCAlZWF4CisJbGVhCTQodnApLCB2cAorCWFkZAkwKHVwKSwgJWVheAorCWxlYQk0KHJwKSwgcnAKKwlsZWEJNCh1cCksIHVwCisJc2JiCSVlZHgsICVlZHgKKwltb3YJJWVheCwgLTQocnApCisJaW5jCW4KKwlkZWMJbgorCWplCUwoZW5kKQorCitMKHRvcCk6CXNiYgklZWR4LCAlZWR4CisJbW92CTAodnApLCAlZWF4CisJYW5kCWNuZCwgJWVheAorCWxlYQk4KHZwKSwgdnAKKwlsZWEJOChycCksIHJwCisJbW92CS00KHZwKSwgJWVieAorCWFuZAljbmQsICVlYngKKwlhZGQJJWVkeCwgJWVkeAorCWFkYwkwKHVwKSwgJWVheAorCWxlYQk4KHVwKSwgdXAKKwltb3YJJWVheCwgLTgocnApCisJYWRjCS00KHVwKSwgJWVieAorCWRlYwluCisJbW92CSVlYngsIC00KHJwKQorCWpuZQlMKHRvcCkKKworTChlbmQpOgltb3YJJDAsICVlYXgKKwlhZGMJJWVheCwgJWVheAorCisJcG9wCSVlYnAKKwlwb3AJJWVieAorCXBvcAklZXNpCisJcG9wCSVlZGkKKwlyZXQKK0VQSUxPR1VFKCkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYXRvbS9jbmRfc3ViX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYXRvbS9jbmRfc3ViX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyMWJlZGMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9hdG9tL2NuZF9zdWJfbi5hc20KQEAgLTAsMCArMSwxMjQgQEAKK2RubCAgWDg2IG1wbl9jbmRfc3ViX24gb3B0aW1pc2VkIGZvciBJbnRlbCBBdG9tLgorCitkbmwgIENvcHlyaWdodCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJCQkgICAgY3ljbGVzL2xpbWIKK0MgUDUJCQkJID8KK0MgUDYgbW9kZWwgMC04LDEwLTEyCQkgPworQyBQNiBtb2RlbCA5ICAgKEJhbmlhcykJCSA/CitDIFA2IG1vZGVsIDEzICAoRG90aGFuKQkJID8KK0MgUDQgbW9kZWwgMC0xIChXaWxsYW1ldHRlKQkgPworQyBQNCBtb2RlbCAyICAgKE5vcnRod29vZCkJID8KK0MgUDQgbW9kZWwgMy00IChQcmVzY290dCkJID8KK0MgSW50ZWwgYXRvbQkJCSA1LjY3CitDIEFNRCBLNgkJCSA/CitDIEFNRCBLNwkJCSA/CitDIEFNRCBLOAkJCSA/CisKKworZGVmaW5lKGBycCcsICBgJWVkaScpCitkZWZpbmUoYHVwJywgIGAlZXNpJykKK2RlZmluZShgdnAnLCAgYCVlYnAnKQorZGVmaW5lKGBuJywgICBgJWVjeCcpCitkZWZpbmUoYGNuZCcsIGAyMCglZXNwKScpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX2NuZF9zdWJfbikKKwlwdXNoCSVlZGkKKwlwdXNoCSVlc2kKKwlwdXNoCSVlYngKKwlwdXNoCSVlYnAKKworCW1vdgljbmQsICVlYXgJCUMgbWFrZSBjbmQgaW50byBhIG1hc2sgKDEpCisJbW92CTI0KCVlc3ApLCBycAorCW5lZwklZWF4CQkJQyBtYWtlIGNuZCBpbnRvIGEgbWFzayAoMSkKKwltb3YJMjgoJWVzcCksIHVwCisJc2JiCSVlYXgsICVlYXgJCUMgbWFrZSBjbmQgaW50byBhIG1hc2sgKDEpCisJbW92CTMyKCVlc3ApLCB2cAorCW1vdgklZWF4LCBjbmQJCUMgbWFrZSBjbmQgaW50byBhIG1hc2sgKDEpCisJbW92CTM2KCVlc3ApLCBuCisKKwl4b3IJJWVkeCwgJWVkeAorCisJaW5jCW4KKwlzaHIJbgorCWpuYwlMKGVudCkKKworCW1vdgkwKHZwKSwgJWVheAorCWFuZAljbmQsICVlYXgKKwlsZWEJNCh2cCksIHZwCisJbW92CTAodXApLCAlZWR4CisJc3ViCSVlYXgsICVlZHgKKwlsZWEJNChycCksIHJwCisJbGVhCTQodXApLCB1cAorCW1vdgklZWR4LCAtNChycCkKKwlzYmIJJWVkeCwgJWVkeAkJQyBzYXZlIGN5CisKK0woZW50KToJbW92CTAodnApLCAlZWJ4CisJYW5kCWNuZCwgJWVieAorCWFkZAklZWR4LCAlZWR4CQlDIHJlc3RvcmUgY3kKKwltb3YJMCh1cCksICVlZHgKKwlkZWMJbgorCWplCUwoZW5kKQorCitMKHRvcCk6CXNiYgklZWJ4LCAlZWR4CisJbW92CTQodnApLCAlZWF4CisJbW92CSVlZHgsIDAocnApCisJc2JiCSVlZHgsICVlZHgJCUMgc2F2ZSBjeQorCW1vdgk4KHZwKSwgJWVieAorCWxlYQk4KHVwKSwgdXAKKwlhbmQJY25kLCAlZWJ4CisJYW5kCWNuZCwgJWVheAorCWFkZAklZWR4LCAlZWR4CQlDIHJlc3RvcmUgY3kKKwltb3YJLTQodXApLCAlZWR4CisJbGVhCTgocnApLCBycAorCXNiYgklZWF4LCAlZWR4CisJbW92CSVlZHgsIC00KHJwKQorCWRlYwluCisJbW92CTAodXApLCAlZWR4CisJbGVhCTgodnApLCB2cAorCWpuZQlMKHRvcCkKKworTChlbmQpOglzYmIJJWVieCwgJWVkeAorCW1vdgklZWR4LCAwKHJwKQorCisJbW92CSQwLCAlZWF4CisJYWRjCSVlYXgsICVlYXgKKworCXBvcAklZWJwCisJcG9wCSVlYngKKwlwb3AJJWVzaQorCXBvcAklZWRpCisJcmV0CitFUElMT0dVRSgpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2F0b20vZGl2ZV8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2F0b20vZGl2ZV8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTAzNmExCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYXRvbS9kaXZlXzEuYXNtCkBAIC0wLDAgKzEsMzQgQEAKK2RubCAgSW50ZWwgQXRvbSBtcG5fZGl2ZXhhY3RfMSAtLSBtcG4gYnkgbGltYiBleGFjdCBkaXZpc2lvbi4KKworZG5sICBDb3B5cmlnaHQgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9kaXZleGFjdF8xKQoraW5jbHVkZV9tcG4oYHg4Ni9wZW50aXVtL2RpdmVfMS5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYXRvbS9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9hdG9tL2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDI1YmI3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYXRvbS9nbXAtbXBhcmFtLmgKQEAgLTAsMCArMSwyMTQgQEAKKy8qIEludGVsIEF0b20vMzIgZ21wLW1wYXJhbS5oIC0tIENvbXBpbGVyL21hY2hpbmUgcGFyYW1ldGVyIGhlYWRlciBmaWxlLgorCitDb3B5cmlnaHQgMjAxOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2RlZmluZSBHTVBfTElNQl9CSVRTIDMyCisjZGVmaW5lIEdNUF9MSU1CX0JZVEVTIDQKKworLyogMTYwMCBNSHogRGlhbW9uZHZpbGxlIChBdG9tIDMzMCkgKi8KKy8qIEZGVCB0dW5pbmcgbGltaXQgPSA2NywwMDAsMDAwICovCisvKiBHZW5lcmF0ZWQgYnkgdHVuZXVwLmMsIDIwMTktMTAtMTgsIGdjYyA4LjMgKi8KKworI2RlZmluZSBNT0RfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMworI2RlZmluZSBNT0RfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgNQorI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAxMQorI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNQorI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAxMAorI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICAgICAgMCAgLyogbmV2ZXIgbXBuX21vZF8xc18ycCAqLworI2RlZmluZSBQUkVJTlZfTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAxNworI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgICAgICAgICAgICAgICAgMSAgLyogbmF0aXZlICovCisjZGVmaW5lIERJVl9RUl8xTl9QSTFfTUVUSE9EICAgICAgICAgICAgICAgICAxICAvKiA3Mi42MCUgZmFzdGVyIHRoYW4gMiAqLworI2RlZmluZSBESVZfUVJfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICBNUF9TSVpFX1RfTUFYICAvKiBuZXZlciAqLworI2RlZmluZSBESVZfUVJfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICBNUF9TSVpFX1RfTUFYICAvKiBuZXZlciAqLworI2RlZmluZSBESVZfUVJfMl9QSTJfVEhSRVNIT0xEICAgICAgICAgICBNUF9TSVpFX1RfTUFYICAvKiBuZXZlciAqLworI2RlZmluZSBESVZFWEFDVF8xX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIEJNT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgICAgICAgIDM1CisKKyNkZWZpbmUgRElWXzFfVlNfTVVMXzFfUEVSQ0VOVCAgICAgICAgICAgICAyMzYKKworI2RlZmluZSBNVUxfVE9PTTIyX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyMgorI2RlZmluZSBNVUxfVE9PTTMzX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA4MQorI2RlZmluZSBNVUxfVE9PTTQ0X1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE3OAorI2RlZmluZSBNVUxfVE9PTTZIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDI3MAorI2RlZmluZSBNVUxfVE9PTThIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDM5OQorCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTQzX1RIUkVTSE9MRCAgICAgIDk3CisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgMTI2CisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgMTE1CisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTYzX1RIUkVTSE9MRCAgICAgMTI5CisjZGVmaW5lIE1VTF9UT09NNDNfVE9fVE9PTTU0X1RIUkVTSE9MRCAgICAgMTE1CisKKyNkZWZpbmUgU1FSX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAobmF0aXZlKSAqLworI2RlZmluZSBTUVJfVE9PTTJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBTUVJfVE9PTTNfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDExNworI2RlZmluZSBTUVJfVE9PTTRfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE3OAorI2RlZmluZSBTUVJfVE9PTTZfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDM2NgorI2RlZmluZSBTUVJfVE9PTThfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDUyNworCisjZGVmaW5lIE1VTE1JRF9UT09NNDJfVEhSRVNIT0xEICAgICAgICAgICAgIDUwCisKKyNkZWZpbmUgTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgU1FSTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTcKKworI2RlZmluZSBNVUxfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDQwNCAgLyogayA9IDUgKi8KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDQwNCwgNX0sIHsgICAgIDIxLCA2fSwgeyAgICAgMTEsIDV9LCB7ICAgICAyMywgNn0sIFwKKyAgICB7ICAgICAxMiwgNX0sIHsgICAgIDI1LCA2fSwgeyAgICAgMTMsIDV9LCB7ICAgICAyNywgNn0sIFwKKyAgICB7ICAgICAyMSwgN30sIHsgICAgIDExLCA2fSwgeyAgICAgMjUsIDd9LCB7ICAgICAxMywgNn0sIFwKKyAgICB7ICAgICAyNywgN30sIHsgICAgIDE1LCA2fSwgeyAgICAgMzEsIDd9LCB7ICAgICAyMSwgOH0sIFwKKyAgICB7ICAgICAxMSwgN30sIHsgICAgIDI3LCA4fSwgeyAgICAgMTUsIDd9LCB7ICAgICAzNSwgOH0sIFwKKyAgICB7ICAgICAxOSwgN30sIHsgICAgIDM5LCA4fSwgeyAgICAgMjMsIDd9LCB7ICAgICA0NywgOH0sIFwKKyAgICB7ICAgICAyNywgOX0sIHsgICAgIDE1LCA4fSwgeyAgICAgMzksIDl9LCB7ICAgICAyMywgOH0sIFwKKyAgICB7ICAgICA1MSwxMH0sIHsgICAgIDE1LCA5fSwgeyAgICAgMzEsIDh9LCB7ICAgICA2NywgOX0sIFwKKyAgICB7ICAgICAzOSwgOH0sIHsgICAgIDc5LCA5fSwgeyAgICAgNDcsIDh9LCB7ICAgICA5NSwxMH0sIFwKKyAgICB7ICAgICAzMSwgOX0sIHsgICAgIDc5LDEwfSwgeyAgICAgNDcsIDl9LCB7ICAgICA5NSwxMX0sIFwKKyAgICB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA5fSwgeyAgICAxMzUsMTB9LCB7ICAgICA3OSwgOX0sIFwKKyAgICB7ICAgIDE1OSwxMH0sIHsgICAgIDk1LCA5fSwgeyAgICAxOTEsMTB9LCB7ICAgIDExMSwxMX0sIFwKKyAgICB7ICAgICA2MywxMH0sIHsgICAgMTI3LCA5fSwgeyAgICAyNTUsIDh9LCB7ICAgIDUxMSwxMH0sIFwKKyAgICB7ICAgIDE0MywgOX0sIHsgICAgMjg3LCA4fSwgeyAgICA1NzUsIDl9LCB7ICAgIDMwMywxMH0sIFwKKyAgICB7ICAgIDE1OSwxMX0sIHsgICAgIDk1LDEwfSwgeyAgICAxOTEsIDl9LCB7ICAgIDM4MywxMn0sIFwKKyAgICB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgeyAgICAyNTUsIDl9LCB7ICAgIDUxMSwxMH0sIFwKKyAgICB7ICAgIDI3MSwgOX0sIHsgICAgNTQzLDEwfSwgeyAgICAyODcsIDl9LCB7ICAgIDU3NSwxMH0sIFwKKyAgICB7ICAgIDMwMywxMX0sIHsgICAgMTU5LDEwfSwgeyAgICAzNTEsIDl9LCB7ICAgIDcwMywxMH0sIFwKKyAgICB7ICAgIDM2NywgOX0sIHsgICAgNzM1LDExfSwgeyAgICAxOTEsMTB9LCB7ICAgIDM4MywgOX0sIFwKKyAgICB7ICAgIDc2NywxMH0sIHsgICAgNDE1LDExfSwgeyAgICAyMjMsMTB9LCB7ICAgIDQ0NywxMn0sIFwKKyAgICB7ICAgIDEyNywxMX0sIHsgICAgMjU1LDEwfSwgeyAgICA1NDMsMTF9LCB7ICAgIDI4NywxMH0sIFwKKyAgICB7ICAgIDYwNywxMX0sIHsgICAgMzE5LDEwfSwgeyAgICA2NzEsMTF9LCB7ICAgIDM1MSwxMH0sIFwKKyAgICB7ICAgIDczNSwxMn0sIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTB9LCB7ICAgIDc2NywxMX0sIFwKKyAgICB7ICAgIDQxNSwxMH0sIHsgICAgODMxLDExfSwgeyAgICA0NDcsMTN9LCB7ICAgIDEyNywxMn0sIFwKKyAgICB7ICAgIDI1NSwxMX0sIHsgICAgNTQzLDEwfSwgeyAgIDEwODcsMTF9LCB7ICAgIDYwNywxMn0sIFwKKyAgICB7ICAgIDMxOSwxMX0sIHsgICAgNzM1LDEyfSwgeyAgICAzODMsMTF9LCB7ICAgIDgzMSwxMn0sIFwKKyAgICB7ICAgIDQ0NywxMX0sIHsgICAgOTU5LDEzfSwgeyAgICAyNTUsMTJ9LCB7ICAgIDUxMSwxMX0sIFwKKyAgICB7ICAgMTA4NywxMn0sIHsgICAgNTc1LDExfSwgeyAgIDEyMTUsMTJ9LCB7ICAgIDYzOSwxMX0sIFwKKyAgICB7ICAgMTI3OSwxMn0sIHsgICAgNzAzLDExfSwgeyAgIDE0MDcsMTN9LCB7ICAgIDM4MywxMn0sIFwKKyAgICB7ICAgIDgzMSwxMX0sIHsgICAxNjYzLDEyfSwgeyAgICA5NTksMTR9LCB7ICAgIDI1NSwxM30sIFwKKyAgICB7ICAgIDUxMSwxMn0sIHsgICAxMjE1LDEzfSwgeyAgICA2MzksMTJ9LCB7ICAgMTQ3MSwxM30sIFwKKyAgICB7ICAgIDc2NywxMn0sIHsgICAxNTk5LDEzfSwgeyAgICA4OTUsMTJ9LCB7ICAgMTc5MSwxNH0sIFwKKyAgICB7ICAgIDUxMSwxM30sIHsgICAxMDIzLDEyfSwgeyAgIDIxMTEsMTN9LCB7ICAgMTE1MSwxMn0sIFwKKyAgICB7ICAgMjQzMSwxM30sIHsgICAxNDA3LDE0fSwgeyAgICA3NjcsMTN9LCB7ICAgMTY2MywxMn0sIFwKKyAgICB7ICAgMzQ1NSwxM30sIHsgICAxNzkxLDE1fSwgeyAgICA1MTEsMTR9LCB7ICAgMTAyMywxM30sIFwKKyAgICB7ICAgMjQzMSwxNH0sIHsgICAxMjc5LDEzfSwgeyAgIDI5NDMsMTJ9LCB7ICAgNTg4NywxNH0sIFwKKyAgICB7ICAgMTUzNSwxM30sIHsgICAzNDU1LDE0fSwgeyAgIDE3OTEsMTN9LCB7ICAgMzgzOSwxNX0sIFwKKyAgICB7ICAgMTAyMywxNH0sIHsgICAyMDQ3LDEzfSwgeyAgIDQyMjMsMTR9LCB7ICAgMjMwMywxM30sIFwKKyAgICB7ICAgNDk5MSwxMn0sIHsgICA5OTgzLDE0fSwgeyAgIDI4MTUsMTN9LCB7ICAgNTg4NywxNX0sIFwKKyAgICB7ICAgMTUzNSwxNH0sIHsgICAzODM5LDE2fSB9CisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzX1NJWkUgMTU4CisjZGVmaW5lIE1VTF9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA0NTQ0CisKKyNkZWZpbmUgU1FSX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICAzNjggIC8qIGsgPSA1ICovCisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICAzNjgsIDV9LCB7ICAgICAyMywgNn0sIHsgICAgIDEyLCA1fSwgeyAgICAgMjUsIDZ9LCBcCisgICAgeyAgICAgMTMsIDV9LCB7ICAgICAyNywgNn0sIHsgICAgIDI1LCA3fSwgeyAgICAgMTMsIDZ9LCBcCisgICAgeyAgICAgMjgsIDd9LCB7ICAgICAxNSwgNn0sIHsgICAgIDMxLCA3fSwgeyAgICAgMTcsIDZ9LCBcCisgICAgeyAgICAgMzUsIDd9LCB7ICAgICAyMSwgOH0sIHsgICAgIDExLCA3fSwgeyAgICAgMjcsIDh9LCBcCisgICAgeyAgICAgMTUsIDd9LCB7ICAgICAzNSwgOH0sIHsgICAgIDE5LCA3fSwgeyAgICAgNDEsIDh9LCBcCisgICAgeyAgICAgMjMsIDd9LCB7ICAgICA0NywgOH0sIHsgICAgIDI3LCA5fSwgeyAgICAgMTUsIDh9LCBcCisgICAgeyAgICAgMzksIDl9LCB7ICAgICAyMywgOH0sIHsgICAgIDUxLDEwfSwgeyAgICAgMTUsIDl9LCBcCisgICAgeyAgICAgMzEsIDh9LCB7ICAgICA2MywgOX0sIHsgICAgIDM5LCA4fSwgeyAgICAgNzksIDl9LCBcCisgICAgeyAgICAgNDcsMTB9LCB7ICAgICAzMSwgOX0sIHsgICAgIDc5LDEwfSwgeyAgICAgNDcsIDl9LCBcCisgICAgeyAgICAgOTUsMTF9LCB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA5fSwgeyAgICAxMjcsIDh9LCBcCisgICAgeyAgICAyNTUsIDl9LCB7ICAgIDEzNSwxMH0sIHsgICAgIDc5LCA5fSwgeyAgICAxNTksIDh9LCBcCisgICAgeyAgICAzMTksMTB9LCB7ICAgICA5NSwgOX0sIHsgICAgMTkxLDExfSwgeyAgICAgNjMsMTB9LCBcCisgICAgeyAgICAxMjcsIDl9LCB7ICAgIDI1NSwgOH0sIHsgICAgNTExLCA5fSwgeyAgICAyNzEsMTB9LCBcCisgICAgeyAgICAxNDMsIDl9LCB7ICAgIDI4NywgOH0sIHsgICAgNTc1LCA5fSwgeyAgICAzMDMsMTB9LCBcCisgICAgeyAgICAxNTksIDl9LCB7ICAgIDMxOSwxMX0sIHsgICAgIDk1LDEwfSwgeyAgICAxOTEsIDl9LCBcCisgICAgeyAgICAzODMsMTJ9LCB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgeyAgICAyNTUsIDl9LCBcCisgICAgeyAgICA1MTEsMTB9LCB7ICAgIDI3MSwgOX0sIHsgICAgNTQzLDEwfSwgeyAgICAyODcsIDl9LCBcCisgICAgeyAgICA1NzUsMTB9LCB7ICAgIDMwMywgOX0sIHsgICAgNjA3LDExfSwgeyAgICAxNTksMTB9LCBcCisgICAgeyAgICAzMTksIDl9LCB7ICAgIDYzOSwxMH0sIHsgICAgMzM1LCA5fSwgeyAgICA2NzEsMTB9LCBcCisgICAgeyAgICAzNTEsIDl9LCB7ICAgIDcwMywxMX0sIHsgICAgMTkxLDEwfSwgeyAgICAzODMsIDl9LCBcCisgICAgeyAgICA3NjcsMTB9LCB7ICAgIDQxNSwxMX0sIHsgICAgMjIzLDEwfSwgeyAgICA0NDcsMTJ9LCBcCisgICAgeyAgICAxMjcsMTF9LCB7ICAgIDI1NSwxMH0sIHsgICAgNTQzLDExfSwgeyAgICAyODcsMTB9LCBcCisgICAgeyAgICA2MDcsMTF9LCB7ICAgIDMxOSwxMH0sIHsgICAgNjcxLDExfSwgeyAgICAzNTEsMTB9LCBcCisgICAgeyAgICA3MDMsMTJ9LCB7ICAgIDE5MSwxMX0sIHsgICAgMzgzLDEwfSwgeyAgICA3NjcsMTF9LCBcCisgICAgeyAgICA0MTUsMTB9LCB7ICAgIDgzMSwxMX0sIHsgICAgNDQ3LDEzfSwgeyAgICAxMjcsMTJ9LCBcCisgICAgeyAgICAyNTUsMTF9LCB7ICAgIDU0MywxMH0sIHsgICAxMDg3LDExfSwgeyAgICA2MDcsMTJ9LCBcCisgICAgeyAgICAzMTksMTF9LCB7ICAgIDY3MSwxMH0sIHsgICAxMzQzLDExfSwgeyAgICA3MzUsMTJ9LCBcCisgICAgeyAgICAzODMsMTF9LCB7ICAgIDgzMSwxMn0sIHsgICAgNDQ3LDExfSwgeyAgICA5NTksMTN9LCBcCisgICAgeyAgICAyNTUsMTJ9LCB7ICAgIDUxMSwxMX0sIHsgICAxMDg3LDEyfSwgeyAgICA1NzUsMTF9LCBcCisgICAgeyAgIDEyMTUsMTJ9LCB7ICAgIDYzOSwxMX0sIHsgICAxMzQzLDEyfSwgeyAgICA3MDMsMTN9LCBcCisgICAgeyAgICAzODMsMTJ9LCB7ICAgIDk1OSwxNH0sIHsgICAgMjU1LDEzfSwgeyAgICA1MTEsMTJ9LCBcCisgICAgeyAgIDEyMTUsMTN9LCB7ICAgIDYzOSwxMn0sIHsgICAxNDcxLDEzfSwgeyAgICA3NjcsMTJ9LCBcCisgICAgeyAgIDE1OTksMTN9LCB7ICAgIDg5NSwxNH0sIHsgICAgNTExLDEzfSwgeyAgIDEwMjMsMTJ9LCBcCisgICAgeyAgIDIxMTEsMTN9LCB7ICAgMTE1MSwxMn0sIHsgICAyNDMxLDEzfSwgeyAgIDE0MDcsMTR9LCBcCisgICAgeyAgICA3NjcsMTN9LCB7ICAgMTY2MywxMn0sIHsgICAzNDU1LDE1fSwgeyAgICA1MTEsMTR9LCBcCisgICAgeyAgIDEwMjMsMTN9LCB7ICAgMjE3NSwxMn0sIHsgICA0MzUxLDEzfSwgeyAgIDI0MzEsMTR9LCBcCisgICAgeyAgIDEyNzksMTN9LCB7ICAgMjk0MywxMn0sIHsgICA1ODg3LDE0fSwgeyAgIDE1MzUsMTN9LCBcCisgICAgeyAgIDM0NTUsMTR9LCB7ICAgMTc5MSwxM30sIHsgICAzODM5LDE1fSwgeyAgIDEwMjMsMTR9LCBcCisgICAgeyAgIDIwNDcsMTN9LCB7ICAgNDM1MSwxNH0sIHsgICAyMzAzLDEzfSwgeyAgIDQ5OTEsMTJ9LCBcCisgICAgeyAgIDk5ODMsMTR9LCB7ICAgMjgxNSwxM30sIHsgICA1ODg3LDE1fSwgeyAgIDE1MzUsMTR9LCBcCisgICAgeyAgIDM4MzksMTZ9IH0KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTNfU0laRSAxNjEKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDM3MTIKKworI2RlZmluZSBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDU2CisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgICA4OTA3CisjZGVmaW5lIFNRUkxPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICA2CisjZGVmaW5lIFNRUkxPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTExCisjZGVmaW5lIFNRUkxPX1NRUl9USFJFU0hPTEQgICAgICAgICAgICAgICA2NjU0CisKKyNkZWZpbmUgRENfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNjcKKyNkZWZpbmUgRENfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAyNTIKKyNkZWZpbmUgRENfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNjMKKyNkZWZpbmUgRENfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNzIKKworI2RlZmluZSBJTlZfTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICA0MgorI2RlZmluZSBJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDI1MAorI2RlZmluZSBJTlZfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDI1MAorCisjZGVmaW5lIEJJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgMjc2CisjZGVmaW5lIFJFRENfMV9UT19SRURDX05fVEhSRVNIT0xEICAgICAgICAgIDY4CisKKyNkZWZpbmUgTVVfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDEzMzQKKyNkZWZpbmUgTVVfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgIDE0NDIKKyNkZWZpbmUgTVVQSV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAxMTYKKyNkZWZpbmUgTVVfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgIDExNDIKKyNkZWZpbmUgTVVfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDEzNDEKKworI2RlZmluZSBQT1dNX1NFQ19UQUJMRSAgMSwxNiw5OCwzNzYsMTI1OQorCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgIDIzCisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjk4CisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAxMDM3CisKKyNkZWZpbmUgRkFDX0RTQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAxNzEKKyNkZWZpbmUgRkFDX09ERF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgMzQKKworI2RlZmluZSBNQVRSSVgyMl9TVFJBU1NFTl9USFJFU0hPTEQgICAgICAgICAxNworI2RlZmluZSBIR0NEMl9ESVYxX01FVEhPRCAgICAgICAgICAgICAgICAgICAgMyAgLyogMy43MSUgZmFzdGVyIHRoYW4gMSAqLworI2RlZmluZSBIR0NEX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgIDEyOAorI2RlZmluZSBIR0NEX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE4NgorI2RlZmluZSBIR0NEX1JFRFVDRV9USFJFU0hPTEQgICAgICAgICAgICAgMjQ3OQorI2RlZmluZSBHQ0RfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDQ2NQorI2RlZmluZSBHQ0RFWFRfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDMzOQorI2RlZmluZSBKQUNPQklfQkFTRV9NRVRIT0QgICAgICAgICAgICAgICAgICAgMyAgLyogMi41OCUgZmFzdGVyIHRoYW4gMiAqLworCisvKiBUdW5ldXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgdG9vayAyMTQxOTAgc2Vjb25kcyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYXRvbS9sb2dvcHNfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9hdG9tL2xvZ29wc19uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2I2ZDczCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYXRvbS9sb2dvcHNfbi5hc20KQEAgLTAsMCArMSwxNTEgQEAKK2RubCAgSW50ZWwgQXRvbSBtcG5fYW5kX24sLi4uLG1wbl94bm9yX24gLS0gYml0d2lzZSBsb2dpY2FsIG9wZXJhdGlvbnMuCisKK2RubCAgQ29weXJpZ2h0IDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IE1hcmNvIEJvZHJhdG8uCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkJCQkgICBjeWNsZXMvbGltYgorQwkJCQlvcAlub3AJb3BuCitDIFA1CitDIFA2IG1vZGVsIDAtOCwxMC0xMgorQyBQNiBtb2RlbCA5ICAoQmFuaWFzKQorQyBQNiBtb2RlbCAxMyAoRG90aGFuKQorQyBQNCBtb2RlbCAwICAoV2lsbGFtZXR0ZSkKK0MgUDQgbW9kZWwgMSAgKD8pCitDIFA0IG1vZGVsIDIgIChOb3J0aHdvb2QpCitDIFA0IG1vZGVsIDMgIChQcmVzY290dCkKK0MgUDQgbW9kZWwgNCAgKE5vY29uYSkKK0MgSW50ZWwgQXRvbQkJCSAzCSAzLjUJIDMuNQorQyBBTUQgSzYKK0MgQU1EIEs3CitDIEFNRCBLOAorQyBBTUQgSzEwCisKK2RlZmluZShNNF9jaG9vc2Vfb3AsCitgaWZkZWYoYE9QRVJBVElPTl8kMScsYAorZGVmaW5lKGBNNF9mdW5jdGlvbicsIGBtcG5fJDEnKQorZGVmaW5lKGBNNF93YW50X3ByZScsIGAkNCcpCitkZWZpbmUoYE00X2luc3QnLCAgICAgYCQzJykKK2RlZmluZShgTTRfd2FudF9wb3N0JyxgJDInKQorJyknKQorZGVmaW5lKE00cHJlLCBgaWZlbHNlKE00X3dhbnRfcHJlLCB5ZXMsYCQxJyknKQorZGVmaW5lKE00cG9zdCxgaWZlbHNlKE00X3dhbnRfcG9zdCx5ZXMsYCQxJyknKQorCitNNF9jaG9vc2Vfb3AoIGFuZF9uLCAgICAgLCBhbmRsLCAgICApCitNNF9jaG9vc2Vfb3AoIGFuZG5fbiwgICAgLCBhbmRsLCB5ZXMpCitNNF9jaG9vc2Vfb3AoIG5hbmRfbiwgeWVzLCBhbmRsLCAgICApCitNNF9jaG9vc2Vfb3AoIGlvcl9uLCAgICAgLCAgb3JsLCAgICApCitNNF9jaG9vc2Vfb3AoIGlvcm5fbiwgICAgLCAgb3JsLCB5ZXMpCitNNF9jaG9vc2Vfb3AoIG5pb3JfbiwgeWVzLCAgb3JsLCAgICApCitNNF9jaG9vc2Vfb3AoIHhvcl9uLCAgICAgLCB4b3JsLCAgICApCitNNF9jaG9vc2Vfb3AoIHhub3JfbiwgeWVzLCB4b3JsLCAgICApCisKK2lmZGVmKGBNNF9mdW5jdGlvbicsLAorYG00X2Vycm9yKGBVbnJlY29nbmlzZWQgb3IgdW5kZWZpbmVkIE9QRVJBVElPTiBzeW1ib2wKKycpJykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fYW5kX24gbXBuX2FuZG5fbiBtcG5fbmFuZF9uIG1wbl9pb3JfbiBtcG5faW9ybl9uIG1wbl9uaW9yX24gbXBuX3hvcl9uIG1wbl94bm9yX24pCisKK0Mgdm9pZCBNNF9mdW5jdGlvbiAobXBfcHRyIGRzdCwgbXBfc3JjcHRyIHNyYzIsIG1wX3NyY3B0ciBzcmMxLCBtcF9zaXplX3Qgc2l6ZSk7CitDCisKK2RlZmZyYW1lKFBBUkFNX1NJWkUsIDE2KQorZGVmZnJhbWUoUEFSQU1fU1JDMSwgMTIpCitkZWZmcmFtZShQQVJBTV9TUkMyLCA4KQorZGVmZnJhbWUoUEFSQU1fRFNULCAgNCkKKworZG5sICByZS11c2UgcGFyYW1ldGVyIHNwYWNlCitkZWZpbmUoU0FWRV9SUCxgUEFSQU1fU0laRScpCitkZWZpbmUoU0FWRV9WUCxgUEFSQU1fU1JDMScpCitkZWZpbmUoU0FWRV9VUCxgUEFSQU1fRFNUJykKKworZGVmaW5lKGBycCcsICBgJWVkaScpCitkZWZpbmUoYHVwJywgIGAlZXNpJykKK2RlZmluZShgdnAnLCAgYCVlYngnKQorZGVmaW5lKGBjbnQnLCBgJWVheCcpCitkZWZpbmUoYHIxJywgIGAlZWN4JykKK2RlZmluZShgcjInLCAgYCVlZHgnKQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigxNikKK2RlZmxpdChgRlJBTUUnLDApCisKK1BST0xPR1VFKE00X2Z1bmN0aW9uKQorCW1vdglQQVJBTV9TSVpFLCBjbnQJCUMgc2l6ZQorCW1vdglycCwgU0FWRV9SUAorCW1vdglQQVJBTV9EU1QsIHJwCisJbW92CXVwLCBTQVZFX1VQCisJbW92CVBBUkFNX1NSQzEsIHVwCisJc2hyCWNudAkJCUMgc2l6ZSA+PiAxCisJbW92CXZwLCBTQVZFX1ZQCisJbW92CVBBUkFNX1NSQzIsIHZwCisJbW92CSh1cCksIHIxCisJanoJTChlbmQpCQkJQyBzaXplID09IDEKKwlqbmMJTChldmVuKQkJCUMgc2l6ZSAlIDIgPT0gMAorCisJQUxJR04oMTYpCitMKG9vcCk6CitNNHByZShgCW5vdGxfb3JfeG9ybF9HTVBfTlVNQl9NQVNLKHIxKScpCisJTTRfaW5zdAkodnApLCByMQorCWxlYQk4KHVwKSwgdXAKKwltb3YJLTQodXApLCByMgorTTRwb3N0KGAJbm90bF9vcl94b3JsX0dNUF9OVU1CX01BU0socjEpJykKKwlsZWEJOCh2cCksIHZwCisJbW92CXIxLCAocnApCitMKGVudHJ5KToKK000cHJlKGAJbm90bF9vcl94b3JsX0dNUF9OVU1CX01BU0socjIpJykKKwlNNF9pbnN0CS00KHZwKSwgcjIKKwlsZWEJOChycCksIHJwCitNNHBvc3QoYAlub3RsX29yX3hvcmxfR01QX05VTUJfTUFTSyhyMiknKQorCWRlYwljbnQKKwltb3YJKHVwKSwgcjEKKwltb3YJcjIsIC00KHJwKQorCWpueglMKG9vcCkKKworTChlbmQpOgorTTRwcmUoYAlub3RsX29yX3hvcmxfR01QX05VTUJfTUFTSyhyMSknKQorCW1vdglTQVZFX1VQLCB1cAorCU00X2luc3QJKHZwKSwgcjEKK000cG9zdChgbm90bF9vcl94b3JsX0dNUF9OVU1CX01BU0socjEpJykKKwltb3YJU0FWRV9WUCwgdnAKKwltb3YJcjEsIChycCkKKwltb3YJU0FWRV9SUCwgcnAKKwlyZXQKKworTChldmVuKToKKwltb3YJcjEsIHIyCisJbGVhCTQodXApLCB1cAorCWxlYQk0KHZwKSwgdnAKKwlsZWEJLTQocnApLCBycAorCWptcAlMKGVudHJ5KQorRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9hdG9tL2xzaGlmdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9hdG9tL2xzaGlmdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJjNzBkZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2F0b20vbHNoaWZ0LmFzbQpAQCAtMCwwICsxLDIxOCBAQAorZG5sICBJbnRlbCBBdG9tIG1wbl9sc2hpZnQgLS0gbXBuIGxlZnQgc2hpZnQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqb3JuIEdyYW5sdW5kIGFuZCBNYXJjbyBCb2RyYXRvLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgbXBfbGltYl90IG1wbl9sc2hpZnQgKG1wX3B0ciBkc3QsIG1wX3NyY3B0ciBzcmMsIG1wX3NpemVfdCBzaXplLAorQwkJCXVuc2lnbmVkIGNudCk7CisKK0MJCQkJICBjeWNsZXMvbGltYgorQwkJCQljbnQhPTEJY250PT0xCitDIFA1CitDIFA2IG1vZGVsIDAtOCwxMC0xMgorQyBQNiBtb2RlbCA5ICAoQmFuaWFzKQorQyBQNiBtb2RlbCAxMyAoRG90aGFuKQorQyBQNCBtb2RlbCAwICAoV2lsbGFtZXR0ZSkKK0MgUDQgbW9kZWwgMSAgKD8pCitDIFA0IG1vZGVsIDIgIChOb3J0aHdvb2QpCitDIFA0IG1vZGVsIDMgIChQcmVzY290dCkKK0MgUDQgbW9kZWwgNCAgKE5vY29uYSkKK0MgSW50ZWwgQXRvbQkJCSA1CSAyLjUKK0MgQU1EIEs2CitDIEFNRCBLNworQyBBTUQgSzgKK0MgQU1EIEsxMAorCitkZWZmcmFtZShQQVJBTV9DTlQsIDE2KQorZGVmZnJhbWUoUEFSQU1fU0laRSwxMikKK2RlZmZyYW1lKFBBUkFNX1NSQywgIDgpCitkZWZmcmFtZShQQVJBTV9EU1QsICA0KQorCitkbmwgIHJlLXVzZSBwYXJhbWV0ZXIgc3BhY2UKK2RlZmluZShTQVZFX1VQLGBQQVJBTV9DTlQnKQorZGVmaW5lKFZBUl9DT1VOVCxgUEFSQU1fU0laRScpCitkZWZpbmUoU0FWRV9FQlgsYFBBUkFNX1NSQycpCitkZWZpbmUoU0FWRV9FQlAsYFBBUkFNX0RTVCcpCisKK2RlZmluZShgcnAnLCAgYCVlZGknKQorZGVmaW5lKGB1cCcsICBgJWVzaScpCitkZWZpbmUoYGNudCcsICBgJWVjeCcpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDgpCitkZWZsaXQoYEZSQU1FJywwKQorUFJPTE9HVUUobXBuX2xzaGlmdCkKKwltb3YJUEFSQU1fQ05ULCBjbnQKKwltb3YJUEFSQU1fU0laRSwgJWVkeAorCW1vdgl1cCwgU0FWRV9VUAorCW1vdglQQVJBTV9TUkMsIHVwCisJcHVzaAlycAkJCUZSQU1FX3B1c2hsKCkKKwltb3YJUEFSQU1fRFNULCBycAorCitDIFdlIGNhbiB1c2UgZmFzdGVyIGNvZGUgZm9yIHNoaWZ0LWJ5LTEgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLgorCWNtcAkkMSxjbnQKKwlqbmUJTChub3JtYWwpCisJY21wbAlycCwgdXAKKwlqbmMJTChzcGVjaWFsKQkJQyBqdW1wIGlmIHNfcHRyICsgMSA+PSByZXNfcHRyCisJbGVhbAkodXAsJWVkeCw0KSwlZWF4CisJY21wbAklZWF4LHJwCisJam5jCUwoc3BlY2lhbCkJCUMganVtcCBpZiByZXNfcHRyID49IHNfcHRyICsgc2l6ZQorCitMKG5vcm1hbCk6CisJbGVhCS00KHVwLCVlZHgsNCksIHVwCisJbW92CSVlYngsIFNBVkVfRUJYCisJbGVhCS00KHJwLCVlZHgsNCksIHJwCisKKwlzaHIJJWVkeAorCW1vdgkodXApLCAlZWF4CisJbW92CSVlZHgsIFZBUl9DT1VOVAorCWpuYwlMKGV2bikKKworCW1vdgklZWF4LCAlZWJ4CisJc2hsCSVjbCwgJWVieAorCW5lZwljbnQKKwlzaHIJJWNsLCAlZWF4CisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoZ3QxKQorCW1vdgklZWJ4LCAocnApCisJam1wCUwocXVpdCkKKworTChndDEpOgltb3YJJWVicCwgU0FWRV9FQlAKKwlwdXNoCSVlYXgKKwltb3YJLTQodXApLCAlZWF4CisJbW92CSVlYXgsICVlYnAKKwlzaHIJJWNsLCAlZWF4CisJam1wCUwobG8xKQorCitMKGV2bik6CW1vdgklZWJwLCBTQVZFX0VCUAorCW5lZwljbnQKKwltb3YJJWVheCwgJWVicAorCW1vdgktNCh1cCksICVlZHgKKwlzaHIJJWNsLCAlZWF4CisJbW92CSVlZHgsICVlYngKKwlzaHIJJWNsLCAlZWR4CisJbmVnCWNudAorCWRlY2wJVkFSX0NPVU5UCisJbGVhCTQocnApLCBycAorCWxlYQktNCh1cCksIHVwCisJanoJTChlbmQpCisJcHVzaAklZWF4CQkJRlJBTUVfcHVzaGwoKQorCisJQUxJR04oOCkKK0wodG9wKToJc2hsCSVjbCwgJWVicAorCW9yCSVlYnAsICVlZHgKKwlzaGwJJWNsLCAlZWJ4CisJbmVnCWNudAorCW1vdgktNCh1cCksICVlYXgKKwltb3YJJWVheCwgJWVicAorCW1vdgklZWR4LCAtNChycCkKKwlzaHIJJWNsLCAlZWF4CisJbGVhCS04KHJwKSwgcnAKK0wobG8xKToJbW92CS04KHVwKSwgJWVkeAorCW9yCSVlYngsICVlYXgKKwltb3YJJWVkeCwgJWVieAorCXNocgklY2wsICVlZHgKKwlsZWEJLTgodXApLCB1cAorCW5lZwljbnQKKwltb3YJJWVheCwgKHJwKQorCWRlY2wJVkFSX0NPVU5UCisJamcJTCh0b3ApCisKKwlwb3AJJWVheAkJCUZSQU1FX3BvcGwoKQorTChlbmQpOgorCXNobAklY2wsICVlYnAKKwlzaGwJJWNsLCAlZWJ4CisJb3IJJWVicCwgJWVkeAorCW1vdglTQVZFX0VCUCwgJWVicAorCW1vdgklZWR4LCAtNChycCkKKwltb3YJJWVieCwgLTgocnApCisKK0wocXVpdCk6CisJbW92CVNBVkVfVVAsIHVwCisJbW92CVNBVkVfRUJYLCAlZWJ4CisJcG9wCXJwCQkJRlJBTUVfcG9wbCgpCisJcmV0CisKK0woc3BlY2lhbCk6CitkZWZsaXQoYEZSQU1FJyw0KQorCWxlYQkzKCVlZHgpLCAlZWF4CQlDIHNpemUgKyAzCisJZGVjCSVlZHgJCQlDIHNpemUgLSAxCisJbW92CSh1cCksICVlY3gKKwlzaHIJJDIsICVlYXgJCUMgKHNpemUgKyAzKSAvIDQKKwlhbmQJJDMsICVlZHgJCUMgKHNpemUgLSAxKSAlIDQKKwlqeglMKGdvbG9vcCkJCUMgam1wIGlmICBzaXplID09IDEgKG1vZCA0KQorCXNocgklZWR4CisJam5jCUwob2RkKQkJCUMganVtIGlmICBzaXplID09IDMgKG1vZCA0KQorCisJYWRkCSVlY3gsICVlY3gKKwlsZWEJNCh1cCksIHVwCisJbW92CSVlY3gsIChycCkKKwltb3YJKHVwKSwgJWVjeAorCWxlYQk0KHJwKSwgcnAKKworCWRlYwklZWR4CisJam56CUwoZ29sb29wKQkJQyBqdW1wIGlmICBzaXplID09IDAgKG1vZCA0KQorTChvZGQpOglsZWEJLTgodXApLCB1cAorCWxlYQktOChycCksIHJwCisJam1wCUwoc2VudHJ5KQkJQyByZWFjaGVkIGlmIHNpemUgPT0gMiBvciAzIChtb2QgNCkKKworTChzbG9vcCk6CisJYWRjCSVlY3gsICVlY3gKKwltb3YJNCh1cCksICVlZHgKKwltb3YJJWVjeCwgKHJwKQorCWFkYwklZWR4LCAlZWR4CisJbW92CTgodXApLCAlZWN4CisJbW92CSVlZHgsIDQocnApCitMKHNlbnRyeSk6CisJYWRjCSVlY3gsICVlY3gKKwltb3YJMTIodXApLCAlZWR4CisJbW92CSVlY3gsIDgocnApCisJYWRjCSVlZHgsICVlZHgKKwlsZWEJMTYodXApLCB1cAorCW1vdgklZWR4LCAxMihycCkKKwlsZWEJMTYocnApLCBycAorCW1vdgkodXApLCAlZWN4CitMKGdvbG9vcCk6CisJZGVjbAklZWF4CisJam56CUwoc2xvb3ApCisKK0woc3F1aXQpOgorCWFkYwklZWN4LCAlZWN4CisJbW92CSVlY3gsIChycCkKKwlhZGMJJWVheCwgJWVheAorCisJbW92CVNBVkVfVVAsIHVwCisJcG9wCXJwCQkJRlJBTUVfcG9wbCgpCisJcmV0CitFUElMT0dVRSgpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2F0b20vbHNoaWZ0Yy5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9hdG9tL2xzaGlmdGMuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZTUzZWQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9hdG9tL2xzaGlmdGMuYXNtCkBAIC0wLDAgKzEsMTU5IEBACitkbmwgIEludGVsIEF0b20gbXBuX2xzaGlmdGMgLS0gbXBuIGxlZnQgc2hpZnQgd2l0aCBjb21wbGVtZW50LgorCitkbmwgIENvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3Jiam9ybiBHcmFubHVuZCBhbmQgTWFyY28gQm9kcmF0by4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDIG1wX2xpbWJfdCBtcG5fbHNoaWZ0YyAobXBfcHRyIGRzdCwgbXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUsCitDCQkJIHVuc2lnbmVkIGNudCk7CisKK0MJCQkJY3ljbGVzL2xpbWIKK0MgUDUKK0MgUDYgbW9kZWwgMC04LDEwLTEyCitDIFA2IG1vZGVsIDkgIChCYW5pYXMpCitDIFA2IG1vZGVsIDEzIChEb3RoYW4pCitDIFA0IG1vZGVsIDAgIChXaWxsYW1ldHRlKQorQyBQNCBtb2RlbCAxICAoPykKK0MgUDQgbW9kZWwgMiAgKE5vcnRod29vZCkKK0MgUDQgbW9kZWwgMyAgKFByZXNjb3R0KQorQyBQNCBtb2RlbCA0ICAoTm9jb25hKQorQyBJbnRlbCBBdG9tCQkJIDUuNQorQyBBTUQgSzYKK0MgQU1EIEs3CitDIEFNRCBLOAorQyBBTUQgSzEwCisKK2RlZmZyYW1lKFBBUkFNX0NOVCwgMTYpCitkZWZmcmFtZShQQVJBTV9TSVpFLDEyKQorZGVmZnJhbWUoUEFSQU1fU1JDLCAgOCkKK2RlZmZyYW1lKFBBUkFNX0RTVCwgIDQpCisKK2RubCAgcmUtdXNlIHBhcmFtZXRlciBzcGFjZQorZGVmaW5lKFNBVkVfVVAsYFBBUkFNX0NOVCcpCitkZWZpbmUoVkFSX0NPVU5ULGBQQVJBTV9TSVpFJykKK2RlZmluZShTQVZFX0VCWCxgUEFSQU1fU1JDJykKK2RlZmluZShTQVZFX0VCUCxgUEFSQU1fRFNUJykKKworZGVmaW5lKGBycCcsICBgJWVkaScpCitkZWZpbmUoYHVwJywgIGAlZXNpJykKK2RlZmluZShgY250JywgIGAlZWN4JykKKworQVNNX1NUQVJUKCkKKwlURVhUCisKK1BST0xPR1VFKG1wbl9sc2hpZnRjKQorZGVmbGl0KGBGUkFNRScsMCkKKwltb3YJUEFSQU1fQ05ULCBjbnQKKwltb3YJUEFSQU1fU0laRSwgJWVkeAorCW1vdgl1cCwgU0FWRV9VUAorCW1vdglQQVJBTV9TUkMsIHVwCisJcHVzaAlycAkJCUZSQU1FX3B1c2hsKCkKKwltb3YJUEFSQU1fRFNULCBycAorCisJbGVhCS00KHVwLCVlZHgsNCksIHVwCisJbW92CSVlYngsIFNBVkVfRUJYCisJbGVhCS00KHJwLCVlZHgsNCksIHJwCisKKwlzaHIJJWVkeAorCW1vdgkodXApLCAlZWF4CisJbW92CSVlZHgsIFZBUl9DT1VOVAorCWpuYwlMKGV2bikKKworCW1vdgklZWF4LCAlZWJ4CisJc2hsCSVjbCwgJWVieAorCW5lZwljbnQKKwlzaHIJJWNsLCAlZWF4CisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoZ3QxKQorCW5vdAklZWJ4CisJbW92CSVlYngsIChycCkKKwlqbXAJTChxdWl0KQorCitMKGd0MSk6CW1vdgklZWJwLCBTQVZFX0VCUAorCXB1c2gJJWVheAorCW1vdgktNCh1cCksICVlYXgKKwltb3YJJWVheCwgJWVicAorCXNocgklY2wsICVlYXgKKwlqbXAJTChsbzEpCisKK0woZXZuKToJbW92CSVlYnAsIFNBVkVfRUJQCisJbmVnCWNudAorCW1vdgklZWF4LCAlZWJwCisJbW92CS00KHVwKSwgJWVkeAorCXNocgklY2wsICVlYXgKKwltb3YJJWVkeCwgJWVieAorCXNocgklY2wsICVlZHgKKwluZWcJY250CisJZGVjbAlWQVJfQ09VTlQKKwlsZWEJNChycCksIHJwCisJbGVhCS00KHVwKSwgdXAKKwlqeglMKGVuZCkKKwlwdXNoCSVlYXgJCQlGUkFNRV9wdXNobCgpCisKK0wodG9wKToJc2hsCSVjbCwgJWVicAorCW9yCSVlYnAsICVlZHgKKwlzaGwJJWNsLCAlZWJ4CisJbmVnCWNudAorCW5vdAklZWR4CisJbW92CS00KHVwKSwgJWVheAorCW1vdgklZWF4LCAlZWJwCisJbW92CSVlZHgsIC00KHJwKQorCXNocgklY2wsICVlYXgKKwlsZWEJLTgocnApLCBycAorTChsbzEpOgltb3YJLTgodXApLCAlZWR4CisJb3IJJWVieCwgJWVheAorCW1vdgklZWR4LCAlZWJ4CisJc2hyCSVjbCwgJWVkeAorCW5vdAklZWF4CisJbGVhCS04KHVwKSwgdXAKKwluZWcJY250CisJbW92CSVlYXgsIChycCkKKwlkZWNsCVZBUl9DT1VOVAorCWpnCUwodG9wKQorCisJcG9wCSVlYXgJCQlGUkFNRV9wb3BsKCkKK0woZW5kKToKKwlzaGwJJWNsLCAlZWJwCisJc2hsCSVjbCwgJWVieAorCW9yCSVlYnAsICVlZHgKKwltb3YJU0FWRV9FQlAsICVlYnAKKwlub3QJJWVkeAorCW5vdAklZWJ4CisJbW92CSVlZHgsIC00KHJwKQorCW1vdgklZWJ4LCAtOChycCkKKworTChxdWl0KToKKwltb3YJU0FWRV9VUCwgdXAKKwltb3YJU0FWRV9FQlgsICVlYngKKwlwb3AJcnAJCQlGUkFNRV9wb3BsKCkKKwlyZXQKK0VQSUxPR1VFKCkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYXRvbS9tbXgvY29weWQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYXRvbS9tbXgvY29weWQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MGZiMDMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9hdG9tL21teC9jb3B5ZC5hc20KQEAgLTAsMCArMSwzNCBAQAorZG5sICBJbnRlbCBBdG9tIG1wbl9jb3B5ZCAtLSBjb3B5IGxpbWIgdmVjdG9yLCBkZWNyZW1lbnRpbmcuCisKK2RubCAgQ29weXJpZ2h0IDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fY29weWQpCitpbmNsdWRlX21wbihgeDg2L2s3L21teC9jb3B5ZC5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYXRvbS9tbXgvY29weWkuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYXRvbS9tbXgvY29weWkuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5YjZiOGQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9hdG9tL21teC9jb3B5aS5hc20KQEAgLTAsMCArMSwzNCBAQAorZG5sICBJbnRlbCBBdG9tIG1wbl9jb3B5aSAtLSBjb3B5IGxpbWIgdmVjdG9yLCBpbmNyZW1lbnRpbmcuCisKK2RubCAgQ29weXJpZ2h0IDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fY29weWkpCitpbmNsdWRlX21wbihgeDg2L2s3L21teC9jb3B5aS5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYXRvbS9tbXgvaGFtZGlzdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9hdG9tL21teC9oYW1kaXN0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmU4MjUzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYXRvbS9tbXgvaGFtZGlzdC5hc20KQEAgLTAsMCArMSwzNCBAQAorZG5sICBJbnRlbCBBdG9tIG1wbl9oYW1kaXN0IC0tIGhhbW1pbmcgZGlzdGFuY2UuCisKK2RubCAgQ29weXJpZ2h0IDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5faGFtZGlzdCkKK2luY2x1ZGVfbXBuKGB4ODYvazcvbW14L3BvcGhhbS5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYXRvbS9tb2RfMzRsc3ViMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9hdG9tL21vZF8zNGxzdWIxLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDU3YmEzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYXRvbS9tb2RfMzRsc3ViMS5hc20KQEAgLTAsMCArMSwzNCBAQAorZG5sICBJbnRlbCBBdG9tIG1wbl9tb2RfMzRsc3ViMSAtLSByZW1haW5kZXIgbW9kdWxvIDJeMjQtMS4KKworZG5sICBDb3B5cmlnaHQgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9tb2RfMzRsc3ViMSkKK2luY2x1ZGVfbXBuKGB4ODYvcDYvbW9kXzM0bHN1YjEuYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2F0b20vbW9kZTFvLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2F0b20vbW9kZTFvLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWVlNmJkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYXRvbS9tb2RlMW8uYXNtCkBAIC0wLDAgKzEsMzQgQEAKK2RubCAgSW50ZWwgQXRvbSBtcG5fbW9kZXhhY3RfMV9vZGQgLS0gZXhhY3QgZGl2aXNpb24gc3R5bGUgcmVtYWluZGVyLgorCitkbmwgIENvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX21vZGV4YWN0XzFfb2RkIG1wbl9tb2RleGFjdF8xY19vZGQpCitpbmNsdWRlX21wbihgeDg2L3BlbnRpdW0vbW9kZTFvLmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9hdG9tL3JzaGlmdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9hdG9tL3JzaGlmdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNiNWRiZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2F0b20vcnNoaWZ0LmFzbQpAQCAtMCwwICsxLDE1MiBAQAorZG5sICBJbnRlbCBBdG9tIG1wbl9yc2hpZnQgLS0gbXBuIHJpZ2h0IHNoaWZ0LgorCitkbmwgIENvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIENvbnZlcnRlZCBmcm9tIEFNRDY0IGJ5IE1hcmNvIEJvZHJhdG8uCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBtcF9saW1iX3QgbXBuX3JzaGlmdCAobXBfcHRyIGRzdCwgbXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUsCitDCQkJdW5zaWduZWQgY250KTsKKworQwkJCQljeWNsZXMvbGltYgorQyBQNQorQyBQNiBtb2RlbCAwLTgsMTAtMTIKK0MgUDYgbW9kZWwgOSAgKEJhbmlhcykKK0MgUDYgbW9kZWwgMTMgKERvdGhhbikKK0MgUDQgbW9kZWwgMCAgKFdpbGxhbWV0dGUpCitDIFA0IG1vZGVsIDEgICg/KQorQyBQNCBtb2RlbCAyICAoTm9ydGh3b29kKQorQyBQNCBtb2RlbCAzICAoUHJlc2NvdHQpCitDIFA0IG1vZGVsIDQgIChOb2NvbmEpCitDIEludGVsIEF0b20JCQkgNQorQyBBTUQgSzYKK0MgQU1EIEs3CitDIEFNRCBLOAorQyBBTUQgSzEwCisKK2RlZmZyYW1lKFBBUkFNX0NOVCwgMTYpCitkZWZmcmFtZShQQVJBTV9TSVpFLDEyKQorZGVmZnJhbWUoUEFSQU1fU1JDLCAgOCkKK2RlZmZyYW1lKFBBUkFNX0RTVCwgIDQpCisKK2RubCAgcmUtdXNlIHBhcmFtZXRlciBzcGFjZQorZGVmaW5lKFNBVkVfVVAsYFBBUkFNX0NOVCcpCitkZWZpbmUoVkFSX0NPVU5ULGBQQVJBTV9TSVpFJykKK2RlZmluZShTQVZFX0VCWCxgUEFSQU1fU1JDJykKK2RlZmluZShTQVZFX0VCUCxgUEFSQU1fRFNUJykKKworZGVmaW5lKGBycCcsICBgJWVkaScpCitkZWZpbmUoYHVwJywgIGAlZXNpJykKK2RlZmluZShgY250JywgIGAlZWN4JykKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oOCkKK2RlZmxpdChgRlJBTUUnLDApCitQUk9MT0dVRShtcG5fcnNoaWZ0KQorCW1vdglQQVJBTV9DTlQsIGNudAorCW1vdglQQVJBTV9TSVpFLCAlZWR4CisJbW92CXVwLCBTQVZFX1VQCisJbW92CVBBUkFNX1NSQywgdXAKKwlwdXNoCXJwCQkJRlJBTUVfcHVzaGwoKQorCW1vdglQQVJBTV9EU1QsIHJwCisJbW92CSVlYngsIFNBVkVfRUJYCisKKwlzaHIJJWVkeAorCW1vdgkodXApLCAlZWF4CisJbW92CSVlZHgsIFZBUl9DT1VOVAorCWpuYwlMKGV2bikKKworCW1vdgklZWF4LCAlZWJ4CisJc2hyCSVjbCwgJWVieAorCW5lZwljbnQKKwlzaGwJJWNsLCAlZWF4CisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoZ3QxKQorCW1vdgklZWJ4LCAocnApCisJam1wCUwocXVpdCkKKworTChndDEpOgltb3YJJWVicCwgU0FWRV9FQlAKKwlwdXNoCSVlYXgKKwltb3YJNCh1cCksICVlYXgKKwltb3YJJWVheCwgJWVicAorCXNobAklY2wsICVlYXgKKwlqbXAJTChsbzEpCisKK0woZXZuKToJbW92CSVlYnAsIFNBVkVfRUJQCisJbmVnCWNudAorCW1vdgklZWF4LCAlZWJwCisJbW92CTQodXApLCAlZWR4CisJc2hsCSVjbCwgJWVheAorCW1vdgklZWR4LCAlZWJ4CisJc2hsCSVjbCwgJWVkeAorCW5lZwljbnQKKwlkZWNsCVZBUl9DT1VOVAorCWxlYQktNChycCksIHJwCisJbGVhCTQodXApLCB1cAorCWp6CUwoZW5kKQorCXB1c2gJJWVheAkJCUZSQU1FX3B1c2hsKCkKKworCUFMSUdOKDgpCitMKHRvcCk6CXNocgklY2wsICVlYnAKKwlvcgklZWJwLCAlZWR4CisJc2hyCSVjbCwgJWVieAorCW5lZwljbnQKKwltb3YJNCh1cCksICVlYXgKKwltb3YJJWVheCwgJWVicAorCW1vdgklZWR4LCA0KHJwKQorCXNobAklY2wsICVlYXgKKwlsZWEJOChycCksIHJwCitMKGxvMSk6CW1vdgk4KHVwKSwgJWVkeAorCW9yCSVlYngsICVlYXgKKwltb3YJJWVkeCwgJWVieAorCXNobAklY2wsICVlZHgKKwlsZWEJOCh1cCksIHVwCisJbmVnCWNudAorCW1vdgklZWF4LCAocnApCisJZGVjbAlWQVJfQ09VTlQKKwlqZwlMKHRvcCkKKworCXBvcAklZWF4CQkJRlJBTUVfcG9wbCgpCitMKGVuZCk6CisJc2hyCSVjbCwgJWVicAorCXNocgklY2wsICVlYngKKwlvcgklZWJwLCAlZWR4CisJbW92CVNBVkVfRUJQLCAlZWJwCisJbW92CSVlZHgsIDQocnApCisJbW92CSVlYngsIDgocnApCisKK0wocXVpdCk6CisJbW92CVNBVkVfVVAsIHVwCisJbW92CVNBVkVfRUJYLCAlZWJ4CisJcG9wCXJwCQkJRlJBTUVfcG9wbCgpCisJcmV0CitFUElMT0dVRSgpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2F0b20vc3NlMi9hb3JzbXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYXRvbS9zc2UyL2FvcnNtdWxfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY5YTE0YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2F0b20vc3NlMi9hb3JzbXVsXzEuYXNtCkBAIC0wLDAgKzEsMTc0IEBACitkbmwgeDg2LTMyIG1wbl9hZGRtdWxfMSBhbmQgbXBuX3N1Ym11bF8xIG9wdGltaXNlZCBmb3IgSW50ZWwgQXRvbS4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQgYW5kIE1hcmNvIEJvZHJhdG8uCisKK2RubCAgQ29weXJpZ2h0IDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkJCSAgICBjeWNsZXMvbGltYgorQwkJCSAgICBjeWNsZXMvbGltYgorQyBQNQkJCQkgLQorQyBQNiBtb2RlbCAwLTgsMTAtMTIJCSAtCitDIFA2IG1vZGVsIDkgIChCYW5pYXMpCitDIFA2IG1vZGVsIDEzIChEb3RoYW4pCitDIFA0IG1vZGVsIDAgIChXaWxsYW1ldHRlKQorQyBQNCBtb2RlbCAxICAoPykKK0MgUDQgbW9kZWwgMiAgKE5vcnRod29vZCkKK0MgUDQgbW9kZWwgMyAgKFByZXNjb3R0KQorQyBQNCBtb2RlbCA0ICAoTm9jb25hKQorQyBJbnRlbCBBdG9tCQkJIDgKK0MgQU1EIEs2CitDIEFNRCBLNwkJCSAtCitDIEFNRCBLOAorQyBBTUQgSzEwCisKK2RlZmluZShgcnAnLCBgJWVkaScpCitkZWZpbmUoYHVwJywgYCVlc2knKQorZGVmaW5lKGBuJywgIGAlZWN4JykKKworaWZkZWYoYE9QRVJBVElPTl9hZGRtdWxfMScsYAorCWRlZmluZShBRERTVUIsICBhZGQpCisJZGVmaW5lKGZ1bmNfMSwgIG1wbl9hZGRtdWxfMSkKKwlkZWZpbmUoZnVuY18xYywgbXBuX2FkZG11bF8xYyknKQoraWZkZWYoYE9QRVJBVElPTl9zdWJtdWxfMScsYAorCWRlZmluZShBRERTVUIsICBzdWIpCisJZGVmaW5lKGZ1bmNfMSwgIG1wbl9zdWJtdWxfMSkKKwlkZWZpbmUoZnVuY18xYywgbXBuX3N1Ym11bF8xYyknKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRtdWxfMSBtcG5fYWRkbXVsXzFjIG1wbl9zdWJtdWxfMSBtcG5fc3VibXVsXzFjKQorCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUoZnVuY18xKQorCXhvcgklZWR4LCAlZWR4CitMKGVudCk6CXB1c2gJJWVkaQorCXB1c2gJJWVzaQorCXB1c2gJJWVieAorCW1vdgkxNiglZXNwKSwgcnAKKwltb3YJMjAoJWVzcCksIHVwCisJbW92CTI0KCVlc3ApLCBuCisJbW92ZAkyOCglZXNwKSwgJW1tNworCXRlc3QJJDEsIG4KKwlqeglMKGZpMG9yMikKKwltb3ZkCSh1cCksICVtbTAKKwlwbXVsdWRxCSVtbTcsICVtbTAKKwlzaHIJJDIsIG4KKwlqbmMJTChmaTEpCisKK0woZmkzKToJbGVhCS04KHVwKSwgdXAKKwlsZWEJLTgocnApLCBycAorCW1vdmQJMTIodXApLCAlbW0xCisJbW92ZAklbW0wLCAlZWJ4CisJcG11bHVkcQklbW03LCAlbW0xCisJYWRkCSQxLCBuCQkJQyBpbmNyZW1lbnQgYW5kIGNsZWFyIGNhcnJ5CisJam1wCUwobG8zKQorCitMKGZpMSk6CW1vdmQJJW1tMCwgJWVieAorCWp6CUwod2QxKQorCW1vdmQJNCh1cCksICVtbTEKKwlwbXVsdWRxCSVtbTcsICVtbTEKKwlqbXAJTChsbzEpCisKK0woZmkwb3IyKToKKwltb3ZkCSh1cCksICVtbTEKKwlwbXVsdWRxCSVtbTcsICVtbTEKKwlzaHIJJDIsIG4KKwltb3ZkCTQodXApLCAlbW0wCisJamMJTChmaTIpCisJbGVhCS00KHVwKSwgdXAKKwlsZWEJLTQocnApLCBycAorCW1vdmQJJW1tMSwgJWVheAorCXBtdWx1ZHEJJW1tNywgJW1tMAorCWptcAlMKGxvMCkKKworTChmaTIpOglsZWEJNCh1cCksIHVwCisJYWRkCSQxLCBuCQkJQyBpbmNyZW1lbnQgYW5kIGNsZWFyIGNhcnJ5CisJbW92ZAklbW0xLCAlZWF4CisJbGVhCS0xMihycCksIHJwCisJam1wCUwobG8yKQorCitDCUFMSUdOKDE2KQkJCUMgYWxpZ25tZW50IHNlZW1zIGlycmVsZXZhbnQKK0wodG9wKToJbW92ZAk0KHVwKSwgJW1tMQorCWFkYwkkMCwgJWVkeAorCUFERFNVQgklZWF4LCAxMihycCkKKwltb3ZkCSVtbTAsICVlYngKKwlwbXVsdWRxCSVtbTcsICVtbTEKKwlsZWEJMTYocnApLCBycAorTChsbzEpOglwc3JscQkkMzIsICVtbTAKKwlhZGMJJWVkeCwgJWVieAorCW1vdmQJJW1tMCwgJWVkeAorCW1vdmQJJW1tMSwgJWVheAorCW1vdmQJOCh1cCksICVtbTAKKwlwbXVsdWRxCSVtbTcsICVtbTAKKwlhZGMJJDAsICVlZHgKKwlBRERTVUIJJWVieCwgKHJwKQorTChsbzApOglwc3JscQkkMzIsICVtbTEKKwlhZGMJJWVkeCwgJWVheAorCW1vdmQJJW1tMSwgJWVkeAorCW1vdmQJJW1tMCwgJWVieAorCW1vdmQJMTIodXApLCAlbW0xCisJcG11bHVkcQklbW03LCAlbW0xCisJYWRjCSQwLCAlZWR4CisJQUREU1VCCSVlYXgsIDQocnApCitMKGxvMyk6CXBzcmxxCSQzMiwgJW1tMAorCWFkYwklZWR4LCAlZWJ4CisJbW92ZAklbW0wLCAlZWR4CisJbW92ZAklbW0xLCAlZWF4CisJbGVhCTE2KHVwKSwgdXAKKwltb3ZkCSh1cCksICVtbTAKKwlhZGMJJDAsICVlZHgKKwlBRERTVUIJJWVieCwgOChycCkKK0wobG8yKToJcHNybHEJJDMyLCAlbW0xCisJYWRjCSVlZHgsICVlYXgKKwltb3ZkCSVtbTEsICVlZHgKKwlwbXVsdWRxCSVtbTcsICVtbTAKKwlkZWMJbgorCWpueglMKHRvcCkKKworTChlbmQpOglhZGMJbiwgJWVkeAkJCUMgbiBpcyB6ZXJvIGhlcmUKKwlBRERTVUIJJWVheCwgMTIocnApCisJbW92ZAklbW0wLCAlZWJ4CisJbGVhCTE2KHJwKSwgcnAKK0wod2QxKToJcHNybHEJJDMyLCAlbW0wCisJYWRjCSVlZHgsICVlYngKKwltb3ZkCSVtbTAsICVlYXgKKwlhZGMJbiwgJWVheAorCUFERFNVQgklZWJ4LCAocnApCisJZW1tcworCWFkYwluLCAlZWF4CisJcG9wCSVlYngKKwlwb3AJJWVzaQorCXBvcAklZWRpCisJcmV0CitFUElMT0dVRSgpCitQUk9MT0dVRShmdW5jXzFjKQorCW1vdgkyMCglZXNwKSwgJWVkeAkJQyBjYXJyeQorCWptcAlMKGVudCkKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2F0b20vc3NlMi9iZGl2X2RibTFjLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2F0b20vc3NlMi9iZGl2X2RibTFjLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODJlOTE0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYXRvbS9zc2UyL2JkaXZfZGJtMWMuYXNtCkBAIC0wLDAgKzEsMzQgQEAKK2RubCAgSW50ZWwgQXRvbSAgbXBuX2JkaXZfZGJtMS4KKworZG5sICBDb3B5cmlnaHQgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9iZGl2X2RibTFjKQoraW5jbHVkZV9tcG4oYHg4Ni9wZW50aXVtNC9zc2UyL2JkaXZfZGJtMWMuYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2F0b20vc3NlMi9kaXZyZW1fMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9hdG9tL3NzZTIvZGl2cmVtXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NDcwOWEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9hdG9tL3NzZTIvZGl2cmVtXzEuYXNtCkBAIC0wLDAgKzEsMzQgQEAKK2RubCAgSW50ZWwgQXRvbSBtcG5fZGl2cmVtXzEgLS0gbXBuIGJ5IGxpbWIgZGl2aXNpb24uCisKK2RubCAgQ29weXJpZ2h0IDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fcHJlaW52X2RpdnJlbV8xIG1wbl9kaXZyZW1fMWMgbXBuX2RpdnJlbV8xKQoraW5jbHVkZV9tcG4oYHg4Ni9wZW50aXVtNC9zc2UyL2RpdnJlbV8xLmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9hdG9tL3NzZTIvbW9kXzFfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9hdG9tL3NzZTIvbW9kXzFfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU2NTgxZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2F0b20vc3NlMi9tb2RfMV8xLmFzbQpAQCAtMCwwICsxLDM0IEBACitkbmwgIEludGVsIEF0b20vU1NFMiBtcG5fbW9kXzFfMS4KKworZG5sICBDb3B5cmlnaHQgMjAwOSwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9tb2RfMV8xcCkKK2luY2x1ZGVfbXBuKGB4ODYvcGVudGl1bTQvc3NlMi9tb2RfMV8xLmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9hdG9tL3NzZTIvbW9kXzFfNC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9hdG9tL3NzZTIvbW9kXzFfNC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFmYWEzZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2F0b20vc3NlMi9tb2RfMV80LmFzbQpAQCAtMCwwICsxLDM0IEBACitkbmwgIEludGVsIEF0b20vU1NFMiBtcG5fbW9kXzFfNC4KKworZG5sICBDb3B5cmlnaHQgMjAwOSwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9tb2RfMXNfNHApCitpbmNsdWRlX21wbihgeDg2L3BlbnRpdW00L3NzZTIvbW9kXzFfNC5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYXRvbS9zc2UyL211bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2F0b20vc3NlMi9tdWxfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEzYmI5NwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2F0b20vc3NlMi9tdWxfMS5hc20KQEAgLTAsMCArMSwxMjQgQEAKK2RubCAgSW50ZWwgQXRvbSBtcG5fbXVsXzEuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqb3JuIEdyYW5sdW5kIGFuZCBNYXJjbyBCb2RyYXRvLgorCitkbmwgIENvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJCQkgICAgY3ljbGVzL2xpbWIKK0MJCQkgICAgY3ljbGVzL2xpbWIKK0MgUDUJCQkJIC0KK0MgUDYgbW9kZWwgMC04LDEwLTEyCQkgLQorQyBQNiBtb2RlbCA5ICAoQmFuaWFzKQorQyBQNiBtb2RlbCAxMyAoRG90aGFuKQorQyBQNCBtb2RlbCAwICAoV2lsbGFtZXR0ZSkKK0MgUDQgbW9kZWwgMSAgKD8pCitDIFA0IG1vZGVsIDIgIChOb3J0aHdvb2QpCitDIFA0IG1vZGVsIDMgIChQcmVzY290dCkKK0MgUDQgbW9kZWwgNCAgKE5vY29uYSkKK0MgSW50ZWwgQXRvbQkJCSA3LjUKK0MgQU1EIEs2CQkJIC0KK0MgQU1EIEs3CQkJIC0KK0MgQU1EIEs4CitDIEFNRCBLMTAKKworZGVmZnJhbWUoUEFSQU1fQ0FSUlksMjApCitkZWZmcmFtZShQQVJBTV9NVUwsICAxNikKK2RlZmZyYW1lKFBBUkFNX1NJWkUsIDEyKQorZGVmZnJhbWUoUEFSQU1fU1JDLCAgOCkKK2RlZmZyYW1lKFBBUkFNX0RTVCwgIDQpCisKK2RlZmluZShgcnAnLCBgJWVkeCcpCitkZWZpbmUoYHVwJywgYCVlc2knKQorZGVmaW5lKGBuJywgIGAlZWN4JykKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMTYpCitkZWZsaXQoYEZSQU1FJywwKQorCitQUk9MT0dVRShtcG5fbXVsXzFjKQorCW1vdmQJUEFSQU1fQ0FSUlksICVtbTYJQyBjYXJyeQorCWptcAlMKGVudCkKK0VQSUxPR1VFKCkKKworCUFMSUdOKDgpCQkJQyBmb3IgY29tcGFjdCBjb2RlCitQUk9MT0dVRShtcG5fbXVsXzEpCisJcHhvcgklbW02LCAlbW02CitMKGVudCk6CXB1c2gJJWVzaQkJCUZSQU1FX3B1c2hsKCkKKwltb3YJUEFSQU1fU1JDLCB1cAorCW1vdglQQVJBTV9TSVpFLCAlZWF4CUMgc2l6ZQorCW1vdmQJUEFSQU1fTVVMLCAlbW03CisJbW92ZAkodXApLCAlbW0wCisJbW92CSVlYXgsIG4KKwlhbmQJJDMsICVlYXgKKwlwbXVsdWRxCSVtbTcsICVtbTAKKwltb3YJUEFSQU1fRFNULCBycAorCWp6CUwobG8wKQorCWNtcAkkMiwgJWVheAorCWxlYQktMTYodXAsJWVheCw0KSx1cAorCWxlYQktMTYocnAsJWVheCw0KSxycAorCWpjCUwobG8xKQorCWp6CUwobG8yKQorCWptcAlMKGxvMykKKworCUFMSUdOKDE2KQorTCh0b3ApOgltb3ZkCSh1cCksICVtbTAKKwlwbXVsdWRxCSVtbTcsICVtbTAKKwlwc3JscQkkMzIsICVtbTYKKwlsZWEJMTYocnApLCBycAorTChsbzApOglwYWRkcQklbW0wLCAlbW02CisJbW92ZAk0KHVwKSwgJW1tMAorCXBtdWx1ZHEJJW1tNywgJW1tMAorCW1vdmQJJW1tNiwgKHJwKQorCXBzcmxxCSQzMiwgJW1tNgorTChsbzMpOglwYWRkcQklbW0wLCAlbW02CisJbW92ZAk4KHVwKSwgJW1tMAorCXBtdWx1ZHEJJW1tNywgJW1tMAorCW1vdmQJJW1tNiwgNChycCkKKwlwc3JscQkkMzIsICVtbTYKK0wobG8yKToJcGFkZHEJJW1tMCwgJW1tNgorCW1vdmQJMTIodXApLCAlbW0wCisJcG11bHVkcQklbW03LCAlbW0wCisJbW92ZAklbW02LCA4KHJwKQorCXBzcmxxCSQzMiwgJW1tNgorTChsbzEpOglwYWRkcQklbW0wLCAlbW02CisJc3ViCSQ0LCBuCisJbW92ZAklbW02LCAxMihycCkKKwlsZWEJMTYodXApLCB1cAorCWphCUwodG9wKQorCisJcHNybHEJJDMyLCAlbW02CisJbW92ZAklbW02LCAlZWF4CisJZW1tcworCXBvcAklZXNpCQkJRlJBTUVfcG9wbCgpCisJcmV0CitFUElMT0dVRSgpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2F0b20vc3NlMi9tdWxfYmFzZWNhc2UuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYXRvbS9zc2UyL211bF9iYXNlY2FzZS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdkM2FlYgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2F0b20vc3NlMi9tdWxfYmFzZWNhc2UuYXNtCkBAIC0wLDAgKzEsNTAxIEBACitkbmwgIHg4NiBtcG5fbXVsX2Jhc2VjYXNlIC0tIE11bHRpcGx5IHR3byBsaW1iIHZlY3RvcnMgYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4KK2RubCAgYSB0aGlyZCBsaW1iIHZlY3Rvci4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQgYW5kIE1hcmNvIEJvZHJhdG8uCisKK2RubCAgQ29weXJpZ2h0IDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBUT0RPCitDICAqIENoZWNrIGlmICdqbXAgTiglZXNwKScgaXMgd2VsbC1wcmVkaWN0ZWQgZW5vdWdoIHRvIGFsbG93IHVzIHRvIGNvbWJpbmUgdGhlCitDICAgIDQgbGFyZ2UgbG9vcHMgaW50byBvbmU7IHdlIGNvdWxkIHVzZSBpdCBmb3IgdGhlIG91dGVyIGxvb3AgYnJhbmNoLgorQyAgKiBPcHRpbWlzZSBjb2RlIG91dHNpZGUgb2YgaW5uZXIgbG9vcHMuCitDICAqIFdyaXRlIGNvbWJpbmVkIGFkZG11bF8xIGZlZWQtaW4gYSB3aW5kLWRvd24gY29kZSwgYW5kIHVzZSB3aGVuIGl0ZXJhdGluZworQyAgICBvdXRlciBlYWNoIGxvb3AuICAoIk92ZXJsYXBwaW5nIHNvZnR3YXJlIHBpcGVsaW5pbmciKQorQyAgKiBQb3N0cG9uZSBwdXNoIG9mIGVieCB1bnRpbCB3ZSBrbm93IHZuID4gMS4gIFBlcmhhcHMgdXNlIGNhbGxlci1zYXZlcyByZWdzCitDICAgIGZvciBpbmxpbmVkIG11bF8xLCBhbGxvd2luZyB1cyB0byBwb3N0cG9uZSBhbGwgcHVzaGVzLgorQyAgKiBQZXJoYXBzIHdyaXRlIHNwZWNpYWwgY29kZSBmb3Igdm4gPD0gdW4gPCBNLCBmb3Igc29tZSBzbWFsbCBNLgorCitDIHZvaWQgbXBuX211bF9iYXNlY2FzZSAobXBfcHRyIHdwLAorQyAgICAgICAgICAgICAgICAgICAgICAgIG1wX3NyY3B0ciB4cCwgbXBfc2l6ZV90IHhuLAorQyAgICAgICAgICAgICAgICAgICAgICAgIG1wX3NyY3B0ciB5cCwgbXBfc2l6ZV90IHluKTsKK0MKKworZGVmaW5lKGBycCcsICBgJWVkaScpCitkZWZpbmUoYHVwJywgIGAlZXNpJykKK2RlZmluZShgdW4nLCAgYCVlY3gnKQorZGVmaW5lKGB2cCcsICBgJWVicCcpCitkZWZpbmUoYHZuJywgIGAzNiglZXNwKScpCisKKwlURVhUCisJQUxJR04oMTYpCitQUk9MT0dVRShtcG5fbXVsX2Jhc2VjYXNlKQorCXB1c2gJJWVkaQorCXB1c2gJJWVzaQorCXB1c2gJJWVieAorCXB1c2gJJWVicAorCW1vdgkyMCglZXNwKSwgcnAKKwltb3YJMjQoJWVzcCksIHVwCisJbW92CTI4KCVlc3ApLCB1bgorCW1vdgkzMiglZXNwKSwgdnAKKworCW1vdmQJKHVwKSwgJW1tMAorCW1vdmQJKHZwKSwgJW1tNworCXBtdWx1ZHEJJW1tNywgJW1tMAorCXB4b3IJJW1tNiwgJW1tNgorCisJbW92CXVuLCAlZWF4CisJYW5kCSQzLCAlZWF4CisJanoJTChvZjApCisJY21wCSQyLCAlZWF4CisJamMJTChvZjEpCisJanoJTChvZjIpCisKK0MgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCWptcAlMKG0zKQorCUFMSUdOKDE2KQorTChsbTMpOgltb3ZkCS00KHVwKSwgJW1tMAorCXBtdWx1ZHEJJW1tNywgJW1tMAorCXBzcmxxCSQzMiwgJW1tNgorCWxlYQkxNihycCksIHJwCisJcGFkZHEJJW1tMCwgJW1tNgorCW1vdmQJKHVwKSwgJW1tMAorCXBtdWx1ZHEJJW1tNywgJW1tMAorCW1vdmQJJW1tNiwgLTQocnApCisJcHNybHEJJDMyLCAlbW02CitMKG0zKToJcGFkZHEJJW1tMCwgJW1tNgorCW1vdmQJNCh1cCksICVtbTAKKwlwbXVsdWRxCSVtbTcsICVtbTAKKwltb3ZkCSVtbTYsIChycCkKKwlwc3JscQkkMzIsICVtbTYKKwlwYWRkcQklbW0wLCAlbW02CisJbW92ZAk4KHVwKSwgJW1tMAorCXBtdWx1ZHEJJW1tNywgJW1tMAorCW1vdmQJJW1tNiwgNChycCkKKwlwc3JscQkkMzIsICVtbTYKKwlwYWRkcQklbW0wLCAlbW02CisJc3ViCSQ0LCB1bgorCW1vdmQJJW1tNiwgOChycCkKKwlsZWEJMTYodXApLCB1cAorCWphCUwobG0zKQorCisJcHNybHEJJDMyLCAlbW02CisJbW92ZAklbW02LCAxMihycCkKKworCWRlY2wJdm4KKwlqeglMKGRvbmUpCisJbGVhCS04KHJwKSwgcnAKKworTChvbDMpOgltb3YJMjgoJWVzcCksIHVuCisJbmVnCXVuCisJbGVhCTQodnApLCB2cAorCW1vdmQJKHZwKSwgJW1tNwlDIHJlYWQgbmV4dCBWIGxpbWIKKwltb3YJMjQoJWVzcCksIHVwCisJbGVhCTE2KHJwLHVuLDQpLCBycAorCisJbW92ZAkodXApLCAlbW0wCisJcG11bHVkcQklbW03LCAlbW0wCisJc2FyCSQyLCB1bgorCW1vdmQJNCh1cCksICVtbTEKKwltb3ZkCSVtbTAsICVlYngKKwlwbXVsdWRxCSVtbTcsICVtbTEKKwlsZWEJLTgodXApLCB1cAorCXhvcgklZWR4LCAlZWR4CUMgemVybyBlZHggYW5kIENGCisJam1wCUwoYTMpCisKK0wobGEzKToJbW92ZAk0KHVwKSwgJW1tMQorCWFkYwkkMCwgJWVkeAorCWFkZAklZWF4LCAxMihycCkKKwltb3ZkCSVtbTAsICVlYngKKwlwbXVsdWRxCSVtbTcsICVtbTEKKwlsZWEJMTYocnApLCBycAorCXBzcmxxCSQzMiwgJW1tMAorCWFkYwklZWR4LCAlZWJ4CisJbW92ZAklbW0wLCAlZWR4CisJbW92ZAklbW0xLCAlZWF4CisJbW92ZAk4KHVwKSwgJW1tMAorCXBtdWx1ZHEJJW1tNywgJW1tMAorCWFkYwkkMCwgJWVkeAorCWFkZAklZWJ4LCAocnApCisJcHNybHEJJDMyLCAlbW0xCisJYWRjCSVlZHgsICVlYXgKKwltb3ZkCSVtbTEsICVlZHgKKwltb3ZkCSVtbTAsICVlYngKKwltb3ZkCTEyKHVwKSwgJW1tMQorCXBtdWx1ZHEJJW1tNywgJW1tMQorCWFkYwkkMCwgJWVkeAorCWFkZAklZWF4LCA0KHJwKQorTChhMyk6CXBzcmxxCSQzMiwgJW1tMAorCWFkYwklZWR4LCAlZWJ4CisJbW92ZAklbW0wLCAlZWR4CisJbW92ZAklbW0xLCAlZWF4CisJbGVhCTE2KHVwKSwgdXAKKwltb3ZkCSh1cCksICVtbTAKKwlhZGMJJDAsICVlZHgKKwlhZGQJJWVieCwgOChycCkKKwlwc3JscQkkMzIsICVtbTEKKwlhZGMJJWVkeCwgJWVheAorCW1vdmQJJW1tMSwgJWVkeAorCXBtdWx1ZHEJJW1tNywgJW1tMAorCWluYwl1bgorCWpueglMKGxhMykKKworCWFkYwl1biwgJWVkeAlDIHVuIGlzIHplcm8gaGVyZQorCWFkZAklZWF4LCAxMihycCkKKwltb3ZkCSVtbTAsICVlYngKKwlwc3JscQkkMzIsICVtbTAKKwlhZGMJJWVkeCwgJWVieAorCW1vdmQJJW1tMCwgJWVheAorCWFkYwl1biwgJWVheAorCWFkZAklZWJ4LCAxNihycCkKKwlhZGMJdW4sICVlYXgKKwltb3YJJWVheCwgMjAocnApCisKKwlkZWNsCXZuCisJam56CUwob2wzKQorCWptcAlMKGRvbmUpCisKK0MgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCUFMSUdOKDE2KQorTChsbTApOgltb3ZkCSh1cCksICVtbTAKKwlwbXVsdWRxCSVtbTcsICVtbTAKKwlwc3JscQkkMzIsICVtbTYKKwlsZWEJMTYocnApLCBycAorTChvZjApOglwYWRkcQklbW0wLCAlbW02CisJbW92ZAk0KHVwKSwgJW1tMAorCXBtdWx1ZHEJJW1tNywgJW1tMAorCW1vdmQJJW1tNiwgKHJwKQorCXBzcmxxCSQzMiwgJW1tNgorCXBhZGRxCSVtbTAsICVtbTYKKwltb3ZkCTgodXApLCAlbW0wCisJcG11bHVkcQklbW03LCAlbW0wCisJbW92ZAklbW02LCA0KHJwKQorCXBzcmxxCSQzMiwgJW1tNgorCXBhZGRxCSVtbTAsICVtbTYKKwltb3ZkCTEyKHVwKSwgJW1tMAorCXBtdWx1ZHEJJW1tNywgJW1tMAorCW1vdmQJJW1tNiwgOChycCkKKwlwc3JscQkkMzIsICVtbTYKKwlwYWRkcQklbW0wLCAlbW02CisJc3ViCSQ0LCB1bgorCW1vdmQJJW1tNiwgMTIocnApCisJbGVhCTE2KHVwKSwgdXAKKwlqYQlMKGxtMCkKKworCXBzcmxxCSQzMiwgJW1tNgorCW1vdmQJJW1tNiwgMTYocnApCisKKwlkZWNsCXZuCisJanoJTChkb25lKQorCWxlYQktNChycCksIHJwCisKK0wob2wwKToJbW92CTI4KCVlc3ApLCB1bgorCW5lZwl1bgorCWxlYQk0KHZwKSwgdnAKKwltb3ZkCSh2cCksICVtbTcJQyByZWFkIG5leHQgViBsaW1iCisJbW92CTI0KCVlc3ApLCB1cAorCWxlYQkyMChycCx1biw0KSwgcnAKKworCW1vdmQJKHVwKSwgJW1tMQorCXBtdWx1ZHEJJW1tNywgJW1tMQorCXNhcgkkMiwgdW4KKwltb3ZkCTQodXApLCAlbW0wCisJbGVhCS00KHVwKSwgdXAKKwltb3ZkCSVtbTEsICVlYXgKKwlwbXVsdWRxCSVtbTcsICVtbTAKKwl4b3IJJWVkeCwgJWVkeAlDIHplcm8gZWR4IGFuZCBDRgorCWptcAlMKGEwKQorCitMKGxhMCk6CW1vdmQJNCh1cCksICVtbTEKKwlhZGMJJDAsICVlZHgKKwlhZGQJJWVheCwgMTIocnApCisJbW92ZAklbW0wLCAlZWJ4CisJcG11bHVkcQklbW03LCAlbW0xCisJbGVhCTE2KHJwKSwgcnAKKwlwc3JscQkkMzIsICVtbTAKKwlhZGMJJWVkeCwgJWVieAorCW1vdmQJJW1tMCwgJWVkeAorCW1vdmQJJW1tMSwgJWVheAorCW1vdmQJOCh1cCksICVtbTAKKwlwbXVsdWRxCSVtbTcsICVtbTAKKwlhZGMJJDAsICVlZHgKKwlhZGQJJWVieCwgKHJwKQorTChhMCk6CXBzcmxxCSQzMiwgJW1tMQorCWFkYwklZWR4LCAlZWF4CisJbW92ZAklbW0xLCAlZWR4CisJbW92ZAklbW0wLCAlZWJ4CisJbW92ZAkxMih1cCksICVtbTEKKwlwbXVsdWRxCSVtbTcsICVtbTEKKwlhZGMJJDAsICVlZHgKKwlhZGQJJWVheCwgNChycCkKKwlwc3JscQkkMzIsICVtbTAKKwlhZGMJJWVkeCwgJWVieAorCW1vdmQJJW1tMCwgJWVkeAorCW1vdmQJJW1tMSwgJWVheAorCWxlYQkxNih1cCksIHVwCisJbW92ZAkodXApLCAlbW0wCisJYWRjCSQwLCAlZWR4CisJYWRkCSVlYngsIDgocnApCisJcHNybHEJJDMyLCAlbW0xCisJYWRjCSVlZHgsICVlYXgKKwltb3ZkCSVtbTEsICVlZHgKKwlwbXVsdWRxCSVtbTcsICVtbTAKKwlpbmMJdW4KKwlqbnoJTChsYTApCisKKwlhZGMJdW4sICVlZHgJQyB1biBpcyB6ZXJvIGhlcmUKKwlhZGQJJWVheCwgMTIocnApCisJbW92ZAklbW0wLCAlZWJ4CisJcHNybHEJJDMyLCAlbW0wCisJYWRjCSVlZHgsICVlYngKKwltb3ZkCSVtbTAsICVlYXgKKwlhZGMJdW4sICVlYXgKKwlhZGQJJWVieCwgMTYocnApCisJYWRjCXVuLCAlZWF4CisJbW92CSVlYXgsIDIwKHJwKQorCisJZGVjbAl2bgorCWpueglMKG9sMCkKKwlqbXAJTChkb25lKQorCitDID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlBTElHTigxNikKK0wobG0xKToJbW92ZAktMTIodXApLCAlbW0wCisJcG11bHVkcQklbW03LCAlbW0wCisJcHNybHEJJDMyLCAlbW02CisJbGVhCTE2KHJwKSwgcnAKKwlwYWRkcQklbW0wLCAlbW02CisJbW92ZAktOCh1cCksICVtbTAKKwlwbXVsdWRxCSVtbTcsICVtbTAKKwltb3ZkCSVtbTYsIC0xMihycCkKKwlwc3JscQkkMzIsICVtbTYKKwlwYWRkcQklbW0wLCAlbW02CisJbW92ZAktNCh1cCksICVtbTAKKwlwbXVsdWRxCSVtbTcsICVtbTAKKwltb3ZkCSVtbTYsIC04KHJwKQorCXBzcmxxCSQzMiwgJW1tNgorCXBhZGRxCSVtbTAsICVtbTYKKwltb3ZkCSh1cCksICVtbTAKKwlwbXVsdWRxCSVtbTcsICVtbTAKKwltb3ZkCSVtbTYsIC00KHJwKQorCXBzcmxxCSQzMiwgJW1tNgorTChvZjEpOglwYWRkcQklbW0wLCAlbW02CisJc3ViCSQ0LCB1bgorCW1vdmQJJW1tNiwgKHJwKQorCWxlYQkxNih1cCksIHVwCisJamEJTChsbTEpCisKKwlwc3JscQkkMzIsICVtbTYKKwltb3ZkCSVtbTYsIDQocnApCisKKwlkZWNsCXZuCisJanoJTChkb25lKQorCWxlYQktMTYocnApLCBycAorCitMKG9sMSk6CW1vdgkyOCglZXNwKSwgdW4KKwluZWcJdW4KKwlsZWEJNCh2cCksIHZwCisJbW92ZAkodnApLCAlbW03CUMgcmVhZCBuZXh0IFYgbGltYgorCW1vdgkyNCglZXNwKSwgdXAKKwlsZWEJMjQocnAsdW4sNCksIHJwCisKKwltb3ZkCSh1cCksICVtbTAKKwlwbXVsdWRxCSVtbTcsICVtbTAKKwlzYXIJJDIsIHVuCisJbW92ZAklbW0wLCAlZWJ4CisJbW92ZAk0KHVwKSwgJW1tMQorCXBtdWx1ZHEJJW1tNywgJW1tMQorCXhvcgklZWR4LCAlZWR4CUMgemVybyBlZHggYW5kIENGCisJaW5jCXVuCisJam1wCUwoYTEpCisKK0wobGExKToJbW92ZAk0KHVwKSwgJW1tMQorCWFkYwkkMCwgJWVkeAorCWFkZAklZWF4LCAxMihycCkKKwltb3ZkCSVtbTAsICVlYngKKwlwbXVsdWRxCSVtbTcsICVtbTEKKwlsZWEJMTYocnApLCBycAorTChhMSk6CXBzcmxxCSQzMiwgJW1tMAorCWFkYwklZWR4LCAlZWJ4CisJbW92ZAklbW0wLCAlZWR4CisJbW92ZAklbW0xLCAlZWF4CisJbW92ZAk4KHVwKSwgJW1tMAorCXBtdWx1ZHEJJW1tNywgJW1tMAorCWFkYwkkMCwgJWVkeAorCWFkZAklZWJ4LCAocnApCisJcHNybHEJJDMyLCAlbW0xCisJYWRjCSVlZHgsICVlYXgKKwltb3ZkCSVtbTEsICVlZHgKKwltb3ZkCSVtbTAsICVlYngKKwltb3ZkCTEyKHVwKSwgJW1tMQorCXBtdWx1ZHEJJW1tNywgJW1tMQorCWFkYwkkMCwgJWVkeAorCWFkZAklZWF4LCA0KHJwKQorCXBzcmxxCSQzMiwgJW1tMAorCWFkYwklZWR4LCAlZWJ4CisJbW92ZAklbW0wLCAlZWR4CisJbW92ZAklbW0xLCAlZWF4CisJbGVhCTE2KHVwKSwgdXAKKwltb3ZkCSh1cCksICVtbTAKKwlhZGMJJDAsICVlZHgKKwlhZGQJJWVieCwgOChycCkKKwlwc3JscQkkMzIsICVtbTEKKwlhZGMJJWVkeCwgJWVheAorCW1vdmQJJW1tMSwgJWVkeAorCXBtdWx1ZHEJJW1tNywgJW1tMAorCWluYwl1bgorCWpueglMKGxhMSkKKworCWFkYwl1biwgJWVkeAlDIHVuIGlzIHplcm8gaGVyZQorCWFkZAklZWF4LCAxMihycCkKKwltb3ZkCSVtbTAsICVlYngKKwlwc3JscQkkMzIsICVtbTAKKwlhZGMJJWVkeCwgJWVieAorCW1vdmQJJW1tMCwgJWVheAorCWFkYwl1biwgJWVheAorCWFkZAklZWJ4LCAxNihycCkKKwlhZGMJdW4sICVlYXgKKwltb3YJJWVheCwgMjAocnApCisKKwlkZWNsCXZuCisJam56CUwob2wxKQorCWptcAlMKGRvbmUpCisKK0MgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCUFMSUdOKDE2KQorTChsbTIpOgltb3ZkCS04KHVwKSwgJW1tMAorCXBtdWx1ZHEJJW1tNywgJW1tMAorCXBzcmxxCSQzMiwgJW1tNgorCWxlYQkxNihycCksIHJwCisJcGFkZHEJJW1tMCwgJW1tNgorCW1vdmQJLTQodXApLCAlbW0wCisJcG11bHVkcQklbW03LCAlbW0wCisJbW92ZAklbW02LCAtOChycCkKKwlwc3JscQkkMzIsICVtbTYKKwlwYWRkcQklbW0wLCAlbW02CisJbW92ZAkodXApLCAlbW0wCisJcG11bHVkcQklbW03LCAlbW0wCisJbW92ZAklbW02LCAtNChycCkKKwlwc3JscQkkMzIsICVtbTYKK0wob2YyKToJcGFkZHEJJW1tMCwgJW1tNgorCW1vdmQJNCh1cCksICVtbTAKKwlwbXVsdWRxCSVtbTcsICVtbTAKKwltb3ZkCSVtbTYsIChycCkKKwlwc3JscQkkMzIsICVtbTYKKwlwYWRkcQklbW0wLCAlbW02CisJc3ViCSQ0LCB1bgorCW1vdmQJJW1tNiwgNChycCkKKwlsZWEJMTYodXApLCB1cAorCWphCUwobG0yKQorCisJcHNybHEJJDMyLCAlbW02CisJbW92ZAklbW02LCA4KHJwKQorCisJZGVjbAl2bgorCWp6CUwoZG9uZSkKKwlsZWEJLTEyKHJwKSwgcnAKKworTChvbDIpOgltb3YJMjgoJWVzcCksIHVuCisJbmVnCXVuCisJbGVhCTQodnApLCB2cAorCW1vdmQJKHZwKSwgJW1tNwlDIHJlYWQgbmV4dCBWIGxpbWIKKwltb3YJMjQoJWVzcCksIHVwCisJbGVhCTEyKHJwLHVuLDQpLCBycAorCisJbW92ZAkodXApLCAlbW0xCisJcG11bHVkcQklbW03LCAlbW0xCisJc2FyCSQyLCB1bgorCW1vdmQJNCh1cCksICVtbTAKKwlsZWEJNCh1cCksIHVwCisJbW92ZAklbW0xLCAlZWF4CisJeG9yCSVlZHgsICVlZHgJQyB6ZXJvIGVkeCBhbmQgQ0YKKwlqbXAJTChsbzIpCisKK0wobGEyKToJbW92ZAk0KHVwKSwgJW1tMQorCWFkYwkkMCwgJWVkeAorCWFkZAklZWF4LCAxMihycCkKKwltb3ZkCSVtbTAsICVlYngKKwlwbXVsdWRxCSVtbTcsICVtbTEKKwlsZWEJMTYocnApLCBycAorCXBzcmxxCSQzMiwgJW1tMAorCWFkYwklZWR4LCAlZWJ4CisJbW92ZAklbW0wLCAlZWR4CisJbW92ZAklbW0xLCAlZWF4CisJbW92ZAk4KHVwKSwgJW1tMAorCXBtdWx1ZHEJJW1tNywgJW1tMAorCWFkYwkkMCwgJWVkeAorCWFkZAklZWJ4LCAocnApCisJcHNybHEJJDMyLCAlbW0xCisJYWRjCSVlZHgsICVlYXgKKwltb3ZkCSVtbTEsICVlZHgKKwltb3ZkCSVtbTAsICVlYngKKwltb3ZkCTEyKHVwKSwgJW1tMQorCXBtdWx1ZHEJJW1tNywgJW1tMQorCWFkYwkkMCwgJWVkeAorCWFkZAklZWF4LCA0KHJwKQorCXBzcmxxCSQzMiwgJW1tMAorCWFkYwklZWR4LCAlZWJ4CisJbW92ZAklbW0wLCAlZWR4CisJbW92ZAklbW0xLCAlZWF4CisJbGVhCTE2KHVwKSwgdXAKKwltb3ZkCSh1cCksICVtbTAKKwlhZGMJJDAsICVlZHgKKwlhZGQJJWVieCwgOChycCkKK0wobG8yKToJcHNybHEJJDMyLCAlbW0xCisJYWRjCSVlZHgsICVlYXgKKwltb3ZkCSVtbTEsICVlZHgKKwlwbXVsdWRxCSVtbTcsICVtbTAKKwlpbmMJdW4KKwlqbnoJTChsYTIpCisKKwlhZGMJdW4sICVlZHgJQyB1biBpcyB6ZXJvIGhlcmUKKwlhZGQJJWVheCwgMTIocnApCisJbW92ZAklbW0wLCAlZWJ4CisJcHNybHEJJDMyLCAlbW0wCisJYWRjCSVlZHgsICVlYngKKwltb3ZkCSVtbTAsICVlYXgKKwlhZGMJdW4sICVlYXgKKwlhZGQJJWVieCwgMTYocnApCisJYWRjCXVuLCAlZWF4CisJbW92CSVlYXgsIDIwKHJwKQorCisJZGVjbAl2bgorCWpueglMKG9sMikKK0MJam1wCUwoZG9uZSkKKworQyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitMKGRvbmUpOgorCWVtbXMKKwlwb3AJJWVicAorCXBvcAklZWJ4CisJcG9wCSVlc2kKKwlwb3AJJWVkaQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYXRvbS9zc2UyL3BvcGNvdW50LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2F0b20vc3NlMi9wb3Bjb3VudC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg0N2FlYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2F0b20vc3NlMi9wb3Bjb3VudC5hc20KQEAgLTAsMCArMSwzNSBAQAorZG5sICBJbnRlbCBBdG9tIG1wbl9wb3Bjb3VudCAtLSBwb3B1bGF0aW9uIGNvdW50LgorCitkbmwgIENvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fcG9wY291bnQpCitpbmNsdWRlX21wbihgeDg2L3BlbnRpdW00L3NzZTIvcG9wY291bnQuYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2F0b20vc3NlMi9zcXJfYmFzZWNhc2UuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYXRvbS9zc2UyL3Nxcl9iYXNlY2FzZS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYxOWVkOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2F0b20vc3NlMi9zcXJfYmFzZWNhc2UuYXNtCkBAIC0wLDAgKzEsNjM0IEBACitkbmwgIHg4NiBtcG5fc3FyX2Jhc2VjYXNlIC0tIHNxdWFyZSBhbiBtcG4gbnVtYmVyLCBvcHRpbWlzZWQgZm9yIGF0b20uCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqb3JuIEdyYW5sdW5kIGFuZCBNYXJjbyBCb2RyYXRvLgorCitkbmwgIENvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgVE9ETworQyAgKiBDaGVjayBpZiAnam1wIE4oJWVzcCknIGlzIHdlbGwtcHJlZGljdGVkIGVub3VnaCB0byBhbGxvdyB1cyB0byBjb21iaW5lIHRoZQorQyAgICA0IGxhcmdlIGxvb3BzIGludG8gb25lOyB3ZSBjb3VsZCB1c2UgaXQgZm9yIHRoZSBvdXRlciBsb29wIGJyYW5jaC4KK0MgICogT3B0aW1pc2UgY29kZSBvdXRzaWRlIG9mIGlubmVyIGxvb3BzLgorQyAgKiBXcml0ZSBjb21iaW5lZCBhZGRtdWxfMSBmZWVkLWluIGEgd2luZC1kb3duIGNvZGUsIGFuZCB1c2Ugd2hlbiBpdGVyYXRpbmcKK0MgICAgb3V0ZXIgZWFjaCBsb29wLiAgKCJPdmVybGFwcGluZyBzb2Z0d2FyZSBwaXBlbGluaW5nIikKK0MgICogUGVyaGFwcyB1c2UgY2FsbGVyLXNhdmVzIHJlZ3MgZm9yIGlubGluZWQgbXVsXzEsIGFsbG93aW5nIHVzIHRvIHBvc3Rwb25lCitDICAgIGFsbCBwdXNoZXMuCitDICAqIFBlcmhhcHMgd3JpdGUgc3BlY2lhbCBjb2RlIGZvciBuIDwgTSwgZm9yIHNvbWUgc21hbGwgTS4KK0MgICogUmVwbGFjZSBpbmxpbmVkIGFkZG11bF8xIHdpdGggc21hbGxlciBjb2RlIGZyb20gYW9yc211bF8xLmFzbSwgb3IgcGVyaGFwcworQyAgICB3aXRoIGV2ZW4gbGVzcyBwaXBlbGluZWQgY29kZS4KK0MgICogV2UgcnVuIHRoZSBvdXRlciBsb29wIHVudGlsIHdlIGhhdmUgYSAyLWxpbWIgYnkgMS1saW1iIGFkZG11bF8xIGxlZnQuCitDICAgIENvbnNpZGVyIGJyZWFraW5nIG91dCBlYXJsaWVyLCBzYXZpbmcgaGlnaCB0aGUgY29zdCBvZiBzaG9ydCBsb29wcy4KKworQyB2b2lkIG1wbl9zcXJfYmFzZWNhc2UgKG1wX3B0ciB3cCwKK0MgICAgICAgICAgICAgICAgICAgICAgICBtcF9zcmNwdHIgeHAsIG1wX3NpemVfdCB4bik7CisKK2RlZmluZShgcnAnLCAgYCVlZGknKQorZGVmaW5lKGB1cCcsICBgJWVzaScpCitkZWZpbmUoYG4nLCAgIGAlZWN4JykKKworZGVmaW5lKGB1bicsICBgJWVicCcpCisKKwlURVhUCisJQUxJR04oMTYpCitQUk9MT0dVRShtcG5fc3FyX2Jhc2VjYXNlKQorCXB1c2gJJWVkaQorCXB1c2gJJWVzaQorCW1vdgkxMiglZXNwKSwgcnAKKwltb3YJMTYoJWVzcCksIHVwCisJbW92CTIwKCVlc3ApLCBuCisKKwlsZWEJNChycCksIHJwCUMgd3JpdGUgdHJpYW5ndWxhciBwcm9kdWN0IHN0YXJ0aW5nIGF0IHJwWzFdCisJZGVjCW4KKwltb3ZkCSh1cCksICVtbTcKKworCWp6CUwob25lKQorCWxlYQk0KHVwKSwgdXAKKwlwdXNoCSVlYngKKwlwdXNoCSVlYnAKKwltb3YJbiwgJWVheAorCisJbW92ZAkodXApLCAlbW0wCisJbmVnCW4KKwlwbXVsdWRxCSVtbTcsICVtbTAKKwlweG9yCSVtbTYsICVtbTYKKwltb3YJbiwgdW4KKworCWFuZAkkMywgJWVheAorCWp6CUwob2YwKQorCWNtcAkkMiwgJWVheAorCWpjCUwob2YxKQorCWp6CUwob2YyKQorCitDID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlqbXAJTChtMykKKwlBTElHTigxNikKK0wobG0zKToJbW92ZAktNCh1cCksICVtbTAKKwlwbXVsdWRxCSVtbTcsICVtbTAKKwlwc3JscQkkMzIsICVtbTYKKwlsZWEJMTYocnApLCBycAorCXBhZGRxCSVtbTAsICVtbTYKKwltb3ZkCSh1cCksICVtbTAKKwlwbXVsdWRxCSVtbTcsICVtbTAKKwltb3ZkCSVtbTYsIC00KHJwKQorCXBzcmxxCSQzMiwgJW1tNgorTChtMyk6CXBhZGRxCSVtbTAsICVtbTYKKwltb3ZkCTQodXApLCAlbW0wCisJcG11bHVkcQklbW03LCAlbW0wCisJbW92ZAklbW02LCAocnApCisJcHNybHEJJDMyLCAlbW02CisJcGFkZHEJJW1tMCwgJW1tNgorCW1vdmQJOCh1cCksICVtbTAKKwlwbXVsdWRxCSVtbTcsICVtbTAKKwltb3ZkCSVtbTYsIDQocnApCisJcHNybHEJJDMyLCAlbW02CisJcGFkZHEJJW1tMCwgJW1tNgorCWFkZAkkNCwgdW4KKwltb3ZkCSVtbTYsIDgocnApCisJbGVhCTE2KHVwKSwgdXAKKwlqcwlMKGxtMykKKworCXBzcmxxCSQzMiwgJW1tNgorCW1vdmQJJW1tNiwgMTIocnApCisKKwlpbmMJbgorQwlqeglMKGRvbmUpCisgIGxlYQktMTIodXApLCB1cAorICBsZWEJNChycCksIHJwCisJam1wCUwob2wyKQorCitDID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlBTElHTigxNikKK0wobG0wKToJbW92ZAkodXApLCAlbW0wCisJcG11bHVkcQklbW03LCAlbW0wCisJcHNybHEJJDMyLCAlbW02CisJbGVhCTE2KHJwKSwgcnAKK0wob2YwKToJcGFkZHEJJW1tMCwgJW1tNgorCW1vdmQJNCh1cCksICVtbTAKKwlwbXVsdWRxCSVtbTcsICVtbTAKKwltb3ZkCSVtbTYsIChycCkKKwlwc3JscQkkMzIsICVtbTYKKwlwYWRkcQklbW0wLCAlbW02CisJbW92ZAk4KHVwKSwgJW1tMAorCXBtdWx1ZHEJJW1tNywgJW1tMAorCW1vdmQJJW1tNiwgNChycCkKKwlwc3JscQkkMzIsICVtbTYKKwlwYWRkcQklbW0wLCAlbW02CisJbW92ZAkxMih1cCksICVtbTAKKwlwbXVsdWRxCSVtbTcsICVtbTAKKwltb3ZkCSVtbTYsIDgocnApCisJcHNybHEJJDMyLCAlbW02CisJcGFkZHEJJW1tMCwgJW1tNgorCWFkZAkkNCwgdW4KKwltb3ZkCSVtbTYsIDEyKHJwKQorCWxlYQkxNih1cCksIHVwCisJanMJTChsbTApCisKKwlwc3JscQkkMzIsICVtbTYKKwltb3ZkCSVtbTYsIDE2KHJwKQorCisJaW5jCW4KK0MJanoJTChkb25lKQorICBsZWEJLTgodXApLCB1cAorICBsZWEJOChycCksIHJwCisJam1wCUwob2wzKQorCitDID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlBTElHTigxNikKK0wobG0xKToJbW92ZAktMTIodXApLCAlbW0wCisJcG11bHVkcQklbW03LCAlbW0wCisJcHNybHEJJDMyLCAlbW02CisJbGVhCTE2KHJwKSwgcnAKKwlwYWRkcQklbW0wLCAlbW02CisJbW92ZAktOCh1cCksICVtbTAKKwlwbXVsdWRxCSVtbTcsICVtbTAKKwltb3ZkCSVtbTYsIC0xMihycCkKKwlwc3JscQkkMzIsICVtbTYKKwlwYWRkcQklbW0wLCAlbW02CisJbW92ZAktNCh1cCksICVtbTAKKwlwbXVsdWRxCSVtbTcsICVtbTAKKwltb3ZkCSVtbTYsIC04KHJwKQorCXBzcmxxCSQzMiwgJW1tNgorCXBhZGRxCSVtbTAsICVtbTYKKwltb3ZkCSh1cCksICVtbTAKKwlwbXVsdWRxCSVtbTcsICVtbTAKKwltb3ZkCSVtbTYsIC00KHJwKQorCXBzcmxxCSQzMiwgJW1tNgorTChvZjEpOglwYWRkcQklbW0wLCAlbW02CisJYWRkCSQ0LCB1bgorCW1vdmQJJW1tNiwgKHJwKQorCWxlYQkxNih1cCksIHVwCisJanMJTChsbTEpCisKKwlwc3JscQkkMzIsICVtbTYKKwltb3ZkCSVtbTYsIDQocnApCisKKwlpbmMJbgorCWp6CUwoZG9uZSkJCUMgZ29lcyBhd2F5IHdoZW4gd2UgYWRkIHNwZWNpYWwgbj0yIGNvZGUKKyAgbGVhCS0yMCh1cCksIHVwCisgIGxlYQktNChycCksIHJwCisJam1wCUwob2wwKQorCitDID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlBTElHTigxNikKK0wobG0yKToJbW92ZAktOCh1cCksICVtbTAKKwlwbXVsdWRxCSVtbTcsICVtbTAKKwlwc3JscQkkMzIsICVtbTYKKwlsZWEJMTYocnApLCBycAorCXBhZGRxCSVtbTAsICVtbTYKKwltb3ZkCS00KHVwKSwgJW1tMAorCXBtdWx1ZHEJJW1tNywgJW1tMAorCW1vdmQJJW1tNiwgLTgocnApCisJcHNybHEJJDMyLCAlbW02CisJcGFkZHEJJW1tMCwgJW1tNgorCW1vdmQJKHVwKSwgJW1tMAorCXBtdWx1ZHEJJW1tNywgJW1tMAorCW1vdmQJJW1tNiwgLTQocnApCisJcHNybHEJJDMyLCAlbW02CitMKG9mMik6CXBhZGRxCSVtbTAsICVtbTYKKwltb3ZkCTQodXApLCAlbW0wCisJcG11bHVkcQklbW03LCAlbW0wCisJbW92ZAklbW02LCAocnApCisJcHNybHEJJDMyLCAlbW02CisJcGFkZHEJJW1tMCwgJW1tNgorCWFkZAkkNCwgdW4KKwltb3ZkCSVtbTYsIDQocnApCisJbGVhCTE2KHVwKSwgdXAKKwlqcwlMKGxtMikKKworCXBzcmxxCSQzMiwgJW1tNgorCW1vdmQJJW1tNiwgOChycCkKKworCWluYwluCitDCWp6CUwoZG9uZSkKKyAgbGVhCS0xNih1cCksIHVwCitDICBsZWEJKHJwKSwgcnAKK0MJam1wCUwob2wxKQorCitDID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTChvbDEpOglsZWEJNCh1cCxuLDQpLCB1cAorCW1vdmQJKHVwKSwgJW1tNwlDIHJlYWQgbmV4dCBVIGludmFyaWFudCBsaW1iCisJbGVhCTgocnAsbiw0KSwgcnAKKwltb3YJbiwgdW4KKworCW1vdmQJNCh1cCksICVtbTEKKwlwbXVsdWRxCSVtbTcsICVtbTEKKwlzYXIJJDIsIHVuCisJbW92ZAklbW0xLCAlZWJ4CisJaW5jCXVuCisJanoJTChyZTEpCisKKwltb3ZkCTgodXApLCAlbW0wCisJcG11bHVkcQklbW03LCAlbW0wCisJeG9yCSVlZHgsICVlZHgJQyB6ZXJvIGVkeCBhbmQgQ0YKKwlqbXAJTChhMSkKKworTChsYTEpOglhZGMJJDAsICVlZHgKKwlhZGQJJWVieCwgMTIocnApCisJbW92ZAklbW0wLCAlZWF4CisJcG11bHVkcQklbW03LCAlbW0xCisJbGVhCTE2KHJwKSwgcnAKKwlwc3JscQkkMzIsICVtbTAKKwlhZGMJJWVkeCwgJWVheAorCW1vdmQJJW1tMCwgJWVkeAorCW1vdmQJJW1tMSwgJWVieAorCW1vdmQJOCh1cCksICVtbTAKKwlwbXVsdWRxCSVtbTcsICVtbTAKKwlhZGMJJDAsICVlZHgKKwlhZGQJJWVheCwgKHJwKQorTChhMSk6CXBzcmxxCSQzMiwgJW1tMQorCWFkYwklZWR4LCAlZWJ4CisJbW92ZAklbW0xLCAlZWR4CisJbW92ZAklbW0wLCAlZWF4CisJbW92ZAkxMih1cCksICVtbTEKKwlwbXVsdWRxCSVtbTcsICVtbTEKKwlhZGMJJDAsICVlZHgKKwlhZGQJJWVieCwgNChycCkKKwlwc3JscQkkMzIsICVtbTAKKwlhZGMJJWVkeCwgJWVheAorCW1vdmQJJW1tMCwgJWVkeAorCW1vdmQJJW1tMSwgJWVieAorCWxlYQkxNih1cCksIHVwCisJbW92ZAkodXApLCAlbW0wCisJYWRjCSQwLCAlZWR4CisJYWRkCSVlYXgsIDgocnApCisJcHNybHEJJDMyLCAlbW0xCisJYWRjCSVlZHgsICVlYngKKwltb3ZkCSVtbTEsICVlZHgKKwlwbXVsdWRxCSVtbTcsICVtbTAKKwlpbmMJdW4KKwltb3ZkCTQodXApLCAlbW0xCisJam56CUwobGExKQorCisJYWRjCXVuLCAlZWR4CUMgdW4gaXMgemVybyBoZXJlCisJYWRkCSVlYngsIDEyKHJwKQorCW1vdmQJJW1tMCwgJWVheAorCXBtdWx1ZHEJJW1tNywgJW1tMQorCWxlYQkxNihycCksIHJwCisJcHNybHEJJDMyLCAlbW0wCisJYWRjCSVlZHgsICVlYXgKKwltb3ZkCSVtbTAsICVlZHgKKwltb3ZkCSVtbTEsICVlYngKKwlhZGMJdW4sICVlZHgKKwlhZGQJJWVheCwgKHJwKQorCXBzcmxxCSQzMiwgJW1tMQorCWFkYwklZWR4LCAlZWJ4CisJbW92ZAklbW0xLCAlZWF4CisJYWRjCXVuLCAlZWF4CisJYWRkCSVlYngsIDQocnApCisJYWRjCXVuLCAlZWF4CisJbW92CSVlYXgsIDgocnApCisKKwlpbmMJbgorCitDID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTChvbDApOglsZWEJKHVwLG4sNCksIHVwCisJbW92ZAk0KHVwKSwgJW1tNwlDIHJlYWQgbmV4dCBVIGludmFyaWFudCBsaW1iCisJbGVhCTQocnAsbiw0KSwgcnAKKwltb3YJbiwgdW4KKworCW1vdmQJOCh1cCksICVtbTAKKwlwbXVsdWRxCSVtbTcsICVtbTAKKwlzYXIJJDIsIHVuCisJbW92ZAkxMih1cCksICVtbTEKKwltb3ZkCSVtbTAsICVlYXgKKwlwbXVsdWRxCSVtbTcsICVtbTEKKwl4b3IJJWVkeCwgJWVkeAlDIHplcm8gZWR4IGFuZCBDRgorCWptcAlMKGEwKQorCitMKGxhMCk6CWFkYwkkMCwgJWVkeAorCWFkZAklZWJ4LCAxMihycCkKKwltb3ZkCSVtbTAsICVlYXgKKwlwbXVsdWRxCSVtbTcsICVtbTEKKwlsZWEJMTYocnApLCBycAorCXBzcmxxCSQzMiwgJW1tMAorCWFkYwklZWR4LCAlZWF4CisJbW92ZAklbW0wLCAlZWR4CisJbW92ZAklbW0xLCAlZWJ4CisJbW92ZAk4KHVwKSwgJW1tMAorCXBtdWx1ZHEJJW1tNywgJW1tMAorCWFkYwkkMCwgJWVkeAorCWFkZAklZWF4LCAocnApCisJcHNybHEJJDMyLCAlbW0xCisJYWRjCSVlZHgsICVlYngKKwltb3ZkCSVtbTEsICVlZHgKKwltb3ZkCSVtbTAsICVlYXgKKwltb3ZkCTEyKHVwKSwgJW1tMQorCXBtdWx1ZHEJJW1tNywgJW1tMQorCWFkYwkkMCwgJWVkeAorCWFkZAklZWJ4LCA0KHJwKQorTChhMCk6CXBzcmxxCSQzMiwgJW1tMAorCWFkYwklZWR4LCAlZWF4CisJbW92ZAklbW0wLCAlZWR4CisJbW92ZAklbW0xLCAlZWJ4CisJbGVhCTE2KHVwKSwgdXAKKwltb3ZkCSh1cCksICVtbTAKKwlhZGMJJDAsICVlZHgKKwlhZGQJJWVheCwgOChycCkKKwlwc3JscQkkMzIsICVtbTEKKwlhZGMJJWVkeCwgJWVieAorCW1vdmQJJW1tMSwgJWVkeAorCXBtdWx1ZHEJJW1tNywgJW1tMAorCWluYwl1bgorCW1vdmQJNCh1cCksICVtbTEKKwlqbnoJTChsYTApCisKKwlhZGMJdW4sICVlZHgJQyB1biBpcyB6ZXJvIGhlcmUKKwlhZGQJJWVieCwgMTIocnApCisJbW92ZAklbW0wLCAlZWF4CisJcG11bHVkcQklbW03LCAlbW0xCisJbGVhCTE2KHJwKSwgcnAKKwlwc3JscQkkMzIsICVtbTAKKwlhZGMJJWVkeCwgJWVheAorCW1vdmQJJW1tMCwgJWVkeAorCW1vdmQJJW1tMSwgJWVieAorCWFkYwl1biwgJWVkeAorCWFkZAklZWF4LCAocnApCisJcHNybHEJJDMyLCAlbW0xCisJYWRjCSVlZHgsICVlYngKKwltb3ZkCSVtbTEsICVlYXgKKwlhZGMJdW4sICVlYXgKKwlhZGQJJWVieCwgNChycCkKKwlhZGMJdW4sICVlYXgKKwltb3YJJWVheCwgOChycCkKKworCWluYwluCisKK0MgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitMKG9sMyk6CWxlYQkxMih1cCxuLDQpLCB1cAorCW1vdmQJLTgodXApLCAlbW03CUMgcmVhZCBuZXh0IFUgaW52YXJpYW50IGxpbWIKKwlsZWEJKHJwLG4sNCksIHJwCUMgcHV0IHJwIGJhY2sKKwltb3YJbiwgdW4KKworCW1vdmQJLTQodXApLCAlbW0xCisJcG11bHVkcQklbW03LCAlbW0xCisJc2FyCSQyLCB1bgorCW1vdmQJJW1tMSwgJWVieAorCW1vdmQJKHVwKSwgJW1tMAorCXhvcgklZWR4LCAlZWR4CUMgemVybyBlZHggYW5kIENGCisJam1wCUwoYTMpCisKK0wobGEzKToJYWRjCSQwLCAlZWR4CisJYWRkCSVlYngsIDEyKHJwKQorCW1vdmQJJW1tMCwgJWVheAorCXBtdWx1ZHEJJW1tNywgJW1tMQorCWxlYQkxNihycCksIHJwCisJcHNybHEJJDMyLCAlbW0wCisJYWRjCSVlZHgsICVlYXgKKwltb3ZkCSVtbTAsICVlZHgKKwltb3ZkCSVtbTEsICVlYngKKwltb3ZkCTgodXApLCAlbW0wCisJcG11bHVkcQklbW03LCAlbW0wCisJYWRjCSQwLCAlZWR4CisJYWRkCSVlYXgsIChycCkKKwlwc3JscQkkMzIsICVtbTEKKwlhZGMJJWVkeCwgJWVieAorCW1vdmQJJW1tMSwgJWVkeAorCW1vdmQJJW1tMCwgJWVheAorCW1vdmQJMTIodXApLCAlbW0xCisJcG11bHVkcQklbW03LCAlbW0xCisJYWRjCSQwLCAlZWR4CisJYWRkCSVlYngsIDQocnApCisJcHNybHEJJDMyLCAlbW0wCisJYWRjCSVlZHgsICVlYXgKKwltb3ZkCSVtbTAsICVlZHgKKwltb3ZkCSVtbTEsICVlYngKKwlsZWEJMTYodXApLCB1cAorCW1vdmQJKHVwKSwgJW1tMAorCWFkYwkkMCwgJWVkeAorCWFkZAklZWF4LCA4KHJwKQorTChhMyk6CXBzcmxxCSQzMiwgJW1tMQorCWFkYwklZWR4LCAlZWJ4CisJbW92ZAklbW0xLCAlZWR4CisJcG11bHVkcQklbW03LCAlbW0wCisJaW5jCXVuCisJbW92ZAk0KHVwKSwgJW1tMQorCWpueglMKGxhMykKKworCWFkYwl1biwgJWVkeAlDIHVuIGlzIHplcm8gaGVyZQorCWFkZAklZWJ4LCAxMihycCkKKwltb3ZkCSVtbTAsICVlYXgKKwlwbXVsdWRxCSVtbTcsICVtbTEKKwlsZWEJMTYocnApLCBycAorCXBzcmxxCSQzMiwgJW1tMAorCWFkYwklZWR4LCAlZWF4CisJbW92ZAklbW0wLCAlZWR4CisJbW92ZAklbW0xLCAlZWJ4CisJYWRjCXVuLCAlZWR4CisJYWRkCSVlYXgsIChycCkKKwlwc3JscQkkMzIsICVtbTEKKwlhZGMJJWVkeCwgJWVieAorCW1vdmQJJW1tMSwgJWVheAorCWFkYwl1biwgJWVheAorCWFkZAklZWJ4LCA0KHJwKQorCWFkYwl1biwgJWVheAorCW1vdgklZWF4LCA4KHJwKQorCisJaW5jCW4KKworQyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0wob2wyKToJbGVhCTgodXAsbiw0KSwgdXAKKwltb3ZkCS00KHVwKSwgJW1tNwlDIHJlYWQgbmV4dCBVIGludmFyaWFudCBsaW1iCisJbGVhCTEyKHJwLG4sNCksIHJwCisJbW92CW4sIHVuCisKKwltb3ZkCSh1cCksICVtbTAKKwlwbXVsdWRxCSVtbTcsICVtbTAKKwl4b3IJJWVkeCwgJWVkeAorCXNhcgkkMiwgdW4KKwltb3ZkCTQodXApLCAlbW0xCisJdGVzdAl1biwgdW4JCUMgY2xlYXIgY2FycnkKKwltb3ZkCSVtbTAsICVlYXgKKwlwbXVsdWRxCSVtbTcsICVtbTEKKwlpbmMJdW4KKwlqbnoJTChhMikKKwlqbXAJTChyZTIpCisKK0wobGEyKToJYWRjCSQwLCAlZWR4CisJYWRkCSVlYngsIDEyKHJwKQorCW1vdmQJJW1tMCwgJWVheAorCXBtdWx1ZHEJJW1tNywgJW1tMQorCWxlYQkxNihycCksIHJwCitMKGEyKToJcHNybHEJJDMyLCAlbW0wCisJYWRjCSVlZHgsICVlYXgKKwltb3ZkCSVtbTAsICVlZHgKKwltb3ZkCSVtbTEsICVlYngKKwltb3ZkCTgodXApLCAlbW0wCisJcG11bHVkcQklbW03LCAlbW0wCisJYWRjCSQwLCAlZWR4CisJYWRkCSVlYXgsIChycCkKKwlwc3JscQkkMzIsICVtbTEKKwlhZGMJJWVkeCwgJWVieAorCW1vdmQJJW1tMSwgJWVkeAorCW1vdmQJJW1tMCwgJWVheAorCW1vdmQJMTIodXApLCAlbW0xCisJcG11bHVkcQklbW03LCAlbW0xCisJYWRjCSQwLCAlZWR4CisJYWRkCSVlYngsIDQocnApCisJcHNybHEJJDMyLCAlbW0wCisJYWRjCSVlZHgsICVlYXgKKwltb3ZkCSVtbTAsICVlZHgKKwltb3ZkCSVtbTEsICVlYngKKwlsZWEJMTYodXApLCB1cAorCW1vdmQJKHVwKSwgJW1tMAorCWFkYwkkMCwgJWVkeAorCWFkZAklZWF4LCA4KHJwKQorCXBzcmxxCSQzMiwgJW1tMQorCWFkYwklZWR4LCAlZWJ4CisJbW92ZAklbW0xLCAlZWR4CisJcG11bHVkcQklbW03LCAlbW0wCisJaW5jCXVuCisJbW92ZAk0KHVwKSwgJW1tMQorCWpueglMKGxhMikKKworCWFkYwl1biwgJWVkeAlDIHVuIGlzIHplcm8gaGVyZQorCWFkZAklZWJ4LCAxMihycCkKKwltb3ZkCSVtbTAsICVlYXgKKwlwbXVsdWRxCSVtbTcsICVtbTEKKwlsZWEJMTYocnApLCBycAorCXBzcmxxCSQzMiwgJW1tMAorCWFkYwklZWR4LCAlZWF4CisJbW92ZAklbW0wLCAlZWR4CisJbW92ZAklbW0xLCAlZWJ4CisJYWRjCXVuLCAlZWR4CisJYWRkCSVlYXgsIChycCkKKwlwc3JscQkkMzIsICVtbTEKKwlhZGMJJWVkeCwgJWVieAorCW1vdmQJJW1tMSwgJWVheAorCWFkYwl1biwgJWVheAorCWFkZAklZWJ4LCA0KHJwKQorCWFkYwl1biwgJWVheAorCW1vdgklZWF4LCA4KHJwKQorCisJaW5jCW4KKwlqbXAJTChvbDEpCisKK0MgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTChyZTIpOglwc3JscQkkMzIsICVtbTAKKwltb3ZkCSh1cCksICVtbTcJQyByZWFkIG5leHQgVSBpbnZhcmlhbnQgbGltYgorCWFkYwklZWR4LCAlZWF4CisJbW92ZAklbW0wLCAlZWR4CisJbW92ZAklbW0xLCAlZWJ4CisJYWRjCXVuLCAlZWR4CisJYWRkCSVlYXgsIChycCkKKwlsZWEJNChycCksIHJwCisJcHNybHEJJDMyLCAlbW0xCisJYWRjCSVlZHgsICVlYngKKwltb3ZkCSVtbTEsICVlYXgKKwltb3ZkCTQodXApLCAlbW0xCisJYWRjCXVuLCAlZWF4CisJYWRkCSVlYngsIChycCkKKwlwbXVsdWRxCSVtbTcsICVtbTEKKwlhZGMJdW4sICVlYXgKKwltb3YJJWVheCwgNChycCkKKwltb3ZkCSVtbTEsICVlYngKKworTChyZTEpOglwc3JscQkkMzIsICVtbTEKKwlhZGQJJWVieCwgNChycCkKKwltb3ZkCSVtbTEsICVlYXgKKwlhZGMJdW4sICVlYXgKKwl4b3IJbiwgbgkJQyBtYWtlIG4gemVyb25lc3MgYXNzdW1wdGlvbiBiZWxvdyB0cnVlCisJbW92CSVlYXgsIDgocnApCisKK0woZG9uZSk6CQkJQyBuIGlzIHplcm8gaGVyZQorCW1vdgkyNCglZXNwKSwgdXAKKwltb3YJMjgoJWVzcCksICVlYXgKKworCW1vdmQJKHVwKSwgJW1tMAorCWluYwklZWF4CisJcG11bHVkcQklbW0wLCAlbW0wCisJbGVhCTQodXApLCB1cAorCW1vdgkyMCglZXNwKSwgcnAKKwlzaHIJJWVheAorCW1vdmQJJW1tMCwgKHJwKQorCXBzcmxxCSQzMiwgJW1tMAorCWxlYQktMTIocnApLCBycAorCW1vdgklZWF4LCAyOCglZXNwKQorCWpuYwlMKG9kZCkKKworCW1vdmQJJW1tMCwgJWVicAorCW1vdmQJKHVwKSwgJW1tMAorCWxlYQk4KHJwKSwgcnAKKwlwbXVsdWRxCSVtbTAsICVtbTAKKwlsZWEJLTQodXApLCB1cAorCWFkZAk4KHJwKSwgJWVicAorCW1vdmQJJW1tMCwgJWVkeAorCWFkYwkxMihycCksICVlZHgKKwlyY3IJbgorCWptcAlMKGVudCkKKworQwlBTElHTigxNikJCUMgYWxpZ25tZW50IHNlZW1zIGlycmVsZXZhbnQKK0wodG9wKToJbW92ZAkodXApLCAlbW0xCisJYWRjCW4sIG4KKwltb3ZkCSVtbTAsICVlYXgKKwlwbXVsdWRxCSVtbTEsICVtbTEKKwltb3ZkCTQodXApLCAlbW0wCisJYWRjCShycCksICVlYXgKKwltb3ZkCSVtbTEsICVlYngKKwlwbXVsdWRxCSVtbTAsICVtbTAKKwlwc3JscQkkMzIsICVtbTEKKwlhZGMJNChycCksICVlYngKKwltb3ZkCSVtbTEsICVlYnAKKwltb3ZkCSVtbTAsICVlZHgKKwlhZGMJOChycCksICVlYnAKKwlhZGMJMTIocnApLCAlZWR4CisJcmNyCW4JCUMgRklYTUU6IGlzbid0IHRoaXMgYXdmdWxseSBzbG93IG9uIGF0b20/Pz8KKwlhZGMJJWVheCwgKHJwKQorCWFkYwklZWJ4LCA0KHJwKQorTChlbnQpOglsZWEJOCh1cCksIHVwCisJYWRjCSVlYnAsIDgocnApCisJcHNybHEJJDMyLCAlbW0wCisJYWRjCSVlZHgsIDEyKHJwKQorTChvZGQpOglkZWNsCTI4KCVlc3ApCisJbGVhCTE2KHJwKSwgcnAKKwlqbnoJTCh0b3ApCisKK0woZW5kKToJYWRjCW4sIG4KKwltb3ZkCSVtbTAsICVlYXgKKwlhZGMJbiwgJWVheAorCW1vdgklZWF4LCAocnApCisKK0wocnRuKToJZW1tcworCXBvcAklZWJwCisJcG9wCSVlYngKKwlwb3AJJWVzaQorCXBvcAklZWRpCisJcmV0CisKK0wob25lKToJcG11bHVkcQklbW03LCAlbW03CisJbW92cQklbW03LCAtNChycCkKKwllbW1zCisJcG9wCSVlc2kKKwlwb3AJJWVkaQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYXRvbS9zdWJsc2gxX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYXRvbS9zdWJsc2gxX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZTdlNWIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9hdG9tL3N1YmxzaDFfbi5hc20KQEAgLTAsMCArMSwzNCBAQAorZG5sICBJbnRlbCBBdG9tIG1wbl9zdWJsc2gxX24gLS0gcnBbXSA9IHVwW10gLSAodnBbXSA8PCAxKQorCitkbmwgIENvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX3N1YmxzaDFfbl9pcDEpCitpbmNsdWRlX21wbihgeDg2L2s3L3N1YmxzaDFfbi5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYXRvbS9zdWJsc2gyX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYXRvbS9zdWJsc2gyX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NDA1Y2YKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9hdG9tL3N1YmxzaDJfbi5hc20KQEAgLTAsMCArMSw1NyBAQAorZG5sICBJbnRlbCBBdG9tIG1wbl9hZGRsc2gyX24vbXBuX3N1YmxzaDJfbiAtLSBycFtdID0gdXBbXSArLSAodnBbXSA8PCAyKS4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgTWFyY28gQm9kcmF0by4KKworZG5sICBDb3B5cmlnaHQgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitkZWZpbmUoTFNILCAyKQorZGVmaW5lKFJTSCwgMzApCisKK2lmZGVmKGBPUEVSQVRJT05fYWRkbHNoMl9uJywgYAorCWRlZmluZShNNF9pbnN0LAkJYWRjbCkKKwlkZWZpbmUoTTRfb3BwLAkJc3VibCkKKwlkZWZpbmUoTTRfZnVuY3Rpb24sCW1wbl9hZGRsc2gyX24pCisJZGVmaW5lKE00X2Z1bmN0aW9uX2MsCW1wbl9hZGRsc2gyX25jKQorCWRlZmluZShNNF9pcF9mdW5jdGlvbl9jLCBtcG5fYWRkbHNoMl9uY19pcDEpCisJZGVmaW5lKE00X2lwX2Z1bmN0aW9uLAltcG5fYWRkbHNoMl9uX2lwMSkKKycsYGlmZGVmKGBPUEVSQVRJT05fc3VibHNoMl9uJywgYAorCWRlZmluZShNNF9pbnN0LAkJc2JibCkKKwlkZWZpbmUoTTRfb3BwLAkJYWRkbCkKKwlkZWZpbmUoTTRfZnVuY3Rpb24sCW1wbl9zdWJsc2gyX24pCisJZGVmaW5lKE00X2Z1bmN0aW9uX2MsCW1wbl9zdWJsc2gyX25jKQorCWRlZmluZShNNF9pcF9mdW5jdGlvbl9jLCBtcG5fc3VibHNoMl9uY19pcDEpCisJZGVmaW5lKE00X2lwX2Z1bmN0aW9uLAltcG5fc3VibHNoMl9uX2lwMSkKKycsYG00X2Vycm9yKGBOZWVkIE9QRVJBVElPTl9hZGRsc2gyX24gb3IgT1BFUkFUSU9OX3N1YmxzaDJfbgorJyknKScpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX3N1YmxzaDJfbiBtcG5fc3VibHNoMl9uYyBtcG5fc3VibHNoMl9uX2lwMSBtcG5fc3VibHNoMl9uY19pcDEpCisKK2luY2x1ZGVfbXBuKGB4ODYvYXRvbS9hb3JzbHNoQ19uLmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9iZDEvZ21wLW1wYXJhbS5oIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYmQxL2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTRjZmVhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYmQxL2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDIxMSBAQAorLyogQU1EIGJkMSBnbXAtbXBhcmFtLmggLS0gQ29tcGlsZXIvbWFjaGluZSBwYXJhbWV0ZXIgaGVhZGVyIGZpbGUuCisKK0NvcHlyaWdodCAyMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgMzIKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgNAorCisvKiAzNjAwLTM4MDAgTUh6IEJ1bGxkb3plciBaYW1iZXppICovCisvKiBGRlQgdHVuaW5nIGxpbWl0ID0gNjcsMDAwLDAwMCAqLworLyogR2VuZXJhdGVkIGJ5IHR1bmV1cC5jLCAyMDE5LTEwLTI3LCBnY2MgOC4zICovCisKKyNkZWZpbmUgTU9EXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PRF8xTl9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA3CisjZGVmaW5lIE1PRF8xVV9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA0CisjZGVmaW5lIE1PRF8xXzFfVE9fTU9EXzFfMl9USFJFU0hPTEQgICAgICAgIDE1CisjZGVmaW5lIE1PRF8xXzJfVE9fTU9EXzFfNF9USFJFU0hPTEQgICAgICAgICAwICAvKiBuZXZlciBtcG5fbW9kXzFzXzJwICovCisjZGVmaW5lIFBSRUlOVl9NT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgIDEzCisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAgICAxICAvKiBuYXRpdmUgKi8KKyNkZWZpbmUgRElWX1FSXzFOX1BJMV9NRVRIT0QgICAgICAgICAgICAgICAgIDEgIC8qIDU5LjU5JSBmYXN0ZXIgdGhhbiAyICovCisjZGVmaW5lIERJVl9RUl8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICA1CisjZGVmaW5lIERJVl9RUl8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVl9RUl8yX1BJMl9USFJFU0hPTEQgICAgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgICAgICAgMjcKKworI2RlZmluZSBESVZfMV9WU19NVUxfMV9QRVJDRU5UICAgICAgICAgICAgIDI0NQorCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDg5CisjZGVmaW5lIE1VTF9UT09NNDRfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTU0CisjZGVmaW5lIE1VTF9UT09NNkhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjMwCisjZGVmaW5lIE1VTF9UT09NOEhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMzUxCisKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNDNfVEhSRVNIT0xEICAgICAgODkKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxMTAKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxMDEKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNjNfVEhSRVNIT0xEICAgICAxMTEKKyNkZWZpbmUgTVVMX1RPT000M19UT19UT09NNTRfVEhSRVNIT0xEICAgICAxMzAKKworI2RlZmluZSBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDQ2CisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgICAgIDg3CisjZGVmaW5lIFNRUl9UT09NNF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjE2CisjZGVmaW5lIFNRUl9UT09NNl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjk0CisjZGVmaW5lIFNRUl9UT09NOF9USFJFU0hPTEQgICAgICAgICAgICAgICAgNDQyCisKKyNkZWZpbmUgTVVMTUlEX1RPT000Ml9USFJFU0hPTEQgICAgICAgICAgICAgNTAKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAyMgorI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAyNgorCisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgNjM2ICAvKiBrID0gNSAqLworI2RlZmluZSBNVUxfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgNjM2LCA1fSwgeyAgICAgMjgsIDZ9LCB7ICAgICAxNSwgNX0sIHsgICAgIDMxLCA2fSwgXAorICAgIHsgICAgIDI4LCA3fSwgeyAgICAgMTUsIDZ9LCB7ICAgICAzMywgN30sIHsgICAgIDE3LCA2fSwgXAorICAgIHsgICAgIDM1LCA3fSwgeyAgICAgMTksIDZ9LCB7ICAgICAzOSwgN30sIHsgICAgIDIzLCA2fSwgXAorICAgIHsgICAgIDQ3LCA3fSwgeyAgICAgMjksIDh9LCB7ICAgICAxNSwgN30sIHsgICAgIDM1LCA4fSwgXAorICAgIHsgICAgIDE5LCA3fSwgeyAgICAgNDEsIDh9LCB7ICAgICAyMywgN30sIHsgICAgIDQ3LCA4fSwgXAorICAgIHsgICAgIDI3LCA3fSwgeyAgICAgNTUsIDh9LCB7ICAgICAzMSwgN30sIHsgICAgIDYzLCA4fSwgXAorICAgIHsgICAgIDQzLCA5fSwgeyAgICAgMjMsIDh9LCB7ICAgICA1NSwgOX0sIHsgICAgIDMxLCA4fSwgXAorICAgIHsgICAgIDY3LCA5fSwgeyAgICAgMzksIDh9LCB7ICAgICA3OSwgOX0sIHsgICAgIDQ3LCA4fSwgXAorICAgIHsgICAgIDk1LCA5fSwgeyAgICAgNTUsMTB9LCB7ICAgICAzMSwgOX0sIHsgICAgIDc5LDEwfSwgXAorICAgIHsgICAgIDQ3LCA5fSwgeyAgICAgOTUsMTF9LCB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA5fSwgXAorICAgIHsgICAgMTM1LDEwfSwgeyAgICAgNzksIDl9LCB7ICAgIDE1OSwxMH0sIHsgICAgIDk1LCA5fSwgXAorICAgIHsgICAgMTkxLDExfSwgeyAgICAgNjMsIDd9LCB7ICAgMTAyMywgOH0sIHsgICAgNTQzLDExfSwgXAorICAgIHsgICAgIDk1LDEwfSwgeyAgICAxOTEsMTJ9LCB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgXAorICAgIHsgICAgMjU1LCA5fSwgeyAgICA1MTEsMTB9LCB7ICAgIDI3MSwxMX0sIHsgICAgMTU5LDEwfSwgXAorICAgIHsgICAgMzE5LCA5fSwgeyAgICA2MzksMTB9LCB7ICAgIDMzNSwxMX0sIHsgICAgMTkxLDEwfSwgXAorICAgIHsgICAgMzk5LDExfSwgeyAgICAyMjMsMTJ9LCB7ICAgIDEyNywxMX0sIHsgICAgMjU1LDEwfSwgXAorICAgIHsgICAgNTQzLDExfSwgeyAgICAyODcsMTB9LCB7ICAgIDYwNywxMX0sIHsgICAgMzE5LDEwfSwgXAorICAgIHsgICAgNjM5LDEyfSwgeyAgICAxOTEsMTF9LCB7ICAgIDM4MywxMH0sIHsgICAgNzk5LDExfSwgXAorICAgIHsgICAgNDE1LDEzfSwgeyAgICAxMjcsMTJ9LCB7ICAgIDI1NSwxMX0sIHsgICAgNTQzLDEwfSwgXAorICAgIHsgICAxMDg3LDExfSwgeyAgICA2MDcsMTJ9LCB7ICAgIDMxOSwxMX0sIHsgICAgNjcxLDEwfSwgXAorICAgIHsgICAxMzQzLDExfSwgeyAgICA3MzUsMTJ9LCB7ICAgIDM4MywxMX0sIHsgICAgNzk5LDEwfSwgXAorICAgIHsgICAxNTk5LDExfSwgeyAgICA4NjMsMTJ9LCB7ICAgIDQ0NywxMX0sIHsgICAgODk1LDEzfSwgXAorICAgIHsgICAgMjU1LDEyfSwgeyAgICA1MTEsMTF9LCB7ICAgMTA4NywxMn0sIHsgICAgNTc1LDExfSwgXAorICAgIHsgICAxMjE1LDEyfSwgeyAgICA2MzksMTF9LCB7ICAgMTM0MywxMn0sIHsgICAgNzAzLDExfSwgXAorICAgIHsgICAxNDcxLDEzfSwgeyAgICAzODMsMTJ9LCB7ICAgIDc2NywxMX0sIHsgICAxNTk5LDEyfSwgXAorICAgIHsgICAgODMxLDExfSwgeyAgIDE3MjcsMTJ9LCB7ICAgIDg5NSwxNH0sIHsgICAgMjU1LDEzfSwgXAorICAgIHsgICAgNTExLDEyfSwgeyAgIDEwODcsMTF9LCB7ICAgMjIzOSwxMH0sIHsgICA0NDc5LDEyfSwgXAorICAgIHsgICAxMjE1LDEzfSwgeyAgICA2MzksMTJ9LCB7ICAgMTQ3MSwxMX0sIHsgICAyOTQzLDEzfSwgXAorICAgIHsgICAgNzY3LDEyfSwgeyAgIDE3MjcsMTF9LCB7ICAgMzQ1NSwxM30sIHsgICAgODk1LDEyfSwgXAorICAgIHsgICAxOTE5LDE0fSwgeyAgICA1MTEsMTN9LCB7ICAgMTAyMywxMn0sIHsgICAyMjM5LDExfSwgXAorICAgIHsgICA0NDc5LDEzfSwgeyAgIDExNTEsMTJ9LCB7ICAgMjQ5NSwxMX0sIHsgICA0OTkxLDEzfSwgXAorICAgIHsgICAxMjc5LDEyfSwgeyAgIDI2MjMsMTN9LCB7ICAgMTQwNywxMn0sIHsgICAyOTQzLDE0fSwgXAorICAgIHsgICAgNzY3LDEzfSwgeyAgIDE2NjMsMTJ9LCB7ICAgMzQ1NSwxM30sIHsgICAxOTE5LDE1fSwgXAorICAgIHsgICAgNTExLDE0fSwgeyAgIDEwMjMsMTN9LCB7ICAgMjE3NSwxMn0sIHsgICA0NDc5LDEzfSwgXAorICAgIHsgICAyNDMxLDEyfSwgeyAgIDQ5OTEsMTR9LCB7ICAgMTI3OSwxM30sIHsgICAyOTQzLDEyfSwgXAorICAgIHsgICA1ODg3LDE0fSwgeyAgIDE1MzUsMTN9LCB7ICAgMzQ1NSwxNH0sIHsgICAxNzkxLDEzfSwgXAorICAgIHsgICAzOTY3LDEyfSwgeyAgIDc5MzUsMTV9LCB7ICAgMTAyMywxNH0sIHsgICAyMDQ3LDEzfSwgXAorICAgIHsgICA0NDc5LDE0fSwgeyAgIDIzMDMsMTN9LCB7ICAgNDk5MSwxMn0sIHsgICA5OTgzLDE0fSwgXAorICAgIHsgICAyODE1LDEzfSwgeyAgIDU4ODcsMTV9LCB7ICAgMTUzNSwxNH0sIHsgICAzMzI3LDEzfSwgXAorICAgIHsgICA2OTExLDE0fSwgeyAgIDM4MzksMTN9LCB7ICAgNzkzNSwxNn0gfQorI2RlZmluZSBNVUxfRkZUX1RBQkxFM19TSVpFIDE1OQorI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNjc4NAorCisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgNTY1ICAvKiBrID0gNSAqLworI2RlZmluZSBTUVJfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgNTY1LCA1fSwgeyAgICAgMjksIDZ9LCB7ICAgICAxNSwgNX0sIHsgICAgIDMyLCA2fSwgXAorICAgIHsgICAgIDE3LCA1fSwgeyAgICAgMzUsIDZ9LCB7ICAgICAyOSwgN30sIHsgICAgIDE1LCA2fSwgXAorICAgIHsgICAgIDMzLCA3fSwgeyAgICAgMTcsIDZ9LCB7ICAgICAzNSwgN30sIHsgICAgIDE5LCA2fSwgXAorICAgIHsgICAgIDM5LCA3fSwgeyAgICAgMjMsIDZ9LCB7ICAgICA0NywgN30sIHsgICAgIDM1LCA4fSwgXAorICAgIHsgICAgIDE5LCA3fSwgeyAgICAgNDEsIDh9LCB7ICAgICAyMywgN30sIHsgICAgIDQ5LCA4fSwgXAorICAgIHsgICAgIDI3LCA3fSwgeyAgICAgNTUsIDh9LCB7ICAgICA0MywgOX0sIHsgICAgIDIzLCA4fSwgXAorICAgIHsgICAgIDU1LCA5fSwgeyAgICAgMzEsIDh9LCB7ICAgICA2NywgOX0sIHsgICAgIDM5LCA4fSwgXAorICAgIHsgICAgIDc5LCA5fSwgeyAgICAgNDcsIDh9LCB7ICAgICA5NSwgOX0sIHsgICAgIDU1LDEwfSwgXAorICAgIHsgICAgIDMxLCA5fSwgeyAgICAgNzksMTB9LCB7ICAgICA0NywgOX0sIHsgICAgIDk1LDExfSwgXAorICAgIHsgICAgIDMxLDEwfSwgeyAgICAgNjMsIDl9LCB7ICAgIDEzNSwxMH0sIHsgICAgIDc5LCA5fSwgXAorICAgIHsgICAgMTU5LDEwfSwgeyAgICAgOTUsMTF9LCB7ICAgICA2MywxMH0sIHsgICAgMTU5LDExfSwgXAorICAgIHsgICAgMTI3LDEwfSwgeyAgICAyNTUsIDl9LCB7ICAgIDUxMSwxMH0sIHsgICAgMjcxLCA5fSwgXAorICAgIHsgICAgNTQzLDExfSwgeyAgICAxNTksMTB9LCB7ICAgIDMxOSwgOX0sIHsgICAgNjM5LDEwfSwgXAorICAgIHsgICAgMzM1LCA5fSwgeyAgICA2NzEsMTF9LCB7ICAgIDE5MSwxMH0sIHsgICAgNDE1LDExfSwgXAorICAgIHsgICAgMjIzLDEyfSwgeyAgICAxMjcsMTF9LCB7ICAgIDI1NSwxMH0sIHsgICAgNTQzLDExfSwgXAorICAgIHsgICAgMjg3LDEwfSwgeyAgICA2MDcsMTF9LCB7ICAgIDMxOSwxMH0sIHsgICAgNjcxLDEyfSwgXAorICAgIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTB9LCB7ICAgIDc5OSwxMX0sIHsgICAgNDE1LDEwfSwgXAorICAgIHsgICAgODMxLDEzfSwgeyAgICAxMjcsMTJ9LCB7ICAgIDI1NSwxMX0sIHsgICAgNTQzLDEwfSwgXAorICAgIHsgICAxMDg3LDExfSwgeyAgICA2MDcsMTJ9LCB7ICAgIDMxOSwxMX0sIHsgICAgNjcxLDEwfSwgXAorICAgIHsgICAxMzQzLDExfSwgeyAgICA3MzUsMTJ9LCB7ICAgIDM4MywxMX0sIHsgICAgODYzLDEyfSwgXAorICAgIHsgICAgNDQ3LDExfSwgeyAgICA5NTksMTN9LCB7ICAgIDI1NSwxMn0sIHsgICAgNTExLDExfSwgXAorICAgIHsgICAxMDg3LDEyfSwgeyAgICA1NzUsMTF9LCB7ICAgMTIxNSwxMn0sIHsgICAgNjM5LDExfSwgXAorICAgIHsgICAxMzQzLDEyfSwgeyAgICA3MDMsMTN9LCB7ICAgIDM4MywxMn0sIHsgICAgNzY3LDExfSwgXAorICAgIHsgICAxNTM1LDEyfSwgeyAgICA4MzEsMTF9LCB7ICAgMTcyNywxMn0sIHsgICAgODk1LDExfSwgXAorICAgIHsgICAxNzkxLDEyfSwgeyAgICA5NTksMTR9LCB7ICAgIDI1NSwxM30sIHsgICAgNTExLDEyfSwgXAorICAgIHsgICAxMDg3LDExfSwgeyAgIDIyMzksMTB9LCB7ICAgNDQ3OSwxMn0sIHsgICAxMjE1LDEzfSwgXAorICAgIHsgICAgNjM5LDEyfSwgeyAgIDE0NzEsMTF9LCB7ICAgMjk0MywxM30sIHsgICAgNzY3LDEyfSwgXAorICAgIHsgICAxNzI3LDEzfSwgeyAgICA4OTUsMTJ9LCB7ICAgMTkxOSwxNH0sIHsgICAgNTExLDEzfSwgXAorICAgIHsgICAxMDIzLDEyfSwgeyAgIDIyMzksMTF9LCB7ICAgNDQ3OSwxM30sIHsgICAxMTUxLDEyfSwgXAorICAgIHsgICAyNDk1LDExfSwgeyAgIDQ5OTEsMTN9LCB7ICAgMTI3OSwxMn0sIHsgICAyNjIzLDEzfSwgXAorICAgIHsgICAxNDA3LDEyfSwgeyAgIDI5NDMsMTR9LCB7ICAgIDc2NywxM30sIHsgICAxNjYzLDEyfSwgXAorICAgIHsgICAzNDU1LDEzfSwgeyAgIDE5MTksMTV9LCB7ICAgIDUxMSwxNH0sIHsgICAxMDIzLDEzfSwgXAorICAgIHsgICAyMTc1LDEyfSwgeyAgIDQ0NzksMTN9LCB7ICAgMjQzMSwxMn0sIHsgICA0OTkxLDE0fSwgXAorICAgIHsgICAxMjc5LDEzfSwgeyAgIDI5NDMsMTJ9LCB7ICAgNTg4NywxNH0sIHsgICAxNTM1LDEzfSwgXAorICAgIHsgICAzNDU1LDE0fSwgeyAgIDE3OTEsMTN9LCB7ICAgMzk2NywxNX0sIHsgICAxMDIzLDE0fSwgXAorICAgIHsgICAyMDQ3LDEzfSwgeyAgIDQ0NzksMTR9LCB7ICAgMjMwMywxM30sIHsgICA0OTkxLDEyfSwgXAorICAgIHsgICA5OTgzLDE0fSwgeyAgIDI4MTUsMTN9LCB7ICAgNTg4NywxNX0sIHsgICAxNTM1LDE0fSwgXAorICAgIHsgICAzMzI3LDEzfSwgeyAgIDY3ODMsMTR9LCB7ICAgMzgzOSwxM30sIHsgICA3Njc5LDE2fSB9CisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzX1NJWkUgMTUyCisjZGVmaW5lIFNRUl9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA1NzYwCisKKyNkZWZpbmUgTVVMTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDMKKyNkZWZpbmUgTVVMTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgTVVMTE9fTVVMX05fVEhSRVNIT0xEICAgICAgICAgICAgMTM0NjMKKyNkZWZpbmUgU1FSTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBTUVJMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAzMworI2RlZmluZSBTUVJMT19TUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAxMTI3OAorCisjZGVmaW5lIERDX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDUyCisjZGVmaW5lIERDX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAgMTk4CisjZGVmaW5lIERDX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDQ4CisjZGVmaW5lIERDX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTI2CisKKyNkZWZpbmUgSU5WX01VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgODIKKyNkZWZpbmUgSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgICAyMTIKKyNkZWZpbmUgSU5WX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAyMDIKKworI2RlZmluZSBCSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgIDIzOAorI2RlZmluZSBSRURDXzFfVE9fUkVEQ19OX1RIUkVTSE9MRCAgICAgICAgICA1NQorCisjZGVmaW5lIE1VX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAxNjUyCisjZGVmaW5lIE1VX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAxNTI4CisjZGVmaW5lIE1VUElfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTEwCisjZGVmaW5lIE1VX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAxNDQyCisjZGVmaW5lIE1VX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAxNTI4CisKKyNkZWZpbmUgUE9XTV9TRUNfVEFCTEUgIDEsMjAsOTYsMzg2LDEyMjEsMjY5OAorCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgIDIxCisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTAwCisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgNzYyCisKKyNkZWZpbmUgRkFDX0RTQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAxMTgKKyNkZWZpbmUgRkFDX09ERF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgMzQKKworI2RlZmluZSBNQVRSSVgyMl9TVFJBU1NFTl9USFJFU0hPTEQgICAgICAgICAxNgorI2RlZmluZSBIR0NEMl9ESVYxX01FVEhPRCAgICAgICAgICAgICAgICAgICAgNCAgLyogMS4yMiUgZmFzdGVyIHRoYW4gMyAqLworI2RlZmluZSBIR0NEX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgICA2NworI2RlZmluZSBIR0NEX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE1MAorI2RlZmluZSBIR0NEX1JFRFVDRV9USFJFU0hPTEQgICAgICAgICAgICAgMzM4OQorI2RlZmluZSBHQ0RfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDQ4MworI2RlZmluZSBHQ0RFWFRfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDM0NQorI2RlZmluZSBKQUNPQklfQkFTRV9NRVRIT0QgICAgICAgICAgICAgICAgICAgNCAgLyogNS4wNyUgZmFzdGVyIHRoYW4gMSAqLworCisvKiBUdW5ldXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgdG9vayA2NTM1OCBzZWNvbmRzICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9iZDIvZ21wLW1wYXJhbS5oIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYmQyL2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODkzZGE3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYmQyL2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDIxNCBAQAorLyogQU1EIGJkMiBnbXAtbXBhcmFtLmggLS0gQ29tcGlsZXIvbWFjaGluZSBwYXJhbWV0ZXIgaGVhZGVyIGZpbGUuCisKK0NvcHlyaWdodCAyMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgMzIKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgNAorCisvKiA0MDAwLTQyMDAgTUh6IFBpbGVkcml2ZXIgVmlzaGVyYSAgKi8KKy8qIEZGVCB0dW5pbmcgbGltaXQgPSA2NywwMDAsMDAwICovCisvKiBHZW5lcmF0ZWQgYnkgdHVuZXVwLmMsIDIwMTktMTAtMjMsIGdjYyA4LjMgKi8KKworI2RlZmluZSBNT0RfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMworI2RlZmluZSBNT0RfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgNAorI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNgorI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNAorI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAxOAorI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICAgICAgMCAgLyogbmV2ZXIgbXBuX21vZF8xc18ycCAqLworI2RlZmluZSBQUkVJTlZfTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAxMgorI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgICAgICAgICAgICAgICAgMSAgLyogbmF0aXZlICovCisjZGVmaW5lIERJVl9RUl8xTl9QSTFfTUVUSE9EICAgICAgICAgICAgICAgICAxICAvKiA0MC44NyUgZmFzdGVyIHRoYW4gMiAqLworI2RlZmluZSBESVZfUVJfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgNQorI2RlZmluZSBESVZfUVJfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICBNUF9TSVpFX1RfTUFYICAvKiBuZXZlciAqLworI2RlZmluZSBESVZfUVJfMl9QSTJfVEhSRVNIT0xEICAgICAgICAgICBNUF9TSVpFX1RfTUFYICAvKiBuZXZlciAqLworI2RlZmluZSBESVZFWEFDVF8xX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIEJNT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgICAgICAgIDI0CisKKyNkZWZpbmUgRElWXzFfVlNfTVVMXzFfUEVSQ0VOVCAgICAgICAgICAgICAyNTQKKworI2RlZmluZSBNVUxfVE9PTTIyX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBNVUxfVE9PTTMzX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA3MworI2RlZmluZSBNVUxfVE9PTTQ0X1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE1MQorI2RlZmluZSBNVUxfVE9PTTZIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDIyMgorI2RlZmluZSBNVUxfVE9PTThIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDM1MQorCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTQzX1RIUkVTSE9MRCAgICAgIDg1CisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgMTEwCisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgMTAwCisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTYzX1RIUkVTSE9MRCAgICAgMTEwCisjZGVmaW5lIE1VTF9UT09NNDNfVE9fVE9PTTU0X1RIUkVTSE9MRCAgICAgMTMwCisKKyNkZWZpbmUgU1FSX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAobmF0aXZlKSAqLworI2RlZmluZSBTUVJfVE9PTTJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA0NAorI2RlZmluZSBTUVJfVE9PTTNfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA5MworI2RlZmluZSBTUVJfVE9PTTRfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDIxMgorI2RlZmluZSBTUVJfVE9PTTZfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDMxOAorI2RlZmluZSBTUVJfVE9PTThfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDQ2NgorCisjZGVmaW5lIE1VTE1JRF9UT09NNDJfVEhSRVNIT0xEICAgICAgICAgICAgIDY2CisKKyNkZWZpbmUgTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgU1FSTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjMKKworI2RlZmluZSBNVUxfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDU5NSAgLyogayA9IDUgKi8KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDU5NSwgNX0sIHsgICAgIDI3LCA2fSwgeyAgICAgMjksIDd9LCB7ICAgICAxNSwgNn0sIFwKKyAgICB7ICAgICAzMywgN30sIHsgICAgIDE3LCA2fSwgeyAgICAgMzUsIDd9LCB7ICAgICAxOSwgNn0sIFwKKyAgICB7ICAgICAzOSwgN30sIHsgICAgIDIzLCA2fSwgeyAgICAgNDcsIDd9LCB7ICAgICAyOSwgOH0sIFwKKyAgICB7ICAgICAxNSwgN30sIHsgICAgIDM1LCA4fSwgeyAgICAgMTksIDd9LCB7ICAgICA0MSwgOH0sIFwKKyAgICB7ICAgICAyMywgN30sIHsgICAgIDQ5LCA4fSwgeyAgICAgMzEsIDd9LCB7ICAgICA2MywgOH0sIFwKKyAgICB7ICAgICAzOSwgOX0sIHsgICAgIDIzLCA4fSwgeyAgICAgNTUsIDl9LCB7ICAgICAzMSwgOH0sIFwKKyAgICB7ICAgICA2NywgOX0sIHsgICAgIDM5LCA4fSwgeyAgICAgODMsIDl9LCB7ICAgICA0NywgOH0sIFwKKyAgICB7ICAgICA5NSwgOX0sIHsgICAgIDU1LDEwfSwgeyAgICAgMzEsIDl9LCB7ICAgICA3OSwxMH0sIFwKKyAgICB7ICAgICA0NywgOX0sIHsgICAgIDk1LDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA2MywgOX0sIFwKKyAgICB7ICAgIDEzNSwxMH0sIHsgICAgIDc5LCA5fSwgeyAgICAxNTksMTB9LCB7ICAgICA5NSwgOX0sIFwKKyAgICB7ICAgIDE5MSwxMX0sIHsgICAgIDYzLDEwfSwgeyAgICAxNDMsIDd9LCB7ICAgMTIxNSwgOX0sIFwKKyAgICB7ICAgIDMxOSwgOH0sIHsgICAgNjM5LCA5fSwgeyAgICAzMzUsIDh9LCB7ICAgIDY3MSwgOX0sIFwKKyAgICB7ICAgIDM1MSwxMH0sIHsgICAgMTkxLDEyfSwgeyAgICAgNjMsMTF9LCB7ICAgIDEyNywxMH0sIFwKKyAgICB7ICAgIDI3MSwxMX0sIHsgICAgMTU5LDEwfSwgeyAgICAzMTksIDl9LCB7ICAgIDYzOSwxMH0sIFwKKyAgICB7ICAgIDMzNSwxMX0sIHsgICAgMTkxLDEwfSwgeyAgICAzOTksMTF9LCB7ICAgIDIyMywxMn0sIFwKKyAgICB7ICAgIDEyNywxMX0sIHsgICAgMjU1LDEwfSwgeyAgICA1NDMsMTF9LCB7ICAgIDI4NywxMH0sIFwKKyAgICB7ICAgIDYwNywxMX0sIHsgICAgMzE5LDEwfSwgeyAgICA2NzEsMTJ9LCB7ICAgIDE5MSwxMX0sIFwKKyAgICB7ICAgIDM4MywxMH0sIHsgICAgNzk5LDExfSwgeyAgICA0MTUsMTN9LCB7ICAgIDEyNywxMn0sIFwKKyAgICB7ICAgIDI1NSwxMX0sIHsgICAgNTQzLDEwfSwgeyAgIDEwODcsMTF9LCB7ICAgIDYwNywxMn0sIFwKKyAgICB7ICAgIDMxOSwxMX0sIHsgICAgNjcxLDEwfSwgeyAgIDEzNDMsMTF9LCB7ICAgIDczNSwxMH0sIFwKKyAgICB7ICAgMTQ3MSwxMn0sIHsgICAgMzgzLDExfSwgeyAgICA3OTksMTB9LCB7ICAgMTU5OSwxMX0sIFwKKyAgICB7ICAgIDg2MywxMn0sIHsgICAgNDQ3LDExfSwgeyAgICA4OTUsMTN9LCB7ICAgIDI1NSwxMn0sIFwKKyAgICB7ICAgIDUxMSwxMX0sIHsgICAxMDg3LDEyfSwgeyAgICA1NzUsMTF9LCB7ICAgMTIxNSwxMn0sIFwKKyAgICB7ICAgIDYzOSwxMX0sIHsgICAxMzQzLDEyfSwgeyAgICA3MDMsMTF9LCB7ICAgMTQ3MSwxM30sIFwKKyAgICB7ICAgIDM4MywxMn0sIHsgICAgNzY3LDExfSwgeyAgIDE1OTksMTJ9LCB7ICAgIDgzMSwxMX0sIFwKKyAgICB7ICAgMTcyNywxMn0sIHsgICAgODk1LDE0fSwgeyAgICAyNTUsMTN9LCB7ICAgIDUxMSwxMn0sIFwKKyAgICB7ICAgMTA4NywxMX0sIHsgICAyMjM5LDEyfSwgeyAgIDEyMTUsMTN9LCB7ICAgIDYzOSwxMn0sIFwKKyAgICB7ICAgMTQ3MSwxMX0sIHsgICAyOTQzLDEzfSwgeyAgICA3NjcsMTJ9LCB7ICAgMTcyNywxM30sIFwKKyAgICB7ICAgIDg5NSwxMn0sIHsgICAxOTE5LDE0fSwgeyAgICA1MTEsMTN9LCB7ICAgMTAyMywxMn0sIFwKKyAgICB7ICAgMjIzOSwxM30sIHsgICAxMTUxLDEyfSwgeyAgIDI0MzEsMTN9LCB7ICAgMTI3OSwxMn0sIFwKKyAgICB7ICAgMjYyMywxM30sIHsgICAxNDA3LDEyfSwgeyAgIDI5NDMsMTR9LCB7ICAgIDc2NywxM30sIFwKKyAgICB7ICAgMTUzNSwxMn0sIHsgICAzMTM1LDEzfSwgeyAgIDE2NjMsMTJ9LCB7ICAgMzQ1NSwxM30sIFwKKyAgICB7ICAgMTkxOSwxNX0sIHsgICAgNTExLDE0fSwgeyAgIDEwMjMsMTN9LCB7ICAgMjE3NSwxMn0sIFwKKyAgICB7ICAgNDQ3OSwxM30sIHsgICAyNDMxLDE0fSwgeyAgIDEyNzksMTN9LCB7ICAgMjk0MywxMn0sIFwKKyAgICB7ICAgNTg4NywxNH0sIHsgICAxNTM1LDEzfSwgeyAgIDM0NTUsMTR9LCB7ICAgMTc5MSwxM30sIFwKKyAgICB7ICAgMzk2NywxMn0sIHsgICA3OTM1LDExfSwgeyAgMTU4NzEsMTV9LCB7ICAgMTAyMywxNH0sIFwKKyAgICB7ICAgMjA0NywxM30sIHsgICA0NDc5LDE0fSwgeyAgIDIzMDMsMTN9LCB7ICAgNDk5MSwxMn0sIFwKKyAgICB7ICAgOTk4MywxNH0sIHsgICAyODE1LDEzfSwgeyAgIDU4ODcsMTV9LCB7ICAgMTUzNSwxNH0sIFwKKyAgICB7ICAgMzgzOSwxM30sIHsgICA3OTM1LDEyfSwgeyAgMTU4NzEsMTZ9IH0KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTNfU0laRSAxNTUKKyNkZWZpbmUgTVVMX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDY3ODQKKworI2RlZmluZSBTUVJfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDU1NSAgLyogayA9IDUgKi8KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDU1NSwgNX0sIHsgICAgIDI4LCA2fSwgeyAgICAgMTUsIDV9LCB7ICAgICAzMSwgNn0sIFwKKyAgICB7ICAgICAxNiwgNX0sIHsgICAgIDMzLCA2fSwgeyAgICAgMjksIDd9LCB7ICAgICAxNSwgNn0sIFwKKyAgICB7ICAgICAzMywgN30sIHsgICAgIDE3LCA2fSwgeyAgICAgMzYsIDd9LCB7ICAgICAxOSwgNn0sIFwKKyAgICB7ICAgICAzOSwgN30sIHsgICAgIDIzLCA2fSwgeyAgICAgNDcsIDd9LCB7ICAgICAyOSwgOH0sIFwKKyAgICB7ICAgICAxNSwgN30sIHsgICAgIDM1LCA4fSwgeyAgICAgMTksIDd9LCB7ICAgICA0MywgOH0sIFwKKyAgICB7ICAgICAyMywgN30sIHsgICAgIDQ5LCA4fSwgeyAgICAgMzEsIDd9LCB7ICAgICA2MywgOH0sIFwKKyAgICB7ICAgICA0MywgOX0sIHsgICAgIDIzLCA4fSwgeyAgICAgNTUsIDl9LCB7ICAgICAzMSwgOH0sIFwKKyAgICB7ICAgICA2NywgOX0sIHsgICAgIDM5LCA4fSwgeyAgICAgNzksIDl9LCB7ICAgICA0NywgOH0sIFwKKyAgICB7ICAgICA5NSwgOX0sIHsgICAgIDU1LDEwfSwgeyAgICAgMzEsIDl9LCB7ICAgICA3OSwxMH0sIFwKKyAgICB7ICAgICA0NywgOX0sIHsgICAgIDk1LDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA2MywgOX0sIFwKKyAgICB7ICAgIDEzNSwxMH0sIHsgICAgIDc5LCA5fSwgeyAgICAxNTksMTB9LCB7ICAgICA5NSwxMX0sIFwKKyAgICB7ICAgICA2MywxMH0sIHsgICAgMTQzLCA5fSwgeyAgICAyODcsMTB9LCB7ICAgIDE1OSwxMX0sIFwKKyAgICB7ICAgICA5NSwxMH0sIHsgICAgMTkxLCA2fSwgeyAgIDMwNzEsIDV9LCB7ICAgNjM5OSwgNn0sIFwKKyAgICB7ICAgMzQ1NSwgN30sIHsgICAxNzkxLCA4fSwgeyAgICA5NTksMTB9LCB7ICAgIDI1NSwgOX0sIFwKKyAgICB7ICAgIDUxMSwxMH0sIHsgICAgMjcxLDExfSwgeyAgICAxNTksMTB9LCB7ICAgIDMxOSwgOX0sIFwKKyAgICB7ICAgIDYzOSwxMH0sIHsgICAgMzM1LCA5fSwgeyAgICA2NzEsMTB9LCB7ICAgIDM1MSwxMX0sIFwKKyAgICB7ICAgIDE5MSwxMH0sIHsgICAgMzk5LCA5fSwgeyAgICA3OTksMTB9LCB7ICAgIDQxNSwxMX0sIFwKKyAgICB7ICAgIDIyMywxMn0sIHsgICAgMTI3LDExfSwgeyAgICAyNTUsMTB9LCB7ICAgIDU0MywxMX0sIFwKKyAgICB7ICAgIDI4NywxMH0sIHsgICAgNjA3LDExfSwgeyAgICAzMTksMTB9LCB7ICAgIDY3MSwxMX0sIFwKKyAgICB7ICAgIDM1MSwxMn0sIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTB9LCB7ICAgIDc5OSwxMX0sIFwKKyAgICB7ICAgIDQxNSwxM30sIHsgICAgMTI3LDEyfSwgeyAgICAyNTUsMTF9LCB7ICAgIDU0MywxMH0sIFwKKyAgICB7ICAgMTA4NywxMX0sIHsgICAgNjA3LDEyfSwgeyAgICAzMTksMTF9LCB7ICAgIDY3MSwxMH0sIFwKKyAgICB7ICAgMTM0MywxMX0sIHsgICAgNzM1LDEyfSwgeyAgICAzODMsMTF9LCB7ICAgIDc5OSwxMH0sIFwKKyAgICB7ICAgMTU5OSwxMX0sIHsgICAgODYzLDEyfSwgeyAgICA0NDcsMTF9LCB7ICAgIDkyNywxM30sIFwKKyAgICB7ICAgIDI1NSwxMn0sIHsgICAgNTExLDExfSwgeyAgIDEwNTUsMTB9LCB7ICAgMjExMSwxMX0sIFwKKyAgICB7ICAgMTA4NywxMn0sIHsgICAgNTc1LDExfSwgeyAgIDEyMTUsMTJ9LCB7ICAgIDYzOSwxMX0sIFwKKyAgICB7ICAgMTM0MywxMn0sIHsgICAgNzAzLDEzfSwgeyAgICAzODMsMTJ9LCB7ICAgIDc2NywxMX0sIFwKKyAgICB7ICAgMTU5OSwxMn0sIHsgICAgODMxLDExfSwgeyAgIDE3MjcsMTB9LCB7ICAgMzQ1NSwxMn0sIFwKKyAgICB7ICAgIDk1OSwxNH0sIHsgICAgMjU1LDEzfSwgeyAgICA1MTEsMTJ9LCB7ICAgMTAyMywxMX0sIFwKKyAgICB7ICAgMjExMSwxMn0sIHsgICAxMDg3LDExfSwgeyAgIDIyMzksMTB9LCB7ICAgNDQ3OSwxMn0sIFwKKyAgICB7ICAgMTIxNSwxM30sIHsgICAgNjM5LDEyfSwgeyAgIDE0NzEsMTF9LCB7ICAgMjk0MywxM30sIFwKKyAgICB7ICAgIDc2NywxMn0sIHsgICAxNzI3LDExfSwgeyAgIDM0NTUsMTN9LCB7ICAgIDg5NSwxMn0sIFwKKyAgICB7ICAgMTg1NSwxNH0sIHsgICAgNTExLDEzfSwgeyAgIDEwMjMsMTJ9LCB7ICAgMjIzOSwxM30sIFwKKyAgICB7ICAgMTE1MSwxMn0sIHsgICAyNDk1LDEzfSwgeyAgIDEyNzksMTJ9LCB7ICAgMjYyMywxM30sIFwKKyAgICB7ICAgMTQwNywxMn0sIHsgICAyOTQzLDE0fSwgeyAgICA3NjcsMTN9LCB7ICAgMTY2MywxMn0sIFwKKyAgICB7ICAgMzQ1NSwxM30sIHsgICAxNzkxLDE1fSwgeyAgICA1MTEsMTR9LCB7ICAgMTAyMywxM30sIFwKKyAgICB7ICAgMjE3NSwxMn0sIHsgICA0NDc5LDEzfSwgeyAgIDI0MzEsMTR9LCB7ICAgMTI3OSwxM30sIFwKKyAgICB7ICAgMjk0MywxMn0sIHsgICA1ODg3LDE0fSwgeyAgIDE1MzUsMTN9LCB7ICAgMzQ1NSwxNH0sIFwKKyAgICB7ICAgMTc5MSwxM30sIHsgICAzOTY3LDEyfSwgeyAgIDc5MzUsMTV9LCB7ICAgMTAyMywxNH0sIFwKKyAgICB7ICAgMjA0NywxM30sIHsgICA0NDc5LDE0fSwgeyAgIDIzMDMsMTN9LCB7ICAgNDk5MSwxMn0sIFwKKyAgICB7ICAgOTk4MywxNH0sIHsgICAyODE1LDEzfSwgeyAgIDU4ODcsMTV9LCB7ICAgMTUzNSwxNH0sIFwKKyAgICB7ICAgMzgzOSwxM30sIHsgICA3OTM1LDE2fSB9CisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzX1NJWkUgMTY2CisjZGVmaW5lIFNRUl9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA1NzYwCisKKyNkZWZpbmUgTVVMTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDMKKyNkZWZpbmUgTVVMTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgMzQKKyNkZWZpbmUgTVVMTE9fTVVMX05fVEhSRVNIT0xEICAgICAgICAgICAgMTM0NjMKKyNkZWZpbmUgU1FSTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDgKKyNkZWZpbmUgU1FSTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgNDMKKyNkZWZpbmUgU1FSTE9fU1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTEyNzgKKworI2RlZmluZSBEQ19ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA3NQorI2RlZmluZSBEQ19ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgIDIwMAorI2RlZmluZSBEQ19CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA3MQorI2RlZmluZSBEQ19CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDExOQorCisjZGVmaW5lIElOVl9NVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgIDc0CisjZGVmaW5lIElOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAgMjY2CisjZGVmaW5lIElOVl9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMjE0CisKKyNkZWZpbmUgQklOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAyNzgKKyNkZWZpbmUgUkVEQ18xX1RPX1JFRENfTl9USFJFU0hPTEQgICAgICAgICAgNzEKKworI2RlZmluZSBNVV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTY1MgorI2RlZmluZSBNVV9ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgMTU4OQorI2RlZmluZSBNVVBJX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgIDEyMgorI2RlZmluZSBNVV9CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTQ0MgorI2RlZmluZSBNVV9CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTU5NworCisjZGVmaW5lIFBPV01fU0VDX1RBQkxFICAxLDIyLDk2LDI4OSwxMjU5CisKKyNkZWZpbmUgR0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICAgMjAKKyNkZWZpbmUgU0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAxNzMKKyNkZWZpbmUgU0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICA0NTQKKworI2RlZmluZSBGQUNfRFNDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICA5MAorI2RlZmluZSBGQUNfT0REX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAzNAorCisjZGVmaW5lIE1BVFJJWDIyX1NUUkFTU0VOX1RIUkVTSE9MRCAgICAgICAgIDE5CisjZGVmaW5lIEhHQ0QyX0RJVjFfTUVUSE9EICAgICAgICAgICAgICAgICAgICAxICAvKiA1LjgwJSBmYXN0ZXIgdGhhbiAzICovCisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAgIDc0CisjZGVmaW5lIEhHQ0RfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDUwCisjZGVmaW5lIEhHQ0RfUkVEVUNFX1RIUkVTSE9MRCAgICAgICAgICAgICAzMzg5CisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgNDU2CisjZGVmaW5lIEdDREVYVF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMzQ1CisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAgICA0ICAvKiAxNy4wNyUgZmFzdGVyIHRoYW4gMSAqLworCisvKiBUdW5ldXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgdG9vayA1MzkxNCBzZWNvbmRzICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9iZDQvZ21wLW1wYXJhbS5oIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYmQ0L2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzIwZDBmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYmQ0L2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDIyNSBAQAorLyogQU1EIGJkNCBnbXAtbXBhcmFtLmggLS0gQ29tcGlsZXIvbWFjaGluZSBwYXJhbWV0ZXIgaGVhZGVyIGZpbGUuCisKK0NvcHlyaWdodCAyMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgMzIKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgNAorCisvKiAzODAwLTQyMDAgTUh6IEV4Y2F2YXRvci9CcmlzdG9sIFJpZGdlICAqLworLyogRkZUIHR1bmluZyBsaW1pdCA9IDY3LDAwMCwwMDAgKi8KKy8qIEdlbmVyYXRlZCBieSB0dW5ldXAuYywgMjAxOS0xMC0yMywgZ2NjIDguMyAqLworCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgOAorI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNgorI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAyNworI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICAgICA1MAorI2RlZmluZSBQUkVJTlZfTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAxMworI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgICAgICAgICAgICAgICAgMSAgLyogbmF0aXZlICovCisjZGVmaW5lIERJVl9RUl8xTl9QSTFfTUVUSE9EICAgICAgICAgICAgICAgICAxICAvKiAyOC40NSUgZmFzdGVyIHRoYW4gMiAqLworI2RlZmluZSBESVZfUVJfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgNAorI2RlZmluZSBESVZfUVJfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICBNUF9TSVpFX1RfTUFYICAvKiBuZXZlciAqLworI2RlZmluZSBESVZfUVJfMl9QSTJfVEhSRVNIT0xEICAgICAgICAgICAgICAxMworI2RlZmluZSBESVZFWEFDVF8xX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIEJNT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgICAgICAgIDI4CisKKyNkZWZpbmUgRElWXzFfVlNfTVVMXzFfUEVSQ0VOVCAgICAgICAgICAgICAzMTQKKworI2RlZmluZSBNVUxfVE9PTTIyX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBNVUxfVE9PTTMzX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA3MworI2RlZmluZSBNVUxfVE9PTTQ0X1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE2NgorI2RlZmluZSBNVUxfVE9PTTZIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDI3MAorI2RlZmluZSBNVUxfVE9PTThIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDM1NworCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTQzX1RIUkVTSE9MRCAgICAgIDY5CisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgMTE0CisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgMTAzCisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTYzX1RIUkVTSE9MRCAgICAgMTIxCisjZGVmaW5lIE1VTF9UT09NNDNfVE9fVE9PTTU0X1RIUkVTSE9MRCAgICAgMTU0CisKKyNkZWZpbmUgU1FSX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAobmF0aXZlKSAqLworI2RlZmluZSBTUVJfVE9PTTJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA0MgorI2RlZmluZSBTUVJfVE9PTTNfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA4OQorI2RlZmluZSBTUVJfVE9PTTRfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDIwOAorI2RlZmluZSBTUVJfVE9PTTZfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDMwNgorI2RlZmluZSBTUVJfVE9PTThfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDQ1NAorCisjZGVmaW5lIE1VTE1JRF9UT09NNDJfVEhSRVNIT0xEICAgICAgICAgICAgIDY4CisKKyNkZWZpbmUgTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgU1FSTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTgKKworI2RlZmluZSBNVUxfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDU3MCAgLyogayA9IDUgKi8KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDU3MCwgNX0sIHsgICAgIDI1LCA2fSwgeyAgICAgMTMsIDV9LCB7ICAgICAyNywgNn0sIFwKKyAgICB7ICAgICAyNSwgN30sIHsgICAgIDEzLCA2fSwgeyAgICAgMjcsIDd9LCB7ICAgICAxNSwgNn0sIFwKKyAgICB7ICAgICAzMiwgN30sIHsgICAgIDE3LCA2fSwgeyAgICAgMzUsIDd9LCB7ICAgICAxOSwgNn0sIFwKKyAgICB7ICAgICAzOSwgN30sIHsgICAgIDI3LCA4fSwgeyAgICAgMTUsIDd9LCB7ICAgICAzNSwgOH0sIFwKKyAgICB7ICAgICAxOSwgN30sIHsgICAgIDQxLCA4fSwgeyAgICAgMjMsIDd9LCB7ICAgICA0NywgOH0sIFwKKyAgICB7ICAgICAyNywgOX0sIHsgICAgIDE1LCA4fSwgeyAgICAgMzEsIDd9LCB7ICAgICA2MywgOH0sIFwKKyAgICB7ICAgICAzOSwgOX0sIHsgICAgIDIzLCA4fSwgeyAgICAgNTEsMTB9LCB7ICAgICAxNSwgOX0sIFwKKyAgICB7ICAgICAzMSwgOH0sIHsgICAgIDY3LCA5fSwgeyAgICAgMzksIDh9LCB7ICAgICA3OSwgOX0sIFwKKyAgICB7ICAgICA0NywgOH0sIHsgICAgIDk1LDEwfSwgeyAgICAgMzEsIDl9LCB7ICAgICA3OSwxMH0sIFwKKyAgICB7ICAgICA0NywgOX0sIHsgICAgIDk1LDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA2MywgOX0sIFwKKyAgICB7ICAgIDEzNSwxMH0sIHsgICAgIDc5LCA5fSwgeyAgICAxNTksMTB9LCB7ICAgICA5NSwgOX0sIFwKKyAgICB7ICAgIDE5MSwxMX0sIHsgICAgIDYzLDEwfSwgeyAgICAxNDMsIDZ9LCB7ICAgMjMwMywgNX0sIFwKKyAgICB7ICAgNDczNSwgNH0sIHsgICA5NDcxLCA1fSwgeyAgIDQ4NjMsIDd9LCB7ICAgMTI3OSwgOX0sIFwKKyAgICB7ICAgIDMzNSwgOH0sIHsgICAgNjcxLCA5fSwgeyAgICAzNTEsIDh9LCB7ICAgIDcwMywxMH0sIFwKKyAgICB7ICAgIDE5MSwxMn0sIHsgICAgIDYzLDExfSwgeyAgICAxMjcsMTB9LCB7ICAgIDI1NSwgOX0sIFwKKyAgICB7ICAgIDUxMSwxMH0sIHsgICAgMjcxLCA5fSwgeyAgICA1NDMsMTF9LCB7ICAgIDE1OSwxMH0sIFwKKyAgICB7ICAgIDMxOSwgOX0sIHsgICAgNjM5LDEwfSwgeyAgICAzMzUsIDl9LCB7ICAgIDY3MSwgOH0sIFwKKyAgICB7ICAgMTM0MywxMH0sIHsgICAgMzUxLCA5fSwgeyAgICA3MDMsMTB9LCB7ICAgIDM2NywgOX0sIFwKKyAgICB7ICAgIDczNSwxMX0sIHsgICAgMTkxLDEwfSwgeyAgICAzODMsIDl9LCB7ICAgIDc2NywxMH0sIFwKKyAgICB7ICAgIDM5OSwgOX0sIHsgICAgNzk5LCA4fSwgeyAgIDE1OTksMTB9LCB7ICAgIDQxNSwxMX0sIFwKKyAgICB7ICAgIDIyMywxMn0sIHsgICAgMTI3LDExfSwgeyAgICAyNTUsMTB9LCB7ICAgIDU0MywgOX0sIFwKKyAgICB7ICAgMTA4NywxMX0sIHsgICAgMjg3LDEwfSwgeyAgICA2MDcsIDl9LCB7ICAgMTIxNSwxMX0sIFwKKyAgICB7ICAgIDMxOSwxMH0sIHsgICAgNjcxLCA5fSwgeyAgIDEzNDMsMTF9LCB7ICAgIDM1MSwxMn0sIFwKKyAgICB7ICAgIDE5MSwxMX0sIHsgICAgMzgzLDEwfSwgeyAgICA3OTksMTF9LCB7ICAgIDQxNSwxMH0sIFwKKyAgICB7ICAgIDg2MywxM30sIHsgICAgMTI3LDEyfSwgeyAgICAyNTUsMTF9LCB7ICAgIDU0MywxMH0sIFwKKyAgICB7ICAgMTA4NywxMX0sIHsgICAgNjA3LDEwfSwgeyAgIDEyMTUsIDl9LCB7ICAgMjQzMSwxMn0sIFwKKyAgICB7ICAgIDMxOSwxMX0sIHsgICAgNjcxLDEwfSwgeyAgIDEzNDMsMTF9LCB7ICAgIDczNSwxMH0sIFwKKyAgICB7ICAgMTQ3MSwgOX0sIHsgICAyOTQzLDEyfSwgeyAgICAzODMsMTF9LCB7ICAgIDc5OSwxMH0sIFwKKyAgICB7ICAgMTU5OSwxMX0sIHsgICAgODYzLDEwfSwgeyAgIDE3MjcsMTJ9LCB7ICAgIDQ0NywxMX0sIFwKKyAgICB7ICAgIDk1OSwxMH0sIHsgICAxOTE5LDEzfSwgeyAgICAyNTUsMTJ9LCB7ICAgIDUxMSwxMX0sIFwKKyAgICB7ICAgMTA4NywxMn0sIHsgICAgNTc1LDExfSwgeyAgIDEyMTUsMTB9LCB7ICAgMjQzMSwxMn0sIFwKKyAgICB7ICAgIDYzOSwxMX0sIHsgICAxMzQzLDEyfSwgeyAgICA3MDMsMTF9LCB7ICAgMTQ3MSwxMH0sIFwKKyAgICB7ICAgMjk0MywxM30sIHsgICAgMzgzLDEyfSwgeyAgICA3NjcsMTF9LCB7ICAgMTU5OSwxMn0sIFwKKyAgICB7ICAgIDgzMSwxMX0sIHsgICAxNzI3LDEwfSwgeyAgIDM0NTUsMTJ9LCB7ICAgIDk1OSwxMX0sIFwKKyAgICB7ICAgMTkxOSwxMH0sIHsgICAzODM5LDEzfSwgeyAgICA1MTEsMTJ9LCB7ICAgMTA4NywxMX0sIFwKKyAgICB7ICAgMjIzOSwxMn0sIHsgICAxMjE1LDExfSwgeyAgIDI0MzEsMTN9LCB7ICAgIDYzOSwxMn0sIFwKKyAgICB7ICAgMTQ3MSwxMX0sIHsgICAyOTQzLDEwfSwgeyAgIDU4ODcsMTN9LCB7ICAgIDc2NywxMn0sIFwKKyAgICB7ICAgMTcyNywxMX0sIHsgICAzNDU1LDEzfSwgeyAgICA4OTUsMTJ9LCB7ICAgMTkxOSwxMX0sIFwKKyAgICB7ICAgMzgzOSwxNH0sIHsgICAgNTExLDEzfSwgeyAgIDEwMjMsMTJ9LCB7ICAgMjIzOSwxM30sIFwKKyAgICB7ICAgMTE1MSwxMn0sIHsgICAyNDMxLDEzfSwgeyAgIDEyNzksMTJ9LCB7ICAgMjU1OSwxM30sIFwKKyAgICB7ICAgMTQwNywxMn0sIHsgICAyOTQzLDExfSwgeyAgIDU4ODcsMTR9LCB7ICAgIDc2NywxM30sIFwKKyAgICB7ICAgMTY2MywxMn0sIHsgICAzNDU1LDEzfSwgeyAgIDE5MTksMTJ9LCB7ICAgMzgzOSwxNX0sIFwKKyAgICB7ICAgIDUxMSwxNH0sIHsgICAxMDIzLDEzfSwgeyAgIDIxNzUsMTJ9LCB7ICAgNDQ3OSwxM30sIFwKKyAgICB7ICAgMjQzMSwxNH0sIHsgICAxMjc5LDEzfSwgeyAgIDI5NDMsMTJ9LCB7ICAgNTg4NywxNH0sIFwKKyAgICB7ICAgMTUzNSwxM30sIHsgICAzNDU1LDE0fSwgeyAgIDE3OTEsMTN9LCB7ICAgMzk2NywxMn0sIFwKKyAgICB7ICAgNzkzNSwxNX0sIHsgICAxMDIzLDE0fSwgeyAgIDIwNDcsMTN9LCB7ICAgNDQ3OSwxNH0sIFwKKyAgICB7ICAgMjMwMywxM30sIHsgICA0OTkxLDEyfSwgeyAgIDk5ODMsMTR9LCB7ICAgMjgxNSwxM30sIFwKKyAgICB7ICAgNTg4NywxNX0sIHsgICAxNTM1LDE0fSwgeyAgIDM4MzksMTN9LCB7ICAgNzkzNSwxNn0gfQorI2RlZmluZSBNVUxfRkZUX1RBQkxFM19TSVpFIDE5MgorI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNTc2MAorCisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgNDc2ICAvKiBrID0gNSAqLworI2RlZmluZSBTUVJfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgNDc2LCA1fSwgeyAgICAgMjgsIDZ9LCB7ICAgICAxNSwgNX0sIHsgICAgIDMxLCA2fSwgXAorICAgIHsgICAgIDE2LCA1fSwgeyAgICAgMzMsIDZ9LCB7ICAgICAyOSwgN30sIHsgICAgIDE1LCA2fSwgXAorICAgIHsgICAgIDMzLCA3fSwgeyAgICAgMTcsIDZ9LCB7ICAgICAzNiwgN30sIHsgICAgIDE5LCA2fSwgXAorICAgIHsgICAgIDM5LCA3fSwgeyAgICAgMjksIDh9LCB7ICAgICAxNSwgN30sIHsgICAgIDM1LCA4fSwgXAorICAgIHsgICAgIDE5LCA3fSwgeyAgICAgNDEsIDh9LCB7ICAgICAyMywgN30sIHsgICAgIDQ3LCA4fSwgXAorICAgIHsgICAgIDI3LCA5fSwgeyAgICAgMTUsIDh9LCB7ICAgICAzOSwgOX0sIHsgICAgIDIzLCA4fSwgXAorICAgIHsgICAgIDUxLCA5fSwgeyAgICAgMzEsIDh9LCB7ICAgICA2NywgOX0sIHsgICAgIDM5LCA4fSwgXAorICAgIHsgICAgIDc5LCA5fSwgeyAgICAgNDcsIDh9LCB7ICAgICA5NSwxMH0sIHsgICAgIDMxLCA5fSwgXAorICAgIHsgICAgIDc5LDEwfSwgeyAgICAgNDcsIDl9LCB7ICAgICA5NSwxMX0sIHsgICAgIDMxLDEwfSwgXAorICAgIHsgICAgIDYzLCA5fSwgeyAgICAxMzUsMTB9LCB7ICAgICA5NSwgOX0sIHsgICAgMTkxLDEwfSwgXAorICAgIHsgICAgMTExLDExfSwgeyAgICAgNjMsMTB9LCB7ICAgIDEyNywgOX0sIHsgICAgMjU1LDEwfSwgXAorICAgIHsgICAgMTQzLCA5fSwgeyAgICAyODcsIDh9LCB7ICAgIDU3NSwxMH0sIHsgICAgMTU5LDExfSwgXAorICAgIHsgICAgIDk1LDEwfSwgeyAgICAxOTEsMTJ9LCB7ICAgICA2MywxMH0sIHsgICAgMjU1LCA5fSwgXAorICAgIHsgICAgNTExLDEwfSwgeyAgICAyNzEsIDl9LCB7ICAgIDU0MywxMH0sIHsgICAgMjg3LCA5fSwgXAorICAgIHsgICAgNTc1LDExfSwgeyAgICAxNTksMTB9LCB7ICAgIDMxOSwgOX0sIHsgICAgNjM5LDEwfSwgXAorICAgIHsgICAgMzM1LCA5fSwgeyAgICA2NzEsMTB9LCB7ICAgIDM1MSwgOX0sIHsgICAgNzM1LDExfSwgXAorICAgIHsgICAgMTkxLDEwfSwgeyAgICAzODMsIDl9LCB7ICAgIDc2NywxMH0sIHsgICAgMzk5LCA5fSwgXAorICAgIHsgICAgNzk5LDEwfSwgeyAgICA0MTUsIDl9LCB7ICAgIDg2MywxMn0sIHsgICAgMTI3LDExfSwgXAorICAgIHsgICAgMjU1LDEwfSwgeyAgICA1MTEsIDl9LCB7ICAgMTAyMywxMH0sIHsgICAgNTQzLDExfSwgXAorICAgIHsgICAgMjg3LDEwfSwgeyAgICA2MDcsIDl9LCB7ICAgMTIxNSwxMX0sIHsgICAgMzE5LDEwfSwgXAorICAgIHsgICAgNjcxLCA5fSwgeyAgIDEzNDMsMTF9LCB7ICAgIDM1MSwxMH0sIHsgICAgNzM1LDEyfSwgXAorICAgIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTB9LCB7ICAgIDc5OSwxMX0sIHsgICAgNDE1LDEwfSwgXAorICAgIHsgICAgODYzLDEzfSwgeyAgICAxMjcsMTJ9LCB7ICAgIDI1NSwxMX0sIHsgICAgNTExLDEwfSwgXAorICAgIHsgICAxMDU1LDExfSwgeyAgICA1NDMsMTB9LCB7ICAgMTA4NywxMX0sIHsgICAgNjA3LDEwfSwgXAorICAgIHsgICAxMjE1LDEyfSwgeyAgICAzMTksMTF9LCB7ICAgIDY3MSwxMH0sIHsgICAxMzQzLDExfSwgXAorICAgIHsgICAgNzM1LDEwfSwgeyAgIDE0NzEsMTJ9LCB7ICAgIDM4MywxMX0sIHsgICAgNzk5LDEwfSwgXAorICAgIHsgICAxNTk5LDExfSwgeyAgICA4NjMsMTB9LCB7ICAgMTcyNywxMn0sIHsgICAgNDQ3LDExfSwgXAorICAgIHsgICAgOTU5LDEzfSwgeyAgICAyNTUsMTJ9LCB7ICAgIDUxMSwxMX0sIHsgICAxMDg3LDEyfSwgXAorICAgIHsgICAgNTc1LDExfSwgeyAgIDEyMTUsMTJ9LCB7ICAgIDYzOSwxMX0sIHsgICAxMzQzLDEyfSwgXAorICAgIHsgICAgNzAzLDExfSwgeyAgIDE0NzEsMTN9LCB7ICAgIDM4MywxMn0sIHsgICAgNzY3LDExfSwgXAorICAgIHsgICAxNTk5LDEyfSwgeyAgICA4MzEsMTF9LCB7ICAgMTcyNywxMn0sIHsgICAgOTU5LDExfSwgXAorICAgIHsgICAxOTE5LDE0fSwgeyAgICAyNTUsMTN9LCB7ICAgIDUxMSwxMn0sIHsgICAxMDIzLDExfSwgXAorICAgIHsgICAyMDQ3LDEyfSwgeyAgIDEwODcsMTF9LCB7ICAgMjIzOSwxMn0sIHsgICAxMjE1LDExfSwgXAorICAgIHsgICAyNDMxLDEzfSwgeyAgICA2MzksMTJ9LCB7ICAgMTQ3MSwxMX0sIHsgICAyOTQzLDEzfSwgXAorICAgIHsgICAgNzY3LDEyfSwgeyAgIDE3MjcsMTN9LCB7ICAgIDg5NSwxMn0sIHsgICAxOTgzLDE0fSwgXAorICAgIHsgICAgNTExLDEzfSwgeyAgIDEwMjMsMTJ9LCB7ICAgMjIzOSwxM30sIHsgICAxMTUxLDEyfSwgXAorICAgIHsgICAyNDMxLDEzfSwgeyAgIDEyNzksMTJ9LCB7ICAgMjU1OSwxM30sIHsgICAxNDA3LDEyfSwgXAorICAgIHsgICAyOTQzLDE0fSwgeyAgICA3NjcsMTN9LCB7ICAgMTY2MywxMn0sIHsgICAzNDU1LDEzfSwgXAorICAgIHsgICAxOTE5LDEyfSwgeyAgIDM4MzksMTV9LCB7ICAgIDUxMSwxNH0sIHsgICAxMDIzLDEzfSwgXAorICAgIHsgICAyMTc1LDEyfSwgeyAgIDQ0NzksMTN9LCB7ICAgMjQzMSwxNH0sIHsgICAxMjc5LDEzfSwgXAorICAgIHsgICAyOTQzLDEyfSwgeyAgIDU4ODcsMTR9LCB7ICAgMTUzNSwxM30sIHsgICAzNDU1LDE0fSwgXAorICAgIHsgICAxNzkxLDEzfSwgeyAgIDM5NjcsMTV9LCB7ICAgMTAyMywxNH0sIHsgICAyMDQ3LDEzfSwgXAorICAgIHsgICA0NDc5LDE0fSwgeyAgIDIzMDMsMTN9LCB7ICAgNDk5MSwxMn0sIHsgICA5OTgzLDE0fSwgXAorICAgIHsgICAyODE1LDEzfSwgeyAgIDU4ODcsMTV9LCB7ICAgMTUzNSwxNH0sIHsgICAzODM5LDE2fSB9CisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzX1NJWkUgMTc2CisjZGVmaW5lIFNRUl9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA0NzM2CisKKyNkZWZpbmUgTVVMTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDMKKyNkZWZpbmUgTVVMTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgNTQKKyNkZWZpbmUgTVVMTE9fTVVMX05fVEhSRVNIT0xEICAgICAgICAgICAgMTA5NTAKKyNkZWZpbmUgU1FSTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgMTAKKyNkZWZpbmUgU1FSTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgNzcKKyNkZWZpbmUgU1FSTE9fU1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDk0NDkKKworI2RlZmluZSBEQ19ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA4NAorI2RlZmluZSBEQ19ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgIDI1MgorI2RlZmluZSBEQ19CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA3OQorI2RlZmluZSBEQ19CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA4MAorCisjZGVmaW5lIElOVl9NVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgIDcxCisjZGVmaW5lIElOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAgMjU0CisjZGVmaW5lIElOVl9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMjY2CisKKyNkZWZpbmUgQklOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAyOTQKKyNkZWZpbmUgUkVEQ18xX1RPX1JFRENfTl9USFJFU0hPTEQgICAgICAgICAgNzkKKworI2RlZmluZSBNVV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTY1MgorI2RlZmluZSBNVV9ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgMTUyOAorI2RlZmluZSBNVVBJX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgIDEyMgorI2RlZmluZSBNVV9CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTM4NworI2RlZmluZSBNVV9CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTUyOAorCisjZGVmaW5lIFBPV01fU0VDX1RBQkxFICAxLDE2LDk2LDQ4MCw5NjAKKworI2RlZmluZSBHRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBHRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgICAxOQorI2RlZmluZSBTRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDI2NAorI2RlZmluZSBTRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgIDU0MgorCisjZGVmaW5lIEZBQ19EU0NfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDkxCisjZGVmaW5lIEZBQ19PRERfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDI5CisKKyNkZWZpbmUgTUFUUklYMjJfU1RSQVNTRU5fVEhSRVNIT0xEICAgICAgICAgMTkKKyNkZWZpbmUgSEdDRDJfRElWMV9NRVRIT0QgICAgICAgICAgICAgICAgICAgIDEgIC8qIDkuNzMlIGZhc3RlciB0aGFuIDMgKi8KKyNkZWZpbmUgSEdDRF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgICAgNTUKKyNkZWZpbmUgSEdDRF9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNTAKKyNkZWZpbmUgSEdDRF9SRURVQ0VfVEhSRVNIT0xEICAgICAgICAgICAgIDMzODkKKyNkZWZpbmUgR0NEX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICA1NjIKKyNkZWZpbmUgR0NERVhUX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA0MTYKKyNkZWZpbmUgSkFDT0JJX0JBU0VfTUVUSE9EICAgICAgICAgICAgICAgICAgIDQgIC8qIDE2LjUwJSBmYXN0ZXIgdGhhbiAxICovCisKKy8qIFR1bmV1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCB0b29rIDQ5MTc5IHNlY29uZHMgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2JkaXZfZGJtMWMuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYmRpdl9kYm0xYy5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI4OGM0NwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2JkaXZfZGJtMWMuYXNtCkBAIC0wLDAgKzEsMTI5IEBACitkbmwgIHg4NiBtcG5fYmRpdl9kYm0xLgorCitkbmwgIENvcHlyaWdodCAyMDA4LCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJCQkgICAgY3ljbGVzL2xpbWIKK0MgUDUKK0MgUDYgbW9kZWwgMC04LDEwLTEyKQorQyBQNiBtb2RlbCA5ICAoQmFuaWFzKQorQyBQNiBtb2RlbCAxMyAoRG90aGFuKQkJIDUuMQorQyBQNCBtb2RlbCAwICAoV2lsbGFtZXR0ZSkKK0MgUDQgbW9kZWwgMSAgKD8pCitDIFA0IG1vZGVsIDIgIChOb3J0aHdvb2QpCTEzLjY3CitDIFA0IG1vZGVsIDMgIChQcmVzY290dCkKK0MgUDQgbW9kZWwgNCAgKE5vY29uYSkKK0MgSW50ZWwgQXRvbQorQyBBTUQgSzYKK0MgQU1EIEs3CQkJIDMuNQorQyBBTUQgSzgKK0MgQU1EIEsxMAorCisKK0MgVE9ETworQyAgKiBPcHRpbWl6ZSBmb3IgbW9yZSB4ODYgcHJvY2Vzc29ycworCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigxNikKK1BST0xPR1VFKG1wbl9iZGl2X2RibTFjKQorCW1vdgkxNiglZXNwKSwgJWVjeAkJQyBkCisJcHVzaAklZXNpCisJbW92CTEyKCVlc3ApLCAlZXNpCQlDIGFwCisJcHVzaAklZWRpCisJbW92CTEyKCVlc3ApLCAlZWRpCQlDIHFwCisJcHVzaAklZWJwCisJbW92CTI0KCVlc3ApLCAlZWJwCQlDIG4KKwlwdXNoCSVlYngKKworCW1vdgkoJWVzaSksICVlYXgKKwltdWwJJWVjeAorCW1vdgkzNiglZXNwKSwgJWVieAorCXN1YgklZWF4LCAlZWJ4CisJbW92CSVlYngsICglZWRpKQorCXNiYgklZWR4LCAlZWJ4CisKKwltb3YJJWVicCwgJWVheAorCWFuZAkkMywgJWVheAorCWp6CUwoYjApCisJY21wCSQyLCAlZWF4CisJamMJTChiMSkKKwlqeglMKGIyKQorCitMKGIzKToJbGVhCS04KCVlc2kpLCAlZXNpCisJbGVhCTgoJWVkaSksICVlZGkKKwlhZGQJJC0zLCAlZWJwCisJam1wCUwoMykKKworTChiMCk6CW1vdgk0KCVlc2kpLCAlZWF4CisJbGVhCS00KCVlc2kpLCAlZXNpCisJbGVhCTEyKCVlZGkpLCAlZWRpCisJYWRkCSQtNCwgJWVicAorCWptcAlMKDApCisKK0woYjIpOgltb3YJNCglZXNpKSwgJWVheAorCWxlYQk0KCVlc2kpLCAlZXNpCisJbGVhCTQoJWVkaSksICVlZGkKKwlhZGQJJC0yLCAlZWJwCisJam1wCUwoMikKKworCUFMSUdOKDgpCitMKHRvcCk6CW1vdgk0KCVlc2kpLCAlZWF4CisJbXVsCSVlY3gKKwlsZWEJMTYoJWVkaSksICVlZGkKKwlzdWIJJWVheCwgJWVieAorCW1vdgk4KCVlc2kpLCAlZWF4CisJbW92CSVlYngsIC0xMiglZWRpKQorCXNiYgklZWR4LCAlZWJ4CitMKDApOgltdWwJJWVjeAorCXN1YgklZWF4LCAlZWJ4CisJbW92CSVlYngsIC04KCVlZGkpCisJc2JiCSVlZHgsICVlYngKK0woMyk6CW1vdgkxMiglZXNpKSwgJWVheAorCW11bAklZWN4CisJc3ViCSVlYXgsICVlYngKKwltb3YJJWVieCwgLTQoJWVkaSkKKwltb3YJMTYoJWVzaSksICVlYXgKKwlsZWEJMTYoJWVzaSksICVlc2kKKwlzYmIJJWVkeCwgJWVieAorTCgyKToJbXVsCSVlY3gKKwlzdWIJJWVheCwgJWVieAorCW1vdgklZWJ4LCAwKCVlZGkpCisJc2JiCSVlZHgsICVlYngKK0woYjEpOglhZGQJJC00LCAlZWJwCisJam5zCUwodG9wKQorCisJbW92CSVlYngsICVlYXgKKwlwb3AJJWVieAorCXBvcAklZWJwCisJcG9wCSVlZGkKKwlwb3AJJWVzaQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYmRpdl9xXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYmRpdl9xXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMmRlMDYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9iZGl2X3FfMS5hc20KQEAgLTAsMCArMSwyMDggQEAKK2RubCAgeDg2IG1wbl9iZGl2X3FfMSAtLSBtcG4gYnkgbGltYiBleGFjdCBkaXZpc2lvbi4KKworZG5sICBSZWFycmFuZ2VkIGZyb20gbXBuL3g4Ni9kaXZlXzEuYXNtIGJ5IE1hcmNvIEJvZHJhdG8uCisKK2RubCAgQ29weXJpZ2h0IDIwMDEsIDIwMDIsIDIwMDcsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDICAgICBjeWNsZXMvbGltYgorQyBQNTQgICAgMzAuMAorQyBQNTUgICAgMjkuMAorQyBQNiAgICAgMTMuMCBvZGQgZGl2aXNvciwgMTIuMCBldmVuIChzdHJhbmdlbHkpCitDIEs2ICAgICAxNC4wCitDIEs3ICAgICAxMi4wCitDIFA0ICAgICA0Mi4wCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2JkaXZfcV8xIG1wbl9waTFfYmRpdl9xXzEpCisKK2RlZmZyYW1lKFBBUkFNX1NISUZULCAgMjQpCitkZWZmcmFtZShQQVJBTV9JTlZFUlNFLDIwKQorZGVmZnJhbWUoUEFSQU1fRElWSVNPUiwxNikKK2RlZmZyYW1lKFBBUkFNX1NJWkUsICAgMTIpCitkZWZmcmFtZShQQVJBTV9TUkMsICAgIDgpCitkZWZmcmFtZShQQVJBTV9EU1QsICAgIDQpCisKK2RubCAgcmUtdXNlIHBhcmFtZXRlciBzcGFjZQorZGVmaW5lKFZBUl9JTlZFUlNFLGBQQVJBTV9TUkMnKQorCisJVEVYVAorCitDIG1wX2xpbWJfdAorQyBtcG5fcGkxX2JkaXZfcV8xIChtcF9wdHIgZHN0LCBtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSwgbXBfbGltYl90IGRpdmlzb3IsCitDCQkgICAgbXBfbGltYl90IGludmVyc2UsIGludCBzaGlmdCkKKworCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX3BpMV9iZGl2X3FfMSkKK2RlZmxpdChgRlJBTUUnLDApCisKKwltb3ZsCVBBUkFNX1NISUZULCAlZWN4CisJcHVzaGwJJWVicAlGUkFNRV9wdXNobCgpCisKKwltb3ZsCVBBUkFNX0lOVkVSU0UsICVlYXgKKwltb3ZsCVBBUkFNX1NJWkUsICVlYnAKKwlwdXNobAklZWJ4CUZSQU1FX3B1c2hsKCkKK0woY29tbW9uKToKKwlwdXNobAklZWRpCUZSQU1FX3B1c2hsKCkKKwlwdXNobAklZXNpCUZSQU1FX3B1c2hsKCkKKworCW1vdmwJUEFSQU1fU1JDLCAlZXNpCisJbW92bAlQQVJBTV9EU1QsICVlZGkKKworCWxlYWwJKCVlc2ksJWVicCw0KSwgJWVzaQlDIHNyYyBlbmQKKwlsZWFsCSglZWRpLCVlYnAsNCksICVlZGkJQyBkc3QgZW5kCisJbmVnbAklZWJwCQkJQyAtc2l6ZQorCisJbW92bAklZWF4LCBWQVJfSU5WRVJTRQorCW1vdmwJKCVlc2ksJWVicCw0KSwgJWVheAlDIHNyY1swXQorCisJeG9ybAklZWJ4LCAlZWJ4CisJeG9ybAklZWR4LCAlZWR4CisKKwlpbmNsCSVlYnAKKwlqeglMKG9uZSkKKworCW1vdmwJKCVlc2ksJWVicCw0KSwgJWVkeAlDIHNyY1sxXQorCisJc2hyZGwoCSVjbCwgJWVkeCwgJWVheCkKKworCW1vdmwJVkFSX0lOVkVSU0UsICVlZHgKKwlqbXAJTChlbnRyeSkKKworCisJQUxJR04oOCkKKwlub3AJQyBrNiBjb2RlIGFsaWdubWVudAorCW5vcAorTCh0b3ApOgorCUMgZWF4CXEKKwlDIGVieAljYXJyeSBiaXQsIDAgb3IgLTEKKwlDIGVjeAlzaGlmdAorCUMgZWR4CWNhcnJ5IGxpbWIKKwlDIGVzaQlzcmMgZW5kCisJQyBlZGkJZHN0IGVuZAorCUMgZWJwCWNvdW50ZXIsIGxpbWJzLCBuZWdhdGl2ZQorCisJbW92bAktNCglZXNpLCVlYnAsNCksICVlYXgKKwlzdWJsCSVlYngsICVlZHgJCUMgYWNjdW11bGF0ZSBjYXJyeSBiaXQKKworCW1vdmwJKCVlc2ksJWVicCw0KSwgJWVieAorCisJc2hyZGwoCSVjbCwgJWVieCwgJWVheCkKKworCXN1YmwJJWVkeCwgJWVheAkJQyBhcHBseSBjYXJyeSBsaW1iCisJbW92bAlWQVJfSU5WRVJTRSwgJWVkeAorCisJc2JibAklZWJ4LCAlZWJ4CisKK0woZW50cnkpOgorCWltdWxsCSVlZHgsICVlYXgKKworCW1vdmwJJWVheCwgLTQoJWVkaSwlZWJwLDQpCisJbW92bAlQQVJBTV9ESVZJU09SLCAlZWR4CisKKwltdWxsCSVlZHgKKworCWluY2wJJWVicAorCWpueglMKHRvcCkKKworCisJbW92bAktNCglZXNpKSwgJWVheAkJQyBzcmMgaGlnaCBsaW1iCitMKG9uZSk6CisJc2hybAklY2wsICVlYXgKKwlwb3BsCSVlc2kJRlJBTUVfcG9wbCgpCisKKwlhZGRsCSVlYngsICVlYXgJCUMgYXBwbHkgY2FycnkgYml0CisKKwlzdWJsCSVlZHgsICVlYXgJCUMgYXBwbHkgY2FycnkgbGltYgorCisJaW11bGwJVkFSX0lOVkVSU0UsICVlYXgKKworCW1vdmwJJWVheCwgLTQoJWVkaSkKKworCXBvcGwJJWVkaQorCXBvcGwJJWVieAorCXBvcGwJJWVicAorCisJcmV0CisKK0VQSUxPR1VFKCkKKworQyBtcF9saW1iX3QgbXBuX2JkaXZfcV8xIChtcF9wdHIgZHN0LCBtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSwKK0MgICAgICAgICAgICAgICAgICAgICAgICAgICBtcF9saW1iX3QgZGl2aXNvcik7CitDCisKKwlBTElHTigxNikKK1BST0xPR1VFKG1wbl9iZGl2X3FfMSkKK2RlZmxpdChgRlJBTUUnLDApCisKKwltb3ZsCVBBUkFNX0RJVklTT1IsICVlYXgKKwlwdXNobAklZWJwCUZSQU1FX3B1c2hsKCkKKworCW1vdmwJJC0xLCAlZWN4CQlDIHNoaWZ0IGNvdW50CisJbW92bAlQQVJBTV9TSVpFLCAlZWJwCisKKwlwdXNobAklZWJ4CUZSQU1FX3B1c2hsKCkKKworTChzdHJpcF90d29zKToKKwlpbmNsCSVlY3gKKworCXNocmwJJWVheAorCWpuYwlMKHN0cmlwX3R3b3MpCisKKwlsZWFsCTEoJWVheCwlZWF4KSwgJWVieAlDIGQgd2l0aG91dCB0d29zCisJYW5kbAkkMTI3LCAlZWF4CQlDIGQvMiwgNyBiaXRzCisKK2lmZGVmKGBQSUMnLGAKKwlMRUEoCWJpbnZlcnRfbGltYl90YWJsZSwgJWVkeCkKKwltb3Z6YmwJKCVlYXgsJWVkeCksICVlYXgJCUMgaW52IDggYml0cworJyxgCisJbW92emJsCWJpbnZlcnRfbGltYl90YWJsZSglZWF4KSwgJWVheAlDIGludiA4IGJpdHMKKycpCisKKwlsZWFsCSglZWF4LCVlYXgpLCAlZWR4CUMgMippbnYKKwltb3ZsCSVlYngsIFBBUkFNX0RJVklTT1IJQyBkIHdpdGhvdXQgdHdvcworCWltdWxsCSVlYXgsICVlYXgJCUMgaW52KmludgorCWltdWxsCSVlYngsICVlYXgJCUMgaW52KmludipkCisJc3VibAklZWF4LCAlZWR4CQlDIGludiA9IDIqaW52IC0gaW52KmludipkCisKKwlsZWFsCSglZWR4LCVlZHgpLCAlZWF4CUMgMippbnYKKwlpbXVsbAklZWR4LCAlZWR4CQlDIGludippbnYKKwlpbXVsbAklZWJ4LCAlZWR4CQlDIGludippbnYqZAorCXN1YmwJJWVkeCwgJWVheAkJQyBpbnYgPSAyKmludiAtIGludippbnYqZAorCisJQVNTRVJUKGUsYAlDIGV4cGVjdCBkKmludiA9PSAxIG1vZCAyXkdNUF9MSU1CX0JJVFMKKwlwdXNobAklZWF4CUZSQU1FX3B1c2hsKCkKKwlpbXVsbAlQQVJBTV9ESVZJU09SLCAlZWF4CisJY21wbAkkMSwgJWVheAorCXBvcGwJJWVheAlGUkFNRV9wb3BsKCknKQorCisJam1wCUwoY29tbW9uKQorRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9idDEvZ21wLW1wYXJhbS5oIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYnQxL2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDJkYmM2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYnQxL2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDIxOCBAQAorLyogeDg2L2JvYmNhdCBnbXAtbXBhcmFtLmggLS0gQ29tcGlsZXIvbWFjaGluZSBwYXJhbWV0ZXIgaGVhZGVyIGZpbGUuCisKK0NvcHlyaWdodCAyMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgMzIKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgNAorCisvKiBOT1RFOiBJbiBhIGZhdCBiaW5hcnkgYnVpbGQgU1FSX1RPT00yX1RIUkVTSE9MRCBoZXJlIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4KKyAgIHRoZSB2YWx1ZSBpbiBtcG4veDg2L2s3L2dtcC1tcGFyYW0uaC4gIFRoZSBsYXR0ZXIgaXMgdXNlZCBhcyBhIGhhcmQgbGltaXQgaW4KKyAgIGs3L3Nxcl9iYXNlY2FzZS5hc20uICAqLworCisvKiAxNjAwIE1IeiBBTUQgQm9iY2F0IFphY2F0ZSBFLTM1MCAqLworLyogRkZUIHR1bmluZyBsaW1pdCA9IDY3LDAwMCwwMDAgKi8KKy8qIEdlbmVyYXRlZCBieSB0dW5ldXAuYywgMjAxOS0xMC0xNywgZ2NjIDguMyAqLworCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAxMAorI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNgorI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAxNgorI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICAgICAgMCAgLyogbmV2ZXIgbXBuX21vZF8xc18ycCAqLworI2RlZmluZSBQUkVJTlZfTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAyMQorI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgICAgICAgICAgICAgICAgMSAgLyogbmF0aXZlICovCisjZGVmaW5lIERJVl9RUl8xTl9QSTFfTUVUSE9EICAgICAgICAgICAgICAgICAxICAvKiA1Ny4xNiUgZmFzdGVyIHRoYW4gMiAqLworI2RlZmluZSBESVZfUVJfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgMworI2RlZmluZSBESVZfUVJfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICBNUF9TSVpFX1RfTUFYICAvKiBuZXZlciAqLworI2RlZmluZSBESVZfUVJfMl9QSTJfVEhSRVNIT0xEICAgICAgICAgICBNUF9TSVpFX1RfTUFYICAvKiBuZXZlciAqLworI2RlZmluZSBESVZFWEFDVF8xX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIEJNT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgICAgICAgIDM2CisKKyNkZWZpbmUgRElWXzFfVlNfTVVMXzFfUEVSQ0VOVCAgICAgICAgICAgICAxOTkKKworI2RlZmluZSBNVUxfVE9PTTIyX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyOAorI2RlZmluZSBNVUxfVE9PTTMzX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA5MworI2RlZmluZSBNVUxfVE9PTTQ0X1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE2NgorI2RlZmluZSBNVUxfVE9PTTZIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDI3MAorI2RlZmluZSBNVUxfVE9PTThIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDQ3OAorCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTQzX1RIUkVTSE9MRCAgICAgMTAyCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgMTc3CisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgMTY5CisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTYzX1RIUkVTSE9MRCAgICAgMTEzCisjZGVmaW5lIE1VTF9UT09NNDNfVE9fVE9PTTU0X1RIUkVTSE9MRCAgICAgMTQzCisKKyNkZWZpbmUgU1FSX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAobmF0aXZlKSAqLworI2RlZmluZSBTUVJfVE9PTTJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA1MAorI2RlZmluZSBTUVJfVE9PTTNfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA4OQorI2RlZmluZSBTUVJfVE9PTTRfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDI0OAorI2RlZmluZSBTUVJfVE9PTTZfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDM0MgorI2RlZmluZSBTUVJfVE9PTThfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDQ3MAorCisjZGVmaW5lIE1VTE1JRF9UT09NNDJfVEhSRVNIT0xEICAgICAgICAgICAgIDcyCisKKyNkZWZpbmUgTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgU1FSTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjEKKworI2RlZmluZSBNVUxfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDYzMCAgLyogayA9IDUgKi8KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDYzMCwgNX0sIHsgICAgIDI1LCA2fSwgeyAgICAgMTMsIDV9LCB7ICAgICAyNywgNn0sIFwKKyAgICB7ICAgICAxNSwgNX0sIHsgICAgIDMxLCA2fSwgeyAgICAgMjcsIDd9LCB7ICAgICAxNSwgNn0sIFwKKyAgICB7ICAgICAzMywgN30sIHsgICAgIDE3LCA2fSwgeyAgICAgMzUsIDd9LCB7ICAgICAxOSwgNn0sIFwKKyAgICB7ICAgICAzOSwgN30sIHsgICAgIDIzLCA2fSwgeyAgICAgNDcsIDd9LCB7ICAgICAyOSwgOH0sIFwKKyAgICB7ICAgICAxNSwgN30sIHsgICAgIDM1LCA4fSwgeyAgICAgMTksIDd9LCB7ICAgICA0MSwgOH0sIFwKKyAgICB7ICAgICAyMywgN30sIHsgICAgIDQ5LCA4fSwgeyAgICAgMjcsIDd9LCB7ICAgICA1NSwgOX0sIFwKKyAgICB7ICAgICAxNSwgOH0sIHsgICAgIDMxLCA3fSwgeyAgICAgNjMsIDh9LCB7ICAgICA0MywgOX0sIFwKKyAgICB7ICAgICAyMywgOH0sIHsgICAgIDU1LCA5fSwgeyAgICAgMzEsIDh9LCB7ICAgICA2NywgOX0sIFwKKyAgICB7ICAgICAzOSwgOH0sIHsgICAgIDc5LCA5fSwgeyAgICAgNDcsIDh9LCB7ICAgICA5NSwgOX0sIFwKKyAgICB7ICAgICA1NSwxMH0sIHsgICAgIDMxLCA5fSwgeyAgICAgNzksMTB9LCB7ICAgICA0NywgNn0sIFwKKyAgICB7ICAgIDc2NywgN30sIHsgICAgMzk5LCA2fSwgeyAgICA3OTksIDd9LCB7ICAgIDQxNSwgOH0sIFwKKyAgICB7ICAgIDIzNSwgN30sIHsgICAgNDc5LCA5fSwgeyAgICAxMzUsMTB9LCB7ICAgICA3OSwgOX0sIFwKKyAgICB7ICAgIDE1OSwxMH0sIHsgICAgIDk1LCA5fSwgeyAgICAxOTEsMTF9LCB7ICAgICA2MywxMH0sIFwKKyAgICB7ICAgIDE1OSwxMX0sIHsgICAgIDk1LDEwfSwgeyAgICAxOTEsMTJ9LCB7ICAgICA2MywxMX0sIFwKKyAgICB7ICAgIDEyNywxMH0sIHsgICAgMjU1LCA5fSwgeyAgICA1MTEsMTB9LCB7ICAgIDI3MSwgOX0sIFwKKyAgICB7ICAgIDU0MywxMX0sIHsgICAgMTU5LDEwfSwgeyAgICAzMTksIDl9LCB7ICAgIDYzOSwxMH0sIFwKKyAgICB7ICAgIDMzNSwgOX0sIHsgICAgNjcxLDExfSwgeyAgICAxOTEsMTB9LCB7ICAgIDM4MywgOX0sIFwKKyAgICB7ICAgIDc2NywxMH0sIHsgICAgMzk5LCA5fSwgeyAgICA3OTksMTF9LCB7ICAgIDIyMywxMn0sIFwKKyAgICB7ICAgIDEyNywxMX0sIHsgICAgMjU1LDEwfSwgeyAgICA1NDMsIDl9LCB7ICAgMTA4NywxMX0sIFwKKyAgICB7ICAgIDI4NywxMH0sIHsgICAgNjA3LCA5fSwgeyAgIDEyMTUsMTF9LCB7ICAgIDMxOSwxMH0sIFwKKyAgICB7ICAgIDY3MSwxMX0sIHsgICAgMzUxLDEyfSwgeyAgICAxOTEsMTF9LCB7ICAgIDM4MywxMH0sIFwKKyAgICB7ICAgIDc5OSwxMX0sIHsgICAgNDE1LDEzfSwgeyAgICAxMjcsMTJ9LCB7ICAgIDI1NSwxMX0sIFwKKyAgICB7ICAgIDU0MywxMH0sIHsgICAxMDg3LDExfSwgeyAgICA2MDcsMTB9LCB7ICAgMTIxNSwxMn0sIFwKKyAgICB7ICAgIDMxOSwxMX0sIHsgICAgNjcxLDEwfSwgeyAgIDEzNDMsMTF9LCB7ICAgIDczNSwxMH0sIFwKKyAgICB7ICAgMTQ3MSwxMn0sIHsgICAgMzgzLDExfSwgeyAgICA3OTksMTB9LCB7ICAgMTU5OSwxMX0sIFwKKyAgICB7ICAgIDg2MywxMn0sIHsgICAgNDQ3LDExfSwgeyAgICA5OTEsMTN9LCB7ICAgIDI1NSwxMn0sIFwKKyAgICB7ICAgIDUxMSwxMX0sIHsgICAxMDg3LDEyfSwgeyAgICA1NzUsMTF9LCB7ICAgMTIxNSwxMn0sIFwKKyAgICB7ICAgIDYzOSwxMX0sIHsgICAxMzQzLDEyfSwgeyAgICA3MDMsMTF9LCB7ICAgMTQ3MSwxM30sIFwKKyAgICB7ICAgIDM4MywxMn0sIHsgICAgNzY3LDExfSwgeyAgIDE1OTksMTJ9LCB7ICAgIDgzMSwxMX0sIFwKKyAgICB7ICAgMTcyNywxMn0sIHsgICAgOTU5LDE0fSwgeyAgICAyNTUsMTN9LCB7ICAgIDUxMSwxMn0sIFwKKyAgICB7ICAgMTIxNSwxM30sIHsgICAgNjM5LDEyfSwgeyAgIDE0NzEsMTN9LCB7ICAgIDc2NywxMn0sIFwKKyAgICB7ICAgMTcyNywxM30sIHsgICAgODk1LDEyfSwgeyAgIDE5MTksMTR9LCB7ICAgIDUxMSwxM30sIFwKKyAgICB7ICAgMTAyMywxMn0sIHsgICAyMTExLDEzfSwgeyAgIDExNTEsMTJ9LCB7ICAgMjQzMSwxM30sIFwKKyAgICB7ICAgMTQwNywxNH0sIHsgICAgNzY3LDEzfSwgeyAgIDE2NjMsMTJ9LCB7ICAgMzQ1NSwxM30sIFwKKyAgICB7ICAgMTkxOSwxNX0sIHsgICAgNTExLDE0fSwgeyAgIDEwMjMsMTN9LCB7ICAgMjE3NSwxMn0sIFwKKyAgICB7ICAgNDQ3OSwxM30sIHsgICAyNDMxLDE0fSwgeyAgIDEyNzksMTN9LCB7ICAgMjk0MywxMn0sIFwKKyAgICB7ICAgNTg4NywxNH0sIHsgICAxNTM1LDEzfSwgeyAgIDM0NTUsMTR9LCB7ICAgMTc5MSwxM30sIFwKKyAgICB7ICAgMzk2NywxNX0sIHsgICAxMDIzLDE0fSwgeyAgIDIwNDcsMTN9LCB7ICAgNDQ3OSwxNH0sIFwKKyAgICB7ICAgMjMwMywxM30sIHsgICA0OTkxLDEyfSwgeyAgIDk5ODMsMTR9LCB7ICAgMjgxNSwxM30sIFwKKyAgICB7ICAgNTg4NywxNX0sIHsgICAxNTM1LDE0fSwgeyAgIDM4MzksMTZ9IH0KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTNfU0laRSAxNTkKKyNkZWZpbmUgTVVMX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDc0MjQKKworI2RlZmluZSBTUVJfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDUwMCAgLyogayA9IDUgKi8KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDUwMCwgNX0sIHsgICAgIDI1LCA2fSwgeyAgICAgMTMsIDV9LCB7ICAgICAyNywgNn0sIFwKKyAgICB7ICAgICAyOCwgN30sIHsgICAgIDE1LCA2fSwgeyAgICAgMzIsIDd9LCB7ICAgICAxNywgNn0sIFwKKyAgICB7ICAgICAzNSwgN30sIHsgICAgIDE5LCA2fSwgeyAgICAgMzksIDd9LCB7ICAgICAyMywgNn0sIFwKKyAgICB7ICAgICA0NywgN30sIHsgICAgIDI3LCA4fSwgeyAgICAgMTUsIDd9LCB7ICAgICAzNSwgOH0sIFwKKyAgICB7ICAgICAxOSwgN30sIHsgICAgIDQxLCA4fSwgeyAgICAgMjMsIDd9LCB7ICAgICA0NywgOH0sIFwKKyAgICB7ICAgICAyNywgOX0sIHsgICAgIDE1LCA4fSwgeyAgICAgMzEsIDd9LCB7ICAgICA2MywgOH0sIFwKKyAgICB7ICAgICAzOSwgOX0sIHsgICAgIDIzLCA4fSwgeyAgICAgNTEsIDl9LCB7ICAgICAzMSwgOH0sIFwKKyAgICB7ICAgICA2NywgOX0sIHsgICAgIDM5LCA4fSwgeyAgICAgNzksIDl9LCB7ICAgICA0NywgOH0sIFwKKyAgICB7ICAgICA5NSwgOX0sIHsgICAgIDU1LDEwfSwgeyAgICAgMzEsIDl9LCB7ICAgICA3OSwxMH0sIFwKKyAgICB7ICAgICA0NywgOX0sIHsgICAgIDk1LDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA2MywgOX0sIFwKKyAgICB7ICAgIDEyNywgNn0sIHsgICAxMDg3LCA3fSwgeyAgICA1NzUsIDh9LCB7ICAgIDMwMywgOX0sIFwKKyAgICB7ICAgIDE1OSwxMH0sIHsgICAgIDk1LDExfSwgeyAgICAgNjMsMTB9LCB7ICAgIDEyNywgOX0sIFwKKyAgICB7ICAgIDI1NSwxMH0sIHsgICAgMTQzLCA5fSwgeyAgICAyODcsMTB9LCB7ICAgIDE1OSwxMX0sIFwKKyAgICB7ICAgICA5NSwxMH0sIHsgICAgMTkxLDEyfSwgeyAgICAgNjMsMTF9LCB7ICAgIDEyNywxMH0sIFwKKyAgICB7ICAgIDI1NSwgOX0sIHsgICAgNTExLDEwfSwgeyAgICAyNzEsIDl9LCB7ICAgIDU0MywxMH0sIFwKKyAgICB7ICAgIDI4NywgOX0sIHsgICAgNTc1LDExfSwgeyAgICAxNTksMTB9LCB7ICAgIDMxOSwgOX0sIFwKKyAgICB7ICAgIDYzOSwxMH0sIHsgICAgMzM1LCA5fSwgeyAgICA2NzEsMTB9LCB7ICAgIDM1MSwxMX0sIFwKKyAgICB7ICAgIDE5MSwxMH0sIHsgICAgMzgzLCA5fSwgeyAgICA3NjcsMTB9LCB7ICAgIDM5OSwgOX0sIFwKKyAgICB7ICAgIDc5OSwxMH0sIHsgICAgNDE1LCA5fSwgeyAgICA4MzEsMTJ9LCB7ICAgIDEyNywxMX0sIFwKKyAgICB7ICAgIDI1NSwxMH0sIHsgICAgNTQzLDExfSwgeyAgICAyODcsMTB9LCB7ICAgIDYwNywxMX0sIFwKKyAgICB7ICAgIDMxOSwxMH0sIHsgICAgNjcxLDExfSwgeyAgICAzNTEsMTB9LCB7ICAgIDcwMywxMn0sIFwKKyAgICB7ICAgIDE5MSwxMX0sIHsgICAgMzgzLDEwfSwgeyAgICA3OTksMTF9LCB7ICAgIDQxNSwxMH0sIFwKKyAgICB7ICAgIDgzMSwxM30sIHsgICAgMTI3LDEyfSwgeyAgICAyNTUsMTF9LCB7ICAgIDU0MywxMH0sIFwKKyAgICB7ICAgMTA4NywxMX0sIHsgICAgNjA3LDEyfSwgeyAgICAzMTksMTF9LCB7ICAgIDY3MSwxMH0sIFwKKyAgICB7ICAgMTM0MywxMX0sIHsgICAgNzM1LDEwfSwgeyAgIDE0NzEsMTJ9LCB7ICAgIDM4MywxMX0sIFwKKyAgICB7ICAgIDc5OSwxMH0sIHsgICAxNTk5LDExfSwgeyAgICA4NjMsMTJ9LCB7ICAgIDQ0NywxMX0sIFwKKyAgICB7ICAgIDk1OSwxM30sIHsgICAgMjU1LDEyfSwgeyAgICA1MTEsMTF9LCB7ICAgMTA4NywxMn0sIFwKKyAgICB7ICAgIDU3NSwxMX0sIHsgICAxMjE1LDEyfSwgeyAgICA2MzksMTF9LCB7ICAgMTM0MywxMn0sIFwKKyAgICB7ICAgIDcwMywxMX0sIHsgICAxNDcxLDEzfSwgeyAgICAzODMsMTJ9LCB7ICAgIDc2NywxMX0sIFwKKyAgICB7ICAgMTU5OSwxMn0sIHsgICAgODMxLDExfSwgeyAgIDE3MjcsMTJ9LCB7ICAgIDk1OSwxNH0sIFwKKyAgICB7ICAgIDI1NSwxM30sIHsgICAgNTExLDEyfSwgeyAgIDEyMTUsMTN9LCB7ICAgIDYzOSwxMn0sIFwKKyAgICB7ICAgMTQ3MSwxM30sIHsgICAgNzY3LDEyfSwgeyAgIDE3MjcsMTN9LCB7ICAgIDg5NSwxMn0sIFwKKyAgICB7ICAgMTkxOSwxNH0sIHsgICAgNTExLDEzfSwgeyAgIDEwMjMsMTJ9LCB7ICAgMjExMSwxM30sIFwKKyAgICB7ICAgMTE1MSwxMn0sIHsgICAyNDMxLDEzfSwgeyAgIDE0MDcsMTR9LCB7ICAgIDc2NywxM30sIFwKKyAgICB7ICAgMTY2MywxMn0sIHsgICAzNDU1LDEzfSwgeyAgIDE5MTksMTV9LCB7ICAgIDUxMSwxNH0sIFwKKyAgICB7ICAgMTAyMywxM30sIHsgICAyMTc1LDEyfSwgeyAgIDQ0NzksMTN9LCB7ICAgMjQzMSwxNH0sIFwKKyAgICB7ICAgMTI3OSwxM30sIHsgICAyOTQzLDEyfSwgeyAgIDU4ODcsMTR9LCB7ICAgMTUzNSwxM30sIFwKKyAgICB7ICAgMzQ1NSwxNH0sIHsgICAxNzkxLDEzfSwgeyAgIDM4MzksMTV9LCB7ICAgMTAyMywxNH0sIFwKKyAgICB7ICAgMjA0NywxM30sIHsgICA0NDc5LDE0fSwgeyAgIDIzMDMsMTN9LCB7ICAgNDk5MSwxMn0sIFwKKyAgICB7ICAgOTk4MywxNH0sIHsgICAyODE1LDEzfSwgeyAgIDU4ODcsMTV9LCB7ICAgMTUzNSwxNH0sIFwKKyAgICB7ICAgMzgzOSwxNn0gfQorI2RlZmluZSBTUVJfRkZUX1RBQkxFM19TSVpFIDE2MQorI2RlZmluZSBTUVJfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNTc2MAorCisjZGVmaW5lIE1VTExPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICA5CisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDQ4CisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgIDE0MjgxCisjZGVmaW5lIFNRUkxPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICA3CisjZGVmaW5lIFNRUkxPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTQ2CisjZGVmaW5lIFNRUkxPX1NRUl9USFJFU0hPTEQgICAgICAgICAgICAgIDExMjc4CisKKyNkZWZpbmUgRENfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNzcKKyNkZWZpbmUgRENfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAyNDAKKyNkZWZpbmUgRENfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgODMKKyNkZWZpbmUgRENfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxODIKKworI2RlZmluZSBJTlZfTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICA3NAorI2RlZmluZSBJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDI1MgorI2RlZmluZSBJTlZfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDI1MgorCisjZGVmaW5lIEJJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgMjUyCisjZGVmaW5lIFJFRENfMV9UT19SRURDX05fVEhSRVNIT0xEICAgICAgICAgIDc5CisKKyNkZWZpbmUgTVVfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE3ODcKKyNkZWZpbmUgTVVfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgIDE3MTgKKyNkZWZpbmUgTVVQSV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAxMjIKKyNkZWZpbmUgTVVfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgIDE0NzAKKyNkZWZpbmUgTVVfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE3MTMKKworI2RlZmluZSBQT1dNX1NFQ19UQUJMRSAgMSwxNiw5Niw1NjMsMTMxNywxODY3CisKKyNkZWZpbmUgR0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICAgMzIKKyNkZWZpbmUgU0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAyNTQKKyNkZWZpbmUgU0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICA5MDcKKworI2RlZmluZSBGQUNfRFNDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDIyNAorI2RlZmluZSBGQUNfT0REX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICA1NQorCisjZGVmaW5lIE1BVFJJWDIyX1NUUkFTU0VOX1RIUkVTSE9MRCAgICAgICAgIDIzCisjZGVmaW5lIEhHQ0QyX0RJVjFfTUVUSE9EICAgICAgICAgICAgICAgICAgICAzICAvKiAzLjU5JSBmYXN0ZXIgdGhhbiA1ICovCisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAgIDg1CisjZGVmaW5lIEhHQ0RfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTUyCisjZGVmaW5lIEhHQ0RfUkVEVUNFX1RIUkVTSE9MRCAgICAgICAgICAgICAzMzg5CisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgNTMxCisjZGVmaW5lIEdDREVYVF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMzg2CisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAgICAzICAvKiAwLjkyJSBmYXN0ZXIgdGhhbiAxICovCisKKy8qIFR1bmV1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCB0b29rIDE1OTk0NiBzZWNvbmRzICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9idDIvZ21wLW1wYXJhbS5oIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYnQyL2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTM2Y2I3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvYnQyL2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDIxNCBAQAorLyogeDg2L2JvYmNhdCBnbXAtbXBhcmFtLmggLS0gQ29tcGlsZXIvbWFjaGluZSBwYXJhbWV0ZXIgaGVhZGVyIGZpbGUuCisKK0NvcHlyaWdodCAyMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgMzIKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgNAorCisvKiBOT1RFOiBJbiBhIGZhdCBiaW5hcnkgYnVpbGQgU1FSX1RPT00yX1RIUkVTSE9MRCBoZXJlIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4KKyAgIHRoZSB2YWx1ZSBpbiBtcG4veDg2L2s3L2dtcC1tcGFyYW0uaC4gIFRoZSBsYXR0ZXIgaXMgdXNlZCBhcyBhIGhhcmQgbGltaXQgaW4KKyAgIGs3L3Nxcl9iYXNlY2FzZS5hc20uICAqLworCisvKiAyMDUwIE1IeiBBTUQgSmFndWFyL0thYmluaSAqLworLyogRkZUIHR1bmluZyBsaW1pdCA9IDY3LDAwMCwwMDAgKi8KKy8qIEdlbmVyYXRlZCBieSB0dW5ldXAuYywgMjAxOS0xMC0yNCwgZ2NjIDguMyAqLworCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIE1PRF8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICA2CisjZGVmaW5lIE1PRF8xTl9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA0CisjZGVmaW5lIE1PRF8xVV9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA0CisjZGVmaW5lIE1PRF8xXzFfVE9fTU9EXzFfMl9USFJFU0hPTEQgICAgICAgIDE4CisjZGVmaW5lIE1PRF8xXzJfVE9fTU9EXzFfNF9USFJFU0hPTEQgICAgICAgICAwICAvKiBuZXZlciBtcG5fbW9kXzFzXzJwICovCisjZGVmaW5lIFBSRUlOVl9NT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgICA5CisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAgICAxICAvKiBuYXRpdmUgKi8KKyNkZWZpbmUgRElWX1FSXzFOX1BJMV9NRVRIT0QgICAgICAgICAgICAgICAgIDEgIC8qIDQ3LjUzJSBmYXN0ZXIgdGhhbiAyICovCisjZGVmaW5lIERJVl9RUl8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVl9RUl8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVl9RUl8yX1BJMl9USFJFU0hPTEQgICAgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgICAgICAgMjcKKworI2RlZmluZSBESVZfMV9WU19NVUxfMV9QRVJDRU5UICAgICAgICAgICAgIDI0MworCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDkwCisjZGVmaW5lIE1VTF9UT09NNDRfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTU0CisjZGVmaW5lIE1VTF9UT09NNkhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjg2CisjZGVmaW5lIE1VTF9UT09NOEhfVEhSRVNIT0xEICAgICAgICAgICAgICAgNDc4CisKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNDNfVEhSRVNIT0xEICAgICAgOTcKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxNTIKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxMDMKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNjNfVEhSRVNIT0xEICAgICAxMTMKKyNkZWZpbmUgTVVMX1RPT000M19UT19UT09NNTRfVEhSRVNIT0xEICAgICAxNTQKKworI2RlZmluZSBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDM4CisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTI2CisjZGVmaW5lIFNRUl9UT09NNF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjIwCisjZGVmaW5lIFNRUl9UT09NNl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMzE4CisjZGVmaW5lIFNRUl9UT09NOF9USFJFU0hPTEQgICAgICAgICAgICAgICAgNTAyCisKKyNkZWZpbmUgTVVMTUlEX1RPT000Ml9USFJFU0hPTEQgICAgICAgICAgICAgNjgKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxOQorI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAyNQorCisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgNTcwICAvKiBrID0gNSAqLworI2RlZmluZSBNVUxfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgNTcwLCA1fSwgeyAgICAgMjUsIDZ9LCB7ICAgICAxMywgNX0sIHsgICAgIDI3LCA2fSwgXAorICAgIHsgICAgIDE1LCA1fSwgeyAgICAgMzEsIDZ9LCB7ICAgICAyOCwgN30sIHsgICAgIDE1LCA2fSwgXAorICAgIHsgICAgIDMzLCA3fSwgeyAgICAgMTcsIDZ9LCB7ICAgICAzNSwgN30sIHsgICAgIDE5LCA2fSwgXAorICAgIHsgICAgIDM5LCA3fSwgeyAgICAgMjMsIDZ9LCB7ICAgICA0NywgN30sIHsgICAgIDI3LCA4fSwgXAorICAgIHsgICAgIDE1LCA3fSwgeyAgICAgMzUsIDh9LCB7ICAgICAxOSwgN30sIHsgICAgIDQxLCA4fSwgXAorICAgIHsgICAgIDIzLCA3fSwgeyAgICAgNDksIDh9LCB7ICAgICAzMSwgN30sIHsgICAgIDYzLCA4fSwgXAorICAgIHsgICAgIDM5LCA5fSwgeyAgICAgMjMsIDh9LCB7ICAgICA1NSwgOX0sIHsgICAgIDMxLCA4fSwgXAorICAgIHsgICAgIDY3LCA5fSwgeyAgICAgMzksIDh9LCB7ICAgICA3OSwgOX0sIHsgICAgIDQ3LCA4fSwgXAorICAgIHsgICAgIDk1LCA5fSwgeyAgICAgNTUsMTB9LCB7ICAgICAzMSwgOX0sIHsgICAgIDc5LDEwfSwgXAorICAgIHsgICAgIDQ3LCA5fSwgeyAgICAgOTUsMTF9LCB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA5fSwgXAorICAgIHsgICAgMTM1LDEwfSwgeyAgICAgNzksIDl9LCB7ICAgIDE1OSwxMH0sIHsgICAgIDk1LDExfSwgXAorICAgIHsgICAgIDYzLDEwfSwgeyAgICAxNTksMTF9LCB7ICAgICA5NSwxMH0sIHsgICAgMTkxLDEyfSwgXAorICAgIHsgICAgIDYzLDExfSwgeyAgICAxMjcsMTB9LCB7ICAgIDI1NSwgOX0sIHsgICAgNTExLDEwfSwgXAorICAgIHsgICAgMjcxLCA5fSwgeyAgICA1NDMsMTB9LCB7ICAgIDI4NywxMX0sIHsgICAgMTU5LDEwfSwgXAorICAgIHsgICAgMzE5LCA5fSwgeyAgICA2MzksMTB9LCB7ICAgIDMzNSwgOX0sIHsgICAgNjcxLDExfSwgXAorICAgIHsgICAgMTkxLDEwfSwgeyAgICAzODMsIDl9LCB7ICAgIDc2NywxMH0sIHsgICAgMzk5LCA5fSwgXAorICAgIHsgICAgNzk5LDEwfSwgeyAgICA0MTUsMTF9LCB7ICAgIDIyMywxMn0sIHsgICAgMTI3LDExfSwgXAorICAgIHsgICAgMjU1LDEwfSwgeyAgICA1NDMsMTF9LCB7ICAgIDI4NywxMH0sIHsgICAgNjA3LCA5fSwgXAorICAgIHsgICAxMjE1LDExfSwgeyAgICAzMTksMTB9LCB7ICAgIDY3MSwxMX0sIHsgICAgMzUxLDEyfSwgXAorICAgIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTB9LCB7ICAgIDc5OSwxMX0sIHsgICAgNDE1LDEzfSwgXAorICAgIHsgICAgMTI3LDEyfSwgeyAgICAyNTUsMTF9LCB7ICAgIDU0MywxMH0sIHsgICAxMDg3LDExfSwgXAorICAgIHsgICAgNjA3LDEwfSwgeyAgIDEyMTUsMTJ9LCB7ICAgIDMxOSwxMX0sIHsgICAgNjcxLDEwfSwgXAorICAgIHsgICAxMzQzLDExfSwgeyAgICA3MzUsMTB9LCB7ICAgMTQ3MSwxMn0sIHsgICAgMzgzLDExfSwgXAorICAgIHsgICAgNzk5LDEwfSwgeyAgIDE1OTksMTF9LCB7ICAgIDg2MywxMn0sIHsgICAgNDQ3LDExfSwgXAorICAgIHsgICAgOTkxLDEzfSwgeyAgICAyNTUsMTJ9LCB7ICAgIDUxMSwxMX0sIHsgICAxMDg3LDEyfSwgXAorICAgIHsgICAgNTc1LDExfSwgeyAgIDEyMTUsMTJ9LCB7ICAgIDYzOSwxMX0sIHsgICAxMzQzLDEyfSwgXAorICAgIHsgICAgNzAzLDExfSwgeyAgIDE0NzEsMTN9LCB7ICAgIDM4MywxMn0sIHsgICAgNzY3LDExfSwgXAorICAgIHsgICAxNTk5LDEyfSwgeyAgICA4MzEsMTF9LCB7ICAgMTcyNywxMn0sIHsgICAgOTU5LDE0fSwgXAorICAgIHsgICAgMjU1LDEzfSwgeyAgICA1MTEsMTJ9LCB7ICAgMTIxNSwxM30sIHsgICAgNjM5LDEyfSwgXAorICAgIHsgICAxNDcxLDEzfSwgeyAgICA3NjcsMTJ9LCB7ICAgMTcyNywxM30sIHsgICAgODk1LDEyfSwgXAorICAgIHsgICAxOTE5LDE0fSwgeyAgICA1MTEsMTN9LCB7ICAgMTAyMywxMn0sIHsgICAyMTExLDEzfSwgXAorICAgIHsgICAxMTUxLDEyfSwgeyAgIDI0MzEsMTN9LCB7ICAgMTQwNywxNH0sIHsgICAgNzY3LDEzfSwgXAorICAgIHsgICAxNjYzLDEyfSwgeyAgIDM0NTUsMTN9LCB7ICAgMTkxOSwxNX0sIHsgICAgNTExLDE0fSwgXAorICAgIHsgICAxMDIzLDEzfSwgeyAgIDIxNzUsMTJ9LCB7ICAgNDQ3OSwxM30sIHsgICAyNDMxLDE0fSwgXAorICAgIHsgICAxMjc5LDEzfSwgeyAgIDI5NDMsMTJ9LCB7ICAgNTg4NywxNH0sIHsgICAxNTM1LDEzfSwgXAorICAgIHsgICAzNDU1LDE0fSwgeyAgIDE3OTEsMTN9LCB7ICAgMzk2NywxNX0sIHsgICAxMDIzLDE0fSwgXAorICAgIHsgICAyMDQ3LDEzfSwgeyAgIDQ0NzksMTR9LCB7ICAgMjMwMywxM30sIHsgICA0OTkxLDEyfSwgXAorICAgIHsgICA5OTgzLDE0fSwgeyAgIDI4MTUsMTN9LCB7ICAgNTg4NywxNX0sIHsgICAxNTM1LDE0fSwgXAorICAgIHsgICAzODM5LDE2fSB9CisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzX1NJWkUgMTUzCisjZGVmaW5lIE1VTF9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA1NzYwCisKKyNkZWZpbmUgU1FSX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICA1MzAgIC8qIGsgPSA1ICovCisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICA1MzAsIDV9LCB7ICAgICAyNywgNn0sIHsgICAgIDE1LCA1fSwgeyAgICAgMzEsIDZ9LCBcCisgICAgeyAgICAgMjgsIDd9LCB7ICAgICAxNSwgNn0sIHsgICAgIDMzLCA3fSwgeyAgICAgMTcsIDZ9LCBcCisgICAgeyAgICAgMzUsIDd9LCB7ICAgICAxOSwgNn0sIHsgICAgIDM5LCA3fSwgeyAgICAgMjMsIDZ9LCBcCisgICAgeyAgICAgNDcsIDd9LCB7ICAgICAyOSwgOH0sIHsgICAgIDE1LCA3fSwgeyAgICAgMzUsIDh9LCBcCisgICAgeyAgICAgMTksIDd9LCB7ICAgICA0MSwgOH0sIHsgICAgIDIzLCA3fSwgeyAgICAgNDksIDh9LCBcCisgICAgeyAgICAgMzEsIDd9LCB7ICAgICA2MywgOH0sIHsgICAgIDM5LCA5fSwgeyAgICAgMjMsIDh9LCBcCisgICAgeyAgICAgNTUsIDl9LCB7ICAgICAzMSwgOH0sIHsgICAgIDY3LCA5fSwgeyAgICAgMzksIDh9LCBcCisgICAgeyAgICAgNzksIDl9LCB7ICAgICA0NywgOH0sIHsgICAgIDk1LCA5fSwgeyAgICAgNTUsMTB9LCBcCisgICAgeyAgICAgMzEsIDl9LCB7ICAgICA3OSwxMH0sIHsgICAgIDQ3LCA5fSwgeyAgICAgOTUsMTF9LCBcCisgICAgeyAgICAgMzEsMTB9LCB7ICAgICA2MywgOX0sIHsgICAgMTM1LDEwfSwgeyAgICAgOTUsMTF9LCBcCisgICAgeyAgICAgNjMsMTB9LCB7ICAgIDE0MywgOX0sIHsgICAgMjg3LDEwfSwgeyAgICAxNTksMTF9LCBcCisgICAgeyAgICAgOTUsMTJ9LCB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgeyAgICAyNTUsIDl9LCBcCisgICAgeyAgICA1MTEsMTB9LCB7ICAgIDI3MSwgOX0sIHsgICAgNTQzLDEwfSwgeyAgICAyODcsMTF9LCBcCisgICAgeyAgICAxNTksMTB9LCB7ICAgIDMxOSwgOX0sIHsgICAgNjM5LDEwfSwgeyAgICAzMzUsIDl9LCBcCisgICAgeyAgICA2NzEsMTB9LCB7ICAgIDM1MSwxMX0sIHsgICAgMTkxLDEwfSwgeyAgICAzODMsIDl9LCBcCisgICAgeyAgICA3NjcsMTB9LCB7ICAgIDM5OSwgOX0sIHsgICAgNzk5LDEyfSwgeyAgICAxMjcsMTF9LCBcCisgICAgeyAgICAyNTUsMTB9LCB7ICAgIDU0MywxMX0sIHsgICAgMjg3LDEwfSwgeyAgICA2MDcsIDl9LCBcCisgICAgeyAgIDEyMTUsMTF9LCB7ICAgIDMxOSwxMH0sIHsgICAgNjcxLDExfSwgeyAgICAzNTEsMTJ9LCBcCisgICAgeyAgICAxOTEsMTF9LCB7ICAgIDM4MywxMH0sIHsgICAgNzk5LDExfSwgeyAgICA0MTUsMTB9LCBcCisgICAgeyAgICA4MzEsMTN9LCB7ICAgIDEyNywxMn0sIHsgICAgMjU1LDExfSwgeyAgICA1NDMsMTB9LCBcCisgICAgeyAgIDEwODcsMTF9LCB7ICAgIDYwNywxMH0sIHsgICAxMjE1LDEyfSwgeyAgICAzMTksMTF9LCBcCisgICAgeyAgICA2NzEsMTB9LCB7ICAgMTM0MywxMX0sIHsgICAgNzM1LDEwfSwgeyAgIDE0NzEsMTJ9LCBcCisgICAgeyAgICAzODMsMTF9LCB7ICAgIDc5OSwxMH0sIHsgICAxNTk5LDExfSwgeyAgICA4NjMsMTJ9LCBcCisgICAgeyAgICA0NDcsMTF9LCB7ICAgIDk5MSwxM30sIHsgICAgMjU1LDEyfSwgeyAgICA1MTEsMTF9LCBcCisgICAgeyAgIDEwODcsMTJ9LCB7ICAgIDU3NSwxMX0sIHsgICAxMjE1LDEyfSwgeyAgICA2MzksMTF9LCBcCisgICAgeyAgIDEzNDMsMTJ9LCB7ICAgIDcwMywxMX0sIHsgICAxNDcxLDEzfSwgeyAgICAzODMsMTJ9LCBcCisgICAgeyAgICA3NjcsMTF9LCB7ICAgMTU5OSwxMn0sIHsgICAgODMxLDExfSwgeyAgIDE3MjcsMTJ9LCBcCisgICAgeyAgICA5NTksMTF9LCB7ICAgMTkxOSwxNH0sIHsgICAgMjU1LDEzfSwgeyAgICA1MTEsMTJ9LCBcCisgICAgeyAgIDEyMTUsMTN9LCB7ICAgIDYzOSwxMn0sIHsgICAxNDcxLDEzfSwgeyAgICA3NjcsMTJ9LCBcCisgICAgeyAgIDE3MjcsMTN9LCB7ICAgIDg5NSwxMn0sIHsgICAxOTE5LDE0fSwgeyAgICA1MTEsMTN9LCBcCisgICAgeyAgIDEwMjMsMTJ9LCB7ICAgMjExMSwxM30sIHsgICAxMTUxLDEyfSwgeyAgIDI0OTUsMTN9LCBcCisgICAgeyAgIDE0MDcsMTR9LCB7ICAgIDc2NywxM30sIHsgICAxNjYzLDEyfSwgeyAgIDM0NTUsMTN9LCBcCisgICAgeyAgIDE5MTksMTV9LCB7ICAgIDUxMSwxNH0sIHsgICAxMDIzLDEzfSwgeyAgIDIxNzUsMTJ9LCBcCisgICAgeyAgIDQ0NzksMTN9LCB7ICAgMjQzMSwxNH0sIHsgICAxMjc5LDEzfSwgeyAgIDI5NDMsMTJ9LCBcCisgICAgeyAgIDU4ODcsMTR9LCB7ICAgMTUzNSwxM30sIHsgICAzNDU1LDE0fSwgeyAgIDE3OTEsMTN9LCBcCisgICAgeyAgIDM5NjcsMTV9LCB7ICAgMTAyMywxNH0sIHsgICAyMDQ3LDEzfSwgeyAgIDQ0NzksMTR9LCBcCisgICAgeyAgIDIzMDMsMTN9LCB7ICAgNDk5MSwxMn0sIHsgICA5OTgzLDE0fSwgeyAgIDI4MTUsMTN9LCBcCisgICAgeyAgIDU4ODcsMTV9LCB7ICAgMTUzNSwxNH0sIHsgICAzODM5LDE2fSB9CisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzX1NJWkUgMTUxCisjZGVmaW5lIFNRUl9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA0NzM2CisKKyNkZWZpbmUgTVVMTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDgKKyNkZWZpbmUgTVVMTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgNDQKKyNkZWZpbmUgTVVMTE9fTVVMX05fVEhSRVNIT0xEICAgICAgICAgICAgMTEyNzgKKyNkZWZpbmUgU1FSTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgMTMKKyNkZWZpbmUgU1FSTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgNjIKKyNkZWZpbmUgU1FSTE9fU1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDg5MDcKKworI2RlZmluZSBEQ19ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA3OQorI2RlZmluZSBEQ19ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgIDIyOAorI2RlZmluZSBEQ19CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA3NQorI2RlZmluZSBEQ19CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDEzNgorCisjZGVmaW5lIElOVl9NVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgIDkwCisjZGVmaW5lIElOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAgMjYwCisjZGVmaW5lIElOVl9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMjM2CisKKyNkZWZpbmUgQklOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAyOTQKKyNkZWZpbmUgUkVEQ18xX1RPX1JFRENfTl9USFJFU0hPTEQgICAgICAgICAgODAKKworI2RlZmluZSBNVV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTc4NworI2RlZmluZSBNVV9ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgMTcxOAorI2RlZmluZSBNVVBJX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgIDExOAorI2RlZmluZSBNVV9CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTQ0MgorI2RlZmluZSBNVV9CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTY1MgorCisjZGVmaW5lIFBPV01fU0VDX1RBQkxFICAxLDE2LDk2LDYxNSw4NjUsMTQ0MgorCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgIDI3CisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjUyCisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgNjM4CisKKyNkZWZpbmUgRkFDX0RTQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAxNDEKKyNkZWZpbmUgRkFDX09ERF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgMzkKKworI2RlZmluZSBNQVRSSVgyMl9TVFJBU1NFTl9USFJFU0hPTEQgICAgICAgICAxOQorI2RlZmluZSBIR0NEMl9ESVYxX01FVEhPRCAgICAgICAgICAgICAgICAgICAgMSAgLyogMTMuNjUlIGZhc3RlciB0aGFuIDMgKi8KKyNkZWZpbmUgSEdDRF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgICAgODEKKyNkZWZpbmUgSEdDRF9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNjYKKyNkZWZpbmUgSEdDRF9SRURVQ0VfVEhSRVNIT0xEICAgICAgICAgICAgIDMzODkKKyNkZWZpbmUgR0NEX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICA1MzEKKyNkZWZpbmUgR0NERVhUX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzNDUKKyNkZWZpbmUgSkFDT0JJX0JBU0VfTUVUSE9EICAgICAgICAgICAgICAgICAgIDEgIC8qIDAuODQlIGZhc3RlciB0aGFuIDQgKi8KKworLyogVHVuZXVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIHRvb2sgMTAzODE4IHNlY29uZHMgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2NuZF9hb3JzX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvY25kX2FvcnNfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRmNDkxNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2NuZF9hb3JzX24uYXNtCkBAIC0wLDAgKzEsMTI0IEBACitkbmwgIFg4NiBtcG5fY25kX2FkZF9uLCBtcG5fY25kX3N1Yl9uCisKK2RubCAgQ29weXJpZ2h0IDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkJCSAgICBjeWNsZXMvbGltYgorQyBQNQkJCQkgPworQyBQNiBtb2RlbCAwLTgsMTAtMTIJCSA/CitDIFA2IG1vZGVsIDkgICAoQmFuaWFzKQkJID8KK0MgUDYgbW9kZWwgMTMgIChEb3RoYW4pCQkgNS40CitDIFA0IG1vZGVsIDAtMSAoV2lsbGFtZXR0ZSkJID8KK0MgUDQgbW9kZWwgMiAgIChOb3J0aHdvb2QpCTE0LjUKK0MgUDQgbW9kZWwgMy00IChQcmVzY290dCkJMjEKK0MgSW50ZWwgYXRvbQkJCTExCitDIEFNRCBLNgkJCSA/CitDIEFNRCBLNwkJCSAzLjQKK0MgQU1EIEs4CQkJID8KKworCitkZWZpbmUoYHJwJywgIGAlZWRpJykKK2RlZmluZShgdXAnLCAgYCVlc2knKQorZGVmaW5lKGB2cCcsICBgJWVicCcpCitkZWZpbmUoYG4nLCAgIGAlZWN4JykKK2RlZmluZShgY25kJywgYDIwKCVlc3ApJykKK2RlZmluZShgY3knLCAgYCVlZHgnKQorCitpZmRlZihgT1BFUkFUSU9OX2NuZF9hZGRfbicsIGAKKwlkZWZpbmUoQUREU1VCLAkgICAgICBhZGQpCisJZGVmaW5lKEFEQ1NCQiwJICAgICAgYWRjKQorCWRlZmluZShmdW5jLAkgICAgICBtcG5fY25kX2FkZF9uKScpCitpZmRlZihgT1BFUkFUSU9OX2NuZF9zdWJfbicsIGAKKwlkZWZpbmUoQUREU1VCLAkgICAgICBzdWIpCisJZGVmaW5lKEFEQ1NCQiwJICAgICAgc2JiKQorCWRlZmluZShmdW5jLAkgICAgICBtcG5fY25kX3N1Yl9uKScpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2NuZF9hZGRfbiBtcG5fY25kX3N1Yl9uKQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigxNikKK1BST0xPR1VFKGZ1bmMpCisJYWRkCSQtMTYsICVlc3AKKwltb3YJJWVicCwgKCVlc3ApCisJbW92CSVlYngsIDQoJWVzcCkKKwltb3YJJWVzaSwgOCglZXNwKQorCW1vdgklZWRpLCAxMiglZXNwKQorCisJQyBtYWtlIGNuZCBpbnRvIGEgZnVsbCBtYXNrCisJbW92CWNuZCwgJWVheAorCW5lZwklZWF4CisJc2JiCSVlYXgsICVlYXgKKwltb3YJJWVheCwgY25kCisKKwlDIGxvYWQgcGFyYW1ldGVycyBpbnRvIHJlZ2lzdGVycworCW1vdgkyNCglZXNwKSwgcnAKKwltb3YJMjgoJWVzcCksIHVwCisJbW92CTMyKCVlc3ApLCB2cAorCW1vdgkzNiglZXNwKSwgbgorCisJbW92CSh2cCksICVlYXgKKwltb3YJKHVwKSwgJWVieAorCisJQyBwdXQgb3BlcmFuZCBwb2ludGVycyBqdXN0IGJleW9uZCB0aGVpciBsYXN0IGxpbWIKKwlsZWEJKHZwLG4sNCksIHZwCisJbGVhCSh1cCxuLDQpLCB1cAorCWxlYQktNChycCxuLDQpLCBycAorCW5lZwluCisKKwlhbmQJY25kLCAlZWF4CisJQUREU1VCCSVlYXgsICVlYngKKwlzYmIJY3ksIGN5CisJaW5jCW4KKwlqZQlMKGVuZCkKKworCUFMSUdOKDE2KQorTCh0b3ApOgltb3YJKHZwLG4sNCksICVlYXgKKwlhbmQJY25kLCAlZWF4CisJbW92CSVlYngsIChycCxuLDQpCisJbW92CSh1cCxuLDQpLCAlZWJ4CisJYWRkCWN5LCBjeQorCUFEQ1NCQgklZWF4LCAlZWJ4CisJc2JiCWN5LCBjeQorCWluYwluCisJam5lCUwodG9wKQorCitMKGVuZCk6CW1vdgklZWJ4LCAocnApCisJeG9yCSVlYXgsICVlYXgKKwlzdWIJY3ksICVlYXgKKworCW1vdgkoJWVzcCksICVlYnAKKwltb3YJNCglZXNwKSwgJWVieAorCW1vdgk4KCVlc3ApLCAlZXNpCisJbW92CTEyKCVlc3ApLCAlZWRpCisJYWRkCSQxNiwgJWVzcAorCXJldAorRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9jb3B5ZC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9jb3B5ZC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFmYTE5NQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2NvcHlkLmFzbQpAQCAtMCwwICsxLDkxIEBACitkbmwgIHg4NiBtcG5fY29weWQgLS0gY29weSBsaW1iIHZlY3RvciwgZGVjcmVtZW50aW5nLgorCitkbmwgIENvcHlyaWdodCAxOTk5LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDICAgICBjeWNsZXMvbGltYiAgc3RhcnR1cCAoYXBwcm94KQorQyBQNQkgIDEuMAkgICAgICA0MAorQyBQNgkgIDIuNAkgICAgICA3MAorQyBLNgkgIDEuMAkgICAgICA1NQorQyBLNwkgIDEuMwkgICAgICA3NQorQyBQNAkgIDIuNgkgICAgIDE3NQorQworQyAoU3RhcnR1cCB0aW1lIGluY2x1ZGVzIHNvbWUgZnVuY3Rpb24gY2FsbCBvdmVyaGVhZHMuKQorCisKK0Mgdm9pZCBtcG5fY29weWQgKG1wX3B0ciBkc3QsIG1wX3NyY3B0ciBzcmMsIG1wX3NpemVfdCBzaXplKTsKK0MKK0MgQ29weSBzcmMsc2l6ZSB0byBkc3Qsc2l6ZSwgd29ya2luZyBmcm9tIGhpZ2ggdG8gbG93IGFkZHJlc3Nlcy4KK0MKK0MgVGhlIGNvZGUgaGVyZSBpcyB2ZXJ5IGdlbmVyaWMgYW5kIGNhbiBiZSBleHBlY3RlZCB0byBiZSByZWFzb25hYmxlIG9uIGFsbAorQyB0aGUgeDg2IGZhbWlseS4KKworZGVmZnJhbWUoUEFSQU1fU0laRSwxMikKK2RlZmZyYW1lKFBBUkFNX1NSQywgOCkKK2RlZmZyYW1lKFBBUkFNX0RTVCwgNCkKK2RlZmxpdChgRlJBTUUnLDApCisKKwlURVhUCisJQUxJR04oMzIpCisKK1BST0xPR1VFKG1wbl9jb3B5ZCkKKwlDIGVheAlzYXZlZCBlc2kKKwlDIGVieAorCUMgZWN4CWNvdW50ZXIKKwlDIGVkeAlzYXZlZCBlZGkKKwlDIGVzaQlzcmMKKwlDIGVkaQlkc3QKKwlDIGVicAorCisJbW92bAlQQVJBTV9TSVpFLCAlZWN4CisJbW92bAklZXNpLCAlZWF4CisKKwltb3ZsCVBBUkFNX1NSQywgJWVzaQorCW1vdmwJJWVkaSwgJWVkeAorCisJbW92bAlQQVJBTV9EU1QsICVlZGkKKwlsZWFsCS00KCVlc2ksJWVjeCw0KSwgJWVzaQorCisJbGVhbAktNCglZWRpLCVlY3gsNCksICVlZGkKKworCXN0ZAorCisJcmVwCisJbW92c2wKKworCWNsZAorCisJbW92bAklZWF4LCAlZXNpCisJbW92bAklZWR4LCAlZWRpCisKKwlyZXQKKworRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvY29weWkuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvY29weWkuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2YjAzNTQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9jb3B5aS5hc20KQEAgLTAsMCArMSw5OSBAQAorZG5sICB4ODYgbXBuX2NvcHlpIC0tIGNvcHkgbGltYiB2ZWN0b3IsIGluY3JlbWVudGluZy4KKworZG5sICBDb3B5cmlnaHQgMTk5OS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQyAgICAgY3ljbGVzL2xpbWIgIHN0YXJ0dXAgKGFwcHJveCkKK0MgUDUJICAxLjAJICAgICAgMzUKK0MgUDYJICAwLjc1CSAgICAgIDQ1CitDIEs2CSAgMS4wCSAgICAgIDMwCitDIEs3CSAgMS4zCSAgICAgIDY1CitDIFA0CSAgMS4wCSAgICAgMTIwCitDCitDIChTdGFydHVwIHRpbWUgaW5jbHVkZXMgc29tZSBmdW5jdGlvbiBjYWxsIG92ZXJoZWFkcy4pCisKKworQyB2b2lkIG1wbl9jb3B5aSAobXBfcHRyIGRzdCwgbXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUpOworQworQyBDb3B5IHNyYyxzaXplIHRvIGRzdCxzaXplLCB3b3JraW5nIGZyb20gbG93IHRvIGhpZ2ggYWRkcmVzc2VzLgorQworQyBUaGUgY29kZSBoZXJlIGlzIHZlcnkgZ2VuZXJpYyBhbmQgY2FuIGJlIGV4cGVjdGVkIHRvIGJlIHJlYXNvbmFibGUgb24gYWxsCitDIHRoZSB4ODYgZmFtaWx5LgorQworQyBQNiAtICBBbiBNTVggYmFzZWQgY29weSB3YXMgdHJpZWQsIGJ1dCB3YXMgZm91bmQgdG8gYmUgc2xvd2VyIHRoYW4gYSByZXAKK0MgICAgICAgbW92cyBpbiBhbGwgY2FzZXMuICBUaGUgZmFzdGVzdCBNTVggZm91bmQgd2FzIDAuOCBjeWNsZXMvbGltYiAod2hlbgorQyAgICAgICBmdWxseSBhbGlnbmVkKS4gIEEgcmVwIG1vdnMgc2VlbXMgdG8gaGF2ZSBhIHN0YXJ0dXAgdGltZSBvZiBhYm91dCAxNQorQyAgICAgICBjeWNsZXMsIGJ1dCBkb2luZyBzb21ldGhpbmcgc3BlY2lhbCBmb3Igc21hbGwgc2l6ZXMgY291bGQgbGVhZCB0byBhCitDICAgICAgIGJyYW5jaCBtaXNwcmVkaWN0aW9uIHRoYXQgd291bGQgZGVzdHJveSBhbnkgc2F2aW5nLiAgRm9yIG5vdyBhIHBsYWluCitDICAgICAgIHJlcCBtb3ZzIHNlZW1zIG9rLgorQworQyBLNjIgLSBXZSB1c2VkIHRvIGhhdmUgYSBiaWcgY2h1bmsgb2YgY29kZSBkb2luZyBhbiBNTVggY29weSBhdCAwLjU2IGMvbCBpZgorQyAgICAgICBhbGlnbmVkIG9yIGEgMS4wIHJlcCBtb3ZzIGlmIG5vdC4gIEJ1dCB0aGF0IHNlZW1lZCBleGNlc3NpdmUgc2luY2UKK0MgICAgICAgaXQgb25seSBnb3QgYW4gYWR2YW50YWdlIGhhbGYgdGhlIHRpbWUsIGFuZCBldmVuIHRoZW4gb25seSBzaG93ZWQgaXQKK0MgICAgICAgYWJvdmUgNTAgbGltYnMgb3Igc28uCisKK2RlZmZyYW1lKFBBUkFNX1NJWkUsMTIpCitkZWZmcmFtZShQQVJBTV9TUkMsIDgpCitkZWZmcmFtZShQQVJBTV9EU1QsIDQpCitkZWZsaXQoYEZSQU1FJywwKQorCisJVEVYVAorCUFMSUdOKDMyKQorCisJQyBlYXgJc2F2ZWQgZXNpCisJQyBlYngKKwlDIGVjeAljb3VudGVyCisJQyBlZHgJc2F2ZWQgZWRpCisJQyBlc2kJc3JjCisJQyBlZGkJZHN0CisJQyBlYnAKKworUFJPTE9HVUUobXBuX2NvcHlpKQorCisJbW92bAlQQVJBTV9TSVpFLCAlZWN4CisJbW92bAklZXNpLCAlZWF4CisKKwltb3ZsCVBBUkFNX1NSQywgJWVzaQorCW1vdmwJJWVkaSwgJWVkeAorCisJbW92bAlQQVJBTV9EU1QsICVlZGkKKworCWNsZAlDIGJldHRlciBzYWZlIHRoYW4gc29ycnksIHNlZSBtcG4veDg2L1JFQURNRQorCisJcmVwCisJbW92c2wKKworCW1vdmwJJWVheCwgJWVzaQorCW1vdmwJJWVkeCwgJWVkaQorCisJcmV0CisKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2NvcmUyL2dtcC1tcGFyYW0uaCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2NvcmUyL2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTQ0YWQxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvY29yZTIvZ21wLW1wYXJhbS5oCkBAIC0wLDAgKzEsMjEwIEBACisvKiB4ODYvY29yZTIgZ21wLW1wYXJhbS5oIC0tIENvbXBpbGVyL21hY2hpbmUgcGFyYW1ldGVyIGhlYWRlciBmaWxlLgorCitDb3B5cmlnaHQgMjAxOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2RlZmluZSBHTVBfTElNQl9CSVRTIDMyCisjZGVmaW5lIEdNUF9MSU1CX0JZVEVTIDQKKworLyogMzAwMCBNSHogUGVucnluICovCisvKiBGRlQgdHVuaW5nIGxpbWl0ID0gNjcsMDAwLDAwMCAqLworLyogR2VuZXJhdGVkIGJ5IHR1bmV1cC5jLCAyMDE5LTEwLTIwLCBnY2MgOC4zICovCisKKyNkZWZpbmUgTU9EXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgTU9EXzFOX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgIDkKKyNkZWZpbmUgTU9EXzFVX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgIDgKKyNkZWZpbmUgTU9EXzFfMV9UT19NT0RfMV8yX1RIUkVTSE9MRCAgICAgICAgIDkKKyNkZWZpbmUgTU9EXzFfMl9UT19NT0RfMV80X1RIUkVTSE9MRCAgICAgICAgIDAgIC8qIG5ldmVyIG1wbl9tb2RfMXNfMnAgKi8KKyNkZWZpbmUgUFJFSU5WX01PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgIDMKKyNkZWZpbmUgVVNFX1BSRUlOVl9ESVZSRU1fMSAgICAgICAgICAgICAgICAgIDEgIC8qIG5hdGl2ZSAqLworI2RlZmluZSBESVZfUVJfMU5fUEkxX01FVEhPRCAgICAgICAgICAgICAgICAgMiAgLyogMjIuMjAlIGZhc3RlciB0aGFuIDEgKi8KKyNkZWZpbmUgRElWX1FSXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWX1FSXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWX1FSXzJfUEkyX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgRElWRVhBQ1RfMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAobmF0aXZlKSAqLworI2RlZmluZSBCTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgICAgICAxOAorCisjZGVmaW5lIERJVl8xX1ZTX01VTF8xX1BFUkNFTlQgICAgICAgICAgICAgMjc3CisKKyNkZWZpbmUgTVVMX1RPT00yMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgTVVMX1RPT00zM19USFJFU0hPTEQgICAgICAgICAgICAgICAgOTMKKyNkZWZpbmUgTVVMX1RPT000NF9USFJFU0hPTEQgICAgICAgICAgICAgICAxMzYKKyNkZWZpbmUgTVVMX1RPT002SF9USFJFU0hPTEQgICAgICAgICAgICAgICAzMDAKKyNkZWZpbmUgTVVMX1RPT004SF9USFJFU0hPTEQgICAgICAgICAgICAgICA0NzgKKworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT000M19USFJFU0hPTEQgICAgICA5MQorI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT001M19USFJFU0hPTEQgICAgIDE1MworI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT001M19USFJFU0hPTEQgICAgICA5MworI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT002M19USFJFU0hPTEQgICAgICA5NAorI2RlZmluZSBNVUxfVE9PTTQzX1RPX1RPT001NF9USFJFU0hPTEQgICAgIDEzMAorCisjZGVmaW5lIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMzQKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMTcKKyNkZWZpbmUgU1FSX1RPT000X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxODQKKyNkZWZpbmUgU1FSX1RPT002X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyNjIKKyNkZWZpbmUgU1FSX1RPT004X1RIUkVTSE9MRCAgICAgICAgICAgICAgICA1OTcKKworI2RlZmluZSBNVUxNSURfVE9PTTQyX1RIUkVTSE9MRCAgICAgICAgICAgICA3MAorCisjZGVmaW5lIE1VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIFNRUk1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDI1CisKKyNkZWZpbmUgTVVMX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICA1MDUgIC8qIGsgPSA1ICovCisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICA1MDUsIDV9LCB7ICAgICAyOCwgNn0sIHsgICAgIDE1LCA1fSwgeyAgICAgMzEsIDZ9LCBcCisgICAgeyAgICAgMjksIDd9LCB7ICAgICAxNSwgNn0sIHsgICAgIDMyLCA3fSwgeyAgICAgMTcsIDZ9LCBcCisgICAgeyAgICAgMzUsIDd9LCB7ICAgICAxOSwgNn0sIHsgICAgIDM5LCA3fSwgeyAgICAgMjksIDh9LCBcCisgICAgeyAgICAgMTUsIDd9LCB7ICAgICAzNSwgOH0sIHsgICAgIDE5LCA3fSwgeyAgICAgNDMsIDh9LCBcCisgICAgeyAgICAgMjMsIDd9LCB7ICAgICA0NywgOH0sIHsgICAgIDI3LCA5fSwgeyAgICAgMTUsIDh9LCBcCisgICAgeyAgICAgMzEsIDd9LCB7ICAgICA2MywgOH0sIHsgICAgIDQzLCA5fSwgeyAgICAgMjMsIDh9LCBcCisgICAgeyAgICAgNTUsIDl9LCB7ICAgICAzMSwgOH0sIHsgICAgIDY3LCA5fSwgeyAgICAgMzksIDh9LCBcCisgICAgeyAgICAgNzksIDl9LCB7ICAgICA1NSwxMH0sIHsgICAgIDMxLCA5fSwgeyAgICAgNzksMTB9LCBcCisgICAgeyAgICAgNDcsIDl9LCB7ICAgICA5NSwxMX0sIHsgICAgIDMxLDEwfSwgeyAgICAgNjMsIDl9LCBcCisgICAgeyAgICAxMzUsMTB9LCB7ICAgICA3OSwgOX0sIHsgICAgMTU5LDEwfSwgeyAgICAgOTUsMTF9LCBcCisgICAgeyAgICAgNjMsIDl9LCB7ICAgIDI1NSwxMH0sIHsgICAgMTU5LDExfSwgeyAgICAgOTUsMTB9LCBcCisgICAgeyAgICAxOTEsMTJ9LCB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgeyAgICAyNzEsIDl9LCBcCisgICAgeyAgICA1NDMsMTB9LCB7ICAgIDI4NywxMX0sIHsgICAgMTU5LDEwfSwgeyAgICAzMzUsIDl9LCBcCisgICAgeyAgICA2NzEsMTB9LCB7ICAgIDM1MSwxMX0sIHsgICAgMTkxLDEwfSwgeyAgICAzOTksIDl9LCBcCisgICAgeyAgICA3OTksMTF9LCB7ICAgIDIyMywxMn0sIHsgICAgMTI3LDExfSwgeyAgICAyNTUsMTB9LCBcCisgICAgeyAgICA1NDMsMTF9LCB7ICAgIDI4NywxMH0sIHsgICAgNjA3LDExfSwgeyAgICAzMTksMTB9LCBcCisgICAgeyAgICA2NzEsMTF9LCB7ICAgIDM1MSwxMn0sIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTB9LCBcCisgICAgeyAgICA3OTksMTF9LCB7ICAgIDQxNSwxM30sIHsgICAgMTI3LDEyfSwgeyAgICAyNTUsMTF9LCBcCisgICAgeyAgICA1NDMsMTB9LCB7ICAgMTA4NywxMX0sIHsgICAgNjA3LDEyfSwgeyAgICAzMTksMTF9LCBcCisgICAgeyAgICA2NzEsMTB9LCB7ICAgMTM0MywxMX0sIHsgICAgNzM1LDEwfSwgeyAgIDE0NzEsMTJ9LCBcCisgICAgeyAgICAzODMsMTF9LCB7ICAgIDc5OSwxMH0sIHsgICAxNTk5LDExfSwgeyAgICA4NjMsMTJ9LCBcCisgICAgeyAgICA0NDcsMTF9LCB7ICAgIDk1OSwxM30sIHsgICAgMjU1LDEyfSwgeyAgICA1MTEsMTF9LCBcCisgICAgeyAgIDEwODcsMTJ9LCB7ICAgIDU3NSwxMX0sIHsgICAxMjE1LDEyfSwgeyAgICA2MzksMTF9LCBcCisgICAgeyAgIDEzNDMsMTJ9LCB7ICAgIDcwMywxMX0sIHsgICAxNDcxLDEzfSwgeyAgICAzODMsMTJ9LCBcCisgICAgeyAgICA3NjcsMTF9LCB7ICAgMTU5OSwxMn0sIHsgICAgODMxLDExfSwgeyAgIDE3MjcsMTJ9LCBcCisgICAgeyAgICA5NTksMTR9LCB7ICAgIDI1NSwxM30sIHsgICAgNTExLDEyfSwgeyAgIDEwODcsMTF9LCBcCisgICAgeyAgIDIyMzksMTJ9LCB7ICAgMTIxNSwxM30sIHsgICAgNjM5LDEyfSwgeyAgIDE0NzEsMTF9LCBcCisgICAgeyAgIDI5NDMsMTN9LCB7ICAgIDc2NywxMn0sIHsgICAxNzI3LDEzfSwgeyAgICA4OTUsMTJ9LCBcCisgICAgeyAgIDE5MTksMTR9LCB7ICAgIDUxMSwxM30sIHsgICAxMDIzLDEyfSwgeyAgIDIyMzksMTN9LCBcCisgICAgeyAgIDExNTEsMTJ9LCB7ICAgMjQzMSwxM30sIHsgICAxNDA3LDEyfSwgeyAgIDI5NDMsMTR9LCBcCisgICAgeyAgICA3NjcsMTN9LCB7ICAgMTY2MywxMn0sIHsgICAzNDU1LDEzfSwgeyAgIDE5MTksMTV9LCBcCisgICAgeyAgICA1MTEsMTR9LCB7ICAgMTAyMywxM30sIHsgICAyMTc1LDEyfSwgeyAgIDQ0NzksMTN9LCBcCisgICAgeyAgIDI0MzEsMTR9LCB7ICAgMTI3OSwxM30sIHsgICAyOTQzLDEyfSwgeyAgIDU4ODcsMTR9LCBcCisgICAgeyAgIDE1MzUsMTN9LCB7ICAgMzQ1NSwxNH0sIHsgICAxNzkxLDEzfSwgeyAgIDM5NjcsMTJ9LCBcCisgICAgeyAgIDc5MzUsMTV9LCB7ICAgMTAyMywxNH0sIHsgICAyMDQ3LDEzfSwgeyAgIDQ0NzksMTR9LCBcCisgICAgeyAgIDIzMDMsMTN9LCB7ICAgNDk5MSwxMn0sIHsgICA5OTgzLDE0fSwgeyAgIDI4MTUsMTN9LCBcCisgICAgeyAgIDU4ODcsMTV9LCB7ICAgMTUzNSwxNH0sIHsgICAzODM5LDE2fSB9CisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzX1NJWkUgMTQ3CisjZGVmaW5lIE1VTF9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA2Nzg0CisKKyNkZWZpbmUgU1FSX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICA0NjQgIC8qIGsgPSA1ICovCisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICA0NjQsIDV9LCB7ICAgICAyOCwgNn0sIHsgICAgIDE1LCA1fSwgeyAgICAgMzEsIDZ9LCBcCisgICAgeyAgICAgMjksIDd9LCB7ICAgICAxNSwgNn0sIHsgICAgIDMyLCA3fSwgeyAgICAgMTcsIDZ9LCBcCisgICAgeyAgICAgMzUsIDd9LCB7ICAgICAxOSwgNn0sIHsgICAgIDM5LCA3fSwgeyAgICAgMjksIDh9LCBcCisgICAgeyAgICAgMTUsIDd9LCB7ICAgICAzNSwgOH0sIHsgICAgIDE5LCA3fSwgeyAgICAgNDEsIDh9LCBcCisgICAgeyAgICAgMjMsIDd9LCB7ICAgICA0OSwgOH0sIHsgICAgIDI3LCA5fSwgeyAgICAgMTUsIDh9LCBcCisgICAgeyAgICAgMzksIDl9LCB7ICAgICAyMywgOH0sIHsgICAgIDUxLDEwfSwgeyAgICAgMTUsIDl9LCBcCisgICAgeyAgICAgMzEsIDh9LCB7ICAgICA2NywgOX0sIHsgICAgIDM5LCA4fSwgeyAgICAgNzksIDl9LCBcCisgICAgeyAgICAgNDcsIDh9LCB7ICAgICA5NSwgOX0sIHsgICAgIDU1LDEwfSwgeyAgICAgMzEsIDl9LCBcCisgICAgeyAgICAgNzksMTB9LCB7ICAgICA0NywgOX0sIHsgICAgIDk1LDExfSwgeyAgICAgMzEsMTB9LCBcCisgICAgeyAgICAgNjMsIDl9LCB7ICAgIDEyNywxMH0sIHsgICAgIDc5LCA5fSwgeyAgICAxNTksMTB9LCBcCisgICAgeyAgICAgOTUsMTF9LCB7ICAgICA2MywxMH0sIHsgICAgMTI3LCA5fSwgeyAgICAyNTUsMTB9LCBcCisgICAgeyAgICAxNDMsIDl9LCB7ICAgIDI4NywgNX0sIHsgICA0ODYzLCA2fSwgeyAgIDI0OTUsIDd9LCBcCisgICAgeyAgIDEzNDMsIDh9LCB7ICAgIDcwMywgOX0sIHsgICAgMzY3LDEyfSwgeyAgICAgNjMsMTF9LCBcCisgICAgeyAgICAxMjcsMTB9LCB7ICAgIDMwMywxMX0sIHsgICAgMTU5LDEwfSwgeyAgICAzMTksIDl9LCBcCisgICAgeyAgICA2MzksMTB9LCB7ICAgIDMzNSwgOX0sIHsgICAgNjcxLDEwfSwgeyAgICAzNTEsIDl9LCBcCisgICAgeyAgICA3MDMsMTB9LCB7ICAgIDM2NywxMX0sIHsgICAgMTkxLDEwfSwgeyAgICAzODMsIDl9LCBcCisgICAgeyAgICA3NjcsMTB9LCB7ICAgIDM5OSwgOX0sIHsgICAgNzk5LDEwfSwgeyAgICA0MTUsIDl9LCBcCisgICAgeyAgICA4MzEsMTJ9LCB7ICAgIDEyNywxMX0sIHsgICAgMjU1LDEwfSwgeyAgICA1NDMsMTF9LCBcCisgICAgeyAgICAyODcsMTB9LCB7ICAgIDYwNywxMX0sIHsgICAgMzE5LDEwfSwgeyAgICA2NzEsMTF9LCBcCisgICAgeyAgICAzNTEsMTB9LCB7ICAgIDcwMywxMn0sIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTB9LCBcCisgICAgeyAgICA3OTksMTF9LCB7ICAgIDQxNSwxMH0sIHsgICAgODYzLDEzfSwgeyAgICAxMjcsMTJ9LCBcCisgICAgeyAgICAyNTUsMTF9LCB7ICAgIDU0MywxMH0sIHsgICAxMDg3LDExfSwgeyAgICA2MDcsMTJ9LCBcCisgICAgeyAgICAzMTksMTF9LCB7ICAgIDY3MSwxMH0sIHsgICAxMzQzLDExfSwgeyAgICA3MzUsMTB9LCBcCisgICAgeyAgIDE0NzEsMTJ9LCB7ICAgIDM4MywxMX0sIHsgICAgNzk5LDEwfSwgeyAgIDE1OTksMTF9LCBcCisgICAgeyAgICA4NjMsMTJ9LCB7ICAgIDQ0NywxMX0sIHsgICAgOTU5LDEzfSwgeyAgICAyNTUsMTJ9LCBcCisgICAgeyAgICA1MTEsMTF9LCB7ICAgMTA4NywxMn0sIHsgICAgNTc1LDExfSwgeyAgIDEyMTUsMTJ9LCBcCisgICAgeyAgICA2MzksMTF9LCB7ICAgMTM0MywxMn0sIHsgICAgNzAzLDExfSwgeyAgIDE0MDcsMTN9LCBcCisgICAgeyAgICAzODMsMTJ9LCB7ICAgIDc2NywxMX0sIHsgICAxNTk5LDEyfSwgeyAgICA4MzEsMTF9LCBcCisgICAgeyAgIDE3MjcsMTJ9LCB7ICAgIDk1OSwxNH0sIHsgICAgMjU1LDEzfSwgeyAgICA1MTEsMTJ9LCBcCisgICAgeyAgIDEyMTUsMTN9LCB7ICAgIDYzOSwxMn0sIHsgICAxNDcxLDExfSwgeyAgIDI5NDMsMTN9LCBcCisgICAgeyAgICA3NjcsMTJ9LCB7ICAgMTcyNywxM30sIHsgICAgODk1LDEyfSwgeyAgIDE5MTksMTR9LCBcCisgICAgeyAgICA1MTEsMTN9LCB7ICAgMTAyMywxMn0sIHsgICAyMTExLDEzfSwgeyAgIDExNTEsMTJ9LCBcCisgICAgeyAgIDI0MzEsMTN9LCB7ICAgMTQwNywxMn0sIHsgICAyOTQzLDE0fSwgeyAgICA3NjcsMTN9LCBcCisgICAgeyAgIDE2NjMsMTJ9LCB7ICAgMzQ1NSwxM30sIHsgICAxOTE5LDE1fSwgeyAgICA1MTEsMTR9LCBcCisgICAgeyAgIDEwMjMsMTN9LCB7ICAgMjE3NSwxMn0sIHsgICA0NDc5LDEzfSwgeyAgIDI0MzEsMTR9LCBcCisgICAgeyAgIDEyNzksMTN9LCB7ICAgMjk0MywxMn0sIHsgICA1ODg3LDE0fSwgeyAgIDE1MzUsMTN9LCBcCisgICAgeyAgIDM0NTUsMTR9LCB7ICAgMTc5MSwxM30sIHsgICAzOTY3LDE1fSwgeyAgIDEwMjMsMTR9LCBcCisgICAgeyAgIDIwNDcsMTN9LCB7ICAgNDQ3OSwxNH0sIHsgICAyMzAzLDEzfSwgeyAgIDQ5OTEsMTJ9LCBcCisgICAgeyAgIDk5ODMsMTR9LCB7ICAgMjgxNSwxM30sIHsgICA1ODg3LDE1fSwgeyAgIDE1MzUsMTR9LCBcCisgICAgeyAgIDM4MzksMTZ9IH0KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTNfU0laRSAxNTcKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDUzMTIKKworI2RlZmluZSBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDM2CisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgIDEzNDYzCisjZGVmaW5lIFNRUkxPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgU1FSTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAxNDAKKyNkZWZpbmUgU1FSTE9fU1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTAzOTMKKworI2RlZmluZSBEQ19ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBEQ19ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgIDExNgorI2RlZmluZSBEQ19CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA3NgorI2RlZmluZSBEQ19CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE4MAorCisjZGVmaW5lIElOVl9NVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgIDQ2CisjZGVmaW5lIElOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAgMTM4CisjZGVmaW5lIElOVl9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTIzCisKKyNkZWZpbmUgQklOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAzMDYKKyNkZWZpbmUgUkVEQ18xX1RPX1JFRENfTl9USFJFU0hPTEQgICAgICAgICAgODIKKworI2RlZmluZSBNVV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTQ5OQorI2RlZmluZSBNVV9ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgMTQ0MgorI2RlZmluZSBNVVBJX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICA2MworI2RlZmluZSBNVV9CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTQ0MgorI2RlZmluZSBNVV9CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTU4OQorCisjZGVmaW5lIFBPV01fU0VDX1RBQkxFICAxLDIyLDY2LDQyOCwxMDM1CisKKyNkZWZpbmUgR0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICAgMTgKKyNkZWZpbmUgU0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICA3MzIKKyNkZWZpbmUgU0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgIDExMTgKKworI2RlZmluZSBGQUNfRFNDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDExNQorI2RlZmluZSBGQUNfT0REX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICA1MAorCisjZGVmaW5lIE1BVFJJWDIyX1NUUkFTU0VOX1RIUkVTSE9MRCAgICAgICAgIDI1CisjZGVmaW5lIEhHQ0QyX0RJVjFfTUVUSE9EICAgICAgICAgICAgICAgICAgICAxICAvKiA1Ljc4JSBmYXN0ZXIgdGhhbiAzICovCisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAgMTIxCisjZGVmaW5lIEhHQ0RfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTUxCisjZGVmaW5lIEhHQ0RfUkVEVUNFX1RIUkVTSE9MRCAgICAgICAgICAgICAzMjU5CisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgMzY4CisjZGVmaW5lIEdDREVYVF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMzA2CisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAgICA0ICAvKiAxNC4xOSUgZmFzdGVyIHRoYW4gMSAqLworCisvKiBUdW5ldXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgdG9vayA2NzE0MiBzZWNvbmRzICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9jb3JlaWJ3bC9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9jb3JlaWJ3bC9nbXAtbXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I1OGNhZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2NvcmVpYndsL2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDIxNiBAQAorLyogeDg2L2NvcmVpYndsIGdtcC1tcGFyYW0uaCAtLSBDb21waWxlci9tYWNoaW5lIHBhcmFtZXRlciBoZWFkZXIgZmlsZS4KKworQ29weXJpZ2h0IDIwMTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNkZWZpbmUgR01QX0xJTUJfQklUUyAzMgorI2RlZmluZSBHTVBfTElNQl9CWVRFUyA0CisKKy8qIDM0MDAtMzgwMCBNSHogSW50ZWwgWGVvbiBFMy0xMjg1THY0IEJyb2Fkd2VsbCAqLworLyogRkZUIHR1bmluZyBsaW1pdCA9IDY3LDAwMCwwMDAgKi8KKy8qIEdlbmVyYXRlZCBieSB0dW5ldXAuYywgMjAxOS0xMC0yMCwgZ2NjIDguMyAqLworCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIE1PRF8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgIDE2CisjZGVmaW5lIE1PRF8xTl9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgIDEwCisjZGVmaW5lIE1PRF8xVV9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA4CisjZGVmaW5lIE1PRF8xXzFfVE9fTU9EXzFfMl9USFJFU0hPTEQgICAgICAgICAwICAvKiBuZXZlciBtcG5fbW9kXzFfMXAgKi8KKyNkZWZpbmUgTU9EXzFfMl9UT19NT0RfMV80X1RIUkVTSE9MRCAgICAgICAgMTAKKyNkZWZpbmUgUFJFSU5WX01PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgMTEKKyNkZWZpbmUgVVNFX1BSRUlOVl9ESVZSRU1fMSAgICAgICAgICAgICAgICAgIDEgIC8qIG5hdGl2ZSAqLworI2RlZmluZSBESVZfUVJfMU5fUEkxX01FVEhPRCAgICAgICAgICAgICAgICAgMSAgLyogMjEuMzQlIGZhc3RlciB0aGFuIDIgKi8KKyNkZWZpbmUgRElWX1FSXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgMTQKKyNkZWZpbmUgRElWX1FSXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWX1FSXzJfUEkyX1RIUkVTSE9MRCAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgRElWRVhBQ1RfMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAobmF0aXZlKSAqLworI2RlZmluZSBCTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgICAgICAxOQorCisjZGVmaW5lIERJVl8xX1ZTX01VTF8xX1BFUkNFTlQgICAgICAgICAgICAgMjk1CisKKyNkZWZpbmUgTVVMX1RPT00yMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjYKKyNkZWZpbmUgTVVMX1RPT00zM19USFJFU0hPTEQgICAgICAgICAgICAgICAgOTcKKyNkZWZpbmUgTVVMX1RPT000NF9USFJFU0hPTEQgICAgICAgICAgICAgICAyMjAKKyNkZWZpbmUgTVVMX1RPT002SF9USFJFU0hPTEQgICAgICAgICAgICAgICAzMDYKKyNkZWZpbmUgTVVMX1RPT004SF9USFJFU0hPTEQgICAgICAgICAgICAgICA0NTQKKworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT000M19USFJFU0hPTEQgICAgICA5MworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT001M19USFJFU0hPTEQgICAgIDE1MworI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT001M19USFJFU0hPTEQgICAgIDE1NAorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT002M19USFJFU0hPTEQgICAgIDE2OQorI2RlZmluZSBNVUxfVE9PTTQzX1RPX1RPT001NF9USFJFU0hPTEQgICAgIDEzNgorCisjZGVmaW5lIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNDQKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMzQKKyNkZWZpbmUgU1FSX1RPT000X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyNDIKKyNkZWZpbmUgU1FSX1RPT002X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzNDIKKyNkZWZpbmUgU1FSX1RPT004X1RIUkVTSE9MRCAgICAgICAgICAgICAgICA1MDIKKworI2RlZmluZSBNVUxNSURfVE9PTTQyX1RIUkVTSE9MRCAgICAgICAgICAgICA5OAorCisjZGVmaW5lIE1VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIFNRUk1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDIzCisKKyNkZWZpbmUgTVVMX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICA1NDAgIC8qIGsgPSA1ICovCisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICA1NDAsIDV9LCB7ICAgICAyOSwgNn0sIHsgICAgIDE1LCA1fSwgeyAgICAgMzEsIDZ9LCBcCisgICAgeyAgICAgMTYsIDV9LCB7ICAgICAzMywgNn0sIHsgICAgIDE3LCA1fSwgeyAgICAgMzYsIDZ9LCBcCisgICAgeyAgICAgMjUsIDd9LCB7ICAgICAxMywgNn0sIHsgICAgIDI5LCA3fSwgeyAgICAgMTUsIDZ9LCBcCisgICAgeyAgICAgMzMsIDd9LCB7ICAgICAxNywgNn0sIHsgICAgIDM2LCA3fSwgeyAgICAgMTksIDZ9LCBcCisgICAgeyAgICAgMzksIDd9LCB7ICAgICAyMSwgNn0sIHsgICAgIDQzLCA3fSwgeyAgICAgMjMsIDZ9LCBcCisgICAgeyAgICAgNDcsIDd9LCB7ICAgICAyOSwgOH0sIHsgICAgIDE1LCA3fSwgeyAgICAgMzUsIDh9LCBcCisgICAgeyAgICAgMTksIDd9LCB7ICAgICA0MywgOH0sIHsgICAgIDIzLCA3fSwgeyAgICAgNDksIDh9LCBcCisgICAgeyAgICAgMjcsIDd9LCB7ICAgICA1NSwgOX0sIHsgICAgIDE1LCA4fSwgeyAgICAgMzEsIDd9LCBcCisgICAgeyAgICAgNjMsIDh9LCB7ICAgICA0MywgOX0sIHsgICAgIDIzLCA4fSwgeyAgICAgNTUsMTB9LCBcCisgICAgeyAgICAgMTUsIDl9LCB7ICAgICAzMSwgOH0sIHsgICAgIDY3LCA5fSwgeyAgICAgMzksIDh9LCBcCisgICAgeyAgICAgODMsIDl9LCB7ICAgICA0NywgOH0sIHsgICAgIDk1LCA5fSwgeyAgICAgNTUsMTB9LCBcCisgICAgeyAgICAgMzEsIDl9LCB7ICAgICA3OSwxMH0sIHsgICAgIDQ3LCA5fSwgeyAgICAgOTUsMTF9LCBcCisgICAgeyAgICAgMzEsMTB9LCB7ICAgICA2MywgOX0sIHsgICAgMTM1LDEwfSwgeyAgICAgNzksIDl9LCBcCisgICAgeyAgICAxNTksMTB9LCB7ICAgICA5NSwgOX0sIHsgICAgMTkxLDEwfSwgeyAgICAxMTEsMTF9LCBcCisgICAgeyAgICAgNjMsMTB9LCB7ICAgIDE0MywgOX0sIHsgICAgMjg3LDEwfSwgeyAgICAxNTksMTF9LCBcCisgICAgeyAgICAgOTUsIDd9LCB7ICAgMTU5OSwgOH0sIHsgICAgODMxLCA5fSwgeyAgICA0MzEsIDh9LCBcCisgICAgeyAgICA4NjMsIDl9LCB7ICAgIDQ0NywxMH0sIHsgICAgMjM5LCA5fSwgeyAgICA0NzksMTB9LCBcCisgICAgeyAgICAyNTUsIDl9LCB7ICAgIDUxMSwxMH0sIHsgICAgMjg3LDExfSwgeyAgICAxNTksMTB9LCBcCisgICAgeyAgICAzMTksIDl9LCB7ICAgIDYzOSwxMH0sIHsgICAgMzM1LCA5fSwgeyAgICA2NzEsMTF9LCBcCisgICAgeyAgICAxOTEsMTB9LCB7ICAgIDM4MywgOX0sIHsgICAgNzY3LDEwfSwgeyAgICAzOTksMTF9LCBcCisgICAgeyAgICAyMjMsMTJ9LCB7ICAgIDEyNywxMX0sIHsgICAgMjU1LDEwfSwgeyAgICA1MTEsIDl9LCBcCisgICAgeyAgIDEwMjMsMTF9LCB7ICAgIDI4NywxMH0sIHsgICAgNjA3LDExfSwgeyAgICAzMTksMTB9LCBcCisgICAgeyAgICA2NzEsMTF9LCB7ICAgIDM1MSwxMn0sIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTB9LCBcCisgICAgeyAgICA3OTksMTF9LCB7ICAgIDQxNSwxM30sIHsgICAgMTI3LDEyfSwgeyAgICAyNTUsMTF9LCBcCisgICAgeyAgICA1NDMsMTB9LCB7ICAgMTExOSwxMX0sIHsgICAgNjA3LDEyfSwgeyAgICAzMTksMTF9LCBcCisgICAgeyAgICA2NzEsMTB9LCB7ICAgMTM0MywxMX0sIHsgICAgNzM1LDEyfSwgeyAgICAzODMsMTF9LCBcCisgICAgeyAgICA3OTksMTB9LCB7ICAgMTU5OSwxMX0sIHsgICAgODYzLDEyfSwgeyAgICA0NDcsMTF9LCBcCisgICAgeyAgICA5NTksMTN9LCB7ICAgIDI1NSwxMn0sIHsgICAgNTExLDExfSwgeyAgIDExMTksMTJ9LCBcCisgICAgeyAgICA1NzUsMTF9LCB7ICAgMTIxNSwxMn0sIHsgICAgNjM5LDExfSwgeyAgIDEzNDMsMTJ9LCBcCisgICAgeyAgICA3MDMsMTF9LCB7ICAgMTQwNywxM30sIHsgICAgMzgzLDEyfSwgeyAgICA3NjcsMTF9LCBcCisgICAgeyAgIDE1OTksMTJ9LCB7ICAgIDgzMSwxMX0sIHsgICAxNzI3LDEyfSwgeyAgICA5NTksMTR9LCBcCisgICAgeyAgICAyNTUsMTN9LCB7ICAgIDUxMSwxMn0sIHsgICAxMjE1LDEzfSwgeyAgICA2MzksMTJ9LCBcCisgICAgeyAgIDE0NzEsMTN9LCB7ICAgIDc2NywxMn0sIHsgICAxNzI3LDEzfSwgeyAgICA4OTUsMTJ9LCBcCisgICAgeyAgIDE5MTksMTR9LCB7ICAgIDUxMSwxM30sIHsgICAxMDIzLDEyfSwgeyAgIDIyMzksMTN9LCBcCisgICAgeyAgIDExNTEsMTJ9LCB7ICAgMjQzMSwxM30sIHsgICAxMjc5LDEyfSwgeyAgIDI2MjMsMTN9LCBcCisgICAgeyAgIDE0MDcsMTJ9LCB7ICAgMjgxNSwxNH0sIHsgICAgNzY3LDEzfSwgeyAgIDE1MzUsMTJ9LCBcCisgICAgeyAgIDMxMzUsMTN9LCB7ICAgMTY2MywxMn0sIHsgICAzNDU1LDEzfSwgeyAgIDE5MTksMTV9LCBcCisgICAgeyAgICA1MTEsMTR9LCB7ICAgMTAyMywxM30sIHsgICAyMTc1LDEyfSwgeyAgIDQ0NzksMTN9LCBcCisgICAgeyAgIDI0MzEsMTR9LCB7ICAgMTI3OSwxM30sIHsgICAyOTQzLDEyfSwgeyAgIDU4ODcsMTR9LCBcCisgICAgeyAgIDE1MzUsMTN9LCB7ICAgMzQ1NSwxNH0sIHsgICAxNzkxLDEzfSwgeyAgIDM4MzksMTV9LCBcCisgICAgeyAgIDEwMjMsMTR9LCB7ICAgMjA0NywxM30sIHsgICA0NDc5LDE0fSwgeyAgIDIzMDMsMTN9LCBcCisgICAgeyAgIDQ5OTEsMTJ9LCB7ICAgOTk4MywxNH0sIHsgICAyNTU5LDEzfSwgeyAgIDUyNDcsMTR9LCBcCisgICAgeyAgIDI4MTUsMTN9LCB7ICAgNTg4NywxNX0sIHsgICAxNTM1LDE0fSwgeyAgIDM4MzksMTZ9IH0KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTNfU0laRSAxNzIKKyNkZWZpbmUgTVVMX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDc0MjQKKworI2RlZmluZSBTUVJfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDQ3MiAgLyogayA9IDUgKi8KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDQ3MiwgNX0sIHsgICAgIDI5LCA2fSwgeyAgICAgMTUsIDV9LCB7ICAgICAzMywgNn0sIFwKKyAgICB7ICAgICAzNywgN30sIHsgICAgIDE5LCA2fSwgeyAgICAgNDAsIDd9LCB7ICAgICAyOSwgOH0sIFwKKyAgICB7ICAgICAxNSwgN30sIHsgICAgIDM1LCA4fSwgeyAgICAgMTksIDd9LCB7ICAgICA0MywgOH0sIFwKKyAgICB7ICAgICAyMywgN30sIHsgICAgIDQ5LCA4fSwgeyAgICAgMjcsIDl9LCB7ICAgICAxNSwgOH0sIFwKKyAgICB7ICAgICAzMSwgN30sIHsgICAgIDYzLCA4fSwgeyAgICAgNDMsIDl9LCB7ICAgICAyMywgOH0sIFwKKyAgICB7ICAgICA1NSwxMH0sIHsgICAgIDE1LCA5fSwgeyAgICAgMzEsIDh9LCB7ICAgICA2NywgOX0sIFwKKyAgICB7ICAgICAzOSwgOH0sIHsgICAgIDgzLCA5fSwgeyAgICAgNDcsIDh9LCB7ICAgICA5NSwgOX0sIFwKKyAgICB7ICAgICA1NSwxMH0sIHsgICAgIDMxLCA5fSwgeyAgICAgNzksMTB9LCB7ICAgICA0NywgOX0sIFwKKyAgICB7ICAgICA5NSwxMX0sIHsgICAgIDMxLDEwfSwgeyAgICAgNjMsIDl9LCB7ICAgIDEzNSwxMH0sIFwKKyAgICB7ICAgICA3OSwgOX0sIHsgICAgMTU5LDEwfSwgeyAgICAgOTUsMTF9LCB7ICAgICA2MywxMH0sIFwKKyAgICB7ICAgIDEyNywgOX0sIHsgICAgMjU1LDEwfSwgeyAgICAxNDMsIDl9LCB7ICAgIDI4NywxMH0sIFwKKyAgICB7ICAgIDE1OSwxMX0sIHsgICAgIDk1LDEyfSwgeyAgICAgNjMsMTF9LCB7ICAgIDEyNywxMH0sIFwKKyAgICB7ICAgIDI3MSwgOX0sIHsgICAgNTQzLCA2fSwgeyAgIDQ0NzksIDd9LCB7ICAgMjQzMSwgOH0sIFwKKyAgICB7ICAgMTI0NywgN30sIHsgICAyNDk1LCA4fSwgeyAgIDEyNzksMTB9LCB7ICAgIDM1MSwxMX0sIFwKKyAgICB7ICAgIDE5MSwxMH0sIHsgICAgMzk5LCA5fSwgeyAgICA3OTksMTB9LCB7ICAgIDQxNSwxMn0sIFwKKyAgICB7ICAgIDEyNywxMX0sIHsgICAgMjU1LDEwfSwgeyAgICA1NDMsMTF9LCB7ICAgIDI4NywxMH0sIFwKKyAgICB7ICAgIDYwNywxMX0sIHsgICAgMzE5LDEwfSwgeyAgICA2MzksMTF9LCB7ICAgIDM1MSwxMn0sIFwKKyAgICB7ICAgIDE5MSwxMX0sIHsgICAgMzgzLDEwfSwgeyAgICA3OTksMTF9LCB7ICAgIDQxNSwxMH0sIFwKKyAgICB7ICAgIDgzMSwxM30sIHsgICAgMTI3LDEyfSwgeyAgICAyNTUsMTF9LCB7ICAgIDUxMSwxMH0sIFwKKyAgICB7ICAgMTAyMywxMX0sIHsgICAgNTQzLDEwfSwgeyAgIDEwODcsMTF9LCB7ICAgIDYwNywxMn0sIFwKKyAgICB7ICAgIDMxOSwxMX0sIHsgICAgNjcxLDEwfSwgeyAgIDEzNDMsMTF9LCB7ICAgIDczNSwxMn0sIFwKKyAgICB7ICAgIDM4MywxMX0sIHsgICAgNzk5LDEwfSwgeyAgIDE1OTksMTF9LCB7ICAgIDg2MywxMn0sIFwKKyAgICB7ICAgIDQ0NywxMX0sIHsgICAgOTI3LDEzfSwgeyAgICAyNTUsMTJ9LCB7ICAgIDUxMSwxMX0sIFwKKyAgICB7ICAgMTA4NywxMn0sIHsgICAgNTc1LDExfSwgeyAgIDEyMTUsMTJ9LCB7ICAgIDYzOSwxMX0sIFwKKyAgICB7ICAgMTM0MywxMn0sIHsgICAgNzAzLDExfSwgeyAgIDE0NzEsMTN9LCB7ICAgIDM4MywxMn0sIFwKKyAgICB7ICAgIDc2NywxMX0sIHsgICAxNTk5LDEyfSwgeyAgICA4MzEsMTF9LCB7ICAgMTY2MywxMn0sIFwKKyAgICB7ICAgIDg5NSwxMX0sIHsgICAxODU1LDE0fSwgeyAgICAyNTUsMTN9LCB7ICAgIDUxMSwxMn0sIFwKKyAgICB7ICAgMTAyMywxMX0sIHsgICAyMDQ3LDEyfSwgeyAgIDEwODcsMTF9LCB7ICAgMjIzOSwxMn0sIFwKKyAgICB7ICAgMTIxNSwxM30sIHsgICAgNjM5LDEyfSwgeyAgIDE0NzEsMTN9LCB7ICAgIDc2NywxMn0sIFwKKyAgICB7ICAgMTY2MywxM30sIHsgICAgODk1LDEyfSwgeyAgIDE5ODMsMTR9LCB7ICAgIDUxMSwxM30sIFwKKyAgICB7ICAgMTAyMywxMn0sIHsgICAyMjM5LDEzfSwgeyAgIDExNTEsMTJ9LCB7ICAgMjQ5NSwxM30sIFwKKyAgICB7ICAgMTI3OSwxMn0sIHsgICAyNjIzLDEzfSwgeyAgIDE0MDcsMTR9LCB7ICAgIDc2NywxM30sIFwKKyAgICB7ICAgMTUzNSwxMn0sIHsgICAzMTM1LDEzfSwgeyAgIDE2NjMsMTJ9LCB7ICAgMzQ1NSwxM30sIFwKKyAgICB7ICAgMTkxOSwxNX0sIHsgICAgNTExLDE0fSwgeyAgIDEwMjMsMTN9LCB7ICAgMjE3NSwxMn0sIFwKKyAgICB7ICAgNDQ3OSwxM30sIHsgICAyNDMxLDE0fSwgeyAgIDEyNzksMTN9LCB7ICAgMjk0MywxMn0sIFwKKyAgICB7ICAgNTg4NywxNH0sIHsgICAxNTM1LDEzfSwgeyAgIDM0NTUsMTR9LCB7ICAgMTc5MSwxM30sIFwKKyAgICB7ICAgMzgzOSwxNX0sIHsgICAxMDIzLDE0fSwgeyAgIDIwNDcsMTN9LCB7ICAgNDQ3OSwxNH0sIFwKKyAgICB7ICAgMjMwMywxM30sIHsgICA0OTkxLDEyfSwgeyAgIDk5ODMsMTR9LCB7ICAgMjgxNSwxM30sIFwKKyAgICB7ICAgNTg4NywxNX0sIHsgICAxNTM1LDE0fSwgeyAgIDMzMjcsMTN9LCB7ICAgNjc4MywxNH0sIFwKKyAgICB7ICAgMzgzOSwxNn0gfQorI2RlZmluZSBTUVJfRkZUX1RBQkxFM19TSVpFIDE1NworI2RlZmluZSBTUVJfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNTU2OAorCisjZGVmaW5lIE1VTExPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgIDE2CisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDM3CisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgIDE0MjgxCisjZGVmaW5lIFNRUkxPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgU1FSTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAxMzcKKyNkZWZpbmUgU1FSTE9fU1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTA4MjEKKworI2RlZmluZSBEQ19ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA1NAorI2RlZmluZSBEQ19ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgIDE0NgorI2RlZmluZSBEQ19CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA5OAorI2RlZmluZSBEQ19CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDIxOAorCisjZGVmaW5lIElOVl9NVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgIDUwCisjZGVmaW5lIElOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAgMTczCisjZGVmaW5lIElOVl9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTY1CisKKyNkZWZpbmUgQklOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAyNzgKKyNkZWZpbmUgUkVEQ18xX1RPX1JFRENfTl9USFJFU0hPTEQgICAgICAgICAgNzkKKworI2RlZmluZSBNVV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTc4NworI2RlZmluZSBNVV9ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgMTc4NworI2RlZmluZSBNVVBJX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICA3OAorI2RlZmluZSBNVV9CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTU4OQorI2RlZmluZSBNVV9CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTgzMAorCisjZGVmaW5lIFBPV01fU0VDX1RBQkxFICAxLDE2LDEyNiw0MTYsOTMyCisKKyNkZWZpbmUgR0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICAgMTcKKyNkZWZpbmUgU0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAzMDYKKyNkZWZpbmUgU0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICA4OTQKKworI2RlZmluZSBGQUNfRFNDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDE0MQorI2RlZmluZSBGQUNfT0REX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAzNAorCisjZGVmaW5lIE1BVFJJWDIyX1NUUkFTU0VOX1RIUkVTSE9MRCAgICAgICAgIDIwCisjZGVmaW5lIEhHQ0QyX0RJVjFfTUVUSE9EICAgICAgICAgICAgICAgICAgICAzICAvKiA1Ljk3JSBmYXN0ZXIgdGhhbiAxICovCisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAgIDczCisjZGVmaW5lIEhHQ0RfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTIzCisjZGVmaW5lIEhHQ0RfUkVEVUNFX1RIUkVTSE9MRCAgICAgICAgICAgICAzNjY0CisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgNTYyCisjZGVmaW5lIEdDREVYVF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgNDY1CisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAgICAxICAvKiAzMS4xNiUgZmFzdGVyIHRoYW4gMyAqLworCisvKiBUdW5ldXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgdG9vayAzNTExNCBzZWNvbmRzICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9jb3JlaWh3bC9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9jb3JlaWh3bC9nbXAtbXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE0YWMxMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2NvcmVpaHdsL2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDIxNSBAQAorLyogeDg2L2NvcmVpaHdsIGdtcC1tcGFyYW0uaCAtLSBDb21waWxlci9tYWNoaW5lIHBhcmFtZXRlciBoZWFkZXIgZmlsZS4KKworQ29weXJpZ2h0IDIwMTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNkZWZpbmUgR01QX0xJTUJfQklUUyAzMgorI2RlZmluZSBHTVBfTElNQl9CWVRFUyA0CisKKy8qIDM2MDAtNDAwMCBNSHogSW50ZWwgWGVvbiBFMy0xMjcxdjMgSGFzd2VsbCAqLworLyogRkZUIHR1bmluZyBsaW1pdCA9IDY3LDAwMCwwMDAgKi8KKy8qIEdlbmVyYXRlZCBieSB0dW5ldXAuYywgMjAxOS0xMC0yMSwgZ2NjIDguMyAqLworCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIE1PRF8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgIDE3CisjZGVmaW5lIE1PRF8xTl9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgIDEwCisjZGVmaW5lIE1PRF8xVV9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA5CisjZGVmaW5lIE1PRF8xXzFfVE9fTU9EXzFfMl9USFJFU0hPTEQgICAgICAgICAwICAvKiBuZXZlciBtcG5fbW9kXzFfMXAgKi8KKyNkZWZpbmUgTU9EXzFfMl9UT19NT0RfMV80X1RIUkVTSE9MRCAgICAgICAgMTAKKyNkZWZpbmUgUFJFSU5WX01PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgIDUKKyNkZWZpbmUgVVNFX1BSRUlOVl9ESVZSRU1fMSAgICAgICAgICAgICAgICAgIDEgIC8qIG5hdGl2ZSAqLworI2RlZmluZSBESVZfUVJfMU5fUEkxX01FVEhPRCAgICAgICAgICAgICAgICAgMSAgLyogMTEuNDQlIGZhc3RlciB0aGFuIDIgKi8KKyNkZWZpbmUgRElWX1FSXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgMTMKKyNkZWZpbmUgRElWX1FSXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWX1FSXzJfUEkyX1RIUkVTSE9MRCAgICAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWRVhBQ1RfMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAobmF0aXZlKSAqLworI2RlZmluZSBCTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgICAgICAyMQorCisjZGVmaW5lIERJVl8xX1ZTX01VTF8xX1BFUkNFTlQgICAgICAgICAgICAgMjk2CisKKyNkZWZpbmUgTVVMX1RPT00yMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgTVVMX1RPT00zM19USFJFU0hPTEQgICAgICAgICAgICAgICAxMDgKKyNkZWZpbmUgTVVMX1RPT000NF9USFJFU0hPTEQgICAgICAgICAgICAgICAyMzIKKyNkZWZpbmUgTVVMX1RPT002SF9USFJFU0hPTEQgICAgICAgICAgICAgICAzMDYKKyNkZWZpbmUgTVVMX1RPT004SF9USFJFU0hPTEQgICAgICAgICAgICAgICA0NzgKKworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT000M19USFJFU0hPTEQgICAgIDEwOQorI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT001M19USFJFU0hPTEQgICAgIDE4MworI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT001M19USFJFU0hPTEQgICAgIDExMworI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT002M19USFJFU0hPTEQgICAgIDExMworI2RlZmluZSBNVUxfVE9PTTQzX1RPX1RPT001NF9USFJFU0hPTEQgICAgIDEzNgorCisjZGVmaW5lIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNDQKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNDEKKyNkZWZpbmUgU1FSX1RPT000X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzODQKKyNkZWZpbmUgU1FSX1RPT002X1RIUkVTSE9MRCAgICAgICAgICAgICAgICA1MTcKKyNkZWZpbmUgU1FSX1RPT004X1RIUkVTSE9MRCAgICAgICAgICAgICAgICA2OTgKKworI2RlZmluZSBNVUxNSURfVE9PTTQyX1RIUkVTSE9MRCAgICAgICAgICAgICA5OAorCisjZGVmaW5lIE1VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIFNRUk1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDIzCisKKyNkZWZpbmUgTVVMX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICA1NjUgIC8qIGsgPSA1ICovCisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICA1NjUsIDV9LCB7ICAgICAyOCwgNn0sIHsgICAgIDE1LCA1fSwgeyAgICAgMzEsIDZ9LCBcCisgICAgeyAgICAgMTYsIDV9LCB7ICAgICAzMywgNn0sIHsgICAgIDI5LCA3fSwgeyAgICAgMTUsIDZ9LCBcCisgICAgeyAgICAgMzMsIDd9LCB7ICAgICAxNywgNn0sIHsgICAgIDM2LCA3fSwgeyAgICAgMTksIDZ9LCBcCisgICAgeyAgICAgMzksIDd9LCB7ICAgICAyMSwgNn0sIHsgICAgIDQzLCA3fSwgeyAgICAgMjMsIDZ9LCBcCisgICAgeyAgICAgNDcsIDd9LCB7ICAgICAyOSwgOH0sIHsgICAgIDE1LCA3fSwgeyAgICAgMzUsIDh9LCBcCisgICAgeyAgICAgMTksIDd9LCB7ICAgICA0MywgOH0sIHsgICAgIDIzLCA3fSwgeyAgICAgNDcsIDh9LCBcCisgICAgeyAgICAgMjcsIDd9LCB7ICAgICA1NSwgOX0sIHsgICAgIDE1LCA4fSwgeyAgICAgMzEsIDd9LCBcCisgICAgeyAgICAgNjMsIDh9LCB7ICAgICA0MywgOX0sIHsgICAgIDIzLCA4fSwgeyAgICAgNTUsIDl9LCBcCisgICAgeyAgICAgMzEsIDh9LCB7ICAgICA3MSwgOX0sIHsgICAgIDM5LCA4fSwgeyAgICAgODMsIDl9LCBcCisgICAgeyAgICAgNDcsIDh9LCB7ICAgICA5NSwgOX0sIHsgICAgIDU1LDEwfSwgeyAgICAgMzEsIDl9LCBcCisgICAgeyAgICAgNzksMTB9LCB7ICAgICA0NywgOX0sIHsgICAgIDk1LDExfSwgeyAgICAgMzEsMTB9LCBcCisgICAgeyAgICAgNjMsIDl9LCB7ICAgIDEzNSwxMH0sIHsgICAgIDc5LCA5fSwgeyAgICAxNTksMTB9LCBcCisgICAgeyAgICAgOTUsIDl9LCB7ICAgIDE5MSwxMH0sIHsgICAgMTExLDExfSwgeyAgICAgNjMsMTB9LCBcCisgICAgeyAgICAxNDMsIDl9LCB7ICAgIDI4NywxMH0sIHsgICAgMTU5LDExfSwgeyAgICAgOTUsMTB9LCBcCisgICAgeyAgICAxOTEsIDZ9LCB7ICAgMzE5OSwgN30sIHsgICAxNzI3LCA5fSwgeyAgICA0NDcsMTB9LCBcCisgICAgeyAgICAyMzksIDl9LCB7ICAgIDQ3OSwxMH0sIHsgICAgMjg3LDExfSwgeyAgICAxNTksMTB9LCBcCisgICAgeyAgICAzMTksIDl9LCB7ICAgIDYzOSwxMH0sIHsgICAgMzM1LCA5fSwgeyAgICA2NzEsMTF9LCBcCisgICAgeyAgICAxOTEsMTB9LCB7ICAgIDM5OSwgOX0sIHsgICAgNzk5LDEwfSwgeyAgICA0MTUsMTF9LCBcCisgICAgeyAgICAyMjMsMTJ9LCB7ICAgIDEyNywxMX0sIHsgICAgMjU1LDEwfSwgeyAgICA1MTEsIDl9LCBcCisgICAgeyAgIDEwMjMsMTB9LCB7ICAgIDUyNywxMX0sIHsgICAgMjg3LDEwfSwgeyAgICA2MDcsMTF9LCBcCisgICAgeyAgICAzMTksMTB9LCB7ICAgIDY3MSwxMn0sIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTB9LCBcCisgICAgeyAgICA3OTksMTF9LCB7ICAgIDQxNSwxM30sIHsgICAgMTI3LDEyfSwgeyAgICAyNTUsMTF9LCBcCisgICAgeyAgICA1MTEsMTB9LCB7ICAgMTAyMywxMX0sIHsgICAgNTQzLDEwfSwgeyAgIDEwODcsMTF9LCBcCisgICAgeyAgICA2MDcsMTJ9LCB7ICAgIDMxOSwxMX0sIHsgICAgNjcxLDEwfSwgeyAgIDEzNDMsMTF9LCBcCisgICAgeyAgICA3MzUsMTJ9LCB7ICAgIDM4MywxMX0sIHsgICAgNzk5LDEwfSwgeyAgIDE1OTksMTF9LCBcCisgICAgeyAgICA4NjMsMTJ9LCB7ICAgIDQ0NywxMX0sIHsgICAgOTkxLDEzfSwgeyAgICAyNTUsMTJ9LCBcCisgICAgeyAgICA1MTEsMTF9LCB7ICAgMTA4NywxMn0sIHsgICAgNTc1LDExfSwgeyAgIDEyMTUsMTJ9LCBcCisgICAgeyAgICA2MzksMTF9LCB7ICAgMTM0MywxMn0sIHsgICAgNzAzLDExfSwgeyAgIDE0MDcsMTN9LCBcCisgICAgeyAgICAzODMsMTJ9LCB7ICAgIDc2NywxMX0sIHsgICAxNTk5LDEyfSwgeyAgICA4MzEsMTF9LCBcCisgICAgeyAgIDE3MjcsMTJ9LCB7ICAgIDk1OSwxMX0sIHsgICAxOTE5LDE0fSwgeyAgICAyNTUsMTN9LCBcCisgICAgeyAgICA1MTEsMTJ9LCB7ICAgMTA4NywxMX0sIHsgICAyMjM5LDEyfSwgeyAgIDEyMTUsMTN9LCBcCisgICAgeyAgICA2MzksMTJ9LCB7ICAgMTQ3MSwxM30sIHsgICAgNzY3LDEyfSwgeyAgIDE3MjcsMTN9LCBcCisgICAgeyAgICA4OTUsMTJ9LCB7ICAgMTkxOSwxNH0sIHsgICAgNTExLDEzfSwgeyAgIDEwMjMsMTJ9LCBcCisgICAgeyAgIDIyMzksMTN9LCB7ICAgMTE1MSwxMn0sIHsgICAyNDMxLDEzfSwgeyAgIDEyNzksMTJ9LCBcCisgICAgeyAgIDI2MjMsMTN9LCB7ICAgMTQwNywxNH0sIHsgICAgNzY3LDEzfSwgeyAgIDE2NjMsMTJ9LCBcCisgICAgeyAgIDM0NTUsMTN9LCB7ICAgMTkxOSwxNX0sIHsgICAgNTExLDE0fSwgeyAgIDEwMjMsMTN9LCBcCisgICAgeyAgIDIxNzUsMTJ9LCB7ICAgNDQ3OSwxM30sIHsgICAyNDMxLDE0fSwgeyAgIDEyNzksMTN9LCBcCisgICAgeyAgIDI5NDMsMTJ9LCB7ICAgNTg4NywxNH0sIHsgICAxNTM1LDEzfSwgeyAgIDM0NTUsMTR9LCBcCisgICAgeyAgIDE3OTEsMTN9LCB7ICAgMzk2NywxNX0sIHsgICAxMDIzLDE0fSwgeyAgIDIwNDcsMTN9LCBcCisgICAgeyAgIDQ0NzksMTR9LCB7ICAgMjMwMywxM30sIHsgICA0OTkxLDE0fSwgeyAgIDI1NTksMTN9LCBcCisgICAgeyAgIDUzNzUsMTR9LCB7ICAgMjgxNSwxM30sIHsgICA1ODg3LDE1fSwgeyAgIDE1MzUsMTR9LCBcCisgICAgeyAgIDM4MzksMTZ9IH0KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTNfU0laRSAxNjUKKyNkZWZpbmUgTVVMX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDc4MDgKKworI2RlZmluZSBTUVJfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDU2MCAgLyogayA9IDUgKi8KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDU2MCwgNX0sIHsgICAgIDI5LCA2fSwgeyAgICAgMTUsIDV9LCB7ICAgICAzMSwgNn0sIFwKKyAgICB7ICAgICAxNiwgNX0sIHsgICAgIDMzLCA2fSwgeyAgICAgMTcsIDV9LCB7ICAgICAzNiwgNn0sIFwKKyAgICB7ICAgICAyOSwgN30sIHsgICAgIDE1LCA2fSwgeyAgICAgMzMsIDd9LCB7ICAgICAxNywgNn0sIFwKKyAgICB7ICAgICAzNiwgN30sIHsgICAgIDE5LCA2fSwgeyAgICAgNDAsIDd9LCB7ICAgICAyMSwgNn0sIFwKKyAgICB7ICAgICA0MywgN30sIHsgICAgIDIzLCA2fSwgeyAgICAgNDcsIDd9LCB7ICAgICAyOSwgOH0sIFwKKyAgICB7ICAgICAxNSwgN30sIHsgICAgIDM1LCA4fSwgeyAgICAgMTksIDd9LCB7ICAgICA0MywgOH0sIFwKKyAgICB7ICAgICAyMywgN30sIHsgICAgIDQ5LCA4fSwgeyAgICAgMjcsIDd9LCB7ICAgICA1NSwgOX0sIFwKKyAgICB7ICAgICAxNSwgOH0sIHsgICAgIDMxLCA3fSwgeyAgICAgNjMsIDh9LCB7ICAgICA0MywgOX0sIFwKKyAgICB7ICAgICAyMywgOH0sIHsgICAgIDU1LDEwfSwgeyAgICAgMTUsIDl9LCB7ICAgICAzMSwgOH0sIFwKKyAgICB7ICAgICA2NywgOX0sIHsgICAgIDM5LCA4fSwgeyAgICAgNzksIDl9LCB7ICAgICA0NywgOH0sIFwKKyAgICB7ICAgICA5NSwgOX0sIHsgICAgIDU1LDEwfSwgeyAgICAgMzEsIDl9LCB7ICAgICA3OSwxMH0sIFwKKyAgICB7ICAgICA0NywgOX0sIHsgICAgIDk1LDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA2MywgOX0sIFwKKyAgICB7ICAgIDEzNSwxMH0sIHsgICAgIDc5LCA5fSwgeyAgICAxNTksMTB9LCB7ICAgICA5NSwxMX0sIFwKKyAgICB7ICAgICA2MywxMH0sIHsgICAgMTQzLCA5fSwgeyAgICAyODcsMTB9LCB7ICAgIDE1OSwxMX0sIFwKKyAgICB7ICAgICA5NSwxMn0sIHsgICAgIDYzLDExfSwgeyAgICAxMjcsIDl9LCB7ICAgIDUxMSwgNX0sIFwKKyAgICB7ICAgODk1OSwgN30sIHsgICAyNDMxLCA4fSwgeyAgIDEyNDcsIDd9LCB7ICAgMjQ5NSwgOH0sIFwKKyAgICB7ICAgMTI3OSwgOX0sIHsgICAgNjcxLDEwfSwgeyAgICAzNjcsMTF9LCB7ICAgIDE5MSwxMH0sIFwKKyAgICB7ICAgIDM5OSwgOX0sIHsgICAgNzk5LDEwfSwgeyAgICA0MTUsMTJ9LCB7ICAgIDEyNywxMX0sIFwKKyAgICB7ICAgIDI1NSwxMH0sIHsgICAgNTI3LDExfSwgeyAgICAyODcsMTB9LCB7ICAgIDYwNywxMX0sIFwKKyAgICB7ICAgIDMxOSwxMH0sIHsgICAgNjcxLDExfSwgeyAgICAzNTEsMTB9LCB7ICAgIDcwMywxMn0sIFwKKyAgICB7ICAgIDE5MSwxMX0sIHsgICAgMzgzLDEwfSwgeyAgICA3OTksMTF9LCB7ICAgIDQxNSwxMH0sIFwKKyAgICB7ICAgIDgzMSwxM30sIHsgICAgMTI3LDExfSwgeyAgICA1NDMsMTB9LCB7ICAgMTExOSwxMX0sIFwKKyAgICB7ICAgIDYwNywxMn0sIHsgICAgMzE5LDExfSwgeyAgICA2NzEsMTB9LCB7ICAgMTM0MywxMX0sIFwKKyAgICB7ICAgIDczNSwxMn0sIHsgICAgMzgzLDExfSwgeyAgICA4NjMsMTJ9LCB7ICAgIDQ0NywxMX0sIFwKKyAgICB7ICAgIDk5MSwxMn0sIHsgICAgNTExLDExfSwgeyAgIDExMTksMTJ9LCB7ICAgIDU3NSwxMX0sIFwKKyAgICB7ICAgMTIxNSwxMn0sIHsgICAgNjM5LDExfSwgeyAgIDEzNDMsMTJ9LCB7ICAgIDcwMywxM30sIFwKKyAgICB7ICAgIDM4MywxMn0sIHsgICAgNzY3LDExfSwgeyAgIDE1OTksMTJ9LCB7ICAgIDgzMSwxMX0sIFwKKyAgICB7ICAgMTcyNywxMn0sIHsgICAgOTU5LDExfSwgeyAgIDE5ODMsMTN9LCB7ICAgIDUxMSwxMn0sIFwKKyAgICB7ICAgMTA4NywxMX0sIHsgICAyMjM5LDEyfSwgeyAgIDEyMTUsMTN9LCB7ICAgIDYzOSwxMn0sIFwKKyAgICB7ICAgMTQ3MSwxM30sIHsgICAgNzY3LDEyfSwgeyAgIDE3MjcsMTN9LCB7ICAgIDg5NSwxMn0sIFwKKyAgICB7ICAgMTk4MywxNH0sIHsgICAgNTExLDEzfSwgeyAgIDEwMjMsMTJ9LCB7ICAgMjIzOSwxM30sIFwKKyAgICB7ICAgMTE1MSwxMn0sIHsgICAyNDk1LDEzfSwgeyAgIDEyNzksMTJ9LCB7ICAgMjYyMywxM30sIFwKKyAgICB7ICAgMTQwNywxNH0sIHsgICAgNzY3LDEzfSwgeyAgIDE2NjMsMTJ9LCB7ICAgMzQ1NSwxM30sIFwKKyAgICB7ICAgMTkxOSwxNX0sIHsgICAgNTExLDE0fSwgeyAgIDEwMjMsMTN9LCB7ICAgMjE3NSwxMn0sIFwKKyAgICB7ICAgNDQ3OSwxM30sIHsgICAyNDMxLDE0fSwgeyAgIDEyNzksMTN9LCB7ICAgMjk0MywxMn0sIFwKKyAgICB7ICAgNTg4NywxNH0sIHsgICAxNTM1LDEzfSwgeyAgIDM0NTUsMTR9LCB7ICAgMTc5MSwxM30sIFwKKyAgICB7ICAgMzk2NywxNX0sIHsgICAxMDIzLDE0fSwgeyAgIDIwNDcsMTN9LCB7ICAgNDQ3OSwxNH0sIFwKKyAgICB7ICAgMjMwMywxM30sIHsgICA0OTkxLDEyfSwgeyAgIDk5ODMsMTR9LCB7ICAgMjU1OSwxM30sIFwKKyAgICB7ICAgNTExOSwxNH0sIHsgICAyODE1LDEzfSwgeyAgIDU4ODcsMTV9LCB7ICAgMTUzNSwxNH0sIFwKKyAgICB7ICAgMzMyNywxM30sIHsgICA2OTExLDE0fSwgeyAgIDM4MzksMTZ9IH0KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTNfU0laRSAxNTkKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDU1NjgKKworI2RlZmluZSBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAxNworI2RlZmluZSBNVUxMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICA0MAorI2RlZmluZSBNVUxMT19NVUxfTl9USFJFU0hPTEQgICAgICAgICAgICAxNDI4MQorI2RlZmluZSBTUVJMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIFNRUkxPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTQxCisjZGVmaW5lIFNRUkxPX1NRUl9USFJFU0hPTEQgICAgICAgICAgICAgIDEwODIxCisKKyNkZWZpbmUgRENfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgRENfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAxOTAKKyNkZWZpbmUgRENfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNjcKKyNkZWZpbmUgRENfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyNTQKKworI2RlZmluZSBJTlZfTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICA1NAorI2RlZmluZSBJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE1NworI2RlZmluZSBJTlZfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDE2MworCisjZGVmaW5lIEJJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgMjM2CisjZGVmaW5lIFJFRENfMV9UT19SRURDX05fVEhSRVNIT0xEICAgICAgICAgIDc5CisKKyNkZWZpbmUgTVVfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE4OTUKKyNkZWZpbmUgTVVfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgIDE3MTgKKyNkZWZpbmUgTVVQSV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgNTQKKyNkZWZpbmUgTVVfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgIDE1ODkKKyNkZWZpbmUgTVVfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE4OTgKKworI2RlZmluZSBQT1dNX1NFQ19UQUJMRSAgMSwxNiw5NSw0ODAsMTQ0MgorCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgIDE2CisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgMzcyCisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAxMDM3CisKKyNkZWZpbmUgRkFDX0RTQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAxNDEKKyNkZWZpbmUgRkFDX09ERF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgMzQKKworI2RlZmluZSBNQVRSSVgyMl9TVFJBU1NFTl9USFJFU0hPTEQgICAgICAgICAyMQorI2RlZmluZSBIR0NEMl9ESVYxX01FVEhPRCAgICAgICAgICAgICAgICAgICAgMyAgLyogNi4yNiUgZmFzdGVyIHRoYW4gMSAqLworI2RlZmluZSBIR0NEX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgICA3MAorI2RlZmluZSBIR0NEX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDEyOQorI2RlZmluZSBIR0NEX1JFRFVDRV9USFJFU0hPTEQgICAgICAgICAgICAgMzY2NAorI2RlZmluZSBHQ0RfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDU3MworI2RlZmluZSBHQ0RFWFRfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDQ4MworI2RlZmluZSBKQUNPQklfQkFTRV9NRVRIT0QgICAgICAgICAgICAgICAgICAgMSAgLyogMjcuMDElIGZhc3RlciB0aGFuIDMgKi8KKworLyogVHVuZXVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIHRvb2sgMzUyMzIgc2Vjb25kcyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvY29yZWluaG0vZ21wLW1wYXJhbS5oIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvY29yZWluaG0vZ21wLW1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0MjhiNGIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9jb3JlaW5obS9nbXAtbXBhcmFtLmgKQEAgLTAsMCArMSwyMjMgQEAKKy8qIHg4Ni9jb3JlaW5obSBnbXAtbXBhcmFtLmggLS0gQ29tcGlsZXIvbWFjaGluZSBwYXJhbWV0ZXIgaGVhZGVyIGZpbGUuCisKK0NvcHlyaWdodCAyMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgMzIKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgNAorCisvKiAyOTMzLTMyMDAgTUh6IEludGVsIFhlb24gWDM0NzAgTmVoYWxlbSAqLworLyogRkZUIHR1bmluZyBsaW1pdCA9IDY3LDAwMCwwMDAgKi8KKy8qIEdlbmVyYXRlZCBieSB0dW5ldXAuYywgMjAxOS0xMC0yMywgZ2NjIDguMyAqLworCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgIDM2CisjZGVmaW5lIE1PRF8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgIDQwCisjZGVmaW5lIE1PRF8xTl9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA4CisjZGVmaW5lIE1PRF8xVV9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA3CisjZGVmaW5lIE1PRF8xXzFfVE9fTU9EXzFfMl9USFJFU0hPTEQgICAgICAgIDEyCisjZGVmaW5lIE1PRF8xXzJfVE9fTU9EXzFfNF9USFJFU0hPTEQgICAgICAgICAwICAvKiBuZXZlciBtcG5fbW9kXzFzXzJwICovCisjZGVmaW5lIFBSRUlOVl9NT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgICAzCisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAgICAxICAvKiBuYXRpdmUgKi8KKyNkZWZpbmUgRElWX1FSXzFOX1BJMV9NRVRIT0QgICAgICAgICAgICAgICAgIDEgIC8qIDQyLjU5JSBmYXN0ZXIgdGhhbiAyICovCisjZGVmaW5lIERJVl9RUl8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVl9RUl8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVl9RUl8yX1BJMl9USFJFU0hPTEQgICAgICAgICAgICAgICA5CisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgICAgICAgMTcKKworI2RlZmluZSBESVZfMV9WU19NVUxfMV9QRVJDRU5UICAgICAgICAgICAgIDI4OAorCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDkzCisjZGVmaW5lIE1VTF9UT09NNDRfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjE0CisjZGVmaW5lIE1VTF9UT09NNkhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMzA2CisjZGVmaW5lIE1VTF9UT09NOEhfVEhSRVNIT0xEICAgICAgICAgICAgICAgNDMwCisKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNDNfVEhSRVNIT0xEICAgICAgOTMKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxMzQKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxNDUKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNjNfVEhSRVNIT0xEICAgICAgOTQKKyNkZWZpbmUgTVVMX1RPT000M19UT19UT09NNTRfVEhSRVNIT0xEICAgICAxMTgKKworI2RlZmluZSBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDM4CisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTMzCisjZGVmaW5lIFNRUl9UT09NNF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjEyCisjZGVmaW5lIFNRUl9UT09NNl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMzE4CisjZGVmaW5lIFNRUl9UT09NOF9USFJFU0hPTEQgICAgICAgICAgICAgICAgNjIwCisKKyNkZWZpbmUgTVVMTUlEX1RPT000Ml9USFJFU0hPTEQgICAgICAgICAgICAgNjgKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxNworI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAyMworCisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgNTk1ICAvKiBrID0gNSAqLworI2RlZmluZSBNVUxfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgNTk1LCA1fSwgeyAgICAgMjgsIDZ9LCB7ICAgICAxNSwgNX0sIHsgICAgIDMxLCA2fSwgXAorICAgIHsgICAgIDE3LCA1fSwgeyAgICAgMzUsIDZ9LCB7ICAgICAyOCwgN30sIHsgICAgIDE1LCA2fSwgXAorICAgIHsgICAgIDMzLCA3fSwgeyAgICAgMTcsIDZ9LCB7ICAgICAzNiwgN30sIHsgICAgIDE5LCA2fSwgXAorICAgIHsgICAgIDM5LCA3fSwgeyAgICAgMjMsIDZ9LCB7ICAgICA0NywgN30sIHsgICAgIDI3LCA4fSwgXAorICAgIHsgICAgIDE1LCA3fSwgeyAgICAgMzUsIDh9LCB7ICAgICAxOSwgN30sIHsgICAgIDQzLCA4fSwgXAorICAgIHsgICAgIDIzLCA3fSwgeyAgICAgNDksIDh9LCB7ICAgICAyNywgOX0sIHsgICAgIDE1LCA4fSwgXAorICAgIHsgICAgIDMxLCA3fSwgeyAgICAgNjMsIDh9LCB7ICAgICA0MywgOX0sIHsgICAgIDIzLCA4fSwgXAorICAgIHsgICAgIDUxLCA5fSwgeyAgICAgMzEsIDh9LCB7ICAgICA2NywgOX0sIHsgICAgIDM5LCA4fSwgXAorICAgIHsgICAgIDc5LCA5fSwgeyAgICAgNDcsIDh9LCB7ICAgICA5OSwgOX0sIHsgICAgIDU1LDEwfSwgXAorICAgIHsgICAgIDMxLCA5fSwgeyAgICAgNjMsIDh9LCB7ICAgIDEyNywgOX0sIHsgICAgIDc5LDEwfSwgXAorICAgIHsgICAgIDQ3LCA5fSwgeyAgICAgOTUsMTF9LCB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA5fSwgXAorICAgIHsgICAgMTM1LDEwfSwgeyAgICAgNzksIDl9LCB7ICAgIDE1OSwxMH0sIHsgICAgIDk1LCA5fSwgXAorICAgIHsgICAgMTkxLDExfSwgeyAgICAgNjMsIDl9LCB7ICAgIDI1NSwxMH0sIHsgICAgMTU5LDExfSwgXAorICAgIHsgICAgIDk1LDEwfSwgeyAgICAxOTEsMTJ9LCB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgXAorICAgIHsgICAgMjU1LCA5fSwgeyAgICA1MTEsMTB9LCB7ICAgIDI3MSwgOX0sIHsgICAgNTQzLDExfSwgXAorICAgIHsgICAgMTU5LDEwfSwgeyAgICAzMzUsMTF9LCB7ICAgIDE5MSwxMH0sIHsgICAgMzgzLCA5fSwgXAorICAgIHsgICAgNzY3LDEwfSwgeyAgICAzOTksMTJ9LCB7ICAgIDEyNywxMX0sIHsgICAgMjU1LDEwfSwgXAorICAgIHsgICAgNTExLCA5fSwgeyAgIDEwMjMsMTB9LCB7ICAgIDU0MywgOX0sIHsgICAxMDg3LDExfSwgXAorICAgIHsgICAgMjg3LDEwfSwgeyAgICA2MDcsMTF9LCB7ICAgIDMxOSwxMH0sIHsgICAgNjcxLDEyfSwgXAorICAgIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTB9LCB7ICAgIDc2NywxM30sIHsgICAgMTI3LDEyfSwgXAorICAgIHsgICAgMjU1LDExfSwgeyAgICA1MTEsMTB9LCB7ICAgMTAyMywxMX0sIHsgICAgNTQzLDEwfSwgXAorICAgIHsgICAxMTE5LDExfSwgeyAgICA2MDcsMTJ9LCB7ICAgIDMxOSwxMX0sIHsgICAgNjcxLDEwfSwgXAorICAgIHsgICAxMzQzLDExfSwgeyAgICA3MzUsMTB9LCB7ICAgMTQ3MSwxMn0sIHsgICAgMzgzLDExfSwgXAorICAgIHsgICAgNzk5LDEwfSwgeyAgIDE1OTksMTF9LCB7ICAgIDg2MywxMH0sIHsgICAxNzI3LDEyfSwgXAorICAgIHsgICAgNDQ3LDExfSwgeyAgICA5NTksMTN9LCB7ICAgIDI1NSwxMn0sIHsgICAgNTExLDExfSwgXAorICAgIHsgICAxMTE5LDEyfSwgeyAgICA1NzUsMTF9LCB7ICAgMTIxNSwxMH0sIHsgICAyNDMxLDEyfSwgXAorICAgIHsgICAgNjM5LDExfSwgeyAgIDEzNDMsMTJ9LCB7ICAgIDcwMywxMX0sIHsgICAxNDcxLDEwfSwgXAorICAgIHsgICAyOTQzLDEzfSwgeyAgICAzODMsMTJ9LCB7ICAgIDc2NywxMX0sIHsgICAxNTk5LDEyfSwgXAorICAgIHsgICAgODMxLDExfSwgeyAgIDE3MjcsMTB9LCB7ICAgMzQ1NSwxMn0sIHsgICAgOTU5LDE0fSwgXAorICAgIHsgICAgMjU1LDEzfSwgeyAgICA1MTEsMTJ9LCB7ICAgMTA4NywxMX0sIHsgICAyMjM5LDEwfSwgXAorICAgIHsgICA0NDc5LDEyfSwgeyAgIDEyMTUsMTF9LCB7ICAgMjQzMSwxM30sIHsgICAgNjM5LDEyfSwgXAorICAgIHsgICAxNDcxLDExfSwgeyAgIDI5NDMsMTN9LCB7ICAgIDc2NywxMn0sIHsgICAxNzI3LDExfSwgXAorICAgIHsgICAzNDU1LDEzfSwgeyAgICA4OTUsMTJ9LCB7ICAgMTk4MywxNH0sIHsgICAgNTExLDEzfSwgXAorICAgIHsgICAxMDIzLDEyfSwgeyAgIDIyMzksMTF9LCB7ICAgNDQ3OSwxM30sIHsgICAxMTUxLDEyfSwgXAorICAgIHsgICAyNDMxLDEzfSwgeyAgIDEyNzksMTJ9LCB7ICAgMjU1OSwxM30sIHsgICAxNDA3LDEyfSwgXAorICAgIHsgICAyOTQzLDExfSwgeyAgIDU4ODcsMTR9LCB7ICAgIDc2NywxM30sIHsgICAxNjYzLDEyfSwgXAorICAgIHsgICAzNDU1LDEzfSwgeyAgIDE5MTksMTJ9LCB7ICAgMzgzOSwxNX0sIHsgICAgNTExLDE0fSwgXAorICAgIHsgICAxMDIzLDEzfSwgeyAgIDIxNzUsMTJ9LCB7ICAgNDQ3OSwxM30sIHsgICAyNDMxLDE0fSwgXAorICAgIHsgICAxMjc5LDEzfSwgeyAgIDI5NDMsMTJ9LCB7ICAgNTg4NywxNH0sIHsgICAxNTM1LDEzfSwgXAorICAgIHsgICAzNDU1LDE0fSwgeyAgIDE3OTEsMTN9LCB7ICAgMzk2NywxNX0sIHsgICAxMDIzLDE0fSwgXAorICAgIHsgICAyMDQ3LDEzfSwgeyAgIDQ0NzksMTR9LCB7ICAgMjMwMywxM30sIHsgICA0OTkxLDEyfSwgXAorICAgIHsgICA5OTgzLDE0fSwgeyAgIDI4MTUsMTN9LCB7ICAgNjAxNSwxNX0sIHsgICAxNTM1LDE0fSwgXAorICAgIHsgICAzODM5LDEzfSwgeyAgIDc2NzksMTZ9IH0KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTNfU0laRSAxNzAKKyNkZWZpbmUgTVVMX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDY3ODQKKworI2RlZmluZSBTUVJfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDUyNSAgLyogayA9IDUgKi8KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDUyNSwgNX0sIHsgICAgIDI5LCA2fSwgeyAgICAgMTUsIDV9LCB7ICAgICAzMywgNn0sIFwKKyAgICB7ICAgICAxNywgNX0sIHsgICAgIDM1LCA2fSwgeyAgICAgMjksIDd9LCB7ICAgICAxNSwgNn0sIFwKKyAgICB7ICAgICAzMywgN30sIHsgICAgIDE3LCA2fSwgeyAgICAgMzUsIDd9LCB7ICAgICAxOSwgNn0sIFwKKyAgICB7ICAgICAzOSwgN30sIHsgICAgIDIzLCA2fSwgeyAgICAgNDcsIDd9LCB7ICAgICAyOSwgOH0sIFwKKyAgICB7ICAgICAxNSwgN30sIHsgICAgIDM1LCA4fSwgeyAgICAgMTksIDd9LCB7ICAgICA0MSwgOH0sIFwKKyAgICB7ICAgICAyMywgN30sIHsgICAgIDQ5LCA4fSwgeyAgICAgMjcsIDd9LCB7ICAgICA1NSwgOX0sIFwKKyAgICB7ICAgICAxNSwgOH0sIHsgICAgIDMxLCA3fSwgeyAgICAgNjMsIDh9LCB7ICAgICAzOSwgOX0sIFwKKyAgICB7ICAgICAyMywgOH0sIHsgICAgIDU1LCA5fSwgeyAgICAgMzEsIDh9LCB7ICAgICA2NywgOX0sIFwKKyAgICB7ICAgICAzOSwgOH0sIHsgICAgIDc5LCA5fSwgeyAgICAgNDcsIDh9LCB7ICAgICA5NSwgOX0sIFwKKyAgICB7ICAgICA1NSwxMH0sIHsgICAgIDMxLCA5fSwgeyAgICAgNzksMTB9LCB7ICAgICA0NywgOX0sIFwKKyAgICB7ICAgICA5NSwxMX0sIHsgICAgIDMxLDEwfSwgeyAgICAgNjMsIDl9LCB7ICAgIDEzNSwxMH0sIFwKKyAgICB7ICAgICA3OSwgOX0sIHsgICAgMTU5LDEwfSwgeyAgICAgOTUsMTF9LCB7ICAgICA2MywxMH0sIFwKKyAgICB7ICAgIDE0MywgOX0sIHsgICAgMjg3LDEwfSwgeyAgICAxNTksIDZ9LCB7ICAgMjY4NywgN30sIFwKKyAgICB7ICAgMTQwNywgOX0sIHsgICAgMzY3LCA4fSwgeyAgICA3MzUsIDl9LCB7ICAgIDM4MywxMH0sIFwKKyAgICB7ICAgIDIwNywgOX0sIHsgICAgNDE1LDExfSwgeyAgICAxMjcsMTB9LCB7ICAgIDI3MSwgOX0sIFwKKyAgICB7ICAgIDU0MywxMH0sIHsgICAgMjg3LDExfSwgeyAgICAxNTksMTB9LCB7ICAgIDMxOSwgOX0sIFwKKyAgICB7ICAgIDYzOSwxMH0sIHsgICAgMzM1LCA5fSwgeyAgICA2NzEsMTB9LCB7ICAgIDM1MSwxMX0sIFwKKyAgICB7ICAgIDE5MSwxMH0sIHsgICAgMzgzLCA5fSwgeyAgICA3NjcsMTB9LCB7ICAgIDM5OSwgOX0sIFwKKyAgICB7ICAgIDc5OSwxMH0sIHsgICAgNDE1LDEyfSwgeyAgICAxMjcsMTF9LCB7ICAgIDI1NSwxMH0sIFwKKyAgICB7ICAgIDUxMSwgOX0sIHsgICAxMDIzLDEwfSwgeyAgICA1NDMsMTF9LCB7ICAgIDI4NywxMH0sIFwKKyAgICB7ICAgIDYwNywxMX0sIHsgICAgMzE5LDEwfSwgeyAgICA2NzEsMTF9LCB7ICAgIDM1MSwxMn0sIFwKKyAgICB7ICAgIDE5MSwxMX0sIHsgICAgMzgzLDEwfSwgeyAgICA3OTksMTF9LCB7ICAgIDQxNSwxM30sIFwKKyAgICB7ICAgIDEyNywxMn0sIHsgICAgMjU1LDExfSwgeyAgICA1MTEsMTB9LCB7ICAgMTAyMywxMX0sIFwKKyAgICB7ICAgIDU0MywxMH0sIHsgICAxMDg3LDExfSwgeyAgICA2MDcsMTB9LCB7ICAgMTIxNSwxMn0sIFwKKyAgICB7ICAgIDMxOSwxMX0sIHsgICAgNjcxLDEwfSwgeyAgIDEzNDMsMTF9LCB7ICAgIDczNSwxMH0sIFwKKyAgICB7ICAgMTQ3MSwxMn0sIHsgICAgMzgzLDExfSwgeyAgICA3OTksMTB9LCB7ICAgMTU5OSwxMX0sIFwKKyAgICB7ICAgIDg2MywxMH0sIHsgICAxNzI3LDEyfSwgeyAgICA0NDcsMTF9LCB7ICAgIDk5MSwxMH0sIFwKKyAgICB7ICAgMTk4MywxM30sIHsgICAgMjU1LDEyfSwgeyAgICA1MTEsMTF9LCB7ICAgMTExOSwxMn0sIFwKKyAgICB7ICAgIDU3NSwxMX0sIHsgICAxMjE1LDEwfSwgeyAgIDI0MzEsMTJ9LCB7ICAgIDYzOSwxMX0sIFwKKyAgICB7ICAgMTM0MywxMn0sIHsgICAgNzAzLDExfSwgeyAgIDE0NzEsMTN9LCB7ICAgIDM4MywxMn0sIFwKKyAgICB7ICAgIDc2NywxMX0sIHsgICAxNTk5LDEyfSwgeyAgICA4MzEsMTF9LCB7ICAgMTcyNywxMH0sIFwKKyAgICB7ICAgMzQ1NSwxMn0sIHsgICAgODk1LDExfSwgeyAgIDE3OTEsMTJ9LCB7ICAgIDk1OSwxMX0sIFwKKyAgICB7ICAgMTk4MywxNH0sIHsgICAgMjU1LDEzfSwgeyAgICA1MTEsMTJ9LCB7ICAgMTAyMywxMX0sIFwKKyAgICB7ICAgMjA0NywxMn0sIHsgICAxMDg3LDExfSwgeyAgIDIyMzksMTJ9LCB7ICAgMTIxNSwxMX0sIFwKKyAgICB7ICAgMjQzMSwxM30sIHsgICAgNjM5LDEyfSwgeyAgIDE0NzEsMTF9LCB7ICAgMjk0MywxM30sIFwKKyAgICB7ICAgIDc2NywxMn0sIHsgICAxNzI3LDExfSwgeyAgIDM0NTUsMTN9LCB7ICAgIDg5NSwxMn0sIFwKKyAgICB7ICAgMTk4MywxMX0sIHsgICAzOTY3LDE0fSwgeyAgICA1MTEsMTN9LCB7ICAgMTAyMywxMn0sIFwKKyAgICB7ICAgMjIzOSwxM30sIHsgICAxMTUxLDEyfSwgeyAgIDI0OTUsMTN9LCB7ICAgMTI3OSwxMn0sIFwKKyAgICB7ICAgMjYyMywxM30sIHsgICAxNDA3LDEyfSwgeyAgIDI5NDMsMTR9LCB7ICAgIDc2NywxM30sIFwKKyAgICB7ICAgMTY2MywxMn0sIHsgICAzNDU1LDEzfSwgeyAgIDE5MTksMTJ9LCB7ICAgMzk2NywxNX0sIFwKKyAgICB7ICAgIDUxMSwxNH0sIHsgICAxMDIzLDEzfSwgeyAgIDIxNzUsMTJ9LCB7ICAgNDQ3OSwxM30sIFwKKyAgICB7ICAgMjQzMSwxMn0sIHsgICA0ODYzLDE0fSwgeyAgIDEyNzksMTN9LCB7ICAgMjk0MywxMn0sIFwKKyAgICB7ICAgNTg4NywxNH0sIHsgICAxNTM1LDEzfSwgeyAgIDM0NTUsMTR9LCB7ICAgMTc5MSwxM30sIFwKKyAgICB7ICAgMzk2NywxMn0sIHsgICA3OTM1LDE1fSwgeyAgIDEwMjMsMTR9LCB7ICAgMjA0NywxM30sIFwKKyAgICB7ICAgNDQ3OSwxNH0sIHsgICAyMzAzLDEzfSwgeyAgIDQ5OTEsMTJ9LCB7ICAgOTk4MywxNH0sIFwKKyAgICB7ICAgMjgxNSwxM30sIHsgICA1ODg3LDE1fSwgeyAgIDE1MzUsMTR9LCB7ICAgMzMyNywxM30sIFwKKyAgICB7ICAgNjY1NSwxNH0sIHsgICAzODM5LDEzfSwgeyAgIDc5MzUsMTZ9IH0KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTNfU0laRSAxODcKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDUzMTIKKworI2RlZmluZSBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDQzCisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgIDEzNDYzCisjZGVmaW5lIFNRUkxPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICA5CisjZGVmaW5lIFNRUkxPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDQyCisjZGVmaW5lIFNRUkxPX1NRUl9USFJFU0hPTEQgICAgICAgICAgICAgIDEwMzIzCisKKyNkZWZpbmUgRENfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNDMKKyNkZWZpbmUgRENfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAxMzIKKyNkZWZpbmUgRENfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgODMKKyNkZWZpbmUgRENfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMzAKKworI2RlZmluZSBJTlZfTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICA0NgorI2RlZmluZSBJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE4OQorI2RlZmluZSBJTlZfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDE2NworCisjZGVmaW5lIEJJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgMzcyCisjZGVmaW5lIFJFRENfMV9UT19SRURDX05fVEhSRVNIT0xEICAgICAgICAgIDgzCisKKyNkZWZpbmUgTVVfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE1ODkKKyNkZWZpbmUgTVVfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgIDE1ODkKKyNkZWZpbmUgTVVQSV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgOTcKKyNkZWZpbmUgTVVfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgIDE1ODkKKyNkZWZpbmUgTVVfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE3MTgKKworI2RlZmluZSBQT1dNX1NFQ19UQUJMRSAgMSwyOCw5Niw0NzMsODAzCisKKyNkZWZpbmUgR0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICAgMTYKKyNkZWZpbmUgU0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAxNDUKKyNkZWZpbmUgU0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICA0MTkKKworI2RlZmluZSBGQUNfRFNDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDExNAorI2RlZmluZSBGQUNfT0REX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICA1NworCisjZGVmaW5lIE1BVFJJWDIyX1NUUkFTU0VOX1RIUkVTSE9MRCAgICAgICAgIDIwCisjZGVmaW5lIEhHQ0QyX0RJVjFfTUVUSE9EICAgICAgICAgICAgICAgICAgICAxICAvKiAxLjAzJSBmYXN0ZXIgdGhhbiAzICovCisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAgMTE3CisjZGVmaW5lIEhHQ0RfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTM3CisjZGVmaW5lIEhHQ0RfUkVEVUNFX1RIUkVTSE9MRCAgICAgICAgICAgICAzNTI0CisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgMzg5CisjZGVmaW5lIEdDREVYVF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMzE4CisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAgICA0ICAvKiA2LjEwJSBmYXN0ZXIgdGhhbiAxICovCisKKy8qIFR1bmV1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCB0b29rIDY3OTk0IHNlY29uZHMgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2NvcmVpc2JyL2dtcC1tcGFyYW0uaCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2NvcmVpc2JyL2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2Q3MDhhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvY29yZWlzYnIvZ21wLW1wYXJhbS5oCkBAIC0wLDAgKzEsMjE1IEBACisvKiB4ODYvY29yZWlzYnIgZ21wLW1wYXJhbS5oIC0tIENvbXBpbGVyL21hY2hpbmUgcGFyYW1ldGVyIGhlYWRlciBmaWxlLgorCitDb3B5cmlnaHQgMjAxOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2RlZmluZSBHTVBfTElNQl9CSVRTIDMyCisjZGVmaW5lIEdNUF9MSU1CX0JZVEVTIDQKKworLyogMzQwMC0zODAwIE1IeiBJbnRlbCBYZW9uIEUzLTEyNzAgU2FuZHkgQnJpZGdlICovCisvKiBGRlQgdHVuaW5nIGxpbWl0ID0gNjcsMDAwLDAwMCAqLworLyogR2VuZXJhdGVkIGJ5IHR1bmV1cC5jLCAyMDE5LTEwLTI0LCBnY2MgOC4zICovCisKKyNkZWZpbmUgTU9EXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgMjYKKyNkZWZpbmUgTU9EXzFOX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgIDkKKyNkZWZpbmUgTU9EXzFVX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgIDcKKyNkZWZpbmUgTU9EXzFfMV9UT19NT0RfMV8yX1RIUkVTSE9MRCAgICAgICAgMTEKKyNkZWZpbmUgTU9EXzFfMl9UT19NT0RfMV80X1RIUkVTSE9MRCAgICAgICAgIDAgIC8qIG5ldmVyIG1wbl9tb2RfMXNfMnAgKi8KKyNkZWZpbmUgUFJFSU5WX01PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgIDQKKyNkZWZpbmUgVVNFX1BSRUlOVl9ESVZSRU1fMSAgICAgICAgICAgICAgICAgIDEgIC8qIG5hdGl2ZSAqLworI2RlZmluZSBESVZfUVJfMU5fUEkxX01FVEhPRCAgICAgICAgICAgICAgICAgMiAgLyogODguMjklIGZhc3RlciB0aGFuIDEgKi8KKyNkZWZpbmUgRElWX1FSXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgMjEKKyNkZWZpbmUgRElWX1FSXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWX1FSXzJfUEkyX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgRElWRVhBQ1RfMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAobmF0aXZlKSAqLworI2RlZmluZSBCTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgICAgICAyMAorCisjZGVmaW5lIERJVl8xX1ZTX01VTF8xX1BFUkNFTlQgICAgICAgICAgICAgMjk3CisKKyNkZWZpbmUgTVVMX1RPT00yMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgTVVMX1RPT00zM19USFJFU0hPTEQgICAgICAgICAgICAgICAxMDUKKyNkZWZpbmUgTVVMX1RPT000NF9USFJFU0hPTEQgICAgICAgICAgICAgICAxOTAKKyNkZWZpbmUgTVVMX1RPT002SF9USFJFU0hPTEQgICAgICAgICAgICAgICAyOTQKKyNkZWZpbmUgTVVMX1RPT004SF9USFJFU0hPTEQgICAgICAgICAgICAgICA0NzgKKworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT000M19USFJFU0hPTEQgICAgIDEwOQorI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT001M19USFJFU0hPTEQgICAgIDE0NAorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT001M19USFJFU0hPTEQgICAgIDExNgorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT002M19USFJFU0hPTEQgICAgIDEyOQorI2RlZmluZSBNVUxfVE9PTTQzX1RPX1RPT001NF9USFJFU0hPTEQgICAgIDE2MAorCisjZGVmaW5lIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNDgKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNjMKKyNkZWZpbmUgU1FSX1RPT000X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyNTAKKyNkZWZpbmUgU1FSX1RPT002X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzNTQKKyNkZWZpbmUgU1FSX1RPT004X1RIUkVTSE9MRCAgICAgICAgICAgICAgICA1MDIKKworI2RlZmluZSBNVUxNSURfVE9PTTQyX1RIUkVTSE9MRCAgICAgICAgICAgICA5OAorCisjZGVmaW5lIE1VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE5CisjZGVmaW5lIFNRUk1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDIzCisKKyNkZWZpbmUgTVVMX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICA2NjYgIC8qIGsgPSA1ICovCisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICA2NjYsIDV9LCB7ICAgICAyOCwgNn0sIHsgICAgIDE1LCA1fSwgeyAgICAgMzEsIDZ9LCBcCisgICAgeyAgICAgMjgsIDd9LCB7ICAgICAxNSwgNn0sIHsgICAgIDMzLCA3fSwgeyAgICAgMTcsIDZ9LCBcCisgICAgeyAgICAgMzYsIDd9LCB7ICAgICAxOSwgNn0sIHsgICAgIDM5LCA3fSwgeyAgICAgMjMsIDZ9LCBcCisgICAgeyAgICAgNDcsIDd9LCB7ICAgICAyOSwgOH0sIHsgICAgIDE1LCA3fSwgeyAgICAgMzUsIDh9LCBcCisgICAgeyAgICAgMTksIDd9LCB7ICAgICA0MSwgOH0sIHsgICAgIDIzLCA3fSwgeyAgICAgNDksIDh9LCBcCisgICAgeyAgICAgMjcsIDd9LCB7ICAgICA1NSwgOH0sIHsgICAgIDMxLCA3fSwgeyAgICAgNjMsIDh9LCBcCisgICAgeyAgICAgNDMsIDl9LCB7ICAgICAyMywgOH0sIHsgICAgIDU1LCA5fSwgeyAgICAgMzEsIDh9LCBcCisgICAgeyAgICAgNzEsIDl9LCB7ICAgICAzOSwgOH0sIHsgICAgIDc5LCA5fSwgeyAgICAgNDcsIDh9LCBcCisgICAgeyAgICAgOTksIDl9LCB7ICAgICA1NSwxMH0sIHsgICAgIDMxLCA5fSwgeyAgICAgNzksMTB9LCBcCisgICAgeyAgICAgNDcsIDl9LCB7ICAgICA5NSwxMX0sIHsgICAgIDMxLDEwfSwgeyAgICAgNjMsIDl9LCBcCisgICAgeyAgICAxMzUsMTB9LCB7ICAgICA3OSwgOX0sIHsgICAgMTU5LDEwfSwgeyAgICAgOTUsIDl9LCBcCisgICAgeyAgICAxOTEsMTF9LCB7ICAgICA2MywxMH0sIHsgICAgMTU5LCA3fSwgeyAgIDEzNDMsIDh9LCBcCisgICAgeyAgICA3MDMsIDl9LCB7ICAgIDM2NywgOH0sIHsgICAgNzM1LCA5fSwgeyAgICAzODMsMTB9LCBcCisgICAgeyAgICAyMDcsMTF9LCB7ICAgIDEyNywxMH0sIHsgICAgMjU1LCA5fSwgeyAgICA1MTEsMTB9LCBcCisgICAgeyAgICAyNzEsIDl9LCB7ICAgIDU0MywxMH0sIHsgICAgMjg3LDExfSwgeyAgICAxNTksMTB9LCBcCisgICAgeyAgICAzMTksIDl9LCB7ICAgIDYzOSwxMH0sIHsgICAgMzM1LDExfSwgeyAgICAxOTEsMTB9LCBcCisgICAgeyAgICAzODMsIDl9LCB7ICAgIDc2NywxMX0sIHsgICAgMjIzLDEyfSwgeyAgICAxMjcsMTF9LCBcCisgICAgeyAgICAyNTUsMTB9LCB7ICAgIDU0MywxMX0sIHsgICAgMjg3LDEwfSwgeyAgICA2MDcsIDl9LCBcCisgICAgeyAgIDEyMTUsMTF9LCB7ICAgIDMxOSwxMH0sIHsgICAgNjcxLDEyfSwgeyAgICAxOTEsMTF9LCBcCisgICAgeyAgICAzODMsMTB9LCB7ICAgIDc5OSwxM30sIHsgICAgMTI3LDEyfSwgeyAgICAyNTUsMTF9LCBcCisgICAgeyAgICA1MTEsMTB9LCB7ICAgMTAyMywxMX0sIHsgICAgNTQzLDEwfSwgeyAgIDEwODcsMTF9LCBcCisgICAgeyAgICA2MDcsMTB9LCB7ICAgMTIxNSwxMn0sIHsgICAgMzE5LDExfSwgeyAgICA2NzEsMTB9LCBcCisgICAgeyAgIDEzNDMsMTF9LCB7ICAgIDczNSwxMH0sIHsgICAxNDcxLDEyfSwgeyAgICAzODMsMTF9LCBcCisgICAgeyAgICA3OTksMTB9LCB7ICAgMTU5OSwxMX0sIHsgICAgODYzLDEyfSwgeyAgICA0NDcsMTF9LCBcCisgICAgeyAgICA5NTksMTN9LCB7ICAgIDI1NSwxMn0sIHsgICAgNTExLDExfSwgeyAgIDEwODcsMTJ9LCBcCisgICAgeyAgICA1NzUsMTF9LCB7ICAgMTIxNSwxMn0sIHsgICAgNjM5LDExfSwgeyAgIDEzNDMsMTJ9LCBcCisgICAgeyAgICA3MDMsMTF9LCB7ICAgMTQ3MSwxM30sIHsgICAgMzgzLDEyfSwgeyAgICA3NjcsMTF9LCBcCisgICAgeyAgIDE1OTksMTJ9LCB7ICAgIDgzMSwxMX0sIHsgICAxNzI3LDEyfSwgeyAgICA5NTksMTR9LCBcCisgICAgeyAgICAyNTUsMTN9LCB7ICAgIDUxMSwxMn0sIHsgICAxMDg3LDExfSwgeyAgIDIyMzksMTJ9LCBcCisgICAgeyAgIDEyMTUsMTN9LCB7ICAgIDYzOSwxMn0sIHsgICAxNDcxLDExfSwgeyAgIDI5NDMsMTN9LCBcCisgICAgeyAgICA3NjcsMTJ9LCB7ICAgMTcyNywxMX0sIHsgICAzNDU1LDEzfSwgeyAgICA4OTUsMTJ9LCBcCisgICAgeyAgIDE5ODMsMTR9LCB7ICAgIDUxMSwxM30sIHsgICAxMDIzLDEyfSwgeyAgIDIyMzksMTN9LCBcCisgICAgeyAgIDExNTEsMTJ9LCB7ICAgMjQ5NSwxM30sIHsgICAxMjc5LDEyfSwgeyAgIDI2MjMsMTN9LCBcCisgICAgeyAgIDE0MDcsMTJ9LCB7ICAgMjk0MywxNH0sIHsgICAgNzY3LDEzfSwgeyAgIDE1MzUsMTJ9LCBcCisgICAgeyAgIDMwNzEsMTN9LCB7ICAgMTY2MywxMn0sIHsgICAzNDU1LDEzfSwgeyAgIDE5MTksMTV9LCBcCisgICAgeyAgICA1MTEsMTR9LCB7ICAgMTAyMywxM30sIHsgICAyMTc1LDEyfSwgeyAgIDQ0NzksMTN9LCBcCisgICAgeyAgIDI0MzEsMTR9LCB7ICAgMTI3OSwxM30sIHsgICAyOTQzLDEyfSwgeyAgIDU4ODcsMTR9LCBcCisgICAgeyAgIDE1MzUsMTN9LCB7ICAgMzQ1NSwxNH0sIHsgICAxNzkxLDEzfSwgeyAgIDM5NjcsMTV9LCBcCisgICAgeyAgIDEwMjMsMTR9LCB7ICAgMjA0NywxM30sIHsgICA0NDc5LDE0fSwgeyAgIDIzMDMsMTN9LCBcCisgICAgeyAgIDQ5OTEsMTJ9LCB7ICAgOTk4MywxNH0sIHsgICAyODE1LDEzfSwgeyAgIDU4ODcsMTV9LCBcCisgICAgeyAgIDE1MzUsMTR9LCB7ICAgMzgzOSwxM30sIHsgICA3Njc5LDE2fSB9CisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzX1NJWkUgMTYzCisjZGVmaW5lIE1VTF9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA3NTUyCisKKyNkZWZpbmUgU1FSX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICA1NzAgIC8qIGsgPSA1ICovCisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICA1NzAsIDV9LCB7ICAgICAyOCwgNn0sIHsgICAgIDE1LCA1fSwgeyAgICAgMzIsIDZ9LCBcCisgICAgeyAgICAgMTcsIDV9LCB7ICAgICAzNSwgNn0sIHsgICAgIDI5LCA3fSwgeyAgICAgMTUsIDZ9LCBcCisgICAgeyAgICAgMzMsIDd9LCB7ICAgICAxNywgNn0sIHsgICAgIDM2LCA3fSwgeyAgICAgMTksIDZ9LCBcCisgICAgeyAgICAgNDAsIDd9LCB7ICAgICAyMywgNn0sIHsgICAgIDQ3LCA3fSwgeyAgICAgMjksIDh9LCBcCisgICAgeyAgICAgMTUsIDd9LCB7ICAgICAzNSwgOH0sIHsgICAgIDE5LCA3fSwgeyAgICAgNDMsIDh9LCBcCisgICAgeyAgICAgMjMsIDd9LCB7ICAgICA0OSwgOH0sIHsgICAgIDI3LCA3fSwgeyAgICAgNTUsIDh9LCBcCisgICAgeyAgICAgMzEsIDd9LCB7ICAgICA2MywgOH0sIHsgICAgIDQzLCA5fSwgeyAgICAgMjMsIDh9LCBcCisgICAgeyAgICAgNTUsIDl9LCB7ICAgICAzMSwgOH0sIHsgICAgIDY3LCA5fSwgeyAgICAgMzksIDh9LCBcCisgICAgeyAgICAgNzksIDl9LCB7ICAgICA0NywgOH0sIHsgICAgIDk1LCA5fSwgeyAgICAgNTUsMTB9LCBcCisgICAgeyAgICAgMzEsIDl9LCB7ICAgICA3OSwxMH0sIHsgICAgIDQ3LCA5fSwgeyAgICAgOTUsMTF9LCBcCisgICAgeyAgICAgMzEsMTB9LCB7ICAgICA2MywgOX0sIHsgICAgMTM1LDEwfSwgeyAgICAgNzksIDl9LCBcCisgICAgeyAgICAxNTksMTB9LCB7ICAgICA5NSwxMX0sIHsgICAgIDYzLDEwfSwgeyAgICAxNTksMTF9LCBcCisgICAgeyAgICAgOTUsMTB9LCB7ICAgIDE5MSwxMn0sIHsgICAgIDYzLCA4fSwgeyAgIDEwMjMsIDl9LCBcCisgICAgeyAgICA1NDMsMTF9LCB7ICAgIDE1OSwxMH0sIHsgICAgMzE5LCA5fSwgeyAgICA2MzksMTB9LCBcCisgICAgeyAgICAzMzUsMTF9LCB7ICAgIDE5MSwxMH0sIHsgICAgMzgzLCA5fSwgeyAgICA3NjcsMTB9LCBcCisgICAgeyAgICAzOTksIDl9LCB7ICAgIDc5OSwxMn0sIHsgICAgMTI3LDExfSwgeyAgICAyNTUsMTB9LCBcCisgICAgeyAgICA1MTEsIDl9LCB7ICAgMTAyMywxMH0sIHsgICAgNTQzLDExfSwgeyAgICAyODcsMTB9LCBcCisgICAgeyAgICA2MDcsMTF9LCB7ICAgIDMxOSwxMH0sIHsgICAgNjcxLDExfSwgeyAgICAzNTEsMTJ9LCBcCisgICAgeyAgICAxOTEsMTF9LCB7ICAgIDM4MywxMH0sIHsgICAgNzk5LDEzfSwgeyAgICAxMjcsMTJ9LCBcCisgICAgeyAgICAyNTUsMTF9LCB7ICAgIDUxMSwxMH0sIHsgICAxMDIzLDExfSwgeyAgICA1NDMsMTB9LCBcCisgICAgeyAgIDEwODcsMTF9LCB7ICAgIDYwNywxMn0sIHsgICAgMzE5LDExfSwgeyAgICA2NzEsMTB9LCBcCisgICAgeyAgIDEzNDMsMTF9LCB7ICAgIDczNSwxMH0sIHsgICAxNDcxLDEyfSwgeyAgICAzODMsMTF9LCBcCisgICAgeyAgICA3OTksMTB9LCB7ICAgMTU5OSwxMX0sIHsgICAgODYzLDEyfSwgeyAgICA0NDcsMTF9LCBcCisgICAgeyAgICA5OTEsMTN9LCB7ICAgIDI1NSwxMn0sIHsgICAgNTExLDExfSwgeyAgIDEwODcsMTJ9LCBcCisgICAgeyAgICA1NzUsMTF9LCB7ICAgMTIxNSwxMn0sIHsgICAgNjM5LDExfSwgeyAgIDEzNDMsMTJ9LCBcCisgICAgeyAgICA3MDMsMTF9LCB7ICAgMTQ3MSwxM30sIHsgICAgMzgzLDEyfSwgeyAgICA3NjcsMTF9LCBcCisgICAgeyAgIDE1OTksMTJ9LCB7ICAgIDgzMSwxMX0sIHsgICAxNzI3LDEyfSwgeyAgICA5NTksMTF9LCBcCisgICAgeyAgIDE5MTksMTR9LCB7ICAgIDI1NSwxM30sIHsgICAgNTExLDEyfSwgeyAgIDEwMjMsMTF9LCBcCisgICAgeyAgIDIwNDcsMTJ9LCB7ICAgMTA4NywxMX0sIHsgICAyMjM5LDEyfSwgeyAgIDEyMTUsMTF9LCBcCisgICAgeyAgIDI0MzEsMTN9LCB7ICAgIDYzOSwxMn0sIHsgICAxNDcxLDEzfSwgeyAgICA3NjcsMTJ9LCBcCisgICAgeyAgIDE3MjcsMTN9LCB7ICAgIDg5NSwxMn0sIHsgICAxOTgzLDE0fSwgeyAgICA1MTEsMTN9LCBcCisgICAgeyAgIDEwMjMsMTJ9LCB7ICAgMjIzOSwxM30sIHsgICAxMTUxLDEyfSwgeyAgIDI0OTUsMTN9LCBcCisgICAgeyAgIDEyNzksMTJ9LCB7ICAgMjYyMywxM30sIHsgICAxNDA3LDEyfSwgeyAgIDI5NDMsMTR9LCBcCisgICAgeyAgICA3NjcsMTN9LCB7ICAgMTY2MywxMn0sIHsgICAzNDU1LDEzfSwgeyAgIDE5MTksMTJ9LCBcCisgICAgeyAgIDM5NjcsMTV9LCB7ICAgIDUxMSwxNH0sIHsgICAxMDIzLDEzfSwgeyAgIDIxNzUsMTJ9LCBcCisgICAgeyAgIDQ0NzksMTN9LCB7ICAgMjQzMSwxMn0sIHsgICA0ODYzLDE0fSwgeyAgIDEyNzksMTN9LCBcCisgICAgeyAgIDI5NDMsMTJ9LCB7ICAgNTg4NywxNH0sIHsgICAxNTM1LDEzfSwgeyAgIDM0NTUsMTR9LCBcCisgICAgeyAgIDE3OTEsMTN9LCB7ICAgMzk2NywxNX0sIHsgICAxMDIzLDE0fSwgeyAgIDIwNDcsMTN9LCBcCisgICAgeyAgIDQ0NzksMTR9LCB7ICAgMjMwMywxM30sIHsgICA0OTkxLDEyfSwgeyAgIDk5ODMsMTR9LCBcCisgICAgeyAgIDI1NTksMTN9LCB7ICAgNTExOSwxNH0sIHsgICAyODE1LDEzfSwgeyAgIDU4ODcsMTV9LCBcCisgICAgeyAgIDE1MzUsMTR9LCB7ICAgMzgzOSwxM30sIHsgICA3Njc5LDE2fSB9CisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzX1NJWkUgMTYzCisjZGVmaW5lIFNRUl9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA1NzYwCisKKyNkZWZpbmUgTVVMTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgMTYKKyNkZWZpbmUgTVVMTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgNDYKKyNkZWZpbmUgTVVMTE9fTVVMX05fVEhSRVNIT0xEICAgICAgICAgICAgMTQyODEKKyNkZWZpbmUgU1FSTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBTUVJMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgIDE1OQorI2RlZmluZSBTUVJMT19TUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAxMTMxNworCisjZGVmaW5lIERDX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDQ3CisjZGVmaW5lIERDX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAgMTkxCisjZGVmaW5lIERDX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTA3CisjZGVmaW5lIERDX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjMyCisKKyNkZWZpbmUgSU5WX01VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgNjIKKyNkZWZpbmUgSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgICAxODEKKyNkZWZpbmUgSU5WX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAxODIKKworI2RlZmluZSBCSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgIDM3OAorI2RlZmluZSBSRURDXzFfVE9fUkVEQ19OX1RIUkVTSE9MRCAgICAgICAgICA5MQorCisjZGVmaW5lIE1VX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAxODU4CisjZGVmaW5lIE1VX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAxODU4CisjZGVmaW5lIE1VUElfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDc3CisjZGVmaW5lIE1VX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAxODMwCisjZGVmaW5lIE1VX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAyMTY2CisKKyNkZWZpbmUgUE9XTV9TRUNfVEFCTEUgIDEsMTYsMTI2LDQyOCwxNDQyCisKKyNkZWZpbmUgR0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICAgMTYKKyNkZWZpbmUgU0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICA0MTgKKyNkZWZpbmUgU0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgIDExMDQKKworI2RlZmluZSBGQUNfRFNDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDE0OQorI2RlZmluZSBGQUNfT0REX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAzNAorCisjZGVmaW5lIE1BVFJJWDIyX1NUUkFTU0VOX1RIUkVTSE9MRCAgICAgICAgIDIxCisjZGVmaW5lIEhHQ0QyX0RJVjFfTUVUSE9EICAgICAgICAgICAgICAgICAgICAxICAvKiA1LjU0JSBmYXN0ZXIgdGhhbiA0ICovCisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAgIDY2CisjZGVmaW5lIEhHQ0RfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTM1CisjZGVmaW5lIEhHQ0RfUkVEVUNFX1RIUkVTSE9MRCAgICAgICAgICAgICA0Mjg0CisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgNjQyCisjZGVmaW5lIEdDREVYVF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgNDY1CisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAgICAzICAvKiAxNC43NiUgZmFzdGVyIHRoYW4gNCAqLworCisvKiBUdW5ldXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgdG9vayA0NDI0MSBzZWNvbmRzICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9kYXJ3aW4ubTQgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9kYXJ3aW4ubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ0OTIxNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2Rhcndpbi5tNApAQCAtMCwwICsxLDEwMiBAQAorZGl2ZXJ0KC0xKQorZG5sICBDb3B5cmlnaHQgMjAwNywgMjAxMSwgMjAxMiwgMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitkZWZpbmUoYERBUldJTicpCisKKworZG5sICBVc2FnZSBMRUEoc3ltYm9sLHJlZykKK2RubCAgVXNhZ2UgTEVBTChzeW1ib2xfbG9jYWxfdG9fZmlsZSxyZWcpCitkbmwKK2RubCAgV2UgbWFpbnRhaW4gbGlzdHMgb2Ygc3R1ZmYgdG8gYXBwZW5kIGluIGxvYWRfZWlwIGFuZCBkYXJ3aW5fYmQuICBUaGUKK2RubCAgYGluZGV4JyBzdHVmZiBpcyBuZWVkZWQgdG8gc3VwcHJlc3MgcmVwZWF0ZWQgZGVmaW5pdGlvbnMuICBUbyBhdm9pZAorZG5sICBnZXR0aW5nIGZvb2xlZCBieSAidmFyIiBhbmQgInZhcjEiLCB3ZSBhZGQgJ2JvbCAnICh0aGUgZW5kIG9mCitkbmwgICdpbmRpcmVjdF9zeW1ib2wnKSBhdCB0aGUgYmVnaW5uaW5nIGFuZCBhbmQgYSBuZXdsaW5lIGF0IHRoZSBlbmQuICBUaGlzCitkbmwgIG1pZ2h0IGJlIGEgYml0IGZyYWdpbGUuCisKK2RlZmluZShgTEVBJywKK200X2Fzc2VydF9udW1hcmdzKDIpCitgaWZkZWYoYFBJQycsYAoraWZlbHNlKGluZGV4KGRlZm4oYGxvYWRfZWlwJyksIGAkMicpLC0xLAorYG00YXBwZW5kKGBsb2FkX2VpcCcsCitgCVRFWFQKKwlBTElHTigxNikKK0wobW92bF9laXBfYCdzdWJzdHIoJDIsMSkpOgorCW1vdmwJKCVlc3ApLCAkMgorCXJldF9pbnRlcm5hbAorJyknKQoraWZlbHNlKGluZGV4KGRlZm4oYGRhcndpbl9iZCcpLCBgYm9sICQxCisnKSwtMSwKK2BtNGFwcGVuZChgZGFyd2luX2JkJywKK2AJLnNlY3Rpb24gX19JTVBPUlQsX19wb2ludGVycyxub25fbGF6eV9zeW1ib2xfcG9pbnRlcnMKK0woJDFgJyRub25fbGF6eV9wdHIpOgorCS5pbmRpcmVjdF9zeW1ib2wgJDEKKwkubG9uZwkgMAorJyknKQorCWNhbGwJTChtb3ZsX2VpcF9gJ3N1YnN0cigkMiwxKSkKKwltb3ZsCUwoJDFgJyRub25fbGF6eV9wdHIpLS4oJDIpLCAkMgorJyxgCisJbW92bAlgJCckMSwgJDIKKycpJykKKworZGVmaW5lKGBMRUFMJywKK200X2Fzc2VydF9udW1hcmdzKDIpCitgaWZkZWYoYFBJQycsYAoraWZlbHNlKGluZGV4KGRlZm4oYGxvYWRfZWlwJyksIGAkMicpLC0xLAorYG00YXBwZW5kKGBsb2FkX2VpcCcsCitgCVRFWFQKKwlBTElHTigxNikKK0wobW92bF9laXBfYCdzdWJzdHIoJDIsMSkpOgorCW1vdmwJKCVlc3ApLCAkMgorCXJldF9pbnRlcm5hbAorJyknKQorCWNhbGwJTChtb3ZsX2VpcF9gJ3N1YnN0cigkMiwxKSkKKwlsZWFsCSQxLS4oJDIpLCAkMgorJyxgCisJbW92bAlgJCckMSwgJDIKKycpJykKKworCitkbmwgQVNNX0VORAorCitkZWZpbmUoYEFTTV9FTkQnLGBsb2FkX2VpcGAnZGFyd2luX2JkJykKKworZGVmaW5lKGBsb2FkX2VpcCcsIGAnKQkJZG5sIHVwZGF0ZWQgaW4gTEVBCitkZWZpbmUoYGRhcndpbl9iZCcsIGAnKQkJZG5sIHVwZGF0ZWQgaW4gTEVBCisKKworZG5sICBVc2FnZTogQ0FMTChmdW5jbmFtZSkKK2RubAorCitkZWZpbmUoYENBTEwnLAorbTRfYXNzZXJ0X251bWFyZ3MoMSkKK2BjYWxsCUdTWU1fUFJFRklYYCckMScpCisKK3VuZGVmaW5lKGBQSUNfV0lUSF9FQlgnKQorCitkaXZlcnRgJ2RubApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvZGl2ZV8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2RpdmVfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJiMGY0NQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2RpdmVfMS5hc20KQEAgLTAsMCArMSwxOTAgQEAKK2RubCAgeDg2IG1wbl9kaXZleGFjdF8xIC0tIG1wbiBieSBsaW1iIGV4YWN0IGRpdmlzaW9uLgorCitkbmwgIENvcHlyaWdodCAyMDAxLCAyMDAyLCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQyAgICAgY3ljbGVzL2xpbWIKK0MgUDU0ICAgIDMwLjAKK0MgUDU1ICAgIDI5LjAKK0MgUDYgICAgIDEzLjAgb2RkIGRpdmlzb3IsIDEyLjAgZXZlbiAoc3RyYW5nZWx5KQorQyBLNiAgICAgMTQuMAorQyBLNyAgICAgMTIuMAorQyBQNCAgICAgNDIuMAorCisKK0MgbXBfbGltYl90IG1wbl9kaXZleGFjdF8xIChtcF9wdHIgZHN0LCBtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSwKK0MgICAgICAgICAgICAgICAgICAgICAgICAgICBtcF9saW1iX3QgZGl2aXNvcik7CitDCisKK2RlZmZyYW1lKFBBUkFNX0RJVklTT1IsMTYpCitkZWZmcmFtZShQQVJBTV9TSVpFLCAgIDEyKQorZGVmZnJhbWUoUEFSQU1fU1JDLCAgICA4KQorZGVmZnJhbWUoUEFSQU1fRFNULCAgICA0KQorCitkbmwgIHJlLXVzZSBwYXJhbWV0ZXIgc3BhY2UKK2RlZmluZShWQVJfSU5WRVJTRSxgUEFSQU1fU1JDJykKKworCVRFWFQKKworCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX2RpdmV4YWN0XzEpCitkZWZsaXQoYEZSQU1FJywwKQorCisJbW92bAlQQVJBTV9ESVZJU09SLCAlZWF4CisJcHVzaGwJJWVicAlGUkFNRV9wdXNobCgpCisKKwltb3ZsCVBBUkFNX1NJWkUsICVlYnAKKwlwdXNobAklZWRpCUZSQU1FX3B1c2hsKCkKKworCXB1c2hsCSVlYngJRlJBTUVfcHVzaGwoKQorCW1vdmwJJC0xLCAlZWN4CQlDIHNoaWZ0IGNvdW50CisKKwlwdXNobAklZXNpCUZSQU1FX3B1c2hsKCkKKworTChzdHJpcF90d29zKToKKwlpbmNsCSVlY3gKKworCXNocmwJJWVheAorCWpuYwlMKHN0cmlwX3R3b3MpCisKKwlsZWFsCTEoJWVheCwlZWF4KSwgJWVieAlDIGQgd2l0aG91dCB0d29zCisJYW5kbAkkMTI3LCAlZWF4CQlDIGQvMiwgNyBiaXRzCisKK2lmZGVmKGBQSUMnLGAKKwlMRUEoCWJpbnZlcnRfbGltYl90YWJsZSwgJWVkeCkKKwltb3Z6YmwJKCVlYXgsJWVkeCksICVlYXgJCUMgaW52IDggYml0cworJyxgCisJbW92emJsCWJpbnZlcnRfbGltYl90YWJsZSglZWF4KSwgJWVheAlDIGludiA4IGJpdHMKKycpCisKKwlsZWFsCSglZWF4LCVlYXgpLCAlZWR4CUMgMippbnYKKwltb3ZsCSVlYngsIFBBUkFNX0RJVklTT1IJQyBkIHdpdGhvdXQgdHdvcworCisJaW11bGwJJWVheCwgJWVheAkJQyBpbnYqaW52CisKKwltb3ZsCVBBUkFNX1NSQywgJWVzaQorCW1vdmwJUEFSQU1fRFNULCAlZWRpCisKKwlpbXVsbAklZWJ4LCAlZWF4CQlDIGludippbnYqZAorCisJc3VibAklZWF4LCAlZWR4CQlDIGludiA9IDIqaW52IC0gaW52KmludipkCisJbGVhbAkoJWVkeCwlZWR4KSwgJWVheAlDIDIqaW52CisKKwlpbXVsbAklZWR4LCAlZWR4CQlDIGludippbnYKKworCWxlYWwJKCVlc2ksJWVicCw0KSwgJWVzaQlDIHNyYyBlbmQKKwlsZWFsCSglZWRpLCVlYnAsNCksICVlZGkJQyBkc3QgZW5kCisJbmVnbAklZWJwCQkJQyAtc2l6ZQorCisJaW11bGwJJWVieCwgJWVkeAkJQyBpbnYqaW52KmQKKworCXN1YmwJJWVkeCwgJWVheAkJQyBpbnYgPSAyKmludiAtIGludippbnYqZAorCisJQVNTRVJUKGUsYAlDIGV4cGVjdCBkKmludiA9PSAxIG1vZCAyXkdNUF9MSU1CX0JJVFMKKwlwdXNobAklZWF4CUZSQU1FX3B1c2hsKCkKKwlpbXVsbAlQQVJBTV9ESVZJU09SLCAlZWF4CisJY21wbAkkMSwgJWVheAorCXBvcGwJJWVheAlGUkFNRV9wb3BsKCknKQorCisJbW92bAklZWF4LCBWQVJfSU5WRVJTRQorCW1vdmwJKCVlc2ksJWVicCw0KSwgJWVheAlDIHNyY1swXQorCisJeG9ybAklZWJ4LCAlZWJ4CisJeG9ybAklZWR4LCAlZWR4CisKKwlpbmNsCSVlYnAKKwlqeglMKG9uZSkKKworCW1vdmwJKCVlc2ksJWVicCw0KSwgJWVkeAlDIHNyY1sxXQorCisJc2hyZGwoCSVjbCwgJWVkeCwgJWVheCkKKworCW1vdmwJVkFSX0lOVkVSU0UsICVlZHgKKwlqbXAJTChlbnRyeSkKKworCisJQUxJR04oOCkKKwlub3AJQyBrNiBjb2RlIGFsaWdubWVudAorCW5vcAorTCh0b3ApOgorCUMgZWF4CXEKKwlDIGVieAljYXJyeSBiaXQsIDAgb3IgLTEKKwlDIGVjeAlzaGlmdAorCUMgZWR4CWNhcnJ5IGxpbWIKKwlDIGVzaQlzcmMgZW5kCisJQyBlZGkJZHN0IGVuZAorCUMgZWJwCWNvdW50ZXIsIGxpbWJzLCBuZWdhdGl2ZQorCisJbW92bAktNCglZXNpLCVlYnAsNCksICVlYXgKKwlzdWJsCSVlYngsICVlZHgJCUMgYWNjdW11bGF0ZSBjYXJyeSBiaXQKKworCW1vdmwJKCVlc2ksJWVicCw0KSwgJWVieAorCisJc2hyZGwoCSVjbCwgJWVieCwgJWVheCkKKworCXN1YmwJJWVkeCwgJWVheAkJQyBhcHBseSBjYXJyeSBsaW1iCisJbW92bAlWQVJfSU5WRVJTRSwgJWVkeAorCisJc2JibAklZWJ4LCAlZWJ4CisKK0woZW50cnkpOgorCWltdWxsCSVlZHgsICVlYXgKKworCW1vdmwJJWVheCwgLTQoJWVkaSwlZWJwLDQpCisJbW92bAlQQVJBTV9ESVZJU09SLCAlZWR4CisKKwltdWxsCSVlZHgKKworCWluY2wJJWVicAorCWpueglMKHRvcCkKKworCisJbW92bAktNCglZXNpKSwgJWVheAkJQyBzcmMgaGlnaCBsaW1iCitMKG9uZSk6CisJc2hybAklY2wsICVlYXgKKwlwb3BsCSVlc2kJRlJBTUVfcG9wbCgpCisKKwlhZGRsCSVlYngsICVlYXgJCUMgYXBwbHkgY2FycnkgYml0CisJcG9wbAklZWJ4CUZSQU1FX3BvcGwoKQorCisJc3VibAklZWR4LCAlZWF4CQlDIGFwcGx5IGNhcnJ5IGxpbWIKKworCWltdWxsCVZBUl9JTlZFUlNFLCAlZWF4CisKKwltb3ZsCSVlYXgsIC00KCVlZGkpCisKKwlwb3BsCSVlZGkKKwlwb3BsCSVlYnAKKworCXJldAorCitFUElMT0dVRSgpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2RpdnJlbV8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2RpdnJlbV8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTVkNDkzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvZGl2cmVtXzEuYXNtCkBAIC0wLDAgKzEsMjMzIEBACitkbmwgIHg4NiBtcG5fZGl2cmVtXzEgLS0gbXBuIGJ5IGxpbWIgZGl2aXNpb24gZXh0ZW5kaW5nIHRvIGZyYWN0aW9uYWwgcXVvdGllbnQuCisKK2RubCAgQ29weXJpZ2h0IDE5OTktMjAwMywgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MgICAgICAgY3ljbGVzL2xpbWIKK0MgNDg2ICAgYXBwcm94IDQzIG1heWJlCitDIFA1ICAgICAgICA0NAorQyBQNiAgICAgICAgMzkKK0MgUDZNTVggICAgIDM5CitDIEs2ICAgICAgICAyMgorQyBLNyAgICAgICAgNDIKK0MgUDQgICAgICAgIDU4CisKKworQyBtcF9saW1iX3QgbXBuX2RpdnJlbV8xIChtcF9wdHIgZHN0LCBtcF9zaXplX3QgeHNpemUsCitDICAgICAgICAgICAgICAgICAgICAgICAgIG1wX3NyY3B0ciBzcmMsIG1wX3NpemVfdCBzaXplLCBtcF9saW1iX3QgZGl2aXNvcik7CitDIG1wX2xpbWJfdCBtcG5fZGl2cmVtXzFjIChtcF9wdHIgZHN0LCBtcF9zaXplX3QgeHNpemUsCitDICAgICAgICAgICAgICAgICAgICAgICAgICBtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSwgbXBfbGltYl90IGRpdmlzb3IsCitDICAgICAgICAgICAgICAgICAgICAgICAgICBtcF9saW1iX3QgY2FycnkpOworQworQyBEaXZpZGUgc3JjLHNpemUgYnkgZGl2aXNvciBhbmQgc3RvcmUgdGhlIHF1b3RpZW50IGluIGRzdCt4c2l6ZSxzaXplLgorQyBFeHRlbmQgdGhlIGRpdmlzaW9uIHRvIGZyYWN0aW9uYWwgcXVvdGllbnQgbGltYnMgaW4gZHN0LHhzaXplLiAgUmV0dXJuIHRoZQorQyByZW1haW5kZXIuICBFaXRoZXIgb3IgYm90aCB4c2l6ZSBhbmQgc2l6ZSBjYW4gYmUgMC4KK0MKK0MgbXBuX2RpdnJlbV8xYyB0YWtlcyBhIGNhcnJ5IHBhcmFtZXRlciB3aGljaCBpcyBhbiBpbml0aWFsIGhpZ2ggbGltYiwKK0MgZWZmZWN0aXZlbHkgb25lIGV4dHJhIGxpbWIgYXQgdGhlIHRvcCBvZiBzcmMsc2l6ZS4gIE11c3QgaGF2ZQorQyBjYXJyeTxkaXZpc29yLgorQworQworQyBFc3NlbnRpYWxseSB0aGUgY29kZSBpcyB0aGUgc2FtZSBhcyB0aGUgZGl2aXNpb24gYmFzZWQgcGFydCBvZgorQyBtcG4vZ2VuZXJpYy9kaXZyZW1fMS5jLCBidXQgaGFzIHRoZSBhZHZhbnRhZ2UgdGhhdCB3ZSBnZXQgdGhlIGRlc2lyZWQgZGl2bAorQyBpbnN0cnVjdGlvbiBldmVuIHdoZW4gZ2NjIGlzIG5vdCBiZWluZyB1c2VkICh3aGVuIGxvbmdsb25nLmggb25seSBoYXMgdGhlCitDIHJhdGhlciBzbG93IGdlbmVyaWMgQyB1ZGl2X3Fybm5kKCkuCitDCitDIEEgdGVzdCBpcyBkb25lIHRvIHNlZSBpZiB0aGUgaGlnaCBsaW1iIGlzIGxlc3MgdGhhbiB0aGUgZGl2aXNvciwgYW5kIGlmIHNvCitDIG9uZSBsZXNzIGRpdiBpcyBkb25lLiAgQSBkaXYgaXMgYmV0d2VlbiAyMCBhbmQgNDAgY3ljbGVzIG9uIHRoZSB2YXJpb3VzCitDIHg4NnMsIHNvIGFzc3VtaW5nIGhpZ2g8ZGl2aXNvciBhYm91dCBoYWxmIHRoZSB0aW1lLCB0aGVuIHRoaXMgdGVzdCBzYXZlcworQyBoYWxmIHRoYXQgYW1vdW50LiAgVGhlIGJyYW5jaCBtaXNwcmVkaWN0aW9uIHBlbmFsdHkgb24gZWFjaCBjaGlwIGlzIGxlc3MKK0MgdGhhbiBoYWxmIGEgZGl2LgorQworQworQyBOb3RlcyBmb3IgUDU6CitDCitDIEl0IG1pZ2h0IGJlIHRob3VnaHQgdGhhdCBtb3ZpbmcgdGhlIGxvYWQgZG93biB0byBwYWlyIHdpdGggdGhlIHN0b3JlIHdvdWxkCitDIHNhdmUgMSBjeWNsZSwgYnV0IHRoYXQgZG9lc24ndCBzZWVtIHRvIGhhcHBlbiBpbiBwcmFjdGljZSwgYW5kIGluIGFueSBjYXNlCitDIHdvdWxkIGJlIGEgbWVyZSAyLjIlIHNhdmluZywgc28gaXQncyBoYXJkbHkgd29ydGggYm90aGVyaW5nIGFib3V0LgorQworQyBBIG11bC1ieS1pbnZlcnNlIG1pZ2h0IGJlIGEgcG9zc2liaWxpdHkgZm9yIFA1LCBhcyBkb25lIGluCitDIG1wbi94ODYvcGVudGl1bS9tb2RfMS5hc20uICBUaGUgbnVtYmVyIG9mIGF1eGlsaWFyeSBpbnN0cnVjdGlvbnMgcmVxdWlyZWQKK0MgaXMgYSBoaW5kZXJhbmNlLCBidXQgdGhlcmUgY291bGQgYmUgYSAxMC0xNSUgc3BlZWR1cCBhdmFpbGFibGUuCitDCitDCitDIE5vdGVzIGZvciBLNjoKK0MKK0MgSzYgaGFzIGl0cyBvd24gdmVyc2lvbiBvZiB0aGlzIGNvZGUsIHVzaW5nIGxvb3AgYW5kIHBheWluZyBhdHRlbnRpb24gdG8KK0MgY2FjaGUgbGluZSBib3VuZGFyeSBjcm9zc2luZ3MuICBUaGUgdGFyZ2V0IDIwIGMvbCBjYW4gYmUgaGFkIHdpdGggdGhlCitDIGRlY2wram56IG9mIHRoZSBwcmVzZW50IGNvZGUgYnkgcGFpcmluZyB1cCB0aGUgbG9hZCBhbmQgc3RvcmUgaW4gdGhlCitDIGxvb3BzLiAgQnV0IGl0J3MgY29uc2lkZXJlZCBlYXNpZXIgbm90IHRvIGludHJvZHVjZSBjb21wbGV4aXR5IGp1c3QgZm9yCitDIHRoYXQsIGJ1dCBpbnN0ZWFkIGxldCBrNiBoYXZlIGl0cyBvd24gY29kZS4KK0MKKworZGVmZnJhbWUoUEFSQU1fQ0FSUlksICAyNCkKK2RlZmZyYW1lKFBBUkFNX0RJVklTT1IsMjApCitkZWZmcmFtZShQQVJBTV9TSVpFLCAgIDE2KQorZGVmZnJhbWUoUEFSQU1fU1JDLCAgICAxMikKK2RlZmZyYW1lKFBBUkFNX1hTSVpFLCAgOCkKK2RlZmZyYW1lKFBBUkFNX0RTVCwgICAgNCkKKworCVRFWFQKKwlBTElHTigxNikKKworUFJPTE9HVUUobXBuX2RpdnJlbV8xYykKK2RlZmxpdChgRlJBTUUnLDApCisKKwltb3ZsCVBBUkFNX1NJWkUsICVlY3gKKwlwdXNobAklZWRpCQlGUkFNRV9wdXNobCgpCisKKwltb3ZsCVBBUkFNX1NSQywgJWVkaQorCXB1c2hsCSVlc2kJCUZSQU1FX3B1c2hsKCkKKworCW1vdmwJUEFSQU1fRElWSVNPUiwgJWVzaQorCXB1c2hsCSVlYngJCUZSQU1FX3B1c2hsKCkKKworCW1vdmwJUEFSQU1fRFNULCAlZWJ4CisJcHVzaGwJJWVicAkJRlJBTUVfcHVzaGwoKQorCisJbW92bAlQQVJBTV9YU0laRSwgJWVicAorCW9ybAklZWN4LCAlZWN4CisKKwltb3ZsCVBBUkFNX0NBUlJZLCAlZWR4CisJanoJTChmcmFjdGlvbikKKworCWxlYWwJLTQoJWVieCwlZWJwLDQpLCAlZWJ4CUMgZHN0IG9uZSBsaW1iIGJlbG93IGludGVnZXIgcGFydAorCWptcAlMKGludGVnZXJfdG9wKQorCitFUElMT0dVRSgpCisKKworUFJPTE9HVUUobXBuX2RpdnJlbV8xKQorZGVmbGl0KGBGUkFNRScsMCkKKworCW1vdmwJUEFSQU1fU0laRSwgJWVjeAorCXB1c2hsCSVlZGkJCUZSQU1FX3B1c2hsKCkKKworCW1vdmwJUEFSQU1fU1JDLCAlZWRpCisJcHVzaGwJJWVzaQkJRlJBTUVfcHVzaGwoKQorCisJbW92bAlQQVJBTV9ESVZJU09SLCAlZXNpCisJb3JsCSVlY3gsJWVjeAorCisJanoJTChzaXplX3plcm8pCisJcHVzaGwJJWVieAkJRlJBTUVfcHVzaGwoKQorCisJbW92bAktNCglZWRpLCVlY3gsNCksICVlYXgJQyBzcmMgaGlnaCBsaW1iCisJeG9ybAklZWR4LCAlZWR4CisKKwltb3ZsCVBBUkFNX0RTVCwgJWVieAorCXB1c2hsCSVlYnAJCUZSQU1FX3B1c2hsKCkKKworCW1vdmwJUEFSQU1fWFNJWkUsICVlYnAKKwljbXBsCSVlc2ksICVlYXgKKworCWxlYWwJLTQoJWVieCwlZWJwLDQpLCAlZWJ4CUMgZHN0IG9uZSBsaW1iIGJlbG93IGludGVnZXIgcGFydAorCWphZQlMKGludGVnZXJfZW50cnkpCisKKworCUMgaGlnaDxkaXZpc29yLCBzbyBoaWdoIG9mIGRzdCBpcyB6ZXJvLCBhbmQgYXZvaWQgb25lIGRpdgorCisJbW92bAklZWR4LCAoJWVieCwlZWN4LDQpCisJZGVjbAklZWN4CisKKwltb3ZsCSVlYXgsICVlZHgKKwlqeglMKGZyYWN0aW9uKQorCisKK0woaW50ZWdlcl90b3ApOgorCUMgZWF4CXNjcmF0Y2ggKHF1b3RpZW50KQorCUMgZWJ4CWRzdCs0KnhzaXplLTQKKwlDIGVjeAljb3VudGVyCisJQyBlZHgJc2NyYXRjaCAocmVtYWluZGVyKQorCUMgZXNpCWRpdmlzb3IKKwlDIGVkaQlzcmMKKwlDIGVicAl4c2l6ZQorCisJbW92bAktNCglZWRpLCVlY3gsNCksICVlYXgKK0woaW50ZWdlcl9lbnRyeSk6CisKKwlkaXZsCSVlc2kKKworCW1vdmwJJWVheCwgKCVlYngsJWVjeCw0KQorCWRlY2wJJWVjeAorCWpueglMKGludGVnZXJfdG9wKQorCisKK0woZnJhY3Rpb24pOgorCW9ybAklZWJwLCAlZWN4CisJanoJTChkb25lKQorCisJbW92bAlQQVJBTV9EU1QsICVlYngKKworCitMKGZyYWN0aW9uX3RvcCk6CisJQyBlYXgJc2NyYXRjaCAocXVvdGllbnQpCisJQyBlYngJZHN0CisJQyBlY3gJY291bnRlcgorCUMgZWR4CXNjcmF0Y2ggKHJlbWFpbmRlcikKKwlDIGVzaQlkaXZpc29yCisJQyBlZGkKKwlDIGVicAorCisJeG9ybAklZWF4LCAlZWF4CisKKwlkaXZsCSVlc2kKKworCW1vdmwJJWVheCwgLTQoJWVieCwlZWN4LDQpCisJZGVjbAklZWN4CisJam56CUwoZnJhY3Rpb25fdG9wKQorCisKK0woZG9uZSk6CisJcG9wbAklZWJwCisJbW92bAklZWR4LCAlZWF4CisJcG9wbAklZWJ4CisJcG9wbAklZXNpCisJcG9wbAklZWRpCisJcmV0CisKKworTChzaXplX3plcm8pOgorZGVmbGl0KGBGUkFNRScsOCkKKwltb3ZsCVBBUkFNX1hTSVpFLCAlZWN4CisJeG9ybAklZWF4LCAlZWF4CisKKwltb3ZsCVBBUkFNX0RTVCwgJWVkaQorCisJY2xkCUMgYmV0dGVyIHNhZmUgdGhhbiBzb3JyeSwgc2VlIG1wbi94ODYvUkVBRE1FCisKKwlyZXAKKwlzdG9zbAorCisJcG9wbAklZXNpCisJcG9wbAklZWRpCisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9kaXZyZW1fMi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9kaXZyZW1fMi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMzOGFkMAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2RpdnJlbV8yLmFzbQpAQCAtMCwwICsxLDE5OSBAQAorZG5sICB4ODYgbXBuX2RpdnJlbV8yIC0tIERpdmlkZSBhbiBtcG4gbnVtYmVyIGJ5IGEgbm9ybWFsaXplZCAyLWxpbWIgbnVtYmVyLgorCitkbmwgIENvcHlyaWdodCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQwkJbm9ybQlmcmFjCitDIDQ4NgorQyBQNQorQyBQNi0xMwkJMjkuMgorQyBQNi0xNQkJKjI2CitDIEs2CitDIEs3CQkyMgorQyBLOAkJKjE5CitDIFA0LWYxCitDIFA0LWYyCQkqNjUKK0MgUDQtZjMKK0MgUDQtZjQJCSo3MgorCitDIEEgc3RhciBtZWFucyBudW1iZXJzIG5vdCB1cGRhdGVkIGZvciB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIGNvZGUuCisKKworQyBUT0RPCitDICAqIFBlcmhhcHMga2VlcCBlY3ggb3IgZXNpIGluIHN0YWNrIHNsb3QsIGZyZWVpbmcgdXAgYSByZWcgZm9yIHEwLgorQyAgKiBUaGUgbG9vcCBoYXMgbm90IGJlZW4gY2FyZWZ1bGx5IHR1bmVkLiAgV2Ugc2hvdWxkIGF0IHRoZSB2ZXJ5IGxlYXN0IGRvCitDICAgIHNvbWUgbG9jYWwgaW5zbiBzd2FwcGluZy4KK0MgICogVGhlIGNvZGUgb3V0c2lkZSB0aGUgbWFpbiBsb29wIGlzIHdoYXQgZ2NjIGdlbmVyYXRlZC4gIENsZWFuIHVwIQorQyAgKiBDbGVhbiB1cCBzdGFjayBzbG90IHVzYWdlLgorCitDIElOUFVUIFBBUkFNRVRFUlMKK0MgcXAKK0MgZm4KK0MgdXBfcGFyYW0KK0MgdW5fcGFyYW0KK0MgZHAKKworCitDIGVheCBlYnggZWN4IGVkeCBlc2kgZWRpIGVicAorQyAgICAgICAgIGNudCAgICAgICAgIHFwCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX2RpdnJlbV8yKQorCXB1c2gJJWVicAorCXB1c2gJJWVkaQorCXB1c2gJJWVzaQorCXB1c2gJJWVieAorCXN1YgkkMzYsICVlc3AKKwltb3YJNjgoJWVzcCksICVlY3gJCUMgdW4KKwltb3YJNzIoJWVzcCksICVlc2kJCUMgZHAKKwltb3ZsCSQwLCAzMiglZXNwKQorCWxlYQkwKCwlZWN4LDQpLCAlZWRpCisJYWRkCTY0KCVlc3ApLCAlZWRpCQlDIHVwCisJbW92CSglZXNpKSwgJWVieAorCW1vdgk0KCVlc2kpLCAlZWF4CisJbW92CSVlYngsIDIwKCVlc3ApCisJc3ViCSQxMiwgJWVkaQorCW1vdgklZWF4LCAyNCglZXNwKQorCW1vdgklZWRpLCAxMiglZXNwKQorCW1vdgk4KCVlZGkpLCAlZWJ4CisJbW92CTQoJWVkaSksICVlYnAKKwljbXAJJWVheCwgJWVieAorCWpiCUwoOCkKKwlzZXRhCSVkbAorCWNtcAkyMCglZXNwKSwgJWVicAorCXNldGFlCSVhbAorCW9yYgklZGwsICVhbAkJQyAib3JiIiBmb3JtIHRvIHBsYWNhdGUgU3VuIHRvb2xzCisJam5lCUwoMzUpCitMKDgpOgorCW1vdgk2MCglZXNwKSwgJWVzaQkJQyBmbgorCWxlYQktMyglZXNpLCVlY3gpLCAlZWRpCisJdGVzdAklZWRpLCAlZWRpCisJanMJTCg5KQorCW1vdgkyNCglZXNwKSwgJWVkeAorCW1vdgkkLTEsICVlc2kKKwltb3YJJWVzaSwgJWVheAorCW1vdgklZXNpLCAlZWN4CisJbm90CSVlZHgKKwlkaXZsCTI0KCVlc3ApCisJbW92CSVlYXgsICVlc2kKKwlpbXVsCTI0KCVlc3ApLCAlZWF4CisJbW92CSVlYXgsICglZXNwKQorCW1vdgklZXNpLCAlZWF4CisJbXVsbAkyMCglZXNwKQorCW1vdgkoJWVzcCksICVlYXgKKwlhZGQJMjAoJWVzcCksICVlYXgKKwlhZGMJJDAsICVlY3gKKwlhZGQJJWVheCwgJWVkeAorCWFkYwkkMCwgJWVjeAorCW1vdgklZWN4LCAlZWF4CisJanMJTCgzMikKK0woMzYpOglkZWMJJWVzaQorCXN1YgkyNCglZXNwKSwgJWVkeAorCXNiYgkkMCwgJWVheAorCWpucwlMKDM2KQorTCgzMik6CisJbW92CSVlc2ksIDE2KCVlc3ApCQlDIGRpCisJbW92CSVlZGksICVlY3gJCUMgdW4KKwltb3YJMTIoJWVzcCksICVlc2kJCUMgdXAKKwltb3YJMjQoJWVzcCksICVlYXgKKwluZWcJJWVheAorCW1vdgklZWF4LCA0KCVlc3ApCQlDIC1kMQorCUFMSUdOKDE2KQorCW5vcAorCitDIGVheCBlYnggZWN4IGVkeCBlc2kgZWRpIGVicCAgMCAgICA0ICAgOCAgIDEyICAxNiAgMjAgIDI0ICAyOCAgMzIgICA1NiAgNjAKK0MgICAgIG4yICB1biAgICAgIHVwICAgICAgbjEgICBxMCAgLWQxICAgICAgICAgIGRpICBkMCAgZDEgICAgICBtc2wgIHFwICBmbgorCitMKGxvb3ApOgorCW1vdgkxNiglZXNwKSwgJWVheAkJQyBkaQorCW11bAklZWJ4CisJYWRkCSVlYnAsICVlYXgKKwltb3YJJWVheCwgKCVlc3ApCQlDIHEwCisJYWRjCSVlYngsICVlZHgKKwltb3YJJWVkeCwgJWVkaQkJQyBxCisJaW11bAk0KCVlc3ApLCAlZWR4CisJbW92CTIwKCVlc3ApLCAlZWF4CisJbGVhCSglZWR4LCAlZWJwKSwgJWVieAlDIG4xIC09IC4uLgorCW11bAklZWRpCisJeG9yCSVlYnAsICVlYnAKKwljbXAJNjAoJWVzcCksICVlY3gKKwlqbAlMKDE5KQorCW1vdgkoJWVzaSksICVlYnAKKwlzdWIJJDQsICVlc2kKK0woMTkpOglzdWIJMjAoJWVzcCksICVlYnAKKwlzYmIJMjQoJWVzcCksICVlYngKKwlzdWIJJWVheCwgJWVicAorCXNiYgklZWR4LCAlZWJ4CisJbW92CTIwKCVlc3ApLCAlZWF4CQlDIGQxCisJaW5jCSVlZGkKKwl4b3IJJWVkeCwgJWVkeAorCWNtcAkoJWVzcCksICVlYngKKwlhZGMJJC0xLCAlZWR4CQlDIG1hc2sKKwlhZGQJJWVkeCwgJWVkaQkJQyBxLS0KKwlhbmQJJWVkeCwgJWVheAkJQyBkMCBvciAwCisJYW5kCTI0KCVlc3ApLCAlZWR4CQlDIGQxIG9yIDAKKwlhZGQJJWVheCwgJWVicAorCWFkYwklZWR4LCAlZWJ4CisJY21wCTI0KCVlc3ApLCAlZWJ4CisJamFlCUwoZml4KQorTChiY2spOgltb3YJNTYoJWVzcCksICVlZHgKKwltb3YJJWVkaSwgKCVlZHgsICVlY3gsIDQpCisJZGVjCSVlY3gKKwlqbnMJTChsb29wKQorCitMKDkpOgltb3YJNjQoJWVzcCksICVlc2kJCUMgdXAKKwltb3YJJWVicCwgKCVlc2kpCisJbW92CSVlYngsIDQoJWVzaSkKKwltb3YJMzIoJWVzcCksICVlYXgKKwlhZGQJJDM2LCAlZXNwCisJcG9wCSVlYngKKwlwb3AJJWVzaQorCXBvcAklZWRpCisJcG9wCSVlYnAKKwlyZXQKKworTChmaXgpOglzZXRhCSVkbAorCWNtcAkyMCglZXNwKSwgJWVicAorCXNldGFlCSVhbAorCW9yYgklZGwsICVhbAkJQyAib3JiIiBmb3JtIHRvIHBsYWNhdGUgU3VuIHRvb2xzCisJamUJTChiY2spCisJaW5jCSVlZGkKKwlzdWIJMjAoJWVzcCksICVlYnAKKwlzYmIJMjQoJWVzcCksICVlYngKKwlqbXAJTChiY2spCisKK0woMzUpOglzdWIJMjAoJWVzcCksICVlYnAKKwlzYmIJMjQoJWVzcCksICVlYngKKwltb3ZsCSQxLCAzMiglZXNwKQorCWptcAlMKDgpCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9mYXQvY29tLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9mYXQvY29tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM1OWQ0YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2ZhdC9jb20uYwpAQCAtMCwwICsxLDMyIEBACisvKiBGYXQgYmluYXJ5IGZhbGxiYWNrIG1wbl9jb20uCisKK0NvcHlyaWdodCAyMDAzLCAyMDA5LCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisKKyNpbmNsdWRlICJtcG4vZ2VuZXJpYy9jb20uYyIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2ZhdC9mYXQuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2ZhdC9mYXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGJlMDVhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvZmF0L2ZhdC5jCkBAIC0wLDAgKzEsNDk5IEBACisvKiB4ODYgZmF0IGJpbmFyeSBpbml0aWFsaXplcnMuCisKKyAgIFRIRSBGVU5DVElPTlMgQU5EIFZBUklBQkxFUyBJTiBUSElTIEZJTEUgQVJFIEZPUiBJTlRFUk5BTCBVU0UgT05MWS4KKyAgIFRIRVknUkUgQUxNT1NUIENFUlRBSU4gVE8gQkUgU1VCSkVDVCBUTyBJTkNPTVBBVElCTEUgQ0hBTkdFUyBPUiBESVNBUFBFQVIKKyAgIENPTVBMRVRFTFkgSU4gRlVUVVJFIEdOVSBNUCBSRUxFQVNFUy4KKworQ29weXJpZ2h0IDIwMDMsIDIwMDQsIDIwMTEtMjAxMywgMjAxNSwgMjAxNywgMjAxOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNpbmNsdWRlIDxzdGRpby5oPiAgICAvKiBmb3IgcHJpbnRmICovCisjaW5jbHVkZSA8c3RkbGliLmg+ICAgLyogZm9yIGdldGVudiAqLworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAiZ21wLWltcGwuaCIKKworLyogQ2hhbmdlIHRoaXMgdG8gIiNkZWZpbmUgVFJBQ0UoeCkgeCIgZm9yIHNvbWUgdHJhY2VzLiAqLworI2RlZmluZSBUUkFDRSh4KQorCisKKy8qIGZhdF9lbnRyeS5hc20gKi8KK2xvbmcgX19nbXBuX2NwdWlkIChjaGFyIFsxMl0sIGludCk7CitpbnQgIF9fZ21wbl9jcHVpZF9hdmFpbGFibGUgKHZvaWQpOworCisKKyNpZiBXQU5UX0ZBS0VfQ1BVSUQKKy8qIFRoZSAibmFtZSJzIGluIHRoZSB0YWJsZSBhcmUgdmFsdWVzIGZvciB0aGUgR01QX0NQVV9UWVBFIGVudmlyb25tZW50CisgICB2YXJpYWJsZS4gIEFueXRoaW5nIGNhbiBiZSB1c2VkLCBidXQgZm9yIG5vdyBpdCdzIHRoZSBjYW5vbmljYWwgY3B1IHR5cGVzCisgICBhcyBwZXIgY29uZmlnLmd1ZXNzL2NvbmZpZy5zdWIuICAqLworCisjZGVmaW5lIF9fZ21wbl9jcHVpZCAgICAgICAgICAgIGZha2VfY3B1aWQKKyNkZWZpbmUgX19nbXBuX2NwdWlkX2F2YWlsYWJsZSAgZmFrZV9jcHVpZF9hdmFpbGFibGUKKworI2RlZmluZSBNQUtFX0ZNUyhmYW1pbHksIG1vZGVsKQkJCQkJCVwKKyAgKCgoKGZhbWlseSkgJiAweGYpIDw8IDgpICsgKCgoZmFtaWx5KSAmIDB4ZmYwKSA8PCAyMCkJCQlcCisgICArICgoKG1vZGVsKSAmIDB4ZikgPDwgNCkgKyAoKChtb2RlbCkgICYgIDB4ZjApIDw8IDEyKSkKKworc3RhdGljIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgICpuYW1lOworICBjb25zdCBjaGFyICAqdmVuZG9yOworICB1bnNpZ25lZCAgICBmbXM7Cit9IGZha2VfY3B1aWRfdGFibGVbXSA9IHsKKyAgeyAiaTM4NiIsICAgICAgICIiIH0sCisgIHsgImk0ODYiLCAgICAgICAiR2VudWluZUludGVsIiwgTUFLRV9GTVMgKDQsIDApIH0sCisgIHsgInBlbnRpdW0iLCAgICAiR2VudWluZUludGVsIiwgTUFLRV9GTVMgKDUsIDApIH0sCisgIHsgInBlbnRpdW1tbXgiLCAiR2VudWluZUludGVsIiwgTUFLRV9GTVMgKDUsIDQpIH0sCisgIHsgInBlbnRpdW1wcm8iLCAiR2VudWluZUludGVsIiwgTUFLRV9GTVMgKDYsIDApIH0sCisgIHsgInBlbnRpdW0yIiwgICAiR2VudWluZUludGVsIiwgTUFLRV9GTVMgKDYsIDIpIH0sCisgIHsgInBlbnRpdW0zIiwgICAiR2VudWluZUludGVsIiwgTUFLRV9GTVMgKDYsIDcpIH0sCisgIHsgInBlbnRpdW00IiwgICAiR2VudWluZUludGVsIiwgTUFLRV9GTVMgKDE1LCAyKSB9LAorICB7ICJwcmVzY290dCIsICAgIkdlbnVpbmVJbnRlbCIsIE1BS0VfRk1TICgxNSwgMykgfSwKKyAgeyAibm9jb25hIiwgICAgICJHZW51aW5lSW50ZWwiLCBNQUtFX0ZNUyAoMTUsIDQpIH0sCisgIHsgImNvcmUyIiwgICAgICAiR2VudWluZUludGVsIiwgTUFLRV9GTVMgKDYsIDB4ZikgfSwKKyAgeyAibmVoYWxlbSIsICAgICJHZW51aW5lSW50ZWwiLCBNQUtFX0ZNUyAoNiwgMHgxYSkgfSwKKyAgeyAibmhtIiwgICAgICAgICJHZW51aW5lSW50ZWwiLCBNQUtFX0ZNUyAoNiwgMHgxYSkgfSwKKyAgeyAiYXRvbSIsICAgICAgICJHZW51aW5lSW50ZWwiLCBNQUtFX0ZNUyAoNiwgMHgxYykgfSwKKyAgeyAid2VzdG1lcmUiLCAgICJHZW51aW5lSW50ZWwiLCBNQUtFX0ZNUyAoNiwgMHgyNSkgfSwKKyAgeyAid3NtIiwgICAgICAgICJHZW51aW5lSW50ZWwiLCBNQUtFX0ZNUyAoNiwgMHgyNSkgfSwKKyAgeyAic2FuZHlicmlkZ2UiLCJHZW51aW5lSW50ZWwiLCBNQUtFX0ZNUyAoNiwgMHgyYSkgfSwKKyAgeyAic2JyIiwgICAgICAgICJHZW51aW5lSW50ZWwiLCBNQUtFX0ZNUyAoNiwgMHgyYSkgfSwKKyAgeyAic2lsdmVybW9udCIsICJHZW51aW5lSW50ZWwiLCBNQUtFX0ZNUyAoNiwgMHgzNykgfSwKKyAgeyAic2xtIiwgICAgICAgICJHZW51aW5lSW50ZWwiLCBNQUtFX0ZNUyAoNiwgMHgzNykgfSwKKyAgeyAiaGFzd2VsbCIsICAgICJHZW51aW5lSW50ZWwiLCBNQUtFX0ZNUyAoNiwgMHgzYykgfSwKKyAgeyAiaHdsIiwgICAgICAgICJHZW51aW5lSW50ZWwiLCBNQUtFX0ZNUyAoNiwgMHgzYykgfSwKKyAgeyAiYnJvYWR3ZWxsIiwgICJHZW51aW5lSW50ZWwiLCBNQUtFX0ZNUyAoNiwgMHgzZCkgfSwKKyAgeyAiYndsIiwgICAgICAgICJHZW51aW5lSW50ZWwiLCBNQUtFX0ZNUyAoNiwgMHgzZCkgfSwKKyAgeyAic2t5bGFrZSIsICAgICJHZW51aW5lSW50ZWwiLCBNQUtFX0ZNUyAoNiwgMHg1ZSkgfSwKKyAgeyAic2t5IiwgICAgICAgICJHZW51aW5lSW50ZWwiLCBNQUtFX0ZNUyAoNiwgMHg1ZSkgfSwKKworICB7ICJrNSIsICAgICAgICAgIkF1dGhlbnRpY0FNRCIsIE1BS0VfRk1TICg1LCAwKSB9LAorICB7ICJrNiIsICAgICAgICAgIkF1dGhlbnRpY0FNRCIsIE1BS0VfRk1TICg1LCAzKSB9LAorICB7ICJrNjIiLCAgICAgICAgIkF1dGhlbnRpY0FNRCIsIE1BS0VfRk1TICg1LCA4KSB9LAorICB7ICJrNjMiLCAgICAgICAgIkF1dGhlbnRpY0FNRCIsIE1BS0VfRk1TICg1LCA5KSB9LAorICB7ICJhdGhsb24iLCAgICAgIkF1dGhlbnRpY0FNRCIsIE1BS0VfRk1TICg2LCAwKSB9LAorICB7ICJrOCIsICAgICAgICAgIkF1dGhlbnRpY0FNRCIsIE1BS0VfRk1TICgxNSwgMCkgfSwKKyAgeyAiazEwIiwgICAgICAgICJBdXRoZW50aWNBTUQiLCBNQUtFX0ZNUyAoMTYsIDApIH0sCisgIHsgImJvYmNhdCIsICAgICAiQXV0aGVudGljQU1EIiwgTUFLRV9GTVMgKDIwLCAxKSB9LAorICB7ICJidWxsZG96ZXIiLCAgIkF1dGhlbnRpY0FNRCIsIE1BS0VfRk1TICgyMSwgMSkgfSwKKyAgeyAicGlsZWRyaXZlciIsICJBdXRoZW50aWNBTUQiLCBNQUtFX0ZNUyAoMjEsIDIpIH0sCisgIHsgInN0ZWFtcm9sbGVyIiwiQXV0aGVudGljQU1EIiwgTUFLRV9GTVMgKDIxLCAweDMwKSB9LAorICB7ICJleGNhdmF0b3IiLCAgIkF1dGhlbnRpY0FNRCIsIE1BS0VfRk1TICgyMSwgMHg2MCkgfSwKKyAgeyAiamFndWFyIiwgICAgICJBdXRoZW50aWNBTUQiLCBNQUtFX0ZNUyAoMjIsIDEpIH0sCisKKyAgeyAidmlhYzMiLCAgICAgICJDZW50YXVySGF1bHMiLCBNQUtFX0ZNUyAoNiwgMCkgfSwKKyAgeyAidmlhYzMyIiwgICAgICJDZW50YXVySGF1bHMiLCBNQUtFX0ZNUyAoNiwgOSkgfSwKKyAgeyAibmFubyIsICAgICAgICJDZW50YXVySGF1bHMiLCBNQUtFX0ZNUyAoNiwgMTUpIH0sCit9OworCitzdGF0aWMgaW50CitmYWtlX2NwdWlkX2xvb2t1cCAodm9pZCkKK3sKKyAgY2hhciAgKnM7CisgIGludCAgIGk7CisKKyAgcyA9IGdldGVudiAoIkdNUF9DUFVfVFlQRSIpOworICBpZiAocyA9PSBOVUxMKQorICAgIHsKKyAgICAgIHByaW50ZiAoIk5lZWQgR01QX0NQVV9UWVBFIGVudmlyb25tZW50IHZhcmlhYmxlIGZvciBmYWtlIGNwdWlkXG4iKTsKKyAgICAgIGFib3J0ICgpOworICAgIH0KKworICBmb3IgKGkgPSAwOyBpIDwgbnVtYmVyb2YgKGZha2VfY3B1aWRfdGFibGUpOyBpKyspCisgICAgaWYgKHN0cmNtcCAocywgZmFrZV9jcHVpZF90YWJsZVtpXS5uYW1lKSA9PSAwKQorICAgICAgcmV0dXJuIGk7CisKKyAgcHJpbnRmICgiR01QX0NQVV9UWVBFPSVzIHVua25vd25cbiIsIHMpOworICBhYm9ydCAoKTsKK30KKworc3RhdGljIGludAorZmFrZV9jcHVpZF9hdmFpbGFibGUgKHZvaWQpCit7CisgIHJldHVybiBmYWtlX2NwdWlkX3RhYmxlW2Zha2VfY3B1aWRfbG9va3VwKCldLnZlbmRvclswXSAhPSAnXDAnOworfQorCitzdGF0aWMgbG9uZworZmFrZV9jcHVpZCAoY2hhciBkc3RbMTJdLCBpbnQgaWQpCit7CisgIGludCAgaSA9IGZha2VfY3B1aWRfbG9va3VwKCk7CisKKyAgc3dpdGNoIChpZCkgeworICBjYXNlIDA6CisgICAgbWVtY3B5IChkc3QsIGZha2VfY3B1aWRfdGFibGVbaV0udmVuZG9yLCAxMik7CisgICAgcmV0dXJuIDA7CisgIGNhc2UgMToKKyAgICByZXR1cm4gZmFrZV9jcHVpZF90YWJsZVtpXS5mbXM7CisgIGRlZmF1bHQ6CisgICAgcHJpbnRmICgiZmFrZV9jcHVpZCgpOiBvb3BzLCB1bmtub3duIGlkICVkXG4iLCBpZCk7CisgICAgYWJvcnQgKCk7CisgIH0KK30KKyNlbmRpZgorCisKK3R5cGVkZWYgREVDTF9wcmVpbnZfZGl2cmVtXzEgKCgqcHJlaW52X2RpdnJlbV8xX3QpKTsKK3R5cGVkZWYgREVDTF9wcmVpbnZfbW9kXzEgICAgKCgqcHJlaW52X21vZF8xX3QpKTsKKworc3RydWN0IGNwdXZlY190IF9fZ21wbl9jcHV2ZWMgPSB7CisgIF9fTVBOKGFkZF9uX2luaXQpLAorICAwLAorICAwLAorICBfX01QTihhZGRtdWxfMV9pbml0KSwKKyAgMCwKKyAgX19NUE4oYmRpdl9kYm0xY19pbml0KSwKKyAgX19NUE4oY25kX2FkZF9uX2luaXQpLAorICBfX01QTihjbmRfc3ViX25faW5pdCksCisgIF9fTVBOKGNvbV9pbml0KSwKKyAgX19NUE4oY29weWRfaW5pdCksCisgIF9fTVBOKGNvcHlpX2luaXQpLAorICBfX01QTihkaXZleGFjdF8xX2luaXQpLAorICBfX01QTihkaXZyZW1fMV9pbml0KSwKKyAgX19NUE4oZ2NkXzExX2luaXQpLAorICBfX01QTihsc2hpZnRfaW5pdCksCisgIF9fTVBOKGxzaGlmdGNfaW5pdCksCisgIF9fTVBOKG1vZF8xX2luaXQpLAorICBfX01QTihtb2RfMV8xcF9pbml0KSwKKyAgX19NUE4obW9kXzFfMXBfY3BzX2luaXQpLAorICBfX01QTihtb2RfMXNfMnBfaW5pdCksCisgIF9fTVBOKG1vZF8xc18ycF9jcHNfaW5pdCksCisgIF9fTVBOKG1vZF8xc180cF9pbml0KSwKKyAgX19NUE4obW9kXzFzXzRwX2Nwc19pbml0KSwKKyAgX19NUE4obW9kXzM0bHN1YjFfaW5pdCksCisgIF9fTVBOKG1vZGV4YWN0XzFjX29kZF9pbml0KSwKKyAgX19NUE4obXVsXzFfaW5pdCksCisgIF9fTVBOKG11bF9iYXNlY2FzZV9pbml0KSwKKyAgX19NUE4obXVsbG9fYmFzZWNhc2VfaW5pdCksCisgIF9fTVBOKHByZWludl9kaXZyZW1fMV9pbml0KSwKKyAgX19NUE4ocHJlaW52X21vZF8xX2luaXQpLAorICBfX01QTihyZWRjXzFfaW5pdCksCisgIF9fTVBOKHJlZGNfMl9pbml0KSwKKyAgX19NUE4ocnNoaWZ0X2luaXQpLAorICBfX01QTihzcXJfYmFzZWNhc2VfaW5pdCksCisgIF9fTVBOKHN1Yl9uX2luaXQpLAorICAwLAorICBfX01QTihzdWJtdWxfMV9pbml0KSwKKyAgMAorfTsKKworaW50IF9fZ21wbl9jcHV2ZWNfaW5pdGlhbGl6ZWQgPSAwOworCisvKiBUaGUgZm9sbG93aW5nIHNldHVwcyBzdGFydCB3aXRoIGdlbmVyaWMgeDg2LCB0aGVuIG92ZXJ3cml0ZSB3aXRoCisgICBzcGVjaWZpY3MgZm9yIGEgY2hpcCwgYW5kIGhpZ2hlciB2ZXJzaW9ucyBvZiB0aGF0IGNoaXAuCisKKyAgIFRoZSBhcnJhbmdlbWVudCBvZiB0aGUgc2V0dXBzIGhlcmUgd2lsbCBub3JtYWxseSBiZSB0aGUgc2FtZSBhcyB0aGUgJHBhdGgKKyAgIHNlbGVjdGlvbnMgaW4gY29uZmlndXJlLmluIGZvciB0aGUgcmVzcGVjdGl2ZSBjaGlwcy4KKworICAgVGhpcyBjb2RlIGlzIHJlZW50cmFudCBhbmQgdGhyZWFkIHNhZmUuICBXZSBhbHdheXMgY2FsY3VsYXRlIHRoZSBzYW1lCisgICBkZWNpZGVkX2NwdXZlYywgc28gaWYgdHdvIGNvcGllcyBvZiB0aGUgY29kZSBhcmUgcnVubmluZyBpdCBkb2Vzbid0CisgICBtYXR0ZXIgd2hpY2ggY29tcGxldGVzIGZpcnN0LCBib3RoIHdyaXRlIHRoZSBzYW1lIHRvIF9fZ21wbl9jcHV2ZWMuCisKKyAgIFdlIG5lZWQgdG8gZ28gdmlhIGRlY2lkZWRfY3B1dmVjIGJlY2F1c2UgaWYgb25lIHRocmVhZCBoYXMgY29tcGxldGVkCisgICBfX2dtcG5fY3B1dmVjIHRoZW4gaXQgbWF5IGJlIG1ha2luZyB1c2Ugb2YgdGhlIHRocmVzaG9sZCB2YWx1ZXMgaW4gdGhhdAorICAgdmVjdG9yLiAgSWYgYW5vdGhlciB0aHJlYWQgaXMgc3RpbGwgcnVubmluZyBfX2dtcG5fY3B1dmVjX2luaXQgdGhlbiB3ZQorICAgZG9uJ3Qgd2FudCBpdCB0byB3cml0ZSBkaWZmZXJlbnQgdmFsdWVzIHRvIHRob3NlIGZpZWxkcyBzaW5jZSBzb21lIG9mIHRoZQorICAgYXNtIHJvdXRpbmVzIG9ubHkgb3BlcmF0ZSBjb3JyZWN0bHkgdXAgdG8gdGhlaXIgb3duIGRlZmluZWQgdGhyZXNob2xkLAorICAgbm90IGFuIGFyYml0cmFyeSB2YWx1ZS4gICovCisKK3ZvaWQKK19fZ21wbl9jcHV2ZWNfaW5pdCAodm9pZCkKK3sKKyAgc3RydWN0IGNwdXZlY190ICBkZWNpZGVkX2NwdXZlYzsKKworICBUUkFDRSAocHJpbnRmICgiX19nbXBuX2NwdXZlY19pbml0OlxuIikpOworCisgIG1lbXNldCAoJmRlY2lkZWRfY3B1dmVjLCAnXDAnLCBzaXplb2YgKGRlY2lkZWRfY3B1dmVjKSk7CisKKyAgQ1BVVkVDX1NFVFVQX3g4NjsKKyAgQ1BVVkVDX1NFVFVQX2ZhdDsKKworICBpZiAoISBfX2dtcG5fY3B1aWRfYXZhaWxhYmxlICgpKQorICAgIHsKKyAgICAgIFRSQUNFIChwcmludGYgKCIgIDgwMzg2LCBvciBlYXJseSA4MDQ4NiB3aXRob3V0IGNwdWlkXG4iKSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgY2hhciB2ZW5kb3Jfc3RyaW5nWzEzXTsKKyAgICAgIGNoYXIgZHVtbXlfc3RyaW5nWzEyXTsKKyAgICAgIGxvbmcgZm1zOworICAgICAgaW50IGZhbWlseSwgbW9kZWw7CisKKyAgICAgIF9fZ21wbl9jcHVpZCAodmVuZG9yX3N0cmluZywgMCk7CisgICAgICB2ZW5kb3Jfc3RyaW5nWzEyXSA9IDA7CisKKyAgICAgIGZtcyA9IF9fZ21wbl9jcHVpZCAoZHVtbXlfc3RyaW5nLCAxKTsKKyAgICAgIGZhbWlseSA9ICgoZm1zID4+IDgpICYgMHhmKSArICgoZm1zID4+IDIwKSAmIDB4ZmYpOworICAgICAgbW9kZWwgPSAoKGZtcyA+PiA0KSAmIDB4ZikgKyAoKGZtcyA+PiAxMikgJiAweGYwKTsKKworICAgICAgaWYgKHN0cmNtcCAodmVuZG9yX3N0cmluZywgIkdlbnVpbmVJbnRlbCIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICBzd2l0Y2ggKGZhbWlseSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgVFJBQ0UgKHByaW50ZiAoIiAgODA0ODYgd2l0aCBjcHVpZFxuIikpOworICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgICBUUkFDRSAocHJpbnRmICgiICBwZW50aXVtXG4iKSk7CisgICAgICAgICAgICAgIENQVVZFQ19TRVRVUF9wZW50aXVtOworICAgICAgICAgICAgICBpZiAobW9kZWwgPT0gNCB8fCBtb2RlbCA9PSA4KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIFRSQUNFIChwcmludGYgKCIgIHBlbnRpdW1tbXhcbiIpKTsKKyAgICAgICAgICAgICAgICAgIENQVVZFQ19TRVRVUF9wZW50aXVtX21teDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICAgIFRSQUNFIChwcmludGYgKCIgIHA2XG4iKSk7CisgICAgICAgICAgICAgIENQVVZFQ19TRVRVUF9wNjsKKwkgICAgICBzd2l0Y2ggKG1vZGVsKQorCQl7CisJCWNhc2UgMHgwMDoKKwkJY2FzZSAweDAxOgorCQkgIFRSQUNFIChwcmludGYgKCIgIHBlbnRpdW1wcm9cbiIpKTsKKwkJICBicmVhazsKKworCQljYXNlIDB4MDI6CisJCWNhc2UgMHgwMzoKKwkJY2FzZSAweDA0OgorCQljYXNlIDB4MDU6CisJCWNhc2UgMHgwNjoKKwkJICBUUkFDRSAocHJpbnRmICgiICBwZW50aXVtMlxuIikpOworICAgICAgICAgICAgICAgICAgQ1BVVkVDX1NFVFVQX3A2X21teDsKKwkJICBicmVhazsKKworCQljYXNlIDB4MDc6CisJCWNhc2UgMHgwODoKKwkJY2FzZSAweDBhOgorCQljYXNlIDB4MGI6CisJCWNhc2UgMHgwYzoKKwkJICBUUkFDRSAocHJpbnRmICgiICBwZW50aXVtM1xuIikpOworICAgICAgICAgICAgICAgICAgQ1BVVkVDX1NFVFVQX3A2X21teDsKKyAgICAgICAgICAgICAgICAgIENQVVZFQ19TRVRVUF9wNl9wM21teDsKKwkJICBicmVhazsKKworCQljYXNlIDB4MDk6CQkvKiBCYW5pYXMgKi8KKwkJY2FzZSAweDBkOgkJLyogRG90aGFuICovCisJCWNhc2UgMHgwZToJCS8qIFlvbmFoICovCisJCSAgVFJBQ0UgKHByaW50ZiAoIiAgQmFuaWFzL0RvdGhhbi9Zb25haFxuIikpOworICAgICAgICAgICAgICAgICAgQ1BVVkVDX1NFVFVQX3A2X21teDsKKyAgICAgICAgICAgICAgICAgIENQVVZFQ19TRVRVUF9wNl9wM21teDsKKyAgICAgICAgICAgICAgICAgIENQVVZFQ19TRVRVUF9wNl9zc2UyOworCQkgIGJyZWFrOworCisJCWNhc2UgMHgwZjoJCS8qIENvbnJvZSBNZXJvbSBLZW50c2ZpZWxkIEFsbGVuZGFsZSAqLworCQljYXNlIDB4MTA6CisJCWNhc2UgMHgxMToKKwkJY2FzZSAweDEyOgorCQljYXNlIDB4MTM6CisJCWNhc2UgMHgxNDoKKwkJY2FzZSAweDE1OgorCQljYXNlIDB4MTY6CisJCWNhc2UgMHgxNzoJCS8qIFBOUiBXb2xmZGFsZSBZb3JrZmllbGQgKi8KKwkJY2FzZSAweDE4OgorCQljYXNlIDB4MTk6CisJCWNhc2UgMHgxZDoJCS8qIFBOUiBEdW5uaW5ndG9uICovCisJCSAgVFJBQ0UgKHByaW50ZiAoIiAgQ29ucm9lXG4iKSk7CisgICAgICAgICAgICAgICAgICBDUFVWRUNfU0VUVVBfcDZfbW14OworICAgICAgICAgICAgICAgICAgQ1BVVkVDX1NFVFVQX3A2X3AzbW14OworICAgICAgICAgICAgICAgICAgQ1BVVkVDX1NFVFVQX3A2X3NzZTI7CisJCSAgQ1BVVkVDX1NFVFVQX2NvcmUyOworCQkgIGJyZWFrOworCisJCWNhc2UgMHgxYzoJCS8qIEF0b20gU2lsdmVydGhvcm5lICovCisJCWNhc2UgMHgyNjoJCS8qIEF0b20gTGluY3JvZnQgKi8KKwkJY2FzZSAweDI3OgkJLyogQXRvbSBTYWx0d2VsbCAqLworCQljYXNlIDB4MzY6CQkvKiBBdG9tIENlZGFydmlldy9TYWx0d2VsbCAqLworCQkgIFRSQUNFIChwcmludGYgKCIgIGF0b21cbiIpKTsKKwkJICBDUFVWRUNfU0VUVVBfYXRvbTsKKwkJICBDUFVWRUNfU0VUVVBfYXRvbV9tbXg7CisJCSAgQ1BVVkVDX1NFVFVQX2F0b21fc3NlMjsKKwkJICBicmVhazsKKworCQljYXNlIDB4MWE6CQkvKiBOSE0gR2FpbmVzdG93biAqLworCQljYXNlIDB4MWI6CisJCWNhc2UgMHgxZToJCS8qIE5ITSBMeW5uZmllbGQvSmFzcGVyICovCisJCWNhc2UgMHgxZjoKKwkJY2FzZSAweDIwOgorCQljYXNlIDB4MjE6CisJCWNhc2UgMHgyMjoKKwkJY2FzZSAweDIzOgorCQljYXNlIDB4MjQ6CisJCWNhc2UgMHgyNToJCS8qIFdTTSBDbGFya2RhbGUvQXJyYW5kYWxlICovCisJCWNhc2UgMHgyODoKKwkJY2FzZSAweDI5OgorCQljYXNlIDB4MmI6CisJCWNhc2UgMHgyYzoJCS8qIFdTTSBHdWxmdG93biAqLworCQljYXNlIDB4MmU6CQkvKiBOSE0gQmVja3RvbiAqLworCQljYXNlIDB4MmY6CQkvKiBXU00gRWFnbGV0b24gKi8KKwkJICBUUkFDRSAocHJpbnRmICgiICBuZWhhbGVtL3dlc3RtZXJlXG4iKSk7CisgICAgICAgICAgICAgICAgICBDUFVWRUNfU0VUVVBfcDZfbW14OworICAgICAgICAgICAgICAgICAgQ1BVVkVDX1NFVFVQX3A2X3AzbW14OworICAgICAgICAgICAgICAgICAgQ1BVVkVDX1NFVFVQX3A2X3NzZTI7CisJCSAgQ1BVVkVDX1NFVFVQX2NvcmUyOworCQkgIENQVVZFQ19TRVRVUF9jb3JlaW5obTsKKwkJICBicmVhazsKKworCQljYXNlIDB4MmE6CQkvKiBTQlIgKi8KKwkJY2FzZSAweDJkOgkJLyogU0JSLUVQICovCisJCWNhc2UgMHgzYToJCS8qIElCUiAqLworCQljYXNlIDB4M2M6CQkvKiBIYXN3ZWxsIGNsaWVudCAqLworCQljYXNlIDB4M2Y6CQkvKiBIYXN3ZWxsIHNlcnZlciAqLworCQljYXNlIDB4NDU6CQkvKiBIYXN3ZWxsIFVMVCAqLworCQljYXNlIDB4NDY6CQkvKiBDcnlzdGFsIFdlbGwgKi8KKwkJY2FzZSAweDNkOgkJLyogQnJvYWR3ZWxsICovCisJCWNhc2UgMHg0NzoJCS8qIEJyb2Fkd2VsbCAqLworCQljYXNlIDB4NGY6CQkvKiBCcm9hZHdlbGwgc2VydmVyICovCisJCWNhc2UgMHg1NjoJCS8qIEJyb2Fkd2VsbCBtaWNyb3NlcnZlciAqLworCQljYXNlIDB4NGU6CQkvKiBTa3lsYWtlIGNsaWVudCAqLworCQljYXNlIDB4NTU6CQkvKiBTa3lsYWtlIHNlcnZlciAqLworCQljYXNlIDB4NWU6CQkvKiBTa3lsYWtlICovCisJCWNhc2UgMHg4ZToJCS8qIEthYnlsYWtlICovCisJCWNhc2UgMHg5ZToJCS8qIEthYnlsYWtlICovCisJCSAgVFJBQ0UgKHByaW50ZiAoIiAgc2FuZHlicmlkZ2VcbiIpKTsKKyAgICAgICAgICAgICAgICAgIENQVVZFQ19TRVRVUF9wNl9tbXg7CisgICAgICAgICAgICAgICAgICBDUFVWRUNfU0VUVVBfcDZfcDNtbXg7CisgICAgICAgICAgICAgICAgICBDUFVWRUNfU0VUVVBfcDZfc3NlMjsKKwkJICBDUFVWRUNfU0VUVVBfY29yZTI7CisJCSAgQ1BVVkVDX1NFVFVQX2NvcmVpbmhtOworCQkgIENQVVZFQ19TRVRVUF9jb3JlaXNicjsKKwkJICBicmVhazsKKwkJfQorICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAxNToKKyAgICAgICAgICAgICAgVFJBQ0UgKHByaW50ZiAoIiAgcGVudGl1bTRcbiIpKTsKKyAgICAgICAgICAgICAgQ1BVVkVDX1NFVFVQX3BlbnRpdW00OworICAgICAgICAgICAgICBDUFVWRUNfU0VUVVBfcGVudGl1bTRfbW14OworICAgICAgICAgICAgICBDUFVWRUNfU0VUVVBfcGVudGl1bTRfc3NlMjsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKHN0cmNtcCAodmVuZG9yX3N0cmluZywgIkF1dGhlbnRpY0FNRCIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICBzd2l0Y2ggKGZhbWlseSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICAgaWYgKG1vZGVsIDw9IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgVFJBQ0UgKHByaW50ZiAoIiAgazVcbiIpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBUUkFDRSAocHJpbnRmICgiICBrNlxuIikpOworICAgICAgICAgICAgICAgICAgQ1BVVkVDX1NFVFVQX2s2OworICAgICAgICAgICAgICAgICAgQ1BVVkVDX1NFVFVQX2s2X21teDsKKyAgICAgICAgICAgICAgICAgIGlmIChtb2RlbCA+PSA4KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgVFJBQ0UgKHByaW50ZiAoIiAgazYyXG4iKSk7CisgICAgICAgICAgICAgICAgICAgICAgQ1BVVkVDX1NFVFVQX2s2X2s2Mm1teDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgaWYgKG1vZGVsID49IDkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBUUkFDRSAocHJpbnRmICgiICBrNjNcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICAgIFRSQUNFIChwcmludGYgKCIgIGF0aGxvblxuIikpOworICAgICAgICAgICAgICBDUFVWRUNfU0VUVVBfazc7CisgICAgICAgICAgICAgIENQVVZFQ19TRVRVUF9rN19tbXg7CisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIDB4MGY6CQkvKiBrOCAqLworICAgICAgICAgICAgY2FzZSAweDExOgkJLyogImZhbSAxMWgiLCBtaXggb2YgazggYW5kIGsxMCAqLworICAgICAgICAgICAgY2FzZSAweDEzOgkJLyogdW5rbm93biwgY29uc2VydmF0aXZlbHkgYXNzdW1lIGs4ICAqLworICAgICAgICAgICAgY2FzZSAweDE2OgkJLyogdW5rbm93biwgY29uc2VydmF0aXZlbHkgYXNzdW1lIGs4ICAqLworICAgICAgICAgICAgY2FzZSAweDE3OgkJLyogdW5rbm93biwgY29uc2VydmF0aXZlbHkgYXNzdW1lIGs4ICAqLworICAgICAgICAgICAgICBUUkFDRSAocHJpbnRmICgiICBrOFxuIikpOworICAgICAgICAgICAgICBDUFVWRUNfU0VUVVBfazc7CisgICAgICAgICAgICAgIENQVVZFQ19TRVRVUF9rN19tbXg7CisgICAgICAgICAgICAgIENQVVZFQ19TRVRVUF9rODsKKwkgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAweDEwOgkJLyogazEwICovCisgICAgICAgICAgICBjYXNlIDB4MTI6CQkvKiBrMTAgKGxsYW5vKSAqLworICAgICAgICAgICAgICBUUkFDRSAocHJpbnRmICgiICBrMTBcbiIpKTsKKyAgICAgICAgICAgICAgQ1BVVkVDX1NFVFVQX2s3OworICAgICAgICAgICAgICBDUFVWRUNfU0VUVVBfazdfbW14OworCSAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIDB4MTQ6CQkvKiBib2JjYXQgKi8KKyAgICAgICAgICAgICAgVFJBQ0UgKHByaW50ZiAoIiAgYm9iY2F0XG4iKSk7CisgICAgICAgICAgICAgIENQVVZFQ19TRVRVUF9rNzsKKyAgICAgICAgICAgICAgQ1BVVkVDX1NFVFVQX2s3X21teDsKKyAgICAgICAgICAgICAgQ1BVVkVDX1NFVFVQX2J0MTsKKwkgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAweDE1OgkJLyogYnVsbGRvemVyICovCisgICAgICAgICAgICAgIFRSQUNFIChwcmludGYgKCIgIGJ1bGxkb3plclxuIikpOworICAgICAgICAgICAgICBDUFVWRUNfU0VUVVBfazc7CisgICAgICAgICAgICAgIENQVVZFQ19TRVRVUF9rN19tbXg7CisJICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKHN0cmNtcCAodmVuZG9yX3N0cmluZywgIkNlbnRhdXJIYXVscyIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICBzd2l0Y2ggKGZhbWlseSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgICAgVFJBQ0UgKHByaW50ZiAoIiAgdmlhYzNcbiIpKTsKKyAgICAgICAgICAgICAgaWYgKG1vZGVsID49IDkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgVFJBQ0UgKHByaW50ZiAoIiAgdmlhYzMyXG4iKSk7CisgICAgICAgICAgICAgICAgfQorCSAgICAgIGlmIChtb2RlbCA+PSAxNSkKKwkJeworICAgICAgICAgICAgICAgICAgVFJBQ0UgKHByaW50ZiAoIiAgbmFub1xuIikpOworCQkgIENQVVZFQ19TRVRVUF9uYW5vOworCQl9CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBlbHNlIGlmIChzdHJjbXAgKHZlbmRvcl9zdHJpbmcsICJDeXJpeEluc3RlYWQiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgLyogU2hvdWxkIHJlY29nbml6ZSBDeXJpeCcgcHJvY2Vzc29ycyB0b28uICAqLworICAgICAgICAgIFRSQUNFIChwcmludGYgKCIgIGN5cml4IHNvbWV0aGluZ1xuIikpOworICAgICAgICB9CisgICAgfQorCisgIC8qIFRoZXJlJ3Mgbm8geDg2IGdlbmVyaWMgbXBuX3ByZWludl9kaXZyZW1fMSBvciBtcG5fcHJlaW52X21vZF8xLgorICAgICBJbnN0ZWFkIGRlZmF1bHQgdG8gdGhlIHBsYWluIHZlcnNpb25zIGZyb20gd2hpY2hldmVyIENQVSB3ZSBkZXRlY3RlZC4KKyAgICAgVGhlIGZ1bmN0aW9uIGFyZ3VtZW50cyBhcmUgY29tcGF0aWJsZSwgbm8gbmVlZCBmb3IgYW55IGdsdWUgY29kZS4gICovCisgIGlmIChkZWNpZGVkX2NwdXZlYy5wcmVpbnZfZGl2cmVtXzEgPT0gTlVMTCkKKyAgICBkZWNpZGVkX2NwdXZlYy5wcmVpbnZfZGl2cmVtXzEgPShwcmVpbnZfZGl2cmVtXzFfdClkZWNpZGVkX2NwdXZlYy5kaXZyZW1fMTsKKyAgaWYgKGRlY2lkZWRfY3B1dmVjLnByZWludl9tb2RfMSA9PSBOVUxMKQorICAgIGRlY2lkZWRfY3B1dmVjLnByZWludl9tb2RfMSAgICA9KHByZWludl9tb2RfMV90KSAgIGRlY2lkZWRfY3B1dmVjLm1vZF8xOworCisgIEFTU0VSVF9DUFVWRUMgKGRlY2lkZWRfY3B1dmVjKTsKKyAgQ1BVVkVDX0lOU1RBTEwgKGRlY2lkZWRfY3B1dmVjKTsKKworICAvKiBTZXQgdGhpcyBvbmNlIHRoZSB0aHJlc2hvbGQgZmllbGRzIGFyZSByZWFkeS4KKyAgICAgVXNlIHZvbGF0aWxlIHRvIHByZXZlbnQgaXQgZ2V0dGluZyBtb3ZlZC4gICovCisgICooKHZvbGF0aWxlIGludCAqKSAmX19nbXBuX2NwdXZlY19pbml0aWFsaXplZCkgPSAxOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvZmF0L2ZhdF9lbnRyeS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9mYXQvZmF0X2VudHJ5LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTY1NWNmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvZmF0L2ZhdF9lbnRyeS5hc20KQEAgLTAsMCArMSwyNDMgQEAKK2RubCAgeDg2IGZhdCBiaW5hcnkgZW50cnlwb2ludHMuCisKK2RubCAgQ29weXJpZ2h0IDIwMDMsIDIwMTIsIDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitkbmwgIEZvcmNpYmx5IGRpc2FibGUgcHJvZmlsaW5nLgorZG5sCitkbmwgIFRoZSBlbnRyeXBvaW50cyBhbmQgaW5pdHMgYXJlIHNtYWxsIGVub3VnaCBub3QgdG8gd29ycnkgYWJvdXQsIHRoZSByZWFsCitkbmwgIHJvdXRpbmVzIGFycml2ZWQgYXQgd2lsbCBoYXZlIGFueSBwcm9maWxpbmcuICBBbHNvLCB0aGUgd2F5IHRoZSBjb2RlCitkbmwgIGhlcmUgZW5kcyB3aXRoIGEganVtcCBtZWFucyB3ZSB3b24ndCB3b3JrIHByb3Blcmx5IHdpdGggdGhlCitkbmwgICJpbnN0cnVtZW50IiBwcm9maWxpbmcgc2NoZW1lIGFueXdheS4KKworZGVmaW5lKGBXQU5UX1BST0ZJTElORycsbm8pCisKKworCVRFWFQKKworCitkbmwgIFVzYWdlOiBGQVRfRU5UUlkobmFtZSwgb2Zmc2V0KQorZG5sCitkbmwgIEVtaXQgYSBmYXQgYmluYXJ5IGVudHJ5cG9pbnQgZnVuY3Rpb24gb2YgdGhlIGdpdmVuIG5hbWUuICBUaGlzIGlzIHRoZQorZG5sICBub3JtYWwgZW50cnkgZm9yIGFwcGxpY2F0aW9ucywgZWcuIF9fZ21wbl9hZGRfbi4KK2RubAorZG5sICBUaGUgY29kZSBzaW1wbHkganVtcHMgdGhyb3VnaCB0aGUgZnVuY3Rpb24gcG9pbnRlciBpbiBfX2dtcG5fY3B1dmVjIGF0CitkbmwgIHRoZSBnaXZlbiAib2Zmc2V0IiAoaW4gYnl0ZXMpLgorZG5sCitkbmwgIEZvciBub24tUElDLCB0aGUganVtcHMgYXJlIDUgYnl0ZXMgZWFjaCwgYWxpZ25pbmcgdGhlbSB0byA4IHNob3VsZCBiZQorZG5sICBmaW5lIGZvciBhbGwgeDg2cy4KK2RubAorZG5sICBGb3IgUElDLCB0aGUganVtcHMgYXJlIDIwIGJ5dGVzIGVhY2gsIGFuZCBhcmUgYmVzdCBhbGlnbmVkIHRvIDE2IHRvCitkbmwgIGVuc3VyZSBhdCBsZWFzdCB0aGUgZmlyc3QgdHdvIGluc3RydWN0aW9ucyBkb24ndCBjcm9zcyBhIGNhY2hlIGxpbmUKK2RubCAgYm91bmRhcnkuCitkbmwKK2RubCAgTm90ZSB0aGUgZXh0cmEgYCcgYWhlYWQgb2YgUFJPTE9HVUUgb2JzY3VyZXMgaXQgZnJvbSB0aGUgSEFWRV9OQVRJVkUKK2RubCAgZ3JlcHBpbmcgaW4gY29uZmlndXJlLCBzdG9wcGluZyB0aGF0IGNvZGUgdHJ5aW5nIHRvIGV2YWwgc29tZXRoaW5nIHdpdGgKK2RubCAgJDEgaW4gaXQuCisKK2RlZmluZShGQVRfRU5UUlksCittNF9hc3NlcnRfbnVtYXJncygyKQorYAlBTElHTihpZmRlZihgUElDJywxNiw4KSkKK2AnUFJPTE9HVUUoJDEpZG5sCitpZmRlZihgUElDJyxgZG5sCitpZmRlZihgREFSV0lOJyxgCisJY2FsbAlMKG1vdmxfZWlwX2VkeCkKKwltb3ZsCUwoX19fZ21wbl9jcHV2ZWMpJG5vbl9sYXp5X3B0ci0uKCVlZHgpLCAlZWR4CisJam1wCSptNF9lbXB0eV9pZl96ZXJvKCQyKSglZWR4KQorJyxgZG5sCisJY2FsbAlMKG1vdmxfZWlwX2VkeCkKK0woZW50cnlfaGVyZSQyKToKKwlhZGRsCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8rWy4tTChlbnRyeV9oZXJlJDIpXSwgJWVkeAorCW1vdmwJR1NZTV9QUkVGSVhgJ19fZ21wbl9jcHV2ZWNAR09UKCVlZHgpLCAlZWR4CisJam1wCSptNF9lbXB0eV9pZl96ZXJvKCQyKSglZWR4KQorJykKKycsYGRubCBub24tUElDCisJam1wCSpHU1lNX1BSRUZJWGAnX19nbXBuX2NwdXZlYyskMgorJykKK0VQSUxPR1VFKCkKKycpCisKKworZG5sICBGQVRfRU5UUlkgZm9yIGVhY2ggQ1BVVkVDX0ZVTkNTX0xJU1QKK2RubAorCitkZWZpbmUoYENQVVZFQ19vZmZzZXQnLDApCitmb3JlYWNoKGksCitgRkFUX0VOVFJZKE1QTihpKSxDUFVWRUNfb2Zmc2V0KQorZGVmaW5lKGBDUFVWRUNfb2Zmc2V0JyxldmFsKENQVVZFQ19vZmZzZXQgKyA0KSknLAorQ1BVVkVDX0ZVTkNTX0xJU1QpCisKK2lmZGVmKGBQSUMnLGAKKwlBTElHTig4KQorTChtb3ZsX2VpcF9lZHgpOgorCW1vdmwJKCVlc3ApLCAlZWR4CisJcmV0X2ludGVybmFsCitpZmRlZihgREFSV0lOJyxgCisJLnNlY3Rpb24JX19JTVBPUlQsX19wb2ludGVycyxub25fbGF6eV9zeW1ib2xfcG9pbnRlcnMKK0woX19fZ21wbl9jcHV2ZWMpJG5vbl9sYXp5X3B0cjoKKwkuaW5kaXJlY3Rfc3ltYm9sCV9fX2dtcG5fY3B1dmVjCisJLmxvbmcJMAorCVRFWFQKKycpCisnKQorCisKK2RubCAgVXNhZ2U6IEZBVF9JTklUKG5hbWUsIG9mZnNldCkKK2RubAorZG5sICBFbWl0IGEgZmF0IGJpbmFyeSBpbml0aWFsaXplciBmdW5jdGlvbiBvZiB0aGUgZ2l2ZW4gbmFtZS4gIFRoZXNlCitkbmwgIGZ1bmN0aW9ucyBhcmUgdGhlIGluaXRpYWwgdmFsdWVzIGZvciB0aGUgcG9pbnRlcnMgaW4gX19nbXBuX2NwdXZlYy4KK2RubAorZG5sICBUaGUgY29kZSBzaW1wbHkgY2FsbHMgX19nbXBuX2NwdXZlY19pbml0LCBhbmQgdGhlbiBqdW1wcyBiYWNrIHRocm91Z2gKK2RubCAgdGhlIF9fZ21wbl9jcHV2ZWMgcG9pbnRlciwgYXQgdGhlIGdpdmVuICJvZmZzZXQiIChpbiBieXRlcykuCitkbmwgIF9fZ21wbl9jcHV2ZWNfaW5pdCB3aWxsIGhhdmUgc3RvcmVkIHRoZSBhZGRyZXNzIG9mIHRoZSBzZWxlY3RlZAorZG5sICBpbXBsZW1lbnRhdGlvbiB0aGVyZS4KK2RubAorZG5sICBPbmx5IG9uZSBvZiB0aGVzZSByb3V0aW5lcyB3aWxsIGJlIGV4ZWN1dGVkLCBhbmQgb25seSBvbmNlLCBzaW5jZSBhZnRlcgorZG5sICB0aGF0IGFsbCB0aGUgX19nbXBuX2NwdXZlYyBwb2ludGVycyBnbyB0byByZWFsIHJvdXRpbmVzLiAgU28gdGhlcmUncyBubworZG5sICBuZWVkIGZvciBhbnl0aGluZyBzcGVjaWFsIGhlcmUsIGp1c3Qgc29tZXRoaW5nIHNtYWxsIGFuZCBzaW1wbGUuICBUbworZG5sICBrZWVwIGNvZGUgc2l6ZSBkb3duLCAiZmF0X2luaXQiIGlzIGEgc2hhcmVkIGJpdCBvZiBjb2RlLCBhcnJpdmVkIGF0CitkbmwgIHdpdGggdGhlIG9mZnNldCBpbiAlYWwuICAlYWwgaXMgdXNlZCBzaW5jZSB0aGUgbW92YiBpbnN0cnVjdGlvbiBpcyAyCitkbmwgIGJ5dGVzIHdoZXJlICVlYXggd291bGQgYmUgNC4KK2RubAorZG5sICBOb3RlIGhhdmluZyBgUFJPTE9HVUUgaW4gRkFUX0lOSVQgb2JzY3VyZXMgdGhhdCBQUk9MT0dVRSBmcm9tIHRoZQorZG5sICBIQVZFX05BVElWRSBncmVwcGluZyBpbiBjb25maWd1cmUsIHByZXZlbnRpbmcgdGhhdCBjb2RlIHRyeWluZyB0byBldmFsCitkbmwgIHNvbWV0aGluZyB3aXRoICQxIGluIGl0LgorCitkZWZpbmUoRkFUX0lOSVQsCittNF9hc3NlcnRfbnVtYXJncygyKQorYFBST0xPR1VFKCQxKWRubAorCW1vdmIJJGAnJDIsICVhbAorCWptcAlMKGZhdF9pbml0KQorRVBJTE9HVUUoKQorJykKKworTChmYXRfaW5pdCk6CisJQyBhbAlfX2dtcG5fY3B1dmVjIGJ5dGUgb2Zmc2V0CisKKwltb3Z6YmwJJWFsLCAlZWF4CisJcHVzaGwJJWVheAorCitpZmRlZihgUElDJyxgZG5sCitpZmRlZihgREFSV0lOJyxgCisJc3ViCSQ4LCAlZXNwCisJQ0FMTCgJX19nbXBuX2NwdXZlY19pbml0KQorCWFkZAkkOCwgJWVzcAorCWNhbGwJTChtb3ZsX2VpcF9lZHgpCisJbW92bAlMKF9fX2dtcG5fY3B1dmVjKSRub25fbGF6eV9wdHItLiglZWR4KSwgJWVkeAorJyxgZG5sCisJcHVzaGwJJWVieAorCWNhbGwJTChtb3ZsX2VpcF9lYngpCitMKGluaXRfaGVyZSk6CisJYWRkbAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfK1suLUwoaW5pdF9oZXJlKV0sICVlYngKKwlDQUxMKAlfX2dtcG5fY3B1dmVjX2luaXQpCisJbW92bAlHU1lNX1BSRUZJWGAnX19nbXBuX2NwdXZlY0BHT1QoJWVieCksICVlZHgKKwlwb3BsCSVlYngKKycpCisJcG9wbAklZWF4CisJam1wCSooJWVkeCwlZWF4KQorCitMKG1vdmxfZWlwX2VieCk6CisJbW92bAkoJWVzcCksICVlYngKKwlyZXRfaW50ZXJuYWwKKycsYGRubCBub24tUElDCisJc3ViCSQ4LCAlZXNwCQlDIG5lZWRlZCBvbiBEYXJ3aW4sIGhhcm1sZXNzIGVsc2V3aGVyZQorCUNBTEwoCV9fZ21wbl9jcHV2ZWNfaW5pdCkKKwlhZGQJJDgsICVlc3AJCUMgbmVlZGVkIG9uIERhcndpbiwgaGFybWxlc3MgZWxzZXdoZXJlCisJcG9wbAklZWF4CisJam1wCSpHU1lNX1BSRUZJWGAnX19nbXBuX2NwdXZlYyglZWF4KQorJykKKworZG5sICBGQVRfSU5JVCBmb3IgZWFjaCBDUFVWRUNfRlVOQ1NfTElTVAorZG5sCisKK2RlZmluZShgQ1BVVkVDX29mZnNldCcsMCkKK2ZvcmVhY2goaSwKK2BGQVRfSU5JVChNUE4oaWAnX2luaXQpLENQVVZFQ19vZmZzZXQpCitkZWZpbmUoYENQVVZFQ19vZmZzZXQnLGV2YWwoQ1BVVkVDX29mZnNldCArIDQpKScsCitDUFVWRUNfRlVOQ1NfTElTVCkKKworCisKK0MgbG9uZyBfX2dtcG5fY3B1aWQgKGNoYXIgZHN0WzEyXSwgaW50IGlkKTsKK0MKK0MgVGhpcyBpcyBjYWxsZWQgb25seSBvbmNlLCBzbyBqdXN0IHNvbWV0aGluZyBzaW1wbGUgYW5kIGNvbXBhY3QgaXMgZmluZS4KKworZGVmZnJhbWUoUEFSQU1fSUQsICA4KQorZGVmZnJhbWUoUEFSQU1fRFNULCA0KQorZGVmbGl0KGBGUkFNRScsMCkKKworUFJPTE9HVUUoX19nbXBuX2NwdWlkKQorCXB1c2hsCSVlc2kJCUZSQU1FX3B1c2hsKCkKKwlwdXNobAklZWJ4CQlGUkFNRV9wdXNobCgpCisJbW92bAlQQVJBTV9JRCwgJWVheAorCWNwdWlkCisJbW92bAlQQVJBTV9EU1QsICVlc2kKKwltb3ZsCSVlYngsICglZXNpKQorCW1vdmwJJWVkeCwgNCglZXNpKQorCW1vdmwJJWVjeCwgOCglZXNpKQorCXBvcGwJJWVieAorCXBvcGwJJWVzaQorCXJldAorRVBJTE9HVUUoKQorCisKK0MgaW50IF9fZ21wbl9jcHVpZF9hdmFpbGFibGUgKHZvaWQpOworQworQyBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIGNwdWlkIGluc3RydWN0aW9uIGlzIGF2YWlsYWJsZSwgd2hpY2ggbWVhbnMgbGF0ZQorQyBtb2RlbCA4MDQ4NiBhbmQgaGlnaGVyLiAgODAzODYgYW5kIGVhcmx5IDgwNDg2IGRvbid0IGhhdmUgY3B1aWQuCitDCitDIFRoZSB0ZXN0IGZvbGxvd3MgSW50ZWwgQVAtNDg1IGFwcGxpY2F0aW9uIG5vdGUsIG5hbWVseSB0aGF0IGlmIGJpdCAyMSBpcworQyBtb2RpZmlhYmxlIHRoZW4gY3B1aWQgaXMgc3VwcG9ydGVkLiAgVGhpcyB0ZXN0IGlzIHJlZW50cmFudCBhbmQgdGhyZWFkCitDIHNhZmUsIHNpbmNlIG9mIGNvdXJzZSBhbnkgaW50ZXJydXB0IG9yIGNvbnRleHQgc3dpdGNoIHdpbGwgcHJlc2VydmUgdGhlCitDIGZsYWdzIHdoaWxlIHdlJ3JlIHRpbmtlcmluZyB3aXRoIHRoZW0uCitDCitDIFRoaXMgaXMgY2FsbGVkIG9ubHkgb25jZSwgc28ganVzdCBzb21ldGhpbmcgc2ltcGxlIGFuZCBjb21wYWN0IGlzIGZpbmUuCisKK1BST0xPR1VFKF9fZ21wbl9jcHVpZF9hdmFpbGFibGUpCisJcHVzaGYKKwlwb3BsCSVlY3gJCUMgb2xkIGZsYWdzCisKKwltb3ZsCSVlY3gsICVlZHgKKwl4b3JsCSQweDIwMDAwMCwgJWVkeAorCXB1c2hsCSVlZHgKKwlwb3BmCisJcHVzaGYKKwlwb3BsCSVlZHgJCUMgdHdlYWtlZCBmbGFncworCisJbW92bAkkMSwgJWVheAorCWNtcGwJJWVjeCwgJWVkeAorCWpuZQlMKGF2YWlsYWJsZSkKKwl4b3JsCSVlYXgsICVlYXgJQyBub3QgY2hhbmdlZCwgc28gY3B1aWQgbm90IGF2YWlsYWJsZQorCitMKGF2YWlsYWJsZSk6CisJcmV0CitFUElMT0dVRSgpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2ZhdC9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9mYXQvZ21wLW1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NDFhNmIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9mYXQvZ21wLW1wYXJhbS5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qIEZhdCBiaW5hcnkgeDg2IGdtcC1tcGFyYW0uaCAtLSBDb21waWxlci9tYWNoaW5lIHBhcmFtZXRlciBoZWFkZXIgZmlsZS4KKworQ29weXJpZ2h0IDE5OTEsIDE5OTMsIDE5OTQsIDIwMDAtMjAwMywgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2RlZmluZSBHTVBfTElNQl9CSVRTIDMyCisjZGVmaW5lIEdNUF9MSU1CX0JZVEVTIDQKKworCisvKiBtcG5fZGl2ZXhhY3RfMSBpcyBmYXN0ZXIgdGhhbiBtcG5fZGl2cmVtXzEgYXQgYWxsIHNpemVzLiAgVGhlIG9ubHkgdGltZQorICAgdGhpcyBtaWdodCBub3QgYmUgdHJ1ZSBjdXJyZW50bHkgaXMgZm9yIGFjdHVhbCA4MDM4NiBhbmQgODA0ODYgY2hpcHMsCisgICB3aGVyZSBtcG4veDg2L2RpdmVfMS5hc20gbWlnaHQgYmUgc2xvd2VyIHRoYW4gbXBuL3g4Ni9kaXZyZW1fMS5hc20sIGJ1dAorICAgdGhhdCdzIG5vdCB3b3J0aCB3b3JyeWluZyBhYm91dC4gICovCisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAwCisKKy8qIE9ubHkgc29tZSBvZiB0aGUgeDg2cyBoYXZlIGFuIG1wbl9wcmVpbnZfZGl2cmVtXzEsIGJ1dCB3ZSBzZXQKKyAgIFVTRV9QUkVJTlZfRElWUkVNXzEgc28gdGhhdCBhbGwgY2FsbGVycyB1c2UgaXQsIGFuZCB0aGVuIGxldCB0aGUKKyAgIF9fZ21wbl9jcHV2ZWMgcG9pbnRlciBnbyB0byBwbGFpbiBtcG5fZGl2cmVtXzEgaWYgdGhlcmUncyBub3QgYW4gYWN0dWFsCisgICBwcmVpbnYuICAqLworI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgMQorCisjZGVmaW5lIEJNT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgICAgICAgIDIwCisKKy8qIG1wbl9zcXJfYmFzZWNhc2UgaXMgZmFzdGVyIHRoYW4gbXBuX211bF9iYXNlY2FzZSBhdCBhbGwgc2l6ZXMsIG5vIG5lZWQKKyAgIGZvciBtcG5fc3FyIHRvIGNhbGwgdGhlIGxhdHRlci4gICovCisjZGVmaW5lIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQgMAorCisvKiBTZW5zaWJsZSBmYWxsYmFja3MgZm9yIHRoZXNlLCB3aGVuIG5vdCB0YWtlbiBmcm9tIGEgY3B1LXNwZWNpZmljCisgICBnbXAtbXBhcmFtLmguICAqLworI2RlZmluZSBNVUxfVE9PTTIyX1RIUkVTSE9MRCAgICAgIDIwCisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAxMzAKKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAzMAorI2RlZmluZSBTUVJfVE9PTTNfVEhSRVNIT0xEICAgICAgMjAwCisKKy8qIFRoZXNlIGFyZSB2YWx1ZXMgbW9yZSBvciBsZXNzIGluIHRoZSBtaWRkbGUgb2Ygd2hhdCB0aGUgdHlwaWNhbCB4ODYgY2hpcHMKKyAgIGNvbWUgb3V0IGFzLiAgRm9yIGEgZmF0IGJpbmFyeSBpdCdzIG5lY2Vzc2FyeSB0byBoYXZlIHZhbHVlcyBmb3IgdGhlc2UsCisgICBzaW5jZSB0aGUgZGVmYXVsdHMgZm9yIE1VTF9GRlRfVEFCTEUgYW5kIFNRUl9GRlRfVEFCTEUgb3RoZXJ3aXNlIGNvbWUgb3V0CisgICBhcyBub24tY29uc3RhbnQgYXJyYXkgaW5pdGlhbGl6ZXJzLiAgRklYTUU6IFBlcmhhcHMgdGhlc2Ugc2hvdWxkIGJlIGRvbmUKKyAgIGluIHRoZSBjcHV2ZWMgc3RydWN0dXJlIGxpa2Ugb3RoZXIgdGhyZXNob2xkcy4gICovCisjZGVmaW5lIE1VTF9GRlRfVEFCTEUgIHsgNDY0LCA5MjgsIDE5MjAsIDM1ODQsIDEwMjQwLCA0MDk2MCwgMCB9CisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgNDAwCisjZGVmaW5lIE1VTF9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAyMDAwCisKKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRSAgeyA1MjgsIDExODQsIDE5MjAsIDQ2MDgsIDE0MzM2LCA0MDk2MCwgMCB9CisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgNTAwCisjZGVmaW5lIFNRUl9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAzMDAwCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9mYXQvbHNoaWZ0Yy5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvZmF0L2xzaGlmdGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWNmNDg5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvZmF0L2xzaGlmdGMuYwpAQCAtMCwwICsxLDMyIEBACisvKiBGYXQgYmluYXJ5IGZhbGxiYWNrIG1wbl9sc2hpZnRjLgorCitDb3B5cmlnaHQgMjAwMywgMjAwOSwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworCisjaW5jbHVkZSAibXBuL2dlbmVyaWMvbHNoaWZ0Yy5jIgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvZmF0L21vZF8xLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9mYXQvbW9kXzEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjE0OWNjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvZmF0L21vZF8xLmMKQEAgLTAsMCArMSwzMiBAQAorLyogRmF0IGJpbmFyeSBmYWxsYmFjayBtcG5fbW9kXzEuCisKK0NvcHlyaWdodCAyMDAzLCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisKKyNpbmNsdWRlICJtcG4vZ2VuZXJpYy9tb2RfMS5jIgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvZmF0L21vZF8xXzEuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2ZhdC9tb2RfMV8xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJlYWE3YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2ZhdC9tb2RfMV8xLmMKQEAgLTAsMCArMSwzNiBAQAorLyogRmF0IGJpbmFyeSBmYWxsYmFjayBtcG5fbW9kXzFfMXAuCisKK0NvcHlyaWdodCAyMDAzLCAyMDA5LCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisvKgorUFJPTE9HVUUobXBuX21vZF8xXzFwX2NwcykKKyovCisKKyNkZWZpbmUgT1BFUkFUSU9OX21vZF8xXzFfY3BzIDEKKyNpbmNsdWRlICJtcG4vZ2VuZXJpYy9tb2RfMV8xLmMiCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9mYXQvbW9kXzFfMi5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvZmF0L21vZF8xXzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDk1YTYxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvZmF0L21vZF8xXzIuYwpAQCAtMCwwICsxLDM2IEBACisvKiBGYXQgYmluYXJ5IGZhbGxiYWNrIG1wbl9tb2RfMXNfMnAuCisKK0NvcHlyaWdodCAyMDAzLCAyMDA5LCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisvKgorUFJPTE9HVUUobXBuX21vZF8xc18ycF9jcHMpCisqLworCisjZGVmaW5lIE9QRVJBVElPTl9tb2RfMV8yX2NwcyAxCisjaW5jbHVkZSAibXBuL2dlbmVyaWMvbW9kXzFfMi5jIgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvZmF0L21vZF8xXzQuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2ZhdC9tb2RfMV80LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFjMGRlZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2ZhdC9tb2RfMV80LmMKQEAgLTAsMCArMSwzNiBAQAorLyogRmF0IGJpbmFyeSBmYWxsYmFjayBtcG5fbW9kXzFzXzRwLgorCitDb3B5cmlnaHQgMjAwMywgMjAwOSwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworLyoKK1BST0xPR1VFKG1wbl9tb2RfMXNfNHBfY3BzKQorKi8KKworI2RlZmluZSBPUEVSQVRJT05fbW9kXzFfNF9jcHMgMQorI2luY2x1ZGUgIm1wbi9nZW5lcmljL21vZF8xXzQuYyIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2ZhdC9tb2RlMW8uYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2ZhdC9tb2RlMW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzBkZGI4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvZmF0L21vZGUxby5jCkBAIC0wLDAgKzEsMzIgQEAKKy8qIEZhdCBiaW5hcnkgZmFsbGJhY2sgbXBuX21vZGV4YWN0XzFjX29kZC4KKworQ29weXJpZ2h0IDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKworI2luY2x1ZGUgIm1wbi9nZW5lcmljL21vZGUxby5jIgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvZmF0L211bGxvX2Jhc2VjYXNlLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9mYXQvbXVsbG9fYmFzZWNhc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Zjg2YmU2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvZmF0L211bGxvX2Jhc2VjYXNlLmMKQEAgLTAsMCArMSwzMiBAQAorLyogRmF0IGJpbmFyeSBmYWxsYmFjayBtcG5fbXVsbG9fYmFzZWNhc2UuCisKK0NvcHlyaWdodCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisKKyNpbmNsdWRlICJtcG4vZ2VuZXJpYy9tdWxsb19iYXNlY2FzZS5jIgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvZmF0L3JlZGNfMS5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvZmF0L3JlZGNfMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMjU0MDMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9mYXQvcmVkY18xLmMKQEAgLTAsMCArMSwzMiBAQAorLyogRmF0IGJpbmFyeSBmYWxsYmFjayBtcG5fcmVkY18xLgorCitDb3B5cmlnaHQgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworCisjaW5jbHVkZSAibXBuL2dlbmVyaWMvcmVkY18xLmMiCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9mYXQvcmVkY18yLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9mYXQvcmVkY18yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkzMmQ1OAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2ZhdC9yZWRjXzIuYwpAQCAtMCwwICsxLDMyIEBACisvKiBGYXQgYmluYXJ5IGZhbGxiYWNrIG1wbl9yZWRjXzIuCisKK0NvcHlyaWdodCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisKKyNpbmNsdWRlICJtcG4vZ2VuZXJpYy9yZWRjXzIuYyIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2djZF8xMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9nY2RfMTEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNjkxMzUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9nY2RfMTEuYXNtCkBAIC0wLDAgKzEsMTI2IEBACitkbmwgIHg4NiBtcG5fZ2NkXzExIG9wdGltaXNlZCBmb3IgcHJvY2Vzc29ycyB3aXRoIHNsb3cgQlNGLgorCitkbmwgIEJhc2VkIG9uIEMgdmVyc2lvbi4KKworZG5sICBDb3B5cmlnaHQgMjAxOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitkbmwgIFJ1ZGltZW50YXJ5IGNvZGUgZm9yIHg4Ni0zMiwgaS5lLiBmb3IgQ1BVcyB3aXRob3V0IGNtb3YuICBBbHNvLCB0aGUgYnNmCitkbmwgIGluc3RydWN0aW9uIGlzIGFzc3VtZWQgdG8gYmUgc28gc2xvdyBpdCBpcyB1c2VsZXNzLiAgSW5zdGVhZCBhIHRlYmxlIGlzCitkbmwgIHVzZWQuCitkbmwKK2RubCAgVGhlIGxvb3AgYmVuZWZpdHMgZnJvbSBPb08sIGluLW9yZGVyIENQVXMgbWlnaHQgd2FudCBhIGRpZmZlcmVudCBsb29wLgorZG5sICBUaGUgZWJ4IGFuZCBlY3ggcmVnaXN0ZXJzIGNvdWxkIGJlIGNvbWJpbmVkIGlmIHRoZSBhc3NpZ21lbnQgb2YgZWN4IHdlcmUKK2RubCAgcG9zdHBvbmVkIHVudGlsIGVieCBkaWVkLCBidXQgdGhhdCB3b3VsZCBhdCBsZWFzdCBodXJ0IGluLW9yZGVyIENQVXMuCisKK0MJICAgICBjeWNsZXMvYml0IChhcHByb3gpCitDIEFNRCBLNwkgPworQyBBTUQgSzgsSzkJID8KK0MgQU1EIEsxMAkgPworQyBBTUQgYmQxCSA/CitDIEFNRCBiZDIJID8KK0MgQU1EIGJkMwkgPworQyBBTUQgYmQ0CSA/CitDIEFNRCBidDEJID8KK0MgQU1EIGJ0MgkgPworQyBBTUQgem4xCSA/CitDIEFNRCB6bjIJID8KK0MgSW50ZWwgUDQtMgkgPworQyBJbnRlbCBQNC0zLzQJID8KK0MgSW50ZWwgUDYvMTMJID8KK0MgSW50ZWwgQ05SCSA/CitDIEludGVsIE5ITQkgPworQyBJbnRlbCBTQlIJID8KK0MgSW50ZWwgSUJSCSA/CitDIEludGVsIEhXTAkgPworQyBJbnRlbCBCV0wJID8KK0MgSW50ZWwgU0tMCSA/CitDIEludGVsIGF0b20JID8KK0MgSW50ZWwgU0xNCSA/CitDIEludGVsIEdMTQkgPworQyBJbnRlbCBHTE0rCSA/CitDIFZJQSBuYW5vCSA/CitDIE51bWJlcnMgbWVhc3VyZWQgd2l0aDogc3BlZWQgLUNEIC1zOC0zMiAtdDI0IG1wbl9nY2RfMQorCitkZWZsaXQoTUFYU0hJRlQsIDYpCitkZWZsaXQoTUFTSywgZXZhbCgobTRfbHNoaWZ0KDEsTUFYU0hJRlQpKS0xKSkKKworREVGX09CSkVDVChjdHpfdGFibGUsNjQpCisJLmJ5dGUJTUFYU0hJRlQKK2Zvcmxvb3AoaSwxLE1BU0ssCitgCS5ieXRlCW00X2NvdW50X3RyYWlsaW5nX3plcm9zKGkpCisnKQorRU5EX09CSkVDVChjdHpfdGFibGUpCisKK2RlZmluZShgdTAnLCAgICBgJWVheCcpCitkZWZpbmUoYHYwJywgICAgYCVlZHgnKQorCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX2djZF8xMSkKKwlwdXNoCSVlZGkKKwlwdXNoCSVlc2kKKwlwdXNoCSVlYngKKworCW1vdgkxNiglZXNwKSwgdTAKKwltb3YJMjAoJWVzcCksIHYwCisJTEVBTCgJY3R6X3RhYmxlLCAlZXNpKQorCXN1Ygl2MCwgdTAJCQlDIHUgPSB1IC0gdgkJMAorCWp6CUwoZW5kKQorCisJQUxJR04oMTYpCitMKHRvcCk6CXNiYgklZWJ4LCAlZWJ4CQlDIG1hc2sJCQkxCisJbW92CXUwLCAlZWRpCQlDCQkJMQorCW1vdgl1MCwgJWVjeAkJQwkJCTEKKwlhbmQJJWVieCwgJWVkaQkJQwkJCTIKKwl4b3IJJWVieCwgdTAJCUMJCQkyCisJYWRkCSVlZGksIHYwCQlDIHYgPSBtaW4odS52KQkJMworCXN1YgklZWJ4LCB1MAkJQyB1ID0gfHUgLSB2fAkJMworTChtaWQpOglhbmQJJE1BU0ssICVlY3gJCUMJCQkyCisJbW92emJsCSglZXNpLCVlY3gpLCAlZWN4CUMJCQkzCisJanoJTChzaGlmdF9hbG90KQorCXNocgklY2wsIHUwCQkJQwkJCTQKKwlzdWIJdjAsIHUwCQkJQyB1ID0gdSAtIHYJCTAsNQorCWpueglMKHRvcCkKKworTChlbmQpOgltb3YJdjAsICVlYXgKKwlwb3AJJWVieAorCXBvcAklZXNpCisJcG9wCSVlZGkKKwlyZXQKKworTChzaGlmdF9hbG90KToKKwlzaHIJJE1BWFNISUZULCB1MAorCW1vdgl1MCwgJWVjeAorCWptcAlMKG1pZCkKK0VQSUxPR1VFKCkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvZ2VvZGUvZ21wLW1wYXJhbS5oIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvZ2VvZGUvZ21wLW1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjOWM5ZjEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9nZW9kZS9nbXAtbXBhcmFtLmgKQEAgLTAsMCArMSwxNDEgQEAKKy8qIEdlbmVyaWMgeDg2IGdtcC1tcGFyYW0uaCAtLSBDb21waWxlci9tYWNoaW5lIHBhcmFtZXRlciBoZWFkZXIgZmlsZS4KKworQ29weXJpZ2h0IDE5OTEsIDE5OTMsIDE5OTQsIDIwMDAtMjAwMiwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2RlZmluZSBHTVBfTElNQl9CSVRTIDMyCisjZGVmaW5lIEdNUF9MSU1CX0JZVEVTIDQKKworLyogR2VuZXJhdGVkIGJ5IHR1bmV1cC5jLCAyMDExLTAxLTMwLCBnY2MgMy40ICovCisKKyNkZWZpbmUgTU9EXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgTU9EXzFOX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgMTcKKyNkZWZpbmUgTU9EXzFVX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgIDkKKyNkZWZpbmUgTU9EXzFfMV9UT19NT0RfMV8yX1RIUkVTSE9MRCAgICAgICAgIDAgIC8qIG5ldmVyIG1wbl9tb2RfMV8xcCAqLworI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICAgICAxNAorI2RlZmluZSBQUkVJTlZfTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICBNUF9TSVpFX1RfTUFYICAvKiBuZXZlciAqLworI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBESVZFWEFDVF8xX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIEJNT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgICAgICAgIDQyCisKKyNkZWZpbmUgTVVMX1RPT00yMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgTVVMX1RPT00zM19USFJFU0hPTEQgICAgICAgICAgICAgICAgNjYKKyNkZWZpbmUgTVVMX1RPT000NF9USFJFU0hPTEQgICAgICAgICAgICAgICAxMDUKKyNkZWZpbmUgTVVMX1RPT002SF9USFJFU0hPTEQgICAgICAgICAgICAgICAxNDEKKyNkZWZpbmUgTVVMX1RPT004SF9USFJFU0hPTEQgICAgICAgICAgICAgICAyMTIKKworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT000M19USFJFU0hPTEQgICAgICA2MgorI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT001M19USFJFU0hPTEQgICAgICA2OQorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT001M19USFJFU0hPTEQgICAgICA2NQorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT002M19USFJFU0hPTEQgICAgICA2NworCisjZGVmaW5lIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMzMKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNjAKKyNkZWZpbmUgU1FSX1RPT000X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMzYKKyNkZWZpbmUgU1FSX1RPT002X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxOTYKKyNkZWZpbmUgU1FSX1RPT004X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyOTIKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxNAorI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxNgorCisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgNDY4ICAvKiBrID0gNSAqLworI2RlZmluZSBNVUxfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgNDY4LCA1fSwgeyAgICAgMTcsIDZ9LCB7ICAgICAgOSwgNX0sIHsgICAgIDE5LCA2fSwgXAorICAgIHsgICAgIDExLCA1fSwgeyAgICAgMjMsIDZ9LCB7ICAgICAyMSwgN30sIHsgICAgIDExLCA2fSwgXAorICAgIHsgICAgIDI1LCA3fSwgeyAgICAgMTMsIDZ9LCB7ICAgICAyNywgN30sIHsgICAgIDE1LCA2fSwgXAorICAgIHsgICAgIDMxLCA3fSwgeyAgICAgMjEsIDh9LCB7ICAgICAxMSwgN30sIHsgICAgIDI3LCA4fSwgXAorICAgIHsgICAgIDE1LCA3fSwgeyAgICAgMzMsIDh9LCB7ICAgICAxOSwgN30sIHsgICAgIDM5LCA4fSwgXAorICAgIHsgICAgIDIzLCA3fSwgeyAgICAgNDcsIDh9LCB7ICAgICAyNywgOX0sIHsgICAgIDE1LCA4fSwgXAorICAgIHsgICAgIDM5LCA5fSwgeyAgICAgMjMsIDh9LCB7ICAgICA0NywxMH0sIHsgICAgIDE1LCA5fSwgXAorICAgIHsgICAgIDMxLCA4fSwgeyAgICAgNjcsIDl9LCB7ICAgICAzOSwgOH0sIHsgICAgIDc5LCA5fSwgXAorICAgIHsgICAgIDQ3LCA4fSwgeyAgICAgOTUsIDl9LCB7ICAgICA1NSwxMH0sIHsgICAgIDMxLCA5fSwgXAorICAgIHsgICAgIDYzLCA4fSwgeyAgICAxMjcsIDl9LCB7ICAgICA3OSwxMH0sIHsgICAgIDQ3LCA5fSwgXAorICAgIHsgICAgIDk1LDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA2MywgOX0sIHsgICAgMTM1LDEwfSwgXAorICAgIHsgICAgIDc5LCA5fSwgeyAgICAxNTksMTB9LCB7ICAgICA5NSwgOX0sIHsgICAgMTkxLDExfSwgXAorICAgIHsgICAgIDYzLDEwfSwgeyAgICAxMjcsIDl9LCB7ICAgIDI1NSwxMH0sIHsgICAgMTQzLCA5fSwgXAorICAgIHsgICAgMjg3LDEwfSwgeyAgICAxNTksMTF9LCB7ICAgICA5NSwxMH0sIHsgICAgMTkxLCA5fSwgXAorICAgIHsgICAgMzgzLDEyfSwgeyAgIDQwOTYsMTN9LCB7ICAgODE5MiwxNH0sIHsgIDE2Mzg0LDE1fSwgXAorICAgIHsgIDMyNzY4LDE2fSB9CisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzX1NJWkUgNjEKKyNkZWZpbmUgTVVMX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDU1MDQKKworI2RlZmluZSBTUVJfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDM5NiAgLyogayA9IDUgKi8KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDM5NiwgNX0sIHsgICAgIDIxLCA2fSwgeyAgICAgMTEsIDV9LCB7ICAgICAyMywgNn0sIFwKKyAgICB7ICAgICAyMSwgN30sIHsgICAgIDExLCA2fSwgeyAgICAgMjQsIDd9LCB7ICAgICAxMywgNn0sIFwKKyAgICB7ICAgICAyNywgN30sIHsgICAgIDE1LCA2fSwgeyAgICAgMzEsIDd9LCB7ICAgICAyMSwgOH0sIFwKKyAgICB7ICAgICAxMSwgN30sIHsgICAgIDI3LCA4fSwgeyAgICAgMTUsIDd9LCB7ICAgICAzMywgOH0sIFwKKyAgICB7ICAgICAxOSwgN30sIHsgICAgIDM5LCA4fSwgeyAgICAgMjMsIDd9LCB7ICAgICA0NywgOH0sIFwKKyAgICB7ICAgICAyNywgOX0sIHsgICAgIDE1LCA4fSwgeyAgICAgMzksIDl9LCB7ICAgICAyMywgOH0sIFwKKyAgICB7ICAgICA1MSwxMH0sIHsgICAgIDE1LCA5fSwgeyAgICAgMzEsIDh9LCB7ICAgICA2NywgOX0sIFwKKyAgICB7ICAgICAzOSwgOH0sIHsgICAgIDc5LCA5fSwgeyAgICAgNDcsIDh9LCB7ICAgICA5NSwgOX0sIFwKKyAgICB7ICAgICA1NSwxMH0sIHsgICAgIDMxLCA5fSwgeyAgICAgNzksMTB9LCB7ICAgICA0NywgOX0sIFwKKyAgICB7ICAgICA5NSwxMX0sIHsgICAgIDMxLDEwfSwgeyAgICAgNjMsIDl9LCB7ICAgIDEyNywgOH0sIFwKKyAgICB7ICAgIDI1NSwgOX0sIHsgICAgMTM1LDEwfSwgeyAgICAgNzksIDl9LCB7ICAgIDE1OSwgOH0sIFwKKyAgICB7ICAgIDMxOSwxMH0sIHsgICAgIDk1LCA5fSwgeyAgICAxOTEsMTF9LCB7ICAgICA2MywxMH0sIFwKKyAgICB7ICAgIDEyNywgOX0sIHsgICAgMjU1LCA4fSwgeyAgICA1MTEsMTB9LCB7ICAgIDE0MywgOX0sIFwKKyAgICB7ICAgIDI4NywgOH0sIHsgICAgNTc1LDEwfSwgeyAgICAxNTksMTF9LCB7ICAgICA5NSwxMH0sIFwKKyAgICB7ICAgIDE5MSwxMn0sIHsgICA0MDk2LDEzfSwgeyAgIDgxOTIsMTR9LCB7ICAxNjM4NCwxNX0sIFwKKyAgICB7ICAzMjc2OCwxNn0gfQorI2RlZmluZSBTUVJfRkZUX1RBQkxFM19TSVpFIDYxCisjZGVmaW5lIFNRUl9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAzNzEyCisKKyNkZWZpbmUgTVVMTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDMKKyNkZWZpbmUgTVVMTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgMzcKKyNkZWZpbmUgTVVMTE9fTVVMX05fVEhSRVNIT0xEICAgICAgICAgICAgMTA5NTAKKworI2RlZmluZSBEQ19ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA1OQorI2RlZmluZSBEQ19ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgIDE4OQorI2RlZmluZSBEQ19CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA1NQorI2RlZmluZSBEQ19CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDEzNgorCisjZGVmaW5lIElOVl9NVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgIDUwCisjZGVmaW5lIElOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAgMTgzCisjZGVmaW5lIElOVl9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTgxCisKKyNkZWZpbmUgQklOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAyMDQKKyNkZWZpbmUgUkVEQ18xX1RPX1JFRENfTl9USFJFU0hPTEQgICAgICAgICAgNTQKKworI2RlZmluZSBNVV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTE0MgorI2RlZmluZSBNVV9ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgMTE0MgorI2RlZmluZSBNVVBJX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICA4MQorI2RlZmluZSBNVV9CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDg4OQorI2RlZmluZSBNVV9CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDk5OAorCisjZGVmaW5lIE1BVFJJWDIyX1NUUkFTU0VOX1RIUkVTSE9MRCAgICAgICAgIDEzCisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAgMTMzCisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgNDUxCisjZGVmaW5lIEdDREVYVF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMzE4CisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgR0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICAgMzAKKyNkZWZpbmUgU0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICA1NDcKKyNkZWZpbmUgU0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgIDEwNDkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2dtcC1tcGFyYW0uaCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2IxOTg0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvZ21wLW1wYXJhbS5oCkBAIC0wLDAgKzEsMzggQEAKKy8qIEdlbmVyaWMgeDg2IGdtcC1tcGFyYW0uaCAtLSBDb21waWxlci9tYWNoaW5lIHBhcmFtZXRlciBoZWFkZXIgZmlsZS4KKworQ29weXJpZ2h0IDE5OTEsIDE5OTMsIDE5OTQsIDIwMDAtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2RlZmluZSBHTVBfTElNQl9CSVRTIDMyCisjZGVmaW5lIEdNUF9MSU1CX0JZVEVTIDQKKworCisvKiBHZW5lcmljIHg4NiBtcG5fZGl2ZXhhY3RfMSBpcyBmYXN0ZXIgdGhhbiBnZW5lcmljIHg4NiBtcG5fZGl2cmVtXzEgb24gYWxsCisgICBvZiBwNSwgcDYsIGs2IGFuZCBrNywgc28gdXNlIGl0IGFsd2F5cy4gIEl0J3MgcHJvYmFibHkgc2xvd2VyIG9uIDM4NiBhbmQKKyAgIDQ4NiwgYnV0IHRoYXQncyB0b28gYmFkLiAgKi8KKyNkZWZpbmUgRElWRVhBQ1RfMV9USFJFU0hPTEQgIDAKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2dvbGRtb250L2dtcC1tcGFyYW0uaCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2dvbGRtb250L2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDM3ZmEzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvZ29sZG1vbnQvZ21wLW1wYXJhbS5oCkBAIC0wLDAgKzEsMjE5IEBACisvKiBJbnRlbCBHb2xkbW9udC8zMiBnbXAtbXBhcmFtLmggLS0gQ29tcGlsZXIvbWFjaGluZSBwYXJhbWV0ZXIgaGVhZGVyIGZpbGUuCisKK0NvcHlyaWdodCAyMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgMzIKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgNAorCisvKiAyMjAwIE1IeiBJbnRlbCBBdG9tIEMzNzU4IEdvbGRtb250L0RlbnZlcnRvbiAqLworLyogRkZUIHR1bmluZyBsaW1pdCA9IDY3LDAwMCwwMDAgKi8KKy8qIEdlbmVyYXRlZCBieSB0dW5ldXAuYywgMjAxOS0xMC0yMiwgZ2NjIDguMyAqLworCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIE1PRF8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgIDEyCisjZGVmaW5lIE1PRF8xTl9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA5CisjZGVmaW5lIE1PRF8xVV9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA3CisjZGVmaW5lIE1PRF8xXzFfVE9fTU9EXzFfMl9USFJFU0hPTEQgICAgICAgIDEwCisjZGVmaW5lIE1PRF8xXzJfVE9fTU9EXzFfNF9USFJFU0hPTEQgICAgICAgICAwICAvKiBuZXZlciBtcG5fbW9kXzFzXzJwICovCisjZGVmaW5lIFBSRUlOVl9NT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgIDEyCisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAgICAxICAvKiBuYXRpdmUgKi8KKyNkZWZpbmUgRElWX1FSXzFOX1BJMV9NRVRIT0QgICAgICAgICAgICAgICAgIDEgIC8qIDMyLjc5JSBmYXN0ZXIgdGhhbiAyICovCisjZGVmaW5lIERJVl9RUl8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgIDMyCisjZGVmaW5lIERJVl9RUl8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVl9RUl8yX1BJMl9USFJFU0hPTEQgICAgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgICAgICAgMjMKKworI2RlZmluZSBESVZfMV9WU19NVUxfMV9QRVJDRU5UICAgICAgICAgICAgIDIyOAorCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDgxCisjZGVmaW5lIE1VTF9UT09NNDRfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTkzCisjZGVmaW5lIE1VTF9UT09NNkhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjg2CisjZGVmaW5lIE1VTF9UT09NOEhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMzk5CisKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNDNfVEhSRVNIT0xEICAgICAgODEKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxMzgKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxMjUKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNjNfVEhSRVNIT0xEICAgICAxMzcKKyNkZWZpbmUgTVVMX1RPT000M19UT19UT09NNTRfVEhSRVNIT0xEICAgICAxODUKKworI2RlZmluZSBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTEzCisjZGVmaW5lIFNRUl9UT09NNF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjgwCisjZGVmaW5lIFNRUl9UT09NNl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMzk5CisjZGVmaW5lIFNRUl9UT09NOF9USFJFU0hPTEQgICAgICAgICAgICAgICAgNTQ3CisKKyNkZWZpbmUgTVVMTUlEX1RPT000Ml9USFJFU0hPTEQgICAgICAgICAgICAgNjAKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxMworI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxNQorCisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgMzY4ICAvKiBrID0gNSAqLworI2RlZmluZSBNVUxfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgMzY4LCA1fSwgeyAgICAgMjEsIDZ9LCB7ICAgICAxMSwgNX0sIHsgICAgIDIzLCA2fSwgXAorICAgIHsgICAgIDIxLCA3fSwgeyAgICAgMTEsIDZ9LCB7ICAgICAyNSwgN30sIHsgICAgIDEzLCA2fSwgXAorICAgIHsgICAgIDI3LCA3fSwgeyAgICAgMTUsIDZ9LCB7ICAgICAzMSwgN30sIHsgICAgIDIxLCA4fSwgXAorICAgIHsgICAgIDExLCA3fSwgeyAgICAgMjcsIDh9LCB7ICAgICAxNSwgN30sIHsgICAgIDMzLCA4fSwgXAorICAgIHsgICAgIDE5LCA3fSwgeyAgICAgMzksIDh9LCB7ICAgICAyMywgN30sIHsgICAgIDQ3LCA4fSwgXAorICAgIHsgICAgIDI3LCA5fSwgeyAgICAgMTUsIDh9LCB7ICAgICAzOSwgOX0sIHsgICAgIDIzLCA4fSwgXAorICAgIHsgICAgIDQ3LDEwfSwgeyAgICAgMTUsIDl9LCB7ICAgICAzMSwgOH0sIHsgICAgIDYzLCA5fSwgXAorICAgIHsgICAgIDM5LCA4fSwgeyAgICAgNzksIDl9LCB7ICAgICA0NywxMH0sIHsgICAgIDMxLCA5fSwgXAorICAgIHsgICAgIDc5LDEwfSwgeyAgICAgNDcsIDl9LCB7ICAgICA5NSwxMX0sIHsgICAgIDMxLDEwfSwgXAorICAgIHsgICAgIDYzLCA5fSwgeyAgICAxMjcsIDh9LCB7ICAgIDI1NSwgOX0sIHsgICAgMTM1LDEwfSwgXAorICAgIHsgICAgIDc5LCA5fSwgeyAgICAxNTksMTB9LCB7ICAgICA5NSwgOX0sIHsgICAgMTkxLDExfSwgXAorICAgIHsgICAgIDYzLDEwfSwgeyAgICAxMjcsIDl9LCB7ICAgIDI1NSwgOH0sIHsgICAgNTExLDEwfSwgXAorICAgIHsgICAgMTQzLCA5fSwgeyAgICAyODcsIDh9LCB7ICAgIDU3NSwgOX0sIHsgICAgMzAzLDEwfSwgXAorICAgIHsgICAgMTU5LDExfSwgeyAgICAgOTUsMTB9LCB7ICAgIDE5MSwxMn0sIHsgICAgIDYzLDExfSwgXAorICAgIHsgICAgMTI3LDEwfSwgeyAgICAyNTUsIDl9LCB7ICAgIDUxMSwxMH0sIHsgICAgMjcxLCA5fSwgXAorICAgIHsgICAgNTQzLDEwfSwgeyAgICAyODcsIDl9LCB7ICAgIDU3NSwxMH0sIHsgICAgMzAzLCA5fSwgXAorICAgIHsgICAgNjA3LDExfSwgeyAgICAxNTksMTB9LCB7ICAgIDMxOSwgOX0sIHsgICAgNjM5LDEwfSwgXAorICAgIHsgICAgMzUxLCA5fSwgeyAgICA3MDMsMTF9LCB7ICAgIDE5MSwxMH0sIHsgICAgMzgzLCA5fSwgXAorICAgIHsgICAgNzY3LDEwfSwgeyAgICA0MTUsIDl9LCB7ICAgIDgzMSwxMX0sIHsgICAgMjIzLDEwfSwgXAorICAgIHsgICAgNDQ3LDEyfSwgeyAgICAxMjcsMTF9LCB7ICAgIDI1NSwxMH0sIHsgICAgNTQzLCA5fSwgXAorICAgIHsgICAxMDg3LDExfSwgeyAgICAyODcsMTB9LCB7ICAgIDYwNywgOX0sIHsgICAxMjE1LDExfSwgXAorICAgIHsgICAgMzE5LDEwfSwgeyAgICA2NzEsMTF9LCB7ICAgIDM1MSwxMH0sIHsgICAgNzAzLDEyfSwgXAorICAgIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTB9LCB7ICAgIDc2NywxMX0sIHsgICAgNDE1LDEwfSwgXAorICAgIHsgICAgODMxLDExfSwgeyAgICA0NDcsMTN9LCB7ICAgIDEyNywxMn0sIHsgICAgMjU1LDExfSwgXAorICAgIHsgICAgNTQzLDEwfSwgeyAgIDEwODcsMTF9LCB7ICAgIDYwNywxMH0sIHsgICAxMjE1LDEyfSwgXAorICAgIHsgICAgMzE5LDExfSwgeyAgICA2NzEsMTB9LCB7ICAgMTM0MywxMX0sIHsgICAgNzAzLDEwfSwgXAorICAgIHsgICAxNDA3LDExfSwgeyAgICA3MzUsMTJ9LCB7ICAgIDM4MywxMX0sIHsgICAgODMxLDEyfSwgXAorICAgIHsgICAgNDQ3LDExfSwgeyAgICA5NTksMTN9LCB7ICAgIDI1NSwxMn0sIHsgICAgNTExLDExfSwgXAorICAgIHsgICAxMDg3LDEyfSwgeyAgICA1NzUsMTF9LCB7ICAgMTIxNSwxMH0sIHsgICAyNDMxLDEyfSwgXAorICAgIHsgICAgNjM5LDExfSwgeyAgIDEzNDMsMTJ9LCB7ICAgIDcwMywxMX0sIHsgICAxNDA3LDEzfSwgXAorICAgIHsgICAgMzgzLDEyfSwgeyAgICA4MzEsMTF9LCB7ICAgMTY2MywxMn0sIHsgICAgOTU5LDExfSwgXAorICAgIHsgICAxOTE5LDE0fSwgeyAgICAyNTUsMTN9LCB7ICAgIDUxMSwxMn0sIHsgICAxMjE1LDExfSwgXAorICAgIHsgICAyNDMxLDEzfSwgeyAgICA2MzksMTJ9LCB7ICAgMTQ3MSwxMX0sIHsgICAyOTQzLDEzfSwgXAorICAgIHsgICAgNzY3LDEyfSwgeyAgIDE3MjcsMTN9LCB7ICAgIDg5NSwxMn0sIHsgICAxOTE5LDExfSwgXAorICAgIHsgICAzODM5LDE0fSwgeyAgICA1MTEsMTN9LCB7ICAgMTAyMywxMn0sIHsgICAyMTExLDEzfSwgXAorICAgIHsgICAxMTUxLDEyfSwgeyAgIDI0MzEsMTN9LCB7ICAgMTQwNywxMn0sIHsgICAyOTQzLDE0fSwgXAorICAgIHsgICAgNzY3LDEzfSwgeyAgIDE2NjMsMTJ9LCB7ICAgMzQ1NSwxM30sIHsgICAxOTE5LDEyfSwgXAorICAgIHsgICAzODM5LDE1fSwgeyAgICA1MTEsMTR9LCB7ICAgMTAyMywxM30sIHsgICAyNDMxLDE0fSwgXAorICAgIHsgICAxMjc5LDEzfSwgeyAgIDI5NDMsMTJ9LCB7ICAgNTg4NywxNH0sIHsgICAxNTM1LDEzfSwgXAorICAgIHsgICAzNDU1LDE0fSwgeyAgIDE3OTEsMTN9LCB7ICAgMzgzOSwxMn0sIHsgICA3Njc5LDE1fSwgXAorICAgIHsgICAxMDIzLDE0fSwgeyAgIDIzMDMsMTN9LCB7ICAgNDk5MSwxMn0sIHsgICA5OTgzLDE0fSwgXAorICAgIHsgICAyNTU5LDEzfSwgeyAgIDUxMTksMTR9LCB7ICAgMjgxNSwxM30sIHsgICA1ODg3LDE1fSwgXAorICAgIHsgICAxNTM1LDE0fSwgeyAgIDM4MzksMTN9LCB7ICAgNzY3OSwxNn0gfQorI2RlZmluZSBNVUxfRkZUX1RBQkxFM19TSVpFIDE3MQorI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMzcxMgorCisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgMzQwICAvKiBrID0gNSAqLworI2RlZmluZSBTUVJfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgMzQwLCA1fSwgeyAgICAgMjEsIDZ9LCB7ICAgICAxMSwgNX0sIHsgICAgIDIzLCA2fSwgXAorICAgIHsgICAgIDEyLCA1fSwgeyAgICAgMjUsIDZ9LCB7ICAgICAyMSwgN30sIHsgICAgIDExLCA2fSwgXAorICAgIHsgICAgIDI1LCA3fSwgeyAgICAgMTMsIDZ9LCB7ICAgICAyNywgN30sIHsgICAgIDE1LCA2fSwgXAorICAgIHsgICAgIDMxLCA3fSwgeyAgICAgMjEsIDh9LCB7ICAgICAxMSwgN30sIHsgICAgIDI3LCA4fSwgXAorICAgIHsgICAgIDE1LCA3fSwgeyAgICAgMzMsIDh9LCB7ICAgICAxOSwgN30sIHsgICAgIDM5LCA4fSwgXAorICAgIHsgICAgIDIzLCA3fSwgeyAgICAgNDcsIDh9LCB7ICAgICAyNywgOX0sIHsgICAgIDE1LCA4fSwgXAorICAgIHsgICAgIDM5LCA5fSwgeyAgICAgMjMsIDh9LCB7ICAgICA0NywxMH0sIHsgICAgIDE1LCA5fSwgXAorICAgIHsgICAgIDMxLCA4fSwgeyAgICAgNjcsIDl9LCB7ICAgICAzOSwgOH0sIHsgICAgIDc5LCA5fSwgXAorICAgIHsgICAgIDQ3LDEwfSwgeyAgICAgMzEsIDl9LCB7ICAgICA3OSwxMH0sIHsgICAgIDQ3LDExfSwgXAorICAgIHsgICAgIDMxLDEwfSwgeyAgICAgNjMsIDl9LCB7ICAgIDEyNywgOH0sIHsgICAgMjU1LDEwfSwgXAorICAgIHsgICAgIDc5LCA5fSwgeyAgICAxNTksIDh9LCB7ICAgIDMxOSwxMH0sIHsgICAgIDk1LCA5fSwgXAorICAgIHsgICAgMTkxLDExfSwgeyAgICAgNjMsMTB9LCB7ICAgIDEyNywgOX0sIHsgICAgMjU1LCA4fSwgXAorICAgIHsgICAgNTExLCA5fSwgeyAgICAyNzEsMTB9LCB7ICAgIDE0MywgOX0sIHsgICAgMjg3LCA4fSwgXAorICAgIHsgICAgNTc1LCA5fSwgeyAgICAzMDMsIDh9LCB7ICAgIDYwNywgOX0sIHsgICAgMzE5LDExfSwgXAorICAgIHsgICAgIDk1LDEwfSwgeyAgICAxOTEsMTJ9LCB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgXAorICAgIHsgICAgMjU1LCA5fSwgeyAgICA1MTEsMTB9LCB7ICAgIDI3MSwgOX0sIHsgICAgNTQzLDEwfSwgXAorICAgIHsgICAgMjg3LCA5fSwgeyAgICA1NzUsMTB9LCB7ICAgIDMwMywgOX0sIHsgICAgNjA3LDExfSwgXAorICAgIHsgICAgMTU5LDEwfSwgeyAgICAzMTksIDl9LCB7ICAgIDYzOSwxMH0sIHsgICAgMzM1LCA5fSwgXAorICAgIHsgICAgNjcxLDEwfSwgeyAgICAzNTEsIDl9LCB7ICAgIDcwMywxMX0sIHsgICAgMTkxLDEwfSwgXAorICAgIHsgICAgMzgzLCA5fSwgeyAgICA3NjcsMTB9LCB7ICAgIDQxNSwgOX0sIHsgICAgODMxLDExfSwgXAorICAgIHsgICAgMjIzLDEwfSwgeyAgICA0NzksMTJ9LCB7ICAgIDEyNywxMX0sIHsgICAgMjU1LDEwfSwgXAorICAgIHsgICAgNTQzLCA5fSwgeyAgIDEwODcsMTF9LCB7ICAgIDI4NywxMH0sIHsgICAgNjA3LCA5fSwgXAorICAgIHsgICAxMjE1LDExfSwgeyAgICAzMTksMTB9LCB7ICAgIDY3MSwxMX0sIHsgICAgMzUxLDEwfSwgXAorICAgIHsgICAgNzAzLDEyfSwgeyAgICAxOTEsMTF9LCB7ICAgIDM4MywxMH0sIHsgICAgNzY3LDExfSwgXAorICAgIHsgICAgNDE1LDEwfSwgeyAgICA4MzEsMTF9LCB7ICAgIDQ3OSwxM30sIHsgICAgMTI3LDEyfSwgXAorICAgIHsgICAgMjU1LDExfSwgeyAgICA1NDMsMTB9LCB7ICAgMTA4NywxMX0sIHsgICAgNjA3LDEwfSwgXAorICAgIHsgICAxMjE1LDEyfSwgeyAgICAzMTksMTF9LCB7ICAgIDY3MSwxMH0sIHsgICAxMzQzLDExfSwgXAorICAgIHsgICAgNzM1LDEyfSwgeyAgICAzODMsMTF9LCB7ICAgIDgzMSwxMn0sIHsgICAgNDQ3LDExfSwgXAorICAgIHsgICAgOTU5LDEzfSwgeyAgICAyNTUsMTJ9LCB7ICAgIDUxMSwxMX0sIHsgICAxMDg3LDEyfSwgXAorICAgIHsgICAgNTc1LDExfSwgeyAgIDEyMTUsMTJ9LCB7ICAgIDYzOSwxMX0sIHsgICAxMzQzLDEyfSwgXAorICAgIHsgICAgNzAzLDExfSwgeyAgIDE0NzEsMTN9LCB7ICAgIDM4MywxMn0sIHsgICAgODMxLDExfSwgXAorICAgIHsgICAxNjYzLDEyfSwgeyAgICA5NTksMTF9LCB7ICAgMTkxOSwxNH0sIHsgICAgMjU1LDEzfSwgXAorICAgIHsgICAgNTExLDEyfSwgeyAgIDEyMTUsMTN9LCB7ICAgIDYzOSwxMn0sIHsgICAxNDcxLDExfSwgXAorICAgIHsgICAyOTQzLDEzfSwgeyAgICA3NjcsMTJ9LCB7ICAgMTcyNywxM30sIHsgICAgODk1LDEyfSwgXAorICAgIHsgICAxOTE5LDE0fSwgeyAgICA1MTEsMTN9LCB7ICAgMTAyMywxMn0sIHsgICAyMTExLDEzfSwgXAorICAgIHsgICAxMTUxLDEyfSwgeyAgIDI0MzEsMTN9LCB7ICAgMTQwNywxMn0sIHsgICAyOTQzLDE0fSwgXAorICAgIHsgICAgNzY3LDEzfSwgeyAgIDE2NjMsMTJ9LCB7ICAgMzQ1NSwxM30sIHsgICAxOTE5LDE1fSwgXAorICAgIHsgICAgNTExLDE0fSwgeyAgIDEwMjMsMTN9LCB7ICAgMjQzMSwxNH0sIHsgICAxMjc5LDEzfSwgXAorICAgIHsgICAyOTQzLDEyfSwgeyAgIDU4ODcsMTR9LCB7ICAgMTUzNSwxM30sIHsgICAzNDU1LDE0fSwgXAorICAgIHsgICAxNzkxLDEzfSwgeyAgIDM4MzksMTJ9LCB7ICAgNzY3OSwxNX0sIHsgICAxMDIzLDE0fSwgXAorICAgIHsgICAyMDQ3LDEzfSwgeyAgIDQwOTUsMTR9LCB7ICAgMjMwMywxM30sIHsgICA0OTkxLDEyfSwgXAorICAgIHsgICA5OTgzLDE0fSwgeyAgIDI4MTUsMTN9LCB7ICAgNTg4NywxNX0sIHsgICAxNTM1LDE0fSwgXAorICAgIHsgICAzODM5LDEzfSwgeyAgIDc2NzksMTZ9IH0KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTNfU0laRSAxNzAKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDM1MjAKKworI2RlZmluZSBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgNQorI2RlZmluZSBNVUxMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICA1MAorI2RlZmluZSBNVUxMT19NVUxfTl9USFJFU0hPTEQgICAgICAgICAgICAgNjYzMworI2RlZmluZSBTUVJMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIFNRUkxPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDk1CisjZGVmaW5lIFNRUkxPX1NRUl9USFJFU0hPTEQgICAgICAgICAgICAgICA2NjMzCisKKyNkZWZpbmUgRENfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNjgKKyNkZWZpbmUgRENfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAyMDQKKyNkZWZpbmUgRENfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNjQKKyNkZWZpbmUgRENfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMDgKKworI2RlZmluZSBJTlZfTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAzNAorI2RlZmluZSBJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDI3NgorI2RlZmluZSBJTlZfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDIyNgorCisjZGVmaW5lIEJJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgMjk4CisjZGVmaW5lIFJFRENfMV9UT19SRURDX05fVEhSRVNIT0xEICAgICAgICAgIDY1CisKKyNkZWZpbmUgTVVfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE1MjgKKyNkZWZpbmUgTVVfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgIDE1ODkKKyNkZWZpbmUgTVVQSV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAxNDAKKyNkZWZpbmUgTVVfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgIDEzMzQKKyNkZWZpbmUgTVVfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE0OTkKKworI2RlZmluZSBQT1dNX1NFQ19UQUJMRSAgMywxNiw5Niw0MjgsMTMxNworCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgIDE4CisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgNzA0CisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAxMzU4CisKKyNkZWZpbmUgRkFDX0RTQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgOTUKKyNkZWZpbmUgRkFDX09ERF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgMjkKKworI2RlZmluZSBNQVRSSVgyMl9TVFJBU1NFTl9USFJFU0hPTEQgICAgICAgICAxNQorI2RlZmluZSBIR0NEMl9ESVYxX01FVEhPRCAgICAgICAgICAgICAgICAgICAgMSAgLyogNS41MyUgZmFzdGVyIHRoYW4gMyAqLworI2RlZmluZSBIR0NEX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgIDE3MgorI2RlZmluZSBIR0NEX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDIwNAorI2RlZmluZSBIR0NEX1JFRFVDRV9USFJFU0hPTEQgICAgICAgICAgICAgMjQ3OQorI2RlZmluZSBHQ0RfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDYxMAorI2RlZmluZSBHQ0RFWFRfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDQ0MworI2RlZmluZSBKQUNPQklfQkFTRV9NRVRIT0QgICAgICAgICAgICAgICAgICAgNCAgLyogNi41MyUgZmFzdGVyIHRoYW4gMyAqLworCisvKiBUdW5ldXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgdG9vayAxMDE1NjMgc2Vjb25kcyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvaTQ4Ni9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9pNDg2L2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTdkYmFkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvaTQ4Ni9nbXAtbXBhcmFtLmgKQEAgLTAsMCArMSw2OSBAQAorLyogODA0ODYgZ21wLW1wYXJhbS5oIC0tIENvbXBpbGVyL21hY2hpbmUgcGFyYW1ldGVyIGhlYWRlciBmaWxlLgorCitDb3B5cmlnaHQgMjAwMS0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgMzIKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgNAorCisKKy8qIDEwME1IeiBEWDQgKi8KKworLyogR2VuZXJhdGVkIGJ5IHR1bmV1cC5jLCAyMDAzLTAyLTEzLCBnY2MgMi45NSAqLworCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgIDE4CisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgMjI4CisKKyNkZWZpbmUgU1FSX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgMTMKKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgNDkKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAyMzgKKworI2RlZmluZSBESVZfU0JfUFJFSU5WX1RIUkVTSE9MRCAgICAgICBNUF9TSVpFX1RfTUFYICAvKiBuZXZlciAqLworI2RlZmluZSBESVZfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA3MgorI2RlZmluZSBQT1dNX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAzOAorCisjZGVmaW5lIEdDRF9BQ0NFTF9USFJFU0hPTEQgICAgICAgICAgICAgICAzCisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAyCisKKyNkZWZpbmUgVVNFX1BSRUlOVl9ESVZSRU1fMSAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVVNFX1BSRUlOVl9NT0RfMSAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRElWUkVNXzJfVEhSRVNIT0xEICAgICAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWRVhBQ1RfMV9USFJFU0hPTEQgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAobmF0aXZlKSAqLworI2RlZmluZSBNT0RFWEFDVF8xX09ERF9USFJFU0hPTEQgICAgICAgICAxNworCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgIDMyCisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgIDgyCisjZGVmaW5lIFNFVF9TVFJfVEhSRVNIT0xEICAgICAgICAgICAgICAzNTI0CisKKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRSAgeyA0NjQsIDkyOCwgMTkyMCwgNDYwOCwgMTAyNDAsIDQwOTYwLCAwIH0KKyNkZWZpbmUgTVVMX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAzOTIKKyNkZWZpbmUgTVVMX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgIDI4MTYKKworI2RlZmluZSBTUVJfRkZUX1RBQkxFICB7IDQzMiwgOTI4LCAxOTIwLCA0NjA4LCAxNDMzNiwgNDA5NjAsIDAgfQorI2RlZmluZSBTUVJfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgIDM5MgorI2RlZmluZSBTUVJfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgMjgxNgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazEwL2dtcC1tcGFyYW0uaCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2sxMC9nbXAtbXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNlYWFhZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2sxMC9nbXAtbXBhcmFtLmgKQEAgLTAsMCArMSwyMTcgQEAKKy8qIHg4Ni9rMTAgZ21wLW1wYXJhbS5oIC0tIENvbXBpbGVyL21hY2hpbmUgcGFyYW1ldGVyIGhlYWRlciBmaWxlLgorCitDb3B5cmlnaHQgMTk5MSwgMTk5MywgMTk5NCwgMjAwMC0yMDExLCAyMDE0LTIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNkZWZpbmUgR01QX0xJTUJfQklUUyAzMgorI2RlZmluZSBHTVBfTElNQl9CWVRFUyA0CisKKy8qIDMyMDAtMzYwMCBNSHogSzEwIFRodWJhbiAqLworLyogRkZUIHR1bmluZyBsaW1pdCA9IDY3LDAwMCwwMDAgKi8KKy8qIEdlbmVyYXRlZCBieSB0dW5ldXAuYywgMjAxOS0xMC0xOSwgZ2NjIDguMyAqLworCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAxNAorI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNworI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAgMCAgLyogbmV2ZXIgbXBuX21vZF8xXzFwICovCisjZGVmaW5lIE1PRF8xXzJfVE9fTU9EXzFfNF9USFJFU0hPTEQgICAgICAgIDE4CisjZGVmaW5lIFBSRUlOVl9NT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgIDIyCisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAgICAxICAvKiBuYXRpdmUgKi8KKyNkZWZpbmUgRElWX1FSXzFOX1BJMV9NRVRIT0QgICAgICAgICAgICAgICAgIDEgIC8qIDI5LjMzJSBmYXN0ZXIgdGhhbiAyICovCisjZGVmaW5lIERJVl9RUl8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAyCisjZGVmaW5lIERJVl9RUl8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVl9RUl8yX1BJMl9USFJFU0hPTEQgICAgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgICAgICAgMzUKKworI2RlZmluZSBESVZfMV9WU19NVUxfMV9QRVJDRU5UICAgICAgICAgICAgIDI1OAorCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDczCisjZGVmaW5lIE1VTF9UT09NNDRfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTI0CisjZGVmaW5lIE1VTF9UT09NNkhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjc0CisjZGVmaW5lIE1VTF9UT09NOEhfVEhSRVNIT0xEICAgICAgICAgICAgICAgNDMwCisKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNDNfVEhSRVNIT0xEICAgICAgODEKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNTNfVEhSRVNIT0xEICAgICAgOTkKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNTNfVEhSRVNIT0xEICAgICAgODUKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNjNfVEhSRVNIT0xEICAgICAgODgKKyNkZWZpbmUgTVVMX1RPT000M19UT19UT09NNTRfVEhSRVNIT0xEICAgICAxMTMKKworI2RlZmluZSBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDI2CisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTA1CisjZGVmaW5lIFNRUl9UT09NNF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTU0CisjZGVmaW5lIFNRUl9UT09NNl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjM4CisjZGVmaW5lIFNRUl9UT09NOF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMzA5CisKKyNkZWZpbmUgTVVMTUlEX1RPT000Ml9USFJFU0hPTEQgICAgICAgICAgICAgNTAKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxNQorI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxOAorCisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgNTcwICAvKiBrID0gNSAqLworI2RlZmluZSBNVUxfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgNTcwLCA1fSwgeyAgICAgMjEsIDZ9LCB7ICAgICAxMSwgNX0sIHsgICAgIDI1LCA2fSwgXAorICAgIHsgICAgIDEzLCA1fSwgeyAgICAgMjcsIDZ9LCB7ICAgICAxNSwgNX0sIHsgICAgIDMxLCA2fSwgXAorICAgIHsgICAgIDI1LCA3fSwgeyAgICAgMTMsIDZ9LCB7ICAgICAyNywgN30sIHsgICAgIDE1LCA2fSwgXAorICAgIHsgICAgIDMyLCA3fSwgeyAgICAgMTcsIDZ9LCB7ICAgICAzNSwgN30sIHsgICAgIDE5LCA2fSwgXAorICAgIHsgICAgIDM5LCA3fSwgeyAgICAgMjcsIDh9LCB7ICAgICAxNSwgN30sIHsgICAgIDM1LCA4fSwgXAorICAgIHsgICAgIDE5LCA3fSwgeyAgICAgNDEsIDh9LCB7ICAgICAyMywgN30sIHsgICAgIDQ3LCA4fSwgXAorICAgIHsgICAgIDI3LCA5fSwgeyAgICAgMTUsIDh9LCB7ICAgICAzMSwgN30sIHsgICAgIDYzLCA4fSwgXAorICAgIHsgICAgIDM5LCA5fSwgeyAgICAgMjMsIDh9LCB7ICAgICA1NSwgOX0sIHsgICAgIDMxLCA4fSwgXAorICAgIHsgICAgIDY3LCA5fSwgeyAgICAgMzksIDh9LCB7ICAgICA3OSwgOX0sIHsgICAgIDQ3LCA4fSwgXAorICAgIHsgICAgIDk1LCA5fSwgeyAgICAgNTUsMTB9LCB7ICAgICAzMSwgOX0sIHsgICAgIDc5LDEwfSwgXAorICAgIHsgICAgIDQ3LCA5fSwgeyAgICAgOTUsMTF9LCB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA5fSwgXAorICAgIHsgICAgMTM1LDEwfSwgeyAgICAgNzksIDl9LCB7ICAgIDE1OSwxMH0sIHsgICAgIDk1LCA5fSwgXAorICAgIHsgICAgMTkxLDExfSwgeyAgICAgNjMsMTB9LCB7ICAgIDE0MywgOX0sIHsgICAgMjg3LDEwfSwgXAorICAgIHsgICAgMTU5LDExfSwgeyAgICAgOTUsMTB9LCB7ICAgIDE5MSwxMn0sIHsgICAgIDYzLDExfSwgXAorICAgIHsgICAgMTI3LDEwfSwgeyAgICAyNTUsIDl9LCB7ICAgIDUxMSwxMH0sIHsgICAgMjcxLCA5fSwgXAorICAgIHsgICAgNTQzLDEwfSwgeyAgICAyODcsMTF9LCB7ICAgIDE1OSwxMH0sIHsgICAgMzE5LCA5fSwgXAorICAgIHsgICAgNjM5LDEwfSwgeyAgICAzMzUsIDl9LCB7ICAgIDY3MSwxMX0sIHsgICAgMTkxLDEwfSwgXAorICAgIHsgICAgMzgzLCA5fSwgeyAgICA3NjcsMTB9LCB7ICAgIDM5OSwgOX0sIHsgICAgNzk5LDExfSwgXAorICAgIHsgICAgMjIzLDEyfSwgeyAgICAxMjcsMTF9LCB7ICAgIDI1NSwxMH0sIHsgICAgNTQzLDExfSwgXAorICAgIHsgICAgMjg3LDEwfSwgeyAgICA2MDcsIDl9LCB7ICAgMTIxNSwxMX0sIHsgICAgMzE5LDEwfSwgXAorICAgIHsgICAgNjcxLDEyfSwgeyAgICAxOTEsMTF9LCB7ICAgIDM4MywxMH0sIHsgICAgNzk5LDExfSwgXAorICAgIHsgICAgNDE1LDEzfSwgeyAgICAxMjcsMTJ9LCB7ICAgIDI1NSwxMX0sIHsgICAgNTQzLDEwfSwgXAorICAgIHsgICAxMDg3LDExfSwgeyAgICA2MDcsMTB9LCB7ICAgMTIxNSwxMn0sIHsgICAgMzE5LDExfSwgXAorICAgIHsgICAgNjcxLDEwfSwgeyAgIDEzNDMsMTF9LCB7ICAgIDczNSwxMH0sIHsgICAxNDcxLCA5fSwgXAorICAgIHsgICAyOTQzLDEyfSwgeyAgICAzODMsMTF9LCB7ICAgIDc5OSwxMH0sIHsgICAxNTk5LDExfSwgXAorICAgIHsgICAgODYzLDEyfSwgeyAgICA0NDcsMTF9LCB7ICAgIDk1OSwxM30sIHsgICAgMjU1LDEyfSwgXAorICAgIHsgICAgNTExLDExfSwgeyAgIDEwODcsMTJ9LCB7ICAgIDU3NSwxMX0sIHsgICAxMjE1LDEwfSwgXAorICAgIHsgICAyNDMxLDEyfSwgeyAgICA2MzksMTF9LCB7ICAgMTM0MywxMn0sIHsgICAgNzAzLDExfSwgXAorICAgIHsgICAxNDcxLDEwfSwgeyAgIDI5NDMsMTN9LCB7ICAgIDM4MywxMn0sIHsgICAgNzY3LDExfSwgXAorICAgIHsgICAxNTk5LDEyfSwgeyAgICA4MzEsMTF9LCB7ICAgMTcyNywxMH0sIHsgICAzNDU1LDEyfSwgXAorICAgIHsgICAgOTU5LDExfSwgeyAgIDE5MTksMTR9LCB7ICAgIDI1NSwxM30sIHsgICAgNTExLDEyfSwgXAorICAgIHsgICAxMDg3LDExfSwgeyAgIDIyMzksMTJ9LCB7ICAgMTIxNSwxMX0sIHsgICAyNDMxLDEzfSwgXAorICAgIHsgICAgNjM5LDEyfSwgeyAgIDE0NzEsMTF9LCB7ICAgMjk0MywxM30sIHsgICAgNzY3LDEyfSwgXAorICAgIHsgICAxNzI3LDExfSwgeyAgIDM0NTUsMTN9LCB7ICAgIDg5NSwxMn0sIHsgICAxOTgzLDE0fSwgXAorICAgIHsgICAgNTExLDEzfSwgeyAgIDEwMjMsMTJ9LCB7ICAgMjIzOSwxM30sIHsgICAxMTUxLDEyfSwgXAorICAgIHsgICAyNDMxLDEzfSwgeyAgIDE0MDcsMTJ9LCB7ICAgMjk0MywxNH0sIHsgICAgNzY3LDEzfSwgXAorICAgIHsgICAxNjYzLDEyfSwgeyAgIDM0NTUsMTN9LCB7ICAgMTkxOSwxNX0sIHsgICAgNTExLDE0fSwgXAorICAgIHsgICAxMDIzLDEzfSwgeyAgIDIxNzUsMTJ9LCB7ICAgNDQ3OSwxM30sIHsgICAyNDMxLDE0fSwgXAorICAgIHsgICAxMjc5LDEzfSwgeyAgIDI5NDMsMTJ9LCB7ICAgNTg4NywxNH0sIHsgICAxNTM1LDEzfSwgXAorICAgIHsgICAzNDU1LDE0fSwgeyAgIDE3OTEsMTN9LCB7ICAgMzk2NywxNX0sIHsgICAxMDIzLDE0fSwgXAorICAgIHsgICAyMDQ3LDEzfSwgeyAgIDQ0NzksMTR9LCB7ICAgMjMwMywxM30sIHsgICA0OTkxLDE0fSwgXAorICAgIHsgICAyODE1LDEzfSwgeyAgIDU4ODcsMTV9LCB7ICAgMTUzNSwxNH0sIHsgICAzODM5LDE2fSB9CisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzX1NJWkUgMTY4CisjZGVmaW5lIE1VTF9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA3NDI0CisKKyNkZWZpbmUgU1FSX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICA1MjUgIC8qIGsgPSA1ICovCisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICA1MjUsIDV9LCB7ICAgICAyNSwgNn0sIHsgICAgIDEzLCA1fSwgeyAgICAgMjgsIDZ9LCBcCisgICAgeyAgICAgMjUsIDd9LCB7ICAgICAxMywgNn0sIHsgICAgIDI3LCA3fSwgeyAgICAgMTUsIDZ9LCBcCisgICAgeyAgICAgMzEsIDd9LCB7ICAgICAxNywgNn0sIHsgICAgIDM1LCA3fSwgeyAgICAgMTksIDZ9LCBcCisgICAgeyAgICAgMzksIDd9LCB7ICAgICAyNywgOH0sIHsgICAgIDE1LCA3fSwgeyAgICAgMzUsIDh9LCBcCisgICAgeyAgICAgMTksIDd9LCB7ICAgICA0MSwgOH0sIHsgICAgIDIzLCA3fSwgeyAgICAgNDcsIDh9LCBcCisgICAgeyAgICAgMjcsIDl9LCB7ICAgICAxNSwgOH0sIHsgICAgIDMxLCA3fSwgeyAgICAgNjMsIDh9LCBcCisgICAgeyAgICAgMzksIDl9LCB7ICAgICAyMywgOH0sIHsgICAgIDUxLCA5fSwgeyAgICAgMzEsIDh9LCBcCisgICAgeyAgICAgNjcsIDl9LCB7ICAgICAzOSwgOH0sIHsgICAgIDc5LCA5fSwgeyAgICAgNTUsMTB9LCBcCisgICAgeyAgICAgMzEsIDl9LCB7ICAgICA3OSwxMH0sIHsgICAgIDQ3LCA5fSwgeyAgICAgOTUsMTF9LCBcCisgICAgeyAgICAgMzEsMTB9LCB7ICAgICA2MywgOX0sIHsgICAgMTI3LDEwfSwgeyAgICAgNzksIDl9LCBcCisgICAgeyAgICAxNTksMTB9LCB7ICAgICA5NSwxMX0sIHsgICAgIDYzLDEwfSwgeyAgICAxNDMsIDl9LCBcCisgICAgeyAgICAyODcsMTB9LCB7ICAgIDE1OSwxMX0sIHsgICAgIDk1LDEwfSwgeyAgICAxOTEsMTJ9LCBcCisgICAgeyAgICAgNjMsMTF9LCB7ICAgIDEyNywxMH0sIHsgICAgMjU1LCA5fSwgeyAgICA1MTEsMTB9LCBcCisgICAgeyAgICAyNzEsIDl9LCB7ICAgIDU0MywxMH0sIHsgICAgMjg3LDExfSwgeyAgICAxNTksMTB9LCBcCisgICAgeyAgICAzMTksIDl9LCB7ICAgIDYzOSwxMH0sIHsgICAgMzM1LCA5fSwgeyAgICA2NzEsMTB9LCBcCisgICAgeyAgICAzNTEsMTF9LCB7ICAgIDE5MSwxMH0sIHsgICAgMzgzLCA5fSwgeyAgICA3NjcsMTB9LCBcCisgICAgeyAgICAzOTksIDl9LCB7ICAgIDc5OSwxMH0sIHsgICAgNDE1LDEyfSwgeyAgICAxMjcsMTF9LCBcCisgICAgeyAgICAyNTUsMTB9LCB7ICAgIDU0MywxMX0sIHsgICAgMjg3LDEwfSwgeyAgICA2MDcsMTF9LCBcCisgICAgeyAgICAzMTksMTB9LCB7ICAgIDY3MSwgOX0sIHsgICAxMzQzLDExfSwgeyAgICAzNTEsMTB9LCBcCisgICAgeyAgICA3MDMsMTJ9LCB7ICAgIDE5MSwxMX0sIHsgICAgMzgzLDEwfSwgeyAgICA3OTksIDl9LCBcCisgICAgeyAgIDE1OTksMTF9LCB7ICAgIDQxNSwxMH0sIHsgICAgODMxLDEzfSwgeyAgICAxMjcsMTJ9LCBcCisgICAgeyAgICAyNTUsMTF9LCB7ICAgIDU0MywxMH0sIHsgICAxMDg3LDExfSwgeyAgICA2MDcsMTJ9LCBcCisgICAgeyAgICAzMTksMTF9LCB7ICAgIDY3MSwxMH0sIHsgICAxMzQzLDExfSwgeyAgICA3MzUsMTB9LCBcCisgICAgeyAgIDE0NzEsMTJ9LCB7ICAgIDM4MywxMX0sIHsgICAgNzk5LDEwfSwgeyAgIDE1OTksMTF9LCBcCisgICAgeyAgICA4NjMsMTB9LCB7ICAgMTcyNywxMn0sIHsgICAgNDQ3LDExfSwgeyAgICA5NTksMTB9LCBcCisgICAgeyAgIDE5MTksMTF9LCB7ICAgIDk5MSwxMn0sIHsgICAgNTExLDExfSwgeyAgIDEwODcsMTJ9LCBcCisgICAgeyAgICA1NzUsMTF9LCB7ICAgMTIxNSwxMH0sIHsgICAyNDMxLDEyfSwgeyAgICA2MzksMTF9LCBcCisgICAgeyAgIDEzNDMsMTJ9LCB7ICAgIDcwMywxMX0sIHsgICAxNDcxLDEzfSwgeyAgICAzODMsMTJ9LCBcCisgICAgeyAgICA3NjcsMTF9LCB7ICAgMTU5OSwxMn0sIHsgICAgODMxLDExfSwgeyAgIDE3MjcsMTB9LCBcCisgICAgeyAgIDM0NTUsMTJ9LCB7ICAgIDk1OSwxMX0sIHsgICAxOTE5LDEzfSwgeyAgICA1MTEsMTJ9LCBcCisgICAgeyAgIDEwODcsMTF9LCB7ICAgMjIzOSwxMn0sIHsgICAxMjE1LDExfSwgeyAgIDI0MzEsMTN9LCBcCisgICAgeyAgICA2MzksMTJ9LCB7ICAgMTQ3MSwxMX0sIHsgICAyOTQzLDEzfSwgeyAgICA3NjcsMTJ9LCBcCisgICAgeyAgIDE3MjcsMTF9LCB7ICAgMzQ1NSwxM30sIHsgICAgODk1LDEyfSwgeyAgIDE5MTksMTR9LCBcCisgICAgeyAgICA1MTEsMTN9LCB7ICAgMTAyMywxMn0sIHsgICAyMjM5LDEzfSwgeyAgIDExNTEsMTJ9LCBcCisgICAgeyAgIDI0OTUsMTN9LCB7ICAgMTI3OSwxMn0sIHsgICAyNjIzLDEzfSwgeyAgIDE0MDcsMTJ9LCBcCisgICAgeyAgIDI5NDMsMTR9LCB7ICAgIDc2NywxM30sIHsgICAxNjYzLDEyfSwgeyAgIDM0NTUsMTN9LCBcCisgICAgeyAgIDE5MTksMTV9LCB7ICAgIDUxMSwxNH0sIHsgICAxMDIzLDEzfSwgeyAgIDIxNzUsMTJ9LCBcCisgICAgeyAgIDQzNTEsMTN9LCB7ICAgMjQzMSwxNH0sIHsgICAxMjc5LDEzfSwgeyAgIDI5NDMsMTJ9LCBcCisgICAgeyAgIDU4ODcsMTR9LCB7ICAgMTUzNSwxM30sIHsgICAzNDU1LDE0fSwgeyAgIDE3OTEsMTN9LCBcCisgICAgeyAgIDM5NjcsMTV9LCB7ICAgMTAyMywxNH0sIHsgICAyMDQ3LDEzfSwgeyAgIDQzNTEsMTR9LCBcCisgICAgeyAgIDIzMDMsMTN9LCB7ICAgNDk5MSwxNH0sIHsgICAyODE1LDEzfSwgeyAgIDU4ODcsMTV9LCBcCisgICAgeyAgIDE1MzUsMTR9LCB7ICAgMzgzOSwxNn0gfQorI2RlZmluZSBTUVJfRkZUX1RBQkxFM19TSVpFIDE2NgorI2RlZmluZSBTUVJfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNTMxMgorCisjZGVmaW5lIE1VTExPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICA2CisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDQwCisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgIDE0MjgxCisjZGVmaW5lIFNRUkxPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICA4CisjZGVmaW5lIFNRUkxPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTEzCisjZGVmaW5lIFNRUkxPX1NRUl9USFJFU0hPTEQgICAgICAgICAgICAgIDEwMzIzCisKKyNkZWZpbmUgRENfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNTYKKyNkZWZpbmUgRENfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAyNDgKKyNkZWZpbmUgRENfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNTUKKyNkZWZpbmUgRENfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNTgKKworI2RlZmluZSBJTlZfTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICA0MgorI2RlZmluZSBJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDI1NAorI2RlZmluZSBJTlZfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDI1MgorCisjZGVmaW5lIEJJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgMjkyCisjZGVmaW5lIFJFRENfMV9UT19SRURDX05fVEhSRVNIT0xEICAgICAgICAgIDY3CisKKyNkZWZpbmUgTVVfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE1ODkKKyNkZWZpbmUgTVVfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgIDE1NTgKKyNkZWZpbmUgTVVQSV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAxMTQKKyNkZWZpbmUgTVVfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgIDE0NDIKKyNkZWZpbmUgTVVfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE1MjQKKworI2RlZmluZSBQT1dNX1NFQ19UQUJMRSAgMSwxNiwxMDIsNDE2LDEzNzgKKworI2RlZmluZSBHRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMworI2RlZmluZSBHRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgICAyMQorI2RlZmluZSBTRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDI3MAorI2RlZmluZSBTRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgMTEwNQorCisjZGVmaW5lIEZBQ19EU0NfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgMTU5CisjZGVmaW5lIEZBQ19PRERfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDM0CisKKyNkZWZpbmUgTUFUUklYMjJfU1RSQVNTRU5fVEhSRVNIT0xEICAgICAgICAgMTcKKyNkZWZpbmUgSEdDRDJfRElWMV9NRVRIT0QgICAgICAgICAgICAgICAgICAgIDMgIC8qIDAuNzAlIGZhc3RlciB0aGFuIDQgKi8KKyNkZWZpbmUgSEdDRF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgICAxMzAKKyNkZWZpbmUgSEdDRF9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNjMKKyNkZWZpbmUgSEdDRF9SRURVQ0VfVEhSRVNIT0xEICAgICAgICAgICAgIDMzODkKKyNkZWZpbmUgR0NEX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICA1NzMKKyNkZWZpbmUgR0NERVhUX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzOTMKKyNkZWZpbmUgSkFDT0JJX0JBU0VfTUVUSE9EICAgICAgICAgICAgICAgICAgIDQgIC8qIDkuMTMlIGZhc3RlciB0aGFuIDEgKi8KKworLyogVHVuZXVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIHRvb2sgNTI5MDEgc2Vjb25kcyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazYvUkVBRE1FIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazYvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNjVhZjMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNi9SRUFETUUKQEAgLTAsMCArMSwyNTEgQEAKK0NvcHlyaWdodCAyMDAwLCAyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworCisKKwkJCUFNRCBLNiBNUE4gU1VCUk9VVElORVMKKworCisKK1RoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGNvZGUgb3B0aW1pemVkIGZvciBBTUQgSzYgQ1BVcywgbWVhbmluZyBLNiwgSzYtMiBhbmQKK0s2LTMuCisKK1RoZSBtbXggc3ViZGlyZWN0b3J5IGhhcyBNTVggY29kZSBzdWl0aW5nIHBsYWluIEs2LCB0aGUgazYybW14IHN1YmRpcmVjdG9yeQoraGFzIE1NWCBjb2RlIHN1aXRpbmcgSzYtMiBhbmQgSzYtMy4gIEFsbCBjaGlwcyBpbiB0aGUgSzYgZmFtaWx5IGhhdmUgTU1YLAordGhlIHNlcGFyYXRlIGRpcmVjdG9yaWVzIGFyZSBqdXN0IHNvIHRoYXQgLi9jb25maWd1cmUgY2FuIG9taXQgdGhlbSBpZiB0aGUKK2Fzc2VtYmxlciBkb2Vzbid0IHN1cHBvcnQgTU1YLgorCisKKworCitTVEFUVVMKKworVGltZXMgZm9yIHRoZSBsb29wcywgd2l0aCBhbGwgY29kZSBhbmQgZGF0YSBpbiBMMSBjYWNoZSwgYXJlIGFzIGZvbGxvd3MuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN5Y2xlcy9saW1iCisKKwltcG5fYWRkX24vc3ViX24gICAgICAgICAgICAzLjI1IG5vcm1hbCwgMi43NSBpbi1wbGFjZQorCisJbXBuX211bF8xICAgICAgICAgICAgICAgICAgNi4yNQorCW1wbl9hZGQvc3VibXVsXzEgICAgICAgICAgIDcuNjUtOC40ICAodmFyeWluZyB3aXRoIGRhdGEgdmFsdWVzKQorCisJbXBuX211bF9iYXNlY2FzZSAgICAgICAgICAgOS4yNSBjeWNsZXMvY3Jvc3Nwcm9kdWN0IChhcHByb3gpCisJbXBuX3Nxcl9iYXNlY2FzZSAgICAgICAgICAgNC43ICBjeWNsZXMvY3Jvc3Nwcm9kdWN0IChhcHByb3gpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIDkuMiBjeWNsZXMvdHJpYW5nbGVwcm9kdWN0IChhcHByb3gpCisKKwltcG5fbC9yc2hpZnQgICAgICAgICAgICAgICAzLjAKKworCW1wbl9kaXZyZW1fMSAgICAgICAgICAgICAgMjAuMAorCW1wbl9tb2RfMSAgICAgICAgICAgICAgICAgMjAuMAorCW1wbl9kaXZleGFjdF9ieTMgICAgICAgICAgMTEuMAorCisJbXBuX2NvcHlpICAgICAgICAgICAgICAgICAgMS4wCisJbXBuX2NvcHlkICAgICAgICAgICAgICAgICAgMS4wCisKKworSzYtMiBhbmQgSzYtMyBoYXZlIGR1YWwtaXNzdWUgTU1YIGFuZCBnZXQgdGhlIGZvbGxvd2luZyBpbXByb3ZlbWVudHMuCisKKwltcG5fbC9yc2hpZnQgICAgICAgICAgICAgICAxLjc1CisKKworUHJlZmV0Y2hpbmcgb2Ygc291cmNlcyBoYXNuJ3QgeWV0IGdpdmVuIGFueSBqb3kuICBXaXRoIHRoZSAzRE5vdyAicHJlZmV0Y2giCitpbnN0cnVjdGlvbiwgY29kZSBzZWVtcyB0byBydW4gc2xvd2VyLCBhbmQgd2l0aCBqdXN0ICJtb3YiIGxvYWRzIGl0IGRvZXNuJ3QKK3NlZW0gZmFzdGVyLiAgUmVzdWx0cyBzbyBmYXIgYXJlIGluY29uc2lzdGVudC4gIFRoZSBLNiBkb2VzIGEgaGFyZHdhcmUKK3ByZWZldGNoIG9mIHRoZSBzZWNvbmQgY2FjaGUgbGluZSBpbiBhIHNlY3Rvciwgc28gdGhlIHBlbmFsdHkgZm9yIG5vdAorcHJlZmV0Y2hpbmcgaW4gc29mdHdhcmUgaXMgcmVkdWNlZC4KKworCisKKworTk9URVMKKworQWxsIEs2IGZhbWlseSBjaGlwcyBoYXZlIE1NWCwgYnV0IG9ubHkgSzYtMiBhbmQgSzYtMyBoYXZlIDNETm93LgorCitQbGFpbiBLNiBleGVjdXRlcyBNTVggaW5zdHJ1Y3Rpb25zIG9ubHkgaW4gdGhlIFggcGlwZSwgYnV0IEs2LTIgYW5kIEs2LTMgY2FuCitleGVjdXRlIHRoZW0gaW4gYm90aCBYIGFuZCBZIChhbmQgaW4gYm90aCB0b2dldGhlcikuCisKK0JyYW5jaCBtaXNwcmVkaWN0aW9uIHBlbmFsdHkgaXMgMSB0byA0IGN5Y2xlcyAoT3B0aW1pemF0aW9uIE1hbnVhbAorY2hhcHRlciA2IHRhYmxlIDEyKS4KKworV3JpdGUtYWxsb2NhdGUgTDEgZGF0YSBjYWNoZSBtZWFucyBwcmVmZXRjaGluZyBvZiBkZXN0aW5hdGlvbnMgaXMgdW5uZWNlc3NhcnkuCitTdG9yZSBxdWV1ZSBpcyA3IGVudHJpZXMgb2YgNjQgYml0cyBlYWNoLgorCitGbG9hdGluZyBwb2ludCBtdWx0aXBsaWNhdGlvbnMgY2FuIGJlIGRvbmUgaW4gcGFyYWxsZWwgd2l0aCBpbnRlZ2VyCittdWx0aXBsaWNhdGlvbnMsIGJ1dCB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYW55IHdheSB0byBtYWtlIHVzZSBvZiB0aGlzLgorCisKKworT1BUSU1JWkFUSU9OUworCitVbnJvbGxlZCBsb29wcyBhcmUgdXNlZCB0byByZWR1Y2UgbG9vcGluZyBvdmVyaGVhZC4gIFRoZSB1bnJvbGxpbmcgaXMKK2NvbmZpZ3VyYWJsZSB1cCB0byAzMiBsaW1icy9sb29wIGZvciBtb3N0IHJvdXRpbmVzLCB1cCB0byA2NCBmb3Igc29tZS4KKworU29tZXRpbWVzIGNvbXB1dGVkIGp1bXBzIGludG8gdGhlIHVucm9sbGluZyBhcmUgdXNlZCB0byBoYW5kbGUgc2l6ZXMgbm90IGEKK211bHRpcGxlIG9mIHRoZSB1bnJvbGxpbmcuICBBbiBhdHRyYWN0aXZlIGZlYXR1cmUgb2YgdGhpcyBpcyB0aGF0IHRpbWVzCitzbW9vdGhseSBpbmNyZWFzZSB3aXRoIG9wZXJhbmQgc2l6ZSwgYnV0IGFuIGluZGlyZWN0IGp1bXAgaXMgYWJvdXQgNiBjeWNsZXMKK2FuZCB0aGUgc2V0dXBzIGFib3V0IGFub3RoZXIgNiwgc28gaXQgZGVwZW5kcyBvbiBob3cgbXVjaCB0aGUgdW5yb2xsZWQgY29kZQoraXMgZmFzdGVyIHRoYW4gYSBzaW1wbGUgbG9vcCBhcyB0byB3aGV0aGVyIGEgY29tcHV0ZWQganVtcCBvdWdodCB0byBiZSB1c2VkLgorCitQb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIGlzIGltcGxlbWVudGVkIHVzaW5nIGEgY2FsbCB0byBnZXQgZWlwIGZvcgorY29tcHV0ZWQganVtcHMgYW5kIGEgcmV0IGlzIGFsd2F5cyBkb25lLCByYXRoZXIgdGhhbiBhbiBhZGRsICQ0LCVlc3Agb3IgYQorcG9wbCwgc28gdGhlIENQVSByZXR1cm4gYWRkcmVzcyBicmFuY2ggcHJlZGljdGlvbiBzdGFjayBzdGF5cyBzeW5jaHJvbmlzZWQKK3dpdGggdGhlIGFjdHVhbCBzdGFjayBpbiBtZW1vcnkuICBTdWNoIGEgY2FsbCBob3dldmVyIHN0aWxsIGNvc3RzIDQgdG8gNworY3ljbGVzLgorCitCcmFuY2ggcHJlZGljdGlvbiwgaW4gYWJzZW5jZSBvZiBhbnkgaGlzdG9yeSwgd2lsbCBndWVzcyBmb3J3YXJkIGp1bXBzIGFyZQorbm90IHRha2VuIGFuZCBiYWNrd2FyZCBqdW1wcyBhcmUgdGFrZW4uICBXaGVyZSBwb3NzaWJsZSBpdCdzIGFycmFuZ2VkIHRoYXQKK3RoZSBsZXNzIGxpa2VseSBvciBsZXNzIGltcG9ydGFudCBjYXNlIGlzIHVuZGVyIGEgdGFrZW4gZm9yd2FyZCBqdW1wLgorCisKKworTU1YCisKK1B1dHRpbmcgZW1tcyBvciBmZW1tcyBhcyBsYXRlIGFzIHBvc3NpYmxlIGluIGEgcm91dGluZSBzZWVtcyB0byBiZSBmYXN0ZXN0LgorUGVyaGFwcyBhbiBlbW1zIG9yIGZlbW1zIHN0YWxscyB1bnRpbCBhbGwgb3V0c3RhbmRpbmcgTU1YIGluc3RydWN0aW9ucyBoYXZlCitjb21wbGV0ZWQsIHNvIHB1dHRpbmcgaXQgbGF0ZXIgZ2l2ZXMgdGhlbSBhIGNoYW5jZSB0byBjb21wbGV0ZSBvbiB0aGVpciBvd24sCitpbiBwYXJhbGxlbCB3aXRoIG90aGVyIG9wZXJhdGlvbnMgKGxpa2UgcmVnaXN0ZXIgcG9wcGluZykuCisKK1RoZSBPcHRpbWl6YXRpb24gTWFudWFsIGNoYXB0ZXIgNSByZWNvbW1lbmRzIHVzaW5nIGEgZmVtbXMgb24gSzYtMiBhbmQgSzYtMworYXQgdGhlIHN0YXJ0IG9mIGEgcm91dGluZSwgaW4gY2FzZSBpdCdzIGJlZW4gcHJlY2VkZWQgYnkgeDg3IGZsb2F0aW5nIHBvaW50CitvcGVyYXRpb25zLiAgVGhpcyBpc24ndCBkb25lIGJlY2F1c2UgaW4gZ21wIHByb2dyYW1zIGl0J3MgZXhwZWN0ZWQgdGhhdCB4ODcKK2Zsb2F0aW5nIHBvaW50IHdvbid0IGJlIG11Y2ggdXNlZCBhbmQgdGhhdCBjaGFuY2VzIGFyZSBhbiBtcG4gcm91dGluZSB3b24ndAoraGF2ZSBiZWVuIHByZWNlZGVkIGJ5IGFueSB4ODcgY29kZS4KKworCisKK0NPRElORworCitJbnN0cnVjdGlvbnMgaW4gZ2VuZXJhbCBjb2RlIGFyZSBzaG93biBwYWlyZWQgaWYgdGhleSBjYW4gZGVjb2RlIGFuZCBleGVjdXRlCit0b2dldGhlciwgbWVhbmluZyB0d28gc2hvcnQgZGVjb2RlIGluc3RydWN0aW9ucyB3aXRoIHRoZSBzZWNvbmQgbm90CitkZXBlbmRpbmcgb24gdGhlIGZpcnN0LCBvbmx5IHRoZSBmaXJzdCB1c2luZyB0aGUgc2hpZnRlciwgbm8gbW9yZSB0aGFuIG9uZQorbG9hZCwgYW5kIG5vIG1vcmUgdGhhbiBvbmUgc3RvcmUuCisKK0s2IGRvZXMgc29tZSBvdXQgb2Ygb3JkZXIgZXhlY3V0aW9uIHNvIHRoZSBwYWlyaW5ncyBhcmVuJ3QgZXNzZW50aWFsLCB0aGV5CitqdXN0IHNob3cgd2hhdCBzbG90cyBtaWdodCBiZSBhdmFpbGFibGUuICBXaGVuIGRlY29kaW5nIGlzIHRoZSBsaW1pdGluZworZmFjdG9yIHRoaW5ncyBjYW4gYmUgc2NoZWR1bGVkIHRoYXQgbWlnaHQgbm90IGV4ZWN1dGUgdW50aWwgbGF0ZXIuCisKKworCitOT1RFUworCitDb2RlIGFsaWdubWVudAorCistIGlmIGFuIG9wY29kZS9tb2RybSBvciAwRmgvb3Bjb2RlL21vZHJtIGNyb3NzZXMgYSBjYWNoZSBsaW5lIGJvdW5kYXJ5LAorICBzaG9ydCBkZWNvZGUgaXMgaW5oaWJpdGVkLiAgVGhlIGNyb3NzLnBsIHNjcmlwdCBkZXRlY3RzIHRoaXMuCisKKy0gbG9vcHMgYW5kIGJyYW5jaCB0YXJnZXRzIHNob3VsZCBiZSBhbGlnbmVkIHRvIDE2IGJ5dGVzLCBvciBlbnN1cmUgYXQgbGVhc3QKKyAgMiBpbnN0cnVjdGlvbnMgYmVmb3JlIGEgMzIgYnl0ZSBib3VuZGFyeS4gIFRoaXMgbWFrZXMgdXNlIG9mIHRoZSAxNiBieXRlCisgIGNhY2hlIGluIHRoZSBCVEIuCisKK0FkZHJlc3NpbmcgbW9kZXMKKworLSAoJWVzaSkgZGVncmFkZXMgZGVjb2RpbmcgZnJvbSBzaG9ydCB0byB2ZWN0b3IuICAwKCVlc2kpIGRvZXNuJ3QgaGF2ZSB0aGlzCisgIHByb2JsZW0sIGFuZCBjYW4gYmUgdXNlZCBhcyBhbiBlcXVpdmFsZW50LCBvciBlYXNpZXIgaXMganVzdCB0byB1c2UgYQorICBkaWZmZXJlbnQgcmVnaXN0ZXIsIGxpa2UgJWVieC4KKworLSBLNiBhbmQgcHJlLUNYVCBjb3JlIEs2LTIgaGF2ZSB0aGUgZm9sbG93aW5nIHByb2JsZW0uICAoSzYtMiBDWFQgYW5kIEs2LTMKKyAgaGF2ZSBpdCBmaXhlZCwgdGhlc2UgYmVpbmcgY3B1aWQgZnVuY3Rpb24gMSBzaWduYXR1cmVzIDB4NTg4IHRvIDB4NThGKS4KKworICBJZiBtb3JlIHRoYW4gMyBieXRlcyBhcmUgbmVlZGVkIHRvIGRldGVybWluZSBpbnN0cnVjdGlvbiBsZW5ndGggdGhlbgorICBkZWNvZGluZyBkZWdyYWRlcyBmcm9tIGRpcmVjdCB0byBsb25nLCBvciBmcm9tIGxvbmcgdG8gdmVjdG9yLiAgVGhpcworICBoYXBwZW5zIHdpdGggZm9ybXMgbGlrZSAiMEYgb3Bjb2RlIG1vZC9ybSIgd2l0aCBtb2Qvcm09MDAteHh4LTEwMCBzaW5jZQorICB3aXRoIG1vZD0wMCB0aGUgc2liIGRldGVybWluZXMgd2hldGhlciB0aGVyZSdzIGEgZGlzcGxhY2VtZW50LgorCisgIFRoaXMgYWZmZWN0cyBhbGwgTU1YIGFuZCAzRE5vdyBpbnN0cnVjdGlvbnMsIGFuZCBvdGhlcnMgd2l0aCBhbiAwRiBwcmVmaXgsCisgIGxpa2UgbW92emJsLiAgVGhlIG1vZGVzIGFmZmVjdGVkIGFyZSBhbnl0aGluZyB3aXRoIGFuIGluZGV4IGFuZCBubworICBkaXNwbGFjZW1lbnQsIG9yIGFuIGluZGV4IGJ1dCBubyBiYXNlLCBhbmQgdGhpcyBpbmNsdWRlcyAoJWVzcCkgd2hpY2ggaXMKKyAgcmVhbGx5ICgsJWVzcCwxKS4KKworICBUaGUgY3Jvc3MucGwgc2NyaXB0IGRldGVjdHMgcHJvYmxlbSBjYXNlcy4gIFRoZSB3b3JrYXJvdW5kIGlzIHRvIGFsd2F5cworICB1c2UgYSBkaXNwbGFjZW1lbnQsIGFuZCB0byBkbyB0aGlzIHdpdGggWmRpc3AgaWYgaXQncyB6ZXJvIHNvIHRoZQorICBhc3NlbWJsZXIgZG9lc24ndCBkaXNjYXJkIGl0LgorCisgIFNlZSBPcHRpbWl6YXRpb24gTWFudWFsIHJldiBEIHBhZ2UgNjcgYW5kIDNETm93IFBvcnRpbmcgR3VpZGUgcmV2IEIgcGFnZXMKKyAgMTMtMTQgYW5kIDM2LTM3LgorCitDYWxscworCistIGluZGlyZWN0IGp1bXBzIGFuZCBjYWxscyBhcmUgbm90IGJyYW5jaCBwcmVkaWN0ZWQsIHRoZXkgbWVhc3VyZSBhYm91dCA2CisgIGN5Y2xlcy4KKworVmFyaW91cworCistIGFkY2wgICAgICAyIGN5Y2xlcyBvZiBkZWNvZGUsIG1heWJlIDIgY3ljbGVzIGV4ZWN1dGluZyBpbiB0aGUgWCBwaXBlCistIGJzZiAgICAgICAxMi0yNyBjeWNsZXMKKy0gZW1tcyAgICAgIDUgY3ljbGVzCistIGZlbW1zICAgICAzIGN5Y2xlcworLSBqZWN4eiAgICAgMiBjeWNsZXMgdGFrZW4sIDEzIG5vdCB0YWtlbiAob3B0aW1pemF0aW9uIG1hbnVhbCBzYXlzIDcgbm90IHRha2VuKQorLSBkaXZsICAgICAgMjAgY3ljbGVzIGJhY2stdG8tYmFjaworLSBpbXVsbCAgICAgMiBkZWNvZGUsIDMgZXhlY3V0ZQorLSBtdWxsICAgICAgMiBkZWNvZGUsIDMgZXhlY3V0ZSAob3B0aW1pemF0aW9uIG1hbnVhbCBkZWNvZGluZyBzYW1wbGUpCistIHByZWZldGNoICAyIGN5Y2xlcworLSByY2xsL3JjcmwgaW1wbGljaXQgYnkgb25lIGJpdDogMiBjeWNsZXMKKyAgICAgICAgICAgIGltbWVkaWF0ZSBvciAlY2wgY291bnQ6IDExICsgMiBwZXIgYml0IGZvciBkd29yZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMgKyA0IHBlciBiaXQgZm9yIGJ5dGUKKy0gc2V0Q0MJICAgIDIgY3ljbGVzCistIHhjaGdsCSVlYXgscmVnICAxLjUgY3ljbGVzLCBiYWNrLXRvLWJhY2sgKHN0cmFuZ2UpCisgICAgICAgIHJlZyxyZWcgICAyIGN5Y2xlcywgYmFjay10by1iYWNrCisKKworCisKK1JFRkVSRU5DRVMKKworIkFNRC1LNiBQcm9jZXNzb3IgQ29kZSBPcHRpbWl6YXRpb24gQXBwbGljYXRpb24gTm90ZSIsIEFNRCBwdWJsaWNhdGlvbgorbnVtYmVyIDIxOTI0LCByZXZpc2lvbiBEIGFtZW5kbWVudCAwLCBKYW51YXJ5IDIwMDAuICBUaGlzIGRlc2NyaWJlcyBLNi0yIGFuZAorSzYtMy4gIEF2YWlsYWJsZSBvbi1saW5lLAorCitodHRwOi8vd3d3LmFtZC5jb20vdXMtZW4vYXNzZXRzL2NvbnRlbnRfdHlwZS93aGl0ZV9wYXBlcnNfYW5kX3RlY2hfZG9jcy8yMTkyNC5wZGYKKworIkFNRC1LNiBNTVggRW5oYW5jZWQgUHJvY2Vzc29yIHg4NiBDb2RlIE9wdGltaXphdGlvbiBBcHBsaWNhdGlvbiBOb3RlIiwgQU1ECitwdWJsaWNhdGlvbiBudW1iZXIgMjE4MjgsIHJldmlzaW9uIEEgYW1lbmRtZW50IDAsIEF1Z3VzdCAxOTk3LiAgVGhpcyBpcyBhbgorb2xkZXIgZWRpdGlvbiBvZiB0aGUgYWJvdmUgZG9jdW1lbnQsIGRlc2NyaWJpbmcgcGxhaW4gSzYuICBBdmFpbGFibGUKK29uLWxpbmUsCisKK2h0dHA6Ly93d3cuYW1kLmNvbS91cy1lbi9hc3NldHMvY29udGVudF90eXBlL3doaXRlX3BhcGVyc19hbmRfdGVjaF9kb2NzLzIxODI4LnBkZgorCisiM0ROb3cgVGVjaG5vbG9neSBNYW51YWwiLCBBTUQgcHVibGljYXRpb24gbnVtYmVyIDIxOTI4Ry8wLU1hcmNoIDIwMDAuCitUaGlzIGRlc2NyaWJlcyB0aGUgZmVtbXMgYW5kIHByZWZldGNoIGluc3RydWN0aW9ucywgYnV0IG5vdGhpbmcgZWxzZSBmcm9tCiszRE5vdyBoYXMgYmVlbiB1c2VkLiAgQXZhaWxhYmxlIG9uLWxpbmUsCisKK2h0dHA6Ly93d3cuYW1kLmNvbS91cy1lbi9hc3NldHMvY29udGVudF90eXBlL3doaXRlX3BhcGVyc19hbmRfdGVjaF9kb2NzLzIxOTI4LnBkZgorCisiM0ROb3cgSW5zdHJ1Y3Rpb24gUG9ydGluZyBHdWlkZSIsIEFNRCBwdWJsaWNhdGlvbiBudW1iZXIgMjI2MjEsIHJldmlzaW9uIEIsCitBdWd1c3QgMTk5OS4gIFRoaXMgaGFzIHNvbWUgbm90ZXMgb24gZ2VuZXJhbCBLNiBvcHRpbWl6YXRpb25zIGFzIHdlbGwgYXMKKzNETm93LiAgQXZhaWxhYmxlIG9uLWxpbmUsCisKK2h0dHA6Ly93d3cuYW1kLmNvbS91cy1lbi9hc3NldHMvY29udGVudF90eXBlL3doaXRlX3BhcGVyc19hbmRfdGVjaF9kb2NzLzIyNjIxLnBkZgorCisKKworLS0tLS0tLS0tLS0tLS0tLQorTG9jYWwgdmFyaWFibGVzOgorbW9kZTogdGV4dAorZmlsbC1jb2x1bW46IDc2CitFbmQ6CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNi9hb3JzX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazYvYW9yc19uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjhmOWI0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazYvYW9yc19uLmFzbQpAQCAtMCwwICsxLDMzNyBAQAorZG5sICBBTUQgSzYgbXBuX2FkZC9zdWJfbiAtLSBtcG4gYWRkaXRpb24gb3Igc3VidHJhY3Rpb24uCisKK2RubCAgQ29weXJpZ2h0IDE5OTktMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MgSzY6IG5vcm1hbCAzLjI1IGN5Y2xlcy9saW1iLCBpbi1wbGFjZSAyLjc1IGN5Y2xlcy9saW1iLgorCisKK2lmZGVmKGBPUEVSQVRJT05fYWRkX24nLCBgCisJZGVmaW5lKE00X2luc3QsICAgICAgICBhZGNsKQorCWRlZmluZShNNF9mdW5jdGlvbl9uLCAgbXBuX2FkZF9uKQorCWRlZmluZShNNF9mdW5jdGlvbl9uYywgbXBuX2FkZF9uYykKKwlkZWZpbmUoTTRfZGVzY3JpcHRpb24sIGFkZCkKKycsYGlmZGVmKGBPUEVSQVRJT05fc3ViX24nLCBgCisJZGVmaW5lKE00X2luc3QsICAgICAgICBzYmJsKQorCWRlZmluZShNNF9mdW5jdGlvbl9uLCAgbXBuX3N1Yl9uKQorCWRlZmluZShNNF9mdW5jdGlvbl9uYywgbXBuX3N1Yl9uYykKKwlkZWZpbmUoTTRfZGVzY3JpcHRpb24sIHN1YnRyYWN0KQorJyxgbTRfZXJyb3IoYE5lZWQgT1BFUkFUSU9OX2FkZF9uIG9yIE9QRVJBVElPTl9zdWJfbgorJyknKScpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FkZF9uIG1wbl9hZGRfbmMgbXBuX3N1Yl9uIG1wbl9zdWJfbmMpCisKKworQyBtcF9saW1iX3QgTTRfZnVuY3Rpb25fbiAobXBfcHRyIGRzdCwgbXBfc3JjcHRyIHNyYzEsIG1wX3NyY3B0ciBzcmMyLAorQyAgICAgICAgICAgICAgICAgICAgICAgICAgbXBfc2l6ZV90IHNpemUpOworQyBtcF9saW1iX3QgTTRfZnVuY3Rpb25fbmMgKG1wX3B0ciBkc3QsIG1wX3NyY3B0ciBzcmMxLCBtcF9zcmNwdHIgc3JjMiwKK0MJICAgICAgICAgICAgICAgICAgICAgIG1wX3NpemVfdCBzaXplLCBtcF9saW1iX3QgY2FycnkpOworQworQyBDYWxjdWxhdGUgc3JjMSxzaXplIE00X2Rlc2NyaXB0aW9uIHNyYzIsc2l6ZSwgYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4KK0MgZHN0LHNpemUuICBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBjYXJyeSBiaXQgZnJvbSB0aGUgdG9wIG9mIHRoZSByZXN1bHQKK0MgKDEgb3IgMCkuCitDCitDIFRoZSBfbmMgdmVyc2lvbiBhY2NlcHRzIDEgb3IgMCBmb3IgYW4gaW5pdGlhbCBjYXJyeSBpbnRvIHRoZSBsb3cgbGltYiBvZgorQyB0aGUgY2FsY3VsYXRpb24uICBOb3RlIHZhbHVlcyBvdGhlciB0aGFuIDEgb3IgMCBoZXJlIHdpbGwgbGVhZCB0byBnYXJiYWdlCitDIHJlc3VsdHMuCitDCitDIEluc3RydWN0aW9uIGRlY29kaW5nIGxpbWl0cyBhIG5vcm1hbCBkc3Q9c3JjMStzcmMyIG9wZXJhdGlvbiB0byAzIGMvbCwgYW5kCitDIGFuIGluLXBsYWNlIGRzdCs9c3JjIHRvIDIuNSBjL2wuICBUaGUgdW5yb2xsZWQgbG9vcHMgaGF2ZSAxIGN5Y2xlL2xvb3Agb2YKK0MgbG9vcCBjb250cm9sLCB3aGljaCB3aXRoIDQgbGltYnMvbG9vcCBtZWFucyBhbiBleHRyYSAwLjI1IGMvbC4KKworZGVmaW5lKFBBUkFNX0NBUlJZLCBgRlJBTUUrMjAoJWVzcCknKQorZGVmaW5lKFBBUkFNX1NJWkUsICBgRlJBTUUrMTYoJWVzcCknKQorZGVmaW5lKFBBUkFNX1NSQzIsICBgRlJBTUUrMTIoJWVzcCknKQorZGVmaW5lKFBBUkFNX1NSQzEsICBgRlJBTUUrOCglZXNwKScpCitkZWZpbmUoUEFSQU1fRFNULCAgIGBGUkFNRSs0KCVlc3ApJykKK2RlZmxpdChgRlJBTUUnLDApCisKK2RubCAgbWluaW11bSA1IGJlY2F1c2UgdGhlIHVucm9sbGVkIGNvZGUgY2FuJ3QgaGFuZGxlIGxlc3MKK2RlZmxpdChVTlJPTExfVEhSRVNIT0xELCA1KQorCisJVEVYVAorCUFMSUdOKDMyKQorCitQUk9MT0dVRShNNF9mdW5jdGlvbl9uYykKKwltb3ZsCVBBUkFNX0NBUlJZLCAlZWF4CisJam1wCUwoc3RhcnQpCitFUElMT0dVRSgpCisKKworUFJPTE9HVUUoTTRfZnVuY3Rpb25fbikKKwl4b3JsCSVlYXgsICVlYXgKK0woc3RhcnQpOgorCW1vdmwJUEFSQU1fU0laRSwgJWVjeAorCXB1c2hsCSVlYngKK0ZSQU1FX3B1c2hsKCkKKworCW1vdmwJUEFSQU1fU1JDMSwgJWVieAorCXB1c2hsCSVlZGkKK0ZSQU1FX3B1c2hsKCkKKworCW1vdmwJUEFSQU1fU1JDMiwgJWVkeAorCWNtcGwJJFVOUk9MTF9USFJFU0hPTEQsICVlY3gKKworCW1vdmwJUEFSQU1fRFNULCAlZWRpCisJamFlCUwodW5yb2xsKQorCisKKwlzaHJsCSVlYXgJCUMgaW5pdGlhbCBjYXJyeSBmbGFnCisKKwlDIG9mZnNldCAweDIxIGhlcmUsIGNsb3NlIGVub3VnaCB0byBhbGlnbmVkCitMKHNpbXBsZSk6CisJQyBlYXgJc2NyYXRjaAorCUMgZWJ4CXNyYzEKKwlDIGVjeAljb3VudGVyCisJQyBlZHgJc3JjMgorCUMgZXNpCisJQyBlZGkJZHN0CisJQyBlYnAKKwlDCisJQyBUaGUgc3RvcmUgdG8gKCVlZGkpIGNvdWxkIGJlIGRvbmUgd2l0aCBhIHN0b3NsOyBpdCdkIGJlIHNtYWxsZXIKKwlDIGNvZGUsIGJ1dCB0aGVyZSdzIG5vIHNwZWVkIGdhaW4gYW5kIGEgY2xkIHdvdWxkIGhhdmUgdG8gYmUgYWRkZWQKKwlDIChwZXIgbXBuL3g4Ni9SRUFETUUpLgorCisJbW92bAkoJWVieCksICVlYXgKKwlsZWFsCTQoJWVieCksICVlYngKKworCU00X2luc3QJKCVlZHgpLCAlZWF4CisKKwltb3ZsCSVlYXgsICglZWRpKQorCWxlYWwJNCglZWRpKSwgJWVkaQorCisJbGVhbAk0KCVlZHgpLCAlZWR4CisJbG9vcAlMKHNpbXBsZSkKKworCisJbW92bAkkMCwgJWVheAorCXBvcGwJJWVkaQorCisJc2V0YwklYWwKKworCXBvcGwJJWVieAorCXJldAorCisKK0MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0wodW5yb2xsKToKKwlDIGVheAljYXJyeQorCUMgZWJ4CXNyYzEKKwlDIGVjeAljb3VudGVyCisJQyBlZHgJc3JjMgorCUMgZXNpCisJQyBlZGkJZHN0CisJQyBlYnAKKworCWNtcGwJJWVkaSwgJWVieAorCXB1c2hsCSVlc2kKKworCWplCUwoaW5wbGFjZSkKKworaWZkZWYoYE9QRVJBVElPTl9hZGRfbicsYAorCWNtcGwJJWVkaSwgJWVkeAorCisJamUJTChpbnBsYWNlX3JldmVyc2UpCisnKQorCisJbW92bAklZWN4LCAlZXNpCisKKwlhbmRsCSQtNCwgJWVjeAorCWFuZGwJJDMsICVlc2kKKworCWxlYWwJKCVlYngsJWVjeCw0KSwgJWVieAorCWxlYWwJKCVlZHgsJWVjeCw0KSwgJWVkeAorCWxlYWwJKCVlZGksJWVjeCw0KSwgJWVkaQorCisJbmVnbAklZWN4CisJc2hybAklZWF4CisKKwlBTElHTigzMikKK0wobm9ybWFsX3RvcCk6CisJQyBlYXgJY291bnRlciwgcXdvcmRzLCBuZWdhdGl2ZQorCUMgZWJ4CXNyYzEKKwlDIGVjeAlzY3JhdGNoCisJQyBlZHgJc3JjMgorCUMgZXNpCisJQyBlZGkJZHN0CisJQyBlYnAKKworCW1vdmwJKCVlYngsJWVjeCw0KSwgJWVheAorCWxlYWwJNSglZWN4KSwgJWVjeAorCU00X2luc3QJLTIwKCVlZHgsJWVjeCw0KSwgJWVheAorCW1vdmwJJWVheCwgLTIwKCVlZGksJWVjeCw0KQorCisJbW92bAk0LTIwKCVlYngsJWVjeCw0KSwgJWVheAorCU00X2luc3QJNC0yMCglZWR4LCVlY3gsNCksICVlYXgKKwltb3ZsCSVlYXgsIDQtMjAoJWVkaSwlZWN4LDQpCisKKwltb3ZsCTgtMjAoJWVieCwlZWN4LDQpLCAlZWF4CisJTTRfaW5zdAk4LTIwKCVlZHgsJWVjeCw0KSwgJWVheAorCW1vdmwJJWVheCwgOC0yMCglZWRpLCVlY3gsNCkKKworCW1vdmwJMTItMjAoJWVieCwlZWN4LDQpLCAlZWF4CisJTTRfaW5zdAkxMi0yMCglZWR4LCVlY3gsNCksICVlYXgKKwltb3ZsCSVlYXgsIDEyLTIwKCVlZGksJWVjeCw0KQorCisJbG9vcAlMKG5vcm1hbF90b3ApCisKKworCWRlY2wJJWVzaQorCWp6CUwobm9ybWFsX2ZpbmlzaF9vbmUpCisJanMJTChub3JtYWxfZG9uZSkKKworCUMgdHdvIG9yIHRocmVlIG1vcmUgbGltYnMKKworCW1vdmwJKCVlYngpLCAlZWF4CisJTTRfaW5zdAkoJWVkeCksICVlYXgKKwltb3ZsCSVlYXgsICglZWRpKQorCisJbW92bAk0KCVlYngpLCAlZWF4CisJTTRfaW5zdAk0KCVlZHgpLCAlZWF4CisJZGVjbAklZXNpCisJbW92bAklZWF4LCA0KCVlZGkpCisKKwlqeglMKG5vcm1hbF9kb25lKQorCW1vdmwJJDIsICVlY3gKKworTChub3JtYWxfZmluaXNoX29uZSk6CisJbW92bAkoJWVieCwlZWN4LDQpLCAlZWF4CisJTTRfaW5zdAkoJWVkeCwlZWN4LDQpLCAlZWF4CisJbW92bAklZWF4LCAoJWVkaSwlZWN4LDQpCisKK0wobm9ybWFsX2RvbmUpOgorCXBvcGwJJWVzaQorCXBvcGwJJWVkaQorCisJbW92bAkkMCwgJWVheAorCXBvcGwJJWVieAorCisJc2V0YwklYWwKKworCXJldAorCisKK0MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworaWZkZWYoYE9QRVJBVElPTl9hZGRfbicsYAorTChpbnBsYWNlX3JldmVyc2UpOgorCUMgZHN0PT1zcmMyCisKKwltb3ZsCSVlYngsICVlZHgKKycpCisKK0woaW5wbGFjZSk6CisJQyBlYXgJaW5pdGlhbCBjYXJyeQorCUMgZWJ4CisJQyBlY3gJc2l6ZQorCUMgZWR4CXNyYworCUMgZXNpCisJQyBlZGkJZHN0CisJQyBlYnAKKworCWxlYWwJLTEoJWVjeCksICVlc2kKKwlkZWNsCSVlY3gKKworCWFuZGwJJC00LCAlZWN4CisJYW5kbAkkMywgJWVzaQorCisJbW92bAkoJWVkeCksICVlYngJCUMgc3JjIGxvdyBsaW1iCisJbGVhbAkoJWVkeCwlZWN4LDQpLCAlZWR4CisKKwlsZWFsCSglZWRpLCVlY3gsNCksICVlZGkKKwluZWdsCSVlY3gKKworCXNocmwJJWVheAorCisKKwlBTElHTigzMikKK0woaW5wbGFjZV90b3ApOgorCUMgZWF4CisJQyBlYngJbmV4dCBzcmMgbGltYgorCUMgZWN4CXNpemUKKwlDIGVkeAlzcmMKKwlDIGVzaQorCUMgZWRpCWRzdAorCUMgZWJwCisKKwlNNF9pbnN0CSVlYngsICglZWRpLCVlY3gsNCkKKworCW1vdmwJNCglZWR4LCVlY3gsNCksICVlYXgKKwlsZWFsCTUoJWVjeCksICVlY3gKKworCU00X2luc3QJJWVheCwgNC0yMCglZWRpLCVlY3gsNCkKKworCW1vdmwJOC0yMCglZWR4LCVlY3gsNCksICVlYXgKKwltb3ZsCTEyLTIwKCVlZHgsJWVjeCw0KSwgJWVieAorCisJTTRfaW5zdAklZWF4LCA4LTIwKCVlZGksJWVjeCw0KQorCU00X2luc3QJJWVieCwgMTItMjAoJWVkaSwlZWN4LDQpCisKKwltb3ZsCTE2LTIwKCVlZHgsJWVjeCw0KSwgJWVieAorCWxvb3AJTChpbnBsYWNlX3RvcCkKKworCisJQyBub3cgJWVzaSBpcyAwIHRvIDMgcmVwcmVzZW50aW5nIHJlc3BlY3RpdmVseSAxIHRvIDQgbGltYnMgbW9yZQorCisJTTRfaW5zdAklZWJ4LCAoJWVkaSkKKworCWRlY2wJJWVzaQorCWp6CUwoaW5wbGFjZV9maW5pc2hfb25lKQorCWpzCUwoaW5wbGFjZV9kb25lKQorCisJQyB0d28gb3IgdGhyZWUgbW9yZSBsaW1icworCisJbW92bAk0KCVlZHgpLCAlZWF4CisJbW92bAk4KCVlZHgpLCAlZWJ4CisJTTRfaW5zdAklZWF4LCA0KCVlZGkpCisJTTRfaW5zdAklZWJ4LCA4KCVlZGkpCisKKwlkZWNsCSVlc2kKKwltb3ZsCSQyLCAlZWN4CisKKwlqeglMKG5vcm1hbF9kb25lKQorCitMKGlucGxhY2VfZmluaXNoX29uZSk6CisJbW92bAk0KCVlZHgsJWVjeCw0KSwgJWVheAorCU00X2luc3QJJWVheCwgNCglZWRpLCVlY3gsNCkKKworTChpbnBsYWNlX2RvbmUpOgorCXBvcGwJJWVzaQorCXBvcGwJJWVkaQorCisJbW92bAkkMCwgJWVheAorCXBvcGwJJWVieAorCisJc2V0YwklYWwKKworCXJldAorCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNi9hb3JzbXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazYvYW9yc211bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWE5MmViCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazYvYW9yc211bF8xLmFzbQpAQCAtMCwwICsxLDM5MSBAQAorZG5sICBBTUQgSzYgbXBuX2FkZG11bF8xL21wbl9zdWJtdWxfMSAtLSBhZGQgb3Igc3VidHJhY3QgbXBuIG11bHRpcGxlLgorCitkbmwgIENvcHlyaWdodCAxOTk5LTIwMDMsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDCQkJICAgIGN5Y2xlcy9saW1iCitDIFA1CitDIFA2IG1vZGVsIDAtOCwxMC0xMgkJIDUuOTQKK0MgUDYgbW9kZWwgOSAgKEJhbmlhcykJCSA1LjUxCitDIFA2IG1vZGVsIDEzIChEb3RoYW4pCQkgNS41NworQyBQNCBtb2RlbCAwICAoV2lsbGFtZXR0ZSkKK0MgUDQgbW9kZWwgMSAgKD8pCitDIFA0IG1vZGVsIDIgIChOb3J0aHdvb2QpCitDIFA0IG1vZGVsIDMgIChQcmVzY290dCkKK0MgUDQgbW9kZWwgNCAgKE5vY29uYSkKK0MgQU1EIEs2CQkJNy42NS04LjUgKGRhdGEgZGVwZW5kZW50KQorQyBBTUQgSzcKK0MgQU1EIEs4CisKKworZG5sICBLNjogICAgICAgICAgIGxhcmdlIG11bHRpcGxpZXJzICBzbWFsbCBtdWx0aXBsaWVycworZG5sICBVTlJPTExfQ09VTlQgICAgY3ljbGVzL2xpbWIgICAgICAgY3ljbGVzL2xpbWIKK2RubCAgICAgICAgNCAgICAgICAgICAgICA5LjUgICAgICAgICAgICAgIDcuNzgKK2RubCAgICAgICAgOCAgICAgICAgICAgICA5LjAgICAgICAgICAgICAgIDcuNzgKK2RubCAgICAgICAxNiAgICAgICAgICAgICA4LjQgICAgICAgICAgICAgIDcuNjUKK2RubCAgICAgICAzMiAgICAgICAgICAgICA4LjQgICAgICAgICAgICAgIDguMgorZG5sCitkbmwgIE1heGltdW0gcG9zc2libGUgdW5yb2xsaW5nIHdpdGggdGhlIGN1cnJlbnQgY29kZSBpcyAzMi4KK2RubAorZG5sICBVbnJvbGxpbmcgdG8gMTYgbGltYnMvbG9vcCBtYWtlcyB0aGUgdW5yb2xsZWQgbG9vcCBmaXQgZXhhY3RseSBpbiBhIDI1NgorZG5sICBieXRlIGJsb2NrLCB3aGljaCBtaWdodCBleHBsYWluIHRoZSBnb29kIHNwZWVkIGF0IHRoYXQgdW5yb2xsaW5nLgorCitkZWZsaXQoVU5ST0xMX0NPVU5ULCAxNikKKworCitpZmRlZihgT1BFUkFUSU9OX2FkZG11bF8xJywgYAorCWRlZmluZShNNF9pbnN0LCAgICAgICAgYWRkbCkKKwlkZWZpbmUoTTRfZnVuY3Rpb25fMSwgIG1wbl9hZGRtdWxfMSkKKwlkZWZpbmUoTTRfZnVuY3Rpb25fMWMsIG1wbl9hZGRtdWxfMWMpCisnLGBpZmRlZihgT1BFUkFUSU9OX3N1Ym11bF8xJywgYAorCWRlZmluZShNNF9pbnN0LCAgICAgICAgc3VibCkKKwlkZWZpbmUoTTRfZnVuY3Rpb25fMSwgIG1wbl9zdWJtdWxfMSkKKwlkZWZpbmUoTTRfZnVuY3Rpb25fMWMsIG1wbl9zdWJtdWxfMWMpCisnLGBtNF9lcnJvcihgTmVlZCBPUEVSQVRJT05fYWRkbXVsXzEgb3IgT1BFUkFUSU9OX3N1Ym11bF8xCisnKScpJykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fYWRkbXVsXzEgbXBuX2FkZG11bF8xYyBtcG5fc3VibXVsXzEgbXBuX3N1Ym11bF8xYykKKworCitDIG1wX2xpbWJfdCBtcG5fYWRkbXVsXzEgKG1wX3B0ciBkc3QsIG1wX3NyY3B0ciBzcmMsIG1wX3NpemVfdCBzaXplLAorQyAgICAgICAgICAgICAgICAgICAgICAgICBtcF9saW1iX3QgbXVsdCk7CitDIG1wX2xpbWJfdCBtcG5fYWRkbXVsXzFjIChtcF9wdHIgZHN0LCBtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSwKK0MgICAgICAgICAgICAgICAgICAgICAgICAgIG1wX2xpbWJfdCBtdWx0LCBtcF9saW1iX3QgY2FycnkpOworQyBtcF9saW1iX3QgbXBuX3N1Ym11bF8xIChtcF9wdHIgZHN0LCBtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSwKK0MgICAgICAgICAgICAgICAgICAgICAgICAgbXBfbGltYl90IG11bHQpOworQyBtcF9saW1iX3QgbXBuX3N1Ym11bF8xYyAobXBfcHRyIGRzdCwgbXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUsCitDICAgICAgICAgICAgICAgICAgICAgICAgICBtcF9saW1iX3QgbXVsdCwgbXBfbGltYl90IGNhcnJ5KTsKK0MKK0MgVGhlIGphZGNsMCgpcyBpbiB0aGUgdW5yb2xsZWQgbG9vcCBtYWtlcyB0aGUgc3BlZWQgZGF0YSBkZXBlbmRlbnQuICBTbWFsbAorQyBtdWx0aXBsaWVycyAobW9zdCBzaWduaWZpY2FudCBmZXcgYml0cyBjbGVhcikgcmVzdWx0IGluIGZldyBjYXJyeSBiaXRzIGFuZAorQyBzcGVlZHMgdXAgdG8gNy42NSBjeWNsZXMvbGltYiBhcmUgYXR0YWluZWQuICBMYXJnZSBtdWx0aXBsaWVycyAobW9zdAorQyBzaWduaWZpY2FudCBmZXcgYml0cyBzZXQpIG1ha2UgdGhlIGNhcnJ5IGJpdHMgNTAvNTAgYW5kIGxlYWQgdG8gc29tZXRoaW5nCitDIG1vcmUgbGlrZSA4LjQgYy9sLiAgV2l0aCBhZGNsJ3MgYm90aCBvZiB0aGVzZSB3b3VsZCBiZSA5LjMgYy9sLgorQworQyBJdCdzIGltcG9ydGFudCB0aGF0IHRoZSBnYWlucyBmb3IgamFkY2wwIG9uIHNtYWxsIG11bHRpcGxpZXJzIGRvbid0IGNvbWUKK0MgYXQgdGhlIGNvc3Qgb2Ygc2xvd2luZyBkb3duIG90aGVyIGRhdGEuICBUZXN0cyBvbiB1bmlmb3JtbHkgZGlzdHJpYnV0ZWQKK0MgcmFuZG9tIGRhdGEsIGRlc2lnbmVkIHRvIGNvbmZvdW5kIGJyYW5jaCBwcmVkaWN0aW9uLCBzaG93IGFib3V0IGEgNyUKK0Mgc3BlZWQtdXAgdXNpbmcgamFkY2wwIG92ZXIgYWRjbCAoOC45MyB2ZXJzdXMgOS41NyBjeWNsZXMvbGltYiwgd2l0aCBhbGwKK0Mgb3ZlcmhlYWRzIGluY2x1ZGVkKS4KK0MKK0MgSW4gdGhlIHNpbXBsZSBsb29wLCBqYWRjbDAoKSBtZWFzdXJlcyBzbG93ZXIgdGhhbiBhZGNsICgxMS45LTE0LjcgdmVyc3VzCitDIDExLjAgY3ljbGVzL2xpbWIpLCBhbmQgaGVuY2UgaXNuJ3QgdXNlZC4KK0MKK0MgSW4gdGhlIHNpbXBsZSBsb29wLCBub3RlIHRoYXQgcnVubmluZyBlY3ggZnJvbSBuZWdhdGl2ZSB0byB6ZXJvIGFuZCB1c2luZworQyBpdCBhcyBhbiBpbmRleCBpbiB0aGUgdHdvIG1vdnMgd291bGRuJ3QgaGVscC4gIEl0IHdvdWxkIHNhdmUgb25lCitDIGluc3RydWN0aW9uICgyKmFkZGwrbG9vcCBiZWNvbWluZyBpbmNsK2pueiksIGJ1dCB0aGVyZSdzIG5vdGhpbmcgdW5wYWlyZWQKK0MgdGhhdCB3b3VsZCBiZSBjb2xsYXBzZWQgYnkgdGhpcy4KK0MKK0MgQXR0ZW1wdHMgYXQgYSBzaW1wbGVyIG1haW4gbG9vcCwgd2l0aCBsZXNzIHVucm9sbGluZywgaGF2ZW4ndCB5aWVsZGVkIG11Y2gKK0Mgc3VjY2VzcywgZ2VuZXJhbGx5IHJ1bm5pbmcgb3ZlciA5IGMvbC4KK0MKK0MKK0MgamFkY2wwCitDIC0tLS0tLQorQworQyBqYWRjbDAoKSBiZWluZyBmYXN0ZXIgdGhhbiBhZGNsICQwIHNlZW1zIHRvIGJlIGFuIGFydGlmYWN0IG9mIHR3byB0aGluZ3MsCitDIGZpcnN0bHkgdGhlIGluc3RydWN0aW9uIGRlY29kaW5nIGFuZCBzZWNvbmRseSB0aGUgZmFjdCB0aGF0IHRoZXJlJ3MgYQorQyBjYXJyeSBiaXQgZm9yIHRoZSBqYWRjbDAgb25seSBvbiBhdmVyYWdlIGFib3V0IDEvNCBvZiB0aGUgdGltZS4KK0MKK0MgVGhlIGNvZGUgaW4gdGhlIHVucm9sbGVkIGxvb3AgZGVjb2RlcyBzb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nLgorQworQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlIGN5Y2xlcworQwkJbXVsbAklZWJwICAgICAgICAgICAgICAgICAgICAyCitDCQlNNF9pbnN0CSVlc2ksIGRpc3AoJWVkaSkgICAgICAgIDEKK0MJCWFkY2wJJWVheCwgJWVjeCAgICAgICAgICAgICAgMgorQwkJbW92bAklZWR4LCAlZXNpICAgICAgICAgICAgXCAxCitDCQlqbmMJMWYgICAgICAgICAgICAgICAgICAgIC8KK0MJCWluY2wJJWVzaSAgICAgICAgICAgICAgICAgIFwgMQorQwkxOgltb3ZsCWRpc3AoJWVieCksICVlYXggICAgICAvCitDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLQorQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworQworQyBJbiBhIGJhY2stdG8tYmFjayBzdHlsZSB0ZXN0IHRoaXMgbWVhc3VyZXMgNyB3aXRoIHRoZSBqbmMgbm90IHRha2VuLCBvciA4CitDIHdpdGggaXQgdGFrZW4gKGJvdGggd2hlbiBjb3JyZWN0bHkgcHJlZGljdGVkKS4gIFRoaXMgaXMgb3Bwb3NpdGUgdG8gdGhlCitDIG1lYXN1cmVtZW50cyBzaG93aW5nIHNtYWxsIG11bHRpcGxpZXJzIHJ1bm5pbmcgZmFzdGVyIHRoYW4gbGFyZ2Ugb25lcy4KK0MgRG9uJ3QgcmVhbGx5IGtub3cgd2h5LgorQworQyBJdCdzIG5vdCBjbGVhciBob3cgbXVjaCBicmFuY2ggbWlzcHJlZGljdGlvbiBtaWdodCBiZSBjb3N0aW5nLiAgVGhlIEs2CitDIGRvY28gc2F5cyBpdCB3aWxsIGJlIDEgdG8gNCBjeWNsZXMsIGJ1dCBwcmVzdW1hYmx5IGl0J3MgbmVhciB0aGUgbG93IGVuZAorQyBvZiB0aGF0IHJhbmdlIHRvIGdldCB0aGUgbWVhc3VyZWQgcmVzdWx0cy4KK0MKK0MKK0MgSW4gdGhlIGNvZGUgdGhlIHR3byBjYXJyaWVzIGFyZSBtb3JlIG9yIGxlc3MgdGhlIHByZWNlZGluZyBtdWwgcHJvZHVjdCBhbmQKK0MgdGhlIGNhbGN1bGF0aW9uIGlzIHJvdWdobHkKK0MKK0MJeCp5ICsgdSpiK3YKK0MKK0Mgd2hlcmUgYj0yXjMyIGlzIHRoZSBzaXplIG9mIGEgbGltYiwgeCp5IGlzIHRoZSB0d28gY2FycnkgbGltYnMsIGFuZCB1IGFuZAorQyB2IGFyZSB0aGUgdHdvIGxpbWJzIGl0J3MgYWRkZWQgdG8gKGJlaW5nIHRoZSBsb3cgb2YgdGhlIG5leHQgbXVsLCBhbmQgYQorQyBsaW1iIGZyb20gdGhlIGRlc3RpbmF0aW9uKS4KK0MKK0MgVG8gZ2V0IGEgY2FycnkgcmVxdWlyZXMgeCp5K3UqYit2ID49IGJeMiwgd2hpY2ggaXMgdSpiK3YgPj0gYl4yLXgqeSwgYW5kCitDIHRoZXJlIGFyZSBiXjItKGJeMi14KnkpID0geCp5IG1hbnkgc3VjaCB2YWx1ZXMsIGdpdmluZyBhIHByb2JhYmlsaXR5IG9mCitDIHgqeS9iXjIuICBJZiB4LCB5LCB1IGFuZCB2IGFyZSByYW5kb20gYW5kIHVuaWZvcm1seSBkaXN0cmlidXRlZCBiZXR3ZWVuIDAKK0MgYW5kIGItMSwgdGhlbiB0aGUgdG90YWwgcHJvYmFiaWxpdHkgY2FuIGJlIHN1bW1lZCBvdmVyIHggYW5kIHksCitDCitDCSAxICAgIGItMSBiLTEgeCp5ICAgIDEgICAgYiooYi0xKSAgIGIqKGItMSkKK0MJLS0tICogc3VtIHN1bSAtLS0gPSAtLS0gKiAtLS0tLS0tICogLS0tLS0tLSA9IDEvNAorQyAgICAgICBiXjIgICB4PTAgeT0xIGJeMiAgIGJeNCAgICAgIDIgICAgICAgICAyCitDCitDIEFjdHVhbGx5IGl0J3MgYSB2ZXJ5IHRpbnkgYml0IGxlc3MgdGhhbiAxLzQgb2YgY291cnNlLiAgSWYgeSBpcyBmaXhlZCwKK0MgdGhlbiB0aGUgcHJvYmFiaWxpdHkgaXMgMS8yKnkvYiB0aHVzIHZhcnlpbmcgbGluZWFybHkgYmV0d2VlbiAwIGFuZCAxLzIuCisKKworaWZkZWYoYFBJQycsYAorZGVmbGl0KFVOUk9MTF9USFJFU0hPTEQsIDkpCisnLGAKK2RlZmxpdChVTlJPTExfVEhSRVNIT0xELCA2KQorJykKKworZGVmZnJhbWUoUEFSQU1fQ0FSUlksICAgICAyMCkKK2RlZmZyYW1lKFBBUkFNX01VTFRJUExJRVIsMTYpCitkZWZmcmFtZShQQVJBTV9TSVpFLCAgICAgIDEyKQorZGVmZnJhbWUoUEFSQU1fU1JDLCAgICAgICA4KQorZGVmZnJhbWUoUEFSQU1fRFNULCAgICAgICA0KQorCisJVEVYVAorCUFMSUdOKDMyKQorCitQUk9MT0dVRShNNF9mdW5jdGlvbl8xYykKKwlwdXNobAklZXNpCitkZWZsaXQoYEZSQU1FJyw0KQorCW1vdmwJUEFSQU1fQ0FSUlksICVlc2kKKwlqbXAJTChzdGFydF9uYykKK0VQSUxPR1VFKCkKKworUFJPTE9HVUUoTTRfZnVuY3Rpb25fMSkKKwlwdXNoCSVlc2kKK2RlZmxpdChgRlJBTUUnLDQpCisJeG9ybAklZXNpLCAlZXNpCUMgaW5pdGlhbCBjYXJyeQorCitMKHN0YXJ0X25jKToKKwltb3ZsCVBBUkFNX1NJWkUsICVlY3gKKwlwdXNobAklZWJ4CitkZWZsaXQoYEZSQU1FJyw4KQorCisJbW92bAlQQVJBTV9TUkMsICVlYngKKwlwdXNobAklZWRpCitkZWZsaXQoYEZSQU1FJywxMikKKworCWNtcGwJJFVOUk9MTF9USFJFU0hPTEQsICVlY3gKKwltb3ZsCVBBUkFNX0RTVCwgJWVkaQorCisJcHVzaGwJJWVicAorZGVmbGl0KGBGUkFNRScsMTYpCisJamFlCUwodW5yb2xsKQorCisKKwlDIHNpbXBsZSBsb29wCisKKwltb3ZsCVBBUkFNX01VTFRJUExJRVIsICVlYnAKKworTChzaW1wbGUpOgorCUMgZWF4CXNjcmF0Y2gKKwlDIGVieAlzcmMKKwlDIGVjeAljb3VudGVyCisJQyBlZHgJc2NyYXRjaAorCUMgZXNpCWNhcnJ5CisJQyBlZGkJZHN0CisJQyBlYnAJbXVsdGlwbGllcgorCisJbW92bAkoJWVieCksICVlYXgKKwlhZGRsCSQ0LCAlZWJ4CisKKwltdWxsCSVlYnAKKworCWFkZGwJJDQsICVlZGkKKwlhZGRsCSVlc2ksICVlYXgKKworCWFkY2wJJDAsICVlZHgKKworCU00X2luc3QJJWVheCwgLTQoJWVkaSkKKworCWFkY2wJJDAsICVlZHgKKworCW1vdmwJJWVkeCwgJWVzaQorCWxvb3AJTChzaW1wbGUpCisKKworCXBvcGwJJWVicAorCXBvcGwJJWVkaQorCisJcG9wbAklZWJ4CisJbW92bAklZXNpLCAlZWF4CisKKwlwb3BsCSVlc2kKKwlyZXQKKworCisKK0MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0MgVGhlIHVucm9sbGVkIGxvb3AgdXNlcyBhICJ0d28gY2FycnkgbGltYnMiIHNjaGVtZS4gIEF0IHRoZSB0b3Agb2YgdGhlIGxvb3AKK0MgdGhlIGNhcnJpZXMgYXJlIGVjeD1sbywgZXNpPWhpLCB0aGVuIHRoZXkgc3dhcCBmb3IgZWFjaCBsaW1iIHByb2Nlc3NlZC4KK0MgRm9yIHRoZSBjb21wdXRlZCBqdW1wIGFuIG9kZCBzaXplIG1lYW5zIHRoZXkgc3RhcnQgb25lIHdheSBhcm91bmQsIGFuIGV2ZW4KK0Mgc2l6ZSB0aGUgb3RoZXIuCitDCitDIFZBUl9KVU1QIGhvbGRzIHRoZSBjb21wdXRlZCBqdW1wIHRlbXBvcmFyaWx5IGJlY2F1c2UgdGhlcmUncyBub3QgZW5vdWdoCitDIHJlZ2lzdGVycyBhdCB0aGUgcG9pbnQgb2YgZG9pbmcgdGhlIG11bCBmb3IgdGhlIGluaXRpYWwgdHdvIGNhcnJ5IGxpbWJzLgorQworQyBUaGUgYWRkL2FkYyBmb3IgdGhlIGluaXRpYWwgY2FycnkgaW4gJWVzaSBpcyBuZWNlc3Nhcnkgb25seSBmb3IgdGhlCitDIG1wbl9hZGRtdWwvc3VibXVsXzFjIGVudHJ5IHBvaW50cy4gIER1cGxpY2F0aW5nIHRoZSBzdGFydHVwIGNvZGUgdG8KK0MgZWxpbWluYXRlIHRoaXMgZm9yIHRoZSBwbGFpbiBtcG5fYWRkL3N1Ym11bF8xIGRvZXNuJ3Qgc2VlbSBsaWtlIGEgZ29vZAorQyBpZGVhLgorCitkbmwgIG92ZXJsYXBwaW5nIHdpdGggcGFyYW1ldGVycyBhbHJlYWR5IGZldGNoZWQKK2RlZmluZShWQVJfQ09VTlRFUiwgYFBBUkFNX1NJWkUnKQorZGVmaW5lKFZBUl9KVU1QLCAgICBgUEFSQU1fRFNUJykKKworTCh1bnJvbGwpOgorCUMgZWF4CisJQyBlYngJc3JjCisJQyBlY3gJc2l6ZQorCUMgZWR4CisJQyBlc2kJaW5pdGlhbCBjYXJyeQorCUMgZWRpCWRzdAorCUMgZWJwCisKKwltb3ZsCSVlY3gsICVlZHgKKwlkZWNsCSVlY3gKKworCXN1YmwJJDIsICVlZHgKKwluZWdsCSVlY3gKKworCXNocmwJJFVOUk9MTF9MT0cyLCAlZWR4CisJYW5kbAkkVU5ST0xMX01BU0ssICVlY3gKKworCW1vdmwJJWVkeCwgVkFSX0NPVU5URVIKKwltb3ZsCSVlY3gsICVlZHgKKworCXNobGwJJDQsICVlZHgKKwluZWdsCSVlY3gKKworCUMgMTUgY29kZSBieXRlcyBwZXIgbGltYgoraWZkZWYoYFBJQycsYAorCWNhbGwJTChwaWNfY2FsYykKK0woaGVyZSk6CisnLGAKKwlsZWFsCUwoZW50cnkpICglZWR4LCVlY3gsMSksICVlZHgKKycpCisJbW92bAkoJWVieCksICVlYXgJCUMgc3JjIGxvdyBsaW1iCisKKwltb3ZsCVBBUkFNX01VTFRJUExJRVIsICVlYnAKKwltb3ZsCSVlZHgsIFZBUl9KVU1QCisKKwltdWxsCSVlYnAKKworCWFkZGwJJWVzaSwgJWVheAlDIGluaXRpYWwgY2FycnkgKGZyb20gXzFjKQorCWphZGNsMCgJJWVkeCkKKworCisJbGVhbAk0KCVlYngsJWVjeCw0KSwgJWVieAorCW1vdmwJJWVkeCwgJWVzaQlDIGhpZ2ggY2FycnkKKworCW1vdmwJVkFSX0pVTVAsICVlZHgKKwlsZWFsCSglZWRpLCVlY3gsNCksICVlZGkKKworCXRlc3RsCSQxLCAlZWN4CisJbW92bAklZWF4LCAlZWN4CUMgbG93IGNhcnJ5CisKKwlqeglMKG5vc3dhcCkKKwltb3ZsCSVlc2ksICVlY3gJQyBoaWdoLGxvdyBjYXJyeSBvdGhlciB3YXkgYXJvdW5kCisKKwltb3ZsCSVlYXgsICVlc2kKK0wobm9zd2FwKToKKworCWptcAkqJWVkeAorCisKK2lmZGVmKGBQSUMnLGAKK0wocGljX2NhbGMpOgorCUMgU2VlIG1wbi94ODYvUkVBRE1FIGFib3V0IG9sZCBnYXMgYnVncworCWxlYWwJKCVlZHgsJWVjeCwxKSwgJWVkeAorCWFkZGwJJEwoZW50cnkpLUwoaGVyZSksICVlZHgKKwlhZGRsCSglZXNwKSwgJWVkeAorCXJldF9pbnRlcm5hbAorJykKKworCitDIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJQUxJR04oMzIpCitMKHRvcCk6CitkZWZsaXQoYEZSQU1FJywxNikKKwlDIGVheAlzY3JhdGNoCisJQyBlYngJc3JjCisJQyBlY3gJY2FycnkgbG8KKwlDIGVkeAlzY3JhdGNoCisJQyBlc2kJY2FycnkgaGkKKwlDIGVkaQlkc3QKKwlDIGVicAltdWx0aXBsaWVyCisJQworCUMgMTUgY29kZSBieXRlcyBwZXIgbGltYgorCisJbGVhbAlVTlJPTExfQllURVMoJWVkaSksICVlZGkKKworTChlbnRyeSk6Citmb3Jsb29wKGBpJywgMCwgVU5ST0xMX0NPVU5ULzItMSwgYAorCWRlZmxpdChgZGlzcDAnLCBldmFsKDIqaSo0KSkKKwlkZWZsaXQoYGRpc3AxJywgZXZhbChkaXNwMCArIDQpKQorCitaZGlzcCgJbW92bCwJZGlzcDAsKCVlYngpLCAlZWF4KQorCW11bGwJJWVicAorWmRpc3AoCU00X2luc3QsJWVjeCwgZGlzcDAsKCVlZGkpKQorCWFkY2wJJWVheCwgJWVzaQorCW1vdmwJJWVkeCwgJWVjeAorCWphZGNsMCgJJWVjeCkKKworCW1vdmwJZGlzcDEoJWVieCksICVlYXgKKwltdWxsCSVlYnAKKwlNNF9pbnN0CSVlc2ksIGRpc3AxKCVlZGkpCisJYWRjbAklZWF4LCAlZWN4CisJbW92bAklZWR4LCAlZXNpCisJamFkY2wwKAklZXNpKQorJykKKworCWRlY2wJVkFSX0NPVU5URVIKKworCWxlYWwJVU5ST0xMX0JZVEVTKCVlYngpLCAlZWJ4CisJam5zCUwodG9wKQorCisKKwlwb3BsCSVlYnAKKwlNNF9pbnN0CSVlY3gsIFVOUk9MTF9CWVRFUyglZWRpKQorCisJcG9wbAklZWRpCisJbW92bAklZXNpLCAlZWF4CisKKwlwb3BsCSVlYngKKwlqYWRjbDAoCSVlYXgpCisKKwlwb3BsCSVlc2kKKwlyZXQKKworRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazYvY3Jvc3MucGwgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNi9jcm9zcy5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mYzkyMWE1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazYvY3Jvc3MucGwKQEAgLTAsMCArMSwxODIgQEAKKyMhIC91c3IvYmluL3BlcmwKKworIyBDb3B5cmlnaHQgMjAwMCwgMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKyMKKyMgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorIworIyAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisjICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyMgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyAgb3IKKyMKKyMgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgICAgICBsYXRlciB2ZXJzaW9uLgorIworIyAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKyMKKyMgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgIGZvciBtb3JlIGRldGFpbHMuCisjCisjICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCisjICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCisjICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworIyBVc2FnZTogY3Jvc3MucGwgW2ZpbGVuYW1lLm9dLi4uCisjCisjIFByb2R1Y2UgYW4gYW5ub3RhdGVkIGRpc2Fzc2VtYmx5IG9mIHRoZSBnaXZlbiBvYmplY3QgZmlsZXMsIGluZGljYXRpbmcKKyMgY2VydGFpbiBjb2RlIGFsaWdubWVudCBhbmQgYWRkcmVzc2luZyBtb2RlIHByb2JsZW1zIGFmZmxpY3RpbmcgSzYgY2hpcHMuCisjICJaWiIgaXMgdXNlZCBvbiBhbGwgYW5ub3RhdGlvbnMsIHNvIHRoaXMgY2FuIGJlIHNlYXJjaGVkIGZvci4KKyMKKyMgV2l0aCBubyBhcmd1bWVudHMsIGFsbCAubyBmaWxlcyBjb3JyZXNwb25kaW5nIHRvIC5hc20gZmlsZXMgYXJlIHByb2Nlc3NlZC4KKyMgVGhpcyBpcyBnb29kIGluIHRoZSBtcG4gb2JqZWN0IGRpcmVjdG9yeSBvZiBhIGs2Ki0qLSogYnVpbGQuCisjCisjIENvZGUgYWxpZ25tZW50cyBvZiA4IGJ5dGVzIG9yIG1vcmUgYXJlIGhhbmRsZWQuICBXaGVuIDMyIGlzIHVzZWQsIGNhY2hlCisjIGxpbmUgYm91bmRhcmllcyB3aWxsIGZhbGwgaW4gYXQgb2Zmc2V0cyAweDIwLDB4NDAsZXRjIGFuZCBwcm9ibGVtcyBhcmUKKyMgZmxhZ2dlZCBhdCB0aG9zZSBsb2NhdGlvbnMuICBXaGVuIDE2IGlzIHVzZWQsIHRoZSBsaW5lIGJvdW5kYXJpZXMgY2FuIGFsc28KKyMgZmFsbCBhdCBvZmZzZXRzIDB4MTAsMHgzMCwweDUwLGV0YywgZGVwZW5kaW5nIHdoZXJlIHRoZSBmaWxlIGlzIGxvYWRlZCwgc28KKyMgcHJvYmxlbXMgYXJlIGlkZW50aWZpZWQgdGhlcmUgdG9vLiAgTGlrZXdpc2Ugd2hlbiA4IGJ5dGUgYWxpZ25tZW50IGlzIHVzZWQKKyMgcHJvYmxlbXMgYXJlIGZsYWdnZWQgYWRkaXRpb25hbGx5IGF0IDB4MDgsMHgxOCwweDI4LGV0Yy4KKyMKKyMgVXN1YWxseSAzMiBieXRlIGFsaWdubWVudCBpcyB1c2VkIGZvciBrNiByb3V0aW5lcywgYnV0IGxlc3MgaXMgY2VydGFpbmx5CisjIHBvc3NpYmxlIGlmIHRocm91Z2ggZ29vZCBsdWNrLCBvciBhIGxpdHRsZSB0d2Vha2luZywgY2FjaGUgbGluZSBjcm9zc2luZworIyBwcm9ibGVtcyBjYW4gYmUgYXZvaWRlZCBhdCB0aGUgZXh0cmEgbG9jYXRpb25zLgorIworIyBCdWdzOgorIworIyBJbnN0cnVjdGlvbnMgd2l0aG91dCBtb2Qvcm0gYnl0ZXMgb3Igd2hpY2ggYXJlIGFscmVhZHkgdmVjdG9yIGRlY29kZWQgYXJlCisjIHVuYWZmZWN0ZWQgYnkgY2FjaGUgbGluZSBib3VuZGFyeSBjcm9zc2luZywgYnV0IG5vdCBhbGwgb2YgdGhlc2UgaGF2ZSB5ZXQKKyMgYmVlbiBwdXQgaW4gYXMgZXhjZXB0aW9ucy4gIEFsbCB0aGF0IG9jY3VyIGluIHByYWN0aWNlIGluIEdNUCBhcmUgcHJlc2VudAorIyB0aG91Z2guCisjCisjIFRoZXJlJ3Mgbm8gbWVzc2FnZXMgZm9yIHVzaW5nIHRoZSB2ZWN0b3IgZGVjb2RlZCBhZGRyZXNzaW5nIG1vZGUgKCVlc2kpLAorIyBidXQgdGhhdCdzIGVhc3kgdG8gYXZvaWQgd2hlbiBjb2RpbmcuCisjCisjIEZ1dHVyZToKKyMKKyMgV2FybiBhYm91dCBqdW1wIHRhcmdldHMgdGhhdCBhcmUgcG9vcmx5IGFsaWduZWQgKGxlc3MgdGhhbiAyIGluc3RydWN0aW9ucworIyBiZWZvcmUgYSBjYWNoZSBsaW5lIGJvdW5kYXJ5KS4KKwordXNlIHN0cmljdDsKKworc3ViIGRpc2Fzc2VtYmxlIHsKKyAgICBteSAoJGZpbGUpID0gQF87CisgICAgbXkgKCRhZGRyLCRiMSwkYjIsJGIzLCAkcHJlZml4LCRvcGNvZGUsJG1vZHJtKTsKKyAgICBteSAkYWxpZ247CisKKyAgICBvcGVuIChJTiwgIm9iamR1bXAgLVNyZmggJGZpbGUgfCIpCisJfHwgZGllICJDYW5ub3Qgb3BlbiBwaXBlIGZyb20gb2JqZHVtcFxuIjsKKyAgICB3aGlsZSAoPElOPikgeworCXByaW50OworCisJaWYgKC9eWyBcdF0qWzAtOV0rWyBcdF0rXC50ZXh0WyBcdF0vICYmIC8yXCpcKihbMC05XSspJC8pIHsKKwkgICAgJGFsaWduID0gMSA8PCAkMTsKKwkgICAgaWYgKCRhbGlnbiA8IDgpIHsKKwkJcHJpbnQgIlpaIGNyb3NzLnBsIGNhbm5vdCBoYW5kbGUgYWxpZ25tZW50IDwgMioqM1xuIjsKKwkJJGFsaWduID0gOAorCSAgICB9CisJfQorCisJaWYgKC9eWyBcdF0qKFswLTlhLWZdKik6WyBcdF0qKFswLTlhLWZdKylbIFx0XSsoWzAtOWEtZl0rKVsgXHRdKyhbMC05YS1mXSspLykgeworCSAgICAoJGFkZHIsJGIxLCRiMiwkYjMpID0gKCQxLCQyLCQzLCQ0KTsKKworCX0gZWxzaWYgKC9eWyBcdF0qKFswLTlhLWZdKik6WyBcdF0qKFswLTlhLWZdKylbIFx0XSsoWzAtOWEtZl0rKS8pIHsKKwkgICAgKCRhZGRyLCRiMSwkYjIsJGIzKSA9ICgkMSwkMiwkMywnJyk7CisKKwl9IGVsc2lmICgvXlsgXHRdKihbMC05YS1mXSopOlsgXHRdKihbMC05YS1mXSspLykgeworCSAgICAoJGFkZHIsJGIxLCRiMiwkYjMpID0gKCQxLCQyLCcnLCcnKTsKKworCX0gZWxzZSB7CisJICAgIG5leHQ7CisJfQorCisJaWYgKCRiMSA9fiAvMGYvKSB7CisJICAgICRwcmVmaXggPSAkYjE7CisJICAgICRvcGNvZGUgPSAkYjI7CisJICAgICRtb2RybSA9ICRiMzsKKwl9IGVsc2UgeworCSAgICAkcHJlZml4ID0gJyc7CisJICAgICRvcGNvZGUgPSAkYjE7CisJICAgICRtb2RybSA9ICRiMjsKKwl9CisKKwkjIG1vZHJtIG9mIHRoZSBmb3JtIDAwLXh4eC0xMDAgd2l0aCBhbiAwRiBwcmVmaXggaXMgdGhlIHByb2JsZW0gY2FzZQorCSMgZm9yIEs2IGFuZCBwcmUtQ1hUIEs2LTIKKwlpZiAoJHByZWZpeCA9fiAvMGYvCisJICAgICYmICRvcGNvZGUgIX4gL144LyAgICAgICAgICMgamNvbmQgZGlzcDMyCisJICAgICYmICRtb2RybSA9fiAvXlswLTNdWzRjXS8pIHsKKwkgICAgcHJpbnQgIlpaICgkZmlsZSkgPjMgYnl0ZXMgdG8gZGV0ZXJtaW5lIGluc3RydWN0aW9uIGxlbmd0aCBbSzZdXG4iOworCX0KKworCSMgd2l0aCBqdXN0IGFuIG9wY29kZSwgc3RhcnRpbmcgMWYgbW9kIDIwaAorCWlmICgoJGFsaWduPT0zMiAmJiAkYWRkciA9fiAvWzEzNTc5YmRmXWYkLworCSAgICAgfHwgJGFsaWduPT0xNiAmJiAkYWRkciA9fiAvZiQvCisJICAgICB8fCAkYWxpZ249PTggJiYgJGFkZHIgPX4gL1s3Zl0kLykKKwkgICAgJiYgJHByZWZpeCAhfiAvMGYvCisJICAgICYmICRvcGNvZGUgIX4gLzFbMDEyMzQ1XS8gIyBhZGMKKwkgICAgJiYgJG9wY29kZSAhfiAvMVs4OWFiY2RdLyAjIHNiYgorCSAgICAmJiAkb3Bjb2RlICF+IC9eNC8gICAgICAgICMgaW5jL2RlYyByZWcKKwkgICAgJiYgJG9wY29kZSAhfiAvXjUvICAgICAgICAjIHB1c2gvcG9wIHJlZworCSAgICAmJiAkb3Bjb2RlICF+IC82OC8gICAgICAgICMgcHVzaCAkaW1tMzIKKwkgICAgJiYgJG9wY29kZSAhfiAvXjcvICAgICAgICAjIGpjb25kIGRpc3A4CisJICAgICYmICRvcGNvZGUgIX4gL2FbODldLyAgICAgIyB0ZXN0K2ltbQorCSAgICAmJiAkb3Bjb2RlICF+IC9hW2EtZl0vICAgICMgc3Rvcy9sb2RzL3NjYXMKKwkgICAgJiYgJG9wY29kZSAhfiAvYjgvICAgICAgICAjIG1vdmwgJGltbTMyLCVlYXgKKwkgICAgJiYgJG9wY29kZSAhfiAvZFswMTIzXS8gICAjIHJjbAorCSAgICAmJiAkb3Bjb2RlICF+IC9lWzAxMjNdLyAgICMgbG9vcC9sb29wei9sb29wbnovamN4egorCSAgICAmJiAkb3Bjb2RlICF+IC9lOC8gICAgICAgICMgY2FsbCBkaXNwMzIKKwkgICAgJiYgJG9wY29kZSAhfiAvZVs5Yl0vICAgICAjIGptcCBkaXNwMzIvZGlzcDgKKwkgICAgJiYgJG9wY29kZSAhfiAvZls4OWFiY2RdLyAjIGNsYyxzdGMsY2xpLHN0aSxjbGQsc3RkCisJICAgICYmICEoJG9wY29kZSA9fiAvZls2N10vICAgICAgICAgICMgZ3JwIDEKKwkJICYmICRtb2RybSA9fiAvXlsyMzY3YWJlZl0vKSAjIG11bCwgaW11bCwgZGl2LCBpZGl2CisJICAgICYmICRtb2RybSAhfiAvXiQvKSB7CisJICAgIHByaW50ICJaWiAoJGZpbGUpIG9wY29kZS9tb2RybSBjcm9zcyAzMi1ieXRlIGJvdW5kYXJ5XG4iOworCX0KKworCSMgd2l0aCBhbiAwRiBwcmVmaXgsIGFueXRoaW5nIHN0YXJ0aW5nIGF0IDFmIG1vZCAyMGgKKwlpZiAoKCRhbGlnbj09MzIgJiYgJGFkZHIgPX4gL1sxMzU3OWJkZl1bZl0kLworCSAgICAgfHwgJGFsaWduPT0xNiAmJiAkYWRkciA9fiAvZiQvCisJICAgICB8fCAkYWxpZ249PTggJiYgJGFkZHIgPX4gL1s3Zl0kLykKKwkgICAgJiYgJHByZWZpeCA9fiAvMGYvCisJICAgICYmICRvcGNvZGUgIX4gL2FmLyAgICAgICAgIyBpbXVsCisJICAgICYmICRvcGNvZGUgIX4gL2FbNDVdLyAgICAgIyBzaGxkbAorCSAgICAmJiAkb3Bjb2RlICF+IC9hW2NkXS8gICAgICMgc2hyZGwKKwkgICAgKSB7CisJICAgIHByaW50ICJaWiAoJGZpbGUpIHByZWZpeC9vcGNvZGUgY3Jvc3MgMzItYnl0ZSBib3VuZGFyeVxuIjsKKwl9CisKKwkjIHdpdGggYW4gMEYgcHJlZml4LCBhbnl0aGluZyB3aXRoIG1vZC9ybSBzdGFydGluZyBhdCAxZSBtb2QgMjBoCisJaWYgKCgkYWxpZ249PTMyICYmICRhZGRyID1+IC9bMTM1NzliZGZdW2VdJC8KKwkgICAgIHx8ICRhbGlnbj09MTYgJiYgJGFkZHIgPX4gL1tlXSQvCisJICAgICB8fCAkYWxpZ249PTggJiYgJGFkZHIgPX4gL1s2ZV0kLykKKwkgICAgJiYgJHByZWZpeCA9fiAvMGYvCisJICAgICAmJiAkb3Bjb2RlICF+IC9eOC8gICAgICAgICMgamNvbmQgZGlzcDMyCisJICAgICAmJiAkb3Bjb2RlICF+IC9hZi8gICAgICAgICMgaW11bGwgcmVnLHJlZworCSAgICAgJiYgJG9wY29kZSAhfiAvYVs0NV0vICAgICAjIHNobGRsCisJICAgICAmJiAkb3Bjb2RlICF+IC9hW2NkXS8gICAgICMgc2hyZGwKKwkgICAgJiYgJG1vZHJtICF+IC9eJC8pIHsKKwkgICAgcHJpbnQgIlpaICgkZmlsZSkgcHJlZml4L29wY29kZS9tb2RybSBjcm9zcyAzMi1ieXRlIGJvdW5kYXJ5XG4iOworCX0KKyAgICB9CisgICAgY2xvc2UgSU4gfHwgZGllICJFcnJvciBmcm9tIG9iamR1bXAgKG9yIG9iamR1bXAgbm90IGF2YWlsYWJsZSlcbiI7Cit9CisKKworbXkgQGZpbGVzOworaWYgKCQjQVJHViA+PSAwKSB7CisgICAgQGZpbGVzID0gQEFSR1Y7Cit9IGVsc2UgeworICAgIEBmaWxlcyA9IGdsb2IgIiouYXNtIjsKKyAgICBtYXAge3MvLmFzbS8uby99IEBmaWxlczsKK30KKworZm9yZWFjaCAoQGZpbGVzKSAgeworICAgIGRpc2Fzc2VtYmxlKCRfKTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s2L2RpdnJlbV8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s2L2RpdnJlbV8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGNlYTRmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazYvZGl2cmVtXzEuYXNtCkBAIC0wLDAgKzEsMjAzIEBACitkbmwgIEFNRCBLNiBtcG5fZGl2cmVtXzEgLS0gbXBuIGJ5IGxpbWIgZGl2aXNpb24uCisKK2RubCAgQ29weXJpZ2h0IDE5OTktMjAwMywgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MgSzY6IDIwIGN5Y2xlcy9saW1iCisKKworQyBtcF9saW1iX3QgbXBuX2RpdnJlbV8xIChtcF9wdHIgZHN0LCBtcF9zaXplX3QgeHNpemUsCitDICAgICAgICAgICAgICAgICAgICAgICAgIG1wX3NyY3B0ciBzcmMsIG1wX3NpemVfdCBzaXplLCBtcF9saW1iX3QgZGl2aXNvcik7CitDIG1wX2xpbWJfdCBtcG5fZGl2cmVtXzFjIChtcF9wdHIgZHN0LCBtcF9zaXplX3QgeHNpemUsCitDICAgICAgICAgICAgICAgICAgICAgICAgICBtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSwgbXBfbGltYl90IGRpdmlzb3IsCitDICAgICAgICAgICAgICAgICAgICAgICAgICBtcF9saW1iX3QgY2FycnkpOworQworQyBUaGUgY29kZSBoZXJlIGlzIGJhc2ljYWxseSB0aGUgc2FtZSBhcyBtcG4veDg2L2RpdnJlbV8xLmFzbSwgYnV0IHVzZXMgbG9vcAorQyBpbnN0ZWFkIG9mIGRlY2wram56LCBzaW5jZSBpdCBjb21lcyBvdXQgMiBjeWNsZXMvbGltYiBmYXN0ZXIuCitDCitDIEEgdGVzdCBpcyBkb25lIHRvIHNlZSBpZiB0aGUgaGlnaCBsaW1iIGlzIGxlc3MgdGhhbiB0aGUgZGl2aXNvciwgYW5kIGlmIHNvCitDIG9uZSBsZXNzIGRpdiBpcyBkb25lLiAgQSBkaXYgaXMgMjAgY3ljbGVzLCBzbyBhc3N1bWluZyBoaWdoPGRpdmlzb3IgYWJvdXQKK0MgaGFsZiB0aGUgdGltZSwgdGhlbiB0aGlzIHRlc3Qgc2F2ZXMgaGFsZiB0aGF0IGFtb3VudC4gIFRoZSBicmFuY2gKK0MgbWlzcHJlZGljdGlvbiBwZW5hbHR5IGlzIGxlc3MgdGhhbiB0aGF0LgorQworQyBCYWNrLXRvLWJhY2sgZGl2IGluc3RydWN0aW9ucyBydW4gYXQgMjAgY3ljbGVzLCB0aGUgc2FtZSBhcyB0aGUgbG9vcCBoZXJlLAorQyBzbyBpdCBzZWVtcyB0aGVyZSdzIG5vdGhpbmcgdG8gZ2FpbiBieSByZWFycmFuZ2luZyB0aGUgbG9vcC4gIFBhaXJpbmcgdGhlCitDIG1vdiBhbmQgbG9vcCBpbnN0cnVjdGlvbnMgd2FzIGZvdW5kIHRvIGdhaW4gbm90aGluZy4KK0MKK0MgRW5oYW5jZW1lbnRzOgorQworQyBUaGUgbG93LWxhdGVuY3kgSzYgbXVsdGlwbHkgbWlnaHQgYmUgdGhvdWdodCB0byBzdWl0IGEgbXVsLWJ5LWludmVyc2UsIGJ1dAorQyB0aGF0IGFsZ29yaXRobSBoYXMgYmVlbiBmb3VuZCB0byBzdWZmZXIgZnJvbSB0aGUgcmVsYXRpdmVseSBwb29yIGNhcnJ5CitDIGhhbmRsaW5nIG9uIEs2IGFuZCB0b28gbWFueSBhdXhpbGlhcnkgaW5zdHJ1Y3Rpb25zLiAgVGhlIGZyYWN0aW9uYWwgcGFydAorQyBob3dldmVyIGNvdWxkIGJlIGRvbmUgYXQgYWJvdXQgMTMgYy9sLCBpZiBpdCBtYXR0ZXJlZCBlbm91Z2guCisKK2RlZmZyYW1lKFBBUkFNX0NBUlJZLCAgMjQpCitkZWZmcmFtZShQQVJBTV9ESVZJU09SLDIwKQorZGVmZnJhbWUoUEFSQU1fU0laRSwgICAxNikKK2RlZmZyYW1lKFBBUkFNX1NSQywgICAgMTIpCitkZWZmcmFtZShQQVJBTV9YU0laRSwgIDgpCitkZWZmcmFtZShQQVJBTV9EU1QsICAgIDQpCisKKwlURVhUCisKKwlBTElHTigzMikKK1BST0xPR1VFKG1wbl9kaXZyZW1fMWMpCitkZWZsaXQoYEZSQU1FJywwKQorCisJbW92bAlQQVJBTV9TSVpFLCAlZWN4CisJcHVzaGwJJWVkaQkJRlJBTUVfcHVzaGwoKQorCisJbW92bAlQQVJBTV9TUkMsICVlZGkKKwlwdXNobAklZXNpCQlGUkFNRV9wdXNobCgpCisKKwltb3ZsCVBBUkFNX0RJVklTT1IsICVlc2kKKwlwdXNobAklZWJ4CQlGUkFNRV9wdXNobCgpCisKKwltb3ZsCVBBUkFNX0RTVCwgJWVieAorCXB1c2hsCSVlYnAJCUZSQU1FX3B1c2hsKCkKKworCW1vdmwJUEFSQU1fWFNJWkUsICVlYnAKKwlvcmwJJWVjeCwgJWVjeAkJQyBzaXplCisKKwltb3ZsCVBBUkFNX0NBUlJZLCAlZWR4CisJanoJTChmcmFjdGlvbikJCUMgaWYgc2l6ZT09MAorCisJbGVhbAktNCglZWJ4LCVlYnAsNCksICVlYngJQyBkc3Qgb25lIGxpbWIgYmVsb3cgaW50ZWdlciBwYXJ0CisJam1wCUwoaW50ZWdlcl90b3ApCisKK0VQSUxPR1VFKCkKKworCisJQUxJR04oMTYpCitQUk9MT0dVRShtcG5fZGl2cmVtXzEpCitkZWZsaXQoYEZSQU1FJywwKQorCisJbW92bAlQQVJBTV9TSVpFLCAlZWN4CisJcHVzaGwJJWVkaQkJRlJBTUVfcHVzaGwoKQorCisJbW92bAlQQVJBTV9TUkMsICVlZGkKKwlwdXNobAklZXNpCQlGUkFNRV9wdXNobCgpCisKKwltb3ZsCVBBUkFNX0RJVklTT1IsICVlc2kKKwlvcmwJJWVjeCwlZWN4CQlDIHNpemUKKworCWp6CUwoc2l6ZV96ZXJvKQorCXB1c2hsCSVlYngJCUZSQU1FX3B1c2hsKCkKKworCW1vdmwJLTQoJWVkaSwlZWN4LDQpLCAlZWF4CUMgc3JjIGhpZ2ggbGltYgorCXhvcmwJJWVkeCwgJWVkeAorCisJbW92bAlQQVJBTV9EU1QsICVlYngKKwlwdXNobAklZWJwCQlGUkFNRV9wdXNobCgpCisKKwltb3ZsCVBBUkFNX1hTSVpFLCAlZWJwCisJY21wbAklZXNpLCAlZWF4CisKKwlsZWFsCS00KCVlYngsJWVicCw0KSwgJWVieAlDIGRzdCBvbmUgbGltYiBiZWxvdyBpbnRlZ2VyIHBhcnQKKwlqYWUJTChpbnRlZ2VyX2VudHJ5KQorCisKKwlDIGhpZ2g8ZGl2aXNvciwgc28gaGlnaCBvZiBkc3QgaXMgemVybywgYW5kIGF2b2lkIG9uZSBkaXYKKworCW1vdmwJJWVkeCwgKCVlYngsJWVjeCw0KQorCWRlY2wJJWVjeAorCisJbW92bAklZWF4LCAlZWR4CisJanoJTChmcmFjdGlvbikKKworCitMKGludGVnZXJfdG9wKToKKwlDIGVheAlzY3JhdGNoIChxdW90aWVudCkKKwlDIGVieAlkc3QrNCp4c2l6ZS00CisJQyBlY3gJY291bnRlcgorCUMgZWR4CXNjcmF0Y2ggKHJlbWFpbmRlcikKKwlDIGVzaQlkaXZpc29yCisJQyBlZGkJc3JjCisJQyBlYnAJeHNpemUKKworCW1vdmwJLTQoJWVkaSwlZWN4LDQpLCAlZWF4CitMKGludGVnZXJfZW50cnkpOgorCisJZGl2bAklZXNpCisKKwltb3ZsCSVlYXgsICglZWJ4LCVlY3gsNCkKKwlsb29wCUwoaW50ZWdlcl90b3ApCisKKworTChmcmFjdGlvbik6CisJb3JsCSVlYnAsICVlY3gKKwlqeglMKGRvbmUpCisKKwltb3ZsCVBBUkFNX0RTVCwgJWVieAorCisKK0woZnJhY3Rpb25fdG9wKToKKwlDIGVheAlzY3JhdGNoIChxdW90aWVudCkKKwlDIGVieAlkc3QKKwlDIGVjeAljb3VudGVyCisJQyBlZHgJc2NyYXRjaCAocmVtYWluZGVyKQorCUMgZXNpCWRpdmlzb3IKKwlDIGVkaQorCUMgZWJwCisKKwl4b3JsCSVlYXgsICVlYXgKKworCWRpdmwJJWVzaQorCisJbW92bAklZWF4LCAtNCglZWJ4LCVlY3gsNCkKKwlsb29wCUwoZnJhY3Rpb25fdG9wKQorCisKK0woZG9uZSk6CisJcG9wbAklZWJwCisJbW92bAklZWR4LCAlZWF4CisJcG9wbAklZWJ4CisJcG9wbAklZXNpCisJcG9wbAklZWRpCisJcmV0CisKKworTChzaXplX3plcm8pOgorZGVmbGl0KGBGUkFNRScsOCkKKwltb3ZsCVBBUkFNX1hTSVpFLCAlZWN4CisJeG9ybAklZWF4LCAlZWF4CisKKwltb3ZsCVBBUkFNX0RTVCwgJWVkaQorCisJY2xkCUMgYmV0dGVyIHNhZmUgdGhhbiBzb3JyeSwgc2VlIG1wbi94ODYvUkVBRE1FCisKKwlyZXAKKwlzdG9zbAorCisJcG9wbAklZXNpCisJcG9wbAklZWRpCisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNi9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNi9nbXAtbXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAzZjFiMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s2L2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDE2NiBAQAorLyogQU1EIEs2IGdtcC1tcGFyYW0uaCAtLSBDb21waWxlci9tYWNoaW5lIHBhcmFtZXRlciBoZWFkZXIgZmlsZS4KKworQ29weXJpZ2h0IDE5OTEsIDE5OTMsIDE5OTQsIDIwMDAtMjAwNCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNkZWZpbmUgR01QX0xJTUJfQklUUyAzMgorI2RlZmluZSBHTVBfTElNQl9CWVRFUyA0CisKKworLyogNDUwTUh6IEs2LTIgKi8KKworI2RlZmluZSBNT0RfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBNT0RfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICBNUF9TSVpFX1RfTUFYICAvKiBuZXZlciAqLworI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICA0MQorI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAzMgorI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAgMworI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICAgICAgMAorI2RlZmluZSBQUkVJTlZfTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgIDEyOAorI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBESVZFWEFDVF8xX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIEJNT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisKKyNkZWZpbmUgTVVMX1RPT00yMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgTVVMX1RPT00zM19USFJFU0hPTEQgICAgICAgICAgICAgICAgNjkKKyNkZWZpbmUgTVVMX1RPT000NF9USFJFU0hPTEQgICAgICAgICAgICAgICAxMDYKKyNkZWZpbmUgTVVMX1RPT002SF9USFJFU0hPTEQgICAgICAgICAgICAgICAxNTcKKyNkZWZpbmUgTVVMX1RPT004SF9USFJFU0hPTEQgICAgICAgICAgICAgICAxOTkKKworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT000M19USFJFU0hPTEQgICAgICA3MworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT001M19USFJFU0hPTEQgICAgICA2OQorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT001M19USFJFU0hPTEQgICAgICA2NQorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT002M19USFJFU0hPTEQgICAgICA2NAorCisjZGVmaW5lIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgOTcKKyNkZWZpbmUgU1FSX1RPT000X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNDMKKyNkZWZpbmUgU1FSX1RPT002X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyMjIKKyNkZWZpbmUgU1FSX1RPT004X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyNzIKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxMworI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxNworCisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgNDc2ICAvKiBrID0gNSAqLworI2RlZmluZSBNVUxfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgNDc2LCA1fSwgeyAgICAgMTcsIDZ9LCB7ICAgICAgOSwgNX0sIHsgICAgIDE5LCA2fSwgXAorICAgIHsgICAgIDExLCA1fSwgeyAgICAgMjMsIDZ9LCB7ICAgICAxNywgN30sIHsgICAgICA5LCA2fSwgXAorICAgIHsgICAgIDE5LCA3fSwgeyAgICAgMTEsIDZ9LCB7ICAgICAyMywgN30sIHsgICAgIDEzLCA2fSwgXAorICAgIHsgICAgIDI3LCA3fSwgeyAgICAgMTUsIDZ9LCB7ICAgICAzMSwgN30sIHsgICAgIDE3LCA2fSwgXAorICAgIHsgICAgIDM1LCA3fSwgeyAgICAgMjEsIDh9LCB7ICAgICAxMSwgN30sIHsgICAgIDI3LCA4fSwgXAorICAgIHsgICAgIDE1LCA3fSwgeyAgICAgMzUsIDh9LCB7ICAgICAxOSwgN30sIHsgICAgIDM5LCA4fSwgXAorICAgIHsgICAgIDIzLCA3fSwgeyAgICAgNDcsIDh9LCB7ICAgICAyNywgOX0sIHsgICAgIDE1LCA4fSwgXAorICAgIHsgICAgIDMxLCA3fSwgeyAgICAgNjMsIDh9LCB7ICAgICAzOSwgOX0sIHsgICAgIDIzLCA4fSwgXAorICAgIHsgICAgIDUxLDEwfSwgeyAgICAgMTUsIDl9LCB7ICAgICAzMSwgOH0sIHsgICAgIDY3LCA5fSwgXAorICAgIHsgICAgIDQ3LDEwfSwgeyAgICAgMzEsIDl9LCB7ICAgICA3OSwxMH0sIHsgICAgIDQ3LCA5fSwgXAorICAgIHsgICAgIDk1LDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA2MywgOX0sIHsgICAgMTM1LDEwfSwgXAorICAgIHsgICAgIDc5LCA5fSwgeyAgICAxNjcsMTB9LCB7ICAgICA5NSwgOX0sIHsgICAgMTkxLDEwfSwgXAorICAgIHsgICAgMTExLDExfSwgeyAgICAgNjMsMTB9LCB7ICAgIDEyNywgOX0sIHsgICAgMjU1LDEwfSwgXAorICAgIHsgICAgMTQzLCA5fSwgeyAgICAyODcsMTB9LCB7ICAgIDE1OSwxMX0sIHsgICAgIDk1LDEwfSwgXAorICAgIHsgICAgMTkxLCA5fSwgeyAgICAzODMsMTJ9LCB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgXAorICAgIHsgICAgMjU1LCA5fSwgeyAgICA1MTEsMTB9LCB7ICAgIDI3MSwgOX0sIHsgICAgNTQzLDEwfSwgXAorICAgIHsgICAgMjg3LDExfSwgeyAgICAxNTksMTB9LCB7ICAgIDM1MSwxMX0sIHsgICAgMTkxLDEwfSwgXAorICAgIHsgICAgNDE1LCA5fSwgeyAgICA4MzEsMTF9LCB7ICAgIDIyMywxMn0sIHsgICAgMTI3LDExfSwgXAorICAgIHsgICAgMjU1LDEwfSwgeyAgICA1NDMsMTF9LCB7ICAgIDI4NywxMH0sIHsgICAgNTc1LDExfSwgXAorICAgIHsgICAgMzUxLDEwfSwgeyAgICA3MDMsMTJ9LCB7ICAgIDE5MSwxMX0sIHsgICAgNDE1LDEwfSwgXAorICAgIHsgICAgODMxLDEzfSwgeyAgICAxMjcsMTJ9LCB7ICAgIDI1NSwxMX0sIHsgICAgNTQzLDEwfSwgXAorICAgIHsgICAxMDg3LDExfSwgeyAgICA1NzUsMTJ9LCB7ICAgIDMxOSwxMX0sIHsgICAgNzAzLDEyfSwgXAorICAgIHsgICAgMzgzLDExfSwgeyAgICA4MzEsMTJ9LCB7ICAgIDQ0NywxMX0sIHsgICAgODk1LDEzfSwgXAorICAgIHsgICAgMjU1LDEyfSwgeyAgICA1MTEsMTF9LCB7ICAgMTA4NywxMn0sIHsgICAgNTc1LDExfSwgXAorICAgIHsgICAxMTUxLDEyfSwgeyAgICA3MDMsMTN9LCB7ICAgIDM4MywxMn0sIHsgICAgOTU5LDE0fSwgXAorICAgIHsgICAgMjU1LDEzfSwgeyAgICA1MTEsMTJ9LCB7ICAgMTIxNSwxM30sIHsgICA4MTkyLDE0fSwgXAorICAgIHsgIDE2Mzg0LDE1fSwgeyAgMzI3NjgsMTZ9IH0KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTNfU0laRSAxMDYKKyNkZWZpbmUgTVVMX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDc0MjQKKworI2RlZmluZSBTUVJfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDQzMiAgLyogayA9IDUgKi8KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDQzMiwgNX0sIHsgICAgIDE3LCA2fSwgeyAgICAgIDksIDV9LCB7ICAgICAxOSwgNn0sIFwKKyAgICB7ICAgICAxMSwgNX0sIHsgICAgIDIzLCA2fSwgeyAgICAgMjEsIDd9LCB7ICAgICAxMSwgNn0sIFwKKyAgICB7ICAgICAyNCwgN30sIHsgICAgIDEzLCA2fSwgeyAgICAgMjcsIDd9LCB7ICAgICAxNSwgNn0sIFwKKyAgICB7ICAgICAzMSwgN30sIHsgICAgIDIxLCA4fSwgeyAgICAgMTEsIDd9LCB7ICAgICAyOSwgOH0sIFwKKyAgICB7ICAgICAxNSwgN30sIHsgICAgIDM1LCA4fSwgeyAgICAgMTksIDd9LCB7ICAgICAzOSwgOH0sIFwKKyAgICB7ICAgICAyMywgN30sIHsgICAgIDQ5LCA4fSwgeyAgICAgMjcsIDl9LCB7ICAgICAxNSwgOH0sIFwKKyAgICB7ICAgICAzOSwgOX0sIHsgICAgIDIzLCA3fSwgeyAgICAgOTMsIDh9LCB7ICAgICA0NywgN30sIFwKKyAgICB7ICAgICA5NSwgOH0sIHsgICAgIDUxLDEwfSwgeyAgICAgMTUsIDl9LCB7ICAgICAzMSwgOH0sIFwKKyAgICB7ICAgICA2NywgOX0sIHsgICAgIDM5LCA4fSwgeyAgICAgNzksIDl9LCB7ICAgICA0NywgOH0sIFwKKyAgICB7ICAgICA5NSwgOX0sIHsgICAgIDU1LDEwfSwgeyAgICAgMzEsIDl9LCB7ICAgICA3MSwgOH0sIFwKKyAgICB7ICAgIDE0MywgOX0sIHsgICAgIDc5LDEwfSwgeyAgICAgNDcsIDl9LCB7ICAgICA5NSwxMX0sIFwKKyAgICB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA5fSwgeyAgICAxMzUsMTB9LCB7ICAgICA3OSwgOX0sIFwKKyAgICB7ICAgIDE2NywxMH0sIHsgICAgIDk1LCA5fSwgeyAgICAxOTEsMTF9LCB7ICAgICA2MywxMH0sIFwKKyAgICB7ICAgIDEyNywgOX0sIHsgICAgMjU1LDEwfSwgeyAgICAxNDMsIDl9LCB7ICAgIDI4NywgOH0sIFwKKyAgICB7ICAgIDU3NSwxMH0sIHsgICAgMTU5LCA5fSwgeyAgICAzMTksMTF9LCB7ICAgICA5NSwxMH0sIFwKKyAgICB7ICAgIDE5MSwxMn0sIHsgICAgIDYzLDExfSwgeyAgICAxMjcsMTB9LCB7ICAgIDI1NSwgOX0sIFwKKyAgICB7ICAgIDUxMSwxMH0sIHsgICAgMjcxLCA5fSwgeyAgICA1NDMsMTB9LCB7ICAgIDI4NywxMX0sIFwKKyAgICB7ICAgIDE1OSwxMH0sIHsgICAgMzE5LCA5fSwgeyAgICA2MzksMTB9LCB7ICAgIDM1MSwgOX0sIFwKKyAgICB7ICAgIDcwMywxMX0sIHsgICAgMTkxLDEwfSwgeyAgICA0MTUsMTF9LCB7ICAgIDIyMywxMn0sIFwKKyAgICB7ICAgIDEyNywxMX0sIHsgICAgMjU1LDEwfSwgeyAgICA1NDMsMTF9LCB7ICAgIDI4NywxMH0sIFwKKyAgICB7ICAgIDYwNywxMX0sIHsgICAgMzE5LDEwfSwgeyAgICA2MzksMTF9LCB7ICAgIDM1MSwxMH0sIFwKKyAgICB7ICAgIDcwMywxMn0sIHsgICAgMTkxLDExfSwgeyAgICA0MTUsMTB9LCB7ICAgIDgzMSwxM30sIFwKKyAgICB7ICAgIDEyNywxMn0sIHsgICAgMjU1LDExfSwgeyAgICA1NDMsMTB9LCB7ICAgMTA4NywxMX0sIFwKKyAgICB7ICAgIDYwNywxMn0sIHsgICAgMzE5LDExfSwgeyAgICA3MDMsMTJ9LCB7ICAgIDM4MywxMX0sIFwKKyAgICB7ICAgIDgzMSwxMn0sIHsgICAgNDQ3LDEzfSwgeyAgICAyNTUsMTJ9LCB7ICAgIDUxMSwxMX0sIFwKKyAgICB7ICAgMTA4NywxMn0sIHsgICAgNTc1LDExfSwgeyAgIDEyMTUsMTJ9LCB7ICAgIDcwMywxM30sIFwKKyAgICB7ICAgIDM4MywxMn0sIHsgICAgODk1LDE0fSwgeyAgICAyNTUsMTN9LCB7ICAgIDUxMSwxMn0sIFwKKyAgICB7ICAgMTIxNSwxM30sIHsgICA4MTkyLDE0fSwgeyAgMTYzODQsMTV9LCB7ICAzMjc2OCwxNn0gfQorI2RlZmluZSBTUVJfRkZUX1RBQkxFM19TSVpFIDExMgorI2RlZmluZSBTUVJfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNzA0MAorCisjZGVmaW5lIE1VTExPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAzCisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDYwCisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgIDEzNDYzCisKKyNkZWZpbmUgRENfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNzgKKyNkZWZpbmUgRENfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAyNTIKKyNkZWZpbmUgRENfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgODQKKyNkZWZpbmUgRENfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNzEKKworI2RlZmluZSBJTlZfTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICA1NQorI2RlZmluZSBJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDIzNAorI2RlZmluZSBJTlZfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDIzNgorCisjZGVmaW5lIEJJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgMjY4CisjZGVmaW5lIFJFRENfMV9UT19SRURDX05fVEhSRVNIT0xEICAgICAgICAgIDY3CisKKyNkZWZpbmUgTVVfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDEzMDgKKyNkZWZpbmUgTVVfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgIDExNDIKKyNkZWZpbmUgTVVQSV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAxMzQKKyNkZWZpbmUgTVVfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgIDExNjQKKyNkZWZpbmUgTVVfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDExNjQKKworI2RlZmluZSBNQVRSSVgyMl9TVFJBU1NFTl9USFJFU0hPTEQgICAgICAgICAxNQorI2RlZmluZSBIR0NEX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgIDE4MgorI2RlZmluZSBHQ0RfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDU5MQorI2RlZmluZSBHQ0RFWFRfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDQ3MgorI2RlZmluZSBKQUNPQklfQkFTRV9NRVRIT0QgICAgICAgICAgICAgICAgICAgMgorCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgIDQwCisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgODM0CisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAyMDQyCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNi9rNjJtbXgvY29weWQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazYvazYybW14L2NvcHlkLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODBhNWExCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazYvazYybW14L2NvcHlkLmFzbQpAQCAtMCwwICsxLDExOCBAQAorZG5sICBBTUQgSzYtMiBtcG5fY29weWQgLS0gY29weSBsaW1iIHZlY3RvciwgZGVjcmVtZW50aW5nLgorCitkbmwgIENvcHlyaWdodCAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQyBLNi0yOiAxLjAgY3ljbGVzL2xpbWIKKworCitDIHZvaWQgbXBuX2NvcHlkIChtcF9wdHIgZHN0LCBtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSk7CitDCitDIFRoZSBsb29wIGhlcmUgaXMgbm8gZmFzdGVyIHRoYW4gYSByZXAgbW92c2wgYXQgMS4wIGMvbCwgYnV0IGl0IGF2b2lkcyBhIDMwCitDIGN5Y2xlIHN0YXJ0dXAgdGltZSwgd2hpY2ggYW1vdW50cyBmb3IgaW5zdGFuY2UgdG8gYSAyeCBzcGVlZHVwIGF0IDE1CitDIGxpbWJzLgorQworQyBJZiBkc3QgaXMgNG1vZDggdGhlIGxvb3Agd291bGQgYmUgMS4xNyBjL2wsIGJ1dCB0aGF0J3MgYXZvaWRlZCBieQorQyBwcm9jZXNzaW5nIG9uZSBsaW1iIHNlcGFyYXRlbHkgdG8gbWFrZSBpdCBhbGlnbmVkLiAgVGhpcyBhbmQgYSBmaW5hbCBvZGQKK0MgbGltYiBhcmUgaGFuZGxlZCBpbiBhIGJyYW5jaC1mcmVlIGZhc2hpb24sIGVuZGluZyB1cCByZS1jb3B5aW5nIGlmIHRoZQorQyBzcGVjaWFsIGNhc2UgaXNuJ3QgbmVlZGVkLgorQworQyBBbHRlcm5hdGl2ZXM6CitDCitDIFRoZXJlIHVzZWQgdG8gYmUgYSBiaWcgdW5yb2xsZWQgdmVyc2lvbiBvZiB0aGlzLCBydW5uaW5nIGF0IDAuNTYgYy9sIGlmCitDIHRoZSBkZXN0aW5hdGlvbiB3YXMgYWxpZ25lZCwgYnV0IHRoYXQgc2VlbWVkIHJhdGhlciBleGNlc3NpdmUgZm9yIHRoZQorQyByZWxhdGl2ZSBpbXBvcnRhbmNlIG9mIGNvcHlkLgorQworQyBJZiB0aGUgZGVzdGluYXRpb24gYWxpZ25tZW50IGlzIGlnbm9yZWQgYW5kIGp1c3QgbGVmdCB0byBydW4gYXQgMS4xNyBjL2wKK0Mgc29tZSBjb2RlIHNpemUgYW5kIGEgZml4ZWQgZmV3IGN5Y2xlcyBjYW4gYmUgc2F2ZWQuICBDb25zaWRlcmluZyBob3cgZmV3CitDIHVzZXMgY29weWQgZmluZHMgcGVyaGFwcyB0aGF0IHNob3VsZCBiZSBmYXZvdXJlZC4gIFRoZSBjdXJyZW50IGNvZGUgaGFzCitDIHRoZSBhdHRyYWN0aW9uIG9mIGJlaW5nIG5vIHNsb3dlciB0aGFuIGEgYmFzaWMgcmVwIG1vdnNsIHRob3VnaC4KKworZGVmZnJhbWUoUEFSQU1fU0laRSwxMikKK2RlZmZyYW1lKFBBUkFNX1NSQywgOCkKK2RlZmZyYW1lKFBBUkFNX0RTVCwgNCkKKworZG5sICByZS11c2luZyBwYXJhbWV0ZXIgc3BhY2UKK2RlZmluZShTQVZFX0VCWCxgUEFSQU1fU0laRScpCisKKwlURVhUCisJQUxJR04oMTYpCisKK1BST0xPR1VFKG1wbl9jb3B5ZCkKK2RlZmxpdChgRlJBTUUnLDApCisKKwltb3ZsCVBBUkFNX1NJWkUsICVlY3gKKwltb3ZsCSVlYngsIFNBVkVfRUJYCisKKwltb3ZsCVBBUkFNX1NSQywgJWVheAorCW1vdmwJUEFSQU1fRFNULCAlZWR4CisKKwlzdWJsCSQxLCAlZWN4CQlDIGJldHRlciBjb2RlIGFsaWdubWVudCB0aGFuIGRlY2wKKwlqYglMKHplcm8pCisKKwlqeglMKG9uZV9tb3JlKQorCWxlYWwJNCglZWR4LCVlY3gsNCksICVlYngKKworWmRpc3AoCW1vdmQsCTAsKCVlYXgsJWVjeCw0KSwgJW1tMCkJQyBoaWdoIGxpbWIKK1pkaXNwKAltb3ZkLAklbW0wLCAwLCglZWR4LCVlY3gsNCkpCUMgWmRpc3AgZm9yIGdvb2QgY29kZSBhbGlnbm1lbnQKKworCWNtcGwJJDEsICVlY3gKKwlqZQlMKG9uZV9tb3JlKQorCisJc2hybAkkMiwgJWVieAorCWFuZGwJJDEsICVlYngJCUMgMSBpZiBkc3Rbc2l6ZS0yXSB1bmFsaWduZWQKKworCXN1YmwJJWVieCwgJWVjeAorCW5vcAkJCQlDIGNvZGUgYWxpZ25tZW50CisKK0wodG9wKToKKwlDIGVheAlzcmMKKwlDIGVieAorCUMgZWN4CWNvdW50ZXIKKwlDIGVkeAlkc3QKKworCW1vdnEJLTQoJWVheCwlZWN4LDQpLCAlbW0wCisJc3VibAkkMiwgJWVjeAorCisJbW92cQklbW0wLCA0KCVlZHgsJWVjeCw0KQorCWphCUwodG9wKQorCisKK0wob25lX21vcmUpOgorCW1vdmQJKCVlYXgpLCAlbW0wCisJbW92ZAklbW0wLCAoJWVkeCkKKworCW1vdmwJU0FWRV9FQlgsICVlYngKKwllbW1zX29yX2ZlbW1zCitMKHplcm8pOgorCXJldAorCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNi9rNjJtbXgvbHNoaWZ0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s2L2s2Mm1teC9sc2hpZnQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NjU3NWYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNi9rNjJtbXgvbHNoaWZ0LmFzbQpAQCAtMCwwICsxLDI5NCBAQAorZG5sICBBTUQgSzYtMiBtcG5fbHNoaWZ0IC0tIG1wbiBsZWZ0IHNoaWZ0LgorCitkbmwgIENvcHlyaWdodCAxOTk5LCAyMDAwLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQyBLNi0yOiAxLjc1IGN5Y2xlcy9saW1iCisKKworQyBtcF9saW1iX3QgbXBuX2xzaGlmdCAobXBfcHRyIGRzdCwgbXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUsCitDICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaGlmdCk7CitDCisKK2RlZmZyYW1lKFBBUkFNX1NISUZULDE2KQorZGVmZnJhbWUoUEFSQU1fU0laRSwgMTIpCitkZWZmcmFtZShQQVJBTV9TUkMsICA4KQorZGVmZnJhbWUoUEFSQU1fRFNULCAgNCkKK2RlZmxpdChgRlJBTUUnLDApCisKK2RubCAgdXNlZCBhZnRlciBzcmMgaGFzIGJlZW4gZmV0Y2hlZAorZGVmaW5lKFZBUl9SRVRWQUwsYFBBUkFNX1NSQycpCisKK2RubCAgbWluaW11bSA5LCBiZWNhdXNlIHVucm9sbGVkIGxvb3AgY2FuJ3QgaGFuZGxlIGxlc3MKK2RlZmxpdChVTlJPTExfVEhSRVNIT0xELCA5KQorCisJVEVYVAorCUFMSUdOKDMyKQorCitQUk9MT0dVRShtcG5fbHNoaWZ0KQorZGVmbGl0KGBGUkFNRScsMCkKKworCUMgVGhlIDEgbGltYiBjYXNlIGNhbiBiZSBkb25lIHdpdGhvdXQgdGhlIHB1c2ggJWVieCwgYnV0IGl0J3MgdGhlbgorCUMgc3RpbGwgdGhlIHNhbWUgc3BlZWQuICBUaGUgcHVzaCBpcyBsZWZ0IGFzIGEgZnJlZSBoZWxwaW5nIGhhbmQgZm9yCisJQyB0aGUgdHdvX29yX21vcmUgY29kZS4KKworCW1vdmwJUEFSQU1fU0laRSwgJWVheAorCXB1c2hsCSVlYngJCQlGUkFNRV9wdXNobCgpCisKKwltb3ZsCVBBUkFNX1NSQywgJWVieAorCWRlY2wJJWVheAorCisJbW92bAlQQVJBTV9TSElGVCwgJWVjeAorCWpueglMKHR3b19vcl9tb3JlKQorCisJbW92bAkoJWVieCksICVlZHgJCUMgc3JjIGxpbWIKKwltb3ZsCVBBUkFNX0RTVCwgJWVieAorCisJc2hsZGwoCSVjbCwgJWVkeCwgJWVheCkJQyByZXR1cm4gdmFsdWUKKworCXNobGwJJWNsLCAlZWR4CisKKwltb3ZsCSVlZHgsICglZWJ4KQkJQyBkc3QgbGltYgorCXBvcGwJJWVieAorCisJcmV0CisKKworQyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUFMSUdOKDE2KQlDIGF2b2lkIG9mZnNldCAweDFmCitMKHR3b19vcl9tb3JlKToKKwlDIGVheAlzaXplLTEKKwlDIGVieAlzcmMKKwlDIGVjeAlzaGlmdAorCUMgZWR4CisKKwltb3ZsCSglZWJ4LCVlYXgsNCksICVlZHgJQyBzcmMgaGlnaCBsaW1iCisJbmVnbAklZWN4CisKKwltb3ZkCVBBUkFNX1NISUZULCAlbW02CisJYWRkbAkkMzIsICVlY3gJCUMgMzItc2hpZnQKKworCXNocmwJJWNsLCAlZWR4CisJY21wbAkkVU5ST0xMX1RIUkVTSE9MRC0xLCAlZWF4CisKKwltb3ZsCSVlZHgsIFZBUl9SRVRWQUwKKwlqYWUJTCh1bnJvbGwpCisKKworCW1vdmQJJWVjeCwgJW1tNworCW1vdmwJJWVheCwgJWVjeAorCisJbW92bAlQQVJBTV9EU1QsICVlYXgKKworTChzaW1wbGUpOgorCUMgZWF4CWRzdAorCUMgZWJ4CXNyYworCUMgZWN4CWNvdW50ZXIsIHNpemUtMSB0byAxCisJQyBlZHgJcmV0dmFsCisJQworCUMgbW0wCXNjcmF0Y2gKKwlDIG1tNglzaGlmdAorCUMgbW03CTMyLXNoaWZ0CisKKwltb3ZxCS00KCVlYngsJWVjeCw0KSwgJW1tMAorCisJcHNybHEJJW1tNywgJW1tMAorCitaZGlzcCgJbW92ZCwJJW1tMCwgMCwoJWVheCwlZWN4LDQpKQorCWxvb3AJTChzaW1wbGUpCisKKworCW1vdmQJKCVlYngpLCAlbW0wCisJcG9wbAklZWJ4CisKKwlwc2xscQklbW02LCAlbW0wCisKKwltb3ZkCSVtbTAsICglZWF4KQorCW1vdmwJJWVkeCwgJWVheAorCisJZmVtbXMKKwlyZXQKKworCitDIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJQUxJR04oMTYpCitMKHVucm9sbCk6CisJQyBlYXgJc2l6ZS0xCisJQyBlYngJc3JjCisJQyBlY3gJMzItc2hpZnQKKwlDIGVkeAlyZXR2YWwgKGJ1dCBpbnN0ZWFkIFZBUl9SRVRWQUwgaXMgdXNlZCkKKwlDCisJQyBtbTYJc2hpZnQKKworCWFkZGwJJDMyLCAlZWN4CisJbW92bAlQQVJBTV9EU1QsICVlZHgKKworCW1vdmQJJWVjeCwgJW1tNworCXN1YmwJJDcsICVlYXgJCQlDIHNpemUtOAorCisJbGVhbAkoJWVkeCwlZWF4LDQpLCAlZWN4CQlDIGFsaWdubWVudCBvZiBkc3QKKworCW1vdnEJMzItOCglZWJ4LCVlYXgsNCksICVtbTIJCUMgc3JjIGhpZ2ggcXdvcmQKKwl0ZXN0YgkkNCwgJWNsCisKKwlqeglMKGRzdF9hbGlnbmVkKQorCXBzbGxxCSVtbTYsICVtbTIKKworCXBzcmxxCSQzMiwgJW1tMgorCWRlY2wJJWVheAorCisJbW92ZAklbW0yLCAzMiglZWR4LCVlYXgsNCkJCUMgZHN0IGhpZ2ggbGltYgorCW1vdnEJMzItOCglZWJ4LCVlYXgsNCksICVtbTIJCUMgbmV3IHNyYyBoaWdoIHF3b3JkCitMKGRzdF9hbGlnbmVkKToKKworCW1vdnEJMzItMTYoJWVieCwlZWF4LDQpLCAlbW0wCUMgc3JjIHNlY29uZCBoaWdoZXN0IHF3b3JkCisKKworCUMgVGhpcyBsb29wIGlzIHRoZSBpbXBvcnRhbnQgYml0LCB0aGUgcmVzdCBpcyBqdXN0IHN1cHBvcnQgZm9yIGl0LgorCUMgRm91ciBzcmMgbGltYnMgYXJlIGhlbGQgYXQgdGhlIHN0YXJ0LCBhbmQgZm91ciBtb3JlIHdpbGwgYmUgcmVhZC4KKwlDIEZvdXIgZHN0IGxpbWJzIHdpbGwgYmUgd3JpdHRlbi4gIFRoaXMgc2NoZWR1bGUgc2VlbXMgbmVjZXNzYXJ5IGZvcgorCUMgZnVsbCBzcGVlZC4KKwlDCisJQyBUaGUgdXNlIG9mIHNpemUtOCBsZXRzIHRoZSBsb29wIHN0b3Agd2hlbiAlZWF4IGdvZXMgbmVnYXRpdmUgYW5kCisJQyBsZWF2ZXMgLTQgdG8gLTEgd2hpY2ggY2FuIGJlIHRlc3RlZCB3aXRoIHRlc3QgJDEgYW5kICQyLgorCitMKHRvcCk6CisJQyBlYXgJY291bnRlciwgc2l6ZS04IHN0ZXAgYnkgLTQgdW50aWwgPDAKKwlDIGVieAlzcmMKKwlDIGVjeAorCUMgZWR4CWRzdAorCUMKKwlDIG1tMAlzcmMgbmV4dCBxd29yZAorCUMgbW0xCXNjcmF0Y2gKKwlDIG1tMglzcmMgcHJldiBxd29yZAorCUMgbW02CXNoaWZ0CisJQyBtbTcJNjQtc2hpZnQKKworCXBzbGxxCSVtbTYsICVtbTIKKwlzdWJsCSQ0LCAlZWF4CisKKwltb3ZxCSVtbTAsICVtbTEKKwlwc3JscQklbW03LCAlbW0wCisKKwlwb3IJJW1tMCwgJW1tMgorCW1vdnEJMjQoJWVieCwlZWF4LDQpLCAlbW0wCisKKwlwc2xscQklbW02LCAlbW0xCisJbW92cQklbW0yLCA0MCglZWR4LCVlYXgsNCkKKworCW1vdnEJJW1tMCwgJW1tMgorCXBzcmxxCSVtbTcsICVtbTAKKworCXBvcgklbW0wLCAlbW0xCisJbW92cQkxNiglZWJ4LCVlYXgsNCksICVtbTAKKworCW1vdnEJJW1tMSwgMzIoJWVkeCwlZWF4LDQpCisJam5jCUwodG9wKQorCisKKwlDIE5vdyBoYXZlIGZvdXIgbGltYnMgaW4gbW0yIChwcmV2KSBhbmQgbW0wIChuZXh0KSwgcGx1cyBlYXggbW9kIDQuCisJQworCUMgOCglZWJ4KSBpcyB0aGUgbmV4dCBzb3VyY2UsIGFuZCAyNCglZWR4KSBpcyB0aGUgbmV4dCBkZXN0aW5hdGlvbi4KKwlDICVlYXggaXMgYmV0d2VlbiAtNCBhbmQgLTEsIHJlcHJlc2VudGluZyByZXNwZWN0aXZlbHkgMCB0byAzIGV4dHJhCisJQyBsaW1icyB0aGF0IG11c3QgYmUgcmVhZC4KKworCisJdGVzdGwJJDIsICVlYXgJQyB0ZXN0bCB0byBhdm9pZCBiYWQgY2FjaGUgbGluZSBjcm9zc2luZworCWp6CUwoZmluaXNoX25vdHR3bykKKworCUMgVHdvIG1vcmUgbGltYnM6IGxzaGlmdCBtbTIsIE9SIGl0IHdpdGggcnNoaWZ0ZWQgbW0wLCBtbTAgYmVjb21lcworCUMgbmV3IG1tMiBhbmQgYSBuZXcgbW0wIGlzIGxvYWRlZC4KKworCXBzbGxxCSVtbTYsICVtbTIKKwltb3ZxCSVtbTAsICVtbTEKKworCXBzcmxxCSVtbTcsICVtbTAKKwlzdWJsCSQyLCAlZWF4CisKKwlwb3IJJW1tMCwgJW1tMgorCW1vdnEJMTYoJWVieCwlZWF4LDQpLCAlbW0wCisKKwltb3ZxCSVtbTIsIDMyKCVlZHgsJWVheCw0KQorCW1vdnEJJW1tMSwgJW1tMgorTChmaW5pc2hfbm90dHdvKToKKworCisJQyBsc2hpZnQgbW0yLCBPUiB3aXRoIHJzaGlmdGVkIG1tMCwgbW0xIGJlY29tZXMgbHNoaWZ0ZWQgbW0wCisKKwl0ZXN0YgkkMSwgJWFsCisJcHNsbHEJJW1tNiwgJW1tMgorCisJbW92cQklbW0wLCAlbW0xCisJcHNybHEJJW1tNywgJW1tMAorCisJcG9yCSVtbTAsICVtbTIKKwlwc2xscQklbW02LCAlbW0xCisKKwltb3ZxCSVtbTIsIDI0KCVlZHgsJWVheCw0KQorCWp6CUwoZmluaXNoX2V2ZW4pCisKKworCUMgU2l6ZSBpcyBvZGQsIHNvIG1tMSBhbmQgb25lIGV4dHJhIGxpbWIgdG8gcHJvY2Vzcy4KKworCW1vdmQJKCVlYngpLCAlbW0wCQlDIHNyY1swXQorCXBvcGwJJWVieAorZGVmbGl0KGBGUkFNRScsMCkKKworCW1vdnEJJW1tMCwgJW1tMgorCXBzbGxxCSQzMiwgJW1tMAorCisJcHNybHEJJW1tNywgJW1tMAorCisJcHNsbHEJJW1tNiwgJW1tMgorCXBvcgklbW0wLCAlbW0xCisKKwltb3ZxCSVtbTEsIDQoJWVkeCkJCUMgZHN0WzEsMl0KKwltb3ZkCSVtbTIsICglZWR4KQkJQyBkc3RbMF0KKworCW1vdmwJVkFSX1JFVFZBTCwgJWVheAorCisJZmVtbXMKKwlyZXQKKworCisJbm9wCUMgYXZvaWQgYmFkIGNhY2hlIGxpbmUgY3Jvc3NpbmcKK0woZmluaXNoX2V2ZW4pOgorZGVmbGl0KGBGUkFNRScsNCkKKwlDIFNpemUgaXMgZXZlbiwgc28gb25seSBtbTEgbGVmdCB0byBwcm9jZXNzLgorCisJbW92cQklbW0xLCAoJWVkeCkJCUMgZHN0WzAsMV0KKwltb3ZsCVZBUl9SRVRWQUwsICVlYXgKKworCXBvcGwJJWVieAorCWZlbW1zCisJcmV0CisKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s2L2s2Mm1teC9yc2hpZnQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazYvazYybW14L3JzaGlmdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYwNGE3YgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s2L2s2Mm1teC9yc2hpZnQuYXNtCkBAIC0wLDAgKzEsMjkzIEBACitkbmwgIEFNRCBLNi0yIG1wbl9yc2hpZnQgLS0gbXBuIHJpZ2h0IHNoaWZ0LgorCitkbmwgIENvcHlyaWdodCAxOTk5LCAyMDAwLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQyBLNi0yOiAxLjc1IGN5Y2xlcy9saW1iCisKKworQyBtcF9saW1iX3QgbXBuX3JzaGlmdCAobXBfcHRyIGRzdCwgbXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUsCitDICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaGlmdCk7CitDCisKK2RlZmZyYW1lKFBBUkFNX1NISUZULDE2KQorZGVmZnJhbWUoUEFSQU1fU0laRSwgMTIpCitkZWZmcmFtZShQQVJBTV9TUkMsICA4KQorZGVmZnJhbWUoUEFSQU1fRFNULCAgNCkKK2RlZmxpdChgRlJBTUUnLDApCisKK2RubCAgTWluaW11bSA5LCBiZWNhdXNlIHRoZSB1bnJvbGxlZCBsb29wIGNhbid0IGhhbmRsZSBsZXNzLgorZG5sCitkZWZsaXQoVU5ST0xMX1RIUkVTSE9MRCwgOSkKKworCVRFWFQKKwlBTElHTigzMikKKworUFJPTE9HVUUobXBuX3JzaGlmdCkKK2RlZmxpdChgRlJBTUUnLDApCisKKwlDIFRoZSAxIGxpbWIgY2FzZSBjYW4gYmUgZG9uZSB3aXRob3V0IHRoZSBwdXNoICVlYngsIGJ1dCBpdCdzIHRoZW4KKwlDIHN0aWxsIHRoZSBzYW1lIHNwZWVkLiAgVGhlIHB1c2ggaXMgbGVmdCBhcyBhIGZyZWUgaGVscGluZyBoYW5kIGZvcgorCUMgdGhlIHR3b19vcl9tb3JlIGNvZGUuCisKKwltb3ZsCVBBUkFNX1NJWkUsICVlYXgKKwlwdXNobAklZWJ4CQkJRlJBTUVfcHVzaGwoKQorCisJbW92bAlQQVJBTV9TUkMsICVlYngKKwlkZWNsCSVlYXgKKworCW1vdmwJUEFSQU1fU0hJRlQsICVlY3gKKwlqbnoJTCh0d29fb3JfbW9yZSkKKworCW1vdmwJKCVlYngpLCAlZWR4CQlDIHNyYyBsaW1iCisJbW92bAlQQVJBTV9EU1QsICVlYngKKworCXNocmRsKAklY2wsICVlZHgsICVlYXgpCUMgcmV0dXJuIHZhbHVlCisKKwlzaHJsCSVjbCwgJWVkeAorCisJbW92bAklZWR4LCAoJWVieCkJCUMgZHN0IGxpbWIKKwlwb3BsCSVlYngKKworCXJldAorCisKK0MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlBTElHTigxNikJQyBhdm9pZCBvZmZzZXQgMHgxZgorTCh0d29fb3JfbW9yZSk6CisJQyBlYXgJc2l6ZS0xCisJQyBlYngJc3JjCisJQyBlY3gJc2hpZnQKKwlDIGVkeAorCisJbW92bAkoJWVieCksICVlZHgJQyBzcmMgbG93IGxpbWIKKwluZWdsCSVlY3gKKworCWFkZGwJJDMyLCAlZWN4CisJbW92ZAlQQVJBTV9TSElGVCwgJW1tNgorCisJc2hsbAklY2wsICVlZHgKKwljbXBsCSRVTlJPTExfVEhSRVNIT0xELTEsICVlYXgKKworCWphZQlMKHVucm9sbCkKKworCisJQyBlYXgJc2l6ZS0xCisJQyBlYngJc3JjCisJQyBlY3gJMzItc2hpZnQKKwlDIGVkeAlyZXR2YWwKKwlDCisJQyBtbTYJc2hpZnQKKworCW1vdmwJUEFSQU1fRFNULCAlZWN4CisJbGVhbAkoJWVieCwlZWF4LDQpLCAlZWJ4CisKKwlsZWFsCS00KCVlY3gsJWVheCw0KSwgJWVjeAorCW5lZ2wJJWVheAorCisJQyBUaGlzIGxvb3AgcnVucyBhdCBhYm91dCAzIGN5Y2xlcy9saW1iLCB3aGljaCBpcyB0aGUgYW1vdW50IG9mCisJQyBkZWNvZGluZywgYW5kIHRoaXMgaXMgZGVzcGl0ZSBldmVyeSBzZWNvbmQgYWNjZXNzIGJlaW5nIHVuYWxpZ25lZC4KKworTChzaW1wbGUpOgorCUMgZWF4CWNvdW50ZXIsIC0oc2l6ZS0xKSB0byAtMQorCUMgZWJ4CSZzcmNbc2l6ZS0xXQorCUMgZWN4CSZkc3Rbc2l6ZS0xXQorCUMgZWR4CXJldHZhbAorCUMKKwlDIG1tMAlzY3JhdGNoCisJQyBtbTYJc2hpZnQKKworWmRpc3AoCW1vdnEsCTAsKCVlYngsJWVheCw0KSwgJW1tMCkKKwlpbmNsCSVlYXgKKworCXBzcmxxCSVtbTYsICVtbTAKKworWmRpc3AoCW1vdmQsCSVtbTAsIDAsKCVlY3gsJWVheCw0KSkKKwlqbnoJTChzaW1wbGUpCisKKworCW1vdnEJJW1tMCwgKCVlY3gpCisJbW92bAklZWR4LCAlZWF4CisKKwlwb3BsCSVlYngKKworCWZlbW1zCisJcmV0CisKKworQyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUFMSUdOKDE2KQorTCh1bnJvbGwpOgorCUMgZWF4CXNpemUtMQorCUMgZWJ4CXNyYworCUMgZWN4CTMyLXNoaWZ0CisJQyBlZHgJcmV0dmFsCisJQworCUMgbW02CXNoaWZ0CisKKwlhZGRsCSQzMiwgJWVjeAorCXN1YmwJJDcsICVlYXgJCUMgc2l6ZS04CisKKwltb3ZkCSVlY3gsICVtbTcKKwltb3ZsCVBBUkFNX0RTVCwgJWVjeAorCisJbW92cQkoJWVieCksICVtbTIJCUMgc3JjIGxvdyBxd29yZAorCWxlYWwJKCVlYngsJWVheCw0KSwgJWVieAlDIHNyYyBlbmQgLSAzMgorCisJdGVzdGIJJDQsICVjbAorCWxlYWwJKCVlY3gsJWVheCw0KSwgJWVjeAlDIGRzdCBlbmQgLSAzMgorCisJbm90bAklZWF4CQkJQyAtKHNpemUtNykKKwlqeglMKGRzdF9hbGlnbmVkKQorCisJcHNybHEJJW1tNiwgJW1tMgorCWluY2wJJWVheAorCitaZGlzcCgJbW92ZCwJJW1tMiwgMCwoJWVjeCwlZWF4LDQpKQlDIGRzdCBsb3cgbGltYgorCW1vdnEJNCglZWJ4LCVlYXgsNCksICVtbTIJQyBuZXcgc3JjIGxvdyBxd29yZAorTChkc3RfYWxpZ25lZCk6CisKKwltb3ZxCTEyKCVlYngsJWVheCw0KSwgJW1tMAlDIHNyYyBzZWNvbmQgbG93ZXN0IHF3b3JkCisJbm9wCUMgYXZvaWQgYmFkIGNhY2hlIGxpbmUgY3Jvc3NpbmcKKworCisJQyBUaGlzIGxvb3AgaXMgdGhlIGltcG9ydGFudCBiaXQsIHRoZSByZXN0IGlzIGp1c3Qgc3VwcG9ydCBmb3IgaXQuCisJQyBGb3VyIHNyYyBsaW1icyBhcmUgaGVsZCBhdCB0aGUgc3RhcnQsIGFuZCBmb3VyIG1vcmUgd2lsbCBiZSByZWFkLgorCUMgRm91ciBkc3QgbGltYnMgd2lsbCBiZSB3cml0dGVuLiAgVGhpcyBzY2hlZHVsZSBzZWVtcyBuZWNlc3NhcnkgZm9yCisJQyBmdWxsIHNwZWVkLgorCUMKKwlDIFRoZSB1c2Ugb2YgLShzaXplLTcpIGxldHMgdGhlIGxvb3Agc3RvcCB3aGVuICVlYXggYmVjb21lcyA+PSAwIGFuZAorCUMgYW5kIGxlYXZlcyAwIHRvIDMgd2hpY2ggY2FuIGJlIHRlc3RlZCB3aXRoIHRlc3QgJDEgYW5kICQyLgorCitMKHRvcCk6CisJQyBlYXgJY291bnRlciwgLShzaXplLTcpIHN0ZXAgYnkgKzQgdW50aWwgPj0wCisJQyBlYngJc3JjIGVuZCAtIDMyCisJQyBlY3gJZHN0IGVuZCAtIDMyCisJQyBlZHgJcmV0dmFsCisJQworCUMgbW0wCXNyYyBuZXh0IHF3b3JkCisJQyBtbTEJc2NyYXRjaAorCUMgbW0yCXNyYyBwcmV2IHF3b3JkCisJQyBtbTYJc2hpZnQKKwlDIG1tNwk2NC1zaGlmdAorCisJcHNybHEJJW1tNiwgJW1tMgorCWFkZGwJJDQsICVlYXgKKworCW1vdnEJJW1tMCwgJW1tMQorCXBzbGxxCSVtbTcsICVtbTAKKworCXBvcgklbW0wLCAlbW0yCisJbW92cQk0KCVlYngsJWVheCw0KSwgJW1tMAorCisJcHNybHEJJW1tNiwgJW1tMQorCW1vdnEJJW1tMiwgLTEyKCVlY3gsJWVheCw0KQorCisJbW92cQklbW0wLCAlbW0yCisJcHNsbHEJJW1tNywgJW1tMAorCisJcG9yCSVtbTAsICVtbTEKKwltb3ZxCTEyKCVlYngsJWVheCw0KSwgJW1tMAorCisJbW92cQklbW0xLCAtNCglZWN4LCVlYXgsNCkKKwlqYQlMKHRvcCkJCUMganVtcCBpZiBubyBjYXJyeSBhbmQgbm90IHplcm8KKworCisKKwlDIE5vdyBoYXZlIHRoZSBmb3VyIGxpbWJzIGluIG1tMiAobG93KSBhbmQgbW0wIChoaWdoKSwgYW5kICVlYXggaXMgMAorCUMgdG8gMyByZXByZXNlbnRpbmcgcmVzcGVjdGl2ZWx5IDMgdG8gMCBmdXJ0aGVyIGxpbWJzLgorCisJdGVzdGwJJDIsICVlYXgJQyB0ZXN0bCB0byBhdm9pZCBiYWQgY2FjaGUgbGluZSBjcm9zc2luZ3MKKwlqbnoJTChmaW5pc2hfbm90dHdvKQorCisJQyBUd28gb3IgdGhyZWUgZXh0cmEgbGltYnM6IHJzaGlmdCBtbTIsIE9SIGl0IHdpdGggbHNoaWZ0ZWQgbW0wLCBtbTAKKwlDIGJlY29tZXMgbmV3IG1tMiBhbmQgYSBuZXcgbW0wIGlzIGxvYWRlZC4KKworCXBzcmxxCSVtbTYsICVtbTIKKwltb3ZxCSVtbTAsICVtbTEKKworCXBzbGxxCSVtbTcsICVtbTAKKwlhZGRsCSQyLCAlZWF4CisKKwlwb3IJJW1tMCwgJW1tMgorCW1vdnEJMTIoJWVieCwlZWF4LDQpLCAlbW0wCisKKwltb3ZxCSVtbTIsIC00KCVlY3gsJWVheCw0KQorCW1vdnEJJW1tMSwgJW1tMgorTChmaW5pc2hfbm90dHdvKToKKworCisJdGVzdGIJJDEsICVhbAorCXBzcmxxCSVtbTYsICVtbTIKKworCW1vdnEJJW1tMCwgJW1tMQorCXBzbGxxCSVtbTcsICVtbTAKKworCXBvcgklbW0wLCAlbW0yCisJcHNybHEJJW1tNiwgJW1tMQorCisJbW92cQklbW0yLCA0KCVlY3gsJWVheCw0KQorCWpueglMKGZpbmlzaF9ldmVuKQorCisKKwlDIG9uZSBmdXJ0aGVyIGV4dHJhIGxpbWIgdG8gcHJvY2VzcworCisJbW92ZAkzMi00KCVlYngpLCAlbW0wCUMgc3JjW3NpemUtMV0sIG1vc3Qgc2lnbmlmaWNhbnQgbGltYgorCXBvcGwJJWVieAorCisJbW92cQklbW0wLCAlbW0yCisJcHNsbHEJJW1tNywgJW1tMAorCisJcG9yCSVtbTAsICVtbTEKKwlwc3JscQklbW02LCAlbW0yCisKKwltb3ZxCSVtbTEsIDMyLTEyKCVlY3gpCUMgZHN0W3NpemUtMyxzaXplLTJdCisJbW92ZAklbW0yLCAzMi00KCVlY3gpCUMgZHN0W3NpemUtMV0KKworCW1vdmwJJWVkeCwgJWVheAkJQyByZXR2YWwKKworCWZlbW1zCisJcmV0CisKKworCW5vcAlDIGF2b2lkIGJhZCBjYWNoZSBsaW5lIGNyb3NzaW5nCitMKGZpbmlzaF9ldmVuKToKKwlDIG5vIGZ1cnRoZXIgZXh0cmEgbGltYnMKKworCW1vdnEJJW1tMSwgMzItOCglZWN4KQlDIGRzdFtzaXplLTIsc2l6ZS0xXQorCW1vdmwJJWVkeCwgJWVheAkJQyByZXR2YWwKKworCXBvcGwJJWVieAorCisJZmVtbXMKKwlyZXQKKworRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazYvbW14L2NvbS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNi9tbXgvY29tLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzQ3NDU0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazYvbW14L2NvbS5hc20KQEAgLTAsMCArMSwxMDMgQEAKK2RubCAgQU1EIEs2LTIgbXBuX2NvbSAtLSBtcG4gYml0d2lzZSBvbmUncyBjb21wbGVtZW50LgorCitkbmwgIENvcHlyaWdodCAxOTk5LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworTkFJTFNfU1VQUE9SVCgwLTMxKQorCisKK0MgICAgYWxpZ25tZW50IGRzdC9zcmMsIEE9MG1vZDggTj00bW9kOAorQyAgICAgICBBL0EgICBBL04gICBOL0EgICBOL04KK0MgSzYtMiAgMS4wICAgMS4xOCAgMS4xOCAgMS4xOCAgY3ljbGVzL2xpbWIKK0MgSzYgICAgMS41ICAgMS44NSAgMS43NSAgMS44NQorCisKK0Mgdm9pZCBtcG5fY29tIChtcF9wdHIgZHN0LCBtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSk7CitDCitDIFRha2UgdGhlIGJpdHdpc2Ugb25lcy1jb21wbGVtZW50IG9mIHNyYyxzaXplIGFuZCB3cml0ZSBpdCB0byBkc3Qsc2l6ZS4KKworZGVmZnJhbWUoUEFSQU1fU0laRSwxMikKK2RlZmZyYW1lKFBBUkFNX1NSQywgOCkKK2RlZmZyYW1lKFBBUkFNX0RTVCwgNCkKKworCVRFWFQKKwlBTElHTigxNikKK1BST0xPR1VFKG1wbl9jb20pCitkZWZsaXQoYEZSQU1FJywwKQorCisJbW92bAlQQVJBTV9TSVpFLCAlZWN4CisJbW92bAlQQVJBTV9TUkMsICVlYXgKKwltb3ZsCVBBUkFNX0RTVCwgJWVkeAorCXNocmwJJWVjeAorCWpueglMKHR3b19vcl9tb3JlKQorCisJbW92bAkoJWVheCksICVlYXgKKwlub3RsX29yX3hvcmxfR01QX05VTUJfTUFTSygJJWVheCkKKwltb3ZsCSVlYXgsICglZWR4KQorCXJldAorCisKK0wodHdvX29yX21vcmUpOgorCXB1c2hsCSVlYngJRlJBTUVfcHVzaGwoKQorCXBjbXBlcWQJJW1tNywgJW1tNwkJQyBhbGwgb25lcworCisJbW92bAklZWN4LCAlZWJ4CitpZmVsc2UoR01QX05BSUxfQklUUywwLCwKK2AJcHNybGQJJEdNUF9OQUlMX0JJVFMsICVtbTcnKQlDIGNsZWFyIG5haWxzCisKKworCisJQUxJR04oOCkKK0wodG9wKToKKwlDIGVheAlzcmMKKwlDIGVieAlmbG9vcihzaXplLzIpCisJQyBlY3gJY291bnRlcgorCUMgZWR4CWRzdAorCUMKKwlDIG1tMAlzY3JhdGNoCisJQyBtbTcJbWFzaworCisJbW92cQktOCglZWF4LCVlY3gsOCksICVtbTAKKwlweG9yCSVtbTcsICVtbTAKKwltb3ZxCSVtbTAsIC04KCVlZHgsJWVjeCw4KQorCWxvb3AJTCh0b3ApCisKKworCWpuYwlMKG5vX2V4dHJhKQorCW1vdmwJKCVlYXgsJWVieCw4KSwgJWVheAorCW5vdGxfb3JfeG9ybF9HTVBfTlVNQl9NQVNLKAklZWF4KQorCW1vdmwJJWVheCwgKCVlZHgsJWVieCw4KQorTChub19leHRyYSk6CisKKwlwb3BsCSVlYngKKwllbW1zX29yX2ZlbW1zCisJcmV0CisKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s2L21teC9kaXZlXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazYvbW14L2RpdmVfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJiYWQzYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s2L21teC9kaXZlXzEuYXNtCkBAIC0wLDAgKzEsMjgyIEBACitkbmwgIEFNRCBLNiBtcG5fZGl2ZXhhY3RfMSAtLSBtcG4gYnkgbGltYiBleGFjdCBkaXZpc2lvbi4KKworZG5sICBDb3B5cmlnaHQgMjAwMC0yMDAyLCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQyAgICAgICAgIGRpdmlzb3IKK0MgICAgICAgb2RkICAgZXZlbgorQyBLNjogICAxMC4wICAxMi4wICBjeWNsZXMvbGltYgorQyBLNi0yOiAxMC4wICAxMS41CisKKworQyB2b2lkIG1wbl9kaXZleGFjdF8xIChtcF9wdHIgZHN0LCBtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSwKK0MgICAgICAgICAgICAgICAgICAgICAgbXBfbGltYl90IGRpdmlzb3IpOworQworQyBBIHNpbXBsZSBkaXZsIGlzIHVzZWQgZm9yIHNpemU9PTEuICBUaGlzIGlzIGFib3V0IDEwIGN5Y2xlcyBmYXN0ZXIgZm9yIGFuCitDIG9kZCBkaXZpc29yIG9yIDIwIGN5Y2xlcyBmb3IgYW4gZXZlbiBkaXZpc29yLgorQworQyBUaGUgbG9vcHMgYXJlIHF1aXRlIHNlbnNpdGl2ZSB0byBjb2RlIGFsaWdubWVudCwgc3BlZWRzIHNob3VsZCBiZQorQyByZWNoZWNrZWQgKG9kZCBhbmQgZXZlbiBkaXZpc29yLCBwaWMgYW5kIG5vbi1waWMpIGlmIGNvbnRlbXBsYXRpbmcKK0MgY2hhbmdpbmcgYW55dGhpbmcuCisKK2RlZmZyYW1lKFBBUkFNX0RJVklTT1IsMTYpCitkZWZmcmFtZShQQVJBTV9TSVpFLCAgIDEyKQorZGVmZnJhbWUoUEFSQU1fU1JDLCAgICA4KQorZGVmZnJhbWUoUEFSQU1fRFNULCAgICA0KQorCitkbmwgIHJlLXVzZSBwYXJhbWV0ZXIgc3BhY2UKK2RlZmluZShWQVJfSU5WRVJTRSxgUEFSQU1fRFNUJykKKworCVRFWFQKKworCUFMSUdOKDMyKQorUFJPTE9HVUUobXBuX2RpdmV4YWN0XzEpCitkZWZsaXQoYEZSQU1FJywwKQorCisJbW92bAlQQVJBTV9TSVpFLCAlZWN4CisKKwltb3ZsCVBBUkFNX1NSQywgJWVheAorCXhvcmwJJWVkeCwgJWVkeAorCisJY21wbAkkMSwgJWVjeAorCWpueglMKHR3b19vcl9tb3JlKQorCisJbW92bAkoJWVheCksICVlYXgKKworCWRpdmwJUEFSQU1fRElWSVNPUgorCisJbW92bAlQQVJBTV9EU1QsICVlY3gKKwltb3ZsCSVlYXgsICglZWN4KQorCisJcmV0CisKKworTCh0d29fb3JfbW9yZSk6CisJbW92bAlQQVJBTV9ESVZJU09SLCAlZWF4CisJcHVzaGwJJWVieAkJRlJBTUVfcHVzaGwoKQorCisJbW92bAlQQVJBTV9TUkMsICVlYngKKwlwdXNobAklZWJwCQlGUkFNRV9wdXNobCgpCisKK0woc3RyaXBfdHdvcyk6CisJc2hybAklZWF4CisJaW5jbAklZWR4CQkJQyB3aWxsIGdldCBzaGlmdCsxCisKKwlqbmMJTChzdHJpcF90d29zKQorCXB1c2hsCSVlc2kJCUZSQU1FX3B1c2hsKCkKKworCWxlYWwJMSglZWF4LCVlYXgpLCAlZXNpCUMgZCB3aXRob3V0IHR3b3MKKwlhbmRsCSQxMjcsICVlYXgJCUMgZC8yLCA3IGJpdHMKKworaWZkZWYoYFBJQycsYAorCUxFQSgJYmludmVydF9saW1iX3RhYmxlLCAlZWJwKQorWmRpc3AoCW1vdnpibCwJMCwoJWVheCwlZWJwKSwgJWVheCkKKycsYAorCW1vdnpibAliaW52ZXJ0X2xpbWJfdGFibGUoJWVheCksICVlYXgJQyBpbnYgOCBiaXRzCisnKQorCXB1c2hsCSVlZGkJCUZSQU1FX3B1c2hsKCkKKworCWxlYWwJKCVlYXgsJWVheCksICVlYnAJQyAyKmludgorCisJaW11bGwJJWVheCwgJWVheAkJQyBpbnYqaW52CisKKwltb3ZsCVBBUkFNX0RTVCwgJWVkaQorCisJaW11bGwJJWVzaSwgJWVheAkJQyBpbnYqaW52KmQKKworCXN1YmwJJWVheCwgJWVicAkJQyBpbnYgPSAyKmludiAtIGludippbnYqZAorCWxlYWwJKCVlYnAsJWVicCksICVlYXgJQyAyKmludgorCisJaW11bGwJJWVicCwgJWVicAkJQyBpbnYqaW52CisKKwltb3ZsCSVlc2ksIFBBUkFNX0RJVklTT1IJQyBkIHdpdGhvdXQgdHdvcworCWxlYWwJKCVlYngsJWVjeCw0KSwgJWVieAlDIHNyYyBlbmQKKworCWltdWxsCSVlc2ksICVlYnAJCUMgaW52KmludipkCisKKwlsZWFsCSglZWRpLCVlY3gsNCksICVlZGkJQyBkc3QgZW5kCisJbmVnbAklZWN4CQkJQyAtc2l6ZQorCisJc3VibAklZWJwLCAlZWF4CQlDIGludiA9IDIqaW52IC0gaW52KmludipkCisJc3VibAkkMSwgJWVkeAkJQyBzaGlmdCBhbW91bnQsIGFuZCBjbGVhciBjYXJyeQorCisJQVNTRVJUKGUsYAlDIGV4cGVjdCBkKmludiA9PSAxIG1vZCAyXkdNUF9MSU1CX0JJVFMKKwlwdXNobAklZWF4CUZSQU1FX3B1c2hsKCkKKwlpbXVsbAlQQVJBTV9ESVZJU09SLCAlZWF4CisJY21wbAkkMSwgJWVheAorCXBvcGwJJWVheAlGUkFNRV9wb3BsKCknKQorCisJbW92bAklZWF4LCBWQVJfSU5WRVJTRQorCWpueglMKGV2ZW4pCisKKwltb3ZsCSglZWJ4LCVlY3gsNCksICVlc2kJQyBzcmMgbG93IGxpbWIKKwlqbXAJTChvZGRfZW50cnkpCisKKworCUFMSUdOKDE2KQorCW5vcAlDIGNvZGUgYWxpZ25tZW50CitMKG9kZF90b3ApOgorCUMgZWF4CXNjcmF0Y2gKKwlDIGVieAlzcmMgZW5kCisJQyBlY3gJY291bnRlciwgbGltYnMsIG5lZ2F0aXZlCisJQyBlZHgJaW52ZXJzZQorCUMgZXNpCW5leHQgbGltYiwgYWRqdXN0ZWQgZm9yIGNhcnJ5CisJQyBlZGkJZHN0IGVuZAorCUMgZWJwCWNhcnJ5IGJpdCwgMCBvciAtMQorCisJaW11bGwJJWVkeCwgJWVzaQorCisJbW92bAlQQVJBTV9ESVZJU09SLCAlZWF4CisJbW92bAklZXNpLCAtNCglZWRpLCVlY3gsNCkKKworCW11bGwJJWVzaQkJCUMgY2FycnkgbGltYiBpbiBlZHgKKworCXN1YmwJJWVicCwgJWVkeAkJQyBhcHBseSBjYXJyeSBiaXQKKwltb3ZsCSglZWJ4LCVlY3gsNCksICVlc2kKKworTChvZGRfZW50cnkpOgorCXN1YmwJJWVkeCwgJWVzaQkJQyBhcHBseSBjYXJyeSBsaW1iCisJbW92bAlWQVJfSU5WRVJTRSwgJWVkeAorCisJc2JibAklZWJwLCAlZWJwCQlDIDAgb3IgLTEKKworCWluY2wJJWVjeAorCWpueglMKG9kZF90b3ApCisKKworCWltdWxsCSVlZHgsICVlc2kKKworCW1vdmwJJWVzaSwgLTQoJWVkaSwlZWN4LDQpCisKKwlwb3BsCSVlZGkKKwlwb3BsCSVlc2kKKworCXBvcGwJJWVicAorCXBvcGwJJWVieAorCisJcmV0CisKKworTChldmVuKToKKwlDIGVheAorCUMgZWJ4CXNyYyBlbmQKKwlDIGVjeAktc2l6ZQorCUMgZWR4CXR3b3MKKwlDIGVzaQorCUMgZWRpCWRzdCBlbmQKKwlDIGVicAorCisJeG9ybAklZWJwLCAlZWJwCitaZGlzcCgJbW92cSwJMCwoJWVieCwlZWN4LDQpLCAlbW0wKQlDIHNyY1swLDFdCisKKwltb3ZkCSVlZHgsICVtbTcKKwltb3ZsCVZBUl9JTlZFUlNFLCAlZWR4CisKKwlhZGRsCSQyLCAlZWN4CisJcHNybHEJJW1tNywgJW1tMAorCisJbW92ZAklbW0wLCAlZXNpCisJanoJTChldmVuX3R3bykJCUMgaWYgb25seSB0d28gbGltYnMKKworCitDIE91dC1vZi1vcmRlciBleGVjdXRpb24gaXMgZ29vZCBlbm91Z2ggdG8gaGlkZSB0aGUgbG9hZC9yc2hpZnQvbW92ZAorQyBsYXRlbmN5LiAgSGF2aW5nIGltdWwgYXQgdGhlIHRvcCBvZiB0aGUgbG9vcCBnaXZlcyAxMS41IGMvbCBpbnN0ZWFkIG9mIDEyLAorQyBvbiBLNi0yLiAgSW4gZmFjdCB0aGVyZSdzIG9ubHkgMTEgb2YgZGVjb2RlLCBidXQgbm90aGluZyBydW5uaW5nIGF0IDExIGhhcworQyBiZWVuIGZvdW5kLiAgTWF5YmUgdGhlIGZhY3QgZXZlcnkgc2Vjb25kIG1vdnEgaXMgdW5hbGlnbmVkIGNvc3RzIHRoZSBleHRyYQorQyAwLjUuCisKK0woZXZlbl90b3ApOgorCUMgZWF4CXNjcmF0Y2gKKwlDIGVieAlzcmMgZW5kCisJQyBlY3gJY291bnRlciwgbGltYnMsIG5lZ2F0aXZlCisJQyBlZHgJaW52ZXJzZQorCUMgZXNpCW5leHQgbGltYiwgYWRqdXN0ZWQgZm9yIGNhcnJ5CisJQyBlZGkJZHN0IGVuZAorCUMgZWJwCWNhcnJ5IGJpdCwgMCBvciAtMQorCUMKKwlDIG1tMAlzY3JhdGNoLCBzb3VyY2UgbGltYnMKKwlDIG1tNwl0d29zCisKKwlpbXVsbAklZWR4LCAlZXNpCisKKwltb3ZsCSVlc2ksIC04KCVlZGksJWVjeCw0KQorCW1vdmwJUEFSQU1fRElWSVNPUiwgJWVheAorCisJbXVsbAklZXNpCQkJQyBjYXJyeSBsaW1iIGluIGVkeAorCisJbW92cQktNCglZWJ4LCVlY3gsNCksICVtbTAKKwlwc3JscQklbW03LCAlbW0wCisKKwltb3ZkCSVtbTAsICVlc2kKKwlzdWJsCSVlYnAsICVlZHgJCUMgYXBwbHkgY2FycnkgYml0CisKKwlzdWJsCSVlZHgsICVlc2kJCUMgYXBwbHkgY2FycnkgbGltYgorCW1vdmwJVkFSX0lOVkVSU0UsICVlZHgKKworCXNiYmwJJWVicCwgJWVicAkJQyAwIG9yIC0xCisKKwlpbmNsCSVlY3gKKwlqbnoJTChldmVuX3RvcCkKKworCitMKGV2ZW5fdHdvKToKKwltb3ZkCS00KCVlYngpLCAlbW0wCQlDIHNyYyBoaWdoIGxpbWIKKwlwc3JscQklbW03LCAlbW0wCisKKwlpbXVsbAklZWR4LCAlZXNpCisKKwltb3ZsCSVlc2ksIC04KCVlZGkpCisJbW92bAlQQVJBTV9ESVZJU09SLCAlZWF4CisKKwltdWxsCSVlc2kJCQlDIGNhcnJ5IGxpbWIgaW4gZWR4CisKKwltb3ZkCSVtbTAsICVlc2kKKwlzdWJsCSVlYnAsICVlZHgJCUMgYXBwbHkgY2FycnkgYml0CisKKwltb3ZsCVZBUl9JTlZFUlNFLCAlZWF4CisJc3VibAklZWR4LCAlZXNpCQlDIGFwcGx5IGNhcnJ5IGxpbWIKKworCWltdWxsCSVlYXgsICVlc2kKKworCW1vdmwJJWVzaSwgLTQoJWVkaSkKKworCXBvcGwJJWVkaQorCXBvcGwJJWVzaQorCisJcG9wbAklZWJwCisJcG9wbAklZWJ4CisKKwllbW1zX29yX2ZlbW1zCisKKwlyZXQKKworRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNi9tbXgvbG9nb3BzX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazYvbW14L2xvZ29wc19uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTc5MzBiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazYvbW14L2xvZ29wc19uLmFzbQpAQCAtMCwwICsxLDIyNiBAQAorZG5sICBBTUQgSzYtMiBtcG5fYW5kX24sIG1wbl9hbmRuX24sIG1wbl9uYW5kX24sIG1wbl9pb3JfbiwgbXBuX2lvcm5fbiwKK2RubCAgbXBuX25pb3JfbiwgbXBuX3hvcl9uLCBtcG5feG5vcl9uIC0tIG1wbiBiaXR3aXNlIGxvZ2ljYWwgb3BlcmF0aW9ucy4KKworZG5sICBDb3B5cmlnaHQgMTk5OS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK05BSUxTX1NVUFBPUlQoMC0zMSkKKworCitDICAgICAgICAgYWxpZ25tZW50IGRzdC9zcmMxL3NyYzIsIEE9MG1vZDgsIE49NG1vZDgKK0MgICAgICBBL0EvQSBBL0EvTiBBL04vQSBBL04vTiBOL0EvQSBOL0EvTiBOL04vQSBOL04vTgorQworQyBLNi0yICAxLjIgICAxLjUgICAxLjUgICAxLjIgICAxLjIgICAxLjUgICAxLjUgICAxLjIgICBhbmQsYW5kbixpb3IseG9yCitDIEs2LTIgIDEuNSAgIDEuNzUgIDIuMCAgIDEuNzUgIDEuNzUgIDIuMCAgIDEuNzUgIDEuNSAgIGlvcm4seG5vcgorQyBLNi0yICAxLjc1ICAyLjAgICAyLjAgICAyLjAgICAyLjAgICAyLjAgICAyLjAgICAxLjc1ICBuYW5kLG5pb3IKK0MKK0MgSzYgICAgMS41ICAgMS42OCAgMS43NSAgMS4yICAgMS43NSAgMS43NSAgMS42OCAgMS41ICAgYW5kLGFuZG4saW9yLHhvcgorQyBLNiAgICAyLjAgICAyLjAgICAyLjI1ICAyLjI1ICAyLjI1ICAyLjI1ICAyLjAgICAyLjAgICBpb3JuLHhub3IKK0MgSzYgICAgMi4wICAgMi4yNSAgMi4yNSAgMi4yNSAgMi4yNSAgMi4yNSAgMi4yNSAgMi4wICAgbmFuZCxuaW9yCisKKworZG5sICBNNF9wIGFuZCBNNF9pIGFyZSB0aGUgTU1YIGFuZCBpbnRlZ2VyIGluc3RydWN0aW9ucworZG5sICBNNF8qX25lZ19kc3QgbWVhbnMgd2hldGhlciB0byBuZWdhdGUgdGhlIGZpbmFsIHJlc3VsdCBiZWZvcmUgd3JpdGluZworZG5sICBNNF8qX25lZ19zcmMyIG1lYW5zIHdoZXRoZXIgdG8gbmVnYXRlIHRoZSBzcmMyIHZhbHVlcyBiZWZvcmUgdXNpbmcgdGhlbQorCitkZWZpbmUoTTRfY2hvb3NlX29wLAorbTRfYXNzZXJ0X251bWFyZ3MoNykKK2BpZmRlZihgT1BFUkFUSU9OXyQxJyxgCitkZWZpbmUoYE00X2Z1bmN0aW9uJywgIGBtcG5fJDEnKQorZGVmaW5lKGBNNF9vcGVyYXRpb24nLCBgJDEnKQorZGVmaW5lKGBNNF9wJywgICAgICAgICBgJDInKQorZGVmaW5lKGBNNF9wX25lZ19kc3QnLCBgJDMnKQorZGVmaW5lKGBNNF9wX25lZ19zcmMyJyxgJDQnKQorZGVmaW5lKGBNNF9pJywgICAgICAgICBgJDUnKQorZGVmaW5lKGBNNF9pX25lZ19kc3QnLCBgJDYnKQorZGVmaW5lKGBNNF9pX25lZ19zcmMyJyxgJDcnKQorJyknKQorCitkbmwgIHhub3IgaXMgZG9uZSBpbiAiaW9ybiIgc3R5bGUgYmVjYXVzZSBpdCdzIGEgdG91Y2ggZmFzdGVyIHRoYW4gIm5pb3IiCitkbmwgIHN0eWxlICh0aGUgdHdvIGFyZSBlcXVpdmFsZW50IGZvciB4b3IpLgorZG5sCitkbmwgIHBhbmRuIGNhbid0IGJlIHVzZWQgd2l0aCBuYWlscy4KKworTTRfY2hvb3NlX29wKCBhbmRfbiwgIHBhbmQsMCwwLCAgYW5kbCwwLDApCitpZmVsc2UoR01QX05BSUxfQklUUywwLAorYE00X2Nob29zZV9vcChhbmRuX24sIHBhbmRuLDAsMCwgYW5kbCwwLDEpJywKK2BNNF9jaG9vc2Vfb3AoYW5kbl9uLCBwYW5kLDAsMSwgIGFuZGwsMCwxKScpCitNNF9jaG9vc2Vfb3AoIG5hbmRfbiwgcGFuZCwxLDAsICBhbmRsLDEsMCkKK000X2Nob29zZV9vcCggaW9yX24sICBwb3IsMCwwLCAgIG9ybCwwLDApCitNNF9jaG9vc2Vfb3AoIGlvcm5fbiwgcG9yLDAsMSwgICBvcmwsMCwxKQorTTRfY2hvb3NlX29wKCBuaW9yX24sIHBvciwxLDAsICAgb3JsLDEsMCkKK000X2Nob29zZV9vcCggeG9yX24sICBweG9yLDAsMCwgIHhvcmwsMCwwKQorTTRfY2hvb3NlX29wKCB4bm9yX24sIHB4b3IsMCwxLCAgeG9ybCwwLDEpCisKK2lmZGVmKGBNNF9mdW5jdGlvbicsLAorYG00X2Vycm9yKGBVbnJlY29nbmlzZWQgb3IgdW5kZWZpbmVkIE9QRVJBVElPTiBzeW1ib2wKKycpJykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fYW5kX24gbXBuX2FuZG5fbiBtcG5fbmFuZF9uIG1wbl9pb3JfbiBtcG5faW9ybl9uIG1wbl9uaW9yX24gbXBuX3hvcl9uIG1wbl94bm9yX24pCisKKworQyB2b2lkIE00X2Z1bmN0aW9uIChtcF9wdHIgZHN0LCBtcF9zcmNwdHIgc3JjMSwgbXBfc3JjcHRyIHNyYzIsCitDICAgICAgICAgICAgICAgICAgIG1wX3NpemVfdCBzaXplKTsKK0MKK0MgRG8gc3JjMSxzaXplIE00X29wZXJhdGlvbiBzcmMyLHNpemUsIHN0b3JpbmcgdGhlIHJlc3VsdCBpbiBkc3Qsc2l6ZS4KK0MKK0MgVW5hbGlnbmVkIG1vdnEgbG9hZHMgYW5kIHN0b3JlcyBhcmUgYSBiaXQgc2xvd2VyIHRoYW4gYWxpZ25lZCBvbmVzLiAgVGhlCitDIHRlc3QgYXQgdGhlIHN0YXJ0IG9mIHRoZSByb3V0aW5lIGNoZWNrcyB0aGUgYWxpZ25tZW50IG9mIHNyYzEgYW5kIGlmCitDIG5lY2Vzc2FyeSBwcm9jZXNzZXMgb25lIGxpbWIgc2VwYXJhdGVseSBhdCB0aGUgbG93IGVuZCB0byBtYWtlIGl0IGFsaWduZWQuCitDCitDIFRoZSByYXcgc3BlZWRzIHdpdGhvdXQgdGhpcyBhbGlnbm1lbnQgc3dpdGNoIGFyZSBhcyBmb2xsb3dzLgorQworQyAgICAgICAgICAgYWxpZ25tZW50IGRzdC9zcmMxL3NyYzIsIEE9MG1vZDgsIE49NG1vZDgKK0MgICAgIEEvQS9BICBBL0EvTiAgQS9OL0EgIEEvTi9OICBOL0EvQSAgTi9BL04gIE4vTi9BICBOL04vTgorQworQyBLNiAgICAgICAgICAgICAgICAgMS41ICAgIDIuMCAgICAgICAgICAgICAgICAgMS41ICAgIDIuMCAgICBhbmQsYW5kbixpb3IseG9yCitDIEs2ICAgICAgICAgICAgICAgICAxLjc1ICAgMi4yICAgICAgICAgICAgICAgICAyLjAgICAgMi4yOCAgIGlvcm4seG5vcgorQyBLNiAgICAgICAgICAgICAgICAgMi4wICAgIDIuMjUgICAgICAgICAgICAgICAgMi4zNSAgIDIuMjggICBuYW5kLG5pb3IKK0MKK0MKK0MgRnV0dXJlOgorQworQyBLNiBjYW4gZG8gb25lIDY0LWJpdCBsb2FkIHBlciBjeWNsZSBzbyBlYWNoIG9mIHRoZXNlIHJvdXRpbmVzIHNob3VsZCBiZQorQyBhYmxlIHRvIGFwcHJvYWNoIDEuMCBjL2wsIGlmIGFsaWduZWQuICBUaGUgYmFzaWMgYW5kL2FuZG4vaW9yL3hvciBtaWdodCBiZQorQyBhYmxlIHRvIGdldCAxLjAgd2l0aCBqdXN0IGEgNCBsaW1iIGxvb3AsIGJlaW5nIDMgaW5zdHJ1Y3Rpb25zIHBlciAyIGxpbWJzLgorQyBUaGUgb3RoZXJzIGFyZSA0IGluc3RydWN0aW9ucyBwZXIgMiBsaW1icywgYW5kIHNvIGNhbiBvbmx5IGFwcHJvYWNoIDEuMAorQyBiZWNhdXNlIHRoZXJlJ3Mgbm93aGVyZSB0byBoaWRlIHNvbWUgbG9vcCBjb250cm9sLgorCitkZWZmcmFtZShQQVJBTV9TSVpFLDE2KQorZGVmZnJhbWUoUEFSQU1fU1JDMiwxMikKK2RlZmZyYW1lKFBBUkFNX1NSQzEsOCkKK2RlZmZyYW1lKFBBUkFNX0RTVCwgNCkKK2RlZmxpdChgRlJBTUUnLDApCisKKwlURVhUCisJQUxJR04oMzIpCitQUk9MT0dVRShNNF9mdW5jdGlvbikKKwkJCW1vdmwJUEFSQU1fU0laRSwgJWVjeAorCQkJcHVzaGwJJWVieAkJRlJBTUVfcHVzaGwoKQorCisJCQltb3ZsCVBBUkFNX1NSQzEsICVlYXgKKworCQkJbW92bAlQQVJBTV9TUkMyLCAlZWJ4CisJCQljbXBsCSQxLCAlZWN4CisKKwkJCW1vdmwJUEFSQU1fRFNULCAlZWR4CisJCQlqYQlMKHR3b19vcl9tb3JlKQorCisKKwkJCW1vdmwJKCVlYngpLCAlZWN4CisJCQlwb3BsCSVlYngKK2lmZWxzZShNNF9pX25lZ19zcmMyLDEsYG5vdGxfb3JfeG9ybF9HTVBfTlVNQl9NQVNLKAklZWN4KScpCisJCQlNNF9pCSglZWF4KSwgJWVjeAoraWZlbHNlKE00X2lfbmVnX2RzdCwxLGAJbm90bF9vcl94b3JsX0dNUF9OVU1CX01BU0soCSVlY3gpJykKKwkJCW1vdmwJJWVjeCwgKCVlZHgpCisKKwkJCXJldAorCisKK0wodHdvX29yX21vcmUpOgorCQkJQyBlYXgJc3JjMQorCQkJQyBlYngJc3JjMgorCQkJQyBlY3gJc2l6ZQorCQkJQyBlZHgJZHN0CisJCQlDIGVzaQorCQkJQyBlZGkKKwkJCUMgZWJwCisKKwkJCXB1c2hsCSVlc2kJCUZSQU1FX3B1c2hsKCkKKwkJCXRlc3RsCSQ0LCAlZWF4CisJCQlqeglMKGFsaWdubWVudF9vaykKKworCQkJbW92bAkoJWVieCksICVlc2kKKwkJCWFkZGwJJDQsICVlYngKK2lmZWxzZShNNF9pX25lZ19zcmMyLDEsYG5vdGxfb3JfeG9ybF9HTVBfTlVNQl9NQVNLKAklZXNpKScpCisJCQlNNF9pCSglZWF4KSwgJWVzaQorCQkJYWRkbAkkNCwgJWVheAoraWZlbHNlKE00X2lfbmVnX2RzdCwxLGAJbm90bF9vcl94b3JsX0dNUF9OVU1CX01BU0soCSVlc2kpJykKKwkJCW1vdmwJJWVzaSwgKCVlZHgpCisJCQlhZGRsCSQ0LCAlZWR4CisJCQlkZWNsCSVlY3gKKworTChhbGlnbm1lbnRfb2spOgorCQkJbW92bAklZWN4LCAlZXNpCisJCQlzaHJsCSVlY3gKKwkJCWpueglMKHN0aWxsX3R3b19vcl9tb3JlKQorCisJCQltb3ZsCSglZWJ4KSwgJWVjeAorCQkJcG9wbAklZXNpCitpZmVsc2UoTTRfaV9uZWdfc3JjMiwxLGBub3RsX29yX3hvcmxfR01QX05VTUJfTUFTSygJJWVjeCknKQorCQkJTTRfaQkoJWVheCksICVlY3gKK2lmZWxzZShNNF9pX25lZ19kc3QsMSxgCW5vdGxfb3JfeG9ybF9HTVBfTlVNQl9NQVNLKAklZWN4KScpCisJCQlwb3BsCSVlYngKKwkJCW1vdmwJJWVjeCwgKCVlZHgpCisJCQlyZXQKKworCitMKHN0aWxsX3R3b19vcl9tb3JlKToKK2lmZWxzZShldmFsKE00X3BfbmVnX3NyYzIgfHwgTTRfcF9uZWdfZHN0KSwxLGAKKwkJCXBjbXBlcWQJJW1tNywgJW1tNwkJQyBhbGwgb25lcworaWZlbHNlKEdNUF9OQUlMX0JJVFMsMCwsYHBzcmxkCSRHTVBfTkFJTF9CSVRTLCAlbW03JykJQyBjbGVhciBuYWlscworJykKKworCQkJQUxJR04oMTYpCitMKHRvcCk6CisJCQlDIGVheAlzcmMxCisJCQlDIGVieAlzcmMyCisJCQlDIGVjeAljb3VudGVyCisJCQlDIGVkeAlkc3QKKwkJCUMgZXNpCisJCQlDIGVkaQorCQkJQyBlYnAKKwkJCUMKKwkJCUMgY2FycnkgYml0IGlzIGxvdyBvZiBzaXplCisKKwkJCW1vdnEJLTgoJWVieCwlZWN4LDgpLCAlbW0wCitpZmVsc2UoTTRfcF9uZWdfc3JjMiwxLGBweG9yCSVtbTcsICVtbTAnKQorCQkJTTRfcAktOCglZWF4LCVlY3gsOCksICVtbTAKK2lmZWxzZShNNF9wX25lZ19kc3QsMSxgCXB4b3IJJW1tNywgJW1tMCcpCisJCQltb3ZxCSVtbTAsIC04KCVlZHgsJWVjeCw4KQorCisJCQlsb29wCUwodG9wKQorCisKKwkJCWpuYwlMKG5vX2V4dHJhKQorCisJCQltb3ZsCS00KCVlYngsJWVzaSw0KSwgJWVieAoraWZlbHNlKE00X2lfbmVnX3NyYzIsMSxgbm90bF9vcl94b3JsX0dNUF9OVU1CX01BU0soCSVlYngpJykKKwkJCU00X2kJLTQoJWVheCwlZXNpLDQpLCAlZWJ4CitpZmVsc2UoTTRfaV9uZWdfZHN0LDEsYAlub3RsX29yX3hvcmxfR01QX05VTUJfTUFTSygJJWVieCknKQorCQkJbW92bAklZWJ4LCAtNCglZWR4LCVlc2ksNCkKK0wobm9fZXh0cmEpOgorCisJCQlwb3BsCSVlc2kKKwkJCXBvcGwJJWVieAorCQkJZW1tc19vcl9mZW1tcworCQkJcmV0CisKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s2L21teC9sc2hpZnQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazYvbW14L2xzaGlmdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDViZTU4MgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s2L21teC9sc2hpZnQuYXNtCkBAIC0wLDAgKzEsMTMwIEBACitkbmwgIEFNRCBLNiBtcG5fbHNoaWZ0IC0tIG1wbiBsZWZ0IHNoaWZ0LgorCitkbmwgIENvcHlyaWdodCAxOTk5LCAyMDAwLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQyBLNjogMy4wIGN5Y2xlcy9saW1iCisKKworQyBtcF9saW1iX3QgbXBuX2xzaGlmdCAobXBfcHRyIGRzdCwgbXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUsCitDICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaGlmdCk7CitDCitDIFRoZSBsb29wIHJ1bnMgYXQgMyBjeWNsZXMvbGltYiwgbGltaXRlZCBieSBkZWNvZGluZyBhbmQgYnkgaGF2aW5nIDMgbW14CitDIGluc3RydWN0aW9ucy4gIFRoaXMgaXMgZGVzcGl0ZSBldmVyeSBzZWNvbmQgZmV0Y2ggYmVpbmcgdW5hbGlnbmVkLgorCisKK2RlZmZyYW1lKFBBUkFNX1NISUZULDE2KQorZGVmZnJhbWUoUEFSQU1fU0laRSwgMTIpCitkZWZmcmFtZShQQVJBTV9TUkMsICA4KQorZGVmZnJhbWUoUEFSQU1fRFNULCAgNCkKKworCVRFWFQKKwlBTElHTigzMikKKworUFJPTE9HVUUobXBuX2xzaGlmdCkKK2RlZmxpdChgRlJBTUUnLDApCisKKwlDIFRoZSAxIGxpbWIgY2FzZSBjYW4gYmUgZG9uZSB3aXRob3V0IHRoZSBwdXNoICVlYngsIGJ1dCBpdCdzIHRoZW4KKwlDIHN0aWxsIHRoZSBzYW1lIHNwZWVkLiAgVGhlIHB1c2ggaXMgbGVmdCBhcyBhIGZyZWUgaGVscGluZyBoYW5kIGZvcgorCUMgdGhlIHR3b19vcl9tb3JlIGNvZGUuCisKKwltb3ZsCVBBUkFNX1NJWkUsICVlYXgKKwlwdXNobAklZWJ4CQkJRlJBTUVfcHVzaGwoKQorCisJbW92bAlQQVJBTV9TUkMsICVlYngKKwlkZWNsCSVlYXgKKworCW1vdmwJUEFSQU1fU0hJRlQsICVlY3gKKwlqbnoJTCh0d29fb3JfbW9yZSkKKworCW1vdmwJKCVlYngpLCAlZWR4CQlDIHNyYyBsaW1iCisJbW92bAlQQVJBTV9EU1QsICVlYngKKworCXNobGRsKAklY2wsICVlZHgsICVlYXgpCUMgcmV0dXJuIHZhbHVlCisKKwlzaGxsCSVjbCwgJWVkeAorCisJbW92bAklZWR4LCAoJWVieCkJCUMgZHN0IGxpbWIKKwlwb3BsCSVlYngKKworCXJldAorCisKKwlBTElHTigxNikJQyBhdm9pZCBvZmZzZXQgMHgxZgorCW5vcAkJQyBhdm9pZCBiYWQgY2FjaGUgbGluZSBjcm9zc2luZworTCh0d29fb3JfbW9yZSk6CisJQyBlYXgJc2l6ZS0xCisJQyBlYngJc3JjCisJQyBlY3gJc2hpZnQKKwlDIGVkeAorCisJbW92bAkoJWVieCwlZWF4LDQpLCAlZWR4CUMgc3JjIGhpZ2ggbGltYgorCW5lZ2wJJWVjeAorCisJbW92ZAlQQVJBTV9TSElGVCwgJW1tNgorCWFkZGwJJDMyLCAlZWN4CQlDIDMyLXNoaWZ0CisKKwlzaHJsCSVjbCwgJWVkeAorCisJbW92ZAklZWN4LCAlbW03CisJbW92bAlQQVJBTV9EU1QsICVlY3gKKworTCh0b3ApOgorCUMgZWF4CWNvdW50ZXIsIHNpemUtMSB0byAxCisJQyBlYngJc3JjCisJQyBlY3gJZHN0CisJQyBlZHgJcmV0dmFsCisJQworCUMgbW0wCXNjcmF0Y2gKKwlDIG1tNglzaGlmdAorCUMgbW03CTMyLXNoaWZ0CisKKwltb3ZxCS00KCVlYngsJWVheCw0KSwgJW1tMAorCWRlY2wJJWVheAorCisJcHNybHEJJW1tNywgJW1tMAorCisJbW92ZAklbW0wLCA0KCVlY3gsJWVheCw0KQorCWpueglMKHRvcCkKKworCisJbW92ZAkoJWVieCksICVtbTAKKwlwb3BsCSVlYngKKworCXBzbGxxCSVtbTYsICVtbTAKKwltb3ZsCSVlZHgsICVlYXgKKworCW1vdmQJJW1tMCwgKCVlY3gpCisKKwllbW1zCisJcmV0CisKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s2L21teC9wb3BoYW0uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazYvbW14L3BvcGhhbS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIxOWQwYgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s2L21teC9wb3BoYW0uYXNtCkBAIC0wLDAgKzEsMjM2IEBACitkbmwgIEFNRCBLNi0yIG1wbl9wb3Bjb3VudCwgbXBuX2hhbWRpc3QgLS0gbXBuIGJpdCBwb3B1bGF0aW9uIGNvdW50IGFuZAorZG5sICBoYW1taW5nIGRpc3RhbmNlLgorCitkbmwgIENvcHlyaWdodCAyMDAwLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDICAgICAgICBwb3Bjb3VudCAgaGFtZGlzdAorQyBLNi0yOiAgICA5LjAgICAgICAgMTEuNSAgIGN5Y2xlcy9saW1iCitDIEs2OiAgICAgIDEyLjUgICAgICAxMy4wCisKKworQyB1bnNpZ25lZCBsb25nIG1wbl9wb3Bjb3VudCAobXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUpOworQyB1bnNpZ25lZCBsb25nIG1wbl9oYW1kaXN0IChtcF9zcmNwdHIgc3JjLCBtcF9zcmNwdHIgc3JjMiwgbXBfc2l6ZV90IHNpemUpOworQworQyBUaGUgY29kZSBoZXJlIGlzbid0IG9wdGltYWwsIGJ1dCBpdCdzIGFscmVhZHkgYSAyeCBzcGVlZHVwIG92ZXIgdGhlIHBsYWluCitDIGludGVnZXIgbXBuL2dlbmVyaWMvcG9wY291bnQuYyxoYW1kaXN0LmMuCisKKworaWZkZWYoYE9QRVJBVElPTl9wb3Bjb3VudCcsLAorYGlmZGVmKGBPUEVSQVRJT05faGFtZGlzdCcsLAorYG00X2Vycm9yKGBOZWVkIE9QRVJBVElPTl9wb3Bjb3VudCBvciBPUEVSQVRJT05faGFtZGlzdAorJyltNGV4aXQoMSknKScpCisKK2RlZmluZShIQU0sCittNF9hc3NlcnRfbnVtYXJncygxKQorYGlmZGVmKGBPUEVSQVRJT05faGFtZGlzdCcsYCQxJyknKQorCitkZWZpbmUoUE9QLAorbTRfYXNzZXJ0X251bWFyZ3MoMSkKK2BpZmRlZihgT1BFUkFUSU9OX3BvcGNvdW50JyxgJDEnKScpCisKK0hBTShgCitkZWZmcmFtZShQQVJBTV9TSVpFLCAgIDEyKQorZGVmZnJhbWUoUEFSQU1fU1JDMiwgICA4KQorZGVmZnJhbWUoUEFSQU1fU1JDLCAgICA0KQorZGVmaW5lKE00X2Z1bmN0aW9uLG1wbl9oYW1kaXN0KQorJykKK1BPUChgCitkZWZmcmFtZShQQVJBTV9TSVpFLCAgIDgpCitkZWZmcmFtZShQQVJBTV9TUkMsICAgIDQpCitkZWZpbmUoTTRfZnVuY3Rpb24sbXBuX3BvcGNvdW50KQorJykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fcG9wY291bnQgbXBuX2hhbWRpc3QpCisKKworaWZkZWYoYFBJQycsLGAKKwlkbmwgIG5vbi1QSUMKKworCVJPREFUQQorCUFMSUdOKDgpCisKK0wocm9kYXRhX0FBQUFBQUFBQUFBQUFBQUEpOgorCS5sb25nCTB4QUFBQUFBQUEKKwkubG9uZwkweEFBQUFBQUFBCisKK0wocm9kYXRhXzMzMzMzMzMzMzMzMzMzMzMpOgorCS5sb25nCTB4MzMzMzMzMzMKKwkubG9uZwkweDMzMzMzMzMzCisKK0wocm9kYXRhXzBGMEYwRjBGMEYwRjBGMEYpOgorCS5sb25nCTB4MEYwRjBGMEYKKwkubG9uZwkweDBGMEYwRjBGCisKK0wocm9kYXRhXzAwMDAwMEZGMDAwMDAwRkYpOgorCS5sb25nCTB4MDAwMDAwRkYKKwkubG9uZwkweDAwMDAwMEZGCisnKQorCisJVEVYVAorCUFMSUdOKDMyKQorCitQT1AoYGlmZGVmKGBQSUMnLCBgCisJQyBhdm9pZCBzaHJsIGNyb3NzaW5nIGEgMzItYnl0ZSBib3VuZGFyeQorCW5vcCcpJykKKworUFJPTE9HVUUoTTRfZnVuY3Rpb24pCitkZWZsaXQoYEZSQU1FJywwKQorCisJbW92bAlQQVJBTV9TSVpFLCAlZWN4CisKK2lmZGVmKGBQSUMnLGAKKwltb3ZsCSQweEFBQUFBQUFBLCAlZWF4CisJbW92bAkkMHgzMzMzMzMzMywgJWVkeAorCisJbW92ZAklZWF4LCAlbW03CisJbW92ZAklZWR4LCAlbW02CisKKwltb3ZsCSQweDBGMEYwRjBGLCAlZWF4CisJbW92bAkkMHgwMDAwMDBGRiwgJWVkeAorCisJcHVucGNrbGRxICVtbTcsICVtbTcKKwlwdW5wY2tsZHEgJW1tNiwgJW1tNgorCisJbW92ZAklZWF4LCAlbW01CisJbW92ZAklZWR4LCAlbW00CisKKwlwdW5wY2tsZHEgJW1tNSwgJW1tNQorCXB1bnBja2xkcSAlbW00LCAlbW00CisnLGAKKworCW1vdnEJTChyb2RhdGFfQUFBQUFBQUFBQUFBQUFBQSksICVtbTcKKwltb3ZxCUwocm9kYXRhXzMzMzMzMzMzMzMzMzMzMzMpLCAlbW02CisJbW92cQlMKHJvZGF0YV8wRjBGMEYwRjBGMEYwRjBGKSwgJW1tNQorCW1vdnEJTChyb2RhdGFfMDAwMDAwRkYwMDAwMDBGRiksICVtbTQKKycpCisKK2RlZmluZShSRUdfQUFBQUFBQUFBQUFBQUFBQSwgJW1tNykKK2RlZmluZShSRUdfMzMzMzMzMzMzMzMzMzMzMywgJW1tNikKK2RlZmluZShSRUdfMEYwRjBGMEYwRjBGMEYwRiwgJW1tNSkKK2RlZmluZShSRUdfMDAwMDAwRkYwMDAwMDBGRiwgJW1tNCkKKworCisJbW92bAlQQVJBTV9TUkMsICVlYXgKK0hBTShgCW1vdmwJUEFSQU1fU1JDMiwgJWVkeCcpCisKKwlweG9yCSVtbTIsICVtbTIJQyB0b3RhbAorCisJc2hybAklZWN4CisJam5jCUwodG9wKQorCitaZGlzcCgJbW92ZCwJMCwoJWVheCwlZWN4LDgpLCAlbW0xKQorCitIQU0oYAorWmRpc3AoCW1vdmQsCTAsKCVlZHgsJWVjeCw4KSwgJW1tMCkKKwlweG9yCSVtbTAsICVtbTEKKycpCisKKwlpbmNsCSVlY3gKKwlqbXAJTChsb2FkZWQpCisKKworCUFMSUdOKDE2KQorUE9QKGAJbm9wCUMgYWxpZ25tZW50IHRvIGF2b2lkIGNyb3NzaW5nIDMyLWJ5dGUgYm91bmRhcmllcycpCisKK0wodG9wKToKKwlDIGVheAlzcmMKKwlDIGVieAorCUMgZWN4CWNvdW50ZXIsIHF3b3JkcywgZGVjcmVtZW50aW5nCisJQyBlZHgJW2hhbWRpc3RdIHNyYzIKKwlDCisJQyBtbTAJKHNjcmF0Y2gpCisJQyBtbTEJKHNjcmF0Y2gpCisJQyBtbTIJdG90YWwgKGxvdyBkd29yZCkKKwlDIG1tMworCUMgbW00CVwKKwlDIG1tNQl8IHNwZWNpYWwgY29uc3RhbnRzCisJQyBtbTYJfAorCUMgbW03CS8KKworCW1vdnEJLTgoJWVheCwlZWN4LDgpLCAlbW0xCitIQU0oYAlweG9yCS04KCVlZHgsJWVjeCw4KSwgJW1tMScpCisKK0wobG9hZGVkKToKKwltb3ZxCSVtbTEsICVtbTAKKwlwYW5kCVJFR19BQUFBQUFBQUFBQUFBQUFBLCAlbW0xCisKKwlwc3JscQkkMSwgJW1tMQorSEFNKGAJbm9wCQkJQyBjb2RlIGFsaWdubWVudCcpCisKKwlwc3ViZAklbW0xLCAlbW0wCUMgYml0IHBhaXJzCitIQU0oYAlub3AJCQlDIGNvZGUgYWxpZ25tZW50JykKKworCisJbW92cQklbW0wLCAlbW0xCisJcHNybHEJJDIsICVtbTAKKworCXBhbmQJUkVHXzMzMzMzMzMzMzMzMzMzMzMsICVtbTAKKwlwYW5kCVJFR18zMzMzMzMzMzMzMzMzMzMzLCAlbW0xCisKKwlwYWRkZAklbW0xLCAlbW0wCUMgbmliYmxlcworCisKKwltb3ZxCSVtbTAsICVtbTEKKwlwc3JscQkkNCwgJW1tMAorCisJcGFuZAlSRUdfMEYwRjBGMEYwRjBGMEYwRiwgJW1tMAorCXBhbmQJUkVHXzBGMEYwRjBGMEYwRjBGMEYsICVtbTEKKworCXBhZGRkCSVtbTEsICVtbTAJQyBieXRlcworCisJbW92cQklbW0wLCAlbW0xCisJcHNybHEJJDgsICVtbTAKKworCisJcGFkZGIJJW1tMSwgJW1tMAlDIHdvcmRzCisKKworCW1vdnEJJW1tMCwgJW1tMQorCXBzcmxxCSQxNiwgJW1tMAorCisJcGFkZGQJJW1tMSwgJW1tMAlDIGR3b3JkcworCisJcGFuZAlSRUdfMDAwMDAwRkYwMDAwMDBGRiwgJW1tMAorCisJcGFkZGQJJW1tMCwgJW1tMglDIGxvdyB0byB0b3RhbAorCXBzcmxxCSQzMiwgJW1tMAorCisJcGFkZGQJJW1tMCwgJW1tMglDIGhpZ2ggdG8gdG90YWwKKwlsb29wCUwodG9wKQorCisKKworCW1vdmQJJW1tMiwgJWVheAorCWVtbXNfb3JfZmVtbXMKKwlyZXQKKworRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazYvbW14L3JzaGlmdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNi9tbXgvcnNoaWZ0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDAzODJmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazYvbW14L3JzaGlmdC5hc20KQEAgLTAsMCArMSwxMzAgQEAKK2RubCAgQU1EIEs2IG1wbl9yc2hpZnQgLS0gbXBuIHJpZ2h0IHNoaWZ0LgorCitkbmwgIENvcHlyaWdodCAxOTk5LCAyMDAwLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQyBLNjogMy4wIGN5Y2xlcy9saW1iCisKKworQyBtcF9saW1iX3QgbXBuX3JzaGlmdCAobXBfcHRyIGRzdCwgbXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUsCitDICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaGlmdCk7CitDCitDIFRoZSBsb29wIHJ1bnMgYXQgMyBjeWNsZXMvbGltYiwgbGltaXRlZCBieSBkZWNvZGluZyBhbmQgYnkgaGF2aW5nIDMgbW14CitDIGluc3RydWN0aW9ucy4gIFRoaXMgaXMgZGVzcGl0ZSBldmVyeSBzZWNvbmQgZmV0Y2ggYmVpbmcgdW5hbGlnbmVkLgorCisKK2RlZmZyYW1lKFBBUkFNX1NISUZULDE2KQorZGVmZnJhbWUoUEFSQU1fU0laRSwgMTIpCitkZWZmcmFtZShQQVJBTV9TUkMsICA4KQorZGVmZnJhbWUoUEFSQU1fRFNULCAgNCkKK2RlZmxpdChgRlJBTUUnLDApCisKKwlURVhUCisJQUxJR04oMzIpCisKK1BST0xPR1VFKG1wbl9yc2hpZnQpCitkZWZsaXQoYEZSQU1FJywwKQorCisJQyBUaGUgMSBsaW1iIGNhc2UgY2FuIGJlIGRvbmUgd2l0aG91dCB0aGUgcHVzaCAlZWJ4LCBidXQgaXQncyB0aGVuCisJQyBzdGlsbCB0aGUgc2FtZSBzcGVlZC4gIFRoZSBwdXNoIGlzIGxlZnQgYXMgYSBmcmVlIGhlbHBpbmcgaGFuZCBmb3IKKwlDIHRoZSB0d29fb3JfbW9yZSBjb2RlLgorCisJbW92bAlQQVJBTV9TSVpFLCAlZWF4CisJcHVzaGwJJWVieAkJCUZSQU1FX3B1c2hsKCkKKworCW1vdmwJUEFSQU1fU1JDLCAlZWJ4CisJZGVjbAklZWF4CisKKwltb3ZsCVBBUkFNX1NISUZULCAlZWN4CisJam56CUwodHdvX29yX21vcmUpCisKKwltb3ZsCSglZWJ4KSwgJWVkeAkJQyBzcmMgbGltYgorCW1vdmwJUEFSQU1fRFNULCAlZWJ4CisKKwlzaHJkbCgJJWNsLCAlZWR4LCAlZWF4KQlDIHJldHVybiB2YWx1ZQorCisJc2hybAklY2wsICVlZHgKKworCW1vdmwJJWVkeCwgKCVlYngpCQlDIGRzdCBsaW1iCisJcG9wbAklZWJ4CisKKwlyZXQKKworCisJQUxJR04oMTYpCUMgYXZvaWQgb2Zmc2V0IDB4MWYKK0wodHdvX29yX21vcmUpOgorCUMgZWF4CXNpemUtMQorCUMgZWJ4CXNyYworCUMgZWN4CXNoaWZ0CisJQyBlZHgKKworCW1vdmwJKCVlYngpLCAlZWR4CUMgc3JjIGxvdyBsaW1iCisJbmVnbAklZWN4CisKKwlhZGRsCSQzMiwgJWVjeAlDIDMyLXNoaWZ0CisJbW92ZAlQQVJBTV9TSElGVCwgJW1tNgorCisJc2hsbAklY2wsICVlZHgJQyByZXR2YWwKKwltb3ZsCVBBUkFNX0RTVCwgJWVjeAorCisJbGVhbAkoJWVieCwlZWF4LDQpLCAlZWJ4CisKKwlsZWFsCS00KCVlY3gsJWVheCw0KSwgJWVjeAorCW5lZ2wJJWVheAorCisKK0woc2ltcGxlKToKKwlDIGVheAljb3VudGVyIChuZWdhdGl2ZSkKKwlDIGVieAkmc3JjW3NpemUtMV0KKwlDIGVjeAkmZHN0W3NpemUtMV0KKwlDIGVkeAlyZXR2YWwKKwlDCisJQyBtbTAJc2NyYXRjaAorCUMgbW02CXNoaWZ0CisKK1pkaXNwKAltb3ZxLAkwLCglZWJ4LCVlYXgsNCksICVtbTApCisJaW5jbAklZWF4CisKKwlwc3JscQklbW02LCAlbW0wCisKK1pkaXNwKAltb3ZkLAklbW0wLCAwLCglZWN4LCVlYXgsNCkpCisJam56CUwoc2ltcGxlKQorCisKKwltb3ZxCSVtbTAsICglZWN4KQorCW1vdmwJJWVkeCwgJWVheAorCisJcG9wbAklZWJ4CisKKwllbW1zCisJcmV0CisKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s2L21vZF8zNGxzdWIxLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s2L21vZF8zNGxzdWIxLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTMwNTAzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazYvbW9kXzM0bHN1YjEuYXNtCkBAIC0wLDAgKzEsMTkwIEBACitkbmwgIEFNRCBLNiBtcG5fbW9kXzM0bHN1YjEgLS0gbXBuIHJlbWFpbmRlciBtb2R1bG8gMioqMjQtMS4KKworZG5sICBDb3B5cmlnaHQgMjAwMC0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQyBLNjogMi42NiBjeWNsZXMvbGltYgorCisKK0MgbXBfbGltYl90IG1wbl9tb2RfMzRsc3ViMSAobXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUpCitDCitDIEFuIGF0dGVtcHQgd2FzIG1hZGUgdG8gdXNlIGEgbG9vcCBsaWtlCitDCitDIEwodG9wKToKK0MJYWRjbAkoJWVkeCksICVlYXgKK0MJYWRjbAk0KCVlZHgpLCAlZWJ4CitDCWFkY2wJOCglZWR4KSwgJWVzaQorQwlsZWFsCTEyKCVlZHgpLCAlZWR4CitDCWxvb3AJTCh0b3ApCitDCitDIHdpdGggJWVjeCBzdGFydGluZyBmcm9tIGZsb29yKHNpemUvMyksIGJ1dCBpdCBzdGlsbCBtZWFzdXJlZCAyLjY2IGMvbC4KK0MgVGhlIGZvcm0gdXNlZCBpbnN0ZWFkIGNhbiBzYXZlIGFib3V0IDYgY3ljbGVzIGJ5IG5vdCBkaXZpZGluZyBieSAzLgorQworQyBJbiB0aGUgY29kZSB1c2VkLCBwdXR0aW5nIHRoZSAibGVhbCJzIGF0IHRoZSB0b3Agb2YgdGhlIGxvb3AgaXMgbmVjZXNzYXJ5CitDIGZvciB0aGUgY2xhaW1lZCBzcGVlZCwgYW55d2hlcmUgZWxzZSBjb3N0cyBhbiBleHRyYSBjeWNsZSBwZXIgbG9vcC4KK0MgUGVyaGFwcyBhIHRpZ2h0IGxvb3AgbGlrZSB0aGlzIG5lZWRzIHNob3J0IGRlY29kZSBpbnN0cnVjdGlvbnMgYXQgdGhlCitDIGJyYW5jaCB0YXJnZXQsIHdoaWNoIHdvdWxkIGV4cGxhaW4gdGhlIGxlYWwvbG9vcCBmb3JtIGFib3ZlIHRha2luZyA4CitDIGN5Y2xlcyBpbnN0ZWFkIG9mIDcgdG9vLgorCitkZWZmcmFtZShQQVJBTV9TSVpFLCA4KQorZGVmZnJhbWUoUEFSQU1fU1JDLCAgNCkKKworZG5sICByZS11c2UgcGFyYW1ldGVyIHNwYWNlCitkZWZpbmUoU0FWRV9FQlgsIGBQQVJBTV9TSVpFJykKK2RlZmluZShTQVZFX0VTSSwgYFBBUkFNX1NSQycpCisKKwlURVhUCisJQUxJR04oMTYpCitQUk9MT0dVRShtcG5fbW9kXzM0bHN1YjEpCitkZWZsaXQoYEZSQU1FJywwKQorCisJbW92bAlQQVJBTV9TSVpFLCAlZWF4CisJbW92bAlQQVJBTV9TUkMsICVlZHgKKworCXN1YmwJJDIsICVlYXgKKwlqYQlMKHRocmVlX29yX21vcmUpCisKK1pkaXNwKAltb3ZsLAkwLCglZWR4KSwgJWVheCkJCUMgYXZvaWQgY29kZSBjYWNoZSBsaW5lIGJvdW5kYXJ5CisJam5lCUwob25lKQorCisJbW92bAklZWF4LCAlZWN4CisJbW92bAk0KCVlZHgpLCAlZWR4CisKKwlzaHJsCSQyNCwgJWVheAkJQyBzcmNbMF0gaGlnaAorCWFuZGwJJDB4MDBGRkZGRkYsICVlY3gJQyBzcmNbMF0gbG93CisKKwlhZGRsCSVlY3gsICVlYXgKKwltb3ZsCSVlZHgsICVlY3gKKworCXNobGwJJDgsICVlZHgKKwlhbmRsCSQweDAwRkZGRjAwLCAlZWR4CUMgc3JjWzFdIGhpZ2gKKworCXNocmwJJDE2LCAlZWN4CQlDIHNyY1sxXSBsb3cKKwlhZGRsCSVlY3gsICVlYXgKKworCWFkZGwJJWVkeCwgJWVheAorCitMKG9uZSk6CisJcmV0CisKKworTCh0aHJlZV9vcl9tb3JlKToKKwlDIGVheAlzaXplLTIKKwlDIGVieAorCUMgZWN4CisJQyBlZHgJc3JjCisKKwltb3ZsCSVlYngsIFNBVkVfRUJYCisJeG9ybAklZWJ4LCAlZWJ4CisKKwltb3ZsCSVlc2ksIFNBVkVfRVNJCisJcHVzaGwJJWVkaQlGUkFNRV9wdXNobCgpCisKKwl4b3JsCSVlc2ksICVlc2kKKwl4b3JsCSVlZGksICVlZGkJCUMgYW5kIGNsZWFyIGNhcnJ5IGZsYWcKKworTCh0b3ApOgorCUMgZWF4CWNvdW50ZXIsIGxpbWJzCisJQyBlYngJYWNjIDBtb2QzCisJQyBlY3gKKwlDIGVkeAlzcmMsIGluY3JlbWVudGluZworCUMgZXNpCWFjYyAxbW9kMworCUMgZWRpCWFjYyAybW9kMworCUMgZWJwCisKKwlsZWFsCS0yKCVlYXgpLCAlZWF4CisJbGVhbAkxMiglZWR4KSwgJWVkeAorCisJYWRjbAktMTIoJWVkeCksICVlYngKKwlhZGNsCS04KCVlZHgpLCAlZXNpCisJYWRjbAktNCglZWR4KSwgJWVkaQorCisJZGVjbAklZWF4CisJamcJTCh0b3ApCisKKworCUMgZWN4IGlzIC0zLCAtMiBvciAtMSByZXByZXNlbnRpbmcgMCwgMSBvciAyIG1vcmUgbGltYnMsIHJlc3BlY3RpdmVseQorCisJbW92YgkkMCwgJWNsCisJaW5jbAklZWF4CisKKwlqcwlMKGNvbWJpbmUpCQlDIDAgbW9yZQorCitaZGlzcCgJYWRjbCwJMCwoJWVkeCksICVlYngpCQlDIGF2b2lkIGNvZGUgY2FjaGUgbGluZSBjcm9zc2luZ3MKKworCW1vdmIJJDgsICVjbAorCWRlY2wJJWVheAorCisJanMJTChjb21iaW5lKQkJQyAxIG1vcmUKKworCWFkY2wJNCglZWR4KSwgJWVzaQorCisJbW92YgkkMTYsICVjbAorCisKK0woY29tYmluZSk6CisJc2JibAklZWR4LCAlZWR4CisKKwlzaGxsCSVjbCwgJWVkeAkJQyBjYXJyeQorCW1vdmwJJWVieCwgJWVheAkJQyAwbW9kMworCisJc2hybAkkMjQsICVlYXgJCUMgMG1vZDMgaGlnaAorCWFuZGwJJDB4MDBGRkZGRkYsICVlYngJQyAwbW9kMyBsb3cKKworCXN1YmwJJWVkeCwgJWVheAkJQyBhcHBseSBjYXJyeQorCW1vdmwJJWVzaSwgJWVjeAkJQyAxbW9kMworCisJc2hybAkkMTYsICVlc2kJCUMgMW1vZDMgaGlnaAorCWFkZGwJJWVieCwgJWVheAkJQyBhcHBseSAwbW9kMyBsb3cKKworCWFuZGwJJDB4MDAwMEZGRkYsICVlY3gKKwlhZGRsCSVlc2ksICVlYXgJCUMgYXBwbHkgMW1vZDMgaGlnaAorCisJc2hsbAkkOCwgJWVjeAkJQyAxbW9kMyBsb3cKKwltb3ZsCSVlZGksICVlZHgJCUMgMm1vZDMKKworCXNocmwJJDgsICVlZHgJCUMgMm1vZDMgaGlnaAorCWFkZGwJJWVjeCwgJWVheAkJQyBhcHBseSAxbW9kMyBsb3cKKworCWFkZGwJJWVkeCwgJWVheAkJQyBhcHBseSAybW9kMyBoaWdoCisJYW5kbAkkMHgwMDAwMDBGRiwgJWVkaQorCisJc2hsbAkkMTYsICVlZGkJCUMgMm1vZDMgbG93CisJbW92bAlTQVZFX0VCWCwgJWVieAorCisJYWRkbAklZWRpLCAlZWF4CQlDIGFwcGx5IDJtb2QzIGxvdworCW1vdmwJU0FWRV9FU0ksICVlc2kKKworCXBvcGwJJWVkaQorCisJcmV0CisKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s2L21vZGUxby5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNi9tb2RlMW8uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMzM4YmQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNi9tb2RlMW8uYXNtCkBAIC0wLDAgKzEsMTc2IEBACitkbmwgIEFNRCBLNiBtcG5fbW9kZXhhY3RfMV9vZGQgLS0gZXhhY3QgZGl2aXNpb24gc3R5bGUgcmVtYWluZGVyLgorCitkbmwgIENvcHlyaWdodCAyMDAwLTIwMDMsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDIEs2OiAxMC4wIGN5Y2xlcy9saW1iCisKKworQyBtcF9saW1iX3QgbXBuX21vZGV4YWN0XzFfb2RkIChtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSwKK0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBfbGltYl90IGRpdmlzb3IpOworQyBtcF9saW1iX3QgbXBuX21vZGV4YWN0XzFjX29kZCAobXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUsCitDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcF9saW1iX3QgZGl2aXNvciwgbXBfbGltYl90IGNhcnJ5KTsKK0MKK0MgQSBzcGVjaWFsIGNhc2UgZm9yIGhpZ2g8ZGl2aXNvciBhdCB0aGUgZW5kIG1lYXN1cmVkIG9ubHkgYWJvdXQgNCBjeWNsZXMKK0MgZmFzdGVyLCBhbmQgc28gaXNuJ3QgdXNlZC4KK0MKK0MgQSBzcGVjaWFsIGNhc2UgZm9yIHNpemU9PTEgdXNpbmcgYSBkaXZsIHJhdGhlciB0aGFuIHRoZSBpbnZlcnNlIG1lYXN1cmVkCitDIG9ubHkgYWJvdXQgNSBjeWNsZXMgZmFzdGVyLCBhbmQgc28gaXNuJ3QgdXNlZC4gIFdoZW4gc2l6ZT09MSBhbmQKK0MgaGlnaDxkaXZpc29yIGl0IGNhbiBza2lwIGEgZGl2aXNpb24gYW5kIGJlIGEgZnVsbCAyNCBjeWNsZXMgZmFzdGVyLCBidXQKK0MgdGhpcyBpc24ndCBhbiBpbXBvcnRhbnQgY2FzZS4KKworZGVmZnJhbWUoUEFSQU1fQ0FSUlksICAxNikKK2RlZmZyYW1lKFBBUkFNX0RJVklTT1IsMTIpCitkZWZmcmFtZShQQVJBTV9TSVpFLCAgIDgpCitkZWZmcmFtZShQQVJBTV9TUkMsICAgIDQpCisKKwlURVhUCisKKwlBTElHTigzMikKK1BST0xPR1VFKG1wbl9tb2RleGFjdF8xY19vZGQpCitkZWZsaXQoYEZSQU1FJywwKQorCisJbW92bAlQQVJBTV9ESVZJU09SLCAlZWN4CisJcHVzaGwJJWVzaQkJRlJBTUVfcHVzaGwoKQorCisJbW92bAlQQVJBTV9DQVJSWSwgJWVkeAorCWptcAlMKHN0YXJ0XzFjKQorCitFUElMT0dVRSgpCisKKworCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX21vZGV4YWN0XzFfb2RkKQorZGVmbGl0KGBGUkFNRScsMCkKKworCW1vdmwJUEFSQU1fRElWSVNPUiwgJWVjeAorCXB1c2hsCSVlc2kJCUZSQU1FX3B1c2hsKCkKKworCXhvcmwJJWVkeCwgJWVkeAorTChzdGFydF8xYyk6CisJcHVzaGwJJWVkaQkJRlJBTUVfcHVzaGwoKQorCisJc2hybAklZWN4CQkJQyBkLzIKKwltb3ZsCVBBUkFNX0RJVklTT1IsICVlc2kKKworCWFuZGwJJDEyNywgJWVjeAkJQyBkLzIsIDcgYml0cworCXB1c2hsCSVlYnAJCUZSQU1FX3B1c2hsKCkKKworaWZkZWYoYFBJQycsYAorCUxFQSgJYmludmVydF9saW1iX3RhYmxlLCAlZWRpKQorWmRpc3AoCW1vdnpibCwJMCwoJWVjeCwlZWRpKSwgJWVkaSkJCUMgaW52IDggYml0cworJyxgCisJbW92emJsCWJpbnZlcnRfbGltYl90YWJsZSglZWN4KSwgJWVkaQlDIGludiA4IGJpdHMKKycpCisJbGVhbAkoJWVkaSwlZWRpKSwgJWVjeAlDIDIqaW52CisKKwlpbXVsbAklZWRpLCAlZWRpCQlDIGludippbnYKKworCW1vdmwJUEFSQU1fU1JDLCAlZWF4CisJbW92bAlQQVJBTV9TSVpFLCAlZWJwCisKKwlpbXVsbAklZXNpLCAlZWRpCQlDIGludippbnYqZAorCisJcHVzaGwJJWVieAkJRlJBTUVfcHVzaGwoKQorCWxlYWwJKCVlYXgsJWVicCw0KSwgJWVieAlDIHNyYyBlbmQKKworCXN1YmwJJWVkaSwgJWVjeAkJQyBpbnYgPSAyKmludiAtIGludippbnYqZAorCWxlYWwJKCVlY3gsJWVjeCksICVlZGkJQyAyKmludgorCisJaW11bGwJJWVjeCwgJWVjeAkJQyBpbnYqaW52CisKKwltb3ZsCSglZWF4KSwgJWVheAkJQyBzcmMgbG93IGxpbWIKKwluZWdsCSVlYnAJCQlDIC1zaXplCisKKwlpbXVsbAklZXNpLCAlZWN4CQlDIGludippbnYqZAorCisJc3VibAklZWN4LCAlZWRpCQlDIGludiA9IDIqaW52IC0gaW52KmludipkCisKKwlBU1NFUlQoZSxgCUMgZCppbnYgPT0gMSBtb2QgMl5HTVBfTElNQl9CSVRTCisJcHVzaGwJJWVheAorCW1vdmwJJWVzaSwgJWVheAorCWltdWxsCSVlZGksICVlYXgKKwljbXBsCSQxLCAlZWF4CisJcG9wbAklZWF4JykKKworCWptcAlMKGVudHJ5KQorCisKK0MgUm90YXRpbmcgdGhlIG11bCB0byB0aGUgdG9wIG9mIHRoZSBsb29wIHNhdmVzIDEgY3ljbGUsIHByZXN1bWFibHkgYnkKK0MgaGlkaW5nIHRoZSBsb29wIGNvbnRyb2wgdW5kZXIgdGhlIGltdWwgbGF0ZW5jeS4KK0MKK0MgVGhlIHJ1biB0aW1lIGlzIDEwIGN5Y2xlcywgYnV0IGRlY29kaW5nIGlzIG9ubHkgOSAoYW5kIHRoZSBkZXBlbmRlbnQgY2hhaW4KK0Mgb25seSA4KS4gIEl0J3Mgbm90IGNsZWFyIGhvdyB0byBnZXQgZG93biB0byA5IGN5Y2xlcy4KK0MKK0MgVGhlIHhvciBhbmQgcmNsIHRvIGhhbmRsZSB0aGUgY2FycnkgYml0IGNvdWxkIGJlIGFuIHNiYiBpbnN0ZWFkLCB3aXRoIHRoZQorQyB0aGUgY2FycnkgYml0IGFkZCBiZWNvbWluZyBhIHN1YiwgYnV0IHRoYXQgZG9lc24ndCBzYXZlIGFueXRoaW5nLgorCitMKHRvcCk6CisJQyBlYXgJKGxvdyBwcm9kdWN0KQorCUMgZWJ4CXNyYyBlbmQKKwlDIGVjeAljYXJyeSBiaXQsIDAgb3IgMQorCUMgZWR4CShoaWdoIHByb2R1Y3QsIGJlaW5nIGNhcnJ5IGxpbWIpCisJQyBlc2kJZGl2aXNvcgorCUMgZWRpCWludmVyc2UKKwlDIGVicAljb3VudGVyLCBsaW1icywgbmVnYXRpdmUKKworCW11bGwJJWVzaQorCisJbW92bAkoJWVieCwlZWJwLDQpLCAlZWF4CisJYWRkbAklZWN4LCAlZWR4CQlDIGFwcGx5IGNhcnJ5IGJpdCB0byBjYXJyeSBsaW1iCisKK0woZW50cnkpOgorCXhvcmwJJWVjeCwgJWVjeAorCXN1YmwJJWVkeCwgJWVheAkJQyBhcHBseSBjYXJyeSBsaW1iCisKKwlyY2xsCSVlY3gKKworCWltdWxsCSVlZGksICVlYXgKKworCWluY2wJJWVicAorCWpueglMKHRvcCkKKworCisKKwlwb3BsCSVlYngKKwlwb3BsCSVlYnAKKworCW11bGwJJWVzaQorCisJcG9wbAklZWRpCisJcG9wbAklZXNpCisKKwlsZWFsCSglZWN4LCVlZHgpLCAlZWF4CisKKwlyZXQKKworRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNi9tdWxfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNi9tdWxfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VmN2VjMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s2L211bF8xLmFzbQpAQCAtMCwwICsxLDI5MiBAQAorZG5sICBBTUQgSzYgbXBuX211bF8xIC0tIG1wbiBieSBsaW1iIG11bHRpcGx5LgorCitkbmwgIENvcHlyaWdodCAxOTk5LCAyMDAwLCAyMDAyLCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQwkJCSAgICBjeWNsZXMvbGltYgorQyBQNQorQyBQNiBtb2RlbCAwLTgsMTAtMTIJCSA1LjUKK0MgUDYgbW9kZWwgOSAgKEJhbmlhcykKK0MgUDYgbW9kZWwgMTMgKERvdGhhbikJCSA0Ljg3CitDIFA0IG1vZGVsIDAgIChXaWxsYW1ldHRlKQorQyBQNCBtb2RlbCAxICAoPykKK0MgUDQgbW9kZWwgMiAgKE5vcnRod29vZCkKK0MgUDQgbW9kZWwgMyAgKFByZXNjb3R0KQorQyBQNCBtb2RlbCA0ICAoTm9jb25hKQorQyBBTUQgSzYJCQkgNi4yNQorQyBBTUQgSzcKK0MgQU1EIEs4CisKKworQyBtcF9saW1iX3QgbXBuX211bF8xIChtcF9wdHIgZHN0LCBtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSwKK0MgICAgICAgICAgICAgICAgICAgICAgbXBfbGltYl90IG11bHRpcGxpZXIpOworQyBtcF9saW1iX3QgbXBuX211bF8xYyAobXBfcHRyIGRzdCwgbXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUsCitDICAgICAgICAgICAgICAgICAgICAgICBtcF9saW1iX3QgbXVsdGlwbGllciwgbXBfbGltYl90IGNhcnJ5KTsKK0MKK0MgTXVsdGlwbHkgc3JjLHNpemUgYnkgbXVsdCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiBkc3Qsc2l6ZS4KK0MgUmV0dXJuIHRoZSBjYXJyeSBsaW1iIGZyb20gdGhlIHRvcCBvZiB0aGUgcmVzdWx0LgorQworQyBtcG5fbXVsXzFjKCkgYWNjZXB0cyBhbiBpbml0aWFsIGNhcnJ5IGZvciB0aGUgY2FsY3VsYXRpb24sIGl0J3MgYWRkZWQgaW50bworQyB0aGUgbG93IGxpbWIgb2YgdGhlIHJlc3VsdC4KKworZGVmZnJhbWUoUEFSQU1fQ0FSUlksICAgICAyMCkKK2RlZmZyYW1lKFBBUkFNX01VTFRJUExJRVIsMTYpCitkZWZmcmFtZShQQVJBTV9TSVpFLCAgICAgIDEyKQorZGVmZnJhbWUoUEFSQU1fU1JDLCAgICAgICA4KQorZGVmZnJhbWUoUEFSQU1fRFNULCAgICAgICA0KQorCitkbmwgIG1pbmltdW0gNSBiZWNhdXNlIHRoZSB1bnJvbGxlZCBjb2RlIGNhbid0IGhhbmRsZSBsZXNzCitkZWZsaXQoVU5ST0xMX1RIUkVTSE9MRCwgNSkKKworCVRFWFQKKwlBTElHTigzMikKKworUFJPTE9HVUUobXBuX211bF8xYykKKwlwdXNobAklZXNpCitkZWZsaXQoYEZSQU1FJyw0KQorCW1vdmwJUEFSQU1fQ0FSUlksICVlc2kKKwlqbXAJTChzdGFydF9uYykKK0VQSUxPR1VFKCkKKworCitQUk9MT0dVRShtcG5fbXVsXzEpCisJcHVzaAklZXNpCitkZWZsaXQoYEZSQU1FJyw0KQorCXhvcmwJJWVzaSwgJWVzaQlDIGluaXRpYWwgY2FycnkKKworTChzdGFydF9uYyk6CisJbW92CVBBUkFNX1NJWkUsICVlY3gKKwlwdXNoCSVlYngKK0ZSQU1FX3B1c2hsKCkKKworCW1vdmwJUEFSQU1fU1JDLCAlZWJ4CisJcHVzaAklZWRpCitGUkFNRV9wdXNobCgpCisKKwltb3ZsCVBBUkFNX0RTVCwgJWVkaQorCXB1c2hsCSVlYnAKK0ZSQU1FX3B1c2hsKCkKKworCWNtcGwJJFVOUk9MTF9USFJFU0hPTEQsICVlY3gKKwltb3ZsCVBBUkFNX01VTFRJUExJRVIsICVlYnAKKworCWphZQlMKHVucm9sbCkKKworCisJQyBjb2RlIG9mZnNldCAweDIyIGhlcmUsIGNsb3NlIGVub3VnaCB0byBhbGlnbmVkCitMKHNpbXBsZSk6CisJQyBlYXgJc2NyYXRjaAorCUMgZWJ4CXNyYworCUMgZWN4CWNvdW50ZXIKKwlDIGVkeAlzY3JhdGNoCisJQyBlc2kJY2FycnkKKwlDIGVkaQlkc3QKKwlDIGVicAltdWx0aXBsaWVyCisJQworCUMgdGhpcyBsb29wIDggY3ljbGVzL2xpbWIKKworCW1vdmwJKCVlYngpLCAlZWF4CisJYWRkbAkkNCwgJWVieAorCisJbXVsbAklZWJwCisKKwlhZGRsCSVlc2ksICVlYXgKKwltb3ZsCSQwLCAlZXNpCisKKwlhZGNsCSVlZHgsICVlc2kKKworCW1vdmwJJWVheCwgKCVlZGkpCisJYWRkbAkkNCwgJWVkaQorCisJbG9vcAlMKHNpbXBsZSkKKworCisJcG9wbAklZWJwCisKKwlwb3BsCSVlZGkKKwlwb3BsCSVlYngKKworCW1vdmwJJWVzaSwgJWVheAorCXBvcGwJJWVzaQorCisJcmV0CisKKworQyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQyBUaGUgY29kZSBmb3IgZWFjaCBsaW1iIGlzIDYgY3ljbGVzLCB3aXRoIGluc3RydWN0aW9uIGRlY29kaW5nIGJlaW5nIHRoZQorQyBsaW1pdGluZyBmYWN0b3IuICBBdCA0IGxpbWJzL2xvb3AgYW5kIDEgY3ljbGUvbG9vcCBvZiBvdmVyaGVhZCBpdCdzIDYuMjUKK0MgY3ljbGVzL2xpbWIgaW4gdG90YWwuCitDCitDIFRoZSBzZWNyZXQgaW5ncmVkaWVudCB0byBnZXQgNi4yNSBpcyB0byBzdGFydCB0aGUgbG9vcCB3aXRoIHRoZSBtdWwgYW5kCitDIGhhdmUgdGhlIGxvYWQvc3RvcmUgcGFpciBhdCB0aGUgZW5kLiAgUm90YXRpbmcgdGhlIGxvYWQvc3RvcmUgdG8gdGhlIHRvcAorQyBpcyBhbiAwLjUgYy9sIHNsb3dkb3duLiAgKFNvbWUgYWRkcmVzcyBnZW5lcmF0aW9uIGVmZmVjdCBwcm9iYWJseS4pCitDCitDIFRoZSB3aG9sZSB1bnJvbGxlZCBsb29wIGZpdHMgbmljZWx5IGluIGV4YWN0bHkgODAgYnl0ZXMuCisKKworCUFMSUdOKDE2KQlDIGFscmVhZHkgYWxpZ25lZCB0byAxNiBoZXJlIGFjdHVhbGx5CitMKHVucm9sbCk6CisJbW92bAkoJWVieCksICVlYXgKKwlsZWFsCS0xNiglZWJ4LCVlY3gsNCksICVlYngKKworCWxlYWwJLTE2KCVlZGksJWVjeCw0KSwgJWVkaQorCXN1YmwJJDQsICVlY3gKKworCW5lZ2wJJWVjeAorCisKKwlBTElHTigxNikJQyBvbmUgYnl0ZSBub3AgZm9yIHRoaXMgYWxpZ25tZW50CitMKHRvcCk6CisJQyBlYXgJc2NyYXRjaAorCUMgZWJ4CSZzcmNbc2l6ZS00XQorCUMgZWN4CWNvdW50ZXIKKwlDIGVkeAlzY3JhdGNoCisJQyBlc2kJY2FycnkKKwlDIGVkaQkmZHN0W3NpemUtNF0KKwlDIGVicAltdWx0aXBsaWVyCisKKwltdWxsCSVlYnAKKworCWFkZGwJJWVzaSwgJWVheAorCW1vdmwJJDAsICVlc2kKKworCWFkY2wJJWVkeCwgJWVzaQorCisJbW92bAklZWF4LCAoJWVkaSwlZWN4LDQpCisJbW92bAk0KCVlYngsJWVjeCw0KSwgJWVheAorCisKKwltdWxsCSVlYnAKKworCWFkZGwJJWVzaSwgJWVheAorCW1vdmwJJDAsICVlc2kKKworCWFkY2wJJWVkeCwgJWVzaQorCisJbW92bAklZWF4LCA0KCVlZGksJWVjeCw0KQorCW1vdmwJOCglZWJ4LCVlY3gsNCksICVlYXgKKworCisJbXVsbAklZWJwCisKKwlhZGRsCSVlc2ksICVlYXgKKwltb3ZsCSQwLCAlZXNpCisKKwlhZGNsCSVlZHgsICVlc2kKKworCW1vdmwJJWVheCwgOCglZWRpLCVlY3gsNCkKKwltb3ZsCTEyKCVlYngsJWVjeCw0KSwgJWVheAorCisKKwltdWxsCSVlYnAKKworCWFkZGwJJWVzaSwgJWVheAorCW1vdmwJJDAsICVlc2kKKworCWFkY2wJJWVkeCwgJWVzaQorCisJbW92bAklZWF4LCAxMiglZWRpLCVlY3gsNCkKKwltb3ZsCTE2KCVlYngsJWVjeCw0KSwgJWVheAorCisKKwlhZGRsCSQ0LCAlZWN4CisJanMJTCh0b3ApCisKKworCisJQyBlYXgJbmV4dCBzcmMgbGltYgorCUMgZWJ4CSZzcmNbc2l6ZS00XQorCUMgZWN4CTAgdG8gMyByZXByZXNlbnRpbmcgcmVzcGVjdGl2ZWx5IDQgdG8gMSBmdXJ0aGVyIGxpbWJzCisJQyBlZHgKKwlDIGVzaQljYXJyeQorCUMgZWRpCSZkc3Rbc2l6ZS00XQorCisJdGVzdGIJJDIsICVjbAorCWpueglMKGZpbmlzaF9ub3RfdHdvKQorCisJbXVsbAklZWJwCisKKwlhZGRsCSVlc2ksICVlYXgKKwltb3ZsCSQwLCAlZXNpCisKKwlhZGNsCSVlZHgsICVlc2kKKworCW1vdmwJJWVheCwgKCVlZGksJWVjeCw0KQorCW1vdmwJNCglZWJ4LCVlY3gsNCksICVlYXgKKworCisJbXVsbAklZWJwCisKKwlhZGRsCSVlc2ksICVlYXgKKwltb3ZsCSQwLCAlZXNpCisKKwlhZGNsCSVlZHgsICVlc2kKKworCW1vdmwJJWVheCwgNCglZWRpLCVlY3gsNCkKKwltb3ZsCTgoJWVieCwlZWN4LDQpLCAlZWF4CisKKwlhZGRsCSQyLCAlZWN4CitMKGZpbmlzaF9ub3RfdHdvKToKKworCisJdGVzdGIJJDEsICVjbAorCWpueglMKGZpbmlzaF9ub3Rfb25lKQorCisJbXVsbAklZWJwCisKKwlhZGRsCSVlc2ksICVlYXgKKwltb3ZsCSQwLCAlZXNpCisKKwlhZGNsCSVlZHgsICVlc2kKKworCW1vdmwJJWVheCwgOCglZWRpKQorCW1vdmwJMTIoJWVieCksICVlYXgKK0woZmluaXNoX25vdF9vbmUpOgorCisKKwltdWxsCSVlYnAKKworCWFkZGwJJWVzaSwgJWVheAorCXBvcGwJJWVicAorCisJYWRjbAkkMCwgJWVkeAorCisJbW92bAklZWF4LCAxMiglZWRpKQorCXBvcGwJJWVkaQorCisJcG9wbAklZWJ4CisJbW92bAklZWR4LCAlZWF4CisKKwlwb3BsCSVlc2kKKworCXJldAorCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNi9tdWxfYmFzZWNhc2UuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazYvbXVsX2Jhc2VjYXNlLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDMwMDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazYvbXVsX2Jhc2VjYXNlLmFzbQpAQCAtMCwwICsxLDYxMiBAQAorZG5sICBBTUQgSzYgbXBuX211bF9iYXNlY2FzZSAtLSBtdWx0aXBseSB0d28gbXBuIG51bWJlcnMuCisKK2RubCAgQ29weXJpZ2h0IDE5OTktMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MgSzY6IGFwcHJveCA5LjAgY3ljbGVzIHBlciBjcm9zcyBwcm9kdWN0IG9uIDMweDMwIGxpbWJzICh3aXRoIDE2IGxpbWJzL2xvb3AKK0MgICAgIHVucm9sbGluZykuCisKKworCitkbmwgIEs2OiBVTlJPTExfQ09VTlQgY3ljbGVzL3Byb2R1Y3QgKGFwcHJveCkKK2RubCAgICAgICAgICAgOCAgICAgICAgICAgOS43NQorZG5sICAgICAgICAgIDE2ICAgICAgICAgICA5LjMKK2RubCAgICAgICAgICAzMiAgICAgICAgICAgOS4zCitkbmwgIE1heGltdW0gcG9zc2libGUgd2l0aCB0aGUgY3VycmVudCBjb2RlIGlzIDMyLgorZG5sCitkbmwgIFdpdGggMTYgdGhlIGlubmVyIHVucm9sbGVkIGxvb3AgZml0cyBleGFjdGx5IGluIGEgMjU2IGJ5dGUgYmxvY2ssIHdoaWNoCitkbmwgIG1pZ2h0IGV4cGxhaW4gaXQncyBnb29kIHBlcmZvcm1hbmNlLgorCitkZWZsaXQoVU5ST0xMX0NPVU5ULCAxNikKKworCitDIHZvaWQgbXBuX211bF9iYXNlY2FzZSAobXBfcHRyIHdwLAorQyAgICAgICAgICAgICAgICAgICAgICAgIG1wX3NyY3B0ciB4cCwgbXBfc2l6ZV90IHhzaXplLAorQyAgICAgICAgICAgICAgICAgICAgICAgIG1wX3NyY3B0ciB5cCwgbXBfc2l6ZV90IHlzaXplKTsKK0MKK0MgQ2FsY3VsYXRlIHhwLHhzaXplIG11bHRpcGxpZWQgYnkgeXAseXNpemUsIHN0b3JpbmcgdGhlIHJlc3VsdCBpbgorQyB3cCx4c2l6ZSt5c2l6ZS4KK0MKK0MgVGhpcyByb3V0aW5lIGlzIGVzc2VudGlhbGx5IHRoZSBzYW1lIGFzIG1wbi9nZW5lcmljL211bF9iYXNlY2FzZS5jLCBidXQKK0MgaXQncyBmYXN0ZXIgYmVjYXVzZSBpdCBkb2VzIG1vc3Qgb2YgdGhlIG1wbl9hZGRtdWxfMSgpIGVudHJ5IGNvZGUgb25seQorQyBvbmNlLiAgVGhlIHNhdmluZyBpcyBhYm91dCAxMC0yMCUgb24gdHlwaWNhbCBzaXplcyBjb21pbmcgZnJvbSB0aGUKK0MgS2FyYXRzdWJhIG11bHRpcGx5IGNvZGUuCitDCitDIEVuaGFuY2VtZW50czoKK0MKK0MgVGhlIG11bF8xIGxvb3AgaXMgYWJvdXQgOC41IGMvbCwgd2hpY2ggaXMgc2xvd2VyIHRoYW4gbXBuX211bF8xIGF0IDYuMjUKK0MgYy9sLiAgQ291bGQgY2FsbCBtcG5fbXVsXzEgd2hlbiB5c2l6ZSBpcyBiaWcgZW5vdWdoIHRvIG1ha2UgaXQgd29ydGh3aGlsZS4KK0MKK0MgVGhlIG1haW4gdW5yb2xsZWQgYWRkbXVsIGxvb3AgY291bGQgYmUgc2hhcmVkIGJ5IG1wbl9hZGRtdWxfMSwgdXNpbmcgc29tZQorQyBleHRyYSBzdGFjayBzZXR1cHMgYW5kIG1heWJlIDIgb3IgMyB3YXN0ZWQgY3ljbGVzIGF0IHRoZSBlbmQuICBDb2RlIHNhdmluZworQyB3b3VsZCBiZSAyNTYgYnl0ZXMuCisKK2lmZGVmKGBQSUMnLGAKK2RlZmxpdChVTlJPTExfVEhSRVNIT0xELCA4KQorJyxgCitkZWZsaXQoVU5ST0xMX1RIUkVTSE9MRCwgOCkKKycpCisKK2RlZmZyYW1lKFBBUkFNX1lTSVpFLDIwKQorZGVmZnJhbWUoUEFSQU1fWVAsICAgMTYpCitkZWZmcmFtZShQQVJBTV9YU0laRSwxMikKK2RlZmZyYW1lKFBBUkFNX1hQLCAgIDgpCitkZWZmcmFtZShQQVJBTV9XUCwgICA0KQorCisJVEVYVAorCUFMSUdOKDMyKQorUFJPTE9HVUUobXBuX211bF9iYXNlY2FzZSkKK2RlZmxpdChgRlJBTUUnLDApCisKKwltb3ZsCVBBUkFNX1hTSVpFLCAlZWN4CisJbW92bAlQQVJBTV9ZUCwgJWVheAorCisJbW92bAlQQVJBTV9YUCwgJWVkeAorCW1vdmwJKCVlYXgpLCAlZWF4CUMgeXAgbG93IGxpbWIKKworCWNtcGwJJDIsICVlY3gKKwlqYQlMKHhzaXplX21vcmVfdGhhbl90d29fbGltYnMpCisJamUJTCh0d29fYnlfc29tZXRoaW5nKQorCisKKwlDIG9uZSBsaW1iIGJ5IG9uZSBsaW1iCisKKwltb3ZsCSglZWR4KSwgJWVkeAlDIHhwIGxvdyBsaW1iCisJbW92bAlQQVJBTV9XUCwgJWVjeAorCisJbXVsbAklZWR4CisKKwltb3ZsCSVlYXgsICglZWN4KQorCW1vdmwJJWVkeCwgNCglZWN4KQorCXJldAorCisKK0MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0wodHdvX2J5X3NvbWV0aGluZyk6CisJZGVjbAlQQVJBTV9ZU0laRQorCXB1c2hsCSVlYngKK2RlZmxpdChgRlJBTUUnLDQpCisKKwltb3ZsCVBBUkFNX1dQLCAlZWJ4CisJcHVzaGwJJWVzaQorZGVmbGl0KGBGUkFNRScsOCkKKworCW1vdmwJJWVheCwgJWVjeAlDIHlwIGxvdyBsaW1iCisJbW92bAkoJWVkeCksICVlYXgJQyB4cCBsb3cgbGltYgorCisJbW92bAklZWR4LCAlZXNpCUMgeHAKKwlqbnoJTCh0d29fYnlfdHdvKQorCisKKwlDIHR3byBsaW1icyBieSBvbmUgbGltYgorCisJbXVsbAklZWN4CisKKwltb3ZsCSVlYXgsICglZWJ4KQorCW1vdmwJNCglZXNpKSwgJWVheAorCisJbW92bAklZWR4LCAlZXNpCUMgY2FycnkKKworCW11bGwJJWVjeAorCisJYWRkbAklZWF4LCAlZXNpCisJbW92bAklZXNpLCA0KCVlYngpCisKKwlhZGNsCSQwLCAlZWR4CisKKwltb3ZsCSVlZHgsIDgoJWVieCkKKwlwb3BsCSVlc2kKKworCXBvcGwJJWVieAorCXJldAorCisKKworQyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUFMSUdOKDE2KQorTCh0d29fYnlfdHdvKToKKwlDIGVheAl4cCBsb3cgbGltYgorCUMgZWJ4CXdwCisJQyBlY3gJeXAgbG93IGxpbWIKKwlDIGVkeAorCUMgZXNpCXhwCisJQyBlZGkKKwlDIGVicAorZGVmbGl0KGBGUkFNRScsOCkKKworCW11bGwJJWVjeAkJQyB4cFswXSAqIHlwWzBdCisKKwlwdXNoCSVlZGkKK2RlZmxpdChgRlJBTUUnLDEyKQorCW1vdmwJJWVheCwgKCVlYngpCisKKwltb3ZsCTQoJWVzaSksICVlYXgKKwltb3ZsCSVlZHgsICVlZGkJQyBjYXJyeSwgZm9yIHdwWzFdCisKKwltdWxsCSVlY3gJCUMgeHBbMV0gKiB5cFswXQorCisJYWRkbAklZWF4LCAlZWRpCisJbW92bAlQQVJBTV9ZUCwgJWVjeAorCisJYWRjbAkkMCwgJWVkeAorCisJbW92bAklZWRpLCA0KCVlYngpCisJbW92bAk0KCVlY3gpLCAlZWN4CUMgeXBbMV0KKworCW1vdmwJNCglZXNpKSwgJWVheAlDIHhwWzFdCisJbW92bAklZWR4LCAlZWRpCUMgY2FycnksIGZvciB3cFsyXQorCisJbXVsbAklZWN4CQlDIHhwWzFdICogeXBbMV0KKworCWFkZGwJJWVheCwgJWVkaQorCisJYWRjbAkkMCwgJWVkeAorCisJbW92bAkoJWVzaSksICVlYXgJQyB4cFswXQorCW1vdmwJJWVkeCwgJWVzaQlDIGNhcnJ5LCBmb3Igd3BbM10KKworCW11bGwJJWVjeAkJQyB4cFswXSAqIHlwWzFdCisKKwlhZGRsCSVlYXgsIDQoJWVieCkKKwlhZGNsCSVlZHgsICVlZGkKKwlhZGNsCSQwLCAlZXNpCisKKwltb3ZsCSVlZGksIDgoJWVieCkKKwlwb3BsCSVlZGkKKworCW1vdmwJJWVzaSwgMTIoJWVieCkKKwlwb3BsCSVlc2kKKworCXBvcGwJJWVieAorCXJldAorCisKK0MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlBTElHTigxNikKK0woeHNpemVfbW9yZV90aGFuX3R3b19saW1icyk6CisKK0MgVGhlIGZpcnN0IGxpbWIgb2YgeXAgaXMgcHJvY2Vzc2VkIHdpdGggYSBzaW1wbGUgbXBuX211bF8xIHN0eWxlIGxvb3AKK0MgaW5saW5lLiAgVW5yb2xsaW5nIHRoaXMgZG9lc24ndCBzZWVtIHdvcnRod2hpbGUgc2luY2UgaXQncyBvbmx5IHJ1biBvbmNlCitDICh3aGVyZWFzIHRoZSBhZGRtdWwgYmVsb3cgaXMgcnVuIHlzaXplLTEgbWFueSB0aW1lcykuICBBIGNhbGwgdG8gdGhlCitDIGFjdHVhbCBtcG5fbXVsXzEgd2lsbCBiZSBzbG93ZWQgZG93biBieSB0aGUgY2FsbCBhbmQgcGFyYW1ldGVyIHB1c2hpbmcgYW5kCitDIHBvcHBpbmcsIGFuZCBkb2Vzbid0IHNlZW0gbGlrZWx5IHRvIGJlIHdvcnRod2hpbGUgb24gdGhlIHR5cGljYWwgMTAtMjAKK0MgbGltYiBvcGVyYXRpb25zIHRoZSBLYXJhdHN1YmEgY29kZSBjYWxscyBoZXJlIHdpdGguCisKKwlDIGVheAl5cFswXQorCUMgZWJ4CisJQyBlY3gJeHNpemUKKwlDIGVkeAl4cAorCUMgZXNpCisJQyBlZGkKKwlDIGVicAorZGVmbGl0KGBGUkFNRScsMCkKKworCXB1c2hsCSVlZGkJCWRlZmZyYW1lX3B1c2hsKFNBVkVfRURJKQorCXB1c2hsCSVlYnAJCWRlZmZyYW1lX3B1c2hsKFNBVkVfRUJQKQorCisJbW92bAlQQVJBTV9XUCwgJWVkaQorCXB1c2hsCSVlc2kJCWRlZmZyYW1lX3B1c2hsKFNBVkVfRVNJKQorCisJbW92bAklZWF4LCAlZWJwCisJcHVzaGwJJWVieAkJZGVmZnJhbWVfcHVzaGwoU0FWRV9FQlgpCisKKwlsZWFsCSglZWR4LCVlY3gsNCksICVlYngJQyB4cCBlbmQKKwl4b3JsCSVlc2ksICVlc2kKKworCWxlYWwJKCVlZGksJWVjeCw0KSwgJWVkaQlDIHdwIGVuZCBvZiBtdWwxCisJbmVnbAklZWN4CisKKworTChtdWwxKToKKwlDIGVheAlzY3JhdGNoCisJQyBlYngJeHAgZW5kCisJQyBlY3gJY291bnRlciwgbmVnYXRpdmUKKwlDIGVkeAlzY3JhdGNoCisJQyBlc2kJY2FycnkKKwlDIGVkaQl3cCBlbmQgb2YgbXVsMQorCUMgZWJwCW11bHRpcGxpZXIKKworCW1vdmwJKCVlYngsJWVjeCw0KSwgJWVheAorCisJbXVsbAklZWJwCisKKwlhZGRsCSVlc2ksICVlYXgKKwltb3ZsCSQwLCAlZXNpCisKKwlhZGNsCSVlZHgsICVlc2kKKworCW1vdmwJJWVheCwgKCVlZGksJWVjeCw0KQorCWluY2wJJWVjeAorCisJam56CUwobXVsMSkKKworCisJbW92bAlQQVJBTV9ZU0laRSwgJWVkeAorCW1vdmwJJWVzaSwgKCVlZGkpCQlDIGZpbmFsIGNhcnJ5CisKKwltb3ZsCVBBUkFNX1hTSVpFLCAlZWN4CisJZGVjbAklZWR4CisKKwlqbnoJTCh5c2l6ZV9tb3JlX3RoYW5fb25lX2xpbWIpCisKKwlwb3BsCSVlYngKKwlwb3BsCSVlc2kKKwlwb3BsCSVlYnAKKwlwb3BsCSVlZGkKKwlyZXQKKworCitMKHlzaXplX21vcmVfdGhhbl9vbmVfbGltYik6CisJY21wbAkkVU5ST0xMX1RIUkVTSE9MRCwgJWVjeAorCW1vdmwJUEFSQU1fWVAsICVlYXgKKworCWphZQlMKHVucm9sbCkKKworCitDIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDIFNpbXBsZSBhZGRtdWwgbG9vcC4KK0MKK0MgVXNpbmcgZWJ4IGFuZCBlZGkgcG9pbnRpbmcgYXQgdGhlIGVuZHMgb2YgdGhlaXIgcmVzcGVjdGl2ZSBsb2NhdGlvbnMgc2F2ZXMKK0MgYSBjb3VwbGUgb2YgaW5zdHJ1Y3Rpb25zIGluIHRoZSBvdXRlciBsb29wLiAgVGhlIGlubmVyIGxvb3AgaXMgc3RpbGwgMTEKK0MgY3ljbGVzLCB0aGUgc2FtZSBhcyB0aGUgc2ltcGxlIGxvb3AgaW4gYW9yc211bF8xLmFzbS4KKworCUMgZWF4CXlwCisJQyBlYngJeHAgZW5kCisJQyBlY3gJeHNpemUKKwlDIGVkeAl5c2l6ZS0xCisJQyBlc2kKKwlDIGVkaQl3cCBlbmQgb2YgbXVsMQorCUMgZWJwCisKKwltb3ZsCTQoJWVheCksICVlYnAJCUMgbXVsdGlwbGllcgorCW5lZ2wJJWVjeAorCisJbW92bAklZWN4LCBQQVJBTV9YU0laRQlDIC14c2l6ZQorCXhvcmwJJWVzaSwgJWVzaQkJQyBpbml0aWFsIGNhcnJ5CisKKwlsZWFsCTQoJWVheCwlZWR4LDQpLCAlZWF4CUMgeXAgZW5kCisJbmVnbAklZWR4CisKKwltb3ZsCSVlYXgsIFBBUkFNX1lQCisJbW92bAklZWR4LCBQQVJBTV9ZU0laRQorCisJam1wCUwoc2ltcGxlX291dGVyX2VudHJ5KQorCisKKwlDIGFsaWduaW5nIGhlcmUgc2F2ZXMgYSBjb3VwbGUgb2YgY3ljbGVzCisJQUxJR04oMTYpCitMKHNpbXBsZV9vdXRlcl90b3ApOgorCUMgZWR4CXlzaXplIGNvdW50ZXIsIG5lZ2F0aXZlCisKKwltb3ZsCVBBUkFNX1lQLCAlZWF4CQlDIHlwIGVuZAorCXhvcmwJJWVzaSwgJWVzaQkJQyBjYXJyeQorCisJbW92bAlQQVJBTV9YU0laRSwgJWVjeAlDIC14c2l6ZQorCW1vdmwJJWVkeCwgUEFSQU1fWVNJWkUKKworCW1vdmwJKCVlYXgsJWVkeCw0KSwgJWVicAlDIHlwIGxpbWIgbXVsdGlwbGllcgorTChzaW1wbGVfb3V0ZXJfZW50cnkpOgorCWFkZGwJJDQsICVlZGkKKworCitMKHNpbXBsZV9pbm5lcik6CisJQyBlYXgJc2NyYXRjaAorCUMgZWJ4CXhwIGVuZAorCUMgZWN4CWNvdW50ZXIsIG5lZ2F0aXZlCisJQyBlZHgJc2NyYXRjaAorCUMgZXNpCWNhcnJ5CisJQyBlZGkJd3AgZW5kIG9mIHRoaXMgYWRkbXVsCisJQyBlYnAJbXVsdGlwbGllcgorCisJbW92bAkoJWVieCwlZWN4LDQpLCAlZWF4CisKKwltdWxsCSVlYnAKKworCWFkZGwJJWVzaSwgJWVheAorCW1vdmwJJDAsICVlc2kKKworCWFkY2wJJDAsICVlZHgKKwlhZGRsCSVlYXgsICglZWRpLCVlY3gsNCkKKwlhZGNsCSVlZHgsICVlc2kKKworCWluY2wJJWVjeAorCWpueglMKHNpbXBsZV9pbm5lcikKKworCisJbW92bAlQQVJBTV9ZU0laRSwgJWVkeAorCW1vdmwJJWVzaSwgKCVlZGkpCisKKwlpbmNsCSVlZHgKKwlqbnoJTChzaW1wbGVfb3V0ZXJfdG9wKQorCisKKwlwb3BsCSVlYngKKwlwb3BsCSVlc2kKKwlwb3BsCSVlYnAKKwlwb3BsCSVlZGkKKwlyZXQKKworCitDIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDIFVucm9sbGVkIGxvb3AuCitDCitDIFRoZSB1bnJvbGxlZCBpbm5lciBsb29wIGlzIHRoZSBzYW1lIGFzIGluIGFvcnNtdWxfMS5hc20sIHNlZSB0aGF0IGNvZGUgZm9yCitDIHNvbWUgY29tbWVudHMuCitDCitDIFZBUl9DT1VOVEVSIGlzIGZvciB0aGUgaW5uZXIgbG9vcCwgcnVubmluZyBmcm9tIFZBUl9DT1VOVEVSX0lOSVQgZG93biB0bworQyAwLCBpbmNsdXNpdmUuCitDCitDIFZBUl9KTVAgaXMgdGhlIGNvbXB1dGVkIGp1bXAgaW50byB0aGUgdW5yb2xsZWQgbG9vcC4KK0MKK0MgUEFSQU1fWFAgYW5kIFBBUkFNX1dQIGdldCBvZmZzZXQgYXBwcm9wcmlhdGVseSBmb3Igd2hlcmUgdGhlIHVucm9sbGVkIGxvb3AKK0MgaXMgZW50ZXJlZC4KK0MKK0MgVkFSX1hQX0xPVyBpcyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgbGltYiBvZiB4cCwgd2hpY2ggaXMgbmVlZGVkIGF0IHRoZQorQyBzdGFydCBvZiB0aGUgdW5yb2xsZWQgbG9vcC4gIFRoaXMgY2FuJ3QganVzdCBiZSBmZXRjaGVkIHRocm91Z2ggdGhlIHhwCitDIHBvaW50ZXIgYmVjYXVzZSBvZiB0aGUgb2Zmc2V0IGFwcGxpZWQgdG8gaXQuCitDCitDIFBBUkFNX1lTSVpFIGlzIHRoZSBvdXRlciBsb29wIGNvdW50ZXIsIGdvaW5nIGZyb20gLSh5c2l6ZS0xKSB1cCB0byAtMSwKK0MgaW5jbHVzaXZlLgorQworQyBQQVJBTV9ZUCBpcyBvZmZzZXQgYXBwcm9wcmlhdGVseSBzbyB0aGF0IHRoZSBQQVJBTV9ZU0laRSBjb3VudGVyIGNhbiBiZQorQyBhZGRlZCB0byBnaXZlIHRoZSBsb2NhdGlvbiBvZiB0aGUgbmV4dCBsaW1iIG9mIHlwLCB3aGljaCBpcyB0aGUgbXVsdGlwbGllcgorQyBpbiB0aGUgdW5yb2xsZWQgbG9vcC4KK0MKK0MgUEFSQU1fV1AgaXMgc2ltaWxhcmx5IG9mZnNldCBzbyB0aGF0IHRoZSBQQVJBTV9ZU0laRSBjb3VudGVyIGNhbiBiZSBhZGRlZAorQyB0byBnaXZlIHRoZSBzdGFydGluZyBwb2ludCBpbiB0aGUgZGVzdGluYXRpb24gZm9yIGVhY2ggdW5yb2xsZWQgbG9vcCAodGhpcworQyBwb2ludCBpcyBvbmUgbGltYiB1cHdhcmRzIGZvciBlYWNoIGxpbWIgb2YgeXAgcHJvY2Vzc2VkKS4KK0MKK0MgSGF2aW5nIFBBUkFNX1lTSVpFIGNvdW50IG5lZ2F0aXZlIHRvIHplcm8gbWVhbnMgaXQncyBub3QgbmVjZXNzYXJ5IHRvCitDIHN0b3JlIG5ldyB2YWx1ZXMgb2YgUEFSQU1fWVAgYW5kIFBBUkFNX1dQIG9uIGVhY2ggbG9vcC4gIFRob3NlIHZhbHVlcyBvbgorQyB0aGUgc3RhY2sgcmVtYWluIGNvbnN0YW50IGFuZCBvbiBlYWNoIGxvb3AgYW4gbGVhbCBhZGp1c3RzIHRoZW0gd2l0aCB0aGUKK0MgUEFSQU1fWVNJWkUgY291bnRlciB2YWx1ZS4KKworCitkZWZmcmFtZShWQVJfQ09VTlRFUiwgICAgICAtMjApCitkZWZmcmFtZShWQVJfQ09VTlRFUl9JTklULCAtMjQpCitkZWZmcmFtZShWQVJfSk1QLCAgICAgICAgICAtMjgpCitkZWZmcmFtZShWQVJfWFBfTE9XLCAgICAgICAtMzIpCitkZWZsaXQoVkFSX1NUQUNLX1NQQUNFLCAxNikKKworZG5sICBGb3Igc29tZSBzdHJhbmdlIHJlYXNvbiB1c2luZyAoJWVzcCkgaW5zdGVhZCBvZiAwKCVlc3ApIGlzIGEgdG91Y2gKK2RubCAgc2xvd2VyIGluIHRoaXMgY29kZSwgaGVuY2UgdGhlIGRlZmZyYW1lIGVtcHR5LWlmLXplcm8gZmVhdHVyZSBpcworZG5sICBkaXNhYmxlZC4KK2RubAorZG5sICBJZiBWQVJfQ09VTlRFUiBpcyBhdCAoJWVzcCksIHRoZSBlZmZlY3QgaXMgd29yc2UuICBJbiB0aGlzIGNhc2UgdGhlCitkbmwgIHVucm9sbGVkIGxvb3AgaXMgMjU1IGluc3RlYWQgb2YgMjU2IGJ5dGVzLCBidXQgcXVpdGUgaG93IHRoaXMgYWZmZWN0cworZG5sICBhbnl0aGluZyBpc24ndCBjbGVhci4KK2RubAorZGVmaW5lKGBkZWZmcmFtZV9lbXB0eV9pZl96ZXJvX2Rpc2FibGVkJywxKQorCitMKHVucm9sbCk6CisJQyBlYXgJeXAgKG5vdCB1c2VkKQorCUMgZWJ4CXhwIGVuZCAobm90IHVzZWQpCisJQyBlY3gJeHNpemUKKwlDIGVkeAl5c2l6ZS0xCisJQyBlc2kKKwlDIGVkaQl3cCBlbmQgb2YgbXVsMSAobm90IHVzZWQpCisJQyBlYnAKK2RlZmxpdChgRlJBTUUnLCAxNikKKworCWxlYWwJLTIoJWVjeCksICVlYnAJQyBvbmUgbGltYiBwcm9jZXNzZWQgYXQgc3RhcnQsCisJZGVjbAklZWN4CQlDIGFuZCBlYnAgaXMgb25lIGxlc3MKKworCXNocmwJJFVOUk9MTF9MT0cyLCAlZWJwCisJbmVnbAklZWN4CisKKwlzdWJsCSRWQVJfU1RBQ0tfU1BBQ0UsICVlc3AKK2RlZmxpdChgRlJBTUUnLCAxNitWQVJfU1RBQ0tfU1BBQ0UpCisJYW5kbAkkVU5ST0xMX01BU0ssICVlY3gKKworCW1vdmwJJWVjeCwgJWVzaQorCXNobGwJJDQsICVlY3gKKworCW1vdmwJJWVicCwgVkFSX0NPVU5URVJfSU5JVAorCW5lZ2wJJWVzaQorCisJQyAxNSBjb2RlIGJ5dGVzIHBlciBsaW1iCitpZmRlZihgUElDJyxgCisJY2FsbAlMKHBpY19jYWxjKQorTCh1bnJvbGxfaGVyZSk6CisnLGAKKwlsZWFsCUwodW5yb2xsX2VudHJ5KSAoJWVjeCwlZXNpLDEpLCAlZWN4CisnKQorCisJbW92bAlQQVJBTV9YUCwgJWVieAorCW1vdmwJJWVicCwgVkFSX0NPVU5URVIKKworCW1vdmwJUEFSQU1fV1AsICVlZGkKKwltb3ZsCSVlY3gsIFZBUl9KTVAKKworCW1vdmwJKCVlYngpLCAlZWF4CisJbGVhbAk0KCVlZGksJWVzaSw0KSwgJWVkaQlDIHdwIGFkanVzdCBmb3IgdW5yb2xsaW5nIGFuZCBtdWwxCisKKwlsZWFsCSglZWJ4LCVlc2ksNCksICVlYngJQyB4cCBhZGp1c3QgZm9yIHVucm9sbGluZworCisJbW92bAklZWF4LCBWQVJfWFBfTE9XCisKKwltb3ZsCSVlYngsIFBBUkFNX1hQCisJbW92bAlQQVJBTV9ZUCwgJWVieAorCisJbGVhbAkoJWVkaSwlZWR4LDQpLCAlZWN4CUMgd3AgYWRqdXN0IGZvciB5c2l6ZSBpbmRleGluZworCW1vdmwJNCglZWJ4KSwgJWVicAkJQyBtdWx0aXBsaWVyICh5cCBzZWNvbmQgbGltYikKKworCWxlYWwJNCglZWJ4LCVlZHgsNCksICVlYngJQyB5cCBhZGp1c3QgZm9yIHlzaXplIGluZGV4aW5nCisKKwltb3ZsCSVlY3gsIFBBUkFNX1dQCisKKwlsZWFsCTEoJWVzaSksICVlY3gJQyBhZGp1c3QgcGFyaXR5IGZvciBkZWNsICVlY3ggYWJvdmUKKworCW1vdmwJJWVieCwgUEFSQU1fWVAKKwluZWdsCSVlZHgKKworCW1vdmwJJWVkeCwgUEFSQU1fWVNJWkUKKwlqbXAJTCh1bnJvbGxfb3V0ZXJfZW50cnkpCisKKworaWZkZWYoYFBJQycsYAorTChwaWNfY2FsYyk6CisJQyBTZWUgbXBuL3g4Ni9SRUFETUUgYWJvdXQgb2xkIGdhcyBidWdzCisJbGVhbAkoJWVjeCwlZXNpLDEpLCAlZWN4CisJYWRkbAkkTCh1bnJvbGxfZW50cnkpLUwodW5yb2xsX2hlcmUpLCAlZWN4CisJYWRkbAkoJWVzcCksICVlY3gKKwlyZXRfaW50ZXJuYWwKKycpCisKKworQyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUMgQWxpZ25pbmcgaGVyZSBzYXZlcyBhIGNvdXBsZSBvZiBjeWNsZXMgcGVyIGxvb3AuICBVc2luZyAzMiBkb2Vzbid0CisJQyBjb3N0IGFueSBleHRyYSBzcGFjZSwgc2luY2UgdGhlIGlubmVyIHVucm9sbGVkIGxvb3AgYmVsb3cgaXMKKwlDIGFsaWduZWQgdG8gMzIuCisJQUxJR04oMzIpCitMKHVucm9sbF9vdXRlcl90b3ApOgorCUMgZWR4CXlzaXplCisKKwltb3ZsCVBBUkFNX1lQLCAlZWF4CisJbW92bAklZWR4LCBQQVJBTV9ZU0laRQlDIGluY3JlbWVudGVkIHlzaXplIGNvdW50ZXIKKworCW1vdmwJUEFSQU1fV1AsICVlZGkKKworCW1vdmwJVkFSX0NPVU5URVJfSU5JVCwgJWVieAorCW1vdmwJKCVlYXgsJWVkeCw0KSwgJWVicAlDIG5leHQgbXVsdGlwbGllcgorCisJbW92bAlQQVJBTV9YU0laRSwgJWVjeAorCWxlYWwJKCVlZGksJWVkeCw0KSwgJWVkaQlDIGFkanVzdCB3cCBmb3Igd2hlcmUgd2UgYXJlIGluIHlwCisKKwltb3ZsCVZBUl9YUF9MT1csICVlYXgKKwltb3ZsCSVlYngsIFZBUl9DT1VOVEVSCisKK0wodW5yb2xsX291dGVyX2VudHJ5KToKKwltdWxsCSVlYnAKKworCUMgdXNpbmcgdGVzdGIgaXMgYSB0aW55IGJpdCBmYXN0ZXIgdGhhbiB0ZXN0bAorCXRlc3RiCSQxLCAlY2wKKworCW1vdmwJJWVheCwgJWVjeAlDIGxvdyBjYXJyeQorCW1vdmwJVkFSX0pNUCwgJWVheAorCisJbW92bAklZWR4LCAlZXNpCUMgaGlnaCBjYXJyeQorCW1vdmwJUEFSQU1fWFAsICVlYngKKworCWpueglMKHVucm9sbF9ub3N3YXApCisJbW92bAklZWN4LCAlZXNpCUMgaGlnaCxsb3cgY2Fycnkgb3RoZXIgd2F5IGFyb3VuZAorCisJbW92bAklZWR4LCAlZWN4CitMKHVucm9sbF9ub3N3YXApOgorCisJam1wCSolZWF4CisKKworCitDIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJQUxJR04oMzIpCitMKHVucm9sbF90b3ApOgorCUMgZWF4CXNjcmF0Y2gKKwlDIGVieAl4cAorCUMgZWN4CWNhcnJ5IGxvdworCUMgZWR4CXNjcmF0Y2gKKwlDIGVzaQljYXJyeSBoaWdoCisJQyBlZGkJd3AKKwlDIGVicAltdWx0aXBsaWVyCisJQyBWQVJfQ09VTlRFUiAgbG9vcCBjb3VudGVyCisJQworCUMgMTUgY29kZSBieXRlcyBlYWNoIGxpbWIKKworCWxlYWwJVU5ST0xMX0JZVEVTKCVlZGkpLCAlZWRpCisKK0wodW5yb2xsX2VudHJ5KToKK2RlZmxpdChDSFVOS19DT1VOVCwyKQorZm9ybG9vcChgaScsIDAsIFVOUk9MTF9DT1VOVC9DSFVOS19DT1VOVC0xLCBgCisJZGVmbGl0KGBkaXNwMCcsIGV2YWwoaSpDSFVOS19DT1VOVCo0KSkKKwlkZWZsaXQoYGRpc3AxJywgZXZhbChkaXNwMCArIDQpKQorCWRlZmxpdChgZGlzcDInLCBldmFsKGRpc3AxICsgNCkpCisKKwltb3ZsCWRpc3AxKCVlYngpLCAlZWF4CisJbXVsbAklZWJwCitaZGlzcCgJYWRkbCwJJWVjeCwgZGlzcDAsKCVlZGkpKQorCWFkY2wJJWVheCwgJWVzaQorCW1vdmwJJWVkeCwgJWVjeAorCWphZGNsMCggJWVjeCkKKworCW1vdmwJZGlzcDIoJWVieCksICVlYXgKKwltdWxsCSVlYnAKKwlhZGRsCSVlc2ksIGRpc3AxKCVlZGkpCisJYWRjbAklZWF4LCAlZWN4CisJbW92bAklZWR4LCAlZXNpCisJamFkY2wwKCAlZXNpKQorJykKKworCWRlY2wJVkFSX0NPVU5URVIKKwlsZWFsCVVOUk9MTF9CWVRFUyglZWJ4KSwgJWVieAorCisJam5zCUwodW5yb2xsX3RvcCkKKworCisJbW92bAlQQVJBTV9ZU0laRSwgJWVkeAorCWFkZGwJJWVjeCwgVU5ST0xMX0JZVEVTKCVlZGkpCisKKwlhZGNsCSQwLCAlZXNpCisKKwlpbmNsCSVlZHgKKwltb3ZsCSVlc2ksIFVOUk9MTF9CWVRFUys0KCVlZGkpCisKKwlqbnoJTCh1bnJvbGxfb3V0ZXJfdG9wKQorCisKKwltb3ZsCVNBVkVfRVNJLCAlZXNpCisJbW92bAlTQVZFX0VCUCwgJWVicAorCW1vdmwJU0FWRV9FREksICVlZGkKKwltb3ZsCVNBVkVfRUJYLCAlZWJ4CisKKwlhZGRsCSRGUkFNRSwgJWVzcAorCXJldAorCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNi9wcmVfbW9kXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazYvcHJlX21vZF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGRiMjBkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazYvcHJlX21vZF8xLmFzbQpAQCAtMCwwICsxLDE0NiBAQAorZG5sICBBTUQgSzYgbXBuX3ByZWludl9tb2RfMSAtLSBtcG4gYnkgMSByZW1haW5kZXIsIHdpdGggcHJlLWludmVydGVkIGRpdmlzb3IuCisKK2RubCAgQ29weXJpZ2h0IDIwMDAsIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDIEs2OiAxOC4wIGN5Y2xlcy9saW1iCisKKworQyBtcF9saW1iX3QgbXBuX3ByZWludl9tb2RfMSAobXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUsIG1wX2xpbWJfdCBkaXZpc29yLAorQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBfbGltYl90IGludmVyc2UpOworQworQyBUaGlzIGNvZGUgaXMgb25seSAyIGMvbCBmYXN0ZXIgdGhhbiBhIHNpbXBsZSBkaXZsLCBidXQgdGhhdCdzIDEwJSBzbyBpdCdzCitDIGNvbnNpZGVyZWQgd29ydGh3aGlsZSAoanVzdCkuCisKK2RlZmZyYW1lKFBBUkFNX0lOVkVSU0UsMTYpCitkZWZmcmFtZShQQVJBTV9ESVZJU09SLDEyKQorZGVmZnJhbWUoUEFSQU1fU0laRSwgICAgOCkKK2RlZmZyYW1lKFBBUkFNX1NSQywgICAgIDQpCisKKwlURVhUCisJQUxJR04oMzIpCitQUk9MT0dVRShtcG5fcHJlaW52X21vZF8xKQorZGVmbGl0KGBGUkFNRScsMCkKKworCUFTU0VSVChhZSxgY21wbCAkMSwgUEFSQU1fU0laRScpCisJQVNTRVJUKG56LGB0ZXN0bCAkMHg4MDAwMDAwMCwgUEFSQU1fRElWSVNPUicpCisKKwltb3ZsCVBBUkFNX1NJWkUsICVlY3gKKwlwdXNobAklZWJwCUZSQU1FX3B1c2hsKCkKKworCW1vdmwJUEFSQU1fU1JDLCAlZWJwCisJcHVzaGwJJWVkaQlGUkFNRV9wdXNobCgpCisKKwltb3ZsCVBBUkFNX0RJVklTT1IsICVlYXgKKwlwdXNobAklZXNpCUZSQU1FX3B1c2hsKCkKKworCW1vdmwJLTQoJWVicCwlZWN4LDQpLCAlZXNpCUMgc3JjIGhpZ2ggbGltYgorCXB1c2hsCSVlYngJRlJBTUVfcHVzaGwoKQorCisJbW92bAklZWR4LCAlZWRpCQlDIGZpcnN0IG4yIHRvIGNhbmNlbAorCXN1YmwJJWVheCwgJWVzaQkJQyBmaXJzdCBuMSA9IGhpZ2gtZGl2aXNvcgorCisJZGVjbAklZWN4CisJanoJTChkb25lX3NiYmwpCisKK0wodG9wKToKKwlDIGVheAlzY3JhdGNoCisJQyBlYngJbjEwLCBuYWRqLCBxMQorCUMgZWN4CWNvdW50ZXIsIHNpemUgdG8gMQorCUMgZWR4CXNjcmF0Y2gKKwlDIGVzaQluMgorCUMgZWRpCW9sZCBoaWdoLCBmb3IgdW5kZXJmbG93IHRlc3QKKwlDIGVicAlzcmMKKworCXNiYmwJJWVkeCwgJWVkaQkgICAgQyBoaWdoIG4tKHExKzEpKmQsIDAgb3IgLTEKKworTChlbnRyeSk6CisJYW5kbAlQQVJBTV9ESVZJU09SLCAlZWRpCitMKHExX2ZmX3RvcCk6CisJbW92bAktNCglZWJwLCVlY3gsNCksICVlYngKKworCWFkZGwJJWVzaSwgJWVkaQkgICAgQyBwb3NzaWJsZSBhZGRiYWNrCisJbW92bAklZWJ4LCAlZXNpCSAgICBDIG4xMAorCisJc2FybAkkMzEsICVlYngJICAgIEMgLW4xID0gMCBvciAtMQorCW1vdmwJJWVkaSwgJWVheAkgICAgQyBuMgorCisJbW92bAlQQVJBTV9JTlZFUlNFLCAlZWR4CisJc3VibAklZWJ4LCAlZWF4CSAgICBDIG4yK24xCisKKwltdWxsCSVlZHgJCSAgICBDIG0qKG4yK24xKQorCisJYW5kbAlQQVJBTV9ESVZJU09SLCAlZWJ4IEMgLW4xICYgZAorCWFkZGwJJWVzaSwgJWVieAkgICAgQyBuYWRqID0gbjEwICsgKC1uMSZkKSwgaWdub3Jpbmcgb3ZlcmZsb3cKKworCWFkZGwJJWVieCwgJWVheAkgICAgQyBsb3cgbSoobjIrbjEpICsgbmFkaiwgZ2l2aW5nIGNhcnJ5IGZsYWcKKwlsZWFsCTEoJWVkaSksICVlYngJICAgIEMgbjIrMQorCisJYWRjbAklZWJ4LCAlZWR4CSAgICBDIDEraGlnaChuMjw8MzIrbSoobjIrbjEpK25hZGopID0gcTErMQorCisJbW92bAlQQVJBTV9ESVZJU09SLCAlZWF4IEMgZAorCWp6CUwocTFfZmYpCisKKwltdWxsCSVlZHgJCSAgICBDIChxMSsxKSpkCisKKwlzdWJsCSVlYXgsICVlc2kJICAgIEMgbG93ICBuLShxMSsxKSpkCisJbG9vcAlMKHRvcCkKKworCisKK0woZG9uZV9zYmJsKToKKwlzYmJsCSVlZHgsICVlZGkJICAgIEMgaGlnaCBuLShxMSsxKSpkLCAwIG9yIC0xCisKKwlhbmRsCVBBUkFNX0RJVklTT1IsICVlZGkKK0woZG9uZV9lc2lfZWRpKToKKwlwb3BsCSVlYngKKworCWxlYWwJKCVlc2ksJWVkaSksICVlYXgKKwlwb3BsCSVlc2kKKworCXBvcGwJJWVkaQorCXBvcGwJJWVicAorCisJcmV0CisKKworQyBTcGVjaWFsIGNhc2UgZm9yIHExPTB4RkZGRkZGRkYsIGdpdmluZyBxPTB4RkZGRkZGRkYgbWVhbmluZyB0aGUgbG93IGR3b3JkCitDIG9mIHEqZCBpcyBzaW1wbHkgLWQgYW5kIHRoZSByZW1haW5kZXIgbi1xKmQgPSBuMTArZC4gIFRoaXMgaXMgcmFyZWx5CitDIHJlYWNoZWQuCisKK0wocTFfZmYpOgorCW1vdmwJUEFSQU1fRElWSVNPUiwgJWVkaQorCWxvb3AJTChxMV9mZl90b3ApCisKKwlqbXAJTChkb25lX2VzaV9lZGkpCisKKworRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazYvc3FyX2Jhc2VjYXNlLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s2L3Nxcl9iYXNlY2FzZS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdlY2I1YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s2L3Nxcl9iYXNlY2FzZS5hc20KQEAgLTAsMCArMSw2ODAgQEAKK2RubCAgQU1EIEs2IG1wbl9zcXJfYmFzZWNhc2UgLS0gc3F1YXJlIGFuIG1wbiBudW1iZXIuCisKK2RubCAgQ29weXJpZ2h0IDE5OTktMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MgSzY6IGFwcHJveCA0LjcgY3ljbGVzIHBlciBjcm9zcyBwcm9kdWN0LCBvciA5LjIgY3ljbGVzIHBlciB0cmlhbmd1bGFyCitDICAgICBwcm9kdWN0IChtZWFzdXJlZCBvbiB0aGUgc3BlZWQgZGlmZmVyZW5jZSBiZXR3ZWVuIDE3IGFuZCAzMyBsaW1icywKK0MgICAgIHdoaWNoIGlzIHJvdWdobHkgdGhlIEthcmF0c3ViYSByZWN1cnNpbmcgcmFuZ2UpLgorCisKK2RubCAgU1FSX1RPT00yX1RIUkVTSE9MRF9NQVggaXMgdGhlIG1heGltdW0gU1FSX1RPT00yX1RIUkVTSE9MRCB0aGlzCitkbmwgIGNvZGUgc3VwcG9ydHMuICBUaGlzIHZhbHVlIGlzIHVzZWQgb25seSBieSB0aGUgdHVuZSBwcm9ncmFtIHRvIGtub3cKK2RubCAgd2hhdCBpdCBjYW4gZ28gdXAgdG8uICAoQW4gYXR0ZW1wdCB0byBjb21waWxlIHdpdGggYSBiaWdnZXIgdmFsdWUgd2lsbAorZG5sICB0cmlnZ2VyIHNvbWUgbTRfYXNzZXJ0KClzIGluIHRoZSBjb2RlLCBtYWtpbmcgdGhlIGJ1aWxkIGZhaWwuKQorZG5sCitkbmwgIFRoZSB2YWx1ZSBpcyBkZXRlcm1pbmVkIGJ5IHJlcXVpcmluZyB0aGUgZGlzcGxhY2VtZW50cyBpbiB0aGUgdW5yb2xsZWQKK2RubCAgYWRkbXVsIHRvIGZpdCBpbiBzaW5nbGUgYnl0ZXMuICBUaGlzIG1lYW5zIGEgbWF4aW11bSBVTlJPTExfQ09VTlQgb2YKK2RubCAgNjMsIGdpdmluZyBhIG1heGltdW0gU1FSX1RPT00yX1RIUkVTSE9MRCBvZiA2Ni4KKworZGVmbGl0KFNRUl9UT09NMl9USFJFU0hPTERfTUFYLCA2NikKKworCitkbmwgIEFsbG93IGEgdmFsdWUgZnJvbSB0aGUgdHVuZSBwcm9ncmFtIHRvIG92ZXJyaWRlIGNvbmZpZy5tNC4KKworaWZkZWYoYFNRUl9UT09NMl9USFJFU0hPTERfT1ZFUlJJREUnLAorYGRlZmluZShgU1FSX1RPT00yX1RIUkVTSE9MRCcsU1FSX1RPT00yX1RIUkVTSE9MRF9PVkVSUklERSknKQorCisKK2RubCAgVU5ST0xMX0NPVU5UIGlzIHRoZSBudW1iZXIgb2YgY29kZSBjaHVua3MgaW4gdGhlIHVucm9sbGVkIGFkZG11bC4gIFRoZQorZG5sICBudW1iZXIgcmVxdWlyZWQgaXMgZGV0ZXJtaW5lZCBieSBTUVJfVE9PTTJfVEhSRVNIT0xELCBzaW5jZQorZG5sICBtcG5fc3FyX2Jhc2VjYXNlIG9ubHkgbmVlZHMgdG8gaGFuZGxlIHNpemVzIDwgU1FSX1RPT00yX1RIUkVTSE9MRC4KK2RubAorZG5sICBUaGUgZmlyc3QgYWRkbXVsIGlzIHRoZSBiaWdnZXN0LCBhbmQgdGhpcyB0YWtlcyB0aGUgc2Vjb25kIGxlYXN0CitkbmwgIHNpZ25pZmljYW50IGxpbWIgYW5kIG11bHRpcGxpZXMgaXQgYnkgdGhlIHRoaXJkIGxlYXN0IHNpZ25pZmljYW50IGFuZAorZG5sICB1cC4gIEhlbmNlIGZvciBhIG1heGltdW0gb3BlcmFuZCBzaXplIG9mIFNRUl9UT09NMl9USFJFU0hPTEQtMQorZG5sICBsaW1icywgVU5ST0xMX0NPVU5UIG5lZWRzIHRvIGJlIFNRUl9UT09NMl9USFJFU0hPTEQtMy4KKworbTRfY29uZmlnX2dtcF9tcGFyYW0oYFNRUl9UT09NMl9USFJFU0hPTEQnKQorZGVmbGl0KFVOUk9MTF9DT1VOVCwgZXZhbChTUVJfVE9PTTJfVEhSRVNIT0xELTMpKQorCisKK0Mgdm9pZCBtcG5fc3FyX2Jhc2VjYXNlIChtcF9wdHIgZHN0LCBtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSk7CitDCitDIFRoZSBhbGdvcml0aG0gaXMgZXNzZW50aWFsbHkgdGhlIHNhbWUgYXMgbXBuL2dlbmVyaWMvc3FyX2Jhc2VjYXNlLmMsIGJ1dCBhCitDIGxvdCBvZiBmdW5jdGlvbiBjYWxsIG92ZXJoZWFkcyBhcmUgYXZvaWRlZCwgZXNwZWNpYWxseSB3aGVuIHRoZSBnaXZlbiBzaXplCitDIGlzIHNtYWxsLgorQworQyBUaGUgY29kZSBzaXplIG1pZ2h0IGxvb2sgYSBiaXQgZXhjZXNzaXZlLCBidXQgbm90IGFsbCBvZiBpdCBpcyBleGVjdXRlZAorQyBhbmQgc28gd29uJ3QgZmlsbCB1cCB0aGUgY29kZSBjYWNoZS4gIFRoZSAxeDEsIDJ4MiBhbmQgM3gzIHNwZWNpYWwgY2FzZXMKK0MgY2xlYXJseSBhcHBseSBvbmx5IHRvIHRob3NlIHNpemVzOyBtaWQgc2l6ZXMgbGlrZSAxMHgxMCBvbmx5IG5lZWQgcGFydCBvZgorQyB0aGUgdW5yb2xsZWQgYWRkbXVsOyBhbmQgYmlnIHNpemVzIGxpa2UgMzV4MzUgdGhhdCBkbyBuZWVkIGFsbCBvZiBpdCB3aWxsCitDIGF0IGxlYXN0IGJlIGdldHRpbmcgdmFsdWUgZm9yIG1vbmV5LCBiZWNhdXNlIDM1eDM1IHNwZW5kcyBzb21ldGhpbmcgbGlrZQorQyA1NzgwIGN5Y2xlcyBoZXJlLgorQworQyBEaWZmZXJlbnQgdmFsdWVzIG9mIFVOUk9MTF9DT1VOVCBnaXZlIHNsaWdodGx5IGRpZmZlcmVudCBzcGVlZHMsIGJldHdlZW4KK0MgOS4wIGFuZCA5LjIgYy90cmktcHJvZCBtZWFzdXJlZCBvbiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIDE3IGFuZCAzMyBsaW1icy4KK0MgVGhpcyBpc24ndCBhIGJpZyBkaWZmZXJlbmNlLCBidXQgaXQncyBwcmVzdW1hYmx5IHNvbWUgYWxpZ25tZW50IGVmZmVjdAorQyB3aGljaCBpZiB1bmRlcnN0b29kIGNvdWxkIGdpdmUgYSBzaW1wbGUgc3BlZWR1cC4KKworZGVmZnJhbWUoUEFSQU1fU0laRSwxMikKK2RlZmZyYW1lKFBBUkFNX1NSQywgOCkKK2RlZmZyYW1lKFBBUkFNX0RTVCwgNCkKKworCVRFWFQKKwlBTElHTigzMikKK1BST0xPR1VFKG1wbl9zcXJfYmFzZWNhc2UpCitkZWZsaXQoYEZSQU1FJywwKQorCisJbW92bAlQQVJBTV9TSVpFLCAlZWN4CisJbW92bAlQQVJBTV9TUkMsICVlYXgKKworCWNtcGwJJDIsICVlY3gKKwlqZQlMKHR3b19saW1icykKKworCW1vdmwJUEFSQU1fRFNULCAlZWR4CisJamEJTCh0aHJlZV9vcl9tb3JlKQorCisKK0MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0Mgb25lIGxpbWIgb25seQorCUMgZWF4CXNyYworCUMgZWJ4CisJQyBlY3gJc2l6ZQorCUMgZWR4CWRzdAorCisJbW92bAkoJWVheCksICVlYXgKKwltb3ZsCSVlZHgsICVlY3gKKworCW11bGwJJWVheAorCisJbW92bAklZWF4LCAoJWVjeCkKKwltb3ZsCSVlZHgsIDQoJWVjeCkKKwlyZXQKKworCitDIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJQUxJR04oMTYpCitMKHR3b19saW1icyk6CisJQyBlYXgJc3JjCisJQyBlYngKKwlDIGVjeAlzaXplCisJQyBlZHgJZHN0CisKKwlwdXNobAklZWJ4CisJbW92bAklZWF4LCAlZWJ4CUMgc3JjCitkZWZsaXQoYEZSQU1FJyw0KQorCisJbW92bAkoJWVieCksICVlYXgKKwltb3ZsCVBBUkFNX0RTVCwgJWVjeAorCisJbXVsbAklZWF4CQlDIHNyY1swXV4yCisKKwltb3ZsCSVlYXgsICglZWN4KQorCW1vdmwJNCglZWJ4KSwgJWVheAorCisJbW92bAklZWR4LCA0KCVlY3gpCisKKwltdWxsCSVlYXgJCUMgc3JjWzFdXjIKKworCW1vdmwJJWVheCwgOCglZWN4KQorCW1vdmwJKCVlYngpLCAlZWF4CisKKwltb3ZsCSVlZHgsIDEyKCVlY3gpCisJbW92bAk0KCVlYngpLCAlZWR4CisKKwltdWxsCSVlZHgJCUMgc3JjWzBdKnNyY1sxXQorCisJYWRkbAklZWF4LCA0KCVlY3gpCisKKwlhZGNsCSVlZHgsIDgoJWVjeCkKKwlhZGNsCSQwLCAxMiglZWN4KQorCisJcG9wbAklZWJ4CisJYWRkbAklZWF4LCA0KCVlY3gpCisKKwlhZGNsCSVlZHgsIDgoJWVjeCkKKwlhZGNsCSQwLCAxMiglZWN4KQorCisJcmV0CisKKworQyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTCh0aHJlZV9vcl9tb3JlKToKK2RlZmxpdChgRlJBTUUnLDApCisJY21wbAkkNCwgJWVjeAorCWphZQlMKGZvdXJfb3JfbW9yZSkKKworCitDIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDIHRocmVlIGxpbWJzCisJQyBlYXgJc3JjCisJQyBlY3gJc2l6ZQorCUMgZWR4CWRzdAorCisJcHVzaGwJJWVieAorCW1vdmwJJWVheCwgJWVieAlDIHNyYworCisJbW92bAkoJWVieCksICVlYXgKKwltb3ZsCSVlZHgsICVlY3gJQyBkc3QKKworCW11bGwJJWVheAkJQyBzcmNbMF0gXiAyCisKKwltb3ZsCSVlYXgsICglZWN4KQorCW1vdmwJNCglZWJ4KSwgJWVheAorCisJbW92bAklZWR4LCA0KCVlY3gpCisJcHVzaGwJJWVzaQorCisJbXVsbAklZWF4CQlDIHNyY1sxXSBeIDIKKworCW1vdmwJJWVheCwgOCglZWN4KQorCW1vdmwJOCglZWJ4KSwgJWVheAorCisJbW92bAklZWR4LCAxMiglZWN4KQorCXB1c2hsCSVlZGkKKworCW11bGwJJWVheAkJQyBzcmNbMl0gXiAyCisKKwltb3ZsCSVlYXgsIDE2KCVlY3gpCisJbW92bAkoJWVieCksICVlYXgKKworCW1vdmwJJWVkeCwgMjAoJWVjeCkKKwltb3ZsCTQoJWVieCksICVlZHgKKworCW11bGwJJWVkeAkJQyBzcmNbMF0gKiBzcmNbMV0KKworCW1vdmwJJWVheCwgJWVzaQorCW1vdmwJKCVlYngpLCAlZWF4CisKKwltb3ZsCSVlZHgsICVlZGkKKwltb3ZsCTgoJWVieCksICVlZHgKKworCXB1c2hsCSVlYnAKKwl4b3JsCSVlYnAsICVlYnAKKworCW11bGwJJWVkeAkJQyBzcmNbMF0gKiBzcmNbMl0KKworCWFkZGwJJWVheCwgJWVkaQorCW1vdmwJNCglZWJ4KSwgJWVheAorCisJYWRjbAklZWR4LCAlZWJwCisKKwltb3ZsCTgoJWVieCksICVlZHgKKworCW11bGwJJWVkeAkJQyBzcmNbMV0gKiBzcmNbMl0KKworCWFkZGwJJWVheCwgJWVicAorCisJYWRjbAkkMCwgJWVkeAorCisKKwlDIGVheAl3aWxsIGJlIGRzdFs1XQorCUMgZWJ4CisJQyBlY3gJZHN0CisJQyBlZHgJZHN0WzRdCisJQyBlc2kJZHN0WzFdCisJQyBlZGkJZHN0WzJdCisJQyBlYnAJZHN0WzNdCisKKwl4b3JsCSVlYXgsICVlYXgKKwlhZGRsCSVlc2ksICVlc2kKKwlhZGNsCSVlZGksICVlZGkKKwlhZGNsCSVlYnAsICVlYnAKKwlhZGNsCSVlZHgsICVlZHgKKwlhZGNsCSQwLCAlZWF4CisKKwlhZGRsCSVlc2ksIDQoJWVjeCkKKwlhZGNsCSVlZGksIDgoJWVjeCkKKwlhZGNsCSVlYnAsIDEyKCVlY3gpCisKKwlwb3BsCSVlYnAKKwlwb3BsCSVlZGkKKworCWFkY2wJJWVkeCwgMTYoJWVjeCkKKworCXBvcGwJJWVzaQorCXBvcGwJJWVieAorCisJYWRjbAklZWF4LCAyMCglZWN4KQorCUFTU0VSVChuYykKKworCXJldAorCisKK0MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmZnJhbWUoU0FWRV9FQlgsICAgLTQpCitkZWZmcmFtZShTQVZFX0VTSSwgICAtOCkKK2RlZmZyYW1lKFNBVkVfRURJLCAgIC0xMikKK2RlZmZyYW1lKFNBVkVfRUJQLCAgIC0xNikKK2RlZmZyYW1lKFZBUl9DT1VOVEVSLC0yMCkKK2RlZmZyYW1lKFZBUl9KTVAsICAgIC0yNCkKK2RlZmxpdChTVEFDS19TUEFDRSwgMjQpCisKKwlBTElHTigxNikKK0woZm91cl9vcl9tb3JlKToKKworCUMgZWF4CXNyYworCUMgZWJ4CisJQyBlY3gJc2l6ZQorCUMgZWR4CWRzdAorCUMgZXNpCisJQyBlZGkKKwlDIGVicAorCitDIEZpcnN0IG11bHRpcGx5IHNyY1swXSpzcmNbMS4uc2l6ZS0xXSBhbmQgc3RvcmUgYXQgZHN0WzEuLnNpemVdLgorQworQyBBIHRlc3Qgd2FzIGRvbmUgY2FsbGluZyBtcG5fbXVsXzEgaGVyZSB0byBnZXQgdGhlIGJlbmVmaXQgb2YgaXRzIHVucm9sbGVkCitDIGxvb3AsIGJ1dCB0aGlzIHdhcyBvbmx5IGEgdGlueSBzcGVlZHVwOyBhdCAzNSBsaW1icyBpdCB0b29rIDI0IGN5Y2xlcyBvZmYKK0MgYSA1NzgwIGN5Y2xlIG9wZXJhdGlvbiwgd2hpY2ggaXMgbm90IHN1cnByaXNpbmcgc2luY2UgdGhlIGxvb3AgaGVyZSBpcyA4CitDIGMvbCBhbmQgbXBuX211bF8xIGlzIDYuMjUgYy9sLgorCisJc3VibAkkU1RBQ0tfU1BBQ0UsICVlc3AJZGVmbGl0KGBGUkFNRScsU1RBQ0tfU1BBQ0UpCisKKwltb3ZsCSVlZGksIFNBVkVfRURJCisJbGVhbAk0KCVlZHgpLCAlZWRpCisKKwltb3ZsCSVlYngsIFNBVkVfRUJYCisJbGVhbAk0KCVlYXgpLCAlZWJ4CisKKwltb3ZsCSVlc2ksIFNBVkVfRVNJCisJeG9ybAklZXNpLCAlZXNpCisKKwltb3ZsCSVlYnAsIFNBVkVfRUJQCisKKwlDIGVheAorCUMgZWJ4CXNyYys0CisJQyBlY3gJc2l6ZQorCUMgZWR4CisJQyBlc2kKKwlDIGVkaQlkc3QrNAorCUMgZWJwCisKKwltb3ZsCSglZWF4KSwgJWVicAlDIG11bHRpcGxpZXIKKwlsZWFsCS0xKCVlY3gpLCAlZWN4CUMgc2l6ZS0xLCBhbmQgcGFkIHRvIGEgMTYgYnl0ZSBib3VuZGFyeQorCisKKwlBTElHTigxNikKK0wobXVsXzEpOgorCUMgZWF4CXNjcmF0Y2gKKwlDIGVieAlzcmMgcHRyCisJQyBlY3gJY291bnRlcgorCUMgZWR4CXNjcmF0Y2gKKwlDIGVzaQljYXJyeQorCUMgZWRpCWRzdCBwdHIKKwlDIGVicAltdWx0aXBsaWVyCisKKwltb3ZsCSglZWJ4KSwgJWVheAorCWFkZGwJJDQsICVlYngKKworCW11bGwJJWVicAorCisJYWRkbAklZXNpLCAlZWF4CisJbW92bAkkMCwgJWVzaQorCisJYWRjbAklZWR4LCAlZXNpCisKKwltb3ZsCSVlYXgsICglZWRpKQorCWFkZGwJJDQsICVlZGkKKworCWxvb3AJTChtdWxfMSkKKworCitDIEFkZG11bCBzcmNbbl0qc3JjW24rMS4uc2l6ZS0xXSBhdCBkc3RbMipuLTEuLi5dLCBmb3IgZWFjaCBuPTEuLnNpemUtMi4KK0MKK0MgVGhlIGxhc3QgdHdvIGFkZG11bHMsIHdoaWNoIGFyZSB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lciBvZiB0aGUgcHJvZHVjdAorQyB0cmlhbmdsZSwgYXJlIGxlZnQgdG8gdGhlIGVuZC4gIFRoZXNlIGFyZSBzcmNbc2l6ZS0zXSpzcmNbc2l6ZS0yLHNpemUtMV0KK0MgYW5kIHNyY1tzaXplLTJdKnNyY1tzaXplLTFdLiAgSWYgc2l6ZSBpcyA0IHRoZW4gaXQncyBvbmx5IHRoZXNlIGNvcm5lcgorQyBjYXNlcyB0aGF0IG5lZWQgdG8gYmUgZG9uZS4KK0MKK0MgVGhlIHVucm9sbGVkIGNvZGUgaXMgdGhlIHNhbWUgYXMgbXBuX2FkZG11bF8xKCksIHNlZSB0aGF0IHJvdXRpbmUgZm9yIHNvbWUKK0MgY29tbWVudHMuCitDCitDIFZBUl9DT1VOVEVSIGlzIHRoZSBvdXRlciBsb29wLCBydW5uaW5nIGZyb20gLShzaXplLTQpIHRvIC0xLCBpbmNsdXNpdmUuCitDCitDIFZBUl9KTVAgaXMgdGhlIGNvbXB1dGVkIGp1bXAgaW50byB0aGUgdW5yb2xsZWQgY29kZSwgc3RlcHBlZCBieSBvbmUgY29kZQorQyBjaHVuayBlYWNoIG91dGVyIGxvb3AuCitDCitDIEs2IGRvZXNuJ3QgZG8gYW55IGJyYW5jaCBwcmVkaWN0aW9uIG9uIGluZGlyZWN0IGp1bXBzLCB3aGljaCBpcyBnb29kCitDIGFjdHVhbGx5IGJlY2F1c2UgaXQncyBhIGRpZmZlcmVudCB0YXJnZXQgZWFjaCB0aW1lLiAgVGhlIHVucm9sbGVkIGFkZG11bAorQyBpcyBhYm91dCAzIGN5Y2xlcy9saW1iIGZhc3RlciB0aGFuIGEgc2ltcGxlIGxvb3AsIHNvIHRoZSA2IGN5Y2xlIGNvc3Qgb2YKK0MgdGhlIGluZGlyZWN0IGp1bXAgaXMgcXVpY2tseSByZWNvdmVyZWQuCisKKworZG5sICBUaGlzIHZhbHVlIGlzIGFsc28gaW1wbGljaXRseSBlbmNvZGVkIGluIGEgc2hpZnQgYW5kIGFkZC4KK2RubAorZGVmbGl0KENPREVfQllURVNfUEVSX0xJTUIsIDE1KQorCitkbmwgIFdpdGggdGhlIHVubW9kaWZpZWQgJnNyY1tzaXplXSBhbmQgJmRzdFtzaXplXSBwb2ludGVycywgdGhlCitkbmwgIGRpc3BsYWNlbWVudHMgaW4gdGhlIHVucm9sbGVkIGNvZGUgZml0IGluIGEgYnl0ZSBmb3IgVU5ST0xMX0NPVU5UCitkbmwgIHZhbHVlcyB1cCB0byAzMS4gIEFib3ZlIHRoYXQgYW4gb2Zmc2V0IG11c3QgYmUgYWRkZWQgdG8gdGhlbS4KK2RubAorZGVmbGl0KE9GRlNFVCwKK2lmZWxzZShldmFsKFVOUk9MTF9DT1VOVD4zMSksMSwKK2V2YWwoKFVOUk9MTF9DT1VOVC0zMSkqNCksCiswKSkKKworCUMgZWF4CisJQyBlYngJJnNyY1tzaXplXQorCUMgZWN4CisJQyBlZHgKKwlDIGVzaQljYXJyeQorCUMgZWRpCSZkc3Rbc2l6ZV0KKwlDIGVicAorCisJbW92bAlQQVJBTV9TSVpFLCAlZWN4CisJbW92bAklZXNpLCAoJWVkaSkKKworCXN1YmwJJDQsICVlY3gKKwlqeglMKGNvcm5lcikKKworCW1vdmwJJWVjeCwgJWVkeAoraWZlbHNlKE9GRlNFVCwwLCwKK2AJc3VibAkkT0ZGU0VULCAlZWJ4JykKKworCXNobGwJJDQsICVlY3gKK2lmZWxzZShPRkZTRVQsMCwsCitgCXN1YmwJJE9GRlNFVCwgJWVkaScpCisKKwluZWdsCSVlY3gKKworaWZkZWYoYFBJQycsYAorCWNhbGwJTChwaWNfY2FsYykKK0woaGVyZSk6CisnLGAKKwlsZWFsCUwodW5yb2xsX2lubmVyX2VuZCktZXZhbCgyKkNPREVfQllURVNfUEVSX0xJTUIpKCVlY3gsJWVkeCksICVlY3gKKycpCisJbmVnbAklZWR4CisKKworCUMgVGhlIGNhbGN1bGF0ZWQganVtcCBtdXN0bid0IGJlIGJlZm9yZSB0aGUgc3RhcnQgb2YgdGhlIGF2YWlsYWJsZQorCUMgY29kZS4gIFRoaXMgaXMgdGhlIGxpbWl0YXRpb24gVU5ST0xMX0NPVU5UIHB1dHMgb24gdGhlIHNyYyBvcGVyYW5kCisJQyBzaXplLCBidXQgY2hlY2tlZCBoZXJlIHVzaW5nIHRoZSBqdW1wIGFkZHJlc3MgZGlyZWN0bHkuCisJQworCUFTU0VSVChhZSxgCisJbW92bF90ZXh0X2FkZHJlc3MoIEwodW5yb2xsX2lubmVyX3N0YXJ0KSwgJWVheCkKKwljbXBsCSVlYXgsICVlY3gKKwknKQorCisKK0MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlBTElHTigxNikKK0wodW5yb2xsX291dGVyX3RvcCk6CisJQyBlYXgKKwlDIGVieAkmc3JjW3NpemVdLCBjb25zdGFudAorCUMgZWN4CVZBUl9KTVAKKwlDIGVkeAlWQVJfQ09VTlRFUiwgbGltYnMsIG5lZ2F0aXZlCisJQyBlc2kJaGlnaCBsaW1iIHRvIHN0b3JlCisJQyBlZGkJZHN0IHB0ciwgaGlnaCBvZiBsYXN0IGFkZG11bAorCUMgZWJwCisKKwltb3ZsCS0xMitPRkZTRVQoJWVieCwlZWR4LDQpLCAlZWJwCUMgbXVsdGlwbGllcgorCW1vdmwJJWVkeCwgVkFSX0NPVU5URVIKKworCW1vdmwJLTgrT0ZGU0VUKCVlYngsJWVkeCw0KSwgJWVheAlDIGZpcnN0IGxpbWIgb2YgbXVsdGlwbGljYW5kCisKKwltdWxsCSVlYnAKKworCXRlc3RiCSQxLCAlY2wKKworCW1vdmwJJWVkeCwgJWVzaQlDIGhpZ2ggY2FycnkKKwltb3ZsCSVlY3gsICVlZHgJQyBqdW1wCisKKwltb3ZsCSVlYXgsICVlY3gJQyBsb3cgY2FycnkKKwlsZWFsCUNPREVfQllURVNfUEVSX0xJTUIoJWVkeCksICVlZHgKKworCW1vdmwJJWVkeCwgVkFSX0pNUAorCWxlYWwJNCglZWRpKSwgJWVkaQorCisJQyBBIGJyYW5jaC1mcmVlIHZlcnNpb24gb2YgdGhpcyB1c2luZyBzb21lIHhvcnMgd2FzIGZvdW5kIHRvIGJlIGEKKwlDIHRvdWNoIHNsb3dlciB0aGFuIGp1c3QgYSBjb25kaXRpb25hbCBqdW1wLCBkZXNwaXRlIHRoZSBqdW1wCisJQyBzd2l0Y2hpbmcgYmV0d2VlbiB0YWtlbiBhbmQgbm90IHRha2VuIG9uIGV2ZXJ5IGxvb3AuCisKK2lmZWxzZShldmFsKFVOUk9MTF9DT1VOVCUyKSwwLAorCWp6LGpueikJTCh1bnJvbGxfbm9zd2FwKQorCW1vdmwJJWVzaSwgJWVheAlDIGhpZ2gsbG93IGNhcnJ5IG90aGVyIHdheSBhcm91bmQKKworCW1vdmwJJWVjeCwgJWVzaQorCW1vdmwJJWVheCwgJWVjeAorTCh1bnJvbGxfbm9zd2FwKToKKworCWptcAkqJWVkeAorCisKKwlDIE11c3QgYmUgb24gYW4gZXZlbiBhZGRyZXNzIGhlcmUgc28gdGhlIGxvdyBiaXQgb2YgdGhlIGp1bXAgYWRkcmVzcworCUMgd2lsbCBpbmRpY2F0ZSB3aGljaCB3YXkgYXJvdW5kIGVjeC9lc2kgc2hvdWxkIHN0YXJ0LgorCUMKKwlDIEFuIGF0dGVtcHQgd2FzIG1hZGUgYXQgcGFkZGluZyBoZXJlIHRvIGdldCB0aGUgZW5kIG9mIHRoZSB1bnJvbGxlZAorCUMgY29kZSB0byBjb21lIG91dCBvbiBhIGdvb2QgYWxpZ25tZW50LCB0byBzYXZlIHBhZGRpbmcgYmVmb3JlCisJQyBMKGNvcm5lcikuICBUaGlzIHdvcmtlZCwgYnV0IHR1cm5lZCBvdXQgdG8gcnVuIHNsb3dlciB0aGFuIGp1c3QgYW4KKwlDIEFMSUdOKDIpLiAgVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyBub3QgY2xlYXIsIGl0IG1pZ2h0IGJlIHJlbGF0ZWQKKwlDIHRvIHRoZSBkaWZmZXJlbnQgc3BlZWRzIG9uIGRpZmZlcmVudCBVTlJPTExfQ09VTlRzIG5vdGVkIGFib3ZlLgorCisJQUxJR04oMikKKworTCh1bnJvbGxfaW5uZXJfc3RhcnQpOgorCUMgZWF4CXNjcmF0Y2gKKwlDIGVieAlzcmMKKwlDIGVjeAljYXJyeSBsb3cKKwlDIGVkeAlzY3JhdGNoCisJQyBlc2kJY2FycnkgaGlnaAorCUMgZWRpCWRzdAorCUMgZWJwCW11bHRpcGxpZXIKKwlDCisJQyAxNSBjb2RlIGJ5dGVzIGVhY2ggbGltYgorCUMgZWN4L2VzaSBzd2FwcGVkIG9uIGVhY2ggY2h1bmsKKworZm9ybG9vcChgaScsIFVOUk9MTF9DT1VOVCwgMSwgYAorCWRlZmxpdChgZGlzcF9zcmMnLCBldmFsKC1pKjQgKyBPRkZTRVQpKQorCWRlZmxpdChgZGlzcF9kc3QnLCBldmFsKGRpc3Bfc3JjIC0gNCkpCisKKwltNF9hc3NlcnQoYGRpc3Bfc3JjPj0tMTI4ICYmIGRpc3Bfc3JjPDEyOCcpCisJbTRfYXNzZXJ0KGBkaXNwX2RzdD49LTEyOCAmJiBkaXNwX2RzdDwxMjgnKQorCitpZmVsc2UoZXZhbChpJTIpLDAsYAorWmRpc3AoCW1vdmwsCWRpc3Bfc3JjLCglZWJ4KSwgJWVheCkKKwltdWxsCSVlYnAKK1pkaXNwKAlhZGRsLAklZXNpLCBkaXNwX2RzdCwoJWVkaSkpCisJYWRjbAklZWF4LCAlZWN4CisJbW92bAklZWR4LCAlZXNpCisJamFkY2wwKCAlZXNpKQorJyxgCisJZG5sICB0aGlzIG9uZSBjb21lcyBvdXQgbGFzdAorWmRpc3AoCW1vdmwsCWRpc3Bfc3JjLCglZWJ4KSwgJWVheCkKKwltdWxsCSVlYnAKK1pkaXNwKAlhZGRsLAklZWN4LCBkaXNwX2RzdCwoJWVkaSkpCisJYWRjbAklZWF4LCAlZXNpCisJbW92bAklZWR4LCAlZWN4CisJamFkY2wwKCAlZWN4KQorJykKKycpCitMKHVucm9sbF9pbm5lcl9lbmQpOgorCisJYWRkbAklZXNpLCAtNCtPRkZTRVQoJWVkaSkKKworCW1vdmwJVkFSX0NPVU5URVIsICVlZHgKKwlqYWRjbDAoCSVlY3gpCisKKwltb3ZsCSVlY3gsIG00X2VtcHR5X2lmX3plcm8oT0ZGU0VUKSglZWRpKQorCW1vdmwJVkFSX0pNUCwgJWVjeAorCisJaW5jbAklZWR4CisJam56CUwodW5yb2xsX291dGVyX3RvcCkKKworCitpZmVsc2UoT0ZGU0VULDAsLGAKKwlhZGRsCSRPRkZTRVQsICVlYngKKwlhZGRsCSRPRkZTRVQsICVlZGkKKycpCisKKworQyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUFMSUdOKDE2KQorTChjb3JuZXIpOgorCUMgZWJ4CSZzcmNbc2l6ZV0KKwlDIGVkaQkmZHN0WzIqc2l6ZS01XQorCisJbW92bAktMTIoJWVieCksICVlYnAKKworCW1vdmwJLTgoJWVieCksICVlYXgKKwltb3ZsCSVlYXgsICVlY3gKKworCW11bGwJJWVicAorCisJYWRkbAklZWF4LCAtNCglZWRpKQorCWFkY2wJJDAsICVlZHgKKworCW1vdmwJLTQoJWVieCksICVlYXgKKwltb3ZsCSVlZHgsICVlc2kKKwltb3ZsCSVlYXgsICVlYngKKworCW11bGwJJWVicAorCisJYWRkbAklZXNpLCAlZWF4CisJYWRjbAkkMCwgJWVkeAorCisJYWRkbAklZWF4LCAoJWVkaSkKKwlhZGNsCSQwLCAlZWR4CisKKwltb3ZsCSVlZHgsICVlc2kKKwltb3ZsCSVlYngsICVlYXgKKworCW11bGwJJWVjeAorCisJYWRkbAklZXNpLCAlZWF4CisJbW92bAklZWF4LCA0KCVlZGkpCisKKwlhZGNsCSQwLCAlZWR4CisKKwltb3ZsCSVlZHgsIDgoJWVkaSkKKworCitDIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDIExlZnQgc2hpZnQgb2YgZHN0WzEuLjIqc2l6ZS0yXSwgdGhlIGJpdCBzaGlmdGVkIG91dCBiZWNvbWVzIGRzdFsyKnNpemUtMV0uCitDIFRoZSBsb29wIG1lYXN1cmVzIGFib3V0IDYgY3ljbGVzL2l0ZXJhdGlvbiwgdGhvdWdoIGl0IGxvb2tzIGxpa2UgaXQgc2hvdWxkCitDIGRlY29kZSBpbiA1LgorCitMKGxzaGlmdF9zdGFydCk6CisJbW92bAlQQVJBTV9TSVpFLCAlZWN4CisKKwltb3ZsCVBBUkFNX0RTVCwgJWVkaQorCXN1YmwJJDEsICVlY3gJCUMgc2l6ZS0xIGFuZCBjbGVhciBjYXJyeQorCisJbW92bAlQQVJBTV9TUkMsICVlYngKKwltb3ZsCSVlY3gsICVlZHgKKworCXhvcmwJJWVheCwgJWVheAkJQyByZWFkeSBmb3IgYWRjbAorCisKKwlBTElHTigxNikKK0wobHNoaWZ0KToKKwlDIGVheAorCUMgZWJ4CXNyYyAoZm9yIGxhdGVyIHVzZSkKKwlDIGVjeAljb3VudGVyLCBkZWNyZW1lbnRpbmcKKwlDIGVkeAlzaXplLTEgKGZvciBsYXRlciB1c2UpCisJQyBlc2kKKwlDIGVkaQlkc3QsIGluY3JlbWVudGluZworCUMgZWJwCisKKwlyY2xsCTQoJWVkaSkKKwlyY2xsCTgoJWVkaSkKKwlsZWFsCTgoJWVkaSksICVlZGkKKwlsb29wCUwobHNoaWZ0KQorCisKKwlhZGNsCSVlYXgsICVlYXgKKworCW1vdmwJJWVheCwgNCglZWRpKQkJQyBkc3QgbW9zdCBzaWduaWZpY2FudCBsaW1iCisJbW92bAkoJWVieCksICVlYXgJCUMgc3JjWzBdCisKKwlsZWFsCTQoJWVieCwlZWR4LDQpLCAlZWJ4CUMgJnNyY1tzaXplXQorCXN1YmwJJWVkeCwgJWVjeAkJQyAtKHNpemUtMSkKKworCitDIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDIE5vdyBhZGQgaW4gdGhlIHNxdWFyZXMgb24gdGhlIGRpYWdvbmFsLCBzcmNbMF1eMiwgc3JjWzFdXjIsIC4uLiwKK0Mgc3JjW3NpemUtMV1eMi4gIGRzdFswXSBoYXNuJ3QgeWV0IGJlZW4gc2V0IGF0IGFsbCB5ZXQsIGFuZCBqdXN0IGdldHMgdGhlCitDIGxvdyBsaW1iIG9mIHNyY1swXV4yLgorCisKKwltdWxsCSVlYXgKKworCW1vdmwJJWVheCwgKCVlZGksJWVjeCw4KQlDIGRzdFswXQorCisKKwlBTElHTigxNikKK0woZGlhZyk6CisJQyBlYXgJc2NyYXRjaAorCUMgZWJ4CSZzcmNbc2l6ZV0KKwlDIGVjeAljb3VudGVyLCBuZWdhdGl2ZQorCUMgZWR4CWNhcnJ5CisJQyBlc2kJc2NyYXRjaAorCUMgZWRpCWRzdFsyKnNpemUtMl0KKwlDIGVicAorCisJbW92bAkoJWVieCwlZWN4LDQpLCAlZWF4CisJbW92bAklZWR4LCAlZXNpCisKKwltdWxsCSVlYXgKKworCWFkZGwJJWVzaSwgNCglZWRpLCVlY3gsOCkKKwlhZGNsCSVlYXgsIDgoJWVkaSwlZWN4LDgpCisJYWRjbAkkMCwgJWVkeAorCisJaW5jbAklZWN4CisJam56CUwoZGlhZykKKworCisJbW92bAlTQVZFX0VCWCwgJWVieAorCW1vdmwJU0FWRV9FU0ksICVlc2kKKworCWFkZGwJJWVkeCwgNCglZWRpKQkJQyBkc3QgbW9zdCBzaWduaWZpY2FudCBsaW1iCisKKwltb3ZsCVNBVkVfRURJLCAlZWRpCisJbW92bAlTQVZFX0VCUCwgJWVicAorCWFkZGwJJEZSQU1FLCAlZXNwCisJcmV0CisKKworCitDIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitpZmRlZihgUElDJyxgCitMKHBpY19jYWxjKToKKwlDIFNlZSBtcG4veDg2L1JFQURNRSBhYm91dCBvbGQgZ2FzIGJ1Z3MKKwlhZGRsCSglZXNwKSwgJWVjeAorCWFkZGwJJEwodW5yb2xsX2lubmVyX2VuZCktTChoZXJlKS1ldmFsKDIqQ09ERV9CWVRFU19QRVJfTElNQiksICVlY3gKKwlhZGRsCSVlZHgsICVlY3gKKwlyZXRfaW50ZXJuYWwKKycpCisKKworRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazcvUkVBRE1FIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazcvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MTFiNjEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNy9SRUFETUUKQEAgLTAsMCArMSwxNzQgQEAKK0NvcHlyaWdodCAyMDAwLCAyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworCisKKyAgICAgICAgICAgICAgICAgICAgICBBTUQgSzcgTVBOIFNVQlJPVVRJTkVTCisKKworVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgY29kZSBvcHRpbWl6ZWQgZm9yIHRoZSBBTUQgQXRobG9uIENQVS4KKworVGhlIG1teCBzdWJkaXJlY3RvcnkgaGFzIHJvdXRpbmVzIHVzaW5nIE1NWCBpbnN0cnVjdGlvbnMuICBBbGwgQXRobG9ucyBoYXZlCitNTVgsIHRoZSBzZXBhcmF0ZSBkaXJlY3RvcnkgaXMganVzdCBzbyB0aGF0IGNvbmZpZ3VyZSBjYW4gb21pdCBpdCBpZiB0aGUKK2Fzc2VtYmxlciBkb2Vzbid0IHN1cHBvcnQgTU1YLgorCisKKworU1RBVFVTCisKK1RpbWVzIGZvciB0aGUgbG9vcHMsIHdpdGggYWxsIGNvZGUgYW5kIGRhdGEgaW4gTDEgY2FjaGUuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjeWNsZXMvbGltYgorCW1wbl9hZGQvc3ViX24gICAgICAgICAgICAgMS42CisKKwltcG5fY29weWkgICAgICAgICAgICAgICAgIDAuNzUgb3IgMS4wICAgXCB2YXJ5aW5nIHdpdGggZGF0YSBhbGlnbm1lbnQKKwltcG5fY29weWQgICAgICAgICAgICAgICAgIDAuNzUgb3IgMS4wICAgLworCisJbXBuX2RpdnJlbV8xICAgICAgICAgICAgIDE3LjAgaW50ZWdlciBwYXJ0LCAxNS4wIGZyYWN0aW9uYWwgcGFydAorCW1wbl9tb2RfMSAgICAgICAgICAgICAgICAxNy4wCisJbXBuX2RpdmV4YWN0X2J5MyAgICAgICAgICA4LjAKKworCW1wbl9sL3JzaGlmdCAgICAgICAgICAgICAgMS4yCisKKwltcG5fbXVsXzEgICAgICAgICAgICAgICAgIDMuNAorCW1wbl9hZGRtdWwvc3VibXVsXzEgICAgICAgMy45CisKKwltcG5fbXVsX2Jhc2VjYXNlICAgICAgICAgIDQuNDIgY3ljbGVzL2Nyb3NzcHJvZHVjdCAoYXBwcm94KQorICAgICAgICBtcG5fc3FyX2Jhc2VjYXNlICAgICAgICAgIDIuMyBjeWNsZXMvY3Jvc3Nwcm9kdWN0IChhcHByb3gpCisJCQkJICBvciA0LjU1IGN5Y2xlcy90cmlhbmdsZXByb2R1Y3QgKGFwcHJveCkKKworUHJlZmV0Y2hpbmcgb2Ygc291cmNlcyBoYXNuJ3QgeWV0IGJlZW4gdHJpZWQuCisKKworCitOT1RFUworCitjbW92LCBNTVgsIDNETm93IGFuZCBzb21lIGV4dGVuc2lvbnMgdG8gTU1YIGFuZCAzRE5vdyBhcmUgYXZhaWxhYmxlLgorCitXcml0ZS1hbGxvY2F0ZSBMMSBkYXRhIGNhY2hlIG1lYW5zIHByZWZldGNoaW5nIG9mIGRlc3RpbmF0aW9ucyBpcyB1bm5lY2Vzc2FyeS4KKworRmxvYXRpbmcgcG9pbnQgbXVsdGlwbGljYXRpb25zIGNhbiBiZSBkb25lIGluIHBhcmFsbGVsIHdpdGggaW50ZWdlcgorbXVsdGlwbGljYXRpb25zLCBidXQgdGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlIGFueSB3YXkgdG8gbWFrZSB1c2Ugb2YgdGhpcy4KKworVW5zaWduZWQgIm11bCJzIGNhbiBiZSBpc3N1ZWQgZXZlcnkgMyBjeWNsZXMuICBUaGlzIHN1Z2dlc3RzIDMgaXMgYSBsaW1pdCBvbgordGhlIHNwZWVkIG9mIHRoZSBtdWx0aXBsaWNhdGlvbiByb3V0aW5lcy4gIFRoZSBkb2N1bWVudGF0aW9uIHNob3dzIG11bAorZXhlY3V0aW5nIGluIElFVTAgKG9yIG1heWJlIGluIElFVTAgYW5kIElFVTEgdG9nZXRoZXIpLCBzbyBpdCBtaWdodCBiZSB0aGF0LAordG8gZ2V0IG5lYXIgMyBjeWNsZXMgY29kZSBoYXMgdG8gYmUgYXJyYW5nZWQgc28gdGhhdCBub3RoaW5nIGVsc2UgaXMgaXNzdWVkCit0byBJRVUwLiAgQSBidXN5IElFVTAgY291bGQgZXhwbGFpbiB3aHkgc29tZSBjb2RlIHRha2VzIDQgY3ljbGVzIGFuZCBvdGhlcgorYXBwYXJlbnRseSBlcXVpdmFsZW50IGNvZGUgdGFrZXMgNS4KKworCisKK09QVElNSVpBVElPTlMKKworVW5yb2xsZWQgbG9vcHMgYXJlIHVzZWQgdG8gcmVkdWNlIGxvb3Bpbmcgb3ZlcmhlYWQuICBUaGUgdW5yb2xsaW5nIGlzCitjb25maWd1cmFibGUgdXAgdG8gMzIgbGltYnMvbG9vcCBmb3IgbW9zdCByb3V0aW5lcyBhbmQgdXAgdG8gNjQgZm9yIHNvbWUuCitUaGUgSzcgaGFzIDY0ayBMMSBjb2RlIGNhY2hlIHNvIHF1aXRlIGJpZyB1bnJvbGxpbmcgaXMgYWxsb3dhYmxlLgorCitDb21wdXRlZCBqdW1wcyBpbnRvIHRoZSB1bnJvbGxpbmcgYXJlIHVzZWQgdG8gaGFuZGxlIHNpemVzIG5vdCBhIG11bHRpcGxlIG9mCit0aGUgdW5yb2xsaW5nLiAgQW4gYXR0cmFjdGl2ZSBmZWF0dXJlIG9mIHRoaXMgaXMgdGhhdCB0aW1lcyBpbmNyZWFzZQorc21vb3RobHkgd2l0aCBvcGVyYW5kIHNpemUsIGJ1dCBpdCBtYXkgYmUgdGhhdCBzb21lIHJvdXRpbmVzIHNob3VsZCBqdXN0CitoYXZlIHNpbXBsZSBsb29wcyB0byBmaW5pc2ggdXAsIGVzcGVjaWFsbHkgd2hlbiBQSUMgYWRkcyBiZXR3ZWVuIDIgYW5kIDE2CitjeWNsZXMgdG8gZ2V0ICVlaXAuCisKK1Bvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUgaXMgaW1wbGVtZW50ZWQgdXNpbmcgYSBjYWxsIHRvIGdldCAlZWlwIGZvciB0aGUKK2NvbXB1dGVkIGp1bXBzIGFuZCBhIHJldCBpcyBhbHdheXMgZG9uZSwgcmF0aGVyIHRoYW4gYW4gYWRkbCAkNCwlZXNwIG9yIGEKK3BvcGwsIHNvIHRoZSBDUFUgcmV0dXJuIGFkZHJlc3MgYnJhbmNoIHByZWRpY3Rpb24gc3RhY2sgc3RheXMgc3luY2hyb25pc2VkCit3aXRoIHRoZSBhY3R1YWwgc3RhY2sgaW4gbWVtb3J5LgorCitCcmFuY2ggcHJlZGljdGlvbiwgaW4gYWJzZW5jZSBvZiBhbnkgaGlzdG9yeSwgd2lsbCBndWVzcyBmb3J3YXJkIGp1bXBzIGFyZQorbm90IHRha2VuIGFuZCBiYWNrd2FyZCBqdW1wcyBhcmUgdGFrZW4uICBXaGVyZSBwb3NzaWJsZSBpdCdzIGFycmFuZ2VkIHRoYXQKK3RoZSBsZXNzIGxpa2VseSBvciBsZXNzIGltcG9ydGFudCBjYXNlIGlzIHVuZGVyIGEgdGFrZW4gZm9yd2FyZCBqdW1wLgorCisKKworQ09ESU5HCisKK0luc3RydWN0aW9ucyBpbiBnZW5lcmFsIGNvZGUgaGF2ZSBiZWVuIHNob3duIGdyb3VwZWQgaWYgdGhleSBjYW4gZXhlY3V0ZQordG9nZXRoZXIsIHdoaWNoIG1lYW5zIHVwIHRvIHRocmVlIGRpcmVjdC1wYXRoIGluc3RydWN0aW9ucyB3aGljaCBoYXZlIG5vCitzdWNjZXNzaXZlIGRlcGVuZGVuY2llcy4gIEs3IGFsd2F5cyBkZWNvZGVzIHRocmVlIGFuZCBoYXMgb3V0LW9mLW9yZGVyCitleGVjdXRpb24sIGJ1dCB0aGUgZ3JvdXBpbmdzIHNob3cgd2hhdCBzbG90cyBtaWdodCBiZSBhdmFpbGFibGUgYW5kIHdoYXQKK2RlcGVuZGVuY3kgY2hhaW5zIGV4aXN0LgorCitXaGVuIHRoZXJlJ3MgdmVjdG9yLXBhdGggaW5zdHJ1Y3Rpb25zIGFuIGVmZm9ydCBpcyBtYWRlIHRvIGdldCB0cmlwbGV0cyBvZgorZGlyZWN0LXBhdGggaW5zdHJ1Y3Rpb25zIGluIGJldHdlZW4gdGhlbSwgZXZlbiBpZiB0aGVyZSdzIGRlcGVuZGVuY2llcywKK3NpbmNlIHRoaXMgbWF4aW1pemVzIGRlY29kaW5nIHRocm91Z2hwdXQgYW5kIG1pZ2h0IHNhdmUgYSBjeWNsZSBvciB0d28gaWYKK2RlY29kaW5nIGlzIHRoZSBsaW1pdGluZyBmYWN0b3IuCisKKworCitJTlNUUlVDVElPTlMKKworYWRjbCAgICAgICBkaXJlY3QKK2RpdmwgICAgICAgMzkgY3ljbGVzIGJhY2stdG8tYmFjaworbG9kc2wsZXRjICB2ZWN0b3IKK2xvb3AgICAgICAgMSBjeWNsZSB2ZWN0b3IgKGRlY2wvam56IG9wZW5zIHVwIG9uZSBkZWNvZGUgc2xvdCkKK21vdmQgcmVnICAgdmVjdG9yCittb3ZkIG1lbSAgIGRpcmVjdAorbXVsbCAgICAgICBpc3N1ZSBldmVyeSAzIGN5Y2xlcywgbGF0ZW5jeSA0IGN5Y2xlcyBsb3cgd29yZCwgNiBjeWNsZXMgaGlnaCB3b3JkCitwb3BsCSAgIHZlY3RvciAodXNlIG1vdmwgZm9yIG1vcmUgdGhhbiBvbmUgcG9wKQorcHVzaGwJICAgZGlyZWN0LCB3aWxsIHBhaXIgd2l0aCBhIGxvYWQKK3NocmRsICVjbCAgdmVjdG9yLCAzIGN5Y2xlcywgc2VlbXMgdG8gYmUgMyBkZWNvZGUgdG9vCit4b3JsIHIsciAgIGZhbHNlIHJlYWQgZGVwZW5kZW5jeSByZWNvZ25pc2VkCisKKworCitSRUZFUkVOQ0VTCisKKyJBTUQgQXRobG9uIFByb2Nlc3NvciBYODYgQ29kZSBPcHRpbWl6YXRpb24gR3VpZGUiLCBBTUQgcHVibGljYXRpb24gbnVtYmVyCisyMjAwNywgcmV2aXNpb24gSywgRmVicnVhcnkgMjAwMi4gIEF2YWlsYWJsZSBvbi1saW5lLAorCitodHRwOi8vd3d3LmFtZC5jb20vdXMtZW4vYXNzZXRzL2NvbnRlbnRfdHlwZS93aGl0ZV9wYXBlcnNfYW5kX3RlY2hfZG9jcy8yMjAwNy5wZGYKKworIjNETm93IFRlY2hub2xvZ3kgTWFudWFsIiwgQU1EIHB1YmxpY2F0aW9uIG51bWJlciAyMTkyOEcvMC1NYXJjaCAyMDAwLgorVGhpcyBkZXNjcmliZXMgdGhlIGZlbW1zIGFuZCBwcmVmZXRjaCBpbnN0cnVjdGlvbnMuICBBdmFpbGFibGUgb24tbGluZSwKKworaHR0cDovL3d3dy5hbWQuY29tL3VzLWVuL2Fzc2V0cy9jb250ZW50X3R5cGUvd2hpdGVfcGFwZXJzX2FuZF90ZWNoX2RvY3MvMjE5MjgucGRmCisKKyJBTUQgRXh0ZW5zaW9ucyB0byB0aGUgM0ROb3cgYW5kIE1NWCBJbnN0cnVjdGlvbiBTZXRzIE1hbnVhbCIsIEFNRAorcHVibGljYXRpb24gbnVtYmVyIDIyNDY2LCByZXZpc2lvbiBELCBNYXJjaCAyMDAwLiAgVGhpcyBkZXNjcmliZXMKK2luc3RydWN0aW9ucyBhZGRlZCBpbiB0aGUgQXRobG9uIHByb2Nlc3Nvciwgc3VjaCBhcyBwc3dhcGQgYW5kIHRoZSBleHRyYQorcHJlZmV0Y2ggZm9ybXMuICBBdmFpbGFibGUgb24tbGluZSwKKworaHR0cDovL3d3dy5hbWQuY29tL3VzLWVuL2Fzc2V0cy9jb250ZW50X3R5cGUvd2hpdGVfcGFwZXJzX2FuZF90ZWNoX2RvY3MvMjI0NjYucGRmCisKKyIzRE5vdyBJbnN0cnVjdGlvbiBQb3J0aW5nIEd1aWRlIiwgQU1EIHB1YmxpY2F0aW9uIG51bWJlciAyMjYyMSwgcmV2aXNpb24gQiwKK0F1Z3VzdCAxOTk5LiAgVGhpcyBoYXMgc29tZSBub3RlcyBvbiBnZW5lcmFsIEF0aGxvbiBvcHRpbWl6YXRpb25zIGFzIHdlbGwgYXMKKzNETm93LiAgQXZhaWxhYmxlIG9uLWxpbmUsCisKK2h0dHA6Ly93d3cuYW1kLmNvbS91cy1lbi9hc3NldHMvY29udGVudF90eXBlL3doaXRlX3BhcGVyc19hbmRfdGVjaF9kb2NzLzIyNjIxLnBkZgorCisKKworCistLS0tLS0tLS0tLS0tLS0tCitMb2NhbCB2YXJpYWJsZXM6Cittb2RlOiB0ZXh0CitmaWxsLWNvbHVtbjogNzYKK0VuZDoKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s3L2FkZGxzaDFfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNy9hZGRsc2gxX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjYmExZWIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNy9hZGRsc2gxX24uYXNtCkBAIC0wLDAgKzEsMTk2IEBACitkbmwgIEFNRCBLNyBtcG5fYWRkbHNoMV9uIC0tIHJwW10gPSB1cFtdICsgKHZwW10gPDwgMSkKKworZG5sICBDb3B5cmlnaHQgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQgYW5kIE1hcmNvIEJvZHJhdG8uCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBUaGlzIGlzIGFuIGF0dGVtcHQgYXQgYW4gYWRkbHNoMV9uIGZvciB4ODYtMzIsIG5vdCByZWx5aW5nIG9uIHNzZTIgaW5zbnMuCitDIFRoZSBpbm5lcmxvb3AgaXMgMiozLXdheSB1bnJvbGxlZCwgd2hpY2ggaXMgYmVzdCB3ZSBjYW4gZG8gd2l0aCB0aGUgYXZhaWxhYmxlCitDIHJlZ2lzdGVycy4gIEl0IHNlZW1zIHRyaWNreSB0byB1c2UgdGhlIHNhbWUgc3RydWN0dXJlIGZvciByc2Jsc2gxX24sIHNpbmNlIHdlCitDIGNhbm5vdCBmZWVkIGNhcnJ5IGJldHdlZW4gb3BlcmF0aW9ucyB0aGVyZS4KKworQwkJCSAgICBjeWNsZXMvbGltYgorQyBQNQorQyBQNiBtb2RlbCAwLTgsMTAtMTIKK0MgUDYgbW9kZWwgOSAgKEJhbmlhcykKK0MgUDYgbW9kZWwgMTMgKERvdGhhbikJCSA1LjQJKHdvcnNlIHRoYW4gYWRkX24gKyBsc2hpZnQpCitDIFA0IG1vZGVsIDAgIChXaWxsYW1ldHRlKQorQyBQNCBtb2RlbCAxICAoPykKK0MgUDQgbW9kZWwgMiAgKE5vcnRod29vZCkKK0MgUDQgbW9kZWwgMyAgKFByZXNjb3R0KQorQyBQNCBtb2RlbCA0ICAoTm9jb25hKQorQyBJbnRlbCBBdG9tCQkJIDYKK0MgQU1EIEs2CQkJID8KK0MgQU1EIEs3CQkJIDIuNQorQyBBTUQgSzgKKworQyBUaGlzIGlzIGEgYmFzaWMgYWRkbHNoMV9uIGZvciBrNywgYXRvbSwgYW5kIHBlcmhhcHMgc29tZSBvdGhlciB4ODYtMzIKK0MgcHJvY2Vzc29ycy4gIEl0IHVzZXMgMiozLXdheSB1bnJvbGxpbmcsIGZvciBnb29kIHJlYXNvbnMuICBVbmZvcnR1bmF0ZWx5LAorQyB0aGF0IG1lYW5zIHdlIG5lZWQgYW4gaW5pdGlhbCBtYWdpYyBtdWx0aXBseS4KK0MKK0MgSXQgaXMgbm90IGNsZWFyIGhvdyB0byBkbyBzdWJsc2gxX24gb3IgcnNibHNoMV9uIHVzaW5nIHRoZSBzYW1lIHBhdHRlcm4uICBXZQorQyBjYW5ub3QgZG8gcnNibHNoMV9uIHNpbmNlIHdlIGZlZWQgY2FycnkgZnJvbSB0aGUgc2hpZnQgYmxvY2tzIHRvIHRoZQorQyBhZGQvc3VidHJhY3QgYmxvY2tzLCB3aGljaCBpcyByaWdodCBmb3IgYWRkaXRpb24gYnV0IHJldmVyc2VkIGZvcgorQyBzdWJ0cmFjdGlvbi4gIFdlIGNvdWxkIHBlcmhhcHMgZG8gc3VibHNoMV9uLCB3aXRoIHNvbWUgZXh0cmEgbW92ZSBpbnNucywKK0Mgd2l0aG91dCBsb3NpbmcgYW55IHRpbWUsIHNpbmNlIHdlJ3JlIG5vdCBpc3N1ZSBsaW1pdGVkIGJ1dCBjYXJyeSByZWN1cnJlbmN5CitDIGxhdGVuY3kuCitDCitDIEJyZWFraW5nIGNhcnJ5IHJlY3VycmVuY3kgbWlnaHQgYmUgYSBnb29kIGlkZWEuICBXZSB3b3VsZCB0aGVuIG5lZWQgc2VwYXJhdGUKK0MgcmVnaXN0ZXJzIGZvciB0aGUgc2hpZnQgY2FycnkgYW5kIGFkZC9zdWJ0cmFjdCBjYXJyeSwgd2hpY2ggaW4gdHVybiB3b3VsZAorQyBmb3JjZSB1cyB0byAyKjItd2F5IHVucm9sbGluZy4KKworZGVmZnJhbWUoUEFSQU1fU0laRSwJMTYpCitkZWZmcmFtZShQQVJBTV9EQkxELAkxMikKK2RlZmZyYW1lKFBBUkFNX1NSQywJIDgpCitkZWZmcmFtZShQQVJBTV9EU1QsCSA0KQorCitkbmwgIHJlLXVzZSBwYXJhbWV0ZXIgc3BhY2UKK2RlZmluZShWQVJfQ09VTlQsYFBBUkFNX0RTVCcpCitkZWZpbmUoVkFSX1RNUCxgUEFSQU1fREJMRCcpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDgpCitQUk9MT0dVRShtcG5fYWRkbHNoMV9uKQorZGVmbGl0KGBGUkFNRScsMCkKKworZGVmaW5lKGBycCcsICBgJWVkaScpCitkZWZpbmUoYHVwJywgIGAlZXNpJykKK2RlZmluZShgdnAnLCAgYCVlYnAnKQorCisJbW92CSQweDJhYWFhYWFiLCAlZWF4CisKKwlwdXNoCSVlYngJCQlGUkFNRV9wdXNobCgpCisJbW92CVBBUkFNX1NJWkUsICVlYngJQyBzaXplCisKKwlwdXNoCXJwCQkJRlJBTUVfcHVzaGwoKQorCW1vdglQQVJBTV9EU1QsIHJwCisKKwltdWwJJWVieAorCisJcHVzaAl1cAkJCUZSQU1FX3B1c2hsKCkKKwltb3YJUEFSQU1fU1JDLCB1cAorCisJbm90CSVlZHgJCQlDIGNvdW50ID0gLShzaXplXDgpLTEKKwltb3YJJWVkeCwgVkFSX0NPVU5UCisKKwlwdXNoCXZwCQkJRlJBTUVfcHVzaGwoKQorCW1vdglQQVJBTV9EQkxELCB2cAorCisJbGVhCTMoJWVkeCwlZWR4LDIpLCAlZWN4CUMgY291bnQqMyszID0gLShzaXplXDYpKjMKKwl4b3IJJWVkeCwgJWVkeAorCWxlYQkoJWVieCwlZWN4LDIpLCAlZWJ4CUMgc2l6ZSArIChjb3VudCozKzMpKjIgPSBzaXplICUgNgorCW9yCSVlYngsICVlYngKKwlqeglMKGV4YWN0KQorCitMKG9vcCk6CitpZmRlZihgQ1BVX1A2JyxgCisJc2hyCSVlZHggJykJCQlDIHJlc3RvcmUgMm5kIHNhdmVkIGNhcnJ5IGJpdAorCW1vdgkodnApLCAlZWF4CisJYWRjCSVlYXgsICVlYXgKKwlyY3IJJWVkeAkJCUMgcmVzdG9yZSAxc3Qgc2F2ZWQgY2FycnkgYml0CisJbGVhCTQodnApLCB2cAorCWFkYwkodXApLCAlZWF4CisJbGVhCTQodXApLCB1cAorCWFkYwklZWR4LCAlZWR4CQlDIHNhdmUgYSBjYXJyeSBiaXQgaW4gZWR4CitpZmRlZihgQ1BVX1A2JyxgCisJYWRjCSVlZHgsICVlZHggJykJCUMgc2F2ZSBhbm90aGVyIGNhcnJ5IGJpdCBpbiBlZHgKKwlkZWMJJWVieAorCW1vdgklZWF4LCAocnApCisJbGVhCTQocnApLCBycAorCWpueglMKG9vcCkKKwltb3YJdnAsIFZBUl9UTVAKK0woZXhhY3QpOgorCWluY2wJVkFSX0NPVU5UCisJanoJTChlbmQpCisKKwlBTElHTigxNikKK0wodG9wKToKK2lmZGVmKGBDUFVfUDYnLGAKKwlzaHIJJWVkeCAnKQkJCUMgcmVzdG9yZSAybmQgc2F2ZWQgY2FycnkgYml0CisJbW92CSh2cCksICVlYXgKKwlhZGMJJWVheCwgJWVheAorCW1vdgk0KHZwKSwgJWVieAorCWFkYwklZWJ4LCAlZWJ4CisJbW92CTgodnApLCAlZWN4CisJYWRjCSVlY3gsICVlY3gKKworCXJjcgklZWR4CQkJQyByZXN0b3JlIDFzdCBzYXZlZCBjYXJyeSBiaXQKKworCWFkYwkodXApLCAlZWF4CisJbW92CSVlYXgsIChycCkKKwlhZGMJNCh1cCksICVlYngKKwltb3YJJWVieCwgNChycCkKKwlhZGMJOCh1cCksICVlY3gKKwltb3YJJWVjeCwgOChycCkKKworCW1vdgkxMih2cCksICVlYXgKKwlhZGMJJWVheCwgJWVheAorCW1vdgkxNih2cCksICVlYngKKwlhZGMJJWVieCwgJWVieAorCW1vdgkyMCh2cCksICVlY3gKKwlhZGMJJWVjeCwgJWVjeAorCisJbGVhCTI0KHZwKSwgdnAKKwlhZGMJJWVkeCwgJWVkeAkJQyBzYXZlIGEgY2FycnkgYml0IGluIGVkeAorCisJYWRjCTEyKHVwKSwgJWVheAorCW1vdgklZWF4LCAxMihycCkKKwlhZGMJMTYodXApLCAlZWJ4CisJbW92CSVlYngsIDE2KHJwKQorCWFkYwkyMCh1cCksICVlY3gKKworCWxlYQkyNCh1cCksIHVwCisKK2lmZGVmKGBDUFVfUDYnLGAKKwlhZGMJJWVkeCwgJWVkeCAnKQkJQyBzYXZlIGFub3RoZXIgY2FycnkgYml0IGluIGVkeAorCW1vdgklZWN4LCAyMChycCkKKwlpbmNsCVZBUl9DT1VOVAorCWxlYQkyNChycCksIHJwCisJam5lCUwodG9wKQorCitMKGVuZCk6CisJcG9wCXZwCQkJRlJBTUVfcG9wbCgpCisJcG9wCXVwCQkJRlJBTUVfcG9wbCgpCisKK2lmZGVmKGBDUFVfUDYnLGAKKwl4b3IJJWVheCwgJWVheAorCXNocgkkMSwgJWVkeAorCWFkYwklZWR4LCAlZWF4CisnLGAKKwlhZGMJJDAsICVlZHgKKwltb3YJJWVkeCwgJWVheAorJykKKwlwb3AJcnAJCQlGUkFNRV9wb3BsKCkKKwlwb3AJJWVieAkJCUZSQU1FX3BvcGwoKQorCXJldAorRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNy9hb3JzX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazcvYW9yc19uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTA4MDcyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazcvYW9yc19uLmFzbQpAQCAtMCwwICsxLDI1OCBAQAorZG5sICBBTUQgSzcgbXBuX2FkZF9uL21wbl9zdWJfbiAtLSBtcG4gYWRkIG9yIHN1YnRyYWN0LgorCitkbmwgIENvcHlyaWdodCAxOTk5LTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDIEs3OiAxLjY0IGN5Y2xlcy9saW1iIChhdCAxNiBsaW1icy9sb29wKS4KKworCisKK2RubCAgSzc6IFVOUk9MTF9DT1VOVCBjeWNsZXMvbGltYgorZG5sICAgICAgICAgICA4ICAgICAgICAgICAxLjkKK2RubCAgICAgICAgICAxNiAgICAgICAgICAgMS42NAorZG5sICAgICAgICAgIDMyICAgICAgICAgICAxLjcKK2RubCAgICAgICAgICA2NCAgICAgICAgICAgMi4wCitkbmwgIE1heGltdW0gcG9zc2libGUgd2l0aCB0aGUgY3VycmVudCBjb2RlIGlzIDY0LgorCitkZWZsaXQoVU5ST0xMX0NPVU5ULCAxNikKKworCitpZmRlZihgT1BFUkFUSU9OX2FkZF9uJywgYAorCWRlZmluZShNNF9pbnN0LCAgICAgICAgYWRjbCkKKwlkZWZpbmUoTTRfZnVuY3Rpb25fbiwgIG1wbl9hZGRfbikKKwlkZWZpbmUoTTRfZnVuY3Rpb25fbmMsIG1wbl9hZGRfbmMpCisJZGVmaW5lKE00X2Rlc2NyaXB0aW9uLCBhZGQpCisnLGBpZmRlZihgT1BFUkFUSU9OX3N1Yl9uJywgYAorCWRlZmluZShNNF9pbnN0LCAgICAgICAgc2JibCkKKwlkZWZpbmUoTTRfZnVuY3Rpb25fbiwgIG1wbl9zdWJfbikKKwlkZWZpbmUoTTRfZnVuY3Rpb25fbmMsIG1wbl9zdWJfbmMpCisJZGVmaW5lKE00X2Rlc2NyaXB0aW9uLCBzdWJ0cmFjdCkKKycsYG00X2Vycm9yKGBOZWVkIE9QRVJBVElPTl9hZGRfbiBvciBPUEVSQVRJT05fc3ViX24KKycpJyknKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRfbiBtcG5fYWRkX25jIG1wbl9zdWJfbiBtcG5fc3ViX25jKQorCisKK0MgbXBfbGltYl90IE00X2Z1bmN0aW9uX24gKG1wX3B0ciBkc3QsIG1wX3NyY3B0ciBzcmMxLCBtcF9zcmNwdHIgc3JjMiwKK0MgICAgICAgICAgICAgICAgICAgICAgICAgbXBfc2l6ZV90IHNpemUpOworQyBtcF9saW1iX3QgTTRfZnVuY3Rpb25fbmMgKG1wX3B0ciBkc3QsIG1wX3NyY3B0ciBzcmMxLCBtcF9zcmNwdHIgc3JjMiwKK0MJICAgICAgICAgICAgICAgICAgIG1wX3NpemVfdCBzaXplLCBtcF9saW1iX3QgY2FycnkpOworQworQyBDYWxjdWxhdGUgc3JjMSxzaXplIE00X2Rlc2NyaXB0aW9uIHNyYzIsc2l6ZSwgYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4KK0MgZHN0LHNpemUuICBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBjYXJyeSBiaXQgZnJvbSB0aGUgdG9wIG9mIHRoZSByZXN1bHQgKDEKK0Mgb3IgMCkuCitDCitDIFRoZSBfbmMgdmVyc2lvbiBhY2NlcHRzIDEgb3IgMCBmb3IgYW4gaW5pdGlhbCBjYXJyeSBpbnRvIHRoZSBsb3cgbGltYiBvZgorQyB0aGUgY2FsY3VsYXRpb24uICBOb3RlIHZhbHVlcyBvdGhlciB0aGFuIDEgb3IgMCBoZXJlIHdpbGwgbGVhZCB0byBnYXJiYWdlCitDIHJlc3VsdHMuCitDCitDIFRoaXMgY29kZSBydW5zIGF0IDEuNjQgY3ljbGVzL2xpbWIsIHdoaWNoIG1pZ2h0IGJlIHRoZSBiZXN0IHBvc3NpYmxlIHdpdGgKK0MgcGxhaW4gaW50ZWdlciBvcGVyYXRpb25zLiAgRWFjaCBsaW1iIGlzIDIgbG9hZHMgYW5kIDEgc3RvcmUsIGFueSAyIG9mCitDIHdoaWNoIGNhbiBiZSBkb25lIGVhY2ggY3ljbGUsIGxlYWRpbmcgdG8gMS41IGMvbC4KKworZG5sICBNdXN0IGhhdmUgVU5ST0xMX1RIUkVTSE9MRCA+PSAyLCBzaW5jZSB0aGUgdW5yb2xsZWQgbG9vcCBjYW4ndCBoYW5kbGUgMS4KK2lmZGVmKGBQSUMnLGAKK2RlZmxpdChVTlJPTExfVEhSRVNIT0xELCA4KQorJyxgCitkZWZsaXQoVU5ST0xMX1RIUkVTSE9MRCwgOCkKKycpCisKK2RlZmZyYW1lKFBBUkFNX0NBUlJZLDIwKQorZGVmZnJhbWUoUEFSQU1fU0laRSwgMTYpCitkZWZmcmFtZShQQVJBTV9TUkMyLCAxMikKK2RlZmZyYW1lKFBBUkFNX1NSQzEsIDgpCitkZWZmcmFtZShQQVJBTV9EU1QsICA0KQorCitkZWZmcmFtZShTQVZFX0VCUCwgLTQpCitkZWZmcmFtZShTQVZFX0VTSSwgLTgpCitkZWZmcmFtZShTQVZFX0VCWCwgLTEyKQorZGVmZnJhbWUoU0FWRV9FREksIC0xNikKK2RlZmxpdChTVEFDS19TUEFDRSwgMTYpCisKKwlURVhUCisJQUxJR04oMzIpCitkZWZsaXQoYEZSQU1FJywwKQorCitQUk9MT0dVRShNNF9mdW5jdGlvbl9uYykKKwltb3ZsCVBBUkFNX0NBUlJZLCAlZWF4CisJam1wCUwoc3RhcnQpCitFUElMT0dVRSgpCisKK1BST0xPR1VFKE00X2Z1bmN0aW9uX24pCisKKwl4b3JsCSVlYXgsICVlYXgJQyBjYXJyeQorTChzdGFydCk6CisJbW92bAlQQVJBTV9TSVpFLCAlZWN4CisJc3VibAkkU1RBQ0tfU1BBQ0UsICVlc3AKK2RlZmxpdChgRlJBTUUnLFNUQUNLX1NQQUNFKQorCisJbW92bAklZWRpLCBTQVZFX0VESQorCW1vdmwJJWVieCwgU0FWRV9FQlgKKwljbXBsCSRVTlJPTExfVEhSRVNIT0xELCAlZWN4CisKKwltb3ZsCVBBUkFNX1NSQzIsICVlZHgKKwltb3ZsCVBBUkFNX1NSQzEsICVlYngKKwlqYWUJTCh1bnJvbGwpCisKKwltb3ZsCVBBUkFNX0RTVCwgJWVkaQorCWxlYWwJKCVlYngsJWVjeCw0KSwgJWVieAorCWxlYWwJKCVlZHgsJWVjeCw0KSwgJWVkeAorCisJbGVhbAkoJWVkaSwlZWN4LDQpLCAlZWRpCisJbmVnbAklZWN4CisJc2hybAklZWF4CisKKwlDIFRoaXMgbG9vcCBpbiBpbiBhIHNpbmdsZSAxNiBieXRlIGNvZGUgYmxvY2sgYWxyZWFkeSwgc28gbm8KKwlDIGFsaWdubWVudCBuZWNlc3NhcnkuCitMKHNpbXBsZSk6CisJQyBlYXgJc2NyYXRjaAorCUMgZWJ4CXNyYzEKKwlDIGVjeAljb3VudGVyCisJQyBlZHgJc3JjMgorCUMgZXNpCisJQyBlZGkJZHN0CisJQyBlYnAKKworCW1vdmwJKCVlYngsJWVjeCw0KSwgJWVheAorCU00X2luc3QJKCVlZHgsJWVjeCw0KSwgJWVheAorCW1vdmwJJWVheCwgKCVlZGksJWVjeCw0KQorCWluY2wJJWVjeAorCWpueglMKHNpbXBsZSkKKworCW1vdmwJJDAsICVlYXgKKwltb3ZsCVNBVkVfRURJLCAlZWRpCisKKwltb3ZsCVNBVkVfRUJYLCAlZWJ4CisJc2V0YwklYWwKKwlhZGRsCSRTVEFDS19TUEFDRSwgJWVzcAorCisJcmV0CisKKworQyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUMgVGhpcyBpcyBhdCAweDU1LCBjbG9zZSBlbm91Z2ggdG8gYWxpZ25lZC4KK0wodW5yb2xsKToKK2RlZmxpdChgRlJBTUUnLFNUQUNLX1NQQUNFKQorCW1vdmwJJWVicCwgU0FWRV9FQlAKKwlhbmRsCSQtMiwgJWVjeAkJQyBzaXplIGxvdyBiaXQgbWFza2VkIG91dAorCWFuZGwJJDEsIFBBUkFNX1NJWkUJCUMgc2l6ZSBsb3cgYml0IGtlcHQKKworCW1vdmwJJWVjeCwgJWVkaQorCWRlY2wJJWVjeAorCW1vdmwJUEFSQU1fRFNULCAlZWJwCisKKwlzaHJsCSRVTlJPTExfTE9HMiwgJWVjeAorCW5lZ2wJJWVkaQorCW1vdmwJJWVzaSwgU0FWRV9FU0kKKworCWFuZGwJJFVOUk9MTF9NQVNLLCAlZWRpCisKK2lmZGVmKGBQSUMnLGAKKwljYWxsCUwocGljX2NhbGMpCitMKGhlcmUpOgorJyxgCisJbGVhbAlMKGVudHJ5KSAoJWVkaSwlZWRpLDgpLCAlZXNpCUMgOSBieXRlcyBwZXIKKycpCisJbmVnbAklZWRpCisJc2hybAklZWF4CisKKwlsZWFsCWlmZWxzZShVTlJPTExfQllURVMsMjU2LDEyOCkgKCVlYngsJWVkaSw0KSwgJWVieAorCWxlYWwJaWZlbHNlKFVOUk9MTF9CWVRFUywyNTYsMTI4KSAoJWVkeCwlZWRpLDQpLCAlZWR4CisJbGVhbAlpZmVsc2UoVU5ST0xMX0JZVEVTLDI1NiwxMjgpICglZWJwLCVlZGksNCksICVlZGkKKworCWptcAkqJWVzaQorCisKK2lmZGVmKGBQSUMnLGAKK0wocGljX2NhbGMpOgorCUMgU2VlIG1wbi94ODYvUkVBRE1FIGFib3V0IG9sZCBnYXMgYnVncworCWxlYWwJKCVlZGksJWVkaSw4KSwgJWVzaQorCWFkZGwJJEwoZW50cnkpLUwoaGVyZSksICVlc2kKKwlhZGRsCSglZXNwKSwgJWVzaQorCXJldF9pbnRlcm5hbAorJykKKworCitDIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJQUxJR04oMzIpCitMKHRvcCk6CisJQyBlYXgJemVybworCUMgZWJ4CXNyYzEKKwlDIGVjeAljb3VudGVyCisJQyBlZHgJc3JjMgorCUMgZXNpCXNjcmF0Y2ggKHdhcyBjb21wdXRlZCBqdW1wKQorCUMgZWRpCWRzdAorCUMgZWJwCXNjcmF0Y2gKKworCWxlYWwJVU5ST0xMX0JZVEVTKCVlZHgpLCAlZWR4CisKK0woZW50cnkpOgorZGVmbGl0KENIVU5LX0NPVU5ULCAyKQorZm9ybG9vcChpLCAwLCBVTlJPTExfQ09VTlQvQ0hVTktfQ09VTlQtMSwgYAorCWRlZmxpdChgZGlzcDAnLCBldmFsKGkqQ0hVTktfQ09VTlQqNCBpZmVsc2UoVU5ST0xMX0JZVEVTLDI1NiwtMTI4KSkpCisJZGVmbGl0KGBkaXNwMScsIGV2YWwoZGlzcDAgKyA0KSkKKworWmRpc3AoCW1vdmwsCWRpc3AwLCglZWJ4KSwgJWVzaSkKKwltb3ZsCWRpc3AxKCVlYngpLCAlZWJwCitaZGlzcCgJTTRfaW5zdCxkaXNwMCwoJWVkeCksICVlc2kpCitaZGlzcCgJbW92bCwJJWVzaSwgZGlzcDAsKCVlZGkpKQorCU00X2luc3QJZGlzcDEoJWVkeCksICVlYnAKKwltb3ZsCSVlYnAsIGRpc3AxKCVlZGkpCisnKQorCisJZGVjbAklZWN4CisJbGVhbAlVTlJPTExfQllURVMoJWVieCksICVlYngKKwlsZWFsCVVOUk9MTF9CWVRFUyglZWRpKSwgJWVkaQorCWpucwlMKHRvcCkKKworCisJbW92CVBBUkFNX1NJWkUsICVlc2kKKwltb3ZsCVNBVkVfRUJQLCAlZWJwCisJbW92bAkkMCwgJWVheAorCisJZGVjbAklZXNpCisJanMJTChldmVuKQorCisJbW92bAkoJWVieCksICVlY3gKKwlNNF9pbnN0CVVOUk9MTF9CWVRFUyglZWR4KSwgJWVjeAorCW1vdmwJJWVjeCwgKCVlZGkpCitMKGV2ZW4pOgorCisJbW92bAlTQVZFX0VESSwgJWVkaQorCW1vdmwJU0FWRV9FQlgsICVlYngKKwlzZXRjCSVhbAorCisJbW92bAlTQVZFX0VTSSwgJWVzaQorCWFkZGwJJFNUQUNLX1NQQUNFLCAlZXNwCisKKwlyZXQKKworRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazcvYW9yc211bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s3L2FvcnNtdWxfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVjOGRmNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s3L2FvcnNtdWxfMS5hc20KQEAgLTAsMCArMSwxNjcgQEAKK2RubCAgQU1EIEs3IG1wbl9hZGRtdWxfMS9tcG5fc3VibXVsXzEgLS0gYWRkIG9yIHN1YnRyYWN0IG1wbiBtdWx0aXBsZS4KKworZG5sICBDb3B5cmlnaHQgMTk5OS0yMDAyLCAyMDA1LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQwkJCSAgICBjeWNsZXMvbGltYgorQyBQNQorQyBQNiBtb2RlbCAwLTgsMTAtMTIKK0MgUDYgbW9kZWwgOSAgKEJhbmlhcykJCSA2LjUKK0MgUDYgbW9kZWwgMTMgKERvdGhhbikKK0MgUDQgbW9kZWwgMCAgKFdpbGxhbWV0dGUpCitDIFA0IG1vZGVsIDEgICg/KQorQyBQNCBtb2RlbCAyICAoTm9ydGh3b29kKQorQyBQNCBtb2RlbCAzICAoUHJlc2NvdHQpCitDIFA0IG1vZGVsIDQgIChOb2NvbmEpCitDIEFNRCBLNgorQyBBTUQgSzcJCQkgMy43NQorQyBBTUQgSzgKKworQyBUT0RPCitDICAqIEltcHJvdmUgZmVlZC1pbiBhbmQgd2luZC1kb3duIGNvZGUuICBXZSBiZWF0IHRoZSBvbGQgY29kZSBmb3IgYWxsIG4gIT0gMSwKK0MgICAgYnV0IGxvc2UgYnkgMnggZm9yIG4gPT0gMS4KKworaWZkZWYoYE9QRVJBVElPTl9hZGRtdWxfMScsYAorICAgICAgZGVmaW5lKGBBRERTVUInLCAgICAgICAgYGFkZCcpCisgICAgICBkZWZpbmUoYGZ1bmMnLCAgYG1wbl9hZGRtdWxfMScpCisnKQoraWZkZWYoYE9QRVJBVElPTl9zdWJtdWxfMScsYAorICAgICAgZGVmaW5lKGBBRERTVUInLCAgICAgICAgYHN1YicpCisgICAgICBkZWZpbmUoYGZ1bmMnLCAgYG1wbl9zdWJtdWxfMScpCisnKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRtdWxfMSBtcG5fc3VibXVsXzEpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUoZnVuYykKKwlhZGQJJC0xNiwgJWVzcAorCW1vdgklZWJwLCAoJWVzcCkKKwltb3YJJWVieCwgNCglZXNwKQorCW1vdgklZXNpLCA4KCVlc3ApCisJbW92CSVlZGksIDEyKCVlc3ApCisKKwltb3YJMjAoJWVzcCksICVlZGkKKwltb3YJMjQoJWVzcCksICVlc2kKKwltb3YJMjgoJWVzcCksICVlYXgKKwltb3YJMzIoJWVzcCksICVlY3gKKwltb3YJJWVheCwgJWVieAorCXNocgkkMiwgJWVheAorCW1vdgklZWF4LCAyOCglZXNwKQorCW1vdgkoJWVzaSksICVlYXgKKwlhbmQJJDMsICVlYngKKwlqeglMKGIwKQorCWNtcAkkMiwgJWVieAorCWp6CUwoYjIpCisJamcJTChiMykKKworTChiMSk6CWxlYQktNCglZXNpKSwgJWVzaQorCWxlYQktNCglZWRpKSwgJWVkaQorCW11bAklZWN4CisJbW92CSVlYXgsICVlYngKKwltb3YJJWVkeCwgJWVicAorCWNtcGwJJDAsIDI4KCVlc3ApCisJanoJTChjajEpCisJbW92CTgoJWVzaSksICVlYXgKKwlqbXAJTCgxKQorCitMKGIyKToJbXVsCSVlY3gKKwltb3YJJWVheCwgJWVicAorCW1vdgk0KCVlc2kpLCAlZWF4CisJbW92CSVlZHgsICVlYngKKwljbXBsCSQwLCAyOCglZXNwKQorCWpuZQlMKDIpCisJam1wCUwoY2oyKQorCitMKGIzKToJbGVhCS0xMiglZXNpKSwgJWVzaQorCWxlYQktMTIoJWVkaSksICVlZGkKKwltdWwJJWVjeAorCW1vdgklZWF4LCAlZWJ4CisJbW92CSVlZHgsICVlYnAKKwltb3YJMTYoJWVzaSksICVlYXgKKwlpbmNsCTI4KCVlc3ApCisJam1wCUwoMykKKworTChiMCk6CWxlYQktOCglZXNpKSwgJWVzaQorCWxlYQktOCglZWRpKSwgJWVkaQorCW11bAklZWN4CisJbW92CSVlYXgsICVlYnAKKwltb3YJMTIoJWVzaSksICVlYXgKKwltb3YJJWVkeCwgJWVieAorCWptcAlMKDApCisKKwlBTElHTigxNikKK0wodG9wKToJbGVhCTE2KCVlZGkpLCAlZWRpCitMKDIpOgltdWwJJWVjeAorCUFERFNVQgklZWJwLCAwKCVlZGkpCisJbW92CSQwLCAlZWJwCisJYWRjCSVlYXgsICVlYngKKwltb3YJOCglZXNpKSwgJWVheAorCWFkYwklZWR4LCAlZWJwCitMKDEpOgltdWwJJWVjeAorCUFERFNVQgklZWJ4LCA0KCVlZGkpCisJbW92CSQwLCAlZWJ4CisJYWRjCSVlYXgsICVlYnAKKwltb3YJMTIoJWVzaSksICVlYXgKKwlhZGMJJWVkeCwgJWVieAorTCgwKToJbXVsCSVlY3gKKwlBRERTVUIJJWVicCwgOCglZWRpKQorCW1vdgkkMCwgJWVicAorCWFkYwklZWF4LCAlZWJ4CisJYWRjCSVlZHgsICVlYnAKKwltb3YJMTYoJWVzaSksICVlYXgKK0woMyk6CW11bAklZWN4CisJQUREU1VCCSVlYngsIDEyKCVlZGkpCisJYWRjCSVlYXgsICVlYnAKKwltb3YJMjAoJWVzaSksICVlYXgKKwlsZWEJMTYoJWVzaSksICVlc2kKKwltb3YJJDAsICVlYngKKwlhZGMJJWVkeCwgJWVieAorCWRlY2wJMjgoJWVzcCkKKwlqbnoJTCh0b3ApCisKK0woZW5kKToJbGVhCTE2KCVlZGkpLCAlZWRpCitMKGNqMik6CW11bAklZWN4CisJQUREU1VCCSVlYnAsICglZWRpKQorCWFkYwklZWF4LCAlZWJ4CisJYWRjCSQwLCAlZWR4CitMKGNqMSk6CUFERFNVQgklZWJ4LCA0KCVlZGkpCisJYWRjCSQwLCAlZWR4CisJbW92CSVlZHgsICVlYXgKKwltb3YJKCVlc3ApLCAlZWJwCisJbW92CTQoJWVzcCksICVlYngKKwltb3YJOCglZXNwKSwgJWVzaQorCW1vdgkxMiglZXNwKSwgJWVkaQorCWFkZAkkMTYsICVlc3AKKwlyZXQKK0VQSUxPR1VFKCkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazcvYmRpdl9xXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazcvYmRpdl9xXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhZjdiYjkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNy9iZGl2X3FfMS5hc20KQEAgLTAsMCArMSwyNDUgQEAKK2RubCAgQU1EIEs3IG1wbl9iZGl2X3FfMSAtLSBtcG4gYnkgbGltYiBleGFjdCBkaXZpc2lvbi4KKworZG5sICBSZWFycmFuZ2VkIGZyb20gbXBuL3g4Ni9rNy9kaXZlXzEuYXNtIGJ5IE1hcmNvIEJvZHJhdG8uCisKK2RubCAgQ29weXJpZ2h0IDIwMDEsIDIwMDIsIDIwMDQsIDIwMDcsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDICAgICAgICAgIGN5Y2xlcy9saW1iCitDIEF0aGxvbjogICAgIDExLjAKK0MgSGFtbWVyOiAgICAgIDkuMAorCisKK0Mgdm9pZCBtcG5fZGl2ZXhhY3RfMSAobXBfcHRyIGRzdCwgbXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUsCitDICAgICAgICAgICAgICAgICAgICAgIG1wX2xpbWJfdCBkaXZpc29yKTsKK0MKK0MgVGhlIGRlcGVuZGVudCBjaGFpbiBpcyBtdWwraW11bCtzdWIgZm9yIDExIGN5Y2xlcyBhbmQgdGhhdCBzcGVlZCBpcworQyBhY2hpZXZlZCB3aXRoIG5vIHNwZWNpYWwgZWZmb3J0LiAgVGhlIGxvYWQgYW5kIHNocmxkIGxhdGVuY2llcyBhcmUgaGlkZGVuCitDIGJ5IG91dCBvZiBvcmRlciBleGVjdXRpb24uCitDCitDIEl0J3MgYSB0b3VjaCBmYXN0ZXIgb24gc2l6ZT09MSB0byB1c2UgdGhlIG11bC1ieS1pbnZlcnNlIHRoYW4gZGl2bC4KKworZGVmZnJhbWUoUEFSQU1fU0hJRlQsICAyNCkKK2RlZmZyYW1lKFBBUkFNX0lOVkVSU0UsMjApCitkZWZmcmFtZShQQVJBTV9ESVZJU09SLDE2KQorZGVmZnJhbWUoUEFSQU1fU0laRSwgICAxMikKK2RlZmZyYW1lKFBBUkFNX1NSQywgICAgOCkKK2RlZmZyYW1lKFBBUkFNX0RTVCwgICAgNCkKKworZGVmZnJhbWUoU0FWRV9FQlgsICAgICAtNCkKK2RlZmZyYW1lKFNBVkVfRVNJLCAgICAgLTgpCitkZWZmcmFtZShTQVZFX0VESSwgICAgLTEyKQorZGVmZnJhbWUoU0FWRV9FQlAsICAgIC0xNikKK2RlZmZyYW1lKFZBUl9JTlZFUlNFLCAtMjApCitkZWZmcmFtZShWQVJfRFNUX0VORCwgLTI0KQorCitkZWZsaXQoU1RBQ0tfU1BBQ0UsIDI0KQorCisJVEVYVAorCitDIG1wX2xpbWJfdAorQyBtcG5fcGkxX2JkaXZfcV8xIChtcF9wdHIgZHN0LCBtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSwgbXBfbGltYl90IGRpdmlzb3IsCitDCQkgICAgbXBfbGltYl90IGludmVyc2UsIGludCBzaGlmdCkKKwlBTElHTigxNikKK1BST0xPR1VFKG1wbl9waTFfYmRpdl9xXzEpCitkZWZsaXQoYEZSQU1FJywwKQorCisJc3VibAkkU1RBQ0tfU1BBQ0UsICVlc3AJZGVmbGl0KGBGUkFNRScsU1RBQ0tfU1BBQ0UpCisJbW92bAlQQVJBTV9TSElGVCwgJWVjeAlDIHNoaWZ0IGNvdW50CisKKwltb3ZsCSVlYnAsIFNBVkVfRUJQCisJbW92bAlQQVJBTV9TSVpFLCAlZWJwCisKKwltb3ZsCSVlc2ksIFNBVkVfRVNJCisJbW92bAlQQVJBTV9TUkMsICVlc2kKKworCW1vdmwJJWVkaSwgU0FWRV9FREkKKwltb3ZsCVBBUkFNX0RTVCwgJWVkaQorCisJbW92bAklZWJ4LCBTQVZFX0VCWAorCisJbGVhbAkoJWVzaSwlZWJwLDQpLCAlZXNpCUMgc3JjIGVuZAorCWxlYWwJKCVlZGksJWVicCw0KSwgJWVkaQlDIGRzdCBlbmQKKwluZWdsCSVlYnAJCQlDIC1zaXplCisKKwltb3ZsCVBBUkFNX0lOVkVSU0UsICVlYXgJQyBpbnYKKworTChjb21tb24pOgorCW1vdmwJJWVheCwgVkFSX0lOVkVSU0UKKwltb3ZsCSglZXNpLCVlYnAsNCksICVlYXgJQyBzcmNbMF0KKworCWluY2wJJWVicAorCWp6CUwob25lKQorCisJbW92bAkoJWVzaSwlZWJwLDQpLCAlZWR4CUMgc3JjWzFdCisKKwlzaHJkbCgJJWNsLCAlZWR4LCAlZWF4KQorCisJbW92bAklZWRpLCBWQVJfRFNUX0VORAorCXhvcmwJJWVieCwgJWVieAorCWptcAlMKGVudHJ5KQorCisJQUxJR04oOCkKK0wodG9wKToKKwlDIGVheAlxCisJQyBlYngJY2FycnkgYml0LCAwIG9yIDEKKwlDIGVjeAlzaGlmdAorCUMgZWR4CisJQyBlc2kJc3JjIGVuZAorCUMgZWRpCWRzdCBlbmQKKwlDIGVicAljb3VudGVyLCBsaW1icywgbmVnYXRpdmUKKworCW11bGwJUEFSQU1fRElWSVNPUgkJQyBjYXJyeSBsaW1iIGluIGVkeAorCisJbW92bAktNCglZXNpLCVlYnAsNCksICVlYXgKKwltb3ZsCSglZXNpLCVlYnAsNCksICVlZGkKKworCXNocmRsKAklY2wsICVlZGksICVlYXgpCisKKwlzdWJsCSVlYngsICVlYXgJCUMgYXBwbHkgY2FycnkgYml0CisJc2V0YwklYmwKKwltb3ZsCVZBUl9EU1RfRU5ELCAlZWRpCisKKwlzdWJsCSVlZHgsICVlYXgJCUMgYXBwbHkgY2FycnkgbGltYgorCWFkY2wJJDAsICVlYngKKworTChlbnRyeSk6CisJaW11bGwJVkFSX0lOVkVSU0UsICVlYXgKKworCW1vdmwJJWVheCwgLTQoJWVkaSwlZWJwLDQpCisJaW5jbAklZWJwCisJam56CUwodG9wKQorCisKKwltdWxsCVBBUkFNX0RJVklTT1IJCUMgY2FycnkgbGltYiBpbiBlZHgKKworCW1vdmwJLTQoJWVzaSksICVlYXgJCUMgc3JjIGhpZ2ggbGltYgorCXNocmwJJWNsLCAlZWF4CisJbW92bAlTQVZFX0VTSSwgJWVzaQorCisJc3VibAklZWJ4LCAlZWF4CQlDIGFwcGx5IGNhcnJ5IGJpdAorCW1vdmwJU0FWRV9FQlgsICVlYngKKwltb3ZsCVNBVkVfRUJQLCAlZWJwCisKKwlzdWJsCSVlZHgsICVlYXgJCUMgYXBwbHkgY2FycnkgbGltYgorCisJaW11bGwJVkFSX0lOVkVSU0UsICVlYXgKKworCW1vdmwJJWVheCwgLTQoJWVkaSkKKwltb3ZsCVNBVkVfRURJLCAlZWRpCisJYWRkbAkkU1RBQ0tfU1BBQ0UsICVlc3AKKworCXJldAorCitMKG9uZSk6CisJc2hybAklY2wsICVlYXgKKwltb3ZsCVNBVkVfRVNJLCAlZXNpCisJbW92bAlTQVZFX0VCWCwgJWVieAorCisJaW11bGwJVkFSX0lOVkVSU0UsICVlYXgKKworCW1vdmwJU0FWRV9FQlAsICVlYnAKKworCW1vdmwJJWVheCwgLTQoJWVkaSkKKwltb3ZsCVNBVkVfRURJLCAlZWRpCisJYWRkbAkkU1RBQ0tfU1BBQ0UsICVlc3AKKworCXJldAorRVBJTE9HVUUoKQorCitDIG1wX2xpbWJfdCBtcG5fYmRpdl9xXzEgKG1wX3B0ciBkc3QsIG1wX3NyY3B0ciBzcmMsIG1wX3NpemVfdCBzaXplLAorQyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wX2xpbWJfdCBkaXZpc29yKTsKK0MKKworCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX2JkaXZfcV8xKQorZGVmbGl0KGBGUkFNRScsMCkKKworCW1vdmwJUEFSQU1fRElWSVNPUiwgJWVheAorCXN1YmwJJFNUQUNLX1NQQUNFLCAlZXNwCWRlZmxpdChgRlJBTUUnLFNUQUNLX1NQQUNFKQorCW1vdmwJJC0xLCAlZWN4CQlDIHNoaWZ0IGNvdW50CisKKwltb3ZsCSVlYnAsIFNBVkVfRUJQCisJbW92bAlQQVJBTV9TSVpFLCAlZWJwCisKKwltb3ZsCSVlc2ksIFNBVkVfRVNJCisJbW92bAklZWRpLCBTQVZFX0VESQorCisJQyBJZiB0aGVyZSdzIHVzdWFsbHkgb25seSBvbmUgb3IgdHdvIHRyYWlsaW5nIHplcm8gYml0cyB0aGVuIHRoaXMKKwlDIHNob3VsZCBiZSBmYXN0ZXIgdGhhbiBic2ZsLgorTChzdHJpcF90d29zKToKKwlpbmNsCSVlY3gKKwlzaHJsCSVlYXgKKwlqbmMJTChzdHJpcF90d29zKQorCisJbW92bAklZWJ4LCBTQVZFX0VCWAorCWxlYWwJMSglZWF4LCVlYXgpLCAlZWJ4CUMgZCB3aXRob3V0IHR3b3MKKwlhbmRsCSQxMjcsICVlYXgJCUMgZC8yLCA3IGJpdHMKKworaWZkZWYoYFBJQycsYAorCUxFQSgJYmludmVydF9saW1iX3RhYmxlLCAlZWR4KQorCW1vdnpibAkoJWVheCwlZWR4KSwgJWVheAkJQyBpbnYgOCBiaXRzCisnLGAKKwltb3Z6YmwJYmludmVydF9saW1iX3RhYmxlKCVlYXgpLCAlZWF4CUMgaW52IDggYml0cworJykKKworCWxlYWwJKCVlYXgsJWVheCksICVlZHgJQyAyKmludgorCW1vdmwJJWVieCwgUEFSQU1fRElWSVNPUglDIGQgd2l0aG91dCB0d29zCisKKwlpbXVsbAklZWF4LCAlZWF4CQlDIGludippbnYKKworCW1vdmwJUEFSQU1fU1JDLCAlZXNpCisJbW92bAlQQVJBTV9EU1QsICVlZGkKKworCWltdWxsCSVlYngsICVlYXgJCUMgaW52KmludipkCisKKwlzdWJsCSVlYXgsICVlZHgJCUMgaW52ID0gMippbnYgLSBpbnYqaW52KmQKKwlsZWFsCSglZWR4LCVlZHgpLCAlZWF4CUMgMippbnYKKworCWltdWxsCSVlZHgsICVlZHgJCUMgaW52KmludgorCisJbGVhbAkoJWVzaSwlZWJwLDQpLCAlZXNpCUMgc3JjIGVuZAorCWxlYWwJKCVlZGksJWVicCw0KSwgJWVkaQlDIGRzdCBlbmQKKwluZWdsCSVlYnAJCQlDIC1zaXplCisKKwlpbXVsbAklZWJ4LCAlZWR4CQlDIGludippbnYqZAorCisJc3VibAklZWR4LCAlZWF4CQlDIGludiA9IDIqaW52IC0gaW52KmludipkCisKKwlBU1NFUlQoZSxgCUMgZXhwZWN0IGQqaW52ID09IDEgbW9kIDJeR01QX0xJTUJfQklUUworCXB1c2hsCSVlYXgJRlJBTUVfcHVzaGwoKQorCWltdWxsCVBBUkFNX0RJVklTT1IsICVlYXgKKwljbXBsCSQxLCAlZWF4CisJcG9wbAklZWF4CUZSQU1FX3BvcGwoKScpCisKKwlqbXAJTChjb21tb24pCitFUElMT0dVRSgpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s3L2RpdmVfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNy9kaXZlXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1OGJkMDIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNy9kaXZlXzEuYXNtCkBAIC0wLDAgKzEsMjA4IEBACitkbmwgIEFNRCBLNyBtcG5fZGl2ZXhhY3RfMSAtLSBtcG4gYnkgbGltYiBleGFjdCBkaXZpc2lvbi4KKworZG5sICBDb3B5cmlnaHQgMjAwMSwgMjAwMiwgMjAwNCwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgQXRobG9uOiAgICAgMTEuMAorQyBIYW1tZXI6ICAgICAgOS4wCisKKworQyB2b2lkIG1wbl9kaXZleGFjdF8xIChtcF9wdHIgZHN0LCBtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSwKK0MgICAgICAgICAgICAgICAgICAgICAgbXBfbGltYl90IGRpdmlzb3IpOworQworQyBUaGUgZGVwZW5kZW50IGNoYWluIGlzIG11bCtpbXVsK3N1YiBmb3IgMTEgY3ljbGVzIGFuZCB0aGF0IHNwZWVkIGlzCitDIGFjaGlldmVkIHdpdGggbm8gc3BlY2lhbCBlZmZvcnQuICBUaGUgbG9hZCBhbmQgc2hybGQgbGF0ZW5jaWVzIGFyZSBoaWRkZW4KK0MgYnkgb3V0IG9mIG9yZGVyIGV4ZWN1dGlvbi4KK0MKK0MgSXQncyBhIHRvdWNoIGZhc3RlciBvbiBzaXplPT0xIHRvIHVzZSB0aGUgbXVsLWJ5LWludmVyc2UgdGhhbiBkaXZsLgorCitkZWZmcmFtZShQQVJBTV9ESVZJU09SLDE2KQorZGVmZnJhbWUoUEFSQU1fU0laRSwgICAxMikKK2RlZmZyYW1lKFBBUkFNX1NSQywgICAgOCkKK2RlZmZyYW1lKFBBUkFNX0RTVCwgICAgNCkKKworZGVmZnJhbWUoU0FWRV9FQlgsICAgICAtNCkKK2RlZmZyYW1lKFNBVkVfRVNJLCAgICAgLTgpCitkZWZmcmFtZShTQVZFX0VESSwgICAgLTEyKQorZGVmZnJhbWUoU0FWRV9FQlAsICAgIC0xNikKK2RlZmZyYW1lKFZBUl9JTlZFUlNFLCAtMjApCitkZWZmcmFtZShWQVJfRFNUX0VORCwgLTI0KQorCitkZWZsaXQoU1RBQ0tfU1BBQ0UsIDI0KQorCisJVEVYVAorCisJQUxJR04oMTYpCitQUk9MT0dVRShtcG5fZGl2ZXhhY3RfMSkKK2RlZmxpdChgRlJBTUUnLDApCisKKwltb3ZsCVBBUkFNX0RJVklTT1IsICVlYXgKKwlzdWJsCSRTVEFDS19TUEFDRSwgJWVzcAlkZWZsaXQoYEZSQU1FJyxTVEFDS19TUEFDRSkKKwltb3ZsCSQtMSwgJWVjeAkJQyBzaGlmdCBjb3VudAorCisJbW92bAklZWJwLCBTQVZFX0VCUAorCW1vdmwJUEFSQU1fU0laRSwgJWVicAorCisJbW92bAklZXNpLCBTQVZFX0VTSQorCW1vdmwJJWVkaSwgU0FWRV9FREkKKworCUMgSWYgdGhlcmUncyB1c3VhbGx5IG9ubHkgb25lIG9yIHR3byB0cmFpbGluZyB6ZXJvIGJpdHMgdGhlbiB0aGlzCisJQyBzaG91bGQgYmUgZmFzdGVyIHRoYW4gYnNmbC4KK0woc3RyaXBfdHdvcyk6CisJaW5jbAklZWN4CisJc2hybAklZWF4CisJam5jCUwoc3RyaXBfdHdvcykKKworCW1vdmwJJWVieCwgU0FWRV9FQlgKKwlsZWFsCTEoJWVheCwlZWF4KSwgJWVieAlDIGQgd2l0aG91dCB0d29zCisJYW5kbAkkMTI3LCAlZWF4CQlDIGQvMiwgNyBiaXRzCisKK2lmZGVmKGBQSUMnLGAKKwlMRUEoCWJpbnZlcnRfbGltYl90YWJsZSwgJWVkeCkKKwltb3Z6YmwJKCVlYXgsJWVkeCksICVlYXgJCUMgaW52IDggYml0cworJyxgCisJbW92emJsCWJpbnZlcnRfbGltYl90YWJsZSglZWF4KSwgJWVheAlDIGludiA4IGJpdHMKKycpCisKKwlsZWFsCSglZWF4LCVlYXgpLCAlZWR4CUMgMippbnYKKwltb3ZsCSVlYngsIFBBUkFNX0RJVklTT1IJQyBkIHdpdGhvdXQgdHdvcworCisJaW11bGwJJWVheCwgJWVheAkJQyBpbnYqaW52CisKKwltb3ZsCVBBUkFNX1NSQywgJWVzaQorCW1vdmwJUEFSQU1fRFNULCAlZWRpCisKKwlpbXVsbAklZWJ4LCAlZWF4CQlDIGludippbnYqZAorCisJc3VibAklZWF4LCAlZWR4CQlDIGludiA9IDIqaW52IC0gaW52KmludipkCisJbGVhbAkoJWVkeCwlZWR4KSwgJWVheAlDIDIqaW52CisKKwlpbXVsbAklZWR4LCAlZWR4CQlDIGludippbnYKKworCWxlYWwJKCVlc2ksJWVicCw0KSwgJWVzaQlDIHNyYyBlbmQKKwlsZWFsCSglZWRpLCVlYnAsNCksICVlZGkJQyBkc3QgZW5kCisJbmVnbAklZWJwCQkJQyAtc2l6ZQorCisJaW11bGwJJWVieCwgJWVkeAkJQyBpbnYqaW52KmQKKworCXN1YmwJJWVkeCwgJWVheAkJQyBpbnYgPSAyKmludiAtIGludippbnYqZAorCisJQVNTRVJUKGUsYAlDIGV4cGVjdCBkKmludiA9PSAxIG1vZCAyXkdNUF9MSU1CX0JJVFMKKwlwdXNobAklZWF4CUZSQU1FX3B1c2hsKCkKKwlpbXVsbAlQQVJBTV9ESVZJU09SLCAlZWF4CisJY21wbAkkMSwgJWVheAorCXBvcGwJJWVheAlGUkFNRV9wb3BsKCknKQorCisJbW92bAklZWF4LCBWQVJfSU5WRVJTRQorCW1vdmwJKCVlc2ksJWVicCw0KSwgJWVheAlDIHNyY1swXQorCisJaW5jbAklZWJwCisJanoJTChvbmUpCisKKwltb3ZsCSglZXNpLCVlYnAsNCksICVlZHgJQyBzcmNbMV0KKworCXNocmRsKAklY2wsICVlZHgsICVlYXgpCisKKwltb3ZsCSVlZGksIFZBUl9EU1RfRU5ECisJeG9ybAklZWJ4LCAlZWJ4CisJam1wCUwoZW50cnkpCisKKwlBTElHTig4KQorTCh0b3ApOgorCUMgZWF4CXEKKwlDIGVieAljYXJyeSBiaXQsIDAgb3IgMQorCUMgZWN4CXNoaWZ0CisJQyBlZHgKKwlDIGVzaQlzcmMgZW5kCisJQyBlZGkJZHN0IGVuZAorCUMgZWJwCWNvdW50ZXIsIGxpbWJzLCBuZWdhdGl2ZQorCisJbXVsbAlQQVJBTV9ESVZJU09SCQlDIGNhcnJ5IGxpbWIgaW4gZWR4CisKKwltb3ZsCS00KCVlc2ksJWVicCw0KSwgJWVheAorCW1vdmwJKCVlc2ksJWVicCw0KSwgJWVkaQorCisJc2hyZGwoCSVjbCwgJWVkaSwgJWVheCkKKworCXN1YmwJJWVieCwgJWVheAkJQyBhcHBseSBjYXJyeSBiaXQKKwlzZXRjCSVibAorCW1vdmwJVkFSX0RTVF9FTkQsICVlZGkKKworCXN1YmwJJWVkeCwgJWVheAkJQyBhcHBseSBjYXJyeSBsaW1iCisJYWRjbAkkMCwgJWVieAorCitMKGVudHJ5KToKKwlpbXVsbAlWQVJfSU5WRVJTRSwgJWVheAorCisJbW92bAklZWF4LCAtNCglZWRpLCVlYnAsNCkKKwlpbmNsCSVlYnAKKwlqbnoJTCh0b3ApCisKKworCW11bGwJUEFSQU1fRElWSVNPUgkJQyBjYXJyeSBsaW1iIGluIGVkeAorCisJbW92bAktNCglZXNpKSwgJWVheAkJQyBzcmMgaGlnaCBsaW1iCisJc2hybAklY2wsICVlYXgKKwltb3ZsCVNBVkVfRVNJLCAlZXNpCisKKwlzdWJsCSVlYngsICVlYXgJCUMgYXBwbHkgY2FycnkgYml0CisJbW92bAlTQVZFX0VCWCwgJWVieAorCW1vdmwJU0FWRV9FQlAsICVlYnAKKworCXN1YmwJJWVkeCwgJWVheAkJQyBhcHBseSBjYXJyeSBsaW1iCisKKwlpbXVsbAlWQVJfSU5WRVJTRSwgJWVheAorCisJbW92bAklZWF4LCAtNCglZWRpKQorCW1vdmwJU0FWRV9FREksICVlZGkKKwlhZGRsCSRTVEFDS19TUEFDRSwgJWVzcAorCisJcmV0CisKKworTChvbmUpOgorCXNocmwJJWNsLCAlZWF4CisJbW92bAlTQVZFX0VTSSwgJWVzaQorCW1vdmwJU0FWRV9FQlgsICVlYngKKworCWltdWxsCVZBUl9JTlZFUlNFLCAlZWF4CisKKwltb3ZsCVNBVkVfRUJQLCAlZWJwCisJbW92bAklZWF4LCAtNCglZWRpKQorCisJbW92bAlTQVZFX0VESSwgJWVkaQorCWFkZGwJJFNUQUNLX1NQQUNFLCAlZXNwCisKKwlyZXQKKworRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNy9nY2RfMTEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazcvZ2NkXzExLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjQ4ZGZkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazcvZ2NkXzExLmFzbQpAQCAtMCwwICsxLDEwNyBAQAorZG5sICB4ODYgbXBuX2djZF8xMSBvcHRpbWlzZWQgZm9yIEFNRCBLNy4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgYnkgS2V2aW4gUnlkZS4gIFJlaGFja2VkIGJ5IFRvcmJqb3JuCitkbmwgIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDAwLTIwMDIsIDIwMDUsIDIwMDksIDIwMTEsIDIwMTIsIDIwMTQsIDIwMTUgRnJlZSBTb2Z0d2FyZQorZG5sICBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDCSAgICAgY3ljbGVzL2JpdCAoYXBwcm94KQorQyBBTUQgSzcJIDUuMzEKK0MgQU1EIEs4LEs5CSA1LjMzCitDIEFNRCBLMTAJIDUuMzAKK0MgQU1EIGJkMQkgPworQyBBTUQgYm9iY2F0CSA3LjAyCitDIEludGVsIFA0LTIJMTAuMQorQyBJbnRlbCBQNC0zLzQJMTAuMAorQyBJbnRlbCBQNi8xMwkgNS44OAorQyBJbnRlbCBjb3JlMgkgNi4yNgorQyBJbnRlbCBOSE0JIDYuODMKK0MgSW50ZWwgU0JSCSA4LjUwCitDIEludGVsIGF0b20JIDguOTAKK0MgVklBIG5hbm8JID8KK0MgTnVtYmVycyBtZWFzdXJlZCB3aXRoOiBzcGVlZCAtQ0QgLXMxNi0zMiAtdDE2IG1wbl9nY2RfMQorCisKK0MgY3R6X3RhYmxlW25dIGlzIHRoZSBudW1iZXIgb2YgdHJhaWxpbmcgemVyb3Mgb24gbiwgb3IgTUFYU0hJRlQgaWYgbj09MC4KKworZGVmbGl0KE1BWFNISUZULCA2KQorZGVmbGl0KE1BU0ssIGV2YWwoKG00X2xzaGlmdCgxLE1BWFNISUZUKSktMSkpCisKK0RFRl9PQkpFQ1QoY3R6X3RhYmxlLDY0KQorCS5ieXRlCU1BWFNISUZUCitmb3Jsb29wKGksMSxNQVNLLAorYAkuYnl0ZQltNF9jb3VudF90cmFpbGluZ196ZXJvcyhpKQorJykKK0VORF9PQkpFQ1QoY3R6X3RhYmxlKQorCisKK2RlZmluZShgdTAnLCAgICBgJWVheCcpCitkZWZpbmUoYHYwJywgICAgYCVlZHgnKQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigxNikKK1BST0xPR1VFKG1wbl9nY2RfMTEpCisJcHVzaAklZWRpCisJcHVzaAklZXNpCisKKwltb3YJMTIoJWVzcCksICVlYXgKKwltb3YJMTYoJWVzcCksICVlZHgKKworCUxFQUwoCWN0el90YWJsZSwgJWVzaSkKKwlqbXAJTChvZGQpCisKKwlBTElHTigxNikJCQlDCitMKHRvcCk6CWNtb3ZjKAklZWN4LCAlZWF4KQkJQyB1ID0gfHYgLSB1fAorCWNtb3ZjKAklZWRpLCAlZWR4KQkJQyB2ID0gbWluKHUsdikKK0wobWlkKToJYW5kCSRNQVNLLCAlZWN4CQlDCisJbW92emJsCSglZXNpLCVlY3gpLCAlZWN4CUMKKwlqeglMKHNoaWZ0X2Fsb3QpCQlDCisJc2hyCSVjbCwgJWVheAkJQworTChvZGQpOgltb3YJJWVheCwgJWVkaQkJQworCW1vdgklZWR4LCAlZWN4CQlDCisJc3ViCSVlYXgsICVlY3gJCUMKKwlzdWIJJWVkeCwgJWVheAkJQworCWpueglMKHRvcCkJCQlDCisKK0woZW5kKToJbW92CSVlZHgsICVlYXgKKwlwb3AJJWVzaQorCXBvcAklZWRpCisJcmV0CisKK0woc2hpZnRfYWxvdCk6CisJc2hyCSRNQVhTSElGVCwgJWVheAorCW1vdgklZWF4LCAlZWN4CisJam1wCUwobWlkKQorRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNy9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNy9nbXAtbXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjViMjJlMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s3L2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDI2MiBAQAorLyogQU1EIEs3IGdtcC1tcGFyYW0uaCAtLSBDb21waWxlci9tYWNoaW5lIHBhcmFtZXRlciBoZWFkZXIgZmlsZS4KKworQ29weXJpZ2h0IDIwMTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNkZWZpbmUgR01QX0xJTUJfQklUUyAzMgorI2RlZmluZSBHTVBfTElNQl9CWVRFUyA0CisKKy8qIDIwODMgTUh6IEs3IEJhcnRvbiAqLworLyogRkZUIHR1bmluZyBsaW1pdCA9IDQ5LDc3MCwwNjkgKi8KKy8qIEdlbmVyYXRlZCBieSB0dW5ldXAuYywgMjAxOS0xMS0wOSwgZ2NjIDguMyAqLworCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgTU9EXzFOX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgIDgKKyNkZWZpbmUgTU9EXzFVX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgIDQKKyNkZWZpbmUgTU9EXzFfMV9UT19NT0RfMV8yX1RIUkVTSE9MRCAgICAgICAgMjQKKyNkZWZpbmUgTU9EXzFfMl9UT19NT0RfMV80X1RIUkVTSE9MRCAgICAgICAgIDAgIC8qIG5ldmVyIG1wbl9tb2RfMXNfMnAgKi8KKyNkZWZpbmUgUFJFSU5WX01PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgMTMKKyNkZWZpbmUgVVNFX1BSRUlOVl9ESVZSRU1fMSAgICAgICAgICAgICAgICAgIDEgIC8qIG5hdGl2ZSAqLworI2RlZmluZSBESVZfUVJfMU5fUEkxX01FVEhPRCAgICAgICAgICAgICAgICAgMSAgLyogMjcuMDAlIGZhc3RlciB0aGFuIDIgKi8KKyNkZWZpbmUgRElWX1FSXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRElWX1FSXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWX1FSXzJfUEkyX1RIUkVTSE9MRCAgICAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWRVhBQ1RfMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAobmF0aXZlKSAqLworI2RlZmluZSBCTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgICAgICAyNgorCisjZGVmaW5lIERJVl8xX1ZTX01VTF8xX1BFUkNFTlQgICAgICAgICAgICAgMTgyCisKKyNkZWZpbmUgTVVMX1RPT00yMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgTVVMX1RPT00zM19USFJFU0hPTEQgICAgICAgICAgICAgICAgODUKKyNkZWZpbmUgTVVMX1RPT000NF9USFJFU0hPTEQgICAgICAgICAgICAgICAxNTQKKyNkZWZpbmUgTVVMX1RPT002SF9USFJFU0hPTEQgICAgICAgICAgICAgICAyMDgKKyNkZWZpbmUgTVVMX1RPT004SF9USFJFU0hPTEQgICAgICAgICAgICAgICAzMDkKKworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT000M19USFJFU0hPTEQgICAgICA5NworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT001M19USFJFU0hPTEQgICAgICA5OQorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT001M19USFJFU0hPTEQgICAgICA5NworI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT002M19USFJFU0hPTEQgICAgIDEwMgorI2RlZmluZSBNVUxfVE9PTTQzX1RPX1RPT001NF9USFJFU0hPTEQgICAgIDEyMQorCisjZGVmaW5lIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNTAKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgODYKKyNkZWZpbmUgU1FSX1RPT000X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyMjAKKyNkZWZpbmUgU1FSX1RPT002X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyNzAKKyNkZWZpbmUgU1FSX1RPT004X1RIUkVTSE9MRCAgICAgICAgICAgICAgICA0NDYKKworI2RlZmluZSBNVUxNSURfVE9PTTQyX1RIUkVTSE9MRCAgICAgICAgICAgICA1MAorCisjZGVmaW5lIE1VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIFNRUk1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE5CisKKyNkZWZpbmUgTVVMX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICA2MDYgIC8qIGsgPSA1ICovCisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICA2MDYsIDV9LCB7ICAgICAyNSwgNn0sIHsgICAgIDEzLCA1fSwgeyAgICAgMjcsIDZ9LCBcCisgICAgeyAgICAgMTUsIDV9LCB7ICAgICAzMSwgNn0sIHsgICAgIDI4LCA3fSwgeyAgICAgMTUsIDZ9LCBcCisgICAgeyAgICAgMzIsIDd9LCB7ICAgICAxNywgNn0sIHsgICAgIDM1LCA3fSwgeyAgICAgMTksIDZ9LCBcCisgICAgeyAgICAgMzksIDd9LCB7ICAgICAyMywgNn0sIHsgICAgIDQ3LCA3fSwgeyAgICAgMjksIDh9LCBcCisgICAgeyAgICAgMTUsIDd9LCB7ICAgICAzNSwgOH0sIHsgICAgIDE5LCA3fSwgeyAgICAgNDEsIDh9LCBcCisgICAgeyAgICAgMjMsIDd9LCB7ICAgICA0OSwgOH0sIHsgICAgIDMxLCA3fSwgeyAgICAgNjMsIDh9LCBcCisgICAgeyAgICAgMzksIDl9LCB7ICAgICAyMywgOH0sIHsgICAgIDU1LCA5fSwgeyAgICAgMzEsIDh9LCBcCisgICAgeyAgICAgNjMsIDd9LCB7ICAgIDEyNywgOH0sIHsgICAgIDcxLCA5fSwgeyAgICAgMzksIDZ9LCBcCisgICAgeyAgICAzMTksIDl9LCB7ICAgICA0NywgOH0sIHsgICAgIDk5LCA2fSwgeyAgICAzOTksIDl9LCBcCisgICAgeyAgICAgNTUsMTB9LCB7ICAgICAzMSwgOX0sIHsgICAgIDYzLCA4fSwgeyAgICAxMjcsIDl9LCBcCisgICAgeyAgICAgNzksMTB9LCB7ICAgICA0NywgOX0sIHsgICAgIDk1LCA4fSwgeyAgICAxOTEsIDR9LCBcCisgICAgeyAgIDMxMzUsIDV9LCB7ICAgMTU5OSwgNH0sIHsgICAzNDU1LCA2fSwgeyAgICA5NTksIDh9LCBcCisgICAgeyAgICAyNDcsMTB9LCB7ICAgICA3OSwgOX0sIHsgICAgMTY3LDEwfSwgeyAgICAgOTUsIDl9LCBcCisgICAgeyAgICAxOTksMTB9LCB7ICAgIDExMSwxMX0sIHsgICAgIDYzLDEwfSwgeyAgICAxMjcsIDl9LCBcCisgICAgeyAgICAyNTUsMTB9LCB7ICAgIDE0MywgOX0sIHsgICAgMjg3LCA4fSwgeyAgICA1NzUsMTB9LCBcCisgICAgeyAgICAxNTksIDl9LCB7ICAgIDMxOSwgOH0sIHsgICAgNjM5LCA3fSwgeyAgIDEyNzksMTF9LCBcCisgICAgeyAgICAgOTUsMTB9LCB7ICAgIDE5MSwgOX0sIHsgICAgMzgzLCA4fSwgeyAgICA3OTksMTB9LCBcCisgICAgeyAgICAyMDcsMTJ9LCB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgeyAgICAyNTUsIDl9LCBcCisgICAgeyAgICA1MTEsIDh9LCB7ICAgMTAyMywxMH0sIHsgICAgMjcxLCA5fSwgeyAgICA1NDMsIDh9LCBcCisgICAgeyAgIDEwODcsIDl9LCB7ICAgIDU3NSwxMX0sIHsgICAgMTU5LCA5fSwgeyAgICA2MzksMTB9LCBcCisgICAgeyAgICAzMzUsIDl9LCB7ICAgIDY3MSwgOH0sIHsgICAxMzQzLDEwfSwgeyAgICAzNTEsIDl9LCBcCisgICAgeyAgICA3MDMsMTF9LCB7ICAgIDE5MSwxMH0sIHsgICAgMzgzLCA5fSwgeyAgICA3OTksIDh9LCBcCisgICAgeyAgIDE1OTksMTF9LCB7ICAgIDIyMywxMH0sIHsgICAgNDQ3LDEyfSwgeyAgICAxMjcsMTF9LCBcCisgICAgeyAgICAyNTUsMTB9LCB7ICAgIDUxMSwgOX0sIHsgICAxMDIzLDEwfSwgeyAgICA1NDMsIDl9LCBcCisgICAgeyAgIDEwODcsMTB9LCB7ICAgIDU3NSwgOX0sIHsgICAxMTUxLDEwfSwgeyAgICA2MDcsIDl9LCBcCisgICAgeyAgIDEyMTUsMTF9LCB7ICAgIDMxOSwxMH0sIHsgICAgNjM5LCA5fSwgeyAgIDEzNDMsMTB9LCBcCisgICAgeyAgICA3MDMsIDl9LCB7ICAgMTQwNywxMn0sIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTB9LCBcCisgICAgeyAgICA3NjcsIDl9LCB7ICAgMTUzNSwxMH0sIHsgICAgNzk5LCA5fSwgeyAgIDE1OTksMTB9LCBcCisgICAgeyAgICA4MzEsIDl9LCB7ICAgMTcyNywgOH0sIHsgICAzNDU1LDExfSwgeyAgICA0NDcsMTN9LCBcCisgICAgeyAgICAxMjcsMTJ9LCB7ICAgIDI1NSwxMX0sIHsgICAgNTExLDEwfSwgeyAgIDEwMjMsIDl9LCBcCisgICAgeyAgIDIwNDcsMTF9LCB7ICAgIDU0MywxMH0sIHsgICAxMDg3LDExfSwgeyAgICA1NzUsMTB9LCBcCisgICAgeyAgIDExNTEsIDl9LCB7ICAgMjMwMywxMX0sIHsgICAgNjA3LDEwfSwgeyAgIDEyMTUsMTJ9LCBcCisgICAgeyAgICAzMTksMTF9LCB7ICAgIDYzOSwxMH0sIHsgICAxMjc5LDExfSwgeyAgICA2NzEsMTB9LCBcCisgICAgeyAgIDEzNDMsMTF9LCB7ICAgIDcwMywxMH0sIHsgICAxNDA3LDExfSwgeyAgICA3MzUsMTB9LCBcCisgICAgeyAgIDE0NzEsIDl9LCB7ICAgMjk0MywxMn0sIHsgICAgMzgzLDExfSwgeyAgICA3NjcsMTB9LCBcCisgICAgeyAgIDE1MzUsMTF9LCB7ICAgIDc5OSwxMH0sIHsgICAxNTk5LDExfSwgeyAgICA4MzEsMTB9LCBcCisgICAgeyAgIDE2NjMsMTF9LCB7ICAgIDg2MywxMH0sIHsgICAxNzI3LDEyfSwgeyAgICA0NDcsMTF9LCBcCisgICAgeyAgICA4OTUsMTB9LCB7ICAgMTc5MSwxMX0sIHsgICAgOTU5LDEwfSwgeyAgIDE5MTksMTN9LCBcCisgICAgeyAgICAyNTUsMTJ9LCB7ICAgIDUxMSwxMX0sIHsgICAxMDIzLDEwfSwgeyAgIDIxMTEsMTF9LCBcCisgICAgeyAgIDEwODcsMTB9LCB7ICAgMjE3NSwxMn0sIHsgICAgNTc1LDExfSwgeyAgIDExNTEsMTB9LCBcCisgICAgeyAgIDIzMDMsMTF9LCB7ICAgMTIxNSwxMH0sIHsgICAyNDMxLDEyfSwgeyAgICA2MzksMTF9LCBcCisgICAgeyAgIDEzNDMsMTJ9LCB7ICAgIDcwMywxMX0sIHsgICAxNDA3LDEwfSwgeyAgIDI4MTUsMTF9LCBcCisgICAgeyAgIDE0NzEsMTB9LCB7ICAgMjk0MywxM30sIHsgICAgMzgzLDEyfSwgeyAgICA3NjcsMTF9LCBcCisgICAgeyAgIDE1OTksMTJ9LCB7ICAgIDgzMSwxMX0sIHsgICAxNjYzLDEwfSwgeyAgIDMzMjcsMTF9LCBcCisgICAgeyAgIDE3MjcsMTB9LCB7ICAgMzQ1NSwxMn0sIHsgICAgODk1LDExfSwgeyAgIDE4NTUsMTJ9LCBcCisgICAgeyAgICA5NTksMTF9LCB7ICAgMTkxOSwxMH0sIHsgICAzODM5LDE0fSwgeyAgICAyNTUsMTN9LCBcCisgICAgeyAgICA1MTEsMTJ9LCB7ICAgMTAyMywxMX0sIHsgICAyMTExLDEyfSwgeyAgIDEwODcsMTF9LCBcCisgICAgeyAgIDIyMzksMTJ9LCB7ICAgMTE1MSwxMX0sIHsgICAyMzAzLDEyfSwgeyAgIDEyMTUsMTF9LCBcCisgICAgeyAgIDI0MzEsMTN9LCB7ICAgIDYzOSwxMn0sIHsgICAxMzQzLDExfSwgeyAgIDI2ODcsMTJ9LCBcCisgICAgeyAgIDE0MDcsMTF9LCB7ICAgMjgxNSwxMn0sIHsgICAxNDcxLDExfSwgeyAgIDI5NDMsMTN9LCBcCisgICAgeyAgICA3NjcsMTJ9LCB7ICAgMTY2MywxMX0sIHsgICAzMzI3LDEyfSwgeyAgIDE3MjcsMTF9LCBcCisgICAgeyAgIDM0NTUsMTN9LCB7ICAgIDg5NSwxMn0sIHsgICAxOTE5LDExfSwgeyAgIDM4MzksMTJ9LCBcCisgICAgeyAgIDE5ODMsMTR9LCB7ICAgIDUxMSwxM30sIHsgICAxMDIzLDEyfSwgeyAgIDIyMzksMTN9LCBcCisgICAgeyAgIDExNTEsMTJ9LCB7ICAgMjQ5NSwxM30sIHsgICAxMjc5LDEyfSwgeyAgIDI2ODcsMTN9LCBcCisgICAgeyAgIDE0MDcsMTJ9LCB7ICAgMjk0MywxNH0sIHsgICAgNzY3LDEzfSwgeyAgIDE1MzUsMTJ9LCBcCisgICAgeyAgIDMxMzUsMTN9LCB7ICAgMTY2MywxMn0sIHsgICAzNDU1LDEzfSwgeyAgIDE3OTEsMTJ9LCBcCisgICAgeyAgIDM1ODMsMTN9LCB7ICAgMTkxOSwxMn0sIHsgICAzOTY3LDE1fSwgeyAgICA1MTEsMTR9LCBcCisgICAgeyAgIDEwMjMsMTN9LCB7ICAgMjA0NywxMn0sIHsgICA0MDk1LDEzfSwgeyAgIDIxNzUsMTJ9LCBcCisgICAgeyAgIDQ0NzksMTN9LCB7ICAgMjQzMSwxMn0sIHsgICA0ODYzLDE0fSwgeyAgIDEyNzksMTN9LCBcCisgICAgeyAgIDI1NTksMTJ9LCB7ICAgNTExOSwxM30sIHsgICAyOTQzLDEyfSwgeyAgIDU4ODcsMTR9LCBcCisgICAgeyAgIDE1MzUsMTN9LCB7ICAgMzQ1NSwxNH0sIHsgICAxNzkxLDEzfSwgeyAgIDM5NjcsMTV9LCBcCisgICAgeyAgIDEwMjMsMTR9LCB7ICAgMjA0NywxM30sIHsgICA0NDc5LDE0fSwgeyAgIDIzMDMsMTN9LCBcCisgICAgeyAgIDQ5OTEsMTR9LCB7ICAgMjU1OSwxM30sIHsgICA1MTE5LDE0fSwgeyAgIDI4MTUsMTN9LCBcCisgICAgeyAgIDU4ODcsMTV9LCB7ICAzMjc2OCwxNn0gfQorI2RlZmluZSBNVUxfRkZUX1RBQkxFM19TSVpFIDI1NAorI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNzU1MgorCisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgNDkyICAvKiBrID0gNSAqLworI2RlZmluZSBTUVJfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgNDkyLCA1fSwgeyAgICAgMjUsIDZ9LCB7ICAgICAxMywgNX0sIHsgICAgIDI3LCA2fSwgXAorICAgIHsgICAgIDI4LCA3fSwgeyAgICAgMTUsIDZ9LCB7ICAgICAzMiwgN30sIHsgICAgIDE3LCA2fSwgXAorICAgIHsgICAgIDM1LCA3fSwgeyAgICAgMTksIDZ9LCB7ICAgICAzOSwgN30sIHsgICAgIDI3LCA4fSwgXAorICAgIHsgICAgIDE1LCA3fSwgeyAgICAgMzUsIDh9LCB7ICAgICAxOSwgN30sIHsgICAgIDQxLCA4fSwgXAorICAgIHsgICAgIDIzLCA3fSwgeyAgICAgNDcsIDh9LCB7ICAgICAyNywgOX0sIHsgICAgIDE1LCA4fSwgXAorICAgIHsgICAgIDMxLCA3fSwgeyAgICAgNjMsIDh9LCB7ICAgICAzOSwgOX0sIHsgICAgIDIzLCA4fSwgXAorICAgIHsgICAgIDUxLCA5fSwgeyAgICAgMzEsIDh9LCB7ICAgICA2NywgOX0sIHsgICAgIDM5LCA4fSwgXAorICAgIHsgICAgIDc5LCA5fSwgeyAgICAgNDcsIDh9LCB7ICAgICA5NSwgOX0sIHsgICAgIDU1LDEwfSwgXAorICAgIHsgICAgIDMxLCA5fSwgeyAgICAgNzksMTB9LCB7ICAgICA0NywgOX0sIHsgICAgMTAzLDExfSwgXAorICAgIHsgICAgIDMxLDEwfSwgeyAgICAgNjMsIDl9LCB7ICAgIDEzNSwgOH0sIHsgICAgMjcxLCA5fSwgXAorICAgIHsgICAgMTQzLDEwfSwgeyAgICAgNzksIDl9LCB7ICAgIDE2NywxMH0sIHsgICAgIDk1LCA5fSwgXAorICAgIHsgICAgMTkxLCA4fSwgeyAgICAzODMsMTB9LCB7ICAgIDExMSwxMX0sIHsgICAgIDYzLDEwfSwgXAorICAgIHsgICAgMTI3LCA5fSwgeyAgICAyNTUsIDh9LCB7ICAgIDUxMSwxMH0sIHsgICAgMTQzLCA5fSwgXAorICAgIHsgICAgMzAzLDEwfSwgeyAgICAxNTksIDl9LCB7ICAgIDMxOSwgOH0sIHsgICAgNjM5LDExfSwgXAorICAgIHsgICAgIDk1LDEwfSwgeyAgICAxOTEsIDl9LCB7ICAgIDM4MywgOH0sIHsgICAgNzY3LCA5fSwgXAorICAgIHsgICAgMzk5LDEwfSwgeyAgICAyMDcsMTJ9LCB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgXAorICAgIHsgICAgMjU1LCA5fSwgeyAgICA1MTEsMTB9LCB7ICAgIDI3MSwgOX0sIHsgICAgNTQzLCA4fSwgXAorICAgIHsgICAxMDg3LDEwfSwgeyAgICAyODcsIDl9LCB7ICAgIDU3NSwxMH0sIHsgICAgMzAzLDExfSwgXAorICAgIHsgICAgMTU5LDEwfSwgeyAgICAzMTksIDl9LCB7ICAgIDYzOSwxMH0sIHsgICAgMzM1LCA5fSwgXAorICAgIHsgICAgNjcxLCA4fSwgeyAgIDEzNDMsIDl9LCB7ICAgIDcwMywxMX0sIHsgICAgMTkxLDEwfSwgXAorICAgIHsgICAgMzgzLCA5fSwgeyAgICA3NjcsIDh9LCB7ICAgMTUzNSwxMH0sIHsgICAgMzk5LCA5fSwgXAorICAgIHsgICAgNzk5LCA4fSwgeyAgIDE1OTksIDl9LCB7ICAgIDg2MywxMX0sIHsgICAgMjIzLDEwfSwgXAorICAgIHsgICAgNDQ3LDEyfSwgeyAgICAxMjcsMTF9LCB7ICAgIDI1NSwxMH0sIHsgICAgNTExLCA5fSwgXAorICAgIHsgICAxMDg3LDEwfSwgeyAgICA1NzUsIDl9LCB7ICAgMTIxNSwxMH0sIHsgICAgNjM5LCA5fSwgXAorICAgIHsgICAxMjc5LDEwfSwgeyAgICA2NzEsIDl9LCB7ICAgMTM0MywxMX0sIHsgICAgMzUxLDEwfSwgXAorICAgIHsgICAgNzAzLCA5fSwgeyAgIDE0MDcsMTB9LCB7ICAgIDczNSwgOX0sIHsgICAxNDcxLDEyfSwgXAorICAgIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTB9LCB7ICAgIDc2NywgOX0sIHsgICAxNTM1LDEwfSwgXAorICAgIHsgICAgNzk5LCA5fSwgeyAgIDE1OTksMTF9LCB7ICAgIDQxNSwxMH0sIHsgICAgODMxLCA5fSwgXAorICAgIHsgICAxNjYzLDEwfSwgeyAgICA4NjMsIDl9LCB7ICAgMTcyNywgOH0sIHsgICAzNDU1LDExfSwgXAorICAgIHsgICAgNDQ3LDEwfSwgeyAgICA4OTUsMTN9LCB7ICAgIDEyNywxMn0sIHsgICAgMjU1LDExfSwgXAorICAgIHsgICAgNTExLDEwfSwgeyAgIDEwMjMsIDl9LCB7ICAgMjA0NywxMX0sIHsgICAgNTQzLDEwfSwgXAorICAgIHsgICAxMDg3LCA5fSwgeyAgIDIxNzUsMTF9LCB7ICAgIDU3NSwxMH0sIHsgICAxMTUxLCA5fSwgXAorICAgIHsgICAyMzAzLDExfSwgeyAgICA2MDcsMTB9LCB7ICAgMTIxNSwgOX0sIHsgICAyNDMxLDEyfSwgXAorICAgIHsgICAgMzE5LDExfSwgeyAgICA2MzksMTB9LCB7ICAgMTI3OSwxMX0sIHsgICAgNjcxLDEwfSwgXAorICAgIHsgICAxMzQzLDExfSwgeyAgICA3MDMsMTB9LCB7ICAgMTQwNywgOX0sIHsgICAyODE1LDExfSwgXAorICAgIHsgICAgNzM1LDEwfSwgeyAgIDE0NzEsIDl9LCB7ICAgMjk0MywxMn0sIHsgICAgMzgzLDExfSwgXAorICAgIHsgICAgNzY3LDEwfSwgeyAgIDE1OTksMTF9LCB7ICAgIDgzMSwxMH0sIHsgICAxNjYzLCA5fSwgXAorICAgIHsgICAzMzI3LDEwfSwgeyAgIDE3MjcsMTJ9LCB7ICAgIDQ0NywxMX0sIHsgICAgODk1LDEwfSwgXAorICAgIHsgICAxNzkxLDExfSwgeyAgICA5NTksMTB9LCB7ICAgMTkxOSwxM30sIHsgICAgMjU1LDEyfSwgXAorICAgIHsgICAgNTExLDExfSwgeyAgIDEwMjMsMTB9LCB7ICAgMjExMSwxMX0sIHsgICAxMDg3LDEwfSwgXAorICAgIHsgICAyMTc1LDEyfSwgeyAgICA1NzUsMTF9LCB7ICAgMTE1MSwxMH0sIHsgICAyMzAzLDExfSwgXAorICAgIHsgICAxMjE1LDEwfSwgeyAgIDI0MzEsMTJ9LCB7ICAgIDYzOSwxMX0sIHsgICAxMzQzLDEyfSwgXAorICAgIHsgICAgNzAzLDExfSwgeyAgIDE0MDcsMTB9LCB7ICAgMjgxNSwxMX0sIHsgICAxNDcxLDEwfSwgXAorICAgIHsgICAyOTQzLDEzfSwgeyAgICAzODMsMTJ9LCB7ICAgIDc2NywxMX0sIHsgICAxNTk5LDEyfSwgXAorICAgIHsgICAgODMxLDExfSwgeyAgIDE2NjMsMTB9LCB7ICAgMzMyNywxMX0sIHsgICAxNzI3LDEwfSwgXAorICAgIHsgICAzNDU1LDEyfSwgeyAgICA4OTUsMTF9LCB7ICAgMTc5MSwxMn0sIHsgICAgOTU5LDExfSwgXAorICAgIHsgICAxOTE5LDEwfSwgeyAgIDM4MzksMTR9LCB7ICAgIDI1NSwxM30sIHsgICAgNTExLDEyfSwgXAorICAgIHsgICAxMDIzLDExfSwgeyAgIDIxMTEsMTJ9LCB7ICAgMTA4NywxMX0sIHsgICAyMjM5LDEyfSwgXAorICAgIHsgICAxMTUxLDExfSwgeyAgIDIzMDMsMTJ9LCB7ICAgMTIxNSwxMX0sIHsgICAyNDMxLDEzfSwgXAorICAgIHsgICAgNjM5LDEyfSwgeyAgIDEzNDMsMTF9LCB7ICAgMjY4NywxMn0sIHsgICAxNDA3LDExfSwgXAorICAgIHsgICAyODE1LDEyfSwgeyAgIDE0NzEsMTF9LCB7ICAgMjk0MywxM30sIHsgICAgNzY3LDEyfSwgXAorICAgIHsgICAxNTk5LDExfSwgeyAgIDMxOTksMTJ9LCB7ICAgMTY2MywxMX0sIHsgICAzMzI3LDEyfSwgXAorICAgIHsgICAxNzI3LDExfSwgeyAgIDM0NTUsMTN9LCB7ICAgIDg5NSwxMn0sIHsgICAxNzkxLDExfSwgXAorICAgIHsgICAzNTgzLDEyfSwgeyAgIDE5MTksMTF9LCB7ICAgMzgzOSwxMn0sIHsgICAxOTgzLDE0fSwgXAorICAgIHsgICAgNTExLDEzfSwgeyAgIDEwMjMsMTJ9LCB7ICAgMjIzOSwxM30sIHsgICAxMTUxLDEyfSwgXAorICAgIHsgICAyNDMxLDEzfSwgeyAgIDEyNzksMTJ9LCB7ICAgMjY4NywxM30sIHsgICAxNDA3LDEyfSwgXAorICAgIHsgICAyOTQzLDE0fSwgeyAgICA3NjcsMTN9LCB7ICAgMTUzNSwxMn0sIHsgICAzMTk5LDEzfSwgXAorICAgIHsgICAxNjYzLDEyfSwgeyAgIDM0NTUsMTN9LCB7ICAgMTc5MSwxMn0sIHsgICAzNTgzLDEzfSwgXAorICAgIHsgICAxOTE5LDEyfSwgeyAgIDM5NjcsMTV9LCB7ICAgIDUxMSwxNH0sIHsgICAxMDIzLDEzfSwgXAorICAgIHsgICAyMDQ3LDEyfSwgeyAgIDQwOTUsMTN9LCB7ICAgMjE3NSwxMn0sIHsgICA0MzUxLDEzfSwgXAorICAgIHsgICAyNDMxLDE0fSwgeyAgIDEyNzksMTN9LCB7ICAgMjk0MywxMn0sIHsgICA1ODg3LDE0fSwgXAorICAgIHsgICAxNTM1LDEzfSwgeyAgIDM0NTUsMTR9LCB7ICAgMTc5MSwxM30sIHsgICAzOTY3LDE1fSwgXAorICAgIHsgICAxMDIzLDE0fSwgeyAgIDIwNDcsMTN9LCB7ICAgNDM1MSwxNH0sIHsgICAyMzAzLDEzfSwgXAorICAgIHsgICA0OTkxLDE0fSwgeyAgIDI1NTksMTN9LCB7ICAgNTExOSwxNH0sIHsgICAyODE1LDEzfSwgXAorICAgIHsgICA1ODg3LDE1fSwgeyAgMzI3NjgsMTZ9IH0KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTNfU0laRSAyNTgKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDU1MDQKKworI2RlZmluZSBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgMworI2RlZmluZSBNVUxMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAzNAorI2RlZmluZSBNVUxMT19NVUxfTl9USFJFU0hPTEQgICAgICAgICAgICAxNDI4MQorI2RlZmluZSBTUVJMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgNgorI2RlZmluZSBTUVJMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgIDEzNworI2RlZmluZSBTUVJMT19TUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAxMDgyMQorCisjZGVmaW5lIERDX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDQ1CisjZGVmaW5lIERDX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAgMjA2CisjZGVmaW5lIERDX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDM5CisjZGVmaW5lIERDX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTQ0CisKKyNkZWZpbmUgSU5WX01VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgNTQKKyNkZWZpbmUgSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgICAyMDIKKyNkZWZpbmUgSU5WX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAyMDYKKworI2RlZmluZSBCSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgIDIyNAorI2RlZmluZSBSRURDXzFfVE9fUkVEQ19OX1RIUkVTSE9MRCAgICAgICAgICA2MworCisjZGVmaW5lIE1VX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAxNDQyCisjZGVmaW5lIE1VX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAxMzg3CisjZGVmaW5lIE1VUElfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDgyCisjZGVmaW5lIE1VX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAxMzA4CisjZGVmaW5lIE1VX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAxMzg3CisKKyNkZWZpbmUgUE9XTV9TRUNfVEFCTEUgIDEsMTYsMTAyLDQyOCwxMjIxCisKKyNkZWZpbmUgR0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICAgMjgKKyNkZWZpbmUgU0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAyNTQKKyNkZWZpbmUgU0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICA4OTAKKworI2RlZmluZSBGQUNfRFNDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDIwNgorI2RlZmluZSBGQUNfT0REX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAyOQorCisjZGVmaW5lIE1BVFJJWDIyX1NUUkFTU0VOX1RIUkVTSE9MRCAgICAgICAgIDE3CisjZGVmaW5lIEhHQ0QyX0RJVjFfTUVUSE9EICAgICAgICAgICAgICAgICAgICAzICAvKiAzLjg0JSBmYXN0ZXIgdGhhbiA0ICovCisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAgMTIzCisjZGVmaW5lIEhHQ0RfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTUxCisjZGVmaW5lIEhHQ0RfUkVEVUNFX1RIUkVTSE9MRCAgICAgICAgICAgICAzMzg5CisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgNDM1CisjZGVmaW5lIEdDREVYVF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMzE4CisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAgICA0ICAvKiA4LjA0JSBmYXN0ZXIgdGhhbiAzICovCisKKy8qIFR1bmV1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCB0b29rIDE3NTM4MiBzZWNvbmRzICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNy9pbnZlcnRfbGltYi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNy9pbnZlcnRfbGltYi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFhODY3ZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s3L2ludmVydF9saW1iLmFzbQpAQCAtMCwwICsxLDE5NCBAQAorZG5sICB4ODYgbXBuX2ludmVydF9saW1iCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IE5pZWxzIE3DtmxsZXIKKworZG5sICBDb3B5cmlnaHQgMjAwOSwgMjAxMSwgMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCQkJICAgIGN5Y2xlcyAoYXBwcm94KQlkaXYKK0MgUDUJCQkJID8KK0MgUDYgbW9kZWwgMC04LDEwLTEyCQkgPworQyBQNiBtb2RlbCA5ICAoQmFuaWFzKQkJID8KK0MgUDYgbW9kZWwgMTMgKERvdGhhbikJCSA/CitDIFA0IG1vZGVsIDAgIChXaWxsYW1ldHRlKQkgPworQyBQNCBtb2RlbCAxICAoPykJCSA/CitDIFA0IG1vZGVsIDIgIChOb3J0aHdvb2QpCSA/CitDIFA0IG1vZGVsIDMgIChQcmVzY290dCkJID8KK0MgUDQgbW9kZWwgNCAgKE5vY29uYSkJCSA/CitDIEFNRCBLNgkJCSA/CitDIEFNRCBLNwkJCTQxCQk1MworQyBBTUQgSzgJCQkgPworCitDIFRPRE8KK0MgICogVGhlc2UgYy9sIG51bWJlcnMgYXJlIGZvciBhIG5vbi1QSUMgYnVpbGQuICBDb25zaWRlciBmYWxsaW5nIGJhY2sgdG8gdXNpbmcKK0MgICAgdGhlICdkaXYnIGluc3RydWN0aW9uIGZvciBQSUMgYnVpbGRzLgorQyAgKiBQZXJoYXBzIHVzZSB0aGlzIGZpbGUtLW9yIGF0IGxlYXN0IHRoZSBhbGdvcml0aG0tLWZvciBtb3JlIG1hY2hpbmVzIHRoYW4gazcuCisKK0MgUmVnaXN0ZXIgdXNhZ2U6CitDICAgSW5wdXQgRCBpbiAlZWRpCitDICAgQ3VycmVudCBhcHByb3hpbWF0aW9uIGlzIGluICVlYXggYW5kL29yICVlY3gKK0MgICAlZWJ4IGFuZCAlZWR4IGFyZSB0ZW1wb3JhcmllcworQyAgICVlc2kgYW5kICVlYnAgYXJlIHVudXNlZAorCitkZWZmcmFtZShQQVJBTV9ESVZJU09SLDQpCisKK0FTTV9TVEFSVCgpCisKK0MgTWFrZSBhcHByb3hfdGFiIGdsb2JhbCB0byB3b3JrIGFyb3VuZCBBcHBsZSByZWxvY2F0aW9uIGJ1Zy4KK2lmZGVmKGBEQVJXSU4nLGAKKwlkZWZsaXQoYGFwcHJveF90YWInLCBNUE4oaW52ZXJ0X2xpbWJfdGFiKSkKKwlHTE9CTAlhcHByb3hfdGFiJykKKworCVRFWFQKKwlBTElHTigxNikKK1BST0xPR1VFKG1wbl9pbnZlcnRfbGltYikKK2RlZmxpdChgRlJBTUUnLCAwKQorCW1vdglQQVJBTV9ESVZJU09SLCAlZWF4CisJQyBBdm9pZCBwdXNoL3BvcCBvbiBrNy4KKwlzdWIJJDgsICVlc3AJRlJBTUVfc3VibF9lc3AoOCkKKwltb3YJJWVieCwgKCVlc3ApCisJbW92CSVlZGksIDQoJWVzcCkKKworCW1vdgklZWF4LCAlZWRpCisJc2hyCSQyMiwgJWVheAoraWZkZWYoYFBJQycsYAorCUxFQUwoCWFwcHJveF90YWIsICVlYngpCisJbW92endsCS0xMDI0KCVlYngsICVlYXgsIDIpLCAlZWF4CisnLGAKKwltb3Z6d2wJLTEwMjQrYXBwcm94X3RhYiglZWF4LCAlZWF4KSwgJWVheAlDICVlYXggPSB2MAorJykKKworCUMgdjEgPSAodjAgPDwgNCkgLSAoKHYwKnYwKmRfMjEpID4+IDMyKSAtIDEKKwltb3YJJWVheCwgJWVjeAorCWltdWwJJWVheCwgJWVheAorCW1vdgklZWRpLCAlZWJ4CisJc2hyCSQxMSwgJWVieAorCWluYwklZWJ4CisJbXVsCSVlYngKKwltb3YJJWVkaSwgJWVieAkJCQlDIFByZXBhcmUKKwlzaHIJJWVieAorCXNiYgklZWF4LCAlZWF4CisJc3ViCSVlYXgsICVlYngJCQkJQyAlZWJ4ID0gZF8zMSwgJWVheCA9IG1hc2sKKwlzaGwJJDQsICVlY3gKKwlkZWMJJWVjeAorCXN1YgklZWR4LCAlZWN4CQkJCUMgJWVjeCA9IHYxCisKKwlDIHZfMiA9ICh2MSA8PCAxNSkgKyAoKHYxICooMl40OCAtIHYxICogZDMxICsgKHYxID4+IDEpICYgbWFzaykpID4+IDMzKQorCWltdWwJJWVjeCwgJWVieAorCWFuZAklZWN4LCAlZWF4CisJc2hyCSVlYXgKKwlzdWIJJWVieCwgJWVheAorCW11bAklZWN4CisJbW92CSVlZGksICVlYXgJCQkJQyBQcmVwYXJlIGZvciBuZXh0IG11bAorCXNobAkkMTUsICVlY3gKKwlzaHIJJWVkeAorCWFkZAklZWR4LCAlZWN4CQkJCUMgJWVjeCA9IHYyCisKKwltdWwJJWVjeAorCWFkZAklZWRpLCAlZWF4CisJbW92CSVlY3gsICVlYXgKKwlhZGMJJWVkaSwgJWVkeAorCXN1YgklZWR4LCAlZWF4CQkJCUMgJWVheCA9IHYzCisKKwltb3YJKCVlc3ApLCAlZWJ4CisJbW92CTQoJWVzcCksICVlZGkKKwlhZGQJJDgsICVlc3AKKworCXJldAorCitFUElMT0dVRSgpCisKK0RFRl9PQkpFQ1QoYXBwcm94X3RhYiwyKQorCS52YWx1ZQkweDdmZTEsMHg3ZmExLDB4N2Y2MSwweDdmMjIsMHg3ZWUzLDB4N2VhNCwweDdlNjUsMHg3ZTI3CisJLnZhbHVlCTB4N2RlOSwweDdkYWIsMHg3ZDZkLDB4N2QzMCwweDdjZjMsMHg3Y2I2LDB4N2M3OSwweDdjM2QKKwkudmFsdWUJMHg3YzAwLDB4N2JjNCwweDdiODksMHg3YjRkLDB4N2IxMiwweDdhZDcsMHg3YTljLDB4N2E2MQorCS52YWx1ZQkweDdhMjcsMHg3OWVjLDB4NzliMiwweDc5NzksMHg3OTNmLDB4NzkwNiwweDc4Y2MsMHg3ODk0CisJLnZhbHVlCTB4Nzg1YiwweDc4MjIsMHg3N2VhLDB4NzdiMiwweDc3N2EsMHg3NzQyLDB4NzcwYiwweDc2ZDMKKwkudmFsdWUJMHg3NjljLDB4NzY2NSwweDc2MmYsMHg3NWY4LDB4NzVjMiwweDc1OGMsMHg3NTU2LDB4NzUyMAorCS52YWx1ZQkweDc0ZWEsMHg3NGI1LDB4NzQ4MCwweDc0NGIsMHg3NDE2LDB4NzNlMiwweDczYWQsMHg3Mzc5CisJLnZhbHVlCTB4NzM0NSwweDczMTEsMHg3MmRkLDB4NzJhYSwweDcyNzcsMHg3MjQzLDB4NzIxMCwweDcxZGUKKwkudmFsdWUJMHg3MWFiLDB4NzE3OSwweDcxNDYsMHg3MTE0LDB4NzBlMiwweDcwYjEsMHg3MDdmLDB4NzA0ZQorCS52YWx1ZQkweDcwMWMsMHg2ZmViLDB4NmZiYSwweDZmOGEsMHg2ZjU5LDB4NmYyOSwweDZlZjksMHg2ZWM4CisJLnZhbHVlCTB4NmU5OSwweDZlNjksMHg2ZTM5LDB4NmUwYSwweDZkZGIsMHg2ZGFiLDB4NmQ3ZCwweDZkNGUKKwkudmFsdWUJMHg2ZDFmLDB4NmNmMSwweDZjYzIsMHg2Yzk0LDB4NmM2NiwweDZjMzgsMHg2YzBhLDB4NmJkZAorCS52YWx1ZQkweDZiYjAsMHg2YjgyLDB4NmI1NSwweDZiMjgsMHg2YWZiLDB4NmFjZiwweDZhYTIsMHg2YTc2CisJLnZhbHVlCTB4NmE0OSwweDZhMWQsMHg2OWYxLDB4NjljNiwweDY5OWEsMHg2OTZlLDB4Njk0MywweDY5MTgKKwkudmFsdWUJMHg2OGVkLDB4NjhjMiwweDY4OTcsMHg2ODZjLDB4Njg0MiwweDY4MTcsMHg2N2VkLDB4NjdjMworCS52YWx1ZQkweDY3OTksMHg2NzZmLDB4Njc0NSwweDY3MWIsMHg2NmYyLDB4NjZjOCwweDY2OWYsMHg2Njc2CisJLnZhbHVlCTB4NjY0ZCwweDY2MjQsMHg2NWZjLDB4NjVkMywweDY1YWEsMHg2NTgyLDB4NjU1YSwweDY1MzIKKwkudmFsdWUJMHg2NTBhLDB4NjRlMiwweDY0YmEsMHg2NDkzLDB4NjQ2YiwweDY0NDQsMHg2NDFjLDB4NjNmNQorCS52YWx1ZQkweDYzY2UsMHg2M2E3LDB4NjM4MSwweDYzNWEsMHg2MzMzLDB4NjMwZCwweDYyZTcsMHg2MmMxCisJLnZhbHVlCTB4NjI5YSwweDYyNzUsMHg2MjRmLDB4NjIyOSwweDYyMDMsMHg2MWRlLDB4NjFiOCwweDYxOTMKKwkudmFsdWUJMHg2MTZlLDB4NjE0OSwweDYxMjQsMHg2MGZmLDB4NjBkYSwweDYwYjYsMHg2MDkxLDB4NjA2ZAorCS52YWx1ZQkweDYwNDksMHg2MDI0LDB4NjAwMCwweDVmZGMsMHg1ZmI4LDB4NWY5NSwweDVmNzEsMHg1ZjRkCisJLnZhbHVlCTB4NWYyYSwweDVmMDcsMHg1ZWUzLDB4NWVjMCwweDVlOWQsMHg1ZTdhLDB4NWU1NywweDVlMzUKKwkudmFsdWUJMHg1ZTEyLDB4NWRlZiwweDVkY2QsMHg1ZGFiLDB4NWQ4OCwweDVkNjYsMHg1ZDQ0LDB4NWQyMgorCS52YWx1ZQkweDVkMDAsMHg1Y2RlLDB4NWNiZCwweDVjOWIsMHg1YzdhLDB4NWM1OCwweDVjMzcsMHg1YzE2CisJLnZhbHVlCTB4NWJmNSwweDViZDQsMHg1YmIzLDB4NWI5MiwweDViNzEsMHg1YjUxLDB4NWIzMCwweDViMTAKKwkudmFsdWUJMHg1YWVmLDB4NWFjZiwweDVhYWYsMHg1YThmLDB4NWE2ZiwweDVhNGYsMHg1YTJmLDB4NWEwZgorCS52YWx1ZQkweDU5ZWYsMHg1OWQwLDB4NTliMCwweDU5OTEsMHg1OTcyLDB4NTk1MiwweDU5MzMsMHg1OTE0CisJLnZhbHVlCTB4NThmNSwweDU4ZDYsMHg1OGI3LDB4NTg5OSwweDU4N2EsMHg1ODViLDB4NTgzZCwweDU4MWYKKwkudmFsdWUJMHg1ODAwLDB4NTdlMiwweDU3YzQsMHg1N2E2LDB4NTc4OCwweDU3NmEsMHg1NzRjLDB4NTcyZQorCS52YWx1ZQkweDU3MTEsMHg1NmYzLDB4NTZkNSwweDU2YjgsMHg1NjliLDB4NTY3ZCwweDU2NjAsMHg1NjQzCisJLnZhbHVlCTB4NTYyNiwweDU2MDksMHg1NWVjLDB4NTVjZiwweDU1YjIsMHg1NTk2LDB4NTU3OSwweDU1NWQKKwkudmFsdWUJMHg1NTQwLDB4NTUyNCwweDU1MDcsMHg1NGViLDB4NTRjZiwweDU0YjMsMHg1NDk3LDB4NTQ3YgorCS52YWx1ZQkweDU0NWYsMHg1NDQzLDB4NTQyOCwweDU0MGMsMHg1M2YwLDB4NTNkNSwweDUzYjksMHg1MzllCisJLnZhbHVlCTB4NTM4MywweDUzNjgsMHg1MzRjLDB4NTMzMSwweDUzMTYsMHg1MmZiLDB4NTJlMCwweDUyYzYKKwkudmFsdWUJMHg1MmFiLDB4NTI5MCwweDUyNzYsMHg1MjViLDB4NTI0MCwweDUyMjYsMHg1MjBjLDB4NTFmMQorCS52YWx1ZQkweDUxZDcsMHg1MWJkLDB4NTFhMywweDUxODksMHg1MTZmLDB4NTE1NSwweDUxM2IsMHg1MTIxCisJLnZhbHVlCTB4NTEwOCwweDUwZWUsMHg1MGQ1LDB4NTBiYiwweDUwYTIsMHg1MDg4LDB4NTA2ZiwweDUwNTYKKwkudmFsdWUJMHg1MDNjLDB4NTAyMywweDUwMGEsMHg0ZmYxLDB4NGZkOCwweDRmYmYsMHg0ZmE2LDB4NGY4ZQorCS52YWx1ZQkweDRmNzUsMHg0ZjVjLDB4NGY0NCwweDRmMmIsMHg0ZjEzLDB4NGVmYSwweDRlZTIsMHg0ZWNhCisJLnZhbHVlCTB4NGViMSwweDRlOTksMHg0ZTgxLDB4NGU2OSwweDRlNTEsMHg0ZTM5LDB4NGUyMSwweDRlMDkKKwkudmFsdWUJMHg0ZGYxLDB4NGRkYSwweDRkYzIsMHg0ZGFhLDB4NGQ5MywweDRkN2IsMHg0ZDY0LDB4NGQ0ZAorCS52YWx1ZQkweDRkMzUsMHg0ZDFlLDB4NGQwNywweDRjZjAsMHg0Y2Q4LDB4NGNjMSwweDRjYWEsMHg0YzkzCisJLnZhbHVlCTB4NGM3ZCwweDRjNjYsMHg0YzRmLDB4NGMzOCwweDRjMjEsMHg0YzBiLDB4NGJmNCwweDRiZGUKKwkudmFsdWUJMHg0YmM3LDB4NGJiMSwweDRiOWEsMHg0Yjg0LDB4NGI2ZSwweDRiNTgsMHg0YjQxLDB4NGIyYgorCS52YWx1ZQkweDRiMTUsMHg0YWZmLDB4NGFlOSwweDRhZDMsMHg0YWJkLDB4NGFhOCwweDRhOTIsMHg0YTdjCisJLnZhbHVlCTB4NGE2NiwweDRhNTEsMHg0YTNiLDB4NGEyNiwweDRhMTAsMHg0OWZiLDB4NDllNSwweDQ5ZDAKKwkudmFsdWUJMHg0OWJiLDB4NDlhNiwweDQ5OTAsMHg0OTdiLDB4NDk2NiwweDQ5NTEsMHg0OTNjLDB4NDkyNworCS52YWx1ZQkweDQ5MTIsMHg0OGZlLDB4NDhlOSwweDQ4ZDQsMHg0OGJmLDB4NDhhYiwweDQ4OTYsMHg0ODgxCisJLnZhbHVlCTB4NDg2ZCwweDQ4NTgsMHg0ODQ0LDB4NDgyZiwweDQ4MWIsMHg0ODA3LDB4NDdmMywweDQ3ZGUKKwkudmFsdWUJMHg0N2NhLDB4NDdiNiwweDQ3YTIsMHg0NzhlLDB4NDc3YSwweDQ3NjYsMHg0NzUyLDB4NDczZQorCS52YWx1ZQkweDQ3MmEsMHg0NzE3LDB4NDcwMywweDQ2ZWYsMHg0NmRiLDB4NDZjOCwweDQ2YjQsMHg0NmExCisJLnZhbHVlCTB4NDY4ZCwweDQ2N2EsMHg0NjY2LDB4NDY1MywweDQ2NDAsMHg0NjJjLDB4NDYxOSwweDQ2MDYKKwkudmFsdWUJMHg0NWYzLDB4NDVlMCwweDQ1Y2QsMHg0NWJhLDB4NDVhNywweDQ1OTQsMHg0NTgxLDB4NDU2ZQorCS52YWx1ZQkweDQ1NWIsMHg0NTQ4LDB4NDUzNiwweDQ1MjMsMHg0NTEwLDB4NDRmZSwweDQ0ZWIsMHg0NGQ4CisJLnZhbHVlCTB4NDRjNiwweDQ0YjMsMHg0NGExLDB4NDQ4ZiwweDQ0N2MsMHg0NDZhLDB4NDQ1OCwweDQ0NDUKKwkudmFsdWUJMHg0NDMzLDB4NDQyMSwweDQ0MGYsMHg0M2ZkLDB4NDNlYiwweDQzZDksMHg0M2M3LDB4NDNiNQorCS52YWx1ZQkweDQzYTMsMHg0MzkxLDB4NDM3ZiwweDQzNmQsMHg0MzVjLDB4NDM0YSwweDQzMzgsMHg0MzI3CisJLnZhbHVlCTB4NDMxNSwweDQzMDMsMHg0MmYyLDB4NDJlMCwweDQyY2YsMHg0MmJkLDB4NDJhYywweDQyOWIKKwkudmFsdWUJMHg0Mjg5LDB4NDI3OCwweDQyNjcsMHg0MjU2LDB4NDI0NCwweDQyMzMsMHg0MjIyLDB4NDIxMQorCS52YWx1ZQkweDQyMDAsMHg0MWVmLDB4NDFkZSwweDQxY2QsMHg0MWJjLDB4NDFhYiwweDQxOWEsMHg0MThhCisJLnZhbHVlCTB4NDE3OSwweDQxNjgsMHg0MTU3LDB4NDE0NywweDQxMzYsMHg0MTI1LDB4NDExNSwweDQxMDQKKwkudmFsdWUJMHg0MGY0LDB4NDBlMywweDQwZDMsMHg0MGMyLDB4NDBiMiwweDQwYTIsMHg0MDkxLDB4NDA4MQorCS52YWx1ZQkweDQwNzEsMHg0MDYxLDB4NDA1MCwweDQwNDAsMHg0MDMwLDB4NDAyMCwweDQwMTAsMHg0MDAwCitFTkRfT0JKRUNUKGFwcHJveF90YWIpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s3L21teC9jb20uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazcvbW14L2NvbS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI1OGMyMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s3L21teC9jb20uYXNtCkBAIC0wLDAgKzEsMTI1IEBACitkbmwgIEFNRCBBdGhsb24gbXBuX2NvbSAtLSBtcG4gYml0d2lzZSBvbmUncyBjb21wbGVtZW50LgorCitkbmwgIENvcHlyaWdodCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQyBLNzogMS4wIGN5Y2xlcy9saW1iCisKKworQyB2b2lkIG1wbl9jb20gKG1wX3B0ciBkc3QsIG1wX3NyY3B0ciBzcmMsIG1wX3NpemVfdCBzaXplKTsKK0MKK0MgVGhlIGxvb3AgZm9ybSBiZWxvdyBpcyBuZWNlc3NhcnkgZm9yIHRoZSBjbGFpbWVkIHNwZWVkLiAgSXQgbmVlZHMgdG8gYmUKK0MgYWxpZ25lZCB0byBhIDE2IGJ5dGUgYm91bmRhcnkgYW5kIG9ubHkgMTYgYnl0ZXMgbG9uZy4gIE1heWJlIHRoYXQncyBzbyBpdAorQyBmaXRzIGluIGEgQlRCIGVudHJ5LiAgVGhlIGFkanVzdG1lbnRzIHRvICVlYXggYW5kICVlZHggYXZvaWQgb2Zmc2V0cyBvbgorQyB0aGUgbW92cSdzIGFuZCBhY2hpZXZlIHRoZSBuZWNlc3Nhcnkgc2l6ZS4KK0MKK0MgSWYgYm90aCBzcmMgYW5kIGRzdCBhcmUgNG1vZDgsIHRoZSBsb29wIHJ1bnMgYXQgMS41IGMvbC4gIFNvIGxvbmcgYXMgb25lCitDIG9mIHRoZSB0d28gaXMgMG1vZDgsIGl0IHJ1bnMgYXQgMS4wIGMvbC4gIE9uIHRoYXQgYmFzaXMgZHN0IGlzIGNoZWNrZWQKK0MgKG9mZnNldCBieSB0aGUgc2l6ZSwgYXMgcGVyIHRoZSBsb29wIGFkZHJlc3NpbmcpIGFuZCBvbmUgaGlnaCBsaW1iCitDIHByb2Nlc3NlZCBzZXBhcmF0ZWx5IHRvIGdldCBhbGlnbm1lbnQuCitDCitDIFRoZSBwYWRkaW5nIGZvciB0aGUgbmFpbHMgY2FzZSBpcyB1bmF0dHJhY3RpdmUsIGJ1dCBzaG91bGRuJ3QgY29zdCBhbnkKK0MgY3ljbGVzLiAgRXhwbGljaXQgLmJ5dGUncyBndWFyYW50ZWUgdGhlIGRlc2lyZWQgaW5zdHJ1Y3Rpb25zLCBhdCBhIHBvaW50CitDIHdoZXJlIHdlJ3JlIHByb2JhYmx5IHN0YWxsZWQgd2FpdGluZyBmb3IgbG9hZHMgYW55d2F5LgorQworQyBFbmhhbmNlbWVudHM6CitDCitDIFRoZSBjb21iaW5hdGlvbiBsb2FkL3B4b3Ivc3RvcmUgbWlnaHQgYmUgYWJsZSB0byBiZSB1bnJvbGxlZCB0byBhcHByb2FjaAorQyAwLjUgYy9sIGlmIGRlc2lyZWQuCisKK2RlZmZyYW1lKFBBUkFNX1NJWkUsMTIpCitkZWZmcmFtZShQQVJBTV9TUkMsIDgpCitkZWZmcmFtZShQQVJBTV9EU1QsIDQpCisKKwlURVhUCisJQUxJR04oMTYpCisKK1BST0xPR1VFKG1wbl9jb20pCitkZWZsaXQoYEZSQU1FJywwKQorCisJbW92bAlQQVJBTV9EU1QsICVlZHgKKwltb3ZsCVBBUkFNX1NJWkUsICVlY3gKKwlwY21wZXFkCSVtbTcsICVtbTcKKworCWxlYWwJKCVlZHgsJWVjeCw0KSwgJWVheAorCWFuZGwJJDQsICVlYXgKK2lmZWxzZShHTVBfTkFJTF9CSVRTLDAsLAorYAlwc3JsZAkkR01QX05BSUxfQklUUywgJW1tNycpCQlDIEdNUF9OVU1CX01BU0sKKworCW1vdmwJUEFSQU1fU1JDLCAlZWF4CisJbW92ZAktNCglZWF4LCVlY3gsNCksICVtbTAJCUMgc3JjIGhpZ2ggbGltYgorCitpZmVsc2UoR01QX05BSUxfQklUUywwLCwKK2AJQyBwYWRkaW5nIGZvciBhbGlnbm1lbnQgYmVsb3cKKwkuYnl0ZQkweDhkLCAweGI2LCAweDAwLCAweDAwLCAweDAwLCAweDAwCUMgbGVhIDAoJWVzaSksJWVzaQorCS5ieXRlCTB4OGQsIDB4YmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAJQyBsZWEgMCglZWRpKSwlZWRpCisnKQorCisJanoJTChhbGlnbmVkKQorCisJcHhvcgklbW03LCAlbW0wCisJbW92ZAklbW0wLCAtNCglZWR4LCVlY3gsNCkJCUMgZHN0IGhpZ2ggbGltYgorCWRlY2wJJWVjeAorCWp6CUwoZG9uZSkKK0woYWxpZ25lZCk6CisKKwlhZGRsCSQ0LCAlZWF4CisJYWRkbAkkNCwgJWVkeAorCWRlY2wJJWVjeAorCWp6CUwob25lKQorCisJQyBvZmZzZXQgMHgzMCBmb3Igbm8gbmFpbHMsIG9yIDB4NDAgZm9yIG5haWxzCisJQUxJR04oMTYpCitMKHRvcCk6CisJQyBlYXgJc3JjCisJQyBlYngKKwlDIGVjeAljb3VudGVyCisJQyBlZHgJZHN0CisKKwlzdWJsCSQyLCAlZWN4CisJbW92cQkoJWVheCwlZWN4LDQpLCAlbW0wCisJcHhvcgklbW03LCAlbW0wCisJbW92cQklbW0wLCAoJWVkeCwlZWN4LDQpCisJamcJTCh0b3ApCisKKwlqbnoJTChkb25lKQkJCQlDIGlmIHNpemUgZXZlbgorCitMKG9uZSk6CisJbW92ZAktNCglZWF4KSwgJW1tMAkJCUMgc3JjIGxvdyBsaW1iCisJcHhvcgklbW03LCAlbW0wCisJbW92ZAklbW0wLCAtNCglZWR4KQkJCUMgZHN0IGxvdyBsaW1iCisKK0woZG9uZSk6CisJZW1tcworCisJcmV0CisKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s3L21teC9jb3B5ZC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNy9tbXgvY29weWQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZWNlNDAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNy9tbXgvY29weWQuYXNtCkBAIC0wLDAgKzEsMTQ0IEBACitkbmwgIEFNRCBLNyBtcG5fY29weWQgLS0gY29weSBsaW1iIHZlY3RvciwgZGVjcmVtZW50aW5nLgorCitkbmwgIENvcHlyaWdodCAxOTk5LCAyMDAwLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQyAgICBhbGlnbm1lbnQgZHN0L3NyYywgQT0wbW9kOCBOPTRtb2Q4CitDICAgICAgIEEvQSAgIEEvTiAgIE4vQSAgIE4vTgorQyBLNyAgICAwLjc1ICAxLjAgICAxLjAgICAwLjc1CisKKworQyB2b2lkIG1wbl9jb3B5ZCAobXBfcHRyIGRzdCwgbXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUpOworQworQyBUaGUgdmFyaW91cyBjb21tZW50cyBpbiBtcG4veDg2L2s3L2NvcHlpLmFzbSBhcHBseSBoZXJlIHRvby4KKworZGVmZnJhbWUoUEFSQU1fU0laRSwxMikKK2RlZmZyYW1lKFBBUkFNX1NSQywgOCkKK2RlZmZyYW1lKFBBUkFNX0RTVCwgNCkKK2RlZmxpdChgRlJBTUUnLDApCisKK2RubCAgcGFyYW1ldGVyIHNwYWNlIHJldXNlZAorZGVmaW5lKFNBVkVfRUJYLGBQQVJBTV9TSVpFJykKK2RlZmluZShTQVZFX0VTSSxgUEFSQU1fU1JDJykKKworZG5sICBtaW5pbXVtIDUgc2luY2UgdGhlIHVucm9sbGVkIGNvZGUgY2FuJ3QgaGFuZGxlIGxlc3MgdGhhbiA1CitkZWZsaXQoVU5ST0xMX1RIUkVTSE9MRCwgNSkKKworCVRFWFQKKwlBTElHTigzMikKK1BST0xPR1VFKG1wbl9jb3B5ZCkKKworCW1vdmwJUEFSQU1fU0laRSwgJWVjeAorCW1vdmwJJWVieCwgU0FWRV9FQlgKKworCW1vdmwJUEFSQU1fU1JDLCAlZWF4CisJbW92bAlQQVJBTV9EU1QsICVlZHgKKworCWNtcGwJJFVOUk9MTF9USFJFU0hPTEQsICVlY3gKKwlqYWUJTCh1bnJvbGwpCisKKwlvcmwJJWVjeCwgJWVjeAorCWp6CUwoc2ltcGxlX2RvbmUpCisKK0woc2ltcGxlKToKKwlDIGVheAlzcmMKKwlDIGVieAlzY3JhdGNoCisJQyBlY3gJY291bnRlcgorCUMgZWR4CWRzdAorCUMKKwlDIHRoaXMgbG9vcCBpcyAyIGN5Y2xlcy9saW1iCisKKwltb3ZsCS00KCVlYXgsJWVjeCw0KSwgJWVieAorCW1vdmwJJWVieCwgLTQoJWVkeCwlZWN4LDQpCisJZGVjbAklZWN4CisJam56CUwoc2ltcGxlKQorCitMKHNpbXBsZV9kb25lKToKKwltb3ZsCVNBVkVfRUJYLCAlZWJ4CisJcmV0CisKKworTCh1bnJvbGwpOgorCW1vdmwJJWVzaSwgU0FWRV9FU0kKKwlsZWFsCSglZWF4LCVlY3gsNCksICVlYngKKwlsZWFsCSglZWR4LCVlY3gsNCksICVlc2kKKworCWFuZGwJJWVzaSwgJWVieAorCW1vdmwJU0FWRV9FU0ksICVlc2kKKwlzdWJsCSQ0LCAlZWN4CQlDIHNpemUtNAorCisJdGVzdGwJJDQsICVlYnggICBDIHRlc3RsIHRvIHBhZCBjb2RlIGNsb3NlciB0byAxNiBieXRlcyBmb3IgTCh0b3ApCisJanoJTChhbGlnbmVkKQorCisJQyBib3RoIHNyYyBhbmQgZHN0IHVuYWxpZ25lZCwgcHJvY2VzcyBvbmUgbGltYiB0byBhbGlnbiB0aGVtCisJbW92bAkxMiglZWF4LCVlY3gsNCksICVlYngKKwltb3ZsCSVlYngsIDEyKCVlZHgsJWVjeCw0KQorCWRlY2wJJWVjeAorTChhbGlnbmVkKToKKworCisJQUxJR04oMTYpCitMKHRvcCk6CisJQyBlYXgJc3JjCisJQyBlYngKKwlDIGVjeAljb3VudGVyLCBsaW1icworCUMgZWR4CWRzdAorCisJbW92cQk4KCVlYXgsJWVjeCw0KSwgJW1tMAorCW1vdnEJKCVlYXgsJWVjeCw0KSwgJW1tMQorCXN1YmwJJDQsICVlY3gKKwltb3ZxCSVtbTAsIDE2KzgoJWVkeCwlZWN4LDQpCisJbW92cQklbW0xLCAxNiglZWR4LCVlY3gsNCkKKwlqbnMJTCh0b3ApCisKKworCUMgbm93ICVlY3ggaXMgLTQgdG8gLTEgcmVwcmVzZW50aW5nIHJlc3BlY3RpdmVseSAwIHRvIDMgbGltYnMgcmVtYWluaW5nCisKKwl0ZXN0YgkkMiwgJWNsCisJanoJTChmaW5pc2hfbm90X3R3bykKKworCW1vdnEJOCglZWF4LCVlY3gsNCksICVtbTAKKwltb3ZxCSVtbTAsIDgoJWVkeCwlZWN4LDQpCitMKGZpbmlzaF9ub3RfdHdvKToKKworCXRlc3RiCSQxLCAlY2wKKwlqeglMKGRvbmUpCisKKwltb3ZsCSglZWF4KSwgJWVieAorCW1vdmwJJWVieCwgKCVlZHgpCisKK0woZG9uZSk6CisJbW92bAlTQVZFX0VCWCwgJWVieAorCWVtbXMKKwlyZXQKKworCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNy9tbXgvY29weWkuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazcvbW14L2NvcHlpLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTI4ZjkyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazcvbW14L2NvcHlpLmFzbQpAQCAtMCwwICsxLDE1NyBAQAorZG5sICBBTUQgSzcgbXBuX2NvcHlpIC0tIGNvcHkgbGltYiB2ZWN0b3IsIGluY3JlbWVudGluZy4KKworZG5sICBDb3B5cmlnaHQgMTk5OSwgMjAwMCwgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MgICAgYWxpZ25tZW50IGRzdC9zcmMsIEE9MG1vZDggTj00bW9kOAorQyAgICAgICBBL0EgICBBL04gICBOL0EgICBOL04KK0MgSzcgICAgMC43NSAgMS4wICAgMS4wICAgMC43NQorCisKK0Mgdm9pZCBtcG5fY29weWkgKG1wX3B0ciBkc3QsIG1wX3NyY3B0ciBzcmMsIG1wX3NpemVfdCBzaXplKTsKK0MKK0MgQ29weSBzcmMsc2l6ZSB0byBkc3Qsc2l6ZS4KK0MKK0MgVGhpcyBjb2RlIGF0IDAuNzUgb3IgMS4wIGMvbCBpcyBhbHdheXMgZmFzdGVyIHRoYW4gYSBwbGFpbiByZXAgbW92c2wgYXQKK0MgMS4zMyBjL2wuCitDCitDIFRoZSBLNyBjYW4gZG8gYSA2NC1iaXQgbG9hZCBhbmQgNjQtYml0IHN0b3JlIGluIG9uZSBjeWNsZSAob3B0aW1pemF0aW9uCitDIGd1aWxlIDIyMDA3IGFwcGVuZGl4IEIpLCBzbyAwLjUgYy9sIHNob3VsZCBiZSBwb3NzaWJsZSwgaG93ZXZlciBub3RoaW5nCitDIHVuZGVyIDAuNyBjL2wgaXMga25vd24uICBBcHBhcmVudGx5IG9ubHkgdHdvIDMyLWJpdCBzdG9yZXMgY2FuIGJlIGRvbmUgaW4KK0Mgb25lIGN5Y2xlLCBzbyBwZXJoYXBzIHNvbWUgc2NoZWR1bGluZyBpcyBuZWVkZWQgdG8gZW5zdXJlIGl0J3MgYQorQyBsb2FkK3N0b3JlIGluIGVhY2ggY3ljbGUsIG5vdCBzdG9yZStzdG9yZS4KK0MKK0MgSWYgYm90aCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSB1bmFsaWduZWQgdGhlbiBvbmUgbGltYiBpcyBwcm9jZXNzZWQgYXQKK0MgdGhlIHN0YXJ0IHRvIG1ha2UgdGhlbSBhbGlnbmVkIGFuZCBzbyBnZXQgMC43NSBjL2wsIHdoZXJlYXMgaWYgdGhleSdkIGJlZW4KK0MgdXNlZCB1bmFsaWduZWQgaXQgd291bGQgYmUgMS41IGMvbC4KKworZGVmZnJhbWUoUEFSQU1fU0laRSwxMikKK2RlZmZyYW1lKFBBUkFNX1NSQywgOCkKK2RlZmZyYW1lKFBBUkFNX0RTVCwgNCkKKworZG5sICBwYXJhbWV0ZXIgc3BhY2UgcmV1c2VkCitkZWZpbmUoU0FWRV9FQlgsYFBBUkFNX1NJWkUnKQorCitkbmwgIG1pbmltdW0gNSBzaW5jZSB0aGUgdW5yb2xsZWQgY29kZSBjYW4ndCBoYW5kbGUgbGVzcyB0aGFuIDUKK2RlZmxpdChVTlJPTExfVEhSRVNIT0xELCA1KQorCisJVEVYVAorCUFMSUdOKDMyKQorUFJPTE9HVUUobXBuX2NvcHlpKQorZGVmbGl0KGBGUkFNRScsMCkKKworCW1vdmwJUEFSQU1fU0laRSwgJWVjeAorCW1vdmwJJWVieCwgU0FWRV9FQlgKKworCW1vdmwJUEFSQU1fU1JDLCAlZWF4CisJbW92bAlQQVJBTV9EU1QsICVlZHgKKworCWNtcGwJJFVOUk9MTF9USFJFU0hPTEQsICVlY3gKKwlqYWUJTCh1bnJvbGwpCisKKwlvcmwJJWVjeCwgJWVjeAorCWp6CUwoc2ltcGxlX2RvbmUpCisKK0woc2ltcGxlKToKKwlDIGVheAlzcmMsIGluY3JlbWVudGluZworCUMgZWJ4CXNjcmF0Y2gKKwlDIGVjeAljb3VudGVyCisJQyBlZHgJZHN0LCBpbmNyZW1lbnRpbmcKKwlDCisJQyB0aGlzIGxvb3AgaXMgMiBjeWNsZXMvbGltYgorCisJbW92bAkoJWVheCksICVlYngKKwltb3ZsCSVlYngsICglZWR4KQorCWRlY2wJJWVjeAorCWxlYWwJNCglZWF4KSwgJWVheAorCWxlYWwJNCglZWR4KSwgJWVkeAorCWpueglMKHNpbXBsZSkKKworTChzaW1wbGVfZG9uZSk6CisJbW92bAlTQVZFX0VCWCwgJWVieAorCXJldAorCisKK0wodW5yb2xsKToKKwltb3ZsCSVlYXgsICVlYngKKwlsZWFsCS0xMiglZWF4LCVlY3gsNCksICVlYXgJQyBzcmMgZW5kIC0gMTIKKwlzdWJsCSQzLCAlZWN4CQlDIHNpemUtMworCisJYW5kbAklZWR4LCAlZWJ4CisJbGVhbAkoJWVkeCwlZWN4LDQpLCAlZWR4CUMgZHN0IGVuZCAtIDEyCisJbmVnbAklZWN4CisKKwl0ZXN0bAkkNCwgJWVieCAgIEMgdGVzdGwgdG8gcGFkIGNvZGUgY2xvc2VyIHRvIDE2IGJ5dGVzIGZvciBMKHRvcCkKKwlqeglMKGFsaWduZWQpCisKKwlDIGJvdGggc3JjIGFuZCBkc3QgdW5hbGlnbmVkLCBwcm9jZXNzIG9uZSBsaW1iIHRvIGFsaWduIHRoZW0KKwltb3ZsCSglZWF4LCVlY3gsNCksICVlYngKKwltb3ZsCSVlYngsICglZWR4LCVlY3gsNCkKKwlpbmNsCSVlY3gKK0woYWxpZ25lZCk6CisKKworCUFMSUdOKDE2KQorTCh0b3ApOgorCUMgZWF4CXNyYyBlbmQgLSAxMgorCUMgZWJ4CisJQyBlY3gJY291bnRlciwgbmVnYXRpdmUsIGxpbWJzCisJQyBlZHgJZHN0IGVuZCAtIDEyCisKKwltb3ZxCSglZWF4LCVlY3gsNCksICVtbTAKKwltb3ZxCTgoJWVheCwlZWN4LDQpLCAlbW0xCisJYWRkbAkkNCwgJWVjeAorCW1vdnEJJW1tMCwgLTE2KCVlZHgsJWVjeCw0KQorCW1vdnEJJW1tMSwgLTE2KzgoJWVkeCwlZWN4LDQpCisJamEJTCh0b3ApCQlDIGp1bXAgbm8gY2FycnkgYW5kIG5vdCB6ZXJvCisKKworCUMgbm93ICVlY3ggaXMgMCB0byAzIHJlcHJlc2VudGluZyByZXNwZWN0aXZlbHkgMyB0byAwIGxpbWJzIHJlbWFpbmluZworCisJdGVzdGIJJDIsICVjbAorCWpueglMKGZpbmlzaF9ub3RfdHdvKQorCisJbW92cQkoJWVheCwlZWN4LDQpLCAlbW0wCisJbW92cQklbW0wLCAoJWVkeCwlZWN4LDQpCitMKGZpbmlzaF9ub3RfdHdvKToKKworCXRlc3RiCSQxLCAlY2wKKwlqbnoJTChkb25lKQorCisJbW92bAk4KCVlYXgpLCAlZWJ4CisJbW92bAklZWJ4LCA4KCVlZHgpCisKK0woZG9uZSk6CisJbW92bAlTQVZFX0VCWCwgJWVieAorCWVtbXMKKwlyZXQKKworRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazcvbW14L2RpdnJlbV8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s3L21teC9kaXZyZW1fMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YzNDMyOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s3L21teC9kaXZyZW1fMS5hc20KQEAgLTAsMCArMSw4MzIgQEAKK2RubCAgQU1EIEs3IG1wbl9kaXZyZW1fMSwgbXBuX2RpdnJlbV8xYywgbXBuX3ByZWludl9kaXZyZW1fMSAtLSBtcG4gYnkgbGltYgorZG5sICBkaXZpc2lvbi4KKworZG5sICBDb3B5cmlnaHQgMTk5OS0yMDAyLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQyBLNzogMTcuMCBjeWNsZXMvbGltYiBpbnRlZ2VyIHBhcnQsIDE1LjAgY3ljbGVzL2xpbWIgZnJhY3Rpb24gcGFydC4KKworCitDIG1wX2xpbWJfdCBtcG5fZGl2cmVtXzEgKG1wX3B0ciBkc3QsIG1wX3NpemVfdCB4c2l6ZSwKK0MgICAgICAgICAgICAgICAgICAgICAgICAgbXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUsCitDICAgICAgICAgICAgICAgICAgICAgICAgIG1wX2xpbWJfdCBkaXZpc29yKTsKK0MgbXBfbGltYl90IG1wbl9kaXZyZW1fMWMgKG1wX3B0ciBkc3QsIG1wX3NpemVfdCB4c2l6ZSwKK0MgICAgICAgICAgICAgICAgICAgICAgICAgIG1wX3NyY3B0ciBzcmMsIG1wX3NpemVfdCBzaXplLAorQyAgICAgICAgICAgICAgICAgICAgICAgICAgbXBfbGltYl90IGRpdmlzb3IsIG1wX2xpbWJfdCBjYXJyeSk7CitDIG1wX2xpbWJfdCBtcG5fcHJlaW52X2RpdnJlbV8xIChtcF9wdHIgZHN0LCBtcF9zaXplX3QgeHNpemUsCitDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSwKK0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wX2xpbWJfdCBkaXZpc29yLCBtcF9saW1iX3QgaW52ZXJzZSwKK0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNoaWZ0KTsKK0MKK0MgQWxnb3JpdGhtOgorQworQyBUaGUgbWV0aG9kIGFuZCBub21lbmNsYXR1cmUgZm9sbG93IHBhcnQgOCBvZiAiRGl2aXNpb24gYnkgSW52YXJpYW50CitDIEludGVnZXJzIHVzaW5nIE11bHRpcGxpY2F0aW9uIiBieSBHcmFubHVuZCBhbmQgTW9udGdvbWVyeSwgcmVmZXJlbmNlIGluCitDIGdtcC50ZXhpLgorQworQyBUaGUgImFuZCJzIHNob3duIGluIHRoZSBwYXBlciBhcmUgZG9uZSBoZXJlIHdpdGggImNtb3Yicy4gICJtIiBpcyB3cml0dGVuCitDIGZvciBtJywgYW5kICJkIiBmb3IgZF9ub3JtLCB3aGljaCB3b24ndCBjYXVzZSBhbnkgY29uZnVzaW9uIHNpbmNlIGl0J3MKK0Mgb25seSB0aGUgbm9ybWFsaXplZCBkaXZpc29yIHRoYXQncyBvZiBhbnkgdXNlIGluIHRoZSBjb2RlLiAgImIiIGlzIHdyaXR0ZW4KK0MgZm9yIDJeTiwgdGhlIHNpemUgb2YgYSBsaW1iLCBOIGJlaW5nIDMyIGhlcmUuCitDCitDIFRoZSBzdGVwICJzZHdvcmQgZHIgPSBuIC0gMl5OKmQgKyAoMl5OLTEtcTEpICogZCIgaXMgaW5zdGVhZCBkb25lIGFzCitDICJuLShxMSsxKSpkIjsgdGhpcyByZWFycmFuZ2VtZW50IGdpdmVzIHRoZSBzYW1lIHR3by1saW1iIGFuc3dlci4gIElmCitDIHExPT0weEZGRkZGRkZGLCB0aGVuIHExKzEgd291bGQgb3ZlcmZsb3cuICBXZSBicmFuY2ggdG8gYSBzcGVjaWFsIGNhc2UKK0MgInExX2ZmIiBpZiB0aGlzIG9jY3Vycy4gIFNpbmNlIHRoZSB0cnVlIHF1b3RpZW50IGlzIGVpdGhlciBxMSBvciBxMSsxIHRoZW4KK0MgaWYgcTE9PTB4RkZGRkZGRkYgdGhhdCBtdXN0IGJlIHRoZSByaWdodCB2YWx1ZS4KK0MKK0MgRm9yIHRoZSBsYXN0IGFuZCBzZWNvbmQgbGFzdCBzdGVwcyBxMT09MHhGRkZGRkZGRiBpcyBpbnN0ZWFkIGhhbmRsZWQgYnkgYW4KK0Mgc2JibCB0byBnbyBiYWNrIHRvIDB4RkZGRkZGRkYgaWYgYW4gb3ZlcmZsb3cgb2NjdXJzIHdoZW4gYWRkaW5nIDEuICBUaGlzCitDIHRoZW4gZ29lcyB0aHJvdWdoIGFzIG5vcm1hbCwgYW5kIGZpbmRpbmcgbm8gYWRkYmFjayByZXF1aXJlZC4gIHNiYmwgY29zdHMKK0MgYW4gZXh0cmEgY3ljbGUgb3ZlciB3aGF0IHRoZSBtYWluIGxvb3AgY29kZSBkb2VzLCBidXQgaXQga2VlcHMgY29kZSBzaXplCitDIGFuZCBjb21wbGV4aXR5IGRvd24uCitDCitDIE5vdGVzOgorQworQyBtcG5fZGl2cmVtXzEgYW5kIG1wbl9wcmVpbnZfZGl2cmVtXzEgYXZvaWQgb25lIGRpdmlzaW9uIGlmIHRoZSBzcmMgaGlnaAorQyBsaW1iIGlzIGxlc3MgdGhhbiB0aGUgZGl2aXNvci4gIG1wbl9kaXZyZW1fMWMgZG9lc24ndCBjaGVjayBmb3IgYSB6ZXJvCitDIGNhcnJ5LCBzaW5jZSBpbiBub3JtYWwgY2lyY3Vtc3RhbmNlcyB0aGF0IHdpbGwgYmUgYSB2ZXJ5IHJhcmUgZXZlbnQuCitDCitDIFRoZSB0ZXN0IGZvciBza2lwcGluZyBhIGRpdmlzaW9uIGlzIGJyYW5jaCBmcmVlIChvbmNlIHNpemU+PTEgaXMgdGVzdGVkKS4KK0MgVGhlIHN0b3JlIHRvIHRoZSBkZXN0aW5hdGlvbiBoaWdoIGxpbWIgaXMgMCB3aGVuIGEgZGl2aWRlIGlzIHNraXBwZWQsIG9yCitDIGlmIGl0J3Mgbm90IHNraXBwZWQgdGhlbiBhIGNvcHkgb2YgdGhlIHNyYyBoaWdoIGxpbWIgaXMgdXNlZC4gIFRoZSBsYXR0ZXIKK0MgaXMgaW4gY2FzZSBzcmM9PWRzdC4KK0MKK0MgVGhlcmUncyBhIHNtYWxsIGJpYXMgdG93YXJkcyBleHBlY3RpbmcgeHNpemU9PTAsIGJ5IGhhdmluZyBjb2RlIGZvcgorQyB4c2l6ZT09MCBpbiBhIHN0cmFpZ2h0IGxpbmUgYW5kIHhzaXplIT0wIHVuZGVyIGZvcndhcmQganVtcHMuCitDCitDIEFsdGVybmF0aXZlczoKK0MKK0MgSWYgdGhlIGRpdmlzb3IgaXMgbm9ybWFsaXplZCAoaGlnaCBiaXQgc2V0KSB0aGVuIGEgZGl2aXNpb24gc3RlcCBjYW4KK0MgYWx3YXlzIGJlIHNraXBwZWQsIHNpbmNlIHRoZSBoaWdoIGRlc3RpbmF0aW9uIGxpbWIgaXMgYWx3YXlzIDAgb3IgMSBpbgorQyB0aGF0IGNhc2UuICBJdCBkb2Vzbid0IHNlZW0gd29ydGggY2hlY2tpbmcgZm9yIHRoaXMgdGhvdWdoLCBzaW5jZSBpdAorQyBwcm9iYWJseSBvY2N1cnMgaW5mcmVxdWVudGx5LCBpbiBwYXJ0aWN1bGFyIG5vdGUgdGhhdCBiaWdfYmFzZSBmb3IgYQorQyBkZWNpbWFsIG1wbl9nZXRfc3RyIGlzIG5vdCBub3JtYWxpemVkIGluIGEgMzItYml0IGxpbWIuCisKKworZG5sICBNVUxfVEhSRVNIT0xEIGlzIHRoZSB2YWx1ZSBvZiB4c2l6ZStzaXplIGF0IHdoaWNoIHRoZSBtdWx0aXBseSBieQorZG5sICBpbnZlcnNlIG1ldGhvZCBpcyB1c2VkLCByYXRoZXIgdGhhbiBwbGFpbiAiZGl2bCJzLiAgTWluaW11bSB2YWx1ZSAxLgorZG5sCitkbmwgIFRoZSBpbnZlcnNlIHRha2VzIGFib3V0IDUwIGN5Y2xlcyB0byBjYWxjdWxhdGUsIGJ1dCBhZnRlciB0aGF0IHRoZQorZG5sICBtdWx0aXBseSBpcyAxNyBjL2wgdmVyc3VzIGRpdmlzaW9uIGF0IDQyIGMvbC4KK2RubAorZG5sICBBdCAzIGxpbWJzIHRoZSBtdWwgaXMgYSB0b3VjaCBmYXN0ZXIgdGhhbiBkaXYgb24gdGhlIGludGVnZXIgcGFydCwgYW5kCitkbmwgIGV2ZW4gbW9yZSBzbyBvbiB0aGUgZnJhY3Rpb25hbCBwYXJ0LgorCitkZWZsaXQoTVVMX1RIUkVTSE9MRCwgMykKKworCitkZWZmcmFtZShQQVJBTV9QUkVJTlZfU0hJRlQsICAgMjgpICBkbmwgbXBuX3ByZWludl9kaXZyZW1fMQorZGVmZnJhbWUoUEFSQU1fUFJFSU5WX0lOVkVSU0UsIDI0KSAgZG5sIG1wbl9wcmVpbnZfZGl2cmVtXzEKK2RlZmZyYW1lKFBBUkFNX0NBUlJZLCAgMjQpICAgICAgICAgIGRubCBtcG5fZGl2cmVtXzFjCitkZWZmcmFtZShQQVJBTV9ESVZJU09SLDIwKQorZGVmZnJhbWUoUEFSQU1fU0laRSwgICAxNikKK2RlZmZyYW1lKFBBUkFNX1NSQywgICAgMTIpCitkZWZmcmFtZShQQVJBTV9YU0laRSwgIDgpCitkZWZmcmFtZShQQVJBTV9EU1QsICAgIDQpCisKK2RlZmZyYW1lKFNBVkVfRUJYLCAgICAtNCkKK2RlZmZyYW1lKFNBVkVfRVNJLCAgICAtOCkKK2RlZmZyYW1lKFNBVkVfRURJLCAgICAtMTIpCitkZWZmcmFtZShTQVZFX0VCUCwgICAgLTE2KQorCitkZWZmcmFtZShWQVJfTk9STSwgICAgLTIwKQorZGVmZnJhbWUoVkFSX0lOVkVSU0UsIC0yNCkKK2RlZmZyYW1lKFZBUl9TUkMsICAgICAtMjgpCitkZWZmcmFtZShWQVJfRFNULCAgICAgLTMyKQorZGVmZnJhbWUoVkFSX0RTVF9TVE9QLC0zNikKKworZGVmbGl0KFNUQUNLX1NQQUNFLCAzNikKKworCVRFWFQKKwlBTElHTigzMikKKworUFJPTE9HVUUobXBuX3ByZWludl9kaXZyZW1fMSkKK2RlZmxpdChgRlJBTUUnLDApCisJbW92bAlQQVJBTV9YU0laRSwgJWVjeAorCW1vdmwJUEFSQU1fRFNULCAlZWR4CisJc3VibAkkU1RBQ0tfU1BBQ0UsICVlc3AJRlJBTUVfc3VibF9lc3AoU1RBQ0tfU1BBQ0UpCisKKwltb3ZsCSVlc2ksIFNBVkVfRVNJCisJbW92bAlQQVJBTV9TUkMsICVlc2kKKworCW1vdmwJJWVieCwgU0FWRV9FQlgKKwltb3ZsCVBBUkFNX1NJWkUsICVlYngKKworCWxlYWwJOCglZWR4LCVlY3gsNCksICVlZHgJQyAmZHN0W3hzaXplKzJdCisJbW92bAklZWJwLCBTQVZFX0VCUAorCW1vdmwJUEFSQU1fRElWSVNPUiwgJWVicAorCisJbW92bAklZWR4LCBWQVJfRFNUX1NUT1AJQyAmZHN0W3hzaXplKzJdCisJbW92bAklZWRpLCBTQVZFX0VESQorCXhvcmwJJWVkaSwgJWVkaQkJQyBjYXJyeQorCisJbW92bAktNCglZXNpLCVlYngsNCksICVlYXgJQyBzcmMgaGlnaCBsaW1iCisJeG9yCSVlY3gsICVlY3gKKworCUMKKworCUMKKworCWNtcGwJJWVicCwgJWVheAkJQyBoaWdoIGNtcCBkaXZpc29yCisKKwljbW92YygJJWVheCwgJWVkaSkJCUMgaGlnaCBpcyBjYXJyeSBpZiBoaWdoPGRpdmlzb3IKKwljbW92bmMoCSVlYXgsICVlY3gpCQlDIDAgaWYgc2tpcCBkaXYsIHNyYyBoaWdoIGlmIG5vdAorCQkJCQlDICh0aGUgbGF0dGVyIGluIGNhc2Ugc3JjPT1kc3QpCisKKwltb3ZsCSVlY3gsIC0xMiglZWR4LCVlYngsNCkJQyBkc3QgaGlnaCBsaW1iCisJc2JibAkkMCwgJWVieAkJQyBza2lwIG9uZSBkaXZpc2lvbiBpZiBoaWdoPGRpdmlzb3IKKwltb3ZsCVBBUkFNX1BSRUlOVl9TSElGVCwgJWVjeAorCisJbGVhbAktOCglZWR4LCVlYngsNCksICVlZHgJQyAmZHN0W3hzaXplK3NpemVdCisJbW92bAkkMzIsICVlYXgKKworCW1vdmwJJWVkeCwgVkFSX0RTVAkJQyAmZHN0W3hzaXplK3NpemVdCisKKwlzaGxsCSVjbCwgJWVicAkJQyBkIG5vcm1hbGl6ZWQKKwlzdWJsCSVlY3gsICVlYXgKKwltb3ZsCSVlY3gsIFZBUl9OT1JNCisKKwltb3ZkCSVlYXgsICVtbTcJCUMgcnNoaWZ0CisJbW92bAlQQVJBTV9QUkVJTlZfSU5WRVJTRSwgJWVheAorCWptcAlMKHN0YXJ0X3ByZWludikKKworRVBJTE9HVUUoKQorCisKKwlBTElHTigxNikKKworUFJPTE9HVUUobXBuX2RpdnJlbV8xYykKK2RlZmxpdChgRlJBTUUnLDApCisJbW92bAlQQVJBTV9DQVJSWSwgJWVkeAorCW1vdmwJUEFSQU1fU0laRSwgJWVjeAorCXN1YmwJJFNUQUNLX1NQQUNFLCAlZXNwCitkZWZsaXQoYEZSQU1FJyxTVEFDS19TUEFDRSkKKworCW1vdmwJJWVieCwgU0FWRV9FQlgKKwltb3ZsCVBBUkFNX1hTSVpFLCAlZWJ4CisKKwltb3ZsCSVlZGksIFNBVkVfRURJCisJbW92bAlQQVJBTV9EU1QsICVlZGkKKworCW1vdmwJJWVicCwgU0FWRV9FQlAKKwltb3ZsCVBBUkFNX0RJVklTT1IsICVlYnAKKworCW1vdmwJJWVzaSwgU0FWRV9FU0kKKwltb3ZsCVBBUkFNX1NSQywgJWVzaQorCisJbGVhbAktNCglZWRpLCVlYngsNCksICVlZGkJQyAmZHN0W3hzaXplLTFdCisJam1wCUwoc3RhcnRfMWMpCisKK0VQSUxPR1VFKCkKKworCisJQyBvZmZzZXQgMHhhMSwgY2xvc2UgZW5vdWdoIHRvIGFsaWduZWQKK1BST0xPR1VFKG1wbl9kaXZyZW1fMSkKK2RlZmxpdChgRlJBTUUnLDApCisKKwltb3ZsCVBBUkFNX1NJWkUsICVlY3gKKwltb3ZsCSQwLCAlZWR4CQlDIGluaXRpYWwgY2FycnkgKGlmIGNhbid0IHNraXAgYSBkaXYpCisJc3VibAkkU1RBQ0tfU1BBQ0UsICVlc3AKK2RlZmxpdChgRlJBTUUnLFNUQUNLX1NQQUNFKQorCisJbW92bAklZXNpLCBTQVZFX0VTSQorCW1vdmwJUEFSQU1fU1JDLCAlZXNpCisKKwltb3ZsCSVlYngsIFNBVkVfRUJYCisJbW92bAlQQVJBTV9YU0laRSwgJWVieAorCisJbW92bAklZWJwLCBTQVZFX0VCUAorCW1vdmwJUEFSQU1fRElWSVNPUiwgJWVicAorCW9ybAklZWN4LCAlZWN4CQlDIHNpemUKKworCW1vdmwJJWVkaSwgU0FWRV9FREkKKwltb3ZsCVBBUkFNX0RTVCwgJWVkaQorCWxlYWwJLTQoJWVkaSwlZWJ4LDQpLCAlZWRpCUMgJmRzdFt4c2l6ZS0xXQorCisJanoJTChub19za2lwX2RpdikJCUMgaWYgc2l6ZT09MAorCW1vdmwJLTQoJWVzaSwlZWN4LDQpLCAlZWF4CUMgc3JjIGhpZ2ggbGltYgorCXhvcmwJJWVzaSwgJWVzaQorCisJY21wbAklZWJwLCAlZWF4CQlDIGhpZ2ggY21wIGRpdmlzb3IKKworCWNtb3ZjKAklZWF4LCAlZWR4KQkJQyBoaWdoIGlzIGNhcnJ5IGlmIGhpZ2g8ZGl2aXNvcgorCWNtb3ZuYygJJWVheCwgJWVzaSkJCUMgMCBpZiBza2lwIGRpdiwgc3JjIGhpZ2ggaWYgbm90CisKKwltb3ZsCSVlc2ksICglZWRpLCVlY3gsNCkJQyBkc3QgaGlnaCBsaW1iCisJc2JibAkkMCwgJWVjeAkJQyBzaXplLTEgaWYgaGlnaDxkaXZpc29yCisJbW92bAlQQVJBTV9TUkMsICVlc2kJCUMgcmVsb2FkCitMKG5vX3NraXBfZGl2KToKKworCitMKHN0YXJ0XzFjKToKKwlDIGVheAorCUMgZWJ4CXhzaXplCisJQyBlY3gJc2l6ZQorCUMgZWR4CWNhcnJ5CisJQyBlc2kJc3JjCisJQyBlZGkJJmRzdFt4c2l6ZS0xXQorCUMgZWJwCWRpdmlzb3IKKworCWxlYWwJKCVlYngsJWVjeCksICVlYXgJQyBzaXplK3hzaXplCisJY21wbAkkTVVMX1RIUkVTSE9MRCwgJWVheAorCWphZQlMKG11bF9ieV9pbnZlcnNlKQorCisKK0MgV2l0aCBNVUxfVEhSRVNIT0xEIHNldCB0byAzLCB0aGUgc2ltcGxlIGxvb3BzIGhlcmUgb25seSBkbyAwIHRvIDIgbGltYnMuCitDIEl0J2QgYmUgcG9zc2libGUgdG8gd3JpdGUgdGhlbSBvdXQgd2l0aG91dCB0aGUgbG9vcGluZywgYnV0IG5vIHNwZWVkdXAKK0Mgd291bGQgYmUgZXhwZWN0ZWQuCitDCitDIFVzaW5nIFBBUkFNX0RJVklTT1IgaW5zdGVhZCBvZiAlZWJwIG1lYXN1cmVzIDEgY3ljbGUvbG9vcCBmYXN0ZXIgb24gdGhlCitDIGludGVnZXIgcGFydCwgYnV0IGN1cmlvdXNseSBub3Qgb24gdGhlIGZyYWN0aW9uYWwgcGFydCwgd2hlcmUgJWVicCBpcyBhCitDIChmaXhlZCkgY291cGxlIG9mIGN5Y2xlcyBmYXN0ZXIuCisKKwlvcmwJJWVjeCwgJWVjeAorCWp6CUwoZGl2aWRlX25vX2ludGVnZXIpCisKK0woZGl2aWRlX2ludGVnZXIpOgorCUMgZWF4CXNjcmF0Y2ggKHF1b3RpZW50KQorCUMgZWJ4CXhzaXplCisJQyBlY3gJY291bnRlcgorCUMgZWR4CXNjcmF0Y2ggKHJlbWFpbmRlcikKKwlDIGVzaQlzcmMKKwlDIGVkaQkmZHN0W3hzaXplLTFdCisJQyBlYnAJZGl2aXNvcgorCisJbW92bAktNCglZXNpLCVlY3gsNCksICVlYXgKKworCWRpdmwJUEFSQU1fRElWSVNPUgorCisJbW92bAklZWF4LCAoJWVkaSwlZWN4LDQpCisJZGVjbAklZWN4CisJam56CUwoZGl2aWRlX2ludGVnZXIpCisKKworTChkaXZpZGVfbm9faW50ZWdlcik6CisJbW92bAlQQVJBTV9EU1QsICVlZGkKKwlvcmwJJWVieCwgJWVieAorCWpueglMKGRpdmlkZV9mcmFjdGlvbikKKworTChkaXZpZGVfZG9uZSk6CisJbW92bAlTQVZFX0VTSSwgJWVzaQorCW1vdmwJU0FWRV9FREksICVlZGkKKwltb3ZsCSVlZHgsICVlYXgKKworCW1vdmwJU0FWRV9FQlgsICVlYngKKwltb3ZsCVNBVkVfRUJQLCAlZWJwCisJYWRkbAkkU1RBQ0tfU1BBQ0UsICVlc3AKKworCXJldAorCisKK0woZGl2aWRlX2ZyYWN0aW9uKToKKwlDIGVheAlzY3JhdGNoIChxdW90aWVudCkKKwlDIGVieAljb3VudGVyCisJQyBlY3gKKwlDIGVkeAlzY3JhdGNoIChyZW1haW5kZXIpCisJQyBlc2kKKwlDIGVkaQlkc3QKKwlDIGVicAlkaXZpc29yCisKKwltb3ZsCSQwLCAlZWF4CisKKwlkaXZsCSVlYnAKKworCW1vdmwJJWVheCwgLTQoJWVkaSwlZWJ4LDQpCisJZGVjbAklZWJ4CisJam56CUwoZGl2aWRlX2ZyYWN0aW9uKQorCisJam1wCUwoZGl2aWRlX2RvbmUpCisKKworCitDIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0wobXVsX2J5X2ludmVyc2UpOgorCUMgZWF4CisJQyBlYngJeHNpemUKKwlDIGVjeAlzaXplCisJQyBlZHgJY2FycnkKKwlDIGVzaQlzcmMKKwlDIGVkaQkmZHN0W3hzaXplLTFdCisJQyBlYnAJZGl2aXNvcgorCisJYnNybAklZWJwLCAlZWF4CQlDIDMxLWwKKworCWxlYWwJMTIoJWVkaSksICVlYngJCUMgJmRzdFt4c2l6ZSsyXSwgbG9vcCBkc3Qgc3RvcAorCWxlYWwJNCglZWRpLCVlY3gsNCksICVlZGkJQyAmZHN0W3hzaXplK3NpemVdCisKKwltb3ZsCSVlZGksIFZBUl9EU1QKKwltb3ZsCSVlYngsIFZBUl9EU1RfU1RPUAorCisJbW92bAklZWN4LCAlZWJ4CQlDIHNpemUKKwltb3ZsCSQzMSwgJWVjeAorCisJbW92bAklZWR4LCAlZWRpCQlDIGNhcnJ5CisJbW92bAkkLTEsICVlZHgKKworCUMKKworCXhvcmwJJWVheCwgJWVjeAkJQyBsCisJaW5jbAklZWF4CQkJQyAzMi1sCisKKwlzaGxsCSVjbCwgJWVicAkJQyBkIG5vcm1hbGl6ZWQKKwltb3ZsCSVlY3gsIFZBUl9OT1JNCisKKwltb3ZkCSVlYXgsICVtbTcKKworCW1vdmwJJC0xLCAlZWF4CisJc3VibAklZWJwLCAlZWR4CQlDIChiLWQpLTEgZ2l2aW5nIGVkeDplYXggPSBiKihiLWQpLTEKKworCWRpdmwJJWVicAkJCUMgZmxvb3IgKGIqKGItZCktMSkgLyBkCisKK0woc3RhcnRfcHJlaW52KToKKwlDIGVheAlpbnZlcnNlCisJQyBlYngJc2l6ZQorCUMgZWN4CXNoaWZ0CisJQyBlZHgKKwlDIGVzaQlzcmMKKwlDIGVkaQljYXJyeQorCUMgZWJwCWRpdmlzb3IKKwlDCisJQyBtbTcJcnNoaWZ0CisKKwlvcmwJJWVieCwgJWVieAkJQyBzaXplCisJbW92bAklZWF4LCBWQVJfSU5WRVJTRQorCWxlYWwJLTEyKCVlc2ksJWVieCw0KSwgJWVheAlDICZzcmNbc2l6ZS0zXQorCisJanoJTChzdGFydF96ZXJvKQorCW1vdmwJJWVheCwgVkFSX1NSQworCWNtcGwJJDEsICVlYngKKworCW1vdmwJOCglZWF4KSwgJWVzaQkJQyBzcmMgaGlnaCBsaW1iCisJanoJTChzdGFydF9vbmUpCisKK0woc3RhcnRfdHdvX29yX21vcmUpOgorCW1vdmwJNCglZWF4KSwgJWVkeAkJQyBzcmMgc2Vjb25kIGhpZ2hlc3QgbGltYgorCisJc2hsZGwoCSVjbCwgJWVzaSwgJWVkaSkJQyBuMiA9IGNhcnJ5LGhpZ2ggPDwgbAorCisJc2hsZGwoCSVjbCwgJWVkeCwgJWVzaSkJQyBuMTAgPSBoaWdoLHNlY29uZCA8PCBsCisKKwljbXBsCSQyLCAlZWJ4CisJamUJTChpbnRlZ2VyX3R3b19sZWZ0KQorCWptcAlMKGludGVnZXJfdG9wKQorCisKK0woc3RhcnRfb25lKToKKwlzaGxkbCgJJWNsLCAlZXNpLCAlZWRpKQlDIG4yID0gY2FycnksaGlnaCA8PCBsCisKKwlzaGxsCSVjbCwgJWVzaQkJQyBuMTAgPSBoaWdoIDw8IGwKKwltb3ZsCSVlYXgsIFZBUl9TUkMKKwlqbXAJTChpbnRlZ2VyX29uZV9sZWZ0KQorCisKK0woc3RhcnRfemVybyk6CisJQyBDYW4gYmUgaGVyZSB3aXRoIHhzaXplPT0wIGlmIG1wbl9wcmVpbnZfZGl2cmVtXzEgaGFkIHNpemU9PTEgYW5kCisJQyBza2lwcGVkIGEgZGl2aXNpb24uCisKKwlzaGxsCSVjbCwgJWVkaQkJQyBuMiA9IGNhcnJ5IDw8IGwKKwltb3ZsCSVlZGksICVlYXgJCUMgcmV0dXJuIHZhbHVlIGZvciB6ZXJvX2RvbmUKKwljbXBsCSQwLCBQQVJBTV9YU0laRQorCisJamUJTCh6ZXJvX2RvbmUpCisJam1wCUwoZnJhY3Rpb25fc29tZSkKKworCisKK0MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0MKK0MgVGhlIG11bHRpcGx5IGJ5IGludmVyc2UgbG9vcCBpcyAxNyBjeWNsZXMsIGFuZCByZWxpZXMgb24gc29tZSBvdXQtb2Ytb3JkZXIKK0MgZXhlY3V0aW9uLiAgVGhlIGluc3RydWN0aW9uIHNjaGVkdWxpbmcgaXMgaW1wb3J0YW50LCB3aXRoIHZhcmlvdXMKK0MgYXBwYXJlbnRseSBlcXVpdmFsZW50IGZvcm1zIHJ1bm5pbmcgMSB0byA1IGN5Y2xlcyBzbG93ZXIuCitDCitDIEEgbG93ZXIgYm91bmQgZm9yIHRoZSB0aW1lIHdvdWxkIHNlZW0gdG8gYmUgMTYgY3ljbGVzLCBiYXNlZCBvbiB0aGUKK0MgZm9sbG93aW5nIHN1Y2Nlc3NpdmUgZGVwZW5kZW5jaWVzLgorQworQwkJICAgICAgY3ljbGVzCitDCQluMituMQkxCitDCQltdWwJNgorQwkJcTErMQkxCitDCQltdWwJNgorQwkJc3ViCTEKK0MJCWFkZGJhY2sJMQorQwkJICAgICAgIC0tLQorQwkJICAgICAgIDE2CitDCitDIFRoaXMgY2hhaW4gaXMgd2hhdCB0aGUgbG9vcCBoYXMgYWxyZWFkeSwgYnV0IDE2IGN5Y2xlcyBpc24ndCBhY2hpZXZlZC4KK0MgSzcgaGFzIGVub3VnaCBkZWNvZGUsIGFuZCBwcm9iYWJseSBlbm91Z2ggZXhlY3V0ZSAoZGVwZW5kaW5nIG1heWJlIG9uIHdoYXQKK0MgYSBtdWwgYWN0dWFsbHkgY29uc3VtZXMpLCBidXQgbm90aGluZyBydW5uaW5nIHVuZGVyIDE3IGhhcyBiZWVuIGZvdW5kLgorQworQyBJbiB0aGVvcnkgbjIrbjEgY291bGQgYmUgZG9uZSBpbiB0aGUgc3ViIGFuZCBhZGRiYWNrIHN0YWdlcyAoYnkKK0MgY2FsY3VsYXRpbmcgYm90aCBuMiBhbmQgbjIrbjEgdGhlcmUpLCBidXQgbGFjayBvZiByZWdpc3RlcnMgbWFrZXMgdGhpcyBhbgorQyB1bmxpa2VseSBwcm9wb3NpdGlvbi4KK0MKK0MgVGhlIGp6IGluIHRoZSBsb29wIGtlZXBzIHRoZSBxMSsxIHN0YWdlIHRvIDEgY3ljbGUuICBIYW5kbGluZyBhbiBvdmVyZmxvdworQyBmcm9tIHExKzEgd2l0aCBhbiAic2JibCAkMCwgJWVieCIgd291bGQgYWRkIGEgY3ljbGUgdG8gdGhlIGRlcGVuZGVudAorQyBjaGFpbiwgYW5kIG5vdGhpbmcgYmV0dGVyIHRoYW4gMTggY3ljbGVzIGhhcyBiZWVuIGZvdW5kIHdoZW4gdXNpbmcgaXQuCitDIFRoZSBqdW1wIGlzIHRha2VuIG9ubHkgd2hlbiBxMSBpcyAweEZGRkZGRkZGLCBhbmQgb24gcmFuZG9tIGRhdGEgdGhpcyB3aWxsCitDIGJlIGFuIGV4dHJlbWVseSByYXJlIGV2ZW50LgorQworQyBCcmFuY2ggbWlzcHJlZGljdGlvbnMgd2lsbCBoaXQgcmFuZG9tIG9jY3VycmVuY2VzIG9mIHExPT0weEZGRkZGRkZGLCBidXQKK0MgaWYgc29tZSBzcGVjaWFsIGRhdGEgaXMgY29taW5nIG91dCB3aXRoIHRoaXMgYWx3YXlzLCB0aGUgcTFfZmYgc3BlY2lhbAorQyBjYXNlIGFjdHVhbGx5IHJ1bnMgYXQgMTUgYy9sLiAgMHgyRkZGLi4uRkZGRCBkaXZpZGVkIGJ5IDMgaXMgYSBnb29kIHdheSB0bworQyBpbmR1Y2UgdGhlIHExX2ZmIGNhc2UsIGZvciBzcGVlZCBtZWFzdXJlbWVudHMgb3IgdGVzdGluZy4gIE5vdGUgdGhhdAorQyAweEZGRi4uLkZGRiBkaXZpZGVkIGJ5IDEgb3IgMiBkb2Vzbid0IGluZHVjZSBpdC4KK0MKK0MgVGhlIGluc3RydWN0aW9uIGdyb3VwaW5ncyBhbmQgZW1wdHkgY29tbWVudHMgc2hvdyB0aGUgY3ljbGVzIGZvciBhIG5haXZlCitDIGluLW9yZGVyIHZpZXcgb2YgdGhlIGNvZGUgKGNvbnZlbmllbnRseSBpZ25vcmluZyB0aGUgbG9hZCBsYXRlbmN5IG9uCitDIFZBUl9JTlZFUlNFKS4gIFRoaXMgc2hvd3Mgc29tZSBvZiB3aGVyZSB0aGUgdGltZSBpcyBnb2luZywgYnV0IGlzIG5vbnNlbnNlCitDIHRvIHRoZSBleHRlbnQgdGhhdCBvdXQtb2Ytb3JkZXIgZXhlY3V0aW9uIHJlYXJyYW5nZXMgaXQuICBJbiB0aGlzIGNhc2UKK0MgdGhlcmUncyAxOSBjeWNsZXMgc2hvd24sIGJ1dCBpdCBleGVjdXRlcyBhdCAxNy4KKworCUFMSUdOKDE2KQorTChpbnRlZ2VyX3RvcCk6CisJQyBlYXgJc2NyYXRjaAorCUMgZWJ4CXNjcmF0Y2ggKG5hZGosIHExKQorCUMgZWN4CXNjcmF0Y2ggKHNyYywgZHN0KQorCUMgZWR4CXNjcmF0Y2gKKwlDIGVzaQluMTAKKwlDIGVkaQluMgorCUMgZWJwCWRpdmlzb3IKKwlDCisJQyBtbTAJc2NyYXRjaCAoc3JjIHF3b3JkKQorCUMgbW03CXJzaGlmdCBmb3Igbm9ybWFsaXphdGlvbgorCisJY21wbAkkMHg4MDAwMDAwMCwgJWVzaSAgQyBuMSBhcyAwPWMsIDE9bmMKKwltb3ZsCSVlZGksICVlYXggICAgICAgICBDIG4yCisJbW92bAlWQVJfU1JDLCAlZWN4CisKKwlsZWFsCSglZWJwLCVlc2kpLCAlZWJ4CisJY21vdmMoCSVlc2ksICVlYngpCSAgIEMgbmFkaiA9IG4xMCArICgtbjEgJiBkKSwgaWdub3Jpbmcgb3ZlcmZsb3cKKwlzYmJsCSQtMSwgJWVheCAgICAgICAgICBDIG4yK24xCisKKwltdWxsCVZBUl9JTlZFUlNFICAgICAgICBDIG0qKG4yK24xKQorCisJbW92cQkoJWVjeCksICVtbTAgICAgICAgQyBuZXh0IGxpbWIgYW5kIHRoZSBvbmUgYmVsb3cgaXQKKwlzdWJsCSQ0LCAlZWN4CisKKwltb3ZsCSVlY3gsIFZBUl9TUkMKKworCUMKKworCWFkZGwJJWVieCwgJWVheCAgICAgICAgIEMgbSoobjIrbjEpICsgbmFkaiwgbG93IGdpdmluZyBjYXJyeSBmbGFnCisJbGVhbAkxKCVlZGkpLCAlZWJ4ICAgICAgQyBuMisxCisJbW92bAklZWJwLCAlZWF4CSAgIEMgZAorCisJQworCisJYWRjbAklZWR4LCAlZWJ4ICAgICAgICAgQyAxICsgaGlnaChuMjw8MzIgKyBtKihuMituMSkgKyBuYWRqKSA9IHExKzEKKwlqeglMKHExX2ZmKQorCW1vdmwJVkFSX0RTVCwgJWVjeAorCisJbXVsbAklZWJ4CQkgICBDIChxMSsxKSpkCisKKwlwc3JscQklbW03LCAlbW0wCisKKwlsZWFsCS00KCVlY3gpLCAlZWN4CisKKwlDCisKKwlzdWJsCSVlYXgsICVlc2kKKwltb3ZsCVZBUl9EU1RfU1RPUCwgJWVheAorCisJQworCisJc2JibAklZWR4LCAlZWRpCSAgIEMgbiAtIChxMSsxKSpkCisJbW92bAklZXNpLCAlZWRpCSAgIEMgcmVtYWluZGVyIC0+IG4yCisJbGVhbAkoJWVicCwlZXNpKSwgJWVkeAorCisJbW92ZAklbW0wLCAlZXNpCisKKwljbW92YygJJWVkeCwgJWVkaSkJICAgQyBuIC0gcTEqZCBpZiB1bmRlcmZsb3cgZnJvbSB1c2luZyBxMSsxCisJc2JibAkkMCwgJWVieAkgICBDIHEKKwljbXBsCSVlYXgsICVlY3gKKworCW1vdmwJJWVieCwgKCVlY3gpCisJbW92bAklZWN4LCBWQVJfRFNUCisJam5lCUwoaW50ZWdlcl90b3ApCisKKworTChpbnRlZ2VyX2xvb3BfZG9uZSk6CisKKworQyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQworQyBIZXJlLCBhbmQgaW4gaW50ZWdlcl9vbmVfbGVmdCBiZWxvdywgYW4gc2JibCAkMCBpcyB1c2VkIHJhdGhlciB0aGFuIGEganoKK0MgcTFfZmYgc3BlY2lhbCBjYXNlLiAgVGhpcyBtYWtlIHRoZSBjb2RlIGEgYml0IHNtYWxsZXIgYW5kIHNpbXBsZXIsIGFuZAorQyBjb3N0cyBvbmx5IDEgY3ljbGUgKGVhY2gpLgorCitMKGludGVnZXJfdHdvX2xlZnQpOgorCUMgZWF4CXNjcmF0Y2gKKwlDIGVieAlzY3JhdGNoIChuYWRqLCBxMSkKKwlDIGVjeAlzY3JhdGNoIChzcmMsIGRzdCkKKwlDIGVkeAlzY3JhdGNoCisJQyBlc2kJbjEwCisJQyBlZGkJbjIKKwlDIGVicAlkaXZpc29yCisJQworCUMgbW03CXJzaGlmdAorCisJY21wbAkkMHg4MDAwMDAwMCwgJWVzaSAgQyBuMSBhcyAwPWMsIDE9bmMKKwltb3ZsCSVlZGksICVlYXggICAgICAgICBDIG4yCisJbW92bAlQQVJBTV9TUkMsICVlY3gKKworCWxlYWwJKCVlYnAsJWVzaSksICVlYngKKwljbW92YygJJWVzaSwgJWVieCkJICAgQyBuYWRqID0gbjEwICsgKC1uMSAmIGQpLCBpZ25vcmluZyBvdmVyZmxvdworCXNiYmwJJC0xLCAlZWF4ICAgICAgICAgIEMgbjIrbjEKKworCW11bGwJVkFSX0lOVkVSU0UgICAgICAgIEMgbSoobjIrbjEpCisKKwltb3ZkCSglZWN4KSwgJW1tMAkgICBDIHNyYyBsb3cgbGltYgorCisJbW92bAlWQVJfRFNUX1NUT1AsICVlY3gKKworCUMKKworCWFkZGwJJWVieCwgJWVheCAgICAgICAgIEMgbSoobjIrbjEpICsgbmFkaiwgbG93IGdpdmluZyBjYXJyeSBmbGFnCisJbGVhbAkxKCVlZGkpLCAlZWJ4ICAgICAgQyBuMisxCisJbW92bAklZWJwLCAlZWF4CSAgIEMgZAorCisJYWRjbAklZWR4LCAlZWJ4ICAgICAgICAgQyAxICsgaGlnaChuMjw8MzIgKyBtKihuMituMSkgKyBuYWRqKSA9IHExKzEKKworCXNiYmwJJDAsICVlYngKKworCW11bGwJJWVieAkJICAgQyAocTErMSkqZAorCisJcHNsbHEJJDMyLCAlbW0wCisKKwlwc3JscQklbW03LCAlbW0wCisKKwlDCisKKwlzdWJsCSVlYXgsICVlc2kKKworCUMKKworCXNiYmwJJWVkeCwgJWVkaQkgICBDIG4gLSAocTErMSkqZAorCW1vdmwJJWVzaSwgJWVkaQkgICBDIHJlbWFpbmRlciAtPiBuMgorCWxlYWwJKCVlYnAsJWVzaSksICVlZHgKKworCW1vdmQJJW1tMCwgJWVzaQorCisJY21vdmMoCSVlZHgsICVlZGkpCSAgIEMgbiAtIHExKmQgaWYgdW5kZXJmbG93IGZyb20gdXNpbmcgcTErMQorCXNiYmwJJDAsICVlYngJICAgQyBxCisKKwltb3ZsCSVlYngsIC00KCVlY3gpCisKKworQyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTChpbnRlZ2VyX29uZV9sZWZ0KToKKwlDIGVheAlzY3JhdGNoCisJQyBlYngJc2NyYXRjaCAobmFkaiwgcTEpCisJQyBlY3gJZHN0CisJQyBlZHgJc2NyYXRjaAorCUMgZXNpCW4xMAorCUMgZWRpCW4yCisJQyBlYnAJZGl2aXNvcgorCUMKKwlDIG1tNwlyc2hpZnQKKworCW1vdmwJVkFSX0RTVF9TVE9QLCAlZWN4CisJY21wbAkkMHg4MDAwMDAwMCwgJWVzaSAgQyBuMSBhcyAwPWMsIDE9bmMKKwltb3ZsCSVlZGksICVlYXggICAgICAgICBDIG4yCisKKwlsZWFsCSglZWJwLCVlc2kpLCAlZWJ4CisJY21vdmMoCSVlc2ksICVlYngpCSAgIEMgbmFkaiA9IG4xMCArICgtbjEgJiBkKSwgaWdub3Jpbmcgb3ZlcmZsb3cKKwlzYmJsCSQtMSwgJWVheCAgICAgICAgICBDIG4yK24xCisKKwltdWxsCVZBUl9JTlZFUlNFICAgICAgICBDIG0qKG4yK24xKQorCisJQworCisJQworCisJQworCisJYWRkbAklZWJ4LCAlZWF4ICAgICAgICAgQyBtKihuMituMSkgKyBuYWRqLCBsb3cgZ2l2aW5nIGNhcnJ5IGZsYWcKKwlsZWFsCTEoJWVkaSksICVlYnggICAgICBDIG4yKzEKKwltb3ZsCSVlYnAsICVlYXgJICAgQyBkCisKKwlDCisKKwlhZGNsCSVlZHgsICVlYnggICAgICAgICBDIDEgKyBoaWdoKG4yPDwzMiArIG0qKG4yK24xKSArIG5hZGopID0gcTErMQorCisJc2JibAkkMCwgJWVieCAgICAgICAgICAgQyBxMSBpZiBxMSsxIG92ZXJmbG93ZWQKKworCW11bGwJJWVieAorCisJQworCisJQworCisJQworCisJc3VibAklZWF4LCAlZXNpCisKKwlDCisKKwlzYmJsCSVlZHgsICVlZGkJICAgQyBuIC0gKHExKzEpKmQKKwltb3ZsCSVlc2ksICVlZGkJICAgQyByZW1haW5kZXIgLT4gbjIKKwlsZWFsCSglZWJwLCVlc2kpLCAlZWR4CisKKwljbW92YygJJWVkeCwgJWVkaSkJICAgQyBuIC0gcTEqZCBpZiB1bmRlcmZsb3cgZnJvbSB1c2luZyBxMSsxCisJc2JibAkkMCwgJWVieAkgICBDIHEKKworCW1vdmwJJWVieCwgLTgoJWVjeCkKKwlzdWJsCSQ4LCAlZWN4CisKKworCitMKGludGVnZXJfbm9uZSk6CisJY21wbAkkMCwgUEFSQU1fWFNJWkUKKwlqbmUJTChmcmFjdGlvbl9zb21lKQorCisJbW92bAklZWRpLCAlZWF4CitMKGZyYWN0aW9uX2RvbmUpOgorCW1vdmwJVkFSX05PUk0sICVlY3gKK0woemVyb19kb25lKToKKwltb3ZsCVNBVkVfRUJQLCAlZWJwCisKKwltb3ZsCVNBVkVfRURJLCAlZWRpCisJbW92bAlTQVZFX0VTSSwgJWVzaQorCisJbW92bAlTQVZFX0VCWCwgJWVieAorCWFkZGwJJFNUQUNLX1NQQUNFLCAlZXNwCisKKwlzaHJsCSVjbCwgJWVheAorCWVtbXMKKworCXJldAorCisKK0MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0MKK0MgU3BlY2lhbCBjYXNlIGZvciBxMT0weEZGRkZGRkZGLCBnaXZpbmcgcT0weEZGRkZGRkZGIG1lYW5pbmcgdGhlIGxvdyBkd29yZAorQyBvZiBxKmQgaXMgc2ltcGx5IC1kIGFuZCB0aGUgcmVtYWluZGVyIG4tcSpkID0gbjEwK2QKKworTChxMV9mZik6CisJQyBlYXgJKGRpdmlzb3IpCisJQyBlYngJKHExKzEgPT0gMCkKKwlDIGVjeAorCUMgZWR4CisJQyBlc2kJbjEwCisJQyBlZGkJbjIKKwlDIGVicAlkaXZpc29yCisKKwltb3ZsCVZBUl9EU1QsICVlY3gKKwltb3ZsCVZBUl9EU1RfU1RPUCwgJWVkeAorCXN1YmwJJDQsICVlY3gKKworCXBzcmxxCSVtbTcsICVtbTAKKwlsZWFsCSglZWJwLCVlc2kpLCAlZWRpCUMgbi1xKmQgcmVtYWluZGVyIC0+IG5leHQgbjIKKwltb3ZsCSVlY3gsIFZBUl9EU1QKKworCW1vdmQJJW1tMCwgJWVzaQkJQyBuZXh0IG4xMAorCisJbW92bAkkLTEsICglZWN4KQorCWNtcGwJJWVjeCwgJWVkeAorCWpuZQlMKGludGVnZXJfdG9wKQorCisJam1wCUwoaW50ZWdlcl9sb29wX2RvbmUpCisKKworCitDIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDCitDIEJlaW5nIHRoZSBmcmFjdGlvbmFsIHBhcnQsIHRoZSAic291cmNlIiBsaW1icyBhcmUgYWxsIHplcm8sIG1lYW5pbmcKK0MgbjEwPTAsIG4xPTAsIGFuZCBoZW5jZSBuYWRqPTAsIGxlYWRpbmcgdG8gbWFueSBpbnN0cnVjdGlvbnMgZWxpbWluYXRlZC4KK0MKK0MgVGhlIGxvb3AgcnVucyBhdCAxNSBjeWNsZXMuICBUaGUgZGVwZW5kZW50IGNoYWluIGlzIHRoZSBzYW1lIGFzIHRoZQorQyBnZW5lcmFsIGNhc2UgYWJvdmUsIGJ1dCB3aXRob3V0IHRoZSBuMituMSBzdGFnZSAoZHVlIHRvIG4xPT0wKSwgc28gMTUKK0Mgd291bGQgc2VlbSB0byBiZSB0aGUgbG93ZXIgYm91bmQuCitDCitDIEEgbm90IGVudGlyZWx5IG9idmlvdXMgc2ltcGxpZmljYXRpb24gaXMgdGhhdCBxMSsxIG5ldmVyIG92ZXJmbG93cyBhIGxpbWIsCitDIGFuZCBzbyB0aGVyZSdzIG5vIG5lZWQgZm9yIHRoZSBzYmJsICQwIG9yIGp6IHExX2ZmIGZyb20gdGhlIGdlbmVyYWwgY2FzZS4KK0MgcTEgaXMgdGhlIGhpZ2ggd29yZCBvZiBtKm4yK2IqbjIgYW5kIHRoZSBmb2xsb3dpbmcgc2hvd3MgcTE8PWItMiBhbHdheXMuCitDIHJuZCgpIG1lYW5zIHJvdW5kaW5nIGRvd24gdG8gYSBtdWx0aXBsZSBvZiBkLgorQworQwltKm4yICsgYipuMiA8PSBtKihkLTEpICsgYiooZC0xKQorQwkJICAgICA9IG0qZCArIGIqZCAtIG0gLSBiCitDCQkgICAgID0gZmxvb3IoKGIoYi1kKS0xKS9kKSpkICsgYipkIC0gbSAtIGIKK0MJCSAgICAgPSBybmQoYihiLWQpLTEpICsgYipkIC0gbSAtIGIKK0MJCSAgICAgPSBybmQoYihiLWQpLTEgKyBiKmQpIC0gbSAtIGIKK0MJCSAgICAgPSBybmQoYipiLTEpIC0gbSAtIGIKK0MJCSAgICAgPD0gKGItMikqYgorQworQyBVbmNoYW5nZWQgZnJvbSB0aGUgZ2VuZXJhbCBjYXNlIGlzIHRoYXQgdGhlIGZpbmFsIHF1b3RpZW50IGxpbWIgcSBjYW4gYmUKK0MgZWl0aGVyIHExIG9yIHExKzEsIGFuZCB0aGUgcTErMSBjYXNlIG9jY3VycyBvZnRlbi4gIFRoaXMgY2FuIGJlIHNlZW4gZnJvbQorQyBlcXVhdGlvbiA4LjQgb2YgdGhlIHBhcGVyIHdoaWNoIHNpbXBsaWZpZXMgYXMgZm9sbG93cyB3aGVuIG4xPT0wIGFuZAorQyBuMD09MC4KK0MKK0MJbi1xMSpkID0gKG4yKmsrcTAqZCkvYiA8PSBkICsgKGQqZC0yZCkvYgorQworQyBBcyBiZWZvcmUsIHRoZSBpbnN0cnVjdGlvbiBncm91cGluZ3MgYW5kIGVtcHR5IGNvbW1lbnRzIHNob3cgYSBuYWl2ZQorQyBpbi1vcmRlciB2aWV3IG9mIHRoZSBjb2RlLCB3aGljaCBpcyBtYWRlIGEgbm9uc2Vuc2UgYnkgb3V0IG9mIG9yZGVyCitDIGV4ZWN1dGlvbi4gIFRoZXJlJ3MgMTcgY3ljbGVzIHNob3duLCBidXQgaXQgZXhlY3V0ZXMgYXQgMTUuCitDCitDIFJvdGF0aW5nIHRoZSBzdG9yZSBxIGFuZCByZW1haW5kZXItPm4yIGluc3RydWN0aW9ucyB1cCB0byB0aGUgdG9wIG9mIHRoZQorQyBsb29wIGdldHMgdGhlIHJ1biB0aW1lIGRvd24gZnJvbSAxNiB0byAxNS4KKworCUFMSUdOKDE2KQorTChmcmFjdGlvbl9zb21lKToKKwlDIGVheAorCUMgZWJ4CisJQyBlY3gKKwlDIGVkeAorCUMgZXNpCisJQyBlZGkJY2FycnkKKwlDIGVicAlkaXZpc29yCisKKwltb3ZsCVBBUkFNX0RTVCwgJWVzaQorCW1vdmwJVkFSX0RTVF9TVE9QLCAlZWN4CUMgJmRzdFt4c2l6ZSsyXQorCW1vdmwJJWVkaSwgJWVheAorCisJc3VibAkkOCwgJWVjeAkJQyAmZHN0W3hzaXplXQorCWptcAlMKGZyYWN0aW9uX2VudHJ5KQorCisKKwlBTElHTigxNikKK0woZnJhY3Rpb25fdG9wKToKKwlDIGVheAluMiBjYXJyeSwgdGhlbiBzY3JhdGNoCisJQyBlYngJc2NyYXRjaCAobmFkaiwgcTEpCisJQyBlY3gJZHN0LCBkZWNyZW1lbnRpbmcKKwlDIGVkeAlzY3JhdGNoCisJQyBlc2kJZHN0IHN0b3AgcG9pbnQKKwlDIGVkaQkod2lsbCBiZSBuMikKKwlDIGVicAlkaXZpc29yCisKKwltb3ZsCSVlYngsICglZWN4KQlDIHByZXZpb3VzIHEKKwltb3ZsCSVlYXgsICVlZGkJQyByZW1haW5kZXItPm4yCisKK0woZnJhY3Rpb25fZW50cnkpOgorCW11bGwJVkFSX0lOVkVSU0UJQyBtKm4yCisKKwltb3ZsCSVlYnAsICVlYXgJQyBkCisJc3VibAkkNCwgJWVjeAlDIGRzdAorCWxlYWwJMSglZWRpKSwgJWVieAorCisJQworCisJQworCisJQworCisJQworCisJYWRkbAklZWR4LCAlZWJ4CUMgMSArIGhpZ2gobjI8PDMyICsgbSpuMikgPSBxMSsxCisKKwltdWxsCSVlYngJCUMgKHExKzEpKmQKKworCUMKKworCUMKKworCUMKKworCW5lZ2wJJWVheAkJQyBsb3cgb2YgbiAtIChxMSsxKSpkCisKKwlDCisKKwlzYmJsCSVlZHgsICVlZGkJQyBoaWdoIG9mIG4gLSAocTErMSkqZCwgY2FyaW5nIG9ubHkgYWJvdXQgY2FycnkKKwlsZWFsCSglZWJwLCVlYXgpLCAlZWR4CisKKwljbW92YygJJWVkeCwgJWVheCkJQyBuIC0gcTEqZCBpZiB1bmRlcmZsb3cgZnJvbSB1c2luZyBxMSsxCisJc2JibAkkMCwgJWVieAlDIHEKKwljbXBsCSVlc2ksICVlY3gKKworCWpuZQlMKGZyYWN0aW9uX3RvcCkKKworCisJbW92bAklZWJ4LCAoJWVjeCkKKwlqbXAJTChmcmFjdGlvbl9kb25lKQorCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNy9tbXgvbHNoaWZ0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s3L21teC9sc2hpZnQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMzgzY2YKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNy9tbXgvbHNoaWZ0LmFzbQpAQCAtMCwwICsxLDQ4MSBAQAorZG5sICBBTUQgSzcgbXBuX2xzaGlmdCAtLSBtcG4gbGVmdCBzaGlmdC4KKworZG5sICBDb3B5cmlnaHQgMTk5OS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQyBLNzogMS4yMSBjeWNsZXMvbGltYiAoYXQgMTYgbGltYnMvbG9vcCkuCisKKworCitkbmwgIEs3OiBVTlJPTExfQ09VTlQgY3ljbGVzL2xpbWIKK2RubCAgICAgICAgICAgNCAgICAgICAgICAgMS41MQorZG5sICAgICAgICAgICA4ICAgICAgICAgICAxLjI2CitkbmwgICAgICAgICAgMTYgICAgICAgICAgIDEuMjEKK2RubCAgICAgICAgICAzMiAgICAgICAgICAgMS4yCitkbmwgIE1heGltdW0gcG9zc2libGUgd2l0aCB0aGUgY3VycmVudCBjb2RlIGlzIDY0LgorCitkZWZsaXQoVU5ST0xMX0NPVU5ULCAxNikKKworCitDIG1wX2xpbWJfdCBtcG5fbHNoaWZ0IChtcF9wdHIgZHN0LCBtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSwKK0MgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNoaWZ0KTsKK0MKK0MgU2hpZnQgc3JjLHNpemUgbGVmdCBieSBzaGlmdCBtYW55IGJpdHMgYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gZHN0LHNpemUuCitDIFplcm9zIGFyZSBzaGlmdGVkIGluIGF0IHRoZSByaWdodC4gIFRoZSBiaXRzIHNoaWZ0ZWQgb3V0IGF0IHRoZSBsZWZ0IGFyZQorQyB0aGUgcmV0dXJuIHZhbHVlLgorQworQyBUaGUgY29tbWVudHMgaW4gbXBuX3JzaGlmdCBhcHBseSBoZXJlIHRvby4KKworaWZkZWYoYFBJQycsYAorZGVmbGl0KFVOUk9MTF9USFJFU0hPTEQsIDEwKQorJyxgCitkZWZsaXQoVU5ST0xMX1RIUkVTSE9MRCwgMTApCisnKQorCitkZWZmcmFtZShQQVJBTV9TSElGVCwxNikKK2RlZmZyYW1lKFBBUkFNX1NJWkUsIDEyKQorZGVmZnJhbWUoUEFSQU1fU1JDLCAgOCkKK2RlZmZyYW1lKFBBUkFNX0RTVCwgIDQpCisKK2RlZmZyYW1lKFNBVkVfRURJLCAtNCkKK2RlZmZyYW1lKFNBVkVfRVNJLCAtOCkKK2RlZmZyYW1lKFNBVkVfRUJYLCAtMTIpCitkZWZsaXQoU0FWRV9TSVpFLCAxMikKKworCVRFWFQKKwlBTElHTigzMikKKworUFJPTE9HVUUobXBuX2xzaGlmdCkKK2RlZmxpdChgRlJBTUUnLDApCisKKwltb3ZsCVBBUkFNX1NJWkUsICVlYXgKKwltb3ZsCVBBUkFNX1NSQywgJWVkeAorCXN1YmwJJFNBVkVfU0laRSwgJWVzcAorZGVmbGl0KGBGUkFNRScsU0FWRV9TSVpFKQorCisJbW92bAlQQVJBTV9TSElGVCwgJWVjeAorCW1vdmwJJWVkaSwgU0FWRV9FREkKKworCW1vdmwJUEFSQU1fRFNULCAlZWRpCisJZGVjbAklZWF4CisJam56CUwobW9yZV90aGFuX29uZV9saW1iKQorCisJbW92bAkoJWVkeCksICVlZHgKKworCXNobGRsKAklY2wsICVlZHgsICVlYXgpCUMgZWF4IHdhcyBkZWNyZW1lbnRlZCB0byB6ZXJvCisKKwlzaGxsCSVjbCwgJWVkeAorCisJbW92bAklZWR4LCAoJWVkaSkKKwltb3ZsCVNBVkVfRURJLCAlZWRpCisJYWRkbAkkU0FWRV9TSVpFLCAlZXNwCisKKwlyZXQKKworCitDIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMKG1vcmVfdGhhbl9vbmVfbGltYik6CisJQyBlYXgJc2l6ZS0xCisJQyBlYngKKwlDIGVjeAlzaGlmdAorCUMgZWR4CXNyYworCUMgZXNpCisJQyBlZGkJZHN0CisJQyBlYnAKKworCW1vdmQJUEFSQU1fU0hJRlQsICVtbTYKKwltb3ZkCSglZWR4LCVlYXgsNCksICVtbTUJQyBzcmMgaGlnaCBsaW1iCisJY21wCSRVTlJPTExfVEhSRVNIT0xELTEsICVlYXgKKworCWphZQlMKHVucm9sbCkKKwluZWdsCSVlY3gKKwltb3ZkCSglZWR4KSwgJW1tNAkJQyBzcmMgbG93IGxpbWIKKworCWFkZGwJJDMyLCAlZWN4CisKKwltb3ZkCSVlY3gsICVtbTcKKworTChzaW1wbGVfdG9wKToKKwlDIGVheAlsb29wIGNvdW50ZXIsIGxpbWJzCisJQyBlYngKKwlDIGVjeAorCUMgZWR4CXNyYworCUMgZXNpCisJQyBlZGkJZHN0CisJQyBlYnAKKwlDCisJQyBtbTAJc2NyYXRjaAorCUMgbW00CXNyYyBsb3cgbGltYgorCUMgbW01CXNyYyBoaWdoIGxpbWIKKwlDIG1tNglzaGlmdAorCUMgbW03CTMyLXNoaWZ0CisKKwltb3ZxCS00KCVlZHgsJWVheCw0KSwgJW1tMAorCWRlY2wJJWVheAorCisJcHNybHEJJW1tNywgJW1tMAorCisJbW92ZAklbW0wLCA0KCVlZGksJWVheCw0KQorCWpueglMKHNpbXBsZV90b3ApCisKKworCXBzbGxxCSVtbTYsICVtbTUKKwlwc2xscQklbW02LCAlbW00CisKKwlwc3JscQkkMzIsICVtbTUKKwltb3ZkCSVtbTQsICglZWRpKQkJQyBkc3QgbG93IGxpbWIKKworCW1vdmQJJW1tNSwgJWVheAkJQyByZXR1cm4gdmFsdWUKKworCW1vdmwJU0FWRV9FREksICVlZGkKKwlhZGRsCSRTQVZFX1NJWkUsICVlc3AKKwllbW1zCisKKwlyZXQKKworCitDIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJQUxJR04oMTYpCitMKHVucm9sbCk6CisJQyBlYXgJc2l6ZS0xCisJQyBlYngJKHNhdmVkKQorCUMgZWN4CXNoaWZ0CisJQyBlZHgJc3JjCisJQyBlc2kKKwlDIGVkaQlkc3QKKwlDIGVicAorCUMKKwlDIG1tNQlzcmMgaGlnaCBsaW1iLCBmb3IgcmV0dXJuIHZhbHVlCisJQyBtbTYJbHNoaWZ0CisKKwltb3ZsCSVlc2ksIFNBVkVfRVNJCisJbW92bAklZWJ4LCBTQVZFX0VCWAorCWxlYWwJLTQoJWVkeCwlZWF4LDQpLCAlZWR4ICAgQyAmc3JjW3NpemUtMl0KKworCXRlc3RiCSQ0LCAlZGwKKwltb3ZxCSglZWR4KSwgJW1tMQkJQyBzcmMgaGlnaCBxd29yZAorCisJanoJTChzdGFydF9zcmNfYWxpZ25lZCkKKworCisJQyBzcmMgaXNuJ3QgYWxpZ25lZCwgcHJvY2VzcyBoaWdoIGxpbWIgKG1hcmtlZCB4eHgpIHNlcGFyYXRlbHkgdG8KKwlDIG1ha2UgaXQgc28KKwlDCisJQyAgc291cmNlICAgIC00KGVkeCwlZWF4LDQpCisJQyAgICAgICAgICAgICAgICAgIHwKKwlDICArLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0KKwlDICB8ICB4eHggICAgICAgICAgfAorCUMgICstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLQorCUMgICAgICAgIDBtb2Q4ICAgNG1vZDggICAwbW9kOAorCUMKKwlDICBkZXN0ICAgICAgLTQoZWRpLCVlYXgsNCkKKwlDICAgICAgICAgICAgICAgICAgfAorCUMgICstLS0tLS0tKy0tLS0tLS0rLS0KKwlDICB8ICB4eHggIHwgICAgICAgfAorCUMgICstLS0tLS0tKy0tLS0tLS0rLS0KKworCXBzbGxxCSVtbTYsICVtbTEKKwlzdWJsCSQ0LCAlZWR4CisJbW92bAklZWF4LCBQQVJBTV9TSVpFCUMgc2l6ZS0xCisKKwlwc3JscQkkMzIsICVtbTEKKwlkZWNsCSVlYXgJCQlDIHNpemUtMiBpcyBuZXcgc2l6ZS0xCisKKwltb3ZkCSVtbTEsIDQoJWVkaSwlZWF4LDQpCisJbW92cQkoJWVkeCksICVtbTEJCUMgbmV3IHNyYyBoaWdoIHF3b3JkCitMKHN0YXJ0X3NyY19hbGlnbmVkKToKKworCisJbGVhbAktNCglZWRpLCVlYXgsNCksICVlZGkgICBDICZkc3Rbc2l6ZS0yXQorCXBzbGxxCSVtbTYsICVtbTUKKworCXRlc3RsCSQ0LCAlZWRpCisJcHNybHEJJDMyLCAlbW01CQlDIHJldHVybiB2YWx1ZQorCisJanoJTChzdGFydF9kc3RfYWxpZ25lZCkKKworCisJQyBkc3QgaXNuJ3QgYWxpZ25lZCwgc3VidHJhY3QgNCBieXRlcyB0byBtYWtlIGl0IHNvLCBhbmQgcHJldGVuZCB0aGUKKwlDIHNoaWZ0IGlzIDMyIGJpdHMgZXh0cmEuICBIaWdoIGxpbWIgb2YgZHN0IChtYXJrZWQgeHh4KSBoYW5kbGVkCisJQyBoZXJlIHNlcGFyYXRlbHkuCisJQworCUMgIHNvdXJjZSAgICAgICAlZWR4CisJQyAgKy0tLS0tLS0rLS0tLS0tLSstLQorCUMgIHwgICAgICBtbTEgICAgICB8CisJQyAgKy0tLS0tLS0rLS0tLS0tLSstLQorCUMgICAgICAgICAgICAgICAgMG1vZDggICA0bW9kOAorCUMKKwlDICBkZXN0ICAgICAgICAgJWVkaQorCUMgICstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLQorCUMgIHwgIHh4eCAgfAorCUMgICstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLQorCUMgICAgICAgIDBtb2Q4ICAgNG1vZDggICAwbW9kOAorCisJbW92cQklbW0xLCAlbW0wCisJcHNsbHEJJW1tNiwgJW1tMQorCWFkZGwJJDMyLCAlZWN4CQlDIHNoaWZ0KzMyCisKKwlwc3JscQkkMzIsICVtbTEKKworCW1vdmQJJW1tMSwgNCglZWRpKQorCW1vdnEJJW1tMCwgJW1tMQorCXN1YmwJJDQsICVlZGkKKworCW1vdmQJJWVjeCwgJW1tNgkJQyBuZXcgbHNoaWZ0CitMKHN0YXJ0X2RzdF9hbGlnbmVkKToKKworCWRlY2wJJWVheAkJCUMgc2l6ZS0yLCB0d28gbGFzdCBsaW1icyBoYW5kbGVkIGF0IGVuZAorCW1vdnEJJW1tMSwgJW1tMgkJQyBjb3B5IG9mIHNyYyBoaWdoIHF3b3JkCisJbmVnbAklZWN4CisKKwlhbmRsCSQtMiwgJWVheAkJQyByb3VuZCBzaXplIGRvd24gdG8gZXZlbgorCWFkZGwJJDY0LCAlZWN4CisKKwltb3ZsCSVlYXgsICVlYngKKwluZWdsCSVlYXgKKworCWFuZGwJJFVOUk9MTF9NQVNLLCAlZWF4CisJZGVjbAklZWJ4CisKKwlzaGxsCSVlYXgKKworCW1vdmQJJWVjeCwgJW1tNwkJQyByc2hpZnQgPSA2NC1sc2hpZnQKKworaWZkZWYoYFBJQycsYAorCWNhbGwJTChwaWNfY2FsYykKK0woaGVyZSk6CisnLGAKKwlsZWFsCUwoZW50cnkpICglZWF4LCVlYXgsNCksICVlc2kKKycpCisJc2hybAkkVU5ST0xMX0xPRzIsICVlYngJQyBsb29wIGNvdW50ZXIKKworCWxlYWwJaWZlbHNlKFVOUk9MTF9CWVRFUywyNTYsMTI4KSAtOCglZWR4LCVlYXgsMiksICVlZHgKKwlsZWFsCWlmZWxzZShVTlJPTExfQllURVMsMjU2LDEyOCkgKCVlZGksJWVheCwyKSwgJWVkaQorCW1vdmwJUEFSQU1fU0laRSwgJWVheAlDIGZvciB1c2UgYXQgZW5kCisJam1wCSolZXNpCisKKworaWZkZWYoYFBJQycsYAorTChwaWNfY2FsYyk6CisJQyBTZWUgbXBuL3g4Ni9SRUFETUUgYWJvdXQgb2xkIGdhcyBidWdzCisJbGVhbAkoJWVheCwlZWF4LDQpLCAlZXNpCisJYWRkbAkkTChlbnRyeSktTChoZXJlKSwgJWVzaQorCWFkZGwJKCVlc3ApLCAlZXNpCisKKwlyZXRfaW50ZXJuYWwKKycpCisKKworQyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUFMSUdOKDMyKQorTCh0b3ApOgorCUMgZWF4CXNpemUgKGZvciB1c2UgYXQgZW5kKQorCUMgZWJ4CWxvb3AgY291bnRlcgorCUMgZWN4CXJzaGlmdAorCUMgZWR4CXNyYworCUMgZXNpCWNvbXB1dGVkIGp1bXAKKwlDIGVkaQlkc3QKKwlDIGVicAorCUMKKwlDIG1tMAlzY3JhdGNoCisJQyBtbTEJXCBjYXJyeSAoYWx0ZXJuYXRpbmcsIG1tMiBmaXJzdCkKKwlDIG1tMgkvCisJQyBtbTYJbHNoaWZ0CisJQyBtbTcJcnNoaWZ0CisJQworCUMgMTAgY29kZSBieXRlcy9saW1iCisJQworCUMgVGhlIHR3byBjaHVua3MgZGlmZmVyIGluIHdoZXRoZXIgbW0xIG9yIG1tMiBob2xkIHRoZSBjYXJyeS4KKwlDIFRoZSBjb21wdXRlZCBqdW1wIHB1dHMgdGhlIGluaXRpYWwgY2FycnkgaW4gYm90aCBtbTEgYW5kIG1tMi4KKworTChlbnRyeSk6CitkZWZsaXQoQ0hVTktfQ09VTlQsIDQpCitmb3Jsb29wKGksIDAsIFVOUk9MTF9DT1VOVC9DSFVOS19DT1VOVC0xLCBgCisJZGVmbGl0KGBkaXNwMCcsIGV2YWwoLWkqQ0hVTktfQ09VTlQqNCBpZmVsc2UoVU5ST0xMX0JZVEVTLDI1NiwtMTI4KSkpCisJZGVmbGl0KGBkaXNwMScsIGV2YWwoZGlzcDAgLSA4KSkKKworWmRpc3AoCW1vdnEsCWRpc3AwLCglZWR4KSwgJW1tMCkKKwlwc2xscQklbW02LCAlbW0yCisKKwltb3ZxCSVtbTAsICVtbTEKKwlwc3JscQklbW03LCAlbW0wCisKKwlwb3IJJW1tMiwgJW1tMAorWmRpc3AoCW1vdnEsCSVtbTAsIGRpc3AwLCglZWRpKSkKKworCitaZGlzcCgJbW92cSwJZGlzcDEsKCVlZHgpLCAlbW0wKQorCXBzbGxxCSVtbTYsICVtbTEKKworCW1vdnEJJW1tMCwgJW1tMgorCXBzcmxxCSVtbTcsICVtbTAKKworCXBvcgklbW0xLCAlbW0wCitaZGlzcCgJbW92cSwJJW1tMCwgZGlzcDEsKCVlZGkpKQorJykKKworCXN1YmwJJFVOUk9MTF9CWVRFUywgJWVkeAorCXN1YmwJJFVOUk9MTF9CWVRFUywgJWVkaQorCWRlY2wJJWVieAorCisJam5zCUwodG9wKQorCisKKworZGVmaW5lKGBkaXNwJywgYG00X2VtcHR5X2lmX3plcm8oZXZhbCgkMSBpZmVsc2UoVU5ST0xMX0JZVEVTLDI1NiwtMTI4KSkpJykKKworTChlbmQpOgorCXRlc3RiCSQxLCAlYWwKKwltb3ZsCVNBVkVfRUJYLCAlZWJ4CisJcHNsbHEJJW1tNiwgJW1tMglDIHdhbnRlZCBsZWZ0IHNoaWZ0ZWQgaW4gYWxsIGNhc2VzIGJlbG93CisKKwltb3ZkCSVtbTUsICVlYXgKKworCW1vdmwJU0FWRV9FU0ksICVlc2kKKwlqeglMKGVuZF9ldmVuKQorCisKK0woZW5kX29kZCk6CisKKwlDIFNpemUgb2RkLCBkZXN0aW5hdGlvbiB3YXMgYWxpZ25lZC4KKwlDCisJQyAgICAgICAgICAgICAgICAgc291cmNlICAgICAgICBlZHgrOCAgIGVkeCs0CisJQyAgICAgICAgICAgICAgICAgLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rCisJQyAgICAgICAgICAgICAgICAgICB8ICAgICAgbW0yICAgICAgfCAgICAgICB8CisJQyAgICAgICAgICAgICAgICAgLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rCisJQworCUMgZGVzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGkKKwlDIC0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSsKKwlDICAgfCAgIHdyaXR0ZW4gICAgIHwgICAgICAgICAgICAgICB8ICAgICAgIHwKKwlDIC0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSsKKwlDCisJQyBtbTYgPSBzaGlmdAorCUMgbW03ID0gZWN4ID0gNjQtc2hpZnQKKworCisJQyBTaXplIG9kZCwgZGVzdGluYXRpb24gd2FzIHVuYWxpZ25lZC4KKwlDCisJQyAgICAgICAgICAgICAgICAgc291cmNlICAgICAgICBlZHgrOCAgIGVkeCs0CisJQyAgICAgICAgICAgICAgICAgLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rCisJQyAgICAgICAgICAgICAgICAgICB8ICAgICAgbW0yICAgICAgfCAgICAgICB8CisJQyAgICAgICAgICAgICAgICAgLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rCisJQworCUMgICAgICAgICBkZXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaQorCUMgICAgICAgICAtLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworCUMgICAgICAgICAgIHwgICB3cml0dGVuICAgICB8ICAgICAgICAgICAgICAgfAorCUMgICAgICAgICAtLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworCUMKKwlDIG1tNiA9IHNoaWZ0KzMyCisJQyBtbTcgPSBlY3ggPSA2NC0oc2hpZnQrMzIpCisKKworCUMgSW4gYm90aCBjYXNlcyB0aGVyZSdzIG9uZSBleHRyYSBsaW1iIG9mIHNyYyB0byBmZXRjaCBhbmQgY29tYmluZQorCUMgd2l0aCBtbTIgdG8gbWFrZSBhIHF3b3JkIGF0ICglZWRpKSwgYW5kIGluIHRoZSBhbGlnbmVkIGNhc2UKKwlDIHRoZXJlJ3MgYW4gZXh0cmEgbGltYiBvZiBkc3QgdG8gYmUgZm9ybWVkIGZyb20gdGhhdCBleHRyYSBzcmMgbGltYgorCUMgbGVmdCBzaGlmdGVkLgorCisJbW92ZAlkaXNwKDQpICglZWR4KSwgJW1tMAorCXRlc3RiCSQzMiwgJWNsCisKKwltb3ZxCSVtbTAsICVtbTEKKwlwc2xscQkkMzIsICVtbTAKKworCXBzcmxxCSVtbTcsICVtbTAKKwlwc2xscQklbW02LCAlbW0xCisKKwlwb3IJJW1tMiwgJW1tMAorCisJbW92cQklbW0wLCBkaXNwKDApICglZWRpKQorCWp6CUwoZW5kX29kZF91bmFsaWduZWQpCisJbW92ZAklbW0xLCBkaXNwKC00KSAoJWVkaSkKK0woZW5kX29kZF91bmFsaWduZWQpOgorCisJbW92bAlTQVZFX0VESSwgJWVkaQorCWFkZGwJJFNBVkVfU0laRSwgJWVzcAorCWVtbXMKKworCXJldAorCisKK0woZW5kX2V2ZW4pOgorCisJQyBTaXplIGV2ZW4sIGRlc3RpbmF0aW9uIHdhcyBhbGlnbmVkLgorCUMKKwlDICAgICAgICAgICAgICAgICBzb3VyY2UgICAgICAgIGVkeCs4CisJQyAgICAgICAgICAgICAgICAgLS0rLS0tLS0tLS0tLS0tLS0tKworCUMgICAgICAgICAgICAgICAgICAgfCAgICAgIG1tMiAgICAgIHwKKwlDICAgICAgICAgICAgICAgICAtLSstLS0tLS0tLS0tLS0tLS0rCisJQworCUMgZGVzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGkKKwlDIC0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisJQyAgIHwgICB3cml0dGVuICAgICB8ICAgICAgICAgICAgICAgfAorCUMgLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKwlDCisJQyBtbTYgPSBzaGlmdAorCUMgbW03ID0gZWN4ID0gNjQtc2hpZnQKKworCisJQyBTaXplIGV2ZW4sIGRlc3RpbmF0aW9uIHdhcyB1bmFsaWduZWQuCisJQworCUMgICAgICAgICAgICAgICBzb3VyY2UgICAgICAgICAgZWR4KzgKKwlDICAgICAgICAgICAgICAgICAtLSstLS0tLS0tLS0tLS0tLS0rCisJQyAgICAgICAgICAgICAgICAgICB8ICAgICAgbW0yICAgICAgfAorCUMgICAgICAgICAgICAgICAgIC0tKy0tLS0tLS0tLS0tLS0tLSsKKwlDCisJQyAgICAgICAgIGRlc3QgICAgICAgICAgICAgICAgICBlZGkrNAorCUMgICAgICAgICAtLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSsKKwlDICAgICAgICAgICB8ICAgIHdyaXR0ZW4gICAgfCAgICAgICB8CisJQyAgICAgICAgIC0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tKworCUMKKwlDIG1tNiA9IHNoaWZ0KzMyCisJQyBtbTcgPSBlY3ggPSA2NC0oc2hpZnQrMzIpCisKKworCUMgVGhlIG1vdnEgZm9yIHRoZSBhbGlnbmVkIGNhc2Ugb3ZlcndyaXRlcyB0aGUgbW92ZCBmb3IgdGhlCisJQyB1bmFsaWduZWQgY2FzZS4KKworCW1vdnEJJW1tMiwgJW1tMAorCXBzcmxxCSQzMiwgJW1tMgorCisJdGVzdGIJJDMyLCAlY2wKKwltb3ZkCSVtbTIsIGRpc3AoNCkgKCVlZGkpCisKKwlqeglMKGVuZF9ldmVuX3VuYWxpZ25lZCkKKwltb3ZxCSVtbTAsIGRpc3AoMCkgKCVlZGkpCitMKGVuZF9ldmVuX3VuYWxpZ25lZCk6CisKKwltb3ZsCVNBVkVfRURJLCAlZWRpCisJYWRkbAkkU0FWRV9TSVpFLCAlZXNwCisJZW1tcworCisJcmV0CisKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s3L21teC9wb3BoYW0uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazcvbW14L3BvcGhhbS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU5NjViNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s3L21teC9wb3BoYW0uYXNtCkBAIC0wLDAgKzEsMjEzIEBACitkbmwgIEFNRCBLNyBtcG5fcG9wY291bnQsIG1wbl9oYW1kaXN0IC0tIHBvcHVsYXRpb24gY291bnQgYW5kIGhhbW1pbmcKK2RubCAgZGlzdGFuY2UuCisKK2RubCAgQ29weXJpZ2h0IDIwMDAtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MJCQkgICAgIHBvcGNvdW50CSAgICAgaGFtZGlzdAorQyBQMyBnZW5lcmljCQkJNi41CQk3CitDIFAzIG1vZGVsIDkgIChCYW5pYXMpICAgICAgICAgIDUuNwkJNi4xCitDIFAzIG1vZGVsIDEzIChEb3RoYW4pCQk1Ljc1CQk2CitDIEs3CQkJCTUJCTYKKworQyB1bnNpZ25lZCBsb25nIG1wbl9wb3Bjb3VudCAobXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUpOworQyB1bnNpZ25lZCBsb25nIG1wbl9oYW1kaXN0IChtcF9zcmNwdHIgc3JjLCBtcF9zcmNwdHIgc3JjMiwgbXBfc2l6ZV90IHNpemUpOworQworQyBUaGUgY29kZSBoZXJlIGlzIGFsbW9zdCBjZXJ0YWlubHkgbm90IG9wdGltYWwsIGJ1dCBpcyBhbHJlYWR5IGEgM3ggc3BlZWR1cAorQyBvdmVyIHRoZSBnZW5lcmljIEMgY29kZS4gIFRoZSBtYWluIGltcHJvdmVtZW50IHdvdWxkIGJlIHRvIGludGVybGVhdmUKK0MgcHJvY2Vzc2luZyBvZiB0d28gcXdvcmRzIGluIHRoZSBsb29wIHNvIGFzIHRvIGZ1bGx5IGV4cGxvaXQgdGhlIGF2YWlsYWJsZQorQyBleGVjdXRpb24gdW5pdHMsIHBvc3NpYmx5IGxlYWRpbmcgdG8gMy4yNSBjL2wgKDEzIGN5Y2xlcyBmb3IgNCBsaW1icykuCitDCitDIFRoZSBsb29wIGlzIGJhc2VkIG9uIHRoZSBleGFtcGxlICJFZmZpY2llbnQgNjQtYml0IHBvcHVsYXRpb24gY291bnQgdXNpbmcKK0MgTU1YIGluc3RydWN0aW9ucyIgaW4gdGhlIEF0aGxvbiBPcHRpbWl6YXRpb24gR3VpZGUsIEFNRCBkb2N1bWVudCAyMjAwNywKK0MgcGFnZSAxNTggb2YgcmV2IEUgKHJlZmVyZW5jZSBpbiBtcG4veDg2L2s3L1JFQURNRSkuCisKK2lmZGVmKGBPUEVSQVRJT05fcG9wY291bnQnLCwKK2BpZmRlZihgT1BFUkFUSU9OX2hhbWRpc3QnLCwKK2BtNF9lcnJvcihgTmVlZCBPUEVSQVRJT05fcG9wY291bnQgb3IgT1BFUkFUSU9OX2hhbWRpc3QgZGVmaW5lZAorJyknKScpCisKK2RlZmluZShIQU0sCittNF9hc3NlcnRfbnVtYXJncygxKQorYGlmZGVmKGBPUEVSQVRJT05faGFtZGlzdCcsYCQxJyknKQorCitkZWZpbmUoUE9QLAorbTRfYXNzZXJ0X251bWFyZ3MoMSkKK2BpZmRlZihgT1BFUkFUSU9OX3BvcGNvdW50JyxgJDEnKScpCisKK0hBTShgCitkZWZmcmFtZShQQVJBTV9TSVpFLCAgIDEyKQorZGVmZnJhbWUoUEFSQU1fU1JDMiwgICA4KQorZGVmZnJhbWUoUEFSQU1fU1JDLCAgICA0KQorZGVmaW5lKE00X2Z1bmN0aW9uLG1wbl9oYW1kaXN0KQorJykKK1BPUChgCitkZWZmcmFtZShQQVJBTV9TSVpFLCAgIDgpCitkZWZmcmFtZShQQVJBTV9TUkMsICAgIDQpCitkZWZpbmUoTTRfZnVuY3Rpb24sbXBuX3BvcGNvdW50KQorJykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fcG9wY291bnQgbXBuX2hhbWRpc3QpCisKKworaWZkZWYoYFBJQycsLGAKKwlkbmwgIG5vbi1QSUMKKworCVJPREFUQQorCUFMSUdOKDgpCisKK0wocm9kYXRhX0FBQUFBQUFBQUFBQUFBQUEpOgorCS5sb25nCTB4QUFBQUFBQUEKKwkubG9uZwkweEFBQUFBQUFBCisKK0wocm9kYXRhXzMzMzMzMzMzMzMzMzMzMzMpOgorCS5sb25nCTB4MzMzMzMzMzMKKwkubG9uZwkweDMzMzMzMzMzCisKK0wocm9kYXRhXzBGMEYwRjBGMEYwRjBGMEYpOgorCS5sb25nCTB4MEYwRjBGMEYKKwkubG9uZwkweDBGMEYwRjBGCisnKQorCisJVEVYVAorCUFMSUdOKDMyKQorCitQUk9MT0dVRShNNF9mdW5jdGlvbikKK2RlZmxpdChgRlJBTUUnLDApCisKKwltb3ZsCVBBUkFNX1NJWkUsICVlY3gKKworaWZkZWYoYFBJQycsYAorCW1vdmwJJDB4QUFBQUFBQUEsICVlYXgKKwltb3ZsCSQweDMzMzMzMzMzLCAlZWR4CisKKwltb3ZkCSVlYXgsICVtbTcKKwltb3ZkCSVlZHgsICVtbTYKKworCW1vdmwJJDB4MEYwRjBGMEYsICVlYXgKKworCXB1bnBja2xkcSAlbW03LCAlbW03CisJcHVucGNrbGRxICVtbTYsICVtbTYKKworCW1vdmQJJWVheCwgJW1tNQorCW1vdmQJJWVkeCwgJW1tNAorCisJcHVucGNrbGRxICVtbTUsICVtbTUKKworJyxgCisJbW92cQlMKHJvZGF0YV9BQUFBQUFBQUFBQUFBQUFBKSwgJW1tNworCW1vdnEJTChyb2RhdGFfMzMzMzMzMzMzMzMzMzMzMyksICVtbTYKKwltb3ZxCUwocm9kYXRhXzBGMEYwRjBGMEYwRjBGMEYpLCAlbW01CisnKQorCXB4b3IJJW1tNCwgJW1tNAorCitkZWZpbmUoUkVHX0FBQUFBQUFBQUFBQUFBQUEsJW1tNykKK2RlZmluZShSRUdfMzMzMzMzMzMzMzMzMzMzMywlbW02KQorZGVmaW5lKFJFR18wRjBGMEYwRjBGMEYwRjBGLCVtbTUpCitkZWZpbmUoUkVHXzAwMDAwMDAwMDAwMDAwMDAsJW1tNCkKKworCisJbW92bAlQQVJBTV9TUkMsICVlYXgKK0hBTShgCW1vdmwJUEFSQU1fU1JDMiwgJWVkeCcpCisKKwlweG9yCSVtbTIsICVtbTIJQyB0b3RhbAorCisJc2hybAklZWN4CisJam5jCUwodG9wKQorCisJbW92ZAkoJWVheCwlZWN4LDgpLCAlbW0xCisKK0hBTShgCW1vdmQJKCVlZHgsJWVjeCw4KSwgJW1tMAorCXB4b3IJJW1tMCwgJW1tMQorJykKKwlvcmwJJWVjeCwgJWVjeAorCWptcAlMKGxvYWRlZCkKKworCisJQUxJR04oMTYpCitMKHRvcCk6CisJQyBlYXgJc3JjCisJQyBlYngKKwlDIGVjeAljb3VudGVyLCBxd29yZHMsIGRlY3JlbWVudGluZworCUMgZWR4CVtoYW1kaXN0XSBzcmMyCisJQworCUMgbW0wCShzY3JhdGNoKQorCUMgbW0xCShzY3JhdGNoKQorCUMgbW0yCXRvdGFsIChsb3cgZHdvcmQpCisJQyBtbTMKKwlDIG1tNAlcCisJQyBtbTUJfCBzcGVjaWFsIGNvbnN0YW50cworCUMgbW02CXwKKwlDIG1tNwkvCisKKwltb3ZxCS04KCVlYXgsJWVjeCw4KSwgJW1tMQorCitIQU0oYAlweG9yCS04KCVlZHgsJWVjeCw4KSwgJW1tMScpCisJZGVjbAklZWN4CisKK0wobG9hZGVkKToKKwltb3ZxCSVtbTEsICVtbTAKKwlwYW5kCVJFR19BQUFBQUFBQUFBQUFBQUFBLCAlbW0xCisKKwlwc3JscQkkMSwgJW1tMQorCisJcHN1YmQJJW1tMSwgJW1tMAlDIGJpdCBwYWlycworCisKKwltb3ZxCSVtbTAsICVtbTEKKwlwc3JscQkkMiwgJW1tMAorCisJcGFuZAlSRUdfMzMzMzMzMzMzMzMzMzMzMywgJW1tMAorCXBhbmQJUkVHXzMzMzMzMzMzMzMzMzMzMzMsICVtbTEKKworCXBhZGRkCSVtbTEsICVtbTAJQyBuaWJibGVzCisKKworCW1vdnEJJW1tMCwgJW1tMQorCXBzcmxxCSQ0LCAlbW0wCisKKwlwYW5kCVJFR18wRjBGMEYwRjBGMEYwRjBGLCAlbW0wCisJcGFuZAlSRUdfMEYwRjBGMEYwRjBGMEYwRiwgJW1tMQorCisJcGFkZGQJJW1tMSwgJW1tMAlDIGJ5dGVzCisKKworCXBzYWRidygJJW1tNCwgJW1tMCkKKworCXBhZGRkCSVtbTAsICVtbTIJQyBhZGQgdG8gdG90YWwKKwlqbnoJTCh0b3ApCisKKworCW1vdmQJJW1tMiwgJWVheAorCWVtbXMKKwlyZXQKKworRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazcvbW14L3JzaGlmdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNy9tbXgvcnNoaWZ0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDVkMjNhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazcvbW14L3JzaGlmdC5hc20KQEAgLTAsMCArMSw0ODAgQEAKK2RubCAgQU1EIEs3IG1wbl9yc2hpZnQgLS0gbXBuIHJpZ2h0IHNoaWZ0LgorCitkbmwgIENvcHlyaWdodCAxOTk5LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDIEs3OiAxLjIxIGN5Y2xlcy9saW1iIChhdCAxNiBsaW1icy9sb29wKS4KKworCisKK2RubCAgSzc6IFVOUk9MTF9DT1VOVCBjeWNsZXMvbGltYgorZG5sICAgICAgICAgICA0ICAgICAgICAgICAxLjUxCitkbmwgICAgICAgICAgIDggICAgICAgICAgIDEuMjYKK2RubCAgICAgICAgICAxNiAgICAgICAgICAgMS4yMQorZG5sICAgICAgICAgIDMyICAgICAgICAgICAxLjIKK2RubCAgTWF4aW11bSBwb3NzaWJsZSB3aXRoIHRoZSBjdXJyZW50IGNvZGUgaXMgNjQuCisKK2RlZmxpdChVTlJPTExfQ09VTlQsIDE2KQorCisKK0MgbXBfbGltYl90IG1wbl9yc2hpZnQgKG1wX3B0ciBkc3QsIG1wX3NyY3B0ciBzcmMsIG1wX3NpemVfdCBzaXplLAorQyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hpZnQpOworQworQyBTaGlmdCBzcmMsc2l6ZSByaWdodCBieSBzaGlmdCBtYW55IGJpdHMgYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gZHN0LHNpemUuCitDIFplcm9zIGFyZSBzaGlmdGVkIGluIGF0IHRoZSBsZWZ0LiAgVGhlIGJpdHMgc2hpZnRlZCBvdXQgYXQgdGhlIHJpZ2h0IGFyZQorQyB0aGUgcmV0dXJuIHZhbHVlLgorQworQyBUaGlzIGNvZGUgdXNlcyA2NC1iaXQgTU1YIG9wZXJhdGlvbnMsIHdoaWNoIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGhhbmRsZQorQyB0d28gbGltYnMgYXQgYSB0aW1lLCBmb3IgYSB0aGVvcmV0aWNhbCAxLjAgY3ljbGVzL2xpbWIuICBQbGFpbiBpbnRlZ2VyCitDIGNvZGUsIG9uIHRoZSBvdGhlciBoYW5kLCBzdWZmZXJzIGZyb20gc2hyZCBiZWluZyBhIHZlY3RvciBwYXRoIGRlY29kZSBhbmQKK0MgcnVubmluZyBhdCAzIGN5Y2xlcyBiYWNrLXRvLWJhY2suCitDCitDIEZ1bGwgc3BlZWQgZGVwZW5kcyBvbiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGJlaW5nIGFsaWduZWQsIGFuZCBzb21lIGhhaXJ5CitDIHNldHVwcyBhbmQgZmluaXNoLXVwcyBhcmUgZG9uZSB0byBhcnJhbmdlIHRoaXMgZm9yIHRoZSBsb29wLgorCitpZmRlZihgUElDJyxgCitkZWZsaXQoVU5ST0xMX1RIUkVTSE9MRCwgMTApCisnLGAKK2RlZmxpdChVTlJPTExfVEhSRVNIT0xELCAxMCkKKycpCisKK2RlZmZyYW1lKFBBUkFNX1NISUZULDE2KQorZGVmZnJhbWUoUEFSQU1fU0laRSwgMTIpCitkZWZmcmFtZShQQVJBTV9TUkMsICA4KQorZGVmZnJhbWUoUEFSQU1fRFNULCAgNCkKKworZGVmZnJhbWUoU0FWRV9FREksIC00KQorZGVmZnJhbWUoU0FWRV9FU0ksIC04KQorZGVmZnJhbWUoU0FWRV9FQlgsIC0xMikKK2RlZmxpdChTQVZFX1NJWkUsIDEyKQorCisJVEVYVAorCUFMSUdOKDMyKQorCitQUk9MT0dVRShtcG5fcnNoaWZ0KQorZGVmbGl0KGBGUkFNRScsMCkKKworCW1vdmwJUEFSQU1fU0laRSwgJWVheAorCW1vdmwJUEFSQU1fU1JDLCAlZWR4CisJc3VibAkkU0FWRV9TSVpFLCAlZXNwCitkZWZsaXQoYEZSQU1FJyxTQVZFX1NJWkUpCisKKwltb3ZsCVBBUkFNX1NISUZULCAlZWN4CisJbW92bAklZWRpLCBTQVZFX0VESQorCisJbW92bAlQQVJBTV9EU1QsICVlZGkKKwlkZWNsCSVlYXgKKwlqbnoJTChtb3JlX3RoYW5fb25lX2xpbWIpCisKKwltb3ZsCSglZWR4KSwgJWVkeAkJQyBzcmMgbGltYgorCisJc2hyZGwoCSVjbCwgJWVkeCwgJWVheCkJQyBlYXggd2FzIGRlY3JlbWVudGVkIHRvIHplcm8KKworCXNocmwJJWNsLCAlZWR4CisKKwltb3ZsCSVlZHgsICglZWRpKQkJQyBkc3QgbGltYgorCW1vdmwJU0FWRV9FREksICVlZGkKKwlhZGRsCSRTQVZFX1NJWkUsICVlc3AKKworCXJldAorCisKK0MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0wobW9yZV90aGFuX29uZV9saW1iKToKKwlDIGVheAlzaXplLTEKKwlDIGVieAorCUMgZWN4CXNoaWZ0CisJQyBlZHgJc3JjCisJQyBlc2kKKwlDIGVkaQlkc3QKKwlDIGVicAorCisJbW92ZAlQQVJBTV9TSElGVCwgJW1tNglDIHJzaGlmdAorCW1vdmQJKCVlZHgpLCAlbW01CQlDIHNyYyBsb3cgbGltYgorCWNtcAkkVU5ST0xMX1RIUkVTSE9MRC0xLCAlZWF4CisKKwlqYWUJTCh1bnJvbGwpCisJbGVhbAkoJWVkeCwlZWF4LDQpLCAlZWR4CUMgJnNyY1tzaXplLTFdCisJbGVhbAktNCglZWRpLCVlYXgsNCksICVlZGkJQyAmZHN0W3NpemUtMl0KKworCW1vdmQJKCVlZHgpLCAlbW00CQlDIHNyYyBoaWdoIGxpbWIKKwluZWdsCSVlYXgKKworCitMKHNpbXBsZV90b3ApOgorCUMgZWF4CWxvb3AgY291bnRlciwgbGltYnMsIG5lZ2F0aXZlCisJQyBlYngKKwlDIGVjeAlzaGlmdAorCUMgZWR4CWNhcnJ5CisJQyBlZHgJJnNyY1tzaXplLTFdCisJQyBlZGkJJmRzdFtzaXplLTJdCisJQyBlYnAKKwlDCisJQyBtbTAJc2NyYXRjaAorCUMgbW00CXNyYyBoaWdoIGxpbWIKKwlDIG1tNQlzcmMgbG93IGxpbWIKKwlDIG1tNglzaGlmdAorCisJbW92cQkoJWVkeCwlZWF4LDQpLCAlbW0wCisJaW5jbAklZWF4CisKKwlwc3JscQklbW02LCAlbW0wCisKKwltb3ZkCSVtbTAsICglZWRpLCVlYXgsNCkKKwlqbnoJTChzaW1wbGVfdG9wKQorCisKKwlwc2xscQkkMzIsICVtbTUKKwlwc3JscQklbW02LCAlbW00CisKKwlwc3JscQklbW02LCAlbW01CisJbW92ZAklbW00LCA0KCVlZGkpCQlDIGRzdCBoaWdoIGxpbWIKKworCW1vdmQJJW1tNSwgJWVheAkJQyByZXR1cm4gdmFsdWUKKworCW1vdmwJU0FWRV9FREksICVlZGkKKwlhZGRsCSRTQVZFX1NJWkUsICVlc3AKKwllbW1zCisKKwlyZXQKKworCitDIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJQUxJR04oMTYpCitMKHVucm9sbCk6CisJQyBlYXgJc2l6ZS0xCisJQyBlYngKKwlDIGVjeAlzaGlmdAorCUMgZWR4CXNyYworCUMgZXNpCisJQyBlZGkJZHN0CisJQyBlYnAKKwlDCisJQyBtbTUJc3JjIGxvdyBsaW1iCisJQyBtbTYJcnNoaWZ0CisKKwl0ZXN0YgkkNCwgJWRsCisJbW92bAklZXNpLCBTQVZFX0VTSQorCW1vdmwJJWVieCwgU0FWRV9FQlgKKworCXBzbGxxCSQzMiwgJW1tNQorCWp6CUwoc3RhcnRfc3JjX2FsaWduZWQpCisKKworCUMgc3JjIGlzbid0IGFsaWduZWQsIHByb2Nlc3MgbG93IGxpbWIgc2VwYXJhdGVseSAobWFya2VkIHh4eCkgYW5kCisJQyBzdGVwIHNyYyBhbmQgZHN0IGJ5IG9uZSBsaW1iLCBtYWtpbmcgc3JjIGFsaWduZWQuCisJQworCUMgc291cmNlICAgICAgICAgICAgICAgICAgZWR4CisJQyAtLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSsKKwlDICAgICAgICAgICB8ICAgICAgICAgIHh4eCAgfAorCUMgLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rCisJQyAgICAgICAgIDRtb2Q4ICAgMG1vZDggICA0bW9kOAorCUMKKwlDICAgICAgICAgZGVzdCAgICAgICAgICAgIGVkaQorCUMgICAgICAgICAtLSstLS0tLS0tKy0tLS0tLS0rCisJQyAgICAgICAgICAgfCAgICAgICB8ICB4eHggIHwKKwlDICAgICAgICAgLS0rLS0tLS0tLSstLS0tLS0tKworCisJbW92cQkoJWVkeCksICVtbTAJCUMgc3JjIGxvdyB0d28gbGltYnMKKwlhZGRsCSQ0LCAlZWR4CisJbW92bAklZWF4LCBQQVJBTV9TSVpFCUMgc2l6ZS0xCisKKwlhZGRsCSQ0LCAlZWRpCisJZGVjbAklZWF4CQkJQyBzaXplLTIgaXMgbmV3IHNpemUtMQorCisJcHNybHEJJW1tNiwgJW1tMAorCW1vdmwJJWVkaSwgUEFSQU1fRFNUCQlDIG5ldyBkc3QKKworCW1vdmQJJW1tMCwgLTQoJWVkaSkKK0woc3RhcnRfc3JjX2FsaWduZWQpOgorCisKKwltb3ZxCSglZWR4KSwgJW1tMQkJQyBzcmMgbG93IHR3byBsaW1icworCWRlY2wJJWVheAkJCUMgc2l6ZS0yLCB0d28gbGFzdCBsaW1icyBoYW5kbGVkIGF0IGVuZAorCXRlc3RsCSQ0LCAlZWRpCisKKwlwc3JscQklbW02LCAlbW01CisJanoJTChzdGFydF9kc3RfYWxpZ25lZCkKKworCisJQyBkc3QgaXNuJ3QgYWxpZ25lZCwgYWRkIDQgdG8gbWFrZSBpdCBzbywgYW5kIHByZXRlbmQgdGhlIHNoaWZ0IGlzCisJQyAzMiBiaXRzIGV4dHJhLiAgTG93IGxpbWIgb2YgZHN0IChtYXJrZWQgeHh4KSBoYW5kbGVkIGhlcmUgc2VwYXJhdGVseS4KKwlDCisJQyAgICAgICAgICBzb3VyY2UgICAgICAgICAgZWR4CisJQyAgICAgICAgICAtLSstLS0tLS0tKy0tLS0tLS0rCisJQyAgICAgICAgICAgIHwgICAgICBtbTEgICAgICB8CisJQyAgICAgICAgICAtLSstLS0tLS0tKy0tLS0tLS0rCisJQyAgICAgICAgICAgICAgICAgIDRtb2Q4ICAgMG1vZDgKKwlDCisJQyAgZGVzdCAgICAgICAgICAgICAgICAgICAgZWRpCisJQyAgLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rCisJQyAgICAgICAgICAgICAgICAgICAgfCAgeHh4ICB8CisJQyAgLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rCisJQyAgICAgICAgICA0bW9kOCAgIDBtb2Q4ICAgNG1vZDgKKworCW1vdnEJJW1tMSwgJW1tMAorCXBzcmxxCSVtbTYsICVtbTEKKwlhZGRsCSQzMiwgJWVjeAkJQyBzaGlmdCszMgorCisJbW92ZAklbW0xLCAoJWVkaSkKKwltb3ZxCSVtbTAsICVtbTEKKwlhZGRsCSQ0LCAlZWRpCQlDIG5ldyBkc3QKKworCW1vdmQJJWVjeCwgJW1tNgorTChzdGFydF9kc3RfYWxpZ25lZCk6CisKKworCW1vdnEJJW1tMSwgJW1tMgkJQyBjb3B5IG9mIHNyYyBsb3cgdHdvIGxpbWJzCisJbmVnbAklZWN4CisJYW5kbAkkLTIsICVlYXgJCUMgcm91bmQgc2l6ZSBkb3duIHRvIGV2ZW4KKworCW1vdmwJJWVheCwgJWVieAorCW5lZ2wJJWVheAorCWFkZGwJJDY0LCAlZWN4CisKKwlhbmRsCSRVTlJPTExfTUFTSywgJWVheAorCWRlY2wJJWVieAorCisJc2hsbAklZWF4CisKKwltb3ZkCSVlY3gsICVtbTcJCUMgbHNoaWZ0ID0gNjQtcnNoaWZ0CisKK2lmZGVmKGBQSUMnLGAKKwljYWxsCUwocGljX2NhbGMpCitMKGhlcmUpOgorJyxgCisJbGVhbAlMKGVudHJ5KSAoJWVheCwlZWF4LDQpLCAlZXNpCisJbmVnbAklZWF4CisnKQorCXNocmwJJFVOUk9MTF9MT0cyLCAlZWJ4CUMgbG9vcCBjb3VudGVyCisKKwlsZWFsCWlmZWxzZShVTlJPTExfQllURVMsMjU2LDEyOCspIDgoJWVkeCwlZWF4LDIpLCAlZWR4CisJbGVhbAlpZmVsc2UoVU5ST0xMX0JZVEVTLDI1NiwxMjgpICglZWRpLCVlYXgsMiksICVlZGkKKwltb3ZsCVBBUkFNX1NJWkUsICVlYXgJQyBmb3IgdXNlIGF0IGVuZAorCisJam1wCSolZXNpCisKKworaWZkZWYoYFBJQycsYAorTChwaWNfY2FsYyk6CisJQyBTZWUgbXBuL3g4Ni9SRUFETUUgYWJvdXQgb2xkIGdhcyBidWdzCisJbGVhbAkoJWVheCwlZWF4LDQpLCAlZXNpCisJYWRkbAkkTChlbnRyeSktTChoZXJlKSwgJWVzaQorCWFkZGwJKCVlc3ApLCAlZXNpCisJbmVnbAklZWF4CisKKwlyZXRfaW50ZXJuYWwKKycpCisKKworQyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUFMSUdOKDY0KQorTCh0b3ApOgorCUMgZWF4CXNpemUsIGZvciB1c2UgYXQgZW5kCisJQyBlYngJbG9vcCBjb3VudGVyCisJQyBlY3gJbHNoaWZ0CisJQyBlZHgJc3JjCisJQyBlc2kJd2FzIGNvbXB1dGVkIGp1bXAKKwlDIGVkaQlkc3QKKwlDIGVicAorCUMKKwlDIG1tMAlzY3JhdGNoCisJQyBtbTEJXCBjYXJyeSAoYWx0ZXJuYXRpbmcpCisJQyBtbTIJLworCUMgbW02CXJzaGlmdAorCUMgbW03CWxzaGlmdAorCUMKKwlDIDEwIGNvZGUgYnl0ZXMvbGltYgorCUMKKwlDIFRoZSB0d28gY2h1bmtzIGRpZmZlciBpbiB3aGV0aGVyIG1tMSBvciBtbTIgaG9sZCB0aGUgY2FycnkuCisJQyBUaGUgY29tcHV0ZWQganVtcCBwdXRzIHRoZSBpbml0aWFsIGNhcnJ5IGluIGJvdGggbW0xIGFuZCBtbTIuCisKK0woZW50cnkpOgorZGVmbGl0KENIVU5LX0NPVU5ULCA0KQorZm9ybG9vcChpLCAwLCBVTlJPTExfQ09VTlQvQ0hVTktfQ09VTlQtMSwgYAorCWRlZmxpdChgZGlzcDAnLCBldmFsKGkqQ0hVTktfQ09VTlQqNCBpZmVsc2UoVU5ST0xMX0JZVEVTLDI1NiwtMTI4KSkpCisJZGVmbGl0KGBkaXNwMScsIGV2YWwoZGlzcDAgKyA4KSkKKworWmRpc3AoCW1vdnEsCWRpc3AwLCglZWR4KSwgJW1tMCkKKwlwc3JscQklbW02LCAlbW0yCisKKwltb3ZxCSVtbTAsICVtbTEKKwlwc2xscQklbW03LCAlbW0wCisKKwlwb3IJJW1tMiwgJW1tMAorWmRpc3AoCW1vdnEsCSVtbTAsIGRpc3AwLCglZWRpKSkKKworCitaZGlzcCgJbW92cSwJZGlzcDEsKCVlZHgpLCAlbW0wKQorCXBzcmxxCSVtbTYsICVtbTEKKworCW1vdnEJJW1tMCwgJW1tMgorCXBzbGxxCSVtbTcsICVtbTAKKworCXBvcgklbW0xLCAlbW0wCitaZGlzcCgJbW92cSwJJW1tMCwgZGlzcDEsKCVlZGkpKQorJykKKworCWFkZGwJJFVOUk9MTF9CWVRFUywgJWVkeAorCWFkZGwJJFVOUk9MTF9CWVRFUywgJWVkaQorCWRlY2wJJWVieAorCisJam5zCUwodG9wKQorCisKK2RlZmxpdChgZGlzcDAnLCBpZmVsc2UoVU5ST0xMX0JZVEVTLDI1NiwtMTI4KSkKK2RlZmxpdChgZGlzcDEnLCBldmFsKGRpc3AwLTAgKyA4KSkKKworCXRlc3RiCSQxLCAlYWwKKwlwc3JscQklbW02LCAlbW0yCUMgd2FudGVkIHJzaGlmdGVkIGluIGFsbCBjYXNlcyBiZWxvdworCW1vdmwJU0FWRV9FU0ksICVlc2kKKworCW1vdmQJJW1tNSwgJWVheAkJQyByZXR1cm4gdmFsdWUKKworCW1vdmwJU0FWRV9FQlgsICVlYngKKwlqeglMKGVuZF9ldmVuKQorCisKKwlDIFNpemUgb2RkLCBkZXN0aW5hdGlvbiB3YXMgYWxpZ25lZC4KKwlDCisJQyBzb3VyY2UKKwlDICAgICAgIGVkeAorCUMgKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tCisJQyB8ICAgICAgIHwgICAgICBtbTIgICAgICB8CisJQyArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0KKwlDCisJQyBkZXN0ICAgICAgICAgICAgICAgICAgZWRpCisJQyArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tCisJQyB8ICAgICAgIHwgICAgICAgICAgICAgICB8ICAgIHdyaXR0ZW4gICAgfAorCUMgKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLQorCUMKKwlDIG1tNiA9IHNoaWZ0CisJQyBtbTcgPSBlY3ggPSA2NC1zaGlmdAorCisKKwlDIFNpemUgb2RkLCBkZXN0aW5hdGlvbiB3YXMgdW5hbGlnbmVkLgorCUMKKwlDIHNvdXJjZQorCUMgICAgICAgZWR4CisJQyArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0KKwlDIHwgICAgICAgfCAgICAgIG1tMiAgICAgIHwKKwlDICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLQorCUMKKwlDIGRlc3QgICAgICAgICAgZWRpCisJQyArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLQorCUMgfCAgICAgICAgICAgICAgIHwgICAgd3JpdHRlbiAgICB8CisJQyArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLQorCUMKKwlDIG1tNiA9IHNoaWZ0KzMyCisJQyBtbTcgPSBlY3ggPSA2NC0oc2hpZnQrMzIpCisKKworCUMgSW4gYm90aCBjYXNlcyB0aGVyZSdzIG9uZSBleHRyYSBsaW1iIG9mIHNyYyB0byBmZXRjaCBhbmQgY29tYmluZQorCUMgd2l0aCBtbTIgdG8gbWFrZSBhIHF3b3JkIHRvIHN0b3JlLCBhbmQgaW4gdGhlIGFsaWduZWQgY2FzZSB0aGVyZSdzCisJQyBhIGZ1cnRoZXIgZXh0cmEgbGltYiBvZiBkc3QgdG8gYmUgZm9ybWVkLgorCisKKwltb3ZkCWRpc3AwKCVlZHgpLCAlbW0wCisJbW92cQklbW0wLCAlbW0xCisKKwlwc2xscQklbW03LCAlbW0wCisJdGVzdGIJJDMyLCAlY2wKKworCXBvcgklbW0yLCAlbW0wCisJcHNybHEJJW1tNiwgJW1tMQorCisJbW92cQklbW0wLCBkaXNwMCglZWRpKQorCWp6CUwoZmluaXNoX29kZF91bmFsaWduZWQpCisKKwltb3ZkCSVtbTEsIGRpc3AxKCVlZGkpCitMKGZpbmlzaF9vZGRfdW5hbGlnbmVkKToKKworCW1vdmwJU0FWRV9FREksICVlZGkKKwlhZGRsCSRTQVZFX1NJWkUsICVlc3AKKwllbW1zCisKKwlyZXQKKworCitMKGVuZF9ldmVuKToKKworCUMgU2l6ZSBldmVuLCBkZXN0aW5hdGlvbiB3YXMgYWxpZ25lZC4KKwlDCisJQyBzb3VyY2UKKwlDICstLS0tLS0tLS0tLS0tLS0rLS0KKwlDIHwgICAgICBtbTIgICAgICB8CisJQyArLS0tLS0tLS0tLS0tLS0tKy0tCisJQworCUMgZGVzdCAgICAgICAgICBlZGkKKwlDICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tCisJQyB8ICAgICAgICAgICAgICAgfCAgICAgIG1tMyAgICAgIHwKKwlDICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tCisJQworCUMgbW02ID0gc2hpZnQKKwlDIG1tNyA9IGVjeCA9IDY0LXNoaWZ0CisKKworCUMgU2l6ZSBldmVuLCBkZXN0aW5hdGlvbiB3YXMgdW5hbGlnbmVkLgorCUMKKwlDIHNvdXJjZQorCUMgKy0tLS0tLS0tLS0tLS0tLSstLQorCUMgfCAgICAgIG1tMiAgICAgIHwKKwlDICstLS0tLS0tLS0tLS0tLS0rLS0KKwlDCisJQyBkZXN0ICBlZGkKKwlDICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLQorCUMgfCAgICAgICB8ICAgICAgbW0zICAgICAgfAorCUMgKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tCisJQworCUMgbW02ID0gc2hpZnQrMzIKKwlDIG1tNyA9IDY0LShzaGlmdCszMikKKworCisJQyBUaGUgbW92ZCBmb3IgdGhlIHVuYWxpZ25lZCBjYXNlIGlzIHRoZSBzYW1lIGRhdGEgYXMgdGhlIG1vdnEgZm9yCisJQyB0aGUgYWxpZ25lZCBjYXNlLCBpdCdzIGp1c3QgYSBjaG9pY2UgYmV0d2VlbiB3aGV0aGVyIG9uZSBvciB0d28KKwlDIGxpbWJzIHNob3VsZCBiZSB3cml0dGVuLgorCisKKwl0ZXN0YgkkMzIsICVjbAorCW1vdmQJJW1tMiwgZGlzcDAoJWVkaSkKKworCWp6CUwoZW5kX2V2ZW5fdW5hbGlnbmVkKQorCisJbW92cQklbW0yLCBkaXNwMCglZWRpKQorTChlbmRfZXZlbl91bmFsaWduZWQpOgorCisJbW92bAlTQVZFX0VESSwgJWVkaQorCWFkZGwJJFNBVkVfU0laRSwgJWVzcAorCWVtbXMKKworCXJldAorCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNy9tb2RfMV8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s3L21vZF8xXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiYmU2ZjkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNy9tb2RfMV8xLmFzbQpAQCAtMCwwICsxLDIyMSBAQAorZG5sICB4ODYtMzIgbXBuX21vZF8xXzFwLCByZXF1aXJpbmcgY21vdi4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgTmllbHMgTcO2bGxlciBhbmQgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkJCSAgICBjeWNsZXMvbGltYgorQyBQNQkJCQkgPworQyBQNiBtb2RlbCAwLTgsMTAtMTIJCSA/CitDIFA2IG1vZGVsIDkgIChCYW5pYXMpCQkgPworQyBQNiBtb2RlbCAxMyAoRG90aGFuKQkJID8KK0MgUDQgbW9kZWwgMCAgKFdpbGxhbWV0dGUpCSA/CitDIFA0IG1vZGVsIDEgICg/KQkJID8KK0MgUDQgbW9kZWwgMiAgKE5vcnRod29vZCkJID8KK0MgUDQgbW9kZWwgMyAgKFByZXNjb3R0KQkgPworQyBQNCBtb2RlbCA0ICAoTm9jb25hKQkJID8KK0MgQU1EIEs2CQkJID8KK0MgQU1EIEs3CQkJIDcKK0MgQU1EIEs4CQkJID8KKworZGVmaW5lKGBCMm1iJywgYCVlYngnKQorZGVmaW5lKGByMCcsIGAlZXNpJykKK2RlZmluZShgcjInLCBgJWVicCcpCitkZWZpbmUoYHQwJywgYCVlZGknKQorZGVmaW5lKGBhcCcsIGAlZWN4JykgIEMgQWxzbyBzaGlmdCBjb3VudAorCitDIFN0YWNrIGZyYW1lCitDCXByZQkzNiglZXNwKQorQwliCTMyKCVlc3ApCitDCW4JMjgoJWVzcCkKK0MJYXAJMjQoJWVzcCkKK0MJcmV0dXJuCTIwKCVlc3ApCitDCSVlYnAJMTYoJWVzcCkKK0MJJWVkaQkxMiglZXNwKQorQwklZXNpCTgoJWVzcCkKK0MJJWVieAk0KCVlc3ApCitDCUIybW9kCSglZXNwKQorCitkZWZpbmUoYEIybW9kYicsIGAoJWVzcCknKQorZGVmaW5lKGBuJywgYDI4KCVlc3ApJykKK2RlZmluZShgYicsIGAzMiglZXNwKScpCitkZWZpbmUoYHByZScsIGAzNiglZXNwKScpCisKK0MgbXBfbGltYl90CitDIG1wbl9tb2RfMV8xcCAobXBfc3JjcHRyIGFwLCBtcF9zaXplX3QgbiwgbXBfbGltYl90IGIsIG1wX2xpbWJfdCBwcmVbNF0pCitDCitDIFRoZSBwcmUgYXJyYXkgY29udGFpbnMgYmksIGNudCwgQjFtb2RiLCBCMm1vZGIKK0MgTm90ZTogVGhpcyBpbXBsZW1lbnRhdGlvbiBuZWVkcyBCMW1vZGIgb25seSB3aGVuIGNudCA+IDAKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oOCkKK1BST0xPR1VFKG1wbl9tb2RfMV8xcCkKKwlwdXNoCSVlYnAKKwlwdXNoCSVlZGkKKwlwdXNoCSVlc2kKKwlwdXNoCSVlYngKKwltb3YJMzIoJWVzcCksICVlYnAJCUMgcHJlW10KKworCW1vdgkxMiglZWJwKSwgJWVheAkJQyBCMm1vZGIKKwlwdXNoCSVlYXgJCQlDIFB1dCBpdCBvbiBzdGFjaworCisJbW92CW4sICVlZHgKKwltb3YJMjQoJWVzcCksIGFwCisKKwlsZWEJKGFwLCAlZWR4LCA0KSwgYXAKKwltb3YJLTQoYXApLCAlZWF4CisJY21wCSQzLCAlZWR4CisJam5jCUwoZmlyc3QpCisJbW92CS04KGFwKSwgcjAKKwlqbXAJTChyZWR1Y2VfdHdvKQorCitMKGZpcnN0KToKKwlDIEZpcnN0IGl0ZXJhdGlvbiwgbm8gcjIKKwltdWxsCUIybW9kYgorCW1vdgktMTIoYXApLCByMAorCWFkZAklZWF4LCByMAorCW1vdgktOChhcCksICVlYXgKKwlhZGMJJWVkeCwgJWVheAorCXNiYglyMiwgcjIKKwlzdWJsCSQzLCBuCisJbGVhCS0xNihhcCksIGFwCisJanoJTChyZWR1Y2VfdGhyZWUpCisKKwltb3YJQjJtb2RiLCBCMm1iCisJc3ViCWIsIEIybWIKKwlsZWEJKEIybWIsIHIwKSwgdDAKKwlqbXAJTChtaWQpCisKKwlBTElHTigxNikKK0wodG9wKTogQyBMb29wbWl4ZWQgdG8gNyBjL2wgb24gazcKKwlhZGQJJWVheCwgcjAKKwlsZWEJKEIybWIsIHIwKSwgdDAKKwltb3YJcjIsICVlYXgKKwlhZGMJJWVkeCwgJWVheAorCXNiYglyMiwgcjIKK0wobWlkKToJbXVsbAlCMm1vZGIKKwlhbmQJQjJtb2RiLCByMgorCWFkZAlyMCwgcjIKKwlkZWNsCW4KKwltb3YJKGFwKSwgcjAKKwljbW92YygJdDAsIHIyKQorCWxlYQktNChhcCksIGFwCisJam56CUwodG9wKQorCisJYWRkCSVlYXgsIHIwCisJbW92CXIyLCAlZWF4CisJYWRjCSVlZHgsICVlYXgKKwlzYmIJcjIsIHIyCisKK0wocmVkdWNlX3RocmVlKToKKwlDIEVsaW1pbmF0ZSByMgorCWFuZAliLCByMgorCXN1YglyMiwgJWVheAorCitMKHJlZHVjZV90d28pOgorCW1vdglwcmUsICVlYnAKKwltb3ZiCTQoJWVicCksICVjbAorCXRlc3QJJWNsLCAlY2wKKwlqeglMKG5vcm1hbGl6ZWQpCisKKwlDIFVubm9ybWFsaXplZCwgdXNlIEIxbW9kYiB0byByZWR1Y2UgdG8gc2l6ZSA8IEIgYgorCW11bGwJOCglZWJwKQorCXhvcgl0MCwgdDAKKwlhZGQJJWVheCwgcjAKKwlhZGMJJWVkeCwgdDAKKwltb3YJdDAsICVlYXgKKworCUMgTGVmdC1zaGlmdCB0byBub3JtYWxpemUKKwlzaGxkCSVjbCwgcjAsICVlYXggQyBBbHdheXMgdXNlIHNobGQ/CisKKwlzaGwJJWNsLCByMAorCWptcAlMKHVkaXYpCisKK0wobm9ybWFsaXplZCk6CisJbW92CSVlYXgsIHQwCisJc3ViCWIsIHQwCisJY21vdm5jKAl0MCwgJWVheCkKKworTCh1ZGl2KToKKwlsZWEJMSglZWF4KSwgdDAKKwltdWxsCSglZWJwKQorCW1vdgliLCAlZWJ4CQlDIE5lZWRlZCBpbiByZWdpc3RlciBmb3IgbGVhCisJYWRkCXIwLCAlZWF4CisJYWRjCXQwLCAlZWR4CisJaW11bAklZWJ4LCAlZWR4CisJc3ViCSVlZHgsIHIwCisJY21wCXIwLCAlZWF4CisJbGVhCSglZWJ4LCByMCksICVlYXgKKwljbW92bmMoCXIwLCAlZWF4KQorCWNtcAklZWJ4LCAlZWF4CisJam5jCUwoZml4KQorTChvayk6CXNocgklY2wsICVlYXgKKworCWFkZAkkNCwgJWVzcAorCXBvcAklZWJ4CisJcG9wCSVlc2kKKwlwb3AJJWVkaQorCXBvcAklZWJwCisKKwlyZXQKK0woZml4KToJc3ViCSVlYngsICVlYXgKKwlqbXAJTChvaykKK0VQSUxPR1VFKCkKKworUFJPTE9HVUUobXBuX21vZF8xXzFwX2NwcykKKwlwdXNoCSVlYnAKKwltb3YJMTIoJWVzcCksICVlYnAKKwlwdXNoCSVlc2kKKwlic3IJJWVicCwgJWVjeAorCXB1c2gJJWVieAorCXhvcgkkMzEsICVlY3gKKwltb3YJMTYoJWVzcCksICVlc2kKKwlzYWwJJWNsLCAlZWJwCisJbW92CSVlYnAsICVlZHgKKwlub3QJJWVkeAorCW1vdgkkLTEsICVlYXgKKwlkaXYJJWVicAkJCUMgT24gSzcsIGludmVydF9saW1iIHdvdWxkIGJlIGEgZmV3IGN5Y2xlcyBmYXN0ZXIuCisJbW92CSVlYXgsICglZXNpKQkJQyBzdG9yZSBiaQorCW1vdgklZWN4LCA0KCVlc2kpCQlDIHN0b3JlIGNudAorCW5lZwklZWJwCisJbW92CSQxLCAlZWR4CisJc2hsZAklY2wsICVlYXgsICVlZHgKKwlpbXVsCSVlYnAsICVlZHgKKwlzaHIJJWNsLCAlZWR4CisJaW11bAklZWJwLCAlZWF4CisJbW92CSVlZHgsIDgoJWVzaSkJCUMgc3RvcmUgQjFtb2RiCisJbW92CSVlYXgsIDEyKCVlc2kpCQlDIHN0b3JlIEIybW9kYgorCXBvcAklZWJ4CisJcG9wCSVlc2kKKwlwb3AJJWVicAorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazcvbW9kXzFfNC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNy9tb2RfMV80LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjc1OTdlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazcvbW9kXzFfNC5hc20KQEAgLTAsMCArMSwyNjAgQEAKK2RubCAgeDg2LTMyIG1wbl9tb2RfMXNfNHAsIHJlcXVpcmluZyBjbW92LgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3Jiam9ybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCQkJICAgIGN5Y2xlcy9saW1iCitDIFA1CQkJCSA/CitDIFA2IG1vZGVsIDAtOCwxMC0xMgkJID8KK0MgUDYgbW9kZWwgOSAgKEJhbmlhcykJCSA/CitDIFA2IG1vZGVsIDEzIChEb3RoYW4pCQkgNgorQyBQNCBtb2RlbCAwICAoV2lsbGFtZXR0ZSkJID8KK0MgUDQgbW9kZWwgMSAgKD8pCQkgPworQyBQNCBtb2RlbCAyICAoTm9ydGh3b29kKQkxNS41CitDIFA0IG1vZGVsIDMgIChQcmVzY290dCkJID8KK0MgUDQgbW9kZWwgNCAgKE5vY29uYSkJCSA/CitDIEFNRCBLNgkJCSA/CitDIEFNRCBLNwkJCSA0Ljc1CitDIEFNRCBLOAkJCSA/CisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX21vZF8xc180cCkKKwlwdXNoCSVlYnAKKwlwdXNoCSVlZGkKKwlwdXNoCSVlc2kKKwlwdXNoCSVlYngKKwlzdWIJJDI4LCAlZXNwCisJbW92CTYwKCVlc3ApLCAlZWRpCQlDIGNwc1tdCisJbW92CTgoJWVkaSksICVlYXgKKwltb3YJMTIoJWVkaSksICVlZHgKKwltb3YJMTYoJWVkaSksICVlY3gKKwltb3YJMjAoJWVkaSksICVlc2kKKwltb3YJMjQoJWVkaSksICVlZGkKKwltb3YJJWVheCwgNCglZXNwKQorCW1vdgklZWR4LCA4KCVlc3ApCisJbW92CSVlY3gsIDEyKCVlc3ApCisJbW92CSVlc2ksIDE2KCVlc3ApCisJbW92CSVlZGksIDIwKCVlc3ApCisJbW92CTUyKCVlc3ApLCAlZWF4CQlDIG4KKwl4b3IJJWVkaSwgJWVkaQorCW1vdgk0OCglZXNwKSwgJWVzaQkJQyB1cAorCWxlYQktMTIoJWVzaSwlZWF4LDQpLCAlZXNpCisJYW5kCSQzLCAlZWF4CisJamUJTChiMCkKKwljbXAJJDIsICVlYXgKKwlqYwlMKGIxKQorCWplCUwoYjIpCisKK0woYjMpOgltb3YJNCglZXNpKSwgJWVheAorCW11bGwJNCglZXNwKQorCW1vdgkoJWVzaSksICVlYnAKKwlhZGQJJWVheCwgJWVicAorCWFkYwklZWR4LCAlZWRpCisJbW92CTgoJWVzaSksICVlYXgKKwltdWxsCTgoJWVzcCkKKwlsZWEJLTEyKCVlc2kpLCAlZXNpCisJam1wCUwobTApCisKK0woYjApOgltb3YJKCVlc2kpLCAlZWF4CisJbXVsbAk0KCVlc3ApCisJbW92CS00KCVlc2kpLCAlZWJwCisJYWRkCSVlYXgsICVlYnAKKwlhZGMJJWVkeCwgJWVkaQorCW1vdgk0KCVlc2kpLCAlZWF4CisJbXVsbAk4KCVlc3ApCisJYWRkCSVlYXgsICVlYnAKKwlhZGMJJWVkeCwgJWVkaQorCW1vdgk4KCVlc2kpLCAlZWF4CisJbXVsbAkxMiglZXNwKQorCWxlYQktMTYoJWVzaSksICVlc2kKKwlqbXAJTChtMCkKKworTChiMSk6CW1vdgk4KCVlc2kpLCAlZWJwCisJbGVhCS00KCVlc2kpLCAlZXNpCisJam1wCUwobTEpCisKK0woYjIpOgltb3YJOCglZXNpKSwgJWVkaQorCW1vdgk0KCVlc2kpLCAlZWJwCisJbGVhCS04KCVlc2kpLCAlZXNpCisJam1wCUwobTEpCisKKwlBTElHTigxNikKK0wodG9wKToJbW92CSglZXNpKSwgJWVheAorCW11bGwJNCglZXNwKQorCW1vdgktNCglZXNpKSwgJWVieAorCXhvcgklZWN4LCAlZWN4CisJYWRkCSVlYXgsICVlYngKKwlhZGMJJWVkeCwgJWVjeAorCW1vdgk0KCVlc2kpLCAlZWF4CisJbXVsbAk4KCVlc3ApCisJYWRkCSVlYXgsICVlYngKKwlhZGMJJWVkeCwgJWVjeAorCW1vdgk4KCVlc2kpLCAlZWF4CisJbXVsbAkxMiglZXNwKQorCWFkZAklZWF4LCAlZWJ4CisJYWRjCSVlZHgsICVlY3gKKwlsZWEJLTE2KCVlc2kpLCAlZXNpCisJbW92CTE2KCVlc3ApLCAlZWF4CisJbXVsCSVlYnAKKwlhZGQJJWVheCwgJWVieAorCWFkYwklZWR4LCAlZWN4CisJbW92CTIwKCVlc3ApLCAlZWF4CisJbXVsCSVlZGkKKwltb3YJJWVieCwgJWVicAorCW1vdgklZWN4LCAlZWRpCitMKG0wKToJYWRkCSVlYXgsICVlYnAKKwlhZGMJJWVkeCwgJWVkaQorTChtMSk6CXN1YmwJJDQsIDUyKCVlc3ApCisJamEJTCh0b3ApCisKK0woZW5kKToJbW92CTQoJWVzcCksICVlYXgKKwltdWwJJWVkaQorCW1vdgk2MCglZXNwKSwgJWVkaQorCWFkZAklZWF4LCAlZWJwCisJYWRjCSQwLCAlZWR4CisJbW92CTQoJWVkaSksICVlY3gKKwltb3YJJWVkeCwgJWVzaQorCW1vdgklZWJwLCAlZWF4CisJc2FsCSVjbCwgJWVzaQorCW1vdgklZWN4LCAlZWJ4CisJbmVnCSVlY3gKKwlzaHIJJWNsLCAlZWF4CisJb3IJJWVzaSwgJWVheAorCWxlYQkxKCVlYXgpLCAlZXNpCisJbXVsbAkoJWVkaSkKKwltb3YJJWVieCwgJWVjeAorCW1vdgklZWF4LCAlZWJ4CisJbW92CSVlYnAsICVlYXgKKwltb3YJNTYoJWVzcCksICVlYnAKKwlzYWwJJWNsLCAlZWF4CisJYWRkCSVlYXgsICVlYngKKwlhZGMJJWVzaSwgJWVkeAorCWltdWwJJWVicCwgJWVkeAorCXN1YgklZWR4LCAlZWF4CisJbGVhCSglZWF4LCVlYnApLCAlZWR4CisJY21wCSVlYXgsICVlYngKKwljbW92YygJJWVkeCwgJWVheCkKKwltb3YJJWVheCwgJWVkeAorCXN1YgklZWJwLCAlZWF4CisJY21vdmMoCSVlZHgsICVlYXgpCisJYWRkCSQyOCwgJWVzcAorCXBvcAklZWJ4CisJcG9wCSVlc2kKKwlwb3AJJWVkaQorCXBvcAklZWJwCisJc2hyCSVjbCwgJWVheAorCXJldAorRVBJTE9HVUUoKQorCisJQUxJR04oMTYpCitQUk9MT0dVRShtcG5fbW9kXzFzXzRwX2NwcykKK0MgQ0FVVElPTjogVGhpcyBpcyB0aGUgc2FtZSBjb2RlIGFzIGluIHBlbnRpdW00L3NzZTIvbW9kXzFfNC5hc20KKwlwdXNoCSVlYnAKKwlwdXNoCSVlZGkKKwlwdXNoCSVlc2kKKwlwdXNoCSVlYngKKwltb3YJMjAoJWVzcCksICVlYnAJCUMgRklYTUU6IGF2b2lkIGJwIGZvciAwLWlkeAorCW1vdgkyNCglZXNwKSwgJWVieAorCWJzcgklZWJ4LCAlZWN4CisJeG9yCSQzMSwgJWVjeAorCXNhbAklY2wsICVlYngJCUMgYiA8PCBjbnQKKwltb3YJJWVieCwgJWVkeAorCW5vdAklZWR4CisJbW92CSQtMSwgJWVheAorCWRpdgklZWJ4CisJeG9yCSVlZGksICVlZGkKKwlzdWIJJWVieCwgJWVkaQorCW1vdgkkMSwgJWVzaQorCW1vdgklZWF4LCAoJWVicCkJCUMgc3RvcmUgYmkKKwltb3YJJWVjeCwgNCglZWJwKQkJQyBzdG9yZSBjbnQKKwlzaGxkCSVjbCwgJWVheCwgJWVzaQorCWltdWwJJWVkaSwgJWVzaQorCW1vdgklZWF4LCAlZWRpCisJbXVsCSVlc2kKKworCWFkZAklZXNpLCAlZWR4CisJc2hyCSVjbCwgJWVzaQorCW1vdgklZXNpLCA4KCVlYnApCQlDIHN0b3JlIEIxbW9kYgorCisJbm90CSVlZHgKKwlpbXVsCSVlYngsICVlZHgKKwlsZWEJKCVlZHgsJWVieCksICVlc2kKKwljbXAJJWVkeCwgJWVheAorCWNtb3ZuYygJJWVkeCwgJWVzaSkKKwltb3YJJWVkaSwgJWVheAorCW11bAklZXNpCisKKwlhZGQJJWVzaSwgJWVkeAorCXNocgklY2wsICVlc2kKKwltb3YJJWVzaSwgMTIoJWVicCkJCUMgc3RvcmUgQjJtb2RiCisKKwlub3QJJWVkeAorCWltdWwJJWVieCwgJWVkeAorCWxlYQkoJWVkeCwlZWJ4KSwgJWVzaQorCWNtcAklZWR4LCAlZWF4CisJY21vdm5jKAklZWR4LCAlZXNpKQorCW1vdgklZWRpLCAlZWF4CisJbXVsCSVlc2kKKworCWFkZAklZXNpLCAlZWR4CisJc2hyCSVjbCwgJWVzaQorCW1vdgklZXNpLCAxNiglZWJwKQkJQyBzdG9yZSBCM21vZGIKKworCW5vdAklZWR4CisJaW11bAklZWJ4LCAlZWR4CisJbGVhCSglZWR4LCVlYngpLCAlZXNpCisJY21wCSVlZHgsICVlYXgKKwljbW92bmMoCSVlZHgsICVlc2kpCisJbW92CSVlZGksICVlYXgKKwltdWwJJWVzaQorCisJYWRkCSVlc2ksICVlZHgKKwlzaHIJJWNsLCAlZXNpCisJbW92CSVlc2ksIDIwKCVlYnApCQlDIHN0b3JlIEI0bW9kYgorCisJbm90CSVlZHgKKwlpbXVsCSVlYngsICVlZHgKKwlhZGQJJWVkeCwgJWVieAorCWNtcAklZWR4LCAlZWF4CisJY21vdm5jKAklZWR4LCAlZWJ4KQorCisJc2hyCSVjbCwgJWVieAorCW1vdgklZWJ4LCAyNCglZWJwKQkJQyBzdG9yZSBCNW1vZGIKKworCXBvcAklZWJ4CisJcG9wCSVlc2kKKwlwb3AJJWVkaQorCXBvcAklZWJwCisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNy9tb2RfMzRsc3ViMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNy9tb2RfMzRsc3ViMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUzYWQwNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s3L21vZF8zNGxzdWIxLmFzbQpAQCAtMCwwICsxLDE4OCBAQAorZG5sICBBTUQgSzcgbXBuX21vZF8zNGxzdWIxIC0tIHJlbWFpbmRlciBtb2R1bG8gMl4yNC0xLgorCitkbmwgIENvcHlyaWdodCAyMDAwLTIwMDIsIDIwMDQsIDIwMDUsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDICAgICAgICAgY3ljbGVzL2xpbWIKK0MgQXRobG9uOiAgICAgMQorQyBIYW1tZXI6ICAgICAxCisKKworQyBtcF9saW1iX3QgbXBuX21vZF8zNGxzdWIxIChtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSkKK0MKK0MgVGhlIGxvb3AgZm9ybSBiZWxvdyBhbmQgdGhlIDY0IGJ5dGUgY29kZSBhbGlnbm1lbnQgc2VlbSBuZWNlc3NhcnkgZm9yIHRoZQorQyBjbGFpbWVkIHNwZWVkLiAgVGhpcyBpcyBhIGJpdCBzdHJhbmdlLCBzaW5jZSBub3JtYWxseSBrNyBpc24ndCB2ZXJ5CitDIHNlbnNpdGl2ZSB0byBzdWNoIHRoaW5ncy4gIFBlcmhhcHMgdGhlcmUgaGFzIHRvIGJlIDYgaW5zdHJ1Y3Rpb25zIGluIHRoZQorQyBmaXJzdCAxNiBieXRlcyBmb3IgdGhlIEJUQiBlbnRyeSBvciBzb21ldGhpbmcuCisKK2RlZmZyYW1lKFBBUkFNX1NJWkUsIDgpCitkZWZmcmFtZShQQVJBTV9TUkMsICA0KQorCitkbmwgIHJlLXVzZSBwYXJhbWV0ZXIgc3BhY2UKK2RlZmluZShTQVZFX0VESSwgYFBBUkFNX1NJWkUnKQorCisJVEVYVAorCUFMSUdOKDY0KQorUFJPTE9HVUUobXBuX21vZF8zNGxzdWIxKQorZGVmbGl0KGBGUkFNRScsMCkKKworCW1vdmwJUEFSQU1fU0laRSwgJWVjeAorCW1vdmwJUEFSQU1fU1JDLCAlZWR4CisKKwlzdWJsCSQyLCAlZWN4CisJamEJTCh0aHJlZV9vcl9tb3JlKQorCisJbW92bAkoJWVkeCksICVlYXgKKwlqYglMKG9uZSkKKworCW1vdmwJNCglZWR4KSwgJWVjeAorCW1vdmwJJWVheCwgJWVkeAorCXNocmwJJDI0LCAlZWF4CQlDIHNyY1swXSBsb3cKKworCWFuZGwJJDB4RkZGRkZGLCAlZWR4CQlDIHNyY1swXSBoaWdoCisJYWRkbAklZWR4LCAlZWF4CisJbW92bAklZWN4LCAlZWR4CisKKwlhbmRsCSQweEZGRkYsICVlY3gKKwlzaHJsCSQxNiwgJWVkeAkJQyBzcmNbMV0gaGlnaAorCWFkZGwJJWVkeCwgJWVheAorCisJc2hsbAkkOCwgJWVjeAkJQyBzcmNbMV0gbG93CisJYWRkbAklZWN4LCAlZWF4CisKK0wob25lKToKKwlyZXQKKworCitMKHRocmVlX29yX21vcmUpOgorCUMgZWF4CisJQyBlYngKKwlDIGVjeAlzaXplLTIKKwlDIGVkeAlzcmMKKwlDIGVzaQorCUMgZWRpCisKKwlwdXNobAklZWJ4CUZSQU1FX3B1c2hsKCkKKwl4b3JsCSVlYXgsICVlYXgKKwl4b3JsCSVlYngsICVlYngKKworCW1vdmwJJWVkaSwgU0FWRV9FREkKKwlwdXNobAklZXNpCUZSQU1FX3B1c2hsKCkKKwl4b3JsCSVlc2ksICVlc2kJCUMgYW5kIGNsZWFyIGNhcnJ5IGZsYWcKKworCisJQyBjb2RlIG9mZnNldCAweDQwIGF0IHRoaXMgcG9pbnQKK0wodG9wKToKKwlDIGVheAlhY2MgMG1vZDMKKwlDIGVieAlhY2MgMW1vZDMKKwlDIGVjeAljb3VudGVyLCBsaW1icworCUMgZWR4CXNyYworCUMgZXNpCWFjYyAybW9kMworCUMgZWRpCisKKwlsZWFsCTI0KCVlZHgpLCAlZWR4CisJbGVhbAktMiglZWN4KSwgJWVjeAorCWFkY2wJLTI0KCVlZHgpLCAlZWF4CisJYWRjbAktMjAoJWVkeCksICVlYngKKwlhZGNsCS0xNiglZWR4KSwgJWVzaQorCisJZGVjbAklZWN4CisJam5nCUwoZG9uZV9sb29wKQorCisJbGVhbAktMiglZWN4KSwgJWVjeAorCWFkY2wJLTEyKCVlZHgpLCAlZWF4CisJYWRjbAktOCglZWR4KSwgJWVieAorCWFkY2wJLTQoJWVkeCksICVlc2kKKworCWRlY2wJJWVjeAorCWpnCUwodG9wKQorCisKKwlsZWFsCTEyKCVlZHgpLCAlZWR4CisKKworTChkb25lX2xvb3ApOgorCUMgZWN4IGlzIC0yLCAtMSBvciAwIHJlcHJlc2VudGluZyAwLCAxIG9yIDIgbW9yZSBsaW1icywgcmVzcGVjdGl2ZWx5CisKKwlpbmNsCSVlY3gKKwltb3ZsCSQweEZGRkZGRkZGLCAlZWRpCisJanMJTChjb21iaW5lKQorCisJYWRjbAktMTIoJWVkeCksICVlYXgKKwlkZWNsCSVlY3gKKwltb3ZsCSQweEZGRkZGRjAwLCAlZWRpCisJanMJTChjb21iaW5lKQorCisJYWRjbAktOCglZWR4KSwgJWVieAorCW1vdmwJJDB4RkZGRjAwMDAsICVlZGkKKworCitMKGNvbWJpbmUpOgorCUMgZWF4CWFjYyAwbW9kMworCUMgZWJ4CWFjYyAxbW9kMworCUMgZWN4CisJQyBlZHgKKwlDIGVzaQlhY2MgMm1vZDMKKwlDIGVkaQltYXNrCisKKwlzYmJsCSVlY3gsICVlY3gJCUMgY2FycnkKKwltb3ZsCSVlYXgsICVlZHgJCUMgMG1vZDMKKwlzaHJsCSQyNCwgJWVheAkJQyAwbW9kMyBoaWdoCisKKwlhbmRsCSVlZGksICVlY3gJCUMgY2FycnkgbWFza2VkCisJYW5kbAkkMHgwMEZGRkZGRiwgJWVkeAlDIDBtb2QzIGxvdworCW1vdmwJJWVieCwgJWVkaQkJQyAxbW9kMworCisJc3VibAklZWN4LCAlZWF4CQlDIGFwcGx5IGNhcnJ5CisJc2hybAkkMTYsICVlYngJCUMgMW1vZDMgaGlnaAorCWFuZGwJJDB4RkZGRiwgJWVkaQorCisJYWRkbAklZWR4LCAlZWF4CQlDIGFwcGx5IDBtb2QzIGxvdworCW1vdmwJJWVzaSwgJWVkeAkJQyAybW9kMworCXNobGwJJDgsICVlZGkJCUMgMW1vZDMgbG93CisKKwlhZGRsCSVlYngsICVlYXgJCUMgYXBwbHkgMW1vZDMgaGlnaAorCXNocmwJJDgsICVlc2kJCUMgMm1vZDMgaGlnaAorCW1vdnpibAklZGwsICVlZHgJCUMgMm1vZDMgbG93CisKKwlhZGRsCSVlZGksICVlYXgJCUMgYXBwbHkgMW1vZDMgbG93CisJc2hsbAkkMTYsICVlZHgJCUMgMm1vZDMgbG93CisKKwlhZGRsCSVlc2ksICVlYXgJCUMgYXBwbHkgMm1vZDMgaGlnaAorCXBvcGwJJWVzaQlGUkFNRV9wb3BsKCkKKworCW1vdmwJU0FWRV9FREksICVlZGkKKwlhZGRsCSVlZHgsICVlYXgJCUMgYXBwbHkgMm1vZDMgbG93CisJcG9wbAklZWJ4CUZSQU1FX3BvcGwoKQorCisJcmV0CisKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s3L21vZGUxby5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNy9tb2RlMW8uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzOTQwMzMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNy9tb2RlMW8uYXNtCkBAIC0wLDAgKzEsMTgxIEBACitkbmwgIEFNRCBLNyBtcG5fbW9kZXhhY3RfMV9vZGQgLS0gZXhhY3QgZGl2aXNpb24gc3R5bGUgcmVtYWluZGVyLgorCitkbmwgIENvcHlyaWdodCAyMDAwLTIwMDIsIDIwMDQsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDICAgICAgICAgIGN5Y2xlcy9saW1iCitDIEF0aGxvbjogICAgIDExLjAKK0MgSGFtbWVyOiAgICAgIDcuMAorCisKK0MgbXBfbGltYl90IG1wbl9tb2RleGFjdF8xX29kZCAobXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUsCitDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wX2xpbWJfdCBkaXZpc29yKTsKK0MgbXBfbGltYl90IG1wbl9tb2RleGFjdF8xY19vZGQgKG1wX3NyY3B0ciBzcmMsIG1wX3NpemVfdCBzaXplLAorQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBfbGltYl90IGRpdmlzb3IsIG1wX2xpbWJfdCBjYXJyeSk7CitDCitDIFdpdGggdGhlIGxvb3AgcnVubmluZyBhdCBqdXN0IDExIGN5Y2xlcyBpdCBkb2Vzbid0IHNlZW0gd29ydGggYm90aGVyaW5nIHRvCitDIGNoZWNrIGZvciBoaWdoPGRpdmlzb3IgdG8gc2F2ZSBvbmUgc3RlcC4KK0MKK0MgVXNpbmcgYSBkaXZsIGZvciBzaXplPT0xIG1lYXN1cmVzIHNsb3dlciB0aGFuIHRoZSBtb2RleGFjdCBtZXRob2QsIHdoaWNoCitDIGlzIG5vdCB0b28gc3VycHJpc2luZyBzaW5jZSBmb3IgdGhlIGxhdHRlciBpdCdzIG9ubHkgYWJvdXQgMjQgY3ljbGVzIHRvCitDIGNhbGN1bGF0ZSB0aGUgbW9kdWxhciBpbnZlcnNlLgorCitkZWZmcmFtZShQQVJBTV9DQVJSWSwgIDE2KQorZGVmZnJhbWUoUEFSQU1fRElWSVNPUiwxMikKK2RlZmZyYW1lKFBBUkFNX1NJWkUsICAgOCkKK2RlZmZyYW1lKFBBUkFNX1NSQywgICAgNCkKKworZGVmZnJhbWUoU0FWRV9FQlgsICAgICAtNCkKK2RlZmZyYW1lKFNBVkVfRVNJLCAgICAgLTgpCitkZWZmcmFtZShTQVZFX0VESSwgICAgLTEyKQorZGVmZnJhbWUoU0FWRV9FQlAsICAgIC0xNikKKworZGVmbGl0KFNUQUNLX1NQQUNFLCAxNikKKworCVRFWFQKKworCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX21vZGV4YWN0XzFjX29kZCkKK2RlZmxpdChgRlJBTUUnLDApCisKKwltb3ZsCVBBUkFNX0NBUlJZLCAlZWN4CisJam1wCUwoc3RhcnRfMWMpCisKK0VQSUxPR1VFKCkKKworCisJQUxJR04oMTYpCitQUk9MT0dVRShtcG5fbW9kZXhhY3RfMV9vZGQpCitkZWZsaXQoYEZSQU1FJywwKQorCisJeG9ybAklZWN4LCAlZWN4CitMKHN0YXJ0XzFjKToKKwltb3ZsCVBBUkFNX0RJVklTT1IsICVlYXgKKwlzdWJsCSRTVEFDS19TUEFDRSwgJWVzcAlGUkFNRV9zdWJsX2VzcChTVEFDS19TUEFDRSkKKworCW1vdmwJJWVzaSwgU0FWRV9FU0kKKwltb3ZsCVBBUkFNX0RJVklTT1IsICVlc2kKKworCW1vdmwJJWVkaSwgU0FWRV9FREkKKworCXNocmwJJWVheAkJCUMgZC8yCisKKwlhbmRsCSQxMjcsICVlYXgKKworaWZkZWYoYFBJQycsYAorCUxFQSgJYmludmVydF9saW1iX3RhYmxlLCAlZWRpKQorCW1vdnpibAkoJWVheCwlZWRpKSwgJWVkaQkJQyBpbnYgOCBiaXRzCisnLGAKKwltb3Z6YmwJYmludmVydF9saW1iX3RhYmxlKCVlYXgpLCAlZWRpCUMgaW52IDggYml0cworJykKKworCXhvcmwJJWVkeCwgJWVkeAkJQyBpbml0aWFsIGV4dHJhIGNhcnJ5CisJbGVhbAkoJWVkaSwlZWRpKSwgJWVheAlDIDIqaW52CisKKwlpbXVsbAklZWRpLCAlZWRpCQlDIGludippbnYKKworCW1vdmwJJWVicCwgU0FWRV9FQlAKKwltb3ZsCVBBUkFNX1NJWkUsICVlYnAKKworCW1vdmwJJWVieCwgU0FWRV9FQlgKKwltb3ZsCVBBUkFNX1NSQywgJWVieAorCisJaW11bGwJJWVzaSwgJWVkaQkJQyBpbnYqaW52KmQKKworCXN1YmwJJWVkaSwgJWVheAkJQyBpbnYgPSAyKmludiAtIGludippbnYqZAorCWxlYWwJKCVlYXgsJWVheCksICVlZGkJQyAyKmludgorCisJaW11bGwJJWVheCwgJWVheAkJQyBpbnYqaW52CisKKwlpbXVsbAklZXNpLCAlZWF4CQlDIGludippbnYqZAorCisJbGVhbAkoJWVieCwlZWJwLDQpLCAlZWJ4CUMgc3JjIGVuZAorCW5lZ2wJJWVicAkJCUMgLXNpemUKKworCXN1YmwJJWVheCwgJWVkaQkJQyBpbnYgPSAyKmludiAtIGludippbnYqZAorCisJQVNTRVJUKGUsYAlDIGQqaW52ID09IDEgbW9kIDJeR01QX0xJTUJfQklUUworCW1vdmwJJWVzaSwgJWVheAorCWltdWxsCSVlZGksICVlYXgKKwljbXBsCSQxLCAlZWF4JykKKworCitDIFRoZSBkZXBlbmRlbnQgY2hhaW4gaGVyZSBpcworQworQyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjeWNsZXMKK0MJc3VibAklZWR4LCAlZWF4CTEKK0MJaW11bGwJJWVkaSwgJWVheAk0CitDCW11bGwJJWVzaQkJNiAgKGhpZ2ggbGltYikKK0MJCQkgICAgICAtLS0tCitDICAgICAgIHRvdGFsCQkgICAgICAgMTEKK0MKK0MgT3V0IG9mIG9yZGVyIGV4ZWN1dGlvbiBoaWRlcyB0aGUgbG9hZCBsYXRlbmN5IGZvciB0aGUgc291cmNlIGRhdGEsIHNvIG5vCitDIHNwZWNpYWwgc2NoZWR1bGluZyBpcyByZXF1aXJlZC4KKworTCh0b3ApOgorCUMgZWF4CXNyYyBsaW1iCisJQyBlYngJc3JjIGVuZCBwdHIKKwlDIGVjeAluZXh0IGNhcnJ5IGJpdCwgMCBvciAxIChvciBpbml0aWFsIGNhcnJ5IHBhcmFtKQorCUMgZWR4CWNhcnJ5IGxpbWIsIGhpZ2ggb2YgbGFzdCBwcm9kdWN0CisJQyBlc2kJZGl2aXNvcgorCUMgZWRpCWludmVyc2UKKwlDIGVicAljb3VudGVyLCBsaW1icywgbmVnYXRpdmUKKworCW1vdmwJKCVlYngsJWVicCw0KSwgJWVheAorCisJc3VibAklZWN4LCAlZWF4CQlDIGFwcGx5IGNhcnJ5IGJpdAorCW1vdmwJJDAsICVlY3gKKworCXNldGMJJWNsCQkJQyBuZXcgY2FycnkgYml0CisKKwlzdWJsCSVlZHgsICVlYXgJCUMgYXBwbHkgY2FycnkgbGltYgorCWFkY2wJJDAsICVlY3gKKworCWltdWxsCSVlZGksICVlYXgKKworCW11bGwJJWVzaQorCisJaW5jbAklZWJwCisJam56CUwodG9wKQorCisKKwltb3ZsCVNBVkVfRVNJLCAlZXNpCisJbW92bAlTQVZFX0VESSwgJWVkaQorCWxlYWwJKCVlY3gsJWVkeCksICVlYXgKKworCW1vdmwJU0FWRV9FQlgsICVlYngKKwltb3ZsCVNBVkVfRUJQLCAlZWJwCisJYWRkbAkkU1RBQ0tfU1BBQ0UsICVlc3AKKworCXJldAorCitFUElMT0dVRSgpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s3L211bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s3L211bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTVjZDJlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazcvbXVsXzEuYXNtCkBAIC0wLDAgKzEsMjM3IEBACitkbmwgIEFNRCBLNyBtcG5fbXVsXzEuCisKK2RubCAgQ29weXJpZ2h0IDE5OTktMjAwMiwgMjAwNSwgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MJCQkgICAgY3ljbGVzL2xpbWIKK0MgUDUKK0MgUDYgbW9kZWwgMC04LDEwLTEyKQorQyBQNiBtb2RlbCA5ICAoQmFuaWFzKQorQyBQNiBtb2RlbCAxMyAoRG90aGFuKQorQyBQNCBtb2RlbCAwICAoV2lsbGFtZXR0ZSkKK0MgUDQgbW9kZWwgMSAgKD8pCitDIFA0IG1vZGVsIDIgIChOb3J0aHdvb2QpCitDIFA0IG1vZGVsIDMgIChQcmVzY290dCkKK0MgUDQgbW9kZWwgNCAgKE5vY29uYSkKK0MgQU1EIEs2CitDIEFNRCBLNwkJCSAzLjI1CitDIEFNRCBLOAorCitDIFRPRE8KK0MgICogSW1wcm92ZSBmZWVkLWluIGFuZCB3aW5kLWRvd24gY29kZS4gIFdlIGJlYXQgdGhlIG9sZCBjb2RlIGZvciBhbGwgbiAhPSAxLAorQyAgICBidXQgd2UgbWlnaHQgYmUgYWJsZSB0byBkbyBldmVuIGJldHRlci4KK0MgICogVGhlIGZlZWQtaW4gY29kZSBmb3IgbXVsXzFjIGlzIGNydWRlLgorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigxNikKK1BST0xPR1VFKG1wbl9tdWxfMWMpCisJYWRkCSQtMTYsICVlc3AKKwltb3YJJWVicCwgKCVlc3ApCisJbW92CSVlYngsIDQoJWVzcCkKKwltb3YJJWVzaSwgOCglZXNwKQorCW1vdgklZWRpLCAxMiglZXNwKQorCisJbW92CTIwKCVlc3ApLCAlZWRpCisJbW92CTI0KCVlc3ApLCAlZXNpCisJbW92CTI4KCVlc3ApLCAlZWJwCisJbW92CTMyKCVlc3ApLCAlZWN4CisJbW92CSVlYnAsICVlYngKKwlzaHIJJDIsICVlYnAKKwltb3YJJWVicCwgMjgoJWVzcCkKKwltb3YJKCVlc2kpLCAlZWF4CisJYW5kCSQzLCAlZWJ4CisJanoJTChjMCkKKwljbXAJJDIsICVlYngKKwltb3YJMzYoJWVzcCksICVlYngKKwlqeglMKGMyKQorCWpnCUwoYzMpCisKK0woYzEpOglsZWEJLTQoJWVkaSksICVlZGkKKwltdWwJJWVjeAorCXRlc3QJJWVicCwgJWVicAorCWpuegkxZgorCWFkZAklZWJ4LCAlZWF4CisJbW92CSVlYXgsIDQoJWVkaSkKKwltb3YJJWVkeCwgJWVheAorCWFkYwklZWJwLCAlZWF4CisJam1wCUwocnQpCisxOglhZGQJJWVheCwgJWVieAorCW1vdgkkMCwgJWVicAorCWFkYwklZWR4LCAlZWJwCisJbW92CTQoJWVzaSksICVlYXgKKwlqbXAJTCgxKQorCitMKGMyKToJbGVhCTQoJWVzaSksICVlc2kKKwltdWwJJWVjeAorCXRlc3QJJWVicCwgJWVicAorCW1vdgklZWJ4LCAlZWJwCisJam56CTJmCisJYWRkCSVlYXgsICVlYnAKKwltb3YJJDAsICVlYngKKwlhZGMJJWVkeCwgJWVieAorCW1vdgkoJWVzaSksICVlYXgKKwlqbXAJTChjajIpCisyOglhZGQJJWVheCwgJWVicAorCW1vdgkkMCwgJWVieAorCWFkYwklZWR4LCAlZWJ4CisJbW92CSglZXNpKSwgJWVheAorCWptcAlMKDIpCisKK0woYzMpOglsZWEJOCglZXNpKSwgJWVzaQorCWxlYQktMTIoJWVkaSksICVlZGkKKwltdWwJJWVjeAorCWFkZAklZWF4LCAlZWJ4CisJbW92CSQwLCAlZWJwCisJYWRjCSVlZHgsICVlYnAKKwltb3YJLTQoJWVzaSksICVlYXgKKwlpbmNsCTI4KCVlc3ApCisJam1wCUwoMykKKworTChjMCk6CW1vdgkzNiglZXNwKSwgJWVieAorCWxlYQktNCglZXNpKSwgJWVzaQorCWxlYQktOCglZWRpKSwgJWVkaQorCW11bAklZWN4CisJbW92CSVlYngsICVlYnAKKwlhZGQJJWVheCwgJWVicAorCW1vdgkkMCwgJWVieAorCWFkYwklZWR4LCAlZWJ4CisJbW92CTgoJWVzaSksICVlYXgKKwlqbXAJTCgwKQorCitFUElMT0dVRSgpCisJQUxJR04oMTYpCitQUk9MT0dVRShtcG5fbXVsXzEpCisJYWRkCSQtMTYsICVlc3AKKwltb3YJJWVicCwgKCVlc3ApCisJbW92CSVlYngsIDQoJWVzcCkKKwltb3YJJWVzaSwgOCglZXNwKQorCW1vdgklZWRpLCAxMiglZXNwKQorCisJbW92CTIwKCVlc3ApLCAlZWRpCisJbW92CTI0KCVlc3ApLCAlZXNpCisJbW92CTI4KCVlc3ApLCAlZWJwCisJbW92CTMyKCVlc3ApLCAlZWN4CisJbW92CSVlYnAsICVlYngKKwlzaHIJJDIsICVlYnAKKwltb3YJJWVicCwgMjgoJWVzcCkKKwltb3YJKCVlc2kpLCAlZWF4CisJYW5kCSQzLCAlZWJ4CisJanoJTChiMCkKKwljbXAJJDIsICVlYngKKwlqeglMKGIyKQorCWpnCUwoYjMpCisKK0woYjEpOglsZWEJLTQoJWVkaSksICVlZGkKKwltdWwJJWVjeAorCXRlc3QJJWVicCwgJWVicAorCWpueglMKGd0MSkKKwltb3YJJWVheCwgNCglZWRpKQorCW1vdgklZWR4LCAlZWF4CisJam1wCUwocnQpCitMKGd0MSk6CW1vdgklZWF4LCAlZWJ4CisJbW92CSVlZHgsICVlYnAKKwltb3YJNCglZXNpKSwgJWVheAorCWptcAlMKDEpCisKK0woYjIpOglsZWEJNCglZXNpKSwgJWVzaQorCW11bAklZWN4CisJdGVzdAklZWJwLCAlZWJwCisJbW92CSVlYXgsICVlYnAKKwltb3YJJWVkeCwgJWVieAorCW1vdgkoJWVzaSksICVlYXgKKwlqbnoJTCgyKQorCWptcAlMKGNqMikKKworTChiMyk6CWxlYQk4KCVlc2kpLCAlZXNpCisJbGVhCS0xMiglZWRpKSwgJWVkaQorCW11bAklZWN4CisJbW92CSVlYXgsICVlYngKKwltb3YJJWVkeCwgJWVicAorCW1vdgktNCglZXNpKSwgJWVheAorCWluY2wJMjgoJWVzcCkKKwlqbXAJTCgzKQorCitMKGIwKToJbGVhCS00KCVlc2kpLCAlZXNpCisJbGVhCS04KCVlZGkpLCAlZWRpCisJbXVsCSVlY3gKKwltb3YJJWVheCwgJWVicAorCW1vdgklZWR4LCAlZWJ4CisJbW92CTgoJWVzaSksICVlYXgKKwlqbXAJTCgwKQorCisJQUxJR04oMTYpCitMKHRvcCk6CW1vdgkkMCwgJWVieAorCWFkYwklZWR4LCAlZWJ4CitMKDIpOgltdWwJJWVjeAorCWFkZAklZWF4LCAlZWJ4CisJbW92CSVlYnAsIDAoJWVkaSkKKwltb3YJNCglZXNpKSwgJWVheAorCW1vdgkkMCwgJWVicAorCWFkYwklZWR4LCAlZWJwCitMKDEpOgltdWwJJWVjeAorCWFkZAklZWF4LCAlZWJwCisJbW92CTgoJWVzaSksICVlYXgKKwltb3YJJWVieCwgNCglZWRpKQorCW1vdgkkMCwgJWVieAorCWFkYwklZWR4LCAlZWJ4CitMKDApOgltb3YJJWVicCwgOCglZWRpKQorCW11bAklZWN4CisJYWRkCSVlYXgsICVlYngKKwltb3YJMTIoJWVzaSksICVlYXgKKwlsZWEJMTYoJWVzaSksICVlc2kKKwltb3YJJDAsICVlYnAKKwlhZGMJJWVkeCwgJWVicAorTCgzKToJbW92CSVlYngsIDEyKCVlZGkpCisJbXVsCSVlY3gKKwlsZWEJMTYoJWVkaSksICVlZGkKKwlhZGQJJWVheCwgJWVicAorCWRlY2wJMjgoJWVzcCkKKwltb3YJMCglZXNpKSwgJWVheAorCWpueglMKHRvcCkKKworTChlbmQpOgltb3YJJDAsICVlYngKKwlhZGMJJWVkeCwgJWVieAorTChjajIpOgltdWwJJWVjeAorCWFkZAklZWF4LCAlZWJ4CisJbW92CSVlYnAsICglZWRpKQorTChjajEpOgltb3YJJWVieCwgNCglZWRpKQorCWFkYwkkMCwgJWVkeAorCW1vdgklZWR4LCAlZWF4CisKK0wocnQpOgltb3YJKCVlc3ApLCAlZWJwCisJbW92CTQoJWVzcCksICVlYngKKwltb3YJOCglZXNwKSwgJWVzaQorCW1vdgkxMiglZXNwKSwgJWVkaQorCWFkZAkkMTYsICVlc3AKKwlyZXQKK0VQSUxPR1VFKCkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazcvbXVsX2Jhc2VjYXNlLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s3L211bF9iYXNlY2FzZS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRmYjUwMAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s3L211bF9iYXNlY2FzZS5hc20KQEAgLTAsMCArMSw2MDIgQEAKK2RubCAgQU1EIEs3IG1wbl9tdWxfYmFzZWNhc2UgLS0gbXVsdGlwbHkgdHdvIG1wbiBudW1iZXJzLgorCitkbmwgIENvcHlyaWdodCAxOTk5LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDIEs3OiBhcHByb3ggNC40MiBjeWNsZXMgcGVyIGNyb3NzIHByb2R1Y3QgYXQgYXJvdW5kIDIweDIwIGxpbWJzICgxNgorQyAgICAgbGltYnMvbG9vcCB1bnJvbGxpbmcpLgorCisKKworZG5sICBLNyBVTlJPTExfQ09VTlQgY3ljbGVzL3Byb2R1Y3QgKGF0IGFyb3VuZCAyMHgyMCkKK2RubCAgICAgICAgICAgOCAgICAgICAgICAgNC42NworZG5sICAgICAgICAgIDE2ICAgICAgICAgICA0LjU5CitkbmwgICAgICAgICAgMzIgICAgICAgICAgIDQuNDIKK2RubCAgTWF4aW11bSBwb3NzaWJsZSB3aXRoIHRoZSBjdXJyZW50IGNvZGUgaXMgMzIuCitkbmwKK2RubCAgQXQgMzIgdGhlIHR5cGljYWwgMTMtMjYgbGltYiBzaXplcyBmcm9tIHRoZSBrYXJhdHN1YmEgY29kZSB3aWxsIGdldAorZG5sICBkb25lIHdpdGggYSBzdHJhaWdodCBydW4gdGhyb3VnaCBhIGJsb2NrIG9mIGNvZGUsIG5vIGlubmVyIGxvb3AuICBVc2luZworZG5sICAzMiBnaXZlcyAxayBvZiBjb2RlLCBidXQgdGhlIGs3IGhhcyBhIDY0ayBMMSBjb2RlIGNhY2hlLgorCitkZWZsaXQoVU5ST0xMX0NPVU5ULCAzMikKKworCitDIHZvaWQgbXBuX211bF9iYXNlY2FzZSAobXBfcHRyIHdwLAorQyAgICAgICAgICAgICAgICAgICAgICAgIG1wX3NyY3B0ciB4cCwgbXBfc2l6ZV90IHhzaXplLAorQyAgICAgICAgICAgICAgICAgICAgICAgIG1wX3NyY3B0ciB5cCwgbXBfc2l6ZV90IHlzaXplKTsKK0MKK0MgQ2FsY3VsYXRlIHhwLHhzaXplIG11bHRpcGxpZWQgYnkgeXAseXNpemUsIHN0b3JpbmcgdGhlIHJlc3VsdCBpbgorQyB3cCx4c2l6ZSt5c2l6ZS4KK0MKK0MgVGhpcyByb3V0aW5lIGlzIGVzc2VudGlhbGx5IHRoZSBzYW1lIGFzIG1wbi9nZW5lcmljL211bF9iYXNlY2FzZS5jLCBidXQKK0MgaXQncyBmYXN0ZXIgYmVjYXVzZSBpdCBkb2VzIG1vc3Qgb2YgdGhlIG1wbl9hZGRtdWxfMSgpIHN0YXJ0dXAKK0MgY2FsY3VsYXRpb25zIG9ubHkgb25jZS4gIFRoZSBzYXZpbmcgaXMgMTUtMjUlIG9uIHR5cGljYWwgc2l6ZXMgY29taW5nIGZyb20KK0MgdGhlIEthcmF0c3ViYSBtdWx0aXBseSBjb2RlLgorCitpZmRlZihgUElDJyxgCitkZWZsaXQoVU5ST0xMX1RIUkVTSE9MRCwgNSkKKycsYAorZGVmbGl0KFVOUk9MTF9USFJFU0hPTEQsIDUpCisnKQorCitkZWZmcmFtZShQQVJBTV9ZU0laRSwyMCkKK2RlZmZyYW1lKFBBUkFNX1lQLCAgIDE2KQorZGVmZnJhbWUoUEFSQU1fWFNJWkUsMTIpCitkZWZmcmFtZShQQVJBTV9YUCwgICA4KQorZGVmZnJhbWUoUEFSQU1fV1AsICAgNCkKKworCVRFWFQKKwlBTElHTigzMikKK1BST0xPR1VFKG1wbl9tdWxfYmFzZWNhc2UpCitkZWZsaXQoYEZSQU1FJywwKQorCisJbW92bAlQQVJBTV9YU0laRSwgJWVjeAorCW1vdmwJUEFSQU1fWVAsICVlYXgKKworCW1vdmwJUEFSQU1fWFAsICVlZHgKKwltb3ZsCSglZWF4KSwgJWVheAlDIHlwIGxvdyBsaW1iCisKKwljbXBsCSQyLCAlZWN4CisJamEJTCh4c2l6ZV9tb3JlX3RoYW5fdHdvKQorCWplCUwodHdvX2J5X3NvbWV0aGluZykKKworCisJQyBvbmUgbGltYiBieSBvbmUgbGltYgorCisJbXVsbAkoJWVkeCkKKworCW1vdmwJUEFSQU1fV1AsICVlY3gKKwltb3ZsCSVlYXgsICglZWN4KQorCW1vdmwJJWVkeCwgNCglZWN4KQorCXJldAorCisKK0MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0wodHdvX2J5X3NvbWV0aGluZyk6CitkZWZsaXQoYEZSQU1FJywwKQorCWRlY2wJUEFSQU1fWVNJWkUKKwlwdXNobAklZWJ4CQlkZWZmcmFtZV9wdXNobChgU0FWRV9FQlgnKQorCW1vdmwJJWVheCwgJWVjeAlDIHlwIGxvdyBsaW1iCisKKwltb3ZsCVBBUkFNX1dQLCAlZWJ4CisJcHVzaGwJJWVzaQkJZGVmZnJhbWVfcHVzaGwoYFNBVkVfRVNJJykKKwltb3ZsCSVlZHgsICVlc2kJQyB4cAorCisJbW92bAkoJWVkeCksICVlYXgJQyB4cCBsb3cgbGltYgorCWpueglMKHR3b19ieV90d28pCisKKworCUMgdHdvIGxpbWJzIGJ5IG9uZSBsaW1iCisKKwltdWxsCSVlY3gKKworCW1vdmwJJWVheCwgKCVlYngpCisJbW92bAk0KCVlc2kpLCAlZWF4CisJbW92bAklZWR4LCAlZXNpCUMgY2FycnkKKworCW11bGwJJWVjeAorCisJYWRkbAklZWF4LCAlZXNpCisKKwltb3ZsCSVlc2ksIDQoJWVieCkKKwltb3ZsCVNBVkVfRVNJLCAlZXNpCisKKwlhZGNsCSQwLCAlZWR4CisKKwltb3ZsCSVlZHgsIDgoJWVieCkKKwltb3ZsCVNBVkVfRUJYLCAlZWJ4CisJYWRkbAkkRlJBTUUsICVlc3AKKworCXJldAorCisKKworQyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQyBDb3VsZCBsb2FkIHlwIGVhcmxpZXIgaW50byBhbm90aGVyIHJlZ2lzdGVyLgorCisJQUxJR04oMTYpCitMKHR3b19ieV90d28pOgorCUMgZWF4CXhwIGxvdyBsaW1iCisJQyBlYngJd3AKKwlDIGVjeAl5cCBsb3cgbGltYgorCUMgZWR4CisJQyBlc2kJeHAKKwlDIGVkaQorCUMgZWJwCisKK2RubCAgRlJBTUUgY2FycmllcyBvbiBmcm9tIHByZXZpb3VzCisKKwltdWxsCSVlY3gJCUMgeHBbMF0gKiB5cFswXQorCisJcHVzaAklZWRpCQlkZWZmcmFtZV9wdXNobChgU0FWRV9FREknKQorCW1vdmwJJWVkeCwgJWVkaQlDIGNhcnJ5LCBmb3Igd3BbMV0KKworCW1vdmwJJWVheCwgKCVlYngpCisJbW92bAk0KCVlc2kpLCAlZWF4CisKKwltdWxsCSVlY3gJCUMgeHBbMV0gKiB5cFswXQorCisJYWRkbAklZWF4LCAlZWRpCisJbW92bAlQQVJBTV9ZUCwgJWVjeAorCisJYWRjbAkkMCwgJWVkeAorCW1vdmwJNCglZWN4KSwgJWVjeAlDIHlwWzFdCisJbW92bAklZWRpLCA0KCVlYngpCisKKwltb3ZsCTQoJWVzaSksICVlYXgJQyB4cFsxXQorCW1vdmwJJWVkeCwgJWVkaQlDIGNhcnJ5LCBmb3Igd3BbMl0KKworCW11bGwJJWVjeAkJQyB4cFsxXSAqIHlwWzFdCisKKwlhZGRsCSVlYXgsICVlZGkKKworCWFkY2wJJDAsICVlZHgKKwltb3ZsCSglZXNpKSwgJWVheAlDIHhwWzBdCisKKwltb3ZsCSVlZHgsICVlc2kJQyBjYXJyeSwgZm9yIHdwWzNdCisKKwltdWxsCSVlY3gJCUMgeHBbMF0gKiB5cFsxXQorCisJYWRkbAklZWF4LCA0KCVlYngpCisJYWRjbAklZWR4LCAlZWRpCisJbW92bAklZWRpLCA4KCVlYngpCisKKwlhZGNsCSQwLCAlZXNpCisJbW92bAlTQVZFX0VESSwgJWVkaQorCW1vdmwJJWVzaSwgMTIoJWVieCkKKworCW1vdmwJU0FWRV9FU0ksICVlc2kKKwltb3ZsCVNBVkVfRUJYLCAlZWJ4CisJYWRkbAkkRlJBTUUsICVlc3AKKworCXJldAorCisKK0MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlBTElHTigxNikKK0woeHNpemVfbW9yZV90aGFuX3R3byk6CisKK0MgVGhlIGZpcnN0IGxpbWIgb2YgeXAgaXMgcHJvY2Vzc2VkIHdpdGggYSBzaW1wbGUgbXBuX211bF8xIHN0eWxlIGxvb3AKK0MgaW5saW5lLiAgVW5yb2xsaW5nIHRoaXMgZG9lc24ndCBzZWVtIHdvcnRod2hpbGUgc2luY2UgaXQncyBvbmx5IHJ1biBvbmNlCitDICh3aGVyZWFzIHRoZSBhZGRtdWwgYmVsb3cgaXMgcnVuIHlzaXplLTEgbWFueSB0aW1lcykuICBBIGNhbGwgdG8gdGhlCitDIGFjdHVhbCBtcG5fbXVsXzEgd2lsbCBiZSBzbG93ZWQgZG93biBieSB0aGUgY2FsbCBhbmQgcGFyYW1ldGVyIHB1c2hpbmcgYW5kCitDIHBvcHBpbmcsIGFuZCBkb2Vzbid0IHNlZW0gbGlrZWx5IHRvIGJlIHdvcnRod2hpbGUgb24gdGhlIHR5cGljYWwgMTMtMjYKK0MgbGltYiBvcGVyYXRpb25zIHRoZSBLYXJhdHN1YmEgY29kZSBjYWxscyBoZXJlIHdpdGguCisKKwlDIGVheAl5cFswXQorCUMgZWJ4CisJQyBlY3gJeHNpemUKKwlDIGVkeAl4cAorCUMgZXNpCisJQyBlZGkKKwlDIGVicAorCitkbmwgIEZSQU1FIGRvZXNuJ3QgY2Fycnkgb24gZnJvbSBwcmV2aW91cywgbm8gcHVzaGVzIHlldCBoZXJlCitkZWZmcmFtZShgU0FWRV9FQlgnLC00KQorZGVmZnJhbWUoYFNBVkVfRVNJJywtOCkKK2RlZmZyYW1lKGBTQVZFX0VESScsLTEyKQorZGVmZnJhbWUoYFNBVkVfRUJQJywtMTYpCitkZWZsaXQoYEZSQU1FJywwKQorCisJc3VibAkkMTYsICVlc3AKK2RlZmxpdChgRlJBTUUnLDE2KQorCisJbW92bAklZWRpLCBTQVZFX0VESQorCW1vdmwJUEFSQU1fV1AsICVlZGkKKworCW1vdmwJJWVieCwgU0FWRV9FQlgKKwltb3ZsCSVlYnAsIFNBVkVfRUJQCisJbW92bAklZWF4LCAlZWJwCisKKwltb3ZsCSVlc2ksIFNBVkVfRVNJCisJeG9ybAklZWJ4LCAlZWJ4CisJbGVhbAkoJWVkeCwlZWN4LDQpLCAlZXNpCUMgeHAgZW5kCisKKwlsZWFsCSglZWRpLCVlY3gsNCksICVlZGkJQyB3cCBlbmQgb2YgbXVsMQorCW5lZ2wJJWVjeAorCisKK0wobXVsMSk6CisJQyBlYXgJc2NyYXRjaAorCUMgZWJ4CWNhcnJ5CisJQyBlY3gJY291bnRlciwgbmVnYXRpdmUKKwlDIGVkeAlzY3JhdGNoCisJQyBlc2kJeHAgZW5kCisJQyBlZGkJd3AgZW5kIG9mIG11bDEKKwlDIGVicAltdWx0aXBsaWVyCisKKwltb3ZsCSglZXNpLCVlY3gsNCksICVlYXgKKworCW11bGwJJWVicAorCisJYWRkbAklZWJ4LCAlZWF4CisJbW92bAklZWF4LCAoJWVkaSwlZWN4LDQpCisJbW92bAkkMCwgJWVieAorCisJYWRjbAklZWR4LCAlZWJ4CisJaW5jbAklZWN4CisJam56CUwobXVsMSkKKworCisJbW92bAlQQVJBTV9ZU0laRSwgJWVkeAorCW1vdmwJUEFSQU1fWFNJWkUsICVlY3gKKworCW1vdmwJJWVieCwgKCVlZGkpCQlDIGZpbmFsIGNhcnJ5CisJZGVjbAklZWR4CisKKwlqbnoJTCh5c2l6ZV9tb3JlX3RoYW5fb25lKQorCisKKwltb3ZsCVNBVkVfRURJLCAlZWRpCisJbW92bAlTQVZFX0VCWCwgJWVieAorCisJbW92bAlTQVZFX0VCUCwgJWVicAorCW1vdmwJU0FWRV9FU0ksICVlc2kKKwlhZGRsCSRGUkFNRSwgJWVzcAorCisJcmV0CisKKworTCh5c2l6ZV9tb3JlX3RoYW5fb25lKToKKwljbXBsCSRVTlJPTExfVEhSRVNIT0xELCAlZWN4CisJbW92bAlQQVJBTV9ZUCwgJWVheAorCisJamFlCUwodW5yb2xsKQorCisKK0MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlDIHNpbXBsZSBhZGRtdWwgbG9vcGluZworCUMKKwlDIGVheAl5cAorCUMgZWJ4CisJQyBlY3gJeHNpemUKKwlDIGVkeAl5c2l6ZS0xCisJQyBlc2kJeHAgZW5kCisJQyBlZGkJd3AgZW5kIG9mIG11bDEKKwlDIGVicAorCisJbGVhbAk0KCVlYXgsJWVkeCw0KSwgJWVicAlDIHlwIGVuZAorCW5lZ2wJJWVjeAorCW5lZ2wJJWVkeAorCisJbW92bAkoJWVzaSwlZWN4LDQpLCAlZWF4CUMgeHAgbG93IGxpbWIKKwltb3ZsCSVlZHgsIFBBUkFNX1lTSVpFCUMgLSh5c2l6ZS0xKQorCWluY2wJJWVjeAorCisJeG9ybAklZWJ4LCAlZWJ4CQlDIGluaXRpYWwgY2FycnkKKwltb3ZsCSVlY3gsIFBBUkFNX1hTSVpFCUMgLSh4c2l6ZS0xKQorCW1vdmwJJWVicCwgUEFSQU1fWVAKKworCW1vdmwJKCVlYnAsJWVkeCw0KSwgJWVicAlDIHlwIHNlY29uZCBsb3dlc3QgbGltYiAtIG11bHRpcGxpZXIKKwlqbXAJTChzaW1wbGVfb3V0ZXJfZW50cnkpCisKKworCUMgdGhpcyBpcyBvZmZzZXQgMHgxMjEgc28gY2xvc2UgZW5vdWdoIHRvIGFsaWduZWQKK0woc2ltcGxlX291dGVyX3RvcCk6CisJQyBlYnAJeXNpemUgY291bnRlciwgbmVnYXRpdmUKKworCW1vdmwJUEFSQU1fWVAsICVlZHgKKwltb3ZsCVBBUkFNX1hTSVpFLCAlZWN4CUMgLSh4c2l6ZS0xKQorCXhvcmwJJWVieCwgJWVieAkJQyBjYXJyeQorCisJbW92bAklZWJwLCBQQVJBTV9ZU0laRQorCWFkZGwJJDQsICVlZGkJCUMgbmV4dCBwb3NpdGlvbiBpbiB3cAorCisJbW92bAkoJWVkeCwlZWJwLDQpLCAlZWJwCUMgeXAgbGltYiAtIG11bHRpcGxpZXIKKwltb3ZsCS00KCVlc2ksJWVjeCw0KSwgJWVheAlDIHhwIGxvdyBsaW1iCisKKworTChzaW1wbGVfb3V0ZXJfZW50cnkpOgorCitMKHNpbXBsZV9pbm5lcik6CisJQyBlYXgJeHAgbGltYgorCUMgZWJ4CWNhcnJ5IGxpbWIKKwlDIGVjeAlsb29wIGNvdW50ZXIgKG5lZ2F0aXZlKQorCUMgZWR4CXNjcmF0Y2gKKwlDIGVzaQl4cCBlbmQKKwlDIGVkaQl3cCBlbmQKKwlDIGVicAltdWx0aXBsaWVyCisKKwltdWxsCSVlYnAKKworCWFkZGwJJWVheCwgJWVieAorCWFkY2wJJDAsICVlZHgKKworCWFkZGwJJWVieCwgKCVlZGksJWVjeCw0KQorCW1vdmwJKCVlc2ksJWVjeCw0KSwgJWVheAorCWFkY2wJJDAsICVlZHgKKworCWluY2wJJWVjeAorCW1vdmwJJWVkeCwgJWVieAorCWpueglMKHNpbXBsZV9pbm5lcikKKworCisJbXVsbAklZWJwCisKKwltb3ZsCVBBUkFNX1lTSVpFLCAlZWJwCisJYWRkbAklZWF4LCAlZWJ4CisKKwlhZGNsCSQwLCAlZWR4CisJYWRkbAklZWJ4LCAoJWVkaSkKKworCWFkY2wJJDAsICVlZHgKKwlpbmNsCSVlYnAKKworCW1vdmwJJWVkeCwgNCglZWRpKQorCWpueglMKHNpbXBsZV9vdXRlcl90b3ApCisKKworCW1vdmwJU0FWRV9FQlgsICVlYngKKwltb3ZsCVNBVkVfRVNJLCAlZXNpCisKKwltb3ZsCVNBVkVfRURJLCAlZWRpCisJbW92bAlTQVZFX0VCUCwgJWVicAorCWFkZGwJJEZSQU1FLCAlZXNwCisKKwlyZXQKKworCisKK0MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0MKK0MgVGhlIHVucm9sbGVkIGxvb3AgaXMgdGhlIHNhbWUgYXMgaW4gbXBuX2FkZG11bF8xKCksIHNlZSB0aGF0IGNvZGUgZm9yIHNvbWUKK0MgY29tbWVudHMuCitDCitDIFZBUl9BREpVU1QgaXMgdGhlIG5lZ2F0aXZlIG9mIGhvdyBtYW55IGxpbWJzIHRoZSBsZWFscyBpbiB0aGUgaW5uZXIgbG9vcAorQyBpbmNyZW1lbnQgeHAgYW5kIHdwLiAgVGhpcyBpcyB1c2VkIHRvIGFkanVzdCBiYWNrIHhwIGFuZCB3cCwgYW5kIHJzaGlmdGVkCitDIHRvIGdpdmVuIGFuIGluaXRpYWwgVkFSX0NPVU5URVIgYXQgdGhlIHRvcCBvZiB0aGUgb3V0ZXIgbG9vcC4KK0MKK0MgVkFSX0NPVU5URVIgaXMgZm9yIHRoZSB1bnJvbGxlZCBsb29wLCBydW5uaW5nIGZyb20gVkFSX0FESlVTVC9VTlJPTExfQ09VTlQKK0MgdXAgdG8gLTEsIGluY2x1c2l2ZS4KK0MKK0MgVkFSX0pNUCBpcyB0aGUgY29tcHV0ZWQganVtcCBpbnRvIHRoZSB1bnJvbGxlZCBsb29wLgorQworQyBWQVJfWFBfTE9XIGlzIHRoZSBsZWFzdCBzaWduaWZpY2FudCBsaW1iIG9mIHhwLCB3aGljaCBpcyBuZWVkZWQgYXQgdGhlCitDIHN0YXJ0IG9mIHRoZSB1bnJvbGxlZCBsb29wLgorQworQyBQQVJBTV9ZU0laRSBpcyB0aGUgb3V0ZXIgbG9vcCBjb3VudGVyLCBnb2luZyBmcm9tIC0oeXNpemUtMSkgdXAgdG8gLTEsCitDIGluY2x1c2l2ZS4KK0MKK0MgUEFSQU1fWVAgaXMgb2Zmc2V0IGFwcHJvcHJpYXRlbHkgc28gdGhhdCB0aGUgUEFSQU1fWVNJWkUgY291bnRlciBjYW4gYmUKK0MgYWRkZWQgdG8gZ2l2ZSB0aGUgbG9jYXRpb24gb2YgdGhlIG5leHQgbGltYiBvZiB5cCwgd2hpY2ggaXMgdGhlIG11bHRpcGxpZXIKK0MgaW4gdGhlIHVucm9sbGVkIGxvb3AuCitDCitDIFRoZSB0cmljayB3aXRoIFZBUl9BREpVU1QgbWVhbnMgaXQncyBvbmx5IG5lY2Vzc2FyeSB0byBkbyBvbmUgZmV0Y2ggaW4gdGhlCitDIG91dGVyIGxvb3AgdG8gdGFrZSBjYXJlIG9mIHhwLCB3cCBhbmQgdGhlIGlubmVyIGxvb3AgY291bnRlci4KKworZGVmZnJhbWUoVkFSX0NPVU5URVIsICAtMjApCitkZWZmcmFtZShWQVJfQURKVVNULCAgIC0yNCkKK2RlZmZyYW1lKFZBUl9KTVAsICAgICAgLTI4KQorZGVmZnJhbWUoVkFSX1hQX0xPVywgICAtMzIpCitkZWZsaXQoVkFSX0VYVFJBX1NQQUNFLCAxNikKKworCitMKHVucm9sbCk6CisJQyBlYXgJeXAKKwlDIGVieAorCUMgZWN4CXhzaXplCisJQyBlZHgJeXNpemUtMQorCUMgZXNpCXhwIGVuZAorCUMgZWRpCXdwIGVuZCBvZiBtdWwxCisJQyBlYnAKKworCW1vdmwJUEFSQU1fWFAsICVlc2kKKwltb3ZsCTQoJWVheCksICVlYnAJCUMgbXVsdGlwbGllciAoeXAgc2Vjb25kIGxpbWIpCisJbGVhbAk0KCVlYXgsJWVkeCw0KSwgJWVheAlDIHlwIGFkanVzdCBmb3IgeXNpemUgaW5kZXhpbmcKKworCW1vdmwJUEFSQU1fV1AsICVlZGkKKwltb3ZsCSVlYXgsIFBBUkFNX1lQCisJbmVnbAklZWR4CisKKwltb3ZsCSVlZHgsIFBBUkFNX1lTSVpFCisJbGVhbAlVTlJPTExfQ09VTlQtMiglZWN4KSwgJWVieAlDICh4c2l6ZS0xKStVTlJPTExfQ09VTlQtMQorCWRlY2wJJWVjeAkJCQlDIHhzaXplLTEKKworCW1vdmwJKCVlc2kpLCAlZWF4CQlDIHhwIGxvdyBsaW1iCisJYW5kbAkkLVVOUk9MTF9NQVNLLTEsICVlYngKKwluZWdsCSVlY3gKKworCXN1YmwJJFZBUl9FWFRSQV9TUEFDRSwgJWVzcAorZGVmbGl0KGBGUkFNRScsMTYrVkFSX0VYVFJBX1NQQUNFKQorCW5lZ2wJJWVieAorCWFuZGwJJFVOUk9MTF9NQVNLLCAlZWN4CisKKwltb3ZsCSVlYngsIFZBUl9BREpVU1QKKwltb3ZsCSVlY3gsICVlZHgKKwlzaGxsCSQ0LCAlZWN4CisKKwlzYXJsCSRVTlJPTExfTE9HMiwgJWVieAorCisJQyAxNyBjb2RlIGJ5dGVzIHBlciBsaW1iCitpZmRlZihgUElDJyxgCisJY2FsbAlMKHBpY19jYWxjKQorTCh1bnJvbGxfaGVyZSk6CisnLGAKKwlsZWFsCUwodW5yb2xsX2VudHJ5KSAoJWVjeCwlZWR4LDEpLCAlZWN4CisnKQorCW5lZ2wJJWVkeAorCisJbW92bAklZWF4LCBWQVJfWFBfTE9XCisJbW92bAklZWN4LCBWQVJfSk1QCisJbGVhbAk0KCVlZGksJWVkeCw0KSwgJWVkaQlDIHdwIGFuZCB4cCwgYWRqdXN0IGZvciB1bnJvbGxpbmcsCisJbGVhbAk0KCVlc2ksJWVkeCw0KSwgJWVzaQlDICBhbmQgc3RhcnQgYXQgc2Vjb25kIGxpbWIKKwlqbXAJTCh1bnJvbGxfb3V0ZXJfZW50cnkpCisKKworaWZkZWYoYFBJQycsYAorTChwaWNfY2FsYyk6CisJQyBTZWUgbXBuL3g4Ni9SRUFETUUgYWJvdXQgb2xkIGdhcyBidWdzCisJbGVhbAkoJWVjeCwlZWR4LDEpLCAlZWN4CisJYWRkbAkkTCh1bnJvbGxfZW50cnkpLUwodW5yb2xsX2hlcmUpLCAlZWN4CisJYWRkbAkoJWVzcCksICVlY3gKKwlyZXRfaW50ZXJuYWwKKycpCisKKworQyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUFMSUdOKDMyKQorTCh1bnJvbGxfb3V0ZXJfdG9wKToKKwlDIGVicAl5c2l6ZSBjb3VudGVyLCBuZWdhdGl2ZQorCisJbW92bAlWQVJfQURKVVNULCAlZWJ4CisJbW92bAlQQVJBTV9ZUCwgJWVkeAorCisJbW92bAlWQVJfWFBfTE9XLCAlZWF4CisJbW92bAklZWJwLCBQQVJBTV9ZU0laRQlDIHN0b3JlIGluY3JlbWVudGVkIHlzaXplIGNvdW50ZXIKKworCWxlYWwJNCglZWRpLCVlYngsNCksICVlZGkKKwlsZWFsCSglZXNpLCVlYngsNCksICVlc2kKKwlzYXJsCSRVTlJPTExfTE9HMiwgJWVieAorCisJbW92bAkoJWVkeCwlZWJwLDQpLCAlZWJwCUMgeXAgbmV4dCBtdWx0aXBsaWVyCisJbW92bAlWQVJfSk1QLCAlZWN4CisKK0wodW5yb2xsX291dGVyX2VudHJ5KToKKwltdWxsCSVlYnAKKworCXRlc3RiCSQxLCAlY2wJCUMgYW5kIGNsZWFyIGNhcnJ5IGJpdAorCW1vdmwJJWVieCwgVkFSX0NPVU5URVIKKwltb3ZsCSQwLCAlZWJ4CisKKwltb3ZsCSQwLCAlZWN4CisJY21vdnooCSVlYXgsICVlY3gpCUMgZWF4IGludG8gbG93IGNhcnJ5LCB6ZXJvIGludG8gaGlnaCBjYXJyeSBsaW1iCisJY21vdm56KAklZWF4LCAlZWJ4KQorCisJQyBFeHRyYSBmZXRjaCBvZiBWQVJfSk1QIGlzIGJhZCwgYnV0IHJlZ2lzdGVycyBhcmUgdGlnaHQKKwlqbXAJKlZBUl9KTVAKKworCitDIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJQUxJR04oMzIpCitMKHVucm9sbF90b3ApOgorCUMgZWF4CXhwIGxpbWIKKwlDIGVieAljYXJyeSBoaWdoCisJQyBlY3gJY2FycnkgbG93CisJQyBlZHgJc2NyYXRjaAorCUMgZXNpCXhwKzgKKwlDIGVkaQl3cAorCUMgZWJwCXlwIG11bHRpcGxpZXIgbGltYgorCUMKKwlDIFZBUl9DT1VOVEVSICBsb29wIGNvdW50ZXIsIG5lZ2F0aXZlCisJQworCUMgMTcgYnl0ZXMgZWFjaCBsaW1iCisKK0wodW5yb2xsX2VudHJ5KToKKworZGVmbGl0KENIVU5LX0NPVU5ULDIpCitmb3Jsb29wKGBpJywgMCwgVU5ST0xMX0NPVU5UL0NIVU5LX0NPVU5ULTEsIGAKKwlkZWZsaXQoYGRpc3AwJywgZXZhbChpKkNIVU5LX0NPVU5UKjQgaWZlbHNlKFVOUk9MTF9CWVRFUywyNTYsLTEyOCkpKQorCWRlZmxpdChgZGlzcDEnLCBldmFsKGRpc3AwICsgNCkpCisKK1pkaXNwKAltb3ZsLAlkaXNwMCwoJWVzaSksICVlYXgpCisJYWRjbAklZWR4LCAlZWJ4CisKKwltdWxsCSVlYnAKKworWmRpc3AoCWFkZGwsCSVlY3gsIGRpc3AwLCglZWRpKSkKKwltb3ZsCSQwLCAlZWN4CisKKwlhZGNsCSVlYXgsICVlYngKKworCisJbW92bAlkaXNwMSglZXNpKSwgJWVheAorCWFkY2wJJWVkeCwgJWVjeAorCisJbXVsbAklZWJwCisKKwlhZGRsCSVlYngsIGRpc3AxKCVlZGkpCisJbW92bAkkMCwgJWVieAorCisJYWRjbAklZWF4LCAlZWN4CisnKQorCisKKwlpbmNsCVZBUl9DT1VOVEVSCisJbGVhbAlVTlJPTExfQllURVMoJWVzaSksICVlc2kKKwlsZWFsCVVOUk9MTF9CWVRFUyglZWRpKSwgJWVkaQorCisJam56CUwodW5yb2xsX3RvcCkKKworCisJQyBlYXgKKwlDIGVieAl6ZXJvCisJQyBlY3gJbG93CisJQyBlZHgJaGlnaAorCUMgZXNpCisJQyBlZGkJd3AsIHBvaW50aW5nIGF0IHNlY29uZCBsYXN0IGxpbWIpCisJQyBlYnAKKwlDCisJQyBjYXJyeSBmbGFnIHRvIGJlIGFkZGVkIHRvIGhpZ2gKKworZGVmbGl0KGBkaXNwMCcsIGlmZWxzZShVTlJPTExfQllURVMsMjU2LC0xMjgpKQorZGVmbGl0KGBkaXNwMScsIGV2YWwoZGlzcDAtMCArIDQpKQorCisJbW92bAlQQVJBTV9ZU0laRSwgJWVicAorCWFkY2wJJDAsICVlZHgKKwlhZGRsCSVlY3gsIGRpc3AwKCVlZGkpCisKKwlhZGNsCSQwLCAlZWR4CisJaW5jbAklZWJwCisKKwltb3ZsCSVlZHgsIGRpc3AxKCVlZGkpCisJam56CUwodW5yb2xsX291dGVyX3RvcCkKKworCisJbW92bAlTQVZFX0VTSSwgJWVzaQorCW1vdmwJU0FWRV9FQlAsICVlYnAKKworCW1vdmwJU0FWRV9FREksICVlZGkKKwltb3ZsCVNBVkVfRUJYLCAlZWJ4CisJYWRkbAkkRlJBTUUsICVlc3AKKworCXJldAorCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rNy9zcXJfYmFzZWNhc2UuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazcvc3FyX2Jhc2VjYXNlLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjZhOTdlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazcvc3FyX2Jhc2VjYXNlLmFzbQpAQCAtMCwwICsxLDYzNSBAQAorZG5sICBBTUQgSzcgbXBuX3Nxcl9iYXNlY2FzZSAtLSBzcXVhcmUgYW4gbXBuIG51bWJlci4KKworZG5sICBDb3B5cmlnaHQgMTk5OS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQyBLNzogYXBwcm94IDIuMyBjeWNsZXMvY3Jvc3Nwcm9kdWN0LCBvciA0LjU1IGN5Y2xlcy90cmlhbmd1bGFyIHByb2R1Y3QKK0MgICAgIChtZWFzdXJlZCBvbiB0aGUgc3BlZWQgZGlmZmVyZW5jZSBiZXR3ZWVuIDI1IGFuZCA1MCBsaW1icywgd2hpY2ggaXMKK0MgICAgIHJvdWdobHkgdGhlIEthcmF0c3ViYSByZWN1cnNpbmcgcmFuZ2UpLgorCisKK2RubCAgVGhlc2UgYXJlIHRoZSBzYW1lIGFzIG1wbi94ODYvazYvc3FyX2Jhc2VjYXNlLmFzbSwgc2VlIHRoYXQgY29kZSBmb3IKK2RubCAgc29tZSBjb21tZW50cy4KKworZGVmbGl0KFNRUl9UT09NMl9USFJFU0hPTERfTUFYLCA2NikKKworaWZkZWYoYFNRUl9UT09NMl9USFJFU0hPTERfT1ZFUlJJREUnLAorYGRlZmluZShgU1FSX1RPT00yX1RIUkVTSE9MRCcsU1FSX1RPT00yX1RIUkVTSE9MRF9PVkVSUklERSknKQorCittNF9jb25maWdfZ21wX21wYXJhbShgU1FSX1RPT00yX1RIUkVTSE9MRCcpCitkZWZsaXQoVU5ST0xMX0NPVU5ULCBldmFsKFNRUl9UT09NMl9USFJFU0hPTEQtMykpCisKKworQyB2b2lkIG1wbl9zcXJfYmFzZWNhc2UgKG1wX3B0ciBkc3QsIG1wX3NyY3B0ciBzcmMsIG1wX3NpemVfdCBzaXplKTsKK0MKK0MgV2l0aCBhIFNRUl9UT09NMl9USFJFU0hPTEQgYXJvdW5kIDUwIHRoaXMgY29kZSBpcyBhYm91dCAxNTAwIGJ5dGVzLAorQyB3aGljaCBpcyBxdWl0ZSBhIGJpdCwgYnV0IGlzIGNvbnNpZGVyZWQgZ29vZCB2YWx1ZSBzaW5jZSBzcXVhcmVzIGJpZworQyBlbm91Z2ggdG8gdXNlIG1vc3Qgb2YgdGhlIGNvZGUgd2lsbCBiZSBzcGVuZGluZyBxdWl0ZSBhIGZldyBjeWNsZXMgaW4gaXQuCisKKworZGVmZnJhbWUoUEFSQU1fU0laRSwxMikKK2RlZmZyYW1lKFBBUkFNX1NSQywgOCkKK2RlZmZyYW1lKFBBUkFNX0RTVCwgNCkKKworCVRFWFQKKwlBTElHTigzMikKK1BST0xPR1VFKG1wbl9zcXJfYmFzZWNhc2UpCitkZWZsaXQoYEZSQU1FJywwKQorCisJbW92bAlQQVJBTV9TSVpFLCAlZWN4CisJbW92bAlQQVJBTV9TUkMsICVlYXgKKwljbXBsCSQyLCAlZWN4CisKKwltb3ZsCVBBUkFNX0RTVCwgJWVkeAorCWplCUwodHdvX2xpbWJzKQorCWphCUwodGhyZWVfb3JfbW9yZSkKKworCitDLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDIG9uZSBsaW1iIG9ubHkKKwlDIGVheAlzcmMKKwlDIGVjeAlzaXplCisJQyBlZHgJZHN0CisKKwltb3ZsCSglZWF4KSwgJWVheAorCW1vdmwJJWVkeCwgJWVjeAorCisJbXVsbAklZWF4CisKKwltb3ZsCSVlZHgsIDQoJWVjeCkKKwltb3ZsCSVlYXgsICglZWN4KQorCXJldAorCisKK0MtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0MKK0MgVXNpbmcgdGhlIHJlYWQvbW9kaWZ5L3dyaXRlICJhZGQicyBzZWVtcyB0byBiZSBmYXN0ZXIgdGhhbiBzYXZpbmcgYW5kCitDIHJlc3RvcmluZyByZWdpc3RlcnMuICBQZXJoYXBzIHRoZSBsb2FkcyBmb3IgdGhlIGZpcnN0IHNldCBoaWRlIHVuZGVyIHRoZQorQyBtdWwgbGF0ZW5jeSBhbmQgdGhlIHNlY29uZCBnZXRzIHN0b3JlIHRvIGxvYWQgZm9yd2FyZGluZy4KKworCUFMSUdOKDE2KQorTCh0d29fbGltYnMpOgorCUMgZWF4CXNyYworCUMgZWJ4CisJQyBlY3gJc2l6ZQorCUMgZWR4CWRzdAorZGVmbGl0KGBGUkFNRScsMCkKKworCXB1c2hsCSVlYngJCUZSQU1FX3B1c2hsKCkKKwltb3ZsCSVlYXgsICVlYngJQyBzcmMKKwltb3ZsCSglZWF4KSwgJWVheAorCisJbW92bAklZWR4LCAlZWN4CUMgZHN0CisKKwltdWxsCSVlYXgJCUMgc3JjWzBdXjIKKworCW1vdmwJJWVheCwgKCVlY3gpCUMgZHN0WzBdCisJbW92bAk0KCVlYngpLCAlZWF4CisKKwltb3ZsCSVlZHgsIDQoJWVjeCkJQyBkc3RbMV0KKworCW11bGwJJWVheAkJQyBzcmNbMV1eMgorCisJbW92bAklZWF4LCA4KCVlY3gpCUMgZHN0WzJdCisJbW92bAkoJWVieCksICVlYXgKKworCW1vdmwJJWVkeCwgMTIoJWVjeCkJQyBkc3RbM10KKworCW11bGwJNCglZWJ4KQkJQyBzcmNbMF0qc3JjWzFdCisKKwlwb3BsCSVlYngKKworCWFkZGwJJWVheCwgNCglZWN4KQorCWFkY2wJJWVkeCwgOCglZWN4KQorCWFkY2wJJDAsIDEyKCVlY3gpCisJQVNTRVJUKG5jKQorCisJYWRkbAklZWF4LCA0KCVlY3gpCisJYWRjbAklZWR4LCA4KCVlY3gpCisJYWRjbAkkMCwgMTIoJWVjeCkKKwlBU1NFUlQobmMpCisKKwlyZXQKKworCitDLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkZWZmcmFtZShTQVZFX0VCWCwgIC00KQorZGVmZnJhbWUoU0FWRV9FU0ksICAtOCkKK2RlZmZyYW1lKFNBVkVfRURJLCAtMTIpCitkZWZmcmFtZShTQVZFX0VCUCwgLTE2KQorZGVmbGl0KFNUQUNLX1NQQUNFLCAxNikKKworTCh0aHJlZV9vcl9tb3JlKToKKwlzdWJsCSRTVEFDS19TUEFDRSwgJWVzcAorCWNtcGwJJDQsICVlY3gKKwlqYWUJTChmb3VyX29yX21vcmUpCitkZWZsaXQoYEZSQU1FJyxTVEFDS19TUEFDRSkKKworCitDLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDIFRocmVlIGxpbWJzCitDCitDIFdyaXRpbmcgb3V0IHRoZSBsb2FkcyBhbmQgc3RvcmVzIHNlcGFyYXRlbHkgYXQgdGhlIGVuZCBvZiB0aGlzIGNvZGUgY29tZXMKK0Mgb3V0IGFib3V0IDEwIGN5Y2xlcyBmYXN0ZXIgdGhhbiB1c2luZyBhZGNscyB0byBtZW1vcnkuCisKKwlDIGVheAlzcmMKKwlDIGVjeAlzaXplCisJQyBlZHgJZHN0CisKKwltb3ZsCSVlYngsIFNBVkVfRUJYCisJbW92bAklZWF4LCAlZWJ4CUMgc3JjCisJbW92bAkoJWVheCksICVlYXgKKworCW1vdmwJJWVkeCwgJWVjeAlDIGRzdAorCW1vdmwJJWVzaSwgU0FWRV9FU0kKKwltb3ZsCSVlZGksIFNBVkVfRURJCisKKwltdWxsCSVlYXgJCUMgc3JjWzBdIF4gMgorCisJbW92bAklZWF4LCAoJWVjeCkKKwltb3ZsCTQoJWVieCksICVlYXgKKwltb3ZsCSVlZHgsIDQoJWVjeCkKKworCW11bGwJJWVheAkJQyBzcmNbMV0gXiAyCisKKwltb3ZsCSVlYXgsIDgoJWVjeCkKKwltb3ZsCTgoJWVieCksICVlYXgKKwltb3ZsCSVlZHgsIDEyKCVlY3gpCisKKwltdWxsCSVlYXgJCUMgc3JjWzJdIF4gMgorCisJbW92bAklZWF4LCAxNiglZWN4KQorCW1vdmwJKCVlYngpLCAlZWF4CisJbW92bAklZWR4LCAyMCglZWN4KQorCisJbXVsbAk0KCVlYngpCQlDIHNyY1swXSAqIHNyY1sxXQorCisJbW92bAklZWF4LCAlZXNpCisJbW92bAkoJWVieCksICVlYXgKKwltb3ZsCSVlZHgsICVlZGkKKworCW11bGwJOCglZWJ4KQkJQyBzcmNbMF0gKiBzcmNbMl0KKworCWFkZGwJJWVheCwgJWVkaQorCW1vdmwJJWVicCwgU0FWRV9FQlAKKwltb3ZsCSQwLCAlZWJwCisKKwltb3ZsCTQoJWVieCksICVlYXgKKwlhZGNsCSVlZHgsICVlYnAKKworCW11bGwJOCglZWJ4KQkJQyBzcmNbMV0gKiBzcmNbMl0KKworCXhvcmwJJWVieCwgJWVieAorCWFkZGwJJWVheCwgJWVicAorCisJYWRjbAkkMCwgJWVkeAorCisJQyBlYXgKKwlDIGVieAl6ZXJvLCB3aWxsIGJlIGRzdFs1XQorCUMgZWN4CWRzdAorCUMgZWR4CWRzdFs0XQorCUMgZXNpCWRzdFsxXQorCUMgZWRpCWRzdFsyXQorCUMgZWJwCWRzdFszXQorCisJYWRjbAkkMCwgJWVkeAorCWFkZGwJJWVzaSwgJWVzaQorCisJYWRjbAklZWRpLCAlZWRpCisJbW92bAk0KCVlY3gpLCAlZWF4CisKKwlhZGNsCSVlYnAsICVlYnAKKworCWFkY2wJJWVkeCwgJWVkeAorCisJYWRjbAkkMCwgJWVieAorCWFkZGwJJWVheCwgJWVzaQorCW1vdmwJOCglZWN4KSwgJWVheAorCisJYWRjbAklZWF4LCAlZWRpCisJbW92bAkxMiglZWN4KSwgJWVheAorCW1vdmwJJWVzaSwgNCglZWN4KQorCisJYWRjbAklZWF4LCAlZWJwCisJbW92bAkxNiglZWN4KSwgJWVheAorCW1vdmwJJWVkaSwgOCglZWN4KQorCisJbW92bAlTQVZFX0VTSSwgJWVzaQorCW1vdmwJU0FWRV9FREksICVlZGkKKworCWFkY2wJJWVheCwgJWVkeAorCW1vdmwJMjAoJWVjeCksICVlYXgKKwltb3ZsCSVlYnAsIDEyKCVlY3gpCisKKwlhZGNsCSVlYngsICVlYXgKKwlBU1NFUlQobmMpCisJbW92bAlTQVZFX0VCWCwgJWVieAorCW1vdmwJU0FWRV9FQlAsICVlYnAKKworCW1vdmwJJWVkeCwgMTYoJWVjeCkKKwltb3ZsCSVlYXgsIDIwKCVlY3gpCisJYWRkbAkkRlJBTUUsICVlc3AKKworCXJldAorCisKK0MtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0woZm91cl9vcl9tb3JlKToKKworQyBGaXJzdCBtdWx0aXBseSBzcmNbMF0qc3JjWzEuLnNpemUtMV0gYW5kIHN0b3JlIGF0IGRzdFsxLi5zaXplXS4KK0MgRnVydGhlciBwcm9kdWN0cyBhcmUgYWRkZWQgaW4gcmF0aGVyIHRoYW4gc3RvcmVkLgorCisJQyBlYXgJc3JjCisJQyBlYngKKwlDIGVjeAlzaXplCisJQyBlZHgJZHN0CisJQyBlc2kKKwlDIGVkaQorCUMgZWJwCisKK2RlZmZyYW1lKGBWQVJfQ09VTlRFUicsLTIwKQorZGVmZnJhbWUoYFZBUl9KTVAnLCAgICAtMjQpCitkZWZsaXQoRVhUUkFfU1RBQ0tfU1BBQ0UsIDgpCisKKwltb3ZsCSVlYngsIFNBVkVfRUJYCisJbW92bAklZWRpLCBTQVZFX0VESQorCWxlYWwJKCVlZHgsJWVjeCw0KSwgJWVkaQlDICZkc3Rbc2l6ZV0KKworCW1vdmwJJWVzaSwgU0FWRV9FU0kKKwltb3ZsCSVlYnAsIFNBVkVfRUJQCisJbGVhbAkoJWVheCwlZWN4LDQpLCAlZXNpCUMgJnNyY1tzaXplXQorCisJbW92bAkoJWVheCksICVlYnAJCUMgbXVsdGlwbGllcgorCW1vdmwJJDAsICVlYngKKwlkZWNsCSVlY3gKKworCW5lZ2wJJWVjeAorCXN1YmwJJEVYVFJBX1NUQUNLX1NQQUNFLCAlZXNwCitGUkFNRV9zdWJsX2VzcChFWFRSQV9TVEFDS19TUEFDRSkKKworTChtdWxfMSk6CisJQyBlYXgJc2NyYXRjaAorCUMgZWJ4CWNhcnJ5CisJQyBlY3gJY291bnRlcgorCUMgZWR4CXNjcmF0Y2gKKwlDIGVzaQkmc3JjW3NpemVdCisJQyBlZGkJJmRzdFtzaXplXQorCUMgZWJwCW11bHRpcGxpZXIKKworCW1vdmwJKCVlc2ksJWVjeCw0KSwgJWVheAorCisJbXVsbAklZWJwCisKKwlhZGRsCSVlYngsICVlYXgKKwltb3ZsCSVlYXgsICglZWRpLCVlY3gsNCkKKwltb3ZsCSQwLCAlZWJ4CisKKwlhZGNsCSVlZHgsICVlYngKKwlpbmNsCSVlY3gKKwlqbnoJTChtdWxfMSkKKworCitDIEFkZCBwcm9kdWN0cyBzcmNbbl0qc3JjW24rMS4uc2l6ZS0xXSBhdCBkc3RbMipuLTEuLi5dLCBmb3IgZWFjaCBuPTEuLnNpemUtMi4KK0MKK0MgVGhlIGxhc3QgdHdvIHByb2R1Y3RzLCB3aGljaCBhcmUgdGhlIGJvdHRvbSByaWdodCBjb3JuZXIgb2YgdGhlIHByb2R1Y3QKK0MgdHJpYW5nbGUsIGFyZSBsZWZ0IHRvIHRoZSBlbmQuICBUaGVzZSBhcmUgc3JjW3NpemUtM10qc3JjW3NpemUtMixzaXplLTFdCitDIGFuZCBzcmNbc2l6ZS0yXSpzcmNbc2l6ZS0xXS4gIElmIHNpemUgaXMgNCB0aGVuIGl0J3Mgb25seSB0aGVzZSBjb3JuZXIKK0MgY2FzZXMgdGhhdCBuZWVkIHRvIGJlIGRvbmUuCitDCitDIFRoZSB1bnJvbGxlZCBjb2RlIGlzIHRoZSBzYW1lIGFzIGluIG1wbl9hZGRtdWxfMSwgc2VlIHRoYXQgcm91dGluZSBmb3IKK0Mgc29tZSBjb21tZW50cy4KK0MKK0MgVkFSX0NPVU5URVIgaXMgdGhlIG91dGVyIGxvb3AsIHJ1bm5pbmcgZnJvbSAtc2l6ZSs0IHRvIC0xLCBpbmNsdXNpdmUuCitDCitDIFZBUl9KTVAgaXMgdGhlIGNvbXB1dGVkIGp1bXAgaW50byB0aGUgdW5yb2xsZWQgY29kZSwgc3RlcHBlZCBieSBvbmUgY29kZQorQyBjaHVuayBlYWNoIG91dGVyIGxvb3AuCitDCitDIEs3IGRvZXMgYnJhbmNoIHByZWRpY3Rpb24gb24gaW5kaXJlY3QganVtcHMsIHdoaWNoIGlzIGJhZCBzaW5jZSBpdCdzIGEKK0MgZGlmZmVyZW50IHRhcmdldCBlYWNoIHRpbWUuICBUaGVyZSBzZWVtcyBubyB3YXkgdG8gYXZvaWQgdGhpcy4KKworZG5sICBUaGlzIHZhbHVlIGFsc28gaGFyZCBjb2RlZCBpbiBzb21lIHNoaWZ0cyBhbmQgYWRkcworZGVmbGl0KENPREVfQllURVNfUEVSX0xJTUIsIDE3KQorCitkbmwgIFdpdGggdGhlIHVubW9kaWZpZWQgJnNyY1tzaXplXSBhbmQgJmRzdFtzaXplXSBwb2ludGVycywgdGhlCitkbmwgIGRpc3BsYWNlbWVudHMgaW4gdGhlIHVucm9sbGVkIGNvZGUgZml0IGluIGEgYnl0ZSBmb3IgVU5ST0xMX0NPVU5UCitkbmwgIHZhbHVlcyB1cCB0byAzMSwgYnV0IGFib3ZlIHRoYXQgYW4gb2Zmc2V0IG11c3QgYmUgYWRkZWQgdG8gdGhlbS4KKworZGVmbGl0KE9GRlNFVCwKK2lmZWxzZShldmFsKFVOUk9MTF9DT1VOVD4zMSksMSwKK2V2YWwoKFVOUk9MTF9DT1VOVC0zMSkqNCksCiswKSkKKworZG5sICBCZWNhdXNlIHRoZSBsYXN0IGNodW5rIG9mIGNvZGUgaXMgZ2VuZXJhdGVkIGRpZmZlcmVudGx5LCBhIGxhYmVsIHBsYWNlZAorZG5sICBhdCB0aGUgZW5kIGRvZXNuJ3Qgd29yay4gIEluc3RlYWQgY2FsY3VsYXRlIHRoZSBpbXBsaWVkIGVuZCB1c2luZyB0aGUKK2RubCAgc3RhcnQgYW5kIGhvdyBtYW55IGNodW5rcyBvZiBjb2RlIHRoZXJlIGFyZS4KKworZGVmbGl0KFVOUk9MTF9JTk5FUl9FTkQsCitgTCh1bnJvbGxfaW5uZXJfc3RhcnQpK2V2YWwoVU5ST0xMX0NPVU5UKkNPREVfQllURVNfUEVSX0xJTUIpJykKKworCUMgZWF4CisJQyBlYngJY2FycnkKKwlDIGVjeAorCUMgZWR4CisJQyBlc2kJJnNyY1tzaXplXQorCUMgZWRpCSZkc3Rbc2l6ZV0KKwlDIGVicAorCisJbW92bAlQQVJBTV9TSVpFLCAlZWN4CisJbW92bAklZWJ4LCAoJWVkaSkKKworCXN1YmwJJDQsICVlY3gKKwlqeglMKGNvcm5lcikKKworCW5lZ2wJJWVjeAoraWZlbHNlKE9GRlNFVCwwLCxgc3VibAkkT0ZGU0VULCAlZWRpJykKK2lmZWxzZShPRkZTRVQsMCwsYHN1YmwJJE9GRlNFVCwgJWVzaScpCisKKwltb3ZsCSVlY3gsICVlZHgKKwlzaGxsCSQ0LCAlZWN4CisKK2lmZGVmKGBQSUMnLGAKKwljYWxsCUwocGljX2NhbGMpCitMKGhlcmUpOgorJyxgCisJbGVhbAlVTlJPTExfSU5ORVJfRU5ELWV2YWwoMipDT0RFX0JZVEVTX1BFUl9MSU1CKSglZWN4LCVlZHgpLCAlZWN4CisnKQorCisKKwlDIFRoZSBjYWxjdWxhdGVkIGp1bXAgbXVzdG4ndCBjb21lIG91dCB0byBiZWZvcmUgdGhlIHN0YXJ0IG9mIHRoZQorCUMgY29kZSBhdmFpbGFibGUuICBUaGlzIGlzIHRoZSBsaW1pdCBVTlJPTExfQ09VTlQgcHV0cyBvbiB0aGUgc3JjCisJQyBvcGVyYW5kIHNpemUsIGJ1dCBjaGVja2VkIGhlcmUgZGlyZWN0bHkgdXNpbmcgdGhlIGp1bXAgYWRkcmVzcy4KKwlBU1NFUlQoYWUsCisJYG1vdmxfdGV4dF9hZGRyZXNzKEwodW5yb2xsX2lubmVyX3N0YXJ0KSwgJWVheCkKKwljbXBsCSVlYXgsICVlY3gnKQorCisKK0MtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlBTElHTigxNikKK0wodW5yb2xsX291dGVyX3RvcCk6CisJQyBlYXgKKwlDIGVieAloaWdoIGxpbWIgdG8gc3RvcmUKKwlDIGVjeAlWQVJfSk1QCisJQyBlZHgJVkFSX0NPVU5URVIsIGxpbWJzLCBuZWdhdGl2ZQorCUMgZXNpCSZzcmNbc2l6ZV0sIGNvbnN0YW50CisJQyBlZGkJZHN0IHB0ciwgaGlnaCBvZiBsYXN0IGFkZG11bAorCUMgZWJwCisKKwltb3ZsCS0xMitPRkZTRVQoJWVzaSwlZWR4LDQpLCAlZWJwCUMgbmV4dCBtdWx0aXBsaWVyCisJbW92bAktOCtPRkZTRVQoJWVzaSwlZWR4LDQpLCAlZWF4CUMgZmlyc3Qgb2YgbXVsdGlwbGljYW5kCisKKwltb3ZsCSVlZHgsIFZBUl9DT1VOVEVSCisKKwltdWxsCSVlYnAKKworZGVmaW5lKGNtb3ZYLGBpZmVsc2UoZXZhbChVTlJPTExfQ09VTlQlMiksMCxgY21vdnooJEApJyxgY21vdm56KCRAKScpJykKKworCXRlc3RiCSQxLCAlY2wKKwltb3ZsCSVlZHgsICVlYngJQyBoaWdoIGNhcnJ5CisJbW92bAklZWN4LCAlZWR4CUMganVtcAorCisJbW92bAklZWF4LCAlZWN4CUMgbG93IGNhcnJ5CisJY21vdlgoCSVlYngsICVlY3gpCUMgaGlnaCBjYXJyeSByZXZlcnNlCisJY21vdlgoCSVlYXgsICVlYngpCUMgbG93IGNhcnJ5IHJldmVyc2UKKworCWxlYWwJQ09ERV9CWVRFU19QRVJfTElNQiglZWR4KSwgJWVheAorCXhvcmwJJWVkeCwgJWVkeAorCWxlYWwJNCglZWRpKSwgJWVkaQorCisJbW92bAklZWF4LCBWQVJfSk1QCisKKwlqbXAJKiVlYXgKKworCitpZmRlZihgUElDJyxgCitMKHBpY19jYWxjKToKKwlhZGRsCSglZXNwKSwgJWVjeAorCWFkZGwJJFVOUk9MTF9JTk5FUl9FTkQtZXZhbCgyKkNPREVfQllURVNfUEVSX0xJTUIpLUwoaGVyZSksICVlY3gKKwlhZGRsCSVlZHgsICVlY3gKKwlyZXRfaW50ZXJuYWwKKycpCisKKworCUMgTXVzdCBiZSBhbiBldmVuIGFkZHJlc3MgdG8gcHJlc2VydmUgdGhlIHNpZ25pZmljYW5jZSBvZiB0aGUgbG93CisJQyBiaXQgb2YgdGhlIGp1bXAgYWRkcmVzcyBpbmRpY2F0aW5nIHdoaWNoIHdheSBhcm91bmQgZWN4L2VieCBzaG91bGQKKwlDIHN0YXJ0LgorCUFMSUdOKDIpCisKK0wodW5yb2xsX2lubmVyX3N0YXJ0KToKKwlDIGVheAluZXh0IGxpbWIKKwlDIGVieAljYXJyeSBoaWdoCisJQyBlY3gJY2FycnkgbG93CisJQyBlZHgJc2NyYXRjaAorCUMgZXNpCXNyYworCUMgZWRpCWRzdAorCUMgZWJwCW11bHRpcGxpZXIKKworZm9ybG9vcChgaScsIFVOUk9MTF9DT1VOVCwgMSwgYAorCWRlZmxpdChgZGlzcF9zcmMnLCBldmFsKC1pKjQgKyBPRkZTRVQpKQorCWRlZmxpdChgZGlzcF9kc3QnLCBldmFsKGRpc3Bfc3JjIC0gNCkpCisKKwltNF9hc3NlcnQoYGRpc3Bfc3JjPj0tMTI4ICYmIGRpc3Bfc3JjPDEyOCcpCisJbTRfYXNzZXJ0KGBkaXNwX2RzdD49LTEyOCAmJiBkaXNwX2RzdDwxMjgnKQorCitpZmVsc2UoZXZhbChpJTIpLDAsYAorWmRpc3AoCW1vdmwsCWRpc3Bfc3JjLCglZXNpKSwgJWVheCkKKwlhZGNsCSVlZHgsICVlYngKKworCW11bGwJJWVicAorCitaZGlzcCggIGFkZGwsCSVlY3gsIGRpc3BfZHN0LCglZWRpKSkKKwltb3ZsCSQwLCAlZWN4CisKKwlhZGNsCSVlYXgsICVlYngKKworJyxgCisJZG5sICB0aGlzIGJpdCBjb21lcyBvdXQgbGFzdAorWmRpc3AoICBtb3ZsLAlkaXNwX3NyYywoJWVzaSksICVlYXgpCisJYWRjbAklZWR4LCAlZWN4CisKKwltdWxsCSVlYnAKKworWmRpc3AoCWFkZGwsCSVlYngsIGRpc3BfZHN0LCglZWRpKSkKKworaWZlbHNlKGZvcmxvb3BfbGFzdCwwLAorYAltb3ZsCSQwLCAlZWJ4JykKKworCWFkY2wJJWVheCwgJWVjeAorJykKKycpCisKKwlDIGVheAluZXh0IGxpbWIKKwlDIGVieAljYXJyeSBoaWdoCisJQyBlY3gJY2FycnkgbG93CisJQyBlZHgJc2NyYXRjaAorCUMgZXNpCXNyYworCUMgZWRpCWRzdAorCUMgZWJwCW11bHRpcGxpZXIKKworCWFkY2wJJDAsICVlZHgKKwlhZGRsCSVlY3gsIC00K09GRlNFVCglZWRpKQorCW1vdmwJVkFSX0pNUCwgJWVjeAorCisJYWRjbAkkMCwgJWVkeAorCisJbW92bAklZWR4LCBtNF9lbXB0eV9pZl96ZXJvKE9GRlNFVCkgKCVlZGkpCisJbW92bAlWQVJfQ09VTlRFUiwgJWVkeAorCisJaW5jbAklZWR4CisJam56CUwodW5yb2xsX291dGVyX3RvcCkKKworCitpZmVsc2UoT0ZGU0VULDAsLGAKKwlhZGRsCSRPRkZTRVQsICVlc2kKKwlhZGRsCSRPRkZTRVQsICVlZGkKKycpCisKKworQy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTChjb3JuZXIpOgorCUMgZXNpCSZzcmNbc2l6ZV0KKwlDIGVkaQkmZHN0WzIqc2l6ZS01XQorCisJbW92bAktMTIoJWVzaSksICVlYnAKKwltb3ZsCS04KCVlc2kpLCAlZWF4CisJbW92bAklZWF4LCAlZWN4CisKKwltdWxsCSVlYnAKKworCWFkZGwJJWVheCwgLTQoJWVkaSkKKwltb3ZsCS00KCVlc2kpLCAlZWF4CisKKwlhZGNsCSQwLCAlZWR4CisJbW92bAklZWR4LCAlZWJ4CisJbW92bAklZWF4LCAlZXNpCisKKwltdWxsCSVlYnAKKworCWFkZGwJJWVieCwgJWVheAorCisJYWRjbAkkMCwgJWVkeAorCWFkZGwJJWVheCwgKCVlZGkpCisJbW92bAklZXNpLCAlZWF4CisKKwlhZGNsCSQwLCAlZWR4CisJbW92bAklZWR4LCAlZWJ4CisKKwltdWxsCSVlY3gKKworCWFkZGwJJWVieCwgJWVheAorCW1vdmwJJWVheCwgNCglZWRpKQorCisJYWRjbAkkMCwgJWVkeAorCW1vdmwJJWVkeCwgOCglZWRpKQorCisKKworQyBMZWZ0IHNoaWZ0IG9mIGRzdFsxLi4yKnNpemUtMl0sIGhpZ2ggYml0IHNoaWZ0ZWQgb3V0IGJlY29tZXMgZHN0WzIqc2l6ZS0xXS4KKworTChsc2hpZnRfc3RhcnQpOgorCW1vdmwJUEFSQU1fU0laRSwgJWVheAorCW1vdmwJUEFSQU1fRFNULCAlZWRpCisJeG9ybAklZWN4LCAlZWN4CQlDIGNsZWFyIGNhcnJ5CisKKwlsZWFsCSglZWRpLCVlYXgsOCksICVlZGkKKwlub3RsCSVlYXgJCQlDIC1zaXplLTEsIHByZXNlcnZlIGNhcnJ5CisKKwlsZWFsCTIoJWVheCksICVlYXgJCUMgLShzaXplLTEpCisKK0wobHNoaWZ0KToKKwlDIGVheAljb3VudGVyLCBuZWdhdGl2ZQorCUMgZWJ4CisJQyBlY3gKKwlDIGVkeAorCUMgZXNpCisJQyBlZGkJZHN0LCBwb2ludGluZyBqdXN0IGFmdGVyIGxhc3QgbGltYgorCUMgZWJwCisKKwlyY2xsCS00KCVlZGksJWVheCw4KQorCXJjbGwJKCVlZGksJWVheCw4KQorCWluY2wJJWVheAorCWpueglMKGxzaGlmdCkKKworCXNldGMJJWFsCisKKwltb3ZsCVBBUkFNX1NSQywgJWVzaQorCW1vdmwJJWVheCwgLTQoJWVkaSkJCUMgZHN0IG1vc3Qgc2lnbmlmaWNhbnQgbGltYgorCisJbW92bAlQQVJBTV9TSVpFLCAlZWN4CisKKworQyBOb3cgYWRkIGluIHRoZSBzcXVhcmVzIG9uIHRoZSBkaWFnb25hbCwgc3JjWzBdXjIsIHNyY1sxXV4yLCAuLi4sCitDIHNyY1tzaXplLTFdXjIuICBkc3RbMF0gaGFzbid0IHlldCBiZWVuIHNldCBhdCBhbGwgeWV0LCBhbmQganVzdCBnZXRzIHRoZQorQyBsb3cgbGltYiBvZiBzcmNbMF1eMi4KKworCW1vdmwJKCVlc2kpLCAlZWF4CQlDIHNyY1swXQorCisJbXVsbAklZWF4CisKKwlsZWFsCSglZXNpLCVlY3gsNCksICVlc2kJQyBzcmMgcG9pbnQganVzdCBhZnRlciBsYXN0IGxpbWIKKwluZWdsCSVlY3gKKworCW1vdmwJJWVheCwgKCVlZGksJWVjeCw4KQlDIGRzdFswXQorCWluY2wJJWVjeAorCitMKGRpYWcpOgorCUMgZWF4CXNjcmF0Y2gKKwlDIGVieAlzY3JhdGNoCisJQyBlY3gJY291bnRlciwgbmVnYXRpdmUKKwlDIGVkeAljYXJyeQorCUMgZXNpCXNyYyBqdXN0IGFmdGVyIGxhc3QgbGltYgorCUMgZWRpCWRzdCBqdXN0IGFmdGVyIGxhc3QgbGltYgorCUMgZWJwCisKKwltb3ZsCSglZXNpLCVlY3gsNCksICVlYXgKKwltb3ZsCSVlZHgsICVlYngKKworCW11bGwJJWVheAorCisJYWRkbAklZWJ4LCAtNCglZWRpLCVlY3gsOCkKKwlhZGNsCSVlYXgsICglZWRpLCVlY3gsOCkKKwlhZGNsCSQwLCAlZWR4CisKKwlpbmNsCSVlY3gKKwlqbnoJTChkaWFnKQorCisKKwltb3ZsCVNBVkVfRVNJLCAlZXNpCisJbW92bAlTQVZFX0VCWCwgJWVieAorCisJYWRkbAklZWR4LCAtNCglZWRpKQkJQyBkc3QgbW9zdCBzaWduaWZpY2FudCBsaW1iCisJbW92bAlTQVZFX0VESSwgJWVkaQorCisJbW92bAlTQVZFX0VCUCwgJWVicAorCWFkZGwJJEZSQU1FLCAlZXNwCisKKwlyZXQKKworRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvazcvc3VibHNoMV9uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s3L3N1YmxzaDFfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg1MTY4MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s3L3N1YmxzaDFfbi5hc20KQEAgLTAsMCArMSwxNzMgQEAKK2RubCAgQU1EIEs3IG1wbl9zdWJsc2gxX25faXAxIC0tIHJwW10gPSBycFtdIC0gKHVwW10gPDwgMSkKKworZG5sICBDb3B5cmlnaHQgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQgYW5kIE1hcmNvIEJvZHJhdG8uCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBUaGlzIGlzIGFuIGF0dGVtcHQgYXQgYSBzdWJsc2gxX24gZm9yIHg4Ni0zMiwgbm90IHJlbHlpbmcgb24gc3NlMiBpbnNucy4gIFRoZQorQyBpbm5lcmxvb3AgaXMgMiozLXdheSB1bnJvbGxlZCwgd2hpY2ggaXMgYmVzdCB3ZSBjYW4gZG8gd2l0aCB0aGUgYXZhaWxhYmxlCitDIHJlZ2lzdGVycy4gIEl0IHNlZW1zIHRyaWNreSB0byB1c2UgdGhlIHNhbWUgc3RydWN0dXJlIGZvciByc2Jsc2gxX24sIHNpbmNlIHdlCitDIGNhbm5vdCBmZWVkIGNhcnJ5IGJldHdlZW4gb3BlcmF0aW9ucyB0aGVyZS4KKworQwkJCSAgICBjeWNsZXMvbGltYgorQyBQNQorQyBQNiBtb2RlbCAwLTgsMTAtMTIKK0MgUDYgbW9kZWwgOSAgKEJhbmlhcykKK0MgUDYgbW9kZWwgMTMgKERvdGhhbikKK0MgUDQgbW9kZWwgMCAgKFdpbGxhbWV0dGUpCitDIFA0IG1vZGVsIDEgICg/KQorQyBQNCBtb2RlbCAyICAoTm9ydGh3b29kKQorQyBQNCBtb2RlbCAzICAoUHJlc2NvdHQpCitDIFA0IG1vZGVsIDQgIChOb2NvbmEpCitDIEludGVsIEF0b20JCQkgNi43NQorQyBBTUQgSzYKK0MgQU1EIEs3CitDIEFNRCBLOAorCitDIFRoaXMgaXMgYSBiYXNpYyBzdWJsc2gxX24gZm9yIGs3LCBhdG9tLCBhbmQgcGVyaGFwcyBzb21lIG90aGVyIHg4Ni0zMgorQyBwcm9jZXNzb3JzLiAgSXQgdXNlcyAyKjQtd2F5IHVucm9sbGluZywgZm9yIGdvb2QgcmVhc29ucy4KK0MKK0MgQnJlYWtpbmcgY2FycnkgcmVjdXJyZW5jeSBtaWdodCBiZSBhIGdvb2QgaWRlYS4gIFdlIHdvdWxkIHRoZW4gbmVlZCBzZXBhcmF0ZQorQyByZWdpc3RlcnMgZm9yIHRoZSBzaGlmdCBjYXJyeSBhbmQgYWRkL3N1YnRyYWN0IGNhcnJ5LCB3aGljaCBpbiB0dXJuIHdvdWxkCitDIGZvcmNlIHVzIHRvIDIqMi13YXkgdW5yb2xsaW5nLgorCitkZWZmcmFtZShQQVJBTV9TSVpFLAkxMikKK2RlZmZyYW1lKFBBUkFNX1NSQywJIDgpCitkZWZmcmFtZShQQVJBTV9EU1QsCSA0KQorCitkbmwgIHJlLXVzZSBwYXJhbWV0ZXIgc3BhY2UKK2RlZmluZShWQVJfQ09VTlQsYFBBUkFNX1NJWkUnKQorZGVmaW5lKFNBVkVfRUJYLGBQQVJBTV9TUkMnKQorZGVmaW5lKFNBVkVfRUJQLGBQQVJBTV9EU1QnKQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTig4KQorUFJPTE9HVUUobXBuX3N1YmxzaDFfbl9pcDEpCitkZWZsaXQoYEZSQU1FJywwKQorCitkZWZpbmUoYHJwJywgIGAlZWRpJykKK2RlZmluZShgdXAnLCAgYCVlc2knKQorCisJbW92CVBBUkFNX1NJWkUsICVlYXgJQyBzaXplCisJcHVzaAl1cAkJCUZSQU1FX3B1c2hsKCkKKwlwdXNoCXJwCQkJRlJBTUVfcHVzaGwoKQorCXhvcgklZWR4LCAlZWR4CisJbW92CVBBUkFNX1NSQywgdXAKKwltb3YJUEFSQU1fRFNULCBycAorCW1vdgklZWJ4LCBTQVZFX0VCWAorCW1vdgklZWF4LCAlZWJ4CisJc2hyCSQzLCAlZWF4CisKKwlub3QJJWVheAkJCUMgY291bnQgPSAtKHNpemVcOCktaQorCWFuZAkkNywgJWVieAkJQyBzaXplICUgOAorCWp6CUwoZXhhY3QpCisKK0wob29wKToKK2lmZGVmKGBDUFVfUDYnLGAKKwlzaHIJJWVkeCAnKQkJCUMgcmVzdG9yZSAybmQgc2F2ZWQgY2FycnkgYml0CisJbW92CSh1cCksICVlY3gKKwlhZGMJJWVjeCwgJWVjeAorCXJjcgklZWR4CQkJQyByZXN0b3JlIDFzdCBzYXZlZCBjYXJyeSBiaXQKKwlsZWEJNCh1cCksIHVwCisJc2JiCSVlY3gsIChycCkKKwlsZWEJNChycCksIHJwCisJYWRjCSVlZHgsICVlZHgJCUMgc2F2ZSBhIGNhcnJ5IGJpdCBpbiBlZHgKK2lmZGVmKGBDUFVfUDYnLGAKKwlhZGMJJWVkeCwgJWVkeCAnKQkJQyBzYXZlIGFub3RoZXIgY2FycnkgYml0IGluIGVkeAorCWRlYwklZWJ4CisJam56CUwob29wKQorTChleGFjdCk6CisJaW5jCSVlYXgKKwlqeglMKGVuZCkKKwltb3YJJWVheCwgVkFSX0NPVU5UCisJbW92CSVlYnAsIFNBVkVfRUJQCisKKwlBTElHTigxNikKK0wodG9wKToKK2lmZGVmKGBDUFVfUDYnLGAKKwlzaHIJJWVkeCAnKQkJCUMgcmVzdG9yZSAybmQgc2F2ZWQgY2FycnkgYml0CisJbW92CSh1cCksICVlYXgKKwlhZGMJJWVheCwgJWVheAorCW1vdgk0KHVwKSwgJWVieAorCWFkYwklZWJ4LCAlZWJ4CisJbW92CTgodXApLCAlZWN4CisJYWRjCSVlY3gsICVlY3gKKwltb3YJMTIodXApLCAlZWJwCisJYWRjCSVlYnAsICVlYnAKKworCXJjcgklZWR4CQkJQyByZXN0b3JlIDFzdCBzYXZlZCBjYXJyeSBiaXQKKworCXNiYgklZWF4LCAocnApCisJc2JiCSVlYngsIDQocnApCisJc2JiCSVlY3gsIDgocnApCisJc2JiCSVlYnAsIDEyKHJwKQorCisJbW92CTE2KHVwKSwgJWVheAorCWFkYwklZWF4LCAlZWF4CisJbW92CTIwKHVwKSwgJWVieAorCWFkYwklZWJ4LCAlZWJ4CisJbW92CTI0KHVwKSwgJWVjeAorCWFkYwklZWN4LCAlZWN4CisJbW92CTI4KHVwKSwgJWVicAorCWFkYwklZWJwLCAlZWJwCisKKwlsZWEJMzIodXApLCB1cAorCWFkYwklZWR4LCAlZWR4CQlDIHNhdmUgYSBjYXJyeSBiaXQgaW4gZWR4CisKKwlzYmIJJWVheCwgMTYocnApCisJc2JiCSVlYngsIDIwKHJwKQorCXNiYgklZWN4LCAyNChycCkKKwlzYmIJJWVicCwgMjgocnApCisKK2lmZGVmKGBDUFVfUDYnLGAKKwlhZGMJJWVkeCwgJWVkeCAnKQkJQyBzYXZlIGFub3RoZXIgY2FycnkgYml0IGluIGVkeAorCWluY2wJVkFSX0NPVU5UCisJbGVhCTMyKHJwKSwgcnAKKwlqbmUJTCh0b3ApCisKKwltb3YJU0FWRV9FQlAsICVlYnAKK0woZW5kKToKKwltb3YJU0FWRV9FQlgsICVlYngKKworaWZkZWYoYENQVV9QNicsYAorCXhvcgklZWF4LCAlZWF4CisJc2hyCSQxLCAlZWR4CisJYWRjCSVlZHgsICVlYXgKKycsYAorCWFkYwkkMCwgJWVkeAorCW1vdgklZWR4LCAlZWF4CisnKQorCXBvcAlycAkJCUZSQU1FX3BvcGwoKQorCXBvcAl1cAkJCUZSQU1FX3BvcGwoKQorCXJldAorRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rOC9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9rOC9nbXAtbXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE3MTI5MgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2s4L2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDIxNSBAQAorLyogeDg2L2s4IGdtcC1tcGFyYW0uaCAtLSBDb21waWxlci9tYWNoaW5lIHBhcmFtZXRlciBoZWFkZXIgZmlsZS4KKworQ29weXJpZ2h0IDE5OTEsIDE5OTMsIDE5OTQsIDIwMDAtMjAxMSwgMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2RlZmluZSBHTVBfTElNQl9CSVRTIDMyCisjZGVmaW5lIEdNUF9MSU1CX0JZVEVTIDQKKworLyogMjUwMCBNSHogSzggQnJpc2JhbmUgKi8KKy8qIEZGVCB0dW5pbmcgbGltaXQgPSA2NywwMDAsMDAwICovCisvKiBHZW5lcmF0ZWQgYnkgdHVuZXVwLmMsIDIwMTktMTAtMjAsIGdjYyA4LjMgKi8KKworI2RlZmluZSBNT0RfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PRF8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFOX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgMTEKKyNkZWZpbmUgTU9EXzFVX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgIDQKKyNkZWZpbmUgTU9EXzFfMV9UT19NT0RfMV8yX1RIUkVTSE9MRCAgICAgICAgMTIKKyNkZWZpbmUgTU9EXzFfMl9UT19NT0RfMV80X1RIUkVTSE9MRCAgICAgICAgIDAgIC8qIG5ldmVyIG1wbl9tb2RfMXNfMnAgKi8KKyNkZWZpbmUgUFJFSU5WX01PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgMjEKKyNkZWZpbmUgVVNFX1BSRUlOVl9ESVZSRU1fMSAgICAgICAgICAgICAgICAgIDEgIC8qIG5hdGl2ZSAqLworI2RlZmluZSBESVZfUVJfMU5fUEkxX01FVEhPRCAgICAgICAgICAgICAgICAgMSAgLyogMzYuODUlIGZhc3RlciB0aGFuIDIgKi8KKyNkZWZpbmUgRElWX1FSXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgIDMKKyNkZWZpbmUgRElWX1FSXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWX1FSXzJfUEkyX1RIUkVTSE9MRCAgICAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWRVhBQ1RfMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAobmF0aXZlKSAqLworI2RlZmluZSBCTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgICAgICA0NAorCisjZGVmaW5lIERJVl8xX1ZTX01VTF8xX1BFUkNFTlQgICAgICAgICAgICAgMjUxCisKKyNkZWZpbmUgTVVMX1RPT00yMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjYKKyNkZWZpbmUgTVVMX1RPT00zM19USFJFU0hPTEQgICAgICAgICAgICAgICAgNzgKKyNkZWZpbmUgTVVMX1RPT000NF9USFJFU0hPTEQgICAgICAgICAgICAgICAxMzYKKyNkZWZpbmUgTVVMX1RPT002SF9USFJFU0hPTEQgICAgICAgICAgICAgICAyNzAKKyNkZWZpbmUgTVVMX1RPT004SF9USFJFU0hPTEQgICAgICAgICAgICAgICA0MzAKKworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT000M19USFJFU0hPTEQgICAgICA4NQorI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT001M19USFJFU0hPTEQgICAgICA5MQorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT001M19USFJFU0hPTEQgICAgICA4OQorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT002M19USFJFU0hPTEQgICAgICA5NgorI2RlZmluZSBNVUxfVE9PTTQzX1RPX1RPT001NF9USFJFU0hPTEQgICAgIDEyMQorCisjZGVmaW5lIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNDYKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgODEKKyNkZWZpbmUgU1FSX1RPT000X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyMDIKKyNkZWZpbmUgU1FSX1RPT002X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzMDAKKyNkZWZpbmUgU1FSX1RPT004X1RIUkVTSE9MRCAgICAgICAgICAgICAgICA0MzAKKworI2RlZmluZSBNVUxNSURfVE9PTTQyX1RIUkVTSE9MRCAgICAgICAgICAgICA1MAorCisjZGVmaW5lIE1VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIFNRUk1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDIyCisKKyNkZWZpbmUgTVVMX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICA2MDYgIC8qIGsgPSA1ICovCisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICA2MDYsIDV9LCB7ICAgICAyNywgNn0sIHsgICAgIDE1LCA1fSwgeyAgICAgMzEsIDZ9LCBcCisgICAgeyAgICAgMjUsIDd9LCB7ICAgICAxMywgNn0sIHsgICAgIDI5LCA3fSwgeyAgICAgMTUsIDZ9LCBcCisgICAgeyAgICAgMzMsIDd9LCB7ICAgICAxNywgNn0sIHsgICAgIDM1LCA3fSwgeyAgICAgMTksIDZ9LCBcCisgICAgeyAgICAgMzksIDd9LCB7ICAgICAyMywgNn0sIHsgICAgIDQ3LCA3fSwgeyAgICAgMzUsIDh9LCBcCisgICAgeyAgICAgMTksIDd9LCB7ICAgICA0MSwgOH0sIHsgICAgIDIzLCA3fSwgeyAgICAgNDcsIDh9LCBcCisgICAgeyAgICAgMzEsIDd9LCB7ICAgICA2MywgOH0sIHsgICAgIDM5LCA5fSwgeyAgICAgMjMsIDh9LCBcCisgICAgeyAgICAgNTUsIDl9LCB7ICAgICAzMSwgOH0sIHsgICAgIDY3LCA5fSwgeyAgICAgMzksIDh9LCBcCisgICAgeyAgICAgNzksIDl9LCB7ICAgICA0NywgOH0sIHsgICAgIDk1LCA5fSwgeyAgICAgNTUsMTB9LCBcCisgICAgeyAgICAgMzEsIDl9LCB7ICAgICA3OSwxMH0sIHsgICAgIDQ3LCA5fSwgeyAgICAxMDMsMTF9LCBcCisgICAgeyAgICAgMzEsMTB9LCB7ICAgICA2MywgOX0sIHsgICAgMTM1LDEwfSwgeyAgICAgNzksIDl9LCBcCisgICAgeyAgICAxNjcsMTB9LCB7ICAgICA5NSwgOX0sIHsgICAgMTkxLDEwfSwgeyAgICAxMTEsMTF9LCBcCisgICAgeyAgICAgNjMsMTB9LCB7ICAgIDE1OSwxMX0sIHsgICAgIDk1LDEwfSwgeyAgICAxOTEsMTJ9LCBcCisgICAgeyAgICAgNjMsMTF9LCB7ICAgIDEyNywxMH0sIHsgICAgMjU1LCA5fSwgeyAgICA1MTEsMTB9LCBcCisgICAgeyAgICAyNzEsIDl9LCB7ICAgIDU0MywxMH0sIHsgICAgMjg3LDExfSwgeyAgICAxNTksMTB9LCBcCisgICAgeyAgICAzMTksIDl9LCB7ICAgIDYzOSwxMH0sIHsgICAgMzM1LCA5fSwgeyAgICA2NzEsMTF9LCBcCisgICAgeyAgICAxOTEsMTB9LCB7ICAgIDM4MywgOX0sIHsgICAgNzY3LDEwfSwgeyAgICAzOTksIDl9LCBcCisgICAgeyAgICA3OTksMTF9LCB7ICAgIDIyMywxMn0sIHsgICAgMTI3LDExfSwgeyAgICAyNTUsMTB9LCBcCisgICAgeyAgICA1MTEsIDl9LCB7ICAgMTAyMywxMH0sIHsgICAgNTQzLDExfSwgeyAgICAyODcsMTB9LCBcCisgICAgeyAgICA2MDcsMTF9LCB7ICAgIDMxOSwxMH0sIHsgICAgNjcxLDExfSwgeyAgICAzNTEsMTJ9LCBcCisgICAgeyAgICAxOTEsMTF9LCB7ICAgIDM4MywxMH0sIHsgICAgNzk5LDExfSwgeyAgICA0MTUsMTN9LCBcCisgICAgeyAgICAxMjcsMTJ9LCB7ICAgIDI1NSwxMX0sIHsgICAgNTExLDEwfSwgeyAgIDEwMjMsMTF9LCBcCisgICAgeyAgICA1NDMsMTB9LCB7ICAgMTA4NywxMX0sIHsgICAgNjA3LDEyfSwgeyAgICAzMTksMTF9LCBcCisgICAgeyAgICA2NzEsMTB9LCB7ICAgMTM0MywxMX0sIHsgICAgNzM1LDEwfSwgeyAgIDE0NzEsMTJ9LCBcCisgICAgeyAgICAzODMsMTF9LCB7ICAgIDc5OSwxMH0sIHsgICAxNTk5LDExfSwgeyAgICA4NjMsMTJ9LCBcCisgICAgeyAgICA0NDcsMTF9LCB7ICAgIDkyNywxM30sIHsgICAgMjU1LDEyfSwgeyAgICA1MTEsMTF9LCBcCisgICAgeyAgIDEwODcsMTJ9LCB7ICAgIDU3NSwxMX0sIHsgICAxMjE1LDEyfSwgeyAgICA2MzksMTF9LCBcCisgICAgeyAgIDEzNDMsMTJ9LCB7ICAgIDcwMywxMX0sIHsgICAxNDcxLDEzfSwgeyAgICAzODMsMTJ9LCBcCisgICAgeyAgICA3NjcsMTF9LCB7ICAgMTU5OSwxMn0sIHsgICAgODMxLDExfSwgeyAgIDE3MjcsMTJ9LCBcCisgICAgeyAgICA4OTUsMTF9LCB7ICAgMTc5MSwxMn0sIHsgICAgOTU5LDE0fSwgeyAgICAyNTUsMTN9LCBcCisgICAgeyAgICA1MTEsMTJ9LCB7ICAgMTA4NywxMX0sIHsgICAyMjM5LDEyfSwgeyAgIDEyMTUsMTN9LCBcCisgICAgeyAgICA2MzksMTJ9LCB7ICAgMTQ3MSwxM30sIHsgICAgNzY3LDEyfSwgeyAgIDE3MjcsMTN9LCBcCisgICAgeyAgICA4OTUsMTJ9LCB7ICAgMTkxOSwxNH0sIHsgICAgNTExLDEzfSwgeyAgIDEwMjMsMTJ9LCBcCisgICAgeyAgIDIyMzksMTN9LCB7ICAgMTE1MSwxMn0sIHsgICAyNDMxLDEzfSwgeyAgIDEyNzksMTJ9LCBcCisgICAgeyAgIDI2MjMsMTN9LCB7ICAgMTQwNywxMn0sIHsgICAyOTQzLDE0fSwgeyAgICA3NjcsMTN9LCBcCisgICAgeyAgIDE2NjMsMTJ9LCB7ICAgMzQ1NSwxM30sIHsgICAxOTE5LDE1fSwgeyAgICA1MTEsMTR9LCBcCisgICAgeyAgIDEwMjMsMTN9LCB7ICAgMjE3NSwxMn0sIHsgICA0MzUxLDEzfSwgeyAgIDI0MzEsMTR9LCBcCisgICAgeyAgIDEyNzksMTN9LCB7ICAgMjk0MywxNH0sIHsgICAxNTM1LDEzfSwgeyAgIDM0NTUsMTR9LCBcCisgICAgeyAgIDE3OTEsMTN9LCB7ICAgMzk2NywxNX0sIHsgICAxMDIzLDE0fSwgeyAgIDIwNDcsMTN9LCBcCisgICAgeyAgIDQzNTEsMTR9LCB7ICAgMjMwMywxM30sIHsgICA0OTkxLDE0fSwgeyAgIDI4MTUsMTV9LCBcCisgICAgeyAgIDE1MzUsMTR9LCB7ICAgMzgzOSwxNn0gfQorI2RlZmluZSBNVUxfRkZUX1RBQkxFM19TSVpFIDE1OAorI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNzI5NgorCisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgNTAwICAvKiBrID0gNSAqLworI2RlZmluZSBTUVJfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgNTAwLCA1fSwgeyAgICAgMjUsIDZ9LCB7ICAgICAxMywgNX0sIHsgICAgIDI3LCA2fSwgXAorICAgIHsgICAgIDI1LCA3fSwgeyAgICAgMTMsIDZ9LCB7ICAgICAyOSwgN30sIHsgICAgIDE1LCA2fSwgXAorICAgIHsgICAgIDMyLCA3fSwgeyAgICAgMTcsIDZ9LCB7ICAgICAzNSwgN30sIHsgICAgIDE5LCA2fSwgXAorICAgIHsgICAgIDM5LCA3fSwgeyAgICAgMjksIDh9LCB7ICAgICAxNSwgN30sIHsgICAgIDM1LCA4fSwgXAorICAgIHsgICAgIDE5LCA3fSwgeyAgICAgNDEsIDh9LCB7ICAgICAyMywgN30sIHsgICAgIDQ3LCA4fSwgXAorICAgIHsgICAgIDI3LCA5fSwgeyAgICAgMTUsIDh9LCB7ICAgICAzMSwgN30sIHsgICAgIDYzLCA4fSwgXAorICAgIHsgICAgIDM5LCA5fSwgeyAgICAgMjMsIDh9LCB7ICAgICA1MSwgOX0sIHsgICAgIDMxLCA4fSwgXAorICAgIHsgICAgIDY3LCA5fSwgeyAgICAgMzksIDh9LCB7ICAgICA3OSwgOX0sIHsgICAgIDQ3LCA4fSwgXAorICAgIHsgICAgIDk1LDEwfSwgeyAgICAgMzEsIDl9LCB7ICAgICA3OSwxMH0sIHsgICAgIDQ3LCA5fSwgXAorICAgIHsgICAgIDk1LDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA2MywgOX0sIHsgICAgMTM1LDEwfSwgXAorICAgIHsgICAgIDc5LCA5fSwgeyAgICAxNTksMTB9LCB7ICAgICA5NSwgOX0sIHsgICAgMTkxLDEwfSwgXAorICAgIHsgICAgMTExLDExfSwgeyAgICAgNjMsMTB9LCB7ICAgIDEyNywgOX0sIHsgICAgMjU1LDEwfSwgXAorICAgIHsgICAgMTQzLCA5fSwgeyAgICAyODcsIDh9LCB7ICAgIDU3NSwxMH0sIHsgICAgMTU5LDExfSwgXAorICAgIHsgICAgIDk1LDEwfSwgeyAgICAxOTEsMTJ9LCB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgXAorICAgIHsgICAgMjU1LCA5fSwgeyAgICA1MTEsMTB9LCB7ICAgIDI3MSwgOX0sIHsgICAgNTQzLDEwfSwgXAorICAgIHsgICAgMjg3LDExfSwgeyAgICAxNTksMTB9LCB7ICAgIDMxOSwgOX0sIHsgICAgNjM5LDEwfSwgXAorICAgIHsgICAgMzM1LCA5fSwgeyAgICA2NzEsMTB9LCB7ICAgIDM1MSwxMX0sIHsgICAgMTkxLDEwfSwgXAorICAgIHsgICAgMzgzLCA5fSwgeyAgICA3NjcsMTB9LCB7ICAgIDM5OSwgOX0sIHsgICAgNzk5LDEwfSwgXAorICAgIHsgICAgNDE1LDExfSwgeyAgICAyMjMsMTJ9LCB7ICAgIDEyNywxMX0sIHsgICAgMjU1LDEwfSwgXAorICAgIHsgICAgNTExLCA5fSwgeyAgIDEwMjMsMTB9LCB7ICAgIDU0MywxMX0sIHsgICAgMjg3LDEwfSwgXAorICAgIHsgICAgNjA3LCA5fSwgeyAgIDEyMTUsMTF9LCB7ICAgIDMxOSwxMH0sIHsgICAgNjcxLDExfSwgXAorICAgIHsgICAgMzUxLDEwfSwgeyAgICA3MDMsMTJ9LCB7ICAgIDE5MSwxMX0sIHsgICAgMzgzLDEwfSwgXAorICAgIHsgICAgNzk5LDExfSwgeyAgICA0MTUsMTB9LCB7ICAgIDgzMSwxM30sIHsgICAgMTI3LDEyfSwgXAorICAgIHsgICAgMjU1LDExfSwgeyAgICA1MTEsMTB9LCB7ICAgMTAyMywxMX0sIHsgICAgNTQzLDEwfSwgXAorICAgIHsgICAxMDg3LDExfSwgeyAgICA2MDcsMTJ9LCB7ICAgIDMxOSwxMX0sIHsgICAgNjcxLDEwfSwgXAorICAgIHsgICAxMzQzLDExfSwgeyAgICA3MzUsMTB9LCB7ICAgMTQ3MSwxMn0sIHsgICAgMzgzLDExfSwgXAorICAgIHsgICAgNzk5LDEwfSwgeyAgIDE1OTksMTF9LCB7ICAgIDg2MywxMn0sIHsgICAgNDQ3LDExfSwgXAorICAgIHsgICAgOTU5LDEzfSwgeyAgICAyNTUsMTJ9LCB7ICAgIDUxMSwxMX0sIHsgICAxMDg3LDEyfSwgXAorICAgIHsgICAgNTc1LDExfSwgeyAgIDEyMTUsMTB9LCB7ICAgMjQzMSwxMn0sIHsgICAgNjM5LDExfSwgXAorICAgIHsgICAxMzQzLDEyfSwgeyAgICA3MDMsMTF9LCB7ICAgMTQ3MSwxM30sIHsgICAgMzgzLDEyfSwgXAorICAgIHsgICAgNzY3LDExfSwgeyAgIDE1OTksMTJ9LCB7ICAgIDgzMSwxMX0sIHsgICAxNzI3LDEyfSwgXAorICAgIHsgICAgOTU5LDE0fSwgeyAgICAyNTUsMTN9LCB7ICAgIDUxMSwxMn0sIHsgICAxMDg3LDExfSwgXAorICAgIHsgICAyMjM5LDEyfSwgeyAgIDEyMTUsMTF9LCB7ICAgMjQzMSwxM30sIHsgICAgNjM5LDEyfSwgXAorICAgIHsgICAxNDcxLDEzfSwgeyAgICA3NjcsMTJ9LCB7ICAgMTcyNywxM30sIHsgICAgODk1LDEyfSwgXAorICAgIHsgICAxOTE5LDE0fSwgeyAgICA1MTEsMTN9LCB7ICAgMTAyMywxMn0sIHsgICAyMjM5LDEzfSwgXAorICAgIHsgICAxMTUxLDEyfSwgeyAgIDI0MzEsMTN9LCB7ICAgMTI3OSwxMn0sIHsgICAyNjIzLDEzfSwgXAorICAgIHsgICAxNDA3LDEyfSwgeyAgIDI5NDMsMTR9LCB7ICAgIDc2NywxM30sIHsgICAxNjYzLDEyfSwgXAorICAgIHsgICAzNDU1LDEzfSwgeyAgIDE5MTksMTV9LCB7ICAgIDUxMSwxNH0sIHsgICAxMDIzLDEzfSwgXAorICAgIHsgICAyNDMxLDE0fSwgeyAgIDEyNzksMTN9LCB7ICAgMjk0MywxNH0sIHsgICAxNTM1LDEzfSwgXAorICAgIHsgICAzNDU1LDE0fSwgeyAgIDE3OTEsMTN9LCB7ICAgMzgzOSwxNX0sIHsgICAxMDIzLDE0fSwgXAorICAgIHsgICAyMDQ3LDEzfSwgeyAgIDQyMjMsMTR9LCB7ICAgMjMwMywxM30sIHsgICA0ODYzLDE0fSwgXAorICAgIHsgICAyODE1LDE1fSwgeyAgIDE1MzUsMTR9LCB7ICAgMzgzOSwxNn0gfQorI2RlZmluZSBTUVJfRkZUX1RBQkxFM19TSVpFIDE2NworI2RlZmluZSBTUVJfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNTUwNAorCisjZGVmaW5lIE1VTExPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICA0CisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgIDE0MjgxCisjZGVmaW5lIFNRUkxPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICA2CisjZGVmaW5lIFNRUkxPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTkzCisjZGVmaW5lIFNRUkxPX1NRUl9USFJFU0hPTEQgICAgICAgICAgICAgIDEwNzA0CisKKyNkZWZpbmUgRENfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgODQKKyNkZWZpbmUgRENfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAyNzgKKyNkZWZpbmUgRENfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgODcKKyNkZWZpbmUgRENfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyMTYKKworI2RlZmluZSBJTlZfTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICA1MAorI2RlZmluZSBJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDI2OAorI2RlZmluZSBJTlZfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDI2OAorCisjZGVmaW5lIEJJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgMjc2CisjZGVmaW5lIFJFRENfMV9UT19SRURDX05fVEhSRVNIT0xEICAgICAgICAgIDc4CisKKyNkZWZpbmUgTVVfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE2NTIKKyNkZWZpbmUgTVVfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgIDE1MjgKKyNkZWZpbmUgTVVQSV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAxMTQKKyNkZWZpbmUgTVVfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgIDE0NDIKKyNkZWZpbmUgTVVfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE0NjYKKworI2RlZmluZSBQT1dNX1NFQ19UQUJMRSAgMSwyMiwxMDIsNDUyLDEzNTcKKworI2RlZmluZSBHRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBHRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgICAyNAorI2RlZmluZSBTRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDI3MAorI2RlZmluZSBTRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgMTE0OQorCisjZGVmaW5lIEZBQ19EU0NfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgMjA4CisjZGVmaW5lIEZBQ19PRERfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDQ4CisKKyNkZWZpbmUgTUFUUklYMjJfU1RSQVNTRU5fVEhSRVNIT0xEICAgICAgICAgMTYKKyNkZWZpbmUgSEdDRDJfRElWMV9NRVRIT0QgICAgICAgICAgICAgICAgICAgIDMgIC8qIDQuNjklIGZhc3RlciB0aGFuIDEgKi8KKyNkZWZpbmUgSEdDRF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgICAxMzkKKyNkZWZpbmUgSEdDRF9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNzQKKyNkZWZpbmUgSEdDRF9SRURVQ0VfVEhSRVNIT0xEICAgICAgICAgICAgIDMzODkKKyNkZWZpbmUgR0NEX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICA1OTkKKyNkZWZpbmUgR0NERVhUX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA0MTkKKyNkZWZpbmUgSkFDT0JJX0JBU0VfTUVUSE9EICAgICAgICAgICAgICAgICAgIDEgIC8qIDEuNTclIGZhc3RlciB0aGFuIDQgKi8KKworLyogVHVuZXVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIHRvb2sgODM4NTEgc2Vjb25kcyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvbHNoaWZ0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2xzaGlmdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVlNjE1MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L2xzaGlmdC5hc20KQEAgLTAsMCArMSwxMDYgQEAKK2RubCAgeDg2IG1wbl9sc2hpZnQgLS0gbXBuIGxlZnQgc2hpZnQuCisKK2RubCAgQ29weXJpZ2h0IDE5OTIsIDE5OTQsIDE5OTYsIDE5OTktMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MgICAgIGN5Y2xlcy9saW1iCitDIFA1NAkgNy41CitDIFA1NQkgNy4wCitDIFA2CSAyLjUKK0MgSzYJIDQuNQorQyBLNwkgNS4wCitDIFA0CTE0LjUKKworCitDIG1wX2xpbWJfdCBtcG5fbHNoaWZ0IChtcF9wdHIgZHN0LCBtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSwKK0MgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNoaWZ0KTsKKworZGVmZnJhbWUoUEFSQU1fU0hJRlQsMTYpCitkZWZmcmFtZShQQVJBTV9TSVpFLCAxMikKK2RlZmZyYW1lKFBBUkFNX1NSQywgIDgpCitkZWZmcmFtZShQQVJBTV9EU1QsICA0KQorCisJVEVYVAorCUFMSUdOKDgpCitQUk9MT0dVRShtcG5fbHNoaWZ0KQorCisJcHVzaGwJJWVkaQorCXB1c2hsCSVlc2kKKwlwdXNobAklZWJ4CitkZWZsaXQoYEZSQU1FJywxMikKKworCW1vdmwJUEFSQU1fRFNULCVlZGkKKwltb3ZsCVBBUkFNX1NSQywlZXNpCisJbW92bAlQQVJBTV9TSVpFLCVlZHgKKwltb3ZsCVBBUkFNX1NISUZULCVlY3gKKworCXN1YmwJJDQsJWVzaQkJCUMgYWRqdXN0IHNyYworCisJbW92bAkoJWVzaSwlZWR4LDQpLCVlYngJQyByZWFkIG1vc3Qgc2lnbmlmaWNhbnQgbGltYgorCXhvcmwJJWVheCwlZWF4CisJc2hsZGwoCSVjbCwgJWVieCwgJWVheCkJQyBjb21wdXRlIGNhcnJ5IGxpbWIKKwlkZWNsCSVlZHgKKwlqeglMKGVuZCkKKwlwdXNobAklZWF4CQkJQyBwdXNoIGNhcnJ5IGxpbWIgb250byBzdGFjaworCXRlc3RiCSQxLCVkbAorCWpueglMKDEpCQkJQyBlbnRlciBsb29wIGluIHRoZSBtaWRkbGUKKwltb3ZsCSVlYngsJWVheAorCisJQUxJR04oOCkKK0wob29wKToJbW92bAkoJWVzaSwlZWR4LDQpLCVlYngJQyBsb2FkIG5leHQgbG93ZXIgbGltYgorCXNobGRsKAklY2wsICVlYngsICVlYXgpCUMgY29tcHV0ZSByZXN1bHQgbGltYgorCW1vdmwJJWVheCwoJWVkaSwlZWR4LDQpCUMgc3RvcmUgaXQKKwlkZWNsCSVlZHgKK0woMSk6CW1vdmwJKCVlc2ksJWVkeCw0KSwlZWF4CisJc2hsZGwoCSVjbCwgJWVheCwgJWVieCkKKwltb3ZsCSVlYngsKCVlZGksJWVkeCw0KQorCWRlY2wJJWVkeAorCWpueglMKG9vcCkKKworCXNobGwJJWNsLCVlYXgJCUMgY29tcHV0ZSBsZWFzdCBzaWduaWZpY2FudCBsaW1iCisJbW92bAklZWF4LCglZWRpKQkJQyBzdG9yZSBpdAorCisJcG9wbAklZWF4CQkJQyBwb3AgY2FycnkgbGltYgorCisJcG9wbAklZWJ4CisJcG9wbAklZXNpCisJcG9wbAklZWRpCisJcmV0CisKK0woZW5kKToJc2hsbAklY2wsJWVieAkJQyBjb21wdXRlIGxlYXN0IHNpZ25pZmljYW50IGxpbWIKKwltb3ZsCSVlYngsKCVlZGkpCQlDIHN0b3JlIGl0CisKKwlwb3BsCSVlYngKKwlwb3BsCSVlc2kKKwlwb3BsCSVlZGkKKwlyZXQKKworRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvbW14L3NlY190YWJzZWxlY3QuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvbW14L3NlY190YWJzZWxlY3QuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhZTE1OGEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9tbXgvc2VjX3RhYnNlbGVjdC5hc20KQEAgLTAsMCArMSwxNjMgQEAKK2RubCAgWDg2IE1NWCBtcG5fc2VjX3RhYnNlbGVjdC4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDExLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkJCSAgICAgY3ljbGVzL2xpbWIgICAgIGN5Y2xlcy9saW1iCitDCQkJICAgICAgYWxpLGV2biBuCSAgICAgdW5hbCxldm4gbgorQyBQNQorQyBQNiBtb2RlbCAwLTgsMTAtMTIKK0MgUDYgbW9kZWwgOSAgKEJhbmlhcykKK0MgUDYgbW9kZWwgMTMgKERvdGhhbikJCSAxLjMzCQkgMS44NworQyBQNCBtb2RlbCAwICAoV2lsbGFtZXR0ZSkKK0MgUDQgbW9kZWwgMSAgKD8pCitDIFA0IG1vZGVsIDIgIChOb3J0aHdvb2QpCSAyLjEJCSAyLjYzCitDIFA0IG1vZGVsIDMgIChQcmVzY290dCkKK0MgUDQgbW9kZWwgNCAgKE5vY29uYSkJCSAxLjcJCSAyLjU3CitDIEludGVsIEF0b20JCQkgMS44NQkJIDIuNworQyBBTUQgSzYKK0MgQU1EIEs3CQkJIDEuMzMJCSAxLjMzCitDIEFNRCBLOAorQyBBTUQgSzEwCisKK2RlZmluZShgcnAnLCAgICAgYCVlZGknKQorZGVmaW5lKGB0cCcsICAgICBgJWVzaScpCitkZWZpbmUoYG4nLCAgICAgIGAlZWR4JykKK2RlZmluZShgbmVudHMnLCAgYCVlY3gnKQorZGVmaW5lKGB3aGljaCcsICBgJykKKworZGVmaW5lKGBpJywgICAgICBgJWVicCcpCitkZWZpbmUoYGonLCAgICAgIGAlZWJ4JykKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMTYpCitQUk9MT0dVRShtcG5fc2VjX3RhYnNlbGVjdCkKKwlwdXNoCSVlYngKKwlwdXNoCSVlc2kKKwlwdXNoCSVlZGkKKwlwdXNoCSVlYnAKKworCW1vdgkyMCglZXNwKSwgcnAKKwltb3YJMjQoJWVzcCksIHRwCisJbW92CTI4KCVlc3ApLCBuCisJbW92CTMyKCVlc3ApLCBuZW50cworCisJbW92ZAkzNiglZXNwKSwgJW1tNgorCXB1bnBja2xkcSAlbW02LCAlbW02CQlDIDIgY29waWVzIG9mIGB3aGljaCcKKworCW1vdgkkMSwgJWVieAorCW1vdmQJJWVieCwgJW1tNworCXB1bnBja2xkcSAlbW03LCAlbW03CQlDIDIgY29waWVzIG9mIDEKKworCW1vdgluLCBqCisJYWRkCSQtNCwgagorCWpzCUwob3V0ZXJfZW5kKQorCitMKG91dGVyX3RvcCk6CisJbW92CW5lbnRzLCBpCisJbW92CXRwLCAlZWF4CisJcHhvcgklbW0xLCAlbW0xCisJcHhvcgklbW00LCAlbW00CisJcHhvcgklbW01LCAlbW01CisJQUxJR04oMTYpCitMKHRvcCk6CW1vdnEJJW1tNiwgJW1tMAorCXBjbXBlcWQJJW1tMSwgJW1tMAorCXBhZGRkCSVtbTcsICVtbTEKKwltb3ZxCSh0cCksICVtbTIKKwltb3ZxCTgodHApLCAlbW0zCisJcGFuZAklbW0wLCAlbW0yCisJcGFuZAklbW0wLCAlbW0zCisJcG9yCSVtbTIsICVtbTQKKwlwb3IJJW1tMywgJW1tNQorCWxlYQkodHAsbiw0KSwgdHAKKwlhZGQJJC0xLCBpCisJam5lCUwodG9wKQorCisJbW92cQklbW00LCAocnApCisJbW92cQklbW01LCA4KHJwKQorCisJbGVhCTE2KCVlYXgpLCB0cAorCWxlYQkxNihycCksIHJwCisJYWRkCSQtNCwgagorCWpucwlMKG91dGVyX3RvcCkKK0wob3V0ZXJfZW5kKToKKworCXRlc3QJJDIsICVkbAorCWp6CUwoYjB4KQorCitMKGIxeCk6CW1vdgluZW50cywgaQorCW1vdgl0cCwgJWVheAorCXB4b3IJJW1tMSwgJW1tMQorCXB4b3IJJW1tNCwgJW1tNAorCUFMSUdOKDE2KQorTCh0cDIpOgltb3ZxCSVtbTYsICVtbTAKKwlwY21wZXFkCSVtbTEsICVtbTAKKwlwYWRkZAklbW03LCAlbW0xCisJbW92cQkodHApLCAlbW0yCisJcGFuZAklbW0wLCAlbW0yCisJcG9yCSVtbTIsICVtbTQKKwlsZWEJKHRwLG4sNCksIHRwCisJYWRkCSQtMSwgaQorCWpuZQlMKHRwMikKKworCW1vdnEJJW1tNCwgKHJwKQorCisJbGVhCTgoJWVheCksIHRwCisJbGVhCTgocnApLCBycAorCitMKGIweCk6CXRlc3QJJDEsICVkbAorCWp6CUwoYjAwKQorCitMKGIwMSk6CW1vdgluZW50cywgaQorCXB4b3IJJW1tMSwgJW1tMQorCXB4b3IJJW1tNCwgJW1tNAorCUFMSUdOKDE2KQorTCh0cDEpOgltb3ZxCSVtbTYsICVtbTAKKwlwY21wZXFkCSVtbTEsICVtbTAKKwlwYWRkZAklbW03LCAlbW0xCisJbW92ZAkodHApLCAlbW0yCisJcGFuZAklbW0wLCAlbW0yCisJcG9yCSVtbTIsICVtbTQKKwlsZWEJKHRwLG4sNCksIHRwCisJYWRkCSQtMSwgaQorCWpuZQlMKHRwMSkKKworCW1vdmQJJW1tNCwgKHJwKQorCitMKGIwMCk6CXBvcAklZWJwCisJcG9wCSVlZGkKKwlwb3AJJWVzaQorCXBvcAklZWJ4CisJZW1tcworCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvbW9kXzM0bHN1YjEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvbW9kXzM0bHN1YjEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwOWU3MDIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9tb2RfMzRsc3ViMS5hc20KQEAgLTAsMCArMSwxODMgQEAKK2RubCAgR2VuZXJpYyB4ODYgbXBuX21vZF8zNGxzdWIxIC0tIG1wbiByZW1haW5kZXIgbW9kdWxvIDJeMjQtMS4KKworZG5sICBDb3B5cmlnaHQgMjAwMC0yMDAyLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQyAgICAgIGN5Y2xlcy9saW1iCitDIFA1CSAgMy4wCitDIFA2CSAgMy42NgorQyBLNgkgIDMuMAorQyBLNwkgIDEuMworQyBQNAkgIDkKKworCitDIG1wX2xpbWJfdCBtcG5fbW9kXzM0bHN1YjEgKG1wX3NyY3B0ciBzcmMsIG1wX3NpemVfdCBzaXplKQorQworCitkZWZmcmFtZShQQVJBTV9TSVpFLCA4KQorZGVmZnJhbWUoUEFSQU1fU1JDLCAgNCkKKworZG5sICByZS11c2UgcGFyYW1ldGVyIHNwYWNlCitkZWZpbmUoU0FWRV9FQlgsIGBQQVJBTV9TUkMnKQorCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX21vZF8zNGxzdWIxKQorZGVmbGl0KGBGUkFNRScsMCkKKworCW1vdmwJUEFSQU1fU0laRSwgJWVjeAorCW1vdmwJUEFSQU1fU1JDLCAlZWR4CisKKwlzdWJsCSQyLCAlZWN4CisJamEJTCh0aHJlZV9vcl9tb3JlKQorCisJbW92bAkoJWVkeCksICVlYXgKKwlqYglMKG9uZSkKKworCW1vdmwJNCglZWR4KSwgJWVjeAorCW1vdmwJJWVheCwgJWVkeAorCXNocmwJJDI0LCAlZWF4CQlDIHNyY1swXSBsb3cKKworCWFuZGwJJDB4RkZGRkZGLCAlZWR4CQlDIHNyY1swXSBoaWdoCisJYWRkbAklZWR4LCAlZWF4CisJbW92bAklZWN4LCAlZWR4CisKKwlhbmRsCSQweEZGRkYsICVlY3gKKwlzaHJsCSQxNiwgJWVkeAkJQyBzcmNbMV0gaGlnaAorCWFkZGwJJWVkeCwgJWVheAorCisJc2hsbAkkOCwgJWVjeAkJQyBzcmNbMV0gbG93CisJYWRkbAklZWN4LCAlZWF4CisKK0wob25lKToKKwlyZXQKKworCitMKHRocmVlX29yX21vcmUpOgorCUMgZWF4CisJQyBlYngKKwlDIGVjeAlzaXplLTIKKwlDIGVkeAlzcmMKKwlDIGVzaQorCUMgZWRpCisJQyBlYnAKKworCW1vdmwJJWVieCwgU0FWRV9FQlgJCUMgYW5kIGFycmFuZ2UgMTYtYnl0ZSBsb29wIGFsaWdubWVudAorCXhvcmwJJWVieCwgJWVieAorCisJcHVzaGwJJWVzaQlGUkFNRV9wdXNobCgpCisJeG9ybAklZXNpLCAlZXNpCisKKwlwdXNobAklZWRpCUZSQU1FX3B1c2hsKCkKKwl4b3JsCSVlYXgsICVlYXgJCUMgYW5kIGNsZWFyIGNhcnJ5IGZsYWcKKworCisJQyBvZmZzZXQgMHg0MCBoZXJlCitMKHRvcCk6CisJQyBlYXgJYWNjIDBtb2QzCisJQyBlYngJYWNjIDFtb2QzCisJQyBlY3gJY291bnRlciwgbGltYnMKKwlDIGVkeAlzcmMKKwlDIGVzaQlhY2MgMm1vZDMKKwlDIGVkaQorCUMgZWJwCisKKwlsZWFsCTEyKCVlZHgpLCAlZWR4CisJbGVhbAktMiglZWN4KSwgJWVjeAorCisJYWRjbAktMTIoJWVkeCksICVlYXgKKwlhZGNsCS04KCVlZHgpLCAlZWJ4CisJYWRjbAktNCglZWR4KSwgJWVzaQorCisJZGVjbAklZWN4CisJamcJTCh0b3ApCisKKworCUMgZWN4IGlzIC0yLCAtMSBvciAwIHJlcHJlc2VudGluZyAwLCAxIG9yIDIgbW9yZSBsaW1icywgcmVzcGVjdGl2ZWx5CisKKwltb3ZsCSQweEZGRkZGRkZGLCAlZWRpCisJaW5jbAklZWN4CisJanMJTChjb21iaW5lKQorCisJYWRjbAkoJWVkeCksICVlYXgKKwltb3ZsCSQweEZGRkZGRjAwLCAlZWRpCisJZGVjbAklZWN4CisJanMJTChjb21iaW5lKQorCisJYWRjbAk0KCVlZHgpLCAlZWJ4CisJbW92bAkkMHhGRkZGMDAwMCwgJWVkaQorCisKK0woY29tYmluZSk6CisJQyBlYXgJYWNjIDBtb2QzCisJQyBlYngJYWNjIDFtb2QzCisJQyBlY3gKKwlDIGVkeAorCUMgZXNpCWFjYyAybW9kMworCUMgZWRpCW1hc2sKKwlDIGVicAorCisJc2JibAklZWN4LCAlZWN4CQlDIGNhcnJ5CisJbW92bAklZWF4LCAlZWR4CQlDIDBtb2QzCisKKwlzaHJsCSQyNCwgJWVheAkJQyAwbW9kMyBoaWdoCisJYW5kbAklZWRpLCAlZWN4CQlDIGNhcnJ5IG1hc2tlZAorCisJc3VibAklZWN4LCAlZWF4CQlDIGFwcGx5IGNhcnJ5CisJbW92bAklZWJ4LCAlZWRpCQlDIDFtb2QzCisKKwlzaHJsCSQxNiwgJWVieAkJQyAxbW9kMyBoaWdoCisJYW5kbAkkMHgwMEZGRkZGRiwgJWVkeAlDIDBtb2QzIGxvdworCisJYWRkbAklZWR4LCAlZWF4CQlDIGFwcGx5IDBtb2QzIGxvdworCWFuZGwJJDB4RkZGRiwgJWVkaQorCisJc2hsbAkkOCwgJWVkaQkJQyAxbW9kMyBsb3cKKwlhZGRsCSVlYngsICVlYXgJCUMgYXBwbHkgMW1vZDMgaGlnaAorCisJYWRkbAklZWRpLCAlZWF4CQlDIGFwcGx5IDFtb2QzIGxvdworCW1vdmwJJWVzaSwgJWVkeAkJQyAybW9kMworCisJc2hybAkkOCwgJWVzaQkJQyAybW9kMyBoaWdoCisJYW5kbAkkMHhGRiwgJWVkeAkJQyAybW9kMyBsb3cKKworCXNobGwJJDE2LCAlZWR4CQlDIDJtb2QzIGxvdworCWFkZGwJJWVzaSwgJWVheAkJQyBhcHBseSAybW9kMyBoaWdoCisKKwlhZGRsCSVlZHgsICVlYXgJCUMgYXBwbHkgMm1vZDMgbG93CisJcG9wbAklZWRpCUZSQU1FX3BvcGwoKQorCisJbW92bAlTQVZFX0VCWCwgJWVieAorCXBvcGwJJWVzaQlGUkFNRV9wb3BsKCkKKworCXJldAorCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9tdWxfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9tdWxfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIxZGU2MgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L211bF8xLmFzbQpAQCAtMCwwICsxLDE0MCBAQAorZG5sICB4ODYgbXBuX211bF8xIChmb3IgMzg2LCA0ODYsIGFuZCBQZW50aXVtIFBybykgLS0gTXVsdGlwbHkgYSBsaW1iIHZlY3RvcgorZG5sICB3aXRoIGEgbGltYiBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiBhIHNlY29uZCBsaW1iIHZlY3Rvci4KKworZG5sICBDb3B5cmlnaHQgMTk5MiwgMTk5NCwgMTk5Ny0yMDAyLCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQwkJCSAgICBjeWNsZXMvbGltYgorQyBQNQkJCQkxMi41CitDIFA2IG1vZGVsIDAtOCwxMC0xMgkJIDUuNQorQyBQNiBtb2RlbCA5ICAoQmFuaWFzKQorQyBQNiBtb2RlbCAxMyAoRG90aGFuKQkJIDUuMjUKK0MgUDQgbW9kZWwgMCAgKFdpbGxhbWV0dGUpCTE5LjAKK0MgUDQgbW9kZWwgMSAgKD8pCQkxOS4wCitDIFA0IG1vZGVsIDIgIChOb3J0aHdvb2QpCTE5LjAKK0MgUDQgbW9kZWwgMyAgKFByZXNjb3R0KQorQyBQNCBtb2RlbCA0ICAoTm9jb25hKQorQyBBTUQgSzYJCQkxMC41CitDIEFNRCBLNwkJCSA0LjUKK0MgQU1EIEs4CisKKworQyBtcF9saW1iX3QgbXBuX211bF8xIChtcF9wdHIgZHN0LCBtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSwKK0MgICAgICAgICAgICAgICAgICAgICAgbXBfbGltYl90IG11bHRpcGxpZXIpOworCitkZWZmcmFtZShQQVJBTV9NVUxUSVBMSUVSLDE2KQorZGVmZnJhbWUoUEFSQU1fU0laRSwgICAgICAxMikKK2RlZmZyYW1lKFBBUkFNX1NSQywgICAgICAgOCkKK2RlZmZyYW1lKFBBUkFNX0RTVCwgICAgICAgNCkKKworCVRFWFQKKwlBTElHTig4KQorUFJPTE9HVUUobXBuX211bF8xKQorZGVmbGl0KGBGUkFNRScsMCkKKworCXB1c2hsCSVlZGkKKwlwdXNobAklZXNpCisJcHVzaGwJJWVieAorCXB1c2hsCSVlYnAKK2RlZmxpdChgRlJBTUUnLDE2KQorCisJbW92bAlQQVJBTV9EU1QsJWVkaQorCW1vdmwJUEFSQU1fU1JDLCVlc2kKKwltb3ZsCVBBUkFNX1NJWkUsJWVjeAorCisJeG9ybAklZWJ4LCVlYngKKwlhbmRsCSQzLCVlY3gKKwlqeglMKGVuZDApCisKK0wob29wMCk6CisJbW92bAkoJWVzaSksJWVheAorCW11bGwJUEFSQU1fTVVMVElQTElFUgorCWxlYWwJNCglZXNpKSwlZXNpCisJYWRkbAklZWJ4LCVlYXgKKwltb3ZsCSQwLCVlYngKKwlhZGNsCSVlYngsJWVkeAorCW1vdmwJJWVheCwoJWVkaSkKKwltb3ZsCSVlZHgsJWVieAlDIHByb3BhZ2F0ZSBjYXJyeSBpbnRvIGN5bGltYgorCisJbGVhbAk0KCVlZGkpLCVlZGkKKwlkZWNsCSVlY3gKKwlqbnoJTChvb3AwKQorCitMKGVuZDApOgorCW1vdmwJUEFSQU1fU0laRSwlZWN4CisJc2hybAkkMiwlZWN4CisJanoJTChlbmQpCisKKworCUFMSUdOKDgpCitMKG9vcCk6CW1vdmwJKCVlc2kpLCVlYXgKKwltdWxsCVBBUkFNX01VTFRJUExJRVIKKwlhZGRsCSVlYXgsJWVieAorCW1vdmwJJDAsJWVicAorCWFkY2wJJWVkeCwlZWJwCisKKwltb3ZsCTQoJWVzaSksJWVheAorCW11bGwJUEFSQU1fTVVMVElQTElFUgorCW1vdmwJJWVieCwoJWVkaSkKKwlhZGRsCSVlYXgsJWVicAlDIG5ldyBsbyArIGN5bGltYgorCW1vdmwJJDAsJWVieAorCWFkY2wJJWVkeCwlZWJ4CisKKwltb3ZsCTgoJWVzaSksJWVheAorCW11bGwJUEFSQU1fTVVMVElQTElFUgorCW1vdmwJJWVicCw0KCVlZGkpCisJYWRkbAklZWF4LCVlYngJQyBuZXcgbG8gKyBjeWxpbWIKKwltb3ZsCSQwLCVlYnAKKwlhZGNsCSVlZHgsJWVicAorCisJbW92bAkxMiglZXNpKSwlZWF4CisJbXVsbAlQQVJBTV9NVUxUSVBMSUVSCisJbW92bAklZWJ4LDgoJWVkaSkKKwlhZGRsCSVlYXgsJWVicAlDIG5ldyBsbyArIGN5bGltYgorCW1vdmwJJDAsJWVieAorCWFkY2wJJWVkeCwlZWJ4CisKKwltb3ZsCSVlYnAsMTIoJWVkaSkKKworCWxlYWwJMTYoJWVzaSksJWVzaQorCWxlYWwJMTYoJWVkaSksJWVkaQorCWRlY2wJJWVjeAorCWpueglMKG9vcCkKKworTChlbmQpOgltb3ZsCSVlYngsJWVheAorCisJcG9wbAklZWJwCisJcG9wbAklZWJ4CisJcG9wbAklZXNpCisJcG9wbAklZWRpCisJcmV0CisKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L211bF9iYXNlY2FzZS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9tdWxfYmFzZWNhc2UuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMzk3MzIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9tdWxfYmFzZWNhc2UuYXNtCkBAIC0wLDAgKzEsMjIzIEBACitkbmwgIHg4NiBtcG5fbXVsX2Jhc2VjYXNlIC0tIE11bHRpcGx5IHR3byBsaW1iIHZlY3RvcnMgYW5kIHN0b3JlIHRoZSByZXN1bHQKK2RubCAgaW4gYSB0aGlyZCBsaW1iIHZlY3Rvci4KKworZG5sICBDb3B5cmlnaHQgMTk5Ni0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQyAgICAgY3ljbGVzL2Nyb3NzcHJvZHVjdAorQyBQNQkgIDE1CitDIFA2CSAgIDcuNQorQyBLNgkgIDEyLjUKK0MgSzcJICAgNS41CitDIFA0CSAgMjQKKworCitDIHZvaWQgbXBuX211bF9iYXNlY2FzZSAobXBfcHRyIHdwLAorQyAgICAgICAgICAgICAgICAgICAgICAgIG1wX3NyY3B0ciB4cCwgbXBfc2l6ZV90IHhzaXplLAorQyAgICAgICAgICAgICAgICAgICAgICAgIG1wX3NyY3B0ciB5cCwgbXBfc2l6ZV90IHlzaXplKTsKK0MKK0MgVGhpcyB3YXMgd3JpdHRlbiBpbiBhIGhhc3RlIHNpbmNlIHRoZSBQZW50aXVtIG9wdGltaXplZCBjb2RlIHRoYXQgd2FzIHVzZWQKK0MgZm9yIGFsbCB4ODYgbWFjaGluZXMgd2FzIHNsb3cgZm9yIHRoZSBQZW50aXVtIElJLiAgVGhpcyBjb2RlIHdvdWxkIGJlbmVmaXQKK0MgZnJvbSBzb21lIGNsZWFudXAuCitDCitDIFRvIHNoYXZlIG9mZiBzb21lIHBlcmNlbnRhZ2Ugb2YgdGhlIHJ1bi10aW1lLCBvbmUgc2hvdWxkIG1ha2UgNCB2YXJpYW50cworQyBvZiB0aGUgTG91dGVyIGxvb3AsIGZvciB0aGUgZm91ciBkaWZmZXJlbnQgb3V0Y29tZXMgb2YgdW4gbW9kIDQuICBUaGF0CitDIHdvdWxkIGF2b2lkIExvb3AwIGFsdG9nZXRoZXIuICBDb2RlIGV4cGFuc2lvbiB3b3VsZCBiZSA+IDQtZm9sZCBmb3IgdGhhdAorQyBwYXJ0IG9mIHRoZSBmdW5jdGlvbiwgYnV0IHNpbmNlIGl0IGlzIG5vdCB2ZXJ5IGxhcmdlLCB0aGF0IHdvdWxkIGJlCitDIGFjY2VwdGFibGUuCitDCitDIFRoZSBtdWwgbG9vcCAoYXQgTChvb3BNKSkgbWlnaHQgbmVlZCBzb21lIHR3ZWFraW5nLiAgSXQncyBjdXJyZW50IHNwZWVkIGlzCitDIHVua25vd24uCisKK2RlZmZyYW1lKFBBUkFNX1lTSVpFLDIwKQorZGVmZnJhbWUoUEFSQU1fWVAsICAgMTYpCitkZWZmcmFtZShQQVJBTV9YU0laRSwxMikKK2RlZmZyYW1lKFBBUkFNX1hQLCAgIDgpCitkZWZmcmFtZShQQVJBTV9XUCwgICA0KQorCitkZWZmcmFtZShWQVJfTVVMVElQTElFUiwgLTQpCitkZWZmcmFtZShWQVJfQ09VTlRFUiwgICAgLTgpCitkZWZsaXQoVkFSX1NUQUNLX1NQQUNFLCAgOCkKKworCVRFWFQKKwlBTElHTig4KQorCitQUk9MT0dVRShtcG5fbXVsX2Jhc2VjYXNlKQorZGVmbGl0KGBGUkFNRScsMCkKKworCXN1YmwJJFZBUl9TVEFDS19TUEFDRSwlZXNwCisJcHVzaGwJJWVzaQorCXB1c2hsCSVlYnAKKwlwdXNobAklZWRpCitkZWZsaXQoYEZSQU1FJyxldmFsKFZBUl9TVEFDS19TUEFDRSsxMikpCisKKwltb3ZsCVBBUkFNX1hQLCVlc2kKKwltb3ZsCVBBUkFNX1dQLCVlZGkKKwltb3ZsCVBBUkFNX1lQLCVlYnAKKworCW1vdmwJKCVlc2kpLCVlYXgJCUMgbG9hZCB4cFswXQorCW11bGwJKCVlYnApCQkJQyBtdWx0aXBseSBieSB5cFswXQorCW1vdmwJJWVheCwoJWVkaSkJCUMgc3RvcmUgdG8gd3BbMF0KKwltb3ZsCVBBUkFNX1hTSVpFLCVlY3gJQyB4c2l6ZQorCWRlY2wJJWVjeAkJCUMgSWYgeHNpemUgPSAxLCB5c2l6ZSA9IDEgdG9vCisJanoJTChkb25lKQorCisJcHVzaGwJJWVieAorRlJBTUVfcHVzaGwoKQorCW1vdmwJJWVkeCwlZWJ4CisKKwlsZWFsCTQoJWVzaSksJWVzaQorCWxlYWwJNCglZWRpKSwlZWRpCisKK0wob29wTSk6CisJbW92bAkoJWVzaSksJWVheAkJQyBsb2FkIG5leHQgbGltYiBhdCB4cFtqXQorCWxlYWwJNCglZXNpKSwlZXNpCisJbXVsbAkoJWVicCkKKwlhZGRsCSVlYngsJWVheAorCW1vdmwJJWVkeCwlZWJ4CisJYWRjbAkkMCwlZWJ4CisJbW92bAklZWF4LCglZWRpKQorCWxlYWwJNCglZWRpKSwlZWRpCisJZGVjbAklZWN4CisJam56CUwob29wTSkKKworCW1vdmwJJWVieCwoJWVkaSkJCUMgbW9zdCBzaWduaWZpY2FudCBsaW1iIG9mIHByb2R1Y3QKKwlhZGRsCSQ0LCVlZGkJCQlDIGluY3JlbWVudCB3cAorCW1vdmwJUEFSQU1fWFNJWkUsJWVheAorCXNobGwJJDIsJWVheAorCXN1YmwJJWVheCwlZWRpCisJc3VibAklZWF4LCVlc2kKKworCW1vdmwJUEFSQU1fWVNJWkUsJWVheAlDIHlzaXplCisJZGVjbAklZWF4CisJanoJTChza2lwKQorCW1vdmwJJWVheCxWQVJfQ09VTlRFUglDIHNldCBpbmRleCBpIHRvIHlzaXplCisKK0wob3V0ZXIpOgorCW1vdmwJUEFSQU1fWVAsJWVicAkJQyB5cAorCWFkZGwJJDQsJWVicAkJCUMgbWFrZSBlYnAgcG9pbnQgdG8gbmV4dCB2IGxpbWIKKwltb3ZsCSVlYnAsUEFSQU1fWVAKKwltb3ZsCSglZWJwKSwlZWF4CQlDIGNvcHkgeSBsaW1iIC4uLgorCW1vdmwJJWVheCxWQVJfTVVMVElQTElFUglDIC4uLiB0byBzdGFjayBzbG90CisJbW92bAlQQVJBTV9YU0laRSwlZWN4CisKKwl4b3JsCSVlYngsJWVieAorCWFuZGwJJDMsJWVjeAorCWp6CUwoZW5kMCkKKworTChvb3AwKToKKwltb3ZsCSglZXNpKSwlZWF4CisJbXVsbAlWQVJfTVVMVElQTElFUgorCWxlYWwJNCglZXNpKSwlZXNpCisJYWRkbAklZWJ4LCVlYXgKKwltb3ZsCSQwLCVlYngKKwlhZGNsCSVlYngsJWVkeAorCWFkZGwJJWVheCwoJWVkaSkKKwlhZGNsCSVlZHgsJWVieAkJQyBwcm9wYWdhdGUgY2FycnkgaW50byBjeWxpbWIKKworCWxlYWwJNCglZWRpKSwlZWRpCisJZGVjbAklZWN4CisJam56CUwob29wMCkKKworTChlbmQwKToKKwltb3ZsCVBBUkFNX1hTSVpFLCVlY3gKKwlzaHJsCSQyLCVlY3gKKwlqeglMKGVuZFgpCisKKwlBTElHTig4KQorTChvb3BYKToKKwltb3ZsCSglZXNpKSwlZWF4CisJbXVsbAlWQVJfTVVMVElQTElFUgorCWFkZGwJJWVheCwlZWJ4CisJbW92bAkkMCwlZWJwCisJYWRjbAklZWR4LCVlYnAKKworCW1vdmwJNCglZXNpKSwlZWF4CisJbXVsbAlWQVJfTVVMVElQTElFUgorCWFkZGwJJWVieCwoJWVkaSkKKwlhZGNsCSVlYXgsJWVicAlDIG5ldyBsbyArIGN5bGltYgorCW1vdmwJJDAsJWVieAorCWFkY2wJJWVkeCwlZWJ4CisKKwltb3ZsCTgoJWVzaSksJWVheAorCW11bGwJVkFSX01VTFRJUExJRVIKKwlhZGRsCSVlYnAsNCglZWRpKQorCWFkY2wJJWVheCwlZWJ4CUMgbmV3IGxvICsgY3lsaW1iCisJbW92bAkkMCwlZWJwCisJYWRjbAklZWR4LCVlYnAKKworCW1vdmwJMTIoJWVzaSksJWVheAorCW11bGwJVkFSX01VTFRJUExJRVIKKwlhZGRsCSVlYngsOCglZWRpKQorCWFkY2wJJWVheCwlZWJwCUMgbmV3IGxvICsgY3lsaW1iCisJbW92bAkkMCwlZWJ4CisJYWRjbAklZWR4LCVlYngKKworCWFkZGwJJWVicCwxMiglZWRpKQorCWFkY2wJJDAsJWVieAkJQyBwcm9wYWdhdGUgY2FycnkgaW50byBjeWxpbWIKKworCWxlYWwJMTYoJWVzaSksJWVzaQorCWxlYWwJMTYoJWVkaSksJWVkaQorCWRlY2wJJWVjeAorCWpueglMKG9vcFgpCisKK0woZW5kWCk6CisJbW92bAklZWJ4LCglZWRpKQorCWFkZGwJJDQsJWVkaQorCisJQyB3ZSBpbmNyZW1lbnRlZCB3cCBhbmQgeHAgaW4gdGhlIGxvb3AgYWJvdmU7IGNvbXBlbnNhdGUKKwltb3ZsCVBBUkFNX1hTSVpFLCVlYXgKKwlzaGxsCSQyLCVlYXgKKwlzdWJsCSVlYXgsJWVkaQorCXN1YmwJJWVheCwlZXNpCisKKwltb3ZsCVZBUl9DT1VOVEVSLCVlYXgKKwlkZWNsCSVlYXgKKwltb3ZsCSVlYXgsVkFSX0NPVU5URVIKKwlqbnoJTChvdXRlcikKKworTChza2lwKToKKwlwb3BsCSVlYngKKwlwb3BsCSVlZGkKKwlwb3BsCSVlYnAKKwlwb3BsCSVlc2kKKwlhZGRsCSQ4LCVlc3AKKwlyZXQKKworTChkb25lKToKKwltb3ZsCSVlZHgsNCglZWRpKQkgICBDIHN0b3JlIHRvIHdwWzFdCisJcG9wbAklZWRpCisJcG9wbAklZWJwCisJcG9wbAklZXNpCisJYWRkbAkkOCwlZXNwCisJcmV0CisKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L25hbm8vZ21wLW1wYXJhbS5oIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvbmFuby9nbXAtbXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q4YWM0ZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L25hbm8vZ21wLW1wYXJhbS5oCkBAIC0wLDAgKzEsMTYyIEBACisvKiB4ODYvbmFubyBnbXAtbXBhcmFtLmggLS0gQ29tcGlsZXIvbWFjaGluZSBwYXJhbWV0ZXIgaGVhZGVyIGZpbGUuCisKK0NvcHlyaWdodCAxOTkxLCAxOTkzLCAxOTk0LCAyMDAwLTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNkZWZpbmUgR01QX0xJTUJfQklUUyAzMgorI2RlZmluZSBHTVBfTElNQl9CWVRFUyA0CisKKy8qIEdlbmVyYXRlZCBieSB0dW5ldXAuYywgMjAxMS0xMS0yNSwgZ2NjIDQuMiAqLworCisjZGVmaW5lIE1PRF8xXzFQX01FVEhPRCAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIE1PRF8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICAzCisjZGVmaW5lIE1PRF8xTl9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgIDEwCisjZGVmaW5lIE1PRF8xVV9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA5CisjZGVmaW5lIE1PRF8xXzFfVE9fTU9EXzFfMl9USFJFU0hPTEQgICAgICAgICAwICAvKiBuZXZlciBtcG5fbW9kXzFfMXAgKi8KKyNkZWZpbmUgTU9EXzFfMl9UT19NT0RfMV80X1RIUkVTSE9MRCAgICAgICAgNTMKKyNkZWZpbmUgUFJFSU5WX01PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgMTIKKyNkZWZpbmUgVVNFX1BSRUlOVl9ESVZSRU1fMSAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgRElWX1FSXzJfUEkyX1RIUkVTSE9MRCAgICAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWRVhBQ1RfMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAobmF0aXZlKSAqLworI2RlZmluZSBCTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgICAgICAzMgorCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTMyCisjZGVmaW5lIE1VTF9UT09NNDRfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTk1CisjZGVmaW5lIE1VTF9UT09NNkhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjcwCisjZGVmaW5lIE1VTF9UT09NOEhfVEhSRVNIT0xEICAgICAgICAgICAgICAgNDc4CisKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNDNfVEhSRVNIT0xEICAgICAxMjkKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxMzgKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxMzAKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNjNfVEhSRVNIT0xEICAgICAxMzUKKworI2RlZmluZSBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTk0CisjZGVmaW5lIFNRUl9UT09NNF9USFJFU0hPTEQgICAgICAgICAgICAgICAgNTAyCisjZGVmaW5lIFNRUl9UT09NNl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNzQ2CisjZGVmaW5lIFNRUl9UT09NOF9USFJFU0hPTEQgICAgICAgICAgICAgICAxMDA1CisKKyNkZWZpbmUgTVVMTUlEX1RPT000Ml9USFJFU0hPTEQgICAgICAgICAgICAgNDAKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxNAorI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxOQorCisjZGVmaW5lIFBPV01fU0VDX1RBQkxFICA0LDIzLDI1OCw4MjgsMjI0NgorCisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgMzA4ICAvKiBrID0gNSAqLworI2RlZmluZSBNVUxfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgMzA4LCA1fSwgeyAgICAgMTMsIDZ9LCB7ICAgICAgNywgNX0sIHsgICAgIDE3LCA2fSwgXAorICAgIHsgICAgICA5LCA1fSwgeyAgICAgMTksIDZ9LCB7ICAgICAxMSwgNX0sIHsgICAgIDIzLCA2fSwgXAorICAgIHsgICAgIDEzLCA3fSwgeyAgICAgIDcsIDZ9LCB7ICAgICAxNywgN30sIHsgICAgICA5LCA2fSwgXAorICAgIHsgICAgIDE5LCA3fSwgeyAgICAgMTEsIDZ9LCB7ICAgICAyNCwgN30sIHsgICAgIDE1LCA2fSwgXAorICAgIHsgICAgIDMxLCA3fSwgeyAgICAgMTksIDh9LCB7ICAgICAxMSwgN30sIHsgICAgIDI1LCA4fSwgXAorICAgIHsgICAgIDE1LCA3fSwgeyAgICAgMzMsIDh9LCB7ICAgICAxOSwgN30sIHsgICAgIDM5LCA4fSwgXAorICAgIHsgICAgIDIzLCA3fSwgeyAgICAgNDcsIDl9LCB7ICAgICAxNSwgOH0sIHsgICAgIDMxLCA3fSwgXAorICAgIHsgICAgIDYzLCA4fSwgeyAgICAgMzksIDl9LCB7ICAgICAyMywgOH0sIHsgICAgIDQ3LDEwfSwgXAorICAgIHsgICAgIDE1LCA5fSwgeyAgICAgMzEsIDh9LCB7ICAgICA2MywgOX0sIHsgICAgIDQ3LDEwfSwgXAorICAgIHsgICAgIDMxLCA5fSwgeyAgICAgNzEsMTB9LCB7ICAgICA0NywgOX0sIHsgICAgIDk1LDExfSwgXAorICAgIHsgICAgIDMxLDEwfSwgeyAgICAgNjMsIDl9LCB7ICAgIDEyNywgOH0sIHsgICAgMjU1LDEwfSwgXAorICAgIHsgICAgIDc5LCA5fSwgeyAgICAxNTksMTB9LCB7ICAgICA5NSwgOX0sIHsgICAgMTkxLDExfSwgXAorICAgIHsgICAgIDYzLDEwfSwgeyAgICAxMjcsIDl9LCB7ICAgIDI1NSwgOH0sIHsgICAgNTQzLCA5fSwgXAorICAgIHsgICAgMjg3LCA4fSwgeyAgICA1NzUsIDd9LCB7ICAgMTIxNSwxMH0sIHsgICAgMTU5LDExfSwgXAorICAgIHsgICAgIDk1LDEwfSwgeyAgICAxOTEsMTJ9LCB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgXAorICAgIHsgICAgMjU1LCA5fSwgeyAgICA1NDMsIDh9LCB7ICAgMTA4NywxMH0sIHsgICAgMjg3LCA5fSwgXAorICAgIHsgICAgNjA3LCA4fSwgeyAgIDEyMTUsMTF9LCB7ICAgIDE1OSwxMH0sIHsgICAgMzE5LCA5fSwgXAorICAgIHsgICAgNjM5LDEwfSwgeyAgICAzNTEsIDl9LCB7ICAgIDcwMywgOH0sIHsgICAxNDA3LCA5fSwgXAorICAgIHsgICAgNzM1LCA4fSwgeyAgIDE0NzEsMTF9LCB7ICAgIDE5MSwxMH0sIHsgICAgMzgzLCA5fSwgXAorICAgIHsgICAgNzY3LDEwfSwgeyAgICA0MTUsIDl9LCB7ICAgIDgzMSwxMX0sIHsgICAgMjIzLDEwfSwgXAorICAgIHsgICAgNDQ3LCA5fSwgeyAgICA4OTUsMTB9LCB7ICAgIDQ3OSwgOX0sIHsgICAgOTU5LCA4fSwgXAorICAgIHsgICAxOTE5LDEyfSwgeyAgIDQwOTYsMTN9LCB7ICAgODE5MiwxNH0sIHsgIDE2Mzg0LDE1fSwgXAorICAgIHsgIDMyNzY4LDE2fSB9CisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzX1NJWkUgODkKKyNkZWZpbmUgTVVMX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDE4NTYKKworI2RlZmluZSBTUVJfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDM5NiAgLyogayA9IDUgKi8KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDM5NiwgNX0sIHsgICAgIDEzLCA2fSwgeyAgICAgIDcsIDV9LCB7ICAgICAyMSwgNn0sIFwKKyAgICB7ICAgICAxMSwgNX0sIHsgICAgIDIzLCA2fSwgeyAgICAgMjEsIDd9LCB7ICAgICAxMSwgNn0sIFwKKyAgICB7ICAgICAyNSwgN30sIHsgICAgIDE1LCA2fSwgeyAgICAgMzEsIDd9LCB7ICAgICAxOSwgNn0sIFwKKyAgICB7ICAgICAzOSwgN30sIHsgICAgIDIxLCA4fSwgeyAgICAgMTEsIDd9LCB7ICAgICAyMywgNn0sIFwKKyAgICB7ICAgICA0NywgN30sIHsgICAgIDI3LCA4fSwgeyAgICAgMTUsIDd9LCB7ICAgICAzMywgOH0sIFwKKyAgICB7ICAgICAxOSwgN30sIHsgICAgIDM5LCA4fSwgeyAgICAgMjMsIDd9LCB7ICAgICA0NywgOH0sIFwKKyAgICB7ICAgICAyNywgOX0sIHsgICAgIDE1LCA4fSwgeyAgICAgMzEsIDd9LCB7ICAgICA2MywgOH0sIFwKKyAgICB7ICAgICAzOSwgOX0sIHsgICAgIDIzLCA4fSwgeyAgICAgNDcsMTB9LCB7ICAgICAxNSwgOX0sIFwKKyAgICB7ICAgICAzMSwgOH0sIHsgICAgIDYzLCA5fSwgeyAgICAgMzksIDh9LCB7ICAgICA3OSwgOX0sIFwKKyAgICB7ICAgICA0NywxMH0sIHsgICAgIDMxLCA5fSwgeyAgICAgNzksMTB9LCB7ICAgICA0NywgOX0sIFwKKyAgICB7ICAgICA5NSwxMX0sIHsgICAgIDMxLDEwfSwgeyAgICAgNjMsIDl9LCB7ICAgIDEyNywxMH0sIFwKKyAgICB7ICAgICA3OSwgOX0sIHsgICAgMTU5LDEwfSwgeyAgICAgOTUsMTF9LCB7ICAgICA2MywxMH0sIFwKKyAgICB7ICAgIDEyNywgOX0sIHsgICAgMjU1LCA4fSwgeyAgICA1NDMsMTB9LCB7ICAgIDE0MywgOX0sIFwKKyAgICB7ICAgIDI4NywgOH0sIHsgICAgNjA3LCA3fSwgeyAgIDEyMTUsIDZ9LCB7ICAgMjQzMSwxMH0sIFwKKyAgICB7ICAgIDE1OSwgOH0sIHsgICAgNjM5LDExfSwgeyAgICAgOTUsMTB9LCB7ICAgIDE5MSwxMn0sIFwKKyAgICB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgeyAgICAyNTUsIDl9LCB7ICAgIDU0MywgOH0sIFwKKyAgICB7ICAgMTA4NywxMH0sIHsgICAgMjg3LCA5fSwgeyAgICA2MDcsIDh9LCB7ICAgMTIxNSwxMX0sIFwKKyAgICB7ICAgIDE1OSwxMH0sIHsgICAgMzE5LCA5fSwgeyAgICA2NzEsMTB9LCB7ICAgIDM1MSwgOX0sIFwKKyAgICB7ICAgIDcwMywgOH0sIHsgICAxNDA3LCA5fSwgeyAgICA3MzUsIDh9LCB7ICAgMTQ3MSwgN30sIFwKKyAgICB7ICAgMjk0MywxMX0sIHsgICAgMTkxLDEwfSwgeyAgICAzODMsIDl9LCB7ICAgIDc5OSwxMH0sIFwKKyAgICB7ICAgIDQxNSwgOX0sIHsgICAgODk1LDEwfSwgeyAgICA0NzksMTJ9LCB7ICAgNDA5NiwxM30sIFwKKyAgICB7ICAgODE5MiwxNH0sIHsgIDE2Mzg0LDE1fSwgeyAgMzI3NjgsMTZ9IH0KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTNfU0laRSA4NworI2RlZmluZSBTUVJfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMjM2OAorCisjZGVmaW5lIE1VTExPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTVVMTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgNTEKKyNkZWZpbmUgTVVMTE9fTVVMX05fVEhSRVNIT0xEICAgICAgICAgICAgIDMzNjkKKworI2RlZmluZSBEQ19ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA1NgorI2RlZmluZSBEQ19ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgIDE4MworI2RlZmluZSBEQ19CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA1NQorI2RlZmluZSBEQ19CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDExOAorCisjZGVmaW5lIElOVl9NVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgIDMwCisjZGVmaW5lIElOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAgMjY2CisjZGVmaW5lIElOVl9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMjE4CisKKyNkZWZpbmUgQklOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAyNjgKKyNkZWZpbmUgUkVEQ18xX1RPX1JFRENfTl9USFJFU0hPTEQgICAgICAgICAgNTYKKworI2RlZmluZSBNVV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTMwOAorI2RlZmluZSBNVV9ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgMTUyOAorI2RlZmluZSBNVVBJX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgIDEyNAorI2RlZmluZSBNVV9CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDg1NQorI2RlZmluZSBNVV9CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTMzNAorCisjZGVmaW5lIE1BVFJJWDIyX1NUUkFTU0VOX1RIUkVTSE9MRCAgICAgICAgIDE0CisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAgMTA0CisjZGVmaW5lIEhHQ0RfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTM5CisjZGVmaW5lIEhHQ0RfUkVEVUNFX1RIUkVTSE9MRCAgICAgICAgICAgICAyMTIxCisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgNDU2CisjZGVmaW5lIEdDREVYVF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMzIxCisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAgICA0CisKKyNkZWZpbmUgR0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICAgMjUKKyNkZWZpbmUgU0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICA1NDIKKyNkZWZpbmUgU0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICA4NDAKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3A2L1JFQURNRSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3A2L1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTlkNDdiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcDYvUkVBRE1FCkBAIC0wLDAgKzEsMTI1IEBACitDb3B5cmlnaHQgMjAwMCwgMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKKworCisKKyAgICAgICAgICAgICAgICAgICAgICBJTlRFTCBQNiBNUE4gU1VCUk9VVElORVMKKworCisKK1RoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGNvZGUgb3B0aW1pemVkIGZvciBJbnRlbCBQNiBjbGFzcyBDUFVzLCBtZWFuaW5nCitQZW50aXVtUHJvLCBQZW50aXVtIElJIGFuZCBQZW50aXVtIElJSS4gIFRoZSBtbXggYW5kIHAzbW14IHN1YmRpcmVjdG9yaWVzCitoYXZlIHJvdXRpbmVzIHVzaW5nIE1NWCBpbnN0cnVjdGlvbnMuCisKKworCitTVEFUVVMKKworVGltZXMgZm9yIHRoZSBsb29wcywgd2l0aCBhbGwgY29kZSBhbmQgZGF0YSBpbiBMMSBjYWNoZSwgYXJlIGFzIGZvbGxvd3MuCitTb21lIG9mIHRoZXNlIG1pZ2h0IGJlIGFibGUgdG8gYmUgaW1wcm92ZWQuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjeWNsZXMvbGltYgorCisJbXBuX2FkZF9uL3N1Yl9uICAgICAgICAgICAzLjcKKworCW1wbl9jb3B5aSAgICAgICAgICAgICAgICAgMC43NQorCW1wbl9jb3B5ZCAgICAgICAgICAgICAgICAgMS43NSAob3IgMC43NSBpZiBubyBvdmVybGFwKQorCisJbXBuX2RpdnJlbV8xICAgICAgICAgICAgIDM5LjAKKwltcG5fbW9kXzEgICAgICAgICAgICAgICAgMjEuNQorCW1wbl9kaXZleGFjdF9ieTMgICAgICAgICAgOC41CisKKwltcG5fbXVsXzEgICAgICAgICAgICAgICAgIDUuNQorCW1wbl9hZGRtdWwvc3VibXVsXzEgICAgICAgNi4zNQorCisJbXBuX2wvcnNoaWZ0ICAgICAgICAgICAgICAyLjUKKworCW1wbl9tdWxfYmFzZWNhc2UgICAgICAgICAgOC4yIGN5Y2xlcy9jcm9zc3Byb2R1Y3QgKGFwcHJveCkKKwltcG5fc3FyX2Jhc2VjYXNlICAgICAgICAgIDQuMCBjeWNsZXMvY3Jvc3Nwcm9kdWN0IChhcHByb3gpCisJCQkJICBvciA3Ljc1IGN5Y2xlcy90cmlhbmdsZXByb2R1Y3QgKGFwcHJveCkKKworUGVudGl1bSBJSSBhbmQgSUlJIGhhdmUgTU1YIGFuZCBnZXQgdGhlIGZvbGxvd2luZyBpbXByb3ZlbWVudHMuCisKKwltcG5fZGl2cmVtXzEgICAgICAgICAgICAgMjUuMCBpbnRlZ2VyIHBhcnQsIDE3LjUgZnJhY3Rpb25hbCBwYXJ0CisKKwltcG5fbC9yc2hpZnQgICAgICAgICAgICAgIDEuNzUKKworCisKKworTk9URVMKKworV3JpdGUtYWxsb2NhdGUgTDEgZGF0YSBjYWNoZSBtZWFucyBwcmVmZXRjaGluZyBvZiBkZXN0aW5hdGlvbnMgaXMgdW5uZWNlc3NhcnkuCisKK01pc3ByZWRpY3RlZCBicmFuY2hlcyBoYXZlIGEgcGVuYWx0eSBvZiBiZXR3ZWVuIDkgYW5kIDE1IGN5Y2xlcywgYW5kIGV2ZW4gdXAKK3RvIDI2IGN5Y2xlcyBkZXBlbmRpbmcgaG93IGZhciBzcGVjdWxhdGl2ZSBleGVjdXRpb24gaGFzIGdvbmUuICBUaGUgOSBjeWNsZQorbWluaW11bSBwZW5hbHR5IGNvbWVzIGZyb20gdGhlIGlzc3VlIHBpcGVsaW5lIGJlaW5nIDkgc3RhZ2VzLgorCitBIGNvcHkgd2l0aCByZXAgbW92cyBzZWVtcyB0byBjb3B5IDE2IGJ5dGVzIGF0IGEgdGltZSwgc2luY2Ugc3BlZWRzIGZvciA0LAorNSwgNiBvciA3IGxpbWIgb3BlcmF0aW9ucyBhcmUgYWxsIHRoZSBzYW1lLiAgVGhlIDAuNzUgY3ljbGVzL2xpbWIgd291bGQgYmUgMworY3ljbGVzIHBlciAxNiBieXRlIGJsb2NrLgorCisKKworCitDT0RJTkcKKworSW5zdHJ1Y3Rpb25zIGluIGdlbmVyYWwgY29kZSBoYXZlIGJlZW4gc2hvd24gZ3JvdXBlZCBpZiB0aGV5IGNhbiBleGVjdXRlCit0b2dldGhlciwgd2hpY2ggbWVhbnMgdXAgdG8gdGhyZWUgaW5zdHJ1Y3Rpb25zIHdpdGggbm8gc3VjY2Vzc2l2ZQorZGVwZW5kZW5jaWVzLCBhbmQgd2l0aCBvbmx5IHRoZSBmaXJzdCBiZWluZyBhIG11bHRpcGxlIG1pY3JvLW9wLgorCitQNiBoYXMgb3V0LW9mLW9yZGVyIGV4ZWN1dGlvbiwgc28gdGhlIGdyb3VwaW5ncyBhcmUgcmVhbGx5IG9ubHkgc2hvd2luZworZGVwZW5kZW50IHBhdGhzIHdoZXJlIHNvbWUgc2h1ZmZsaW5nIG1pZ2h0IGFsbG93IHNvbWUgbGF0ZW5jaWVzIHRvIGJlCitoaWRkZW4uCisKKworCisKK1JFRkVSRU5DRVMKKworIkludGVsIEFyY2hpdGVjdHVyZSBPcHRpbWl6YXRpb24gUmVmZXJlbmNlIE1hbnVhbCIsIDE5OTksIHJldmlzaW9uIDAwMSBkYXRlZAorMDIvOTksIG9yZGVyIG51bWJlciAyNDUxMjcgKG9yZGVyIG51bWJlciA3MzA3OTUtMDAxIGlzIGluIHRoZSBkb2N1bWVudCB0b28pLgorQXZhaWxhYmxlIG9uLWxpbmU6CisKKwlodHRwOi8vZG93bmxvYWQuaW50ZWwuY29tL2Rlc2lnbi9QZW50aXVtSUkvbWFudWFscy8yNDUxMjcuaHRtCisKKyJJbnRlbCBBcmNoaXRlY3R1cmUgT3B0aW1pemF0aW9uIE1hbnVhbCIsIDE5OTcsIG9yZGVyIG51bWJlciAyNDI4MTYuICBUaGlzCitpcyBhbiBvbGRlciBkb2N1bWVudCBtb3N0bHkgYWJvdXQgUDUgYW5kIG5vdCBhcyBnb29kIGFzIHRoZSBhYm92ZS4KK0F2YWlsYWJsZSBvbi1saW5lOgorCisJaHR0cDovL2Rvd25sb2FkLmludGVsLmNvbS9kZXNpZ24vUGVudGl1bUlJL21hbnVhbHMvMjQyODE2Lmh0bQorCisKKworLS0tLS0tLS0tLS0tLS0tLQorTG9jYWwgdmFyaWFibGVzOgorbW9kZTogdGV4dAorZmlsbC1jb2x1bW46IDc2CitFbmQ6CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wNi9hb3JzX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcDYvYW9yc19uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjUxYzJlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcDYvYW9yc19uLmFzbQpAQCAtMCwwICsxLDE1NiBAQAorZG5sICBJbnRlbCBQNiBtcG5fYWRkX24vbXBuX3N1Yl9uIC0tIG1wbiBhZGQgb3Igc3VidHJhY3QuCisKK2RubCAgQ29weXJpZ2h0IDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBUT0RPOgorQyAgKiBBdm9pZCBpbmRleGVkIGFkZHJlc3NpbmcsIGl0IG1ha2VzIHVzIHN0YWxsIG9uIHRoZSB0d28tcG9ydGVkIHJlZ2lzdGVyCitDICAgIGZpbGUuCisKK0MJCQkgICAgY3ljbGVzL2xpbWIKK0MgUDYgbW9kZWwgMC04LDEwLTEyCQkzLjE3CitDIFA2IG1vZGVsIDkgICAoQmFuaWFzKQkJMi4xNQorQyBQNiBtb2RlbCAxMyAgKERvdGhhbikJCTIuMjUKKworCitkZWZpbmUoYHJwJywJYCVlZGknKQorZGVmaW5lKGB1cCcsCWAlZXNpJykKK2RlZmluZShgdnAnLAlgJWVieCcpCitkZWZpbmUoYG4nLAlgJWVjeCcpCisKK2lmZGVmKGBPUEVSQVRJT05fYWRkX24nLCBgCisJZGVmaW5lKEFEQ1NCQiwJICAgICAgYWRjKQorCWRlZmluZShmdW5jLAkgICAgICBtcG5fYWRkX24pCisJZGVmaW5lKGZ1bmNfbmMsCSAgICAgIG1wbl9hZGRfbmMpJykKK2lmZGVmKGBPUEVSQVRJT05fc3ViX24nLCBgCisJZGVmaW5lKEFEQ1NCQiwJICAgICAgc2JiKQorCWRlZmluZShmdW5jLAkgICAgICBtcG5fc3ViX24pCisJZGVmaW5lKGZ1bmNfbmMsCSAgICAgIG1wbl9zdWJfbmMpJykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fYWRkX24gbXBuX2FkZF9uYyBtcG5fc3ViX24gbXBuX3N1Yl9uYykKKworQVNNX1NUQVJUKCkKKworCVRFWFQKKwlBTElHTigxNikKKworUFJPTE9HVUUoZnVuYykKKwl4b3IJJWVkeCwgJWVkeAorTChzdGFydCk6CisJcHVzaAklZWRpCisJcHVzaAklZXNpCisJcHVzaAklZWJ4CisKKwltb3YJMTYoJWVzcCksIHJwCisJbW92CTIwKCVlc3ApLCB1cAorCW1vdgkyNCglZXNwKSwgdnAKKwltb3YJMjgoJWVzcCksIG4KKworCWxlYQkodXAsbiw0KSwgdXAKKwlsZWEJKHZwLG4sNCksIHZwCisJbGVhCShycCxuLDQpLCBycAorCisJbmVnCW4KKwltb3YJbiwgJWVheAorCWFuZAkkLTgsIG4KKwlhbmQJJDcsICVlYXgKKwlzaGwJJDIsICVlYXgJCQlDIDR4CitpZmRlZihgUElDJyxgCisJY2FsbAlMKHBpY19jYWxjKQorTChoZXJlKToKKycsYAorCWxlYQlMKGVudCkgKCVlYXgsJWVheCwyKSwgJWVheAlDIDEyeAorJykKKworCXNocgklZWR4CQkJCUMgc2V0IGN5IGZsYWcKKwlqbXAJKiVlYXgKKworaWZkZWYoYFBJQycsYAorTChwaWNfY2FsYyk6CisJQyBTZWUgbXBuL3g4Ni9SRUFETUUgYWJvdXQgb2xkIGdhcyBidWdzCisJbGVhCSglZWF4LCVlYXgsMiksICVlYXgKKwlhZGQJJEwoZW50KS1MKGhlcmUpLCAlZWF4CisJYWRkCSglZXNwKSwgJWVheAorCXJldF9pbnRlcm5hbAorJykKKworTChlbmQpOgorCXNiYgklZWF4LCAlZWF4CisJbmVnCSVlYXgKKwlwb3AJJWVieAorCXBvcAklZXNpCisJcG9wCSVlZGkKKwlyZXQKKworCUFMSUdOKDE2KQorTCh0b3ApOgorCWplY3h6CUwoZW5kKQorTChlbnQpOgorWmRpc3AoCW1vdiwJMCwodXAsbiw0KSwgJWVheCkKK1pkaXNwKAlBRENTQkIsCTAsKHZwLG4sNCksICVlYXgpCitaZGlzcCgJbW92LAklZWF4LCAwLChycCxuLDQpKQorCisJbW92CTQodXAsbiw0KSwgJWVkeAorCUFEQ1NCQgk0KHZwLG4sNCksICVlZHgKKwltb3YJJWVkeCwgNChycCxuLDQpCisKKwltb3YJOCh1cCxuLDQpLCAlZWF4CisJQURDU0JCCTgodnAsbiw0KSwgJWVheAorCW1vdgklZWF4LCA4KHJwLG4sNCkKKworCW1vdgkxMih1cCxuLDQpLCAlZWR4CisJQURDU0JCCTEyKHZwLG4sNCksICVlZHgKKwltb3YJJWVkeCwgMTIocnAsbiw0KQorCisJbW92CTE2KHVwLG4sNCksICVlYXgKKwlBRENTQkIJMTYodnAsbiw0KSwgJWVheAorCW1vdgklZWF4LCAxNihycCxuLDQpCisKKwltb3YJMjAodXAsbiw0KSwgJWVkeAorCUFEQ1NCQgkyMCh2cCxuLDQpLCAlZWR4CisJbW92CSVlZHgsIDIwKHJwLG4sNCkKKworCW1vdgkyNCh1cCxuLDQpLCAlZWF4CisJQURDU0JCCTI0KHZwLG4sNCksICVlYXgKKwltb3YJJWVheCwgMjQocnAsbiw0KQorCisJbW92CTI4KHVwLG4sNCksICVlZHgKKwlBRENTQkIJMjgodnAsbiw0KSwgJWVkeAorCW1vdgklZWR4LCAyOChycCxuLDQpCisKKwlsZWEJOChuKSwgbgorCWptcAlMKHRvcCkKKworRVBJTE9HVUUoKQorCitQUk9MT0dVRShmdW5jX25jKQorCW1vdmwJMjAoJWVzcCksICVlZHgKKwlqbXAJTChzdGFydCkKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3A2L2FvcnNtdWxfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wNi9hb3JzbXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjOGM0OWMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wNi9hb3JzbXVsXzEuYXNtCkBAIC0wLDAgKzEsMzIwIEBACitkbmwgIEludGVsIFA2IG1wbl9hZGRtdWxfMS9tcG5fc3VibXVsXzEgLS0gYWRkIG9yIHN1YnRyYWN0IG1wbiBtdWx0aXBsZS4KKworZG5sICBDb3B5cmlnaHQgMTk5OS0yMDAyLCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQwkJCSAgICBjeWNsZXMvbGltYgorQyBQNQorQyBQNiBtb2RlbCAwLTgsMTAtMTIJCSA2LjQ0CitDIFA2IG1vZGVsIDkgIChCYW5pYXMpCQkgNi4xNQorQyBQNiBtb2RlbCAxMyAoRG90aGFuKQkJIDYuMTEKK0MgUDQgbW9kZWwgMCAgKFdpbGxhbWV0dGUpCitDIFA0IG1vZGVsIDEgICg/KQorQyBQNCBtb2RlbCAyICAoTm9ydGh3b29kKQorQyBQNCBtb2RlbCAzICAoUHJlc2NvdHQpCitDIFA0IG1vZGVsIDQgIChOb2NvbmEpCitDIEFNRCBLNgorQyBBTUQgSzcKK0MgQU1EIEs4CisKKworZG5sICBQNiBVTlJPTExfQ09VTlQgY3ljbGVzL2xpbWIKK2RubCAgICAgICAgICA4ICAgICAgICAgICA2LjcKK2RubCAgICAgICAgIDE2ICAgICAgICAgICA2LjM1CitkbmwgICAgICAgICAzMiAgICAgICAgICAgNi4zCitkbmwgICAgICAgICA2NCAgICAgICAgICAgNi4zCitkbmwgIE1heGltdW0gcG9zc2libGUgd2l0aCB0aGUgY3VycmVudCBjb2RlIGlzIDY0LgorCitkZWZsaXQoVU5ST0xMX0NPVU5ULCAxNikKKworCitpZmRlZihgT1BFUkFUSU9OX2FkZG11bF8xJywgYAorCWRlZmluZShNNF9pbnN0LCAgICAgICAgYWRkbCkKKwlkZWZpbmUoTTRfZnVuY3Rpb25fMSwgIG1wbl9hZGRtdWxfMSkKKwlkZWZpbmUoTTRfZnVuY3Rpb25fMWMsIG1wbl9hZGRtdWxfMWMpCisJZGVmaW5lKE00X2Rlc2NyaXB0aW9uLCBhZGQgaXQgdG8pCisJZGVmaW5lKE00X2Rlc2NfcmV0dmFsLCBjYXJyeSkKKycsYGlmZGVmKGBPUEVSQVRJT05fc3VibXVsXzEnLCBgCisJZGVmaW5lKE00X2luc3QsICAgICAgICBzdWJsKQorCWRlZmluZShNNF9mdW5jdGlvbl8xLCAgbXBuX3N1Ym11bF8xKQorCWRlZmluZShNNF9mdW5jdGlvbl8xYywgbXBuX3N1Ym11bF8xYykKKwlkZWZpbmUoTTRfZGVzY3JpcHRpb24sIHN1YnRyYWN0IGl0IGZyb20pCisJZGVmaW5lKE00X2Rlc2NfcmV0dmFsLCBib3Jyb3cpCisnLGBtNF9lcnJvcihgTmVlZCBPUEVSQVRJT05fYWRkbXVsXzEgb3IgT1BFUkFUSU9OX3N1Ym11bF8xCisnKScpJykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fYWRkbXVsXzEgbXBuX2FkZG11bF8xYyBtcG5fc3VibXVsXzEgbXBuX3N1Ym11bF8xYykKKworCitDIG1wX2xpbWJfdCBNNF9mdW5jdGlvbl8xIChtcF9wdHIgZHN0LCBtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSwKK0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBfbGltYl90IG11bHQpOworQyBtcF9saW1iX3QgTTRfZnVuY3Rpb25fMWMgKG1wX3B0ciBkc3QsIG1wX3NyY3B0ciBzcmMsIG1wX3NpemVfdCBzaXplLAorQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBfbGltYl90IG11bHQsIG1wX2xpbWJfdCBjYXJyeSk7CitDCitDIENhbGN1bGF0ZSBzcmMsc2l6ZSBtdWx0aXBsaWVkIGJ5IG11bHQgYW5kIE00X2Rlc2NyaXB0aW9uIGRzdCxzaXplLgorQyBSZXR1cm4gdGhlIE00X2Rlc2NfcmV0dmFsIGxpbWIgZnJvbSB0aGUgdG9wIG9mIHRoZSByZXN1bHQuCitDCitDIFRoaXMgY29kZSBpcyBwcmV0dHkgbXVjaCB0aGUgc2FtZSBhcyB0aGUgSzYgY29kZS4gIFRoZSB1bnJvbGxlZCBsb29wIGlzCitDIHRoZSBzYW1lLCBidXQgdGhlcmUncyBqdXN0IGEgZmV3IHNjaGVkdWxpbmcgdHdlYWtzIGluIHRoZSBzZXR1cHMgYW5kIHRoZQorQyBzaW1wbGUgbG9vcC4KK0MKK0MgQSBudW1iZXIgb2YgdmFyaWF0aW9ucyBoYXZlIGJlZW4gdHJpZWQgZm9yIHRoZSB1bnJvbGxlZCBsb29wLCB3aXRoIG9uZSBvcgorQyB0d28gY2FycmllcywgYW5kIHdpdGggbG9hZHMgc2NoZWR1bGVkIGVhcmxpZXIsIGJ1dCBub3RoaW5nIGZhc3RlciB0aGFuIDYKK0MgY3ljbGVzL2xpbWIgaGFzIGJlZW4gZm91bmQuCisKK2lmZGVmKGBQSUMnLGAKK2RlZmxpdChVTlJPTExfVEhSRVNIT0xELCA1KQorJyxgCitkZWZsaXQoVU5ST0xMX1RIUkVTSE9MRCwgNSkKKycpCisKK2RlZmZyYW1lKFBBUkFNX0NBUlJZLCAgICAgMjApCitkZWZmcmFtZShQQVJBTV9NVUxUSVBMSUVSLDE2KQorZGVmZnJhbWUoUEFSQU1fU0laRSwgICAgICAxMikKK2RlZmZyYW1lKFBBUkFNX1NSQywgICAgICAgOCkKK2RlZmZyYW1lKFBBUkFNX0RTVCwgICAgICAgNCkKKworCVRFWFQKKwlBTElHTigzMikKKworUFJPTE9HVUUoTTRfZnVuY3Rpb25fMWMpCisJcHVzaGwJJWVieAorZGVmbGl0KGBGUkFNRScsNCkKKwltb3ZsCVBBUkFNX0NBUlJZLCAlZWJ4CisJam1wCUwoc3RhcnRfbmMpCitFUElMT0dVRSgpCisKK1BST0xPR1VFKE00X2Z1bmN0aW9uXzEpCisJcHVzaAklZWJ4CitkZWZsaXQoYEZSQU1FJyw0KQorCXhvcmwJJWVieCwgJWVieAlDIGluaXRpYWwgY2FycnkKKworTChzdGFydF9uYyk6CisJbW92bAlQQVJBTV9TSVpFLCAlZWN4CisJcHVzaGwJJWVzaQorZGVmbGl0KGBGUkFNRScsOCkKKworCW1vdmwJUEFSQU1fU1JDLCAlZXNpCisJcHVzaGwJJWVkaQorZGVmbGl0KGBGUkFNRScsMTIpCisKKwltb3ZsCVBBUkFNX0RTVCwgJWVkaQorCXB1c2hsCSVlYnAKK2RlZmxpdChgRlJBTUUnLDE2KQorCWNtcGwJJFVOUk9MTF9USFJFU0hPTEQsICVlY3gKKworCW1vdmwJUEFSQU1fTVVMVElQTElFUiwgJWVicAorCWphZQlMKHVucm9sbCkKKworCisJQyBzaW1wbGUgbG9vcAorCUMgdGhpcyBpcyBvZmZzZXQgMHgyMiwgc28gY2xvc2UgZW5vdWdoIHRvIGFsaWduZWQKK0woc2ltcGxlKToKKwlDIGVheAlzY3JhdGNoCisJQyBlYngJY2FycnkKKwlDIGVjeAljb3VudGVyCisJQyBlZHgJc2NyYXRjaAorCUMgZXNpCXNyYworCUMgZWRpCWRzdAorCUMgZWJwCW11bHRpcGxpZXIKKworCW1vdmwJKCVlc2kpLCAlZWF4CisJYWRkbAkkNCwgJWVkaQorCisJbXVsbAklZWJwCisKKwlhZGRsCSVlYngsICVlYXgKKwlhZGNsCSQwLCAlZWR4CisKKwlNNF9pbnN0CSVlYXgsIC00KCVlZGkpCisJbW92bAklZWR4LCAlZWJ4CisKKwlhZGNsCSQwLCAlZWJ4CisJZGVjbAklZWN4CisKKwlsZWFsCTQoJWVzaSksICVlc2kKKwlqbnoJTChzaW1wbGUpCisKKworCXBvcGwJJWVicAorCXBvcGwJJWVkaQorCisJcG9wbAklZXNpCisJbW92bAklZWJ4LCAlZWF4CisKKwlwb3BsCSVlYngKKwlyZXQKKworCisKK0MtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0MgVkFSX0pVTVAgaG9sZHMgdGhlIGNvbXB1dGVkIGp1bXAgdGVtcG9yYXJpbHkgYmVjYXVzZSB0aGVyZSdzIG5vdCBlbm91Z2gKK0MgcmVnaXN0ZXJzIHdoZW4gZG9pbmcgdGhlIG11bCBmb3IgdGhlIGluaXRpYWwgdHdvIGNhcnJ5IGxpbWJzLgorQworQyBUaGUgYWRkL2FkYyBmb3IgdGhlIGluaXRpYWwgY2FycnkgaW4gJWVieCBpcyBuZWNlc3Nhcnkgb25seSBmb3IgdGhlCitDIG1wbl9hZGQvc3VibXVsXzFjIGVudHJ5IHBvaW50cy4gIER1cGxpY2F0aW5nIHRoZSBzdGFydHVwIGNvZGUgdG8KK0MgZWxpbWluYXRlIHRoaXMgZm9yIHRoZSBwbGFpbiBtcG5fYWRkL3N1Ym11bF8xIGRvZXNuJ3Qgc2VlbSBsaWtlIGEgZ29vZAorQyBpZGVhLgorCitkbmwgIG92ZXJsYXBwaW5nIHdpdGggcGFyYW1ldGVycyBhbHJlYWR5IGZldGNoZWQKK2RlZmluZShWQVJfQ09VTlRFUixgUEFSQU1fU0laRScpCitkZWZpbmUoVkFSX0pVTVAsICAgYFBBUkFNX0RTVCcpCisKKwlDIHRoaXMgaXMgb2Zmc2V0IDB4NDMsIHNvIGNsb3NlIGVub3VnaCB0byBhbGlnbmVkCitMKHVucm9sbCk6CisJQyBlYXgKKwlDIGVieAlpbml0aWFsIGNhcnJ5CisJQyBlY3gJc2l6ZQorCUMgZWR4CisJQyBlc2kJc3JjCisJQyBlZGkJZHN0CisJQyBlYnAKKworCW1vdmwJJWVjeCwgJWVkeAorCWRlY2wJJWVjeAorCisJc3VibAkkMiwgJWVkeAorCW5lZ2wJJWVjeAorCisJc2hybAkkVU5ST0xMX0xPRzIsICVlZHgKKwlhbmRsCSRVTlJPTExfTUFTSywgJWVjeAorCisJbW92bAklZWR4LCBWQVJfQ09VTlRFUgorCW1vdmwJJWVjeCwgJWVkeAorCisJQyAxNSBjb2RlIGJ5dGVzIHBlciBsaW1iCitpZmRlZihgUElDJyxgCisJY2FsbAlMKHBpY19jYWxjKQorTChoZXJlKToKKycsYAorCXNobGwJJDQsICVlZHgKKwluZWdsCSVlY3gKKworCWxlYWwJTChlbnRyeSkgKCVlZHgsJWVjeCwxKSwgJWVkeAorJykKKwltb3ZsCSglZXNpKSwgJWVheAkJQyBzcmMgbG93IGxpbWIKKworCW1vdmwJJWVkeCwgVkFSX0pVTVAKKwlsZWFsCWlmZWxzZShVTlJPTExfQllURVMsMjU2LDEyOCspIDQoJWVzaSwlZWN4LDQpLCAlZXNpCisKKwltdWxsCSVlYnAKKworCWFkZGwJJWVieCwgJWVheAlDIGluaXRpYWwgY2FycnkgKGZyb20gXzFjKQorCWFkY2wJJDAsICVlZHgKKworCW1vdmwJJWVkeCwgJWVieAlDIGhpZ2ggY2FycnkKKwlsZWFsCWlmZWxzZShVTlJPTExfQllURVMsMjU2LDEyOCkgKCVlZGksJWVjeCw0KSwgJWVkaQorCisJbW92bAlWQVJfSlVNUCwgJWVkeAorCXRlc3RsCSQxLCAlZWN4CisJbW92bAklZWF4LCAlZWN4CUMgbG93IGNhcnJ5CisKKwljbW92bnooCSVlYngsICVlY3gpCUMgaGlnaCxsb3cgY2Fycnkgb3RoZXIgd2F5IGFyb3VuZAorCWNtb3ZueigJJWVheCwgJWVieCkKKworCWptcAkqJWVkeAorCisKK2lmZGVmKGBQSUMnLGAKK0wocGljX2NhbGMpOgorCXNobGwJJDQsICVlZHgKKwluZWdsCSVlY3gKKworCUMgU2VlIG1wbi94ODYvUkVBRE1FIGFib3V0IG9sZCBnYXMgYnVncworCWxlYWwJKCVlZHgsJWVjeCwxKSwgJWVkeAorCWFkZGwJJEwoZW50cnkpLUwoaGVyZSksICVlZHgKKworCWFkZGwJKCVlc3ApLCAlZWR4CisKKwlyZXRfaW50ZXJuYWwKKycpCisKKworQyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUFMSUdOKDMyKQorTCh0b3ApOgorZGVmbGl0KGBGUkFNRScsMTYpCisJQyBlYXgJc2NyYXRjaAorCUMgZWJ4CWNhcnJ5IGhpCisJQyBlY3gJY2FycnkgbG8KKwlDIGVkeAlzY3JhdGNoCisJQyBlc2kJc3JjCisJQyBlZGkJZHN0CisJQyBlYnAJbXVsdGlwbGllcgorCUMKKwlDIFZBUl9DT1VOVEVSCWxvb3AgY291bnRlcgorCUMKKwlDIDE1IGNvZGUgYnl0ZXMgcGVyIGxpbWIKKworCWFkZGwJJFVOUk9MTF9CWVRFUywgJWVkaQorCitMKGVudHJ5KToKK2RlZmxpdChDSFVOS19DT1VOVCwyKQorZm9ybG9vcChgaScsIDAsIFVOUk9MTF9DT1VOVC9DSFVOS19DT1VOVC0xLCBgCisJZGVmbGl0KGBkaXNwMCcsIGV2YWwoaSo0KkNIVU5LX0NPVU5UIGlmZWxzZShVTlJPTExfQllURVMsMjU2LC0xMjgpKSkKKwlkZWZsaXQoYGRpc3AxJywgZXZhbChkaXNwMCArIDQpKQorCitaZGlzcCgJbW92bCwJZGlzcDAsKCVlc2kpLCAlZWF4KQorCW11bGwJJWVicAorWmRpc3AoCU00X2luc3QsJWVjeCwgZGlzcDAsKCVlZGkpKQorCWFkY2wJJWVheCwgJWVieAorCW1vdmwJJWVkeCwgJWVjeAorCWFkY2wJJDAsICVlY3gKKworCW1vdmwJZGlzcDEoJWVzaSksICVlYXgKKwltdWxsCSVlYnAKKwlNNF9pbnN0CSVlYngsIGRpc3AxKCVlZGkpCisJYWRjbAklZWF4LCAlZWN4CisJbW92bAklZWR4LCAlZWJ4CisJYWRjbAkkMCwgJWVieAorJykKKworCWRlY2wJVkFSX0NPVU5URVIKKwlsZWFsCVVOUk9MTF9CWVRFUyglZXNpKSwgJWVzaQorCisJam5zCUwodG9wKQorCisKK2RlZmxpdChgZGlzcDAnLAlldmFsKFVOUk9MTF9CWVRFUyBpZmVsc2UoVU5ST0xMX0JZVEVTLDI1NiwtMTI4KSkpCisKKwlNNF9pbnN0CSVlY3gsIGRpc3AwKCVlZGkpCisJbW92bAklZWJ4LCAlZWF4CisKKwlwb3BsCSVlYnAKKwlwb3BsCSVlZGkKKworCXBvcGwJJWVzaQorCXBvcGwJJWVieAorCWFkY2wJJDAsICVlYXgKKworCXJldAorCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wNi9iZGl2X3FfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wNi9iZGl2X3FfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBhOWQ5MAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3A2L2JkaXZfcV8xLmFzbQpAQCAtMCwwICsxLDI4NyBAQAorZG5sICBJbnRlbCBQNiBtcG5fbW9kZXhhY3RfMV9vZGQgLS0gZXhhY3QgZGl2aXNpb24gc3R5bGUgcmVtYWluZGVyLgorCitkbmwgIFJlYXJyYW5nZWQgZnJvbSBtcG4veDg2L3A2L2RpdmVfMS5hc20gYnkgTWFyY28gQm9kcmF0by4KKworZG5sICBDb3B5cmlnaHQgMjAwMSwgMjAwMiwgMjAwNywgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MgICAgICAgb2RkICBldmVuICBkaXZpc29yCitDIFA2OiAgMTAuMCAgMTIuMCAgY3ljbGVzL2xpbWIKKworQyBNVUxGVU5DX1BST0xPR1VFKG1wbl9iZGl2X3FfMSBtcG5fcGkxX2JkaXZfcV8xKQorCitDIFRoZSBvZGQgY2FzZSBpcyBiYXNpY2FsbHkgdGhlIHNhbWUgYXMgbXBuX21vZGV4YWN0XzFfb2RkLCBqdXN0IHdpdGggYW4KK0MgZXh0cmEgc3RvcmUsIGFuZCBpdCBydW5zIGF0IHRoZSBzYW1lIDEwIGN5Y2xlcyB3aGljaCBpcyB0aGUgZGVwZW5kZW50CitDIGNoYWluLgorQworQyBUaGUgc2hpZnRzIGZvciB0aGUgZXZlbiBjYXNlIGFyZW4ndCBvbiB0aGUgZGVwZW5kZW50IGNoYWluIHNvIGluIHByaW5jaXBsZQorQyBpdCBjb3VsZCBydW4gdGhlIHNhbWUgdG9vLCBidXQgbm90aGluZyBydW5uaW5nIGF0IDEwIGhhcyBiZWVuIGZvdW5kLgorQyBQZXJoYXBzIHRoZXJlJ3MgdG9vIG1hbnkgdW9wcyAoYW4gZXh0cmEgNCBvdmVyIHRoZSBvZGQgY2FzZSkuCisKK2RlZmZyYW1lKFBBUkFNX1NISUZULCAgMjQpCitkZWZmcmFtZShQQVJBTV9JTlZFUlNFLDIwKQorZGVmZnJhbWUoUEFSQU1fRElWSVNPUiwxNikKK2RlZmZyYW1lKFBBUkFNX1NJWkUsICAgMTIpCitkZWZmcmFtZShQQVJBTV9TUkMsICAgICA4KQorZGVmZnJhbWUoUEFSQU1fRFNULCAgICAgNCkKKworZGVmZnJhbWUoU0FWRV9FQlgsICAgICAtNCkKK2RlZmZyYW1lKFNBVkVfRVNJLCAgICAgLTgpCitkZWZmcmFtZShTQVZFX0VESSwgICAgLTEyKQorZGVmZnJhbWUoU0FWRV9FQlAsICAgIC0xNikKK2RlZmxpdChTVEFDS19TUEFDRSwgMTYpCisKK2RubCAgcmUtdXNlIHBhcmFtZXRlciBzcGFjZQorZGVmaW5lKFZBUl9JTlZFUlNFLGBQQVJBTV9TUkMnKQorCisJVEVYVAorCitDIG1wX2xpbWJfdAorQyBtcG5fcGkxX2JkaXZfcV8xIChtcF9wdHIgZHN0LCBtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSwgbXBfbGltYl90IGRpdmlzb3IsCitDCQkgICAgbXBfbGltYl90IGludmVyc2UsIGludCBzaGlmdCkKKworCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX3BpMV9iZGl2X3FfMSkKK2RlZmxpdChgRlJBTUUnLDApCisKKwlzdWJsCSRTVEFDS19TUEFDRSwgJWVzcAlGUkFNRV9zdWJsX2VzcChTVEFDS19TUEFDRSkKKworCW1vdmwJJWVzaSwgU0FWRV9FU0kKKwltb3ZsCVBBUkFNX1NSQywgJWVzaQorCisJbW92bAklZWJ4LCBTQVZFX0VCWAorCW1vdmwJUEFSQU1fU0laRSwgJWVieAorCisJbW92bAklZWJwLCBTQVZFX0VCUAorCW1vdmwJUEFSQU1fSU5WRVJTRSwgJWVicAorCisJbW92bAlQQVJBTV9TSElGVCwgJWVjeAlDIHRyYWlsaW5nIHR3b3MKKworTChjb21tb24pOgorCW1vdmwJJWVkaSwgU0FWRV9FREkKKwltb3ZsCVBBUkFNX0RTVCwgJWVkaQorCisJbGVhbAkoJWVzaSwlZWJ4LDQpLCAlZXNpCUMgc3JjIGVuZAorCisJbGVhbAkoJWVkaSwlZWJ4LDQpLCAlZWRpCUMgZHN0IGVuZAorCW5lZ2wJJWVieAkJCUMgLXNpemUKKworCW1vdmwJKCVlc2ksJWVieCw0KSwgJWVheAlDIHNyY1swXQorCisJb3JsCSVlY3gsICVlY3gKKwlqeglMKG9kZF9lbnRyeSkKKworCW1vdmwJJWVkaSwgUEFSQU1fRFNUCisJbW92bAklZWJwLCBWQVJfSU5WRVJTRQorCitMKGV2ZW4pOgorCUMgZWF4CXNyY1swXQorCUMgZWJ4CWNvdW50ZXIsIGxpbWJzLCBuZWdhdGl2ZQorCUMgZWN4CXNoaWZ0CisJQyBlZHgKKwlDIGVzaQorCUMgZWRpCisJQyBlYnAKKworCXhvcmwJJWVicCwgJWVicAkJQyBpbml0aWFsIGNhcnJ5IGJpdAorCXhvcmwJJWVkeCwgJWVkeAkJQyBpbml0aWFsIGNhcnJ5IGxpbWIgKGZvciBzaXplPT0xKQorCisJaW5jbAklZWJ4CisJanoJTChldmVuX29uZSkKKworCW1vdmwJKCVlc2ksJWVieCw0KSwgJWVkaQlDIHNyY1sxXQorCisJc2hyZGwoCSVjbCwgJWVkaSwgJWVheCkKKworCWptcAlMKGV2ZW5fZW50cnkpCisKKworTChldmVuX3RvcCk6CisJQyBlYXgJc2NyYXRjaAorCUMgZWJ4CWNvdW50ZXIsIGxpbWJzLCBuZWdhdGl2ZQorCUMgZWN4CXNoaWZ0CisJQyBlZHgJc2NyYXRjaAorCUMgZXNpCSZzcmNbc2l6ZV0KKwlDIGVkaQkmZHN0W3NpemVdIGFuZCBzY3JhdGNoCisJQyBlYnAJY2FycnkgYml0CisKKwltb3ZsCSglZXNpLCVlYngsNCksICVlZGkKKworCW11bGwJUEFSQU1fRElWSVNPUgorCisJbW92bAktNCglZXNpLCVlYngsNCksICVlYXgKKwlzaHJkbCgJJWNsLCAlZWRpLCAlZWF4KQorCisJc3VibAklZWJwLCAlZWF4CisKKwlzYmJsCSVlYnAsICVlYnAKKwlzdWJsCSVlZHgsICVlYXgKKworCXNiYmwJJDAsICVlYnAKKworTChldmVuX2VudHJ5KToKKwlpbXVsbAlWQVJfSU5WRVJTRSwgJWVheAorCisJbW92bAlQQVJBTV9EU1QsICVlZGkKKwluZWdsCSVlYnAKKworCW1vdmwJJWVheCwgLTQoJWVkaSwlZWJ4LDQpCisJaW5jbAklZWJ4CisJam56CUwoZXZlbl90b3ApCisKKwltdWxsCVBBUkFNX0RJVklTT1IKKworCW1vdmwJLTQoJWVzaSksICVlYXgKKworTChldmVuX29uZSk6CisJc2hybAklY2wsICVlYXgKKwltb3ZsCVNBVkVfRVNJLCAlZXNpCisKKwlzdWJsCSVlYnAsICVlYXgKKwltb3ZsCVNBVkVfRUJQLCAlZWJwCisKKwlzdWJsCSVlZHgsICVlYXgKKwltb3ZsCVNBVkVfRUJYLCAlZWJ4CisKKwlpbXVsbAlWQVJfSU5WRVJTRSwgJWVheAorCisJbW92bAklZWF4LCAtNCglZWRpKQorCW1vdmwJU0FWRV9FREksICVlZGkKKwlhZGRsCSRTVEFDS19TUEFDRSwgJWVzcAorCisJcmV0CisKK0MgVGhlIGRlcGVuZGVudCBjaGFpbiBoZXJlIGlzCitDCitDCXN1YmwJJWVkeCwgJWVheCAgICAgICAxCitDCWltdWxsCSVlYnAsICVlYXggICAgICAgNAorQwltdWxsCVBBUkFNX0RJVklTT1IgICAgNQorQwkJCSAgICAgICAtLS0tCitDCXRvdGFsCQkJMTAKK0MKK0MgYW5kIHRoaXMgaXMgdGhlIG1lYXN1cmVkIHNwZWVkLiAgTm8gc3BlY2lhbCBzY2hlZHVsaW5nIGlzIG5lY2Vzc2FyeSwgb3V0CitDIG9mIG9yZGVyIGV4ZWN1dGlvbiBoaWRlcyB0aGUgbG9hZCBsYXRlbmN5LgorCitMKG9kZF90b3ApOgorCUMgZWF4CXNjcmF0Y2ggKHNyYyBsaW1iKQorCUMgZWJ4CWNvdW50ZXIsIGxpbWJzLCBuZWdhdGl2ZQorCUMgZWN4CWNhcnJ5IGJpdAorCUMgZWR4CWNhcnJ5IGxpbWIsIGhpZ2ggb2YgbGFzdCBwcm9kdWN0CisJQyBlc2kJJnNyY1tzaXplXQorCUMgZWRpCSZkc3Rbc2l6ZV0KKwlDIGVicAlpbnZlcnNlCisKKwltdWxsCVBBUkFNX0RJVklTT1IKKworCW1vdmwJKCVlc2ksJWVieCw0KSwgJWVheAorCXN1YmwJJWVjeCwgJWVheAorCisJc2JibAklZWN4LCAlZWN4CisJc3VibAklZWR4LCAlZWF4CisKKwlzYmJsCSQwLCAlZWN4CisKK0wob2RkX2VudHJ5KToKKwlpbXVsbAklZWJwLCAlZWF4CisKKwltb3ZsCSVlYXgsICglZWRpLCVlYngsNCkKKwluZWdsCSVlY3gKKworCWluY2wJJWVieAorCWpueglMKG9kZF90b3ApCisKKworCW1vdmwJU0FWRV9FU0ksICVlc2kKKworCW1vdmwJU0FWRV9FREksICVlZGkKKworCW1vdmwJU0FWRV9FQlAsICVlYnAKKworCW1vdmwJU0FWRV9FQlgsICVlYngKKwlhZGRsCSRTVEFDS19TUEFDRSwgJWVzcAorCisJcmV0CisKK0VQSUxPR1VFKCkKKworQyBtcF9saW1iX3QgbXBuX2JkaXZfcV8xIChtcF9wdHIgZHN0LCBtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSwKK0MgICAgICAgICAgICAgICAgICAgICAgICAgICBtcF9saW1iX3QgZGl2aXNvcik7CitDCisKKwlBTElHTigxNikKK1BST0xPR1VFKG1wbl9iZGl2X3FfMSkKK2RlZmxpdChgRlJBTUUnLDApCisKKwltb3ZsCVBBUkFNX0RJVklTT1IsICVlYXgKKwlzdWJsCSRTVEFDS19TUEFDRSwgJWVzcAlGUkFNRV9zdWJsX2VzcChTVEFDS19TUEFDRSkKKworCW1vdmwJJWVzaSwgU0FWRV9FU0kKKwltb3ZsCVBBUkFNX1NSQywgJWVzaQorCisJbW92bAklZWJ4LCBTQVZFX0VCWAorCW1vdmwJUEFSQU1fU0laRSwgJWVieAorCisJYnNmbAklZWF4LCAlZWN4CQlDIHRyYWlsaW5nIHR3b3MKKworCW1vdmwJJWVicCwgU0FWRV9FQlAKKworCXNocmwJJWNsLCAlZWF4CQlDIGQgd2l0aG91dCB0d29zCisKKwltb3ZsCSVlYXgsICVlZHgKKwlzaHJsCSVlYXgJCQlDIGQvMiB3aXRob3V0IHR3b3MKKworCW1vdmwJJWVkeCwgUEFSQU1fRElWSVNPUgorCWFuZGwJJDEyNywgJWVheAorCitpZmRlZihgUElDJyxgCisJTEVBKAliaW52ZXJ0X2xpbWJfdGFibGUsICVlYnApCisJbW92emJsCSglZWF4LCVlYnApLCAlZWJwCQlDIGludiA4IGJpdHMKKycsYAorCW1vdnpibAliaW52ZXJ0X2xpbWJfdGFibGUoJWVheCksICVlYnAJQyBpbnYgOCBiaXRzCisnKQorCisJbGVhbAkoJWVicCwlZWJwKSwgJWVheAlDIDIqaW52CisKKwlpbXVsbAklZWJwLCAlZWJwCQlDIGludippbnYKKwlpbXVsbAklZWR4LCAlZWJwCUMgaW52KmludipkCisKKwlzdWJsCSVlYnAsICVlYXgJCUMgaW52ID0gMippbnYgLSBpbnYqaW52KmQKKwlsZWFsCSglZWF4LCVlYXgpLCAlZWJwCUMgMippbnYKKworCWltdWxsCSVlYXgsICVlYXgJCUMgaW52KmludgorCWltdWxsCSVlZHgsICVlYXgJQyBpbnYqaW52KmQKKworCXN1YmwJJWVheCwgJWVicAkJQyBpbnYgPSAyKmludiAtIGludippbnYqZAorCisJam1wCUwoY29tbW9uKQorCitFUElMT0dVRSgpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3A2L2NvcHlkLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3A2L2NvcHlkLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmU3NjM2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcDYvY29weWQuYXNtCkBAIC0wLDAgKzEsMTc4IEBACitkbmwgIEludGVsIFA2IG1wbl9jb3B5ZCAtLSBjb3B5IGxpbWIgdmVjdG9yIGJhY2t3YXJkcy4KKworZG5sICBDb3B5cmlnaHQgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MgUDY6IDEuNzUgY3ljbGVzL2xpbWIsIG9yIDAuNzUgaWYgbm8gb3ZlcmxhcAorCisKK0Mgdm9pZCBtcG5fY29weWQgKG1wX3B0ciBkc3QsIG1wX3NyY3B0ciBzcmMsIG1wX3NpemVfdCBzaXplKTsKK0MKK0MgQW4gZXhwbGljaXQgbG9vcCBpcyB1c2VkIGJlY2F1c2UgYSBkZWNyZW1lbnRpbmcgcmVwIG1vdnNsIGlzIGEgYml0IHNsb3cgYXQKK0MgMi40IGMvbC4gIFRoYXQgcmVwIG1vdnNsIGFsc28gaGFzIGFib3V0IGEgNDAgY3ljbGUgc3RhcnR1cCB0aW1lLCBhbmQgdGhlCitDIGNvZGUgaGVyZSBzdGFuZHMgYSBjaGFuY2Ugb2YgYmVpbmcgZmFzdGVyIGlmIHRoZSBicmFuY2hlcyBwcmVkaWN0IHdlbGwuCitDCitDIFRoZSBzbGlnaHRseSBzdHJhbmdlIGxvb3AgZm9ybSBzZWVtcyBuZWNlc3NhcnkgZm9yIHRoZSBjbGFpbWVkIHNwZWVkLgorQyBNYXliZSBsb2FkL3N0b3JlIG9yZGVyaW5nIGFmZmVjdHMgaXQuCitDCitDIFRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSBjaGVja2VkIHRvIHNlZSBpZiB0aGV5J3JlIGFjdHVhbGx5CitDIG92ZXJsYXBwaW5nLCBzaW5jZSBpdCBtaWdodCBiZSBwb3NzaWJsZSB0byB1c2UgYW4gaW5jcmVtZW50aW5nIHJlcCBtb3ZzbAorQyBhdCAwLjc1IGMvbC4gIChJdCBkb2Vzbid0IHN1ZmZlciB0aGUgYmFkIHN0YXJ0dXAgdGltZSBvZiB0aGUgZGVjcmVtZW50aW5nCitDIHZlcnNpb24uKQorQworQyBFbmhhbmNlbWVudHM6CitDCitDIFRvcCBzcGVlZCBmb3IgYW4gYWxsLWludGVnZXIgY29weSBpcyBwcm9iYWJseSAxLjAgYy9sLCBiZWluZyBvbmUgbG9hZCBhbmQKK0Mgb25lIHN0b3JlIGVhY2ggY3ljbGUuICBVbnJvbGxpbmcgdGhlIGxvb3AgYmVsb3cgd291bGQgYXBwcm9hY2ggMS4wLCBidXQKK0MgaXQnZCBiZSBnb29kIHRvIGtub3cgd2h5IHNvbWV0aGluZyBsaWtlIHN0b3JlL2xvYWQvc3VibCArIHN0b3JlL2xvYWQvam56CitDIGRvZXNuJ3QgYWxyZWFkeSBydW4gYXQgMS4wIGMvbC4gIEl0IGxvb2tzIGxpa2UgaXQgc2hvdWxkIGRlY29kZSBpbiAyCitDIGN5Y2xlcywgYnV0IGRvZXNuJ3QgcnVuIHRoYXQgd2F5LgorCitkZWZmcmFtZShQQVJBTV9TSVpFLDEyKQorZGVmZnJhbWUoUEFSQU1fU1JDLCA4KQorZGVmZnJhbWUoUEFSQU1fRFNULCA0KQorCitkbmwgIHJlLXVzaW5nIHBhcmFtZXRlciBzcGFjZQorZGVmaW5lKFNBVkVfRVNJLGBQQVJBTV9TSVpFJykKK2RlZmluZShTQVZFX0VESSxgUEFSQU1fU1JDJykKKworCVRFWFQKKwlBTElHTigxNikKKworUFJPTE9HVUUobXBuX2NvcHlkKQorZGVmbGl0KGBGUkFNRScsMCkKKworCW1vdmwJUEFSQU1fU0laRSwgJWVjeAorCisJbW92bAklZXNpLCBTQVZFX0VTSQorCW1vdmwJUEFSQU1fU1JDLCAlZXNpCisKKwltb3ZsCSVlZGksIFNBVkVfRURJCisJbW92bAlQQVJBTV9EU1QsICVlZGkKKworCXN1YmwJJDEsICVlY3gKKwlqYglMKHplcm8pCisKKwltb3ZsCSglZXNpLCVlY3gsNCksICVlYXgJCUMgc3JjW3NpemUtMV0KKwlqeglMKG9uZSkKKworCW1vdmwJLTQoJWVzaSwlZWN4LDQpLCAlZWR4CQlDIHNyY1tzaXplLTJdCisJc3VibAkkMiwgJWVjeAorCWpiZQlMKGRvbmVfbG9vcCkJCQlDIDIgb3IgMyBsaW1icyBvbmx5CisKKworCUMgVGhlIHVzdWFsIG92ZXJsYXAgaXMKKwlDCisJQyAgICAgaGlnaCAgICAgICAgICAgICAgICAgICBsb3cKKwlDICAgICArLS0tLS0tLS0tLS0tLS0tLS0tKworCUMgICAgIHwgICAgICAgICAgICAgICBkc3R8CisJQyAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLSsKKwlDICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tKworCUMgICAgICAgICAgIHwgICAgICAgICAgICAgICBzcmN8CisJQyAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLSsKKwlDCisJQyBXZSBjYW4gdXNlIGFuIGluY3JlbWVudGluZyBjb3B5IGluIHRoZSBmb2xsb3dpbmcgY2lyY3Vtc3RhbmNlcy4KKwlDCisJQyAgICAgc3JjKzQqc2l6ZTw9ZHN0LCBzaW5jZSB0aGVuIHRoZSByZWdpb25zIGFyZSBkaXNqb2ludAorCUMKKwlDICAgICBzcmM9PWRzdCwgY2xlYXJseSAodGhvdWdoIHRoaXMgc2hvdWxkbid0IG9jY3VyIG5vcm1hbGx5KQorCUMKKwlDICAgICBzcmM+ZHN0LCBzaW5jZSBpbiB0aGF0IGNhc2UgaXQncyBhIHJlcXVpcmVtZW50IG9mIHRoZQorCUMgICAgICAgICAgICAgIHBhcmFtZXRlcnMgdGhhdCBzcmM+PWRzdCtzaXplKjQsIGFuZCBoZW5jZSB0aGUKKwlDICAgICAgICAgICAgICByZWdpb25zIGFyZSBkaXNqb2ludAorCUMKKworCWxlYWwJKCVlZGksJWVjeCw0KSwgJWVkeAorCWNtcGwJJWVkaSwgJWVzaQorCWphZQlMKHVzZV9tb3ZzbCkJCUMgc3JjID49IGRzdAorCisJY21wbAklZWRpLCAlZWR4CisJbW92bAk0KCVlc2ksJWVjeCw0KSwgJWVkeAlDIHNyY1tzaXplLTJdIGFnYWluCisJamJlCUwodXNlX21vdnNsKQkJQyBzcmMrNCpzaXplIDw9IGRzdAorCisKK0wodG9wKToKKwlDIGVheAlwcmV2IGhpZ2ggbGltYgorCUMgZWJ4CisJQyBlY3gJY291bnRlciwgc2l6ZS0zIGRvd24gdG8gMCBvciAtMSwgaW5jbHVzaXZlLCBieSAycworCUMgZWR4CXByZXYgbG93IGxpbWIKKwlDIGVzaQlzcmMKKwlDIGVkaQlkc3QKKwlDIGVicAorCisJbW92bAklZWF4LCA4KCVlZGksJWVjeCw0KQorCW1vdmwJKCVlc2ksJWVjeCw0KSwgJWVheAorCisJbW92bAklZWR4LCA0KCVlZGksJWVjeCw0KQorCW1vdmwJLTQoJWVzaSwlZWN4LDQpLCAlZWR4CisKKwlzdWJsCSQyLCAlZWN4CisJam5iZQlMKHRvcCkKKworCitMKGRvbmVfbG9vcCk6CisJbW92bAklZWF4LCA4KCVlZGksJWVjeCw0KQorCW1vdmwJJWVkeCwgNCglZWRpLCVlY3gsNCkKKworCUMgY29weSBsb3cgbGltYiAobmVlZGVkIGlmIHNpemUgd2FzIG9kZCwgYnV0IHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4KKwlDIGRvbmUgaW4gdGhlIGxvb3AgaWYgc2l6ZSB3YXMgZXZlbikKKwltb3ZsCSglZXNpKSwgJWVheAorTChvbmUpOgorCW1vdmwJJWVheCwgKCVlZGkpCisJbW92bAlTQVZFX0VESSwgJWVkaQorCW1vdmwJU0FWRV9FU0ksICVlc2kKKworCXJldAorCisKK0wodXNlX21vdnNsKToKKwlDIGVheAorCUMgZWJ4CisJQyBlY3gJc2l6ZS0zCisJQyBlZHgKKwlDIGVzaQlzcmMKKwlDIGVkaQlkc3QKKwlDIGVicAorCisJYWRkbAkkMywgJWVjeAorCisJY2xkCQlDIGJldHRlciBzYWZlIHRoYW4gc29ycnksIHNlZSBtcG4veDg2L1JFQURNRQorCisJcmVwCisJbW92c2wKKworTCh6ZXJvKToKKwltb3ZsCVNBVkVfRVNJLCAlZXNpCisJbW92bAlTQVZFX0VESSwgJWVkaQorCisJcmV0CisKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3A2L2RpdmVfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wNi9kaXZlXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNjFhMTgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wNi9kaXZlXzEuYXNtCkBAIC0wLDAgKzEsMjY3IEBACitkbmwgIEludGVsIFA2IG1wbl9tb2RleGFjdF8xX29kZCAtLSBleGFjdCBkaXZpc2lvbiBzdHlsZSByZW1haW5kZXIuCisKK2RubCAgQ29weXJpZ2h0IDIwMDEsIDIwMDIsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDICAgICAgIG9kZCAgZXZlbiAgZGl2aXNvcgorQyBQNjogIDEwLjAgIDEyLjAgIGN5Y2xlcy9saW1iCisKKworQyB2b2lkIG1wbl9kaXZleGFjdF8xIChtcF9wdHIgZHN0LCBtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSwKK0MgICAgICAgICAgICAgICAgICAgICAgbXBfbGltYl90IGRpdmlzb3IpOworQworQyBUaGUgb2RkIGNhc2UgaXMgYmFzaWNhbGx5IHRoZSBzYW1lIGFzIG1wbl9tb2RleGFjdF8xX29kZCwganVzdCB3aXRoIGFuCitDIGV4dHJhIHN0b3JlLCBhbmQgaXQgcnVucyBhdCB0aGUgc2FtZSAxMCBjeWNsZXMgd2hpY2ggaXMgdGhlIGRlcGVuZGVudAorQyBjaGFpbi4KK0MKK0MgVGhlIHNoaWZ0cyBmb3IgdGhlIGV2ZW4gY2FzZSBhcmVuJ3Qgb24gdGhlIGRlcGVuZGVudCBjaGFpbiBzbyBpbiBwcmluY2lwbGUKK0MgaXQgY291bGQgcnVuIHRoZSBzYW1lIHRvbywgYnV0IG5vdGhpbmcgcnVubmluZyBhdCAxMCBoYXMgYmVlbiBmb3VuZC4KK0MgUGVyaGFwcyB0aGVyZSdzIHRvbyBtYW55IHVvcHMgKGFuIGV4dHJhIDQgb3ZlciB0aGUgb2RkIGNhc2UpLgorCitkZWZmcmFtZShQQVJBTV9ESVZJU09SLDE2KQorZGVmZnJhbWUoUEFSQU1fU0laRSwgICAxMikKK2RlZmZyYW1lKFBBUkFNX1NSQywgICAgIDgpCitkZWZmcmFtZShQQVJBTV9EU1QsICAgICA0KQorCitkZWZmcmFtZShTQVZFX0VCWCwgICAgIC00KQorZGVmZnJhbWUoU0FWRV9FU0ksICAgICAtOCkKK2RlZmZyYW1lKFNBVkVfRURJLCAgICAtMTIpCitkZWZmcmFtZShTQVZFX0VCUCwgICAgLTE2KQorZGVmZnJhbWUoVkFSX0lOVkVSU0UsIC0yMCkKK2RlZmxpdChTVEFDS19TUEFDRSwgMjApCisKKwlURVhUCisKKwlBTElHTigxNikKK1BST0xPR1VFKG1wbl9kaXZleGFjdF8xKQorZGVmbGl0KGBGUkFNRScsMCkKKworCW1vdmwJUEFSQU1fRElWSVNPUiwgJWVheAorCXN1YmwJJFNUQUNLX1NQQUNFLCAlZXNwCUZSQU1FX3N1YmxfZXNwKFNUQUNLX1NQQUNFKQorCisJbW92bAklZXNpLCBTQVZFX0VTSQorCW1vdmwJUEFSQU1fU1JDLCAlZXNpCisKKwltb3ZsCSVlYngsIFNBVkVfRUJYCisJbW92bAlQQVJBTV9TSVpFLCAlZWJ4CisKKwlic2ZsCSVlYXgsICVlY3gJCUMgdHJhaWxpbmcgdHdvcworCisJbW92bAklZWJwLCBTQVZFX0VCUAorCisJc2hybAklY2wsICVlYXgJCUMgZCB3aXRob3V0IHR3b3MKKworCW1vdmwJJWVheCwgJWVkeAorCXNocmwJJWVheAkJCUMgZC8yIHdpdGhvdXQgdHdvcworCisJbW92bAklZWR4LCBQQVJBTV9ESVZJU09SCisJYW5kbAkkMTI3LCAlZWF4CisKK2lmZGVmKGBQSUMnLGAKKwlMRUEoCWJpbnZlcnRfbGltYl90YWJsZSwgJWVicCkKKwltb3Z6YmwJKCVlYXgsJWVicCksICVlYnAJCUMgaW52IDggYml0cworJyxgCisJbW92emJsCWJpbnZlcnRfbGltYl90YWJsZSglZWF4KSwgJWVicAlDIGludiA4IGJpdHMKKycpCisKKwlsZWFsCSglZWJwLCVlYnApLCAlZWF4CUMgMippbnYKKworCWltdWxsCSVlYnAsICVlYnAJCUMgaW52KmludgorCisJbW92bAklZWRpLCBTQVZFX0VESQorCW1vdmwJUEFSQU1fRFNULCAlZWRpCisKKwlsZWFsCSglZXNpLCVlYngsNCksICVlc2kJQyBzcmMgZW5kCisKKwlpbXVsbAlQQVJBTV9ESVZJU09SLCAlZWJwCUMgaW52KmludipkCisKKwlzdWJsCSVlYnAsICVlYXgJCUMgaW52ID0gMippbnYgLSBpbnYqaW52KmQKKwlsZWFsCSglZWF4LCVlYXgpLCAlZWJwCUMgMippbnYKKworCWltdWxsCSVlYXgsICVlYXgJCUMgaW52KmludgorCisJbGVhbAkoJWVkaSwlZWJ4LDQpLCAlZWRpCUMgZHN0IGVuZAorCW5lZ2wJJWVieAkJCUMgLXNpemUKKworCW1vdmwJJWVkaSwgUEFSQU1fRFNUCisKKwlpbXVsbAlQQVJBTV9ESVZJU09SLCAlZWF4CUMgaW52KmludipkCisKKwlzdWJsCSVlYXgsICVlYnAJCUMgaW52ID0gMippbnYgLSBpbnYqaW52KmQKKworCUFTU0VSVChlLGAJQyBkKmludiA9PSAxIG1vZCAyXkdNUF9MSU1CX0JJVFMKKwltb3ZsCVBBUkFNX0RJVklTT1IsICVlYXgKKwlpbXVsbAklZWJwLCAlZWF4CisJY21wbAkkMSwgJWVheCcpCisKKwltb3ZsCSVlYnAsIFZBUl9JTlZFUlNFCisJbW92bAkoJWVzaSwlZWJ4LDQpLCAlZWF4CUMgc3JjWzBdCisKKwlvcmwJJWVjeCwgJWVjeAorCWpueglMKGV2ZW4pCisKKwlDIGVjeCBpbml0aWFsIGNhcnJ5IGlzIHplcm8KKwlqbXAJTChvZGRfZW50cnkpCisKKworQyBUaGUgZGVwZW5kZW50IGNoYWluIGhlcmUgaXMKK0MKK0MJc3VibAklZWR4LCAlZWF4ICAgICAgIDEKK0MJaW11bGwJJWVicCwgJWVheCAgICAgICA0CitDCW11bGwJUEFSQU1fRElWSVNPUiAgICA1CitDCQkJICAgICAgIC0tLS0KK0MJdG90YWwJCQkxMAorQworQyBhbmQgdGhpcyBpcyB0aGUgbWVhc3VyZWQgc3BlZWQuICBObyBzcGVjaWFsIHNjaGVkdWxpbmcgaXMgbmVjZXNzYXJ5LCBvdXQKK0Mgb2Ygb3JkZXIgZXhlY3V0aW9uIGhpZGVzIHRoZSBsb2FkIGxhdGVuY3kuCisKK0wob2RkX3RvcCk6CisJQyBlYXgJc2NyYXRjaCAoc3JjIGxpbWIpCisJQyBlYngJY291bnRlciwgbGltYnMsIG5lZ2F0aXZlCisJQyBlY3gJY2FycnkgYml0CisJQyBlZHgJY2FycnkgbGltYiwgaGlnaCBvZiBsYXN0IHByb2R1Y3QKKwlDIGVzaQkmc3JjW3NpemVdCisJQyBlZGkJJmRzdFtzaXplXQorCUMgZWJwCisKKwltdWxsCVBBUkFNX0RJVklTT1IKKworCW1vdmwJKCVlc2ksJWVieCw0KSwgJWVheAorCXN1YmwJJWVjeCwgJWVheAorCisJc2JibAklZWN4LCAlZWN4CisJc3VibAklZWR4LCAlZWF4CisKKwlzYmJsCSQwLCAlZWN4CisKK0wob2RkX2VudHJ5KToKKwlpbXVsbAlWQVJfSU5WRVJTRSwgJWVheAorCisJbW92bAklZWF4LCAoJWVkaSwlZWJ4LDQpCisJbmVnbAklZWN4CisKKwlpbmNsCSVlYngKKwlqbnoJTChvZGRfdG9wKQorCisKKwltb3ZsCVNBVkVfRVNJLCAlZXNpCisKKwltb3ZsCVNBVkVfRURJLCAlZWRpCisKKwltb3ZsCVNBVkVfRUJQLCAlZWJwCisKKwltb3ZsCVNBVkVfRUJYLCAlZWJ4CisJYWRkbAkkU1RBQ0tfU1BBQ0UsICVlc3AKKworCXJldAorCisKK0woZXZlbik6CisJQyBlYXgJc3JjWzBdCisJQyBlYngJY291bnRlciwgbGltYnMsIG5lZ2F0aXZlCisJQyBlY3gJc2hpZnQKKwlDIGVkeAorCUMgZXNpCisJQyBlZGkKKwlDIGVicAorCisJeG9ybAklZWJwLCAlZWJwCQlDIGluaXRpYWwgY2FycnkgYml0CisJeG9ybAklZWR4LCAlZWR4CQlDIGluaXRpYWwgY2FycnkgbGltYiAoZm9yIHNpemU9PTEpCisKKwlpbmNsCSVlYngKKwlqeglMKGV2ZW5fb25lKQorCisJbW92bAkoJWVzaSwlZWJ4LDQpLCAlZWRpCUMgc3JjWzFdCisKKwlzaHJkbCgJJWNsLCAlZWRpLCAlZWF4KQorCisJam1wCUwoZXZlbl9lbnRyeSkKKworCitMKGV2ZW5fdG9wKToKKwlDIGVheAlzY3JhdGNoCisJQyBlYngJY291bnRlciwgbGltYnMsIG5lZ2F0aXZlCisJQyBlY3gJc2hpZnQKKwlDIGVkeAlzY3JhdGNoCisJQyBlc2kJJnNyY1tzaXplXQorCUMgZWRpCSZkc3Rbc2l6ZV0gYW5kIHNjcmF0Y2gKKwlDIGVicAljYXJyeSBiaXQKKworCW1vdmwJKCVlc2ksJWVieCw0KSwgJWVkaQorCisJbXVsbAlQQVJBTV9ESVZJU09SCisKKwltb3ZsCS00KCVlc2ksJWVieCw0KSwgJWVheAorCXNocmRsKAklY2wsICVlZGksICVlYXgpCisKKwlzdWJsCSVlYnAsICVlYXgKKworCXNiYmwJJWVicCwgJWVicAorCXN1YmwJJWVkeCwgJWVheAorCisJc2JibAkkMCwgJWVicAorCitMKGV2ZW5fZW50cnkpOgorCWltdWxsCVZBUl9JTlZFUlNFLCAlZWF4CisKKwltb3ZsCVBBUkFNX0RTVCwgJWVkaQorCW5lZ2wJJWVicAorCisJbW92bAklZWF4LCAtNCglZWRpLCVlYngsNCkKKwlpbmNsCSVlYngKKwlqbnoJTChldmVuX3RvcCkKKworCisKKwltdWxsCVBBUkFNX0RJVklTT1IKKworCW1vdmwJLTQoJWVzaSksICVlYXgKKworTChldmVuX29uZSk6CisJc2hybAklY2wsICVlYXgKKwltb3ZsCVNBVkVfRVNJLCAlZXNpCisKKwlzdWJsCSVlYnAsICVlYXgKKwltb3ZsCVNBVkVfRUJQLCAlZWJwCisKKwlzdWJsCSVlZHgsICVlYXgKKwltb3ZsCVNBVkVfRUJYLCAlZWJ4CisKKwlpbXVsbAlWQVJfSU5WRVJTRSwgJWVheAorCisJbW92bAklZWF4LCAtNCglZWRpKQorCW1vdmwJU0FWRV9FREksICVlZGkKKwlhZGRsCSRTVEFDS19TUEFDRSwgJWVzcAorCisJcmV0CisKK0VQSUxPR1VFKCkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcDYvZ2NkXzExLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3A2L2djZF8xMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBlMDU1ZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3A2L2djZF8xMS5hc20KQEAgLTAsMCArMSw4MyBAQAorZG5sICB4ODYgbXBuX2djZF8xMSBvcHRpbWlzZWQgZm9yIHByb2Nlc3NvcnMgd2l0aCBmYXN0IEJTRi4KKworZG5sICBCYXNlZCBvbiB0aGUgSzcgZ2NkXzEuYXNtLCBieSBLZXZpbiBSeWRlLiAgUmVoYWNrZWQgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDAtMjAwMiwgMjAwNSwgMjAwOSwgMjAxMSwgMjAxMiwgMjAxNSBGcmVlIFNvZnR3YXJlCitkbmwgIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MJICAgICBjeWNsZXMvYml0IChhcHByb3gpCitDIEFNRCBLNwkgNy44MAorQyBBTUQgSzgsSzkJIDcuNzkKK0MgQU1EIEsxMAkgNC4wOAorQyBBTUQgYmQxCSA/CitDIEFNRCBib2JjYXQJIDcuODIKK0MgSW50ZWwgUDQtMgkxNC45CitDIEludGVsIFA0LTMvNAkxNC4wCitDIEludGVsIFA2LzEzCSA1LjA5CitDIEludGVsIGNvcmUyCSA0LjIyCitDIEludGVsIE5ITQkgNS4wMAorQyBJbnRlbCBTQlIJIDUuMDAKK0MgSW50ZWwgYXRvbQkxNy4xCitDIFZJQSBuYW5vCT8KK0MgTnVtYmVycyBtZWFzdXJlZCB3aXRoOiBzcGVlZCAtQ0QgLXMxNi0zMiAtdDE2IG1wbl9nY2RfMQorCisKK2RlZmluZShgdTAnLCAgICBgJWVheCcpCitkZWZpbmUoYHYwJywgICAgYCVlZHgnKQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigxNikKK1BST0xPR1VFKG1wbl9nY2RfMTEpCisJcHVzaAklZWRpCisJcHVzaAklZXNpCisKKwltb3YJMTIoJWVzcCksICVlYXgKKwltb3YJMTYoJWVzcCksICVlZHgKKwlqbXAJTChvZGQpCisKKwlBTElHTigxNikJCUMgICAgICAgICAgICAgICBLMTAgICBCRCAgICBDMiAgICBOSE0gICBTQlIKK0wodG9wKToJY21vdmMoCSVlc2ksICVlYXgpCUMgdSA9IHx2IC0gdXwgICAwLDMgICAwLDMgICAwLDYgICAwLDUgICAwLDUKKwljbW92YygJJWVkaSwgJWVkeCkJQyB2ID0gbWluKHUsdikgIDAsMyAgIDAsMyAgIDIsOCAgIDEsNyAgIDEsNworCXNocgklY2wsICVlYXgJQyAgICAgICAgICAgICAgIDEsNyAgIDEsNiAgIDIsOCAgIDIsOCAgIDIsOAorTChvZGQpOgltb3YJJWVkeCwgJWVzaQlDICAgICAgICAgICAgICAgMSAgICAgMSAgICAgNCAgICAgMyAgICAgMworCXN1YgklZWF4LCAlZXNpCUMgICAgICAgICAgICAgICAyICAgICAyICAgICA1ICAgICA0ICAgICA0CisJYnNmCSVlc2ksICVlY3gJQyAgICAgICAgICAgICAgIDMgICAgIDMgICAgIDYgICAgIDUgICAgIDUKKwltb3YJJWVheCwgJWVkaQlDICAgICAgICAgICAgICAgMiAgICAgMiAgICAgMyAgICAgMyAgICAgNAorCXN1YgklZWR4LCAlZWF4CUMgICAgICAgICAgICAgICAyICAgICAyICAgICA0ICAgICAzICAgICA0CisJam56CUwodG9wKQkJQworCitMKGVuZCk6CW1vdgklZWR4LCAlZWF4CisJcG9wCSVlc2kKKwlwb3AJJWVkaQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcDYvZ21wLW1wYXJhbS5oIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcDYvZ21wLW1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2Yzk2ZmQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wNi9nbXAtbXBhcmFtLmgKQEAgLTAsMCArMSwxOTQgQEAKKy8qIEludGVsIFA2IGdtcC1tcGFyYW0uaCAtLSBDb21waWxlci9tYWNoaW5lIHBhcmFtZXRlciBoZWFkZXIgZmlsZS4KKworQ29weXJpZ2h0IDE5OTEsIDE5OTMsIDE5OTQsIDE5OTktMjAwMywgMjAwOC0yMDEwLCAyMDEyIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgMzIKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgNAorCisKKy8qIE5PVEU6IEluIGEgZmF0IGJpbmFyeSBidWlsZCBTUVJfVE9PTTJfVEhSRVNIT0xEIGhlcmUgY2Fubm90IGJlIG1vcmUgdGhhbiB0aGUKKyAgIHZhbHVlIGluIG1wbi94ODYvcDYvZ21wLW1wYXJhbS5oLiAgVGhlIGxhdHRlciBpcyB1c2VkIGFzIGEgaGFyZCBsaW1pdCBpbgorICAgbXBuL3g4Ni9wNi9zcXJfYmFzZWNhc2UuYXNtLiAgKi8KKworCisvKiAxODY3IE1IeiBQNiBtb2RlbCAxMyAqLworCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIE1PRF8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICA0CisjZGVmaW5lIE1PRF8xTl9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA1CisjZGVmaW5lIE1PRF8xVV9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA0CisjZGVmaW5lIE1PRF8xXzFfVE9fTU9EXzFfMl9USFJFU0hPTEQgICAgICAgIDExCisjZGVmaW5lIE1PRF8xXzJfVE9fTU9EXzFfNF9USFJFU0hPTEQgICAgICAgICAwICAvKiBuZXZlciBtcG5fbW9kXzFzXzJwICovCisjZGVmaW5lIFBSRUlOVl9NT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgICA4CisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAgICAxICAvKiBuYXRpdmUgKi8KKyNkZWZpbmUgRElWX1FSXzJfUEkyX1RIUkVTSE9MRCAgICAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWRVhBQ1RfMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAobmF0aXZlKSAqLworI2RlZmluZSBCTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgICAgICAyMQorCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDc0CisjZGVmaW5lIE1VTF9UT09NNDRfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTgxCisjZGVmaW5lIE1VTF9UT09NNkhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjUyCisjZGVmaW5lIE1VTF9UT09NOEhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMzYzCisKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNDNfVEhSRVNIT0xEICAgICAgNzMKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxMTQKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxMTUKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNjNfVEhSRVNIT0xEICAgICAgODAKKworI2RlZmluZSBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTAxCisjZGVmaW5lIFNRUl9UT09NNF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTU0CisjZGVmaW5lIFNRUl9UT09NNl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjIyCisjZGVmaW5lIFNRUl9UT09NOF9USFJFU0hPTEQgICAgICAgICAgICAgICAgNTI3CisKKyNkZWZpbmUgTVVMTUlEX1RPT000Ml9USFJFU0hPTEQgICAgICAgICAgICAgNTgKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxMworI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxNworCisjZGVmaW5lIFBPV01fU0VDX1RBQkxFICA0LDIzLDI1OCw3NjgsMjM4OAorCisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgNTY1ICAvKiBrID0gNSAqLworI2RlZmluZSBNVUxfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgNTY1LCA1fSwgeyAgICAgMjUsIDZ9LCB7ICAgICAxMywgNX0sIHsgICAgIDI3LCA2fSwgXAorICAgIHsgICAgIDI1LCA3fSwgeyAgICAgMTMsIDZ9LCB7ICAgICAyOCwgN30sIHsgICAgIDE1LCA2fSwgXAorICAgIHsgICAgIDMxLCA3fSwgeyAgICAgMTcsIDZ9LCB7ICAgICAzNSwgN30sIHsgICAgIDI3LCA4fSwgXAorICAgIHsgICAgIDE1LCA3fSwgeyAgICAgMzUsIDh9LCB7ICAgICAxOSwgN30sIHsgICAgIDQxLCA4fSwgXAorICAgIHsgICAgIDIzLCA3fSwgeyAgICAgNDcsIDh9LCB7ICAgICAyNywgOX0sIHsgICAgIDE1LCA4fSwgXAorICAgIHsgICAgIDMxLCA3fSwgeyAgICAgNjMsIDh9LCB7ICAgICAzOSwgOX0sIHsgICAgIDIzLCA1fSwgXAorICAgIHsgICAgMzgzLCA0fSwgeyAgICA5OTEsIDV9LCB7ICAgIDUxMSwgNn0sIHsgICAgMjY3LCA3fSwgXAorICAgIHsgICAgMTU3LCA4fSwgeyAgICAgOTEsIDl9LCB7ICAgICA0NywgOH0sIHsgICAgMTExLCA5fSwgXAorICAgIHsgICAgIDYzLCA4fSwgeyAgICAxMjcsIDl9LCB7ICAgICA3OSwxMH0sIHsgICAgIDQ3LCA5fSwgXAorICAgIHsgICAgIDk1LDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA2MywgOX0sIHsgICAgMTM1LDEwfSwgXAorICAgIHsgICAgIDc5LCA5fSwgeyAgICAxNTksMTB9LCB7ICAgICA5NSwxMX0sIHsgICAgIDYzLDEwfSwgXAorICAgIHsgICAgMTQzLCA5fSwgeyAgICAyODcsMTB9LCB7ICAgIDE1OSwxMX0sIHsgICAgIDk1LDEwfSwgXAorICAgIHsgICAgMTkxLDEyfSwgeyAgICAgNjMsMTF9LCB7ICAgIDEyNywxMH0sIHsgICAgMjU1LCA5fSwgXAorICAgIHsgICAgNTExLDEwfSwgeyAgICAyNzEsIDl9LCB7ICAgIDU0MywxMH0sIHsgICAgMjg3LDExfSwgXAorICAgIHsgICAgMTU5LDEwfSwgeyAgICAzMzUsIDl9LCB7ICAgIDY3MSwxMX0sIHsgICAgMTkxLDEwfSwgXAorICAgIHsgICAgMzgzLCA5fSwgeyAgICA3NjcsMTB9LCB7ICAgIDM5OSwgOX0sIHsgICAgNzk5LDEwfSwgXAorICAgIHsgICAgNDE1LDExfSwgeyAgICAyMjMsMTJ9LCB7ICAgIDEyNywxMX0sIHsgICAgMjU1LDEwfSwgXAorICAgIHsgICAgNTQzLCA5fSwgeyAgIDEwODcsMTF9LCB7ICAgIDI4NywxMH0sIHsgICAgNjA3LDExfSwgXAorICAgIHsgICAgMzE5LDEwfSwgeyAgICA2NzEsMTJ9LCB7ICAgIDE5MSwxMX0sIHsgICAgMzgzLDEwfSwgXAorICAgIHsgICAgNzk5LDExfSwgeyAgICA0MTUsMTB9LCB7ICAgIDgzMSwxM30sIHsgICAgMTI3LDEyfSwgXAorICAgIHsgICAgMjU1LDExfSwgeyAgICA1NDMsMTB9LCB7ICAgMTA4NywxMX0sIHsgICAgNjA3LDEwfSwgXAorICAgIHsgICAxMjE1LDEyfSwgeyAgICAzMTksMTF9LCB7ICAgIDY3MSwxMH0sIHsgICAxMzQzLDExfSwgXAorICAgIHsgICAgNzM1LDEwfSwgeyAgIDE0NzEsMTJ9LCB7ICAgIDM4MywxMX0sIHsgICAgNzk5LDEwfSwgXAorICAgIHsgICAxNTk5LDExfSwgeyAgICA4NjMsMTJ9LCB7ICAgIDQ0NywxMX0sIHsgICAgOTU5LDEzfSwgXAorICAgIHsgICAgMjU1LDEyfSwgeyAgICA1MTEsMTF9LCB7ICAgMTA4NywxMn0sIHsgICAgNTc1LDExfSwgXAorICAgIHsgICAxMjE1LDEyfSwgeyAgICA2MzksMTF9LCB7ICAgMTM0MywxMn0sIHsgICAgNzAzLDExfSwgXAorICAgIHsgICAxNDcxLDEzfSwgeyAgICAzODMsMTJ9LCB7ICAgIDgzMSwxMX0sIHsgICAxNzI3LDEyfSwgXAorICAgIHsgICAgOTU5LDE0fSwgeyAgICAyNTUsMTN9LCB7ICAgIDUxMSwxMn0sIHsgICAxMjE1LDEzfSwgXAorICAgIHsgICAgNjM5LDEyfSwgeyAgIDE0NzEsMTF9LCB7ICAgMjk0MywxM30sIHsgICAgNzY3LDEyfSwgXAorICAgIHsgICAxNzI3LDEzfSwgeyAgICA4OTUsMTJ9LCB7ICAgMTkxOSwxNH0sIHsgICAgNTExLDEzfSwgXAorICAgIHsgICAxMDIzLDEyfSwgeyAgIDIxMTEsMTN9LCB7ICAgMTE1MSwxMn0sIHsgICAyNDMxLDEzfSwgXAorICAgIHsgICAxNDA3LDEyfSwgeyAgIDI4MTUsMTR9LCB7ICAgIDc2NywxM30sIHsgICAxNjYzLDEyfSwgXAorICAgIHsgICAzNDU1LDEzfSwgeyAgIDgxOTIsMTR9LCB7ICAxNjM4NCwxNX0sIHsgIDMyNzY4LDE2fSB9CisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzX1NJWkUgMTMyCisjZGVmaW5lIE1VTF9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA2Nzg0CisKKyNkZWZpbmUgU1FSX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICA0NzIgIC8qIGsgPSA1ICovCisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICA0NzIsIDV9LCB7ICAgICAyNSwgNn0sIHsgICAgIDEzLCA1fSwgeyAgICAgMjcsIDZ9LCBcCisgICAgeyAgICAgMjUsIDd9LCB7ICAgICAxMywgNn0sIHsgICAgIDI3LCA3fSwgeyAgICAgMTUsIDZ9LCBcCisgICAgeyAgICAgMzEsIDd9LCB7ICAgICAxNywgNn0sIHsgICAgIDM1LCA3fSwgeyAgICAgMjcsIDh9LCBcCisgICAgeyAgICAgMTUsIDd9LCB7ICAgICAzNSwgOH0sIHsgICAgIDE5LCA3fSwgeyAgICAgNDEsIDh9LCBcCisgICAgeyAgICAgMjMsIDd9LCB7ICAgICA0OSwgOH0sIHsgICAgIDI3LCA5fSwgeyAgICAgMTUsIDh9LCBcCisgICAgeyAgICAgMzksIDl9LCB7ICAgICAyMywgOH0sIHsgICAgIDUxLDEwfSwgeyAgICAgMTUsIDl9LCBcCisgICAgeyAgICAgMzEsIDh9LCB7ICAgICA2MywgNH0sIHsgICAxMDIzLCA4fSwgeyAgICAgNjcsIDl9LCBcCisgICAgeyAgICAgMzksIDV9LCB7ICAgIDYzOSwgNH0sIHsgICAxNDcxLCA2fSwgeyAgICAzODMsIDd9LCBcCisgICAgeyAgICAyMDksIDh9LCB7ICAgIDExOSwgOX0sIHsgICAgIDYzLCA3fSwgeyAgICAyNTUsIDh9LCBcCisgICAgeyAgICAxMzksIDl9LCB7ICAgICA3MSwgOH0sIHsgICAgMTQzLCA5fSwgeyAgICAgNzksMTB9LCBcCisgICAgeyAgICAgNDcsIDl9LCB7ICAgICA5NSwxMX0sIHsgICAgIDMxLDEwfSwgeyAgICAgNjMsIDl9LCBcCisgICAgeyAgICAxMzUsMTB9LCB7ICAgICA3OSwgOX0sIHsgICAgMTU5LCA4fSwgeyAgICAzMTksIDl9LCBcCisgICAgeyAgICAxNjcsMTB9LCB7ICAgICA5NSwxMX0sIHsgICAgIDYzLDEwfSwgeyAgICAxNDMsIDl9LCBcCisgICAgeyAgICAyODcsMTB9LCB7ICAgIDE1OSwxMX0sIHsgICAgIDk1LDEwfSwgeyAgICAxOTEsMTJ9LCBcCisgICAgeyAgICAgNjMsMTF9LCB7ICAgIDEyNywxMH0sIHsgICAgMjU1LCA5fSwgeyAgICA1NDMsIDh9LCBcCisgICAgeyAgIDEwODcsMTB9LCB7ICAgIDI4NywgOX0sIHsgICAgNTc1LDExfSwgeyAgICAxNTksMTB9LCBcCisgICAgeyAgICAzMTksIDl9LCB7ICAgIDYzOSwxMH0sIHsgICAgMzM1LCA5fSwgeyAgICA2NzEsMTB9LCBcCisgICAgeyAgICAzNTEsIDl9LCB7ICAgIDcwMywxMX0sIHsgICAgMTkxLDEwfSwgeyAgICAzODMsIDl9LCBcCisgICAgeyAgICA3NjcsMTB9LCB7ICAgIDM5OSwgOX0sIHsgICAgNzk5LDEwfSwgeyAgICA0MTUsIDl9LCBcCisgICAgeyAgICA4MzEsMTF9LCB7ICAgIDIyMywxMn0sIHsgICAgMTI3LDExfSwgeyAgICAyNTUsMTB9LCBcCisgICAgeyAgICA1NDMsIDl9LCB7ICAgMTA4NywxMX0sIHsgICAgMjg3LDEwfSwgeyAgICA2MDcsIDl9LCBcCisgICAgeyAgIDEyMTUsMTF9LCB7ICAgIDMxOSwxMH0sIHsgICAgNjcxLCA5fSwgeyAgIDEzNDMsMTF9LCBcCisgICAgeyAgICAzNTEsMTB9LCB7ICAgIDcwMywxMn0sIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTB9LCBcCisgICAgeyAgICA3OTksMTF9LCB7ICAgIDQxNSwxMH0sIHsgICAgODMxLDEzfSwgeyAgICAxMjcsMTJ9LCBcCisgICAgeyAgICAyNTUsMTF9LCB7ICAgIDU0MywxMH0sIHsgICAxMDg3LDExfSwgeyAgICA2MDcsMTJ9LCBcCisgICAgeyAgICAzMTksMTF9LCB7ICAgIDY3MSwxMH0sIHsgICAxMzQzLDExfSwgeyAgICA3MzUsMTJ9LCBcCisgICAgeyAgICAzODMsMTF9LCB7ICAgIDc5OSwxMH0sIHsgICAxNTk5LDExfSwgeyAgICA4NjMsMTJ9LCBcCisgICAgeyAgICA0NDcsMTF9LCB7ICAgIDk1OSwxM30sIHsgICAgMjU1LDEyfSwgeyAgICA1MTEsMTF9LCBcCisgICAgeyAgIDEwODcsMTJ9LCB7ICAgIDU3NSwxMX0sIHsgICAxMjE1LDEyfSwgeyAgICA2MzksMTF9LCBcCisgICAgeyAgIDEzNDMsMTJ9LCB7ICAgIDcwMywxMX0sIHsgICAxNDcxLDEzfSwgeyAgICAzODMsMTJ9LCBcCisgICAgeyAgICA3NjcsMTF9LCB7ICAgMTU5OSwxMn0sIHsgICAgODMxLDExfSwgeyAgIDE3MjcsMTJ9LCBcCisgICAgeyAgICA5NTksMTR9LCB7ICAgIDI1NSwxM30sIHsgICAgNTExLDEyfSwgeyAgIDEyMTUsMTN9LCBcCisgICAgeyAgICA2MzksMTJ9LCB7ICAgMTQ3MSwxM30sIHsgICAgNzY3LDEyfSwgeyAgIDE3MjcsMTN9LCBcCisgICAgeyAgICA4OTUsMTJ9LCB7ICAgMTkxOSwxNH0sIHsgICAgNTExLDEzfSwgeyAgIDEwMjMsMTJ9LCBcCisgICAgeyAgIDIxMTEsMTN9LCB7ICAgMTE1MSwxMn0sIHsgICAyNDMxLDEzfSwgeyAgIDE0MDcsMTR9LCBcCisgICAgeyAgICA3NjcsMTN9LCB7ICAgMTY2MywxMn0sIHsgICAzNDU1LDEzfSwgeyAgIDgxOTIsMTR9LCBcCisgICAgeyAgMTYzODQsMTV9LCB7ICAzMjc2OCwxNn0gfQorI2RlZmluZSBTUVJfRkZUX1RBQkxFM19TSVpFIDE0NgorI2RlZmluZSBTUVJfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNTc2MAorCisjZGVmaW5lIE1VTExPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTVVMTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgMzMKKyNkZWZpbmUgTVVMTE9fTVVMX05fVEhSRVNIT0xEICAgICAgICAgICAgMTM0NjMKKworI2RlZmluZSBEQ19ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBEQ19ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgICA1NgorI2RlZmluZSBEQ19CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA2MAorI2RlZmluZSBEQ19CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDEzNAorCisjZGVmaW5lIElOVl9NVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgIDM4CisjZGVmaW5lIElOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAgIDY2CisjZGVmaW5lIElOVl9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDYzCisKKyNkZWZpbmUgQklOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAyNTAKKyNkZWZpbmUgUkVEQ18xX1RPX1JFRENfTl9USFJFU0hPTEQgICAgICAgICAgNjMKKworI2RlZmluZSBNVV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTE2NAorI2RlZmluZSBNVV9ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgIDk3OQorI2RlZmluZSBNVVBJX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAzOAorI2RlZmluZSBNVV9CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTQ0MgorI2RlZmluZSBNVV9CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTQ3MAorCisjZGVmaW5lIE1BVFJJWDIyX1NUUkFTU0VOX1RIUkVTSE9MRCAgICAgICAgIDE3CisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAgIDY0CisjZGVmaW5lIEhHQ0RfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTA1CisjZGVmaW5lIEhHQ0RfUkVEVUNFX1RIUkVTSE9MRCAgICAgICAgICAgICAzNTI0CisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgMzg2CisjZGVmaW5lIEdDREVYVF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMzA5CisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgR0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICAgMjYKKyNkZWZpbmUgU0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICA1ODcKKyNkZWZpbmUgU0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgIDExMDQKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3A2L2xzaHN1Yl9uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3A2L2xzaHN1Yl9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWRhMjEzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcDYvbHNoc3ViX24uYXNtCkBAIC0wLDAgKzEsMTY5IEBACitkbmwgIEludGVsIFA2IG1wbl9sc2hzdWJfbiAtLSBtcG4gcGFwaWxsaW9uIHN1cHBvcnQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBQNi8xMzogMy4zNSBjeWNsZXMvbGltYgkoc2VwYXJhdGUgbXBuX3N1Yl9uICsgbXBuX2xzaGlmdCBuZWVkcyA0LjEyKQorCitDICgxKSBUaGUgbG9vcCBpcyBub3Qgc2NoZWR1bGVkIGluIGFueSB3YXksIGFuZCBzY2hlZHVsaW5nIGF0dGVtcHRzIGhhdmUgbm90CitDICAgICBpbXByb3ZlZCBzcGVlZCBvbiBQNi8xMy4gIFByZXN1bWFibHksIHRoZSBLNyB3aWxsIHdhbnQgc2NoZWR1bGluZywgaWYgaXQKK0MgICAgIGF0IGFsbCB3YW50cyB0byB1c2UgTU1YLgorQyAoMikgV2UgY291bGQgc2F2ZSBhIHJlZ2lzdGVyIGJ5IG5vdCBhbHRlcm5hdGluZ2x5IHVzaW5nIGVheCBhbmQgZWR4IGluIHRoZQorQyAgICAgbG9vcC4KKworZGVmaW5lKGBycCcsCWAlZWRpJykKK2RlZmluZShgdXAnLAlgJWVzaScpCitkZWZpbmUoYHZwJywJYCVlYngnKQorZGVmaW5lKGBuJywJYCVlY3gnKQorZGVmaW5lKGBjbnQnLAlgJW1tNycpCisKK0FTTV9TVEFSVCgpCisKKwlURVhUCisJQUxJR04oMTYpCisKK1BST0xPR1VFKG1wbl9sc2hzdWJfbikKKwlwdXNoCSVlZGkKKwlwdXNoCSVlc2kKKwlwdXNoCSVlYngKKworCW1vdgkxNiglZXNwKSwgcnAKKwltb3YJMjAoJWVzcCksIHVwCisJbW92CTI0KCVlc3ApLCB2cAorCW1vdgkyOCglZXNwKSwgbgorCW1vdgkkMzIsICVlYXgKKwlzdWIJMzIoJWVzcCksICVlYXgKKwltb3ZkCSVlYXgsIGNudAorCisJbGVhCSh1cCxuLDQpLCB1cAorCWxlYQkodnAsbiw0KSwgdnAKKwlsZWEJKHJwLG4sNCksIHJwCisKKwluZWcJbgorCW1vdgluLCAlZWF4CisJYW5kCSQtOCwgbgorCWFuZAkkNywgJWVheAorCXNobAklZWF4CQkJCUMgZWF4ID0gMngKKwlsZWEJKCVlYXgsJWVheCw0KSwgJWVkeAkJQyBlZHggPSAxMHgKK2lmZGVmKGBQSUMnLGAKKwljYWxsCUwocGljX2NhbGMpCitMKGhlcmUpOgorJyxgCisJbGVhCUwoZW50KSglZWF4LCVlZHgsMiksICVlYXgJQyBlYXggPSAyMngKKycpCisKKwlweG9yCSVtbTEsICVtbTEKKwlweG9yCSVtbTAsICVtbTAKKworCWptcAkqJWVheAorCitpZmRlZihgUElDJyxgCitMKHBpY19jYWxjKToKKwlDIFNlZSBtcG4veDg2L1JFQURNRSBhYm91dCBvbGQgZ2FzIGJ1Z3MKKwlsZWEJKCVlYXgsJWVkeCwyKSwgJWVheAorCWFkZAkkTChlbnQpLUwoaGVyZSksICVlYXgKKwlhZGQJKCVlc3ApLCAlZWF4CisJcmV0X2ludGVybmFsCisnKQorCitMKGVuZCk6CUMgY29tcHV0ZSAoY3k8PGNudCkgfCAoZWR4Pj4oMzItY250KSkKKwlzYmIJJWVheCwgJWVheAorCW5lZwklZWF4CisJbW92CTMyKCVlc3ApLCAlZWN4CisJc2hsZAklY2wsICVlZHgsICVlYXgKKworCWVtbXMKKworCXBvcAklZWJ4CisJcG9wCSVlc2kKKwlwb3AJJWVkaQorCXJldAorCUFMSUdOKDE2KQorTCh0b3ApOglqZWN4eglMKGVuZCkKK0woZW50KToJbW92CSAgIDAodXAsbiw0KSwgJWVheAorCXNiYgkgICAwKHZwLG4sNCksICVlYXgKKwltb3ZkCSAgICVlYXgsICVtbTAKKwlwdW5wY2tsZHEgICVtbTAsICVtbTEKKwlwc3JscQkgICAlbW03LCAlbW0xCisJbW92ZAkgICAlbW0xLCAwKHJwLG4sNCkKKworCW1vdgkgICA0KHVwLG4sNCksICVlZHgKKwlzYmIJICAgNCh2cCxuLDQpLCAlZWR4CisJbW92ZAkgICAlZWR4LCAlbW0xCisJcHVucGNrbGRxICAlbW0xLCAlbW0wCisJcHNybHEJICAgJW1tNywgJW1tMAorCW1vdmQJICAgJW1tMCwgNChycCxuLDQpCisKKwltb3YJICAgOCh1cCxuLDQpLCAlZWF4CisJc2JiCSAgIDgodnAsbiw0KSwgJWVheAorCW1vdmQJICAgJWVheCwgJW1tMAorCXB1bnBja2xkcSAgJW1tMCwgJW1tMQorCXBzcmxxCSAgICVtbTcsICVtbTEKKwltb3ZkCSAgICVtbTEsIDgocnAsbiw0KQorCisJbW92CSAgIDEyKHVwLG4sNCksICVlZHgKKwlzYmIJICAgMTIodnAsbiw0KSwgJWVkeAorCW1vdmQJICAgJWVkeCwgJW1tMQorCXB1bnBja2xkcSAgJW1tMSwgJW1tMAorCXBzcmxxCSAgICVtbTcsICVtbTAKKwltb3ZkCSAgICVtbTAsIDEyKHJwLG4sNCkKKworCW1vdgkgICAxNih1cCxuLDQpLCAlZWF4CisJc2JiCSAgIDE2KHZwLG4sNCksICVlYXgKKwltb3ZkCSAgICVlYXgsICVtbTAKKwlwdW5wY2tsZHEgICVtbTAsICVtbTEKKwlwc3JscQkgICAlbW03LCAlbW0xCisJbW92ZAkgICAlbW0xLCAxNihycCxuLDQpCisKKwltb3YJICAgMjAodXAsbiw0KSwgJWVkeAorCXNiYgkgICAyMCh2cCxuLDQpLCAlZWR4CisJbW92ZAkgICAlZWR4LCAlbW0xCisJcHVucGNrbGRxICAlbW0xLCAlbW0wCisJcHNybHEJICAgJW1tNywgJW1tMAorCW1vdmQJICAgJW1tMCwgMjAocnAsbiw0KQorCisJbW92CSAgIDI0KHVwLG4sNCksICVlYXgKKwlzYmIJICAgMjQodnAsbiw0KSwgJWVheAorCW1vdmQJICAgJWVheCwgJW1tMAorCXB1bnBja2xkcSAgJW1tMCwgJW1tMQorCXBzcmxxCSAgICVtbTcsICVtbTEKKwltb3ZkCSAgICVtbTEsIDI0KHJwLG4sNCkKKworCW1vdgkgICAyOCh1cCxuLDQpLCAlZWR4CisJc2JiCSAgIDI4KHZwLG4sNCksICVlZHgKKwltb3ZkCSAgICVlZHgsICVtbTEKKwlwdW5wY2tsZHEgICVtbTEsICVtbTAKKwlwc3JscQkgICAlbW03LCAlbW0wCisJbW92ZAkgICAlbW0wLCAyOChycCxuLDQpCisKKwlsZWEJICAgOChuKSwgbgorCWptcAkgICBMKHRvcCkKKworRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcDYvbW14L2RpdnJlbV8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3A2L21teC9kaXZyZW1fMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMwMDYxNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3A2L21teC9kaXZyZW1fMS5hc20KQEAgLTAsMCArMSw3NjcgQEAKK2RubCAgSW50ZWwgUGVudGl1bS1JSSBtcG5fZGl2cmVtXzEgLS0gbXBuIGJ5IGxpbWIgZGl2aXNpb24uCisKK2RubCAgQ29weXJpZ2h0IDE5OTktMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MgUDZNTVg6IDI1LjAgY3ljbGVzL2xpbWIgaW50ZWdlciBwYXJ0LCAxNy41IGN5Y2xlcy9saW1iIGZyYWN0aW9uIHBhcnQuCisKKworQyBtcF9saW1iX3QgbXBuX2RpdnJlbV8xIChtcF9wdHIgZHN0LCBtcF9zaXplX3QgeHNpemUsCitDICAgICAgICAgICAgICAgICAgICAgICAgIG1wX3NyY3B0ciBzcmMsIG1wX3NpemVfdCBzaXplLAorQyAgICAgICAgICAgICAgICAgICAgICAgICBtcF9saW1iX3QgZGl2aXNvcik7CitDIG1wX2xpbWJfdCBtcG5fZGl2cmVtXzFjIChtcF9wdHIgZHN0LCBtcF9zaXplX3QgeHNpemUsCitDICAgICAgICAgICAgICAgICAgICAgICAgICBtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSwKK0MgICAgICAgICAgICAgICAgICAgICAgICAgIG1wX2xpbWJfdCBkaXZpc29yLCBtcF9saW1iX3QgY2FycnkpOworQyBtcF9saW1iX3QgbXBuX3ByZWludl9kaXZyZW1fMSAobXBfcHRyIGRzdCwgbXBfc2l6ZV90IHhzaXplLAorQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUsCitDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcF9saW1iX3QgZGl2aXNvciwgbXBfbGltYl90IGludmVyc2UsCitDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaGlmdCk7CitDCitDIFRoaXMgY29kZSBpcyBhIGxpZ2h0bHkgcmV3b3JrZWQgdmVyc2lvbiBvZiBtcG4veDg2L2s3L21teC9kaXZyZW1fMS5hc20sCitDIHNlZSB0aGF0IGZpbGUgZm9yIHNvbWUgY29tbWVudHMuICBJdCdzIHBvc3NpYmxlIHdoYXQncyBoZXJlIGNhbiBiZSBpbXByb3ZlZC4KKworCitkbmwgIE1VTF9USFJFU0hPTEQgaXMgdGhlIHZhbHVlIG9mIHhzaXplK3NpemUgYXQgd2hpY2ggdGhlIG11bHRpcGx5IGJ5CitkbmwgIGludmVyc2UgbWV0aG9kIGlzIHVzZWQsIHJhdGhlciB0aGFuIHBsYWluICJkaXZsInMuICBNaW5pbXVtIHZhbHVlIDEuCitkbmwKK2RubCAgVGhlIGRpZmZlcmVudCBzcGVlZHMgb2YgdGhlIGludGVnZXIgYW5kIGZyYWN0aW9uIHBhcnRzIG1lYW5zIHRoYXQgdXNpbmcKK2RubCAgeHNpemUrc2l6ZSBpc24ndCBxdWl0ZSByaWdodC4gIFRoZSB0aHJlc2hvbGQgd2FudHMgdG8gYmUgYSBiaXQgaGlnaGVyCitkbmwgIGZvciB0aGUgaW50ZWdlciBwYXJ0IGFuZCBhIGJpdCBsb3dlciBmb3IgdGhlIGZyYWN0aW9uIHBhcnQuICAoT3Igd2hhdCdzCitkbmwgIHJlYWxseSB3YW50ZWQgaXMgdG8gc3BlZWQgdXAgdGhlIGludGVnZXIgcGFydCEpCitkbmwKK2RubCAgVGhlIHRocmVzaG9sZCBpcyBzZXQgdG8gbWFrZSB0aGUgaW50ZWdlciBwYXJ0IHJpZ2h0LiAgQXQgNCBsaW1icyB0aGUKK2RubCAgZGl2IGFuZCBtdWwgYXJlIGFib3V0IHRoZSBzYW1lIHRoZXJlLCBidXQgb24gdGhlIGZyYWN0aW9uYWwgcGFydCB0aGUKK2RubCAgbXVsIGlzIG11Y2ggZmFzdGVyLgorCitkZWZsaXQoTVVMX1RIUkVTSE9MRCwgNCkKKworCitkZWZmcmFtZShQQVJBTV9QUkVJTlZfU0hJRlQsICAgMjgpICBkbmwgbXBuX3ByZWludl9kaXZyZW1fMQorZGVmZnJhbWUoUEFSQU1fUFJFSU5WX0lOVkVSU0UsIDI0KSAgZG5sIG1wbl9wcmVpbnZfZGl2cmVtXzEKK2RlZmZyYW1lKFBBUkFNX0NBUlJZLCAgMjQpICAgICAgICAgIGRubCBtcG5fZGl2cmVtXzFjCitkZWZmcmFtZShQQVJBTV9ESVZJU09SLDIwKQorZGVmZnJhbWUoUEFSQU1fU0laRSwgICAxNikKK2RlZmZyYW1lKFBBUkFNX1NSQywgICAgMTIpCitkZWZmcmFtZShQQVJBTV9YU0laRSwgIDgpCitkZWZmcmFtZShQQVJBTV9EU1QsICAgIDQpCisKK2RlZmZyYW1lKFNBVkVfRUJYLCAgICAtNCkKK2RlZmZyYW1lKFNBVkVfRVNJLCAgICAtOCkKK2RlZmZyYW1lKFNBVkVfRURJLCAgICAtMTIpCitkZWZmcmFtZShTQVZFX0VCUCwgICAgLTE2KQorCitkZWZmcmFtZShWQVJfTk9STSwgICAgLTIwKQorZGVmZnJhbWUoVkFSX0lOVkVSU0UsIC0yNCkKK2RlZmZyYW1lKFZBUl9TUkMsICAgICAtMjgpCitkZWZmcmFtZShWQVJfRFNULCAgICAgLTMyKQorZGVmZnJhbWUoVkFSX0RTVF9TVE9QLC0zNikKKworZGVmbGl0KFNUQUNLX1NQQUNFLCAzNikKKworCVRFWFQKKwlBTElHTigxNikKKworUFJPTE9HVUUobXBuX3ByZWludl9kaXZyZW1fMSkKK2RlZmxpdChgRlJBTUUnLDApCisJbW92bAlQQVJBTV9YU0laRSwgJWVjeAorCXN1YmwJJFNUQUNLX1NQQUNFLCAlZXNwCUZSQU1FX3N1YmxfZXNwKFNUQUNLX1NQQUNFKQorCisJbW92bAklZXNpLCBTQVZFX0VTSQorCW1vdmwJUEFSQU1fU1JDLCAlZXNpCisKKwltb3ZsCSVlYngsIFNBVkVfRUJYCisJbW92bAlQQVJBTV9TSVpFLCAlZWJ4CisKKwltb3ZsCSVlYnAsIFNBVkVfRUJQCisJbW92bAlQQVJBTV9ESVZJU09SLCAlZWJwCisKKwltb3ZsCSVlZGksIFNBVkVfRURJCisJbW92bAlQQVJBTV9EU1QsICVlZHgKKworCW1vdmwJLTQoJWVzaSwlZWJ4LDQpLCAlZWF4CUMgc3JjIGhpZ2ggbGltYgorCXhvcmwJJWVkaSwgJWVkaQkJQyBpbml0aWFsIGNhcnJ5IChpZiBjYW4ndCBza2lwIGEgZGl2KQorCisJQworCisJbGVhbAk4KCVlZHgsJWVjeCw0KSwgJWVkeAlDICZkc3RbeHNpemUrMl0KKwl4b3IJJWVjeCwgJWVjeAorCisJbW92bAklZWR4LCBWQVJfRFNUX1NUT1AJQyAmZHN0W3hzaXplKzJdCisJY21wbAklZWJwLCAlZWF4CQlDIGhpZ2ggY21wIGRpdmlzb3IKKworCWNtb3ZjKAklZWF4LCAlZWRpKQkJQyBoaWdoIGlzIGNhcnJ5IGlmIGhpZ2g8ZGl2aXNvcgorCisJY21vdm5jKAklZWF4LCAlZWN4KQkJQyAwIGlmIHNraXAgZGl2LCBzcmMgaGlnaCBpZiBub3QKKwkJCQkJQyAodGhlIGxhdHRlciBpbiBjYXNlIHNyYz09ZHN0KQorCisJbW92bAklZWN4LCAtMTIoJWVkeCwlZWJ4LDQpCUMgZHN0IGhpZ2ggbGltYgorCisJc2JibAkkMCwgJWVieAkJQyBza2lwIG9uZSBkaXZpc2lvbiBpZiBoaWdoPGRpdmlzb3IKKwltb3ZsCVBBUkFNX1BSRUlOVl9TSElGVCwgJWVjeAorCisJbGVhbAktOCglZWR4LCVlYngsNCksICVlZHgJQyAmZHN0W3hzaXplK3NpemVdCisJbW92bAkkMzIsICVlYXgKKworCW1vdmwJJWVkeCwgVkFSX0RTVAkJQyAmZHN0W3hzaXplK3NpemVdCisKKwlzaGxsCSVjbCwgJWVicAkJQyBkIG5vcm1hbGl6ZWQKKwlzdWJsCSVlY3gsICVlYXgKKwltb3ZsCSVlY3gsIFZBUl9OT1JNCisKKwltb3ZkCSVlYXgsICVtbTcJCUMgcnNoaWZ0CisJbW92bAlQQVJBTV9QUkVJTlZfSU5WRVJTRSwgJWVheAorCWptcAlMKHN0YXJ0X3ByZWludikKKworRVBJTE9HVUUoKQorCisKKworCUFMSUdOKDE2KQorCitQUk9MT0dVRShtcG5fZGl2cmVtXzFjKQorZGVmbGl0KGBGUkFNRScsMCkKKwltb3ZsCVBBUkFNX0NBUlJZLCAlZWR4CisKKwltb3ZsCVBBUkFNX1NJWkUsICVlY3gKKwlzdWJsCSRTVEFDS19TUEFDRSwgJWVzcAorZGVmbGl0KGBGUkFNRScsU1RBQ0tfU1BBQ0UpCisKKwltb3ZsCSVlYngsIFNBVkVfRUJYCisJbW92bAlQQVJBTV9YU0laRSwgJWVieAorCisJbW92bAklZWRpLCBTQVZFX0VESQorCW1vdmwJUEFSQU1fRFNULCAlZWRpCisKKwltb3ZsCSVlYnAsIFNBVkVfRUJQCisJbW92bAlQQVJBTV9ESVZJU09SLCAlZWJwCisKKwltb3ZsCSVlc2ksIFNBVkVfRVNJCisJbW92bAlQQVJBTV9TUkMsICVlc2kKKworCWxlYWwJLTQoJWVkaSwlZWJ4LDQpLCAlZWRpCisJam1wCUwoc3RhcnRfMWMpCisKK0VQSUxPR1VFKCkKKworCisJQyBvZmZzZXQgMHgzMSwgY2xvc2UgZW5vdWdoIHRvIGFsaWduZWQKK1BST0xPR1VFKG1wbl9kaXZyZW1fMSkKK2RlZmxpdChgRlJBTUUnLDApCisKKwltb3ZsCVBBUkFNX1NJWkUsICVlY3gKKwltb3ZsCSQwLCAlZWR4CQlDIGluaXRpYWwgY2FycnkgKGlmIGNhbid0IHNraXAgYSBkaXYpCisJc3VibAkkU1RBQ0tfU1BBQ0UsICVlc3AKK2RlZmxpdChgRlJBTUUnLFNUQUNLX1NQQUNFKQorCisJbW92bAklZWJwLCBTQVZFX0VCUAorCW1vdmwJUEFSQU1fRElWSVNPUiwgJWVicAorCisJbW92bAklZWJ4LCBTQVZFX0VCWAorCW1vdmwJUEFSQU1fWFNJWkUsICVlYngKKworCW1vdmwJJWVzaSwgU0FWRV9FU0kKKwltb3ZsCVBBUkFNX1NSQywgJWVzaQorCW9ybAklZWN4LCAlZWN4CQlDIHNpemUKKworCW1vdmwJJWVkaSwgU0FWRV9FREkKKwltb3ZsCVBBUkFNX0RTVCwgJWVkaQorCisJbGVhbAktNCglZWRpLCVlYngsNCksICVlZGkJQyAmZHN0W3hzaXplLTFdCisJanoJTChub19za2lwX2RpdikJCUMgaWYgc2l6ZT09MAorCisJbW92bAktNCglZXNpLCVlY3gsNCksICVlYXgJQyBzcmMgaGlnaCBsaW1iCisJeG9ybAklZXNpLCAlZXNpCisJY21wbAklZWJwLCAlZWF4CQlDIGhpZ2ggY21wIGRpdmlzb3IKKworCWNtb3ZjKAklZWF4LCAlZWR4KQkJQyBoaWdoIGlzIGNhcnJ5IGlmIGhpZ2g8ZGl2aXNvcgorCisJY21vdm5jKAklZWF4LCAlZXNpKQkJQyAwIGlmIHNraXAgZGl2LCBzcmMgaGlnaCBpZiBub3QKKwkJCQkJQyAodGhlIGxhdHRlciBpbiBjYXNlIHNyYz09ZHN0KQorCisJbW92bAklZXNpLCAoJWVkaSwlZWN4LDQpCUMgZHN0IGhpZ2ggbGltYgorCisJc2JibAkkMCwgJWVjeAkJQyBzaXplLTEgaWYgaGlnaDxkaXZpc29yCisJbW92bAlQQVJBTV9TUkMsICVlc2kJCUMgcmVsb2FkCitMKG5vX3NraXBfZGl2KToKKworCitMKHN0YXJ0XzFjKToKKwlDIGVheAorCUMgZWJ4CXhzaXplCisJQyBlY3gJc2l6ZQorCUMgZWR4CWNhcnJ5CisJQyBlc2kJc3JjCisJQyBlZGkJJmRzdFt4c2l6ZS0xXQorCUMgZWJwCWRpdmlzb3IKKworCWxlYWwJKCVlYngsJWVjeCksICVlYXgJQyBzaXplK3hzaXplCisJY21wbAkkTVVMX1RIUkVTSE9MRCwgJWVheAorCWphZQlMKG11bF9ieV9pbnZlcnNlKQorCisJb3JsCSVlY3gsICVlY3gKKwlqeglMKGRpdmlkZV9ub19pbnRlZ2VyKQorCitMKGRpdmlkZV9pbnRlZ2VyKToKKwlDIGVheAlzY3JhdGNoIChxdW90aWVudCkKKwlDIGVieAl4c2l6ZQorCUMgZWN4CWNvdW50ZXIKKwlDIGVkeAlzY3JhdGNoIChyZW1haW5kZXIpCisJQyBlc2kJc3JjCisJQyBlZGkJJmRzdFt4c2l6ZS0xXQorCUMgZWJwCWRpdmlzb3IKKworCW1vdmwJLTQoJWVzaSwlZWN4LDQpLCAlZWF4CisKKwlkaXZsCSVlYnAKKworCW1vdmwJJWVheCwgKCVlZGksJWVjeCw0KQorCWRlY2wJJWVjeAorCWpueglMKGRpdmlkZV9pbnRlZ2VyKQorCisKK0woZGl2aWRlX25vX2ludGVnZXIpOgorCW1vdmwJUEFSQU1fRFNULCAlZWRpCisJb3JsCSVlYngsICVlYngKKwlqbnoJTChkaXZpZGVfZnJhY3Rpb24pCisKK0woZGl2aWRlX2RvbmUpOgorCW1vdmwJU0FWRV9FU0ksICVlc2kKKworCW1vdmwJU0FWRV9FREksICVlZGkKKworCW1vdmwJU0FWRV9FQlgsICVlYngKKwltb3ZsCSVlZHgsICVlYXgKKworCW1vdmwJU0FWRV9FQlAsICVlYnAKKwlhZGRsCSRTVEFDS19TUEFDRSwgJWVzcAorCisJcmV0CisKKworTChkaXZpZGVfZnJhY3Rpb24pOgorCUMgZWF4CXNjcmF0Y2ggKHF1b3RpZW50KQorCUMgZWJ4CWNvdW50ZXIKKwlDIGVjeAorCUMgZWR4CXNjcmF0Y2ggKHJlbWFpbmRlcikKKwlDIGVzaQorCUMgZWRpCWRzdAorCUMgZWJwCWRpdmlzb3IKKworCW1vdmwJJDAsICVlYXgKKworCWRpdmwJJWVicAorCisJbW92bAklZWF4LCAtNCglZWRpLCVlYngsNCkKKwlkZWNsCSVlYngKKwlqbnoJTChkaXZpZGVfZnJhY3Rpb24pCisKKwlqbXAJTChkaXZpZGVfZG9uZSkKKworCisKK0MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTChtdWxfYnlfaW52ZXJzZSk6CisJQyBlYXgKKwlDIGVieAl4c2l6ZQorCUMgZWN4CXNpemUKKwlDIGVkeAljYXJyeQorCUMgZXNpCXNyYworCUMgZWRpCSZkc3RbeHNpemUtMV0KKwlDIGVicAlkaXZpc29yCisKKwlsZWFsCTEyKCVlZGkpLCAlZWJ4CQlDICZkc3RbeHNpemUrMl0sIGxvb3AgZHN0IHN0b3AKKworCW1vdmwJJWVieCwgVkFSX0RTVF9TVE9QCisJbGVhbAk0KCVlZGksJWVjeCw0KSwgJWVkaQlDICZkc3RbeHNpemUrc2l6ZV0KKworCW1vdmwJJWVkaSwgVkFSX0RTVAorCW1vdmwJJWVjeCwgJWVieAkJQyBzaXplCisKKwlic3JsCSVlYnAsICVlY3gJCUMgMzEtbAorCW1vdmwJJWVkeCwgJWVkaQkJQyBjYXJyeQorCisJbGVhbAkxKCVlY3gpLCAlZWF4CQlDIDMyLWwKKwl4b3JsCSQzMSwgJWVjeAkJQyBsCisKKwltb3ZsCSVlY3gsIFZBUl9OT1JNCisJbW92bAkkLTEsICVlZHgKKworCXNobGwJJWNsLCAlZWJwCQlDIGQgbm9ybWFsaXplZAorCW1vdmQJJWVheCwgJW1tNworCisJbW92bAkkLTEsICVlYXgKKwlzdWJsCSVlYnAsICVlZHgJCUMgKGItZCktMSBnaXZpbmcgZWR4OmVheCA9IGIqKGItZCktMQorCisJZGl2bAklZWJwCQkJQyBmbG9vciAoYiooYi1kKS0xKSAvIGQKKworTChzdGFydF9wcmVpbnYpOgorCUMgZWF4CWludmVyc2UKKwlDIGVieAlzaXplCisJQyBlY3gJc2hpZnQKKwlDIGVkeAorCUMgZXNpCXNyYworCUMgZWRpCWNhcnJ5CisJQyBlYnAJZGl2aXNvcgorCUMKKwlDIG1tNwlyc2hpZnQKKworCW1vdmwJJWVheCwgVkFSX0lOVkVSU0UKKwlvcmwJJWVieCwgJWVieAkJQyBzaXplCisJbGVhbAktMTIoJWVzaSwlZWJ4LDQpLCAlZWF4CUMgJnNyY1tzaXplLTNdCisKKwltb3ZsCSVlYXgsIFZBUl9TUkMKKwlqeglMKHN0YXJ0X3plcm8pCisKKwltb3ZsCTgoJWVheCksICVlc2kJCUMgc3JjIGhpZ2ggbGltYgorCWNtcGwJJDEsICVlYngKKwlqeglMKHN0YXJ0X29uZSkKKworTChzdGFydF90d29fb3JfbW9yZSk6CisJbW92bAk0KCVlYXgpLCAlZWR4CQlDIHNyYyBzZWNvbmQgaGlnaGVzdCBsaW1iCisKKwlzaGxkbCgJJWNsLCAlZXNpLCAlZWRpKQlDIG4yID0gY2FycnksaGlnaCA8PCBsCisKKwlzaGxkbCgJJWNsLCAlZWR4LCAlZXNpKQlDIG4xMCA9IGhpZ2gsc2Vjb25kIDw8IGwKKworCWNtcGwJJDIsICVlYngKKwlqZQlMKGludGVnZXJfdHdvX2xlZnQpCisJam1wCUwoaW50ZWdlcl90b3ApCisKKworTChzdGFydF9vbmUpOgorCXNobGRsKAklY2wsICVlc2ksICVlZGkpCUMgbjIgPSBjYXJyeSxoaWdoIDw8IGwKKworCXNobGwJJWNsLCAlZXNpCQlDIG4xMCA9IGhpZ2ggPDwgbAorCWptcAlMKGludGVnZXJfb25lX2xlZnQpCisKKworTChzdGFydF96ZXJvKToKKwlDIENhbiBiZSBoZXJlIHdpdGggeHNpemU9PTAgaWYgbXBuX3ByZWludl9kaXZyZW1fMSBoYWQgc2l6ZT09MSBhbmQKKwlDIHNraXBwZWQgYSBkaXZpc2lvbi4KKworCXNobGwJJWNsLCAlZWRpCQlDIG4yID0gY2FycnkgPDwgbAorCW1vdmwJJWVkaSwgJWVheAkJQyByZXR1cm4gdmFsdWUgZm9yIHplcm9fZG9uZQorCWNtcGwJJDAsIFBBUkFNX1hTSVpFCisKKwlqZQlMKHplcm9fZG9uZSkKKwlqbXAJTChmcmFjdGlvbl9zb21lKQorCisKKworQyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQworQyBUaGlzIGxvb3AgcnVucyBhdCBhYm91dCAyNSBjeWNsZXMsIHdoaWNoIGlzIHByb2JhYmx5IHN1Yi1vcHRpbWFsLCBhbmQKK0MgY2VydGFpbmx5IG1vcmUgdGhhbiB0aGUgZGVwZW5kZW50IGNoYWluIHdvdWxkIHN1Z2dlc3QuICBBIGJldHRlciBsb29wLCBvcgorQyBhIGJldHRlciByb3VnaCBhbmFseXNpcyBvZiB3aGF0J3MgcG9zc2libGUsIHdvdWxkIGJlIHdlbGNvbWVkLgorQworQyBJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgdGhlIGZvbGxvd2luZyBzdWNjZXNzaXZlbHkgZGVwZW5kZW50CitDIG1pY3JvLW9wcyBzZWVtIHRvIGV4aXN0LgorQworQwkJICAgICAgIHVvcHMKK0MJCW4yK24xCTEgICAoYWRkbCkKK0MJCW11bAk1CitDCQlxMSsxCTMgICAoYWRkbC9hZGNsKQorQwkJbXVsCTUKK0MJCXN1YgkzICAgKHN1Ymwvc2JibCkKK0MJCWFkZGJhY2sJMiAgIChjbW92KQorQwkJICAgICAgIC0tLQorQwkJICAgICAgIDE5CitDCitDIExhY2sgb2YgcmVnaXN0ZXJzIGhpbmRlcnMgZXhwbGljaXQgc2NoZWR1bGluZyBhbmQgaXQgbWlnaHQgYmUgdGhhdCB0aGUKK0Mgbm9ybWFsIG91dCBvZiBvcmRlciBleGVjdXRpb24gaXNuJ3QgYWJsZSB0byBoaWRlIGVub3VnaCB1bmRlciB0aGUgbXVsCitDIGxhdGVuY2llcy4KK0MKK0MgVXNpbmcgc2FybC9uZWdsIHRvIHBpY2sgb3V0IG4xIGZvciB0aGUgbjIrbjEgc3RhZ2UgaXMgYSB0b3VjaCBmYXN0ZXIgdGhhbgorQyBjbW92IChhbmQgdGFrZXMgb25lIHVvcCBvZmYgdGhlIGRlcGVuZGVudCBjaGFpbikuICBBIHNhcmwvYW5kbC9hZGRsCitDIGNvbWJpbmF0aW9uIHdhcyB0cmllZCBmb3IgdGhlIGFkZGJhY2sgKGRlc3BpdGUgdGhlIGZhY3QgaXQgd291bGQgbGVuZ3RoZW4KK0MgdGhlIGRlcGVuZGVudCBjaGFpbikgYnV0IGZvdW5kIHRvIGJlIG5vIGZhc3Rlci4KKworCisJQUxJR04oMTYpCitMKGludGVnZXJfdG9wKToKKwlDIGVheAlzY3JhdGNoCisJQyBlYngJc2NyYXRjaCAobmFkaiwgcTEpCisJQyBlY3gJc2NyYXRjaCAoc3JjLCBkc3QpCisJQyBlZHgJc2NyYXRjaAorCUMgZXNpCW4xMAorCUMgZWRpCW4yCisJQyBlYnAJZAorCUMKKwlDIG1tMAlzY3JhdGNoIChzcmMgcXdvcmQpCisJQyBtbTcJcnNoaWZ0IGZvciBub3JtYWxpemF0aW9uCisKKwltb3ZsCSVlc2ksICVlYXgKKwltb3ZsCSVlYnAsICVlYngKKworCXNhcmwJJDMxLCAlZWF4ICAgICAgICAgIEMgLW4xCisJbW92bAlWQVJfU1JDLCAlZWN4CisKKwlhbmRsCSVlYXgsICVlYnggICAgICAgICBDIC1uMSAmIGQKKwluZWdsCSVlYXggICAgICAgICAgICAgICBDIG4xCisKKwlhZGRsCSVlc2ksICVlYnggICAgICAgICBDIG5hZGogPSBuMTAgKyAoLW4xICYgZCksIGlnbm9yaW5nIG92ZXJmbG93CisJYWRkbAklZWRpLCAlZWF4ICAgICAgICAgQyBuMituMQorCW1vdnEJKCVlY3gpLCAlbW0wICAgICAgIEMgbmV4dCBzcmMgbGltYiBhbmQgdGhlIG9uZSBiZWxvdyBpdAorCisJbXVsbAlWQVJfSU5WRVJTRSAgICAgICAgQyBtKihuMituMSkKKworCXN1YmwJJDQsICVlY3gKKworCW1vdmwJJWVjeCwgVkFSX1NSQworCisJQworCisJQworCisJYWRkbAklZWJ4LCAlZWF4ICAgICAgICAgQyBtKihuMituMSkgKyBuYWRqLCBsb3cgZ2l2aW5nIGNhcnJ5IGZsYWcKKwltb3ZsCSVlYnAsICVlYXgJICAgQyBkCisJbGVhbAkxKCVlZGkpLCAlZWJ4ICAgICAgQyBuMisxCisKKwlhZGNsCSVlZHgsICVlYnggICAgICAgICBDIDEgKyBoaWdoKG4yPDwzMiArIG0qKG4yK24xKSArIG5hZGopID0gcTErMQorCWp6CUwocTFfZmYpCisKKwltdWxsCSVlYngJCSAgIEMgKHExKzEpKmQKKworCW1vdmwJVkFSX0RTVCwgJWVjeAorCXBzcmxxCSVtbTcsICVtbTAKKworCUMKKworCUMKKworCUMKKworCXN1YmwJJWVheCwgJWVzaQorCW1vdmwJVkFSX0RTVF9TVE9QLCAlZWF4CisKKwlzYmJsCSVlZHgsICVlZGkJICAgQyBuIC0gKHExKzEpKmQKKwltb3ZsCSVlc2ksICVlZGkJICAgQyByZW1haW5kZXIgLT4gbjIKKwlsZWFsCSglZWJwLCVlc2kpLCAlZWR4CisKKwljbW92YygJJWVkeCwgJWVkaSkJICAgQyBuIC0gcTEqZCBpZiB1bmRlcmZsb3cgZnJvbSB1c2luZyBxMSsxCisJbW92ZAklbW0wLCAlZXNpCisKKwlzYmJsCSQwLCAlZWJ4CSAgIEMgcQorCXN1YmwJJDQsICVlY3gKKworCW1vdmwJJWVieCwgKCVlY3gpCisJY21wbAklZWF4LCAlZWN4CisKKwltb3ZsCSVlY3gsIFZBUl9EU1QKKwlqbmUJTChpbnRlZ2VyX3RvcCkKKworCitMKGludGVnZXJfbG9vcF9kb25lKToKKworCitDIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDCitDIEhlcmUsIGFuZCBpbiBpbnRlZ2VyX29uZV9sZWZ0IGJlbG93LCBhbiBzYmJsICQwIGlzIHVzZWQgcmF0aGVyIHRoYW4gYSBqegorQyBxMV9mZiBzcGVjaWFsIGNhc2UuICBUaGlzIG1ha2UgdGhlIGNvZGUgYSBiaXQgc21hbGxlciBhbmQgc2ltcGxlciwgYW5kCitDIGNvc3RzIG9ubHkgMiBjeWNsZXMgKGVhY2gpLgorCitMKGludGVnZXJfdHdvX2xlZnQpOgorCUMgZWF4CXNjcmF0Y2gKKwlDIGVieAlzY3JhdGNoIChuYWRqLCBxMSkKKwlDIGVjeAlzY3JhdGNoIChzcmMsIGRzdCkKKwlDIGVkeAlzY3JhdGNoCisJQyBlc2kJbjEwCisJQyBlZGkJbjIKKwlDIGVicAlkaXZpc29yCisJQworCUMgbW03CXJzaGlmdAorCisKKwltb3ZsCSVlc2ksICVlYXgKKwltb3ZsCSVlYnAsICVlYngKKworCXNhcmwJJDMxLCAlZWF4ICAgICAgICAgIEMgLW4xCisJbW92bAlQQVJBTV9TUkMsICVlY3gKKworCWFuZGwJJWVheCwgJWVieCAgICAgICAgIEMgLW4xICYgZAorCW5lZ2wJJWVheCAgICAgICAgICAgICAgIEMgbjEKKworCWFkZGwJJWVzaSwgJWVieCAgICAgICAgIEMgbmFkaiA9IG4xMCArICgtbjEgJiBkKSwgaWdub3Jpbmcgb3ZlcmZsb3cKKwlhZGRsCSVlZGksICVlYXggICAgICAgICBDIG4yK24xCisKKwltdWxsCVZBUl9JTlZFUlNFICAgICAgICBDIG0qKG4yK24xKQorCisJbW92ZAkoJWVjeCksICVtbTAJICAgQyBzcmMgbG93IGxpbWIKKworCW1vdmwJVkFSX0RTVF9TVE9QLCAlZWN4CisKKwlDCisKKwlDCisKKwlhZGRsCSVlYngsICVlYXggICAgICAgICBDIG0qKG4yK24xKSArIG5hZGosIGxvdyBnaXZpbmcgY2FycnkgZmxhZworCWxlYWwJMSglZWRpKSwgJWVieCAgICAgIEMgbjIrMQorCW1vdmwJJWVicCwgJWVheAkgICBDIGQKKworCWFkY2wJJWVkeCwgJWVieCAgICAgICAgIEMgMSArIGhpZ2gobjI8PDMyICsgbSoobjIrbjEpICsgbmFkaikgPSBxMSsxCisKKwlzYmJsCSQwLCAlZWJ4CisKKwltdWxsCSVlYngJCSAgIEMgKHExKzEpKmQKKworCXBzbGxxCSQzMiwgJW1tMAorCisJcHNybHEJJW1tNywgJW1tMAorCisJQworCisJQworCisJc3VibAklZWF4LCAlZXNpCisKKwlzYmJsCSVlZHgsICVlZGkJICAgQyBuIC0gKHExKzEpKmQKKwltb3ZsCSVlc2ksICVlZGkJICAgQyByZW1haW5kZXIgLT4gbjIKKwlsZWFsCSglZWJwLCVlc2kpLCAlZWR4CisKKwljbW92YygJJWVkeCwgJWVkaSkJICAgQyBuIC0gcTEqZCBpZiB1bmRlcmZsb3cgZnJvbSB1c2luZyBxMSsxCisJbW92ZAklbW0wLCAlZXNpCisKKwlzYmJsCSQwLCAlZWJ4CSAgIEMgcQorCisJbW92bAklZWJ4LCAtNCglZWN4KQorCisKK0MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0woaW50ZWdlcl9vbmVfbGVmdCk6CisJQyBlYXgJc2NyYXRjaAorCUMgZWJ4CXNjcmF0Y2ggKG5hZGosIHExKQorCUMgZWN4CXNjcmF0Y2ggKGRzdCkKKwlDIGVkeAlzY3JhdGNoCisJQyBlc2kJbjEwCisJQyBlZGkJbjIKKwlDIGVicAlkaXZpc29yCisJQworCUMgbW03CXJzaGlmdAorCisKKwltb3ZsCSVlc2ksICVlYXgKKwltb3ZsCSVlYnAsICVlYngKKworCXNhcmwJJDMxLCAlZWF4ICAgICAgICAgIEMgLW4xCisJbW92bAlWQVJfRFNUX1NUT1AsICVlY3gKKworCWFuZGwJJWVheCwgJWVieCAgICAgICAgIEMgLW4xICYgZAorCW5lZ2wJJWVheCAgICAgICAgICAgICAgIEMgbjEKKworCWFkZGwJJWVzaSwgJWVieCAgICAgICAgIEMgbmFkaiA9IG4xMCArICgtbjEgJiBkKSwgaWdub3Jpbmcgb3ZlcmZsb3cKKwlhZGRsCSVlZGksICVlYXggICAgICAgICBDIG4yK24xCisKKwltdWxsCVZBUl9JTlZFUlNFICAgICAgICBDIG0qKG4yK24xKQorCisJQworCisJQworCisJQworCisJYWRkbAklZWJ4LCAlZWF4ICAgICAgICAgQyBtKihuMituMSkgKyBuYWRqLCBsb3cgZ2l2aW5nIGNhcnJ5IGZsYWcKKwlsZWFsCTEoJWVkaSksICVlYnggICAgICBDIG4yKzEKKwltb3ZsCSVlYnAsICVlYXgJICAgQyBkCisKKwlDCisKKwlhZGNsCSVlZHgsICVlYnggICAgICAgICBDIDEgKyBoaWdoKG4yPDwzMiArIG0qKG4yK24xKSArIG5hZGopID0gcTErMQorCisJc2JibAkkMCwgJWVieCAgICAgICAgICAgQyBxMSBpZiBxMSsxIG92ZXJmbG93ZWQKKworCW11bGwJJWVieAorCisJQworCisJQworCisJQworCisJQworCisJc3VibAklZWF4LCAlZXNpCisJbW92bAlQQVJBTV9YU0laRSwgJWVheAorCisJc2JibAklZWR4LCAlZWRpCSAgIEMgbiAtIChxMSsxKSpkCisJbW92bAklZXNpLCAlZWRpCSAgIEMgcmVtYWluZGVyIC0+IG4yCisJbGVhbAkoJWVicCwlZXNpKSwgJWVkeAorCisJY21vdmMoCSVlZHgsICVlZGkpCSAgIEMgbiAtIHExKmQgaWYgdW5kZXJmbG93IGZyb20gdXNpbmcgcTErMQorCisJc2JibAkkMCwgJWVieAkgICBDIHEKKworCW1vdmwJJWVieCwgLTgoJWVjeCkKKwlzdWJsCSQ4LCAlZWN4CisKKworCisJb3JsCSVlYXgsICVlYXggICAgICAgICBDIHhzaXplCisJam56CUwoZnJhY3Rpb25fc29tZSkKKworCW1vdmwJJWVkaSwgJWVheAorTChmcmFjdGlvbl9kb25lKToKKwltb3ZsCVZBUl9OT1JNLCAlZWN4CitMKHplcm9fZG9uZSk6CisJbW92bAlTQVZFX0VCUCwgJWVicAorCisJbW92bAlTQVZFX0VESSwgJWVkaQorCisJbW92bAlTQVZFX0VTSSwgJWVzaQorCisJbW92bAlTQVZFX0VCWCwgJWVieAorCWFkZGwJJFNUQUNLX1NQQUNFLCAlZXNwCisKKwlzaHJsCSVjbCwgJWVheAorCWVtbXMKKworCXJldAorCisKK0MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0MKK0MgU3BlY2lhbCBjYXNlIGZvciBxMT0weEZGRkZGRkZGLCBnaXZpbmcgcT0weEZGRkZGRkZGIG1lYW5pbmcgdGhlIGxvdyBkd29yZAorQyBvZiBxKmQgaXMgc2ltcGx5IC1kIGFuZCB0aGUgcmVtYWluZGVyIG4tcSpkID0gbjEwK2QKKworTChxMV9mZik6CisJQyBlYXgJKGRpdmlzb3IpCisJQyBlYngJKHExKzEgPT0gMCkKKwlDIGVjeAorCUMgZWR4CisJQyBlc2kJbjEwCisJQyBlZGkJbjIKKwlDIGVicAlkaXZpc29yCisKKwltb3ZsCVZBUl9EU1QsICVlY3gKKwltb3ZsCVZBUl9EU1RfU1RPUCwgJWVkeAorCXN1YmwJJDQsICVlY3gKKworCW1vdmwJJWVjeCwgVkFSX0RTVAorCXBzcmxxCSVtbTcsICVtbTAKKwlsZWFsCSglZWJwLCVlc2kpLCAlZWRpCUMgbi1xKmQgcmVtYWluZGVyIC0+IG5leHQgbjIKKworCW1vdmwJJC0xLCAoJWVjeCkKKwltb3ZkCSVtbTAsICVlc2kJCUMgbmV4dCBuMTAKKworCWNtcGwJJWVjeCwgJWVkeAorCWpuZQlMKGludGVnZXJfdG9wKQorCisJam1wCUwoaW50ZWdlcl9sb29wX2RvbmUpCisKKworCitDIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDCitDIEluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCB0aGUgZm9sbG93aW5nIHN1Y2Nlc3NpdmVseSBkZXBlbmRlbnQKK0MgbWljcm8tb3BzIHNlZW0gdG8gZXhpc3QuCitDCitDCQkgICAgICAgdW9wcworQwkJbXVsCTUKK0MJCXExKzEJMSAgIChhZGRsKQorQwkJbXVsCTUKK0MJCXN1YgkzICAgKG5lZ2wvc2JibCkKK0MJCWFkZGJhY2sJMiAgIChjbW92KQorQwkJICAgICAgIC0tLQorQwkJICAgICAgIDE2CitDCitDIFRoZSBsb29wIGluIGZhY3QgcnVucyBhdCBhYm91dCAxNy41IGN5Y2xlcy4gIFVzaW5nIGEgc2FybC9hbmRsL2FkZGwgZm9yCitDIHRoZSBhZGRiYWNrIHdhcyBmb3VuZCB0byBiZSBhIHRvdWNoIHNsb3dlci4KKworCisJQUxJR04oMTYpCitMKGZyYWN0aW9uX3NvbWUpOgorCUMgZWF4CisJQyBlYngKKwlDIGVjeAorCUMgZWR4CisJQyBlc2kKKwlDIGVkaQljYXJyeQorCUMgZWJwCWRpdmlzb3IKKworCW1vdmwJUEFSQU1fRFNULCAlZXNpCisJbW92bAlWQVJfRFNUX1NUT1AsICVlY3gJQyAmZHN0W3hzaXplKzJdCisJbW92bAklZWRpLCAlZWF4CisKKwlzdWJsCSQ4LCAlZWN4CQlDICZkc3RbeHNpemVdCisKKworCUFMSUdOKDE2KQorTChmcmFjdGlvbl90b3ApOgorCUMgZWF4CW4yLCB0aGVuIHNjcmF0Y2gKKwlDIGVieAlzY3JhdGNoIChuYWRqLCBxMSkKKwlDIGVjeAlkc3QsIGRlY3JlbWVudGluZworCUMgZWR4CXNjcmF0Y2gKKwlDIGVzaQlkc3Qgc3RvcCBwb2ludAorCUMgZWRpCW4yCisJQyBlYnAJZGl2aXNvcgorCisJbXVsbAlWQVJfSU5WRVJTRQlDIG0qbjIKKworCW1vdmwJJWVicCwgJWVheAlDIGQKKwlzdWJsCSQ0LCAlZWN4CUMgZHN0CisJbGVhbAkxKCVlZGkpLCAlZWJ4CisKKwlDCisKKwlDCisKKwlDCisKKwlhZGRsCSVlZHgsICVlYngJQyAxICsgaGlnaChuMjw8MzIgKyBtKm4yKSA9IHExKzEKKworCW11bGwJJWVieAkJQyAocTErMSkqZAorCisJQworCisJQworCisJQworCisJQworCisJbmVnbAklZWF4CQlDIGxvdyBvZiBuIC0gKHExKzEpKmQKKworCXNiYmwJJWVkeCwgJWVkaQlDIGhpZ2ggb2YgbiAtIChxMSsxKSpkLCBjYXJpbmcgb25seSBhYm91dCBjYXJyeQorCWxlYWwJKCVlYnAsJWVheCksICVlZHgKKworCWNtb3ZjKAklZWR4LCAlZWF4KQlDIG4gLSBxMSpkIGlmIHVuZGVyZmxvdyBmcm9tIHVzaW5nIHExKzEKKworCXNiYmwJJDAsICVlYngJQyBxCisJbW92bAklZWF4LCAlZWRpCUMgcmVtYWluZGVyLT5uMgorCWNtcGwJJWVzaSwgJWVjeAorCisJbW92bAklZWJ4LCAoJWVjeCkJQyBwcmV2aW91cyBxCisJam5lCUwoZnJhY3Rpb25fdG9wKQorCisKKwlqbXAJTChmcmFjdGlvbl9kb25lKQorCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wNi9tbXgvZ21wLW1wYXJhbS5oIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcDYvbW14L2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjI5MDYxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcDYvbW14L2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDIxOCBAQAorLyogSW50ZWwgUDYvbW14IGdtcC1tcGFyYW0uaCAtLSBDb21waWxlci9tYWNoaW5lIHBhcmFtZXRlciBoZWFkZXIgZmlsZS4KKworQ29weXJpZ2h0IDE5OTEtMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgMzIKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgNAorCisKKy8qIE5PVEU6IEluIGEgZmF0IGJpbmFyeSBidWlsZCBTUVJfVE9PTTJfVEhSRVNIT0xEIGhlcmUgY2Fubm90IGJlIG1vcmUgdGhhbiB0aGUKKyAgIHZhbHVlIGluIG1wbi94ODYvcDYvZ21wLW1wYXJhbS5oLiAgVGhlIGxhdHRlciBpcyB1c2VkIGFzIGEgaGFyZCBsaW1pdCBpbgorICAgbXBuL3g4Ni9wNi9zcXJfYmFzZWNhc2UuYXNtLiAgKi8KKworCisvKiA4MDAgTUh6IFA2IG1vZGVsIDggKi8KKy8qIEdlbmVyYXRlZCBieSB0dW5ldXAuYywgMjAxNy0wMi0wMywgZ2NjIDQuOCAqLworCisjZGVmaW5lIE1PRF8xXzFQX01FVEhPRCAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIE1PRF8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICA0CisjZGVmaW5lIE1PRF8xTl9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA3CisjZGVmaW5lIE1PRF8xVV9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA3CisjZGVmaW5lIE1PRF8xXzFfVE9fTU9EXzFfMl9USFJFU0hPTEQgICAgICAgICA4CisjZGVmaW5lIE1PRF8xXzJfVE9fTU9EXzFfNF9USFJFU0hPTEQgICAgICAgIDMwCisjZGVmaW5lIFBSRUlOVl9NT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgIDE0CisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAgICAxICAvKiBuYXRpdmUgKi8KKyNkZWZpbmUgRElWX1FSXzFOX1BJMV9NRVRIT0QgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgRElWX1FSXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRElWX1FSXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWX1FSXzJfUEkyX1RIUkVTSE9MRCAgICAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWRVhBQ1RfMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAobmF0aXZlKSAqLworI2RlZmluZSBCTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgICAgICA2MgorCisjZGVmaW5lIERJVl8xX1ZTX01VTF8xX1BFUkNFTlQgICAgICAgICAgICAgMTY4CisKKyNkZWZpbmUgTVVMX1RPT00yMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgTVVMX1RPT00zM19USFJFU0hPTEQgICAgICAgICAgICAgICAgNzMKKyNkZWZpbmUgTVVMX1RPT000NF9USFJFU0hPTEQgICAgICAgICAgICAgICAxOTUKKyNkZWZpbmUgTVVMX1RPT002SF9USFJFU0hPTEQgICAgICAgICAgICAgICAyNTQKKyNkZWZpbmUgTVVMX1RPT004SF9USFJFU0hPTEQgICAgICAgICAgICAgICAzODEKKworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT000M19USFJFU0hPTEQgICAgICA4MQorI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT001M19USFJFU0hPTEQgICAgIDEyMgorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT001M19USFJFU0hPTEQgICAgICA3MworI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT002M19USFJFU0hPTEQgICAgICA4MAorI2RlZmluZSBNVUxfVE9PTTQzX1RPX1RPT001NF9USFJFU0hPTEQgICAgIDEwMAorCisjZGVmaW5lIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMzAJLyogV1JPTkcgdmFsdWUsIHNlZSBjb21tZW50IGFib3ZlICovCisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgICAgIDgzCisjZGVmaW5lIFNRUl9UT09NNF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTk2CisjZGVmaW5lIFNRUl9UT09NNl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjE0CisjZGVmaW5lIFNRUl9UT09NOF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMzgxCisKKyNkZWZpbmUgTVVMTUlEX1RPT000Ml9USFJFU0hPTEQgICAgICAgICAgICAgNTYKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxNgorI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxNworCisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgNDc2ICAvKiBrID0gNSAqLworI2RlZmluZSBNVUxfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgNDc2LCA1fSwgeyAgICAgMjEsIDZ9LCB7ICAgICAxMSwgNX0sIHsgICAgIDIzLCA2fSwgXAorICAgIHsgICAgIDIxLCA3fSwgeyAgICAgMTEsIDZ9LCB7ICAgICAyNSwgN30sIHsgICAgIDEzLCA2fSwgXAorICAgIHsgICAgIDI3LCA3fSwgeyAgICAgMTUsIDZ9LCB7ICAgICAzMSwgN30sIHsgICAgIDIxLCA4fSwgXAorICAgIHsgICAgIDExLCA3fSwgeyAgICAgMjcsIDh9LCB7ICAgICAxNSwgN30sIHsgICAgIDM1LCA4fSwgXAorICAgIHsgICAgIDE5LCA3fSwgeyAgICAgNDEsIDh9LCB7ICAgICAyMywgN30sIHsgICAgIDQ3LCA4fSwgXAorICAgIHsgICAgIDI3LCA5fSwgeyAgICAgMTUsIDh9LCB7ICAgICAzMSwgN30sIHsgICAgIDYzLCA4fSwgXAorICAgIHsgICAgIDM5LCA5fSwgeyAgICAgMjMsIDh9LCB7ICAgICA1MSwxMH0sIHsgICAgIDE1LCA5fSwgXAorICAgIHsgICAgIDMxLCA4fSwgeyAgICAgNjcsIDl9LCB7ICAgICAzOSwgOH0sIHsgICAgIDc5LCA5fSwgXAorICAgIHsgICAgIDQ3LCA4fSwgeyAgICAgOTUsIDl9LCB7ICAgICA1NSwxMH0sIHsgICAgIDMxLCA5fSwgXAorICAgIHsgICAgIDYzLCA4fSwgeyAgICAxMjcsIDl9LCB7ICAgICA3OSwxMH0sIHsgICAgIDQ3LCA5fSwgXAorICAgIHsgICAgIDk1LDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA2MywgOX0sIHsgICAgMTM1LDEwfSwgXAorICAgIHsgICAgIDc5LCA5fSwgeyAgICAxNjcsMTB9LCB7ICAgICA5NSwgOX0sIHsgICAgMTk5LDEwfSwgXAorICAgIHsgICAgMTExLDExfSwgeyAgICAgNjMsMTB9LCB7ICAgIDEyNywgOX0sIHsgICAgMjU1LCA4fSwgXAorICAgIHsgICAgNTExLDEwfSwgeyAgICAxNDMsIDl9LCB7ICAgIDI4NywgOH0sIHsgICAgNTc1LDEwfSwgXAorICAgIHsgICAgMTU5LDExfSwgeyAgICAgOTUsMTB9LCB7ICAgIDE5MSwgOX0sIHsgICAgMzgzLDEwfSwgXAorICAgIHsgICAgMjA3LDEyfSwgeyAgICAgNjMsMTF9LCB7ICAgIDEyNywxMH0sIHsgICAgMjU1LCA5fSwgXAorICAgIHsgICAgNTExLDEwfSwgeyAgICAyNzEsIDl9LCB7ICAgIDU0MywgOH0sIHsgICAxMDg3LDEwfSwgXAorICAgIHsgICAgMjg3LCA5fSwgeyAgICA1NzUsMTF9LCB7ICAgIDE1OSwxMH0sIHsgICAgMzE5LCA5fSwgXAorICAgIHsgICAgNjM5LDEwfSwgeyAgICAzNTEsIDl9LCB7ICAgIDcwMywxMX0sIHsgICAgMTkxLDEwfSwgXAorICAgIHsgICAgMzgzLCA5fSwgeyAgICA3NjcsMTB9LCB7ICAgIDQxNSwgOX0sIHsgICAgODMxLDExfSwgXAorICAgIHsgICAgMjIzLDEwfSwgeyAgICA0NDcsMTJ9LCB7ICAgIDEyNywxMX0sIHsgICAgMjU1LDEwfSwgXAorICAgIHsgICAgNTQzLCA5fSwgeyAgIDEwODcsMTF9LCB7ICAgIDI4NywxMH0sIHsgICAgNjA3LCA5fSwgXAorICAgIHsgICAxMjE1LDExfSwgeyAgICAzMTksMTB9LCB7ICAgIDY3MSwxMX0sIHsgICAgMzUxLDEwfSwgXAorICAgIHsgICAgNzAzLDEyfSwgeyAgICAxOTEsMTF9LCB7ICAgIDM4MywxMH0sIHsgICAgNzY3LDExfSwgXAorICAgIHsgICAgNDE1LDEwfSwgeyAgICA4MzEsMTF9LCB7ICAgIDQ0NywxM30sIHsgICAgMTI3LDEyfSwgXAorICAgIHsgICAgMjU1LDExfSwgeyAgICA1NDMsMTB9LCB7ICAgMTA4NywxMX0sIHsgICAgNjA3LDEwfSwgXAorICAgIHsgICAxMjE1LDEyfSwgeyAgICAzMTksMTF9LCB7ICAgIDY3MSwxMH0sIHsgICAxMzQzLDExfSwgXAorICAgIHsgICAgNzAzLDEwfSwgeyAgIDE0MDcsMTF9LCB7ICAgIDczNSwxMn0sIHsgICAgMzgzLDExfSwgXAorICAgIHsgICAgODMxLDEyfSwgeyAgICA0NDcsMTF9LCB7ICAgIDk1OSwxMH0sIHsgICAxOTE5LDEzfSwgXAorICAgIHsgICAgMjU1LDEyfSwgeyAgICA1MTEsMTF9LCB7ICAgMTA4NywxMn0sIHsgICAgNTc1LDExfSwgXAorICAgIHsgICAxMjE1LDEwfSwgeyAgIDI0MzEsMTJ9LCB7ICAgIDYzOSwxMX0sIHsgICAxMzQzLDEyfSwgXAorICAgIHsgICAgNzAzLDExfSwgeyAgIDE0NzEsMTN9LCB7ICAgIDM4MywxMn0sIHsgICAgNzY3LDExfSwgXAorICAgIHsgICAxNTM1LDEyfSwgeyAgICA4MzEsMTF9LCB7ICAgMTcyNywxMn0sIHsgICAgOTU5LDExfSwgXAorICAgIHsgICAxOTE5LDE0fSwgeyAgICAyNTUsMTN9LCB7ICAgIDUxMSwxMn0sIHsgICAxMjE1LDExfSwgXAorICAgIHsgICAyNDMxLDEzfSwgeyAgICA2MzksMTJ9LCB7ICAgMTQ3MSwxMX0sIHsgICAyOTQzLDEzfSwgXAorICAgIHsgICAgNzY3LDEyfSwgeyAgIDE3MjcsMTN9LCB7ICAgIDg5NSwxMn0sIHsgICAxOTE5LDExfSwgXAorICAgIHsgICAzODM5LDE0fSwgeyAgICA1MTEsMTN9LCB7ICAgMTAyMywxMn0sIHsgICAyMTExLDEzfSwgXAorICAgIHsgICAxMTUxLDEyfSwgeyAgIDI0MzEsMTN9LCB7ICAgMTI3OSwxMn0sIHsgICAyNTU5LDEzfSwgXAorICAgIHsgICAxNDA3LDEyfSwgeyAgIDI5NDMsMTR9LCB7ICAgIDc2NywxM30sIHsgICAxNjYzLDEyfSwgXAorICAgIHsgICAzMzI3LDEzfSwgeyAgIDE5MTksMTJ9LCB7ICAgMzgzOSwxNX0sIHsgIDMyNzY4LDE2fSB9CisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzX1NJWkUgMTYwCisjZGVmaW5lIE1VTF9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA3MDQwCisKKyNkZWZpbmUgU1FSX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICAzNzYgIC8qIGsgPSA1ICovCisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICAzNzYsIDV9LCB7ICAgICAyMSwgNn0sIHsgICAgIDExLCA1fSwgeyAgICAgMjMsIDZ9LCBcCisgICAgeyAgICAgMjEsIDd9LCB7ICAgICAxMSwgNn0sIHsgICAgIDI0LCA3fSwgeyAgICAgMTMsIDZ9LCBcCisgICAgeyAgICAgMjcsIDd9LCB7ICAgICAxNSwgNn0sIHsgICAgIDMxLCA3fSwgeyAgICAgMjEsIDh9LCBcCisgICAgeyAgICAgMTEsIDd9LCB7ICAgICAyNywgOH0sIHsgICAgIDE1LCA3fSwgeyAgICAgMzMsIDh9LCBcCisgICAgeyAgICAgMTksIDd9LCB7ICAgICAzOSwgOH0sIHsgICAgIDIzLCA3fSwgeyAgICAgNDcsIDh9LCBcCisgICAgeyAgICAgMjcsIDl9LCB7ICAgICAxNSwgOH0sIHsgICAgIDM5LCA5fSwgeyAgICAgMjMsIDh9LCBcCisgICAgeyAgICAgNTEsMTB9LCB7ICAgICAxNSwgOX0sIHsgICAgIDMxLCA4fSwgeyAgICAgNjcsIDl9LCBcCisgICAgeyAgICAgMzksIDh9LCB7ICAgICA3OSwgOX0sIHsgICAgIDQ3LCA4fSwgeyAgICAgOTUsIDl9LCBcCisgICAgeyAgICAgNTUsMTB9LCB7ICAgICAzMSwgOX0sIHsgICAgIDc5LDEwfSwgeyAgICAgNDcsIDl9LCBcCisgICAgeyAgICAgOTUsMTF9LCB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA5fSwgeyAgICAxMjcsIDh9LCBcCisgICAgeyAgICAyNTUsIDl9LCB7ICAgIDEzNSwxMH0sIHsgICAgIDc5LCA5fSwgeyAgICAxNjcsMTB9LCBcCisgICAgeyAgICAgOTUsIDl9LCB7ICAgIDE5MSwgOH0sIHsgICAgMzgzLDEwfSwgeyAgICAxMTEsMTF9LCBcCisgICAgeyAgICAgNjMsMTB9LCB7ICAgIDEyNywgOX0sIHsgICAgMjU1LCA4fSwgeyAgICA1MTEsIDl9LCBcCisgICAgeyAgICAyNzEsMTB9LCB7ICAgIDE0MywgOX0sIHsgICAgMjg3LCA4fSwgeyAgICA1NzUsIDl9LCBcCisgICAgeyAgICAzMDMsIDh9LCB7ICAgIDYwNywxMH0sIHsgICAgMTU5LCA5fSwgeyAgICAzMTksMTF9LCBcCisgICAgeyAgICAgOTUsMTB9LCB7ICAgIDE5MSwgOX0sIHsgICAgMzgzLDEwfSwgeyAgICAyMDcsMTJ9LCBcCisgICAgeyAgICAgNjMsMTF9LCB7ICAgIDEyNywxMH0sIHsgICAgMjU1LCA5fSwgeyAgICA1MTEsMTB9LCBcCisgICAgeyAgICAyNzEsIDl9LCB7ICAgIDU0MywxMH0sIHsgICAgMjg3LCA5fSwgeyAgICA1NzUsMTB9LCBcCisgICAgeyAgICAzMDMsMTF9LCB7ICAgIDE1OSwxMH0sIHsgICAgMzE5LCA5fSwgeyAgICA2MzksMTB9LCBcCisgICAgeyAgICAzNTEsIDl9LCB7ICAgIDcwMywxMX0sIHsgICAgMTkxLDEwfSwgeyAgICAzODMsIDl9LCBcCisgICAgeyAgICA3NjcsMTB9LCB7ICAgIDQxNSwgOX0sIHsgICAgODMxLDExfSwgeyAgICAyMjMsMTB9LCBcCisgICAgeyAgICA0NzksMTJ9LCB7ICAgIDEyNywxMX0sIHsgICAgMjU1LDEwfSwgeyAgICA1NDMsIDl9LCBcCisgICAgeyAgIDEwODcsMTF9LCB7ICAgIDI4NywxMH0sIHsgICAgNjA3LCA5fSwgeyAgIDEyMTUsMTF9LCBcCisgICAgeyAgICAzMTksMTB9LCB7ICAgIDY3MSwxMX0sIHsgICAgMzUxLDEwfSwgeyAgICA3MDMsMTJ9LCBcCisgICAgeyAgICAxOTEsMTF9LCB7ICAgIDM4MywxMH0sIHsgICAgNzY3LDExfSwgeyAgICA0MTUsMTB9LCBcCisgICAgeyAgICA4MzEsMTF9LCB7ICAgIDQ3OSwxM30sIHsgICAgMTI3LDEyfSwgeyAgICAyNTUsMTF9LCBcCisgICAgeyAgICA1NDMsMTB9LCB7ICAgMTA4NywxMX0sIHsgICAgNjA3LDEwfSwgeyAgIDEyMTUsMTJ9LCBcCisgICAgeyAgICAzMTksMTF9LCB7ICAgIDY3MSwxMH0sIHsgICAxMzQzLDExfSwgeyAgICA3MDMsMTB9LCBcCisgICAgeyAgIDE0MDcsMTF9LCB7ICAgIDczNSwxMn0sIHsgICAgMzgzLDExfSwgeyAgICA4MzEsMTJ9LCBcCisgICAgeyAgICA0NDcsMTF9LCB7ICAgIDk1OSwxMH0sIHsgICAxOTE5LDEzfSwgeyAgICAyNTUsMTJ9LCBcCisgICAgeyAgICA1MTEsMTF9LCB7ICAgMTA4NywxMn0sIHsgICAgNTc1LDExfSwgeyAgIDEyMTUsMTB9LCBcCisgICAgeyAgIDI0MzEsMTJ9LCB7ICAgIDYzOSwxMX0sIHsgICAxMzQzLDEyfSwgeyAgICA3MDMsMTF9LCBcCisgICAgeyAgIDE0MDcsMTN9LCB7ICAgIDM4MywxMn0sIHsgICAgODMxLDExfSwgeyAgIDE3MjcsMTJ9LCBcCisgICAgeyAgICA5NTksMTF9LCB7ICAgMTkxOSwxNH0sIHsgICAgMjU1LDEzfSwgeyAgICA1MTEsMTJ9LCBcCisgICAgeyAgIDEyMTUsMTF9LCB7ICAgMjQzMSwxM30sIHsgICAgNjM5LDEyfSwgeyAgIDE0NzEsMTF9LCBcCisgICAgeyAgIDI5NDMsMTN9LCB7ICAgIDc2NywxMn0sIHsgICAxNzI3LDEzfSwgeyAgICA4OTUsMTJ9LCBcCisgICAgeyAgIDE5MTksMTF9LCB7ICAgMzgzOSwxNH0sIHsgICAgNTExLDEzfSwgeyAgIDEwMjMsMTJ9LCBcCisgICAgeyAgIDIxMTEsMTN9LCB7ICAgMTE1MSwxMn0sIHsgICAyNDMxLDEzfSwgeyAgIDE0MDcsMTJ9LCBcCisgICAgeyAgIDI5NDMsMTR9LCB7ICAgIDc2NywxM30sIHsgICAxNTM1LDEyfSwgeyAgIDMwNzEsMTN9LCBcCisgICAgeyAgIDE2NjMsMTJ9LCB7ICAgMzQ1NSwxM30sIHsgICAxOTE5LDEyfSwgeyAgIDM4MzksMTV9LCBcCisgICAgeyAgMzI3NjgsMTZ9IH0KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTNfU0laRSAxNjEKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDM3MTIKKworI2RlZmluZSBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDYyCisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgIDEzNDYzCisjZGVmaW5lIFNRUkxPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgU1FSTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAxNzcKKyNkZWZpbmUgU1FSTE9fU1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDg5MzcKKworI2RlZmluZSBEQ19ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA4MAorI2RlZmluZSBEQ19ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgIDI0MAorI2RlZmluZSBEQ19CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA3NgorI2RlZmluZSBEQ19CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE2NgorCisjZGVmaW5lIElOVl9NVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgIDQyCisjZGVmaW5lIElOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAgMjYyCisjZGVmaW5lIElOVl9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMjUwCisKKyNkZWZpbmUgQklOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAyNzIKKyNkZWZpbmUgUkVEQ18xX1RPX1JFRENfTl9USFJFU0hPTEQgICAgICAgICAgNzIKKworI2RlZmluZSBNVV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTQ5OQorI2RlZmluZSBNVV9ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgMTQ3MAorI2RlZmluZSBNVVBJX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgIDEyNAorI2RlZmluZSBNVV9CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTE0MgorI2RlZmluZSBNVV9CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTM0MQorCisjZGVmaW5lIFBPV01fU0VDX1RBQkxFICAxLDE2LDk2LDQxNiwxMjU5CisKKyNkZWZpbmUgR0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICAgMjcKKyNkZWZpbmUgU0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAyNzAKKyNkZWZpbmUgU0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgIDEwODQKKworI2RlZmluZSBGQUNfRFNDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDE5NAorI2RlZmluZSBGQUNfT0REX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAyNQorCisjZGVmaW5lIE1BVFJJWDIyX1NUUkFTU0VOX1RIUkVTSE9MRCAgICAgICAgIDE2CisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAgMTI0CisjZGVmaW5lIEhHQ0RfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTUyCisjZGVmaW5lIEhHQ0RfUkVEVUNFX1RIUkVTSE9MRCAgICAgICAgICAgICAzMDE0CisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgNDc0CisjZGVmaW5lIEdDREVYVF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMzIxCisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAgICAxCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wNi9tbXgvbHNoaWZ0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3A2L21teC9sc2hpZnQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlYmQxYzAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wNi9tbXgvbHNoaWZ0LmFzbQpAQCAtMCwwICsxLDM4IEBACitkbmwgIEludGVsIFBlbnRpdW0tSUkgbXBuX2xzaGlmdCAtLSBtcG4gbGVmdCBzaGlmdC4KKworZG5sICBDb3B5cmlnaHQgMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKK2RubCAgVGhlIFA1NSBjb2RlIHJ1bnMgd2VsbCBvbiBQLUlJL0lJSSwgYnV0IGNvdWxkIHN0YW5kIHNvbWUgbWlub3IgdHdlYWtzCitkbmwgIGF0IHNvbWUgc3RhZ2UgcHJvYmFibHkuCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2xzaGlmdCkKK2luY2x1ZGVfbXBuKGB4ODYvcGVudGl1bS9tbXgvbHNoaWZ0LmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wNi9tbXgvcG9waGFtLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3A2L21teC9wb3BoYW0uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMzQwZTQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wNi9tbXgvcG9waGFtLmFzbQpAQCAtMCwwICsxLDM5IEBACitkbmwgIEludGVsIFBlbnRpdW0tSUkgbXBuX3BvcGNvdW50LCBtcG5faGFtZGlzdCAtLSBwb3B1bGF0aW9uIGNvdW50IGFuZAorZG5sICBoYW1taW5nIGRpc3RhbmNlLgorCitkbmwgIENvcHlyaWdodCAyMDAwLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQyBQNk1NWDogcG9wY291bnQgMTEgY3ljbGVzL2xpbWIgKGFwcHJveCksIGhhbWRpc3QgMTEuNSBjeWNsZXMvbGltYiAoYXBwcm94KQorCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX3BvcGNvdW50IG1wbl9oYW1kaXN0KQoraW5jbHVkZV9tcG4oYHg4Ni9rNi9tbXgvcG9waGFtLmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wNi9tbXgvcnNoaWZ0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3A2L21teC9yc2hpZnQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YWExOTAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wNi9tbXgvcnNoaWZ0LmFzbQpAQCAtMCwwICsxLDM4IEBACitkbmwgIEludGVsIFBlbnRpdW0tSUkgbXBuX3JzaGlmdCAtLSBtcG4gbGVmdCBzaGlmdC4KKworZG5sICBDb3B5cmlnaHQgMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKK2RubCAgVGhlIFA1NSBjb2RlIHJ1bnMgd2VsbCBvbiBQLUlJL0lJSSwgYnV0IGNvdWxkIHN0YW5kIHNvbWUgbWlub3IgdHdlYWtzCitkbmwgIGF0IHNvbWUgc3RhZ2UgcHJvYmFibHkuCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX3JzaGlmdCkKK2luY2x1ZGVfbXBuKGB4ODYvcGVudGl1bS9tbXgvcnNoaWZ0LmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wNi9tb2RfMzRsc3ViMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wNi9tb2RfMzRsc3ViMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg4YWI1ZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3A2L21vZF8zNGxzdWIxLmFzbQpAQCAtMCwwICsxLDE5MCBAQAorZG5sICBJbnRlbCBQNiBtcG5fbW9kXzM0bHN1YjEgLS0gcmVtYWluZGVyIG1vZHVsbyAyXjI0LTEuCisKK2RubCAgQ29weXJpZ2h0IDIwMDAtMjAwMiwgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MgUDY6IDIuMCBjeWNsZXMvbGltYgorCitDIFRPRE8KK0MgIEV4cGVyaW1lbnRzIHdpdGggbW9yZSB1bnJvbGxpbmcgaW5kaWNhdGUgdGhhdCAxLjUgYy9sIGlzIHBvc3NpYmxlIG9uIFA2LTEzCitDICB3aXRoIHRoZSBjdXJyZW50IGNhcnJ5IGhhbmRsaW5nIHNjaGVtZS4KKworQyBtcF9saW1iX3QgbXBuX21vZF8zNGxzdWIxIChtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSkKK0MKK0MgR3JvdXBzIG9mIHRocmVlIGxpbWJzIGFyZSBoYW5kbGVkLCB3aXRoIGNhcnJ5IGJpdHMgZnJvbSAwbW9kMyBpbnRvIDFtb2QzCitDIGludG8gMm1vZDMsIGJ1dCBhdCB0aGF0IHBvaW50IGdvaW5nIGludG8gYSBzZXBhcmF0ZSBjYXJyaWVzIHRvdGFsIHNvIHdlCitDIGRvbid0IGtlZXAgdGhlIGNhcnJ5IGZsYWcgbGl2ZSBhY3Jvc3MgdGhlIGxvb3AgY29udHJvbC4gIEF2b2lkaW5nIGRlY2wKK0MgbGV0cyB1cyBnZXQgdG8gMi4wIGMvbCwgYXMgY29tcGFyZWQgdG8gdGhlIGdlbmVyaWMgeDg2IGNvZGUgYXQgMy42Ni4KK0MKKworZGVmZnJhbWUoUEFSQU1fU0laRSwgOCkKK2RlZmZyYW1lKFBBUkFNX1NSQywgIDQpCisKK2RubCAgcmUtdXNlIHBhcmFtZXRlciBzcGFjZQorZGVmaW5lKFNBVkVfRUJYLCBgUEFSQU1fU0laRScpCitkZWZpbmUoU0FWRV9FU0ksIGBQQVJBTV9TUkMnKQorCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX21vZF8zNGxzdWIxKQorZGVmbGl0KGBGUkFNRScsMCkKKworCW1vdmwJUEFSQU1fU0laRSwgJWVjeAorCW1vdmwJUEFSQU1fU1JDLCAlZWR4CisKKwlzdWJsCSQyLCAlZWN4CQlDIHNpemUtMgorCW1vdmwJKCVlZHgpLCAlZWF4CQlDIHNyY1swXQorCWphCUwodGhyZWVfb3JfbW9yZSkKKwlqYglMKG9uZSkKKworCUMgc2l6ZT09MgorCisJbW92bAk0KCVlZHgpLCAlZWN4CQlDIHNyY1sxXQorCisJbW92bAklZWF4LCAlZWR4CQlDIHNyY1swXQorCXNocmwJJDI0LCAlZWF4CQlDIHNyY1swXSBoaWdoCisKKwlhbmRsCSQweEZGRkZGRiwgJWVkeAkJQyBzcmNbMF0gbG93CisKKwlhZGRsCSVlZHgsICVlYXgKKwltb3ZsCSVlY3gsICVlZHgJCUMgc3JjWzFdCisJc2hybAkkMTYsICVlY3gJCUMgc3JjWzFdIGhpZ2gKKworCWFuZGwJJDB4RkZGRiwgJWVkeAorCWFkZGwJJWVjeCwgJWVheAorCisJc2hsbAkkOCwgJWVkeAkJQyBzcmNbMV0gbG93CisKKwlhZGRsCSVlZHgsICVlYXgKK0wob25lKToKKwlyZXQKKworCitMKHRocmVlX29yX21vcmUpOgorCUMgZWF4CXNyY1swXSwgaW5pdGlhbCBhY2MgMG1vZDMKKwlDIGVieAorCUMgZWN4CXNpemUtMgorCUMgZWR4CXNyYworCUMgZXNpCisJQyBlZGkKKwlDIGVicAorCisJbW92bAklZWJ4LCBTQVZFX0VCWAorCW1vdmwJNCglZWR4KSwgJWVieAkJQyBzcmNbMV0sIGluaXRpYWwgMW1vZDMKKwlzdWJsCSQzLCAlZWN4CQlDIHNpemUtNQorCisJbW92bAklZXNpLCBTQVZFX0VTSQorCW1vdmwJOCglZWR4KSwgJWVzaQkJQyBzcmNbMl0sIGluaXRpYWwgMm1vZDMKKworCXB1c2hsCSVlZGkJRlJBTUVfcHVzaGwoKQorCW1vdmwJJDAsICVlZGkJCUMgaW5pdGlhbCBjYXJyaWVzIDBtb2QzCisJam5nCUwoZG9uZSkJCQlDIGlmIHNpemUgPCA2CisKKworTCh0b3ApOgorCUMgZWF4CWFjYyAwbW9kMworCUMgZWJ4CWFjYyAxbW9kMworCUMgZWN4CWNvdW50ZXIsIGxpbWJzCisJQyBlZHgJc3JjCisJQyBlc2kJYWNjIDJtb2QzCisJQyBlZGkJY2FycnlzIGludG8gMG1vZDMKKwlDIGVicAorCisJYWRkbAkxMiglZWR4KSwgJWVheAorCWFkY2wJMTYoJWVkeCksICVlYngKKwlhZGNsCTIwKCVlZHgpLCAlZXNpCisJbGVhbAkxMiglZWR4KSwgJWVkeAorCWFkY2wJJDAsICVlZGkKKworCXN1YmwJJDMsICVlY3gKKwlqZwlMKHRvcCkJCQlDIGF0IGxlYXN0IDMgbW9yZSB0byBwcm9jZXNzCisKKworTChkb25lKToKKwlDIGVjeCBpcyAtMiwgLTEgb3IgMCByZXByZXNlbnRpbmcgMCwgMSBvciAyIG1vcmUgbGltYnMgcmVzcGVjdGl2ZWx5CisJY21wbAkkLTEsICVlY3gKKwlqbAlMKGRvbmVfMCkJCUMgaWYgLTIsIG1lYW5pbmcgMCBtb3JlIGxpbWJzCisKKwlDIDEgb3IgMiBtb3JlIGxpbWJzCisJbW92bAkkMCwgJWVjeAorCWplCUwoZG9uZV8xKQkJQyBpZiAtMSwgbWVhbmluZyAxIG1vcmUgbGltYiBvbmx5CisJbW92bAkxNiglZWR4KSwgJWVjeAorTChkb25lXzEpOgorCWFkZGwJMTIoJWVkeCksICVlYXgJCUMgMG1vZDMKKwlhZGNsCSVlY3gsICVlYngJCUMgMW1vZDMKKwlhZGNsCSQwLCAlZXNpCQlDIDJtb2QzCisJYWRjbAkkMCwgJWVkaQkJQyBjYXJyaWVzIDBtb2QzCisKK0woZG9uZV8wKToKKwlDIGVheAlhY2MgMG1vZDMKKwlDIGVieAlhY2MgMW1vZDMKKwlDIGVjeAorCUMgZWR4CisJQyBlc2kJYWNjIDJtb2QzCisJQyBlZGkJY2FycmllcyAwbW9kMworCUMgZWJwCisKKwltb3ZsCSVlYXgsICVlY3gJCUMgMG1vZDMKKwlzaHJsCSQyNCwgJWVheAkJQyAwbW9kMyBoaWdoIGluaXRpYWwgdG90YWwKKworCWFuZGwJJDB4RkZGRkZGLCAlZWN4CQlDIDBtb2QzIGxvdworCW1vdmwJJWVkaSwgJWVkeAkJQyBjYXJyaWVzCisJc2hybAkkMjQsICVlZGkJCUMgY2FycmllcyBoaWdoCisKKwlhZGRsCSVlY3gsICVlYXgJCUMgYWRkIDBtb2QzIGxvdworCWFuZGwJJDB4RkZGRkZGLCAlZWR4CQlDIGNhcnJpZXMgMG1vZDMgbG93CisJbW92bAklZWJ4LCAlZWN4CQlDIDFtb2QzCisKKwlzaHJsCSQxNiwgJWVieAkJQyAxbW9kMyBoaWdoCisJYWRkbAklZWRpLCAlZWF4CQlDIGFkZCBjYXJyaWVzIGhpZ2gKKwlhZGRsCSVlZHgsICVlYXgJCUMgYWRkIGNhcnJpZXMgMG1vZDMgbG93CisKKwlhbmRsCSQweEZGRkYsICVlY3gJCUMgMW1vZDMgbG93IG1hc2sKKwlhZGRsCSVlYngsICVlYXgJCUMgYWRkIDFtb2QzIGhpZ2gKKwltb3ZsCVNBVkVfRUJYLCAlZWJ4CisKKwlzaGxsCSQ4LCAlZWN4CQlDIDFtb2QzIGxvdworCW1vdmwJJWVzaSwgJWVkeAkJQyAybW9kMworCXBvcGwJJWVkaQlGUkFNRV9wb3BsKCkKKworCXNocmwJJDgsICVlc2kJCUMgMm1vZDMgaGlnaAorCWFuZGwJJDB4RkYsICVlZHgJCUMgMm1vZDMgbG93IG1hc2sKKwlhZGRsCSVlY3gsICVlYXgJCUMgYWRkIDFtb2QzIGxvdworCisJc2hsbAkkMTYsICVlZHgJCUMgMm1vZDMgbG93CisJYWRkbAklZXNpLCAlZWF4CQlDIGFkZCAybW9kMyBoaWdoCisJbW92bAlTQVZFX0VTSSwgJWVzaQorCisJYWRkbAklZWR4LCAlZWF4CQlDIGFkZCAybW9kMyBsb3cKKworCXJldAorCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wNi9tb2RlMW8uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcDYvbW9kZTFvLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDgzMTk1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcDYvbW9kZTFvLmFzbQpAQCAtMCwwICsxLDE3MCBAQAorZG5sICBJbnRlbCBQNiBtcG5fbW9kZXhhY3RfMV9vZGQgLS0gZXhhY3QgZGl2aXNpb24gc3R5bGUgcmVtYWluZGVyLgorCitkbmwgIENvcHlyaWdodCAyMDAwLTIwMDIsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDIFA2OiAxMC4wIGN5Y2xlcy9saW1iCisKKworQyBtcF9saW1iX3QgbXBuX21vZGV4YWN0XzFfb2RkIChtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSwKK0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBfbGltYl90IGRpdmlzb3IpOworQyBtcF9saW1iX3QgbXBuX21vZGV4YWN0XzFjX29kZCAobXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUsCitDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcF9saW1iX3QgZGl2aXNvciwgbXBfbGltYl90IGNhcnJ5KTsKK0MKK0MgSXQncyBub3Qgd29ydGggc2tpcHBpbmcgYSBzdGVwIGF0IHRoZSBlbmQgd2hlbiBoaWdoPGRpdmlzb3Igc2luY2UgdGhlIG1haW4KK0MgbG9vcCBpcyBvbmx5IDEwIGN5Y2xlcy4KKworZGVmZnJhbWUoUEFSQU1fQ0FSUlksICAxNikKK2RlZmZyYW1lKFBBUkFNX0RJVklTT1IsMTIpCitkZWZmcmFtZShQQVJBTV9TSVpFLCAgIDgpCitkZWZmcmFtZShQQVJBTV9TUkMsICAgIDQpCisKK2RubCAgTm90IGVub3VnaCByb29tIHVuZGVyIG1vZGV4YWN0XzEgdG8gbWFrZSB0aGVzZSByZS11c2UgdGhlIHBhcmFtZXRlcgorZG5sICBzcGFjZSwgdW5mb3J0dW5hdGVseS4KK2RlZmZyYW1lKFNBVkVfRUJYLCAgICAgLTQpCitkZWZmcmFtZShTQVZFX0VTSSwgICAgIC04KQorZGVmZnJhbWUoU0FWRV9FREksICAgIC0xMikKK2RlZmxpdChTVEFDS19TUEFDRSwgMTIpCisKKwlURVhUCisKKwlBTElHTigxNikKK1BST0xPR1VFKG1wbl9tb2RleGFjdF8xY19vZGQpCitkZWZsaXQoYEZSQU1FJywwKQorCisJbW92bAlQQVJBTV9DQVJSWSwgJWVjeAorCWptcAlMKHN0YXJ0XzFjKQorCitFUElMT0dVRSgpCisKKwlBTElHTigxNikKK1BST0xPR1VFKG1wbl9tb2RleGFjdF8xX29kZCkKK2RlZmxpdChgRlJBTUUnLDApCisKKwl4b3JsCSVlY3gsICVlY3gKK0woc3RhcnRfMWMpOgorCW1vdmwJUEFSQU1fRElWSVNPUiwgJWVheAorCisJc3VibAkkU1RBQ0tfU1BBQ0UsICVlc3AJRlJBTUVfc3VibF9lc3AoU1RBQ0tfU1BBQ0UpCisKKwltb3ZsCSVlc2ksIFNBVkVfRVNJCisJbW92bAlQQVJBTV9TUkMsICVlc2kKKworCXNocmwJJWVheAkJCUMgZC8yCisJbW92bAklZWRpLCBTQVZFX0VESQorCisJYW5kbAkkMTI3LCAlZWF4CisKK2lmZGVmKGBQSUMnLGAKKwlMRUEoCWJpbnZlcnRfbGltYl90YWJsZSwgJWVkaSkKKwltb3Z6YmwJKCVlYXgsJWVkaSksICVlZGkJCUMgaW52IDggYml0cworJyxgCisJbW92emJsCWJpbnZlcnRfbGltYl90YWJsZSglZWF4KSwgJWVkaQlDIGludiA4IGJpdHMKKycpCisKKwl4b3JsCSVlZHgsICVlZHgJCUMgaW5pdGlhbCBleHRyYSBjYXJyeQorCWxlYWwJKCVlZGksJWVkaSksICVlYXgJQyAyKmludgorCisJaW11bGwJJWVkaSwgJWVkaQkJQyBpbnYqaW52CisKKwltb3ZsCSVlYngsIFNBVkVfRUJYCisJbW92bAlQQVJBTV9TSVpFLCAlZWJ4CisKKwlpbXVsbAlQQVJBTV9ESVZJU09SLCAlZWRpCUMgaW52KmludipkCisKKwlzdWJsCSVlZGksICVlYXgJCUMgaW52ID0gMippbnYgLSBpbnYqaW52KmQKKwlsZWFsCSglZWF4LCVlYXgpLCAlZWRpCUMgMippbnYKKworCWltdWxsCSVlYXgsICVlYXgJCUMgaW52KmludgorCisJaW11bGwJUEFSQU1fRElWSVNPUiwgJWVheAlDIGludippbnYqZAorCisJbGVhbAkoJWVzaSwlZWJ4LDQpLCAlZXNpCUMgc3JjIGVuZAorCW5lZ2wJJWVieAkJCUMgLXNpemUKKworCXN1YmwJJWVheCwgJWVkaQkJQyBpbnYgPSAyKmludiAtIGludippbnYqZAorCisJQVNTRVJUKGUsYAlDIGQqaW52ID09IDEgbW9kIDJeR01QX0xJTUJfQklUUworCW1vdmwJUEFSQU1fRElWSVNPUiwgJWVheAorCWltdWxsCSVlZGksICVlYXgKKwljbXBsCSQxLCAlZWF4JykKKworCitDIFRoZSBkZXBlbmRlbnQgY2hhaW4gaGVyZSBpcworQworQwlzdWJsCSVlZHgsICVlYXggICAgICAgMQorQwlpbXVsbAklZWRpLCAlZWF4ICAgICAgIDQKK0MJbXVsbAlQQVJBTV9ESVZJU09SICAgIDUKK0MJCQkgICAgICAgLS0tLQorQwl0b3RhbAkJCTEwCitDCitDIGFuZCB0aGlzIGlzIHRoZSBtZWFzdXJlZCBzcGVlZC4gIE5vIHNwZWNpYWwgc2NoZWR1bGluZyBpcyBuZWNlc3NhcnksIG91dAorQyBvZiBvcmRlciBleGVjdXRpb24gaGlkZXMgdGhlIGxvYWQgbGF0ZW5jeS4KKworTCh0b3ApOgorCUMgZWF4CXNjcmF0Y2ggKHNyYyBsaW1iKQorCUMgZWJ4CWNvdW50ZXIsIGxpbWJzLCBuZWdhdGl2ZQorCUMgZWN4CWNhcnJ5IGJpdCwgMCBvciAxCisJQyBlZHgJY2FycnkgbGltYiwgaGlnaCBvZiBsYXN0IHByb2R1Y3QKKwlDIGVzaQkmc3JjW3NpemVdCisJQyBlZGkJaW52ZXJzZQorCUMgZWJwCisKKwltb3ZsCSglZXNpLCVlYngsNCksICVlYXgKKwlzdWJsCSVlY3gsICVlYXgKKworCXNiYmwJJWVjeCwgJWVjeAorCXN1YmwJJWVkeCwgJWVheAorCisJc2JibAkkMCwgJWVjeAorCisJaW11bGwJJWVkaSwgJWVheAorCisJbmVnbAklZWN4CisKKwltdWxsCVBBUkFNX0RJVklTT1IKKworCWluY2wJJWVieAorCWpueglMKHRvcCkKKworCisJbW92bAlTQVZFX0VTSSwgJWVzaQorCWxlYWwJKCVlY3gsJWVkeCksICVlYXgKKworCW1vdmwJU0FWRV9FREksICVlZGkKKworCW1vdmwJU0FWRV9FQlgsICVlYngKKwlhZGRsCSRTVEFDS19TUEFDRSwgJWVzcAorCisJcmV0CisKK0VQSUxPR1VFKCkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcDYvbXVsX2Jhc2VjYXNlLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3A2L211bF9iYXNlY2FzZS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg3YmMxMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3A2L211bF9iYXNlY2FzZS5hc20KQEAgLTAsMCArMSw2MDcgQEAKK2RubCAgSW50ZWwgUDYgbXBuX211bF9iYXNlY2FzZSAtLSBtdWx0aXBseSB0d28gbXBuIG51bWJlcnMuCisKK2RubCAgQ29weXJpZ2h0IDE5OTktMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MgUDY6IGFwcHJveCA2LjUgY3ljbGVzIHBlciBjcm9zcyBwcm9kdWN0ICgxNiBsaW1icy9sb29wIHVucm9sbGluZykuCisKKworZG5sICBQNiBVTlJPTExfQ09VTlQgY3ljbGVzL3Byb2R1Y3QgKGFwcHJveCkKK2RubCAgICAgICAgICAgOCAgICAgICAgICAgNworZG5sICAgICAgICAgIDE2ICAgICAgICAgICA2LjUKK2RubCAgICAgICAgICAzMiAgICAgICAgICAgNi40CitkbmwgIE1heGltdW0gcG9zc2libGUgd2l0aCB0aGUgY3VycmVudCBjb2RlIGlzIDMyLgorCitkZWZsaXQoVU5ST0xMX0NPVU5ULCAxNikKKworCitDIHZvaWQgbXBuX211bF9iYXNlY2FzZSAobXBfcHRyIHdwLAorQyAgICAgICAgICAgICAgICAgICAgICAgIG1wX3NyY3B0ciB4cCwgbXBfc2l6ZV90IHhzaXplLAorQyAgICAgICAgICAgICAgICAgICAgICAgIG1wX3NyY3B0ciB5cCwgbXBfc2l6ZV90IHlzaXplKTsKK0MKK0MgVGhpcyByb3V0aW5lIGlzIGVzc2VudGlhbGx5IHRoZSBzYW1lIGFzIG1wbi9nZW5lcmljL211bF9iYXNlY2FzZS5jLCBidXQKK0MgaXQncyBmYXN0ZXIgYmVjYXVzZSBpdCBkb2VzIG1vc3Qgb2YgdGhlIG1wbl9hZGRtdWxfMSgpIHN0YXJ0dXAKK0MgY2FsY3VsYXRpb25zIG9ubHkgb25jZS4KKworaWZkZWYoYFBJQycsYAorZGVmbGl0KFVOUk9MTF9USFJFU0hPTEQsIDUpCisnLGAKK2RlZmxpdChVTlJPTExfVEhSRVNIT0xELCA1KQorJykKKworZGVmZnJhbWUoUEFSQU1fWVNJWkUsMjApCitkZWZmcmFtZShQQVJBTV9ZUCwgICAxNikKK2RlZmZyYW1lKFBBUkFNX1hTSVpFLDEyKQorZGVmZnJhbWUoUEFSQU1fWFAsICAgOCkKK2RlZmZyYW1lKFBBUkFNX1dQLCAgIDQpCisKKwlURVhUCisJQUxJR04oMTYpCisKK1BST0xPR1VFKG1wbl9tdWxfYmFzZWNhc2UpCitkZWZsaXQoYEZSQU1FJywwKQorCisJbW92bAlQQVJBTV9YU0laRSwgJWVjeAorCisJbW92bAlQQVJBTV9ZUCwgJWVheAorCisJbW92bAlQQVJBTV9YUCwgJWVkeAorCisJbW92bAkoJWVheCksICVlYXgJCUMgeXBbMF0KKwljbXBsCSQyLCAlZWN4CisJamEJTCh4c2l6ZV9tb3JlX3RoYW5fdHdvKQorCWplCUwodHdvX2J5X3NvbWV0aGluZykKKworCisJQyBvbmUgbGltYiBieSBvbmUgbGltYgorCisJbXVsbAkoJWVkeCkKKworCW1vdmwJUEFSQU1fV1AsICVlY3gKKwltb3ZsCSVlYXgsICglZWN4KQorCW1vdmwJJWVkeCwgNCglZWN4KQorCXJldAorCisKK0MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0wodHdvX2J5X3NvbWV0aGluZyk6CitkZWZsaXQoYEZSQU1FJywwKQorCitkbmwgIHJlLXVzZSBwYXJhbWV0ZXIgc3BhY2UKK2RlZmluZShTQVZFX0VCWCwgYFBBUkFNX1hTSVpFJykKK2RlZmluZShTQVZFX0VTSSwgYFBBUkFNX1lTSVpFJykKKworCW1vdmwJJWVieCwgU0FWRV9FQlgKKwljbXBsCSQxLCBQQVJBTV9ZU0laRQorCW1vdmwJJWVheCwgJWVjeAkJQyB5cFswXQorCisJbW92bAklZXNpLCBTQVZFX0VTSQkJQyBzYXZlIGVzaQorCW1vdmwJUEFSQU1fV1AsICVlYngKKwltb3ZsCSVlZHgsICVlc2kJCUMgeHAKKworCW1vdmwJKCVlZHgpLCAlZWF4CQlDIHhwWzBdCisJam5lCUwodHdvX2J5X3R3bykKKworCisJQyB0d28gbGltYnMgYnkgb25lIGxpbWIKKwlDCisJQyBlYXgJeHBbMF0KKwlDIGVieAl3cAorCUMgZWN4CXlwWzBdCisJQyBlZHgKKwlDIGVzaQl4cAorCisJbXVsbAklZWN4CisKKwltb3ZsCSVlYXgsICglZWJ4KQorCW1vdmwJNCglZXNpKSwgJWVheAorCW1vdmwJJWVkeCwgJWVzaQkJQyBjYXJyeQorCisJbXVsbAklZWN4CisKKwlhZGRsCSVlYXgsICVlc2kKKworCW1vdmwJJWVzaSwgNCglZWJ4KQorCW1vdmwJU0FWRV9FU0ksICVlc2kKKworCWFkY2wJJDAsICVlZHgKKworCW1vdmwJJWVkeCwgOCglZWJ4KQorCW1vdmwJU0FWRV9FQlgsICVlYngKKworCXJldAorCisKKworQyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJQUxJR04oMTYpCitMKHR3b19ieV90d28pOgorCUMgZWF4CXhwWzBdCisJQyBlYngJd3AKKwlDIGVjeAl5cFswXQorCUMgZWR4CisJQyBlc2kJeHAKKwlDIGVkaQorCUMgZWJwCisKK2RubCAgbW9yZSBwYXJhbWV0ZXIgc3BhY2UgcmUtdXNlCitkZWZpbmUoU0FWRV9FREksIGBQQVJBTV9XUCcpCisKKwltdWxsCSVlY3gJCUMgeHBbMF0gKiB5cFswXQorCisJbW92bAklZWRpLCBTQVZFX0VESQorCW1vdmwJJWVkeCwgJWVkaQlDIGNhcnJ5LCBmb3Igd3BbMV0KKworCW1vdmwJJWVheCwgKCVlYngpCisJbW92bAk0KCVlc2kpLCAlZWF4CisKKwltdWxsCSVlY3gJCUMgeHBbMV0gKiB5cFswXQorCisJYWRkbAklZWF4LCAlZWRpCisJbW92bAlQQVJBTV9ZUCwgJWVjeAorCisJYWRjbAkkMCwgJWVkeAorCW1vdmwJNCglZWN4KSwgJWVjeAlDIHlwWzFdCisKKwltb3ZsCSVlZGksIDQoJWVieCkKKwltb3ZsCTQoJWVzaSksICVlYXgJQyB4cFsxXQorCW1vdmwJJWVkeCwgJWVkaQlDIGNhcnJ5LCBmb3Igd3BbMl0KKworCW11bGwJJWVjeAkJQyB4cFsxXSAqIHlwWzFdCisKKwlhZGRsCSVlYXgsICVlZGkKKwltb3ZsCSglZXNpKSwgJWVheAlDIHhwWzBdCisKKwlhZGNsCSQwLCAlZWR4CisJbW92bAklZWR4LCAlZXNpCUMgY2FycnksIGZvciB3cFszXQorCisJbXVsbAklZWN4CQlDIHhwWzBdICogeXBbMV0KKworCWFkZGwJJWVheCwgNCglZWJ4KQorCW1vdmwJJWVzaSwgJWVheAorCisJYWRjbAklZWR4LCAlZWRpCisJbW92bAlTQVZFX0VTSSwgJWVzaQorCisJbW92bAklZWRpLCA4KCVlYngpCisKKwlhZGNsCSQwLCAlZWF4CisJbW92bAlTQVZFX0VESSwgJWVkaQorCisJbW92bAklZWF4LCAxMiglZWJ4KQorCW1vdmwJU0FWRV9FQlgsICVlYngKKworCXJldAorCisKK0MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlBTElHTigxNikKK0woeHNpemVfbW9yZV90aGFuX3R3byk6CisKK0MgVGhlIGZpcnN0IGxpbWIgb2YgeXAgaXMgcHJvY2Vzc2VkIHdpdGggYSBzaW1wbGUgbXBuX211bF8xIGxvb3AgcnVubmluZyBhdAorQyBhYm91dCA2LjIgYy9sLiAgVW5yb2xsaW5nIHRoaXMgZG9lc24ndCBzZWVtIHdvcnRod2hpbGUgc2luY2UgaXQncyBvbmx5IHJ1bgorQyBvbmNlICh3aGVyZWFzIHRoZSBhZGRtdWxfMSBiZWxvdyBpcyBydW4geXNpemUtMSBtYW55IHRpbWVzKS4gIEEgY2FsbCB0bworQyBtcG5fbXVsXzEgd291bGQgYmUgc2xvd2VkIGRvd24gYnkgdGhlIHBhcmFtZXRlciBwdXNoaW5nIGFuZCBwb3BwaW5nIGV0YywKK0MgYW5kIGRvZXNuJ3Qgc2VlbSBsaWtlbHkgdG8gYmUgd29ydGh3aGlsZSBvbiB0aGUgdHlwaWNhbCBzaXplcyByZWFjaGluZworQyBoZXJlIGZyb20gdGhlIEthcmF0c3ViYSBjb2RlLgorCisJQyBlYXgJeXBbMF0KKwlDIGVieAorCUMgZWN4CXhzaXplCisJQyBlZHgJeHAKKwlDIGVzaQorCUMgZWRpCisJQyBlYnAKKworZGVmZnJhbWUoYFNBVkVfRUJYJywgICAgLTQpCitkZWZmcmFtZShgU0FWRV9FU0knLCAgICAtOCkKK2RlZmZyYW1lKGBTQVZFX0VESScsICAgLTEyKQorZGVmZnJhbWUoYFNBVkVfRUJQJywgICAtMTYpCitkZWZmcmFtZShWQVJfQ09VTlRFUiwgIC0yMCkgIGRubCBmb3IgdXNlIGluIHRoZSB1bnJvbGwgY2FzZQorZGVmZnJhbWUoVkFSX0FESlVTVCwgICAtMjQpCitkZWZmcmFtZShWQVJfSk1QLCAgICAgIC0yOCkKK2RlZmZyYW1lKFZBUl9TV0FQLCAgICAgLTMyKQorZGVmZnJhbWUoVkFSX1hQX0xPVywgICAtMzYpCitkZWZsaXQoU1RBQ0tfU1BBQ0UsIDM2KQorCisJc3VibAkkU1RBQ0tfU1BBQ0UsICVlc3AKK2RlZmxpdChgRlJBTUUnLFNUQUNLX1NQQUNFKQorCisJbW92bAklZWRpLCBTQVZFX0VESQorCW1vdmwJUEFSQU1fV1AsICVlZGkKKworCW1vdmwJJWVieCwgU0FWRV9FQlgKKworCW1vdmwJJWVicCwgU0FWRV9FQlAKKwltb3ZsCSVlYXgsICVlYnAKKworCW1vdmwJJWVzaSwgU0FWRV9FU0kKKwl4b3JsCSVlYngsICVlYngKKwlsZWFsCSglZWR4LCVlY3gsNCksICVlc2kJQyB4cCBlbmQKKworCWxlYWwJKCVlZGksJWVjeCw0KSwgJWVkaQlDIHdwIGVuZCBvZiBtdWwxCisJbmVnbAklZWN4CisKKworTChtdWwxKToKKwlDIGVheAlzY3JhdGNoCisJQyBlYngJY2FycnkKKwlDIGVjeAljb3VudGVyLCBuZWdhdGl2ZQorCUMgZWR4CXNjcmF0Y2gKKwlDIGVzaQl4cCBlbmQKKwlDIGVkaQl3cCBlbmQgb2YgbXVsMQorCUMgZWJwCW11bHRpcGxpZXIKKworCW1vdmwJKCVlc2ksJWVjeCw0KSwgJWVheAorCisJbXVsbAklZWJwCisKKwlhZGRsCSVlYngsICVlYXgKKwltb3ZsCSVlYXgsICglZWRpLCVlY3gsNCkKKwltb3ZsCSQwLCAlZWJ4CisKKwlhZGNsCSVlZHgsICVlYngKKwlpbmNsCSVlY3gKKwlqbnoJTChtdWwxKQorCisKKwltb3ZsCVBBUkFNX1lTSVpFLCAlZWR4CisKKwltb3ZsCSVlYngsICglZWRpKQkJQyBmaW5hbCBjYXJyeQorCW1vdmwJUEFSQU1fWFNJWkUsICVlY3gKKwlkZWNsCSVlZHgKKworCWp6CUwoZG9uZSkJCQlDIGlmIHlzaXplPT0xCisKKwljbXBsCSRVTlJPTExfVEhSRVNIT0xELCAlZWN4CisJbW92bAlQQVJBTV9ZUCwgJWVheAorCWphZQlMKHVucm9sbCkKKworCitDIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJQyBzaW1wbGUgYWRkbXVsIGxvb3BpbmcKKwlDCisJQyBlYXgJeXAKKwlDIGVieAorCUMgZWN4CXhzaXplCisJQyBlZHgJeXNpemUtMQorCUMgZXNpCXhwIGVuZAorCUMgZWRpCXdwIGVuZCBvZiBtdWwxCisJQyBlYnAKKworCWxlYWwJNCglZWF4LCVlZHgsNCksICVlYnAJQyB5cCBlbmQKKwluZWdsCSVlY3gKKwluZWdsCSVlZHgKKworCW1vdmwJJWVkeCwgUEFSQU1fWVNJWkUJQyAtKHlzaXplLTEpCisJbW92bAkoJWVzaSwlZWN4LDQpLCAlZWF4CUMgeHAgbG93IGxpbWIKKwlpbmNsCSVlY3gKKworCW1vdmwJJWVjeCwgUEFSQU1fWFNJWkUJQyAtKHhzaXplLTEpCisJeG9ybAklZWJ4LCAlZWJ4CQlDIGluaXRpYWwgY2FycnkKKworCW1vdmwJJWVicCwgUEFSQU1fWVAKKwltb3ZsCSglZWJwLCVlZHgsNCksICVlYnAJQyB5cCBzZWNvbmQgbG93ZXN0IGxpbWIgLSBtdWx0aXBsaWVyCisJam1wCUwoc2ltcGxlX291dGVyX2VudHJ5KQorCisKK0woc2ltcGxlX291dGVyX3RvcCk6CisJQyBlYnAJeXNpemUgY291bnRlciwgbmVnYXRpdmUKKworCW1vdmwJUEFSQU1fWVAsICVlZHgKKworCW1vdmwJUEFSQU1fWFNJWkUsICVlY3gJQyAtKHhzaXplLTEpCisJeG9ybAklZWJ4LCAlZWJ4CQlDIGNhcnJ5CisKKwltb3ZsCSVlYnAsIFBBUkFNX1lTSVpFCisJYWRkbAkkNCwgJWVkaQkJQyBuZXh0IHBvc2l0aW9uIGluIHdwCisKKwltb3ZsCSglZWR4LCVlYnAsNCksICVlYnAJQyB5cCBsaW1iIC0gbXVsdGlwbGllcgorCisJbW92bAktNCglZXNpLCVlY3gsNCksICVlYXgJQyB4cCBsb3cgbGltYgorCisKK0woc2ltcGxlX291dGVyX2VudHJ5KToKKworTChzaW1wbGVfaW5uZXJfdG9wKToKKwlDIGVheAl4cCBsaW1iCisJQyBlYngJY2FycnkgbGltYgorCUMgZWN4CWxvb3AgY291bnRlciAobmVnYXRpdmUpCisJQyBlZHgJc2NyYXRjaAorCUMgZXNpCXhwIGVuZAorCUMgZWRpCXdwIGVuZAorCUMgZWJwCW11bHRpcGxpZXIKKworCW11bGwJJWVicAorCisJYWRkbAklZWF4LCAlZWJ4CisJYWRjbAkkMCwgJWVkeAorCisJYWRkbAklZWJ4LCAoJWVkaSwlZWN4LDQpCisJbW92bAkoJWVzaSwlZWN4LDQpLCAlZWF4CisJYWRjbAkkMCwgJWVkeAorCisJaW5jbAklZWN4CisJbW92bAklZWR4LCAlZWJ4CisJam56CUwoc2ltcGxlX2lubmVyX3RvcCkKKworCisJQyBzZXBhcmF0ZSBjb2RlIGZvciBsYXN0IGxpbWIgc28gb3V0ZXIgbG9vcCBjb3VudGVyIGhhbmRsaW5nIGNhbiBiZQorCUMgaW50ZXJsZWF2ZWQKKworCW11bGwJJWVicAorCisJbW92bAlQQVJBTV9ZU0laRSwgJWVicAorCWFkZGwJJWVheCwgJWVieAorCisJYWRjbAkkMCwgJWVkeAorCisJYWRkbAklZWJ4LCAoJWVkaSkKKworCWFkY2wJJDAsICVlZHgKKwlpbmNsCSVlYnAKKworCW1vdmwJJWVkeCwgNCglZWRpKQorCWpueglMKHNpbXBsZV9vdXRlcl90b3ApCisKKworTChkb25lKToKKwltb3ZsCVNBVkVfRUJYLCAlZWJ4CisKKwltb3ZsCVNBVkVfRVNJLCAlZXNpCisKKwltb3ZsCVNBVkVfRURJLCAlZWRpCisKKwltb3ZsCVNBVkVfRUJQLCAlZWJwCisJYWRkbAkkRlJBTUUsICVlc3AKKworCXJldAorCisKKworQyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQworQyBUaGUgdW5yb2xsZWQgbG9vcCBpcyB0aGUgc2FtZSBhcyBpbiBtcG5fYWRkbXVsXzEsIHNlZSB0aGF0IGNvZGUgZm9yIHNvbWUKK0MgY29tbWVudHMuCitDCitDIFZBUl9BREpVU1QgaXMgdGhlIG5lZ2F0aXZlIG9mIGhvdyBtYW55IGxpbWJzIHRoZSBsZWFscyBpbiB0aGUgaW5uZXIgbG9vcAorQyBpbmNyZW1lbnQgeHAgYW5kIHdwLiAgVGhpcyBpcyB1c2VkIHRvIGFkanVzdCB4cCBhbmQgd3AsIGFuZCBpcyByc2hpZnRlZCB0bworQyBnaXZlbiBhbiBpbml0aWFsIFZBUl9DT1VOVEVSIGF0IHRoZSB0b3Agb2YgdGhlIG91dGVyIGxvb3AuCitDCitDIFZBUl9DT1VOVEVSIGlzIGZvciB0aGUgdW5yb2xsZWQgbG9vcCwgcnVubmluZyBmcm9tIFZBUl9BREpVU1QvVU5ST0xMX0NPVU5UCitDIHVwIHRvIC0xLCBpbmNsdXNpdmUuCitDCitDIFZBUl9KTVAgaXMgdGhlIGNvbXB1dGVkIGp1bXAgaW50byB0aGUgdW5yb2xsZWQgbG9vcC4KK0MKK0MgVkFSX1NXQVAgaXMgMCBpZiB4c2l6ZSBvZGQgb3IgMHhGRkZGRkZGRiBpZiB4c2l6ZSBldmVuLCB1c2VkIHRvIHN3YXAgdGhlCitDIGluaXRpYWwgZWJ4IGFuZCBlY3ggb24gZW50cnkgdG8gdGhlIHVucm9sbGluZy4KK0MKK0MgVkFSX1hQX0xPVyBpcyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgbGltYiBvZiB4cCwgd2hpY2ggaXMgbmVlZGVkIGF0IHRoZQorQyBzdGFydCBvZiB0aGUgdW5yb2xsZWQgbG9vcC4KK0MKK0MgUEFSQU1fWVNJWkUgaXMgdGhlIG91dGVyIGxvb3AgY291bnRlciwgZ29pbmcgZnJvbSAtKHlzaXplLTEpIHVwIHRvIC0xLAorQyBpbmNsdXNpdmUuCitDCitDIFBBUkFNX1lQIGlzIG9mZnNldCBhcHByb3ByaWF0ZWx5IHNvIHRoYXQgdGhlIFBBUkFNX1lTSVpFIGNvdW50ZXIgY2FuIGJlCitDIGFkZGVkIHRvIGdpdmUgdGhlIGxvY2F0aW9uIG9mIHRoZSBuZXh0IGxpbWIgb2YgeXAsIHdoaWNoIGlzIHRoZSBtdWx0aXBsaWVyCitDIGluIHRoZSB1bnJvbGxlZCBsb29wLgorQworQyBUaGUgdHJpY2sgd2l0aCB0aGUgVkFSX0FESlVTVCB2YWx1ZSBtZWFucyBpdCdzIG9ubHkgbmVjZXNzYXJ5IHRvIGRvIG9uZQorQyBmZXRjaCBpbiB0aGUgb3V0ZXIgbG9vcCB0byB0YWtlIGNhcmUgb2YgeHAsIHdwIGFuZCB0aGUgaW5uZXIgbG9vcCBjb3VudGVyLgorCisKK0wodW5yb2xsKToKKwlDIGVheAl5cAorCUMgZWJ4CisJQyBlY3gJeHNpemUKKwlDIGVkeAl5c2l6ZS0xCisJQyBlc2kJeHAgZW5kCisJQyBlZGkJd3AgZW5kIG9mIG11bDEKKwlDIGVicAorCisJbW92bAlQQVJBTV9YUCwgJWVzaQorCisJbW92bAk0KCVlYXgpLCAlZWJwCQlDIG11bHRpcGxpZXIgKHlwIHNlY29uZCBsaW1iKQorCWxlYWwJNCglZWF4LCVlZHgsNCksICVlYXgJQyB5cCBhZGp1c3QgZm9yIHlzaXplIGluZGV4aW5nCisKKwltb3ZsCSVlYXgsIFBBUkFNX1lQCisJbW92bAlQQVJBTV9XUCwgJWVkaQorCW5lZ2wJJWVkeAorCisJbW92bAklZWR4LCBQQVJBTV9ZU0laRQorCWxlYWwJVU5ST0xMX0NPVU5ULTIoJWVjeCksICVlYngJQyAoeHNpemUtMSkrVU5ST0xMX0NPVU5ULTEKKwlkZWNsCSVlY3gJCQkJQyB4c2l6ZS0xCisKKwltb3ZsCSglZXNpKSwgJWVheAkJQyB4cCBsb3cgbGltYgorCWFuZGwJJC1VTlJPTExfTUFTSy0xLCAlZWJ4CisJbmVnbAklZWN4CQkJQyAtKHhzaXplLTEpCisKKwluZWdsCSVlYngKKwlhbmRsCSRVTlJPTExfTUFTSywgJWVjeAorCisJbW92bAklZWJ4LCBWQVJfQURKVVNUCisJbW92bAklZWN4LCAlZWR4CisJc2hsbAkkNCwgJWVjeAorCisJbW92bAklZWF4LCBWQVJfWFBfTE9XCisJc2FybAkkVU5ST0xMX0xPRzIsICVlYngKKwluZWdsCSVlZHgKKworCUMgMTUgY29kZSBieXRlcyBwZXIgbGltYgoraWZkZWYoYFBJQycsYAorCWNhbGwJTChwaWNfY2FsYykKK0wodW5yb2xsX2hlcmUpOgorJyxgCisJbGVhbAlMKHVucm9sbF9pbm5lcl9lbnRyeSkgKCVlY3gsJWVkeCwxKSwgJWVjeAorJykKKworCW1vdmwJJWVjeCwgVkFSX0pNUAorCW1vdmwJJWVkeCwgJWVjeAorCXNobGwJJDMxLCAlZWR4CisKKwlzYXJsCSQzMSwgJWVkeAkJQyAwIG9yIC0xIGFzIHhzaXplIG9kZCBvciBldmVuCisJbGVhbAk0KCVlZGksJWVjeCw0KSwgJWVkaQlDIHdwIGFuZCB4cCwgYWRqdXN0IGZvciB1bnJvbGxpbmcsCisJbGVhbAk0KCVlc2ksJWVjeCw0KSwgJWVzaQlDICBhbmQgc3RhcnQgYXQgc2Vjb25kIGxpbWIKKworCW1vdmwJJWVkeCwgVkFSX1NXQVAKKwlqbXAJTCh1bnJvbGxfb3V0ZXJfZW50cnkpCisKKworaWZkZWYoYFBJQycsYAorTChwaWNfY2FsYyk6CisJQyBTZWUgbXBuL3g4Ni9SRUFETUUgYWJvdXQgb2xkIGdhcyBidWdzCisJbGVhbAkoJWVjeCwlZWR4LDEpLCAlZWN4CisJYWRkbAkkTCh1bnJvbGxfaW5uZXJfZW50cnkpLUwodW5yb2xsX2hlcmUpLCAlZWN4CisJYWRkbAkoJWVzcCksICVlY3gKKwlyZXRfaW50ZXJuYWwKKycpCisKKworQyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUFMSUdOKDE2KQorTCh1bnJvbGxfb3V0ZXJfdG9wKToKKwlDIGVheAorCUMgZWJ4CisJQyBlY3gKKwlDIGVkeAorCUMgZXNpCXhwICsgb2Zmc2V0CisJQyBlZGkJd3AgKyBvZmZzZXQKKwlDIGVicAl5c2l6ZSBjb3VudGVyLCBuZWdhdGl2ZQorCisJbW92bAlWQVJfQURKVVNULCAlZWJ4CisJbW92bAlQQVJBTV9ZUCwgJWVkeAorCisJbW92bAlWQVJfWFBfTE9XLCAlZWF4CisJbW92bAklZWJwLCBQQVJBTV9ZU0laRQlDIHN0b3JlIGluY3JlbWVudGVkIHlzaXplIGNvdW50ZXIKKworCWxlYWwJZXZhbChVTlJPTExfQllURVMgKyA0KSAoJWVkaSwlZWJ4LDQpLCAlZWRpCisJbGVhbAkoJWVzaSwlZWJ4LDQpLCAlZXNpCisJc2FybAkkVU5ST0xMX0xPRzIsICVlYngKKworCW1vdmwJKCVlZHgsJWVicCw0KSwgJWVicAlDIHlwIG5leHQgbXVsdGlwbGllcgorCitMKHVucm9sbF9vdXRlcl9lbnRyeSk6CisJbXVsbAklZWJwCisKKwltb3ZsCSVlYngsIFZBUl9DT1VOVEVSCisJbW92bAklZWR4LCAlZWJ4CQlDIGNhcnJ5IGhpZ2gKKwltb3ZsCSVlYXgsICVlY3gJCUMgY2FycnkgbG93CisKKwl4b3JsCSVlZHgsICVlYXgKKwltb3ZsCVZBUl9KTVAsICVlZHgKKworCWFuZGwJVkFSX1NXQVAsICVlYXgKKworCXhvcmwJJWVheCwgJWVieAkJQyBjYXJyaWVzIG90aGVyIHdheSBmb3Igb2RkIGluZGV4CisJeG9ybAklZWF4LCAlZWN4CisKKwlqbXAJKiVlZHgKKworCitDIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0wodW5yb2xsX2lubmVyX3RvcCk6CisJQyBlYXgJeHAgbGltYgorCUMgZWJ4CWNhcnJ5IGhpZ2gKKwlDIGVjeAljYXJyeSBsb3cKKwlDIGVkeAlzY3JhdGNoCisJQyBlc2kJeHArOAorCUMgZWRpCXdwCisJQyBlYnAJeXAgbXVsdGlwbGllciBsaW1iCisJQworCUMgVkFSX0NPVU5URVIgIGxvb3AgY291bnRlciwgbmVnYXRpdmUKKwlDCisJQyAxNSBieXRlcyBlYWNoIGxpbWIKKworCWFkZGwJJFVOUk9MTF9CWVRFUywgJWVkaQorCitMKHVucm9sbF9pbm5lcl9lbnRyeSk6CisKK2RlZmxpdChDSFVOS19DT1VOVCwyKQorZm9ybG9vcChgaScsIDAsIFVOUk9MTF9DT1VOVC9DSFVOS19DT1VOVC0xLCBgCisJZGVmbGl0KGBkaXNwMCcsIGV2YWwoaSpDSFVOS19DT1VOVCo0IGlmZWxzZShVTlJPTExfQllURVMsMjU2LC0xMjgpKSkKKwlkZWZsaXQoYGRpc3AxJywgZXZhbChkaXNwMCArIDQpKQorCitaZGlzcCgJbW92bCwJZGlzcDAsKCVlc2kpLCAlZWF4KQorCW11bGwJJWVicAorWmRpc3AoCWFkZGwsCSVlY3gsIGRpc3AwLCglZWRpKSkKKwlhZGNsCSVlYXgsICVlYngJCUMgbmV3IGNhcnJ5IGxvdworCW1vdmwJJWVkeCwgJWVjeAorCWFkY2wJJDAsICVlY3gJCUMgbmV3IGNhcnJ5IGhpZ2gKKworCW1vdmwJZGlzcDEoJWVzaSksICVlYXgKKwltdWxsCSVlYnAKKwlhZGRsCSVlYngsIGRpc3AxKCVlZGkpCisJYWRjbAklZWF4LCAlZWN4CQlDIG5ldyBjYXJyeSBsb3cKKwltb3ZsCSVlZHgsICVlYngKKwlhZGNsCSQwLCAlZWJ4CQlDIG5ldyBjYXJyeSBoaWdoCisnKQorCisKKwlpbmNsCVZBUl9DT1VOVEVSCisJbGVhbAlVTlJPTExfQllURVMoJWVzaSksICVlc2kKKwlqbnoJTCh1bnJvbGxfaW5uZXJfdG9wKQorCisKKwlDIGVheAorCUMgZWJ4CWNhcnJ5IGhpZ2gKKwlDIGVjeAljYXJyeSBsb3cKKwlDIGVkeAorCUMgZXNpCisJQyBlZGkJd3AsIHBvaW50aW5nIGF0IHNlY29uZCBsYXN0IGxpbWIpCisJQyBlYnAKKworZGVmbGl0KGBkaXNwMCcsCWV2YWwoVU5ST0xMX0JZVEVTIGlmZWxzZShVTlJPTExfQllURVMsMjU2LC0xMjgpKSkKK2RlZmxpdChgZGlzcDEnLCBldmFsKGRpc3AwICsgNCkpCisKKwltb3ZsCVBBUkFNX1lTSVpFLCAlZWJwCisJYWRkbAklZWN4LCBkaXNwMCglZWRpKQlDIGNhcnJ5IGxvdworCisJYWRjbAkkMCwgJWVieAorCWluY2wJJWVicAorCisJbW92bAklZWJ4LCBkaXNwMSglZWRpKQlDIGNhcnJ5IGhpZ2gKKwlqbnoJTCh1bnJvbGxfb3V0ZXJfdG9wKQorCisKKwltb3ZsCVNBVkVfRVNJLCAlZXNpCisKKwltb3ZsCVNBVkVfRUJQLCAlZWJwCisKKwltb3ZsCVNBVkVfRURJLCAlZWRpCisKKwltb3ZsCVNBVkVfRUJYLCAlZWJ4CisJYWRkbAkkRlJBTUUsICVlc3AKKworCXJldAorCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wNi9wM21teC9wb3BoYW0uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcDYvcDNtbXgvcG9waGFtLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjJmMjYwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcDYvcDNtbXgvcG9waGFtLmFzbQpAQCAtMCwwICsxLDQyIEBACitkbmwgIEludGVsIFBlbnRpdW0tSUlJIG1wbl9wb3Bjb3VudCwgbXBuX2hhbWRpc3QgLS0gcG9wdWxhdGlvbiBjb3VudCBhbmQKK2RubCAgaGFtbWluZyBkaXN0YW5jZS4KKworZG5sICBDb3B5cmlnaHQgMjAwMCwgMjAwMiwgMjAwNCwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MJCQkgICAgIHBvcGNvdW50CSAgICAgaGFtZGlzdAorQyBQMyBnZW5lcmljCQkJNi41CQk3CitDIFAzIG1vZGVsIDkgIChCYW5pYXMpCQk/CQk/CitDIFAzIG1vZGVsIDEzIChEb3RoYW4pCQk1Ljc1CQk2CisKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fcG9wY291bnQgbXBuX2hhbWRpc3QpCitpbmNsdWRlX21wbihgeDg2L2s3L21teC9wb3BoYW0uYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3A2L3Nxcl9iYXNlY2FzZS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wNi9zcXJfYmFzZWNhc2UuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYzdmZGYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wNi9zcXJfYmFzZWNhc2UuYXNtCkBAIC0wLDAgKzEsNjQ5IEBACitkbmwgIEludGVsIFA2IG1wbl9zcXJfYmFzZWNhc2UgLS0gc3F1YXJlIGFuIG1wbiBudW1iZXIuCisKK2RubCAgQ29weXJpZ2h0IDE5OTksIDIwMDAsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDIFA2OiBhcHByb3ggNC4wIGN5Y2xlcyBwZXIgY3Jvc3MgcHJvZHVjdCwgb3IgNy43NSBjeWNsZXMgcGVyIHRyaWFuZ3VsYXIKK0MgICAgIHByb2R1Y3QgKG1lYXN1cmVkIG9uIHRoZSBzcGVlZCBkaWZmZXJlbmNlIGJldHdlZW4gMjAgYW5kIDQwIGxpbWJzLAorQyAgICAgd2hpY2ggaXMgdGhlIEthcmF0c3ViYSByZWN1cnNpbmcgcmFuZ2UpLgorCisKK2RubCAgVGhlc2UgYXJlIHRoZSBzYW1lIGFzIGluIG1wbi94ODYvazYvc3FyX2Jhc2VjYXNlLmFzbSwgc2VlIHRoYXQgZmlsZSBmb3IKK2RubCAgYSBkZXNjcmlwdGlvbi4gIFRoZSBvbmx5IGRpZmZlcmVuY2UgaGVyZSBpcyB0aGF0IFVOUk9MTF9DT1VOVCBjYW4gZ28gdXAKK2RubCAgdG8gNjQgKG5vdCA2MykgbWFraW5nIFNRUl9UT09NMl9USFJFU0hPTERfTUFYIDY3LgorCitkZWZsaXQoU1FSX1RPT00yX1RIUkVTSE9MRF9NQVgsIDY3KQorCitpZmRlZihgU1FSX1RPT00yX1RIUkVTSE9MRF9PVkVSUklERScsCitgZGVmaW5lKGBTUVJfVE9PTTJfVEhSRVNIT0xEJyxTUVJfVE9PTTJfVEhSRVNIT0xEX09WRVJSSURFKScpCisKK200X2NvbmZpZ19nbXBfbXBhcmFtKGBTUVJfVE9PTTJfVEhSRVNIT0xEJykKK2RlZmxpdChVTlJPTExfQ09VTlQsIGV2YWwoU1FSX1RPT00yX1RIUkVTSE9MRC0zKSkKKworCitDIHZvaWQgbXBuX3Nxcl9iYXNlY2FzZSAobXBfcHRyIGRzdCwgbXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUpOworQworQyBUaGUgYWxnb3JpdGhtIGlzIGJhc2ljYWxseSB0aGUgc2FtZSBhcyBtcG4vZ2VuZXJpYy9zcXJfYmFzZWNhc2UuYywgYnV0IGEKK0MgbG90IG9mIGZ1bmN0aW9uIGNhbGwgb3ZlcmhlYWRzIGFyZSBhdm9pZGVkLCBlc3BlY2lhbGx5IHdoZW4gdGhlIGdpdmVuIHNpemUKK0MgaXMgc21hbGwuCitDCitDIFRoZSBjb2RlIHNpemUgbWlnaHQgbG9vayBhIGJpdCBleGNlc3NpdmUsIGJ1dCBub3QgYWxsIG9mIGl0IGlzIGV4ZWN1dGVkIHNvCitDIGl0IHdvbid0IGFsbCBnZXQgaW50byB0aGUgY29kZSBjYWNoZS4gIFRoZSAxeDEsIDJ4MiBhbmQgM3gzIHNwZWNpYWwgY2FzZXMKK0MgY2xlYXJseSBhcHBseSBvbmx5IHRvIHRob3NlIHNpemVzOyBtaWQgc2l6ZXMgbGlrZSAxMHgxMCBvbmx5IG5lZWQgcGFydCBvZgorQyB0aGUgdW5yb2xsZWQgYWRkbXVsOyBhbmQgYmlnIHNpemVzIGxpa2UgNDB4NDAgdGhhdCBkbyB1c2UgdGhlIGZ1bGwKK0MgdW5yb2xsaW5nIHdpbGwgbGVhc3QgYmUgbWFraW5nIGdvb2QgdXNlIG9mIGl0LCBiZWNhdXNlIDQweDQwIHdpbGwgdGFrZQorQyBzb21ldGhpbmcgbGlrZSA3MDAwIGN5Y2xlcy4KKworZGVmZnJhbWUoUEFSQU1fU0laRSwxMikKK2RlZmZyYW1lKFBBUkFNX1NSQywgOCkKK2RlZmZyYW1lKFBBUkFNX0RTVCwgNCkKKworCVRFWFQKKwlBTElHTigzMikKK1BST0xPR1VFKG1wbl9zcXJfYmFzZWNhc2UpCitkZWZsaXQoYEZSQU1FJywwKQorCisJbW92bAlQQVJBTV9TSVpFLCAlZWR4CisKKwltb3ZsCVBBUkFNX1NSQywgJWVheAorCisJY21wbAkkMiwgJWVkeAorCW1vdmwJUEFSQU1fRFNULCAlZWN4CisJamUJTCh0d29fbGltYnMpCisKKwltb3ZsCSglZWF4KSwgJWVheAorCWphCUwodGhyZWVfb3JfbW9yZSkKKworCitDIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDIG9uZSBsaW1iIG9ubHkKKwlDIGVheAlzcmMgbGltYgorCUMgZWJ4CisJQyBlY3gJZHN0CisJQyBlZHgKKworCW11bGwJJWVheAorCisJbW92bAklZWF4LCAoJWVjeCkKKwltb3ZsCSVlZHgsIDQoJWVjeCkKKworCXJldAorCisKK0MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0wodHdvX2xpbWJzKToKKwlDIGVheAlzcmMKKwlDIGVieAorCUMgZWN4CWRzdAorCUMgZWR4CisKK2RlZmZyYW1lKFNBVkVfRVNJLCAtNCkKK2RlZmZyYW1lKFNBVkVfRUJYLCAtOCkKK2RlZmZyYW1lKFNBVkVfRURJLCAtMTIpCitkZWZmcmFtZShTQVZFX0VCUCwgLTE2KQorZGVmbGl0KGBTVEFDS19TUEFDRScsMTYpCisKKwlzdWJsCSRTVEFDS19TUEFDRSwgJWVzcAorZGVmbGl0KGBGUkFNRScsU1RBQ0tfU1BBQ0UpCisKKwltb3ZsCSVlc2ksIFNBVkVfRVNJCisJbW92bAklZWF4LCAlZXNpCisJbW92bAkoJWVheCksICVlYXgKKworCW11bGwJJWVheAkJQyBzcmNbMF1eMgorCisJbW92bAklZWF4LCAoJWVjeCkJQyBkc3RbMF0KKwltb3ZsCTQoJWVzaSksICVlYXgKKworCW1vdmwJJWVieCwgU0FWRV9FQlgKKwltb3ZsCSVlZHgsICVlYngJQyBkc3RbMV0KKworCW11bGwJJWVheAkJQyBzcmNbMV1eMgorCisJbW92bAklZWRpLCBTQVZFX0VESQorCW1vdmwJJWVheCwgJWVkaQlDIGRzdFsyXQorCW1vdmwJKCVlc2kpLCAlZWF4CisKKwltb3ZsCSVlYnAsIFNBVkVfRUJQCisJbW92bAklZWR4LCAlZWJwCUMgZHN0WzNdCisKKwltdWxsCTQoJWVzaSkJCUMgc3JjWzBdKnNyY1sxXQorCisJYWRkbAklZWF4LCAlZWJ4CisJbW92bAlTQVZFX0VTSSwgJWVzaQorCisJYWRjbAklZWR4LCAlZWRpCisKKwlhZGNsCSQwLCAlZWJwCisJYWRkbAklZWJ4LCAlZWF4CisJbW92bAlTQVZFX0VCWCwgJWVieAorCisJYWRjbAklZWRpLCAlZWR4CisJbW92bAlTQVZFX0VESSwgJWVkaQorCisJYWRjbAkkMCwgJWVicAorCisJbW92bAklZWF4LCA0KCVlY3gpCisKKwltb3ZsCSVlYnAsIDEyKCVlY3gpCisJbW92bAlTQVZFX0VCUCwgJWVicAorCisJbW92bAklZWR4LCA4KCVlY3gpCisJYWRkbAkkRlJBTUUsICVlc3AKKworCXJldAorCisKK0MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0wodGhyZWVfb3JfbW9yZSk6CisJQyBlYXgJc3JjIGxvdyBsaW1iCisJQyBlYngKKwlDIGVjeAlkc3QKKwlDIGVkeAlzaXplCitkZWZsaXQoYEZSQU1FJywwKQorCisJcHVzaGwJJWVzaQlkZWZmcmFtZV9wdXNobChgU0FWRV9FU0knKQorCWNtcGwJJDQsICVlZHgKKworCW1vdmwJUEFSQU1fU1JDLCAlZXNpCisJamFlCUwoZm91cl9vcl9tb3JlKQorCisKK0MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0MgdGhyZWUgbGltYnMKKworCUMgZWF4CXNyYyBsb3cgbGltYgorCUMgZWJ4CisJQyBlY3gJZHN0CisJQyBlZHgKKwlDIGVzaQlzcmMKKwlDIGVkaQorCUMgZWJwCisKKwlwdXNobAklZWJwCWRlZmZyYW1lX3B1c2hsKGBTQVZFX0VCUCcpCisJcHVzaGwJJWVkaQlkZWZmcmFtZV9wdXNobChgU0FWRV9FREknKQorCisJbXVsbAklZWF4CQlDIHNyY1swXSBeIDIKKworCW1vdmwJJWVheCwgKCVlY3gpCisJbW92bAklZWR4LCA0KCVlY3gpCisKKwltb3ZsCTQoJWVzaSksICVlYXgKKwl4b3JsCSVlYnAsICVlYnAKKworCW11bGwJJWVheAkJQyBzcmNbMV0gXiAyCisKKwltb3ZsCSVlYXgsIDgoJWVjeCkKKwltb3ZsCSVlZHgsIDEyKCVlY3gpCisJbW92bAk4KCVlc2kpLCAlZWF4CisKKwlwdXNobAklZWJ4CWRlZmZyYW1lX3B1c2hsKGBTQVZFX0VCWCcpCisKKwltdWxsCSVlYXgJCUMgc3JjWzJdIF4gMgorCisJbW92bAklZWF4LCAxNiglZWN4KQorCW1vdmwJJWVkeCwgMjAoJWVjeCkKKworCW1vdmwJKCVlc2kpLCAlZWF4CisKKwltdWxsCTQoJWVzaSkJCUMgc3JjWzBdICogc3JjWzFdCisKKwltb3ZsCSVlYXgsICVlYngKKwltb3ZsCSVlZHgsICVlZGkKKworCW1vdmwJKCVlc2kpLCAlZWF4CisKKwltdWxsCTgoJWVzaSkJCUMgc3JjWzBdICogc3JjWzJdCisKKwlhZGRsCSVlYXgsICVlZGkKKwltb3ZsCSVlZHgsICVlYnAKKworCWFkY2wJJDAsICVlYnAKKwltb3ZsCTQoJWVzaSksICVlYXgKKworCW11bGwJOCglZXNpKQkJQyBzcmNbMV0gKiBzcmNbMl0KKworCXhvcmwJJWVzaSwgJWVzaQorCWFkZGwJJWVheCwgJWVicAorCisJQyBlYXgKKwlDIGVieAlkc3RbMV0KKwlDIGVjeAlkc3QKKwlDIGVkeAlkc3RbNF0KKwlDIGVzaQl6ZXJvLCB3aWxsIGJlIGRzdFs1XQorCUMgZWRpCWRzdFsyXQorCUMgZWJwCWRzdFszXQorCisJYWRjbAkkMCwgJWVkeAorCWFkZGwJJWVieCwgJWVieAorCisJYWRjbAklZWRpLCAlZWRpCisKKwlhZGNsCSVlYnAsICVlYnAKKworCWFkY2wJJWVkeCwgJWVkeAorCW1vdmwJNCglZWN4KSwgJWVheAorCisJYWRjbAkkMCwgJWVzaQorCWFkZGwJJWVieCwgJWVheAorCisJbW92bAklZWF4LCA0KCVlY3gpCisJbW92bAk4KCVlY3gpLCAlZWF4CisKKwlhZGNsCSVlZGksICVlYXgKKwltb3ZsCTEyKCVlY3gpLCAlZWJ4CisKKwlhZGNsCSVlYnAsICVlYngKKwltb3ZsCTE2KCVlY3gpLCAlZWRpCisKKwltb3ZsCSVlYXgsIDgoJWVjeCkKKwltb3ZsCVNBVkVfRUJQLCAlZWJwCisKKwltb3ZsCSVlYngsIDEyKCVlY3gpCisJbW92bAlTQVZFX0VCWCwgJWVieAorCisJYWRjbAklZWR4LCAlZWRpCisJbW92bAkyMCglZWN4KSwgJWVheAorCisJbW92bAklZWRpLCAxNiglZWN4KQorCW1vdmwJU0FWRV9FREksICVlZGkKKworCWFkY2wJJWVzaSwgJWVheAlDIG5vIGNhcnJ5IG91dCBvZiB0aGlzCisJbW92bAlTQVZFX0VTSSwgJWVzaQorCisJbW92bAklZWF4LCAyMCglZWN4KQorCWFkZGwJJEZSQU1FLCAlZXNwCisKKwlyZXQKKworCisKK0MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RlZmZyYW1lKFZBUl9DT1VOVEVSLC0yMCkKK2RlZmZyYW1lKFZBUl9KTVAsICAgIC0yNCkKK2RlZmxpdChgU1RBQ0tfU1BBQ0UnLDI0KQorCitMKGZvdXJfb3JfbW9yZSk6CisJQyBlYXgJc3JjIGxvdyBsaW1iCisJQyBlYngKKwlDIGVjeAorCUMgZWR4CXNpemUKKwlDIGVzaQlzcmMKKwlDIGVkaQorCUMgZWJwCitkZWZsaXQoYEZSQU1FJyw0KSAgZG5sICAlZXNpIGFscmVhZHkgcHVzaGVkCisKK0MgRmlyc3QgbXVsdGlwbHkgc3JjWzBdKnNyY1sxLi5zaXplLTFdIGFuZCBzdG9yZSBhdCBkc3RbMS4uc2l6ZV0uCisKKwlzdWJsCSRTVEFDS19TUEFDRS1GUkFNRSwgJWVzcAorZGVmbGl0KGBGUkFNRScsU1RBQ0tfU1BBQ0UpCisJbW92bAkkMSwgJWVjeAorCisJbW92bAklZWRpLCBTQVZFX0VESQorCW1vdmwJUEFSQU1fRFNULCAlZWRpCisKKwltb3ZsCSVlYngsIFNBVkVfRUJYCisJc3VibAklZWR4LCAlZWN4CQlDIC0oc2l6ZS0xKQorCisJbW92bAklZWJwLCBTQVZFX0VCUAorCW1vdmwJJDAsICVlYngJCUMgaW5pdGlhbCBjYXJyeQorCisJbGVhbAkoJWVzaSwlZWR4LDQpLCAlZXNpCUMgJnNyY1tzaXplXQorCW1vdmwJJWVheCwgJWVicAkJQyBtdWx0aXBsaWVyCisKKwlsZWFsCS00KCVlZGksJWVkeCw0KSwgJWVkaQlDICZkc3Rbc2l6ZS0xXQorCisKK0MgVGhpcyBsb29wIHJ1bnMgYXQganVzdCBvdmVyIDYgYy9sLgorCitMKG11bF8xKToKKwlDIGVheAlzY3JhdGNoCisJQyBlYngJY2FycnkKKwlDIGVjeAljb3VudGVyLCBsaW1icywgbmVnYXRpdmUsIC0oc2l6ZS0xKSB0byAtMQorCUMgZWR4CXNjcmF0Y2gKKwlDIGVzaQkmc3JjW3NpemVdCisJQyBlZGkJJmRzdFtzaXplLTFdCisJQyBlYnAJbXVsdGlwbGllcgorCisJbW92bAklZWJwLCAlZWF4CisKKwltdWxsCSglZXNpLCVlY3gsNCkKKworCWFkZGwJJWVieCwgJWVheAorCW1vdmwJJDAsICVlYngKKworCWFkY2wJJWVkeCwgJWVieAorCW1vdmwJJWVheCwgNCglZWRpLCVlY3gsNCkKKworCWluY2wJJWVjeAorCWpueglMKG11bF8xKQorCisKKwltb3ZsCSVlYngsIDQoJWVkaSkKKworCitDIEFkZG11bCBzcmNbbl0qc3JjW24rMS4uc2l6ZS0xXSBhdCBkc3RbMipuLTEuLi5dLCBmb3IgZWFjaCBuPTEuLnNpemUtMi4KK0MKK0MgVGhlIGxhc3QgdHdvIGFkZG11bHMsIHdoaWNoIGFyZSB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lciBvZiB0aGUgcHJvZHVjdAorQyB0cmlhbmdsZSwgYXJlIGxlZnQgdG8gdGhlIGVuZC4gIFRoZXNlIGFyZSBzcmNbc2l6ZS0zXSpzcmNbc2l6ZS0yLHNpemUtMV0KK0MgYW5kIHNyY1tzaXplLTJdKnNyY1tzaXplLTFdLiAgSWYgc2l6ZSBpcyA0IHRoZW4gaXQncyBvbmx5IHRoZXNlIGNvcm5lcgorQyBjYXNlcyB0aGF0IG5lZWQgdG8gYmUgZG9uZS4KK0MKK0MgVGhlIHVucm9sbGVkIGNvZGUgaXMgdGhlIHNhbWUgYXMgbXBuX2FkZG11bF8xKCksIHNlZSB0aGF0IHJvdXRpbmUgZm9yIHNvbWUKK0MgY29tbWVudHMuCitDCitDIFZBUl9DT1VOVEVSIGlzIHRoZSBvdXRlciBsb29wLCBydW5uaW5nIGZyb20gLShzaXplLTQpIHRvIC0xLCBpbmNsdXNpdmUuCitDCitDIFZBUl9KTVAgaXMgdGhlIGNvbXB1dGVkIGp1bXAgaW50byB0aGUgdW5yb2xsZWQgY29kZSwgc3RlcHBlZCBieSBvbmUgY29kZQorQyBjaHVuayBlYWNoIG91dGVyIGxvb3AuCisKK2RubCAgVGhpcyBpcyBhbHNvIGhhcmQtY29kZWQgaW4gdGhlIGFkZHJlc3MgY2FsY3VsYXRpb24gYmVsb3cuCitkZWZsaXQoQ09ERV9CWVRFU19QRVJfTElNQiwgMTUpCisKK2RubCAgV2l0aCAmc3JjW3NpemVdIGFuZCAmZHN0W3NpemUtMV0gcG9pbnRlcnMsIHRoZSBkaXNwbGFjZW1lbnRzIGluIHRoZQorZG5sICB1bnJvbGxlZCBjb2RlIGZpdCBpbiBhIGJ5dGUgZm9yIFVOUk9MTF9DT1VOVCB2YWx1ZXMgdXAgdG8gMzIsIGJ1dCBhYm92ZQorZG5sICB0aGF0IGFuIG9mZnNldCBtdXN0IGJlIGFkZGVkIHRvIHRoZW0uCitkZWZsaXQoT0ZGU0VULAoraWZlbHNlKGV2YWwoVU5ST0xMX0NPVU5UPjMyKSwxLAorZXZhbCgoVU5ST0xMX0NPVU5ULTMyKSo0KSwKKzApKQorCisJQyBlYXgKKwlDIGVieAljYXJyeQorCUMgZWN4CisJQyBlZHgKKwlDIGVzaQkmc3JjW3NpemVdCisJQyBlZGkJJmRzdFtzaXplLTFdCisJQyBlYnAKKworCW1vdmwJUEFSQU1fU0laRSwgJWVjeAorCisJc3VibAkkNCwgJWVjeAorCWp6CUwoY29ybmVyKQorCisJbW92bAklZWN4LCAlZWR4CisJbmVnbAklZWN4CisKKwlzaGxsCSQ0LCAlZWN4CitpZmVsc2UoT0ZGU0VULDAsLGBzdWJsCSRPRkZTRVQsICVlc2knKQorCitpZmRlZihgUElDJyxgCisJY2FsbAlMKHBpY19jYWxjKQorTChoZXJlKToKKycsYAorCWxlYWwJTCh1bnJvbGxfaW5uZXJfZW5kKS1ldmFsKDIqQ09ERV9CWVRFU19QRVJfTElNQikoJWVjeCwlZWR4KSwgJWVjeAorJykKKwluZWdsCSVlZHgKKworaWZlbHNlKE9GRlNFVCwwLCxgc3VibAkkT0ZGU0VULCAlZWRpJykKKworCUMgVGhlIGNhbGN1bGF0ZWQganVtcCBtdXN0bid0IGJlIGJlZm9yZSB0aGUgc3RhcnQgb2YgdGhlIGF2YWlsYWJsZQorCUMgY29kZS4gIFRoaXMgaXMgdGhlIGxpbWl0IHRoYXQgVU5ST0xMX0NPVU5UIHB1dHMgb24gdGhlIHNyYyBvcGVyYW5kCisJQyBzaXplLCBidXQgY2hlY2tlZCBoZXJlIHVzaW5nIHRoZSBqdW1wIGFkZHJlc3MgZGlyZWN0bHkuCisKKwlBU1NFUlQoYWUsCisJYG1vdmxfdGV4dF9hZGRyZXNzKCBMKHVucm9sbF9pbm5lcl9zdGFydCksICVlYXgpCisJY21wbAklZWF4LCAlZWN4JykKKworCitDIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJQUxJR04oMTYpCitMKHVucm9sbF9vdXRlcl90b3ApOgorCUMgZWF4CisJQyBlYngJaGlnaCBsaW1iIHRvIHN0b3JlCisJQyBlY3gJVkFSX0pNUAorCUMgZWR4CVZBUl9DT1VOVEVSLCBsaW1icywgbmVnYXRpdmUKKwlDIGVzaQkmc3JjW3NpemVdLCBjb25zdGFudAorCUMgZWRpCWRzdCBwdHIsIHNlY29uZCBoaWdoZXN0IGxpbWIgb2YgbGFzdCBhZGRtdWwKKwlDIGVicAorCisJbW92bAktMTIrT0ZGU0VUKCVlc2ksJWVkeCw0KSwgJWVicAlDIG11bHRpcGxpZXIKKwltb3ZsCSVlZHgsIFZBUl9DT1VOVEVSCisKKwltb3ZsCS04K09GRlNFVCglZXNpLCVlZHgsNCksICVlYXgJQyBmaXJzdCBsaW1iIG9mIG11bHRpcGxpY2FuZAorCisJbXVsbAklZWJwCisKK2RlZmluZShjbW92WCxgaWZlbHNlKGV2YWwoVU5ST0xMX0NPVU5UJTIpLDEsYGNtb3Z6KCRAKScsYGNtb3ZueigkQCknKScpCisKKwl0ZXN0YgkkMSwgJWNsCisKKwltb3ZsCSVlZHgsICVlYngJQyBoaWdoIGNhcnJ5CisJbGVhbAk0KCVlZGkpLCAlZWRpCisKKwltb3ZsCSVlY3gsICVlZHgJQyBqdW1wCisKKwltb3ZsCSVlYXgsICVlY3gJQyBsb3cgY2FycnkKKwlsZWFsCUNPREVfQllURVNfUEVSX0xJTUIoJWVkeCksICVlZHgKKworCWNtb3ZYKAklZWJ4LCAlZWN4KQlDIGhpZ2ggY2FycnkgcmV2ZXJzZQorCWNtb3ZYKAklZWF4LCAlZWJ4KQlDIGxvdyBjYXJyeSByZXZlcnNlCisJbW92bAklZWR4LCBWQVJfSk1QCisJam1wCSolZWR4CisKKworCUMgTXVzdCBiZSBvbiBhbiBldmVuIGFkZHJlc3MgaGVyZSBzbyB0aGUgbG93IGJpdCBvZiB0aGUganVtcCBhZGRyZXNzCisJQyB3aWxsIGluZGljYXRlIHdoaWNoIHdheSBhcm91bmQgZWN4L2VieCBzaG91bGQgc3RhcnQuCisKKwlBTElHTigyKQorCitMKHVucm9sbF9pbm5lcl9zdGFydCk6CisJQyBlYXgJc2NyYXRjaAorCUMgZWJ4CWNhcnJ5IGhpZ2gKKwlDIGVjeAljYXJyeSBsb3cKKwlDIGVkeAlzY3JhdGNoCisJQyBlc2kJc3JjIHBvaW50ZXIKKwlDIGVkaQlkc3QgcG9pbnRlcgorCUMgZWJwCW11bHRpcGxpZXIKKwlDCisJQyAxNSBjb2RlIGJ5dGVzIGVhY2ggbGltYgorCUMgZWN4L2VieCByZXZlcnNlZCBvbiBlYWNoIGNodW5rCisKK2Zvcmxvb3AoYGknLCBVTlJPTExfQ09VTlQsIDEsIGAKKwlkZWZsaXQoYGRpc3Bfc3JjJywgZXZhbCgtaSo0ICsgT0ZGU0VUKSkKKwlkZWZsaXQoYGRpc3BfZHN0JywgZXZhbChkaXNwX3NyYykpCisKKwltNF9hc3NlcnQoYGRpc3Bfc3JjPj0tMTI4ICYmIGRpc3Bfc3JjPDEyOCcpCisJbTRfYXNzZXJ0KGBkaXNwX2RzdD49LTEyOCAmJiBkaXNwX2RzdDwxMjgnKQorCitpZmVsc2UoZXZhbChpJTIpLDAsYAorWmRpc3AoCW1vdmwsCWRpc3Bfc3JjLCglZXNpKSwgJWVheCkKKwltdWxsCSVlYnAKK1pkaXNwKAlhZGRsLAklZWJ4LCBkaXNwX2RzdCwoJWVkaSkpCisJYWRjbAklZWF4LCAlZWN4CisJbW92bAklZWR4LCAlZWJ4CisJYWRjbAkkMCwgJWVieAorJyxgCisJZG5sICB0aGlzIG9uZSBjb21lcyBvdXQgbGFzdAorWmRpc3AoCW1vdmwsCWRpc3Bfc3JjLCglZXNpKSwgJWVheCkKKwltdWxsCSVlYnAKK1pkaXNwKAlhZGRsLAklZWN4LCBkaXNwX2RzdCwoJWVkaSkpCisJYWRjbAklZWF4LCAlZWJ4CisJbW92bAklZWR4LCAlZWN4CisJYWRjbAkkMCwgJWVjeAorJykKKycpCitMKHVucm9sbF9pbm5lcl9lbmQpOgorCisJYWRkbAklZWJ4LCBtNF9lbXB0eV9pZl96ZXJvKE9GRlNFVCkoJWVkaSkKKworCW1vdmwJVkFSX0NPVU5URVIsICVlZHgKKwlhZGNsCSQwLCAlZWN4CisKKwltb3ZsCSVlY3gsIG00X2VtcHR5X2lmX3plcm8oT0ZGU0VUKzQpKCVlZGkpCisJbW92bAlWQVJfSk1QLCAlZWN4CisKKwlpbmNsCSVlZHgKKwlqbnoJTCh1bnJvbGxfb3V0ZXJfdG9wKQorCisKK2lmZWxzZShPRkZTRVQsMCwsYAorCWFkZGwJJE9GRlNFVCwgJWVzaQorCWFkZGwJJE9GRlNFVCwgJWVkaQorJykKKworCitDIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJQUxJR04oMTYpCitMKGNvcm5lcik6CisJQyBlYXgKKwlDIGVieAorCUMgZWN4CisJQyBlZHgKKwlDIGVzaQkmc3JjW3NpemVdCisJQyBlZGkJJmRzdFsyKnNpemUtNV0KKwlDIGVicAorCisJbW92bAktMTIoJWVzaSksICVlYXgKKworCW11bGwJLTgoJWVzaSkKKworCWFkZGwJJWVheCwgKCVlZGkpCisJbW92bAktMTIoJWVzaSksICVlYXgKKwltb3ZsCSQwLCAlZWJ4CisKKwlhZGNsCSVlZHgsICVlYngKKworCW11bGwJLTQoJWVzaSkKKworCWFkZGwJJWVheCwgJWVieAorCW1vdmwJLTgoJWVzaSksICVlYXgKKworCWFkY2wJJDAsICVlZHgKKworCWFkZGwJJWVieCwgNCglZWRpKQorCW1vdmwJJDAsICVlYngKKworCWFkY2wJJWVkeCwgJWVieAorCisJbXVsbAktNCglZXNpKQorCisJbW92bAlQQVJBTV9TSVpFLCAlZWN4CisJYWRkbAklZWJ4LCAlZWF4CisKKwlhZGNsCSQwLCAlZWR4CisKKwltb3ZsCSVlYXgsIDgoJWVkaSkKKworCW1vdmwJJWVkeCwgMTIoJWVkaSkKKwltb3ZsCVBBUkFNX0RTVCwgJWVkaQorCisKK0MgTGVmdCBzaGlmdCBvZiBkc3RbMS4uMipzaXplLTJdLCB0aGUgYml0IHNoaWZ0ZWQgb3V0IGJlY29tZXMgZHN0WzIqc2l6ZS0xXS4KKworCXN1YmwJJDEsICVlY3gJCUMgc2l6ZS0xCisJeG9ybAklZWF4LCAlZWF4CQlDIHJlYWR5IGZvciBmaW5hbCBhZGNsLCBhbmQgY2xlYXIgY2FycnkKKworCW1vdmwJJWVjeCwgJWVkeAorCW1vdmwJUEFSQU1fU1JDLCAlZXNpCisKKworTChsc2hpZnQpOgorCUMgZWF4CisJQyBlYngKKwlDIGVjeAljb3VudGVyLCBzaXplLTEgdG8gMQorCUMgZWR4CXNpemUtMSAoZm9yIGxhdGVyIHVzZSkKKwlDIGVzaQlzcmMgKGZvciBsYXRlciB1c2UpCisJQyBlZGkJZHN0LCBpbmNyZW1lbnRpbmcKKwlDIGVicAorCisJcmNsbAk0KCVlZGkpCisJcmNsbAk4KCVlZGkpCisKKwlsZWFsCTgoJWVkaSksICVlZGkKKwlkZWNsCSVlY3gKKwlqbnoJTChsc2hpZnQpCisKKworCWFkY2wJJWVheCwgJWVheAorCisJbW92bAklZWF4LCA0KCVlZGkpCQlDIGRzdCBtb3N0IHNpZ25pZmljYW50IGxpbWIKKwltb3ZsCSglZXNpKSwgJWVheAkJQyBzcmNbMF0KKworCWxlYWwJNCglZXNpLCVlZHgsNCksICVlc2kJQyAmc3JjW3NpemVdCisJc3VibAklZWR4LCAlZWN4CQlDIC0oc2l6ZS0xKQorCisKK0MgTm93IGFkZCBpbiB0aGUgc3F1YXJlcyBvbiB0aGUgZGlhZ29uYWwsIHNyY1swXV4yLCBzcmNbMV1eMiwgLi4uLAorQyBzcmNbc2l6ZS0xXV4yLiAgZHN0WzBdIGhhc24ndCB5ZXQgYmVlbiBzZXQgYXQgYWxsIHlldCwgYW5kIGp1c3QgZ2V0cyB0aGUKK0MgbG93IGxpbWIgb2Ygc3JjWzBdXjIuCisKKworCW11bGwJJWVheAorCisJbW92bAklZWF4LCAoJWVkaSwlZWN4LDgpCUMgZHN0WzBdCisKKworTChkaWFnKToKKwlDIGVheAlzY3JhdGNoCisJQyBlYngJc2NyYXRjaAorCUMgZWN4CWNvdW50ZXIsIG5lZ2F0aXZlCisJQyBlZHgJY2FycnkKKwlDIGVzaQkmc3JjW3NpemVdCisJQyBlZGkJZHN0WzIqc2l6ZS0yXQorCUMgZWJwCisKKwltb3ZsCSglZXNpLCVlY3gsNCksICVlYXgKKwltb3ZsCSVlZHgsICVlYngKKworCW11bGwJJWVheAorCisJYWRkbAklZWJ4LCA0KCVlZGksJWVjeCw4KQorCWFkY2wJJWVheCwgOCglZWRpLCVlY3gsOCkKKwlhZGNsCSQwLCAlZWR4CisKKwlpbmNsCSVlY3gKKwlqbnoJTChkaWFnKQorCisKKwltb3ZsCVNBVkVfRVNJLCAlZXNpCisJbW92bAlTQVZFX0VCWCwgJWVieAorCisJYWRkbAklZWR4LCA0KCVlZGkpCQlDIGRzdCBtb3N0IHNpZ25pZmljYW50IGxpbWIKKworCW1vdmwJU0FWRV9FREksICVlZGkKKwltb3ZsCVNBVkVfRUJQLCAlZWJwCisJYWRkbAkkRlJBTUUsICVlc3AKKwlyZXQKKworCisKK0MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2lmZGVmKGBQSUMnLGAKK0wocGljX2NhbGMpOgorCWFkZGwJKCVlc3ApLCAlZWN4CisJYWRkbAkkTCh1bnJvbGxfaW5uZXJfZW5kKS1MKGhlcmUpLWV2YWwoMipDT0RFX0JZVEVTX1BFUl9MSU1CKSwgJWVjeAorCWFkZGwJJWVkeCwgJWVjeAorCXJldF9pbnRlcm5hbAorJykKKworCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wNi9zc2UyL2FkZG11bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3A2L3NzZTIvYWRkbXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NGI2MjcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wNi9zc2UyL2FkZG11bF8xLmFzbQpAQCAtMCwwICsxLDM3IEBACitkbmwgIEludGVsIFA2L1NTRTIgbXBuX2FkZG11bF8xLgorCitkbmwgIENvcHlyaWdodCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgVE9ETworQyAgKiBXcml0ZSBQNiBzcGVjaWZpYyBTU0UyIGNvZGUuCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FkZG11bF8xKQoraW5jbHVkZV9tcG4oYHg4Ni9wZW50aXVtNC9zc2UyL2FkZG11bF8xLmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wNi9zc2UyL2dtcC1tcGFyYW0uaCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3A2L3NzZTIvZ21wLW1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZTI2MWIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wNi9zc2UyL2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDIwMCBAQAorLyogSW50ZWwgUDYvc3NlMiBnbXAtbXBhcmFtLmggLS0gQ29tcGlsZXIvbWFjaGluZSBwYXJhbWV0ZXIgaGVhZGVyIGZpbGUuCisKK0NvcHlyaWdodCAxOTkxLCAxOTkzLCAxOTk0LCAxOTk5LTIwMDMsIDIwMDgtMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgMzIKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgNAorCisKKy8qIE5PVEU6IEluIGEgZmF0IGJpbmFyeSBidWlsZCBTUVJfVE9PTTJfVEhSRVNIT0xEIGhlcmUgY2Fubm90IGJlIG1vcmUgdGhhbiB0aGUKKyAgIHZhbHVlIGluIG1wbi94ODYvcDYvZ21wLW1wYXJhbS5oLiAgVGhlIGxhdHRlciBpcyB1c2VkIGFzIGEgaGFyZCBsaW1pdCBpbgorICAgbXBuL3g4Ni9wNi9zcXJfYmFzZWNhc2UuYXNtLiAgKi8KKworCisvKiAxODY3IE1IeiBQNiBtb2RlbCAxMyAqLworCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIE1PRF8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICA0CisjZGVmaW5lIE1PRF8xTl9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA1CisjZGVmaW5lIE1PRF8xVV9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA0CisjZGVmaW5lIE1PRF8xXzFfVE9fTU9EXzFfMl9USFJFU0hPTEQgICAgICAgIDExCisjZGVmaW5lIE1PRF8xXzJfVE9fTU9EXzFfNF9USFJFU0hPTEQgICAgICAgICAwICAvKiBuZXZlciBtcG5fbW9kXzFzXzJwICovCisjZGVmaW5lIFBSRUlOVl9NT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgICA4CisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAgICAxICAvKiBuYXRpdmUgKi8KKyNkZWZpbmUgRElWX1FSXzJfUEkyX1RIUkVTSE9MRCAgICAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWRVhBQ1RfMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAobmF0aXZlKSAqLworI2RlZmluZSBCTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgICAgICAyMQorCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDc3CisjZGVmaW5lIE1VTF9UT09NNDRfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTY5CisjZGVmaW5lIE1VTF9UT09NNkhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjQ2CisjZGVmaW5lIE1VTF9UT09NOEhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMzgxCisKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNDNfVEhSRVNIT0xEICAgICAgNzMKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxMTQKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNTNfVEhSRVNIT0xEICAgICAgOTcKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNjNfVEhSRVNIT0xEICAgICAgODAKKyNkZWZpbmUgTVVMX1RPT000M19UT19UT09NNTRfVEhSRVNIT0xEICAgICAxMDYKKworI2RlZmluZSBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTAxCisjZGVmaW5lIFNRUl9UT09NNF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTU0CisjZGVmaW5lIFNRUl9UT09NNl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjIyCisjZGVmaW5lIFNRUl9UT09NOF9USFJFU0hPTEQgICAgICAgICAgICAgICAgNTI3CisKKyNkZWZpbmUgTVVMTUlEX1RPT000Ml9USFJFU0hPTEQgICAgICAgICAgICAgNTgKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxMworI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxNworCisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgNjkwICAvKiBrID0gNSAqLworI2RlZmluZSBNVUxfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgNTY1LCA1fSwgeyAgICAgMjUsIDZ9LCB7ICAgICAxMywgNX0sIHsgICAgIDI3LCA2fSwgXAorICAgIHsgICAgIDI1LCA3fSwgeyAgICAgMTMsIDZ9LCB7ICAgICAyOCwgN30sIHsgICAgIDE1LCA2fSwgXAorICAgIHsgICAgIDMxLCA3fSwgeyAgICAgMTcsIDZ9LCB7ICAgICAzNSwgN30sIHsgICAgIDI3LCA4fSwgXAorICAgIHsgICAgIDE1LCA3fSwgeyAgICAgMzUsIDh9LCB7ICAgICAxOSwgN30sIHsgICAgIDQxLCA4fSwgXAorICAgIHsgICAgIDIzLCA3fSwgeyAgICAgNDcsIDh9LCB7ICAgICAyNywgOX0sIHsgICAgIDE1LCA4fSwgXAorICAgIHsgICAgIDMxLCA3fSwgeyAgICAgNjMsIDh9LCB7ICAgICAzOSwgOX0sIHsgICAgIDIzLCA1fSwgXAorICAgIHsgICAgMzgzLCA0fSwgeyAgICA5OTEsIDV9LCB7ICAgIDUxMSwgNn0sIHsgICAgMjY3LCA3fSwgXAorICAgIHsgICAgMTU3LCA4fSwgeyAgICAgOTEsIDl9LCB7ICAgICA0NywgOH0sIHsgICAgMTExLCA5fSwgXAorICAgIHsgICAgIDYzLCA4fSwgeyAgICAxMjcsIDl9LCB7ICAgICA3OSwxMH0sIHsgICAgIDQ3LCA5fSwgXAorICAgIHsgICAgIDk1LDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA2MywgOX0sIHsgICAgMTM1LDEwfSwgXAorICAgIHsgICAgIDc5LCA5fSwgeyAgICAxNTksMTB9LCB7ICAgICA5NSwxMX0sIHsgICAgIDYzLDEwfSwgXAorICAgIHsgICAgMTQzLCA5fSwgeyAgICAyODcsMTB9LCB7ICAgIDE1OSwxMX0sIHsgICAgIDk1LDEwfSwgXAorICAgIHsgICAgMTkxLDEyfSwgeyAgICAgNjMsMTF9LCB7ICAgIDEyNywxMH0sIHsgICAgMjU1LCA5fSwgXAorICAgIHsgICAgNTExLDEwfSwgeyAgICAyNzEsIDl9LCB7ICAgIDU0MywxMH0sIHsgICAgMjg3LDExfSwgXAorICAgIHsgICAgMTU5LDEwfSwgeyAgICAzMzUsIDl9LCB7ICAgIDY3MSwxMX0sIHsgICAgMTkxLDEwfSwgXAorICAgIHsgICAgMzgzLCA5fSwgeyAgICA3NjcsMTB9LCB7ICAgIDM5OSwgOX0sIHsgICAgNzk5LDEwfSwgXAorICAgIHsgICAgNDE1LDExfSwgeyAgICAyMjMsMTJ9LCB7ICAgIDEyNywxMX0sIHsgICAgMjU1LDEwfSwgXAorICAgIHsgICAgNTQzLCA5fSwgeyAgIDEwODcsMTF9LCB7ICAgIDI4NywxMH0sIHsgICAgNjA3LDExfSwgXAorICAgIHsgICAgMzE5LDEwfSwgeyAgICA2NzEsMTJ9LCB7ICAgIDE5MSwxMX0sIHsgICAgMzgzLDEwfSwgXAorICAgIHsgICAgNzk5LDExfSwgeyAgICA0MTUsMTB9LCB7ICAgIDgzMSwxM30sIHsgICAgMTI3LDEyfSwgXAorICAgIHsgICAgMjU1LDExfSwgeyAgICA1NDMsMTB9LCB7ICAgMTA4NywxMX0sIHsgICAgNjA3LDEwfSwgXAorICAgIHsgICAxMjE1LDEyfSwgeyAgICAzMTksMTF9LCB7ICAgIDY3MSwxMH0sIHsgICAxMzQzLDExfSwgXAorICAgIHsgICAgNzM1LDEwfSwgeyAgIDE0NzEsMTJ9LCB7ICAgIDM4MywxMX0sIHsgICAgNzk5LDEwfSwgXAorICAgIHsgICAxNTk5LDExfSwgeyAgICA4NjMsMTJ9LCB7ICAgIDQ0NywxMX0sIHsgICAgOTU5LDEzfSwgXAorICAgIHsgICAgMjU1LDEyfSwgeyAgICA1MTEsMTF9LCB7ICAgMTA4NywxMn0sIHsgICAgNTc1LDExfSwgXAorICAgIHsgICAxMjE1LDEyfSwgeyAgICA2MzksMTF9LCB7ICAgMTM0MywxMn0sIHsgICAgNzAzLDExfSwgXAorICAgIHsgICAxNDcxLDEzfSwgeyAgICAzODMsMTJ9LCB7ICAgIDgzMSwxMX0sIHsgICAxNzI3LDEyfSwgXAorICAgIHsgICAgOTU5LDE0fSwgeyAgICAyNTUsMTN9LCB7ICAgIDUxMSwxMn0sIHsgICAxMjE1LDEzfSwgXAorICAgIHsgICAgNjM5LDEyfSwgeyAgIDE0NzEsMTF9LCB7ICAgMjk0MywxM30sIHsgICAgNzY3LDEyfSwgXAorICAgIHsgICAxNzI3LDEzfSwgeyAgICA4OTUsMTJ9LCB7ICAgMTkxOSwxNH0sIHsgICAgNTExLDEzfSwgXAorICAgIHsgICAxMDIzLDEyfSwgeyAgIDIxMTEsMTN9LCB7ICAgMTE1MSwxMn0sIHsgICAyNDMxLDEzfSwgXAorICAgIHsgICAxNDA3LDEyfSwgeyAgIDI4MTUsMTR9LCB7ICAgIDc2NywxM30sIHsgICAxNjYzLDEyfSwgXAorICAgIHsgICAzNDU1LDEzfSwgeyAgIDgxOTIsMTR9LCB7ICAxNjM4NCwxNX0sIHsgIDMyNzY4LDE2fSB9CisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzX1NJWkUgMTMyCisjZGVmaW5lIE1VTF9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA3NDI0CisKKyNkZWZpbmUgU1FSX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICA1NjUgIC8qIGsgPSA1ICovCisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICA0NzIsIDV9LCB7ICAgICAyNSwgNn0sIHsgICAgIDEzLCA1fSwgeyAgICAgMjcsIDZ9LCBcCisgICAgeyAgICAgMjUsIDd9LCB7ICAgICAxMywgNn0sIHsgICAgIDI3LCA3fSwgeyAgICAgMTUsIDZ9LCBcCisgICAgeyAgICAgMzEsIDd9LCB7ICAgICAxNywgNn0sIHsgICAgIDM1LCA3fSwgeyAgICAgMjcsIDh9LCBcCisgICAgeyAgICAgMTUsIDd9LCB7ICAgICAzNSwgOH0sIHsgICAgIDE5LCA3fSwgeyAgICAgNDEsIDh9LCBcCisgICAgeyAgICAgMjMsIDd9LCB7ICAgICA0OSwgOH0sIHsgICAgIDI3LCA5fSwgeyAgICAgMTUsIDh9LCBcCisgICAgeyAgICAgMzksIDl9LCB7ICAgICAyMywgOH0sIHsgICAgIDUxLDEwfSwgeyAgICAgMTUsIDl9LCBcCisgICAgeyAgICAgMzEsIDh9LCB7ICAgICA2MywgNH0sIHsgICAxMDIzLCA4fSwgeyAgICAgNjcsIDl9LCBcCisgICAgeyAgICAgMzksIDV9LCB7ICAgIDYzOSwgNH0sIHsgICAxNDcxLCA2fSwgeyAgICAzODMsIDd9LCBcCisgICAgeyAgICAyMDksIDh9LCB7ICAgIDExOSwgOX0sIHsgICAgIDYzLCA3fSwgeyAgICAyNTUsIDh9LCBcCisgICAgeyAgICAxMzksIDl9LCB7ICAgICA3MSwgOH0sIHsgICAgMTQzLCA5fSwgeyAgICAgNzksMTB9LCBcCisgICAgeyAgICAgNDcsIDl9LCB7ICAgICA5NSwxMX0sIHsgICAgIDMxLDEwfSwgeyAgICAgNjMsIDl9LCBcCisgICAgeyAgICAxMzUsMTB9LCB7ICAgICA3OSwgOX0sIHsgICAgMTU5LCA4fSwgeyAgICAzMTksIDl9LCBcCisgICAgeyAgICAxNjcsMTB9LCB7ICAgICA5NSwxMX0sIHsgICAgIDYzLDEwfSwgeyAgICAxNDMsIDl9LCBcCisgICAgeyAgICAyODcsMTB9LCB7ICAgIDE1OSwxMX0sIHsgICAgIDk1LDEwfSwgeyAgICAxOTEsMTJ9LCBcCisgICAgeyAgICAgNjMsMTF9LCB7ICAgIDEyNywxMH0sIHsgICAgMjU1LCA5fSwgeyAgICA1NDMsIDh9LCBcCisgICAgeyAgIDEwODcsMTB9LCB7ICAgIDI4NywgOX0sIHsgICAgNTc1LDExfSwgeyAgICAxNTksMTB9LCBcCisgICAgeyAgICAzMTksIDl9LCB7ICAgIDYzOSwxMH0sIHsgICAgMzM1LCA5fSwgeyAgICA2NzEsMTB9LCBcCisgICAgeyAgICAzNTEsIDl9LCB7ICAgIDcwMywxMX0sIHsgICAgMTkxLDEwfSwgeyAgICAzODMsIDl9LCBcCisgICAgeyAgICA3NjcsMTB9LCB7ICAgIDM5OSwgOX0sIHsgICAgNzk5LDEwfSwgeyAgICA0MTUsIDl9LCBcCisgICAgeyAgICA4MzEsMTF9LCB7ICAgIDIyMywxMn0sIHsgICAgMTI3LDExfSwgeyAgICAyNTUsMTB9LCBcCisgICAgeyAgICA1NDMsIDl9LCB7ICAgMTA4NywxMX0sIHsgICAgMjg3LDEwfSwgeyAgICA2MDcsIDl9LCBcCisgICAgeyAgIDEyMTUsMTF9LCB7ICAgIDMxOSwxMH0sIHsgICAgNjcxLCA5fSwgeyAgIDEzNDMsMTF9LCBcCisgICAgeyAgICAzNTEsMTB9LCB7ICAgIDcwMywxMn0sIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTB9LCBcCisgICAgeyAgICA3OTksMTF9LCB7ICAgIDQxNSwxMH0sIHsgICAgODMxLDEzfSwgeyAgICAxMjcsMTJ9LCBcCisgICAgeyAgICAyNTUsMTF9LCB7ICAgIDU0MywxMH0sIHsgICAxMDg3LDExfSwgeyAgICA2MDcsMTJ9LCBcCisgICAgeyAgICAzMTksMTF9LCB7ICAgIDY3MSwxMH0sIHsgICAxMzQzLDExfSwgeyAgICA3MzUsMTJ9LCBcCisgICAgeyAgICAzODMsMTF9LCB7ICAgIDc5OSwxMH0sIHsgICAxNTk5LDExfSwgeyAgICA4NjMsMTJ9LCBcCisgICAgeyAgICA0NDcsMTF9LCB7ICAgIDk1OSwxM30sIHsgICAgMjU1LDEyfSwgeyAgICA1MTEsMTF9LCBcCisgICAgeyAgIDEwODcsMTJ9LCB7ICAgIDU3NSwxMX0sIHsgICAxMjE1LDEyfSwgeyAgICA2MzksMTF9LCBcCisgICAgeyAgIDEzNDMsMTJ9LCB7ICAgIDcwMywxMX0sIHsgICAxNDcxLDEzfSwgeyAgICAzODMsMTJ9LCBcCisgICAgeyAgICA3NjcsMTF9LCB7ICAgMTU5OSwxMn0sIHsgICAgODMxLDExfSwgeyAgIDE3MjcsMTJ9LCBcCisgICAgeyAgICA5NTksMTR9LCB7ICAgIDI1NSwxM30sIHsgICAgNTExLDEyfSwgeyAgIDEyMTUsMTN9LCBcCisgICAgeyAgICA2MzksMTJ9LCB7ICAgMTQ3MSwxM30sIHsgICAgNzY3LDEyfSwgeyAgIDE3MjcsMTN9LCBcCisgICAgeyAgICA4OTUsMTJ9LCB7ICAgMTkxOSwxNH0sIHsgICAgNTExLDEzfSwgeyAgIDEwMjMsMTJ9LCBcCisgICAgeyAgIDIxMTEsMTN9LCB7ICAgMTE1MSwxMn0sIHsgICAyNDMxLDEzfSwgeyAgIDE0MDcsMTR9LCBcCisgICAgeyAgICA3NjcsMTN9LCB7ICAgMTY2MywxMn0sIHsgICAzNDU1LDEzfSwgeyAgIDgxOTIsMTR9LCBcCisgICAgeyAgMTYzODQsMTV9LCB7ICAzMjc2OCwxNn0gfQorI2RlZmluZSBTUVJfRkZUX1RBQkxFM19TSVpFIDE0NgorI2RlZmluZSBTUVJfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNTc2MAorCisjZGVmaW5lIE1VTExPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTVVMTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgTVVMTE9fTVVMX05fVEhSRVNIT0xEICAgICAgICAgICAgMTM0NjMKKyNkZWZpbmUgU1FSTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBTUVJMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgIDEwMAorI2RlZmluZSBTUVJMT19TUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgOTIzNgorCisjZGVmaW5lIERDX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDI1CisjZGVmaW5lIERDX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAgIDU1CisjZGVmaW5lIERDX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDYwCisjZGVmaW5lIERDX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTMyCisKKyNkZWZpbmUgSU5WX01VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgMzgKKyNkZWZpbmUgSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNjUKKyNkZWZpbmUgSU5WX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgNjUKKworI2RlZmluZSBCSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgIDI1MgorI2RlZmluZSBSRURDXzFfVE9fUkVEQ19OX1RIUkVTSE9MRCAgICAgICAgICA2MgorCisjZGVmaW5lIE1VX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAxMTY0CisjZGVmaW5lIE1VX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAgNzQ4CisjZGVmaW5lIE1VUElfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDM4CisjZGVmaW5lIE1VX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAxMzYwCisjZGVmaW5lIE1VX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAxNDcwCisKKyNkZWZpbmUgUE9XTV9TRUNfVEFCTEUgIDIsMjMsMjU4LDg3OSwyMjQ2CisKKyNkZWZpbmUgR0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICAgMjUKKyNkZWZpbmUgU0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICA1ODIKKyNkZWZpbmUgU0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgIDExMTgKKworI2RlZmluZSBGQUNfRFNDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDE3OAorI2RlZmluZSBGQUNfT0REX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAzNAorCisjZGVmaW5lIE1BVFJJWDIyX1NUUkFTU0VOX1RIUkVTSE9MRCAgICAgICAgIDE3CisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAgIDY5CisjZGVmaW5lIEhHQ0RfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTEyCisjZGVmaW5lIEhHQ0RfUkVEVUNFX1RIUkVTSE9MRCAgICAgICAgICAgICAzMzg5CisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgMzg2CisjZGVmaW5lIEdDREVYVF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMzAzCisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAgICAxCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wNi9zc2UyL21vZF8xXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcDYvc3NlMi9tb2RfMV8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjdiN2FkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcDYvc3NlMi9tb2RfMV8xLmFzbQpAQCAtMCwwICsxLDM0IEBACitkbmwgIEludGVsIFA2L1NTRTIgbXBuX21vZF8xXzEuCisKK2RubCAgQ29weXJpZ2h0IDIwMDksIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fbW9kXzFfMXApCitpbmNsdWRlX21wbihgeDg2L3BlbnRpdW00L3NzZTIvbW9kXzFfMS5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcDYvc3NlMi9tb2RfMV80LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3A2L3NzZTIvbW9kXzFfNC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDljOTZjNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3A2L3NzZTIvbW9kXzFfNC5hc20KQEAgLTAsMCArMSwzNCBAQAorZG5sICBJbnRlbCBQNi9TU0UyIG1wbl9tb2RfMV80LgorCitkbmwgIENvcHlyaWdodCAyMDA5LCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX21vZF8xc180cCkKK2luY2x1ZGVfbXBuKGB4ODYvcGVudGl1bTQvc3NlMi9tb2RfMV80LmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wNi9zc2UyL211bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3A2L3NzZTIvbXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZTViNjkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wNi9zc2UyL211bF8xLmFzbQpAQCAtMCwwICsxLDM4IEBACitkbmwgIEludGVsIFA2L1NTRTIgbXBuX211bF8xLgorCitkbmwgIENvcHlyaWdodCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgVE9ETworQyAgKiBXcml0ZSBQNiBzcGVjaWZpYyBTU0UyIGNvZGUuICBJdCBzaG91bGQgcmVhY2ggMyBjL2wuCitDICAgIFRoZSBQZW50aXVtNCBjb2RlIHJ1bnMgYXQgNC4yIGMvbC4KKworTVVMRlVOQ19QUk9MT0dVRShtcG5fbXVsXzEpCitpbmNsdWRlX21wbihgeDg2L3BlbnRpdW00L3NzZTIvbXVsXzEuYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3A2L3NzZTIvbXVsX2Jhc2VjYXNlLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3A2L3NzZTIvbXVsX2Jhc2VjYXNlLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Njg3NjI1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcDYvc3NlMi9tdWxfYmFzZWNhc2UuYXNtCkBAIC0wLDAgKzEsMzUgQEAKK2RubCAgSW50ZWwgUDYvU1NFMiBtcG5fbXVsX2Jhc2VjYXNlLgorCitkbmwgIENvcHlyaWdodCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fbXVsX2Jhc2VjYXNlKQoraW5jbHVkZV9tcG4oYHg4Ni9wZW50aXVtNC9zc2UyL211bF9iYXNlY2FzZS5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcDYvc3NlMi9wb3Bjb3VudC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wNi9zc2UyL3BvcGNvdW50LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzAyYjkzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcDYvc3NlMi9wb3Bjb3VudC5hc20KQEAgLTAsMCArMSwzNSBAQAorZG5sICBJbnRlbCBQNi9TU0UyIG1wbl9wb3Bjb3VudCAtLSBwb3B1bGF0aW9uIGNvdW50LgorCitkbmwgIENvcHlyaWdodCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fcG9wY291bnQpCitpbmNsdWRlX21wbihgeDg2L3BlbnRpdW00L3NzZTIvcG9wY291bnQuYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3A2L3NzZTIvc3FyX2Jhc2VjYXNlLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3A2L3NzZTIvc3FyX2Jhc2VjYXNlLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmI1NzRiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcDYvc3NlMi9zcXJfYmFzZWNhc2UuYXNtCkBAIC0wLDAgKzEsMzUgQEAKK2RubCAgSW50ZWwgUDYvU1NFMiBtcG5fc3FyX2Jhc2VjYXNlLgorCitkbmwgIENvcHlyaWdodCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fc3FyX2Jhc2VjYXNlKQoraW5jbHVkZV9tcG4oYHg4Ni9wZW50aXVtNC9zc2UyL3Nxcl9iYXNlY2FzZS5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcDYvc3NlMi9zdWJtdWxfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wNi9zc2UyL3N1Ym11bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWQ5NDBkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcDYvc3NlMi9zdWJtdWxfMS5hc20KQEAgLTAsMCArMSwzNSBAQAorZG5sICBJbnRlbCBQNi9TU0UyIG1wbl9zdWJtdWxfMS4KKworZG5sICBDb3B5cmlnaHQgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX3N1Ym11bF8xKQoraW5jbHVkZV9tcG4oYHg4Ni9wZW50aXVtNC9zc2UyL3N1Ym11bF8xLmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtL1JFQURNRSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW0vUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNTkzNmIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtL1JFQURNRQpAQCAtMCwwICsxLDE4MSBAQAorQ29weXJpZ2h0IDE5OTYsIDE5OTktMjAwMSwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKKworCisKKyAgICAgICAgICAgICAgICAgICBJTlRFTCBQRU5USVVNIFA1IE1QTiBTVUJST1VUSU5FUworCisKK1RoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIG1wbiBmdW5jdGlvbnMgb3B0aW1pemVkIGZvciBJbnRlbCBQZW50aXVtIChQNSxQNTQpCitwcm9jZXNzb3JzLiAgVGhlIG1teCBzdWJkaXJlY3RvcnkgaGFzIGFkZGl0aW9uYWwgY29kZSBmb3IgUGVudGl1bSB3aXRoIE1NWAorKFA1NSkuCisKKworU1RBVFVTCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3ljbGVzL2xpbWIKKworCW1wbl9hZGRfbi9zdWJfbiAgICAgICAgICAgIDIuMzc1CisKKwltcG5fbXVsXzEgICAgICAgICAgICAgICAgIDEyLjAKKwltcG5fYWRkL3N1Ym11bF8xICAgICAgICAgIDE0LjAKKworCW1wbl9tdWxfYmFzZWNhc2UgICAgICAgICAgMTQuMiBjeWNsZXMvY3Jvc3Nwcm9kdWN0IChhcHByb3gpCisKKwltcG5fc3FyX2Jhc2VjYXNlICAgICAgICAgICA4IGN5Y2xlcy9jcm9zc3Byb2R1Y3QgKGFwcHJveCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgMTUuNSBjeWNsZXMvdHJpYW5nbGVwcm9kdWN0IChhcHByb3gpCisKKwltcG5fbC9yc2hpZnQgICAgICAgICAgICAgICA1LjM3NSBub3JtYWwgKDYuMCBvbiBQNTQpCisJCQkJICAgMS44NzUgc3BlY2lhbCBzaGlmdCBieSAxIGJpdAorCisJbXBuX2RpdnJlbV8xICAgICAgICAgICAgICA0NC4wCisJbXBuX21vZF8xICAgICAgICAgICAgICAgICAyOC4wCisJbXBuX2RpdmV4YWN0X2J5MyAgICAgICAgICAxNS4wCisKKwltcG5fY29weWkvY29weWQgICAgICAgICAgICAxLjAKKworUGVudGl1bSBNTVggZ2V0cyB0aGUgZm9sbG93aW5nIGltcHJvdmVtZW50cworCisJbXBuX2wvcnNoaWZ0ICAgICAgICAgICAgICAgMS43NQorCisJbXBuX211bF8xICAgICAgICAgICAgICAgICAxMi4wIG5vcm1hbCwgNy4wIGZvciAxNi1iaXQgbXVsdGlwbGllcgorCisKK21wbl9hZGRfbiBhbmQgbXBuX3N1Yl9uIHJ1biBhdCBhc3ltcHRvdGljYWxseSAyIGN5Y2xlcy9saW1iLiAgRHVlIHRvIGxvb3AKK292ZXJoZWFkIGFuZCBvdGhlciBkZWxheXMgKGNhY2hlIHJlZmlsbD8pLCB0aGV5IHJ1biBhdCBvciBuZWFyIDIuNQorY3ljbGVzL2xpbWIuCisKK21wbl9tdWxfMSwgbXBuX2FkZG11bF8xLCBtcG5fc3VibXVsXzEgYWxsIHJ1biAxIGN5Y2xlIGZhc3RlciB0aGFuIHRoZXkKK3Nob3VsZC4gIEludGVsIGRvY3VtZW50YXRpb24gc2F5cyBhIG11bCBpbnN0cnVjdGlvbiBpcyAxMCBjeWNsZXMsIGJ1dCBpdAorbWVhc3VyZXMgOSBhbmQgdGhlIHJvdXRpbmVzIHVzaW5nIGl0IHJ1biBhcyA5LgorCisKKworUDU1IE1NWCBBTkQgWDg3CisKK1RoZSBjb3N0IG9mIHN3aXRjaGluZyBiZXR3ZWVuIE1NWCBhbmQgeDg3IGZsb2F0aW5nIHBvaW50IG9uIFA1NSBpcyBhYm91dCAxMDAKK2N5Y2xlcyAoZmxkMS9wb3IvZW1tcyBmb3IgaW5zdGFuY2UpLiAgSW4gb3JkZXIgdG8gYXZvaWQgdGhhdCB0aGUgdHdvIGFyZW4ndAorbWl4ZWQgYW5kIGN1cnJlbnRseSB0aGF0IG1lYW5zIHVzaW5nIE1NWCBhbmQgbm90IHg4Ny4KKworTU1YIG9mZmVycyBhIGJpZyBzcGVlZHVwIGZvciBsc2hpZnQgYW5kIHJzaGlmdCwgYW5kIGEgbmljZSBzcGVlZHVwIGZvcgorMTYtYml0IG11bHRpcGxpZXJzIGluIG1wbl9tdWxfMS4gIElmIGZhc3QgY29kZSB1c2luZyB4ODcgaXMgZm91bmQgdGhlbgorcGVyaGFwcyB0aGUgcHJlZmVyZW5jZSBmb3IgTU1YIHdpbGwgYmUgcmV2ZXJzZWQuCisKKworCisKK1A1NCBTSExETAorCittcG5fbHNoaWZ0IGFuZCBtcG5fcnNoaWZ0IHJ1biBhdCBhYm91dCA2IGN5Y2xlcy9saW1iIG9uIFA1IGFuZCBQNTQsIGJ1dCB0aGUKK2RvY3VtZW50YXRpb24gaW5kaWNhdGVzIHRoYXQgdGhleSBzaG91bGQgdGFrZSBvbmx5IDQzLzggPSA1LjM3NSBjeWNsZXMvbGltYiwKK29yIDUgY3ljbGVzL2xpbWIgYXN5bXB0b3RpY2FsbHkuICBUaGUgUDU1IHJ1bnMgdGhlbSBhdCB0aGUgZXhwZWN0ZWQgc3BlZWQuCisKK0l0IHNlZW1zIHRoYXQgb24gUDU0IGEgc2hsZGwgb3Igc2hyZGwgYWxsb3dzIHBhaXJpbmcgaW4gb25lIGZvbGxvd2luZyBjeWNsZSwKK2J1dCBub3QgdHdvLiAgRm9yIGV4YW1wbGUsIGJhY2sgdG8gYmFjayByZXBldGl0aW9ucyBvZiB0aGUgZm9sbG93aW5nCisKKwlzaGxkbCgJJWNsLCAlZWF4LCAlZWJ4KQorCXhvcmwJJWVkeCwgJWVkeAorCXhvcmwJJWVzaSwgJWVzaQorCitydW4gYXQgNSBjeWNsZXMsIGFzIGV4cGVjdGVkLCBidXQgcmVwZXRpdGlvbnMgb2YgdGhlIGZvbGxvd2luZyBydW4gYXQgNworY3ljbGVzLCB3aGVyZWFzIDYgd291bGQgYmUgZXhwZWN0ZWQgKGFuZCBpcyBhY2hpZXZlZCBvbiBQNTUpLAorCisJc2hsZGwoCSVjbCwgJWVheCwgJWVieCkKKwl4b3JsCSVlZHgsICVlZHgKKwl4b3JsCSVlc2ksICVlc2kKKwl4b3JsCSVlZGksICVlZGkKKwl4b3JsCSVlYnAsICVlYnAKKworVGhyZWUgeG9ybHMgcnVuIGF0IDcgY3ljbGVzIHRvbywgc28gaXQgZG9lc24ndCBzZWVtIHRvIGJlIGp1c3QgdGhhdCBwYWlyaW5nCitpbmhpYml0ZWQgaXMgb25seSBpbiB0aGUgc2Vjb25kIGZvbGxvd2luZyBjeWNsZSAob3Igc29tZXRoaW5nIGxpa2UgdGhhdCkuCisKK0F2b2lkaW5nIHRoaXMgcHJvYmxlbSB3b3VsZCBicmluZyBQNTQgc2hpZnRzIGRvd24gZnJvbSA2LjAgYy9sIHRvIDUuNSB3aXRoIGEKK3BhdHRlcm4gb2Ygc2hpZnQsIDIgbG9hZHMsIHNoaWZ0LCAyIHN0b3Jlcywgc2hpZnQsIGV0Yy4gIEEgc3RhcnQgaGFzIGJlZW4KK21hZGUgb24gc29tZXRoaW5nIGxpa2UgdGhhdCwgYnV0IGl0J3Mgbm90IHlldCBjb21wbGV0ZS4KKworCisKKworT1RIRVIgTk9URVMKKworUHJlZmV0Y2hpbmcgRGVzdGluYXRpb25zCisKKyAgICBQZW50aXVtIGRvZXNuJ3QgYWxsb2NhdGUgY2FjaGUgbGluZXMgb24gd3JpdGVzLCB1bmxpa2UgbW9zdCBvdGhlciBtb2Rlcm4KKyAgICBwcm9jZXNzb3JzLiAgU2luY2UgdGhlIGZ1bmN0aW9ucyBpbiB0aGUgbXBuIGNsYXNzIGRvIGFycmF5IHdyaXRlcywgd2UKKyAgICBoYXZlIHRvIGhhbmRsZSBhbGxvY2F0aW5nIHRoZSBkZXN0aW5hdGlvbiBjYWNoZSBsaW5lcyBieSByZWFkaW5nIGEgd29yZAorICAgIGZyb20gaXQgaW4gdGhlIGxvb3BzLCB0byBhY2hpZXZlIHRoZSBiZXN0IHBlcmZvcm1hbmNlLgorCitQcmVmZXRjaGluZyBTb3VyY2VzCisKKyAgICBQcmVmZXRjaGluZyBvZiBzb3VyY2VzIGlzIHBvaW50bGVzcyBzaW5jZSB0aGVyZSdzIG5vIG91dC1vZi1vcmRlciBsb2Fkcy4KKyAgICBBbnkgbG9hZCBpbnN0cnVjdGlvbiBibG9ja3MgdW50aWwgdGhlIGxpbmUgaXMgYnJvdWdodCB0byBMMSwgc28gaXQgbWF5CisgICAgYXMgd2VsbCBiZSB0aGUgbG9hZCB0aGF0IHdhbnRzIHRoZSBkYXRhIHdoaWNoIGJsb2Nrcy4KKworRGF0YSBDYWNoZSBCYW5rIENsYXNoZXMKKworICAgIFBhaXJpbmcgb2YgbWVtb3J5IG9wZXJhdGlvbnMgcmVxdWlyZXMgdGhhdCB0aGUgdHdvIGlzc3VlZCBvcGVyYXRpb25zCisgICAgcmVmZXIgdG8gZGlmZmVyZW50IGNhY2hlIGJhbmtzIChpZS4gZGlmZmVyZW50IGFkZHJlc3NlcyBtb2R1bG8gMzIKKyAgICBieXRlcykuICBUaGUgc2ltcGxlc3Qgd2F5IHRvIGVuc3VyZSB0aGlzIGlzIHRvIHJlYWQvd3JpdGUgdHdvIHdvcmRzIGZyb20KKyAgICB0aGUgc2FtZSBvYmplY3QuICBJZiB3ZSBtYWtlIG9wZXJhdGlvbnMgb24gZGlmZmVyZW50IG9iamVjdHMsIHRoZXkgbWlnaHQKKyAgICBvciBtaWdodCBub3QgYmUgdG8gdGhlIHNhbWUgY2FjaGUgYmFuay4KKworUElDICVlaXAgRmV0Y2hpbmcKKworICAgIEEgc2ltcGxlIGNhbGwgJCs1IGFuZCBwb3BsIGNhbiBiZSB1c2VkIHRvIGdldCAlZWlwLCB0aGVyZSdzIG5vIG5lZWQgdG8KKyAgICBiYWxhbmNlIGNhbGxzIGFuZCByZXR1cm5zIHNpbmNlIFA1IGRvZXNuJ3QgaGF2ZSBhbnkgcmV0dXJuIHN0YWNrIGJyYW5jaAorICAgIHByZWRpY3Rpb24uCisKK0Zsb2F0IE11bHRpcGxpZXMKKworICAgIGZtdWwgaXMgcGFpcmFibGUgYW5kIGNhbiBiZSBpc3N1ZWQgZXZlcnkgMiBjeWNsZXMgKHdpdGggYSA0IGN5Y2xlCisgICAgbGF0ZW5jeSBmb3IgZGF0YSByZWFkeSB0byB1c2UpLiAgVGhpcyBpcyBhIGxvdCBiZXR0ZXIgdGhhbiBpbnRlZ2VyIG11bGwKKyAgICBvciBpbXVsbCBhdCA5IGN5Y2xlcyBub24tcGFpcmluZy4gIFVuZm9ydHVuYXRlbHkgdGhlIGFkdmFudGFnZSBpcworICAgIHF1aWNrbHkgZWF0ZW4gYXdheSBieSBuZWVkaW5nIHRvIHRocm93IGRhdGEgdGhyb3VnaCBtZW1vcnkgYmFjayB0byB0aGUKKyAgICBpbnRlZ2VyIHJlZ2lzdGVycyB0byBhZGp1c3QgZm9yIGZpbGQgYW5kIGZpc3QgYmVpbmcgc2lnbmVkLCBhbmQgdG8gZG8KKyAgICB0aGluZ3MgbGlrZSBwcm9wYWdhdGluZyBjYXJyeSBiaXRzLgorCisKKworCisKK1JFRkVSRU5DRVMKKworIkludGVsIEFyY2hpdGVjdHVyZSBPcHRpbWl6YXRpb24gTWFudWFsIiwgMTk5Nywgb3JkZXIgbnVtYmVyIDI0MjgxNi4gIFRoaXMKK2lzIG1vc3RseSBhYm91dCBQNSwgdGhlIHBhcnRzIGFib3V0IFA2IGFyZW4ndCByZWxldmFudC4gIEF2YWlsYWJsZSBvbi1saW5lOgorCisgICAgICAgIGh0dHA6Ly9kb3dubG9hZC5pbnRlbC5jb20vZGVzaWduL1BlbnRpdW1JSS9tYW51YWxzLzI0MjgxNi5odG0KKworCisKKy0tLS0tLS0tLS0tLS0tLS0KK0xvY2FsIHZhcmlhYmxlczoKK21vZGU6IHRleHQKK2ZpbGwtY29sdW1uOiA3NgorRW5kOgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bS9hb3JzX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bS9hb3JzX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZWJmYjkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtL2FvcnNfbi5hc20KQEAgLTAsMCArMSwyMDMgQEAKK2RubCAgSW50ZWwgUGVudGl1bSBtcG5fYWRkX24vbXBuX3N1Yl9uIC0tIG1wbiBhZGRpdGlvbiBhbmQgc3VidHJhY3Rpb24uCisKK2RubCAgQ29weXJpZ2h0IDE5OTIsIDE5OTQtMTk5NiwgMTk5OSwgMjAwMCwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MgUDU6IDIuMzc1IGN5Y2xlcy9saW1iCisKKworaWZkZWYoYE9QRVJBVElPTl9hZGRfbicsYAorCWRlZmluZShNNF9pbnN0LCAgICAgICAgYWRjbCkKKwlkZWZpbmUoTTRfZnVuY3Rpb25fbiwgIG1wbl9hZGRfbikKKwlkZWZpbmUoTTRfZnVuY3Rpb25fbmMsIG1wbl9hZGRfbmMpCisKKycsYGlmZGVmKGBPUEVSQVRJT05fc3ViX24nLGAKKwlkZWZpbmUoTTRfaW5zdCwgICAgICAgIHNiYmwpCisJZGVmaW5lKE00X2Z1bmN0aW9uX24sICBtcG5fc3ViX24pCisJZGVmaW5lKE00X2Z1bmN0aW9uX25jLCBtcG5fc3ViX25jKQorCisnLGBtNF9lcnJvcihgTmVlZCBPUEVSQVRJT05fYWRkX24gb3IgT1BFUkFUSU9OX3N1Yl9uCisnKScpJykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fYWRkX24gbXBuX2FkZF9uYyBtcG5fc3ViX24gbXBuX3N1Yl9uYykKKworCitDIG1wX2xpbWJfdCBNNF9mdW5jdGlvbl9uIChtcF9wdHIgZHN0LCBtcF9zcmNwdHIgc3JjMSwgbXBfc3JjcHRyIHNyYzIsCitDICAgICAgICAgICAgICAgICAgICAgICAgICBtcF9zaXplX3Qgc2l6ZSk7CitDIG1wX2xpbWJfdCBNNF9mdW5jdGlvbl9uYyAobXBfcHRyIGRzdCwgbXBfc3JjcHRyIHNyYzEsIG1wX3NyY3B0ciBzcmMyLAorQyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wX3NpemVfdCBzaXplLCBtcF9saW1iX3QgY2FycnkpOworCitkZWZmcmFtZShQQVJBTV9DQVJSWSwyMCkKK2RlZmZyYW1lKFBBUkFNX1NJWkUsIDE2KQorZGVmZnJhbWUoUEFSQU1fU1JDMiwgMTIpCitkZWZmcmFtZShQQVJBTV9TUkMxLCA4KQorZGVmZnJhbWUoUEFSQU1fRFNULCAgNCkKKworCVRFWFQKKwlBTElHTig4KQorUFJPTE9HVUUoTTRfZnVuY3Rpb25fbmMpCisKKwlwdXNobAklZWRpCisJcHVzaGwJJWVzaQorCXB1c2hsCSVlYngKKwlwdXNobAklZWJwCitkZWZsaXQoYEZSQU1FJywxNikKKworCW1vdmwJUEFSQU1fRFNULCVlZGkKKwltb3ZsCVBBUkFNX1NSQzEsJWVzaQorCW1vdmwJUEFSQU1fU1JDMiwlZWJwCisJbW92bAlQQVJBTV9TSVpFLCVlY3gKKworCW1vdmwJKCVlYnApLCVlYngKKworCWRlY2wJJWVjeAorCW1vdmwJJWVjeCwlZWR4CisJc2hybAkkMywlZWN4CisJYW5kbAkkNywlZWR4CisJdGVzdGwJJWVjeCwlZWN4CQlDIHplcm8gY2FycnkgZmxhZworCWp6CUwoZW5kZ28pCisKKwlwdXNobAklZWR4CitGUkFNRV9wdXNobCgpCisJbW92bAlQQVJBTV9DQVJSWSwlZWF4CisJc2hybAklZWF4CQkJQyBzaGlmdCBiaXQgMCBpbnRvIGNhcnJ5CisJam1wCUwob29wKQorCitMKGVuZGdvKToKK2RlZmxpdChgRlJBTUUnLDE2KQorCW1vdmwJUEFSQU1fQ0FSUlksJWVheAorCXNocmwJJWVheAkJCUMgc2hpZnQgYml0IDAgaW50byBjYXJyeQorCWptcAlMKGVuZCkKKworRVBJTE9HVUUoKQorCisKKwlBTElHTig4KQorUFJPTE9HVUUoTTRfZnVuY3Rpb25fbikKKworCXB1c2hsCSVlZGkKKwlwdXNobAklZXNpCisJcHVzaGwJJWVieAorCXB1c2hsCSVlYnAKK2RlZmxpdChgRlJBTUUnLDE2KQorCisJbW92bAlQQVJBTV9EU1QsJWVkaQorCW1vdmwJUEFSQU1fU1JDMSwlZXNpCisJbW92bAlQQVJBTV9TUkMyLCVlYnAKKwltb3ZsCVBBUkFNX1NJWkUsJWVjeAorCisJbW92bAkoJWVicCksJWVieAorCisJZGVjbAklZWN4CisJbW92bAklZWN4LCVlZHgKKwlzaHJsCSQzLCVlY3gKKwlhbmRsCSQ3LCVlZHgKKwl0ZXN0bAklZWN4LCVlY3gJCUMgemVybyBjYXJyeSBmbGFnCisJanoJTChlbmQpCisJcHVzaGwJJWVkeAorRlJBTUVfcHVzaGwoKQorCisJQUxJR04oOCkKK0wob29wKToJbW92bAkyOCglZWRpKSwlZWF4CQlDIGZldGNoIGRlc3RpbmF0aW9uIGNhY2hlIGxpbmUKKwlsZWFsCTMyKCVlZGkpLCVlZGkKKworTCgxKToJbW92bAkoJWVzaSksJWVheAorCW1vdmwJNCglZXNpKSwlZWR4CisJTTRfaW5zdAklZWJ4LCVlYXgKKwltb3ZsCTQoJWVicCksJWVieAorCU00X2luc3QJJWVieCwlZWR4CisJbW92bAk4KCVlYnApLCVlYngKKwltb3ZsCSVlYXgsLTMyKCVlZGkpCisJbW92bAklZWR4LC0yOCglZWRpKQorCitMKDIpOgltb3ZsCTgoJWVzaSksJWVheAorCW1vdmwJMTIoJWVzaSksJWVkeAorCU00X2luc3QJJWVieCwlZWF4CisJbW92bAkxMiglZWJwKSwlZWJ4CisJTTRfaW5zdAklZWJ4LCVlZHgKKwltb3ZsCTE2KCVlYnApLCVlYngKKwltb3ZsCSVlYXgsLTI0KCVlZGkpCisJbW92bAklZWR4LC0yMCglZWRpKQorCitMKDMpOgltb3ZsCTE2KCVlc2kpLCVlYXgKKwltb3ZsCTIwKCVlc2kpLCVlZHgKKwlNNF9pbnN0CSVlYngsJWVheAorCW1vdmwJMjAoJWVicCksJWVieAorCU00X2luc3QJJWVieCwlZWR4CisJbW92bAkyNCglZWJwKSwlZWJ4CisJbW92bAklZWF4LC0xNiglZWRpKQorCW1vdmwJJWVkeCwtMTIoJWVkaSkKKworTCg0KToJbW92bAkyNCglZXNpKSwlZWF4CisJbW92bAkyOCglZXNpKSwlZWR4CisJTTRfaW5zdAklZWJ4LCVlYXgKKwltb3ZsCTI4KCVlYnApLCVlYngKKwlNNF9pbnN0CSVlYngsJWVkeAorCW1vdmwJMzIoJWVicCksJWVieAorCW1vdmwJJWVheCwtOCglZWRpKQorCW1vdmwJJWVkeCwtNCglZWRpKQorCisJbGVhbAkzMiglZXNpKSwlZXNpCisJbGVhbAkzMiglZWJwKSwlZWJwCisJZGVjbAklZWN4CisJam56CUwob29wKQorCisJcG9wbAklZWR4CitGUkFNRV9wb3BsKCkKK0woZW5kKToKKwlkZWNsCSVlZHgJCQlDIHRlc3QgJWVkeCB3L28gY2xvYmJlcmluZyBjYXJyeQorCWpzCUwoZW5kMikKKwlpbmNsCSVlZHgKK0wob29wMik6CisJbGVhbAk0KCVlZGkpLCVlZGkKKwltb3ZsCSglZXNpKSwlZWF4CisJTTRfaW5zdAklZWJ4LCVlYXgKKwltb3ZsCTQoJWVicCksJWVieAorCW1vdmwJJWVheCwtNCglZWRpKQorCWxlYWwJNCglZXNpKSwlZXNpCisJbGVhbAk0KCVlYnApLCVlYnAKKwlkZWNsCSVlZHgKKwlqbnoJTChvb3AyKQorTChlbmQyKToKKwltb3ZsCSglZXNpKSwlZWF4CisJTTRfaW5zdAklZWJ4LCVlYXgKKwltb3ZsCSVlYXgsKCVlZGkpCisKKwlzYmJsCSVlYXgsJWVheAorCW5lZ2wJJWVheAorCisJcG9wbAklZWJwCisJcG9wbAklZWJ4CisJcG9wbAklZXNpCisJcG9wbAklZWRpCisJcmV0CisKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW0vYW9yc211bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW0vYW9yc211bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODNjYzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bS9hb3JzbXVsXzEuYXNtCkBAIC0wLDAgKzEsMTQ0IEBACitkbmwgIEludGVsIFBlbnRpdW0gbXBuX2FkZG11bF8xIC0tIG1wbiBieSBsaW1iIG11bHRpcGxpY2F0aW9uLgorCitkbmwgIENvcHlyaWdodCAxOTkyLCAxOTk0LCAxOTk2LCAxOTk5LCAyMDAwLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK2RubCAgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQyBQNTogMTQuMCBjeWNsZXMvbGltYgorCisKK2lmZGVmKGBPUEVSQVRJT05fYWRkbXVsXzEnLCBgCisgICAgICBkZWZpbmUoTTRfaW5zdCwgICAgICAgIGFkZGwpCisgICAgICBkZWZpbmUoTTRfZnVuY3Rpb25fMSwgIG1wbl9hZGRtdWxfMSkKKyAgICAgIGRlZmluZShNNF9mdW5jdGlvbl8xYywgbXBuX2FkZG11bF8xYykKKworJyxgaWZkZWYoYE9QRVJBVElPTl9zdWJtdWxfMScsIGAKKyAgICAgIGRlZmluZShNNF9pbnN0LCAgICAgICAgc3VibCkKKyAgICAgIGRlZmluZShNNF9mdW5jdGlvbl8xLCAgbXBuX3N1Ym11bF8xKQorICAgICAgZGVmaW5lKE00X2Z1bmN0aW9uXzFjLCBtcG5fc3VibXVsXzFjKQorCisnLGBtNF9lcnJvcihgTmVlZCBPUEVSQVRJT05fYWRkbXVsXzEgb3IgT1BFUkFUSU9OX3N1Ym11bF8xCisnKScpJykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fYWRkbXVsXzEgbXBuX2FkZG11bF8xYyBtcG5fc3VibXVsXzEgbXBuX3N1Ym11bF8xYykKKworCitDIG1wX2xpbWJfdCBtcG5fYWRkbXVsXzEgKG1wX3B0ciBkc3QsIG1wX3NyY3B0ciBzcmMsIG1wX3NpemVfdCBzaXplLAorQyAgICAgICAgICAgICAgICAgICAgICAgICBtcF9saW1iX3QgbXVsdCk7CitDIG1wX2xpbWJfdCBtcG5fYWRkbXVsXzFjIChtcF9wdHIgZHN0LCBtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSwKK0MgICAgICAgICAgICAgICAgICAgICAgICAgIG1wX2xpbWJfdCBtdWx0LCBtcF9saW1iX3QgY2FycnkpOworQworQyBtcF9saW1iX3QgbXBuX3N1Ym11bF8xIChtcF9wdHIgZHN0LCBtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSwKK0MgICAgICAgICAgICAgICAgICAgICAgICAgbXBfbGltYl90IG11bHQpOworQyBtcF9saW1iX3QgbXBuX3N1Ym11bF8xYyAobXBfcHRyIGRzdCwgbXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUsCitDICAgICAgICAgICAgICAgICAgICAgICAgICBtcF9saW1iX3QgbXVsdCwgbXBfbGltYl90IGNhcnJ5KTsKK0MKKworZGVmZnJhbWUoUEFSQU1fQ0FSUlksICAgICAyMCkKK2RlZmZyYW1lKFBBUkFNX01VTFRJUExJRVIsMTYpCitkZWZmcmFtZShQQVJBTV9TSVpFLCAgICAgIDEyKQorZGVmZnJhbWUoUEFSQU1fU1JDLCAgICAgICA4KQorZGVmZnJhbWUoUEFSQU1fRFNULCAgICAgICA0KQorCisJVEVYVAorCisJQUxJR04oOCkKK1BST0xPR1VFKE00X2Z1bmN0aW9uXzFjKQorZGVmbGl0KGBGUkFNRScsMCkKKworCW1vdmwJUEFSQU1fQ0FSUlksICVlY3gKKwlwdXNobAklZXNpCQlGUkFNRV9wdXNobCgpCisKKwlqbXAJTChzdGFydF8xYykKKworRVBJTE9HVUUoKQorCisKKwlBTElHTig4KQorUFJPTE9HVUUoTTRfZnVuY3Rpb25fMSkKK2RlZmxpdChgRlJBTUUnLDApCisKKwl4b3JsCSVlY3gsICVlY3gKKwlwdXNobAklZXNpCQlGUkFNRV9wdXNobCgpCisKK0woc3RhcnRfMWMpOgorCW1vdmwJUEFSQU1fU1JDLCAlZXNpCisJbW92bAlQQVJBTV9TSVpFLCAlZWF4CisKKwlwdXNobAklZWRpCQlGUkFNRV9wdXNobCgpCisJcHVzaGwJJWVieAkJRlJBTUVfcHVzaGwoKQorCisJbW92bAlQQVJBTV9EU1QsICVlZGkKKwlsZWFsCS0xKCVlYXgpLCAlZWJ4CQlDIHNpemUtMQorCisJbGVhbAkoJWVzaSwlZWF4LDQpLCAlZXNpCisJeG9ybAkkLTEsICVlYngJCUMgLXNpemUsIGFuZCBjbGVhciBjYXJyeQorCisJbGVhbAkoJWVkaSwlZWF4LDQpLCAlZWRpCisKK0wodG9wKToKKwlDIGVheAorCUMgZWJ4CWNvdW50ZXIsIG5lZ2F0aXZlCisJQyBlY3gJY2FycnkKKwlDIGVkeAorCUMgZXNpCXNyYyBlbmQKKwlDIGVkaQlkc3QgZW5kCisJQyBlYnAKKworCWFkY2wJJDAsICVlY3gKKwltb3ZsCSglZXNpLCVlYngsNCksICVlYXgKKworCW11bGwJUEFSQU1fTVVMVElQTElFUgorCisJYWRkbAklZWN4LCAlZWF4CisJbW92bAkoJWVkaSwlZWJ4LDQpLCAlZWN4CisKKwlhZGNsCSQwLCAlZWR4CisJTTRfaW5zdAklZWF4LCAlZWN4CisKKwltb3ZsCSVlY3gsICglZWRpLCVlYngsNCkKKwlpbmNsCSVlYngKKworCW1vdmwJJWVkeCwgJWVjeAorCWpueglMKHRvcCkKKworCisJYWRjbAkkMCwgJWVjeAorCXBvcGwJJWVieAorCisJbW92bAklZWN4LCAlZWF4CisJcG9wbAklZWRpCisKKwlwb3BsCSVlc2kKKworCXJldAorCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtL2JkaXZfcV8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW0vYmRpdl9xXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyYzRmNTgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtL2JkaXZfcV8xLmFzbQpAQCAtMCwwICsxLDI2NiBAQAorZG5sICBJbnRlbCBQZW50aXVtIG1wbl9kaXZleGFjdF8xIC0tIG1wbiBieSBsaW1iIGV4YWN0IGRpdmlzaW9uLgorCitkbmwgIFJlYXJyYW5nZWQgZnJvbSBtcG4veDg2L3BlbnRpdW0vZGl2ZV8xLmFzbSBieSBNYXJjbyBCb2RyYXRvLgorCitkbmwgIENvcHlyaWdodCAyMDAxLCAyMDAyLCAyMDExLCAyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQyAgICAgICAgIGRpdmlzb3IKK0MgICAgICAgb2RkICAgZXZlbgorQyBQNTQ6ICAyNC41ICAzMC41ICAgY3ljbGVzL2xpbWIKK0MgUDU1OiAgMjMuMCAgMjguMAorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9iZGl2X3FfMSBtcG5fcGkxX2JkaXZfcV8xKQorCitDIFRoZSBQNTUgc3BlZWRzIG5vdGVkIGFib3ZlLCAyMyBjeWNsZXMgb2RkIG9yIDI4IGN5Y2xlcyBldmVuLCBhcmUgYXMKK0MgZXhwZWN0ZWQuICBPbiBQNTQgaW4gdGhlIGV2ZW4gY2FzZSB0aGUgc2hyZGwgcGFpcmluZyBub25zZW5zZSAoc2VlCitDIG1wbi94ODYvcGVudGl1bS9SRUFETUUpIGNvc3RzIDEgY3ljbGUsIGJ1dCBpdCdzIG5vdCBjbGVhciB3aHkgdGhlcmUncyBhCitDIGZ1cnRoZXIgMS41IHNsb3dkb3duIGZvciBib3RoIG9kZCBhbmQgZXZlbi4KKworZGVmZnJhbWUoUEFSQU1fU0hJRlQsICAyNCkKK2RlZmZyYW1lKFBBUkFNX0lOVkVSU0UsMjApCitkZWZmcmFtZShQQVJBTV9ESVZJU09SLDE2KQorZGVmZnJhbWUoUEFSQU1fU0laRSwgICAxMikKK2RlZmZyYW1lKFBBUkFNX1NSQywgICAgOCkKK2RlZmZyYW1lKFBBUkFNX0RTVCwgICAgNCkKKworZG5sICByZS11c2UgcGFyYW1ldGVyIHNwYWNlCitkZWZpbmUoVkFSX0lOVkVSU0UsYFBBUkFNX0RTVCcpCisKKwlURVhUCisKKwlBTElHTigzMikKK0MgbXBfbGltYl90IG1wbl9iZGl2X3FfMSAobXBfcHRyIGRzdCwgbXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUsCitDICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBfbGltYl90IGRpdmlzb3IpOworQworUFJPTE9HVUUobXBuX2JkaXZfcV8xKQorZGVmbGl0KGBGUkFNRScsMCkKKworCW1vdmwJJC0xLCAlZWN4CisJbW92bAlQQVJBTV9ESVZJU09SLCAlZWF4CisKK0woc3RyaXBfdHdvcyk6CisJQVNTRVJUKG56LCBgb3JsICVlYXgsICVlYXgnKQorCXNocmwJJWVheAorCWluY2wJJWVjeAkJCUMgc2hpZnQgY291bnQKKworCWpuYwlMKHN0cmlwX3R3b3MpCisKKwlsZWFsCTEoJWVheCwlZWF4KSwgJWVkeAlDIGQKKwlhbmRsCSQxMjcsICVlYXgJCUMgZC8yLCA3IGJpdHMKKworCXB1c2hsCSVlYngJCUZSQU1FX3B1c2hsKCkKKwlwdXNobAklZWJwCQlGUkFNRV9wdXNobCgpCisKK2lmZGVmKGBQSUMnLGAKK2lmZGVmKGBEQVJXSU4nLGAKKwlMRUEoCWJpbnZlcnRfbGltYl90YWJsZSwgJWVicCkKKwltb3Z6YmwJKCVlYXgsJWVicCksICVlYXgKKycsYAorCWNhbGwJTChoZXJlKQorTChoZXJlKToKKwlwb3BsCSVlYnAJCQlDIGVpcAorCisJYWRkbAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfK1suLUwoaGVyZSldLCAlZWJwCisJQyBBR0kKKwltb3ZsCWJpbnZlcnRfbGltYl90YWJsZUBHT1QoJWVicCksICVlYnAKKwlDIEFHSQorCW1vdnpibAkoJWVheCwlZWJwKSwgJWVheAorJykKKycsYAorCitkbmwgbm9uLVBJQworCW1vdnpibAliaW52ZXJ0X2xpbWJfdGFibGUoJWVheCksICVlYXgJQyBpbnYgOCBiaXRzCisnKQorCisJbW92bAklZWF4LCAlZWJwCQlDIGludgorCWFkZGwJJWVheCwgJWVheAkJQyAyKmludgorCisJaW11bGwJJWVicCwgJWVicAkJQyBpbnYqaW52CisKKwlpbXVsbAklZWR4LCAlZWJwCQlDIGludippbnYqZAorCisJc3VibAklZWJwLCAlZWF4CQlDIGludiA9IDIqaW52IC0gaW52KmludipkCisJbW92bAlQQVJBTV9TSVpFLCAlZWJ4CisKKwltb3ZsCSVlYXgsICVlYnAKKwlhZGRsCSVlYXgsICVlYXgJCUMgMippbnYKKworCWltdWxsCSVlYnAsICVlYnAJCUMgaW52KmludgorCisJaW11bGwJJWVkeCwgJWVicAkJQyBpbnYqaW52KmQKKworCXN1YmwJJWVicCwgJWVheAkJQyBpbnYgPSAyKmludiAtIGludippbnYqZAorCW1vdmwJJWVkeCwgUEFSQU1fRElWSVNPUglDIGQgd2l0aG91dCB0d29zCisKKwlBU1NFUlQoZSxgCUMgZXhwZWN0IGQqaW52ID09IDEgbW9kIDJeR01QX0xJTUJfQklUUworCXB1c2hsCSVlYXgJRlJBTUVfcHVzaGwoKQorCWltdWxsCVBBUkFNX0RJVklTT1IsICVlYXgKKwljbXBsCSQxLCAlZWF4CisJcG9wbAklZWF4CUZSQU1FX3BvcGwoKScpCisKKwlqbXAJTChjb21tb24pCitFUElMT0dVRSgpCisKK0MgbXBfbGltYl90CitDIG1wbl9waTFfYmRpdl9xXzEgKG1wX3B0ciBkc3QsIG1wX3NyY3B0ciBzcmMsIG1wX3NpemVfdCBzaXplLCBtcF9saW1iX3QgZGl2aXNvciwKK0MJCSAgICBtcF9saW1iX3QgaW52ZXJzZSwgaW50IHNoaWZ0KQorCUFMSUdOKDMyKQorUFJPTE9HVUUobXBuX3BpMV9iZGl2X3FfMSkKK2RlZmxpdChgRlJBTUUnLDApCisKKwltb3ZsCVBBUkFNX1NISUZULCAlZWN4CisKKwlwdXNobAklZWJ4CQlGUkFNRV9wdXNobCgpCisJcHVzaGwJJWVicAkJRlJBTUVfcHVzaGwoKQorCisJbW92bAlQQVJBTV9TSVpFLCAlZWJ4CisJbW92bAlQQVJBTV9JTlZFUlNFLCAlZWF4CisKK0woY29tbW9uKToKKwlwdXNobAklZXNpCQlGUkFNRV9wdXNobCgpCisJcHVzaAklZWRpCQlGUkFNRV9wdXNobCgpCisKKwltb3ZsCVBBUkFNX1NSQywgJWVzaQorCW1vdmwJUEFSQU1fRFNULCAlZWRpCisJbW92bAklZWF4LCBWQVJfSU5WRVJTRQorCisJbGVhbAkoJWVzaSwlZWJ4LDQpLCAlZXNpCUMgc3JjIGVuZAorCWxlYWwJKCVlZGksJWVieCw0KSwgJWVkaQlDIGRzdCBlbmQKKworCW5lZ2wJJWVieAkJCUMgLXNpemUKKworCXhvcmwJJWVicCwgJWVicAkJQyBpbml0aWFsIGNhcnJ5IGJpdAorCisJb3JsCSVlY3gsICVlY3gJCUMgc2hpZnQKKwltb3ZsCSglZXNpLCVlYngsNCksICVlYXgJQyBzcmMgbG93IGxpbWIKKwlqeglMKG9kZF9lbnRyeSkKKworCXhvcmwJJWVkeCwgJWVkeAkJQyBpbml0aWFsIGNhcnJ5IGxpbWIgKGZvciBldmVuLCBpZiBvbmUpCisJaW5jbAklZWJ4CisJanoJTChvbmUpCisKKwltb3ZsCSglZXNpLCVlYngsNCksICVlZHgJQyBzcmMgc2Vjb25kIGxpbWIgKGZvciBldmVuKQorCXNocmRsKAklY2wsICVlZHgsICVlYXgpCisKKwlqbXAJTChldmVuX2VudHJ5KQorCisKKwlBTElHTig4KQorTChvZGRfdG9wKToKKwlDIGVheAlzY3JhdGNoCisJQyBlYngJY291bnRlciwgbGltYnMsIG5lZ2F0aXZlCisJQyBlY3gKKwlDIGVkeAorCUMgZXNpCXNyYyBlbmQKKwlDIGVkaQlkc3QgZW5kCisJQyBlYnAJY2FycnkgYml0LCAwIG9yIC0xCisKKwltdWxsCVBBUkFNX0RJVklTT1IKKworCW1vdmwJKCVlc2ksJWVieCw0KSwgJWVheAorCXN1YmwJJWVicCwgJWVkeAorCisJc3VibAklZWR4LCAlZWF4CisKKwlzYmJsCSVlYnAsICVlYnAKKworTChvZGRfZW50cnkpOgorCWltdWxsCVZBUl9JTlZFUlNFLCAlZWF4CisKKwltb3ZsCSVlYXgsICglZWRpLCVlYngsNCkKKworCWluY2wJJWVieAorCWpueglMKG9kZF90b3ApCisKKwlwb3BsCSVlZGkKKwlwb3BsCSVlc2kKKworCXBvcGwJJWVicAorCXBvcGwJJWVieAorCisJcmV0CisKK0woZXZlbl90b3ApOgorCUMgZWF4CXNjcmF0Y2gKKwlDIGVieAljb3VudGVyLCBsaW1icywgbmVnYXRpdmUKKwlDIGVjeAl0d29zCisJQyBlZHgKKwlDIGVzaQlzcmMgZW5kCisJQyBlZGkJZHN0IGVuZAorCUMgZWJwCWNhcnJ5IGJpdCwgMCBvciAtMQorCisJbXVsbAlQQVJBTV9ESVZJU09SCisKKwlzdWJsCSVlYnAsICVlZHgJCUMgY2FycnkgYml0CisJbW92bAktNCglZXNpLCVlYngsNCksICVlYXgJQyBzcmMgbGltYgorCisJbW92bAkoJWVzaSwlZWJ4LDQpLCAlZWJwCUMgYW5kIG9uZSBhYm92ZSBpdAorCisJc2hyZGwoCSVjbCwgJWVicCwgJWVheCkKKworCXN1YmwJJWVkeCwgJWVheAkJQyBjYXJyeSBsaW1iCisKKwlzYmJsCSVlYnAsICVlYnAKKworTChldmVuX2VudHJ5KToKKwlpbXVsbAlWQVJfSU5WRVJTRSwgJWVheAorCisJbW92bAklZWF4LCAtNCglZWRpLCVlYngsNCkKKwlpbmNsCSVlYngKKworCWpueglMKGV2ZW5fdG9wKQorCisJbXVsbAlQQVJBTV9ESVZJU09SCisKKwltb3ZsCS00KCVlc2kpLCAlZWF4CQlDIHNyYyBoaWdoIGxpbWIKKwlzdWJsCSVlYnAsICVlZHgKKworTChvbmUpOgorCXNocmwJJWNsLCAlZWF4CisKKwlzdWJsCSVlZHgsICVlYXgJCUMgbm8gY2FycnkgaWYgZGl2aXNpb24gaXMgZXhhY3QKKworCWltdWxsCVZBUl9JTlZFUlNFLCAlZWF4CisKKwltb3ZsCSVlYXgsIC00KCVlZGkpCQlDIGRzdCBoaWdoIGxpbWIKKwlub3AJCQkJQyBwcm90ZWN0IGFnYWluc3QgY2FjaGUgYmFuayBjbGFzaAorCisJcG9wbAklZWRpCisJcG9wbAklZXNpCisKKwlwb3BsCSVlYnAKKwlwb3BsCSVlYngKKworCXJldAorCitFUElMT0dVRSgpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW0vY29tLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW0vY29tLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDgwNTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bS9jb20uYXNtCkBAIC0wLDAgKzEsMTgxIEBACitkbmwgIEludGVsIFBlbnRpdW0gbXBuX2NvbSAtLSBtcG4gb25lcyBjb21wbGVtZW50LgorCitkbmwgIENvcHlyaWdodCAxOTk2LCAyMDAxLCAyMDAyLCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQyBQNTogMS43NSBjeWNsZXMvbGltYgorCisKK05BSUxTX1NVUFBPUlQoMC0zMSkKKworCitDIHZvaWQgbXBuX2NvbSAobXBfcHRyIGRzdCwgbXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUpOworQworQyBUaGlzIGNvZGUgaXMgc2ltaWxhciB0byBtcG5fY29weWksIGJhc2ljYWxseSB0aGVyZSdzIGp1c3Qgc29tZSAieG9ybAorQyAkR01QX05VTUJfTUFTSyJzIGluc2VydGVkLgorQworQyBBbHRlcm5hdGl2ZXM6CitDCitDIE9uIFA1NSBzb21lIE1NWCBjb2RlIGNvdWxkIGJlIDEuMjUgYy9sICg4IGxpbWIgdW5yb2xsZWQpIGlmIHNyYyBhbmQgZHN0CitDIGFyZSB0aGUgc2FtZSBhbGlnbm1lbnQgbW9kIDgsIGJ1dCBpdCBkb2Vzbid0IHNlZW0gd29ydGggdGhlIHRyb3VibGUgZm9yCitDIGp1c3QgdGhhdCBjYXNlICh0aGVyZSdkIG5lZWQgdG8gYmUgc29tZSBwbGFpbiBpbnRlZ2VyIGF2YWlsYWJsZSB0b28gZm9yCitDIHRoZSB1bmFsaWduZWQgY2FzZSkuCisKK2RlZmZyYW1lKFBBUkFNX1NJWkUsMTIpCitkZWZmcmFtZShQQVJBTV9TUkMsIDgpCitkZWZmcmFtZShQQVJBTV9EU1QsIDQpCisKKwlURVhUCisJQUxJR04oOCkKK1BST0xPR1VFKG1wbl9jb20pCitkZWZsaXQoYEZSQU1FJywwKQorCisJbW92bAlQQVJBTV9TUkMsICVlYXgKKwltb3ZsCVBBUkFNX1NJWkUsICVlY3gKKworCXB1c2hsCSVlc2kJRlJBTUVfcHVzaGwoKQorCXB1c2hsCSVlZGkJRlJBTUVfcHVzaGwoKQorCisJbGVhbAkoJWVheCwlZWN4LDQpLCAlZWF4CisJeG9ybAkkLTEsICVlY3gJCUMgLXNpemUtMQorCisJbW92bAlQQVJBTV9EU1QsICVlZHgKKwlhZGRsCSQ4LCAlZWN4CQlDIC1zaXplKzcKKworCWpucwlMKGVuZCkKKworCW1vdmwJKCVlZHgpLCAlZXNpCQlDIGZldGNoIGRlc3RpbmF0aW9uIGNhY2hlIGxpbmUKKwlub3AKKworTCh0b3ApOgorCUMgZWF4CSZzcmNbc2l6ZV0KKwlDIGVieAorCUMgZWN4CWNvdW50ZXIsIGxpbWJzLCBuZWdhdGl2ZQorCUMgZWR4CWRzdCwgaW5jcmVtZW50aW5nCisJQyBlc2kJc2NyYXRjaAorCUMgZWRpCXNjcmF0Y2gKKwlDIGVicAorCisJbW92bAkyOCglZWR4KSwgJWVzaQkJQyBkZXN0aW5hdGlvbiBwcmVmZXRjaAorCWFkZGwJJDMyLCAlZWR4CisKKwltb3ZsCS0yOCglZWF4LCVlY3gsNCksICVlc2kKKwltb3ZsCS0yNCglZWF4LCVlY3gsNCksICVlZGkKKwl4b3JsCSRHTVBfTlVNQl9NQVNLLCAlZXNpCisJeG9ybAkkR01QX05VTUJfTUFTSywgJWVkaQorCW1vdmwJJWVzaSwgLTMyKCVlZHgpCisJbW92bAklZWRpLCAtMjgoJWVkeCkKKworCW1vdmwJLTIwKCVlYXgsJWVjeCw0KSwgJWVzaQorCW1vdmwJLTE2KCVlYXgsJWVjeCw0KSwgJWVkaQorCXhvcmwJJEdNUF9OVU1CX01BU0ssICVlc2kKKwl4b3JsCSRHTVBfTlVNQl9NQVNLLCAlZWRpCisJbW92bAklZXNpLCAtMjQoJWVkeCkKKwltb3ZsCSVlZGksIC0yMCglZWR4KQorCisJbW92bAktMTIoJWVheCwlZWN4LDQpLCAlZXNpCisJbW92bAktOCglZWF4LCVlY3gsNCksICVlZGkKKwl4b3JsCSRHTVBfTlVNQl9NQVNLLCAlZXNpCisJeG9ybAkkR01QX05VTUJfTUFTSywgJWVkaQorCW1vdmwJJWVzaSwgLTE2KCVlZHgpCisJbW92bAklZWRpLCAtMTIoJWVkeCkKKworCW1vdmwJLTQoJWVheCwlZWN4LDQpLCAlZXNpCisJbW92bAkoJWVheCwlZWN4LDQpLCAlZWRpCisJeG9ybAkkR01QX05VTUJfTUFTSywgJWVzaQorCXhvcmwJJEdNUF9OVU1CX01BU0ssICVlZGkKKwltb3ZsCSVlc2ksIC04KCVlZHgpCisJbW92bAklZWRpLCAtNCglZWR4KQorCisJYWRkbAkkOCwgJWVjeAorCWpzCUwodG9wKQorCisKK0woZW5kKToKKwlDIGVheAkmc3JjW3NpemVdCisJQyBlY3gJMCB0byA3LCByZXByZXNlbnRpbmcgcmVzcGVjdGl2ZWx5IDcgdG8gMCBsaW1icyByZW1haW5pbmcKKwlDIGVkeAlkc3QsIG5leHQgbG9jYXRpb24gdG8gc3RvcmUKKworCXN1YmwJJDQsICVlY3gKKwlub3AKKworCWpucwlMKG5vNCkKKworCW1vdmwJLTEyKCVlYXgsJWVjeCw0KSwgJWVzaQorCW1vdmwJLTgoJWVheCwlZWN4LDQpLCAlZWRpCisJeG9ybAkkR01QX05VTUJfTUFTSywgJWVzaQorCXhvcmwJJEdNUF9OVU1CX01BU0ssICVlZGkKKwltb3ZsCSVlc2ksICglZWR4KQorCW1vdmwJJWVkaSwgNCglZWR4KQorCisJbW92bAktNCglZWF4LCVlY3gsNCksICVlc2kKKwltb3ZsCSglZWF4LCVlY3gsNCksICVlZGkKKwl4b3JsCSRHTVBfTlVNQl9NQVNLLCAlZXNpCisJeG9ybAkkR01QX05VTUJfTUFTSywgJWVkaQorCW1vdmwJJWVzaSwgOCglZWR4KQorCW1vdmwJJWVkaSwgMTIoJWVkeCkKKworCWFkZGwJJDE2LCAlZWR4CisJYWRkbAkkNCwgJWVjeAorTChubzQpOgorCisJc3VibAkkMiwgJWVjeAorCW5vcAorCisJam5zCUwobm8yKQorCisJbW92bAktNCglZWF4LCVlY3gsNCksICVlc2kKKwltb3ZsCSglZWF4LCVlY3gsNCksICVlZGkKKwl4b3JsCSRHTVBfTlVNQl9NQVNLLCAlZXNpCisJeG9ybAkkR01QX05VTUJfTUFTSywgJWVkaQorCW1vdmwJJWVzaSwgKCVlZHgpCisJbW92bAklZWRpLCA0KCVlZHgpCisKKwlhZGRsCSQ4LCAlZWR4CisJYWRkbAkkMiwgJWVjeAorTChubzIpOgorCisJcG9wbAklZWRpCisJam56CUwoZG9uZSkKKworCW1vdmwJLTQoJWVheCksICVlY3gKKworCXhvcmwJJEdNUF9OVU1CX01BU0ssICVlY3gKKwlwb3BsCSVlc2kKKworCW1vdmwJJWVjeCwgKCVlZHgpCisJcmV0CisKK0woZG9uZSk6CisJcG9wbAklZXNpCisJcmV0CisKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW0vY29weWQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bS9jb3B5ZC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJhNTQzYgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW0vY29weWQuYXNtCkBAIC0wLDAgKzEsMTQ2IEBACitkbmwgIEludGVsIFBlbnRpdW0gbXBuX2NvcHlkIC0tIGNvcHkgbGltYiB2ZWN0b3IsIGRlY3JlbWVudGluZy4KKworZG5sICBDb3B5cmlnaHQgMTk5NiwgMjAwMSwgMjAwMiwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MgUDU6IDEuMjUgY3ljbGVzL2xpbWIKKworCitDIHZvaWQgbXBuX2NvcHlkIChtcF9wdHIgZHN0LCBtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSk7CitDCitDIFNlZSBjb21tZW50cyBpbiBjb3B5aS5hc20uCisKK2RlZmZyYW1lKFBBUkFNX1NJWkUsMTIpCitkZWZmcmFtZShQQVJBTV9TUkMsIDgpCitkZWZmcmFtZShQQVJBTV9EU1QsIDQpCisKKwlURVhUCisJQUxJR04oOCkKK1BST0xPR1VFKG1wbl9jb3B5ZCkKK2RlZmxpdChgRlJBTUUnLDApCisKKwltb3ZsCVBBUkFNX1NSQywgJWVheAorCW1vdmwJUEFSQU1fU0laRSwgJWVjeAorCisJcHVzaGwJJWVzaQlGUkFNRV9wdXNobCgpCisJcHVzaGwJJWVkaQlGUkFNRV9wdXNobCgpCisKKwlsZWFsCS00KCVlYXgsJWVjeCw0KSwgJWVheAkJQyAmc3JjW3NpemUtMV0KKwltb3ZsCVBBUkFNX0RTVCwgJWVkeAorCisJc3VibAkkNywgJWVjeAkJCUMgc2l6ZS03CisJamxlCUwoZW5kKQorCisJbW92bAkyOC00KCVlZHgsJWVjeCw0KSwgJWVzaQkJQyBwcmVmZXRjaCBjYWNoZSwgZHN0W3NpemUtMV0KKwlub3AKKworTCh0b3ApOgorCUMgZWF4CXNyYywgZGVjcmVtZW50aW5nCisJQyBlYngKKwlDIGVjeAljb3VudGVyLCBsaW1icworCUMgZWR4CWRzdAorCUMgZXNpCXNjcmF0Y2gKKwlDIGVkaQlzY3JhdGNoCisJQyBlYnAKKworCW1vdmwJMjgtMzIoJWVkeCwlZWN4LDQpLCAlZXNpCUMgcHJlZmV0Y2ggZHN0IGNhY2hlIGxpbmUKKwlzdWJsCSQ4LCAlZWN4CisKKwltb3ZsCSglZWF4KSwgJWVzaQkJCUMgcmVhZCB3b3JkcyBwYWlyd2lzZQorCW1vdmwJLTQoJWVheCksICVlZGkKKwltb3ZsCSVlc2ksIDU2KCVlZHgsJWVjeCw0KQkJQyBzdG9yZSB3b3JkcyBwYWlyd2lzZQorCW1vdmwJJWVkaSwgNTIoJWVkeCwlZWN4LDQpCisKKwltb3ZsCS04KCVlYXgpLCAlZXNpCisJbW92bAktMTIoJWVheCksICVlZGkKKwltb3ZsCSVlc2ksIDQ4KCVlZHgsJWVjeCw0KQorCW1vdmwJJWVkaSwgNDQoJWVkeCwlZWN4LDQpCisKKwltb3ZsCS0xNiglZWF4KSwgJWVzaQorCW1vdmwJLTIwKCVlYXgpLCAlZWRpCisJbW92bAklZXNpLCA0MCglZWR4LCVlY3gsNCkKKwltb3ZsCSVlZGksIDM2KCVlZHgsJWVjeCw0KQorCisJbW92bAktMjQoJWVheCksICVlc2kKKwltb3ZsCS0yOCglZWF4KSwgJWVkaQorCW1vdmwJJWVzaSwgMzIoJWVkeCwlZWN4LDQpCisJbW92bAklZWRpLCAyOCglZWR4LCVlY3gsNCkKKworCWxlYWwJLTMyKCVlYXgpLCAlZWF4CisJamcJTCh0b3ApCisKKworTChlbmQpOgorCUMgZWN4CS03IHRvIDAsIHJlcHJlc2VudGluZyByZXNwZWN0aXZlbHkgMCB0byA3IGxpbWJzIHJlbWFpbmluZworCUMgZWF4CXNyYyBlbmQKKwlDIGVkeAlkc3QsIG5leHQgbG9jYXRpb24gdG8gc3RvcmUKKworCWFkZGwJJDQsICVlY3gKKwlqbGUJTChubzQpCisKKwltb3ZsCSglZWF4KSwgJWVzaQorCW1vdmwJLTQoJWVheCksICVlZGkKKwltb3ZsCSVlc2ksIDgoJWVkeCwlZWN4LDQpCisJbW92bAklZWRpLCA0KCVlZHgsJWVjeCw0KQorCisJbW92bAktOCglZWF4KSwgJWVzaQorCW1vdmwJLTEyKCVlYXgpLCAlZWRpCisJbW92bAklZXNpLCAoJWVkeCwlZWN4LDQpCisJbW92bAklZWRpLCAtNCglZWR4LCVlY3gsNCkKKworCXN1YmwJJDE2LCAlZWF4CisJc3VibAkkNCwgJWVjeAorTChubzQpOgorCisJYWRkbAkkMiwgJWVjeAorCWpsZQlMKG5vMikKKworCW1vdmwJKCVlYXgpLCAlZXNpCisJbW92bAktNCglZWF4KSwgJWVkaQorCW1vdmwJJWVzaSwgKCVlZHgsJWVjeCw0KQorCW1vdmwJJWVkaSwgLTQoJWVkeCwlZWN4LDQpCisKKwlzdWJsCSQ4LCAlZWF4CisJc3VibAkkMiwgJWVjeAorTChubzIpOgorCisJam56CUwoZG9uZSkKKworCW1vdmwJKCVlYXgpLCAlZWN4CisJbW92bAklZWN4LCAoJWVkeCkJQyByaXNrIG9mIGNhY2hlIGJhbmsgY2xhc2ggaGVyZQorCitMKGRvbmUpOgorCXBvcGwJJWVkaQorCXBvcGwJJWVzaQorCisJcmV0CisKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW0vY29weWkuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bS9jb3B5aS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk4M2Q2YgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW0vY29weWkuYXNtCkBAIC0wLDAgKzEsMTY0IEBACitkbmwgIEludGVsIFBlbnRpdW0gbXBuX2NvcHlpIC0tIGNvcHkgbGltYiB2ZWN0b3IsIGluY3JlbWVudGluZy4KKworZG5sICBDb3B5cmlnaHQgMTk5NiwgMjAwMSwgMjAwMiwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MgUDU6IDEuMjUgY3ljbGVzL2xpbWIKKworCitDIHZvaWQgbXBuX2NvcHlpIChtcF9wdHIgZHN0LCBtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSk7CitDCitDIERlc3RpbmF0aW9uIHByZWZldGNoaW5nIGlzIGRvbmUgdG8gYXZvaWQgcmVwZWF0ZWQgd3JpdGUtdGhyb3VnaHMgb24gbGluZXMKK0Mgbm90IGFscmVhZHkgaW4gTDEuCitDCitDIEF0IGxlYXN0IG9uZSBvZiB0aGUgc3JjIG9yIGRzdCBwb2ludGVyIG5lZWRzIHRvIGJlIGluY3JlbWVudGVkIHJhdGhlciB0aGFuCitDIHVzaW5nIGluZGV4aW5nLCBzbyB0aGF0IHRoZXJlJ3Mgc29tZXdoZXJlIHRvIHB1dCB0aGUgbG9vcCBjb250cm9sIHdpdGhvdXQKK0MgYW4gQUdJLiAgSW5jcmVtZW50aW5nIG9uZSBhbmQgbm90IHR3byBsZXRzIHVzIGtlZXAgbG9vcCBvdmVyaGVhZCB0byAyCitDIGN5Y2xlcy4gIE1ha2luZyBpdCB0aGUgc3JjIHBvaW50ZXIgaW5jcmVtZW50ZWQgYXZvaWRzIGFuIEFHSSBvbiB0aGUgJWVjeAorQyBzdWJ0cmFjdHMgaW4gdGhlIGZpbmlzaHVwIGNvZGUuCitDCitDIFRoZSBibG9jayBvZiBmaW5pc2h1cCBjb2RlIGlzIGFsbW9zdCBhcyBiaWcgYXMgdGhlIG1haW4gbG9vcCBpdHNlbGYsIHdoaWNoCitDIGlzIHVuZm9ydHVuYXRlLCBidXQgaXQncyBmYXN0ZXIgdGhhdCB3YXkgdGhhbiB3aXRoIHNheSByZXAgbW92c2wsIGJ5IGFib3V0CitDIDEwIGN5Y2xlcyBmb3IgaW5zdGFuY2Ugb24gUDU1LgorQworQyBUaGVyZSdzIG5vdGhpbmcgdG8gYmUgZ2FpbmVkIGZyb20gTU1YIG9uIFA1NSwgc2luY2UgaXQgY2FuIGRvIG9ubHkgb25lCitDIG1vdnEgbG9hZCAob3Igc3RvcmUpIHBlciBjeWNsZSwgc28gdGhlIHRocm91Z2hwdXQgd291bGQgYmUgdGhlIHNhbWUgYXMgdGhlCitDIGNvZGUgaGVyZSAoYW5kIGV2ZW4gdGhlbiBvbmx5IGlmIHNyYyBhbmQgZHN0IGhhdmUgdGhlIHNhbWUgYWxpZ25tZW50IG1vZAorQyA4KS4KKworZGVmZnJhbWUoUEFSQU1fU0laRSwxMikKK2RlZmZyYW1lKFBBUkFNX1NSQywgOCkKK2RlZmZyYW1lKFBBUkFNX0RTVCwgNCkKKworCVRFWFQKKwlBTElHTig4KQorUFJPTE9HVUUobXBuX2NvcHlpKQorZGVmbGl0KGBGUkFNRScsMCkKKworCW1vdmwJUEFSQU1fU0laRSwgJWVjeAorCW1vdmwJUEFSQU1fRFNULCAlZWR4CisKKwlwdXNobAklZWJ4CUZSQU1FX3B1c2hsKCkKKwlwdXNobAklZXNpCUZSQU1FX3B1c2hsKCkKKworCWxlYWwJKCVlZHgsJWVjeCw0KSwgJWVkeAlDICZkc3Rbc2l6ZS0xXQorCXhvcmwJJC0xLCAlZWN4CQlDIC1zaXplLTEKKworCW1vdmwJUEFSQU1fU1JDLCAlZXNpCisJYWRkbAkkOCwgJWVjeAkJQyAtc2l6ZSs3CisKKwlqbnMJTChlbmQpCisKKwltb3ZsCS0yOCglZWR4LCVlY3gsNCksICVlYXgJQyBmZXRjaCBkZXN0aW5hdGlvbiBjYWNoZSBsaW5lLCBkc3RbMF0KKwlub3AKKworTCh0b3ApOgorCUMgZWF4CXNjcmF0Y2gKKwlDIGVieAlzY3JhdGNoCisJQyBlY3gJY291bnRlciwgbGltYnMsIG5lZ2F0aXZlCisJQyBlZHgJJmRzdFtzaXplLTFdCisJQyBlc2kJc3JjLCBpbmNyZW1lbnRpbmcKKwlDIGVkaQorCUMgZWJwCisKKwltb3ZsCSglZWR4LCVlY3gsNCksICVlYXgJQyBmZXRjaCBkZXN0aW5hdGlvbiBjYWNoZSBsaW5lCisJYWRkbAkkOCwgJWVjeAorCisJbW92bAkoJWVzaSksICVlYXgJCUMgcmVhZCB3b3JkcyBwYWlyd2lzZQorCW1vdmwJNCglZXNpKSwgJWVieAorCW1vdmwJJWVheCwgLTYwKCVlZHgsJWVjeCw0KQlDIHN0b3JlIHdvcmRzIHBhaXJ3aXNlCisJbW92bAklZWJ4LCAtNTYoJWVkeCwlZWN4LDQpCisKKwltb3ZsCTgoJWVzaSksICVlYXgKKwltb3ZsCTEyKCVlc2kpLCAlZWJ4CisJbW92bAklZWF4LCAtNTIoJWVkeCwlZWN4LDQpCisJbW92bAklZWJ4LCAtNDgoJWVkeCwlZWN4LDQpCisKKwltb3ZsCTE2KCVlc2kpLCAlZWF4CisJbW92bAkyMCglZXNpKSwgJWVieAorCW1vdmwJJWVheCwgLTQ0KCVlZHgsJWVjeCw0KQorCW1vdmwJJWVieCwgLTQwKCVlZHgsJWVjeCw0KQorCisJbW92bAkyNCglZXNpKSwgJWVheAorCW1vdmwJMjgoJWVzaSksICVlYngKKwltb3ZsCSVlYXgsIC0zNiglZWR4LCVlY3gsNCkKKwltb3ZsCSVlYngsIC0zMiglZWR4LCVlY3gsNCkKKworCWxlYWwJMzIoJWVzaSksICVlc2kKKwlqcwlMKHRvcCkKKworCitMKGVuZCk6CisJQyBlY3gJMCB0byA3LCByZXByZXNlbnRpbmcgcmVzcGVjdGl2ZWx5IDcgdG8gMCBsaW1icyByZW1haW5pbmcKKwlDIGVzaQlzcmMgZW5kCisJQyBlZHgJZHN0LCBuZXh0IGxvY2F0aW9uIHRvIHN0b3JlCisKKwlzdWJsCSQ0LCAlZWN4CisJam5zCUwobm80KQorCisJbW92bAkoJWVzaSksICVlYXgKKwltb3ZsCTQoJWVzaSksICVlYngKKwltb3ZsCSVlYXgsIC0xMiglZWR4LCVlY3gsNCkKKwltb3ZsCSVlYngsIC04KCVlZHgsJWVjeCw0KQorCisJbW92bAk4KCVlc2kpLCAlZWF4CisJbW92bAkxMiglZXNpKSwgJWVieAorCW1vdmwJJWVheCwgLTQoJWVkeCwlZWN4LDQpCisJbW92bAklZWJ4LCAoJWVkeCwlZWN4LDQpCisKKwlhZGRsCSQxNiwgJWVzaQorCWFkZGwJJDQsICVlY3gKK0wobm80KToKKworCXN1YmwJJDIsICVlY3gKKwlqbnMJTChubzIpCisKKwltb3ZsCSglZXNpKSwgJWVheAorCW1vdmwJNCglZXNpKSwgJWVieAorCW1vdmwJJWVheCwgLTQoJWVkeCwlZWN4LDQpCisJbW92bAklZWJ4LCAoJWVkeCwlZWN4LDQpCisKKwlhZGRsCSQ4LCAlZXNpCisJYWRkbAkkMiwgJWVjeAorTChubzIpOgorCisJam56CUwoZG9uZSkKKworCW1vdmwJKCVlc2kpLCAlZWF4CisJbW92bAklZWF4LCAtNCglZWR4LCVlY3gsNCkJQyByaXNrIG9mIGNhY2hlIGJhbmsgY2xhc2ggaGVyZQorCitMKGRvbmUpOgorCXBvcGwJJWVzaQorCXBvcGwJJWVieAorCisJcmV0CisKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW0vZGl2ZV8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW0vZGl2ZV8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWI1Mjg3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bS9kaXZlXzEuYXNtCkBAIC0wLDAgKzEsMjY0IEBACitkbmwgIEludGVsIFBlbnRpdW0gbXBuX2RpdmV4YWN0XzEgLS0gbXBuIGJ5IGxpbWIgZXhhY3QgZGl2aXNpb24uCisKK2RubCAgQ29weXJpZ2h0IDIwMDEsIDIwMDIsIDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDICAgICAgICAgZGl2aXNvcgorQyAgICAgICBvZGQgICBldmVuCitDIFA1NDogIDI0LjUgIDMwLjUgICBjeWNsZXMvbGltYgorQyBQNTU6ICAyMy4wICAyOC4wCisKKworQyB2b2lkIG1wbl9kaXZleGFjdF8xIChtcF9wdHIgZHN0LCBtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSwKK0MgICAgICAgICAgICAgICAgICAgICAgbXBfbGltYl90IGRpdmlzb3IpOworQworQyBQbGFpbiBkaXZsIGlzIHVzZWQgZm9yIHNtYWxsIHNpemVzLCBzaW5jZSB0aGUgaW52ZXJzZSB0YWtlcyBhIHdoaWxlIHRvCitDIHNldHVwLiAgTXVsdGlwbHlpbmcgd29ya3Mgb3V0IGZhc3RlciBmb3Igc2l6ZT49MyB3aGVuIHRoZSBkaXZpc29yIGlzIG9kZCwKK0Mgb3Igc2l6ZT49NCB3aGVuIHRoZSBkaXZpc29yIGlzIGV2ZW4uICBBY3R1YWxseSBvbiBQNTUgc2l6ZT09MiBmb3Igb2RkIG9yCitDIHNpemU9PTMgZm9yIGV2ZW4gYXJlIGFib3V0IHRoZSBzYW1lIHNwZWVkIGZvciBib3RoIGRpdmwgb3IgbXVsLCBidXQgdGhlCitDIGZvcm1lciBpcyB1c2VkIHNpbmNlIGl0IHdpbGwgdXNlIHVwIGxlc3MgY29kZSBjYWNoZS4KK0MKK0MgVGhlIFA1NSBzcGVlZHMgbm90ZWQgYWJvdmUsIDIzIGN5Y2xlcyBvZGQgb3IgMjggY3ljbGVzIGV2ZW4sIGFyZSBhcworQyBleHBlY3RlZC4gIE9uIFA1NCBpbiB0aGUgZXZlbiBjYXNlIHRoZSBzaHJkbCBwYWlyaW5nIG5vbnNlbnNlIChzZWUKK0MgbXBuL3g4Ni9wZW50aXVtL1JFQURNRSkgY29zdHMgMSBjeWNsZSwgYnV0IGl0J3Mgbm90IGNsZWFyIHdoeSB0aGVyZSdzIGEKK0MgZnVydGhlciAxLjUgc2xvd2Rvd24gZm9yIGJvdGggb2RkIGFuZCBldmVuLgorCitkZWZmcmFtZShQQVJBTV9ESVZJU09SLDE2KQorZGVmZnJhbWUoUEFSQU1fU0laRSwgICAxMikKK2RlZmZyYW1lKFBBUkFNX1NSQywgICAgOCkKK2RlZmZyYW1lKFBBUkFNX0RTVCwgICAgNCkKKworZG5sICByZS11c2UgcGFyYW1ldGVyIHNwYWNlCitkZWZpbmUoVkFSX0lOVkVSU0UsYFBBUkFNX0RTVCcpCisKKwlURVhUCisKKwlBTElHTigzMikKK1BST0xPR1VFKG1wbl9kaXZleGFjdF8xKQorZGVmbGl0KGBGUkFNRScsMCkKKworCW1vdmwJUEFSQU1fRElWSVNPUiwgJWVheAorCW1vdmwJUEFSQU1fU0laRSwgJWVjeAorCisJcHVzaGwJJWVzaQkJRlJBTUVfcHVzaGwoKQorCXB1c2gJJWVkaQkJRlJBTUVfcHVzaGwoKQorCisJbW92bAlQQVJBTV9TUkMsICVlc2kKKwlhbmRsCSQxLCAlZWF4CisKKwltb3ZsCVBBUkFNX0RTVCwgJWVkaQorCWFkZGwJJWVjeCwgJWVheAlDIHNpemUgaWYgZXZlbiwgc2l6ZSsxIGlmIG9kZAorCisJY21wbAkkNCwgJWVheAorCWphZQlMKG11bF9ieV9pbnZlcnNlKQorCisKKwl4b3JsCSVlZHgsICVlZHgKK0woZGl2X3RvcCk6CisJbW92bAktNCglZXNpLCVlY3gsNCksICVlYXgKKworCWRpdmwJUEFSQU1fRElWSVNPUgorCisJbW92bAklZWF4LCAtNCglZWRpLCVlY3gsNCkKKwlkZWNsCSVlY3gKKworCWpueglMKGRpdl90b3ApCisKKwlwb3BsCSVlZGkKKwlwb3BsCSVlc2kKKworCXJldAorCisKKworTChtdWxfYnlfaW52ZXJzZSk6CisJbW92bAlQQVJBTV9ESVZJU09SLCAlZWF4CisJbW92bAkkLTEsICVlY3gKKworTChzdHJpcF90d29zKToKKwlBU1NFUlQobnosIGBvcmwgJWVheCwgJWVheCcpCisJc2hybAklZWF4CisJaW5jbAklZWN4CQkJQyBzaGlmdCBjb3VudAorCisJam5jCUwoc3RyaXBfdHdvcykKKworCWxlYWwJMSglZWF4LCVlYXgpLCAlZWR4CUMgZAorCWFuZGwJJDEyNywgJWVheAkJQyBkLzIsIDcgYml0cworCisJcHVzaGwJJWVieAkJRlJBTUVfcHVzaGwoKQorCXB1c2hsCSVlYnAJCUZSQU1FX3B1c2hsKCkKKworaWZkZWYoYFBJQycsYGRubAorCUxFQSgJYmludmVydF9saW1iX3RhYmxlLCAlZWJwKQorCW1vdnpibAkoJWVheCwlZWJwKSwgJWVheAkJQyBpbnYgOCBiaXRzCisnLGAKKwltb3Z6YmwJYmludmVydF9saW1iX3RhYmxlKCVlYXgpLCAlZWF4CUMgaW52IDggYml0cworJykKKworCW1vdmwJJWVheCwgJWVicAkJQyBpbnYKKwlhZGRsCSVlYXgsICVlYXgJCUMgMippbnYKKworCWltdWxsCSVlYnAsICVlYnAJCUMgaW52KmludgorCisJaW11bGwJJWVkeCwgJWVicAkJQyBpbnYqaW52KmQKKworCXN1YmwJJWVicCwgJWVheAkJQyBpbnYgPSAyKmludiAtIGludippbnYqZAorCW1vdmwJUEFSQU1fU0laRSwgJWVieAorCisJbW92bAklZWF4LCAlZWJwCisJYWRkbAklZWF4LCAlZWF4CQlDIDIqaW52CisKKwlpbXVsbAklZWJwLCAlZWJwCQlDIGludippbnYKKworCWltdWxsCSVlZHgsICVlYnAJCUMgaW52KmludipkCisKKwlzdWJsCSVlYnAsICVlYXgJCUMgaW52ID0gMippbnYgLSBpbnYqaW52KmQKKwltb3ZsCSVlZHgsIFBBUkFNX0RJVklTT1IJQyBkIHdpdGhvdXQgdHdvcworCisJbGVhbAkoJWVzaSwlZWJ4LDQpLCAlZXNpCUMgc3JjIGVuZAorCWxlYWwJKCVlZGksJWVieCw0KSwgJWVkaQlDIGRzdCBlbmQKKworCW5lZ2wJJWVieAkJCUMgLXNpemUKKworCUFTU0VSVChlLGAJQyBleHBlY3QgZCppbnYgPT0gMSBtb2QgMl5HTVBfTElNQl9CSVRTCisJcHVzaGwJJWVheAlGUkFNRV9wdXNobCgpCisJaW11bGwJUEFSQU1fRElWSVNPUiwgJWVheAorCWNtcGwJJDEsICVlYXgKKwlwb3BsCSVlYXgJRlJBTUVfcG9wbCgpJykKKworCW1vdmwJJWVheCwgVkFSX0lOVkVSU0UKKwl4b3JsCSVlYnAsICVlYnAJCUMgaW5pdGlhbCBjYXJyeSBiaXQKKworCW1vdmwJKCVlc2ksJWVieCw0KSwgJWVheAlDIHNyYyBsb3cgbGltYgorCW9ybAklZWN4LCAlZWN4CQlDIHNoaWZ0CisKKwltb3ZsCTQoJWVzaSwlZWJ4LDQpLCAlZWR4CUMgc3JjIHNlY29uZCBsaW1iIChmb3IgZXZlbikKKwlqeglMKG9kZF9lbnRyeSkKKworCXNocmRsKAklY2wsICVlZHgsICVlYXgpCisKKwlpbmNsCSVlYngKKwlqbXAJTChldmVuX2VudHJ5KQorCisKKwlBTElHTig4KQorTChvZGRfdG9wKToKKwlDIGVheAlzY3JhdGNoCisJQyBlYngJY291bnRlciwgbGltYnMsIG5lZ2F0aXZlCisJQyBlY3gKKwlDIGVkeAorCUMgZXNpCXNyYyBlbmQKKwlDIGVkaQlkc3QgZW5kCisJQyBlYnAJY2FycnkgYml0LCAwIG9yIC0xCisKKwltdWxsCVBBUkFNX0RJVklTT1IKKworCW1vdmwJKCVlc2ksJWVieCw0KSwgJWVheAorCXN1YmwJJWVicCwgJWVkeAorCisJc3VibAklZWR4LCAlZWF4CisKKwlzYmJsCSVlYnAsICVlYnAKKworTChvZGRfZW50cnkpOgorCWltdWxsCVZBUl9JTlZFUlNFLCAlZWF4CisKKwltb3ZsCSVlYXgsICglZWRpLCVlYngsNCkKKworCWluY2wJJWVieAorCWpueglMKG9kZF90b3ApCisKKworCXBvcGwJJWVicAorCXBvcGwJJWVieAorCisJcG9wbAklZWRpCisJcG9wbAklZXNpCisKKwlyZXQKKworCitMKGV2ZW5fdG9wKToKKwlDIGVheAlzY3JhdGNoCisJQyBlYngJY291bnRlciwgbGltYnMsIG5lZ2F0aXZlCisJQyBlY3gJdHdvcworCUMgZWR4CisJQyBlc2kJc3JjIGVuZAorCUMgZWRpCWRzdCBlbmQKKwlDIGVicAljYXJyeSBiaXQsIDAgb3IgLTEKKworCW11bGwJUEFSQU1fRElWSVNPUgorCisJc3VibAklZWJwLCAlZWR4CQlDIGNhcnJ5IGJpdAorCW1vdmwJLTQoJWVzaSwlZWJ4LDQpLCAlZWF4CUMgc3JjIGxpbWIKKworCW1vdmwJKCVlc2ksJWVieCw0KSwgJWVicAlDIGFuZCBvbmUgYWJvdmUgaXQKKworCXNocmRsKAklY2wsICVlYnAsICVlYXgpCisKKwlzdWJsCSVlZHgsICVlYXgJCUMgY2FycnkgbGltYgorCisJc2JibAklZWJwLCAlZWJwCisKK0woZXZlbl9lbnRyeSk6CisJaW11bGwJVkFSX0lOVkVSU0UsICVlYXgKKworCW1vdmwJJWVheCwgLTQoJWVkaSwlZWJ4LDQpCisJaW5jbAklZWJ4CisKKwlqbnoJTChldmVuX3RvcCkKKworCisKKwltdWxsCVBBUkFNX0RJVklTT1IKKworCW1vdmwJLTQoJWVzaSksICVlYXgJCUMgc3JjIGhpZ2ggbGltYgorCXN1YmwJJWVicCwgJWVkeAorCisJc2hybAklY2wsICVlYXgKKworCXN1YmwJJWVkeCwgJWVheAkJQyBubyBjYXJyeSBpZiBkaXZpc2lvbiBpcyBleGFjdAorCisJaW11bGwJVkFSX0lOVkVSU0UsICVlYXgKKworCW1vdmwJJWVheCwgLTQoJWVkaSkJCUMgZHN0IGhpZ2ggbGltYgorCW5vcAkJCQlDIHByb3RlY3QgYWdhaW5zdCBjYWNoZSBiYW5rIGNsYXNoCisKKwlwb3BsCSVlYnAKKwlwb3BsCSVlYngKKworCXBvcGwJJWVkaQorCXBvcGwJJWVzaQorCisJcmV0CisKK0VQSUxPR1VFKCkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bS9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtL2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWZhNmUyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bS9nbXAtbXBhcmFtLmgKQEAgLTAsMCArMSw3NiBAQAorLyogSW50ZWwgUDU0IGdtcC1tcGFyYW0uaCAtLSBDb21waWxlci9tYWNoaW5lIHBhcmFtZXRlciBoZWFkZXIgZmlsZS4KKworQ29weXJpZ2h0IDE5OTEsIDE5OTMsIDE5OTQsIDE5OTktMjAwMiwgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgMzIKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgNAorCisKKy8qIEZvciBtcG4veDg2L3BlbnRpdW0vbW9kXzEuYXNtICovCisjZGVmaW5lIENPVU5UX0xFQURJTkdfWkVST1NfTkVFRF9DTFpfVEFCCisKKworLyogMTY2TUh6IFA1NCAqLworCisvKiBHZW5lcmF0ZWQgYnkgdHVuZXVwLmMsIDIwMDQtMDItMTAsIGdjYyAyLjk1ICovCisKKyNkZWZpbmUgTVVMX1RPT00yMl9USFJFU0hPTEQgICAgICAgICAgICAgMTYKKyNkZWZpbmUgTVVMX1RPT00zM19USFJFU0hPTEQgICAgICAgICAgICAgOTAKKworI2RlZmluZSBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgIDIyCisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgMTIyCisKKyNkZWZpbmUgRElWX1NCX1BSRUlOVl9USFJFU0hPTEQgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNTIKKyNkZWZpbmUgUE9XTV9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgNzcKKworI2RlZmluZSBIR0NEX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDEyMQorI2RlZmluZSBHQ0RfQUNDRUxfVEhSRVNIT0xEICAgICAgICAgICAgICAgMworI2RlZmluZSBHQ0RfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDYxNQorI2RlZmluZSBKQUNPQklfQkFTRV9NRVRIT0QgICAgICAgICAgICAgICAgMgorCisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAwCisjZGVmaW5lIFVTRV9QUkVJTlZfTU9EXzEgICAgICAgICAgICAgICAgICAxICAvKiBuYXRpdmUgKi8KKyNkZWZpbmUgRElWUkVNXzJfVEhSRVNIT0xEICAgICAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWRVhBQ1RfMV9USFJFU0hPTEQgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAobmF0aXZlKSAqLworI2RlZmluZSBNT0RFWEFDVF8xX09ERF9USFJFU0hPTEQgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisKKyNkZWZpbmUgR0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgMjMKKyNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgMzMKKyNkZWZpbmUgU0VUX1NUUl9USFJFU0hPTEQgICAgICAgICAgICAgIDI3ODgKKworI2RlZmluZSBNVUxfRkZUX1RBQkxFICB7IDQzMiwgOTI4LCAxNjY0LCAzNTg0LCAxMDI0MCwgNDA5NjAsIDAgfQorI2RlZmluZSBNVUxfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgIDQ0OAorI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgMzMyOAorCisjZGVmaW5lIFNRUl9GRlRfVEFCTEUgIHsgNDk2LCA5MjgsIDE5MjAsIDQ2MDgsIDEwMjQwLCA0MDk2MCwgMCB9CisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgNTEyCisjZGVmaW5lIFNRUl9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAzMzI4CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtL2hhbWRpc3QuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bS9oYW1kaXN0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzZjMWExCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bS9oYW1kaXN0LmFzbQpAQCAtMCwwICsxLDE1NCBAQAorZG5sICBJbnRlbCBQNSBtcG5faGFtZGlzdCAtLSBtcG4gaGFtbWluZyBkaXN0YW5jZS4KKworZG5sICBDb3B5cmlnaHQgMjAwMSwgMjAwMiwgMjAxNCwgMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MgUDU6IDE0LjAgY3ljbGVzL2xpbWIKKworCitDIHVuc2lnbmVkIGxvbmcgbXBuX2hhbWRpc3QgKG1wX3NyY3B0ciBzcmMxLCBtcF9zcmNwdHIgc3JjMiwgbXBfc2l6ZV90IHNpemUpOworQworQyBJdCBtaWdodCBiZSBwb3NzaWJsZSB0byBzaGF2ZSAxIGN5Y2xlIGZyb20gdGhlIGxvb3AsIGFuZCBoZW5jZSAyCitDIGN5Y2xlcy9saW1iLiAgVGhlIHhvcmIgaXMgdGFraW5nIDIgY3ljbGVzLCBidXQgYSBzZXBhcmF0ZSBsb2FkIGFuZCB4b3IKK0Mgd291bGQgYmUgMSwgaWYgdGhlIHJpZ2h0IHNjaGVkdWxlIGNvdWxkIGJlIGZvdW5kIChub3QgZm91bmQgc28gZmFyKS4KK0MgV2FudGluZyB0byBhdm9pZCBwb3RlbnRpYWwgY2FjaGUgYmFuayBjbGFzaGVzIG1ha2VzIGl0IHRyaWNreS4KKworQyBUaGUgc2xpZ2h0bHkgc3RyYW5nZSBxdW90aW5nIGhlcmUgaGVscHMgdGhlIHJlbmFtaW5nIGRvbmUgYnkgdHVuZS9tYW55LnBsLgorZGVmbGl0KFRBQkxFX05BTUUsCittNF9hc3NlcnRfZGVmaW5lZChgR1NZTV9QUkVGSVgnKQorR1NZTV9QUkVGSVhgJ21wbl9wb3Bjb3VudGBgJ190YWJsZScpCisKK0MgRklYTUU6IHJlZmVyZW5jaW5nIHBvcGNvdW50LmFzbSdzIHRhYmxlIGlzIGluY29ycmVjdCBhcyBpdCBodXJ0IGluY3JlbWVudGFsCitDIGxpbmtpbmcuCisKK2RlZmZyYW1lKFBBUkFNX1NJWkUsMTIpCitkZWZmcmFtZShQQVJBTV9TUkMyLCA4KQorZGVmZnJhbWUoUEFSQU1fU1JDMSwgNCkKKworCVRFWFQKKwlBTElHTig4KQorCitQUk9MT0dVRShtcG5faGFtZGlzdCkKK2RlZmxpdChgRlJBTUUnLDApCisKKwltb3ZsCVBBUkFNX1NJWkUsICVlY3gKKwlwdXNobAklZXNpCUZSQU1FX3B1c2hsKCkKKworCXNobGwJJWVjeAkJQyBzaXplIGluIGJ5dGUgcGFpcnMKKwlwdXNobAklZWRpCUZSQU1FX3B1c2hsKCkKKworaWZkZWYoYFBJQycsYAorCXB1c2hsCSVlYngJRlJBTUVfcHVzaGwoKQorCXB1c2hsCSVlYnAJRlJBTUVfcHVzaGwoKQoraWZkZWYoYERBUldJTicsYAorCW1vdmwJUEFSQU1fU1JDMSwgJWVzaQorCW1vdmwJUEFSQU1fU1JDMiwgJWVkaQorCUxFQSgJVEFCTEVfTkFNRSwgJWVicCkKKwl4b3JsCSVlYngsICVlYngJQyBieXRlCisJeG9ybAklZWR4LCAlZWR4CUMgYnl0ZQorCXhvcmwJJWVheCwgJWVheAlDIHRvdGFsCisnLGAKKwljYWxsCUwoaGVyZSkJRlJBTUVfcHVzaGwoKQorTChoZXJlKToKKwltb3ZsCVBBUkFNX1NSQzEsICVlc2kKKwlwb3BsCSVlYnAJRlJBTUVfcG9wbCgpCisKKwltb3ZsCVBBUkFNX1NSQzIsICVlZGkKKwlhZGRsCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8rWy4tTChoZXJlKV0sICVlYnAKKworCXhvcmwJJWVieCwgJWVieAlDIGJ5dGUKKwl4b3JsCSVlZHgsICVlZHgJQyBieXRlCisKKwltb3ZsCVRBQkxFX05BTUVAR09UKCVlYnApLCAlZWJwCisJeG9ybAklZWF4LCAlZWF4CUMgdG90YWwKKycpCitkZWZpbmUoVEFCTEUsYCglZWJwLCQxKScpCisnLGAKK2RubCBub24tUElDCisJbW92bAlQQVJBTV9TUkMxLCAlZXNpCisJbW92bAlQQVJBTV9TUkMyLCAlZWRpCisKKwl4b3JsCSVlYXgsICVlYXgJQyB0b3RhbAorCXB1c2hsCSVlYngJRlJBTUVfcHVzaGwoKQorCisJeG9ybAklZWR4LCAlZWR4CUMgYnl0ZQorCXhvcmwJJWVieCwgJWVieAlDIGJ5dGUKKworZGVmaW5lKFRBQkxFLGBUQUJMRV9OQU1FKCQxKScpCisnKQorCisKKwlDIFRoZSBub3AgYWZ0ZXIgdGhlIHhvcmIgc2VlbXMgbmVjZXNzYXJ5LiAgQWx0aG91Z2ggYSBtb3ZiIG1pZ2h0IGJlCisJQyBleHBlY3RlZCB0byBnbyBkb3duIHRoZSBWIHBpcGUgaW4gdGhlIHNlY29uZCBjeWNsZSBvZiB0aGUgeG9yYiwgaXQKKwlDIGRvZXNuJ3QgYW5kIGNvc3RzIGFuIGV4dHJhIDIgY3ljbGVzLgorTCh0b3ApOgorCUMgZWF4CXRvdGFsCisJQyBlYngJYnl0ZQorCUMgZWN4CWNvdW50ZXIsIDIqc2l6ZSB0byAyCisJQyBlZHgJYnl0ZQorCUMgZXNpCXNyYzEKKwlDIGVkaQlzcmMyCisJQyBlYnAJW1BJQ10gdGFibGUKKworCWFkZGwJJWVieCwgJWVheAorCW1vdmIJLTEoJWVzaSwlZWN4LDIpLCAlYmwKKworCWFkZGwJJWVkeCwgJWVheAorCW1vdmIJLTEoJWVkaSwlZWN4LDIpLCAlZGwKKworCXhvcmIJJWRsLCAlYmwKKwltb3ZiCS0yKCVlc2ksJWVjeCwyKSwgJWRsCisKKwl4b3JiCS0yKCVlZGksJWVjeCwyKSwgJWRsCisJbm9wCisKKwltb3ZiCVRBQkxFKCVlYngpLCAlYmwKKwlkZWNsCSVlY3gKKworCW1vdmIJVEFCTEUoJWVkeCksICVkbAorCWpueglMKHRvcCkKKworCitpZmRlZihgUElDJyxgCisJcG9wbAklZWJwCisnKQorCWFkZGwJJWVieCwgJWVheAorCXBvcGwJJWVieAorCisJYWRkbAklZWR4LCAlZWF4CisJcG9wbAklZWRpCisKKwlwb3BsCSVlc2kKKworCXJldAorCitFUElMT0dVRSgpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW0vbG9nb3BzX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bS9sb2dvcHNfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg3NzMxNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW0vbG9nb3BzX24uYXNtCkBAIC0wLDAgKzEsMTc2IEBACitkbmwgIEludGVsIFBlbnRpdW0gbXBuX2FuZF9uLC4uLixtcG5feG5vcl9uIC0tIGJpdHdpc2UgbG9naWNhbCBvcGVyYXRpb25zLgorCitkbmwgIENvcHlyaWdodCAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQyBQNTogMy4wIGMvbCAgYW5kLCBpb3IsIHhvcgorQyAgICAgMy41IGMvbCAgYW5kbiwgaW9ybiwgbmFuZCwgbmlvciwgeG5vcgorCisKK2RlZmluZShNNF9jaG9vc2Vfb3AsCitgaWZkZWYoYE9QRVJBVElPTl8kMScsYAorZGVmaW5lKGBNNF9mdW5jdGlvbicsIGBtcG5fJDEnKQorZGVmaW5lKGBNNF93YW50X3ByZScsIGAkNCcpCitkZWZpbmUoYE00b3AnLCAgICAgICAgYCQzJykKK2RlZmluZShgTTRfd2FudF9wb3N0JyxgJDInKQorJyknKQorZGVmaW5lKE00cHJlLCBgaWZlbHNlKE00X3dhbnRfcHJlLCB5ZXMsYCQxJyknKQorZGVmaW5lKE00cG9zdCxgaWZlbHNlKE00X3dhbnRfcG9zdCx5ZXMsYCQxJyknKQorCitNNF9jaG9vc2Vfb3AoIGFuZF9uLCAgICAgLCBhbmRsLCAgICApCitNNF9jaG9vc2Vfb3AoIGFuZG5fbiwgICAgLCBhbmRsLCB5ZXMpCitNNF9jaG9vc2Vfb3AoIG5hbmRfbiwgeWVzLCBhbmRsLCAgICApCitNNF9jaG9vc2Vfb3AoIGlvcl9uLCAgICAgLCAgb3JsLCAgICApCitNNF9jaG9vc2Vfb3AoIGlvcm5fbiwgICAgLCAgb3JsLCB5ZXMpCitNNF9jaG9vc2Vfb3AoIG5pb3JfbiwgeWVzLCAgb3JsLCAgICApCitNNF9jaG9vc2Vfb3AoIHhvcl9uLCAgICAgLCB4b3JsLCAgICApCitNNF9jaG9vc2Vfb3AoIHhub3JfbiwgeWVzLCB4b3JsLCAgICApCisKK2lmZGVmKGBNNF9mdW5jdGlvbicsLAorYG00X2Vycm9yKGBVbnJlY29nbmlzZWQgb3IgdW5kZWZpbmVkIE9QRVJBVElPTiBzeW1ib2wKKycpJykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fYW5kX24gbXBuX2FuZG5fbiBtcG5fbmFuZF9uIG1wbl9pb3JfbiBtcG5faW9ybl9uIG1wbl9uaW9yX24gbXBuX3hvcl9uIG1wbl94bm9yX24pCisKK05BSUxTX1NVUFBPUlQoMC0zMSkKKworCitDIHZvaWQgTTRfZnVuY3Rpb24gKG1wX3B0ciB3cCwgbXBfc3JjcHRyIHhwLCBtcF9zcmNwdHIgeXAsIG1wX3NpemVfdCBzaXplKTsKK0MKK0MgTm90aGluZyBjb21wbGljYXRlZCBoZXJlLCBqdXN0IHNvbWUgY2FyZSB0byBhdm9pZCBkYXRhIGNhY2hlIGJhbmsgY2xhc2hlcworQyBhbmQgQUdJcy4KK0MKK0MgV2UncmUgb25lIHJlZ2lzdGVyIHNob3J0IG9mIGJlaW5nIGFibGUgdG8gZG8gYSBzaW1wbGUgNCBsb2FkcywgMiBvcHMsIDIKK0Mgc3RvcmVzLiAgSW5zdGVhZCAlZWJwIGlzIGp1Z2dsZWQgYSBiaXQgYW5kIG5vcHMgYXJlIGludHJvZHVjZWQgdG8ga2VlcCB0aGUKK0MgcGFpcmluZ3MgYXMgaW50ZW5kZWQuICBBbiBpbi1wbGFjZSBvcGVyYXRpb24gd291bGQgZnJlZSB1cCBhIHJlZ2lzdGVyLCBmb3IKK0MgYW4gMC41IGMvbCBzcGVlZHVwLCBpZiB0aGF0J3Mgd29ydGggYm90aGVyaW5nIHdpdGguCitDCitDIFRoaXMgY29kZSBzZWVtcyBiZXN0IGZvciBQNTUgdG9vLiAgRGF0YSBhbGlnbm1lbnQgaXMgYSBiaWcgcHJvYmxlbSBmb3IgTU1YCitDIGFuZCB0aGUgcGFpcmluZyByZXN0cmljdGlvbnMgb24gbW92cSBhbmQgaW50ZWdlciBpbnN0cnVjdGlvbnMgbWFrZSBsaWZlCitDIGRpZmZpY3VsdC4KKworZGVmZnJhbWUoUEFSQU1fU0laRSwxNikKK2RlZmZyYW1lKFBBUkFNX1lQLCAgMTIpCitkZWZmcmFtZShQQVJBTV9YUCwgICA4KQorZGVmZnJhbWUoUEFSQU1fV1AsICAgNCkKKworCVRFWFQKKwlBTElHTig4KQorCitQUk9MT0dVRShNNF9mdW5jdGlvbikKK2RlZmxpdChgRlJBTUUnLDApCisKKwlwdXNobAklZWJ4CUZSQU1FX3B1c2hsKCkKKwlwdXNobAklZXNpCUZSQU1FX3B1c2hsKCkKKworCXB1c2hsCSVlZGkJRlJBTUVfcHVzaGwoKQorCXB1c2hsCSVlYnAJRlJBTUVfcHVzaGwoKQorCisJbW92bAlQQVJBTV9TSVpFLCAlZWN4CisJbW92bAlQQVJBTV9YUCwgJWVieAorCisJbW92bAlQQVJBTV9ZUCwgJWVzaQorCW1vdmwJUEFSQU1fV1AsICVlZGkKKworCXNocmwJJWVjeAorCWpuYwlMKGVudHJ5KQorCisJbW92bAkoJWVieCwlZWN4LDgpLCAlZWF4CUMgcmlzayBvZiBkYXRhIGNhY2hlIGJhbmsgY2xhc2ggaGVyZQorCW1vdmwJKCVlc2ksJWVjeCw4KSwgJWVkeAorCitNNHByZShgCW5vdGxfb3JfeG9ybF9HTVBfTlVNQl9NQVNLKCVlZHgpJykKKworCU00b3AJJWVkeCwgJWVheAorCitNNHBvc3QoYHhvcmwJJEdNUF9OVU1CX01BU0ssICVlYXgnKQorCW9ybAklZWN4LCAlZWN4CisKKwltb3ZsCSVlYXgsICglZWRpLCVlY3gsOCkKKwlqeglMKGRvbmUpCisKKwlqbXAJTChlbnRyeSkKKworCitMKHRvcCk6CisJQyBlYXgKKwlDIGVieAl4cAorCUMgZWN4CWNvdW50ZXIsIGxpbWIgcGFpcnMsIGRlY3JlbWVudGluZworCUMgZWR4CisJQyBlc2kJeXAKKwlDIGVkaQl3cAorCUMgZWJwCisKKwlNNG9wCSVlYnAsICVlZHgKKwlub3AKKworTTRwb3N0KGB4b3JsCSRHTVBfTlVNQl9NQVNLLCAlZWF4JykKK000cG9zdChgeG9ybAkkR01QX05VTUJfTUFTSywgJWVkeCcpCisKKwltb3ZsCSVlYXgsIDQoJWVkaSwlZWN4LDgpCisJbW92bAklZWR4LCAoJWVkaSwlZWN4LDgpCisKK0woZW50cnkpOgorCW1vdmwJLTQoJWVieCwlZWN4LDgpLCAlZWJwCisJbm9wCisKKwltb3ZsCS00KCVlc2ksJWVjeCw4KSwgJWVheAorCW1vdmwJLTgoJWVzaSwlZWN4LDgpLCAlZWR4CisKK000cHJlKGAJeG9ybAkkR01QX05VTUJfTUFTSywgJWVheCcpCitNNHByZShgCXhvcmwJJEdNUF9OVU1CX01BU0ssICVlZHgnKQorCisJTTRvcAklZWJwLCAlZWF4CisJbW92bAktOCglZWJ4LCVlY3gsOCksICVlYnAKKworCWRlY2wJJWVjeAorCWpueglMKHRvcCkKKworCisJTTRvcAklZWJwLCAlZWR4CisJbm9wCisKK000cG9zdChgeG9ybAkkR01QX05VTUJfTUFTSywgJWVheCcpCitNNHBvc3QoYHhvcmwJJEdNUF9OVU1CX01BU0ssICVlZHgnKQorCisJbW92bAklZWF4LCA0KCVlZGksJWVjeCw4KQorCW1vdmwJJWVkeCwgKCVlZGksJWVjeCw4KQorCisKK0woZG9uZSk6CisJcG9wbAklZWJwCisJcG9wbAklZWRpCisKKwlwb3BsCSVlc2kKKwlwb3BsCSVlYngKKworCXJldAorCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtL2xzaGlmdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtL2xzaGlmdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEzMWYzNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW0vbHNoaWZ0LmFzbQpAQCAtMCwwICsxLDI0MyBAQAorZG5sICBJbnRlbCBQZW50aXVtIG1wbl9sc2hpZnQgLS0gbXBuIGxlZnQgc2hpZnQuCisKK2RubCAgQ29weXJpZ2h0IDE5OTIsIDE5OTQtMTk5NiwgMTk5OSwgMjAwMCwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MgICAgICAgICBjeWNsZXMvbGltYgorQyBQNSxQNTQ6ICAgIDYuMAorQyBQNTU6ICAgICAgIDUuMzc1CisKKworQyBtcF9saW1iX3QgbXBuX2xzaGlmdCAobXBfcHRyIGRzdCwgbXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUsCitDICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaGlmdCk7CitDCitDIFRoZSBtYWluIHNoaWZ0LWJ5LU4gbG9vcCBzaG91bGQgcnVuIGF0IDUuMzc1IGMvbCBhbmQgdGhhdCdzIHdoYXQgUDU1IGRvZXMsCitDIGJ1dCBQNSBhbmQgUDU0IHJ1biBvbmx5IGF0IDYuMCBjL2wsIHdoaWNoIGlzIDQgY3ljbGVzIGxvc3Qgc29tZXdoZXJlLgorCitkZWZmcmFtZShQQVJBTV9TSElGVCwxNikKK2RlZmZyYW1lKFBBUkFNX1NJWkUsIDEyKQorZGVmZnJhbWUoUEFSQU1fU1JDLCAgOCkKK2RlZmZyYW1lKFBBUkFNX0RTVCwgIDQpCisKKwlURVhUCisJQUxJR04oOCkKK1BST0xPR1VFKG1wbl9sc2hpZnQpCisKKwlwdXNobAklZWRpCisJcHVzaGwJJWVzaQorCXB1c2hsCSVlYngKKwlwdXNobAklZWJwCitkZWZsaXQoYEZSQU1FJywxNikKKworCW1vdmwJUEFSQU1fRFNULCVlZGkKKwltb3ZsCVBBUkFNX1NSQywlZXNpCisJbW92bAlQQVJBTV9TSVpFLCVlYnAKKwltb3ZsCVBBUkFNX1NISUZULCVlY3gKKworQyBXZSBjYW4gdXNlIGZhc3RlciBjb2RlIGZvciBzaGlmdC1ieS0xIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucy4KKwljbXAJJDEsJWVjeAorCWpuZQlMKG5vcm1hbCkKKwlsZWFsCTQoJWVzaSksJWVheAorCWNtcGwJJWVkaSwlZWF4CisJam5jCUwoc3BlY2lhbCkJCUMganVtcCBpZiBzX3B0ciArIDEgPj0gcmVzX3B0cgorCWxlYWwJKCVlc2ksJWVicCw0KSwlZWF4CisJY21wbAklZWF4LCVlZGkKKwlqbmMJTChzcGVjaWFsKQkJQyBqdW1wIGlmIHJlc19wdHIgPj0gc19wdHIgKyBzaXplCisKK0wobm9ybWFsKToKKwlsZWFsCS00KCVlZGksJWVicCw0KSwlZWRpCisJbGVhbAktNCglZXNpLCVlYnAsNCksJWVzaQorCisJbW92bAkoJWVzaSksJWVkeAorCXN1YmwJJDQsJWVzaQorCXhvcmwJJWVheCwlZWF4CisJc2hsZGwoCSVjbCwgJWVkeCwgJWVheCkJQyBjb21wdXRlIGNhcnJ5IGxpbWIKKwlwdXNobAklZWF4CQkJQyBwdXNoIGNhcnJ5IGxpbWIgb250byBzdGFjaworCisJZGVjbAklZWJwCisJcHVzaGwJJWVicAorCXNocmwJJDMsJWVicAorCWp6CUwoZW5kKQorCisJbW92bAkoJWVkaSksJWVheAkJQyBmZXRjaCBkZXN0aW5hdGlvbiBjYWNoZSBsaW5lCisKKwlBTElHTig0KQorTChvb3ApOgltb3ZsCS0yOCglZWRpKSwlZWF4CQlDIGZldGNoIGRlc3RpbmF0aW9uIGNhY2hlIGxpbmUKKwltb3ZsCSVlZHgsJWVieAorCisJbW92bAkoJWVzaSksJWVheAorCW1vdmwJLTQoJWVzaSksJWVkeAorCXNobGRsKAklY2wsICVlYXgsICVlYngpCisJc2hsZGwoCSVjbCwgJWVkeCwgJWVheCkKKwltb3ZsCSVlYngsKCVlZGkpCisJbW92bAklZWF4LC00KCVlZGkpCisKKwltb3ZsCS04KCVlc2kpLCVlYngKKwltb3ZsCS0xMiglZXNpKSwlZWF4CisJc2hsZGwoCSVjbCwgJWVieCwgJWVkeCkKKwlzaGxkbCgJJWNsLCAlZWF4LCAlZWJ4KQorCW1vdmwJJWVkeCwtOCglZWRpKQorCW1vdmwJJWVieCwtMTIoJWVkaSkKKworCW1vdmwJLTE2KCVlc2kpLCVlZHgKKwltb3ZsCS0yMCglZXNpKSwlZWJ4CisJc2hsZGwoCSVjbCwgJWVkeCwgJWVheCkKKwlzaGxkbCgJJWNsLCAlZWJ4LCAlZWR4KQorCW1vdmwJJWVheCwtMTYoJWVkaSkKKwltb3ZsCSVlZHgsLTIwKCVlZGkpCisKKwltb3ZsCS0yNCglZXNpKSwlZWF4CisJbW92bAktMjgoJWVzaSksJWVkeAorCXNobGRsKAklY2wsICVlYXgsICVlYngpCisJc2hsZGwoCSVjbCwgJWVkeCwgJWVheCkKKwltb3ZsCSVlYngsLTI0KCVlZGkpCisJbW92bAklZWF4LC0yOCglZWRpKQorCisJc3VibAkkMzIsJWVzaQorCXN1YmwJJDMyLCVlZGkKKwlkZWNsCSVlYnAKKwlqbnoJTChvb3ApCisKK0woZW5kKToJcG9wbAklZWJwCisJYW5kbAkkNywlZWJwCisJanoJTChlbmQyKQorTChvb3AyKToKKwltb3ZsCSglZXNpKSwlZWF4CisJc2hsZGwoCSVjbCwlZWF4LCVlZHgpCisJbW92bAklZWR4LCglZWRpKQorCW1vdmwJJWVheCwlZWR4CisJc3VibAkkNCwlZXNpCisJc3VibAkkNCwlZWRpCisJZGVjbAklZWJwCisJam56CUwob29wMikKKworTChlbmQyKToKKwlzaGxsCSVjbCwlZWR4CQlDIGNvbXB1dGUgbGVhc3Qgc2lnbmlmaWNhbnQgbGltYgorCW1vdmwJJWVkeCwoJWVkaSkJCUMgc3RvcmUgaXQKKworCXBvcGwJJWVheAkJCUMgcG9wIGNhcnJ5IGxpbWIKKworCXBvcGwJJWVicAorCXBvcGwJJWVieAorCXBvcGwJJWVzaQorCXBvcGwJJWVkaQorCXJldAorCisKK0MgV2UgbG9vcCBmcm9tIGxlYXN0IHNpZ25pZmljYW50IGVuZCBvZiB0aGUgYXJyYXlzLCB3aGljaCBpcyBvbmx5CitDIHBlcm1pc3NhYmxlIGlmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRvbid0IG92ZXJsYXAsIHNpbmNlIHRoZQorQyBmdW5jdGlvbiBpcyBkb2N1bWVudGVkIHRvIHdvcmsgZm9yIG92ZXJsYXBwaW5nIHNvdXJjZSBhbmQgZGVzdGluYXRpb24uCisKK0woc3BlY2lhbCk6CisJbW92bAkoJWVzaSksJWVkeAorCWFkZGwJJDQsJWVzaQorCisJZGVjbAklZWJwCisJcHVzaGwJJWVicAorCXNocmwJJDMsJWVicAorCisJYWRkbAklZWR4LCVlZHgKKwlpbmNsCSVlYnAKKwlkZWNsCSVlYnAKKwlqeglMKExlbmQpCisKKwltb3ZsCSglZWRpKSwlZWF4CQlDIGZldGNoIGRlc3RpbmF0aW9uIGNhY2hlIGxpbmUKKworCUFMSUdOKDQpCitMKExvb3ApOgorCW1vdmwJMjgoJWVkaSksJWVheAkJQyBmZXRjaCBkZXN0aW5hdGlvbiBjYWNoZSBsaW5lCisJbW92bAklZWR4LCVlYngKKworCW1vdmwJKCVlc2kpLCVlYXgKKwltb3ZsCTQoJWVzaSksJWVkeAorCWFkY2wJJWVheCwlZWF4CisJbW92bAklZWJ4LCglZWRpKQorCWFkY2wJJWVkeCwlZWR4CisJbW92bAklZWF4LDQoJWVkaSkKKworCW1vdmwJOCglZXNpKSwlZWJ4CisJbW92bAkxMiglZXNpKSwlZWF4CisJYWRjbAklZWJ4LCVlYngKKwltb3ZsCSVlZHgsOCglZWRpKQorCWFkY2wJJWVheCwlZWF4CisJbW92bAklZWJ4LDEyKCVlZGkpCisKKwltb3ZsCTE2KCVlc2kpLCVlZHgKKwltb3ZsCTIwKCVlc2kpLCVlYngKKwlhZGNsCSVlZHgsJWVkeAorCW1vdmwJJWVheCwxNiglZWRpKQorCWFkY2wJJWVieCwlZWJ4CisJbW92bAklZWR4LDIwKCVlZGkpCisKKwltb3ZsCTI0KCVlc2kpLCVlYXgKKwltb3ZsCTI4KCVlc2kpLCVlZHgKKwlhZGNsCSVlYXgsJWVheAorCW1vdmwJJWVieCwyNCglZWRpKQorCWFkY2wJJWVkeCwlZWR4CisJbW92bAklZWF4LDI4KCVlZGkpCisKKwlsZWFsCTMyKCVlc2kpLCVlc2kJCUMgdXNlIGxlYWwgbm90IHRvIGNsb2JiZXIgY2FycnkKKwlsZWFsCTMyKCVlZGkpLCVlZGkKKwlkZWNsCSVlYnAKKwlqbnoJTChMb29wKQorCitMKExlbmQpOgorCXBvcGwJJWVicAorCXNiYmwJJWVheCwlZWF4CQlDIHNhdmUgY2FycnkgaW4gJWVheAorCWFuZGwJJDcsJWVicAorCWp6CUwoTGVuZDIpCisJYWRkbAklZWF4LCVlYXgJCUMgcmVzdG9yZSBjYXJyeSBmcm9tIGVheAorTChMb29wMik6CisJbW92bAklZWR4LCVlYngKKwltb3ZsCSglZXNpKSwlZWR4CisJYWRjbAklZWR4LCVlZHgKKwltb3ZsCSVlYngsKCVlZGkpCisKKwlsZWFsCTQoJWVzaSksJWVzaQkJQyB1c2UgbGVhbCBub3QgdG8gY2xvYmJlciBjYXJyeQorCWxlYWwJNCglZWRpKSwlZWRpCisJZGVjbAklZWJwCisJam56CUwoTG9vcDIpCisKKwlqbXAJTChMMSkKK0woTGVuZDIpOgorCWFkZGwJJWVheCwlZWF4CQlDIHJlc3RvcmUgY2FycnkgZnJvbSBlYXgKK0woTDEpOgltb3ZsCSVlZHgsKCVlZGkpCQlDIHN0b3JlIGxhc3QgbGltYgorCisJc2JibAklZWF4LCVlYXgKKwluZWdsCSVlYXgKKworCXBvcGwJJWVicAorCXBvcGwJJWVieAorCXBvcGwJJWVzaQorCXBvcGwJJWVkaQorCXJldAorCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtL21teC9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtL21teC9nbXAtbXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJhMGRlZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW0vbW14L2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDE2MyBAQAorLyogSW50ZWwgUDU1IGdtcC1tcGFyYW0uaCAtLSBDb21waWxlci9tYWNoaW5lIHBhcmFtZXRlciBoZWFkZXIgZmlsZS4KKworQ29weXJpZ2h0IDE5OTEsIDE5OTMsIDE5OTQsIDE5OTktMjAwMiwgMjAwNCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKworI2RlZmluZSBHTVBfTElNQl9CSVRTIDMyCisjZGVmaW5lIEdNUF9MSU1CX0JZVEVTIDQKKworCisvKiBGb3IgbXBuL3g4Ni9wZW50aXVtL21vZF8xLmFzbSAqLworI2RlZmluZSBDT1VOVF9MRUFESU5HX1pFUk9TX05FRURfQ0xaX1RBQgorCisKKy8qIDIzM01IeiBQNTUgKi8KKworI2RlZmluZSBNT0RfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBNT0RfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICBNUF9TSVpFX1RfTUFYICAvKiBuZXZlciAqLworI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICBNUF9TSVpFX1RfTUFYICAvKiBuZXZlciAqLworI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAxMgorI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAgMAorI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICAgICAxMQorI2RlZmluZSBQUkVJTlZfTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICA2MworI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBESVZFWEFDVF8xX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIEJNT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgICAgICAgIDUxCisKKyNkZWZpbmUgTVVMX1RPT00yMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgTVVMX1RPT00zM19USFJFU0hPTEQgICAgICAgICAgICAgICAgNTMKKyNkZWZpbmUgTVVMX1RPT000NF9USFJFU0hPTEQgICAgICAgICAgICAgICAxMjgKKyNkZWZpbmUgTVVMX1RPT002SF9USFJFU0hPTEQgICAgICAgICAgICAgICAxODkKKyNkZWZpbmUgTVVMX1RPT004SF9USFJFU0hPTEQgICAgICAgICAgICAgICAyNjAKKworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT000M19USFJFU0hPTEQgICAgICA4OQorI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT001M19USFJFU0hPTEQgICAgICA5MQorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT001M19USFJFU0hPTEQgICAgICA5MAorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT002M19USFJFU0hPTEQgICAgICA4OAorCisjZGVmaW5lIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNzMKKyNkZWZpbmUgU1FSX1RPT000X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNzgKKyNkZWZpbmUgU1FSX1RPT002X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyMTAKKyNkZWZpbmUgU1FSX1RPT004X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzNzUKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxMQorI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxMgorCisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgMzY0ICAvKiBrID0gNSAqLworI2RlZmluZSBNVUxfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgMzY0LCA1fSwgeyAgICAgMTUsIDZ9LCB7ICAgICAgOCwgNX0sIHsgICAgIDE3LCA2fSwgXAorICAgIHsgICAgICA5LCA1fSwgeyAgICAgMTksIDZ9LCB7ICAgICAxNywgN30sIHsgICAgICA5LCA2fSwgXAorICAgIHsgICAgIDIxLCA3fSwgeyAgICAgMTEsIDZ9LCB7ICAgICAyMywgN30sIHsgICAgIDE1LCA2fSwgXAorICAgIHsgICAgIDMxLCA3fSwgeyAgICAgMjEsIDh9LCB7ICAgICAxMSwgN30sIHsgICAgIDI3LCA4fSwgXAorICAgIHsgICAgIDE1LCA3fSwgeyAgICAgMzMsIDh9LCB7ICAgICAxOSwgN30sIHsgICAgIDM5LCA4fSwgXAorICAgIHsgICAgIDIzLCA3fSwgeyAgICAgNDcsIDh9LCB7ICAgICAyNywgOX0sIHsgICAgIDE1LCA4fSwgXAorICAgIHsgICAgIDMxLCA3fSwgeyAgICAgNjMsIDh9LCB7ICAgICAzOSwgOX0sIHsgICAgIDIzLCA4fSwgXAorICAgIHsgICAgIDQ3LDEwfSwgeyAgICAgMTUsIDl9LCB7ICAgICAzMSwgOH0sIHsgICAgIDY3LCA5fSwgXAorICAgIHsgICAgIDM5LCA4fSwgeyAgICAgNzksIDl9LCB7ICAgICA0NywgOH0sIHsgICAgIDk1LCA5fSwgXAorICAgIHsgICAgIDU1LDEwfSwgeyAgICAgMzEsIDl9LCB7ICAgICA3OSwxMH0sIHsgICAgIDQ3LCA5fSwgXAorICAgIHsgICAgIDk1LDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA2MywgOX0sIHsgICAgMTM1LDEwfSwgXAorICAgIHsgICAgIDc5LCA5fSwgeyAgICAxNTksIDh9LCB7ICAgIDMxOSwgOX0sIHsgICAgMTY3LDEwfSwgXAorICAgIHsgICAgIDk1LCA5fSwgeyAgICAxOTEsIDh9LCB7ICAgIDM4MywxMX0sIHsgICAgIDYzLDEwfSwgXAorICAgIHsgICAgMTI3LCA5fSwgeyAgICAyNTUsMTB9LCB7ICAgIDE0MywgOX0sIHsgICAgMjg3LDEwfSwgXAorICAgIHsgICAgMTU5LCA5fSwgeyAgICAzMTksMTF9LCB7ICAgICA5NSwxMH0sIHsgICAgMTkxLCA5fSwgXAorICAgIHsgICAgMzgzLDEyfSwgeyAgICAgNjMsMTF9LCB7ICAgIDEyNywxMH0sIHsgICAgMjcxLCA5fSwgXAorICAgIHsgICAgNTQzLDEwfSwgeyAgICAyODcsMTF9LCB7ICAgIDE1OSwxMH0sIHsgICAgMzUxLDExfSwgXAorICAgIHsgICAgMTkxLDEwfSwgeyAgICA0MTUsMTF9LCB7ICAgIDIyMywxMn0sIHsgICAgMTI3LDExfSwgXAorICAgIHsgICAgMjU1LDEwfSwgeyAgICA1MTEsMTF9LCB7ICAgIDI4NywxMH0sIHsgICAgNTc1LDExfSwgXAorICAgIHsgICAgMzUxLDEyfSwgeyAgICAxOTEsMTF9LCB7ICAgIDQxNSwxM30sIHsgICAgMTI3LDEyfSwgXAorICAgIHsgICAgMjU1LDExfSwgeyAgICA1NzUsMTJ9LCB7ICAgIDMxOSwxMX0sIHsgICAgNzAzLDEyfSwgXAorICAgIHsgICAgMzgzLDExfSwgeyAgICA4MzEsMTJ9LCB7ICAgIDQ0NywxM30sIHsgICA4MTkyLDE0fSwgXAorICAgIHsgIDE2Mzg0LDE1fSwgeyAgMzI3NjgsMTZ9IH0KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTNfU0laRSA5MAorI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMzUyMAorCisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgMzQwICAvKiBrID0gNSAqLworI2RlZmluZSBTUVJfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgMzQwLCA1fSwgeyAgICAgMTcsIDZ9LCB7ICAgICAgOSwgNX0sIHsgICAgIDE5LCA2fSwgXAorICAgIHsgICAgIDE3LCA3fSwgeyAgICAgIDksIDZ9LCB7ICAgICAyMSwgN30sIHsgICAgIDExLCA2fSwgXAorICAgIHsgICAgIDIzLCA3fSwgeyAgICAgMTUsIDZ9LCB7ICAgICAzMSwgN30sIHsgICAgIDIxLCA4fSwgXAorICAgIHsgICAgIDExLCA3fSwgeyAgICAgMjksIDh9LCB7ICAgICAxNSwgN30sIHsgICAgIDMzLCA4fSwgXAorICAgIHsgICAgIDE5LCA3fSwgeyAgICAgMzksIDh9LCB7ICAgICAyNywgN30sIHsgICAgIDU1LCA5fSwgXAorICAgIHsgICAgIDE1LCA4fSwgeyAgICAgMzEsIDd9LCB7ICAgICA2NSwgOH0sIHsgICAgIDQzLCA5fSwgXAorICAgIHsgICAgIDIzLCA4fSwgeyAgICAgNDcsMTB9LCB7ICAgICAxNSwgOX0sIHsgICAgIDMxLCA4fSwgXAorICAgIHsgICAgIDY3LCA5fSwgeyAgICAgMzksIDh9LCB7ICAgICA4MywgOX0sIHsgICAgIDQ3LCA4fSwgXAorICAgIHsgICAgIDk1LDEwfSwgeyAgICAgMzEsIDl9LCB7ICAgICA2MywgOH0sIHsgICAgMTI3LCA5fSwgXAorICAgIHsgICAgIDc5LDEwfSwgeyAgICAgNDcsIDl9LCB7ICAgICA5NSwxMX0sIHsgICAgIDMxLDEwfSwgXAorICAgIHsgICAgIDYzLCA5fSwgeyAgICAxMjcsIDh9LCB7ICAgIDI1NSwgOX0sIHsgICAgMTM1LDEwfSwgXAorICAgIHsgICAgIDc5LCA5fSwgeyAgICAxNTksIDh9LCB7ICAgIDMxOSwxMH0sIHsgICAgIDk1LCA5fSwgXAorICAgIHsgICAgMTkxLDExfSwgeyAgICAgNjMsMTB9LCB7ICAgIDEyNywgOX0sIHsgICAgMjU1LCA4fSwgXAorICAgIHsgICAgNTExLCA5fSwgeyAgICAyNzEsMTB9LCB7ICAgIDE0MywgOX0sIHsgICAgMjg3LCA4fSwgXAorICAgIHsgICAgNTc1LCA5fSwgeyAgICAzMDMsMTB9LCB7ICAgIDE1OSwgOX0sIHsgICAgMzE5LDExfSwgXAorICAgIHsgICAgIDk1LDEwfSwgeyAgICAxOTEsIDl9LCB7ICAgIDM4MywxMH0sIHsgICAgMjA3LDEyfSwgXAorICAgIHsgICAgIDYzLDExfSwgeyAgICAxMjcsMTB9LCB7ICAgIDI3MSwgOX0sIHsgICAgNTQzLDEwfSwgXAorICAgIHsgICAgMjg3LCA5fSwgeyAgICA1NzUsMTB9LCB7ICAgIDMwMywxMX0sIHsgICAgMTU5LDEwfSwgXAorICAgIHsgICAgMzUxLDExfSwgeyAgICAxOTEsMTB9LCB7ICAgIDQxNSwxMX0sIHsgICAgMjIzLDEwfSwgXAorICAgIHsgICAgNDQ3LDEyfSwgeyAgICAxMjcsMTF9LCB7ICAgIDI1NSwxMH0sIHsgICAgNTQzLDExfSwgXAorICAgIHsgICAgMjg3LDEwfSwgeyAgICA2MDcsMTF9LCB7ICAgIDM1MSwxMn0sIHsgICAgMTkxLDExfSwgXAorICAgIHsgICAgNDc5LDEzfSwgeyAgICAxMjcsMTJ9LCB7ICAgIDI1NSwxMX0sIHsgICAgNTc1LDEyfSwgXAorICAgIHsgICAgMzE5LDExfSwgeyAgICA3MDMsMTJ9LCB7ICAgIDM4MywxMX0sIHsgICAgNzY3LDEyfSwgXAorICAgIHsgICAgNDQ3LDEzfSwgeyAgIDgxOTIsMTR9LCB7ICAxNjM4NCwxNX0sIHsgIDMyNzY4LDE2fSB9CisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzX1NJWkUgOTYKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDU1MDQKKworI2RlZmluZSBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDQ4CisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgICA2NjMzCisKKyNkZWZpbmUgRENfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNDMKKyNkZWZpbmUgRENfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAxNzAKKyNkZWZpbmUgRENfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNDMKKyNkZWZpbmUgRENfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMTAKKworI2RlZmluZSBJTlZfTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAzMAorI2RlZmluZSBJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE3NworI2RlZmluZSBJTlZfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDE3MQorCisjZGVmaW5lIEJJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTk0CisjZGVmaW5lIFJFRENfMV9UT19SRURDX05fVEhSRVNIT0xEICAgICAgICAgIDUwCisKKyNkZWZpbmUgTVVfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDExNDIKKyNkZWZpbmUgTVVfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgIDExNDIKKyNkZWZpbmUgTVVQSV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgOTAKKyNkZWZpbmUgTVVfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICA5NDIKKyNkZWZpbmUgTVVfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDEwMTcKKworI2RlZmluZSBNQVRSSVgyMl9TVFJBU1NFTl9USFJFU0hPTEQgICAgICAgICAxMworI2RlZmluZSBIR0NEX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgICA5MgorI2RlZmluZSBHQ0RfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDI4MworI2RlZmluZSBHQ0RFWFRfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDIyMQorI2RlZmluZSBKQUNPQklfQkFTRV9NRVRIT0QgICAgICAgICAgICAgICAgICAgMgorCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgIDMxCisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgNDkwCisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgOTk0CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtL21teC9oYW1kaXN0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW0vbW14L2hhbWRpc3QuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZTMxOTYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtL21teC9oYW1kaXN0LmFzbQpAQCAtMCwwICsxLDQwIEBACitkbmwgIEludGVsIFA1NSBtcG5faGFtZGlzdCAtLSBtcG4gaGFtbWluZyBkaXN0YW5jZS4KKworZG5sICBDb3B5cmlnaHQgMjAwMCwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MgUDU1OiBoYW1kaXN0IDEyLjAgY3ljbGVzL2xpbWIKKworQyBGb3IgcmVmZXJlbmNlLCB0aGlzIGNvZGUgcnVucyBhdCAxMS41IGN5Y2xlcy9saW1iIGZvciBwb3Bjb3VudCwgd2hpY2ggaXMKK0Mgc2xvd2VyIHRoYW4gdGhlIHBsYWluIGludGVnZXIgbXBuL3g4Ni9wZW50aXVtL3BvcGNvdW50LmFzbS4KKworTVVMRlVOQ19QUk9MT0dVRShtcG5faGFtZGlzdCkKK2luY2x1ZGVfbXBuKGB4ODYvazYvbW14L3BvcGhhbS5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bS9tbXgvbHNoaWZ0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW0vbW14L2xzaGlmdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRiMGRkYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW0vbW14L2xzaGlmdC5hc20KQEAgLTAsMCArMSw0NjMgQEAKK2RubCAgSW50ZWwgUDUgbXBuX2xzaGlmdCAtLSBtcG4gbGVmdCBzaGlmdC4KKworZG5sICBDb3B5cmlnaHQgMjAwMC0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQyBQNTogMS43NSBjeWNsZXMvbGltYi4KKworCitDIG1wX2xpbWJfdCBtcG5fbHNoaWZ0IChtcF9wdHIgZHN0LCBtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSwKK0MgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNoaWZ0KTsKK0MKK0MgU2hpZnQgc3JjLHNpemUgbGVmdCBieSBzaGlmdCBtYW55IGJpdHMgYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gZHN0LHNpemUuCitDIFplcm9zIGFyZSBzaGlmdGVkIGluIGF0IHRoZSByaWdodC4gIFJldHVybiB0aGUgYml0cyBzaGlmdGVkIG91dCBhdCB0aGUKK0MgbGVmdC4KK0MKK0MgVGhlIGNvbW1lbnRzIGluIG1wbl9yc2hpZnQgYXBwbHkgaGVyZSB0b28uCisKK2RlZmZyYW1lKFBBUkFNX1NISUZULDE2KQorZGVmZnJhbWUoUEFSQU1fU0laRSwgMTIpCitkZWZmcmFtZShQQVJBTV9TUkMsICA4KQorZGVmZnJhbWUoUEFSQU1fRFNULCAgNCkKK2RlZmxpdChgRlJBTUUnLDApCisKK2RubCAgbWluaW11bSA1LCBiZWNhdXNlIHRoZSB1bnJvbGxlZCBsb29wIGNhbid0IGhhbmRsZSBsZXNzCitkZWZsaXQoVU5ST0xMX1RIUkVTSE9MRCwgNSkKKworCVRFWFQKKwlBTElHTig4KQorCitQUk9MT0dVRShtcG5fbHNoaWZ0KQorCisJcHVzaGwJJWVieAorCXB1c2hsCSVlZGkKK2RlZmxpdChgRlJBTUUnLDgpCisKKwltb3ZsCVBBUkFNX1NJWkUsICVlYXgKKwltb3ZsCVBBUkFNX0RTVCwgJWVkeAorCisJbW92bAlQQVJBTV9TUkMsICVlYngKKwltb3ZsCVBBUkFNX1NISUZULCAlZWN4CisKKwljbXAJJFVOUk9MTF9USFJFU0hPTEQsICVlYXgKKwlqYWUJTCh1bnJvbGwpCisKKwltb3ZsCS00KCVlYngsJWVheCw0KSwgJWVkaQlDIHNyYyBoaWdoIGxpbWIKKwlkZWNsCSVlYXgKKworCWpueglMKHNpbXBsZSkKKworCXNobGRsKAklY2wsICVlZGksICVlYXgpCUMgZWF4IHdhcyBkZWNyZW1lbnRlZCB0byB6ZXJvCisKKwlzaGxsCSVjbCwgJWVkaQorCisJbW92bAklZWRpLCAoJWVkeCkJCUMgZHN0IGxvdyBsaW1iCisJcG9wbAklZWRpCQkJQyByaXNrIG9mIGRhdGEgY2FjaGUgYmFuayBjbGFzaAorCisJcG9wbAklZWJ4CisKKwlyZXQKKworCitDIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMKHNpbXBsZSk6CisJQyBlYXgJc2l6ZS0xCisJQyBlYngJc3JjCisJQyBlY3gJc2hpZnQKKwlDIGVkeAlkc3QKKwlDIGVzaQorCUMgZWRpCisJQyBlYnAKK2RlZmxpdChgRlJBTUUnLDgpCisKKwltb3ZkCSglZWJ4LCVlYXgsNCksICVtbTUJQyBzcmMgaGlnaCBsaW1iCisKKwltb3ZkCSVlY3gsICVtbTYJCUMgbHNoaWZ0CisJbmVnbAklZWN4CisKKwlwc2xscQklbW02LCAlbW01CisJYWRkbAkkMzIsICVlY3gKKworCW1vdmQJJWVjeCwgJW1tNworCXBzcmxxCSQzMiwgJW1tNQkJQyByZXR2YWwKKworCitMKHNpbXBsZV90b3ApOgorCUMgZWF4CWNvdW50ZXIsIGxpbWJzLCBuZWdhdGl2ZQorCUMgZWJ4CXNyYworCUMgZWN4CisJQyBlZHgJZHN0CisJQyBlc2kKKwlDIGVkaQorCUMKKwlDIG1tMAlzY3JhdGNoCisJQyBtbTUJcmV0dXJuIHZhbHVlCisJQyBtbTYJc2hpZnQKKwlDIG1tNwkzMi1zaGlmdAorCisJbW92cQktNCglZWJ4LCVlYXgsNCksICVtbTAKKwlkZWNsCSVlYXgKKworCXBzcmxxCSVtbTcsICVtbTAKKworCUMKKworCW1vdmQJJW1tMCwgNCglZWR4LCVlYXgsNCkKKwlqbnoJTChzaW1wbGVfdG9wKQorCisKKwltb3ZkCSglZWJ4KSwgJW1tMAorCisJbW92ZAklbW01LCAlZWF4CisJcHNsbHEJJW1tNiwgJW1tMAorCisJcG9wbAklZWRpCisJcG9wbAklZWJ4CisKKwltb3ZkCSVtbTAsICglZWR4KQorCisJZW1tcworCisJcmV0CisKKworQyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUFMSUdOKDgpCitMKHVucm9sbCk6CisJQyBlYXgJc2l6ZQorCUMgZWJ4CXNyYworCUMgZWN4CXNoaWZ0CisJQyBlZHgJZHN0CisJQyBlc2kKKwlDIGVkaQorCUMgZWJwCitkZWZsaXQoYEZSQU1FJyw4KQorCisJbW92ZAktNCglZWJ4LCVlYXgsNCksICVtbTUJQyBzcmMgaGlnaCBsaW1iCisJbGVhbAkoJWVieCwlZWF4LDQpLCAlZWRpCisKKwltb3ZkCSVlY3gsICVtbTYJCUMgbHNoaWZ0CisJYW5kbAkkNCwgJWVkaQorCisJcHNsbHEJJW1tNiwgJW1tNQorCWp6CUwoc3RhcnRfc3JjX2FsaWduZWQpCisKKworCUMgc3JjIGlzbid0IGFsaWduZWQsIHByb2Nlc3MgaGlnaCBsaW1iIHNlcGFyYXRlbHkgKG1hcmtlZCB4eHgpIHRvCisJQyBtYWtlIGl0IHNvLgorCUMKKwlDICBzb3VyY2UgICAgIC04KGVieCwlZWF4LDQpCisJQyAgICAgICAgICAgICAgICAgIHwKKwlDICArLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0KKwlDICB8ICAgICAgICAgICAgICAgfAorCUMgICstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLQorCUMgICAgICAgIDBtb2Q4ICAgNG1vZDggICAwbW9kOAorCUMKKwlDICBkZXN0CisJQyAgICAgLTQoZWR4LCVlYXgsNCkKKwlDICAgICAgICAgIHwKKwlDICArLS0tLS0tLSstLS0tLS0tKy0tCisJQyAgfCAgeHh4ICB8ICAgICAgIHwKKwlDICArLS0tLS0tLSstLS0tLS0tKy0tCisKKwltb3ZxCS04KCVlYngsJWVheCw0KSwgJW1tMAlDIHVuYWxpZ25lZCBsb2FkCisKKwlwc2xscQklbW02LCAlbW0wCisJZGVjbAklZWF4CisKKwlwc3JscQkkMzIsICVtbTAKKworCUMKKworCW1vdmQJJW1tMCwgKCVlZHgsJWVheCw0KQorTChzdGFydF9zcmNfYWxpZ25lZCk6CisKKwltb3ZxCS04KCVlYngsJWVheCw0KSwgJW1tMQlDIHNyYyBoaWdoIHF3b3JkCisJbGVhbAkoJWVkeCwlZWF4LDQpLCAlZWRpCisKKwlhbmRsCSQ0LCAlZWRpCisJcHNybHEJJDMyLCAlbW01CQlDIHJldHVybiB2YWx1ZQorCisJbW92cQktMTYoJWVieCwlZWF4LDQpLCAlbW0zCUMgc3JjIHNlY29uZCBoaWdoZXN0IHF3b3JkCisJanoJTChzdGFydF9kc3RfYWxpZ25lZCkKKworCUMgZHN0IGlzbid0IGFsaWduZWQsIHN1YnRyYWN0IDQgdG8gbWFrZSBpdCBzbywgYW5kIHByZXRlbmQgdGhlIHNoaWZ0CisJQyBpcyAzMiBiaXRzIGV4dHJhLiAgSGlnaCBsaW1iIG9mIGRzdCAobWFya2VkIHh4eCkgaGFuZGxlZCBoZXJlCisJQyBzZXBhcmF0ZWx5LgorCUMKKwlDICBzb3VyY2UgICAgIC04KGVieCwlZWF4LDQpCisJQyAgICAgICAgICAgICAgICAgIHwKKwlDICArLS0tLS0tLSstLS0tLS0tKy0tCisJQyAgfCAgICAgIG1tMSAgICAgIHwKKwlDICArLS0tLS0tLSstLS0tLS0tKy0tCisJQyAgICAgICAgICAgICAgICAwbW9kOCAgIDRtb2Q4CisJQworCUMgIGRlc3QKKwlDICAgICAtNChlZHgsJWVheCw0KQorCUMgICAgICAgICAgfAorCUMgICstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLQorCUMgIHwgIHh4eCAgfCAgICAgICAgICAgICAgIHwKKwlDICArLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0KKwlDICAgICAgICAwbW9kOCAgIDRtb2Q4ICAgMG1vZDgKKworCW1vdnEJJW1tMSwgJW1tMAorCWFkZGwJJDMyLCAlZWN4CQlDIG5ldyBzaGlmdAorCisJcHNsbHEJJW1tNiwgJW1tMAorCisJbW92ZAklZWN4LCAlbW02CisJcHNybHEJJDMyLCAlbW0wCisKKwlDIHdhc3RlZCBjeWNsZSBoZXJlIHdhaXRpbmcgZm9yICVtbTAKKworCW1vdmQJJW1tMCwgLTQoJWVkeCwlZWF4LDQpCisJc3VibAkkNCwgJWVkeAorTChzdGFydF9kc3RfYWxpZ25lZCk6CisKKworCXBzbGxxCSVtbTYsICVtbTEKKwluZWdsCSVlY3gJCQlDIC1zaGlmdAorCisJYWRkbAkkNjQsICVlY3gJCUMgNjQtc2hpZnQKKwltb3ZxCSVtbTMsICVtbTIKKworCW1vdmQJJWVjeCwgJW1tNworCXN1YmwJJDgsICVlYXgJCUMgc2l6ZS04CisKKwlwc3JscQklbW03LCAlbW0zCisKKwlwb3IJJW1tMSwgJW1tMwkJQyBtbTMgcmVhZHkgdG8gc3RvcmUKKwlqYwlMKGZpbmlzaCkKKworCisJQyBUaGUgY29tbWVudHMgaW4gbXBuX3JzaGlmdCBhcHBseSBoZXJlIHRvby4KKworCUFMSUdOKDgpCitMKHVucm9sbF9sb29wKToKKwlDIGVheAljb3VudGVyLCBsaW1icworCUMgZWJ4CXNyYworCUMgZWN4CisJQyBlZHgJZHN0CisJQyBlc2kKKwlDIGVkaQorCUMKKwlDIG1tMAorCUMgbW0xCisJQyBtbTIJc3JjIHF3b3JkIGZyb20gMTYoJWVieCwlZWF4LDQpCisJQyBtbTMJZHN0IHF3b3JkIHJlYWR5IHRvIHN0b3JlIHRvIDI0KCVlZHgsJWVheCw0KQorCUMKKwlDIG1tNQlyZXR1cm4gdmFsdWUKKwlDIG1tNglsc2hpZnQKKwlDIG1tNwlyc2hpZnQKKworCW1vdnEJOCglZWJ4LCVlYXgsNCksICVtbTAKKwlwc2xscQklbW02LCAlbW0yCisKKwltb3ZxCSVtbTAsICVtbTEKKwlwc3JscQklbW03LCAlbW0wCisKKwltb3ZxCSVtbTMsIDI0KCVlZHgsJWVheCw0KQlDIHByZXYKKwlwb3IJJW1tMiwgJW1tMAorCisJbW92cQkoJWVieCwlZWF4LDQpLCAlbW0zCUMKKwlwc2xscQklbW02LCAlbW0xCQlDCisKKwltb3ZxCSVtbTAsIDE2KCVlZHgsJWVheCw0KQorCW1vdnEJJW1tMywgJW1tMgkJQworCisJcHNybHEJJW1tNywgJW1tMwkJQworCXN1YmwJJDQsICVlYXgKKworCXBvcgklbW0xLCAlbW0zCQlDCisJam5jCUwodW5yb2xsX2xvb3ApCisKKworCitMKGZpbmlzaCk6CisJQyBlYXgJLTQgdG8gLTEgcmVwcmVzZW50aW5nIHJlc3BlY3RpdmVseSAwIHRvIDMgbGltYnMgcmVtYWluaW5nCisKKwl0ZXN0YgkkMiwgJWFsCisKKwlqeglMKGZpbmlzaF9ub190d28pCisKKwltb3ZxCTgoJWVieCwlZWF4LDQpLCAlbW0wCisJcHNsbHEJJW1tNiwgJW1tMgorCisJbW92cQklbW0wLCAlbW0xCisJcHNybHEJJW1tNywgJW1tMAorCisJbW92cQklbW0zLCAyNCglZWR4LCVlYXgsNCkJQyBwcmV2CisJcG9yCSVtbTIsICVtbTAKKworCW1vdnEJJW1tMSwgJW1tMgorCW1vdnEJJW1tMCwgJW1tMworCisJc3VibAkkMiwgJWVheAorTChmaW5pc2hfbm9fdHdvKToKKworCisJQyBlYXgJLTQgb3IgLTMgcmVwcmVzZW50aW5nIHJlc3BlY3RpdmVseSAwIG9yIDEgbGltYnMgcmVtYWluaW5nCisJQworCUMgbW0yCXNyYyBwcmV2IHF3b3JkLCBmcm9tIDE2KCVlYngsJWVheCw0KQorCUMgbW0zCWRzdCBxd29yZCwgZm9yIDI0KCVlZHgsJWVheCw0KQorCisJdGVzdGIJJDEsICVhbAorCW1vdmQJJW1tNSwgJWVheAlDIHJldHZhbAorCisJcG9wbAklZWRpCisJanoJTChmaW5pc2hfemVybykKKworCisJQyBPbmUgZXh0cmEgc3JjIGxpbWIsIGRlc3RpbmF0aW9uIHdhcyBhbGlnbmVkLgorCUMKKwlDICAgICAgICAgICAgICAgICBzb3VyY2UgICAgICAgICAgICAgICAgICBlYngKKwlDICAgICAgICAgICAgICAgICAtLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSsKKwlDICAgICAgICAgICAgICAgICAgIHwgICAgICBtbTIgICAgICB8ICAgICAgIHwKKwlDICAgICAgICAgICAgICAgICAtLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSsKKwlDCisJQyBkZXN0ICAgICAgICAgZWR4KzEyICAgICAgICAgICBlZHgrNCAgICAgZWR4CisJQyAtLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rCisJQyAgIHwgICAgICBtbTMgICAgICB8ICAgICAgICAgICAgICAgfCAgICAgICB8CisJQyAtLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rCisJQworCUMgbW02ID0gc2hpZnQKKwlDIG1tNyA9IGVjeCA9IDY0LXNoaWZ0CisKKworCUMgT25lIGV4dHJhIHNyYyBsaW1iLCBkZXN0aW5hdGlvbiB3YXMgdW5hbGlnbmVkLgorCUMKKwlDICAgICAgICAgICAgICAgICBzb3VyY2UgICAgICAgICAgICAgICAgICBlYngKKwlDICAgICAgICAgICAgICAgICAtLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSsKKwlDICAgICAgICAgICAgICAgICAgIHwgICAgICBtbTIgICAgICB8ICAgICAgIHwKKwlDICAgICAgICAgICAgICAgICAtLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSsKKwlDCisJQyAgICAgICAgIGRlc3QgICAgICAgICBlZHgrMTIgICAgICAgICAgIGVkeCs0CisJQyAgICAgICAgIC0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisJQyAgICAgICAgICAgfCAgICAgIG1tMyAgICAgIHwgICAgICAgICAgICAgICB8CisJQyAgICAgICAgIC0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisJQworCUMgbW02ID0gc2hpZnQrMzIKKwlDIG1tNyA9IGVjeCA9IDY0LShzaGlmdCszMikKKworCisJQyBJbiBib3RoIGNhc2VzIHRoZXJlJ3Mgb25lIGV4dHJhIGxpbWIgb2Ygc3JjIHRvIGZldGNoIGFuZCBjb21iaW5lCisJQyB3aXRoIG1tMiB0byBtYWtlIGEgcXdvcmQgYXQgNCglZWR4KSwgYW5kIGluIHRoZSBhbGlnbmVkIGNhc2UKKwlDIHRoZXJlJ3MgYW4gZXh0cmEgbGltYiBvZiBkc3QgdG8gYmUgZm9ybWVkIGZyb20gdGhhdCBleHRyYSBzcmMgbGltYgorCUMgbGVmdCBzaGlmdGVkLgorCisKKwltb3ZkCSglZWJ4KSwgJW1tMAorCXBzbGxxCSVtbTYsICVtbTIKKworCW1vdnEJJW1tMywgMTIoJWVkeCkKKwlwc2xscQkkMzIsICVtbTAKKworCW1vdnEJJW1tMCwgJW1tMQorCXBzcmxxCSVtbTcsICVtbTAKKworCXBvcgklbW0yLCAlbW0wCisJcHNsbHEJJW1tNiwgJW1tMQorCisJbW92cQklbW0wLCA0KCVlZHgpCisJcHNybHEJJDMyLCAlbW0xCisKKwlhbmRsCSQzMiwgJWVjeAorCXBvcGwJJWVieAorCisJanoJTChmaW5pc2hfb25lX3VuYWxpZ25lZCkKKworCW1vdmQJJW1tMSwgKCVlZHgpCitMKGZpbmlzaF9vbmVfdW5hbGlnbmVkKToKKworCWVtbXMKKworCXJldAorCisKK0woZmluaXNoX3plcm8pOgorCisJQyBObyBleHRyYSBzcmMgbGltYnMsIGRlc3RpbmF0aW9uIHdhcyBhbGlnbmVkLgorCUMKKwlDICAgICAgICAgICAgICAgICBzb3VyY2UgICAgICAgICAgZWJ4CisJQyAgICAgICAgICAgICAgICAgLS0rLS0tLS0tLS0tLS0tLS0tKworCUMgICAgICAgICAgICAgICAgICAgfCAgICAgIG1tMiAgICAgIHwKKwlDICAgICAgICAgICAgICAgICAtLSstLS0tLS0tLS0tLS0tLS0rCisJQworCUMgZGVzdCAgICAgICAgICBlZHgrOCAgICAgICAgICAgICBlZHgKKwlDIC0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisJQyAgIHwgICAgICBtbTMgICAgICB8ICAgICAgICAgICAgICAgfAorCUMgLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKwlDCisJQyBtbTYgPSBzaGlmdAorCUMgbW03ID0gZWN4ID0gNjQtc2hpZnQKKworCisJQyBObyBleHRyYSBzcmMgbGltYnMsIGRlc3RpbmF0aW9uIHdhcyB1bmFsaWduZWQuCisJQworCUMgICAgICAgICAgICAgICBzb3VyY2UgICAgICAgICAgICBlYngKKwlDICAgICAgICAgICAgICAgICAtLSstLS0tLS0tLS0tLS0tLS0rCisJQyAgICAgICAgICAgICAgICAgICB8ICAgICAgbW0yICAgICAgfAorCUMgICAgICAgICAgICAgICAgIC0tKy0tLS0tLS0tLS0tLS0tLSsKKwlDCisJQyAgICAgICAgIGRlc3QgICAgICAgICAgZWR4KzggICBlZHgrNAorCUMgICAgICAgICAtLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSsKKwlDICAgICAgICAgICB8ICAgICAgbW0zICAgICAgfCAgICAgICB8CisJQyAgICAgICAgIC0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tKworCUMKKwlDIG1tNiA9IHNoaWZ0KzMyCisJQyBtbTcgPSBlY3ggPSA2NC0oc2hpZnQrMzIpCisKKworCUMgVGhlIG1vdmQgZm9yIHRoZSB1bmFsaWduZWQgY2FzZSB3cml0ZXMgdGhlIHNhbWUgZGF0YSB0byA0KCVlZHgpCisJQyB0aGF0IHRoZSBtb3ZxIGRvZXMgZm9yIHRoZSBhbGlnbmVkIGNhc2UuCisKKworCW1vdnEJJW1tMywgOCglZWR4KQorCWFuZGwJJDMyLCAlZWN4CisKKwlwc2xscQklbW02LCAlbW0yCisJanoJTChmaW5pc2hfemVyb191bmFsaWduZWQpCisKKwltb3ZxCSVtbTIsICglZWR4KQorTChmaW5pc2hfemVyb191bmFsaWduZWQpOgorCisJcHNybHEJJDMyLCAlbW0yCisJcG9wbAklZWJ4CisKKwltb3ZkCSVtbTUsICVlYXgJQyByZXR2YWwKKworCW1vdmQJJW1tMiwgNCglZWR4KQorCisJZW1tcworCisJcmV0CisKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW0vbW14L211bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW0vbW14L211bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2VkNTc3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bS9tbXgvbXVsXzEuYXNtCkBAIC0wLDAgKzEsMzcxIEBACitkbmwgIEludGVsIFBlbnRpdW0gTU1YIG1wbl9tdWxfMSAtLSBtcG4gYnkgbGltYiBtdWx0aXBsaWNhdGlvbi4KKworZG5sICBDb3B5cmlnaHQgMjAwMC0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQyAgICBjeWNsZXMvbGltYgorQyBQNTogICAxMi4wICAgZm9yIDMyLWJpdCBtdWx0aXBsaWVyCitDICAgICAgICA3LjAgICBmb3IgMTYtYml0IG11bHRpcGxpZXIKKworCitDIG1wX2xpbWJfdCBtcG5fbXVsXzEgKG1wX3B0ciBkc3QsIG1wX3NyY3B0ciBzcmMsIG1wX3NpemVfdCBzaXplLAorQyAgICAgICAgICAgICAgICAgICAgICBtcF9saW1iX3QgbXVsdGlwbGllcik7CitDCitDIFdoZW4gdGhlIG11bHRpcGxpZXIgaXMgMTYgYml0cyBzb21lIHNwZWNpYWwgY2FzZSBNTVggY29kZSBpcyB1c2VkLiAgU21hbGwKK0MgbXVsdGlwbGllcnMgbWlnaHQgYXJpc2UgcmVhc29uYWJseSBvZnRlbiBmcm9tIG1wel9tdWxfdWkgZXRjLiAgSWYgdGhlIHNpemUKK0MgaXMgb2RkIHRoZXJlJ3Mgcm91Z2hseSBhIDUgY3ljbGUgcGVuYWx0eSwgc28gdGltZXMgZm9yIHNheSBzaXplPT03IGFuZAorQyBzaXplPT04IGVuZCB1cCBiZWluZyBxdWl0ZSBjbG9zZS4gIElmIHNyYyBpc24ndCBhbGlnbmVkIHRvIGFuIDggYnl0ZQorQyBib3VuZGFyeSB0aGVuIG9uZSBsaW1iIGlzIHByb2Nlc3NlZCBzZXBhcmF0ZWx5IHdpdGggcm91Z2hseSBhIDUgY3ljbGUKK0MgcGVuYWx0eSwgc28gaW4gdGhhdCBjYXNlIGl0J3Mgc2F5IHNpemU9PTggYW5kIHNpemU9PTkgd2hpY2ggYXJlIGNsb3NlLgorQworQyBBbHRlcm5hdGl2ZXM6CitDCitDIE1NWCBpcyBub3QgYmVsaWV2ZWQgdG8gYmUgb2YgYW55IHVzZSBmb3IgMzItYml0IG11bHRpcGxpZXJzLCBzaW5jZSBmb3IKK0MgaW5zdGFuY2UgdGhlIGN1cnJlbnQgbWV0aG9kIHdvdWxkIGp1c3QgaGF2ZSB0byBiZSBtb3JlIG9yIGxlc3MgZHVwbGljYXRlZAorQyBmb3IgdGhlIGhpZ2ggYW5kIGxvdyBoYWx2ZXMgb2YgdGhlIG11bHRpcGxpZXIsIGFuZCB3b3VsZCBwcm9iYWJseQorQyB0aGVyZWZvcmUgcnVuIGF0IGFib3V0IDE0IGN5Y2xlcywgd2hpY2ggaXMgc2xvd2VyIHRoYW4gdGhlIHBsYWluIGludGVnZXIKK0MgYXQgMTIuCitDCitDIEFkZGluZyB0aGUgaGlnaCBhbmQgbG93IE1NWCBwcm9kdWN0cyB1c2luZyBpbnRlZ2VyIGNvZGUgc2VlbXMgYmVzdC4gIEFuCitDIGF0dGVtcHQgYXQgdXNpbmcgcGFkZGQgYW5kIGNhcnJ5IGJpdCBwcm9wYWdhdGlvbiB3aXRoIHBjbXBndGQgZGlkbid0IGdpdmUKK0MgYW55IGpveS4gIFBlcmhhcHMgc29tZXRoaW5nIGNvdWxkIGJlIGRvbmUga2VlcGluZyB0aGUgdmFsdWVzIHNpZ25lZCBhbmQKK0MgdGhlcmVieSBhdm9pZGluZyBhZGp1c3RtZW50cyB0byBtYWtlIHBjbXBndGQgaW50byBhbiB1bnNpZ25lZCBjb21wYXJlLCBvcgorQyBwZXJoYXBzIG5vdC4KK0MKK0MgRnV0dXJlOgorQworQyBBbiBtcG5fbXVsXzFjIGVudHJ5cG9pbnQgd291bGQgbmVlZCBhIGRvdWJsZSBjYXJyeSBvdXQgb2YgdGhlIGxvdyByZXN1bHQKK0MgbGltYiBpbiB0aGUgMTYtYml0IGNvZGUsIHVubGVzcyBpdCBjb3VsZCBiZSBhc3N1bWVkIHRoZSBjYXJyeSBmaXRzIGluIDE2CitDIGJpdHMsIHBvc3NpYmx5IGFzIGNhcnJ5PG11bHRpcGxpZXIsIHRoaXMgYmVpbmcgdHJ1ZSBvZiBhIGJpZyBjYWxjdWxhdGlvbgorQyBkb25lIHBpZWNlIGJ5IHBpZWNlLiAgQnV0IGxldCdzIHdvcnJ5IGFib3V0IHRoYXQgaWYvd2hlbiBtdWxfMWMgaXMKK0MgYWN0dWFsbHkgdXNlZC4KKworZGVmZnJhbWUoUEFSQU1fTVVMVElQTElFUiwxNikKK2RlZmZyYW1lKFBBUkFNX1NJWkUsICAgICAgMTIpCitkZWZmcmFtZShQQVJBTV9TUkMsICAgICAgIDgpCitkZWZmcmFtZShQQVJBTV9EU1QsICAgICAgIDQpCisKKwlURVhUCisKKwlBTElHTig4KQorUFJPTE9HVUUobXBuX211bF8xKQorZGVmbGl0KGBGUkFNRScsMCkKKworCW1vdmwJUEFSQU1fU0laRSwgJWVjeAorCW1vdmwJUEFSQU1fU1JDLCAlZWR4CisKKwljbXBsCSQxLCAlZWN4CisJam5lCUwodHdvX29yX21vcmUpCisKKwlDIG9uZSBsaW1iIG9ubHkKKworCW1vdmwJUEFSQU1fTVVMVElQTElFUiwgJWVheAorCW1vdmwJUEFSQU1fRFNULCAlZWN4CisKKwltdWxsCSglZWR4KQorCisJbW92bAklZWF4LCAoJWVjeCkKKwltb3ZsCSVlZHgsICVlYXgKKworCXJldAorCisKK0wodHdvX29yX21vcmUpOgorCUMgZWF4CXNpemUKKwlDIGVieAorCUMgZWN4CWNhcnJ5CisJQyBlZHgKKwlDIGVzaQlzcmMKKwlDIGVkaQorCUMgZWJwCisKKwlwdXNobAklZXNpCQlGUkFNRV9wdXNobCgpCisJcHVzaGwJJWVkaQkJRlJBTUVfcHVzaGwoKQorCisJbW92bAklZWR4LCAlZXNpCQlDIHNyYworCW1vdmwJUEFSQU1fRFNULCAlZWRpCisKKwltb3ZsCVBBUkFNX01VTFRJUExJRVIsICVlYXgKKwlwdXNobAklZWJ4CQlGUkFNRV9wdXNobCgpCisKKwlsZWFsCSglZXNpLCVlY3gsNCksICVlc2kJQyBzcmMgZW5kCisJbGVhbAkoJWVkaSwlZWN4LDQpLCAlZWRpCUMgZHN0IGVuZAorCisJbmVnbAklZWN4CQkJQyAtc2l6ZQorCisJcHVzaGwJJWVicAkJRlJBTUVfcHVzaGwoKQorCWNtcGwJJDY1NTM2LCAlZWF4CisKKwlqYglMKHNtYWxsKQorCisKK0woYmlnKToKKwl4b3JsCSVlYngsICVlYngJCUMgY2FycnkgbGltYgorCXNhcmwJJWVjeAkJCUMgLXNpemUvMgorCisJam5jCUwodG9wKQkJCUMgd2l0aCBjYXJyeSBmbGFnIGNsZWFyCisKKworCUMgc2l6ZSB3YXMgb2RkLCBwcm9jZXNzIG9uZSBsaW1iIHNlcGFyYXRlbHkKKworCW11bGwJNCglZXNpLCVlY3gsOCkJCUMgbSAqIHNyY1swXQorCisJbW92bAklZWF4LCA0KCVlZGksJWVjeCw4KQorCWluY2wJJWVjeAorCisJb3JsCSVlZHgsICVlYngJCUMgY2FycnkgbGltYiwgYW5kIGNsZWFyIGNhcnJ5IGZsYWcKKworCitMKHRvcCk6CisJQyBlYXgKKwlDIGVieAljYXJyeQorCUMgZWN4CWNvdW50ZXIsIG5lZ2F0aXZlCisJQyBlZHgKKwlDIGVzaQlzcmMgZW5kCisJQyBlZGkJZHN0IGVuZAorCUMgZWJwCShzY3JhdGNoIGNhcnJ5KQorCisJYWRjbAkkMCwgJWVieAorCW1vdmwJKCVlc2ksJWVjeCw4KSwgJWVheAorCisJbXVsbAlQQVJBTV9NVUxUSVBMSUVSCisKKwltb3ZsCSVlZHgsICVlYnAKKwlhZGRsCSVlYXgsICVlYngKKworCWFkY2wJJDAsICVlYnAKKwltb3ZsCTQoJWVzaSwlZWN4LDgpLCAlZWF4CisKKwltdWxsCVBBUkFNX01VTFRJUExJRVIKKworCW1vdmwJJWVieCwgKCVlZGksJWVjeCw4KQorCWFkZGwJJWVicCwgJWVheAorCisJbW92bAklZWF4LCA0KCVlZGksJWVjeCw4KQorCWluY2wJJWVjeAorCisJbW92bAklZWR4LCAlZWJ4CisJam56CUwodG9wKQorCisKKwlhZGNsCSQwLCAlZWJ4CisJcG9wbAklZWJwCisKKwltb3ZsCSVlYngsICVlYXgKKwlwb3BsCSVlYngKKworCXBvcGwJJWVkaQorCXBvcGwJJWVzaQorCisJcmV0CisKKworTChzbWFsbCk6CisJQyBTcGVjaWFsIGNhc2UgZm9yIDE2LWJpdCBtdWx0aXBsaWVyLgorCUMKKwlDIGVheAltdWx0aXBsaWVyCisJQyBlYngKKwlDIGVjeAktc2l6ZQorCUMgZWR4CXNyYworCUMgZXNpCXNyYyBlbmQKKwlDIGVkaQlkc3QgZW5kCisJQyBlYnAJbXVsdGlwbGllcgorCisJQyBzaXplPDMgbm90IHN1cHBvcnRlZCBoZXJlLiAgQXQgc2l6ZT09MyB3ZSdyZSBhbHJlYWR5IGEgY291cGxlIG9mCisJQyBjeWNsZXMgZmFzdGVyLCBzbyB0aGVyZSdzIG5vIHRocmVzaG9sZCBhcyBzdWNoLCBqdXN0IHVzZSB0aGUgTU1YCisJQyBhcyBzb29uIGFzIHBvc3NpYmxlLgorCisJY21wbAkkLTMsICVlY3gKKwlqYQlMKGJpZykKKworCW1vdmQJJWVheCwgJW1tNwkJQyBtCisJcHhvcgklbW02LCAlbW02CQlDIGluaXRpYWwgY2Fycnkgd29yZAorCisJcHVucGNrbHdkICVtbTcsICVtbTcJCUMgbSByZXBsaWNhdGVkIDIgdGltZXMKKwlhZGRsCSQyLCAlZWN4CQlDIC1zaXplKzIKKworCXB1bnBja2xkcSAlbW03LCAlbW03CQlDIG0gcmVwbGljYXRlZCA0IHRpbWVzCisJYW5kbAkkNCwgJWVkeAkJQyB0ZXN0IGFsaWdubWVudCwgY2xlYXIgY2FycnkgZmxhZworCisJbW92cQklbW03LCAlbW0wCQlDIG0KKwlqeglMKHNtYWxsX2VudHJ5KQorCisKKwlDIFNvdXJjZSBpcyB1bmFsaWduZWQsIHByb2Nlc3Mgb25lIGxpbWIgc2VwYXJhdGVseS4KKwlDCisJQyBQbGFpbiBpbnRlZ2VyIGNvZGUgaXMgdXNlZCBoZXJlLCBzaW5jZSBpdCdzIHNtYWxsZXIgYW5kIGlzIGFib3V0CisJQyB0aGUgc2FtZSAxMyBjeWNsZXMgYXMgYW4gbW14IGJsb2NrIHdvdWxkIGJlLgorCUMKKwlDIEFuICJhZGRsICQxLCVlY3giIGRvZXNuJ3QgY2xlYXIgdGhlIGNhcnJ5IGZsYWcgd2hlbiBzaXplPT0zLCBoZW5jZQorCUMgdGhlIHVzZSBvZiBzZXBhcmF0ZSBpbmNsIGFuZCBvcmwuCisKKwltdWxsCS04KCVlc2ksJWVjeCw0KQkJQyBtICogc3JjWzBdCisKKwltb3ZsCSVlYXgsIC04KCVlZGksJWVjeCw0KQlDIGRzdFswXQorCWluY2wJJWVjeAkJCUMgb25lIGxpbWIgcHJvY2Vzc2VkCisKKwltb3ZkCSVlZHgsICVtbTYJCUMgaW5pdGlhbCBjYXJyeQorCisJb3JsCSVlYXgsICVlYXgJCUMgY2xlYXIgY2FycnkgZmxhZworCWptcAlMKHNtYWxsX2VudHJ5KQorCisKK0MgVGhlIHNjaGVkdWxpbmcgaGVyZSBpcyBxdWl0ZSB0cmlja3ksIHNpbmNlIHNvIG1hbnkgaW5zdHJ1Y3Rpb25zIGhhdmUKK0MgcGFpcmluZyByZXN0cmljdGlvbnMuICBJbiBwYXJ0aWN1bGFyIHRoZSBqcyB3b24ndCBwYWlyIHdpdGggYSBtb3ZkLCBhbmQKK0MgY2FuJ3QgYmUgcGFpcmVkIHdpdGggYW4gYWRjIHNpbmNlIGl0IHdhbnRzIGZsYWdzIGZyb20gdGhlIGluYywgc28KK0MgaW5zdHJ1Y3Rpb25zIGFyZSByb3RhdGVkIHRvIHRoZSB0b3Agb2YgdGhlIGxvb3AgdG8gZmluZCBzb21ld2hlcmUgdXNlZnVsCitDIGZvciBpdC4KK0MKK0MgVHJvdWJsZSBoYXMgYmVlbiB0YWtlbiB0byBhdm9pZCBvdmVybGFwcGluZyBzdWNjZXNzaXZlIGxvb3AgaXRlcmF0aW9ucywKK0Mgc2luY2UgdGhhdCB3b3VsZCBncmVhdGx5IGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBzdGFydHVwIGFuZCBmaW5pc2h1cAorQyBjb2RlLiAgQWN0dWFsbHkgdGhlcmUncyBwcm9iYWJseSBub3QgbXVjaCBhZHZhbnRhZ2UgdG8gYmUgaGFkIGZyb20KK0Mgb3ZlcmxhcHBpbmcgYW55d2F5LCBzaW5jZSB0aGUgZGlmZmljdWx0aWVzIGFyZSBtb3N0bHkgd2l0aCBwYWlyaW5nLCBub3QKK0Mgd2l0aCBsYXRlbmNpZXMgYXMgc3VjaC4KK0MKK0MgSW4gdGhlIGNvbW1lbnRzIHggcmVwcmVzZW50cyB0aGUgc3JjIGRhdGEgYW5kIG0gdGhlIG11bHRpcGxpZXIgKDE2CitDIGJpdHMsIGJ1dCByZXBsaWNhdGVkIDQgdGltZXMpLgorQworQyBUaGUgbSBzaWducyBjYWxjdWxhdGVkIGluICVtbTMgYXJlIGEgbG9vcCBpbnZhcmlhbnQgYW5kIGNvdWxkIGJlIGhlbGQgaW4KK0Mgc2F5ICVtbTUsIGJ1dCB0aGF0IHdvdWxkIHNhdmUgb25seSBvbmUgaW5zdHJ1Y3Rpb24gYW5kIGhlbmNlIGJlIG5vIGZhc3Rlci4KKworTChzbWFsbF90b3ApOgorCUMgZWF4CWwubG93LCB0aGVuIGwuaGlnaAorCUMgZWJ4CShoLmxvdykKKwlDIGVjeAljb3VudGVyLCAtc2l6ZSsyIHRvIDAgb3IgMQorCUMgZWR4CShoLmhpZ2gpCisJQyBlc2kJJnNyY1tzaXplXQorCUMgZWRpCSZkc3Rbc2l6ZV0KKwlDIGVicAorCUMKKwlDICVtbTAJKGhpZ2ggcHJvZHVjdHMpCisJQyAlbW0xCShsb3cgcHJvZHVjdHMpCisJQyAlbW0yCShhZGp1c3QgZm9yIG0gdXNpbmcgeCBzaWducykKKwlDICVtbTMJKGFkanVzdCBmb3IgeCB1c2luZyBtIHNpZ25zKQorCUMgJW1tNAorCUMgJW1tNQorCUMgJW1tNgloLmxvdywgdGhlbiBjYXJyeQorCUMgJW1tNwltIHJlcGxpY2F0ZWQgNCB0aW1lcworCisJbW92ZAklbW02LCAlZWJ4CQlDIGgubG93CisJcHNybHEJJDMyLCAlbW0xCQlDIGwuaGlnaAorCisJbW92ZAklbW0wLCAlZWR4CQlDIGguaGlnaAorCW1vdnEJJW1tMCwgJW1tNgkJQyBuZXcgYworCisJYWRjbAklZWF4LCAlZWJ4CisJaW5jbAklZWN4CisKKwltb3ZkCSVtbTEsICVlYXgJCUMgbC5oaWdoCisJbW92cQklbW03LCAlbW0wCisKKwlhZGNsCSVlYXgsICVlZHgKKwltb3ZsCSVlYngsIC0xNiglZWRpLCVlY3gsNCkKKworCW1vdmwJJWVkeCwgLTEyKCVlZGksJWVjeCw0KQorCXBzcmxxCSQzMiwgJW1tNgkJQyBjCisKK0woc21hbGxfZW50cnkpOgorCXBtdWxodwktOCglZXNpLCVlY3gsNCksICVtbTAJQyBoID0gKHgqbSkuaGlnaAorCW1vdnEJJW1tNywgJW1tMQorCisJcG11bGx3CS04KCVlc2ksJWVjeCw0KSwgJW1tMQlDIGwgPSAoeCptKS5sb3cKKwltb3ZxCSVtbTcsICVtbTMKKworCW1vdnEJLTgoJWVzaSwlZWN4LDQpLCAlbW0yCUMgeAorCXBzcmF3CSQxNSwgJW1tMwkJQyBtIHNpZ25zCisKKwlwYW5kCS04KCVlc2ksJWVjeCw0KSwgJW1tMwlDIHggc2VsZWN0ZWQgYnkgbSBzaWducworCXBzcmF3CSQxNSwgJW1tMgkJQyB4IHNpZ25zCisKKwlwYWRkdwklbW0zLCAlbW0wCQlDIGFkZCB4IHRvIGggaWYgbSBuZWcKKwlwYW5kCSVtbTcsICVtbTIJCUMgbSBzZWxlY3RlZCBieSB4IHNpZ25zCisKKwlwYWRkdwklbW0yLCAlbW0wCQlDIGFkZCBtIHRvIGggaWYgeCBuZWcKKwlpbmNsCSVlY3gKKworCW1vdmQJJW1tMSwgJWVheAkJQyBsLmxvdworCXB1bnBja2x3ZCAlbW0wLCAlbW02CQlDIGMgKyBoLmxvdyA8PCAxNgorCisJcHNybHEJJDE2LCAlbW0wCQlDIGguaGlnaAorCWpzCUwoc21hbGxfdG9wKQorCisKKworCisJbW92ZAklbW02LCAlZWJ4CQlDIGgubG93CisJcHNybHEJJDMyLCAlbW0xCQlDIGwuaGlnaAorCisJYWRjbAklZWF4LCAlZWJ4CisJcG9wbAklZWJwCQlGUkFNRV9wb3BsKCkKKworCW1vdmQJJW1tMCwgJWVkeAkJQyBoLmhpZ2gKKwlwc3JscQkkMzIsICVtbTAJCUMgbC5oaWdoCisKKwltb3ZkCSVtbTEsICVlYXgJCUMgbC5oaWdoCisKKwlhZGNsCSVlYXgsICVlZHgKKwltb3ZsCSVlYngsIC0xMiglZWRpLCVlY3gsNCkKKworCW1vdmQJJW1tMCwgJWVheAkJQyBjCisKKwlhZGNsCSQwLCAlZWF4CisJbW92bAklZWR4LCAtOCglZWRpLCVlY3gsNCkKKworCW9ybAklZWN4LCAlZWN4CisJam56CUwoc21hbGxfZG9uZSkJCUMgZmluYWwgJWVjeD09MSBtZWFucyBldmVuLCA9PTAgb2RkCisKKworCUMgU2l6ZSBvZGQsIG9uZSBleHRyYSBsaW1iIHRvIHByb2Nlc3MuCisJQyBQbGFpbiBpbnRlZ2VyIGNvZGUgaXMgdXNlZCBoZXJlLCBzaW5jZSBpdCdzIHNtYWxsZXIgYW5kIGlzIGFib3V0CisJQyB0aGUgc2FtZSBzcGVlZCBhcyBhbm90aGVyIG1teCBibG9jayB3b3VsZCBiZS4KKworCW1vdmwJJWVheCwgJWVjeAorCW1vdmwJUEFSQU1fTVVMVElQTElFUiwgJWVheAorCisJbXVsbAktNCglZXNpKQorCisJYWRkbAklZWN4LCAlZWF4CisKKwlhZGNsCSQwLCAlZWR4CisJbW92bAklZWF4LCAtNCglZWRpKQorCisJbW92bAklZWR4LCAlZWF4CitMKHNtYWxsX2RvbmUpOgorCXBvcGwJJWVieAorCisJcG9wbAklZWRpCisJcG9wbAklZXNpCisKKwllbW1zCisKKwlyZXQKKworRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bS9tbXgvcnNoaWZ0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW0vbW14L3JzaGlmdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNiMjc0YgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW0vbW14L3JzaGlmdC5hc20KQEAgLTAsMCArMSw0NjggQEAKK2RubCAgSW50ZWwgUDUgbXBuX3JzaGlmdCAtLSBtcG4gcmlnaHQgc2hpZnQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDAsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDIFA1OiAxLjc1IGN5Y2xlcy9saW1iLgorCisKK0MgbXBfbGltYl90IG1wbl9yc2hpZnQgKG1wX3B0ciBkc3QsIG1wX3NyY3B0ciBzcmMsIG1wX3NpemVfdCBzaXplLAorQyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hpZnQpOworQworQyBTaGlmdCBzcmMsc2l6ZSByaWdodCBieSBzaGlmdCBtYW55IGJpdHMgYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gZHN0LHNpemUuCitDIFplcm9zIGFyZSBzaGlmdGVkIGluIGF0IHRoZSBsZWZ0LiAgUmV0dXJuIHRoZSBiaXRzIHNoaWZ0ZWQgb3V0IGF0IHRoZQorQyByaWdodC4KK0MKK0MgSXQgdGFrZXMgNiBtbXggaW5zdHJ1Y3Rpb25zIHRvIHByb2Nlc3MgMiBsaW1icywgbWFraW5nIDEuNSBjeWNsZXMvbGltYiwKK0MgYW5kIHdpdGggYSA0IGxpbWIgbG9vcCBhbmQgMSBjeWNsZSBvZiBsb29wIG92ZXJoZWFkIHRoZSB0b3RhbCBpcyAxLjc1IGMvbC4KK0MKK0MgRnVsbCBzcGVlZCBkZXBlbmRzIG9uIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYmVpbmcgYWxpZ25lZC4gIFVuYWxpZ25lZCBtbXgKK0MgbG9hZHMgYW5kIHN0b3JlcyBvbiBQNSBkb24ndCBwYWlyIGFuZCBoYXZlIGEgMiBjeWNsZSBwZW5hbHR5LiAgU29tZSBoYWlyeQorQyBzZXR1cHMgYW5kIGZpbmlzaC11cHMgYXJlIGRvbmUgdG8gZW5zdXJlIGFsaWdubWVudCBmb3IgdGhlIGxvb3AuCitDCitDIE1NWCBzaGlmdHMgd29yayBvdXQgYSBiaXQgZmFzdGVyIGV2ZW4gZm9yIHRoZSBzaW1wbGUgbG9vcC4KKworZGVmZnJhbWUoUEFSQU1fU0hJRlQsMTYpCitkZWZmcmFtZShQQVJBTV9TSVpFLCAxMikKK2RlZmZyYW1lKFBBUkFNX1NSQywgIDgpCitkZWZmcmFtZShQQVJBTV9EU1QsICA0KQorZGVmbGl0KGBGUkFNRScsMCkKKworZG5sICBNaW5pbXVtIDUsIGJlY2F1c2UgdGhlIHVucm9sbGVkIGxvb3AgY2FuJ3QgaGFuZGxlIGxlc3MuCitkZWZsaXQoVU5ST0xMX1RIUkVTSE9MRCwgNSkKKworCVRFWFQKKwlBTElHTig4KQorCitQUk9MT0dVRShtcG5fcnNoaWZ0KQorCisJcHVzaGwJJWVieAorCXB1c2hsCSVlZGkKK2RlZmxpdChgRlJBTUUnLDgpCisKKwltb3ZsCVBBUkFNX1NJWkUsICVlYXgKKwltb3ZsCVBBUkFNX0RTVCwgJWVkeAorCisJbW92bAlQQVJBTV9TUkMsICVlYngKKwltb3ZsCVBBUkFNX1NISUZULCAlZWN4CisKKwljbXAJJFVOUk9MTF9USFJFU0hPTEQsICVlYXgKKwlqYWUJTCh1bnJvbGwpCisKKwlkZWNsCSVlYXgKKwltb3ZsCSglZWJ4KSwgJWVkaQkJQyBzcmMgbG93IGxpbWIKKworCWpueglMKHNpbXBsZSkKKworCXNocmRsKAklY2wsICVlZGksICVlYXgpCUMgZWF4IHdhcyBkZWNyZW1lbnRlZCB0byB6ZXJvCisKKwlzaHJsCSVjbCwgJWVkaQorCisJbW92bAklZWRpLCAoJWVkeCkJCUMgZHN0IGxvdyBsaW1iCisJcG9wbAklZWRpCQkJQyByaXNrIG9mIGRhdGEgY2FjaGUgYmFuayBjbGFzaAorCisJcG9wbAklZWJ4CisKKwlyZXQKKworCitDIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJQUxJR04oOCkKK0woc2ltcGxlKToKKwlDIGVheAlzaXplLTEKKwlDIGVieAlzcmMKKwlDIGVjeAlzaGlmdAorCUMgZWR4CWRzdAorCUMgZXNpCisJQyBlZGkKKwlDIGVicAorZGVmbGl0KGBGUkFNRScsOCkKKworCW1vdmQJKCVlYngpLCAlbW01CQlDIHNyY1swXQorCWxlYWwJKCVlYngsJWVheCw0KSwgJWVieAlDICZzcmNbc2l6ZS0xXQorCisJbW92ZAklZWN4LCAlbW02CQlDIHJzaGlmdAorCWxlYWwJLTQoJWVkeCwlZWF4LDQpLCAlZWR4CUMgJmRzdFtzaXplLTJdCisKKwlwc2xscQkkMzIsICVtbTUKKwluZWdsCSVlYXgKKworCitDIFRoaXMgbG9vcCBpcyA1IG9yIDggY3ljbGVzLCB3aXRoIGV2ZXJ5IHNlY29uZCBsb2FkIHVuYWxpZ25lZCBhbmQgYSB3YXN0ZWQKK0MgY3ljbGUgd2FpdGluZyBmb3IgdGhlIG1tMCByZXN1bHQgdG8gYmUgcmVhZHkuICBGb3IgY29tcGFyaXNvbiBhIHNocmRsIGlzIDQKK0MgY3ljbGVzIGFuZCB3b3VsZCBiZSA4IGluIGEgc2ltcGxlIGxvb3AuICBVc2luZyBtbXggaGVscHMgdGhlIHJldHVybiB2YWx1ZQorQyBhbmQgbGFzdCBsaW1iIGNhbGN1bGF0aW9ucyB0b28uCisKK0woc2ltcGxlX3RvcCk6CisJQyBlYXgJY291bnRlciwgbGltYnMsIG5lZ2F0aXZlCisJQyBlYngJJnNyY1tzaXplLTFdCisJQyBlY3gJcmV0dXJuIHZhbHVlCisJQyBlZHgJJmRzdFtzaXplLTJdCisJQworCUMgbW0wCXNjcmF0Y2gKKwlDIG1tNQlyZXR1cm4gdmFsdWUKKwlDIG1tNglzaGlmdAorCisJbW92cQkoJWVieCwlZWF4LDQpLCAlbW0wCisJaW5jbAklZWF4CisKKwlwc3JscQklbW02LCAlbW0wCisKKwltb3ZkCSVtbTAsICglZWR4LCVlYXgsNCkKKwlqbnoJTChzaW1wbGVfdG9wKQorCisKKwltb3ZkCSglZWJ4KSwgJW1tMAorCXBzcmxxCSVtbTYsICVtbTUJCUMgcmV0dXJuIHZhbHVlCisKKwlwc3JscQklbW02LCAlbW0wCisJcG9wbAklZWRpCisKKwltb3ZkCSVtbTUsICVlYXgKKwlwb3BsCSVlYngKKworCW1vdmQJJW1tMCwgNCglZWR4KQorCisJZW1tcworCisJcmV0CisKKworQyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUFMSUdOKDgpCitMKHVucm9sbCk6CisJQyBlYXgJc2l6ZQorCUMgZWJ4CXNyYworCUMgZWN4CXNoaWZ0CisJQyBlZHgJZHN0CisJQyBlc2kKKwlDIGVkaQorCUMgZWJwCitkZWZsaXQoYEZSQU1FJyw4KQorCisJbW92ZAkoJWVieCksICVtbTUJCUMgc3JjWzBdCisJbW92bAkkNCwgJWVkaQorCisJbW92ZAklZWN4LCAlbW02CQlDIHJzaGlmdAorCXRlc3RsCSVlZGksICVlYngKKworCXBzbGxxCSQzMiwgJW1tNQorCWp6CUwoc3RhcnRfc3JjX2FsaWduZWQpCisKKworCUMgc3JjIGlzbid0IGFsaWduZWQsIHByb2Nlc3MgbG93IGxpbWIgc2VwYXJhdGVseSAobWFya2VkIHh4eCkgYW5kCisJQyBzdGVwIHNyYyBhbmQgZHN0IGJ5IG9uZSBsaW1iLCBtYWtpbmcgc3JjIGFsaWduZWQuCisJQworCUMgc291cmNlICAgICAgICAgICAgICAgICAgZWJ4CisJQyAtLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSsKKwlDICAgICAgICAgICB8ICAgICAgICAgIHh4eCAgfAorCUMgLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rCisJQyAgICAgICAgIDRtb2Q4ICAgMG1vZDggICA0bW9kOAorCUMKKwlDICAgICAgICAgZGVzdCAgICAgICAgICAgIGVkeAorCUMgICAgICAgICAtLSstLS0tLS0tKy0tLS0tLS0rCisJQyAgICAgICAgICAgfCAgICAgICB8ICB4eHggIHwKKwlDICAgICAgICAgLS0rLS0tLS0tLSstLS0tLS0tKworCisJbW92cQkoJWVieCksICVtbTAJCUMgdW5hbGlnbmVkIGxvYWQKKworCXBzcmxxCSVtbTYsICVtbTAKKwlhZGRsCSQ0LCAlZWJ4CisKKwlkZWNsCSVlYXgKKworCW1vdmQJJW1tMCwgKCVlZHgpCisJYWRkbAkkNCwgJWVkeAorTChzdGFydF9zcmNfYWxpZ25lZCk6CisKKworCW1vdnEJKCVlYngpLCAlbW0xCisJdGVzdGwJJWVkaSwgJWVkeAorCisJcHNybHEJJW1tNiwgJW1tNQkJQyByZXR2YWwKKwlqeglMKHN0YXJ0X2RzdF9hbGlnbmVkKQorCisJQyBkc3QgaXNuJ3QgYWxpZ25lZCwgYWRkIDQgdG8gbWFrZSBpdCBzbywgYW5kIHByZXRlbmQgdGhlIHNoaWZ0IGlzCisJQyAzMiBiaXRzIGV4dHJhLiAgTG93IGxpbWIgb2YgZHN0IChtYXJrZWQgeHh4KSBoYW5kbGVkIGhlcmUKKwlDIHNlcGFyYXRlbHkuCisJQworCUMgICAgICAgICAgc291cmNlICAgICAgICAgIGVieAorCUMgICAgICAgICAgLS0rLS0tLS0tLSstLS0tLS0tKworCUMgICAgICAgICAgICB8ICAgICAgbW0xICAgICAgfAorCUMgICAgICAgICAgLS0rLS0tLS0tLSstLS0tLS0tKworCUMgICAgICAgICAgICAgICAgICA0bW9kOCAgIDBtb2Q4CisJQworCUMgIGRlc3QgICAgICAgICAgICAgICAgICAgIGVkeAorCUMgIC0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKworCUMgICAgICAgICAgICAgICAgICAgIHwgIHh4eCAgfAorCUMgIC0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKworCUMgICAgICAgICAgNG1vZDggICAwbW9kOCAgIDRtb2Q4CisKKwltb3ZxCSVtbTEsICVtbTAKKwlhZGRsCSQzMiwgJWVjeAkJQyBuZXcgc2hpZnQKKworCXBzcmxxCSVtbTYsICVtbTAKKworCW1vdmQJJWVjeCwgJW1tNgorCisJbW92ZAklbW0wLCAoJWVkeCkKKwlhZGRsCSQ0LCAlZWR4CitMKHN0YXJ0X2RzdF9hbGlnbmVkKToKKworCisJbW92cQk4KCVlYngpLCAlbW0zCisJbmVnbAklZWN4CisKKwltb3ZxCSVtbTMsICVtbTIJCUMgbW0yIHNyYyBxd29yZAorCWFkZGwJJDY0LCAlZWN4CisKKwltb3ZkCSVlY3gsICVtbTcKKwlwc3JscQklbW02LCAlbW0xCisKKwlsZWFsCS0xMiglZWJ4LCVlYXgsNCksICVlYngKKwlsZWFsCS0yMCglZWR4LCVlYXgsNCksICVlZHgKKworCXBzbGxxCSVtbTcsICVtbTMKKwlzdWJsCSQ3LCAlZWF4CQlDIHNpemUtNworCisJcG9yCSVtbTEsICVtbTMJCUMgbW0zIHJlYWR5IHRvIHN0b3JlCisJbmVnbAklZWF4CQkJQyAtKHNpemUtNykKKworCWpucwlMKGZpbmlzaCkKKworCisJQyBUaGlzIGxvb3AgaXMgdGhlIGltcG9ydGFudCBiaXQsIHRoZSByZXN0IGlzIGp1c3Qgc3VwcG9ydC4gIENhcmVmdWwKKwlDIGluc3RydWN0aW9uIHNjaGVkdWxpbmcgYWNoaWV2ZXMgdGhlIGNsYWltZWQgMS43NSBjL2wuICBUaGUKKwlDIHJlbGV2YW50IHBhcnRzIG9mIHRoZSBwYWlyaW5nIHJ1bGVzIGFyZToKKwlDCisJQyAtIG1teCBsb2FkcyBhbmQgc3RvcmVzIGV4ZWN1dGUgb25seSBpbiB0aGUgVSBwaXBlCisJQyAtIG9ubHkgb25lIG1teCBzaGlmdCBpbiBhIHBhaXIKKwlDIC0gd2FpdCBvbmUgY3ljbGUgYmVmb3JlIHN0b3JpbmcgYW4gbW14IHJlZ2lzdGVyIHJlc3VsdAorCUMgLSB0aGUgdXN1YWwgYWRkcmVzcyBnZW5lcmF0aW9uIGludGVybG9jaworCUMKKwlDIFR3byBxd29yZCBjYWxjdWxhdGlvbnMgYXJlIHNsaWdodGx5IGludGVybGVhdmVkLiAgVGhlIGluc3RydWN0aW9ucworCUMgbWFya2VkICJDIiBiZWxvbmcgdG8gdGhlIHNlY29uZCBxd29yZCwgYW5kIHRoZSAiQyBwcmV2IiBvbmUgaXMgZm9yCisJQyB0aGUgc2Vjb25kIHF3b3JkIGZyb20gdGhlIHByZXZpb3VzIGl0ZXJhdGlvbi4KKworCUFMSUdOKDgpCitMKHVucm9sbF9sb29wKToKKwlDIGVheAljb3VudGVyLCBsaW1icywgbmVnYXRpdmUKKwlDIGVieAkmc3JjW3NpemUtMTJdCisJQyBlY3gKKwlDIGVkeAkmZHN0W3NpemUtMTJdCisJQyBlc2kKKwlDIGVkaQorCUMKKwlDIG1tMAorCUMgbW0xCisJQyBtbTIJc3JjIHF3b3JkIGZyb20gLTgoJWVieCwlZWF4LDQpCisJQyBtbTMJZHN0IHF3b3JkIHJlYWR5IHRvIHN0b3JlIHRvIC04KCVlZHgsJWVheCw0KQorCUMKKwlDIG1tNQlyZXR1cm4gdmFsdWUKKwlDIG1tNglyc2hpZnQKKwlDIG1tNwlsc2hpZnQKKworCW1vdnEJKCVlYngsJWVheCw0KSwgJW1tMAorCXBzcmxxCSVtbTYsICVtbTIKKworCW1vdnEJJW1tMCwgJW1tMQorCXBzbGxxCSVtbTcsICVtbTAKKworCW1vdnEJJW1tMywgLTgoJWVkeCwlZWF4LDQpCUMgcHJldgorCXBvcgklbW0yLCAlbW0wCisKKwltb3ZxCTgoJWVieCwlZWF4LDQpLCAlbW0zCUMKKwlwc3JscQklbW02LCAlbW0xCQlDCisKKwltb3ZxCSVtbTAsICglZWR4LCVlYXgsNCkKKwltb3ZxCSVtbTMsICVtbTIJCUMKKworCXBzbGxxCSVtbTcsICVtbTMJCUMKKwlhZGRsCSQ0LCAlZWF4CisKKwlwb3IJJW1tMSwgJW1tMwkJQworCWpzCUwodW5yb2xsX2xvb3ApCisKKworTChmaW5pc2gpOgorCUMgZWF4CTAgdG8gMyByZXByZXNlbnRpbmcgcmVzcGVjdGl2ZWx5IDMgdG8gMCBsaW1icyByZW1haW5pbmcKKworCXRlc3RiCSQyLCAlYWwKKworCWpueglMKGZpbmlzaF9ub190d28pCisKKwltb3ZxCSglZWJ4LCVlYXgsNCksICVtbTAKKwlwc3JscQklbW02LCAlbW0yCisKKwltb3ZxCSVtbTAsICVtbTEKKwlwc2xscQklbW03LCAlbW0wCisKKwltb3ZxCSVtbTMsIC04KCVlZHgsJWVheCw0KQlDIHByZXYKKwlwb3IJJW1tMiwgJW1tMAorCisJbW92cQklbW0xLCAlbW0yCisJbW92cQklbW0wLCAlbW0zCisKKwlhZGRsCSQyLCAlZWF4CitMKGZpbmlzaF9ub190d28pOgorCisKKwlDIGVheAkyIG9yIDMgcmVwcmVzZW50aW5nIHJlc3BlY3RpdmVseSAxIG9yIDAgbGltYnMgcmVtYWluaW5nCisJQworCUMgbW0yCXNyYyBwcmV2IHF3b3JkLCBmcm9tIC04KCVlYngsJWVheCw0KQorCUMgbW0zCWRzdCBxd29yZCwgZm9yIC04KCVlZHgsJWVheCw0KQorCisJdGVzdGIJJDEsICVhbAorCXBvcGwJJWVkaQorCisJbW92ZAklbW01LCAlZWF4CUMgcmV0dmFsCisJam56CUwoZmluaXNoX3plcm8pCisKKworCUMgT25lIGV4dHJhIGxpbWIsIGRlc3RpbmF0aW9uIHdhcyBhbGlnbmVkLgorCUMKKwlDIHNvdXJjZSAgICAgICAgICAgICAgICBlYngKKwlDICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLQorCUMgfCAgICAgICB8ICAgICAgbW0yICAgICAgfAorCUMgKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tCisJQworCUMgZGVzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZHgKKwlDICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0KKwlDIHwgICAgICAgfCAgICAgICAgICAgICAgIHwgICAgICBtbTMgICAgICB8CisJQyArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tCisJQworCUMgbW02ID0gc2hpZnQKKwlDIG1tNyA9IGVjeCA9IDY0LXNoaWZ0CisKKworCUMgT25lIGV4dHJhIGxpbWIsIGRlc3RpbmF0aW9uIHdhcyB1bmFsaWduZWQuCisJQworCUMgc291cmNlICAgICAgICAgICAgICAgIGVieAorCUMgKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tCisJQyB8ICAgICAgIHwgICAgICBtbTIgICAgICB8CisJQyArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0KKwlDCisJQyBkZXN0ICAgICAgICAgICAgICAgICAgICAgICAgICBlZHgKKwlDICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tCisJQyB8ICAgICAgICAgICAgICAgfCAgICAgIG1tMyAgICAgIHwKKwlDICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tCisJQworCUMgbW02ID0gc2hpZnQrMzIKKwlDIG1tNyA9IGVjeCA9IDY0LShzaGlmdCszMikKKworCisJQyBJbiBib3RoIGNhc2VzIHRoZXJlJ3Mgb25lIGV4dHJhIGxpbWIgb2Ygc3JjIHRvIGZldGNoIGFuZCBjb21iaW5lCisJQyB3aXRoIG1tMiB0byBtYWtlIGEgcXdvcmQgYXQgOCglZWR4KSwgYW5kIGluIHRoZSBhbGlnbmVkIGNhc2UKKwlDIHRoZXJlJ3MgYSBmdXJ0aGVyIGV4dHJhIGxpbWIgb2YgZHN0IHRvIGJlIGZvcm1lZC4KKworCisJbW92ZAk4KCVlYngpLCAlbW0wCisJcHNybHEJJW1tNiwgJW1tMgorCisJbW92cQklbW0wLCAlbW0xCisJcHNsbHEJJW1tNywgJW1tMAorCisJbW92cQklbW0zLCAoJWVkeCkKKwlwb3IJJW1tMiwgJW1tMAorCisJcHNybHEJJW1tNiwgJW1tMQorCWFuZGwJJDMyLCAlZWN4CisKKwlwb3BsCSVlYngKKwlqeglMKGZpbmlzaF9vbmVfdW5hbGlnbmVkKQorCisJQyBkc3Qgd2FzIGFsaWduZWQsIG11c3Qgc3RvcmUgb25lIGV4dHJhIGxpbWIKKwltb3ZkCSVtbTEsIDE2KCVlZHgpCitMKGZpbmlzaF9vbmVfdW5hbGlnbmVkKToKKworCW1vdnEJJW1tMCwgOCglZWR4KQorCisJZW1tcworCisJcmV0CisKKworTChmaW5pc2hfemVybyk6CisKKwlDIE5vIGV4dHJhIGxpbWJzLCBkZXN0aW5hdGlvbiB3YXMgYWxpZ25lZC4KKwlDCisJQyBzb3VyY2UgICAgICAgIGVieAorCUMgKy0tLS0tLS0tLS0tLS0tLSstLQorCUMgfCAgICAgIG1tMiAgICAgIHwKKwlDICstLS0tLS0tLS0tLS0tLS0rLS0KKwlDCisJQyBkZXN0ICAgICAgICAgICAgICAgICAgICAgICAgZWR4KzQKKwlDICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tCisJQyB8ICAgICAgICAgICAgICAgfCAgICAgIG1tMyAgICAgIHwKKwlDICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tCisJQworCUMgbW02ID0gc2hpZnQKKwlDIG1tNyA9IGVjeCA9IDY0LXNoaWZ0CisKKworCUMgTm8gZXh0cmEgbGltYnMsIGRlc3RpbmF0aW9uIHdhcyB1bmFsaWduZWQuCisJQworCUMgc291cmNlICAgICAgICBlYngKKwlDICstLS0tLS0tLS0tLS0tLS0rLS0KKwlDIHwgICAgICBtbTIgICAgICB8CisJQyArLS0tLS0tLS0tLS0tLS0tKy0tCisJQworCUMgZGVzdCAgICAgICAgICAgICAgICBlZHgrNAorCUMgKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tCisJQyB8ICAgICAgIHwgICAgICBtbTMgICAgICB8CisJQyArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0KKwlDCisJQyBtbTYgPSBzaGlmdCszMgorCUMgbW03ID0gNjQtKHNoaWZ0KzMyKQorCisKKwlDIFRoZSBtb3ZkIGZvciB0aGUgdW5hbGlnbmVkIGNhc2UgaXMgY2xlYXJseSB0aGUgc2FtZSBkYXRhIGFzIHRoZQorCUMgbW92cSBmb3IgdGhlIGFsaWduZWQgY2FzZSwgaXQncyBqdXN0IGEgY2hvaWNlIGJldHdlZW4gd2hldGhlciBvbmUKKwlDIG9yIHR3byBsaW1icyBzaG91bGQgYmUgd3JpdHRlbi4KKworCisJbW92cQklbW0zLCA0KCVlZHgpCisJcHNybHEJJW1tNiwgJW1tMgorCisJbW92ZAklbW0yLCAxMiglZWR4KQorCWFuZGwJJDMyLCAlZWN4CisKKwlwb3BsCSVlYngKKwlqeglMKGZpbmlzaF96ZXJvX3VuYWxpZ25lZCkKKworCW1vdnEJJW1tMiwgMTIoJWVkeCkKK0woZmluaXNoX3plcm9fdW5hbGlnbmVkKToKKworCWVtbXMKKworCXJldAorCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtL21vZF8zNGxzdWIxLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW0vbW9kXzM0bHN1YjEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkODgyMjMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtL21vZF8zNGxzdWIxLmFzbQpAQCAtMCwwICsxLDE5MiBAQAorZG5sICBJbnRlbCBQNSBtcG5fbW9kXzM0bHN1YjEgLS0gbXBuIHJlbWFpbmRlciBtb2R1bG8gMioqMjQtMS4KKworZG5sICBDb3B5cmlnaHQgMjAwMC0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQyBQNTogMS42NiBjeWNsZXMvbGltYgorCisKK0MgbXBfbGltYl90IG1wbl9tb2RfMzRsc3ViMSAobXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUpCitDCisKK2RlZmZyYW1lKFBBUkFNX1NJWkUsIDgpCitkZWZmcmFtZShQQVJBTV9TUkMsICA0KQorCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX21vZF8zNGxzdWIxKQorZGVmbGl0KGBGUkFNRScsMCkKKworCW1vdmwJUEFSQU1fU0laRSwgJWVjeAorCW1vdmwJUEFSQU1fU1JDLCAlZWR4CisKKwlzdWJsCSQyLCAlZWN4CisJamEJTCh0aHJlZV9vcl9tb3JlKQorCisJbW92bAkoJWVkeCksICVlYXgKKwlqbmUJTChvbmUpCisKKworCW1vdmwJNCglZWR4KSwgJWVjeAorCW1vdmwJJWVheCwgJWVkeAorCisJc2hybAkkMjQsICVlZHgKKwlhbmRsCSQweEZGRkZGRiwgJWVheAorCisJYWRkbAklZWR4LCAlZWF4CisJbW92bAklZWN4LCAlZWR4CisKKwlzaHJsCSQxNiwgJWVjeAorCWFuZGwJJDB4RkZGRiwgJWVkeAorCisJc2hsbAkkOCwgJWVkeAorCWFkZGwJJWVjeCwgJWVheAorCisJYWRkbAklZWR4LCAlZWF4CisKK0wob25lKToKKwlyZXQKKworCitMKHRocmVlX29yX21vcmUpOgorCUMgZWF4CisJQyBlYngKKwlDIGVjeAlzaXplLTIKKwlDIGVkeAlzcmMKKwlDIGVzaQorCUMgZWRpCisJQyBlYnAKKworCXB1c2hsCSVlYngJRlJBTUVfcHVzaGwoKQorCXB1c2hsCSVlc2kJRlJBTUVfcHVzaGwoKQorCisJcHVzaGwJJWVkaQlGUkFNRV9wdXNobCgpCisJcHVzaGwJJWVicAlGUkFNRV9wdXNobCgpCisKKwl4b3JsCSVlc2ksICVlc2kJCUMgMG1vZDMKKwl4b3JsCSVlZGksICVlZGkJCUMgMW1vZDMKKworCXhvcmwJJWVicCwgJWVicAkJQyAybW9kMywgYW5kIGNsZWFyIGNhcnJ5CisKK0wodG9wKToKKwlDIGVheAlzY3JhdGNoCisJQyBlYngJc2NyYXRjaAorCUMgZWN4CWNvdW50ZXIsIGxpbWJzCisJQyBlZHgJc3JjCisJQyBlc2kJMG1vZDMKKwlDIGVkaQkxbW9kMworCUMgZWJwCTJtb2QzCisKKwltb3ZsCSglZWR4KSwgJWVheAorCW1vdmwJNCglZWR4KSwgJWVieAorCisJYWRjbAklZWF4LCAlZXNpCisJbW92bAk4KCVlZHgpLCAlZWF4CisKKwlhZGNsCSVlYngsICVlZGkKKwlsZWFsCTEyKCVlZHgpLCAlZWR4CisKKwlhZGNsCSVlYXgsICVlYnAKKwlsZWFsCS0yKCVlY3gpLCAlZWN4CisKKwlkZWNsCSVlY3gKKwlqZwlMKHRvcCkKKworCisJQyBlY3ggaXMgLTIsIC0xIG9yIDAsIHJlcHJlc2VudGluZyAwLCAxIG9yIDIgbW9yZSBsaW1icywgcmVzcGVjdGl2ZWx5CisKKwltb3ZsCSQweEZGRkZGRkZGLCAlZWJ4CUMgbWFzaworCWluY2wJJWVjeAorCisJanMJTChjb21iaW5lKQkJQyAwIG1vcmUKKworCW1vdmwJKCVlZHgpLCAlZWF4CisJbW92bAkkMHhGRkZGRkYwMCwgJWVieAorCisJYWRjbAklZWF4LCAlZXNpCisJZGVjbAklZWN4CisKKwlqcwlMKGNvbWJpbmUpCQlDIDEgbW9yZQorCisJbW92bAk0KCVlZHgpLCAlZWF4CisJbW92bAkkMHhGRkZGMDAwMCwgJWVieAorCisJYWRjbAklZWF4LCAlZWRpCisKKworCitMKGNvbWJpbmUpOgorCUMgZWF4CisJQyBlYngJbWFzaworCUMgZWN4CisJQyBlZHgKKwlDIGVzaQkwbW9kMworCUMgZWRpCTFtb2QzCisJQyBlYnAJMm1vZDMKKworCXNiYmwJJWVjeCwgJWVjeAkJQyBjYXJyeQorCW1vdmwJJWVzaSwgJWVheAkJQyAwbW9kMworCisJYW5kbAklZWJ4LCAlZWN4CQlDIG1hc2tlZCBmb3IgcG9zaXRpb24KKwlhbmRsCSQweEZGRkZGRiwgJWVheAkJQyAwbW9kMyBsb3cKKworCXNocmwJJDI0LCAlZXNpCQlDIDBtb2QzIGhpZ2gKKwlzdWJsCSVlY3gsICVlYXgJCUMgYXBwbHkgY2FycnkKKworCWFkZGwJJWVzaSwgJWVheAkJQyBhcHBseSAwbW9kMworCW1vdmwJJWVkaSwgJWVieAkJQyAxbW9kMworCisJc2hybAkkMTYsICVlZGkJCUMgMW1vZDMgaGlnaAorCWFuZGwJJDB4MDAwMEZGRkYsICVlYngKKworCXNobGwJJDgsICVlYngJCUMgMW1vZDMgbG93CisJYWRkbAklZWRpLCAlZWF4CQlDIGFwcGx5IDFtb2QzIGhpZ2gKKworCWFkZGwJJWVieCwgJWVheAkJQyBhcHBseSAxbW9kMyBsb3cKKwltb3ZsCSVlYnAsICVlYngJCUMgMm1vZDMKKworCXNocmwJJDgsICVlYnAJCUMgMm1vZDMgaGlnaAorCWFuZGwJJDB4RkYsICVlYngKKworCXNobGwJJDE2LCAlZWJ4CQlDIDJtb2QzIGxvdworCWFkZGwJJWVicCwgJWVheAkJQyBhcHBseSAybW9kMyBoaWdoCisKKwlhZGRsCSVlYngsICVlYXgJCUMgYXBwbHkgMm1vZDMgbG93CisKKwlwb3BsCSVlYnAKKwlwb3BsCSVlZGkKKworCXBvcGwJJWVzaQorCXBvcGwJJWVieAorCisJcmV0CisKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW0vbW9kZTFvLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW0vbW9kZTFvLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTBhYmNhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bS9tb2RlMW8uYXNtCkBAIC0wLDAgKzEsMjc5IEBACitkbmwgIEludGVsIFBlbnRpdW0gbXBuX21vZGV4YWN0XzFfb2RkIC0tIGV4YWN0IGRpdmlzaW9uIHN0eWxlIHJlbWFpbmRlci4KKworZG5sICBDb3B5cmlnaHQgMjAwMC0yMDAyLCAyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQyBQNTogMjMuMCBjeWNsZXMvbGltYgorCisKK0MgbXBfbGltYl90IG1wbl9tb2RleGFjdF8xX29kZCAobXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUsCitDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wX2xpbWJfdCBkaXZpc29yKTsKK0MgbXBfbGltYl90IG1wbl9tb2RleGFjdF8xY19vZGQgKG1wX3NyY3B0ciBzcmMsIG1wX3NpemVfdCBzaXplLAorQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBfbGltYl90IGRpdmlzb3IsIG1wX2xpbWJfdCBjYXJyeSk7CitDCitDIFRoZXJlIHNlZW1zIG5vIHdheSB0byBwYWlyIHVwIHRoZSB0d28gbG9uZSBpbnN0cnVjdGlvbnMgaW4gdGhlIG1haW4gbG9vcC4KK0MKK0MgVGhlIHNwZWNpYWwgY2FzZSBmb3Igc2l6ZT09MSBzYXZlcyBhYm91dCAyMCBjeWNsZXMgKG5vbi1QSUMpLCBtYWtpbmcgaXQKK0MgdGhlIHNhbWUgYXMgbXBuX21vZF8xLCBhbmQgaW4gZmFjdCBtYWtpbmcgbW9kZXhhY3QgZmFzdGVyIHRoYW4gbW9kXzEgYXQKK0MgYWxsIHNpemVzLgorQworQyBBbHRlcm5hdGl2ZXM6CitDCitDIFVzaW5nIG1teCBmb3IgdGhlIG11bHRpcGxpZXMgbWlnaHQgYmUgcG9zc2libGUsIHdpdGggcG11bGx3IGFuZCBwbXVsaHcKK0MgaGF2aW5nIGp1c3QgMyBjeWNsZSBsYXRlbmNpZXMsIGJ1dCBjYXJyeSBiaXQgaGFuZGxpbmcgd291bGQgcHJvYmFibHkgYmUKK0MgY29tcGxpY2F0ZWQuCisKK2RlZmZyYW1lKFBBUkFNX0NBUlJZLCAgMTYpCitkZWZmcmFtZShQQVJBTV9ESVZJU09SLDEyKQorZGVmZnJhbWUoUEFSQU1fU0laRSwgICA4KQorZGVmZnJhbWUoUEFSQU1fU1JDLCAgICA0KQorCitkbmwgIHJlLXVzaW5nIHBhcmFtZXRlciBzcGFjZQorZGVmaW5lKFZBUl9JTlZFUlNFLGBQQVJBTV9TSVpFJykKKworCVRFWFQKKworCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX21vZGV4YWN0XzFjX29kZCkKK2RlZmxpdChgRlJBTUUnLDApCisKKwltb3ZsCVBBUkFNX0RJVklTT1IsICVlYXgKKwltb3ZsCVBBUkFNX0NBUlJZLCAlZWR4CisKKwlqbXAJTChzdGFydF8xYykKKworRVBJTE9HVUUoKQorCisJQUxJR04oMTYpCitQUk9MT0dVRShtcG5fbW9kZXhhY3RfMV9vZGQpCitkZWZsaXQoYEZSQU1FJywwKQorCisJbW92bAlQQVJBTV9ESVZJU09SLCAlZWF4CisJeG9ybAklZWR4LCAlZWR4CQlDIGNhcnJ5CisKK0woc3RhcnRfMWMpOgorCitpZmRlZihgUElDJyxgCitpZmRlZihgREFSV0lOJyxgCisJc2hybAklZWF4CQkJQyBkLzIKKwlMRUEoCWJpbnZlcnRfbGltYl90YWJsZSwgJWVjeCkKKwlwdXNobAklZWJ4CQlGUkFNRV9wdXNobCgpCisJbW92bAlQQVJBTV9TSVpFLCAlZWJ4CisKKwlhbmRsCSQxMjcsICVlYXgKKwlzdWJsCSQyLCAlZWJ4CisKKwltb3ZiCSglZWF4LCVlY3gpLCAlY2wKKwlqYwlMKG9uZV9saW1iKQorJyxgCisJY2FsbAlMKGhlcmUpCQlGUkFNRV9wdXNobCgpCitMKGhlcmUpOgorCisJc2hybAklZWF4CQkJQyBkLzIKKwltb3ZsCSglZXNwKSwgJWVjeAkJQyBlaXAKKworCWFkZGwJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXytbLi1MKGhlcmUpXSwgJWVjeAorCW1vdmwJJWVieCwgKCVlc3ApCQlDIHB1c2ggZWJ4CisKKwlhbmRsCSQxMjcsICVlYXgKKwltb3ZsCVBBUkFNX1NJWkUsICVlYngKKworCW1vdmwJYmludmVydF9saW1iX3RhYmxlQEdPVCglZWN4KSwgJWVjeAorCXN1YmwJJDIsICVlYngKKworCW1vdmIJKCVlYXgsJWVjeCksICVjbAkJCUMgaW52IDggYml0cworCWpjCUwob25lX2xpbWIpCisnKQorJyxgCitkbmwgbm9uLVBJQworCXNocmwJJWVheAkJCUMgZC8yCisJcHVzaGwJJWVieAkJRlJBTUVfcHVzaGwoKQorCisJbW92bAlQQVJBTV9TSVpFLCAlZWJ4CisJYW5kbAkkMTI3LCAlZWF4CisKKwlzdWJsCSQyLCAlZWJ4CisJamMJTChvbmVfbGltYikKKworCW1vdmIJYmludmVydF9saW1iX3RhYmxlKCVlYXgpLCAlY2wJCUMgaW52IDggYml0cworJykKKworCW1vdmwJJWVjeCwgJWVheAorCWFkZGwJJWVjeCwgJWVjeAkJQyAyKmludgorCisJaW11bGwJJWVheCwgJWVheAkJQyBpbnYqaW52CisKKwlpbXVsbAlQQVJBTV9ESVZJU09SLCAlZWF4CUMgaW52KmludipkCisKKwlzdWJsCSVlYXgsICVlY3gJCUMgaW52ID0gMippbnYgLSBpbnYqaW52KmQKKworCW1vdmwJJWVjeCwgJWVheAorCWFkZGwJJWVjeCwgJWVjeAkJQyAyKmludgorCisJaW11bGwJJWVheCwgJWVheAkJQyBpbnYqaW52CisKKwlpbXVsbAlQQVJBTV9ESVZJU09SLCAlZWF4CUMgaW52KmludipkCisKKwlzdWJsCSVlYXgsICVlY3gJCUMgaW52ID0gMippbnYgLSBpbnYqaW52KmQKKwlwdXNobAklZXNpCQlGUkFNRV9wdXNobCgpCisKKwlBU1NFUlQoZSxgCUMgZCppbnYgPT0gMSBtb2QgMl5HTVBfTElNQl9CSVRTCisJbW92bAklZWN4LCAlZWF4CisJaW11bGwJUEFSQU1fRElWSVNPUiwgJWVheAorCWNtcGwJJDEsICVlYXgnKQorCisJbW92bAlQQVJBTV9TUkMsICVlc2kKKwltb3ZsCSVlY3gsIFZBUl9JTlZFUlNFCisKKwltb3ZsCSglZXNpKSwgJWVheAkJQyBzcmNbMF0KKwlsZWFsCTQoJWVzaSwlZWJ4LDQpLCAlZXNpCUMgJnNyY1tzaXplLTFdCisKKwl4b3JsCSQtMSwgJWVieAkJQyAtKHNpemUtMSkKKwlBU1NFUlQobnopCisJam1wCUwoZW50cnkpCisKKworQyBUaGUgdXNlIG9mIFZBUl9JTlZFUlNFIG1lYW5zIG9ubHkgYSBzdG9yZSBpcyBuZWVkZWQgZm9yIHRoYXQgdmFsdWUsIHJhdGhlcgorQyB0aGFuIGEgcHVzaCBhbmQgcG9wIG9mIHNheSAlZWRpLgorCisJQUxJR04oMTYpCitMKHRvcCk6CisJQyBlYXgJc2NyYXRjaCwgbG93IHByb2R1Y3QKKwlDIGVieAljb3VudGVyLCBsaW1icywgbmVnYXRpdmUKKwlDIGVjeAljYXJyeSBiaXQKKwlDIGVkeAlzY3JhdGNoLCBoaWdoIHByb2R1Y3QKKwlDIGVzaQkmc3JjW3NpemUtMV0KKwlDIGVkaQorCUMgZWJwCisKKwltdWxsCVBBUkFNX0RJVklTT1IJCUMgaDpkdW1teSA9IHEqZAorCisJbW92bAkoJWVzaSwlZWJ4LDQpLCAlZWF4CUMgc3JjW2ldCisJc3VibAklZWN4LCAlZWR4CQlDIGggLT0gLWMKKworTChlbnRyeSk6CisJc3VibAklZWR4LCAlZWF4CQlDIHMgPSBzcmNbaV0gLSBoCisKKwlzYmJsCSVlY3gsICVlY3gJCUMgbmV3IC1jICgwIG9yIC0xKQorCisJaW11bGwJVkFSX0lOVkVSU0UsICVlYXgJQyBxID0gcyppCisKKwlpbmNsCSVlYngKKwlqbnoJTCh0b3ApCisKKworCW11bGwJUEFSQU1fRElWSVNPUgorCisJbW92bAkoJWVzaSksICVlYXgJCUMgc3JjIGhpZ2gKKwlzdWJsCSVlY3gsICVlZHgJCUMgaCAtPSAtYworCisJY21wbAlQQVJBTV9ESVZJU09SLCAlZWF4CisKKwlqYmUJTChza2lwX2xhc3QpCitkZWZsaXQoRlJBTUVfTEFTVCxGUkFNRSkKKworCisJc3VibAklZWR4LCAlZWF4CQlDIHMgPSBzcmNbaV0gLSBoCisJcG9wbAklZXNpCQlGUkFNRV9wb3BsKCkKKworCXNiYmwJJWVjeCwgJWVjeAkJQyBjICgwIG9yIC0xKQorCXBvcGwJJWVieAkJRlJBTUVfcG9wbCgpCisKKwlpbXVsbAlWQVJfSU5WRVJTRSwgJWVheAlDIHEgPSBzKmkKKworCW11bGwJUEFSQU1fRElWSVNPUgkJQyBoOmR1bW15ID0gcSpkCisKKwltb3ZsCSVlZHgsICVlYXgKKworCXN1YmwJJWVjeCwgJWVheAorCisJcmV0CisKKworQyBXaGVuIGhpZ2g8ZGl2aXNvciBjYW4gc2tpcCBsYXN0IHN0ZXAuCisKK0woc2tpcF9sYXN0KToKK2RlZmxpdChgRlJBTUUnLEZSQU1FX0xBU1QpCisJQyBlYXgJc3JjIGhpZ2gKKwlDIGVieAorCUMgZWN4CisJQyBlZHgJcgorCUMgZXNpCisKKwlzdWJsCSVlYXgsICVlZHgJQyByLXMKKwlwb3BsCSVlc2kJCUZSQU1FX3BvcGwoKQorCisJc2JibAklZWF4LCAlZWF4CUMgLTEgaWYgdW5kZXJmbG93CisJbW92bAlQQVJBTV9ESVZJU09SLCAlZWJ4CisKKwlhbmRsCSVlYngsICVlYXgJQyBkaXZpc29yIGlmIHVuZGVyZmxvdworCXBvcGwJJWVieAkJRlJBTUVfcG9wbCgpCisKKwlhZGRsCSVlZHgsICVlYXgJQyBhZGRiYWNrIGlmIHVuZGVyZmxvdworCisJcmV0CisKKworQyBTcGVjaWFsIGNhc2UgZm9yIHNpemU9PTEgdXNpbmcgYSBkaXZpc2lvbiBmb3IgciA9IGMtYSBtb2QgZC4KK0MgQ291bGQgbG9vayBmb3IgYS1jPGQgYW5kIHNhdmUgYSBkaXZpc2lvbiBzb21ldGltZXMsIGJ1dCB0aGF0IGRvZXNuJ3Qgc2VlbQorQyB3b3J0aCBib3RoZXJpbmcgYWJvdXQuCisKK0wob25lX2xpbWIpOgorZGVmbGl0KGBGUkFNRScsNCkKKwlDIGVheAorCUMgZWJ4CXNpemUtMiAoPT0tMSkKKwlDIGVjeAorCUMgZWR4CWNhcnJ5CisJQyBlc2kJc3JjIGVuZAorCUMgZWRpCisJQyBlYnAKKworCW1vdmwJJWVkeCwgJWVheAorCW1vdmwJUEFSQU1fU1JDLCAlZWR4CisKKwltb3ZsCVBBUkFNX0RJVklTT1IsICVlY3gKKwlwb3BsCSVlYngJCUZSQU1FX3BvcGwoKQorCisJc3VibAkoJWVkeCksICVlYXgJCUMgYy1hCisKKwlzYmJsCSVlZHgsICVlZHgKKwlkZWNsCSVlY3gJCQlDIGQtMQorCisJYW5kbAklZWN4LCAlZWR4CQlDIGIqZCtjLWEgaWYgYzxhLCBvciBjLWEgaWYgYz49YQorCisJZGl2bAlQQVJBTV9ESVZJU09SCisKKwltb3ZsCSVlZHgsICVlYXgKKworCXJldAorCitFUElMT0dVRSgpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW0vbXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bS9tdWxfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA4NThhZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW0vbXVsXzEuYXNtCkBAIC0wLDAgKzEsMTc3IEBACitkbmwgIEludGVsIFBlbnRpdW0gbXBuX211bF8xIC0tIG1wbiBieSBsaW1iIG11bHRpcGxpY2F0aW9uLgorCitkbmwgIENvcHlyaWdodCAxOTkyLCAxOTk0LCAxOTk2LCAxOTk5LCAyMDAwLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK2RubCAgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQyBQNTogMTIuMCBjeWNsZXMvbGltYgorCisKK0MgbXBfbGltYl90IG1wbl9tdWxfMSAobXBfcHRyIGRzdCwgbXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUsCitDICAgICAgICAgICAgICAgICAgICAgIG1wX2xpbWJfdCBtdWx0aXBsaWVyKTsKK0MgbXBfbGltYl90IG1wbl9tdWxfMWMgKG1wX3B0ciBkc3QsIG1wX3NyY3B0ciBzcmMsIG1wX3NpemVfdCBzaXplLAorQyAgICAgICAgICAgICAgICAgICAgICAgbXBfbGltYl90IG11bHRpcGxpZXIsIG1wX2xpbWJfdCBjYXJyeSk7CitDCisKK2RlZmZyYW1lKFBBUkFNX0NBUlJZLCAgICAgMjApCitkZWZmcmFtZShQQVJBTV9NVUxUSVBMSUVSLDE2KQorZGVmZnJhbWUoUEFSQU1fU0laRSwgICAgICAxMikKK2RlZmZyYW1lKFBBUkFNX1NSQywgICAgICAgOCkKK2RlZmZyYW1lKFBBUkFNX0RTVCwgICAgICAgNCkKKworCVRFWFQKKwlBTElHTig4KQorUFJPTE9HVUUobXBuX211bF8xYykKK2RlZmxpdChgRlJBTUUnLDApCisKKwltb3ZsCVBBUkFNX0NBUlJZLCAlZWN4CisJcHVzaGwJJWVzaQkJRlJBTUVfcHVzaGwoKQorCisJam1wCUwoc3RhcnRfMWMpCisKK0VQSUxPR1VFKCkKKworCisJQUxJR04oOCkKK1BST0xPR1VFKG1wbl9tdWxfMSkKK2RlZmxpdChgRlJBTUUnLDApCisKKwl4b3JsCSVlY3gsICVlY3gKKwlwdXNobAklZXNpCQlGUkFNRV9wdXNobCgpCisKK0woc3RhcnRfMWMpOgorCW1vdmwJUEFSQU1fU1JDLCAlZXNpCisJbW92bAlQQVJBTV9TSVpFLCAlZWF4CisKKwlzaHJsCSVlYXgKKwlqbnoJTCh0d29fb3JfbW9yZSkKKworCisJQyBvbmUgbGltYiBvbmx5CisKKwltb3ZsCSglZXNpKSwgJWVheAorCisJbXVsbAlQQVJBTV9NVUxUSVBMSUVSCisKKwlhZGRsCSVlYXgsICVlY3gKKwltb3ZsCVBBUkFNX0RTVCwgJWVheAorCisJYWRjbAkkMCwgJWVkeAorCXBvcGwJJWVzaQorCisJbW92bAklZWN4LCAoJWVheCkKKwltb3ZsCSVlZHgsICVlYXgKKworCXJldAorCisKK0wodHdvX29yX21vcmUpOgorCUMgZWF4CXNpemUvMgorCUMgZWJ4CisJQyBlY3gJY2FycnkKKwlDIGVkeAorCUMgZXNpCXNyYworCUMgZWRpCisJQyBlYnAKKworCXB1c2hsCSVlZGkJCUZSQU1FX3B1c2hsKCkKKwlwdXNobAklZWJ4CQlGUkFNRV9wdXNobCgpCisKKwltb3ZsCVBBUkFNX0RTVCwgJWVkaQorCWxlYWwJLTEoJWVheCksICVlYngJCUMgc2l6ZS8yLTEKKworCW5vdGwJJWVieAkJCUMgLXNpemUsIHByZXNlcnZlIGNhcnJ5CisKKwlsZWFsCSglZXNpLCVlYXgsOCksICVlc2kJQyBzcmMgZW5kCisJbGVhbAkoJWVkaSwlZWF4LDgpLCAlZWRpCUMgZHN0IGVuZAorCisJcHVzaGwJJWVicAkJRlJBTUVfcHVzaGwoKQorCWpuYwlMKHRvcCkKKworCisJQyBzaXplIHdhcyBvZGQsIHByb2Nlc3Mgb25lIGxpbWIgc2VwYXJhdGVseQorCisJbW92bAkoJWVzaSwlZWJ4LDgpLCAlZWF4CisJYWRkbAkkNCwgJWVzaQorCisJbXVsbAlQQVJBTV9NVUxUSVBMSUVSCisKKwlhZGRsCSVlY3gsICVlYXgKKwltb3ZsCSVlZHgsICVlY3gKKworCW1vdmwJJWVheCwgKCVlZGksJWVieCw4KQorCWxlYWwJNCglZWRpKSwgJWVkaQorCisKK0wodG9wKToKKwlDIGVheAorCUMgZWJ4CWNvdW50ZXIsIG5lZ2F0aXZlCisJQyBlY3gJY2FycnkKKwlDIGVkeAorCUMgZXNpCXNyYyBlbmQKKwlDIGVkaQlkc3QgZW5kCisJQyBlYnAKKworCWFkY2wJJDAsICVlY3gKKwltb3ZsCSglZXNpLCVlYngsOCksICVlYXgKKworCW11bGwJUEFSQU1fTVVMVElQTElFUgorCisJbW92bAklZWR4LCAlZWJwCisJYWRkbAklZWF4LCAlZWN4CisKKwlhZGNsCSQwLCAlZWJwCisJbW92bAk0KCVlc2ksJWVieCw4KSwgJWVheAorCisJbXVsbAlQQVJBTV9NVUxUSVBMSUVSCisKKwltb3ZsCSVlY3gsICglZWRpLCVlYngsOCkKKwlhZGRsCSVlYnAsICVlYXgKKworCW1vdmwJJWVheCwgNCglZWRpLCVlYngsOCkKKwlpbmNsCSVlYngKKworCW1vdmwJJWVkeCwgJWVjeAorCWpueglMKHRvcCkKKworCisJYWRjbAkkMCwgJWVjeAorCXBvcGwJJWVicAorCisJbW92bAklZWN4LCAlZWF4CisJcG9wbAklZWJ4CisKKwlwb3BsCSVlZGkKKwlwb3BsCSVlc2kKKworCXJldAorCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtL211bF8yLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW0vbXVsXzIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjN2JlYjUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtL211bF8yLmFzbQpAQCAtMCwwICsxLDE1MCBAQAorZG5sICBJbnRlbCBQZW50aXVtIG1wbl9tdWxfMiAtLSBtcG4gYnkgMi1saW1iIG11bHRpcGxpY2F0aW9uLgorCitkbmwgIENvcHlyaWdodCAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQyBQNTogMjQuMCBjeWNsZXMvbGltYgorCisKK0MgbXBfbGltYl90IG1wbl9tdWxfMiAobXBfcHRyIGRzdCwgbXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUsCitDICAgICAgICAgICAgICAgICAgICAgIG1wX3NyY3B0ciBtdWx0KTsKK0MKK0MgQXQgMjQgYy9sIHRoaXMgaXMgb25seSAyIGN5Y2xlcyBmYXN0ZXIgdGhhbiBhIHNlcGFyYXRlIG11bF8xIGFuZCBhZGRtdWxfMSwKK0MgYnV0IGhhcyB0aGUgYWR2YW50YWdlIG9mIG1ha2luZyBqdXN0IG9uZSBwYXNzIG92ZXIgdGhlIG9wZXJhbmRzLgorQworQyBUaGVyZSdzIG5vdCBlbm91Z2ggcmVnaXN0ZXJzIHRvIHVzZSBQQVJBTV9NVUxUIGRpcmVjdGx5LCBzbyB0aGUgbXVsdGlwbGllcgorQyBsaW1icyBhcmUgdHJhbnNmZXJyZWQgdG8gbG9jYWwgdmFyaWFibGVzIG9uIHRoZSBzdGFjay4KKworZGVmZnJhbWUoUEFSQU1fTVVMVCwgMTYpCitkZWZmcmFtZShQQVJBTV9TSVpFLCAxMikKK2RlZmZyYW1lKFBBUkFNX1NSQywgICA4KQorZGVmZnJhbWUoUEFSQU1fRFNULCAgIDQpCisKK2RubCAgcmUtdXNlIHBhcmFtZXRlciBzcGFjZQorZGVmaW5lKFZBUl9NVUxUX0xPVywgYFBBUkFNX1NSQycpCitkZWZpbmUoVkFSX01VTFRfSElHSCxgUEFSQU1fRFNUJykKKworCVRFWFQKKwlBTElHTig4KQorUFJPTE9HVUUobXBuX211bF8yKQorZGVmbGl0KGBGUkFNRScsMCkKKworCXB1c2hsCSVlc2kJCUZSQU1FX3B1c2hsKCkKKwlwdXNobAklZWRpCQlGUkFNRV9wdXNobCgpCisKKwltb3ZsCVBBUkFNX1NSQywgJWVzaQorCW1vdmwJUEFSQU1fRFNULCAlZWRpCisKKwltb3ZsCVBBUkFNX01VTFQsICVlYXgKKwltb3ZsCVBBUkFNX1NJWkUsICVlY3gKKworCW1vdmwJNCglZWF4KSwgJWVkeAkJQyBtdWx0IGhpZ2gKKwltb3ZsCSglZWF4KSwgJWVheAkJQyBtdWx0IGxvdworCisJbW92bAklZWF4LCBWQVJfTVVMVF9MT1cKKwltb3ZsCSVlZHgsIFZBUl9NVUxUX0hJR0gKKworCXB1c2hsCSVlYngJCUZSQU1FX3B1c2hsKCkKKwlwdXNobAklZWJwCQlGUkFNRV9wdXNobCgpCisKKwltdWxsCSglZXNpKQkJCUMgc3JjWzBdICogbXVsdFswXQorCisJbW92bAklZWF4LCAlZWJwCQlDIGluIGNhc2Ugc3JjPT1kc3QKKwltb3ZsCSglZXNpKSwgJWVheAkJQyBzcmNbMF0KKworCW1vdmwJJWVicCwgKCVlZGkpCQlDIGRzdFswXQorCW1vdmwJJWVkeCwgJWVieAkJQyBpbml0aWFsIGxvdyBjYXJyeQorCisJeG9ybAklZWJwLCAlZWJwCQlDIGluaXRpYWwgaGlnaCBjYXJyeQorCWxlYWwJKCVlZGksJWVjeCw0KSwgJWVkaQlDIGRzdCBlbmQKKworCW11bGwJVkFSX01VTFRfSElHSAkJQyBzcmNbMF0gKiBtdWx0WzFdCisKKwlzdWJsCSQyLCAlZWN4CQlDIHNpemUtMgorCWpzCUwoZG9uZSkKKworCWxlYWwJOCglZXNpLCVlY3gsNCksICVlc2kJQyAmc3JjW3NpemVdCisJeG9ybAkkLTEsICVlY3gJCUMgLShzaXplLTEpCisKKworCitMKHRvcCk6CisJQyBlYXgJbG93IHByb2QKKwlDIGVieAlsb3cgY2FycnkKKwlDIGVjeAljb3VudGVyLCBuZWdhdGl2ZQorCUMgZWR4CWhpZ2ggcHJvZAorCUMgZXNpCXNyYyBlbmQKKwlDIGVkaQlkc3QgZW5kCisJQyBlYnAJaGlnaCBjYXJyeSAoMCBvciAtMSkKKworCWFuZGwJJDEsICVlYnAJCUMgMSBvciAwCisJYWRkbAklZWF4LCAlZWJ4CisKKwlhZGNsCSVlZHgsICVlYnAKKwlBU1NFUlQobmMpCisJbW92bAkoJWVzaSwlZWN4LDQpLCAlZWF4CisKKwltdWxsCVZBUl9NVUxUX0xPVworCisJYWRkbAklZWF4LCAlZWJ4CQlDIGxvdyBjYXJyeQorCW1vdmwJKCVlc2ksJWVjeCw0KSwgJWVheAorCisJYWRjbAklZWJwLCAlZWR4CQlDIGhpZ2ggY2FycnkKKwltb3ZsCSVlYngsICglZWRpLCVlY3gsNCkKKworCXNiYmwJJWVicCwgJWVicAkJQyBuZXcgaGlnaCBjYXJyeSwgLTEgb3IgMAorCW1vdmwJJWVkeCwgJWVieAkJQyBuZXcgbG93IGNhcnJ5CisKKwltdWxsCVZBUl9NVUxUX0hJR0gKKworCWluY2wJJWVjeAorCWpueglMKHRvcCkKKworCitMKGRvbmUpOgorCWFuZGwJJDEsICVlYnAJCUMgMSBvciAwCisJYWRkbAklZWJ4LCAlZWF4CisKKwlhZGNsCSVlYnAsICVlZHgKKwlBU1NFUlQobmMpCisJbW92bAklZWF4LCAoJWVkaSkJCUMgc3RvcmUgY2FycnkgbG93CisKKwltb3ZsCSVlZHgsICVlYXgJCUMgcmV0dXJuIGNhcnJ5IGhpZ2gKKworCXBvcGwJJWVicAorCXBvcGwJJWVieAorCisJcG9wbAklZWRpCisJcG9wbAklZXNpCisKKwlyZXQKKworRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bS9tdWxfYmFzZWNhc2UuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bS9tdWxfYmFzZWNhc2UuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxZDBmMDUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtL211bF9iYXNlY2FzZS5hc20KQEAgLTAsMCArMSwxNDIgQEAKK2RubCAgSW50ZWwgUGVudGl1bSBtcG5fbXVsX2Jhc2VjYXNlIC0tIG1wbiBieSBtcG4gbXVsdGlwbGljYXRpb24uCisKK2RubCAgQ29weXJpZ2h0IDE5OTYsIDE5OTgtMjAwMCwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MgUDU6IDE0LjIgY3ljbGVzL2Nyb3NzcHJvZHVjdCAoYXBwcm94KQorCisKK0Mgdm9pZCBtcG5fbXVsX2Jhc2VjYXNlIChtcF9wdHIgd3AsCitDICAgICAgICAgICAgICAgICAgICAgICAgbXBfc3JjcHRyIHhwLCBtcF9zaXplX3QgeHNpemUsCitDICAgICAgICAgICAgICAgICAgICAgICAgbXBfc3JjcHRyIHlwLCBtcF9zaXplX3QgeXNpemUpOworCitkZWZmcmFtZShQQVJBTV9ZU0laRSwgMjApCitkZWZmcmFtZShQQVJBTV9ZUCwgICAgMTYpCitkZWZmcmFtZShQQVJBTV9YU0laRSwgMTIpCitkZWZmcmFtZShQQVJBTV9YUCwgICAgOCkKK2RlZmZyYW1lKFBBUkFNX1dQLCAgICA0KQorCitkZWZmcmFtZShWQVJfQ09VTlRFUiwgLTQpCisKKwlURVhUCisJQUxJR04oOCkKK1BST0xPR1VFKG1wbl9tdWxfYmFzZWNhc2UpCisKKwlwdXNobAklZWF4CQkJQyBkdW1teSBwdXNoIGZvciBhbGxvY2F0aW5nIHN0YWNrIHNsb3QKKwlwdXNobAklZXNpCisJcHVzaGwJJWVicAorCXB1c2hsCSVlZGkKK2RlZmxpdChgRlJBTUUnLDE2KQorCisJbW92bAlQQVJBTV9YUCwlZXNpCisJbW92bAlQQVJBTV9XUCwlZWRpCisJbW92bAlQQVJBTV9ZUCwlZWJwCisKKwltb3ZsCSglZXNpKSwlZWF4CQlDIGxvYWQgeHBbMF0KKwltdWxsCSglZWJwKQkJCUMgbXVsdGlwbHkgYnkgeXBbMF0KKwltb3ZsCSVlYXgsKCVlZGkpCQlDIHN0b3JlIHRvIHdwWzBdCisJbW92bAlQQVJBTV9YU0laRSwlZWN4CUMgeHNpemUKKwlkZWNsCSVlY3gJCQlDIElmIHhzaXplID0gMSwgeXNpemUgPSAxIHRvbworCWp6CUwoZG9uZSkKKworCW1vdmwJUEFSQU1fWFNJWkUsJWVheAorCXB1c2hsCSVlYngKK0ZSQU1FX3B1c2hsKCkKKwltb3ZsCSVlZHgsJWVieAorCWxlYWwJKCVlc2ksJWVheCw0KSwlZXNpCUMgbWFrZSB4cCBwb2ludCBhdCBlbmQKKwlsZWFsCSglZWRpLCVlYXgsNCksJWVkaQlDIG9mZnNldCB3cCBieSB4c2l6ZQorCW5lZ2wJJWVjeAkJCUMgbmVnYXRlIGogc2l6ZS9pbmRleCBmb3IgaW5uZXIgbG9vcAorCXhvcmwJJWVheCwlZWF4CQlDIGNsZWFyIGNhcnJ5CisKKwlBTElHTig4KQorTChvb3AxKToJYWRjbAkkMCwlZWJ4CisJbW92bAkoJWVzaSwlZWN4LDQpLCVlYXgJQyBsb2FkIG5leHQgbGltYiBhdCB4cFtqXQorCW11bGwJKCVlYnApCisJYWRkbAklZWJ4LCVlYXgKKwltb3ZsCSVlYXgsKCVlZGksJWVjeCw0KQorCWluY2wJJWVjeAorCW1vdmwJJWVkeCwlZWJ4CisJam56CUwob29wMSkKKworCWFkY2wJJDAsJWVieAorCW1vdmwJUEFSQU1fWVNJWkUsJWVheAorCW1vdmwJJWVieCwoJWVkaSkJCUMgbW9zdCBzaWduaWZpY2FudCBsaW1iIG9mIHByb2R1Y3QKKwlhZGRsCSQ0LCVlZGkJCQlDIGluY3JlbWVudCB3cAorCWRlY2wJJWVheAorCWp6CUwoc2tpcCkKKwltb3ZsCSVlYXgsVkFSX0NPVU5URVIJQyBzZXQgaW5kZXggaSB0byB5c2l6ZQorCitMKG91dGVyKToKKwlhZGRsCSQ0LCVlYnAJCQlDIG1ha2UgZWJwIHBvaW50IHRvIG5leHQgeSBsaW1iCisJbW92bAlQQVJBTV9YU0laRSwlZWN4CisJbmVnbAklZWN4CisJeG9ybAklZWJ4LCVlYngKKworCUMgY29kZSBhdCAweDYxIGhlcmUsIGNsb3NlIGVub3VnaCB0byBhbGlnbmVkCitMKG9vcDIpOgorCWFkY2wJJDAsJWVieAorCW1vdmwJKCVlc2ksJWVjeCw0KSwlZWF4CisJbXVsbAkoJWVicCkKKwlhZGRsCSVlYngsJWVheAorCW1vdmwJKCVlZGksJWVjeCw0KSwlZWJ4CisJYWRjbAkkMCwlZWR4CisJYWRkbAklZWF4LCVlYngKKwltb3ZsCSVlYngsKCVlZGksJWVjeCw0KQorCWluY2wJJWVjeAorCW1vdmwJJWVkeCwlZWJ4CisJam56CUwob29wMikKKworCWFkY2wJJDAsJWVieAorCisJbW92bAklZWJ4LCglZWRpKQorCWFkZGwJJDQsJWVkaQorCW1vdmwJVkFSX0NPVU5URVIsJWVheAorCWRlY2wJJWVheAorCW1vdmwJJWVheCxWQVJfQ09VTlRFUgorCWpueglMKG91dGVyKQorCitMKHNraXApOgorCXBvcGwJJWVieAorCXBvcGwJJWVkaQorCXBvcGwJJWVicAorCXBvcGwJJWVzaQorCWFkZGwJJDQsJWVzcAorCXJldAorCitMKGRvbmUpOgorCW1vdmwJJWVkeCw0KCVlZGkpCUMgc3RvcmUgdG8gd3BbMV0KKwlwb3BsCSVlZGkKKwlwb3BsCSVlYnAKKwlwb3BsCSVlc2kKKwlwb3BsCSVlYXgJCUMgZHVtbXkgcG9wIGZvciBkZWFsbG9jYXRpbmcgc3RhY2sgc2xvdAorCXJldAorCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtL3BvcGNvdW50LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW0vcG9wY291bnQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlODIxNDQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtL3BvcGNvdW50LmFzbQpAQCAtMCwwICsxLDE0NiBAQAorZG5sICBJbnRlbCBQNSBtcG5fcG9wY291bnQgLS0gbXBuIGJpdCBwb3B1bGF0aW9uIGNvdW50LgorCitkbmwgIENvcHlyaWdodCAyMDAxLCAyMDAyLCAyMDE0LCAyMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQyBQNTogOC4wIGN5Y2xlcy9saW1iCisKKworQyB1bnNpZ25lZCBsb25nIG1wbl9wb3Bjb3VudCAobXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUpOworQworQyBBbiBhcml0aG1ldGljIGFwcHJvYWNoIGhhcyBiZWVuIGZvdW5kIHRvIGJlIHNsb3dlciB0aGFuIHRoZSB0YWJsZSBsb29rdXAsCitDIGR1ZSB0byBuZWVkaW5nIHRvbyBtYW55IGluc3RydWN0aW9ucy4KKworQyBUaGUgc2xpZ2h0bHkgc3RyYW5nZSBxdW90aW5nIGhlcmUgaGVscHMgdGhlIHJlbmFtaW5nIGRvbmUgYnkgdHVuZS9tYW55LnBsLgorZGVmbGl0KFRBQkxFX05BTUUsCittNF9hc3NlcnRfZGVmaW5lZChgR1NZTV9QUkVGSVgnKQorR1NZTV9QUkVGSVhgJ21wbl9wb3Bjb3VudGBgJ190YWJsZScpCisKK0MgRklYTUU6IGV4cG9ydGluZyB0aGUgdGFibGUgdG8gaGFtZGlzdCBpcyBpbmNvcnJlY3QgYXMgaXQgaHVydCBpbmNyZW1lbnRhbAorQyBsaW5raW5nLgorCisJUk9EQVRBCisJQUxJR04oOCkKKwlHTE9CTAlUQUJMRV9OQU1FCitUQUJMRV9OQU1FOgorZm9ybG9vcChpLDAsMjU1LAorYAkuYnl0ZQltNF9wb3Bjb3VudChpKQorJykKKworZGVmZnJhbWUoUEFSQU1fU0laRSw4KQorZGVmZnJhbWUoUEFSQU1fU1JDLCA0KQorCisJVEVYVAorCUFMSUdOKDgpCisKK1BST0xPR1VFKG1wbl9wb3Bjb3VudCkKK2RlZmxpdChgRlJBTUUnLDApCisKKwltb3ZsCVBBUkFNX1NJWkUsICVlY3gKKwlwdXNobAklZXNpCUZSQU1FX3B1c2hsKCkKKworaWZkZWYoYFBJQycsYAorCXB1c2hsCSVlYngJRlJBTUVfcHVzaGwoKQorCXB1c2hsCSVlYnAJRlJBTUVfcHVzaGwoKQoraWZkZWYoYERBUldJTicsYAorCXNobGwJJWVjeAkJQyBzaXplIGluIGJ5dGUgcGFpcnMKKwlMRUEoCVRBQkxFX05BTUUsICVlYnApCisJbW92bAlQQVJBTV9TUkMsICVlc2kKKwl4b3JsCSVlYXgsICVlYXgJQyB0b3RhbAorCXhvcmwJJWVieCwgJWVieAlDIGJ5dGUKKwl4b3JsCSVlZHgsICVlZHgJQyBieXRlCisnLGAKKwljYWxsCUwoaGVyZSkKK0woaGVyZSk6CisJcG9wbAklZWJwCisJc2hsbAklZWN4CQlDIHNpemUgaW4gYnl0ZSBwYWlycworCisJYWRkbAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfK1suLUwoaGVyZSldLCAlZWJwCisJbW92bAlQQVJBTV9TUkMsICVlc2kKKworCXhvcmwJJWVheCwgJWVheAlDIHRvdGFsCisJeG9ybAklZWJ4LCAlZWJ4CUMgYnl0ZQorCisJbW92bAlUQUJMRV9OQU1FQEdPVCglZWJwKSwgJWVicAorCXhvcmwJJWVkeCwgJWVkeAlDIGJ5dGUKKycpCitkZWZpbmUoVEFCTEUsYCglZWJwLCQxKScpCisnLGAKK2RubCBub24tUElDCisJc2hsbAklZWN4CQlDIHNpemUgaW4gYnl0ZSBwYWlycworCW1vdmwJUEFSQU1fU1JDLCAlZXNpCisKKwlwdXNobAklZWJ4CUZSQU1FX3B1c2hsKCkKKwl4b3JsCSVlYXgsICVlYXgJQyB0b3RhbAorCisJeG9ybAklZWJ4LCAlZWJ4CUMgYnl0ZQorCXhvcmwJJWVkeCwgJWVkeAlDIGJ5dGUKKworZGVmaW5lKFRBQkxFLGBUQUJMRV9OQU1FYCcoJDEpJykKKycpCisKKworCUFMSUdOKDgpCUMgbmVjZXNzYXJ5IG9uIFA1NSBmb3IgY2xhaW1lZCBzcGVlZAorTCh0b3ApOgorCUMgZWF4CXRvdGFsCisJQyBlYngJYnl0ZQorCUMgZWN4CWNvdW50ZXIsIDIqc2l6ZSB0byAyCisJQyBlZHgJYnl0ZQorCUMgZXNpCXNyYworCUMgZWRpCisJQyBlYnAJW1BJQ10gdGFibGUKKworCWFkZGwJJWVieCwgJWVheAorCW1vdmIJLTEoJWVzaSwlZWN4LDIpLCAlYmwKKworCWFkZGwJJWVkeCwgJWVheAorCW1vdmIJLTIoJWVzaSwlZWN4LDIpLCAlZGwKKworCW1vdmIJVEFCTEUoJWVieCksICVibAorCWRlY2wJJWVjeAorCisJbW92YglUQUJMRSglZWR4KSwgJWRsCisJam56CUwodG9wKQorCisKK2lmZGVmKGBQSUMnLGAKKwlwb3BsCSVlYnAKKycpCisJYWRkbAklZWJ4LCAlZWF4CisJcG9wbAklZWJ4CisKKwlhZGRsCSVlZHgsICVlYXgKKwlwb3BsCSVlc2kKKworCXJldAorCitFUElMT0dVRSgpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW0vcnNoaWZ0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW0vcnNoaWZ0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTA1YzRjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bS9yc2hpZnQuYXNtCkBAIC0wLDAgKzEsMjQzIEBACitkbmwgIEludGVsIFBlbnRpdW0gbXBuX3JzaGlmdCAtLSBtcG4gcmlnaHQgc2hpZnQuCisKK2RubCAgQ29weXJpZ2h0IDE5OTIsIDE5OTQtMTk5NiwgMTk5OSwgMjAwMCwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MgICAgICAgICBjeWNsZXMvbGltYgorQyBQNSxQNTQ6ICAgIDYuMAorQyBQNTU6ICAgICAgIDUuMzc1CisKKworQyBtcF9saW1iX3QgbXBuX3JzaGlmdCAobXBfcHRyIGRzdCwgbXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUsCitDICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaGlmdCk7CitDCitDIFRoZSBtYWluIHNoaWZ0LWJ5LU4gbG9vcCBzaG91bGQgcnVuIGF0IDUuMzc1IGMvbCBhbmQgdGhhdCdzIHdoYXQgUDU1IGRvZXMsCitDIGJ1dCBQNSBhbmQgUDU0IHJ1biBvbmx5IGF0IDYuMCBjL2wsIHdoaWNoIGlzIDQgY3ljbGVzIGxvc3Qgc29tZXdoZXJlLgorCitkZWZmcmFtZShQQVJBTV9TSElGVCwxNikKK2RlZmZyYW1lKFBBUkFNX1NJWkUsIDEyKQorZGVmZnJhbWUoUEFSQU1fU1JDLCAgOCkKK2RlZmZyYW1lKFBBUkFNX0RTVCwgIDQpCisKKwlURVhUCisJQUxJR04oOCkKK1BST0xPR1VFKG1wbl9yc2hpZnQpCisKKwlwdXNobAklZWRpCisJcHVzaGwJJWVzaQorCXB1c2hsCSVlYngKKwlwdXNobAklZWJwCitkZWZsaXQoYEZSQU1FJywxNikKKworCW1vdmwJUEFSQU1fRFNULCVlZGkKKwltb3ZsCVBBUkFNX1NSQywlZXNpCisJbW92bAlQQVJBTV9TSVpFLCVlYnAKKwltb3ZsCVBBUkFNX1NISUZULCVlY3gKKworQyBXZSBjYW4gdXNlIGZhc3RlciBjb2RlIGZvciBzaGlmdC1ieS0xIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucy4KKwljbXAJJDEsJWVjeAorCWpuZQlMKG5vcm1hbCkKKwlsZWFsCTQoJWVkaSksJWVheAorCWNtcGwJJWVzaSwlZWF4CisJam5jCUwoc3BlY2lhbCkJCUMganVtcCBpZiByZXNfcHRyICsgMSA+PSBzX3B0cgorCWxlYWwJKCVlZGksJWVicCw0KSwlZWF4CisJY21wbAklZWF4LCVlc2kKKwlqbmMJTChzcGVjaWFsKQkJQyBqdW1wIGlmIHNfcHRyID49IHJlc19wdHIgKyBzaXplCisKK0wobm9ybWFsKToKKwltb3ZsCSglZXNpKSwlZWR4CisJYWRkbAkkNCwlZXNpCisJeG9ybAklZWF4LCVlYXgKKwlzaHJkbCgJJWNsLCAlZWR4LCAlZWF4KQlDIGNvbXB1dGUgY2FycnkgbGltYgorCXB1c2hsCSVlYXgJCQlDIHB1c2ggY2FycnkgbGltYiBvbnRvIHN0YWNrCisKKwlkZWNsCSVlYnAKKwlwdXNobAklZWJwCisJc2hybAkkMywlZWJwCisJanoJTChlbmQpCisKKwltb3ZsCSglZWRpKSwlZWF4CQlDIGZldGNoIGRlc3RpbmF0aW9uIGNhY2hlIGxpbmUKKworCUFMSUdOKDQpCitMKG9vcCk6CW1vdmwJMjgoJWVkaSksJWVheAkJQyBmZXRjaCBkZXN0aW5hdGlvbiBjYWNoZSBsaW5lCisJbW92bAklZWR4LCVlYngKKworCW1vdmwJKCVlc2kpLCVlYXgKKwltb3ZsCTQoJWVzaSksJWVkeAorCXNocmRsKAklY2wsICVlYXgsICVlYngpCisJc2hyZGwoCSVjbCwgJWVkeCwgJWVheCkKKwltb3ZsCSVlYngsKCVlZGkpCisJbW92bAklZWF4LDQoJWVkaSkKKworCW1vdmwJOCglZXNpKSwlZWJ4CisJbW92bAkxMiglZXNpKSwlZWF4CisJc2hyZGwoCSVjbCwgJWVieCwgJWVkeCkKKwlzaHJkbCgJJWNsLCAlZWF4LCAlZWJ4KQorCW1vdmwJJWVkeCw4KCVlZGkpCisJbW92bAklZWJ4LDEyKCVlZGkpCisKKwltb3ZsCTE2KCVlc2kpLCVlZHgKKwltb3ZsCTIwKCVlc2kpLCVlYngKKwlzaHJkbCgJJWNsLCAlZWR4LCAlZWF4KQorCXNocmRsKAklY2wsICVlYngsICVlZHgpCisJbW92bAklZWF4LDE2KCVlZGkpCisJbW92bAklZWR4LDIwKCVlZGkpCisKKwltb3ZsCTI0KCVlc2kpLCVlYXgKKwltb3ZsCTI4KCVlc2kpLCVlZHgKKwlzaHJkbCgJJWNsLCAlZWF4LCAlZWJ4KQorCXNocmRsKAklY2wsICVlZHgsICVlYXgpCisJbW92bAklZWJ4LDI0KCVlZGkpCisJbW92bAklZWF4LDI4KCVlZGkpCisKKwlhZGRsCSQzMiwlZXNpCisJYWRkbAkkMzIsJWVkaQorCWRlY2wJJWVicAorCWpueglMKG9vcCkKKworTChlbmQpOglwb3BsCSVlYnAKKwlhbmRsCSQ3LCVlYnAKKwlqeglMKGVuZDIpCitMKG9vcDIpOgorCW1vdmwJKCVlc2kpLCVlYXgKKwlzaHJkbCgJJWNsLCVlYXgsJWVkeCkJCUMgY29tcHV0ZSByZXN1bHQgbGltYgorCW1vdmwJJWVkeCwoJWVkaSkKKwltb3ZsCSVlYXgsJWVkeAorCWFkZGwJJDQsJWVzaQorCWFkZGwJJDQsJWVkaQorCWRlY2wJJWVicAorCWpueglMKG9vcDIpCisKK0woZW5kMik6CisJc2hybAklY2wsJWVkeAkJQyBjb21wdXRlIG1vc3Qgc2lnbmlmaWNhbnQgbGltYgorCW1vdmwJJWVkeCwoJWVkaSkJCUMgc3RvcmUgaXQKKworCXBvcGwJJWVheAkJCUMgcG9wIGNhcnJ5IGxpbWIKKworCXBvcGwJJWVicAorCXBvcGwJJWVieAorCXBvcGwJJWVzaQorCXBvcGwJJWVkaQorCXJldAorCisKK0MgV2UgbG9vcCBmcm9tIGxlYXN0IHNpZ25pZmljYW50IGVuZCBvZiB0aGUgYXJyYXlzLCB3aGljaCBpcyBvbmx5CitDIHBlcm1pc3NhYmxlIGlmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRvbid0IG92ZXJsYXAsIHNpbmNlIHRoZQorQyBmdW5jdGlvbiBpcyBkb2N1bWVudGVkIHRvIHdvcmsgZm9yIG92ZXJsYXBwaW5nIHNvdXJjZSBhbmQgZGVzdGluYXRpb24uCisKK0woc3BlY2lhbCk6CisJbGVhbAktNCglZWRpLCVlYnAsNCksJWVkaQorCWxlYWwJLTQoJWVzaSwlZWJwLDQpLCVlc2kKKworCW1vdmwJKCVlc2kpLCVlZHgKKwlzdWJsCSQ0LCVlc2kKKworCWRlY2wJJWVicAorCXB1c2hsCSVlYnAKKwlzaHJsCSQzLCVlYnAKKworCXNocmwJJWVkeAorCWluY2wJJWVicAorCWRlY2wJJWVicAorCWp6CUwoTGVuZCkKKworCW1vdmwJKCVlZGkpLCVlYXgJCUMgZmV0Y2ggZGVzdGluYXRpb24gY2FjaGUgbGluZQorCisJQUxJR04oNCkKK0woTG9vcCk6CisJbW92bAktMjgoJWVkaSksJWVheAkJQyBmZXRjaCBkZXN0aW5hdGlvbiBjYWNoZSBsaW5lCisJbW92bAklZWR4LCVlYngKKworCW1vdmwJKCVlc2kpLCVlYXgKKwltb3ZsCS00KCVlc2kpLCVlZHgKKwlyY3JsCSVlYXgKKwltb3ZsCSVlYngsKCVlZGkpCisJcmNybAklZWR4CisJbW92bAklZWF4LC00KCVlZGkpCisKKwltb3ZsCS04KCVlc2kpLCVlYngKKwltb3ZsCS0xMiglZXNpKSwlZWF4CisJcmNybAklZWJ4CisJbW92bAklZWR4LC04KCVlZGkpCisJcmNybAklZWF4CisJbW92bAklZWJ4LC0xMiglZWRpKQorCisJbW92bAktMTYoJWVzaSksJWVkeAorCW1vdmwJLTIwKCVlc2kpLCVlYngKKwlyY3JsCSVlZHgKKwltb3ZsCSVlYXgsLTE2KCVlZGkpCisJcmNybAklZWJ4CisJbW92bAklZWR4LC0yMCglZWRpKQorCisJbW92bAktMjQoJWVzaSksJWVheAorCW1vdmwJLTI4KCVlc2kpLCVlZHgKKwlyY3JsCSVlYXgKKwltb3ZsCSVlYngsLTI0KCVlZGkpCisJcmNybAklZWR4CisJbW92bAklZWF4LC0yOCglZWRpKQorCisJbGVhbAktMzIoJWVzaSksJWVzaQkJQyB1c2UgbGVhbCBub3QgdG8gY2xvYmJlciBjYXJyeQorCWxlYWwJLTMyKCVlZGkpLCVlZGkKKwlkZWNsCSVlYnAKKwlqbnoJTChMb29wKQorCitMKExlbmQpOgorCXBvcGwJJWVicAorCXNiYmwJJWVheCwlZWF4CQlDIHNhdmUgY2FycnkgaW4gJWVheAorCWFuZGwJJDcsJWVicAorCWp6CUwoTGVuZDIpCisJYWRkbAklZWF4LCVlYXgJCUMgcmVzdG9yZSBjYXJyeSBmcm9tIGVheAorTChMb29wMik6CisJbW92bAklZWR4LCVlYngKKwltb3ZsCSglZXNpKSwlZWR4CisJcmNybAklZWR4CisJbW92bAklZWJ4LCglZWRpKQorCisJbGVhbAktNCglZXNpKSwlZXNpCQlDIHVzZSBsZWFsIG5vdCB0byBjbG9iYmVyIGNhcnJ5CisJbGVhbAktNCglZWRpKSwlZWRpCisJZGVjbAklZWJwCisJam56CUwoTG9vcDIpCisKKwlqbXAJTChMMSkKK0woTGVuZDIpOgorCWFkZGwJJWVheCwlZWF4CQlDIHJlc3RvcmUgY2FycnkgZnJvbSBlYXgKK0woTDEpOgltb3ZsCSVlZHgsKCVlZGkpCQlDIHN0b3JlIGxhc3QgbGltYgorCisJbW92bAkkMCwlZWF4CisJcmNybAklZWF4CisKKwlwb3BsCSVlYnAKKwlwb3BsCSVlYngKKwlwb3BsCSVlc2kKKwlwb3BsCSVlZGkKKwlyZXQKKworRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bS9zcXJfYmFzZWNhc2UuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bS9zcXJfYmFzZWNhc2UuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMWQ3NjcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtL3Nxcl9iYXNlY2FzZS5hc20KQEAgLTAsMCArMSw1MjggQEAKK2RubCAgSW50ZWwgUDUgbXBuX3Nxcl9iYXNlY2FzZSAtLSBzcXVhcmUgYW4gbXBuIG51bWJlci4KKworZG5sICBDb3B5cmlnaHQgMTk5OS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQyBQNTogYXBwcm94IDggY3ljbGVzIHBlciBjcm9zc3Byb2R1Y3QsIG9yIDE1LjUgY3ljbGVzIHBlciB0cmlhbmd1bGFyCitDIHByb2R1Y3QgYXQgYXJvdW5kIDIweDIwIGxpbWJzLgorCisKK0Mgdm9pZCBtcG5fc3FyX2Jhc2VjYXNlIChtcF9wdHIgZHN0LCBtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSk7CitDCitDIENhbGN1bGF0ZSBzcmMsc2l6ZSBzcXVhcmVkLCBzdG9yaW5nIHRoZSByZXN1bHQgaW4gZHN0LDIqc2l6ZS4KK0MKK0MgVGhlIGFsZ29yaXRobSBpcyBiYXNpY2FsbHkgdGhlIHNhbWUgYXMgbXBuL2dlbmVyaWMvc3FyX2Jhc2VjYXNlLmMsIGJ1dCBhCitDIGxvdCBvZiBmdW5jdGlvbiBjYWxsIG92ZXJoZWFkcyBhcmUgYXZvaWRlZCwgZXNwZWNpYWxseSB3aGVuIHRoZSBzaXplIGlzCitDIHNtYWxsLgorCitkZWZmcmFtZShQQVJBTV9TSVpFLDEyKQorZGVmZnJhbWUoUEFSQU1fU1JDLCA4KQorZGVmZnJhbWUoUEFSQU1fRFNULCA0KQorCisJVEVYVAorCUFMSUdOKDgpCitQUk9MT0dVRShtcG5fc3FyX2Jhc2VjYXNlKQorZGVmbGl0KGBGUkFNRScsMCkKKworCW1vdmwJUEFSQU1fU0laRSwgJWVkeAorCW1vdmwJUEFSQU1fU1JDLCAlZWF4CisKKwljbXBsCSQyLCAlZWR4CisJbW92bAlQQVJBTV9EU1QsICVlY3gKKworCWplCUwodHdvX2xpbWJzKQorCisJbW92bAkoJWVheCksICVlYXgKKwlqYQlMKHRocmVlX29yX21vcmUpCisKK0MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0Mgb25lIGxpbWIgb25seQorCUMgZWF4CXNyYworCUMgZWJ4CisJQyBlY3gJZHN0CisJQyBlZHgKKworCW11bGwJJWVheAorCisJbW92bAklZWF4LCAoJWVjeCkKKwltb3ZsCSVlZHgsIDQoJWVjeCkKKworCXJldAorCitDIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJQUxJR04oOCkKK0wodHdvX2xpbWJzKToKKwlDIGVheAlzcmMKKwlDIGVieAorCUMgZWN4CWRzdAorCUMgZWR4CXNpemUKKworCXB1c2hsCSVlYnAKKwlwdXNobAklZWRpCisKKwlwdXNobAklZXNpCisJcHVzaGwJJWVieAorCisJbW92bAklZWF4LCAlZWJ4CisJbW92bAkoJWVheCksICVlYXgKKworCW11bGwJJWVheAkJQyBzcmNbMF1eMgorCisJbW92bAklZWF4LCAoJWVjeCkJQyBkc3RbMF0KKwltb3ZsCSVlZHgsICVlc2kJQyBkc3RbMV0KKworCW1vdmwJNCglZWJ4KSwgJWVheAorCisJbXVsbAklZWF4CQlDIHNyY1sxXV4yCisKKwltb3ZsCSVlYXgsICVlZGkJQyBkc3RbMl0KKwltb3ZsCSVlZHgsICVlYnAJQyBkc3RbM10KKworCW1vdmwJKCVlYngpLCAlZWF4CisKKwltdWxsCTQoJWVieCkJCUMgc3JjWzBdKnNyY1sxXQorCisJYWRkbAklZWF4LCAlZXNpCisJcG9wbAklZWJ4CisKKwlhZGNsCSVlZHgsICVlZGkKKworCWFkY2wJJDAsICVlYnAKKwlhZGRsCSVlc2ksICVlYXgKKworCWFkY2wJJWVkaSwgJWVkeAorCW1vdmwJJWVheCwgNCglZWN4KQorCisJYWRjbAkkMCwgJWVicAorCXBvcGwJJWVzaQorCisJbW92bAklZWR4LCA4KCVlY3gpCisJbW92bAklZWJwLCAxMiglZWN4KQorCisJcG9wbAklZWRpCisJcG9wbAklZWJwCisKKwlyZXQKKworCitDIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJQUxJR04oOCkKK0wodGhyZWVfb3JfbW9yZSk6CisJQyBlYXgJc3JjIGxvdyBsaW1iCisJQyBlYngKKwlDIGVjeAlkc3QKKwlDIGVkeAlzaXplCisKKwljbXBsCSQ0LCAlZWR4CisJcHVzaGwJJWVieAorZGVmbGl0KGBGUkFNRScsNCkKKworCW1vdmwJUEFSQU1fU1JDLCAlZWJ4CisJamFlCUwoZm91cl9vcl9tb3JlKQorCisKK0MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0MgdGhyZWUgbGltYnMKKwlDIGVheAlzcmMgbG93IGxpbWIKKwlDIGVieAlzcmMKKwlDIGVjeAlkc3QKKwlDIGVkeAlzaXplCisKKwlwdXNobAklZWJwCisJcHVzaGwJJWVkaQorCisJbXVsbAklZWF4CQlDIHNyY1swXSBeIDIKKworCW1vdmwJJWVheCwgKCVlY3gpCisJbW92bAklZWR4LCA0KCVlY3gpCisKKwltb3ZsCTQoJWVieCksICVlYXgKKwl4b3JsCSVlYnAsICVlYnAKKworCW11bGwJJWVheAkJQyBzcmNbMV0gXiAyCisKKwltb3ZsCSVlYXgsIDgoJWVjeCkKKwltb3ZsCSVlZHgsIDEyKCVlY3gpCisKKwltb3ZsCTgoJWVieCksICVlYXgKKwlwdXNobAklZXNpCQlDIHJpc2sgb2YgY2FjaGUgYmFuayBjbGFzaAorCisJbXVsbAklZWF4CQlDIHNyY1syXSBeIDIKKworCW1vdmwJJWVheCwgMTYoJWVjeCkKKwltb3ZsCSVlZHgsIDIwKCVlY3gpCisKKwltb3ZsCSglZWJ4KSwgJWVheAorCisJbXVsbAk0KCVlYngpCQlDIHNyY1swXSAqIHNyY1sxXQorCisJbW92bAklZWF4LCAlZXNpCisJbW92bAklZWR4LCAlZWRpCisKKwltb3ZsCSglZWJ4KSwgJWVheAorCisJbXVsbAk4KCVlYngpCQlDIHNyY1swXSAqIHNyY1syXQorCisJYWRkbAklZWF4LCAlZWRpCisJbW92bAklZWR4LCAlZWJwCisKKwlhZGNsCSQwLCAlZWJwCisJbW92bAk0KCVlYngpLCAlZWF4CisKKwltdWxsCTgoJWVieCkJCUMgc3JjWzFdICogc3JjWzJdCisKKwl4b3JsCSVlYngsICVlYngKKwlhZGRsCSVlYXgsICVlYnAKKworCUMgZWF4CisJQyBlYngJemVybywgd2lsbCBiZSBkc3RbNV0KKwlDIGVjeAlkc3QKKwlDIGVkeAlkc3RbNF0KKwlDIGVzaQlkc3RbMV0KKwlDIGVkaQlkc3RbMl0KKwlDIGVicAlkc3RbM10KKworCWFkY2wJJDAsICVlZHgKKwlhZGRsCSVlc2ksICVlc2kKKworCWFkY2wJJWVkaSwgJWVkaQorCisJYWRjbAklZWJwLCAlZWJwCisKKwlhZGNsCSVlZHgsICVlZHgKKwltb3ZsCTQoJWVjeCksICVlYXgKKworCWFkY2wJJDAsICVlYngKKwlhZGRsCSVlc2ksICVlYXgKKworCW1vdmwJJWVheCwgNCglZWN4KQorCW1vdmwJOCglZWN4KSwgJWVheAorCisJYWRjbAklZWRpLCAlZWF4CisJbW92bAkxMiglZWN4KSwgJWVzaQorCisJYWRjbAklZWJwLCAlZXNpCisJbW92bAkxNiglZWN4KSwgJWVkaQorCisJbW92bAklZWF4LCA4KCVlY3gpCisJbW92bAklZXNpLCAxMiglZWN4KQorCisJYWRjbAklZWR4LCAlZWRpCisJcG9wbAklZXNpCisKKwltb3ZsCTIwKCVlY3gpLCAlZWF4CisJbW92bAklZWRpLCAxNiglZWN4KQorCisJcG9wbAklZWRpCisJcG9wbAklZWJwCisKKwlhZGNsCSVlYngsICVlYXgJQyBubyBjYXJyeSBvdXQgb2YgdGhpcworCXBvcGwJJWVieAorCisJbW92bAklZWF4LCAyMCglZWN4KQorCisJcmV0CisKKworQyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUFMSUdOKDgpCitMKGZvdXJfb3JfbW9yZSk6CisJQyBlYXgJc3JjIGxvdyBsaW1iCisJQyBlYngJc3JjCisJQyBlY3gJZHN0CisJQyBlZHgJc2l6ZQorCUMgZXNpCisJQyBlZGkKKwlDIGVicAorCUMKKwlDIEZpcnN0IG11bHRpcGx5IHNyY1swXSpzcmNbMS4uc2l6ZS0xXSBhbmQgc3RvcmUgYXQgZHN0WzEuLnNpemVdLgorCitkZWZsaXQoYEZSQU1FJyw0KQorCisJcHVzaGwJJWVkaQorRlJBTUVfcHVzaGwoKQorCXB1c2hsCSVlc2kKK0ZSQU1FX3B1c2hsKCkKKworCXB1c2hsCSVlYnAKK0ZSQU1FX3B1c2hsKCkKKwlsZWFsCSglZWN4LCVlZHgsNCksICVlZGkJQyBkc3QgZW5kIG9mIHRoaXMgbXVsMQorCisJbGVhbAkoJWVieCwlZWR4LDQpLCAlZXNpCUMgc3JjIGVuZAorCW1vdmwJJWVieCwgJWVicAkJQyBzcmMKKworCW5lZ2wJJWVkeAkJCUMgLXNpemUKKwl4b3JsCSVlYngsICVlYngJCUMgY2xlYXIgY2FycnkgbGltYiBhbmQgY2FycnkgZmxhZworCisJbGVhbAkxKCVlZHgpLCAlZWN4CQlDIC0oc2l6ZS0xKQorCitMKG11bDEpOgorCUMgZWF4CXNjcmF0Y2gKKwlDIGVieAljYXJyeQorCUMgZWN4CWNvdW50ZXIsIG5lZ2F0aXZlCisJQyBlZHgJc2NyYXRjaAorCUMgZXNpCSZzcmNbc2l6ZV0KKwlDIGVkaQkmZHN0W3NpemVdCisJQyBlYnAJc3JjCisKKwlhZGNsCSQwLCAlZWJ4CisJbW92bAkoJWVzaSwlZWN4LDQpLCAlZWF4CisKKwltdWxsCSglZWJwKQorCisJYWRkbAklZWF4LCAlZWJ4CisKKwltb3ZsCSVlYngsICglZWRpLCVlY3gsNCkKKwlpbmNsCSVlY3gKKworCW1vdmwJJWVkeCwgJWVieAorCWpueglMKG11bDEpCisKKworCUMgQWRkIHByb2R1Y3RzIHNyY1tuXSpzcmNbbisxLi5zaXplLTFdIGF0IGRzdFsyKm4tMS4uLl0sIGZvcgorCUMgbj0xLi5zaXplLTIuCisJQworCUMgVGhlIGxhc3QgdHdvIHByb2R1Y3RzLCB3aGljaCBhcmUgdGhlIGVuZCBjb3JuZXIgb2YgdGhlIHByb2R1Y3QKKwlDIHRyaWFuZ2xlLCBhcmUgaGFuZGxlZCBzZXBhcmF0ZWx5IHRvIHNhdmUgbG9vcGluZyBvdmVyaGVhZC4gIFRoZXNlCisJQyBhcmUgc3JjW3NpemUtM10qc3JjW3NpemUtMixzaXplLTFdIGFuZCBzcmNbc2l6ZS0yXSpzcmNbc2l6ZS0xXS4KKwlDIElmIHNpemUgaXMgNCB0aGVuIGl0J3Mgb25seSB0aGVzZSB0aGF0IG5lZWQgdG8gYmUgZG9uZS4KKwlDCisJQyBJbiB0aGUgb3V0ZXIgbG9vcCAlZXNpIGlzIGEgY29uc3RhbnQsIGFuZCAlZWRpIGp1c3QgYWR2YW5jZXMgYnkgMQorCUMgbGltYiBlYWNoIHRpbWUuICBUaGUgc2l6ZSBvZiB0aGUgb3BlcmF0aW9uIGRlY3JlYXNlcyBieSAxIGxpbWIKKwlDIGVhY2ggdGltZS4KKworCUMgZWF4CisJQyBlYngJY2FycnkgKG5lZWRpbmcgY2FycnkgZmxhZyBhZGRlZCkKKwlDIGVjeAorCUMgZWR4CisJQyBlc2kJJnNyY1tzaXplXQorCUMgZWRpCSZkc3Rbc2l6ZV0KKwlDIGVicAorCisJYWRjbAkkMCwgJWVieAorCW1vdmwJUEFSQU1fU0laRSwgJWVkeAorCisJbW92bAklZWJ4LCAoJWVkaSkKKwlzdWJsCSQ0LCAlZWR4CisKKwluZWdsCSVlZHgKKwlqeglMKGNvcm5lcikKKworCitMKG91dGVyKToKKwlDIGVieAlwcmV2aW91cyBjYXJyeSBsaW1iIHRvIHN0b3JlCisJQyBlZHgJb3V0ZXIgbG9vcCBjb3VudGVyIChuZWdhdGl2ZSkKKwlDIGVzaQkmc3JjW3NpemVdCisJQyBlZGkJZHN0LCBwb2ludGluZyBhdCBzdG9yZWQgY2FycnkgbGltYiBvZiBwcmV2aW91cyBsb29wCisKKwlwdXNobAklZWR4CQkJQyBuZXcgb3V0ZXIgbG9vcCBjb3VudGVyCisJbGVhbAktMiglZWR4KSwgJWVjeAorCisJbW92bAklZWJ4LCAoJWVkaSkKKwlhZGRsCSQ0LCAlZWRpCisKKwlhZGRsCSQ0LCAlZWJwCisJeG9ybAklZWJ4LCAlZWJ4CQlDIGluaXRpYWwgY2FycnkgbGltYiwgY2xlYXIgY2FycnkgZmxhZworCitMKGlubmVyKToKKwlDIGVheAlzY3JhdGNoCisJQyBlYngJY2FycnkgKG5lZWRpbmcgY2FycnkgZmxhZyBhZGRlZCkKKwlDIGVjeAljb3VudGVyLCBuZWdhdGl2ZQorCUMgZWR4CXNjcmF0Y2gKKwlDIGVzaQkmc3JjW3NpemVdCisJQyBlZGkJZHN0IGVuZCBvZiB0aGlzIGFkZG11bAorCUMgZWJwCSZzcmNbal0KKworCWFkY2wJJDAsICVlYngKKwltb3ZsCSglZXNpLCVlY3gsNCksICVlYXgKKworCW11bGwJKCVlYnApCisKKwlhZGRsCSVlYngsICVlYXgKKwltb3ZsCSglZWRpLCVlY3gsNCksICVlYngKKworCWFkY2wJJDAsICVlZHgKKwlhZGRsCSVlYXgsICVlYngKKworCW1vdmwJJWVieCwgKCVlZGksJWVjeCw0KQorCWluY2wJJWVjeAorCisJbW92bAklZWR4LCAlZWJ4CisJam56CUwoaW5uZXIpCisKKworCWFkY2wJJDAsICVlYngKKwlwb3BsCSVlZHgJCUMgb3V0ZXIgbG9vcCBjb3VudGVyCisKKwlpbmNsCSVlZHgKKwlqbnoJTChvdXRlcikKKworCisJbW92bAklZWJ4LCAoJWVkaSkKKworTChjb3JuZXIpOgorCUMgZXNpCSZzcmNbc2l6ZV0KKwlDIGVkaQkmZHN0WzIqc2l6ZS00XQorCisJbW92bAktOCglZXNpKSwgJWVheAorCW1vdmwJLTQoJWVkaSksICVlYngJCUMgcmlzayBvZiBkYXRhIGNhY2hlIGJhbmsgY2xhc2ggaGVyZQorCisJbXVsbAktMTIoJWVzaSkJCUMgc3JjW3NpemUtMl0qc3JjW3NpemUtM10KKworCWFkZGwJJWVheCwgJWVieAorCW1vdmwJJWVkeCwgJWVjeAorCisJYWRjbAkkMCwgJWVjeAorCW1vdmwJLTQoJWVzaSksICVlYXgKKworCW11bGwJLTEyKCVlc2kpCQlDIHNyY1tzaXplLTFdKnNyY1tzaXplLTNdCisKKwlhZGRsCSVlY3gsICVlYXgKKwltb3ZsCSglZWRpKSwgJWVjeAorCisJYWRjbAkkMCwgJWVkeAorCW1vdmwJJWVieCwgLTQoJWVkaSkKKworCWFkZGwJJWVheCwgJWVjeAorCW1vdmwJJWVkeCwgJWVieAorCisJYWRjbAkkMCwgJWVieAorCW1vdmwJLTQoJWVzaSksICVlYXgKKworCW11bGwJLTgoJWVzaSkJCUMgc3JjW3NpemUtMV0qc3JjW3NpemUtMl0KKworCW1vdmwJJWVjeCwgKCVlZGkpCisJYWRkbAklZWF4LCAlZWJ4CisKKwlhZGNsCSQwLCAlZWR4CisJbW92bAlQQVJBTV9TSVpFLCAlZWF4CisKKwluZWdsCSVlYXgKKwltb3ZsCSVlYngsIDQoJWVkaSkKKworCWFkZGwJJDEsICVlYXgJCUMgLShzaXplLTEpIGFuZCBjbGVhciBjYXJyeQorCW1vdmwJJWVkeCwgOCglZWRpKQorCisKK0MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0MgTGVmdCBzaGlmdCBvZiBkc3RbMS4uMipzaXplLTJdLCBoaWdoIGJpdCBzaGlmdGVkIG91dCBiZWNvbWVzIGRzdFsyKnNpemUtMV0uCisKK0wobHNoaWZ0KToKKwlDIGVheAljb3VudGVyLCBuZWdhdGl2ZQorCUMgZWJ4CW5leHQgbGltYgorCUMgZWN4CisJQyBlZHgKKwlDIGVzaQorCUMgZWRpCSZkc3RbMipzaXplLTRdCisJQyBlYnAKKworCW1vdmwJMTIoJWVkaSwlZWF4LDgpLCAlZWJ4CisKKwlyY2xsCSVlYngKKwltb3ZsCTE2KCVlZGksJWVheCw4KSwgJWVjeAorCisJcmNsbAklZWN4CisJbW92bAklZWJ4LCAxMiglZWRpLCVlYXgsOCkKKworCW1vdmwJJWVjeCwgMTYoJWVkaSwlZWF4LDgpCisJaW5jbAklZWF4CisKKwlqbnoJTChsc2hpZnQpCisKKworCWFkY2wJJWVheCwgJWVheAkJQyBoaWdoIGJpdCBvdXQKKwltb3ZsCVBBUkFNX1NSQywgJWVzaQorCisJbW92bAlQQVJBTV9TSVpFLCAlZWN4CUMgcmlzayBvZiBjYWNoZSBiYW5rIGNsYXNoCisJbW92bAklZWF4LCAxMiglZWRpKQkJQyBkc3QgbW9zdCBzaWduaWZpY2FudCBsaW1iCisKKworQyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQyBOb3cgYWRkIGluIHRoZSBzcXVhcmVzIG9uIHRoZSBkaWFnb25hbCwgbmFtZWx5IHNyY1swXV4yLCBzcmNbMV1eMiwgLi4uLAorQyBzcmNbc2l6ZS0xXV4yLiAgZHN0WzBdIGhhc24ndCB5ZXQgYmVlbiBzZXQgYXQgYWxsIHlldCwgYW5kIGp1c3QgZ2V0cyB0aGUKK0MgbG93IGxpbWIgb2Ygc3JjWzBdXjIuCisKKwltb3ZsCSglZXNpKSwgJWVheAkJQyBzcmNbMF0KKwlsZWFsCSglZXNpLCVlY3gsNCksICVlc2kJQyBzcmMgZW5kCisKKwluZWdsCSVlY3gKKworCW11bGwJJWVheAorCisJbW92bAklZWF4LCAxNiglZWRpLCVlY3gsOCkJQyBkc3RbMF0KKwltb3ZsCSVlZHgsICVlYngKKworCWFkZGwJJDEsICVlY3gJCUMgc2l6ZS0xIGFuZCBjbGVhciBjYXJyeQorCitMKGRpYWcpOgorCUMgZWF4CXNjcmF0Y2ggKGxvdyBwcm9kdWN0KQorCUMgZWJ4CWNhcnJ5IGxpbWIKKwlDIGVjeAljb3VudGVyLCBuZWdhdGl2ZQorCUMgZWR4CXNjcmF0Y2ggKGhpZ2ggcHJvZHVjdCkKKwlDIGVzaQkmc3JjW3NpemVdCisJQyBlZGkJJmRzdFsyKnNpemUtNF0KKwlDIGVicAlzY3JhdGNoIChmZXRjaGVkIGRzdCBsaW1icykKKworCW1vdmwJKCVlc2ksJWVjeCw0KSwgJWVheAorCWFkY2wJJDAsICVlYngKKworCW11bGwJJWVheAorCisJbW92bAkxNi00KCVlZGksJWVjeCw4KSwgJWVicAorCisJYWRkbAklZWJwLCAlZWJ4CisJbW92bAkxNiglZWRpLCVlY3gsOCksICVlYnAKKworCWFkY2wJJWVheCwgJWVicAorCW1vdmwJJWVieCwgMTYtNCglZWRpLCVlY3gsOCkKKworCW1vdmwJJWVicCwgMTYoJWVkaSwlZWN4LDgpCisJaW5jbAklZWN4CisKKwltb3ZsCSVlZHgsICVlYngKKwlqbnoJTChkaWFnKQorCisKKwlhZGNsCSQwLCAlZWR4CisJbW92bAkxNi00KCVlZGkpLCAlZWF4CUMgZHN0IG1vc3Qgc2lnbmlmaWNhbnQgbGltYgorCisJYWRkbAklZWF4LCAlZWR4CisJcG9wbAklZWJwCisKKwltb3ZsCSVlZHgsIDE2LTQoJWVkaSkKKwlwb3BsCSVlc2kJCUMgcmlzayBvZiBjYWNoZSBiYW5rIGNsYXNoCisKKwlwb3BsCSVlZGkKKwlwb3BsCSVlYngKKworCXJldAorCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtNC9SRUFETUUgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtNC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBmNzUyZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW00L1JFQURNRQpAQCAtMCwwICsxLDEyNCBAQAorQ29weXJpZ2h0IDIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCisKKworICAgICAgICAgICAgICAgICAgIElOVEVMIFBFTlRJVU0tNCBNUE4gU1VCUk9VVElORVMKKworCitUaGlzIGRpcmVjdG9yeSBjb250YWlucyBtcG4gZnVuY3Rpb25zIG9wdGltaXplZCBmb3IgSW50ZWwgUGVudGl1bS00LgorCitUaGUgbW14IHN1YmRpcmVjdG9yeSBoYXMgcm91dGluZXMgdXNpbmcgTU1YIGluc3RydWN0aW9ucywgdGhlIHNzZTIKK3N1YmRpcmVjdG9yeSBoYXMgcm91dGluZXMgdXNpbmcgU1NFMiBpbnN0cnVjdGlvbnMuICBBbGwgUDRzIGhhdmUgdGhlc2UsIHRoZQorc2VwYXJhdGUgZGlyZWN0b3JpZXMgYXJlIGp1c3Qgc28gY29uZmlndXJlIGNhbiBvbWl0IHRoYXQgY29kZSBpZiB0aGUKK2Fzc2VtYmxlciBkb2Vzbid0IHN1cHBvcnQgaXQuCisKKworU1RBVFVTCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3ljbGVzL2xpbWIKKworCW1wbl9hZGRfbi9zdWJfbiAgICAgICAgICAgIDQgbm9ybWFsLCA2IGluLXBsYWNlCisKKwltcG5fbXVsXzEgICAgICAgICAgICAgICAgICA0IG5vcm1hbCwgNiBpbi1wbGFjZQorCW1wbl9hZGRtdWxfMSAgICAgICAgICAgICAgIDYKKwltcG5fc3VibXVsXzEgICAgICAgICAgICAgICA3CisKKwltcG5fbXVsX2Jhc2VjYXNlICAgICAgICAgICA2IGN5Y2xlcy9jcm9zc3Byb2R1Y3QgKGFwcHJveCkKKworCW1wbl9zcXJfYmFzZWNhc2UgICAgICAgICAgIDMuNSBjeWNsZXMvY3Jvc3Nwcm9kdWN0IChhcHByb3gpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIDcuMCBjeWNsZXMvdHJpYW5nbGVwcm9kdWN0IChhcHByb3gpCisKKwltcG5fbC9yc2hpZnQgICAgICAgICAgICAgICAxLjc1CisKKworCitUaGUgc2hpZnRzIG91Z2h0IHRvIGJlIGFibGUgdG8gZ28gYXQgMS41IGMvbCwgYnV0IG5vdCBtdWNoIGVmZm9ydCBoYXMgYmVlbgorYXBwbGllZCB0byB0aGVtIHlldC4KKworSW4tcGxhY2Ugb3BlcmF0aW9ucywgYW5kIGFsbCBhZGRtdWwsIHN1Ym11bCwgbXVsX2Jhc2VjYXNlIGFuZCBzcXJfYmFzZWNhc2UKK2NhbGxzLCBzdWZmZXIgZnJvbSBwaXBlbGluZSBhbm9tYWxpZXMgYXNzb2NpYXRlZCB3aXRoIHdyaXRlIGNvbWJpbmluZyBhbmQKK21vdmQgcmVhZHMgYW5kIHdyaXRlcyB0byB0aGUgc2FtZSBvciBuZWFyYnkgbG9jYXRpb25zLiAgVGhlIG1vdnEKK2luc3RydWN0aW9ucyBkbyBub3QgdHJpZ2dlciB0aGUgc2FtZSBoYXJkd2FyZSBwcm9ibGVtcy4gIFVuZm9ydHVuYXRlbHksCit1c2luZyBtb3ZxIGFuZCBzcGxpdHRpbmcvY29tYmluaW5nIHNlZW1zIHRvIHJlcXVpcmUgdG9vIG1hbnkgZXh0cmEKK2luc3RydWN0aW9ucyB0byBoZWxwLiAgUGVyaGFwcyBmdXR1cmUgY2hpcCBzdGVwcGluZ3Mgd2lsbCBiZSBiZXR0ZXIuCisKKworCitOT1RFUworCitUaGUgUGVudGl1bS00IHBpcGVsaW5lICJOZXRidXJzdCIsIHByb3ZpZGVzIGZvciBxdWl0ZSBhIG51bWJlciBvZiBzdXJwcmlzZXMuCitNYW55IHRyYWRpdGlvbmFsIHg4NiBpbnN0cnVjdGlvbnMgcnVuIHZlcnkgc2xvd2x5LCByZXF1aXJpbmcgdXNlIG9mCithbHRlcmF0aXZlIGluc3RydWN0aW9ucyBmb3IgYWNjZXB0YWJsZSBwZXJmb3JtYW5jZS4KKworYWRjbCBhbmQgc2JibCBhcmUgcXVpdGUgc2xvdyBhdCA4IGN5Y2xlcyBmb3IgcmVnLT5yZWcuICBwYWRkcSBvZiAzMi1iaXRzCit3aXRoaW4gYSA2NC1iaXQgbW14IHJlZ2lzdGVyIHNlZW1zIGJldHRlciwgdGhvdWdoIHRoZSBjb21iaW5hdGlvbgorcGFkZHEvcHNybHEgd2hlbiBwcm9wYWdhdGluZyBhIGNhcnJ5IGlzIHN0aWxsIGEgNCBjeWNsZSBsYXRlbmN5LgorCitpbmNsIGFuZCBkZWNsIHNob3VsZCBiZSBhdm9pZGVkLCBpbnN0ZWFkIHVzZSBhZGQgJDEgYW5kIHN1YiAkMS4gIEFwcGFyZW50bHkKK3RoZSBjYXJyeSBmbGFnIGlzIG5vdCBzZXBhcmF0ZWx5IHJlbmFtZWQsIHNvIGluY2wgYW5kIGRlY2wgZGVwZW5kIG9uIGFsbAorcHJldmlvdXMgZmxhZ3Mtc2V0dGluZyBpbnN0cnVjdGlvbnMuCisKK3NobGwgYW5kIHNocmwgaGF2ZSBhIDQgY3ljbGUgbGF0ZW5jeSwgb3IgOCB0aW1lcyB0aGUgbGF0ZW5jeSBvZiB0aGUgZmFzdGVzdAoraW50ZWdlciBpbnN0cnVjdGlvbnMgKGFkZGwsIHN1YmwsIG9ybCwgYW5kbCwgYW5kIHNvbWUgbW9yZSkuICBzaGxkbCBhbmQKK3NocmRsIHNlZW0gdG8gaGF2ZSAxMyBhbmQgMTUgY3ljbGVzIGxhdGVuY3ksIHJlc3BlY3RpdmVseS4gIEJpemFycmUuCisKK21vdnEgbW14IC0+IG1teCBkb2VzIGhhdmUgNiBjeWNsZSBsYXRlbmN5LCBhcyBub3RlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KK3B4b3IvcG9yIG9yIHNpbWlsYXIgY29tYmluYXRpb24gYXQgMiBjeWNsZXMgbGF0ZW5jeSBjYW4gYmUgdXNlZCBpbnN0ZWFkLgorVGhlIG1vdnEgaG93ZXZlciBleGVjdXRlcyBpbiB0aGUgZmxvYXQgdW5pdCwgdGhlcmVieSBzYXZpbmcgTU1YIGV4ZWN1dGlvbgorcmVzb3VyY2VzLiAgV2l0aCB0aGUgcmlnaHQganVnZ2xpbmcsIGRhdGEgbW92ZXMgc2hvdWxkbid0IGJlIG9uIGEgZGVwZW5kZW50CitjaGFpbi4KKworTDEgaXMgd3JpdGUtdGhyb3VnaCwgYnV0IHRoZSB3cml0ZS1jb21iaW5pbmcgc291bmRzIGxpa2UgaXQgZG9lcyBlbm91Z2ggdG8KK25vdCByZXF1aXJlIGV4cGxpY2l0IGRlc3RpbmF0aW9uIHByZWZldGNoaW5nLgorCit4bW0gcmVnaXN0ZXJzIHNvIGZhciBoYXZlbid0IGZvdW5kIGEgdXNlLCBidXQgbm90IG11Y2ggZWZmb3J0IGhhcyBiZWVuCitleHBlbmRlZC4gIEEgY29uZmlndXJlIHRlc3QgZm9yIHdoZXRoZXIgdGhlIG9wZXJhdGluZyBzeXN0ZW0ga25vd3MKK2Z4c2F2ZS9meHJlc3RvciB3aWxsIGJlIG5lZWRlZCBpZiB0aGV5J3JlIHVzZWQuCisKKworCitSRUZFUkVOQ0VTCisKK0ludGVsIFBlbnRpdW0tNCBwcm9jZXNzb3IgbWFudWFscywKKworCWh0dHA6Ly9kZXZlbG9wZXIuaW50ZWwuY29tL2Rlc2lnbi9wZW50aXVtNC9tYW51YWxzCisKKyJJbnRlbCBQZW50aXVtIDQgUHJvY2Vzc29yIE9wdGltaXphdGlvbiBSZWZlcmVuY2UgTWFudWFsIiwgSW50ZWwsIDIwMDEsCitvcmRlciBudW1iZXIgMjQ4OTY2LiAgQXZhaWxhYmxlIG9uLWxpbmU6CisKKwlodHRwOi8vZGV2ZWxvcGVyLmludGVsLmNvbS9kZXNpZ24vcGVudGl1bTQvbWFudWFscy8yNDg5NjYuaHRtCisKKworCistLS0tLS0tLS0tLS0tLS0tCitMb2NhbCB2YXJpYWJsZXM6Cittb2RlOiB0ZXh0CitmaWxsLWNvbHVtbjogNzYKK0VuZDoKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW00L2NvcHlkLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW00L2NvcHlkLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmFmODFjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bTQvY29weWQuYXNtCkBAIC0wLDAgKzEsNzEgQEAKK2RubCAgUGVudGl1bS00IG1wbl9jb3B5ZCAtLSBjb3B5IGxpbWIgdmVjdG9yLCBkZWNyZW1lbnRpbmcuCisKK2RubCAgQ29weXJpZ2h0IDE5OTktMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKK2RubCAgVGhlIHN0ZC9yZXAvbW92c2wvY2xkIGlzIHZlcnkgc2xvdyBmb3Igc21hbGwgYmxvY2tzIG9uIHBlbnRpdW00LiAgSXRzCitkbmwgIHN0YXJ0dXAgdGltZSBzZWVtcyB0byBiZSBhYm91dCAxNjUgY3ljbGVzLiAgSXQgdGhlbiBuZWVkcyAyLjYgYy9sLgorZG5sICBXZSB0aGVyZWZvcmUgdXNlIGFuIG9wZW4tY29kZWQgMiBjL2wgY29weWluZyBsb29wLgorCitkbmwgIFVsdGltYXRlbHksIHdlIG1heSB3YW50IHRvIHVzZSA2NC1iaXQgbW92cSBvciAxMjgtYml0IG1vdmRxdSBpbiBzb21lCitkbmwgIG5pZnR5IHVucm9sbGVkIGFycmFuZ2VtZW50LiAgQ2xlYXJseSwgdGhhdCBjb3VsZCByZWFjaCBtdWNoIGhpZ2hlcgorZG5sICBzcGVlZHMsIGF0IGxlYXN0IGZvciBsYXJnZSBibG9ja3MuCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworZGVmZnJhbWUoUEFSQU1fU0laRSwgMTIpCitkZWZmcmFtZShQQVJBTV9TUkMsIDgpCitkZWZmcmFtZShQQVJBTV9EU1QsICA0KQorCisJVEVYVAorCUFMSUdOKDgpCisKK1BST0xPR1VFKG1wbl9jb3B5ZCkKK2RlZmxpdChgRlJBTUUnLDApCisKKwltb3ZsCVBBUkFNX1NJWkUsICVlY3gKKworCW1vdmwJUEFSQU1fU1JDLCAlZWF4CisJbW92bAlQQVJBTV9EU1QsICVlZHgKKwltb3ZsCSVlYngsIFBBUkFNX1NJWkUKKwlhZGRsCSQtMSwgJWVjeAorCWpzCUwoZW5kKQorCitMKGxvb3ApOgorCW1vdmwJKCVlYXgsJWVjeCw0KSwgJWVieAorCW1vdmwJJWVieCwgKCVlZHgsJWVjeCw0KQorCWFkZGwJJC0xLCAlZWN4CisKKwlqbnMJTChsb29wKQorTChlbmQpOgorCW1vdmwJUEFSQU1fU0laRSwgJWVieAorCXJldAorCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtNC9jb3B5aS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtNC9jb3B5aS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYxNDg4NwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW00L2NvcHlpLmFzbQpAQCAtMCwwICsxLDkzIEBACitkbmwgIFBlbnRpdW0tNCBtcG5fY29weWkgLS0gY29weSBsaW1iIHZlY3RvciwgaW5jcmVtZW50aW5nLgorCitkbmwgIENvcHlyaWdodCAxOTk5LTIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCitkbmwgIFRoZSByZXAvbW92c2wgaXMgdmVyeSBzbG93IGZvciBzbWFsbCBibG9ja3Mgb24gcGVudGl1bTQuICBJdHMgc3RhcnR1cAorZG5sICB0aW1lIHNlZW1zIHRvIGJlIGFib3V0IDExMCBjeWNsZXMuICBJdCB0aGVuIGNvcGllcyBhdCBhIHJhdGUgb2Ygb25lCitkbmwgIGxpbWIgcGVyIGN5Y2xlLiAgV2UgdGhlcmVmb3JlIGZhbGwgYmFjayB0byBhbiBvcGVuLWNvZGVkIDIgYy9sIGNvcHlpbmcKK2RubCAgbG9vcCBmb3Igc21hbGxlciBzaXplcy4KKworZG5sICBVbHRpbWF0ZWx5LCB3ZSBtYXkgd2FudCB0byB1c2UgNjQtYml0IG1vdmQgb3IgMTI4LWJpdCBtb3ZkcXUgaW4gc29tZQorZG5sICBuaWZ0eSB1bnJvbGxlZCBhcnJhbmdlbWVudC4gIENsZWFybHksIHRoYXQgY291bGQgcmVhY2ggbXVjaCBoaWdoZXIKK2RubCAgc3BlZWRzLCBhdCBsZWFzdCBmb3IgbGFyZ2UgYmxvY2tzLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK2RlZmZyYW1lKFBBUkFNX1NJWkUsIDEyKQorZGVmZnJhbWUoUEFSQU1fU1JDLCA4KQorZGVmZnJhbWUoUEFSQU1fRFNULCAgNCkKKworCVRFWFQKKwlBTElHTig4KQorCitQUk9MT0dVRShtcG5fY29weWkpCitkZWZsaXQoYEZSQU1FJywwKQorCisJbW92bAlQQVJBTV9TSVpFLCAlZWN4CisJY21wbAkkMTUwLCAlZWN4CisJamcJTChyZXBsbW92cykKKworCW1vdmwJUEFSQU1fU1JDLCAlZWF4CisJbW92bAlQQVJBTV9EU1QsICVlZHgKKwltb3ZsCSVlYngsIFBBUkFNX1NJWkUKKwl0ZXN0bAklZWN4LCAlZWN4CisJanoJTChlbmQpCisKK0wobG9vcCk6CisJbW92bAkoJWVheCksICVlYngKKwlsZWFsCTQoJWVheCksICVlYXgKKwlhZGRsCSQtMSwgJWVjeAorCW1vdmwJJWVieCwgKCVlZHgpCisJbGVhbAk0KCVlZHgpLCAlZWR4CisKKwlqbnoJTChsb29wKQorCitMKGVuZCk6CisJbW92bAlQQVJBTV9TSVpFLCAlZWJ4CisJcmV0CisKK0wocmVwbG1vdnMpOgorCWNsZAlDIGJldHRlciBzYWZlIHRoYW4gc29ycnksIHNlZSBtcG4veDg2L1JFQURNRQorCisJbW92bAklZXNpLCAlZWF4CisJbW92bAlQQVJBTV9TUkMsICVlc2kKKwltb3ZsCSVlZGksICVlZHgKKwltb3ZsCVBBUkFNX0RTVCwgJWVkaQorCisJcmVwCisJbW92c2wKKworCW1vdmwJJWVheCwgJWVzaQorCW1vdmwJJWVkeCwgJWVkaQorCisJcmV0CisKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW00L21teC9sc2hpZnQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bTQvbW14L2xzaGlmdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVlY2E2NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW00L21teC9sc2hpZnQuYXNtCkBAIC0wLDAgKzEsMzkgQEAKK2RubCAgSW50ZWwgUGVudGl1bS00IG1wbl9sc2hpZnQgLS0gbGVmdCBzaGlmdC4KKworZG5sICBDb3B5cmlnaHQgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MgUDQgV2lsbGFtZXR0ZSwgTm9ydGh3b29kOiAxLjc1IGN5Y2xlcy9saW1iCitDIFA0IFByZXNjb3R0OgkJICAgIDIuMCBjeWNsZXMvbGltYgorCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2xzaGlmdCkKK2luY2x1ZGVfbXBuKGB4ODYvcGVudGl1bS9tbXgvbHNoaWZ0LmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtNC9tbXgvcG9waGFtLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW00L21teC9wb3BoYW0uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NjNjYjUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtNC9tbXgvcG9waGFtLmFzbQpAQCAtMCwwICsxLDIwMyBAQAorZG5sICBJbnRlbCBQZW50aXVtIDQgbXBuX3BvcGNvdW50LCBtcG5faGFtZGlzdCAtLSBwb3B1bGF0aW9uIGNvdW50IGFuZAorZG5sICBoYW1taW5nIGRpc3RhbmNlLgorCitkbmwgIENvcHlyaWdodCAyMDAwLTIwMDIsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDCQkJICAgICBwb3Bjb3VudAkgICAgIGhhbWRpc3QKK0MgUDMgbW9kZWwgOSAgKEJhbmlhcykJCT8JCT8KK0MgUDMgbW9kZWwgMTMgKERvdGhhbikJCTYJCTYKK0MgUDQgbW9kZWwgMCAgKFdpbGxhbWV0dGUpCitDIFA0IG1vZGVsIDEgICg/KQorQyBQNCBtb2RlbCAyICAoTm9ydGh3b29kKQk4CQk5CitDIFA0IG1vZGVsIDMgIChQcmVzY290dCkJOAkJOQorQyBQNCBtb2RlbCA0ICAoTm9jb25hKQorCitDIHVuc2lnbmVkIGxvbmcgbXBuX3BvcGNvdW50IChtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSk7CitDIHVuc2lnbmVkIGxvbmcgbXBuX2hhbWRpc3QgKG1wX3NyY3B0ciBzcmMsIG1wX3NyY3B0ciBzcmMyLCBtcF9zaXplX3Qgc2l6ZSk7CitDCitDIExvYWRpbmcgd2l0aCB1bmFsaWduZWQgbW92cSdzIGNvc3RzIGFuIGV4dHJhIDEgYy9sIGFuZCBoZW5jZSBpcyBhdm9pZGVkLgorQyBUd28gbW92ZCdzIGFuZCBhIHB1bnBja2xkcSBzZWVtcyB0byBiZSB0aGUgc2FtZSBzcGVlZCBhcyBhbiBhbGlnbmVkIG1vdnEsCitDIGFuZCB1c2luZyB0aGVtIHNhdmVzIGZpZGRsaW5nIGFib3V0IHdpdGggYWxpZ25tZW50IHRlc3Rpbmcgb24gZW50cnkuCitDCitDIEZvciBwb3Bjb3VudCB0aGVyZSdzIDEzIG1teCBpbnN0cnVjdGlvbnMgaW4gdGhlIGxvb3AsIHNvIHBlcmhhcHMgNi41IGMvbAorQyBtaWdodCBiZSBwb3NzaWJsZSwgYnV0IDggYy9sIHJlbHlpbmcgb24gb3V0LW9mLW9yZGVyIGV4ZWN1dGlvbiBpcyBhbHJlYWR5CitDIHF1aXRlIHJlYXNvbmFibGUuCisKK2lmZGVmKGBPUEVSQVRJT05fcG9wY291bnQnLCwKK2BpZmRlZihgT1BFUkFUSU9OX2hhbWRpc3QnLCwKK2BtNF9lcnJvcihgTmVlZCBPUEVSQVRJT05fcG9wY291bnQgb3IgT1BFUkFUSU9OX2hhbWRpc3QgZGVmaW5lZAorJyknKScpCisKK2RlZmluZShIQU0sCittNF9hc3NlcnRfbnVtYXJncygxKQorYGlmZGVmKGBPUEVSQVRJT05faGFtZGlzdCcsYCQxJyknKQorCitkZWZpbmUoUE9QLAorbTRfYXNzZXJ0X251bWFyZ3MoMSkKK2BpZmRlZihgT1BFUkFUSU9OX3BvcGNvdW50JyxgJDEnKScpCisKK0hBTShgCitkZWZmcmFtZShQQVJBTV9TSVpFLCAxMikKK2RlZmZyYW1lKFBBUkFNX1NSQzIsICA4KQorZGVmZnJhbWUoUEFSQU1fU1JDLCAgIDQpCitkZWZpbmUoTTRfZnVuY3Rpb24sbXBuX2hhbWRpc3QpCisnKQorUE9QKGAKK2RlZmZyYW1lKFBBUkFNX1NJWkUsICA4KQorZGVmZnJhbWUoUEFSQU1fU1JDLCAgIDQpCitkZWZpbmUoTTRfZnVuY3Rpb24sbXBuX3BvcGNvdW50KQorJykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fcG9wY291bnQgbXBuX2hhbWRpc3QpCisKKworaWZkZWYoYFBJQycsLGAKKwlkbmwgIG5vbi1QSUMKKwlST0RBVEEKKwlBTElHTig4KQorTChyb2RhdGFfQUFBQUFBQUFBQUFBQUFBQSk6CisJLmxvbmcJMHhBQUFBQUFBQQorCS5sb25nCTB4QUFBQUFBQUEKK0wocm9kYXRhXzMzMzMzMzMzMzMzMzMzMzMpOgorCS5sb25nCTB4MzMzMzMzMzMKKwkubG9uZwkweDMzMzMzMzMzCitMKHJvZGF0YV8wRjBGMEYwRjBGMEYwRjBGKToKKwkubG9uZwkweDBGMEYwRjBGCisJLmxvbmcJMHgwRjBGMEYwRgorJykKKworCVRFWFQKKwlBTElHTigxNikKKworUFJPTE9HVUUoTTRfZnVuY3Rpb24pCitkZWZsaXQoYEZSQU1FJywwKQorCisJbW92bAlQQVJBTV9TSVpFLCAlZWN4CisJbW92bAlQQVJBTV9TUkMsICVlYXgKKworaWZkZWYoYFBJQycsYAorCW1vdmwJJDB4QUFBQUFBQUEsICVlZHgKKwltb3ZkCSVlZHgsICVtbTcKKwlwdW5wY2tsZHEgJW1tNywgJW1tNworCisJbW92bAkkMHgzMzMzMzMzMywgJWVkeAorCW1vdmQJJWVkeCwgJW1tNgorCXB1bnBja2xkcSAlbW02LCAlbW02CisKKwltb3ZsCSQweDBGMEYwRjBGLCAlZWR4CisJbW92ZAklZWR4LCAlbW01CisJcHVucGNrbGRxICVtbTUsICVtbTUKKworSEFNKGAJbW92bAlQQVJBTV9TUkMyLCAlZWR4JykKKworJyxgCisJZG5sIG5vbi1QSUMKK0hBTShgCW1vdmwJUEFSQU1fU1JDMiwgJWVkeCcpCisJbW92cQlMKHJvZGF0YV9BQUFBQUFBQUFBQUFBQUFBKSwgJW1tNworCW1vdnEJTChyb2RhdGFfMzMzMzMzMzMzMzMzMzMzMyksICVtbTYKKwltb3ZxCUwocm9kYXRhXzBGMEYwRjBGMEYwRjBGMEYpLCAlbW01CisnKQorCisJcHhvcgklbW00LCAlbW00CQlDIHplcm8KKwlweG9yCSVtbTAsICVtbTAJCUMgdG90YWwKKworCXN1YmwJJDEsICVlY3gKKwlqYQlMKHRvcCkKKworTChsYXN0KToKKwltb3ZkCSglZWF4LCVlY3gsNCksICVtbTEJCUMgc3JjIGhpZ2ggbGltYgorSEFNKGAJbW92ZAkoJWVkeCwlZWN4LDQpLCAlbW0yCisJcHhvcgklbW0yLCAlbW0xCisnKQorCWptcAlMKGxvYWRlZCkKKworCitMKHRvcCk6CisJQyBlYXgJc3JjCisJQyBlYngKKwlDIGVjeAljb3VudGVyLCBzaXplLTEgdG8gMiBvciAxLCBpbmNsdXNpdmUKKwlDIGVkeAlbaGFtZGlzdF0gc3JjMgorCUMKKwlDIG1tMAl0b3RhbCAobG93IGR3b3JkKQorCUMgbW0xCShzY3JhdGNoKQorCUMgbW0yCShzY3JhdGNoKQorCUMgbW0zCisJQyBtbTQJMHgwMDAwMDAwMDAwMDAwMDAwCisJQyBtbTUJMHgwRjBGMEYwRjBGMEYwRjBGCisJQyBtbTYJMHgzMzMzMzMzMzMzMzMzMzMzCisJQyBtbTcJMHhBQUFBQUFBQUFBQUFBQUFBCisKKwltb3ZkCSglZWF4KSwgJW1tMQorCW1vdmQJNCglZWF4KSwgJW1tMgorCXB1bnBja2xkcSAlbW0yLCAlbW0xCisJYWRkbAkkOCwgJWVheAorCitIQU0oYAltb3ZkCSglZWR4KSwgJW1tMgorCW1vdmQJNCglZWR4KSwgJW1tMworCXB1bnBja2xkcSAlbW0zLCAlbW0yCisJcHhvcgklbW0yLCAlbW0xCisJYWRkbAkkOCwgJWVkeAorJykKKworTChsb2FkZWQpOgorCW1vdnEJJW1tNywgJW1tMgorCXBhbmQJJW1tMSwgJW1tMgorCXBzcmxxCSQxLCAlbW0yCisJcHN1YmQJJW1tMiwgJW1tMQlDIGJpdCBwYWlycworCisJbW92cQklbW02LCAlbW0yCisJcGFuZAklbW0xLCAlbW0yCisJcHNybHEJJDIsICVtbTEKKwlwYW5kCSVtbTYsICVtbTEKKwlwYWRkZAklbW0yLCAlbW0xCUMgbmliYmxlcworCisJbW92cQklbW01LCAlbW0yCisJcGFuZAklbW0xLCAlbW0yCisJcHNybHEJJDQsICVtbTEKKwlwYW5kCSVtbTUsICVtbTEKKwlwYWRkZAklbW0yLCAlbW0xCUMgYnl0ZXMKKworCXBzYWRidygJJW1tNCwgJW1tMSkKKwlwYWRkZAklbW0xLCAlbW0wCUMgdG8gdG90YWwKKworCXN1YmwJJDIsICVlY3gKKwlqZwlMKHRvcCkKKworCUMgZWN4IGlzIDAgb3IgLTEgcmVwcmVzZW50aW5nIHJlc3BlY3RpdmVseSAxIG9yIDAgZnVydGhlciBsaW1icworCWp6CUwobGFzdCkKKworCisJbW92ZAklbW0wLCAlZWF4CisJZW1tcworCXJldAorCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtNC9tbXgvcnNoaWZ0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW00L21teC9yc2hpZnQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhYzAwOTQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtNC9tbXgvcnNoaWZ0LmFzbQpAQCAtMCwwICsxLDM5IEBACitkbmwgIEludGVsIFBlbnRpdW0tNCBtcG5fcnNoaWZ0IC0tIHJpZ2h0IHNoaWZ0LgorCitkbmwgIENvcHlyaWdodCAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQyBQNCBXaWxsYW1ldHRlLCBOb3J0aHdvb2Q6IDEuNzUgY3ljbGVzL2xpbWIKK0MgUDQgUHJlc2NvdHQ6CQkgICAgMi4wIGN5Y2xlcy9saW1iCisKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fcnNoaWZ0KQoraW5jbHVkZV9tcG4oYHg4Ni9wZW50aXVtL21teC9yc2hpZnQuYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW00L3NzZTIvYWRkX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bTQvc3NlMi9hZGRfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUyMzgwZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW00L3NzZTIvYWRkX24uYXNtCkBAIC0wLDAgKzEsMTAxIEBACitkbmwgIEludGVsIFBlbnRpdW0tNCBtcG5fYWRkX24gLS0gbXBuIGFkZGl0aW9uLgorCitkbmwgIENvcHlyaWdodCAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQwkJCQkJY3ljbGVzL2xpbWIKK0MJCQkgICAgIGRzdCE9c3JjMSwyICBkc3Q9PXNyYzEgIGRzdD09c3JjMgorQyBQNiBtb2RlbCAwLTgsMTAtMTIJCS0KK0MgUDYgbW9kZWwgOSAgIChCYW5pYXMpCQk/CitDIFA2IG1vZGVsIDEzICAoRG90aGFuKQkJPworQyBQNCBtb2RlbCAwLTEgKFdpbGxhbWV0dGUpCT8KK0MgUDQgbW9kZWwgMiAgIChOb3J0aHdvb2QpCTQJICAgICA2CQk2CitDIFA0IG1vZGVsIDMtNCAoUHJlc2NvdHQpCTQuMjUJICAgICA3LjUJNy41CisKK2RlZmZyYW1lKFBBUkFNX0NBUlJZLDIwKQorZGVmZnJhbWUoUEFSQU1fU0laRSwgMTYpCitkZWZmcmFtZShQQVJBTV9TUkMyLCAxMikKK2RlZmZyYW1lKFBBUkFNX1NSQzEsIDgpCitkZWZmcmFtZShQQVJBTV9EU1QsICA0KQorCitkbmwgIHJlLXVzZSBwYXJhbWV0ZXIgc3BhY2UKK2RlZmluZShTQVZFX0VCWCxgUEFSQU1fU1JDMScpCisKKwlURVhUCisJQUxJR04oOCkKKworUFJPTE9HVUUobXBuX2FkZF9uYykKK2RlZmxpdChgRlJBTUUnLDApCisJbW92ZAlQQVJBTV9DQVJSWSwgJW1tMAorCWptcAlMKHN0YXJ0X25jKQorRVBJTE9HVUUoKQorCisJQUxJR04oOCkKK1BST0xPR1VFKG1wbl9hZGRfbikKK2RlZmxpdChgRlJBTUUnLDApCisJcHhvcgklbW0wLCAlbW0wCitMKHN0YXJ0X25jKToKKwltb3YJUEFSQU1fU1JDMSwgJWVheAorCW1vdgklZWJ4LCBTQVZFX0VCWAorCW1vdglQQVJBTV9TUkMyLCAlZWJ4CisJbW92CVBBUkFNX0RTVCwgJWVkeAorCW1vdglQQVJBTV9TSVpFLCAlZWN4CisKKwlsZWEJKCVlYXgsJWVjeCw0KSwgJWVheAlDIHNyYzEgZW5kCisJbGVhCSglZWJ4LCVlY3gsNCksICVlYngJQyBzcmMyIGVuZAorCWxlYQkoJWVkeCwlZWN4LDQpLCAlZWR4CUMgZHN0IGVuZAorCW5lZwklZWN4CQkJQyAtc2l6ZQorCitMKHRvcCk6CisJQyBlYXgJc3JjMSBlbmQKKwlDIGVieAlzcmMyIGVuZAorCUMgZWN4CWNvdW50ZXIsIGxpbWJzLCBuZWdhdGl2ZQorCUMgZWR4CWRzdCBlbmQKKwlDIG1tMAljYXJyeSBiaXQKKworCW1vdmQJKCVlYXgsJWVjeCw0KSwgJW1tMQorCW1vdmQJKCVlYngsJWVjeCw0KSwgJW1tMgorCXBhZGRxCSVtbTIsICVtbTEKKworCXBhZGRxCSVtbTEsICVtbTAKKwltb3ZkCSVtbTAsICglZWR4LCVlY3gsNCkKKworCXBzcmxxCSQzMiwgJW1tMAorCisJYWRkCSQxLCAlZWN4CisJam56CUwodG9wKQorCisJbW92ZAklbW0wLCAlZWF4CisJbW92CVNBVkVfRUJYLCAlZWJ4CisJZW1tcworCXJldAorCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtNC9zc2UyL2FkZGxzaDFfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtNC9zc2UyL2FkZGxzaDFfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNiNjNiMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW00L3NzZTIvYWRkbHNoMV9uLmFzbQpAQCAtMCwwICsxLDEwOCBAQAorZG5sICBJbnRlbCBQZW50aXVtLTQgbXBuX2FkZGxzaDFfbiAtLSBtcG4geCsyKnkuCisKK2RubCAgQ29weXJpZ2h0IDIwMDEtMjAwNCwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MJCQkJCWN5Y2xlcy9saW1iCitDCQkJICAgICBkc3QhPXNyYzEsMiAgZHN0PT1zcmMxICBkc3Q9PXNyYzIKK0MgUDYgbW9kZWwgMC04LDEwLTEyCQktCitDIFA2IG1vZGVsIDkgICAoQmFuaWFzKQkJPworQyBQNiBtb2RlbCAxMyAgKERvdGhhbikJCT8KK0MgUDQgbW9kZWwgMC0xIChXaWxsYW1ldHRlKQk/CitDIFA0IG1vZGVsIDIgICAoTm9ydGh3b29kKQk0LjI1CSAgICAgNgkJNgorQyBQNCBtb2RlbCAzLTQgKFByZXNjb3R0KQk1CSAgICAgOC41CTguNQorCitDIFRoZSBzbGlnaHRseSBzdHJhbmdlIGNvbWJpbmF0aW9uIG9mIGluZGV4aW5nIGFuZCBwb2ludGVyIGluY3JlbWVudGluZworQyB0aGF0J3MgdXNlZCBzZWVtcyB0byB3b3JrIGJlc3QuICBOb3Qgc3VyZSB3aHksIGJ1dCAlZWN4LDQgd2l0aCBzcmMxIGFuZC9vcgorQyBzcmMyIGlzIGEgc2xvd2Rvd24uCitDCitDIFRoZSBkZXBlbmRlbnQgY2hhaW4gaXMgc2ltcGx5IHRoZSBwYWRkcSBvZiB4KzIqeSB0byB0aGUgcHJldmlvdXMgY2FycnksCitDIHRoZW4gcHNybHEgdG8gZ2V0IHRoZSBuZXcgY2FycnkuICBUaGF0IG1ha2VzIDQgYy9sIHRoZSB0YXJnZXQgc3BlZWQsIHdoaWNoCitDIGlzIGFsbW9zdCBhY2hpZXZlZCBmb3Igc2VwYXJhdGUgc3JjL2RzdCBidXQgd2hlbiBzcmM9PWRzdCB0aGUgd3JpdGUKK0MgY29tYmluaW5nIGFub21hbGllcyBzbG93IGl0IGRvd24uCisKK2RlZmZyYW1lKFBBUkFNX1NJWkUsIDE2KQorZGVmZnJhbWUoUEFSQU1fU1JDMiwgMTIpCitkZWZmcmFtZShQQVJBTV9TUkMxLCA4KQorZGVmZnJhbWUoUEFSQU1fRFNULCAgNCkKKworZG5sICByZS11c2UgcGFyYW1ldGVyIHNwYWNlCitkZWZpbmUoU0FWRV9FQlgsYFBBUkFNX1NSQzEnKQorCisJVEVYVAorCUFMSUdOKDgpCisKK1BST0xPR1VFKG1wbl9hZGRsc2gxX24pCitkZWZsaXQoYEZSQU1FJywwKQorCisJbW92CVBBUkFNX1NSQzEsICVlYXgKKwltb3YJJWVieCwgU0FWRV9FQlgKKworCW1vdglQQVJBTV9TUkMyLCAlZWJ4CisJcHhvcgklbW0wLCAlbW0wCQlDIGluaXRpYWwgY2FycnkKKworCW1vdglQQVJBTV9EU1QsICVlZHgKKworCW1vdglQQVJBTV9TSVpFLCAlZWN4CisKKwlsZWEJKCVlZHgsJWVjeCw0KSwgJWVkeAlDIGRzdCBlbmQKKwluZWcJJWVjeAkJCUMgLXNpemUKKworTCh0b3ApOgorCUMgZWF4CXNyYzEgZW5kCisJQyBlYngJc3JjMiBlbmQKKwlDIGVjeAljb3VudGVyLCBsaW1icywgbmVnYXRpdmUKKwlDIGVkeAlkc3QgZW5kCisJQyBtbTAJY2FycnkKKworCW1vdmQJKCVlYngpLCAlbW0yCisJbW92ZAkoJWVheCksICVtbTEKKwlwc3JscQkkMzIsICVtbTAKKwlsZWEJNCglZWF4KSwgJWVheAorCWxlYQk0KCVlYngpLCAlZWJ4CisKKwlwc2xscQkkMSwgJW1tMgorCXBhZGRxCSVtbTIsICVtbTEKKworCXBhZGRxCSVtbTEsICVtbTAKKworCW1vdmQJJW1tMCwgKCVlZHgsJWVjeCw0KQorCWFkZAkkMSwgJWVjeAorCWpueglMKHRvcCkKKworCisJcHNybHEJJDMyLCAlbW0wCisJbW92CVNBVkVfRUJYLCAlZWJ4CisJbW92ZAklbW0wLCAlZWF4CisJZW1tcworCXJldAorCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtNC9zc2UyL2FkZG11bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW00L3NzZTIvYWRkbXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MTAyMDcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtNC9zc2UyL2FkZG11bF8xLmFzbQpAQCAtMCwwICsxLDE4OSBAQAorZG5sICBtcG5fYWRkbXVsXzEgZm9yIFBlbnRpdW0gNCBhbmQgUDYgbW9kZWxzIHdpdGggU1NFMiAoaS5lLiwgOSxELEUsRikuCisKK2RubCAgQ29weXJpZ2h0IDIwMDUsIDIwMDcsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCQkJICAgIGN5Y2xlcy9saW1iCitDIFA2IG1vZGVsIDAtOCwxMC0xMgkJLQorQyBQNiBtb2RlbCA5ICAgKEJhbmlhcykJCTUuMjQKK0MgUDYgbW9kZWwgMTMgIChEb3RoYW4pCQk1LjI0CitDIFA0IG1vZGVsIDAtMSAoV2lsbGFtZXR0ZSkJNQorQyBQNCBtb2RlbCAyICAgKE5vcnRod29vZCkJNQorQyBQNCBtb2RlbCAzLTQgKFByZXNjb3R0KQk1CisKK0MgVE9ETzoKK0MgICogVHdlYWsgZWF4L2VkeCBvZmZzZXRzIGluIGxvb3AgYXMgdG8gc2F2ZSBzb21lIGxlYSdzCitDICAqIFBlcmhhcHMgc29mdHdhcmUgcGlwZWxpbmUgc21hbGwtY2FzZSBjb2RlCisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyBycAkJc3AgKyA0CitDIHVwCQlzcCArIDgKK0MgbgkJc3AgKyAxMgorQyB2MAkJc3AgKyAxNgorCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX2FkZG11bF8xKQorCXB4b3IJJW1tNiwgJW1tNgorTChlbnQpOgltb3YJNCglZXNwKSwgJWVkeAorCW1vdgk4KCVlc3ApLCAlZWF4CisJbW92CTEyKCVlc3ApLCAlZWN4CisJbW92ZAkxNiglZXNwKSwgJW1tNworCWNtcAkkNCwgJWVjeAorCWpuYwlMKGJpZykKKworTChscDApOgltb3ZkCSglZWF4KSwgJW1tMAorCWxlYQk0KCVlYXgpLCAlZWF4CisJbW92ZAkoJWVkeCksICVtbTQKKwlsZWEJNCglZWR4KSwgJWVkeAorCXBtdWx1ZHEJJW1tNywgJW1tMAorCXBhZGRxCSVtbTAsICVtbTQKKwlwYWRkcQklbW00LCAlbW02CisJbW92ZAklbW02LCAtNCglZWR4KQorCXBzcmxxCSQzMiwgJW1tNgorCWRlYwklZWN4CisJam56CUwobHAwKQorCW1vdmQJJW1tNiwgJWVheAorCWVtbXMKKwlyZXQKKworTChiaWcpOglhbmQJJDMsICVlY3gKKwlqZQlMKDApCisJY21wCSQyLCAlZWN4CisJamMJTCgxKQorCWplCUwoMikKKwlqbXAJTCgzKQkJCUMgRklYTUU6IG9uZSBjYXNlIHNob3VsZCBmYWxsIHRocm91Z2gKKworTCgwKToJbW92ZAkoJWVheCksICVtbTMKKwlzdWIJMTIoJWVzcCksICVlY3gJCUMgbG9vcCBjb3VudAorCWxlYQktMTYoJWVheCksICVlYXgKKwlsZWEJLTEyKCVlZHgpLCAlZWR4CisJcG11bHVkcQklbW03LCAlbW0zCisJbW92ZAkyMCglZWF4KSwgJW1tMAorCW1vdmQJMTIoJWVkeCksICVtbTUKKwlwbXVsdWRxCSVtbTcsICVtbTAKKwltb3ZkCTI0KCVlYXgpLCAlbW0xCisJcGFkZHEJJW1tMywgJW1tNQorCW1vdmQJMTYoJWVkeCksICVtbTQKKwlqbXAJTCgwMCkKKworTCgxKToJbW92ZAkoJWVheCksICVtbTIKKwlzdWIJMTIoJWVzcCksICVlY3gKKwlsZWEJLTEyKCVlYXgpLCAlZWF4CisJbGVhCS04KCVlZHgpLCAlZWR4CisJbW92ZAk4KCVlZHgpLCAlbW00CisJcG11bHVkcQklbW03LCAlbW0yCisJbW92ZAkxNiglZWF4KSwgJW1tMworCXBtdWx1ZHEJJW1tNywgJW1tMworCW1vdmQJMjAoJWVheCksICVtbTAKKwlwYWRkcQklbW0yLCAlbW00CisJbW92ZAkxMiglZWR4KSwgJW1tNQorCWptcAlMKDAxKQorCitMKDIpOgltb3ZkCSglZWF4KSwgJW1tMQorCXN1YgkxMiglZXNwKSwgJWVjeAorCWxlYQktOCglZWF4KSwgJWVheAorCWxlYQktNCglZWR4KSwgJWVkeAorCXBtdWx1ZHEJJW1tNywgJW1tMQorCW1vdmQJMTIoJWVheCksICVtbTIKKwltb3ZkCTQoJWVkeCksICVtbTUKKwlwbXVsdWRxCSVtbTcsICVtbTIKKwltb3ZkCTE2KCVlYXgpLCAlbW0zCisJcGFkZHEJJW1tMSwgJW1tNQorCW1vdmQJOCglZWR4KSwgJW1tNAorCWptcAlMKDEwKQorCitMKDMpOgltb3ZkCSglZWF4KSwgJW1tMAorCXN1YgkxMiglZXNwKSwgJWVjeAorCWxlYQktNCglZWF4KSwgJWVheAorCXBtdWx1ZHEJJW1tNywgJW1tMAorCW1vdmQJOCglZWF4KSwgJW1tMQorCW1vdmQJKCVlZHgpLCAlbW00CisJcG11bHVkcQklbW03LCAlbW0xCisJbW92ZAkxMiglZWF4KSwgJW1tMgorCXBhZGRxCSVtbTAsICVtbTQKKwltb3ZkCTQoJWVkeCksICVtbTUKKworCUFMSUdOKDE2KQorTCh0b3ApOglwbXVsdWRxCSVtbTcsICVtbTIKKwlwYWRkcQklbW00LCAlbW02CisJbW92ZAkxNiglZWF4KSwgJW1tMworCXBhZGRxCSVtbTEsICVtbTUKKwltb3ZkCTgoJWVkeCksICVtbTQKKwltb3ZkCSVtbTYsIDAoJWVkeCkKKwlwc3JscQkkMzIsICVtbTYKK0woMTApOglwbXVsdWRxCSVtbTcsICVtbTMKKwlwYWRkcQklbW01LCAlbW02CisJbW92ZAkyMCglZWF4KSwgJW1tMAorCXBhZGRxCSVtbTIsICVtbTQKKwltb3ZkCTEyKCVlZHgpLCAlbW01CisJbW92ZAklbW02LCA0KCVlZHgpCisJcHNybHEJJDMyLCAlbW02CitMKDAxKToJcG11bHVkcQklbW03LCAlbW0wCisJcGFkZHEJJW1tNCwgJW1tNgorCW1vdmQJMjQoJWVheCksICVtbTEKKwlwYWRkcQklbW0zLCAlbW01CisJbW92ZAkxNiglZWR4KSwgJW1tNAorCW1vdmQJJW1tNiwgOCglZWR4KQorCXBzcmxxCSQzMiwgJW1tNgorTCgwMCk6CXBtdWx1ZHEJJW1tNywgJW1tMQorCXBhZGRxCSVtbTUsICVtbTYKKwltb3ZkCTI4KCVlYXgpLCAlbW0yCisJcGFkZHEJJW1tMCwgJW1tNAorCW1vdmQJMjAoJWVkeCksICVtbTUKKwltb3ZkCSVtbTYsIDEyKCVlZHgpCisJcHNybHEJJDMyLCAlbW02CisJbGVhCTE2KCVlYXgpLCAlZWF4CisJbGVhCTE2KCVlZHgpLCAlZWR4CisJYWRkCSQ0LCAlZWN4CisJam56CUwodG9wKQorCitMKGVuZCk6CXBtdWx1ZHEJJW1tNywgJW1tMgorCXBhZGRxCSVtbTQsICVtbTYKKwlwYWRkcQklbW0xLCAlbW01CisJbW92ZAk4KCVlZHgpLCAlbW00CisJbW92ZAklbW02LCAwKCVlZHgpCisJcHNybHEJJDMyLCAlbW02CisJcGFkZHEJJW1tNSwgJW1tNgorCXBhZGRxCSVtbTIsICVtbTQKKwltb3ZkCSVtbTYsIDQoJWVkeCkKKwlwc3JscQkkMzIsICVtbTYKKwlwYWRkcQklbW00LCAlbW02CisJbW92ZAklbW02LCA4KCVlZHgpCisJcHNybHEJJDMyLCAlbW02CisJbW92ZAklbW02LCAlZWF4CisJZW1tcworCXJldAorRVBJTE9HVUUoKQorUFJPTE9HVUUobXBuX2FkZG11bF8xYykKKwltb3ZkCTIwKCVlc3ApLCAlbW02CisJam1wCUwoZW50KQorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bTQvc3NlMi9iZGl2X2RibTFjLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW00L3NzZTIvYmRpdl9kYm0xYy5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU0MzAwZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW00L3NzZTIvYmRpdl9kYm0xYy5hc20KQEAgLTAsMCArMSwxNDEgQEAKK2RubCAgSW50ZWwgQXRvbSAgbXBuX2JkaXZfZGJtMS4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQgYW5kIE1hcmNvIEJvZHJhdG8uCisKK2RubCAgQ29weXJpZ2h0IDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkJCSAgICBjeWNsZXMvbGltYgorQwkJCSAgICBjeWNsZXMvbGltYgorQyBQNQkJCQkgLQorQyBQNiBtb2RlbCAwLTgsMTAtMTIJCSAtCitDIFA2IG1vZGVsIDkgIChCYW5pYXMpCQkgOS43NQorQyBQNiBtb2RlbCAxMyAoRG90aGFuKQorQyBQNCBtb2RlbCAwICAoV2lsbGFtZXR0ZSkKK0MgUDQgbW9kZWwgMSAgKD8pCitDIFA0IG1vZGVsIDIgIChOb3J0aHdvb2QpCSA4LjI1CitDIFA0IG1vZGVsIDMgIChQcmVzY290dCkKK0MgUDQgbW9kZWwgNCAgKE5vY29uYSkKK0MgSW50ZWwgQXRvbQkJCSA4CitDIEFNRCBLNgkJCSAtCitDIEFNRCBLNwkJCSAtCitDIEFNRCBLOAorQyBBTUQgSzEwCisKK0MgVE9ETzogVGhpcyBjb2RlIHdhcyBvcHRpbWlzZWQgZm9yIGF0b20tMzIsIGNvbnNpZGVyIG1vdmluZyBpdCBiYWNrIHRvIGF0b20KK0MJZGlyKGF0b20gY3VycmVudGx5IGdyYWJzIHRoaXMgY29kZSksIGFuZCB3cml0ZSBhIDQtd2F5IHZlcnNpb24oN2MvbCkuCisKK2RlZmZyYW1lKFBBUkFNX0NBUlJZLDIwKQorZGVmZnJhbWUoUEFSQU1fTVVMLCAgMTYpCitkZWZmcmFtZShQQVJBTV9TSVpFLCAxMikKK2RlZmZyYW1lKFBBUkFNX1NSQywgIDgpCitkZWZmcmFtZShQQVJBTV9EU1QsICA0KQorCitkbmwgIHJlLXVzZSBwYXJhbWV0ZXIgc3BhY2UKK2RlZmluZShTQVZFX1JQLGBQQVJBTV9NVUwnKQorZGVmaW5lKFNBVkVfVVAsYFBBUkFNX1NJWkUnKQorCitkZWZpbmUoYHJwJywgYCVlZGknKQorZGVmaW5lKGB1cCcsIGAlZXNpJykKK2RlZmluZShgbicsICBgJWVjeCcpCitkZWZpbmUoYHJlZycsIGAlZWR4JykKK2RlZmluZShgY3knLCBgJWVheCcpCUMgY29udGFpbnMgdGhlIHJldHVybiB2YWx1ZQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigxNikKK2RlZmxpdChgRlJBTUUnLDApCisKK1BST0xPR1VFKG1wbl9iZGl2X2RibTFjKQorCW1vdglQQVJBTV9TSVpFLCBuCQlDIHNpemUKKwltb3YJdXAsIFNBVkVfVVAKKwltb3YJUEFSQU1fU1JDLCB1cAorCW1vdmQJUEFSQU1fTVVMLCAlbW03CisJbW92CXJwLCBTQVZFX1JQCisJbW92CVBBUkFNX0RTVCwgcnAKKworCW1vdmQJKHVwKSwgJW1tMAorCXBtdWx1ZHEJJW1tNywgJW1tMAorCXNocgluCisJbW92CVBBUkFNX0NBUlJZLCBjeQorCWp6CUwoZXExKQorCisJbW92ZAk0KHVwKSwgJW1tMQorCWpjCUwob2RkKQorCisJbGVhCTQodXApLCB1cAorCXBtdWx1ZHEJJW1tNywgJW1tMQorCW1vdmQJJW1tMCwgcmVnCisJcHNybHEJJDMyLCAlbW0wCisJc3ViCXJlZywgY3kKKwltb3ZkCSVtbTAsIHJlZworCW1vdnEJJW1tMSwgJW1tMAorCWRlYwluCisJbW92CWN5LCAocnApCisJbGVhCTQocnApLCBycAorCWp6CUwoZW5kKQorCitDCUFMSUdOKDE2KQorTCh0b3ApOgltb3ZkCTQodXApLCAlbW0xCisJc2JiCXJlZywgY3kKK0wob2RkKToJbW92ZAklbW0wLCByZWcKKwlwc3JscQkkMzIsICVtbTAKKwlwbXVsdWRxCSVtbTcsICVtbTEKKwlzdWIJcmVnLCBjeQorCWxlYQk4KHVwKSwgdXAKKwltb3ZkCSVtbTAsIHJlZworCW1vdmQJKHVwKSwgJW1tMAorCW1vdgljeSwgKHJwKQorCXNiYglyZWcsIGN5CisJbW92ZAklbW0xLCByZWcKKwlwc3JscQkkMzIsICVtbTEKKwlzdWIJcmVnLCBjeQorCW1vdmQJJW1tMSwgcmVnCisJcG11bHVkcQklbW03LCAlbW0wCisJZGVjCW4KKwltb3YJY3ksIDQocnApCisJbGVhCTgocnApLCBycAorCWpueglMKHRvcCkKKworTChlbmQpOglzYmIJcmVnLCBjeQorCitMKGVxMSk6CW1vdmQJJW1tMCwgcmVnCisJcHNybHEJJDMyLCAlbW0wCisJbW92CVNBVkVfVVAsIHVwCisJc3ViCXJlZywgY3kKKwltb3ZkCSVtbTAsIHJlZworCWVtbXMKKwltb3YJY3ksIChycCkKKwlzYmIJcmVnLCBjeQorCisJbW92CVNBVkVfUlAsIHJwCisJcmV0CitFUElMT0dVRSgpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW00L3NzZTIvYmRpdl9xXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bTQvc3NlMi9iZGl2X3FfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUwMDhmNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW00L3NzZTIvYmRpdl9xXzEuYXNtCkBAIC0wLDAgKzEsMjM0IEBACitkbmwgIEludGVsIFBlbnRpdW0tNCBtcG5fZGl2ZXhhY3RfMSAtLSBtcG4gYnkgbGltYiBleGFjdCBkaXZpc2lvbi4KKworZG5sICBSZWFycmFuZ2VkIGZyb20gbXBuL3g4Ni9wZW50aXVtNC9zc2UyL2RpdmVfMS5hc20gYnkgTWFyY28gQm9kcmF0by4KKworZG5sICBDb3B5cmlnaHQgMjAwMSwgMjAwMiwgMjAwNywgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MgUDQ6IDE5LjAgY3ljbGVzL2xpbWIKKworQyBQYWlycyBvZiBtb3ZkJ3MgYXJlIHVzZWQgdG8gYXZvaWQgdW5hbGlnbmVkIGxvYWRzLiAgRGVzcGl0ZSB0aGUgbG9hZHMgbm90CitDIGJlaW5nIG9uIHRoZSBkZXBlbmRlbnQgY2hhaW4gYW5kIHRoZXJlIGJlaW5nIHBsZW50eSBvZiBjeWNsZXMgYXZhaWxhYmxlLAorQyB1c2luZyBhbiB1bmFsaWduZWQgbW92cSBvbiBldmVyeSBzZWNvbmQgaXRlcmF0aW9uIG1lYXN1cmVkIGFib3V0IDIzIGMvbC4KK0MKKworZGVmZnJhbWUoUEFSQU1fU0hJRlQsICAyNCkKK2RlZmZyYW1lKFBBUkFNX0lOVkVSU0UsMjApCitkZWZmcmFtZShQQVJBTV9ESVZJU09SLDE2KQorZGVmZnJhbWUoUEFSQU1fU0laRSwgICAxMikKK2RlZmZyYW1lKFBBUkFNX1NSQywgICAgOCkKK2RlZmZyYW1lKFBBUkFNX0RTVCwgICAgNCkKKworCVRFWFQKKworQyBtcF9saW1iX3QKK0MgbXBuX3BpMV9iZGl2X3FfMSAobXBfcHRyIGRzdCwgbXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUsIG1wX2xpbWJfdCBkaXZpc29yLAorQwkJICAgIG1wX2xpbWJfdCBpbnZlcnNlLCBpbnQgc2hpZnQpCisJQUxJR04oMzIpCitQUk9MT0dVRShtcG5fcGkxX2JkaXZfcV8xKQorZGVmbGl0KGBGUkFNRScsMCkKKworCW1vdmwJUEFSQU1fU0laRSwgJWVkeAorCisJbW92bAlQQVJBTV9TUkMsICVlYXgKKworCW1vdmwJUEFSQU1fRElWSVNPUiwgJWVjeAorCisJbW92ZAklZWN4LCAlbW02CisJbW92bAlQQVJBTV9TSElGVCwgJWVjeAorCisJbW92ZAklZWN4LCAlbW03CQlDIHNoaWZ0CisKKwlDCisKKwltb3ZsCVBBUkFNX0lOVkVSU0UsICVlY3gKKwltb3ZkCSVlY3gsICVtbTUJCUMgaW52CisKKwltb3ZsCVBBUkFNX0RTVCwgJWVjeAorCXB4b3IJJW1tMSwgJW1tMQkJQyBpbml0aWFsIGNhcnJ5IGxpbWIKKwlweG9yCSVtbTAsICVtbTAJCUMgaW5pdGlhbCBjYXJyeSBiaXQKKworCXN1YmwJJDEsICVlZHgKKwlqeglMKGRvbmUpCisKKwlwY21wZXFkCSVtbTQsICVtbTQKKwlwc3JscQkkMzIsICVtbTQJCUMgMHgwMDAwMDAwMEZGRkZGRkZGCisKK0MgVGhlIGRlcGVuZGVudCBjaGFpbiBoZXJlIGlzIGFzIGZvbGxvd3MuCitDCitDCQkJCQlsYXRlbmN5CitDCXBzdWJxCSBzID0gKHNyYy1jYml0KSAtIGNsaW1iCSAgIDIKK0MJcG11bHVkcQkgcSA9IHMqaW52ZXJzZQkJICAgOAorQwlwbXVsdWRxCSBwcm9kID0gcSpkaXZpc29yCSAgIDgKK0MJcHNybHEJIGNsaW1iID0gaGlnaChwcm9kKQkgICAyCitDCQkJCQkgIC0tCitDCQkJCQkgIDIwCitDCitDIFlldCB0aGUgbG9vcCBtZWFzdXJlcyAxOS4wIGMvbCwgc28gb2J2aW91c2x5IHRoZXJlJ3Mgc29tZXRoaW5nIGdhaW5lZAorQyB0aGVyZSBvdmVyIGEgc3RyYWlnaHQgcmVhZGluZyBvZiB0aGUgY2hpcCBkb2N1bWVudGF0aW9uLgorCitMKHRvcCk6CisJQyBlYXgJc3JjLCBpbmNyZW1lbnRpbmcKKwlDIGVieAorCUMgZWN4CWRzdCwgaW5jcmVtZW50aW5nCisJQyBlZHgJY291bnRlciwgc2l6ZS0xIGl0ZXJhdGlvbnMKKwlDCisJQyBtbTAJY2FycnkgYml0CisJQyBtbTEJY2FycnkgbGltYgorCUMgbW00CTB4MDAwMDAwMDBGRkZGRkZGRgorCUMgbW01CWludmVyc2UKKwlDIG1tNglkaXZpc29yCisJQyBtbTcJc2hpZnQKKworCW1vdmQJKCVlYXgpLCAlbW0yCisJbW92ZAk0KCVlYXgpLCAlbW0zCisJYWRkbAkkNCwgJWVheAorCXB1bnBja2xkcSAlbW0zLCAlbW0yCisKKwlwc3JscQklbW03LCAlbW0yCisJcGFuZAklbW00LCAlbW0yCQlDIHNyYworCXBzdWJxCSVtbTAsICVtbTIJCUMgc3JjIC0gY2JpdAorCisJcHN1YnEJJW1tMSwgJW1tMgkJQyBzcmMgLSBjYml0IC0gY2xpbWIKKwltb3ZxCSVtbTIsICVtbTAKKwlwc3JscQkkNjMsICVtbTAJCUMgbmV3IGNiaXQKKworCXBtdWx1ZHEJJW1tNSwgJW1tMgkJQyBzKmludmVyc2UKKwltb3ZkCSVtbTIsICglZWN4KQkJQyBxCisJYWRkbAkkNCwgJWVjeAorCisJbW92cQklbW02LCAlbW0xCisJcG11bHVkcQklbW0yLCAlbW0xCQlDIHEqZGl2aXNvcgorCXBzcmxxCSQzMiwgJW1tMQkJQyBuZXcgY2xpbWIKKworTChlbnRyeSk6CisJc3VibAkkMSwgJWVkeAorCWpueglMKHRvcCkKKworTChkb25lKToKKwltb3ZkCSglZWF4KSwgJW1tMgorCXBzcmxxCSVtbTcsICVtbTIJCUMgc3JjCisJcHN1YnEJJW1tMCwgJW1tMgkJQyBzcmMgLSBjYml0CisKKwlwc3VicQklbW0xLCAlbW0yCQlDIHNyYyAtIGNiaXQgLSBjbGltYgorCisJcG11bHVkcQklbW01LCAlbW0yCQlDIHMqaW52ZXJzZQorCW1vdmQJJW1tMiwgKCVlY3gpCQlDIHEKKworCWVtbXMKKwlyZXQKKworRVBJTE9HVUUoKQorCisJQUxJR04oMTYpCitDIG1wX2xpbWJfdCBtcG5fYmRpdl9xXzEgKG1wX3B0ciBkc3QsIG1wX3NyY3B0ciBzcmMsIG1wX3NpemVfdCBzaXplLAorQyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wX2xpbWJfdCBkaXZpc29yKTsKK0MKK1BST0xPR1VFKG1wbl9iZGl2X3FfMSkKK2RlZmxpdChgRlJBTUUnLDApCisKKwltb3ZsCVBBUkFNX1NJWkUsICVlZHgKKworCW1vdmwJUEFSQU1fRElWSVNPUiwgJWVjeAorCisJQyBlYXgJc3JjCisJQyBlYngKKwlDIGVjeAlkaXZpc29yCisJQyBlZHgJc2l6ZS0xCisKKwltb3ZsCSVlY3gsICVlYXgKKwlic2ZsCSVlY3gsICVlY3gJCUMgdHJhaWxpbmcgdHdvcworCisJc2hybAklY2wsICVlYXgJCUMgZCA9IGRpdmlzb3Igd2l0aG91dCB0d29zCisJbW92ZAklZWF4LCAlbW02CisJbW92ZAklZWN4LCAlbW03CQlDIHNoaWZ0CisKKwlzaHJsCSVlYXgJCQlDIGQvMgorCisJYW5kbAkkMTI3LCAlZWF4CQlDIGQvMiwgNyBiaXRzCisKK2lmZGVmKGBQSUMnLGAKKwlMRUEoCWJpbnZlcnRfbGltYl90YWJsZSwgJWVjeCkKKwltb3Z6YmwJKCVlYXgsJWVjeCksICVlYXgJCUMgaW52IDggYml0cworJyxgCisJbW92emJsCWJpbnZlcnRfbGltYl90YWJsZSglZWF4KSwgJWVheAlDIGludiA4IGJpdHMKKycpCisKKwlDCisKKwltb3ZkCSVlYXgsICVtbTUJCUMgaW52CisKKwltb3ZkCSVlYXgsICVtbTAJCUMgaW52CisKKwlwbXVsdWRxCSVtbTUsICVtbTUJCUMgaW52KmludgorCisJQworCisJcG11bHVkcQklbW02LCAlbW01CQlDIGludippbnYqZAorCXBhZGRkCSVtbTAsICVtbTAJCUMgMippbnYKKworCUMKKworCXBzdWJkCSVtbTUsICVtbTAJCUMgaW52ID0gMippbnYgLSBpbnYqaW52KmQKKwlweG9yCSVtbTUsICVtbTUKKworCXBhZGRkCSVtbTAsICVtbTUKKwlwbXVsdWRxCSVtbTAsICVtbTAJCUMgaW52KmludgorCisJcGNtcGVxZAklbW00LCAlbW00CisJcHNybHEJJDMyLCAlbW00CQlDIDB4MDAwMDAwMDBGRkZGRkZGRgorCisJQworCisJcG11bHVkcQklbW02LCAlbW0wCQlDIGludippbnYqZAorCXBhZGRkCSVtbTUsICVtbTUJCUMgMippbnYKKworCW1vdmwJUEFSQU1fU1JDLCAlZWF4CisJbW92bAlQQVJBTV9EU1QsICVlY3gKKwlweG9yCSVtbTEsICVtbTEJCUMgaW5pdGlhbCBjYXJyeSBsaW1iCisKKwlDCisKKwlwc3ViZAklbW0wLCAlbW01CQlDIGludiA9IDIqaW52IC0gaW52KmludipkCisKKwlBU1NFUlQoZSxgCUMgZXhwZWN0IGQqaW52ID09IDEgbW9kIDJeR01QX0xJTUJfQklUUworCXB1c2hsCSVlYXgJRlJBTUVfcHVzaGwoKQorCW1vdnEJJW1tNiwgJW1tMAorCXBtdWx1ZHEJJW1tNSwgJW1tMAorCW1vdmQJJW1tMCwgJWVheAorCWNtcGwJJDEsICVlYXgKKwlwb3BsCSVlYXgJRlJBTUVfcG9wbCgpJykKKworCXB4b3IJJW1tMCwgJW1tMAkJQyBpbml0aWFsIGNhcnJ5IGJpdAorCWptcAlMKGVudHJ5KQorCitFUElMT0dVRSgpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW00L3NzZTIvY25kX2FkZF9uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW00L3NzZTIvY25kX2FkZF9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2YzNDc0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bTQvc3NlMi9jbmRfYWRkX24uYXNtCkBAIC0wLDAgKzEsOTUgQEAKK2RubCAgSW50ZWwgUGVudGl1bS00IG1wbl9jbmRfYWRkX24gLS0gbXBuIGFkZGl0aW9uLgorCitkbmwgIENvcHlyaWdodCAyMDAxLCAyMDAyLCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQwkJCSAgICBjeWNsZXMvbGltYgorQyBQNiBtb2RlbCAwLTgsMTAtMTIJCSAtCitDIFA2IG1vZGVsIDkgICAoQmFuaWFzKQkJID8KK0MgUDYgbW9kZWwgMTMgIChEb3RoYW4pCQkgNC42NworQyBQNCBtb2RlbCAwLTEgKFdpbGxhbWV0dGUpCSA/CitDIFA0IG1vZGVsIDIgICAoTm9ydGh3b29kKQkgNQorQyBQNCBtb2RlbCAzLTQgKFByZXNjb3R0KQkgNS4yNQorCitkZWZmcmFtZShQQVJBTV9TSVpFLCAyMCkKK2RlZmZyYW1lKFBBUkFNX1NSQzIsIDE2KQorZGVmZnJhbWUoUEFSQU1fU1JDMSwgMTIpCitkZWZmcmFtZShQQVJBTV9EU1QsICA4KQorZGVmZnJhbWUoUEFSQU1fQ05ELCAgNCkKKworZG5sICByZS11c2UgcGFyYW1ldGVyIHNwYWNlCitkZWZpbmUoU0FWRV9FQlgsYFBBUkFNX1NSQzEnKQorCitkZWZpbmUoYGNuZCcsIGAlbW0zJykKKworCVRFWFQKKwlBTElHTig4KQorCisJQUxJR04oOCkKK1BST0xPR1VFKG1wbl9jbmRfYWRkX24pCitkZWZsaXQoYEZSQU1FJywwKQorCXB4b3IJJW1tMCwgJW1tMAorCisJbW92CVBBUkFNX0NORCwgJWVheAorCW5lZwklZWF4CisJc2JiCSVlYXgsICVlYXgKKwltb3ZkCSVlYXgsIGNuZAorCisJbW92CVBBUkFNX1NSQzEsICVlYXgKKwltb3YJJWVieCwgU0FWRV9FQlgKKwltb3YJUEFSQU1fU1JDMiwgJWVieAorCW1vdglQQVJBTV9EU1QsICVlZHgKKwltb3YJUEFSQU1fU0laRSwgJWVjeAorCisJbGVhCSglZWF4LCVlY3gsNCksICVlYXgJQyBzcmMxIGVuZAorCWxlYQkoJWVieCwlZWN4LDQpLCAlZWJ4CUMgc3JjMiBlbmQKKwlsZWEJKCVlZHgsJWVjeCw0KSwgJWVkeAlDIGRzdCBlbmQKKwluZWcJJWVjeAkJCUMgLXNpemUKKworTCh0b3ApOgltb3ZkCSglZWJ4LCVlY3gsNCksICVtbTIKKwltb3ZkCSglZWF4LCVlY3gsNCksICVtbTEKKwlwYW5kCWNuZCwgJW1tMgorCXBhZGRxCSVtbTIsICVtbTEKKworCXBhZGRxCSVtbTEsICVtbTAKKwltb3ZkCSVtbTAsICglZWR4LCVlY3gsNCkKKworCXBzcmxxCSQzMiwgJW1tMAorCisJYWRkCSQxLCAlZWN4CisJam56CUwodG9wKQorCisJbW92ZAklbW0wLCAlZWF4CisJbW92CVNBVkVfRUJYLCAlZWJ4CisJZW1tcworCXJldAorCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtNC9zc2UyL2NuZF9zdWJfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtNC9zc2UyL2NuZF9zdWJfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM5YTIzZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW00L3NzZTIvY25kX3N1Yl9uLmFzbQpAQCAtMCwwICsxLDExNCBAQAorZG5sICBJbnRlbCBQZW50aXVtLTQgbXBuX2NuZF9zdWJfbiAtLSBtcG4gc3VidHJhY3Rpb24uCisKK2RubCAgQ29weXJpZ2h0IDIwMDEsIDIwMDIsIDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDCQkJICAgIGN5Y2xlcy9saW1iCitDIFA2IG1vZGVsIDAtOCwxMC0xMgkJIC0KK0MgUDYgbW9kZWwgOSAgIChCYW5pYXMpCQkgPworQyBQNiBtb2RlbCAxMyAgKERvdGhhbikJCSA0LjY3CitDIFA0IG1vZGVsIDAtMSAoV2lsbGFtZXR0ZSkJID8KK0MgUDQgbW9kZWwgMiAgIChOb3J0aHdvb2QpCSA1CitDIFA0IG1vZGVsIDMtNCAoUHJlc2NvdHQpCSA1LjI1CisKK2RlZmZyYW1lKFBBUkFNX1NJWkUsIDIwKQorZGVmZnJhbWUoUEFSQU1fU1JDMiwgMTYpCitkZWZmcmFtZShQQVJBTV9TUkMxLCAxMikKK2RlZmZyYW1lKFBBUkFNX0RTVCwgIDgpCitkZWZmcmFtZShQQVJBTV9DTkQsICA0KQorCitkbmwgIHJlLXVzZSBwYXJhbWV0ZXIgc3BhY2UKK2RlZmluZShTQVZFX0VCWCxgUEFSQU1fU1JDMScpCisKK2RlZmluZShgY25kJywgYCVtbTMnKQorCisJVEVYVAorCUFMSUdOKDgpCisKKwlBTElHTig4KQorUFJPTE9HVUUobXBuX2NuZF9zdWJfbikKK2RlZmxpdChgRlJBTUUnLDApCisJcHhvcgklbW0wLCAlbW0wCisKKwltb3YJUEFSQU1fQ05ELCAlZWF4CisJbmVnCSVlYXgKKwlzYmIJJWVheCwgJWVheAorCW1vdmQJJWVheCwgY25kCisKKwltb3YJUEFSQU1fU1JDMSwgJWVheAorCW1vdgklZWJ4LCBTQVZFX0VCWAorCW1vdglQQVJBTV9TUkMyLCAlZWJ4CisJbW92CVBBUkFNX0RTVCwgJWVkeAorCW1vdglQQVJBTV9TSVpFLCAlZWN4CisKKwlsZWEJKCVlYXgsJWVjeCw0KSwgJWVheAlDIHNyYzEgZW5kCisJbGVhCSglZWJ4LCVlY3gsNCksICVlYngJQyBzcmMyIGVuZAorCWxlYQkoJWVkeCwlZWN4LDQpLCAlZWR4CUMgZHN0IGVuZAorCW5lZwklZWN4CQkJQyAtc2l6ZQorCitMKHRvcCk6CW1vdmQJKCVlYngsJWVjeCw0KSwgJW1tMgorCW1vdmQJKCVlYXgsJWVjeCw0KSwgJW1tMQorCXBhbmQJY25kLCAlbW0yCisJcHN1YnEJJW1tMiwgJW1tMQorCisJcHN1YnEJJW1tMCwgJW1tMQorCW1vdmQJJW1tMSwgKCVlZHgsJWVjeCw0KQorCisJcHNybHEJJDYzLCAlbW0xCisKKwlhZGQJJDEsICVlY3gKKwlqeglMKGRvbmVfbW0xKQorCisJbW92ZAkoJWVieCwlZWN4LDQpLCAlbW0yCisJbW92ZAkoJWVheCwlZWN4LDQpLCAlbW0wCisJcGFuZAljbmQsICVtbTIKKwlwc3VicQklbW0yLCAlbW0wCisKKwlwc3VicQklbW0xLCAlbW0wCisJbW92ZAklbW0wLCAoJWVkeCwlZWN4LDQpCisKKwlwc3JscQkkNjMsICVtbTAKKworCWFkZAkkMSwgJWVjeAorCWpueglMKHRvcCkKKworCW1vdmQJJW1tMCwgJWVheAorCW1vdglTQVZFX0VCWCwgJWVieAorCWVtbXMKKwlyZXQKKworTChkb25lX21tMSk6CisJbW92ZAklbW0xLCAlZWF4CisJbW92CVNBVkVfRUJYLCAlZWJ4CisJZW1tcworCXJldAorCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtNC9zc2UyL2RpdmVfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtNC9zc2UyL2RpdmVfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNlZWY1YgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW00L3NzZTIvZGl2ZV8xLmFzbQpAQCAtMCwwICsxLDIxNiBAQAorZG5sICBJbnRlbCBQZW50aXVtLTQgbXBuX2RpdmV4YWN0XzEgLS0gbXBuIGJ5IGxpbWIgZXhhY3QgZGl2aXNpb24uCisKK2RubCAgQ29weXJpZ2h0IDIwMDEsIDIwMDIsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDIFA0OiAxOS4wIGN5Y2xlcy9saW1iCisKKworQyB2b2lkIG1wbl9kaXZleGFjdF8xIChtcF9wdHIgZHN0LCBtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSwKK0MgICAgICAgICAgICAgICAgICAgICAgbXBfbGltYl90IGRpdmlzb3IpOworQworQyBQYWlycyBvZiBtb3ZkJ3MgYXJlIHVzZWQgdG8gYXZvaWQgdW5hbGlnbmVkIGxvYWRzLiAgRGVzcGl0ZSB0aGUgbG9hZHMgbm90CitDIGJlaW5nIG9uIHRoZSBkZXBlbmRlbnQgY2hhaW4gYW5kIHRoZXJlIGJlaW5nIHBsZW50eSBvZiBjeWNsZXMgYXZhaWxhYmxlLAorQyB1c2luZyBhbiB1bmFsaWduZWQgbW92cSBvbiBldmVyeSBzZWNvbmQgaXRlcmF0aW9uIG1lYXN1cmVkIGFib3V0IDIzIGMvbC4KK0MKK0MgVXNpbmcgZGl2bCBmb3Igc2l6ZT09MSBzZWVtcyBhIHRvdWNoIHF1aWNrZXIgdGhhbiBtdWwtYnktaW52ZXJzZS4gIFRoZSBtdWwKK0Mgd2lsbCBiZSBhYm91dCA5KzIqNCsyKjIrMTAqNCsxOSsxMiA9IDkyIGN5Y2xlcyBsYXRlbmN5LCB0aG91Z2ggc29tZSBvZgorQyB0aGF0IG1pZ2h0IGJlIGhpZGRlbiBieSBvdXQtb2Ytb3JkZXIgZXhlY3V0aW9uLCB3aGVyZWFzIGRpdmwgaXMgYXJvdW5kIDYwLgorQyBBdCBzaXplPT0yIGFuIGV4dHJhIDE5IGZvciB0aGUgbXVsIHZlcnN1cyA2MCBmb3IgdGhlIGRpdmwgd2lsbCBzZWUgdGhlIG11bAorQyBmYXN0ZXIuCisKK2RlZmZyYW1lKFBBUkFNX0RJVklTT1IsMTYpCitkZWZmcmFtZShQQVJBTV9TSVpFLCAgIDEyKQorZGVmZnJhbWUoUEFSQU1fU1JDLCAgICA4KQorZGVmZnJhbWUoUEFSQU1fRFNULCAgICA0KQorCisJVEVYVAorCisJQUxJR04oMTYpCitQUk9MT0dVRShtcG5fZGl2ZXhhY3RfMSkKK2RlZmxpdChgRlJBTUUnLDApCisKKwltb3ZsCVBBUkFNX1NJWkUsICVlZHgKKworCW1vdmwJUEFSQU1fU1JDLCAlZWF4CisKKwltb3ZsCVBBUkFNX0RJVklTT1IsICVlY3gKKwlzdWJsCSQxLCAlZWR4CisJam56CUwodHdvX29yX21vcmUpCisKKwltb3ZsCSglZWF4KSwgJWVheAorCXhvcmwJJWVkeCwgJWVkeAorCisJZGl2bAklZWN4CisJbW92bAlQQVJBTV9EU1QsICVlY3gKKworCW1vdmwJJWVheCwgKCVlY3gpCisJcmV0CisKKworTCh0d29fb3JfbW9yZSk6CisJQyBlYXgJc3JjCisJQyBlYngKKwlDIGVjeAlkaXZpc29yCisJQyBlZHgJc2l6ZS0xCisKKwltb3ZsCSVlY3gsICVlYXgKKwlic2ZsCSVlY3gsICVlY3gJCUMgdHJhaWxpbmcgdHdvcworCisJc2hybAklY2wsICVlYXgJCUMgZCA9IGRpdmlzb3Igd2l0aG91dCB0d29zCisJbW92ZAklZWF4LCAlbW02CisJbW92ZAklZWN4LCAlbW03CQlDIHNoaWZ0CisKKwlzaHJsCSVlYXgJCQlDIGQvMgorCisJYW5kbAkkMTI3LCAlZWF4CQlDIGQvMiwgNyBiaXRzCisKK2lmZGVmKGBQSUMnLGAKKwlMRUEoCWJpbnZlcnRfbGltYl90YWJsZSwgJWVjeCkKKwltb3Z6YmwJKCVlYXgsJWVjeCksICVlYXgJCUMgaW52IDggYml0cworJyxgCisJbW92emJsCWJpbnZlcnRfbGltYl90YWJsZSglZWF4KSwgJWVheAlDIGludiA4IGJpdHMKKycpCisKKwlDCisKKwltb3ZkCSVlYXgsICVtbTUJCUMgaW52CisKKwltb3ZkCSVlYXgsICVtbTAJCUMgaW52CisKKwlwbXVsdWRxCSVtbTUsICVtbTUJCUMgaW52KmludgorCisJQworCisJcG11bHVkcQklbW02LCAlbW01CQlDIGludippbnYqZAorCXBhZGRkCSVtbTAsICVtbTAJCUMgMippbnYKKworCUMKKworCXBzdWJkCSVtbTUsICVtbTAJCUMgaW52ID0gMippbnYgLSBpbnYqaW52KmQKKwlweG9yCSVtbTUsICVtbTUKKworCXBhZGRkCSVtbTAsICVtbTUKKwlwbXVsdWRxCSVtbTAsICVtbTAJCUMgaW52KmludgorCisJcGNtcGVxZAklbW00LCAlbW00CisJcHNybHEJJDMyLCAlbW00CQlDIDB4MDAwMDAwMDBGRkZGRkZGRgorCisJQworCisJcG11bHVkcQklbW02LCAlbW0wCQlDIGludippbnYqZAorCXBhZGRkCSVtbTUsICVtbTUJCUMgMippbnYKKworCW1vdmwJUEFSQU1fU1JDLCAlZWF4CisJbW92bAlQQVJBTV9EU1QsICVlY3gKKwlweG9yCSVtbTEsICVtbTEJCUMgaW5pdGlhbCBjYXJyeSBsaW1iCisKKwlDCisKKwlwc3ViZAklbW0wLCAlbW01CQlDIGludiA9IDIqaW52IC0gaW52KmludipkCisKKwlBU1NFUlQoZSxgCUMgZXhwZWN0IGQqaW52ID09IDEgbW9kIDJeR01QX0xJTUJfQklUUworCXB1c2hsCSVlYXgJRlJBTUVfcHVzaGwoKQorCW1vdnEJJW1tNiwgJW1tMAorCXBtdWx1ZHEJJW1tNSwgJW1tMAorCW1vdmQJJW1tMCwgJWVheAorCWNtcGwJJDEsICVlYXgKKwlwb3BsCSVlYXgJRlJBTUVfcG9wbCgpJykKKworCXB4b3IJJW1tMCwgJW1tMAkJQyBpbml0aWFsIGNhcnJ5IGJpdAorCisKK0MgVGhlIGRlcGVuZGVudCBjaGFpbiBoZXJlIGlzIGFzIGZvbGxvd3MuCitDCitDCQkJCQlsYXRlbmN5CitDCXBzdWJxCSBzID0gKHNyYy1jYml0KSAtIGNsaW1iCSAgIDIKK0MJcG11bHVkcQkgcSA9IHMqaW52ZXJzZQkJICAgOAorQwlwbXVsdWRxCSBwcm9kID0gcSpkaXZpc29yCSAgIDgKK0MJcHNybHEJIGNsaW1iID0gaGlnaChwcm9kKQkgICAyCitDCQkJCQkgIC0tCitDCQkJCQkgIDIwCitDCitDIFlldCB0aGUgbG9vcCBtZWFzdXJlcyAxOS4wIGMvbCwgc28gb2J2aW91c2x5IHRoZXJlJ3Mgc29tZXRoaW5nIGdhaW5lZAorQyB0aGVyZSBvdmVyIGEgc3RyYWlnaHQgcmVhZGluZyBvZiB0aGUgY2hpcCBkb2N1bWVudGF0aW9uLgorCitMKHRvcCk6CisJQyBlYXgJc3JjLCBpbmNyZW1lbnRpbmcKKwlDIGVieAorCUMgZWN4CWRzdCwgaW5jcmVtZW50aW5nCisJQyBlZHgJY291bnRlciwgc2l6ZS0xIGl0ZXJhdGlvbnMKKwlDCisJQyBtbTAJY2FycnkgYml0CisJQyBtbTEJY2FycnkgbGltYgorCUMgbW00CTB4MDAwMDAwMDBGRkZGRkZGRgorCUMgbW01CWludmVyc2UKKwlDIG1tNglkaXZpc29yCisJQyBtbTcJc2hpZnQKKworCW1vdmQJKCVlYXgpLCAlbW0yCisJbW92ZAk0KCVlYXgpLCAlbW0zCisJYWRkbAkkNCwgJWVheAorCXB1bnBja2xkcSAlbW0zLCAlbW0yCisKKwlwc3JscQklbW03LCAlbW0yCisJcGFuZAklbW00LCAlbW0yCQlDIHNyYworCXBzdWJxCSVtbTAsICVtbTIJCUMgc3JjIC0gY2JpdAorCisJcHN1YnEJJW1tMSwgJW1tMgkJQyBzcmMgLSBjYml0IC0gY2xpbWIKKwltb3ZxCSVtbTIsICVtbTAKKwlwc3JscQkkNjMsICVtbTAJCUMgbmV3IGNiaXQKKworCXBtdWx1ZHEJJW1tNSwgJW1tMgkJQyBzKmludmVyc2UKKwltb3ZkCSVtbTIsICglZWN4KQkJQyBxCisJYWRkbAkkNCwgJWVjeAorCisJbW92cQklbW02LCAlbW0xCisJcG11bHVkcQklbW0yLCAlbW0xCQlDIHEqZGl2aXNvcgorCXBzcmxxCSQzMiwgJW1tMQkJQyBuZXcgY2xpbWIKKworCXN1YmwJJDEsICVlZHgKKwlqbnoJTCh0b3ApCisKKworTChkb25lKToKKwltb3ZkCSglZWF4KSwgJW1tMgorCXBzcmxxCSVtbTcsICVtbTIJCUMgc3JjCisJcHN1YnEJJW1tMCwgJW1tMgkJQyBzcmMgLSBjYml0CisKKwlwc3VicQklbW0xLCAlbW0yCQlDIHNyYyAtIGNiaXQgLSBjbGltYgorCisJcG11bHVkcQklbW01LCAlbW0yCQlDIHMqaW52ZXJzZQorCW1vdmQJJW1tMiwgKCVlY3gpCQlDIHEKKworCWVtbXMKKwlyZXQKKworRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtNC9zc2UyL2RpdnJlbV8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW00L3NzZTIvZGl2cmVtXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNDZmYWIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtNC9zc2UyL2RpdnJlbV8xLmFzbQpAQCAtMCwwICsxLDY0NSBAQAorZG5sICBJbnRlbCBQZW50aXVtLTQgbXBuX2RpdnJlbV8xIC0tIG1wbiBieSBsaW1iIGRpdmlzaW9uLgorCitkbmwgIENvcHlyaWdodCAxOTk5LTIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDIFA0OiAzMiBjeWNsZXMvbGltYiBpbnRlZ2VyIHBhcnQsIDMwIGN5Y2xlcy9saW1iIGZyYWN0aW9uIHBhcnQuCisKKworQyBtcF9saW1iX3QgbXBuX2RpdnJlbV8xIChtcF9wdHIgZHN0LCBtcF9zaXplX3QgeHNpemUsCitDICAgICAgICAgICAgICAgICAgICAgICAgIG1wX3NyY3B0ciBzcmMsIG1wX3NpemVfdCBzaXplLAorQyAgICAgICAgICAgICAgICAgICAgICAgICBtcF9saW1iX3QgZGl2aXNvcik7CitDIG1wX2xpbWJfdCBtcG5fZGl2cmVtXzFjIChtcF9wdHIgZHN0LCBtcF9zaXplX3QgeHNpemUsCitDICAgICAgICAgICAgICAgICAgICAgICAgICBtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSwKK0MgICAgICAgICAgICAgICAgICAgICAgICAgIG1wX2xpbWJfdCBkaXZpc29yLCBtcF9saW1iX3QgY2FycnkpOworQyBtcF9saW1iX3QgbXBuX3ByZWludl9kaXZyZW1fMSAobXBfcHRyIGRzdCwgbXBfc2l6ZV90IHhzaXplLAorQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBfc3JjcHRyIHNyYywgbXBfc2l6ZV90IHNpemUsCitDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcF9saW1iX3QgZGl2aXNvciwgbXBfbGltYl90IGludmVyc2UsCitDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaGlmdCk7CitDCitDIEFsZ29yaXRobToKK0MKK0MgVGhlIG1ldGhvZCBhbmQgbm9tZW5jbGF0dXJlIGZvbGxvdyBwYXJ0IDggb2YgIkRpdmlzaW9uIGJ5IEludmFyaWFudAorQyBJbnRlZ2VycyB1c2luZyBNdWx0aXBsaWNhdGlvbiIgYnkgR3Jhbmx1bmQgYW5kIE1vbnRnb21lcnksIHJlZmVyZW5jZSBpbgorQyBnbXAudGV4aS4KK0MKK0MgIm0iIGlzIHdyaXR0ZW4gZm9yIHdoYXQgaXMgbScgaW4gdGhlIHBhcGVyLCBhbmQgImQiIGZvciBkX25vcm0sIHdoaWNoCitDIHdvbid0IGNhdXNlIGFueSBjb25mdXNpb24gc2luY2UgaXQncyBvbmx5IHRoZSBub3JtYWxpemVkIGRpdmlzb3IgdGhhdCdzIG9mCitDIGFueSB1c2UgaW4gdGhlIGNvZGUuICAiYiIgaXMgd3JpdHRlbiBmb3IgMl5OLCB0aGUgc2l6ZSBvZiBhIGxpbWIsIE4gYmVpbmcKK0MgMzIgaGVyZS4KK0MKK0MgVGhlIHN0ZXAgInNkd29yZCBkciA9IG4gLSAyXk4qZCArICgyXk4tMS1xMSkgKiBkIiBpcyBpbnN0ZWFkIGRvbmUgYXMKK0MgIm4tZCAtIHExKmQiLiAgVGhpcyByZWFycmFuZ2VtZW50IGdpdmVzIHRoZSBzYW1lIHR3by1saW1iIGFuc3dlciBidXQgbGV0cworQyB1cyBoYXZlIGp1c3QgYSBwc3VicSBvbiB0aGUgZGVwZW5kZW50IGNoYWluLgorQworQyBGb3IgcmVmZXJlbmNlLCB0aGUgd2F5IHRoZSBrNyBjb2RlIHVzZXMgIm4tKHExKzEpKmQiIHdvdWxkIG5vdCBzdWl0IGhlcmUsCitDIGRldGVjdGluZyBhbiBvdmVyZmxvdyBvZiBxMSsxIHdoZW4gcTE9MHhGRkZGRkZGRiB3b3VsZCBjb3N0IHRvbyBtdWNoLgorQworQyBOb3RlczoKK0MKK0MgbXBuX2RpdnJlbV8xIGFuZCBtcG5fcHJlaW52X2RpdnJlbV8xIGF2b2lkIG9uZSBkaXZpc2lvbiBpZiB0aGUgc3JjIGhpZ2gKK0MgbGltYiBpcyBsZXNzIHRoYW4gdGhlIGRpdmlzb3IuICBtcG5fZGl2cmVtXzFjIGRvZXNuJ3QgY2hlY2sgZm9yIGEgemVybworQyBjYXJyeSwgc2luY2UgaW4gbm9ybWFsIGNpcmN1bXN0YW5jZXMgdGhhdCB3aWxsIGJlIGEgdmVyeSByYXJlIGV2ZW50LgorQworQyBUaGUgdGVzdCBmb3Igc2tpcHBpbmcgYSBkaXZpc2lvbiBpcyBicmFuY2ggZnJlZSAob25jZSBzaXplPj0xIGlzIHRlc3RlZCkuCitDIFRoZSBzdG9yZSB0byB0aGUgZGVzdGluYXRpb24gaGlnaCBsaW1iIGlzIDAgd2hlbiBhIGRpdmlkZSBpcyBza2lwcGVkLCBvcgorQyBpZiBpdCdzIG5vdCBza2lwcGVkIHRoZW4gYSBjb3B5IG9mIHRoZSBzcmMgaGlnaCBsaW1iIGlzIHN0b3JlZC4gIFRoZQorQyBsYXR0ZXIgaXMgaW4gY2FzZSBzcmM9PWRzdC4KK0MKK0MgVGhlcmUncyBhIHNtYWxsIGJpYXMgdG93YXJkcyBleHBlY3RpbmcgeHNpemU9PTAsIGJ5IGhhdmluZyBjb2RlIGZvcgorQyB4c2l6ZT09MCBpbiBhIHN0cmFpZ2h0IGxpbmUgYW5kIHhzaXplIT0wIHVuZGVyIGZvcndhcmQganVtcHMuCitDCitDIEVuaGFuY2VtZW50czoKK0MKK0MgVGhlIGxvb3AgbWVhc3VyZXMgMzIgY3ljbGVzLCBidXQgdGhlIGRlcGVuZGVudCBjaGFpbiB3b3VsZCBzdWdnZXN0IGl0CitDIGNvdWxkIGJlIGRvbmUgd2l0aCAzMC4gIE5vdCBzdXJlIHdoZXJlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRoZSBleHRyYXMuCitDCitDIEFsdGVybmF0aXZlczoKK0MKK0MgSWYgdGhlIGRpdmlzb3IgaXMgbm9ybWFsaXplZCAoaGlnaCBiaXQgc2V0KSB0aGVuIGEgZGl2aXNpb24gc3RlcCBjYW4KK0MgYWx3YXlzIGJlIHNraXBwZWQsIHNpbmNlIHRoZSBoaWdoIGRlc3RpbmF0aW9uIGxpbWIgaXMgYWx3YXlzIDAgb3IgMSBpbgorQyB0aGF0IGNhc2UuICBJdCBkb2Vzbid0IHNlZW0gd29ydGggY2hlY2tpbmcgZm9yIHRoaXMgdGhvdWdoLCBzaW5jZSBpdAorQyBwcm9iYWJseSBvY2N1cnMgaW5mcmVxdWVudGx5LgorCisKK2RubCAgTVVMX1RIUkVTSE9MRCBpcyB0aGUgdmFsdWUgb2YgeHNpemUrc2l6ZSBhdCB3aGljaCB0aGUgbXVsdGlwbHkgYnkKK2RubCAgaW52ZXJzZSBtZXRob2QgaXMgdXNlZCwgcmF0aGVyIHRoYW4gcGxhaW4gImRpdmwicy4gIE1pbmltdW0gdmFsdWUgMS4KK2RubAorZG5sICBUaGUgaW52ZXJzZSB0YWtlcyBhYm91dCA4MC05MCBjeWNsZXMgdG8gY2FsY3VsYXRlLCBidXQgYWZ0ZXIgdGhhdCB0aGUKK2RubCAgbXVsdGlwbHkgaXMgMzIgYy9sIHZlcnN1cyBkaXZpc2lvbiBhdCBhYm91dCA1OCBjL2wuCitkbmwKK2RubCAgQXQgNCBsaW1icyB0aGUgZGl2IGlzIGEgdG91Y2ggZmFzdGVyIHRoYW4gdGhlIG11bCAoYW5kIG9mIGNvdXJzZQorZG5sICBzaW1wbGVyKSwgc28gc3RhcnQgdGhlIG11bCBmcm9tIDUgbGltYnMuCisKK2RlZmxpdChNVUxfVEhSRVNIT0xELCA1KQorCisKK2RlZmZyYW1lKFBBUkFNX1BSRUlOVl9TSElGVCwgICAyOCkgIGRubCBtcG5fcHJlaW52X2RpdnJlbV8xCitkZWZmcmFtZShQQVJBTV9QUkVJTlZfSU5WRVJTRSwgMjQpICBkbmwgbXBuX3ByZWludl9kaXZyZW1fMQorZGVmZnJhbWUoUEFSQU1fQ0FSUlksICAyNCkgICAgICAgICAgZG5sIG1wbl9kaXZyZW1fMWMKK2RlZmZyYW1lKFBBUkFNX0RJVklTT1IsMjApCitkZWZmcmFtZShQQVJBTV9TSVpFLCAgIDE2KQorZGVmZnJhbWUoUEFSQU1fU1JDLCAgICAxMikKK2RlZmZyYW1lKFBBUkFNX1hTSVpFLCAgOCkKK2RlZmZyYW1lKFBBUkFNX0RTVCwgICAgNCkKKworZG5sICByZS11c2UgcGFyYW1ldGVyIHNwYWNlCitkZWZpbmUoU0FWRV9FU0ksYFBBUkFNX1NJWkUnKQorZGVmaW5lKFNBVkVfRUJQLGBQQVJBTV9TUkMnKQorZGVmaW5lKFNBVkVfRURJLGBQQVJBTV9ESVZJU09SJykKK2RlZmluZShTQVZFX0VCWCxgUEFSQU1fRFNUJykKKworCVRFWFQKKworCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX3ByZWludl9kaXZyZW1fMSkKK2RlZmxpdChgRlJBTUUnLDApCisKKwltb3ZsCVBBUkFNX1NJWkUsICVlY3gKKwl4b3JsCSVlZHgsICVlZHgJCUMgY2FycnkgaWYgY2FuJ3Qgc2tpcCBhIGRpdgorCisJbW92bAklZXNpLCBTQVZFX0VTSQorCW1vdmwJUEFSQU1fU1JDLCAlZXNpCisKKwltb3ZsCSVlYnAsIFNBVkVfRUJQCisJbW92bAlQQVJBTV9ESVZJU09SLCAlZWJwCisKKwltb3ZsCSVlZGksIFNBVkVfRURJCisJbW92bAlQQVJBTV9EU1QsICVlZGkKKworCW1vdmwJLTQoJWVzaSwlZWN4LDQpLCAlZWF4CUMgc3JjIGhpZ2ggbGltYgorCisJbW92bAklZWJ4LCBTQVZFX0VCWAorCW1vdmwJUEFSQU1fWFNJWkUsICVlYngKKworCW1vdmQJUEFSQU1fUFJFSU5WX0lOVkVSU0UsICVtbTQKKworCW1vdmQJUEFSQU1fUFJFSU5WX1NISUZULCAlbW03ICBDIGwKKwljbXBsCSVlYnAsICVlYXgJCUMgaGlnaCBjbXAgZGl2aXNvcgorCisJY21vdmMoCSVlYXgsICVlZHgpCQlDIGhpZ2ggaXMgY2FycnkgaWYgaGlnaDxkaXZpc29yCisJbW92ZAklZWR4LCAlbW0wCQlDIGNhcnJ5CisKKwltb3ZkCSVlZHgsICVtbTEJCUMgY2FycnkKKwltb3ZsCSQwLCAlZWR4CisKKwltb3ZkCSVlYnAsICVtbTUJCUMgZAorCWNtb3ZuYygJJWVheCwgJWVkeCkJCUMgMCBpZiBza2lwIGRpdiwgc3JjIGhpZ2ggaWYgbm90CisJCQkJCUMgKHRoZSBsYXR0ZXIgaW4gY2FzZSBzcmM9PWRzdCkKKwlsZWFsCS00KCVlZGksJWVieCw0KSwgJWVkaQlDICZkc3RbeHNpemUtMV0KKworCW1vdmwJJWVkeCwgKCVlZGksJWVjeCw0KQlDIGRzdCBoaWdoIGxpbWIKKwlzYmJsCSQwLCAlZWN4CQlDIHNraXAgb25lIGRpdmlzaW9uIGlmIGhpZ2g8ZGl2aXNvcgorCW1vdmwJJDMyLCAlZWF4CisKKwlzdWJsCVBBUkFNX1BSRUlOVl9TSElGVCwgJWVheAorCXBzbGxxCSVtbTcsICVtbTUJCUMgZCBub3JtYWxpemVkCisJbGVhbAkoJWVkaSwlZWN4LDQpLCAlZWRpCUMgJmRzdFt4c2l6ZStzaXplLTFdCisJbGVhbAktNCglZXNpLCVlY3gsNCksICVlc2kJQyAmc3JjW3NpemUtMV0KKworCW1vdmQJJWVheCwgJW1tNgkJQyAzMi1sCisJam1wCUwoc3RhcnRfcHJlaW52KQorCitFUElMT0dVRSgpCisKKworCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX2RpdnJlbV8xYykKK2RlZmxpdChgRlJBTUUnLDApCisKKwltb3ZsCVBBUkFNX0NBUlJZLCAlZWR4CisKKwltb3ZsCVBBUkFNX1NJWkUsICVlY3gKKworCW1vdmwJJWVzaSwgU0FWRV9FU0kKKwltb3ZsCVBBUkFNX1NSQywgJWVzaQorCisJbW92bAklZWJwLCBTQVZFX0VCUAorCW1vdmwJUEFSQU1fRElWSVNPUiwgJWVicAorCisJbW92bAklZWRpLCBTQVZFX0VESQorCW1vdmwJUEFSQU1fRFNULCAlZWRpCisKKwltb3ZsCSVlYngsIFNBVkVfRUJYCisJbW92bAlQQVJBTV9YU0laRSwgJWVieAorCisJbGVhbAktNCglZWRpLCVlYngsNCksICVlZGkJQyAmZHN0W3hzaXplLTFdCisJam1wCUwoc3RhcnRfMWMpCisKK0VQSUxPR1VFKCkKKworCisJQUxJR04oMTYpCitQUk9MT0dVRShtcG5fZGl2cmVtXzEpCitkZWZsaXQoYEZSQU1FJywwKQorCisJbW92bAlQQVJBTV9TSVpFLCAlZWN4CisJeG9ybAklZWR4LCAlZWR4CQlDIGluaXRpYWwgY2FycnkgKGlmIGNhbid0IHNraXAgYSBkaXYpCisKKwltb3ZsCSVlc2ksIFNBVkVfRVNJCisJbW92bAlQQVJBTV9TUkMsICVlc2kKKworCW1vdmwJJWVicCwgU0FWRV9FQlAKKwltb3ZsCVBBUkFNX0RJVklTT1IsICVlYnAKKworCW1vdmwJJWVkaSwgU0FWRV9FREkKKwltb3ZsCVBBUkFNX0RTVCwgJWVkaQorCisJbW92bAklZWJ4LCBTQVZFX0VCWAorCW1vdmwJUEFSQU1fWFNJWkUsICVlYngKKwlsZWFsCS00KCVlZGksJWVieCw0KSwgJWVkaQlDICZkc3RbeHNpemUtMV0KKworCW9ybAklZWN4LCAlZWN4CQlDIHNpemUKKwlqeglMKG5vX3NraXBfZGl2KQkJQyBpZiBzaXplPT0wCisJbW92bAktNCglZXNpLCVlY3gsNCksICVlYXgJQyBzcmMgaGlnaCBsaW1iCisKKwljbXBsCSVlYnAsICVlYXgJCUMgaGlnaCBjbXAgZGl2aXNvcgorCisJY21vdm5jKAklZWF4LCAlZWR4KQkJQyAwIGlmIHNraXAgZGl2LCBzcmMgaGlnaCBpZiBub3QKKwltb3ZsCSVlZHgsICglZWRpLCVlY3gsNCkJQyBkc3QgaGlnaCBsaW1iCisKKwltb3ZsCSQwLCAlZWR4CisJY21vdmMoCSVlYXgsICVlZHgpCQlDIGhpZ2ggaXMgY2FycnkgaWYgaGlnaDxkaXZpc29yCisKKwlzYmJsCSQwLCAlZWN4CQlDIHNpemUtMSBpZiBoaWdoPGRpdmlzb3IKK0wobm9fc2tpcF9kaXYpOgorCisKK0woc3RhcnRfMWMpOgorCUMgZWF4CisJQyBlYngJeHNpemUKKwlDIGVjeAlzaXplCisJQyBlZHgJY2FycnkKKwlDIGVzaQlzcmMKKwlDIGVkaQkmZHN0W3hzaXplLTFdCisJQyBlYnAJZGl2aXNvcgorCisJbGVhbAkoJWVieCwlZWN4KSwgJWVheAlDIHNpemUreHNpemUKKwlsZWFsCS00KCVlc2ksJWVjeCw0KSwgJWVzaQlDICZzcmNbc2l6ZS0xXQorCWxlYWwJKCVlZGksJWVjeCw0KSwgJWVkaQlDICZkc3Rbc2l6ZSt4c2l6ZS0xXQorCisJY21wbAkkTVVMX1RIUkVTSE9MRCwgJWVheAorCWphZQlMKG11bF9ieV9pbnZlcnNlKQorCisKKwlvcmwJJWVjeCwgJWVjeAorCWp6CUwoZGl2aWRlX25vX2ludGVnZXIpCUMgaWYgc2l6ZT09MAorCitMKGRpdmlkZV9pbnRlZ2VyKToKKwlDIGVheAlzY3JhdGNoIChxdW90aWVudCkKKwlDIGVieAl4c2l6ZQorCUMgZWN4CWNvdW50ZXIKKwlDIGVkeAljYXJyeQorCUMgZXNpCXNyYywgZGVjcmVtZW50aW5nCisJQyBlZGkJZHN0LCBkZWNyZW1lbnRpbmcKKwlDIGVicAlkaXZpc29yCisKKwltb3ZsCSglZXNpKSwgJWVheAorCXN1YmwJJDQsICVlc2kKKworCWRpdmwJJWVicAorCisJbW92bAklZWF4LCAoJWVkaSkKKwlzdWJsCSQ0LCAlZWRpCisKKwlzdWJsCSQxLCAlZWN4CisJam56CUwoZGl2aWRlX2ludGVnZXIpCisKKworTChkaXZpZGVfbm9faW50ZWdlcik6CisJb3JsCSVlYngsICVlYngKKwlqbnoJTChkaXZpZGVfZnJhY3Rpb24pCUMgaWYgeHNpemUhPTAKKworTChkaXZpZGVfZG9uZSk6CisJbW92bAlTQVZFX0VTSSwgJWVzaQorCW1vdmwJU0FWRV9FREksICVlZGkKKwltb3ZsCVNBVkVfRUJYLCAlZWJ4CisJbW92bAlTQVZFX0VCUCwgJWVicAorCW1vdmwJJWVkeCwgJWVheAorCXJldAorCisKK0woZGl2aWRlX2ZyYWN0aW9uKToKKwlDIGVheAlzY3JhdGNoIChxdW90aWVudCkKKwlDIGVieAljb3VudGVyCisJQyBlY3gKKwlDIGVkeAljYXJyeQorCUMgZXNpCisJQyBlZGkJZHN0LCBkZWNyZW1lbnRpbmcKKwlDIGVicAlkaXZpc29yCisKKwltb3ZsCSQwLCAlZWF4CisKKwlkaXZsCSVlYnAKKworCW1vdmwJJWVheCwgKCVlZGkpCisJc3VibAkkNCwgJWVkaQorCisJc3VibAkkMSwgJWVieAorCWpueglMKGRpdmlkZV9mcmFjdGlvbikKKworCWptcAlMKGRpdmlkZV9kb25lKQorCisKKworQyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitMKG11bF9ieV9pbnZlcnNlKToKKwlDIGVheAorCUMgZWJ4CXhzaXplCisJQyBlY3gJc2l6ZQorCUMgZWR4CWNhcnJ5CisJQyBlc2kJJnNyY1tzaXplLTFdCisJQyBlZGkJJmRzdFtzaXplK3hzaXplLTFdCisJQyBlYnAJZGl2aXNvcgorCisJYnNybAklZWJwLCAlZWF4CQlDIDMxLWwKKwltb3ZkCSVlZHgsICVtbTAJCUMgY2FycnkKKwltb3ZkCSVlZHgsICVtbTEJCUMgY2FycnkKKwltb3ZsCSVlY3gsICVlZHgJCUMgc2l6ZQorCW1vdmwJJDMxLCAlZWN4CisKKwlDCisKKwl4b3JsCSVlYXgsICVlY3gJCUMgbCA9IGxlYWRpbmcgemVyb3Mgb24gZAorCWFkZGwJJDEsICVlYXgKKworCXNobGwJJWNsLCAlZWJwCQlDIGQgbm9ybWFsaXplZAorCW1vdmQJJWVjeCwgJW1tNwkJQyBsCisJbW92bAklZWR4LCAlZWN4CQlDIHNpemUKKworCW1vdmQJJWVheCwgJW1tNgkJQyAzMi1sCisJbW92bAkkLTEsICVlZHgKKwltb3ZsCSQtMSwgJWVheAorCisJQworCisJc3VibAklZWJwLCAlZWR4CQlDIChiLWQpLTEgc28gIGVkeDplYXggPSBiKihiLWQpLTEKKworCWRpdmwJJWVicAkJCUMgZmxvb3IgKGIqKGItZCktMSAvIGQpCisJbW92ZAklZWJwLCAlbW01CQlDIGQKKworCUMKKworCW1vdmQJJWVheCwgJW1tNAkJQyBtCisKKworTChzdGFydF9wcmVpbnYpOgorCUMgZWF4CWludmVyc2UKKwlDIGVieAl4c2l6ZQorCUMgZWN4CXNpemUKKwlDIGVkeAorCUMgZXNpCSZzcmNbc2l6ZS0xXQorCUMgZWRpCSZkc3Rbc2l6ZSt4c2l6ZS0xXQorCUMgZWJwCisJQworCUMgbW0wCWNhcnJ5CisJQyBtbTEJY2FycnkKKwlDIG1tMgorCUMgbW00CW0KKwlDIG1tNQlkCisJQyBtbTYJMzEtbAorCUMgbW03CWwKKworCXBzbGxxCSVtbTcsICVtbTAJCUMgbjIgPSBjYXJyeSA8PCBsLCBmb3Igc2l6ZT09MAorCisJc3VibAkkMSwgJWVjeAorCWpiCUwoaW50ZWdlcl9ub25lKQorCisJbW92ZAkoJWVzaSksICVtbTAJCUMgc3JjIGhpZ2ggbGltYgorCXB1bnBja2xkcSAlbW0xLCAlbW0wCisJcHNybHEJJW1tNiwgJW1tMAkJQyBuMiA9IGhpZ2ggKGNhcnJ5OnNyY2hpZ2ggPDwgbCkKKwlqeglMKGludGVnZXJfbGFzdCkKKworCitDIFRoZSBkZXBlbmRlbnQgY2hhaW4gaGVyZSBjb25zaXN0cyBvZgorQworQwkyICAgcGFkZGQgICAgbjErbjIKK0MJOCAgIHBtdWx1ZHEgIG0qKG4xK24yKQorQwkyICAgcGFkZHEgICAgbjI6bmFkaiArIG0qKG4xK24yKQorQwkyICAgcHNybHEgICAgcTEKK0MJOCAgIHBtdWx1ZHEgIGQqcTEKK0MJMiAgIHBzdWJxICAgIChuLWQpLXExKmQKK0MJMiAgIHBzcmxxICAgIGhpZ2ggbi0ocTErMSkqZCBtYXNrCitDCTIgICBwYW5kICAgICBkIG1hc2tlZAorQwkyICAgcGFkZGQgICAgbjIrZCBhZGRiYWNrCitDCS0tCitDCTMwCitDCitDIEJ1dCBpdCBzZWVtcyB0byBydW4gYXQgMzIgY3ljbGVzLCBzbyBwcmVzdW1hYmx5IHRoZXJlJ3Mgc29tZXRoaW5nIGVsc2UKK0MgZ29pbmcgb24uCisKKwlBTElHTigxNikKK0woaW50ZWdlcl90b3ApOgorCUMgZWF4CisJQyBlYngKKwlDIGVjeAljb3VudGVyLCBzaXplLTEgdG8gMAorCUMgZWR4CisJQyBlc2kJc3JjLCBkZWNyZW1lbnRpbmcKKwlDIGVkaQlkc3QsIGRlY3JlbWVudGluZworCUMKKwlDIG1tMAluMgorCUMgbW00CW0KKwlDIG1tNQlkCisJQyBtbTYJMzItbAorCUMgbW03CWwKKworCUFTU0VSVChiLGBDIG4yPGQKKwkgbW92ZAklbW0wLCAlZWF4CisJIG1vdmQJJW1tNSwgJWVkeAorCSBjbXBsCSVlZHgsICVlYXgnKQorCisJbW92ZAktNCglZXNpKSwgJW1tMQkJQyBuZXh0IHNyYyBsaW1icworCW1vdmQJKCVlc2kpLCAlbW0yCisJbGVhbAktNCglZXNpKSwgJWVzaQorCisJcHVucGNrbGRxICVtbTIsICVtbTEKKwlwc3JscQklbW02LCAlbW0xCQlDIG4xMAorCisJbW92cQklbW0xLCAlbW0yCQlDIG4xMAorCW1vdnEJJW1tMSwgJW1tMwkJQyBuMTAKKwlwc3JhZAkkMzEsICVtbTEJCUMgLW4xCisJcGFuZAklbW01LCAlbW0xCQlDIC1uMSAmIGQKKwlwYWRkZAklbW0yLCAlbW0xCQlDIG5hZGogPSBuMTArKC1uMSZkKSwgaWdub3JlIG92ZXJmbG93CisKKwlwc3JsZAkkMzEsICVtbTIJCUMgbjEKKwlwYWRkZAklbW0wLCAlbW0yCQlDIG4yK24xCisJcHVucGNrbGRxICVtbTAsICVtbTEJCUMgbjI6bmFkagorCisJcG11bHVkcQklbW00LCAlbW0yCQlDIG0qKG4yK24xKQorCisJQworCisJcGFkZHEJJW1tMiwgJW1tMQkJQyBuMjpuYWRqICsgbSoobjIrbjEpCisJcHhvcgklbW0yLCAlbW0yCQlDIGJyZWFrIGRlcGVuZGVuY3ksIHNhdmVzIDQgY3ljbGVzCisJcGNtcGVxZAklbW0yLCAlbW0yCQlDIEZGLi4uRkYKKwlwc3JscQkkNjMsICVtbTIJCUMgMQorCisJcHNybHEJJDMyLCAlbW0xCQlDIHExID0gaGlnaChuMjpuYWRqICsgbSoobjIrbjEpKQorCisJcGFkZGQJJW1tMSwgJW1tMgkJQyBxMSsxCisJcG11bHVkcQklbW01LCAlbW0xCQlDIHExKmQKKworCXB1bnBja2xkcSAlbW0wLCAlbW0zCQlDIG4gPSBuMjpuMTAKKwlweG9yCSVtbTAsICVtbTAKKworCXBzdWJxCSVtbTUsICVtbTMJCUMgbiAtIGQKKworCUMKKworCXBzdWJxCSVtbTEsICVtbTMJCUMgbiAtIChxMSsxKSpkCisKKwlwb3IJJW1tMywgJW1tMAkJQyBjb3B5IHJlbWFpbmRlciAtPiBuZXcgbjIKKwlwc3JscQkkMzIsICVtbTMJCUMgaGlnaCBuIC0gKHExKzEpKmQsIDAgb3IgLTEKKworCUFTU0VSVChiZSxgQyAwIG9yIC0xCisJIG1vdmQJJW1tMywgJWVheAorCSBhZGRsCSQxLCAlZWF4CisJIGNtcGwJJDEsICVlYXgnKQorCisJcGFkZGQJJW1tMywgJW1tMgkJQyBxCisJcGFuZAklbW01LCAlbW0zCQlDIG1hc2sgJiBkCisKKwlwYWRkZAklbW0zLCAlbW0wCQlDIGFkZGJhY2sgaWYgbmVjZXNzYXJ5CisJbW92ZAklbW0yLCAoJWVkaSkKKwlsZWFsCS00KCVlZGkpLCAlZWRpCisKKwlzdWJsCSQxLCAlZWN4CisJamEJTChpbnRlZ2VyX3RvcCkKKworCitMKGludGVnZXJfbGFzdCk6CisJQyBlYXgKKwlDIGVieAl4c2l6ZQorCUMgZWN4CisJQyBlZHgKKwlDIGVzaQkmc3JjWzBdCisJQyBlZGkJJmRzdFt4c2l6ZV0KKwlDCisJQyBtbTAJbjIKKwlDIG1tNAltCisJQyBtbTUJZAorCUMgbW02CisJQyBtbTcJbAorCisJQVNTRVJUKGIsYEMgbjI8ZAorCSBtb3ZkCSVtbTAsICVlYXgKKwkgbW92ZAklbW01LCAlZWR4CisJIGNtcGwJJWVkeCwgJWVheCcpCisKKwltb3ZkCSglZXNpKSwgJW1tMQkJQyBzcmNbMF0KKwlwc2xscQklbW03LCAlbW0xCQlDIG4xMAorCisJbW92cQklbW0xLCAlbW0yCQlDIG4xMAorCW1vdnEJJW1tMSwgJW1tMwkJQyBuMTAKKwlwc3JhZAkkMzEsICVtbTEJCUMgLW4xCisJcGFuZAklbW01LCAlbW0xCQlDIC1uMSAmIGQKKwlwYWRkZAklbW0yLCAlbW0xCQlDIG5hZGogPSBuMTArKC1uMSZkKSwgaWdub3JlIG92ZXJmbG93CisKKwlwc3JsZAkkMzEsICVtbTIJCUMgbjEKKwlwYWRkZAklbW0wLCAlbW0yCQlDIG4yK24xCisJcHVucGNrbGRxICVtbTAsICVtbTEJCUMgbjI6bmFkagorCisJcG11bHVkcQklbW00LCAlbW0yCQlDIG0qKG4yK24xKQorCisJQworCisJcGFkZHEJJW1tMiwgJW1tMQkJQyBuMjpuYWRqICsgbSoobjIrbjEpCisJcGNtcGVxZAklbW0yLCAlbW0yCQlDIEZGLi4uRkYKKwlwc3JscQkkNjMsICVtbTIJCUMgMQorCisJcHNybHEJJDMyLCAlbW0xCQlDIHExID0gaGlnaChuMjpuYWRqICsgbSoobjIrbjEpKQorCXBhZGRkCSVtbTEsICVtbTIJCUMgcTEKKworCXBtdWx1ZHEJJW1tNSwgJW1tMQkJQyBxMSpkCisJcHVucGNrbGRxICVtbTAsICVtbTMJCUMgbgorCXBzdWJxCSVtbTUsICVtbTMJCUMgbiAtIGQKKwlweG9yCSVtbTAsICVtbTAKKworCUMKKworCXBzdWJxCSVtbTEsICVtbTMJCUMgbiAtIChxMSsxKSpkCisKKwlwb3IJJW1tMywgJW1tMAkJQyByZW1haW5kZXIgLT4gbjIKKwlwc3JscQkkMzIsICVtbTMJCUMgaGlnaCBuIC0gKHExKzEpKmQsIDAgb3IgLTEKKworCUFTU0VSVChiZSxgQyAwIG9yIC0xCisJIG1vdmQJJW1tMywgJWVheAorCSBhZGRsCSQxLCAlZWF4CisJIGNtcGwJJDEsICVlYXgnKQorCisJcGFkZGQJJW1tMywgJW1tMgkJQyBxCisJcGFuZAklbW01LCAlbW0zCQlDIG1hc2sgJiBkCisKKwlwYWRkZAklbW0zLCAlbW0wCQlDIGFkZGJhY2sgaWYgbmVjZXNzYXJ5CisJbW92ZAklbW0yLCAoJWVkaSkKKwlsZWFsCS00KCVlZGkpLCAlZWRpCisKKworTChpbnRlZ2VyX25vbmUpOgorCUMgZWF4CisJQyBlYngJeHNpemUKKworCW9ybAklZWJ4LCAlZWJ4CisJam56CUwoZnJhY3Rpb25fc29tZSkJQyBpZiB4c2l6ZSE9MAorCisKK0woZnJhY3Rpb25fZG9uZSk6CisJbW92bAlTQVZFX0VCUCwgJWVicAorCXBzcmxkCSVtbTcsICVtbTAJCUMgcmVtYWluZGVyCisKKwltb3ZsCVNBVkVfRURJLCAlZWRpCisJbW92ZAklbW0wLCAlZWF4CisKKwltb3ZsCVNBVkVfRVNJLCAlZXNpCisJbW92bAlTQVZFX0VCWCwgJWVieAorCWVtbXMKKwlyZXQKKworCisKK0MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0MKKworTChmcmFjdGlvbl9zb21lKToKKwlDIGVheAorCUMgZWJ4CXhzaXplCisJQyBlY3gKKwlDIGVkeAorCUMgZXNpCisJQyBlZGkJJmRzdFt4c2l6ZS0xXQorCUMgZWJwCisKKworTChmcmFjdGlvbl90b3ApOgorCUMgZWF4CisJQyBlYngJY291bnRlciwgeHNpemUgaXRlcmF0aW9ucworCUMgZWN4CisJQyBlZHgKKwlDIGVzaQlzcmMsIGRlY3JlbWVudGluZworCUMgZWRpCWRzdCwgZGVjcmVtZW50aW5nCisJQworCUMgbW0wCW4yCisJQyBtbTQJbQorCUMgbW01CWQKKwlDIG1tNgkzMi1sCisJQyBtbTcJbAorCisJQVNTRVJUKGIsYEMgbjI8ZAorCSBtb3ZkCSVtbTAsICVlYXgKKwkgbW92ZAklbW01LCAlZWR4CisJIGNtcGwJJWVkeCwgJWVheCcpCisKKwltb3ZxCSVtbTAsICVtbTEJCUMgbjIKKwlwbXVsdWRxCSVtbTQsICVtbTAJCUMgbSpuMgorCisJcGNtcGVxZAklbW0yLCAlbW0yCisJcHNybHEJJDYzLCAlbW0yCisKKwlDCisKKwlwc3JscQkkMzIsICVtbTAJCUMgaGlnaChtKm4yKQorCisJcGFkZGQJJW1tMSwgJW1tMAkJQyBxMSA9IGhpZ2gobjI6MCArIG0qbjIpCisKKwlwYWRkZAklbW0wLCAlbW0yCQlDIHExKzEKKwlwbXVsdWRxCSVtbTUsICVtbTAJCUMgcTEqZAorCisJcHNsbHEJJDMyLCAlbW0xCQlDIG4gPSBuMjowCisJcHN1YnEJJW1tNSwgJW1tMQkJQyBuIC0gZAorCisJQworCisJcHN1YnEJJW1tMCwgJW1tMQkJQyByID0gbiAtIChxMSsxKSpkCisJcHhvcgklbW0wLCAlbW0wCisKKwlwb3IJJW1tMSwgJW1tMAkJQyByIC0+IG4yCisJcHNybHEJJDMyLCAlbW0xCQlDIGhpZ2ggbiAtIChxMSsxKSpkLCAwIG9yIC0xCisKKwlBU1NFUlQoYmUsYEMgMCBvciAtMQorCSBtb3ZkCSVtbTEsICVlYXgKKwkgYWRkbAkkMSwgJWVheAorCSBjbXBsCSQxLCAlZWF4JykKKworCXBhZGRkCSVtbTEsICVtbTIJCUMgcQorCXBhbmQJJW1tNSwgJW1tMQkJQyBtYXNrICYgZAorCisJcGFkZGQJJW1tMSwgJW1tMAkJQyBhZGRiYWNrIGlmIG5lY2Vzc2FyeQorCW1vdmQJJW1tMiwgKCVlZGkpCisJbGVhbAktNCglZWRpKSwgJWVkaQorCisJc3VibAkkMSwgJWVieAorCWpuZQlMKGZyYWN0aW9uX3RvcCkKKworCisJam1wCUwoZnJhY3Rpb25fZG9uZSkKKworRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bTQvc3NlMi9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtNC9zc2UyL2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDQ3YTUxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bTQvc3NlMi9nbXAtbXBhcmFtLmgKQEAgLTAsMCArMSwyMTMgQEAKKy8qIEludGVsIFBlbnRpdW0tNCBnbXAtbXBhcmFtLmggLS0gQ29tcGlsZXIvbWFjaGluZSBwYXJhbWV0ZXIgaGVhZGVyIGZpbGUuCisKK0NvcHlyaWdodCAyMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgMzIKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgNAorCisvKiAyNjAwIE1IeiBQNCBOb3J0aHdvb2QgKi8KKy8qIEZGVCB0dW5pbmcgbGltaXQgPSAyMyw3MDAsMzA5ICovCisvKiBHZW5lcmF0ZWQgYnkgdHVuZXVwLmMsIDIwMTktMTEtMDksIGdjYyA4LjIgKi8KKworI2RlZmluZSBNT0RfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBNT0RfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAxNAorI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNworI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNQorI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAxMworI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICAgICAgMCAgLyogbmV2ZXIgbXBuX21vZF8xc18ycCAqLworI2RlZmluZSBQUkVJTlZfTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgNworI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgICAgICAgICAgICAgICAgMSAgLyogbmF0aXZlICovCisjZGVmaW5lIERJVl9RUl8xTl9QSTFfTUVUSE9EICAgICAgICAgICAgICAgICAyICAvKiA0LjM2JSBmYXN0ZXIgdGhhbiAxICovCisjZGVmaW5lIERJVl9RUl8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgIDE2CisjZGVmaW5lIERJVl9RUl8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVl9RUl8yX1BJMl9USFJFU0hPTEQgICAgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgICAgICAgMjEKKworI2RlZmluZSBESVZfMV9WU19NVUxfMV9QRVJDRU5UICAgICAgICAgICAgIDM1OAorCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDI2CisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTAxCisjZGVmaW5lIE1VTF9UT09NNDRfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjg0CisjZGVmaW5lIE1VTF9UT09NNkhfVEhSRVNIT0xEICAgICAgICAgICAgICAgNDA2CisjZGVmaW5lIE1VTF9UT09NOEhfVEhSRVNIT0xEICAgICAgICAgICAgICAgNTkyCisKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNDNfVEhSRVNIT0xEICAgICAxMDEKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxOTEKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxODkKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNjNfVEhSRVNIT0xEICAgICAxOTUKKyNkZWZpbmUgTVVMX1RPT000M19UT19UT09NNTRfVEhSRVNIT0xEICAgICAxNTEKKworI2RlZmluZSBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDUxCisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTYzCisjZGVmaW5lIFNRUl9UT09NNF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjU0CisjZGVmaW5lIFNRUl9UT09NNl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNjE0CisjZGVmaW5lIFNRUl9UT09NOF9USFJFU0hPTEQgICAgICAgICAgICAgICAgODQyCisKKyNkZWZpbmUgTVVMTUlEX1RPT000Ml9USFJFU0hPTEQgICAgICAgICAgICAgNTgKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxOQorI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAyMworCisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgODI0ICAvKiBrID0gNSAqLworI2RlZmluZSBNVUxfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgODI0LCA1fSwgeyAgICAgMjksIDZ9LCB7ICAgICAxNSwgNX0sIHsgICAgIDMzLCA2fSwgXAorICAgIHsgICAgIDE3LCA1fSwgeyAgICAgMzYsIDZ9LCB7ICAgICAxOSwgNX0sIHsgICAgIDM5LCA2fSwgXAorICAgIHsgICAgIDI5LCA3fSwgeyAgICAgMTUsIDZ9LCB7ICAgICAzMiwgN30sIHsgICAgIDE3LCA2fSwgXAorICAgIHsgICAgIDM2LCA3fSwgeyAgICAgMTksIDZ9LCB7ICAgICAzOSwgN30sIHsgICAgIDIxLCA2fSwgXAorICAgIHsgICAgIDQzLCA3fSwgeyAgICAgMjMsIDZ9LCB7ICAgICA0OCwgN30sIHsgICAgIDI5LCA4fSwgXAorICAgIHsgICAgIDE1LCA3fSwgeyAgICAgMzcsIDh9LCB7ICAgICAxOSwgN30sIHsgICAgIDQzLCA4fSwgXAorICAgIHsgICAgIDIzLCA3fSwgeyAgICAgNDksIDh9LCB7ICAgICAyNywgN30sIHsgICAgIDU1LCA4fSwgXAorICAgIHsgICAgIDMxLCA3fSwgeyAgICAgNjMsIDh9LCB7ICAgICA0MywgOX0sIHsgICAgIDIzLCA4fSwgXAorICAgIHsgICAgIDU1LCA5fSwgeyAgICAgMzEsIDh9LCB7ICAgICA2NywgOX0sIHsgICAgIDM5LCA4fSwgXAorICAgIHsgICAgIDc5LCA5fSwgeyAgICAgNDcsIDh9LCB7ICAgICA5OSwgOX0sIHsgICAgIDU1LDEwfSwgXAorICAgIHsgICAgIDMxLCA5fSwgeyAgICAgNzksMTB9LCB7ICAgICA0NywgOX0sIHsgICAgMTAzLDExfSwgXAorICAgIHsgICAgIDMxLDEwfSwgeyAgICAgNjMsIDl9LCB7ICAgIDE0MywxMH0sIHsgICAgIDc5LCA5fSwgXAorICAgIHsgICAgMTY3LDEwfSwgeyAgICAgOTUsIDl9LCB7ICAgIDE5MSwxMH0sIHsgICAgMTExLDExfSwgXAorICAgIHsgICAgIDYzLDEwfSwgeyAgICAxMjcsIDl9LCB7ICAgIDI1NSwxMH0sIHsgICAgMTU5LDExfSwgXAorICAgIHsgICAgIDk1LDEwfSwgeyAgICAxOTEsMTJ9LCB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgXAorICAgIHsgICAgMjcxLDExfSwgeyAgICAxNTksMTB9LCB7ICAgIDMxOSwgOX0sIHsgICAgNjM5LDEwfSwgXAorICAgIHsgICAgMzM1LDExfSwgeyAgICAxOTEsMTB9LCB7ICAgIDM4MywgOX0sIHsgICAgNzk5LDEwfSwgXAorICAgIHsgICAgNDE1LDExfSwgeyAgICAyMjMsMTJ9LCB7ICAgIDEyNywxMX0sIHsgICAgMjU1LDEwfSwgXAorICAgIHsgICAgNTI3LDExfSwgeyAgICAyODcsMTB9LCB7ICAgIDYwNywgOX0sIHsgICAxMjE1LDExfSwgXAorICAgIHsgICAgMzE5LDEwfSwgeyAgICA2NzEsMTJ9LCB7ICAgIDE5MSwxMX0sIHsgICAgMzgzLDEwfSwgXAorICAgIHsgICAgNzk5LDExfSwgeyAgICA0MTUsMTB9LCB7ICAgIDg2MywxM30sIHsgICAgMTI3LDEyfSwgXAorICAgIHsgICAgMjU1LDExfSwgeyAgICA1NDMsMTB9LCB7ICAgMTExOSwgOX0sIHsgICAyMjM5LDExfSwgXAorICAgIHsgICAgNjA3LDEwfSwgeyAgIDEyMTUsMTJ9LCB7ICAgIDMxOSwxMX0sIHsgICAgNjcxLDEwfSwgXAorICAgIHsgICAxMzQzLDExfSwgeyAgICA3MzUsMTB9LCB7ICAgMTQ3MSwgOX0sIHsgICAyOTQzLDEyfSwgXAorICAgIHsgICAgMzgzLDExfSwgeyAgICA3OTksMTB9LCB7ICAgMTU5OSwxMX0sIHsgICAgODYzLDEyfSwgXAorICAgIHsgICAgNDQ3LDExfSwgeyAgICA5MjcsMTB9LCB7ICAgMTg1NSwxMX0sIHsgICAgOTU5LDEzfSwgXAorICAgIHsgICAgMjU1LDEyfSwgeyAgICA1MTEsMTF9LCB7ICAgMTExOSwxMn0sIHsgICAgNTc1LDExfSwgXAorICAgIHsgICAxMjE1LDEwfSwgeyAgIDI0MzEsMTF9LCB7ICAgMTI0NywxMn0sIHsgICAgNjM5LDExfSwgXAorICAgIHsgICAxMzQzLDEyfSwgeyAgICA3MDMsMTF9LCB7ICAgMTQ3MSwxMH0sIHsgICAyOTQzLDEzfSwgXAorICAgIHsgICAgMzgzLDEyfSwgeyAgICA3NjcsMTF9LCB7ICAgMTU5OSwxMn0sIHsgICAgODMxLDExfSwgXAorICAgIHsgICAxNzI3LDEwfSwgeyAgIDM0NTUsMTJ9LCB7ICAgIDg5NSwxNH0sIHsgICAgMjU1LDEzfSwgXAorICAgIHsgICAgNTExLDEyfSwgeyAgIDEwODcsMTF9LCB7ICAgMjIzOSwxMH0sIHsgICA0NDc5LDEyfSwgXAorICAgIHsgICAxMjE1LDExfSwgeyAgIDI0MzEsMTN9LCB7ICAgIDYzOSwxMn0sIHsgICAxMzQzLDExfSwgXAorICAgIHsgICAyNjg3LDEyfSwgeyAgIDE0NzEsMTF9LCB7ICAgMjk0MywxM30sIHsgICAgNzY3LDEyfSwgXAorICAgIHsgICAxNzI3LDExfSwgeyAgIDM0NTUsMTN9LCB7ICAgIDg5NSwxMn0sIHsgICAxOTgzLDE0fSwgXAorICAgIHsgICAgNTExLDEzfSwgeyAgIDEwMjMsMTJ9LCB7ICAgMjIzOSwxM30sIHsgICAxMTUxLDEyfSwgXAorICAgIHsgICAyNDk1LDExfSwgeyAgIDQ5OTEsMTN9LCB7ICAgMTQwNywxMn0sIHsgICAyOTQzLDE0fSwgXAorICAgIHsgICAgNzY3LDEzfSwgeyAgIDE1MzUsMTJ9LCB7ICAgMzEzNSwxM30sIHsgICAxNjYzLDEyfSwgXAorICAgIHsgICAzNDU1LDEzfSwgeyAgIDE5MTksMTJ9LCB7ICAgMzk2NywxNX0sIHsgICAgNTExLDE0fSwgXAorICAgIHsgICAxMDIzLDEzfSwgeyAgIDIxNzUsMTJ9LCB7ICAgNDQ3OSwxM30sIHsgICAyNDMxLDEyfSwgXAorICAgIHsgICA0OTkxLDE0fSwgeyAgIDEyNzksMTN9LCB7ICAgMjY4NywxMn0sIHsgICA1NTAzLDEzfSwgXAorICAgIHsgICA4MTkyLDE0fSwgeyAgMTYzODQsMTV9LCB7ICAzMjc2OCwxNn0gfQorI2RlZmluZSBNVUxfRkZUX1RBQkxFM19TSVpFIDE2NworI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNzgwOAorCisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgNTYwICAvKiBrID0gNSAqLworI2RlZmluZSBTUVJfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgNTYwLCA1fSwgeyAgICAgMzMsIDZ9LCB7ICAgICAxNywgNX0sIHsgICAgIDM1LCA2fSwgXAorICAgIHsgICAgIDMzLCA3fSwgeyAgICAgMTcsIDZ9LCB7ICAgICAzNiwgN30sIHsgICAgIDE5LCA2fSwgXAorICAgIHsgICAgIDM5LCA3fSwgeyAgICAgMzUsIDh9LCB7ICAgICAxOSwgN30sIHsgICAgIDQzLCA4fSwgXAorICAgIHsgICAgIDIzLCA3fSwgeyAgICAgNDcsIDh9LCB7ICAgICAyNywgN30sIHsgICAgIDU1LCA4fSwgXAorICAgIHsgICAgIDMxLCA3fSwgeyAgICAgNjMsIDh9LCB7ICAgICA0MywgOX0sIHsgICAgIDIzLCA4fSwgXAorICAgIHsgICAgIDU1LCA5fSwgeyAgICAgMzEsIDh9LCB7ICAgICA2NywgOX0sIHsgICAgIDM5LCA4fSwgXAorICAgIHsgICAgIDc5LCA5fSwgeyAgICAgNDcsIDh9LCB7ICAgICA5NSwgOX0sIHsgICAgIDU1LDEwfSwgXAorICAgIHsgICAgIDMxLCA5fSwgeyAgICAgNzksMTB9LCB7ICAgICA0NywgOX0sIHsgICAgIDk1LDExfSwgXAorICAgIHsgICAgIDMxLDEwfSwgeyAgICAgNjMsIDl9LCB7ICAgIDEzNSwxMH0sIHsgICAgIDc5LCA5fSwgXAorICAgIHsgICAgMTU5LDEwfSwgeyAgICAxMTEsMTF9LCB7ICAgICA2MywxMH0sIHsgICAgMTQzLCA5fSwgXAorICAgIHsgICAgMjg3LDEwfSwgeyAgICAxNTksMTF9LCB7ICAgICA5NSwxMH0sIHsgICAgMTkxLDEyfSwgXAorICAgIHsgICAgIDYzLDExfSwgeyAgICAxMjcsIDl9LCB7ICAgIDUxMSwgOH0sIHsgICAxMDIzLCA5fSwgXAorICAgIHsgICAgNTI3LDExfSwgeyAgICAxNTksMTB9LCB7ICAgIDMxOSwgOX0sIHsgICAgNjM5LDEwfSwgXAorICAgIHsgICAgMzUxLDExfSwgeyAgICAxOTEsMTB9LCB7ICAgIDQzMSwxMX0sIHsgICAgMjIzLDEyfSwgXAorICAgIHsgICAgMTI3LDExfSwgeyAgICAyNTUsMTB9LCB7ICAgIDU0MywxMX0sIHsgICAgMjg3LDEwfSwgXAorICAgIHsgICAgNjA3LCA5fSwgeyAgIDEyMTUsMTF9LCB7ICAgIDMxOSwxMH0sIHsgICAgNjM5LDExfSwgXAorICAgIHsgICAgMzUxLDEyfSwgeyAgICAxOTEsMTF9LCB7ICAgIDM4MywxMH0sIHsgICAgNzY3LDExfSwgXAorICAgIHsgICAgNDE1LDEwfSwgeyAgICA4MzEsMTN9LCB7ICAgIDEyNywxMn0sIHsgICAgMjU1LDExfSwgXAorICAgIHsgICAgNTQzLDEwfSwgeyAgIDExMTksMTF9LCB7ICAgIDYwNywxMn0sIHsgICAgMzE5LDExfSwgXAorICAgIHsgICAgNjcxLDEwfSwgeyAgIDEzNDMsMTF9LCB7ICAgIDczNSwxMn0sIHsgICAgMzgzLDExfSwgXAorICAgIHsgICAgNzk5LDEwfSwgeyAgIDE1OTksMTF9LCB7ICAgIDg2MywxMn0sIHsgICAgNDQ3LDExfSwgXAorICAgIHsgICAgOTI3LDEwfSwgeyAgIDE4NTUsMTF9LCB7ICAgIDk5MSwxM30sIHsgICAgMjU1LDEyfSwgXAorICAgIHsgICAgNTExLDExfSwgeyAgIDEwNTUsMTB9LCB7ICAgMjExMSwxMX0sIHsgICAxMDg3LDEyfSwgXAorICAgIHsgICAgNTc1LDExfSwgeyAgIDEyMTUsMTB9LCB7ICAgMjQzMSwxMn0sIHsgICAgNjM5LDExfSwgXAorICAgIHsgICAxMzQzLDEyfSwgeyAgICA3MDMsMTF9LCB7ICAgMTQwNywxM30sIHsgICAgMzgzLDEyfSwgXAorICAgIHsgICAgNzY3LDExfSwgeyAgIDE1OTksMTJ9LCB7ICAgIDgzMSwxMX0sIHsgICAxNzI3LDEwfSwgXAorICAgIHsgICAzNDU1LDEyfSwgeyAgICA4OTUsMTF9LCB7ICAgMTg1NSwxMn0sIHsgICAgOTU5LDE0fSwgXAorICAgIHsgICAgMjU1LDEzfSwgeyAgICA1MTEsMTJ9LCB7ICAgMTA4NywxMX0sIHsgICAyMjM5LDEyfSwgXAorICAgIHsgICAxMjE1LDExfSwgeyAgIDI0MzEsMTN9LCB7ICAgIDYzOSwxMn0sIHsgICAxNDcxLDExfSwgXAorICAgIHsgICAyOTQzLDEzfSwgeyAgICA3NjcsMTJ9LCB7ICAgMTcyNywxMX0sIHsgICAzNDU1LDEzfSwgXAorICAgIHsgICAgODk1LDEyfSwgeyAgIDE5ODMsMTR9LCB7ICAgIDUxMSwxM30sIHsgICAxMDIzLDEyfSwgXAorICAgIHsgICAyMjM5LDEzfSwgeyAgIDExNTEsMTJ9LCB7ICAgMjQ5NSwxMX0sIHsgICA0OTkxLDEzfSwgXAorICAgIHsgICAxMjc5LDEyfSwgeyAgIDI2MjMsMTN9LCB7ICAgMTQwNywxMn0sIHsgICAyOTQzLDE0fSwgXAorICAgIHsgICAgNzY3LDEzfSwgeyAgIDE2NjMsMTJ9LCB7ICAgMzQ1NSwxM30sIHsgICAxOTE5LDEyfSwgXAorICAgIHsgICAzODM5LDE1fSwgeyAgICA1MTEsMTR9LCB7ICAgMTAyMywxM30sIHsgICAyMTc1LDEyfSwgXAorICAgIHsgICA0NDc5LDEzfSwgeyAgIDI0MzEsMTJ9LCB7ICAgNDk5MSwxNH0sIHsgICAxMjc5LDEzfSwgXAorICAgIHsgICAyNjg3LDEyfSwgeyAgIDU1MDMsMTN9LCB7ICAgODE5MiwxNH0sIHsgIDE2Mzg0LDE1fSwgXAorICAgIHsgIDMyNzY4LDE2fSB9CisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzX1NJWkUgMTQ5CisjZGVmaW5lIFNRUl9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA0ODAwCisKKyNkZWZpbmUgTVVMTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgMTIKKyNkZWZpbmUgTVVMTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgNDQKKyNkZWZpbmUgTVVMTE9fTVVMX05fVEhSRVNIT0xEICAgICAgICAgICAgMTQyODEKKyNkZWZpbmUgU1FSTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgMTMKKyNkZWZpbmUgU1FSTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgNDIKKyNkZWZpbmUgU1FSTE9fU1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDk0NDkKKworI2RlZmluZSBEQ19ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAzOAorI2RlZmluZSBEQ19ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgIDEwNQorI2RlZmluZSBEQ19CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA1MgorI2RlZmluZSBEQ19CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA4MworCisjZGVmaW5lIElOVl9NVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgIDUwCisjZGVmaW5lIElOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAgMTU4CisjZGVmaW5lIElOVl9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTE4CisKKyNkZWZpbmUgQklOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAzNDIKKyNkZWZpbmUgUkVEQ18xX1RPX1JFRENfTl9USFJFU0hPTEQgICAgICAgICAgNjcKKworI2RlZmluZSBNVV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjEzMAorI2RlZmluZSBNVV9ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgMTg5NQorI2RlZmluZSBNVVBJX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICA2MAorI2RlZmluZSBNVV9CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTY1MgorI2RlZmluZSBNVV9CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjA4OQorCisjZGVmaW5lIFBPV01fU0VDX1RBQkxFICAxLDIyLDk2LDQ0Niw3MjMsMTM3OAorCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgIDIwCisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjk4CisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgOTYwCisKKyNkZWZpbmUgRkFDX0RTQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAyMTIKKyNkZWZpbmUgRkFDX09ERF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgNzEKKworI2RlZmluZSBNQVRSSVgyMl9TVFJBU1NFTl9USFJFU0hPTEQgICAgICAgICAyNgorI2RlZmluZSBIR0NEMl9ESVYxX01FVEhPRCAgICAgICAgICAgICAgICAgICAgMyAgLyogMC42OCUgZmFzdGVyIHRoYW4gMSAqLworI2RlZmluZSBIR0NEX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgICA4MAorI2RlZmluZSBIR0NEX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDEzOAorI2RlZmluZSBIR0NEX1JFRFVDRV9USFJFU0hPTEQgICAgICAgICAgICAgNDQ1NQorI2RlZmluZSBHQ0RfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDM2NQorI2RlZmluZSBHQ0RFWFRfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDI0NQorI2RlZmluZSBKQUNPQklfQkFTRV9NRVRIT0QgICAgICAgICAgICAgICAgICAgNCAgLyogMjMuNDElIGZhc3RlciB0aGFuIDEgKi8KKworLyogVHVuZXVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIHRvb2sgNjM4MDcgc2Vjb25kcyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bTQvc3NlMi9tb2RfMV8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW00L3NzZTIvbW9kXzFfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU4OGJhYgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW00L3NzZTIvbW9kXzFfMS5hc20KQEAgLTAsMCArMSwxNjYgQEAKK2RubCAgeDg2LTMyIG1wbl9tb2RfMV8xcCBmb3IgUGVudGl1bSA0IGFuZCBQNiBtb2RlbHMgd2l0aCBTU0UyIChpLmUuLCA5LEQsRSxGKS4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBUT0RPOgorQyAgKiBPcHRpbWl6ZS4gIFRoZSBwcmVzZW50IGNvZGUgd2FzIHdyaXR0ZW4gcXVpdGUgc3RyYWlnaHRmb3J3YXJkbHkuCitDICAqIE9wdGltaXplIHBvc3QtbG9vcCByZWR1Y3Rpb24gY29kZTsgaXQgaXMgZnJvbSBtb2RfMXNfNHAsIHRodXMgb3ZlcmtpbGwuCitDICAqIFdyaXRlIGEgY3BzIGZ1bmN0aW9uIHRoYXQgdXNlcyBzc2UyIGluc25zLgorCitDICAgICAgICAgICAgICAgICAgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgUDYgbW9kZWwgMC04LDEwLTEyCQktCitDIFA2IG1vZGVsIDkgICAoQmFuaWFzKQkJPworQyBQNiBtb2RlbCAxMyAgKERvdGhhbikJCT8KK0MgUDQgbW9kZWwgMC0xIChXaWxsYW1ldHRlKQk/CitDIFA0IG1vZGVsIDIgICAoTm9ydGh3b29kKSAgICAgMTYKK0MgUDQgbW9kZWwgMy00IChQcmVzY290dCkgICAgICAxOAorCitDIElOUFVUIFBBUkFNRVRFUlMKK0MgYXAJCXNwICsgNAorQyBuCQlzcCArIDgKK0MgYgkJc3AgKyAxMgorQyBjcHMJCXNwICsgMTYKKworZGVmaW5lKGBCMW1vZGInLCBgJW1tMScpCitkZWZpbmUoYEIybW9kYicsIGAlbW0yJykKK2RlZmluZShgYXAnLCAgICAgYCVlZHgnKQorZGVmaW5lKGBuJywgICAgICBgJWVheCcpCisKKwlURVhUCisJQUxJR04oMTYpCitQUk9MT0dVRShtcG5fbW9kXzFfMXApCisJcHVzaAklZWJ4CisJbW92CTgoJWVzcCksIGFwCisJbW92CTEyKCVlc3ApLCBuCisJbW92CTIwKCVlc3ApLCAlZWN4CisJbW92ZAk4KCVlY3gpLCBCMW1vZGIKKwltb3ZkCTEyKCVlY3gpLCBCMm1vZGIKKworCWxlYQktNChhcCxuLDQpLCBhcAorCitDIEZJWE1FOiBTZWUgY29tbWVudCBpbiBnZW5lcmljL21vZF8xXzEuYy4KKwltb3ZkCShhcCksICVtbTcKKwltb3ZkCS00KGFwKSwgJW1tNAorCXBtdWx1ZHEgQjFtb2RiLCAlbW03CisJcGFkZHEJJW1tNCwgJW1tNworCWFkZAkkLTIsIG4KKwlqeglMKGVuZCkKKworCUFMSUdOKDgpCitMKHRvcCk6CW1vdnEJJW1tNywgJW1tNgorCXBzcmxxCSQzMiwgJW1tNwkJQyByaAorCW1vdmQJLTgoYXApLCAlbW0wCisJYWRkCSQtNCwgYXAKKwlwbXVsdWRxCUIybW9kYiwgJW1tNworCXBtdWx1ZHEJQjFtb2RiLCAlbW02CisJYWRkCSQtMSwgbgorCXBhZGRxCSVtbTAsICVtbTcKKwlwYWRkcQklbW02LCAlbW03CisJam56CUwodG9wKQorCitMKGVuZCk6CXBjbXBlcWQJJW1tNCwgJW1tNAorCXBzcmxxCSQzMiwgJW1tNAkJQyAweDAwMDAwMDAwRkZGRkZGRkYKKwlwYW5kCSVtbTcsICVtbTQJCUMgcmwKKwlwc3JscQkkMzIsICVtbTcJCUMgcmgKKwlwbXVsdWRxCUIxbW9kYiwgJW1tNwkJQyByaCxjbAorCXBhZGRxCSVtbTQsICVtbTcJCUMgcmgscmwKKwltb3ZkCTQoJWVjeCksICVtbTQJCUMgY250CisJcHNsbHEJJW1tNCwgJW1tNwkJQyByaCxybCBub3JtYWxpemVkCisJbW92cQklbW03LCAlbW0yCQlDIHJsIGluIGxvdyBoYWxmCisJcHNybHEJJDMyLCAlbW03CQlDIHJoCisJbW92ZAkoJWVjeCksICVtbTEJCUMgYmkKKwlwbXVsdWRxCSVtbTcsICVtbTEJCUMgcWgscWwKKwlwYWRkcQklbW0yLCAlbW0xCQlDIHFoLTEscWwKKwltb3ZkCSVtbTEsICVlY3gJCUMgcWwKKwlwc3JscQkkMzIsICVtbTEJCUMgcWgtMQorCW1vdmQJMTYoJWVzcCksICVtbTMJCUMgYgorCXBtdWx1ZHEJJW1tMSwgJW1tMwkJQyAocWgtMSkgKiBiCisJcHN1YnEJJW1tMywgJW1tMgkJQyByIGluIGxvdyBoYWxmIChjb3VsZCB1c2UgcHN1YmQpCisJbW92ZAklbW0yLCAlZWF4CQlDIHIKKwltb3YJMTYoJWVzcCksICVlYngKKwlzdWIJJWVieCwgJWVheAkJQyByCisJY21wCSVlYXgsICVlY3gKKwlsZWEJKCVlYXgsJWVieCksICVlZHgKKwljbW92YygJJWVkeCwgJWVheCkKKwltb3ZkCSVtbTQsICVlY3gJCUMgY250CisJY21wCSVlYngsICVlYXgKKwlqYWUJTChmaXgpCisJZW1tcworCXBvcAklZWJ4CisJc2hyCSVjbCwgJWVheAorCXJldAorCitMKGZpeCk6CXN1YgklZWJ4LCAlZWF4CisJZW1tcworCXBvcAklZWJ4CisJc2hyCSVjbCwgJWVheAorCXJldAorRVBJTE9HVUUoKQorCitQUk9MT0dVRShtcG5fbW9kXzFfMXBfY3BzKQorQyBDQVVUSU9OOiBUaGlzIGlzIHRoZSBzYW1lIGNvZGUgYXMgaW4gazcvbW9kXzFfMS5hc20KKwlwdXNoCSVlYnAKKwltb3YJMTIoJWVzcCksICVlYnAKKwlwdXNoCSVlc2kKKwlic3IJJWVicCwgJWVjeAorCXB1c2gJJWVieAorCXhvcgkkMzEsICVlY3gKKwltb3YJMTYoJWVzcCksICVlc2kKKwlzYWwJJWNsLCAlZWJwCisJbW92CSVlYnAsICVlZHgKKwlub3QJJWVkeAorCW1vdgkkLTEsICVlYXgKKwlkaXYJJWVicAorCW1vdgklZWF4LCAoJWVzaSkJCUMgc3RvcmUgYmkKKwltb3YJJWVjeCwgNCglZXNpKQkJQyBzdG9yZSBjbnQKKwl4b3IJJWVieCwgJWVieAorCXN1YgklZWJwLCAlZWJ4CisJbW92CSQxLCAlZWR4CisJc2hsZAklY2wsICVlYXgsICVlZHgKKwlpbXVsCSVlZHgsICVlYngKKwltdWwJJWVieAorCWFkZAklZWJ4LCAlZWR4CisJbm90CSVlZHgKKwlpbXVsCSVlYnAsICVlZHgKKwlhZGQJJWVkeCwgJWVicAorCWNtcAklZWR4LCAlZWF4CisJY21vdmMoCSVlYnAsICVlZHgpCisJc2hyCSVjbCwgJWVieAorCW1vdgklZWJ4LCA4KCVlc2kpCQlDIHN0b3JlIEIxbW9kYgorCXNocgklY2wsICVlZHgKKwltb3YJJWVkeCwgMTIoJWVzaSkJCUMgc3RvcmUgQjJtb2RiCisJcG9wCSVlYngKKwlwb3AJJWVzaQorCXBvcAklZWJwCisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtNC9zc2UyL21vZF8xXzQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bTQvc3NlMi9tb2RfMV80LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjJlZGI2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bTQvc3NlMi9tb2RfMV80LmFzbQpAQCAtMCwwICsxLDI2OSBAQAorZG5sICB4ODYtMzIgbXBuX21vZF8xc180cCBmb3IgUGVudGl1bSA0IGFuZCBQNiBtb2RlbHMgd2l0aCBTU0UyIChpLmUuIDksRCxFLEYpLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3Jiam9ybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDIFRPRE86CitDICAqIE9wdGltaXplLiAgVGhlIHByZXNlbnQgY29kZSB3YXMgd3JpdHRlbiBxdWl0ZSBzdHJhaWdodGZvcndhcmRseS4KK0MgICogT3B0aW1pemUgcG9zdC1sb29wIHJlZHVjdGlvbiBjb2RlLgorQyAgKiBXcml0ZSBhIGNwcyBmdW5jdGlvbiB0aGF0IHVzZXMgc3NlMiBpbnNucy4KKworQwkJCSAgICBjeWNsZXMvbGltYgorQyBQNiBtb2RlbCAwLTgsMTAtMTIJCS0KK0MgUDYgbW9kZWwgOSAgIChCYW5pYXMpCQk/CitDIFA2IG1vZGVsIDEzICAoRG90aGFuKQkJMy40CitDIFA0IG1vZGVsIDAtMSAoV2lsbGFtZXR0ZSkJPworQyBQNCBtb2RlbCAyICAgKE5vcnRod29vZCkJNAorQyBQNCBtb2RlbCAzLTQgKFByZXNjb3R0KQk0LjUKKworQyBJTlBVVCBQQVJBTUVURVJTCitDIGFwCQlzcCArIDQKK0MgbgkJc3AgKyA4CitDIGIJCXNwICsgMTIKK0MgY3BzCQlzcCArIDE2CisKK2RlZmluZShgQjFtb2RiJywgYCVtbTEnKQorZGVmaW5lKGBCMm1vZGInLCBgJW1tMicpCitkZWZpbmUoYEIzbW9kYicsIGAlbW0zJykKK2RlZmluZShgQjRtb2RiJywgYCVtbTQnKQorZGVmaW5lKGBCNW1vZGInLCBgJW1tNScpCitkZWZpbmUoYGFwJywgICAgIGAlZWR4JykKK2RlZmluZShgbicsICAgICAgYCVlYXgnKQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigxNikKK1BST0xPR1VFKG1wbl9tb2RfMXNfNHApCisJcHVzaAklZWJ4CisJbW92CTgoJWVzcCksIGFwCisJbW92CTEyKCVlc3ApLCBuCisJbW92CTIwKCVlc3ApLCAlZWN4CisKKwltb3ZkCTgoJWVjeCksIEIxbW9kYgorCW1vdmQJMTIoJWVjeCksIEIybW9kYgorCW1vdmQJMTYoJWVjeCksIEIzbW9kYgorCW1vdmQJMjAoJWVjeCksIEI0bW9kYgorCW1vdmQJMjQoJWVjeCksIEI1bW9kYgorCisJbW92CW4sICVlYngKKwlsZWEJLTQoYXAsbiw0KSwgYXAKKwlhbmQJJDMsICVlYngKKwlqZQlMKGIwKQorCWNtcAkkMiwgJWVieAorCWpjCUwoYjEpCisJamUJTChiMikKKworTChiMyk6CW1vdmQJLTQoYXApLCAlbW03CisJcG11bHVkcQlCMW1vZGIsICVtbTcKKwltb3ZkCS04KGFwKSwgJW1tNgorCXBhZGRxCSVtbTYsICVtbTcKKwltb3ZkCShhcCksICVtbTYKKwlwbXVsdWRxCUIybW9kYiwgJW1tNgorCXBhZGRxCSVtbTYsICVtbTcKKwlsZWEJLTI0KGFwKSwgYXAKKwlhZGQJJC0zLCBuCisJanoJTChlbmQpCisJam1wCUwodG9wKQorCitMKGIwKToJbW92ZAktOChhcCksICVtbTcKKwlwbXVsdWRxCUIxbW9kYiwgJW1tNworCW1vdmQJLTEyKGFwKSwgJW1tNgorCXBhZGRxCSVtbTYsICVtbTcKKwltb3ZkCS00KGFwKSwgJW1tNgorCXBtdWx1ZHEJQjJtb2RiLCAlbW02CisJcGFkZHEJJW1tNiwgJW1tNworCW1vdmQJKGFwKSwgJW1tNgorCXBtdWx1ZHEJQjNtb2RiLCAlbW02CisJcGFkZHEJJW1tNiwgJW1tNworCWxlYQktMjgoYXApLCBhcAorCWFkZAkkLTQsIG4KKwlqeglMKGVuZCkKKwlqbXAJTCh0b3ApCisKK0woYjEpOgltb3ZkCShhcCksICVtbTcKKwlsZWEJLTE2KGFwKSwgYXAKKwlkZWMJbgorCWp6CUwoeCkKKwlqbXAJTCh0b3ApCisKK0woYjIpOgltb3ZkCS00KGFwKSwgJW1tNwkJQyBybAorCXB1bnBja2xkcSAoYXApLCAlbW03CQlDIHJoCisJbGVhCS0yMChhcCksIGFwCisJYWRkCSQtMiwgbgorCWp6CUwoZW5kKQorCisJQUxJR04oOCkKK0wodG9wKToJbW92ZAk0KGFwKSwgJW1tMAorCXBtdWx1ZHEJQjFtb2RiLCAlbW0wCisJbW92ZAkwKGFwKSwgJW1tNgorCXBhZGRxCSVtbTYsICVtbTAKKworCW1vdmQJOChhcCksICVtbTYKKwlwbXVsdWRxCUIybW9kYiwgJW1tNgorCXBhZGRxCSVtbTYsICVtbTAKKworCW1vdmQJMTIoYXApLCAlbW02CisJcG11bHVkcQlCM21vZGIsICVtbTYKKwlwYWRkcQklbW02LCAlbW0wCisKKwltb3ZxCSVtbTcsICVtbTYKKwlwc3JscQkkMzIsICVtbTcJCUMgcmgKKwlwbXVsdWRxCUI1bW9kYiwgJW1tNworCXBtdWx1ZHEJQjRtb2RiLCAlbW02CisKKwlwYWRkcQklbW0wLCAlbW03CisJcGFkZHEJJW1tNiwgJW1tNworCisJYWRkCSQtMTYsIGFwCisJYWRkCSQtNCwgbgorCWpueglMKHRvcCkKKworTChlbmQpOglwY21wZXFkCSVtbTQsICVtbTQKKwlwc3JscQkkMzIsICVtbTQJCUMgMHgwMDAwMDAwMEZGRkZGRkZGCisJcGFuZAklbW03LCAlbW00CQlDIHJsCisJcHNybHEJJDMyLCAlbW03CQlDIHJoCisJcG11bHVkcQlCMW1vZGIsICVtbTcJCUMgcmgsY2wKKwlwYWRkcQklbW00LCAlbW03CQlDIHJoLHJsCitMKHgpOgltb3ZkCTQoJWVjeCksICVtbTQJCUMgY250CisJcHNsbHEJJW1tNCwgJW1tNwkJQyByaCxybCBub3JtYWxpemVkCisJbW92cQklbW03LCAlbW0yCQlDIHJsIGluIGxvdyBoYWxmCisJcHNybHEJJDMyLCAlbW03CQlDIHJoCisJbW92ZAkoJWVjeCksICVtbTEJCUMgYmkKKwlwbXVsdWRxCSVtbTcsICVtbTEJCUMgcWgscWwKKwlwYWRkcQklbW0yLCAlbW0xCQlDIHFoLTEscWwKKwltb3ZkCSVtbTEsICVlY3gJCUMgcWwKKwlwc3JscQkkMzIsICVtbTEJCUMgcWgtMQorCW1vdmQJMTYoJWVzcCksICVtbTMJCUMgYgorCXBtdWx1ZHEJJW1tMSwgJW1tMwkJQyAocWgtMSkgKiBiCisJcHN1YnEJJW1tMywgJW1tMgkJQyByIGluIGxvdyBoYWxmIChjb3VsZCB1c2UgcHN1YmQpCisJbW92ZAklbW0yLCAlZWF4CQlDIHIKKwltb3YJMTYoJWVzcCksICVlYngKKwlzdWIJJWVieCwgJWVheAkJQyByCisJY21wCSVlYXgsICVlY3gKKwlsZWEJKCVlYXgsJWVieCksICVlZHgKKwljbW92YygJJWVkeCwgJWVheCkKKwltb3ZkCSVtbTQsICVlY3gJCUMgY250CisJY21wCSVlYngsICVlYXgKKwlqYWUJTChmaXgpCisJZW1tcworCXBvcAklZWJ4CisJc2hyCSVjbCwgJWVheAorCXJldAorCitMKGZpeCk6CXN1YgklZWJ4LCAlZWF4CisJZW1tcworCXBvcAklZWJ4CisJc2hyCSVjbCwgJWVheAorCXJldAorRVBJTE9HVUUoKQorCisJQUxJR04oMTYpCitQUk9MT0dVRShtcG5fbW9kXzFzXzRwX2NwcykKK0MgQ0FVVElPTjogVGhpcyBpcyB0aGUgc2FtZSBjb2RlIGFzIGluIGs3L21vZF8xXzQuYXNtCisJcHVzaAklZWJwCisJcHVzaAklZWRpCisJcHVzaAklZXNpCisJcHVzaAklZWJ4CisJbW92CTIwKCVlc3ApLCAlZWJwCQlDIEZJWE1FOiBhdm9pZCBicCBmb3IgMC1pZHgKKwltb3YJMjQoJWVzcCksICVlYngKKwlic3IJJWVieCwgJWVjeAorCXhvcgkkMzEsICVlY3gKKwlzYWwJJWNsLCAlZWJ4CQlDIGIgPDwgY250CisJbW92CSVlYngsICVlZHgKKwlub3QJJWVkeAorCW1vdgkkLTEsICVlYXgKKwlkaXYJJWVieAorCXhvcgklZWRpLCAlZWRpCisJc3ViCSVlYngsICVlZGkKKwltb3YJJDEsICVlc2kKKwltb3YJJWVheCwgKCVlYnApCQlDIHN0b3JlIGJpCisJbW92CSVlY3gsIDQoJWVicCkJCUMgc3RvcmUgY250CisJc2hsZAklY2wsICVlYXgsICVlc2kKKwlpbXVsCSVlZGksICVlc2kKKwltb3YJJWVheCwgJWVkaQorCW11bAklZXNpCisKKwlhZGQJJWVzaSwgJWVkeAorCXNocgklY2wsICVlc2kKKwltb3YJJWVzaSwgOCglZWJwKQkJQyBzdG9yZSBCMW1vZGIKKworCW5vdAklZWR4CisJaW11bAklZWJ4LCAlZWR4CisJbGVhCSglZWR4LCVlYngpLCAlZXNpCisJY21wCSVlZHgsICVlYXgKKwljbW92bmMoCSVlZHgsICVlc2kpCisJbW92CSVlZGksICVlYXgKKwltdWwJJWVzaQorCisJYWRkCSVlc2ksICVlZHgKKwlzaHIJJWNsLCAlZXNpCisJbW92CSVlc2ksIDEyKCVlYnApCQlDIHN0b3JlIEIybW9kYgorCisJbm90CSVlZHgKKwlpbXVsCSVlYngsICVlZHgKKwlsZWEJKCVlZHgsJWVieCksICVlc2kKKwljbXAJJWVkeCwgJWVheAorCWNtb3ZuYygJJWVkeCwgJWVzaSkKKwltb3YJJWVkaSwgJWVheAorCW11bAklZXNpCisKKwlhZGQJJWVzaSwgJWVkeAorCXNocgklY2wsICVlc2kKKwltb3YJJWVzaSwgMTYoJWVicCkJCUMgc3RvcmUgQjNtb2RiCisKKwlub3QJJWVkeAorCWltdWwJJWVieCwgJWVkeAorCWxlYQkoJWVkeCwlZWJ4KSwgJWVzaQorCWNtcAklZWR4LCAlZWF4CisJY21vdm5jKAklZWR4LCAlZXNpKQorCW1vdgklZWRpLCAlZWF4CisJbXVsCSVlc2kKKworCWFkZAklZXNpLCAlZWR4CisJc2hyCSVjbCwgJWVzaQorCW1vdgklZXNpLCAyMCglZWJwKQkJQyBzdG9yZSBCNG1vZGIKKworCW5vdAklZWR4CisJaW11bAklZWJ4LCAlZWR4CisJYWRkCSVlZHgsICVlYngKKwljbXAJJWVkeCwgJWVheAorCWNtb3ZuYygJJWVkeCwgJWVieCkKKworCXNocgklY2wsICVlYngKKwltb3YJJWVieCwgMjQoJWVicCkJCUMgc3RvcmUgQjVtb2RiCisKKwlwb3AJJWVieAorCXBvcAklZXNpCisJcG9wCSVlZGkKKwlwb3AJJWVicAorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bTQvc3NlMi9tb2RfMzRsc3ViMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtNC9zc2UyL21vZF8zNGxzdWIxLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWUyNWI3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bTQvc3NlMi9tb2RfMzRsc3ViMS5hc20KQEAgLTAsMCArMSwxNzUgQEAKK2RubCAgSW50ZWwgUGVudGl1bSA0IG1wbl9tb2RfMzRsc3ViMSAtLSByZW1haW5kZXIgbW9kdWxvIDJeMjQtMS4KKworZG5sICBDb3B5cmlnaHQgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQyBQZW50aXVtNDogMS4wIGN5Y2xlcy9saW1iCisKKworQyBtcF9saW1iX3QgbXBuX21vZF8zNGxzdWIxIChtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSkKK0MKK0MgRW5oYW5jZW1lbnRzOgorQworQyBUaGVyZSBtaWdodCBhIGNvdXBsZSBvZiBjeWNsZXMgdG8gc2F2ZSBieSB1c2luZyBwbGFpbiBpbnRlZ2VyIGNvZGUgZm9yCitDIG1vcmUgc21hbGwgc2l6ZXMuICAyIGxpbWJzIG1lYXN1cmVzIGFib3V0IDIwIGN5Y2xlcywgYnV0IDMgbGltYnMganVtcHMgdG8KK0MgYWJvdXQgNDYgKGluY2x1c2l2ZSBvZiBzb21lIGZ1bmN0aW9uIGNhbGwgb3ZlcmhlYWRzKS4KKworZGVmZnJhbWUoUEFSQU1fU0laRSwgOCkKK2RlZmZyYW1lKFBBUkFNX1NSQywgIDQpCisKK2RubCAgcmUtdXNlIHBhcmFtZXRlciBzcGFjZQorZGVmaW5lKFNBVkVfRUJYLCBgUEFSQU1fU1JDJykKK2RlZmluZShTQVZFX0VTSSwgYFBBUkFNX1NJWkUnKQorCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX21vZF8zNGxzdWIxKQorZGVmbGl0KGBGUkFNRScsMCkKKworCW1vdmwJUEFSQU1fU0laRSwgJWVjeAorCW1vdmwJUEFSQU1fU1JDLCAlZWR4CisJbW92bAkoJWVkeCksICVlYXgKKworCXN1YmwJJDIsICVlY3gKKwlqYQlMKHRocmVlX29yX21vcmUpCisJam5lCUwob25lKQorCisJbW92bAk0KCVlZHgpLCAlZWR4CisJbW92bAklZWF4LCAlZWN4CisJc2hybAkkMjQsICVlYXgJCUMgc3JjWzBdIGhpZ2gKKworCWFuZGwJJDB4MDBGRkZGRkYsICVlY3gJQyBzcmNbMF0gbG93CisJYWRkbAklZWN4LCAlZWF4CisKKwltb3ZsCSVlZHgsICVlY3gKKwlzaGxsCSQ4LCAlZWR4CisKKwlzaHJsCSQxNiwgJWVjeAkJQyBzcmNbMV0gbG93CisJYWRkbAklZWN4LCAlZWF4CisKKwlhbmRsCSQweDAwRkZGRjAwLCAlZWR4CUMgc3JjWzFdIGhpZ2gKKwlhZGRsCSVlZHgsICVlYXgKKworTChvbmUpOgorCXJldAorCisKK0wodGhyZWVfb3JfbW9yZSk6CisJcHhvcgklbW0wLCAlbW0wCisJcHhvcgklbW0xLCAlbW0xCisJcHhvcgklbW0yLCAlbW0yCisKKwlwY21wZXFkCSVtbTcsICVtbTcKKwlwc3JscQkkMzIsICVtbTcJQyAweDAwMDAwMDAwRkZGRkZGRkYsIGxvdyAzMiBiaXRzCisKKwlwY21wZXFkCSVtbTYsICVtbTYKKwlwc3JscQkkNDAsICVtbTYJQyAweDAwMDAwMDAwMDBGRkZGRkYsIGxvdyAyNCBiaXRzCisKK0wodG9wKToKKwlDIGVheAorCUMgZWJ4CisJQyBlY3gJY291bnRlciwgc2l6ZS0yIHRvIDAsIC0xIG9yIC0yCisJQyBlZHgJc3JjLCBpbmNyZW1lbnRpbmcKKwlDCisJQyBtbTAJc3VtIDBtb2QzCisJQyBtbTEJc3VtIDFtb2QzCisJQyBtbTIJc3VtIDJtb2QzCisJQyBtbTMKKwlDIG1tNAorCUMgbW01CisJQyBtbTYJMHgwMDAwMDAwMDAwRkZGRkZGCisJQyBtbTcJMHgwMDAwMDAwMEZGRkZGRkZGCisKKwltb3ZkCSglZWR4KSwgJW1tMworCXBhZGRxCSVtbTMsICVtbTAKKworCW1vdmQJNCglZWR4KSwgJW1tMworCXBhZGRxCSVtbTMsICVtbTEKKworCW1vdmQJOCglZWR4KSwgJW1tMworCXBhZGRxCSVtbTMsICVtbTIKKworCWFkZGwJJDEyLCAlZWR4CisJc3VibAkkMywgJWVjeAorCWphCUwodG9wKQorCisKKwlDIGVjeCBpcyAtMiwgLTEgb3IgMCByZXByZXNlbnRpbmcgMCwgMSBvciAyIG1vcmUgbGltYnMsIHJlc3BlY3RpdmVseQorCisJYWRkbAkkMSwgJWVjeAorCWpzCUwoY29tYmluZSkJCUMgMCBtb3JlCisKKwltb3ZkCSglZWR4KSwgJW1tMworCXBhZGRxCSVtbTMsICVtbTAKKworCWp6CUwoY29tYmluZSkJCUMgMSBtb3JlCisKKwltb3ZkCTQoJWVkeCksICVtbTMKKwlwYWRkcQklbW0zLCAlbW0xCisKK0woY29tYmluZSk6CisJbW92cQklbW03LCAlbW0zCQlDIGxvdyBoYWx2ZXMKKwlwYW5kCSVtbTAsICVtbTMKKworCW1vdnEJJW1tNywgJW1tNAorCXBhbmQJJW1tMSwgJW1tNAorCisJbW92cQklbW03LCAlbW01CisJcGFuZAklbW0yLCAlbW01CisKKwlwc3JscQkkMzIsICVtbTAJCUMgaGlnaCBoYWx2ZXMKKwlwc3JscQkkMzIsICVtbTEKKwlwc3JscQkkMzIsICVtbTIKKworCXBhZGRxCSVtbTAsICVtbTQJCUMgZm9sZCBoaWdoIGhhbHZlcyB0byBnaXZlIDMzIGJpdHMgZWFjaAorCXBhZGRxCSVtbTEsICVtbTUKKwlwYWRkcQklbW0yLCAlbW0zCisKKwlwc2xscQkkOCwgJW1tNAkJQyBjb21iaW5lIGF0IHJlc3BlY3RpdmUgb2Zmc2V0cworCXBzbGxxCSQxNiwgJW1tNQorCXBhZGRxCSVtbTQsICVtbTMKKwlwYWRkcQklbW01LCAlbW0zCQlDIDB4MDAwY3h4eHh4eHh4eHh4eCwgNTAgYml0cworCisJcGFuZAklbW0zLCAlbW02CQlDIGZvbGQgYXQgMjQgYml0cworCXBzcmxxCSQyNCwgJW1tMworCisJcGFkZHEJJW1tNiwgJW1tMworCW1vdmQJJW1tMywgJWVheAorCisJQVNTRVJUKHosCUMgbm90aGluZyBsZWZ0IGluIGhpZ2ggZHdvcmQKKwlgcHNybHEJJDMyLCAlbW0zCisJbW92ZAklbW0zLCAlZWN4CisJb3JsCSVlY3gsICVlY3gnKQorCisJZW1tcworCXJldAorCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtNC9zc2UyL21vZGUxby5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtNC9zc2UyL21vZGUxby5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE5ZWYzMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW00L3NzZTIvbW9kZTFvLmFzbQpAQCAtMCwwICsxLDE3NSBAQAorZG5sICBJbnRlbCBQZW50aXVtLTQgbXBuX21vZGV4YWN0XzFfb2RkIC0tIG1wbiBieSBsaW1iIGV4YWN0IHJlbWFpbmRlci4KKworZG5sICBDb3B5cmlnaHQgMjAwMSwgMjAwMiwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MgUDQ6IDE5LjAgY3ljbGVzL2xpbWIKKworCitDIG1wX2xpbWJfdCBtcG5fbW9kZXhhY3RfMV9vZGQgKG1wX3NyY3B0ciBzcmMsIG1wX3NpemVfdCBzaXplLAorQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcF9saW1iX3QgZGl2aXNvcik7CitDIG1wX2xpbWJfdCBtcG5fbW9kZXhhY3RfMWNfb2RkIChtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSwKK0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wX2xpbWJfdCBkaXZpc29yLCBtcF9saW1iX3QgY2FycnkpOworQworCitkZWZmcmFtZShQQVJBTV9DQVJSWSwgIDE2KQorZGVmZnJhbWUoUEFSQU1fRElWSVNPUiwxMikKK2RlZmZyYW1lKFBBUkFNX1NJWkUsICAgOCkKK2RlZmZyYW1lKFBBUkFNX1NSQywgICAgNCkKKworCVRFWFQKKworCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX21vZGV4YWN0XzFjX29kZCkKK2RlZmxpdChgRlJBTUUnLDApCisKKwltb3ZkCVBBUkFNX0NBUlJZLCAlbW0xCisJam1wCUwoc3RhcnRfMWMpCisKK0VQSUxPR1VFKCkKKworCisJQUxJR04oMTYpCitQUk9MT0dVRShtcG5fbW9kZXhhY3RfMV9vZGQpCitkZWZsaXQoYEZSQU1FJywwKQorCisJcHhvcgklbW0xLCAlbW0xCQlDIGNhcnJ5IGxpbWIKK0woc3RhcnRfMWMpOgorCW1vdmwJUEFSQU1fRElWSVNPUiwgJWVheAorCisJbW92ZAlQQVJBTV9ESVZJU09SLCAlbW03CisKKwlzaHJsCSVlYXgKKworCWFuZGwJJDEyNywgJWVheAkJQyBkLzIsIDcgYml0cworCitpZmRlZihgUElDJyxgCisJTEVBKAliaW52ZXJ0X2xpbWJfdGFibGUsICVlZHgpCisJbW92emJsCSglZWF4LCVlZHgpLCAlZWF4CQlDIGludiA4IGJpdHMKKycsYAorCW1vdnpibAliaW52ZXJ0X2xpbWJfdGFibGUoJWVheCksICVlYXgJQyBpbnYgOCBiaXRzCisnKQorCisJQworCisJbW92ZAklZWF4LCAlbW02CQlDIGludgorCisJbW92ZAklZWF4LCAlbW0wCQlDIGludgorCisJcG11bHVkcQklbW02LCAlbW02CQlDIGludippbnYKKworCUMKKworCXBtdWx1ZHEJJW1tNywgJW1tNgkJQyBpbnYqaW52KmQKKwlwYWRkZAklbW0wLCAlbW0wCQlDIDIqaW52CisKKwlDCisKKwlwc3ViZAklbW02LCAlbW0wCQlDIGludiA9IDIqaW52IC0gaW52KmludipkCisJcHhvcgklbW02LCAlbW02CisKKwlwYWRkZAklbW0wLCAlbW02CisJcG11bHVkcQklbW0wLCAlbW0wCQlDIGludippbnYKKworCUMKKworCXBtdWx1ZHEJJW1tNywgJW1tMAkJQyBpbnYqaW52KmQKKwlwYWRkZAklbW02LCAlbW02CQlDIDIqaW52CisKKworCW1vdmwJUEFSQU1fU1JDLCAlZWF4CisJbW92bAlQQVJBTV9TSVpFLCAlZWN4CisKKwlDCisKKwlwc3ViZAklbW0wLCAlbW02CQlDIGludiA9IDIqaW52IC0gaW52KmludipkCisKKwlBU1NFUlQoZSxgCUMgZXhwZWN0IGQqaW52ID09IDEgbW9kIDJeR01QX0xJTUJfQklUUworCXB1c2hsCSVlYXgJRlJBTUVfcHVzaGwoKQorCW1vdmQJJW1tNiwgJWVheAorCWltdWwJUEFSQU1fRElWSVNPUiwgJWVheAorCWNtcGwJJDEsICVlYXgKKwlwb3BsCSVlYXgJRlJBTUVfcG9wbCgpJykKKworCXB4b3IJJW1tMCwgJW1tMAkJQyBjYXJyeSBiaXQKKworCitDIFRoZSBkZXBlbmRlbnQgY2hhaW4gaGVyZSBpcyBhcyBmb2xsb3dzLgorQworQwkJCQkJbGF0ZW5jeQorQwlwc3VicQkgcyA9IChzcmMtY2JpdCkgLSBjbGltYgkgICAyCitDCXBtdWx1ZHEJIHEgPSBzKmludmVyc2UJCSAgIDgKK0MJcG11bHVkcQkgcHJvZCA9IHEqZGl2aXNvcgkgICA4CitDCXBzcmxxCSBjbGltYiA9IGhpZ2gocHJvZCkJICAgMgorQwkJCQkJICAtLQorQwkJCQkJICAyMAorQworQyBZZXQgdGhlIGxvb3AgbWVhc3VyZXMgMTkuMCBjL2wsIHNvIG9idmlvdXNseSB0aGVyZSdzIHNvbWV0aGluZyBnYWluZWQKK0MgdGhlcmUgb3ZlciBhIHN0cmFpZ2h0IHJlYWRpbmcgb2YgdGhlIGNoaXAgZG9jdW1lbnRhdGlvbi4KKworTCh0b3ApOgorCUMgZWF4CXNyYywgaW5jcmVtZW50aW5nCisJQyBlYngKKwlDIGVjeAljb3VudGVyLCBsaW1icworCUMgZWR4CisJQworCUMgbW0wCWNhcnJ5IGJpdAorCUMgbW0xCWNhcnJ5IGxpbWIKKwlDIG1tNglpbnZlcnNlCisJQyBtbTcJZGl2aXNvcgorCisJbW92ZAkoJWVheCksICVtbTIKKwlhZGRsCSQ0LCAlZWF4CisKKwlwc3VicQklbW0wLCAlbW0yCQlDIHNyYyAtIGNiaXQKKworCXBzdWJxCSVtbTEsICVtbTIJCUMgc3JjIC0gY2JpdCAtIGNsaW1iCisJbW92cQklbW0yLCAlbW0wCisJcHNybHEJJDYzLCAlbW0wCQlDIG5ldyBjYml0CisKKwlwbXVsdWRxCSVtbTYsICVtbTIJCUMgcyppbnZlcnNlCisKKwltb3ZxCSVtbTcsICVtbTEKKwlwbXVsdWRxCSVtbTIsICVtbTEJCUMgcSpkaXZpc29yCisJcHNybHEJJDMyLCAlbW0xCQlDIG5ldyBjbGltYgorCisJc3VibAkkMSwgJWVjeAorCWpueglMKHRvcCkKKworCitMKGRvbmUpOgorCXBhZGRxCSVtbTEsICVtbTAKKwltb3ZkCSVtbTAsICVlYXgKKwllbW1zCisJcmV0CisKK0VQSUxPR1VFKCkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bTQvc3NlMi9tdWxfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtNC9zc2UyL211bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzQ3YjhiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bTQvc3NlMi9tdWxfMS5hc20KQEAgLTAsMCArMSwxNjQgQEAKK2RubCAgbXBuX211bF8xIGZvciBQZW50aXVtIDQgYW5kIFA2IG1vZGVscyB3aXRoIFNTRTIgKGkuZS4sIDksRCxFLEYpLgorCitkbmwgIENvcHlyaWdodCAyMDA1LCAyMDA3LCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgICAgICAgICAgICAgICAgICAgIGN5Y2xlcy9saW1iCitDIFA2IG1vZGVsIDAtOCwxMC0xMgkJLQorQyBQNiBtb2RlbCA5ICAgKEJhbmlhcykJCTQuMTcKK0MgUDYgbW9kZWwgMTMgIChEb3RoYW4pCQk0LjE3CitDIFA0IG1vZGVsIDAtMSAoV2lsbGFtZXR0ZSkJNAorQyBQNCBtb2RlbCAyICAgKE5vcnRod29vZCkJNAorQyBQNCBtb2RlbCAzLTQgKFByZXNjb3R0KQk0LjU1CisKK0MgVE9ETzoKK0MgICogVHdlYWsgZWF4L2VkeCBvZmZzZXRzIGluIGxvb3AgYXMgdG8gc2F2ZSBzb21lIGxlYSdzCitDICAqIFBlcmhhcHMgc29mdHdhcmUgcGlwZWxpbmUgc21hbGwtY2FzZSBjb2RlCisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyBycAkJc3AgKyA0CitDIHVwCQlzcCArIDgKK0MgbgkJc3AgKyAxMgorQyB2MAkJc3AgKyAxNgorCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX211bF8xKQorCXB4b3IJJW1tNiwgJW1tNgorTChlbnQpOgltb3YJNCglZXNwKSwgJWVkeAorCW1vdgk4KCVlc3ApLCAlZWF4CisJbW92CTEyKCVlc3ApLCAlZWN4CisJbW92ZAkxNiglZXNwKSwgJW1tNworCWNtcAkkNCwgJWVjeAorCWpuYwlMKGJpZykKKworTChscDApOgltb3ZkCSglZWF4KSwgJW1tMAorCWxlYQk0KCVlYXgpLCAlZWF4CisJbGVhCTQoJWVkeCksICVlZHgKKwlwbXVsdWRxCSVtbTcsICVtbTAKKwlwYWRkcQklbW0wLCAlbW02CisJbW92ZAklbW02LCAtNCglZWR4KQorCXBzcmxxCSQzMiwgJW1tNgorCWRlYwklZWN4CisJam56CUwobHAwKQorCW1vdmQJJW1tNiwgJWVheAorCWVtbXMKKwlyZXQKKworTChiaWcpOglhbmQJJDMsICVlY3gKKwlqZQlMKDApCisJY21wCSQyLCAlZWN4CisJamMJTCgxKQorCWplCUwoMikKKwlqbXAJTCgzKQkJCUMgRklYTUU6IG9uZSBjYXNlIHNob3VsZCBmYWxsIHRocm91Z2gKKworTCgwKToJbW92ZAkoJWVheCksICVtbTMKKwlzdWIJMTIoJWVzcCksICVlY3gJCUMgbG9vcCBjb3VudAorCWxlYQktMTYoJWVheCksICVlYXgKKwlsZWEJLTEyKCVlZHgpLCAlZWR4CisJcG11bHVkcQklbW03LCAlbW0zCisJbW92ZAkyMCglZWF4KSwgJW1tMAorCXBtdWx1ZHEJJW1tNywgJW1tMAorCW1vdmQJMjQoJWVheCksICVtbTEKKwlqbXAJTCgwMCkKKworTCgxKToJbW92ZAkoJWVheCksICVtbTIKKwlzdWIJMTIoJWVzcCksICVlY3gKKwlsZWEJLTEyKCVlYXgpLCAlZWF4CisJbGVhCS04KCVlZHgpLCAlZWR4CisJcG11bHVkcQklbW03LCAlbW0yCisJbW92ZAkxNiglZWF4KSwgJW1tMworCXBtdWx1ZHEJJW1tNywgJW1tMworCW1vdmQJMjAoJWVheCksICVtbTAKKwlqbXAJTCgwMSkKKworTCgyKToJbW92ZAkoJWVheCksICVtbTEKKwlzdWIJMTIoJWVzcCksICVlY3gKKwlsZWEJLTgoJWVheCksICVlYXgKKwlsZWEJLTQoJWVkeCksICVlZHgKKwlwbXVsdWRxCSVtbTcsICVtbTEKKwltb3ZkCTEyKCVlYXgpLCAlbW0yCisJcG11bHVkcQklbW03LCAlbW0yCisJbW92ZAkxNiglZWF4KSwgJW1tMworCWptcAlMKDEwKQorCitMKDMpOgltb3ZkCSglZWF4KSwgJW1tMAorCXN1YgkxMiglZXNwKSwgJWVjeAorCWxlYQktNCglZWF4KSwgJWVheAorCXBtdWx1ZHEJJW1tNywgJW1tMAorCW1vdmQJOCglZWF4KSwgJW1tMQorCXBtdWx1ZHEJJW1tNywgJW1tMQorCW1vdmQJMTIoJWVheCksICVtbTIKKworCUFMSUdOKDE2KQorTCh0b3ApOglwbXVsdWRxCSVtbTcsICVtbTIKKwlwYWRkcQklbW0wLCAlbW02CisJbW92ZAkxNiglZWF4KSwgJW1tMworCW1vdmQJJW1tNiwgMCglZWR4KQorCXBzcmxxCSQzMiwgJW1tNgorTCgxMCk6CXBtdWx1ZHEJJW1tNywgJW1tMworCXBhZGRxCSVtbTEsICVtbTYKKwltb3ZkCTIwKCVlYXgpLCAlbW0wCisJbW92ZAklbW02LCA0KCVlZHgpCisJcHNybHEJJDMyLCAlbW02CitMKDAxKToJcG11bHVkcQklbW03LCAlbW0wCisJcGFkZHEJJW1tMiwgJW1tNgorCW1vdmQJMjQoJWVheCksICVtbTEKKwltb3ZkCSVtbTYsIDgoJWVkeCkKKwlwc3JscQkkMzIsICVtbTYKK0woMDApOglwbXVsdWRxCSVtbTcsICVtbTEKKwlwYWRkcQklbW0zLCAlbW02CisJbW92ZAkyOCglZWF4KSwgJW1tMgorCW1vdmQJJW1tNiwgMTIoJWVkeCkKKwlwc3JscQkkMzIsICVtbTYKKwlsZWEJMTYoJWVheCksICVlYXgKKwlsZWEJMTYoJWVkeCksICVlZHgKKwlhZGQJJDQsICVlY3gKKwlqYQlMKHRvcCkKKworTChlbmQpOglwbXVsdWRxCSVtbTcsICVtbTIKKwlwYWRkcQklbW0wLCAlbW02CisJbW92ZAklbW02LCAwKCVlZHgpCisJcHNybHEJJDMyLCAlbW02CisJcGFkZHEJJW1tMSwgJW1tNgorCW1vdmQJJW1tNiwgNCglZWR4KQorCXBzcmxxCSQzMiwgJW1tNgorCXBhZGRxCSVtbTIsICVtbTYKKwltb3ZkCSVtbTYsIDgoJWVkeCkKKwlwc3JscQkkMzIsICVtbTYKKwltb3ZkCSVtbTYsICVlYXgKKwllbW1zCisJcmV0CitFUElMT0dVRSgpCitQUk9MT0dVRShtcG5fbXVsXzFjKQorCW1vdmQJMjAoJWVzcCksICVtbTYKKwlqbXAJTChlbnQpCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtNC9zc2UyL211bF9iYXNlY2FzZS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtNC9zc2UyL211bF9iYXNlY2FzZS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUzNzc1YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW00L3NzZTIvbXVsX2Jhc2VjYXNlLmFzbQpAQCAtMCwwICsxLDY2MiBAQAorZG5sICBtcG5fbXVsX2Jhc2VjYXNlIGZvciBQZW50aXVtIDQgYW5kIFA2IG1vZGVscyB3aXRoIFNTRTIgKGkuZS4sIDksRCxFLEYpLgorCitkbmwgIENvcHlyaWdodCAyMDAxLCAyMDAyLCAyMDA1LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgVE9ETzoKK0MgICogSW1wcm92ZSBhZC1ob2Mgb3V0ZXIgbG9vcCBjb2RlIGFuZCByZWdpc3RlciBoYW5kbGluZy4gIFNvbWUgZmVlZC1pbgorQyAgICBzY2hlZHVsaW5nIGNvdWxkIGltcHJvdmUgdGhpbmdzIGJ5IHNldmVyYWwgY3ljbGVzIHBlciBvdXRlciBpdGVyYXRpb24uCitDICAqIEluIGNvZGUgZm9yIHVuIDw9IDMsIHRyeSBrZWVwaW5nIGFjY3VtdWxhdGlvbiBvcGVyYW5kcyBpbiByZWdpc3RlcnMsCitDICAgIHdpdGhvdXQgc3RvcmluZyBpbnRlcm1lZGlhdGVzIHRvIHJwLgorQyAgKiBXZSBtaWdodCB3YW50IHRvIGtlZXAgMzIgaW4gYSBmcmVlIG1tIHJlZ2lzdGVyLCBzaW5jZSB0aGUgcmVnaXN0ZXIgZm9ybSBpcworQyAgICAzIGJ5dGVzIGFuZCB0aGUgaW1tZWRpYXRlIGZvcm0gaXMgNCBieXRlcy4gIEFib3V0IDcwIGJ5dGVzIHRvIHNhdmUuCitDICAqIExvb2sgaW50byBkaWZmZXJlbnQgbG9vcCBhbGlnbm1lbnQsIHdlIG5vdyBleHBhbmQgdGhlIGNvZGUgYWJvdXQgNTAgYnl0ZXMKK0MgICAgd2l0aCBwb3NzaWJseSBuZWVkbGVzcyBhbGlnbm1lbnQuCitDICAqIFBlcmhhcHMgcmV3cmFwIGxvb3BzIDAwLDAxLDAyICg2IGxvb3BzKSB0byBhbGxvdyBmYWxsLXRocm91Z2ggZW50cnkuCitDICAqIFVzZSBPU1AsIHNob3VsZCBzb2x2ZSBmZWVkLWluIGxhdGVuY3kgcHJvYmxlbXMuCitDICAqIFNhdmUgYSBmZXcgdGVucyBvZiBieXRlcyBieSBkb2luZyBjcm9zcy1qdW1waW5nIGZvciBMb2VsMCwgZXRjLgorQyAgKiBTYXZlIGFyb3VuZCAxMjAgYnl0ZXMgYnkgcmVtYXBwaW5nICJtIDAiLCAibSAxIiwgIm0gMiIgYW5kICJtIDMiIHJlZ2lzdGVycworQyAgICBzbyB0aGF0IHRoZXkgY2FuIHNoYXJlIGZlZWQtaW4gY29kZSwgYW5kIGNoYW5naW5nIHRoZSBicmFuY2ggdGFyZ2V0cyBmcm9tCitDICAgIEw8bj4gdG8gTG08bm4+LgorCitDICAgICAgICAgICAgICAgICAgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgUDYgbW9kZWwgOSAgIChCYW5pYXMpICAgICAgICAgPworQyBQNiBtb2RlbCAxMyAgKERvdGhhbikgICAgICAgICA1LjI0CitDIFA2IG1vZGVsIDE0ICAoWW9uYWgpICAgICAgICAgID8KK0MgUDQgbW9kZWwgMC0xIChXaWxsYW1ldHRlKTogICAgNQorQyBQNCBtb2RlbCAyICAgKE5vcnRod29vZCk6ICAgICA0LjYwIGF0IDMyIGxpbWJzCitDIFA0IG1vZGVsIDMtNCAoUHJlc2NvdHQpOiAgICAgIDQuOTQgYXQgMzIgbGltYnMKKworQyBJTlBVVCBQQVJBTUVURVJTCitDIHJwCQlzcCArIDQKK0MgdXAJCXNwICsgOAorQyB1bgkJc3AgKyAxMgorQyB2cAkJc3AgKyAxNgorQyB2bgkJc3AgKyAyMAorCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX211bF9iYXNlY2FzZSkKKwlwdXNoCSVlc2kKKwlwdXNoCSVlYngKKwltb3YJMTIoJWVzcCksICVlZHgJCUMgcnAKKwltb3YJMTYoJWVzcCksICVlYXgJCUMgdXAKKwltb3YJMjAoJWVzcCksICVlY3gJCUMgdW4KKwltb3YJMjQoJWVzcCksICVlc2kJCUMgdnAKKwltb3YJMjgoJWVzcCksICVlYngJCUMgdm4KKwltb3ZkCSglZXNpKSwgJW1tNwkJQworTChlbnQpOgljbXAJJDMsICVlY3gKKwlqYQlMKGJpZykKKwltb3ZkCSglZWF4KSwgJW1tNgorCXBtdWx1ZHEJJW1tNywgJW1tNgorCWp6CUwodW4zKQorCWNtcAkkMiwgJWVjeAorCWp6CUwodW4yKQorCitMKHVuMSk6CW1vdmQJJW1tNiwgKCVlZHgpCQlDCQkJCXVuPTEKKwlwc3JscQkkMzIsICVtbTYJCUMJCQkJdW49MQorCW1vdmQJJW1tNiwgNCglZWR4KQkJQwkJCQl1bj0xCisJam1wCUwocnRyKQkJCUMJCQkJdW49MQorCitMKHVuMik6CW1vdmQJNCglZWF4KSwgJW1tMQkJQwkJCQl1bj0yCisJcG11bHVkcQklbW03LCAlbW0xCQlDCQkJCXVuPTIKKwltb3ZkCSVtbTYsICglZWR4KQkJQwkJCQl1bj0yCisJcHNybHEJJDMyLCAlbW02CQlDCQkJCXVuPTIKKwlwYWRkcQklbW0xLCAlbW02CQlDCQkJCXVuPTIKKwltb3ZkCSVtbTYsIDQoJWVkeCkJCUMJCQkJdW49MgorCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQl1bj0yCisJbW92ZAklbW02LCA4KCVlZHgpCQlDCQkJCXVuPTIKKyAgICAgIGRlYwklZWJ4CQkJQwkJCQl1bj0yCisgICAgICBqeglMKHJ0cikJCQlDCQkJCXVuPTIKKwltb3ZkCTQoJWVzaSksICVtbTcJCUMJCQkJdW49MgorCW1vdmQJKCVlYXgpLCAlbW02CQlDCQkJCXVuPTIKKwlwbXVsdWRxCSVtbTcsICVtbTYJCUMJCQkJdW49MgorCW1vdmQJNCglZWF4KSwgJW1tMQkJQwkJCQl1bj0yCisJbW92ZAk0KCVlZHgpLCAlbW00CQlDCQkJCXVuPTIKKwlwbXVsdWRxCSVtbTcsICVtbTEJCUMJCQkJdW49MgorCW1vdmQJOCglZWR4KSwgJW1tNQkJQwkJCQl1bj0yCisJcGFkZHEJJW1tNCwgJW1tNgkJQwkJCQl1bj0yCisJcGFkZHEJJW1tMSwgJW1tNQkJQwkJCQl1bj0yCisJbW92ZAklbW02LCA0KCVlZHgpCQlDCQkJCXVuPTIKKwlwc3JscQkkMzIsICVtbTYJCUMJCQkJdW49MgorCXBhZGRxCSVtbTUsICVtbTYJCUMJCQkJdW49MgorCW1vdmQJJW1tNiwgOCglZWR4KQkJQwkJCQl1bj0yCisJcHNybHEJJDMyLCAlbW02CQlDCQkJCXVuPTIKKwltb3ZkCSVtbTYsIDEyKCVlZHgpCQlDCQkJCXVuPTIKK0wocnRyKToJZW1tcworCXBvcAklZWJ4CisJcG9wCSVlc2kKKwlyZXQKKworTCh1bjMpOgltb3ZkCTQoJWVheCksICVtbTEJCUMJCQkJdW49MworCXBtdWx1ZHEJJW1tNywgJW1tMQkJQwkJCQl1bj0zCisJbW92ZAk4KCVlYXgpLCAlbW0yCQlDCQkJCXVuPTMKKwlwbXVsdWRxCSVtbTcsICVtbTIJCUMJCQkJdW49MworCW1vdmQJJW1tNiwgKCVlZHgpCQlDCQkJCXVuPTMKKwlwc3JscQkkMzIsICVtbTYJCUMJCQkJdW49MworCXBhZGRxCSVtbTEsICVtbTYJCUMJCQkJdW49MworCW1vdmQJJW1tNiwgNCglZWR4KQkJQwkJCQl1bj0zCisJcHNybHEJJDMyLCAlbW02CQlDCQkJCXVuPTMKKwlwYWRkcQklbW0yLCAlbW02CQlDCQkJCXVuPTMKKwltb3ZkCSVtbTYsIDgoJWVkeCkJCUMJCQkJdW49MworCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQl1bj0zCisJbW92ZAklbW02LCAxMiglZWR4KQkJQwkJCQl1bj0zCisgICAgICBkZWMJJWVieAkJCUMJCQkJdW49MworICAgICAganoJTChydHIpCQkJQwkJCQl1bj0zCisJbW92ZAk0KCVlc2kpLCAlbW03CQlDCQkJCXVuPTMKKwltb3ZkCSglZWF4KSwgJW1tNgkJQwkJCQl1bj0zCisJcG11bHVkcQklbW03LCAlbW02CQlDCQkJCXVuPTMKKwltb3ZkCTQoJWVheCksICVtbTEJCUMJCQkJdW49MworCW1vdmQJNCglZWR4KSwgJW1tNAkJQwkJCQl1bj0zCisJcG11bHVkcQklbW03LCAlbW0xCQlDCQkJCXVuPTMKKwltb3ZkCTgoJWVheCksICVtbTIJCUMJCQkJdW49MworCW1vdmQJOCglZWR4KSwgJW1tNQkJQwkJCQl1bj0zCisJcG11bHVkcQklbW03LCAlbW0yCQlDCQkJCXVuPTMKKwlwYWRkcQklbW00LCAlbW02CQlDCQkJCXVuPTMKKwlwYWRkcQklbW0xLCAlbW01CQlDCQkJCXVuPTMKKwltb3ZkCTEyKCVlZHgpLCAlbW00CQlDCQkJCXVuPTMKKwltb3ZkCSVtbTYsIDQoJWVkeCkJCUMJCQkJdW49MworCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQl1bj0zCisJcGFkZHEJJW1tNSwgJW1tNgkJQwkJCQl1bj0zCisJcGFkZHEJJW1tMiwgJW1tNAkJQwkJCQl1bj0zCisJbW92ZAklbW02LCA4KCVlZHgpCQlDCQkJCXVuPTMKKwlwc3JscQkkMzIsICVtbTYJCUMJCQkJdW49MworCXBhZGRxCSVtbTQsICVtbTYJCUMJCQkJdW49MworCW1vdmQJJW1tNiwgMTIoJWVkeCkJCUMJCQkJdW49MworCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQl1bj0zCisJbW92ZAklbW02LCAxNiglZWR4KQkJQwkJCQl1bj0zCisgICAgICBkZWMJJWVieAkJCUMJCQkJdW49MworICAgICAganoJTChydHIpCQkJQwkJCQl1bj0zCisJbW92ZAk4KCVlc2kpLCAlbW03CQlDCQkJCXVuPTMKKwltb3ZkCSglZWF4KSwgJW1tNgkJQwkJCQl1bj0zCisJcG11bHVkcQklbW03LCAlbW02CQlDCQkJCXVuPTMKKwltb3ZkCTQoJWVheCksICVtbTEJCUMJCQkJdW49MworCW1vdmQJOCglZWR4KSwgJW1tNAkJQwkJCQl1bj0zCisJcG11bHVkcQklbW03LCAlbW0xCQlDCQkJCXVuPTMKKwltb3ZkCTgoJWVheCksICVtbTIJCUMJCQkJdW49MworCW1vdmQJMTIoJWVkeCksICVtbTUJCUMJCQkJdW49MworCXBtdWx1ZHEJJW1tNywgJW1tMgkJQwkJCQl1bj0zCisJcGFkZHEJJW1tNCwgJW1tNgkJQwkJCQl1bj0zCisJcGFkZHEJJW1tMSwgJW1tNQkJQwkJCQl1bj0zCisJbW92ZAkxNiglZWR4KSwgJW1tNAkJQwkJCQl1bj0zCisJbW92ZAklbW02LCA4KCVlZHgpCQlDCQkJCXVuPTMKKwlwc3JscQkkMzIsICVtbTYJCUMJCQkJdW49MworCXBhZGRxCSVtbTUsICVtbTYJCUMJCQkJdW49MworCXBhZGRxCSVtbTIsICVtbTQJCUMJCQkJdW49MworCW1vdmQJJW1tNiwgMTIoJWVkeCkJCUMJCQkJdW49MworCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQl1bj0zCisJcGFkZHEJJW1tNCwgJW1tNgkJQwkJCQl1bj0zCisJbW92ZAklbW02LCAxNiglZWR4KQkJQwkJCQl1bj0zCisJcHNybHEJJDMyLCAlbW02CQlDCQkJCXVuPTMKKwltb3ZkCSVtbTYsIDIwKCVlZHgpCQlDCQkJCXVuPTMKKwlqbXAJTChydHIpCisKKworTChiaWcpOglwdXNoCSVlZGkKKwlweG9yCSVtbTYsICVtbTYKKwlsZWEJNCglZXNpKSwgJWVzaQorCWFuZAkkMywgJWVjeAorCWp6CUwoMCkKKwljbXAJJDIsICVlY3gKKwlqYwlMKDEpCisJanoJTCgyKQorCWptcAlMKDMpCQkJQyBGSVhNRTogb25lIGNhc2Ugc2hvdWxkIGZhbGwgdGhyb3VnaAorCisKK0woMCk6CW1vdmQJKCVlYXgpLCAlbW0zCQlDCQkJCW0gMAorCXN1YgkyNCglZXNwKSwgJWVjeAkJQyBpbm5lciBsb29wIGNvdW50CQltIDAKKwltb3YJJWVjeCwgMjQoJWVzcCkJCUMgdXBkYXRlIGxvb3AgY291bnQgZm9yIGxhdGVyCW0gMAorCXBtdWx1ZHEJJW1tNywgJW1tMwkJQwkJCQltIDAKKwltb3ZkCTQoJWVheCksICVtbTAJCUMJCQkJbSAwCisJcG11bHVkcQklbW03LCAlbW0wCQlDCQkJCW0gMAorCW1vdmQJOCglZWF4KSwgJW1tMQkJQwkJCQltIDAKKwlqbXAJTChtMDApCQkJQwkJCQltIDAKKwlBTElHTigxNikJCQlDCQkJCW0gMAorTChscG0wKToKKwlwbXVsdWRxCSVtbTcsICVtbTQJCUMJCQkJbSAwCisJcGFkZHEJJW1tMCwgJW1tNgkJQwkJCQltIDAKKwltb3ZkCSglZWF4KSwgJW1tMwkJQwkJCQltIDAKKwltb3ZkCSVtbTYsIC0xMiglZWR4KQkJQwkJCQltIDAKKwlwc3JscQkkMzIsICVtbTYJCUMJCQkJbSAwCisJcG11bHVkcQklbW03LCAlbW0zCQlDCQkJCW0gMAorCXBhZGRxCSVtbTEsICVtbTYJCUMJCQkJbSAwCisJbW92ZAk0KCVlYXgpLCAlbW0wCQlDCQkJCW0gMAorCW1vdmQJJW1tNiwgLTgoJWVkeCkJCUMJCQkJbSAwCisJcHNybHEJJDMyLCAlbW02CQlDCQkJCW0gMAorCXBtdWx1ZHEJJW1tNywgJW1tMAkJQwkJCQltIDAKKwlwYWRkcQklbW00LCAlbW02CQlDCQkJCW0gMAorCW1vdmQJOCglZWF4KSwgJW1tMQkJQwkJCQltIDAKKwltb3ZkCSVtbTYsIC00KCVlZHgpCQlDCQkJCW0gMAorCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQltIDAKK0wobTAwKToJcG11bHVkcQklbW03LCAlbW0xCQlDCQkJCW0gMAorCXBhZGRxCSVtbTMsICVtbTYJCUMJCQkJbSAwCisJbW92ZAkxMiglZWF4KSwgJW1tNAkJQwkJCQltIDAKKwltb3ZkCSVtbTYsICglZWR4KQkJQwkJCQltIDAKKwlwc3JscQkkMzIsICVtbTYJCUMJCQkJbSAwCisJbGVhCTE2KCVlYXgpLCAlZWF4CQlDCQkJCW0gMAorCWxlYQkxNiglZWR4KSwgJWVkeAkJQwkJCQltIDAKKwlhZGQJJDQsICVlY3gJCUMJCQkJbSAwCisJamEJTChscG0wKQkJCUMJCQkJbSAwCisJcG11bHVkcQklbW03LCAlbW00CQlDCQkJCW0gMAorCXBhZGRxCSVtbTAsICVtbTYJCUMJCQkJbSAwCisJbW92ZAklbW02LCAtMTIoJWVkeCkJCUMJCQkJbSAwCisJcHNybHEJJDMyLCAlbW02CQlDCQkJCW0gMAorCXBhZGRxCSVtbTEsICVtbTYJCUMJCQkJbSAwCisJbW92CTE2KCVlc3ApLCAlZWRpCQlDIHJwCQkJCSAgMAorCWptcAlMKHgwKQorCitMKG9scDApOgorCWxlYQk0KCVlZGkpLCAlZWRpCQlDCQkJCWFtIDAKKwltb3ZkCSglZXNpKSwgJW1tNwkJQwkJCQlhbSAwCisJbGVhCTQoJWVzaSksICVlc2kJCUMJCQkJYW0gMAorCW1vdgklZWRpLCAlZWR4CQlDIHJwCQkJCWFtIDAKKwltb3YJMjAoJWVzcCksICVlYXgJCUMgdXAJCQkJYW0gMAorCW1vdmQJKCVlYXgpLCAlbW0zCQlDCQkJCWFtIDAKKwltb3YJMjQoJWVzcCksICVlY3gJCUMgaW5uZXIgbG9vcCBjb3VudAkJYW0gMAorCXB4b3IJJW1tNiwgJW1tNgkJQwkJCQlhbSAwCisJcG11bHVkcQklbW03LCAlbW0zCQlDCQkJCWFtIDAKKwltb3ZkCTQoJWVheCksICVtbTAJCUMJCQkJYW0gMAorCW1vdmQJKCVlZHgpLCAlbW01CQlDCQkJCWFtIDAKKwlwbXVsdWRxCSVtbTcsICVtbTAJCUMJCQkJYW0gMAorCW1vdmQJOCglZWF4KSwgJW1tMQkJQwkJCQlhbSAwCisJcGFkZHEJJW1tMywgJW1tNQkJQwkJCQlhbSAwCisJbW92ZAk0KCVlZHgpLCAlbW00CQlDCQkJCWFtIDAKKwlqbXAJTChhbTAwKQkJCUMJCQkJYW0gMAorCUFMSUdOKDE2KQkJCUMJCQkJbW0gMAorTChsYW0wKToKKwlwbXVsdWRxCSVtbTcsICVtbTIJCUMJCQkJYW0gMAorCXBhZGRxCSVtbTQsICVtbTYJCUMJCQkJYW0gMAorCW1vdmQJKCVlYXgpLCAlbW0zCQlDCQkJCWFtIDAKKwlwYWRkcQklbW0xLCAlbW01CQlDCQkJCWFtIDAKKwltb3ZkCS00KCVlZHgpLCAlbW00CQlDCQkJCWFtIDAKKwltb3ZkCSVtbTYsIC0xMiglZWR4KQkJQwkJCQlhbSAwCisJcHNybHEJJDMyLCAlbW02CQlDCQkJCWFtIDAKKwlwbXVsdWRxCSVtbTcsICVtbTMJCUMJCQkJYW0gMAorCXBhZGRxCSVtbTUsICVtbTYJCUMJCQkJYW0gMAorCW1vdmQJNCglZWF4KSwgJW1tMAkJQwkJCQlhbSAwCisJcGFkZHEJJW1tMiwgJW1tNAkJQwkJCQlhbSAwCisJbW92ZAkoJWVkeCksICVtbTUJCUMJCQkJYW0gMAorCW1vdmQJJW1tNiwgLTgoJWVkeCkJCUMJCQkJYW0gMAorCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQlhbSAwCisJcG11bHVkcQklbW03LCAlbW0wCQlDCQkJCWFtIDAKKwlwYWRkcQklbW00LCAlbW02CQlDCQkJCWFtIDAKKwltb3ZkCTgoJWVheCksICVtbTEJCUMJCQkJYW0gMAorCXBhZGRxCSVtbTMsICVtbTUJCUMJCQkJYW0gMAorCW1vdmQJNCglZWR4KSwgJW1tNAkJQwkJCQlhbSAwCisJbW92ZAklbW02LCAtNCglZWR4KQkJQwkJCQlhbSAwCisJcHNybHEJJDMyLCAlbW02CQlDCQkJCWFtIDAKK0woYW0wMCk6CisJcG11bHVkcQklbW03LCAlbW0xCQlDCQkJCWFtIDAKKwlwYWRkcQklbW01LCAlbW02CQlDCQkJCWFtIDAKKwltb3ZkCTEyKCVlYXgpLCAlbW0yCQlDCQkJCWFtIDAKKwlwYWRkcQklbW0wLCAlbW00CQlDCQkJCWFtIDAKKwltb3ZkCTgoJWVkeCksICVtbTUJCUMJCQkJYW0gMAorCW1vdmQJJW1tNiwgKCVlZHgpCQlDCQkJCWFtIDAKKwlwc3JscQkkMzIsICVtbTYJCUMJCQkJYW0gMAorCWxlYQkxNiglZWF4KSwgJWVheAkJQwkJCQlhbSAwCisJbGVhCTE2KCVlZHgpLCAlZWR4CQlDCQkJCWFtIDAKKwlhZGQJJDQsICVlY3gJCUMJCQkJYW0gMAorCWpueglMKGxhbTApCQkJQwkJCQlhbSAwCisJcG11bHVkcQklbW03LCAlbW0yCQlDCQkJCWFtIDAKKwlwYWRkcQklbW00LCAlbW02CQlDCQkJCWFtIDAKKwlwYWRkcQklbW0xLCAlbW01CQlDCQkJCWFtIDAKKwltb3ZkCS00KCVlZHgpLCAlbW00CQlDCQkJCWFtIDAKKwltb3ZkCSVtbTYsIC0xMiglZWR4KQkJQwkJCQlhbSAwCisJcHNybHEJJDMyLCAlbW02CQlDCQkJCWFtIDAKKwlwYWRkcQklbW01LCAlbW02CQlDCQkJCWFtIDAKKwlwYWRkcQklbW0yLCAlbW00CQlDCQkJCWFtIDAKK0woeDApOgltb3ZkCSVtbTYsIC04KCVlZHgpCQlDCQkJCWFtIDAKKwlwc3JscQkkMzIsICVtbTYJCUMJCQkJYW0gMAorCXBhZGRxCSVtbTQsICVtbTYJCUMJCQkJYW0gMAorCW1vdmQJJW1tNiwgLTQoJWVkeCkJCUMJCQkJYW0gMAorCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQlhbSAwCisJbW92ZAklbW02LCAoJWVkeCkJCUMJCQkJYW0gMAorCWRlYwklZWJ4CQkJQwkJCQlhbSAwCisJam56CUwob2xwMCkJCQlDCQkJCWFtIDAKK0wob2VsMCk6CisJZW1tcwkJCQlDCQkJCSAgIDAKKwlwb3AJJWVkaQkJCUMJCQkJICAgMAorCXBvcAklZWJ4CQkJQwkJCQkgICAwCisJcG9wCSVlc2kJCQlDCQkJCSAgIDAKKwlyZXQJCQkJQwkJCQkgICAwCisKKworTCgxKToJbW92ZAkoJWVheCksICVtbTQJCUMJCQkJbSAxCisJc3ViCTI0KCVlc3ApLCAlZWN4CQlDCQkJCW0gMQorCW1vdgklZWN4LCAyNCglZXNwKQkJQyB1cGRhdGUgbG9vcCBjb3VudCBmb3IgbGF0ZXIJbSAxCisJcG11bHVkcQklbW03LCAlbW00CQlDCQkJCW0gMQorCW1vdmQJNCglZWF4KSwgJW1tMwkJQwkJCQltIDEKKwlwbXVsdWRxCSVtbTcsICVtbTMJCUMJCQkJbSAxCisJbW92ZAk4KCVlYXgpLCAlbW0wCQlDCQkJCW0gMQorCWptcAlMKG0wMSkJCQlDCQkJCW0gMQorCUFMSUdOKDE2KQkJCUMJCQkJbSAxCitMKGxwbTEpOgorCXBtdWx1ZHEJJW1tNywgJW1tNAkJQwkJCQltIDEKKwlwYWRkcQklbW0wLCAlbW02CQlDCQkJCW0gMQorCW1vdmQJNCglZWF4KSwgJW1tMwkJQwkJCQltIDEKKwltb3ZkCSVtbTYsIC04KCVlZHgpCQlDCQkJCW0gMQorCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQltIDEKKwlwbXVsdWRxCSVtbTcsICVtbTMJCUMJCQkJbSAxCisJcGFkZHEJJW1tMSwgJW1tNgkJQwkJCQltIDEKKwltb3ZkCTgoJWVheCksICVtbTAJCUMJCQkJbSAxCisJbW92ZAklbW02LCAtNCglZWR4KQkJQwkJCQltIDEKKwlwc3JscQkkMzIsICVtbTYJCUMJCQkJbSAxCitMKG0wMSk6CXBtdWx1ZHEJJW1tNywgJW1tMAkJQwkJCQltIDEKKwlwYWRkcQklbW00LCAlbW02CQlDCQkJCW0gMQorCW1vdmQJMTIoJWVheCksICVtbTEJCUMJCQkJbSAxCisJbW92ZAklbW02LCAoJWVkeCkJCUMJCQkJbSAxCisJcHNybHEJJDMyLCAlbW02CQlDCQkJCW0gMQorCXBtdWx1ZHEJJW1tNywgJW1tMQkJQwkJCQltIDEKKwlwYWRkcQklbW0zLCAlbW02CQlDCQkJCW0gMQorCW1vdmQJMTYoJWVheCksICVtbTQJCUMJCQkJbSAxCisJbW92ZAklbW02LCA0KCVlZHgpCQlDCQkJCW0gMQorCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQltIDEKKwlsZWEJMTYoJWVheCksICVlYXgJCUMJCQkJbSAxCisJbGVhCTE2KCVlZHgpLCAlZWR4CQlDCQkJCW0gMQorCWFkZAkkNCwgJWVjeAkJQwkJCQltIDEKKwlqYQlMKGxwbTEpCQkJQwkJCQltIDEKKwlwbXVsdWRxCSVtbTcsICVtbTQJCUMJCQkJbSAxCisJcGFkZHEJJW1tMCwgJW1tNgkJQwkJCQltIDEKKwltb3ZkCSVtbTYsIC04KCVlZHgpCQlDCQkJCW0gMQorCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQltIDEKKwlwYWRkcQklbW0xLCAlbW02CQlDCQkJCW0gMQorCW1vdgkxNiglZXNwKSwgJWVkaQkJQyBycAkJCQkgIDEKKwlqbXAJTCh4MSkKKworTChvbHAxKToKKwlsZWEJNCglZWRpKSwgJWVkaQkJQwkJCQlhbSAxCisJbW92ZAkoJWVzaSksICVtbTcJCUMJCQkJYW0gMQorCWxlYQk0KCVlc2kpLCAlZXNpCQlDCQkJCWFtIDEKKwltb3YJJWVkaSwgJWVkeAkJQyBycAkJCQlhbSAxCisJbW92CTIwKCVlc3ApLCAlZWF4CQlDIHVwCQkJCWFtIDEKKwltb3ZkCSglZWF4KSwgJW1tMgkJQwkJCQlhbSAxCisJbW92CTI0KCVlc3ApLCAlZWN4CQlDIGlubmVyIGxvb3AgY291bnQJCWFtIDEKKwlweG9yCSVtbTYsICVtbTYJCUMJCQkJYW0gMQorCXBtdWx1ZHEJJW1tNywgJW1tMgkJQwkJCQlhbSAxCisJbW92ZAk0KCVlYXgpLCAlbW0zCQlDCQkJCWFtIDEKKwltb3ZkCSglZWR4KSwgJW1tNAkJQwkJCQlhbSAxCisJcG11bHVkcQklbW03LCAlbW0zCQlDCQkJCWFtIDEKKwltb3ZkCTgoJWVheCksICVtbTAJCUMJCQkJYW0gMQorCXBhZGRxCSVtbTIsICVtbTQJCUMJCQkJYW0gMQorCW1vdmQJNCglZWR4KSwgJW1tNQkJQwkJCQlhbSAxCisJam1wCUwoYW0wMSkJCQlDCQkJCWFtIDEKKwlBTElHTigxNikJCQlDCQkJCWFtIDEKK0wobGFtMSk6CisJcG11bHVkcQklbW03LCAlbW0yCQlDCQkJCWFtIDEKKwlwYWRkcQklbW00LCAlbW02CQlDCQkJCWFtIDEKKwltb3ZkCTQoJWVheCksICVtbTMJCUMJCQkJYW0gMQorCXBhZGRxCSVtbTEsICVtbTUJCUMJCQkJYW0gMQorCW1vdmQJKCVlZHgpLCAlbW00CQlDCQkJCWFtIDEKKwltb3ZkCSVtbTYsIC04KCVlZHgpCQlDCQkJCWFtIDEKKwlwc3JscQkkMzIsICVtbTYJCUMJCQkJYW0gMQorCXBtdWx1ZHEJJW1tNywgJW1tMwkJQwkJCQlhbSAxCisJcGFkZHEJJW1tNSwgJW1tNgkJQwkJCQlhbSAxCisJbW92ZAk4KCVlYXgpLCAlbW0wCQlDCQkJCWFtIDEKKwlwYWRkcQklbW0yLCAlbW00CQlDCQkJCWFtIDEKKwltb3ZkCTQoJWVkeCksICVtbTUJCUMJCQkJYW0gMQorCW1vdmQJJW1tNiwgLTQoJWVkeCkJCUMJCQkJYW0gMQorCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQlhbSAxCitMKGFtMDEpOgorCXBtdWx1ZHEJJW1tNywgJW1tMAkJQwkJCQlhbSAxCisJcGFkZHEJJW1tNCwgJW1tNgkJQwkJCQlhbSAxCisJbW92ZAkxMiglZWF4KSwgJW1tMQkJQwkJCQlhbSAxCisJcGFkZHEJJW1tMywgJW1tNQkJQwkJCQlhbSAxCisJbW92ZAk4KCVlZHgpLCAlbW00CQlDCQkJCWFtIDEKKwltb3ZkCSVtbTYsICglZWR4KQkJQwkJCQlhbSAxCisJcHNybHEJJDMyLCAlbW02CQlDCQkJCWFtIDEKKwlwbXVsdWRxCSVtbTcsICVtbTEJCUMJCQkJYW0gMQorCXBhZGRxCSVtbTUsICVtbTYJCUMJCQkJYW0gMQorCW1vdmQJMTYoJWVheCksICVtbTIJCUMJCQkJYW0gMQorCXBhZGRxCSVtbTAsICVtbTQJCUMJCQkJYW0gMQorCW1vdmQJMTIoJWVkeCksICVtbTUJCUMJCQkJYW0gMQorCW1vdmQJJW1tNiwgNCglZWR4KQkJQwkJCQlhbSAxCisJcHNybHEJJDMyLCAlbW02CQlDCQkJCWFtIDEKKwlsZWEJMTYoJWVheCksICVlYXgJCUMJCQkJYW0gMQorCWxlYQkxNiglZWR4KSwgJWVkeAkJQwkJCQlhbSAxCisJYWRkCSQ0LCAlZWN4CQlDCQkJCWFtIDEKKwlqbnoJTChsYW0xKQkJCUMJCQkJYW0gMQorCXBtdWx1ZHEJJW1tNywgJW1tMgkJQwkJCQlhbSAxCisJcGFkZHEJJW1tNCwgJW1tNgkJQwkJCQlhbSAxCisJcGFkZHEJJW1tMSwgJW1tNQkJQwkJCQlhbSAxCisJbW92ZAkoJWVkeCksICVtbTQJCUMJCQkJYW0gMQorCW1vdmQJJW1tNiwgLTgoJWVkeCkJCUMJCQkJYW0gMQorCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQlhbSAxCisJcGFkZHEJJW1tNSwgJW1tNgkJQwkJCQlhbSAxCisJcGFkZHEJJW1tMiwgJW1tNAkJQwkJCQlhbSAxCitMKHgxKToJbW92ZAklbW02LCAtNCglZWR4KQkJQwkJCQlhbSAxCisJcHNybHEJJDMyLCAlbW02CQlDCQkJCWFtIDEKKwlwYWRkcQklbW00LCAlbW02CQlDCQkJCWFtIDEKKwltb3ZkCSVtbTYsICglZWR4KQkJQwkJCQlhbSAxCisJcHNybHEJJDMyLCAlbW02CQlDCQkJCWFtIDEKKwltb3ZkCSVtbTYsIDQoJWVkeCkJCUMJCQkJYW0gMQorCWRlYwklZWJ4CQkJQwkJCQlhbSAxCisJam56CUwob2xwMSkJCQlDCQkJCWFtIDEKK0wob2VsMSk6CisJZW1tcwkJCQlDCQkJCSAgIDEKKwlwb3AJJWVkaQkJCUMJCQkJICAgMQorCXBvcAklZWJ4CQkJQwkJCQkgICAxCisJcG9wCSVlc2kJCQlDCQkJCSAgIDEKKwlyZXQJCQkJQwkJCQkgICAxCisKKworTCgyKToJbW92ZAkoJWVheCksICVtbTEJCUMJCQkJbSAyCisJc3ViCTI0KCVlc3ApLCAlZWN4CQlDCQkJCW0gMgorCW1vdgklZWN4LCAyNCglZXNwKQkJQyB1cGRhdGUgbG9vcCBjb3VudCBmb3IgbGF0ZXIJbSAyCisJcG11bHVkcQklbW03LCAlbW0xCQlDCQkJCW0gMgorCW1vdmQJNCglZWF4KSwgJW1tNAkJQwkJCQltIDIKKwlwbXVsdWRxCSVtbTcsICVtbTQJCUMJCQkJbSAyCisJbW92ZAk4KCVlYXgpLCAlbW0zCQlDCQkJCW0gMgorCWptcAlMKG0xMCkJCQlDCQkJCW0gMgorCUFMSUdOKDE2KQkJCUMJCQkJbSAyCitMKGxwbTIpOgorCXBtdWx1ZHEJJW1tNywgJW1tNAkJQwkJCQltIDIKKwlwYWRkcQklbW0wLCAlbW02CQlDCQkJCW0gMgorCW1vdmQJOCglZWF4KSwgJW1tMwkJQwkJCQltIDIKKwltb3ZkCSVtbTYsIC00KCVlZHgpCQlDCQkJCW0gMgorCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQltIDIKK0wobTEwKToJcG11bHVkcQklbW03LCAlbW0zCQlDCQkJCW0gMgorCXBhZGRxCSVtbTEsICVtbTYJCUMJCQkJbSAyCisJbW92ZAkxMiglZWF4KSwgJW1tMAkJQwkJCQltIDIKKwltb3ZkCSVtbTYsICglZWR4KQkJQwkJCQltIDIKKwlwc3JscQkkMzIsICVtbTYJCUMJCQkJbSAyCisJcG11bHVkcQklbW03LCAlbW0wCQlDCQkJCW0gMgorCXBhZGRxCSVtbTQsICVtbTYJCUMJCQkJbSAyCisJbW92ZAkxNiglZWF4KSwgJW1tMQkJQwkJCQltIDIKKwltb3ZkCSVtbTYsIDQoJWVkeCkJCUMJCQkJbSAyCisJcHNybHEJJDMyLCAlbW02CQlDCQkJCW0gMgorCXBtdWx1ZHEJJW1tNywgJW1tMQkJQwkJCQltIDIKKwlwYWRkcQklbW0zLCAlbW02CQlDCQkJCW0gMgorCW1vdmQJMjAoJWVheCksICVtbTQJCUMJCQkJbSAyCisJbW92ZAklbW02LCA4KCVlZHgpCQlDCQkJCW0gMgorCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQltIDIKKwlsZWEJMTYoJWVheCksICVlYXgJCUMJCQkJbSAyCisJbGVhCTE2KCVlZHgpLCAlZWR4CQlDCQkJCW0gMgorCWFkZAkkNCwgJWVjeAkJQwkJCQltIDIKKwlqYQlMKGxwbTIpCQkJQwkJCQltIDIKKwlwbXVsdWRxCSVtbTcsICVtbTQJCUMJCQkJbSAyCisJcGFkZHEJJW1tMCwgJW1tNgkJQwkJCQltIDIKKwltb3ZkCSVtbTYsIC00KCVlZHgpCQlDCQkJCW0gMgorCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQltIDIKKwlwYWRkcQklbW0xLCAlbW02CQlDCQkJCW0gMgorCW1vdgkxNiglZXNwKSwgJWVkaQkJQyBycAkJCQkgIDIKKwlqbXAJTCh4MikKKworTChvbHAyKToKKwlsZWEJNCglZWRpKSwgJWVkaQkJQwkJCQlhbSAyCisJbW92ZAkoJWVzaSksICVtbTcJCUMJCQkJYW0gMgorCWxlYQk0KCVlc2kpLCAlZXNpCQlDCQkJCWFtIDIKKwltb3YJJWVkaSwgJWVkeAkJQyBycAkJCQlhbSAyCisJbW92CTIwKCVlc3ApLCAlZWF4CQlDIHVwCQkJCWFtIDIKKwltb3ZkCSglZWF4KSwgJW1tMQkJQwkJCQlhbSAyCisJbW92CTI0KCVlc3ApLCAlZWN4CQlDIGlubmVyIGxvb3AgY291bnQJCWFtIDIKKwlweG9yCSVtbTYsICVtbTYJCUMJCQkJYW0gMgorCXBtdWx1ZHEJJW1tNywgJW1tMQkJQwkJCQlhbSAyCisJbW92ZAk0KCVlYXgpLCAlbW0yCQlDCQkJCWFtIDIKKwltb3ZkCSglZWR4KSwgJW1tNQkJQwkJCQlhbSAyCisJcG11bHVkcQklbW03LCAlbW0yCQlDCQkJCWFtIDIKKwltb3ZkCTgoJWVheCksICVtbTMJCUMJCQkJYW0gMgorCXBhZGRxCSVtbTEsICVtbTUJCUMJCQkJYW0gMgorCW1vdmQJNCglZWR4KSwgJW1tNAkJQwkJCQlhbSAyCisJam1wCUwoYW0xMCkJCQlDCQkJCWFtIDIKKwlBTElHTigxNikJCQlDCQkJCWFtIDIKK0wobGFtMik6CisJcG11bHVkcQklbW03LCAlbW0yCQlDCQkJCWFtIDIKKwlwYWRkcQklbW00LCAlbW02CQlDCQkJCWFtIDIKKwltb3ZkCTgoJWVheCksICVtbTMJCUMJCQkJYW0gMgorCXBhZGRxCSVtbTEsICVtbTUJCUMJCQkJYW0gMgorCW1vdmQJNCglZWR4KSwgJW1tNAkJQwkJCQlhbSAyCisJbW92ZAklbW02LCAtNCglZWR4KQkJQwkJCQlhbSAyCisJcHNybHEJJDMyLCAlbW02CQlDCQkJCWFtIDIKK0woYW0xMCk6CisJcG11bHVkcQklbW03LCAlbW0zCQlDCQkJCWFtIDIKKwlwYWRkcQklbW01LCAlbW02CQlDCQkJCWFtIDIKKwltb3ZkCTEyKCVlYXgpLCAlbW0wCQlDCQkJCWFtIDIKKwlwYWRkcQklbW0yLCAlbW00CQlDCQkJCWFtIDIKKwltb3ZkCTgoJWVkeCksICVtbTUJCUMJCQkJYW0gMgorCW1vdmQJJW1tNiwgKCVlZHgpCQlDCQkJCWFtIDIKKwlwc3JscQkkMzIsICVtbTYJCUMJCQkJYW0gMgorCXBtdWx1ZHEJJW1tNywgJW1tMAkJQwkJCQlhbSAyCisJcGFkZHEJJW1tNCwgJW1tNgkJQwkJCQlhbSAyCisJbW92ZAkxNiglZWF4KSwgJW1tMQkJQwkJCQlhbSAyCisJcGFkZHEJJW1tMywgJW1tNQkJQwkJCQlhbSAyCisJbW92ZAkxMiglZWR4KSwgJW1tNAkJQwkJCQlhbSAyCisJbW92ZAklbW02LCA0KCVlZHgpCQlDCQkJCWFtIDIKKwlwc3JscQkkMzIsICVtbTYJCUMJCQkJYW0gMgorCXBtdWx1ZHEJJW1tNywgJW1tMQkJQwkJCQlhbSAyCisJcGFkZHEJJW1tNSwgJW1tNgkJQwkJCQlhbSAyCisJbW92ZAkyMCglZWF4KSwgJW1tMgkJQwkJCQlhbSAyCisJcGFkZHEJJW1tMCwgJW1tNAkJQwkJCQlhbSAyCisJbW92ZAkxNiglZWR4KSwgJW1tNQkJQwkJCQlhbSAyCisJbW92ZAklbW02LCA4KCVlZHgpCQlDCQkJCWFtIDIKKwlwc3JscQkkMzIsICVtbTYJCUMJCQkJYW0gMgorCWxlYQkxNiglZWF4KSwgJWVheAkJQwkJCQlhbSAyCisJbGVhCTE2KCVlZHgpLCAlZWR4CQlDCQkJCWFtIDIKKwlhZGQJJDQsICVlY3gJCUMJCQkJYW0gMgorCWpueglMKGxhbTIpCQkJQwkJCQlhbSAyCisJcG11bHVkcQklbW03LCAlbW0yCQlDCQkJCWFtIDIKKwlwYWRkcQklbW00LCAlbW02CQlDCQkJCWFtIDIKKwlwYWRkcQklbW0xLCAlbW01CQlDCQkJCWFtIDIKKwltb3ZkCTQoJWVkeCksICVtbTQJCUMJCQkJYW0gMgorCW1vdmQJJW1tNiwgLTQoJWVkeCkJCUMJCQkJYW0gMgorCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQlhbSAyCisJcGFkZHEJJW1tNSwgJW1tNgkJQwkJCQlhbSAyCisJcGFkZHEJJW1tMiwgJW1tNAkJQwkJCQlhbSAyCitMKHgyKToJbW92ZAklbW02LCAoJWVkeCkJCUMJCQkJYW0gMgorCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQlhbSAyCisJcGFkZHEJJW1tNCwgJW1tNgkJQwkJCQlhbSAyCisJbW92ZAklbW02LCA0KCVlZHgpCQlDCQkJCWFtIDIKKwlwc3JscQkkMzIsICVtbTYJCUMJCQkJYW0gMgorCW1vdmQJJW1tNiwgOCglZWR4KQkJQwkJCQlhbSAyCisJZGVjCSVlYngJCQlDCQkJCWFtIDIKKwlqbnoJTChvbHAyKQkJCUMJCQkJYW0gMgorTChvZWwyKToKKwllbW1zCQkJCUMJCQkJICAgMgorCXBvcAklZWRpCQkJQwkJCQkgICAyCisJcG9wCSVlYngJCQlDCQkJCSAgIDIKKwlwb3AJJWVzaQkJCUMJCQkJICAgMgorCXJldAkJCQlDCQkJCSAgIDIKKworCitMKDMpOgltb3ZkCSglZWF4KSwgJW1tMAkJQwkJCQltIDMKKwlzdWIJMjQoJWVzcCksICVlY3gJCUMJCQkJbSAzCisJbW92CSVlY3gsIDI0KCVlc3ApCQlDIHVwZGF0ZSBsb29wIGNvdW50IGZvciBsYXRlcgltIDMKKwlwbXVsdWRxCSVtbTcsICVtbTAJCUMJCQkJbSAzCisJbW92ZAk0KCVlYXgpLCAlbW0xCQlDCQkJCW0gMworCXBtdWx1ZHEJJW1tNywgJW1tMQkJQwkJCQltIDMKKwltb3ZkCTgoJWVheCksICVtbTQJCUMJCQkJbSAzCisJam1wCUwobHBtMykJCQlDCQkJCW0gMworCUFMSUdOKDE2KQkJCUMJCQkJbSAzCitMKGxwbTMpOgorCXBtdWx1ZHEJJW1tNywgJW1tNAkJQwkJCQltIDMKKwlwYWRkcQklbW0wLCAlbW02CQlDCQkJCW0gMworCW1vdmQJMTIoJWVheCksICVtbTMJCUMJCQkJbSAzCisJbW92ZAklbW02LCAoJWVkeCkJCUMJCQkJbSAzCisJcHNybHEJJDMyLCAlbW02CQlDCQkJCW0gMworCXBtdWx1ZHEJJW1tNywgJW1tMwkJQwkJCQltIDMKKwlwYWRkcQklbW0xLCAlbW02CQlDCQkJCW0gMworCW1vdmQJMTYoJWVheCksICVtbTAJCUMJCQkJbSAzCisJbW92ZAklbW02LCA0KCVlZHgpCQlDCQkJCW0gMworCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQltIDMKKwlwbXVsdWRxCSVtbTcsICVtbTAJCUMJCQkJbSAzCisJcGFkZHEJJW1tNCwgJW1tNgkJQwkJCQltIDMKKwltb3ZkCTIwKCVlYXgpLCAlbW0xCQlDCQkJCW0gMworCW1vdmQJJW1tNiwgOCglZWR4KQkJQwkJCQltIDMKKwlwc3JscQkkMzIsICVtbTYJCUMJCQkJbSAzCisJcG11bHVkcQklbW03LCAlbW0xCQlDCQkJCW0gMworCXBhZGRxCSVtbTMsICVtbTYJCUMJCQkJbSAzCisJbW92ZAkyNCglZWF4KSwgJW1tNAkJQwkJCQltIDMKKwltb3ZkCSVtbTYsIDEyKCVlZHgpCQlDCQkJCW0gMworCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQltIDMKKwlsZWEJMTYoJWVheCksICVlYXgJCUMJCQkJbSAzCisJbGVhCTE2KCVlZHgpLCAlZWR4CQlDCQkJCW0gMworCWFkZAkkNCwgJWVjeAkJQwkJCQltIDMKKwlqYQlMKGxwbTMpCQkJQwkJCQltIDMKKwlwbXVsdWRxCSVtbTcsICVtbTQJCUMJCQkJbSAzCisJcGFkZHEJJW1tMCwgJW1tNgkJQwkJCQltIDMKKwltb3ZkCSVtbTYsICglZWR4KQkJQwkJCQltIDMKKwlwc3JscQkkMzIsICVtbTYJCUMJCQkJbSAzCisJcGFkZHEJJW1tMSwgJW1tNgkJQwkJCQltIDMKKwltb3YJMTYoJWVzcCksICVlZGkJCUMgcnAJCQkJICAzCisJam1wCUwoeDMpCisKK0wob2xwMyk6CisJbGVhCTQoJWVkaSksICVlZGkJCUMJCQkJYW0gMworCW1vdmQJKCVlc2kpLCAlbW03CQlDCQkJCWFtIDMKKwlsZWEJNCglZXNpKSwgJWVzaQkJQwkJCQlhbSAzCisJbW92CSVlZGksICVlZHgJCUMgcnAJCQkJYW0gMworCW1vdgkyMCglZXNwKSwgJWVheAkJQyB1cAkJCQlhbSAzCisJbW92ZAkoJWVheCksICVtbTAJCUMJCQkJYW0gMworCW1vdgkyNCglZXNwKSwgJWVjeAkJQyBpbm5lciBsb29wIGNvdW50CQlhbSAzCisJcHhvcgklbW02LCAlbW02CQlDCQkJCWFtIDMKKwlwbXVsdWRxCSVtbTcsICVtbTAJCUMJCQkJYW0gMworCW1vdmQJNCglZWF4KSwgJW1tMQkJQwkJCQlhbSAzCisJbW92ZAkoJWVkeCksICVtbTQJCUMJCQkJYW0gMworCXBtdWx1ZHEJJW1tNywgJW1tMQkJQwkJCQlhbSAzCisJbW92ZAk4KCVlYXgpLCAlbW0yCQlDCQkJCWFtIDMKKwlwYWRkcQklbW0wLCAlbW00CQlDCQkJCWFtIDMKKwltb3ZkCTQoJWVkeCksICVtbTUJCUMJCQkJYW0gMworCWptcAlMKGxhbTMpCQkJQwkJCQlhbSAzCisJQUxJR04oMTYpCQkJQwkJCQlhbSAzCitMKGxhbTMpOgorCXBtdWx1ZHEJJW1tNywgJW1tMgkJQwkJCQlhbSAzCisJcGFkZHEJJW1tNCwgJW1tNgkJQwkJCQlhbSAzCisJbW92ZAkxMiglZWF4KSwgJW1tMwkJQwkJCQlhbSAzCisJcGFkZHEJJW1tMSwgJW1tNQkJQwkJCQlhbSAzCisJbW92ZAk4KCVlZHgpLCAlbW00CQlDCQkJCWFtIDMKKwltb3ZkCSVtbTYsICglZWR4KQkJQwkJCQlhbSAzCisJcHNybHEJJDMyLCAlbW02CQlDCQkJCWFtIDMKKwlwbXVsdWRxCSVtbTcsICVtbTMJCUMJCQkJYW0gMworCXBhZGRxCSVtbTUsICVtbTYJCUMJCQkJYW0gMworCW1vdmQJMTYoJWVheCksICVtbTAJCUMJCQkJYW0gMworCXBhZGRxCSVtbTIsICVtbTQJCUMJCQkJYW0gMworCW1vdmQJMTIoJWVkeCksICVtbTUJCUMJCQkJYW0gMworCW1vdmQJJW1tNiwgNCglZWR4KQkJQwkJCQlhbSAzCisJcHNybHEJJDMyLCAlbW02CQlDCQkJCWFtIDMKKwlwbXVsdWRxCSVtbTcsICVtbTAJCUMJCQkJYW0gMworCXBhZGRxCSVtbTQsICVtbTYJCUMJCQkJYW0gMworCW1vdmQJMjAoJWVheCksICVtbTEJCUMJCQkJYW0gMworCXBhZGRxCSVtbTMsICVtbTUJCUMJCQkJYW0gMworCW1vdmQJMTYoJWVkeCksICVtbTQJCUMJCQkJYW0gMworCW1vdmQJJW1tNiwgOCglZWR4KQkJQwkJCQlhbSAzCisJcHNybHEJJDMyLCAlbW02CQlDCQkJCWFtIDMKKwlwbXVsdWRxCSVtbTcsICVtbTEJCUMJCQkJYW0gMworCXBhZGRxCSVtbTUsICVtbTYJCUMJCQkJYW0gMworCW1vdmQJMjQoJWVheCksICVtbTIJCUMJCQkJYW0gMworCXBhZGRxCSVtbTAsICVtbTQJCUMJCQkJYW0gMworCW1vdmQJMjAoJWVkeCksICVtbTUJCUMJCQkJYW0gMworCW1vdmQJJW1tNiwgMTIoJWVkeCkJCUMJCQkJYW0gMworCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQlhbSAzCisJbGVhCTE2KCVlYXgpLCAlZWF4CQlDCQkJCWFtIDMKKwlsZWEJMTYoJWVkeCksICVlZHgJCUMJCQkJYW0gMworCWFkZAkkNCwgJWVjeAkJQwkJCQlhbSAzCisJam56CUwobGFtMykJCQlDCQkJCWFtIDMKKwlwbXVsdWRxCSVtbTcsICVtbTIJCUMJCQkJYW0gMworCXBhZGRxCSVtbTQsICVtbTYJCUMJCQkJYW0gMworCXBhZGRxCSVtbTEsICVtbTUJCUMJCQkJYW0gMworCW1vdmQJOCglZWR4KSwgJW1tNAkJQwkJCQlhbSAzCisJbW92ZAklbW02LCAoJWVkeCkJCUMJCQkJYW0gMworCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQlhbSAzCisJcGFkZHEJJW1tNSwgJW1tNgkJQwkJCQlhbSAzCisJcGFkZHEJJW1tMiwgJW1tNAkJQwkJCQlhbSAzCitMKHgzKToJbW92ZAklbW02LCA0KCVlZHgpCQlDCQkJCWFtIDMKKwlwc3JscQkkMzIsICVtbTYJCUMJCQkJYW0gMworCXBhZGRxCSVtbTQsICVtbTYJCUMJCQkJYW0gMworCW1vdmQJJW1tNiwgOCglZWR4KQkJQwkJCQlhbSAzCisJcHNybHEJJDMyLCAlbW02CQlDCQkJCWFtIDMKKwltb3ZkCSVtbTYsIDEyKCVlZHgpCQlDCQkJCWFtIDMKKwlkZWMJJWVieAkJCUMJCQkJYW0gMworCWpueglMKG9scDMpCQkJQwkJCQlhbSAzCitMKG9lbDMpOgorCWVtbXMJCQkJQwkJCQkgICAzCisJcG9wCSVlZGkJCQlDCQkJCSAgIDMKKwlwb3AJJWVieAkJCUMJCQkJICAgMworCXBvcAklZXNpCQkJQwkJCQkgICAzCisJcmV0CQkJCUMJCQkJICAgMworRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bTQvc3NlMi9wb3Bjb3VudC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtNC9zc2UyL3BvcGNvdW50LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2Y0NDI2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bTQvc3NlMi9wb3Bjb3VudC5hc20KQEAgLTAsMCArMSwyODEgQEAKK2RubCAgWDg2LTMyIGFuZCBYODYtNjQgbXBuX3BvcGNvdW50IHVzaW5nIFNTRTIuCisKK2RubCAgQ29weXJpZ2h0IDIwMDYsIDIwMDcsIDIwMTEsIDIwMTUsIDIwMjAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MgMzItYml0CQkgICAgIHBvcGNvdW50CSAgICAgaGFtZGlzdAorQwkJCSAgICBjeWNsZXMvbGltYgkgICAgY3ljbGVzL2xpbWIKK0MgUDUJCQkJLQorQyBQNiBtb2RlbCAwLTgsMTAtMTIJCS0KK0MgUDYgbW9kZWwgOSAgKEJhbmlhcykJCT8KK0MgUDYgbW9kZWwgMTMgKERvdGhhbikJCTQKK0MgUDQgbW9kZWwgMCAgKFdpbGxhbWV0dGUpCT8KK0MgUDQgbW9kZWwgMSAgKD8pCQk/CitDIFA0IG1vZGVsIDIgIChOb3J0aHdvb2QpCTMuOQorQyBQNCBtb2RlbCAzICAoUHJlc2NvdHQpCT8KK0MgUDQgbW9kZWwgNCAgKE5vY29uYSkJCT8KK0MgQU1EIEs2CQkJLQorQyBBTUQgSzcJCQktCitDIEFNRCBLOAkJCT8KKworQyA2NC1iaXQJCSAgICAgcG9wY291bnQJICAgICBoYW1kaXN0CitDCQkJICAgIGN5Y2xlcy9saW1iCSAgICBjeWNsZXMvbGltYgorQyBQNCBtb2RlbCA0IChOb2NvbmEpOgkJOAorQyBBTUQgSzgsSzkJCQk3LjUKK0MgQU1EIEsxMAkJCTMuNQorQyBJbnRlbCBjb3JlMgkJCTMuNjgKK0MgSW50ZWwgY29yZWkJCQkzLjE1CitDIEludGVsIGF0b20JCSAgICAgICAxMC44CitDIFZJQSBuYW5vCQkJNi41CisKK0MgVE9ETworQyAgKiBNYWtlIGFuIG1wbl9oYW1kaXN0IGJhc2VkIG9uIHRoaXMuICBBbGlnbm1lbnQgY291bGQgZWl0aGVyIGJlIGhhbmRsZWQgYnkKK0MgICAgdXNpbmcgbW92ZHF1IGZvciBvbmUgb3BlcmFuZCBhbmQgbW92ZHFhIGZvciB0aGUgb3RoZXIsIG9yIGJ5IHBhaW5mdWxseQorQyAgICBzaGlmdGluZyBhcyB3ZSBnby4gIFVuZm9ydHVuYXRlbHksIHRoZXJlIHNlZW0gdG8gYmUgbm8gdXNhYmxlIHNoaWZ0CitDICAgIGluc3RydWN0aW9uLCBleGNlcHQgZm9yIG9uZSB0aGF0IHRha2VzIGFuIGltbWVkaWF0ZSBjb3VudC4KK0MgICogSXQgd291bGQgcHJvYmFibHkgYmUgcG9zc2libGUgdG8gY3V0IGEgZmV3IGN5Y2xlcy9saW1iIHVzaW5nIHNvZnR3YXJlCitDICAgIHBpcGVsaW5pbmcuCitDICAqIFRoZXJlIGFyZSAzNSBkZWNvZGUgc2xvdHMgdW51c2VkIGJ5IHRoZSBTU0UyIGluc3RydWN0aW9ucy4gIExvb3AgY29udHJvbAorQyAgICBuZWVkcyBqdXN0IDIgb3IgMyBzbG90cywgbGVhdmluZyBhcm91bmQgMzIgc2xvdHMuICBUaGlzIGFsbG93cyBhIHBhcmFsbGVsCitDICAgIGludGVnZXIgYmFzZWQgcG9wY291bnQuICBTdWNoIGEgY29tYmluZWQgbG9vcCB3b3VsZCBoYW5kbGUgNiBsaW1icyBpbgorQyAgICBhYm91dCAzMCBjeWNsZXMgb24gSzguCitDICAqIFdlIGNvdWxkIHNhdmUgYSBieXRlIG9yIHR3byBieSB1c2luZyAzMi1iaXQgb3BlcmF0aW9ucyBvbiBhcmVnLgorQyAgKiBDaGVjayBpZiB1c2luZyBtb3ZkcWEgdG8gYSB0ZW1wIG9mIGFuZCB0aGVuIHJlZ2lzdGVyLWJhc2VkIHBhbmQgaXMgZmFzdGVyLgorCitpZmVsc2UoR01QX0xJTUJfQklUUyxgMzInLAorYAlkZWZpbmUoYHVwJywgIGAlZWR4JykKKwlkZWZpbmUoYG4nLCAgIGAlZWN4JykKKwlkZWZpbmUoYGFyZWcnLGAlZWF4JykKKwlkZWZpbmUoYGJyZWcnLGAlZWJ4JykKKwlkZWZpbmUoYHplcm8nLGAleG1tNCcpCisJZGVmaW5lKGBMSU1CMzInLGAJJDEnKQorCWRlZmluZShgTElNQjY0JyxgZG5sJykKKycsYAorCWRlZmluZShgdXAnLCAgYCVyZGknKQorCWRlZmluZShgbicsICAgYCVyc2knKQorCWRlZmluZShgYXJlZycsYCVyYXgnKQorCWRlZmluZShgYnJlZycsYCVyZHgnKQorCWRlZmluZShgemVybycsYCV4bW04JykKKwlkZWZpbmUoYExJTUIzMicsYGRubCcpCisJZGVmaW5lKGBMSU1CNjQnLGAJJDEnKQorJykKKworZGVmaW5lKGBtbTAxMDEwMTAxJyxgJXhtbTYnKQorZGVmaW5lKGBtbTAwMTEwMDExJyxgJXhtbTcnKQorZGVmaW5lKGBtbTAwMDAxMTExJyxgJXhtbTInKQorCitkZWZpbmUoYEdNUF9MSU1CX0JZVEVTJywgZXZhbChHTVBfTElNQl9CSVRTLzgpKQorZGVmaW5lKGBMSU1CU19QRVJfWE1NJywgIGV2YWwoMTYvR01QX0xJTUJfQllURVMpKQorZGVmaW5lKGBMSU1CU19QRVJfMlhNTScsIGV2YWwoMzIvR01QX0xJTUJfQllURVMpKQorCit1bmRlZmluZShgcHNhZGJ3JykJCQlDIG92ZXJyaWRlIGluaGVyaXRlZCBtNCB2ZXJzaW9uCisKK0MgVGhpcyBmaWxlIGlzIHNoYXJlZCBiZXR3ZWVuIDMyLWJpdCBhbmQgNjQtYml0IGJ1aWxkcy4gIE9ubHkgdGhlIGZvcm1lciBoYXMKK0MgTEVBTC4gIERlZmF1bHQgTEVBTCBhcyBhbiBhbGlhcyBvZiBMRUEuCitpZmRlZihgTEVBTCcsLGBkZWZpbmUoYExFQUwnLCBgTEVBKCQxLCQyKScpJykKKworQVNNX1NUQVJUKCkKKworQyBNYWtlIGNuc3RzIGdsb2JhbCB0byB3b3JrIGFyb3VuZCBBcHBsZSByZWxvY2F0aW9uIGJ1Zy4KK2lmZGVmKGBEQVJXSU4nLGAKKwlkZWZpbmUoYGNuc3RzJywgTVBOKHBvcGNjbnN0cykpCisJR0xPQkwJY25zdHMnKQorCisJVEVYVAorCUFMSUdOKDMyKQorUFJPTE9HVUUobXBuX3BvcGNvdW50KQorCitMSU1CMzIoYG1vdgk0KCVlc3ApLCB1cAknKQorTElNQjMyKGBtb3YJOCglZXNwKSwgbgknKQorTElNQjMyKGBwdXNoCSVlYngJCScpCisKKwlweG9yCSV4bW0zLCAleG1tMwkJQyB6ZXJvIGdyYW5kIHRvdGFsIGNvdW50CitMSU1CNjQoYHB4b3IJemVybywgemVybwknKQorCisJTEVBTCgJY25zdHMsIGJyZWcpCisKKwltb3ZkcWEJLTQ4KGJyZWcpLCBtbTAxMDEwMTAxCisJbW92ZHFhCS0zMihicmVnKSwgbW0wMDExMDAxMQorCW1vdmRxYQktMTYoYnJlZyksIG1tMDAwMDExMTEKKworCW1vdgl1cCwgYXJlZworCWFuZAkkLTE2LCB1cAkJQyByb3VuZCBgdXAnIGRvd24gdG8gMTI4LWJpdCBib3VuZGFyeQorCWFuZAkkMTIsIGFyZWcJCUMgMzI6YXJlZyA9IDAsIDQsIDgsIDEyCisJCQkJCUMgNjQ6YXJlZyA9IDAsIDgKKwltb3ZkcWEJKHVwKSwgJXhtbTAKKwlwYW5kCTY0KGJyZWcsYXJlZyw0KSwgJXhtbTAKKwlzaHIJJG00X2xvZzIoR01QX0xJTUJfQllURVMpLCAlZWF4CisJYWRkCWFyZWcsIG4JCQlDIGNvbXBlbnNhdGUgbiBmb3Igcm91bmRlZCBkb3duIGB1cCcKKworCXB4b3IJJXhtbTQsICV4bW00CisJc3ViCSRMSU1CU19QRVJfWE1NLCBuCisJamJlCUwoc3VtKQorCisJc3ViCSRMSU1CU19QRVJfWE1NLCBuCisJamEJTChlbnQpCisJam1wCUwobHN1bSkKKworCUFMSUdOKDE2KQorTCh0b3ApOgltb3ZkcWEJKHVwKSwgJXhtbTAKK0woZW50KToJbW92ZHFhCTE2KHVwKSwgJXhtbTQKKworCW1vdmRxYQkleG1tMCwgJXhtbTEKKwltb3ZkcWEJJXhtbTQsICV4bW01CisJcHNybGQJJDEsICV4bW0wCisJcHNybGQJJDEsICV4bW00CisJcGFuZAltbTAxMDEwMTAxLCAleG1tMAorCXBhbmQJbW0wMTAxMDEwMSwgJXhtbTQKKwlwc3ViZAkleG1tMCwgJXhtbTEKKwlwc3ViZAkleG1tNCwgJXhtbTUKKworCW1vdmRxYQkleG1tMSwgJXhtbTAKKwltb3ZkcWEJJXhtbTUsICV4bW00CisJcHNybHEJJDIsICV4bW0xCisJcHNybHEJJDIsICV4bW01CisJcGFuZAltbTAwMTEwMDExLCAleG1tMAorCXBhbmQJbW0wMDExMDAxMSwgJXhtbTQKKwlwYW5kCW1tMDAxMTAwMTEsICV4bW0xCisJcGFuZAltbTAwMTEwMDExLCAleG1tNQorCXBhZGRxCSV4bW0wLCAleG1tMQorCXBhZGRxCSV4bW00LCAleG1tNQorCitMSU1CMzIoYHB4b3IJemVybywgemVybwknKQorCisJYWRkCSQzMiwgdXAKKwlzdWIJJExJTUJTX1BFUl8yWE1NLCBuCisKKwlwYWRkcQkleG1tNSwgJXhtbTEKKwltb3ZkcWEJJXhtbTEsICV4bW0wCisJcHNybHEJJDQsICV4bW0xCisJcGFuZAltbTAwMDAxMTExLCAleG1tMAorCXBhbmQJbW0wMDAwMTExMSwgJXhtbTEKKwlwYWRkcQkleG1tMCwgJXhtbTEKKworCXBzYWRidwl6ZXJvLCAleG1tMQorCXBhZGRxCSV4bW0xLCAleG1tMwkJQyBhZGQgdG8gZ3JhbmQgdG90YWwKKworCWpuYwlMKHRvcCkKK0woZW5kKToKKwlhZGQJJExJTUJTX1BFUl8yWE1NLCBuCisJanoJTChydCkKKwltb3ZkcWEJKHVwKSwgJXhtbTAKKwlweG9yCSV4bW00LCAleG1tNAorCXN1YgkkTElNQlNfUEVSX1hNTSwgbgorCWpiZQlMKHN1bSkKK0wobHN1bSk6CisJbW92ZHFhCSV4bW0wLCAleG1tNAorCW1vdmRxYQkxNih1cCksICV4bW0wCitMKHN1bSk6CisJc2hsCSRtNF9sb2cyKEdNUF9MSU1CX0JZVEVTKSwgbgorCWFuZAkkMTIsIG4KKwlwYW5kCShicmVnLG4sNCksICV4bW0wCisKKwltb3ZkcWEJJXhtbTAsICV4bW0xCisJbW92ZHFhCSV4bW00LCAleG1tNQorCXBzcmxkCSQxLCAleG1tMAorCXBzcmxkCSQxLCAleG1tNAorCXBhbmQJbW0wMTAxMDEwMSwgJXhtbTAKKwlwYW5kCW1tMDEwMTAxMDEsICV4bW00CisJcHN1YmQJJXhtbTAsICV4bW0xCisJcHN1YmQJJXhtbTQsICV4bW01CisKKwltb3ZkcWEJJXhtbTEsICV4bW0wCisJbW92ZHFhCSV4bW01LCAleG1tNAorCXBzcmxxCSQyLCAleG1tMQorCXBzcmxxCSQyLCAleG1tNQorCXBhbmQJbW0wMDExMDAxMSwgJXhtbTAKKwlwYW5kCW1tMDAxMTAwMTEsICV4bW00CisJcGFuZAltbTAwMTEwMDExLCAleG1tMQorCXBhbmQJbW0wMDExMDAxMSwgJXhtbTUKKwlwYWRkcQkleG1tMCwgJXhtbTEKKwlwYWRkcQkleG1tNCwgJXhtbTUKKworTElNQjMyKGBweG9yCXplcm8sIHplcm8JJykKKworCXBhZGRxCSV4bW01LCAleG1tMQorCW1vdmRxYQkleG1tMSwgJXhtbTAKKwlwc3JscQkkNCwgJXhtbTEKKwlwYW5kCW1tMDAwMDExMTEsICV4bW0wCisJcGFuZAltbTAwMDAxMTExLCAleG1tMQorCXBhZGRxCSV4bW0wLCAleG1tMQorCisJcHNhZGJ3CXplcm8sICV4bW0xCisJcGFkZHEJJXhtbTEsICV4bW0zCQlDIGFkZCB0byBncmFuZCB0b3RhbAorCisKK0MgQWRkIHRoZSB0d28gNjQtYml0IGhhbHZlcyBvZiB0aGUgZ3JhbmQgdG90YWwgY291bnRlcgorTChydCk6CW1vdmRxYQkleG1tMywgJXhtbTAKKwlwc3JsZHEJJDgsICV4bW0zCisJcGFkZHEJJXhtbTMsICV4bW0wCisJbW92ZAkleG1tMCwgYXJlZwkJQyBtb3ZxIGF2b2lkZWQgZHVlIHRvIGdhcyBidWcKKworTElNQjMyKGBwb3AJJWVieAkJJykKKwlyZXQKKworRVBJTE9HVUUoKQorREVGX09CSkVDVChkdW1teSwxNikKK0MgVGhyZWUgbWFnaWMgY29uc3RhbnRzIHVzZWQgZm9yIG1hc2tpbmcgb3V0IGJpdHMKKwkuYnl0ZQkweDU1LDB4NTUsMHg1NSwweDU1LDB4NTUsMHg1NSwweDU1LDB4NTUKKwkuYnl0ZQkweDU1LDB4NTUsMHg1NSwweDU1LDB4NTUsMHg1NSwweDU1LDB4NTUKKworCS5ieXRlCTB4MzMsMHgzMywweDMzLDB4MzMsMHgzMywweDMzLDB4MzMsMHgzMworCS5ieXRlCTB4MzMsMHgzMywweDMzLDB4MzMsMHgzMywweDMzLDB4MzMsMHgzMworCisJLmJ5dGUJMHgwZiwweDBmLDB4MGYsMHgwZiwweDBmLDB4MGYsMHgwZiwweDBmCisJLmJ5dGUJMHgwZiwweDBmLDB4MGYsMHgwZiwweDBmLDB4MGYsMHgwZiwweDBmCitjbnN0czoKK0MgTWFza3MgZm9yIGhpZ2ggZW5kIG9mIG51bWJlcgorCS5ieXRlCTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZgorCS5ieXRlCTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZgorCisJLmJ5dGUJMHhmZiwweGZmLDB4ZmYsMHhmZiwweDAwLDB4MDAsMHgwMCwweDAwCisJLmJ5dGUJMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCisKKwkuYnl0ZQkweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYKKwkuYnl0ZQkweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKKworCS5ieXRlCTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZgorCS5ieXRlCTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHgwMCwweDAwLDB4MDAsMHgwMAorQyBNYXNrcyBmb3IgbG93IGVuZCBvZiBudW1iZXIKKwkuYnl0ZQkweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYKKwkuYnl0ZQkweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYKKworCS5ieXRlCTB4MDAsMHgwMCwweDAwLDB4MDAsMHhmZiwweGZmLDB4ZmYsMHhmZgorCS5ieXRlCTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZgorCisJLmJ5dGUJMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCisJLmJ5dGUJMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmCisKKwkuYnl0ZQkweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKKwkuYnl0ZQkweDAwLDB4MDAsMHgwMCwweDAwLDB4ZmYsMHhmZiwweGZmLDB4ZmYKK0VORF9PQkpFQ1QoZHVtbXkpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW00L3NzZTIvcnNoMWFkZF9uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW00L3NzZTIvcnNoMWFkZF9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDIxZDEzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bTQvc3NlMi9yc2gxYWRkX24uYXNtCkBAIC0wLDAgKzEsMTI2IEBACitkbmwgIEludGVsIFBlbnRpdW0tNCBtcG5fcnNoMWFkZF9uIC0tIG1wbiAoeCt5KS8yCisKK2RubCAgQ29weXJpZ2h0IDIwMDEtMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MgICAgICAgIGN5Y2xlcy9saW1iIChhcHByb3gpCitDICAgICAgZHN0IT1zcmMxLDIgIGRzdD09c3JjMSAgZHN0PT1zcmMyCitDIFA0OiAgICAgIDQuNSAgICAgICAgIDYuNSAgICAgICAgNi41CisKKworQyBtcF9saW1iX3QgbXBuX3JzaDFhZGRfbiAobXBfcHRyIHdwLCBtcF9zcmNwdHIgeHAsIG1wX3NyY3B0ciB5cCwKK0MgICAgICAgICAgICAgICAgICAgICAgICAgIG1wX3NpemVfdCBzaXplKTsKK0MKK0MgVGhlIHNsaWdodGx5IHN0cmFuZ2UgY29tYmluYXRpb24gb2YgaW5kZXhpbmcgYW5kIHBvaW50ZXIgaW5jcmVtZW50aW5nCitDIHRoYXQncyB1c2VkIHNlZW1zIHRvIHdvcmsgYmVzdC4gIE5vdCBzdXJlIHdoeSwgYnV0IGZvciBpbnN0YW5jZSBsZWFsCitDIGluY3JlbWVudGluZyBvbiAlZXNpIGlzIGEgMSBvciAyIGN5Y2xlIHNsb3dkb3duLgorQworQyBUaGUgZGVwZW5kZW50IGNoYWluIGlzIHBhZGRxIGNvbWJpbmluZyB0aGUgY2FycnkgYW5kIG5leHQgKHNoaWZ0ZWQpIHBhcnQsCitDIHBsdXMgcHNybHEgdG8gbW92ZSB0aGUgbmV3IGNhcnJ5IGRvd24uICBUaGF0LCBhbmQganVzdCA0IG1teCBpbnN0cnVjdGlvbnMKK0MgaW4gdG90YWwsIG1ha2VzIDQgYy9sIHRoZSB0YXJnZXQgc3BlZWQsIHdoaWNoIGlzIGFsbW9zdCBhY2hpZXZlZCBmb3IKK0Mgc2VwYXJhdGUgc3JjL2RzdCBidXQgd2hlbiBzcmM9PWRzdCB0aGUgd3JpdGUgY29tYmluaW5nIGFub21hbGllcyBzbG93IGl0CitDIGRvd24uCisKK2RlZmZyYW1lKFBBUkFNX1NJWkUsIDE2KQorZGVmZnJhbWUoUEFSQU1fWVAsICAgMTIpCitkZWZmcmFtZShQQVJBTV9YUCwgICA4KQorZGVmZnJhbWUoUEFSQU1fV1AsICAgNCkKKworZG5sICByZS11c2UgcGFyYW1ldGVyIHNwYWNlCitkZWZpbmUoU0FWRV9FQlgsYFBBUkFNX1hQJykKK2RlZmluZShTQVZFX0VTSSxgUEFSQU1fWVAnKQorCisJVEVYVAorCUFMSUdOKDgpCisKK1BST0xPR1VFKG1wbl9yc2gxYWRkX24pCitkZWZsaXQoYEZSQU1FJywwKQorCisJbW92bAlQQVJBTV9YUCwgJWVkeAorCW1vdmwJJWVieCwgU0FWRV9FQlgKKworCW1vdmwJUEFSQU1fWVAsICVlYngKKwltb3ZsCSVlc2ksIFNBVkVfRVNJCisKKwltb3ZsCVBBUkFNX1dQLCAlZXNpCisKKwltb3ZkCSglZWR4KSwgJW1tMAkJQyB4cFswXQorCisJbW92ZAkoJWVieCksICVtbTEJCUMgeXBbMF0KKwltb3ZsCVBBUkFNX1NJWkUsICVlY3gKKworCW1vdmwJKCVlZHgpLCAlZWF4CQlDIHhwWzBdCisKKwlhZGRsCSglZWJ4KSwgJWVheAkJQyB4cFswXSt5cFswXQorCisJcGFkZHEJJW1tMSwgJW1tMAkJQyB4cFswXSt5cFswXQorCWxlYWwJKCVlc2ksJWVjeCw0KSwgJWVzaQlDIHdwIGVuZAorCW5lZ2wJJWVjeAkJCUMgLXNpemUKKworCXBzcmxxCSQxLCAlbW0wCQlDICh4cFswXSt5cFswXSkvMgorCWFuZAkkMSwgJWVheAkJQyByZXR1cm4gdmFsdWUsIHJzaDEgYml0IG9mIHhwWzBdK3lwWzBdCisJYWRkbAkkMSwgJWVjeAkJQyAtKHNpemUtMSkKKwlqeglMKGRvbmUpCisKKworTCh0b3ApOgorCUMgZWF4CXJldHVybiB2YWx1ZQorCUMgZWJ4CXlwIGVuZAorCUMgZWN4CWNvdW50ZXIsIGxpbWJzLCAtKHNpemUtMSkgdG8gLTEgaW5jbHVzaXZlCisJQyBlZHgJeHAgZW5kCisJQyBlc2kJd3AgZW5kCisJQyBtbTAJY2FycnkgKDMyIGJpdHMpCisKKwltb3ZkCTQoJWVkeCksICVtbTEJQyB4cFtpKzFdCisJbW92ZAk0KCVlYngpLCAlbW0yCUMgeXBbaSsxXQorCWxlYWwJNCglZWR4KSwgJWVkeAorCWxlYWwJNCglZWJ4KSwgJWVieAorCXBhZGRxCSVtbTIsICVtbTEJCUMgeHBbaSsxXSt5cFtpKzFdCisJcHNsbHEJJDMxLCAlbW0xCQlDIGxvdyBiaXQgYXQgMzEsIGZ1cnRoZXIgMzIgYWJvdmUKKworCXBhZGRxCSVtbTEsICVtbTAJCUMgMzEgYW5kIGNhcnJ5IGZyb20gcHJldiBhZGQKKwltb3ZkCSVtbTAsIC00KCVlc2ksJWVjeCw0KQlDIGxvdyByZWFkeSB0byBzdG9yZSBkc3RbaV0KKworCXBzcmxxCSQzMiwgJW1tMAkJQyBoaWdoIGJlY29tZXMgbmV3IGNhcnJ5CisKKwlhZGRsCSQxLCAlZWN4CisJam56CUwodG9wKQorCisKK0woZG9uZSk6CisJbW92ZAklbW0wLCAtNCglZXNpKQkJQyBkc3Rbc2l6ZS0xXQorCW1vdmwJU0FWRV9FQlgsICVlYngKKworCW1vdmwJU0FWRV9FU0ksICVlc2kKKwllbW1zCisJcmV0CisKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW00L3NzZTIvc3FyX2Jhc2VjYXNlLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3BlbnRpdW00L3NzZTIvc3FyX2Jhc2VjYXNlLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGQ1N2QyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bTQvc3NlMi9zcXJfYmFzZWNhc2UuYXNtCkBAIC0wLDAgKzEsNzA1IEBACitkbmwgIG1wbl9zcXJfYmFzZWNhc2UgZm9yIFBlbnRpdW0gNCBhbmQgUDYgbW9kZWxzIHdpdGggU1NFMiAoaS5lLiwgOSxELEUsRikuCisKK2RubCAgQ29weXJpZ2h0IDIwMDEsIDIwMDIsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBUT0RPOgorQyAgKiBJbXByb3ZlIGFkLWhvYyBvdXRlciBsb29wIGNvZGUgYW5kIHJlZ2lzdGVyIGhhbmRsaW5nLiAgU29tZSBmZWVkLWluCitDICAgIHNjaGVkdWxpbmcgY291bGQgaW1wcm92ZSB0aGluZ3MgYnkgc2V2ZXJhbCBjeWNsZXMgcGVyIG91dGVyIGl0ZXJhdGlvbi4KK0MgICogSW4gTGFtMy4uLkxhbTEgY29kZSBmb3IsIGtlZXAgYWNjdW11bGF0aW9uIG9wZXJhbmRzIGluIHJlZ2lzdGVycywgd2l0aG91dAorQyAgICBzdG9yaW5nIGludGVybWVkaWF0ZXMgdG8gcnAuCitDICAqIFdlIG1pZ2h0IHdhbnQgdG8ga2VlcCAzMiBpbiBhIGZyZWUgbW0gcmVnaXN0ZXIsIHNpbmNlIHRoZSByZWdpc3RlciBmb3JtIGlzCitDICAgIDMgYnl0ZXMgYW5kIHRoZSBpbW1lZGlhdGUgZm9ybSBpcyA0IGJ5dGVzLiAgQWJvdXQgODAgYnl0ZXMgdG8gc2F2ZS4KK0MgICogTG9vayBpbnRvIGRpZmZlcmVudCBsb29wIGFsaWdubWVudCwgd2Ugbm93IGV4cGFuZCB0aGUgY29kZSBhYm91dCA1MCBieXRlcworQyAgICB3aXRoIHBvc3NpYmx5IG5lZWRsZXNzIGFsaWdubWVudC4KK0MgICogVXNlIE9TUCwgc2hvdWxkIHNvbHZlIGZlZWQtaW4gbGF0ZW5jeSBwcm9ibGVtcy4KK0MgICogQWRkcmVzcyByZWxhdGl2ZSBzbG93bmVzcyBmb3IgdW48PTMgZm9yIFBlbnRpdW0gTS4gIFRoZSBvbGQgY29kZSBpcyB0aGVyZQorQyAgICBjb25zaWRlcmFibHkgZmFzdGVyLiAgKDE6MjAvMTQsIDI6MzQ6MzIsIDM6NjYvNTcpCisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyBycAkJc3AgKyA0CitDIHVwCQlzcCArIDgKK0MgdW4JCXNwICsgMTIKKworCVRFWFQKKwlBTElHTigxNikKK1BST0xPR1VFKG1wbl9zcXJfYmFzZWNhc2UpCisJbW92CTQoJWVzcCksICVlZHgJCUMgcnAKKwltb3YJOCglZXNwKSwgJWVheAkJQyB1cAorCW1vdgkxMiglZXNwKSwgJWVjeAkJQyB1bgorCisJY21wCSQyLCAlZWN4CisJamMJTCh1bjEpCisJanoJTCh1bjIpCisJY21wCSQ0LCAlZWN4CisJamMJTCh1bjMpCisJanoJTCh1bjQpCisJam1wCUwoYmlnKQorCitMKHVuMSk6CW1vdgkoJWVheCksICVlYXgKKwltb3YJJWVkeCwgJWVjeAorCW11bAklZWF4CisJbW92CSVlYXgsICglZWN4KQorCW1vdgklZWR4LCA0KCVlY3gpCisJcmV0CitMKHVuMik6CW1vdmQJKCVlYXgpLCAlbW0wCQlDCQkJCXVuPTIKKwltb3ZkCSglZWF4KSwgJW1tMgkJQwkJCQl1bj0yCisJbW92ZAk0KCVlYXgpLCAlbW0xCQlDCQkJCXVuPTIKKwlwbXVsdWRxCSVtbTAsICVtbTAJCUMgNjRiIHdlaWdodCAwCQkJdW49MgorCXBtdWx1ZHEJJW1tMSwgJW1tMgkJQyA2NGIgd2VpZ2h0IDMyCQkJdW49MgorCXBtdWx1ZHEJJW1tMSwgJW1tMQkJQyA2NGIgd2VpZ2h0IDY0CQkJdW49MgorCW1vdmQJJW1tMCwgKCVlZHgpCQlDCQkJCXVuPTIKKwlwc3JscQkkMzIsICVtbTAJCUMgMzJiIHdlaWdodCAzMgkJCXVuPTIKKwlwY21wZXFkCSVtbTcsICVtbTcJCUMJCQkJdW49MgorCXBzcmxxCSQzMywgJW1tNwkJQyAweDAwMDAwMDAwN0ZGRkZGRkYJCXVuPTIKKwlwYW5kCSVtbTIsICVtbTcJCUMgMzFiIHdlaWdodCAzMgkJCXVuPTIKKwlwc3JscQkkMzEsICVtbTIJCUMgMzNiIHdlaWdodCA2NQkJCXVuPTIKKwlwc2xscQkkMSwgJW1tNwkJQyAzMWIgd2VpZ2h0IDMzCQkJdW49MgorCXBhZGRxCSVtbTcsICVtbTAJCUMJCQkJdW49MgorCW1vdmQJJW1tMCwgNCglZWR4KQkJQwkJCQl1bj0yCisJcHNybHEJJDMyLCAlbW0wCQlDCQkJCXVuPTIKKwlwYWRkcQklbW0yLCAlbW0xCQlDCQkJCXVuPTIKKwlwYWRkcQklbW0wLCAlbW0xCQlDCQkJCXVuPTIKKwltb3ZkCSVtbTEsIDgoJWVkeCkJCUMJCQkJdW49MgorCXBzcmxxCSQzMiwgJW1tMQkJQwkJCQl1bj0yCisJbW92ZAklbW0xLCAxMiglZWR4KQkJQwkJCQl1bj0yCisJZW1tcworCXJldAorTCh1bjMpOgltb3ZkCSglZWF4KSwgJW1tNwkJQwkJCQl1bj0zCisJbW92ZAk0KCVlYXgpLCAlbW02CQlDCQkJCXVuPTMKKwlwbXVsdWRxCSVtbTcsICVtbTYJCUMJCQkJdW49MworCW1vdmQJOCglZWF4KSwgJW1tMgkJQwkJCQl1bj0zCisJcG11bHVkcQklbW03LCAlbW0yCQlDCQkJCXVuPTMKKwltb3ZkCSVtbTYsIDQoJWVkeCkJCUMJCQkJdW49MworCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQl1bj0zCisJcGFkZHEJJW1tMiwgJW1tNgkJQwkJCQl1bj0zCisJbW92ZAklbW02LCA4KCVlZHgpCQlDCQkJCXVuPTMKKwlwc3JscQkkMzIsICVtbTYJCUMJCQkJdW49MworCW1vdmQJJW1tNiwgMTIoJWVkeCkJCUMJCQkJdW49MworCWxlYQk0KCVlZHgpLCAlZWR4CQlDCQkJCXVuPTMKKwlsZWEJNCglZWF4KSwgJWVheAkJQwkJCQl1bj0zCisJam1wCUwoYW0xKQorTCh1bjQpOgltb3ZkCSglZWF4KSwgJW1tNwkJQwkJCQl1bj00CisJbW92ZAk0KCVlYXgpLCAlbW02CQlDCQkJCXVuPTQKKwlwbXVsdWRxCSVtbTcsICVtbTYJCUMJCQkJdW49NAorCW1vdmQJOCglZWF4KSwgJW1tMAkJQwkJCQl1bj00CisJcG11bHVkcQklbW03LCAlbW0wCQlDCQkJCXVuPTQKKwltb3ZkCTEyKCVlYXgpLCAlbW0xCQlDCQkJCXVuPTQKKwlwbXVsdWRxCSVtbTcsICVtbTEJCUMJCQkJdW49NAorCW1vdmQJJW1tNiwgNCglZWR4KQkJQwkJCQl1bj00CisJcHNybHEJJDMyLCAlbW02CQlDCQkJCXVuPTQKKwlwYWRkcQklbW0wLCAlbW02CQlDCQkJCXVuPTQKKwltb3ZkCSVtbTYsIDgoJWVkeCkJCUMJCQkJdW49NAorCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQl1bj00CisJcGFkZHEJJW1tMSwgJW1tNgkJQwkJCQl1bj00CisJbW92ZAklbW02LCAxMiglZWR4KQkJQwkJCQl1bj00CisJcHNybHEJJDMyLCAlbW02CQlDCQkJCXVuPTQKKwltb3ZkCSVtbTYsIDE2KCVlZHgpCQlDCQkJCXVuPTQKKwlsZWEJNCglZWR4KSwgJWVkeAkJQwkJCQl1bj00CisJbGVhCTQoJWVheCksICVlYXgJCUMJCQkJdW49NAorCWptcAlMKGFtMikKKworTChiaWcpOglwdXNoCSVlc2kKKwlwdXNoCSVlYngKKwlwdXNoCSVlZGkKKwlweG9yCSVtbTYsICVtbTYKKwltb3ZkCSglZWF4KSwgJW1tNwkJQworCWxlYQk0KCVlYXgpLCAlZXNpCQlDIGluaXQgdXAsIHVwKysKKwlsZWEJNCglZWF4KSwgJWVheAkJQyB1cDIrKyAgRklYTUU6IHNob3VsZCBmaXggb2Zmc2V0cworCWxlYQk0KCVlZHgpLCAlZWRpCQlDIGluaXQgcnAsIHJwKysKKwlsZWEJNCglZWR4KSwgJWVkeAkJQyBycDIrKworCWxlYQktNCglZWN4KSwgJWVieAkJQyBsb29wIGNvdW50CisJYW5kCSQzLCAlZWN4CisJanoJTCgzbSkKKwljbXAJJDIsICVlY3gKKwlqYQlMKDJtKQorCWpiCUwoMG0pCisKK0woMW0pOgorCW1vdmQJKCVlYXgpLCAlbW00CQlDCQkJCW0gMQorCWxlYQkoJWVieCksICVlY3gJCUMgaW5uZXIgbG9vcCBjb3VudAkJbSAxCisJcG11bHVkcQklbW03LCAlbW00CQlDCQkJCW0gMQorCW1vdmQJNCglZWF4KSwgJW1tMwkJQwkJCQltIDEKKwlwbXVsdWRxCSVtbTcsICVtbTMJCUMJCQkJbSAxCisJbW92ZAk4KCVlYXgpLCAlbW0wCQlDCQkJCW0gMQorCWptcAlMKG0wMSkJCQlDCQkJCW0gMQorCUFMSUdOKDE2KQkJCUMJCQkJbSAxCitMKGxwbTEpOgorCXBtdWx1ZHEJJW1tNywgJW1tNAkJQwkJCQltIDEKKwlwYWRkcQklbW0wLCAlbW02CQlDCQkJCW0gMQorCW1vdmQJNCglZWF4KSwgJW1tMwkJQwkJCQltIDEKKwltb3ZkCSVtbTYsIC04KCVlZHgpCQlDCQkJCW0gMQorCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQltIDEKKwlwbXVsdWRxCSVtbTcsICVtbTMJCUMJCQkJbSAxCisJcGFkZHEJJW1tMSwgJW1tNgkJQwkJCQltIDEKKwltb3ZkCTgoJWVheCksICVtbTAJCUMJCQkJbSAxCisJbW92ZAklbW02LCAtNCglZWR4KQkJQwkJCQltIDEKKwlwc3JscQkkMzIsICVtbTYJCUMJCQkJbSAxCitMKG0wMSk6CXBtdWx1ZHEJJW1tNywgJW1tMAkJQwkJCQltIDEKKwlwYWRkcQklbW00LCAlbW02CQlDCQkJCW0gMQorCW1vdmQJMTIoJWVheCksICVtbTEJCUMJCQkJbSAxCisJbW92ZAklbW02LCAoJWVkeCkJCUMJCQkJbSAxCisJcHNybHEJJDMyLCAlbW02CQlDCQkJCW0gMQorCXBtdWx1ZHEJJW1tNywgJW1tMQkJQwkJCQltIDEKKwlwYWRkcQklbW0zLCAlbW02CQlDCQkJCW0gMQorCW1vdmQJMTYoJWVheCksICVtbTQJCUMJCQkJbSAxCisJbW92ZAklbW02LCA0KCVlZHgpCQlDCQkJCW0gMQorCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQltIDEKKwlsZWEJMTYoJWVheCksICVlYXgJCUMJCQkJbSAxCisJbGVhCTE2KCVlZHgpLCAlZWR4CQlDCQkJCW0gMQorCXN1YgkkNCwgJWVjeAkJQwkJCQltIDEKKwlqYQlMKGxwbTEpCQkJQwkJCQltIDEKKwlwbXVsdWRxCSVtbTcsICVtbTQJCUMJCQkJbSAxCisJcGFkZHEJJW1tMCwgJW1tNgkJQwkJCQltIDEKKwltb3ZkCSVtbTYsIC04KCVlZHgpCQlDCQkJCW0gMQorCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQltIDEKKwlwYWRkcQklbW0xLCAlbW02CQlDCQkJCW0gMQorCWptcAlMKDApCisKK0woMm0pOgorCW1vdmQJKCVlYXgpLCAlbW0xCQlDCQkJCW0gMgorCWxlYQkoJWVieCksICVlY3gJCUMgaW5uZXIgbG9vcCBjb3VudAkJbSAyCisJcG11bHVkcQklbW03LCAlbW0xCQlDCQkJCW0gMgorCW1vdmQJNCglZWF4KSwgJW1tNAkJQwkJCQltIDIKKwlwbXVsdWRxCSVtbTcsICVtbTQJCUMJCQkJbSAyCisJbW92ZAk4KCVlYXgpLCAlbW0zCQlDCQkJCW0gMgorCWptcAlMKG0xMCkJCQlDCQkJCW0gMgorCUFMSUdOKDE2KQkJCUMJCQkJbSAyCitMKGxwbTIpOgorCXBtdWx1ZHEJJW1tNywgJW1tNAkJQwkJCQltIDIKKwlwYWRkcQklbW0wLCAlbW02CQlDCQkJCW0gMgorCW1vdmQJOCglZWF4KSwgJW1tMwkJQwkJCQltIDIKKwltb3ZkCSVtbTYsIC00KCVlZHgpCQlDCQkJCW0gMgorCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQltIDIKK0wobTEwKToJcG11bHVkcQklbW03LCAlbW0zCQlDCQkJCW0gMgorCXBhZGRxCSVtbTEsICVtbTYJCUMJCQkJbSAyCisJbW92ZAkxMiglZWF4KSwgJW1tMAkJQwkJCQltIDIKKwltb3ZkCSVtbTYsICglZWR4KQkJQwkJCQltIDIKKwlwc3JscQkkMzIsICVtbTYJCUMJCQkJbSAyCisJcG11bHVkcQklbW03LCAlbW0wCQlDCQkJCW0gMgorCXBhZGRxCSVtbTQsICVtbTYJCUMJCQkJbSAyCisJbW92ZAkxNiglZWF4KSwgJW1tMQkJQwkJCQltIDIKKwltb3ZkCSVtbTYsIDQoJWVkeCkJCUMJCQkJbSAyCisJcHNybHEJJDMyLCAlbW02CQlDCQkJCW0gMgorCXBtdWx1ZHEJJW1tNywgJW1tMQkJQwkJCQltIDIKKwlwYWRkcQklbW0zLCAlbW02CQlDCQkJCW0gMgorCW1vdmQJMjAoJWVheCksICVtbTQJCUMJCQkJbSAyCisJbW92ZAklbW02LCA4KCVlZHgpCQlDCQkJCW0gMgorCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQltIDIKKwlsZWEJMTYoJWVheCksICVlYXgJCUMJCQkJbSAyCisJbGVhCTE2KCVlZHgpLCAlZWR4CQlDCQkJCW0gMgorCXN1YgkkNCwgJWVjeAkJQwkJCQltIDIKKwlqYQlMKGxwbTIpCQkJQwkJCQltIDIKKwlwbXVsdWRxCSVtbTcsICVtbTQJCUMJCQkJbSAyCisJcGFkZHEJJW1tMCwgJW1tNgkJQwkJCQltIDIKKwltb3ZkCSVtbTYsIC00KCVlZHgpCQlDCQkJCW0gMgorCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQltIDIKKwlwYWRkcQklbW0xLCAlbW02CQlDCQkJCW0gMgorCWptcAlMKDEpCisKK0woM20pOgorCW1vdmQJKCVlYXgpLCAlbW0wCQlDCQkJCW0gMworCWxlYQkoJWVieCksICVlY3gJCUMgaW5uZXIgbG9vcCBjb3VudAkJbSAzCisJcG11bHVkcQklbW03LCAlbW0wCQlDCQkJCW0gMworCW1vdmQJNCglZWF4KSwgJW1tMQkJQwkJCQltIDMKKwlwbXVsdWRxCSVtbTcsICVtbTEJCUMJCQkJbSAzCisJbW92ZAk4KCVlYXgpLCAlbW00CQlDCQkJCW0gMworCWptcAlMKGxwbTMpCQkJQwkJCQltIDMKKwlBTElHTigxNikJCQlDCQkJCW0gMworTChscG0zKToKKwlwbXVsdWRxCSVtbTcsICVtbTQJCUMJCQkJbSAzCisJcGFkZHEJJW1tMCwgJW1tNgkJQwkJCQltIDMKKwltb3ZkCTEyKCVlYXgpLCAlbW0zCQlDCQkJCW0gMworCW1vdmQJJW1tNiwgKCVlZHgpCQlDCQkJCW0gMworCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQltIDMKKwlwbXVsdWRxCSVtbTcsICVtbTMJCUMJCQkJbSAzCisJcGFkZHEJJW1tMSwgJW1tNgkJQwkJCQltIDMKKwltb3ZkCTE2KCVlYXgpLCAlbW0wCQlDCQkJCW0gMworCW1vdmQJJW1tNiwgNCglZWR4KQkJQwkJCQltIDMKKwlwc3JscQkkMzIsICVtbTYJCUMJCQkJbSAzCisJcG11bHVkcQklbW03LCAlbW0wCQlDCQkJCW0gMworCXBhZGRxCSVtbTQsICVtbTYJCUMJCQkJbSAzCisJbW92ZAkyMCglZWF4KSwgJW1tMQkJQwkJCQltIDMKKwltb3ZkCSVtbTYsIDgoJWVkeCkJCUMJCQkJbSAzCisJcHNybHEJJDMyLCAlbW02CQlDCQkJCW0gMworCXBtdWx1ZHEJJW1tNywgJW1tMQkJQwkJCQltIDMKKwlwYWRkcQklbW0zLCAlbW02CQlDCQkJCW0gMworCW1vdmQJMjQoJWVheCksICVtbTQJCUMJCQkJbSAzCisJbW92ZAklbW02LCAxMiglZWR4KQkJQwkJCQltIDMKKwlwc3JscQkkMzIsICVtbTYJCUMJCQkJbSAzCisJbGVhCTE2KCVlYXgpLCAlZWF4CQlDCQkJCW0gMworCWxlYQkxNiglZWR4KSwgJWVkeAkJQwkJCQltIDMKKwlzdWIJJDQsICVlY3gJCUMJCQkJbSAzCisJamEJTChscG0zKQkJCUMJCQkJbSAzCisJcG11bHVkcQklbW03LCAlbW00CQlDCQkJCW0gMworCXBhZGRxCSVtbTAsICVtbTYJCUMJCQkJbSAzCisJbW92ZAklbW02LCAoJWVkeCkJCUMJCQkJbSAzCisJcHNybHEJJDMyLCAlbW02CQlDCQkJCW0gMworCXBhZGRxCSVtbTEsICVtbTYJCUMJCQkJbSAzCisJam1wCUwoMikKKworTCgwbSk6CisJbW92ZAkoJWVheCksICVtbTMJCUMJCQkJbSAwCisJbGVhCSglZWJ4KSwgJWVjeAkJQyBpbm5lciBsb29wIGNvdW50CQltIDAKKwlwbXVsdWRxCSVtbTcsICVtbTMJCUMJCQkJbSAwCisJbW92ZAk0KCVlYXgpLCAlbW0wCQlDCQkJCW0gMAorCXBtdWx1ZHEJJW1tNywgJW1tMAkJQwkJCQltIDAKKwltb3ZkCTgoJWVheCksICVtbTEJCUMJCQkJbSAwCisJam1wCUwobTAwKQkJCUMJCQkJbSAwCisJQUxJR04oMTYpCQkJQwkJCQltIDAKK0wobHBtMCk6CisJcG11bHVkcQklbW03LCAlbW00CQlDCQkJCW0gMAorCXBhZGRxCSVtbTAsICVtbTYJCUMJCQkJbSAwCisJbW92ZAkoJWVheCksICVtbTMJCUMJCQkJbSAwCisJbW92ZAklbW02LCAtMTIoJWVkeCkJCUMJCQkJbSAwCisJcHNybHEJJDMyLCAlbW02CQlDCQkJCW0gMAorCXBtdWx1ZHEJJW1tNywgJW1tMwkJQwkJCQltIDAKKwlwYWRkcQklbW0xLCAlbW02CQlDCQkJCW0gMAorCW1vdmQJNCglZWF4KSwgJW1tMAkJQwkJCQltIDAKKwltb3ZkCSVtbTYsIC04KCVlZHgpCQlDCQkJCW0gMAorCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQltIDAKKwlwbXVsdWRxCSVtbTcsICVtbTAJCUMJCQkJbSAwCisJcGFkZHEJJW1tNCwgJW1tNgkJQwkJCQltIDAKKwltb3ZkCTgoJWVheCksICVtbTEJCUMJCQkJbSAwCisJbW92ZAklbW02LCAtNCglZWR4KQkJQwkJCQltIDAKKwlwc3JscQkkMzIsICVtbTYJCUMJCQkJbSAwCitMKG0wMCk6CXBtdWx1ZHEJJW1tNywgJW1tMQkJQwkJCQltIDAKKwlwYWRkcQklbW0zLCAlbW02CQlDCQkJCW0gMAorCW1vdmQJMTIoJWVheCksICVtbTQJCUMJCQkJbSAwCisJbW92ZAklbW02LCAoJWVkeCkJCUMJCQkJbSAwCisJcHNybHEJJDMyLCAlbW02CQlDCQkJCW0gMAorCWxlYQkxNiglZWF4KSwgJWVheAkJQwkJCQltIDAKKwlsZWEJMTYoJWVkeCksICVlZHgJCUMJCQkJbSAwCisJc3ViCSQ0LCAlZWN4CQlDCQkJCW0gMAorCWphCUwobHBtMCkJCQlDCQkJCW0gMAorCXBtdWx1ZHEJJW1tNywgJW1tNAkJQwkJCQltIDAKKwlwYWRkcQklbW0wLCAlbW02CQlDCQkJCW0gMAorCW1vdmQJJW1tNiwgLTEyKCVlZHgpCQlDCQkJCW0gMAorCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQltIDAKKwlwYWRkcQklbW0xLCAlbW02CQlDCQkJCW0gMAorCWptcAlMKDMpCisKK0wob3V0ZXIpOgorCWxlYQk4KCVlZGkpLCAlZWRpCQlDIHJwICs9IDIKKwltb3ZkCSglZXNpKSwgJW1tNwkJQwkJCQlhbSAzCisJbW92CSVlZGksICVlZHgJCUMgcnAyID0gcnAJCQlhbSAzCisJbGVhCTQoJWVzaSksICVlc2kJCUMgdXArKwkJCQlhbSAzCisJbGVhCSglZXNpKSwgJWVheAkJQyB1cDIgPSB1cAkJCWFtIDMKKwltb3ZkCSglZWF4KSwgJW1tMAkJQwkJCQlhbSAzCisJbGVhCSglZWJ4KSwgJWVjeAkJQyBpbm5lciBsb29wIGNvdW50CQlhbSAzCisJcHhvcgklbW02LCAlbW02CQlDCQkJCWFtIDMKKwlwbXVsdWRxCSVtbTcsICVtbTAJCUMJCQkJYW0gMworCW1vdmQJNCglZWF4KSwgJW1tMQkJQwkJCQlhbSAzCisJbW92ZAkoJWVkeCksICVtbTQJCUMJCQkJYW0gMworCXBtdWx1ZHEJJW1tNywgJW1tMQkJQwkJCQlhbSAzCisJbW92ZAk4KCVlYXgpLCAlbW0yCQlDCQkJCWFtIDMKKwlwYWRkcQklbW0wLCAlbW00CQlDCQkJCWFtIDMKKwltb3ZkCTQoJWVkeCksICVtbTUJCUMJCQkJYW0gMworCWptcAlMKGxhbTMpCQkJQwkJCQlhbSAzCisJQUxJR04oMTYpCQkJQwkJCQlhbSAzCitMKGxhbTMpOgorCXBtdWx1ZHEJJW1tNywgJW1tMgkJQwkJCQlhbSAzCisJcGFkZHEJJW1tNCwgJW1tNgkJQwkJCQlhbSAzCisJbW92ZAkxMiglZWF4KSwgJW1tMwkJQwkJCQlhbSAzCisJcGFkZHEJJW1tMSwgJW1tNQkJQwkJCQlhbSAzCisJbW92ZAk4KCVlZHgpLCAlbW00CQlDCQkJCWFtIDMKKwltb3ZkCSVtbTYsICglZWR4KQkJQwkJCQlhbSAzCisJcHNybHEJJDMyLCAlbW02CQlDCQkJCWFtIDMKKwlwbXVsdWRxCSVtbTcsICVtbTMJCUMJCQkJYW0gMworCXBhZGRxCSVtbTUsICVtbTYJCUMJCQkJYW0gMworCW1vdmQJMTYoJWVheCksICVtbTAJCUMJCQkJYW0gMworCXBhZGRxCSVtbTIsICVtbTQJCUMJCQkJYW0gMworCW1vdmQJMTIoJWVkeCksICVtbTUJCUMJCQkJYW0gMworCW1vdmQJJW1tNiwgNCglZWR4KQkJQwkJCQlhbSAzCisJcHNybHEJJDMyLCAlbW02CQlDCQkJCWFtIDMKKwlwbXVsdWRxCSVtbTcsICVtbTAJCUMJCQkJYW0gMworCXBhZGRxCSVtbTQsICVtbTYJCUMJCQkJYW0gMworCW1vdmQJMjAoJWVheCksICVtbTEJCUMJCQkJYW0gMworCXBhZGRxCSVtbTMsICVtbTUJCUMJCQkJYW0gMworCW1vdmQJMTYoJWVkeCksICVtbTQJCUMJCQkJYW0gMworCW1vdmQJJW1tNiwgOCglZWR4KQkJQwkJCQlhbSAzCisJcHNybHEJJDMyLCAlbW02CQlDCQkJCWFtIDMKKwlwbXVsdWRxCSVtbTcsICVtbTEJCUMJCQkJYW0gMworCXBhZGRxCSVtbTUsICVtbTYJCUMJCQkJYW0gMworCW1vdmQJMjQoJWVheCksICVtbTIJCUMJCQkJYW0gMworCXBhZGRxCSVtbTAsICVtbTQJCUMJCQkJYW0gMworCW1vdmQJMjAoJWVkeCksICVtbTUJCUMJCQkJYW0gMworCW1vdmQJJW1tNiwgMTIoJWVkeCkJCUMJCQkJYW0gMworCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQlhbSAzCisJbGVhCTE2KCVlYXgpLCAlZWF4CQlDCQkJCWFtIDMKKwlsZWEJMTYoJWVkeCksICVlZHgJCUMJCQkJYW0gMworCXN1YgkkNCwgJWVjeAkJQwkJCQlhbSAzCisJamEJTChsYW0zKQkJCUMJCQkJYW0gMworCXBtdWx1ZHEJJW1tNywgJW1tMgkJQwkJCQlhbSAzCisJcGFkZHEJJW1tNCwgJW1tNgkJQwkJCQlhbSAzCisJcGFkZHEJJW1tMSwgJW1tNQkJQwkJCQlhbSAzCisJbW92ZAk4KCVlZHgpLCAlbW00CQlDCQkJCWFtIDMKKwltb3ZkCSVtbTYsICglZWR4KQkJQwkJCQlhbSAzCisJcHNybHEJJDMyLCAlbW02CQlDCQkJCWFtIDMKKwlwYWRkcQklbW01LCAlbW02CQlDCQkJCWFtIDMKKwlwYWRkcQklbW0yLCAlbW00CQlDCQkJCWFtIDMKK0woMik6CW1vdmQJJW1tNiwgNCglZWR4KQkJQwkJCQlhbSAzCisJcHNybHEJJDMyLCAlbW02CQlDCQkJCWFtIDMKKwlwYWRkcQklbW00LCAlbW02CQlDCQkJCWFtIDMKKwltb3ZkCSVtbTYsIDgoJWVkeCkJCUMJCQkJYW0gMworCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQlhbSAzCisJbW92ZAklbW02LCAxMiglZWR4KQkJQwkJCQlhbSAzCisKKwlsZWEJOCglZWRpKSwgJWVkaQkJQyBycCArPSAyCisJbW92ZAkoJWVzaSksICVtbTcJCUMJCQkJYW0gMgorCW1vdgklZWRpLCAlZWR4CQlDIHJwMiA9IHJwCQkJYW0gMgorCWxlYQk0KCVlc2kpLCAlZXNpCQlDIHVwKysJCQkJYW0gMgorCWxlYQkoJWVzaSksICVlYXgJCUMgdXAyID0gdXAJCQlhbSAyCisJbW92ZAkoJWVheCksICVtbTEJCUMJCQkJYW0gMgorCWxlYQkoJWVieCksICVlY3gJCUMgaW5uZXIgbG9vcCBjb3VudAkJYW0gMgorCXB4b3IJJW1tNiwgJW1tNgkJQwkJCQlhbSAyCisJcG11bHVkcQklbW03LCAlbW0xCQlDCQkJCWFtIDIKKwltb3ZkCTQoJWVheCksICVtbTIJCUMJCQkJYW0gMgorCW1vdmQJKCVlZHgpLCAlbW01CQlDCQkJCWFtIDIKKwlwbXVsdWRxCSVtbTcsICVtbTIJCUMJCQkJYW0gMgorCW1vdmQJOCglZWF4KSwgJW1tMwkJQwkJCQlhbSAyCisJcGFkZHEJJW1tMSwgJW1tNQkJQwkJCQlhbSAyCisJbW92ZAk0KCVlZHgpLCAlbW00CQlDCQkJCWFtIDIKKwlqbXAJTChhbTEwKQkJCUMJCQkJYW0gMgorCUFMSUdOKDE2KQkJCUMJCQkJYW0gMgorTChsYW0yKToKKwlwbXVsdWRxCSVtbTcsICVtbTIJCUMJCQkJYW0gMgorCXBhZGRxCSVtbTQsICVtbTYJCUMJCQkJYW0gMgorCW1vdmQJOCglZWF4KSwgJW1tMwkJQwkJCQlhbSAyCisJcGFkZHEJJW1tMSwgJW1tNQkJQwkJCQlhbSAyCisJbW92ZAk0KCVlZHgpLCAlbW00CQlDCQkJCWFtIDIKKwltb3ZkCSVtbTYsIC00KCVlZHgpCQlDCQkJCWFtIDIKKwlwc3JscQkkMzIsICVtbTYJCUMJCQkJYW0gMgorTChhbTEwKToKKwlwbXVsdWRxCSVtbTcsICVtbTMJCUMJCQkJYW0gMgorCXBhZGRxCSVtbTUsICVtbTYJCUMJCQkJYW0gMgorCW1vdmQJMTIoJWVheCksICVtbTAJCUMJCQkJYW0gMgorCXBhZGRxCSVtbTIsICVtbTQJCUMJCQkJYW0gMgorCW1vdmQJOCglZWR4KSwgJW1tNQkJQwkJCQlhbSAyCisJbW92ZAklbW02LCAoJWVkeCkJCUMJCQkJYW0gMgorCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQlhbSAyCisJcG11bHVkcQklbW03LCAlbW0wCQlDCQkJCWFtIDIKKwlwYWRkcQklbW00LCAlbW02CQlDCQkJCWFtIDIKKwltb3ZkCTE2KCVlYXgpLCAlbW0xCQlDCQkJCWFtIDIKKwlwYWRkcQklbW0zLCAlbW01CQlDCQkJCWFtIDIKKwltb3ZkCTEyKCVlZHgpLCAlbW00CQlDCQkJCWFtIDIKKwltb3ZkCSVtbTYsIDQoJWVkeCkJCUMJCQkJYW0gMgorCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQlhbSAyCisJcG11bHVkcQklbW03LCAlbW0xCQlDCQkJCWFtIDIKKwlwYWRkcQklbW01LCAlbW02CQlDCQkJCWFtIDIKKwltb3ZkCTIwKCVlYXgpLCAlbW0yCQlDCQkJCWFtIDIKKwlwYWRkcQklbW0wLCAlbW00CQlDCQkJCWFtIDIKKwltb3ZkCTE2KCVlZHgpLCAlbW01CQlDCQkJCWFtIDIKKwltb3ZkCSVtbTYsIDgoJWVkeCkJCUMJCQkJYW0gMgorCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQlhbSAyCisJbGVhCTE2KCVlYXgpLCAlZWF4CQlDCQkJCWFtIDIKKwlsZWEJMTYoJWVkeCksICVlZHgJCUMJCQkJYW0gMgorCXN1YgkkNCwgJWVjeAkJQwkJCQlhbSAyCisJamEJTChsYW0yKQkJCUMJCQkJYW0gMgorCXBtdWx1ZHEJJW1tNywgJW1tMgkJQwkJCQlhbSAyCisJcGFkZHEJJW1tNCwgJW1tNgkJQwkJCQlhbSAyCisJcGFkZHEJJW1tMSwgJW1tNQkJQwkJCQlhbSAyCisJbW92ZAk0KCVlZHgpLCAlbW00CQlDCQkJCWFtIDIKKwltb3ZkCSVtbTYsIC00KCVlZHgpCQlDCQkJCWFtIDIKKwlwc3JscQkkMzIsICVtbTYJCUMJCQkJYW0gMgorCXBhZGRxCSVtbTUsICVtbTYJCUMJCQkJYW0gMgorCXBhZGRxCSVtbTIsICVtbTQJCUMJCQkJYW0gMgorTCgxKToJbW92ZAklbW02LCAoJWVkeCkJCUMJCQkJYW0gMgorCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQlhbSAyCisJcGFkZHEJJW1tNCwgJW1tNgkJQwkJCQlhbSAyCisJbW92ZAklbW02LCA0KCVlZHgpCQlDCQkJCWFtIDIKKwlwc3JscQkkMzIsICVtbTYJCUMJCQkJYW0gMgorCW1vdmQJJW1tNiwgOCglZWR4KQkJQwkJCQlhbSAyCisKKwlsZWEJOCglZWRpKSwgJWVkaQkJQyBycCArPSAyCisJbW92ZAkoJWVzaSksICVtbTcJCUMJCQkJYW0gMQorCW1vdgklZWRpLCAlZWR4CQlDIHJwMiA9IHJwCQkJYW0gMQorCWxlYQk0KCVlc2kpLCAlZXNpCQlDIHVwKysJCQkJYW0gMQorCWxlYQkoJWVzaSksICVlYXgJCUMgdXAyID0gdXAJCQlhbSAxCisJbW92ZAkoJWVheCksICVtbTIJCUMJCQkJYW0gMQorCWxlYQkoJWVieCksICVlY3gJCUMgaW5uZXIgbG9vcCBjb3VudAkJYW0gMQorCXB4b3IJJW1tNiwgJW1tNgkJQwkJCQlhbSAxCisJcG11bHVkcQklbW03LCAlbW0yCQlDCQkJCWFtIDEKKwltb3ZkCTQoJWVheCksICVtbTMJCUMJCQkJYW0gMQorCW1vdmQJKCVlZHgpLCAlbW00CQlDCQkJCWFtIDEKKwlwbXVsdWRxCSVtbTcsICVtbTMJCUMJCQkJYW0gMQorCW1vdmQJOCglZWF4KSwgJW1tMAkJQwkJCQlhbSAxCisJcGFkZHEJJW1tMiwgJW1tNAkJQwkJCQlhbSAxCisJbW92ZAk0KCVlZHgpLCAlbW01CQlDCQkJCWFtIDEKKwlqbXAJTChhbTAxKQkJCUMJCQkJYW0gMQorCUFMSUdOKDE2KQkJCUMJCQkJYW0gMQorTChsYW0xKToKKwlwbXVsdWRxCSVtbTcsICVtbTIJCUMJCQkJYW0gMQorCXBhZGRxCSVtbTQsICVtbTYJCUMJCQkJYW0gMQorCW1vdmQJNCglZWF4KSwgJW1tMwkJQwkJCQlhbSAxCisJcGFkZHEJJW1tMSwgJW1tNQkJQwkJCQlhbSAxCisJbW92ZAkoJWVkeCksICVtbTQJCUMJCQkJYW0gMQorCW1vdmQJJW1tNiwgLTgoJWVkeCkJCUMJCQkJYW0gMQorCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQlhbSAxCisJcG11bHVkcQklbW03LCAlbW0zCQlDCQkJCWFtIDEKKwlwYWRkcQklbW01LCAlbW02CQlDCQkJCWFtIDEKKwltb3ZkCTgoJWVheCksICVtbTAJCUMJCQkJYW0gMQorCXBhZGRxCSVtbTIsICVtbTQJCUMJCQkJYW0gMQorCW1vdmQJNCglZWR4KSwgJW1tNQkJQwkJCQlhbSAxCisJbW92ZAklbW02LCAtNCglZWR4KQkJQwkJCQlhbSAxCisJcHNybHEJJDMyLCAlbW02CQlDCQkJCWFtIDEKK0woYW0wMSk6CisJcG11bHVkcQklbW03LCAlbW0wCQlDCQkJCWFtIDEKKwlwYWRkcQklbW00LCAlbW02CQlDCQkJCWFtIDEKKwltb3ZkCTEyKCVlYXgpLCAlbW0xCQlDCQkJCWFtIDEKKwlwYWRkcQklbW0zLCAlbW01CQlDCQkJCWFtIDEKKwltb3ZkCTgoJWVkeCksICVtbTQJCUMJCQkJYW0gMQorCW1vdmQJJW1tNiwgKCVlZHgpCQlDCQkJCWFtIDEKKwlwc3JscQkkMzIsICVtbTYJCUMJCQkJYW0gMQorCXBtdWx1ZHEJJW1tNywgJW1tMQkJQwkJCQlhbSAxCisJcGFkZHEJJW1tNSwgJW1tNgkJQwkJCQlhbSAxCisJbW92ZAkxNiglZWF4KSwgJW1tMgkJQwkJCQlhbSAxCisJcGFkZHEJJW1tMCwgJW1tNAkJQwkJCQlhbSAxCisJbW92ZAkxMiglZWR4KSwgJW1tNQkJQwkJCQlhbSAxCisJbW92ZAklbW02LCA0KCVlZHgpCQlDCQkJCWFtIDEKKwlwc3JscQkkMzIsICVtbTYJCUMJCQkJYW0gMQorCWxlYQkxNiglZWF4KSwgJWVheAkJQwkJCQlhbSAxCisJbGVhCTE2KCVlZHgpLCAlZWR4CQlDCQkJCWFtIDEKKwlzdWIJJDQsICVlY3gJCUMJCQkJYW0gMQorCWphCUwobGFtMSkJCQlDCQkJCWFtIDEKKwlwbXVsdWRxCSVtbTcsICVtbTIJCUMJCQkJYW0gMQorCXBhZGRxCSVtbTQsICVtbTYJCUMJCQkJYW0gMQorCXBhZGRxCSVtbTEsICVtbTUJCUMJCQkJYW0gMQorCW1vdmQJKCVlZHgpLCAlbW00CQlDCQkJCWFtIDEKKwltb3ZkCSVtbTYsIC04KCVlZHgpCQlDCQkJCWFtIDEKKwlwc3JscQkkMzIsICVtbTYJCUMJCQkJYW0gMQorCXBhZGRxCSVtbTUsICVtbTYJCUMJCQkJYW0gMQorCXBhZGRxCSVtbTIsICVtbTQJCUMJCQkJYW0gMQorTCgwKToJbW92ZAklbW02LCAtNCglZWR4KQkJQwkJCQlhbSAxCisJcHNybHEJJDMyLCAlbW02CQlDCQkJCWFtIDEKKwlwYWRkcQklbW00LCAlbW02CQlDCQkJCWFtIDEKKwltb3ZkCSVtbTYsICglZWR4KQkJQwkJCQlhbSAxCisJcHNybHEJJDMyLCAlbW02CQlDCQkJCWFtIDEKKwltb3ZkCSVtbTYsIDQoJWVkeCkJCUMJCQkJYW0gMQorCisJbGVhCTgoJWVkaSksICVlZGkJCUMgcnAgKz0gMgorCW1vdmQJKCVlc2kpLCAlbW03CQlDCQkJCWFtIDAKKwltb3YJJWVkaSwgJWVkeAkJQyBycDIgPSBycAkJCWFtIDAKKwlsZWEJNCglZXNpKSwgJWVzaQkJQyB1cCsrCQkJCWFtIDAKKwlsZWEJKCVlc2kpLCAlZWF4CQlDIHVwMiA9IHVwCQkJYW0gMAorCW1vdmQJKCVlYXgpLCAlbW0zCQlDCQkJCWFtIDAKKwlsZWEJKCVlYngpLCAlZWN4CQlDIGlubmVyIGxvb3AgY291bnQJCWFtIDAKKwlweG9yCSVtbTYsICVtbTYJCUMJCQkJYW0gMAorCXBtdWx1ZHEJJW1tNywgJW1tMwkJQwkJCQlhbSAwCisJbW92ZAk0KCVlYXgpLCAlbW0wCQlDCQkJCWFtIDAKKwltb3ZkCSglZWR4KSwgJW1tNQkJQwkJCQlhbSAwCisJcG11bHVkcQklbW03LCAlbW0wCQlDCQkJCWFtIDAKKwltb3ZkCTgoJWVheCksICVtbTEJCUMJCQkJYW0gMAorCXBhZGRxCSVtbTMsICVtbTUJCUMJCQkJYW0gMAorCW1vdmQJNCglZWR4KSwgJW1tNAkJQwkJCQlhbSAwCisJam1wCUwoYW0wMCkJCQlDCQkJCWFtIDAKKwlBTElHTigxNikJCQlDCQkJCWFtIDAKK0wobGFtMCk6CisJcG11bHVkcQklbW03LCAlbW0yCQlDCQkJCWFtIDAKKwlwYWRkcQklbW00LCAlbW02CQlDCQkJCWFtIDAKKwltb3ZkCSglZWF4KSwgJW1tMwkJQwkJCQlhbSAwCisJcGFkZHEJJW1tMSwgJW1tNQkJQwkJCQlhbSAwCisJbW92ZAktNCglZWR4KSwgJW1tNAkJQwkJCQlhbSAwCisJbW92ZAklbW02LCAtMTIoJWVkeCkJCUMJCQkJYW0gMAorCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQlhbSAwCisJcG11bHVkcQklbW03LCAlbW0zCQlDCQkJCWFtIDAKKwlwYWRkcQklbW01LCAlbW02CQlDCQkJCWFtIDAKKwltb3ZkCTQoJWVheCksICVtbTAJCUMJCQkJYW0gMAorCXBhZGRxCSVtbTIsICVtbTQJCUMJCQkJYW0gMAorCW1vdmQJKCVlZHgpLCAlbW01CQlDCQkJCWFtIDAKKwltb3ZkCSVtbTYsIC04KCVlZHgpCQlDCQkJCWFtIDAKKwlwc3JscQkkMzIsICVtbTYJCUMJCQkJYW0gMAorCXBtdWx1ZHEJJW1tNywgJW1tMAkJQwkJCQlhbSAwCisJcGFkZHEJJW1tNCwgJW1tNgkJQwkJCQlhbSAwCisJbW92ZAk4KCVlYXgpLCAlbW0xCQlDCQkJCWFtIDAKKwlwYWRkcQklbW0zLCAlbW01CQlDCQkJCWFtIDAKKwltb3ZkCTQoJWVkeCksICVtbTQJCUMJCQkJYW0gMAorCW1vdmQJJW1tNiwgLTQoJWVkeCkJCUMJCQkJYW0gMAorCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQlhbSAwCitMKGFtMDApOgorCXBtdWx1ZHEJJW1tNywgJW1tMQkJQwkJCQlhbSAwCisJcGFkZHEJJW1tNSwgJW1tNgkJQwkJCQlhbSAwCisJbW92ZAkxMiglZWF4KSwgJW1tMgkJQwkJCQlhbSAwCisJcGFkZHEJJW1tMCwgJW1tNAkJQwkJCQlhbSAwCisJbW92ZAk4KCVlZHgpLCAlbW01CQlDCQkJCWFtIDAKKwltb3ZkCSVtbTYsICglZWR4KQkJQwkJCQlhbSAwCisJcHNybHEJJDMyLCAlbW02CQlDCQkJCWFtIDAKKwlsZWEJMTYoJWVheCksICVlYXgJCUMJCQkJYW0gMAorCWxlYQkxNiglZWR4KSwgJWVkeAkJQwkJCQlhbSAwCisJc3ViCSQ0LCAlZWN4CQlDCQkJCWFtIDAKKwlqYQlMKGxhbTApCQkJQwkJCQlhbSAwCisJcG11bHVkcQklbW03LCAlbW0yCQlDCQkJCWFtIDAKKwlwYWRkcQklbW00LCAlbW02CQlDCQkJCWFtIDAKKwlwYWRkcQklbW0xLCAlbW01CQlDCQkJCWFtIDAKKwltb3ZkCS00KCVlZHgpLCAlbW00CQlDCQkJCWFtIDAKKwltb3ZkCSVtbTYsIC0xMiglZWR4KQkJQwkJCQlhbSAwCisJcHNybHEJJDMyLCAlbW02CQlDCQkJCWFtIDAKKwlwYWRkcQklbW01LCAlbW02CQlDCQkJCWFtIDAKKwlwYWRkcQklbW0yLCAlbW00CQlDCQkJCWFtIDAKK0woMyk6CW1vdmQJJW1tNiwgLTgoJWVkeCkJCUMJCQkJYW0gMAorCXBzcmxxCSQzMiwgJW1tNgkJQwkJCQlhbSAwCisJcGFkZHEJJW1tNCwgJW1tNgkJQwkJCQlhbSAwCisJbW92ZAklbW02LCAtNCglZWR4KQkJQwkJCQlhbSAwCisJcHNybHEJJDMyLCAlbW02CQlDCQkJCWFtIDAKKwltb3ZkCSVtbTYsICglZWR4KQkJQwkJCQlhbSAwCisJc3ViCSQ0LCAlZWJ4CQlDCQkJCWFtIDAKKwlqYQlMKG91dGVyKQkJCUMJCQkJYW0gMAorCisJbW92CSVlZGksICVlZHgKKwltb3YJJWVzaSwgJWVheAorCXBvcAklZWRpCisJcG9wCSVlYngKKwlwb3AJJWVzaQorCitMKGFtMyk6CUMgdXBbdW4tMS4udW4tM10geCB1cFt1bi00XQorCWxlYQk4KCVlZHgpLCAlZWR4CQlDIHJwMiArPSAyCisJbW92ZAkoJWVheCksICVtbTcKKwltb3ZkCTQoJWVheCksICVtbTEKKwltb3ZkCTgoJWVheCksICVtbTIKKwltb3ZkCTEyKCVlYXgpLCAlbW0zCisJbW92ZAkoJWVkeCksICVtbTQKKwlwbXVsdWRxCSVtbTcsICVtbTEKKwltb3ZkCTQoJWVkeCksICVtbTUKKwlwbXVsdWRxCSVtbTcsICVtbTIKKwltb3ZkCTgoJWVkeCksICVtbTYKKwlwbXVsdWRxCSVtbTcsICVtbTMKKwlwYWRkcQklbW0xLCAlbW00CisJcGFkZHEJJW1tMiwgJW1tNQorCXBhZGRxCSVtbTMsICVtbTYKKwltb3ZkCSVtbTQsICglZWR4KQorCXBzcmxxCSQzMiwgJW1tNAorCXBhZGRxCSVtbTUsICVtbTQKKwltb3ZkCSVtbTQsIDQoJWVkeCkKKwlwc3JscQkkMzIsICVtbTQKKwlwYWRkcQklbW02LCAlbW00CisJbW92ZAklbW00LCA4KCVlZHgpCisJcHNybHEJJDMyLCAlbW00CisJbW92ZAklbW00LCAxMiglZWR4KQkJQyBGSVhNRSBmZWVkIHRocm91Z2ghCisJbGVhCTQoJWVheCksICVlYXgKKworTChhbTIpOglDIHVwW3VuLTEuLnVuLTJdIHggdXBbdW4tM10KKwlsZWEJOCglZWR4KSwgJWVkeAkJQyBycDIgKz0gMgorCW1vdmQJKCVlYXgpLCAlbW03CisJbW92ZAk0KCVlYXgpLCAlbW0xCisJbW92ZAk4KCVlYXgpLCAlbW0yCisJbW92ZAkoJWVkeCksICVtbTQKKwltb3ZkCTQoJWVkeCksICVtbTUKKwlwbXVsdWRxCSVtbTcsICVtbTEKKwlwbXVsdWRxCSVtbTcsICVtbTIKKwlwYWRkcQklbW0xLCAlbW00CisJcGFkZHEJJW1tMiwgJW1tNQorCW1vdmQJJW1tNCwgKCVlZHgpCisJcHNybHEJJDMyLCAlbW00CisJcGFkZHEJJW1tNSwgJW1tNAorCW1vdmQJJW1tNCwgNCglZWR4KQorCXBzcmxxCSQzMiwgJW1tNAorCW1vdmQJJW1tNCwgOCglZWR4KQkJQyBGSVhNRSBmZWVkIHRocm91Z2ghCisJbGVhCTQoJWVheCksICVlYXgKKworTChhbTEpOglDIHVwW3VuLTFdIHggdXBbdW4tMl0KKwlsZWEJOCglZWR4KSwgJWVkeAkJQyBycDIgKz0gMgorCW1vdmQJKCVlYXgpLCAlbW03CisJbW92ZAk0KCVlYXgpLCAlbW0yCisJbW92ZAkoJWVkeCksICVtbTQKKwlwbXVsdWRxCSVtbTcsICVtbTIKKwlwYWRkcQklbW0yLCAlbW00CisJbW92ZAklbW00LCAoJWVkeCkKKwlwc3JscQkkMzIsICVtbTQKKwltb3ZkCSVtbTQsIDQoJWVkeCkKKworQyAqKiogZGlhZyBzdHVmZiwgdXNlIGVsZW1lbnRhcnkgY29kZSBmb3Igbm93CisKKwltb3YJNCglZXNwKSwgJWVkeAkJQyBycAorCW1vdgk4KCVlc3ApLCAlZWF4CQlDIHVwCisJbW92CTEyKCVlc3ApLCAlZWN4CQlDIHVuCisKKwltb3ZkCSglZWF4KSwgJW1tMgorCXBtdWx1ZHEJJW1tMiwgJW1tMgkJQyBzcmNbMF1eMgorCisJcGNtcGVxZAklbW03LCAlbW03CisJcHNybHEJJDMyLCAlbW03CisKKwltb3ZkCTQoJWVkeCksICVtbTMJCUMgZHN0WzFdCisKKwltb3ZkCSVtbTIsICglZWR4KQorCXBzcmxxCSQzMiwgJW1tMgorCisJcHNsbHEJJDEsICVtbTMJCUMgMipkc3RbMV0KKwlwYWRkcQklbW0zLCAlbW0yCisJbW92ZAklbW0yLCA0KCVlZHgpCisJcHNybHEJJDMyLCAlbW0yCisKKwlzdWIJJDIsICVlY3gKKworTChkaWFnKToKKwltb3ZkCTQoJWVheCksICVtbTAJCUMgc3JjIGxpbWIKKwlhZGQJJDQsICVlYXgKKwlwbXVsdWRxCSVtbTAsICVtbTAKKwltb3ZxCSVtbTcsICVtbTEKKwlwYW5kCSVtbTAsICVtbTEJCUMgZGlhZ29uYWwgbG93CisJcHNybHEJJDMyLCAlbW0wCQlDIGRpYWdvbmFsIGhpZ2gKKworCW1vdmQJOCglZWR4KSwgJW1tMworCXBzbGxxCSQxLCAlbW0zCQlDIDIqZHN0W2ldCisJcGFkZHEJJW1tMywgJW1tMQorCXBhZGRxCSVtbTEsICVtbTIKKwltb3ZkCSVtbTIsIDgoJWVkeCkKKwlwc3JscQkkMzIsICVtbTIKKworCW1vdmQJMTIoJWVkeCksICVtbTMKKwlwc2xscQkkMSwgJW1tMwkJQyAyKmRzdFtpKzFdCisJcGFkZHEJJW1tMywgJW1tMAorCXBhZGRxCSVtbTAsICVtbTIKKwltb3ZkCSVtbTIsIDEyKCVlZHgpCisJYWRkCSQ4LCAlZWR4CisJcHNybHEJJDMyLCAlbW0yCisKKwlzdWIJJDEsICVlY3gKKwlqbnoJTChkaWFnKQorCisJbW92ZAk0KCVlYXgpLCAlbW0wCQlDIHNyY1tzaXplLTFdCisJcG11bHVkcQklbW0wLCAlbW0wCisJcGFuZAklbW0wLCAlbW03CQlDIGRpYWdvbmFsIGxvdworCXBzcmxxCSQzMiwgJW1tMAkJQyBkaWFnb25hbCBoaWdoCisKKwltb3ZkCTgoJWVkeCksICVtbTMJCUMgZHN0WzIqc2l6ZS0yXQorCXBzbGxxCSQxLCAlbW0zCisJcGFkZHEJJW1tMywgJW1tNworCXBhZGRxCSVtbTcsICVtbTIKKwltb3ZkCSVtbTIsIDgoJWVkeCkKKwlwc3JscQkkMzIsICVtbTIKKworCXBhZGRxCSVtbTAsICVtbTIKKwltb3ZkCSVtbTIsIDEyKCVlZHgpCQlDIGRzdFsyKnNpemUtMV0KKworCWVtbXMKKwlyZXQKKworRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bTQvc3NlMi9zdWJfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtNC9zc2UyL3N1Yl9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmExYzAxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bTQvc3NlMi9zdWJfbi5hc20KQEAgLTAsMCArMSwxMTkgQEAKK2RubCAgSW50ZWwgUGVudGl1bS00IG1wbl9zdWJfbiAtLSBtcG4gc3VidHJhY3Rpb24uCisKK2RubCAgQ29weXJpZ2h0IDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDCQkJCQljeWNsZXMvbGltYgorQwkJCSAgICAgZHN0IT1zcmMxLDIgIGRzdD09c3JjMSAgZHN0PT1zcmMyCitDIFA2IG1vZGVsIDAtOCwxMC0xMgkJLQorQyBQNiBtb2RlbCA5ICAgKEJhbmlhcykJCT8KK0MgUDYgbW9kZWwgMTMgIChEb3RoYW4pCQk/CitDIFA0IG1vZGVsIDAtMSAoV2lsbGFtZXR0ZSkJPworQyBQNCBtb2RlbCAyICAgKE5vcnRod29vZCkJNAkgICAgIDYJCTYKK0MgUDQgbW9kZWwgMy00IChQcmVzY290dCkJNC4yNQkgICAgIDcuNQk3LjUKKworZGVmZnJhbWUoUEFSQU1fQ0FSUlksMjApCitkZWZmcmFtZShQQVJBTV9TSVpFLCAxNikKK2RlZmZyYW1lKFBBUkFNX1NSQzIsIDEyKQorZGVmZnJhbWUoUEFSQU1fU1JDMSwgOCkKK2RlZmZyYW1lKFBBUkFNX0RTVCwgIDQpCisKK2RubCAgcmUtdXNlIHBhcmFtZXRlciBzcGFjZQorZGVmaW5lKFNBVkVfRUJYLGBQQVJBTV9TUkMxJykKKworCVRFWFQKKwlBTElHTig4KQorCitQUk9MT0dVRShtcG5fc3ViX25jKQorZGVmbGl0KGBGUkFNRScsMCkKKwltb3ZkCVBBUkFNX0NBUlJZLCAlbW0wCisJam1wCUwoc3RhcnRfbmMpCitFUElMT0dVRSgpCisKKwlBTElHTig4KQorUFJPTE9HVUUobXBuX3N1Yl9uKQorZGVmbGl0KGBGUkFNRScsMCkKKwlweG9yCSVtbTAsICVtbTAKK0woc3RhcnRfbmMpOgorCW1vdglQQVJBTV9TUkMxLCAlZWF4CisJbW92CSVlYngsIFNBVkVfRUJYCisJbW92CVBBUkFNX1NSQzIsICVlYngKKwltb3YJUEFSQU1fRFNULCAlZWR4CisJbW92CVBBUkFNX1NJWkUsICVlY3gKKworCWxlYQkoJWVheCwlZWN4LDQpLCAlZWF4CUMgc3JjMSBlbmQKKwlsZWEJKCVlYngsJWVjeCw0KSwgJWVieAlDIHNyYzIgZW5kCisJbGVhCSglZWR4LCVlY3gsNCksICVlZHgJQyBkc3QgZW5kCisJbmVnCSVlY3gJCQlDIC1zaXplCisKK0wodG9wKToKKwlDIGVheAlzcmMxIGVuZAorCUMgZWJ4CXNyYzIgZW5kCisJQyBlY3gJY291bnRlciwgbGltYnMsIG5lZ2F0aXZlCisJQyBlZHgJZHN0IGVuZAorCUMgbW0wCWNhcnJ5IGJpdAorCisJbW92ZAkoJWVheCwlZWN4LDQpLCAlbW0xCisJbW92ZAkoJWVieCwlZWN4LDQpLCAlbW0yCisJcHN1YnEJJW1tMiwgJW1tMQorCisJcHN1YnEJJW1tMCwgJW1tMQorCW1vdmQJJW1tMSwgKCVlZHgsJWVjeCw0KQorCisJcHNybHEJJDYzLCAlbW0xCisKKwlhZGQJJDEsICVlY3gKKwlqeglMKGRvbmVfbW0xKQorCisJbW92ZAkoJWVheCwlZWN4LDQpLCAlbW0wCisJbW92ZAkoJWVieCwlZWN4LDQpLCAlbW0yCisJcHN1YnEJJW1tMiwgJW1tMAorCisJcHN1YnEJJW1tMSwgJW1tMAorCW1vdmQJJW1tMCwgKCVlZHgsJWVjeCw0KQorCisJcHNybHEJJDYzLCAlbW0wCisKKwlhZGQJJDEsICVlY3gKKwlqbnoJTCh0b3ApCisKKwltb3ZkCSVtbTAsICVlYXgKKwltb3YJU0FWRV9FQlgsICVlYngKKwllbW1zCisJcmV0CisKK0woZG9uZV9tbTEpOgorCW1vdmQJJW1tMSwgJWVheAorCW1vdglTQVZFX0VCWCwgJWVieAorCWVtbXMKKwlyZXQKKworRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bTQvc3NlMi9zdWJtdWxfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9wZW50aXVtNC9zc2UyL3N1Ym11bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjA2NzViCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcGVudGl1bTQvc3NlMi9zdWJtdWxfMS5hc20KQEAgLTAsMCArMSwxODIgQEAKK2RubCAgSW50ZWwgUGVudGl1bS00IG1wbl9zdWJtdWxfMSAtLSBNdWx0aXBseSBhIGxpbWIgdmVjdG9yIHdpdGggYSBsaW1iIGFuZAorZG5sICBzdWJ0cmFjdCB0aGUgcmVzdWx0IGZyb20gYSBzZWNvbmQgbGltYiB2ZWN0b3IuCisKK2RubCAgQ29weXJpZ2h0IDIwMDEsIDIwMDIsIDIwMDgsIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDCQkJICAgIGN5Y2xlcy9saW1iCitDIFA2IG1vZGVsIDAtOCwxMC0xMgkJLQorQyBQNiBtb2RlbCA5ICAgKEJhbmlhcykJCTYuOAorQyBQNiBtb2RlbCAxMyAgKERvdGhhbikJCTYuOQorQyBQNCBtb2RlbCAwLTEgKFdpbGxhbWV0dGUpCT8KK0MgUDQgbW9kZWwgMiAgIChOb3J0aHdvb2QpCTUuODcKK0MgUDQgbW9kZWwgMy00IChQcmVzY290dCkJNi41CisKK0MgVGhpcyBjb2RlIHJlcHJlc2VudHMgYSBzdGVwIGZvcndhcmRzIGNvbXBhcmVkIHRvIHRoZSBjb2RlIGF2YWlsYWJsZSBiZWZvcmUKK0MgR01QIDUuMSwgYnV0IGl0IGlzIG5vdCBjYXJlZnVsbHkgdHVuZWQgZm9yIGVpdGhlciBQNiBvciBQNC4gIEluIGZhY3QsIGl0IGlzCitDIG5vdCBnb29kIGZvciBQNi4gIEZvciBQNCBpdCBzYXZlZCBhIGJpdCBvdmVyIDEgYy9sIGZvciBib3RoIE5vcnRod29vZCBhbmQKK0MgUHJlc2NvdHQgY29tcGFyZWQgdG8gdGhlIG9sZCBjb2RlLgorQworQyBUaGUgYXJyYW5nZW1lbnRzIG1hZGUgaGVyZSB0byBnZXQgYSB0d28gaW5zdHJ1Y3Rpb24gZGVwZW5kZW50IGNoYWluIGFyZQorQyBzbGlnaHRseSBzdWJ0bGUuICBJbiB0aGUgbG9vcCB0aGUgY2FycnkgKG9yIGJvcnJvdyByYXRoZXIpIGlzIGEgbmVnYXRpdmUgc28KK0MgdGhhdCBhIHBhZGRxIGNhbiBiZSB1c2VkIHRvIGdpdmUgYSBsb3cgbGltYiByZWFkeSB0byBzdG9yZSwgYW5kIGEgaGlnaCBsaW1iCitDIHJlYWR5IHRvIGJlY29tZSB0aGUgbmV3IGNhcnJ5IGFmdGVyIGEgcHNybHEuCitDCitDIElmIHRoZSBjYXJyeSB3YXMgYSBzaW1wbGUgdHdvcyBjb21wbGVtZW50IG5lZ2F0aXZlIHRoZW4gdGhlIHBzcmxxIHNoaWZ0IHdvdWxkCitDIG5lZWQgdG8gYnJpbmcgaW4gMCBiaXRzIG9yIDEgYml0cyBhY2NvcmRpbmcgdG8gd2hldGhlciB0aGUgaGlnaCB3YXMgemVybyBvcgorQyBub24temVybywgc2luY2UgYSBub24temVybyB2YWx1ZSB3b3VsZCByZXByZXNlbnQgYSBuZWdhdGl2ZSBuZWVkaW5nIHNpZ24KK0MgZXh0ZW5zaW9uLiAgVGhhdCB3b3VsZG4ndCBiZSBwYXJ0aWN1bGFybHkgZWFzeSB0byBhcnJhbmdlIGFuZCBjZXJ0YWlubHkgd291bGQKK0MgYWRkIGFuIGluc3RydWN0aW9uIHRvIHRoZSBkZXBlbmRlbnQgY2hhaW4sIHNvIGluc3RlYWQgYW4gb2Zmc2V0IGlzIGFwcGxpZWQgc28KK0MgdGhhdCB0aGUgaGlnaCBsaW1iIHdpbGwgYmUgMHhGRkZGRkZGRitjLiAgV2l0aCBjIGluIHRoZSByYW5nZSAtMHhGRkZGRkZGRiB0bworQyAwLCB0aGUgdmFsdWUgMHhGRkZGRkZGRitjIGlzIGluIHRoZSByYW5nZSAwIHRvIDB4RkZGRkZGRkYgYW5kIGlzIHRoZXJlZm9yZQorQyBhbHdheXMgcG9zaXRpdmUgYW5kIGNhbiBhbHdheXMgaGF2ZSAwIGJpdHMgc2hpZnRlZCBpbiwgd2hpY2ggaXMgd2hhdCBwc3JscQorQyBkb2VzLgorQworQyBUaGUgZXh0cmEgMHhGRkZGRkZGRiBtdXN0IGJlIHN1YnRyYWN0ZWQgYmVmb3JlIGMgaXMgdXNlZCwgYnV0IHRoYXQgY2FuIGJlCitDIGRvbmUgb2ZmIHRoZSBkZXBlbmRlbnQgY2hhaW4uICBUaGUgdG90YWwgYWRqdXN0bWVudCB0aGVuIGlzIHRvIGFkZAorQyAweEZGRkZGRkZGMDAwMDAwMDAgdG8gb2Zmc2V0IHRoZSBuZXcgY2FycnksIGFuZCBzdWJ0cmFjdCAweDAwMDAwMDAwRkZGRkZGRkYKK0MgdG8gcmVtb3ZlIHRoZSBvZmZzZXQgZnJvbSB0aGUgY3VycmVudCBjYXJyeSwgZm9yIGEgbmV0IGFkZCBvZgorQyAweEZGRkZGRkZFMDAwMDAwMDEuICBJbiB0aGUgY29kZSB0aGlzIGlzIGFwcGxpZWQgdG8gdGhlIGRlc3RpbmF0aW9uIGxpbWIgd2hlbgorQyBmZXRjaGVkLgorQworQyBJdCdzIGFsc28gcG9zc2libGUgdG8gdmlldyB0aGUgMHhGRkZGRkZGRiBhZGp1c3RtZW50IGFzIGEgb25lcy1jb21wbGVtZW50CitDIG5lZ2F0aXZlLCB3aGljaCBpcyBob3cgaXQncyB1bmRvbmUgZm9yIHRoZSByZXR1cm4gdmFsdWUsIGJ1dCB0aGF0IGRvZXNuJ3QKK0Mgc2VlbSBhcyBjbGVhci4KKworZGVmZnJhbWUoUEFSQU1fQ0FSUlksICAgICAyMCkKK2RlZmZyYW1lKFBBUkFNX01VTFRJUExJRVIsMTYpCitkZWZmcmFtZShQQVJBTV9TSVpFLCAgICAgIDEyKQorZGVmZnJhbWUoUEFSQU1fU1JDLCAgICAgICA4KQorZGVmZnJhbWUoUEFSQU1fRFNULCAgICAgICA0KQorCisJVEVYVAorCUFMSUdOKDE2KQorCitQUk9MT0dVRShtcG5fc3VibXVsXzFjKQorZGVmbGl0KGBGUkFNRScsMCkKKwltb3ZkCVBBUkFNX0NBUlJZLCAlbW0xCisJam1wCUwoc3RhcnRfMWMpCitFUElMT0dVRSgpCisKK1BST0xPR1VFKG1wbl9zdWJtdWxfMSkKK2RlZmxpdChgRlJBTUUnLDApCisJcHhvcgklbW0xLCAlbW0xCQlDIGluaXRpYWwgYm9ycm93CisKK0woc3RhcnRfMWMpOgorCW1vdglQQVJBTV9TUkMsICVlYXgKKwlwY21wZXFkCSVtbTAsICVtbTAKKworCW1vdmQJUEFSQU1fTVVMVElQTElFUiwgJW1tNworCXBjbXBlcWQJJW1tNiwgJW1tNgorCisJbW92CVBBUkFNX0RTVCwgJWVkeAorCXBzcmxxCSQzMiwgJW1tMAkJQyAweDAwMDAwMDAwRkZGRkZGRkYKKworCW1vdglQQVJBTV9TSVpFLCAlZWN4CisJcHNsbHEJJDMyLCAlbW02CQlDIDB4RkZGRkZGRkYwMDAwMDAwMAorCisJcHN1YnEJJW1tMCwgJW1tNgkJQyAweEZGRkZGRkZFMDAwMDAwMDEKKworCXBzdWJxCSVtbTEsICVtbTAJCUMgMHhGRkZGRkZGRiAtIGJvcnJvdworCisKKwltb3ZkCSglZWF4KSwgJW1tMwkJQyB1cAorCW1vdmQJKCVlZHgpLCAlbW00CQlDIHJwCisKKwlhZGQJJC0xLCAlZWN4CisJcGFkZHEJJW1tNiwgJW1tNAkJQyBhZGQgMHhGRkZGRkZGRTAwMDAwMDAxCisJcG11bHVkcQklbW03LCAlbW0zCisJam56CUwoZ3QxKQorCXBzdWJxCSVtbTMsICVtbTQJCUMgcHJvZAorCXBhZGRxCSVtbTQsICVtbTAJCUMgYm9ycm93CisJbW92ZAklbW0wLCAoJWVkeCkJCUMgcmVzdWx0CisJam1wCUwocnQpCisKK0woZ3QxKToJbW92ZAk0KCVlYXgpLCAlbW0xCQlDIHVwCisJbW92ZAk0KCVlZHgpLCAlbW0yCQlDIHJwCisKKwlhZGQJJC0xLCAlZWN4CisJanoJTChlZXYpCisKKwlBTElHTigxNikKK0wodG9wKToJcGFkZHEJJW1tNiwgJW1tMgkJQyBhZGQgMHhGRkZGRkZGRTAwMDAwMDAxCisJcG11bHVkcQklbW03LCAlbW0xCisJcHN1YnEJJW1tMywgJW1tNAkJQyBwcm9kCisJbW92ZAk4KCVlYXgpLCAlbW0zCQlDIHVwCisJcGFkZHEJJW1tNCwgJW1tMAkJQyBib3Jyb3cKKwltb3ZkCTgoJWVkeCksICVtbTQJCUMgcnAKKwltb3ZkCSVtbTAsICglZWR4KQkJQyByZXN1bHQKKwlwc3JscQkkMzIsICVtbTAKKworCWFkZAkkLTEsICVlY3gKKwlqeglMKGVvZCkKKworCXBhZGRxCSVtbTYsICVtbTQJCUMgYWRkIDB4RkZGRkZGRkUwMDAwMDAwMQorCXBtdWx1ZHEJJW1tNywgJW1tMworCXBzdWJxCSVtbTEsICVtbTIJCUMgcHJvZAorCW1vdmQJMTIoJWVheCksICVtbTEJCUMgdXAKKwlwYWRkcQklbW0yLCAlbW0wCQlDIGJvcnJvdworCW1vdmQJMTIoJWVkeCksICVtbTIJCUMgcnAKKwltb3ZkCSVtbTAsIDQoJWVkeCkJCUMgcmVzdWx0CisJcHNybHEJJDMyLCAlbW0wCisKKwlsZWEJOCglZWF4KSwgJWVheAorCWxlYQk4KCVlZHgpLCAlZWR4CisJYWRkCSQtMSwgJWVjeAorCWpueglMKHRvcCkKKworCitMKGVldik6CXBhZGRxCSVtbTYsICVtbTIJCUMgYWRkIDB4RkZGRkZGRkUwMDAwMDAwMQorCXBtdWx1ZHEJJW1tNywgJW1tMQorCXBzdWJxCSVtbTMsICVtbTQJCUMgcHJvZAorCXBhZGRxCSVtbTQsICVtbTAJCUMgYm9ycm93CisJbW92ZAklbW0wLCAoJWVkeCkJCUMgcmVzdWx0CisJcHNybHEJJDMyLCAlbW0wCisJcHN1YnEJJW1tMSwgJW1tMgkJQyBwcm9kCisJcGFkZHEJJW1tMiwgJW1tMAkJQyBib3Jyb3cKKwltb3ZkCSVtbTAsIDQoJWVkeCkJCUMgcmVzdWx0CitMKHJ0KToJcHNybHEJJDMyLCAlbW0wCisJbW92ZAklbW0wLCAlZWF4CisJbm90CSVlYXgKKwllbW1zCisJcmV0CisKK0woZW9kKToJcGFkZHEJJW1tNiwgJW1tNAkJQyBhZGQgMHhGRkZGRkZGRTAwMDAwMDAxCisJcG11bHVkcQklbW03LCAlbW0zCisJcHN1YnEJJW1tMSwgJW1tMgkJQyBwcm9kCisJcGFkZHEJJW1tMiwgJW1tMAkJQyBib3Jyb3cKKwltb3ZkCSVtbTAsIDQoJWVkeCkJCUMgcmVzdWx0CisJcHNybHEJJDMyLCAlbW0wCisJcHN1YnEJJW1tMywgJW1tNAkJQyBwcm9kCisJcGFkZHEJJW1tNCwgJW1tMAkJQyBib3Jyb3cKKwltb3ZkCSVtbTAsIDgoJWVkeCkJCUMgcmVzdWx0CisJam1wCUwocnQpCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9yc2hpZnQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcnNoaWZ0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjBkY2FhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvcnNoaWZ0LmFzbQpAQCAtMCwwICsxLDEwOCBAQAorZG5sICB4ODYgbXBuX3JzaGlmdCAtLSBtcG4gcmlnaHQgc2hpZnQuCisKK2RubCAgQ29weXJpZ2h0IDE5OTIsIDE5OTQsIDE5OTYsIDE5OTktMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MgICAgIGN5Y2xlcy9saW1iCitDIFA1NAkgNy41CitDIFA1NQkgNy4wCitDIFA2CSAyLjUKK0MgSzYJIDQuNQorQyBLNwkgNS4wCitDIFA0CTE2LjUKKworCitDIG1wX2xpbWJfdCBtcG5fcnNoaWZ0IChtcF9wdHIgZHN0LCBtcF9zcmNwdHIgc3JjLCBtcF9zaXplX3Qgc2l6ZSwKK0MgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNoaWZ0KTsKKworZGVmZnJhbWUoUEFSQU1fU0hJRlQsMTYpCitkZWZmcmFtZShQQVJBTV9TSVpFLCAxMikKK2RlZmZyYW1lKFBBUkFNX1NSQywgIDgpCitkZWZmcmFtZShQQVJBTV9EU1QsICA0KQorCisJVEVYVAorCUFMSUdOKDgpCitQUk9MT0dVRShtcG5fcnNoaWZ0KQorCisJcHVzaGwJJWVkaQorCXB1c2hsCSVlc2kKKwlwdXNobAklZWJ4CitkZWZsaXQoYEZSQU1FJywxMikKKworCW1vdmwJUEFSQU1fRFNULCVlZGkKKwltb3ZsCVBBUkFNX1NSQywlZXNpCisJbW92bAlQQVJBTV9TSVpFLCVlZHgKKwltb3ZsCVBBUkFNX1NISUZULCVlY3gKKworCWxlYWwJLTQoJWVkaSwlZWR4LDQpLCVlZGkKKwlsZWFsCSglZXNpLCVlZHgsNCksJWVzaQorCW5lZ2wJJWVkeAorCisJbW92bAkoJWVzaSwlZWR4LDQpLCVlYngJQyByZWFkIGxlYXN0IHNpZ25pZmljYW50IGxpbWIKKwl4b3JsCSVlYXgsJWVheAorCXNocmRsKAklY2wsICVlYngsICVlYXgpCUMgY29tcHV0ZSBjYXJyeSBsaW1iCisJaW5jbAklZWR4CisJanoJTChlbmQpCisJcHVzaGwJJWVheAkJCUMgcHVzaCBjYXJyeSBsaW1iIG9udG8gc3RhY2sKKwl0ZXN0YgkkMSwlZGwKKwlqbnoJTCgxKQkJCUMgZW50ZXIgbG9vcCBpbiB0aGUgbWlkZGxlCisJbW92bAklZWJ4LCVlYXgKKworCUFMSUdOKDgpCitMKG9vcCk6CW1vdmwJKCVlc2ksJWVkeCw0KSwlZWJ4CUMgbG9hZCBuZXh0IGhpZ2hlciBsaW1iCisJc2hyZGwoCSVjbCwgJWVieCwgJWVheCkJQyBjb21wdXRlIHJlc3VsdCBsaW1iCisJbW92bAklZWF4LCglZWRpLCVlZHgsNCkJQyBzdG9yZSBpdAorCWluY2wJJWVkeAorTCgxKToJbW92bAkoJWVzaSwlZWR4LDQpLCVlYXgKKwlzaHJkbCgJJWNsLCAlZWF4LCAlZWJ4KQorCW1vdmwJJWVieCwoJWVkaSwlZWR4LDQpCisJaW5jbAklZWR4CisJam56CUwob29wKQorCisJc2hybAklY2wsJWVheAkJQyBjb21wdXRlIG1vc3Qgc2lnbmlmaWNhbnQgbGltYgorCW1vdmwJJWVheCwoJWVkaSkJCUMgc3RvcmUgaXQKKworCXBvcGwJJWVheAkJCUMgcG9wIGNhcnJ5IGxpbWIKKworCXBvcGwJJWVieAorCXBvcGwJJWVzaQorCXBvcGwJJWVkaQorCXJldAorCitMKGVuZCk6CXNocmwJJWNsLCVlYngJCUMgY29tcHV0ZSBtb3N0IHNpZ25pZmljYW50IGxpbWIKKwltb3ZsCSVlYngsKCVlZGkpCQlDIHN0b3JlIGl0CisKKwlwb3BsCSVlYngKKwlwb3BsCSVlc2kKKwlwb3BsCSVlZGkKKwlyZXQKKworRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvc2VjX3RhYnNlbGVjdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9zZWNfdGFic2VsZWN0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2MyZTA1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvc2VjX3RhYnNlbGVjdC5hc20KQEAgLTAsMCArMSwxMTUgQEAKK2RubCAgeDg2IG1wbl9zZWNfdGFic2VsZWN0LgorCitkbmwgIENvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQwkJCSAgICBjeWNsZXMvbGltYgorQyBQNQkJCQkgPworQyBQNiBtb2RlbCAwLTgsMTAtMTIJCSA/CitDIFA2IG1vZGVsIDkgIChCYW5pYXMpCQkgPworQyBQNiBtb2RlbCAxMyAoRG90aGFuKQkJID8KK0MgUDQgbW9kZWwgMCAgKFdpbGxhbWV0dGUpCSA/CitDIFA0IG1vZGVsIDEgICg/KQkJID8KK0MgUDQgbW9kZWwgMiAgKE5vcnRod29vZCkJIDQuNQorQyBQNCBtb2RlbCAzICAoUHJlc2NvdHQpCSA/CitDIFA0IG1vZGVsIDQgIChOb2NvbmEpCQkgPworQyBJbnRlbCBBdG9tCQkJID8KK0MgQU1EIEs2CQkJID8KK0MgQU1EIEs3CQkJIDMuNAorQyBBTUQgSzgJCQkgPworQyBBTUQgSzEwCQkJID8KKworQyBOT1RFUworQyAgKiBUaGlzIGhhcyBub3QgYmVlbiB0dW5lZCBmb3IgYW55IHNwZWNpZmljIHByb2Nlc3Nvci4gIEl0cyBzcGVlZCBzaG91bGQgbm90CitDICAgIGJlIHRvbyBiYWQsIHRob3VnaC4KK0MgICogVXNpbmcgU1NFMiBjb3VsZCByZXN1bHQgaW4gbWFueS1mb2xkIHNwZWVkdXAuCisKK0MgbXBuX3NlY190YWJzZWxlY3QgKG1wX2xpbWJfdCAqcnAsIG1wX2xpbWJfdCAqdHAsIG1wX3NpemVfdCBuLCBtcF9zaXplX3QgbmVudHMsIG1wX3NpemVfdCB3aGljaCkKK2RlZmluZShgcnAnLCAgICAgYCVlZGknKQorZGVmaW5lKGB0cCcsICAgICBgJWVzaScpCitkZWZpbmUoYG4nLCAgICAgIGAlZWJ4JykKK2RlZmluZShgbmVudHMnLCAgYCVlY3gnKQorZGVmaW5lKGB3aGljaCcsICBgMzYoJWVzcCknKQorCitkZWZpbmUoYGknLCAgICAgIGAlZWJwJykKK2RlZmluZShgbWFza3AnLCAgYDIwKCVlc3ApJykKK2RlZmluZShgbWFza24nLCAgYDMyKCVlc3ApJykKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMTYpCitQUk9MT0dVRShtcG5fc2VjX3RhYnNlbGVjdCkKKwlwdXNoCSVlZGkKKwlwdXNoCSVlc2kKKwlwdXNoCSVlYngKKwlwdXNoCSVlYnAKKwltb3YJMjAoJWVzcCksIHJwCisJbW92CTI0KCVlc3ApLCB0cAorCW1vdgkyOCglZXNwKSwgbgorCW1vdgkzMiglZXNwKSwgbmVudHMKKworCWxlYQkocnAsbiw0KSwgcnAKKwlsZWEJKHRwLG4sNCksIHRwCisJc3ViCW5lbnRzLCB3aGljaAorTChvdXRlcik6CisJbW92CXdoaWNoLCAlZWF4CisJYWRkCW5lbnRzLCAlZWF4CisJbmVnCSVlYXgJCQlDIHNldCBDRiBpZmYgJ3doaWNoJyAhPSBrCisJc2JiCSVlYXgsICVlYXgKKwltb3YJJWVheCwgbWFza24KKwlub3QJJWVheAorCW1vdgklZWF4LCBtYXNrcAorCisJbW92CW4sIGkKKwluZWcJaQorCisJQUxJR04oMTYpCitMKHRvcCk6CW1vdgkodHAsaSw0KSwgJWVheAorCWFuZAltYXNrcCwgJWVheAorCW1vdgkocnAsaSw0KSwgJWVkeAorCWFuZAltYXNrbiwgJWVkeAorCW9yCSVlZHgsICVlYXgKKwltb3YJJWVheCwgKHJwLGksNCkKKwlpbmMJaQorCWpzCUwodG9wKQorCitMKGVuZCk6CW1vdgluLCAlZWF4CisJbGVhCSh0cCwlZWF4LDQpLCB0cAorCWRlYwluZW50cworCWpuZQlMKG91dGVyKQorCitMKG91dGVyX2VuZCk6CisJcG9wCSVlYnAKKwlwb3AJJWVieAorCXBvcAklZXNpCisJcG9wCSVlZGkKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3NpbHZlcm1vbnQvZ21wLW1wYXJhbS5oIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvc2lsdmVybW9udC9nbXAtbXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlmMWQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3NpbHZlcm1vbnQvZ21wLW1wYXJhbS5oCkBAIC0wLDAgKzEsMjIyIEBACisvKiBJbnRlbCBTaWx2ZXJtb250LzMyIGdtcC1tcGFyYW0uaCAtLSBDb21waWxlci9tYWNoaW5lIHBhcmFtZXRlciBoZWFkZXIgZmlsZS4KKworQ29weXJpZ2h0IDIwMTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNkZWZpbmUgR01QX0xJTUJfQklUUyAzMgorI2RlZmluZSBHTVBfTElNQl9CWVRFUyA0CisKKy8qIDI0MDAgTUh6IEludGVsIEF0b20gQzI3NTggU2lsdmVybW9udC9SYW5nZWxleSAqLworLyogRkZUIHR1bmluZyBsaW1pdCA9IDY3LDAwMCwwMDAgKi8KKy8qIEdlbmVyYXRlZCBieSB0dW5ldXAuYywgMjAxOS0xMC0zMCwgZ2NjIDguMyAqLworCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIE1PRF8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICA1CisjZGVmaW5lIE1PRF8xTl9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA5CisjZGVmaW5lIE1PRF8xVV9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA1CisjZGVmaW5lIE1PRF8xXzFfVE9fTU9EXzFfMl9USFJFU0hPTEQgICAgICAgIDExCisjZGVmaW5lIE1PRF8xXzJfVE9fTU9EXzFfNF9USFJFU0hPTEQgICAgICAgICAwICAvKiBuZXZlciBtcG5fbW9kXzFzXzJwICovCisjZGVmaW5lIFBSRUlOVl9NT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgIDE2CisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAgICAxICAvKiBuYXRpdmUgKi8KKyNkZWZpbmUgRElWX1FSXzFOX1BJMV9NRVRIT0QgICAgICAgICAgICAgICAgIDEgIC8qIDY0LjYyJSBmYXN0ZXIgdGhhbiAyICovCisjZGVmaW5lIERJVl9RUl8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVl9RUl8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVl9RUl8yX1BJMl9USFJFU0hPTEQgICAgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgICAgICAgMzIKKworI2RlZmluZSBESVZfMV9WU19NVUxfMV9QRVJDRU5UICAgICAgICAgICAgIDIwNAorCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDI2CisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTA1CisjZGVmaW5lIE1VTF9UT09NNDRfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjM2CisjZGVmaW5lIE1VTF9UT09NNkhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMzUxCisjZGVmaW5lIE1VTF9UT09NOEhfVEhSRVNIT0xEICAgICAgICAgICAgICAgNTAyCisKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNDNfVEhSRVNIT0xEICAgICAxMDUKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxNjMKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxMzcKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNjNfVEhSRVNIT0xEICAgICAxNzQKKyNkZWZpbmUgTVVMX1RPT000M19UT19UT09NNTRfVEhSRVNIT0xEICAgICAyMTUKKworI2RlZmluZSBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDM2CisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTM4CisjZGVmaW5lIFNRUl9UT09NNF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMzYwCisjZGVmaW5lIFNRUl9UT09NNl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNDk0CisjZGVmaW5lIFNRUl9UT09NOF9USFJFU0hPTEQgICAgICAgICAgICAgICAgNjIwCisKKyNkZWZpbmUgTVVMTUlEX1RPT000Ml9USFJFU0hPTEQgICAgICAgICAgICAgNTgKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxNQorI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxOQorCisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgNDYwICAvKiBrID0gNSAqLworI2RlZmluZSBNVUxfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgNDYwLCA1fSwgeyAgICAgMjEsIDZ9LCB7ICAgICAxMSwgNX0sIHsgICAgIDIzLCA2fSwgXAorICAgIHsgICAgIDEyLCA1fSwgeyAgICAgMjUsIDZ9LCB7ICAgICAxMywgNX0sIHsgICAgIDI3LCA2fSwgXAorICAgIHsgICAgIDIxLCA3fSwgeyAgICAgMTEsIDZ9LCB7ICAgICAyNSwgN30sIHsgICAgIDEzLCA2fSwgXAorICAgIHsgICAgIDI3LCA3fSwgeyAgICAgMTUsIDZ9LCB7ICAgICAzMSwgN30sIHsgICAgIDE3LCA2fSwgXAorICAgIHsgICAgIDM1LCA3fSwgeyAgICAgMTksIDZ9LCB7ICAgICAzOSwgN30sIHsgICAgIDIxLCA4fSwgXAorICAgIHsgICAgIDExLCA3fSwgeyAgICAgMjcsIDh9LCB7ICAgICAxNSwgN30sIHsgICAgIDM1LCA4fSwgXAorICAgIHsgICAgIDE5LCA3fSwgeyAgICAgNDEsIDh9LCB7ICAgICAyMywgN30sIHsgICAgIDQ3LCA4fSwgXAorICAgIHsgICAgIDI3LCA5fSwgeyAgICAgMTUsIDh9LCB7ICAgICAzMSwgN30sIHsgICAgIDYzLCA4fSwgXAorICAgIHsgICAgIDM5LCA5fSwgeyAgICAgMjMsIDh9LCB7ICAgICA1MSwxMH0sIHsgICAgIDE1LCA5fSwgXAorICAgIHsgICAgIDMxLCA4fSwgeyAgICAgNjcsIDl9LCB7ICAgICAzOSwgOH0sIHsgICAgIDc5LCA5fSwgXAorICAgIHsgICAgIDQ3LCA4fSwgeyAgICAgOTUsMTB9LCB7ICAgICAzMSwgOX0sIHsgICAgIDc5LDEwfSwgXAorICAgIHsgICAgIDQ3LCA5fSwgeyAgICAgOTUsMTF9LCB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA5fSwgXAorICAgIHsgICAgMTM1LDEwfSwgeyAgICAgNzksIDl9LCB7ICAgIDE1OSwxMH0sIHsgICAgIDk1LDExfSwgXAorICAgIHsgICAgIDYzLDEwfSwgeyAgICAxMjcsIDl9LCB7ICAgIDI1NSwxMH0sIHsgICAgMTQzLCA5fSwgXAorICAgIHsgICAgMjg3LDEwfSwgeyAgICAxNTksMTF9LCB7ICAgICA5NSwxMH0sIHsgICAgMTkxLDEyfSwgXAorICAgIHsgICAgIDYzLDExfSwgeyAgICAxMjcsMTB9LCB7ICAgIDI1NSwgOX0sIHsgICAgNTExLDEwfSwgXAorICAgIHsgICAgMjcxLCA5fSwgeyAgICA1NDMsMTB9LCB7ICAgIDI4NywgOX0sIHsgICAgNTc1LDExfSwgXAorICAgIHsgICAgMTU5LDEwfSwgeyAgICAzMTksIDl9LCB7ICAgIDYzOSwxMH0sIHsgICAgMzM1LCA5fSwgXAorICAgIHsgICAgNjcxLDEwfSwgeyAgICAzNTEsIDl9LCB7ICAgIDcwMywxMX0sIHsgICAgMTkxLDEwfSwgXAorICAgIHsgICAgMzgzLCA5fSwgeyAgICA3NjcsMTB9LCB7ICAgIDQxNSwgOX0sIHsgICAgODMxLDEyfSwgXAorICAgIHsgICAgMTI3LDExfSwgeyAgICAyNTUsMTB9LCB7ICAgIDU0MywgOX0sIHsgICAxMDg3LDExfSwgXAorICAgIHsgICAgMjg3LDEwfSwgeyAgICA2MDcsIDl9LCB7ICAgMTIxNSwxMX0sIHsgICAgMzE5LDEwfSwgXAorICAgIHsgICAgNjcxLDExfSwgeyAgICAzNTEsMTB9LCB7ICAgIDczNSwxMn0sIHsgICAgMTkxLDExfSwgXAorICAgIHsgICAgMzgzLDEwfSwgeyAgICA3NjcsMTF9LCB7ICAgIDQxNSwxMH0sIHsgICAgODMxLDEzfSwgXAorICAgIHsgICAgMTI3LDEyfSwgeyAgICAyNTUsMTF9LCB7ICAgIDU0MywxMH0sIHsgICAxMDg3LDExfSwgXAorICAgIHsgICAgNjA3LDEwfSwgeyAgIDEyMTUsMTJ9LCB7ICAgIDMxOSwxMX0sIHsgICAgNjcxLDEwfSwgXAorICAgIHsgICAxMzQzLDExfSwgeyAgICA3MzUsMTB9LCB7ICAgMTQ3MSwxMn0sIHsgICAgMzgzLDExfSwgXAorICAgIHsgICAgODYzLDEwfSwgeyAgIDE3MjcsMTJ9LCB7ICAgIDQ0NywxMX0sIHsgICAgOTU5LDEzfSwgXAorICAgIHsgICAgMjU1LDEyfSwgeyAgICA1MTEsMTF9LCB7ICAgMTA4NywxMn0sIHsgICAgNTc1LDExfSwgXAorICAgIHsgICAxMjE1LDEwfSwgeyAgIDI0MzEsMTJ9LCB7ICAgIDYzOSwxMX0sIHsgICAxMzQzLDEyfSwgXAorICAgIHsgICAgNzAzLDExfSwgeyAgIDE0NzEsMTN9LCB7ICAgIDM4MywxMn0sIHsgICAgNzY3LDExfSwgXAorICAgIHsgICAxNTM1LDEyfSwgeyAgICA4MzEsMTF9LCB7ICAgMTcyNywxMH0sIHsgICAzNDU1LDEyfSwgXAorICAgIHsgICAgOTU5LDExfSwgeyAgIDE5MTksMTR9LCB7ICAgIDI1NSwxM30sIHsgICAgNTExLDEyfSwgXAorICAgIHsgICAxMjE1LDExfSwgeyAgIDI0MzEsMTN9LCB7ICAgIDYzOSwxMn0sIHsgICAxNDcxLDExfSwgXAorICAgIHsgICAyOTQzLDEzfSwgeyAgICA3NjcsMTJ9LCB7ICAgMTcyNywxMX0sIHsgICAzNDU1LDEzfSwgXAorICAgIHsgICAgODk1LDEyfSwgeyAgIDE5MTksMTR9LCB7ICAgIDUxMSwxM30sIHsgICAxMDIzLDEyfSwgXAorICAgIHsgICAyMTExLDEzfSwgeyAgIDExNTEsMTJ9LCB7ICAgMjQzMSwxM30sIHsgICAxNDA3LDEyfSwgXAorICAgIHsgICAyOTQzLDE0fSwgeyAgICA3NjcsMTN9LCB7ICAgMTY2MywxMn0sIHsgICAzNDU1LDEzfSwgXAorICAgIHsgICAxOTE5LDE1fSwgeyAgICA1MTEsMTR9LCB7ICAgMTAyMywxM30sIHsgICAyMTc1LDEyfSwgXAorICAgIHsgICA0NDc5LDEzfSwgeyAgIDI0MzEsMTR9LCB7ICAgMTI3OSwxM30sIHsgICAyOTQzLDEyfSwgXAorICAgIHsgICA1ODg3LDE0fSwgeyAgIDE1MzUsMTN9LCB7ICAgMzQ1NSwxNH0sIHsgICAxNzkxLDEzfSwgXAorICAgIHsgICAzOTY3LDEyfSwgeyAgIDc5MzUsMTV9LCB7ICAgMTAyMywxNH0sIHsgICAyMDQ3LDEzfSwgXAorICAgIHsgICA0NDc5LDE0fSwgeyAgIDIzMDMsMTN9LCB7ICAgNDk5MSwxMn0sIHsgICA5OTgzLDE0fSwgXAorICAgIHsgICAyODE1LDEzfSwgeyAgIDU4ODcsMTV9LCB7ICAgMTUzNSwxNH0sIHsgICAzODM5LDEzfSwgXAorICAgIHsgICA3OTM1LDE2fSB9CisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzX1NJWkUgMTc3CisjZGVmaW5lIE1VTF9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA0NTQ0CisKKyNkZWZpbmUgU1FSX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICA0MDAgIC8qIGsgPSA1ICovCisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICA0MDAsIDV9LCB7ICAgICAyMSwgNn0sIHsgICAgIDExLCA1fSwgeyAgICAgMjMsIDZ9LCBcCisgICAgeyAgICAgMTIsIDV9LCB7ICAgICAyNSwgNn0sIHsgICAgIDEzLCA1fSwgeyAgICAgMjgsIDZ9LCBcCisgICAgeyAgICAgMjEsIDd9LCB7ICAgICAxMSwgNn0sIHsgICAgIDI1LCA3fSwgeyAgICAgMTMsIDZ9LCBcCisgICAgeyAgICAgMjgsIDd9LCB7ICAgICAxNSwgNn0sIHsgICAgIDMyLCA3fSwgeyAgICAgMTcsIDZ9LCBcCisgICAgeyAgICAgMzUsIDd9LCB7ICAgICAxOSwgNn0sIHsgICAgIDM5LCA3fSwgeyAgICAgMjEsIDh9LCBcCisgICAgeyAgICAgMTEsIDd9LCB7ICAgICAyNywgOH0sIHsgICAgIDE1LCA3fSwgeyAgICAgMzUsIDh9LCBcCisgICAgeyAgICAgMTksIDd9LCB7ICAgICA0MSwgOH0sIHsgICAgIDIzLCA3fSwgeyAgICAgNDcsIDh9LCBcCisgICAgeyAgICAgMjcsIDl9LCB7ICAgICAxNSwgOH0sIHsgICAgIDMxLCA3fSwgeyAgICAgNjMsIDh9LCBcCisgICAgeyAgICAgMzksIDl9LCB7ICAgICAyMywgOH0sIHsgICAgIDUxLDEwfSwgeyAgICAgMTUsIDl9LCBcCisgICAgeyAgICAgMzEsIDh9LCB7ICAgICA2NywgOX0sIHsgICAgIDM5LCA4fSwgeyAgICAgNzksIDl9LCBcCisgICAgeyAgICAgNTUsMTB9LCB7ICAgICAzMSwgOX0sIHsgICAgIDc5LDEwfSwgeyAgICAgNDcsIDl9LCBcCisgICAgeyAgICAgOTUsMTF9LCB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA5fSwgeyAgICAxMjcsMTB9LCBcCisgICAgeyAgICAgNzksIDl9LCB7ICAgIDE1OSwxMH0sIHsgICAgIDk1LDExfSwgeyAgICAgNjMsMTB9LCBcCisgICAgeyAgICAxMjcsIDl9LCB7ICAgIDI1NSwxMH0sIHsgICAgMTQzLCA5fSwgeyAgICAyODcsIDh9LCBcCisgICAgeyAgICA1NzUsMTB9LCB7ICAgIDE1OSwxMX0sIHsgICAgIDk1LDEyfSwgeyAgICAgNjMsMTF9LCBcCisgICAgeyAgICAxMjcsMTB9LCB7ICAgIDI1NSwgOX0sIHsgICAgNTExLDEwfSwgeyAgICAyNzEsIDl9LCBcCisgICAgeyAgICA1NDMsMTB9LCB7ICAgIDI4NywgOX0sIHsgICAgNTc1LDExfSwgeyAgICAxNTksMTB9LCBcCisgICAgeyAgICAzMTksIDl9LCB7ICAgIDYzOSwxMH0sIHsgICAgMzM1LCA5fSwgeyAgICA2NzEsMTB9LCBcCisgICAgeyAgICAzNTEsIDl9LCB7ICAgIDczNSwxMX0sIHsgICAgMTkxLDEwfSwgeyAgICAzODMsIDl9LCBcCisgICAgeyAgICA3OTksMTB9LCB7ICAgIDQxNSwgOX0sIHsgICAgODMxLDExfSwgeyAgICAyMjMsMTJ9LCBcCisgICAgeyAgICAxMjcsMTF9LCB7ICAgIDI1NSwxMH0sIHsgICAgNTQzLCA5fSwgeyAgIDEwODcsMTF9LCBcCisgICAgeyAgICAyODcsMTB9LCB7ICAgIDYwNywgOX0sIHsgICAxMjE1LDExfSwgeyAgICAzMTksMTB9LCBcCisgICAgeyAgICA2NzEsMTF9LCB7ICAgIDM1MSwxMH0sIHsgICAgNzM1LCA5fSwgeyAgIDE0NzEsMTJ9LCBcCisgICAgeyAgICAxOTEsMTF9LCB7ICAgIDM4MywxMH0sIHsgICAgNzk5LDExfSwgeyAgICA0MTUsMTB9LCBcCisgICAgeyAgICA4NjMsMTN9LCB7ICAgIDEyNywxMn0sIHsgICAgMjU1LDExfSwgeyAgICA1NDMsMTB9LCBcCisgICAgeyAgIDEwODcsMTF9LCB7ICAgIDYwNywxMH0sIHsgICAxMjE1LDEyfSwgeyAgICAzMTksMTF9LCBcCisgICAgeyAgICA2NzEsMTB9LCB7ICAgMTM0MywxMX0sIHsgICAgNzM1LDEwfSwgeyAgIDE0NzEsMTJ9LCBcCisgICAgeyAgICAzODMsMTF9LCB7ICAgIDg2MywxMH0sIHsgICAxNzI3LDEyfSwgeyAgICA0NDcsMTF9LCBcCisgICAgeyAgICA5NTksMTN9LCB7ICAgIDI1NSwxMn0sIHsgICAgNTExLDExfSwgeyAgIDEwODcsMTJ9LCBcCisgICAgeyAgICA1NzUsMTF9LCB7ICAgMTIxNSwxMH0sIHsgICAyNDMxLDEyfSwgeyAgICA2MzksMTF9LCBcCisgICAgeyAgIDEzNDMsMTJ9LCB7ICAgIDcwMywxMX0sIHsgICAxNDcxLDEzfSwgeyAgICAzODMsMTJ9LCBcCisgICAgeyAgICA3NjcsMTF9LCB7ICAgMTUzNSwxMn0sIHsgICAgODMxLDExfSwgeyAgIDE3MjcsMTJ9LCBcCisgICAgeyAgICA5NTksMTR9LCB7ICAgIDI1NSwxM30sIHsgICAgNTExLDEyfSwgeyAgIDEyMTUsMTF9LCBcCisgICAgeyAgIDI0MzEsMTN9LCB7ICAgIDYzOSwxMn0sIHsgICAxNDcxLDExfSwgeyAgIDI5NDMsMTN9LCBcCisgICAgeyAgICA3NjcsMTJ9LCB7ICAgMTcyNywxMX0sIHsgICAzNDU1LDEzfSwgeyAgICA4OTUsMTJ9LCBcCisgICAgeyAgIDE5MTksMTR9LCB7ICAgIDUxMSwxM30sIHsgICAxMDIzLDEyfSwgeyAgIDIxMTEsMTN9LCBcCisgICAgeyAgIDExNTEsMTJ9LCB7ICAgMjQzMSwxM30sIHsgICAxNDA3LDEyfSwgeyAgIDI5NDMsMTR9LCBcCisgICAgeyAgICA3NjcsMTN9LCB7ICAgMTY2MywxMn0sIHsgICAzNDU1LDEzfSwgeyAgIDE5MTksMTV9LCBcCisgICAgeyAgICA1MTEsMTR9LCB7ICAgMTAyMywxM30sIHsgICAyMTc1LDEyfSwgeyAgIDQ0NzksMTN9LCBcCisgICAgeyAgIDI0MzEsMTR9LCB7ICAgMTI3OSwxM30sIHsgICAyOTQzLDEyfSwgeyAgIDU4ODcsMTR9LCBcCisgICAgeyAgIDE1MzUsMTN9LCB7ICAgMzQ1NSwxNH0sIHsgICAxNzkxLDEzfSwgeyAgIDM5NjcsMTV9LCBcCisgICAgeyAgIDEwMjMsMTR9LCB7ICAgMjA0NywxM30sIHsgICA0NDc5LDE0fSwgeyAgIDIzMDMsMTN9LCBcCisgICAgeyAgIDQ5OTEsMTJ9LCB7ICAgOTk4MywxNH0sIHsgICAyODE1LDEzfSwgeyAgIDU4ODcsMTV9LCBcCisgICAgeyAgIDE1MzUsMTR9LCB7ICAgMzgzOSwxM30sIHsgICA3Njc5LDE2fSB9CisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzX1NJWkUgMTc1CisjZGVmaW5lIFNRUl9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAzNzEyCisKKyNkZWZpbmUgTVVMTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNVUxMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICA1NgorI2RlZmluZSBNVUxMT19NVUxfTl9USFJFU0hPTEQgICAgICAgICAgICAgODkwNworI2RlZmluZSBTUVJMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIFNRUkxPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTM3CisjZGVmaW5lIFNRUkxPX1NRUl9USFJFU0hPTEQgICAgICAgICAgICAgICA3MzczCisKKyNkZWZpbmUgRENfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNzYKKyNkZWZpbmUgRENfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAzMzYKKyNkZWZpbmUgRENfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNjYKKyNkZWZpbmUgRENfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyMTgKKworI2RlZmluZSBJTlZfTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICA1MAorI2RlZmluZSBJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDM0NQorI2RlZmluZSBJTlZfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDM0MgorCisjZGVmaW5lIEJJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgMzY2CisjZGVmaW5lIFJFRENfMV9UT19SRURDX05fVEhSRVNIT0xEICAgICAgICAgIDkxCisKKyNkZWZpbmUgTVVfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE2NTIKKyNkZWZpbmUgTVVfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgIDE4NTgKKyNkZWZpbmUgTVVQSV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAxNzEKKyNkZWZpbmUgTVVfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgIDE0NDIKKyNkZWZpbmUgTVVfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE4MzAKKworI2RlZmluZSBQT1dNX1NFQ19UQUJMRSAgMywxNywxMDIsNDA0LDExODUKKworI2RlZmluZSBHRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBHRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgICAyMQorI2RlZmluZSBTRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDI3MgorI2RlZmluZSBTRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgIDc4OAorCisjZGVmaW5lIEZBQ19EU0NfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgMTMyCisjZGVmaW5lIEZBQ19PRERfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDM0CisKKyNkZWZpbmUgTUFUUklYMjJfU1RSQVNTRU5fVEhSRVNIT0xEICAgICAgICAgMTkKKyNkZWZpbmUgSEdDRDJfRElWMV9NRVRIT0QgICAgICAgICAgICAgICAgICAgIDEgIC8qIDAuNTklIGZhc3RlciB0aGFuIDMgKi8KKyNkZWZpbmUgSEdDRF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgICAxNDIKKyNkZWZpbmUgSEdDRF9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxODEKKyNkZWZpbmUgSEdDRF9SRURVQ0VfVEhSRVNIT0xEICAgICAgICAgICAgIDI2ODEKKyNkZWZpbmUgR0NEX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICA0OTIKKyNkZWZpbmUgR0NERVhUX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzNjUKKyNkZWZpbmUgSkFDT0JJX0JBU0VfTUVUSE9EICAgICAgICAgICAgICAgICAgIDEgIC8qIDAuNDElIGZhc3RlciB0aGFuIDIgKi8KKworLyogVHVuZXVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIHRvb2sgMTQ3MDI3IHNlY29uZHMgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3NreWxha2UvZ21wLW1wYXJhbS5oIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvc2t5bGFrZS9nbXAtbXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI4Nzk1NwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3NreWxha2UvZ21wLW1wYXJhbS5oCkBAIC0wLDAgKzEsMjExIEBACisvKiB4ODYvc2t5bGFrZSBnbXAtbXBhcmFtLmggLS0gQ29tcGlsZXIvbWFjaGluZSBwYXJhbWV0ZXIgaGVhZGVyIGZpbGUuCisKK0NvcHlyaWdodCAyMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgMzIKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgNAorCisvKiAzNjAwLTQwMDAgTUh6IEludGVsIFhlb24gRTMtMTI3MHY1IFNreWxha2UgKi8KKy8qIEZGVCB0dW5pbmcgbGltaXQgPSA2NywwMDAsMDAwICovCisvKiBHZW5lcmF0ZWQgYnkgdHVuZXVwLmMsIDIwMTktMTAtMjEsIGdjYyA4LjMgKi8KKworI2RlZmluZSBNT0RfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBNT0RfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAxNgorI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAxMAorI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgOAorI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAgMCAgLyogbmV2ZXIgbXBuX21vZF8xXzFwICovCisjZGVmaW5lIE1PRF8xXzJfVE9fTU9EXzFfNF9USFJFU0hPTEQgICAgICAgIDEwCisjZGVmaW5lIFBSRUlOVl9NT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgICA5CisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAgICAxICAvKiBuYXRpdmUgKi8KKyNkZWZpbmUgRElWX1FSXzFOX1BJMV9NRVRIT0QgICAgICAgICAgICAgICAgIDEgIC8qIDUuNjMlIGZhc3RlciB0aGFuIDIgKi8KKyNkZWZpbmUgRElWX1FSXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgMTIKKyNkZWZpbmUgRElWX1FSXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWX1FSXzJfUEkyX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgRElWRVhBQ1RfMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAobmF0aXZlKSAqLworI2RlZmluZSBCTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgICAgICAxOAorCisjZGVmaW5lIERJVl8xX1ZTX01VTF8xX1BFUkNFTlQgICAgICAgICAgICAgMzQ4CisKKyNkZWZpbmUgTVVMX1RPT00yMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgTVVMX1RPT00zM19USFJFU0hPTEQgICAgICAgICAgICAgICAgODEKKyNkZWZpbmUgTVVMX1RPT000NF9USFJFU0hPTEQgICAgICAgICAgICAgICAyMDgKKyNkZWZpbmUgTVVMX1RPT002SF9USFJFU0hPTEQgICAgICAgICAgICAgICAzMDMKKyNkZWZpbmUgTVVMX1RPT004SF9USFJFU0hPTEQgICAgICAgICAgICAgICA0NTQKKworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT000M19USFJFU0hPTEQgICAgICA4MQorI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT001M19USFJFU0hPTEQgICAgIDE0OQorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT001M19USFJFU0hPTEQgICAgIDEzNworI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT002M19USFJFU0hPTEQgICAgIDE0NQorI2RlZmluZSBNVUxfVE9PTTQzX1RPX1RPT001NF9USFJFU0hPTEQgICAgIDE5NgorCisjZGVmaW5lIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNDAKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMjkKKyNkZWZpbmUgU1FSX1RPT000X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyMjAKKyNkZWZpbmUgU1FSX1RPT002X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzNTQKKyNkZWZpbmUgU1FSX1RPT004X1RIUkVTSE9MRCAgICAgICAgICAgICAgICA2MDgKKworI2RlZmluZSBNVUxNSURfVE9PTTQyX1RIUkVTSE9MRCAgICAgICAgICAgICA3MgorCisjZGVmaW5lIE1VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIFNRUk1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDIxCisKKyNkZWZpbmUgTVVMX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICA1MzAgIC8qIGsgPSA1ICovCisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICA1MzAsIDV9LCB7ICAgICAyOSwgNn0sIHsgICAgIDE1LCA1fSwgeyAgICAgMzEsIDZ9LCBcCisgICAgeyAgICAgMjksIDd9LCB7ICAgICAxNSwgNn0sIHsgICAgIDMzLCA3fSwgeyAgICAgMTcsIDZ9LCBcCisgICAgeyAgICAgMzYsIDd9LCB7ICAgICAxOSwgNn0sIHsgICAgIDM5LCA3fSwgeyAgICAgMjEsIDZ9LCBcCisgICAgeyAgICAgNDMsIDd9LCB7ICAgICAyMywgNn0sIHsgICAgIDQ3LCA3fSwgeyAgICAgMjksIDh9LCBcCisgICAgeyAgICAgMTUsIDd9LCB7ICAgICAzNSwgOH0sIHsgICAgIDE5LCA3fSwgeyAgICAgNDMsIDh9LCBcCisgICAgeyAgICAgMjMsIDd9LCB7ICAgICA0OSwgOH0sIHsgICAgIDI3LCA3fSwgeyAgICAgNTUsIDl9LCBcCisgICAgeyAgICAgMTUsIDh9LCB7ICAgICAzMSwgN30sIHsgICAgIDYzLCA4fSwgeyAgICAgNDMsIDl9LCBcCisgICAgeyAgICAgMjMsIDh9LCB7ICAgICA1MSwgOX0sIHsgICAgIDMxLCA4fSwgeyAgICAgNjcsIDl9LCBcCisgICAgeyAgICAgMzksIDh9LCB7ICAgICA4MywgOX0sIHsgICAgIDQ3LCA4fSwgeyAgICAgOTUsIDl9LCBcCisgICAgeyAgICAgNTUsMTB9LCB7ICAgICAzMSwgOX0sIHsgICAgIDc5LDEwfSwgeyAgICAgNDcsIDl9LCBcCisgICAgeyAgICAgOTUsMTF9LCB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA5fSwgeyAgICAxMzUsMTB9LCBcCisgICAgeyAgICAgNzksIDl9LCB7ICAgIDE1OSwxMH0sIHsgICAgIDk1LCA5fSwgeyAgICAxOTEsMTB9LCBcCisgICAgeyAgICAxMTEsMTF9LCB7ICAgICA2MywxMH0sIHsgICAgMTQzLCA5fSwgeyAgICAyODcsMTB9LCBcCisgICAgeyAgICAxNTksMTF9LCB7ICAgICA5NSwxMH0sIHsgICAgMTkxLDEyfSwgeyAgICAgNjMsMTF9LCBcCisgICAgeyAgICAxMjcsMTB9LCB7ICAgIDI1NSwgOX0sIHsgICAgNTExLDEwfSwgeyAgICAyNzEsIDl9LCBcCisgICAgeyAgICA1NDMsMTB9LCB7ICAgIDI4NywxMX0sIHsgICAgMTU5LDEwfSwgeyAgICAzNTEsMTF9LCBcCisgICAgeyAgICAxOTEsMTB9LCB7ICAgIDQxNSwxMn0sIHsgICAgMTI3LDExfSwgeyAgICAyNTUsMTB9LCBcCisgICAgeyAgICA1NDMsMTF9LCB7ICAgIDI4NywxMH0sIHsgICAgNjA3LDExfSwgeyAgICAzMTksMTB9LCBcCisgICAgeyAgICA2NzEsMTF9LCB7ICAgIDM1MSwxMn0sIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTB9LCBcCisgICAgeyAgICA3OTksMTF9LCB7ICAgIDQxNSwxM30sIHsgICAgMTI3LDEyfSwgeyAgICAyNTUsMTF9LCBcCisgICAgeyAgICA1NDMsMTB9LCB7ICAgMTA4NywxMX0sIHsgICAgNjA3LDEyfSwgeyAgICAzMTksMTF9LCBcCisgICAgeyAgICA2NzEsMTB9LCB7ICAgMTM0MywxMX0sIHsgICAgNzM1LDEyfSwgeyAgICAzODMsMTF9LCBcCisgICAgeyAgICA3OTksMTB9LCB7ICAgMTU5OSwxMX0sIHsgICAgODYzLDEyfSwgeyAgICA0NDcsMTF9LCBcCisgICAgeyAgICA5NTksMTN9LCB7ICAgIDI1NSwxMn0sIHsgICAgNTExLDExfSwgeyAgIDEwODcsMTJ9LCBcCisgICAgeyAgICA1NzUsMTF9LCB7ICAgMTIxNSwxMn0sIHsgICAgNjM5LDExfSwgeyAgIDEzNDMsMTJ9LCBcCisgICAgeyAgICA3MDMsMTN9LCB7ICAgIDM4MywxMn0sIHsgICAgNzY3LDExfSwgeyAgIDE1OTksMTJ9LCBcCisgICAgeyAgICA4MzEsMTF9LCB7ICAgMTcyNywxMn0sIHsgICAgOTU5LDE0fSwgeyAgICAyNTUsMTN9LCBcCisgICAgeyAgICA1MTEsMTJ9LCB7ICAgMTA4NywxMX0sIHsgICAyMjM5LDEyfSwgeyAgIDEyMTUsMTF9LCBcCisgICAgeyAgIDI0MzEsMTN9LCB7ICAgIDYzOSwxMn0sIHsgICAxNDcxLDEzfSwgeyAgICA3NjcsMTJ9LCBcCisgICAgeyAgIDE3MjcsMTN9LCB7ICAgIDg5NSwxMn0sIHsgICAxOTE5LDE0fSwgeyAgICA1MTEsMTN9LCBcCisgICAgeyAgIDEwMjMsMTJ9LCB7ICAgMjIzOSwxM30sIHsgICAxMTUxLDEyfSwgeyAgIDI0MzEsMTN9LCBcCisgICAgeyAgIDEyNzksMTJ9LCB7ICAgMjYyMywxM30sIHsgICAxNDA3LDEyfSwgeyAgIDI4MTUsMTR9LCBcCisgICAgeyAgICA3NjcsMTN9LCB7ICAgMTY2MywxMn0sIHsgICAzNDU1LDEzfSwgeyAgIDE5MTksMTV9LCBcCisgICAgeyAgICA1MTEsMTR9LCB7ICAgMTAyMywxM30sIHsgICAyMTc1LDEyfSwgeyAgIDQ0NzksMTN9LCBcCisgICAgeyAgIDI0MzEsMTR9LCB7ICAgMTI3OSwxM30sIHsgICAyOTQzLDEyfSwgeyAgIDU4ODcsMTR9LCBcCisgICAgeyAgIDE1MzUsMTN9LCB7ICAgMzQ1NSwxNH0sIHsgICAxNzkxLDEzfSwgeyAgIDM5NjcsMTV9LCBcCisgICAgeyAgIDEwMjMsMTR9LCB7ICAgMjA0NywxM30sIHsgICA0NDc5LDE0fSwgeyAgIDIzMDMsMTN9LCBcCisgICAgeyAgIDQ5OTEsMTJ9LCB7ICAgOTk4MywxNH0sIHsgICAyODE1LDEzfSwgeyAgIDU4ODcsMTV9LCBcCisgICAgeyAgIDE1MzUsMTR9LCB7ICAgMzgzOSwxNn0gfQorI2RlZmluZSBNVUxfRkZUX1RBQkxFM19TSVpFIDE1NAorI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNjc4NAorCisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgNDYwICAvKiBrID0gNSAqLworI2RlZmluZSBTUVJfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgNDYwLCA1fSwgeyAgICAgMjksIDZ9LCB7ICAgICAxNSwgNX0sIHsgICAgIDMxLCA2fSwgXAorICAgIHsgICAgIDI5LCA3fSwgeyAgICAgMTUsIDZ9LCB7ICAgICAzMywgN30sIHsgICAgIDE3LCA2fSwgXAorICAgIHsgICAgIDM2LCA3fSwgeyAgICAgMTksIDZ9LCB7ICAgICAzOSwgN30sIHsgICAgIDI5LCA4fSwgXAorICAgIHsgICAgIDE1LCA3fSwgeyAgICAgMzUsIDh9LCB7ICAgICAxOSwgN30sIHsgICAgIDQxLCA4fSwgXAorICAgIHsgICAgIDIzLCA3fSwgeyAgICAgNDksIDh9LCB7ICAgICAyNywgN30sIHsgICAgIDU1LCA5fSwgXAorICAgIHsgICAgIDE1LCA4fSwgeyAgICAgMzEsIDd9LCB7ICAgICA2MywgOH0sIHsgICAgIDQzLCA5fSwgXAorICAgIHsgICAgIDIzLCA4fSwgeyAgICAgNTUsMTB9LCB7ICAgICAxNSwgOX0sIHsgICAgIDMxLCA4fSwgXAorICAgIHsgICAgIDY3LCA5fSwgeyAgICAgMzksIDh9LCB7ICAgICA3OSwgOX0sIHsgICAgIDQ3LCA4fSwgXAorICAgIHsgICAgIDk1LCA5fSwgeyAgICAgNTUsMTB9LCB7ICAgICAzMSwgOX0sIHsgICAgIDc5LDEwfSwgXAorICAgIHsgICAgIDQ3LCA5fSwgeyAgICAgOTUsMTF9LCB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA5fSwgXAorICAgIHsgICAgMTM1LDEwfSwgeyAgICAgNzksIDl9LCB7ICAgIDE1OSwxMH0sIHsgICAgIDk1LDExfSwgXAorICAgIHsgICAgIDYzLDEwfSwgeyAgICAxMjcsIDl9LCB7ICAgIDI1NSwxMH0sIHsgICAgMTQzLCA5fSwgXAorICAgIHsgICAgMjg3LDEwfSwgeyAgICAxNTksMTF9LCB7ICAgICA5NSwxMn0sIHsgICAgIDYzLDExfSwgXAorICAgIHsgICAgMTI3LDEwfSwgeyAgICAyNzEsIDl9LCB7ICAgIDU0MywxMH0sIHsgICAgMjg3LDExfSwgXAorICAgIHsgICAgMTU5LDEwfSwgeyAgICAzMTksIDl9LCB7ICAgIDYzOSwxMH0sIHsgICAgMzUxLDExfSwgXAorICAgIHsgICAgMTkxLDEwfSwgeyAgICA0MTUsMTJ9LCB7ICAgIDEyNywxMX0sIHsgICAgMjU1LDEwfSwgXAorICAgIHsgICAgNTQzLDExfSwgeyAgICAyODcsMTB9LCB7ICAgIDU3NSwxMX0sIHsgICAgMzE5LDEwfSwgXAorICAgIHsgICAgNjcxLDExfSwgeyAgICAzNTEsMTB9LCB7ICAgIDcwMywxMn0sIHsgICAgMTkxLDExfSwgXAorICAgIHsgICAgMzgzLDEwfSwgeyAgICA3OTksMTF9LCB7ICAgIDQxNSwxMH0sIHsgICAgODMxLDEzfSwgXAorICAgIHsgICAgMTI3LDEyfSwgeyAgICAyNTUsMTF9LCB7ICAgIDUxMSwxMH0sIHsgICAxMDIzLDExfSwgXAorICAgIHsgICAgNTQzLDEwfSwgeyAgIDEwODcsMTF9LCB7ICAgIDYwNywxMn0sIHsgICAgMzE5LDExfSwgXAorICAgIHsgICAgNjcxLDEwfSwgeyAgIDEzNDMsMTF9LCB7ICAgIDczNSwxMn0sIHsgICAgMzgzLDExfSwgXAorICAgIHsgICAgNzk5LDEwfSwgeyAgIDE1OTksMTF9LCB7ICAgIDg2MywxMn0sIHsgICAgNDQ3LDExfSwgXAorICAgIHsgICAgOTI3LDEzfSwgeyAgICAyNTUsMTJ9LCB7ICAgIDUxMSwxMX0sIHsgICAxMDg3LDEyfSwgXAorICAgIHsgICAgNTc1LDExfSwgeyAgIDEyMTUsMTJ9LCB7ICAgIDYzOSwxMX0sIHsgICAxMzQzLDEyfSwgXAorICAgIHsgICAgNzAzLDExfSwgeyAgIDE0MDcsMTN9LCB7ICAgIDM4MywxMn0sIHsgICAgNzY3LDExfSwgXAorICAgIHsgICAxNTk5LDEyfSwgeyAgICA4MzEsMTF9LCB7ICAgMTcyNywxMn0sIHsgICAgODk1LDExfSwgXAorICAgIHsgICAxNzkxLDE0fSwgeyAgICAyNTUsMTN9LCB7ICAgIDUxMSwxMn0sIHsgICAxMDg3LDExfSwgXAorICAgIHsgICAyMjM5LDEyfSwgeyAgIDEyMTUsMTN9LCB7ICAgIDYzOSwxMn0sIHsgICAxNDcxLDEzfSwgXAorICAgIHsgICAgNzY3LDEyfSwgeyAgIDE3MjcsMTN9LCB7ICAgIDg5NSwxMn0sIHsgICAxOTE5LDE0fSwgXAorICAgIHsgICAgNTExLDEzfSwgeyAgIDEwMjMsMTJ9LCB7ICAgMjIzOSwxM30sIHsgICAxMTUxLDEyfSwgXAorICAgIHsgICAyNDMxLDEzfSwgeyAgIDEyNzksMTJ9LCB7ICAgMjYyMywxM30sIHsgICAxNDA3LDEyfSwgXAorICAgIHsgICAyODE1LDE0fSwgeyAgICA3NjcsMTN9LCB7ICAgMTY2MywxMn0sIHsgICAzNDU1LDEzfSwgXAorICAgIHsgICAxOTE5LDE1fSwgeyAgICA1MTEsMTR9LCB7ICAgMTAyMywxM30sIHsgICAyMTc1LDEyfSwgXAorICAgIHsgICA0NDc5LDEzfSwgeyAgIDI0MzEsMTR9LCB7ICAgMTI3OSwxM30sIHsgICAyOTQzLDEyfSwgXAorICAgIHsgICA1ODg3LDE0fSwgeyAgIDE1MzUsMTN9LCB7ICAgMzQ1NSwxNH0sIHsgICAxNzkxLDEzfSwgXAorICAgIHsgICAzOTY3LDE1fSwgeyAgIDEwMjMsMTR9LCB7ICAgMjA0NywxM30sIHsgICA0NDc5LDE0fSwgXAorICAgIHsgICAyMzAzLDEzfSwgeyAgIDQ5OTEsMTJ9LCB7ICAgOTk4MywxNH0sIHsgICAyODE1LDEzfSwgXAorICAgIHsgICA1ODg3LDE1fSwgeyAgIDE1MzUsMTR9LCB7ICAgMzgzOSwxNn0gfQorI2RlZmluZSBTUVJfRkZUX1RBQkxFM19TSVpFIDE1NQorI2RlZmluZSBTUVJfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNTU2OAorCisjZGVmaW5lIE1VTExPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTVVMTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgNjgKKyNkZWZpbmUgTVVMTE9fTVVMX05fVEhSRVNIT0xEICAgICAgICAgICAgMTM1NTUKKyNkZWZpbmUgU1FSTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBTUVJMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgIDExNworI2RlZmluZSBTUVJMT19TUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAxMDk4OAorCisjZGVmaW5lIERDX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDQyCisjZGVmaW5lIERDX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAgMTYzCisjZGVmaW5lIERDX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDY2CisjZGVmaW5lIERDX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTYwCisKKyNkZWZpbmUgSU5WX01VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgNDYKKyNkZWZpbmUgSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgICAxNjUKKyNkZWZpbmUgSU5WX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAxNTcKKworI2RlZmluZSBCSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgIDMwMAorI2RlZmluZSBSRURDXzFfVE9fUkVEQ19OX1RIUkVTSE9MRCAgICAgICAgICA2OAorCisjZGVmaW5lIE1VX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAxNzE4CisjZGVmaW5lIE1VX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAxNjg1CisjZGVmaW5lIE1VUElfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDYyCisjZGVmaW5lIE1VX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAxNTg5CisjZGVmaW5lIE1VX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAxODMwCisKKyNkZWZpbmUgUE9XTV9TRUNfVEFCTEUgIDEsMTcsMTI5LDU0NywxMzE3CisKKyNkZWZpbmUgR0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICAgMTYKKyNkZWZpbmUgU0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAzNTQKKyNkZWZpbmUgU0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICA4NjAKKworI2RlZmluZSBGQUNfRFNDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDE0MQorI2RlZmluZSBGQUNfT0REX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAzNAorCisjZGVmaW5lIE1BVFJJWDIyX1NUUkFTU0VOX1RIUkVTSE9MRCAgICAgICAgIDIwCisjZGVmaW5lIEhHQ0QyX0RJVjFfTUVUSE9EICAgICAgICAgICAgICAgICAgICA1ICAvKiAxLjA0JSBmYXN0ZXIgdGhhbiAzICovCisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAgMTE0CisjZGVmaW5lIEhHQ0RfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTMyCisjZGVmaW5lIEhHQ0RfUkVEVUNFX1RIUkVTSE9MRCAgICAgICAgICAgICAzNTI0CisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgNDc0CisjZGVmaW5lIEdDREVYVF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMzc5CisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAgICAxICAvKiAyNy4zOSUgZmFzdGVyIHRoYW4gNCAqLworCisvKiBUdW5ldXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgdG9vayAzMTcyMSBzZWNvbmRzICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni9zcXJfYmFzZWNhc2UuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvc3FyX2Jhc2VjYXNlLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWY4YTg5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvc3FyX2Jhc2VjYXNlLmFzbQpAQCAtMCwwICsxLDM1OSBAQAorZG5sICB4ODYgZ2VuZXJpYyBtcG5fc3FyX2Jhc2VjYXNlIC0tIHNxdWFyZSBhbiBtcG4gbnVtYmVyLgorCitkbmwgIENvcHlyaWdodCAxOTk5LCAyMDAwLCAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDICAgICBjeWNsZXMvY3Jvc3Nwcm9kdWN0ICBjeWNsZXMvdHJpYW5nbGVwcm9kdWN0CitDIFA1CitDIFA2CitDIEs2CitDIEs3CitDIFA0CisKKworQyB2b2lkIG1wbl9zcXJfYmFzZWNhc2UgKG1wX3B0ciBkc3QsIG1wX3NyY3B0ciBzcmMsIG1wX3NpemVfdCBzaXplKTsKK0MKK0MgVGhlIGFsZ29yaXRobSBpcyBiYXNpY2FsbHkgdGhlIHNhbWUgYXMgbXBuL2dlbmVyaWMvc3FyX2Jhc2VjYXNlLmMsIGJ1dCBhCitDIGxvdCBvZiBmdW5jdGlvbiBjYWxsIG92ZXJoZWFkcyBhcmUgYXZvaWRlZCwgZXNwZWNpYWxseSB3aGVuIHRoZSBzaXplIGlzCitDIHNtYWxsLgorQworQyBUaGUgbXVsMSBsb29wIGlzIG5vdCB1bnJvbGxlZCBsaWtlIG11bF8xLmFzbSwgaXQgZG9lc24ndCBzZWVtIHdvcnRoIHRoZQorQyBjb2RlIHNpemUgdG8gZG8gc28gaGVyZS4KK0MKK0MgRW5oYW5jZW1lbnRzOgorQworQyBUaGUgYWRkbXVsIGxvb3AgaGVyZSBpcyBhbHNvIG5vdCB1bnJvbGxlZCBsaWtlIGFvcnNtdWxfMS5hc20gYW5kCitDIG11bF9iYXNlY2FzZS5hc20gYXJlLiAgUGVyaGFwcyBpdCBzaG91bGQgYmUgZG9uZS4gIEl0J2QgYWRkIHRvIHRoZQorQyBjb21wbGV4aXR5LCBidXQgaWYgaXQncyB3b3J0aCBkb2luZyBpbiB0aGUgb3RoZXIgcGxhY2VzIHRoZW4gaXQgc2hvdWxkIGJlCitDIHdvcnRod2hpbGUgaGVyZS4KK0MKK0MgQSBmdWxseS11bnJvbGxlZCBzdHlsZSBsaWtlIG90aGVyIHNxcl9iYXNlY2FzZS5hc20gdmVyc2lvbnMgKGs2LCBrNywgcDYpCitDIG1pZ2h0IGJlIHdvcnRoIGNvbnNpZGVyaW5nLiAgVGhhdCdkIGFkZCBxdWl0ZSBhIGJpdCB0byB0aGUgY29kZSBzaXplLCBidXQKK0Mgb25seSBhcyBtdWNoIGFzIGlzIHVzZWQgd291bGQgYmUgZHJhZ2dlZCBpbnRvIEwxIGNhY2hlLgorCitkZWZmcmFtZShQQVJBTV9TSVpFLDEyKQorZGVmZnJhbWUoUEFSQU1fU1JDLCA4KQorZGVmZnJhbWUoUEFSQU1fRFNULCA0KQorCisJVEVYVAorCUFMSUdOKDgpCitQUk9MT0dVRShtcG5fc3FyX2Jhc2VjYXNlKQorZGVmbGl0KGBGUkFNRScsMCkKKworCW1vdmwJUEFSQU1fU0laRSwgJWVkeAorCisJbW92bAlQQVJBTV9TUkMsICVlYXgKKworCWNtcGwJJDIsICVlZHgKKwltb3ZsCVBBUkFNX0RTVCwgJWVjeAorCisJamUJTCh0d29fbGltYnMpCisJamEJTCh0aHJlZV9vcl9tb3JlKQorCisKK0MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0Mgb25lIGxpbWIgb25seQorCUMgZWF4CXNyYworCUMgZWJ4CisJQyBlY3gJZHN0CisJQyBlZHgKKworCW1vdmwJKCVlYXgpLCAlZWF4CisJbXVsbAklZWF4CisJbW92bAklZWF4LCAoJWVjeCkKKwltb3ZsCSVlZHgsIDQoJWVjeCkKKwlyZXQKKworCitDIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJQUxJR04oOCkKK0wodHdvX2xpbWJzKToKKwlDIGVheAlzcmMKKwlDIGVieAorCUMgZWN4CWRzdAorCUMgZWR4CisKKwlwdXNobAklZWJ4CisJcHVzaGwJJWVicAorCisJbW92bAklZWF4LCAlZWJ4CisJbW92bAkoJWVheCksICVlYXgKKworCW11bGwJJWVheAkJQyBzcmNbMF1eMgorCisJcHVzaGwJJWVzaQorCXB1c2hsCSVlZGkKKworCW1vdmwJJWVkeCwgJWVzaQlDIGRzdFsxXQorCW1vdmwJJWVheCwgKCVlY3gpCUMgZHN0WzBdCisKKwltb3ZsCTQoJWVieCksICVlYXgKKwltdWxsCSVlYXgJCUMgc3JjWzFdXjIKKworCW1vdmwJJWVheCwgJWVkaQlDIGRzdFsyXQorCW1vdmwJJWVkeCwgJWVicAlDIGRzdFszXQorCisJbW92bAkoJWVieCksICVlYXgKKwltdWxsCTQoJWVieCkJCUMgc3JjWzBdKnNyY1sxXQorCisJYWRkbAklZWF4LCAlZXNpCisKKwlhZGNsCSVlZHgsICVlZGkKKworCWFkY2wJJDAsICVlYnAKKwlhZGRsCSVlc2ksICVlYXgKKworCWFkY2wJJWVkaSwgJWVkeAorCW1vdmwJJWVheCwgNCglZWN4KQorCisJYWRjbAkkMCwgJWVicAorCisJbW92bAklZWR4LCA4KCVlY3gpCisJbW92bAklZWJwLCAxMiglZWN4KQorCisJcG9wbAklZWRpCisJcG9wbAklZXNpCisKKwlwb3BsCSVlYnAKKwlwb3BsCSVlYngKKworCXJldAorCisKK0MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlBTElHTig4KQorTCh0aHJlZV9vcl9tb3JlKToKK2RlZmxpdChgRlJBTUUnLDApCisJQyBlYXgJc3JjCisJQyBlYngKKwlDIGVjeAlkc3QKKwlDIGVkeAlzaXplCisKKwlwdXNobAklZWJ4CUZSQU1FX3B1c2hsKCkKKwlwdXNobAklZWRpCUZSQU1FX3B1c2hsKCkKKworCXB1c2hsCSVlc2kJRlJBTUVfcHVzaGwoKQorCXB1c2hsCSVlYnAJRlJBTUVfcHVzaGwoKQorCisJbGVhbAkoJWVjeCwlZWR4LDQpLCAlZWRpCUMgJmRzdFtzaXplXSwgZW5kIG9mIHRoaXMgbXVsMQorCWxlYWwJKCVlYXgsJWVkeCw0KSwgJWVzaQlDICZzcmNbc2l6ZV0KKworQyBGaXJzdCBtdWx0aXBseSBzcmNbMF0qc3JjWzEuLnNpemUtMV0gYW5kIHN0b3JlIGF0IGRzdFsxLi5zaXplXS4KKworCW1vdmwJKCVlYXgpLCAlZWJwCQlDIHNyY1swXSwgbXVsdGlwbGllcgorCW1vdmwJJWVkeCwgJWVjeAorCisJbmVnbAklZWN4CQkJQyAtc2l6ZQorCXhvcmwJJWVieCwgJWVieAkJQyBjbGVhciBjYXJyeSBsaW1iCisKKwlpbmNsCSVlY3gJCQlDIC0oc2l6ZS0xKQorCitMKG11bDEpOgorCUMgZWF4CXNjcmF0Y2gKKwlDIGVieAljYXJyeQorCUMgZWN4CWNvdW50ZXIsIGxpbWJzLCBuZWdhdGl2ZQorCUMgZWR4CXNjcmF0Y2gKKwlDIGVzaQkmc3JjW3NpemVdCisJQyBlZGkJJmRzdFtzaXplXQorCUMgZWJwCW11bHRpcGxpZXIKKworCW1vdmwJKCVlc2ksJWVjeCw0KSwgJWVheAorCW11bGwJJWVicAorCWFkZGwJJWVheCwgJWVieAorCWFkY2wJJDAsICVlZHgKKwltb3ZsCSVlYngsICglZWRpLCVlY3gsNCkKKwltb3ZsCSVlZHgsICVlYngKKwlpbmNsCSVlY3gKKwlqbnoJTChtdWwxKQorCisJbW92bAklZWJ4LCAoJWVkaSkKKworCisJQyBBZGQgcHJvZHVjdHMgc3JjW25dKnNyY1tuKzEuLnNpemUtMV0gYXQgZHN0WzIqbi0xLi4uXSwgZm9yCisJQyBuPTEuLnNpemUtMi4KKwlDCisJQyBUaGUgbGFzdCBwcm9kdWN0cyBzcmNbc2l6ZS0yXSpzcmNbc2l6ZS0xXSwgd2hpY2ggaXMgdGhlIGVuZCBjb3JuZXIKKwlDIG9mIHRoZSBwcm9kdWN0IHRyaWFuZ2xlLCBpcyBoYW5kbGVkIHNlcGFyYXRlbHkgYXQgdGhlIGVuZCB0byBzYXZlCisJQyBsb29waW5nIG92ZXJoZWFkLiAgSWYgc2l6ZSBpcyAzIHRoZW4gaXQncyBvbmx5IHRoaXMgdGhhdCBuZWVkcyB0bworCUMgYmUgZG9uZS4KKwlDCisJQyBJbiB0aGUgb3V0ZXIgbG9vcCAlZXNpIGlzIGEgY29uc3RhbnQsIGFuZCAlZWRpIGp1c3QgYWR2YW5jZXMgYnkgMQorCUMgbGltYiBlYWNoIHRpbWUuICBUaGUgc2l6ZSBvZiB0aGUgb3BlcmF0aW9uIGRlY3JlYXNlcyBieSAxIGxpbWIKKwlDIGVhY2ggdGltZS4KKworCUMgZWF4CisJQyBlYngJY2FycnkgKG5lZWRpbmcgY2FycnkgZmxhZyBhZGRlZCkKKwlDIGVjeAorCUMgZWR4CisJQyBlc2kJJnNyY1tzaXplXQorCUMgZWRpCSZkc3Rbc2l6ZV0KKwlDIGVicAorCisJbW92bAlQQVJBTV9TSVpFLCAlZWN4CisJc3VibAkkMywgJWVjeAorCWp6CUwoY29ybmVyKQorCisJbmVnbAklZWN4CisKK2RubCAgcmUtdXNlIHBhcmFtZXRlciBzcGFjZQorZGVmaW5lKFZBUl9PVVRFUixgUEFSQU1fRFNUJykKKworTChvdXRlcik6CisJQyBlYXgKKwlDIGVieAorCUMgZWN4CisJQyBlZHgJb3V0ZXIgbG9vcCBjb3VudGVyLCAtKHNpemUtMykgdG8gLTEKKwlDIGVzaQkmc3JjW3NpemVdCisJQyBlZGkJZHN0LCBwb2ludGluZyBhdCBzdG9yZWQgY2FycnkgbGltYiBvZiBwcmV2aW91cyBsb29wCisJQyBlYnAKKworCW1vdmwJJWVjeCwgVkFSX09VVEVSCisJYWRkbAkkNCwgJWVkaQkJQyBhZHZhbmNlIGRzdCBlbmQKKworCW1vdmwJLTgoJWVzaSwlZWN4LDQpLCAlZWJwCUMgbmV4dCBtdWx0aXBsaWVyCisJc3VibAkkMSwgJWVjeAorCisJeG9ybAklZWJ4LCAlZWJ4CQlDIGluaXRpYWwgY2FycnkgbGltYgorCitMKGlubmVyKToKKwlDIGVheAlzY3JhdGNoCisJQyBlYngJY2FycnkgKG5lZWRpbmcgY2FycnkgZmxhZyBhZGRlZCkKKwlDIGVjeAljb3VudGVyLCAtbi0xIHRvIC0xCisJQyBlZHgJc2NyYXRjaAorCUMgZXNpCSZzcmNbc2l6ZV0KKwlDIGVkaQlkc3QgZW5kIG9mIHRoaXMgYWRkbXVsCisJQyBlYnAJbXVsdGlwbGllcgorCisJbW92bAkoJWVzaSwlZWN4LDQpLCAlZWF4CisJbXVsbAklZWJwCisJYWRkbAklZWJ4LCAlZWF4CisJYWRjbAkkMCwgJWVkeAorCWFkZGwJJWVheCwgKCVlZGksJWVjeCw0KQorCWFkY2wJJDAsICVlZHgKKwltb3ZsCSVlZHgsICVlYngKKwlhZGRsCSQxLCAlZWN4CisJamwJTChpbm5lcikKKworCisJbW92bAklZWJ4LCAoJWVkaSkKKwltb3ZsCVZBUl9PVVRFUiwgJWVjeAorCWluY2wJJWVjeAorCWpueglMKG91dGVyKQorCisKK0woY29ybmVyKToKKwlDIGVzaQkmc3JjW3NpemVdCisJQyBlZGkJJmRzdFsyKnNpemUtM10KKworCW1vdmwJLTQoJWVzaSksICVlYXgKKwltdWxsCS04KCVlc2kpCQlDIHNyY1tzaXplLTFdKnNyY1tzaXplLTJdCisJYWRkbAklZWF4LCAwKCVlZGkpCisJYWRjbAkkMCwgJWVkeAorCW1vdmwJJWVkeCwgNCglZWRpKQkJQyBkc3QgaGlnaCBsaW1iCisKKworQyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQyBMZWZ0IHNoaWZ0IG9mIGRzdFsxLi4yKnNpemUtMl0sIGhpZ2ggYml0IHNoaWZ0ZWQgb3V0IGJlY29tZXMgZHN0WzIqc2l6ZS0xXS4KKworCW1vdmwJUEFSQU1fU0laRSwgJWVheAorCW5lZ2wJJWVheAorCWFkZGwJJDEsICVlYXgJCUMgLShzaXplLTEpIGFuZCBjbGVhciBjYXJyeQorCitMKGxzaGlmdCk6CisJQyBlYXgJY291bnRlciwgbmVnYXRpdmUKKwlDIGVieAluZXh0IGxpbWIKKwlDIGVjeAorCUMgZWR4CisJQyBlc2kKKwlDIGVkaQkmZHN0WzIqc2l6ZS00XQorCUMgZWJwCisKKwlyY2xsCTgoJWVkaSwlZWF4LDgpCisJcmNsbAkxMiglZWRpLCVlYXgsOCkKKwlpbmNsCSVlYXgKKwlqbnoJTChsc2hpZnQpCisKKworCWFkY2wJJWVheCwgJWVheAkJQyBoaWdoIGJpdCBvdXQKKwltb3ZsCSVlYXgsIDgoJWVkaSkJCUMgZHN0IG1vc3Qgc2lnbmlmaWNhbnQgbGltYgorCisKK0MgTm93IGFkZCBpbiB0aGUgc3F1YXJlcyBvbiB0aGUgZGlhZ29uYWwsIG5hbWVseSBzcmNbMF1eMiwgc3JjWzFdXjIsIC4uLiwKK0Mgc3JjW3NpemUtMV1eMi4gIGRzdFswXSBoYXNuJ3QgeWV0IGJlZW4gc2V0IGF0IGFsbCB5ZXQsIGFuZCBqdXN0IGdldHMgdGhlCitDIGxvdyBsaW1iIG9mIHNyY1swXV4yLgorCisJbW92bAlQQVJBTV9TUkMsICVlc2kKKwltb3ZsCSglZXNpKSwgJWVheAkJQyBzcmNbMF0KKwltdWxsCSVlYXgJCQlDIHNyY1swXV4yCisKKwltb3ZsCVBBUkFNX1NJWkUsICVlY3gKKwlsZWFsCSglZXNpLCVlY3gsNCksICVlc2kJQyBzcmMgZW5kCisKKwluZWdsCSVlY3gJCQlDIC1zaXplCisJbW92bAklZWR4LCAlZWJ4CQlDIGluaXRpYWwgY2FycnkKKworCW1vdmwJJWVheCwgMTIoJWVkaSwlZWN4LDgpCUMgZHN0WzBdCisJaW5jbAklZWN4CQkJQyAtKHNpemUtMSkKKworTChkaWFnKToKKwlDIGVheAlzY3JhdGNoIChsb3cgcHJvZHVjdCkKKwlDIGVieAljYXJyeSBsaW1iCisJQyBlY3gJY291bnRlciwgLShzaXplLTEpIHRvIC0xCisJQyBlZHgJc2NyYXRjaCAoaGlnaCBwcm9kdWN0KQorCUMgZXNpCSZzcmNbc2l6ZV0KKwlDIGVkaQkmZHN0WzIqc2l6ZS0zXQorCUMgZWJwCXNjcmF0Y2ggKGZldGNoZWQgZHN0IGxpbWJzKQorCisJbW92bAkoJWVzaSwlZWN4LDQpLCAlZWF4CisJbXVsbAklZWF4CisKKwlhZGRsCSVlYngsIDgoJWVkaSwlZWN4LDgpCisJbW92bAklZWR4LCAlZWJ4CisKKwlhZGNsCSVlYXgsIDEyKCVlZGksJWVjeCw4KQorCWFkY2wJJDAsICVlYngKKworCWluY2wJJWVjeAorCWpueglMKGRpYWcpCisKKworCWFkZGwJJWVieCwgOCglZWRpKQkJQyBkc3QgbW9zdCBzaWduaWZpY2FudCBsaW1iCisKKwlwb3BsCSVlYnAKKwlwb3BsCSVlc2kKKworCXBvcGwJJWVkaQorCXBvcGwJJWVieAorCisJcmV0CisKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3QtemRpc3Auc2ggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni90LXpkaXNwLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYxZWZkZDYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni90LXpkaXNwLnNoCkBAIC0wLDAgKzEsNzEgQEAKKyMhIC9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisjCisjICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKyMKKyMgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorIyAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisjICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgIG9yCisjCisjICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjICAgICAgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisjCisjICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjICBmb3IgbW9yZSBkZXRhaWxzLgorIworIyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorIyAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorIyAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKKyMgVXNhZ2U6IGNkICQoYnVpbGRkaXIpL21wbgorIyAgICAgICAgJChzcmNkaXIpL3g4Ni90LXpkaXNwLnNoCisjCisjIFJ1biB0aGUgWmRpc3AoKSBtYWNybyBpbnN0cnVjdGlvbnMgdGhyb3VnaCB0aGUgYXNzZW1ibGVyIHRvIGNoZWNrCisjIHRoZSBlbmNvZGluZ3MgdXNlZC4gIE1pc21hdGNoZXMgYXJlIHByaW50ZWQsIG5vIG91dHB1dCBtZWFucyBhbGwgb2suCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBvbmx5IG1lYW50IGZvciB1c2UgZHVyaW5nIGRldmVsb3BtZW50LiAgSXQgY2FuIGJlCisjIHJ1biBpbiB0aGUgbXBuIGJ1aWxkIGRpcmVjdG9yeSBvZiBhbnkgeDg2IGNvbmZpZ3VyYXRpb24uCisjCisjIEZvciB0aGlzIHRlc3QgdGhlIGFzc2VtYmxlciBuZWVkcyB0byBnZW5lcmF0ZSBieXRlIHNpemVkIDAKKyMgZGlzcGxhY2VtZW50cyB3aGVuIGdpdmVuIHNvbWV0aGluZyBsaWtlIDAoJWVheCkuICBSZWNlbnQgdmVyc2lvbnMgb2YKKyMgZ2FzIGFyZSBzdWl0YWJsZSAoZWcuIDIuOS54IG9yIDIuMTAueCkuCisKK3NldCAtZQorCitjYXQgPnRtcC16ZGlzcHRlc3QuYXNtIDw8XEVPRgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitkbmwgIFJlZGVmaW5lIFpkaXNwX21hdGNoIHRvIG91dHB1dCBpdHMgcGF0dGVybiBhbmQgZW5jb2RpbmcuCitkZWZpbmUoYFpkaXNwX21hdGNoJywKK2BkZWZpbmUoYFpkaXNwX2ZvdW5kJywxKWRubAoraWZlbHNlKGAkMicsMCxgCSQxCSQyJDMsICQ0JylgJ2RubAoraWZlbHNlKGAkMycsMCxgCSQxCSQyLCAkMyQ0JylgJ2RubAorCisJLmJ5dGUJJDUKKycpCisJLnRleHQKKwlaZGlzcCgpCitFT0YKKworbTQgdG1wLXpkaXNwdGVzdC5hc20gPnRtcC16ZGlzcHRlc3QucworYXMgLW8gdG1wLXpkaXNwdGVzdC5vIHRtcC16ZGlzcHRlc3QucworCisjIERlbWFuZCBkdXBsaWNhdGVzIGZyb20gdGhlIGluc3RydWN0aW9uIHBhdHRlcm5zIGFuZCBieXRlIGVuY29kaW5ncy4KK29iamR1bXAgLWQgdG1wLXpkaXNwdGVzdC5vIHwgYXdrICcKKy9eICpbYS16MC05XSs6LyB7CisJc3ViKC9eICpbYS16MC05XSs6LywiIikKKyAgICAgICAgcHJpbnQKK30nIHwgc29ydCB8IHVuaXEgLXUKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3QtemRpc3AyLnBsIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvdC16ZGlzcDIucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjQ0MWI2NQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3QtemRpc3AyLnBsCkBAIC0wLDAgKzEsMTQ3IEBACisjIS91c3IvYmluL3BlcmwgLXcKKyMKKyMgQ29weXJpZ2h0IDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisjCisjICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKyMKKyMgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorIyAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisjICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgIG9yCisjCisjICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjICAgICAgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisjCisjICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjICBmb3IgbW9yZSBkZXRhaWxzLgorIworIyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorIyAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorIyAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKKyMgVXNhZ2U6IGNkICQoYnVpbGRkaXIpL21wbgorIyAgICAgICAgJChzcmNkaXIpL3g4Ni90LXpkaXNwMi5wbAorIworIyBHcmVwIGZvciBhbnkgIjAocmVnLi4uKSIgYWRkcmVzc2luZyBtb2RlcyBjb21pbmcgb3V0IG9mIHRoZSB4ODYgLmFzbQorIyBmaWxlcy4gIEFkZGl0aXZlIGV4cHJlc3Npb25zIGxpa2UgIjEyKzQtMTYiIGFyZSByZWNvZ25pc2VkIHRvby4KKyMKKyMgT2xkIGdhcyBkb2Vzbid0IHByZXNlcnZlIHRoZSAiMCIgZGlzcGxhY2VtZW50LCBzbyBpZiBpdCdzIHdhbnRlZCB0aGVuCisjIFpkaXNwIG91Z2h0IHRvIGJlIHVzZWQgdG8gZ2l2ZSBleHBsaWNpdCAuYnl0ZSBzZXF1ZW5jZXMuICBTZWUKKyMgbXBuL3g4Ni9SRUFETUUuCisjCisjIE5vIG91dHB1dCBtZWFucyBldmVyeXRoaW5nIGlzIG9rLiAgQWxsIHRoZSBhc20gZmlsZXMgYXJlIHB1dCB0aHJvdWdoIG00IGluCisjIFBJQyBhbmQgbm9uLVBJQyBtb2RlcywgYW5kIGluIGVhY2ggbXVsdGktZnVuY3Rpb24gZm9ybSwgYWxsIG9mIHdoaWNoIGNhbgorIyB0YWtlIGEgd2hpbGUgdG8gcnVuLgorIworIyBUaGlzIHByb2dyYW0gaXMgb25seSBtZWFudCBmb3IgdXNlIGR1cmluZyBkZXZlbG9wbWVudC4KKwordXNlIHN0cmljdDsKK3VzZSBGaWxlOjpGaW5kOwordXNlIEZpbGU6OkJhc2VuYW1lOwordXNlIEdldG9wdDo6U3RkOworCitteSAlb3B0OworZ2V0b3B0cygndCcsIFwlb3B0KTsKKworCitteSAkc3JjZGlyOworb3BlbiBJTiwgJzxNYWtlZmlsZScgb3IgZGllOword2hpbGUgKDxJTj4pIHsKKyAgaWYgKC9ec3JjZGlyWyBcdF0qPVsgXHRdKiguKikvKSB7CisgICAgJHNyY2RpciA9ICQxOworICAgIGxhc3Q7CisgIH0KK30KK2Nsb3NlIElOIG9yIGRpZTsKK2RlZmluZWQgJHNyY2RpciBvciBkaWUgIkNhbm5vdCBmaW5kIFwkc3JjZGlyIGluIE1ha2VmaWxlXG4iOworCitteSAkZmlsZWNvdW50ID0gMDsKKworbXkgJHRlbXBmaWxlID0gJ3QtemRpc3AyLnRtcCc7CitvcGVuIEtBUkEsICI+JHRlbXBmaWxlIiBvciBkaWU7CitjbG9zZSBLQVJBIG9yIGRpZTsKKworZmluZCh7IHdhbnRlZCA9PiBcJnByb2Nlc3MsIHByZXByb2Nlc3MgPT4gXCZwcm9jZXNzX21wYXJhbSwgbm9fY2hkaXIgPT4gMSB9LAorICAgICAiJHNyY2Rpci94ODYiKTsKKworc3ViIHByb2Nlc3MgeworICBpZiAoL2dtcC1tcGFyYW0uaCQvKSB7CisgICAgcHJvY2Vzc19tcGFyYW0oJF8pOworICB9IGVsc2lmICgvXC5hc20kLykgeworICAgIHByb2Nlc3NfYXNtKCRfKTsKKyAgfQorfQorCisjIEVuc3VyZSB3ZSdyZSB1c2luZyB0aGUgcmlnaHQgU1FSX1RPT00yX1RIUkVTSE9MRCBmb3IgdGhlIHBhcnQgb2YgdGhlCisjIHRyZWUgYmVpbmcgcHJvY2Vzc2VkLgorc3ViIHByb2Nlc3NfbXBhcmFtIHsKKyAgbXkgJGZpbGUgPSAiJEZpbGU6OkZpbmQ6OmRpci9nbXAtbXBhcmFtLmgiOworICBpZiAoLWYgJGZpbGUpIHsKKyAgICBwcmludCAiJGZpbGVcbiIgaWYgJG9wdHsndCd9OworICAgIG9wZW4gTVBBUkFNLCAiPCRmaWxlIiBvciBkaWU7CisgICAgd2hpbGUgKDxNUEFSQU0+KSB7CisgICAgICBpZiAoL14jZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTERbIFx0XSooWzAtOV1bMC05XSopLykgeworICAgICAgICBvcGVuIEtBUkEsICI+JHRlbXBmaWxlIiBvciBkaWU7CisgICAgICAgIHByaW50IEtBUkEgImRlZmluZShcYFNRUl9UT09NMl9USFJFU0hPTEQnLCQxKVxuXG4iOworICAgICAgICBwcmludCAiZGVmaW5lKFxgU1FSX1RPT00yX1RIUkVTSE9MRCcsJDEpXG4iIGlmICRvcHR7J3QnfTsKKyAgICAgICAgY2xvc2UgS0FSQSBvciBkaWU7CisgICAgICAgIGxhc3Q7CisgICAgICB9CisgICAgfQorICAgIGNsb3NlIE1QQVJBTSBvciBkaWU7CisgIH0KKyAgcmV0dXJuIEBfOworfQorCitzdWIgcHJvY2Vzc19hc20geworICBteSAoJGZpbGUpID0gQF87CisgIG15ICRiYXNlID0gYmFzZW5hbWUgKCRmaWxlLCAnLmFzbScpOworCisgIG15IEBmdW5zOworICBpZiAgICAoJGJhc2UgZXEgJ2FvcnNfbicpICAgIHsgQGZ1bnMgPSBxdyhhZGRfbiBzdWJfbik7IH0KKyAgZWxzaWYgKCRiYXNlIGVxICdhb3JzbXVsXzEnKSB7IEBmdW5zID0gcXcoYWRkbXVsXzEgc3VibXVsXzEpOyB9CisgIGVsc2lmICgkYmFzZSBlcSAncG9waGFtJykgICAgeyBAZnVucyA9IHF3KHBvcGNvdW50IGhhbWRpc3QpOyB9CisgIGVsc2lmICgkYmFzZSBlcSAnbG9nb3BzX24nKSAgeyBAZnVucyA9IHF3KGFuZF9uIGFuZG5fbiBuYW5kX24gaW9yX24gaW9ybl9uIG5pb3JfbiB4b3JfbiB4bm9yX24pOyB9CisgIGVsc2lmICgkYmFzZSBlcSAnbG9ycnNoaWZ0JykgeyBAZnVucyA9IHF3KGxzaGlmdCByc2hpZnQpOyB9CisgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgeyBAZnVucyA9ICgkYmFzZSk7IH0KKworICBmb3JlYWNoIG15ICRmdW4gKEBmdW5zKSB7CisgICAgZm9yZWFjaCBteSAkcGljICgnJywgJyAtRFBJQycpIHsKKyAgICAgIG15ICRoZWFkZXIgPSAiJGZpbGU6IDA6ICRwaWNcbiI7CisgICAgICAkZmlsZWNvdW50Kys7CisKKyAgICAgIG15ICRtNCA9ICJtNCAtREhBVkVfSE9TVF9DUFVfYXRobG9uIC1ET1BFUkFUSU9OXyRmdW4gJHBpYyAuLi9jb25maWcubTQgJHRlbXBmaWxlICRmaWxlIjsKKyAgICAgIHByaW50ICIkbTRcbiIgaWYgJG9wdHsndCd9OworCisgICAgICBvcGVuIElOLCAiJG00IHwiIG9yIGRpZTsKKyAgICAgIHdoaWxlICg8SU4+KSB7CisgICAgICAgIG5leHQgdW5sZXNzIC8oWzAtOSstXVswLTkgXHQrLV0qKVwoJS87CisgICAgICAgIG15ICRwYXQ9JDE7CisgICAgICAgICRwYXQgPSBldmFsKCRwYXQpOworICAgICAgICBuZXh0IGlmICgkcGF0ICE9IDApOworICAgICAgICBwcmludCAiJGhlYWRlciRfIjsKKyAgICAgICAgJGhlYWRlcj0nJzsKKyAgICAgIH0KKyAgICAgIGNsb3NlIElOIG9yIGRpZTsKKyAgICB9CisgIH0KK30KKwordW5saW5rKCR0ZW1wZmlsZSk7CitwcmludCAidG90YWwgJGZpbGVjb3VudCBwcm9jZXNzZWRcbiI7CitleGl0IDA7CisKKworIyBMb2NhbCB2YXJpYWJsZXM6CisjIHBlcmwtaW5kZW50LWxldmVsOiAyCisjIEVuZDoKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3VkaXYuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODYvdWRpdi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNlZTA4OAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3VkaXYuYXNtCkBAIC0wLDAgKzEsNTIgQEAKK2RubCAgeDg2IG1wbl91ZGl2X3Fybm5kIC0tIDIgYnkgMSBsaW1iIGRpdmlzaW9uCisKK2RubCAgQ29weXJpZ2h0IDE5OTksIDIwMDAsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDIG1wX2xpbWJfdCBtcG5fdWRpdl9xcm5uZCAobXBfbGltYl90ICpyZW1wdHIsIG1wX2xpbWJfdCBoaWdoLCBtcF9saW1iX3QgbG93LAorQyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wX2xpbWJfdCBkaXZpc29yKTsKKworZGVmZnJhbWUoUEFSQU1fRElWSVNPUiwgMTYpCitkZWZmcmFtZShQQVJBTV9MT1csICAgICAxMikKK2RlZmZyYW1lKFBBUkFNX0hJR0gsICAgIDgpCitkZWZmcmFtZShQQVJBTV9SRU1QVFIsICA0KQorCisJVEVYVAorCUFMSUdOKDgpCitQUk9MT0dVRShtcG5fdWRpdl9xcm5uZCkKK2RlZmxpdChgRlJBTUUnLDApCisJbW92bAlQQVJBTV9MT1csICVlYXgKKwltb3ZsCVBBUkFNX0hJR0gsICVlZHgKKwlkaXZsCVBBUkFNX0RJVklTT1IKKwltb3ZsCVBBUkFNX1JFTVBUUiwgJWVjeAorCW1vdmwJJWVkeCwgKCVlY3gpCisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni91bXVsLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3VtdWwuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZmU0MzQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni91bXVsLmFzbQpAQCAtMCwwICsxLDUxIEBACitkbmwgIG1wbl91bXVsX3BwbW0gLS0gMXgxLT4yIGxpbWIgbXVsdGlwbGljYXRpb24KKworZG5sICBDb3B5cmlnaHQgMTk5OSwgMjAwMCwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MgbXBfbGltYl90IG1wbl91bXVsX3BwbW0gKG1wX2xpbWJfdCAqbG93cHRyLCBtcF9saW1iX3QgbTEsIG1wX2xpbWJfdCBtMik7CitDCisKK2RlZmZyYW1lKFBBUkFNX00yLCAgICAxMikKK2RlZmZyYW1lKFBBUkFNX00xLCAgICAgOCkKK2RlZmZyYW1lKFBBUkFNX0xPV1BUUiwgNCkKKworCVRFWFQKKwlBTElHTig4KQorUFJPTE9HVUUobXBuX3VtdWxfcHBtbSkKK2RlZmxpdChgRlJBTUUnLDApCisJbW92bAlQQVJBTV9MT1dQVFIsICVlY3gKKwltb3ZsCVBBUkFNX00xLCAlZWF4CisJbXVsbAlQQVJBTV9NMgorCW1vdmwJJWVheCwgKCVlY3gpCisJbW92bAklZWR4LCAlZWF4CisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni94ODYtZGVmcy5tNCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3g4Ni1kZWZzLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMzA5YjIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni94ODYtZGVmcy5tNApAQCAtMCwwICsxLDEwMjQgQEAKK2RpdmVydCgtMSkKKworZG5sICBtNCBtYWNyb3MgZm9yIHg4NiBhc3NlbWJsZXIuCisKK2RubCAgQ29weXJpZ2h0IDE5OTktMjAwMywgMjAwNywgMjAxMCwgMjAxMiwgMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKK2RubCAgTm90ZXM6CitkbmwKK2RubCAgbTQgaXNuJ3QgcGVyZmVjdCBmb3IgcHJvY2Vzc2luZyBCU0Qgc3R5bGUgeDg2IGFzc2VtYmxlciBjb2RlLCB0aGUgbWFpbgorZG5sICBwcm9ibGVtcyBhcmUsCitkbmwKK2RubCAgMS4gRG9pbmcgZGVmaW5lKGZvbywxMjMpIGFuZCB0aGVuIHVzaW5nIGZvbyBpbiBhbiBhZGRyZXNzaW5nIG1vZGUgbGlrZQorZG5sICAgICBmb28oJWVieCkgZXhwYW5kcyBhcyBhIG1hY3JvIHJhdGhlciB0aGFuIGEgY29uc3RhbnQuICBUaGlzIGlzIHdvcmtlZAorZG5sICAgICBhcm91bmQgYnkgdXNpbmcgZGVmbGl0KCkgZnJvbSBhc20tZGVmcy5tNCwgaW5zdGVhZCBvZiBkZWZpbmUoKS4KK2RubAorZG5sICAyLiBJbW1lZGlhdGVzIGluIG1hY3JvIGRlZmluaXRpb25zIG5lZWQgYSBzcGFjZSBvciBgJyB0byBzdG9wIHRoZSAkCitkbmwgICAgIGxvb2tpbmcgbGlrZSBhIG1hY3JvIHBhcmFtZXRlci4gIEZvciBleGFtcGxlLAorZG5sCitkbmwJICAgICAgICBkZWZpbmUoZm9vLCBgbW92ICQgMTIzLCAlZWF4JykKK2RubAorZG5sICAgICBUaGlzIGlzIG9ubHkgYSBwcm9ibGVtIGluIG1hY3JvIGRlZmluaXRpb25zLCBub3QgaW4gb3JkaW5hcnkgdGV4dCwKK2RubCAgICAgYW5kIG5vdCBpbiBtYWNybyBwYXJhbWV0ZXJzIGxpa2UgdGV4dCBwYXNzZWQgdG8gZm9ybG9vcCgpIG9yIGlmZGVmKCkuCisKKworZGVmbGl0KEdNUF9MSU1CX0JZVEVTLCA0KQorCisKK2RubCAgTGlidG9vbCBnaXZlcyAtRFBJQyAtRERMTF9FWFBPUlQgdG8gaW5kaWNhdGUgYSBjeWd3aW4gb3IgbWluZ3cgRExMLiAgV2UKK2RubCAgdW5kZWZpbmUgUElDIHNpbmNlIHdlIGRvbid0IG5lZWQgdG8gYmUgcG9zaXRpb24gaW5kZXBlbmRlbnQgaW4gdGhpcworZG5sICBjYXNlIGFuZCBkZWZpbml0ZWx5IGRvbid0IHdhbnQgdGhlIEVMRiBzdHlsZSBfR0xPQkFMX09GRlNFVF9UQUJMRV8gZXRjLgorCitpZmRlZihgRExMX0VYUE9SVCcsYHVuZGVmaW5lKGBQSUMnKScpCisKKworZG5sICBVc2FnZTogQ1BVVkVDX0ZVTkNTX0xJU1QKK2RubAorZG5sICBBIGxpc3Qgb2YgdGhlIGZ1bmN0aW9ucyBmcm9tIGdtcC1pbXBsLmggeDg2IHN0cnVjdCBjcHV2ZWNfdCwgaW4gdGhlCitkbmwgIG9yZGVyIHRoZXkgYXBwZWFyIGluIHRoYXQgc3RydWN0dXJlLgorCitkZWZpbmUoQ1BVVkVDX0ZVTkNTX0xJU1QsCitgYGFkZF9uJywKK2BhZGRsc2gxX24nLAorYGFkZGxzaDJfbicsCitgYWRkbXVsXzEnLAorYGFkZG11bF8yJywKK2BiZGl2X2RibTFjJywKK2BjbmRfYWRkX24nLAorYGNuZF9zdWJfbicsCitgY29tJywKK2Bjb3B5ZCcsCitgY29weWknLAorYGRpdmV4YWN0XzEnLAorYGRpdnJlbV8xJywKK2BnY2RfMTEnLAorYGxzaGlmdCcsCitgbHNoaWZ0YycsCitgbW9kXzEnLAorYG1vZF8xXzFwJywKK2Btb2RfMV8xcF9jcHMnLAorYG1vZF8xc18ycCcsCitgbW9kXzFzXzJwX2NwcycsCitgbW9kXzFzXzRwJywKK2Btb2RfMXNfNHBfY3BzJywKK2Btb2RfMzRsc3ViMScsCitgbW9kZXhhY3RfMWNfb2RkJywKK2BtdWxfMScsCitgbXVsX2Jhc2VjYXNlJywKK2BtdWxsb19iYXNlY2FzZScsCitgcHJlaW52X2RpdnJlbV8xJywKK2BwcmVpbnZfbW9kXzEnLAorYHJlZGNfMScsCitgcmVkY18yJywKK2Byc2hpZnQnLAorYHNxcl9iYXNlY2FzZScsCitgc3ViX24nLAorYHN1YmxzaDFfbicsCitgc3VibXVsXzEnJykKKworCitkbmwgIENhbGxlZDogUFJPTE9HVUVfY3B1KEdTWU1fUFJFRklYYCdmb28pCitkbmwKK2RubCAgSW4gdGhlIHg4NiBjb2RlIHdlIHVzZSBleHBsaWNpdCBURVhUIGFuZCBBTElHTigpIGNhbGxzIGluIHRoZSBjb2RlLAorZG5sICBzaW5jZSBkaWZmZXJlbnQgYWxpZ25tZW50cyBhcmUgd2FudGVkIGluIHZhcmlvdXMgY2lyY3Vtc3RhbmNlcy4gIFNvIGZvcgorZG5sICBpbnN0YW5jZSwKK2RubAorZG5sICAgICAgICAgICAgICAgICAgVEVYVAorZG5sICAgICAgICAgICAgICAgICAgQUxJR04oMTYpCitkbmwgICAgICAgICAgUFJPTE9HVUUobXBuX2FkZF9uKQorZG5sICAgICAgICAgIC4uLgorZG5sICAgICAgICAgIEVQSUxPR1VFKCkKKworZGVmaW5lKGBQUk9MT0dVRV9jcHUnLAorbTRfYXNzZXJ0X251bWFyZ3MoMSkKK200X2Fzc2VydF9kZWZpbmVkKGBXQU5UX1BST0ZJTElORycpCisJYEdMT0JMCSQxCisJVFlQRSgkMSxgZnVuY3Rpb24nKQorCUNPRkZfVFlQRSgkMSkKKyQxOgoraWZlbHNlKFdBTlRfUFJPRklMSU5HLGBwcm9mJywgICAgICBgCWNhbGxfbWNvdW50JykKK2lmZWxzZShXQU5UX1BST0ZJTElORyxgZ3Byb2YnLCAgICAgYAljYWxsX21jb3VudCcpCitpZmVsc2UoV0FOVF9QUk9GSUxJTkcsYGluc3RydW1lbnQnLGAJY2FsbF9pbnN0cnVtZW50KGVudGVyKScpCisnKQorCisKK2RubCAgVXNhZ2U6IENPRkZfVFlQRShHU1lNX1BSRUZJWGAnZm9vKQorZG5sCitkbmwgIEVtaXQgQ09GRiBzdHlsZSAiLmRlZiAuLi4gLmVuZGVmIiB0eXBlIGluZm9ybWF0aW9uIGZvciBhIGZ1bmN0aW9uLCB3aGVuCitkbmwgIHN1cHBvcnRlZC4gIFRoZSBhcmd1bWVudCBzaG91bGQgaW5jbHVkZSBhbnkgR1NZTV9QUkVGSVguCitkbmwKK2RubCAgU2VlIGF1dG9jb25mIG1hY3JvIEdNUF9BU01fQ09GRl9UWVBFIGZvciBIQVZFX0NPRkZfVFlQRS4KKworZGVmaW5lKENPRkZfVFlQRSwKK200X2Fzc2VydF9udW1hcmdzKDEpCittNF9hc3NlcnRfZGVmaW5lZChgSEFWRV9DT0ZGX1RZUEUnKQorYGlmZWxzZShIQVZFX0NPRkZfVFlQRSx5ZXMsCisJYC5kZWYJJDEKKwkuc2NsCTIKKwkudHlwZQkzMgorCS5lbmRlZicpJykKKworCitkbmwgIFVzYWdlOiBjYWxsX21jb3VudAorZG5sCitkbmwgIEZvciBgZ3Byb2YnIHN0eWxlIHByb2ZpbGluZywgJWVicCBpcyBzZXR1cCBhcyBhIGZyYW1lIHBvaW50ZXIuICBOb25lIG9mCitkbmwgIHRoZSBhc3NlbWJsZXIgcm91dGluZXMgdXNlICVlYnAgdGhpcyB3YXksIHNvIGl0J3MgZG9uZSBvbmx5IGZvciB0aGUKK2RubCAgYmVuZWZpdCBvZiBtY291bnQuICBnbGliYyBzeXNkZXBzL2kzODYvaTM4Ni1tY291bnQuUyBzaG93cyBob3cgbWNvdW50CitkbmwgIGdldHMgdGhlIGN1cnJlbnQgZnVuY3Rpb24gZnJvbSAoJWVzcCkgYW5kIHRoZSBwYXJlbnQgZnJvbSA0KCVlYnApLgorZG5sCitkbmwgIEZvciBgcHJvZicgc3R5bGUgcHJvZmlsaW5nIGdjYyBnZW5lcmF0ZXMgbWNvdW50IGNhbGxzIHdpdGhvdXQgc2V0dGluZworZG5sICB1cCAlZWJwLCBhbmQgdGhlIHNhbWUgaXMgZG9uZSBoZXJlLgorCitkZWZpbmUoYGNhbGxfbWNvdW50JywKK200X2Fzc2VydF9udW1hcmdzKC0xKQorbTRfYXNzZXJ0X2RlZmluZWQoYFdBTlRfUFJPRklMSU5HJykKK200X2Fzc2VydF9kZWZpbmVkKGBNQ09VTlRfUElDX1JFRycpCittNF9hc3NlcnRfZGVmaW5lZChgTUNPVU5UX05PTlBJQ19SRUcnKQorbTRfYXNzZXJ0X2RlZmluZWQoYE1DT1VOVF9QSUNfQ0FMTCcpCittNF9hc3NlcnRfZGVmaW5lZChgTUNPVU5UX05PTlBJQ19DQUxMJykKK2BpZmVsc2UoaWZkZWYoYFBJQycsYE1DT1VOVF9QSUNfUkVHJyxgTUNPVU5UX05PTlBJQ19SRUcnKSwsLAorYAlEQVRBCisJQUxJR04oNCkKK0wobWNvdW50X2RhdGFfYCdtY291bnRfY291bnRlcik6CisJVzMyCTAKKwlURVhUCisnKWRubAoraWZlbHNlKFdBTlRfUFJPRklMSU5HLGBncHJvZicsCitgCXB1c2hsCSVlYnAKKwltb3ZsCSVlc3AsICVlYnAKKycpZG5sCitpZmRlZihgUElDJywKK2AJcHVzaGwJJWVieAorCWNhbGxfbW92bF9laXBfdG9fZWJ4CitMKG1jb3VudF9oZXJlX2AnbWNvdW50X2NvdW50ZXIpOgorCWFkZGwJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXytbLi1MKG1jb3VudF9oZXJlX2AnbWNvdW50X2NvdW50ZXIpXSwgJWVieAoraWZlbHNlKE1DT1VOVF9QSUNfUkVHLCwsCitgCWxlYWwJTChtY291bnRfZGF0YV9gJ21jb3VudF9jb3VudGVyKUBHT1RPRkYoJWVieCksIE1DT1VOVF9QSUNfUkVHJykKK01DT1VOVF9QSUNfQ0FMTAorCXBvcGwJJWVieAorJyxgZG5sIG5vbi1QSUMKK2lmZWxzZShNQ09VTlRfTk9OUElDX1JFRywsLAorYAltb3ZsCWAkJ0wobWNvdW50X2RhdGFfYCdtY291bnRfY291bnRlciksIE1DT1VOVF9OT05QSUNfUkVHCisnKWRubAorTUNPVU5UX05PTlBJQ19DQUxMCisnKWRubAoraWZlbHNlKFdBTlRfUFJPRklMSU5HLGBncHJvZicsCitgCXBvcGwJJWVicAorJykKK2RlZmluZShgbWNvdW50X2NvdW50ZXInLGluY3IobWNvdW50X2NvdW50ZXIpKQorJykKKworZGVmaW5lKG1jb3VudF9jb3VudGVyLDEpCisKKworZG5sICBVc2FnZTogY2FsbF9pbnN0cnVtZW50KGVudGVyfGV4aXQpCitkbmwKK2RubCAgQ2FsbCBfX2N5Z19wcm9maWxlX2Z1bmNfZW50ZXIgb3IgX19jeWdfcHJvZmlsZV9mdW5jX2V4aXQuCitkbmwKK2RubCAgRm9yIFBJQywgbW9zdCByb3V0aW5lcyBkb24ndCByZXF1aXJlIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyB0aGVtc2VsdmVzCitkbmwgIHNvICVlYnggaXMganVzdCBzZXR1cCBmb3IgdGhlc2UgY2FsbHMuICBJdCdzIGEgYml0IHdhc3RlZnVsIHRvIHJlcGVhdAorZG5sICB0aGUgc2V0dXAgZm9yIHRoZSBleGl0IGNhbGwgaGF2aW5nIGRvbmUgaXQgZWFybGllciBmb3IgdGhlIGVudGVyLCBidXQKK2RubCAgdGhlcmUncyBub3doZXJlIHZlcnkgY29udmVuaWVudCB0byBob2xkICVlYnggdGhyb3VnaCB0aGUgbGVuZ3RoIG9mIGEKK2RubCAgcm91dGluZSwgaW4gZ2VuZXJhbC4KK2RubAorZG5sICBGb3IgUElDLCBiZWNhdXNlIGluc3RydW1lbnRfY3VycmVudF9mdW5jdGlvbiB3aWxsIGJlIHdpdGhpbiB0aGUgY3VycmVudAorZG5sICBvYmplY3QgZmlsZSB3ZSBjYW4gZ2V0IGl0IGp1c3QgYXMgYW4gb2Zmc2V0IGZyb20gJWVpcCwgdGhlcmUncyBubyBuZWVkCitkbmwgIHRvIHVzZSB0aGUgR09ULgorZG5sCitkbmwgIE5vIGF0dGVtcHQgaXMgbWFkZSB0byBtYWludGFpbiB0aGUgc3RhY2sgYWxpZ25tZW50IGdjYyBnZW5lcmF0ZXMgd2l0aAorZG5sICAtbXByZWZlcnJlZC1zdGFjay1ib3VuZGFyeS4gIFRoaXMgd291bGRuJ3QgYmUgaGFyZCwgYnV0IGl0IHNlZW1zIGhpZ2hseQorZG5sICB1bmxpa2VseSB0aGUgaW5zdHJ1bWVudGluZyBmdW5jdGlvbnMgd291bGQgYmUgZG9pbmcgYW55dGhpbmcgdGhhdCdkCitkbmwgIGJlbmVmaXQgZnJvbSBhbGlnbm1lbnQsIGluIHBhcnRpY3VsYXIgdGhleSdyZSB1bmxpa2VseSB0byBiZSB1c2luZworZG5sICBkb3VibGVzIG9yIGxvbmcgZG91YmxlcyBvbiB0aGUgc3RhY2suCitkbmwKK2RubCAgVGhlIEZSQU1FIHNjaGVtZSBpcyB1c2VkIHRvIGNvbnZlbmllbnRseSBhY2NvdW50IGZvciB0aGUgcmVnaXN0ZXIgc2F2ZXMKK2RubCAgYmVmb3JlIGFjY2Vzc2luZyB0aGUgcmV0dXJuIGFkZHJlc3MuICBBbnkgcHJldmlvdXMgdmFsdWUgaXMgc2F2ZWQgYW5kCitkbmwgIHJlc3RvcmVkLCBzaW5jZSBwbGVudHkgb2YgY29kZSBrZWVwcyBhIHZhbHVlIGFjcm9zcyBhICJyZXQiIGluIHRoZQorZG5sICBtaWRkbGUgb2YgYSByb3V0aW5lLgorCitkZWZpbmUoY2FsbF9pbnN0cnVtZW50LAorbTRfYXNzZXJ0X251bWFyZ3MoMSkKK2AJcHVzaGRlZihgRlJBTUUnLDApCitpZmVsc2UoJDEsZXhpdCwKK2AJcHVzaGwJJWVheAlGUkFNRV9wdXNobCgpCUMgcmV0dXJuIHZhbHVlCisnKQoraWZkZWYoYFBJQycsCitgCXB1c2hsCSVlYngJRlJBTUVfcHVzaGwoKQorCWNhbGxfbW92bF9laXBfdG9fZWJ4CitMKGluc3RydW1lbnRfaGVyZV9gJ2luc3RydW1lbnRfY291bnQpOgorCW1vdmwJJWVieCwgJWVjeAorCWFkZGwJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXytbLi1MKGluc3RydW1lbnRfaGVyZV9gJ2luc3RydW1lbnRfY291bnQpXSwgJWVieAorCUMgdXNlIGFkZGwgcmF0aGVyIHRoYW4gbGVhbCB0byBhdm9pZCBvbGQgZ2FzIGJ1Z3MsIHNlZSBtcG4veDg2L1JFQURNRQorCWFkZGwJJGluc3RydW1lbnRfY3VycmVudF9mdW5jdGlvbi1MKGluc3RydW1lbnRfaGVyZV9gJ2luc3RydW1lbnRfY291bnQpLCAlZWN4CisJcHVzaGwJbTRfZW1wdHlfaWZfemVybyhGUkFNRSkoJWVzcCkJRlJBTUVfcHVzaGwoKQlDIHJldHVybiBhZGRyCisJcHVzaGwJJWVjeAkJCQlGUkFNRV9wdXNobCgpCUMgdGhpcyBmdW5jdGlvbgorCWNhbGwJR1NZTV9QUkVGSVhgJ19fY3lnX3Byb2ZpbGVfZnVuY18kMUBQTFQKKwlhZGRsCSRgJzgsICVlc3AKKwlwb3BsCSVlYngKKycsCitgCUMgbm9uLVBJQworCXB1c2hsCW00X2VtcHR5X2lmX3plcm8oRlJBTUUpKCVlc3ApCUZSQU1FX3B1c2hsKCkJQyByZXR1cm4gYWRkcgorCXB1c2hsCSRpbnN0cnVtZW50X2N1cnJlbnRfZnVuY3Rpb24JRlJBTUVfcHVzaGwoKQlDIHRoaXMgZnVuY3Rpb24KKwljYWxsCUdTWU1fUFJFRklYYCdfX2N5Z19wcm9maWxlX2Z1bmNfJDEKKwlhZGRsCSRgJzgsICVlc3AKKycpCitpZmVsc2UoJDEsZXhpdCwKK2AJcG9wbAklZWF4CQkJQyByZXR1cm4gdmFsdWUKKycpCisJcG9wZGVmKGBGUkFNRScpCitkZWZpbmUoYGluc3RydW1lbnRfY291bnQnLGluY3IoaW5zdHJ1bWVudF9jb3VudCkpCisnKQorZGVmaW5lKGluc3RydW1lbnRfY291bnQsMSkKKworCitkbmwgIFVzYWdlOiBpbnN0cnVtZW50X2N1cnJlbnRfZnVuY3Rpb24KK2RubAorZG5sICBSZXR1cm4gdGhlIGN1cnJlbnQgZnVuY3Rpb24gbmFtZSBmb3IgaW5zdHJ1bWVudGluZyBwdXJwb3Nlcy4gIFRoaXMgaXMKK2RubCAgUFJPTE9HVUVfY3VycmVudF9mdW5jdGlvbiwgYnV0IGl0IHN0aWNrcyBhdCB0aGUgZmlyc3Qgc3VjaCBuYW1lIHNlZW4uCitkbmwKK2RubCAgU3RpY2tpbmcgdG8gdGhlIGZpcnN0IG5hbWUgc2VlbiBlbnN1cmVzIHRoYXQgbXVsdGlwbGUtZW50cnlwb2ludAorZG5sICBmdW5jdGlvbnMgbGlrZSBtcG5fYWRkX25jIGFuZCBtcG5fYWRkX24gd2lsbCBtYWtlIGVudGVyIGFuZCBleGl0IGNhbGxzCitkbmwgIGdpdmluZyB0aGUgc2FtZSBmdW5jdGlvbiBhZGRyZXNzLgorCitkZWZpbmUoaW5zdHJ1bWVudF9jdXJyZW50X2Z1bmN0aW9uLAorbTRfYXNzZXJ0X251bWFyZ3MoLTEpCitgaWZkZWYoYGluc3RydW1lbnRfY3VycmVudF9mdW5jdGlvbl9zZWVuJywKK2BpbnN0cnVtZW50X2N1cnJlbnRfZnVuY3Rpb25fc2VlbicsCitgZGVmaW5lKGBpbnN0cnVtZW50X2N1cnJlbnRfZnVuY3Rpb25fc2VlbicsUFJPTE9HVUVfY3VycmVudF9mdW5jdGlvbilkbmwKK1BST0xPR1VFX2N1cnJlbnRfZnVuY3Rpb24nKScpCisKKworZG5sICBVc2FnZTogY2FsbF9tb3ZsX2VpcF90b19lYngKK2RubAorZG5sICBHZW5lcmF0ZSBhIGNhbGwgdG8gTChtb3ZsX2VpcF90b19lYngpLCBhbmQgcmVjb3JkIHRoZSBuZWVkIGZvciB0aGF0CitkbmwgIHJvdXRpbmUuCisKK2RlZmluZShjYWxsX21vdmxfZWlwX3RvX2VieCwKK200X2Fzc2VydF9udW1hcmdzKC0xKQorYGNhbGwJTChtb3ZsX2VpcF90b19lYngpCitkZWZpbmUoYG1vdmxfZWlwX3RvX2VieF9uZWVkZWQnLDEpJykKKworZG5sICBVc2FnZTogZ2VuZXJhdGVfbW92bF9laXBfdG9fZWJ4CitkbmwKK2RubCAgRW1pdCBhIEwobW92bF9laXBfdG9fZWJ4KSByb3V0aW5lLCBpZiBuZWVkZWQgYW5kIG5vdCBhbHJlYWR5IGdlbmVyYXRlZC4KKworZGVmaW5lKGdlbmVyYXRlX21vdmxfZWlwX3RvX2VieCwKK200X2Fzc2VydF9udW1hcmdzKC0xKQorYGlmZWxzZShtb3ZsX2VpcF90b19lYnhfbmVlZGVkLDEsCitgaWZlbHNlKG1vdmxfZWlwX3RvX2VieF9kb25lLDEsLAorYEwobW92bF9laXBfdG9fZWJ4KToKKwltb3ZsCSglZXNwKSwgJWVieAorCXJldF9pbnRlcm5hbAorZGVmaW5lKGBtb3ZsX2VpcF90b19lYnhfZG9uZScsMSkKKycpJyknKQorCisKK2RubCAgVXNhZ2U6IHJldAorZG5sCitkbmwgIEdlbmVyYXRlIGEgInJldCIsIGJ1dCBpZiBkb2luZyBpbnN0cnVtZW50ZWQgcHJvZmlsaW5nIHRoZW4gY2FsbAorZG5sICBfX2N5Z19wcm9maWxlX2Z1bmNfZXhpdCBmaXJzdC4KKworZGVmaW5lKHJldCwKK200X2Fzc2VydF9udW1hcmdzKC0xKQorbTRfYXNzZXJ0X2RlZmluZWQoYFdBTlRfUFJPRklMSU5HJykKK2BpZmVsc2UoV0FOVF9QUk9GSUxJTkcsaW5zdHJ1bWVudCwKK2ByZXRfaW5zdHJ1bWVudCcsCitgcmV0X2ludGVybmFsJykKK2dlbmVyYXRlX21vdmxfZWlwX3RvX2VieAorJykKKworCitkbmwgIFVzYWdlOiByZXRfaW50ZXJuYWwKK2RubAorZG5sICBBIHBsYWluICJyZXQiLCB3aXRob3V0IGFueSBfX2N5Z19wcm9maWxlX2Z1bmNfZXhpdCBjYWxsLiAgVGhpcyBjYW4gYmUKK2RubCAgdXNlZCBmb3IgYSByZXR1cm4gd2hpY2ggaXMgaW50ZXJuYWwgdG8gc29tZSBmdW5jdGlvbiwgc3VjaCBhcyB3aGVuCitkbmwgIGdldHRpbmcgJWVpcCBmb3IgUElDLgorCitkZWZpbmUocmV0X2ludGVybmFsLAorbTRfYXNzZXJ0X251bWFyZ3MoLTEpCitgYHJldCcnKQorCisKK2RubCAgVXNhZ2U6IHJldF9pbnN0cnVtZW50CitkbmwKK2RubCAgR2VuZXJhdGUgY2FsbCB0byBfX2N5Z19wcm9maWxlX2Z1bmNfZXhpdCBhbmQgdGhlbiBhIHJldC4gIElmIGEgcmV0IGhhcworZG5sICBhbHJlYWR5IGJlZW4gc2VlbiBmcm9tIHRoaXMgZnVuY3Rpb24gdGhlbiBqdW1wIHRvIHRoYXQgY2h1bmsgb2YgY29kZSwKK2RubCAgcmF0aGVyIHRoYW4gZW1pdHRpbmcgaXQgYWdhaW4uCisKK2RlZmluZShyZXRfaW5zdHJ1bWVudCwKK200X2Fzc2VydF9udW1hcmdzKC0xKQorYGlmZWxzZShtNF91bnF1b3RlKHJldF9pbnN0cnVtZW50X3NlZW5fYCdpbnN0cnVtZW50X2N1cnJlbnRfZnVuY3Rpb24pLDEsCitgam1wCUwoaW5zdHJ1bWVudF9leGl0X2AnaW5zdHJ1bWVudF9jdXJyZW50X2Z1bmN0aW9uKScsCitgZGVmaW5lKHJldF9pbnN0cnVtZW50X3NlZW5fYCdpbnN0cnVtZW50X2N1cnJlbnRfZnVuY3Rpb24sMSkKK0woaW5zdHJ1bWVudF9leGl0X2AnaW5zdHJ1bWVudF9jdXJyZW50X2Z1bmN0aW9uKToKK2NhbGxfaW5zdHJ1bWVudChleGl0KQorCXJldF9pbnRlcm5hbCcpJykKKworCitkbmwgIFVzYWdlOiBfR0xPQkFMX09GRlNFVF9UQUJMRV8KK2RubAorZG5sICBFeHBhbmQgdG8gX0dMT0JBTF9PRkZTRVRfVEFCTEVfIHBsdXMgYW55IG5lY2Vzc2FyeSB1bmRlcnNjb3JlIHByZWZpeC4KK2RubCAgVGhpcyBsZXRzIHVzIHdyaXRlIHBsYWluIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyBpbiBTVlI0IHN0eWxlLCBidXQgc3RpbGwKK2RubCAgd29yayB3aXRoIHN5c3RlbXMgcmVxdWlyaW5nIGFuIGV4dHJhIHVuZGVyc2NvcmUgc3VjaCBhcyBPcGVuQlNELgorZG5sCitkbmwgIGRlZmxpdCBpcyB1c2VkIHNvICJsZWFsIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyglZWF4KSwgJWVieCIgd2lsbCBjb21lCitkbmwgIG91dCByaWdodCwgdGhvdWdoIHRoYXQgZm9ybSBkb2Vzbid0IHdvcmsgcHJvcGVybHkgaW4gZ2FzIChzZWUKK2RubCAgbXBuL3g4Ni9SRUFETUUpLgorCitkZWZsaXQoX0dMT0JBTF9PRkZTRVRfVEFCTEVfLAorbTRfYXNzZXJ0X2RlZmluZWQoYEdPVF9HU1lNX1BSRUZJWCcpCitgR09UX0dTWU1fUFJFRklYYF9HTE9CQUxfT0ZGU0VUX1RBQkxFXycnKQorCisKK2RubCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCAgVmFyaW91cyB4ODYgbWFjcm9zLgorZG5sCisKKworZG5sICBVc2FnZTogQUxJR05fT0ZGU0VUKGJ5dGVzLG9mZnNldCkKK2RubAorZG5sICBBbGlnbiB0byBgb2Zmc2V0JyBhd2F5IGZyb20gYSBtdWx0aXBsZSBvZiBgYnl0ZXMnLgorZG5sCitkbmwgIFRoaXMgaXMgdXNlZnVsIGZvciB0ZXN0aW5nLCBmb3IgZXhhbXBsZSBhbGlnbiB0byBzb21ldGhpbmcgdmVyeSBzdHJpY3QKK2RubCAgYW5kIHNlZSB3aGF0IGVmZmVjdCBvZmZzZXRzIGZyb20gaXQgaGF2ZSwgIkFMSUdOX09GRlNFVCgyNTYsMzIpIi4KK2RubAorZG5sICBHZW5lcmFsbHkgeW91IHdvdWxkbid0IGV4ZWN1dGUgYWNyb3NzIHRoZSBwYWRkaW5nLCBidXQgaXQncyBkb25lIHdpdGgKK2RubCAgbm9wJ3Mgc28gaXQnbGwgd29yay4KKworZGVmaW5lKEFMSUdOX09GRlNFVCwKK200X2Fzc2VydF9udW1hcmdzKDIpCitgQUxJR04oJDEpCitmb3Jsb29wKGBpJywxLCQyLGAJbm9wCisnKScpCisKKworZG5sICBVc2FnZTogZGVmZnJhbWUobmFtZSxvZmZzZXQpCitkbmwKK2RubCAgTWFrZSBhIGRlZmluaXRpb24gbGlrZSB0aGUgZm9sbG93aW5nIHdpdGggd2hpY2ggdG8gYWNjZXNzIGEgcGFyYW1ldGVyCitkbmwgIG9yIHZhcmlhYmxlIG9uIHRoZSBzdGFjay4KK2RubAorZG5sICAgICAgICAgZGVmaW5lKG5hbWUsYEZSQU1FK29mZnNldCglZXNwKScpCitkbmwKK2RubCAgQWN0dWFsbHkgbTRfZW1wdHlfaWZfemVybyhGUkFNRStvZmZzZXQpIGlzIHVzZWQsIHdoaWNoIHdpbGwgc2F2ZSBvbmUKK2RubCAgYnl0ZSBpZiBGUkFNRStvZmZzZXQgaXMgemVybywgYnkgcHV0dGluZyAoJWVzcCkgcmF0aGVyIHRoYW4gMCglZXNwKS4KK2RubCAgVXNlIGRlZmluZShgZGVmZnJhbWVfZW1wdHlfaWZfemVyb19kaXNhYmxlZCcsMSkgaWYgZm9yIHNvbWUgcmVhc29uIHRoZQorZG5sICB6ZXJvIG9mZnNldCBpcyB3YW50ZWQuCitkbmwKK2RubCAgVGhlIG5ldyBtYWNybyBhbHNvIGdldHMgYSBjaGVjayB0aGF0IHdoZW4gaXQncyB1c2VkIEZSQU1FIGlzIGFjdHVhbGx5CitkbmwgIGRlZmluZWQsIGFuZCB0aGF0IHRoZSBmaW5hbCAlZXNwIG9mZnNldCBpc24ndCBuZWdhdGl2ZSwgd2hpY2ggd291bGQKK2RubCAgbWVhbiBhbiBhdHRlbXB0IHRvIGFjY2VzcyBzb21ldGhpbmcgYmVsb3cgdGhlIGN1cnJlbnQgJWVzcC4KK2RubAorZG5sICBkZWZsaXQoKSBpcyB1c2VkIHJhdGhlciB0aGFuIGEgcGxhaW4gZGVmaW5lKCksIHNvIHRoZSBuZXcgbWFjcm8gd29uJ3QKK2RubCAgZGVsZXRlIGFueSBmb2xsb3dpbmcgcGFyZW50aGVzaXplZCBleHByZXNzaW9uLiAgbmFtZSglZWRpKSB3aWxsIGNvbWUKK2RubCAgb3V0IHNheSBhcyAxNiglZXNwKSglZWRpKS4gIFRoaXMgaXNuJ3QgdmFsaWQgYXNzZW1ibGVyIGFuZCBzaG91bGQKK2RubCAgcHJvdm9rZSBhbiBlcnJvciwgd2hpY2ggaXMgYmV0dGVyIHRoYW4gc2lsZW50bHkgZ2l2aW5nIGp1c3QgMTYoJWVzcCkuCitkbmwKK2RubCAgU2VlIFJFQURNRSBmb3IgbW9yZSBvbiB0aGUgc3VnZ2VzdGVkIHdheSB0byBhY2Nlc3MgdGhlIHN0YWNrIGZyYW1lLgorCitkZWZpbmUoZGVmZnJhbWUsCittNF9hc3NlcnRfbnVtYXJncygyKQorYGRlZmxpdChgJDEnLAorbTRfYXNzZXJ0X2RlZmluZWQoYEZSQU1FJykKK2BkZWZmcmFtZV9jaGVja19ub3RiZWxvdyhgJDEnLCQyLEZSQU1FKWRubAorZGVmZnJhbWVfZW1wdHlfaWZfemVybyhGUkFNRSsoJDIpKSglZXNwKScpJykKKworZG5sICBDYWxsZWQ6IGRlZmZyYW1lX2VtcHR5X2lmX3plcm8oZXhwcmVzc2lvbikKK2RlZmluZShkZWZmcmFtZV9lbXB0eV9pZl96ZXJvLAorbTRfYXNzZXJ0X251bWFyZ3MoMSkKK2BpZmVsc2UoZGVmZnJhbWVfZW1wdHlfaWZfemVyb19kaXNhYmxlZCwxLAorYGV2YWwoJDEpJywKK2BtNF9lbXB0eV9pZl96ZXJvKCQxKScpJykKKworZG5sICBDYWxsZWQ6IGRlZmZyYW1lX2NoZWNrX25vdGJlbG93KGBuYW1lJyxvZmZzZXQsRlJBTUUpCitkZWZpbmUoZGVmZnJhbWVfY2hlY2tfbm90YmVsb3csCittNF9hc3NlcnRfbnVtYXJncygzKQorYGlmZWxzZShldmFsKCgkMykrKCQyKTwwKSwxLAorYG00X2Vycm9yKGAkMSBhdCBmcmFtZSBvZmZzZXQgJDIgdXNlZCB3aGVuIEZSQU1FIGlzIG9ubHkgJDMgYnl0ZXMKKycpJyknKQorCisKK2RubCAgVXNhZ2U6IEZSQU1FX3B1c2hsKCkKK2RubCAgICAgICAgIEZSQU1FX3BvcGwoKQorZG5sICAgICAgICAgRlJBTUVfYWRkbF9lc3AobikKK2RubCAgICAgICAgIEZSQU1FX3N1YmxfZXNwKG4pCitkbmwKK2RubCAgQWRqdXN0IEZSQU1FIGFwcHJvcHJpYXRlbHkgZm9yIGEgcHVzaGwgb3IgcG9wbCwgb3IgZm9yIGFuIGFkZGwgb3Igc3VibAorZG5sICAlZXNwIG9mIG4gYnl0ZXMuCitkbmwKK2RubCAgVXNpbmcgdGhlc2UgbWFjcm9zIGlzIGNvbXBsZXRlbHkgb3B0aW9uYWwuICBTb21ldGltZXMgaXQgbWFrZXMgbW9yZQorZG5sICBzZW5zZSB0byBwdXQgZXhwbGljaXQgZGVmbGl0KGBGUkFNRScsTikgZm9ybXMsIGVzcGVjaWFsbHkgd2hlbiB0aGVyZSdzCitkbmwgIGp1bXBzIGFuZCBkaWZmZXJlbnQgc2VxdWVuY2VzIG9mIEZSQU1FIHZhbHVlcyBuZWVkIHRvIGJlIHVzZWQgaW4KK2RubCAgZGlmZmVyZW50IHBsYWNlcy4KKworZGVmaW5lKEZSQU1FX3B1c2hsLAorbTRfYXNzZXJ0X251bWFyZ3MoMCkKK200X2Fzc2VydF9kZWZpbmVkKGBGUkFNRScpCitgZGVmbGl0KGBGUkFNRScsZXZhbChGUkFNRSs0KSknKQorCitkZWZpbmUoRlJBTUVfcG9wbCwKK200X2Fzc2VydF9udW1hcmdzKDApCittNF9hc3NlcnRfZGVmaW5lZChgRlJBTUUnKQorYGRlZmxpdChgRlJBTUUnLGV2YWwoRlJBTUUtNCkpJykKKworZGVmaW5lKEZSQU1FX2FkZGxfZXNwLAorbTRfYXNzZXJ0X251bWFyZ3MoMSkKK200X2Fzc2VydF9kZWZpbmVkKGBGUkFNRScpCitgZGVmbGl0KGBGUkFNRScsZXZhbChGUkFNRS0oJDEpKSknKQorCitkZWZpbmUoRlJBTUVfc3VibF9lc3AsCittNF9hc3NlcnRfbnVtYXJncygxKQorbTRfYXNzZXJ0X2RlZmluZWQoYEZSQU1FJykKK2BkZWZsaXQoYEZSQU1FJyxldmFsKEZSQU1FKygkMSkpKScpCisKKworZG5sICBVc2FnZTogZGVmZnJhbWVfcHVzaGwobmFtZSkKK2RubAorZG5sICBEbyBhIGNvbWJpbmF0aW9uIEZSQU1FX3B1c2hsKCkgYW5kIGEgZGVmZnJhbWUoKSB0byBuYW1lIHRoZSBzdGFjaworZG5sICBsb2NhdGlvbiBqdXN0IHB1c2hlZC4gIFRoaXMgc2hvdWxkIGNvbWUgYWZ0ZXIgYSBwdXNobCBpbnN0cnVjdGlvbi4KK2RubCAgUHV0dGluZyBpdCBvbiB0aGUgc2FtZSBsaW5lIHdvcmtzIGFuZCBhdm9pZHMgbGVuZ3RoZW5pbmcgdGhlIGNvZGUuICBGb3IKK2RubCAgZXhhbXBsZSwKK2RubAorZG5sICAgICAgICAgcHVzaGwgICAlZWF4ICAgICBkZWZmcmFtZV9wdXNobChWQVJfQ09VTlRFUikKK2RubAorZG5sICBOb3RpY2UgdGhlIGRlZmZyYW1lKCkgaXMgZG9uZSB3aXRoIGFuIHVucXVvdGVkIC1GUkFNRSB0aHVzIGdpdmluZyBpdHMKK2RubCAgY3VycmVudCB2YWx1ZSB3aXRob3V0IHRyYWNraW5nIGZ1dHVyZSBjaGFuZ2VzLgorCitkZWZpbmUoZGVmZnJhbWVfcHVzaGwsCittNF9hc3NlcnRfbnVtYXJncygxKQorYEZSQU1FX3B1c2hsKClkZWZmcmFtZShgJDEnLC1GUkFNRSknKQorCisKK2RubCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCAgQXNzZW1ibGVyIGluc3RydWN0aW9uIG1hY3Jvcy4KK2RubAorCisKK2RubCAgVXNhZ2U6IGVtbXNfb3JfZmVtbXMKK2RubCAgICAgICAgIGZlbW1zX2F2YWlsYWJsZV9wCitkbmwKK2RubCAgZmVtbXNfYXZhaWxhYmxlX3AgZXhwYW5kcyB0byAxIG9yIDAgYWNjb3JkaW5nIHRvIHdoZXRoZXIgdGhlIEFNRCAzRE5vdworZG5sICBmZW1tcyBpbnN0cnVjdGlvbiBpcyBhdmFpbGFibGUuICBlbW1zX29yX2ZlbW1zIGV4cGFuZHMgdG8gZmVtbXMgaWYKK2RubCAgYXZhaWxhYmxlLCBvciBlbW1zIGlmIG5vdC4KK2RubAorZG5sICBlbW1zX29yX2ZlbW1zIGlzIG1lYW50IGZvciB1c2UgaW4gdGhlIEs2IGRpcmVjdG9yeSB3aGVyZSBwbGFpbiBLNgorZG5sICAod2l0aG91dCBmZW1tcykgYW5kIEs2LTIgYW5kIEs2LTMgKHdpdGggYSBzbGlnaHRseSBmYXN0ZXIgZmVtbXMpIGFyZQorZG5sICBzdXBwb3J0ZWQgdG9nZXRoZXIuCitkbmwKK2RubCAgT24gSzcgZmVtbXMgaXMgbm8gbG9uZ2VyIGZhc3RlciBhbmQgaXMganVzdCBhbiBhbGlhcyBmb3IgZW1tcywgc28gcGxhaW4KK2RubCAgZW1tcyBtYXkgYXMgd2VsbCBiZSB1c2VkLgorCitkZWZpbmUoZmVtbXNfYXZhaWxhYmxlX3AsCittNF9hc3NlcnRfbnVtYXJncygtMSkKK2BtNF9pZmRlZl9hbnlvZl9wKAorCWBIQVZFX0hPU1RfQ1BVX2s2MicsCisJYEhBVkVfSE9TVF9DUFVfazYzJywKKwlgSEFWRV9IT1NUX0NQVV9hdGhsb24nKScpCisKK2RlZmluZShlbW1zX29yX2ZlbW1zLAorbTRfYXNzZXJ0X251bWFyZ3MoLTEpCitgaWZlbHNlKGZlbW1zX2F2YWlsYWJsZV9wLDEsYGZlbW1zJyxgZW1tcycpJykKKworCitkbmwgIFVzYWdlOiBmZW1tcworZG5sCitkbmwgIEdhcyAyLjkuMSB3aGljaCBjb21lcyB3aXRoIEZyZWVCU0QgMy40IGRvZXNuJ3Qgc3VwcG9ydCBmZW1tcywgc28gdGhlCitkbmwgIGZvbGxvd2luZyBpcyBhIHJlcGxhY2VtZW50IHVzaW5nIC5ieXRlLgorCitkZWZpbmUoZmVtbXMsCittNF9hc3NlcnRfbnVtYXJncygtMSkKK2AuYnl0ZQkxNSwxNAlDIEFNRCAzRE5vdyBmZW1tcycpCisKKworZG5sICBVc2FnZTogamFkY2wwKG9wKQorZG5sCitkbmwgIEdlbmVyYXRlIGEgam5jL2luY2wgYXMgYSBzdWJzdGl0dXRlIGZvciBhZGNsICQwLG9wLiAgTm90ZSB0aGlzIGlzbid0IGFuCitkbmwgIGV4YWN0IHJlcGxhY2VtZW50LCBzaW5jZSBpdCBkb2Vzbid0IHNldCB0aGUgZmxhZ3MgbGlrZSBhZGNsIGRvZXMuCitkbmwKK2RubCAgVGhpcyBmaW5kcyBhIHVzZSBpbiBLNiBtcG5fYWRkbXVsXzEsIG1wbl9zdWJtdWxfMSwgbXBuX211bF9iYXNlY2FzZSBhbmQKK2RubCAgbXBuX3Nxcl9iYXNlY2FzZSBiZWNhdXNlIG9uIEs2IGFuIGFkY2wgaXMgc2xvdywgdGhlIGJyYW5jaAorZG5sICBtaXNwcmVkaWN0aW9uIHBlbmFsdHkgaXMgc21hbGwsIGFuZCB0aGUgbXVsdGlwbHkgYWxnb3JpdGhtIHVzZWQgbGVhZHMKK2RubCAgdG8gYSBjYXJyeSBiaXQgb24gYXZlcmFnZSBvbmx5IDEvNCBvZiB0aGUgdGltZS4KK2RubAorZG5sICBqYWRjbDBfZGlzYWJsZWQgY2FuIGJlIHNldCB0byAxIHRvIGluc3RlYWQgZ2VuZXJhdGUgYW4gb3JkaW5hcnkgYWRjbAorZG5sICBmb3IgY29tcGFyaXNvbi4gIEZvciBleGFtcGxlLAorZG5sCitkbmwJCWRlZmluZShgamFkY2wwX2Rpc2FibGVkJywxKQorZG5sCitkbmwgIFdoZW4gdXNpbmcgYSByZWdpc3RlciBvcGVyYW5kLCBlZy4gImphZGNsMCglZWR4KSIsIHRoZSBqbmMvaW5jbCBjb2RlIGlzCitkbmwgIHRoZSBzYW1lIHNpemUgYXMgYW4gYWRjbC4gIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gdXNlIHRoZSBleGFjdCBzYW1lCitkbmwgIGNvbXB1dGVkIGp1bXAgY29kZSB3aGVuIHRlc3RpbmcgdGhlIHJlbGF0aXZlIHNwZWVkIG9mIHRoZSB0d28uCisKK2RlZmluZShqYWRjbDAsCittNF9hc3NlcnRfbnVtYXJncygxKQorYGlmZWxzZShqYWRjbDBfZGlzYWJsZWQsMSwKKwlgYWRjbAkkYCcwLCAkMScsCisJYGpuYwlMKGphZGNsMF9gJ2phZGNsMF9jb3VudGVyKQorCWluY2wJJDEKK0woamFkY2wwX2AnamFkY2wwX2NvdW50ZXIpOgorZGVmaW5lKGBqYWRjbDBfY291bnRlcicsaW5jcihqYWRjbDBfY291bnRlcikpJyknKQorCitkZWZpbmUoamFkY2wwX2NvdW50ZXIsMSkKKworCitkbmwgIFVzYWdlOiB4ODZfbG9va3VwKHRhcmdldCwga2V5LHZhbHVlLCBrZXksdmFsdWUsIC4uLikKK2RubCAgICAgICAgIHg4Nl9sb29rdXBfcCh0YXJnZXQsIGtleSx2YWx1ZSwga2V5LHZhbHVlLCAuLi4pCitkbmwKK2RubCAgTG9vayBmb3IgYHRhcmdldCcgYW1vbmcgdGhlIGBrZXknIHBhcmFtZXRlcnMuCitkbmwKK2RubCAgeDg2X2xvb2t1cCBleHBhbmRzIHRvIHRoZSBjb3JyZXNwb25kaW5nIGB2YWx1ZScsIG9yIGdlbmVyYXRlcyBhbiBlcnJvcgorZG5sICBpZiBgdGFyZ2V0JyBpc24ndCBmb3VuZC4KK2RubAorZG5sICB4ODZfbG9va3VwX3AgZXhwYW5kcyB0byAxIGlmIGB0YXJnZXQnIGlzIGZvdW5kLCBvciAwIGlmIG5vdC4KKworZGVmaW5lKHg4Nl9sb29rdXAsCittNF9hc3NlcnRfbnVtYXJnc19yYW5nZSgxLDk5OSkKK2BpZmVsc2UoZXZhbCgkIzwzKSwxLAorYG00X2Vycm9yKGB1bnJlY29nbmlzZWQgcGFydCBvZiB4ODYgaW5zdHJ1Y3Rpb246ICQxCisnKScsCitgaWZlbHNlKGAkMScsYCQyJywgYCQzJywKK2B4ODZfbG9va3VwKGAkMScsc2hpZnQoc2hpZnQoc2hpZnQoJEApKSkpJyknKScpCisKK2RlZmluZSh4ODZfbG9va3VwX3AsCittNF9hc3NlcnRfbnVtYXJnc19yYW5nZSgxLDk5OSkKK2BpZmVsc2UoZXZhbCgkIzwzKSwxLCBgMCcsCitgaWZlbHNlKGAkMScsYCQyJywgICAgYDEnLAorYHg4Nl9sb29rdXBfcChgJDEnLHNoaWZ0KHNoaWZ0KHNoaWZ0KCRAKSkpKScpJyknKQorCisKK2RubCAgVXNhZ2U6IHg4Nl9vcGNvZGVfcmVnMzIocmVnKQorZG5sICAgICAgICAgeDg2X29wY29kZV9yZWczMl9wKHJlZykKK2RubAorZG5sICB4ODZfb3Bjb2RlX3JlZzMyIGV4cGFuZHMgdG8gdGhlIHN0YW5kYXJkIDMgYml0IGVuY29kaW5nIGZvciB0aGUgZ2l2ZW4KK2RubCAgMzItYml0IHJlZ2lzdGVyLCBlZy4gYCVlYnAnIHR1cm5zIGludG8gNS4KK2RubAorZG5sICB4ODZfb3Bjb2RlX3JlZzMyX3AgZXhwYW5kcyB0byAxIGlmIHJlZyBpcyBhIHZhbGlkIDMyLWJpdCByZWdpc3Rlciwgb3IgMAorZG5sICBpZiBub3QuCisKK2RlZmluZSh4ODZfb3Bjb2RlX3JlZzMyLAorbTRfYXNzZXJ0X251bWFyZ3MoMSkKK2B4ODZfbG9va3VwKGAkMScseDg2X29wY29kZV9yZWczMl9saXN0KScpCisKK2RlZmluZSh4ODZfb3Bjb2RlX3JlZzMyX3AsCittNF9hc3NlcnRfb25lYXJnKCkKK2B4ODZfbG9va3VwX3AoYCQxJyx4ODZfb3Bjb2RlX3JlZzMyX2xpc3QpJykKKworZGVmaW5lKHg4Nl9vcGNvZGVfcmVnMzJfbGlzdCwKK2BgJWVheCcsMCwKK2AlZWN4JywxLAorYCVlZHgnLDIsCitgJWVieCcsMywKK2AlZXNwJyw0LAorYCVlYnAnLDUsCitgJWVzaScsNiwKK2AlZWRpJyw3JykKKworCitkbmwgIFVzYWdlOiB4ODZfb3Bjb2RlX3R0dG4oY29uZCkKK2RubAorZG5sICBFeHBhbmQgdG8gdGhlIDQtYml0ICJ0dHRuIiBmaWVsZCB2YWx1ZSBmb3IgdGhlIGdpdmVuIHg4NiBicmFuY2gKK2RubCAgY29uZGl0aW9uIChsaWtlIGBjJywgYGFlJywgZXRjKS4KKworZGVmaW5lKHg4Nl9vcGNvZGVfdHR0biwKK200X2Fzc2VydF9udW1hcmdzKDEpCitgeDg2X2xvb2t1cChgJDEnLHg4Nl9vcGNvZGVfdHRuX2xpc3QpJykKKworZGVmaW5lKHg4Nl9vcGNvZGVfdHR0bl9saXN0LAorYGBvJywgIDAsCitgbm8nLCAgMSwKK2BiJywgICAyLCBgYycsICAyLCBgbmFlJywyLAorYG5iJywgIDMsIGBuYycsIDMsIGBhZScsIDMsCitgZScsICAgNCwgYHonLCAgNCwKK2BuZScsICA1LCBgbnonLCA1LAorYGJlJywgIDYsIGBuYScsIDYsCitgbmJlJywgNywgYGEnLCAgNywKK2BzJywgICA4LAorYG5zJywgIDksCitgcCcsICAxMCwgYHBlJywgMTAsIGBucG8nLDEwLAorYG5wJywgMTEsIGBucGUnLDExLCBgcG8nLCAxMSwKK2BsJywgIDEyLCBgbmdlJywxMiwKK2BubCcsIDEzLCBgZ2UnLCAxMywKK2BsZScsIDE0LCBgbmcnLCAxNCwKK2BubGUnLDE1LCBgZycsICAxNScpCisKKworZG5sICBVc2FnZTogY21vdkNDKCVzcmNyZWcsJWRzdHJlZykKK2RubAorZG5sICBFbWl0IGEgY21vdiBpbnN0cnVjdGlvbiwgdXNpbmcgYSAuYnl0ZSBzZXF1ZW5jZSwgc2luY2UgdmFyaW91cyBwYXN0CitkbmwgIHZlcnNpb25zIG9mIGdhcyBkb24ndCBrbm93IGNtb3YuICBGb3IgZXhhbXBsZSwKK2RubAorZG5sICAgICAgICAgY21vdnooICAlZWF4LCAlZWJ4KQorZG5sCitkbmwgIFRoZSBzb3VyY2Ugb3BlcmFuZCBjYW4gb25seSBiZSBhIHBsYWluIHJlZ2lzdGVyLiAgKG00IGNvZGUgaW1wbGVtZW50aW5nCitkbmwgIGZ1bGwgbWVtb3J5IGFkZHJlc3NpbmcgbW9kZXMgZXhpc3RzLCBiZWxpZXZlIGl0IG9yIG5vdCwgYnV0IGlzbid0CitkbmwgIGN1cnJlbnRseSBuZWVkZWQgYW5kIGlzbid0IGluY2x1ZGVkLikKK2RubAorZG5sICBBbGwgdGhlIHN0YW5kYXJkIGNvbmRpdGlvbnMgYXJlIGRlZmluZWQuICBBdHRlbXB0aW5nIHRvIHVzZSBvbmUgd2l0aG91dAorZG5sICB0aGUgbWFjcm8gcGFyZW50aGVzZXMsIHN1Y2ggYXMganVzdCAiY21vdmJlICVlYXgsICVlYngiLCB3aWxsIHByb3Zva2UKK2RubCAgYW4gZXJyb3IuICBUaGlzIHByb3RlY3RzIGFnYWluc3Qgd3JpdGluZyBzb21ldGhpbmcgb2xkIGdhcyB3b3VsZG4ndAorZG5sICB1bmRlcnN0YW5kLgorCitkbmwgIENhbGxlZDogZGVmaW5lX2Ntb3ZfbWFueShjb25kLHR0dG4sY29uZCx0dHRuLC4uLikKK2RlZmluZShkZWZpbmVfY21vdl9tYW55LAorYGlmZWxzZShtNF9sZW5ndGgoYCQxJyksMCwsCitgZGVmaW5lX2Ntb3YoYCQxJyxgJDInKWRlZmluZV9jbW92X21hbnkoc2hpZnQoc2hpZnQoJEApKSknKScpCisKK2RubCAgQ2FsbGVkOiBkZWZpbmVfY21vdihjb25kLHR0dG4pCitkbmwgIEVtaXQgYmFzaWNhbGx5IGRlZmluZShjbW92PGNvbmQ+LGBjbW92X2ludGVybmFsKDxjb25kPiw8dHRuPixgJDEnLGAkMicpJykKK2RlZmluZShkZWZpbmVfY21vdiwKK200X2Fzc2VydF9udW1hcmdzKDIpCitgZGVmaW5lKGBjbW92JDEnLAorbTRfaW5zdHJ1Y3Rpb25fd3JhcHBlcigpCittNF9hc3NlcnRfbnVtYXJncygyKQorYGNtb3ZfaW50ZXJuYWwnKG00X2RvdWJsZXF1b3RlKCRgJzApLGBgJDInJyxkbmwKK200X2RvdWJsZXF1b3RlKCRgJzEpLG00X2RvdWJsZXF1b3RlKCRgJzIpKSknKQorCitkZWZpbmVfY21vdl9tYW55KHg4Nl9vcGNvZGVfdHR0bl9saXN0KQorCitkbmwgIENhbGxlZDogY21vdl9pbnRlcm5hbChuYW1lLHR0dG4sc3JjLGRzdCkKK2RlZmluZShjbW92X2ludGVybmFsLAorbTRfYXNzZXJ0X251bWFyZ3MoNCkKK2AuYnl0ZQlkbmwKKzE1LCBkbmwKK2V2YWwoNjQrJDIpLCBkbmwKK2V2YWwoMTkyKzgqeDg2X29wY29kZV9yZWczMihgJDQnKSt4ODZfb3Bjb2RlX3JlZzMyKGAkMycpKSBkbmwKKwlDIGAkMSAkMywgJDQnJykKKworCitkbmwgIFVzYWdlOiB4ODZfb3Bjb2RlX3JlZ21teChyZWcpCitkbmwKK2RubCAgVmFsaWRhdGUgdGhlIGdpdmVuIG1teCByZWdpc3RlciwgYW5kIHJldHVybiBpdHMgbnVtYmVyLCAwIHRvIDcuCisKK2RlZmluZSh4ODZfb3Bjb2RlX3JlZ21teCwKK200X2Fzc2VydF9udW1hcmdzKDEpCitgeDg2X2xvb2t1cChgJDEnLHg4Nl9vcGNvZGVfcmVnbW14X2xpc3QpJykKKworZGVmaW5lKHg4Nl9vcGNvZGVfcmVnbW14X2xpc3QsCitgYCVtbTAnLDAsCitgJW1tMScsMSwKK2AlbW0yJywyLAorYCVtbTMnLDMsCitgJW1tNCcsNCwKK2AlbW01Jyw1LAorYCVtbTYnLDYsCitgJW1tNycsNycpCisKKworZG5sICBVc2FnZTogcHNhZGJ3KCVzcmNyZWcsJWRzdHJlZykKK2RubAorZG5sICBPbGRpc2ggdmVyc2lvbnMgb2YgZ2FzIGRvbid0IGtub3cgcHNhZGJ3LCBpbiBwYXJ0aWN1bGFyIGdhcyAyLjkuMSBvbgorZG5sICBGcmVlQlNEIDMuMyBhbmQgMy40IGRvZXNuJ3QsIHNvIGluc3RlYWQgZW1pdCAuYnl0ZSBzZXF1ZW5jZXMuICBGb3IKK2RubCAgZXhhbXBsZSwKK2RubAorZG5sICAgICAgICAgcHNhZGJ3KCAlbW0xLCAlbW0yKQorZG5sCitkbmwgIE9ubHkgcmVnaXN0ZXItPnJlZ2lzdGVyIGZvcm1zIGFyZSBzdXBwb3J0ZWQgaGVyZSwgd2hpY2ggc3VmZmljZXMgZm9yCitkbmwgIHRoZSBjdXJyZW50IGNvZGUuCisKK2RlZmluZShwc2FkYncsCittNF9pbnN0cnVjdGlvbl93cmFwcGVyKCkKK200X2Fzc2VydF9udW1hcmdzKDIpCitgLmJ5dGUgMHgwZiwweGY2LGRubAorZXZhbCgxOTIreDg2X29wY29kZV9yZWdtbXgoYCQyJykqOCt4ODZfb3Bjb2RlX3JlZ21teChgJDEnKSkgZG5sCisJQyBgcHNhZGJ3ICQxLCAkMicnKQorCisKK2RubCAgVXNhZ2U6IFpkaXNwKGluc3Qsb3Asb3Asb3ApCitkbmwKK2RubCAgR2VuZXJhdGUgZXhwbGljaXQgLmJ5dGUgc2VxdWVuY2VzIGlmIG5lY2Vzc2FyeSB0byBmb3JjZSBhIGJ5dGUtc2l6ZWQKK2RubCAgemVybyBkaXNwbGFjZW1lbnQgb24gYW4gaW5zdHJ1Y3Rpb24uICBGb3IgZXhhbXBsZSwKK2RubAorZG5sICAgICAgICAgWmRpc3AoICBtb3ZsLCAgIDAsKCVlc2kpLCAlZWF4KQorZG5sCitkbmwgIGV4cGFuZHMgdG8KK2RubAorZG5sICAgICAgICAgICAgICAgICAuYnl0ZSAgIDEzOSw3MCwwICBDIG1vdmwgMCglZXNpKSwgJWVheAorZG5sCitkbmwgIElmIHRoZSBkaXNwbGFjZW1lbnQgZ2l2ZW4gaXNuJ3QgMCwgdGhlbiBub3JtYWwgYXNzZW1ibGVyIGNvZGUgaXMKK2RubCAgZ2VuZXJhdGVkLiAgRm9yIGV4YW1wbGUsCitkbmwKK2RubCAgICAgICAgIFpkaXNwKCAgbW92bCwgICA0LCglZXNpKSwgJWVheCkKK2RubAorZG5sICBleHBhbmRzIHRvCitkbmwKK2RubCAgICAgICAgICAgICAgICAgbW92bCAgICA0KCVlc2kpLCAlZWF4CitkbmwKK2RubCAgVGhpcyBtZWFucyBhIHNpbmdsZSBaZGlzcCgpIGZvcm0gY2FuIGJlIHVzZWQgd2l0aCBhbiBleHByZXNzaW9uIGZvciB0aGUKK2RubCAgZGlzcGxhY2VtZW50LCBhbmQgLmJ5dGUgd2lsbCBiZSB1c2VkIG9ubHkgaWYgbmVjZXNzYXJ5LiAgVGhlCitkbmwgIGRpc3BsYWNlbWVudCBhcmd1bWVudCBpcyBldmFsKCllZC4KK2RubAorZG5sICBCZWNhdXNlIHRoZXJlIGFyZW4ndCBtYW55IHBsYWNlcyBhIDAocmVnKSBmb3JtIGlzIHdhbnRlZCwgWmRpc3AgaXMKK2RubCAgaW1wbGVtZW50ZWQgd2l0aCBhIHRhYmxlIG9mIGluc3RydWN0aW9ucyBhbmQgZW5jb2RpbmdzLiAgQSBuZXcgZW50cnkgaXMKK2RubCAgbmVlZGVkIGZvciBhbnkgZGlmZmVyZW50IG9wZXJhdGlvbiBvciByZWdpc3RlcnMuICBUaGUgdGFibGUgaXMgc3BsaXQKK2RubCAgaW50byBzZXBhcmF0ZSBtYWNyb3MgdG8gYXZvaWQgb3ZlcmZsb3dpbmcgQlNEIG00IG1hY3JvIGV4cGFuc2lvbiBzcGFjZS4KKworZGVmaW5lKFpkaXNwLAorbTRfYXNzZXJ0X251bWFyZ3MoNCkKK2BkZWZpbmUoYFpkaXNwX2ZvdW5kJywwKWRubAorWmRpc3BfMSgkQClkbmwKK1pkaXNwXzIoJEApZG5sCitaZGlzcF8zKCRAKWRubAorWmRpc3BfNCgkQClkbmwKK2lmZWxzZShaZGlzcF9mb3VuZCwwLAorYG00X2Vycm9yKGB1bnJlY29nbmlzZWQgaW5zdHJ1Y3Rpb24gaW4gWmRpc3A6ICQxICQyICQzICQ0CisnKScpJykKKworZGVmaW5lKFpkaXNwXzEsYGRubAorWmRpc3BfbWF0Y2goIGFkY2wsIDAsKCVlZHgpLCAlZWF4LCAgICAgICAgYDB4MTMsMHg0MiwweDAwJywgICAgICAgICAgICRAKWAnZG5sCitaZGlzcF9tYXRjaCggYWRjbCwgMCwoJWVkeCksICVlYngsICAgICAgICBgMHgxMywweDVhLDB4MDAnLCAgICAgICAgICAgJEApYCdkbmwKK1pkaXNwX21hdGNoKCBhZGNsLCAwLCglZWR4KSwgJWVzaSwgICAgICAgIGAweDEzLDB4NzIsMHgwMCcsICAgICAgICAgICAkQClgJ2RubAorWmRpc3BfbWF0Y2goIGFkZGwsICVlYngsIDAsKCVlZGkpLCAgICAgICAgYDB4MDEsMHg1ZiwweDAwJywgICAgICAgICAgICRAKWAnZG5sCitaZGlzcF9tYXRjaCggYWRkbCwgJWVjeCwgMCwoJWVkaSksICAgICAgICBgMHgwMSwweDRmLDB4MDAnLCAgICAgICAgICAgJEApYCdkbmwKK1pkaXNwX21hdGNoKCBhZGRsLCAlZXNpLCAwLCglZWRpKSwgICAgICAgIGAweDAxLDB4NzcsMHgwMCcsICAgICAgICAgICAkQClgJ2RubAorWmRpc3BfbWF0Y2goIHNiYmwsIDAsKCVlZHgpLCAlZWF4LCAgICAgICAgYDB4MWIsMHg0MiwweDAwJywgICAgICAgICAgICRAKWAnZG5sCitaZGlzcF9tYXRjaCggc2JibCwgMCwoJWVkeCksICVlc2ksICAgICAgICBgMHgxYiwweDcyLDB4MDAnLCAgICAgICAgICAgJEApYCdkbmwKK1pkaXNwX21hdGNoKCBzdWJsLCAlZWN4LCAwLCglZWRpKSwgICAgICAgIGAweDI5LDB4NGYsMHgwMCcsICAgICAgICAgICAkQClgJ2RubAorWmRpc3BfbWF0Y2goIG1vdnpibCwgMCwoJWVheCwlZWJwKSwgJWVheCwgYDB4MGYsMHhiNiwweDQ0LDB4MjgsMHgwMCcsICRAKWAnZG5sCitaZGlzcF9tYXRjaCggbW92emJsLCAwLCglZWN4LCVlZGkpLCAlZWRpLCBgMHgwZiwweGI2LDB4N2MsMHgzOSwweDAwJywgJEApYCdkbmwKK1pkaXNwX21hdGNoKCBhZGMsIDAsKCVlYngsJWVjeCw0KSwgJWVheCwgIGAweDEzLDB4NDQsMHg4YiwweDAwJywgICAgICAkQClgJ2RubAorWmRpc3BfbWF0Y2goIHNiYiwgMCwoJWVieCwlZWN4LDQpLCAlZWF4LCAgYDB4MWIsMHg0NCwweDhiLDB4MDAnLCAgICAgICRAKWAnZG5sCisnKQorZGVmaW5lKFpkaXNwXzIsYGRubAorWmRpc3BfbWF0Y2goIG1vdmwsICVlYXgsIDAsKCVlZGkpLCAgICAgICAgYDB4ODksMHg0NywweDAwJywgICAgICAgICAgICRAKWAnZG5sCitaZGlzcF9tYXRjaCggbW92bCwgJWVieCwgMCwoJWVkaSksICAgICAgICBgMHg4OSwweDVmLDB4MDAnLCAgICAgICAgICAgJEApYCdkbmwKK1pkaXNwX21hdGNoKCBtb3ZsLCAlZXNpLCAwLCglZWRpKSwgICAgICAgIGAweDg5LDB4NzcsMHgwMCcsICAgICAgICAgICAkQClgJ2RubAorWmRpc3BfbWF0Y2goIG1vdmwsIDAsKCVlYngpLCAlZWF4LCAgICAgICAgYDB4OGIsMHg0MywweDAwJywgICAgICAgICAgICRAKWAnZG5sCitaZGlzcF9tYXRjaCggbW92bCwgMCwoJWVieCksICVlc2ksICAgICAgICBgMHg4YiwweDczLDB4MDAnLCAgICAgICAgICAgJEApYCdkbmwKK1pkaXNwX21hdGNoKCBtb3ZsLCAwLCglZWR4KSwgJWVheCwgICAgICAgIGAweDhiLDB4NDIsMHgwMCcsICAgICAgICAgICAkQClgJ2RubAorWmRpc3BfbWF0Y2goIG1vdmwsIDAsKCVlc2kpLCAlZWF4LCAgICAgICAgYDB4OGIsMHg0NiwweDAwJywgICAgICAgICAgICRAKWAnZG5sCitaZGlzcF9tYXRjaCggbW92bCwgMCwoJWVzaSwlZWN4LDQpLCAlZWF4LCBgMHg4YiwweDQ0LDB4OGUsMHgwMCcsICAgICAgJEApYCdkbmwKK1pkaXNwX21hdGNoKCBtb3YsIDAsKCVlc2ksJWVjeCw0KSwgJWVheCwgIGAweDhiLDB4NDQsMHg4ZSwweDAwJywgICAgICAkQClgJ2RubAorWmRpc3BfbWF0Y2goIG1vdiwgJWVheCwgMCwoJWVkaSwlZWN4LDQpLCAgYDB4ODksMHg0NCwweDhmLDB4MDAnLCAgICAgICRAKWAnZG5sCisnKQorZGVmaW5lKFpkaXNwXzMsYGRubAorWmRpc3BfbWF0Y2goIG1vdnEsIDAsKCVlYXgsJWVjeCw4KSwgJW1tMCwgYDB4MGYsMHg2ZiwweDQ0LDB4YzgsMHgwMCcsICRAKWAnZG5sCitaZGlzcF9tYXRjaCggbW92cSwgMCwoJWVieCwlZWF4LDQpLCAlbW0wLCBgMHgwZiwweDZmLDB4NDQsMHg4MywweDAwJywgJEApYCdkbmwKK1pkaXNwX21hdGNoKCBtb3ZxLCAwLCglZWJ4LCVlYXgsNCksICVtbTIsIGAweDBmLDB4NmYsMHg1NCwweDgzLDB4MDAnLCAkQClgJ2RubAorWmRpc3BfbWF0Y2goIG1vdnEsIDAsKCVlYngsJWVjeCw0KSwgJW1tMCwgYDB4MGYsMHg2ZiwweDQ0LDB4OGIsMHgwMCcsICRAKWAnZG5sCitaZGlzcF9tYXRjaCggbW92cSwgMCwoJWVkeCksICVtbTAsICAgICAgICBgMHgwZiwweDZmLDB4NDIsMHgwMCcsICAgICAgJEApYCdkbmwKK1pkaXNwX21hdGNoKCBtb3ZxLCAwLCglZXNpKSwgJW1tMCwgICAgICAgIGAweDBmLDB4NmYsMHg0NiwweDAwJywgICAgICAkQClgJ2RubAorWmRpc3BfbWF0Y2goIG1vdnEsICVtbTAsIDAsKCVlZGkpLCAgICAgICAgYDB4MGYsMHg3ZiwweDQ3LDB4MDAnLCAgICAgICRAKWAnZG5sCitaZGlzcF9tYXRjaCggbW92cSwgJW1tMiwgMCwoJWVjeCwlZWF4LDQpLCBgMHgwZiwweDdmLDB4NTQsMHg4MSwweDAwJywgJEApYCdkbmwKK1pkaXNwX21hdGNoKCBtb3ZxLCAlbW0yLCAwLCglZWR4LCVlYXgsNCksIGAweDBmLDB4N2YsMHg1NCwweDgyLDB4MDAnLCAkQClgJ2RubAorWmRpc3BfbWF0Y2goIG1vdnEsICVtbTAsIDAsKCVlZHgsJWVjeCw4KSwgYDB4MGYsMHg3ZiwweDQ0LDB4Y2EsMHgwMCcsICRAKWAnZG5sCisnKQorZGVmaW5lKFpkaXNwXzQsYGRubAorWmRpc3BfbWF0Y2goIG1vdmQsIDAsKCVlYXgsJWVjeCw0KSwgJW1tMCwgYDB4MGYsMHg2ZSwweDQ0LDB4ODgsMHgwMCcsICRAKWAnZG5sCitaZGlzcF9tYXRjaCggbW92ZCwgMCwoJWVheCwlZWN4LDgpLCAlbW0xLCBgMHgwZiwweDZlLDB4NGMsMHhjOCwweDAwJywgJEApYCdkbmwKK1pkaXNwX21hdGNoKCBtb3ZkLCAwLCglZWR4LCVlY3gsOCksICVtbTAsIGAweDBmLDB4NmUsMHg0NCwweGNhLDB4MDAnLCAkQClgJ2RubAorWmRpc3BfbWF0Y2goIG1vdmQsICVtbTAsIDAsKCVlYXgsJWVjeCw0KSwgYDB4MGYsMHg3ZSwweDQ0LDB4ODgsMHgwMCcsICRAKWAnZG5sCitaZGlzcF9tYXRjaCggbW92ZCwgJW1tMCwgMCwoJWVjeCwlZWF4LDQpLCBgMHgwZiwweDdlLDB4NDQsMHg4MSwweDAwJywgJEApYCdkbmwKK1pkaXNwX21hdGNoKCBtb3ZkLCAlbW0yLCAwLCglZWN4LCVlYXgsNCksIGAweDBmLDB4N2UsMHg1NCwweDgxLDB4MDAnLCAkQClgJ2RubAorWmRpc3BfbWF0Y2goIG1vdmQsICVtbTAsIDAsKCVlZHgsJWVjeCw0KSwgYDB4MGYsMHg3ZSwweDQ0LDB4OGEsMHgwMCcsICRAKWAnZG5sCisnKQorCitkZWZpbmUoWmRpc3BfbWF0Y2gsCittNF9hc3NlcnRfbnVtYXJncyg5KQorYGlmZWxzZShldmFsKG00X3N0cmluZ2VxdWFsX3AoYCQxJyxgJDYnKQorCSYmIG00X3N0cmluZ2VxdWFsX3AoYCQyJywwKQorCSYmIG00X3N0cmluZ2VxdWFsX3AoYCQzJyxgJDgnKQorCSYmIG00X3N0cmluZ2VxdWFsX3AoYCQ0JyxgJDknKSksMSwKK2BkZWZpbmUoYFpkaXNwX2ZvdW5kJywxKWRubAoraWZlbHNlKGV2YWwoYCQ3JyksMCwKK2AJLmJ5dGUJJDUgIEMgYCQxIDAkMywgJDQnJywKK2AJJDYJJDckOCwgJDknKScsCisKK2BpZmVsc2UoZXZhbChtNF9zdHJpbmdlcXVhbF9wKGAkMScsYCQ2JykKKwkmJiBtNF9zdHJpbmdlcXVhbF9wKGAkMicsYCQ3JykKKwkmJiBtNF9zdHJpbmdlcXVhbF9wKGAkMycsMCkKKwkmJiBtNF9zdHJpbmdlcXVhbF9wKGAkNCcsYCQ5JykpLDEsCitgZGVmaW5lKGBaZGlzcF9mb3VuZCcsMSlkbmwKK2lmZWxzZShldmFsKGAkOCcpLDAsCitgCS5ieXRlCSQ1ICBDIGAkMSAkMiwgMCQ0JycsCitgCSQ2CSQ3LCAkOCQ5JyknKScpJykKKworCitkbmwgIFVzYWdlOiBzaGxkbChjb3VudCxzcmMsZHN0KQorZG5sICAgICAgICAgc2hyZGwoY291bnQsc3JjLGRzdCkKK2RubCAgICAgICAgIHNobGR3KGNvdW50LHNyYyxkc3QpCitkbmwgICAgICAgICBzaHJkdyhjb3VudCxzcmMsZHN0KQorZG5sCitkbmwgIEdlbmVyYXRlIGEgZG91YmxlLXNoaWZ0IGluc3RydWN0aW9uLCBwb3NzaWJseSBvbWl0dGluZyBhICVjbCBjb3VudAorZG5sICBwYXJhbWV0ZXIgaWYgdGhhdCdzIHdoYXQgdGhlIGFzc2VtYmxlciByZXF1aXJlcywgYXMgaW5kaWNhdGVkIGJ5CitkbmwgIFdBTlRfU0hMRExfQ0wgaW4gY29uZmlnLm00LiAgRm9yIGV4YW1wbGUsCitkbmwKK2RubCAgICAgICAgIHNobGRsKCAgJWNsLCAlZWF4LCAlZWJ4KQorZG5sCitkbmwgIHR1cm5zIGludG8gZWl0aGVyCitkbmwKK2RubCAgICAgICAgIHNobGRsICAgJWNsLCAlZWF4LCAlZWJ4CitkbmwgIG9yCitkbmwgICAgICAgICBzaGxkbCAgICVlYXgsICVlYngKK2RubAorZG5sICBJbW1lZGlhdGUgY291bnRzIGFyZSBhbHdheXMgcGFzc2VkIHRocm91Z2ggdW5jaGFuZ2VkLiAgRm9yIGV4YW1wbGUsCitkbmwKK2RubCAgICAgICAgIHNocmRsKCAgJDIsICVlc2ksICVlZGkpCitkbmwgIGJlY29tZXMKK2RubCAgICAgICAgIHNocmRsICAgJDIsICVlc2ksICVlZGkKK2RubAorZG5sCitkbmwgIElmIHlvdSBmb3JnZXQgdG8gdXNlIHRoZSBtYWNybyBmb3JtICJzaGxkbCggLi4uKSIgYW5kIGluc3RlYWQgd3JpdGUKK2RubCAganVzdCBhIHBsYWluICJzaGxkbCAuLi4iLCBhbiBlcnJvciByZXN1bHRzLiAgVGhpcyBlbnN1cmVzIHRoZSBuZWNlc3NhcnkKK2RubCAgdmFyaWFudCB0cmVhdG1lbnQgb2YgJWNsIGlzbid0IGFjY2lkZW50YWxseSBieXBhc3NlZC4KKworZGVmaW5lKGRlZmluZV9zaGRfaW5zdHJ1Y3Rpb24sCittNF9hc3NlcnRfbnVtYXJncygxKQorYGRlZmluZSgkMSwKK200X2luc3RydWN0aW9uX3dyYXBwZXIoKQorbTRfYXNzZXJ0X251bWFyZ3MoMykKK2BzaGRfaW5zdHJ1Y3Rpb24nKG00X2RvdWJsZXF1b3RlKCRgJzApLG00X2RvdWJsZXF1b3RlKCRgJzEpLGRubAorbTRfZG91YmxlcXVvdGUoJGAnMiksbTRfZG91YmxlcXVvdGUoJGAnMykpKScpCisKK2RubCAgRWZmZWN0aXZlbHk6IGRlZmluZShzaGxkbCxgc2hkX2luc3RydWN0aW9uKGAkMCcsYCQxJyxgJDInLGAkMycpJykgZXRjCitkZWZpbmVfc2hkX2luc3RydWN0aW9uKHNobGRsKQorZGVmaW5lX3NoZF9pbnN0cnVjdGlvbihzaHJkbCkKK2RlZmluZV9zaGRfaW5zdHJ1Y3Rpb24oc2hsZHcpCitkZWZpbmVfc2hkX2luc3RydWN0aW9uKHNocmR3KQorCitkbmwgIENhbGxlZDogc2hkX2luc3RydWN0aW9uKG9wLGNvdW50LHNyYyxkc3QpCitkZWZpbmUoc2hkX2luc3RydWN0aW9uLAorbTRfYXNzZXJ0X251bWFyZ3MoNCkKK200X2Fzc2VydF9kZWZpbmVkKGBXQU5UX1NITERMX0NMJykKK2BpZmVsc2UoZXZhbChtNF9zdHJpbmdlcXVhbF9wKGAkMicsYCVjbCcpICYmICFXQU5UX1NITERMX0NMKSwxLAorYGAkMScJYCQzJywgYCQ0JycsCitgYCQxJwlgJDInLCBgJDMnLCBgJDQnJyknKQorCisKK2RubCAgVXNhZ2U6IEFTU0VSVChbY29uZF1bLGluc3RydWN0aW9uc10pCitkbmwKK2RubCAgSWYgV0FOVF9BU1NFUlQgaXMgMSwgb3V0cHV0IHRoZSBnaXZlbiBpbnN0cnVjdGlvbnMgYW5kIGV4cGVjdCB0aGUgZ2l2ZW4KK2RubCAgZmxhZ3MgY29uZGl0aW9uIHRvIHRoZW4gYmUgc2F0aXNmaWVkLiAgRm9yIGV4YW1wbGUsCitkbmwKK2RubCAgICAgICAgIEFTU0VSVChuZSwgYGNtcGwgJWVheCwgJWVieCcpCitkbmwKK2RubCAgVGhlIGluc3RydWN0aW9ucyBjYW4gYmUgb21pdHRlZCB0byBqdXN0IGFzc2VydCBhIGZsYWdzIGNvbmRpdGlvbiB3aXRoCitkbmwgIG5vIGV4dHJhIGNhbGN1bGF0aW9uLiAgRm9yIGV4YW1wbGUsCitkbmwKK2RubCAgICAgICAgIEFTU0VSVChuYykKK2RubAorZG5sICBXaGVuIGBpbnN0cnVjdGlvbnMnIGlzIG5vdCBlbXB0eSwgYSBwdXNoZi9wb3BmIGlzIGFkZGVkIHRvIHByZXNlcnZlIHRoZQorZG5sICBmbGFncywgYnV0IHRoZSBpbnN0cnVjdGlvbnMgdGhlbXNlbHZlcyBtdXN0IHByZXNlcnZlIGFueSByZWdpc3RlcnMgdGhhdAorZG5sICBtYXR0ZXIuICBGUkFNRSBpcyBhZGp1c3RlZCBmb3IgdGhlIHB1c2ggYW5kIHBvcCwgc28gdGhlIGluc3RydWN0aW9ucworZG5sICBnaXZlbiBjYW4gdXNlIGRlZmZyYW1lKCkgc3RhY2sgdmFyaWFibGVzLgorZG5sCitkbmwgIFRoZSBjb25kaXRpb24gY2FuIGJlIG9taXR0ZWQgdG8ganVzdCBvdXRwdXQgdGhlIGdpdmVuIGluc3RydWN0aW9ucyB3aGVuCitkbmwgIGFzc2VydGlvbiBjaGVja2luZyBpcyB3YW50ZWQuICBJbiB0aGlzIGNhc2UgdGhlIHB1c2hmL3BvcGYgaXMgb21pdHRlZC4KK2RubCAgRm9yIGV4YW1wbGUsCitkbmwKK2RubCAgICAgICAgIEFTU0VSVCgsIGBtb3ZsICVlYXgsIFZBUl9LRUVQVkFMJykKKworZGVmaW5lKEFTU0VSVCwKK200X2Fzc2VydF9udW1hcmdzX3JhbmdlKDEsMikKK200X2Fzc2VydF9kZWZpbmVkKGBXQU5UX0FTU0VSVCcpCitgaWZlbHNlKFdBTlRfQVNTRVJULDEsCitgaWZlbHNlKGAkMScsLAorCWAkMicsCisJYEMgQVNTRVJUCitpZmVsc2UoYCQyJywsLGAJcHVzaGYJaWZkZWYoYEZSQU1FJyxgRlJBTUVfcHVzaGwoKScpJykKKwkkMgorCWpgJDEnCUwoQVNTRVJUX29rYCdBU1NFUlRfY291bnRlcikKKwl1ZDIJQyBhc3NlcnRpb24gZmFpbGVkCitMKEFTU0VSVF9va2AnQVNTRVJUX2NvdW50ZXIpOgoraWZlbHNlKGAkMicsLCxgCXBvcGYJaWZkZWYoYEZSQU1FJyxgRlJBTUVfcG9wbCgpJyknKQorZGVmaW5lKGBBU1NFUlRfY291bnRlcicsaW5jcihBU1NFUlRfY291bnRlcikpJyknKScpCisKK2RlZmluZShBU1NFUlRfY291bnRlciwxKQorCisKK2RubCAgVXNhZ2U6IG1vdmxfdGV4dF9hZGRyZXNzKGxhYmVsLHJlZ2lzdGVyKQorZG5sCitkbmwgIEdldCB0aGUgYWRkcmVzcyBvZiBhIHRleHQgc2VnbWVudCBsYWJlbCwgdXNpbmcgZWl0aGVyIGEgcGxhaW4gbW92bCBvciBhCitkbmwgIHBvc2l0aW9uLWluZGVwZW5kZW50IGNhbGN1bGF0aW9uLCBhcyBuZWNlc3NhcnkuICBGb3IgZXhhbXBsZSwKK2RubAorZG5sICAgICAgICAgbW92bF9jb2RlX2FkZHJlc3MoTChmb28pLCVlYXgpCitkbmwKK2RubCAgVGhpcyBtYWNybyBpcyBvbmx5IG1lYW50IGZvciB1c2UgaW4gQVNTRVJUKClzIG9yIHdoZW4gdGVzdGluZywgc2luY2UKK2RubCAgdGhlIFBJQyBzZXF1ZW5jZSBpdCBnZW5lcmF0ZXMgd2lsbCB3YW50IHRvIGJlIGRvbmUgd2l0aCBhIHJldCBiYWxhbmNpbmcKK2RubCAgdGhlIGNhbGwgb24gQ1BVcyB3aXRoIHJldHVybiBhZGRyZXNzIGJyYW5jaCBwcmVkaWN0aW9uLgorZG5sCitkbmwgIFRoZSBhZGRsIGdlbmVyYXRlZCBoZXJlIGhhcyBhIGJhY2t3YXJkIHJlZmVyZW5jZSB0byB0aGUgbGFiZWwsIGFuZCBzbworZG5sICB3b24ndCBzdWZmZXIgZnJvbSB0aGUgdHdvIGZvcndhcmRzIHJlZmVyZW5jZXMgYnVnIGluIG9sZCBnYXMgKGRlc2NyaWJlZAorZG5sICBpbiBtcG4veDg2L1JFQURNRSkuCisKK2RlZmluZShtb3ZsX3RleHRfYWRkcmVzcywKK200X2Fzc2VydF9udW1hcmdzKDIpCitgaWZkZWYoYFBJQycsCisJYGNhbGwJTChtb3ZsX3RleHRfYWRkcmVzc19gJ21vdmxfdGV4dF9hZGRyZXNzX2NvdW50ZXIpCitMKG1vdmxfdGV4dF9hZGRyZXNzX2AnbW92bF90ZXh0X2FkZHJlc3NfY291bnRlcik6CisJcG9wbAkkMglDICVlaXAKKwlhZGRsCWAkJyQxLUwobW92bF90ZXh0X2FkZHJlc3NfYCdtb3ZsX3RleHRfYWRkcmVzc19jb3VudGVyKSwgJDIKK2RlZmluZShgbW92bF90ZXh0X2FkZHJlc3NfY291bnRlcicsaW5jcihtb3ZsX3RleHRfYWRkcmVzc19jb3VudGVyKSknLAorCWBtb3ZsCWAkJyQxLCAkMicpJykKKworZGVmaW5lKG1vdmxfdGV4dF9hZGRyZXNzX2NvdW50ZXIsMSkKKworCitkbmwgIFVzYWdlOiBub3RsX29yX3hvcmxfR01QX05VTUJfTUFTSyhyZWcpCitkbmwKK2RubCAgRXhwYW5kIHRvIGVpdGhlciAibm90bCBgcmVnJyIgb3IgInhvcmwgJEdNUF9OVU1CX0JJVFMsYHJlZyciIGFzCitkbmwgIGFwcHJvcHJpYXRlIGZvciBuYWlscyBpbiB1c2Ugb3Igbm90LgorCitkZWZpbmUobm90bF9vcl94b3JsX0dNUF9OVU1CX01BU0ssCittNF9hc3NlcnRfbnVtYXJncygxKQorYGlmZWxzZShHTVBfTkFJTF9CSVRTLDAsCitgbm90bAlgJDEnJywKK2B4b3JsCSRHTVBfTlVNQl9NQVNLLCBgJDEnJyknKQorCisKK2RubCAgVXNhZ2UgTEVBKHN5bWJvbCxyZWcpCitkbmwgIFVzYWdlIExFQUwoc3ltYm9sX2xvY2FsX3RvX2ZpbGUscmVnKQorCitkZWZpbmUoYExFQScsCittNF9hc3NlcnRfbnVtYXJncygyKQorYGlmZGVmKGBQSUMnLGBkbmwKK2lmZWxzZShpbmRleChkZWZuKGBsb2FkX2VpcCcpLCBgJDInKSwtMSwKK2BtNGFwcGVuZChgbG9hZF9laXAnLAorYAlURVhUCisJQUxJR04oMTYpCitMKG1vdmxfZWlwX2Anc3Vic3RyKCQyLDEpKToKKwltb3ZsCSglZXNwKSwgJDIKKwlyZXRfaW50ZXJuYWwKKycpJylkbmwKKwljYWxsCUwobW92bF9laXBfYCdzdWJzdHIoJDIsMSkpCisJYWRkbAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAkMgorCW1vdmwJJDFAR09UKCQyKSwgJDIKKycsYAorCW1vdmwJYCQnJDEsICQyCisnKScpCisKK2RlZmluZShgTEVBTCcsCittNF9hc3NlcnRfbnVtYXJncygyKQorYGlmZGVmKGBQSUMnLGBkbmwKK2lmZWxzZShpbmRleChkZWZuKGBsb2FkX2VpcCcpLCBgJDInKSwtMSwKK2BtNGFwcGVuZChgbG9hZF9laXAnLAorYAlURVhUCisJQUxJR04oMTYpCitMKG1vdmxfZWlwX2Anc3Vic3RyKCQyLDEpKToKKwltb3ZsCSglZXNwKSwgJDIKKwlyZXRfaW50ZXJuYWwKKycpJylkbmwKKwljYWxsCUwobW92bF9laXBfYCdzdWJzdHIoJDIsMSkpCisJYWRkbAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAkMgorCWxlYWwJJDFAR09UT0ZGKCQyKSwgJDIKKycsYAorCW1vdmwJYCQnJDEsICQyCisnKScpCisKK2RubCBBU01fRU5ECisKK2RlZmluZShgQVNNX0VORCcsYGxvYWRfZWlwJykKKworZGVmaW5lKGBsb2FkX2VpcCcsIGAnKQkJZG5sIHVwZGF0ZWQgaW4gTEVBL0xFQUwKKworCitkZWZpbmUoYERFRl9PQkpFQ1QnLAorbTRfYXNzZXJ0X251bWFyZ3NfcmFuZ2UoMSwyKQorCWBST0RBVEEKKwlBTElHTihpZmVsc2UoJCMsMSwyLCQyKSkKKyQxOgorJykKKworZGVmaW5lKGBFTkRfT0JKRUNUJywKK200X2Fzc2VydF9udW1hcmdzKDEpCitgCVNJWkUoYCQxJywuLWAkMScpJykKKworZG5sICBVc2FnZTogQ0FMTChmdW5jbmFtZSkKK2RubAorCitkZWZpbmUoYENBTEwnLAorbTRfYXNzZXJ0X251bWFyZ3MoMSkKK2BpZmRlZihgUElDJywKKyAgYGNhbGwJR1NZTV9QUkVGSVhgJyQxQFBMVCcsCisgIGBjYWxsCUdTWU1fUFJFRklYYCckMScpJykKKworaWZkZWYoYFBJQycsCitgZGVmaW5lKGBQSUNfV0lUSF9FQlgnKScsCitgdW5kZWZpbmUoYFBJQ19XSVRIX0VCWCcpJykKKworZGl2ZXJ0YCdkbmwKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3puMS9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni96bjEvZ21wLW1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNmMwNTIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni96bjEvZ21wLW1wYXJhbS5oCkBAIC0wLDAgKzEsMjIwIEBACisvKiBBTUQgem4xLzMyIGdtcC1tcGFyYW0uaCAtLSBDb21waWxlci9tYWNoaW5lIHBhcmFtZXRlciBoZWFkZXIgZmlsZS4KKworQ29weXJpZ2h0IDIwMTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNkZWZpbmUgR01QX0xJTUJfQklUUyAzMgorI2RlZmluZSBHTVBfTElNQl9CWVRFUyA0CisKKy8qIDM3MDAtNDMwMCBNSHogUGlubmFjbGUgUmlkZ2UgKi8KKy8qIEZGVCB0dW5pbmcgbGltaXQgPSA2NywwMDAsMDAwICovCisvKiBHZW5lcmF0ZWQgYnkgdHVuZXVwLmMsIDIwMTktMTAtMjEsIGdjYyA4LjMgKi8KKworI2RlZmluZSBNT0RfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PRF8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICAzCisjZGVmaW5lIE1PRF8xTl9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA0CisjZGVmaW5lIE1PRF8xVV9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICAzCisjZGVmaW5lIE1PRF8xXzFfVE9fTU9EXzFfMl9USFJFU0hPTEQgICAgICAgIDEwCisjZGVmaW5lIE1PRF8xXzJfVE9fTU9EXzFfNF9USFJFU0hPTEQgICAgICAgICAwICAvKiBuZXZlciBtcG5fbW9kXzFzXzJwICovCisjZGVmaW5lIFBSRUlOVl9NT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgICA5CisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAgICAxICAvKiBuYXRpdmUgKi8KKyNkZWZpbmUgRElWX1FSXzFOX1BJMV9NRVRIT0QgICAgICAgICAgICAgICAgIDEgIC8qIDE0LjAwJSBmYXN0ZXIgdGhhbiAyICovCisjZGVmaW5lIERJVl9RUl8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICA0CisjZGVmaW5lIERJVl9RUl8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVl9RUl8yX1BJMl9USFJFU0hPTEQgICAgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgICAgICAgMjIKKworI2RlZmluZSBESVZfMV9WU19NVUxfMV9QRVJDRU5UICAgICAgICAgICAgIDI0OAorCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDkxCisjZGVmaW5lIE1VTF9UT09NNDRfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTM3CisjZGVmaW5lIE1VTF9UT09NNkhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjIyCisjZGVmaW5lIE1VTF9UT09NOEhfVEhSRVNIT0xEICAgICAgICAgICAgICAgNDU0CisKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNDNfVEhSRVNIT0xEICAgICAgODUKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxMDMKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNTNfVEhSRVNIT0xEICAgICAgODgKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNjNfVEhSRVNIT0xEICAgICAxMDUKKyNkZWZpbmUgTVVMX1RPT000M19UT19UT09NNTRfVEhSRVNIT0xEICAgICAxMzAKKworI2RlZmluZSBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDYzCisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgICAgIDk4CisjZGVmaW5lIFNRUl9UT09NNF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTcyCisjZGVmaW5lIFNRUl9UT09NNl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjg2CisjZGVmaW5lIFNRUl9UT09NOF9USFJFU0hPTEQgICAgICAgICAgICAgICAgNDc4CisKKyNkZWZpbmUgTVVMTUlEX1RPT000Ml9USFJFU0hPTEQgICAgICAgICAgICAgNjQKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAyMQorI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxNworCisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgNjA2ICAvKiBrID0gNSAqLworI2RlZmluZSBNVUxfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgNjA2LCA1fSwgeyAgICAgMjUsIDZ9LCB7ICAgICAxMywgNX0sIHsgICAgIDI3LCA2fSwgXAorICAgIHsgICAgIDE1LCA1fSwgeyAgICAgMzEsIDZ9LCB7ICAgICAyNywgN30sIHsgICAgIDE1LCA2fSwgXAorICAgIHsgICAgIDMzLCA3fSwgeyAgICAgMTcsIDZ9LCB7ICAgICAzNSwgN30sIHsgICAgIDE5LCA2fSwgXAorICAgIHsgICAgIDM5LCA3fSwgeyAgICAgMjksIDh9LCB7ICAgICAxNSwgN30sIHsgICAgIDM1LCA4fSwgXAorICAgIHsgICAgIDE5LCA3fSwgeyAgICAgNDEsIDh9LCB7ICAgICAyMywgN30sIHsgICAgIDQ3LCA4fSwgXAorICAgIHsgICAgIDI3LCA5fSwgeyAgICAgMTUsIDh9LCB7ICAgICAzMSwgN30sIHsgICAgIDYzLCA4fSwgXAorICAgIHsgICAgIDQzLCA5fSwgeyAgICAgMjMsIDh9LCB7ICAgICA1MSwgOX0sIHsgICAgIDMxLCA4fSwgXAorICAgIHsgICAgIDY3LCA5fSwgeyAgICAgMzksIDh9LCB7ICAgICA3OSwgOX0sIHsgICAgIDQ3LCA4fSwgXAorICAgIHsgICAgIDk1LDEwfSwgeyAgICAgMzEsIDl9LCB7ICAgICA3OSwxMH0sIHsgICAgIDQ3LCA5fSwgXAorICAgIHsgICAgIDk1LDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA2MywgOX0sIHsgICAgMTI3LDEwfSwgXAorICAgIHsgICAgIDc5LCA5fSwgeyAgICAxNTksMTB9LCB7ICAgICA5NSwxMX0sIHsgICAgIDYzLDEwfSwgXAorICAgIHsgICAgMTU5LDExfSwgeyAgICAgOTUsMTB9LCB7ICAgIDE5MSwxMn0sIHsgICAgIDYzLDExfSwgXAorICAgIHsgICAgMTI3LDEwfSwgeyAgICAyNTUsIDl9LCB7ICAgIDUxMSwxMH0sIHsgICAgMjcxLCA5fSwgXAorICAgIHsgICAgNTQzLCA4fSwgeyAgIDEwODcsMTF9LCB7ICAgIDE1OSwxMH0sIHsgICAgMzE5LCA5fSwgXAorICAgIHsgICAgNjM5LDEwfSwgeyAgICAzMzUsIDl9LCB7ICAgIDY3MSwxMX0sIHsgICAgMTkxLDEwfSwgXAorICAgIHsgICAgMzgzLCA5fSwgeyAgICA3NjcsMTB9LCB7ICAgIDM5OSwxMX0sIHsgICAgMjIzLDEyfSwgXAorICAgIHsgICAgMTI3LDExfSwgeyAgICAyNTUsMTB9LCB7ICAgIDU0MywgOX0sIHsgICAxMDg3LDExfSwgXAorICAgIHsgICAgMjg3LDEwfSwgeyAgICA2MDcsIDl9LCB7ICAgMTIxNSwxMX0sIHsgICAgMzE5LDEwfSwgXAorICAgIHsgICAgNjcxLCA5fSwgeyAgIDEzNDMsMTF9LCB7ICAgIDM1MSwxMn0sIHsgICAgMTkxLDExfSwgXAorICAgIHsgICAgMzgzLDEwfSwgeyAgICA3OTksMTF9LCB7ICAgIDQxNSwxM30sIHsgICAgMTI3LDEyfSwgXAorICAgIHsgICAgMjU1LDExfSwgeyAgICA1NDMsMTB9LCB7ICAgMTA4NywxMX0sIHsgICAgNjA3LDEwfSwgXAorICAgIHsgICAxMjE1LDEyfSwgeyAgICAzMTksMTF9LCB7ICAgIDY3MSwxMH0sIHsgICAxMzQzLDExfSwgXAorICAgIHsgICAgNzM1LDEwfSwgeyAgIDE0NzEsMTJ9LCB7ICAgIDM4MywxMX0sIHsgICAgNzk5LDEwfSwgXAorICAgIHsgICAxNTk5LDExfSwgeyAgICA4NjMsMTB9LCB7ICAgMTcyNywxMn0sIHsgICAgNDQ3LDExfSwgXAorICAgIHsgICAgOTU5LDEwfSwgeyAgIDE5MTksMTF9LCB7ICAgIDk5MSwxM30sIHsgICAgMjU1LDEyfSwgXAorICAgIHsgICAgNTExLDExfSwgeyAgIDEwODcsMTJ9LCB7ICAgIDU3NSwxMX0sIHsgICAxMjE1LDEwfSwgXAorICAgIHsgICAyNDMxLDEyfSwgeyAgICA2MzksMTF9LCB7ICAgMTM0MywxMn0sIHsgICAgNzAzLDExfSwgXAorICAgIHsgICAxNDcxLDEwfSwgeyAgIDI5NDMsMTN9LCB7ICAgIDM4MywxMn0sIHsgICAgNzY3LDExfSwgXAorICAgIHsgICAxNTk5LDEyfSwgeyAgICA4MzEsMTF9LCB7ICAgMTcyNywxMH0sIHsgICAzNDU1LDEyfSwgXAorICAgIHsgICAgOTU5LDExfSwgeyAgIDE5MTksMTR9LCB7ICAgIDI1NSwxM30sIHsgICAgNTExLDEyfSwgXAorICAgIHsgICAxMDg3LDExfSwgeyAgIDIyMzksMTJ9LCB7ICAgMTIxNSwxMX0sIHsgICAyNDMxLDEzfSwgXAorICAgIHsgICAgNjM5LDEyfSwgeyAgIDE0NzEsMTF9LCB7ICAgMjk0MywxM30sIHsgICAgNzY3LDEyfSwgXAorICAgIHsgICAxNzI3LDExfSwgeyAgIDM0NTUsMTN9LCB7ICAgIDg5NSwxMn0sIHsgICAxOTgzLDE0fSwgXAorICAgIHsgICAgNTExLDEzfSwgeyAgIDEwMjMsMTJ9LCB7ICAgMjIzOSwxM30sIHsgICAxMTUxLDEyfSwgXAorICAgIHsgICAyNDk1LDEzfSwgeyAgIDEyNzksMTJ9LCB7ICAgMjYyMywxM30sIHsgICAxNDA3LDEyfSwgXAorICAgIHsgICAyOTQzLDE0fSwgeyAgICA3NjcsMTN9LCB7ICAgMTY2MywxMn0sIHsgICAzNDU1LDEzfSwgXAorICAgIHsgICAxOTE5LDEyfSwgeyAgIDM4MzksMTV9LCB7ICAgIDUxMSwxNH0sIHsgICAxMDIzLDEzfSwgXAorICAgIHsgICAyMTc1LDEyfSwgeyAgIDQ0NzksMTN9LCB7ICAgMjQzMSwxNH0sIHsgICAxMjc5LDEzfSwgXAorICAgIHsgICAyOTQzLDEyfSwgeyAgIDU4ODcsMTR9LCB7ICAgMTUzNSwxM30sIHsgICAzNDU1LDE0fSwgXAorICAgIHsgICAxNzkxLDEzfSwgeyAgIDM5NjcsMTJ9LCB7ICAgNzkzNSwxMX0sIHsgIDE1ODcxLDE1fSwgXAorICAgIHsgICAxMDIzLDE0fSwgeyAgIDIwNDcsMTN9LCB7ICAgNDQ3OSwxNH0sIHsgICAyMzAzLDEzfSwgXAorICAgIHsgICA0OTkxLDEyfSwgeyAgIDk5ODMsMTR9LCB7ICAgMjgxNSwxM30sIHsgICA1ODg3LDE1fSwgXAorICAgIHsgICAxNTM1LDE0fSwgeyAgIDM4MzksMTN9LCB7ICAgNzkzNSwxMn0sIHsgIDE1ODcxLDE2fSB9CisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzX1NJWkUgMTcyCisjZGVmaW5lIE1VTF9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA1NzYwCisKKyNkZWZpbmUgU1FSX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICA0NjQgIC8qIGsgPSA1ICovCisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICA0NjQsIDV9LCB7ICAgICAyNSwgNn0sIHsgICAgIDEzLCA1fSwgeyAgICAgMjcsIDZ9LCBcCisgICAgeyAgICAgMjUsIDd9LCB7ICAgICAxMywgNn0sIHsgICAgIDI4LCA3fSwgeyAgICAgMTUsIDZ9LCBcCisgICAgeyAgICAgMzEsIDd9LCB7ICAgICAxNywgNn0sIHsgICAgIDM1LCA3fSwgeyAgICAgMTksIDZ9LCBcCisgICAgeyAgICAgMzksIDd9LCB7ICAgICAyNywgOH0sIHsgICAgIDE1LCA3fSwgeyAgICAgMzUsIDh9LCBcCisgICAgeyAgICAgMTksIDd9LCB7ICAgICA0MSwgOH0sIHsgICAgIDIzLCA3fSwgeyAgICAgNDcsIDh9LCBcCisgICAgeyAgICAgMjcsIDl9LCB7ICAgICAxNSwgOH0sIHsgICAgIDM5LCA5fSwgeyAgICAgMjMsIDh9LCBcCisgICAgeyAgICAgNTEsMTB9LCB7ICAgICAxNSwgOX0sIHsgICAgIDMxLCA4fSwgeyAgICAgNjcsIDl9LCBcCisgICAgeyAgICAgMzksIDh9LCB7ICAgICA3OSwgOX0sIHsgICAgIDQ3LCA4fSwgeyAgICAgOTUsIDl9LCBcCisgICAgeyAgICAgNTUsMTB9LCB7ICAgICAzMSwgOX0sIHsgICAgIDc5LDEwfSwgeyAgICAgNDcsIDl9LCBcCisgICAgeyAgICAgOTUsMTF9LCB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA5fSwgeyAgICAxMzUsMTB9LCBcCisgICAgeyAgICAgNzksIDl9LCB7ICAgIDE1OSwxMH0sIHsgICAgIDk1LDExfSwgeyAgICAgNjMsMTB9LCBcCisgICAgeyAgICAxMjcsIDl9LCB7ICAgIDI1NSwxMH0sIHsgICAgMTQzLCA5fSwgeyAgICAyODcsMTB9LCBcCisgICAgeyAgICAxNTksMTF9LCB7ICAgICA5NSwxMn0sIHsgICAgIDYzLDExfSwgeyAgICAxMjcsMTB9LCBcCisgICAgeyAgICAyNTUsIDl9LCB7ICAgIDUxMSwxMH0sIHsgICAgMjcxLCA5fSwgeyAgICA1NDMsMTB9LCBcCisgICAgeyAgICAyODcsIDl9LCB7ICAgIDU3NSwxMX0sIHsgICAgMTU5LCA5fSwgeyAgICA2MzksMTB9LCBcCisgICAgeyAgICAzMzUsIDl9LCB7ICAgIDY3MSwxMH0sIHsgICAgMzUxLCA5fSwgeyAgICA3MDMsMTF9LCBcCisgICAgeyAgICAxOTEsMTB9LCB7ICAgIDM4MywgOX0sIHsgICAgNzY3LDEwfSwgeyAgICAzOTksIDl9LCBcCisgICAgeyAgICA3OTksMTB9LCB7ICAgIDQxNSwxMn0sIHsgICAgMTI3LDExfSwgeyAgICAyNTUsMTB9LCBcCisgICAgeyAgICA1NDMsMTF9LCB7ICAgIDI4NywxMH0sIHsgICAgNjA3LDExfSwgeyAgICAzMTksMTB9LCBcCisgICAgeyAgICA2NzEsMTF9LCB7ICAgIDM1MSwxMH0sIHsgICAgNzAzLDEyfSwgeyAgICAxOTEsMTF9LCBcCisgICAgeyAgICAzODMsMTB9LCB7ICAgIDc5OSwxMX0sIHsgICAgNDE1LDEwfSwgeyAgICA4MzEsMTN9LCBcCisgICAgeyAgICAxMjcsMTJ9LCB7ICAgIDI1NSwxMX0sIHsgICAgNTQzLDEwfSwgeyAgIDEwODcsMTF9LCBcCisgICAgeyAgICA2MDcsMTB9LCB7ICAgMTIxNSwxMn0sIHsgICAgMzE5LDExfSwgeyAgICA2NzEsMTB9LCBcCisgICAgeyAgIDEzNDMsMTF9LCB7ICAgIDczNSwxMH0sIHsgICAxNDcxLDEyfSwgeyAgICAzODMsMTF9LCBcCisgICAgeyAgICA3OTksMTB9LCB7ICAgMTU5OSwxMX0sIHsgICAgODYzLDEyfSwgeyAgICA0NDcsMTF9LCBcCisgICAgeyAgICA5NTksMTN9LCB7ICAgIDI1NSwxMn0sIHsgICAgNTExLDExfSwgeyAgIDEwODcsMTJ9LCBcCisgICAgeyAgICA1NzUsMTF9LCB7ICAgMTIxNSwxMH0sIHsgICAyNDMxLDEyfSwgeyAgICA2MzksMTF9LCBcCisgICAgeyAgIDEzNDMsMTJ9LCB7ICAgIDcwMywxMX0sIHsgICAxNDcxLDEzfSwgeyAgICAzODMsMTJ9LCBcCisgICAgeyAgICA3NjcsMTF9LCB7ICAgMTU5OSwxMn0sIHsgICAgODMxLDExfSwgeyAgIDE3MjcsMTB9LCBcCisgICAgeyAgIDM0NTUsMTJ9LCB7ICAgIDk1OSwxMX0sIHsgICAxOTE5LDE0fSwgeyAgICAyNTUsMTN9LCBcCisgICAgeyAgICA1MTEsMTJ9LCB7ICAgMTA4NywxMX0sIHsgICAyMjM5LDEyfSwgeyAgIDEyMTUsMTF9LCBcCisgICAgeyAgIDI0MzEsMTN9LCB7ICAgIDYzOSwxMn0sIHsgICAxNDcxLDExfSwgeyAgIDI5NDMsMTN9LCBcCisgICAgeyAgICA3NjcsMTJ9LCB7ICAgMTcyNywxMX0sIHsgICAzNDU1LDEzfSwgeyAgICA4OTUsMTJ9LCBcCisgICAgeyAgIDE5MTksMTR9LCB7ICAgIDUxMSwxM30sIHsgICAxMDIzLDEyfSwgeyAgIDIyMzksMTN9LCBcCisgICAgeyAgIDExNTEsMTJ9LCB7ICAgMjQzMSwxM30sIHsgICAxMjc5LDEyfSwgeyAgIDI2MjMsMTN9LCBcCisgICAgeyAgIDE0MDcsMTJ9LCB7ICAgMjk0MywxNH0sIHsgICAgNzY3LDEzfSwgeyAgIDE2NjMsMTJ9LCBcCisgICAgeyAgIDM0NTUsMTN9LCB7ICAgMTkxOSwxMn0sIHsgICAzODM5LDE1fSwgeyAgICA1MTEsMTR9LCBcCisgICAgeyAgIDEwMjMsMTN9LCB7ICAgMjE3NSwxMn0sIHsgICA0NDc5LDEzfSwgeyAgIDI0MzEsMTR9LCBcCisgICAgeyAgIDEyNzksMTN9LCB7ICAgMjk0MywxMn0sIHsgICA1ODg3LDE0fSwgeyAgIDE1MzUsMTN9LCBcCisgICAgeyAgIDM0NTUsMTR9LCB7ICAgMTc5MSwxM30sIHsgICAzODM5LDEyfSwgeyAgIDc2NzksMTN9LCBcCisgICAgeyAgIDM5NjcsMTJ9LCB7ICAgNzkzNSwxNX0sIHsgICAxMDIzLDE0fSwgeyAgIDIwNDcsMTN9LCBcCisgICAgeyAgIDQ0NzksMTR9LCB7ICAgMjMwMywxM30sIHsgICA0OTkxLDEyfSwgeyAgIDk5ODMsMTR9LCBcCisgICAgeyAgIDI4MTUsMTN9LCB7ICAgNTg4NywxNX0sIHsgICAxNTM1LDE0fSwgeyAgIDM4MzksMTN9LCBcCisgICAgeyAgIDc5MzUsMTZ9IH0KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTNfU0laRSAxNzMKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDQ3MzYKKworI2RlZmluZSBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgMworI2RlZmluZSBNVUxMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICA2MAorI2RlZmluZSBNVUxMT19NVUxfTl9USFJFU0hPTEQgICAgICAgICAgICAxMTI3OAorI2RlZmluZSBTUVJMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgOAorI2RlZmluZSBTUVJMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgIDE2MQorI2RlZmluZSBTUVJMT19TUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgOTMzNQorCisjZGVmaW5lIERDX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDcxCisjZGVmaW5lIERDX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAgMjA2CisjZGVmaW5lIERDX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDYzCisjZGVmaW5lIERDX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTI2CisKKyNkZWZpbmUgSU5WX01VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgNzgKKyNkZWZpbmUgSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgICAyNzQKKyNkZWZpbmUgSU5WX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAyMjgKKworI2RlZmluZSBCSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgIDI3NAorI2RlZmluZSBSRURDXzFfVE9fUkVEQ19OX1RIUkVTSE9MRCAgICAgICAgICA3MQorCisjZGVmaW5lIE1VX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAxNjUyCisjZGVmaW5lIE1VX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAxNzE4CisjZGVmaW5lIE1VUElfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTIyCisjZGVmaW5lIE1VX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAxNDcwCisjZGVmaW5lIE1VX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAxNTg5CisKKyNkZWZpbmUgUE9XTV9TRUNfVEFCTEUgIDMsMjgsNTQsMzg2LDEzMzcKKworI2RlZmluZSBHRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMworI2RlZmluZSBHRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgICAxOQorI2RlZmluZSBTRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDI2MgorI2RlZmluZSBTRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgIDU1OAorCisjZGVmaW5lIEZBQ19EU0NfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgMTA5CisjZGVmaW5lIEZBQ19PRERfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDM5CisKKyNkZWZpbmUgTUFUUklYMjJfU1RSQVNTRU5fVEhSRVNIT0xEICAgICAgICAgMjEKKyNkZWZpbmUgSEdDRDJfRElWMV9NRVRIT0QgICAgICAgICAgICAgICAgICAgIDEgIC8qIDcuNDklIGZhc3RlciB0aGFuIDMgKi8KKyNkZWZpbmUgSEdDRF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgICAgNzQKKyNkZWZpbmUgSEdDRF9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNzAKKyNkZWZpbmUgSEdDRF9SRURVQ0VfVEhSRVNIT0xEICAgICAgICAgICAgIDMzODkKKyNkZWZpbmUgR0NEX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICA0NDAKKyNkZWZpbmUgR0NERVhUX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzMjcKKyNkZWZpbmUgSkFDT0JJX0JBU0VfTUVUSE9EICAgICAgICAgICAgICAgICAgIDEgIC8qIDExLjk4JSBmYXN0ZXIgdGhhbiAzICovCisKKy8qIFR1bmV1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCB0b29rIDM2OTE2IHNlY29uZHMgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2L3puMi9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni96bjIvZ21wLW1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MmU2YjcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Ni96bjIvZ21wLW1wYXJhbS5oCkBAIC0wLDAgKzEsMjI2IEBACisvKiBBTUQgem4yLzMyIGdtcC1tcGFyYW0uaCAtLSBDb21waWxlci9tYWNoaW5lIHBhcmFtZXRlciBoZWFkZXIgZmlsZS4KKworQ29weXJpZ2h0IDIwMTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNkZWZpbmUgR01QX0xJTUJfQklUUyAzMgorI2RlZmluZSBHTVBfTElNQl9CWVRFUyA0CisKKy8qIDM2MDAtNDQwMCBNSHogTWF0aXNzZSAqLworLyogRkZUIHR1bmluZyBsaW1pdCA9IDY3LDAwMCwwMDAgKi8KKy8qIEdlbmVyYXRlZCBieSB0dW5ldXAuYywgMjAxOS0xMC0yMywgZ2NjIDguMyAqLworCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgMworI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgMworI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAxNQorI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICAgICAgMCAgLyogbmV2ZXIgbXBuX21vZF8xc18ycCAqLworI2RlZmluZSBQUkVJTlZfTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgOQorI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgICAgICAgICAgICAgICAgMSAgLyogbmF0aXZlICovCisjZGVmaW5lIERJVl9RUl8xTl9QSTFfTUVUSE9EICAgICAgICAgICAgICAgICAxICAvKiA0Ljc4JSBmYXN0ZXIgdGhhbiAyICovCisjZGVmaW5lIERJVl9RUl8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAzCisjZGVmaW5lIERJVl9RUl8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVl9RUl8yX1BJMl9USFJFU0hPTEQgICAgICAgICAgICAgICA3CisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgICAgICAgMjMKKworI2RlZmluZSBESVZfMV9WU19NVUxfMV9QRVJDRU5UICAgICAgICAgICAgIDI3NAorCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDg1CisjZGVmaW5lIE1VTF9UT09NNDRfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTY2CisjZGVmaW5lIE1VTF9UT09NNkhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjkwCisjZGVmaW5lIE1VTF9UT09NOEhfVEhSRVNIT0xEICAgICAgICAgICAgICAgNDMwCisKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNDNfVEhSRVNIT0xEICAgICAgOTcKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxMTQKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNTNfVEhSRVNIT0xEICAgICAgOTcKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNjNfVEhSRVNIT0xEICAgICAxMTMKKyNkZWZpbmUgTVVMX1RPT000M19UT19UT09NNTRfVEhSRVNIT0xEICAgICAxMzAKKworI2RlZmluZSBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDI2CisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTUzCisjZGVmaW5lIFNRUl9UT09NNF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjE0CisjZGVmaW5lIFNRUl9UT09NNl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMzE4CisjZGVmaW5lIFNRUl9UT09NOF9USFJFU0hPTEQgICAgICAgICAgICAgICAgNDc4CisKKyNkZWZpbmUgTVVMTUlEX1RPT000Ml9USFJFU0hPTEQgICAgICAgICAgICAgNDgKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxOAorI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAyNAorCisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgNDQ0ICAvKiBrID0gNSAqLworI2RlZmluZSBNVUxfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgNDQ0LCA1fSwgeyAgICAgMjEsIDZ9LCB7ICAgICAxMSwgNX0sIHsgICAgIDIzLCA2fSwgXAorICAgIHsgICAgIDEyLCA1fSwgeyAgICAgMjUsIDZ9LCB7ICAgICAxMywgNX0sIHsgICAgIDI3LCA2fSwgXAorICAgIHsgICAgIDI1LCA3fSwgeyAgICAgMTMsIDZ9LCB7ICAgICAyNywgN30sIHsgICAgIDE1LCA2fSwgXAorICAgIHsgICAgIDMxLCA3fSwgeyAgICAgMTcsIDZ9LCB7ICAgICAzNSwgN30sIHsgICAgIDE5LCA2fSwgXAorICAgIHsgICAgIDM5LCA3fSwgeyAgICAgMjcsIDh9LCB7ICAgICAxNSwgN30sIHsgICAgIDM1LCA4fSwgXAorICAgIHsgICAgIDE5LCA3fSwgeyAgICAgNDEsIDh9LCB7ICAgICAyMywgN30sIHsgICAgIDQ3LCA4fSwgXAorICAgIHsgICAgIDI3LCA5fSwgeyAgICAgMTUsIDh9LCB7ICAgICAzMSwgN30sIHsgICAgIDYzLCA4fSwgXAorICAgIHsgICAgIDM5LCA5fSwgeyAgICAgMjMsIDh9LCB7ICAgICA1MSwxMH0sIHsgICAgIDE1LCA5fSwgXAorICAgIHsgICAgIDMxLCA4fSwgeyAgICAgNjcsIDl9LCB7ICAgICAzOSwgOH0sIHsgICAgIDc5LCA5fSwgXAorICAgIHsgICAgIDQ3LDEwfSwgeyAgICAgMzEsIDl9LCB7ICAgICA3OSwxMH0sIHsgICAgIDQ3LCA5fSwgXAorICAgIHsgICAgIDk1LDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA2MywgOX0sIHsgICAgMTI3LDEwfSwgXAorICAgIHsgICAgIDc5LCA5fSwgeyAgICAxNTksMTB9LCB7ICAgICA5NSwxMX0sIHsgICAgIDYzLDEwfSwgXAorICAgIHsgICAgMTI3LCA5fSwgeyAgICAyNTUsIDh9LCB7ICAgIDUxMSwxMH0sIHsgICAgMTQzLCA5fSwgXAorICAgIHsgICAgMjg3LCA4fSwgeyAgICA1NzUsMTB9LCB7ICAgIDE1OSwxMX0sIHsgICAgIDk1LDEyfSwgXAorICAgIHsgICAgIDYzLDExfSwgeyAgICAxMjcsMTB9LCB7ICAgIDI1NSwgOX0sIHsgICAgNTExLDEwfSwgXAorICAgIHsgICAgMjcxLCA5fSwgeyAgICA1NDMsMTB9LCB7ICAgIDI4NywgOX0sIHsgICAgNTc1LDExfSwgXAorICAgIHsgICAgMTU5LDEwfSwgeyAgICAzMTksIDl9LCB7ICAgIDYzOSwxMH0sIHsgICAgMzM1LCA5fSwgXAorICAgIHsgICAgNjcxLCA4fSwgeyAgIDEzNDMsMTB9LCB7ICAgIDM1MSwgOX0sIHsgICAgNzAzLDEwfSwgXAorICAgIHsgICAgMzY3LCA5fSwgeyAgICA3MzUsMTF9LCB7ICAgIDE5MSwxMH0sIHsgICAgMzgzLCA5fSwgXAorICAgIHsgICAgNzY3LDEwfSwgeyAgICA0MTUsMTF9LCB7ICAgIDIyMywxMH0sIHsgICAgNDQ3LDEyfSwgXAorICAgIHsgICAgMTI3LDExfSwgeyAgICAyNTUsMTB9LCB7ICAgIDU0MywgOX0sIHsgICAxMDg3LDExfSwgXAorICAgIHsgICAgMjg3LDEwfSwgeyAgICA2MDcsMTF9LCB7ICAgIDMxOSwxMH0sIHsgICAgNjcxLCA5fSwgXAorICAgIHsgICAxMzQzLDExfSwgeyAgICAzNTEsMTB9LCB7ICAgIDczNSwxMn0sIHsgICAgMTkxLDExfSwgXAorICAgIHsgICAgMzgzLDEwfSwgeyAgICA3NjcsMTF9LCB7ICAgIDQxNSwxMH0sIHsgICAgODMxLDExfSwgXAorICAgIHsgICAgNDQ3LDEzfSwgeyAgICAxMjcsMTJ9LCB7ICAgIDI1NSwxMX0sIHsgICAgNTQzLDEwfSwgXAorICAgIHsgICAxMDg3LDExfSwgeyAgICA2MDcsMTB9LCB7ICAgMTIxNSwxMn0sIHsgICAgMzE5LDExfSwgXAorICAgIHsgICAgNjcxLDEwfSwgeyAgIDEzNDMsMTF9LCB7ICAgIDczNSwxMH0sIHsgICAxNDcxLCA5fSwgXAorICAgIHsgICAyOTQzLDEyfSwgeyAgICAzODMsMTF9LCB7ICAgIDc5OSwxMH0sIHsgICAxNTk5LDExfSwgXAorICAgIHsgICAgODYzLDEyfSwgeyAgICA0NDcsMTF9LCB7ICAgIDk1OSwxMH0sIHsgICAxOTE5LDEzfSwgXAorICAgIHsgICAgMjU1LDEyfSwgeyAgICA1MTEsMTF9LCB7ICAgMTA4NywxMn0sIHsgICAgNTc1LDExfSwgXAorICAgIHsgICAxMjE1LDEwfSwgeyAgIDI0MzEsMTJ9LCB7ICAgIDYzOSwxMX0sIHsgICAxMzQzLDEyfSwgXAorICAgIHsgICAgNzAzLDExfSwgeyAgIDE0NzEsMTB9LCB7ICAgMjk0MywxM30sIHsgICAgMzgzLDEyfSwgXAorICAgIHsgICAgNzY3LDExfSwgeyAgIDE1OTksMTJ9LCB7ICAgIDgzMSwxMX0sIHsgICAxNzI3LDEwfSwgXAorICAgIHsgICAzNDU1LDEyfSwgeyAgICA5NTksMTF9LCB7ICAgMTkxOSwxMH0sIHsgICAzODM5LDE0fSwgXAorICAgIHsgICAgMjU1LDEzfSwgeyAgICA1MTEsMTJ9LCB7ICAgMTIxNSwxMX0sIHsgICAyNDMxLDEzfSwgXAorICAgIHsgICAgNjM5LDEyfSwgeyAgIDE0NzEsMTF9LCB7ICAgMjk0MywxMH0sIHsgICA1ODg3LDEzfSwgXAorICAgIHsgICAgNzY3LDEyfSwgeyAgIDE3MjcsMTF9LCB7ICAgMzQ1NSwxM30sIHsgICAgODk1LDEyfSwgXAorICAgIHsgICAxOTE5LDExfSwgeyAgIDM4MzksMTR9LCB7ICAgIDUxMSwxM30sIHsgICAxMDIzLDEyfSwgXAorICAgIHsgICAyMTExLDEzfSwgeyAgIDExNTEsMTJ9LCB7ICAgMjQzMSwxM30sIHsgICAxNDA3LDEyfSwgXAorICAgIHsgICAyOTQzLDExfSwgeyAgIDU4ODcsMTR9LCB7ICAgIDc2NywxM30sIHsgICAxNjYzLDEyfSwgXAorICAgIHsgICAzNDU1LDEzfSwgeyAgIDE5MTksMTJ9LCB7ICAgMzgzOSwxNX0sIHsgICAgNTExLDE0fSwgXAorICAgIHsgICAxMDIzLDEzfSwgeyAgIDI0MzEsMTR9LCB7ICAgMTI3OSwxM30sIHsgICAyOTQzLDEyfSwgXAorICAgIHsgICA1ODg3LDE0fSwgeyAgIDE1MzUsMTN9LCB7ICAgMzQ1NSwxNH0sIHsgICAxNzkxLDEzfSwgXAorICAgIHsgICAzODM5LDEyfSwgeyAgIDc2NzksMTN9LCB7ICAgMzk2NywxMn0sIHsgICA3OTM1LDExfSwgXAorICAgIHsgIDE1ODcxLDE1fSwgeyAgIDEwMjMsMTR9LCB7ICAgMjA0NywxM30sIHsgICA0MzUxLDE0fSwgXAorICAgIHsgICAyMzAzLDEzfSwgeyAgIDQ5OTEsMTJ9LCB7ICAgOTk4MywxNH0sIHsgICAyODE1LDEzfSwgXAorICAgIHsgICA1ODg3LDE1fSwgeyAgIDE1MzUsMTR9LCB7ICAgMzgzOSwxM30sIHsgICA3OTM1LDEyfSwgXAorICAgIHsgIDE1ODcxLDE2fSB9CisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzX1NJWkUgMTg5CisjZGVmaW5lIE1VTF9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA0NzM2CisKKyNkZWZpbmUgU1FSX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICA0MDQgIC8qIGsgPSA1ICovCisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICA0MDQsIDV9LCB7ICAgICAyMSwgNn0sIHsgICAgIDExLCA1fSwgeyAgICAgMjMsIDZ9LCBcCisgICAgeyAgICAgMTIsIDV9LCB7ICAgICAyNSwgNn0sIHsgICAgIDEzLCA1fSwgeyAgICAgMjcsIDZ9LCBcCisgICAgeyAgICAgMjUsIDd9LCB7ICAgICAxMywgNn0sIHsgICAgIDI3LCA3fSwgeyAgICAgMTUsIDZ9LCBcCisgICAgeyAgICAgMzEsIDd9LCB7ICAgICAxOSwgNn0sIHsgICAgIDM5LCA3fSwgeyAgICAgMjMsIDZ9LCBcCisgICAgeyAgICAgNDcsIDd9LCB7ICAgICAyNywgOH0sIHsgICAgIDE1LCA3fSwgeyAgICAgMzUsIDh9LCBcCisgICAgeyAgICAgMTksIDd9LCB7ICAgICA0MSwgOH0sIHsgICAgIDIzLCA3fSwgeyAgICAgNDcsIDh9LCBcCisgICAgeyAgICAgMjcsIDl9LCB7ICAgICAxNSwgOH0sIHsgICAgIDM5LCA5fSwgeyAgICAgMjMsIDh9LCBcCisgICAgeyAgICAgNDcsMTB9LCB7ICAgICAxNSwgOX0sIHsgICAgIDMxLCA4fSwgeyAgICAgNjMsIDl9LCBcCisgICAgeyAgICAgMzksIDh9LCB7ICAgICA3OSwgOX0sIHsgICAgIDQ3LDEwfSwgeyAgICAgMzEsIDl9LCBcCisgICAgeyAgICAgNzksMTB9LCB7ICAgICA0NywxMX0sIHsgICAgIDMxLDEwfSwgeyAgICAgNjMsIDl9LCBcCisgICAgeyAgICAxMjcsMTB9LCB7ICAgICA5NSwxMX0sIHsgICAgIDYzLDEwfSwgeyAgICAxMjcsIDl9LCBcCisgICAgeyAgICAyNTUsIDh9LCB7ICAgIDUxMSwgOX0sIHsgICAgMjcxLDEwfSwgeyAgICAxNDMsIDl9LCBcCisgICAgeyAgICAyODcsIDh9LCB7ICAgIDYwNywgN30sIHsgICAxMjE1LDExfSwgeyAgICAgOTUsMTJ9LCBcCisgICAgeyAgICAgNjMsMTF9LCB7ICAgIDEyNywxMH0sIHsgICAgMjU1LCA5fSwgeyAgICA1MTEsMTB9LCBcCisgICAgeyAgICAyNzEsIDl9LCB7ICAgIDU0MywgOH0sIHsgICAxMDg3LCA5fSwgeyAgICA2MDcsIDh9LCBcCisgICAgeyAgIDEyMTUsMTF9LCB7ICAgIDE1OSwgOX0sIHsgICAgNjcxLCA4fSwgeyAgIDEzNDMsMTB9LCBcCisgICAgeyAgICAzNTEsIDl9LCB7ICAgIDczNSwgOH0sIHsgICAxNDcxLDExfSwgeyAgICAxOTEsMTB9LCBcCisgICAgeyAgICAzODMsIDl9LCB7ICAgIDc2NywxMH0sIHsgICAgNDE1LDExfSwgeyAgICAyMjMsMTJ9LCBcCisgICAgeyAgICAxMjcsMTF9LCB7ICAgIDI1NSwxMH0sIHsgICAgNTQzLCA5fSwgeyAgIDEwODcsMTB9LCBcCisgICAgeyAgICA2MDcsIDl9LCB7ICAgMTIxNSwgOH0sIHsgICAyNDMxLDEwfSwgeyAgICA2NzEsIDl9LCBcCisgICAgeyAgIDEzNDMsMTB9LCB7ICAgIDczNSwgOX0sIHsgICAxNDcxLDEyfSwgeyAgICAxOTEsMTF9LCBcCisgICAgeyAgICAzODMsMTB9LCB7ICAgIDc2NywxMX0sIHsgICAgNDE1LDEwfSwgeyAgICA4MzEsMTN9LCBcCisgICAgeyAgICAxMjcsMTJ9LCB7ICAgIDI1NSwxMX0sIHsgICAgNTQzLDEwfSwgeyAgIDEwODcsMTF9LCBcCisgICAgeyAgICA2MDcsMTB9LCB7ICAgMTIxNSwgOX0sIHsgICAyNDMxLDExfSwgeyAgICA2NzEsMTB9LCBcCisgICAgeyAgIDEzNDMsMTF9LCB7ICAgIDczNSwxMH0sIHsgICAxNDcxLCA5fSwgeyAgIDI5NDMsMTJ9LCBcCisgICAgeyAgICAzODMsMTF9LCB7ICAgIDg2MywxMn0sIHsgICAgNDQ3LDExfSwgeyAgICA5NTksMTB9LCBcCisgICAgeyAgIDE5MTksMTN9LCB7ICAgIDI1NSwxMn0sIHsgICAgNTExLDExfSwgeyAgIDEwODcsMTJ9LCBcCisgICAgeyAgICA1NzUsMTF9LCB7ICAgMTIxNSwxMH0sIHsgICAyNDMxLDEyfSwgeyAgICA2MzksMTF9LCBcCisgICAgeyAgIDEzNDMsMTJ9LCB7ICAgIDcwMywxMX0sIHsgICAxNDcxLDEwfSwgeyAgIDI5NDMsIDl9LCBcCisgICAgeyAgIDU4ODcsMTJ9LCB7ICAgIDc2NywxMX0sIHsgICAxNTk5LDEyfSwgeyAgICA4MzEsMTF9LCBcCisgICAgeyAgIDE3MjcsMTJ9LCB7ICAgIDk1OSwxMX0sIHsgICAxOTE5LDEwfSwgeyAgIDM4MzksMTR9LCBcCisgICAgeyAgICAyNTUsMTN9LCB7ICAgIDUxMSwxMn0sIHsgICAxMjE1LDExfSwgeyAgIDI0MzEsMTN9LCBcCisgICAgeyAgICA2MzksMTJ9LCB7ICAgMTQ3MSwxMX0sIHsgICAyOTQzLDEwfSwgeyAgIDU4ODcsMTN9LCBcCisgICAgeyAgICA3NjcsMTJ9LCB7ICAgMTcyNywxM30sIHsgICAgODk1LDEyfSwgeyAgIDE5MTksMTF9LCBcCisgICAgeyAgIDM4MzksMTR9LCB7ICAgIDUxMSwxM30sIHsgICAxMDIzLDEyfSwgeyAgIDIxMTEsMTN9LCBcCisgICAgeyAgIDExNTEsMTJ9LCB7ICAgMjQzMSwxM30sIHsgICAxMjc5LDEyfSwgeyAgIDI2MjMsMTN9LCBcCisgICAgeyAgIDE0MDcsMTJ9LCB7ICAgMjk0MywxMX0sIHsgICA1ODg3LDE0fSwgeyAgICA3NjcsMTN9LCBcCisgICAgeyAgIDE2NjMsMTJ9LCB7ICAgMzQ1NSwxM30sIHsgICAxOTE5LDEyfSwgeyAgIDM4MzksMTV9LCBcCisgICAgeyAgICA1MTEsMTR9LCB7ICAgMTAyMywxM30sIHsgICAyNDMxLDE0fSwgeyAgIDEyNzksMTN9LCBcCisgICAgeyAgIDI5NDMsMTJ9LCB7ICAgNTg4NywxNH0sIHsgICAxNTM1LDEzfSwgeyAgIDM0NTUsMTR9LCBcCisgICAgeyAgIDE3OTEsMTN9LCB7ICAgMzgzOSwxMn0sIHsgICA3Njc5LDEzfSwgeyAgIDM5NjcsMTJ9LCBcCisgICAgeyAgIDc5MzUsMTF9LCB7ICAxNTg3MSwxNX0sIHsgICAxMDIzLDE0fSwgeyAgIDIwNDcsMTN9LCBcCisgICAgeyAgIDQyMjMsMTR9LCB7ICAgMjMwMywxM30sIHsgICA0OTkxLDEyfSwgeyAgIDk5ODMsMTR9LCBcCisgICAgeyAgIDI4MTUsMTN9LCB7ICAgNTg4NywxNX0sIHsgICAxNTM1LDE0fSwgeyAgIDM4MzksMTN9LCBcCisgICAgeyAgIDc5MzUsMTJ9LCB7ICAxNTg3MSwxNn0gfQorI2RlZmluZSBTUVJfRkZUX1RBQkxFM19TSVpFIDE3OAorI2RlZmluZSBTUVJfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMzcxMgorCisjZGVmaW5lIE1VTExPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICA0CisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDYyCisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgICA4OTA3CisjZGVmaW5lIFNRUkxPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICA4CisjZGVmaW5lIFNRUkxPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTA3CisjZGVmaW5lIFNRUkxPX1NRUl9USFJFU0hPTEQgICAgICAgICAgICAgICA2NjMzCisKKyNkZWZpbmUgRENfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNTQKKyNkZWZpbmUgRENfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAyMDYKKyNkZWZpbmUgRENfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNTUKKyNkZWZpbmUgRENfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMzYKKworI2RlZmluZSBJTlZfTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICA3NAorI2RlZmluZSBJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDIxMgorI2RlZmluZSBJTlZfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDIwNAorCisjZGVmaW5lIEJJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgMjkyCisjZGVmaW5lIFJFRENfMV9UT19SRURDX05fVEhSRVNIT0xEICAgICAgICAgIDY3CisKKyNkZWZpbmUgTVVfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE0NDIKKyNkZWZpbmUgTVVfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgIDE1MjgKKyNkZWZpbmUgTVVQSV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgOTcKKyNkZWZpbmUgTVVfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgIDExNDIKKyNkZWZpbmUgTVVfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE0NzAKKworI2RlZmluZSBQT1dNX1NFQ19UQUJMRSAgMSwxNiw5NiwzODYsMTU1NQorCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgIDE2CisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgMzAzCisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgNzQ4CisKKyNkZWZpbmUgRkFDX0RTQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAxNDEKKyNkZWZpbmUgRkFDX09ERF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgNTUKKworI2RlZmluZSBNQVRSSVgyMl9TVFJBU1NFTl9USFJFU0hPTEQgICAgICAgICAyMAorI2RlZmluZSBIR0NEMl9ESVYxX01FVEhPRCAgICAgICAgICAgICAgICAgICAgMSAgLyogMTQuMDMlIGZhc3RlciB0aGFuIDMgKi8KKyNkZWZpbmUgSEdDRF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgICAxMDMKKyNkZWZpbmUgSEdDRF9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMjcKKyNkZWZpbmUgSEdDRF9SRURVQ0VfVEhSRVNIT0xEICAgICAgICAgICAgIDMwMTQKKyNkZWZpbmUgR0NEX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAzOTYKKyNkZWZpbmUgR0NERVhUX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyNjUKKyNkZWZpbmUgSkFDT0JJX0JBU0VfTUVUSE9EICAgICAgICAgICAgICAgICAgIDEgIC8qIDQ3Ljg4JSBmYXN0ZXIgdGhhbiA0ICovCisKKy8qIFR1bmV1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCB0b29rIDI5MDE0IHNlY29uZHMgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L1JFQURNRSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzhhNTg2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvUkVBRE1FCkBAIC0wLDAgKzEsNzQgQEAKK0NvcHlyaWdodCAyMDAzLCAyMDA0LCAyMDA2LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworCisKKworCQkJQU1ENjQgTVBOIFNVQlJPVVRJTkVTCisKKworVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgbXBuIGZ1bmN0aW9ucyBmb3IgQU1ENjQgY2hpcHMuICBJdCBpcyBhbHNvIHVzZWZ1bAorZm9yIDY0LWJpdCBQZW50aXVtcywgYW5kICJDb3JlIDIiLgorCisKKwkJICAgICBSRUxFVkFOVCBPUFRJTUlaQVRJT04gSVNTVUVTCisKK1RoZSBPcHRlcm9uIGFuZCBBdGhsb242NCBjYW4gc3VzdGFpbiB1cCB0byAzIGluc3RydWN0aW9ucyBwZXIgY3ljbGUsIGJ1dCBpbgorcHJhY3RpY2UgdGhhdCBpcyBvbmx5IHBvc3NpYmxlIGZvciBpbnRlZ2VyIGluc3RydWN0aW9ucy4gIEJ1dCBhbG1vc3QgYW55Cit0aHJlZSBpbnRlZ2VyIGluc3RydWN0aW9ucyBjYW4gaXNzdWUgc2ltdWx0YW5lb3VzbHksIGluY2x1ZGluZyBhbnkgMyBBTFUKK29wZXJhdGlvbnMsIGluY2x1ZGluZyBzaGlmdHMuICBVcCB0byB0d28gbWVtb3J5IG9wZXJhdGlvbnMgY2FuIGlzc3VlIGVhY2gKK2N5Y2xlLgorCitTY2hlZHVsaW5nIHR5cGljYWxseSByZXF1aXJlcyB0aGF0IGxvYWQtdXNlIGluc3RydWN0aW9ucyBhcmUgc3BsaXQgaW50bworc2VwYXJhdGUgbG9hZCBhbmQgdXNlIGluc3RydWN0aW9ucy4gIFRoYXQgcmVxdWlyZXMgbW9yZSBkZWNvZGUgcmVzb3VyY2VzLAorYW5kIGl0IGlzIHJhcmVseSBhIHdpbi4gIE9wdGVyb24vQXRobG9uNjQgaGF2ZSBkZWVwIG91dC1vZi1vcmRlciBjb3JlLgorCisKK09wdGltaXppbmcgZm9yIDY0LWJpdCBQZW50aXVtNCBpcyBwcm9iYWJseSBhIHdhc3RlIG9mIHRpbWUsIGFzIHRoZSBtb3N0Citjcml0aWNhbCBpbnN0cnVjdGlvbnMgYXJlIHZlcnkgcG9vcmx5IGltcGxlbWVudGVkIGhlcmUuICBQZXJoYXBzIHdlIGNvdWxkCitzYXZlIGEgY3ljbGUgb3IgdHdvLCBidXQgdGhlIG1vc3QgY29tbW9uIGxvb3BzIG5vdyBydW4gYXQgYmV0d2VlbiAxMCBhbmQgMjIKK2N5Y2xlcywgc28gYSBzYXZlZCBjeWNsZSBpc24ndCB0b28gZXhjaXRpbmcuCisKKworVGhlIG5ldyBzcGluIG9mIHRoZSB2ZW5lcmFibGUgUDYgY29yZSwgdGhlICJDb3JlIDIiIGlzIG11Y2ggYmV0dGVyIHRoYW4gdGhlCitQZW50aXVtNCBmb3IgdGhlIEdNUCBsb29wcy4gIEl0cyBpbnRlZ2VyIHBpcGVsaW5lIGlzIHNvbWV3aGF0IHNpbWlsYXIgdG8gdG8KK3RoZSBPcHRlcm9uL0F0aGxvbjY0IHBpcGVsaW5lLCBleGNlcHQgdGhhdCB0aGUgR01QIGZhdm91cml0ZXMgQURDL1NCQiBhbmQKK01VTCBhcmUgc2xvd2VyLiAgRnVydGhlcm1vcmUsIGFuIElOQy9ERUMgZm9sbG93ZWQgYnkgQURDL1NCQiBpbmN1ciBhCitwaXBlbGluZSBzdGFsbCBvZiBhcm91bmQgMTAgY3ljbGVzLiAgVGhlIGRlZmF1bHQgbXBuX2FkZF9uIGFuZCBtcG5fc3ViX24KK2NvZGUgc3VmZmVycyBiYWRseSBmcm9tIHRoZSBzdGFsbC4gIFRoZSBjb2RlIGluIHRoZSBjb3JlMiBzdWJkaXJlY3RvcnkgdXNlcwordGhlIGFsbW9zdCBmb3Jnb3R0ZW4gaW5zdHJ1Y3Rpb24gSlJDWFogZm9yIGxvb3AgY29udHJvbCwgYW5kIHVwZGF0ZXMgdGhlCitpbmR1Y3Rpb24gdmFyaWFibGUgdXNpbmcgTEVBLgorCisKKworUkVGRVJFTkNFUworCisiU3lzdGVtIFYgQXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZSBBTUQ2NCBBcmNoaXRlY3R1cmUgUHJvY2Vzc29yCitTdXBwbGVtZW50IiwgZHJhZnQgdmVyc2lvbiAwLjk5LCBEZWNlbWJlciAyMDA3LgoraHR0cDovL3d3dy54ODYtNjQub3JnL2RvY3VtZW50YXRpb24vYWJpLnBkZgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYWRkYWRkbXVsXzFtc2IwLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2FkZGFkZG11bF8xbXNiMC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdjMjFiNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2FkZGFkZG11bF8xbXNiMC5hc20KQEAgLTAsMCArMSwxNzAgQEAKK2RubCAgQU1ENjQgbXBuX2FkZGFkZG11bF8xbXNiMCwgUiA9IEF1ICsgQnYsIHUsdiA8IDJeNjMuCisKK2RubCAgQ29weXJpZ2h0IDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIEFNRCBLOCxLOQkgMi4xNjcKK0MgQU1EIEsxMAkgMi4xNjcKK0MgSW50ZWwgUDQJMTIuMAorQyBJbnRlbCBjb3JlMgkgNC4wCitDIEludGVsIGNvcmVpCSA/CitDIEludGVsIGF0b20JID8KK0MgVklBIG5hbm8JID8KKworQyBUT0RPCitDICAqIFBlcmhhcHMgaGFuZGxlIHZhcmlvdXMgbiBtb2QgMyBzaXplcyBiZXR0ZXIuICBUaGUgY29kZSBub3cgaXMgdG9vIGxhcmdlLgorCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLAlgJXJkaScpCitkZWZpbmUoYGFwJywJYCVyc2knKQorZGVmaW5lKGBicF9wYXJhbScsIGAlcmR4JykKK2RlZmluZShgbicsCWAlcmN4JykKK2RlZmluZShgdTAnLAlgJXI4JykKK2RlZmluZShgdjAnLAlgJXI5JykKKworCitkZWZpbmUoYGJwJywgYCVyYnAnKQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigxNikKK1BST0xPR1VFKG1wbl9hZGRhZGRtdWxfMW1zYjApCisJcHVzaAklcjEyCisJcHVzaAklcmJwCisKKwlsZWEJKGFwLG4sOCksIGFwCisJbGVhCShicF9wYXJhbSxuLDgpLCBicAorCWxlYQkocnAsbiw4KSwgcnAKKwluZWcJbgorCisJbW92CShhcCxuLDgpLCAlcmF4CisJbXVsCSVyOAorCW1vdgklcmF4LCAlcjEyCisJbW92CShicCxuLDgpLCAlcmF4CisJbW92CSVyZHgsICVyMTAKKwlhZGQJJDMsIG4KKwlqbnMJTChlbmQpCisKKwlBTElHTigxNikKK0wodG9wKToJbXVsCSVyOQorCWFkZAklcmF4LCAlcjEyCisJbW92CS0xNihhcCxuLDgpLCAlcmF4CisJYWRjCSVyZHgsICVyMTAKKwltb3YJJXIxMiwgLTI0KHJwLG4sOCkKKwltdWwJJXI4CisJYWRkCSVyYXgsICVyMTAKKwltb3YJLTE2KGJwLG4sOCksICVyYXgKKwltb3YJJDAsIFIzMiglcjExKQorCWFkYwklcmR4LCAlcjExCisJbXVsCSVyOQorCWFkZAklcmF4LCAlcjEwCisJbW92CS04KGFwLG4sOCksICVyYXgKKwlhZGMJJXJkeCwgJXIxMQorCW1vdgklcjEwLCAtMTYocnAsbiw4KQorCW11bAklcjgKKwlhZGQJJXJheCwgJXIxMQorCW1vdgktOChicCxuLDgpLCAlcmF4CisJbW92CSQwLCBSMzIoJXIxMikKKwlhZGMJJXJkeCwgJXIxMgorCW11bAklcjkKKwlhZGQJJXJheCwgJXIxMQorCWFkYwklcmR4LCAlcjEyCisJbW92CShhcCxuLDgpLCAlcmF4CisJbXVsCSVyOAorCWFkZAklcmF4LCAlcjEyCisJbW92CSVyMTEsIC04KHJwLG4sOCkKKwltb3YJKGJwLG4sOCksICVyYXgKKwltb3YJJDAsIFIzMiglcjEwKQorCWFkYwklcmR4LCAlcjEwCisJYWRkCSQzLCBuCisJanMJTCh0b3ApCisKK0woZW5kKToJY21wCSQxLCBSMzIobikKKwlqYQkyZgorCWp6CTFmCisKKwltdWwJJXI5CisJYWRkCSVyYXgsICVyMTIKKwltb3YJLTE2KGFwKSwgJXJheAorCWFkYwklcmR4LCAlcjEwCisJbW92CSVyMTIsIC0yNChycCkKKwltdWwJJXI4CisJYWRkCSVyYXgsICVyMTAKKwltb3YJLTE2KGJwKSwgJXJheAorCW1vdgkkMCwgUjMyKCVyMTEpCisJYWRjCSVyZHgsICVyMTEKKwltdWwJJXI5CisJYWRkCSVyYXgsICVyMTAKKwltb3YJLTgoYXApLCAlcmF4CisJYWRjCSVyZHgsICVyMTEKKwltb3YJJXIxMCwgLTE2KHJwKQorCW11bAklcjgKKwlhZGQJJXJheCwgJXIxMQorCW1vdgktOChicCksICVyYXgKKwltb3YJJDAsIFIzMiglcjEyKQorCWFkYwklcmR4LCAlcjEyCisJbXVsCSVyOQorCWFkZAklcmF4LCAlcjExCisJYWRjCSVyZHgsICVyMTIKKwltb3YJJXIxMSwgLTgocnApCisJbW92CSVyMTIsICVyYXgKKwlwb3AJJXJicAorCXBvcAklcjEyCisJcmV0CisKKzE6CW11bAklcjkKKwlhZGQJJXJheCwgJXIxMgorCW1vdgktOChhcCksICVyYXgKKwlhZGMJJXJkeCwgJXIxMAorCW1vdgklcjEyLCAtMTYocnApCisJbXVsCSVyOAorCWFkZAklcmF4LCAlcjEwCisJbW92CS04KGJwKSwgJXJheAorCW1vdgkkMCwgUjMyKCVyMTEpCisJYWRjCSVyZHgsICVyMTEKKwltdWwJJXI5CisJYWRkCSVyYXgsICVyMTAKKwlhZGMJJXJkeCwgJXIxMQorCW1vdgklcjEwLCAtOChycCkKKwltb3YJJXIxMSwgJXJheAorCXBvcAklcmJwCisJcG9wCSVyMTIKKwlyZXQKKworMjoJbXVsCSVyOQorCWFkZAklcmF4LCAlcjEyCisJbW92CSVyMTIsIC04KHJwKQorCWFkYwklcmR4LCAlcjEwCisJbW92CSVyMTAsICVyYXgKKwlwb3AJJXJicAorCXBvcAklcjEyCisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9hb3JybHNoMV9uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2FvcnJsc2gxX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlZTA4NzIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9hb3JybHNoMV9uLmFzbQpAQCAtMCwwICsxLDE3MCBAQAorZG5sICBBTUQ2NCBtcG5fYWRkbHNoMV9uIC0tIHJwW10gPSB1cFtdICsgKHZwW10gPDwgMSkKK2RubCAgQU1ENjQgbXBuX3JzYmxzaDFfbiAtLSBycFtdID0gKHZwW10gPDwgMSkgLSB1cFtdCisKK2RubCAgQ29weXJpZ2h0IDIwMDMsIDIwMDUtMjAwOSwgMjAxMSwgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBBTUQgSzgsSzkJIDIKK0MgQU1EIEsxMAkgMgorQyBBTUQgYmQxCSA/CitDIEFNRCBib2JjYXQJID8KK0MgSW50ZWwgUDQJIDEzCitDIEludGVsIGNvcmUyCSAzLjQ1CitDIEludGVsIE5ITQkgPworQyBJbnRlbCBTQlIJID8KK0MgSW50ZWwgYXRvbQkgPworQyBWSUEgbmFubwkgPworCisKK0MgU29tZXRpbWVzIHNwZWVkIGRlZ2VuZXJhdGVzLCBzdXBwb3NlZGx5IHJlbGF0ZWQgdG8gdGhhdCBzb21lIG9wZXJhbmQKK0MgYWxpZ25tZW50cyBjYXVzZSBjYWNoZSBjb25mbGljdHMuCisKK0MgVGhlIHNwZWVkIGlzIGxpbWl0ZWQgYnkgZGVjb2RpbmcvaXNzdWUgYmFuZHdpZHRoLiAgVGhlcmUgYXJlIDIyIGluc3RydWN0aW9ucworQyBpbiB0aGUgbG9vcCwgd2hpY2ggY29ycmVzcG9uZHMgdG8gY2VpbCgyMi8zKS80ID0gMS44MyBjL2wuCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsYCVyZGknKQorZGVmaW5lKGB1cCcsYCVyc2knKQorZGVmaW5lKGB2cCcsYCVyZHgnKQorZGVmaW5lKGBuJywgYCVyY3gnKQorCitpZmRlZihgT1BFUkFUSU9OX2FkZGxzaDFfbicsIGAKKyAgZGVmaW5lKEFERFNVQiwJYWRkKQorICBkZWZpbmUoQURDU0JCLAlhZGMpCisgIGRlZmluZShmdW5jLAkJbXBuX2FkZGxzaDFfbiknKQoraWZkZWYoYE9QRVJBVElPTl9yc2Jsc2gxX24nLCBgCisgIGRlZmluZShBRERTVUIsCXN1YikKKyAgZGVmaW5lKEFEQ1NCQiwJc2JiKQorICBkZWZpbmUoZnVuYywJCW1wbl9yc2Jsc2gxX24pJykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fYWRkbHNoMV9uIG1wbl9yc2Jsc2gxX24pCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUoZnVuYykKKwlGVU5DX0VOVFJZKDQpCisJcHVzaAklcmJwCisKKwltb3YJKHZwKSwgJXI4CisJbW92CVIzMihuKSwgUjMyKCVyYXgpCisJbGVhCShycCxuLDgpLCBycAorCWxlYQkodXAsbiw4KSwgdXAKKwlsZWEJKHZwLG4sOCksIHZwCisJbmVnCW4KKwl4b3IJUjMyKCVyYnApLCBSMzIoJXJicCkKKwlhbmQJJDMsIFIzMiglcmF4KQorCWplCUwoYjAwKQorCWNtcAkkMiwgUjMyKCVyYXgpCisJamMJTChiMDEpCisJamUJTChiMTApCisKK0woYjExKToJYWRkCSVyOCwgJXI4CisJbW92CTgodnAsbiw4KSwgJXI5CisJYWRjCSVyOSwgJXI5CisJbW92CTE2KHZwLG4sOCksICVyMTAKKwlhZGMJJXIxMCwgJXIxMAorCXNiYglSMzIoJXJheCksIFIzMiglcmF4KQlDIHNhdmUgc2N5CisJQUREU1VCCSh1cCxuLDgpLCAlcjgKKwlBRENTQkIJOCh1cCxuLDgpLCAlcjkKKwltb3YJJXI4LCAocnAsbiw4KQorCW1vdgklcjksIDgocnAsbiw4KQorCUFEQ1NCQgkxNih1cCxuLDgpLCAlcjEwCisJbW92CSVyMTAsIDE2KHJwLG4sOCkKKwlzYmIJUjMyKCVyYnApLCBSMzIoJXJicCkJQyBzYXZlIGFjeQorCWFkZAkkMywgbgorCWptcAlMKGVudCkKKworTChiMTApOglhZGQJJXI4LCAlcjgKKwltb3YJOCh2cCxuLDgpLCAlcjkKKwlhZGMJJXI5LCAlcjkKKwlzYmIJUjMyKCVyYXgpLCBSMzIoJXJheCkJQyBzYXZlIHNjeQorCUFERFNVQgkodXAsbiw4KSwgJXI4CisJQURDU0JCCTgodXAsbiw4KSwgJXI5CisJbW92CSVyOCwgKHJwLG4sOCkKKwltb3YJJXI5LCA4KHJwLG4sOCkKKwlzYmIJUjMyKCVyYnApLCBSMzIoJXJicCkJQyBzYXZlIGFjeQorCWFkZAkkMiwgbgorCWptcAlMKGVudCkKKworTChiMDEpOglhZGQJJXI4LCAlcjgKKwlzYmIJUjMyKCVyYXgpLCBSMzIoJXJheCkJQyBzYXZlIHNjeQorCUFERFNVQgkodXAsbiw4KSwgJXI4CisJbW92CSVyOCwgKHJwLG4sOCkKKwlzYmIJUjMyKCVyYnApLCBSMzIoJXJicCkJQyBzYXZlIGFjeQorCWluYwluCitMKGVudCk6CWpucwlMKGVuZCkKKworCUFMSUdOKDE2KQorTCh0b3ApOglhZGQJUjMyKCVyYXgpLCBSMzIoJXJheCkJQyByZXN0b3JlIHNjeQorCisJbW92CSh2cCxuLDgpLCAlcjgKK0woYjAwKToJYWRjCSVyOCwgJXI4CisJbW92CTgodnAsbiw4KSwgJXI5CisJYWRjCSVyOSwgJXI5CisJbW92CTE2KHZwLG4sOCksICVyMTAKKwlhZGMJJXIxMCwgJXIxMAorCW1vdgkyNCh2cCxuLDgpLCAlcjExCisJYWRjCSVyMTEsICVyMTEKKworCXNiYglSMzIoJXJheCksIFIzMiglcmF4KQlDIHNhdmUgc2N5CisJYWRkCVIzMiglcmJwKSwgUjMyKCVyYnApCUMgcmVzdG9yZSBhY3kKKworCUFEQ1NCQgkodXAsbiw4KSwgJXI4CisJbm9wCQkJCUMgSGFtbWVyIHNwZWVkdXAhCisJQURDU0JCCTgodXAsbiw4KSwgJXI5CisJbW92CSVyOCwgKHJwLG4sOCkKKwltb3YJJXI5LCA4KHJwLG4sOCkKKwlBRENTQkIJMTYodXAsbiw4KSwgJXIxMAorCUFEQ1NCQgkyNCh1cCxuLDgpLCAlcjExCisJbW92CSVyMTAsIDE2KHJwLG4sOCkKKwltb3YJJXIxMSwgMjQocnAsbiw4KQorCisJc2JiCVIzMiglcmJwKSwgUjMyKCVyYnApCUMgc2F2ZSBhY3kKKwlhZGQJJDQsIG4KKwlqcwlMKHRvcCkKKworTChlbmQpOgoraWZkZWYoYE9QRVJBVElPTl9hZGRsc2gxX24nLGAKKwlhZGQJUjMyKCVyYnApLCBSMzIoJXJheCkKKwluZWcJUjMyKCVyYXgpJykKK2lmZGVmKGBPUEVSQVRJT05fcnNibHNoMV9uJyxgCisJc3ViCVIzMiglcmF4KSwgUjMyKCVyYnApCisJbW92c2xxCVIzMiglcmJwKSwgJXJheCcpCisKKwlwb3AJJXJicAorCUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9hb3JybHNoMl9uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2FvcnJsc2gyX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5OWU5NzIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9hb3JybHNoMl9uLmFzbQpAQCAtMCwwICsxLDUzIEBACitkbmwgIEFNRDY0IG1wbl9hZGRsc2gyX24gLS0gcnBbXSA9IHVwW10gKyAodnBbXSA8PCAyKQorZG5sICBBTUQ2NCBtcG5fcnNibHNoMl9uIC0tIHJwW10gPSAodnBbXSA8PCAyKSAtIHVwW10KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDktMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitkZWZpbmUoTFNILCAyKQorZGVmaW5lKFJTSCwgNjIpCisKK2lmZGVmKGBPUEVSQVRJT05fYWRkbHNoMl9uJyxgCisgIGRlZmluZShBRERTVUIsCWFkZCkKKyAgZGVmaW5lKEFEQ1NCQiwJYWRjKQorICBkZWZpbmUoZnVuYywJCW1wbl9hZGRsc2gyX24pJykKK2lmZGVmKGBPUEVSQVRJT05fcnNibHNoMl9uJyxgCisgIGRlZmluZShBRERTVUIsCXN1YikKKyAgZGVmaW5lKEFEQ1NCQiwJc2JiKQorICBkZWZpbmUoZnVuYywJCW1wbl9yc2Jsc2gyX24pJykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fYWRkbHNoMl9uIG1wbl9yc2Jsc2gyX24pCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK2luY2x1ZGVfbXBuKGB4ODZfNjQvYW9ycmxzaENfbi5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYW9ycmxzaENfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9hb3JybHNoQ19uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTAwMTU0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYW9ycmxzaENfbi5hc20KQEAgLTAsMCArMSwxNzIgQEAKK2RubCAgQU1ENjQgbXBuX2FkZGxzaENfbiAtLSBycFtdID0gdXBbXSArICh2cFtdIDw8IEMpCitkbmwgIEFNRDY0IG1wbl9yc2Jsc2hDX24gLS0gcnBbXSA9ICh2cFtdIDw8IEMpIC0gdXBbXQorCitkbmwgIENvcHlyaWdodCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCitDCSAgICAgY3ljbGVzL2xpbWIKK0MgQU1EIEs4LEs5CSAyLjEKK0MgQU1EIEsxMAkgMi4wCitDIEFNRCBiZDEJfjIuNworQyBBTUQgYmQyCX4yLjcKK0MgQU1EIGJkMwkgPworQyBBTUQgYmQ0CSA/CitDIEFNRCB6ZW4JIDIuMAorQyBBTUQgYnQxCSAzLjMKK0MgQU1EIGJ0MgkgMy4wCitDIEludGVsIFA0CSA/CitDIEludGVsIFBOUgkgMy4wCitDIEludGVsIE5ITQkgMi43NQorQyBJbnRlbCBTQlIJIDIuNTUKK0MgSW50ZWwgSUJSCSAyLjQ5CitDIEludGVsIEhXTAkgMi4yNQorQyBJbnRlbCBCV0wJIDEuODkKK0MgSW50ZWwgU0tMCSAxLjkwCitDIEludGVsIGF0b20JIDguNAorQyBJbnRlbCBTTE0JIDQuMAorQyBWSUEgbmFubwkgPworCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLAlgJXJkaScpCitkZWZpbmUoYHVwJywJYCVyc2knKQorZGVmaW5lKGB2cCcsCWAlcmR4JykKK2RlZmluZShgbicsCWAlcmN4JykKKworZGVmaW5lKE0sIGV2YWwobTRfbHNoaWZ0KDEsTFNIKSkpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUoZnVuYykKKwlGVU5DX0VOVFJZKDQpCisJcHVzaAklcjEyCisJcHVzaAklcjEzCisJcHVzaAklcjE0CisJcHVzaAklcjE1CisKKwltb3YJKHZwKSwgJXI4CisJbGVhCSgsJXI4LE0pLCAlcjEyCisJc2hyCSRSU0gsICVyOAorCisJbW92CVIzMihuKSwgUjMyKCVyYXgpCisJbGVhCShycCxuLDgpLCBycAorCWxlYQkodXAsbiw4KSwgdXAKKwlsZWEJKHZwLG4sOCksIHZwCisJbmVnCW4KKwlhbmQJJDMsIFI4KCVyYXgpCisJamUJTChiMDApCisJY21wCSQyLCBSOCglcmF4KQorCWpjCUwoYjAxKQorCWplCUwoYjEwKQorCitMKGIxMSk6CW1vdgk4KHZwLG4sOCksICVyMTAKKwlsZWEJKCVyOCwlcjEwLE0pLCAlcjE0CisJc2hyCSRSU0gsICVyMTAKKwltb3YJMTYodnAsbiw4KSwgJXIxMQorCWxlYQkoJXIxMCwlcjExLE0pLCAlcjE1CisJc2hyCSRSU0gsICVyMTEKKwlBRERTVUIJKHVwLG4sOCksICVyMTIKKwlBRENTQkIJOCh1cCxuLDgpLCAlcjE0CisJQURDU0JCCTE2KHVwLG4sOCksICVyMTUKKwlzYmIJUjMyKCVyYXgpLCBSMzIoJXJheCkJCSAgQyBzYXZlIGNhcnJ5IGZvciBuZXh0CisJbW92CSVyMTIsIChycCxuLDgpCisJbW92CSVyMTQsIDgocnAsbiw4KQorCW1vdgklcjE1LCAxNihycCxuLDgpCisJYWRkCSQzLCBuCisJanMJTCh0b3ApCisJam1wCUwoZW5kKQorCitMKGIwMSk6CW1vdgklcjgsICVyMTEKKwlBRERTVUIJKHVwLG4sOCksICVyMTIKKwlzYmIJUjMyKCVyYXgpLCBSMzIoJXJheCkJCSAgQyBzYXZlIGNhcnJ5IGZvciBuZXh0CisJbW92CSVyMTIsIChycCxuLDgpCisJYWRkCSQxLCBuCisJanMJTCh0b3ApCisJam1wCUwoZW5kKQorCitMKGIxMCk6CW1vdgk4KHZwLG4sOCksICVyMTEKKwlsZWEJKCVyOCwlcjExLE0pLCAlcjE1CisJc2hyCSRSU0gsICVyMTEKKwlBRERTVUIJKHVwLG4sOCksICVyMTIKKwlBRENTQkIJOCh1cCxuLDgpLCAlcjE1CisJc2JiCVIzMiglcmF4KSwgUjMyKCVyYXgpCQkgIEMgc2F2ZSBjYXJyeSBmb3IgbmV4dAorCW1vdgklcjEyLCAocnAsbiw4KQorCW1vdgklcjE1LCA4KHJwLG4sOCkKKwlhZGQJJDIsIG4KKwlqcwlMKHRvcCkKKwlqbXAJTChlbmQpCisKK0woYjAwKToJbW92CTgodnAsbiw4KSwgJXI5CisJbW92CTE2KHZwLG4sOCksICVyMTAKKwlqbXAJTChlMDApCisKKwlBTElHTigxNikKK0wodG9wKToJbW92CTE2KHZwLG4sOCksICVyMTAKKwltb3YJKHZwLG4sOCksICVyOAorCW1vdgk4KHZwLG4sOCksICVyOQorCWxlYQkoJXIxMSwlcjgsTSksICVyMTIKKwlzaHIJJFJTSCwgJXI4CitMKGUwMCk6CWxlYQkoJXI4LCVyOSxNKSwgJXIxMworCXNocgkkUlNILCAlcjkKKwltb3YJMjQodnAsbiw4KSwgJXIxMQorCWxlYQkoJXI5LCVyMTAsTSksICVyMTQKKwlzaHIJJFJTSCwgJXIxMAorCWxlYQkoJXIxMCwlcjExLE0pLCAlcjE1CisJc2hyCSRSU0gsICVyMTEKKwlhZGQJUjMyKCVyYXgpLCBSMzIoJXJheCkJCSAgQyByZXN0b3JlIGNhcnJ5CisJQURDU0JCCSh1cCxuLDgpLCAlcjEyCisJQURDU0JCCTgodXAsbiw4KSwgJXIxMworCUFEQ1NCQgkxNih1cCxuLDgpLCAlcjE0CisJQURDU0JCCTI0KHVwLG4sOCksICVyMTUKKwltb3YJJXIxMiwgKHJwLG4sOCkKKwltb3YJJXIxMywgOChycCxuLDgpCisJbW92CSVyMTQsIDE2KHJwLG4sOCkKKwlzYmIJUjMyKCVyYXgpLCBSMzIoJXJheCkJCSAgQyBzYXZlIGNhcnJ5IGZvciBuZXh0CisJbW92CSVyMTUsIDI0KHJwLG4sOCkKKwlhZGQJJDQsIG4KKwlqcwlMKHRvcCkKK0woZW5kKToKKworaWZlbHNlKEFERFNVQixhZGQsYAorCXN1YglSMzIoJXIxMSksIFIzMiglcmF4KQorCW5lZwlSMzIoJXJheCkKKycsYAorCWFkZAlSMzIoJXIxMSksIFIzMiglcmF4KQorCW1vdnNscQlSMzIoJXJheCksICVyYXgKKycpCisJcG9wCSVyMTUKKwlwb3AJJXIxNAorCXBvcAklcjEzCisJcG9wCSVyMTIKKwlGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYW9ycmxzaF9uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2FvcnJsc2hfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNhMTI4ZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2FvcnJsc2hfbi5hc20KQEAgLTAsMCArMSwxNzYgQEAKK2RubCAgQU1ENjQgbXBuX2FkZGxzaF9uIGFuZCBtcG5fcnNibHNoX24uICBSID0gVjJeayArLSBVLgorCitkbmwgIENvcHlyaWdodCAyMDA2LCAyMDEwLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDCSAgICAgY3ljbGVzL2xpbWIKK0MgQU1EIEs4LEs5CSAzLjEJPCAzLjg1IGZvciBsc2hpZnQgKyBhZGRfbgorQyBBTUQgSzEwCSAzLjEJPCAzLjg1IGZvciBsc2hpZnQgKyBhZGRfbgorQyBJbnRlbCBQNAkxNC42CT4gNy4zMyBmb3IgbHNoaWZ0ICsgYWRkX24KK0MgSW50ZWwgY29yZTIJIDMuODcJPiAzLjI3IGZvciBsc2hpZnQgKyBhZGRfbgorQyBJbnRlbCBOSE0JIDQJPiAzLjc1IGZvciBsc2hpZnQgKyBhZGRfbgorQyBJbnRlbCBTQlIJKDUuOCkJPiAzLjQ2IGZvciBsc2hpZnQgKyBhZGRfbgorQyBJbnRlbCBhdG9tCSg3Ljc1KQk8IDguNzUgZm9yIGxzaGlmdCArIGFkZF9uCitDIFZJQSBuYW5vCSA0LjcJPCA2LjI1IGZvciBsc2hpZnQgKyBhZGRfbgorCitDIFRoaXMgd2FzIHdyaXR0ZW4gcXVpY2tseSBhbmQgbm90IG9wdGltaXplZCBhdCBhbGwuICBTdXJlbHkgb25lIGNvdWxkIGdldAorQyBjbG9zZXIgdG8gMyBjL2wgb3IgcGVyaGFwcyBldmVuIHVuZGVyIDMgYy9sLiAgSWRlYXM6CitDICAgMSkgVXNlIGluZGV4aW5nIHRvIHNhdmUgdGhlIDMgTEVBCitDICAgMikgV3JpdGUgcmVhc29uYWJsZSBmZWVkLWluIGNvZGUKK0MgICAzKSBCZSBtb3JlIGNsZXZlciBhYm91dCByZWdpc3RlciB1c2FnZQorQyAgIDQpIFVucm9sbCBtb3JlLCBoYW5kbGluZyBDTCBuZWdhdGlvbiwgY2Fycnkgc2F2ZS9yZXN0b3JlIGNvc3QgbXVjaCBub3cKK0MgICA1KSBSZXNjaGVkdWxlCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsCWAlcmRpJykKK2RlZmluZShgdXAnLAlgJXJzaScpCitkZWZpbmUoYHZwJywJYCVyZHgnKQorZGVmaW5lKGBuJywJYCVyY3gnKQorZGVmaW5lKGBjbnQnLAlgJXI4JykKKworaWZkZWYoYE9QRVJBVElPTl9hZGRsc2hfbicsYAorICBkZWZpbmUoQURDU0JCLCAgICAgICBgYWRjJykKKyAgZGVmaW5lKGZ1bmMsIG1wbl9hZGRsc2hfbikKKycpCitpZmRlZihgT1BFUkFUSU9OX3JzYmxzaF9uJyxgCisgIGRlZmluZShBRENTQkIsICAgICAgIGBzYmInKQorICBkZWZpbmUoZnVuYywgbXBuX3JzYmxzaF9uKQorJykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fYWRkbHNoX24gbXBuX3JzYmxzaF9uKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigxNikKK1BST0xPR1VFKGZ1bmMpCisJRlVOQ19FTlRSWSg0KQorSUZET1MoYAltb3YJNTYoJXJzcCksICVyOGQJJykKKwlwdXNoCSVyMTIKKwlwdXNoCSVyMTMKKwlwdXNoCSVyMTQKKwlwdXNoCSVyYnAKKwlwdXNoCSVyYngKKworCW1vdgluLCAlcmF4CisJeG9yCVIzMiglcmJ4KSwgUjMyKCVyYngpCUMgY2xlYXIgY2Fycnkgc2F2ZSByZWdpc3RlcgorCW1vdglSMzIoJXI4KSwgUjMyKCVyY3gpCUMgc2hpZnQgY291bnQKKwl4b3IJUjMyKCVyYnApLCBSMzIoJXJicCkJQyBsaW1iIGNhcnJ5CisKKwltb3YJUjMyKCVyYXgpLCBSMzIoJXIxMSkKKwlhbmQJJDMsIFIzMiglcjExKQorCWplCUwoNCkKKwlzdWIJJDEsIFIzMiglcjExKQorCitMKDAxMik6CW1vdgkodnApLCAlcjgKKwltb3YJJXI4LCAlcjEyCisJc2hsCVI4KCVyY3gpLCAlcjgKKwlvcgklcmJwLCAlcjgKKwluZWcJUjgoJXJjeCkKKwltb3YJJXIxMiwgJXJicAorCXNocglSOCglcmN4KSwgJXJicAorCW5lZwlSOCglcmN4KQorCWFkZAlSMzIoJXJieCksIFIzMiglcmJ4KQorCUFEQ1NCQgkodXApLCAlcjgKKwltb3YJJXI4LCAocnApCisJc2JiCVIzMiglcmJ4KSwgUjMyKCVyYngpCisJbGVhCTgodXApLCB1cAorCWxlYQk4KHZwKSwgdnAKKwlsZWEJOChycCksIHJwCisJc3ViCSQxLCBSMzIoJXIxMSkKKwlqbmMJTCgwMTIpCisKK0woNCk6CXN1YgkkNCwgJXJheAorCWpjCUwoZW5kKQorCisJQUxJR04oMTYpCitMKHRvcCk6CW1vdgkodnApLCAlcjgKKwltb3YJJXI4LCAlcjEyCisJbW92CTgodnApLCAlcjkKKwltb3YJJXI5LCAlcjEzCisJbW92CTE2KHZwKSwgJXIxMAorCW1vdgklcjEwLCAlcjE0CisJbW92CTI0KHZwKSwgJXIxMQorCisJc2hsCVI4KCVyY3gpLCAlcjgKKwlzaGwJUjgoJXJjeCksICVyOQorCXNobAlSOCglcmN4KSwgJXIxMAorCW9yCSVyYnAsICVyOAorCW1vdgklcjExLCAlcmJwCisJc2hsCVI4KCVyY3gpLCAlcjExCisKKwluZWcJUjgoJXJjeCkKKworCXNocglSOCglcmN4KSwgJXIxMgorCXNocglSOCglcmN4KSwgJXIxMworCXNocglSOCglcmN4KSwgJXIxNAorCXNocglSOCglcmN4KSwgJXJicAkJQyB1c2VkIG5leHQgaXRlcmF0aW9uCisKKwlvcgklcjEyLCAlcjkKKwlvcgklcjEzLCAlcjEwCisJb3IJJXIxNCwgJXIxMQorCisJbmVnCVI4KCVyY3gpCisKKwlhZGQJUjMyKCVyYngpLCBSMzIoJXJieCkJQyByZXN0b3JlIGNhcnJ5IGZsYWcKKworCUFEQ1NCQgkodXApLCAlcjgKKwlBRENTQkIJOCh1cCksICVyOQorCUFEQ1NCQgkxNih1cCksICVyMTAKKwlBRENTQkIJMjQodXApLCAlcjExCisKKwltb3YJJXI4LCAocnApCisJbW92CSVyOSwgOChycCkKKwltb3YJJXIxMCwgMTYocnApCisJbW92CSVyMTEsIDI0KHJwKQorCisJc2JiCVIzMiglcmJ4KSwgUjMyKCVyYngpCUMgc2F2ZSBjYXJyeSBmbGFnCisKKwlsZWEJMzIodXApLCB1cAorCWxlYQkzMih2cCksIHZwCisJbGVhCTMyKHJwKSwgcnAKKworCXN1YgkkNCwgJXJheAorCWpuYwlMKHRvcCkKKworTChlbmQpOglhZGQJUjMyKCVyYngpLCBSMzIoJXJieCkKKwlBRENTQkIJJDAsICVyYnAKKwltb3YJJXJicCwgJXJheAorCXBvcAklcmJ4CisJcG9wCSVyYnAKKwlwb3AJJXIxNAorCXBvcAklcjEzCisJcG9wCSVyMTIKKwlGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYW9yc19lcnIxX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYW9yc19lcnIxX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZDBiM2YKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9hb3JzX2VycjFfbi5hc20KQEAgLTAsMCArMSwyMjUgQEAKK2RubCAgQU1ENjQgbXBuX2FkZF9lcnIxX24sIG1wbl9zdWJfZXJyMV9uCisKK2RubCAgQ29udHJpYnV0ZWQgYnkgRGF2aWQgSGFydmV5LgorCitkbmwgIENvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBBTUQgSzgsSzkJIDIuNzUgKGRlZ2VuZXJhdGVzIHRvIDMgYy9sIGZvciBzb21lIGFsaWdubWVudHMpCitDIEFNRCBLMTAJID8KK0MgSW50ZWwgUDQJID8KK0MgSW50ZWwgY29yZTIJID8KK0MgSW50ZWwgY29yZWkJID8KK0MgSW50ZWwgYXRvbQkgPworQyBWSUEgbmFubwkgPworCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsCWAlcmRpJykKK2RlZmluZShgdXAnLAlgJXJzaScpCitkZWZpbmUoYHZwJywJYCVyZHgnKQorZGVmaW5lKGBlcCcsCWAlcmN4JykKK2RlZmluZShgeXAnLAlgJXI4JykKK2RlZmluZShgbicsCWAlcjknKQorZGVmaW5lKGBjeV9wYXJhbScsCWA4KCVyc3ApJykKKworZGVmaW5lKGBlbCcsCWAlcmJ4JykKK2RlZmluZShgZWgnLAlgJXJicCcpCitkZWZpbmUoYHQwJywJYCVyMTAnKQorZGVmaW5lKGB0MScsCWAlcjExJykKK2RlZmluZShgdDInLAlgJXIxMicpCitkZWZpbmUoYHQzJywJYCVyMTMnKQorZGVmaW5lKGB3MCcsCWAlcjE0JykKK2RlZmluZShgdzEnLAlgJXIxNScpCisKK2lmZGVmKGBPUEVSQVRJT05fYWRkX2VycjFfbicsIGAKKwlkZWZpbmUoQURDU0JCLAkgICAgICBhZGMpCisJZGVmaW5lKGZ1bmMsCSAgICAgIG1wbl9hZGRfZXJyMV9uKScpCitpZmRlZihgT1BFUkFUSU9OX3N1Yl9lcnIxX24nLCBgCisJZGVmaW5lKEFEQ1NCQiwJICAgICAgc2JiKQorCWRlZmluZShmdW5jLAkgICAgICBtcG5fc3ViX2VycjFfbiknKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRfZXJyMV9uIG1wbl9zdWJfZXJyMV9uKQorCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUoZnVuYykKKwltb3YJY3lfcGFyYW0sICVyYXgKKworCXB1c2gJJXJieAorCXB1c2gJJXJicAorCXB1c2gJJXIxMgorCXB1c2gJJXIxMworCXB1c2gJJXIxNAorCXB1c2gJJXIxNQorCisJbGVhCSh1cCxuLDgpLCB1cAorCWxlYQkodnAsbiw4KSwgdnAKKwlsZWEJKHJwLG4sOCksIHJwCisKKwltb3YJUjMyKG4pLCBSMzIoJXIxMCkKKwlhbmQJJDMsIFIzMiglcjEwKQorCWp6CUwoMG1vZDQpCisJY21wCSQyLCBSMzIoJXIxMCkKKwlqYwlMKDFtb2Q0KQorCWp6CUwoMm1vZDQpCitMKDNtb2Q0KToKKwl4b3IJUjMyKGVsKSwgUjMyKGVsKQorCXhvcglSMzIoZWgpLCBSMzIoZWgpCisJeG9yCVIzMih0MCksIFIzMih0MCkKKwl4b3IJUjMyKHQxKSwgUjMyKHQxKQorCWxlYQktMjQoeXAsbiw4KSwgeXAKKwluZWcJbgorCisJc2hyCSQxLCAlYWwJCSAgIEMgcmVzdG9yZSBjYXJyeQorCW1vdgkodXAsbiw4KSwgdzAKKwltb3YJOCh1cCxuLDgpLCB3MQorCUFEQ1NCQgkodnAsbiw4KSwgdzAKKwltb3YJdzAsIChycCxuLDgpCisJY21vdmMJMTYoeXApLCBlbAorCUFEQ1NCQgk4KHZwLG4sOCksIHcxCisJbW92CXcxLCA4KHJwLG4sOCkKKwljbW92Ywk4KHlwKSwgdDAKKwltb3YJMTYodXAsbiw4KSwgdzAKKwlBRENTQkIJMTYodnAsbiw4KSwgdzAKKwltb3YJdzAsIDE2KHJwLG4sOCkKKwljbW92YwkoeXApLCB0MQorCXNldGMJJWFsCQkgICBDIHNhdmUgY2FycnkKKwlhZGQJdDAsIGVsCisJYWRjCSQwLCBlaAorCWFkZAl0MSwgZWwKKwlhZGMJJDAsIGVoCisKKwlhZGQJJDMsIG4KKwlqbnoJTChsb29wKQorCWptcAlMKGVuZCkKKworCUFMSUdOKDE2KQorTCgwbW9kNCk6CisJeG9yCVIzMihlbCksIFIzMihlbCkKKwl4b3IJUjMyKGVoKSwgUjMyKGVoKQorCWxlYQkoeXAsbiw4KSwgeXAKKwluZWcJbgorCWptcAlMKGxvb3ApCisKKwlBTElHTigxNikKK0woMW1vZDQpOgorCXhvcglSMzIoZWwpLCBSMzIoZWwpCisJeG9yCVIzMihlaCksIFIzMihlaCkKKwlsZWEJLTgoeXAsbiw4KSwgeXAKKwluZWcJbgorCisJc2hyCSQxLCAlYWwJCSAgIEMgcmVzdG9yZSBjYXJyeQorCW1vdgkodXAsbiw4KSwgdzAKKwlBRENTQkIJKHZwLG4sOCksIHcwCisJbW92CXcwLCAocnAsbiw4KQorCWNtb3ZjCSh5cCksIGVsCisJc2V0YwklYWwJCSAgIEMgc2F2ZSBjYXJyeQorCisJYWRkCSQxLCBuCisJam56CUwobG9vcCkKKwlqbXAJTChlbmQpCisKKwlBTElHTigxNikKK0woMm1vZDQpOgorCXhvcglSMzIoZWwpLCBSMzIoZWwpCisJeG9yCVIzMihlaCksIFIzMihlaCkKKwl4b3IJUjMyKHQwKSwgUjMyKHQwKQorCWxlYQktMTYoeXAsbiw4KSwgeXAKKwluZWcJbgorCisJc2hyCSQxLCAlYWwJCSAgIEMgcmVzdG9yZSBjYXJyeQorCW1vdgkodXAsbiw4KSwgdzAKKwltb3YJOCh1cCxuLDgpLCB3MQorCUFEQ1NCQgkodnAsbiw4KSwgdzAKKwltb3YJdzAsIChycCxuLDgpCisJY21vdmMJOCh5cCksIGVsCisJQURDU0JCCTgodnAsbiw4KSwgdzEKKwltb3YJdzEsIDgocnAsbiw4KQorCWNtb3ZjCSh5cCksIHQwCisJc2V0YwklYWwJCSAgIEMgc2F2ZSBjYXJyeQorCWFkZAl0MCwgZWwKKwlhZGMJJDAsIGVoCisKKwlhZGQJJDIsIG4KKwlqbnoJTChsb29wKQorCWptcAlMKGVuZCkKKworCUFMSUdOKDMyKQorTChsb29wKToKKwlzaHIJJDEsICVhbAkJICAgQyByZXN0b3JlIGNhcnJ5CisJbW92CS04KHlwKSwgdDAKKwltb3YJJDAsIFIzMih0MykKKwltb3YJKHVwLG4sOCksIHcwCisJbW92CTgodXAsbiw4KSwgdzEKKwlBRENTQkIJKHZwLG4sOCksIHcwCisJY21vdm5jCXQzLCB0MAorCUFEQ1NCQgk4KHZwLG4sOCksIHcxCisJbW92CS0xNih5cCksIHQxCisJbW92CXcwLCAocnAsbiw4KQorCW1vdgkxNih1cCxuLDgpLCB3MAorCW1vdgl3MSwgOChycCxuLDgpCisJY21vdm5jCXQzLCB0MQorCW1vdgktMjQoeXApLCB0MgorCUFEQ1NCQgkxNih2cCxuLDgpLCB3MAorCWNtb3ZuYwl0MywgdDIKKwltb3YJMjQodXAsbiw4KSwgdzEKKwlBRENTQkIJMjQodnAsbiw4KSwgdzEKKwljbW92YwktMzIoeXApLCB0MworCXNldGMJJWFsCQkgICBDIHNhdmUgY2FycnkKKwlhZGQJdDAsIGVsCisJYWRjCSQwLCBlaAorCWFkZAl0MSwgZWwKKwlhZGMJJDAsIGVoCisJYWRkCXQyLCBlbAorCWFkYwkkMCwgZWgKKwltb3YJdzAsIDE2KHJwLG4sOCkKKwlhZGQJdDMsIGVsCisJbGVhCS0zMih5cCksIHlwCisJYWRjCSQwLCBlaAorCW1vdgl3MSwgMjQocnAsbiw4KQorCWFkZAkkNCwgbgorCWpueglMKGxvb3ApCisKK0woZW5kKToKKwltb3YJZWwsIChlcCkKKwltb3YJZWgsIDgoZXApCisKKwlwb3AJJXIxNQorCXBvcAklcjE0CisJcG9wCSVyMTMKKwlwb3AJJXIxMgorCXBvcAklcmJwCisJcG9wCSVyYngKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2FvcnNfZXJyMl9uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2FvcnNfZXJyMl9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTVjMmE0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYW9yc19lcnIyX24uYXNtCkBAIC0wLDAgKzEsMTcyIEBACitkbmwgIEFNRDY0IG1wbl9hZGRfZXJyMl9uLCBtcG5fc3ViX2VycjJfbgorCitkbmwgIENvbnRyaWJ1dGVkIGJ5IERhdmlkIEhhcnZleS4KKworZG5sICBDb3B5cmlnaHQgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIKK0MgQU1EIEs4LEs5CSA0LjUKK0MgQU1EIEsxMAkgPworQyBJbnRlbCBQNAkgPworQyBJbnRlbCBjb3JlMgkgNi45CitDIEludGVsIGNvcmVpCSA/CitDIEludGVsIGF0b20JID8KK0MgVklBIG5hbm8JID8KKworCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLAlgJXJkaScpCitkZWZpbmUoYHVwJywJYCVyc2knKQorZGVmaW5lKGB2cCcsCWAlcmR4JykKK2RlZmluZShgZXAnLAlgJXJjeCcpCitkZWZpbmUoYHlwMScsCWAlcjgnKQorZGVmaW5lKGB5cDInLCAgIGAlcjknKQorZGVmaW5lKGBuX3BhcmFtJywgICAgIGA4KCVyc3ApJykKK2RlZmluZShgY3lfcGFyYW0nLCAgICBgMTYoJXJzcCknKQorCitkZWZpbmUoYGN5MScsICAgYCVyMTQnKQorZGVmaW5lKGBjeTInLCAgIGAlcmF4JykKKworZGVmaW5lKGBuJywgICAgIGAlcjEwJykKKworZGVmaW5lKGB3JywgICAgIGAlcmJ4JykKK2RlZmluZShgZTFsJywJYCVyYnAnKQorZGVmaW5lKGBlMWgnLAlgJXIxMScpCitkZWZpbmUoYGUybCcsCWAlcjEyJykKK2RlZmluZShgZTJoJywJYCVyMTMnKQorCisKK2lmZGVmKGBPUEVSQVRJT05fYWRkX2VycjJfbicsIGAKKwlkZWZpbmUoQURDU0JCLAkgICAgICBhZGMpCisJZGVmaW5lKGZ1bmMsCSAgICAgIG1wbl9hZGRfZXJyMl9uKScpCitpZmRlZihgT1BFUkFUSU9OX3N1Yl9lcnIyX24nLCBgCisJZGVmaW5lKEFEQ1NCQiwJICAgICAgc2JiKQorCWRlZmluZShmdW5jLAkgICAgICBtcG5fc3ViX2VycjJfbiknKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRfZXJyMl9uIG1wbl9zdWJfZXJyMl9uKQorCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUoZnVuYykKKwltb3YJY3lfcGFyYW0sIGN5MgorCW1vdgluX3BhcmFtLCBuCisKKwlwdXNoCSVyYngKKwlwdXNoCSVyYnAKKwlwdXNoCSVyMTIKKwlwdXNoCSVyMTMKKwlwdXNoCSVyMTQKKworCXhvcglSMzIoZTFsKSwgUjMyKGUxbCkKKwl4b3IJUjMyKGUxaCksIFIzMihlMWgpCisJeG9yCVIzMihlMmwpLCBSMzIoZTJsKQorCXhvcglSMzIoZTJoKSwgUjMyKGUyaCkKKworCXN1Ygl5cDEsIHlwMgorCisJbGVhCShycCxuLDgpLCBycAorCWxlYQkodXAsbiw4KSwgdXAKKwlsZWEJKHZwLG4sOCksIHZwCisKKwl0ZXN0CSQxLCBuCisJam56CUwob2RkKQorCisJbGVhCS04KHlwMSxuLDgpLCB5cDEKKwluZWcJbgorCWptcAlMKHRvcCkKKworCUFMSUdOKDE2KQorTChvZGQpOgorCWxlYQktMTYoeXAxLG4sOCksIHlwMQorCW5lZwluCisJc2hyCSQxLCBjeTIKKwltb3YJKHVwLG4sOCksIHcKKwlBRENTQkIJKHZwLG4sOCksIHcKKwljbW92Ywk4KHlwMSksIGUxbAorCWNtb3ZjCTgoeXAxLHlwMiksIGUybAorCW1vdgl3LCAocnAsbiw4KQorCXNiYgljeTIsIGN5MgorCWluYwluCisJanoJTChlbmQpCisKKwlBTElHTigxNikKK0wodG9wKToKKwltb3YJKHVwLG4sOCksIHcKKwlzaHIJJDEsIGN5MgkJQyByZXN0b3JlIGNhcnJ5CisJQURDU0JCCSh2cCxuLDgpLCB3CisJbW92CXcsIChycCxuLDgpCisJc2JiCWN5MSwgY3kxCUMgZ2VuZXJhdGUgbWFzaywgcHJlc2VydmUgQ0YKKworCW1vdgk4KHVwLG4sOCksIHcKKwlBRENTQkIJOCh2cCxuLDgpLCB3CisJbW92CXcsIDgocnAsbiw4KQorCXNiYgljeTIsIGN5MglDIGdlbmVyYXRlIG1hc2ssIHByZXNlcnZlIENGCisKKwltb3YJKHlwMSksIHcJQyAoZTFoOmUxbCkgKz0gY3kxICogeXAxIGxpbWIKKwlhbmQJY3kxLCB3CisJYWRkCXcsIGUxbAorCWFkYwkkMCwgZTFoCisKKwlhbmQJKHlwMSx5cDIpLCBjeTEJQyAoZTJoOmUybCkgKz0gY3kxICogeXAyIGxpbWIKKwlhZGQJY3kxLCBlMmwKKwlhZGMJJDAsIGUyaAorCisJbW92CS04KHlwMSksIHcJQyAoZTFoOmUxbCkgKz0gY3kyICogbmV4dCB5cDEgbGltYgorCWFuZAljeTIsIHcKKwlhZGQJdywgZTFsCisJYWRjCSQwLCBlMWgKKworCW1vdgktOCh5cDEseXAyKSwgdwlDIChlMmg6ZTJsKSArPSBjeTIgKiBuZXh0IHlwMiBsaW1iCisJYW5kCWN5MiwgdworCWFkZAl3LCBlMmwKKwlhZGMJJDAsIGUyaAorCisJYWRkCSQyLCBuCisJbGVhCS0xNih5cDEpLCB5cDEKKwlqbnoJTCh0b3ApCitMKGVuZCk6CisKKwltb3YJZTFsLCAoZXApCisJbW92CWUxaCwgOChlcCkKKwltb3YJZTJsLCAxNihlcCkKKwltb3YJZTJoLCAyNChlcCkKKworCWFuZAkkMSwgJWVheAlDIHJldHVybiBjYXJyeQorCisJcG9wCSVyMTQKKwlwb3AJJXIxMworCXBvcAklcjEyCisJcG9wCSVyYnAKKwlwb3AJJXJieAorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYW9yc19lcnIzX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYW9yc19lcnIzX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNmQwYzUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9hb3JzX2VycjNfbi5hc20KQEAgLTAsMCArMSwxNTYgQEAKK2RubCAgQU1ENjQgbXBuX2FkZF9lcnIzX24sIG1wbl9zdWJfZXJyM19uCisKK2RubCAgQ29udHJpYnV0ZWQgYnkgRGF2aWQgSGFydmV5LgorCitkbmwgIENvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBBTUQgSzgsSzkJIDcuMAorQyBBTUQgSzEwCSA/CitDIEludGVsIFA0CSA/CitDIEludGVsIGNvcmUyCSA/CitDIEludGVsIGNvcmVpCSA/CitDIEludGVsIGF0b20JID8KK0MgVklBIG5hbm8JID8KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywJYCVyZGknKQorZGVmaW5lKGB1cCcsCWAlcnNpJykKK2RlZmluZShgdnAnLAlgJXJkeCcpCitkZWZpbmUoYGVwJywJYCVyY3gnKQorZGVmaW5lKGB5cDEnLAlgJXI4JykKK2RlZmluZShgeXAyJywgICBgJXI5JykKK2RlZmluZShgeXAzX3BhcmFtJywgICBgOCglcnNwKScpCitkZWZpbmUoYG5fcGFyYW0nLCAgICAgYDE2KCVyc3ApJykKK2RlZmluZShgY3lfcGFyYW0nLCAgICBgMjQoJXJzcCknKQorCitkZWZpbmUoYG4nLCAgICAgYCVyMTAnKQorZGVmaW5lKGB5cDMnLCAgIGAlcmN4JykKK2RlZmluZShgdCcsICAgICBgJXJieCcpCisKK2RlZmluZShgZTFsJywJYCVyYnAnKQorZGVmaW5lKGBlMWgnLAlgJXIxMScpCitkZWZpbmUoYGUybCcsCWAlcjEyJykKK2RlZmluZShgZTJoJywJYCVyMTMnKQorZGVmaW5lKGBlM2wnLCAgIGAlcjE0JykKK2RlZmluZShgZTNoJywgICBgJXIxNScpCisKKworCitpZmRlZihgT1BFUkFUSU9OX2FkZF9lcnIzX24nLCBgCisJZGVmaW5lKEFEQ1NCQiwJICAgICAgYWRjKQorCWRlZmluZShmdW5jLAkgICAgICBtcG5fYWRkX2VycjNfbiknKQoraWZkZWYoYE9QRVJBVElPTl9zdWJfZXJyM19uJywgYAorCWRlZmluZShBRENTQkIsCSAgICAgIHNiYikKKwlkZWZpbmUoZnVuYywJICAgICAgbXBuX3N1Yl9lcnIzX24pJykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fYWRkX2VycjNfbiBtcG5fc3ViX2VycjNfbikKKworCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigxNikKK1BST0xPR1VFKGZ1bmMpCisJbW92CWN5X3BhcmFtLCAlcmF4CisJbW92CW5fcGFyYW0sIG4KKworCXB1c2gJJXJieAorCXB1c2gJJXJicAorCXB1c2gJJXIxMgorCXB1c2gJJXIxMworCXB1c2gJJXIxNAorCXB1c2gJJXIxNQorCisJcHVzaAllcAorCW1vdgk2NCglcnNwKSwgeXAzICAgICAgIEMgbG9hZCBmcm9tIHlwM19wYXJhbQorCisJeG9yCVIzMihlMWwpLCBSMzIoZTFsKQorCXhvcglSMzIoZTFoKSwgUjMyKGUxaCkKKwl4b3IJUjMyKGUybCksIFIzMihlMmwpCisJeG9yCVIzMihlMmgpLCBSMzIoZTJoKQorCXhvcglSMzIoZTNsKSwgUjMyKGUzbCkKKwl4b3IJUjMyKGUzaCksIFIzMihlM2gpCisKKwlzdWIJeXAxLCB5cDIKKwlzdWIJeXAxLCB5cDMKKworCWxlYQktOCh5cDEsbiw4KSwgeXAxCisJbGVhCShycCxuLDgpLCBycAorCWxlYQkodXAsbiw4KSwgdXAKKwlsZWEJKHZwLG4sOCksIHZwCisJbmVnCW4KKworCUFMSUdOKDE2KQorTCh0b3ApOgorCXNocgkkMSwgJXJheAkJQyByZXN0b3JlIGNhcnJ5CisJbW92CSh1cCxuLDgpLCAlcmF4CisJQURDU0JCCSh2cCxuLDgpLCAlcmF4CisJbW92CSVyYXgsIChycCxuLDgpCisJc2JiCSVyYXgsICVyYXgJCUMgc2F2ZSBjYXJyeSBhbmQgZ2VuZXJhdGUgbWFzaworCisJbW92CSh5cDEpLCB0CisJYW5kCSVyYXgsIHQKKwlhZGQJdCwgZTFsCisJYWRjCSQwLCBlMWgKKworCW1vdgkoeXAxLHlwMiksIHQKKwlhbmQJJXJheCwgdAorCWFkZAl0LCBlMmwKKwlhZGMJJDAsIGUyaAorCisJbW92CSh5cDEseXAzKSwgdAorCWFuZAklcmF4LCB0CisJYWRkCXQsIGUzbAorCWFkYwkkMCwgZTNoCisKKwlsZWEJLTgoeXAxKSwgeXAxCisJaW5jCW4KKwlqbnogICAgIEwodG9wKQorCitMKGVuZCk6CisJYW5kCSQxLCAlZWF4CisJcG9wCWVwCisKKwltb3YJZTFsLCAoZXApCisJbW92CWUxaCwgOChlcCkKKwltb3YJZTJsLCAxNihlcCkKKwltb3YJZTJoLCAyNChlcCkKKwltb3YJZTNsLCAzMihlcCkKKwltb3YJZTNoLCA0MChlcCkKKworCXBvcAklcjE1CisJcG9wCSVyMTQKKwlwb3AJJXIxMworCXBvcAklcjEyCisJcG9wCSVyYnAKKwlwb3AJJXJieAorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYW9yc19uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2FvcnNfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVhMzE0YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2FvcnNfbi5hc20KQEAgLTAsMCArMSwxNzggQEAKK2RubCAgQU1ENjQgbXBuX2FkZF9uLCBtcG5fc3ViX24KKworZG5sICBDb3B5cmlnaHQgMjAwMy0yMDA1LCAyMDA3LCAyMDA4LCAyMDEwLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIEFNRCBLOCxLOQkgMS41CitDIEFNRCBLMTAJIDEuNQorQyBBTUQgYmQxCSAxLjgKK0MgQU1EIGJkMgkgMS43NAorQyBBTUQgYmQzCSA/CitDIEFNRCBiZDQJIDEuNzgKK0MgQU1EIHplbgkgMS41CitDIEFNRCBidDEJIDIuNTQKK0MgQU1EIGJ0MgkgMi4xNQorQyBJbnRlbCBQNAkxMS41CitDIEludGVsIGNvcmUyCSA0LjkKK0MgSW50ZWwgTkhNCSA1LjUzCitDIEludGVsIFNCUgkgMS41OQorQyBJbnRlbCBJQlIJIDEuNTUKK0MgSW50ZWwgSFdMCSAxLjQ0CitDIEludGVsIEJXTAkgMS4xNAorQyBJbnRlbCBTS0wJIDEuMjEKK0MgSW50ZWwgYXRvbQkgNAorQyBJbnRlbCBTTE0JIDMKK0MgVklBIG5hbm8JIDMuMjUKKworQyBUaGUgbG9vcCBvZiB0aGlzIGNvZGUgaXMgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGEgY29kZSBnZW5lcmF0aW9uIGFuZAorQyBvcHRpbWl6YXRpb24gdG9vbCBzdWl0ZSB3cml0dGVuIGJ5IERhdmlkIEhhcnZleSBhbmQgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsCWAlcmRpJykJQyByY3gKK2RlZmluZShgdXAnLAlgJXJzaScpCUMgcmR4CitkZWZpbmUoYHZwJywJYCVyZHgnKQlDIHI4CitkZWZpbmUoYG4nLAlgJXJjeCcpCUMgcjkKK2RlZmluZShgY3knLAlgJXI4JykJQyByc3ArNDAgICAgKG1wbl9hZGRfbmMgYW5kIG1wbl9zdWJfbmMpCisKK2lmZGVmKGBPUEVSQVRJT05fYWRkX24nLCBgCisJZGVmaW5lKEFEQ1NCQiwJICAgICAgYWRjKQorCWRlZmluZShmdW5jLAkgICAgICBtcG5fYWRkX24pCisJZGVmaW5lKGZ1bmNfbmMsCSAgICAgIG1wbl9hZGRfbmMpJykKK2lmZGVmKGBPUEVSQVRJT05fc3ViX24nLCBgCisJZGVmaW5lKEFEQ1NCQiwJICAgICAgc2JiKQorCWRlZmluZShmdW5jLAkgICAgICBtcG5fc3ViX24pCisJZGVmaW5lKGZ1bmNfbmMsCSAgICAgIG1wbl9zdWJfbmMpJykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fYWRkX24gbXBuX2FkZF9uYyBtcG5fc3ViX24gbXBuX3N1Yl9uYykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMTYpCitQUk9MT0dVRShmdW5jX25jKQorCUZVTkNfRU5UUlkoNCkKK0lGRE9TKGAJbW92CTU2KCVyc3ApLCAlcjgJJykKKwltb3YJUjMyKG4pLCBSMzIoJXJheCkKKwlzaHIJJDIsIG4KKwlhbmQJJDMsIFIzMiglcmF4KQorCWJ0CSQwLCAlcjgJCQlDIGN5IGZsYWcgPC0gY2FycnkgcGFyYW1ldGVyCisJanJjeHoJTChsdDQpCisKKwltb3YJKHVwKSwgJXI4CisJbW92CTgodXApLCAlcjkKKwlkZWMJbgorCWptcAlMKG1pZCkKKworRVBJTE9HVUUoKQorCUFMSUdOKDE2KQorUFJPTE9HVUUoZnVuYykKKwlGVU5DX0VOVFJZKDQpCisJbW92CVIzMihuKSwgUjMyKCVyYXgpCisJc2hyCSQyLCBuCisJYW5kCSQzLCBSMzIoJXJheCkKKwlqcmN4eglMKGx0NCkKKworCW1vdgkodXApLCAlcjgKKwltb3YJOCh1cCksICVyOQorCWRlYwluCisJam1wCUwobWlkKQorCitMKGx0NCk6CWRlYwlSMzIoJXJheCkKKwltb3YJKHVwKSwgJXI4CisJam56CUwoMikKKwlBRENTQkIJKHZwKSwgJXI4CisJbW92CSVyOCwgKHJwKQorCWFkYwlSMzIoJXJheCksIFIzMiglcmF4KQorCUZVTkNfRVhJVCgpCisJcmV0CisKK0woMik6CWRlYwlSMzIoJXJheCkKKwltb3YJOCh1cCksICVyOQorCWpueglMKDMpCisJQURDU0JCCSh2cCksICVyOAorCUFEQ1NCQgk4KHZwKSwgJXI5CisJbW92CSVyOCwgKHJwKQorCW1vdgklcjksIDgocnApCisJYWRjCVIzMiglcmF4KSwgUjMyKCVyYXgpCisJRlVOQ19FWElUKCkKKwlyZXQKKworTCgzKToJbW92CTE2KHVwKSwgJXIxMAorCUFEQ1NCQgkodnApLCAlcjgKKwlBRENTQkIJOCh2cCksICVyOQorCUFEQ1NCQgkxNih2cCksICVyMTAKKwltb3YJJXI4LCAocnApCisJbW92CSVyOSwgOChycCkKKwltb3YJJXIxMCwgMTYocnApCisJc2V0YwlSOCglcmF4KQorCUZVTkNfRVhJVCgpCisJcmV0CisKKwlBTElHTigxNikKK0wodG9wKToJQURDU0JCCSh2cCksICVyOAorCUFEQ1NCQgk4KHZwKSwgJXI5CisJQURDU0JCCTE2KHZwKSwgJXIxMAorCUFEQ1NCQgkyNCh2cCksICVyMTEKKwltb3YJJXI4LCAocnApCisJbGVhCTMyKHVwKSwgdXAKKwltb3YJJXI5LCA4KHJwKQorCW1vdgklcjEwLCAxNihycCkKKwlkZWMJbgorCW1vdgklcjExLCAyNChycCkKKwlsZWEJMzIodnApLCB2cAorCW1vdgkodXApLCAlcjgKKwltb3YJOCh1cCksICVyOQorCWxlYQkzMihycCksIHJwCitMKG1pZCk6CW1vdgkxNih1cCksICVyMTAKKwltb3YJMjQodXApLCAlcjExCisJam56CUwodG9wKQorCitMKGVuZCk6CWxlYQkzMih1cCksIHVwCisJQURDU0JCCSh2cCksICVyOAorCUFEQ1NCQgk4KHZwKSwgJXI5CisJQURDU0JCCTE2KHZwKSwgJXIxMAorCUFEQ1NCQgkyNCh2cCksICVyMTEKKwlsZWEJMzIodnApLCB2cAorCW1vdgklcjgsIChycCkKKwltb3YJJXI5LCA4KHJwKQorCW1vdgklcjEwLCAxNihycCkKKwltb3YJJXIxMSwgMjQocnApCisJbGVhCTMyKHJwKSwgcnAKKworCWluYwlSMzIoJXJheCkKKwlkZWMJUjMyKCVyYXgpCisJam56CUwobHQ0KQorCWFkYwlSMzIoJXJheCksIFIzMiglcmF4KQorCUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9hb3JzbXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYW9yc211bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmU0ZGM0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYW9yc211bF8xLmFzbQpAQCAtMCwwICsxLDE5MCBAQAorZG5sICBBTUQ2NCBtcG5fYWRkbXVsXzEgYW5kIG1wbl9zdWJtdWxfMS4KKworZG5sICBDb3B5cmlnaHQgMjAwMy0yMDA1LCAyMDA3LCAyMDA4LCAyMDExLCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBBTUQgSzgsSzkJIDIuNTIKK0MgQU1EIEsxMAkgMi41MQorQyBBTUQgYmQxCSA0LjQzCitDIEFNRCBiZDIJIDUuMDMJIDUuNjMKK0MgQU1EIGJkMwkgPworQyBBTUQgYmQ0CSA/CitDIEFNRCB6ZW4JID8KK0MgQU1EIGJvYmNhdAkgNi4yMAorQyBBTUQgamFndWFyCSA1LjU3CSA2LjU2CitDIEludGVsIFA0CTE0LjkJMTcuMQorQyBJbnRlbCBjb3JlMgkgNS4xNQorQyBJbnRlbCBOSE0JIDQuOTMKK0MgSW50ZWwgU0JSCSAzLjk1CitDIEludGVsIElCUgkgMy43NQorQyBJbnRlbCBIV0wJIDMuNjIKK0MgSW50ZWwgQldMCSAyLjUzCitDIEludGVsIFNLTAkgMi41MworQyBJbnRlbCBhdG9tCTIxLjMKK0MgSW50ZWwgU0xNCSA5LjAKK0MgVklBIG5hbm8JIDUuMAorCitDIFRoZSBsb29wIG9mIHRoaXMgY29kZSBpcyB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgYSBjb2RlIGdlbmVyYXRpb24gYW5kCitDIG9wdGltaXphdGlvbiB0b29sIHN1aXRlIHdyaXR0ZW4gYnkgRGF2aWQgSGFydmV5IGFuZCBUb3Jiam9ybiBHcmFubHVuZC4KKworQyBUT0RPCitDICAqIFRoZSBsb29wIGlzIGdyZWF0LCBidXQgdGhlIHByb2xvZ3VlIGFuZCBlcGlsb2d1ZSBjb2RlIHdhcyBxdWlja2x5IHdyaXR0ZW4uCitDICAgIFR1bmUgaXQhCisKK2RlZmluZShgcnAnLCAgICAgIGAlcmRpJykgICBDIHJjeAorZGVmaW5lKGB1cCcsICAgICAgYCVyc2knKSAgIEMgcmR4CitkZWZpbmUoYG5fcGFyYW0nLCBgJXJkeCcpICAgQyByOAorZGVmaW5lKGB2bCcsICAgICAgYCVyY3gnKSAgIEMgcjkKKworZGVmaW5lKGBuJywgICAgICAgYCVyMTEnKQorCitpZmRlZihgT1BFUkFUSU9OX2FkZG11bF8xJyxgCisgICAgICBkZWZpbmUoYEFERFNVQicsICAgICAgICBgYWRkJykKKyAgICAgIGRlZmluZShgZnVuYycsICBgbXBuX2FkZG11bF8xJykKKycpCitpZmRlZihgT1BFUkFUSU9OX3N1Ym11bF8xJyxgCisgICAgICBkZWZpbmUoYEFERFNVQicsICAgICAgICBgc3ViJykKKyAgICAgIGRlZmluZShgZnVuYycsICBgbXBuX3N1Ym11bF8xJykKKycpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FkZG11bF8xIG1wbl9zdWJtdWxfMSkKKworSUZET1MoYAlkZWZpbmUoYHVwJywgYGAlcnNpJycpCScpIGRubAorSUZET1MoYAlkZWZpbmUoYHJwJywgYGAlcmN4JycpCScpIGRubAorSUZET1MoYAlkZWZpbmUoYHZsJywgYGAlcjknJykJJykgZG5sCitJRkRPUyhgCWRlZmluZShgcjknLCBgYHJkaScnKQknKSBkbmwKK0lGRE9TKGAJZGVmaW5lKGBuJywgIGBgJXI4JycpCScpIGRubAorSUZET1MoYAlkZWZpbmUoYHI4JywgYGByMTEnJykJJykgZG5sCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUoZnVuYykKKworSUZET1MoYGBwdXNoCSVyc2kJCScnKQorSUZET1MoYGBwdXNoCSVyZGkJCScnKQorSUZET1MoYGBtb3YJJXJkeCwgJXJzaQknJykKKworCW1vdgkodXApLCAlcmF4CQlDIHJlYWQgZmlyc3QgdSBsaW1iIGVhcmx5CisJcHVzaAklcmJ4CitJRlNURChgCW1vdgluX3BhcmFtLCAlcmJ4ICAgJykJQyBtb3ZlIGF3YXkgbiBmcm9tIHJkeCwgbXVsIHVzZXMgaXQKK0lGRE9TKGAJbW92CW4sICVyYnggICAgICAgICAnKQorCW11bAl2bAorSUZTVEQoYAltb3YJJXJieCwgbiAgICAgICAgICcpCisKKwlhbmQJJDMsIFIzMiglcmJ4KQorCWp6CUwoYjApCisJY21wCSQyLCBSMzIoJXJieCkKKwlqeglMKGIyKQorCWpnCUwoYjMpCisKK0woYjEpOglkZWMJbgorCWpuZQlMKGd0MSkKKwlBRERTVUIJJXJheCwgKHJwKQorCWptcAlMKHJldCkKK0woZ3QxKToJbGVhCTgodXAsbiw4KSwgdXAKKwlsZWEJLTgocnAsbiw4KSwgcnAKKwluZWcJbgorCXhvcgklcjEwLCAlcjEwCisJeG9yCVIzMiglcmJ4KSwgUjMyKCVyYngpCisJbW92CSVyYXgsICVyOQorCW1vdgkodXAsbiw4KSwgJXJheAorCW1vdgklcmR4LCAlcjgKKwlqbXAJTChMMSkKKworTChiMCk6CWxlYQkodXAsbiw4KSwgdXAKKwlsZWEJLTE2KHJwLG4sOCksIHJwCisJbmVnCW4KKwl4b3IJJXIxMCwgJXIxMAorCW1vdgklcmF4LCAlcjgKKwltb3YJJXJkeCwgJXJieAorCWptcAkgTChMMCkKKworTChiMyk6CWxlYQktOCh1cCxuLDgpLCB1cAorCWxlYQktMjQocnAsbiw4KSwgcnAKKwluZWcJbgorCW1vdgklcmF4LCAlcmJ4CisJbW92CSVyZHgsICVyMTAKKwlqbXAJTChMMykKKworTChiMik6CWxlYQktMTYodXAsbiw4KSwgdXAKKwlsZWEJLTMyKHJwLG4sOCksIHJwCisJbmVnCW4KKwl4b3IJJXI4LCAlcjgKKwl4b3IJUjMyKCVyYngpLCBSMzIoJXJieCkKKwltb3YJJXJheCwgJXIxMAorCW1vdgkyNCh1cCxuLDgpLCAlcmF4CisJbW92CSVyZHgsICVyOQorCWptcAlMKEwyKQorCisJQUxJR04oMTYpCitMKHRvcCk6CUFERFNVQgklcjEwLCAocnAsbiw4KQorCWFkYwklcmF4LCAlcjkKKwltb3YJKHVwLG4sOCksICVyYXgKKwlhZGMJJXJkeCwgJXI4CisJbW92CSQwLCBSMzIoJXIxMCkKK0woTDEpOgltdWwJdmwKKwlBRERTVUIJJXI5LCA4KHJwLG4sOCkKKwlhZGMJJXJheCwgJXI4CisJYWRjCSVyZHgsICVyYngKK0woTDApOgltb3YJOCh1cCxuLDgpLCAlcmF4CisJbXVsCXZsCisJQUREU1VCCSVyOCwgMTYocnAsbiw4KQorCWFkYwklcmF4LCAlcmJ4CisJYWRjCSVyZHgsICVyMTAKK0woTDMpOgltb3YJMTYodXAsbiw4KSwgJXJheAorCW11bAl2bAorCUFERFNVQgklcmJ4LCAyNChycCxuLDgpCisJbW92CSQwLCBSMzIoJXI4KQkJQyB6ZXJvCisJbW92CSVyOCwgJXJieAkJQyB6ZXJvCisJYWRjCSVyYXgsICVyMTAKKwltb3YJMjQodXAsbiw4KSwgJXJheAorCW1vdgklcjgsICVyOQkJQyB6ZXJvCisJYWRjCSVyZHgsICVyOQorTChMMik6CW11bAl2bAorCWFkZAkkNCwgbgorCWpzCSBMKHRvcCkKKworCUFERFNVQgklcjEwLCAocnAsbiw4KQorCWFkYwklcmF4LCAlcjkKKwlhZGMJJXI4LCAlcmR4CisJQUREU1VCCSVyOSwgOChycCxuLDgpCitMKHJldCk6CWFkYwkkMCwgJXJkeAorCW1vdgklcmR4LCAlcmF4CisKKwlwb3AJJXJieAorSUZET1MoYGBwb3AJJXJkaQkJJycpCitJRkRPUyhgYHBvcAklcnNpCQknJykKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2F0b20vYWRkbXVsXzIuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYXRvbS9hZGRtdWxfMi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFkY2RjNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2F0b20vYWRkbXVsXzIuYXNtCkBAIC0wLDAgKzEsMTg2IEBACitkbmwgIEFNRDY0IG1wbl9hZGRtdWxfMiBvcHRpbWlzZWQgZm9yIEludGVsIEF0b20uCisKK2RubCAgQ29weXJpZ2h0IDIwMDgsIDIwMTEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIJYmVzdAorQyBBTUQgSzgsSzkKK0MgQU1EIEsxMAorQyBBTUQgYmQxCitDIEFNRCBiZDIKK0MgQU1EIGJvYmNhdAorQyBBTUQgamFndWFyCitDIEludGVsIFA0CitDIEludGVsIFBOUgorQyBJbnRlbCBOSE0KK0MgSW50ZWwgU0JSCitDIEludGVsIElCUgorQyBJbnRlbCBIV0wKK0MgSW50ZWwgQldMCitDIEludGVsIGF0b20JMTguOAkJdGhpcworQyBWSUEgbmFubworCitDIFRoZSBsb29wIG9mIHRoaXMgY29kZSBpcyB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgYSBjb2RlIGdlbmVyYXRpb24gYW5kCitDIG9wdGltaXNhdGlvbiB0b29sIHN1aXRlIHdyaXR0ZW4gYnkgRGF2aWQgSGFydmV5IGFuZCBUb3Jiam9ybiBHcmFubHVuZC4KKworZGVmaW5lKGBycCcsICAgICAgYCVyZGknKSAgIEMgcmN4CitkZWZpbmUoYHVwJywgICAgICBgJXJzaScpICAgQyByZHgKK2RlZmluZShgbl9wYXJhbScsIGAlcmR4JykgICBDIHI4CitkZWZpbmUoYHZwJywgICAgICBgJXJjeCcpICAgQyByOQorCitkZWZpbmUoYHYwJywgYCVyOCcpCitkZWZpbmUoYHYxJywgYCVyOScpCitkZWZpbmUoYHcwJywgYCVyYngnKQorZGVmaW5lKGB3MScsIGAlcmN4JykKK2RlZmluZShgdzInLCBgJXJicCcpCitkZWZpbmUoYHczJywgYCVyMTAnKQorZGVmaW5lKGBuJywgIGAlcjExJykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMTYpCitQUk9MT0dVRShtcG5fYWRkbXVsXzIpCisJRlVOQ19FTlRSWSg0KQorCXB1c2gJJXJieAorCXB1c2gJJXJicAorCisJbW92CSh1cCksICVyYXgKKworCW1vdgkodnApLCB2MAorCW1vdgk4KHZwKSwgdjEKKworCW1vdgluX3BhcmFtLCBuCisJbXVsCXYwCisKKwl0ZXN0CSQxLCBSOChuKQorCWpueglMKGJ4MSkKKworTChieDApOgl0ZXN0CSQyLCBSOChuKQorCWpueglMKGIxMCkKKworTChiMDApOgltb3YJJXJheCwgdzAKKwltb3YJKHVwKSwgJXJheAorCW1vdgklcmR4LCB3MQorCXhvcglSMzIodzIpLCBSMzIodzIpCisJbGVhCS04KHJwKSwgcnAKKwlqbXAJTChsbzApCisKK0woYjEwKToJbW92CSVyYXgsIHcyCisJbW92CSh1cCksICVyYXgKKwltb3YJJXJkeCwgdzMKKwl4b3IJUjMyKHcwKSwgUjMyKHcwKQorCWxlYQktMTYodXApLCB1cAorCWxlYQktMjQocnApLCBycAorCWptcAlMKGxvMikKKworTChieDEpOgl0ZXN0CSQyLCBSOChuKQorCWpueglMKGIxMSkKKworTChiMDEpOgltb3YJJXJheCwgdzMKKwltb3YJJXJkeCwgdzAKKwltb3YJKHVwKSwgJXJheAorCXhvcglSMzIodzEpLCBSMzIodzEpCisJbGVhCTgodXApLCB1cAorCWRlYwluCisJam1wCUwobG8xKQorCitMKGIxMSk6CW1vdgklcmF4LCB3MQorCW1vdgkodXApLCAlcmF4CisJbW92CSVyZHgsIHcyCisJeG9yCVIzMih3MyksIFIzMih3MykKKwlsZWEJLTgodXApLCB1cAorCWxlYQktMTYocnApLCBycAorCWptcAlMKGxvMykKKworCUFMSUdOKDE2KQorTCh0b3ApOgorTChsbzEpOgltdWwJdjEKKwlhZGQJdzMsIChycCkKKwltb3YJJDAsIFIzMih3MikKKwlhZGMJJXJheCwgdzAKKwltb3YJKHVwKSwgJXJheAorCWFkYwklcmR4LCB3MQorCW11bAl2MAorCWFkZAklcmF4LCB3MAorCW1vdgkodXApLCAlcmF4CisJYWRjCSVyZHgsIHcxCisJYWRjCSQwLCBSMzIodzIpCitMKGxvMCk6CW11bAl2MQorCWFkZAl3MCwgOChycCkKKwlhZGMJJXJheCwgdzEKKwltb3YJOCh1cCksICVyYXgKKwltb3YJJDAsIFIzMih3MykKKwlhZGMJJXJkeCwgdzIKKwltdWwJdjAKKwlhZGQJJXJheCwgdzEKKwltb3YJOCh1cCksICVyYXgKKwlhZGMJJXJkeCwgdzIKKwlhZGMJJDAsIFIzMih3MykKK0wobG8zKToJbXVsCXYxCisJYWRkCXcxLCAxNihycCkKKwlhZGMJJXJheCwgdzIKKwltb3YJMTYodXApLCAlcmF4CisJbW92CSQwLCBSMzIodzApCisJYWRjCSVyZHgsIHczCisJbXVsCXYwCisJYWRkCSVyYXgsIHcyCisJbW92CTE2KHVwKSwgJXJheAorCWFkYwklcmR4LCB3MworCWFkYwkkMCwgUjMyKHcwKQorTChsbzIpOgltdWwJdjEKKwlhZGQJdzIsIDI0KHJwKQorCWFkYwklcmF4LCB3MworCW1vdgkyNCh1cCksICVyYXgKKwlhZGMJJXJkeCwgdzAKKwltb3YJJDAsIFIzMih3MSkKKwlsZWEJMzIocnApLCBycAorCW11bAl2MAorCWxlYQkzMih1cCksIHVwCisJYWRkCSVyYXgsIHczCisJYWRjCSVyZHgsIHcwCisJbW92CS04KHVwKSwgJXJheAorCWFkYwkkMCwgUjMyKHcxKQorCXN1YgkkNCwgbgorCWphCUwodG9wKQorCitMKGVuZCk6CW11bAl2MQorCWFkZAl3MywgKHJwKQorCWFkYwklcmF4LCB3MAorCWFkYwklcmR4LCB3MQorCW1vdgl3MCwgOChycCkKKwltb3YJdzEsICVyYXgKKwlwb3AJJXJicAorCXBvcAklcmJ4CisJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2F0b20vYW9ycmxzaDFfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9hdG9tL2FvcnJsc2gxX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NGRlMTkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9hdG9tL2FvcnJsc2gxX24uYXNtCkBAIC0wLDAgKzEsMjM4IEBACitkbmwgIEFNRDY0IG1wbl9hZGRsc2gxX24sIG1wbl9yc2Jsc2gxX24gb3B0aW1pc2VkIGZvciBJbnRlbCBBdG9tLgorZG5sICBVc2VkIGFsc28gZm9yIEFNRCBiZDEuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqb3JuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDExLCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgVE9ETworQyAgKiBUaGlzIGNvZGUgaXMgc2xpZ2h0bHkgbGFyZ2UgYXQgNDMzIGJ5dGVzLgorQyAgKiBzdWJsc2gxX24uYXNtIGFuZCB0aGlzIGZpbGUgdXNlIHRoZSBzYW1lIGJhc2ljIHBhdHRlcm4uCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBBTUQgSzgsSzkJID8KK0MgQU1EIEsxMAkgPworQyBBTUQgYmQxCSAyLjMKK0MgQU1EIGJvYmNhdAkgPworQyBJbnRlbCBQNAkgPworQyBJbnRlbCBjb3JlMgkgPworQyBJbnRlbCBOSE0JID8KK0MgSW50ZWwgU0JSCSA/CitDIEludGVsIGF0b20JIDQuODc1CSg0Ljc1IGlzIHByb2JhYmx5IHBvc3NpYmxlKQorQyBWSUEgbmFubwkgPworCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLCAgICAgICBgJXJkaScpCitkZWZpbmUoYHVwJywgICAgICAgYCVyc2knKQorZGVmaW5lKGB2cCcsICAgICAgIGAlcmR4JykKK2RlZmluZShgbicsICAgICAgICBgJXJjeCcpCitkZWZpbmUoYGN5JywgICAgICAgYCVyOCcpCisKK2lmZGVmKGBPUEVSQVRJT05fYWRkbHNoMV9uJywgYAorICBkZWZpbmUoQUREU1VCLAlhZGQpCisgIGRlZmluZShBRENTQkIsCWFkYykKKyAgZGVmaW5lKGZ1bmNfbiwJbXBuX2FkZGxzaDFfbikKKyAgZGVmaW5lKGZ1bmNfbmMsCW1wbl9hZGRsc2gxX25jKScpCitpZmRlZihgT1BFUkFUSU9OX3JzYmxzaDFfbicsIGAKKyAgZGVmaW5lKEFERFNVQiwJc3ViKQorICBkZWZpbmUoQURDU0JCLAlzYmIpCisgIGRlZmluZShmdW5jX24sCW1wbl9yc2Jsc2gxX24pCisgIGRlZmluZShmdW5jX25jLAltcG5fcnNibHNoMV9uYyknKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRsc2gxX24gbXBuX2FkZGxzaDFfbmMgbXBuX3JzYmxzaDFfbiBtcG5fcnNibHNoMV9uYykKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMTYpCitQUk9MT0dVRShmdW5jX24pCisJRlVOQ19FTlRSWSg0KQorCXB1c2gJJXJicAorCXhvcglSMzIoJXJicCksIFIzMiglcmJwKQorTChlbnQpOgltb3YJUjMyKG4pLCBSMzIoJXJheCkKKwlhbmQJJDMsIFIzMiglcmF4KQorCWp6CUwoYjApCisJY21wCSQyLCBSMzIoJXJheCkKKwlqeglMKGIyKQorCWpnCUwoYjMpCisKK0woYjEpOgltb3YJKHZwKSwgJXI4CisJYWRkCSVyOCwgJXI4CisJbGVhCTgodnApLCB2cAorCXNiYglSMzIoJXJheCksIFIzMiglcmF4KQlDIHNhdmUgc2N5CisJYWRkCVIzMiglcmJwKSwgUjMyKCVyYnApCUMgcmVzdG9yZSBhY3kKKwlBRENTQkIJKHVwKSwgJXI4CisJbW92CSVyOCwgKHJwKQorCXNiYglSMzIoJXJicCksIFIzMiglcmJwKQlDIHNhdmUgYWN5CisJbGVhCTgodXApLCB1cAorCWxlYQk4KHJwKSwgcnAKKwlqbXAJTChiMCkKKworTChiMik6CW1vdgkodnApLCAlcjgKKwlhZGQJJXI4LCAlcjgKKwltb3YJOCh2cCksICVyOQorCWFkYwklcjksICVyOQorCWxlYQkxNih2cCksIHZwCisJc2JiCVIzMiglcmF4KSwgUjMyKCVyYXgpCUMgc2F2ZSBzY3kKKwlhZGQJUjMyKCVyYnApLCBSMzIoJXJicCkJQyByZXN0b3JlIGFjeQorCUFEQ1NCQgkodXApLCAlcjgKKwltb3YJJXI4LCAocnApCisJQURDU0JCCTgodXApLCAlcjkKKwltb3YJJXI5LCA4KHJwKQorCXNiYglSMzIoJXJicCksIFIzMiglcmJwKQlDIHNhdmUgYWN5CisJbGVhCTE2KHVwKSwgdXAKKwlsZWEJMTYocnApLCBycAorCWptcAlMKGIwKQorCitMKGIzKToJbW92CSh2cCksICVyOAorCWFkZAklcjgsICVyOAorCW1vdgk4KHZwKSwgJXI5CisJYWRjCSVyOSwgJXI5CisJbW92CTE2KHZwKSwgJXIxMAorCWFkYwklcjEwLCAlcjEwCisJbGVhCTI0KHZwKSwgdnAKKwlzYmIJUjMyKCVyYXgpLCBSMzIoJXJheCkJQyBzYXZlIHNjeQorCWFkZAlSMzIoJXJicCksIFIzMiglcmJwKQlDIHJlc3RvcmUgYWN5CisJQURDU0JCCSh1cCksICVyOAorCW1vdgklcjgsIChycCkKKwlBRENTQkIJOCh1cCksICVyOQorCW1vdgklcjksIDgocnApCisJQURDU0JCCTE2KHVwKSwgJXIxMAorCW1vdgklcjEwLCAxNihycCkKKwlzYmIJUjMyKCVyYnApLCBSMzIoJXJicCkJQyBzYXZlIGFjeQorCWxlYQkyNCh1cCksIHVwCisJbGVhCTI0KHJwKSwgcnAKKworTChiMCk6CXRlc3QJJDQsIFI4KG4pCisJanoJTChza3ApCisJYWRkCVIzMiglcmF4KSwgUjMyKCVyYXgpCUMgcmVzdG9yZSBzY3kKKwltb3YJKHZwKSwgJXI4CisJYWRjCSVyOCwgJXI4CisJbW92CTgodnApLCAlcjkKKwlhZGMJJXI5LCAlcjkKKwltb3YJMTYodnApLCAlcjEwCisJYWRjCSVyMTAsICVyMTAKKwltb3YJMjQodnApLCAlcjExCisJYWRjCSVyMTEsICVyMTEKKwlsZWEJMzIodnApLCB2cAorCXNiYglSMzIoJXJheCksIFIzMiglcmF4KQlDIHNhdmUgc2N5CisJYWRkCVIzMiglcmJwKSwgUjMyKCVyYnApCUMgcmVzdG9yZSBhY3kKKwlBRENTQkIJKHVwKSwgJXI4CisJbW92CSVyOCwgKHJwKQorCUFEQ1NCQgk4KHVwKSwgJXI5CisJbW92CSVyOSwgOChycCkKKwlBRENTQkIJMTYodXApLCAlcjEwCisJbW92CSVyMTAsIDE2KHJwKQorCUFEQ1NCQgkyNCh1cCksICVyMTEKKwltb3YJJXIxMSwgMjQocnApCisJbGVhCTMyKHVwKSwgdXAKKwlsZWEJMzIocnApLCBycAorCXNiYglSMzIoJXJicCksIFIzMiglcmJwKQlDIHNhdmUgYWN5CisKK0woc2twKToJY21wCSQ4LCBuCisJamwJTChydG4pCisKKwlwdXNoCSVyMTIKKwlwdXNoCSVyMTMKKwlwdXNoCSVyMTQKKwlwdXNoCSVyYngKKwlsZWEJLTY0KHJwKSwgcnAKKwlqbXAJTCh4KQorCisJQUxJR04oMTYpCitMKHRvcCk6CWFkZAlSMzIoJXJheCksIFIzMiglcmF4KQlDIHJlc3RvcmUgc2N5CisJbGVhCTY0KHJwKSwgcnAKKwltb3YJKHZwKSwgJXI4CisJYWRjCSVyOCwgJXI4CisJbW92CTgodnApLCAlcjkKKwlhZGMJJXI5LCAlcjkKKwltb3YJMTYodnApLCAlcjEwCisJYWRjCSVyMTAsICVyMTAKKwltb3YJMjQodnApLCAlcjExCisJYWRjCSVyMTEsICVyMTEKKwltb3YJMzIodnApLCAlcjEyCisJYWRjCSVyMTIsICVyMTIKKwltb3YJNDAodnApLCAlcjEzCisJYWRjCSVyMTMsICVyMTMKKwltb3YJNDgodnApLCAlcjE0CisJYWRjCSVyMTQsICVyMTQKKwltb3YJNTYodnApLCAlcmJ4CisJYWRjCSVyYngsICVyYngKKwlsZWEJNjQodnApLCB2cAorCXNiYglSMzIoJXJheCksIFIzMiglcmF4KQlDIHNhdmUgc2N5CisJYWRkCVIzMiglcmJwKSwgUjMyKCVyYnApCUMgcmVzdG9yZSBhY3kKKwlBRENTQkIJKHVwKSwgJXI4CisJbW92CSVyOCwgKHJwKQorCUFEQ1NCQgk4KHVwKSwgJXI5CisJbW92CSVyOSwgOChycCkKKwlBRENTQkIJMTYodXApLCAlcjEwCisJbW92CSVyMTAsIDE2KHJwKQorCUFEQ1NCQgkyNCh1cCksICVyMTEKKwltb3YJJXIxMSwgMjQocnApCisJQURDU0JCCTMyKHVwKSwgJXIxMgorCW1vdgklcjEyLCAzMihycCkKKwlBRENTQkIJNDAodXApLCAlcjEzCisJbW92CSVyMTMsIDQwKHJwKQorCUFEQ1NCQgk0OCh1cCksICVyMTQKKwltb3YJJXIxNCwgNDgocnApCisJQURDU0JCCTU2KHVwKSwgJXJieAorCW1vdgklcmJ4LCA1NihycCkKKwlzYmIJUjMyKCVyYnApLCBSMzIoJXJicCkJQyBzYXZlIGFjeQorCWxlYQk2NCh1cCksIHVwCitMKHgpOglzdWIJJDgsIG4KKwlqZ2UJTCh0b3ApCisKK0woZW5kKToJcG9wCSVyYngKKwlwb3AJJXIxNAorCXBvcAklcjEzCisJcG9wCSVyMTIKK0wocnRuKToKK2lmZGVmKGBPUEVSQVRJT05fYWRkbHNoMV9uJyxgCisJYWRkCVIzMiglcmJwKSwgUjMyKCVyYXgpCisJbmVnCVIzMiglcmF4KScpCitpZmRlZihgT1BFUkFUSU9OX3JzYmxzaDFfbicsYAorCXN1YglSMzIoJXJheCksIFIzMiglcmJwKQorCW1vdnNscQlSMzIoJXJicCksICVyYXgnKQorCisJcG9wCSVyYnAKKwlGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQorUFJPTE9HVUUoZnVuY19uYykKKwlGVU5DX0VOVFJZKDQpCitJRkRPUyhgCW1vdgk1NiglcnNwKSwgJXI4CScpCisJcHVzaAklcmJwCisJbmVnCSVyOAkJCUMgc2V0IENGCisJc2JiCVIzMiglcmJwKSwgUjMyKCVyYnApCUMgc2F2ZSBhY3kKKwlqbXAJTChlbnQpCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9hdG9tL2FvcnJsc2gyX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYXRvbS9hb3JybHNoMl9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmZiMjlkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYXRvbS9hb3JybHNoMl9uLmFzbQpAQCAtMCwwICsxLDE5MSBAQAorZG5sICBBTUQ2NCBtcG5fYWRkbHNoMl9uIC0tIHJwW10gPSB1cFtdICsgKHZwW10gPDwgMikKK2RubCAgQU1ENjQgbXBuX3JzYmxzaDJfbiAtLSBycFtdID0gKHZwW10gPDwgMikgLSB1cFtdCitkbmwgIE9wdGltaXNlZCBmb3IgSW50ZWwgQXRvbS4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTEsIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIEFNRCBLOCxLOQkgPworQyBBTUQgSzEwCSA/CitDIEludGVsIFA0CSA/CitDIEludGVsIGNvcmUyCSA/CitDIEludGVsIE5ITQkgPworQyBJbnRlbCBTQlIJID8KK0MgSW50ZWwgYXRvbQkgNS43NQorQyBWSUEgbmFubwkgPworCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLCAgICAgICBgJXJkaScpCitkZWZpbmUoYHVwJywgICAgICAgYCVyc2knKQorZGVmaW5lKGB2cCcsICAgICAgIGAlcmR4JykKK2RlZmluZShgbicsICAgICAgICBgJXJjeCcpCisKK2RlZmluZShgTFNIJywgMikKK2RlZmluZShgUlNIJywgNjIpCitkZWZpbmUoTSwgZXZhbChtNF9sc2hpZnQoMSxMU0gpKSkKKworaWZkZWYoYE9QRVJBVElPTl9hZGRsc2gyX24nLCBgCisgIGRlZmluZShBRERTVUIsCWFkZCkKKyAgZGVmaW5lKEFEQ1NCQiwJYWRjKQorICBkZWZpbmUoZnVuY19uLAltcG5fYWRkbHNoMl9uKQorICBkZWZpbmUoZnVuY19uYywJbXBuX2FkZGxzaDJfbmMpJykKK2lmZGVmKGBPUEVSQVRJT05fcnNibHNoMl9uJywgYAorICBkZWZpbmUoQUREU1VCLAlzdWIpCisgIGRlZmluZShBRENTQkIsCXNiYikKKyAgZGVmaW5lKGZ1bmNfbiwJbXBuX3JzYmxzaDJfbikKKyAgZGVmaW5lKGZ1bmNfbmMsCW1wbl9yc2Jsc2gyX25jKScpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FkZGxzaDJfbiBtcG5fcnNibHNoMl9uKQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigxNikKK1BST0xPR1VFKGZ1bmNfbikKKwlGVU5DX0VOVFJZKDQpCisJcHVzaAklcmJ4CisJcHVzaAklcmJwCisKKwltb3YJUjMyKG4pLCBSMzIoJXJheCkKKwlhbmQJJDMsIFIzMiglcmF4KQorCWp6CUwoYjApCQkJQyB3ZSByZWx5IG9uIHJheCA9IDAgYXQgdGFyZ2V0CisJY21wCSQyLCBSMzIoJXJheCkKKwltb3YJJDAsIFIzMiglcmF4KQorCWp6CUwoYjIpCisJamcJTChiMykKKworTChiMSk6CW1vdgkodnApLCAlcjkKKwlsZWEJKCVyYXgsJXI5LE0pLCAlcmJwCisJc2hyCSRSU0gsICVyOQorCXN1YgkkMSwgbgorCWxlYQktOCh1cCksIHVwCisJbGVhCS04KHJwKSwgcnAKKwlqeglMKGNqMSkKKwltb3YJOCh2cCksICVyMTAKKwlsZWEJKCVyOSwlcjEwLE0pLCAlcjkKKwlzaHIJJFJTSCwgJXIxMAorCW1vdgkxNih2cCksICVyMTEKKwlsZWEJMjQodnApLCB2cAorCW1vdgkodnApLCAlcjgKKwlsZWEJKCVyMTAsJXIxMSxNKSwgJXIxMAorCXNocgkkUlNILCAlcjExCisJYWRkCVIzMiglcmF4KSwgUjMyKCVyYXgpCisJam1wCUwoTDEpCisKK0woYjIpOglsZWEJLTMyKHJwKSwgcnAKKwltb3YJKHZwKSwgJXI4CisJbGVhCS0zMih1cCksIHVwCisJbGVhCSglcmF4LCVyOCxNKSwgJXJieAorCXNocgkkUlNILCAlcjgKKwltb3YJOCh2cCksICVyOQorCXN1YgkkMiwgbgorCWpsZQlMKGVuZCkKKwlqbXAJTCh0b3ApCisKK0woYjMpOglsZWEJLTI0KHVwKSwgdXAKKwltb3YJKHZwKSwgJXIxMQorCWxlYQktMjQocnApLCBycAorCW1vdgk4KHZwKSwgJXI4CisJbGVhCSglcmF4LCVyMTEsTSksICVyMTAKKwlzaHIJJFJTSCwgJXIxMQorCWxlYQk4KHZwKSwgdnAKKwlsZWEJKCVyMTEsJXI4LE0pLCAlcmJ4CisJYWRkCSQxLCBuCisJam1wCUwoTDMpCisKK0woYjApOglsZWEJLTE2KHVwKSwgdXAKKwltb3YJKHZwKSwgJXIxMAorCWxlYQkoJXJheCwlcjEwLE0pLCAlcjkKKwlzaHIJJFJTSCwgJXIxMAorCW1vdgk4KHZwKSwgJXIxMQorCWxlYQktMTYocnApLCBycAorCW1vdgkxNih2cCksICVyOAorCWxlYQkoJXIxMCwlcjExLE0pLCAlcjEwCisJc2hyCSRSU0gsICVyMTEKKwlhZGQJUjMyKCVyYXgpLCBSMzIoJXJheCkKKwlsZWEJMTYodnApLCB2cAorCWptcAlMKEwwKQorCisJQUxJR04oMTYpCitMKHRvcCk6CWxlYQkoJXI4LCVyOSxNKSwgJXJicAorCXNocgkkUlNILCAlcjkKKwlsZWEJMzIodXApLCB1cAorCW1vdgkxNih2cCksICVyMTAKKwlsZWEJKCVyOSwlcjEwLE0pLCAlcjkKKwlzaHIJJFJTSCwgJXIxMAorCW1vdgkyNCh2cCksICVyMTEKKwlsZWEJMzIocnApLCBycAorCWxlYQkzMih2cCksIHZwCisJbW92CSh2cCksICVyOAorCWxlYQkoJXIxMCwlcjExLE0pLCAlcjEwCisJc2hyCSRSU0gsICVyMTEKKwlhZGQJUjMyKCVyYXgpLCBSMzIoJXJheCkKKwlBRENTQkIJKHVwKSwgJXJieAorCW1vdgklcmJ4LCAocnApCitMKEwxKToJQURDU0JCCTgodXApLCAlcmJwCisJbW92CSVyYnAsIDgocnApCitMKEwwKToJQURDU0JCCTE2KHVwKSwgJXI5CisJbGVhCSglcjExLCVyOCxNKSwgJXJieAorCW1vdgklcjksIDE2KHJwKQorTChMMyk6CUFEQ1NCQgkyNCh1cCksICVyMTAKKwlzYmIJUjMyKCVyYXgpLCBSMzIoJXJheCkKK0woTDIpOglzaHIJJFJTSCwgJXI4CisJbW92CTgodnApLCAlcjkKKwltb3YJJXIxMCwgMjQocnApCisJc3ViCSQ0LCBuCisJamcJTCh0b3ApCisKK0woZW5kKToJbGVhCSglcjgsJXI5LE0pLCAlcmJwCisJc2hyCSRSU0gsICVyOQorCWxlYQkzMih1cCksIHVwCisJbGVhCTMyKHJwKSwgcnAKKwlhZGQJUjMyKCVyYXgpLCBSMzIoJXJheCkKKwlBRENTQkIJKHVwKSwgJXJieAorCW1vdgklcmJ4LCAocnApCitMKGNqMSk6CUFEQ1NCQgk4KHVwKSwgJXJicAorCW1vdgklcmJwLCA4KHJwKQorCitpZmRlZihgT1BFUkFUSU9OX2FkZGxzaDJfbicsYAorCW1vdglSMzIobiksIFIzMiglcmF4KQlDIHplcm8gcmF4CisJYWRjCSVyOSwgJXJheCcpCitpZmRlZihgT1BFUkFUSU9OX3JzYmxzaDJfbicsYAorCXNiYgluLCAlcjkJCQlDIHN1YnRyYWN0IDAKKwltb3YJJXI5LCAlcmF4JykKKworCXBvcAklcmJwCisJcG9wCSVyYngKKwlGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYXRvbS9hb3JzX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYXRvbS9hb3JzX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzYjhkZjkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9hdG9tL2FvcnNfbi5hc20KQEAgLTAsMCArMSwxMjggQEAKK2RubCAgWDg2LTY0IG1wbl9hZGRfbiwgbXBuX3N1Yl9uLCBvcHRpbWlzZWQgZm9yIEludGVsIEF0b20uCisKK2RubCAgQ29weXJpZ2h0IDIwMTEsIDIwMTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IE1hcmNvIEJvZHJhdG8uICBQb3J0ZWQgdG8gNjQtYml0IGJ5CitkbmwgIFRvcmJqw7ZybiBHcmFubHVuZC4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICBjeWNsZXMvbGltYgorQyBBTUQgSzgsSzkJIDIKK0MgQU1EIEsxMAkgMgorQyBBTUQgYnVsbAkgMi4zNFwyLjYzCitDIEFNRCBwaWxlCSAyLjI3XDIuNTIKK0MgQU1EIHN0ZWFtCitDIEFNRCBleGNhdmF0b3IKK0MgQU1EIGJvYmNhdAkgMi43OQorQyBBTUQgamFndWFyCSAyLjc4CitDIEludGVsIFA0CTExCitDIEludGVsIGNvcmUyCSA3LjUKK0MgSW50ZWwgTkhNCSA4LjUKK0MgSW50ZWwgU0JSCSAyLjExCitDIEludGVsIElCUgkgMi4wNworQyBJbnRlbCBIV0wJIDEuNzUKK0MgSW50ZWwgQldMCSAxLjUxCitDIEludGVsIFNLTAkgMS41MgorQyBJbnRlbCBhdG9tCSAzCitDIEludGVsIFNMTQkgNAorQyBWSUEgbmFubworCitkZWZpbmUoYHJwJywJYCVyZGknKQlDIHJjeAorZGVmaW5lKGB1cCcsCWAlcnNpJykJQyByZHgKK2RlZmluZShgdnAnLAlgJXJkeCcpCUMgcjgKK2RlZmluZShgbicsCWAlcmN4JykJQyByOQorZGVmaW5lKGBjeScsCWAlcjgnKQlDIHJzcCs0MCAgICAobXBuX2FkZF9uYyBhbmQgbXBuX3N1Yl9uYykKKworaWZkZWYoYE9QRVJBVElPTl9hZGRfbicsIGAKKyAgZGVmaW5lKEFEQ1NCQiwgICAgYWRjKQorICBkZWZpbmUoZnVuY19uLCAgICBtcG5fYWRkX24pCisgIGRlZmluZShmdW5jX25jLCAgIG1wbl9hZGRfbmMpJykKK2lmZGVmKGBPUEVSQVRJT05fc3ViX24nLCBgCisgIGRlZmluZShBRENTQkIsICAgIHNiYikKKyAgZGVmaW5lKGZ1bmNfbiwgICAgbXBuX3N1Yl9uKQorICBkZWZpbmUoZnVuY19uYywgICBtcG5fc3ViX25jKScpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FkZF9uIG1wbl9hZGRfbmMgbXBuX3N1Yl9uIG1wbl9zdWJfbmMpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUoZnVuY19uKQorCUZVTkNfRU5UUlkoNCkKKwl4b3IJY3ksIGN5CQkJQyBjYXJyeQorCitMKGNvbSk6CXNocgluCQkJQyBuID4+IDEKKwlqeglMKDEpCQkJQyBuID09IDEKKwlqYwlMKDFtMikJCQlDIG4gJSAyID09IDEKKworTCgwbTIpOglzaHIJY3kKKwltb3YJKHVwKSwgJXIxMAorCWxlYQk4KHVwKSwgdXAKKwlsZWEJOCh2cCksIHZwCisJbGVhCS04KHJwKSwgcnAKKwlqbXAJTChtaWQpCisKK0woMSk6CXNocgljeQorCW1vdgkodXApLCAlcjkKKwlqbXAJTChlbmQpCisKK0woMW0yKToJc2hyCWN5CisJbW92CSh1cCksICVyOQorCisJQUxJR04oMTYpCitMKHRvcCk6CUFEQ1NCQgkodnApLCAlcjkKKwlsZWEJMTYodXApLCB1cAorCW1vdgktOCh1cCksICVyMTAKKwlsZWEJMTYodnApLCB2cAorCW1vdgklcjksIChycCkKK0wobWlkKToJQURDU0JCCS04KHZwKSwgJXIxMAorCWxlYQkxNihycCksIHJwCisJZGVjCW4KKwltb3YJKHVwKSwgJXI5CisJbW92CSVyMTAsIC04KHJwKQorCWpueglMKHRvcCkKKworTChlbmQpOglBRENTQkIJKHZwKSwgJXI5CisJbW92CSQwLCBSMzIoJXJheCkKKwltb3YJJXI5LCAocnApCisJYWRjCVIzMiglcmF4KSwgUjMyKCVyYXgpCisJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKKworUFJPTE9HVUUoZnVuY19uYykKKwlGVU5DX0VOVFJZKDQpCitJRkRPUyhgCW1vdgk1NiglcnNwKSwgY3kJJykKKwlqbXAJTChjb20pCitFUElMT0dVRSgpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2F0b20vYW9yc211bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2F0b20vYW9yc211bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2JjMDg1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYXRvbS9hb3JzbXVsXzEuYXNtCkBAIC0wLDAgKzEsMTk0IEBACitkbmwgIEFNRDY0IG1wbl9hZGRtdWxfMS9tcG5fc3VibXVsXzEgb3B0aW1pc2VkIGZvciBJbnRlbCBBdG9tLgorCitkbmwgIENvcHlyaWdodCAyMDAzLTIwMDUsIDIwMDcsIDIwMDgsIDIwMTEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIKK0MgQU1EIEs4LEs5CSA0LjUKK0MgQU1EIEsxMAkgNC41CitDIEFNRCBidWxsCSA0LjczCitDIEFNRCBwaWxlCSA0LjYwCSA0LjgwCitDIEFNRCBzdGVhbQorQyBBTUQgZXhjYXZhdG9yCitDIEFNRCBib2JjYXQJIDUuNDgKK0MgQU1EIGphZ3VhcgkgNS42MQorQyBJbnRlbCBQNAkxNi42CitDIEludGVsIGNvcmUyCSA1LjA5CitDIEludGVsIE5ITQkgNC43OQorQyBJbnRlbCBTQlIJIDMuODgKK0MgSW50ZWwgSUJSCSAzLjY1CitDIEludGVsIEhXTAkgMy41MworQyBJbnRlbCBCV0wJIDIuNzUKK0MgSW50ZWwgU0tMCSAyLjc2CitDIEludGVsIGF0b20JMTkuNAorQyBJbnRlbCBTTE0JIDgKK0MgVklBIG5hbm8KKworQyBUaGUgbG9vcCBvZiB0aGlzIGNvZGUgaXMgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGEgY29kZSBnZW5lcmF0aW9uIGFuZAorQyBvcHRpbWlzYXRpb24gdG9vbCBzdWl0ZSB3cml0dGVuIGJ5IERhdmlkIEhhcnZleSBhbmQgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK2RlZmluZShgcnAnLCAgICAgIGAlcmRpJykgICBDIHJjeAorZGVmaW5lKGB1cCcsICAgICAgYCVyc2knKSAgIEMgcmR4CitkZWZpbmUoYG5fcGFyYW0nLCBgJXJkeCcpICAgQyByOAorZGVmaW5lKGB2MCcsICAgICAgYCVyY3gnKSAgIEMgcjkKKworZGVmaW5lKGBuJywgICAgICAgYCVyYngnKQorCitpZmRlZihgT1BFUkFUSU9OX2FkZG11bF8xJyxgCisgIGRlZmluZShgQUREU1VCJywgYGFkZCcpCisgIGRlZmluZShgZnVuYycsICAgYG1wbl9hZGRtdWxfMScpCisnKQoraWZkZWYoYE9QRVJBVElPTl9zdWJtdWxfMScsYAorICBkZWZpbmUoYEFERFNVQicsIGBzdWInKQorICBkZWZpbmUoYGZ1bmMnLCAgIGBtcG5fc3VibXVsXzEnKQorJykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fYWRkbXVsXzEgbXBuX3N1Ym11bF8xKQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigxNikKK1BST0xPR1VFKGZ1bmMpCisJRlVOQ19FTlRSWSg0KQorCXB1c2gJJXJieAorCisJbW92CSh1cCksICVyYXgKKwlsZWEJLTgodXAsbl9wYXJhbSw4KSwgdXAKKwlsZWEJLTE2KHJwLG5fcGFyYW0sOCksIHJwCisKKwl0ZXN0CSQxLCBSOChuX3BhcmFtKQorCWpueglMKGJ4MSkKKworTChieDApOgl0ZXN0CSQyLCBSOChuX3BhcmFtKQorCWpueglMKGIxMCkKKworTChiMDApOgltb3YJJDEsIFIzMihuKQorCXN1YgluX3BhcmFtLCBuCisJbXVsCXYwCisJbW92CSVyYXgsICVyMTEKKwltb3YJOCh1cCxuLDgpLCAlcmF4CisJbW92CSVyZHgsICVyMTAKKwltdWwJdjAKKwltb3YJJXJheCwgJXI4CisJbW92CTE2KHVwLG4sOCksICVyYXgKKwlqbXAJTChsbzApCisKK0woYjEwKToJbW92CSQzLCBSMzIobikKKwlzdWIJbl9wYXJhbSwgbgorCW11bAl2MAorCW1vdgklcmF4LCAlcjExCisJbW92CS04KHVwLG4sOCksICVyYXgKKwltb3YJJXJkeCwgJXIxMAorCW11bAl2MAorCXRlc3QJbiwgbgorCWpucwlMKGNqMikKKwltb3YJJXJheCwgJXI4CisJbW92CSh1cCxuLDgpLCAlcmF4CisJbW92CSVyZHgsICVyOQorCWptcAlMKGxvMikKKworTChieDEpOgl0ZXN0CSQyLCBSOChuX3BhcmFtKQorCWpueglMKGIxMSkKKworTChiMDEpOgltb3YJJDIsIFIzMihuKQorCXN1YgluX3BhcmFtLCBuCisJbXVsCXYwCisJdGVzdAluLCBuCisJam5zCUwoY2oxKQorCW1vdgklcmF4LCAlcjgKKwltb3YJKHVwLG4sOCksICVyYXgKKwltb3YJJXJkeCwgJXI5CisJbXVsCXYwCisJbW92CSVyYXgsICVyMTEKKwltb3YJOCh1cCxuLDgpLCAlcmF4CisJbW92CSVyZHgsICVyMTAKKwlqbXAJTChsbzEpCisKK0woYjExKToJeG9yCVIzMihuKSwgUjMyKG4pCisJc3ViCW5fcGFyYW0sIG4KKwltdWwJdjAKKwltb3YJJXJheCwgJXI4CisJbW92CTE2KHVwLG4sOCksICVyYXgKKwltb3YJJXJkeCwgJXI5CisJbXVsCXYwCisJbW92CSVyYXgsICVyMTEKKwltb3YJMjQodXAsbiw4KSwgJXJheAorCWptcAlMKGxvMykKKworCUFMSUdOKDE2KQorTCh0b3ApOgltdWwJdjAKKwlBRERTVUIJJXI4LCAtMTYocnAsbiw4KQorCW1vdgklcmF4LCAlcjgKKwltb3YJKHVwLG4sOCksICVyYXgKKwlhZGMJJXI5LCAlcjExCisJbW92CSVyZHgsICVyOQorCWFkYwkkMCwgJXIxMAorTChsbzIpOgltdWwJdjAKKwlBRERTVUIJJXIxMSwgLTgocnAsbiw4KQorCW1vdgklcmF4LCAlcjExCisJbW92CTgodXAsbiw4KSwgJXJheAorCWFkYwklcjEwLCAlcjgKKwltb3YJJXJkeCwgJXIxMAorCWFkYwkkMCwgJXI5CitMKGxvMSk6CW11bAl2MAorCUFERFNVQgklcjgsIChycCxuLDgpCisJbW92CSVyYXgsICVyOAorCWFkYwklcjksICVyMTEKKwltb3YJMTYodXAsbiw4KSwgJXJheAorCWFkYwkkMCwgJXIxMAorTChsbzApOgltb3YJJXJkeCwgJXI5CisJbXVsCXYwCisJQUREU1VCCSVyMTEsIDgocnAsbiw4KQorCW1vdgklcmF4LCAlcjExCisJYWRjCSVyMTAsICVyOAorCW1vdgkyNCh1cCxuLDgpLCAlcmF4CisJYWRjCSQwLCAlcjkKK0wobG8zKToJYWRkCSQ0LCBuCisJbW92CSVyZHgsICVyMTAKKwlqcwlMKHRvcCkKKworTChlbmQpOgltdWwJdjAKKwlBRERTVUIJJXI4LCAtMTYocnAsbiw4KQorCWFkYwklcjksICVyMTEKKwlhZGMJJDAsICVyMTAKK0woY2oyKToJQUREU1VCCSVyMTEsIC04KHJwLG4sOCkKKwlhZGMJJXIxMCwgJXJheAorCWFkYwkkMCwgJXJkeAorTChjajEpOglBRERTVUIJJXJheCwgKHJwLG4sOCkKKwltb3YJJDAsIFIzMiglcmF4KQorCWFkYwklcmR4LCAlcmF4CisJcG9wCSVyYngKKwlGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9hdG9tL2NuZF9hZGRfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9hdG9tL2NuZF9hZGRfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNiOWEwZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2F0b20vY25kX2FkZF9uLmFzbQpAQCAtMCwwICsxLDM4IEBACitkbmwgIFg4Ni02NCBtcG5fY25kX2FkZF9uLgorCitkbmwgIENvcHlyaWdodCAyMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fY25kX2FkZF9uKQoraW5jbHVkZV9tcG4oYHg4Nl82NC9jb3JlaXNici9jbmRfYWRkX24uYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2F0b20vY25kX3N1Yl9uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2F0b20vY25kX3N1Yl9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWVlMWMxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYXRvbS9jbmRfc3ViX24uYXNtCkBAIC0wLDAgKzEsMzggQEAKK2RubCAgWDg2LTY0IG1wbl9jbmRfc3ViX24uCisKK2RubCAgQ29weXJpZ2h0IDIwMTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9jbmRfc3ViX24pCitpbmNsdWRlX21wbihgeDg2XzY0L2NvcmVpc2JyL2NuZF9zdWJfbi5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYXRvbS9jb20uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYXRvbS9jb20uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNjQ2MGYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9hdG9tL2NvbS5hc20KQEAgLTAsMCArMSwzNyBAQAorZG5sICBYODYtNjQgbXBuX2NvbSBvcHRpbWlzZWQgZm9yIEludGVsIEF0b20uCisKK2RubCAgQ29weXJpZ2h0IDIwMTIsIDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fY29tKQoraW5jbHVkZV9tcG4oYHg4Nl82NC9mYXN0c3NlL2NvbS1wYWxpZ25yLmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9hdG9tL2NvcHlkLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2F0b20vY29weWQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMDkyNzkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9hdG9tL2NvcHlkLmFzbQpAQCAtMCwwICsxLDM3IEBACitkbmwgIFg4Ni02NCBtcG5fY29weWQgb3B0aW1pc2VkIGZvciBJbnRlbCBBdG9tLgorCitkbmwgIENvcHlyaWdodCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2NvcHlkKQoraW5jbHVkZV9tcG4oYHg4Nl82NC9mYXN0c3NlL2NvcHlkLXBhbGlnbnIuYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2F0b20vY29weWkuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYXRvbS9jb3B5aS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBlYzNjMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2F0b20vY29weWkuYXNtCkBAIC0wLDAgKzEsMzcgQEAKK2RubCAgWDg2LTY0IG1wbl9jb3B5aSBvcHRpbWlzZWQgZm9yIEludGVsIEF0b20uCisKK2RubCAgQ29weXJpZ2h0IDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fY29weWkpCitpbmNsdWRlX21wbihgeDg2XzY0L2Zhc3Rzc2UvY29weWktcGFsaWduci5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYXRvbS9kaXZlXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYXRvbS9kaXZlXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5YmE1ZmUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9hdG9tL2RpdmVfMS5hc20KQEAgLTAsMCArMSwzNyBAQAorZG5sICBBTUQ2NCBtcG5fZGl2ZXhhY3RfMSAtLSBtcG4gYnkgbGltYiBleGFjdCBkaXZpc2lvbi4KKworZG5sICBDb3B5cmlnaHQgMjAxMSwgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9kaXZleGFjdF8xKQoraW5jbHVkZV9tcG4oYHg4Nl82NC9uYW5vL2RpdmVfMS5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYXRvbS9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9hdG9tL2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2Q5MGY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYXRvbS9nbXAtbXBhcmFtLmgKQEAgLTAsMCArMSwyMjIgQEAKKy8qIEludGVsIEF0b20vNjQgZ21wLW1wYXJhbS5oIC0tIENvbXBpbGVyL21hY2hpbmUgcGFyYW1ldGVyIGhlYWRlciBmaWxlLgorCitDb3B5cmlnaHQgMjAxOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2RlZmluZSBHTVBfTElNQl9CSVRTIDY0CisjZGVmaW5lIEdNUF9MSU1CX0JZVEVTIDgKKworI2RlZmluZSBTSExEX1NMT1cgMQorI2RlZmluZSBTSFJEX1NMT1cgMQorCisvKiAxNjAwIE1IeiBEaWFtb25kdmlsbGUgKEF0b20gMzMwKSAqLworLyogRkZUIHR1bmluZyBsaW1pdCA9IDUwLDY0Niw2NDEgKi8KKy8qIEdlbmVyYXRlZCBieSB0dW5ldXAuYywgMjAxOS0xMC0xNiwgZ2NjIDguMyAqLworCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNQorI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgMworI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICBNUF9TSVpFX1RfTUFYCisjZGVmaW5lIE1PRF8xXzJfVE9fTU9EXzFfNF9USFJFU0hPTEQgICAgICAgICAwICAvKiBuZXZlciBtcG5fbW9kXzFzXzJwICovCisjZGVmaW5lIFBSRUlOVl9NT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgIDEyCisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAgICAxICAvKiBuYXRpdmUgKi8KKyNkZWZpbmUgRElWX1FSXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgIDEKKyNkZWZpbmUgRElWX1FSXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWX1FSXzJfUEkyX1RIUkVTSE9MRCAgICAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWRVhBQ1RfMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAobmF0aXZlKSAqLworI2RlZmluZSBCTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgICAgICAxNgorCisjZGVmaW5lIERJVl8xX1ZTX01VTF8xX1BFUkNFTlQgICAgICAgICAgICAgMjAxCisKKyNkZWZpbmUgTVVMX1RPT00yMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgTVVMX1RPT00zM19USFJFU0hPTEQgICAgICAgICAgICAgICAgNzQKKyNkZWZpbmUgTVVMX1RPT000NF9USFJFU0hPTEQgICAgICAgICAgICAgICAxMDYKKyNkZWZpbmUgTVVMX1RPT002SF9USFJFU0hPTEQgICAgICAgICAgICAgICAxNTUKKyNkZWZpbmUgTVVMX1RPT004SF9USFJFU0hPTEQgICAgICAgICAgICAgICAyMTIKKworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT000M19USFJFU0hPTEQgICAgICA3MworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT001M19USFJFU0hPTEQgICAgICA3NworI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT001M19USFJFU0hPTEQgICAgICA3MworI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT002M19USFJFU0hPTEQgICAgICA3MgorI2RlZmluZSBNVUxfVE9PTTQzX1RPX1RPT001NF9USFJFU0hPTEQgICAgICA1OAorCisjZGVmaW5lIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgICA1CisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgICAgIDczCisjZGVmaW5lIFNRUl9UT09NNF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTMwCisjZGVmaW5lIFNRUl9UT09NNl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTU5CisjZGVmaW5lIFNRUl9UT09NOF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjM2CisKKyNkZWZpbmUgTVVMTUlEX1RPT000Ml9USFJFU0hPTEQgICAgICAgICAgICAgMTYKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgOQorI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgOQorCisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgMjIwICAvKiBrID0gNSAqLworI2RlZmluZSBNVUxfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgMjIwLCA1fSwgeyAgICAgMTEsIDZ9LCB7ICAgICAgNiwgNX0sIHsgICAgIDEzLCA2fSwgXAorICAgIHsgICAgIDEzLCA3fSwgeyAgICAgIDcsIDZ9LCB7ICAgICAxNSwgN30sIHsgICAgICA4LCA2fSwgXAorICAgIHsgICAgIDE3LCA3fSwgeyAgICAgMTMsIDh9LCB7ICAgICAgNywgN30sIHsgICAgIDE3LCA4fSwgXAorICAgIHsgICAgICA5LCA3fSwgeyAgICAgMTksIDh9LCB7ICAgICAxMSwgN30sIHsgICAgIDIzLCA4fSwgXAorICAgIHsgICAgIDEzLCA5fSwgeyAgICAgIDcsIDh9LCB7ICAgICAxOSwgOX0sIHsgICAgIDExLCA4fSwgXAorICAgIHsgICAgIDI1LDEwfSwgeyAgICAgIDcsIDl9LCB7ICAgICAxNSwgOH0sIHsgICAgIDMzLCA5fSwgXAorICAgIHsgICAgIDE5LCA4fSwgeyAgICAgMzksIDl9LCB7ICAgICAyMywgOH0sIHsgICAgIDQ3LCA5fSwgXAorICAgIHsgICAgIDI3LDEwfSwgeyAgICAgMTUsIDl9LCB7ICAgICAzOSwxMH0sIHsgICAgIDIzLCA5fSwgXAorICAgIHsgICAgIDQ3LDExfSwgeyAgICAgMTUsMTB9LCB7ICAgICAzMSwgOX0sIHsgICAgIDY3LDEwfSwgXAorICAgIHsgICAgIDM5LCA5fSwgeyAgICAgNzksMTB9LCB7ICAgICA0NywgOX0sIHsgICAgIDk1LDExfSwgXAorICAgIHsgICAgIDMxLDEwfSwgeyAgICAgNjMsIDl9LCB7ICAgIDEyNywgOH0sIHsgICAgMjU1LDEwfSwgXAorICAgIHsgICAgIDcxLCA5fSwgeyAgICAxNDMsIDh9LCB7ICAgIDI4NywxMH0sIHsgICAgIDc5LDExfSwgXAorICAgIHsgICAgIDQ3LDEwfSwgeyAgICAgOTUsIDl9LCB7ICAgIDE5MSwxMn0sIHsgICAgIDMxLDExfSwgXAorICAgIHsgICAgIDYzLDEwfSwgeyAgICAxMjcsIDl9LCB7ICAgIDI1NSwgOH0sIHsgICAgNTExLDEwfSwgXAorICAgIHsgICAgMTQzLCA5fSwgeyAgICAyODcsMTF9LCB7ICAgICA3OSwxMH0sIHsgICAgMTU5LCA5fSwgXAorICAgIHsgICAgMzE5LDEwfSwgeyAgICAxNzUsIDl9LCB7ICAgIDM1MSwxMX0sIHsgICAgIDk1LDEwfSwgXAorICAgIHsgICAgMTkxLCA5fSwgeyAgICAzODMsMTB9LCB7ICAgIDIwNywxMX0sIHsgICAgMTExLDEwfSwgXAorICAgIHsgICAgMjIzLDEyfSwgeyAgICAgNjMsMTF9LCB7ICAgIDEyNywxMH0sIHsgICAgMjU1LCA5fSwgXAorICAgIHsgICAgNTExLDExfSwgeyAgICAxNDMsMTB9LCB7ICAgIDI4NywgOX0sIHsgICAgNTc1LDExfSwgXAorICAgIHsgICAgMTU5LDEwfSwgeyAgICAzMTksMTF9LCB7ICAgIDE3NSwxMH0sIHsgICAgMzUxLDEyfSwgXAorICAgIHsgICAgIDk1LDExfSwgeyAgICAxOTEsMTB9LCB7ICAgIDM4MywxMX0sIHsgICAgMjA3LDEwfSwgXAorICAgIHsgICAgNDE1LDExfSwgeyAgICAyMjMsMTN9LCB7ICAgICA2MywxMn0sIHsgICAgMTI3LDExfSwgXAorICAgIHsgICAgMjU1LDEwfSwgeyAgICA1MTEsMTF9LCB7ICAgIDI4NywxMH0sIHsgICAgNTc1LDEyfSwgXAorICAgIHsgICAgMTU5LDExfSwgeyAgICAzMTksMTB9LCB7ICAgIDYzOSwxMX0sIHsgICAgMzUxLDEyfSwgXAorICAgIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTB9LCB7ICAgIDc2NywxMn0sIHsgICAgMjIzLDExfSwgXAorICAgIHsgICAgNDQ3LDEzfSwgeyAgICAxMjcsMTJ9LCB7ICAgIDI1NSwxMX0sIHsgICAgNTExLDEyfSwgXAorICAgIHsgICAgMjg3LDExfSwgeyAgICA1NzUsMTJ9LCB7ICAgIDMxOSwxMX0sIHsgICAgNjM5LDEyfSwgXAorICAgIHsgICAgMzUxLDEzfSwgeyAgICAxOTEsMTJ9LCB7ICAgIDM4MywxMX0sIHsgICAgNzY3LDEyfSwgXAorICAgIHsgICAgNDQ3LDE0fSwgeyAgICAxMjcsMTN9LCB7ICAgIDI1NSwxMn0sIHsgICAgNTc1LDEzfSwgXAorICAgIHsgICAgMzE5LDEyfSwgeyAgICA3MDMsMTN9LCB7ICAgIDM4MywxMn0sIHsgICAgNzY3LDEzfSwgXAorICAgIHsgICAgNDQ3LDE0fSwgeyAgICAyNTUsMTN9LCB7ICAgIDUxMSwxMn0sIHsgICAxMDIzLDEzfSwgXAorICAgIHsgICAgNTc1LDEyfSwgeyAgIDExNTEsMTN9LCB7ICAgIDcwMywxNH0sIHsgICAgMzgzLDEzfSwgXAorICAgIHsgICAgODMxLDEyfSwgeyAgIDE2NjMsMTV9LCB7ICAgIDI1NSwxNH0sIHsgICAgNTExLDEzfSwgXAorICAgIHsgICAxMDg3LDEyfSwgeyAgIDIxNzUsMTN9LCB7ICAgMTE1MSwxNH0sIHsgICAgNjM5LDEzfSwgXAorICAgIHsgICAxNDA3LDEyfSwgeyAgIDI4MTUsMTR9LCB7ICAgIDc2NywxM30sIHsgICAxNjYzLDE0fSwgXAorICAgIHsgICAgODk1LDEzfSwgeyAgIDE3OTEsMTV9LCB7ICAgIDUxMSwxNH0sIHsgICAxMDIzLDEzfSwgXAorICAgIHsgICAyMTc1LDE0fSwgeyAgIDExNTEsMTN9LCB7ICAgMjQzMSwxMn0sIHsgICA0ODYzLDE0fSwgXAorICAgIHsgICAxNDA3LDEzfSwgeyAgIDI4MTUsMTV9LCB7ICAgIDc2NywxNH0sIHsgICAxNzkxLDE2fSwgXAorICAgIHsgICAgNTExLDE1fSwgeyAgIDEwMjMsMTR9LCB7ICAgMjQzMSwxM30sIHsgICA0ODYzLDE1fSwgXAorICAgIHsgICAxMjc5LDE0fSwgeyAgIDI5NDMsMTV9LCB7ICAgMTUzNSwxNH0sIHsgIDE2Mzg0LDE1fSwgXAorICAgIHsgIDMyNzY4LDE2fSwgeyAgNjU1MzYsMTd9LCB7IDEzMTA3MiwxOH0sIHsgMjYyMTQ0LDE5fSwgXAorICAgIHsgNTI0Mjg4LDIwfSwgezEwNDg1NzYsMjF9LCB7MjA5NzE1MiwyMn0sIHs0MTk0MzA0LDIzfSwgXAorICAgIHs4Mzg4NjA4LDI0fSB9CisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzX1NJWkUgMTY5CisjZGVmaW5lIE1VTF9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAyMjQwCisKKyNkZWZpbmUgU1FSX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICAxODQgIC8qIGsgPSA1ICovCisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICAxODQsIDV9LCB7ICAgICAxMSwgNn0sIHsgICAgIDEzLCA3fSwgeyAgICAgIDcsIDZ9LCBcCisgICAgeyAgICAgMTUsIDd9LCB7ICAgICAgOCwgNn0sIHsgICAgIDE3LCA3fSwgeyAgICAgMTMsIDh9LCBcCisgICAgeyAgICAgIDcsIDd9LCB7ICAgICAxNywgOH0sIHsgICAgICA5LCA3fSwgeyAgICAgMTksIDh9LCBcCisgICAgeyAgICAgMTEsIDd9LCB7ICAgICAyMywgOH0sIHsgICAgIDEzLCA5fSwgeyAgICAgIDcsIDh9LCBcCisgICAgeyAgICAgMTksIDl9LCB7ICAgICAxMSwgOH0sIHsgICAgIDI1LDEwfSwgeyAgICAgIDcsIDl9LCBcCisgICAgeyAgICAgMTUsIDh9LCB7ICAgICAzMywgOX0sIHsgICAgIDE5LCA4fSwgeyAgICAgMzksIDl9LCBcCisgICAgeyAgICAgMjMsMTB9LCB7ICAgICAxNSwgOX0sIHsgICAgIDM5LDEwfSwgeyAgICAgMjMsIDl9LCBcCisgICAgeyAgICAgNDcsMTF9LCB7ICAgICAxNSwxMH0sIHsgICAgIDMxLCA5fSwgeyAgICAgNjMsIDh9LCBcCisgICAgeyAgICAxMjcsIDd9LCB7ICAgIDI1NSwxMH0sIHsgICAgIDM5LCA4fSwgeyAgICAxNTksMTB9LCBcCisgICAgeyAgICAgNDcsIDl9LCB7ICAgICA5NSwgOH0sIHsgICAgMTkxLDExfSwgeyAgICAgMzEsMTB9LCBcCisgICAgeyAgICAgNjMsIDl9LCB7ICAgIDEyNywgOH0sIHsgICAgMjU1LCA3fSwgeyAgICA1MTEsMTB9LCBcCisgICAgeyAgICAgNzEsIDl9LCB7ICAgIDE0MywgOH0sIHsgICAgMjg3LCA3fSwgeyAgICA1NzUsIDl9LCBcCisgICAgeyAgICAxNTksIDh9LCB7ICAgIDMxOSwxMX0sIHsgICAgIDQ3LDEwfSwgeyAgICAgOTUsIDl9LCBcCisgICAgeyAgICAxOTEsIDh9LCB7ICAgIDM4MywxMn0sIHsgICAgIDMxLDExfSwgeyAgICAgNjMsMTB9LCBcCisgICAgeyAgICAxMjcsIDl9LCB7ICAgIDI1NSwgOH0sIHsgICAgNTExLDEwfSwgeyAgICAxNDMsIDl9LCBcCisgICAgeyAgICAyODcsIDh9LCB7ICAgIDU3NSwxMH0sIHsgICAgMTU5LCA5fSwgeyAgICAzMTksIDh9LCBcCisgICAgeyAgICA2MzksMTB9LCB7ICAgIDE3NSwgOX0sIHsgICAgMzUxLDExfSwgeyAgICAgOTUsMTB9LCBcCisgICAgeyAgICAxOTEsIDl9LCB7ICAgIDM4MywxMX0sIHsgICAgMTExLDEwfSwgeyAgICAyMjMsIDl9LCBcCisgICAgeyAgICA0NDcsMTJ9LCB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgeyAgICAyNTUsIDl9LCBcCisgICAgeyAgICA1MTEsMTF9LCB7ICAgIDE0MywxMH0sIHsgICAgMjg3LCA5fSwgeyAgICA1NzUsMTF9LCBcCisgICAgeyAgICAxNTksMTB9LCB7ICAgIDMxOSwgOX0sIHsgICAgNjM5LDExfSwgeyAgICAxNzUsMTB9LCBcCisgICAgeyAgICAzNTEsMTJ9LCB7ICAgICA5NSwxMX0sIHsgICAgMTkxLDEwfSwgeyAgICAzODMsIDl9LCBcCisgICAgeyAgICA3NjcsMTF9LCB7ICAgIDIyMywxMH0sIHsgICAgNDQ3LDEzfSwgeyAgICAgNjMsMTJ9LCBcCisgICAgeyAgICAxMjcsMTF9LCB7ICAgIDI1NSwxMH0sIHsgICAgNTExLDExfSwgeyAgICAyODcsMTB9LCBcCisgICAgeyAgICA1NzUsMTJ9LCB7ICAgIDE1OSwxMX0sIHsgICAgMzE5LDEwfSwgeyAgICA2MzksMTF9LCBcCisgICAgeyAgICAzNTEsMTJ9LCB7ICAgIDE5MSwxMX0sIHsgICAgMzgzLDEwfSwgeyAgICA3NjcsMTJ9LCBcCisgICAgeyAgICAyMjMsMTF9LCB7ICAgIDQ0NywxM30sIHsgICAgMTI3LDEyfSwgeyAgICAyNTUsMTF9LCBcCisgICAgeyAgICA1MTEsMTJ9LCB7ICAgIDI4NywxMX0sIHsgICAgNTc1LDEyfSwgeyAgICAzMTksMTF9LCBcCisgICAgeyAgICA2MzksMTJ9LCB7ICAgIDM1MSwxM30sIHsgICAgMTkxLDEyfSwgeyAgICAzODMsMTF9LCBcCisgICAgeyAgICA3NjcsMTJ9LCB7ICAgIDQ0NywxNH0sIHsgICAgMTI3LDEzfSwgeyAgICAyNTUsMTJ9LCBcCisgICAgeyAgICA1NzUsMTN9LCB7ICAgIDMxOSwxMn0sIHsgICAgNzAzLDEzfSwgeyAgICAzODMsMTJ9LCBcCisgICAgeyAgICA3NjcsMTN9LCB7ICAgIDQ0NywxNH0sIHsgICAgMjU1LDEzfSwgeyAgICA1MTEsMTJ9LCBcCisgICAgeyAgIDEwMjMsMTN9LCB7ICAgIDU3NSwxMn0sIHsgICAxMTUxLDEzfSwgeyAgICA3MDMsMTR9LCBcCisgICAgeyAgICAzODMsMTN9LCB7ICAgIDgzMSwxMn0sIHsgICAxNjYzLDE1fSwgeyAgICAyNTUsMTR9LCBcCisgICAgeyAgICA1MTEsMTN9LCB7ICAgMTE1MSwxNH0sIHsgICAgNjM5LDEzfSwgeyAgIDE0MDcsMTJ9LCBcCisgICAgeyAgIDI4MTUsMTR9LCB7ICAgIDc2NywxM30sIHsgICAxNjYzLDE0fSwgeyAgICA4OTUsMTN9LCBcCisgICAgeyAgIDE3OTEsMTV9LCB7ICAgIDUxMSwxNH0sIHsgICAxMDIzLDEzfSwgeyAgIDIwNDcsMTR9LCBcCisgICAgeyAgIDExNTEsMTN9LCB7ICAgMjQzMSwxMn0sIHsgICA0ODYzLDE0fSwgeyAgIDE0MDcsMTN9LCBcCisgICAgeyAgIDI4MTUsMTV9LCB7ICAgIDc2NywxNH0sIHsgICAxNzkxLDE2fSwgeyAgICA1MTEsMTV9LCBcCisgICAgeyAgIDEwMjMsMTR9LCB7ICAgMjQzMSwxM30sIHsgICA0ODYzLDE1fSwgeyAgIDEyNzksMTR9LCBcCisgICAgeyAgIDI5NDMsMTV9LCB7ICAgMTUzNSwxNH0sIHsgIDE2Mzg0LDE1fSwgeyAgMzI3NjgsMTZ9LCBcCisgICAgeyAgNjU1MzYsMTd9LCB7IDEzMTA3MiwxOH0sIHsgMjYyMTQ0LDE5fSwgeyA1MjQyODgsMjB9LCBcCisgICAgezEwNDg1NzYsMjF9LCB7MjA5NzE1MiwyMn0sIHs0MTk0MzA0LDIzfSwgezgzODg2MDgsMjR9IH0KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTNfU0laRSAxNzIKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDE3MjgKKworI2RlZmluZSBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDMzCisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgICA0MzkyCisjZGVmaW5lIFNRUkxPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgU1FSTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgODUKKyNkZWZpbmUgU1FSTE9fU1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDMxNzYKKworI2RlZmluZSBEQ19ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAzNAorI2RlZmluZSBEQ19ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgIDExOQorI2RlZmluZSBEQ19CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzMQorI2RlZmluZSBEQ19CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA3NgorCisjZGVmaW5lIElOVl9NVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgIDIyCisjZGVmaW5lIElOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAgMTQ5CisjZGVmaW5lIElOVl9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTIzCisKKyNkZWZpbmUgQklOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAxNzkKKyNkZWZpbmUgUkVEQ18xX1RPX1JFRENfMl9USFJFU0hPTEQgICAgICAgICAgMjQKKyNkZWZpbmUgUkVEQ18yX1RPX1JFRENfTl9USFJFU0hPTEQgICAgICAgICAgMzkKKworI2RlZmluZSBNVV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDgwNworI2RlZmluZSBNVV9ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgIDgwNworI2RlZmluZSBNVVBJX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICA3NworI2RlZmluZSBNVV9CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDc0OAorI2RlZmluZSBNVV9CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDgwNworCisjZGVmaW5lIFBPV01fU0VDX1RBQkxFICAxLDIyLDExNCwzMjYsMTQ4NgorCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgIDMwCisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgMzgxCisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAxNTY1CisKKyNkZWZpbmUgRkFDX0RTQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICA5NjAKKyNkZWZpbmUgRkFDX09ERF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworCisjZGVmaW5lIE1BVFJJWDIyX1NUUkFTU0VOX1RIUkVTSE9MRCAgICAgICAgIDEzCisjZGVmaW5lIEhHQ0QyX0RJVjFfTUVUSE9EICAgICAgICAgICAgICAgICAgICAzICAvKiA1Ljg2JSBmYXN0ZXIgdGhhbiA0ICovCisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAgIDg4CisjZGVmaW5lIEhHQ0RfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDg4CisjZGVmaW5lIEhHQ0RfUkVEVUNFX1RIUkVTSE9MRCAgICAgICAgICAgICAxMTgyCisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgMjQxCisjZGVmaW5lIEdDREVYVF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTkyCisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAgICAzICAvKiA5LjQzJSBmYXN0ZXIgdGhhbiAyICovCisKKy8qIFR1bmV1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCB0b29rIDE5MzA5OCBzZWNvbmRzICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9hdG9tL2xzaGlmdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9hdG9tL2xzaGlmdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIzN2Q1ZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2F0b20vbHNoaWZ0LmFzbQpAQCAtMCwwICsxLDEyMyBAQAorZG5sICBBTUQ2NCBtcG5fbHNoaWZ0IC0tIG1wbiBsZWZ0IHNoaWZ0LCBvcHRpbWlzZWQgZm9yIEF0b20uCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqb3JuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDExLCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBBTUQgSzgsSzkJID8KK0MgQU1EIEsxMAkgPworQyBJbnRlbCBQNAkgPworQyBJbnRlbCBjb3JlMgkgPworQyBJbnRlbCBOSE0JID8KK0MgSW50ZWwgU0JSCSA/CitDIEludGVsIGF0b20JIDQuNQorQyBWSUEgbmFubwkgPworCitDIFRPRE8KK0MgICogQ29uc2lkZXIgdXNpbmcgNC13YXkgdW5yb2xsaW5nLiAgV2UgcmVhY2ggNCBjL2wsIGJ1dCB0aGUgY29kZSBpcyAyLjUgdGltZXMKK0MgICAgbGFyZ2VyLgorCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLAlgJXJkaScpCitkZWZpbmUoYHVwJywJYCVyc2knKQorZGVmaW5lKGBuJywJYCVyZHgnKQorZGVmaW5lKGBjbnQnLAlgJXJjeCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX2xzaGlmdCkKKwlGVU5DX0VOVFJZKDQpCisJbGVhCS04KHVwLG4sOCksIHVwCisJbGVhCS04KHJwLG4sOCksIHJwCisJc2hyCVIzMihuKQorCW1vdgkodXApLCAlcmF4CisJam5jCUwoZXZuKQorCisJbW92CSVyYXgsICVyMTEKKwlzaGwJUjgoJXJjeCksICVyMTEKKwluZWcJUjgoJXJjeCkKKwlzaHIJUjgoJXJjeCksICVyYXgKKwl0ZXN0CW4sIG4KKwlqbnoJTChndDEpCisJbW92CSVyMTEsIChycCkKKwlGVU5DX0VYSVQoKQorCXJldAorCitMKGd0MSk6CW1vdgktOCh1cCksICVyOAorCW1vdgklcjgsICVyMTAKKwlzaHIJUjgoJXJjeCksICVyOAorCWptcAlMKGxvMSkKKworTChldm4pOgltb3YJJXJheCwgJXIxMAorCW5lZwlSOCglcmN4KQorCXNocglSOCglcmN4KSwgJXJheAorCW1vdgktOCh1cCksICVyOQorCW1vdgklcjksICVyMTEKKwlzaHIJUjgoJXJjeCksICVyOQorCW5lZwlSOCglcmN4KQorCWRlYwluCisJbGVhCTgocnApLCBycAorCWxlYQktOCh1cCksIHVwCisJanoJTChlbmQpCisKKwlBTElHTig4KQorTCh0b3ApOglzaGwJUjgoJXJjeCksICVyMTAKKwlvcgklcjEwLCAlcjkKKwlzaGwJUjgoJXJjeCksICVyMTEKKwluZWcJUjgoJXJjeCkKKwltb3YJLTgodXApLCAlcjgKKwltb3YJJXI4LCAlcjEwCisJbW92CSVyOSwgLTgocnApCisJc2hyCVI4KCVyY3gpLCAlcjgKKwlsZWEJLTE2KHJwKSwgcnAKK0wobG8xKToJbW92CS0xNih1cCksICVyOQorCW9yCSVyMTEsICVyOAorCW1vdgklcjksICVyMTEKKwlzaHIJUjgoJXJjeCksICVyOQorCWxlYQktMTYodXApLCB1cAorCW5lZwlSOCglcmN4KQorCW1vdgklcjgsIChycCkKKwlkZWMJbgorCWpnCUwodG9wKQorCitMKGVuZCk6CXNobAlSOCglcmN4KSwgJXIxMAorCW9yCSVyMTAsICVyOQorCXNobAlSOCglcmN4KSwgJXIxMQorCW1vdgklcjksIC04KHJwKQorCW1vdgklcjExLCAtMTYocnApCisJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2F0b20vbHNoaWZ0Yy5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9hdG9tL2xzaGlmdGMuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczODVmOGYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9hdG9tL2xzaGlmdGMuYXNtCkBAIC0wLDAgKzEsMTI3IEBACitkbmwgIEFNRDY0IG1wbl9sc2hpZnRjIC0tIG1wbiBsZWZ0IHNoaWZ0IHdpdGggY29tcGxlbWVudCwgb3B0aW1pc2VkIGZvciBBdG9tLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3Jiam9ybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAxMSwgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIKK0MgQU1EIEs4LEs5CSA/CitDIEFNRCBLMTAJID8KK0MgSW50ZWwgUDQJID8KK0MgSW50ZWwgY29yZTIJID8KK0MgSW50ZWwgTkhNCSA/CitDIEludGVsIFNCUgkgPworQyBJbnRlbCBhdG9tCSA1CitDIFZJQSBuYW5vCSA/CisKK0MgVE9ETworQyAgKiBDb25zaWRlciB1c2luZyA0LXdheSB1bnJvbGxpbmcuICBXZSByZWFjaCA0LjUgYy9sLCBidXQgdGhlIGNvZGUgaXMgMi41CitDICAgIHRpbWVzIGxhcmdlci4KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywJYCVyZGknKQorZGVmaW5lKGB1cCcsCWAlcnNpJykKK2RlZmluZShgbicsCWAlcmR4JykKK2RlZmluZShgY250JywJYCVyY3gnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigxNikKK1BST0xPR1VFKG1wbl9sc2hpZnRjKQorCUZVTkNfRU5UUlkoNCkKKwlsZWEJLTgodXAsbiw4KSwgdXAKKwlsZWEJLTgocnAsbiw4KSwgcnAKKwlzaHIJUjMyKG4pCisJbW92CSh1cCksICVyYXgKKwlqbmMJTChldm4pCisKKwltb3YJJXJheCwgJXIxMQorCXNobAlSOCglcmN4KSwgJXIxMQorCW5lZwlSOCglcmN4KQorCXNocglSOCglcmN4KSwgJXJheAorCXRlc3QJbiwgbgorCWpueglMKGd0MSkKKwlub3QJJXIxMQorCW1vdgklcjExLCAocnApCisJRlVOQ19FWElUKCkKKwlyZXQKKworTChndDEpOgltb3YJLTgodXApLCAlcjgKKwltb3YJJXI4LCAlcjEwCisJc2hyCVI4KCVyY3gpLCAlcjgKKwlqbXAJTChsbzEpCisKK0woZXZuKToJbW92CSVyYXgsICVyMTAKKwluZWcJUjgoJXJjeCkKKwlzaHIJUjgoJXJjeCksICVyYXgKKwltb3YJLTgodXApLCAlcjkKKwltb3YJJXI5LCAlcjExCisJc2hyCVI4KCVyY3gpLCAlcjkKKwluZWcJUjgoJXJjeCkKKwlsZWEJOChycCksIHJwCisJbGVhCS04KHVwKSwgdXAKKwlqbXAJTChsbzApCisKK0MJQUxJR04oMTYpCitMKHRvcCk6CXNobAlSOCglcmN4KSwgJXIxMAorCW9yCSVyMTAsICVyOQorCXNobAlSOCglcmN4KSwgJXIxMQorCW5vdAklcjkKKwluZWcJUjgoJXJjeCkKKwltb3YJLTgodXApLCAlcjgKKwlsZWEJLTE2KHJwKSwgcnAKKwltb3YJJXI4LCAlcjEwCisJc2hyCVI4KCVyY3gpLCAlcjgKKwltb3YJJXI5LCA4KHJwKQorTChsbzEpOglvcgklcjExLCAlcjgKKwltb3YJLTE2KHVwKSwgJXI5CisJbW92CSVyOSwgJXIxMQorCXNocglSOCglcmN4KSwgJXI5CisJbGVhCS0xNih1cCksIHVwCisJbmVnCVI4KCVyY3gpCisJbm90CSVyOAorCW1vdgklcjgsIChycCkKK0wobG8wKToJZGVjCW4KKwlqZwlMKHRvcCkKKworTChlbmQpOglzaGwJUjgoJXJjeCksICVyMTAKKwlvcgklcjEwLCAlcjkKKwlub3QJJXI5CisJc2hsCVI4KCVyY3gpLCAlcjExCisJbm90CSVyMTEKKwltb3YJJXI5LCAtOChycCkKKwltb3YJJXIxMSwgLTE2KHJwKQorCUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9hdG9tL211bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2F0b20vbXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwZGNmMWUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9hdG9tL211bF8xLmFzbQpAQCAtMCwwICsxLDE0NyBAQAorZG5sICBBTUQ2NCBtcG5fbXVsXzEgb3B0aW1pc2VkIGZvciBJbnRlbCBBdG9tLgorCitkbmwgIENvcHlyaWdodCAyMDAzLTIwMDUsIDIwMDcsIDIwMDgsIDIwMTIsIDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIEFNRCBLOCxLOSAgICAgIDMuMDMKK0MgQU1EIEsxMCAgICAgICAgMy4wMworQyBBTUQgYnVsbCAgICAgICA0Ljc0CitDIEFNRCBwaWxlICAgICAgIDQuNTYKK0MgQU1EIHN0ZWFtCitDIEFNRCBleGNhdmF0b3IKK0MgQU1EIGJvYmNhdCAgICAgNS41NiAgICA2LjA0CitDIEFNRCBqYWd1YXIgICAgIDUuNTUgICAgNS44NAorQyBJbnRlbCBQNCAgICAgIDEzLjA1CitDIEludGVsIGNvcmUyICAgIDQuMDMKK0MgSW50ZWwgTkhNICAgICAgMy44MAorQyBJbnRlbCBTQlIgICAgICAyLjc1CitDIEludGVsIElCUiAgICAgIDIuNjkKK0MgSW50ZWwgSFdMICAgICAgMi41MAorQyBJbnRlbCBCV0wgICAgICAyLjU1CitDIEludGVsIFNLTCAgICAgIDIuNTcKK0MgSW50ZWwgYXRvbSAgICAxNy4zCitDIEludGVsIFNMTSAgICAgMTQuNworQyBWSUEgbmFubworCitDIFRoZSBsb29wIG9mIHRoaXMgY29kZSBpcyB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgYSBjb2RlIGdlbmVyYXRpb24gYW5kCitDIG9wdGltaXNhdGlvbiB0b29sIHN1aXRlIHdyaXR0ZW4gYnkgRGF2aWQgSGFydmV5IGFuZCBUb3Jiam9ybiBHcmFubHVuZC4KKworZGVmaW5lKGBycCcsICAgICAgYCVyZGknKSAgIEMgcmN4CitkZWZpbmUoYHVwJywgICAgICBgJXJzaScpICAgQyByZHgKK2RlZmluZShgbl9wYXJhbScsIGAlcmR4JykgICBDIHI4CitkZWZpbmUoYHYwJywgICAgICBgJXJjeCcpICAgQyByOQorCitkZWZpbmUoYG4nLCAgICAgICBgJXIxMScpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX211bF8xKQorCUZVTkNfRU5UUlkoNCkKKwl4b3IJJXI4LCAlcjgKK0woY29tKToJbW92CSh1cCksICVyYXgKKwlsZWEJLTE2KHVwLG5fcGFyYW0sOCksIHVwCisJbGVhCS04KHJwLG5fcGFyYW0sOCksIHJwCisJdGVzdAkkMSwgUjgobl9wYXJhbSkKKwlqbnoJTChieDEpCisKK0woYngwKToJbW92CSVyOCwgJXI5CisJdGVzdAkkMiwgUjgobl9wYXJhbSkKKwlqbnoJTChiMTApCisKK0woYjAwKToJbW92CSQyLCBSMzIobikKKwlzdWIJbl9wYXJhbSwgbgorCWptcAlMKGxvMCkKKworTChieDEpOgl0ZXN0CSQyLCBSOChuX3BhcmFtKQorCWpueglMKGIxMSkKKworTChiMDEpOgltb3YJJDMsIFIzMihuKQorCXN1YgluX3BhcmFtLCBuCisJbXVsCXYwCisJY21wCSQyLCBuCisJam56CUwobG8xKQorCWptcAlMKGNqMSkKKworTChiMTEpOgltb3YJJDEsIFIzMihuKQorCXN1YgluX3BhcmFtLCBuCisJam1wCUwobG8zKQorCitMKGIxMCk6CXhvcglSMzIobiksIFIzMihuKQorCXN1YgluX3BhcmFtLCBuCisJam1wCUwobG8yKQorCitMKHRvcCk6CW11bAl2MAorCW1vdgklcjksIC0yNChycCxuLDgpCitMKGxvMSk6CXhvcgklcjlkLCAlcjlkCisJYWRkCSVyYXgsICVyOAorCW1vdgkodXAsbiw4KSwgJXJheAorCWFkYwklcmR4LCAlcjkKKwltb3YJJXI4LCAtMTYocnAsbiw4KQorTChsbzApOgl4b3IJJXI4ZCwgJXI4ZAorCW11bAl2MAorCWFkZAklcmF4LCAlcjkKKwltb3YJOCh1cCxuLDgpLCAlcmF4CisJYWRjCSVyZHgsICVyOAorCW1vdgklcjksIC04KHJwLG4sOCkKK0wobG8zKToJeG9yCSVyOWQsICVyOWQKKwltdWwJdjAKKwlhZGQJJXJheCwgJXI4CisJbW92CTE2KHVwLG4sOCksICVyYXgKKwlhZGMJJXJkeCwgJXI5CisJbW92CSVyOCwgKHJwLG4sOCkKK0wobG8yKToJeG9yCSVyOGQsICVyOGQKKwltdWwJdjAKKwlhZGQJJXJheCwgJXI5CisJbW92CTI0KHVwLG4sOCksICVyYXgKKwlhZGMJJXJkeCwgJXI4CisJYWRkCSQ0LCBuCisJanMJTCh0b3ApCisKK0woZW5kKToJbXVsCXYwCisJbW92CSVyOSwgLTgocnApCitMKGNqMSk6CWFkZAklcmF4LCAlcjgKKwltb3YJJDAsIFIzMiglcmF4KQorCWFkYwklcmR4LCAlcmF4CisJbW92CSVyOCwgKHJwKQorCUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCisKK1BST0xPR1VFKG1wbl9tdWxfMWMpCisJRlVOQ19FTlRSWSg0KQorSUZET1MoYAltb3YJNTYoJXJzcCksICVyOAknKQorCWptcAlMKGNvbSkKK0VQSUxPR1VFKCkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYXRvbS9tdWxfMi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9hdG9tL211bF8yLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmMyMmNkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYXRvbS9tdWxfMi5hc20KQEAgLTAsMCArMSwxOTAgQEAKK2RubCAgQU1ENjQgbXBuX211bF8yIG9wdGltaXNlZCBmb3IgSW50ZWwgQXRvbS4KKworZG5sICBDb3B5cmlnaHQgMjAwOCwgMjAxMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYgliZXN0CitDIEFNRCBLOCxLOSAgICAgIDUuNzgKK0MgQU1EIEsxMCAgICAgICAgNS43OAorQyBBTUQgYnVsbCAgICAgICA5LjEwCitDIEFNRCBwaWxlICAgICAgIDkuMTcKK0MgQU1EIHN0ZWFtCitDIEFNRCBleGNhdmF0b3IKK0MgQU1EIGJvYmNhdCAgICAxMS4zCitDIEFNRCBqYWd1YXIgICAgMTAuOQorQyBJbnRlbCBQNCAgICAgIDI0LjYKK0MgSW50ZWwgY29yZTIgICAgOC4wNgorQyBJbnRlbCBOSE0gICAgICA3LjY1CitDIEludGVsIFNCUiAgICAgIDYuMjgKK0MgSW50ZWwgSUJSICAgICAgNi4xMAorQyBJbnRlbCBIV0wgICAgICA2LjA5CitDIEludGVsIEJXTCAgICAgIDQuNzMKK0MgSW50ZWwgU0tMICAgICAgNC43NworQyBJbnRlbCBhdG9tICAgIDM1LjMKK0MgSW50ZWwgU0xNICAgICAyNS42CitDIFZJQSBuYW5vCisKK0MgVGhlIGxvb3Agb2YgdGhpcyBjb2RlIGlzIHRoZSByZXN1bHQgb2YgcnVubmluZyBhIGNvZGUgZ2VuZXJhdGlvbiBhbmQKK0Mgb3B0aW1pc2F0aW9uIHRvb2wgc3VpdGUgd3JpdHRlbiBieSBEYXZpZCBIYXJ2ZXkgYW5kIFRvcmJqb3JuIEdyYW5sdW5kLgorCitkZWZpbmUoYHJwJywgICAgICBgJXJkaScpICAgQyByY3gKK2RlZmluZShgdXAnLCAgICAgIGAlcnNpJykgICBDIHJkeAorZGVmaW5lKGBuX3BhcmFtJywgYCVyZHgnKSAgIEMgcjgKK2RlZmluZShgdnAnLCAgICAgIGAlcmN4JykgICBDIHI5CisKK2RlZmluZShgdjAnLCBgJXI4JykKK2RlZmluZShgdjEnLCBgJXI5JykKK2RlZmluZShgdzAnLCBgJXJieCcpCitkZWZpbmUoYHcxJywgYCVyY3gnKQorZGVmaW5lKGB3MicsIGAlcmJwJykKK2RlZmluZShgdzMnLCBgJXIxMCcpCitkZWZpbmUoYG4nLCAgYCVyMTEnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigxNikKK1BST0xPR1VFKG1wbl9tdWxfMikKKwlGVU5DX0VOVFJZKDQpCisJcHVzaAklcmJ4CisJcHVzaAklcmJwCisKKwltb3YJKHVwKSwgJXJheAorCisJbW92CSh2cCksIHYwCisJbW92CTgodnApLCB2MQorCisJbW92CW5fcGFyYW0sIG4KKwltdWwJdjAKKworCXRlc3QJJDEsIFI4KG4pCisJam56CUwoYngxKQorCitMKGJ4MCk6CXRlc3QJJDIsIFI4KG4pCisJam56CUwoYjEwKQorCitMKGIwMCk6CW1vdgklcmF4LCB3MAorCW1vdgkodXApLCAlcmF4CisJbW92CSVyZHgsIHcxCisJeG9yCVIzMih3MiksIFIzMih3MikKKwlsZWEJLTgocnApLCBycAorCWptcAlMKGxvMCkKKworTChiMTApOgltb3YJJXJheCwgdzIKKwltb3YJKHVwKSwgJXJheAorCW1vdgklcmR4LCB3MworCXhvcglSMzIodzApLCBSMzIodzApCisJbGVhCS0xNih1cCksIHVwCisJbGVhCS0yNChycCksIHJwCisJam1wCUwobG8yKQorCitMKGJ4MSk6CXRlc3QJJDIsIFI4KG4pCisJam56CUwoYjExKQorCitMKGIwMSk6CW1vdgklcmF4LCB3MworCW1vdgklcmR4LCB3MAorCW1vdgkodXApLCAlcmF4CisJeG9yCVIzMih3MSksIFIzMih3MSkKKwlsZWEJOCh1cCksIHVwCisJZGVjCW4KKwlqbXAJTChsbzEpCisKK0woYjExKToJbW92CSVyYXgsIHcxCisJbW92CSh1cCksICVyYXgKKwltb3YJJXJkeCwgdzIKKwl4b3IJUjMyKHczKSwgUjMyKHczKQorCWxlYQktOCh1cCksIHVwCisJbGVhCS0xNihycCksIHJwCisJam1wCUwobG8zKQorCisJQUxJR04oMTYpCitMKHRvcCk6CitMKGxvMSk6CW11bAl2MQorCWFkZAklcmF4LCB3MAorCW1vdgkodXApLCAlcmF4CisJbW92CSQwLCBSMzIodzIpCisJbW92CXczLCAocnApCisJYWRjCSVyZHgsIHcxCisJbXVsCXYwCisJYWRkCSVyYXgsIHcwCisJbW92CSh1cCksICVyYXgKKwlhZGMJJXJkeCwgdzEKKwlhZGMJJDAsIFIzMih3MikKK0wobG8wKToJbXVsCXYxCisJYWRkCSVyYXgsIHcxCisJbW92CTgodXApLCAlcmF4CisJbW92CXcwLCA4KHJwKQorCWFkYwklcmR4LCB3MgorCW11bAl2MAorCWFkZAklcmF4LCB3MQorCW1vdgk4KHVwKSwgJXJheAorCWFkYwklcmR4LCB3MgorCW1vdgkkMCwgUjMyKHczKQorCWFkYwkkMCwgUjMyKHczKQorTChsbzMpOgltdWwJdjEKKwlhZGQJJXJheCwgdzIKKwltb3YJMTYodXApLCAlcmF4CisJbW92CXcxLCAxNihycCkKKwltb3YJJDAsIFIzMih3MCkKKwlhZGMJJXJkeCwgdzMKKwltdWwJdjAKKwlhZGQJJXJheCwgdzIKKwltb3YJMTYodXApLCAlcmF4CisJYWRjCSVyZHgsIHczCitMKGxvMik6CW1vdgkkMCwgUjMyKHcxKQorCW1vdgl3MiwgMjQocnApCisJYWRjCSQwLCBSMzIodzApCisJbXVsCXYxCisJYWRkCSVyYXgsIHczCisJbW92CTI0KHVwKSwgJXJheAorCWxlYQkzMih1cCksIHVwCisJYWRjCSVyZHgsIHcwCisJbXVsCXYwCisJbGVhCTMyKHJwKSwgcnAKKwlhZGQJJXJheCwgdzMKKwlhZGMJJXJkeCwgdzAKKwltb3YJLTgodXApLCAlcmF4CisJYWRjCSQwLCBSMzIodzEpCisJc3ViCSQ0LCBuCisJamEJTCh0b3ApCisKK0woZW5kKToJbXVsCXYxCisJbW92CXczLCAocnApCisJYWRkCSVyYXgsIHcwCisJYWRjCSVyZHgsIHcxCisJbW92CXcwLCA4KHJwKQorCW1vdgl3MSwgJXJheAorCXBvcAklcmJwCisJcG9wCSVyYngKKwlGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYXRvbS9wb3Bjb3VudC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9hdG9tL3BvcGNvdW50LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjE0ZGQzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYXRvbS9wb3Bjb3VudC5hc20KQEAgLTAsMCArMSwzNSBAQAorZG5sICB4ODYtNjQgbXBuX3BvcGNvdW50LgorCitkbmwgIENvcHlyaWdodCAyMDA3LCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fcG9wY291bnQpCitpbmNsdWRlX21wbihgeDg2L3BlbnRpdW00L3NzZTIvcG9wY291bnQuYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2F0b20vcmVkY18xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2F0b20vcmVkY18xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmI5YTg0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYXRvbS9yZWRjXzEuYXNtCkBAIC0wLDAgKzEsNTc5IEBACitkbmwgIFg4Ni02NCBtcG5fcmVkY18xIG9wdGltaXNlZCBmb3IgSW50ZWwgQXRvbS4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDAzLTIwMDUsIDIwMDcsIDIwMDgsIDIwMTEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIKK0MgQU1EIEs4LEs5CSA/CitDIEFNRCBLMTAJID8KK0MgQU1EIGJ1bGwJID8KK0MgQU1EIHBpbGUJID8KK0MgQU1EIHN0ZWFtCSA/CitDIEFNRCBib2JjYXQJIDUuMAorQyBBTUQgamFndWFyCSA/CitDIEludGVsIFA0CSA/CitDIEludGVsIGNvcmUJID8KK0MgSW50ZWwgTkhNCSA/CitDIEludGVsIFNCUgkgPworQyBJbnRlbCBJQlIJID8KK0MgSW50ZWwgSFdMCSA/CitDIEludGVsIEJXTAkgPworQyBJbnRlbCBhdG9tCSA/CitDIFZJQSBuYW5vCSA/CisKK0MgVE9ETworQyAgKiBNaWNyby1vcHRpbWlzZSwgbm9uZSBwZXJmb3JtZWQgdGh1cyBmYXIuCitDICAqIENvbnNpZGVyIGlubGluaW5nIG1wbl9hZGRfbi4KK0MgICogU2luZ2xlIGJhc2VjYXNlcyBvdXQgYmVmb3JlIHRoZSBwdXNoZXMuCitDICAqIE1ha2UgbGVhZC1pbiBjb2RlIGZvciB0aGUgaW5uZXIgbG9vcHMgYmUgbW9yZSBzaW1pbGFyLgorCitDIFdoZW4gcGxheWluZyB3aXRoIHBvaW50ZXJzLCBzZXQgdGhpcyB0byAkMiB0byBmYWxsIGJhY2sgdG8gY29uc2VydmF0aXZlCitDIGluZGV4aW5nIGluIHdpbmQtZG93biBjb2RlLgorZGVmaW5lKGBJJyxgJDEnKQorCitkZWZpbmUoYHJwJywgICAgICAgICAgYCVyZGknKSAgIEMgcmN4CitkZWZpbmUoYHVwJywgICAgICAgICAgYCVyc2knKSAgIEMgcmR4CitkZWZpbmUoYG1wX3BhcmFtJywgICAgYCVyZHgnKSAgIEMgcjgKK2RlZmluZShgbicsICAgICAgICAgICBgJXJjeCcpICAgQyByOQorZGVmaW5lKGB1MGludicsICAgICAgIGAlcjgnKSAgICBDIHN0YWNrCisKK2RlZmluZShgaScsICAgICAgICAgICBgJXIxNCcpCitkZWZpbmUoYGonLCAgICAgICAgICAgYCVyMTUnKQorZGVmaW5lKGBtcCcsICAgICAgICAgIGAlcjEyJykKK2RlZmluZShgcTAnLCAgICAgICAgICBgJXIxMycpCitkZWZpbmUoYHcwJywgICAgICAgICAgYCVyYnAnKQorZGVmaW5lKGB3MScsICAgICAgICAgIGAlcjknKQorZGVmaW5lKGB3MicsICAgICAgICAgIGAlcjEwJykKK2RlZmluZShgdzMnLCAgICAgICAgICBgJXIxMScpCisKK0MgcmF4IHJieCByY3ggcmR4IHJkaSByc2kgcmJwIHI4IHI5IHIxMCByMTEgcjEyIHIxMyByMTQgcjE1CisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK2RlZmluZShgQUxJR054JywgYEFMSUdOKDE2KScpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDMyKQorUFJPTE9HVUUobXBuX3JlZGNfMSkKKwlGVU5DX0VOVFJZKDQpCitJRkRPUyhgCW1vdgk1NiglcnNwKSwgJXI4CScpCisJcHVzaAklcmJ4CisJcHVzaAklcmJwCisJcHVzaAklcjEyCisJcHVzaAklcjEzCisJcHVzaAklcjE0CisJcHVzaAklcjE1CisKKwltb3YJKHVwKSwgcTAKKwltb3YJbiwgagkJCUMgb3V0ZXIgbG9vcCBpbmR1Y3Rpb24gdmFyCisJbGVhCShtcF9wYXJhbSxuLDgpLCBtcAorCWxlYQkodXAsbiw4KSwgdXAKKwluZWcJbgorCWltdWwJdTBpbnYsIHEwCQlDIGZpcnN0IGl0ZXJhdGlvbiBxMAorCisJdGVzdAkkMSwgUjgobikKKwlqeglMKGJ4MCkKKworTChieDEpOgl0ZXN0CSQyLCBSOChuKQorCWp6CUwoYjMpCisKK0woYjEpOgljbXAJJC0xLCBSMzIobikKKwlqeglMKG4xKQorCitMKG90cDEpOmxlYQkxKG4pLCBpCisJbW92CShtcCxuLDgpLCAlcmF4CisJbXVsCXEwCisJbW92CSVyYXgsICVyYnAKKwltb3YJOChtcCxuLDgpLCAlcmF4CisJbW92CSVyZHgsICVyOQorCW11bAlxMAorCW1vdgklcmF4LCAlcmJ4CisJbW92CTE2KG1wLG4sOCksICVyYXgKKwltb3YJJXJkeCwgJXIxMAorCW11bAlxMAorCWFkZAkodXAsbiw4KSwgJXJicAorCW1vdgklcmF4LCAlcmJwCisJYWRjCSVyOSwgJXJieAorCW1vdgkyNChtcCxuLDgpLCAlcmF4CisJYWRjCSQwLCAlcjEwCisJbW92CSVyZHgsICVyOQorCW11bAlxMAorCWFkZAk4KHVwLG4sOCksICVyYngKKwltb3YJJXJieCwgOCh1cCxuLDgpCisJbW92CSVyYXgsICVyMTEKKwlhZGMJJXIxMCwgJXJicAorCW1vdgkzMihtcCxuLDgpLCAlcmF4CisJYWRjCSQwLCAlcjkKKwlpbXVsCXUwaW52LCAlcmJ4CQlDIG5leHQgcSBsaW1iCisJam1wCUwoZTEpCisKKwlBTElHTngKK0wodHAxKToJbXVsCXEwCisJYWRkCSVyYnAsIC0yNCh1cCxpLDgpCisJbW92CSVyYXgsICVyYnAKKwltb3YJKG1wLGksOCksICVyYXgKKwlhZGMJJXI5LCAlcjExCisJbW92CSVyZHgsICVyOQorCWFkYwkkMCwgJXIxMAorCW11bAlxMAorCWFkZAklcjExLCAtMTYodXAsaSw4KQorCW1vdgklcmF4LCAlcjExCisJbW92CTgobXAsaSw4KSwgJXJheAorCWFkYwklcjEwLCAlcmJwCisJbW92CSVyZHgsICVyMTAKKwlhZGMJJDAsICVyOQorCW11bAlxMAorCWFkZAklcmJwLCAtOCh1cCxpLDgpCisJbW92CSVyYXgsICVyYnAKKwlhZGMJJXI5LCAlcjExCisJbW92CTE2KG1wLGksOCksICVyYXgKKwlhZGMJJDAsICVyMTAKKwltb3YJJXJkeCwgJXI5CisJbXVsCXEwCisJYWRkCSVyMTEsICh1cCxpLDgpCisJbW92CSVyYXgsICVyMTEKKwlhZGMJJXIxMCwgJXJicAorCW1vdgkyNChtcCxpLDgpLCAlcmF4CisJYWRjCSQwLCAlcjkKK0woZTEpOglhZGQJJDQsIGkKKwltb3YJJXJkeCwgJXIxMAorCWpzCUwodHAxKQorCitMKGVkMSk6CW11bAlxMAorCWFkZAklcmJwLCBJKC0yNCh1cCksLTI0KHVwLGksOCkpCisJYWRjCSVyOSwgJXIxMQorCWFkYwkkMCwgJXIxMAorCWFkZAklcjExLCBJKC0xNih1cCksLTE2KHVwLGksOCkpCisJYWRjCSVyMTAsICVyYXgKKwlhZGMJJDAsICVyZHgKKwlhZGQJJXJheCwgSSgtOCh1cCksLTgodXAsaSw4KSkKKwlhZGMJJDAsICVyZHgKKwltb3YJJXJkeCwgKHVwLG4sOCkJCUMgdXBbMF0KKwltb3YJJXJieCwgcTAJCUMgcHJldmlvdXNseSBjb21wdXRlZCBxIGxpbWIgLT4gcTAKKwlsZWEJOCh1cCksIHVwCQlDIHVwKysKKwlkZWMJagorCWpueglMKG90cDEpCisJam1wCUwoY2opCisKK0woYjMpOgljbXAJJC0zLCBSMzIobikKKwlqeglMKG4zKQorCitMKG90cDMpOmxlYQkzKG4pLCBpCisJbW92CShtcCxuLDgpLCAlcmF4CisJbXVsCXEwCisJbW92CSVyYXgsICVyYnAKKwltb3YJOChtcCxuLDgpLCAlcmF4CisJbW92CSVyZHgsICVyOQorCW11bAlxMAorCW1vdgklcmF4LCAlcmJ4CisJbW92CTE2KG1wLG4sOCksICVyYXgKKwltb3YJJXJkeCwgJXIxMAorCW11bAlxMAorCWFkZAkodXAsbiw4KSwgJXJicAorCW1vdgklcmF4LCAlcmJwCisJbW92CTI0KG1wLG4sOCksICVyYXgKKwlhZGMJJXI5LCAlcmJ4CisJbW92CSVyZHgsICVyOQorCWFkYwkkMCwgJXIxMAorCW11bAlxMAorCWFkZAk4KHVwLG4sOCksICVyYngKKwltb3YJJXJieCwgOCh1cCxuLDgpCisJbW92CSVyYXgsICVyMTEKKwltb3YJMzIobXAsbiw4KSwgJXJheAorCWFkYwklcjEwLCAlcmJwCisJbW92CSVyZHgsICVyMTAKKwlhZGMJJDAsICVyOQorCWltdWwJdTBpbnYsICVyYngJCUMgbmV4dCBxIGxpbWIKKwlqbXAJTChlMykKKworCUFMSUdOeAorTCh0cDMpOgltdWwJcTAKKwlhZGQJJXJicCwgLTI0KHVwLGksOCkKKwltb3YJJXJheCwgJXJicAorCW1vdgkobXAsaSw4KSwgJXJheAorCWFkYwklcjksICVyMTEKKwltb3YJJXJkeCwgJXI5CisJYWRjCSQwLCAlcjEwCisJbXVsCXEwCisJYWRkCSVyMTEsIC0xNih1cCxpLDgpCisJbW92CSVyYXgsICVyMTEKKwltb3YJOChtcCxpLDgpLCAlcmF4CisJYWRjCSVyMTAsICVyYnAKKwltb3YJJXJkeCwgJXIxMAorCWFkYwkkMCwgJXI5CitMKGUzKToJbXVsCXEwCisJYWRkCSVyYnAsIC04KHVwLGksOCkKKwltb3YJJXJheCwgJXJicAorCWFkYwklcjksICVyMTEKKwltb3YJMTYobXAsaSw4KSwgJXJheAorCWFkYwkkMCwgJXIxMAorCW1vdgklcmR4LCAlcjkKKwltdWwJcTAKKwlhZGQJJXIxMSwgKHVwLGksOCkKKwltb3YJJXJheCwgJXIxMQorCWFkYwklcjEwLCAlcmJwCisJbW92CTI0KG1wLGksOCksICVyYXgKKwlhZGMJJDAsICVyOQorCWFkZAkkNCwgaQorCW1vdgklcmR4LCAlcjEwCisJanMJTCh0cDMpCisKK0woZWQzKToJbXVsCXEwCisJYWRkCSVyYnAsIEkoLTI0KHVwKSwtMjQodXAsaSw4KSkKKwlhZGMJJXI5LCAlcjExCisJYWRjCSQwLCAlcjEwCisJYWRkCSVyMTEsIEkoLTE2KHVwKSwtMTYodXAsaSw4KSkKKwlhZGMJJXIxMCwgJXJheAorCWFkYwkkMCwgJXJkeAorCWFkZAklcmF4LCBJKC04KHVwKSwtOCh1cCxpLDgpKQorCWFkYwkkMCwgJXJkeAorCW1vdgklcmR4LCAodXAsbiw4KQkJQyB1cFswXQorCW1vdgklcmJ4LCBxMAkJQyBwcmV2aW91c2x5IGNvbXB1dGVkIHEgbGltYiAtPiBxMAorCWxlYQk4KHVwKSwgdXAJCUMgdXArKworCWRlYwlqCisJam56CUwob3RwMykKK0MJam1wCUwoY2opCisKK0woY2opOgorSUZTVEQoYAlsZWEJKHVwLG4sOCksIHVwCQlDIHBhcmFtIDI6IHVwCisJbGVhCSh1cCxuLDgpLCAlcmR4CQlDIHBhcmFtIDM6IHVwIC0gbgorCW5lZwlSMzIobikJCScpCUMgcGFyYW0gNDogbgorCitJRkRPUyhgCWxlYQkodXAsbiw4KSwgJXJkeAkJQyBwYXJhbSAyOiB1cAorCWxlYQkoJXJkeCxuLDgpLCAlcjgJCUMgcGFyYW0gMzogdXAgLSBuCisJbmVnCVIzMihuKQorCW1vdgluLCAlcjkJCQlDIHBhcmFtIDQ6IG4KKwltb3YJcnAsICVyY3gJJykJQyBwYXJhbSAxOiBycAorCitJRlNURChgCXN1YgkkOCwgJXJzcAknKQorSUZET1MoYAlzdWIJJDQwLCAlcnNwCScpCisJQVNTRVJUKG56LCBgdGVzdCAkMTUsICVyc3AnKQorCUNBTEwoCW1wbl9hZGRfbikKK0lGU1REKGAJYWRkCSQ4LCAlcnNwCScpCitJRkRPUyhgCWFkZAkkNDAsICVyc3AJJykKKworTChyZXQpOglwb3AJJXIxNQorCXBvcAklcjE0CisJcG9wCSVyMTMKKwlwb3AJJXIxMgorCXBvcAklcmJwCisJcG9wCSVyYngKKwlGVU5DX0VYSVQoKQorCXJldAorCitMKGJ4MCk6CXRlc3QJJDIsIFI4KG4pCisJam56CUwoYjIpCisKK0woYjApOgljbXAJJC00LCBSMzIobikKKwlqeglMKG40KQorCitMKG90cDApOmxlYQk0KG4pLCBpCisJbW92CShtcCxuLDgpLCAlcmF4CisJbXVsCXEwCisJbW92CSVyYXgsICVyMTEKKwltb3YJOChtcCxuLDgpLCAlcmF4CisJbW92CSVyZHgsICVyMTAKKwltdWwJcTAKKwltb3YJJXJheCwgJXJieAorCW1vdgkxNihtcCxuLDgpLCAlcmF4CisJbW92CSVyZHgsICVyOQorCW11bAlxMAorCWFkZAkodXAsbiw4KSwgJXIxMQorCW1vdgklcmF4LCAlcjExCisJYWRjCSVyMTAsICVyYngKKwltb3YJMjQobXAsbiw4KSwgJXJheAorCWFkYwkkMCwgJXI5CisJbW92CSVyZHgsICVyMTAKKwltdWwJcTAKKwlhZGQJOCh1cCxuLDgpLCAlcmJ4CisJbW92CSVyYngsIDgodXAsbiw4KQorCW1vdgklcmF4LCAlcmJwCisJbW92CTMyKG1wLG4sOCksICVyYXgKKwlhZGMJJXI5LCAlcjExCisJbW92CSVyZHgsICVyOQorCWFkYwkkMCwgJXIxMAorCWltdWwJdTBpbnYsICVyYngJCUMgbmV4dCBxIGxpbWIKKwlqbXAJTChlMCkKKworCUFMSUdOeAorTCh0cDApOgltdWwJcTAKKwlhZGQJJXJicCwgLTI0KHVwLGksOCkKKwltb3YJJXJheCwgJXJicAorCW1vdgkobXAsaSw4KSwgJXJheAorCWFkYwklcjksICVyMTEKKwltb3YJJXJkeCwgJXI5CisJYWRjCSQwLCAlcjEwCitMKGUwKToJbXVsCXEwCisJYWRkCSVyMTEsIC0xNih1cCxpLDgpCisJbW92CSVyYXgsICVyMTEKKwltb3YJOChtcCxpLDgpLCAlcmF4CisJYWRjCSVyMTAsICVyYnAKKwltb3YJJXJkeCwgJXIxMAorCWFkYwkkMCwgJXI5CisJbXVsCXEwCisJYWRkCSVyYnAsIC04KHVwLGksOCkKKwltb3YJJXJheCwgJXJicAorCWFkYwklcjksICVyMTEKKwltb3YJMTYobXAsaSw4KSwgJXJheAorCWFkYwkkMCwgJXIxMAorCW1vdgklcmR4LCAlcjkKKwltdWwJcTAKKwlhZGQJJXIxMSwgKHVwLGksOCkKKwltb3YJJXJheCwgJXIxMQorCWFkYwklcjEwLCAlcmJwCisJbW92CTI0KG1wLGksOCksICVyYXgKKwlhZGMJJDAsICVyOQorCWFkZAkkNCwgaQorCW1vdgklcmR4LCAlcjEwCisJanMJTCh0cDApCisKK0woZWQwKToJbXVsCXEwCisJYWRkCSVyYnAsIEkoLTI0KHVwKSwtMjQodXAsaSw4KSkKKwlhZGMJJXI5LCAlcjExCisJYWRjCSQwLCAlcjEwCisJYWRkCSVyMTEsIEkoLTE2KHVwKSwtMTYodXAsaSw4KSkKKwlhZGMJJXIxMCwgJXJheAorCWFkYwkkMCwgJXJkeAorCWFkZAklcmF4LCBJKC04KHVwKSwtOCh1cCxpLDgpKQorCWFkYwkkMCwgJXJkeAorCW1vdgklcmR4LCAodXAsbiw4KQkJQyB1cFswXQorCW1vdgklcmJ4LCBxMAkJQyBwcmV2aW91c2x5IGNvbXB1dGVkIHEgbGltYiAtPiBxMAorCWxlYQk4KHVwKSwgdXAJCUMgdXArKworCWRlYwlqCisJam56CUwob3RwMCkKKwlqbXAJTChjaikKKworTChiMik6CWNtcAkkLTIsIFIzMihuKQorCWp6CUwobjIpCisKK0wob3RwMik6bGVhCTIobiksIGkKKwltb3YJKG1wLG4sOCksICVyYXgKKwltdWwJcTAKKwltb3YJJXJheCwgJXIxMQorCW1vdgk4KG1wLG4sOCksICVyYXgKKwltb3YJJXJkeCwgJXIxMAorCW11bAlxMAorCW1vdgklcmF4LCAlcmJ4CisJbW92CTE2KG1wLG4sOCksICVyYXgKKwltb3YJJXJkeCwgJXI5CisJbXVsCXEwCisJYWRkCSh1cCxuLDgpLCAlcjExCisJbW92CSVyYXgsICVyMTEKKwlhZGMJJXIxMCwgJXJieAorCW1vdgkyNChtcCxuLDgpLCAlcmF4CisJYWRjCSQwLCAlcjkKKwltb3YJJXJkeCwgJXIxMAorCW11bAlxMAorCWFkZAk4KHVwLG4sOCksICVyYngKKwltb3YJJXJieCwgOCh1cCxuLDgpCisJbW92CSVyYXgsICVyYnAKKwltb3YJMzIobXAsbiw4KSwgJXJheAorCWFkYwklcjksICVyMTEKKwltb3YJJXJkeCwgJXI5CisJYWRjCSQwLCAlcjEwCisJaW11bAl1MGludiwgJXJieAkJQyBuZXh0IHEgbGltYgorCWptcAlMKGUyKQorCisJQUxJR054CitMKHRwMik6CW11bAlxMAorCWFkZAklcmJwLCAtMjQodXAsaSw4KQorCW1vdgklcmF4LCAlcmJwCisJbW92CShtcCxpLDgpLCAlcmF4CisJYWRjCSVyOSwgJXIxMQorCW1vdgklcmR4LCAlcjkKKwlhZGMJJDAsICVyMTAKKwltdWwJcTAKKwlhZGQJJXIxMSwgLTE2KHVwLGksOCkKKwltb3YJJXJheCwgJXIxMQorCW1vdgk4KG1wLGksOCksICVyYXgKKwlhZGMJJXIxMCwgJXJicAorCW1vdgklcmR4LCAlcjEwCisJYWRjCSQwLCAlcjkKKwltdWwJcTAKKwlhZGQJJXJicCwgLTgodXAsaSw4KQorCW1vdgklcmF4LCAlcmJwCisJYWRjCSVyOSwgJXIxMQorCW1vdgkxNihtcCxpLDgpLCAlcmF4CisJYWRjCSQwLCAlcjEwCisJbW92CSVyZHgsICVyOQorTChlMik6CW11bAlxMAorCWFkZAklcjExLCAodXAsaSw4KQorCW1vdgklcmF4LCAlcjExCisJYWRjCSVyMTAsICVyYnAKKwltb3YJMjQobXAsaSw4KSwgJXJheAorCWFkYwkkMCwgJXI5CisJYWRkCSQ0LCBpCisJbW92CSVyZHgsICVyMTAKKwlqcwlMKHRwMikKKworTChlZDIpOgltdWwJcTAKKwlhZGQJJXJicCwgSSgtMjQodXApLC0yNCh1cCxpLDgpKQorCWFkYwklcjksICVyMTEKKwlhZGMJJDAsICVyMTAKKwlhZGQJJXIxMSwgSSgtMTYodXApLC0xNih1cCxpLDgpKQorCWFkYwklcjEwLCAlcmF4CisJYWRjCSQwLCAlcmR4CisJYWRkCSVyYXgsIEkoLTgodXApLC04KHVwLGksOCkpCisJYWRjCSQwLCAlcmR4CisJbW92CSVyZHgsICh1cCxuLDgpCQlDIHVwWzBdCisJbW92CSVyYngsIHEwCQlDIHByZXZpb3VzbHkgY29tcHV0ZWQgcSBsaW1iIC0+IHEwCisJbGVhCTgodXApLCB1cAkJQyB1cCsrCisJZGVjCWoKKwlqbnoJTChvdHAyKQorCWptcAlMKGNqKQorCitMKG4xKToJbW92CShtcF9wYXJhbSksICVyYXgKKwltdWwJcTAKKwlhZGQJLTgodXApLCAlcmF4CisJYWRjCSh1cCksICVyZHgKKwltb3YJJXJkeCwgKHJwKQorCW1vdgkkMCwgUjMyKCVyYXgpCisJYWRjCVIzMiglcmF4KSwgUjMyKCVyYXgpCisJam1wCUwocmV0KQorCitMKG4yKToJbW92CShtcF9wYXJhbSksICVyYXgKKwltb3YJLTE2KHVwKSwgJXJicAorCW11bAlxMAorCWFkZAklcmF4LCAlcmJwCisJbW92CSVyZHgsICVyOQorCWFkYwkkMCwgJXI5CisJbW92CS04KG1wKSwgJXJheAorCW1vdgktOCh1cCksICVyMTAKKwltdWwJcTAKKwlhZGQJJXJheCwgJXIxMAorCW1vdgklcmR4LCAlcjExCisJYWRjCSQwLCAlcjExCisJYWRkCSVyOSwgJXIxMAorCWFkYwkkMCwgJXIxMQorCW1vdgklcjEwLCBxMAorCWltdWwJdTBpbnYsIHEwCQlDIG5leHQgcTAKKwltb3YJLTE2KG1wKSwgJXJheAorCW11bAlxMAorCWFkZAklcmF4LCAlcjEwCisJbW92CSVyZHgsICVyOQorCWFkYwkkMCwgJXI5CisJbW92CS04KG1wKSwgJXJheAorCW1vdgkodXApLCAlcjE0CisJbXVsCXEwCisJYWRkCSVyYXgsICVyMTQKKwlhZGMJJDAsICVyZHgKKwlhZGQJJXI5LCAlcjE0CisJYWRjCSQwLCAlcmR4CisJeG9yCVIzMiglcmF4KSwgUjMyKCVyYXgpCisJYWRkCSVyMTEsICVyMTQKKwlhZGMJOCh1cCksICVyZHgKKwltb3YJJXIxNCwgKHJwKQorCW1vdgklcmR4LCA4KHJwKQorCWFkYwlSMzIoJXJheCksIFIzMiglcmF4KQorCWptcAlMKHJldCkKKworCUFMSUdOeAorTChuMyk6CW1vdgktMjQobXApLCAlcmF4CisJbW92CS0yNCh1cCksICVyMTAKKwltdWwJcTAKKwlhZGQJJXJheCwgJXIxMAorCW1vdgktMTYobXApLCAlcmF4CisJbW92CSVyZHgsICVyMTEKKwlhZGMJJDAsICVyMTEKKwltb3YJLTE2KHVwKSwgJXJicAorCW11bAlxMAorCWFkZAklcmF4LCAlcmJwCisJbW92CSVyZHgsICVyOQorCWFkYwkkMCwgJXI5CisJbW92CS04KG1wKSwgJXJheAorCWFkZAklcjExLCAlcmJwCisJbW92CS04KHVwKSwgJXIxMAorCWFkYwkkMCwgJXI5CisJbXVsCXEwCisJbW92CSVyYnAsIHEwCisJaW11bAl1MGludiwgcTAJCUMgbmV4dCBxMAorCWFkZAklcmF4LCAlcjEwCisJbW92CSVyZHgsICVyMTEKKwlhZGMJJDAsICVyMTEKKwltb3YJJXJicCwgLTE2KHVwKQorCWFkZAklcjksICVyMTAKKwlhZGMJJDAsICVyMTEKKwltb3YJJXIxMCwgLTgodXApCisJbW92CSVyMTEsIC0yNCh1cCkJCUMgdXBbMF0KKwlsZWEJOCh1cCksIHVwCQlDIHVwKysKKwlkZWMJagorCWpueglMKG4zKQorCisJbW92CS00OCh1cCksICVyZHgKKwltb3YJLTQwKHVwKSwgJXJieAorCXhvcglSMzIoJXJheCksIFIzMiglcmF4KQorCWFkZAklcmJwLCAlcmR4CisJYWRjCSVyMTAsICVyYngKKwlhZGMJLTgodXApLCAlcjExCisJbW92CSVyZHgsIChycCkKKwltb3YJJXJieCwgOChycCkKKwltb3YJJXIxMSwgMTYocnApCisJYWRjCVIzMiglcmF4KSwgUjMyKCVyYXgpCisJam1wCUwocmV0KQorCitMKG40KToJbW92CS0zMihtcCksICVyYXgKKwltdWwJcTAKKwltb3YJJXJheCwgJXIxMQorCW1vdgktMjQobXApLCAlcmF4CisJbW92CSVyZHgsICVyMTAKKwltdWwJcTAKKwltb3YJJXJheCwgJXJieAorCW1vdgktMTYobXApLCAlcmF4CisJbW92CSVyZHgsICVyOQorCW11bAlxMAorCWFkZAktMzIodXApLCAlcjExCisJbW92CSVyYXgsICVyMTEKKwlhZGMJJXIxMCwgJXJieAorCW1vdgktOChtcCksICVyYXgKKwlhZGMJJDAsICVyOQorCW1vdgklcmR4LCAlcjEwCisJbXVsCXEwCisJYWRkCS0yNCh1cCksICVyYngKKwltb3YJJXJieCwgLTI0KHVwKQorCWFkYwklcjksICVyMTEKKwlhZGMJJDAsICVyMTAKKwlpbXVsCXUwaW52LCAlcmJ4CQlDIG5leHQgcSBsaW1iCisJYWRkCSVyMTEsIC0xNih1cCkKKwlhZGMJJXIxMCwgJXJheAorCWFkYwkkMCwgJXJkeAorCWFkZAklcmF4LCAtOCh1cCkKKwlhZGMJJDAsICVyZHgKKwltb3YJJXJkeCwgLTMyKHVwKQkJQyB1cFswXQorCW1vdgklcmJ4LCBxMAkJQyBwcmV2aW91c2x5IGNvbXB1dGVkIHEgbGltYiAtPiBxMAorCWRlYwlqCisJbGVhCTgodXApLCB1cAkJQyB1cCsrCisJam56CUwobjQpCisJam1wCUwoY2opCitFUElMT0dVRSgpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2F0b20vcnNoMWFvcnNfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9hdG9tL3JzaDFhb3JzX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNWY2MzgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9hdG9tL3JzaDFhb3JzX24uYXNtCkBAIC0wLDAgKzEsMjg3IEBACitkbmwgIHg4Ni02NCBtcG5fcnNoMWFkZF9uL21wbl9yc2gxc3ViX24uCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqb3JuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDExLCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgVE9ETworQyAgKiBTY2hlZHVsZSBsb29wIGxlc3MuICBJdCBpcyBub3cgYWxtb3N0IHN1cmVseSBvdmVyc2NoZWR1bGVkLCByZXN1bHRpbmcgaW4KK0MgICAgbGFyZ2UgZmVlZC1pbiBhbmQgd2luZC1kb3duIGNvZGUuCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBBTUQgSzgsSzkJID8KK0MgQU1EIEsxMAkgPworQyBJbnRlbCBQNAkgPworQyBJbnRlbCBjb3JlMgkgPworQyBJbnRlbCBOTUgJID8KK0MgSW50ZWwgU0JSCSA/CitDIEludGVsIGF0b20JIDUuMjUKK0MgVklBIG5hbm8JID8KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJyxgJXJkaScpCitkZWZpbmUoYHVwJyxgJXJzaScpCitkZWZpbmUoYHZwJyxgJXJkeCcpCitkZWZpbmUoYG4nLGAlcmN4JykKKworaWZkZWYoYE9QRVJBVElPTl9yc2gxYWRkX24nLCBgCisJZGVmaW5lKEFERFNVQiwJICAgICAgYWRkKQorCWRlZmluZShBRENTQkIsCSAgICAgIGFkYykKKwlkZWZpbmUoZnVuY19uLAkgICAgICBtcG5fcnNoMWFkZF9uKQorCWRlZmluZShmdW5jX25jLAkgICAgICBtcG5fcnNoMWFkZF9uYyknKQoraWZkZWYoYE9QRVJBVElPTl9yc2gxc3ViX24nLCBgCisJZGVmaW5lKEFERFNVQiwJICAgICAgc3ViKQorCWRlZmluZShBRENTQkIsCSAgICAgIHNiYikKKwlkZWZpbmUoZnVuY19uLAkgICAgICBtcG5fcnNoMXN1Yl9uKQorCWRlZmluZShmdW5jX25jLAkgICAgICBtcG5fcnNoMXN1Yl9uYyknKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9yc2gxYWRkX24gbXBuX3JzaDFzdWJfbikKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMTYpCitQUk9MT0dVRShmdW5jX24pCisJRlVOQ19FTlRSWSg0KQorCXB1c2gJJXJieAorCXB1c2gJJXJicAorCXB1c2gJJXIxMgorCXB1c2gJJXIxMworCXB1c2gJJXIxNAorCXB1c2gJJXIxNQorCisJbW92CSh1cCksICVyMTUKKwlBRERTVUIJKHZwKSwgJXIxNQorCXNiYglSMzIoJXJieCksIFIzMiglcmJ4KQorCXhvcglSMzIoJXJheCksIFIzMiglcmF4KQorCXNocgklcjE1CisJYWRjCVIzMiglcmF4KSwgUjMyKCVyYXgpCUMgcmV0dXJuIHZhbHVlCisKKwltb3YJUjMyKG4pLCBSMzIoJXJicCkKKwlhbmQJJDMsIFIzMiglcmJwKQorCWp6CUwoYjApCisJY21wCSQyLCBSMzIoJXJicCkKKwlqYWUJTChiMjMpCisKK0woYjEpOglkZWMJbgorCWpueglMKGd0MSkKKwlzaGwJJDYzLCAlcmJ4CisJYWRkCSVyYngsICVyMTUKKwltb3YJJXIxNSwgKHJwKQorCWptcAlMKGNqMSkKK0woZ3QxKToJbGVhCTI0KHVwKSwgdXAKKwlsZWEJMjQodnApLCB2cAorCW1vdgktMTYodXApLCAlcjkKKwlhZGQJUjMyKCVyYngpLCBSMzIoJXJieCkKKwltb3YJLTgodXApLCAlcjEwCisJbGVhCTI0KHJwKSwgcnAKKwltb3YJKHVwKSwgJXIxMQorCUFEQ1NCQgktMTYodnApLCAlcjkKKwlBRENTQkIJLTgodnApLCAlcjEwCisJbW92CSVyMTUsICVyMTIKKwlBRENTQkIJKHZwKSwgJXIxMQorCW1vdgklcjksICVyMTMKKwlzYmIJUjMyKCVyYngpLCBSMzIoJXJieCkKKwltb3YJJXIxMSwgJXIxNQorCW1vdgklcjEwLCAlcjE0CisJc2hsCSQ2MywgJXIxMQorCXNobAkkNjMsICVyMTAKKwlzaGwJJDYzLCAlcjkKKwlvcgklcjksICVyMTIKKwlzaHIJJXIxMworCW1vdgk4KHVwKSwgJXI4CisJc2hyCSVyMTQKKwlvcgklcjEwLCAlcjEzCisJc2hyCSVyMTUKKwlvcgklcjExLCAlcjE0CisJc3ViCSQ0LCBuCisJanoJTChjajUpCitMKGd0NSk6CW1vdgkxNih1cCksICVyOQorCWFkZAlSMzIoJXJieCksIFIzMiglcmJ4KQorCW1vdgkyNCh1cCksICVyMTAKKwlBRENTQkIJOCh2cCksICVyOAorCW1vdgklcjE1LCAlcmJwCisJbW92CTMyKHVwKSwgJXIxMQorCWptcAlMKGxvMSkKKworTChiMjMpOglqbnoJTChiMykKKwltb3YJOCh1cCksICVyOAorCXN1YgkkMiwgbgorCWpueglMKGd0MikKKwlhZGQJUjMyKCVyYngpLCBSMzIoJXJieCkKKwlBRENTQkIJOCh2cCksICVyOAorCW1vdgklcjgsICVyMTIKKwlqbXAJTChjajIpCitMKGd0Mik6CW1vdgkxNih1cCksICVyOQorCWFkZAlSMzIoJXJieCksIFIzMiglcmJ4KQorCW1vdgkyNCh1cCksICVyMTAKKwlBRENTQkIJOCh2cCksICVyOAorCW1vdgklcjE1LCAlcmJwCisJbW92CTMyKHVwKSwgJXIxMQorCUFEQ1NCQgkxNih2cCksICVyOQorCWxlYQkzMih1cCksIHVwCisJQURDU0JCCTI0KHZwKSwgJXIxMAorCW1vdgklcjksICVyMTMKKwlBRENTQkIJMzIodnApLCAlcjExCisJbW92CSVyOCwgJXIxMgorCWptcAlMKGxvMikKKworTChiMyk6CWxlYQk0MCh1cCksIHVwCisJbGVhCTgodnApLCB2cAorCW1vdgklcjE1LCAlcjE0CisJYWRkCVIzMiglcmJ4KSwgUjMyKCVyYngpCisJbW92CS0zMih1cCksICVyMTEKKwlBRENTQkIJMCh2cCksICVyMTEKKwlsZWEJOChycCksIHJwCisJc2JiCVIzMiglcmJ4KSwgUjMyKCVyYngpCisJbW92CSVyMTEsICVyMTUKKwlzaGwJJDYzLCAlcjExCisJbW92CS0yNCh1cCksICVyOAorCXNocgklcjE1CisJb3IJJXIxMSwgJXIxNAorCXN1YgkkMywgbgorCWpueglMKGd0MykKKwlhZGQJUjMyKCVyYngpLCBSMzIoJXJieCkKKwlBRENTQkIJOCh2cCksICVyOAorCWptcAlMKGNqMykKK0woZ3QzKToJbW92CS0xNih1cCksICVyOQorCWFkZAlSMzIoJXJieCksIFIzMiglcmJ4KQorCW1vdgktOCh1cCksICVyMTAKKwlBRENTQkIJOCh2cCksICVyOAorCW1vdgklcjE1LCAlcmJwCisJbW92CSh1cCksICVyMTEKKwlBRENTQkIJMTYodnApLCAlcjkKKwlBRENTQkIJMjQodnApLCAlcjEwCisJbW92CSVyOCwgJXIxMgorCWptcAlMKGxvMykKKworTChiMCk6CWxlYQk0OCh1cCksIHVwCisJbGVhCTE2KHZwKSwgdnAKKwlhZGQJUjMyKCVyYngpLCBSMzIoJXJieCkKKwltb3YJLTQwKHVwKSwgJXIxMAorCWxlYQkxNihycCksIHJwCisJbW92CS0zMih1cCksICVyMTEKKwlBRENTQkIJLTgodnApLCAlcjEwCisJbW92CSVyMTUsICVyMTMKKwlBRENTQkIJKHZwKSwgJXIxMQorCXNiYglSMzIoJXJieCksIFIzMiglcmJ4KQorCW1vdgklcjExLCAlcjE1CisJbW92CSVyMTAsICVyMTQKKwlzaGwJJDYzLCAlcjExCisJc2hsCSQ2MywgJXIxMAorCW1vdgktMjQodXApLCAlcjgKKwlzaHIJJXIxNAorCW9yCSVyMTAsICVyMTMKKwlzaHIJJXIxNQorCW9yCSVyMTEsICVyMTQKKwlzdWIJJDQsIG4KKwlqbnoJTChndDQpCisJYWRkCVIzMiglcmJ4KSwgUjMyKCVyYngpCisJQURDU0JCCTgodnApLCAlcjgKKwlqbXAJTChjajQpCitMKGd0NCk6CW1vdgktMTYodXApLCAlcjkKKwlhZGQJUjMyKCVyYngpLCBSMzIoJXJieCkKKwltb3YJLTgodXApLCAlcjEwCisJQURDU0JCCTgodnApLCAlcjgKKwltb3YJJXIxNSwgJXJicAorCW1vdgkodXApLCAlcjExCisJQURDU0JCCTE2KHZwKSwgJXI5CisJam1wCUwobG8wKQorCisJQUxJR04oOCkKK0wodG9wKToJbW92CTE2KHVwKSwgJXI5CisJc2hyCSVyMTQKKwlvcgklcjEwLCAlcjEzCisJc2hyCSVyMTUKKwlvcgklcjExLCAlcjE0CisJYWRkCVIzMiglcmJ4KSwgUjMyKCVyYngpCisJbW92CTI0KHVwKSwgJXIxMAorCW1vdgklcmJwLCAocnApCisJQURDU0JCCTgodnApLCAlcjgKKwltb3YJJXIxNSwgJXJicAorCWxlYQkzMihycCksIHJwCisJbW92CTMyKHVwKSwgJXIxMQorTChsbzEpOglBRENTQkIJMTYodnApLCAlcjkKKwlsZWEJMzIodXApLCB1cAorCW1vdgklcjEyLCAtMjQocnApCitMKGxvMCk6CUFEQ1NCQgkyNCh2cCksICVyMTAKKwltb3YJJXI4LCAlcjEyCisJbW92CSVyMTMsIC0xNihycCkKK0wobG8zKToJQURDU0JCCTMyKHZwKSwgJXIxMQorCW1vdgklcjksICVyMTMKKwltb3YJJXIxNCwgLTgocnApCitMKGxvMik6CXNiYglSMzIoJXJieCksIFIzMiglcmJ4KQorCXNobAkkNjMsICVyOAorCW1vdgklcjExLCAlcjE1CisJc2hyCSVyMTIKKwltb3YJJXIxMCwgJXIxNAorCXNobAkkNjMsICVyOQorCWxlYQkzMih2cCksIHZwCisJc2hsCSQ2MywgJXIxMAorCW9yCSVyOCwgJXJicAorCXNobAkkNjMsICVyMTEKKwlvcgklcjksICVyMTIKKwlzaHIJJXIxMworCW1vdgk4KHVwKSwgJXI4CisJc3ViCSQ0LCBuCisJamcJTCh0b3ApCisKK0woZW5kKToJc2hyCSVyMTQKKwlvcgklcjEwLCAlcjEzCisJc2hyCSVyMTUKKwlvcgklcjExLCAlcjE0CisJbW92CSVyYnAsIChycCkKKwlsZWEJMzIocnApLCBycAorTChjajUpOglhZGQJUjMyKCVyYngpLCBSMzIoJXJieCkKKwlBRENTQkIJOCh2cCksICVyOAorCW1vdgklcjEyLCAtMjQocnApCitMKGNqNCk6CW1vdgklcjEzLCAtMTYocnApCitMKGNqMyk6CW1vdgklcjgsICVyMTIKKwltb3YJJXIxNCwgLTgocnApCitMKGNqMik6CXNiYglSMzIoJXJieCksIFIzMiglcmJ4KQorCXNobAkkNjMsICVyOAorCXNocgklcjEyCisJb3IJJXI4LCAlcjE1CisJc2hsCSQ2MywgJXJieAorCWFkZAklcmJ4LCAlcjEyCisJbW92CSVyMTUsIChycCkKKwltb3YJJXIxMiwgOChycCkKK0woY2oxKToJcG9wCSVyMTUKKwlwb3AJJXIxNAorCXBvcAklcjEzCisJcG9wCSVyMTIKKwlwb3AJJXJicAorCXBvcAklcmJ4CisJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2F0b20vcnNoaWZ0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2F0b20vcnNoaWZ0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWMwMjdkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYXRvbS9yc2hpZnQuYXNtCkBAIC0wLDAgKzEsMTIxIEBACitkbmwgIEFNRDY0IG1wbl9yc2hpZnQgLS0gbXBuIHJpZ2h0IHNoaWZ0LCBvcHRpbWlzZWQgZm9yIEF0b20uCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqb3JuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDExLCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBBTUQgSzgsSzkJID8KK0MgQU1EIEsxMAkgPworQyBJbnRlbCBQNAkgPworQyBJbnRlbCBjb3JlMgkgPworQyBJbnRlbCBOSE0JID8KK0MgSW50ZWwgU0JSCSA/CitDIEludGVsIGF0b20JIDQuNQorQyBWSUEgbmFubwkgPworCitDIFRPRE8KK0MgICogQ29uc2lkZXIgdXNpbmcgNC13YXkgdW5yb2xsaW5nLiAgV2UgcmVhY2ggNCBjL2wsIGJ1dCB0aGUgY29kZSBpcyAyLjUgdGltZXMKK0MgICAgbGFyZ2VyLgorCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLAlgJXJkaScpCitkZWZpbmUoYHVwJywJYCVyc2knKQorZGVmaW5lKGBuJywJYCVyZHgnKQorZGVmaW5lKGBjbnQnLAlgJXJjeCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX3JzaGlmdCkKKwlGVU5DX0VOVFJZKDQpCisJc2hyCVIzMihuKQorCW1vdgkodXApLCAlcmF4CisJam5jCUwoZXZuKQorCisJbW92CSVyYXgsICVyMTEKKwlzaHIJUjgoY250KSwgJXIxMQorCW5lZwlSOChjbnQpCisJc2hsCVI4KGNudCksICVyYXgKKwl0ZXN0CW4sIG4KKwlqbnoJTChndDEpCisJbW92CSVyMTEsIChycCkKKwlGVU5DX0VYSVQoKQorCXJldAorCitMKGd0MSk6CW1vdgk4KHVwKSwgJXI4CisJbW92CSVyOCwgJXIxMAorCXNobAlSOChjbnQpLCAlcjgKKwlqbXAJTChsbzEpCisKK0woZXZuKToJbW92CSVyYXgsICVyMTAKKwluZWcJUjgoY250KQorCXNobAlSOChjbnQpLCAlcmF4CisJbW92CTgodXApLCAlcjkKKwltb3YJJXI5LCAlcjExCisJc2hsCVI4KGNudCksICVyOQorCW5lZwlSOChjbnQpCisJZGVjCW4KKwlsZWEJLTgocnApLCBycAorCWxlYQk4KHVwKSwgdXAKKwlqeglMKGVuZCkKKworCUFMSUdOKDgpCitMKHRvcCk6CXNocglSOChjbnQpLCAlcjEwCisJb3IJJXIxMCwgJXI5CisJc2hyCVI4KGNudCksICVyMTEKKwluZWcJUjgoY250KQorCW1vdgk4KHVwKSwgJXI4CisJbW92CSVyOCwgJXIxMAorCW1vdgklcjksIDgocnApCisJc2hsCVI4KGNudCksICVyOAorCWxlYQkxNihycCksIHJwCitMKGxvMSk6CW1vdgkxNih1cCksICVyOQorCW9yCSVyMTEsICVyOAorCW1vdgklcjksICVyMTEKKwlzaGwJUjgoY250KSwgJXI5CisJbGVhCTE2KHVwKSwgdXAKKwluZWcJUjgoY250KQorCW1vdgklcjgsIChycCkKKwlkZWMJbgorCWpnCUwodG9wKQorCitMKGVuZCk6CXNocglSOChjbnQpLCAlcjEwCisJb3IJJXIxMCwgJXI5CisJc2hyCVI4KGNudCksICVyMTEKKwltb3YJJXI5LCA4KHJwKQorCW1vdgklcjExLCAxNihycCkKKwlGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYXRvbS9zdWJsc2gxX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYXRvbS9zdWJsc2gxX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMDZhY2QKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9hdG9tL3N1YmxzaDFfbi5hc20KQEAgLTAsMCArMSwyNDIgQEAKK2RubCAgQU1ENjQgbXBuX3N1YmxzaDFfbiBvcHRpbWlzZWQgZm9yIEludGVsIEF0b20uCitkbmwgIFVzZWQgYWxzbyBmb3IgQU1EIGJkMS4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTEsIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBUT0RPCitDICAqIFRoaXMgY29kZSBpcyBzbGlnaHRseSBsYXJnZSBhdCA1MDEgYnl0ZXMuCitDICAqIGFvcnJsc2gxX24uYXNtIGFuZCB0aGlzIGZpbGUgdXNlIHRoZSBzYW1lIGJhc2ljIHBhdHRlcm4uCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBBTUQgSzgsSzkJID8KK0MgQU1EIEsxMAkgPworQyBBTUQgYmQxCSAyLjMKK0MgQU1EIGJvYmNhdAkgPworQyBJbnRlbCBQNAkgPworQyBJbnRlbCBjb3JlMgkgPworQyBJbnRlbCBOSE0JID8KK0MgSW50ZWwgU0JSCSA/CitDIEludGVsIGF0b20JIDUJKDQuODc1IGlzIHByb2JhYmx5IHBvc3NpYmxlKQorQyBWSUEgbmFubwkgPworCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLCAgICAgICBgJXJkaScpCitkZWZpbmUoYHVwJywgICAgICAgYCVyc2knKQorZGVmaW5lKGB2cCcsICAgICAgIGAlcmR4JykKK2RlZmluZShgbicsICAgICAgICBgJXJjeCcpCitkZWZpbmUoYGN5JywgICAgICAgYCVyOCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX3N1YmxzaDFfbikKKwlGVU5DX0VOVFJZKDQpCisJcHVzaAklcmJwCisJcHVzaAklcjE1CisJeG9yCVIzMiglcmJwKSwgUjMyKCVyYnApCitMKGVudCk6CW1vdglSMzIobiksIFIzMiglcmF4KQorCWFuZAkkMywgUjMyKCVyYXgpCisJanoJTChiMCkKKwljbXAJJDIsIFIzMiglcmF4KQorCWp6CUwoYjIpCisJamcJTChiMykKKworTChiMSk6CW1vdgkodnApLCAlcjgKKwlhZGQJJXI4LCAlcjgKKwlsZWEJOCh2cCksIHZwCisJc2JiCVIzMiglcmF4KSwgUjMyKCVyYXgpCUMgc2F2ZSBzY3kKKwlhZGQJUjMyKCVyYnApLCBSMzIoJXJicCkJQyByZXN0b3JlIGFjeQorCW1vdgkodXApLCAlcjE1CisJc2JiCSVyOCwgJXIxNQorCW1vdgklcjE1LCAocnApCisJc2JiCVIzMiglcmJwKSwgUjMyKCVyYnApCUMgc2F2ZSBhY3kKKwlsZWEJOCh1cCksIHVwCisJbGVhCTgocnApLCBycAorCWptcAlMKGIwKQorCitMKGIyKToJbW92CSh2cCksICVyOAorCWFkZAklcjgsICVyOAorCW1vdgk4KHZwKSwgJXI5CisJYWRjCSVyOSwgJXI5CisJbGVhCTE2KHZwKSwgdnAKKwlzYmIJUjMyKCVyYXgpLCBSMzIoJXJheCkJQyBzYXZlIHNjeQorCWFkZAlSMzIoJXJicCksIFIzMiglcmJwKQlDIHJlc3RvcmUgYWN5CisJbW92CSh1cCksICVyMTUKKwlzYmIJJXI4LCAlcjE1CisJbW92CSVyMTUsIChycCkKKwltb3YJOCh1cCksICVyMTUKKwlzYmIJJXI5LCAlcjE1CisJbW92CSVyMTUsIDgocnApCisJc2JiCVIzMiglcmJwKSwgUjMyKCVyYnApCUMgc2F2ZSBhY3kKKwlsZWEJMTYodXApLCB1cAorCWxlYQkxNihycCksIHJwCisJam1wCUwoYjApCisKK0woYjMpOgltb3YJKHZwKSwgJXI4CisJYWRkCSVyOCwgJXI4CisJbW92CTgodnApLCAlcjkKKwlhZGMJJXI5LCAlcjkKKwltb3YJMTYodnApLCAlcjEwCisJYWRjCSVyMTAsICVyMTAKKwlsZWEJMjQodnApLCB2cAorCXNiYglSMzIoJXJheCksIFIzMiglcmF4KQlDIHNhdmUgc2N5CisJYWRkCVIzMiglcmJwKSwgUjMyKCVyYnApCUMgcmVzdG9yZSBhY3kKKwltb3YJKHVwKSwgJXIxNQorCXNiYgklcjgsICVyMTUKKwltb3YJJXIxNSwgKHJwKQorCW1vdgk4KHVwKSwgJXIxNQorCXNiYgklcjksICVyMTUKKwltb3YJJXIxNSwgOChycCkKKwltb3YJMTYodXApLCAlcjE1CisJc2JiCSVyMTAsICVyMTUKKwltb3YJJXIxNSwgMTYocnApCisJc2JiCVIzMiglcmJwKSwgUjMyKCVyYnApCUMgc2F2ZSBhY3kKKwlsZWEJMjQodXApLCB1cAorCWxlYQkyNChycCksIHJwCisKK0woYjApOgl0ZXN0CSQ0LCBSOChuKQorCWp6CUwoc2twKQorCWFkZAlSMzIoJXJheCksIFIzMiglcmF4KQlDIHJlc3RvcmUgc2N5CisJbW92CSh2cCksICVyOAorCWFkYwklcjgsICVyOAorCW1vdgk4KHZwKSwgJXI5CisJYWRjCSVyOSwgJXI5CisJbW92CTE2KHZwKSwgJXIxMAorCWFkYwklcjEwLCAlcjEwCisJbW92CTI0KHZwKSwgJXIxMQorCWFkYwklcjExLCAlcjExCisJbGVhCTMyKHZwKSwgdnAKKwlzYmIJUjMyKCVyYXgpLCBSMzIoJXJheCkJQyBzYXZlIHNjeQorCWFkZAlSMzIoJXJicCksIFIzMiglcmJwKQlDIHJlc3RvcmUgYWN5CisJbW92CSh1cCksICVyMTUKKwlzYmIJJXI4LCAlcjE1CisJbW92CSVyMTUsIChycCkKKwltb3YJOCh1cCksICVyMTUKKwlzYmIJJXI5LCAlcjE1CisJbW92CSVyMTUsIDgocnApCisJbW92CTE2KHVwKSwgJXIxNQorCXNiYgklcjEwLCAlcjE1CisJbW92CSVyMTUsIDE2KHJwKQorCW1vdgkyNCh1cCksICVyMTUKKwlzYmIJJXIxMSwgJXIxNQorCW1vdgklcjE1LCAyNChycCkKKwlsZWEJMzIodXApLCB1cAorCWxlYQkzMihycCksIHJwCisJc2JiCVIzMiglcmJwKSwgUjMyKCVyYnApCUMgc2F2ZSBhY3kKKworTChza3ApOgljbXAJJDgsIG4KKwlqbAlMKHJ0bikKKworCXB1c2gJJXIxMgorCXB1c2gJJXIxMworCXB1c2gJJXIxNAorCXB1c2gJJXJieAorCWxlYQktNjQocnApLCBycAorCWptcAlMKHgpCisKKwlBTElHTigxNikKK0wodG9wKToJbW92CSh2cCksICVyOAorCWFkZAlSMzIoJXJheCksIFIzMiglcmF4KQorCWxlYQk2NCh2cCksIHZwCisJYWRjCSVyOCwgJXI4CisJbW92CS01Nih2cCksICVyOQorCWFkYwklcjksICVyOQorCW1vdgktNDgodnApLCAlcjEwCisJYWRjCSVyMTAsICVyMTAKKwltb3YJLTQwKHZwKSwgJXIxMQorCWFkYwklcjExLCAlcjExCisJbW92CS0zMih2cCksICVyMTIKKwlhZGMJJXIxMiwgJXIxMgorCW1vdgktMjQodnApLCAlcjEzCisJYWRjCSVyMTMsICVyMTMKKwltb3YJLTE2KHZwKSwgJXIxNAorCWFkYwklcjE0LCAlcjE0CisJbW92CS04KHZwKSwgJXIxNQorCWFkYwklcjE1LCAlcjE1CisJc2JiCVIzMiglcmF4KSwgUjMyKCVyYXgpCisJYWRkCVIzMiglcmJwKSwgUjMyKCVyYnApCisJbW92CSh1cCksICVyYnAKKwlsZWEJNjQocnApLCBycAorCW1vdgk4KHVwKSwgJXJieAorCXNiYgklcjgsICVyYnAKKwltb3YJMzIodXApLCAlcjgKKwltb3YJJXJicCwgKHJwKQorCXNiYgklcjksICVyYngKKwltb3YJMTYodXApLCAlcmJwCisJbW92CSVyYngsIDgocnApCisJc2JiCSVyMTAsICVyYnAKKwltb3YJMjQodXApLCAlcmJ4CisJbW92CSVyYnAsIDE2KHJwKQorCXNiYgklcjExLCAlcmJ4CisJbW92CSVyYngsIDI0KHJwKQorCXNiYgklcjEyLCAlcjgKKwltb3YJNDAodXApLCAlcjkKKwltb3YJJXI4LCAzMihycCkKKwlzYmIJJXIxMywgJXI5CisJbW92CTQ4KHVwKSwgJXJicAorCW1vdgklcjksIDQwKHJwKQorCXNiYgklcjE0LCAlcmJwCisJbW92CTU2KHVwKSwgJXJieAorCW1vdgklcmJwLCA0OChycCkKKwlzYmIJJXIxNSwgJXJieAorCWxlYQk2NCh1cCksIHVwCisJbW92CSVyYngsIDU2KHJwKQorCXNiYglSMzIoJXJicCksIFIzMiglcmJwKQorTCh4KToJc3ViCSQ4LCBuCisJamdlCUwodG9wKQorCitMKGVuZCk6CXBvcAklcmJ4CisJcG9wCSVyMTQKKwlwb3AJJXIxMworCXBvcAklcjEyCitMKHJ0bik6CisJYWRkCVIzMiglcmJwKSwgUjMyKCVyYXgpCisJbmVnCVIzMiglcmF4KQorCisJcG9wCSVyMTUKKwlwb3AJJXJicAorCUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCitQUk9MT0dVRShtcG5fc3VibHNoMV9uYykKKwlGVU5DX0VOVFJZKDQpCitJRkRPUyhgCW1vdgk1NiglcnNwKSwgJXI4CScpCisJcHVzaAklcmJwCisJcHVzaAklcjE1CisJbmVnCSVyOAkJCUMgc2V0IENGCisJc2JiCVIzMiglcmJwKSwgUjMyKCVyYnApCUMgc2F2ZSBhY3kKKwlqbXAJTChlbnQpCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9iZDEvUkVBRE1FIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYmQxL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2QyMTBlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYmQxL1JFQURNRQpAQCAtMCwwICsxLDExIEBACitUaGlzIGRpcmVjdG9yeSBjb250YWlucyBjb2RlIGZvciBBTUQgYnVsbGRvemVyIGluY2x1ZGluZyBpdHMgcGlsZWRyaXZlciB1cGRhdGUuCisKK1dlIGN1cnJlbnRseSBtYWtlIGxpbWl0ZWQgdXNlIG9mIFNJTUQgaW5zdHJ1Y3Rpb25zLCBib3RoIHZpYSB0aGUgTVBOX1BBVEggYW5kCit2aWEgaW5jbHVzaW9uIG9mIHg4Nl82NC9mYXN0c3NlIGZpbGVzLgorCitUaGUgYmQxIGNvcmVzIHNoYXJlIG9uZSBTSU1EL0ZQVSBwaXBlbGluZSBmb3IgdHdvIGludGVnZXIgdW5pdHMuICBUaGlzIHByb2JhYmx5CittZWFucyB0aGF0IGFuIGFsbC1jb3JlIEdNUCBsb2FkIChzdWNoIGFzIGEgSFBDIGxvYWQpIG1pZ2h0IHJ1biBzbG93ZXIgaWYgdGhlcmUKK2lzIHNpZ25pZmljYW50IFNJTUQgZGVwZW5kZW5jeS4KKworV2Ugc2hvdWxkIHBlcmhhcHMgYWxsb3cgYSBzcGVjaWFsICdiZDFub3NpbWQnIHBzZXVkbyBjcHUtbmFtZSBleGNsdWRpbmcgYW55CitTSU1EIGNvZGUuCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9iZDEvYWRkbXVsXzIuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYmQxL2FkZG11bF8yLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTRlOTFhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYmQxL2FkZG11bF8yLmFzbQpAQCAtMCwwICsxLDIzNSBAQAorZG5sICBBTUQ2NCBtcG5fYWRkbXVsXzIgb3B0aW1pc2VkIGZvciBBTUQgQnVsbGRvemVyLgorCitkbmwgIENvcHlyaWdodCAyMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBBTUQgSzgsSzkKK0MgQU1EIEsxMAorQyBBTUQgYmQxCSA0LjIKK0MgQU1EIGJkMgkgNC40CitDIEFNRCBiZDMKK0MgQU1EIGJkNAorQyBBTUQgemVuCitDIEFNRCBidDEKK0MgQU1EIGJ0MgorQyBJbnRlbCBQNAorQyBJbnRlbCBQTlIKK0MgSW50ZWwgTkhNCitDIEludGVsIFNCUgorQyBJbnRlbCBJQlIKK0MgSW50ZWwgSFdMCitDIEludGVsIEJXTAorQyBJbnRlbCBTS0wKK0MgSW50ZWwgYXRvbQorQyBJbnRlbCBTTE0KK0MgVklBIG5hbm8KKworQyBUaGUgbG9vcCBvZiB0aGlzIGNvZGUgaXMgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGEgY29kZSBnZW5lcmF0aW9uIGFuZAorQyBvcHRpbWlzYXRpb24gdG9vbCBzdWl0ZSB3cml0dGVuIGJ5IERhdmlkIEhhcnZleSBhbmQgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK2RlZmluZShgcnAnLCAgICAgIGAlcmRpJykgICBDIHJjeAorZGVmaW5lKGB1cCcsICAgICAgYCVyc2knKSAgIEMgcmR4CitkZWZpbmUoYG5fcGFyYW0nLCBgJXJkeCcpICAgQyByOAorZGVmaW5lKGB2cCcsICAgICAgYCVyY3gnKSAgIEMgcjkKKworZGVmaW5lKGBuJywgICAgICAgYCVyY3gnKQorZGVmaW5lKGB2MCcsICAgICAgYCVyYngnKQorZGVmaW5lKGB2MScsICAgICAgYCVyYnAnKQorZGVmaW5lKGBYMCcsICAgICAgYCVyMTInKQorZGVmaW5lKGBYMScsICAgICAgYCVyMTMnKQorCitkZWZpbmUoYHcwJywgICAgYCVyOCcpCitkZWZpbmUoYHcxJywgICAgYCVyOScpCitkZWZpbmUoYHcyJywgICAgYCVyMTAnKQorZGVmaW5lKGB3MycsICAgIGAlcjExJykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMzIpCitQUk9MT0dVRShtcG5fYWRkbXVsXzIpCisJRlVOQ19FTlRSWSg0KQorCXB1c2gJJXJieAorCXB1c2gJJXJicAorCXB1c2gJJXIxMgorCXB1c2gJJXIxMworCisJbW92CSh2cCksIHYwCisJbW92CTgodnApLCB2MQorCisJbW92CSh1cCksICVyYXgKKwltb3YJJDAsIFIzMih3MikJCUMgYWJ1c2UgdzIKKworCWxlYQkodXAsbl9wYXJhbSw4KSwgdXAKKwlsZWEJKHJwLG5fcGFyYW0sOCksIHJwCisJc3ViCW5fcGFyYW0sIHcyCisJbXVsCXYwCisKKwl0ZXN0CSQxLCBSOCh3MikKKwlqbnoJTChieDEpCisKK0woYngwKToJbW92CSVyZHgsIFgwCisJbW92CSVyYXgsIFgxCisJdGVzdAkkMiwgUjgodzIpCisJam56CUwoYjEwKQorCitMKGIwMCk6CWxlYQkodzIpLCBuCQkJQyB1biA9IDQsIDgsIDEyLCAuLi4KKwltb3YJKHVwLHcyLDgpLCAlcmF4CisJbW92CShycCx3Miw4KSwgdzMKKwltdWwJdjEKKwltb3YJJXJheCwgdzAKKwltb3YJOCh1cCx3Miw4KSwgJXJheAorCW1vdgklcmR4LCB3MQorCWptcAlMKGxvMCkKKworTChiMTApOglsZWEJMih3MiksIG4JCUMgdW4gPSAyLCA2LCAxMCwgLi4uCisJbW92CSh1cCx3Miw4KSwgJXJheAorCW1vdgkocnAsdzIsOCksIHcxCisJbXVsCXYxCisJbW92CSVyZHgsIHczCisJbW92CSVyYXgsIHcyCisJbW92CS04KHVwLG4sOCksICVyYXgKKwl0ZXN0CW4sIG4KKwlqeglMKGVuZCkKKwlqbXAJTCh0b3ApCisKK0woYngxKToJbW92CSVyYXgsIFgwCisJbW92CSVyZHgsIFgxCisJdGVzdAkkMiwgUjgodzIpCisJanoJTChiMTEpCisKK0woYjAxKToJbGVhCTEodzIpLCBuCQlDIHVuID0gMSwgNSwgOSwgLi4uCisJbW92CSh1cCx3Miw4KSwgJXJheAorCW11bAl2MQorCW1vdgkocnAsdzIsOCksIHcyCisJbW92CSVyZHgsIHcwCisJbW92CSVyYXgsIHczCisJam1wCUwobG8xKQorCitMKGIxMSk6CWxlYQktMSh3MiksIG4JCUMgdW4gPSAzLCA3LCAxMSwgLi4uCisJbW92CSh1cCx3Miw4KSwgJXJheAorCW11bAl2MQorCW1vdgkocnAsdzIsOCksIHcwCisJbW92CSVyYXgsIHcxCisJbW92CTgodXAsdzIsOCksICVyYXgKKwltb3YJJXJkeCwgdzIKKwlqbXAJTChsbzMpCisKKwlBTElHTigzMikKK0wodG9wKToKK0wobG8yKToJbXVsCXYwCisJYWRkCXcxLCBYMQorCW1vdglYMSwgLTE2KHJwLG4sOCkKKwltb3YJJXJkeCwgWDEKKwlhZGMJJXJheCwgWDAKKwlhZGMJJDAsIFgxCisJbW92CS04KHVwLG4sOCksICVyYXgKKwltdWwJdjEKKwltb3YJLTgocnAsbiw4KSwgdzEKKwltb3YJJXJkeCwgdzAKKwlhZGQJdzEsIHcyCisJYWRjCSVyYXgsIHczCisJYWRjCSQwLCB3MAorTChsbzEpOgltb3YJKHVwLG4sOCksICVyYXgKKwltdWwJdjAKKwlhZGQJdzIsIFgwCisJbW92CVgwLCAtOChycCxuLDgpCisJbW92CSVyZHgsIFgwCisJYWRjCSVyYXgsIFgxCisJbW92CSh1cCxuLDgpLCAlcmF4CisJYWRjCSQwLCBYMAorCW1vdgkocnAsbiw4KSwgdzIKKwltdWwJdjEKKwlhZGQJdzIsIHczCisJYWRjCSVyYXgsIHcwCisJbW92CTgodXAsbiw4KSwgJXJheAorCW1vdgklcmR4LCB3MQorCWFkYwkkMCwgdzEKK0wobG8wKToJbXVsCXYwCisJYWRkCXczLCBYMQorCW1vdglYMSwgKHJwLG4sOCkKKwlhZGMJJXJheCwgWDAKKwltb3YJOCh1cCxuLDgpLCAlcmF4CisJbW92CSVyZHgsIFgxCisJYWRjCSQwLCBYMQorCW1vdgk4KHJwLG4sOCksIHczCisJbXVsCXYxCisJYWRkCXczLCB3MAorCWFkYwklcmF4LCB3MQorCW1vdgkxNih1cCxuLDgpLCAlcmF4CisJbW92CSVyZHgsIHcyCisJYWRjCSQwLCB3MgorTChsbzMpOgltdWwJdjAKKwlhZGQJdzAsIFgwCisJbW92CVgwLCA4KHJwLG4sOCkKKwltb3YJJXJkeCwgWDAKKwlhZGMJJXJheCwgWDEKKwlhZGMJJDAsIFgwCisJbW92CTE2KHVwLG4sOCksICVyYXgKKwltb3YJMTYocnAsbiw4KSwgdzAKKwltdWwJdjEKKwltb3YJJXJkeCwgdzMKKwlhZGQJdzAsIHcxCisJYWRjCSVyYXgsIHcyCisJYWRjCSQwLCB3MworCW1vdgkyNCh1cCxuLDgpLCAlcmF4CisJYWRkCSQ0LCBuCisJam5jCUwodG9wKQorCitMKGVuZCk6CW11bAl2MAorCWFkZAl3MSwgWDEKKwltb3YJWDEsIC0xNihycCkKKwltb3YJJXJkeCwgWDEKKwlhZGMJJXJheCwgWDAKKwlhZGMJJDAsIFgxCisJbW92CS04KHVwKSwgJXJheAorCW11bAl2MQorCW1vdgktOChycCksIHcxCisJYWRkCXcxLCB3MgorCWFkYwklcmF4LCB3MworCWFkYwkkMCwgJXJkeAorCWFkZAl3MiwgWDAKKwlhZGMJJDAsIFgxCisJbW92CVgwLCAtOChycCkKKwlhZGQJdzMsIFgxCisJbW92CVgxLCAocnApCisJYWRjCSQwLCAlcmR4CisJbW92CSVyZHgsICVyYXgKKworCXBvcAklcjEzCisJcG9wCSVyMTIKKwlwb3AJJXJicAorCXBvcAklcmJ4CisJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2JkMS9hb3JybHNoMV9uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2JkMS9hb3JybHNoMV9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzRhNWZhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYmQxL2FvcnJsc2gxX24uYXNtCkBAIC0wLDAgKzEsMzcgQEAKK2RubCAgQU1ENjQgbXBuX2FkZGxzaDFfbiBhbmQgbXBuX3JzYmxzaDFfbgorCitkbmwgIENvcHlyaWdodCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FkZGxzaDFfbiBtcG5fYWRkbHNoMV9uYyBtcG5fcnNibHNoMV9uIG1wbl9yc2Jsc2gxX25jKQoraW5jbHVkZV9tcG4oYHg4Nl82NC9hdG9tL2FvcnJsc2gxX24uYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2JkMS9hb3JybHNoX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYmQxL2FvcnJsc2hfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUxNmM5ZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2JkMS9hb3JybHNoX24uYXNtCkBAIC0wLDAgKzEsMzggQEAKK2RubCAgWDg2LTY0IG1wbl9hZGRsc2hfbiBhbmQgbXBuX3JzYmxzaF9uLgorCitkbmwgIENvcHlyaWdodCAyMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fYWRkbHNoX24gbXBuX3JzYmxzaF9uKQoraW5jbHVkZV9tcG4oYHg4Nl82NC9hb3JybHNoX24uYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2JkMS9hb3JzX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYmQxL2FvcnNfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQzYzQyZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2JkMS9hb3JzX24uYXNtCkBAIC0wLDAgKzEsMzcgQEAKK2RubCAgWDg2LTY0IG1wbl9hZGRfbiwgbXBuX3N1Yl9uLCBvcHRpbWlzZWQgZm9yIEludGVsIFNpbHZlcm1vbnQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fYWRkX24gbXBuX2FkZF9uYyBtcG5fc3ViX24gbXBuX3N1Yl9uYykKK2luY2x1ZGVfbXBuKGB4ODZfNjQvY29yZWlod2wvYW9yc19uLmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9iZDEvYW9yc211bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2JkMS9hb3JzbXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMGQyZmUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9iZDEvYW9yc211bF8xLmFzbQpAQCAtMCwwICsxLDE5MCBAQAorZG5sICBBTUQ2NCBtcG5fYWRkbXVsXzEgYW5kIG1wbl9zdWJtdWxfMSBvcHRpbWlzZWQgZm9yIEFNRCBCdWxsZG96ZXIuCisKK2RubCAgQ29weXJpZ2h0IDIwMDMtMjAwNSwgMjAwNywgMjAwOCwgMjAxMSwgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIKK0MgQU1EIEs4LEs5ICAgICAgMy4zMCAgICAzLjU4CitDIEFNRCBLMTAgICAgICAgIDMuMDkKK0MgQU1EIGJ1bGwgICAgICAgNC40NyAgICA0LjcyCitDIEFNRCBwaWxlICAgICAgIDQuNjYKK0MgQU1EIHN0ZWFtCitDIEFNRCBleGNhdmF0b3IKK0MgQU1EIGJvYmNhdCAgICAgNi4zMAorQyBBTUQgamFndWFyICAgICA2LjI5CitDIEludGVsIFA0ICAgICAgMTcuMyAgICAxNy44CitDIEludGVsIGNvcmUyICAgIDUuMTMKK0MgSW50ZWwgTkhNICAgICAgNC44NQorQyBJbnRlbCBTQlIgICAgICAzLjgzCitDIEludGVsIElCUiAgICAgIDMuNzUKK0MgSW50ZWwgSFdMICAgICAgMy40NQorQyBJbnRlbCBCV0wgICAgICAyLjU2CitDIEludGVsIFNLTCAgICAgIDIuNTMKK0MgSW50ZWwgYXRvbSAgICAyMC4zCitDIEludGVsIFNMTSAgICAgIDkKK0MgVklBIG5hbm8KKworQyBUaGUgbG9vcCBvZiB0aGlzIGNvZGUgaXMgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGEgY29kZSBnZW5lcmF0aW9uIGFuZAorQyBvcHRpbWlzYXRpb24gdG9vbCBzdWl0ZSB3cml0dGVuIGJ5IERhdmlkIEhhcnZleSBhbmQgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK0MgVE9ETworQyAgKiBUcnkgdG8gbWFrZSBsb29wIHJ1biBjbG9zZXIgdG8gNCBjL2wgaW4gQnVsbGRvemVyIGFuZCBQaWxlZHJpdmVyLgorCitkZWZpbmUoYHJwJywgICAgICBgJXJkaScpICAgQyByY3gKK2RlZmluZShgdXAnLCAgICAgIGAlcnNpJykgICBDIHJkeAorZGVmaW5lKGBuX3BhcmFtJywgYCVyZHgnKSAgIEMgcjgKK2RlZmluZShgdjAnLCAgICAgIGAlcmN4JykgICBDIHI5CisKK2RlZmluZShgbicsICAgICAgIGAlcjExJykKKworaWZkZWYoYE9QRVJBVElPTl9hZGRtdWxfMScsYAorICAgICAgZGVmaW5lKGBBRERTVUInLCAgICAgICAgYGFkZCcpCisgICAgICBkZWZpbmUoYGZ1bmMnLCAgYG1wbl9hZGRtdWxfMScpCisnKQoraWZkZWYoYE9QRVJBVElPTl9zdWJtdWxfMScsYAorICAgICAgZGVmaW5lKGBBRERTVUInLCAgICAgICAgYHN1YicpCisgICAgICBkZWZpbmUoYGZ1bmMnLCAgYG1wbl9zdWJtdWxfMScpCisnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRtdWxfMSBtcG5fc3VibXVsXzEpCisKK0lGRE9TKGAJZGVmaW5lKGB1cCcsIGBgJXJzaScnKQknKSBkbmwKK0lGRE9TKGAJZGVmaW5lKGBycCcsIGBgJXJjeCcnKQknKSBkbmwKK0lGRE9TKGAJZGVmaW5lKGB2MCcsIGBgJXI5JycpCScpIGRubAorSUZET1MoYAlkZWZpbmUoYHI5JywgYGByZGknJykJJykgZG5sCitJRkRPUyhgCWRlZmluZShgbicsICBgYCVyOCcnKQknKSBkbmwKK0lGRE9TKGAJZGVmaW5lKGByOCcsIGBgcjExJycpCScpIGRubAorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigxNikKK1BST0xPR1VFKGZ1bmMpCitJRkRPUyhgYHB1c2gJJXJzaQkJJycpCitJRkRPUyhgYHB1c2gJJXJkaQkJJycpCitJRkRPUyhgYG1vdgklcmR4LCAlcnNpCScnKQorCisJbW92CSh1cCksICVyYXgJCUMgcmVhZCBmaXJzdCB1IGxpbWIgZWFybHkKKwlwdXNoCSVyYngKK0lGU1REKGAJbW92CW5fcGFyYW0sICVyYngJJykJQyBtb3ZlIGF3YXkgbiBmcm9tIHJkeCwgbXVsIHVzZXMgaXQKK0lGRE9TKGAJbW92CW4sICVyYngJCScpCisJbXVsCXYwCisKK0lGU1REKGAJbW92CSVyYngsIG4JCScpCisKKwlhbmQJJDMsIFIzMiglcmJ4KQorCWxlYQktMTYocnAsbiw4KSwgcnAKKwlqeglMKGIwKQorCWNtcAkkMiwgUjMyKCVyYngpCisJamIJTChiMSkKKwlqeglMKGIyKQorCitMKGIzKToJbW92CSQwLCBSMzIoJXI4KQorCW1vdgklcmF4LCAlcmJ4CisJbW92CSQwLCBSMzIoJXI5KQorCW1vdgk4KHVwKSwgJXJheAorCW1vdgklcmR4LCAlcjEwCisJbGVhCSh1cCxuLDgpLCB1cAorCW5vdAluCisJam1wCUwoTDMpCisKK0woYjApOgltb3YJJDAsIFIzMiglcjEwKQorCW1vdgklcmF4LCAlcjgKKwltb3YJJXJkeCwgJXJieAorCW1vdgk4KHVwKSwgJXJheAorCWxlYQkodXAsbiw4KSwgdXAKKwluZWcJbgorCWptcAlMKEwwKQorCitMKGIxKToJY21wCSQxLCBuCisJanoJTChuMSkKKwltb3YJJXJheCwgJXI5CisJbW92CTgodXApLCAlcmF4CisJbW92CSVyZHgsICVyOAorCW1vdgkkMCwgUjMyKCVyYngpCisJbGVhCSh1cCxuLDgpLCB1cAorCW5lZwluCisJaW5jCW4KKwlqbXAJTChMMSkKKworTChiMik6CW1vdgkkMCwgUjMyKCVyYngpCisJbW92CSVyYXgsICVyMTAKKwltb3YJJXJkeCwgJXI5CisJbW92CTgodXApLCAlcmF4CisJbW92CSQwLCBSMzIoJXI4KQorCWxlYQkodXAsbiw4KSwgdXAKKwluZWcJbgorCWFkZAkkMiwgbgorCWpucwlMKGVuZCkKKworCUFMSUdOKDMyKQorTCh0b3ApOgltdWwJdjAKKwlBRERTVUIJJXIxMCwgKHJwLG4sOCkKKwlhZGMJJXJheCwgJXI5CisJbW92CSh1cCxuLDgpLCAlcmF4CisJYWRjCSVyZHgsICVyOAorTChMMSk6CW11bAl2MAorCW1vdgkkMCwgUjMyKCVyMTApCisJQUREU1VCCSVyOSwgOChycCxuLDgpCisJYWRjCSVyYXgsICVyOAorCWFkYwklcmR4LCAlcmJ4CisJbW92CTgodXAsbiw4KSwgJXJheAorTChMMCk6CW11bAl2MAorCUFERFNVQgklcjgsIDE2KHJwLG4sOCkKKwltb3YJJDAsIFIzMiglcjgpCisJYWRjCSVyYXgsICVyYngKKwltb3YJJDAsIFIzMiglcjkpCisJbW92CTE2KHVwLG4sOCksICVyYXgKKwlhZGMJJXJkeCwgJXIxMAorTChMMyk6CW11bAl2MAorCUFERFNVQgklcmJ4LCAyNChycCxuLDgpCisJbW92CSQwLCBSMzIoJXJieCkKKwlhZGMJJXJheCwgJXIxMAorCWFkYwklcmR4LCAlcjkKKwltb3YJMjQodXAsbiw4KSwgJXJheAorCWFkZAkkNCwgbgorCWpzCUwodG9wKQorCitMKGVuZCk6CW11bAl2MAorCUFERFNVQgklcjEwLCAocnApCisJYWRjCSVyOSwgJXJheAorCWFkYwklcjgsICVyZHgKK0wobjEpOglBRERTVUIJJXJheCwgOChycCkKKwlhZGMJJDAsICVyZHgKKwltb3YJJXJkeCwgJXJheAorCisJcG9wCSVyYngKK0lGRE9TKGBgcG9wCSVyZGkJCScnKQorSUZET1MoYGBwb3AJJXJzaQkJJycpCisJcmV0CitFUElMT0dVRSgpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2JkMS9jb20uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYmQxL2NvbS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNmMzU2MQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2JkMS9jb20uYXNtCkBAIC0wLDAgKzEsMzcgQEAKK2RubCAgWDg2LTY0IG1wbl9jb20gb3B0aW1pc2VkIGZvciBBTUQgYmQxLgorCitkbmwgIENvcHlyaWdodCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2NvbSkKK2luY2x1ZGVfbXBuKGB4ODZfNjQvZmFzdHNzZS9jb20tcGFsaWduci5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYmQxL2NvcHlkLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2JkMS9jb3B5ZC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc1Y2RjMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2JkMS9jb3B5ZC5hc20KQEAgLTAsMCArMSwzNyBAQAorZG5sICBYODYtNjQgbXBuX2NvcHlkIG9wdGltaXNlZCBmb3IgQU1EIGJkMS4KKworZG5sICBDb3B5cmlnaHQgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9jb3B5ZCkKK2luY2x1ZGVfbXBuKGB4ODZfNjQvZmFzdHNzZS9jb3B5ZC1wYWxpZ25yLmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9iZDEvY29weWkuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYmQxL2NvcHlpLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWVmMDM2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYmQxL2NvcHlpLmFzbQpAQCAtMCwwICsxLDM3IEBACitkbmwgIFg4Ni02NCBtcG5fY29weWkgb3B0aW1pc2VkIGZvciBBTUQgYmQxLgorCitkbmwgIENvcHlyaWdodCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2NvcHlpKQoraW5jbHVkZV9tcG4oYHg4Nl82NC9mYXN0c3NlL2NvcHlpLXBhbGlnbnIuYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2JkMS9nY2RfMTEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYmQxL2djZF8xMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcyMzA5MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2JkMS9nY2RfMTEuYXNtCkBAIC0wLDAgKzEsMzcgQEAKK2RubCAgQU1ENjQgbXBuX2djZF8xMS4KKworZG5sICBDb3B5cmlnaHQgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9nY2RfMTEpCitpbmNsdWRlX21wbihgeDg2XzY0L2NvcmUyL2djZF8xMS5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYmQxL2dtcC1tcGFyYW0uaCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2JkMS9nbXAtbXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjEwZjM4MgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2JkMS9nbXAtbXBhcmFtLmgKQEAgLTAsMCArMSwyNjUgQEAKKy8qIEFNRCBiZDEgZ21wLW1wYXJhbS5oIC0tIENvbXBpbGVyL21hY2hpbmUgcGFyYW1ldGVyIGhlYWRlciBmaWxlLgorCitDb3B5cmlnaHQgMjAxOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2RlZmluZSBHTVBfTElNQl9CSVRTIDY0CisjZGVmaW5lIEdNUF9MSU1CX0JZVEVTIDgKKworLyogMzYwMC0zODAwIE1IeiBCdWxsZG96ZXIgWmFtYmV6aSAqLworLyogRkZUIHR1bmluZyBsaW1pdCA9IDQ2NCw2MjcsMjAwICovCisvKiBHZW5lcmF0ZWQgYnkgdHVuZXVwLmMsIDIwMTktMTAtMjAsIGdjYyA4LjMgKi8KKworI2RlZmluZSBNT0RfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PRF8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFOX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgIDUKKyNkZWZpbmUgTU9EXzFVX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgIDMKKyNkZWZpbmUgTU9EXzFfMV9UT19NT0RfMV8yX1RIUkVTSE9MRCAgICAgICAgMzEKKyNkZWZpbmUgTU9EXzFfMl9UT19NT0RfMV80X1RIUkVTSE9MRCAgICAgICAgIDAgIC8qIG5ldmVyIG1wbl9tb2RfMXNfMnAgKi8KKyNkZWZpbmUgUFJFSU5WX01PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgMTIKKyNkZWZpbmUgVVNFX1BSRUlOVl9ESVZSRU1fMSAgICAgICAgICAgICAgICAgIDEgIC8qIG5hdGl2ZSAqLworI2RlZmluZSBESVZfUVJfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgMgorI2RlZmluZSBESVZfUVJfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICBNUF9TSVpFX1RfTUFYICAvKiBuZXZlciAqLworI2RlZmluZSBESVZfUVJfMl9QSTJfVEhSRVNIT0xEICAgICAgICAgICBNUF9TSVpFX1RfTUFYICAvKiBuZXZlciAqLworI2RlZmluZSBESVZFWEFDVF8xX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIEJNT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgICAgICAgIDI3CisKKyNkZWZpbmUgRElWXzFfVlNfTVVMXzFfUEVSQ0VOVCAgICAgICAgICAgICAyNzUKKworI2RlZmluZSBNVUxfVE9PTTIyX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBNVUxfVE9PTTMzX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA1NworI2RlZmluZSBNVUxfVE9PTTQ0X1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE2MQorI2RlZmluZSBNVUxfVE9PTTZIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDIyNgorI2RlZmluZSBNVUxfVE9PTThIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDMzOQorCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTQzX1RIUkVTSE9MRCAgICAgIDYxCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgMTA4CisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgMTA1CisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTYzX1RIUkVTSE9MRCAgICAgMTEzCisjZGVmaW5lIE1VTF9UT09NNDNfVE9fVE9PTTU0X1RIUkVTSE9MRCAgICAgIDkxCisKKyNkZWZpbmUgU1FSX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAobmF0aXZlKSAqLworI2RlZmluZSBTUVJfVE9PTTJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBTUVJfVE9PTTNfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA4NQorI2RlZmluZSBTUVJfVE9PTTRfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDIzNAorI2RlZmluZSBTUVJfVE9PTTZfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDI4NgorI2RlZmluZSBTUVJfVE9PTThfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDQ2NgorCisjZGVmaW5lIE1VTE1JRF9UT09NNDJfVEhSRVNIT0xEICAgICAgICAgICAgIDIwCisKKyNkZWZpbmUgTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgU1FSTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTUKKworI2RlZmluZSBNVUxfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDQxMiAgLyogayA9IDUgKi8KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDQxMiwgNX0sIHsgICAgIDE5LCA2fSwgeyAgICAgMTAsIDV9LCB7ICAgICAyMSwgNn0sIFwKKyAgICB7ICAgICAxMSwgNX0sIHsgICAgIDIzLCA2fSwgeyAgICAgMjUsIDd9LCB7ICAgICAxMywgNn0sIFwKKyAgICB7ICAgICAyOCwgN30sIHsgICAgIDI1LCA4fSwgeyAgICAgMTMsIDd9LCB7ICAgICAyOCwgOH0sIFwKKyAgICB7ICAgICAxNSwgN30sIHsgICAgIDMyLCA4fSwgeyAgICAgMTcsIDd9LCB7ICAgICAzNSwgOH0sIFwKKyAgICB7ICAgICAxOSwgN30sIHsgICAgIDM5LCA4fSwgeyAgICAgMjcsIDl9LCB7ICAgICAxNSwgOH0sIFwKKyAgICB7ICAgICAzNSwgOX0sIHsgICAgIDE5LCA4fSwgeyAgICAgNDEsIDl9LCB7ICAgICAyMywgOH0sIFwKKyAgICB7ICAgICA0NywgOX0sIHsgICAgIDI3LDEwfSwgeyAgICAgMTUsIDl9LCB7ICAgICAzOSwxMH0sIFwKKyAgICB7ICAgICAyMywgOX0sIHsgICAgIDU1LDExfSwgeyAgICAgMTUsMTB9LCB7ICAgICAzMSwgOX0sIFwKKyAgICB7ICAgICA3MSwxMH0sIHsgICAgIDM5LCA5fSwgeyAgICAgODMsMTB9LCB7ICAgICA0NywgOX0sIFwKKyAgICB7ICAgICA5OSwxMH0sIHsgICAgIDU1LDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA3OSwxMX0sIFwKKyAgICB7ICAgICA0NywxMH0sIHsgICAgMTAzLDEyfSwgeyAgICAgMzEsMTF9LCB7ICAgICA2MywgN30sIFwKKyAgICB7ICAgMTAyMywgOH0sIHsgICAgNTQzLCA5fSwgeyAgICAzMDMsMTB9LCB7ICAgIDE2NywxMX0sIFwKKyAgICB7ICAgICA5NSwxMH0sIHsgICAgMTkxLDEyfSwgeyAgICAgNjMsMTF9LCB7ICAgIDEyNywxMH0sIFwKKyAgICB7ICAgIDI1NSwxMX0sIHsgICAgMTQzLDEwfSwgeyAgICAyODcsMTF9LCB7ICAgIDE1OSwxMn0sIFwKKyAgICB7ICAgICA5NSwxMX0sIHsgICAgMTkxLDEzfSwgeyAgICAgNjMsMTJ9LCB7ICAgIDEyNywxMX0sIFwKKyAgICB7ICAgIDI1NSwxMH0sIHsgICAgNTExLDExfSwgeyAgICAyNzEsMTB9LCB7ICAgIDU0MywxMX0sIFwKKyAgICB7ICAgIDI4NywxMn0sIHsgICAgMTU5LDExfSwgeyAgICAzMTksMTB9LCB7ICAgIDYzOSwxMX0sIFwKKyAgICB7ICAgIDM1MSwxMn0sIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTB9LCB7ICAgIDc2NywxMn0sIFwKKyAgICB7ICAgIDIyMywxMX0sIHsgICAgNDQ3LDEzfSwgeyAgICAxMjcsMTJ9LCB7ICAgIDI1NSwxMX0sIFwKKyAgICB7ICAgIDUxMSwxMH0sIHsgICAxMDIzLDExfSwgeyAgICA1NDMsMTJ9LCB7ICAgIDI4NywxMX0sIFwKKyAgICB7ICAgIDU3NSwxMH0sIHsgICAxMTUxLDExfSwgeyAgICA2MDcsMTJ9LCB7ICAgIDMxOSwxMX0sIFwKKyAgICB7ICAgIDYzOSwxMH0sIHsgICAxMjc5LDExfSwgeyAgICA2NzEsMTJ9LCB7ICAgIDM1MSwxM30sIFwKKyAgICB7ICAgIDE5MSwxMn0sIHsgICAgMzgzLDExfSwgeyAgICA3NjcsMTJ9LCB7ICAgIDQxNSwxMX0sIFwKKyAgICB7ICAgIDgzMSwxMn0sIHsgICAgNDQ3LDE0fSwgeyAgICAxMjcsMTN9LCB7ICAgIDI1NSwxMn0sIFwKKyAgICB7ICAgIDUxMSwxMX0sIHsgICAxMDIzLDEyfSwgeyAgICA1NDMsMTF9LCB7ICAgMTA4NywxMH0sIFwKKyAgICB7ICAgMjE3NSwxMn0sIHsgICAgNTc1LDExfSwgeyAgIDExNTEsMTJ9LCB7ICAgIDYwNywxM30sIFwKKyAgICB7ICAgIDMxOSwxMn0sIHsgICAgNjM5LDExfSwgeyAgIDEyNzksMTJ9LCB7ICAgIDY3MSwxMX0sIFwKKyAgICB7ICAgMTM0MywxMH0sIHsgICAyNjg3LDEyfSwgeyAgICA3MDMsMTF9LCB7ICAgMTQwNywxM30sIFwKKyAgICB7ICAgIDM4MywxMn0sIHsgICAgNzY3LDExfSwgeyAgIDE1MzUsMTJ9LCB7ICAgIDc5OSwxMX0sIFwKKyAgICB7ICAgMTU5OSwxMn0sIHsgICAgODMxLDEzfSwgeyAgICA0NDcsMTJ9LCB7ICAgIDg5NSwxNH0sIFwKKyAgICB7ICAgIDI1NSwxM30sIHsgICAgNTExLDEyfSwgeyAgIDEwMjMsMTF9LCB7ICAgMjA0NywxMn0sIFwKKyAgICB7ICAgMTA4NywxMX0sIHsgICAyMTc1LDEzfSwgeyAgICA1NzUsMTJ9LCB7ICAgMTIxNSwxMX0sIFwKKyAgICB7ICAgMjQzMSwxM30sIHsgICAgNjM5LDEyfSwgeyAgIDEzNDMsMTF9LCB7ICAgMjY4NywxM30sIFwKKyAgICB7ICAgIDcwMywxMn0sIHsgICAxNDA3LDE0fSwgeyAgICAzODMsMTN9LCB7ICAgIDc2NywxMn0sIFwKKyAgICB7ICAgMTU5OSwxM30sIHsgICAgODMxLDEyfSwgeyAgIDE3MjcsMTF9LCB7ICAgMzQ1NSwxM30sIFwKKyAgICB7ICAgIDg5NSwxNX0sIHsgICAgMjU1LDE0fSwgeyAgICA1MTEsMTN9LCB7ICAgMTAyMywxMn0sIFwKKyAgICB7ICAgMjA0NywxM30sIHsgICAxMDg3LDEyfSwgeyAgIDIxNzUsMTN9LCB7ICAgMTIxNSwxMn0sIFwKKyAgICB7ICAgMjQzMSwxMX0sIHsgICA0ODYzLDE0fSwgeyAgICA2MzksMTN9LCB7ICAgMTM0MywxMn0sIFwKKyAgICB7ICAgMjY4NywxM30sIHsgICAxNDcxLDEyfSwgeyAgIDI5NDMsMTF9LCB7ICAgNTg4NywxNH0sIFwKKyAgICB7ICAgIDc2NywxM30sIHsgICAxNTk5LDEyfSwgeyAgIDMxOTksMTN9LCB7ICAgMTcyNywxMn0sIFwKKyAgICB7ICAgMzQ1NSwxNH0sIHsgICAgODk1LDEzfSwgeyAgIDE5MTksMTV9LCB7ICAgIDUxMSwxNH0sIFwKKyAgICB7ICAgMTAyMywxM30sIHsgICAyMTc1LDE0fSwgeyAgIDExNTEsMTN9LCB7ICAgMjQzMSwxMn0sIFwKKyAgICB7ICAgNDg2MywxNH0sIHsgICAxMjc5LDEzfSwgeyAgIDI2ODcsMTR9LCB7ICAgMTQwNywxM30sIFwKKyAgICB7ICAgMjgxNSwxMn0sIHsgICA1NjMxLDEzfSwgeyAgIDI5NDMsMTJ9LCB7ICAgNTg4NywxNX0sIFwKKyAgICB7ICAgIDc2NywxNH0sIHsgICAxNTM1LDEzfSwgeyAgIDMxOTksMTR9LCB7ICAgMTY2MywxM30sIFwKKyAgICB7ICAgMzQ1NSwxMn0sIHsgICA2OTExLDE0fSwgeyAgIDE3OTEsMTN9LCB7ICAgMzU4MywxNH0sIFwKKyAgICB7ICAgMTkxOSwxM30sIHsgICAzODM5LDE2fSwgeyAgICA1MTEsMTV9LCB7ICAgMTAyMywxNH0sIFwKKyAgICB7ICAgMjE3NSwxM30sIHsgICA0NDc5LDE0fSwgeyAgIDI0MzEsMTN9LCB7ICAgNDg2MywxNX0sIFwKKyAgICB7ICAgMTI3OSwxNH0sIHsgICAyOTQzLDEzfSwgeyAgIDU4ODcsMTJ9LCB7ICAxMTc3NSwxNX0sIFwKKyAgICB7ICAgMTUzNSwxNH0sIHsgICAzNDU1LDEzfSwgeyAgIDY5MTEsMTV9LCB7ICAgMTc5MSwxNH0sIFwKKyAgICB7ICAgMzgzOSwxM30sIHsgICA3Njc5LDE2fSwgeyAgIDEwMjMsMTV9LCB7ICAgMjA0NywxNH0sIFwKKyAgICB7ICAgNDQ3OSwxNX0sIHsgICAyMzAzLDE0fSwgeyAgIDQ4NjMsMTV9LCB7ICAgMjU1OSwxNH0sIFwKKyAgICB7ICAgNTI0NywxNX0sIHsgICAyODE1LDE0fSwgeyAgIDU4ODcsMTN9LCB7ICAxMTc3NSwxNn0sIFwKKyAgICB7ICAgMTUzNSwxNX0sIHsgICAzMzI3LDE0fSwgeyAgIDY5MTEsMTV9LCB7ICAgMzgzOSwxNH0sIFwKKyAgICB7ICAgNzY3OSwxM30sIHsgIDE1MzU5LDE3fSwgeyAgIDEwMjMsMTZ9LCB7ICAgMjA0NywxNX0sIFwKKyAgICB7ICAgNDM1MSwxNH0sIHsgICA4OTU5LDE1fSwgeyAgIDQ4NjMsMTZ9LCB7ICAgMjU1OSwxNX0sIFwKKyAgICB7ICAgNTg4NywxNH0sIHsgIDExNzc1LDE2fSwgeyAgIDMwNzEsMTV9LCB7ICAgNjkxMSwxNn0sIFwKKyAgICB7ICAgMzU4MywxNX0sIHsgICA3Njc5LDE0fSwgeyAgMTUzNTksMTV9LCB7ICAgNzkzNSwxN30sIFwKKyAgICB7ICAgMjA0NywxNn0sIHsgICA0MDk1LDE1fSwgeyAgIDg5NTksMTZ9LCB7ICAgNDYwNywxNX0sIFwKKyAgICB7ICAgOTk4MywxNH0sIHsgIDE5OTY3LDE2fSwgeyAgIDUxMTksMTV9LCB7ICAxMDIzOSwxNn0sIFwKKyAgICB7ICAgNTYzMSwxNX0sIHsgIDExNzc1LDE3fSwgeyAgIDMwNzEsMTZ9LCB7ICA2NTUzNiwxN30sIFwKKyAgICB7IDEzMTA3MiwxOH0sIHsgMjYyMTQ0LDE5fSwgeyA1MjQyODgsMjB9LCB7MTA0ODU3NiwyMX0sIFwKKyAgICB7MjA5NzE1MiwyMn0sIHs0MTk0MzA0LDIzfSwgezgzODg2MDgsMjR9IH0KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTNfU0laRSAyNTEKKyNkZWZpbmUgTVVMX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDQ1NDQKKworI2RlZmluZSBTUVJfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDM2NCAgLyogayA9IDUgKi8KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDM2NCwgNX0sIHsgICAgIDE5LCA2fSwgeyAgICAgMTAsIDV9LCB7ICAgICAyMSwgNn0sIFwKKyAgICB7ICAgICAxMSwgNX0sIHsgICAgIDIzLCA2fSwgeyAgICAgMTIsIDV9LCB7ICAgICAyNSwgNn0sIFwKKyAgICB7ICAgICAyNSwgN30sIHsgICAgIDEzLCA2fSwgeyAgICAgMjcsIDd9LCB7ICAgICAyNSwgOH0sIFwKKyAgICB7ICAgICAxMywgN30sIHsgICAgIDI4LCA4fSwgeyAgICAgMTUsIDd9LCB7ICAgICAzMSwgOH0sIFwKKyAgICB7ICAgICAxNywgN30sIHsgICAgIDM1LCA4fSwgeyAgICAgMTksIDd9LCB7ICAgICAzOSwgOH0sIFwKKyAgICB7ICAgICAyNywgOX0sIHsgICAgIDE1LCA4fSwgeyAgICAgMzUsIDl9LCB7ICAgICAxOSwgOH0sIFwKKyAgICB7ICAgICA0MSwgOX0sIHsgICAgIDIzLCA4fSwgeyAgICAgNDcsIDl9LCB7ICAgICAyNywxMH0sIFwKKyAgICB7ICAgICAxNSwgOX0sIHsgICAgIDM5LDEwfSwgeyAgICAgMjMsIDl9LCB7ICAgICA1MSwxMX0sIFwKKyAgICB7ICAgICAxNSwxMH0sIHsgICAgIDMxLCA5fSwgeyAgICAgNjcsMTB9LCB7ICAgICAzOSwgOX0sIFwKKyAgICB7ICAgICA3OSwxMH0sIHsgICAgIDQ3LDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA3OSwxMX0sIFwKKyAgICB7ICAgICA0NywxMH0sIHsgICAgIDk1LDEyfSwgeyAgICAgMzEsMTF9LCB7ICAgICA2MywxMH0sIFwKKyAgICB7ICAgIDEzNSwxMX0sIHsgICAgIDc5LDEwfSwgeyAgICAxNTksMTF9LCB7ICAgICA5NSwgN30sIFwKKyAgICB7ICAgMTUzNSwgOH0sIHsgICAgNzk5LCA3fSwgeyAgIDE1OTksIDh9LCB7ICAgIDgzMSwgOX0sIFwKKyAgICB7ICAgIDQ0NywxMH0sIHsgICAgMjM5LDExfSwgeyAgICAxMjcsMTB9LCB7ICAgIDI1NSwxMX0sIFwKKyAgICB7ICAgIDE0MywxMH0sIHsgICAgMzAzLDExfSwgeyAgICAxNTksMTJ9LCB7ICAgICA5NSwxMX0sIFwKKyAgICB7ICAgIDE5MSwxMH0sIHsgICAgMzgzLDEzfSwgeyAgICAgNjMsMTJ9LCB7ICAgIDEyNywxMX0sIFwKKyAgICB7ICAgIDI1NSwxMH0sIHsgICAgNTExLDExfSwgeyAgICAzMDMsMTJ9LCB7ICAgIDE1OSwxMX0sIFwKKyAgICB7ICAgIDM1MSwxMn0sIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTB9LCB7ICAgIDc2NywxMX0sIFwKKyAgICB7ICAgIDQxNSwxMn0sIHsgICAgMjIzLDExfSwgeyAgICA0NDcsMTN9LCB7ICAgIDEyNywxMn0sIFwKKyAgICB7ICAgIDI1NSwxMX0sIHsgICAgNTExLDEwfSwgeyAgIDEwMjMsMTJ9LCB7ICAgIDI4NywxMX0sIFwKKyAgICB7ICAgIDU3NSwxMH0sIHsgICAxMTUxLDExfSwgeyAgICA2MDcsMTJ9LCB7ICAgIDMxOSwxMX0sIFwKKyAgICB7ICAgIDYzOSwxMH0sIHsgICAxMjc5LDExfSwgeyAgICA2NzEsMTJ9LCB7ICAgIDM1MSwxM30sIFwKKyAgICB7ICAgIDE5MSwxMn0sIHsgICAgMzgzLDExfSwgeyAgICA3NjcsMTB9LCB7ICAgMTUzNSwxMn0sIFwKKyAgICB7ICAgIDQxNSwxMX0sIHsgICAgODMxLDEyfSwgeyAgICA0NDcsMTR9LCB7ICAgIDEyNywxM30sIFwKKyAgICB7ICAgIDI1NSwxMn0sIHsgICAgNTExLDExfSwgeyAgIDEwMjMsMTJ9LCB7ICAgIDU0MywxMX0sIFwKKyAgICB7ICAgMTA4NywxMH0sIHsgICAyMTc1LDEyfSwgeyAgICA1NzUsMTF9LCB7ICAgMTE1MSwxMn0sIFwKKyAgICB7ICAgIDYwNywxM30sIHsgICAgMzE5LDEyfSwgeyAgICA2MzksMTF9LCB7ICAgMTI3OSwxMn0sIFwKKyAgICB7ICAgIDY3MSwxMX0sIHsgICAxMzQzLDEyfSwgeyAgICA3MDMsMTF9LCB7ICAgMTQwNywxMn0sIFwKKyAgICB7ICAgIDczNSwxM30sIHsgICAgMzgzLDEyfSwgeyAgICA3NjcsMTF9LCB7ICAgMTUzNSwxMn0sIFwKKyAgICB7ICAgIDc5OSwxMX0sIHsgICAxNTk5LDEyfSwgeyAgICA4MzEsMTN9LCB7ICAgIDQ0NywxMn0sIFwKKyAgICB7ICAgIDg5NSwxNH0sIHsgICAgMjU1LDEzfSwgeyAgICA1MTEsMTJ9LCB7ICAgMTAyMywxMX0sIFwKKyAgICB7ICAgMjA0NywxMn0sIHsgICAxMDg3LDExfSwgeyAgIDIxNzUsMTN9LCB7ICAgIDU3NSwxMn0sIFwKKyAgICB7ICAgMTE1MSwxMX0sIHsgICAyMzAzLDEyfSwgeyAgIDEyMTUsMTF9LCB7ICAgMjQzMSwxM30sIFwKKyAgICB7ICAgIDYzOSwxMn0sIHsgICAxMzQzLDEzfSwgeyAgICA3MDMsMTJ9LCB7ICAgMTQwNywxNH0sIFwKKyAgICB7ICAgIDM4MywxM30sIHsgICAgNzY3LDEyfSwgeyAgIDE1OTksMTF9LCB7ICAgMzE5OSwxM30sIFwKKyAgICB7ICAgIDgzMSwxMn0sIHsgICAxNzI3LDExfSwgeyAgIDM0NTUsMTN9LCB7ICAgIDg5NSwxNX0sIFwKKyAgICB7ICAgIDI1NSwxNH0sIHsgICAgNTExLDEzfSwgeyAgIDEwMjMsMTJ9LCB7ICAgMjA0NywxM30sIFwKKyAgICB7ICAgMTA4NywxMn0sIHsgICAyMTc1LDEzfSwgeyAgIDExNTEsMTJ9LCB7ICAgMjMwMywxM30sIFwKKyAgICB7ICAgMTIxNSwxMn0sIHsgICAyNDMxLDE0fSwgeyAgICA2MzksMTN9LCB7ICAgMTM0MywxMn0sIFwKKyAgICB7ICAgMjY4NywxM30sIHsgICAxNDcxLDEyfSwgeyAgIDI5NDMsMTF9LCB7ICAgNTg4NywxNH0sIFwKKyAgICB7ICAgIDc2NywxM30sIHsgICAxNTk5LDEyfSwgeyAgIDMxOTksMTN9LCB7ICAgMTcyNywxMn0sIFwKKyAgICB7ICAgMzQ1NSwxMX0sIHsgICA2OTExLDE0fSwgeyAgICA4OTUsMTN9LCB7ICAgMTc5MSwxMn0sIFwKKyAgICB7ICAgMzU4MywxM30sIHsgICAxOTE5LDEyfSwgeyAgIDM4MzksMTV9LCB7ICAgIDUxMSwxNH0sIFwKKyAgICB7ICAgMTAyMywxM30sIHsgICAyMTc1LDE0fSwgeyAgIDExNTEsMTN9LCB7ICAgMjQzMSwxMn0sIFwKKyAgICB7ICAgNDg2MywxNH0sIHsgICAxMjc5LDEzfSwgeyAgIDI2ODcsMTR9LCB7ICAgMTQwNywxM30sIFwKKyAgICB7ICAgMjk0MywxMn0sIHsgICA1ODg3LDExfSwgeyAgMTE3NzUsMTV9LCB7ICAgIDc2NywxNH0sIFwKKyAgICB7ICAgMTUzNSwxM30sIHsgICAzMTk5LDE0fSwgeyAgIDE2NjMsMTN9LCB7ICAgMzQ1NSwxMn0sIFwKKyAgICB7ICAgNjkxMSwxNH0sIHsgICAxNzkxLDEzfSwgeyAgIDM1ODMsMTR9LCB7ICAgMTkxOSwxM30sIFwKKyAgICB7ICAgMzgzOSwxNn0sIHsgICAgNTExLDE1fSwgeyAgIDEwMjMsMTR9LCB7ICAgMjE3NSwxM30sIFwKKyAgICB7ICAgNDM1MSwxMn0sIHsgICA4NzAzLDEzfSwgeyAgIDQ0NzksMTJ9LCB7ICAgODk1OSwxNH0sIFwKKyAgICB7ICAgMjMwMywxM30sIHsgICA0NjA3LDE0fSwgeyAgIDI0MzEsMTN9LCB7ICAgNDg2MywxNX0sIFwKKyAgICB7ICAgMTI3OSwxNH0sIHsgICAyODE1LDEzfSwgeyAgIDU2MzEsMTR9LCB7ICAgMjk0MywxM30sIFwKKyAgICB7ICAgNTg4NywxMn0sIHsgIDExNzc1LDE1fSwgeyAgIDE1MzUsMTR9LCB7ICAgMzQ1NSwxM30sIFwKKyAgICB7ICAgNjkxMSwxNX0sIHsgICAxNzkxLDE0fSwgeyAgIDM4MzksMTN9LCB7ICAgNzY3OSwxNn0sIFwKKyAgICB7ICAgMTAyMywxNX0sIHsgICAyMDQ3LDE0fSwgeyAgIDQzNTEsMTN9LCB7ICAgODcwMywxNH0sIFwKKyAgICB7ICAgNDQ3OSwxM30sIHsgICA4OTU5LDE1fSwgeyAgIDIzMDMsMTR9LCB7ICAgNDk5MSwxM30sIFwKKyAgICB7ICAgOTk4MywxNX0sIHsgICAyNTU5LDE0fSwgeyAgIDUxMTksMTV9LCB7ICAgMjgxNSwxNH0sIFwKKyAgICB7ICAgNTg4NywxM30sIHsgIDExNzc1LDE2fSwgeyAgIDE1MzUsMTV9LCB7ICAgMzA3MSwxNH0sIFwKKyAgICB7ICAgNjE0MywxNX0sIHsgICAzMzI3LDE0fSwgeyAgIDY5MTEsMTV9LCB7ICAgMzgzOSwxNH0sIFwKKyAgICB7ICAgNzY3OSwxM30sIHsgIDE1MzU5LDE3fSwgeyAgIDEwMjMsMTZ9LCB7ICAgMjA0NywxNX0sIFwKKyAgICB7ICAgNDA5NSwxNH0sIHsgICA4MTkxLDE1fSwgeyAgIDQzNTEsMTR9LCB7ICAgODk1OSwxNX0sIFwKKyAgICB7ICAgNDg2MywxNH0sIHsgICA5OTgzLDE2fSwgeyAgIDI1NTksMTV9LCB7ICAgNTg4NywxNH0sIFwKKyAgICB7ICAxMTc3NSwxNn0sIHsgICAzMDcxLDE1fSwgeyAgIDY5MTEsMTZ9LCB7ICAgMzU4MywxNX0sIFwKKyAgICB7ICAgNzY3OSwxNH0sIHsgIDE1MzU5LDE1fSwgeyAgIDc5MzUsMTR9LCB7ICAxNTg3MSwxN30sIFwKKyAgICB7ICAgMjA0NywxNn0sIHsgICA0MDk1LDE1fSwgeyAgIDg5NTksMTZ9LCB7ICAgNDYwNywxNX0sIFwKKyAgICB7ICAgOTk4MywxNH0sIHsgIDE5OTY3LDE2fSwgeyAgIDUxMTksMTV9LCB7ICAxMDIzOSwxNn0sIFwKKyAgICB7ICAgNTYzMSwxNX0sIHsgIDExNzc1LDE3fSwgeyAgIDMwNzEsMTZ9LCB7ICA2NTUzNiwxN30sIFwKKyAgICB7IDEzMTA3MiwxOH0sIHsgMjYyMTQ0LDE5fSwgeyA1MjQyODgsMjB9LCB7MTA0ODU3NiwyMX0sIFwKKyAgICB7MjA5NzE1MiwyMn0sIHs0MTk0MzA0LDIzfSwgezgzODg2MDgsMjR9IH0KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTNfU0laRSAyNzUKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDMyNjQKKworI2RlZmluZSBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgICA4OTA3CisjZGVmaW5lIFNRUkxPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICA5CisjZGVmaW5lIFNRUkxPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAwICAvKiBuZXZlciBtcG5fc3FybG9fYmFzZWNhc2UgKi8KKyNkZWZpbmUgU1FSTE9fU1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDY0NDAKKworI2RlZmluZSBEQ19ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA1MgorI2RlZmluZSBEQ19ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgIDE2NworI2RlZmluZSBEQ19CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA0OAorI2RlZmluZSBEQ19CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA5MworCisjZGVmaW5lIElOVl9NVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgIDM4CisjZGVmaW5lIElOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAgMTk3CisjZGVmaW5lIElOVl9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTc5CisKKyNkZWZpbmUgQklOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAyMzAKKyNkZWZpbmUgUkVEQ18xX1RPX1JFRENfMl9USFJFU0hPTEQgICAgICAgICAgMzIKKyNkZWZpbmUgUkVEQ18yX1RPX1JFRENfTl9USFJFU0hPTEQgICAgICAgICAgNTUKKworI2RlZmluZSBNVV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTM4NworI2RlZmluZSBNVV9ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgMTM4NworI2RlZmluZSBNVVBJX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICA5MgorI2RlZmluZSBNVV9CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTE0MgorI2RlZmluZSBNVV9CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTMzNAorCisjZGVmaW5lIFBPV01fU0VDX1RBQkxFICAxLDIyLDE5NCw0MzQsNDUyCisKKyNkZWZpbmUgR0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICAgMjAKKyNkZWZpbmUgU0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICA0MzgKKyNkZWZpbmUgU0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgIDEyNTQKKworI2RlZmluZSBGQUNfRFNDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDE4OQorI2RlZmluZSBGQUNfT0REX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAyNgorCisjZGVmaW5lIE1BVFJJWDIyX1NUUkFTU0VOX1RIUkVTSE9MRCAgICAgICAgIDE0CisjZGVmaW5lIEhHQ0QyX0RJVjFfTUVUSE9EICAgICAgICAgICAgICAgICAgICAzICAvKiAyLjMxJSBmYXN0ZXIgdGhhbiA0ICovCisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAgMTA0CisjZGVmaW5lIEhHQ0RfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDUyCisjZGVmaW5lIEhHQ0RfUkVEVUNFX1RIUkVTSE9MRCAgICAgICAgICAgICAyNjgxCisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgNDY1CisjZGVmaW5lIEdDREVYVF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMjgzCisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAgICA0ICAvKiA1LjgxJSBmYXN0ZXIgdGhhbiAxICovCisKKy8qIFR1bmV1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCB0b29rIDU1NDYwMiBzZWNvbmRzICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9iZDEvaGFtZGlzdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9iZDEvaGFtZGlzdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjllNzhhMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2JkMS9oYW1kaXN0LmFzbQpAQCAtMCwwICsxLDIwNiBAQAorZG5sICBBTUQ2NCBTU1NFMy9YT1AgbXBuX2hhbWRpc3QgLS0gaGFtbWluZyBkaXN0YW5jZS4KKworZG5sICBDb3B5cmlnaHQgMjAxMC0yMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkJICAgIGN5Y2xlcy9saW1iCSAgZ29vZCBmb3IgY3B1PworQyBBTUQgSzgsSzkJCW4vYQorQyBBTUQgSzEwCQluL2EKK0MgQU1EIGJkMQkgICAgIDEuNTEtMi4wCQl5CitDIEFNRCBiZDIJICAgICAxLjUwLTEuOQkJeQorQyBBTUQgYmQzCQkgPworQyBBTUQgYmQ0CQkgPworQyBBTUQgemVuCQluL2EKK0MgQU1EIGJvYmNhdAkJbi9hCitDIEFNRCBqYWd1YXIJCW4vYQorQyBJbnRlbCBQNAkJbi9hCitDIEludGVsIFBOUgkJbi9hCitDIEludGVsIE5ITQkJbi9hCitDIEludGVsIFNCUgkJbi9hCitDIEludGVsIElCUgkJbi9hCitDIEludGVsIEhXTAkJbi9hCitDIEludGVsIEJXTAkJbi9hCitDIEludGVsIFNLTAkJbi9hCitDIEludGVsIGF0b20JCW4vYQorQyBJbnRlbCBTTE0JCW4vYQorQyBWSUEgbmFubwkJbi9hCisKK0MgVE9ETworQyAgKiBXZSBuZWVkIHRvIHVzZSAuYnl0ZSBmb3IgdnBzaGxiLCB2cHBlcm0sIHZwaGFkZHVicSwgYW5kIGFsbCBwb3BjbnQgaWYgd2UKK0MgICAgaW50ZW5kIHRvIHN1cHBvcnQgb2xkIHN5c3RlbXMuCisKK0MgV2UgdXNlIHZwc2hsYiBhbmQgdnBwZXJtIGJlbG93LCB3aGljaCBhcmUgWE9QIGV4dGVuc2lvbnMgdG8gQVZYLiAgU29tZQorQyBzeXN0ZW1zLCBlLmcuLCBOZXRCU0QsIHNldCBPU1hTQVZFIGJ1dCBuZXZlcnRoZWxlc3MgdHJpZ2dlciBTSUdJTEwgZm9yIEFWWC4KK0MgV2UgZmFsbCBiYWNrIHRvIHRoZSBjb3JlMiBjb2RlLgoraWZkZWYoYEdNUF9BVlhfTk9UX1JFQUxMWV9BVkFJTEFCTEUnLGAKK01VTEZVTkNfUFJPTE9HVUUobXBuX2hhbWRpc3QpCitpbmNsdWRlX21wbihgeDg2XzY0L2NvcmUyL2hhbWRpc3QuYXNtJykKKycsYAorCitkZWZpbmUoYHVwJywJCWAlcmRpJykKK2RlZmluZShgdnAnLAkJYCVyc2knKQorZGVmaW5lKGBuJywJCWAlcmR4JykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMzIpCitQUk9MT0dVRShtcG5faGFtZGlzdCkKKwlGVU5DX0VOVFJZKDMpCisJY21wCSQ1LCBuCisJamwJTChzbWEpCisKKwlsZWEJTChjbnN0cykoJXJpcCksICVyOQorCisJeG9yCVIzMiglcjEwKSwgUjMyKCVyMTApCisJdGVzdAkkOCwgUjgodnApCisJanoJTChhbGkpCisJbW92CSh1cCksICVyOAorCXhvcgkodnApLCAlcjgKKwlhZGQJJDgsIHVwCisJYWRkCSQ4LCB2cAorCWRlYwluCisJcG9wY250CSVyOCwgJXIxMAorTChhbGkpOgorCitpZmRlZihgUElDJywgYGRlZmluZShgT0ZGMScsMTYpIGRlZmluZShgT0ZGMicsMzIpIGRlZmluZShgT0ZGMycsNDgpJywKKwkgICAgIGBkZWZpbmUoYE9GRjEnLDMyKSBkZWZpbmUoYE9GRjInLDQ4KSBkZWZpbmUoYE9GRjMnLDY0KScpCisJbW92ZHFhCU9GRjFgJyglcjkpLCAleG1tNwlDIG5pYmJsZSBjb3VudHMgdGFibGUKKwltb3ZkcWEJT0ZGMmAnKCVyOSksICV4bW02CUMgc3BsYXQgc2hpZnQgY291bnRzCisJbW92ZHFhCU9GRjNgJyglcjkpLCAleG1tNQlDIG1hc2tzCisJcHhvcgkleG1tNCwgJXhtbTQKKwlweG9yCSV4bW04LCAleG1tOAkJQyBncmFuZCB0b3RhbCBjb3VudAorCisJbW92CVIzMihuKSwgUjMyKCVyYXgpCisJYW5kCSQ2LCBSMzIoJXJheCkKKwlsZWEJLTY0KHVwLCVyYXgsOCksIHVwCisJbGVhCS02NCh2cCwlcmF4LDgpLCB2cAoraWZkZWYoYFBJQycsYAorCW1vdnNscQkoJXI5LCVyYXgsMiksICVyMTEKKwlhZGQJJXI5LCAlcjExCisJam1wCSolcjExCisnLGAKKwlqbXAJKiglcjksJXJheCw0KQorJykKKworTCgwKToJYWRkCSQ2NCwgdXAKKwlhZGQJJDY0LCB2cAorCXN1YgkkMiwgbgorCisJQUxJR04oMzIpCitMKHRvcCk6CWxkZHF1CSh1cCksICV4bW0wCisJcHhvcgkodnApLCAleG1tMAorCS5ieXRlCTB4OGYsMHhlOSwweDQ4LDB4OTQsMHhjOAlDIHZwc2hsYiAleG1tNiwgJXhtbTAsICV4bW0xCisJcGFuZAkleG1tNSwgJXhtbTAKKwlwYW5kCSV4bW01LCAleG1tMQorCS5ieXRlCTB4OGYsMHhlOCwweDQwLDB4YTMsMHhkNywweDAwCUMgdnBwZXJtICV4bW0wLCV4bW03LCV4bW03LCV4bW0yCisJLmJ5dGUJMHg4ZiwweGU4LDB4NDAsMHhhMywweGRmLDB4MTAJQyB2cHBlcm0gJXhtbTEsJXhtbTcsJXhtbTcsJXhtbTMKKwlwYWRkYgkleG1tMiwgJXhtbTMKKwlwYWRkYgkleG1tMywgJXhtbTQKK0woNik6CWxkZHF1CTE2KHVwKSwgJXhtbTAKKwlweG9yCTE2KHZwKSwgJXhtbTAKKwkuYnl0ZQkweDhmLDB4ZTksMHg0OCwweDk0LDB4YzgJQyB2cHNobGIgJXhtbTYsICV4bW0wLCAleG1tMQorCXBhbmQJJXhtbTUsICV4bW0wCisJcGFuZAkleG1tNSwgJXhtbTEKKwkuYnl0ZQkweDhmLDB4ZTgsMHg0MCwweGEzLDB4ZDcsMHgwMAlDIHZwcGVybSAleG1tMCwleG1tNywleG1tNywleG1tMgorCS5ieXRlCTB4OGYsMHhlOCwweDQwLDB4YTMsMHhkZiwweDEwCUMgdnBwZXJtICV4bW0xLCV4bW03LCV4bW03LCV4bW0zCisJcGFkZGIJJXhtbTIsICV4bW0zCisJcGFkZGIJJXhtbTMsICV4bW00CitMKDQpOglsZGRxdQkzMih1cCksICV4bW0wCisJcHhvcgkzMih2cCksICV4bW0wCisJLmJ5dGUJMHg4ZiwweGU5LDB4NDgsMHg5NCwweGM4CUMgdnBzaGxiICV4bW02LCAleG1tMCwgJXhtbTEKKwlwYW5kCSV4bW01LCAleG1tMAorCXBhbmQJJXhtbTUsICV4bW0xCisJLmJ5dGUJMHg4ZiwweGU4LDB4NDAsMHhhMywweGQ3LDB4MDAJQyB2cHBlcm0gJXhtbTAsJXhtbTcsJXhtbTcsJXhtbTIKKwkuYnl0ZQkweDhmLDB4ZTksMHg3OCwweGQzLDB4YzQJQyB2cGhhZGR1YnEgJXhtbTQsICV4bW0wCisJLmJ5dGUJMHg4ZiwweGU4LDB4NDAsMHhhMywweGU3LDB4MTAJQyB2cHBlcm0gJXhtbTEsJXhtbTcsJXhtbTcsJXhtbTQKKwlwYWRkYgkleG1tMiwgJXhtbTMKKwlwYWRkYgkleG1tMiwgJXhtbTQKKwlwYWRkcQkleG1tMCwgJXhtbTgJCUMgc3VtIHRvIDIgeCA2NC1iaXQgY291bnRzCitMKDIpOgltb3YJNDgodXApLCAlcjgKKwltb3YJNTYodXApLCAlcjkKKwlhZGQJJDY0LCB1cAorCXhvcgk0OCh2cCksICVyOAorCXhvcgk1Nih2cCksICVyOQorCWFkZAkkNjQsIHZwCisJcG9wY250CSVyOCwgJXI4CisJcG9wY250CSVyOSwgJXI5CisJYWRkCSVyOCwgJXIxMAorCWFkZAklcjksICVyMTAKKwlzdWIJJDgsIG4KKwlqZwlMKHRvcCkKKworCXRlc3QJJDEsIFI4KG4pCisJanoJTCh4KQorCW1vdgkodXApLCAlcjgKKwl4b3IJKHZwKSwgJXI4CisJcG9wY250CSVyOCwgJXI4CisJYWRkCSVyOCwgJXIxMAorTCh4KToJLmJ5dGUJMHg4ZiwweGU5LDB4NzgsMHhkMywweGM0CUMgdnBoYWRkdWJxICV4bW00LCAleG1tMAorCXBhZGRxCSV4bW0wLCAleG1tOAorCXBzaHVmZAkkMTQsICV4bW04LCAleG1tMAorCXBhZGRxCSV4bW04LCAleG1tMAorCW1vdnEJJXhtbTAsICVyYXgKKwlhZGQJJXIxMCwgJXJheAorCUZVTkNfRVhJVCgpCisJcmV0CisKK0woc21hKToJbW92CSh1cCksICVyOAorCXhvcgkodnApLCAlcjgKKwlwb3BjbnQJJXI4LCAlcmF4CisJZGVjCW4KKwlqeglMKGVkKQorTCh0cCk6CW1vdgk4KHVwKSwgJXI4CisJYWRkCSQ4LCB1cAorCXhvcgk4KHZwKSwgJXI4CisJYWRkCSQ4LCB2cAorCXBvcGNudAklcjgsICVyOAorCWFkZAklcjgsICVyYXgKKwlkZWMJbgorCWpueglMKHRwKQorTChlZCk6CUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCitERUZfT0JKRUNUKEwoY25zdHMpLDE2LGBKVU1QVEFCU0VDVCcpCisJSk1QRU5UKAlMKDApLCBMKGNuc3RzKSkKKwlKTVBFTlQoCUwoMiksIEwoY25zdHMpKQorCUpNUEVOVCgJTCg0KSwgTChjbnN0cykpCisJSk1QRU5UKAlMKDYpLCBMKGNuc3RzKSkKKwkuYnl0ZQkweDAwLDB4MDEsMHgwMSwweDAyLDB4MDEsMHgwMiwweDAyLDB4MDMKKwkuYnl0ZQkweDAxLDB4MDIsMHgwMiwweDAzLDB4MDIsMHgwMywweDAzLDB4MDQKKwkuYnl0ZQktNCwtNCwtNCwtNCwtNCwtNCwtNCwtNAorCS5ieXRlCS00LC00LC00LC00LC00LC00LC00LC00CisJLmJ5dGUJMHgwZiwweDBmLDB4MGYsMHgwZiwweDBmLDB4MGYsMHgwZiwweDBmCisJLmJ5dGUJMHgwZiwweDBmLDB4MGYsMHgwZiwweDBmLDB4MGYsMHgwZiwweDBmCitFTkRfT0JKRUNUKEwoY25zdHMpKQorJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2JkMS9tdWxfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9iZDEvbXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYjA5N2YKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9iZDEvbXVsXzEuYXNtCkBAIC0wLDAgKzEsMTkzIEBACitkbmwgIEFNRDY0IG1wbl9tdWxfMSBvcHRpbWlzZWQgZm9yIEFNRCBCdWxsZG96ZXIuCisKK2RubCAgQ29weXJpZ2h0IDIwMDMtMjAwNSwgMjAwNywgMjAwOCwgMjAxMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBBTUQgSzgsSzkgICAgICAzLjY1CitDIEFNRCBLMTAgICAgICAgIDMuMzAgICAgMy42OAorQyBBTUQgYnVsbCAgICAgICA0LjA0ICAgIDQuMjkKK0MgQU1EIHBpbGUgICAgICAgNC4zMworQyBBTUQgc3RlYW0KK0MgQU1EIGV4Y2F2YXRvcgorQyBBTUQgYm9iY2F0ICAgICA1LjczCitDIEFNRCBqYWd1YXIgICAgIDUuODcKK0MgSW50ZWwgUDQgICAgICAxMi41CitDIEludGVsIGNvcmUyICAgIDQuMzgKK0MgSW50ZWwgTkhNICAgICAgNC4yOAorQyBJbnRlbCBTQlIgICAgICAyLjY5CitDIEludGVsIElCUiAgICAgIDIuNTUKK0MgSW50ZWwgSFdMICAgICAgMi40MQorQyBJbnRlbCBCV0wgICAgICAyLjQ5CitDIEludGVsIFNLTCAgICAgIDIuNTAKK0MgSW50ZWwgYXRvbSAgICAyMC4zCitDIEludGVsIFNMTSAgICAgIDcuOAorQyBWSUEgbmFubyAgICAgICA0LjI1CisKK0MgVGhlIGxvb3Agb2YgdGhpcyBjb2RlIGlzIHRoZSByZXN1bHQgb2YgcnVubmluZyBhIGNvZGUgZ2VuZXJhdGlvbiBhbmQKK0Mgb3B0aW1pc2F0aW9uIHRvb2wgc3VpdGUgd3JpdHRlbiBieSBEYXZpZCBIYXJ2ZXkgYW5kIFRvcmJqb3JuIEdyYW5sdW5kLgorCitDIFRPRE8KK0MgICogTW92ZSBsb29wIGNvZGUgaW50byBmZWVkLWluIGJsb2NrcywgdG8gc2F2ZSBpbnNuIGZvciB6ZXJvaW5nIHJlZ3MuCisKK2RlZmluZShgcnAnLCAgICAgIGAlcmRpJykgICBDIHJjeAorZGVmaW5lKGB1cCcsICAgICAgYCVyc2knKSAgIEMgcmR4CitkZWZpbmUoYG5fcGFyYW0nLCBgJXJkeCcpICAgQyByOAorZGVmaW5lKGB2MCcsICAgICAgYCVyY3gnKSAgIEMgcjkKKworZGVmaW5lKGBuJywgICAgICAgYCVyYngnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitJRkRPUyhgCWRlZmluZShgdXAnLCBgYCVyc2knJykJJykgZG5sCitJRkRPUyhgCWRlZmluZShgcnAnLCBgYCVyY3gnJykJJykgZG5sCitJRkRPUyhgCWRlZmluZShgdjAnLCBgYCVyOScnKQknKSBkbmwKK0lGRE9TKGAJZGVmaW5lKGByOScsIGBgcmRpJycpCScpIGRubAorSUZET1MoYAlkZWZpbmUoYG4nLCAgYGAlcjgnJykJJykgZG5sCitJRkRPUyhgCWRlZmluZShgcjgnLCBgYHJieCcnKQknKSBkbmwKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMTYpCitQUk9MT0dVRShtcG5fbXVsXzFjKQorSUZET1MoYGBwdXNoCSVyc2kJCScnKQorSUZET1MoYGBwdXNoCSVyZGkJCScnKQorSUZET1MoYGBtb3YJJXJkeCwgJXJzaQknJykKKworCW1vdgkodXApLCAlcmF4CQlDIHJlYWQgZmlyc3QgdSBsaW1iIGVhcmx5CisJcHVzaAklcmJ4CitJRlNURChgCW1vdgluX3BhcmFtLCAlcjExCScpCUMgbW92ZSBhd2F5IG4gZnJvbSByZHgsIG11bCB1c2VzIGl0CitJRkRPUyhgCW1vdgluLCAlcjExCQknKQorCW11bAl2MAorCitJRlNURChgIGFkZAklcjgsICVyYXgJJykKK0lGRE9TKGAgYWRkCTY0KCVyc3ApLCAlcmF4CScpCUMgNDAgKyAzKjggICgzIHB1c2ggaW5zbnMpCisJYWRjCSQwLCAlcmR4CisJam1wCUwoY29tbW9uKQorCitFUElMT0dVRSgpCisKKwlBTElHTigxNikKK1BST0xPR1VFKG1wbl9tdWxfMSkKK0lGRE9TKGBgcHVzaAklcnNpCQknJykKK0lGRE9TKGBgcHVzaAklcmRpCQknJykKK0lGRE9TKGBgbW92CSVyZHgsICVyc2kJJycpCisKKwltb3YJKHVwKSwgJXJheAkJQyByZWFkIGZpcnN0IHUgbGltYiBlYXJseQorCXB1c2gJJXJieAorSUZTVEQoYAltb3YJbl9wYXJhbSwgJXIxMQknKQlDIG1vdmUgYXdheSBuIGZyb20gcmR4LCBtdWwgdXNlcyBpdAorSUZET1MoYAltb3YJbiwgJXIxMQkJJykKKwltdWwJdjAKKworTChjb21tb24pOgorSUZTVEQoYAltb3YJJXIxMSwgbgkJJykKKworCWFuZAkkMywgUjMyKCVyMTEpCisJbGVhCS0xNihycCxuLDgpLCBycAorCWp6CUwoYjApCisJY21wCSQyLCBSMzIoJXIxMSkKKwlqYglMKGIxKQorCWp6CUwoYjIpCisKK0woYjMpOgltb3YJJXJheCwgJXIxMAorCW1vdgklcmR4LCAlcjExCisJbW92CTgodXApLCAlcmF4CisJbXVsCXYwCisJbGVhCSh1cCxuLDgpLCB1cAorCW5vdAluCisJam1wCUwoTDMpCisKK0woYjApOgltb3YJJXJheCwgJXI5CisJbW92CSVyZHgsICVyMTAKKwltb3YJOCh1cCksICVyYXgKKwlsZWEJKHVwLG4sOCksIHVwCisJbmVnCW4KKwlqbXAJTChMMCkKKworTChiMSk6CW1vdgklcmF4LCAlcjgKKwljbXAJJDEsIG4KKwlqeglMKG4xKQorCW1vdgklcmR4LCAlcjkKKwlsZWEJKHVwLG4sOCksIHVwCisJbmVnCW4KKwltb3YJJXI4LCAxNihycCxuLDgpCisJaW5jCW4KKwlqbXAJTChMMSkKKworTChiMik6CW1vdgklcmF4LCAlcjExCisJbW92CSVyZHgsICVyOAorCW1vdgk4KHVwKSwgJXJheAorCWxlYQkodXAsbiw4KSwgdXAKKwluZWcJbgorCWFkZAkkMiwgbgorCWpucwlMKGVuZCkKKworCUFMSUdOKDE2KQorTCh0b3ApOgltdWwJdjAKKwltb3YJJXJkeCwgJXI5CisJYWRkCSVyYXgsICVyOAorCWFkYwkkMCwgJXI5CisJbW92CSVyOCwgOChycCxuLDgpCisJbW92CSVyMTEsIChycCxuLDgpCitMKEwxKToJbW92CSh1cCxuLDgpLCAlcmF4CisJbXVsCXYwCisJYWRkCSVyYXgsICVyOQorCW1vdgklcmR4LCAlcjEwCisJbW92CTgodXAsbiw4KSwgJXJheAorCWFkYwkkMCwgJXIxMAorTChMMCk6CW11bAl2MAorCWFkZAklcmF4LCAlcjEwCisJbW92CSVyZHgsICVyMTEKKwltb3YJMTYodXAsbiw4KSwgJXJheAorCWFkYwkkMCwgJXIxMQorCW11bAl2MAorCW1vdgklcjksIDE2KHJwLG4sOCkKK0woTDMpOglhZGQJJXJheCwgJXIxMQorCW1vdgklcjEwLCAyNChycCxuLDgpCisJbW92CSVyZHgsICVyOAorCWFkYwkkMCwgJXI4CisJYWRkCSQ0LCBuCisJbW92CS04KHVwLG4sOCksICVyYXgKKwlqcwlMKHRvcCkKKworTChlbmQpOgltdWwJdjAKKwlhZGQJJXJheCwgJXI4CisJYWRjCSQwLCAlcmR4CisJbW92CSVyMTEsIChycCkKK0wobjEpOgltb3YJJXI4LCA4KHJwKQorCW1vdgklcmR4LCAlcmF4CisKKwlwb3AJJXJieAorSUZET1MoYGBwb3AJJXJkaQkJJycpCitJRkRPUyhgYHBvcAklcnNpCQknJykKKwlyZXQKK0VQSUxPR1VFKCkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYmQxL211bF8yLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2JkMS9tdWxfMi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVmYTdhYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2JkMS9tdWxfMi5hc20KQEAgLTAsMCArMSwxOTUgQEAKK2RubCAgQU1ENjQgbXBuX211bF8yIG9wdGltaXNlZCBmb3IgQU1EIEJ1bGxkb3plci4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDA4LCAyMDExLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIEFNRCBLOCxLOQkgNi43OAorQyBBTUQgSzEwCSA2Ljc4CitDIEFNRCBiZDEJIDguMzkJIDguNjUKK0MgQU1EIGJkMgkgOC40NworQyBBTUQgYmQzCitDIEFNRCBiZDQKK0MgQU1EIHplbgorQyBBTUQgYnQxCTEyLjEKK0MgQU1EIGJ0MgkxMS41CitDIEludGVsIFA0CTI0LjAKK0MgSW50ZWwgUE5SCSA4LjE0CitDIEludGVsIE5ITQkgNy43OAorQyBJbnRlbCBTQlIJIDYuMzQKK0MgSW50ZWwgSUJSCSA2LjE1CitDIEludGVsIEhXTAkgNi4wNAorQyBJbnRlbCBCV0wJIDQuMzMKK0MgSW50ZWwgU0tMCSA0LjQxCitDIEludGVsIGF0b20JMzkuNQorQyBJbnRlbCBTTE0JMjcuOAorQyBWSUEgbmFubworCitDIFRoZSBsb29wIG9mIHRoaXMgY29kZSBpcyB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgYSBjb2RlIGdlbmVyYXRpb24gYW5kCitDIG9wdGltaXNhdGlvbiB0b29sIHN1aXRlIHdyaXR0ZW4gYnkgRGF2aWQgSGFydmV5IGFuZCBUb3Jiam9ybiBHcmFubHVuZC4KKworZGVmaW5lKGBycCcsICAgICAgYCVyZGknKSAgIEMgcmN4CitkZWZpbmUoYHVwJywgICAgICBgJXJzaScpICAgQyByZHgKK2RlZmluZShgbl9wYXJhbScsIGAlcmR4JykgICBDIHI4CitkZWZpbmUoYHZwJywgICAgICBgJXJjeCcpICAgQyByOQorCitkZWZpbmUoYHYwJywgYCVyOCcpCitkZWZpbmUoYHYxJywgYCVyOScpCitkZWZpbmUoYHcwJywgYCVyYngnKQorZGVmaW5lKGB3MScsIGAlcmN4JykKK2RlZmluZShgdzInLCBgJXJicCcpCitkZWZpbmUoYHczJywgYCVyMTAnKQorZGVmaW5lKGBuJywgIGAlcjExJykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMzIpCitQUk9MT0dVRShtcG5fbXVsXzIpCisJRlVOQ19FTlRSWSg0KQorCXB1c2gJJXJieAorCXB1c2gJJXJicAorCisJbW92CSh1cCksICVyYXgKKworCW1vdgkodnApLCB2MAorCW1vdgk4KHZwKSwgdjEKKworCWxlYQkodXAsbl9wYXJhbSw4KSwgdXAKKwlsZWEJKHJwLG5fcGFyYW0sOCksIHJwCisKKwltb3YJbl9wYXJhbSwgbgorCW11bAl2MAorCW5lZwluCisKKwl0ZXN0CSQxLCBSOChuKQorCWpueglMKGJ4MSkKKworTChieDApOgl0ZXN0CSQyLCBSOChuKQorCWpueglMKGIxMCkKKworTChiMDApOgltb3YJJXJheCwgdzAKKwltb3YJJXJkeCwgdzEKKwl4b3IJUjMyKHcyKSwgUjMyKHcyKQorCW1vdgkodXAsbiw4KSwgJXJheAorCWptcAlMKGxvMCkKKworTChiMTApOgltb3YJJXJheCwgdzIKKwltb3YJJXJkeCwgdzMKKwltb3YJKHVwLG4sOCksICVyYXgKKwl4b3IJUjMyKHcwKSwgUjMyKHcwKQorCW11bAl2MQorCWFkZAkkLTIsIG4KKwlqbXAJTChsbzIpCisKK0woYngxKToJdGVzdAkkMiwgUjgobikKKwlqeglMKGIxMSkKKworTChiMDEpOgltb3YJJXJheCwgdzMKKwltb3YJJXJkeCwgdzAKKwltb3YJKHVwLG4sOCksICVyYXgKKwltdWwJdjEKKwl4b3IJUjMyKHcxKSwgUjMyKHcxKQorCWluYwluCisJam1wCUwobG8xKQorCitMKGIxMSk6CW1vdgklcmF4LCB3MQorCW1vdgklcmR4LCB3MgorCW1vdgkodXAsbiw4KSwgJXJheAorCXhvcglSMzIodzMpLCBSMzIodzMpCisJZGVjCW4KKwlqbXAJTChsbzMpCisKKwlBTElHTigzMikKK0wodG9wKToJbW92CS04KHVwLG4sOCksICVyYXgKKwltdWwJdjEKKwltb3YJdzIsIC0xNihycCxuLDgpCitMKGxvMSk6CWFkZAklcmF4LCB3MAorCW1vdgl3MywgLTgocnAsbiw4KQorCWFkYwklcmR4LCB3MQorCW1vdgkodXAsbiw4KSwgJXJheAorCW11bAl2MAorCW1vdgkkMCwgUjMyKHcyKQorCWFkZAklcmF4LCB3MAorCWFkYwklcmR4LCB3MQorCWFkYwkkMCwgUjMyKHcyKQorCW1vdgkodXAsbiw4KSwgJXJheAorTChsbzApOgltdWwJdjEKKwlhZGQJJXJheCwgdzEKKwlhZGMJJXJkeCwgdzIKKwltb3YJOCh1cCxuLDgpLCAlcmF4CisJbXVsCXYwCisJYWRkCSVyYXgsIHcxCisJbW92CXcwLCAocnAsbiw4KQorCW1vdgkkMCwgUjMyKHczKQorCW1vdgk4KHVwLG4sOCksICVyYXgKKwlhZGMJJXJkeCwgdzIKKwlhZGMJJDAsIFIzMih3MykKK0wobG8zKToJbXVsCXYxCisJYWRkCSVyYXgsIHcyCisJbW92CTE2KHVwLG4sOCksICVyYXgKKwlhZGMJJXJkeCwgdzMKKwltdWwJdjAKKwlhZGQJJXJheCwgdzIKKwltb3YJMTYodXAsbiw4KSwgJXJheAorCW1vdgkkMCwgUjMyKHcwKQorCWFkYwklcmR4LCB3MworCWFkYwkkMCwgUjMyKHcwKQorCW11bAl2MQorCW1vdgl3MSwgOChycCxuLDgpCitMKGxvMik6CWFkZAklcmF4LCB3MworCWFkYwklcmR4LCB3MAorCW1vdgkyNCh1cCxuLDgpLCAlcmF4CisJbXVsCXYwCisJYWRkCSVyYXgsIHczCisJYWRjCSVyZHgsIHcwCisJbW92CSQwLCBSMzIodzEpCisJYWRjCSQwLCBSMzIodzEpCisJYWRkCSQ0LCBuCisJam5jCUwodG9wKQorCitMKGVuZCk6CW1vdgktOCh1cCksICVyYXgKKwltdWwJdjEKKwltb3YJdzIsIC0xNihycCkKKwlhZGQJJXJheCwgdzAKKwltb3YJdzMsIC04KHJwKQorCWFkYwklcmR4LCB3MQorCW1vdgl3MCwgKHJwKQorCW1vdgl3MSwgJXJheAorCisJcG9wCSVyYnAKKwlwb3AJJXJieAorCUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9iZDEvbXVsX2Jhc2VjYXNlLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2JkMS9tdWxfYmFzZWNhc2UuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0N2JhNTgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9iZDEvbXVsX2Jhc2VjYXNlLmFzbQpAQCAtMCwwICsxLDQxNiBAQAorZG5sICBBTUQ2NCBtcG5fbXVsX2Jhc2VjYXNlIG9wdGltaXNlZCBmb3IgQU1EIEJ1bGxkb3plciBhbmQgUGlsZWRyaXZlci4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDAzLTIwMDUsIDIwMDcsIDIwMDgsIDIwMTEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDIGN5Y2xlcy9saW1iCW11bF8xCQltdWxfMgkJbXVsXzMJCWFkZG11bF8yCitDIEFNRCBLOCxLOQorQyBBTUQgSzEwCitDIEFNRCBidWxsCX40LjgJCX40LjU1CQktCQl+NC4zCitDIEFNRCBwaWxlCX40LjYJCX40LjU1CQktCQl+NC41NQorQyBBTUQgYm9iY2F0CitDIEFNRCBqYWd1YXIKK0MgSW50ZWwgUDQKK0MgSW50ZWwgY29yZQorQyBJbnRlbCBOSE0KK0MgSW50ZWwgU0JSCitDIEludGVsIElCUgorQyBJbnRlbCBIV0wKK0MgSW50ZWwgQldMCitDIEludGVsIGF0b20KK0MgVklBIG5hbm8KKworQyBUaGUgaW5uZXIgbG9vcHMgb2YgdGhpcyBjb2RlIGFyZSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgYSBjb2RlIGdlbmVyYXRpb24gYW5kCitDIG9wdGltaXNhdGlvbiB0b29sIHN1aXRlIHdyaXR0ZW4gYnkgRGF2aWQgSGFydmV5IGFuZCBUb3Jiam9ybiBHcmFubHVuZC4KKworQyBUT0RPCitDICAqIE1lcmdlIGJ1bGwtc3BlY2lmaWMgbXVsXzEsIGlmIGl0IGlzIG5vdCBzbG93ZXIgdGhlIFRPT00yMiByYW5nZS4KK0MgICAgQWx0ZXJuYXRpdmVseSwgd2UgY291bGQgdHdlYWsgdGhlIHByZXNlbnQgY29kZSAod2hpY2ggd2FzIGxvb3BtaXhlZCBmb3IgYQorQyAgICBkaWZmZXJlbnQgQ1BVKS4KK0MgICogTWVyZ2UgZmFzdGVyIG11bF8yLCBzdWNoIGFzIHRoZSBvbmUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoaXMgZmlsZS4KK0MgICogRnVydGhlciBtaWNyby1vcHRpbWlzZS4KKworQyBXaGVuIHBsYXlpbmcgd2l0aCBwb2ludGVycywgc2V0IHRoaXMgdG8gJDIgdG8gZmFsbCBiYWNrIHRvIGNvbnNlcnZhdGl2ZQorQyBpbmRleGluZyBpbiB3aW5kLWRvd24gY29kZS4KK2RlZmluZShgSScsYCQxJykKKworCitkZWZpbmUoYHJwJywgICAgICBgJXJkaScpCitkZWZpbmUoYHVwJywgICAgICBgJXJzaScpCitkZWZpbmUoYHVuX3BhcmFtJyxgJXJkeCcpCitkZWZpbmUoYHZwJywgICAgICBgJXJjeCcpCitkZWZpbmUoYHZuJywgICAgICBgJXI4JykKKworZGVmaW5lKGB1bicsICAgICAgYCVyYngnKQorCitkZWZpbmUoYHcwJywJYCVyMTAnKQorZGVmaW5lKGB3MScsCWAlcjExJykKK2RlZmluZShgdzInLAlgJXIxMicpCitkZWZpbmUoYHczJywJYCVyMTMnKQorZGVmaW5lKGBuJywJYCVyYnAnKQorZGVmaW5lKGB2MCcsCWAlcjknKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigxNikKK1BST0xPR1VFKG1wbl9tdWxfYmFzZWNhc2UpCisJRlVOQ19FTlRSWSg0KQorSUZET1MoYAltb3YJNTYoJXJzcCksICVyOGQJJykKKwlwdXNoCSVyYngKKwlwdXNoCSVyYnAKKwltb3YJdW5fcGFyYW0sIHVuCQlDIGZyZWUgdXAgcmR4CisJbmVnCXVuCisKKwltb3YJKHVwKSwgJXJheAkJQyBzaGFyZWQgZm9yIG11bF8xIGFuZCBtdWxfMgorCWxlYQkodXAsdW5fcGFyYW0sOCksIHVwCUMgcG9pbnQgYXQgb3BlcmFuZCBlbmQKKwlsZWEJKHJwLHVuX3BhcmFtLDgpLCBycAlDIHBvaW50IGF0IHJwW3VuLTFdCisKKwltb3YJKHZwKSwgdjAJCUMgc2hhcmVkIGZvciBtdWxfMSBhbmQgbXVsXzIKKwltdWwJdjAJCQlDIHNoYXJlZCBmb3IgbXVsXzEgYW5kIG11bF8yCisKKwl0ZXN0CSQxLCBSOCh2bikKKwlqeglMKGRvX211bF8yKQorCitMKGRvX211bF8xKToKKwl0ZXN0CSQxLCBSOCh1bikKKwlqbnoJTChtMXgxKQorCitMKG0xeDApOm1vdgklcmF4LCB3MAkJQyB1biA9IDIsIDQsIDYsIDgsIC4uLgorCW1vdgklcmR4LCB3MQorCW1vdgk4KHVwLHVuLDgpLCAlcmF4CisJdGVzdAkkMiwgUjgodW4pCisJam56CUwobTExMCkKKworTChtMTAwKTpsZWEJMih1biksIG4JCUMgdW4gPSA0LCA4LCAxMiwgLi4uCisJam1wCUwobTFsMCkKKworTChtMTEwKTpsZWEJKHVuKSwgbgkJCUMgdW4gPSAyLCA2LCAxMCwgLi4uCisJam1wCUwobTFsMikKKworTChtMXgxKTptb3YJJXJheCwgdzEJCUMgdW4gPSAxLCAzLCA1LCA3LCAuLi4KKwltb3YJJXJkeCwgdzAKKwl0ZXN0CSQyLCBSOCh1bikKKwlqeglMKG0xMTEpCisKK0wobTEwMSk6bGVhCTModW4pLCBuCQlDIHVuID0gMSwgNSwgOSwgLi4uCisJdGVzdAluLCBuCisJanMJTChtMWwxKQorCW1vdgklcmF4LCAtOChycCkKKwltb3YJJXJkeCwgKHJwKQorCXBvcAklcmJwCisJcG9wCSVyYngKKwlGVU5DX0VYSVQoKQorCXJldAorCitMKG0xMTEpOmxlYQkxKHVuKSwgbgkJQyB1biA9IDMsIDcsIDExLCAuLi4KKwltb3YJOCh1cCx1biw4KSwgJXJheAorCWptcAlMKG0xbDMpCisKKwlBTElHTigxNikKK0wobTF0cCk6bW92CSVyZHgsIHcwCisJYWRkCSVyYXgsIHcxCitMKG0xbDEpOm1vdgktMTYodXAsbiw4KSwgJXJheAorCWFkYwkkMCwgdzAKKwltdWwJdjAKKwlhZGQJJXJheCwgdzAKKwltb3YJdzEsIC0yNChycCxuLDgpCisJbW92CS04KHVwLG4sOCksICVyYXgKKwltb3YJJXJkeCwgdzEKKwlhZGMJJDAsIHcxCitMKG0xbDApOm11bAl2MAorCW1vdgl3MCwgLTE2KHJwLG4sOCkKKwlhZGQJJXJheCwgdzEKKwltb3YJJXJkeCwgdzAKKwltb3YJKHVwLG4sOCksICVyYXgKKwlhZGMJJDAsIHcwCitMKG0xbDMpOm11bAl2MAorCW1vdgl3MSwgLTgocnAsbiw4KQorCW1vdgklcmR4LCB3MQorCWFkZAklcmF4LCB3MAorCW1vdgk4KHVwLG4sOCksICVyYXgKKwlhZGMJJDAsIHcxCitMKG0xbDIpOm11bAl2MAorCW1vdgl3MCwgKHJwLG4sOCkKKwlhZGQJJDQsIG4KKwlqbmMJTChtMXRwKQorCitMKG0xZWQpOmFkZAklcmF4LCB3MQorCWFkYwkkMCwgJXJkeAorCW1vdgl3MSwgSSgtOChycCksLTI0KHJwLG4sOCkpCisJbW92CSVyZHgsIEkoKHJwKSwtMTYocnAsbiw4KSkKKworCWRlYwlSMzIodm4pCisJanoJTChyZXQyKQorCisJbGVhCTgodnApLCB2cAorCWxlYQk4KHJwKSwgcnAKKwlwdXNoCSVyMTIKKwlwdXNoCSVyMTMKKwlwdXNoCSVyMTQKKwlqbXAJTChkb19hZGRtdWwpCisKK0woZG9fbXVsXzIpOgorZGVmaW5lKGB2MScsCWAlcjE0JykKKwlwdXNoCSVyMTIKKwlwdXNoCSVyMTMKKwlwdXNoCSVyMTQKKworCW1vdgk4KHZwKSwgdjEKKworCXRlc3QJJDEsIFI4KHVuKQorCWpueglMKG0yYjEpCisKK0wobTJiMCk6bGVhCSh1biksIG4KKwltb3YJJXJheCwgdzIJCUMgMAorCW1vdgkodXAsdW4sOCksICVyYXgKKwltb3YJJXJkeCwgdzEJCUMgMQorCW11bAl2MQorCW1vdgklcmF4LCB3MAkJQyAxCisJbW92CXcyLCAocnAsdW4sOCkJCUMgMAorCW1vdgk4KHVwLHVuLDgpLCAlcmF4CisJbW92CSVyZHgsIHcyCQlDIDIKKwlqbXAJTChtMmwwKQorCitMKG0yYjEpOmxlYQkxKHVuKSwgbgorCW1vdgklcmF4LCB3MAkJQyAxCisJbW92CSVyZHgsIHczCQlDIDIKKwltb3YJKHVwLHVuLDgpLCAlcmF4CisJbXVsCXYxCisJbW92CXcwLCAocnAsdW4sOCkJCUMgMQorCW1vdgklcmR4LCB3MAkJQyAzCisJbW92CSVyYXgsIHcyCQlDIDAKKwltb3YJOCh1cCx1biw4KSwgJXJheAorCWptcAlMKG0ybDEpCisKKwlBTElHTigzMikKK0wobTJ0cCk6YWRkCSVyYXgsIHcyCQlDIDAKKwltb3YJKHVwLG4sOCksICVyYXgKKwlhZGMJJDAsIHcwCQkJQyAxCitMKG0ybDEpOm11bAl2MAorCWFkZAklcmF4LCB3MgkJQyAwCisJbW92CSh1cCxuLDgpLCAlcmF4CisJbW92CSVyZHgsIHcxCQlDIDEKKwlhZGMJJDAsIHcxCQkJQyAxCisJbXVsCXYxCisJYWRkCXczLCB3MgkJCUMgMAorCWFkYwkkMCwgdzEJCQlDIDEKKwlhZGQJJXJheCwgdzAJCUMgMQorCW1vdgl3MiwgKHJwLG4sOCkJCUMgMAorCW1vdgk4KHVwLG4sOCksICVyYXgKKwltb3YJJXJkeCwgdzIJCUMgMgorCWFkYwkkMCwgdzIJCQlDIDIKK0wobTJsMCk6bXVsCXYwCisJYWRkCSVyYXgsIHcwCQlDIDEKKwltb3YJJXJkeCwgdzMJCUMgMgorCWFkYwkkMCwgdzMJCQlDIDIKKwlhZGQJdzEsIHcwCQkJQyAxCisJYWRjCSQwLCB3MwkJCUMgMgorCW1vdgk4KHVwLG4sOCksICVyYXgKKwltdWwJdjEKKwlhZGQJJDIsIG4KKwltb3YJdzAsIC04KHJwLG4sOCkJCUMgMQorCW1vdgklcmR4LCB3MAkJQyAzCisJam5jCUwobTJ0cCkKKworTChtMmVkKTphZGQJJXJheCwgdzIKKwlhZGMJJDAsICVyZHgKKwlhZGQJdzMsIHcyCisJYWRjCSQwLCAlcmR4CisJbW92CXcyLCBJKChycCksKHJwLG4sOCkpCisJbW92CSVyZHgsIEkoOChycCksOChycCxuLDgpKQorCisJYWRkCSQtMiwgUjMyKHZuKQorCWp6CUwocmV0NSkKKworCWxlYQkxNih2cCksIHZwCisJbGVhCTE2KHJwKSwgcnAKKworCitMKGRvX2FkZG11bCk6CisJcHVzaAklcjE1CisJcHVzaAl2bgkJCUMgc2F2ZSB2biBpbiBuZXcgc3RhY2sgc2xvdAorZGVmaW5lKGB2bicsCWAoJXJzcCknKQorZGVmaW5lKGBYMCcsCWAlcjE0JykKK2RlZmluZShgWDEnLAlgJXIxNScpCitkZWZpbmUoYHYxJywJYCVyOCcpCisKK0wob3V0ZXIpOgorCW1vdgkodnApLCB2MAorCW1vdgk4KHZwKSwgdjEKKworCW1vdgkodXAsdW4sOCksICVyYXgKKwltdWwJdjAKKworCXRlc3QJJDEsIFI4KHVuKQorCWpueglMKGJ4MSkKKworTChieDApOgltb3YJJXJheCwgWDEKKwltb3YJKHVwLHVuLDgpLCAlcmF4CisJbW92CSVyZHgsIFgwCisJbXVsCXYxCisJdGVzdAkkMiwgUjgodW4pCisJam56CUwoYjEwKQorCitMKGIwMCk6CWxlYQkodW4pLCBuCQkJQyB1biA9IDQsIDgsIDEyLCAuLi4KKwltb3YJKHJwLHVuLDgpLCB3MworCW1vdgklcmF4LCB3MAorCW1vdgk4KHVwLHVuLDgpLCAlcmF4CisJbW92CSVyZHgsIHcxCisJam1wCUwobG8wKQorCitMKGIxMCk6CWxlYQkyKHVuKSwgbgkJQyB1biA9IDIsIDYsIDEwLCAuLi4KKwltb3YJKHJwLHVuLDgpLCB3MQorCW1vdgklcmR4LCB3MworCW1vdgklcmF4LCB3MgorCW1vdgk4KHVwLHVuLDgpLCAlcmF4CisJam1wCUwobG8yKQorCitMKGJ4MSk6CW1vdgklcmF4LCBYMAorCW1vdgkodXAsdW4sOCksICVyYXgKKwltb3YJJXJkeCwgWDEKKwltdWwJdjEKKwl0ZXN0CSQyLCBSOCh1bikKKwlqeglMKGIxMSkKKworTChiMDEpOglsZWEJMSh1biksIG4JCUMgdW4gPSAxLCA1LCA5LCAuLi4KKwltb3YJKHJwLHVuLDgpLCB3MgorCW1vdgklcmR4LCB3MAorCW1vdgklcmF4LCB3MworCWptcAlMKGxvMSkKKworTChiMTEpOglsZWEJLTEodW4pLCBuCQlDIHVuID0gMywgNywgMTEsIC4uLgorCW1vdgkocnAsdW4sOCksIHcwCisJbW92CSVyYXgsIHcxCisJbW92CTgodXAsdW4sOCksICVyYXgKKwltb3YJJXJkeCwgdzIKKwlqbXAJTChsbzMpCisKKwlBTElHTigzMikKK0wodG9wKToKK0wobG8yKToJbXVsCXYwCisJYWRkCXcxLCBYMQorCW1vdglYMSwgLTE2KHJwLG4sOCkKKwltb3YJJXJkeCwgWDEKKwlhZGMJJXJheCwgWDAKKwlhZGMJJDAsIFgxCisJbW92CS04KHVwLG4sOCksICVyYXgKKwltdWwJdjEKKwltb3YJLTgocnAsbiw4KSwgdzEKKwltb3YJJXJkeCwgdzAKKwlhZGQJdzEsIHcyCisJYWRjCSVyYXgsIHczCisJYWRjCSQwLCB3MAorTChsbzEpOgltb3YJKHVwLG4sOCksICVyYXgKKwltdWwJdjAKKwlhZGQJdzIsIFgwCisJbW92CVgwLCAtOChycCxuLDgpCisJbW92CSVyZHgsIFgwCisJYWRjCSVyYXgsIFgxCisJbW92CSh1cCxuLDgpLCAlcmF4CisJYWRjCSQwLCBYMAorCW1vdgkocnAsbiw4KSwgdzIKKwltdWwJdjEKKwlhZGQJdzIsIHczCisJYWRjCSVyYXgsIHcwCisJbW92CTgodXAsbiw4KSwgJXJheAorCW1vdgklcmR4LCB3MQorCWFkYwkkMCwgdzEKK0wobG8wKToJbXVsCXYwCisJYWRkCXczLCBYMQorCW1vdglYMSwgKHJwLG4sOCkKKwlhZGMJJXJheCwgWDAKKwltb3YJOCh1cCxuLDgpLCAlcmF4CisJbW92CSVyZHgsIFgxCisJYWRjCSQwLCBYMQorCW1vdgk4KHJwLG4sOCksIHczCisJbXVsCXYxCisJYWRkCXczLCB3MAorCWFkYwklcmF4LCB3MQorCW1vdgkxNih1cCxuLDgpLCAlcmF4CisJbW92CSVyZHgsIHcyCisJYWRjCSQwLCB3MgorTChsbzMpOgltdWwJdjAKKwlhZGQJdzAsIFgwCisJbW92CVgwLCA4KHJwLG4sOCkKKwltb3YJJXJkeCwgWDAKKwlhZGMJJXJheCwgWDEKKwlhZGMJJDAsIFgwCisJbW92CTE2KHVwLG4sOCksICVyYXgKKwltb3YJMTYocnAsbiw4KSwgdzAKKwltdWwJdjEKKwltb3YJJXJkeCwgdzMKKwlhZGQJdzAsIHcxCisJYWRjCSVyYXgsIHcyCisJYWRjCSQwLCB3MworCW1vdgkyNCh1cCxuLDgpLCAlcmF4CisJYWRkCSQ0LCBuCisJam5jCUwodG9wKQorCitMKGVuZCk6CW11bAl2MAorCWFkZAl3MSwgWDEKKwltb3YJWDEsIEkoLTE2KHJwKSwtMTYocnAsbiw4KSkKKwltb3YJJXJkeCwgWDEKKwlhZGMJJXJheCwgWDAKKwlhZGMJJDAsIFgxCisJbW92CUkoLTgodXApLC04KHVwLG4sOCkpLCAlcmF4CisJbXVsCXYxCisJbW92CUkoLTgocnApLC04KHJwLG4sOCkpLCB3MQorCWFkZAl3MSwgdzIKKwlhZGMJJXJheCwgdzMKKwlhZGMJJDAsICVyZHgKKwlhZGQJdzIsIFgwCisJYWRjCSQwLCBYMQorCW1vdglYMCwgSSgtOChycCksLTgocnAsbiw4KSkKKwlhZGQJdzMsIFgxCisJbW92CVgxLCBJKChycCksKHJwLG4sOCkpCisJYWRjCSQwLCAlcmR4CisJbW92CSVyZHgsIEkoOChycCksOChycCxuLDgpKQorCisKKwlhZGRsCSQtMiwgdm4KKwlsZWEJMTYodnApLCB2cAorCWxlYQkxNihycCksIHJwCisJam56CUwob3V0ZXIpCisKKwlwb3AJJXJheAkJQyBkZWFsbG9jYXRlIHZuIHNsb3QKKwlwb3AJJXIxNQorTChyZXQ1KTpwb3AJJXIxNAorCXBvcAklcjEzCisJcG9wCSVyMTIKK0wocmV0Mik6cG9wCSVyYnAKKwlwb3AJJXJieAorCUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9iZDEvcG9wY291bnQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYmQxL3BvcGNvdW50LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGNlNDYxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYmQxL3BvcGNvdW50LmFzbQpAQCAtMCwwICsxLDE5MSBAQAorZG5sICBBTUQ2NCBTU1NFMy9YT1AgbXBuX3BvcGNvdW50IC0tIHBvcHVsYXRpb24gY291bnQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTAtMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJCSAgICBjeWNsZXMvbGltYgkgIGdvb2QgZm9yIGNwdT8KK0MgQU1EIEs4LEs5CQluL2EKK0MgQU1EIEsxMAkJbi9hCitDIEFNRCBiZDEJCSAxLjI3CQl5CitDIEFNRCBiZDIJCSAxLjI0CQl5CitDIEFNRCBiZDMJCSA/CitDIEFNRCBiZDQJCSAxLjIyCitDIEFNRCB6ZW4JCW4vYQorQyBBTUQgYm9iY2F0CQluL2EKK0MgQU1EIGphZ3VhcgkJbi9hCitDIEludGVsIFA0CQluL2EKK0MgSW50ZWwgQ05SCQluL2EKK0MgSW50ZWwgUE5SCQluL2EKK0MgSW50ZWwgTkhNCQluL2EKK0MgSW50ZWwgU0JSCQluL2EKK0MgSW50ZWwgSUJSCQluL2EKK0MgSW50ZWwgSFdMCQluL2EKK0MgSW50ZWwgQldMCQluL2EKK0MgSW50ZWwgU0tMCQluL2EKK0MgSW50ZWwgYXRvbQkJbi9hCitDIEludGVsIFNMTQkJbi9hCitDIFZJQSBuYW5vCQluL2EKKworQyBUT0RPCitDICAqIFdlIG5lZWQgdG8gdXNlIC5ieXRlIGZvciB2cHNobGIsIHZwcGVybSwgdnBoYWRkdWJxLCBhbmQgYWxsIHBvcGNudCBpZiB3ZQorQyAgICBpbnRlbmQgdG8gc3VwcG9ydCBvbGQgc3lzdGVtcy4KKworQyBXZSB1c2UgdnBzaGxiIGFuZCB2cHBlcm0gYmVsb3csIHdoaWNoIGFyZSBYT1AgZXh0ZW5zaW9ucyB0byBBVlguICBTb21lCitDIHN5c3RlbXMsIGUuZy4sIE5ldEJTRCwgc2V0IE9TWFNBVkUgYnV0IG5ldmVydGhlbGVzcyB0cmlnZ2VyIFNJR0lMTCBmb3IgQVZYLgorQyBXZSBmYWxsIGJhY2sgdG8gdGhlIGNvcmUyIGNvZGUuCitpZmRlZihgR01QX0FWWF9OT1RfUkVBTExZX0FWQUlMQUJMRScsYAorTVVMRlVOQ19QUk9MT0dVRShtcG5fcG9wY291bnQpCitpbmNsdWRlX21wbihgeDg2XzY0L2NvcmUyL3BvcGNvdW50LmFzbScpCisnLGAKKworZGVmaW5lKGB1cCcsCQlgJXJkaScpCitkZWZpbmUoYG4nLAkJYCVyc2knKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigzMikKK1BST0xPR1VFKG1wbl9wb3Bjb3VudCkKKwlGVU5DX0VOVFJZKDMpCisJbGVhCUwoY25zdHMpKCVyaXApLCAlcjkKKworaWZkZWYoYFBJQycsIGBkZWZpbmUoYE9GRjEnLDMyKSBkZWZpbmUoYE9GRjInLDQ4KSBkZWZpbmUoYE9GRjMnLDY0KScsCisJICAgICBgZGVmaW5lKGBPRkYxJyw2NCkgZGVmaW5lKGBPRkYyJyw4MCkgZGVmaW5lKGBPRkYzJyw5NiknKQorCW1vdmRxYQlPRkYxYCcoJXI5KSwgJXhtbTcJQyBuaWJibGUgY291bnRzIHRhYmxlCisJbW92ZHFhCU9GRjJgJyglcjkpLCAleG1tNglDIHNwbGF0IHNoaWZ0IGNvdW50cworCW1vdmRxYQlPRkYzYCcoJXI5KSwgJXhtbTkJQyBtYXNrcworCXB4b3IJJXhtbTQsICV4bW00CisJcHhvcgkleG1tNSwgJXhtbTUJCUMgMC1yZWcKKwlweG9yCSV4bW04LCAleG1tOAkJQyBncmFuZCB0b3RhbCBjb3VudAorCisJeG9yCVIzMiglcmR4KSwgUjMyKCVyZHgpCisKKwltb3YJUjMyKG4pLCBSMzIoJXJheCkKKwlhbmQJJDcsIFIzMiglcmF4KQoraWZkZWYoYFBJQycsYAorCW1vdnNscQkoJXI5LCVyYXgsNCksICVyYXgKKwlhZGQJJXI5LCAlcmF4CisJam1wCSolcmF4CisnLGAKKwlqbXAJKiglcjksJXJheCw4KQorJykKKworTCgxKToJLmJ5dGUJMHhmMywweDQ4LDB4MGYsMHhiOCwweDE3CUMgcG9wY250ICh1cCksJXJkeAorCWFkZAkkOCwgdXAKKwlkZWMJbgorCWpueglMKHRvcCkKKwltb3YJJXJkeCwgJXJheAorCUZVTkNfRVhJVCgpCisJcmV0CisKK0woMik6CWFkZAkkLTQ4LCB1cAorCWptcAlMKGUyKQorCitMKDMpOgkuYnl0ZQkweGYzLDB4NDgsMHgwZiwweGI4LDB4MTcJQyBwb3BjbnQgKHVwKSwgJXJkeAorCWFkZAkkLTQwLCB1cAorCWptcAlMKGUyKQorCitMKDQpOglhZGQJJC0zMiwgdXAKKwlqbXAJTChlNCkKKworTCg1KToJLmJ5dGUJMHhmMywweDQ4LDB4MGYsMHhiOCwweDE3CUMgcG9wY250ICh1cCksICVyZHgKKwlhZGQJJC0yNCwgdXAKKwlqbXAJTChlNCkKKworTCg2KToJYWRkCSQtMTYsIHVwCisJam1wCUwoZTYpCisKK0woNyk6CS5ieXRlCTB4ZjMsMHg0OCwweDBmLDB4YjgsMHgxNwlDIHBvcGNudCAodXApLCAlcmR4CisJYWRkCSQtOCwgdXAKKwlqbXAJTChlNikKKworCUFMSUdOKDMyKQorTCh0b3ApOglsZGRxdQkodXApLCAleG1tMAorCS5ieXRlCTB4OGYsMHhlOSwweDQ4LDB4OTQsMHhjOAlDIHZwc2hsYiAleG1tNiwgJXhtbTAsICV4bW0xCisJcGFuZAkleG1tOSwgJXhtbTAKKwlwYW5kCSV4bW05LCAleG1tMQorCS5ieXRlCTB4OGYsMHhlOCwweDQwLDB4YTMsMHhkNywweDAwCUMgdnBwZXJtICV4bW0wLCV4bW03LCV4bW03LCV4bW0yCisJLmJ5dGUJMHg4ZiwweGU4LDB4NDAsMHhhMywweGRmLDB4MTAJQyB2cHBlcm0gJXhtbTEsICV4bW03LCAleG1tNywgJXhtbTMKKwlwYWRkYgkleG1tMiwgJXhtbTMKKwlwYWRkYgkleG1tMywgJXhtbTQKK0woZTYpOglsZGRxdQkxNih1cCksICV4bW0wCisJLmJ5dGUJMHg4ZiwweGU5LDB4NDgsMHg5NCwweGM4CUMgdnBzaGxiICV4bW02LCAleG1tMCwgJXhtbTEKKwlwYW5kCSV4bW05LCAleG1tMAorCXBhbmQJJXhtbTksICV4bW0xCisJLmJ5dGUJMHg4ZiwweGU4LDB4NDAsMHhhMywweGQ3LDB4MDAJQyB2cHBlcm0gJXhtbTAsJXhtbTcsJXhtbTcsJXhtbTIKKwkuYnl0ZQkweDhmLDB4ZTgsMHg0MCwweGEzLDB4ZGYsMHgxMAlDIHZwcGVybSAleG1tMSwleG1tNywleG1tNywleG1tMworCXBhZGRiCSV4bW0yLCAleG1tMworCXBhZGRiCSV4bW0zLCAleG1tNAorTChlNCk6CWxkZHF1CTMyKHVwKSwgJXhtbTAKKwkuYnl0ZQkweDhmLDB4ZTksMHg0OCwweDk0LDB4YzgJQyB2cHNobGIgJXhtbTYsICV4bW0wLCAleG1tMQorCXBhbmQJJXhtbTksICV4bW0wCisJcGFuZAkleG1tOSwgJXhtbTEKKwkuYnl0ZQkweDhmLDB4ZTgsMHg0MCwweGEzLDB4ZDcsMHgwMAlDIHZwcGVybSAleG1tMCwgJXhtbTcsICV4bW03LCAleG1tMgorCS5ieXRlCTB4OGYsMHhlOSwweDc4LDB4ZDMsMHhlYwlDIHZwaGFkZHVicSAleG1tNCwgJXhtbTUKKwkuYnl0ZQkweDhmLDB4ZTgsMHg0MCwweGEzLDB4ZTcsMHgxMAlDIHZwcGVybSAleG1tMSwleG1tNywleG1tNywleG1tNAorCXBhZGRiCSV4bW0yLCAleG1tNAorTChlMik6CXBvcGNudAk0OCh1cCksICVyOAorCXBvcGNudAk1Nih1cCksICVyOQorCWFkZAkkNjQsIHVwCisJcGFkZHEJJXhtbTUsICV4bW04CQkJQyBzdW0gdG8gMiB4IDY0LWJpdCBjb3VudHMKKwlhZGQJJXI4LCAlcmR4CisJYWRkCSVyOSwgJXJkeAorCXN1YgkkOCwgbgorCWpnCUwodG9wKQorCisJLmJ5dGUJMHg4ZiwweGU5LDB4NzgsMHhkMywweGVjCUMgdnBoYWRkdWJxICV4bW00LCAleG1tNQorCXBhZGRxCSV4bW01LCAleG1tOAorCXBzaHVmZAkkMTQsICV4bW04LCAleG1tMAorCXBhZGRxCSV4bW04LCAleG1tMAorCW1vdnEJJXhtbTAsICVyYXgKKwlhZGQJJXJkeCwgJXJheAorCUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCitERUZfT0JKRUNUKEwoY25zdHMpLDE2LGBKVU1QVEFCU0VDVCcpCisJSk1QRU5UKAlMKHRvcCksIEwoY25zdHMpKQorCUpNUEVOVCgJTCgxKSwgTChjbnN0cykpCisJSk1QRU5UKAlMKDIpLCBMKGNuc3RzKSkKKwlKTVBFTlQoCUwoMyksIEwoY25zdHMpKQorCUpNUEVOVCgJTCg0KSwgTChjbnN0cykpCisJSk1QRU5UKAlMKDUpLCBMKGNuc3RzKSkKKwlKTVBFTlQoCUwoNiksIEwoY25zdHMpKQorCUpNUEVOVCgJTCg3KSwgTChjbnN0cykpCisJLmJ5dGUJMHgwMCwweDAxLDB4MDEsMHgwMiwweDAxLDB4MDIsMHgwMiwweDAzCisJLmJ5dGUJMHgwMSwweDAyLDB4MDIsMHgwMywweDAyLDB4MDMsMHgwMywweDA0CisJLmJ5dGUJLTQsLTQsLTQsLTQsLTQsLTQsLTQsLTQKKwkuYnl0ZQktNCwtNCwtNCwtNCwtNCwtNCwtNCwtNAorCS5ieXRlCTB4MGYsMHgwZiwweDBmLDB4MGYsMHgwZiwweDBmLDB4MGYsMHgwZgorCS5ieXRlCTB4MGYsMHgwZiwweDBmLDB4MGYsMHgwZiwweDBmLDB4MGYsMHgwZgorRU5EX09CSkVDVChMKGNuc3RzKSkKKycpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9iZDEvc2VjX3RhYnNlbGVjdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9iZDEvc2VjX3RhYnNlbGVjdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQzNjAzNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2JkMS9zZWNfdGFic2VsZWN0LmFzbQpAQCAtMCwwICsxLDM3IEBACitkbmwgIFg4Ni02NCBtcG5fc2VjX3RhYnNlbGVjdC4KKworZG5sICBDb3B5cmlnaHQgMjAxMiwgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9zZWNfdGFic2VsZWN0KQoraW5jbHVkZV9tcG4oYHg4Nl82NC9mYXN0c3NlL3NlY190YWJzZWxlY3QuYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2JkMS9zdWJsc2gxX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYmQxL3N1YmxzaDFfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJhNjczZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2JkMS9zdWJsc2gxX24uYXNtCkBAIC0wLDAgKzEsMzcgQEAKK2RubCAgQU1ENjQgbXBuX3N1YmxzaDFfbgorCitkbmwgIENvcHlyaWdodCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX3N1YmxzaDFfbiBtcG5fc3VibHNoMV9uYykKK2luY2x1ZGVfbXBuKGB4ODZfNjQvYXRvbS9zdWJsc2gxX24uYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2JkMi9nY2RfMTEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYmQyL2djZF8xMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE2NzA3NwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2JkMi9nY2RfMTEuYXNtCkBAIC0wLDAgKzEsOTYgQEAKK2RubCAgQU1ENjQgbXBuX2djZF8xMSBvcHRpbWlzZWQgZm9yIEFNRCBCRDIsIEJEMywgQlQyLgorCitkbmwgIEJhc2VkIG9uIHRoZSBLNyBnY2RfMS5hc20sIGJ5IEtldmluIFJ5ZGUuICBSZWhhY2tlZCBmb3IgQU1ENjQgYnkgVG9yYmpvcm4KK2RubCAgR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDAtMjAwMiwgMjAwNSwgMjAwOSwgMjAxMSwgMjAxMiwgMjAxNywgMjAxOSBGcmVlIFNvZnR3YXJlCitkbmwgIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MJICAgICBjeWNsZXMvYml0IChhcHByb3gpCitDIEFNRCBLOCxLOQkgPworQyBBTUQgSzEwCSA/CitDIEFNRCBiZDEJIDUuNAorQyBBTUQgYmQyCSAzLjcyCitDIEFNRCBiZDMJID8KK0MgQU1EIGJkNAkgNC4xMgorQyBBTUQgYnQxCSA5LjAKK0MgQU1EIGJ0MgkgMy45NworQyBBTUQgem4xCSAzLjM2CitDIEFNRCB6bjIJIDMuMzMKK0MgSW50ZWwgUDQJID8KK0MgSW50ZWwgQ05SCSA/CitDIEludGVsIFBOUgkgPworQyBJbnRlbCBOSE0JID8KK0MgSW50ZWwgV1NNCSA/CitDIEludGVsIFNCUgkgPworQyBJbnRlbCBJQlIJID8KK0MgSW50ZWwgSFdMCSA/CitDIEludGVsIEJXTAkgPworQyBJbnRlbCBTS0wJID8KK0MgSW50ZWwgYXRvbQkgPworQyBJbnRlbCBTTE0JID8KK0MgSW50ZWwgR0xNCSA/CitDIEludGVsIEdMTSsJID8KK0MgVklBIG5hbm8JID8KKworZGVmaW5lKGB1MCcsICAgIGAlcmRpJykKK2RlZmluZShgdjAnLCAgICBgJXJzaScpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDY0KQorUFJPTE9HVUUobXBuX2djZF8xMSkKKwlGVU5DX0VOVFJZKDIpCisJbW92CXYwLCAlcmR4CisJc3ViCXUwLCAlcmR4CisJanoJTChlbmQpCisKKwlBTElHTigxNikKK0wodG9wKToJcmVwO2JzZgklcmR4LCAlcmN4CQlDIHR6Y250IQorCW1vdgl1MCwgJXJheAorCXN1Ygl2MCwgdTAJCQlDIHUgLSB2CisJY21vdmMJJXJkeCwgdTAJCUMgdSA9IHx1IC0gdnwKKwljbW92YwklcmF4LCB2MAkJQyB2ID0gbWluKHUsdikKKwlzaHIJUjgoJXJjeCksIHUwCisJbW92CXYwLCAlcmR4CisJc3ViCXUwLCAlcmR4CQlDIHYgLSB1CisJam56CUwodG9wKQorCitMKGVuZCk6CW1vdgl2MCwgJXJheAorCUMgcmF4ID0gcmVzdWx0CisJQyByZHggPSAwIGZvciB0aGUgYmVuZWZpdCBvZiBpbnRlcm5hbCBnY2RfMjIgY2FsbAorCUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9iZDIvZ2NkXzIyLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2JkMi9nY2RfMjIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZjMwZWEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9iZDIvZ2NkXzIyLmFzbQpAQCAtMCwwICsxLDE0MiBAQAorZG5sICBBTUQ2NCBtcG5fZ2NkXzIyLiAgQXNzdW1lcyB1c2VsZXNzIGJzZiwgdXNlbGVzcyBzaHJkLCB0emNudCwgbm8gc2hseC4KKworZG5sICBDb3B5cmlnaHQgMjAxOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MJICAgICBjeWNsZXMvYml0CitDIEFNRCBLOCxLOQkxMi4zCitDIEFNRCBLMTAJIDguMAorQyBBTUQgYmQxCTEwLjAKK0MgQU1EIGJkMgkgNy4yIAorQyBBTUQgYmQzCSA/CitDIEFNRCBiZDQJIDYuNworQyBBTUQgYnQxCTEzLjYKK0MgQU1EIGJ0MgkgOC45CitDIEFNRCB6bjEJIDUuNworQyBBTUQgem4yCSA1LjYKK0MgSW50ZWwgUDQJID8KK0MgSW50ZWwgQ05SCSA5LjcKK0MgSW50ZWwgUE5SCSA5LjcKK0MgSW50ZWwgTkhNCSA5LjQKK0MgSW50ZWwgV1NNCSA5LjUKK0MgSW50ZWwgU0JSCTEwLjMKK0MgSW50ZWwgSUJSCSA/CitDIEludGVsIEhXTAkgOC4yCitDIEludGVsIEJXTAkgNy40CitDIEludGVsIFNLTAkgNy4zCitDIEludGVsIGF0b20JMjYuNQorQyBJbnRlbCBTTE0JMTcuNAorQyBJbnRlbCBHTE0JMTMuNAorQyBJbnRlbCBHTE0rCTEyLjQKK0MgVklBIG5hbm8JID8KKworCitkZWZpbmUoYHUxJywgICAgYCVyZGknKQorZGVmaW5lKGB1MCcsICAgIGAlcnNpJykKK2RlZmluZShgdjEnLCAgICBgJXJkeCcpCitkZWZpbmUoYHYwX3BhcmFtJywgYCVyY3gnKQorCitkZWZpbmUoYHYwJywgICAgYCVyYXgnKQorZGVmaW5lKGBjbnQnLCAgIGAlcmN4JykKKworZGVmaW5lKGBzMCcsICAgIGAlcjgnKQorZGVmaW5lKGBzMScsICAgIGAlcjknKQorZGVmaW5lKGB0MCcsICAgIGAlcjEwJykKK2RlZmluZShgdDEnLCAgICBgJXIxMScpCisKK2RubCBBQklfU1VQUE9SVChET1M2NCkJQyByZXR1cm5zIG1wX2RvdWJsZV9saW1iX3QgaW4gbWVtb3J5CitBQklfU1VQUE9SVChTVEQ2NCkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oNjQpCitQUk9MT0dVRShtcG5fZ2NkXzIyKQorCUZVTkNfRU5UUlkoNCkKKwltb3YJdjBfcGFyYW0sIHYwCisKKwlBTElHTigxNikKK0wodG9wKToJbW92CXYwLCB0MAorCXN1Ygl1MCwgdDAKKwlqeglMKGxvd3opCQlDCWp1bXAgd2hlbiBsb3cgbGltYiByZXN1bHQgPSAwCisJbW92CXYxLCB0MQorCXNiYgl1MSwgdDEKKworCXJlcDtic2YJdDAsIGNudAkJQyB0emNudCEKKwltb3YJdTAsIHMwCisJbW92CXUxLCBzMQorCisJc3ViCXYwLCB1MAorCXNiYgl2MSwgdTEKKworTChiY2spOgljbW92Ywl0MCwgdTAJCUMgdSA9IHx1IC0gdnwKKwljbW92Ywl0MSwgdTEJCUMgdSA9IHx1IC0gdnwKKwljbW92YwlzMCwgdjAJCUMgdiA9IG1pbih1LHYpCisJY21vdmMJczEsIHYxCQlDIHYgPSBtaW4odSx2KQorCitDIFJpZ2h0c2hpZnQgKHUxLCx1MCkgaW50byAodTEsLHUwKQorTChzaHIpOglzaHIJUjgoY250KSwgdTAKKwltb3YJdTEsIHQxCisJc2hyCVI4KGNudCksIHUxCisJbmVnCWNudAorCXNobAlSOChjbnQpLCB0MQorCW9yCXQxLCB1MAorCisJdGVzdAl2MSwgdjEKKwlqbnoJTCh0b3ApCisJdGVzdAl1MSwgdTEKKwlqbnoJTCh0b3ApCisKK0woZ2NkXzExKToKKwltb3YJdjAsICVyZGkKK0MJbW92CXUwLCAlcnNpCisJVENBTEwoCW1wbl9nY2RfMTEpCisKK0wobG93eik6QyBXZSBjb21lIGhlcmUgd2hlbiB2MCAtIHUwID0gMAorCUMgMS4gSWYgdjEgLSB1MSA9IDAsIHRoZW4gZ2NkIGlzIHUgPSB2LgorCUMgMi4gRWxzZSBjb21wdXRlIGdjZF8yMSh7djEsdjB9LCB8dTEtdjF8KQorCW1vdgl2MSwgdDAKKwlzdWIJdTEsIHQwCisJamUJTChlbmQpCisKKwl4b3IJdDEsIHQxCisJcmVwO2JzZgl0MCwgY250CQlDIHR6Y250IQorCW1vdgl1MCwgczAKKwltb3YJdTEsIHMxCisJbW92CXUxLCB1MAorCXhvcgl1MSwgdTEKKwlzdWIJdjEsIHUwCisJam1wCUwoYmNrKQorCitMKGVuZCk6CUMgbW92CXYwLCAlcmF4CisJQyBtb3YJdjEsICVyZHgKKwlGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYmQyL2dtcC1tcGFyYW0uaCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2JkMi9nbXAtbXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE1NzNlYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2JkMi9nbXAtbXBhcmFtLmgKQEAgLTAsMCArMSwyNjMgQEAKKy8qIEFNRCBiZDIgZ21wLW1wYXJhbS5oIC0tIENvbXBpbGVyL21hY2hpbmUgcGFyYW1ldGVyIGhlYWRlciBmaWxlLgorCitDb3B5cmlnaHQgMjAxOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2RlZmluZSBHTVBfTElNQl9CSVRTIDY0CisjZGVmaW5lIEdNUF9MSU1CX0JZVEVTIDgKKworLyogNDAwMC00MjAwIE1IeiBQaWxlZHJpdmVyIFZpc2hlcmEgICovCisvKiBGRlQgdHVuaW5nIGxpbWl0ID0gNDY0LDYyNiw2MzEgKi8KKy8qIEdlbmVyYXRlZCBieSB0dW5ldXAuYywgMjAxOS0xMC0xOCwgZ2NjIDguMyAqLworCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNgorI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgMworI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAyMworI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICAgICAzNAorI2RlZmluZSBQUkVJTlZfTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAxMgorI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgICAgICAgICAgICAgICAgMSAgLyogbmF0aXZlICovCisjZGVmaW5lIERJVl9RUl8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAyCisjZGVmaW5lIERJVl9RUl8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVl9RUl8yX1BJMl9USFJFU0hPTEQgICAgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgICAgICAgMjIKKworI2RlZmluZSBESVZfMV9WU19NVUxfMV9QRVJDRU5UICAgICAgICAgICAgIDI5MworCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDU3CisjZGVmaW5lIE1VTF9UT09NNDRfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTUyCisjZGVmaW5lIE1VTF9UT09NNkhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjMwCisjZGVmaW5lIE1VTF9UT09NOEhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMzA5CisKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNDNfVEhSRVNIT0xEICAgICAgOTcKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxMDcKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxMDUKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNjNfVEhSRVNIT0xEICAgICAxMDMKKyNkZWZpbmUgTVVMX1RPT000M19UT19UT09NNTRfVEhSRVNIT0xEICAgICAxNDIKKworI2RlZmluZSBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgICAgIDczCisjZGVmaW5lIFNRUl9UT09NNF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjAwCisjZGVmaW5lIFNRUl9UT09NNl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjg2CisjZGVmaW5lIFNRUl9UT09NOF9USFJFU0hPTEQgICAgICAgICAgICAgICAgNDMwCisKKyNkZWZpbmUgTVVMTUlEX1RPT000Ml9USFJFU0hPTEQgICAgICAgICAgICAgMjAKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxMQorI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxMworCisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgMzcyICAvKiBrID0gNSAqLworI2RlZmluZSBNVUxfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgMzcyLCA1fSwgeyAgICAgMTcsIDZ9LCB7ICAgICAgOSwgNX0sIHsgICAgIDE5LCA2fSwgXAorICAgIHsgICAgIDEwLCA1fSwgeyAgICAgMjEsIDZ9LCB7ICAgICAxMSwgNX0sIHsgICAgIDIzLCA2fSwgXAorICAgIHsgICAgIDI1LCA3fSwgeyAgICAgMTMsIDZ9LCB7ICAgICAyNywgN30sIHsgICAgIDIxLCA4fSwgXAorICAgIHsgICAgIDExLCA3fSwgeyAgICAgMjUsIDh9LCB7ICAgICAxMywgN30sIHsgICAgIDI3LCA4fSwgXAorICAgIHsgICAgIDE1LCA3fSwgeyAgICAgMzIsIDh9LCB7ICAgICAxNywgN30sIHsgICAgIDM1LCA4fSwgXAorICAgIHsgICAgIDIxLCA5fSwgeyAgICAgMTEsIDh9LCB7ICAgICAyNywgOX0sIHsgICAgIDE1LCA4fSwgXAorICAgIHsgICAgIDM1LCA5fSwgeyAgICAgMTksIDh9LCB7ICAgICA0MSwgOX0sIHsgICAgIDIzLCA4fSwgXAorICAgIHsgICAgIDQ3LCA5fSwgeyAgICAgMjcsMTB9LCB7ICAgICAxNSwgOX0sIHsgICAgIDMxLCA4fSwgXAorICAgIHsgICAgIDYzLCA5fSwgeyAgICAgMzksMTB9LCB7ICAgICAyMywgOX0sIHsgICAgIDU1LDExfSwgXAorICAgIHsgICAgIDE1LDEwfSwgeyAgICAgMzEsIDl9LCB7ICAgICA3MSwxMH0sIHsgICAgIDM5LCA5fSwgXAorICAgIHsgICAgIDgzLDEwfSwgeyAgICAgNDcsIDl9LCB7ICAgICA5NSwxMH0sIHsgICAgIDU1LDExfSwgXAorICAgIHsgICAgIDMxLDEwfSwgeyAgICAgNzksMTF9LCB7ICAgICA0NywxMH0sIHsgICAgIDk1LDEyfSwgXAorICAgIHsgICAgIDMxLDExfSwgeyAgICAgNjMsMTB9LCB7ICAgIDEzNSwxMX0sIHsgICAgIDc5LCA4fSwgXAorICAgIHsgICAgNjM5LCA5fSwgeyAgICAzMzUsMTB9LCB7ICAgIDE3NSwgOX0sIHsgICAgMzUxLDEwfSwgXAorICAgIHsgICAgMTkxLDEyfSwgeyAgICAgNjMsMTF9LCB7ICAgIDEyNywxMH0sIHsgICAgMjU1LDExfSwgXAorICAgIHsgICAgMTQzLDEwfSwgeyAgICAyODcsMTF9LCB7ICAgIDE1OSwxMn0sIHsgICAgIDk1LDExfSwgXAorICAgIHsgICAgMTkxLDEzfSwgeyAgICAgNjMsMTJ9LCB7ICAgIDEyNywxMX0sIHsgICAgMjcxLDEwfSwgXAorICAgIHsgICAgNTQzLDExfSwgeyAgICAyODcsMTJ9LCB7ICAgIDE1OSwxMX0sIHsgICAgMzUxLDEyfSwgXAorICAgIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTB9LCB7ICAgIDc2NywxMX0sIHsgICAgNDE1LDEyfSwgXAorICAgIHsgICAgMjIzLDExfSwgeyAgICA0NDcsMTN9LCB7ICAgIDEyNywxMn0sIHsgICAgMjU1LDExfSwgXAorICAgIHsgICAgNTExLDEwfSwgeyAgIDEwMjMsMTF9LCB7ICAgIDU0MywxMn0sIHsgICAgMjg3LDExfSwgXAorICAgIHsgICAgNTc1LDEyfSwgeyAgICAzMTksMTF9LCB7ICAgIDYzOSwxMH0sIHsgICAxMjc5LDEyfSwgXAorICAgIHsgICAgMzUxLDEzfSwgeyAgICAxOTEsMTJ9LCB7ICAgIDM4MywxMX0sIHsgICAgNzY3LDEyfSwgXAorICAgIHsgICAgNDE1LDExfSwgeyAgICA4MzEsMTB9LCB7ICAgMTY2MywxMn0sIHsgICAgNDQ3LDE0fSwgXAorICAgIHsgICAgMTI3LDEzfSwgeyAgICAyNTUsMTJ9LCB7ICAgIDUxMSwxMX0sIHsgICAxMDIzLDEyfSwgXAorICAgIHsgICAgNTQzLDExfSwgeyAgIDEwODcsMTB9LCB7ICAgMjE3NSwxMn0sIHsgICAgNTc1LDExfSwgXAorICAgIHsgICAxMTUxLDEzfSwgeyAgICAzMTksMTJ9LCB7ICAgIDYzOSwxMX0sIHsgICAxMjc5LDEyfSwgXAorICAgIHsgICAgNjcxLDExfSwgeyAgIDEzNDMsMTB9LCB7ICAgMjY4NywxMn0sIHsgICAgNzAzLDExfSwgXAorICAgIHsgICAxNDA3LDEzfSwgeyAgICAzODMsMTJ9LCB7ICAgIDc2NywxMX0sIHsgICAxNTM1LDEyfSwgXAorICAgIHsgICAgNzk5LDExfSwgeyAgIDE1OTksMTJ9LCB7ICAgIDgzMSwxMX0sIHsgICAxNjYzLDEzfSwgXAorICAgIHsgICAgNDQ3LDEyfSwgeyAgICA4OTUsMTR9LCB7ICAgIDI1NSwxM30sIHsgICAgNTExLDEyfSwgXAorICAgIHsgICAxMDg3LDExfSwgeyAgIDIxNzUsMTN9LCB7ICAgIDU3NSwxMn0sIHsgICAxMjE1LDExfSwgXAorICAgIHsgICAyNDMxLDEwfSwgeyAgIDQ4NjMsMTN9LCB7ICAgIDYzOSwxMn0sIHsgICAxMzQzLDExfSwgXAorICAgIHsgICAyNjg3LDEzfSwgeyAgICA3MDMsMTJ9LCB7ICAgMTQwNywxMX0sIHsgICAyODE1LDE0fSwgXAorICAgIHsgICAgMzgzLDEzfSwgeyAgICA3NjcsMTJ9LCB7ICAgMTU5OSwxM30sIHsgICAgODMxLDEyfSwgXAorICAgIHsgICAxNzI3LDExfSwgeyAgIDM0NTUsMTN9LCB7ICAgIDg5NSwxNX0sIHsgICAgMjU1LDE0fSwgXAorICAgIHsgICAgNTExLDEzfSwgeyAgIDEwODcsMTJ9LCB7ICAgMjE3NSwxM30sIHsgICAxMjE1LDEyfSwgXAorICAgIHsgICAyNDMxLDExfSwgeyAgIDQ4NjMsMTR9LCB7ICAgIDYzOSwxM30sIHsgICAxMzQzLDEyfSwgXAorICAgIHsgICAyNjg3LDEzfSwgeyAgIDE0MDcsMTJ9LCB7ICAgMjgxNSwxM30sIHsgICAxNDcxLDEyfSwgXAorICAgIHsgICAyOTQzLDExfSwgeyAgIDU4ODcsMTR9LCB7ICAgIDc2NywxM30sIHsgICAxNTk5LDEyfSwgXAorICAgIHsgICAzMTk5LDEzfSwgeyAgIDE3MjcsMTJ9LCB7ICAgMzQ1NSwxNH0sIHsgICAgODk1LDEzfSwgXAorICAgIHsgICAxNzkxLDEyfSwgeyAgIDM1ODMsMTN9LCB7ICAgMTkxOSwxMn0sIHsgICAzODM5LDExfSwgXAorICAgIHsgICA3Njc5LDE1fSwgeyAgICA1MTEsMTR9LCB7ICAgMTAyMywxM30sIHsgICAyMTc1LDE0fSwgXAorICAgIHsgICAxMTUxLDEzfSwgeyAgIDIzMDMsMTJ9LCB7ICAgNDYwNywxM30sIHsgICAyNDMxLDEyfSwgXAorICAgIHsgICA0ODYzLDE0fSwgeyAgIDEyNzksMTN9LCB7ICAgMjY4NywxNH0sIHsgICAxNDA3LDEzfSwgXAorICAgIHsgICAyODE1LDEyfSwgeyAgIDU2MzEsMTN9LCB7ICAgMjk0MywxMn0sIHsgICA1ODg3LDE1fSwgXAorICAgIHsgICAgNzY3LDE0fSwgeyAgIDE1MzUsMTN9LCB7ICAgMzE5OSwxNH0sIHsgICAxNjYzLDEzfSwgXAorICAgIHsgICAzNDU1LDEyfSwgeyAgIDY5MTEsMTR9LCB7ICAgMTc5MSwxM30sIHsgICAzNTgzLDE0fSwgXAorICAgIHsgICAxOTE5LDEzfSwgeyAgIDM4MzksMTJ9LCB7ICAgNzY3OSwxNn0sIHsgICAgNTExLDE1fSwgXAorICAgIHsgICAxMDIzLDE0fSwgeyAgIDIxNzUsMTN9LCB7ICAgNDQ3OSwxNH0sIHsgICAyMzAzLDEzfSwgXAorICAgIHsgICA0NjA3LDE0fSwgeyAgIDI0MzEsMTN9LCB7ICAgNDg2MywxNX0sIHsgICAxMjc5LDE0fSwgXAorICAgIHsgICAyODE1LDEzfSwgeyAgIDU2MzEsMTR9LCB7ICAgMjk0MywxM30sIHsgICA1ODg3LDEyfSwgXAorICAgIHsgIDExNzc1LDE1fSwgeyAgIDE1MzUsMTR9LCB7ICAgMzQ1NSwxM30sIHsgICA2OTExLDE1fSwgXAorICAgIHsgICAxNzkxLDE0fSwgeyAgIDM4MzksMTN9LCB7ICAgNzY3OSwxNn0sIHsgICAxMDIzLDE1fSwgXAorICAgIHsgICAyMDQ3LDE0fSwgeyAgIDQ0NzksMTN9LCB7ICAgODk1OSwxNX0sIHsgICAyMzAzLDE0fSwgXAorICAgIHsgICA0ODYzLDE1fSwgeyAgIDI4MTUsMTR9LCB7ICAgNTg4NywxM30sIHsgIDExNzc1LDE2fSwgXAorICAgIHsgICAxNTM1LDE1fSwgeyAgIDMzMjcsMTR9LCB7ICAgNjkxMSwxNX0sIHsgICAzODM5LDE0fSwgXAorICAgIHsgICA3Njc5LDEzfSwgeyAgMTUzNTksMTd9LCB7ICAgMTAyMywxNn0sIHsgICAyMDQ3LDE1fSwgXAorICAgIHsgICA0MzUxLDE0fSwgeyAgIDg5NTksMTV9LCB7ICAgNDg2MywxNn0sIHsgICAyNTU5LDE1fSwgXAorICAgIHsgICA1ODg3LDE0fSwgeyAgMTE3NzUsMTZ9LCB7ICAgMzA3MSwxNX0sIHsgICA2OTExLDE2fSwgXAorICAgIHsgICAzNTgzLDE1fSwgeyAgIDc2NzksMTR9LCB7ICAxNTM1OSwxNX0sIHsgICA3OTM1LDE0fSwgXAorICAgIHsgIDE1ODcxLDE3fSwgeyAgIDIwNDcsMTZ9LCB7ICAgNDA5NSwxNX0sIHsgICA4OTU5LDE2fSwgXAorICAgIHsgICA0NjA3LDE1fSwgeyAgIDk5ODMsMTR9LCB7ICAxOTk2NywxNn0sIHsgICA1NjMxLDE1fSwgXAorICAgIHsgIDExNzc1LDE3fSwgeyAgIDMwNzEsMTZ9LCB7ICA2NTUzNiwxN30sIHsgMTMxMDcyLDE4fSwgXAorICAgIHsgMjYyMTQ0LDE5fSwgeyA1MjQyODgsMjB9LCB7MTA0ODU3NiwyMX0sIHsyMDk3MTUyLDIyfSwgXAorICAgIHs0MTk0MzA0LDIzfSwgezgzODg2MDgsMjR9IH0KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTNfU0laRSAyNjIKKyNkZWZpbmUgTVVMX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDQ1NDQKKworI2RlZmluZSBTUVJfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDM0NCAgLyogayA9IDUgKi8KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDM0NCwgNX0sIHsgICAgIDE5LCA2fSwgeyAgICAgMTAsIDV9LCB7ICAgICAyMSwgNn0sIFwKKyAgICB7ICAgICAxMSwgNX0sIHsgICAgIDIzLCA2fSwgeyAgICAgMjUsIDd9LCB7ICAgICAxMywgNn0sIFwKKyAgICB7ICAgICAyNywgN30sIHsgICAgIDI1LCA4fSwgeyAgICAgMTMsIDd9LCB7ICAgICAyOCwgOH0sIFwKKyAgICB7ICAgICAxNSwgN30sIHsgICAgIDMxLCA4fSwgeyAgICAgMTcsIDd9LCB7ICAgICAzNSwgOH0sIFwKKyAgICB7ICAgICAxOSwgN30sIHsgICAgIDM5LCA4fSwgeyAgICAgMjEsIDl9LCB7ICAgICAxMSwgOH0sIFwKKyAgICB7ICAgICAyNywgOX0sIHsgICAgIDE1LCA4fSwgeyAgICAgMzUsIDl9LCB7ICAgICAxOSwgOH0sIFwKKyAgICB7ICAgICAzOSwgOX0sIHsgICAgIDIzLCA4fSwgeyAgICAgNDcsIDl9LCB7ICAgICAyNywxMH0sIFwKKyAgICB7ICAgICAxNSwgOX0sIHsgICAgIDM5LDEwfSwgeyAgICAgMjMsIDl9LCB7ICAgICA1MSwxMX0sIFwKKyAgICB7ICAgICAxNSwxMH0sIHsgICAgIDMxLCA5fSwgeyAgICAgNjcsMTB9LCB7ICAgICAzOSwgOX0sIFwKKyAgICB7ICAgICA3OSwxMH0sIHsgICAgIDQ3LDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA3OSwxMX0sIFwKKyAgICB7ICAgICA0NywxMH0sIHsgICAgIDk1LDEyfSwgeyAgICAgMzEsMTF9LCB7ICAgICA2MywxMH0sIFwKKyAgICB7ICAgIDEyNywgOX0sIHsgICAgMjU1LDEwfSwgeyAgICAxMzUsMTF9LCB7ICAgICA3OSwxMH0sIFwKKyAgICB7ICAgIDE1OSwxMX0sIHsgICAgIDk1LDEwfSwgeyAgICAxOTEsMTJ9LCB7ICAgICA2MywgOX0sIFwKKyAgICB7ICAgIDUxMSwxMH0sIHsgICAgMjcxLDExfSwgeyAgICAxNDMsMTB9LCB7ICAgIDMwMywxMX0sIFwKKyAgICB7ICAgIDE1OSwxMn0sIHsgICAgIDk1LDExfSwgeyAgICAxOTEsMTN9LCB7ICAgICA2MywxMn0sIFwKKyAgICB7ICAgIDEyNywxMX0sIHsgICAgMjg3LDEwfSwgeyAgICA1NzUsMTF9LCB7ICAgIDMwMywxMn0sIFwKKyAgICB7ICAgIDE1OSwxMX0sIHsgICAgMzUxLDEyfSwgeyAgICAxOTEsMTF9LCB7ICAgIDM4MywxMn0sIFwKKyAgICB7ICAgIDIyMywxMX0sIHsgICAgNDQ3LDEzfSwgeyAgICAxMjcsMTJ9LCB7ICAgIDI1NSwxMX0sIFwKKyAgICB7ICAgIDUxMSwxMH0sIHsgICAxMDIzLDEyfSwgeyAgICAyODcsMTF9LCB7ICAgIDU3NSwxMH0sIFwKKyAgICB7ICAgMTE1MSwxMX0sIHsgICAgNjA3LDEyfSwgeyAgICAzMTksMTF9LCB7ICAgIDYzOSwxMH0sIFwKKyAgICB7ICAgMTI3OSwxMn0sIHsgICAgMzUxLDEzfSwgeyAgICAxOTEsMTJ9LCB7ICAgIDM4MywxMX0sIFwKKyAgICB7ICAgIDc2NywxMn0sIHsgICAgNDE1LDExfSwgeyAgICA4MzEsMTB9LCB7ICAgMTY2MywxMn0sIFwKKyAgICB7ICAgIDQ0NywxNH0sIHsgICAgMTI3LDEzfSwgeyAgICAyNTUsMTJ9LCB7ICAgIDUxMSwxMX0sIFwKKyAgICB7ICAgMTAyMywxMn0sIHsgICAgNTQzLDExfSwgeyAgIDEwODcsMTB9LCB7ICAgMjE3NSwxMn0sIFwKKyAgICB7ICAgIDU3NSwxMX0sIHsgICAxMTUxLDEyfSwgeyAgICA2MDcsMTN9LCB7ICAgIDMxOSwxMn0sIFwKKyAgICB7ICAgIDYzOSwxMX0sIHsgICAxMjc5LDEyfSwgeyAgICA2NzEsMTF9LCB7ICAgMTM0MywxMH0sIFwKKyAgICB7ICAgMjY4NywxMn0sIHsgICAgNzAzLDExfSwgeyAgIDE0MDcsMTN9LCB7ICAgIDM4MywxMn0sIFwKKyAgICB7ICAgIDc2NywxMX0sIHsgICAxNTM1LDEyfSwgeyAgICA3OTksMTF9LCB7ICAgMTU5OSwxMn0sIFwKKyAgICB7ICAgIDgzMSwxMX0sIHsgICAxNjYzLDEzfSwgeyAgICA0NDcsMTJ9LCB7ICAgIDg5NSwxNH0sIFwKKyAgICB7ICAgIDI1NSwxM30sIHsgICAgNTExLDEyfSwgeyAgIDEwODcsMTF9LCB7ICAgMjE3NSwxM30sIFwKKyAgICB7ICAgIDU3NSwxMn0sIHsgICAxMjE1LDExfSwgeyAgIDI0MzEsMTB9LCB7ICAgNDg2MywxM30sIFwKKyAgICB7ICAgIDYzOSwxMn0sIHsgICAxMzQzLDExfSwgeyAgIDI2ODcsMTN9LCB7ICAgIDcwMywxMn0sIFwKKyAgICB7ICAgMTQwNywxNH0sIHsgICAgMzgzLDEzfSwgeyAgICA3NjcsMTJ9LCB7ICAgMTU5OSwxM30sIFwKKyAgICB7ICAgIDgzMSwxMn0sIHsgICAxNzI3LDEzfSwgeyAgICA4OTUsMTV9LCB7ICAgIDI1NSwxNH0sIFwKKyAgICB7ICAgIDUxMSwxM30sIHsgICAxMDg3LDEyfSwgeyAgIDIxNzUsMTN9LCB7ICAgMTE1MSwxMn0sIFwKKyAgICB7ICAgMjMwMywxM30sIHsgICAxMjE1LDEyfSwgeyAgIDI0MzEsMTF9LCB7ICAgNDg2MywxNH0sIFwKKyAgICB7ICAgIDYzOSwxM30sIHsgICAxMzQzLDEyfSwgeyAgIDI2ODcsMTN9LCB7ICAgMTQwNywxMn0sIFwKKyAgICB7ICAgMjgxNSwxM30sIHsgICAxNDcxLDEyfSwgeyAgIDI5NDMsMTF9LCB7ICAgNTg4NywxNH0sIFwKKyAgICB7ICAgIDc2NywxM30sIHsgICAxNTk5LDEyfSwgeyAgIDMxOTksMTN9LCB7ICAgMTcyNywxMn0sIFwKKyAgICB7ICAgMzQ1NSwxNH0sIHsgICAgODk1LDEzfSwgeyAgIDE3OTEsMTJ9LCB7ICAgMzU4MywxM30sIFwKKyAgICB7ICAgMTkxOSwxMn0sIHsgICAzODM5LDE1fSwgeyAgICA1MTEsMTR9LCB7ICAgMTAyMywxM30sIFwKKyAgICB7ICAgMjE3NSwxNH0sIHsgICAxMTUxLDEzfSwgeyAgIDIzMDMsMTJ9LCB7ICAgNDYwNywxM30sIFwKKyAgICB7ICAgMjQzMSwxMn0sIHsgICA0ODYzLDE0fSwgeyAgIDEyNzksMTN9LCB7ICAgMjY4NywxNH0sIFwKKyAgICB7ICAgMTQwNywxM30sIHsgICAyOTQzLDEyfSwgeyAgIDU4ODcsMTF9LCB7ICAxMTc3NSwxNX0sIFwKKyAgICB7ICAgIDc2NywxNH0sIHsgICAxNTM1LDEzfSwgeyAgIDMxOTksMTR9LCB7ICAgMTY2MywxM30sIFwKKyAgICB7ICAgMzQ1NSwxMn0sIHsgICA2OTExLDE0fSwgeyAgIDE3OTEsMTN9LCB7ICAgMzU4MywxNH0sIFwKKyAgICB7ICAgMTkxOSwxM30sIHsgICAzODM5LDE2fSwgeyAgICA1MTEsMTV9LCB7ICAgMTAyMywxNH0sIFwKKyAgICB7ICAgMjE3NSwxM30sIHsgICA0NDc5LDE0fSwgeyAgIDIzMDMsMTN9LCB7ICAgNDYwNywxNH0sIFwKKyAgICB7ICAgMjQzMSwxM30sIHsgICA0ODYzLDE1fSwgeyAgIDEyNzksMTR9LCB7ICAgMjgxNSwxM30sIFwKKyAgICB7ICAgNTYzMSwxNH0sIHsgICAyOTQzLDEzfSwgeyAgIDU4ODcsMTJ9LCB7ICAxMTc3NSwxNX0sIFwKKyAgICB7ICAgMTUzNSwxNH0sIHsgICAzNDU1LDEzfSwgeyAgIDY5MTEsMTV9LCB7ICAgMTc5MSwxNH0sIFwKKyAgICB7ICAgMzgzOSwxM30sIHsgICA3Njc5LDE2fSwgeyAgIDEwMjMsMTV9LCB7ICAgMjA0NywxNH0sIFwKKyAgICB7ICAgNDQ3OSwxM30sIHsgICA4OTU5LDE1fSwgeyAgIDIzMDMsMTR9LCB7ICAgNDg2MywxNX0sIFwKKyAgICB7ICAgMjgxNSwxNH0sIHsgICA1ODg3LDEzfSwgeyAgMTE3NzUsMTZ9LCB7ICAgMTUzNSwxNX0sIFwKKyAgICB7ICAgMzMyNywxNH0sIHsgICA2OTExLDE1fSwgeyAgIDM4MzksMTR9LCB7ICAgNzY3OSwxN30sIFwKKyAgICB7ICAgMTAyMywxNn0sIHsgICAyMDQ3LDE1fSwgeyAgIDQzNTEsMTR9LCB7ICAgODk1OSwxNX0sIFwKKyAgICB7ICAgNDg2MywxNn0sIHsgICAyNTU5LDE1fSwgeyAgIDU4ODcsMTR9LCB7ICAxMTc3NSwxNn0sIFwKKyAgICB7ICAgMzA3MSwxNX0sIHsgICA2OTExLDE2fSwgeyAgIDM1ODMsMTV9LCB7ICAgNzY3OSwxNH0sIFwKKyAgICB7ICAxNTM1OSwxNX0sIHsgICA3OTM1LDE0fSwgeyAgMTU4NzEsMTd9LCB7ICAgMjA0NywxNn0sIFwKKyAgICB7ICAgNDA5NSwxNX0sIHsgICA4OTU5LDE2fSwgeyAgIDQ2MDcsMTV9LCB7ICAgOTk4MywxNH0sIFwKKyAgICB7ICAxOTk2NywxNn0sIHsgICA1MTE5LDE1fSwgeyAgMTAyMzksMTZ9LCB7ICAgNTYzMSwxNX0sIFwKKyAgICB7ICAxMTc3NSwxN30sIHsgICAzMDcxLDE2fSwgeyAgNjU1MzYsMTd9LCB7IDEzMTA3MiwxOH0sIFwKKyAgICB7IDI2MjE0NCwxOX0sIHsgNTI0Mjg4LDIwfSwgezEwNDg1NzYsMjF9LCB7MjA5NzE1MiwyMn0sIFwKKyAgICB7NDE5NDMwNCwyM30sIHs4Mzg4NjA4LDI0fSB9CisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzX1NJWkUgMjU0CisjZGVmaW5lIFNRUl9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAyODgwCisKKyNkZWZpbmUgTVVMTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNVUxMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBNVUxMT19NVUxfTl9USFJFU0hPTEQgICAgICAgICAgICAgODkwNworI2RlZmluZSBTUVJMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgOAorI2RlZmluZSBTUVJMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICA1MworI2RlZmluZSBTUVJMT19TUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgNTcyNAorCisjZGVmaW5lIERDX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDUyCisjZGVmaW5lIERDX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAgMTU5CisjZGVmaW5lIERDX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDQ0CisjZGVmaW5lIERDX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDc5CisKKyNkZWZpbmUgSU5WX01VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgMzAKKyNkZWZpbmUgSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgICAxNzIKKyNkZWZpbmUgSU5WX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAxNzIKKworI2RlZmluZSBCSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgIDIyNgorI2RlZmluZSBSRURDXzFfVE9fUkVEQ18yX1RIUkVTSE9MRCAgICAgICAgICA0MAorI2RlZmluZSBSRURDXzJfVE9fUkVEQ19OX1RIUkVTSE9MRCAgICAgICAgICA1MQorCisjZGVmaW5lIE1VX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAxMzA4CisjZGVmaW5lIE1VX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAxMjU4CisjZGVmaW5lIE1VUElfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDg1CisjZGVmaW5lIE1VX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAxMTQyCisjZGVmaW5lIE1VX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAxMjEwCisKKyNkZWZpbmUgUE9XTV9TRUNfVEFCTEUgIDMsMTYsMTI5LDUyMywxMjk3CisKKyNkZWZpbmUgR0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICAgMjAKKyNkZWZpbmUgU0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAyMjgKKyNkZWZpbmUgU0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgIDEwMzMKKworI2RlZmluZSBGQUNfRFNDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDE3MgorI2RlZmluZSBGQUNfT0REX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAyOAorCisjZGVmaW5lIE1BVFJJWDIyX1NUUkFTU0VOX1RIUkVTSE9MRCAgICAgICAgIDE5CisjZGVmaW5lIEhHQ0QyX0RJVjFfTUVUSE9EICAgICAgICAgICAgICAgICAgICAxICAvKiA4LjU0JSBmYXN0ZXIgdGhhbiAzICovCisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAgMTA4CisjZGVmaW5lIEhHQ0RfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDUwCisjZGVmaW5lIEhHQ0RfUkVEVUNFX1RIUkVTSE9MRCAgICAgICAgICAgICAyNjgxCisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgMzkzCisjZGVmaW5lIEdDREVYVF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMjc4CisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAgICA0ICAvKiAxMy42OSUgZmFzdGVyIHRoYW4gMSAqLworCisvKiBUdW5ldXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgdG9vayA0NjM5MzEgc2Vjb25kcyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYmQ0L2FvcnJsc2hfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9iZDQvYW9ycmxzaF9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjBkMjdiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYmQ0L2FvcnJsc2hfbi5hc20KQEAgLTAsMCArMSwzOCBAQAorZG5sICBYODYtNjQgbXBuX2FkZGxzaF9uIGFuZCBtcG5fcnNibHNoX24uCisKK2RubCAgQ29weXJpZ2h0IDIwMTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRsc2hfbiBtcG5fcnNibHNoX24pCitpbmNsdWRlX21wbihgeDg2XzY0L3plbi9hb3JybHNoX24uYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2JkNC9nY2RfMTEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYmQ0L2djZF8xMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE3NmI4NQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2JkNC9nY2RfMTEuYXNtCkBAIC0wLDAgKzEsOTYgQEAKK2RubCAgQU1ENjQgbXBuX2djZF8xMSBvcHRpbWlzZWQgZm9yIEFNRCBCRDQsIFpOMS4KKworZG5sICBCYXNlZCBvbiB0aGUgSzcgZ2NkXzEuYXNtLCBieSBLZXZpbiBSeWRlLiAgUmVoYWNrZWQgZm9yIEFNRDY0IGJ5IFRvcmJqb3JuCitkbmwgIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDAwLTIwMDIsIDIwMDUsIDIwMDksIDIwMTEsIDIwMTIsIDIwMTcsIDIwMTkgRnJlZSBTb2Z0d2FyZQorZG5sICBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDCSAgICAgY3ljbGVzL2JpdCAoYXBwcm94KQorQyBBTUQgSzgsSzkJIC0KK0MgQU1EIEsxMAkgLQorQyBBTUQgYmQxCSAtCitDIEFNRCBiZDIJIC0KK0MgQU1EIGJkMwkgLQorQyBBTUQgYmQ0CSAzLjczCitDIEFNRCBidDEJIC0KK0MgQU1EIGJ0MgkgLQorQyBBTUQgem4xCSAzLjMzCitDIEFNRCB6bjIJIDMuNDgKK0MgSW50ZWwgUDQJIC0KK0MgSW50ZWwgQ05SCSAtCitDIEludGVsIFBOUgkgLQorQyBJbnRlbCBOSE0JIC0KK0MgSW50ZWwgV1NNCSAtCitDIEludGVsIFNCUgkgLQorQyBJbnRlbCBJQlIJIC0KK0MgSW50ZWwgSFdMCSA/CitDIEludGVsIEJXTAkgPworQyBJbnRlbCBTS0wJID8KK0MgSW50ZWwgYXRvbQkgLQorQyBJbnRlbCBTTE0JIC0KK0MgSW50ZWwgR0xNCSAtCitDIEludGVsIEdMTSsJIC0KK0MgVklBIG5hbm8JIC0KKworZGVmaW5lKGB1MCcsICAgIGAlcmRpJykKK2RlZmluZShgdjAnLCAgICBgJXJzaScpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDY0KQorUFJPTE9HVUUobXBuX2djZF8xMSkKKwlGVU5DX0VOVFJZKDIpCisJbW92CXUwLCAlcmF4CisJbW92CXYwLCAlcmR4CisJc3ViCXUwLCAlcmR4CQlDIHYgLSB1CisJanoJTChlbmQpCisKKwlBTElHTigxNikKK0wodG9wKToJcmVwO2JzZgklcmR4LCAlcmN4CQlDIHR6Y250IQorCXN1Ygl2MCwgdTAJCQlDIHUgLSB2CisJY21vdmMJJXJkeCwgdTAJCUMgdSA9IHx1IC0gdnwKKwljbW92YwklcmF4LCB2MAkJQyB2ID0gbWluKHUsdikKKwlzaHJ4KAklcmN4LCB1MCwgJXJheCkKKwlzaHJ4KAklcmN4LCB1MCwgdTApCisJbW92CXYwLCAlcmR4CisJc3ViCSVyYXgsICVyZHgJCUMgdiAtIHUKKwlqbnoJTCh0b3ApCisKK0woZW5kKToJQyByYXggPSByZXN1bHQKKwlDIHJkeCA9IDAgZm9yIHRoZSBiZW5lZml0IG9mIGludGVybmFsIGdjZF8yMiBjYWxsCisJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2JkNC9nY2RfMjIuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYmQ0L2djZF8yMi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRmZDllMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2JkNC9nY2RfMjIuYXNtCkBAIC0wLDAgKzEsMzcgQEAKK2RubCAgQU1ENjQgbXBuX2djZF8yMi4KKworZG5sICBDb3B5cmlnaHQgMjAxOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitkbmwgQUJJX1NVUFBPUlQoRE9TNjQpCUMgcmV0dXJucyBtcF9kb3VibGVfbGltYl90IGluIG1lbW9yeQorQUJJX1NVUFBPUlQoU1RENjQpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2djZF8yMikKK2luY2x1ZGVfbXBuKGB4ODZfNjQvY29yZWlod2wvZ2NkXzIyLmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9iZDQvZ21wLW1wYXJhbS5oIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYmQ0L2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDIwMzhjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYmQ0L2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDI2NiBAQAorLyogQU1EIGJkNCBnbXAtbXBhcmFtLmggLS0gQ29tcGlsZXIvbWFjaGluZSBwYXJhbWV0ZXIgaGVhZGVyIGZpbGUuCisKK0NvcHlyaWdodCAyMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgNjQKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgOAorCisvKiAzODAwLTQyMDAgTUh6IEV4Y2F2YXRvci9CcmlzdG9sIFJpZGdlICAqLworLyogRkZUIHR1bmluZyBsaW1pdCA9IDQ2MSwxNzksMzM1ICovCisvKiBHZW5lcmF0ZWQgYnkgdHVuZXVwLmMsIDIwMTktMTAtMTgsIGdjYyA4LjMgKi8KKworI2RlZmluZSBNT0RfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PRF8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFOX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgIDYKKyNkZWZpbmUgTU9EXzFVX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgIDUKKyNkZWZpbmUgTU9EXzFfMV9UT19NT0RfMV8yX1RIUkVTSE9MRCAgICAgICAgMTcKKyNkZWZpbmUgTU9EXzFfMl9UT19NT0RfMV80X1RIUkVTSE9MRCAgICAgICAgNTIKKyNkZWZpbmUgUFJFSU5WX01PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgMTMKKyNkZWZpbmUgVVNFX1BSRUlOVl9ESVZSRU1fMSAgICAgICAgICAgICAgICAgIDEgIC8qIG5hdGl2ZSAqLworI2RlZmluZSBESVZfUVJfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgMQorI2RlZmluZSBESVZfUVJfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICBNUF9TSVpFX1RfTUFYICAvKiBuZXZlciAqLworI2RlZmluZSBESVZfUVJfMl9QSTJfVEhSRVNIT0xEICAgICAgICAgICBNUF9TSVpFX1RfTUFYICAvKiBuZXZlciAqLworI2RlZmluZSBESVZFWEFDVF8xX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIEJNT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgICAgICAgIDI1CisKKyNkZWZpbmUgRElWXzFfVlNfTVVMXzFfUEVSQ0VOVCAgICAgICAgICAgICAyOTgKKworI2RlZmluZSBNVUxfVE9PTTIyX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBNVUxfVE9PTTMzX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA1MworI2RlZmluZSBNVUxfVE9PTTQ0X1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE0MgorI2RlZmluZSBNVUxfVE9PTTZIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDIwNgorI2RlZmluZSBNVUxfVE9PTThIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDI5MgorCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTQzX1RIUkVTSE9MRCAgICAgIDgzCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgMTAyCisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgIDk3CisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTYzX1RIUkVTSE9MRCAgICAgIDk4CisjZGVmaW5lIE1VTF9UT09NNDNfVE9fVE9PTTU0X1RIUkVTSE9MRCAgICAgIDgyCisKKyNkZWZpbmUgU1FSX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAobmF0aXZlKSAqLworI2RlZmluZSBTUVJfVE9PTTJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBTUVJfVE9PTTNfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA3MQorI2RlZmluZSBTUVJfVE9PTTRfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDIwMgorI2RlZmluZSBTUVJfVE9PTTZfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDI5OAorI2RlZmluZSBTUVJfVE9PTThfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDQ2NgorCisjZGVmaW5lIE1VTE1JRF9UT09NNDJfVEhSRVNIT0xEICAgICAgICAgICAgIDIwCisKKyNkZWZpbmUgTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgU1FSTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTQKKworI2RlZmluZSBNVUxfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDMxNiAgLyogayA9IDUgKi8KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDMxNiwgNX0sIHsgICAgIDE5LCA2fSwgeyAgICAgMTAsIDV9LCB7ICAgICAyMSwgNn0sIFwKKyAgICB7ICAgICAyMSwgN30sIHsgICAgIDExLCA2fSwgeyAgICAgMjMsIDd9LCB7ICAgICAxMiwgNn0sIFwKKyAgICB7ICAgICAyNSwgN30sIHsgICAgIDIxLCA4fSwgeyAgICAgMTEsIDd9LCB7ICAgICAyNCwgOH0sIFwKKyAgICB7ICAgICAxMywgN30sIHsgICAgIDI4LCA4fSwgeyAgICAgMTUsIDd9LCB7ICAgICAzMSwgOH0sIFwKKyAgICB7ICAgICAyMSwgOX0sIHsgICAgIDExLCA4fSwgeyAgICAgMjcsIDl9LCB7ICAgICAxNSwgOH0sIFwKKyAgICB7ICAgICAzMywgOX0sIHsgICAgIDE5LCA4fSwgeyAgICAgNDEsIDl9LCB7ICAgICAyMywgOH0sIFwKKyAgICB7ICAgICA0NywgOX0sIHsgICAgIDI3LDEwfSwgeyAgICAgMTUsIDl9LCB7ICAgICAzOSwxMH0sIFwKKyAgICB7ICAgICAyMywgOX0sIHsgICAgIDUxLDExfSwgeyAgICAgMTUsMTB9LCB7ICAgICAzMSwgOX0sIFwKKyAgICB7ICAgICA2NywxMH0sIHsgICAgIDM5LCA5fSwgeyAgICAgODMsMTB9LCB7ICAgICA0NywgOX0sIFwKKyAgICB7ICAgICA5OSwxMH0sIHsgICAgIDU1LDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA4NywxMX0sIFwKKyAgICB7ICAgICA0NywxMH0sIHsgICAgIDk1LCA5fSwgeyAgICAxOTEsMTB9LCB7ICAgIDEwMywxMn0sIFwKKyAgICB7ICAgICAzMSwxMX0sIHsgICAgIDYzLDEwfSwgeyAgICAxMjcsIDl9LCB7ICAgIDI1NSwxMH0sIFwKKyAgICB7ICAgIDEzNSwgOX0sIHsgICAgMjcxLCA1fSwgeyAgIDQzNTEsIDZ9LCB7ICAgMjMwMywgN30sIFwKKyAgICB7ICAgMTIxNSwgOH0sIHsgICAgNjM5LDEwfSwgeyAgICAxNzUsMTF9LCB7ICAgICA5NSwxMH0sIFwKKyAgICB7ICAgIDE5MSwgOX0sIHsgICAgMzgzLDEwfSwgeyAgICAyMDcsIDl9LCB7ICAgIDQxNSwxMX0sIFwKKyAgICB7ICAgIDExMSwxMn0sIHsgICAgIDYzLDExfSwgeyAgICAxMjcsMTB9LCB7ICAgIDI1NSwgOX0sIFwKKyAgICB7ICAgIDUxMSwxMH0sIHsgICAgMjcxLCA5fSwgeyAgICA1NDMsMTF9LCB7ICAgIDE0MywxMH0sIFwKKyAgICB7ICAgIDI4NywgOX0sIHsgICAgNTc1LDEwfSwgeyAgICAzMDMsMTF9LCB7ICAgIDE1OSwxMH0sIFwKKyAgICB7ICAgIDMxOSwgOX0sIHsgICAgNjM5LDExfSwgeyAgICAxNzUsMTJ9LCB7ICAgICA5NSwxMX0sIFwKKyAgICB7ICAgIDE5MSwxMH0sIHsgICAgMzgzLDExfSwgeyAgICAyMDcsMTB9LCB7ICAgIDQxNSwgOX0sIFwKKyAgICB7ICAgIDgzMSwxM30sIHsgICAgIDYzLDEyfSwgeyAgICAxMjcsMTF9LCB7ICAgIDI1NSwxMH0sIFwKKyAgICB7ICAgIDUxMSwxMX0sIHsgICAgMjcxLDEwfSwgeyAgICA1NDMsMTF9LCB7ICAgIDI4NywxMH0sIFwKKyAgICB7ICAgIDU3NSwxMX0sIHsgICAgMzAzLDEyfSwgeyAgICAxNTksMTF9LCB7ICAgIDMxOSwxMH0sIFwKKyAgICB7ICAgIDYzOSwxMX0sIHsgICAgMzUxLDEyfSwgeyAgICAxOTEsMTF9LCB7ICAgIDM4MywxMH0sIFwKKyAgICB7ICAgIDc2NywxMX0sIHsgICAgNDE1LDEwfSwgeyAgICA4MzEsMTJ9LCB7ICAgIDIyMywxMX0sIFwKKyAgICB7ICAgIDQ0NywxMH0sIHsgICAgODk1LDExfSwgeyAgICA0NzksMTN9LCB7ICAgIDEyNywxMn0sIFwKKyAgICB7ICAgIDI1NSwxMX0sIHsgICAgNTQzLDEyfSwgeyAgICAyODcsMTF9LCB7ICAgIDYwNywxMn0sIFwKKyAgICB7ICAgIDMxOSwxMX0sIHsgICAgNjM5LDEyfSwgeyAgICAzNTEsMTN9LCB7ICAgIDE5MSwxMn0sIFwKKyAgICB7ICAgIDM4MywxMX0sIHsgICAgNzY3LDEyfSwgeyAgICA0MTUsMTF9LCB7ICAgIDgzMSwxMn0sIFwKKyAgICB7ICAgIDQ0NywxMX0sIHsgICAgODk1LDEyfSwgeyAgICA0NzksMTR9LCB7ICAgIDEyNywxM30sIFwKKyAgICB7ICAgIDI1NSwxMn0sIHsgICAgNTQzLDExfSwgeyAgIDEwODcsMTJ9LCB7ICAgIDYwNywxM30sIFwKKyAgICB7ICAgIDMxOSwxMn0sIHsgICAgNjcxLDExfSwgeyAgIDEzNDMsMTB9LCB7ICAgMjY4NywxMn0sIFwKKyAgICB7ICAgIDcwMywxM30sIHsgICAgMzgzLDEyfSwgeyAgICA3NjcsMTF9LCB7ICAgMTUzNSwxMn0sIFwKKyAgICB7ICAgIDgzMSwxM30sIHsgICAgNDQ3LDEyfSwgeyAgICA4OTUsMTF9LCB7ICAgMTc5MSwxMn0sIFwKKyAgICB7ICAgIDk1OSwxNH0sIHsgICAgMjU1LDEzfSwgeyAgICA1MTEsMTJ9LCB7ICAgMTA4NywxM30sIFwKKyAgICB7ICAgIDU3NSwxMn0sIHsgICAxMTUxLDExfSwgeyAgIDIzMDMsMTJ9LCB7ICAgMTIxNSwxMX0sIFwKKyAgICB7ICAgMjQzMSwxM30sIHsgICAgNjM5LDEyfSwgeyAgIDEzNDMsMTF9LCB7ICAgMjY4NywxM30sIFwKKyAgICB7ICAgIDcwMywxNH0sIHsgICAgMzgzLDEzfSwgeyAgICA3NjcsMTJ9LCB7ICAgMTUzNSwxM30sIFwKKyAgICB7ICAgIDgzMSwxMn0sIHsgICAxNjYzLDEzfSwgeyAgICA5NTksMTV9LCB7ICAgIDI1NSwxNH0sIFwKKyAgICB7ICAgIDUxMSwxM30sIHsgICAxMDg3LDEyfSwgeyAgIDIxNzUsMTN9LCB7ICAgMTE1MSwxMn0sIFwKKyAgICB7ICAgMjMwMywxM30sIHsgICAxMjE1LDEyfSwgeyAgIDI0MzEsMTR9LCB7ICAgIDYzOSwxM30sIFwKKyAgICB7ICAgMTM0MywxMn0sIHsgICAyNjg3LDEzfSwgeyAgIDE0MDcsMTJ9LCB7ICAgMjgxNSwxM30sIFwKKyAgICB7ICAgMTQ3MSwxNH0sIHsgICAgNzY3LDEzfSwgeyAgIDE1MzUsMTJ9LCB7ICAgMzA3MSwxM30sIFwKKyAgICB7ICAgMTY2MywxNH0sIHsgICAgODk1LDEzfSwgeyAgIDE3OTEsMTJ9LCB7ICAgMzU4MywxM30sIFwKKyAgICB7ICAgMTkxOSwxNX0sIHsgICAgNTExLDE0fSwgeyAgIDEwMjMsMTN9LCB7ICAgMjE3NSwxNH0sIFwKKyAgICB7ICAgMTE1MSwxM30sIHsgICAyMzAzLDEyfSwgeyAgIDQ2MDcsMTN9LCB7ICAgMjQzMSwxMn0sIFwKKyAgICB7ICAgNDg2MywxNH0sIHsgICAxMjc5LDEzfSwgeyAgIDI2ODcsMTR9LCB7ICAgMTQwNywxM30sIFwKKyAgICB7ICAgMjgxNSwxNX0sIHsgICAgNzY3LDE0fSwgeyAgIDE1MzUsMTN9LCB7ICAgMzA3MSwxNH0sIFwKKyAgICB7ICAgMTY2MywxM30sIHsgICAzNDU1LDEyfSwgeyAgIDY5MTEsMTR9LCB7ICAgMTc5MSwxM30sIFwKKyAgICB7ICAgMzU4MywxNH0sIHsgICAxOTE5LDE2fSwgeyAgICA1MTEsMTV9LCB7ICAgMTAyMywxNH0sIFwKKyAgICB7ICAgMjMwMywxM30sIHsgICA0NjA3LDE0fSwgeyAgIDI0MzEsMTN9LCB7ICAgNDg2MywxNX0sIFwKKyAgICB7ICAgMTI3OSwxNH0sIHsgICAyOTQzLDEzfSwgeyAgIDU4ODcsMTV9LCB7ICAgMTUzNSwxNH0sIFwKKyAgICB7ICAgMzQ1NSwxM30sIHsgICA2OTExLDE1fSwgeyAgIDE3OTEsMTR9LCB7ICAgMzgzOSwxM30sIFwKKyAgICB7ICAgNzY3OSwxNn0sIHsgICAxMDIzLDE1fSwgeyAgIDIwNDcsMTR9LCB7ICAgNDM1MSwxNX0sIFwKKyAgICB7ICAgMjMwMywxNH0sIHsgICA0ODYzLDE1fSwgeyAgIDI4MTUsMTR9LCB7ICAgNTg4NywxNn0sIFwKKyAgICB7ICAgMTUzNSwxNX0sIHsgICAzMDcxLDE0fSwgeyAgIDYxNDMsMTV9LCB7ICAgMzMyNywxNH0sIFwKKyAgICB7ICAgNjkxMSwxNX0sIHsgICAzODM5LDE0fSwgeyAgIDc2NzksMTd9LCB7ICAgMTAyMywxNn0sIFwKKyAgICB7ICAgMjA0NywxNX0sIHsgICA0ODYzLDE2fSwgeyAgIDI1NTksMTV9LCB7ICAgNTg4NywxNH0sIFwKKyAgICB7ICAxMTc3NSwxNn0sIHsgICAzMDcxLDE1fSwgeyAgIDY5MTEsMTZ9LCB7ICAgMzU4MywxNX0sIFwKKyAgICB7ICAgNzY3OSwxN30sIHsgICAyMDQ3LDE2fSwgeyAgIDQwOTUsMTV9LCB7ICAgODE5MSwxNn0sIFwKKyAgICB7ICAgNDYwNywxNX0sIHsgICA5OTgzLDE2fSwgeyAgIDU2MzEsMTV9LCB7ICAxMTc3NSwxN30sIFwKKyAgICB7ICAgMzA3MSwxNn0sIHsgIDY1NTM2LDE3fSwgeyAxMzEwNzIsMTh9LCB7IDI2MjE0NCwxOX0sIFwKKyAgICB7IDUyNDI4OCwyMH0sIHsxMDQ4NTc2LDIxfSwgezIwOTcxNTIsMjJ9LCB7NDE5NDMwNCwyM30sIFwKKyAgICB7ODM4ODYwOCwyNH0gfQorI2RlZmluZSBNVUxfRkZUX1RBQkxFM19TSVpFIDI1MworI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNDIyNAorCisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgMzAwICAvKiBrID0gNSAqLworI2RlZmluZSBTUVJfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgMzAwLCA1fSwgeyAgICAgMTksIDZ9LCB7ICAgICAxMCwgNX0sIHsgICAgIDIxLCA2fSwgXAorICAgIHsgICAgIDIzLCA3fSwgeyAgICAgMTIsIDZ9LCB7ICAgICAyNSwgN30sIHsgICAgIDIxLCA4fSwgXAorICAgIHsgICAgIDExLCA3fSwgeyAgICAgMjUsIDh9LCB7ICAgICAxMywgN30sIHsgICAgIDI3LCA4fSwgXAorICAgIHsgICAgIDE1LCA3fSwgeyAgICAgMzEsIDh9LCB7ICAgICAyMSwgOX0sIHsgICAgIDExLCA4fSwgXAorICAgIHsgICAgIDI3LCA5fSwgeyAgICAgMTUsIDh9LCB7ICAgICAzNSwgOX0sIHsgICAgIDE5LCA4fSwgXAorICAgIHsgICAgIDM5LCA5fSwgeyAgICAgMjMsIDh9LCB7ICAgICA0NywgOX0sIHsgICAgIDI3LDEwfSwgXAorICAgIHsgICAgIDE1LCA5fSwgeyAgICAgMzksMTB9LCB7ICAgICAyMywgOX0sIHsgICAgIDUxLDExfSwgXAorICAgIHsgICAgIDE1LDEwfSwgeyAgICAgMzEsIDl9LCB7ICAgICA2MywxMH0sIHsgICAgIDM5LCA5fSwgXAorICAgIHsgICAgIDc5LDEwfSwgeyAgICAgNDcsIDl9LCB7ICAgICA5NSwxMH0sIHsgICAgIDU1LDExfSwgXAorICAgIHsgICAgIDMxLDEwfSwgeyAgICAgNzksMTF9LCB7ICAgICA0NywxMH0sIHsgICAgIDk1LCA5fSwgXAorICAgIHsgICAgMTkxLCA4fSwgeyAgICAzODMsMTB9LCB7ICAgIDEwMywxMn0sIHsgICAgIDMxLDExfSwgXAorICAgIHsgICAgIDYzLDEwfSwgeyAgICAxMjcsIDl9LCB7ICAgIDI1NSwgOH0sIHsgICAgNTExLCA5fSwgXAorICAgIHsgICAgMjcxLCA4fSwgeyAgICA1NDMsMTF9LCB7ICAgICA3OSwxMH0sIHsgICAgMTU5LCA5fSwgXAorICAgIHsgICAgMzE5LCA4fSwgeyAgICA2MzksMTB9LCB7ICAgIDE3NSwxMX0sIHsgICAgIDk1LDEwfSwgXAorICAgIHsgICAgMTkxLCA5fSwgeyAgICAzODMsIDV9LCB7ICAgNjM5OSwgNn0sIHsgICAzMzI3LCA3fSwgXAorICAgIHsgICAxNzI3LCA2fSwgeyAgIDM0NTUsIDd9LCB7ICAgMTc5MSwxMX0sIHsgICAgMTI3LDEwfSwgXAorICAgIHsgICAgMjU1LCA5fSwgeyAgICA1MTEsMTB9LCB7ICAgIDI3MSwgOX0sIHsgICAgNTQzLDEwfSwgXAorICAgIHsgICAgMjg3LCA5fSwgeyAgICA1NzUsMTB9LCB7ICAgIDMwMywxMX0sIHsgICAgMTU5LDEwfSwgXAorICAgIHsgICAgMzE5LCA5fSwgeyAgICA2MzksMTF9LCB7ICAgIDE3NSwxMH0sIHsgICAgMzUxLDEyfSwgXAorICAgIHsgICAgIDk1LDExfSwgeyAgICAxOTEsMTB9LCB7ICAgIDM4MywxMX0sIHsgICAgMjA3LDEwfSwgXAorICAgIHsgICAgNDE1LCA5fSwgeyAgICA4MzEsMTN9LCB7ICAgICA2MywxMX0sIHsgICAgMjU1LDEwfSwgXAorICAgIHsgICAgNTExLDExfSwgeyAgICAyNzEsMTB9LCB7ICAgIDU0MywxMX0sIHsgICAgMjg3LDEwfSwgXAorICAgIHsgICAgNTc1LDExfSwgeyAgICAzMDMsMTB9LCB7ICAgIDYwNywxMn0sIHsgICAgMTU5LDExfSwgXAorICAgIHsgICAgMzE5LDEwfSwgeyAgICA2MzksMTF9LCB7ICAgIDM1MSwxMH0sIHsgICAgNzAzLDEyfSwgXAorICAgIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTB9LCB7ICAgIDc2NywxMX0sIHsgICAgNDE1LDEwfSwgXAorICAgIHsgICAgODMxLDEyfSwgeyAgICAyMjMsMTF9LCB7ICAgIDQ0NywxMH0sIHsgICAgODk1LDExfSwgXAorICAgIHsgICAgNDc5LDEyfSwgeyAgICAyNTUsMTF9LCB7ICAgIDUxMSwxMH0sIHsgICAxMDIzLDExfSwgXAorICAgIHsgICAgNTQzLDEyfSwgeyAgICAyODcsMTF9LCB7ICAgIDU3NSwxMH0sIHsgICAxMTUxLDExfSwgXAorICAgIHsgICAgNjA3LDEyfSwgeyAgICAzMTksMTF9LCB7ICAgIDYzOSwxMn0sIHsgICAgMzUxLDExfSwgXAorICAgIHsgICAgNzAzLDEzfSwgeyAgICAxOTEsMTJ9LCB7ICAgIDM4MywxMX0sIHsgICAgNzY3LDEyfSwgXAorICAgIHsgICAgNDE1LDExfSwgeyAgICA4MzEsMTJ9LCB7ICAgIDQ0NywxMX0sIHsgICAgODk1LDEyfSwgXAorICAgIHsgICAgNDc5LDEzfSwgeyAgICAyNTUsMTJ9LCB7ICAgIDUxMSwxMX0sIHsgICAxMDIzLDEyfSwgXAorICAgIHsgICAgNTQzLDExfSwgeyAgIDEwODcsMTJ9LCB7ICAgIDU3NSwxMX0sIHsgICAxMTUxLDEyfSwgXAorICAgIHsgICAgNjA3LDEzfSwgeyAgICAzMTksMTJ9LCB7ICAgIDYzOSwxMX0sIHsgICAxMjc5LDEyfSwgXAorICAgIHsgICAgNjcxLDExfSwgeyAgIDEzNDMsMTJ9LCB7ICAgIDcwMywxM30sIHsgICAgMzgzLDEyfSwgXAorICAgIHsgICAgNzY3LDExfSwgeyAgIDE1MzUsMTJ9LCB7ICAgIDgzMSwxMX0sIHsgICAxNjYzLDEzfSwgXAorICAgIHsgICAgNDQ3LDEyfSwgeyAgICA5NTksMTR9LCB7ICAgIDI1NSwxM30sIHsgICAgNTExLDEyfSwgXAorICAgIHsgICAxMDg3LDEzfSwgeyAgICA1NzUsMTJ9LCB7ICAgMTE1MSwxMX0sIHsgICAyMzAzLDEyfSwgXAorICAgIHsgICAxMjE1LDExfSwgeyAgIDI0MzEsMTN9LCB7ICAgIDYzOSwxMn0sIHsgICAxMzQzLDEzfSwgXAorICAgIHsgICAgNzAzLDE0fSwgeyAgICAzODMsMTN9LCB7ICAgIDc2NywxMn0sIHsgICAxNTM1LDEzfSwgXAorICAgIHsgICAgODMxLDEyfSwgeyAgIDE2NjMsMTN9LCB7ICAgIDg5NSwxMn0sIHsgICAxNzkxLDEzfSwgXAorICAgIHsgICAgOTU5LDE1fSwgeyAgICAyNTUsMTR9LCB7ICAgIDUxMSwxM30sIHsgICAxMDIzLDEyfSwgXAorICAgIHsgICAyMDQ3LDEzfSwgeyAgIDEwODcsMTJ9LCB7ICAgMjE3NSwxM30sIHsgICAxMTUxLDEyfSwgXAorICAgIHsgICAyMzAzLDEzfSwgeyAgIDEyMTUsMTJ9LCB7ICAgMjQzMSwxNH0sIHsgICAgNjM5LDEzfSwgXAorICAgIHsgICAxMzQzLDEyfSwgeyAgIDI2ODcsMTN9LCB7ICAgMTQwNywxMn0sIHsgICAyODE1LDEzfSwgXAorICAgIHsgICAxNDcxLDE0fSwgeyAgICA3NjcsMTN9LCB7ICAgMTU5OSwxMn0sIHsgICAzMTk5LDEzfSwgXAorICAgIHsgICAxNjYzLDE0fSwgeyAgICA4OTUsMTN9LCB7ICAgMTc5MSwxMn0sIHsgICAzNTgzLDE1fSwgXAorICAgIHsgICAgNTExLDE0fSwgeyAgIDEwMjMsMTN9LCB7ICAgMjE3NSwxNH0sIHsgICAxMTUxLDEzfSwgXAorICAgIHsgICAyMzAzLDEyfSwgeyAgIDQ2MDcsMTN9LCB7ICAgMjQzMSwxMn0sIHsgICA0ODYzLDE0fSwgXAorICAgIHsgICAxMjc5LDEzfSwgeyAgIDI2ODcsMTR9LCB7ICAgMTQwNywxM30sIHsgICAyODE1LDE1fSwgXAorICAgIHsgICAgNzY3LDE0fSwgeyAgIDE1MzUsMTN9LCB7ICAgMzE5OSwxNH0sIHsgICAxNjYzLDEzfSwgXAorICAgIHsgICAzNDU1LDE0fSwgeyAgIDE3OTEsMTN9LCB7ICAgMzU4MywxNH0sIHsgICAxOTE5LDE2fSwgXAorICAgIHsgICAgNTExLDE1fSwgeyAgIDEwMjMsMTR9LCB7ICAgMjMwMywxM30sIHsgICA0NjA3LDE0fSwgXAorICAgIHsgICAyNDMxLDEzfSwgeyAgIDQ4NjMsMTV9LCB7ICAgMTI3OSwxNH0sIHsgICAyODE1LDEzfSwgXAorICAgIHsgICA1NjMxLDE0fSwgeyAgIDI5NDMsMTN9LCB7ICAgNTg4NywxNX0sIHsgICAxNTM1LDE0fSwgXAorICAgIHsgICAzNDU1LDE1fSwgeyAgIDE3OTEsMTR9LCB7ICAgMzU4MywxM30sIHsgICA3MTY3LDE0fSwgXAorICAgIHsgICAzODM5LDEzfSwgeyAgIDc2NzksMTZ9LCB7ICAgMTAyMywxNX0sIHsgICAyMDQ3LDE0fSwgXAorICAgIHsgICA0MjIzLDE1fSwgeyAgIDIzMDMsMTR9LCB7ICAgNDg2MywxNX0sIHsgICAyODE1LDE0fSwgXAorICAgIHsgICA1ODg3LDE2fSwgeyAgIDE1MzUsMTV9LCB7ICAgMzA3MSwxNH0sIHsgICA2MTQzLDE1fSwgXAorICAgIHsgICAzMzI3LDE0fSwgeyAgIDY5MTEsMTV9LCB7ICAgMzU4MywxNH0sIHsgICA3MTY3LDE1fSwgXAorICAgIHsgICAzODM5LDE0fSwgeyAgIDc2NzksMTd9LCB7ICAgMTAyMywxNn0sIHsgICAyMDQ3LDE1fSwgXAorICAgIHsgICA0MDk1LDE0fSwgeyAgIDgxOTEsMTV9LCB7ICAgNDg2MywxNn0sIHsgICAyNTU5LDE1fSwgXAorICAgIHsgICA1ODg3LDE0fSwgeyAgMTE3NzUsMTZ9LCB7ICAgMzA3MSwxNX0sIHsgICA2OTExLDE2fSwgXAorICAgIHsgICAzNTgzLDE1fSwgeyAgIDc2NzksMTR9LCB7ICAxNTM1OSwxN30sIHsgICAyMDQ3LDE2fSwgXAorICAgIHsgICA0MDk1LDE1fSwgeyAgIDg0NDcsMTZ9LCB7ICAgNDYwNywxNX0sIHsgICA5OTgzLDE2fSwgXAorICAgIHsgICA1MTE5LDE1fSwgeyAgMTAyMzksMTZ9LCB7ICAgNTYzMSwxNX0sIHsgIDExNzc1LDE3fSwgXAorICAgIHsgICAzMDcxLDE2fSwgeyAgNjU1MzYsMTd9LCB7IDEzMTA3MiwxOH0sIHsgMjYyMTQ0LDE5fSwgXAorICAgIHsgNTI0Mjg4LDIwfSwgezEwNDg1NzYsMjF9LCB7MjA5NzE1MiwyMn0sIHs0MTk0MzA0LDIzfSwgXAorICAgIHs4Mzg4NjA4LDI0fSB9CisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzX1NJWkUgMjczCisjZGVmaW5lIFNRUl9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAyNzUyCisKKyNkZWZpbmUgTVVMTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNVUxMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICA0MworI2RlZmluZSBNVUxMT19NVUxfTl9USFJFU0hPTEQgICAgICAgICAgICAgODM5NworI2RlZmluZSBTUVJMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgNgorI2RlZmluZSBTUVJMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICA1NAorI2RlZmluZSBTUVJMT19TUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgNTM5NworCisjZGVmaW5lIERDX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDM5CisjZGVmaW5lIERDX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAgMTY1CisjZGVmaW5lIERDX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDM5CisjZGVmaW5lIERDX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDc2CisKKyNkZWZpbmUgSU5WX01VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgMzAKKyNkZWZpbmUgSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgICAxNzcKKyNkZWZpbmUgSU5WX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAxNTUKKworI2RlZmluZSBCSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgIDIzMAorI2RlZmluZSBSRURDXzFfVE9fUkVEQ18yX1RIUkVTSE9MRCAgICAgICAgICAyOAorI2RlZmluZSBSRURDXzJfVE9fUkVEQ19OX1RIUkVTSE9MRCAgICAgICAgICA0MworCisjZGVmaW5lIE1VX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAxMTQyCisjZGVmaW5lIE1VX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAxMTQyCisjZGVmaW5lIE1VUElfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDY2CisjZGVmaW5lIE1VX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgOTk4CisjZGVmaW5lIE1VX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAxMTQyCisKKyNkZWZpbmUgUE9XTV9TRUNfVEFCTEUgIDEsMTYsMTc1LDI2OSw4MzksMTQyMAorCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgIDE5CisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgNTUyCisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAxMDM4CisKKyNkZWZpbmUgRkFDX0RTQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAxNTEKKyNkZWZpbmUgRkFDX09ERF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgMjMKKworI2RlZmluZSBNQVRSSVgyMl9TVFJBU1NFTl9USFJFU0hPTEQgICAgICAgICAxNworI2RlZmluZSBIR0NEMl9ESVYxX01FVEhPRCAgICAgICAgICAgICAgICAgICAgMSAgLyogOC4xMSUgZmFzdGVyIHRoYW4gMyAqLworI2RlZmluZSBIR0NEX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgICA4NworI2RlZmluZSBIR0NEX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA5NgorI2RlZmluZSBIR0NEX1JFRFVDRV9USFJFU0hPTEQgICAgICAgICAgICAgMjEyMQorI2RlZmluZSBHQ0RfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDMyNworI2RlZmluZSBHQ0RFWFRfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDI0MQorI2RlZmluZSBKQUNPQklfQkFTRV9NRVRIT0QgICAgICAgICAgICAgICAgICAgNCAgLyogMjEuNDAlIGZhc3RlciB0aGFuIDEgKi8KKworLyogVHVuZXVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIHRvb2sgNDMxMDU2IHNlY29uZHMgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2JkaXZfZGJtMWMuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYmRpdl9kYm0xYy5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUzYmQ1MgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2JkaXZfZGJtMWMuYXNtCkBAIC0wLDAgKzEsMTA2IEBACitkbmwgIHg4Nl82NCBtcG5fYmRpdl9kYm0xLgorCitkbmwgIENvcHlyaWdodCAyMDA4LCAyMDExLCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBBTUQgSzgsSzkJIDIuMjUKK0MgQU1EIEsxMAkgMi4yNQorQyBJbnRlbCBQNAkxMi41CitDIEludGVsIGNvcmUyCSA0CitDIEludGVsIE5ITQkgMy43NQorQyBJbnRlbCBTQlIJIDMuNgorQyBJbnRlbCBhdG9tCTIwCitDIFZJQSBuYW5vCSA0CisKK0MgVE9ETworQyAgKiBPcHRpbWlzZSBmZWVkLWluIGNvZGUuCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBxcCcsCSAgYCVyZGknKQorZGVmaW5lKGB1cCcsCSAgYCVyc2knKQorZGVmaW5lKGBuX3BhcmFtJywgYCVyZHgnKQorZGVmaW5lKGBiZCcsCSAgYCVyY3gnKQorZGVmaW5lKGBjeScsCSAgYCVyOCcpCisKK2RlZmluZShgbicsICAgICAgIGAlcjknKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigxNikKK1BST0xPR1VFKG1wbl9iZGl2X2RibTFjKQorCUZVTkNfRU5UUlkoNCkKK0lGRE9TKGAJbW92CTU2KCVyc3ApLCAlcjgJJykKKwltb3YJKHVwKSwgJXJheAorCW1vdgluX3BhcmFtLCBuCisJbW92CVIzMihuX3BhcmFtKSwgUjMyKCVyMTEpCisJbXVsCWJkCisJbGVhCSh1cCxuLDgpLCB1cAorCWxlYQkocXAsbiw4KSwgcXAKKwluZWcJbgorCWFuZAkkMywgUjMyKCVyMTEpCisJanoJTChsbzApCisJbGVhCS00KG4sJXIxMSksIG4KKwljbXAJJDIsIFIzMiglcjExKQorCWpjCUwobG8xKQorCWp6CUwobG8yKQorCWptcAlMKGxvMykKKworCUFMSUdOKDE2KQorTCh0b3ApOgltb3YJKHVwLG4sOCksICVyYXgKKwltdWwJYmQKK0wobG8wKToJc3ViCSVyYXgsICVyOAorCW1vdgklcjgsIChxcCxuLDgpCisJc2JiCSVyZHgsICVyOAorCW1vdgk4KHVwLG4sOCksICVyYXgKKwltdWwJYmQKK0wobG8zKToJc3ViCSVyYXgsICVyOAorCW1vdgklcjgsIDgocXAsbiw4KQorCXNiYgklcmR4LCAlcjgKKwltb3YJMTYodXAsbiw4KSwgJXJheAorCW11bAliZAorTChsbzIpOglzdWIJJXJheCwgJXI4CisJbW92CSVyOCwgMTYocXAsbiw4KQorCXNiYgklcmR4LCAlcjgKKwltb3YJMjQodXAsbiw4KSwgJXJheAorCW11bAliZAorTChsbzEpOglzdWIJJXJheCwgJXI4CisJbW92CSVyOCwgMjQocXAsbiw4KQorCXNiYgklcmR4LCAlcjgKKwlhZGQJJDQsIG4KKwlqbnoJTCh0b3ApCisKKwltb3YJJXI4LCAlcmF4CisJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2JkaXZfcV8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2JkaXZfcV8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTUzOGM5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYmRpdl9xXzEuYXNtCkBAIC0wLDAgKzEsMTk1IEBACitkbmwgIEFNRDY0IG1wbl9iZGl2X3FfMSwgbXBuX3BpMV9iZGl2X3FfMSAtLSBIZW5zZWwgZGl2aXNpb24gYnkgMS1saW1iIGRpdmlzb3IuCisKK2RubCAgQ29weXJpZ2h0IDIwMDEsIDIwMDIsIDIwMDQtMjAwNiwgMjAxMC0yMDEyLCAyMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK2RubCAgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgIGN5Y2xlcy9saW1iICAgIGN5Y2xlcy9saW1iCitDCSAgICAgICBub3JtCSAgICAgICB1bm9ybQorQyBBTUQgSzgsSzkJMTEJCTExCitDIEFNRCBLMTAJMTEJCTExCitDIEFNRCBidWxsCTEzLjUJCTE0CitDIEFNRCBwaWxlCTE0CQkxNQorQyBBTUQgc3RlYW0KK0MgQU1EIGV4Y2F2YXRvcgorQyBBTUQgYm9iY2F0CTE0CQkxNAorQyBBTUQgamFndWFyCTE0LjUJCTE1CitDIEludGVsIFA0CTMzCQkzMworQyBJbnRlbCBjb3JlMgkxMy41CQkxMy4yNQorQyBJbnRlbCBOSE0JMTQJCTE0CitDIEludGVsIFNCUgk4CQk4LjI1CitDIEludGVsIElCUgk3Ljc1CQk3Ljg1CitDIEludGVsIEhXTAk4CQk4CitDIEludGVsIEJXTAk4CQk4CitDIEludGVsIFNLTAk4CQk4CitDIEludGVsIGF0b20JMzQJCTM2CitDIEludGVsIFNMTQkxMy43CQkxMy41CitDIFZJQSBuYW5vCTE5LjI1CQkxOS4yNQluZWVkcyByZS1tZWFzdXJpbmcKKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywJCWAlcmRpJykKK2RlZmluZShgdXAnLAkJYCVyc2knKQorZGVmaW5lKGBuJywJCWAlcmR4JykKK2RlZmluZShgZCcsCQlgJXJjeCcpCitkZWZpbmUoYGRpJywJCWAlcjgnKQkJQwlqdXN0IG1wbl9waTFfYmRpdl9xXzEKK2RlZmluZShgbmNudCcsCQlgJXI5JykJCUMJanVzdCBtcG5fcGkxX2JkaXZfcV8xCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX2JkaXZfcV8xKQorCUZVTkNfRU5UUlkoNCkKKwlwdXNoCSVyYngKKworCW1vdgklcmN4LCAlcmF4CisJeG9yCVIzMiglcmN4KSwgUjMyKCVyY3gpCUMgbmNudCBjb3VudAorCW1vdgklcmR4LCAlcjEwCisKKwlidAkkMCwgUjMyKCVyYXgpCisJam5jCUwoZXZuKQkJCUMgc2tpcCBic2YgdW5sZXNzIGRpdmlzb3IgaXMgZXZlbgorCitMKG9kZCk6CW1vdgklcmF4LCAlcmJ4CisJc2hyCVIzMiglcmF4KQorCWFuZAkkMTI3LCBSMzIoJXJheCkJCUMgZC8yLCA3IGJpdHMKKworCUxFQSgJYmludmVydF9saW1iX3RhYmxlLCAlcmR4KQorCisJbW92emJsCSglcmR4LCVyYXgpLCBSMzIoJXJheCkJQyBpbnYgOCBiaXRzCisKKwltb3YJJXJieCwgJXIxMQkJQyBkIHdpdGhvdXQgdHdvcworCisJbGVhCSglcmF4LCVyYXgpLCBSMzIoJXJkeCkJQyAyKmludgorCWltdWwJUjMyKCVyYXgpLCBSMzIoJXJheCkJQyBpbnYqaW52CisJaW11bAlSMzIoJXJieCksIFIzMiglcmF4KQlDIGludippbnYqZAorCXN1YglSMzIoJXJheCksIFIzMiglcmR4KQlDIGludiA9IDIqaW52IC0gaW52KmludipkLCAxNiBiaXRzCisKKwlsZWEJKCVyZHgsJXJkeCksIFIzMiglcmF4KQlDIDIqaW52CisJaW11bAlSMzIoJXJkeCksIFIzMiglcmR4KQlDIGludippbnYKKwlpbXVsCVIzMiglcmJ4KSwgUjMyKCVyZHgpCUMgaW52KmludipkCisJc3ViCVIzMiglcmR4KSwgUjMyKCVyYXgpCUMgaW52ID0gMippbnYgLSBpbnYqaW52KmQsIDMyIGJpdHMKKworCWxlYQkoJXJheCwlcmF4KSwgJXI4CUMgMippbnYKKwlpbXVsCSVyYXgsICVyYXgJCUMgaW52KmludgorCWltdWwJJXJieCwgJXJheAkJQyBpbnYqaW52KmQKKwlzdWIJJXJheCwgJXI4CQlDIGludiA9IDIqaW52IC0gaW52KmludipkLCA2NCBiaXRzCisKKwlqbXAJTChwaTEpCisKK0woZXZuKToJYnNmCSVyYXgsICVyY3gKKwlzaHIJUjgoJXJjeCksICVyYXgKKwlqbXAJTChvZGQpCitFUElMT0dVRSgpCisKK1BST0xPR1VFKG1wbl9waTFfYmRpdl9xXzEpCisJRlVOQ19FTlRSWSg0KQorSUZET1MoYAltb3YJNTYoJXJzcCksICVyOAknKQorSUZET1MoYAltb3YJNjQoJXJzcCksICVyOQknKQorCXB1c2gJJXJieAorCisJbW92CSVyY3gsICVyMTEJCUMgZAorCW1vdgklcmR4LCAlcjEwCQlDIG4KKwltb3YJJXI5LCAlcmN4CQlDIG5jbnQKKworTChwaTEpOgltb3YJKHVwKSwgJXJheAkJQyB1cFswXQorCisJZGVjCSVyMTAKKwlqeglMKG9uZSkKKworCWxlYQk4KHVwLCVyMTAsOCksIHVwCUMgdXAgZW5kCisJbGVhCShycCwlcjEwLDgpLCBycAkJQyBycCBlbmQKKwluZWcJJXIxMAkJCUMgLW4KKworCXRlc3QJUjMyKCVyY3gpLCBSMzIoJXJjeCkKKwlqbnoJTCh1bm9ybSkJCUMgYnJhbmNoIGlmIGNvdW50ICE9IDAKKwl4b3IJUjMyKCVyYngpLCBSMzIoJXJieCkKKwlqbXAJTChuZW50KQorCisJQUxJR04oOCkKK0wobnRvcCk6bXVsCSVyMTEJCQlDIGNhcnJ5IGxpbWIgaW4gcmR4CTAgMTAKKwltb3YJLTgodXAsJXIxMCw4KSwgJXJheAlDCisJc3ViCSVyYngsICVyYXgJCUMgYXBwbHkgY2FycnkgYml0CisJc2V0YwlSOCglcmJ4KQkJQworCXN1YgklcmR4LCAlcmF4CQlDIGFwcGx5IGNhcnJ5IGxpbWIJNQorCWFkYwkkMCwgUjMyKCVyYngpCQlDCQkJNgorTChuZW50KTppbXVsCSVyOCwgJXJheAkJQwkJCTYKKwltb3YJJXJheCwgKHJwLCVyMTAsOCkJQworCWluYwklcjEwCQkJQworCWpueglMKG50b3ApCisKKwltb3YJLTgodXApLCAlcjkJCUMgdXAgaGlnaCBsaW1iCisJam1wCUwoY29tKQorCitMKHVub3JtKToKKwltb3YJKHVwLCVyMTAsOCksICVyOQlDIHVwWzFdCisJc2hyCVI4KCVyY3gpLCAlcmF4CQlDCisJbmVnCVIzMiglcmN4KQorCXNobAlSOCglcmN4KSwgJXI5CQlDCisJbmVnCVIzMiglcmN4KQorCW9yCSVyOSwgJXJheAorCXhvcglSMzIoJXJieCksIFIzMiglcmJ4KQorCWptcAlMKHVlbnQpCisKKwlBTElHTig4KQorTCh1dG9wKTptdWwJJXIxMQkJCUMgY2FycnkgbGltYiBpbiByZHgJMCAxMAorCW1vdgkodXAsJXIxMCw4KSwgJXJheAlDCisJc2hsCVI4KCVyY3gpLCAlcmF4CQlDCisJbmVnCVIzMiglcmN4KQorCW9yCSVyOSwgJXJheAorCXN1YgklcmJ4LCAlcmF4CQlDIGFwcGx5IGNhcnJ5IGJpdAorCXNldGMJUjgoJXJieCkJCUMKKwlzdWIJJXJkeCwgJXJheAkJQyBhcHBseSBjYXJyeSBsaW1iCTUKKwlhZGMJJDAsIFIzMiglcmJ4KQkJQwkJCTYKK0wodWVudCk6aW11bAklcjgsICVyYXgJCUMJCQk2CisJbW92CSh1cCwlcjEwLDgpLCAlcjkJQworCXNocglSOCglcmN4KSwgJXI5CQlDCisJbmVnCVIzMiglcmN4KQorCW1vdgklcmF4LCAocnAsJXIxMCw4KQlDCisJaW5jCSVyMTAJCQlDCisJam56CUwodXRvcCkKKworTChjb20pOgltdWwJJXIxMQkJCUMgY2FycnkgbGltYiBpbiByZHgKKwlzdWIJJXJieCwgJXI5CQlDIGFwcGx5IGNhcnJ5IGJpdAorCXN1YgklcmR4LCAlcjkJCUMgYXBwbHkgY2FycnkgbGltYgorCWltdWwJJXI4LCAlcjkKKwltb3YJJXI5LCAocnApCisJcG9wCSVyYngKKwlGVU5DX0VYSVQoKQorCXJldAorCitMKG9uZSk6CXNocglSOCglcmN4KSwgJXJheAorCWltdWwJJXI4LCAlcmF4CisJbW92CSVyYXgsIChycCkKKwlwb3AJJXJieAorCUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9idDEvYW9yc19uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2J0MS9hb3JzX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNmI1YzcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9idDEvYW9yc19uLmFzbQpAQCAtMCwwICsxLDE1OSBAQAorZG5sICBBTUQ2NCBtcG5fYWRkX24sIG1wbl9zdWJfbiBvcHRpbWlzZWQgZm9yIGJvYmNhdC4KKworZG5sICBDb3B5cmlnaHQgMjAwMy0yMDA1LCAyMDA3LCAyMDA4LCAyMDEwLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgY3ljbGVzL2xpbWIKK0MgQU1EIEs4LEs5CSAxLjc3CitDIEFNRCBLMTAJIDEuNzZcMS44MgorQyBBTUQgYmQxCSAxLjY3XDIuMTIKK0MgQU1EIGJkMgkgMS42MlwxLjgyCitDIEFNRCBiZDMKK0MgQU1EIGJkNAkgMS41NVwyLjIKK0MgQU1EIHplbgorQyBBTUQgYnQxCSAyLjU0CitDIEFNRCBidDIJIDIKK0MgSW50ZWwgUDQJMTEKK0MgSW50ZWwgUE5SCSA0Ljc2CitDIEludGVsIE5ITQkgNS4yNworQyBJbnRlbCBTQlIJIDIKK0MgSW50ZWwgSUJSCSAxLjk0CitDIEludGVsIEhXTAkgMS42MworQyBJbnRlbCBCV0wJIDEuNTEKK0MgSW50ZWwgU0tMCSAxLjUxCitDIEludGVsIGF0b20JIDMuNTYKK0MgSW50ZWwgU0xNCSA0CitDIFZJQSBuYW5vCisKK0MgVGhlIGxvb3Agb2YgdGhpcyBjb2RlIGlzIHRoZSByZXN1bHQgb2YgcnVubmluZyBhIGNvZGUgZ2VuZXJhdGlvbiBhbmQKK0Mgb3B0aW1pemF0aW9uIHRvb2wgc3VpdGUgd3JpdHRlbiBieSBEYXZpZCBIYXJ2ZXkgYW5kIFRvcmJqb3JuIEdyYW5sdW5kLgorCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLAlgJXJkaScpCUMgcmN4CitkZWZpbmUoYHVwJywJYCVyc2knKQlDIHJkeAorZGVmaW5lKGB2cCcsCWAlcmR4JykJQyByOAorZGVmaW5lKGBuJywJYCVyY3gnKQlDIHI5CitkZWZpbmUoYGN5JywJYCVyOCcpCUMgcnNwKzQwICAgIChtcG5fYWRkX25jIGFuZCBtcG5fc3ViX25jKQorCitpZmRlZihgT1BFUkFUSU9OX2FkZF9uJywgYAorCWRlZmluZShBRENTQkIsCSAgICAgIGFkYykKKwlkZWZpbmUoZnVuYywJICAgICAgbXBuX2FkZF9uKQorCWRlZmluZShmdW5jX25jLAkgICAgICBtcG5fYWRkX25jKScpCitpZmRlZihgT1BFUkFUSU9OX3N1Yl9uJywgYAorCWRlZmluZShBRENTQkIsCSAgICAgIHNiYikKKwlkZWZpbmUoZnVuYywJICAgICAgbXBuX3N1Yl9uKQorCWRlZmluZShmdW5jX25jLAkgICAgICBtcG5fc3ViX25jKScpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FkZF9uIG1wbl9hZGRfbmMgbXBuX3N1Yl9uIG1wbl9zdWJfbmMpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUoZnVuYykKKwlGVU5DX0VOVFJZKDQpCisJeG9yCSVyOCwgJXI4CitMKGVudCk6CXRlc3QJJDEsIFI4KG4pCisJam56CUwoYngxKQorCitMKGJ4MCk6CXRlc3QJJDIsIFI4KG4pCisJam56CUwoYjEwKQorCitMKGIwMCk6CXNocgkkMiwgbgorCW5lZwklcjgKKwltb3YJJDMsIFIzMiglcmF4KQorCW1vdgkodXApLCAlcjEwCisJbW92CTgodXApLCAlcjExCisJam1wCUwobG8wKQorCitMKGIxMCk6CXNocgkkMiwgbgorCW5lZwklcjgKKwltb3YJJDEsIFIzMiglcmF4KQorCW1vdgkodXApLCAlcjgKKwltb3YJOCh1cCksICVyOQorCWpyY3h6CUwoY2oyKQorCWptcAlMKHRvcCkKKworTChieDEpOgl0ZXN0CSQyLCBSOChuKQorCWpueglMKGIxMSkKKworTChiMDEpOglzaHIJJDIsIG4KKwluZWcJJXI4CisJbW92CSQwLCBSMzIoJXJheCkKKwltb3YJKHVwKSwgJXI5CisJanJjeHoJTChjajEpCisJbW92CTgodXApLCAlcjEwCisJam1wCUwobG8xKQorCisJQUxJR04oOCkKK0woYjExKToJaW5jCW4KKwlzaHIJJDIsIG4KKwluZWcJJXI4CisJbW92CSQyLCBSMzIoJXJheCkKKwltb3YJKHVwKSwgJXIxMQorCWptcAlMKGxvMykKKworCUFMSUdOKDQpCitMKHRvcCk6CW1vdgk4KHVwLCVyYXgsOCksICVyMTAKKwlBRENTQkIJLTgodnAsJXJheCw4KSwgJXI4CisJbW92CSVyOCwgLTgocnAsJXJheCw4KQorTChsbzEpOgltb3YJMTYodXAsJXJheCw4KSwgJXIxMQorCUFEQ1NCQgkodnAsJXJheCw4KSwgJXI5CisJbGVhCTQoJXJheCksICVyYXgKKwltb3YJJXI5LCAtMzIocnAsJXJheCw4KQorTChsbzApOglBRENTQkIJLTI0KHZwLCVyYXgsOCksICVyMTAKKwltb3YJJXIxMCwgLTI0KHJwLCVyYXgsOCkKK0wobG8zKToJQURDU0JCCS0xNih2cCwlcmF4LDgpLCAlcjExCisJZGVjCW4KKwltb3YJLTgodXAsJXJheCw4KSwgJXI4CisJbW92CSVyMTEsIC0xNihycCwlcmF4LDgpCitMKGxvMik6CW1vdgkodXAsJXJheCw4KSwgJXI5CisJam56CUwodG9wKQorCitMKGNqMik6CUFEQ1NCQgktOCh2cCwlcmF4LDgpLCAlcjgKKwltb3YJJXI4LCAtOChycCwlcmF4LDgpCitMKGNqMSk6CUFEQ1NCQgkodnAsJXJheCw4KSwgJXI5CisJbW92CSVyOSwgKHJwLCVyYXgsOCkKKworCW1vdgkkMCwgUjMyKCVyYXgpCisJYWRjCSQwLCBSMzIoJXJheCkKKworCUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCisKKwlBTElHTigxNikKK1BST0xPR1VFKGZ1bmNfbmMpCisJRlVOQ19FTlRSWSg0KQorSUZET1MoYAltb3YJNTYoJXJzcCksICVyOAknKQorCWptcAlMKGVudCkKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2J0MS9hb3JzbXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYnQxL2FvcnNtdWxfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFlMWQ4YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2J0MS9hb3JzbXVsXzEuYXNtCkBAIC0wLDAgKzEsMTkxIEBACitkbmwgIEFNRDY0IG1wbl9hZGRtdWxfMSBhbmQgbXBuX3N1Ym11bF8xIG9wdGltaXNlZCBmb3IgQU1EIGJ0MS9idDIuCisKK2RubCAgQ29weXJpZ2h0IDIwMDMtMjAwNSwgMjAwNywgMjAwOCwgMjAxMSwgMjAxMiwgMjAxOC0yMDE5IEZyZWUgU29mdHdhcmUKK2RubCAgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBBTUQgSzgsSzkJIDQuNTIJCW9sZCBtZWFzdXJlbWVudAorQyBBTUQgSzEwCSA0LjUxCQlvbGQgbWVhc3VyZW1lbnQKK0MgQU1EIGJkMQkgNC42NgkJb2xkIG1lYXN1cmVtZW50CitDIEFNRCBiZDIJIDQuNTcJCW9sZCBtZWFzdXJlbWVudAorQyBBTUQgYmQzCSA/CitDIEFNRCBiZDQJID8KK0MgQU1EIHplbgkgPworQyBBTUQgYnQxCSA1LjA0CitDIEFNRCBidDIJIDUuMDcKK0MgSW50ZWwgUDQJMTYuOAkxOC42CW9sZCBtZWFzdXJlbWVudAorQyBJbnRlbCBQTlIJIDUuNTkJCW9sZCBtZWFzdXJlbWVudAorQyBJbnRlbCBOSE0JIDUuMzkJCW9sZCBtZWFzdXJlbWVudAorQyBJbnRlbCBTQlIJIDMuOTMJCW9sZCBtZWFzdXJlbWVudAorQyBJbnRlbCBJQlIJIDMuNTkJCW9sZCBtZWFzdXJlbWVudAorQyBJbnRlbCBIV0wJIDMuNjEJCW9sZCBtZWFzdXJlbWVudAorQyBJbnRlbCBCV0wJIDIuNzYJCW9sZCBtZWFzdXJlbWVudAorQyBJbnRlbCBTS0wJIDIuNzcJCW9sZCBtZWFzdXJlbWVudAorQyBJbnRlbCBhdG9tCTIzCQlvbGQgbWVhc3VyZW1lbnQKK0MgSW50ZWwgU0xNCSA4CQlvbGQgbWVhc3VyZW1lbnQKK0MgSW50ZWwgR0xNCSA/CitDIFZJQSBuYW5vCSA1LjYzCQlvbGQgbWVhc3VyZW1lbnQKKworQyBUaGUgQUxJR05tZW50IGhlcmUgbWlnaHQgbG9vayBjb21wbGV0ZWx5IGFkLWhvYy4gIFRoZXkgYXJlIG5vdC4KKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworaWZkZWYoYE9QRVJBVElPTl9hZGRtdWxfMScsYAorICAgICAgZGVmaW5lKGBBRERTVUInLCAgICAgICAgYGFkZCcpCisgICAgICBkZWZpbmUoYGZ1bmMnLCAgYG1wbl9hZGRtdWxfMScpCisnKQoraWZkZWYoYE9QRVJBVElPTl9zdWJtdWxfMScsYAorICAgICAgZGVmaW5lKGBBRERTVUInLCAgICAgICAgYHN1YicpCisgICAgICBkZWZpbmUoYGZ1bmMnLCAgYG1wbl9zdWJtdWxfMScpCisnKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRtdWxfMSBtcG5fc3VibXVsXzEpCisKK0MgU3RhbmRhcmQgcGFyYW1ldGVycworZGVmaW5lKGBycCcsICAgICAgICAgICAgICBgJXJkaScpCitkZWZpbmUoYHVwJywgICAgICAgICAgICAgIGAlcnNpJykKK2RlZmluZShgbl9wYXJhbScsICAgICAgICAgYCVyZHgnKQorZGVmaW5lKGB2MCcsICAgICAgICAgICAgICBgJXJjeCcpCitDIFN0YW5kYXJkIGFsbG9jYXRpb25zCitkZWZpbmUoYG4nLCAgICAgICAgICAgICAgIGAlcmJ4JykKK2RlZmluZShgdzAnLCAgICAgICAgICAgICAgYCVyOCcpCitkZWZpbmUoYHcxJywgICAgICAgICAgICAgIGAlcjknKQorZGVmaW5lKGB3MicsICAgICAgICAgICAgICBgJXIxMCcpCitkZWZpbmUoYHczJywgICAgICAgICAgICAgIGAlcjExJykKKworQyBET1M2NCBwYXJhbWV0ZXJzCitJRkRPUyhgIGRlZmluZShgcnAnLCAgICAgIGAlcmN4JykgICAgJykgZG5sCitJRkRPUyhgIGRlZmluZShgdXAnLCAgICAgIGAlcnNpJykgICAgJykgZG5sCitJRkRPUyhgIGRlZmluZShgbl9wYXJhbScsIGAlcjgnKSAgICAgJykgZG5sCitJRkRPUyhgIGRlZmluZShgdjAnLCAgICAgIGAlcjknKSAgICAgJykgZG5sCitDIERPUzY0IGFsbG9jYXRpb25zCitJRkRPUyhgIGRlZmluZShgbicsICAgICAgIGAlcmJ4JykgICAgJykgZG5sCitJRkRPUyhgIGRlZmluZShgdzAnLCAgICAgIGAlcjgnKSAgICAgJykgZG5sCitJRkRPUyhgIGRlZmluZShgdzEnLCAgICAgIGAlcmRpJykgICAgJykgZG5sCitJRkRPUyhgIGRlZmluZShgdzInLCAgICAgIGAlcjEwJykgICAgJykgZG5sCitJRkRPUyhgIGRlZmluZShgdzMnLCAgICAgIGAlcjExJykgICAgJykgZG5sCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDY0KQorUFJPTE9HVUUoZnVuYykKK0lGRE9TKGAJcHVzaAklcnNpCQknKQorSUZET1MoYAlwdXNoCSVyZGkJCScpCitJRkRPUyhgCW1vdgklcmR4LCAlcnNpCScpCisKKwlwdXNoCSVyYngKKwltb3YJKHVwKSwgJXJheAorCisJbGVhCShycCxuX3BhcmFtLDgpLCBycAorCWxlYQkodXAsbl9wYXJhbSw4KSwgdXAKKwltb3YJbl9wYXJhbSwgbgorCisJdGVzdAkkMSwgUjgobl9wYXJhbSkKKwlqbmUJTChieDEpCisKK0woYngwKToJbXVsCXYwCisJbmVnCW4KKwltb3YJJXJheCwgdzAKKwltb3YJJXJkeCwgdzEKKwl0ZXN0CSQyLCBSOChuKQorCWpuZQlMKEwyKQorCitMKGIwMCk6CWFkZAkkMiwgbgorCWptcAlMKEwwKQorCisJQUxJR04oMTYpCitMKGJ4MSk6CW11bAl2MAorCXRlc3QJJDIsIFI4KG4pCisJamUJTChiMDEpCisKK0woYjExKToJbW92CSVyYXgsIHcyCisJbW92CSVyZHgsIHczCisJbmVnCW4KKwlpbmMJbgorCWptcAlMKEwzKQorCisJQUxJR04oMTYpCitMKGIwMSk6CXN1YgkkMywgbgorCWpjCUwobjEpCisJbW92CSVyYXgsIHcyCisJbW92CSVyZHgsIHczCisJbmVnCW4KKworCUFMSUdOKDE2KQorTCh0b3ApOgltb3YJLTE2KHVwLG4sOCksICVyYXgKKwltdWwJdjAKKwltb3YJJXJheCwgdzAKKwltb3YJJXJkeCwgdzEKKwlBRERTVUIJdzIsIC0yNChycCxuLDgpCisJYWRjCXczLCB3MAorCWFkYwkkMCwgdzEKK0woTDApOgltb3YJLTgodXAsbiw4KSwgJXJheAorCW11bAl2MAorCW1vdgklcmF4LCB3MgorCW1vdgklcmR4LCB3MworCUFERFNVQgl3MCwgLTE2KHJwLG4sOCkKKwlhZGMJdzEsIHcyCisJYWRjCSQwLCB3MworTChMMyk6CW1vdgkodXAsbiw4KSwgJXJheAorCW11bAl2MAorCW1vdgklcmF4LCB3MAorCW1vdgklcmR4LCB3MQorCUFERFNVQgl3MiwgLTgocnAsbiw4KQorCWFkYwl3MywgdzAKKwlhZGMJJDAsIHcxCitMKEwyKToJbW92CTgodXAsbiw4KSwgJXJheAorCW11bAl2MAorCW1vdgklcmF4LCB3MgorCW1vdgklcmR4LCB3MworCUFERFNVQgl3MCwgKHJwLG4sOCkKKwlhZGMJdzEsIHcyCisJYWRjCSQwLCB3MworCWFkZAkkNCwgbgorCWpzCUwodG9wKQorCitMKGVuZCk6CXhvcglSMzIoJXJheCksIFIzMiglcmF4KQorCUFERFNVQgl3MiwgLTgocnApCisJYWRjCXczLCAlcmF4CisJcG9wCSVyYngKK0lGRE9TKGAJcG9wCSVyZGkJCScpCitJRkRPUyhgCXBvcAklcnNpCQknKQorCXJldAorCisJQUxJR04oMzIpCitMKG4xKToJQUREU1VCCSVyYXgsIC04KHJwKQorCW1vdgkkMCwgUjMyKCVyYXgpCisJYWRjCSVyZHgsICVyYXgKKwlwb3AJJXJieAorSUZET1MoYAlwb3AJJXJkaQkJJykKK0lGRE9TKGAJcG9wCSVyc2kJCScpCisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9idDEvY29weWQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYnQxL2NvcHlkLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Nzc3MTRlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYnQxL2NvcHlkLmFzbQpAQCAtMCwwICsxLDkxIEBACitkbmwgIEFNRDY0IG1wbl9jb3B5ZCBvcHRpbWlzZWQgZm9yIEFNRCBib2JjYXQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDMsIDIwMDUsIDIwMDcsIDIwMTEsIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIEFNRCBLOCxLOQkgMQorQyBBTUQgSzEwCSAxLTIgIChhbGlnbm1lbnQgZmx1Y3R1YXRpb25zKQorQyBBTUQgYmQxCSA/CitDIEFNRCBib2JjYXQJIDEuNQorQyBJbnRlbCBQNAkgMi44CitDIEludGVsIGNvcmUyCSAxCitDIEludGVsIE5ITQkgMS0xLjI1CitDIEludGVsIFNCUgkgMQorQyBJbnRlbCBhdG9tCSAyLjg3CitDIFZJQSBuYW5vCSAyCisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyBycAlyZGkKK0MgdXAJcnNpCitDIG4JcmR4CisKK2RlZmluZShgcnAnLGAlcmRpJykKK2RlZmluZShgdXAnLGAlcnNpJykKK2RlZmluZShgbicsYCVyZHgnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigxNikKK1BST0xPR1VFKG1wbl9jb3B5ZCkKKwlGVU5DX0VOVFJZKDMpCisJc3ViCSQ0LCBuCisJamwJTChlbmQpCisJQUxJR04oMTYpCitMKHRvcCk6CW1vdgkyNCh1cCxuLDgpLCAlcjgKKwltb3YJJXI4LCAyNChycCxuLDgpCisJbW92CTE2KHVwLG4sOCksICVyOAorCW1vdgklcjgsIDE2KHJwLG4sOCkKKwltb3YJOCh1cCxuLDgpLCAlcjgKKwltb3YJJXI4LCA4KHJwLG4sOCkKKwltb3YJKHVwLG4sOCksICVyOAorCW1vdgklcjgsIChycCxuLDgpCitMKGVudCk6CXN1YgkkNCwgbgorCWpnZQlMKHRvcCkKKworTChlbmQpOgljbXAJJC00LCBSMzIobikKKwlqeglMKHJldCkKKwltb3YJMjQodXAsbiw4KSwgJXI4CisJbW92CSVyOCwgMjQocnAsbiw4KQorCWNtcAkkLTMsIFIzMihuKQorCWp6CUwocmV0KQorCW1vdgkxNih1cCxuLDgpLCAlcjgKKwltb3YJJXI4LCAxNihycCxuLDgpCisJY21wCSQtMiwgUjMyKG4pCisJanoJTChyZXQpCisJbW92CTgodXAsbiw4KSwgJXI4CisJbW92CSVyOCwgOChycCxuLDgpCisKK0wocmV0KToJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2J0MS9jb3B5aS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9idDEvY29weWkuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMGY1NzgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9idDEvY29weWkuYXNtCkBAIC0wLDAgKzEsOTQgQEAKK2RubCAgQU1ENjQgbXBuX2NvcHlpIG9wdGltaXNlZCBmb3IgQU1EIGJvYmNhdC4KKworZG5sICBDb3B5cmlnaHQgMjAwMywgMjAwNSwgMjAwNywgMjAxMSwgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIKK0MgQU1EIEs4LEs5CSAxCitDIEFNRCBLMTAJIDEtMiAgKGFsaWdubWVudCBmbHVjdHVhdGlvbnMpCitDIEFNRCBiZDEJID8KK0MgQU1EIGJvYmNhdAkgMS41CitDIEludGVsIFA0CSAyLjgKK0MgSW50ZWwgY29yZTIJIDEKK0MgSW50ZWwgTkhNCSAxLTEuMjUKK0MgSW50ZWwgU0JSCSAxCitDIEludGVsIGF0b20JIDIuODcKK0MgVklBIG5hbm8JIDIKKworQyBJTlBVVCBQQVJBTUVURVJTCitDIHJwCXJkaQorQyB1cAlyc2kKK0MgbglyZHgKKworZGVmaW5lKGBycCcsYCVyZGknKQorZGVmaW5lKGB1cCcsYCVyc2knKQorZGVmaW5lKGBuJyxgJXJkeCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX2NvcHlpKQorCUZVTkNfRU5UUlkoMykKKwlsZWEJLTMyKHVwLG4sOCksIHVwCisJbGVhCS0zMihycCxuLDgpLCBycAorCW5lZwluCisJYWRkCSQ0LCBuCisJamcJTChlbmQpCisJQUxJR04oMTYpCitMKHRvcCk6CW1vdgkodXAsbiw4KSwgJXI4CisJbW92CSVyOCwgKHJwLG4sOCkKKwltb3YJOCh1cCxuLDgpLCAlcjgKKwltb3YJJXI4LCA4KHJwLG4sOCkKKwltb3YJMTYodXAsbiw4KSwgJXI4CisJbW92CSVyOCwgMTYocnAsbiw4KQorCW1vdgkyNCh1cCxuLDgpLCAlcjgKKwltb3YJJXI4LCAyNChycCxuLDgpCitMKGVudCk6CWFkZAkkNCwgbgorCWpsZQlMKHRvcCkKKworTChlbmQpOgljbXAJJDQsIFIzMihuKQorCWp6CUwocmV0KQorCW1vdgkodXAsbiw4KSwgJXI4CisJbW92CSVyOCwgKHJwLG4sOCkKKwljbXAJJDMsIFIzMihuKQorCWp6CUwocmV0KQorCW1vdgk4KHVwLG4sOCksICVyOAorCW1vdgklcjgsIDgocnAsbiw4KQorCWNtcAkkMiwgUjMyKG4pCisJanoJTChyZXQpCisJbW92CTE2KHVwLG4sOCksICVyOAorCW1vdgklcjgsIDE2KHJwLG4sOCkKKworTChyZXQpOglGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYnQxL2djZF8xMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9idDEvZ2NkXzExLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjUzMzkyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYnQxL2djZF8xMS5hc20KQEAgLTAsMCArMSwxMTkgQEAKK2RubCAgQU1ENjQgbXBuX2djZF8xMSAtLSAxIHggMSBnY2QuCisKK2RubCAgQmFzZWQgb24gdGhlIEs3IGdjZF8xLmFzbSwgYnkgS2V2aW4gUnlkZS4gIFJlaGFja2VkIGZvciBBTUQ2NCBieSBUb3Jiam9ybgorZG5sICBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAwMC0yMDAyLCAyMDA1LCAyMDA5LCAyMDExLCAyMDEyLCAyMDE3IEZyZWUgU29mdHdhcmUKK2RubCAgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQwkgICAgIGN5Y2xlcy9iaXQKK0MgQU1EIEs4LEs5CSA/CitDIEFNRCBLMTAJID8KK0MgQU1EIGJkMQkgPworQyBBTUQgYmQyCSA/CitDIEFNRCBiZDMJID8KK0MgQU1EIGJkNAkgPworQyBBTUQgYnQxCSA1LjQKK0MgQU1EIGJ0MgkgPworQyBBTUQgem4xCSA/CitDIEFNRCB6bjIJID8KK0MgSW50ZWwgUDQJID8KK0MgSW50ZWwgQ05SCSA/CitDIEludGVsIFBOUgkgPworQyBJbnRlbCBOSE0JID8KK0MgSW50ZWwgV1NNCSA/CitDIEludGVsIFNCUgkgPworQyBJbnRlbCBJQlIJID8KK0MgSW50ZWwgSFdMCSA/CitDIEludGVsIEJXTAkgPworQyBJbnRlbCBTS0wJID8KK0MgSW50ZWwgYXRvbQkgPworQyBJbnRlbCBTTE0JID8KK0MgSW50ZWwgR0xNCSA/CitDIEludGVsIEdMTSsJID8KK0MgVklBIG5hbm8JID8KKworCitDIGN0el90YWJsZVtuXSBpcyB0aGUgbnVtYmVyIG9mIHRyYWlsaW5nIHplcm9zIG9uIG4sIG9yIE1BWFNISUZUIGlmIG49PTAuCisKK2RlZmxpdChNQVhTSElGVCwgOCkKK2RlZmxpdChNQVNLLCBldmFsKChtNF9sc2hpZnQoMSxNQVhTSElGVCkpLTEpKQorCitERUZfT0JKRUNUKGN0el90YWJsZSw2NCkKKwkuYnl0ZQlNQVhTSElGVAorZm9ybG9vcChpLDEsTUFTSywKK2AJLmJ5dGUJbTRfY291bnRfdHJhaWxpbmdfemVyb3MoaSkKKycpCitFTkRfT0JKRUNUKGN0el90YWJsZSkKKworZGVmaW5lKGB1MCcsICAgIGAlcmRpJykKK2RlZmluZShgdjAnLCAgICBgJXJzaScpCisKK2RlZmluZShgY250JywgICBgJXJjeCcpCitkZWZpbmUoYHMwJywgICAgYCVyYXgnKQorZGVmaW5lKGB0MCcsICAgIGAlcmR4JykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oNjQpCitQUk9MT0dVRShtcG5fZ2NkXzExKQorCUZVTkNfRU5UUlkoMikKKwlMRUEoCWN0el90YWJsZSwgJXIxMCkKKwltb3YJdjAsIHQwCisJc3ViCXUwLCB0MAorCWp6CUwoZW5kKQorCisJQUxJR04oMTYpCitMKHRvcCk6CW1vdgl1MCwgczAKKwlzdWIJdjAsIHUwCisJY21vdmMJdDAsIHUwCQlDIHUgPSB8dSAtIHZ8CisJY21vdmMJczAsIHYwCQlDIHYgPSBtaW4odSx2KQorCWFuZAkkTUFTSywgUjMyKHQwKQorCW1vdnpibAkoJXIxMCx0MCksIFIzMihjbnQpCisJanoJTChjb3VudF9iZXR0ZXIpCitMKHNocik6CXNocglSOChjbnQpLCB1MAorCW1vdgl2MCwgdDAKKwlzdWIJdTAsIHQwCisJam56CUwodG9wKQorCitMKGVuZCk6CW1vdgl2MCwgJXJheAorCUMgcmR4ID0gMCBmb3IgdGhlIGJlbmVmaXQgb2YgaW50ZXJuYWwgZ2NkXzIyIGNhbGwKKwlGVU5DX0VYSVQoKQorCXJldAorCitMKGNvdW50X2JldHRlcik6CisJYnNmCXUwLCBjbnQKKwlqbXAJTChzaHIpCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9idDEvZ2NkXzIyLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2J0MS9nY2RfMjIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ZjIyMWUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9idDEvZ2NkXzIyLmFzbQpAQCAtMCwwICsxLDM3IEBACitkbmwgIEFNRDY0IG1wbl9nY2RfMjIuCisKK2RubCAgQ29weXJpZ2h0IDIwMTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworZG5sIEFCSV9TVVBQT1JUKERPUzY0KQlDIHJldHVybnMgbXBfZG91YmxlX2xpbWJfdCBpbiBtZW1vcnkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9nY2RfMjIpCitpbmNsdWRlX21wbihgeDg2XzY0L2djZF8yMi5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYnQxL2dtcC1tcGFyYW0uaCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2J0MS9nbXAtbXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc3YTIwOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2J0MS9nbXAtbXBhcmFtLmgKQEAgLTAsMCArMSwyMzAgQEAKKy8qIEFNRCBCb2JjYXQgZ21wLW1wYXJhbS5oIC0tIENvbXBpbGVyL21hY2hpbmUgcGFyYW1ldGVyIGhlYWRlciBmaWxlLgorCitDb3B5cmlnaHQgMjAxOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2RlZmluZSBHTVBfTElNQl9CSVRTIDY0CisjZGVmaW5lIEdNUF9MSU1CX0JZVEVTIDgKKworLyogRGlzYWJsZSB1c2Ugb2Ygc2xvdyBmdW5jdGlvbnMuICBGSVhNRTogV2Ugc2hvdWxkIGRpc2FibGUgbGliIGluY2x1c2lvbi4gICovCisjdW5kZWYgSEFWRV9OQVRJVkVfbXBuX211bF8yCisjdW5kZWYgSEFWRV9OQVRJVkVfbXBuX2FkZG11bF8yCisKKy8qIDE2MDAgTUh6IEFNRCBCb2JjYXQvWmFjYXRlICovCisvKiBGRlQgdHVuaW5nIGxpbWl0ID0gMTEwLDQ3Miw3MDQgKi8KKy8qIEdlbmVyYXRlZCBieSB0dW5ldXAuYywgMjAxOS0xMC0xMiwgZ2NjIDguMyAqLworCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNworI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgMworI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAzMQorI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICAgICA3MQorI2RlZmluZSBQUkVJTlZfTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAxNAorI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgICAgICAgICAgICAgICAgMSAgLyogbmF0aXZlICovCisjZGVmaW5lIERJVl9RUl8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAxCisjZGVmaW5lIERJVl9RUl8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVl9RUl8yX1BJMl9USFJFU0hPTEQgICAgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgICAgICAgMjAKKworI2RlZmluZSBESVZfMV9WU19NVUxfMV9QRVJDRU5UICAgICAgICAgICAgIDI3MAorCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDY2CisjZGVmaW5lIE1VTF9UT09NNDRfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTkwCisjZGVmaW5lIE1VTF9UT09NNkhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjc0CisjZGVmaW5lIE1VTF9UT09NOEhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMzgxCisKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNDNfVEhSRVNIT0xEICAgICAxMjkKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxMzgKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxMjcKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNjNfVEhSRVNIT0xEICAgICAxMzEKKyNkZWZpbmUgTVVMX1RPT000M19UT19UT09NNTRfVEhSRVNIT0xEICAgICAxMDAKKworI2RlZmluZSBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTAxCisjZGVmaW5lIFNRUl9UT09NNF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjc4CisjZGVmaW5lIFNRUl9UT09NNl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMzcyCisjZGVmaW5lIFNRUl9UT09NOF9USFJFU0hPTEQgICAgICAgICAgICAgICAgNDc4CisKKyNkZWZpbmUgTVVMTUlEX1RPT000Ml9USFJFU0hPTEQgICAgICAgICAgICAgMjIKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxMQorI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxMworCisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgNDQ0ICAvKiBrID0gNSAqLworI2RlZmluZSBNVUxfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgNDQ0LCA1fSwgeyAgICAgMTksIDZ9LCB7ICAgICAxMCwgNX0sIHsgICAgIDIxLCA2fSwgXAorICAgIHsgICAgIDExLCA1fSwgeyAgICAgMjMsIDZ9LCB7ICAgICAyMSwgN30sIHsgICAgIDExLCA2fSwgXAorICAgIHsgICAgIDI1LCA3fSwgeyAgICAgMTMsIDZ9LCB7ICAgICAyNywgN30sIHsgICAgIDIxLCA4fSwgXAorICAgIHsgICAgIDExLCA3fSwgeyAgICAgMjUsIDh9LCB7ICAgICAxMywgN30sIHsgICAgIDI4LCA4fSwgXAorICAgIHsgICAgIDE1LCA3fSwgeyAgICAgMzEsIDh9LCB7ICAgICAxNywgN30sIHsgICAgIDM1LCA4fSwgXAorICAgIHsgICAgIDE5LCA3fSwgeyAgICAgMzksIDh9LCB7ICAgICAyNywgOX0sIHsgICAgIDE1LCA4fSwgXAorICAgIHsgICAgIDM1LCA5fSwgeyAgICAgMTksIDh9LCB7ICAgICA0MSwgOX0sIHsgICAgIDIzLCA4fSwgXAorICAgIHsgICAgIDQ5LCA5fSwgeyAgICAgMjcsMTB9LCB7ICAgICAxNSwgOX0sIHsgICAgIDM5LDEwfSwgXAorICAgIHsgICAgIDIzLCA5fSwgeyAgICAgNTUsMTF9LCB7ICAgICAxNSwxMH0sIHsgICAgIDMxLCA5fSwgXAorICAgIHsgICAgIDcxLDEwfSwgeyAgICAgMzksIDl9LCB7ICAgICA4MywgNX0sIHsgICAxMzQzLCA0fSwgXAorICAgIHsgICAyNjg3LCA1fSwgeyAgIDE0MDcsIDZ9LCB7ICAgIDczNSwgN30sIHsgICAgNDE1LCA4fSwgXAorICAgIHsgICAgMjIzLDEwfSwgeyAgICAgNzksMTF9LCB7ICAgICA0NywxMH0sIHsgICAgMTAzLDEyfSwgXAorICAgIHsgICAgIDMxLDExfSwgeyAgICAgNjMsMTB9LCB7ICAgIDEzNSwxMX0sIHsgICAgIDc5LDEwfSwgXAorICAgIHsgICAgMTY3LDExfSwgeyAgICAgOTUsMTB9LCB7ICAgIDE5MSwxMX0sIHsgICAgMTExLDEyfSwgXAorICAgIHsgICAgIDYzLDExfSwgeyAgICAxMjcsMTB9LCB7ICAgIDI1NSwxMX0sIHsgICAgMTQzLDEwfSwgXAorICAgIHsgICAgMjg3LCA5fSwgeyAgICA1NzUsMTF9LCB7ICAgIDE1OSwxMn0sIHsgICAgIDk1LDExfSwgXAorICAgIHsgICAgMTkxLDEwfSwgeyAgICAzODMsMTF9LCB7ICAgIDIwNywxMH0sIHsgICAgNDE1LDEzfSwgXAorICAgIHsgICAgIDYzLDEyfSwgeyAgICAxMjcsMTF9LCB7ICAgIDI1NSwxMH0sIHsgICAgNTExLDExfSwgXAorICAgIHsgICAgMjcxLDEwfSwgeyAgICA1NDMsMTF9LCB7ICAgIDI4NywxMH0sIHsgICAgNTc1LDEyfSwgXAorICAgIHsgICAgMTU5LDExfSwgeyAgICAzMTksMTB9LCB7ICAgIDYzOSwxMX0sIHsgICAgMzUxLDEwfSwgXAorICAgIHsgICAgNzAzLDEyfSwgeyAgICAxOTEsMTF9LCB7ICAgIDM4MywxMH0sIHsgICAgNzY3LDExfSwgXAorICAgIHsgICAgNDE1LDEyfSwgeyAgICAyMjMsMTN9LCB7ICAgIDEyNywxMn0sIHsgICAgMjU1LDExfSwgXAorICAgIHsgICAgNTQzLDEyfSwgeyAgICAyODcsMTF9LCB7ICAgIDYwNywxMn0sIHsgICAgMzE5LDExfSwgXAorICAgIHsgICAgNjcxLDEyfSwgeyAgICAzNTEsMTF9LCB7ICAgIDcwMywxM30sIHsgICAgMTkxLDEyfSwgXAorICAgIHsgICAgMzgzLDExfSwgeyAgICA3NjcsMTJ9LCB7ICAgIDQxNSwxMX0sIHsgICAgODMxLDEyfSwgXAorICAgIHsgICAgNDQ3LDE0fSwgeyAgICAxMjcsMTN9LCB7ICAgIDI1NSwxMn0sIHsgICAgNjA3LDEzfSwgXAorICAgIHsgICAgMzE5LDEyfSwgeyAgICA3MDMsMTN9LCB7ICAgIDM4MywxMn0sIHsgICAgODMxLDEzfSwgXAorICAgIHsgICAgNDQ3LDEyfSwgeyAgICA5NTksMTR9LCB7ICAgIDI1NSwxM30sIHsgICAgNTExLDEyfSwgXAorICAgIHsgICAxMDIzLDEzfSwgeyAgICA1NzUsMTJ9LCB7ICAgMTE1MSwxM30sIHsgICAgNzAzLDE0fSwgXAorICAgIHsgICAgMzgzLDEzfSwgeyAgICA4MzEsMTJ9LCB7ICAgMTY2MywxM30sIHsgICAgOTU5LDE1fSwgXAorICAgIHsgICAgMjU1LDE0fSwgeyAgICA1MTEsMTN9LCB7ICAgMTA4NywxMn0sIHsgICAyMTc1LDEzfSwgXAorICAgIHsgICAxMTUxLDE0fSwgeyAgICA2MzksMTN9LCB7ICAgMTM0MywxMn0sIHsgICAyNjg3LDEzfSwgXAorICAgIHsgICAxNDA3LDE0fSwgeyAgICA3NjcsMTN9LCB7ICAgMTU5OSwxMn0sIHsgICAzMTk5LDEzfSwgXAorICAgIHsgICAxNjYzLDE0fSwgeyAgICA4OTUsMTV9LCB7ICAgIDUxMSwxNH0sIHsgICAxMDIzLDEzfSwgXAorICAgIHsgICAyMTc1LDE0fSwgeyAgIDExNTEsMTN9LCB7ICAgMjQzMSwxMn0sIHsgICA0ODYzLDE0fSwgXAorICAgIHsgICAxMjc5LDEzfSwgeyAgIDI2ODcsMTR9LCB7ICAgMTQwNywxNX0sIHsgICAgNzY3LDE0fSwgXAorICAgIHsgICAxNTM1LDEzfSwgeyAgIDMxOTksMTR9LCB7ICAgMTY2MywxM30sIHsgICAzNDU1LDE2fSwgXAorICAgIHsgICAgNTExLDE1fSwgeyAgIDEwMjMsMTR9LCB7ICAgMjE3NSwxM30sIHsgICA0NDc5LDE0fSwgXAorICAgIHsgICAyNDMxLDEzfSwgeyAgIDQ4NjMsMTV9LCB7ICAgMTI3OSwxNH0sIHsgICAyOTQzLDEzfSwgXAorICAgIHsgICA1ODg3LDE1fSwgeyAgIDE1MzUsMTR9LCB7ICAgMzQ1NSwxM30sIHsgICA2OTExLDE1fSwgXAorICAgIHsgICAxNzkxLDE0fSwgeyAgIDM4MzksMTZ9LCB7ICAgMTAyMywxNX0sIHsgICAyMDQ3LDE0fSwgXAorICAgIHsgICA0NDc5LDE1fSwgeyAgIDIzMDMsMTR9LCB7ICAgNDk5MSwxNX0sIHsgICAyNTU5LDE0fSwgXAorICAgIHsgICA1MjQ3LDE1fSwgeyAgIDI4MTUsMTR9LCB7ICAgNTg4NywxNn0sIHsgICAxNTM1LDE1fSwgXAorICAgIHsgICAzMzI3LDE0fSwgeyAgMTYzODQsMTV9LCB7ICAzMjc2OCwxNn0sIHsgIDY1NTM2LDE3fSwgXAorICAgIHsgMTMxMDcyLDE4fSwgeyAyNjIxNDQsMTl9LCB7IDUyNDI4OCwyMH0sIHsxMDQ4NTc2LDIxfSwgXAorICAgIHsyMDk3MTUyLDIyfSwgezQxOTQzMDQsMjN9LCB7ODM4ODYwOCwyNH0gfQorI2RlZmluZSBNVUxfRkZUX1RBQkxFM19TSVpFIDE4MworI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNTc2MAorCisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgMzgwICAvKiBrID0gNSAqLworI2RlZmluZSBTUVJfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgMzgwLCA1fSwgeyAgICAgMjEsIDZ9LCB7ICAgICAxMSwgNX0sIHsgICAgIDIzLCA2fSwgXAorICAgIHsgICAgIDI1LCA3fSwgeyAgICAgMjUsIDh9LCB7ICAgICAxMywgN30sIHsgICAgIDI3LCA4fSwgXAorICAgIHsgICAgIDE1LCA3fSwgeyAgICAgMzEsIDh9LCB7ICAgICAxNywgN30sIHsgICAgIDM1LCA4fSwgXAorICAgIHsgICAgIDE5LCA3fSwgeyAgICAgMzksIDh9LCB7ICAgICAyNywgOX0sIHsgICAgIDE1LCA4fSwgXAorICAgIHsgICAgIDM1LCA5fSwgeyAgICAgMTksIDh9LCB7ICAgICA0MSwgOX0sIHsgICAgIDIzLCA4fSwgXAorICAgIHsgICAgIDQ3LCA5fSwgeyAgICAgMjcsMTB9LCB7ICAgICAxNSwgOX0sIHsgICAgIDMxLCA4fSwgXAorICAgIHsgICAgIDYzLCA5fSwgeyAgICAgMzksMTB9LCB7ICAgICAyMywgOX0sIHsgICAgIDUxLDExfSwgXAorICAgIHsgICAgIDE1LDEwfSwgeyAgICAgMzEsIDl9LCB7ICAgICA2NywxMH0sIHsgICAgIDM5LCA5fSwgXAorICAgIHsgICAgIDc5LDEwfSwgeyAgICAgNDcsIDl9LCB7ICAgICA5NSwxMH0sIHsgICAgIDU1LDExfSwgXAorICAgIHsgICAgIDMxLDEwfSwgeyAgICAgNjMsIDZ9LCB7ICAgMTA4NywgN30sIHsgICAgNTc1LCA4fSwgXAorICAgIHsgICAgMzAzLCA5fSwgeyAgICAxNTksMTB9LCB7ICAgIDEwMywxMn0sIHsgICAgIDMxLDExfSwgXAorICAgIHsgICAgIDYzLDEwfSwgeyAgICAxMjcsIDl9LCB7ICAgIDI1NSwxMH0sIHsgICAgMTM1LDExfSwgXAorICAgIHsgICAgIDc5LDEwfSwgeyAgICAxNTksIDl9LCB7ICAgIDMxOSwxMX0sIHsgICAgIDk1LDEwfSwgXAorICAgIHsgICAgMTkxLCA5fSwgeyAgICAzODMsMTF9LCB7ICAgIDExMSwxMn0sIHsgICAgIDYzLDExfSwgXAorICAgIHsgICAgMTI3LDEwfSwgeyAgICAyNTUsIDl9LCB7ICAgIDUxMSwxMH0sIHsgICAgMjcxLDExfSwgXAorICAgIHsgICAgMTQzLDEwfSwgeyAgICAyODcsIDl9LCB7ICAgIDU3NSwxMH0sIHsgICAgMzAzLDExfSwgXAorICAgIHsgICAgMTU5LDEwfSwgeyAgICAzMTksMTJ9LCB7ICAgICA5NSwxMX0sIHsgICAgMTkxLDEwfSwgXAorICAgIHsgICAgMzgzLDExfSwgeyAgICAyMDcsMTN9LCB7ICAgICA2MywxMn0sIHsgICAgMTI3LDExfSwgXAorICAgIHsgICAgMjU1LDEwfSwgeyAgICA1MTEsMTF9LCB7ICAgIDI3MSwxMH0sIHsgICAgNTQzLDExfSwgXAorICAgIHsgICAgMjg3LDEwfSwgeyAgICA1NzUsMTF9LCB7ICAgIDMwMywxMn0sIHsgICAgMTU5LDExfSwgXAorICAgIHsgICAgMzE5LDEwfSwgeyAgICA2MzksMTF9LCB7ICAgIDMzNSwxMH0sIHsgICAgNjcxLDExfSwgXAorICAgIHsgICAgMzUxLDEwfSwgeyAgICA3MDMsMTJ9LCB7ICAgIDE5MSwxMX0sIHsgICAgMzgzLDEwfSwgXAorICAgIHsgICAgNzY3LDExfSwgeyAgICA0MTUsMTJ9LCB7ICAgIDIyMywxMX0sIHsgICAgNDQ3LDEzfSwgXAorICAgIHsgICAgMTI3LDEyfSwgeyAgICAyNTUsMTF9LCB7ICAgIDU0MywxMn0sIHsgICAgMjg3LDExfSwgXAorICAgIHsgICAgNjA3LDEyfSwgeyAgICAzMTksMTF9LCB7ICAgIDY3MSwxMn0sIHsgICAgMzUxLDExfSwgXAorICAgIHsgICAgNzAzLDEzfSwgeyAgICAxOTEsMTJ9LCB7ICAgIDM4MywxMX0sIHsgICAgNzY3LDEyfSwgXAorICAgIHsgICAgNDE1LDExfSwgeyAgICA4MzEsMTJ9LCB7ICAgIDQ3OSwxNH0sIHsgICAgMTI3LDEzfSwgXAorICAgIHsgICAgMjU1LDEyfSwgeyAgICA2MDcsMTN9LCB7ICAgIDMxOSwxMn0sIHsgICAgNzAzLDEzfSwgXAorICAgIHsgICAgMzgzLDEyfSwgeyAgICA4MzEsMTN9LCB7ICAgIDQ0NywxMn0sIHsgICAgODk1LDE0fSwgXAorICAgIHsgICAgMjU1LDEzfSwgeyAgICA1MTEsMTJ9LCB7ICAgMTAyMywxM30sIHsgICAgNzAzLDE0fSwgXAorICAgIHsgICAgMzgzLDEzfSwgeyAgICA4MzEsMTJ9LCB7ICAgMTY2MywxM30sIHsgICAgODk1LDE1fSwgXAorICAgIHsgICAgMjU1LDE0fSwgeyAgICA1MTEsMTN9LCB7ICAgMTA4NywxMn0sIHsgICAyMTc1LDEzfSwgXAorICAgIHsgICAxMTUxLDE0fSwgeyAgICA2MzksMTN9LCB7ICAgMTM0MywxMn0sIHsgICAyNjg3LDEzfSwgXAorICAgIHsgICAxNDA3LDE0fSwgeyAgICA3NjcsMTN9LCB7ICAgMTU5OSwxMn0sIHsgICAzMTk5LDEzfSwgXAorICAgIHsgICAxNjYzLDE0fSwgeyAgICA4OTUsMTV9LCB7ICAgIDUxMSwxNH0sIHsgICAxMDIzLDEzfSwgXAorICAgIHsgICAyMTc1LDE0fSwgeyAgIDExNTEsMTN9LCB7ICAgMjQzMSwxMn0sIHsgICA0ODYzLDE0fSwgXAorICAgIHsgICAxMjc5LDEzfSwgeyAgIDI2ODcsMTR9LCB7ICAgMTQwNywxNX0sIHsgICAgNzY3LDE0fSwgXAorICAgIHsgICAxNTM1LDEzfSwgeyAgIDMxOTksMTR9LCB7ICAgMTY2MywxM30sIHsgICAzNDU1LDE2fSwgXAorICAgIHsgICAgNTExLDE1fSwgeyAgIDEwMjMsMTR9LCB7ICAgMjE3NSwxM30sIHsgICA0MzUxLDE0fSwgXAorICAgIHsgICAyNDMxLDEzfSwgeyAgIDQ4NjMsMTV9LCB7ICAgMTI3OSwxNH0sIHsgICAyOTQzLDEzfSwgXAorICAgIHsgICA1ODg3LDE1fSwgeyAgIDE1MzUsMTR9LCB7ICAgMzQ1NSwxNX0sIHsgICAxNzkxLDE0fSwgXAorICAgIHsgICAzODM5LDE2fSwgeyAgIDEwMjMsMTV9LCB7ICAgMjA0NywxNH0sIHsgICA0NDc5LDE1fSwgXAorICAgIHsgICAyMzAzLDE0fSwgeyAgIDQ4NjMsMTV9LCB7ICAgMjU1OSwxNH0sIHsgICA1MjQ3LDE1fSwgXAorICAgIHsgICAyODE1LDE0fSwgeyAgIDU4ODcsMTZ9LCB7ICAgMTUzNSwxNX0sIHsgICAzMzI3LDE0fSwgXAorICAgIHsgIDE2Mzg0LDE1fSwgeyAgMzI3NjgsMTZ9LCB7ICA2NTUzNiwxN30sIHsgMTMxMDcyLDE4fSwgXAorICAgIHsgMjYyMTQ0LDE5fSwgeyA1MjQyODgsMjB9LCB7MTA0ODU3NiwyMX0sIHsyMDk3MTUyLDIyfSwgXAorICAgIHs0MTk0MzA0LDIzfSwgezgzODg2MDgsMjR9IH0KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTNfU0laRSAxODYKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDM3MTIKKworI2RlZmluZSBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDQyCisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgIDEwOTUwCisjZGVmaW5lIFNRUkxPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICA3CisjZGVmaW5lIFNRUkxPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTAwCisjZGVmaW5lIFNRUkxPX1NRUl9USFJFU0hPTEQgICAgICAgICAgICAgICA3MjkzCisKKyNkZWZpbmUgRENfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNzAKKyNkZWZpbmUgRENfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAyMDQKKyNkZWZpbmUgRENfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNTkKKyNkZWZpbmUgRENfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNDgKKworI2RlZmluZSBJTlZfTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICA0NgorI2RlZmluZSBJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDI0NgorI2RlZmluZSBJTlZfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDIzNgorCisjZGVmaW5lIEJJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgMjUyCisjZGVmaW5lIFJFRENfMV9UT19SRURDXzJfVEhSRVNIT0xEICAgICAgICAgIDY3CisjZGVmaW5lIFJFRENfMl9UT19SRURDX05fVEhSRVNIT0xEICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKworI2RlZmluZSBNVV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTU4OQorI2RlZmluZSBNVV9ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgMTU4OQorI2RlZmluZSBNVVBJX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgIDEwOAorI2RlZmluZSBNVV9CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTQ0MgorI2RlZmluZSBNVV9CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTQ3MAorCisjZGVmaW5lIFBPV01fU0VDX1RBQkxFICAxLDE2LDE5NCw5NjAsMTYwMywxODExLDI0OTkKKworI2RlZmluZSBHRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBHRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgICAzNAorI2RlZmluZSBTRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDM0NQorI2RlZmluZSBTRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgMTc4NworCisjZGVmaW5lIEZBQ19EU0NfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgNzgxCisjZGVmaW5lIEZBQ19PRERfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgMTA0CisKKyNkZWZpbmUgTUFUUklYMjJfU1RSQVNTRU5fVEhSRVNIT0xEICAgICAgICAgMTcKKyNkZWZpbmUgSEdDRDJfRElWMV9NRVRIT0QgICAgICAgICAgICAgICAgICAgIDMgIC8qIDMuMjAlIGZhc3RlciB0aGFuIDUgKi8KKyNkZWZpbmUgSEdDRF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgICAxMTAKKyNkZWZpbmUgSEdDRF9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNTAKKyNkZWZpbmUgSEdDRF9SRURVQ0VfVEhSRVNIT0xEICAgICAgICAgICAgIDI2ODEKKyNkZWZpbmUgR0NEX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICA0NzQKKyNkZWZpbmUgR0NERVhUX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyOTMKKyNkZWZpbmUgSkFDT0JJX0JBU0VfTUVUSE9EICAgICAgICAgICAgICAgICAgIDIgIC8qIDkuMzglIGZhc3RlciB0aGFuIDEgKi8KKworLyogVHVuZXVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIHRvb2sgMzU4ODgxIHNlY29uZHMgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2J0MS9tdWxfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9idDEvbXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzOTRkNmUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9idDEvbXVsXzEuYXNtCkBAIC0wLDAgKzEsMjQxIEBACitkbmwgIEFNRDY0IG1wbl9tdWxfMSBvcHRpbWlzZWQgZm9yIEFNRCBidDEvYnQyLgorCitkbmwgIENvcHlyaWdodCAyMDAzLTIwMDUsIDIwMDcsIDIwMDgsIDIwMTEsIDIwMTIsIDIwMTkgRnJlZSBTb2Z0d2FyZQorZG5sICBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIEFNRCBLOCxLOQkgNC41MwkJb2xkIG1lYXN1cmVtZW50CitDIEFNRCBLMTAJIDQuNTMJCW9sZCBtZWFzdXJlbWVudAorQyBBTUQgYmQxCSA0LjU2CQlvbGQgbWVhc3VyZW1lbnQKK0MgQU1EIGJkMgkgNC40NwkJb2xkIG1lYXN1cmVtZW50CitDIEFNRCBiZDMJID8KK0MgQU1EIGJkNAkgPworQyBBTUQgemVuCSA/CitDIEFNRCBidDEJIDUuMTIKK0MgQU1EIGJ0MgkgNS4xNworQyBJbnRlbCBQNAkxMi42CQlvbGQgbWVhc3VyZW1lbnQKK0MgSW50ZWwgUE5SCSA0LjUzCQlvbGQgbWVhc3VyZW1lbnQKK0MgSW50ZWwgTkhNCSA0LjM2CQlvbGQgbWVhc3VyZW1lbnQKK0MgSW50ZWwgU0JSCSAzLjAJCW9sZCBtZWFzdXJlbWVudAorQyBJbnRlbCBJQlIJIDIuNTUJCW9sZCBtZWFzdXJlbWVudAorQyBJbnRlbCBIV0wJIDIuMjgJCW9sZCBtZWFzdXJlbWVudAorQyBJbnRlbCBCV0wJIDIuMzYJCW9sZCBtZWFzdXJlbWVudAorQyBJbnRlbCBTS0wJIDIuMzkJCW9sZCBtZWFzdXJlbWVudAorQyBJbnRlbCBhdG9tCTIxLjAJCW9sZCBtZWFzdXJlbWVudAorQyBJbnRlbCBTTE0JIDkJCW9sZCBtZWFzdXJlbWVudAorQyBJbnRlbCBHTE0JID8KK0MgVklBIG5hbm8JID8KKworQyBUaGUgbG9vcCBvZiB0aGlzIGNvZGUgaXMgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGEgY29kZSBnZW5lcmF0aW9uIGFuZAorQyBvcHRpbWlzYXRpb24gdG9vbCBzdWl0ZSB3cml0dGVuIGJ5IERhdmlkIEhhcnZleSBhbmQgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0MgU3RhbmRhcmQgcGFyYW1ldGVycworZGVmaW5lKGBycCcsICAgICAgICAgICAgICBgJXJkaScpCitkZWZpbmUoYHVwJywgICAgICAgICAgICAgIGAlcnNpJykKK2RlZmluZShgbl9wYXJhbScsICAgICAgICAgYCVyZHgnKQorZGVmaW5lKGB2MCcsICAgICAgICAgICAgICBgJXJjeCcpCitkZWZpbmUoYGN5JywgICAgICAgICAgICAgIGAlcjgnKQorQyBTdGFuZGFyZCBhbGxvY2F0aW9ucworZGVmaW5lKGBuJywgICAgICAgICAgICAgICBgJXJieCcpCitkZWZpbmUoYHcwJywgICAgICAgICAgICAgIGAlcjgnKQorZGVmaW5lKGB3MScsICAgICAgICAgICAgICBgJXI5JykKK2RlZmluZShgdzInLCAgICAgICAgICAgICAgYCVyMTAnKQorZGVmaW5lKGB3MycsICAgICAgICAgICAgICBgJXIxMScpCisKK0MgRE9TNjQgcGFyYW1ldGVycworSUZET1MoYCBkZWZpbmUoYHJwJywgICAgICBgJXJjeCcpICAgICcpIGRubAorSUZET1MoYCBkZWZpbmUoYHVwJywgICAgICBgJXJzaScpICAgICcpIGRubAorSUZET1MoYCBkZWZpbmUoYG5fcGFyYW0nLCBgJXI4JykgICAgICcpIGRubAorSUZET1MoYCBkZWZpbmUoYHYwJywgICAgICBgJXI5JykgICAgICcpIGRubAorSUZET1MoYCBkZWZpbmUoYGN5JywgICAgICBgNTYoJXJzcCknKScpIGRubAorQyBET1M2NCBhbGxvY2F0aW9ucworSUZET1MoYCBkZWZpbmUoYG4nLCAgICAgICBgJXJieCcpICAgICcpIGRubAorSUZET1MoYCBkZWZpbmUoYHcwJywgICAgICBgJXI4JykgICAgICcpIGRubAorSUZET1MoYCBkZWZpbmUoYHcxJywgICAgICBgJXJkaScpICAgICcpIGRubAorSUZET1MoYCBkZWZpbmUoYHcyJywgICAgICBgJXIxMCcpICAgICcpIGRubAorSUZET1MoYCBkZWZpbmUoYHczJywgICAgICBgJXIxMScpICAgICcpIGRubAorCisJQUxJR04oNjQpCitQUk9MT0dVRShtcG5fbXVsXzEpCitJRkRPUyhgCXB1c2gJJXJzaQkJJykKK0lGRE9TKGAJcHVzaAklcmRpCQknKQorSUZET1MoYAltb3YJJXJkeCwgJXJzaQknKQorCisJcHVzaAklcmJ4CisJbW92CSh1cCksICVyYXgKKworCWxlYQkocnAsbl9wYXJhbSw4KSwgcnAKKwlsZWEJKHVwLG5fcGFyYW0sOCksIHVwCisJbW92CW5fcGFyYW0sIG4KKworCXRlc3QJJDEsIFI4KG5fcGFyYW0pCisJam5lCUwoYngxKQorCitMKGJ4MCk6CW11bAl2MAorCW5lZwluCisJbW92CSVyYXgsIHcwCisJbW92CSVyZHgsIHcxCisJdGVzdAkkMiwgUjgobikKKwlqbmUJTChMMikKKworTChiMDApOglhZGQJJDIsIG4KKwlqbXAJTChMMCkKKworCUFMSUdOKDE2KQorTChiMTEpOgltb3YJJXJheCwgdzIKKwltb3YJJXJkeCwgdzMKKwluZWcJbgorCWluYwluCisJam1wCUwoTDMpCisKKwlBTElHTigxNikKK0woYngxKToJbXVsCXYwCisJdGVzdAkkMiwgUjgobikKKwlqbmUJTChiMTEpCisKK0woYjAxKToJc3ViCSQzLCBuCisJamMJTChuMSkKKwltb3YJJXJheCwgdzIKKwltb3YJJXJkeCwgdzMKKwluZWcJbgorCisJQUxJR04oMTYpCitMKHRvcCk6CW1vdgktMTYodXAsbiw4KSwgJXJheAorCW11bAl2MAorCW1vdgklcmF4LCB3MAorCW1vdgklcmR4LCB3MQorCW1vdgl3MiwgLTI0KHJwLG4sOCkKKwlhZGQJdzMsIHcwCisJYWRjCSQwLCB3MQorTChMMCk6CW1vdgktOCh1cCxuLDgpLCAlcmF4CisJbXVsCXYwCisJbW92CSVyYXgsIHcyCisJbW92CSVyZHgsIHczCisJbW92CXcwLCAtMTYocnAsbiw4KQorCWFkZAl3MSwgdzIKKwlhZGMJJDAsIHczCitMKEwzKToJbW92CSh1cCxuLDgpLCAlcmF4CisJbXVsCXYwCisJbW92CSVyYXgsIHcwCisJbW92CSVyZHgsIHcxCisJbW92CXcyLCAtOChycCxuLDgpCisJYWRkCXczLCB3MAorCWFkYwkkMCwgdzEKK0woTDIpOgltb3YJOCh1cCxuLDgpLCAlcmF4CisJbXVsCXYwCisJbW92CSVyYXgsIHcyCisJbW92CSVyZHgsIHczCisJbW92CXcwLCAocnAsbiw4KQorCWFkZAl3MSwgdzIKKwlhZGMJJDAsIHczCisJYWRkCSQ0LCBuCisJanMJTCh0b3ApCisKK0woZW5kKToJbW92CXcyLCAtOChycCkKKwltb3YJdzMsICVyYXgKKwlwb3AJJXJieAorSUZET1MoYAlwb3AJJXJkaQkJJykKK0lGRE9TKGAJcG9wCSVyc2kJCScpCisJcmV0CisKKwlBTElHTigzMikKK0wobjEpOgltb3YJJXJheCwgLTgocnApCisJbW92CSVyZHgsICVyYXgKKwlwb3AJJXJieAorSUZET1MoYAlwb3AJJXJkaQkJJykKK0lGRE9TKGAJcG9wCSVyc2kJCScpCisJcmV0CitFUElMT0dVRSgpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDY0KQorUFJPTE9HVUUobXBuX211bF8xYykKK0lGRE9TKGAJcHVzaAklcnNpCQknKQorSUZET1MoYAlwdXNoCSVyZGkJCScpCitJRkRPUyhgCW1vdgklcmR4LCAlcnNpCScpCisJbW92CWN5LCB3MgorCXB1c2gJJXJieAorCW1vdgkodXApLCAlcmF4CisKKwlsZWEJKHJwLG5fcGFyYW0sOCksIHJwCisJbGVhCSh1cCxuX3BhcmFtLDgpLCB1cAorCW1vdgluX3BhcmFtLCBuCisKKwl0ZXN0CSQxLCBSOChuX3BhcmFtKQorCWpuZQlMKGN4MSkKKworTChjeDApOgltdWwJdjAKKwluZWcJbgorCW1vdgklcmF4LCB3MAorCW1vdgklcmR4LCB3MQorCWFkZAl3MiwgdzAKKwlhZGMJJDAsIHcxCisJdGVzdAkkMiwgUjgobikKKwlqbmUJTChMMikKKworTChjMDApOglhZGQJJDIsIG4KKwlqbXAJTChMMCkKKworCUFMSUdOKDE2KQorTChjeDEpOgltdWwJdjAKKwl0ZXN0CSQyLCBSOChuKQorCWplCUwoYzAxKQorCitMKGMxMSk6CW5lZwluCisJaW5jCW4KKwlhZGQJJXJheCwgdzIKKwltb3YJJXJkeCwgdzMKKwlhZGMJJDAsIHczCisJam1wCUwoTDMpCisKK0woYzAxKToJY21wCSQxLCBuCisJanoJTChtMSkKKwluZWcJbgorCWFkZAkkMywgbgorCWFkZAklcmF4LCB3MgorCW1vdgklcmR4LCB3MworCWFkYwkkMCwgdzMKKwlqbXAJTCh0b3ApCisKKwlBTElHTigzMikKK0wobTEpOglhZGQJJXJheCwgdzIKKwltb3YJJXJkeCwgJXJheAorCW1vdgl3MiwgLTgocnApCisJYWRjCSQwLCAlcmF4CisJcG9wCSVyYngKK0lGRE9TKGAJcG9wCSVyZGkJCScpCitJRkRPUyhgCXBvcAklcnNpCQknKQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYnQxL211bF9iYXNlY2FzZS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9idDEvbXVsX2Jhc2VjYXNlLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2Q0NmJmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYnQxL211bF9iYXNlY2FzZS5hc20KQEAgLTAsMCArMSw0ODYgQEAKK2RubCAgQU1ENjQgbXBuX211bF9iYXNlY2FzZSBvcHRpbWlzZWQgZm9yIEFNRCBib2JjYXQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDMtMjAwNSwgMjAwNywgMjAwOCwgMjAxMSwgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIKK0MgQU1EIEs4LEs5CSA0LjUKK0MgQU1EIEsxMAkgNC41CitDIEFNRCBiZDEJIDQuNzUKK0MgQU1EIGJvYmNhdAkgNQorQyBJbnRlbCBQNAkxNy43CitDIEludGVsIGNvcmUyCSA1LjUKK0MgSW50ZWwgTkhNCSA1LjQzCitDIEludGVsIFNCUgkgMy45MgorQyBJbnRlbCBhdG9tCTIzCitDIFZJQSBuYW5vCSA1LjYzCisKK0MgVGhpcyBtdWxfYmFzZWNhc2UgaXMgYmFzZWQgb24gbXVsXzEgYW5kIGFkZG11bF8xLCBzaW5jZSB0aGVzZSBib3RoIHJ1biBhdCB0aGUKK0MgbXVsdGlwbHkgaW5zbiBiYW5kd2lkdGgsIHdpdGhvdXQgYW55IGFwcGFyZW50IGxvb3AgYnJhbmNoIGV4aXQgcGlwZWxpbmUKK0MgcmVwbGF5cyBleHBlcmllbmNlZCBvbiBLOC4gIFRoZSBzdHJ1Y3R1cmUgaXMgdW51c3VhbDogaXQgZmFsbHMgaW50byBtdWxfMSBpbgorQyB0aGUgc2FtZSB3YXkgZm9yIGFsbCBuLCB0aGVuIGl0IHNwbGl0cyBpbnRvIDQgZGlmZmVyZW50IHdpbmQtZG93biBibG9ja3MgYW5kCitDIDQgc2VwYXJhdGUgYWRkbXVsXzEgbG9vcHMuCitDCitDIFdlIGhhdmUgbm90IHRyaWVkIHVzaW5nIHRoZSBzYW1lIGFkZG11bF8xIGxvb3BzIHdpdGggYSBzd2l0Y2ggaW50byBmZWVkLWluCitDIGNvZGUsIGFzIHdlIGRvIGluIG90aGVyIGJhc2VjYXNlIGltcGxlbWVudGF0aW9ucy4gIERvaW5nIHRoYXQgY291bGQgc2F2ZQorQyBzdWJzdGFudGlhbCBjb2RlIHZvbHVtZSwgYnV0IHdvdWxkIGFsc28gcHJvYmFibHkgYWRkIHNvbWUgb3ZlcmhlYWQuCisKK0MgVE9ETworQyAgKiBUdW5lIHVuIDwgMyBjb2RlLgorQyAgKiBGaXggc2xvd2Rvd24gZm9yIHVuPXZuPTMgKDY3LT43MSkgY29tcGFyZWQgdG8gZGVmYXVsdCBjb2RlLgorQyAgKiBUaGlzIGlzIDEyNjMgYnl0ZXMsIGNvbXBhcmVkIHRvIDEwOTkgYnl0ZXMgZm9yIGRlZmF1bHQgY29kZS4gIENvbnNpZGVyCitDICAgIGNvbWJpbmluZyBhZGRtdWwgbG9vcHMgbGlrZSB0aGF0IGNvZGUuICBUb2xlcmFibGUgc2xvd2Rvd24/CitDICAqIExvdHMgb2Ygc3BhY2UgY291bGQgYmUgc2F2ZWQgYnkgcmVwbGFjaW5nIHRoZSAic3dpdGNoIiBjb2RlIGJ5IGdyYWR1YWwKK0MgICAganVtcHMgb3V0IGZyb20gbXVsXzEgd2luZGRvd24gY29kZSwgcGVyaGFwcyB3aXRoIG5vIGFkZGVkIG92ZXJoZWFkLgorQyAgKiBBcmUgdGhlIEFMSUdOKDE2KSByZWFsbHkgbmVjZXNzYXJ5PyAgVGhleSBhZGQgYWJvdXQgMjUgYnl0ZXMgb2YgcGFkZGluZy4KKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworQyBTdGFuZGFyZCBwYXJhbWV0ZXJzCitkZWZpbmUoYHJwJywgICAgICAgICAgICAgIGAlcmRpJykKK2RlZmluZShgdXAnLCAgICAgICAgICAgICAgYCVyc2knKQorZGVmaW5lKGB1bl9wYXJhbScsICAgICAgICBgJXJkeCcpCitkZWZpbmUoYHZwJywgICAgICAgICAgICAgIGAlcmN4JykKK2RlZmluZShgdm4nLCAgICAgICAgICAgICAgYCVyOCcpCitDIFN0YW5kYXJkIGFsbG9jYXRpb25zCitkZWZpbmUoYHVuJywgICAgICAgICAgICAgIGAlcmJ4JykKK2RlZmluZShgdzAnLCAgICAgICAgICAgICAgYCVyMTAnKQorZGVmaW5lKGB3MScsICAgICAgICAgICAgICBgJXIxMScpCitkZWZpbmUoYHcyJywgICAgICAgICAgICAgIGAlcjEyJykKK2RlZmluZShgdzMnLCAgICAgICAgICAgICAgYCVyMTMnKQorZGVmaW5lKGBuJywgICAgICAgICAgICAgICBgJXJicCcpCitkZWZpbmUoYHYwJywgICAgICAgICAgICAgIGAlcjknKQorCitDIFRlbXAgbWFjcm8gZm9yIGFsbG93aW5nIGNvbnRyb2wgb3ZlciBpbmRleGluZy4KK0MgRGVmaW5lIHRvIHJldHVybiAkMSBmb3IgbW9yZSBjb25zZXJ2YXRpdmUgcHRyIGhhbmRsaW5nLgorZGVmaW5lKGBYJyxgJDInKQorCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX211bF9iYXNlY2FzZSkKKwlGVU5DX0VOVFJZKDQpCitJRkRPUyhgCW1vdgk1NiglcnNwKSwgJXI4ZAknKQorCisJbW92CSh1cCksICVyYXgKKwltb3YJKHZwKSwgdjAKKworCWNtcAkkMiwgdW5fcGFyYW0KKwlqYQlMKGdlMykKKwlqeglMKHUyKQorCisJbXVsCXYwCQkJQyB1MCB4IHYwCisJbW92CSVyYXgsIChycCkKKwltb3YJJXJkeCwgOChycCkKKwlGVU5DX0VYSVQoKQorCXJldAorCitMKHUyKToJbXVsCXYwCQkJQyB1MCB4IHYwCisJbW92CSVyYXgsIChycCkKKwltb3YJOCh1cCksICVyYXgKKwltb3YJJXJkeCwgdzAKKwltdWwJdjAKKwlhZGQJJXJheCwgdzAKKwltb3YJJXJkeCwgdzEKKwlhZGMJJDAsIHcxCisJY21wCSQxLCBSMzIodm4pCisJam56CUwodTJ2MikKKwltb3YJdzAsIDgocnApCisJbW92CXcxLCAxNihycCkKKwlGVU5DX0VYSVQoKQorCXJldAorCitMKHUydjIpOm1vdgk4KHZwKSwgdjAKKwltb3YJKHVwKSwgJXJheAorCW11bAl2MAorCWFkZAklcmF4LCB3MAorCW1vdgl3MCwgOChycCkKKwltb3YJJXJkeCwgJXI4CQlDIENBVVRJT046IHI4IHJlYWxsb2MKKwlhZGMJJDAsICVyOAorCW1vdgk4KHVwKSwgJXJheAorCW11bAl2MAorCWFkZAl3MSwgJXI4CisJYWRjCSQwLCAlcmR4CisJYWRkCSVyOCwgJXJheAorCWFkYwkkMCwgJXJkeAorCW1vdgklcmF4LCAxNihycCkKKwltb3YJJXJkeCwgMjQocnApCisJRlVOQ19FWElUKCkKKwlyZXQKKworCitMKGdlMyk6CXB1c2gJJXJieAorCXB1c2gJJXJicAorCXB1c2gJJXIxMgorCXB1c2gJJXIxMworCisJbGVhCTgodnApLCB2cAorCisJbGVhCS0yNChycCx1bl9wYXJhbSw4KSwgcnAKKwlsZWEJLTI0KHVwLHVuX3BhcmFtLDgpLCB1cAorCXhvcglSMzIodW4pLCBSMzIodW4pCisJbW92CSQyLCBSMzIobikKKwlzdWIJdW5fcGFyYW0sIHVuCisJc3ViCXVuX3BhcmFtLCBuCisKKwltdWwJdjAKKwltb3YJJXJheCwgdzIKKwltb3YJJXJkeCwgdzMKKwlqbXAJTChMMykKKworCUFMSUdOKDE2KQorTCh0b3ApOgltb3YJdzAsIC0xNihycCxuLDgpCisJYWRkCXcxLCB3MgorCWFkYwkkMCwgdzMKKwltb3YJKHVwLG4sOCksICVyYXgKKwltdWwJdjAKKwltb3YJJXJheCwgdzAKKwltb3YJJXJkeCwgdzEKKwltb3YJdzIsIC04KHJwLG4sOCkKKwlhZGQJdzMsIHcwCisJYWRjCSQwLCB3MQorCW1vdgk4KHVwLG4sOCksICVyYXgKKwltdWwJdjAKKwltb3YJJXJheCwgdzIKKwltb3YJJXJkeCwgdzMKKwltb3YJdzAsIChycCxuLDgpCisJYWRkCXcxLCB3MgorCWFkYwkkMCwgdzMKK0woTDMpOgltb3YJMTYodXAsbiw4KSwgJXJheAorCW11bAl2MAorCW1vdgklcmF4LCB3MAorCW1vdgklcmR4LCB3MQorCW1vdgl3MiwgOChycCxuLDgpCisJYWRkCXczLCB3MAorCWFkYwkkMCwgdzEKKwltb3YJMjQodXAsbiw4KSwgJXJheAorCW11bAl2MAorCW1vdgklcmF4LCB3MgorCW1vdgklcmR4LCB3MworCWFkZAkkNCwgbgorCWpzCUwodG9wKQorCisJbW92CXcwLCAtMTYocnAsbiw4KQorCWFkZAl3MSwgdzIKKwlhZGMJJDAsIHczCisKK0MgU3dpdGNoIG9uIG4gaW50byByaWdodCBhZGRtdWxfbCBsb29wCisJdGVzdAluLCBuCisJanoJTChyMikKKwljbXAJJDIsIFIzMihuKQorCWphCUwocjMpCisJanoJTChyMCkKKwlqbXAJTChyMSkKKworCitMKHIzKToJbW92CXcyLCBYKC04KHJwLG4sOCksMTYocnApKQorCW1vdgl3MywgWCgocnAsbiw4KSwyNChycCkpCisJYWRkCSQyLCB1bgorCitDIG91dGVyIGxvb3AoMykKK0wodG8zKToJZGVjCXZuCisJanoJTChyZXQpCisJbW92CSh2cCksIHYwCisJbW92CTgodXAsdW4sOCksICVyYXgKKwlsZWEJOCh2cCksIHZwCisJbGVhCTgocnApLCBycAorCW1vdgl1biwgbgorCW11bAl2MAorCW1vdgklcmF4LCB3MgorCW1vdgklcmR4LCB3MworCWptcAlMKGFsMykKKworCUFMSUdOKDE2KQorTCh0YTMpOglhZGQJdzAsIC0xNihycCxuLDgpCisJYWRjCXcxLCB3MgorCWFkYwkkMCwgdzMKKwltb3YJKHVwLG4sOCksICVyYXgKKwltdWwJdjAKKwltb3YJJXJheCwgdzAKKwltb3YJJXJkeCwgdzEKKwlhZGQJdzIsIC04KHJwLG4sOCkKKwlhZGMJdzMsIHcwCisJYWRjCSQwLCB3MQorCW1vdgk4KHVwLG4sOCksICVyYXgKKwltdWwJdjAKKwltb3YJJXJheCwgdzIKKwltb3YJJXJkeCwgdzMKKwlhZGQJdzAsIChycCxuLDgpCisJYWRjCXcxLCB3MgorCWFkYwkkMCwgdzMKK0woYWwzKToJbW92CTE2KHVwLG4sOCksICVyYXgKKwltdWwJdjAKKwltb3YJJXJheCwgdzAKKwltb3YJJXJkeCwgdzEKKwlhZGQJdzIsIDgocnAsbiw4KQorCWFkYwl3MywgdzAKKwlhZGMJJDAsIHcxCisJbW92CTI0KHVwLG4sOCksICVyYXgKKwltdWwJdjAKKwltb3YJJXJheCwgdzIKKwltb3YJJXJkeCwgdzMKKwlhZGQJJDQsIG4KKwlqcwlMKHRhMykKKworCWFkZAl3MCwgWCgtMTYocnAsbiw4KSw4KHJwKSkKKwlhZGMJdzEsIHcyCisJYWRjCSQwLCB3MworCWFkZAl3MiwgWCgtOChycCxuLDgpLDE2KHJwKSkKKwlhZGMJJDAsIHczCisJbW92CXczLCBYKChycCxuLDgpLDI0KHJwKSkKKwlqbXAJTCh0bzMpCisKKworTChyMik6CW1vdglYKDAodXAsbiw4KSwodXApKSwgJXJheAorCW11bAl2MAorCW1vdgklcmF4LCB3MAorCW1vdgklcmR4LCB3MQorCW1vdgl3MiwgWCgtOChycCxuLDgpLC04KHJwKSkKKwlhZGQJdzMsIHcwCisJYWRjCSQwLCB3MQorCW1vdglYKDgodXAsbiw4KSw4KHVwKSksICVyYXgKKwltdWwJdjAKKwltb3YJJXJheCwgdzIKKwltb3YJJXJkeCwgdzMKKwltb3YJdzAsIFgoKHJwLG4sOCksKHJwKSkKKwlhZGQJdzEsIHcyCisJYWRjCSQwLCB3MworCW1vdglYKDE2KHVwLG4sOCksMTYodXApKSwgJXJheAorCW11bAl2MAorCW1vdgklcmF4LCB3MAorCW1vdgklcmR4LCB3MQorCW1vdgl3MiwgWCg4KHJwLG4sOCksOChycCkpCisJYWRkCXczLCB3MAorCWFkYwkkMCwgdzEKKwltb3YJdzAsIFgoMTYocnAsbiw4KSwxNihycCkpCisJYWRjCSQwLCB3MworCW1vdgl3MSwgWCgyNChycCxuLDgpLDI0KHJwKSkKKwlpbmMJdW4KKworQyBvdXRlciBsb29wKDIpCitMKHRvMik6CWRlYwl2bgorCWp6CUwocmV0KQorCW1vdgkodnApLCB2MAorCW1vdgkxNih1cCx1biw4KSwgJXJheAorCWxlYQk4KHZwKSwgdnAKKwlsZWEJOChycCksIHJwCisJbW92CXVuLCBuCisJbXVsCXYwCisJbW92CSVyYXgsIHcwCisJbW92CSVyZHgsIHcxCisJam1wCUwoYWwyKQorCisJQUxJR04oMTYpCitMKHRhMik6CWFkZAl3MCwgLTE2KHJwLG4sOCkKKwlhZGMJdzEsIHcyCisJYWRjCSQwLCB3MworCW1vdgkodXAsbiw4KSwgJXJheAorCW11bAl2MAorCW1vdgklcmF4LCB3MAorCW1vdgklcmR4LCB3MQorCWFkZAl3MiwgLTgocnAsbiw4KQorCWFkYwl3MywgdzAKKwlhZGMJJDAsIHcxCisJbW92CTgodXAsbiw4KSwgJXJheAorCW11bAl2MAorCW1vdgklcmF4LCB3MgorCW1vdgklcmR4LCB3MworCWFkZAl3MCwgKHJwLG4sOCkKKwlhZGMJdzEsIHcyCisJYWRjCSQwLCB3MworCW1vdgkxNih1cCxuLDgpLCAlcmF4CisJbXVsCXYwCisJbW92CSVyYXgsIHcwCisJbW92CSVyZHgsIHcxCisJYWRkCXcyLCA4KHJwLG4sOCkKKwlhZGMJdzMsIHcwCisJYWRjCSQwLCB3MQorTChhbDIpOgltb3YJMjQodXAsbiw4KSwgJXJheAorCW11bAl2MAorCW1vdgklcmF4LCB3MgorCW1vdgklcmR4LCB3MworCWFkZAkkNCwgbgorCWpzCUwodGEyKQorCisJYWRkCXcwLCBYKC0xNihycCxuLDgpLDgocnApKQorCWFkYwl3MSwgdzIKKwlhZGMJJDAsIHczCisJYWRkCXcyLCBYKC04KHJwLG4sOCksMTYocnApKQorCWFkYwkkMCwgdzMKKwltb3YJdzMsIFgoKHJwLG4sOCksMjQocnApKQorCWptcAlMKHRvMikKKworCitMKHIxKToJbW92CVgoMCh1cCxuLDgpLDgodXApKSwgJXJheAorCW11bAl2MAorCW1vdgklcmF4LCB3MAorCW1vdgklcmR4LCB3MQorCW1vdgl3MiwgWCgtOChycCxuLDgpLChycCkpCisJYWRkCXczLCB3MAorCWFkYwkkMCwgdzEKKwltb3YJWCg4KHVwLG4sOCksMTYodXApKSwgJXJheAorCW11bAl2MAorCW1vdgklcmF4LCB3MgorCW1vdgklcmR4LCB3MworCW1vdgl3MCwgWCgocnAsbiw4KSw4KHJwKSkKKwlhZGQJdzEsIHcyCisJYWRjCSQwLCB3MworCW1vdgl3MiwgWCg4KHJwLG4sOCksMTYocnApKQorCW1vdgl3MywgWCgxNihycCxuLDgpLDI0KHJwKSkKKwlhZGQJJDQsIHVuCisKK0Mgb3V0ZXIgbG9vcCgxKQorTCh0bzEpOglkZWMJdm4KKwlqeglMKHJldCkKKwltb3YJKHZwKSwgdjAKKwltb3YJLTgodXAsdW4sOCksICVyYXgKKwlsZWEJOCh2cCksIHZwCisJbGVhCTgocnApLCBycAorCW1vdgl1biwgbgorCW11bAl2MAorCW1vdgklcmF4LCB3MgorCW1vdgklcmR4LCB3MworCWptcAlMKGFsMSkKKworCUFMSUdOKDE2KQorTCh0YTEpOglhZGQJdzAsIC0xNihycCxuLDgpCisJYWRjCXcxLCB3MgorCWFkYwkkMCwgdzMKK0woYWwxKToJbW92CSh1cCxuLDgpLCAlcmF4CisJbXVsCXYwCisJbW92CSVyYXgsIHcwCisJbW92CSVyZHgsIHcxCisJYWRkCXcyLCAtOChycCxuLDgpCisJYWRjCXczLCB3MAorCWFkYwkkMCwgdzEKKwltb3YJOCh1cCxuLDgpLCAlcmF4CisJbXVsCXYwCisJbW92CSVyYXgsIHcyCisJbW92CSVyZHgsIHczCisJYWRkCXcwLCAocnAsbiw4KQorCWFkYwl3MSwgdzIKKwlhZGMJJDAsIHczCisJbW92CTE2KHVwLG4sOCksICVyYXgKKwltdWwJdjAKKwltb3YJJXJheCwgdzAKKwltb3YJJXJkeCwgdzEKKwlhZGQJdzIsIDgocnAsbiw4KQorCWFkYwl3MywgdzAKKwlhZGMJJDAsIHcxCisJbW92CTI0KHVwLG4sOCksICVyYXgKKwltdWwJdjAKKwltb3YJJXJheCwgdzIKKwltb3YJJXJkeCwgdzMKKwlhZGQJJDQsIG4KKwlqcwlMKHRhMSkKKworCWFkZAl3MCwgWCgtMTYocnAsbiw4KSw4KHJwKSkKKwlhZGMJdzEsIHcyCisJYWRjCSQwLCB3MworCWFkZAl3MiwgWCgtOChycCxuLDgpLDE2KHJwKSkKKwlhZGMJJDAsIHczCisJbW92CXczLCBYKChycCxuLDgpLDI0KHJwKSkKKwlqbXAJTCh0bzEpCisKKworTChyMCk6CW1vdglYKCh1cCxuLDgpLDE2KHVwKSksICVyYXgKKwltdWwJdjAKKwltb3YJJXJheCwgdzAKKwltb3YJJXJkeCwgdzEKKwltb3YJdzIsIFgoLTgocnAsbiw4KSw4KHJwKSkKKwlhZGQJdzMsIHcwCisJYWRjCSQwLCB3MQorCW1vdgl3MCwgWCgocnAsbiw4KSwxNihycCkpCisJbW92CXcxLCBYKDgocnAsbiw4KSwyNChycCkpCisJYWRkCSQzLCB1bgorCitDIG91dGVyIGxvb3AoMCkKK0wodG8wKToJZGVjCXZuCisJanoJTChyZXQpCisJbW92CSh2cCksIHYwCisJbW92CSh1cCx1biw4KSwgJXJheAorCWxlYQk4KHZwKSwgdnAKKwlsZWEJOChycCksIHJwCisJbW92CXVuLCBuCisJbXVsCXYwCisJbW92CSVyYXgsIHcwCisJbW92CSVyZHgsIHcxCisJam1wCUwoYWwwKQorCisJQUxJR04oMTYpCitMKHRhMCk6CWFkZAl3MCwgLTE2KHJwLG4sOCkKKwlhZGMJdzEsIHcyCisJYWRjCSQwLCB3MworCW1vdgkodXAsbiw4KSwgJXJheAorCW11bAl2MAorCW1vdgklcmF4LCB3MAorCW1vdgklcmR4LCB3MQorCWFkZAl3MiwgLTgocnAsbiw4KQorCWFkYwl3MywgdzAKKwlhZGMJJDAsIHcxCitMKGFsMCk6CW1vdgk4KHVwLG4sOCksICVyYXgKKwltdWwJdjAKKwltb3YJJXJheCwgdzIKKwltb3YJJXJkeCwgdzMKKwlhZGQJdzAsIChycCxuLDgpCisJYWRjCXcxLCB3MgorCWFkYwkkMCwgdzMKKwltb3YJMTYodXAsbiw4KSwgJXJheAorCW11bAl2MAorCW1vdgklcmF4LCB3MAorCW1vdgklcmR4LCB3MQorCWFkZAl3MiwgOChycCxuLDgpCisJYWRjCXczLCB3MAorCWFkYwkkMCwgdzEKKwltb3YJMjQodXAsbiw4KSwgJXJheAorCW11bAl2MAorCW1vdgklcmF4LCB3MgorCW1vdgklcmR4LCB3MworCWFkZAkkNCwgbgorCWpzCUwodGEwKQorCisJYWRkCXcwLCBYKC0xNihycCxuLDgpLDgocnApKQorCWFkYwl3MSwgdzIKKwlhZGMJJDAsIHczCisJYWRkCXcyLCBYKC04KHJwLG4sOCksMTYocnApKQorCWFkYwkkMCwgdzMKKwltb3YJdzMsIFgoKHJwLG4sOCksMjQocnApKQorCWptcAlMKHRvMCkKKworCitMKHJldCk6CXBvcAklcjEzCisJcG9wCSVyMTIKKwlwb3AJJXJicAorCXBvcAklcmJ4CisJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2J0MS9yZWRjXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYnQxL3JlZGNfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU1YjFlNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2J0MS9yZWRjXzEuYXNtCkBAIC0wLDAgKzEsNTA3IEBACitkbmwgIFg4Ni02NCBtcG5fcmVkY18xIG9wdGltaXNlZCBmb3IgQU1EIGJvYmNhdC4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDAzLTIwMDUsIDIwMDcsIDIwMDgsIDIwMTEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIKK0MgQU1EIEs4LEs5CSA/CitDIEFNRCBLMTAJID8KK0MgQU1EIGJ1bGwJID8KK0MgQU1EIHBpbGUJID8KK0MgQU1EIHN0ZWFtCSA/CitDIEFNRCBib2JjYXQJIDUuMAorQyBBTUQgamFndWFyCSA/CitDIEludGVsIFA0CSA/CitDIEludGVsIGNvcmUJID8KK0MgSW50ZWwgTkhNCSA/CitDIEludGVsIFNCUgkgPworQyBJbnRlbCBJQlIJID8KK0MgSW50ZWwgSFdMCSA/CitDIEludGVsIEJXTAkgPworQyBJbnRlbCBhdG9tCSA/CitDIFZJQSBuYW5vCSA/CisKK0MgVE9ETworQyAgKiBNaWNyby1vcHRpbWlzZSwgbm9uZSBwZXJmb3JtZWQgdGh1cyBmYXIuCitDICAqIENvbnNpZGVyIGlubGluaW5nIG1wbl9hZGRfbi4KK0MgICogU2luZ2xlIGJhc2VjYXNlcyBvdXQgYmVmb3JlIHRoZSBwdXNoZXMuCisKK0MgV2hlbiBwbGF5aW5nIHdpdGggcG9pbnRlcnMsIHNldCB0aGlzIHRvICQyIHRvIGZhbGwgYmFjayB0byBjb25zZXJ2YXRpdmUKK0MgaW5kZXhpbmcgaW4gd2luZC1kb3duIGNvZGUuCitkZWZpbmUoYEknLGAkMScpCisKK2RlZmluZShgcnAnLCAgICAgICAgICBgJXJkaScpICAgQyByY3gKK2RlZmluZShgdXAnLCAgICAgICAgICBgJXJzaScpICAgQyByZHgKK2RlZmluZShgbXBfcGFyYW0nLCAgICBgJXJkeCcpICAgQyByOAorZGVmaW5lKGBuJywgICAgICAgICAgIGAlcmN4JykgICBDIHI5CitkZWZpbmUoYHUwaW52JywgICAgICAgYCVyOCcpICAgIEMgc3RhY2sKKworZGVmaW5lKGBpJywgICAgICAgICAgIGAlcjE0JykKK2RlZmluZShgaicsICAgICAgICAgICBgJXIxNScpCitkZWZpbmUoYG1wJywgICAgICAgICAgYCVyMTInKQorZGVmaW5lKGBxMCcsICAgICAgICAgIGAlcjEzJykKK2RlZmluZShgdzAnLCAgICAgICAgICBgJXJicCcpCitkZWZpbmUoYHcxJywgICAgICAgICAgYCVyOScpCitkZWZpbmUoYHcyJywgICAgICAgICAgYCVyMTAnKQorZGVmaW5lKGB3MycsICAgICAgICAgIGAlcjExJykKKworQyByYXggcmJ4IHJjeCByZHggcmRpIHJzaSByYnAgcjggcjkgcjEwIHIxMSByMTIgcjEzIHIxNCByMTUKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworZGVmaW5lKGBBTElHTngnLCBgQUxJR04oMTYpJykKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMzIpCitQUk9MT0dVRShtcG5fcmVkY18xKQorCUZVTkNfRU5UUlkoNCkKK0lGRE9TKGAJbW92CTU2KCVyc3ApLCAlcjgJJykKKwlwdXNoCSVyYngKKwlwdXNoCSVyYnAKKwlwdXNoCSVyMTIKKwlwdXNoCSVyMTMKKwlwdXNoCSVyMTQKKwlwdXNoCSVyMTUKKworCW1vdgkodXApLCBxMAorCW1vdgluLCBqCQkJQyBvdXRlciBsb29wIGluZHVjdGlvbiB2YXIKKwlsZWEJKG1wX3BhcmFtLG4sOCksIG1wCisJbGVhCSh1cCxuLDgpLCB1cAorCW5lZwluCisJaW11bAl1MGludiwgcTAJCUMgZmlyc3QgaXRlcmF0aW9uIHEwCisKKwl0ZXN0CSQxLCBSOChuKQorCWp6CUwoYngwKQorCitMKGJ4MSk6CXRlc3QJJDIsIFI4KG4pCisJanoJTChiMykKKworTChiMSk6CWNtcAkkLTEsIFIzMihuKQorCWp6CUwobjEpCisKK0wob3RwMSk6bGVhCTEobiksIGkKKwltb3YJKG1wLG4sOCksICVyYXgKKwltdWwJcTAKKwltb3YJJXJheCwgdzIKKwltb3YJJXJkeCwgdzMKKwltb3YJOChtcCxuLDgpLCAlcmF4CisJbXVsCXEwCisJbW92CSVyYXgsICVyYngKKwltb3YJJXJkeCwgdzEKKwlhZGQJKHVwLG4sOCksIHcyCisJYWRjCXczLCAlcmJ4CisJYWRjCSQwLCB3MQorCW1vdgkxNihtcCxuLDgpLCAlcmF4CisJbXVsCXEwCisJbW92CSVyYXgsIHcyCisJbW92CSVyZHgsIHczCisJYWRkCTgodXAsbiw4KSwgJXJieAorCW1vdgklcmJ4LCA4KHVwLG4sOCkKKwlhZGMJdzEsIHcyCisJYWRjCSQwLCB3MworCWltdWwJdTBpbnYsICVyYngJCUMgbmV4dCBxIGxpbWIKKwlqbXAJTChlMSkKKworCUFMSUdOeAorTCh0cDEpOglhZGQJdzAsIC0xNih1cCxpLDgpCisJYWRjCXcxLCB3MgorCWFkYwkkMCwgdzMKKwltb3YJKG1wLGksOCksICVyYXgKKwltdWwJcTAKKwltb3YJJXJheCwgdzAKKwltb3YJJXJkeCwgdzEKKwlhZGQJdzIsIC04KHVwLGksOCkKKwlhZGMJdzMsIHcwCisJYWRjCSQwLCB3MQorCW1vdgk4KG1wLGksOCksICVyYXgKKwltdWwJcTAKKwltb3YJJXJheCwgdzIKKwltb3YJJXJkeCwgdzMKKwlhZGQJdzAsICh1cCxpLDgpCisJYWRjCXcxLCB3MgorCWFkYwkkMCwgdzMKK0woZTEpOgltb3YJMTYobXAsaSw4KSwgJXJheAorCW11bAlxMAorCW1vdgklcmF4LCB3MAorCW1vdgklcmR4LCB3MQorCWFkZAl3MiwgOCh1cCxpLDgpCisJYWRjCXczLCB3MAorCWFkYwkkMCwgdzEKKwltb3YJMjQobXAsaSw4KSwgJXJheAorCW11bAlxMAorCW1vdgklcmF4LCB3MgorCW1vdgklcmR4LCB3MworCWFkZAkkNCwgaQorCWpzCUwodHAxKQorCitMKGVkMSk6CWFkZAl3MCwgSSgtMTYodXApLC0xNih1cCxpLDgpKQorCWFkYwl3MSwgdzIKKwlhZGMJJDAsIHczCisJYWRkCXcyLCBJKC04KHVwKSwtOCh1cCxpLDgpKQorCWFkYwkkMCwgdzMKKwltb3YJdzMsICh1cCxuLDgpCQlDIHVwWzBdCisJbW92CSVyYngsIHEwCQlDIHByZXZpb3VzbHkgY29tcHV0ZWQgcSBsaW1iIC0+IHEwCisJbGVhCTgodXApLCB1cAkJQyB1cCsrCisJZGVjCWoKKwlqbnoJTChvdHAxKQorCWptcAlMKGNqKQorCitMKGIzKToJY21wCSQtMywgUjMyKG4pCisJanoJTChuMykKKworTChvdHAzKTpsZWEJMyhuKSwgaQorCW1vdgkobXAsbiw4KSwgJXJheAorCW11bAlxMAorCW1vdgklcmF4LCB3MgorCW1vdgklcmR4LCB3MworCW1vdgk4KG1wLG4sOCksICVyYXgKKwltdWwJcTAKKwltb3YJJXJheCwgJXJieAorCW1vdgklcmR4LCB3MQorCWFkZAkodXAsbiw4KSwgdzIKKwlhZGMJdzMsICVyYngKKwlhZGMJJDAsIHcxCisJbW92CTE2KG1wLG4sOCksICVyYXgKKwltdWwJcTAKKwltb3YJJXJheCwgdzIKKwltb3YJJXJkeCwgdzMKKwlhZGQJOCh1cCxuLDgpLCAlcmJ4CisJbW92CSVyYngsIDgodXAsbiw4KQorCWFkYwl3MSwgdzIKKwlhZGMJJDAsIHczCisJaW11bAl1MGludiwgJXJieAkJQyBuZXh0IHEgbGltYgorCWptcAlMKGUzKQorCisJQUxJR054CitMKHRwMyk6CWFkZAl3MCwgLTE2KHVwLGksOCkKKwlhZGMJdzEsIHcyCisJYWRjCSQwLCB3MworTChlMyk6CW1vdgkobXAsaSw4KSwgJXJheAorCW11bAlxMAorCW1vdgklcmF4LCB3MAorCW1vdgklcmR4LCB3MQorCWFkZAl3MiwgLTgodXAsaSw4KQorCWFkYwl3MywgdzAKKwlhZGMJJDAsIHcxCisJbW92CTgobXAsaSw4KSwgJXJheAorCW11bAlxMAorCW1vdgklcmF4LCB3MgorCW1vdgklcmR4LCB3MworCWFkZAl3MCwgKHVwLGksOCkKKwlhZGMJdzEsIHcyCisJYWRjCSQwLCB3MworCW1vdgkxNihtcCxpLDgpLCAlcmF4CisJbXVsCXEwCisJbW92CSVyYXgsIHcwCisJbW92CSVyZHgsIHcxCisJYWRkCXcyLCA4KHVwLGksOCkKKwlhZGMJdzMsIHcwCisJYWRjCSQwLCB3MQorCW1vdgkyNChtcCxpLDgpLCAlcmF4CisJbXVsCXEwCisJbW92CSVyYXgsIHcyCisJbW92CSVyZHgsIHczCisJYWRkCSQ0LCBpCisJanMJTCh0cDMpCisKK0woZWQzKToJYWRkCXcwLCBJKC0xNih1cCksLTE2KHVwLGksOCkpCisJYWRjCXcxLCB3MgorCWFkYwkkMCwgdzMKKwlhZGQJdzIsIEkoLTgodXApLC04KHVwLGksOCkpCisJYWRjCSQwLCB3MworCW1vdgl3MywgKHVwLG4sOCkJCUMgdXBbMF0KKwltb3YJJXJieCwgcTAJCUMgcHJldmlvdXNseSBjb21wdXRlZCBxIGxpbWIgLT4gcTAKKwlsZWEJOCh1cCksIHVwCQlDIHVwKysKKwlkZWMJagorCWpueglMKG90cDMpCitDCWptcAlMKGNqKQorCitMKGNqKToKK0lGU1REKGAJbGVhCSh1cCxuLDgpLCB1cAkJQyBwYXJhbSAyOiB1cAorCWxlYQkodXAsbiw4KSwgJXJkeAkJQyBwYXJhbSAzOiB1cCAtIG4KKwluZWcJUjMyKG4pCQknKQlDIHBhcmFtIDQ6IG4KKworSUZET1MoYAlsZWEJKHVwLG4sOCksICVyZHgJCUMgcGFyYW0gMjogdXAKKwlsZWEJKCVyZHgsbiw4KSwgJXI4CQlDIHBhcmFtIDM6IHVwIC0gbgorCW5lZwlSMzIobikKKwltb3YJbiwgJXI5CQkJQyBwYXJhbSA0OiBuCisJbW92CXJwLCAlcmN4CScpCUMgcGFyYW0gMTogcnAKKworSUZTVEQoYAlzdWIJJDgsICVyc3AJJykKK0lGRE9TKGAJc3ViCSQ0MCwgJXJzcAknKQorCUFTU0VSVChueiwgYHRlc3QgJDE1LCAlcnNwJykKKwlDQUxMKAltcG5fYWRkX24pCitJRlNURChgCWFkZAkkOCwgJXJzcAknKQorSUZET1MoYAlhZGQJJDQwLCAlcnNwCScpCisKK0wocmV0KToJcG9wCSVyMTUKKwlwb3AJJXIxNAorCXBvcAklcjEzCisJcG9wCSVyMTIKKwlwb3AJJXJicAorCXBvcAklcmJ4CisJRlVOQ19FWElUKCkKKwlyZXQKKworTChieDApOgl0ZXN0CSQyLCBSOChuKQorCWpueglMKGIyKQorCitMKGIwKToKK0wob3RwMCk6bGVhCShuKSwgaQorCW1vdgkobXAsbiw4KSwgJXJheAorCW11bAlxMAorCW1vdgklcmF4LCB3MAorCW1vdgklcmR4LCB3MQorCW1vdgk4KG1wLG4sOCksICVyYXgKKwltdWwJcTAKKwltb3YJJXJheCwgJXJieAorCW1vdgklcmR4LCB3MworCWFkZAkodXAsbiw4KSwgdzAKKwlhZGMJdzEsICVyYngKKwlhZGMJJDAsIHczCisJbW92CTE2KG1wLG4sOCksICVyYXgKKwltdWwJcTAKKwltb3YJJXJheCwgdzAKKwltb3YJJXJkeCwgdzEKKwlhZGQJOCh1cCxuLDgpLCAlcmJ4CisJbW92CSVyYngsIDgodXAsbiw4KQorCWFkYwl3MywgdzAKKwlhZGMJJDAsIHcxCisJaW11bAl1MGludiwgJXJieAkJQyBuZXh0IHEgbGltYgorCWptcAlMKGUwKQorCisJQUxJR054CitMKHRwMCk6CWFkZAl3MCwgLTE2KHVwLGksOCkKKwlhZGMJdzEsIHcyCisJYWRjCSQwLCB3MworCW1vdgkobXAsaSw4KSwgJXJheAorCW11bAlxMAorCW1vdgklcmF4LCB3MAorCW1vdgklcmR4LCB3MQorCWFkZAl3MiwgLTgodXAsaSw4KQorCWFkYwl3MywgdzAKKwlhZGMJJDAsIHcxCisJbW92CTgobXAsaSw4KSwgJXJheAorCW11bAlxMAorCW1vdgklcmF4LCB3MgorCW1vdgklcmR4LCB3MworCWFkZAl3MCwgKHVwLGksOCkKKwlhZGMJdzEsIHcyCisJYWRjCSQwLCB3MworCW1vdgkxNihtcCxpLDgpLCAlcmF4CisJbXVsCXEwCisJbW92CSVyYXgsIHcwCisJbW92CSVyZHgsIHcxCisJYWRkCXcyLCA4KHVwLGksOCkKKwlhZGMJdzMsIHcwCisJYWRjCSQwLCB3MQorTChlMCk6CW1vdgkyNChtcCxpLDgpLCAlcmF4CisJbXVsCXEwCisJbW92CSVyYXgsIHcyCisJbW92CSVyZHgsIHczCisJYWRkCSQ0LCBpCisJanMJTCh0cDApCisKK0woZWQwKToJYWRkCXcwLCBJKC0xNih1cCksLTE2KHVwLGksOCkpCisJYWRjCXcxLCB3MgorCWFkYwkkMCwgdzMKKwlhZGQJdzIsIEkoLTgodXApLC04KHVwLGksOCkpCisJYWRjCSQwLCB3MworCW1vdgl3MywgKHVwLG4sOCkJCUMgdXBbMF0KKwltb3YJJXJieCwgcTAJCUMgcHJldmlvdXNseSBjb21wdXRlZCBxIGxpbWIgLT4gcTAKKwlsZWEJOCh1cCksIHVwCQlDIHVwKysKKwlkZWMJagorCWpueglMKG90cDApCisJam1wCUwoY2opCisKK0woYjIpOgljbXAJJC0yLCBSMzIobikKKwlqeglMKG4yKQorCitMKG90cDIpOmxlYQkyKG4pLCBpCisJbW92CShtcCxuLDgpLCAlcmF4CisJbXVsCXEwCisJbW92CSVyYXgsIHcwCisJbW92CSVyZHgsIHcxCisJbW92CTgobXAsbiw4KSwgJXJheAorCW11bAlxMAorCW1vdgklcmF4LCAlcmJ4CisJbW92CSVyZHgsIHczCisJYWRkCSh1cCxuLDgpLCB3MAorCWFkYwl3MSwgJXJieAorCWFkYwkkMCwgdzMKKwltb3YJMTYobXAsbiw4KSwgJXJheAorCW11bAlxMAorCW1vdgklcmF4LCB3MAorCW1vdgklcmR4LCB3MQorCWFkZAk4KHVwLG4sOCksICVyYngKKwltb3YJJXJieCwgOCh1cCxuLDgpCisJYWRjCXczLCB3MAorCWFkYwkkMCwgdzEKKwlpbXVsCXUwaW52LCAlcmJ4CQlDIG5leHQgcSBsaW1iCisJam1wCUwoZTIpCisKKwlBTElHTngKK0wodHAyKToJYWRkCXcwLCAtMTYodXAsaSw4KQorCWFkYwl3MSwgdzIKKwlhZGMJJDAsIHczCisJbW92CShtcCxpLDgpLCAlcmF4CisJbXVsCXEwCisJbW92CSVyYXgsIHcwCisJbW92CSVyZHgsIHcxCisJYWRkCXcyLCAtOCh1cCxpLDgpCisJYWRjCXczLCB3MAorCWFkYwkkMCwgdzEKK0woZTIpOgltb3YJOChtcCxpLDgpLCAlcmF4CisJbXVsCXEwCisJbW92CSVyYXgsIHcyCisJbW92CSVyZHgsIHczCisJYWRkCXcwLCAodXAsaSw4KQorCWFkYwl3MSwgdzIKKwlhZGMJJDAsIHczCisJbW92CTE2KG1wLGksOCksICVyYXgKKwltdWwJcTAKKwltb3YJJXJheCwgdzAKKwltb3YJJXJkeCwgdzEKKwlhZGQJdzIsIDgodXAsaSw4KQorCWFkYwl3MywgdzAKKwlhZGMJJDAsIHcxCisJbW92CTI0KG1wLGksOCksICVyYXgKKwltdWwJcTAKKwltb3YJJXJheCwgdzIKKwltb3YJJXJkeCwgdzMKKwlhZGQJJDQsIGkKKwlqcwlMKHRwMikKKworTChlZDIpOglhZGQJdzAsIEkoLTE2KHVwKSwtMTYodXAsaSw4KSkKKwlhZGMJdzEsIHcyCisJYWRjCSQwLCB3MworCWFkZAl3MiwgSSgtOCh1cCksLTgodXAsaSw4KSkKKwlhZGMJJDAsIHczCisJbW92CXczLCAodXAsbiw4KQkJQyB1cFswXQorCW1vdgklcmJ4LCBxMAkJQyBwcmV2aW91c2x5IGNvbXB1dGVkIHEgbGltYiAtPiBxMAorCWxlYQk4KHVwKSwgdXAJCUMgdXArKworCWRlYwlqCisJam56CUwob3RwMikKKwlqbXAJTChjaikKKworTChuMSk6CW1vdgkobXBfcGFyYW0pLCAlcmF4CisJbXVsCXEwCisJYWRkCS04KHVwKSwgJXJheAorCWFkYwkodXApLCAlcmR4CisJbW92CSVyZHgsIChycCkKKwltb3YJJDAsIFIzMiglcmF4KQorCWFkYwlSMzIoJXJheCksIFIzMiglcmF4KQorCWptcAlMKHJldCkKKworTChuMik6CW1vdgkobXBfcGFyYW0pLCAlcmF4CisJbW92CS0xNih1cCksICVyYnAKKwltdWwJcTAKKwlhZGQJJXJheCwgJXJicAorCW1vdgklcmR4LCAlcjkKKwlhZGMJJDAsICVyOQorCW1vdgktOChtcCksICVyYXgKKwltb3YJLTgodXApLCAlcjEwCisJbXVsCXEwCisJYWRkCSVyYXgsICVyMTAKKwltb3YJJXJkeCwgJXIxMQorCWFkYwkkMCwgJXIxMQorCWFkZAklcjksICVyMTAKKwlhZGMJJDAsICVyMTEKKwltb3YJJXIxMCwgcTAKKwlpbXVsCXUwaW52LCBxMAkJQyBuZXh0IHEwCisJbW92CS0xNihtcCksICVyYXgKKwltdWwJcTAKKwlhZGQJJXJheCwgJXIxMAorCW1vdgklcmR4LCAlcjkKKwlhZGMJJDAsICVyOQorCW1vdgktOChtcCksICVyYXgKKwltb3YJKHVwKSwgJXIxNAorCW11bAlxMAorCWFkZAklcmF4LCAlcjE0CisJYWRjCSQwLCAlcmR4CisJYWRkCSVyOSwgJXIxNAorCWFkYwkkMCwgJXJkeAorCXhvcglSMzIoJXJheCksIFIzMiglcmF4KQorCWFkZAklcjExLCAlcjE0CisJYWRjCTgodXApLCAlcmR4CisJbW92CSVyMTQsIChycCkKKwltb3YJJXJkeCwgOChycCkKKwlhZGMJUjMyKCVyYXgpLCBSMzIoJXJheCkKKwlqbXAJTChyZXQpCisKKwlBTElHTngKK0wobjMpOgltb3YJLTI0KG1wKSwgJXJheAorCW1vdgktMjQodXApLCAlcjEwCisJbXVsCXEwCisJYWRkCSVyYXgsICVyMTAKKwltb3YJLTE2KG1wKSwgJXJheAorCW1vdgklcmR4LCAlcjExCisJYWRjCSQwLCAlcjExCisJbW92CS0xNih1cCksICVyYnAKKwltdWwJcTAKKwlhZGQJJXJheCwgJXJicAorCW1vdgklcmR4LCAlcjkKKwlhZGMJJDAsICVyOQorCW1vdgktOChtcCksICVyYXgKKwlhZGQJJXIxMSwgJXJicAorCW1vdgktOCh1cCksICVyMTAKKwlhZGMJJDAsICVyOQorCW11bAlxMAorCW1vdgklcmJwLCBxMAorCWltdWwJdTBpbnYsIHEwCQlDIG5leHQgcTAKKwlhZGQJJXJheCwgJXIxMAorCW1vdgklcmR4LCAlcjExCisJYWRjCSQwLCAlcjExCisJbW92CSVyYnAsIC0xNih1cCkKKwlhZGQJJXI5LCAlcjEwCisJYWRjCSQwLCAlcjExCisJbW92CSVyMTAsIC04KHVwKQorCW1vdgklcjExLCAtMjQodXApCQlDIHVwWzBdCisJbGVhCTgodXApLCB1cAkJQyB1cCsrCisJZGVjCWoKKwlqbnoJTChuMykKKworCW1vdgktNDgodXApLCAlcmR4CisJbW92CS00MCh1cCksICVyYngKKwl4b3IJUjMyKCVyYXgpLCBSMzIoJXJheCkKKwlhZGQJJXJicCwgJXJkeAorCWFkYwklcjEwLCAlcmJ4CisJYWRjCS04KHVwKSwgJXIxMQorCW1vdgklcmR4LCAocnApCisJbW92CSVyYngsIDgocnApCisJbW92CSVyMTEsIDE2KHJwKQorCWFkYwlSMzIoJXJheCksIFIzMiglcmF4KQorCWptcAlMKHJldCkKK0VQSUxPR1VFKCkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYnQxL3Nxcl9iYXNlY2FzZS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9idDEvc3FyX2Jhc2VjYXNlLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTQxN2ExCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYnQxL3Nxcl9iYXNlY2FzZS5hc20KQEAgLTAsMCArMSw1NjUgQEAKK2RubCAgQU1ENjQgbXBuX3Nxcl9iYXNlY2FzZSBvcHRpbWlzZWQgZm9yIEFNRCBib2JjYXQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDMtMjAwNSwgMjAwNywgMjAwOCwgMjAxMSwgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIKK0MgQU1EIEs4LEs5CSA0LjUKK0MgQU1EIEsxMAkgNC41CitDIEFNRCBiZDEJIDQuNzUKK0MgQU1EIGJvYmNhdAkgNQorQyBJbnRlbCBQNAkxNy43CitDIEludGVsIGNvcmUyCSA1LjUKK0MgSW50ZWwgTkhNCSA1LjQzCitDIEludGVsIFNCUgkgMy45MgorQyBJbnRlbCBhdG9tCTIzCitDIFZJQSBuYW5vCSA1LjYzCisKK0MgVGhpcyBzcXJfYmFzZWNhc2UgaXMgYmFzZWQgb24gbXVsXzEgYW5kIGFkZG11bF8xLCBzaW5jZSB0aGVzZSBib3RoIHJ1biBhdCB0aGUKK0MgbXVsdGlwbHkgaW5zbiBiYW5kd2lkdGgsIHdpdGhvdXQgYW55IGFwcGFyZW50IGxvb3AgYnJhbmNoIGV4aXQgcGlwZWxpbmUKK0MgcmVwbGF5cyBleHBlcmllbmNlZCBvbiBLOC4gIFRoZSBzdHJ1Y3R1cmUgaXMgdW51c3VhbDogaXQgZmFsbHMgaW50byBtdWxfMSBpbgorQyB0aGUgc2FtZSB3YXkgZm9yIGFsbCBuLCB0aGVuIGl0IHNwbGl0cyBpbnRvIDQgZGlmZmVyZW50IHdpbmQtZG93biBibG9ja3MgYW5kCitDIDQgc2VwYXJhdGUgYWRkbXVsXzEgbG9vcHMuCitDCitDIFdlIGhhdmUgbm90IHRyaWVkIHVzaW5nIHRoZSBzYW1lIGFkZG11bF8xIGxvb3BzIHdpdGggYSBzd2l0Y2ggaW50byBmZWVkLWluCitDIGNvZGUsIGFzIHdlIGRvIGluIG90aGVyIGJhc2VjYXNlIGltcGxlbWVudGF0aW9ucy4gIERvaW5nIHRoYXQgY291bGQgc2F2ZQorQyBzdWJzdGFudGlhbCBjb2RlIHZvbHVtZSwgYnV0IHdvdWxkIGFsc28gcHJvYmFibHkgYWRkIHNvbWUgb3ZlcmhlYWQuCisKK0MgVE9ETworQyAgKiBUdW5lIHVuIDwgNCBjb2RlLgorQyAgKiBQZXJoYXBzIGltcGxlbWVudCBhIGxhcmdlciBmaW5hbCBjb3JuZXIgKGl0IGlzIG5vdyAyIHggMSkuCitDICAqIExvdHMgb2Ygc3BhY2UgY291bGQgYmUgc2F2ZWQgYnkgcmVwbGFjaW5nIHRoZSAic3dpdGNoIiBjb2RlIGJ5IGdyYWR1YWwKK0MgICAganVtcHMgb3V0IGZyb20gbXVsXzEgd2luZGRvd24gY29kZSwgcGVyaGFwcyB3aXRoIG5vIGFkZGVkIG92ZXJoZWFkLgorQyAgKiBBcmUgdGhlIEFMSUdOKDE2KSByZWFsbHkgbmVjZXNzYXJ5PyAgVGhleSBhZGQgYWJvdXQgMjUgYnl0ZXMgb2YgcGFkZGluZy4KKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworQyBTdGFuZGFyZCBwYXJhbWV0ZXJzCitkZWZpbmUoYHJwJywgICAgICAgICAgICAgIGAlcmRpJykKK2RlZmluZShgdXAnLCAgICAgICAgICAgICAgYCVyc2knKQorZGVmaW5lKGB1bl9wYXJhbScsICAgICAgICBgJXJkeCcpCitDIFN0YW5kYXJkIGFsbG9jYXRpb25zCitkZWZpbmUoYHVuJywgICAgICAgICAgICAgIGAlcmJ4JykKK2RlZmluZShgdzAnLCAgICAgICAgICAgICAgYCVyOCcpCitkZWZpbmUoYHcxJywgICAgICAgICAgICAgIGAlcjknKQorZGVmaW5lKGB3MicsICAgICAgICAgICAgICBgJXIxMCcpCitkZWZpbmUoYHczJywgICAgICAgICAgICAgIGAlcjExJykKK2RlZmluZShgbicsICAgICAgICAgICAgICAgYCVyYnAnKQorZGVmaW5lKGB2MCcsICAgICAgICAgICAgICBgJXJjeCcpCisKK0MgVGVtcCBtYWNybyBmb3IgYWxsb3dpbmcgY29udHJvbCBvdmVyIGluZGV4aW5nLgorQyBEZWZpbmUgdG8gcmV0dXJuICQxIGZvciBtb3JlIGNvbnNlcnZhdGl2ZSBwdHIgaGFuZGxpbmcuCitkZWZpbmUoYFgnLGAkMicpCitkbmwgZGVmaW5lKGBYJyxgJDEnKQorCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDY0KQorUFJPTE9HVUUobXBuX3Nxcl9iYXNlY2FzZSkKKwlGVU5DX0VOVFJZKDMpCisKKwltb3YJKHVwKSwgJXJheAorCisJY21wCSQyLCBSMzIodW5fcGFyYW0pCisJamFlCUwoZ2UyKQorCisJbXVsCSVyYXgKKwltb3YJJXJheCwgKHJwKQorCW1vdgklcmR4LCA4KHJwKQorCUZVTkNfRVhJVCgpCisJcmV0CisKK0woZ2UyKToJbW92CSh1cCksIHYwCisJam56CUwoZzIpCisKKwltdWwJJXJheAorCW1vdgklcmF4LCAocnApCisJbW92CTgodXApLCAlcmF4CisJbW92CSVyZHgsIHcwCisJbXVsCXYwCisJYWRkCSVyYXgsIHcwCisJbW92CSVyZHgsIHcxCisJYWRjCSQwLCB3MQorCW1vdgk4KHVwKSwgdjAKKwltb3YJKHVwKSwgJXJheAorCW11bAl2MAorCWFkZAklcmF4LCB3MAorCW1vdgl3MCwgOChycCkKKwltb3YJJXJkeCwgdzAJCUMgQ0FVVElPTjogcjggcmVhbGxvYworCWFkYwkkMCwgdzAKKwltb3YJOCh1cCksICVyYXgKKwltdWwJdjAKKwlhZGQJdzEsIHcwCisJYWRjCSQwLCAlcmR4CisJYWRkCXcwLCAlcmF4CisJYWRjCSQwLCAlcmR4CisJbW92CSVyYXgsIDE2KHJwKQorCW1vdgklcmR4LCAyNChycCkKKwlGVU5DX0VYSVQoKQorCXJldAorCitMKGcyKToJY21wCSQzLCBSMzIodW5fcGFyYW0pCisJamEJTChnMykKKwltdWwJJXJheAorCW1vdgklcmF4LCAocnApCisJbW92CSVyZHgsIDgocnApCisJbW92CTgodXApLCAlcmF4CisJbXVsCSVyYXgKKwltb3YJJXJheCwgMTYocnApCisJbW92CSVyZHgsIDI0KHJwKQorCW1vdgkxNih1cCksICVyYXgKKwltdWwJJXJheAorCW1vdgklcmF4LCAzMihycCkKKwltb3YJJXJkeCwgNDAocnApCisKKwltb3YJKHVwKSwgdjAKKwltb3YJOCh1cCksICVyYXgKKwltdWwJdjAKKwltb3YJJXJheCwgdzAKKwltb3YJJXJkeCwgdzEKKwltb3YJMTYodXApLCAlcmF4CisJbXVsCXYwCisJeG9yCVIzMih3MiksIFIzMih3MikKKwlhZGQJJXJheCwgdzEKKwlhZGMJJXJkeCwgdzIKKworCW1vdgk4KHVwKSwgdjAKKwltb3YJMTYodXApLCAlcmF4CisJbXVsCXYwCisJeG9yCVIzMih3MyksIFIzMih3MykKKwlhZGQJJXJheCwgdzIKKwlhZGMJJXJkeCwgdzMKKwlhZGQJdzAsIHcwCisJYWRjCXcxLCB3MQorCWFkYwl3MiwgdzIKKwlhZGMJdzMsIHczCisJbW92CSQwLCBSMzIodjApCisJYWRjCXYwLCB2MAorCWFkZAl3MCwgOChycCkKKwlhZGMJdzEsIDE2KHJwKQorCWFkYwl3MiwgMjQocnApCisJYWRjCXczLCAzMihycCkKKwlhZGMJdjAsIDQwKHJwKQorCUZVTkNfRVhJVCgpCisJcmV0CisKK0woZzMpOglwdXNoCSVyYngKKwlwdXNoCSVyYnAKKworCW1vdgk4KHVwKSwgJXJheAorCWxlYQktMjQocnAsdW5fcGFyYW0sOCksIHJwCisJbGVhCS0yNCh1cCx1bl9wYXJhbSw4KSwgdXAKKwluZWcJdW5fcGFyYW0KKwlwdXNoCXVuX3BhcmFtCQlDIGZvciBzcXJfZGlhZ19hZGRsc2gxCisJbGVhCSh1bl9wYXJhbSksIHVuCisJbGVhCTModW5fcGFyYW0pLCBuCisKKwltdWwJdjAKKwltb3YJJXJheCwgdzIKKwltb3YJJXJkeCwgdzMKKwlqbXAJTChMMykKKworCUFMSUdOKDE2KQorTCh0b3ApOgltb3YJdzAsIC0xNihycCxuLDgpCisJYWRkCXcxLCB3MgorCWFkYwkkMCwgdzMKKwltb3YJKHVwLG4sOCksICVyYXgKKwltdWwJdjAKKwltb3YJJXJheCwgdzAKKwltb3YJJXJkeCwgdzEKKwltb3YJdzIsIC04KHJwLG4sOCkKKwlhZGQJdzMsIHcwCisJYWRjCSQwLCB3MQorCW1vdgk4KHVwLG4sOCksICVyYXgKKwltdWwJdjAKKwltb3YJJXJheCwgdzIKKwltb3YJJXJkeCwgdzMKKwltb3YJdzAsIChycCxuLDgpCisJYWRkCXcxLCB3MgorCWFkYwkkMCwgdzMKK0woTDMpOgltb3YJMTYodXAsbiw4KSwgJXJheAorCW11bAl2MAorCW1vdgklcmF4LCB3MAorCW1vdgklcmR4LCB3MQorCW1vdgl3MiwgOChycCxuLDgpCisJYWRkCXczLCB3MAorCWFkYwkkMCwgdzEKKwltb3YJMjQodXAsbiw4KSwgJXJheAorCW11bAl2MAorCW1vdgklcmF4LCB3MgorCW1vdgklcmR4LCB3MworCWFkZAkkNCwgbgorCWpzCUwodG9wKQorCisJbW92CXcwLCAtMTYocnAsbiw4KQorCWFkZAl3MSwgdzIKKwlhZGMJJDAsIHczCisKKwl0ZXN0CW4sIG4KKwlqeglMKHIyKQorCWNtcAkkMiwgUjMyKG4pCisJamEJTChyMykKKwlqeglMKHIwKQorCisKK0wocjEpOgltb3YJWCgodXAsbiw4KSw4KHVwKSksICVyYXgKKwltdWwJdjAKKwltb3YJJXJheCwgdzAKKwltb3YJJXJkeCwgdzEKKwltb3YJdzIsIFgoLTgocnAsbiw4KSwocnApKQorCWFkZAl3MywgdzAKKwlhZGMJJDAsIHcxCisJbW92CVgoOCh1cCxuLDgpLDE2KHVwKSksICVyYXgKKwltdWwJdjAKKwltb3YJJXJheCwgdzIKKwltb3YJJXJkeCwgdzMKKwltb3YJdzAsIFgoKHJwLG4sOCksOChycCkpCisJYWRkCXcxLCB3MgorCWFkYwkkMCwgdzMKKwltb3YJdzIsIFgoOChycCxuLDgpLDE2KHJwKSkKKwltb3YJdzMsIFgoMTYocnAsbiw4KSwyNChycCkpCisJYWRkCSQ1LCB1bgorCWptcAlMKHRvMCkKKworTChyMik6CW1vdglYKCh1cCxuLDgpLCh1cCkpLCAlcmF4CisJbXVsCXYwCisJbW92CSVyYXgsIHcwCisJbW92CSVyZHgsIHcxCisJbW92CXcyLCBYKC04KHJwLG4sOCksLTgocnApKQorCWFkZAl3MywgdzAKKwlhZGMJJDAsIHcxCisJbW92CVgoOCh1cCxuLDgpLDgodXApKSwgJXJheAorCW11bAl2MAorCW1vdgklcmF4LCB3MgorCW1vdgklcmR4LCB3MworCW1vdgl3MCwgWCgocnAsbiw4KSwocnApKQorCWFkZAl3MSwgdzIKKwlhZGMJJDAsIHczCisJbW92CVgoMTYodXAsbiw4KSwxNih1cCkpLCAlcmF4CisJbXVsCXYwCisJbW92CSVyYXgsIHcwCisJbW92CSVyZHgsIHcxCisJbW92CXcyLCBYKDgocnAsbiw4KSw4KHJwKSkKKwlhZGQJdzMsIHcwCisJYWRjCSQwLCB3MQorCW1vdgl3MCwgWCgxNihycCxuLDgpLDE2KHJwKSkKKwlhZGMJJDAsIHczCisJbW92CXcxLCBYKDI0KHJwLG4sOCksMjQocnApKQorCWFkZAkkNiwgdW4KKwlqbXAJTCh0bzEpCisKK0wocjMpOgltb3YJdzIsIFgoLTgocnAsbiw4KSwxNihycCkpCisJbW92CXczLCBYKChycCxuLDgpLDI0KHJwKSkKKwlhZGQJJDMsIHVuCisJam1wCUwodG8yKQorCitMKHIwKToJbW92CVgoKHVwLG4sOCksMTYodXApKSwgJXJheAorCW11bAl2MAorCW1vdgklcmF4LCB3MAorCW1vdgklcmR4LCB3MQorCW1vdgl3MiwgWCgtOChycCxuLDgpLDgocnApKQorCWFkZAl3MywgdzAKKwlhZGMJJDAsIHcxCisJbW92CXcwLCBYKChycCxuLDgpLDE2KHJwKSkKKwltb3YJdzEsIFgoOChycCxuLDgpLDI0KHJwKSkKKwlhZGQJJDQsIHVuCitDCWptcAlMKHRvMykKK0MgZmFsbCB0aHJvdWdoIGludG8gbWFpbiBsb29wCisKKworTChvdXRlcik6CisJbW92CXVuLCBuCisJbW92CSh1cCx1biw4KSwgdjAKKwltb3YJOCh1cCx1biw4KSwgJXJheAorCWxlYQk4KHJwKSwgcnAKKwltdWwJdjAKKwltb3YJJXJheCwgdzIKKwltb3YJJXJkeCwgdzMKKwlqbXAJTChhbDMpCisKKwlBTElHTigxNikKK0wodGEzKToJYWRkCXcwLCAtMTYocnAsbiw4KQorCWFkYwl3MSwgdzIKKwlhZGMJJDAsIHczCisJbW92CSh1cCxuLDgpLCAlcmF4CisJbXVsCXYwCisJbW92CSVyYXgsIHcwCisJbW92CSVyZHgsIHcxCisJYWRkCXcyLCAtOChycCxuLDgpCisJYWRjCXczLCB3MAorCWFkYwkkMCwgdzEKKwltb3YJOCh1cCxuLDgpLCAlcmF4CisJbXVsCXYwCisJbW92CSVyYXgsIHcyCisJbW92CSVyZHgsIHczCisJYWRkCXcwLCAocnAsbiw4KQorCWFkYwl3MSwgdzIKKwlhZGMJJDAsIHczCitMKGFsMyk6CW1vdgkxNih1cCxuLDgpLCAlcmF4CisJbXVsCXYwCisJbW92CSVyYXgsIHcwCisJbW92CSVyZHgsIHcxCisJYWRkCXcyLCA4KHJwLG4sOCkKKwlhZGMJdzMsIHcwCisJYWRjCSQwLCB3MQorCW1vdgkyNCh1cCxuLDgpLCAlcmF4CisJbXVsCXYwCisJbW92CSVyYXgsIHcyCisJbW92CSVyZHgsIHczCisJYWRkCSQ0LCBuCisJanMJTCh0YTMpCisKKwlhZGQJdzAsIFgoLTE2KHJwLG4sOCksOChycCkpCisJYWRjCXcxLCB3MgorCWFkYwkkMCwgdzMKKwlhZGQJdzIsIFgoLTgocnAsbiw4KSwxNihycCkpCisJYWRjCSQwLCB3MworCW1vdgl3MywgWCgocnAsbiw4KSwyNChycCkpCisKKworTCh0bzIpOgltb3YJdW4sIG4KKwljbXAJJC00LCBSMzIodW4pCisJam5jCUwoZW5kKQorCWFkZAkkNCwgdW4KKwltb3YJOCh1cCxuLDgpLCB2MAorCW1vdgkxNih1cCxuLDgpLCAlcmF4CisJbGVhCTgocnApLCBycAorCW11bAl2MAorCW1vdgklcmF4LCB3MAorCW1vdgklcmR4LCB3MQorCWptcAlMKGFsMikKKworCUFMSUdOKDE2KQorTCh0YTIpOglhZGQJdzAsIC0xNihycCxuLDgpCisJYWRjCXcxLCB3MgorCWFkYwkkMCwgdzMKKwltb3YJKHVwLG4sOCksICVyYXgKKwltdWwJdjAKKwltb3YJJXJheCwgdzAKKwltb3YJJXJkeCwgdzEKKwlhZGQJdzIsIC04KHJwLG4sOCkKKwlhZGMJdzMsIHcwCisJYWRjCSQwLCB3MQorCW1vdgk4KHVwLG4sOCksICVyYXgKKwltdWwJdjAKKwltb3YJJXJheCwgdzIKKwltb3YJJXJkeCwgdzMKKwlhZGQJdzAsIChycCxuLDgpCisJYWRjCXcxLCB3MgorCWFkYwkkMCwgdzMKKwltb3YJMTYodXAsbiw4KSwgJXJheAorCW11bAl2MAorCW1vdgklcmF4LCB3MAorCW1vdgklcmR4LCB3MQorCWFkZAl3MiwgOChycCxuLDgpCisJYWRjCXczLCB3MAorCWFkYwkkMCwgdzEKK0woYWwyKToJbW92CTI0KHVwLG4sOCksICVyYXgKKwltdWwJdjAKKwltb3YJJXJheCwgdzIKKwltb3YJJXJkeCwgdzMKKwlhZGQJJDQsIG4KKwlqcwlMKHRhMikKKworCWFkZAl3MCwgWCgtMTYocnAsbiw4KSw4KHJwKSkKKwlhZGMJdzEsIHcyCisJYWRjCSQwLCB3MworCWFkZAl3MiwgWCgtOChycCxuLDgpLDE2KHJwKSkKKwlhZGMJJDAsIHczCisJbW92CXczLCBYKChycCxuLDgpLDI0KHJwKSkKKworCitMKHRvMSk6CW1vdgl1biwgbgorCW1vdgktMTYodXAsdW4sOCksIHYwCisJbW92CS04KHVwLHVuLDgpLCAlcmF4CisJbGVhCTgocnApLCBycAorCW11bAl2MAorCW1vdgklcmF4LCB3MgorCW1vdgklcmR4LCB3MworCWptcAlMKGFsMSkKKworCUFMSUdOKDE2KQorTCh0YTEpOglhZGQJdzAsIC0xNihycCxuLDgpCisJYWRjCXcxLCB3MgorCWFkYwkkMCwgdzMKK0woYWwxKToJbW92CSh1cCxuLDgpLCAlcmF4CisJbXVsCXYwCisJbW92CSVyYXgsIHcwCisJbW92CSVyZHgsIHcxCisJYWRkCXcyLCAtOChycCxuLDgpCisJYWRjCXczLCB3MAorCWFkYwkkMCwgdzEKKwltb3YJOCh1cCxuLDgpLCAlcmF4CisJbXVsCXYwCisJbW92CSVyYXgsIHcyCisJbW92CSVyZHgsIHczCisJYWRkCXcwLCAocnAsbiw4KQorCWFkYwl3MSwgdzIKKwlhZGMJJDAsIHczCisJbW92CTE2KHVwLG4sOCksICVyYXgKKwltdWwJdjAKKwltb3YJJXJheCwgdzAKKwltb3YJJXJkeCwgdzEKKwlhZGQJdzIsIDgocnAsbiw4KQorCWFkYwl3MywgdzAKKwlhZGMJJDAsIHcxCisJbW92CTI0KHVwLG4sOCksICVyYXgKKwltdWwJdjAKKwltb3YJJXJheCwgdzIKKwltb3YJJXJkeCwgdzMKKwlhZGQJJDQsIG4KKwlqcwlMKHRhMSkKKworCWFkZAl3MCwgWCgtMTYocnAsbiw4KSw4KHJwKSkKKwlhZGMJdzEsIHcyCisJYWRjCSQwLCB3MworCWFkZAl3MiwgWCgtOChycCxuLDgpLDE2KHJwKSkKKwlhZGMJJDAsIHczCisJbW92CXczLCBYKChycCxuLDgpLDI0KHJwKSkKKworCitMKHRvMCk6CW1vdgl1biwgbgorCW1vdgktOCh1cCx1biw4KSwgdjAKKwltb3YJKHVwLHVuLDgpLCAlcmF4CisJbGVhCTgocnApLCBycAorCW11bAl2MAorCW1vdgklcmF4LCB3MAorCW1vdgklcmR4LCB3MQorCWptcAlMKGFsMCkKKworCUFMSUdOKDE2KQorTCh0YTApOglhZGQJdzAsIC0xNihycCxuLDgpCisJYWRjCXcxLCB3MgorCWFkYwkkMCwgdzMKKwltb3YJKHVwLG4sOCksICVyYXgKKwltdWwJdjAKKwltb3YJJXJheCwgdzAKKwltb3YJJXJkeCwgdzEKKwlhZGQJdzIsIC04KHJwLG4sOCkKKwlhZGMJdzMsIHcwCisJYWRjCSQwLCB3MQorTChhbDApOgltb3YJOCh1cCxuLDgpLCAlcmF4CisJbXVsCXYwCisJbW92CSVyYXgsIHcyCisJbW92CSVyZHgsIHczCisJYWRkCXcwLCAocnAsbiw4KQorCWFkYwl3MSwgdzIKKwlhZGMJJDAsIHczCisJbW92CTE2KHVwLG4sOCksICVyYXgKKwltdWwJdjAKKwltb3YJJXJheCwgdzAKKwltb3YJJXJkeCwgdzEKKwlhZGQJdzIsIDgocnAsbiw4KQorCWFkYwl3MywgdzAKKwlhZGMJJDAsIHcxCisJbW92CTI0KHVwLG4sOCksICVyYXgKKwltdWwJdjAKKwltb3YJJXJheCwgdzIKKwltb3YJJXJkeCwgdzMKKwlhZGQJJDQsIG4KKwlqcwlMKHRhMCkKKworCWFkZAl3MCwgWCgtMTYocnAsbiw4KSw4KHJwKSkKKwlhZGMJdzEsIHcyCisJYWRjCSQwLCB3MworCWFkZAl3MiwgWCgtOChycCxuLDgpLDE2KHJwKSkKKwlhZGMJJDAsIHczCisJbW92CXczLCBYKChycCxuLDgpLDI0KHJwKSkKKwlqbXAJTChvdXRlcikKKworCitMKGVuZCk6CW1vdglYKDgodXAsdW4sOCksKHVwKSksIHYwCisJbW92CVgoMTYodXAsdW4sOCksOCh1cCkpLCAlcmF4CisJbXVsCXYwCisJbW92CSVyYXgsIHcwCisJbW92CSVyZHgsIHcxCisJbW92CVgoMjQodXAsdW4sOCksMTYodXApKSwgJXJheAorCW11bAl2MAorCW1vdgklcmF4LCB3MgorCW1vdgklcmR4LCB3MworCWFkZAl3MCwgWCgyNChycCx1biw4KSwxNihycCkpCisJYWRjCXcxLCB3MgorCWFkYwkkMCwgdzMKKwlhZGQJdzIsIFgoMzIocnAsdW4sOCksMjQocnApKQorCWFkYwkkMCwgdzMKKwltb3YJWCgxNih1cCx1biw4KSw4KHVwKSksIHYwCisJbW92CVgoMjQodXAsdW4sOCksMTYodXApKSwgJXJheAorCW11bAl2MAorCWFkZAklcmF4LCB3MworCW1vdgl3MywgWCg0MChycCx1biw4KSwzMihycCkpCisJYWRjCSQwLCAlcmR4CisJbW92CSVyZHgsIFgoNDgocnAsdW4sOCksNDAocnApKQorCisKK0Mgc3FyX2RpYWdfYWRkbHNoMQorCisJbGVhCTE2KHVwKSwgdXAKKwlsZWEJNDAocnApLCBycAorCXBvcAluCisJbGVhCTIobixuKSwgbgorCisJbW92CSh1cCxuLDQpLCAlcmF4CisJbXVsCSVyYXgKKwl4b3IJUjMyKHcyKSwgUjMyKHcyKQorCisJbW92CTgocnAsbiw4KSwgdzAKKwltb3YJJXJheCwgKHJwLG4sOCkKKwlqbXAJTChsbSkKKworCUFMSUdOKDgpCitMKHRzZCk6CWFkZAklcmJ4LCB3MAorCWFkYwklcmF4LCB3MQorCW1vdgl3MCwgLTgocnAsbiw4KQorCW1vdgk4KHJwLG4sOCksIHcwCisJbW92CXcxLCAocnAsbiw4KQorTChsbSk6CW1vdgkxNihycCxuLDgpLCB3MQorCWFkYwl3MCwgdzAKKwlhZGMJdzEsIHcxCisJbGVhCSglcmR4LHcyKSwgJXJieAorCW1vdgk4KHVwLG4sNCksICVyYXgKKwlzZXRjCVI4KHcyKQorCW11bAklcmF4CisJYWRkCSQyLCBuCisJanMJTCh0c2QpCisKK0woZXNkKToJYWRkCSVyYngsIHcwCisJYWRjCSVyYXgsIHcxCisJbW92CXcwLCBYKC04KHJwLG4sOCksLTgocnApKQorCW1vdgl3MSwgWCgocnAsbiw4KSwocnApKQorCWFkYwl3MiwgJXJkeAorCW1vdgklcmR4LCBYKDgocnAsbiw4KSw4KHJwKSkKKworCXBvcAklcmJwCisJcG9wCSVyYngKKwlGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYnQyL2NvbS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9idDIvY29tLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzA4NWVhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYnQyL2NvbS5hc20KQEAgLTAsMCArMSwzNyBAQAorZG5sICBYODYtNjQgbXBuX2NvbS4KKworZG5sICBDb3B5cmlnaHQgMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9jb20pCitpbmNsdWRlX21wbihgeDg2XzY0L2Zhc3Rzc2UvY29tLmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9idDIvY29weWQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYnQyL2NvcHlkLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2MwNjE4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYnQyL2NvcHlkLmFzbQpAQCAtMCwwICsxLDM3IEBACitkbmwgIFg4Ni02NCBtcG5fY29weWQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fY29weWQpCitpbmNsdWRlX21wbihgeDg2XzY0L2Zhc3Rzc2UvY29weWQuYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2J0Mi9jb3B5aS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9idDIvY29weWkuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0OGQwZTUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9idDIvY29weWkuYXNtCkBAIC0wLDAgKzEsMzcgQEAKK2RubCAgWDg2LTY0IG1wbl9jb3B5aS4KKworZG5sICBDb3B5cmlnaHQgMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9jb3B5aSkKK2luY2x1ZGVfbXBuKGB4ODZfNjQvZmFzdHNzZS9jb3B5aS5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYnQyL2djZF8xMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9idDIvZ2NkXzExLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmZiNmNhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYnQyL2djZF8xMS5hc20KQEAgLTAsMCArMSwzNyBAQAorZG5sICBBTUQ2NCBtcG5fZ2NkXzExLgorCitkbmwgIENvcHlyaWdodCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2djZF8xMSkKK2luY2x1ZGVfbXBuKGB4ODZfNjQvYmQyL2djZF8xMS5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYnQyL2djZF8yMi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9idDIvZ2NkXzIyLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjkzNjI4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYnQyL2djZF8yMi5hc20KQEAgLTAsMCArMSwzNyBAQAorZG5sICBBTUQ2NCBtcG5fZ2NkXzIyLgorCitkbmwgIENvcHlyaWdodCAyMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK2RubCBBQklfU1VQUE9SVChET1M2NCkJQyByZXR1cm5zIG1wX2RvdWJsZV9saW1iX3QgaW4gbWVtb3J5CitBQklfU1VQUE9SVChTVEQ2NCkKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fZ2NkXzIyKQoraW5jbHVkZV9tcG4oYHg4Nl82NC9iZDIvZ2NkXzIyLmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9idDIvZ21wLW1wYXJhbS5oIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYnQyL2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTI2NzI2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvYnQyL2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDI0MCBAQAorLyogQU1EIEphZ3VhciBnbXAtbXBhcmFtLmggLS0gQ29tcGlsZXIvbWFjaGluZSBwYXJhbWV0ZXIgaGVhZGVyIGZpbGUuCisKK0NvcHlyaWdodCAyMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgNjQKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgOAorCisvKiBEaXNhYmxlIHVzZSBvZiBzbG93IGZ1bmN0aW9ucy4gIEZJWE1FOiBXZSBzaG91bGQgZGlzYWJsZSBsaWIgaW5jbHVzaW9uLiAgKi8KKyN1bmRlZiBIQVZFX05BVElWRV9tcG5fbXVsXzIKKyN1bmRlZiBIQVZFX05BVElWRV9tcG5fYWRkbXVsXzIKKworLyogMjA1MCBNSHogQU1EIEphZ3Vhci9LYWJpbmkgKi8KKy8qIEZGVCB0dW5pbmcgbGltaXQgPSAyMjUsMzgxLDU0NiAqLworLyogR2VuZXJhdGVkIGJ5IHR1bmV1cC5jLCAyMDE5LTEwLTE4LCBnY2MgOC4zICovCisKKyNkZWZpbmUgTU9EXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgTU9EXzFOX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgIDQKKyNkZWZpbmUgTU9EXzFVX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgIDQKKyNkZWZpbmUgTU9EXzFfMV9UT19NT0RfMV8yX1RIUkVTSE9MRCAgICAgICAgNjUKKyNkZWZpbmUgTU9EXzFfMl9UT19NT0RfMV80X1RIUkVTSE9MRCAgICAgICAgIDAgIC8qIG5ldmVyIG1wbl9tb2RfMXNfMnAgKi8KKyNkZWZpbmUgUFJFSU5WX01PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgMTAKKyNkZWZpbmUgVVNFX1BSRUlOVl9ESVZSRU1fMSAgICAgICAgICAgICAgICAgIDEgIC8qIG5hdGl2ZSAqLworI2RlZmluZSBESVZfUVJfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgNAorI2RlZmluZSBESVZfUVJfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICBNUF9TSVpFX1RfTUFYICAvKiBuZXZlciAqLworI2RlZmluZSBESVZfUVJfMl9QSTJfVEhSRVNIT0xEICAgICAgICAgICBNUF9TSVpFX1RfTUFYICAvKiBuZXZlciAqLworI2RlZmluZSBESVZFWEFDVF8xX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIEJNT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgICAgICAgIDE1CisKKyNkZWZpbmUgRElWXzFfVlNfTVVMXzFfUEVSQ0VOVCAgICAgICAgICAgICAyNjcKKworI2RlZmluZSBNVUxfVE9PTTIyX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyNQorI2RlZmluZSBNVUxfVE9PTTMzX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBNVUxfVE9PTTQ0X1RIUkVTSE9MRCAgICAgICAgICAgICAgICA5MworI2RlZmluZSBNVUxfVE9PTTZIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDM2NgorI2RlZmluZSBNVUxfVE9PTThIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDUzNworCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTQzX1RIUkVTSE9MRCAgICAgIDYzCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgMTcyCisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgIDYzCisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTYzX1RIUkVTSE9MRCAgICAgIDY3CisjZGVmaW5lIE1VTF9UT09NNDNfVE9fVE9PTTU0X1RIUkVTSE9MRCAgICAgIDkxCisKKyNkZWZpbmUgU1FSX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAobmF0aXZlKSAqLworI2RlZmluZSBTUVJfVE9PTTJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBTUVJfVE9PTTNfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA5NworI2RlZmluZSBTUVJfVE9PTTRfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDIyMAorI2RlZmluZSBTUVJfVE9PTTZfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDMxOAorI2RlZmluZSBTUVJfVE9PTThfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDQzNAorCisjZGVmaW5lIE1VTE1JRF9UT09NNDJfVEhSRVNIT0xEICAgICAgICAgICAgIDIwCisKKyNkZWZpbmUgTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgU1FSTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTMKKworI2RlZmluZSBNVUxfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDM0OCAgLyogayA9IDUgKi8KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDM0OCwgNX0sIHsgICAgIDE3LCA2fSwgeyAgICAgIDksIDV9LCB7ICAgICAxOSwgNn0sIFwKKyAgICB7ICAgICAyMywgN30sIHsgICAgIDIxLCA4fSwgeyAgICAgMTEsIDd9LCB7ICAgICAyNCwgOH0sIFwKKyAgICB7ICAgICAxMywgN30sIHsgICAgIDI4LCA4fSwgeyAgICAgMTUsIDd9LCB7ICAgICAzMSwgOH0sIFwKKyAgICB7ICAgICAxNywgN30sIHsgICAgIDM1LCA4fSwgeyAgICAgMTksIDd9LCB7ICAgICAzOSwgOH0sIFwKKyAgICB7ICAgICAyMSwgOX0sIHsgICAgIDExLCA4fSwgeyAgICAgMjksIDl9LCB7ICAgICAxNSwgOH0sIFwKKyAgICB7ICAgICAzNSwgOX0sIHsgICAgIDE5LCA4fSwgeyAgICAgNDEsIDl9LCB7ICAgICAyMywgOH0sIFwKKyAgICB7ICAgICA0OSwgOX0sIHsgICAgIDI3LDEwfSwgeyAgICAgMTUsIDl9LCB7ICAgICAzOSwxMH0sIFwKKyAgICB7ICAgICAyMywgOX0sIHsgICAgIDU1LDExfSwgeyAgICAgMTUsMTB9LCB7ICAgICAzMSwgOX0sIFwKKyAgICB7ICAgICA2NywxMH0sIHsgICAgIDM5LCA5fSwgeyAgICAgNzksMTB9LCB7ICAgICA1NSwxMX0sIFwKKyAgICB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA2fSwgeyAgIDEwODcsIDh9LCB7ICAgIDMwMywgOX0sIFwKKyAgICB7ICAgIDE1OSwxMH0sIHsgICAgIDk1LDEyfSwgeyAgICAgMzEsMTF9LCB7ICAgICA2MywxMH0sIFwKKyAgICB7ICAgIDEyNywgOX0sIHsgICAgMjU1LDExfSwgeyAgICAgNzksMTB9LCB7ICAgIDE1OSwgOX0sIFwKKyAgICB7ICAgIDMxOSwxMH0sIHsgICAgMTY3LDExfSwgeyAgICAgOTUsMTB9LCB7ICAgIDE5MSwgOX0sIFwKKyAgICB7ICAgIDM4MywxMH0sIHsgICAgMjA3LCA5fSwgeyAgICA0MTUsMTF9LCB7ICAgIDExMSwxMn0sIFwKKyAgICB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgeyAgICAyNTUsIDl9LCB7ICAgIDUxMSwxMH0sIFwKKyAgICB7ICAgIDI3MSwxMX0sIHsgICAgMTQzLDEwfSwgeyAgICAyODcsIDl9LCB7ICAgIDU3NSwxMH0sIFwKKyAgICB7ICAgIDMwMywxMX0sIHsgICAgMTU5LDEwfSwgeyAgICAzMTksMTJ9LCB7ICAgICA5NSwxMX0sIFwKKyAgICB7ICAgIDE5MSwxMH0sIHsgICAgMzgzLDExfSwgeyAgICAyMDcsMTB9LCB7ICAgIDQxNSwxMX0sIFwKKyAgICB7ICAgIDIyMywxM30sIHsgICAgIDYzLDEyfSwgeyAgICAxMjcsMTF9LCB7ICAgIDI1NSwxMH0sIFwKKyAgICB7ICAgIDUxMSwxMX0sIHsgICAgMjcxLDEwfSwgeyAgICA1NDMsMTF9LCB7ICAgIDI4NywxMH0sIFwKKyAgICB7ICAgIDU3NSwxMX0sIHsgICAgMzAzLDEyfSwgeyAgICAxNTksMTF9LCB7ICAgIDMxOSwxMH0sIFwKKyAgICB7ICAgIDYzOSwxMX0sIHsgICAgMzUxLDEyfSwgeyAgICAxOTEsMTF9LCB7ICAgIDQxNSwxMn0sIFwKKyAgICB7ICAgIDIyMywxMX0sIHsgICAgNDc5LDEzfSwgeyAgICAxMjcsMTJ9LCB7ICAgIDI1NSwxMX0sIFwKKyAgICB7ICAgIDU0MywxMn0sIHsgICAgMjg3LDExfSwgeyAgICA2MDcsMTJ9LCB7ICAgIDMxOSwxMX0sIFwKKyAgICB7ICAgIDYzOSwxMn0sIHsgICAgMzUxLDEzfSwgeyAgICAxOTEsMTJ9LCB7ICAgIDM4MywxMX0sIFwKKyAgICB7ICAgIDc2NywxMn0sIHsgICAgNDE1LDExfSwgeyAgICA4MzEsMTJ9LCB7ICAgIDQ3OSwxNH0sIFwKKyAgICB7ICAgIDEyNywxM30sIHsgICAgMjU1LDEyfSwgeyAgICA1NDMsMTF9LCB7ICAgMTA4NywxMn0sIFwKKyAgICB7ICAgIDYwNywxM30sIHsgICAgMzE5LDEyfSwgeyAgICA3MDMsMTN9LCB7ICAgIDM4MywxMn0sIFwKKyAgICB7ICAgIDgzMSwxM30sIHsgICAgNDQ3LDEyfSwgeyAgICA4OTUsMTR9LCB7ICAgIDI1NSwxM30sIFwKKyAgICB7ICAgIDUxMSwxMn0sIHsgICAxMDIzLDEzfSwgeyAgICA1NzUsMTJ9LCB7ICAgMTE1MSwxM30sIFwKKyAgICB7ICAgIDYzOSwxMn0sIHsgICAxMjc5LDEzfSwgeyAgICA3MDMsMTR9LCB7ICAgIDM4MywxM30sIFwKKyAgICB7ICAgIDgzMSwxMn0sIHsgICAxNjYzLDEzfSwgeyAgICA4OTUsMTV9LCB7ICAgIDI1NSwxNH0sIFwKKyAgICB7ICAgIDUxMSwxM30sIHsgICAxMDg3LDEyfSwgeyAgIDIxNzUsMTN9LCB7ICAgMTE1MSwxNH0sIFwKKyAgICB7ICAgIDYzOSwxM30sIHsgICAxMzQzLDEyfSwgeyAgIDI2ODcsMTR9LCB7ICAgIDc2NywxM30sIFwKKyAgICB7ICAgMTY2MywxNH0sIHsgICAgODk1LDE1fSwgeyAgICA1MTEsMTR9LCB7ICAgMTAyMywxM30sIFwKKyAgICB7ICAgMjE3NSwxNH0sIHsgICAxMTUxLDEzfSwgeyAgIDI0MzEsMTR9LCB7ICAgMTI3OSwxM30sIFwKKyAgICB7ICAgMjY4NywxNX0sIHsgICAgNzY3LDE0fSwgeyAgIDE2NjMsMTN9LCB7ICAgMzMyNywxNn0sIFwKKyAgICB7ICAgIDUxMSwxNX0sIHsgICAxMDIzLDE0fSwgeyAgIDIxNzUsMTN9LCB7ICAgNDM1MSwxNH0sIFwKKyAgICB7ICAgMjQzMSwxM30sIHsgICA0ODYzLDE1fSwgeyAgIDEyNzksMTR9LCB7ICAgMjk0MywxM30sIFwKKyAgICB7ICAgNTg4NywxNX0sIHsgICAxNTM1LDE0fSwgeyAgIDM0NTUsMTN9LCB7ICAgNjkxMSwxNX0sIFwKKyAgICB7ICAgMTc5MSwxNH0sIHsgICAzODM5LDEzfSwgeyAgIDc2NzksMTZ9LCB7ICAgMTAyMywxNX0sIFwKKyAgICB7ICAgMjA0NywxNH0sIHsgICA0MjIzLDEzfSwgeyAgIDg0NDcsMTR9LCB7ICAgNDQ3OSwxNX0sIFwKKyAgICB7ICAgMjMwMywxNH0sIHsgICA0ODYzLDE1fSwgeyAgIDI1NTksMTR9LCB7ICAgNTI0NywxNX0sIFwKKyAgICB7ICAgMjgxNSwxNH0sIHsgICA1ODg3LDE2fSwgeyAgIDE1MzUsMTV9LCB7ICAgMzA3MSwxNH0sIFwKKyAgICB7ICAgNjI3MSwxNX0sIHsgICAzMzI3LDE0fSwgeyAgIDY5MTEsMTV9LCB7ICAgMzgzOSwxNH0sIFwKKyAgICB7ICAgNzY3OSwxN30sIHsgICAxMDIzLDE2fSwgeyAgIDIwNDcsMTV9LCB7ICAgNDA5NSwxNH0sIFwKKyAgICB7ICAgODQ0NywxNX0sIHsgICA0MzUxLDE0fSwgeyAgIDg5NTksMTV9LCB7ICAgNDg2MywxNn0sIFwKKyAgICB7ICAgMjU1OSwxNX0sIHsgICA1ODg3LDE0fSwgeyAgMTE3NzUsMTZ9LCB7ICAgMzA3MSwxNX0sIFwKKyAgICB7ICAzMjc2OCwxNn0sIHsgIDY1NTM2LDE3fSwgeyAxMzEwNzIsMTh9LCB7IDI2MjE0NCwxOX0sIFwKKyAgICB7IDUyNDI4OCwyMH0sIHsxMDQ4NTc2LDIxfSwgezIwOTcxNTIsMjJ9LCB7NDE5NDMwNCwyM30sIFwKKyAgICB7ODM4ODYwOCwyNH0gfQorI2RlZmluZSBNVUxfRkZUX1RBQkxFM19TSVpFIDIwMQorI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMzIwMAorCisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgMzQwICAvKiBrID0gNSAqLworI2RlZmluZSBTUVJfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgMzQwLCA1fSwgeyAgICAgMTksIDZ9LCB7ICAgICAxMCwgNX0sIHsgICAgIDIxLCA2fSwgXAorICAgIHsgICAgIDExLCA1fSwgeyAgICAgMjMsIDZ9LCB7ICAgICAyMSwgN30sIHsgICAgIDExLCA2fSwgXAorICAgIHsgICAgIDIzLCA3fSwgeyAgICAgMTIsIDZ9LCB7ICAgICAyNSwgN30sIHsgICAgIDEzLCA2fSwgXAorICAgIHsgICAgIDI3LCA3fSwgeyAgICAgMjEsIDh9LCB7ICAgICAxMSwgN30sIHsgICAgIDI1LCA4fSwgXAorICAgIHsgICAgIDEzLCA3fSwgeyAgICAgMjcsIDh9LCB7ICAgICAxNSwgN30sIHsgICAgIDMxLCA4fSwgXAorICAgIHsgICAgIDIxLCA5fSwgeyAgICAgMTEsIDh9LCB7ICAgICAyNywgOX0sIHsgICAgIDE1LCA4fSwgXAorICAgIHsgICAgIDM1LCA5fSwgeyAgICAgMTksIDh9LCB7ICAgICA0MSwgOX0sIHsgICAgIDIzLCA4fSwgXAorICAgIHsgICAgIDQ3LCA5fSwgeyAgICAgMjcsMTB9LCB7ICAgICAxNSwgOX0sIHsgICAgIDM5LDEwfSwgXAorICAgIHsgICAgIDIzLCA5fSwgeyAgICAgNTEsMTF9LCB7ICAgICAxNSwxMH0sIHsgICAgIDMxLCA5fSwgXAorICAgIHsgICAgIDYzLDEwfSwgeyAgICAgMzksIDl9LCB7ICAgICA3OSwxMH0sIHsgICAgIDQ3LDExfSwgXAorICAgIHsgICAgIDMxLDEwfSwgeyAgICAgNzksMTF9LCB7ICAgICA0NywxMH0sIHsgICAgIDk1LCA2fSwgXAorICAgIHsgICAxNjYzLCA3fSwgeyAgICA4OTUsIDl9LCB7ICAgIDIzOSwgOH0sIHsgICAgNDc5LDEwfSwgXAorICAgIHsgICAgMTI3LCA5fSwgeyAgICAyNTUsIDh9LCB7ICAgIDUxMSwxMH0sIHsgICAgMTM1LCA5fSwgXAorICAgIHsgICAgMjcxLDExfSwgeyAgICAgNzksIDl9LCB7ICAgIDMxOSwxMX0sIHsgICAgIDk1LDEwfSwgXAorICAgIHsgICAgMTkxLCA5fSwgeyAgICAzODMsMTB9LCB7ICAgIDIwNywxMX0sIHsgICAgMTExLDEyfSwgXAorICAgIHsgICAgIDYzLDExfSwgeyAgICAxMjcsMTB9LCB7ICAgIDI1NSwgOX0sIHsgICAgNTExLDEwfSwgXAorICAgIHsgICAgMjcxLCA5fSwgeyAgICA1NDMsMTB9LCB7ICAgIDI4NywgOX0sIHsgICAgNTc1LDEwfSwgXAorICAgIHsgICAgMzAzLCA5fSwgeyAgICA2MDcsMTB9LCB7ICAgIDMxOSwgOX0sIHsgICAgNjM5LDEyfSwgXAorICAgIHsgICAgIDk1LDExfSwgeyAgICAxOTEsMTB9LCB7ICAgIDM4MywxMX0sIHsgICAgMjA3LDEwfSwgXAorICAgIHsgICAgNDE1LDEzfSwgeyAgICAgNjMsMTJ9LCB7ICAgIDEyNywxMX0sIHsgICAgMjU1LDEwfSwgXAorICAgIHsgICAgNTExLDExfSwgeyAgICAyNzEsMTB9LCB7ICAgIDU0MywxMX0sIHsgICAgMjg3LDEwfSwgXAorICAgIHsgICAgNTc1LDExfSwgeyAgICAzMDMsMTB9LCB7ICAgIDYwNywxMX0sIHsgICAgMzE5LDEwfSwgXAorICAgIHsgICAgNjM5LDExfSwgeyAgICAzNTEsMTB9LCB7ICAgIDcwMywxMX0sIHsgICAgMzY3LDEyfSwgXAorICAgIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTB9LCB7ICAgIDc2NywxMX0sIHsgICAgNDE1LDEyfSwgXAorICAgIHsgICAgMjIzLDExfSwgeyAgICA0NzksMTN9LCB7ICAgIDEyNywxMn0sIHsgICAgMjU1LDExfSwgXAorICAgIHsgICAgNTQzLDEyfSwgeyAgICAyODcsMTF9LCB7ICAgIDYwNywxMn0sIHsgICAgMzE5LDExfSwgXAorICAgIHsgICAgNjM5LDEyfSwgeyAgICAzNTEsMTF9LCB7ICAgIDcwMywxM30sIHsgICAgMTkxLDEyfSwgXAorICAgIHsgICAgMzgzLDExfSwgeyAgICA3NjcsMTJ9LCB7ICAgIDQxNSwxMX0sIHsgICAgODMxLDEyfSwgXAorICAgIHsgICAgNDc5LDE0fSwgeyAgICAxMjcsMTN9LCB7ICAgIDI1NSwxMn0sIHsgICAgNjA3LDEzfSwgXAorICAgIHsgICAgMzE5LDEyfSwgeyAgICA3MzUsMTN9LCB7ICAgIDM4MywxMn0sIHsgICAgODMxLDEzfSwgXAorICAgIHsgICAgNDQ3LDEyfSwgeyAgICA4OTUsMTR9LCB7ICAgIDI1NSwxM30sIHsgICAgNTExLDEyfSwgXAorICAgIHsgICAxMDIzLDEzfSwgeyAgICA1NzUsMTJ9LCB7ICAgMTE1MSwxM30sIHsgICAgNzAzLDE0fSwgXAorICAgIHsgICAgMzgzLDEzfSwgeyAgICA4MzEsMTJ9LCB7ICAgMTY2MywxM30sIHsgICAgODk1LDE1fSwgXAorICAgIHsgICAgMjU1LDE0fSwgeyAgICA1MTEsMTN9LCB7ICAgMTA4NywxMn0sIHsgICAyMTc1LDEzfSwgXAorICAgIHsgICAxMTUxLDE0fSwgeyAgICA2MzksMTN9LCB7ICAgMTM0MywxMn0sIHsgICAyNjg3LDEzfSwgXAorICAgIHsgICAxNDA3LDE0fSwgeyAgICA3NjcsMTN9LCB7ICAgMTU5OSwxMn0sIHsgICAzMTk5LDEzfSwgXAorICAgIHsgICAxNjYzLDE0fSwgeyAgICA4OTUsMTV9LCB7ICAgIDUxMSwxNH0sIHsgICAxMDIzLDEzfSwgXAorICAgIHsgICAyMTc1LDE0fSwgeyAgIDExNTEsMTN9LCB7ICAgMjQzMSwxNH0sIHsgICAxMjc5LDEzfSwgXAorICAgIHsgICAyNjg3LDE0fSwgeyAgIDE0MDcsMTV9LCB7ICAgIDc2NywxNH0sIHsgICAxNTM1LDEzfSwgXAorICAgIHsgICAzMTk5LDE0fSwgeyAgIDE2NjMsMTN9LCB7ICAgMzQ1NSwxNn0sIHsgICAgNTExLDE1fSwgXAorICAgIHsgICAxMDIzLDE0fSwgeyAgIDIxNzUsMTN9LCB7ICAgNDQ3OSwxNH0sIHsgICAyNDMxLDEzfSwgXAorICAgIHsgICA0ODYzLDE1fSwgeyAgIDEyNzksMTR9LCB7ICAgMjk0MywxM30sIHsgICA1ODg3LDE1fSwgXAorICAgIHsgICAxNTM1LDE0fSwgeyAgIDM0NTUsMTN9LCB7ICAgNjkxMSwxNX0sIHsgICAxNzkxLDE0fSwgXAorICAgIHsgICAzODM5LDEzfSwgeyAgIDc2NzksMTZ9LCB7ICAgMTAyMywxNX0sIHsgICAyMDQ3LDE0fSwgXAorICAgIHsgICA0NDc5LDE1fSwgeyAgIDIzMDMsMTR9LCB7ICAgNDk5MSwxNX0sIHsgICAyODE1LDE0fSwgXAorICAgIHsgICA1ODg3LDE2fSwgeyAgIDE1MzUsMTV9LCB7ICAgMzA3MSwxNH0sIHsgICA2MTQzLDE1fSwgXAorICAgIHsgICAzMzI3LDE0fSwgeyAgIDY5MTEsMTV9LCB7ICAgMzgzOSwxNH0sIHsgICA3Njc5LDE3fSwgXAorICAgIHsgICAxMDIzLDE2fSwgeyAgIDIwNDcsMTV9LCB7ICAgNDA5NSwxNH0sIHsgICA4MTkxLDE1fSwgXAorICAgIHsgICA0MzUxLDE0fSwgeyAgIDg5NTksMTV9LCB7ICAgNDg2MywxNn0sIHsgICAyNTU5LDE1fSwgXAorICAgIHsgICA1ODg3LDE0fSwgeyAgMTE3NzUsMTZ9LCB7ICAgMzA3MSwxNX0sIHsgIDMyNzY4LDE2fSwgXAorICAgIHsgIDY1NTM2LDE3fSwgeyAxMzEwNzIsMTh9LCB7IDI2MjE0NCwxOX0sIHsgNTI0Mjg4LDIwfSwgXAorICAgIHsxMDQ4NTc2LDIxfSwgezIwOTcxNTIsMjJ9LCB7NDE5NDMwNCwyM30sIHs4Mzg4NjA4LDI0fSB9CisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzX1NJWkUgMjA4CisjZGVmaW5lIFNRUl9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAyODgwCisKKyNkZWZpbmUgTVVMTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNVUxMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICA2MworI2RlZmluZSBNVUxMT19NVUxfTl9USFJFU0hPTEQgICAgICAgICAgICAgNjI1MworI2RlZmluZSBTUVJMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgOAorI2RlZmluZSBTUVJMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICA1NAorI2RlZmluZSBTUVJMT19TUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgNTU1OAorCisjZGVmaW5lIERDX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDcyCisjZGVmaW5lIERDX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAgMTk1CisjZGVmaW5lIERDX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDUwCisjZGVmaW5lIERDX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDkwCisKKyNkZWZpbmUgSU5WX01VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgNDYKKyNkZWZpbmUgSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgICAxOTUKKyNkZWZpbmUgSU5WX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAxOTcKKworI2RlZmluZSBCSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgIDIzMAorI2RlZmluZSBSRURDXzFfVE9fUkVEQ18yX1RIUkVTSE9MRCAgICAgICAgICA2NworI2RlZmluZSBSRURDXzJfVE9fUkVEQ19OX1RIUkVTSE9MRCAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisKKyNkZWZpbmUgTVVfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDEzMzQKKyNkZWZpbmUgTVVfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgIDEzMzQKKyNkZWZpbmUgTVVQSV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAxMDQKKyNkZWZpbmUgTVVfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgIDEwMTcKKyNkZWZpbmUgTVVfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDExODcKKworI2RlZmluZSBQT1dNX1NFQ19UQUJMRSAgMSwxNiwxOTQsNzEyLDc3OSwyMzg3CisKKyNkZWZpbmUgR0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICAgMjkKKyNkZWZpbmUgU0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAyMTYKKyNkZWZpbmUgU0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICA5OTQKKworI2RlZmluZSBGQUNfRFNDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDE1MworI2RlZmluZSBGQUNfT0REX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisKKyNkZWZpbmUgTUFUUklYMjJfU1RSQVNTRU5fVEhSRVNIT0xEICAgICAgICAgMTcKKyNkZWZpbmUgSEdDRDJfRElWMV9NRVRIT0QgICAgICAgICAgICAgICAgICAgIDEgIC8qIDkuMzglIGZhc3RlciB0aGFuIDMgKi8KKyNkZWZpbmUgSEdDRF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgICAgNzcKKyNkZWZpbmUgSEdDRF9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNTAKKyNkZWZpbmUgSEdDRF9SRURVQ0VfVEhSRVNIT0xEICAgICAgICAgICAgIDIxMjEKKyNkZWZpbmUgR0NEX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICA0NDAKKyNkZWZpbmUgR0NERVhUX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyNzMKKyNkZWZpbmUgSkFDT0JJX0JBU0VfTUVUSE9EICAgICAgICAgICAgICAgICAgIDEgIC8qIDcuNzQlIGZhc3RlciB0aGFuIDQgKi8KKworLyogVHVuZXVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIHRvb2sgNDk1OTEwIHNlY29uZHMgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NuZF9hb3JzX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY25kX2FvcnNfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNhMmFiMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NuZF9hb3JzX24uYXNtCkBAIC0wLDAgKzEsMTgzIEBACitkbmwgIEFNRDY0IG1wbl9jbmRfYWRkX24sIG1wbl9jbmRfc3ViX24KKworZG5sICBDb3B5cmlnaHQgMjAxMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBBTUQgSzgsSzkJIDIKK0MgQU1EIEsxMAkgMgorQyBBTUQgYmQxCSAyLjMyCitDIEFNRCBib2JjYXQJIDMKK0MgSW50ZWwgUDQJMTMKK0MgSW50ZWwgY29yZTIJIDIuOQorQyBJbnRlbCBOSE0JIDIuOAorQyBJbnRlbCBTQlIJIDIuNAorQyBJbnRlbCBhdG9tCSA1LjMzCitDIFZJQSBuYW5vCSAzCisKK0MgTk9URVMKK0MgICogSXQgbWlnaHQgc2VlbSBuYXR1cmFsIHRvIHVzZSB0aGUgY21vdiBpbnNuIGhlcmUsIGJ1dCBzaW5jZSB0aGlzIGZ1bmN0aW9uCitDICAgIGlzIHN1cHBvc2VkIHRvIGhhdmUgdGhlIGV4YWN0IHNhbWUgZXhlY3V0aW9uIHBhdHRlcm4gZm9yIGNuZCB0cnVlIGFuZAorQyAgICBmYWxzZSwgYW5kIHNpbmNlIGNtb3YncyBkb2N1bWVudGF0aW9uIGlzIG5vdCBjbGVhciBhYm91dCB3aGV0aGVyIGl0CitDICAgIGFjdHVhbGx5IHJlYWRzIGJvdGggc291cmNlIG9wZXJhbmRzIGFuZCB3cml0ZXMgdGhlIHJlZ2lzdGVyIGZvciBhIGZhbHNlCitDICAgIGNvbmRpdGlvbiwgd2UgY2Fubm90IHVzZSBpdC4KK0MgICogVHdvIGNhc2VzIGNvdWxkIGJlIG9wdGltaXNlZDogKDEpIGNuZF9hZGRfbiBjb3VsZCB1c2UgQURDU0JCLWZyb20tbWVtb3J5CitDICAgIHRvIHNhdmUgb25lIGluc24vbGltYiwgYW5kICgyKSB3aGVuIHVwPXJwIGNuZF9hZGRfbiBhbmQgY25kX3N1Yl9uIGNvdWxkIHVzZQorQyAgICBBRENTQkItdG8tbWVtb3J5LCBhZ2FpbiBzYXZpbmcgMSBpbnNuL2xpbWIuCitDICAqIFRoaXMgcnVucyBvcHRpbWFsbHkgYXQgZGVjb2RlciBiYW5kd2lkdGggb24gSzEwLiAgSXQgaGFzIG5vdCBiZWVuIHR1bmVkCitDICAgIGZvciBhbnkgb3RoZXIgcHJvY2Vzc29yLgorCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgY25kJywJYCVyZGknKQlkbmwgcmN4CitkZWZpbmUoYHJwJywJYCVyc2knKQlkbmwgcmR4CitkZWZpbmUoYHVwJywJYCVyZHgnKQlkbmwgcjgKK2RlZmluZShgdnAnLAlgJXJjeCcpCWRubCByOQorZGVmaW5lKGBuJywJYCVyOCcpCWRubCByc3ArNDAKKworaWZkZWYoYE9QRVJBVElPTl9jbmRfYWRkX24nLCBgCisJZGVmaW5lKEFERFNVQiwJICAgICAgYWRkKQorCWRlZmluZShBRENTQkIsCSAgICAgIGFkYykKKwlkZWZpbmUoZnVuYywJICAgICAgbXBuX2NuZF9hZGRfbiknKQoraWZkZWYoYE9QRVJBVElPTl9jbmRfc3ViX24nLCBgCisJZGVmaW5lKEFERFNVQiwJICAgICAgc3ViKQorCWRlZmluZShBRENTQkIsCSAgICAgIHNiYikKKwlkZWZpbmUoZnVuYywJICAgICAgbXBuX2NuZF9zdWJfbiknKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9jbmRfYWRkX24gbXBuX2NuZF9zdWJfbikKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMTYpCitQUk9MT0dVRShmdW5jKQorCUZVTkNfRU5UUlkoNCkKK0lGRE9TKGAJbW92CTU2KCVyc3ApLCBSMzIoJXI4KScpCisJcHVzaAklcmJ4CisJcHVzaAklcmJwCisJcHVzaAklcjEyCisJcHVzaAklcjEzCisJcHVzaAklcjE0CisKKwluZWcJY25kCisJc2JiCWNuZCwgY25kCQlDIG1ha2UgY25kIG1hc2sKKworCWxlYQkodnAsbiw4KSwgdnAKKwlsZWEJKHVwLG4sOCksIHVwCisJbGVhCShycCxuLDgpLCBycAorCisJbW92CVIzMihuKSwgUjMyKCVyYXgpCisJbmVnCW4KKwlhbmQJJDMsIFIzMiglcmF4KQorCWp6CUwodG9wKQkJCUMgY2Fycnktc2F2ZSByZWcgcmF4ID0gMCBpbiB0aGlzIGFyYworCWNtcAkkMiwgUjMyKCVyYXgpCisJamMJTChiMSkKKwlqeglMKGIyKQorCitMKGIzKToJbW92CSh2cCxuLDgpLCAlcjEyCisJbW92CTgodnAsbiw4KSwgJXIxMworCW1vdgkxNih2cCxuLDgpLCAlcjE0CisJYW5kCWNuZCwgJXIxMgorCW1vdgkodXAsbiw4KSwgJXIxMAorCWFuZAljbmQsICVyMTMKKwltb3YJOCh1cCxuLDgpLCAlcmJ4CisJYW5kCWNuZCwgJXIxNAorCW1vdgkxNih1cCxuLDgpLCAlcmJwCisJQUREU1VCCSVyMTIsICVyMTAKKwltb3YJJXIxMCwgKHJwLG4sOCkKKwlBRENTQkIJJXIxMywgJXJieAorCW1vdgklcmJ4LCA4KHJwLG4sOCkKKwlBRENTQkIJJXIxNCwgJXJicAorCW1vdgklcmJwLCAxNihycCxuLDgpCisJc2JiCVIzMiglcmF4KSwgUjMyKCVyYXgpCUMgc2F2ZSBjYXJyeQorCWFkZAkkMywgbgorCWpzCUwodG9wKQorCWptcAlMKGVuZCkKKworTChiMik6CW1vdgkodnAsbiw4KSwgJXIxMgorCW1vdgk4KHZwLG4sOCksICVyMTMKKwltb3YJKHVwLG4sOCksICVyMTAKKwlhbmQJY25kLCAlcjEyCisJbW92CTgodXAsbiw4KSwgJXJieAorCWFuZAljbmQsICVyMTMKKwlBRERTVUIJJXIxMiwgJXIxMAorCW1vdgklcjEwLCAocnAsbiw4KQorCUFEQ1NCQgklcjEzLCAlcmJ4CisJbW92CSVyYngsIDgocnAsbiw4KQorCXNiYglSMzIoJXJheCksIFIzMiglcmF4KQlDIHNhdmUgY2FycnkKKwlhZGQJJDIsIG4KKwlqcwlMKHRvcCkKKwlqbXAJTChlbmQpCisKK0woYjEpOgltb3YJKHZwLG4sOCksICVyMTIKKwltb3YJKHVwLG4sOCksICVyMTAKKwlhbmQJY25kLCAlcjEyCisJQUREU1VCCSVyMTIsICVyMTAKKwltb3YJJXIxMCwgKHJwLG4sOCkKKwlzYmIJUjMyKCVyYXgpLCBSMzIoJXJheCkJQyBzYXZlIGNhcnJ5CisJYWRkCSQxLCBuCisJam5zCUwoZW5kKQorCisJQUxJR04oMTYpCitMKHRvcCk6CW1vdgkodnAsbiw4KSwgJXIxMgorCW1vdgk4KHZwLG4sOCksICVyMTMKKwltb3YJMTYodnAsbiw4KSwgJXIxNAorCW1vdgkyNCh2cCxuLDgpLCAlcjExCisJYW5kCWNuZCwgJXIxMgorCW1vdgkodXAsbiw4KSwgJXIxMAorCWFuZAljbmQsICVyMTMKKwltb3YJOCh1cCxuLDgpLCAlcmJ4CisJYW5kCWNuZCwgJXIxNAorCW1vdgkxNih1cCxuLDgpLCAlcmJwCisJYW5kCWNuZCwgJXIxMQorCW1vdgkyNCh1cCxuLDgpLCAlcjkKKwlhZGQJUjMyKCVyYXgpLCBSMzIoJXJheCkJQyByZXN0b3JlIGNhcnJ5CisJQURDU0JCCSVyMTIsICVyMTAKKwltb3YJJXIxMCwgKHJwLG4sOCkKKwlBRENTQkIJJXIxMywgJXJieAorCW1vdgklcmJ4LCA4KHJwLG4sOCkKKwlBRENTQkIJJXIxNCwgJXJicAorCW1vdgklcmJwLCAxNihycCxuLDgpCisJQURDU0JCCSVyMTEsICVyOQorCW1vdgklcjksIDI0KHJwLG4sOCkKKwlzYmIJUjMyKCVyYXgpLCBSMzIoJXJheCkJQyBzYXZlIGNhcnJ5CisJYWRkCSQ0LCBuCisJanMJTCh0b3ApCisKK0woZW5kKToJbmVnCVIzMiglcmF4KQorCXBvcAklcjE0CisJcG9wCSVyMTMKKwlwb3AJJXIxMgorCXBvcAklcmJwCisJcG9wCSVyYngKKwlGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29tLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvbS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA2YWNhZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvbS5hc20KQEAgLTAsMCArMSw5NSBAQAorZG5sICBBTUQ2NCBtcG5fY29tLgorCitkbmwgIENvcHlyaWdodCAyMDA0LTIwMDYsIDIwMTEsIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDCSAgICBjeWNsZXMvbGltYgorQyBBTUQgSzgsSzkJIDEuMjUKK0MgQU1EIEsxMAkgMS4yNQorQyBJbnRlbCBQNAkgMi43OAorQyBJbnRlbCBjb3JlMgkgMS4xCitDIEludGVsIGNvcmVpCSAxLjUKK0MgSW50ZWwgYXRvbQkgPworQyBWSUEgbmFubwkgMgorCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLGAlcmRpJykKK2RlZmluZShgdXAnLGAlcnNpJykKK2RlZmluZShgbicsYCVyZHgnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigzMikKK1BST0xPR1VFKG1wbl9jb20pCisJRlVOQ19FTlRSWSgzKQorCW1vdnEJKHVwKSwgJXI4CisJbW92bAlSMzIoJXJkeCksIFIzMiglcmF4KQorCWxlYXEJKHVwLG4sOCksIHVwCisJbGVhcQkocnAsbiw4KSwgcnAKKwluZWdxCW4KKwlhbmRsCSQzLCBSMzIoJXJheCkKKwlqZQlMKGIwMCkKKwljbXBsCSQyLCBSMzIoJXJheCkKKwlqYwlMKGIwMSkKKwlqZQlMKGIxMCkKKworTChiMTEpOglub3RxCSVyOAorCW1vdnEJJXI4LCAocnAsbiw4KQorCWRlY3EJbgorCWptcAlMKGUxMSkKK0woYjEwKToJYWRkcQkkLTIsIG4KKwlqbXAJTChlMTApCisJLmJ5dGUJMHg5MCwweDkwLDB4OTAsMHg5MCwweDkwLDB4OTAKK0woYjAxKToJbm90cQklcjgKKwltb3ZxCSVyOCwgKHJwLG4sOCkKKwlpbmNxCW4KKwlqeglMKHJldCkKKworTChvb3ApOgltb3ZxCSh1cCxuLDgpLCAlcjgKK0woYjAwKToJbW92cQk4KHVwLG4sOCksICVyOQorCW5vdHEJJXI4CisJbm90cQklcjkKKwltb3ZxCSVyOCwgKHJwLG4sOCkKKwltb3ZxCSVyOSwgOChycCxuLDgpCitMKGUxMSk6CW1vdnEJMTYodXAsbiw4KSwgJXI4CitMKGUxMCk6CW1vdnEJMjQodXAsbiw4KSwgJXI5CisJbm90cQklcjgKKwlub3RxCSVyOQorCW1vdnEJJXI4LCAxNihycCxuLDgpCisJbW92cQklcjksIDI0KHJwLG4sOCkKKwlhZGRxCSQ0LCBuCisJam5jCUwob29wKQorTChyZXQpOglGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29weWQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29weWQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1ZTZlNTkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3B5ZC5hc20KQEAgLTAsMCArMSw5MyBAQAorZG5sICBBTUQ2NCBtcG5fY29weWQgLS0gY29weSBsaW1iIHZlY3RvciwgZGVjcmVtZW50aW5nLgorCitkbmwgIENvcHlyaWdodCAyMDAzLCAyMDA1LCAyMDA3LCAyMDExLCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBBTUQgSzgsSzkJIDEKK0MgQU1EIEsxMAkgMQorQyBBTUQgYmQxCSAxLjM2CitDIEFNRCBib2JjYXQJIDEuNzEKK0MgSW50ZWwgUDQJIDItMworQyBJbnRlbCBjb3JlMgkgMQorQyBJbnRlbCBOSE0JIDEKK0MgSW50ZWwgU0JSCSAxCitDIEludGVsIGF0b20JIDIKK0MgVklBIG5hbm8JIDIKKworCitJRlNURChgZGVmaW5lKGBycCcsYCVyZGknKScpCitJRlNURChgZGVmaW5lKGB1cCcsYCVyc2knKScpCitJRlNURChgZGVmaW5lKGBuJywgYCVyZHgnKScpCisKK0lGRE9TKGBkZWZpbmUoYHJwJyxgJXJjeCcpJykKK0lGRE9TKGBkZWZpbmUoYHVwJyxgJXJkeCcpJykKK0lGRE9TKGBkZWZpbmUoYG4nLCBgJXI4JyknKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTig2NCkKK1BST0xPR1VFKG1wbl9jb3B5ZCkKKwlsZWEJLTgodXAsbiw4KSwgdXAKKwlsZWEJKHJwLG4sOCksIHJwCisJc3ViCSQ0LCBuCisJamMJTChlbmQpCisJbm9wCisKK0wodG9wKToJbW92CSh1cCksICVyYXgKKwltb3YJLTgodXApLCAlcjkKKwlsZWEJLTMyKHJwKSwgcnAKKwltb3YJLTE2KHVwKSwgJXIxMAorCW1vdgktMjQodXApLCAlcjExCisJbGVhCS0zMih1cCksIHVwCisJbW92CSVyYXgsIDI0KHJwKQorCW1vdgklcjksIDE2KHJwKQorCXN1YgkkNCwgbgorCW1vdgklcjEwLCA4KHJwKQorCW1vdgklcjExLCAocnApCisJam5jCUwodG9wKQorCitMKGVuZCk6CXNocglSMzIobikKKwlqbmMJMWYKKwltb3YJKHVwKSwgJXJheAorCW1vdgklcmF4LCAtOChycCkKKwlsZWEJLTgocnApLCBycAorCWxlYQktOCh1cCksIHVwCisxOglzaHIJUjMyKG4pCisJam5jCTFmCisJbW92CSh1cCksICVyYXgKKwltb3YJLTgodXApLCAlcjkKKwltb3YJJXJheCwgLTgocnApCisJbW92CSVyOSwgLTE2KHJwKQorMToJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3B5aS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3B5aS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFmY2U3YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcHlpLmFzbQpAQCAtMCwwICsxLDkyIEBACitkbmwgIEFNRDY0IG1wbl9jb3B5aSAtLSBjb3B5IGxpbWIgdmVjdG9yLCBpbmNyZW1lbnRpbmcuCisKK2RubCAgQ29weXJpZ2h0IDIwMDMsIDIwMDUsIDIwMDcsIDIwMTEsIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIEFNRCBLOCxLOQkgMQorQyBBTUQgSzEwCSAxCitDIEFNRCBiZDEJIDEuMzYKK0MgQU1EIGJvYmNhdAkgMS43MQorQyBJbnRlbCBQNAkgMi0zCitDIEludGVsIGNvcmUyCSAxCitDIEludGVsIE5ITQkgMQorQyBJbnRlbCBTQlIJIDEKK0MgSW50ZWwgYXRvbQkgMgorQyBWSUEgbmFubwkgMgorCisKK0lGU1REKGBkZWZpbmUoYHJwJyxgJXJkaScpJykKK0lGU1REKGBkZWZpbmUoYHVwJyxgJXJzaScpJykKK0lGU1REKGBkZWZpbmUoYG4nLCBgJXJkeCcpJykKKworSUZET1MoYGRlZmluZShgcnAnLGAlcmN4JyknKQorSUZET1MoYGRlZmluZShgdXAnLGAlcmR4JyknKQorSUZET1MoYGRlZmluZShgbicsIGAlcjgnKScpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDY0KQorCS5ieXRlCTAsMCwwLDAsMCwwCitQUk9MT0dVRShtcG5fY29weWkpCisJbGVhCS04KHJwKSwgcnAKKwlzdWIJJDQsIG4KKwlqYwlMKGVuZCkKKworTCh0b3ApOgltb3YJKHVwKSwgJXJheAorCW1vdgk4KHVwKSwgJXI5CisJbGVhCTMyKHJwKSwgcnAKKwltb3YJMTYodXApLCAlcjEwCisJbW92CTI0KHVwKSwgJXIxMQorCWxlYQkzMih1cCksIHVwCisJbW92CSVyYXgsIC0yNChycCkKKwltb3YJJXI5LCAtMTYocnApCisJc3ViCSQ0LCBuCisJbW92CSVyMTAsIC04KHJwKQorCW1vdgklcjExLCAocnApCisJam5jCUwodG9wKQorCitMKGVuZCk6CXNocglSMzIobikKKwlqbmMJMWYKKwltb3YJKHVwKSwgJXJheAorCW1vdgklcmF4LCA4KHJwKQorCWxlYQk4KHJwKSwgcnAKKwlsZWEJOCh1cCksIHVwCisxOglzaHIJUjMyKG4pCisJam5jCTFmCisJbW92CSh1cCksICVyYXgKKwltb3YJOCh1cCksICVyOQorCW1vdgklcmF4LCA4KHJwKQorCW1vdgklcjksIDE2KHJwKQorMToJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlMi9hb3JybHNoMV9uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmUyL2FvcnJsc2gxX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNjZiYjQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlMi9hb3JybHNoMV9uLmFzbQpAQCAtMCwwICsxLDUzIEBACitkbmwgIEFNRDY0IG1wbl9hZGRsc2gxX24gLS0gcnBbXSA9IHVwW10gKyAodnBbXSA8PCAxKQorZG5sICBBTUQ2NCBtcG5fcnNibHNoMV9uIC0tIHJwW10gPSAodnBbXSA8PCAxKSAtIHVwW10KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDgsIDIwMTAtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitkZWZpbmUoTFNILCAxKQorZGVmaW5lKFJTSCwgNjMpCisKK2lmZGVmKGBPUEVSQVRJT05fYWRkbHNoMV9uJywgYAorCWRlZmluZShBRERTVUIsCWFkZCkKKwlkZWZpbmUoQURDU0JCLAlhZGMpCisJZGVmaW5lKGZ1bmMsCW1wbl9hZGRsc2gxX24pJykKK2lmZGVmKGBPUEVSQVRJT05fcnNibHNoMV9uJywgYAorCWRlZmluZShBRERTVUIsCXN1YikKKwlkZWZpbmUoQURDU0JCLAlzYmIpCisJZGVmaW5lKGZ1bmMsCW1wbl9yc2Jsc2gxX24pJykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fYWRkbHNoMV9uIG1wbl9yc2Jsc2gxX24pCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK2luY2x1ZGVfbXBuKGB4ODZfNjQvYW9ycmxzaENfbi5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZTIvYW9ycmxzaDJfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlMi9hb3JybHNoMl9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDY1MTIwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZTIvYW9ycmxzaDJfbi5hc20KQEAgLTAsMCArMSw1MyBAQAorZG5sICBBTUQ2NCBtcG5fYWRkbHNoMl9uIC0tIHJwW10gPSB1cFtdICsgKHZwW10gPDwgMikKK2RubCAgQU1ENjQgbXBuX3JzYmxzaDJfbiAtLSBycFtdID0gKHZwW10gPDwgMikgLSB1cFtdCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqb3JuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDA4LCAyMDEwLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworZGVmaW5lKExTSCwgMikKK2RlZmluZShSU0gsIDYyKQorCitpZmRlZihgT1BFUkFUSU9OX2FkZGxzaDJfbicsIGAKKwlkZWZpbmUoQUREU1VCLAlhZGQpCisJZGVmaW5lKEFEQ1NCQiwJYWRjKQorCWRlZmluZShmdW5jLAltcG5fYWRkbHNoMl9uKScpCitpZmRlZihgT1BFUkFUSU9OX3JzYmxzaDJfbicsIGAKKwlkZWZpbmUoQUREU1VCLAlzdWIpCisJZGVmaW5lKEFEQ1NCQiwJc2JiKQorCWRlZmluZShmdW5jLAltcG5fcnNibHNoMl9uKScpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FkZGxzaDJfbiBtcG5fcnNibHNoMl9uKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitpbmNsdWRlX21wbihgeDg2XzY0L2FvcnJsc2hDX24uYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmUyL2FvcnJsc2hfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlMi9hb3JybHNoX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3YWJmMzEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlMi9hb3JybHNoX24uYXNtCkBAIC0wLDAgKzEsMzggQEAKK2RubCAgQU1ENjQgbXBuX2FkZGxzaF9uIGFuZCBtcG5fcnNibHNoX24uICBSID0gVjJeayArLSBVLgorCitkbmwgIENvcHlyaWdodCAyMDExLCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FkZGxzaF9uIG1wbl9hZGRsc2hfbmMgbXBuX3JzYmxzaF9uKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitpbmNsdWRlX21wbihgeDg2XzY0L2NvcmVpbmhtL2FvcnJsc2hfbi5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZTIvYW9yc19lcnIxX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZTIvYW9yc19lcnIxX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmODc1YWUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlMi9hb3JzX2VycjFfbi5hc20KQEAgLTAsMCArMSwyMjUgQEAKK2RubCAgQ29yZSAyIG1wbl9hZGRfZXJyMV9uLCBtcG5fc3ViX2VycjFfbgorCitkbmwgIENvbnRyaWJ1dGVkIGJ5IERhdmlkIEhhcnZleS4KKworZG5sICBDb3B5cmlnaHQgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIKK0MgQU1EIEs4LEs5CSA/CitDIEFNRCBLMTAJID8KK0MgSW50ZWwgUDQJID8KK0MgSW50ZWwgY29yZTIJIDQuMTQKK0MgSW50ZWwgY29yZWkJID8KK0MgSW50ZWwgYXRvbQkgPworQyBWSUEgbmFubwkgPworCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsCWAlcmRpJykKK2RlZmluZShgdXAnLAlgJXJzaScpCitkZWZpbmUoYHZwJywJYCVyZHgnKQorZGVmaW5lKGBlcCcsCWAlcmN4JykKK2RlZmluZShgeXAnLAlgJXI4JykKK2RlZmluZShgbicsCWAlcjknKQorZGVmaW5lKGBjeV9wYXJhbScsCWA4KCVyc3ApJykKKworZGVmaW5lKGBlbCcsCWAlcmJ4JykKK2RlZmluZShgZWgnLAlgJXJicCcpCitkZWZpbmUoYHQwJywJYCVyMTAnKQorZGVmaW5lKGB0MScsCWAlcjExJykKK2RlZmluZShgdDInLAlgJXIxMicpCitkZWZpbmUoYHQzJywJYCVyMTMnKQorZGVmaW5lKGB3MCcsCWAlcjE0JykKK2RlZmluZShgdzEnLAlgJXIxNScpCisKK2lmZGVmKGBPUEVSQVRJT05fYWRkX2VycjFfbicsIGAKKwlkZWZpbmUoQURDU0JCLAkgICAgICBhZGMpCisJZGVmaW5lKGZ1bmMsCSAgICAgIG1wbl9hZGRfZXJyMV9uKScpCitpZmRlZihgT1BFUkFUSU9OX3N1Yl9lcnIxX24nLCBgCisJZGVmaW5lKEFEQ1NCQiwJICAgICAgc2JiKQorCWRlZmluZShmdW5jLAkgICAgICBtcG5fc3ViX2VycjFfbiknKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRfZXJyMV9uIG1wbl9zdWJfZXJyMV9uKQorCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUoZnVuYykKKwltb3YJY3lfcGFyYW0sICVyYXgKKworCXB1c2gJJXJieAorCXB1c2gJJXJicAorCXB1c2gJJXIxMgorCXB1c2gJJXIxMworCXB1c2gJJXIxNAorCXB1c2gJJXIxNQorCisJbGVhCSh1cCxuLDgpLCB1cAorCWxlYQkodnAsbiw4KSwgdnAKKwlsZWEJKHJwLG4sOCksIHJwCisKKwltb3YJUjMyKG4pLCBSMzIoJXIxMCkKKwlhbmQJJDMsIFIzMiglcjEwKQorCWp6CUwoMG1vZDQpCisJY21wCSQyLCBSMzIoJXIxMCkKKwlqYwlMKDFtb2Q0KQorCWp6CUwoMm1vZDQpCitMKDNtb2Q0KToKKwl4b3IJUjMyKGVsKSwgUjMyKGVsKQorCXhvcglSMzIoZWgpLCBSMzIoZWgpCisJeG9yCVIzMih0MCksIFIzMih0MCkKKwl4b3IJUjMyKHQxKSwgUjMyKHQxKQorCWxlYQktMjQoeXAsbiw4KSwgeXAKKwluZWcJbgorCisJc2hyCSQxLCAlYWwJCSAgIEMgcmVzdG9yZSBjYXJyeQorCW1vdgkodXAsbiw4KSwgdzAKKwltb3YJOCh1cCxuLDgpLCB3MQorCUFEQ1NCQgkodnAsbiw4KSwgdzAKKwltb3YJdzAsIChycCxuLDgpCisJY21vdmMJMTYoeXApLCBlbAorCUFEQ1NCQgk4KHZwLG4sOCksIHcxCisJbW92CXcxLCA4KHJwLG4sOCkKKwljbW92Ywk4KHlwKSwgdDAKKwltb3YJMTYodXAsbiw4KSwgdzAKKwlBRENTQkIJMTYodnAsbiw4KSwgdzAKKwltb3YJdzAsIDE2KHJwLG4sOCkKKwljbW92YwkoeXApLCB0MQorCXNldGMJJWFsCQkgICBDIHNhdmUgY2FycnkKKwlhZGQJdDAsIGVsCisJYWRjCSQwLCBlaAorCWFkZAl0MSwgZWwKKwlhZGMJJDAsIGVoCisKKwlhZGQJJDMsIG4KKwlqbnoJTChsb29wKQorCWptcAlMKGVuZCkKKworCUFMSUdOKDE2KQorTCgwbW9kNCk6CisJeG9yCVIzMihlbCksIFIzMihlbCkKKwl4b3IJUjMyKGVoKSwgUjMyKGVoKQorCWxlYQkoeXAsbiw4KSwgeXAKKwluZWcJbgorCWptcAlMKGxvb3ApCisKKwlBTElHTigxNikKK0woMW1vZDQpOgorCXhvcglSMzIoZWwpLCBSMzIoZWwpCisJeG9yCVIzMihlaCksIFIzMihlaCkKKwlsZWEJLTgoeXAsbiw4KSwgeXAKKwluZWcJbgorCisJc2hyCSQxLCAlYWwJCSAgIEMgcmVzdG9yZSBjYXJyeQorCW1vdgkodXAsbiw4KSwgdzAKKwlBRENTQkIJKHZwLG4sOCksIHcwCisJbW92CXcwLCAocnAsbiw4KQorCWNtb3ZjCSh5cCksIGVsCisJc2V0YwklYWwJCSAgIEMgc2F2ZSBjYXJyeQorCisJYWRkCSQxLCBuCisJam56CUwobG9vcCkKKwlqbXAJTChlbmQpCisKKwlBTElHTigxNikKK0woMm1vZDQpOgorCXhvcglSMzIoZWwpLCBSMzIoZWwpCisJeG9yCVIzMihlaCksIFIzMihlaCkKKwl4b3IJUjMyKHQwKSwgUjMyKHQwKQorCWxlYQktMTYoeXAsbiw4KSwgeXAKKwluZWcJbgorCisJc2hyCSQxLCAlYWwJCSAgIEMgcmVzdG9yZSBjYXJyeQorCW1vdgkodXAsbiw4KSwgdzAKKwltb3YJOCh1cCxuLDgpLCB3MQorCUFEQ1NCQgkodnAsbiw4KSwgdzAKKwltb3YJdzAsIChycCxuLDgpCisJY21vdmMJOCh5cCksIGVsCisJQURDU0JCCTgodnAsbiw4KSwgdzEKKwltb3YJdzEsIDgocnAsbiw4KQorCWNtb3ZjCSh5cCksIHQwCisJc2V0YwklYWwJCSAgIEMgc2F2ZSBjYXJyeQorCWFkZAl0MCwgZWwKKwlhZGMJJDAsIGVoCisKKwlhZGQJJDIsIG4KKwlqbnoJTChsb29wKQorCWptcAlMKGVuZCkKKworCUFMSUdOKDMyKQorTChsb29wKToKKwltb3YJKHVwLG4sOCksIHcwCisJc2hyCSQxLCAlYWwJCSAgIEMgcmVzdG9yZSBjYXJyeQorCW1vdgktOCh5cCksIHQwCisJbW92CSQwLCBSMzIodDMpCisJQURDU0JCCSh2cCxuLDgpLCB3MAorCWNtb3ZuYwl0MywgdDAKKwltb3YJdzAsIChycCxuLDgpCisJbW92CTgodXAsbiw4KSwgdzEKKwltb3YJMTYodXAsbiw4KSwgdzAKKwlBRENTQkIJOCh2cCxuLDgpLCB3MQorCW1vdgktMTYoeXApLCB0MQorCWNtb3ZuYwl0MywgdDEKKwltb3YJLTI0KHlwKSwgdDIKKwltb3YJdzEsIDgocnAsbiw4KQorCUFEQ1NCQgkxNih2cCxuLDgpLCB3MAorCWNtb3ZuYwl0MywgdDIKKwltb3YJMjQodXAsbiw4KSwgdzEKKwlBRENTQkIJMjQodnAsbiw4KSwgdzEKKwljbW92YwktMzIoeXApLCB0MworCXNldGMJJWFsCQkgICBDIHNhdmUgY2FycnkKKwlhZGQJdDAsIGVsCisJYWRjCSQwLCBlaAorCWFkZAl0MSwgZWwKKwlhZGMJJDAsIGVoCisJYWRkCXQyLCBlbAorCWFkYwkkMCwgZWgKKwlsZWEJLTMyKHlwKSwgeXAKKwltb3YJdzAsIDE2KHJwLG4sOCkKKwlhZGQJdDMsIGVsCisJYWRjCSQwLCBlaAorCWFkZAkkNCwgbgorCW1vdgl3MSwgLTgocnAsbiw4KQorCWpueglMKGxvb3ApCisKK0woZW5kKToKKwltb3YJZWwsIChlcCkKKwltb3YJZWgsIDgoZXApCisKKwlwb3AJJXIxNQorCXBvcAklcjE0CisJcG9wCSVyMTMKKwlwb3AJJXIxMgorCXBvcAklcmJwCisJcG9wCSVyYngKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmUyL2FvcnNfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlMi9hb3JzX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZTAwMzkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlMi9hb3JzX24uYXNtCkBAIC0wLDAgKzEsMTUwIEBACitkbmwgIEludGVsIG1wbl9hZGRfbi9tcG5fc3ViX24gb3B0aW1pc2VkIGZvciBDb25yb2UsIE5laGFsZW0uCisKK2RubCAgQ29weXJpZ2h0IDIwMDYsIDIwMDcsIDIwMTEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICBjeWNsZXMvbGltYgorQyBBTUQgSzgsSzkJIDIKK0MgQU1EIEsxMAkgMS45M1wyCitDIEFNRCBidWxsCSAxLjYyXDIuMQorQyBBTUQgcGlsZQkgMS42XDEuNworQyBBTUQgc3RlYW0KK0MgQU1EIGV4Y2F2YXRvcgorQyBBTUQgYm9iY2F0CSAyLjc5CitDIEFNRCBqYWd1YXIJIDIuNTQKK0MgSW50ZWwgUDQJMTAKK0MgSW50ZWwgY29yZTIJIDIKK0MgSW50ZWwgTkhNCSAyCitDIEludGVsIFNCUgkgMgorQyBJbnRlbCBJQlIJIDEuOTUKK0MgSW50ZWwgSFdMCSAxLjcyCitDIEludGVsIEJXTAkgMS41NAorQyBJbnRlbCBTS0wJIDEuNTIKK0MgSW50ZWwgYXRvbQkgOQorQyBJbnRlbCBTTE0JIDYuNQorQyBWSUEgbmFubwkgMworCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLAlgJXJkaScpCitkZWZpbmUoYHVwJywJYCVyc2knKQorZGVmaW5lKGB2cCcsCWAlcmR4JykKK2RlZmluZShgbicsCWAlcmN4JykKK2RlZmluZShgY3knLAlgJXI4JykKKworaWZkZWYoYE9QRVJBVElPTl9hZGRfbicsIGAKKwlkZWZpbmUoQURDU0JCLAkgICAgICBhZGMpCisJZGVmaW5lKGZ1bmMsCSAgICAgIG1wbl9hZGRfbikKKwlkZWZpbmUoZnVuY19uYywJICAgICAgbXBuX2FkZF9uYyknKQoraWZkZWYoYE9QRVJBVElPTl9zdWJfbicsIGAKKwlkZWZpbmUoQURDU0JCLAkgICAgICBzYmIpCisJZGVmaW5lKGZ1bmMsCSAgICAgIG1wbl9zdWJfbikKKwlkZWZpbmUoZnVuY19uYywJICAgICAgbXBuX3N1Yl9uYyknKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRfbiBtcG5fYWRkX25jIG1wbl9zdWJfbiBtcG5fc3ViX25jKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigxNikKK1BST0xPR1VFKGZ1bmMpCisJRlVOQ19FTlRSWSg0KQorCXhvcgklcjgsICVyOAorTChzdGFydCk6CisJbW92CSh1cCksICVyMTAKKwltb3YJKHZwKSwgJXIxMQorCisJbGVhCSh1cCxuLDgpLCB1cAorCWxlYQkodnAsbiw4KSwgdnAKKwlsZWEJKHJwLG4sOCksIHJwCisJbW92CVIzMihuKSwgUjMyKCVyYXgpCisJbmVnCW4KKwlhbmQJJDMsIFIzMiglcmF4KQorCWplCUwoYjAwKQorCWFkZAklcmF4LCBuCQkJQyBjbGVhciBsb3cgcmN4IGJpdHMgZm9yIGpyY3h6CisJY21wCSQyLCBSMzIoJXJheCkKKwlqbAlMKGIwMSkKKwlqZQlMKGIxMCkKKworTChiMTEpOgluZWcJJXI4CQkJQyBzZXQgY3kKKwlqbXAJTChlMTEpCisKK0woYjAwKToJbmVnCSVyOAkJCUMgc2V0IGN5CisJbW92CSVyMTAsICVyOAorCW1vdgklcjExLCAlcjkKKwlsZWEJNChuKSwgbgorCWptcAlMKGUwMCkKKworCW5vcAorCW5vcAorCW5vcAorTChiMDEpOgluZWcJJXI4CQkJQyBzZXQgY3kKKwlqbXAJTCh0b3ApCisKK0woYjEwKToJbmVnCSVyOAkJCUMgc2V0IGN5CisJbW92CSVyMTAsICVyOAorCW1vdgklcjExLCAlcjkKKwlqbXAJTChlMTApCisKK0woZW5kKToJQURDU0JCCSVyMTEsICVyMTAKKwltb3YJJXIxMCwgLTgocnApCisJbW92CVIzMiglcmN4KSwgUjMyKCVyYXgpCUMgY2xlYXIgZWF4LCBlY3ggY29udGFpbnMgMAorCWFkYwlSMzIoJXJheCksIFIzMiglcmF4KQorCUZVTkNfRVhJVCgpCisJcmV0CisKKwlBTElHTigxNikKK0wodG9wKToJanJjeHoJTChlbmQpCisJbW92CSh1cCxuLDgpLCAlcjgKKwltb3YJKHZwLG4sOCksICVyOQorCWxlYQk0KG4pLCBuCisJQURDU0JCCSVyMTEsICVyMTAKKwltb3YJJXIxMCwgLTQwKHJwLG4sOCkKK0woZTAwKToJbW92CS0yNCh1cCxuLDgpLCAlcjEwCisJbW92CS0yNCh2cCxuLDgpLCAlcjExCisJQURDU0JCCSVyOSwgJXI4CisJbW92CSVyOCwgLTMyKHJwLG4sOCkKK0woZTExKToJbW92CS0xNih1cCxuLDgpLCAlcjgKKwltb3YJLTE2KHZwLG4sOCksICVyOQorCUFEQ1NCQgklcjExLCAlcjEwCisJbW92CSVyMTAsIC0yNChycCxuLDgpCitMKGUxMCk6CW1vdgktOCh1cCxuLDgpLCAlcjEwCisJbW92CS04KHZwLG4sOCksICVyMTEKKwlBRENTQkIJJXI5LCAlcjgKKwltb3YJJXI4LCAtMTYocnAsbiw4KQorCWptcAlMKHRvcCkKK0VQSUxPR1VFKCkKKworUFJPTE9HVUUoZnVuY19uYykKKwlGVU5DX0VOVFJZKDQpCitJRkRPUyhgCW1vdgk1NiglcnNwKSwgJXI4CScpCisJam1wCUwoc3RhcnQpCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlMi9hb3JzbXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZTIvYW9yc211bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2E1ZDZlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZTIvYW9yc211bF8xLmFzbQpAQCAtMCwwICsxLDE4OCBAQAorZG5sICB4ODYtNjQgbXBuX2FkZG11bF8xIGFuZCBtcG5fc3VibXVsXzEsIG9wdGltaXplZCBmb3IgIkNvcmUgMiIuCisKK2RubCAgQ29weXJpZ2h0IDIwMDMtMjAwNSwgMjAwNy0yMDA5LCAyMDExLCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBBTUQgSzgsSzkgICAgICA0LjUyCitDIEFNRCBLMTAgICAgICAgIDQuMDEKK0MgQU1EIGJ1bGwgICAgICAgNC45OAorQyBBTUQgcGlsZSAgICAgICA0LjgzCitDIEFNRCBzdGVhbQorQyBBTUQgZXhjYXZhdG9yCitDIEFNRCBib2JjYXQgICAgIDUuNTYKK0MgQU1EIGphZ3VhciAgICAgNS41NAorQyBJbnRlbCBQNCAgICAgIDE2LjMgICAgMTcuMworQyBJbnRlbCBjb3JlMiAgICA0LjMyICAgIDQuNjEKK0MgSW50ZWwgTkhNICAgICAgNS4wOAorQyBJbnRlbCBTQlIgICAgICA0LjA0CitDIEludGVsIElCUiAgICAgIDMuOTUKK0MgSW50ZWwgSFdMICAgICAgMy42NgorQyBJbnRlbCBCV0wgICAgICAyLjg3CitDIEludGVsIFNLTCAgICAgIDIuNzkKK0MgSW50ZWwgYXRvbSAgICAyMC42CitDIEludGVsIFNMTSAgICAgIDcuNgorQyBWSUEgbmFubyAgICAgICA1LjI1CisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsCWAlcmRpJykKK2RlZmluZShgdXAnLAlgJXJzaScpCitkZWZpbmUoYG4nLAlgJXJkeCcpCitkZWZpbmUoYHYwJywJYCVyY3gnKQorCitpZmRlZihgT1BFUkFUSU9OX2FkZG11bF8xJyxgCisgICAgICBkZWZpbmUoYEFERFNVQicsICAgICAgICBgYWRkJykKKyAgICAgIGRlZmluZShgZnVuYycsICAgICBgbXBuX2FkZG11bF8xJykKKyAgICAgIGRlZmluZShgZnVuY18xYycsICBgbXBuX2FkZG11bF8xYycpCisnKQoraWZkZWYoYE9QRVJBVElPTl9zdWJtdWxfMScsYAorICAgICAgZGVmaW5lKGBBRERTVUInLCAgICAgICAgYHN1YicpCisgICAgICBkZWZpbmUoYGZ1bmMnLCAgICAgYG1wbl9zdWJtdWxfMScpCisgICAgICBkZWZpbmUoYGZ1bmNfMWMnLCAgYG1wbl9zdWJtdWxfMWMnKQorJykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fYWRkbXVsXzEgbXBuX2FkZG11bF8xYyBtcG5fc3VibXVsXzEgbXBuX3N1Ym11bF8xYykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworCUMgRm9yIERPUywgb24gdGhlIHN0YWNrIHdlIGhhdmUgZm91ciBzYXZlZCByZWdpc3RlcnMsIHJldHVybiBhZGRyZXNzLAorCUMgc3BhY2UgZm9yIGZvdXIgcmVnaXN0ZXIgYXJndW1lbnRzLCBhbmQgZmluYWxseSB0aGUgY2FycnkgaW5wdXQuCisKK0lGRE9TKGAgZGVmaW5lKGBjYXJyeV9pbicsIGA3MiglcnNwKScpJykgZG5sCitJRlNURChgIGRlZmluZShgY2FycnlfaW4nLCBgJXI4JyknKSBkbmwKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMTYpCitQUk9MT0dVRShmdW5jXzFjKQorCUZVTkNfRU5UUlkoNCkKKwlwdXNoCSVyYngKKwlwdXNoCSVyYnAKKwlsZWEJKCVyZHgpLCAlcmJ4CisJbmVnCSVyYngKKworCW1vdgkodXApLCAlcmF4CisJbW92CShycCksICVyMTAKKworCWxlYQktMTYocnAsJXJkeCw4KSwgcnAKKwlsZWEJKHVwLCVyZHgsOCksIHVwCisJbXVsCSVyY3gKKwlhZGQJY2FycnlfaW4sICVyYXgKKwlhZGMJJDAsICVyZHgKKwlqbXAJTChzdGFydF9uYykKK0VQSUxPR1VFKCkKKworCUFMSUdOKDE2KQorUFJPTE9HVUUoZnVuYykKKwlGVU5DX0VOVFJZKDQpCisJcHVzaAklcmJ4CisJcHVzaAklcmJwCisJbGVhCSglcmR4KSwgJXJieAorCW5lZwklcmJ4CisKKwltb3YJKHVwKSwgJXJheAorCW1vdgkocnApLCAlcjEwCisKKwlsZWEJLTE2KHJwLCVyZHgsOCksIHJwCisJbGVhCSh1cCwlcmR4LDgpLCB1cAorCW11bAklcmN4CisKK0woc3RhcnRfbmMpOgorCXRlc3QJJDEsIFI4KCVyYngpCisJam56CUwob2RkKQorCisJbGVhCSglcmF4KSwgJXIxMQorCW1vdgk4KHVwLCVyYngsOCksICVyYXgKKwlsZWEJKCVyZHgpLCAlcmJwCisJbXVsCSVyY3gKKwlhZGQJJDIsICVyYngKKwlqeglMKG4yKQorCisJbGVhCSglcmF4KSwgJXI4CisJbW92CSh1cCwlcmJ4LDgpLCAlcmF4CisJbGVhCSglcmR4KSwgJXI5CisJam1wCUwobWlkKQorCisJQUxJR04oOCkKK0wob2RkKToJaW5jCSVyYngKKwlqeglMKG4xKQorCisJbGVhCSglcmF4KSwgJXI4CisJbW92CSh1cCwlcmJ4LDgpLCAlcmF4CisJbGVhCSglcmR4KSwgJXI5CisJbXVsCSVyY3gKKwlsZWEJKCVyYXgpLCAlcjExCisJbW92CTgodXAsJXJieCw4KSwgJXJheAorCWxlYQkoJXJkeCksICVyYnAKKwlqbXAJTChlKQorCisJQUxJR04oMTYpCitMKHRvcCk6CW11bAklcmN4CisJQUREU1VCCSVyOCwgJXIxMAorCWxlYQkoJXJheCksICVyOAorCW1vdgkodXAsJXJieCw4KSwgJXJheAorCWFkYwklcjksICVyMTEKKwltb3YJJXIxMCwgLTgocnAsJXJieCw4KQorCW1vdgkocnAsJXJieCw4KSwgJXIxMAorCWxlYQkoJXJkeCksICVyOQorCWFkYwkkMCwgJXJicAorTChtaWQpOgltdWwJJXJjeAorCUFERFNVQgklcjExLCAlcjEwCisJbGVhCSglcmF4KSwgJXIxMQorCW1vdgk4KHVwLCVyYngsOCksICVyYXgKKwlhZGMJJXJicCwgJXI4CisJbW92CSVyMTAsIChycCwlcmJ4LDgpCisJbW92CTgocnAsJXJieCw4KSwgJXIxMAorCWxlYQkoJXJkeCksICVyYnAKKwlhZGMJJDAsICVyOQorTChlKToJYWRkCSQyLCAlcmJ4CisJanMJTCh0b3ApCisKKwltdWwJJXJjeAorCUFERFNVQgklcjgsICVyMTAKKwlhZGMJJXI5LCAlcjExCisJbW92CSVyMTAsIC04KHJwKQorCWFkYwklcmJ4LCAlcmJwCQlDIHJieCA9IDAKK0wobjIpOgltb3YJKHJwKSwgJXIxMAorCUFERFNVQgklcjExLCAlcjEwCisJYWRjCSVyYnAsICVyYXgKKwltb3YJJXIxMCwgKHJwKQorCWFkYwklcmJ4LCAlcmR4CQlDIHJieCA9IDAKK0wobjEpOgltb3YJOChycCksICVyMTAKKwlBRERTVUIJJXJheCwgJXIxMAorCW1vdgklcjEwLCA4KHJwKQorCW1vdglSMzIoJXJieCksIFIzMiglcmF4KQlDIHJieCA9IDAKKwlhZGMJJXJkeCwgJXJheAorCXBvcAklcmJwCisJcG9wCSVyYngKKwlGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZTIvY29tLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmUyL2NvbS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdkOWY3OQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmUyL2NvbS5hc20KQEAgLTAsMCArMSwzNyBAQAorZG5sICBYODYtNjQgbXBuX2NvbS4KKworZG5sICBDb3B5cmlnaHQgMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9jb20pCitpbmNsdWRlX21wbihgeDg2XzY0L2Zhc3Rzc2UvY29tLXBhbGlnbnIuYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmUyL2NvcHlkLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmUyL2NvcHlkLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2VhMGU1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZTIvY29weWQuYXNtCkBAIC0wLDAgKzEsMzcgQEAKK2RubCAgWDg2LTY0IG1wbl9jb3B5ZC4KKworZG5sICBDb3B5cmlnaHQgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9jb3B5ZCkKK2luY2x1ZGVfbXBuKGB4ODZfNjQvZmFzdHNzZS9jb3B5ZC1wYWxpZ25yLmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlMi9jb3B5aS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlMi9jb3B5aS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBjNzYwNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmUyL2NvcHlpLmFzbQpAQCAtMCwwICsxLDM3IEBACitkbmwgIFg4Ni02NCBtcG5fY29weWkuCisKK2RubCAgQ29weXJpZ2h0IDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fY29weWkpCitpbmNsdWRlX21wbihgeDg2XzY0L2Zhc3Rzc2UvY29weWktcGFsaWduci5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZTIvZGl2cmVtXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZTIvZGl2cmVtXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiM2YxMzkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlMi9kaXZyZW1fMS5hc20KQEAgLTAsMCArMSwyNDMgQEAKK2RubCAgeDg2LTY0IG1wbl9kaXZyZW1fMSAtLSBtcG4gYnkgbGltYiBkaXZpc2lvbi4KKworZG5sICBDb3B5cmlnaHQgMjAwNCwgMjAwNSwgMjAwNy0yMDEwLCAyMDEyLCAyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQwkJbm9ybQl1bm9ybQlmcmFjCitDIEFNRCBLOCxLOQkxNQkxNQkxMgorQyBBTUQgSzEwCTE1CTE1CTEyCitDIEludGVsIFA0CTQ0CTQ0CTQzCitDIEludGVsIGNvcmUyCTI0CTI0CTE5LjUKK0MgSW50ZWwgY29yZWkJMTkJMTkJMTgKK0MgSW50ZWwgYXRvbQk1MQk1MQkzNgorQyBWSUEgbmFubwk0Ngk0NAkyMi41CisKK0MgbXBfbGltYl90CitDIG1wbl9kaXZyZW1fMSAobXBfcHRyIHFwLCBtcF9zaXplX3QgZm4sCitDICAgICAgICAgICAgICAgbXBfc3JjcHRyIG5wLCBtcF9zaXplX3Qgbm4sIG1wX2xpbWJfdCBkKQorCitDIG1wX2xpbWJfdAorQyBtcG5fcHJlaW52X2RpdnJlbV8xIChtcF9wdHIgcXAsIG1wX3NpemVfdCBmbiwKK0MgICAgICAgICAgICAgICAgICAgICAgbXBfc3JjcHRyIG5wLCBtcF9zaXplX3Qgbm4sIG1wX2xpbWJfdCBkLAorQyAgICAgICAgICAgICAgICAgICAgICBtcF9saW1iX3QgZGludiwgaW50IGNudCkKKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHFwJywJCWAlcmRpJykKK2RlZmluZShgZm5fcGFyYW0nLAlgJXJzaScpCitkZWZpbmUoYHVwX3BhcmFtJywJYCVyZHgnKQorZGVmaW5lKGB1bl9wYXJhbScsCWAlcmN4JykKK2RlZmluZShgZCcsCQlgJXI4JykKK2RlZmluZShgZGludicsCQlgJXI5JykJCUMgb25seSBmb3IgbXBuX3ByZWludl9kaXZyZW1fMQorQyAgICAgICBzaGlmdCBwYXNzZWQgb24gc3RhY2sJCUMgb25seSBmb3IgbXBuX3ByZWludl9kaXZyZW1fMQorCitkZWZpbmUoYGNudCcsCQlgJXJjeCcpCitkZWZpbmUoYHVwJywJCWAlcnNpJykKK2RlZmluZShgZm4nLAkJYCVyMTInKQorZGVmaW5lKGB1bicsCQlgJXJieCcpCisKKworQyByYXggcmJ4IHJjeCByZHggcnNpIHJkaSByYnAgcjggIHI5ICByMTAgcjExIHIxMiByMTMgcjE0IHIxNQorQyAgICAgICAgIGNudCAgICAgICAgIHFwICAgICAgZCAgZGludgorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitJRlNURChgZGVmaW5lKGBDTlRPRkYnLAkJYDQwKCQxKScpJykKK0lGRE9TKGBkZWZpbmUoYENOVE9GRicsCQlgMTA0KCQxKScpJykKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMTYpCitQUk9MT0dVRShtcG5fcHJlaW52X2RpdnJlbV8xKQorCUZVTkNfRU5UUlkoNCkKK0lGRE9TKGAJbW92CTU2KCVyc3ApLCAlcjgJJykKK0lGRE9TKGAJbW92CTY0KCVyc3ApLCAlcjkJJykKKwl4b3IJUjMyKCVyYXgpLCBSMzIoJXJheCkKKwlwdXNoCSVyMTMKKwlwdXNoCSVyMTIKKwlwdXNoCSVyYnAKKwlwdXNoCSVyYngKKworCW1vdglmbl9wYXJhbSwgZm4KKwltb3YJdW5fcGFyYW0sIHVuCisJYWRkCWZuX3BhcmFtLCB1bl9wYXJhbQorCW1vdgl1cF9wYXJhbSwgdXAKKworCWxlYQktOChxcCx1bl9wYXJhbSw4KSwgcXAKKworCW1vdglDTlRPRkYoJXJzcCksIFI4KGNudCkKKwlzaGwJUjgoY250KSwgZAorCWptcAlMKGVudCkKK0VQSUxPR1VFKCkKKworCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX2RpdnJlbV8xKQorCUZVTkNfRU5UUlkoNCkKK0lGRE9TKGAJbW92CTU2KCVyc3ApLCAlcjgJJykKKwl4b3IJUjMyKCVyYXgpLCBSMzIoJXJheCkKKwlwdXNoCSVyMTMKKwlwdXNoCSVyMTIKKwlwdXNoCSVyYnAKKwlwdXNoCSVyYngKKworCW1vdglmbl9wYXJhbSwgZm4KKwltb3YJdW5fcGFyYW0sIHVuCisJYWRkCWZuX3BhcmFtLCB1bl9wYXJhbQorCW1vdgl1cF9wYXJhbSwgdXAKKwlqZQlMKHJldCkKKworCWxlYQktOChxcCx1bl9wYXJhbSw4KSwgcXAKKwl4b3IJUjMyKCVyYnApLCBSMzIoJXJicCkKKworTCh1bm5vcm1hbGl6ZWQpOgorCXRlc3QJdW4sIHVuCisJamUJTCg0NCkKKwltb3YJLTgodXAsdW4sOCksICVyYXgKKwljbXAJZCwgJXJheAorCWphZQlMKDQ0KQorCW1vdgklcmJwLCAocXApCisJbW92CSVyYXgsICVyYnAKKwlsZWEJLTgocXApLCBxcAorCWplCUwocmV0KQorCWRlYwl1bgorTCg0NCk6CisJYnNyCWQsICVyY3gKKwlub3QJUjMyKCVyY3gpCisJc2FsCVI4KCVyY3gpLCBkCisJc2FsCVI4KCVyY3gpLCAlcmJwCisKKwlwdXNoCSVyY3gKK0lGU1REKGAJcHVzaAklcmRpCQknKQorSUZTVEQoYAlwdXNoCSVyc2kJCScpCisJcHVzaAklcjgKK0lGU1REKGAJc3ViCSQ4LCAlcnNwCScpCitJRlNURChgCW1vdglkLCAlcmRpCQknKQorSUZET1MoYAlzdWIJJDQwLCAlcnNwCScpCitJRkRPUyhgCW1vdglkLCAlcmN4CQknKQorCUFTU0VSVChueiwgYHRlc3QgJDE1LCAlcnNwJykKKwlDQUxMKAltcG5faW52ZXJ0X2xpbWIpCitJRlNURChgCWFkZAkkOCwgJXJzcAknKQorSUZET1MoYAlhZGQJJDQwLCAlcnNwCScpCisJcG9wCSVyOAorSUZTVEQoYAlwb3AJJXJzaQkJJykKK0lGU1REKGAJcG9wCSVyZGkJCScpCisJcG9wCSVyY3gKKworCW1vdgklcmF4LCBkaW52CisJbW92CSVyYnAsICVyYXgKKwl0ZXN0CXVuLCB1bgorCWplCUwoZnJhYykKKworTChlbnQpOgltb3YJLTgodXAsdW4sOCksICVyYnAKKwlzaHIJUjgoJXJjeCksICVyYXgKKwlzaGxkCVI4KCVyY3gpLCAlcmJwLCAlcmF4CisJc3ViCSQyLCB1bgorCWpzCUwoZW5kKQorCisJQUxJR04oMTYpCitMKHRvcCk6CWxlYQkxKCVyYXgpLCAlcjExCisJbXVsCWRpbnYKKwltb3YJKHVwLHVuLDgpLCAlcjEwCisJc2hsZAlSOCglcmN4KSwgJXIxMCwgJXJicAorCW1vdgklcmJwLCAlcjEzCisJYWRkCSVyYXgsICVyMTMKKwlhZGMJJXIxMSwgJXJkeAorCW1vdgklcmR4LCAlcjExCisJaW11bAlkLCAlcmR4CisJc3ViCSVyZHgsICVyYnAKKwlsZWEJKGQsJXJicCksICVyYXgKKwlzdWIJJDgsIHFwCisJY21wCSVyMTMsICVyYnAKKwljbW92YwklcmJwLCAlcmF4CisJYWRjCSQtMSwgJXIxMQorCWNtcAlkLCAlcmF4CisJamFlCUwodWZ4KQorTCh1b2spOglkZWMJdW4KKwltb3YJJXIxMSwgOChxcCkKKwltb3YJJXIxMCwgJXJicAorCWpucwlMKHRvcCkKKworTChlbmQpOglsZWEJMSglcmF4KSwgJXIxMQorCXNhbAlSOCglcmN4KSwgJXJicAorCW11bAlkaW52CisJYWRkCSVyYnAsICVyYXgKKwlhZGMJJXIxMSwgJXJkeAorCW1vdgklcmF4LCAlcjExCisJbW92CSVyZHgsICVyMTMKKwlpbXVsCWQsICVyZHgKKwlzdWIJJXJkeCwgJXJicAorCW1vdglkLCAlcmF4CisJYWRkCSVyYnAsICVyYXgKKwljbXAJJXIxMSwgJXJicAorCWNtb3ZjCSVyYnAsICVyYXgKKwlhZGMJJC0xLCAlcjEzCisJY21wCWQsICVyYXgKKwlqYWUJTChlZngpCitMKGVvayk6CW1vdgklcjEzLCAocXApCisJc3ViCSQ4LCBxcAorCWptcAlMKGZyYWMpCisKK0wodWZ4KToJc3ViCWQsICVyYXgKKwlpbmMJJXIxMQorCWptcAlMKHVvaykKK0woZWZ4KToJc3ViCWQsICVyYXgKKwlpbmMJJXIxMworCWptcAlMKGVvaykKKworTChmcmFjKTptb3YJZCwgJXJicAorCW5lZwklcmJwCisJam1wCUwoZmVudCkKKworCUFMSUdOKDE2KQkJCUMJICAgIEs4LUsxMCAgUDYtQ05SIFA2LU5ITSAgUDQKK0woZnRvcCk6bXVsCWRpbnYJCQlDCSAgICAgIDAsMTIgICAwLDE3ICAgMCwxNworCWFkZAklcjExLCAlcmR4CQlDCSAgICAgIDUgICAgICA4ICAgICAxMAorCW1vdgklcmF4LCAlcjExCQlDCSAgICAgIDQgICAgICA4ICAgICAgMworCW1vdgklcmR4LCAlcjEzCQlDCSAgICAgIDYgICAgICA5ICAgICAxMQorCWltdWwJJXJicCwgJXJkeAkJQwkgICAgICA2ICAgICAgOSAgICAgMTEKKwltb3YJZCwgJXJheAkJCUMKKwlhZGQJJXJkeCwgJXJheAkJQwkgICAgIDEwICAgICAxNCAgICAgMTQKKwljbXAJJXIxMSwgJXJkeAkJQwkgICAgIDEwICAgICAxNCAgICAgMTQKKwljbW92YwklcmR4LCAlcmF4CQlDCSAgICAgMTEgICAgIDE1ICAgICAxNQorCWFkYwkkLTEsICVyMTMJCUMKKwltb3YJJXIxMywgKHFwKQkJQworCXN1YgkkOCwgcXAJCQlDCitMKGZlbnQpOmxlYQkxKCVyYXgpLCAlcjExCQlDCisJZGVjCWZuCQkJQworCWpucwlMKGZ0b3ApCQkJQworCisJc2hyCVI4KCVyY3gpLCAlcmF4CitMKHJldCk6CXBvcAklcmJ4CisJcG9wCSVyYnAKKwlwb3AJJXIxMgorCXBvcAklcjEzCisJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmUyL2djZF8xMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlMi9nY2RfMTEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMDQ1MWYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlMi9nY2RfMTEuYXNtCkBAIC0wLDAgKzEsOTMgQEAKK2RubCAgQU1ENjQgbXBuX2djZF8xMSBvcHRpbWlzZWQgZm9yIEludGVsIENOUiwgUE5SLCBTQlIsIElCUi4KKworZG5sICBCYXNlZCBvbiB0aGUgSzcgZ2NkXzEuYXNtLCBieSBLZXZpbiBSeWRlLiAgUmVoYWNrZWQgZm9yIEFNRDY0IGJ5IFRvcmJqb3JuCitkbmwgIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDAwLTIwMDIsIDIwMDUsIDIwMDksIDIwMTEsIDIwMTIsIDIwMTcsIDIwMTkgRnJlZSBTb2Z0d2FyZQorZG5sICBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDCSAgICAgY3ljbGVzL2JpdCAoYXBwcm94KQorQyBBTUQgSzgsSzkJID8KK0MgQU1EIEsxMAkgPworQyBBTUQgYmQxCSA/CitDIEFNRCBiZDIJID8KK0MgQU1EIGJkMwkgPworQyBBTUQgYmQ0CSA/CitDIEFNRCBidDEJID8KK0MgQU1EIGJ0MgkgPworQyBBTUQgem4xCSA/CitDIEFNRCB6bjIJID8KK0MgSW50ZWwgUDQJID8KK0MgSW50ZWwgQ05SCSA0LjIyICAqCitDIEludGVsIFBOUgkgNC4yMiAgKgorQyBJbnRlbCBOSE0JIDQuOTcKK0MgSW50ZWwgV1NNCSA1LjE3CitDIEludGVsIFNCUgkgNC44MyAgKgorQyBJbnRlbCBJQlIJIDQuMTYgICoKK0MgSW50ZWwgSFdMCSAzLjg0CitDIEludGVsIEJXTAkgMy43NgorQyBJbnRlbCBTS0wJIDMuODMKK0MgSW50ZWwgYXRvbQkgPworQyBJbnRlbCBTTE0JID8KK0MgSW50ZWwgR0xNCSA/CitDIEludGVsIEdMTSsJID8KK0MgVklBIG5hbm8JID8KKworZGVmaW5lKGB1MCcsICAgIGAlcmRpJykKK2RlZmluZShgdjAnLCAgICBgJXJzaScpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDY0KQorUFJPTE9HVUUobXBuX2djZF8xMSkKKwlGVU5DX0VOVFJZKDIpCisJam1wCUwob2RkKQorCisJQUxJR04oMTYpCitMKHRvcCk6CWNtb3ZjCSVyZHgsIHUwCQlDIHUgPSB8dSAtIHZ8CisJY21vdmMJJXJheCwgdjAJCUMgdiA9IG1pbih1LHYpCisJc2hyCVI4KCVyY3gpLCB1MAorTChvZGQpOgltb3YJdjAsICVyZHgKKwlzdWIJdTAsICVyZHgJCUMgdiAtIHUKKwlic2YJJXJkeCwgJXJjeAorCW1vdgl1MCwgJXJheAorCXN1Ygl2MCwgdTAJCQlDIHUgLSB2CisJam56CUwodG9wKQorCitMKGVuZCk6CUMgcmF4ID0gcmVzdWx0CisJQyByZHggPSAwIGZvciB0aGUgYmVuZWZpdCBvZiBpbnRlcm5hbCBnY2RfMjIgY2FsbAorCUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlMi9nY2RfMjIuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZTIvZ2NkXzIyLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWFhNzNiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZTIvZ2NkXzIyLmFzbQpAQCAtMCwwICsxLDEzNyBAQAorZG5sICBBTUQ2NCBtcG5fZ2NkXzIyLiAgQXNzdW1lcyB1c2VmdWwgYnNmLCB1c2VmdWwgc2hyZCwgbm8gdHpjbnQsIG5vIHNobHguCisKK2RubCAgQ29weXJpZ2h0IDIwMTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDCSAgICAgY3ljbGVzL2JpdAorQyBBTUQgSzgsSzkJID8KK0MgQU1EIEsxMAkgPworQyBBTUQgYmQxCSA/CitDIEFNRCBiZDIJID8KK0MgQU1EIGJkMwkgPworQyBBTUQgYmQ0CSA/CitDIEFNRCBidDEJID8KK0MgQU1EIGJ0MgkgPworQyBBTUQgem4xCSA/CitDIEFNRCB6bjIJID8KK0MgSW50ZWwgUDQJID8KK0MgSW50ZWwgQ05SCSA4LjcKK0MgSW50ZWwgUE5SCSA4LjcKK0MgSW50ZWwgTkhNCSA5LjIKK0MgSW50ZWwgV1NNCSA5LjIKK0MgSW50ZWwgU0JSCSA5LjEKK0MgSW50ZWwgSUJSCSA/CitDIEludGVsIEhXTAkgPworQyBJbnRlbCBCV0wJID8KK0MgSW50ZWwgU0tMCSA/CitDIEludGVsIGF0b20JID8KK0MgSW50ZWwgU0xNCSA/CitDIEludGVsIEdMTQkgPworQyBJbnRlbCBHTE0rCSA/CitDIFZJQSBuYW5vCSA/CisKKworZGVmaW5lKGB1MScsICAgIGAlcmRpJykKK2RlZmluZShgdTAnLCAgICBgJXJzaScpCitkZWZpbmUoYHYxJywgICAgYCVyZHgnKQorZGVmaW5lKGB2MF9wYXJhbScsIGAlcmN4JykKKworZGVmaW5lKGB2MCcsICAgIGAlcmF4JykKK2RlZmluZShgY250JywgICBgJXJjeCcpCisKK2RlZmluZShgczAnLCAgICBgJXI4JykKK2RlZmluZShgczEnLCAgICBgJXI5JykKK2RlZmluZShgdDAnLCAgICBgJXIxMCcpCitkZWZpbmUoYHQxJywgICAgYCVyMTEnKQorCitkbmwgQUJJX1NVUFBPUlQoRE9TNjQpCUMgcmV0dXJucyBtcF9kb3VibGVfbGltYl90IGluIG1lbW9yeQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDY0KQorUFJPTE9HVUUobXBuX2djZF8yMikKKwlGVU5DX0VOVFJZKDQpCisJbW92CXYwX3BhcmFtLCB2MAorCisJQUxJR04oMTYpCitMKHRvcCk6CW1vdgl2MCwgdDAKKwlzdWIJdTAsIHQwCisJanoJTChsb3d6KQkJQwlqdW1wIHdoZW4gbG93IGxpbWIgcmVzdWx0ID0gMAorCW1vdgl2MSwgdDEKKwlzYmIJdTEsIHQxCisKKwltb3YJdTAsIHMwCisJbW92CXUxLCBzMQorCisJYnNmCXQwLCBjbnQKKworCXN1Ygl2MCwgdTAKKwlzYmIJdjEsIHUxCisKK0woYmNrKToJY21vdmMJdDAsIHUwCQlDIHUgPSB8dSAtIHZ8CisJY21vdmMJdDEsIHUxCQlDIHUgPSB8dSAtIHZ8CisJY21vdmMJczAsIHYwCQlDIHYgPSBtaW4odSx2KQorCWNtb3ZjCXMxLCB2MQkJQyB2ID0gbWluKHUsdikKKworCXNocmQJUjgoY250KSwgdTEsIHUwCisJc2hyCVI4KGNudCksIHUxCisKKwltb3YJdjEsIHQxCisJb3IJdTEsIHQxCisJam56CUwodG9wKQorCitMKGdjZF8xMSk6CisJbW92CXYwLCAlcmRpCitDCW1vdgl1MCwgJXJzaQorCVRDQUxMKAltcG5fZ2NkXzExKQorCitMKGxvd3opOkMgV2UgY29tZSBoZXJlIHdoZW4gdjAgLSB1MCA9IDAKKwlDIDEuIElmIHYxIC0gdTEgPSAwLCB0aGVuIGdjZCBpcyB1ID0gdi4KKwlDIDIuIEVsc2UgY29tcHV0ZSBnY2RfMjEoe3YxLHYwfSwgfHUxLXYxfCkKKwltb3YJdjEsIHQwCisJc3ViCXUxLCB0MAorCWplCUwoZW5kKQorCisJeG9yCXQxLCB0MQorCW1vdgl1MCwgczAKKwltb3YJdTEsIHMxCisJYnNmCXQwLCBjbnQKKwltb3YJdTEsIHUwCisJeG9yCXUxLCB1MQorCXN1Ygl2MSwgdTAKKwlqbXAJTChiY2spCisKK0woZW5kKToJQyBtb3YJdjAsICVyYXgKKwlDIG1vdgl2MSwgJXJkeAorCUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlMi9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlMi9nbXAtbXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRmMTQ5NAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmUyL2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDIyMiBAQAorLyogQ29yZSAyIGdtcC1tcGFyYW0uaCAtLSBDb21waWxlci9tYWNoaW5lIHBhcmFtZXRlciBoZWFkZXIgZmlsZS4KKworQ29weXJpZ2h0IDIwMTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNkZWZpbmUgR01QX0xJTUJfQklUUyA2NAorI2RlZmluZSBHTVBfTElNQl9CWVRFUyA4CisKKy8qIDMwMDAgTUh6IFBlbnJ5biAqLworLyogRkZUIHR1bmluZyBsaW1pdCA9IDExNiwyMjAsOTg0ICovCisvKiBHZW5lcmF0ZWQgYnkgdHVuZXVwLmMsIDIwMTktMTAtMTgsIGdjYyA4LjMgKi8KKworI2RlZmluZSBNT0RfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PRF8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFOX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgIDMKKyNkZWZpbmUgTU9EXzFVX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgIDIKKyNkZWZpbmUgTU9EXzFfMV9UT19NT0RfMV8yX1RIUkVTSE9MRCAgICAgICAgMTEKKyNkZWZpbmUgTU9EXzFfMl9UT19NT0RfMV80X1RIUkVTSE9MRCAgICAgICAgMTgKKyNkZWZpbmUgUFJFSU5WX01PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgIDgKKyNkZWZpbmUgVVNFX1BSRUlOVl9ESVZSRU1fMSAgICAgICAgICAgICAgICAgIDEgIC8qIG5hdGl2ZSAqLworI2RlZmluZSBESVZfUVJfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgMworI2RlZmluZSBESVZfUVJfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICBNUF9TSVpFX1RfTUFYICAvKiBuZXZlciAqLworI2RlZmluZSBESVZfUVJfMl9QSTJfVEhSRVNIT0xEICAgICAgICAgICAgICAxNgorI2RlZmluZSBESVZFWEFDVF8xX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIEJNT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgICAgICAgIDI2CisKKyNkZWZpbmUgRElWXzFfVlNfTVVMXzFfUEVSQ0VOVCAgICAgICAgICAgICAyODQKKworI2RlZmluZSBNVUxfVE9PTTIyX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBNVUxfVE9PTTMzX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA2NQorI2RlZmluZSBNVUxfVE9PTTQ0X1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE4NAorI2RlZmluZSBNVUxfVE9PTTZIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDI1NgorI2RlZmluZSBNVUxfVE9PTThIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDM4MQorCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTQzX1RIUkVTSE9MRCAgICAgIDczCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgMTIyCisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgIDczCisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTYzX1RIUkVTSE9MRCAgICAgIDc5CisjZGVmaW5lIE1VTF9UT09NNDNfVE9fVE9PTTU0X1RIUkVTSE9MRCAgICAgMTA2CisKKyNkZWZpbmUgU1FSX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAobmF0aXZlKSAqLworI2RlZmluZSBTUVJfVE9PTTJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAyOAorI2RlZmluZSBTUVJfVE9PTTNfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDEwMgorI2RlZmluZSBTUVJfVE9PTTRfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE2MAorI2RlZmluZSBTUVJfVE9PTTZfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDM2NgorI2RlZmluZSBTUVJfVE9PTThfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDQ3OAorCisjZGVmaW5lIE1VTE1JRF9UT09NNDJfVEhSRVNIT0xEICAgICAgICAgICAgIDMyCisKKyNkZWZpbmUgTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgU1FSTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTcKKworI2RlZmluZSBNVUxfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDM2OCAgLyogayA9IDUgKi8KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDM2OCwgNX0sIHsgICAgIDE3LCA2fSwgeyAgICAgIDksIDV9LCB7ICAgICAxOSwgNn0sIFwKKyAgICB7ICAgICAxMCwgNX0sIHsgICAgIDIxLCA2fSwgeyAgICAgMTEsIDV9LCB7ICAgICAyMywgNn0sIFwKKyAgICB7ICAgICAyMSwgN30sIHsgICAgIDExLCA2fSwgeyAgICAgMjMsIDd9LCB7ICAgICAxMiwgNn0sIFwKKyAgICB7ICAgICAyNSwgN30sIHsgICAgIDIxLCA4fSwgeyAgICAgMTEsIDd9LCB7ICAgICAyNCwgOH0sIFwKKyAgICB7ICAgICAxMywgN30sIHsgICAgIDI3LCA4fSwgeyAgICAgMTUsIDd9LCB7ICAgICAzMSwgOH0sIFwKKyAgICB7ICAgICAxOSwgN30sIHsgICAgIDM5LCA4fSwgeyAgICAgMjEsIDl9LCB7ICAgICAxMSwgOH0sIFwKKyAgICB7ICAgICAyNywgOX0sIHsgICAgIDE1LCA4fSwgeyAgICAgMzUsIDl9LCB7ICAgICAxOSwgOH0sIFwKKyAgICB7ICAgICA0MSwgOX0sIHsgICAgIDIzLCA4fSwgeyAgICAgNDcsIDl9LCB7ICAgICAyNywxMH0sIFwKKyAgICB7ICAgICAxNSwgOX0sIHsgICAgIDM5LDEwfSwgeyAgICAgMjMsIDl9LCB7ICAgICA1MSwxMX0sIFwKKyAgICB7ICAgICAxNSwxMH0sIHsgICAgIDMxLCA5fSwgeyAgICAgNjcsMTB9LCB7ICAgICAzOSwgOX0sIFwKKyAgICB7ICAgICA4MywxMH0sIHsgICAgIDQ3LCA5fSwgeyAgICAgOTUsMTF9LCB7ICAgICAzMSwxMH0sIFwKKyAgICB7ICAgICA3OSwxMX0sIHsgICAgIDQ3LDEwfSwgeyAgICAgOTUsMTJ9LCB7ICAgICAzMSwgOX0sIFwKKyAgICB7ICAgIDI1NSwxMH0sIHsgICAgMTM1LDExfSwgeyAgICAgNzksMTB9LCB7ICAgIDE1OSwgOX0sIFwKKyAgICB7ICAgIDMxOSwxMX0sIHsgICAgIDk1LDEwfSwgeyAgICAxOTEsIDl9LCB7ICAgIDM4MywxMX0sIFwKKyAgICB7ICAgIDExMSwxMn0sIHsgICAgIDYzLDExfSwgeyAgICAxMjcsMTB9LCB7ICAgIDI3MSwxMX0sIFwKKyAgICB7ICAgIDE0MywxMH0sIHsgICAgMjg3LCA5fSwgeyAgICA1NzUsMTB9LCB7ICAgIDMwMywxMX0sIFwKKyAgICB7ICAgIDE1OSwxMH0sIHsgICAgMzE5LDEyfSwgeyAgICAgOTUsMTF9LCB7ICAgIDE5MSwxMH0sIFwKKyAgICB7ICAgIDM4MywxMX0sIHsgICAgMjA3LDEwfSwgeyAgICA0MTUsMTN9LCB7ICAgICA2MywxMn0sIFwKKyAgICB7ICAgIDEyNywxMX0sIHsgICAgMjcxLDEwfSwgeyAgICA1NDMsMTF9LCB7ICAgIDI4NywxMH0sIFwKKyAgICB7ICAgIDU3NSwxMX0sIHsgICAgMzE5LDEwfSwgeyAgICA2MzksMTF9LCB7ICAgIDM1MSwxMn0sIFwKKyAgICB7ICAgIDE5MSwxMX0sIHsgICAgNDE1LDEyfSwgeyAgICAyMjMsMTF9LCB7ICAgIDQ3OSwxM30sIFwKKyAgICB7ICAgIDEyNywxMn0sIHsgICAgMjU1LDExfSwgeyAgICA1NDMsMTJ9LCB7ICAgIDI4NywxMX0sIFwKKyAgICB7ICAgIDYwNywxMn0sIHsgICAgMzE5LDExfSwgeyAgICA2MzksMTJ9LCB7ICAgIDM1MSwxMX0sIFwKKyAgICB7ICAgIDcwMywxM30sIHsgICAgMTkxLDEyfSwgeyAgICA0NzksMTR9LCB7ICAgIDEyNywxM30sIFwKKyAgICB7ICAgIDI1NSwxMn0sIHsgICAgNTc1LDEzfSwgeyAgICAzMTksMTJ9LCB7ICAgIDcwMywxM30sIFwKKyAgICB7ICAgIDM4MywxMn0sIHsgICAgNzk5LDEzfSwgeyAgICA0NDcsMTJ9LCB7ICAgIDk1OSwxNH0sIFwKKyAgICB7ICAgIDI1NSwxM30sIHsgICAgNTExLDEyfSwgeyAgIDEwMjMsMTN9LCB7ICAgIDU3NSwxMn0sIFwKKyAgICB7ICAgMTE1MSwxM30sIHsgICAgNzAzLDE0fSwgeyAgICAzODMsMTN9LCB7ICAgIDgzMSwxMn0sIFwKKyAgICB7ICAgMTY2MywxM30sIHsgICAgOTU5LDE1fSwgeyAgICAyNTUsMTR9LCB7ICAgIDUxMSwxM30sIFwKKyAgICB7ICAgMTA4NywxMn0sIHsgICAyMTc1LDEzfSwgeyAgIDEyMTUsMTR9LCB7ICAgIDYzOSwxM30sIFwKKyAgICB7ICAgMTM0MywxMn0sIHsgICAyNjg3LDEzfSwgeyAgIDE0NzEsMTR9LCB7ICAgIDc2NywxM30sIFwKKyAgICB7ICAgMTY2MywxNH0sIHsgICAgODk1LDEzfSwgeyAgIDE3OTEsMTV9LCB7ICAgIDUxMSwxNH0sIFwKKyAgICB7ICAgMTAyMywxM30sIHsgICAyMTc1LDE0fSwgeyAgIDExNTEsMTN9LCB7ICAgMjQzMSwxMn0sIFwKKyAgICB7ICAgNDg2MywxNH0sIHsgICAxMjc5LDEzfSwgeyAgIDI1NTksMTR9LCB7ICAgMTQwNywxM30sIFwKKyAgICB7ICAgMjgxNSwxNX0sIHsgICAgNzY3LDE0fSwgeyAgIDE2NjMsMTN9LCB7ICAgMzQ1NSwxMn0sIFwKKyAgICB7ICAgNjkxMSwxNH0sIHsgICAxNzkxLDE2fSwgeyAgICA1MTEsMTV9LCB7ICAgMTAyMywxNH0sIFwKKyAgICB7ICAgMjQzMSwxM30sIHsgICA0ODYzLDE1fSwgeyAgIDEyNzksMTR9LCB7ICAgMjk0MywxM30sIFwKKyAgICB7ICAgNTg4NywxMn0sIHsgIDExNzc1LDE1fSwgeyAgIDE1MzUsMTR9LCB7ICAgMzQ1NSwxM30sIFwKKyAgICB7ICAgNjkxMSwxNX0sIHsgICAxNzkxLDE0fSwgeyAgIDM4MzksMTN9LCB7ICAgNzY3OSwxNn0sIFwKKyAgICB7ICAgMTAyMywxNX0sIHsgICAyMDQ3LDE0fSwgeyAgIDQyMjMsMTV9LCB7ICAgMjMwMywxNH0sIFwKKyAgICB7ICAgNDk5MSwxNX0sIHsgICAyODE1LDE0fSwgeyAgIDU4ODcsMTN9LCB7ICAxMTc3NSwxNn0sIFwKKyAgICB7ICAgMTUzNSwxNX0sIHsgICAzMzI3LDE0fSwgeyAgIDY5MTEsMTV9LCB7ICAzMjc2OCwxNn0sIFwKKyAgICB7ICA2NTUzNiwxN30sIHsgMTMxMDcyLDE4fSwgeyAyNjIxNDQsMTl9LCB7IDUyNDI4OCwyMH0sIFwKKyAgICB7MTA0ODU3NiwyMX0sIHsyMDk3MTUyLDIyfSwgezQxOTQzMDQsMjN9LCB7ODM4ODYwOCwyNH0gfQorI2RlZmluZSBNVUxfRkZUX1RBQkxFM19TSVpFIDE3NgorI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNDczNgorCisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgMzA4ICAvKiBrID0gNSAqLworI2RlZmluZSBTUVJfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgMzA4LCA1fSwgeyAgICAgMTcsIDZ9LCB7ICAgICAyMywgN30sIHsgICAgIDEyLCA2fSwgXAorICAgIHsgICAgIDI1LCA3fSwgeyAgICAgMjEsIDh9LCB7ICAgICAxMSwgN30sIHsgICAgIDI1LCA4fSwgXAorICAgIHsgICAgIDEzLCA3fSwgeyAgICAgMjcsIDh9LCB7ICAgICAxNSwgN30sIHsgICAgIDMxLCA4fSwgXAorICAgIHsgICAgIDIxLCA5fSwgeyAgICAgMTEsIDh9LCB7ICAgICAyNywgOX0sIHsgICAgIDE1LCA4fSwgXAorICAgIHsgICAgIDMzLCA5fSwgeyAgICAgMTksIDh9LCB7ICAgICA0MSwgOX0sIHsgICAgIDIzLCA4fSwgXAorICAgIHsgICAgIDQ3LCA5fSwgeyAgICAgMjcsMTB9LCB7ICAgICAxNSwgOX0sIHsgICAgIDM5LDEwfSwgXAorICAgIHsgICAgIDIzLCA5fSwgeyAgICAgNTEsMTF9LCB7ICAgICAxNSwxMH0sIHsgICAgIDMxLCA5fSwgXAorICAgIHsgICAgIDYzLDEwfSwgeyAgICAgMzksIDl9LCB7ICAgICA3OSwxMH0sIHsgICAgIDQ3LDExfSwgXAorICAgIHsgICAgIDMxLDEwfSwgeyAgICAgNzksMTF9LCB7ICAgICA0NywxMn0sIHsgICAgIDMxLDExfSwgXAorICAgIHsgICAgIDYzLDEwfSwgeyAgICAxMjcsIDl9LCB7ICAgIDI1NSwxMX0sIHsgICAgIDc5LDEwfSwgXAorICAgIHsgICAgMTU5LCA2fSwgeyAgIDI1NTksIDd9LCB7ICAgMTM0MywgNn0sIHsgICAyNjg3LCA3fSwgXAorICAgIHsgICAxNDA3LCA5fSwgeyAgICAzODMsMTJ9LCB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgXAorICAgIHsgICAgMjU1LCA5fSwgeyAgICA1MTEsMTB9LCB7ICAgIDI3MSwgOX0sIHsgICAgNTQzLDExfSwgXAorICAgIHsgICAgMTQzLDEwfSwgeyAgICAyODcsIDl9LCB7ICAgIDU3NSwxMX0sIHsgICAgMTU5LDEwfSwgXAorICAgIHsgICAgMzE5LDExfSwgeyAgICAxNzUsMTJ9LCB7ICAgICA5NSwxMX0sIHsgICAgMTkxLDEwfSwgXAorICAgIHsgICAgMzgzLDExfSwgeyAgICAyMDcsMTB9LCB7ICAgIDQxNSwxM30sIHsgICAgIDYzLDEyfSwgXAorICAgIHsgICAgMTI3LDExfSwgeyAgICAyNTUsMTB9LCB7ICAgIDUxMSwxMX0sIHsgICAgMjcxLDEwfSwgXAorICAgIHsgICAgNTQzLDExfSwgeyAgICAyODcsMTB9LCB7ICAgIDU3NSwxMn0sIHsgICAgMTU5LDExfSwgXAorICAgIHsgICAgMzE5LDEwfSwgeyAgICA2MzksMTF9LCB7ICAgIDM1MSwxMn0sIHsgICAgMTkxLDExfSwgXAorICAgIHsgICAgMzgzLDEwfSwgeyAgICA3NjcsMTF9LCB7ICAgIDQxNSwxMn0sIHsgICAgMjIzLDExfSwgXAorICAgIHsgICAgNDc5LDEzfSwgeyAgICAxMjcsMTJ9LCB7ICAgIDI1NSwxMX0sIHsgICAgNTQzLDEyfSwgXAorICAgIHsgICAgMjg3LDExfSwgeyAgICA1NzUsMTJ9LCB7ICAgIDMxOSwxMX0sIHsgICAgNjM5LDEyfSwgXAorICAgIHsgICAgMzUxLDEzfSwgeyAgICAxOTEsMTJ9LCB7ICAgIDM4MywxMX0sIHsgICAgNzY3LDEyfSwgXAorICAgIHsgICAgNDc5LDE0fSwgeyAgICAxMjcsMTN9LCB7ICAgIDI1NSwxMn0sIHsgICAgNTc1LDEzfSwgXAorICAgIHsgICAgMzE5LDEyfSwgeyAgICA3MDMsMTN9LCB7ICAgIDM4MywxMn0sIHsgICAgNzk5LDEzfSwgXAorICAgIHsgICAgNDQ3LDEyfSwgeyAgICA4OTUsMTR9LCB7ICAgIDI1NSwxM30sIHsgICAgNTExLDEyfSwgXAorICAgIHsgICAxMDIzLDEzfSwgeyAgICA1NzUsMTJ9LCB7ICAgMTE1MSwxM30sIHsgICAgNjM5LDEyfSwgXAorICAgIHsgICAxMjc5LDEzfSwgeyAgICA3MDMsMTR9LCB7ICAgIDM4MywxM30sIHsgICAgNzY3LDEyfSwgXAorICAgIHsgICAxNTM1LDEzfSwgeyAgICA5NTksMTV9LCB7ICAgIDI1NSwxNH0sIHsgICAgNTExLDEzfSwgXAorICAgIHsgICAxMDg3LDEyfSwgeyAgIDIxNzUsMTN9LCB7ICAgMTIxNSwxNH0sIHsgICAgNjM5LDEzfSwgXAorICAgIHsgICAxMzQzLDEyfSwgeyAgIDI2ODcsMTN9LCB7ICAgMTQwNywxNH0sIHsgICAgNzY3LDEzfSwgXAorICAgIHsgICAxNTk5LDEyfSwgeyAgIDMxOTksMTN9LCB7ICAgMTY2MywxNH0sIHsgICAgODk1LDE1fSwgXAorICAgIHsgICAgNTExLDE0fSwgeyAgIDEwMjMsMTN9LCB7ICAgMjE3NSwxNH0sIHsgICAxMTUxLDEzfSwgXAorICAgIHsgICAyMzAzLDEyfSwgeyAgIDQ2MDcsMTN9LCB7ICAgMjQzMSwxMn0sIHsgICA0ODYzLDE0fSwgXAorICAgIHsgICAxMjc5LDEzfSwgeyAgIDI2ODcsMTR9LCB7ICAgMTQwNywxNX0sIHsgICAgNzY3LDE0fSwgXAorICAgIHsgICAxNTM1LDEzfSwgeyAgIDMxOTksMTR9LCB7ICAgMTY2MywxM30sIHsgICAzNDU1LDEyfSwgXAorICAgIHsgICA2OTExLDE2fSwgeyAgICA1MTEsMTV9LCB7ICAgMTAyMywxNH0sIHsgICAyMzAzLDEzfSwgXAorICAgIHsgICA0NjA3LDE0fSwgeyAgIDI0MzEsMTN9LCB7ICAgNDg2MywxNX0sIHsgICAxMjc5LDE0fSwgXAorICAgIHsgICAyOTQzLDEzfSwgeyAgIDU4ODcsMTJ9LCB7ICAxMTc3NSwxNX0sIHsgICAxNTM1LDE0fSwgXAorICAgIHsgICAzNDU1LDE1fSwgeyAgIDE3OTEsMTR9LCB7ICAgMzU4MywxM30sIHsgICA3MTY3LDE0fSwgXAorICAgIHsgICAzODM5LDE2fSwgeyAgIDEwMjMsMTV9LCB7ICAgMjA0NywxNH0sIHsgICA0MjIzLDE1fSwgXAorICAgIHsgICAyMzAzLDE0fSwgeyAgIDQ4NjMsMTV9LCB7ICAgMjgxNSwxNH0sIHsgICA1ODg3LDEzfSwgXAorICAgIHsgIDExNzc1LDE2fSwgeyAgIDE1MzUsMTV9LCB7ICAgMzA3MSwxNH0sIHsgICA2MTQzLDE1fSwgXAorICAgIHsgICAzMzI3LDE0fSwgeyAgIDY5MTEsMTV9LCB7ICAzMjc2OCwxNn0sIHsgIDY1NTM2LDE3fSwgXAorICAgIHsgMTMxMDcyLDE4fSwgeyAyNjIxNDQsMTl9LCB7IDUyNDI4OCwyMH0sIHsxMDQ4NTc2LDIxfSwgXAorICAgIHsyMDk3MTUyLDIyfSwgezQxOTQzMDQsMjN9LCB7ODM4ODYwOCwyNH0gfQorI2RlZmluZSBTUVJfRkZUX1RBQkxFM19TSVpFIDE4MworI2RlZmluZSBTUVJfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMzUyMAorCisjZGVmaW5lIE1VTExPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTVVMTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgNjcKKyNkZWZpbmUgTVVMTE9fTVVMX05fVEhSRVNIT0xEICAgICAgICAgICAgIDkxNzQKKyNkZWZpbmUgU1FSTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgMTAKKyNkZWZpbmUgU1FSTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgU1FSTE9fU1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDcwMzUKKworI2RlZmluZSBEQ19ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA1MworI2RlZmluZSBEQ19ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgIDE2MworI2RlZmluZSBEQ19CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA0NgorI2RlZmluZSBEQ19CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA3NgorCisjZGVmaW5lIElOVl9NVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgIDQ2CisjZGVmaW5lIElOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAgMTU4CisjZGVmaW5lIElOVl9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTY3CisKKyNkZWZpbmUgQklOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAyNDgKKyNkZWZpbmUgUkVEQ18xX1RPX1JFRENfTl9USFJFU0hPTEQgICAgICAgICAgNDQKKworI2RlZmluZSBNVV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTE4NworI2RlZmluZSBNVV9ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgMTIxMAorI2RlZmluZSBNVVBJX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICA3MworI2RlZmluZSBNVV9CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTAxNworI2RlZmluZSBNVV9CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTE4NworCisjZGVmaW5lIFBPV01fU0VDX1RBQkxFICAxLDY0LDEwNSw1NzksMTQ4NgorCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgIDE3CisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTM0CisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAxNzUyCisKKyNkZWZpbmUgRkFDX0RTQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAzNTEKKyNkZWZpbmUgRkFDX09ERF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgMjcKKworI2RlZmluZSBNQVRSSVgyMl9TVFJBU1NFTl9USFJFU0hPTEQgICAgICAgICAxOAorI2RlZmluZSBIR0NEMl9ESVYxX01FVEhPRCAgICAgICAgICAgICAgICAgICAgMyAgLyogMi4xNCUgZmFzdGVyIHRoYW4gNSAqLworI2RlZmluZSBIR0NEX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgIDExOAorI2RlZmluZSBIR0NEX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE2MQorI2RlZmluZSBIR0NEX1JFRFVDRV9USFJFU0hPTEQgICAgICAgICAgICAgMjEyMQorI2RlZmluZSBHQ0RfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDQxNgorI2RlZmluZSBHQ0RFWFRfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDM1MQorI2RlZmluZSBKQUNPQklfQkFTRV9NRVRIT0QgICAgICAgICAgICAgICAgICAgNCAgLyogMy41NiUgZmFzdGVyIHRoYW4gMSAqLworCisvKiBUdW5ldXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgdG9vayAxMzI0OTEgc2Vjb25kcyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZTIvaGFtZGlzdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlMi9oYW1kaXN0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzg3NTNkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZTIvaGFtZGlzdC5hc20KQEAgLTAsMCArMSwyMTAgQEAKK2RubCAgQU1ENjQgU1NTRTMgbXBuX2hhbWRpc3QgLS0gaGFtbWluZyBkaXN0YW5jZS4KKworZG5sICBDb3B5cmlnaHQgMjAxMC0yMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkJICAgIGN5Y2xlcy9saW1iCSAgZ29vZCBmb3IgY3B1PworQyBBTUQgSzgsSzkJCW4vYQorQyBBTUQgSzEwCQluL2EKK0MgQU1EIGJkMQkJID8KK0MgQU1EIGJkMgkJID8KK0MgQU1EIGJkMwkJID8KK0MgQU1EIGJkNAkJID8KK0MgQU1EIHplbgkJID8KK0MgQU1EIGJvYmNhdAkJID8KK0MgQU1EIGphZ3VhcgkJID8KK0MgSW50ZWwgUDQJCW4vYQorQyBJbnRlbCBDTlIJCSA0LjUwCQl5CitDIEludGVsIFBOUgkJIDMuMjgJCXkKK0MgSW50ZWwgTkhNCQkgPworQyBJbnRlbCBTQlIJCSA/CitDIEludGVsIElCUgkJID8KK0MgSW50ZWwgSFdMCQkgPworQyBJbnRlbCBCV0wJCSA/CitDIEludGVsIFNLTAkJID8KK0MgSW50ZWwgYXRvbQkJID8KK0MgSW50ZWwgU0xNCQkgPworQyBWSUEgbmFubwkJID8KKworQyBUT0RPCitDICAqIFRoaXMgd2FzIGhhbmQtd3JpdHRlbiB3aXRob3V0IHRvbyBtdWNoIHRob3VnaHQgYWJvdXQgb3B0aW1hbCBpbnNuCitDICAgIHNlbGVjdGlvbjsgY2hlY2sgdG8gc2VlIG9mIGl0IGNhbiBiZSBpbXByb3ZlZC4KK0MgICogQ29uc2lkZXIgZG9pbmcgc29tZSBpbnN0cnVjdGlvbiBzY2hlZHVsaW5nLgorCitkZWZpbmUoYHVwJywJCWAlcmRpJykKK2RlZmluZShgdnAnLAkJYCVyc2knKQorZGVmaW5lKGBuJywJCWAlcmR4JykKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMzIpCitQUk9MT0dVRShtcG5faGFtZGlzdCkKKwlsZWEJTChjbnN0cykoJXJpcCksICVyOQorCitpZmRlZihgUElDJywgYGRlZmluZShgT0ZGMScsMzIpIGRlZmluZShgT0ZGMicsNDgpJywKKwkgICAgIGBkZWZpbmUoYE9GRjEnLDY0KSBkZWZpbmUoYE9GRjInLDgwKScpCisJbW92ZHFhCU9GRjFgJyglcjkpLCAleG1tNworCW1vdmRxYQlPRkYyYCcoJXI5KSwgJXhtbTYKKwlweG9yCSV4bW00LCAleG1tNAorCXB4b3IJJXhtbTUsICV4bW01CisJcHhvcgkleG1tOCwgJXhtbTgKKworCW1vdglSMzIobiksIFIzMiglcmF4KQorCWFuZAkkNywgUjMyKCVyYXgpCitpZmRlZihgUElDJyxgCisJbW92c2xxCSglcjksJXJheCw0KSwgJXJheAorCWFkZAklcjksICVyYXgKKwlqbXAJKiVyYXgKKycsYAorCWptcAkqKCVyOSwlcmF4LDgpCisnKQorCitMKDEpOgltb3ZxCSh1cCksICV4bW0xCisJYWRkCSQ4LCB1cAorCW1vdnEJKHZwKSwgJXhtbTEwCisJYWRkCSQ4LCB2cAorCXB4b3IJJXhtbTEwLCAleG1tMQorCWptcAlMKGUxKQorCitMKDIpOglhZGQJJC00OCwgdXAKKwlhZGQJJC00OCwgdnAKKwlqbXAJTChlMikKKworTCgzKToJbW92cQkodXApLCAleG1tMQorCWFkZAkkLTQwLCB1cAorCW1vdnEJKHZwKSwgJXhtbTEwCisJYWRkCSQtNDAsIHZwCisJcHhvcgkleG1tMTAsICV4bW0xCisJam1wCUwoZTMpCisKK0woNCk6CWFkZAkkLTMyLCB1cAorCWFkZAkkLTMyLCB2cAorCWptcAlMKGU0KQorCitMKDUpOgltb3ZxCSh1cCksICV4bW0xCisJYWRkCSQtMjQsIHVwCisJbW92cQkodnApLCAleG1tMTAKKwlhZGQJJC0yNCwgdnAKKwlweG9yCSV4bW0xMCwgJXhtbTEKKwlqbXAJTChlNSkKKworTCg2KToJYWRkCSQtMTYsIHVwCisJYWRkCSQtMTYsIHZwCisJam1wCUwoZTYpCisKK0woNyk6CW1vdnEJKHVwKSwgJXhtbTEKKwlhZGQJJC04LCB1cAorCW1vdnEJKHZwKSwgJXhtbTEwCisJYWRkCSQtOCwgdnAKKwlweG9yCSV4bW0xMCwgJXhtbTEKKwlqbXAJTChlNykKKworCUFMSUdOKDMyKQorTCh0b3ApOglsZGRxdQkodXApLCAleG1tMQorCWxkZHF1CSh2cCksICV4bW0xMAorCXB4b3IJJXhtbTEwLCAleG1tMQorTChlNyk6CW1vdmRxYQkleG1tNiwgJXhtbTAJCUMgY29weSBtYXNrIHJlZ2lzdGVyCisJbW92ZHFhCSV4bW03LCAleG1tMgkJQyBjb3B5IGNvdW50IHJlZ2lzdGVyCisJbW92ZHFhCSV4bW03LCAleG1tMwkJQyBjb3B5IGNvdW50IHJlZ2lzdGVyCisJcGFuZAkleG1tMSwgJXhtbTAKKwlwc3JsdwkkNCwgJXhtbTEKKwlwYW5kCSV4bW02LCAleG1tMQorCXBzaHVmYgkleG1tMCwgJXhtbTIKKwlwc2h1ZmIJJXhtbTEsICV4bW0zCisJcGFkZGIJJXhtbTIsICV4bW0zCisJcGFkZGIJJXhtbTMsICV4bW00CitMKGU2KToJbGRkcXUJMTYodXApLCAleG1tMQorCWxkZHF1CTE2KHZwKSwgJXhtbTEwCisJcHhvcgkleG1tMTAsICV4bW0xCitMKGU1KToJbW92ZHFhCSV4bW02LCAleG1tMAorCW1vdmRxYQkleG1tNywgJXhtbTIKKwltb3ZkcWEJJXhtbTcsICV4bW0zCisJcGFuZAkleG1tMSwgJXhtbTAKKwlwc3JsdwkkNCwgJXhtbTEKKwlwYW5kCSV4bW02LCAleG1tMQorCXBzaHVmYgkleG1tMCwgJXhtbTIKKwlwc2h1ZmIJJXhtbTEsICV4bW0zCisJcGFkZGIJJXhtbTIsICV4bW0zCisJcGFkZGIJJXhtbTMsICV4bW00CitMKGU0KToJbGRkcXUJMzIodXApLCAleG1tMQorCWxkZHF1CTMyKHZwKSwgJXhtbTEwCisJcHhvcgkleG1tMTAsICV4bW0xCitMKGUzKToJbW92ZHFhCSV4bW02LCAleG1tMAorCW1vdmRxYQkleG1tNywgJXhtbTIKKwltb3ZkcWEJJXhtbTcsICV4bW0zCisJcGFuZAkleG1tMSwgJXhtbTAKKwlwc3JsdwkkNCwgJXhtbTEKKwlwYW5kCSV4bW02LCAleG1tMQorCXBzaHVmYgkleG1tMCwgJXhtbTIKKwlwc2h1ZmIJJXhtbTEsICV4bW0zCisJcGFkZGIJJXhtbTIsICV4bW0zCisJcGFkZGIJJXhtbTMsICV4bW00CitMKGUyKToJbGRkcXUJNDgodXApLCAleG1tMQorCWFkZAkkNjQsIHVwCisJbGRkcXUJNDgodnApLCAleG1tMTAKKwlhZGQJJDY0LCB2cAorCXB4b3IJJXhtbTEwLCAleG1tMQorTChlMSk6CW1vdmRxYQkleG1tNiwgJXhtbTAKKwltb3ZkcWEJJXhtbTcsICV4bW0yCisJbW92ZHFhCSV4bW03LCAleG1tMworCXBhbmQJJXhtbTEsICV4bW0wCisJcHNybHcJJDQsICV4bW0xCisJcGFuZAkleG1tNiwgJXhtbTEKKwlwc2h1ZmIJJXhtbTAsICV4bW0yCisJcHNodWZiCSV4bW0xLCAleG1tMworCXBzYWRidwkleG1tNSwgJXhtbTQJCUMgc3VtIHRvIDggeCAxNi1iaXQgY291bnRzCisJcGFkZGIJJXhtbTIsICV4bW0zCisJcGFkZHEJJXhtbTQsICV4bW04CQlDIHN1bSB0byAyIHggNjQtYml0IGNvdW50cworCW1vdmRxYQkleG1tMywgJXhtbTQKKwlzdWIJJDgsIG4KKwlqZwlMKHRvcCkKKworCXBzYWRidwkleG1tNSwgJXhtbTQKKwlwYWRkcQkleG1tNCwgJXhtbTgKKwlwc2h1ZmQJJDE0LCAleG1tOCwgJXhtbTAKKwlwYWRkcQkleG1tOCwgJXhtbTAKKwltb3ZxCSV4bW0wLCAlcmF4CisJcmV0CitFUElMT0dVRSgpCitERUZfT0JKRUNUKEwoY25zdHMpLDE2LGBKVU1QVEFCU0VDVCcpCisJSk1QRU5UKAlMKHRvcCksIEwoY25zdHMpKQorCUpNUEVOVCgJTCgxKSwgTChjbnN0cykpCisJSk1QRU5UKAlMKDIpLCBMKGNuc3RzKSkKKwlKTVBFTlQoCUwoMyksIEwoY25zdHMpKQorCUpNUEVOVCgJTCg0KSwgTChjbnN0cykpCisJSk1QRU5UKAlMKDUpLCBMKGNuc3RzKSkKKwlKTVBFTlQoCUwoNiksIEwoY25zdHMpKQorCUpNUEVOVCgJTCg3KSwgTChjbnN0cykpCisJLmJ5dGUJMHgwMCwweDAxLDB4MDEsMHgwMiwweDAxLDB4MDIsMHgwMiwweDAzCisJLmJ5dGUJMHgwMSwweDAyLDB4MDIsMHgwMywweDAyLDB4MDMsMHgwMywweDA0CisJLmJ5dGUJMHgwZiwweDBmLDB4MGYsMHgwZiwweDBmLDB4MGYsMHgwZiwweDBmCisJLmJ5dGUJMHgwZiwweDBmLDB4MGYsMHgwZiwweDBmLDB4MGYsMHgwZiwweDBmCitFTkRfT0JKRUNUKEwoY25zdHMpKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZTIvbG9nb3BzX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZTIvbG9nb3BzX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZjE3NGMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlMi9sb2dvcHNfbi5hc20KQEAgLTAsMCArMSwyODUgQEAKK2RubCAgQU1ENjQgbG9nb3BzLgorCitkbmwgIENvcHlyaWdodCAyMDA0LTIwMTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDCQljL2wJYy9sCWMvbAlnb29kCitDCSAgICAgICB2YXItMSAgIHZhci0yICAgdmFyLTMgIGZvciBjcHU/CitDIEFNRCBLOCxLOQorQyBBTUQgSzEwCSAxLjUyCSAxLjc1CSAxLjc1CSBuCitDIEFNRCBiZDEKK0MgQU1EIGJkMgorQyBBTUQgYmQzCitDIEFNRCBiZDQKK0MgQU1EIGJ0MQkgMi42Nwl+Mi43OQl+Mi43OQkgPQorQyBBTUQgYnQyCSAyLjE1CSAyLjY1CSAyLjY1CSBuCitDIEFNRCB6ZW4JIDEuNQkgMS41CSAxLjUJID0KK0MgSW50ZWwgUDQKK0MgSW50ZWwgUE5SCSAyLjAJIDIuMAkgMi4wCSA9CitDIEludGVsIE5ITQkgMi4wCSAyLjAJIDIuMAkgPQorQyBJbnRlbCBTQlIJIDEuNQkgMS41CSAxLjUJIHkKK0MgSW50ZWwgSUJSCSAxLjQ3CSAxLjQ4CSAxLjQ4CSB5CitDIEludGVsIEhXTAkgMS4xMQkgMS4zNQkgMS4zNQkgeQorQyBJbnRlbCBCV0wJIDEuMDkJIDEuMzAJIDEuMzAJIHkKK0MgSW50ZWwgU0tMCSAxLjIxCSAxLjI3CSAxLjI3CSB5CitDIEludGVsIGF0b20JIDMuMzEJIDMuNTcJIDMuNTcJIHkKK0MgSW50ZWwgU0xNCSAzLjAJIDMuMAkgMy4wCSA9CitDIFZJQSBuYW5vCisKK2lmZGVmKGBPUEVSQVRJT05fYW5kX24nLGAKKyAgZGVmaW5lKGBmdW5jJyxgbXBuX2FuZF9uJykKKyAgZGVmaW5lKGBWQVJJQU5UXzEnKQorICBkZWZpbmUoYExPR09QJyxgYW5kJyknKQoraWZkZWYoYE9QRVJBVElPTl9hbmRuX24nLGAKKyAgZGVmaW5lKGBmdW5jJyxgbXBuX2FuZG5fbicpCisgIGRlZmluZShgVkFSSUFOVF8yJykKKyAgZGVmaW5lKGBMT0dPUCcsYGFuZCcpJykKK2lmZGVmKGBPUEVSQVRJT05fbmFuZF9uJyxgCisgIGRlZmluZShgZnVuYycsYG1wbl9uYW5kX24nKQorICBkZWZpbmUoYFZBUklBTlRfMycpCisgIGRlZmluZShgTE9HT1AnLGBhbmQnKScpCitpZmRlZihgT1BFUkFUSU9OX2lvcl9uJyxgCisgIGRlZmluZShgZnVuYycsYG1wbl9pb3JfbicpCisgIGRlZmluZShgVkFSSUFOVF8xJykKKyAgZGVmaW5lKGBMT0dPUCcsYG9yJyknKQoraWZkZWYoYE9QRVJBVElPTl9pb3JuX24nLGAKKyAgZGVmaW5lKGBmdW5jJyxgbXBuX2lvcm5fbicpCisgIGRlZmluZShgVkFSSUFOVF8yJykKKyAgZGVmaW5lKGBMT0dPUCcsYG9yJyknKQoraWZkZWYoYE9QRVJBVElPTl9uaW9yX24nLGAKKyAgZGVmaW5lKGBmdW5jJyxgbXBuX25pb3JfbicpCisgIGRlZmluZShgVkFSSUFOVF8zJykKKyAgZGVmaW5lKGBMT0dPUCcsYG9yJyknKQoraWZkZWYoYE9QRVJBVElPTl94b3JfbicsYAorICBkZWZpbmUoYGZ1bmMnLGBtcG5feG9yX24nKQorICBkZWZpbmUoYFZBUklBTlRfMScpCisgIGRlZmluZShgTE9HT1AnLGB4b3InKScpCitpZmRlZihgT1BFUkFUSU9OX3hub3JfbicsYAorICBkZWZpbmUoYGZ1bmMnLGBtcG5feG5vcl9uJykKKyAgZGVmaW5lKGBWQVJJQU5UXzInKQorICBkZWZpbmUoYExPR09QJyxgeG9yJyknKQorCitkZWZpbmUoYGFkZHB0cicsIGBsZWEJJDEoJDIpLCAkMicpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FuZF9uIG1wbl9hbmRuX24gbXBuX25hbmRfbiBtcG5faW9yX24gbXBuX2lvcm5fbiBtcG5fbmlvcl9uIG1wbl94b3JfbiBtcG5feG5vcl9uKQorCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLGAlcmRpJykKK2RlZmluZShgdXAnLGAlcnNpJykKK2RlZmluZShgdnAnLGAlcmR4JykKK2RlZmluZShgbicsYCVyY3gnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitBU01fU1RBUlQoKQorCitpZmRlZihgVkFSSUFOVF8xJyxgCisJVEVYVAorCUFMSUdOKDMyKQorUFJPTE9HVUUoZnVuYykKKwlGVU5DX0VOVFJZKDQpCisJbW92CSh2cCksICVyOAorCW1vdglSMzIoJXJjeCksIFIzMiglcmF4KQorCWFuZAkkMywgUjMyKCVyYXgpCisJamUJTChiMDApCisJY21wCSQyLCBSMzIoJXJheCkKKwlqYwlMKGIwMSkKKwlqZQlMKGIxMCkKKworTChiMTEpOglMT0dPUAkodXApLCAlcjgKKwltb3YJJXI4LCAocnApCisJaW5jCW4KKwlhZGRwdHIoCS04LCB1cCkKKwlhZGRwdHIoCS04LCB2cCkKKwlhZGRwdHIoCS04LCBycCkKKwlqbXAJTChlMTEpCitMKGIxMCk6CWFkZAkkMiwgbgorCWFkZHB0cigJLTE2LCB1cCkKKwlhZGRwdHIoCS0xNiwgdnApCisJYWRkcHRyKAktMTYsIHJwKQorCWptcAlMKGUxMCkKK0woYjAxKToJTE9HT1AJKHVwKSwgJXI4CisJbW92CSVyOCwgKHJwKQorCWRlYwluCisJanoJTChyZXQpCisJYWRkcHRyKAk4LCB1cCkKKwlhZGRwdHIoCTgsIHZwKQorCWFkZHB0cigJOCwgcnApCisKKwlBTElHTigxNikKK0wodG9wKToJbW92CSh2cCksICVyOAorTChiMDApOgltb3YJOCh2cCksICVyOQorCUxPR09QCSh1cCksICVyOAorCUxPR09QCTgodXApLCAlcjkKKwltb3YJJXI4LCAocnApCisJbW92CSVyOSwgOChycCkKK0woZTExKToJbW92CTE2KHZwKSwgJXI4CitMKGUxMCk6CW1vdgkyNCh2cCksICVyOQorCWFkZHB0cigJMzIsIHZwKQorCUxPR09QCTE2KHVwKSwgJXI4CisJTE9HT1AJMjQodXApLCAlcjkKKwlhZGRwdHIoCTMyLCB1cCkKKwltb3YJJXI4LCAxNihycCkKKwltb3YJJXI5LCAyNChycCkKKwlhZGRwdHIoCTMyLCBycCkKKwlzdWIJJDQsIG4KKwlqbnoJTCh0b3ApCisKK0wocmV0KToJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKKycpCisKK2lmZGVmKGBWQVJJQU5UXzInLGAKKwlURVhUCisJQUxJR04oMzIpCitQUk9MT0dVRShmdW5jKQorCUZVTkNfRU5UUlkoNCkKKwltb3YJKHZwKSwgJXI4CisJbm90CSVyOAorCW1vdglSMzIoJXJjeCksIFIzMiglcmF4KQorCWFuZAkkMywgUjMyKCVyYXgpCisJamUJTChiMDApCisJY21wCSQyLCBSMzIoJXJheCkKKwlqYwlMKGIwMSkKKwlqZQlMKGIxMCkKKworTChiMTEpOglMT0dPUAkodXApLCAlcjgKKwltb3YJJXI4LCAocnApCisJaW5jCW4KKwlhZGRwdHIoCS04LCB1cCkKKwlhZGRwdHIoCS04LCB2cCkKKwlhZGRwdHIoCS04LCBycCkKKwlqbXAJTChlMTEpCitMKGIxMCk6CWFkZAkkMiwgbgorCWFkZHB0cigJLTE2LCB1cCkKKwlhZGRwdHIoCS0xNiwgdnApCisJYWRkcHRyKAktMTYsIHJwKQorCWptcAlMKGUxMCkKK0woYjAxKToJTE9HT1AJKHVwKSwgJXI4CisJbW92CSVyOCwgKHJwKQorCWRlYwluCisJanoJTChyZXQpCisJYWRkcHRyKAk4LCB1cCkKKwlhZGRwdHIoCTgsIHZwKQorCWFkZHB0cigJOCwgcnApCisKKwlBTElHTigxNikKK0wodG9wKToJbW92CSh2cCksICVyOAorCW5vdAklcjgKK0woYjAwKToJbW92CTgodnApLCAlcjkKKwlub3QJJXI5CisJTE9HT1AJKHVwKSwgJXI4CisJTE9HT1AJOCh1cCksICVyOQorCW1vdgklcjgsIChycCkKKwltb3YJJXI5LCA4KHJwKQorTChlMTEpOgltb3YJMTYodnApLCAlcjgKKwlub3QJJXI4CitMKGUxMCk6CW1vdgkyNCh2cCksICVyOQorCW5vdAklcjkKKwlhZGRwdHIoCTMyLCB2cCkKKwlMT0dPUAkxNih1cCksICVyOAorCUxPR09QCTI0KHVwKSwgJXI5CisJYWRkcHRyKAkzMiwgdXApCisJbW92CSVyOCwgMTYocnApCisJbW92CSVyOSwgMjQocnApCisJYWRkcHRyKAkzMiwgcnApCisJc3ViCSQ0LCBuCisJam56CUwodG9wKQorCitMKHJldCk6CUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCisnKQorCitpZmRlZihgVkFSSUFOVF8zJyxgCisJVEVYVAorCUFMSUdOKDMyKQorUFJPTE9HVUUoZnVuYykKKwlGVU5DX0VOVFJZKDQpCisJbW92CSh2cCksICVyOAorCW1vdglSMzIoJXJjeCksIFIzMiglcmF4KQorCWFuZAkkMywgUjMyKCVyYXgpCisJamUJTChiMDApCisJY21wCSQyLCBSMzIoJXJheCkKKwlqYwlMKGIwMSkKKwlqZQlMKGIxMCkKKworTChiMTEpOglMT0dPUAkodXApLCAlcjgKKwlub3QJJXI4CisJbW92CSVyOCwgKHJwKQorCWluYwluCisJYWRkcHRyKAktOCwgdXApCisJYWRkcHRyKAktOCwgdnApCisJYWRkcHRyKAktOCwgcnApCisJam1wCUwoZTExKQorTChiMTApOglhZGQJJDIsIG4KKwlhZGRwdHIoCS0xNiwgdXApCisJYWRkcHRyKAktMTYsIHZwKQorCWFkZHB0cigJLTE2LCBycCkKKwlqbXAJTChlMTApCitMKGIwMSk6CUxPR09QCSh1cCksICVyOAorCW5vdAklcjgKKwltb3YJJXI4LCAocnApCisJZGVjCW4KKwlqeglMKHJldCkKKwlhZGRwdHIoCTgsIHVwKQorCWFkZHB0cigJOCwgdnApCisJYWRkcHRyKAk4LCBycCkKKworCUFMSUdOKDE2KQorTCh0b3ApOgltb3YJKHZwKSwgJXI4CitMKGIwMCk6CW1vdgk4KHZwKSwgJXI5CisJTE9HT1AJKHVwKSwgJXI4CisJbm90CSVyOAorCUxPR09QCTgodXApLCAlcjkKKwlub3QJJXI5CisJbW92CSVyOCwgKHJwKQorCW1vdgklcjksIDgocnApCitMKGUxMSk6CW1vdgkxNih2cCksICVyOAorTChlMTApOgltb3YJMjQodnApLCAlcjkKKwlhZGRwdHIoCTMyLCB2cCkKKwlMT0dPUAkxNih1cCksICVyOAorCW5vdAklcjgKKwlMT0dPUAkyNCh1cCksICVyOQorCWFkZHB0cigJMzIsIHVwKQorCW5vdAklcjkKKwltb3YJJXI4LCAxNihycCkKKwltb3YJJXI5LCAyNChycCkKKwlhZGRwdHIoCTMyLCBycCkKKwlzdWIJJDQsIG4KKwlqbnoJTCh0b3ApCisKK0wocmV0KToJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKKycpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlMi9sc2hpZnQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZTIvbHNoaWZ0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDE2YTcxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZTIvbHNoaWZ0LmFzbQpAQCAtMCwwICsxLDE0NSBAQAorZG5sICB4ODYtNjQgbXBuX2xzaGlmdCBvcHRpbWlzZWQgZm9yIENvbnJvZS9QZW5yeW4gYW5kIE5laGFsZW0uCisKK2RubCAgQ29weXJpZ2h0IDIwMDcsIDIwMDksIDIwMTEsIDIwMTIsIDIwMTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIEFNRCBLOCxLOQorQyBBTUQgSzEwCitDIEFNRCBiZDEKK0MgQU1EIGJkMgorQyBBTUQgYmQzCitDIEFNRCBiZDQKK0MgQU1EIHplbgorQyBBTUQgYm9iY2F0CitDIEFNRCBqYWd1YXIKK0MgSW50ZWwgUDQKK0MgSW50ZWwgY29yZTIJIDEuMzIKK0MgSW50ZWwgTkhNCSAxLjMwCShkcm9wcyB0byAyLjUgZm9yIG4gPiAyNTYpCitDIEludGVsIFNCUgorQyBJbnRlbCBJQlIKK0MgSW50ZWwgSFdMCitDIEludGVsIEJXTAorQyBJbnRlbCBTS0wKK0MgSW50ZWwgYXRvbQorQyBJbnRlbCBTTE0KK0MgVklBIG5hbm8KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywJYCVyZGknKQorZGVmaW5lKGB1cCcsCWAlcnNpJykKK2RlZmluZShgbicsCWAlcmR4JykKK2RlZmluZShgY250JywJYCVyY3gnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigxNikKK1BST0xPR1VFKG1wbl9sc2hpZnQpCisJRlVOQ19FTlRSWSg0KQorCisJeG9yCVIzMiglcmF4KSwgUjMyKCVyYXgpCisKKwl0ZXN0CSQxLCBSOChuKQorCWpueglMKGJ4MSkKK0woYngwKToJdGVzdAkkMiwgUjgobikKKwlqbnoJTChiMTApCisKK0woYjAwKToJbGVhCS04KHVwLG4sOCksIHVwCisJbGVhCTE2KHJwLG4sOCksIHJwCisJbW92CSh1cCksICVyMTAKKwltb3YJLTgodXApLCAlcjExCisJc2hsZAlSOChjbnQpLCAlcjEwLCAlcmF4CisJbW92CS0xNih1cCksICVyOAorCXNocgkkMiwgbgorCWptcAlMKDAwKQorCitMKGJ4MSk6CXRlc3QJJDIsIFI4KG4pCisJam56CUwoYjExKQorCitMKGIwMSk6CWxlYQktMTYodXAsbiw4KSwgdXAKKwlsZWEJOChycCxuLDgpLCBycAorCW1vdgk4KHVwKSwgJXI5CisJc2hsZAlSOChjbnQpLCAlcjksICVyYXgKKwlzaHIJJDIsIG4KKwlqeglMKDEpCisJbW92CSh1cCksICVyMTAKKwltb3YJLTgodXApLCAlcjExCisJam1wCUwoMDEpCisKK0woYjEwKToJbGVhCS0yNCh1cCxuLDgpLCB1cAorCWxlYQkocnAsbiw4KSwgcnAKKwltb3YJMTYodXApLCAlcjgKKwltb3YJOCh1cCksICVyOQorCXNobGQJUjgoY250KSwgJXI4LCAlcmF4CisJc2hyCSQyLCBuCisJanoJTCgyKQorCW1vdgkodXApLCAlcjEwCisJam1wCUwoMTApCisKKwlBTElHTigxNikKK0woYjExKToJbGVhCS0zMih1cCxuLDgpLCB1cAorCWxlYQktOChycCxuLDgpLCBycAorCW1vdgkyNCh1cCksICVyMTEKKwltb3YJMTYodXApLCAlcjgKKwltb3YJOCh1cCksICVyOQorCXNobGQJUjgoY250KSwgJXIxMSwgJXJheAorCXNocgkkMiwgbgorCWp6CUwoZW5kKQorCisJQUxJR04oMTYpCitMKHRvcCk6CXNobGQJUjgoY250KSwgJXI4LCAlcjExCisJbW92CSh1cCksICVyMTAKKwltb3YJJXIxMSwgKHJwKQorTCgxMCk6CXNobGQJUjgoY250KSwgJXI5LCAlcjgKKwltb3YJLTgodXApLCAlcjExCisJbW92CSVyOCwgLTgocnApCitMKDAxKToJc2hsZAlSOChjbnQpLCAlcjEwLCAlcjkKKwltb3YJLTE2KHVwKSwgJXI4CisJbW92CSVyOSwgLTE2KHJwKQorTCgwMCk6CXNobGQJUjgoY250KSwgJXIxMSwgJXIxMAorCW1vdgktMjQodXApLCAlcjkKKwlhZGQJJC0zMiwgdXAKKwltb3YJJXIxMCwgLTI0KHJwKQorCWFkZAkkLTMyLCBycAorCWRlYwluCisJam56CUwodG9wKQorCitMKGVuZCk6CXNobGQJUjgoY250KSwgJXI4LCAlcjExCisJbW92CSVyMTEsIChycCkKK0woMik6CXNobGQJUjgoY250KSwgJXI5LCAlcjgKKwltb3YJJXI4LCAtOChycCkKK0woMSk6CXNobAlSOChjbnQpLCAlcjkKKwltb3YJJXI5LCAtMTYocnApCisJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmUyL2xzaGlmdGMuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZTIvbHNoaWZ0Yy5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQyOGYxMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmUyL2xzaGlmdGMuYXNtCkBAIC0wLDAgKzEsMTU5IEBACitkbmwgIHg4Ni02NCBtcG5fbHNoaWZ0YyBvcHRpbWlzZWQgZm9yIENvbnJvZS9QZW5yeW4gYW5kIE5laGFsZW0uCisKK2RubCAgQ29weXJpZ2h0IDIwMDcsIDIwMDksIDIwMTEsIDIwMTIsIDIwMTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIEFNRCBLOCxLOQorQyBBTUQgSzEwCitDIEFNRCBiZDEKK0MgQU1EIGJkMgorQyBBTUQgYmQzCitDIEFNRCBiZDQKK0MgQU1EIHplbgorQyBBTUQgYm9iY2F0CitDIEFNRCBqYWd1YXIKK0MgSW50ZWwgUDQKK0MgSW50ZWwgY29yZTIJIDEuNTIKK0MgSW50ZWwgTkhNCSAxLjc4CShqdXN0IDIuMTUgZm9yIG4gPCAyNTYpCitDIEludGVsIFNCUgorQyBJbnRlbCBJQlIKK0MgSW50ZWwgSFdMCitDIEludGVsIEJXTAorQyBJbnRlbCBTS0wKK0MgSW50ZWwgYXRvbQorQyBJbnRlbCBTTE0KK0MgVklBIG5hbm8KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywJYCVyZGknKQorZGVmaW5lKGB1cCcsCWAlcnNpJykKK2RlZmluZShgbicsCWAlcmR4JykKK2RlZmluZShgY250JywJYCVyY3gnKQorCitDIFRPRE8KK0MgICogVGhpcyBydW5zIHBvb3JseSBvbiBOZWhhbGVtIGNvbXBhcmVkIHRvIHBsYWluIGxzaGlmdCwgaW4gcGFydGljdWxhciBmb3IKK0MgICAgbiA8IDI1Ni4KKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMTYpCitQUk9MT0dVRShtcG5fbHNoaWZ0YykKKwlGVU5DX0VOVFJZKDQpCisKKwl4b3IJUjMyKCVyYXgpLCBSMzIoJXJheCkKKworCXRlc3QJJDEsIFI4KG4pCisJam56CUwoYngxKQorTChieDApOgl0ZXN0CSQyLCBSOChuKQorCWpueglMKGIxMCkKKworTChiMDApOglsZWEJLTgodXAsbiw4KSwgdXAKKwlsZWEJMTYocnAsbiw4KSwgcnAKKwltb3YJKHVwKSwgJXIxMAorCW1vdgktOCh1cCksICVyMTEKKwlzaGxkCVI4KGNudCksICVyMTAsICVyYXgKKwltb3YJLTE2KHVwKSwgJXI4CisJc2hyCSQyLCBuCisJc2hsZAlSOChjbnQpLCAlcjExLCAlcjEwCisJam1wCUwoMDApCisKK0woYngxKToJdGVzdAkkMiwgUjgobikKKwlqbnoJTChiMTEpCisKK0woYjAxKToJbGVhCS0xNih1cCxuLDgpLCB1cAorCWxlYQk4KHJwLG4sOCksIHJwCisJbW92CTgodXApLCAlcjkKKwlzaGxkCVI4KGNudCksICVyOSwgJXJheAorCXNocgkkMiwgbgorCWp6CUwoMSkKKwltb3YJKHVwKSwgJXIxMAorCW1vdgktOCh1cCksICVyMTEKKwlzaGxkCVI4KGNudCksICVyMTAsICVyOQorCWptcAlMKDAxKQorCitMKGIxMCk6CWxlYQktMjQodXAsbiw4KSwgdXAKKwlsZWEJKHJwLG4sOCksIHJwCisJbW92CTE2KHVwKSwgJXI4CisJbW92CTgodXApLCAlcjkKKwlzaGxkCVI4KGNudCksICVyOCwgJXJheAorCXNocgkkMiwgbgorCWp6CUwoMikKKwltb3YJKHVwKSwgJXIxMAorCXNobGQJUjgoY250KSwgJXI5LCAlcjgKKwlqbXAJTCgxMCkKKworCUFMSUdOKDE2KQorTChiMTEpOglsZWEJLTMyKHVwLG4sOCksIHVwCisJbGVhCS04KHJwLG4sOCksIHJwCisJbW92CTI0KHVwKSwgJXIxMQorCW1vdgkxNih1cCksICVyOAorCW1vdgk4KHVwKSwgJXI5CisJc2hsZAlSOChjbnQpLCAlcjExLCAlcmF4CisJc2hyCSQyLCBuCisJanoJTChlbmQpCisKKwlBTElHTigxNikKK0wodG9wKToJc2hsZAlSOChjbnQpLCAlcjgsICVyMTEKKwltb3YJKHVwKSwgJXIxMAorCW5vdAklcjExCisJc2hsZAlSOChjbnQpLCAlcjksICVyOAorCW1vdgklcjExLCAocnApCitMKDEwKToJbW92CS04KHVwKSwgJXIxMQorCW5vdAklcjgKKwlzaGxkCVI4KGNudCksICVyMTAsICVyOQorCW1vdgklcjgsIC04KHJwKQorTCgwMSk6CW1vdgktMTYodXApLCAlcjgKKwlub3QJJXI5CisJc2hsZAlSOChjbnQpLCAlcjExLCAlcjEwCisJbW92CSVyOSwgLTE2KHJwKQorTCgwMCk6CW1vdgktMjQodXApLCAlcjkKKwlub3QJJXIxMAorCWFkZAkkLTMyLCB1cAorCW1vdgklcjEwLCAtMjQocnApCisJYWRkCSQtMzIsIHJwCisJZGVjCW4KKwlqbnoJTCh0b3ApCisKK0woZW5kKToJc2hsZAlSOChjbnQpLCAlcjgsICVyMTEKKwlub3QJJXIxMQorCW1vdgklcjExLCAocnApCitMKDIpOglzaGxkCVI4KGNudCksICVyOSwgJXI4CisJbm90CSVyOAorCW1vdgklcjgsIC04KHJwKQorTCgxKToJc2hsCVI4KGNudCksICVyOQorCW5vdAklcjkKKwltb3YJJXI5LCAtMTYocnApCisJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmUyL211bF9iYXNlY2FzZS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlMi9tdWxfYmFzZWNhc2UuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNmJlODUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlMi9tdWxfYmFzZWNhc2UuYXNtCkBAIC0wLDAgKzEsOTc1IEBACitkbmwgIFg4Ni02NCBtcG5fbXVsX2Jhc2VjYXNlIG9wdGltaXNlZCBmb3IgSW50ZWwgTmVoYWxlbS9XZXN0bWVyZS4KK2RubCAgSXQgYWxzbyBzZWVtcyBnb29kIGZvciBDb25yb2UvV29sZmRhbGUuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqw7ZybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAwOCwgMjAxMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgY3ljbGVzL2xpbWIJbXVsXzEJCW11bF8yCQltdWxfMwkJYWRkbXVsXzIKK0MgQU1EIEs4LEs5CitDIEFNRCBLMTAKK0MgQU1EIGJ1bGwKK0MgQU1EIHBpbGUKK0MgQU1EIHN0ZWFtCitDIEFNRCBib2JjYXQKK0MgQU1EIGphZ3VhcgorQyBJbnRlbCBQNAorQyBJbnRlbCBjb3JlCSA0LjAJCSA0LjAJCSAtCQk0LjE4LTQuMjUKK0MgSW50ZWwgTkhNCSAzLjc1CQkgMy44CQkgLQkJNC4wNi00LjIKK0MgSW50ZWwgU0JSCitDIEludGVsIElCUgorQyBJbnRlbCBIV0wKK0MgSW50ZWwgQldMCitDIEludGVsIGF0b20KK0MgVklBIG5hbm8KKworQyBUaGUgaW5uZXIgbG9vcHMgb2YgdGhpcyBjb2RlIGFyZSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgYSBjb2RlIGdlbmVyYXRpb24gYW5kCitDIG9wdGltaXNhdGlvbiB0b29sIHN1aXRlIHdyaXR0ZW4gYnkgRGF2aWQgSGFydmV5IGFuZCBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK0MgQ29kZSBzdHJ1Y3R1cmU6CitDCitDCitDICAgICAgICAgICAgICAgbV8xKDBtNCkgICAgICAgIG1fMSgxbTQpICAgICAgICBtXzEoMm00KSAgICAgICAgbV8xKDNtNCkKK0MgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8CitDICAgICAgICBtXzIoMG00KSAgfCAgICAgbV8yKDFtNCkgIHwgICAgIG1fMigybTQpICB8ICAgICBtXzIoM200KSAgfAorQyAgICAgICAgICAgfCAgICAgIC8gICAgICAgIHwgICAgICAvICAgICAgICB8ICAgICAgLyAgICAgICAgfCAgICAgIC8KK0MgICAgICAgICAgIHwgICAgIC8gICAgICAgICB8ICAgICAvICAgICAgICAgfCAgICAgLyAgICAgICAgIHwgICAgIC8KK0MgICAgICAgICAgIHwgICAgLyAgICAgICAgICB8ICAgIC8gICAgICAgICAgfCAgICAvICAgICAgICAgIHwgICAgLworQyAgICAgICAgICBcfC8gfC9fICAgICAgICAgXHwvIHwvXyAgICAgICAgIFx8LyB8L18gICAgICAgICBcfC8gfC9fCitDICAgICAgICAgICAgIF9fX19fICAgICAgICAgICBfX19fXyAgICAgICAgICAgX19fX18gICAgICAgICAgIF9fX19fCitDICAgICAgICAgICAgLyAgICAgXCAgICAgICAgIC8gICAgIFwgICAgICAgICAvICAgICBcICAgICAgICAgLyAgICAgXAorQyAgICAgICAgICBcfC8gICAgICB8ICAgICAgXHwvICAgICAgfCAgICAgIFx8LyAgICAgIHwgICAgICBcfC8gICAgICB8CitDICAgICAgICBhbV8yKDBtNCkgIHwgICAgYW1fMigxbTQpICB8ICAgIGFtXzIoMm00KSAgfCAgICBhbV8yKDNtNCkgIHwKK0MgICAgICAgICAgIFwgICAgICAvfFwgICAgICBcICAgICAgL3xcICAgICAgXCAgICAgIC98XCAgICAgIFwgICAgICAvfFwKK0MgICAgICAgICAgICBcX19fX18vICAgICAgICAgXF9fX19fLyAgICAgICAgIFxfX19fXy8gICAgICAgICBcX19fX18vCisKK0MgVE9ETworQyAgKiBUdW5lLiAgTm9uZSBkb25lIHNvIGZhci4KK0MgICogQ3VycmVudGx5IDI2ODcgYnl0ZXMsIG1ha2luZyBpdCBzbWFsbGVyIHdvdWxkIGJlIG5pY2UuCitDICAqIEltcGxlbWVudCBzb21lIGJhc2VjYXNlcywgc2F5IGZvciB1biA8IDQuCitDICAqIFRyeSB6ZXJvaW5nIHdpdGggeG9yIGluIG0yIGxvb3BzLgorQyAgKiBUcnkgcmUtcm9sbGluZyB0aGUgbTIgbG9vcHMgdG8gYXZvaWQgdGhlIGN1cnJlbnQgOSBpbnNuIGNvZGUgZHVwbGljYXRpb24KK0MgICAgYmV0d2VlbiBsb29wIGhlYWRlciBhbmQgd2luZC1kb3duIGNvZGUuCitDICAqIENvbnNpZGVyIGFkYyByZWcscmVnIGluc3RlYWQgb2YgYWRjICQwLHJlZyBpbiBtMiBsb29wcy4gIFRoaXMgc2F2ZSBhIGJ5dGUuCisKK0MgV2hlbiBwbGF5aW5nIHdpdGggcG9pbnRlcnMsIHNldCB0aGlzIHRvICQyIHRvIGZhbGwgYmFjayB0byBjb25zZXJ2YXRpdmUKK0MgaW5kZXhpbmcgaW4gd2luZC1kb3duIGNvZGUuCitkZWZpbmUoYEknLGAkMScpCisKK0MgRGVmaW5lIHRoaXMgdG8gJDEgdG8gdXNlIGxhdGUgbG9vcCBpbmRleCB2YXJpYWJsZSBhcyB6ZXJvLCAkMiB0byB1c2UgYW4KK0MgZXhwbGljaXQgJDAuCitkZWZpbmUoYFonLGAkMScpCisKK2RlZmluZShgcnAnLCAgICAgICBgJXJkaScpCitkZWZpbmUoYHVwJywgICAgICAgYCVyc2knKQorZGVmaW5lKGB1bl9wYXJhbScsIGAlcmR4JykKK2RlZmluZShgdnBfcGFyYW0nLCBgJXJjeCcpCUMgRklYTUUgcmVhbGxvY2F0ZSB2cCB0byByY3ggYnV0IHdhdGNoIHBlcmZvcm1hbmNlIQorZGVmaW5lKGB2bl9wYXJhbScsIGAlcjgnKQorCitkZWZpbmUoYHVuJywgICAgICAgYCVyOScpCitkZWZpbmUoYHZuJywgICAgICAgYCglcnNwKScpCisKK2RlZmluZShgdjAnLCAgICAgICBgJXIxMCcpCitkZWZpbmUoYHYxJywgICAgICAgYCVyMTEnKQorZGVmaW5lKGB3MCcsICAgICAgIGAlcmJ4JykKK2RlZmluZShgdzEnLCAgICAgICBgJXJjeCcpCitkZWZpbmUoYHcyJywgICAgICAgYCVyYnAnKQorZGVmaW5lKGB3MycsICAgICAgIGAlcjEyJykKK2RlZmluZShgaScsICAgICAgICBgJXIxMycpCitkZWZpbmUoYHZwJywgICAgICAgYCVyMTQnKQorCitkZWZpbmUoYFgwJywgICAgICAgYCVyOCcpCitkZWZpbmUoYFgxJywgICAgICAgYCVyMTUnKQorCitDIHJheCByYnggcmN4IHJkeCByZGkgcnNpIHJicCByOCByOSByMTAgcjExIHIxMiByMTMgcjE0IHIxNQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitkZWZpbmUoYEFMSUdOeCcsIGBBTElHTigxNiknKQorCitkZWZpbmUoYE4nLCA4NSkKK2lmZGVmKGBOJywsYGRlZmluZShgTicsMCknKQorZGVmaW5lKGBNT1YnLCBgaWZlbHNlKGV2YWwoTiAmICQzKSwwLGBtb3YJJDEsICQyJyxgbGVhCSgkMSksICQyJyknKQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigzMikKK1BST0xPR1VFKG1wbl9tdWxfYmFzZWNhc2UpCisJRlVOQ19FTlRSWSg0KQorSUZET1MoYAltb3YJNTYoJXJzcCksICVyOGQJJykKKwltb3YJKHVwKSwgJXJheAkJQyBzaGFyZWQgZm9yIG11bF8xIGFuZCBtdWxfMgorCXB1c2gJJXJieAorCXB1c2gJJXJicAorCXB1c2gJJXIxMgorCXB1c2gJJXIxMworCXB1c2gJJXIxNAorCisJbW92CSh2cF9wYXJhbSksIHYwCQlDIHNoYXJlZCBmb3IgbXVsXzEgYW5kIG11bF8yCisKKwl4b3IJdW4sIHVuCisJc3ViCXVuX3BhcmFtLCB1bgkJQyB1biA9IC11bl9wYXJhbQorCisJbGVhCSh1cCx1bl9wYXJhbSw4KSwgdXAKKwlsZWEJKHJwLHVuX3BhcmFtLDgpLCBycAorCisJbXVsCXYwCQkJQyBzaGFyZWQgZm9yIG11bF8xIGFuZCBtdWxfMgorCisJdGVzdAkkMSwgUjgodm5fcGFyYW0pCisJanoJTChtMikKKworCWxlYQk4KHZwX3BhcmFtKSwgdnAJCUMgRklYTUU6IGRlbGF5IHVudGlsIGtub3duIG5lZWRlZAorCisJdGVzdAkkMSwgUjgodW4pCisJam56CUwobTF4MSkKKworTChtMXgwKTp0ZXN0CSQyLCBSOCh1bikKKwlqbnoJTChtMXMyKQorCitMKG0xczApOgorCWxlYQkodW4pLCBpCisJbW92CSVyYXgsIChycCx1biw4KQorCW1vdgk4KHVwLHVuLDgpLCAlcmF4CisJbW92CSVyZHgsIHcwCQlDIEZJWE1FOiBVc2UgbGVhPworCWxlYQlMKGRvX2FtMCkoJXJpcCksICVyYnAKKwlqbXAJTChtMWUwKQorCitMKG0xczIpOgorCWxlYQkyKHVuKSwgaQorCW1vdgklcmF4LCAocnAsdW4sOCkKKwltb3YJOCh1cCx1biw4KSwgJXJheAorCW1vdgklcmR4LCB3MAkJQyBGSVhNRTogVXNlIGxlYT8KKwltdWwJdjAKKwlsZWEJTChkb19hbTIpKCVyaXApLCAlcmJwCisJdGVzdAlpLCBpCisJam56CUwobTFlMikKKwlhZGQJJXJheCwgdzAKKwlhZGMJJDAsICVyZHgKKwltb3YJdzAsIEkoLTgocnApLDgocnAsdW4sOCkpCisJbW92CSVyZHgsIEkoKHJwKSwxNihycCx1biw4KSkKKwlqbXAJTChyZXQyKQorCitMKG0xeDEpOnRlc3QJJDIsIFI4KHVuKQorCWp6CUwobTFzMykKKworTChtMXMxKToKKwlsZWEJMSh1biksIGkKKwltb3YJJXJheCwgKHJwLHVuLDgpCisJdGVzdAlpLCBpCisJanoJTCgxKQorCW1vdgk4KHVwLHVuLDgpLCAlcmF4CisJbW92CSVyZHgsIHcxCQlDIEZJWE1FOiBVc2UgbGVhPworCWxlYQlMKGRvX2FtMSkoJXJpcCksICVyYnAKKwlqbXAJTChtMWUxKQorTCgxKToJbW92CSVyZHgsIEkoKHJwKSw4KHJwLHVuLDgpKQorCWptcAlMKHJldDIpCisKK0wobTFzMyk6CisJbGVhCS0xKHVuKSwgaQorCW1vdgklcmF4LCAocnAsdW4sOCkKKwltb3YJOCh1cCx1biw4KSwgJXJheAorCW1vdgklcmR4LCB3MQkJQyBGSVhNRTogVXNlIGxlYT8KKwlsZWEJTChkb19hbTMpKCVyaXApLCAlcmJwCisJam1wCUwobTFlMykKKworCUFMSUdOeAorTChtMXRvcCk6CisJbXVsCXYwCisJbW92CXcxLCAtMTYocnAsaSw4KQorTChtMWUyKTp4b3IJUjMyKHcxKSwgUjMyKHcxKQorCWFkZAklcmF4LCB3MAorCW1vdgkodXAsaSw4KSwgJXJheAorCWFkYwklcmR4LCB3MQorCW1vdgl3MCwgLTgocnAsaSw4KQorTChtMWUxKTp4b3IJUjMyKHcwKSwgUjMyKHcwKQorCW11bAl2MAorCWFkZAklcmF4LCB3MQorCW1vdgk4KHVwLGksOCksICVyYXgKKwlhZGMJJXJkeCwgdzAKKwltb3YJdzEsIChycCxpLDgpCitMKG0xZTApOnhvcglSMzIodzEpLCBSMzIodzEpCisJbXVsCXYwCisJYWRkCSVyYXgsIHcwCisJbW92CTE2KHVwLGksOCksICVyYXgKKwlhZGMJJXJkeCwgdzEKKwltb3YJdzAsIDgocnAsaSw4KQorTChtMWUzKTp4b3IJUjMyKHcwKSwgUjMyKHcwKQorCW11bAl2MAorCWFkZAklcmF4LCB3MQorCW1vdgkyNCh1cCxpLDgpLCAlcmF4CisJYWRjCSVyZHgsIHcwCisJYWRkCSQ0LCBpCisJanMJTChtMXRvcCkKKworCW11bAl2MAorCW1vdgl3MSwgSSgtMTYocnApLC0xNihycCxpLDgpKQorCWFkZAklcmF4LCB3MAorCWFkYwkkMCwgJXJkeAorCW1vdgl3MCwgSSgtOChycCksLTgocnAsaSw4KSkKKwltb3YJJXJkeCwgSSgocnApLChycCxpLDgpKQorCisJZGVjCXZuX3BhcmFtCisJanoJTChyZXQyKQorCWxlYQktOChycCksIHJwCisJam1wCSolcmJwCisKK0wobTIpOgorCW1vdgk4KHZwX3BhcmFtKSwgdjEKKwlsZWEJMTYodnBfcGFyYW0pLCB2cAlDIEZJWE1FOiBkZWxheSB1bnRpbCBrbm93biBuZWVkZWQKKworCXRlc3QJJDEsIFI4KHVuKQorCWpueglMKGJ4MSkKKworTChieDApOgl0ZXN0CSQyLCBSOCh1bikKKwlqbnoJTChiMTApCisKK0woYjAwKToJbGVhCSh1biksIGkKKwltb3YJJXJheCwgKHJwLHVuLDgpCisJbW92CSVyZHgsIHcxCQlDIEZJWE1FOiBVc2UgbGVhPworCW1vdgkodXAsdW4sOCksICVyYXgKKwltb3YJJDAsIFIzMih3MikKKwlqbXAJTChtMmUwKQorCitMKGIxMCk6CWxlYQktMih1biksIGkKKwltb3YJJXJheCwgdzIJCUMgRklYTUU6IFVzZSBsZWE/CisJbW92CSh1cCx1biw4KSwgJXJheAorCW1vdgklcmR4LCB3MwkJQyBGSVhNRTogVXNlIGxlYT8KKwltb3YJJDAsIFIzMih3MCkKKwlqbXAJTChtMmUyKQorCitMKGJ4MSk6CXRlc3QJJDIsIFI4KHVuKQorCWp6CUwoYjExKQorCitMKGIwMSk6CWxlYQkxKHVuKSwgaQorCW1vdgklcmF4LCAocnAsdW4sOCkKKwltb3YJKHVwLHVuLDgpLCAlcmF4CisJbW92CSVyZHgsIHcwCQlDIEZJWE1FOiBVc2UgbGVhPworCW1vdgkkMCwgUjMyKHcxKQorCWptcAlMKG0yZTEpCisKK0woYjExKToJbGVhCS0xKHVuKSwgaQorCW1vdgklcmF4LCB3MQkJQyBGSVhNRTogVXNlIGxlYT8KKwltb3YJKHVwLHVuLDgpLCAlcmF4CisJbW92CSVyZHgsIHcyCQlDIEZJWE1FOiBVc2UgbGVhPworCW1vdgkkMCwgUjMyKHczKQorCWptcAlMKG0yZTMpCisKKwlBTElHTngKK0wobTJ0b3AwKToKKwltdWwJdjAKKwlhZGQJJXJheCwgdzMKKwltb3YJLTgodXAsaSw4KSwgJXJheAorCW1vdgl3MywgLTgocnAsaSw4KQorCWFkYwklcmR4LCB3MAorCWFkYwkkMCwgUjMyKHcxKQorCW11bAl2MQorCWFkZAklcmF4LCB3MAorCWFkYwklcmR4LCB3MQorCW1vdgkkMCwgUjMyKHcyKQorCW1vdgkodXAsaSw4KSwgJXJheAorCW11bAl2MAorCWFkZAklcmF4LCB3MAorCW1vdgl3MCwgKHJwLGksOCkKKwlhZGMJJXJkeCwgdzEKKwltb3YJKHVwLGksOCksICVyYXgKKwlhZGMJJDAsIFIzMih3MikKK0wobTJlMCk6bXVsCXYxCisJYWRkCSVyYXgsIHcxCisJYWRjCSVyZHgsIHcyCisJbW92CTgodXAsaSw4KSwgJXJheAorCW11bAl2MAorCW1vdgkkMCwgUjMyKHczKQorCWFkZAklcmF4LCB3MQorCWFkYwklcmR4LCB3MgorCWFkYwkkMCwgUjMyKHczKQorCW1vdgk4KHVwLGksOCksICVyYXgKKwltdWwJdjEKKwlhZGQJJXJheCwgdzIKKwltb3YJdzEsIDgocnAsaSw4KQorCWFkYwklcmR4LCB3MworCW1vdgkkMCwgUjMyKHcwKQorCW1vdgkxNih1cCxpLDgpLCAlcmF4CisJbXVsCXYwCisJYWRkCSVyYXgsIHcyCisJbW92CTE2KHVwLGksOCksICVyYXgKKwlhZGMJJXJkeCwgdzMKKwlhZGMJJDAsIFIzMih3MCkKKwltdWwJdjEKKwltb3YJJDAsIFIzMih3MSkKKwlhZGQJJXJheCwgdzMKKwltb3YJMjQodXAsaSw4KSwgJXJheAorCW1vdgl3MiwgMTYocnAsaSw4KQorCWFkYwklcmR4LCB3MAorCWFkZAkkNCwgaQorCWpzCUwobTJ0b3AwKQorCisJbXVsCXYwCisJYWRkCSVyYXgsIHczCisJbW92CUkoLTgodXApLC04KHVwLGksOCkpLCAlcmF4CisJbW92CXczLCBJKC04KHJwKSwtOChycCxpLDgpKQorCWFkYwklcmR4LCB3MAorCWFkYwlSMzIodzEpLCBSMzIodzEpCisJbXVsCXYxCisJYWRkCSVyYXgsIHcwCisJYWRjCSVyZHgsIHcxCisJbW92CXcwLCBJKChycCksKHJwLGksOCkpCisJbW92CXcxLCBJKDgocnApLDgocnAsaSw4KSkKKworCWFkZAkkLTIsIHZuX3BhcmFtCisJanoJTChyZXQyKQorCitMKGRvX2FtMCk6CisJcHVzaAklcjE1CisJcHVzaAl2bl9wYXJhbQorCitMKG9sbzApOgorCW1vdgkodnApLCB2MAorCW1vdgk4KHZwKSwgdjEKKwlsZWEJMTYodnApLCB2cAorCWxlYQkxNihycCksIHJwCisJbW92CSh1cCx1biw4KSwgJXJheAorQwlsZWEJMCh1biksIGkKKwltb3YJdW4sIGkKKwltdWwJdjAKKwltb3YJJXJheCwgWDAKKwltb3YJKHVwLHVuLDgpLCAlcmF4CisJTU9WKAklcmR4LCBYMSwgMikKKwltdWwJdjEKKwlNT1YoCSVyZHgsIHcwLCA0KQorCW1vdgkocnAsdW4sOCksIHcyCisJbW92CSVyYXgsIHczCisJam1wCUwobG8wKQorCisJQUxJR054CitMKGFtMnRvcDApOgorCW11bAl2MQorCWFkZAl3MCwgdzEKKwlhZGMJJXJheCwgdzIKKwltb3YJKHVwLGksOCksICVyYXgKKwlNT1YoCSVyZHgsIHczLCAxKQorCWFkYwkkMCwgdzMKKwltdWwJdjAKKwlhZGQJdzEsIFgxCisJbW92CVgxLCAtOChycCxpLDgpCisJYWRjCSVyYXgsIFgwCisJTU9WKAklcmR4LCBYMSwgMikKKwlhZGMJJDAsIFgxCisJbW92CSh1cCxpLDgpLCAlcmF4CisJbXVsCXYxCisJTU9WKAklcmR4LCB3MCwgNCkKKwltb3YJKHJwLGksOCksIHcxCisJYWRkCXcxLCB3MgorCWFkYwklcmF4LCB3MworCWFkYwkkMCwgdzAKK0wobG8wKToJbW92CTgodXAsaSw4KSwgJXJheAorCW11bAl2MAorCWFkZAl3MiwgWDAKKwlhZGMJJXJheCwgWDEKKwltb3YJWDAsIChycCxpLDgpCisJTU9WKAklcmR4LCBYMCwgOCkKKwlhZGMJJDAsIFgwCisJbW92CTgodXAsaSw4KSwgJXJheAorCW1vdgk4KHJwLGksOCksIHcyCisJbXVsCXYxCisJYWRkCXcyLCB3MworCWFkYwklcmF4LCB3MAorCU1PVigJJXJkeCwgdzEsIDE2KQorCWFkYwkkMCwgdzEKKwltb3YJMTYodXAsaSw4KSwgJXJheAorCW11bAl2MAorCWFkZAl3MywgWDEKKwltb3YJWDEsIDgocnAsaSw4KQorCWFkYwklcmF4LCBYMAorCU1PVigJJXJkeCwgWDEsIDMyKQorCW1vdgkxNihycCxpLDgpLCB3MworCWFkYwkkMCwgWDEKKwltb3YJMTYodXAsaSw4KSwgJXJheAorCW11bAl2MQorCWFkZAl3MywgdzAKKwlNT1YoCSVyZHgsIHcyLCA2NCkKKwlhZGMJJXJheCwgdzEKKwltb3YJMjQodXAsaSw4KSwgJXJheAorCWFkYwkkMCwgdzIKKwltdWwJdjAKKwlhZGQJdzAsIFgwCisJbW92CVgwLCAxNihycCxpLDgpCisJTU9WKAklcmR4LCBYMCwgMTI4KQorCWFkYwklcmF4LCBYMQorCW1vdgkyNCh1cCxpLDgpLCAlcmF4CisJbW92CTI0KHJwLGksOCksIHcwCisJYWRjCSQwLCBYMAorCWFkZAkkNCwgaQorCWpuYwlMKGFtMnRvcDApCisKKwltdWwJdjEKKwlhZGQJdzAsIHcxCisJYWRjCSVyYXgsIHcyCisJYWRjCVooaSwkMCksICVyZHgKKwlhZGQJdzEsIFgxCisJYWRjCVooaSwkMCksIFgwCisJbW92CVgxLCBJKC04KHJwKSwtOChycCxpLDgpKQorCWFkZAl3MiwgWDAKKwltb3YJWDAsIEkoKHJwKSwocnAsaSw4KSkKKwlhZGMJWihpLCQwKSwgJXJkeAorCW1vdgklcmR4LCBJKDgocnApLDgocnAsaSw4KSkKKworCWFkZGwJJC0yLCB2bgorCWpueglMKG9sbzApCisKK0wocmV0KToJcG9wCSVyYXgKKwlwb3AJJXIxNQorTChyZXQyKTpwb3AJJXIxNAorCXBvcAklcjEzCisJcG9wCSVyMTIKKwlwb3AJJXJicAorCXBvcAklcmJ4CisJRlVOQ19FWElUKCkKKwlyZXQKKworCisJQUxJR054CitMKG0ydG9wMSk6CisJbXVsCXYwCisJYWRkCSVyYXgsIHczCisJbW92CS04KHVwLGksOCksICVyYXgKKwltb3YJdzMsIC04KHJwLGksOCkKKwlhZGMJJXJkeCwgdzAKKwlhZGMJJDAsIFIzMih3MSkKK0wobTJlMSk6bXVsCXYxCisJYWRkCSVyYXgsIHcwCisJYWRjCSVyZHgsIHcxCisJbW92CSQwLCBSMzIodzIpCisJbW92CSh1cCxpLDgpLCAlcmF4CisJbXVsCXYwCisJYWRkCSVyYXgsIHcwCisJbW92CXcwLCAocnAsaSw4KQorCWFkYwklcmR4LCB3MQorCW1vdgkodXAsaSw4KSwgJXJheAorCWFkYwkkMCwgUjMyKHcyKQorCW11bAl2MQorCWFkZAklcmF4LCB3MQorCWFkYwklcmR4LCB3MgorCW1vdgk4KHVwLGksOCksICVyYXgKKwltdWwJdjAKKwltb3YJJDAsIFIzMih3MykKKwlhZGQJJXJheCwgdzEKKwlhZGMJJXJkeCwgdzIKKwlhZGMJJDAsIFIzMih3MykKKwltb3YJOCh1cCxpLDgpLCAlcmF4CisJbXVsCXYxCisJYWRkCSVyYXgsIHcyCisJbW92CXcxLCA4KHJwLGksOCkKKwlhZGMJJXJkeCwgdzMKKwltb3YJJDAsIFIzMih3MCkKKwltb3YJMTYodXAsaSw4KSwgJXJheAorCW11bAl2MAorCWFkZAklcmF4LCB3MgorCW1vdgkxNih1cCxpLDgpLCAlcmF4CisJYWRjCSVyZHgsIHczCisJYWRjCSQwLCBSMzIodzApCisJbXVsCXYxCisJbW92CSQwLCBSMzIodzEpCisJYWRkCSVyYXgsIHczCisJbW92CTI0KHVwLGksOCksICVyYXgKKwltb3YJdzIsIDE2KHJwLGksOCkKKwlhZGMJJXJkeCwgdzAKKwlhZGQJJDQsIGkKKwlqcwlMKG0ydG9wMSkKKworCW11bAl2MAorCWFkZAklcmF4LCB3MworCW1vdglJKC04KHVwKSwtOCh1cCxpLDgpKSwgJXJheAorCW1vdgl3MywgSSgtOChycCksLTgocnAsaSw4KSkKKwlhZGMJJXJkeCwgdzAKKwlhZGMJUjMyKHcxKSwgUjMyKHcxKQorCW11bAl2MQorCWFkZAklcmF4LCB3MAorCWFkYwklcmR4LCB3MQorCW1vdgl3MCwgSSgocnApLChycCxpLDgpKQorCW1vdgl3MSwgSSg4KHJwKSw4KHJwLGksOCkpCisKKwlhZGQJJC0yLCB2bl9wYXJhbQorCWp6CUwocmV0MikKKworTChkb19hbTEpOgorCXB1c2gJJXIxNQorCXB1c2gJdm5fcGFyYW0KKworTChvbG8xKToKKwltb3YJKHZwKSwgdjAKKwltb3YJOCh2cCksIHYxCisJbGVhCTE2KHZwKSwgdnAKKwlsZWEJMTYocnApLCBycAorCW1vdgkodXAsdW4sOCksICVyYXgKKwlsZWEJMSh1biksIGkKKwltdWwJdjAKKwltb3YJJXJheCwgWDEKKwlNT1YoCSVyZHgsIFgwLCAxMjgpCisJbW92CSh1cCx1biw4KSwgJXJheAorCW1vdgkocnAsdW4sOCksIHcxCisJbXVsCXYxCisJbW92CSVyYXgsIHcyCisJbW92CTgodXAsdW4sOCksICVyYXgKKwlNT1YoCSVyZHgsIHczLCAxKQorCWptcAlMKGxvMSkKKworCUFMSUdOeAorTChhbTJ0b3AxKToKKwltdWwJdjEKKwlhZGQJdzAsIHcxCisJYWRjCSVyYXgsIHcyCisJbW92CSh1cCxpLDgpLCAlcmF4CisJTU9WKAklcmR4LCB3MywgMSkKKwlhZGMJJDAsIHczCitMKGxvMSk6CW11bAl2MAorCWFkZAl3MSwgWDEKKwltb3YJWDEsIC04KHJwLGksOCkKKwlhZGMJJXJheCwgWDAKKwlNT1YoCSVyZHgsIFgxLCAyKQorCWFkYwkkMCwgWDEKKwltb3YJKHVwLGksOCksICVyYXgKKwltdWwJdjEKKwlNT1YoCSVyZHgsIHcwLCA0KQorCW1vdgkocnAsaSw4KSwgdzEKKwlhZGQJdzEsIHcyCisJYWRjCSVyYXgsIHczCisJYWRjCSQwLCB3MAorCW1vdgk4KHVwLGksOCksICVyYXgKKwltdWwJdjAKKwlhZGQJdzIsIFgwCisJYWRjCSVyYXgsIFgxCisJbW92CVgwLCAocnAsaSw4KQorCU1PVigJJXJkeCwgWDAsIDgpCisJYWRjCSQwLCBYMAorCW1vdgk4KHVwLGksOCksICVyYXgKKwltb3YJOChycCxpLDgpLCB3MgorCW11bAl2MQorCWFkZAl3MiwgdzMKKwlhZGMJJXJheCwgdzAKKwlNT1YoCSVyZHgsIHcxLCAxNikKKwlhZGMJJDAsIHcxCisJbW92CTE2KHVwLGksOCksICVyYXgKKwltdWwJdjAKKwlhZGQJdzMsIFgxCisJbW92CVgxLCA4KHJwLGksOCkKKwlhZGMJJXJheCwgWDAKKwlNT1YoCSVyZHgsIFgxLCAzMikKKwltb3YJMTYocnAsaSw4KSwgdzMKKwlhZGMJJDAsIFgxCisJbW92CTE2KHVwLGksOCksICVyYXgKKwltdWwJdjEKKwlhZGQJdzMsIHcwCisJTU9WKAklcmR4LCB3MiwgNjQpCisJYWRjCSVyYXgsIHcxCisJbW92CTI0KHVwLGksOCksICVyYXgKKwlhZGMJJDAsIHcyCisJbXVsCXYwCisJYWRkCXcwLCBYMAorCW1vdglYMCwgMTYocnAsaSw4KQorCU1PVigJJXJkeCwgWDAsIDEyOCkKKwlhZGMJJXJheCwgWDEKKwltb3YJMjQodXAsaSw4KSwgJXJheAorCW1vdgkyNChycCxpLDgpLCB3MAorCWFkYwkkMCwgWDAKKwlhZGQJJDQsIGkKKwlqbmMJTChhbTJ0b3AxKQorCisJbXVsCXYxCisJYWRkCXcwLCB3MQorCWFkYwklcmF4LCB3MgorCWFkYwlaKGksJDApLCAlcmR4CisJYWRkCXcxLCBYMQorCWFkYwlaKGksJDApLCBYMAorCW1vdglYMSwgSSgtOChycCksLTgocnAsaSw4KSkKKwlhZGQJdzIsIFgwCisJbW92CVgwLCBJKChycCksKHJwLGksOCkpCisJYWRjCVooaSwkMCksICVyZHgKKwltb3YJJXJkeCwgSSg4KHJwKSw4KHJwLGksOCkpCisKKwlhZGRsCSQtMiwgdm4KKwlqbnoJTChvbG8xKQorCisJcG9wCSVyYXgKKwlwb3AJJXIxNQorCXBvcAklcjE0CisJcG9wCSVyMTMKKwlwb3AJJXIxMgorCXBvcAklcmJwCisJcG9wCSVyYngKKwlGVU5DX0VYSVQoKQorCXJldAorCisKKwlBTElHTngKK0wobTJ0b3AyKToKKwltdWwJdjAKKwlhZGQJJXJheCwgdzMKKwltb3YJLTgodXAsaSw4KSwgJXJheAorCW1vdgl3MywgLTgocnAsaSw4KQorCWFkYwklcmR4LCB3MAorCWFkYwkkMCwgUjMyKHcxKQorCW11bAl2MQorCWFkZAklcmF4LCB3MAorCWFkYwklcmR4LCB3MQorCW1vdgkkMCwgUjMyKHcyKQorCW1vdgkodXAsaSw4KSwgJXJheAorCW11bAl2MAorCWFkZAklcmF4LCB3MAorCW1vdgl3MCwgKHJwLGksOCkKKwlhZGMJJXJkeCwgdzEKKwltb3YJKHVwLGksOCksICVyYXgKKwlhZGMJJDAsIFIzMih3MikKKwltdWwJdjEKKwlhZGQJJXJheCwgdzEKKwlhZGMJJXJkeCwgdzIKKwltb3YJOCh1cCxpLDgpLCAlcmF4CisJbXVsCXYwCisJbW92CSQwLCBSMzIodzMpCisJYWRkCSVyYXgsIHcxCisJYWRjCSVyZHgsIHcyCisJYWRjCSQwLCBSMzIodzMpCisJbW92CTgodXAsaSw4KSwgJXJheAorCW11bAl2MQorCWFkZAklcmF4LCB3MgorCW1vdgl3MSwgOChycCxpLDgpCisJYWRjCSVyZHgsIHczCisJbW92CSQwLCBSMzIodzApCisJbW92CTE2KHVwLGksOCksICVyYXgKKwltdWwJdjAKKwlhZGQJJXJheCwgdzIKKwltb3YJMTYodXAsaSw4KSwgJXJheAorCWFkYwklcmR4LCB3MworCWFkYwkkMCwgUjMyKHcwKQorTChtMmUyKTptdWwJdjEKKwltb3YJJDAsIFIzMih3MSkKKwlhZGQJJXJheCwgdzMKKwltb3YJMjQodXAsaSw4KSwgJXJheAorCW1vdgl3MiwgMTYocnAsaSw4KQorCWFkYwklcmR4LCB3MAorCWFkZAkkNCwgaQorCWpzCUwobTJ0b3AyKQorCisJbXVsCXYwCisJYWRkCSVyYXgsIHczCisJbW92CUkoLTgodXApLC04KHVwLGksOCkpLCAlcmF4CisJbW92CXczLCBJKC04KHJwKSwtOChycCxpLDgpKQorCWFkYwklcmR4LCB3MAorCWFkYwlSMzIodzEpLCBSMzIodzEpCisJbXVsCXYxCisJYWRkCSVyYXgsIHcwCisJYWRjCSVyZHgsIHcxCisJbW92CXcwLCBJKChycCksKHJwLGksOCkpCisJbW92CXcxLCBJKDgocnApLDgocnAsaSw4KSkKKworCWFkZAkkLTIsIHZuX3BhcmFtCisJanoJTChyZXQyKQorCitMKGRvX2FtMik6CisJcHVzaAklcjE1CisJcHVzaAl2bl9wYXJhbQorCitMKG9sbzIpOgorCW1vdgkodnApLCB2MAorCW1vdgk4KHZwKSwgdjEKKwlsZWEJMTYodnApLCB2cAorCWxlYQkxNihycCksIHJwCisJbW92CSh1cCx1biw4KSwgJXJheAorCWxlYQktMih1biksIGkKKwltdWwJdjAKKwltb3YJJXJheCwgWDAKKwlNT1YoCSVyZHgsIFgxLCAzMikKKwltb3YJKHVwLHVuLDgpLCAlcmF4CisJbW92CShycCx1biw4KSwgdzAKKwltdWwJdjEKKwltb3YJJXJheCwgdzEKKwlsZWEJKCVyZHgpLCB3MgorCW1vdgk4KHVwLHVuLDgpLCAlcmF4CisJam1wCUwobG8yKQorCisJQUxJR054CitMKGFtMnRvcDIpOgorCW11bAl2MQorCWFkZAl3MCwgdzEKKwlhZGMJJXJheCwgdzIKKwltb3YJKHVwLGksOCksICVyYXgKKwlNT1YoCSVyZHgsIHczLCAxKQorCWFkYwkkMCwgdzMKKwltdWwJdjAKKwlhZGQJdzEsIFgxCisJbW92CVgxLCAtOChycCxpLDgpCisJYWRjCSVyYXgsIFgwCisJTU9WKAklcmR4LCBYMSwgMikKKwlhZGMJJDAsIFgxCisJbW92CSh1cCxpLDgpLCAlcmF4CisJbXVsCXYxCisJTU9WKAklcmR4LCB3MCwgNCkKKwltb3YJKHJwLGksOCksIHcxCisJYWRkCXcxLCB3MgorCWFkYwklcmF4LCB3MworCWFkYwkkMCwgdzAKKwltb3YJOCh1cCxpLDgpLCAlcmF4CisJbXVsCXYwCisJYWRkCXcyLCBYMAorCWFkYwklcmF4LCBYMQorCW1vdglYMCwgKHJwLGksOCkKKwlNT1YoCSVyZHgsIFgwLCA4KQorCWFkYwkkMCwgWDAKKwltb3YJOCh1cCxpLDgpLCAlcmF4CisJbW92CTgocnAsaSw4KSwgdzIKKwltdWwJdjEKKwlhZGQJdzIsIHczCisJYWRjCSVyYXgsIHcwCisJTU9WKAklcmR4LCB3MSwgMTYpCisJYWRjCSQwLCB3MQorCW1vdgkxNih1cCxpLDgpLCAlcmF4CisJbXVsCXYwCisJYWRkCXczLCBYMQorCW1vdglYMSwgOChycCxpLDgpCisJYWRjCSVyYXgsIFgwCisJTU9WKAklcmR4LCBYMSwgMzIpCisJbW92CTE2KHJwLGksOCksIHczCisJYWRjCSQwLCBYMQorCW1vdgkxNih1cCxpLDgpLCAlcmF4CisJbXVsCXYxCisJYWRkCXczLCB3MAorCU1PVigJJXJkeCwgdzIsIDY0KQorCWFkYwklcmF4LCB3MQorCW1vdgkyNCh1cCxpLDgpLCAlcmF4CisJYWRjCSQwLCB3MgorTChsbzIpOgltdWwJdjAKKwlhZGQJdzAsIFgwCisJbW92CVgwLCAxNihycCxpLDgpCisJTU9WKAklcmR4LCBYMCwgMTI4KQorCWFkYwklcmF4LCBYMQorCW1vdgkyNCh1cCxpLDgpLCAlcmF4CisJbW92CTI0KHJwLGksOCksIHcwCisJYWRjCSQwLCBYMAorCWFkZAkkNCwgaQorCWpuYwlMKGFtMnRvcDIpCisKKwltdWwJdjEKKwlhZGQJdzAsIHcxCisJYWRjCSVyYXgsIHcyCisJYWRjCVooaSwkMCksICVyZHgKKwlhZGQJdzEsIFgxCisJYWRjCVooaSwkMCksIFgwCisJbW92CVgxLCBJKC04KHJwKSwtOChycCxpLDgpKQorCWFkZAl3MiwgWDAKKwltb3YJWDAsIEkoKHJwKSwocnAsaSw4KSkKKwlhZGMJWihpLCQwKSwgJXJkeAorCW1vdgklcmR4LCBJKDgocnApLDgocnAsaSw4KSkKKworCWFkZGwJJC0yLCB2bgorCWpueglMKG9sbzIpCisKKwlwb3AJJXJheAorCXBvcAklcjE1CisJcG9wCSVyMTQKKwlwb3AJJXIxMworCXBvcAklcjEyCisJcG9wCSVyYnAKKwlwb3AJJXJieAorCUZVTkNfRVhJVCgpCisJcmV0CisKKworCUFMSUdOeAorTChtMnRvcDMpOgorCW11bAl2MAorCWFkZAklcmF4LCB3MworCW1vdgktOCh1cCxpLDgpLCAlcmF4CisJbW92CXczLCAtOChycCxpLDgpCisJYWRjCSVyZHgsIHcwCisJYWRjCSQwLCBSMzIodzEpCisJbXVsCXYxCisJYWRkCSVyYXgsIHcwCisJYWRjCSVyZHgsIHcxCisJbW92CSQwLCBSMzIodzIpCisJbW92CSh1cCxpLDgpLCAlcmF4CisJbXVsCXYwCisJYWRkCSVyYXgsIHcwCisJbW92CXcwLCAocnAsaSw4KQorCWFkYwklcmR4LCB3MQorCW1vdgkodXAsaSw4KSwgJXJheAorCWFkYwkkMCwgUjMyKHcyKQorCW11bAl2MQorCWFkZAklcmF4LCB3MQorCWFkYwklcmR4LCB3MgorCW1vdgk4KHVwLGksOCksICVyYXgKKwltdWwJdjAKKwltb3YJJDAsIFIzMih3MykKKwlhZGQJJXJheCwgdzEKKwlhZGMJJXJkeCwgdzIKKwlhZGMJJDAsIFIzMih3MykKKwltb3YJOCh1cCxpLDgpLCAlcmF4CitMKG0yZTMpOm11bAl2MQorCWFkZAklcmF4LCB3MgorCW1vdgl3MSwgOChycCxpLDgpCisJYWRjCSVyZHgsIHczCisJbW92CSQwLCBSMzIodzApCisJbW92CTE2KHVwLGksOCksICVyYXgKKwltdWwJdjAKKwlhZGQJJXJheCwgdzIKKwltb3YJMTYodXAsaSw4KSwgJXJheAorCWFkYwklcmR4LCB3MworCWFkYwkkMCwgUjMyKHcwKQorCW11bAl2MQorCW1vdgkkMCwgUjMyKHcxKQorCWFkZAklcmF4LCB3MworCW1vdgkyNCh1cCxpLDgpLCAlcmF4CisJbW92CXcyLCAxNihycCxpLDgpCisJYWRjCSVyZHgsIHcwCisJYWRkCSQ0LCBpCisJanMJTChtMnRvcDMpCisKKwltdWwJdjAKKwlhZGQJJXJheCwgdzMKKwltb3YJSSgtOCh1cCksLTgodXAsaSw4KSksICVyYXgKKwltb3YJdzMsIEkoLTgocnApLC04KHJwLGksOCkpCisJYWRjCSVyZHgsIHcwCisJYWRjCSQwLCBSMzIodzEpCisJbXVsCXYxCisJYWRkCSVyYXgsIHcwCisJYWRjCSVyZHgsIHcxCisJbW92CXcwLCBJKChycCksKHJwLGksOCkpCisJbW92CXcxLCBJKDgocnApLDgocnAsaSw4KSkKKworCWFkZAkkLTIsIHZuX3BhcmFtCisJanoJTChyZXQyKQorCitMKGRvX2FtMyk6CisJcHVzaAklcjE1CisJcHVzaAl2bl9wYXJhbQorCitMKG9sbzMpOgorCW1vdgkodnApLCB2MAorCW1vdgk4KHZwKSwgdjEKKwlsZWEJMTYodnApLCB2cAorCWxlYQkxNihycCksIHJwCisJbW92CSh1cCx1biw4KSwgJXJheAorCWxlYQktMSh1biksIGkKKwltdWwJdjAKKwltb3YJJXJheCwgWDEKKwlNT1YoCSVyZHgsIFgwLCA4KQorCW1vdgkodXAsdW4sOCksICVyYXgKKwltb3YJKHJwLHVuLDgpLCB3MworCW11bAl2MQorCW1vdgklcmF4LCB3MAorCU1PVigJJXJkeCwgdzEsIDE2KQorCW1vdgk4KHVwLHVuLDgpLCAlcmF4CisJam1wCUwobG8zKQorCisJQUxJR054CitMKGFtMnRvcDMpOgorCW11bAl2MQorCWFkZAl3MCwgdzEKKwlhZGMJJXJheCwgdzIKKwltb3YJKHVwLGksOCksICVyYXgKKwlNT1YoCSVyZHgsIHczLCAxKQorCWFkYwkkMCwgdzMKKwltdWwJdjAKKwlhZGQJdzEsIFgxCisJbW92CVgxLCAtOChycCxpLDgpCisJYWRjCSVyYXgsIFgwCisJTU9WKAklcmR4LCBYMSwgMikKKwlhZGMJJDAsIFgxCisJbW92CSh1cCxpLDgpLCAlcmF4CisJbXVsCXYxCisJTU9WKAklcmR4LCB3MCwgNCkKKwltb3YJKHJwLGksOCksIHcxCisJYWRkCXcxLCB3MgorCWFkYwklcmF4LCB3MworCWFkYwkkMCwgdzAKKwltb3YJOCh1cCxpLDgpLCAlcmF4CisJbXVsCXYwCisJYWRkCXcyLCBYMAorCWFkYwklcmF4LCBYMQorCW1vdglYMCwgKHJwLGksOCkKKwlNT1YoCSVyZHgsIFgwLCA4KQorCWFkYwkkMCwgWDAKKwltb3YJOCh1cCxpLDgpLCAlcmF4CisJbW92CTgocnAsaSw4KSwgdzIKKwltdWwJdjEKKwlhZGQJdzIsIHczCisJYWRjCSVyYXgsIHcwCisJTU9WKAklcmR4LCB3MSwgMTYpCisJYWRjCSQwLCB3MQorCW1vdgkxNih1cCxpLDgpLCAlcmF4CitMKGxvMyk6CW11bAl2MAorCWFkZAl3MywgWDEKKwltb3YJWDEsIDgocnAsaSw4KQorCWFkYwklcmF4LCBYMAorCU1PVigJJXJkeCwgWDEsIDMyKQorCW1vdgkxNihycCxpLDgpLCB3MworCWFkYwkkMCwgWDEKKwltb3YJMTYodXAsaSw4KSwgJXJheAorCW11bAl2MQorCWFkZAl3MywgdzAKKwlNT1YoCSVyZHgsIHcyLCA2NCkKKwlhZGMJJXJheCwgdzEKKwltb3YJMjQodXAsaSw4KSwgJXJheAorCWFkYwkkMCwgdzIKKwltdWwJdjAKKwlhZGQJdzAsIFgwCisJbW92CVgwLCAxNihycCxpLDgpCisJTU9WKAklcmR4LCBYMCwgMTI4KQorCWFkYwklcmF4LCBYMQorCW1vdgkyNCh1cCxpLDgpLCAlcmF4CisJbW92CTI0KHJwLGksOCksIHcwCisJYWRjCSQwLCBYMAorCWFkZAkkNCwgaQorCWpuYwlMKGFtMnRvcDMpCisKKwltdWwJdjEKKwlhZGQJdzAsIHcxCisJYWRjCSVyYXgsIHcyCisJYWRjCVooaSwkMCksICVyZHgKKwlhZGQJdzEsIFgxCisJYWRjCVooaSwkMCksIFgwCisJbW92CVgxLCBJKC04KHJwKSwtOChycCxpLDgpKQorCWFkZAl3MiwgWDAKKwltb3YJWDAsIEkoKHJwKSwocnAsaSw4KSkKKwlhZGMJWihpLCQwKSwgJXJkeAorCW1vdgklcmR4LCBJKDgocnApLDgocnAsaSw4KSkKKworCWFkZGwJJC0yLCB2bgorCWpueglMKG9sbzMpCisKKwlwb3AJJXJheAorCXBvcAklcjE1CisJcG9wCSVyMTQKKwlwb3AJJXIxMworCXBvcAklcjEyCisJcG9wCSVyYnAKKwlwb3AJJXJieAorCUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlMi9tdWxsb19iYXNlY2FzZS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlMi9tdWxsb19iYXNlY2FzZS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYwM2Q4NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmUyL211bGxvX2Jhc2VjYXNlLmFzbQpAQCAtMCwwICsxLDQyNyBAQAorZG5sICBBTUQ2NCBtcG5fbXVsbG9fYmFzZWNhc2Ugb3B0aW1pc2VkIGZvciBDb25yb2UvV29sZmRhbGUvTmVoYWxlbS9XZXN0bWVyZS4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDA4LCAyMDA5LCAyMDExLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBjeWNsZXMvbGltYgltdWxfMgkJYWRkbXVsXzIKK0MgQU1EIEs4LEs5CitDIEFNRCBLMTAKK0MgQU1EIGJ1bGwKK0MgQU1EIHBpbGUKK0MgQU1EIHN0ZWFtCitDIEFNRCBib2JjYXQKK0MgQU1EIGphZ3VhcgorQyBJbnRlbCBQNAorQyBJbnRlbCBjb3JlCSA0LjAJCTQuMTgtNC4yNQorQyBJbnRlbCBOSE0JIDMuNzUJCTQuMDYtNC4yCitDIEludGVsIFNCUgorQyBJbnRlbCBJQlIKK0MgSW50ZWwgSFdMCitDIEludGVsIEJXTAorQyBJbnRlbCBhdG9tCitDIFZJQSBuYW5vCisKK0MgVGhlIGlubmVyIGxvb3BzIG9mIHRoaXMgY29kZSBhcmUgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGEgY29kZSBnZW5lcmF0aW9uIGFuZAorQyBvcHRpbWlzYXRpb24gdG9vbCBzdWl0ZSB3cml0dGVuIGJ5IERhdmlkIEhhcnZleSBhbmQgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitDIFRPRE8KK0MgICAqIEltcGxlbWVudCBwcm9wZXIgY29yMiwgcmVwbGFjaW5nIGN1cnJlbnQgY29yMC4KK0MgICAqIE9mZnNldCBuIGJ5IDIgaW4gb3JkZXIgdG8gYXZvaWQgdGhlIG91dGVyIGxvb3AgY21wLiAgKEFuZCBzcXJfYmFzZWNhc2U/KQorQyAgICogTWljcm8tb3B0aW1pc2UuCisKK0MgV2hlbiBwbGF5aW5nIHdpdGggcG9pbnRlcnMsIHNldCB0aGlzIHRvICQyIHRvIGZhbGwgYmFjayB0byBjb25zZXJ2YXRpdmUKK0MgaW5kZXhpbmcgaW4gd2luZC1kb3duIGNvZGUuCitkZWZpbmUoYEknLGAkMScpCisKK2RlZmluZShgcnAnLCAgICAgICBgJXJkaScpCitkZWZpbmUoYHVwJywgICAgICAgYCVyc2knKQorZGVmaW5lKGB2cF9wYXJhbScsIGAlcmR4JykKK2RlZmluZShgbl9wYXJhbScsICBgJXJjeCcpCisKK2RlZmluZShgdjAnLCAgICAgICBgJXIxMCcpCitkZWZpbmUoYHYxJywgICAgICAgYCVyMTEnKQorZGVmaW5lKGB3MCcsICAgICAgIGAlcmJ4JykKK2RlZmluZShgdzEnLCAgICAgICBgJXJjeCcpCitkZWZpbmUoYHcyJywgICAgICAgYCVyYnAnKQorZGVmaW5lKGB3MycsICAgICAgIGAlcjEyJykKK2RlZmluZShgbicsICAgICAgICBgJXI5JykKK2RlZmluZShgaScsICAgICAgICBgJXIxMycpCitkZWZpbmUoYHZwJywgICAgICAgYCVyOCcpCisKK2RlZmluZShgWDAnLCAgICAgICBgJXIxNCcpCitkZWZpbmUoYFgxJywgICAgICAgYCVyMTUnKQorCitDIHJheCByYnggcmN4IHJkeCByZGkgcnNpIHJicCByOCByOSByMTAgcjExIHIxMiByMTMgcjE0IHIxNQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitkZWZpbmUoYEFMSUdOeCcsIGBBTElHTigxNiknKQorCitkZWZpbmUoYE4nLCA4NSkKK2lmZGVmKGBOJywsYGRlZmluZShgTicsMCknKQorZGVmaW5lKGBNT1YnLCBgaWZlbHNlKGV2YWwoTiAmICQzKSwwLGBtb3YJJDEsICQyJyxgbGVhCSgkMSksICQyJyknKQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigzMikKK1BST0xPR1VFKG1wbl9tdWxsb19iYXNlY2FzZSkKKwlGVU5DX0VOVFJZKDQpCisKKwltb3YJKHVwKSwgJXJheAorCW1vdgl2cF9wYXJhbSwgdnAKKworCWNtcAkkNCwgbl9wYXJhbQorCWpiCUwoc21hbGwpCisKKwltb3YJKHZwX3BhcmFtKSwgdjAKKwlwdXNoCSVyYngKKwlsZWEJKHJwLG5fcGFyYW0sOCksIHJwCUMgcG9pbnQgcnAgYXQgUlt1bl0KKwlwdXNoCSVyYnAKKwlsZWEJKHVwLG5fcGFyYW0sOCksIHVwCUMgcG9pbnQgdXAgcmlnaHQgYWZ0ZXIgVSdzIGVuZAorCXB1c2gJJXIxMgorCW1vdgkkMCwgUjMyKG4pCQlDIEZJWE1FCisJc3ViCW5fcGFyYW0sIG4KKwlwdXNoCSVyMTMKKwltdWwJdjAKKwltb3YJOCh2cCksIHYxCisKKwl0ZXN0CSQxLCBSOChuX3BhcmFtKQorCWpueglMKG0yeDEpCisKK0wobTJ4MCk6dGVzdAkkMiwgUjgobl9wYXJhbSkKKwlqbnoJTChtMmIyKQorCitMKG0yYjApOmxlYQkobiksIGkKKwltb3YJJXJheCwgKHJwLG4sOCkKKwltb3YJJXJkeCwgdzEKKwltb3YJKHVwLG4sOCksICVyYXgKKwl4b3IJUjMyKHcyKSwgUjMyKHcyKQorCWptcAlMKG0yZTApCisKK0wobTJiMik6bGVhCS0yKG4pLCBpCisJbW92CSVyYXgsIHcyCisJbW92CSh1cCxuLDgpLCAlcmF4CisJbW92CSVyZHgsIHczCisJeG9yCVIzMih3MCksIFIzMih3MCkKKwlqbXAJTChtMmUyKQorCitMKG0yeDEpOnRlc3QJJDIsIFI4KG5fcGFyYW0pCisJam56CUwobTJiMykKKworTChtMmIxKTpsZWEJMShuKSwgaQorCW1vdgklcmF4LCAocnAsbiw4KQorCW1vdgkodXAsbiw4KSwgJXJheAorCW1vdgklcmR4LCB3MAorCXhvcglSMzIodzEpLCBSMzIodzEpCisJam1wCUwobTJlMSkKKworTChtMmIzKTpsZWEJLTEobiksIGkKKwl4b3IJUjMyKHczKSwgUjMyKHczKQorCW1vdgklcmF4LCB3MQorCW1vdgklcmR4LCB3MgorCW1vdgkodXAsbiw4KSwgJXJheAorCWptcAlMKG0yZTMpCisKKwlBTElHTngKK0wobTJ0cCk6bXVsCXYwCisJYWRkCSVyYXgsIHczCisJbW92CS04KHVwLGksOCksICVyYXgKKwltb3YJdzMsIC04KHJwLGksOCkKKwlhZGMJJXJkeCwgdzAKKwlhZGMJJDAsIFIzMih3MSkKK0wobTJlMSk6bXVsCXYxCisJYWRkCSVyYXgsIHcwCisJYWRjCSVyZHgsIHcxCisJbW92CSQwLCBSMzIodzIpCisJbW92CSh1cCxpLDgpLCAlcmF4CisJbXVsCXYwCisJYWRkCSVyYXgsIHcwCisJbW92CXcwLCAocnAsaSw4KQorCWFkYwklcmR4LCB3MQorCW1vdgkodXAsaSw4KSwgJXJheAorCWFkYwkkMCwgUjMyKHcyKQorTChtMmUwKTptdWwJdjEKKwlhZGQJJXJheCwgdzEKKwlhZGMJJXJkeCwgdzIKKwltb3YJOCh1cCxpLDgpLCAlcmF4CisJbXVsCXYwCisJbW92CSQwLCBSMzIodzMpCisJYWRkCSVyYXgsIHcxCisJYWRjCSVyZHgsIHcyCisJYWRjCSQwLCBSMzIodzMpCisJbW92CTgodXAsaSw4KSwgJXJheAorTChtMmUzKTptdWwJdjEKKwlhZGQJJXJheCwgdzIKKwltb3YJdzEsIDgocnAsaSw4KQorCWFkYwklcmR4LCB3MworCW1vdgkkMCwgUjMyKHcwKQorCW1vdgkxNih1cCxpLDgpLCAlcmF4CisJbXVsCXYwCisJYWRkCSVyYXgsIHcyCisJbW92CTE2KHVwLGksOCksICVyYXgKKwlhZGMJJXJkeCwgdzMKKwlhZGMJJDAsIFIzMih3MCkKK0wobTJlMik6bXVsCXYxCisJbW92CSQwLCBSMzIodzEpCQlDIEZJWE1FOiBkZWFkIGluIGxhc3QgaXRlcmF0aW9uCisJYWRkCSVyYXgsIHczCisJbW92CTI0KHVwLGksOCksICVyYXgKKwltb3YJdzIsIDE2KHJwLGksOCkKKwlhZGMJJXJkeCwgdzAJCUMgRklYTUU6IGRlYWQgaW4gbGFzdCBpdGVyYXRpb24KKwlhZGQJJDQsIGkKKwlqcwlMKG0ydHApCisKK0wobTJlZCk6aW11bAl2MCwgJXJheAorCWFkZAl3MywgJXJheAorCW1vdgklcmF4LCBJKC04KHJwKSwtOChycCxpLDgpKQorCisJYWRkCSQyLCBuCisJbGVhCTE2KHZwKSwgdnAKKwlsZWEJLTE2KHVwKSwgdXAKKwljbXAJJC0yLCBuCisJamdlCUwoY29yMSkKKworCXB1c2gJJXIxNAorCXB1c2gJJXIxNQorCitMKG91dGVyKToKKwltb3YJKHZwKSwgdjAKKwltb3YJOCh2cCksIHYxCisJbW92CSh1cCxuLDgpLCAlcmF4CisJbXVsCXYwCisJdGVzdAkkMSwgUjgobikKKwlqbnoJTChhMXgxKQorCitMKGExeDApOm1vdgklcmF4LCBYMQorCU1PVigJJXJkeCwgWDAsIDgpCisJbW92CSh1cCxuLDgpLCAlcmF4CisJbXVsCXYxCisJdGVzdAkkMiwgUjgobikKKwlqbnoJTChhMTEwKQorCitMKGExMDApOmxlYQkobiksIGkKKwltb3YJKHJwLG4sOCksIHczCisJbW92CSVyYXgsIHcwCisJTU9WKAklcmR4LCB3MSwgMTYpCisJam1wCUwobG8wKQorCitMKGExMTApOmxlYQkyKG4pLCBpCisJbW92CShycCxuLDgpLCB3MQorCW1vdgklcmF4LCB3MgorCW1vdgk4KHVwLG4sOCksICVyYXgKKwlNT1YoCSVyZHgsIHczLCAxKQorCWptcAlMKGxvMikKKworTChhMXgxKTptb3YJJXJheCwgWDAKKwlNT1YoCSVyZHgsIFgxLCAyKQorCW1vdgkodXAsbiw4KSwgJXJheAorCW11bAl2MQorCXRlc3QJJDIsIFI4KG4pCisJanoJTChhMTExKQorCitMKGExMDEpOmxlYQkxKG4pLCBpCisJTU9WKAklcmR4LCB3MCwgNCkKKwltb3YJKHJwLG4sOCksIHcyCisJbW92CSVyYXgsIHczCisJam1wCUwobG8xKQorCitMKGExMTEpOmxlYQktMShuKSwgaQorCU1PVigJJXJkeCwgdzIsIDY0KQorCW1vdgklcmF4LCB3MQorCW1vdgkocnAsbiw4KSwgdzAKKwltb3YJOCh1cCxuLDgpLCAlcmF4CisJam1wCUwobG8zKQorCisJQUxJR054CitMKHRvcCk6CW11bAl2MQorCWFkZAl3MCwgdzEKKwlhZGMJJXJheCwgdzIKKwltb3YJLTgodXAsaSw4KSwgJXJheAorCU1PVigJJXJkeCwgdzMsIDEpCisJYWRjCSQwLCB3MworTChsbzIpOgltdWwJdjAKKwlhZGQJdzEsIFgxCisJbW92CVgxLCAtMTYocnAsaSw4KQorCWFkYwklcmF4LCBYMAorCU1PVigJJXJkeCwgWDEsIDIpCisJYWRjCSQwLCBYMQorCW1vdgktOCh1cCxpLDgpLCAlcmF4CisJbXVsCXYxCisJTU9WKAklcmR4LCB3MCwgNCkKKwltb3YJLTgocnAsaSw4KSwgdzEKKwlhZGQJdzEsIHcyCisJYWRjCSVyYXgsIHczCisJYWRjCSQwLCB3MAorTChsbzEpOgltb3YJKHVwLGksOCksICVyYXgKKwltdWwJdjAKKwlhZGQJdzIsIFgwCisJYWRjCSVyYXgsIFgxCisJbW92CVgwLCAtOChycCxpLDgpCisJTU9WKAklcmR4LCBYMCwgOCkKKwlhZGMJJDAsIFgwCisJbW92CSh1cCxpLDgpLCAlcmF4CisJbW92CShycCxpLDgpLCB3MgorCW11bAl2MQorCWFkZAl3MiwgdzMKKwlhZGMJJXJheCwgdzAKKwlNT1YoCSVyZHgsIHcxLCAxNikKKwlhZGMJJDAsIHcxCitMKGxvMCk6CW1vdgk4KHVwLGksOCksICVyYXgKKwltdWwJdjAKKwlhZGQJdzMsIFgxCisJbW92CVgxLCAocnAsaSw4KQorCWFkYwklcmF4LCBYMAorCU1PVigJJXJkeCwgWDEsIDMyKQorCW1vdgk4KHJwLGksOCksIHczCisJYWRjCSQwLCBYMQorCW1vdgk4KHVwLGksOCksICVyYXgKKwltdWwJdjEKKwlhZGQJdzMsIHcwCisJTU9WKAklcmR4LCB3MiwgNjQpCisJYWRjCSVyYXgsIHcxCisJbW92CTE2KHVwLGksOCksICVyYXgKKwlhZGMJJDAsIHcyCitMKGxvMyk6CW11bAl2MAorCWFkZAl3MCwgWDAKKwltb3YJWDAsIDgocnAsaSw4KQorCU1PVigJJXJkeCwgWDAsIDEyOCkKKwlhZGMJJXJheCwgWDEKKwltb3YJMTYodXAsaSw4KSwgJXJheAorCW1vdgkxNihycCxpLDgpLCB3MAorCWFkYwkkMCwgWDAKKwlhZGQJJDQsIGkKKwlqbmMJTCh0b3ApCisKK0woZW5kKToJaW11bAl2MSwgJXJheAorCWFkZAl3MCwgdzEKKwlhZGMJJXJheCwgdzIKKwltb3YJSSgtOCh1cCksLTgodXAsaSw4KSksICVyYXgKKwlpbXVsCXYwLCAlcmF4CisJYWRkCXcxLCBYMQorCW1vdglYMSwgSSgtMTYocnApLC0xNihycCxpLDgpKQorCWFkYwlYMCwgJXJheAorCW1vdglJKC04KHJwKSwtOChycCxpLDgpKSwgdzEKKwlhZGQJdzEsIHcyCisJYWRkCXcyLCAlcmF4CisJbW92CSVyYXgsIEkoLTgocnApLC04KHJwLGksOCkpCisKKwlhZGQJJDIsIG4KKwlsZWEJMTYodnApLCB2cAorCWxlYQktMTYodXApLCB1cAorCWNtcAkkLTIsIG4KKwlqbAlMKG91dGVyKQorCisJcG9wCSVyMTUKKwlwb3AJJXIxNAorCisJam56CUwoY29yMCkKKworTChjb3IxKTptb3YJKHZwKSwgdjAKKwltb3YJOCh2cCksIHYxCisJbW92CS0xNih1cCksICVyYXgKKwltdWwJdjAJCQlDIHUwIHggdjIKKwlhZGQJLTE2KHJwKSwgJXJheAkJQyBGSVhNRTogcnBbMF0gc3RpbGwgYXZhaWxhYmxlIGluIHJlZz8KKwlhZGMJLTgocnApLCAlcmR4CQlDIEZJWE1FOiBycFsxXSBzdGlsbCBhdmFpbGFibGUgaW4gcmVnPworCW1vdgktOCh1cCksICVyYngKKwlpbXVsCXYwLCAlcmJ4CisJbW92CS0xNih1cCksICVyY3gKKwlpbXVsCXYxLCAlcmN4CisJbW92CSVyYXgsIC0xNihycCkKKwlhZGQJJXJieCwgJXJjeAorCWFkZAklcmR4LCAlcmN4CisJbW92CSVyY3gsIC04KHJwKQorCXBvcAklcjEzCisJcG9wCSVyMTIKKwlwb3AJJXJicAorCXBvcAklcmJ4CisJRlVOQ19FWElUKCkKKwlyZXQKKworTChjb3IwKTptb3YJKHZwKSwgJXIxMQorCWltdWwJLTgodXApLCAlcjExCisJYWRkCSVyYXgsICVyMTEKKwltb3YJJXIxMSwgLTgocnApCisJcG9wCSVyMTMKKwlwb3AJJXIxMgorCXBvcAklcmJwCisJcG9wCSVyYngKKwlGVU5DX0VYSVQoKQorCXJldAorCisJQUxJR04oMTYpCitMKHNtYWxsKToKKwljbXAJJDIsIG5fcGFyYW0KKwlqYWUJTChndDEpCitMKG4xKToJaW11bAkodnBfcGFyYW0pLCAlcmF4CisJbW92CSVyYXgsIChycCkKKwlGVU5DX0VYSVQoKQorCXJldAorTChndDEpOglqYQlMKGd0MikKK0wobjIpOgltb3YJKHZwX3BhcmFtKSwgJXI5CisJbXVsCSVyOQorCW1vdgklcmF4LCAocnApCisJbW92CTgodXApLCAlcmF4CisJaW11bAklcjksICVyYXgKKwlhZGQJJXJheCwgJXJkeAorCW1vdgk4KHZwKSwgJXI5CisJbW92CSh1cCksICVyY3gKKwlpbXVsCSVyOSwgJXJjeAorCWFkZAklcmN4LCAlcmR4CisJbW92CSVyZHgsIDgocnApCisJRlVOQ19FWElUKCkKKwlyZXQKK0woZ3QyKToKK0wobjMpOgltb3YJKHZwX3BhcmFtKSwgJXI5CisJbXVsCSVyOQkJQyB1MCB4IHYwCisJbW92CSVyYXgsIChycCkKKwltb3YJJXJkeCwgJXIxMAorCW1vdgk4KHVwKSwgJXJheAorCW11bAklcjkJCUMgdTEgeCB2MAorCWltdWwJMTYodXApLCAlcjkJQyB1MiB4IHYwCisJYWRkCSVyYXgsICVyMTAKKwlhZGMJJXJkeCwgJXI5CisJbW92CTgodnApLCAlcjExCisJbW92CSh1cCksICVyYXgKKwltdWwJJXIxMQkJQyB1MCB4IHYxCisJYWRkCSVyYXgsICVyMTAKKwlhZGMJJXJkeCwgJXI5CisJaW11bAk4KHVwKSwgJXIxMQlDIHUxIHggdjEKKwlhZGQJJXIxMSwgJXI5CisJbW92CSVyMTAsIDgocnApCisJbW92CTE2KHZwKSwgJXIxMAorCW1vdgkodXApLCAlcmF4CisJaW11bAklcmF4LCAlcjEwCUMgdTAgeCB2MgorCWFkZAklcjEwLCAlcjkKKwltb3YJJXI5LCAxNihycCkKKwlGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZTIvcG9wY291bnQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZTIvcG9wY291bnQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZDhjNWQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlMi9wb3Bjb3VudC5hc20KQEAgLTAsMCArMSwxODUgQEAKK2RubCAgQU1ENjQgU1NTRTMgbXBuX3BvcGNvdW50IC0tIHBvcHVsYXRpb24gY291bnQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTAtMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJCSAgICBjeWNsZXMvbGltYgkgIGdvb2QgZm9yIGNwdT8KK0MgQU1EIEs4LEs5CQluL2EKK0MgQU1EIEsxMAkJbi9hCitDIEFNRCBiZDEJICAgICAxLjc5LTEuOTEJCW4KK0MgQU1EIGJkMgkgICAgIDEuNzMtMS44NQkJbgorQyBBTUQgYmQzCQkgPworQyBBTUQgYmQ0CSAgICAgMS43My0xLjg1CQluCitDIEFNRCB6ZW4JCSAxLjQ3CQluCitDIEFNRCBib2JjYXQJCSA4LjAJCW4KK0MgQU1EIGphZ3VhcgkJIDQuNzgJCW4KK0MgSW50ZWwgUDQJCW4vYQorQyBJbnRlbCBDTlIJCSAzLjc1CitDIEludGVsIFBOUgkJIDIuNjEJCXkKK0MgSW50ZWwgTkhNCQkgMi4wMwkJbgorQyBJbnRlbCBTQlIJCSAxLjg3CQluCitDIEludGVsIElCUgkgICAgIDEuNTItMS41OAkJbgorQyBJbnRlbCBIV0wJICAgICAxLjUyLTEuNTgJCW4KK0MgSW50ZWwgQldMCSAgICAgMS41Mi0xLjU4CQluCitDIEludGVsIFNLTAkJIDEuNTEJCW4KK0MgSW50ZWwgYXRvbQkJMTIuMwkJbgorQyBJbnRlbCBTTE0JCSA5LjEJCW4KK0MgVklBIG5hbm8JCSA/CisKK0MgVE9ETworQyAgKiBUaGlzIHdhcyBoYW5kLXdyaXR0ZW4gd2l0aG91dCB0b28gbXVjaCB0aG91Z2h0IGFib3V0IG9wdGltYWwgaW5zbgorQyAgICBzZWxlY3Rpb247IGNoZWNrIHRvIHNlZSBvZiBpdCBjYW4gYmUgaW1wcm92ZWQuCitDICAqIENvbnNpZGVyIGRvaW5nIHNvbWUgaW5zdHJ1Y3Rpb24gc2NoZWR1bGluZy4KKworZGVmaW5lKGB1cCcsCQlgJXJkaScpCitkZWZpbmUoYG4nLAkJYCVyc2knKQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigzMikKK1BST0xPR1VFKG1wbl9wb3Bjb3VudCkKKwlsZWEJTChjbnN0cykoJXJpcCksICVyOQorCitpZmRlZihgUElDJywgYGRlZmluZShgT0ZGMScsMzIpIGRlZmluZShgT0ZGMicsNDgpJywKKwkgICAgIGBkZWZpbmUoYE9GRjEnLDY0KSBkZWZpbmUoYE9GRjInLDgwKScpCisJbW92ZHFhCU9GRjFgJyglcjkpLCAleG1tNworCW1vdmRxYQlPRkYyYCcoJXI5KSwgJXhtbTYKKwlweG9yCSV4bW00LCAleG1tNAorCXB4b3IJJXhtbTUsICV4bW01CisJcHhvcgkleG1tOCwgJXhtbTgKKworCW1vdglSMzIobiksIFIzMiglcmF4KQorCWFuZAkkNywgUjMyKCVyYXgpCitpZmRlZihgUElDJyxgCisJbW92c2xxCSglcjksJXJheCw0KSwgJXJheAorCWFkZAklcjksICVyYXgKKwlqbXAJKiVyYXgKKycsYAorCWptcAkqKCVyOSwlcmF4LDgpCisnKQorCitMKDEpOgltb3ZxCSh1cCksICV4bW0xCisJYWRkCSQ4LCB1cAorCWptcAlMKGUxKQorCitMKDIpOglhZGQJJC00OCwgdXAKKwlqbXAJTChlMikKKworTCgzKToJbW92cQkodXApLCAleG1tMQorCWFkZAkkLTQwLCB1cAorCWptcAlMKGUzKQorCitMKDQpOglhZGQJJC0zMiwgdXAKKwlqbXAJTChlNCkKKworTCg1KToJbW92cQkodXApLCAleG1tMQorCWFkZAkkLTI0LCB1cAorCWptcAlMKGU1KQorCitMKDYpOglhZGQJJC0xNiwgdXAKKwlqbXAJTChlNikKKworTCg3KToJbW92cQkodXApLCAleG1tMQorCWFkZAkkLTgsIHVwCisJam1wCUwoZTcpCisKKwlBTElHTigzMikKK0wodG9wKToJbGRkcXUJKHVwKSwgJXhtbTEKK0woZTcpOgltb3ZkcWEJJXhtbTYsICV4bW0wCQlDIGNvcHkgbWFzayByZWdpc3RlcgorCW1vdmRxYQkleG1tNywgJXhtbTIJCUMgY29weSBjb3VudCByZWdpc3RlcgorCW1vdmRxYQkleG1tNywgJXhtbTMJCUMgY29weSBjb3VudCByZWdpc3RlcgorCXBhbmQJJXhtbTEsICV4bW0wCisJcHNybHcJJDQsICV4bW0xCisJcGFuZAkleG1tNiwgJXhtbTEKKwlwc2h1ZmIJJXhtbTAsICV4bW0yCisJcHNodWZiCSV4bW0xLCAleG1tMworCXBhZGRiCSV4bW0yLCAleG1tMworCXBhZGRiCSV4bW0zLCAleG1tNAorTChlNik6CWxkZHF1CTE2KHVwKSwgJXhtbTEKK0woZTUpOgltb3ZkcWEJJXhtbTYsICV4bW0wCisJbW92ZHFhCSV4bW03LCAleG1tMgorCW1vdmRxYQkleG1tNywgJXhtbTMKKwlwYW5kCSV4bW0xLCAleG1tMAorCXBzcmx3CSQ0LCAleG1tMQorCXBhbmQJJXhtbTYsICV4bW0xCisJcHNodWZiCSV4bW0wLCAleG1tMgorCXBzaHVmYgkleG1tMSwgJXhtbTMKKwlwYWRkYgkleG1tMiwgJXhtbTMKKwlwYWRkYgkleG1tMywgJXhtbTQKK0woZTQpOglsZGRxdQkzMih1cCksICV4bW0xCitMKGUzKToJbW92ZHFhCSV4bW02LCAleG1tMAorCW1vdmRxYQkleG1tNywgJXhtbTIKKwltb3ZkcWEJJXhtbTcsICV4bW0zCisJcGFuZAkleG1tMSwgJXhtbTAKKwlwc3JsdwkkNCwgJXhtbTEKKwlwYW5kCSV4bW02LCAleG1tMQorCXBzaHVmYgkleG1tMCwgJXhtbTIKKwlwc2h1ZmIJJXhtbTEsICV4bW0zCisJcGFkZGIJJXhtbTIsICV4bW0zCisJcGFkZGIJJXhtbTMsICV4bW00CitMKGUyKToJbGRkcXUJNDgodXApLCAleG1tMQorCWFkZAkkNjQsIHVwCitMKGUxKToJbW92ZHFhCSV4bW02LCAleG1tMAorCW1vdmRxYQkleG1tNywgJXhtbTIKKwltb3ZkcWEJJXhtbTcsICV4bW0zCisJcGFuZAkleG1tMSwgJXhtbTAKKwlwc3JsdwkkNCwgJXhtbTEKKwlwYW5kCSV4bW02LCAleG1tMQorCXBzaHVmYgkleG1tMCwgJXhtbTIKKwlwc2h1ZmIJJXhtbTEsICV4bW0zCisJcHNhZGJ3CSV4bW01LCAleG1tNAkJQyBzdW0gdG8gOCB4IDE2LWJpdCBjb3VudHMKKwlwYWRkYgkleG1tMiwgJXhtbTMKKwlwYWRkcQkleG1tNCwgJXhtbTgJCUMgc3VtIHRvIDIgeCA2NC1iaXQgY291bnRzCisJbW92ZHFhCSV4bW0zLCAleG1tNAorCXN1YgkkOCwgbgorCWpnCUwodG9wKQorCisJcHNhZGJ3CSV4bW01LCAleG1tNAorCXBhZGRxCSV4bW00LCAleG1tOAorCXBzaHVmZAkkMTQsICV4bW04LCAleG1tMAorCXBhZGRxCSV4bW04LCAleG1tMAorCW1vdnEJJXhtbTAsICVyYXgKKwlyZXQKK0VQSUxPR1VFKCkKK0RFRl9PQkpFQ1QoTChjbnN0cyksMTYsYEpVTVBUQUJTRUNUJykKKwlKTVBFTlQoCUwodG9wKSwgTChjbnN0cykpCisJSk1QRU5UKAlMKDEpLCBMKGNuc3RzKSkKKwlKTVBFTlQoCUwoMiksIEwoY25zdHMpKQorCUpNUEVOVCgJTCgzKSwgTChjbnN0cykpCisJSk1QRU5UKAlMKDQpLCBMKGNuc3RzKSkKKwlKTVBFTlQoCUwoNSksIEwoY25zdHMpKQorCUpNUEVOVCgJTCg2KSwgTChjbnN0cykpCisJSk1QRU5UKAlMKDcpLCBMKGNuc3RzKSkKKwkuYnl0ZQkweDAwLDB4MDEsMHgwMSwweDAyLDB4MDEsMHgwMiwweDAyLDB4MDMKKwkuYnl0ZQkweDAxLDB4MDIsMHgwMiwweDAzLDB4MDIsMHgwMywweDAzLDB4MDQKKwkuYnl0ZQkweDBmLDB4MGYsMHgwZiwweDBmLDB4MGYsMHgwZiwweDBmLDB4MGYKKwkuYnl0ZQkweDBmLDB4MGYsMHgwZiwweDBmLDB4MGYsMHgwZiwweDBmLDB4MGYKK0VORF9PQkpFQ1QoTChjbnN0cykpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlMi9yZWRjXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZTIvcmVkY18xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzI5NmZkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZTIvcmVkY18xLmFzbQpAQCAtMCwwICsxLDQzMCBAQAorZG5sICBYODYtNjQgbXBuX3JlZGNfMSBvcHRpbWlzZWQgZm9yIEludGVsIENvbnJvZSBhbmQgV29sZmRhbGUuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqw7ZybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAwMy0yMDA1LCAyMDA3LCAyMDA4LCAyMDExLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIEFNRCBLOCxLOQkgPworQyBBTUQgSzEwCSA/CitDIEFNRCBidWxsCSA/CitDIEFNRCBwaWxlCSA/CitDIEFNRCBzdGVhbQkgPworQyBBTUQgYm9iY2F0CSA/CitDIEFNRCBqYWd1YXIJID8KK0MgSW50ZWwgUDQJID8KK0MgSW50ZWwgY29yZQkgNC41ICAoZmx1Y3R1YXRpbmcpCitDIEludGVsIE5ITQkgPworQyBJbnRlbCBTQlIJID8KK0MgSW50ZWwgSUJSCSA/CitDIEludGVsIEhXTAkgPworQyBJbnRlbCBCV0wJID8KK0MgSW50ZWwgYXRvbQkgPworQyBWSUEgbmFubwkgPworCitDIFRoZSBpbm5lciBsb29wcyBvZiB0aGlzIGNvZGUgYXJlIHRoZSByZXN1bHQgb2YgcnVubmluZyBhIGNvZGUgZ2VuZXJhdGlvbiBhbmQKK0Mgb3B0aW1pc2F0aW9uIHRvb2wgc3VpdGUgd3JpdHRlbiBieSBEYXZpZCBIYXJ2ZXkgYW5kIFRvcmJqw7ZybiBHcmFubHVuZC4KKworQyBUT0RPCitDICAqIE1pY3JvLW9wdGltaXNlLCBub25lIHBlcmZvcm1lZCB0aHVzIGZhci4KK0MgICogQ29uc2lkZXIgaW5saW5pbmcgbXBuX2FkZF9uLgorQyAgKiBTaW5nbGUgYmFzZWNhc2VzIG91dCBiZWZvcmUgdGhlIHB1c2hlcy4KK0MgICogS2VlcCB1cFtpXSBpbiByZWdpc3RlcnMgZm9yIGJhc2VjYXNlcyAobWlnaHQgcmVxdWlyZSBwdXNoZXMpLgorCitDIFdoZW4gcGxheWluZyB3aXRoIHBvaW50ZXJzLCBzZXQgdGhpcyB0byAkMiB0byBmYWxsIGJhY2sgdG8gY29uc2VydmF0aXZlCitDIGluZGV4aW5nIGluIHdpbmQtZG93biBjb2RlLgorZGVmaW5lKGBJJyxgJDEnKQorCitkZWZpbmUoYHJwJywgICAgICAgICAgYCVyZGknKSAgIEMgcmN4CitkZWZpbmUoYHVwJywgICAgICAgICAgYCVyc2knKSAgIEMgcmR4CitkZWZpbmUoYG1wX3BhcmFtJywgICAgYCVyZHgnKSAgIEMgcjgKK2RlZmluZShgbicsICAgICAgICAgICBgJXJjeCcpICAgQyByOQorZGVmaW5lKGB1MGludicsICAgICAgIGAlcjgnKSAgICBDIHN0YWNrCisKK2RlZmluZShgaScsICAgICAgICAgICBgJXIxNCcpCitkZWZpbmUoYGonLCAgICAgICAgICAgYCVyMTUnKQorZGVmaW5lKGBtcCcsICAgICAgICAgIGAlcjEyJykKK2RlZmluZShgcTAnLCAgICAgICAgICBgJXIxMycpCisKK0MgcmF4IHJieCByY3ggcmR4IHJkaSByc2kgcmJwIHI4IHI5IHIxMCByMTEgcjEyIHIxMyByMTQgcjE1CitDICBYICBxMCcgIG4gICBYICBycCAgdXAgICAgICB1MGkgICAgICAgICAgIG1wICAgcTAgaSAgIGoKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworZGVmaW5lKGBBTElHTngnLCBgQUxJR04oMTYpJykKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMzIpCitQUk9MT0dVRShtcG5fcmVkY18xKQorCUZVTkNfRU5UUlkoNCkKK0lGRE9TKGAJbW92CTU2KCVyc3ApLCAlcjgJJykKKwlwdXNoCSVyYngKKwlwdXNoCSVyYnAKKwlwdXNoCSVyMTIKKwlwdXNoCSVyMTMKKwlwdXNoCSVyMTQKKwlwdXNoCSVyMTUKKworCW1vdgkodXApLCBxMAorCW1vdgluLCBqCQkJQyBvdXRlciBsb29wIGluZHVjdGlvbiB2YXIKKwlsZWEJKG1wX3BhcmFtLG4sOCksIG1wCisJbGVhCS0xNih1cCxuLDgpLCB1cAorCW5lZwluCisJaW11bAl1MGludiwgcTAJCUMgZmlyc3QgaXRlcmF0aW9uIHEwCisKKwl0ZXN0CSQxLCBSOChuKQorCWp6CUwoYjApCisKK0woYjEpOgljbXAJJC0xLCBSMzIobikKKwlqeglMKG4xKQorCWNtcAkkLTMsIFIzMihuKQorCWp6CUwobjMpCisKKwlwdXNoCXJwCisKK0wob3RwMSk6bGVhCTMobiksIGkKKwltb3YJKG1wLG4sOCksICVyYXgKKwltdWwJcTAKKwlsZWEJKCVyYXgpLCAlcmJwCisJbW92CTgobXAsbiw4KSwgJXJheAorCWxlYQkoJXJkeCksICVyOQorCW11bAlxMAorCWxlYQkoJXJheCksICVyMTEKKwltb3YJMTYobXAsbiw4KSwgJXJheAorCW1vdgkxNih1cCxuLDgpLCAlcjEwCisJbGVhCSglcmR4KSwgJXJkaQorCW11bAlxMAorCWFkZAklcmJwLCAlcjEwCisJbGVhCSglcmF4KSwgJXJicAorCW1vdgkyNChtcCxuLDgpLCAlcmF4CisJYWRjCSVyOSwgJXIxMQorCW1vdgkyNCh1cCxuLDgpLCAlcmJ4CisJbGVhCSglcmR4KSwgJXI5CisJYWRjCSQwLCAlcmRpCisJbXVsCXEwCisJYWRkCSVyMTEsICVyYngKKwlsZWEJKCVyYXgpLCAlcjExCisJbW92CTMyKG1wLG4sOCksICVyYXgKKwlhZGMJJXJkaSwgJXJicAorCW1vdgklcmJ4LCAyNCh1cCxuLDgpCisJbW92CTMyKHVwLG4sOCksICVyMTAKKwlsZWEJKCVyZHgpLCAlcmRpCisJYWRjCSQwLCAlcjkKKwlpbXVsCXUwaW52LCAlcmJ4CQlDIG5leHQgcSBsaW1iCisJYWRkCSQyLCBpCisJam5zCUwoZWQxKQorCisJQUxJR054CitMKHRwMSk6CW11bAlxMAorCWFkZAklcmJwLCAlcjEwCisJbGVhCSglcmF4KSwgJXJicAorCW1vdgkobXAsaSw4KSwgJXJheAorCWFkYwklcjksICVyMTEKKwltb3YJJXIxMCwgLTgodXAsaSw4KQorCW1vdgkodXAsaSw4KSwgJXIxMAorCWxlYQkoJXJkeCksICVyOQorCWFkYwkkMCwgJXJkaQorCW11bAlxMAorCWFkZAklcjExLCAlcjEwCisJbGVhCSglcmF4KSwgJXIxMQorCW1vdgk4KG1wLGksOCksICVyYXgKKwlhZGMJJXJkaSwgJXJicAorCW1vdgklcjEwLCAodXAsaSw4KQorCW1vdgk4KHVwLGksOCksICVyMTAKKwlsZWEJKCVyZHgpLCAlcmRpCisJYWRjCSQwLCAlcjkKKwlhZGQJJDIsIGkKKwlqcwlMKHRwMSkKKworTChlZDEpOgltdWwJcTAKKwlhZGQJJXJicCwgJXIxMAorCWFkYwklcjksICVyMTEKKwltb3YJJXIxMCwgSSgtOCh1cCksLTgodXAsaSw4KSkKKwltb3YJSSgodXApLCh1cCxpLDgpKSwgJXIxMAorCWFkYwkkMCwgJXJkaQorCWFkZAklcjExLCAlcjEwCisJYWRjCSVyZGksICVyYXgKKwltb3YJJXIxMCwgSSgodXApLCh1cCxpLDgpKQorCW1vdglJKDgodXApLDgodXAsaSw4KSksICVyMTAKKwlhZGMJJDAsICVyZHgKKwlhZGQJJXJheCwgJXIxMAorCW1vdgklcjEwLCBJKDgodXApLDgodXAsaSw4KSkKKwlhZGMJJDAsICVyZHgKKwltb3YJJXJkeCwgMTYodXAsbiw4KQlDIHVwWzBdCisJbW92CSVyYngsIHEwCQlDIHByZXZpb3VzbHkgY29tcHV0ZWQgcSBsaW1iIC0+IHEwCisJbGVhCTgodXApLCB1cAkJQyB1cCsrCisJZGVjCWoKKwlqbnoJTChvdHAxKQorCWptcAlMKGNqKQorCitMKGIwKToJY21wCSQtMiwgUjMyKG4pCisJanoJTChuMikKKwljbXAJJC00LCBSMzIobikKKwlqeglMKG40KQorCisJcHVzaAlycAorCitMKG90cDApOmxlYQk0KG4pLCBpCisJbW92CShtcCxuLDgpLCAlcmF4CisJbXVsCXEwCisJbGVhCSglcmF4KSwgJXIxMQorCW1vdgk4KG1wLG4sOCksICVyYXgKKwlsZWEJKCVyZHgpLCAlcmRpCisJbXVsCXEwCisJbGVhCSglcmF4KSwgJXJicAorCW1vdgkxNihtcCxuLDgpLCAlcmF4CisJbW92CTE2KHVwLG4sOCksICVyMTAKKwlsZWEJKCVyZHgpLCAlcjkKKwltdWwJcTAKKwlhZGQJJXIxMSwgJXIxMAorCWxlYQkoJXJheCksICVyMTEKKwltb3YJMjQobXAsbiw4KSwgJXJheAorCWFkYwklcmRpLCAlcmJwCisJbW92CTI0KHVwLG4sOCksICVyYngKKwlsZWEJKCVyZHgpLCAlcmRpCisJYWRjCSQwLCAlcjkKKwltdWwJcTAKKwlhZGQJJXJicCwgJXJieAorCWxlYQkoJXJheCksICVyYnAKKwltb3YJMzIobXAsbiw4KSwgJXJheAorCWFkYwklcjksICVyMTEKKwltb3YJJXJieCwgMjQodXAsbiw4KQorCW1vdgkzMih1cCxuLDgpLCAlcjEwCisJbGVhCSglcmR4KSwgJXI5CisJYWRjCSQwLCAlcmRpCisJaW11bAl1MGludiwgJXJieAkJQyBuZXh0IHEgbGltYgorCWptcAlMKGUwKQorCisJQUxJR054CitMKHRwMCk6CW11bAlxMAorCWFkZAklcmJwLCAlcjEwCisJbGVhCSglcmF4KSwgJXJicAorCW1vdgkobXAsaSw4KSwgJXJheAorCWFkYwklcjksICVyMTEKKwltb3YJJXIxMCwgLTgodXAsaSw4KQorCW1vdgkodXAsaSw4KSwgJXIxMAorCWxlYQkoJXJkeCksICVyOQorCWFkYwkkMCwgJXJkaQorTChlMCk6CW11bAlxMAorCWFkZAklcjExLCAlcjEwCisJbGVhCSglcmF4KSwgJXIxMQorCW1vdgk4KG1wLGksOCksICVyYXgKKwlhZGMJJXJkaSwgJXJicAorCW1vdgklcjEwLCAodXAsaSw4KQorCW1vdgk4KHVwLGksOCksICVyMTAKKwlsZWEJKCVyZHgpLCAlcmRpCisJYWRjCSQwLCAlcjkKKwlhZGQJJDIsIGkKKwlqcwlMKHRwMCkKKworTChlZDApOgltdWwJcTAKKwlhZGQJJXJicCwgJXIxMAorCWFkYwklcjksICVyMTEKKwltb3YJJXIxMCwgSSgtOCh1cCksLTgodXAsaSw4KSkKKwltb3YJSSgodXApLCh1cCxpLDgpKSwgJXIxMAorCWFkYwkkMCwgJXJkaQorCWFkZAklcjExLCAlcjEwCisJYWRjCSVyZGksICVyYXgKKwltb3YJJXIxMCwgSSgodXApLCh1cCxpLDgpKQorCW1vdglJKDgodXApLDgodXAsaSw4KSksICVyMTAKKwlhZGMJJDAsICVyZHgKKwlhZGQJJXJheCwgJXIxMAorCW1vdgklcjEwLCBJKDgodXApLDgodXAsaSw4KSkKKwlhZGMJJDAsICVyZHgKKwltb3YJJXJkeCwgMTYodXAsbiw4KQlDIHVwWzBdCisJbW92CSVyYngsIHEwCQlDIHByZXZpb3VzbHkgY29tcHV0ZWQgcSBsaW1iIC0+IHEwCisJbGVhCTgodXApLCB1cAkJQyB1cCsrCisJZGVjCWoKKwlqbnoJTChvdHAwKQorCitMKGNqKToJbGVhCTE2KHVwKSwgdXAJCUMgRklYTUUKKwlwb3AJcnAKK0woYWRkX24pOgorSUZTVEQoYAlsZWEJKHVwLG4sOCksIHVwCQlDIHBhcmFtIDI6IHVwCisJbGVhCSh1cCxuLDgpLCAlcmR4CQlDIHBhcmFtIDM6IHVwIC0gbgorCW5lZwlSMzIobikJCScpCUMgcGFyYW0gNDogbgorCitJRkRPUyhgCWxlYQkodXAsbiw4KSwgJXJkeAkJQyBwYXJhbSAyOiB1cAorCWxlYQkoJXJkeCxuLDgpLCAlcjgJCUMgcGFyYW0gMzogdXAgLSBuCisJbmVnCVIzMihuKQorCW1vdgluLCAlcjkJCQlDIHBhcmFtIDQ6IG4KKwltb3YJcnAsICVyY3gJJykJQyBwYXJhbSAxOiBycAorCitJRlNURChgCXN1YgkkOCwgJXJzcAknKQorSUZET1MoYAlzdWIJJDQwLCAlcnNwCScpCisJQVNTRVJUKG56LCBgdGVzdCAkMTUsICVyc3AnKQorCUNBTEwoCW1wbl9hZGRfbikKK0lGU1REKGAJYWRkCSQ4LCAlcnNwCScpCitJRkRPUyhgCWFkZAkkNDAsICVyc3AJJykKKworTChyZXQpOglwb3AJJXIxNQorCXBvcAklcjE0CisJcG9wCSVyMTMKKwlwb3AJJXIxMgorCXBvcAklcmJwCisJcG9wCSVyYngKKwlGVU5DX0VYSVQoKQorCXJldAorCitMKG4xKToJbW92CShtcF9wYXJhbSksICVyYXgKKwltdWwJcTAKKwlhZGQJOCh1cCksICVyYXgKKwlhZGMJMTYodXApLCAlcmR4CisJbW92CSVyZHgsIChycCkKKwltb3YJJDAsIFIzMiglcmF4KQorCWFkYwlSMzIoJXJheCksIFIzMiglcmF4KQorCWptcAlMKHJldCkKKworTChuMik6CW1vdgkobXBfcGFyYW0pLCAlcmF4CisJbW92CSh1cCksICVyYnAKKwltdWwJcTAKKwlhZGQJJXJheCwgJXJicAorCW1vdgklcmR4LCAlcjkKKwlhZGMJJDAsICVyOQorCW1vdgktOChtcCksICVyYXgKKwltb3YJOCh1cCksICVyMTAKKwltdWwJcTAKKwlhZGQJJXJheCwgJXIxMAorCW1vdgklcmR4LCAlcjExCisJYWRjCSQwLCAlcjExCisJYWRkCSVyOSwgJXIxMAorCWFkYwkkMCwgJXIxMQorCW1vdgklcjEwLCBxMAorCWltdWwJdTBpbnYsIHEwCQlDIG5leHQgcTAKKwltb3YJLTE2KG1wKSwgJXJheAorCW11bAlxMAorCWFkZAklcmF4LCAlcjEwCisJbW92CSVyZHgsICVyOQorCWFkYwkkMCwgJXI5CisJbW92CS04KG1wKSwgJXJheAorCW1vdgkxNih1cCksICVyMTQKKwltdWwJcTAKKwlhZGQJJXJheCwgJXIxNAorCWFkYwkkMCwgJXJkeAorCWFkZAklcjksICVyMTQKKwlhZGMJJDAsICVyZHgKKwl4b3IJUjMyKCVyYXgpLCBSMzIoJXJheCkKKwlhZGQJJXIxMSwgJXIxNAorCWFkYwkyNCh1cCksICVyZHgKKwltb3YJJXIxNCwgKHJwKQorCW1vdgklcmR4LCA4KHJwKQorCWFkYwlSMzIoJXJheCksIFIzMiglcmF4KQorCWptcAlMKHJldCkKKworCUFMSUdOeAorTChuMyk6CW1vdgktMjQobXApLCAlcmF4CisJbW92CS04KHVwKSwgJXIxMAorCW11bAlxMAorCWFkZAklcmF4LCAlcjEwCisJbW92CS0xNihtcCksICVyYXgKKwltb3YJJXJkeCwgJXIxMQorCWFkYwkkMCwgJXIxMQorCW1vdgkodXApLCAlcmJwCisJbXVsCXEwCisJYWRkCSVyYXgsICVyYnAKKwltb3YJJXJkeCwgJXI5CisJYWRjCSQwLCAlcjkKKwltb3YJLTgobXApLCAlcmF4CisJYWRkCSVyMTEsICVyYnAKKwltb3YJOCh1cCksICVyMTAKKwlhZGMJJDAsICVyOQorCW11bAlxMAorCW1vdgklcmJwLCBxMAorCWltdWwJdTBpbnYsIHEwCQlDIG5leHQgcTAKKwlhZGQJJXJheCwgJXIxMAorCW1vdgklcmR4LCAlcjExCisJYWRjCSQwLCAlcjExCisJbW92CSVyYnAsICh1cCkKKwlhZGQJJXI5LCAlcjEwCisJYWRjCSQwLCAlcjExCisJbW92CSVyMTAsIDgodXApCisJbW92CSVyMTEsIC04KHVwKQkJQyB1cFswXQorCWxlYQk4KHVwKSwgdXAJCUMgdXArKworCWRlYwlqCisJam56CUwobjMpCisKKwltb3YJLTMyKHVwKSwgJXJkeAorCW1vdgktMjQodXApLCAlcmJ4CisJeG9yCVIzMiglcmF4KSwgUjMyKCVyYXgpCisJYWRkCSVyYnAsICVyZHgKKwlhZGMJJXIxMCwgJXJieAorCWFkYwk4KHVwKSwgJXIxMQorCW1vdgklcmR4LCAocnApCisJbW92CSVyYngsIDgocnApCisJbW92CSVyMTEsIDE2KHJwKQorCWFkYwlSMzIoJXJheCksIFIzMiglcmF4KQorCWptcAlMKHJldCkKKworCUFMSUdOeAorTChuNCk6CW1vdgktMzIobXApLCAlcmF4CisJbXVsCXEwCisJbGVhCSglcmF4KSwgJXIxMQorCW1vdgktMjQobXApLCAlcmF4CisJbGVhCSglcmR4KSwgJXIxNAorCW11bAlxMAorCWxlYQkoJXJheCksICVyYnAKKwltb3YJLTE2KG1wKSwgJXJheAorCW1vdgktMTYodXApLCAlcjEwCisJbGVhCSglcmR4KSwgJXI5CisJbXVsCXEwCisJYWRkCSVyMTEsICVyMTAKKwlsZWEJKCVyYXgpLCAlcjExCisJbW92CS04KG1wKSwgJXJheAorCWFkYwklcjE0LCAlcmJwCisJbW92CS04KHVwKSwgJXJieAorCWxlYQkoJXJkeCksICVyMTQKKwlhZGMJJDAsICVyOQorCW11bAlxMAorCWFkZAklcmJwLCAlcmJ4CisJYWRjCSVyOSwgJXIxMQorCW1vdgklcmJ4LCAtOCh1cCkKKwltb3YJKHVwKSwgJXIxMAorCWFkYwkkMCwgJXIxNAorCWltdWwJdTBpbnYsICVyYngJCUMgbmV4dCBxIGxpbWIKKwlhZGQJJXIxMSwgJXIxMAorCWFkYwklcjE0LCAlcmF4CisJbW92CSVyMTAsICh1cCkKKwltb3YJOCh1cCksICVyMTAKKwlhZGMJJDAsICVyZHgKKwlhZGQJJXJheCwgJXIxMAorCW1vdgklcjEwLCA4KHVwKQorCWFkYwkkMCwgJXJkeAorCW1vdgklcmR4LCAtMTYodXApCQlDIHVwWzBdCisJbW92CSVyYngsIHEwCQlDIHByZXZpb3VzbHkgY29tcHV0ZWQgcSBsaW1iIC0+IHEwCisJbGVhCTgodXApLCB1cAkJQyB1cCsrCisJZGVjCWoKKwlqbnoJTChuNCkKKwlsZWEJMTYodXApLCB1cAorCWptcAlMKGFkZF9uKQorRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlMi9yc2gxYW9yc19uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmUyL3JzaDFhb3JzX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZWVkMzcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlMi9yc2gxYW9yc19uLmFzbQpAQCAtMCwwICsxLDE2OSBAQAorZG5sICBYODYtNjQgbXBuX3JzaDFhZGRfbiwgbXBuX3JzaDFzdWJfbiBvcHRpbWlzZWQgZm9yIEludGVsIENvbnJvZS9QZW5yeW4uCisKK2RubCAgQ29weXJpZ2h0IDIwMDMsIDIwMDUsIDIwMDksIDIwMTEsIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIEFNRCBLOCxLOQkgPworQyBBTUQgSzEwCSA/CitDIEludGVsIFA0CSA/CitDIEludGVsIGNvcmUyCSAzLjA1CitDIEludGVsIE5ITQkgMy4zCitDIEludGVsIFNCUgkgMi41CitDIEludGVsIGF0b20JID8KK0MgVklBIG5hbm8JID8KKworQyBUT0RPCitDICAqIExvb3BtaXggdG8gYXBwcm9hY2ggMi41IGMvbCBvbiBOSE0uCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsIGAlcmRpJykKK2RlZmluZShgdXAnLCBgJXJzaScpCitkZWZpbmUoYHZwJywgYCVyZHgnKQorZGVmaW5lKGBuJywgIGAlcmN4JykKKworaWZkZWYoYE9QRVJBVElPTl9yc2gxYWRkX24nLCBgCisJZGVmaW5lKEFERFNVQiwJICAgICAgYWRkKQorCWRlZmluZShBRENTQkIsCSAgICAgIGFkYykKKwlkZWZpbmUoZnVuY19uLAkgICAgICBtcG5fcnNoMWFkZF9uKQorCWRlZmluZShmdW5jX25jLAkgICAgICBtcG5fcnNoMWFkZF9uYyknKQoraWZkZWYoYE9QRVJBVElPTl9yc2gxc3ViX24nLCBgCisJZGVmaW5lKEFERFNVQiwJICAgICAgc3ViKQorCWRlZmluZShBRENTQkIsCSAgICAgIHNiYikKKwlkZWZpbmUoZnVuY19uLAkgICAgICBtcG5fcnNoMXN1Yl9uKQorCWRlZmluZShmdW5jX25jLAkgICAgICBtcG5fcnNoMXN1Yl9uYyknKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9yc2gxYWRkX24gbXBuX3JzaDFhZGRfbmMgbXBuX3JzaDFzdWJfbiBtcG5fcnNoMXN1Yl9uYykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMTYpCitQUk9MT0dVRShmdW5jX25jKQorCUZVTkNfRU5UUlkoNCkKK0lGRE9TKGAJbW92CTU2KCVyc3ApLCAlcjgJJykKKwlwdXNoCSVyYngKKwlwdXNoCSVyYnAKKworCW5lZwklcjgJCQlDIHNldCBDIGZsYWcgZnJvbSBwYXJhbWV0ZXIKKwltb3YJKHVwKSwgJXI4CisJQURDU0JCCSh2cCksICVyOAorCWptcAlMKGVudCkKK0VQSUxPR1VFKCkKKworCUFMSUdOKDE2KQorUFJPTE9HVUUoZnVuY19uKQorCUZVTkNfRU5UUlkoNCkKKwlwdXNoCSVyYngKKwlwdXNoCSVyYnAKKworCW1vdgkodXApLCAlcjgKKwlBRERTVUIJKHZwKSwgJXI4CitMKGVudCk6CXNiYglSMzIoJXJieCksIFIzMiglcmJ4KQlDIHNhdmUgY3kKKwltb3YJJXI4LCAlcmF4CisJYW5kCSQxLCBSMzIoJXJheCkJCUMgcmV0dXJuIHZhbHVlCisKKwlsZWEJKHVwLG4sOCksIHVwCisJbGVhCSh2cCxuLDgpLCB2cAorCWxlYQkocnAsbiw4KSwgcnAKKwltb3YJUjMyKG4pLCBSMzIoJXJicCkKKwluZWcJbgorCWFuZAkkMywgUjMyKCVyYnApCisJanoJTChiMCkKKwljbXAJJDIsIFIzMiglcmJwKQorCWphZQlMKG4xKQorCitMKGIxKToJbW92CSVyOCwgJXJicAorCWluYwluCisJanMJTCh0b3ApCisJam1wCUwoZW5kKQorCitMKG4xKToJam56CUwoYjMpCisJYWRkCVIzMiglcmJ4KSwgUjMyKCVyYngpCUMgcmVzdG9yZSBjeQorCW1vdgk4KHVwLG4sOCksICVyMTEKKwlBRENTQkIJOCh2cCxuLDgpLCAlcjExCisJc2JiCVIzMiglcmJ4KSwgUjMyKCVyYngpCUMgc2F2ZSBjeQorCW1vdgklcjgsICVyMTAKKwlhZGQJJC0yLCBuCisJam1wCUwoMikKKworTChiMyk6CWFkZAlSMzIoJXJieCksIFIzMiglcmJ4KQlDIHJlc3RvcmUgY3kKKwltb3YJOCh1cCxuLDgpLCAlcjEwCisJbW92CTE2KHVwLG4sOCksICVyMTEKKwlBRENTQkIJOCh2cCxuLDgpLCAlcjEwCisJQURDU0JCCTE2KHZwLG4sOCksICVyMTEKKwlzYmIJUjMyKCVyYngpLCBSMzIoJXJieCkJQyBzYXZlIGN5CisJbW92CSVyOCwgJXI5CisJZGVjCW4KKwlqbXAJTCgzKQorCitMKGIwKToJYWRkCVIzMiglcmJ4KSwgUjMyKCVyYngpCUMgcmVzdG9yZSBjeQorCW1vdgk4KHVwLG4sOCksICVyOQorCW1vdgkxNih1cCxuLDgpLCAlcjEwCisJbW92CTI0KHVwLG4sOCksICVyMTEKKwlBRENTQkIJOCh2cCxuLDgpLCAlcjkKKwlBRENTQkIJMTYodnAsbiw4KSwgJXIxMAorCUFEQ1NCQgkyNCh2cCxuLDgpLCAlcjExCisJc2JiCVIzMiglcmJ4KSwgUjMyKCVyYngpCUMgc2F2ZSBjeQorCWptcAlMKDQpCisKKwlBTElHTigxNikKKworTCh0b3ApOglhZGQJUjMyKCVyYngpLCBSMzIoJXJieCkJQyByZXN0b3JlIGN5CisJbW92CSh1cCxuLDgpLCAlcjgKKwltb3YJOCh1cCxuLDgpLCAlcjkKKwltb3YJMTYodXAsbiw4KSwgJXIxMAorCW1vdgkyNCh1cCxuLDgpLCAlcjExCisJQURDU0JCCSh2cCxuLDgpLCAlcjgKKwlBRENTQkIJOCh2cCxuLDgpLCAlcjkKKwlBRENTQkIJMTYodnAsbiw4KSwgJXIxMAorCUFEQ1NCQgkyNCh2cCxuLDgpLCAlcjExCisJc2JiCVIzMiglcmJ4KSwgUjMyKCVyYngpCUMgc2F2ZSBjeQorCXNocmQJJDEsICVyOCwgJXJicAorCW1vdgklcmJwLCAtOChycCxuLDgpCitMKDQpOglzaHJkCSQxLCAlcjksICVyOAorCW1vdgklcjgsIChycCxuLDgpCitMKDMpOglzaHJkCSQxLCAlcjEwLCAlcjkKKwltb3YJJXI5LCA4KHJwLG4sOCkKK0woMik6CXNocmQJJDEsICVyMTEsICVyMTAKKwltb3YJJXIxMCwgMTYocnAsbiw4KQorTCgxKToJYWRkCSQ0LCBuCisJbW92CSVyMTEsICVyYnAKKwlqcwlMKHRvcCkKKworTChlbmQpOglzaHJkCSQxLCAlcmJ4LCAlcmJwCisJbW92CSVyYnAsIC04KHJwKQorCXBvcAklcmJwCisJcG9wCSVyYngKKwlGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZTIvcnNoaWZ0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmUyL3JzaGlmdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU3OGE1MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmUyL3JzaGlmdC5hc20KQEAgLTAsMCArMSwxNDMgQEAKK2RubCAgeDg2LTY0IG1wbl9yc2hpZnQgb3B0aW1pc2VkIGZvciBDb25yb2UvUGVucnluIGFuZCBOZWhhbGVtLgorCitkbmwgIENvcHlyaWdodCAyMDA3LCAyMDA5LCAyMDExLCAyMDEyLCAyMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBBTUQgSzgsSzkKK0MgQU1EIEsxMAorQyBBTUQgYmQxCitDIEFNRCBiZDIKK0MgQU1EIGJkMworQyBBTUQgYmQ0CitDIEFNRCB6ZW4KK0MgQU1EIGJvYmNhdAorQyBBTUQgamFndWFyCitDIEludGVsIFA0CitDIEludGVsIGNvcmUyCSAxLjMyCitDIEludGVsIE5ITQkgMS4zMAkoZHJvcHMgdG8gMi41IGZvciBuID4gMjU2KQorQyBJbnRlbCBTQlIKK0MgSW50ZWwgSUJSCitDIEludGVsIEhXTAorQyBJbnRlbCBCV0wKK0MgSW50ZWwgU0tMCitDIEludGVsIGF0b20KK0MgSW50ZWwgU0xNCitDIFZJQSBuYW5vCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsCWAlcmRpJykKK2RlZmluZShgdXAnLAlgJXJzaScpCitkZWZpbmUoYG4nLAlgJXJkeCcpCitkZWZpbmUoYGNudCcsCWAlcmN4JykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMTYpCitQUk9MT0dVRShtcG5fcnNoaWZ0KQorCUZVTkNfRU5UUlkoNCkKKworCXhvcglSMzIoJXJheCksIFIzMiglcmF4KQorCisJdGVzdAkkMSwgUjgobikKKwlqbnoJTChieDEpCitMKGJ4MCk6CXRlc3QJJDIsIFI4KG4pCisJam56CUwoYjEwKQorCitMKGIwMCk6CWxlYQk4KHVwKSwgdXAKKwlsZWEJLTI0KHJwKSwgcnAKKwltb3YJLTgodXApLCAlcjEwCisJbW92CSh1cCksICVyMTEKKwlzaHJkCVI4KGNudCksICVyMTAsICVyYXgKKwltb3YJOCh1cCksICVyOAorCXNocgkkMiwgbgorCWptcAlMKDAwKQorCitMKGJ4MSk6CXRlc3QJJDIsIFI4KG4pCisJam56CUwoYjExKQorCitMKGIwMSk6CWxlYQkxNih1cCksIHVwCisJbGVhCS0xNihycCksIHJwCisJbW92CS0xNih1cCksICVyOQorCXNocmQJUjgoY250KSwgJXI5LCAlcmF4CisJc2hyCSQyLCBuCisJanoJTCgxKQorCW1vdgktOCh1cCksICVyMTAKKwltb3YJKHVwKSwgJXIxMQorCWptcAlMKDAxKQorCitMKGIxMCk6CWxlYQkyNCh1cCksIHVwCisJbGVhCS04KHJwKSwgcnAKKwltb3YJLTI0KHVwKSwgJXI4CisJbW92CS0xNih1cCksICVyOQorCXNocmQJUjgoY250KSwgJXI4LCAlcmF4CisJc2hyCSQyLCBuCisJanoJTCgyKQorCW1vdgktOCh1cCksICVyMTAKKwlqbXAJTCgxMCkKKworTChiMTEpOglsZWEJMzIodXApLCB1cAorCW1vdgktMzIodXApLCAlcjExCisJbW92CS0yNCh1cCksICVyOAorCW1vdgktMTYodXApLCAlcjkKKwlzaHJkCVI4KGNudCksICVyMTEsICVyYXgKKwlzaHIJJDIsIG4KKwlqeglMKGVuZCkKKworCUFMSUdOKDE2KQorTCh0b3ApOglzaHJkCVI4KGNudCksICVyOCwgJXIxMQorCW1vdgktOCh1cCksICVyMTAKKwltb3YJJXIxMSwgKHJwKQorTCgxMCk6CXNocmQJUjgoY250KSwgJXI5LCAlcjgKKwltb3YJKHVwKSwgJXIxMQorCW1vdgklcjgsIDgocnApCitMKDAxKToJc2hyZAlSOChjbnQpLCAlcjEwLCAlcjkKKwltb3YJOCh1cCksICVyOAorCW1vdgklcjksIDE2KHJwKQorTCgwMCk6CXNocmQJUjgoY250KSwgJXIxMSwgJXIxMAorCW1vdgkxNih1cCksICVyOQorCWFkZAkkMzIsIHVwCisJbW92CSVyMTAsIDI0KHJwKQorCWFkZAkkMzIsIHJwCisJZGVjCW4KKwlqbnoJTCh0b3ApCisKK0woZW5kKToJc2hyZAlSOChjbnQpLCAlcjgsICVyMTEKKwltb3YJJXIxMSwgKHJwKQorTCgyKToJc2hyZAlSOChjbnQpLCAlcjksICVyOAorCW1vdgklcjgsIDgocnApCitMKDEpOglzaHIJUjgoY250KSwgJXI5CisJbW92CSVyOSwgMTYocnApCisJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmUyL3NlY190YWJzZWxlY3QuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZTIvc2VjX3RhYnNlbGVjdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQzNjAzNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmUyL3NlY190YWJzZWxlY3QuYXNtCkBAIC0wLDAgKzEsMzcgQEAKK2RubCAgWDg2LTY0IG1wbl9zZWNfdGFic2VsZWN0LgorCitkbmwgIENvcHlyaWdodCAyMDEyLCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX3NlY190YWJzZWxlY3QpCitpbmNsdWRlX21wbihgeDg2XzY0L2Zhc3Rzc2Uvc2VjX3RhYnNlbGVjdC5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZTIvc3FyX2Jhc2VjYXNlLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmUyL3Nxcl9iYXNlY2FzZS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTExMmMxYgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmUyL3Nxcl9iYXNlY2FzZS5hc20KQEAgLTAsMCArMSw5ODQgQEAKK2RubCAgWDg2LTY0IG1wbl9zcXJfYmFzZWNhc2Ugb3B0aW1pc2VkIGZvciBJbnRlbCBOZWhhbGVtL1dlc3RtZXJlLgorZG5sICBJdCBhbHNvIHNlZW1zIGdvb2QgZm9yIENvbnJvZS9Xb2xmZGFsZS4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDA4LCAyMDExLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBjeWNsZXMvbGltYgltdWxfMgkJYWRkbXVsXzIJc3FyX2RpYWdfYWRkbHNoMQorQyBBTUQgSzgsSzkKK0MgQU1EIEsxMAorQyBBTUQgYnVsbAorQyBBTUQgcGlsZQorQyBBTUQgc3RlYW0KK0MgQU1EIGJvYmNhdAorQyBBTUQgamFndWFyCitDIEludGVsIFA0CitDIEludGVsIGNvcmUJIDQuOQkJNC4xOC00LjI1CQkgMy44NworQyBJbnRlbCBOSE0JIDMuOAkJNC4wNi00LjIJCSAzLjUKK0MgSW50ZWwgU0JSCitDIEludGVsIElCUgorQyBJbnRlbCBIV0wKK0MgSW50ZWwgQldMCitDIEludGVsIGF0b20KK0MgVklBIG5hbm8KKworQyBUaGUgaW5uZXIgbG9vcHMgb2YgdGhpcyBjb2RlIGFyZSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgYSBjb2RlIGdlbmVyYXRpb24gYW5kCitDIG9wdGltaXNhdGlvbiB0b29sIHN1aXRlIHdyaXR0ZW4gYnkgRGF2aWQgSGFydmV5IGFuZCBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK0MgQ29kZSBzdHJ1Y3R1cmU6CitDCitDCitDICAgICAgICBtXzIoMG00KSAgICAgICAgbV8yKDJtNCkgICAgICAgIG1fMigxbTQpICAgICAgICBtXzIoM200KQorQyAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfAorQyAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfAorQyAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfAorQyAgICAgICAgICBcfC8gICAgICAgICAgICAgXHwvICAgICAgICAgICAgIFx8LyAgICAgICAgICAgICBcfC8KK0MgICAgICAgICAgICAgIF9fX19fX19fX19fXyAgICAgICAgICAgICAgICAgICBfX19fX19fX19fX18KK0MgICAgICAgICAgICAgLyAgICAgICAgICAgIFwgICAgICAgICAgICAgICAgIC8gICAgICAgICAgICBcCitDICAgICAgICAgICAgXHwvICAgICAgICAgICAgXCAgICAgICAgICAgICAgIFx8LyAgICAgICAgICAgIFwKK0MgICAgICAgICBhbV8yKDNtNCkgICAgICAgYW1fMigxbTQpICAgICAgIGFtXzIoMG00KSAgICAgICBhbV8yKDJtNCkKK0MgICAgICAgICAgICBcICAgICAgICAgICAgL3xcICAgICAgICAgICAgICAgIFwgICAgICAgICAgICAvfFwKK0MgICAgICAgICAgICAgXF9fX19fX19fX19fXy8gICAgICAgICAgICAgICAgICBcX19fX19fX19fX19fLworQyAgICAgICAgICAgICAgICAgICAgICAgXCAgICAgICAgICAgICAgICAgICAgICAgIC8KK0MgICAgICAgICAgICAgICAgICAgICAgICBcICAgICAgICAgICAgICAgICAgICAgIC8KK0MgICAgICAgICAgICAgICAgICAgICAgICAgXCAgICAgICAgICAgICAgICAgICAgLworQyAgICAgICAgICAgICAgICAgICAgICAgdGFpbCgwbTIpICAgICAgICAgIHRhaWwoMW0yKQorQyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcICAgICAgICAgICAgICAvCitDICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcICAgICAgICAgICAgLworQyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcXJfZGlhZ19hZGRsc2gxCisKK0MgVE9ETworQyAgKiBUdW5lLiAgTm9uZSBkb25lIHNvIGZhci4KK0MgICogQ3VycmVudGx5IDI3NjEgYnl0ZXMsIG1ha2luZyBpdCBzbWFsbGVyIHdvdWxkIGJlIG5pY2UuCitDICAqIENvbnNpZGVyIHVzaW5nIGEganVtcHRhYi1iYXNlZCBlbnRyeSBzZXF1ZW5jZS4gIE9uZSBtaWdodCBldmVuIHVzZSBhIG1hc2stCitDICAgIGxlc3Mgc2VxdWVuY2UsIGlmIHRoZSB0YWJsZSBpcyBsYXJnZSBlbm91Z2ggdG8gc3VwcG9ydCB0dW5ldXAncyBuZWVkcy4KK0MgICAgVGhlIGNvZGUgd291bGQgYmUsIHVzaW5nIG5vbi1QSUMgY29kZSwKK0MgICAgICAgIGxlYSB0YWIoJXJpcCksJXJheDsgam1wICoobiwlcmF4KQorQyAgICBvciwKK0MgICAgICAgIGxlYSB0YWIoJXJpcCksJXJheDsgbGVhICglcmlwKSwlcmJ4OyBhZGQgKG4sJXJheCksJXJieDsgam1wIColcmJ4CitDICAgIHVzaW5nIFBJQyBjb2RlLiAgVGhlIHRhYmxlIGVudHJpZXMgd291bGQgYmUgTG4xLExuMixMbjMsTG0wLExtMSxMbTIsTG0zLC4uCitDICAgIHdpdGggdGhlIGxhc3QgZm91ciBlbnRyaWVzIHJlcGVhdGVkIGEgc2FmZSBudW1iZXIgb2YgdGltZXMuCitDICAqIENvbnNpZGVyIGV4cGFuZGluZyBmZWVkLWluIGNvZGUgaW4gb3JkZXIgdG8gYXZvaWQgemVyb2luZyByZWdpc3RlcnMuCitDICAqIFplcm8gY29uc2lzdGVudGx5IHdpdGggeG9yLgorQyAgKiBDaGVjayBpZiB1c2luZyAibGVhIChyZWcpLHJlZyIgc2hvdWxkIGJlIGRvbmUgaW4gbW9yZSBwbGFjZXM7IHdlIGhhdmUgc29tZQorQyAgICBleHBsaWNpdCAibW92ICVyYXgscmVnIiBub3cuCitDICAqIFRyeSB6ZXJvaW5nIHdpdGggeG9yIGluIG0yIGxvb3BzLgorQyAgKiBUcnkgcmUtcm9sbGluZyB0aGUgbTIgbG9vcHMgdG8gYXZvaWQgdGhlIGN1cnJlbnQgOSBpbnNuIGNvZGUgZHVwbGljYXRpb24KK0MgICAgYmV0d2VlbiBsb29wIGhlYWRlciBhbmQgd2luZC1kb3duIGNvZGUuCitDICAqIENvbnNpZGVyIGFkYyByZWcscmVnIGluc3RlYWQgb2YgYWRjICQwLHJlZyBpbiBtMiBsb29wcy4gIFRoaXMgc2F2ZSBhIGJ5dGUuCisKK0MgV2hlbiBwbGF5aW5nIHdpdGggcG9pbnRlcnMsIHNldCB0aGlzIHRvICQyIHRvIGZhbGwgYmFjayB0byBjb25zZXJ2YXRpdmUKK0MgaW5kZXhpbmcgaW4gd2luZC1kb3duIGNvZGUuCitkZWZpbmUoYEknLGAkMScpCisKK0MgRGVmaW5lIHRoaXMgdG8gJDEgdG8gdXNlIGxhdGUgbG9vcCBpbmRleCB2YXJpYWJsZSBhcyB6ZXJvLCAkMiB0byB1c2UgYW4KK0MgZXhwbGljaXQgJDAuCitkZWZpbmUoYFonLGAkMScpCisKK2RlZmluZShgcnAnLCAgICAgICBgJXJkaScpCitkZWZpbmUoYHVwJywgICAgICAgYCVyc2knKQorZGVmaW5lKGBuX3BhcmFtJywgIGAlcmR4JykKKworZGVmaW5lKGBuJywgICAgICAgIGAlcjgnKQorCitkZWZpbmUoYHYwJywgICAgICAgYCVyMTAnKQorZGVmaW5lKGB2MScsICAgICAgIGAlcjExJykKK2RlZmluZShgdzAnLCAgICAgICBgJXJieCcpCitkZWZpbmUoYHcxJywgICAgICAgYCVyY3gnKQorZGVmaW5lKGB3MicsICAgICAgIGAlcmJwJykKK2RlZmluZShgdzMnLCAgICAgICBgJXI5JykKK2RlZmluZShgaScsICAgICAgICBgJXIxMycpCisKK2RlZmluZShgWDAnLCAgICAgICBgJXIxMicpCitkZWZpbmUoYFgxJywgICAgICAgYCVyMTQnKQorCitDIHJheCByYnggcmN4IHJkeCByZGkgcnNpIHJicCByOCByOSByMTAgcjExIHIxMiByMTMgcjE0IHIxNQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitkZWZpbmUoYEFMSUdOeCcsIGBBTElHTigxNiknKQorCitkZWZpbmUoYE4nLCA4NSkKK2lmZGVmKGBOJywsYGRlZmluZShgTicsMCknKQorZGVmaW5lKGBNT1YnLCBgaWZlbHNlKGV2YWwoTiAmICQzKSwwLGBtb3YJJDEsICQyJyxgbGVhCSgkMSksICQyJyknKQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigzMikKK1BST0xPR1VFKG1wbl9zcXJfYmFzZWNhc2UpCisJRlVOQ19FTlRSWSgzKQorCisJY21wCSQ0LCBuX3BhcmFtCisJamwJTChzbWFsbCkKKworCXB1c2gJJXJieAorCXB1c2gJJXJicAorCXB1c2gJJXIxMgorCXB1c2gJJXIxMworCXB1c2gJJXIxNAorCisJbW92CSh1cCksIHYwCisJbW92CTgodXApLCAlcmF4CisJbW92CSVyYXgsIHYxCisKKwltb3YJJDEsIFIzMihuKQorCXN1YgluX3BhcmFtLCBuCQlDIG4gPSAtbl9wYXJhbSsxCisJcHVzaAluCisKKwlsZWEJKHVwLG5fcGFyYW0sOCksIHVwCisJbGVhCShycCxuX3BhcmFtLDgpLCBycAorCisJbXVsCXYwCisKKwl0ZXN0CSQxLCBSOChuKQorCWpueglMKGJ4MSkKKworTChieDApOgl0ZXN0CSQyLCBSOChuKQorCW1vdgklcmF4LCAocnAsbiw4KQorCWpueglMKGIxMCkKKworTChiMDApOglsZWEJKG4pLCBpCQkJQyBuID0gNSwgOSwgLi4uCisJbW92CSVyZHgsIHcxCQlDIEZJWE1FOiBVc2UgbGVhPworCXhvcglSMzIodzIpLCBSMzIodzIpCisJam1wCUwobTJlMCkKKworTChiMTApOglsZWEJMihuKSwgaQkJCUMgbiA9IDcsIDExLCAuLi4KKwltb3YJOCh1cCxuLDgpLCAlcmF4CisJbW92CSVyZHgsIHczCQlDIEZJWE1FOiBVc2UgbGVhPworCXhvcglSMzIodzApLCBSMzIodzApCisJeG9yCVIzMih3MSksIFIzMih3MSkKKwlqbXAJTChtMmUyKQorCitMKGJ4MSk6CXRlc3QJJDIsIFI4KG4pCisJbW92CSVyYXgsIChycCxuLDgpCisJanoJTChiMTEpCisKK0woYjAxKToJbGVhCTEobiksIGkJCQlDIG4gPSA2LCAxMCwgLi4uCisJbW92CSVyZHgsIHcwCQlDIEZJWE1FOiBVc2UgbGVhPworCXhvcglSMzIodzEpLCBSMzIodzEpCisJam1wCUwobTJlMSkKKworTChiMTEpOglsZWEJLTEobiksIGkJCUMgbiA9IDQsIDgsIDEyLCAuLi4KKwltb3YJJXJkeCwgdzIJCUMgRklYTUU6IFVzZSBsZWE/CisJeG9yCVIzMih3MyksIFIzMih3MykKKwlqbXAJTChtMmUzKQorCisKKwlBTElHTngKK0wobTJ0b3AxKToKKwltdWwJdjAKKwlhZGQJJXJheCwgdzMKKwltb3YJLTgodXAsaSw4KSwgJXJheAorCW1vdgl3MywgLTgocnAsaSw4KQorCWFkYwklcmR4LCB3MAorCWFkYwkkMCwgUjMyKHcxKQorCW11bAl2MQorCWFkZAklcmF4LCB3MAorCWFkYwklcmR4LCB3MQorTChtMmUxKTptb3YJJDAsIFIzMih3MikKKwltb3YJKHVwLGksOCksICVyYXgKKwltdWwJdjAKKwlhZGQJJXJheCwgdzAKKwltb3YJdzAsIChycCxpLDgpCisJYWRjCSVyZHgsIHcxCisJbW92CSh1cCxpLDgpLCAlcmF4CisJYWRjCSQwLCBSMzIodzIpCisJbXVsCXYxCisJYWRkCSVyYXgsIHcxCisJYWRjCSVyZHgsIHcyCisJbW92CTgodXAsaSw4KSwgJXJheAorCW11bAl2MAorCW1vdgkkMCwgUjMyKHczKQorCWFkZAklcmF4LCB3MQorCWFkYwklcmR4LCB3MgorCWFkYwkkMCwgUjMyKHczKQorCW1vdgk4KHVwLGksOCksICVyYXgKKwltdWwJdjEKKwlhZGQJJXJheCwgdzIKKwltb3YJdzEsIDgocnAsaSw4KQorCWFkYwklcmR4LCB3MworCW1vdgkkMCwgUjMyKHcwKQorCW1vdgkxNih1cCxpLDgpLCAlcmF4CisJbXVsCXYwCisJYWRkCSVyYXgsIHcyCisJbW92CTE2KHVwLGksOCksICVyYXgKKwlhZGMJJXJkeCwgdzMKKwlhZGMJJDAsIFIzMih3MCkKKwltdWwJdjEKKwltb3YJJDAsIFIzMih3MSkKKwlhZGQJJXJheCwgdzMKKwltb3YJMjQodXAsaSw4KSwgJXJheAorCW1vdgl3MiwgMTYocnAsaSw4KQorCWFkYwklcmR4LCB3MAorCWFkZAkkNCwgaQorCWpzCUwobTJ0b3AxKQorCisJbXVsCXYwCisJYWRkCSVyYXgsIHczCisJbW92CUkoLTgodXApLC04KHVwLGksOCkpLCAlcmF4CisJbW92CXczLCBJKC04KHJwKSwtOChycCxpLDgpKQorCWFkYwklcmR4LCB3MAorCWFkYwlSMzIodzEpLCBSMzIodzEpCisJbXVsCXYxCisJYWRkCXcwLCAlcmF4CisJYWRjCXcxLCAlcmR4CisJbW92CSVyYXgsIEkoKHJwKSwocnAsaSw4KSkKKwltb3YJJXJkeCwgSSg4KHJwKSw4KHJwLGksOCkpCisKKwlsZWEJMTYocnApLCBycAorCWFkZAkkMiwgbgkJCUMgZGVjcmVhc2UgfG58CisJam1wCUwoYW0ybzMpCisKKwlBTElHTngKK0wobTJ0b3AzKToKKwltdWwJdjAKKwlhZGQJJXJheCwgdzMKKwltb3YJLTgodXAsaSw4KSwgJXJheAorCW1vdgl3MywgLTgocnAsaSw4KQorCWFkYwklcmR4LCB3MAorCWFkYwkkMCwgUjMyKHcxKQorCW11bAl2MQorCWFkZAklcmF4LCB3MAorCWFkYwklcmR4LCB3MQorCW1vdgkkMCwgUjMyKHcyKQorCW1vdgkodXAsaSw4KSwgJXJheAorCW11bAl2MAorCWFkZAklcmF4LCB3MAorCW1vdgl3MCwgKHJwLGksOCkKKwlhZGMJJXJkeCwgdzEKKwltb3YJKHVwLGksOCksICVyYXgKKwlhZGMJJDAsIFIzMih3MikKKwltdWwJdjEKKwlhZGQJJXJheCwgdzEKKwlhZGMJJXJkeCwgdzIKKwltb3YJOCh1cCxpLDgpLCAlcmF4CisJbXVsCXYwCisJbW92CSQwLCBSMzIodzMpCisJYWRkCSVyYXgsIHcxCisJYWRjCSVyZHgsIHcyCisJYWRjCSQwLCBSMzIodzMpCisJbW92CTgodXAsaSw4KSwgJXJheAorCW11bAl2MQorCWFkZAklcmF4LCB3MgorCW1vdgl3MSwgOChycCxpLDgpCisJYWRjCSVyZHgsIHczCitMKG0yZTMpOm1vdgkkMCwgUjMyKHcwKQorCW1vdgkxNih1cCxpLDgpLCAlcmF4CisJbXVsCXYwCisJYWRkCSVyYXgsIHcyCisJbW92CTE2KHVwLGksOCksICVyYXgKKwlhZGMJJXJkeCwgdzMKKwlhZGMJJDAsIFIzMih3MCkKKwltdWwJdjEKKwltb3YJJDAsIFIzMih3MSkKKwlhZGQJJXJheCwgdzMKKwltb3YJMjQodXAsaSw4KSwgJXJheAorCW1vdgl3MiwgMTYocnAsaSw4KQorCWFkYwklcmR4LCB3MAorCWFkZAkkNCwgaQorCWpzCUwobTJ0b3AzKQorCisJbXVsCXYwCisJYWRkCSVyYXgsIHczCisJbW92CUkoLTgodXApLC04KHVwLGksOCkpLCAlcmF4CisJbW92CXczLCBJKC04KHJwKSwtOChycCxpLDgpKQorCWFkYwklcmR4LCB3MAorCWFkYwlSMzIodzEpLCBSMzIodzEpCisJbXVsCXYxCisJYWRkCXcwLCAlcmF4CisJYWRjCXcxLCAlcmR4CisJbW92CSVyYXgsIEkoKHJwKSwocnAsaSw4KSkKKwltb3YJJXJkeCwgSSg4KHJwKSw4KHJwLGksOCkpCisKKwlsZWEJMTYocnApLCBycAorCWFkZAkkMiwgbgkJCUMgZGVjcmVhc2UgfG58CisJY21wCSQtMSwgbgorCWp6CUwoY29yMSkJCQlDIGp1bXBzIGlmZiBlbnRyeSBuID0gNAorCitMKGFtMm8xKToKKwltb3YJLTgodXAsbiw4KSwgdjAKKwltb3YJKHVwLG4sOCksICVyYXgKKwltb3YJJXJheCwgdjEKKwlsZWEJMShuKSwgaQorCW11bAl2MAorCW1vdgklcmF4LCBYMQorCU1PVigJJXJkeCwgWDAsIDEyOCkKKwltb3YJKHJwLG4sOCksIHcxCisJeG9yCVIzMih3MiksIFIzMih3MikKKwltb3YJOCh1cCxuLDgpLCAlcmF4CisJeG9yCVIzMih3MyksIFIzMih3MykKKwlqbXAJTChsbzEpCisKKwlBTElHTngKK0woYW0ydG9wMSk6CisJbXVsCXYxCisJYWRkCXcwLCB3MQorCWFkYwklcmF4LCB3MgorCW1vdgkodXAsaSw4KSwgJXJheAorCU1PVigJJXJkeCwgdzMsIDEpCisJYWRjCSQwLCB3MworTChsbzEpOgltdWwJdjAKKwlhZGQJdzEsIFgxCisJbW92CVgxLCAtOChycCxpLDgpCisJYWRjCSVyYXgsIFgwCisJTU9WKAklcmR4LCBYMSwgMikKKwlhZGMJJDAsIFgxCisJbW92CSh1cCxpLDgpLCAlcmF4CisJbXVsCXYxCisJTU9WKAklcmR4LCB3MCwgNCkKKwltb3YJKHJwLGksOCksIHcxCisJYWRkCXcxLCB3MgorCWFkYwklcmF4LCB3MworCWFkYwkkMCwgdzAKKwltb3YJOCh1cCxpLDgpLCAlcmF4CisJbXVsCXYwCisJYWRkCXcyLCBYMAorCWFkYwklcmF4LCBYMQorCW1vdglYMCwgKHJwLGksOCkKKwlNT1YoCSVyZHgsIFgwLCA4KQorCWFkYwkkMCwgWDAKKwltb3YJOCh1cCxpLDgpLCAlcmF4CisJbW92CTgocnAsaSw4KSwgdzIKKwltdWwJdjEKKwlhZGQJdzIsIHczCisJYWRjCSVyYXgsIHcwCisJTU9WKAklcmR4LCB3MSwgMTYpCisJYWRjCSQwLCB3MQorCW1vdgkxNih1cCxpLDgpLCAlcmF4CisJbXVsCXYwCisJYWRkCXczLCBYMQorCW1vdglYMSwgOChycCxpLDgpCisJYWRjCSVyYXgsIFgwCisJTU9WKAklcmR4LCBYMSwgMzIpCisJbW92CTE2KHJwLGksOCksIHczCisJYWRjCSQwLCBYMQorCW1vdgkxNih1cCxpLDgpLCAlcmF4CisJbXVsCXYxCisJYWRkCXczLCB3MAorCU1PVigJJXJkeCwgdzIsIDY0KQorCWFkYwklcmF4LCB3MQorCW1vdgkyNCh1cCxpLDgpLCAlcmF4CisJYWRjCSQwLCB3MgorCW11bAl2MAorCWFkZAl3MCwgWDAKKwltb3YJWDAsIDE2KHJwLGksOCkKKwlNT1YoCSVyZHgsIFgwLCAxMjgpCisJYWRjCSVyYXgsIFgxCisJbW92CTI0KHVwLGksOCksICVyYXgKKwltb3YJMjQocnAsaSw4KSwgdzAKKwlhZGMJJDAsIFgwCisJYWRkCSQ0LCBpCisJam5jCUwoYW0ydG9wMSkKKworCW11bAl2MQorCWFkZAl3MCwgdzEKKwlhZGMJdzIsICVyYXgKKwlhZGMJWihpLCQwKSwgJXJkeAorCWFkZAl3MSwgWDEKKwlhZGMJWihpLCQwKSwgWDAKKwltb3YJWDEsIEkoLTgocnApLC04KHJwLGksOCkpCisJYWRkCVgwLCAlcmF4CisJbW92CSVyYXgsIEkoKHJwKSwocnAsaSw4KSkKKwlhZGMJWihpLCQwKSwgJXJkeAorCW1vdgklcmR4LCBJKDgocnApLDgocnAsaSw4KSkKKworCWxlYQkxNihycCksIHJwCisJYWRkCSQyLCBuCisKK0woYW0ybzMpOgorCW1vdgktOCh1cCxuLDgpLCB2MAorCW1vdgkodXAsbiw4KSwgJXJheAorCW1vdgklcmF4LCB2MQorCWxlYQktMShuKSwgaQorCW11bAl2MAorCW1vdgklcmF4LCBYMQorCU1PVigJJXJkeCwgWDAsIDgpCisJbW92CShycCxuLDgpLCB3MworCXhvcglSMzIodzApLCBSMzIodzApCisJeG9yCVIzMih3MSksIFIzMih3MSkKKwltb3YJOCh1cCxuLDgpLCAlcmF4CisJam1wCUwobG8zKQorCisJQUxJR054CitMKGFtMnRvcDMpOgorCW11bAl2MQorCWFkZAl3MCwgdzEKKwlhZGMJJXJheCwgdzIKKwltb3YJKHVwLGksOCksICVyYXgKKwlNT1YoCSVyZHgsIHczLCAxKQorCWFkYwkkMCwgdzMKKwltdWwJdjAKKwlhZGQJdzEsIFgxCisJbW92CVgxLCAtOChycCxpLDgpCisJYWRjCSVyYXgsIFgwCisJTU9WKAklcmR4LCBYMSwgMikKKwlhZGMJJDAsIFgxCisJbW92CSh1cCxpLDgpLCAlcmF4CisJbXVsCXYxCisJTU9WKAklcmR4LCB3MCwgNCkKKwltb3YJKHJwLGksOCksIHcxCisJYWRkCXcxLCB3MgorCWFkYwklcmF4LCB3MworCWFkYwkkMCwgdzAKKwltb3YJOCh1cCxpLDgpLCAlcmF4CisJbXVsCXYwCisJYWRkCXcyLCBYMAorCWFkYwklcmF4LCBYMQorCW1vdglYMCwgKHJwLGksOCkKKwlNT1YoCSVyZHgsIFgwLCA4KQorCWFkYwkkMCwgWDAKKwltb3YJOCh1cCxpLDgpLCAlcmF4CisJbW92CTgocnAsaSw4KSwgdzIKKwltdWwJdjEKKwlhZGQJdzIsIHczCisJYWRjCSVyYXgsIHcwCisJTU9WKAklcmR4LCB3MSwgMTYpCisJYWRjCSQwLCB3MQorCW1vdgkxNih1cCxpLDgpLCAlcmF4CitMKGxvMyk6CW11bAl2MAorCWFkZAl3MywgWDEKKwltb3YJWDEsIDgocnAsaSw4KQorCWFkYwklcmF4LCBYMAorCU1PVigJJXJkeCwgWDEsIDMyKQorCW1vdgkxNihycCxpLDgpLCB3MworCWFkYwkkMCwgWDEKKwltb3YJMTYodXAsaSw4KSwgJXJheAorCW11bAl2MQorCWFkZAl3MywgdzAKKwlNT1YoCSVyZHgsIHcyLCA2NCkKKwlhZGMJJXJheCwgdzEKKwltb3YJMjQodXAsaSw4KSwgJXJheAorCWFkYwkkMCwgdzIKKwltdWwJdjAKKwlhZGQJdzAsIFgwCisJbW92CVgwLCAxNihycCxpLDgpCisJTU9WKAklcmR4LCBYMCwgMTI4KQorCWFkYwklcmF4LCBYMQorCW1vdgkyNCh1cCxpLDgpLCAlcmF4CisJbW92CTI0KHJwLGksOCksIHcwCisJYWRjCSQwLCBYMAorCWFkZAkkNCwgaQorCWpuYwlMKGFtMnRvcDMpCisKKwltdWwJdjEKKwlhZGQJdzAsIHcxCisJYWRjCXcyLCAlcmF4CisJYWRjCVooaSwkMCksICVyZHgKKwlhZGQJdzEsIFgxCisJYWRjCVooaSwkMCksIFgwCisJbW92CVgxLCBJKC04KHJwKSwtOChycCxpLDgpKQorCWFkZAlYMCwgJXJheAorCW1vdgklcmF4LCBJKChycCksKHJwLGksOCkpCisJYWRjCVooaSwkMCksICVyZHgKKwltb3YJJXJkeCwgSSg4KHJwKSw4KHJwLGksOCkpCisKKwlsZWEJMTYocnApLCBycAorCWFkZAkkMiwgbgorCWNtcAkkLTEsIG4KKwlqbnoJTChhbTJvMSkKKworTChjb3IxKTpwb3AJbgorCW1vdgklcmR4LCB3MworCW1vdgktMTYodXApLCB2MAorCW1vdgktOCh1cCksICVyYXgKKwltdWwJdjAKKwlhZGQJdzMsICVyYXgKKwlhZGMJJDAsICVyZHgKKwltb3YJJXJheCwgLTgocnApCisJbW92CSVyZHgsIChycCkKKwlqbXAJTChzcXJfZGlhZ19hZGRsc2gxKQorCisJQUxJR054CitMKG0ydG9wMik6CitMKG0yZTIpOm11bAl2MAorCWFkZAklcmF4LCB3MworCW1vdgktOCh1cCxpLDgpLCAlcmF4CisJbW92CXczLCAtOChycCxpLDgpCisJYWRjCSVyZHgsIHcwCisJYWRjCSQwLCBSMzIodzEpCisJbXVsCXYxCisJYWRkCSVyYXgsIHcwCisJYWRjCSVyZHgsIHcxCisJbW92CSQwLCBSMzIodzIpCisJbW92CSh1cCxpLDgpLCAlcmF4CisJbXVsCXYwCisJYWRkCSVyYXgsIHcwCisJbW92CXcwLCAocnAsaSw4KQorCWFkYwklcmR4LCB3MQorCW1vdgkodXAsaSw4KSwgJXJheAorCWFkYwkkMCwgUjMyKHcyKQorCW11bAl2MQorCWFkZAklcmF4LCB3MQorCWFkYwklcmR4LCB3MgorCW1vdgk4KHVwLGksOCksICVyYXgKKwltdWwJdjAKKwltb3YJJDAsIFIzMih3MykKKwlhZGQJJXJheCwgdzEKKwlhZGMJJXJkeCwgdzIKKwlhZGMJJDAsIFIzMih3MykKKwltb3YJOCh1cCxpLDgpLCAlcmF4CisJbXVsCXYxCisJYWRkCSVyYXgsIHcyCisJbW92CXcxLCA4KHJwLGksOCkKKwlhZGMJJXJkeCwgdzMKKwltb3YJJDAsIFIzMih3MCkKKwltb3YJMTYodXAsaSw4KSwgJXJheAorCW11bAl2MAorCWFkZAklcmF4LCB3MgorCW1vdgkxNih1cCxpLDgpLCAlcmF4CisJYWRjCSVyZHgsIHczCisJYWRjCSQwLCBSMzIodzApCisJbXVsCXYxCisJbW92CSQwLCBSMzIodzEpCisJYWRkCSVyYXgsIHczCisJbW92CTI0KHVwLGksOCksICVyYXgKKwltb3YJdzIsIDE2KHJwLGksOCkKKwlhZGMJJXJkeCwgdzAKKwlhZGQJJDQsIGkKKwlqcwlMKG0ydG9wMikKKworCW11bAl2MAorCWFkZAklcmF4LCB3MworCW1vdglJKC04KHVwKSwtOCh1cCxpLDgpKSwgJXJheAorCW1vdgl3MywgSSgtOChycCksLTgocnAsaSw4KSkKKwlhZGMJJXJkeCwgdzAKKwlhZGMJUjMyKHcxKSwgUjMyKHcxKQorCW11bAl2MQorCWFkZAl3MCwgJXJheAorCWFkYwl3MSwgJXJkeAorCW1vdgklcmF4LCBJKChycCksKHJwLGksOCkpCisJbW92CSVyZHgsIEkoOChycCksOChycCxpLDgpKQorCisJbGVhCTE2KHJwKSwgcnAKKwlhZGQJJDIsIG4JCQlDIGRlY3JlYXNlIHxufAorCWptcAlMKGFtMm8wKQorCisJQUxJR054CitMKG0ydG9wMCk6CisJbXVsCXYwCisJYWRkCSVyYXgsIHczCisJbW92CS04KHVwLGksOCksICVyYXgKKwltb3YJdzMsIC04KHJwLGksOCkKKwlhZGMJJXJkeCwgdzAKKwlhZGMJJDAsIFIzMih3MSkKKwltdWwJdjEKKwlhZGQJJXJheCwgdzAKKwlhZGMJJXJkeCwgdzEKKwltb3YJJDAsIFIzMih3MikKKwltb3YJKHVwLGksOCksICVyYXgKKwltdWwJdjAKKwlhZGQJJXJheCwgdzAKKwltb3YJdzAsIChycCxpLDgpCisJYWRjCSVyZHgsIHcxCisJbW92CSh1cCxpLDgpLCAlcmF4CisJYWRjCSQwLCBSMzIodzIpCisJbXVsCXYxCisJYWRkCSVyYXgsIHcxCisJYWRjCSVyZHgsIHcyCitMKG0yZTApOm1vdgk4KHVwLGksOCksICVyYXgKKwltdWwJdjAKKwltb3YJJDAsIFIzMih3MykKKwlhZGQJJXJheCwgdzEKKwlhZGMJJXJkeCwgdzIKKwlhZGMJJDAsIFIzMih3MykKKwltb3YJOCh1cCxpLDgpLCAlcmF4CisJbXVsCXYxCisJYWRkCSVyYXgsIHcyCisJbW92CXcxLCA4KHJwLGksOCkKKwlhZGMJJXJkeCwgdzMKKwltb3YJJDAsIFIzMih3MCkKKwltb3YJMTYodXAsaSw4KSwgJXJheAorCW11bAl2MAorCWFkZAklcmF4LCB3MgorCW1vdgkxNih1cCxpLDgpLCAlcmF4CisJYWRjCSVyZHgsIHczCisJYWRjCSQwLCBSMzIodzApCisJbXVsCXYxCisJbW92CSQwLCBSMzIodzEpCisJYWRkCSVyYXgsIHczCisJbW92CTI0KHVwLGksOCksICVyYXgKKwltb3YJdzIsIDE2KHJwLGksOCkKKwlhZGMJJXJkeCwgdzAKKwlhZGQJJDQsIGkKKwlqcwlMKG0ydG9wMCkKKworCW11bAl2MAorCWFkZAklcmF4LCB3MworCW1vdglJKC04KHVwKSwtOCh1cCxpLDgpKSwgJXJheAorCW1vdgl3MywgSSgtOChycCksLTgocnAsaSw4KSkKKwlhZGMJJXJkeCwgdzAKKwlhZGMJUjMyKHcxKSwgUjMyKHcxKQorCW11bAl2MQorCWFkZAl3MCwgJXJheAorCWFkYwl3MSwgJXJkeAorCW1vdgklcmF4LCBJKChycCksKHJwLGksOCkpCisJbW92CSVyZHgsIEkoOChycCksOChycCxpLDgpKQorCisJbGVhCTE2KHJwKSwgcnAKKwlhZGQJJDIsIG4JCQlDIGRlY3JlYXNlIHxufAorCWNtcAkkLTIsIG4KKwlqeglMKGNvcjIpCQkJQyBqdW1wcyBpZmYgZW50cnkgbiA9IDUKKworTChhbTJvMik6CisJbW92CS04KHVwLG4sOCksIHYwCisJbW92CSh1cCxuLDgpLCAlcmF4CisJbW92CSVyYXgsIHYxCisJbGVhCS0yKG4pLCBpCisJbXVsCXYwCisJbW92CSVyYXgsIFgwCisJTU9WKAklcmR4LCBYMSwgMzIpCisJbW92CShycCxuLDgpLCB3MAorCXhvcglSMzIodzEpLCBSMzIodzEpCisJeG9yCVIzMih3MiksIFIzMih3MikKKwltb3YJOCh1cCxuLDgpLCAlcmF4CisJam1wCUwobG8yKQorCisJQUxJR054CitMKGFtMnRvcDIpOgorCW11bAl2MQorCWFkZAl3MCwgdzEKKwlhZGMJJXJheCwgdzIKKwltb3YJKHVwLGksOCksICVyYXgKKwlNT1YoCSVyZHgsIHczLCAxKQorCWFkYwkkMCwgdzMKKwltdWwJdjAKKwlhZGQJdzEsIFgxCisJbW92CVgxLCAtOChycCxpLDgpCisJYWRjCSVyYXgsIFgwCisJTU9WKAklcmR4LCBYMSwgMikKKwlhZGMJJDAsIFgxCisJbW92CSh1cCxpLDgpLCAlcmF4CisJbXVsCXYxCisJTU9WKAklcmR4LCB3MCwgNCkKKwltb3YJKHJwLGksOCksIHcxCisJYWRkCXcxLCB3MgorCWFkYwklcmF4LCB3MworCWFkYwkkMCwgdzAKKwltb3YJOCh1cCxpLDgpLCAlcmF4CisJbXVsCXYwCisJYWRkCXcyLCBYMAorCWFkYwklcmF4LCBYMQorCW1vdglYMCwgKHJwLGksOCkKKwlNT1YoCSVyZHgsIFgwLCA4KQorCWFkYwkkMCwgWDAKKwltb3YJOCh1cCxpLDgpLCAlcmF4CisJbW92CTgocnAsaSw4KSwgdzIKKwltdWwJdjEKKwlhZGQJdzIsIHczCisJYWRjCSVyYXgsIHcwCisJTU9WKAklcmR4LCB3MSwgMTYpCisJYWRjCSQwLCB3MQorCW1vdgkxNih1cCxpLDgpLCAlcmF4CisJbXVsCXYwCisJYWRkCXczLCBYMQorCW1vdglYMSwgOChycCxpLDgpCisJYWRjCSVyYXgsIFgwCisJTU9WKAklcmR4LCBYMSwgMzIpCisJbW92CTE2KHJwLGksOCksIHczCisJYWRjCSQwLCBYMQorCW1vdgkxNih1cCxpLDgpLCAlcmF4CisJbXVsCXYxCisJYWRkCXczLCB3MAorCU1PVigJJXJkeCwgdzIsIDY0KQorCWFkYwklcmF4LCB3MQorCW1vdgkyNCh1cCxpLDgpLCAlcmF4CisJYWRjCSQwLCB3MgorTChsbzIpOgltdWwJdjAKKwlhZGQJdzAsIFgwCisJbW92CVgwLCAxNihycCxpLDgpCisJTU9WKAklcmR4LCBYMCwgMTI4KQorCWFkYwklcmF4LCBYMQorCW1vdgkyNCh1cCxpLDgpLCAlcmF4CisJbW92CTI0KHJwLGksOCksIHcwCisJYWRjCSQwLCBYMAorCWFkZAkkNCwgaQorCWpuYwlMKGFtMnRvcDIpCisKKwltdWwJdjEKKwlhZGQJdzAsIHcxCisJYWRjCXcyLCAlcmF4CisJYWRjCVooaSwkMCksICVyZHgKKwlhZGQJdzEsIFgxCisJYWRjCVooaSwkMCksIFgwCisJbW92CVgxLCBJKC04KHJwKSwtOChycCxpLDgpKQorCWFkZAlYMCwgJXJheAorCW1vdgklcmF4LCBJKChycCksKHJwLGksOCkpCisJYWRjCVooaSwkMCksICVyZHgKKwltb3YJJXJkeCwgSSg4KHJwKSw4KHJwLGksOCkpCisKKwlsZWEJMTYocnApLCBycAorCWFkZAkkMiwgbgorCitMKGFtMm8wKToKKwltb3YJLTgodXAsbiw4KSwgdjAKKwltb3YJKHVwLG4sOCksICVyYXgKKwltb3YJJXJheCwgdjEKKwlsZWEJMChuKSwgaQorCW11bAl2MAorCW1vdgklcmF4LCBYMAorCU1PVigJJXJkeCwgWDEsIDIpCisJeG9yCVIzMih3MCksIFIzMih3MCkKKwltb3YJKHJwLG4sOCksIHcyCisJeG9yCVIzMih3MyksIFIzMih3MykKKwlqbXAJTChsbzApCisKKwlBTElHTngKK0woYW0ydG9wMCk6CisJbXVsCXYxCisJYWRkCXcwLCB3MQorCWFkYwklcmF4LCB3MgorCW1vdgkodXAsaSw4KSwgJXJheAorCU1PVigJJXJkeCwgdzMsIDEpCisJYWRjCSQwLCB3MworCW11bAl2MAorCWFkZAl3MSwgWDEKKwltb3YJWDEsIC04KHJwLGksOCkKKwlhZGMJJXJheCwgWDAKKwlNT1YoCSVyZHgsIFgxLCAyKQorCWFkYwkkMCwgWDEKKwltb3YJKHVwLGksOCksICVyYXgKKwltdWwJdjEKKwlNT1YoCSVyZHgsIHcwLCA0KQorCW1vdgkocnAsaSw4KSwgdzEKKwlhZGQJdzEsIHcyCisJYWRjCSVyYXgsIHczCisJYWRjCSQwLCB3MAorTChsbzApOgltb3YJOCh1cCxpLDgpLCAlcmF4CisJbXVsCXYwCisJYWRkCXcyLCBYMAorCWFkYwklcmF4LCBYMQorCW1vdglYMCwgKHJwLGksOCkKKwlNT1YoCSVyZHgsIFgwLCA4KQorCWFkYwkkMCwgWDAKKwltb3YJOCh1cCxpLDgpLCAlcmF4CisJbW92CTgocnAsaSw4KSwgdzIKKwltdWwJdjEKKwlhZGQJdzIsIHczCisJYWRjCSVyYXgsIHcwCisJTU9WKAklcmR4LCB3MSwgMTYpCisJYWRjCSQwLCB3MQorCW1vdgkxNih1cCxpLDgpLCAlcmF4CisJbXVsCXYwCisJYWRkCXczLCBYMQorCW1vdglYMSwgOChycCxpLDgpCisJYWRjCSVyYXgsIFgwCisJTU9WKAklcmR4LCBYMSwgMzIpCisJbW92CTE2KHJwLGksOCksIHczCisJYWRjCSQwLCBYMQorCW1vdgkxNih1cCxpLDgpLCAlcmF4CisJbXVsCXYxCisJYWRkCXczLCB3MAorCU1PVigJJXJkeCwgdzIsIDY0KQorCWFkYwklcmF4LCB3MQorCW1vdgkyNCh1cCxpLDgpLCAlcmF4CisJYWRjCSQwLCB3MgorCW11bAl2MAorCWFkZAl3MCwgWDAKKwltb3YJWDAsIDE2KHJwLGksOCkKKwlNT1YoCSVyZHgsIFgwLCAxMjgpCisJYWRjCSVyYXgsIFgxCisJbW92CTI0KHVwLGksOCksICVyYXgKKwltb3YJMjQocnAsaSw4KSwgdzAKKwlhZGMJJDAsIFgwCisJYWRkCSQ0LCBpCisJam5jCUwoYW0ydG9wMCkKKworCW11bAl2MQorCWFkZAl3MCwgdzEKKwlhZGMJdzIsICVyYXgKKwlhZGMJWihpLCQwKSwgJXJkeAorCWFkZAl3MSwgWDEKKwlhZGMJWihpLCQwKSwgWDAKKwltb3YJWDEsIEkoLTgocnApLC04KHJwLGksOCkpCisJYWRkCVgwLCAlcmF4CisJbW92CSVyYXgsIEkoKHJwKSwocnAsaSw4KSkKKwlhZGMJWihpLCQwKSwgJXJkeAorCW1vdgklcmR4LCBJKDgocnApLDgocnAsaSw4KSkKKworCWxlYQkxNihycCksIHJwCisJYWRkCSQyLCBuCisJY21wCSQtMiwgbgorCWpueglMKGFtMm8yKQorCitMKGNvcjIpOnBvcAluCisJbW92CS0yNCh1cCksIHYwCisJbW92CSVyYXgsIHcyCisJbW92CSVyZHgsIHcwCisJbW92CS0xNih1cCksICVyYXgKKwltb3YJJXJheCwgdjEKKwltdWwJdjAKKwltb3YJJXJheCwgWDAKKwlNT1YoCSVyZHgsIFgxLCAzMikKKwltb3YJLTgodXApLCAlcmF4CisJbXVsCXYwCisJYWRkCXcyLCBYMAorCW1vdglYMCwgLTE2KHJwKQorCU1PVigJJXJkeCwgWDAsIDEyOCkKKwlhZGMJJXJheCwgWDEKKwltb3YJLTgodXApLCAlcmF4CisJYWRjCSQwLCBYMAorCW11bAl2MQorCWFkZAl3MCwgWDEKKwlhZGMJJDAsIFgwCisJbW92CVgxLCAtOChycCkKKwlhZGQJWDAsICVyYXgKKwltb3YJJXJheCwgKHJwKQorCWFkYwkkMCwgJXJkeAorCW1vdgklcmR4LCA4KHJwKQorCWxlYQk4KHJwKSwgcnAKKworTChzcXJfZGlhZ19hZGRsc2gxKToKKwltb3YJLTgodXAsbiw4KSwgJXJheAorCXNobAluCisJeG9yCVIzMiglcmJ4KSwgUjMyKCVyYngpCisJbXVsCSVyYXgKKwltb3YJOChycCxuLDgpLCAlcjExCisJbGVhCSglcmR4KSwgJXIxMAorCW1vdgkxNihycCxuLDgpLCAlcjkKKwlhZGQJJXIxMSwgJXIxMQorCWptcAlMKGRtKQorCisJQUxJR054CitMKGR0b3ApOm11bAklcmF4CisJYWRkCSVyMTEsICVyMTAKKwltb3YJOChycCxuLDgpLCAlcjExCisJbW92CSVyMTAsIC04KHJwLG4sOCkKKwlhZGMJJXI5LCAlcmF4CisJbGVhCSglcmR4LCVyYngpLCAlcjEwCisJbW92CTE2KHJwLG4sOCksICVyOQorCWFkYwklcjExLCAlcjExCitMKGRtKToJbW92CSVyYXgsIChycCxuLDgpCisJbW92CSh1cCxuLDQpLCAlcmF4CisJYWRjCSVyOSwgJXI5CisJc2V0YwlSOCglcmJ4KQorCWFkZAkkMiwgbgorCWpzCUwoZHRvcCkKKworCW11bAklcmF4CisJYWRkCSVyMTEsICVyMTAKKwltb3YJJXIxMCwgLTgocnApCisJYWRjCSVyOSwgJXJheAorCWxlYQkoJXJkeCwlcmJ4KSwgJXIxMAorCW1vdgklcmF4LCAocnApCisJYWRjCSQwLCAlcjEwCisJbW92CSVyMTAsIDgocnApCisKKwlwb3AJJXIxNAorCXBvcAklcjEzCisJcG9wCSVyMTIKKwlwb3AJJXJicAorCXBvcAklcmJ4CisJRlVOQ19FWElUKCkKKwlyZXQKKworCUFMSUdOKDE2KQorTChzbWFsbCk6CisJbW92CSh1cCksICVyYXgKKwljbXAJJDIsIG5fcGFyYW0KKwlqYWUJTChndDEpCitMKG4xKToKKwltdWwJJXJheAorCW1vdgklcmF4LCAocnApCisJbW92CSVyZHgsIDgocnApCisJRlVOQ19FWElUKCkKKwlyZXQKKworTChndDEpOglqbmUJTChndDIpCitMKG4yKToJbW92CSVyYXgsICVyOAorCW11bAklcmF4CisJbW92CTgodXApLCAlcjExCisJbW92CSVyYXgsIChycCkKKwltb3YJJXIxMSwgJXJheAorCW1vdgklcmR4LCAlcjkKKwltdWwJJXJheAorCW1vdgklcmF4LCAlcjEwCisJbW92CSVyMTEsICVyYXgKKwltb3YJJXJkeCwgJXIxMQorCW11bAklcjgKKwl4b3IJJXI4LCAlcjgKKwlhZGQJJXJheCwgJXI5CisJYWRjCSVyZHgsICVyMTAKKwlhZGMJJXI4LCAlcjExCisJYWRkCSVyYXgsICVyOQorCW1vdgklcjksIDgocnApCisJYWRjCSVyZHgsICVyMTAKKwltb3YJJXIxMCwgMTYocnApCisJYWRjCSVyOCwgJXIxMQorCW1vdgklcjExLCAyNChycCkKKwlGVU5DX0VYSVQoKQorCXJldAorCitMKGd0Mik6CitMKG4zKToJbW92CSVyYXgsICVyMTAKKwltdWwJJXJheAorCW1vdgk4KHVwKSwgJXIxMQorCW1vdgklcmF4LCAocnApCisJbW92CSVyMTEsICVyYXgKKwltb3YJJXJkeCwgOChycCkKKwltdWwJJXJheAorCW1vdgkxNih1cCksICVyY3gKKwltb3YJJXJheCwgMTYocnApCisJbW92CSVyY3gsICVyYXgKKwltb3YJJXJkeCwgMjQocnApCisJbXVsCSVyYXgKKwltb3YJJXJheCwgMzIocnApCisJbW92CSVyZHgsIDQwKHJwKQorCisJbW92CSVyMTEsICVyYXgKKwltdWwJJXIxMAorCW1vdgklcmF4LCAlcjgKKwltb3YJJXJjeCwgJXJheAorCW1vdgklcmR4LCAlcjkKKwltdWwJJXIxMAorCXhvcgklcjEwLCAlcjEwCisJYWRkCSVyYXgsICVyOQorCW1vdgklcjExLCAlcmF4CisJbW92CSVyMTAsICVyMTEKKwlhZGMJJXJkeCwgJXIxMAorCisJbXVsCSVyY3gKKwlhZGQJJXJheCwgJXIxMAorCWFkYwklcjExLCAlcmR4CisJYWRkCSVyOCwgJXI4CisJYWRjCSVyOSwgJXI5CisJYWRjCSVyMTAsICVyMTAKKwlhZGMJJXJkeCwgJXJkeAorCWFkYwklcjExLCAlcjExCisJYWRkCSVyOCwgOChycCkKKwlhZGMJJXI5LCAxNihycCkKKwlhZGMJJXIxMCwgMjQocnApCisJYWRjCSVyZHgsIDMyKHJwKQorCWFkYwklcjExLCA0MChycCkKKwlGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZTIvc3VibHNoMV9uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmUyL3N1YmxzaDFfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY0ODhmYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmUyL3N1YmxzaDFfbi5hc20KQEAgLTAsMCArMSw0NyBAQAorZG5sICBBTUQ2NCBtcG5fc3VibHNoMV9uIG9wdGltaXNlZCBmb3IgQ29yZSAyIGFuZCBDb3JlIGlOLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3Jiam9ybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAwOCwgMjAxMC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK2RlZmluZShMU0gsIDEpCitkZWZpbmUoUlNILCA2MykKKworZGVmaW5lKEFERFNVQiwJc3ViKQorZGVmaW5lKEFEQ1NCQiwJc2JiKQorZGVmaW5lKGZ1bmMsCW1wbl9zdWJsc2gxX24pCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX3N1YmxzaDFfbikKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworaW5jbHVkZV9tcG4oYHg4Nl82NC9jb3JlMi9zdWJsc2hDX24uYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmUyL3N1YmxzaDJfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlMi9zdWJsc2gyX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYjFlMjgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlMi9zdWJsc2gyX24uYXNtCkBAIC0wLDAgKzEsNDcgQEAKK2RubCAgQU1ENjQgbXBuX3N1YmxzaDJfbiBvcHRpbWlzZWQgZm9yIENvcmUgMiBhbmQgQ29yZSBpTi4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDgsIDIwMTAtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitkZWZpbmUoTFNILCAyKQorZGVmaW5lKFJTSCwgNjIpCisKK2RlZmluZShBRERTVUIsCXN1YikKK2RlZmluZShBRENTQkIsCXNiYikKK2RlZmluZShmdW5jLAltcG5fc3VibHNoMl9uKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9zdWJsc2gyX24pCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK2luY2x1ZGVfbXBuKGB4ODZfNjQvY29yZTIvc3VibHNoQ19uLmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlMi9zdWJsc2hDX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZTIvc3VibHNoQ19uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzI3MDBkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZTIvc3VibHNoQ19uLmFzbQpAQCAtMCwwICsxLDE1OCBAQAorZG5sICBBTUQ2NCBtcG5fc3VibHNoQ19uIC0tIHJwW10gPSB1cFtdIC0gKHZwW10gPDwgQyksIG9wdGltaXNlZCBmb3IgQ29yZSAyIGFuZAorZG5sICBDb3JlIGlOLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3Jiam9ybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAwOCwgMjAxMC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBBTUQgSzgsSzkJIDQuMjUKK0MgQU1EIEsxMAkgPworQyBJbnRlbCBQNAkgPworQyBJbnRlbCBjb3JlMgkgMworQyBJbnRlbCBOSE0JIDMuMQorQyBJbnRlbCBTQlIJIDIuNDcKK0MgSW50ZWwgYXRvbQkgPworQyBWSUEgbmFubwkgPworCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLGAlcmRpJykKK2RlZmluZShgdXAnLGAlcnNpJykKK2RlZmluZShgdnAnLGAlcmR4JykKK2RlZmluZShgbicsIGAlcmN4JykKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oOCkKK1BST0xPR1VFKGZ1bmMpCisJRlVOQ19FTlRSWSg0KQorCXB1c2gJJXJieAorCXB1c2gJJXIxMgorCisJbW92CVIzMiglcmN4KSwgUjMyKCVyYXgpCisJbGVhCTI0KHVwLG4sOCksIHVwCisJbGVhCTI0KHZwLG4sOCksIHZwCisJbGVhCTI0KHJwLG4sOCksIHJwCisJbmVnCW4KKworCXhvcglSMzIoJXIxMSksIFIzMiglcjExKQorCisJbW92CS0yNCh2cCxuLDgpLCAlcjgJQyBkbyBmaXJzdCBsaW1iIGVhcmx5CisJc2hyZAkkUlNILCAlcjgsICVyMTEKKworCWFuZAkkMywgUjMyKCVyYXgpCisJamUJTChiMCkKKwljbXAJJDIsIFIzMiglcmF4KQorCWpjCUwoYjEpCisJamUJTChiMikKKworTChiMyk6CW1vdgktMTYodnAsbiw4KSwgJXI5CisJc2hyZAkkUlNILCAlcjksICVyOAorCW1vdgktOCh2cCxuLDgpLCAlcjEwCisJc2hyZAkkUlNILCAlcjEwLCAlcjkKKwltb3YJLTI0KHVwLG4sOCksICVyMTIKKwlBRERTVUIJJXIxMSwgJXIxMgorCW1vdgklcjEyLCAtMjQocnAsbiw4KQorCW1vdgktMTYodXAsbiw4KSwgJXIxMgorCUFEQ1NCQgklcjgsICVyMTIKKwltb3YJJXIxMiwgLTE2KHJwLG4sOCkKKwltb3YJLTgodXAsbiw4KSwgJXIxMgorCUFEQ1NCQgklcjksICVyMTIKKwltb3YJJXIxMiwgLTgocnAsbiw4KQorCW1vdgklcjEwLCAlcjExCisJc2JiCVIzMiglcmF4KSwgUjMyKCVyYXgpCUMgc2F2ZSBjeQorCWFkZAkkMywgbgorCWpzCUwodG9wKQorCWptcAlMKGVuZCkKKworTChiMSk6CW1vdgktMjQodXAsbiw4KSwgJXIxMgorCUFERFNVQgklcjExLCAlcjEyCisJbW92CSVyMTIsIC0yNChycCxuLDgpCisJbW92CSVyOCwgJXIxMQorCXNiYglSMzIoJXJheCksIFIzMiglcmF4KQlDIHNhdmUgY3kKKwlpbmMJbgorCWpzCUwodG9wKQorCWptcAlMKGVuZCkKKworTChiMik6CW1vdgktMTYodnAsbiw4KSwgJXI5CisJc2hyZAkkUlNILCAlcjksICVyOAorCW1vdgktMjQodXAsbiw4KSwgJXIxMgorCUFERFNVQgklcjExLCAlcjEyCisJbW92CSVyMTIsIC0yNChycCxuLDgpCisJbW92CS0xNih1cCxuLDgpLCAlcjEyCisJQURDU0JCCSVyOCwgJXIxMgorCW1vdgklcjEyLCAtMTYocnAsbiw4KQorCW1vdgklcjksICVyMTEKKwlzYmIJUjMyKCVyYXgpLCBSMzIoJXJheCkJQyBzYXZlIGN5CisJYWRkCSQyLCBuCisJanMJTCh0b3ApCisJam1wCUwoZW5kKQorCisJQUxJR04oMTYpCitMKHRvcCk6CW1vdgktMjQodnAsbiw4KSwgJXI4CisJc2hyZAkkUlNILCAlcjgsICVyMTEKK0woYjApOgltb3YJLTE2KHZwLG4sOCksICVyOQorCXNocmQJJFJTSCwgJXI5LCAlcjgKKwltb3YJLTgodnAsbiw4KSwgJXIxMAorCXNocmQJJFJTSCwgJXIxMCwgJXI5CisJbW92CSh2cCxuLDgpLCAlcmJ4CisJc2hyZAkkUlNILCAlcmJ4LCAlcjEwCisKKwlhZGQJUjMyKCVyYXgpLCBSMzIoJXJheCkJQyByZXN0b3JlIGN5CisKKwltb3YJLTI0KHVwLG4sOCksICVyMTIKKwlBRENTQkIJJXIxMSwgJXIxMgorCW1vdgklcjEyLCAtMjQocnAsbiw4KQorCisJbW92CS0xNih1cCxuLDgpLCAlcjEyCisJQURDU0JCCSVyOCwgJXIxMgorCW1vdgklcjEyLCAtMTYocnAsbiw4KQorCisJbW92CS04KHVwLG4sOCksICVyMTIKKwlBRENTQkIJJXI5LCAlcjEyCisJbW92CSVyMTIsIC04KHJwLG4sOCkKKworCW1vdgkodXAsbiw4KSwgJXIxMgorCUFEQ1NCQgklcjEwLCAlcjEyCisJbW92CSVyMTIsIChycCxuLDgpCisKKwltb3YJJXJieCwgJXIxMQorCXNiYglSMzIoJXJheCksIFIzMiglcmF4KQlDIHNhdmUgY3kKKworCWFkZAkkNCwgbgorCWpzCUwodG9wKQorCitMKGVuZCk6CXNocgkkUlNILCAlcjExCisJcG9wCSVyMTIKKwlwb3AJJXJieAorCXN1YglSMzIoJXIxMSksIFIzMiglcmF4KQorCW5lZwlSMzIoJXJheCkKKwlGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlid2wvYWRkbXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlid2wvYWRkbXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlN2U0ZWUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaWJ3bC9hZGRtdWxfMS5hc20KQEAgLTAsMCArMSwyMDggQEAKK2RubCAgQU1ENjQgbXBuX2FkZG11bF8xIG9wdGltaXNlZCBmb3IgSW50ZWwgQnJvYWR3ZWxsLgorCitkbmwgIENvcHlyaWdodCAyMDE1LCAyMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBBTUQgSzgsSzkJbi9hCitDIEFNRCBLMTAJbi9hCitDIEFNRCBiZDEJbi9hCitDIEFNRCBiZDIJbi9hCitDIEFNRCBiZDMJbi9hCitDIEFNRCBiZDQJID8KK0MgQU1EIHplbgkgPworQyBBTUQgYnQxCW4vYQorQyBBTUQgYnQyCW4vYQorQyBJbnRlbCBQNAluL2EKK0MgSW50ZWwgUE5SCW4vYQorQyBJbnRlbCBOSE0Jbi9hCitDIEludGVsIFNCUgluL2EKK0MgSW50ZWwgSUJSCW4vYQorQyBJbnRlbCBIV0wJbi9hCitDIEludGVsIEJXTAkgMS42NwkgMS43NAorQyBJbnRlbCBTS0wJIDEuNjMJIDEuNzEKK0MgSW50ZWwgYXRvbQluL2EKK0MgSW50ZWwgU0xNCW4vYQorQyBWSUEgbmFubwluL2EKKworQyBUaGUgbG9vcCBvZiB0aGlzIGNvZGUgaXMgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGEgY29kZSBnZW5lcmF0aW9uIGFuZAorQyBvcHRpbWlzYXRpb24gdG9vbCBzdWl0ZSB3cml0dGVuIGJ5IERhdmlkIEhhcnZleSBhbmQgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK0MgVE9ETworQyAgKiBQdXQgYW4gaW5pdGlhbCBtdWx4IGJlZm9yZSBzd2l0Y2hpbmcsIHRhcmdldGluZyBzb21lIGZyZWUgcmVnaXN0ZXJzLgorQyAgKiBUdW5lIGZlZWQtaW4gY29kZS4KK0MgICogVHJpbSBub3AgZXhlY3V0aW9uIGFmdGVyIEwoZjIpLgorQyAgKiBGb3IgRE9TNjQsIGZpeCBub3AgZXhlY3V0aW9uLgorCitkZWZpbmUoYHJwJywgICAgICBgJXJkaScpICAgQyByY3gKK2RlZmluZShgdXAnLCAgICAgIGAlcnNpJykgICBDIHJkeAorZGVmaW5lKGBuX3BhcmFtJywgYCVyZHgnKSAgIEMgcjgKK2RlZmluZShgdjBfcGFyYW0nLGAlcmN4JykgICBDIHI5CisKK2RlZmluZShgbicsICAgICAgIGAlcmN4JykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworZG5sIElGRE9TKGAJZGVmaW5lKGB1cCcsIGBgJXJzaScnKQknKSBkbmwKK2RubCBJRkRPUyhgCWRlZmluZShgcnAnLCBgYCVyY3gnJykJJykgZG5sCitkbmwgSUZET1MoYAlkZWZpbmUoYHZsJywgYGAlcjknJykJJykgZG5sCitkbmwgSUZET1MoYAlkZWZpbmUoYHI5JywgYGByZGknJykJJykgZG5sCitkbmwgSUZET1MoYAlkZWZpbmUoYG4nLCAgYGAlcjgnJykJJykgZG5sCitkbmwgSUZET1MoYAlkZWZpbmUoYHI4JywgYGByMTEnJykJJykgZG5sCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDMyKQorUFJPTE9HVUUobXBuX2FkZG11bF8xKQorCUZVTkNfRU5UUlkoNCkKKworCW1vdgl2MF9wYXJhbSwgJXIxMAorCW1vdgluX3BhcmFtLCBuCisJbW92CVIzMihuX3BhcmFtKSwgUjMyKCVyOCkKKwlzaHIJJDMsIG4KKwlhbmQJJDcsIFIzMiglcjgpCQlDIGNsZWFyIE9GLCBDRiBhcyBzaWRlLWVmZmVjdAorCW1vdgklcjEwLCAlcmR4CisJbGVhCUwodGFiKSglcmlwKSwgJXIxMAoraWZkZWYoYFBJQycsCitgCW1vdnNscQkoJXIxMCwlcjgsNCksICVyOAorCWxlYQkoJXI4LCAlcjEwKSwgJXIxMAorCWptcAkqJXIxMAorJyxgCisJam1wCSooJXIxMCwlcjgsOCkKKycpCisJSlVNUFRBQlNFQ1QKKwlBTElHTig4KQorTCh0YWIpOglKTVBFTlQoCUwoZjApLCBMKHRhYikpCisJSk1QRU5UKAlMKGYxKSwgTCh0YWIpKQorCUpNUEVOVCgJTChmMiksIEwodGFiKSkKKwlKTVBFTlQoCUwoZjMpLCBMKHRhYikpCisJSk1QRU5UKAlMKGY0KSwgTCh0YWIpKQorCUpNUEVOVCgJTChmNSksIEwodGFiKSkKKwlKTVBFTlQoCUwoZjYpLCBMKHRhYikpCisJSk1QRU5UKAlMKGY3KSwgTCh0YWIpKQorCVRFWFQKKworTChmMCk6CW11bHgoCSh1cCksICVyMTAsICVyOCkKKwlsZWEJLTgodXApLCB1cAorCWxlYQktOChycCksIHJwCisJbGVhCS0xKG4pLCBuCisJam1wCUwoYjApCisKK0woZjMpOgltdWx4KAkodXApLCAlcjksICVyYXgpCisJbGVhCTE2KHVwKSwgdXAKKwlsZWEJLTQ4KHJwKSwgcnAKKwlqbXAJTChiMykKKworTChmNCk6CW11bHgoCSh1cCksICVyMTAsICVyOCkKKwlsZWEJMjQodXApLCB1cAorCWxlYQktNDAocnApLCBycAorCWptcAlMKGI0KQorCitMKGY1KToJbXVseCgJKHVwKSwgJXI5LCAlcmF4KQorCWxlYQkzMih1cCksIHVwCisJbGVhCS0zMihycCksIHJwCisJam1wCUwoYjUpCisKK0woZjYpOgltdWx4KAkodXApLCAlcjEwLCAlcjgpCisJbGVhCTQwKHVwKSwgdXAKKwlsZWEJLTI0KHJwKSwgcnAKKwlqbXAJTChiNikKKworTChmMSk6CW11bHgoCSh1cCksICVyOSwgJXJheCkKKwlqcmN4eglMKDEpCisJam1wCUwoYjEpCitMKDEpOglhZGQJKHJwKSwgJXI5CisJbW92CSVyOSwgKHJwKQorCWFkYwklcmN4LCAlcmF4CQlDIHJlbGllcyBvbiByY3ggPSAwCisJRlVOQ19FWElUKCkKKwlyZXQKKworTChlbmQpOglhZG94KAkocnApLCAlcjkpCisJbW92CSVyOSwgKHJwKQorCWFkb3goCSVyY3gsICVyYXgpCQlDIHJlbGllcyBvbiByY3ggPSAwCisJYWRjCSVyY3gsICVyYXgJCUMgcmVsaWVzIG9uIHJjeCA9IDAKKwlGVU5DX0VYSVQoKQorCXJldAorCitpZmRlZihgUElDJywKK2AJbm9wO25vcDtub3A7bm9wJywKK2AJbm9wO25vcDtub3A7bm9wO25vcDtub3A7bm9wO25vcDtub3A7bm9wO25vcCcpCisKK0woZjIpOgltdWx4KAkodXApLCAlcjEwLCAlcjgpCisJbGVhCTgodXApLCB1cAorCWxlYQk4KHJwKSwgcnAKKwltdWx4KAkodXApLCAlcjksICVyYXgpCisKKwlBTElHTigzMikKK0wodG9wKToJYWRveCgJLTgsKHJwKSwgJXIxMCkKKwlhZGN4KAklcjgsICVyOSkKKwltb3YJJXIxMCwgLTgocnApCisJanJjeHoJTChlbmQpCitMKGIxKToJbXVseCgJOCwodXApLCAlcjEwLCAlcjgpCisJYWRveCgJKHJwKSwgJXI5KQorCWxlYQktMShuKSwgbgorCW1vdgklcjksIChycCkKKwlhZGN4KAklcmF4LCAlcjEwKQorTChiMCk6CW11bHgoCTE2LCh1cCksICVyOSwgJXJheCkKKwlhZGN4KAklcjgsICVyOSkKKwlhZG94KAk4LChycCksICVyMTApCisJbW92CSVyMTAsIDgocnApCitMKGI3KToJbXVseCgJMjQsKHVwKSwgJXIxMCwgJXI4KQorCWxlYQk2NCh1cCksIHVwCisJYWRjeCgJJXJheCwgJXIxMCkKKwlhZG94KAkxNiwocnApLCAlcjkpCisJbW92CSVyOSwgMTYocnApCitMKGI2KToJbXVseCgJLTMyLCh1cCksICVyOSwgJXJheCkKKwlhZG94KAkyNCwocnApLCAlcjEwKQorCWFkY3goCSVyOCwgJXI5KQorCW1vdgklcjEwLCAyNChycCkKK0woYjUpOgltdWx4KAktMjQsKHVwKSwgJXIxMCwgJXI4KQorCWFkY3goCSVyYXgsICVyMTApCisJYWRveCgJMzIsKHJwKSwgJXI5KQorCW1vdgklcjksIDMyKHJwKQorTChiNCk6CW11bHgoCS0xNiwodXApLCAlcjksICVyYXgpCisJYWRveCgJNDAsKHJwKSwgJXIxMCkKKwlhZGN4KAklcjgsICVyOSkKKwltb3YJJXIxMCwgNDAocnApCitMKGIzKToJYWRveCgJNDgsKHJwKSwgJXI5KQorCW11bHgoCS04LCh1cCksICVyMTAsICVyOCkKKwltb3YJJXI5LCA0OChycCkKKwlsZWEJNjQocnApLCBycAorCWFkY3goCSVyYXgsICVyMTApCisJbXVseCgJKHVwKSwgJXI5LCAlcmF4KQorCWptcAlMKHRvcCkKKworTChmNyk6CW11bHgoCSh1cCksICVyOSwgJXJheCkKKwlsZWEJLTE2KHVwKSwgdXAKKwlsZWEJLTE2KHJwKSwgcnAKKwlqbXAJTChiNykKK0VQSUxPR1VFKCkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlid2wvZ21wLW1wYXJhbS5oIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlid2wvZ21wLW1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxYzkxYjUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaWJ3bC9nbXAtbXBhcmFtLmgKQEAgLTAsMCArMSwyNDYgQEAKKy8qIEJyb2Fkd2VsbCBnbXAtbXBhcmFtLmggLS0gQ29tcGlsZXIvbWFjaGluZSBwYXJhbWV0ZXIgaGVhZGVyIGZpbGUuCisKK0NvcHlyaWdodCAyMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgNjQKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgOAorCisvKiBEaXNhYmxlIHVzZSBvZiBzbG93IGZ1bmN0aW9ucy4gIEZJWE1FOiBXZSBzaG91bGQgZGlzYWJsZSBsaWIgaW5jbHVzaW9uLiAgKi8KKyN1bmRlZiBIQVZFX05BVElWRV9tcG5fbXVsXzIKKyN1bmRlZiBIQVZFX05BVElWRV9tcG5fYWRkbXVsXzIKKworLyogMzQwMC0zODAwIE1IeiBJbnRlbCBYZW9uIEUzLTEyODVMdjQgQnJvYWR3ZWxsICovCisvKiBGRlQgdHVuaW5nIGxpbWl0ID0gNDY3LDk2NCw0NzIgKi8KKy8qIEdlbmVyYXRlZCBieSB0dW5ldXAuYywgMjAxOS0xMC0xNywgZ2NjIDguMyAqLworCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNAorI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgMworI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAxNAorI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICAgICAyNAorI2RlZmluZSBQUkVJTlZfTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgOQorI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgICAgICAgICAgICAgICAgMSAgLyogbmF0aXZlICovCisjZGVmaW5lIERJVl9RUl8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAxCisjZGVmaW5lIERJVl9RUl8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVl9RUl8yX1BJMl9USFJFU0hPTEQgICAgICAgICAgICAgIDI0CisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgICAgICAgMjIKKworI2RlZmluZSBESVZfMV9WU19NVUxfMV9QRVJDRU5UICAgICAgICAgICAgIDQ1NQorCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDI2CisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDczCisjZGVmaW5lIE1VTF9UT09NNDRfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjAyCisjZGVmaW5lIE1VTF9UT09NNkhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMzAzCisjZGVmaW5lIE1VTF9UT09NOEhfVEhSRVNIT0xEICAgICAgICAgICAgICAgNDA2CisKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNDNfVEhSRVNIT0xEICAgICAxNDEKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxNTIKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxMzcKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNjNfVEhSRVNIT0xEICAgICAxNTEKKyNkZWZpbmUgTVVMX1RPT000M19UT19UT09NNTRfVEhSRVNIT0xEICAgICAxOTgKKworI2RlZmluZSBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDM0CisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTE3CisjZGVmaW5lIFNRUl9UT09NNF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMzM2CisjZGVmaW5lIFNRUl9UT09NNl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNDI2CisjZGVmaW5lIFNRUl9UT09NOF9USFJFU0hPTEQgICAgICAgICAgICAgICAgNTQ3CisKKyNkZWZpbmUgTVVMTUlEX1RPT000Ml9USFJFU0hPTEQgICAgICAgICAgICAgNDYKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxNgorI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxOAorCisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgNDYwICAvKiBrID0gNSAqLworI2RlZmluZSBNVUxfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgNDYwLCA1fSwgeyAgICAgMjEsIDZ9LCB7ICAgICAxMSwgNX0sIHsgICAgIDIzLCA2fSwgXAorICAgIHsgICAgIDEyLCA1fSwgeyAgICAgMjUsIDZ9LCB7ICAgICAyNSwgN30sIHsgICAgIDEzLCA2fSwgXAorICAgIHsgICAgIDI4LCA3fSwgeyAgICAgMTUsIDZ9LCB7ICAgICAzMSwgN30sIHsgICAgIDI1LCA4fSwgXAorICAgIHsgICAgIDEzLCA3fSwgeyAgICAgMjgsIDh9LCB7ICAgICAxNSwgN30sIHsgICAgIDMxLCA4fSwgXAorICAgIHsgICAgIDE3LCA3fSwgeyAgICAgMzUsIDh9LCB7ICAgICAxOSwgN30sIHsgICAgIDM5LCA4fSwgXAorICAgIHsgICAgIDIxLCA5fSwgeyAgICAgMTEsIDh9LCB7ICAgICAyNywgOX0sIHsgICAgIDE1LCA4fSwgXAorICAgIHsgICAgIDM1LCA5fSwgeyAgICAgMTksIDh9LCB7ICAgICA0MSwgOX0sIHsgICAgIDIzLCA4fSwgXAorICAgIHsgICAgIDQ5LCA5fSwgeyAgICAgMjcsMTB9LCB7ICAgICAxNSwgOX0sIHsgICAgIDM5LCA4fSwgXAorICAgIHsgICAgIDc5LDEwfSwgeyAgICAgMjMsIDl9LCB7ICAgICA1NSwxMX0sIHsgICAgIDE1LDEwfSwgXAorICAgIHsgICAgIDMxLCA5fSwgeyAgICAgNzEsMTB9LCB7ICAgICAzOSwgOX0sIHsgICAgIDgzLDEwfSwgXAorICAgIHsgICAgIDQ3LCA5fSwgeyAgICAgOTksMTB9LCB7ICAgICA1NSwxMX0sIHsgICAgIDMxLDEwfSwgXAorICAgIHsgICAgIDg3LDExfSwgeyAgICAgNDcsMTB9LCB7ICAgIDEwMywxMn0sIHsgICAgIDMxLDExfSwgXAorICAgIHsgICAgIDYzLDEwfSwgeyAgICAxMzUsMTF9LCB7ICAgICA3OSwxMH0sIHsgICAgMTY3LDExfSwgXAorICAgIHsgICAgIDk1LDEwfSwgeyAgICAxOTksMTF9LCB7ICAgIDExMSwxMn0sIHsgICAgIDYzLCA4fSwgXAorICAgIHsgICAxMDg3LDEwfSwgeyAgICAyODcsIDl9LCB7ICAgIDU3NSwxMH0sIHsgICAgMzAzLDExfSwgXAorICAgIHsgICAgMTU5LDEyfSwgeyAgICAgOTUsMTF9LCB7ICAgIDE5MSwxMH0sIHsgICAgMzgzLDEzfSwgXAorICAgIHsgICAgIDYzLDEyfSwgeyAgICAxMjcsMTF9LCB7ICAgIDI1NSwxMH0sIHsgICAgNTExLDExfSwgXAorICAgIHsgICAgMjcxLDEwfSwgeyAgICA1NDMsMTF9LCB7ICAgIDI4NywxMH0sIHsgICAgNTc1LDExfSwgXAorICAgIHsgICAgMzAzLDEwfSwgeyAgICA2MDcsMTJ9LCB7ICAgIDE1OSwxMX0sIHsgICAgMzE5LDEwfSwgXAorICAgIHsgICAgNjM5LDExfSwgeyAgICAzMzUsMTB9LCB7ICAgIDY3MSwxMX0sIHsgICAgMzUxLDEwfSwgXAorICAgIHsgICAgNzAzLDExfSwgeyAgICAzNjcsMTJ9LCB7ICAgIDE5MSwxMX0sIHsgICAgMzgzLDEwfSwgXAorICAgIHsgICAgNzY3LDExfSwgeyAgICA0MTUsMTB9LCB7ICAgIDgzMSwxMX0sIHsgICAgNDQ3LDEzfSwgXAorICAgIHsgICAgMTI3LDEyfSwgeyAgICAyNTUsMTF9LCB7ICAgIDU0MywxMn0sIHsgICAgMjg3LDExfSwgXAorICAgIHsgICAgNjA3LDEyfSwgeyAgICAzMTksMTF9LCB7ICAgIDY3MSwxMn0sIHsgICAgMzUxLDExfSwgXAorICAgIHsgICAgNzAzLDEzfSwgeyAgICAxOTEsMTJ9LCB7ICAgIDM4MywxMX0sIHsgICAgNzY3LDEyfSwgXAorICAgIHsgICAgNDE1LDExfSwgeyAgICA4MzEsMTJ9LCB7ICAgIDQ0NywxNH0sIHsgICAgMTI3LDEzfSwgXAorICAgIHsgICAgMjU1LDEyfSwgeyAgICA2MDcsMTN9LCB7ICAgIDMxOSwxMn0sIHsgICAgNzM1LDEzfSwgXAorICAgIHsgICAgMzgzLDEyfSwgeyAgICA4MzEsMTN9LCB7ICAgIDQ0NywxMn0sIHsgICAgOTU5LDE0fSwgXAorICAgIHsgICAgMjU1LDEzfSwgeyAgICA1MTEsMTJ9LCB7ICAgMTAyMywxM30sIHsgICAgNTc1LDEyfSwgXAorICAgIHsgICAxMTUxLDEzfSwgeyAgICA2MzksMTJ9LCB7ICAgMTI3OSwxM30sIHsgICAgNzAzLDE0fSwgXAorICAgIHsgICAgMzgzLDEzfSwgeyAgICA4MzEsMTJ9LCB7ICAgMTY2MywxM30sIHsgICAgOTU5LDE0fSwgXAorICAgIHsgICAgNTExLDEzfSwgeyAgIDEwODcsMTJ9LCB7ICAgMjE3NSwxM30sIHsgICAxMTUxLDE0fSwgXAorICAgIHsgICAgNjM5LDEzfSwgeyAgIDEyNzksMTJ9LCB7ICAgMjU1OSwxM30sIHsgICAxMzQzLDEyfSwgXAorICAgIHsgICAyNjg3LDEzfSwgeyAgIDE0MDcsMTR9LCB7ICAgIDc2NywxM30sIHsgICAxNTM1LDEyfSwgXAorICAgIHsgICAzMDcxLDEzfSwgeyAgIDE1OTksMTJ9LCB7ICAgMzE5OSwxM30sIHsgICAxNjYzLDE0fSwgXAorICAgIHsgICAgODk1LDE1fSwgeyAgICA1MTEsMTR9LCB7ICAgMTAyMywxM30sIHsgICAyMTc1LDE0fSwgXAorICAgIHsgICAxMTUxLDEzfSwgeyAgIDI0MzEsMTJ9LCB7ICAgNDg2MywxNH0sIHsgICAxMjc5LDEzfSwgXAorICAgIHsgICAyNjg3LDE0fSwgeyAgIDE0MDcsMTV9LCB7ICAgIDc2NywxNH0sIHsgICAxNTM1LDEzfSwgXAorICAgIHsgICAzMTk5LDE0fSwgeyAgIDE2NjMsMTN9LCB7ICAgMzQ1NSwxMn0sIHsgICA2OTExLDE2fSwgXAorICAgIHsgICAgNTExLDE1fSwgeyAgIDEwMjMsMTR9LCB7ICAgMjE3NSwxM30sIHsgICA0NDc5LDE0fSwgXAorICAgIHsgICAyMzAzLDEzfSwgeyAgIDQ2MDcsMTR9LCB7ICAgMjQzMSwxM30sIHsgICA0ODYzLDE1fSwgXAorICAgIHsgICAxMjc5LDE0fSwgeyAgIDI4MTUsMTN9LCB7ICAgNTYzMSwxNH0sIHsgICAyOTQzLDEzfSwgXAorICAgIHsgICA1ODg3LDE1fSwgeyAgIDE1MzUsMTR9LCB7ICAgMzQ1NSwxM30sIHsgICA2OTExLDE1fSwgXAorICAgIHsgICAxNzkxLDE0fSwgeyAgIDM4MzksMTN9LCB7ICAgNzY3OSwxNn0sIHsgICAxMDIzLDE1fSwgXAorICAgIHsgICAyMDQ3LDE0fSwgeyAgIDQ0NzksMTV9LCB7ICAgMjMwMywxNH0sIHsgICA0ODYzLDE1fSwgXAorICAgIHsgICAyNTU5LDE0fSwgeyAgIDUyNDcsMTV9LCB7ICAgMjgxNSwxNH0sIHsgICA1ODg3LDE2fSwgXAorICAgIHsgICAxNTM1LDE1fSwgeyAgIDMzMjcsMTR9LCB7ICAgNjkxMSwxNX0sIHsgICAzODM5LDE0fSwgXAorICAgIHsgICA3Njc5LDE3fSwgeyAgIDEwMjMsMTZ9LCB7ICAgMjA0NywxNX0sIHsgICA0MzUxLDE0fSwgXAorICAgIHsgICA4NzAzLDE1fSwgeyAgIDQ4NjMsMTZ9LCB7ICAgMjU1OSwxNX0sIHsgICA1ODg3LDE0fSwgXAorICAgIHsgIDExNzc1LDE2fSwgeyAgIDMwNzEsMTV9LCB7ICAgNjkxMSwxNn0sIHsgICAzNTgzLDE1fSwgXAorICAgIHsgICA3Njc5LDE0fSwgeyAgMTUzNTksMTd9LCB7ICAgMjA0NywxNn0sIHsgICA0MDk1LDE1fSwgXAorICAgIHsgICA4NzAzLDE2fSwgeyAgIDQ2MDcsMTV9LCB7ICAgOTk4MywxNH0sIHsgIDE5OTY3LDE2fSwgXAorICAgIHsgICA1NjMxLDE1fSwgeyAgMTE3NzUsMTd9LCB7ICAgMzA3MSwxNn0sIHsgIDY1NTM2LDE3fSwgXAorICAgIHsgMTMxMDcyLDE4fSwgeyAyNjIxNDQsMTl9LCB7IDUyNDI4OCwyMH0sIHsxMDQ4NTc2LDIxfSwgXAorICAgIHsyMDk3MTUyLDIyfSwgezQxOTQzMDQsMjN9LCB7ODM4ODYwOCwyNH0gfQorI2RlZmluZSBNVUxfRkZUX1RBQkxFM19TSVpFIDIxOQorI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNTc2MAorCisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgNDAwICAvKiBrID0gNSAqLworI2RlZmluZSBTUVJfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgNDAwLCA1fSwgeyAgICAgMjMsIDZ9LCB7ICAgICAxMiwgNX0sIHsgICAgIDI1LCA2fSwgXAorICAgIHsgICAgIDI4LCA3fSwgeyAgICAgMTUsIDZ9LCB7ICAgICAzMSwgN30sIHsgICAgIDI1LCA4fSwgXAorICAgIHsgICAgIDEzLCA3fSwgeyAgICAgMjcsIDh9LCB7ICAgICAxNSwgN30sIHsgICAgIDMxLCA4fSwgXAorICAgIHsgICAgIDE3LCA3fSwgeyAgICAgMzUsIDh9LCB7ICAgICAxOSwgN30sIHsgICAgIDM5LCA4fSwgXAorICAgIHsgICAgIDI3LCA5fSwgeyAgICAgMTUsIDh9LCB7ICAgICAzNSwgOX0sIHsgICAgIDE5LCA4fSwgXAorICAgIHsgICAgIDQxLCA5fSwgeyAgICAgMjMsIDh9LCB7ICAgICA0NywgOX0sIHsgICAgIDI3LDEwfSwgXAorICAgIHsgICAgIDE1LCA5fSwgeyAgICAgMzksMTB9LCB7ICAgICAyMywgOX0sIHsgICAgIDUxLDExfSwgXAorICAgIHsgICAgIDE1LDEwfSwgeyAgICAgMzEsIDl9LCB7ICAgICA2NywxMH0sIHsgICAgIDM5LCA5fSwgXAorICAgIHsgICAgIDc5LDEwfSwgeyAgICAgNDcsIDl9LCB7ICAgICA5NSwxMH0sIHsgICAgIDU1LDExfSwgXAorICAgIHsgICAgIDMxLDEwfSwgeyAgICAgNzksMTF9LCB7ICAgICA0NywxMH0sIHsgICAgIDk1LDEyfSwgXAorICAgIHsgICAgIDMxLDExfSwgeyAgICAgNjMsMTB9LCB7ICAgIDEyNywxMX0sIHsgICAgIDc5LDEwfSwgXAorICAgIHsgICAgMTU5LDExfSwgeyAgICAgOTUsMTJ9LCB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgXAorICAgIHsgICAgMjU1LCA5fSwgeyAgICA1MTEsMTF9LCB7ICAgIDE0MywxMH0sIHsgICAgMjg3LCA5fSwgXAorICAgIHsgICAgNTc1LDEwfSwgeyAgICAzMDMsMTF9LCB7ICAgIDE1OSwxMH0sIHsgICAgMzE5LDEyfSwgXAorICAgIHsgICAgIDk1LCA4fSwgeyAgIDE1OTksIDl9LCB7ICAgIDgzMSwxMX0sIHsgICAgMjIzLDEwfSwgXAorICAgIHsgICAgNDQ3LDEyfSwgeyAgICAxMjcsMTF9LCB7ICAgIDI1NSwxMH0sIHsgICAgNTExLDExfSwgXAorICAgIHsgICAgMjcxLDEwfSwgeyAgICA1NDMsMTF9LCB7ICAgIDI4NywxMH0sIHsgICAgNTc1LDExfSwgXAorICAgIHsgICAgMzAzLDEwfSwgeyAgICA2MDcsMTJ9LCB7ICAgIDE1OSwxMX0sIHsgICAgMzE5LDEwfSwgXAorICAgIHsgICAgNjM5LDExfSwgeyAgICAzMzUsMTB9LCB7ICAgIDY3MSwxMX0sIHsgICAgMzUxLDEwfSwgXAorICAgIHsgICAgNzAzLDExfSwgeyAgICAzNjcsMTB9LCB7ICAgIDczNSwxMX0sIHsgICAgNDE1LDEwfSwgXAorICAgIHsgICAgODMxLDEyfSwgeyAgICAyMjMsMTF9LCB7ICAgIDQ0NywxM30sIHsgICAgMTI3LDEyfSwgXAorICAgIHsgICAgMjU1LDExfSwgeyAgICA1NDMsMTJ9LCB7ICAgIDI4NywxMX0sIHsgICAgNjA3LDEyfSwgXAorICAgIHsgICAgMzE5LDExfSwgeyAgICA2NzEsMTJ9LCB7ICAgIDM1MSwxMX0sIHsgICAgNzM1LDEyfSwgXAorICAgIHsgICAgMzgzLDExfSwgeyAgICA3NjcsMTJ9LCB7ICAgIDQxNSwxMX0sIHsgICAgODMxLDEyfSwgXAorICAgIHsgICAgNDQ3LDE0fSwgeyAgICAxMjcsMTN9LCB7ICAgIDI1NSwxMn0sIHsgICAgNjA3LDEzfSwgXAorICAgIHsgICAgMzE5LDEyfSwgeyAgICA3MzUsMTN9LCB7ICAgIDM4MywxMn0sIHsgICAgNzk5LDEzfSwgXAorICAgIHsgICAgNDQ3LDEyfSwgeyAgICA5NTksMTN9LCB7ICAgIDUxMSwxMn0sIHsgICAxMDIzLDEzfSwgXAorICAgIHsgICAgNTc1LDEyfSwgeyAgIDExNTEsMTN9LCB7ICAgIDYzOSwxMn0sIHsgICAxMjc5LDEzfSwgXAorICAgIHsgICAgNzAzLDE0fSwgeyAgICAzODMsMTN9LCB7ICAgIDc2NywxMn0sIHsgICAxNTM1LDEzfSwgXAorICAgIHsgICAgODMxLDEyfSwgeyAgIDE2NjMsMTN9LCB7ICAgIDk1OSwxNH0sIHsgICAgNTExLDEzfSwgXAorICAgIHsgICAxMDg3LDEyfSwgeyAgIDIxNzUsMTN9LCB7ICAgMTE1MSwxNH0sIHsgICAgNjM5LDEzfSwgXAorICAgIHsgICAxMzQzLDEyfSwgeyAgIDI2ODcsMTN9LCB7ICAgMTQwNywxMn0sIHsgICAyODE1LDEzfSwgXAorICAgIHsgICAxNDcxLDE0fSwgeyAgICA3NjcsMTN9LCB7ICAgMTU5OSwxMn0sIHsgICAzMTk5LDEzfSwgXAorICAgIHsgICAxNjYzLDE0fSwgeyAgICA4OTUsMTV9LCB7ICAgIDUxMSwxNH0sIHsgICAxMDIzLDEzfSwgXAorICAgIHsgICAyMTc1LDE0fSwgeyAgIDExNTEsMTN9LCB7ICAgMjQzMSwxMn0sIHsgICA0ODYzLDE0fSwgXAorICAgIHsgICAxMjc5LDEzfSwgeyAgIDI2ODcsMTR9LCB7ICAgMTQwNywxM30sIHsgICAyODE1LDE1fSwgXAorICAgIHsgICAgNzY3LDE0fSwgeyAgIDE1MzUsMTN9LCB7ICAgMzE5OSwxNH0sIHsgICAxNjYzLDEzfSwgXAorICAgIHsgICAzNDU1LDEyfSwgeyAgIDY5MTEsMTR9LCB7ICAgMTc5MSwxNn0sIHsgICAgNTExLDE1fSwgXAorICAgIHsgICAxMDIzLDE0fSwgeyAgIDIwNDcsMTN9LCB7ICAgNDA5NSwxNH0sIHsgICAyMTc1LDEzfSwgXAorICAgIHsgICA0MzUxLDE0fSwgeyAgIDIzMDMsMTN9LCB7ICAgNDYwNywxNH0sIHsgICAyNDMxLDEzfSwgXAorICAgIHsgICA0ODYzLDE1fSwgeyAgIDEyNzksMTR9LCB7ICAgMjk0MywxM30sIHsgICA1ODg3LDE1fSwgXAorICAgIHsgICAxNTM1LDE0fSwgeyAgIDM0NTUsMTN9LCB7ICAgNjkxMSwxNX0sIHsgICAxNzkxLDE0fSwgXAorICAgIHsgICAzODM5LDEzfSwgeyAgIDc2NzksMTZ9LCB7ICAgMTAyMywxNX0sIHsgICAyMDQ3LDE0fSwgXAorICAgIHsgICA0MzUxLDE1fSwgeyAgIDIzMDMsMTR9LCB7ICAgNDg2MywxNX0sIHsgICAyNTU5LDE0fSwgXAorICAgIHsgICA1MjQ3LDE1fSwgeyAgIDI4MTUsMTR9LCB7ICAgNTg4NywxNn0sIHsgICAxNTM1LDE1fSwgXAorICAgIHsgICAzMzI3LDE0fSwgeyAgIDY5MTEsMTV9LCB7ICAgMzgzOSwxNH0sIHsgICA3Njc5LDE3fSwgXAorICAgIHsgICAxMDIzLDE2fSwgeyAgIDIwNDcsMTV9LCB7ICAgNDg2MywxNn0sIHsgICAyNTU5LDE1fSwgXAorICAgIHsgICA1ODg3LDE0fSwgeyAgMTE3NzUsMTZ9LCB7ICAgMzA3MSwxNX0sIHsgICA2OTExLDE2fSwgXAorICAgIHsgICAzNTgzLDE1fSwgeyAgIDc2NzksMTR9LCB7ICAxNTM1OSwxNX0sIHsgICA3OTM1LDE3fSwgXAorICAgIHsgICAyMDQ3LDE2fSwgeyAgIDQwOTUsMTV9LCB7ICAgODQ0NywxNn0sIHsgICA0NjA3LDE1fSwgXAorICAgIHsgICA5NDcxLDE0fSwgeyAgMTg5NDMsMTV9LCB7ICAgOTk4MywxNH0sIHsgIDE5OTY3LDE2fSwgXAorICAgIHsgICA1NjMxLDE1fSwgeyAgMTE3NzUsMTd9LCB7ICAgMzA3MSwxNn0sIHsgIDY1NTM2LDE3fSwgXAorICAgIHsgMTMxMDcyLDE4fSwgeyAyNjIxNDQsMTl9LCB7IDUyNDI4OCwyMH0sIHsxMDQ4NTc2LDIxfSwgXAorICAgIHsyMDk3MTUyLDIyfSwgezQxOTQzMDQsMjN9LCB7ODM4ODYwOCwyNH0gfQorI2RlZmluZSBTUVJfRkZUX1RBQkxFM19TSVpFIDIxNQorI2RlZmluZSBTUVJfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMzcxMgorCisjZGVmaW5lIE1VTExPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTVVMTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgODAKKyNkZWZpbmUgTVVMTE9fTVVMX05fVEhSRVNIT0xEICAgICAgICAgICAgMTEwMjUKKyNkZWZpbmUgU1FSTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDkKKyNkZWZpbmUgU1FSTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAxMDkKKyNkZWZpbmUgU1FSTE9fU1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDcyOTMKKworI2RlZmluZSBEQ19ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA1NAorI2RlZmluZSBEQ19ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgIDE4MworI2RlZmluZSBEQ19CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA4NgorI2RlZmluZSBEQ19CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE2MAorCisjZGVmaW5lIElOVl9NVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgIDU4CisjZGVmaW5lIElOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAgMTcxCisjZGVmaW5lIElOVl9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTcxCisKKyNkZWZpbmUgQklOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAyOTIKKyNkZWZpbmUgUkVEQ18xX1RPX1JFRENfMl9USFJFU0hPTEQgICAgICAgICAgMzMKKyNkZWZpbmUgUkVEQ18yX1RPX1JFRENfTl9USFJFU0hPTEQgICAgICAgICAgNjMKKworI2RlZmluZSBNVV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTU4OQorI2RlZmluZSBNVV9ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgMTU4OQorI2RlZmluZSBNVVBJX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICA2NworI2RlZmluZSBNVV9CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTQ3MAorI2RlZmluZSBNVV9CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTg2NgorCisjZGVmaW5lIFBPV01fU0VDX1RBQkxFICAyLDEwLDE5MSw0OTQsNzEyLDEzNzgKKworI2RlZmluZSBHRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBHRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgICAyMAorI2RlZmluZSBTRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDY0NAorI2RlZmluZSBTRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgMTY1OAorCisjZGVmaW5lIEZBQ19EU0NfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgNTYyCisjZGVmaW5lIEZBQ19PRERfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDQ4CisKKyNkZWZpbmUgTUFUUklYMjJfU1RSQVNTRU5fVEhSRVNIT0xEICAgICAgICAgMTYKKyNkZWZpbmUgSEdDRDJfRElWMV9NRVRIT0QgICAgICAgICAgICAgICAgICAgIDUgIC8qIDAuMzglIGZhc3RlciB0aGFuIDMgKi8KKyNkZWZpbmUgSEdDRF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgICAgNzMKKyNkZWZpbmUgSEdDRF9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNjcKKyNkZWZpbmUgSEdDRF9SRURVQ0VfVEhSRVNIT0xEICAgICAgICAgICAgIDMwMTQKKyNkZWZpbmUgR0NEX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICA2MzAKKyNkZWZpbmUgR0NERVhUX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzNjUKKyNkZWZpbmUgSkFDT0JJX0JBU0VfTUVUSE9EICAgICAgICAgICAgICAgICAgIDEgIC8qIDI5LjY1JSBmYXN0ZXIgdGhhbiA0ICovCisKKy8qIFR1bmV1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCB0b29rIDIzOTA1MCBzZWNvbmRzICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaWJ3bC9tdWxfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaWJ3bC9tdWxfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdmYWUyZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpYndsL211bF8xLmFzbQpAQCAtMCwwICsxLDE5NSBAQAorZG5sICBBTUQ2NCBtcG5fbXVsXzEgb3B0aW1pc2VkIGZvciBJbnRlbCBCcm9hZHdlbGwuCisKK2RubCAgQ29weXJpZ2h0IDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIEFNRCBLOCxLOSAgICAgIC0KK0MgQU1EIEsxMCAgICAgICAgLQorQyBBTUQgYnVsbCAgICAgICAtCitDIEFNRCBwaWxlICAgICAgIC0KK0MgQU1EIHN0ZWFtICAgICAgLQorQyBBTUQgZXhjYXZhdG9yICAtCitDIEFNRCBib2JjYXQgICAgIC0KK0MgQU1EIGphZ3VhciAgICAgLQorQyBJbnRlbCBQNCAgICAgICAtCitDIEludGVsIGNvcmUyICAgIC0KK0MgSW50ZWwgTkhNICAgICAgLQorQyBJbnRlbCBTQlIgICAgICAtCitDIEludGVsIElCUiAgICAgIC0KK0MgSW50ZWwgSFdMICAgICAgMS43MAorQyBJbnRlbCBCV0wgICAgICAxLjUxCitDIEludGVsIFNLTCAgICAgIDEuNTIKK0MgSW50ZWwgYXRvbSAgICAgLQorQyBJbnRlbCBTTE0gICAgICAtCitDIFZJQSBuYW5vICAgICAgIC0KKworQyBUaGUgbG9vcCBvZiB0aGlzIGNvZGUgaXMgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGEgY29kZSBnZW5lcmF0aW9uIGFuZAorQyBvcHRpbWlzYXRpb24gdG9vbCBzdWl0ZSB3cml0dGVuIGJ5IERhdmlkIEhhcnZleSBhbmQgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK0MgVE9ETworQyAgKiBQdXQgYW4gaW5pdGlhbCBtdWx4IGJlZm9yZSBzd2l0Y2hpbmcsIHRhcmdldGluZyBzb21lIGZyZWUgcmVnaXN0ZXJzLgorQyAgKiBUdW5lIGZlZWQtaW4gY29kZS4KK0MgICogVHJpbSBub3AgZXhlY3V0aW9uIGFmdGVyIEwoZjIpLgorQyAgKiBQb3J0IHRvIERPUzY0LCBub3QgZm9yZ2V0dGluZyBub3AgZXhlY3V0aW9uLgorCitkZWZpbmUoYHJwJywgICAgICBgJXJkaScpICAgQyByY3gKK2RlZmluZShgdXAnLCAgICAgIGAlcnNpJykgICBDIHJkeAorZGVmaW5lKGBuX3BhcmFtJywgYCVyZHgnKSAgIEMgcjgKK2RlZmluZShgdjBfcGFyYW0nLGAlcmN4JykgICBDIHI5CisKK2RlZmluZShgbicsICAgICAgIGAlcmN4JykKKworZG5sIEFCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK2RubCBJRkRPUyhgCWRlZmluZShgdXAnLCBgYCVyc2knJykJJykgZG5sCitkbmwgSUZET1MoYAlkZWZpbmUoYHJwJywgYGAlcmN4JycpCScpIGRubAorZG5sIElGRE9TKGAJZGVmaW5lKGB2bCcsIGBgJXI5JycpCScpIGRubAorZG5sIElGRE9TKGAJZGVmaW5lKGByOScsIGBgcmRpJycpCScpIGRubAorZG5sIElGRE9TKGAJZGVmaW5lKGBuJywgIGBgJXI4JycpCScpIGRubAorZG5sIElGRE9TKGAJZGVmaW5lKGByOCcsIGBgcjExJycpCScpIGRubAorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigzMikKK1BST0xPR1VFKG1wbl9tdWxfMSkKKworCW1vdgl2MF9wYXJhbSwgJXIxMAorCW1vdgluX3BhcmFtLCBuCisJbW92CVIzMihuX3BhcmFtKSwgUjMyKCVyOCkKKwlzaHIJJDMsIG4KKwlhbmQJJDcsIFIzMiglcjgpCQlDIGNsZWFyIE9GLCBDRiBhcyBzaWRlLWVmZmVjdAorCW1vdgklcjEwLCAlcmR4CisJbGVhCUwodGFiKSglcmlwKSwgJXIxMAoraWZkZWYoYFBJQycsCitgCW1vdnNscQkoJXIxMCwlcjgsNCksICVyOAorCWxlYQkoJXI4LCAlcjEwKSwgJXIxMAorCWptcAkqJXIxMAorJyxgCisJam1wCSooJXIxMCwlcjgsOCkKKycpCisJSlVNUFRBQlNFQ1QKKwlBTElHTig4KQorTCh0YWIpOglKTVBFTlQoCUwoZjApLCBMKHRhYikpCisJSk1QRU5UKAlMKGYxKSwgTCh0YWIpKQorCUpNUEVOVCgJTChmMiksIEwodGFiKSkKKwlKTVBFTlQoCUwoZjMpLCBMKHRhYikpCisJSk1QRU5UKAlMKGY0KSwgTCh0YWIpKQorCUpNUEVOVCgJTChmNSksIEwodGFiKSkKKwlKTVBFTlQoCUwoZjYpLCBMKHRhYikpCisJSk1QRU5UKAlMKGY3KSwgTCh0YWIpKQorCVRFWFQKKworTChmMCk6CW11bHgoCSh1cCksICVyMTAsICVyOCkKKwlsZWEJNTYodXApLCB1cAorCWxlYQktOChycCksIHJwCisJam1wCUwoYjApCisKK0woZjMpOgltdWx4KAkodXApLCAlcjksICVyYXgpCisJbGVhCTE2KHVwKSwgdXAKKwlsZWEJMTYocnApLCBycAorCWluYwluCisJam1wCUwoYjMpCisKK0woZjQpOgltdWx4KAkodXApLCAlcjEwLCAlcjgpCisJbGVhCTI0KHVwKSwgdXAKKwlsZWEJMjQocnApLCBycAorCWluYwluCisJam1wCUwoYjQpCisKK0woZjUpOgltdWx4KAkodXApLCAlcjksICVyYXgpCisJbGVhCTMyKHVwKSwgdXAKKwlsZWEJMzIocnApLCBycAorCWluYwluCisJam1wCUwoYjUpCisKK0woZjYpOgltdWx4KAkodXApLCAlcjEwLCAlcjgpCisJbGVhCTQwKHVwKSwgdXAKKwlsZWEJNDAocnApLCBycAorCWluYwluCisJam1wCUwoYjYpCisKK0woZjcpOgltdWx4KAkodXApLCAlcjksICVyYXgpCisJbGVhCTQ4KHVwKSwgdXAKKwlsZWEJNDgocnApLCBycAorCWluYwluCisJam1wCUwoYjcpCisKK0woZjEpOgltdWx4KAkodXApLCAlcjksICVyYXgpCisJdGVzdAluLCBuCisJam56CUwoYjEpCitMKDEpOgltb3YJJXI5LCAocnApCisJcmV0CisKK0woZjIpOgltdWx4KAkodXApLCAlcjEwLCAlcjgpCisJbGVhCTgodXApLCB1cAorCWxlYQk4KHJwKSwgcnAKKwltdWx4KAkodXApLCAlcjksICVyYXgpCisJdGVzdAluLCBuCisJanoJTChlbmQpCisKKwlBTElHTigzMikKK0wodG9wKToJbW92CSVyMTAsIC04KHJwKQorCWFkYwklcjgsICVyOQorTChiMSk6CW11bHgoCTgsKHVwKSwgJXIxMCwgJXI4KQorCWFkYwklcmF4LCAlcjEwCisJbGVhCTY0KHVwKSwgdXAKKwltb3YJJXI5LCAocnApCitMKGIwKToJbW92CSVyMTAsIDgocnApCisJbXVseCgJLTQ4LCh1cCksICVyOSwgJXJheCkKKwlsZWEJNjQocnApLCBycAorCWFkYwklcjgsICVyOQorTChiNyk6CW11bHgoCS00MCwodXApLCAlcjEwLCAlcjgpCisJbW92CSVyOSwgLTQ4KHJwKQorCWFkYwklcmF4LCAlcjEwCitMKGI2KToJbW92CSVyMTAsIC00MChycCkKKwltdWx4KAktMzIsKHVwKSwgJXI5LCAlcmF4KQorCWFkYwklcjgsICVyOQorTChiNSk6CW11bHgoCS0yNCwodXApLCAlcjEwLCAlcjgpCisJbW92CSVyOSwgLTMyKHJwKQorCWFkYwklcmF4LCAlcjEwCitMKGI0KToJbXVseCgJLTE2LCh1cCksICVyOSwgJXJheCkKKwltb3YJJXIxMCwgLTI0KHJwKQorCWFkYwklcjgsICVyOQorTChiMyk6CW11bHgoCS04LCh1cCksICVyMTAsICVyOCkKKwlhZGMJJXJheCwgJXIxMAorCW1vdgklcjksIC0xNihycCkKKwlkZWMJbgorCW11bHgoCSh1cCksICVyOSwgJXJheCkKKwlqbnoJTCh0b3ApCisKK0woZW5kKToJbW92CSVyMTAsIC04KHJwKQorCWFkYwklcjgsICVyOQorCW1vdgklcjksIChycCkKKwlhZGMJJXJjeCwgJXJheAorCXJldAorRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaWJ3bC9tdWxfYmFzZWNhc2UuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlid2wvbXVsX2Jhc2VjYXNlLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmNhOTc2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlid2wvbXVsX2Jhc2VjYXNlLmFzbQpAQCAtMCwwICsxLDM2OSBAQAorZG5sICBBTUQ2NCBtcG5fbXVsX2Jhc2VjYXNlIG9wdGltaXNlZCBmb3IgSW50ZWwgQnJvYWR3ZWxsLgorCitkbmwgIENvcHlyaWdodCAyMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgY3ljbGVzL2xpbWIJbXVsXzEJCWFkZG11bF8xCitDIEFNRCBLOCxLOQluL2EJCW4vYQorQyBBTUQgSzEwCW4vYQkJbi9hCitDIEFNRCBiZDEJbi9hCQluL2EKK0MgQU1EIGJkMgluL2EJCW4vYQorQyBBTUQgYmQzCW4vYQkJbi9hCitDIEFNRCBiZDQJID8JCSA/CitDIEFNRCB6ZW4JID8JCSA/CitDIEFNRCBidDEJbi9hCQluL2EKK0MgQU1EIGJ0MgluL2EJCW4vYQorQyBJbnRlbCBQNAluL2EJCW4vYQorQyBJbnRlbCBQTlIJbi9hCQluL2EKK0MgSW50ZWwgTkhNCW4vYQkJbi9hCitDIEludGVsIFNCUgluL2EJCW4vYQorQyBJbnRlbCBJQlIJbi9hCQluL2EKK0MgSW50ZWwgSFdMCSAxLjY4CQluL2EKK0MgSW50ZWwgQldMCSAxLjUxCSAgICAgIDEuNjctMS43NAorQyBJbnRlbCBTS0wJIDEuNTIJICAgICAgMS42My0xLjcxCitDIEludGVsIGF0b20Jbi9hCQluL2EKK0MgSW50ZWwgU0xNCW4vYQkJbi9hCitDIFZJQSBuYW5vCW4vYQkJbi9hCisKK0MgVGhlIGlubmVyIGxvb3BzIG9mIHRoaXMgY29kZSBhcmUgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGEgY29kZSBnZW5lcmF0aW9uIGFuZAorQyBvcHRpbWlzYXRpb24gdG9vbCBzdWl0ZSB3cml0dGVuIGJ5IERhdmlkIEhhcnZleSBhbmQgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK0MgVE9ETworQyAgKiBEbyBvdmVybGFwcGVkIHNvZnR3YXJlIHBpcGVsaW5pbmcuCitDICAqIFdoZW4gY2hhbmdpbmcgdGhpcywgbWFrZSBzdXJlIHRoZSBjb2RlIHdoaWNoIGZhbGxzIGludG8gdGhlIGlubmVyIGxvb3BzCitDICAgIGRvZXMgbm90IGV4ZWN1dGUgdG9vIG1hbnkgbm8tb3BzIChmb3IgYm90aCBQSUMgYW5kIG5vbi1QSUMpLgorCitkZWZpbmUoYHJwJywgICAgICBgJXJkaScpCitkZWZpbmUoYHVwJywgICAgICBgJXJzaScpCitkZWZpbmUoYHVuX3BhcmFtJyxgJXJkeCcpCitkZWZpbmUoYHZwX3BhcmFtJyxgJXJjeCcpCitkZWZpbmUoYHZuJywgICAgICBgJXI4JykKKworZGVmaW5lKGBuJywgICAgICAgYCVyY3gnKQorZGVmaW5lKGBuX3NhdmUnLCAgYCVyYnAnKQorZGVmaW5lKGB2cCcsICAgICAgYCVyMTQnKQorZGVmaW5lKGB1bm5lZycsICAgYCVyYngnKQorZGVmaW5lKGB2MCcsICAgICAgYCVyZHgnKQorZGVmaW5lKGBqYWRkcicsICAgYCVyYXgnKQorCitkZWZpbmUoYHcwJywJYCVyMTInKQorZGVmaW5lKGB3MScsCWAlcjknKQorZGVmaW5lKGB3MicsCWAlcjEwJykKK2RlZmluZShgdzMnLAlgJXIxMScpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX211bF9iYXNlY2FzZSkKKwlGVU5DX0VOVFJZKDQpCitJRkRPUyhgCW1vdgk1NiglcnNwKSwgJXI4ZAknKQorCisJY21wCSQyLCB1bl9wYXJhbQorCWphCUwoZ2VuKQorCW1vdgkodnBfcGFyYW0pLCAlcmR4CisJbXVseCgJKHVwKSwgJXJheCwgJXI5KQlDIDAgMQorCWplCUwoczJ4KQorCitMKHMxMSk6CW1vdgklcmF4LCAocnApCisJbW92CSVyOSwgOChycCkKKwlGVU5DX0VYSVQoKQorCXJldAorCitMKHMyeCk6CWNtcAkkMiwgdm4KKwltdWx4KAk4LCh1cCksICVyOCwgJXIxMCkJQyAxIDIKKwlqZQlMKHMyMikKKworTChzMjEpOglhZGQJJXI4LCAlcjkKKwlhZGMJJDAsICVyMTAKKwltb3YJJXJheCwgKHJwKQorCW1vdgklcjksIDgocnApCisJbW92CSVyMTAsIDE2KHJwKQorCUZVTkNfRVhJVCgpCisJcmV0CisKK0woczIyKToJYWRkCSVyOCwgJXI5CQlDIDEKKwlhZGMJJDAsICVyMTAJCUMgMgorCW1vdgk4KHZwX3BhcmFtKSwgJXJkeAorCW1vdgklcmF4LCAocnApCisJbXVseCgJKHVwKSwgJXI4LCAlcjExKQlDIDEgMgorCW11bHgoCTgsKHVwKSwgJXJheCwgJXJkeCkJQyAyIDMKKwlhZGQJJXIxMSwgJXJheAkJQyAyCisJYWRjCSQwLCAlcmR4CQlDIDMKKwlhZGQJJXI4LCAlcjkJCUMgMQorCWFkYwklcmF4LCAlcjEwCQlDIDIKKwlhZGMJJDAsICVyZHgJCUMgMworCW1vdgklcjksIDgocnApCisJbW92CSVyMTAsIDE2KHJwKQorCW1vdgklcmR4LCAyNChycCkKKwlGVU5DX0VYSVQoKQorCXJldAorCisJQUxJR04oMTYpCitMKGdlbik6CisJcHVzaAklcmJ4CisJcHVzaAklcmJwCisJcHVzaAklcjEyCisJcHVzaAklcjE0CisKKwltb3YJdnBfcGFyYW0sIHZwCisJbGVhCTEodW5fcGFyYW0pLCB1bm5lZworCW1vdgl1bl9wYXJhbSwgbl9zYXZlCisJbW92CVIzMih1bl9wYXJhbSksIFIzMiglcmF4KQorCWFuZAkkLTgsIHVubmVnCisJc2hyCSQzLCBuX3NhdmUJCUMgbG9vcCBjb3VudAorCW5lZwl1bm5lZworCWFuZAkkNywgUjMyKCVyYXgpCQlDIGNsZWFyIENGIGZvciBhZGMgYXMgc2lkZS1lZmZlY3QKKwkJCQkJQyBub3RlIHRoYXQgcmF4IGxpdmVzIHZlcnkgbG9uZworCW1vdgluX3NhdmUsIG4KKwltb3YJKHZwKSwgdjAKKwlsZWEJOCh2cCksIHZwCisKKwlsZWEJTChtdGFiKSglcmlwKSwgJXIxMAoraWZkZWYoYFBJQycsCitgCW1vdnNscQkoJXIxMCwlcmF4LDQpLCAlcjExCisJbGVhCSglcjExLCAlcjEwKSwgJXIxMAorCWptcAkqJXIxMAorJyxgCisJam1wCSooJXIxMCwlcmF4LDgpCisnKQorCitMKG1mMCk6CW11bHgoCSh1cCksIHcyLCB3MykKKwlsZWEJNTYodXApLCB1cAorCWxlYQktOChycCksIHJwCisJam1wCUwobWIwKQorCitMKG1mMyk6CW11bHgoCSh1cCksIHcwLCB3MSkKKwlsZWEJMTYodXApLCB1cAorCWxlYQkxNihycCksIHJwCisJaW5jCW4KKwlqbXAJTChtYjMpCisKK0wobWY0KToJbXVseCgJKHVwKSwgdzIsIHczKQorCWxlYQkyNCh1cCksIHVwCisJbGVhCTI0KHJwKSwgcnAKKwlpbmMJbgorCWptcAlMKG1iNCkKKworTChtZjUpOgltdWx4KAkodXApLCB3MCwgdzEpCisJbGVhCTMyKHVwKSwgdXAKKwlsZWEJMzIocnApLCBycAorCWluYwluCisJam1wCUwobWI1KQorCitMKG1mNik6CW11bHgoCSh1cCksIHcyLCB3MykKKwlsZWEJNDAodXApLCB1cAorCWxlYQk0MChycCksIHJwCisJaW5jCW4KKwlqbXAJTChtYjYpCisKK0wobWY3KToJbXVseCgJKHVwKSwgdzAsIHcxKQorCWxlYQk0OCh1cCksIHVwCisJbGVhCTQ4KHJwKSwgcnAKKwlpbmMJbgorCWptcAlMKG1iNykKKworTChtZjEpOgltdWx4KAkodXApLCB3MCwgdzEpCisJam1wCUwobWIxKQorCitMKG1mMik6CW11bHgoCSh1cCksIHcyLCB3MykKKwlsZWEJOCh1cCksIHVwCisJbGVhCTgocnApLCBycAorCW11bHgoCSh1cCksIHcwLCB3MSkKKworCUFMSUdOKDE2KQorTChtMXRvcCk6CisJbW92CXcyLCAtOChycCkKKwlhZGMJdzMsIHcwCitMKG1iMSk6CW11bHgoCTgsKHVwKSwgdzIsIHczKQorCWFkYwl3MSwgdzIKKwlsZWEJNjQodXApLCB1cAorCW1vdgl3MCwgKHJwKQorTChtYjApOgltb3YJdzIsIDgocnApCisJbXVseCgJLTQ4LCh1cCksIHcwLCB3MSkKKwlsZWEJNjQocnApLCBycAorCWFkYwl3MywgdzAKK0wobWI3KToJbXVseCgJLTQwLCh1cCksIHcyLCB3MykKKwltb3YJdzAsIC00OChycCkKKwlhZGMJdzEsIHcyCitMKG1iNik6CW1vdgl3MiwgLTQwKHJwKQorCW11bHgoCS0zMiwodXApLCB3MCwgdzEpCisJYWRjCXczLCB3MAorTChtYjUpOgltdWx4KAktMjQsKHVwKSwgdzIsIHczKQorCW1vdgl3MCwgLTMyKHJwKQorCWFkYwl3MSwgdzIKK0wobWI0KToJbXVseCgJLTE2LCh1cCksIHcwLCB3MSkKKwltb3YJdzIsIC0yNChycCkKKwlhZGMJdzMsIHcwCitMKG1iMyk6CW11bHgoCS04LCh1cCksIHcyLCB3MykKKwlhZGMJdzEsIHcyCisJbW92CXcwLCAtMTYocnApCisJZGVjCW4KKwltdWx4KAkodXApLCB3MCwgdzEpCisJam56CUwobTF0b3ApCisKK0wobTFlbmQpOgorCW1vdgl3MiwgLTgocnApCisJYWRjCXczLCB3MAorCW1vdgl3MCwgKHJwKQorCWFkYwklcmN4LCB3MQkJQyByZWxpZXMgb24gcmN4ID0gMAorCW1vdgl3MSwgOChycCkKKworCWRlYwl2bgorCWp6CUwoZG9uZSkKKworCWxlYQlMKGF0YWIpKCVyaXApLCAlcjEwCitpZmRlZihgUElDJywKK2AJbW92c2xxCSglcjEwLCVyYXgsNCksICVyYXgKKwlsZWEJKCVyYXgsICVyMTApLCBqYWRkcgorJyxgCisJbW92CSglcjEwLCVyYXgsOCksIGphZGRyCisnKQorCitMKG91dGVyKToKKwlsZWEJKHVwLHVubmVnLDgpLCB1cAorCW1vdgluX3NhdmUsIG4KKwltb3YJKHZwKSwgdjAKKwlsZWEJOCh2cCksIHZwCisJam1wCSpqYWRkcgorCitMKGYwKToJbXVseCgJOCwodXApLCB3MiwgdzMpCisJbGVhCTgocnAsdW5uZWcsOCksIHJwCisJbGVhCS0xKG4pLCBuCisJam1wCUwoYjApCisKK0woZjMpOgltdWx4KAktMTYsKHVwKSwgdzAsIHcxKQorCWxlYQktNTYocnAsdW5uZWcsOCksIHJwCisJam1wCUwoYjMpCisKK0woZjQpOgltdWx4KAktMjQsKHVwKSwgdzIsIHczKQorCWxlYQktNTYocnAsdW5uZWcsOCksIHJwCisJam1wCUwoYjQpCisKK0woZjUpOgltdWx4KAktMzIsKHVwKSwgdzAsIHcxKQorCWxlYQktNTYocnAsdW5uZWcsOCksIHJwCisJam1wCUwoYjUpCisKK0woZjYpOgltdWx4KAktNDAsKHVwKSwgdzIsIHczKQorCWxlYQktNTYocnAsdW5uZWcsOCksIHJwCisJam1wCUwoYjYpCisKK0woZjcpOgltdWx4KAkxNiwodXApLCB3MCwgdzEpCisJbGVhCTgocnAsdW5uZWcsOCksIHJwCisJam1wCUwoYjcpCisKK0woZjEpOgltdWx4KAkodXApLCB3MCwgdzEpCisJbGVhCTgocnAsdW5uZWcsOCksIHJwCisJam1wCUwoYjEpCisKK0woYW0xZW5kKToKKwlhZG94KAkocnApLCB3MCkKKwlhZG94KAklcmN4LCB3MSkJCUMgcmVsaWVzIG9uIHJjeCA9IDAKKwltb3YJdzAsIChycCkKKwlhZGMJJXJjeCwgdzEJCUMgcmVsaWVzIG9uIHJjeCA9IDAKKwltb3YJdzEsIDgocnApCisKKwlkZWMJdm4JCQlDIGNsZWFyIENGIGFuZCBPRiBhcyBzaWRlLWVmZmVjdAorCWpueglMKG91dGVyKQorTChkb25lKToKKwlwb3AJJXIxNAorCXBvcAklcjEyCisJcG9wCSVyYnAKKwlwb3AJJXJieAorCUZVTkNfRVhJVCgpCisJcmV0CisKK0woZjIpOgorCW11bHgoCS04LCh1cCksIHcyLCB3MykKKwlsZWEJOChycCx1bm5lZyw4KSwgcnAKKwltdWx4KAkodXApLCB3MCwgdzEpCisKKwlBTElHTigxNikKK0woYW0xdG9wKToKKwlhZG94KAktOCwocnApLCB3MikKKwlhZGN4KAl3MywgdzApCisJbW92CXcyLCAtOChycCkKKwlqcmN4eglMKGFtMWVuZCkKK0woYjEpOgltdWx4KAk4LCh1cCksIHcyLCB3MykKKwlhZG94KAkocnApLCB3MCkKKwlsZWEJLTEobiksIG4KKwltb3YJdzAsIChycCkKKwlhZGN4KAl3MSwgdzIpCitMKGIwKToJbXVseCgJMTYsKHVwKSwgdzAsIHcxKQorCWFkY3goCXczLCB3MCkKKwlhZG94KAk4LChycCksIHcyKQorCW1vdgl3MiwgOChycCkKK0woYjcpOgltdWx4KAkyNCwodXApLCB3MiwgdzMpCisJbGVhCTY0KHVwKSwgdXAKKwlhZGN4KAl3MSwgdzIpCisJYWRveCgJMTYsKHJwKSwgdzApCisJbW92CXcwLCAxNihycCkKK0woYjYpOgltdWx4KAktMzIsKHVwKSwgdzAsIHcxKQorCWFkb3goCTI0LChycCksIHcyKQorCWFkY3goCXczLCB3MCkKKwltb3YJdzIsIDI0KHJwKQorTChiNSk6CW11bHgoCS0yNCwodXApLCB3MiwgdzMpCisJYWRjeCgJdzEsIHcyKQorCWFkb3goCTMyLChycCksIHcwKQorCW1vdgl3MCwgMzIocnApCitMKGI0KToJbXVseCgJLTE2LCh1cCksIHcwLCB3MSkKKwlhZG94KAk0MCwocnApLCB3MikKKwlhZGN4KAl3MywgdzApCisJbW92CXcyLCA0MChycCkKK0woYjMpOglhZG94KAk0OCwocnApLCB3MCkKKwltdWx4KAktOCwodXApLCB3MiwgdzMpCisJbW92CXcwLCA0OChycCkKKwlsZWEJNjQocnApLCBycAorCWFkY3goCXcxLCB3MikKKwltdWx4KAkodXApLCB3MCwgdzEpCisJam1wCUwoYW0xdG9wKQorCisJSlVNUFRBQlNFQ1QKKwlBTElHTig4KQorTChtdGFiKTpKTVBFTlQoCUwobWYwKSwgTChtdGFiKSkKKwlKTVBFTlQoCUwobWYxKSwgTChtdGFiKSkKKwlKTVBFTlQoCUwobWYyKSwgTChtdGFiKSkKKwlKTVBFTlQoCUwobWYzKSwgTChtdGFiKSkKKwlKTVBFTlQoCUwobWY0KSwgTChtdGFiKSkKKwlKTVBFTlQoCUwobWY1KSwgTChtdGFiKSkKKwlKTVBFTlQoCUwobWY2KSwgTChtdGFiKSkKKwlKTVBFTlQoCUwobWY3KSwgTChtdGFiKSkKK0woYXRhYik6Sk1QRU5UKAlMKGYwKSwgTChhdGFiKSkKKwlKTVBFTlQoCUwoZjEpLCBMKGF0YWIpKQorCUpNUEVOVCgJTChmMiksIEwoYXRhYikpCisJSk1QRU5UKAlMKGYzKSwgTChhdGFiKSkKKwlKTVBFTlQoCUwoZjQpLCBMKGF0YWIpKQorCUpNUEVOVCgJTChmNSksIEwoYXRhYikpCisJSk1QRU5UKAlMKGY2KSwgTChhdGFiKSkKKwlKTVBFTlQoCUwoZjcpLCBMKGF0YWIpKQorCVRFWFQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpYndsL211bGxvX2Jhc2VjYXNlLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpYndsL211bGxvX2Jhc2VjYXNlLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2RiMjA5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlid2wvbXVsbG9fYmFzZWNhc2UuYXNtCkBAIC0wLDAgKzEsMzk1IEBACitkbmwgIFg2NC02NCBtcG5fbXVsbG9fYmFzZWNhc2Ugb3B0aW1pc2VkIGZvciBJbnRlbCBCcm9hZHdlbGwuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqb3JuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgVGhlIGlubmVyIGxvb3BzIG9mIHRoaXMgY29kZSBhcmUgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGEgY29kZSBnZW5lcmF0aW9uIGFuZAorQyBvcHRpbWlzYXRpb24gdG9vbCBzdWl0ZSB3cml0dGVuIGJ5IERhdmlkIEhhcnZleSBhbmQgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK2RlZmluZShgcnAnLAkgICBgJXJkaScpCitkZWZpbmUoYHVwJywJICAgYCVyc2knKQorZGVmaW5lKGB2cF9wYXJhbScsIGAlcmR4JykKK2RlZmluZShgbicsCSAgIGAlcmN4JykKKworZGVmaW5lKGB2cCcsCWAlcjExJykKK2RlZmluZShgam1wcmVnJyxgJXJieCcpCitkZWZpbmUoYG5uJywgICAgYCVyYnAnKQorCitDIFRPRE8KK0MgICogU3VwcHJlc3MgbW9yZSBycFtdIHJld3JpdGVzIGluIGNvcm5lci4KK0MgICogUmVhcnJhbmdlIGZlZWQtaW4ganVtcHMgZm9yIHNob3J0IGJyYW5jaCBmb3Jtcy4KK0MgICogUGVyaGFwcyByb2xsIG91dCB0aGUgaGVhdnkgYXJ0aWxsZXJ5IGFuZCA4LXdheSB1bnJvbGwgb3V0ZXIgbG9vcC4gIFNpbmNlCitDICAgIGZlZWQtaW4gY29kZSBpbXBsb2RlcywgdGhlIGJsb3ctdXAgd2lsbCBub3QgYmUgbW9yZSB0aGFuIHBlcmhhcHMgNHguCitDICAqIE1pY3JvLW9wdGltaXNlIGNyaXRpY2FsIGxlYWQtaW4gY29kZSBibG9jayBhcm91bmQgTChlbnQpLgorQyAgKiBXcml0ZSBuIDwgNCBjb2RlIHNwZWNpZmljYWxseSBmb3IgQnJvYWR3ZWxsIChjdXJyZW50IGNvZGUgaXMgZm9yIEhhc3dlbGwpLgorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigzMikKK1BST0xPR1VFKG1wbl9tdWxsb19iYXNlY2FzZSkKKwlGVU5DX0VOVFJZKDQpCisJY21wCSQ0LCBSMzIobikKKwlqYWUJTChiaWcpCisKKwltb3YJdnBfcGFyYW0sIHZwCisJbW92CSh1cCksICVyZHgKKworCWNtcAkkMiwgUjMyKG4pCisJamFlCUwoZ3QxKQorTChuMSk6CWltdWwJKHZwKSwgJXJkeAorCW1vdgklcmR4LCAocnApCisJRlVOQ19FWElUKCkKKwlyZXQKK0woZ3QxKToJamEJTChndDIpCitMKG4yKToJbW92CSh2cCksICVyOQorCW11bHgoCSVyOSwgJXJheCwgJXJkeCkKKwltb3YJJXJheCwgKHJwKQorCW1vdgk4KHVwKSwgJXJheAorCWltdWwJJXI5LCAlcmF4CisJYWRkCSVyYXgsICVyZHgKKwltb3YJOCh2cCksICVyOQorCW1vdgkodXApLCAlcmN4CisJaW11bAklcjksICVyY3gKKwlhZGQJJXJjeCwgJXJkeAorCW1vdgklcmR4LCA4KHJwKQorCUZVTkNfRVhJVCgpCisJcmV0CitMKGd0Mik6CitMKG4zKToJbW92CSh2cCksICVyOQorCW11bHgoCSVyOSwgJXJheCwgJXIxMCkJQyB1MCB4IHYwCisJbW92CSVyYXgsIChycCkKKwltb3YJOCh1cCksICVyZHgKKwltdWx4KAklcjksICVyYXgsICVyZHgpCUMgdTEgeCB2MAorCWltdWwJMTYodXApLCAlcjkJCUMgdTIgeCB2MAorCWFkZAklcmF4LCAlcjEwCisJYWRjCSVyZHgsICVyOQorCW1vdgk4KHZwKSwgJXI4CisJbW92CSh1cCksICVyZHgKKwltdWx4KAklcjgsICVyYXgsICVyZHgpCUMgdTAgeCB2MQorCWFkZAklcmF4LCAlcjEwCisJYWRjCSVyZHgsICVyOQorCWltdWwJOCh1cCksICVyOAkJQyB1MSB4IHYxCisJYWRkCSVyOCwgJXI5CisJbW92CSVyMTAsIDgocnApCisJbW92CTE2KHZwKSwgJXIxMAorCW1vdgkodXApLCAlcmF4CisJaW11bAklcmF4LCAlcjEwCQlDIHUwIHggdjIKKwlhZGQJJXIxMCwgJXI5CisJbW92CSVyOSwgMTYocnApCisJRlVOQ19FWElUKCkKKwlyZXQKKworCUFMSUdOKDE2KQorTChiaWcpOglwdXNoCSVyMTQKKwlwdXNoCSVyMTIKKwlwdXNoCSVyYngKKwlwdXNoCSVyYnAKKwltb3YJLTgodnBfcGFyYW0sbiw4KSwgJXIxNAlDIEZJWE1FIFB1dCBhdCBhYnNvbHV0ZSBlbmQKKwlpbXVsCSh1cCksICVyMTQJCUMgRklYTUUgUHV0IGF0IGFic29sdXRlIGVuZAorCWxlYQktMyhuKSwgUjMyKG5uKQorCWxlYQk4KHZwX3BhcmFtKSwgdnAKKwltb3YJKHZwX3BhcmFtKSwgJXJkeAorCisJbW92CVIzMihuKSwgUjMyKCVyYXgpCisJc2hyCSQzLCBSMzIobikKKwlhbmQJJDcsIFIzMiglcmF4KQkJQyBjbGVhciBPRiwgQ0YgYXMgc2lkZS1lZmZlY3QKKwlsZWEJTChtdGFiKSglcmlwKSwgJXIxMAoraWZkZWYoYFBJQycsCitgCW1vdnNscQkoJXIxMCwlcmF4LDQpLCAlcmF4CisJbGVhCSglcmF4LCAlcjEwKSwgJXIxMAorCWptcAkqJXIxMAorJyxgCisJam1wCSooJXIxMCwlcmF4LDgpCisnKQorCitMKG1mMCk6CW11bHgoCSh1cCksICVyMTAsICVyOCkKKwlsZWEJNTYodXApLCB1cAorCWxlYQktOChycCksIHJwCisJbGVhCUwoZjcpKCVyaXApLCBqbXByZWcKKwlqbXAJTChtYjApCisKK0wobWYzKToJbXVseCgJKHVwKSwgJXI5LCAlcmF4KQorCWxlYQkxNih1cCksIHVwCisJbGVhCTE2KHJwKSwgcnAKKwlqcmN4eglMKG1jKQorCWluYwlSMzIobikKKwlsZWEJTChmMikoJXJpcCksIGptcHJlZworCWptcAlMKG1iMykKKworTChtYyk6CW11bHgoCS04LCh1cCksICVyMTAsICVyOCkKKwlhZGQJJXJheCwgJXIxMAorCW1vdgklcjksIC0xNihycCkKKwltdWx4KAkodXApLCAlcjksICVyYXgpCisJbW92CSVyMTAsIC04KHJwKQorCWFkYwklcjgsICVyOQorCW1vdgklcjksIChycCkKKwlqbXAJTChjMikKKworTChtZjQpOgltdWx4KAkodXApLCAlcjEwLCAlcjgpCisJbGVhCTI0KHVwKSwgdXAKKwlsZWEJMjQocnApLCBycAorCWluYwlSMzIobikKKwlsZWEJTChmMykoJXJpcCksIGptcHJlZworCWptcAlMKG1iNCkKKworTChtZjUpOgltdWx4KAkodXApLCAlcjksICVyYXgpCisJbGVhCTMyKHVwKSwgdXAKKwlsZWEJMzIocnApLCBycAorCWluYwlSMzIobikKKwlsZWEJTChmNCkoJXJpcCksIGptcHJlZworCWptcAlMKG1iNSkKKworTChtZjYpOgltdWx4KAkodXApLCAlcjEwLCAlcjgpCisJbGVhCTQwKHVwKSwgdXAKKwlsZWEJNDAocnApLCBycAorCWluYwlSMzIobikKKwlsZWEJTChmNSkoJXJpcCksIGptcHJlZworCWptcAlMKG1iNikKKworTChtZjcpOgltdWx4KAkodXApLCAlcjksICVyYXgpCisJbGVhCTQ4KHVwKSwgdXAKKwlsZWEJNDgocnApLCBycAorCWxlYQlMKGY2KSglcmlwKSwgam1wcmVnCisJam1wCUwobWI3KQorCitMKG1mMSk6CW11bHgoCSh1cCksICVyOSwgJXJheCkKKwlsZWEJTChmMCkoJXJpcCksIGptcHJlZworCWptcAlMKG1iMSkKKworTChtZjIpOgltdWx4KAkodXApLCAlcjEwLCAlcjgpCisJbGVhCTgodXApLCB1cAorCWxlYQk4KHJwKSwgcnAKKwlsZWEJTChmMSkoJXJpcCksIGptcHJlZworCW11bHgoCSh1cCksICVyOSwgJXJheCkKKworQyBGSVhNRSB1Z2x5IGZhbGx0aHJvdWdoIEZJWE1FCisJQUxJR04oMzIpCitMKG10b3ApOm1vdgklcjEwLCAtOChycCkKKwlhZGMJJXI4LCAlcjkKK0wobWIxKToJbXVseCgJOCwodXApLCAlcjEwLCAlcjgpCisJYWRjCSVyYXgsICVyMTAKKwlsZWEJNjQodXApLCB1cAorCW1vdgklcjksIChycCkKK0wobWIwKToJbW92CSVyMTAsIDgocnApCisJbXVseCgJLTQ4LCh1cCksICVyOSwgJXJheCkKKwlsZWEJNjQocnApLCBycAorCWFkYwklcjgsICVyOQorTChtYjcpOgltdWx4KAktNDAsKHVwKSwgJXIxMCwgJXI4KQorCW1vdgklcjksIC00OChycCkKKwlhZGMJJXJheCwgJXIxMAorTChtYjYpOgltb3YJJXIxMCwgLTQwKHJwKQorCW11bHgoCS0zMiwodXApLCAlcjksICVyYXgpCisJYWRjCSVyOCwgJXI5CitMKG1iNSk6CW11bHgoCS0yNCwodXApLCAlcjEwLCAlcjgpCisJbW92CSVyOSwgLTMyKHJwKQorCWFkYwklcmF4LCAlcjEwCitMKG1iNCk6CW11bHgoCS0xNiwodXApLCAlcjksICVyYXgpCisJbW92CSVyMTAsIC0yNChycCkKKwlhZGMJJXI4LCAlcjkKK0wobWIzKToJbXVseCgJLTgsKHVwKSwgJXIxMCwgJXI4KQorCWFkYwklcmF4LCAlcjEwCisJbW92CSVyOSwgLTE2KHJwKQorCWRlYwlSMzIobikKKwltdWx4KAkodXApLCAlcjksICVyYXgpCisJam56CUwobXRvcCkKKworTChtZW5kKTptb3YJJXIxMCwgLTgocnApCisJYWRjCSVyOCwgJXI5CisJbW92CSVyOSwgKHJwKQorCWFkYwklcmN4LCAlcmF4CisKKwlsZWEJOCgsbm4sOCksICVyMTIKKwluZWcJJXIxMgorCXNocgkkMywgUjMyKG5uKQorCWptcAlMKGVudCkKKworTChmMCk6CW11bHgoCSh1cCksICVyMTAsICVyOCkKKwlsZWEJLTgodXApLCB1cAorCWxlYQktOChycCksIHJwCisJbGVhCUwoZjcpKCVyaXApLCBqbXByZWcKKwlqbXAJTChiMCkKKworTChmMSk6CW11bHgoCSh1cCksICVyOSwgJXJheCkKKwlsZWEJLTEobm4pLCBSMzIobm4pCisJbGVhCUwoZjApKCVyaXApLCBqbXByZWcKKwlqbXAJTChiMSkKKworTChlbmQpOglhZG94KAkocnApLCAlcjkpCisJbW92CSVyOSwgKHJwKQorCWFkb3goCSVyY3gsICVyYXgpCQlDIHJlbGllcyBvbiByY3ggPSAwCisJYWRjCSVyY3gsICVyYXgJCUMgRklYTUUgc3VwcHJlc3MsIHVzZSBhZGMgYmVsb3c7IHJlcXMgZW50IHBhdGggZWRpdHMKKwlsZWEJOCglcjEyKSwgJXIxMgorTChlbnQpOgltdWx4KAk4LCh1cCksICVyMTAsICVyOCkJQyByOCB1bnVzZWQgKHVzZSBpbXVsPykKKwlhZGQJJXJheCwgJXIxNAorCWFkZAklcjEwLCAlcjE0CQlDIGgKKwlsZWEJKHVwLCVyMTIpLCB1cAkJQyByZXNldCB1cAorCWxlYQk4KHJwLCVyMTIpLCBycAkJQyByZXNldCBycAorCW1vdgkodnApLCAlcmR4CisJbGVhCTgodnApLCB2cAorCW9yCVIzMihubiksIFIzMihuKQkJQyBjb3B5IGNvdW50LCBjbGVhciBDRixPRiAobiA9IDAgcHJpb3IpCisJam1wCSpqbXByZWcKKworTChmNyk6CW11bHgoCSh1cCksICVyOSwgJXJheCkKKwlsZWEJLTE2KHVwKSwgdXAKKwlsZWEJLTE2KHJwKSwgcnAKKwlsZWEJTChmNikoJXJpcCksIGptcHJlZworCWptcAlMKGI3KQorCitMKGYyKToJbXVseCgJKHVwKSwgJXIxMCwgJXI4KQorCWxlYQk4KHVwKSwgdXAKKwlsZWEJOChycCksIHJwCisJbXVseCgJKHVwKSwgJXI5LCAlcmF4KQorCWxlYQlMKGYxKSglcmlwKSwgam1wcmVnCisKK0MgRklYTUUgdWdseSBmYWxsdGhyb3VnaCBGSVhNRQorCUFMSUdOKDMyKQorTCh0b3ApOglhZG94KAktOCwocnApLCAlcjEwKQorCWFkY3goCSVyOCwgJXI5KQorCW1vdgklcjEwLCAtOChycCkKKwlqcmN4eglMKGVuZCkKK0woYjEpOgltdWx4KAk4LCh1cCksICVyMTAsICVyOCkKKwlhZG94KAkocnApLCAlcjkpCisJbGVhCS0xKG4pLCBSMzIobikKKwltb3YJJXI5LCAocnApCisJYWRjeCgJJXJheCwgJXIxMCkKK0woYjApOgltdWx4KAkxNiwodXApLCAlcjksICVyYXgpCisJYWRjeCgJJXI4LCAlcjkpCisJYWRveCgJOCwocnApLCAlcjEwKQorCW1vdgklcjEwLCA4KHJwKQorTChiNyk6CW11bHgoCTI0LCh1cCksICVyMTAsICVyOCkKKwlsZWEJNjQodXApLCB1cAorCWFkY3goCSVyYXgsICVyMTApCisJYWRveCgJMTYsKHJwKSwgJXI5KQorCW1vdgklcjksIDE2KHJwKQorTChiNik6CW11bHgoCS0zMiwodXApLCAlcjksICVyYXgpCisJYWRveCgJMjQsKHJwKSwgJXIxMCkKKwlhZGN4KAklcjgsICVyOSkKKwltb3YJJXIxMCwgMjQocnApCitMKGI1KToJbXVseCgJLTI0LCh1cCksICVyMTAsICVyOCkKKwlhZGN4KAklcmF4LCAlcjEwKQorCWFkb3goCTMyLChycCksICVyOSkKKwltb3YJJXI5LCAzMihycCkKK0woYjQpOgltdWx4KAktMTYsKHVwKSwgJXI5LCAlcmF4KQorCWFkb3goCTQwLChycCksICVyMTApCisJYWRjeCgJJXI4LCAlcjkpCisJbW92CSVyMTAsIDQwKHJwKQorTChiMyk6CWFkb3goCTQ4LChycCksICVyOSkKKwltdWx4KAktOCwodXApLCAlcjEwLCAlcjgpCisJbW92CSVyOSwgNDgocnApCisJbGVhCTY0KHJwKSwgcnAKKwlhZGN4KAklcmF4LCAlcjEwKQorCW11bHgoCSh1cCksICVyOSwgJXJheCkKKwlqbXAJTCh0b3ApCisKK0woZjYpOgltdWx4KAkodXApLCAlcjEwLCAlcjgpCisJbGVhCTQwKHVwKSwgdXAKKwlsZWEJLTI0KHJwKSwgcnAKKwlsZWEJTChmNSkoJXJpcCksIGptcHJlZworCWptcAlMKGI2KQorCitMKGY1KToJbXVseCgJKHVwKSwgJXI5LCAlcmF4KQorCWxlYQkzMih1cCksIHVwCisJbGVhCS0zMihycCksIHJwCisJbGVhCUwoZjQpKCVyaXApLCBqbXByZWcKKwlqbXAJTChiNSkKKworTChmNCk6CW11bHgoCSh1cCksICVyMTAsICVyOCkKKwlsZWEJMjQodXApLCB1cAorCWxlYQktNDAocnApLCBycAorCWxlYQlMKGYzKSglcmlwKSwgam1wcmVnCisJam1wCUwoYjQpCisKK0woZjMpOgltdWx4KAkodXApLCAlcjksICVyYXgpCisJbGVhCTE2KHVwKSwgdXAKKwlsZWEJLTQ4KHJwKSwgcnAKKwlqcmN4eglMKGNvcikKKwlsZWEJTChmMikoJXJpcCksIGptcHJlZworCWptcAlMKGIzKQorCitMKGNvcik6CWFkb3goCTQ4LChycCksICVyOSkKKwltdWx4KAktOCwodXApLCAlcjEwLCAlcjgpCisJbW92CSVyOSwgNDgocnApCisJbGVhCTY0KHJwKSwgcnAKKwlhZGN4KAklcmF4LCAlcjEwKQorCW11bHgoCSh1cCksICVyOSwgJXJheCkKKwlhZG94KAktOCwocnApLCAlcjEwKQorCWFkY3goCSVyOCwgJXI5KQorCW1vdgklcjEwLCAtOChycCkJCUMgRklYTUUgc3VwcHJlc3MKKwlhZG94KAkocnApLCAlcjkpCisJbW92CSVyOSwgKHJwKQkJQyBGSVhNRSBzdXBwcmVzcworCWFkb3goCSVyY3gsICVyYXgpCitMKGMyKToKKwltdWx4KAk4LCh1cCksICVyMTAsICVyOCkKKwlhZGMJJXJheCwgJXIxNAorCWFkZAklcjEwLCAlcjE0CisJbW92CSh2cCksICVyZHgKKwl0ZXN0CVIzMiglcmN4KSwgUjMyKCVyY3gpCisJbXVseCgJLTE2LCh1cCksICVyMTAsICVyOCkKKwltdWx4KAktOCwodXApLCAlcjksICVyYXgpCisJYWRveCgJLTgsKHJwKSwgJXIxMCkKKwlhZGN4KAklcjgsICVyOSkKKwltb3YJJXIxMCwgLTgocnApCisJYWRveCgJKHJwKSwgJXI5KQorCWFkb3goCSVyY3gsICVyYXgpCisJYWRjCSVyY3gsICVyYXgKKwltdWx4KAkodXApLCAlcjEwLCAlcjgpCisJYWRkCSVyYXgsICVyMTQKKwlhZGQJJXIxMCwgJXIxNAorCW1vdgk4KHZwKSwgJXJkeAorCW11bHgoCS0xNiwodXApLCAlcmN4LCAlcmF4KQorCWFkZAklcjksICVyY3gKKwltb3YJJXJjeCwgKHJwKQorCWFkYwkkMCwgJXJheAorCW11bHgoCS04LCh1cCksICVyMTAsICVyOCkKKwlhZGQJJXJheCwgJXIxNAorCWFkZAklcjEwLCAlcjE0CisJbW92CSVyMTQsIDgocnApCisJcG9wCSVyYnAKKwlwb3AJJXJieAorCXBvcAklcjEyCisJcG9wCSVyMTQKKwlGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQorCUpVTVBUQUJTRUNUCisJQUxJR04oOCkKK0wobXRhYik6Sk1QRU5UKAlMKG1mNyksIEwobXRhYikpCisJSk1QRU5UKAlMKG1mMCksIEwobXRhYikpCisJSk1QRU5UKAlMKG1mMSksIEwobXRhYikpCisJSk1QRU5UKAlMKG1mMiksIEwobXRhYikpCisJSk1QRU5UKAlMKG1mMyksIEwobXRhYikpCisJSk1QRU5UKAlMKG1mNCksIEwobXRhYikpCisJSk1QRU5UKAlMKG1mNSksIEwobXRhYikpCisJSk1QRU5UKAlMKG1mNiksIEwobXRhYikpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaWJ3bC9zcXJfYmFzZWNhc2UuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlid2wvc3FyX2Jhc2VjYXNlLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODFiMDFiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlid2wvc3FyX2Jhc2VjYXNlLmFzbQpAQCAtMCwwICsxLDgzOSBAQAorZG5sICBBTUQ2NCBtcG5fc3FyX2Jhc2VjYXNlIG9wdGltaXNlZCBmb3IgSW50ZWwgQnJvYWR3ZWxsLgorCitkbmwgIENvcHlyaWdodCAyMDE1LCAyMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgY3ljbGVzL2xpbWIJbXVsXzEJCWFkZG11bF8xCitDIEFNRCBLOCxLOQluL2EJCW4vYQorQyBBTUQgSzEwCW4vYQkJbi9hCitDIEFNRCBiZDEJbi9hCQluL2EKK0MgQU1EIGJkMgluL2EJCW4vYQorQyBBTUQgYmQzCW4vYQkJbi9hCitDIEFNRCBiZDQJID8JCSA/CitDIEFNRCB6ZW4JID8JCSA/CitDIEFNRCBidDEJbi9hCQluL2EKK0MgQU1EIGJ0MgluL2EJCW4vYQorQyBJbnRlbCBQNAluL2EJCW4vYQorQyBJbnRlbCBQTlIJbi9hCQluL2EKK0MgSW50ZWwgTkhNCW4vYQkJbi9hCitDIEludGVsIFNCUgluL2EJCW4vYQorQyBJbnRlbCBJQlIJbi9hCQluL2EKK0MgSW50ZWwgSFdMCSAxLjY4CQluL2EKK0MgSW50ZWwgQldMCSAxLjUxCSAgICAgIDEuNjctMS43NAorQyBJbnRlbCBTS0wJIDEuNTIJICAgICAgMS42My0xLjcxCitDIEludGVsIGF0b20Jbi9hCQluL2EKK0MgSW50ZWwgU0xNCW4vYQkJbi9hCitDIFZJQSBuYW5vCW4vYQkJbi9hCisKK0MgVGhlIGlubmVyIGxvb3BzIG9mIHRoaXMgY29kZSBhcmUgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGEgY29kZSBnZW5lcmF0aW9uIGFuZAorQyBvcHRpbWlzYXRpb24gdG9vbCBzdWl0ZSB3cml0dGVuIGJ5IERhdmlkIEhhcnZleSBhbmQgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK0MgVE9ETworQyAgKiBXZSBoYXZlIDggYWRkbXVsXzEgbG9vcHMgd2hpY2ggZmFsbCBpbnRvIGVhY2ggb3RoZXIuICBUaGUgaWRlYSBpcyB0byBzYXZlCitDICAgIG9uIHN3aXRjaGluZyBjb2RlLCBzaW5jZSBhIGNpcmN1bGFybHkgdXBkYXRlZCBjb21wdXRlZCBnb3RvIHRhcmdldCB3aWxsCitDICAgIGhhcmRseSBhbGxvdyBjb3JyZWN0IGJyYW5jaCBwcmVkaWN0aW9uLiAgT24gMm5kIHRob3VnaHQsIHdlIG5vdyBtaWdodCBtYWtlCitDICAgIGVhY2ggb2YgdGhlIDggbG9vcCBicmFuY2hlcyBiZSBwb29ybHkgcHJlZGljdGVkIHNpbmNlIHRoZXkgd2lsbCBiZQorQyAgICBleGVjdXRlZCBmZXdlciB0aW1lcyBmb3IgZWFjaCB0aW1lLiAgV2l0aCBqdXN0IG9uZSBhZGRtdWxfMSBsb29wLCB0aGUgbG9vcAorQyAgICBjb3VudCB3aWxsIGNoYW5nZSBvbmx5IG9uY2UgZWFjaCA4dGggdGltZS4KK0MgICogRG8gb3ZlcmxhcHBlZCBzb2Z0d2FyZSBwaXBlbGluaW5nLgorQyAgKiBQZXJoYXBzIGxvYWQgaW4gc2hyeC9zYXJ4LCBlbGltaW5hdGluZyBzZXBhcmF0ZSBsb2FkIGluc24uCitDICAqIFNjaGVkdWxlIGFkZCtzdG9yZWQgaW4gc21hbGwgbiBjb2RlLgorQyAgKiBUcnkgc3dhcHBpbmcgYWRveCBhbmQgYWRjeCBpbnNuLCBtYWtpbmcgbXVseCBoYXZlIG1vcmUgdGltZSB0byBydW4uCisKK2RlZmluZShgcnAnLCAgICAgIGAlcmRpJykKK2RlZmluZShgdXAnLCAgICAgIGAlcnNpJykKK2RlZmluZShgdW5fcGFyYW0nLGAlcmR4JykKKworZGVmaW5lKGBuJywgICAgICAgYCVyY3gnKQorZGVmaW5lKGB1bl9zYXZlJywgYCVyYngnKQorZGVmaW5lKGB1MCcsICAgICAgYCVyZHgnKQorCitkZWZpbmUoYHcwJywJYCVyOCcpCitkZWZpbmUoYHcxJywJYCVyOScpCitkZWZpbmUoYHcyJywJYCVyMTAnKQorZGVmaW5lKGB3MycsCWAlcjExJykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMTYpCitQUk9MT0dVRShtcG5fc3FyX2Jhc2VjYXNlKQorCUZVTkNfRU5UUlkoMykKKworCWNtcAkkMiwgdW5fcGFyYW0KKwlqYWUJTChndDEpCisKKwltb3YJKHVwKSwgJXJkeAorCW11bHgoCSVyZHgsICVyYXgsICVyZHgpCisJbW92CSVyYXgsIChycCkKKwltb3YJJXJkeCwgOChycCkKKwlGVU5DX0VYSVQoKQorCXJldAorCitMKGd0MSk6CWpuZQlMKGd0MikKKworCW1vdgkodXApLCAlcmR4CisJbW92CTgodXApLCAlcmN4CisJbXVseCgJJXJjeCwgJXI5LCAlcjEwKQlDIHYwICogdjEJVyAxIDIKKwltdWx4KAklcmR4LCAlcmF4LCAlcjgpCUMgdjAgKiB2MAlXIDAgMQorCW1vdgklcmN4LCAlcmR4CisJbXVseCgJJXJkeCwgJXIxMSwgJXJkeCkJQyB2MSAqIHYxCVcgMiAzCisJYWRkCSVyOSwgJXI5CQlDCQlXIDEKKwlhZGMJJXIxMCwgJXIxMAkJQwkJVyAyCisJYWRjCSQwLCAlcmR4CQlDCQlXIDMKKwlhZGQJJXI5LCAlcjgJCUMgVyAxCisJYWRjCSVyMTEsICVyMTAJCUMgVyAyCisJYWRjCSQwLCAlcmR4CQlDIFcgMworCW1vdgklcmF4LCAocnApCisJbW92CSVyOCwgOChycCkKKwltb3YJJXIxMCwgMTYocnApCisJbW92CSVyZHgsIDI0KHJwKQorCUZVTkNfRVhJVCgpCisJcmV0CisKK0woZ3QyKToJY21wCSQ0LCB1bl9wYXJhbQorCWphZQlMKGd0MykKKworCXB1c2gJJXJieAorCW1vdgkodXApLCAlcmR4CisJbXVseCgJOCwodXApLCB3MiwgdzMpCisJbXVseCgJMTYsKHVwKSwgdzAsIHcxKQorCWFkZAl3MywgdzAKKwltb3YJOCh1cCksICVyZHgKKwltdWx4KAkxNiwodXApLCAlcmF4LCB3MykKKwlhZGMJJXJheCwgdzEKKwlhZGMJJDAsIHczCisJdGVzdAlSMzIoJXJieCksIFIzMiglcmJ4KQorCW1vdgkodXApLCAlcmR4CisJbXVseCgJJXJkeCwgJXJieCwgJXJjeCkKKwltb3YJJXJieCwgKHJwKQorCW1vdgk4KHVwKSwgJXJkeAorCW11bHgoCSVyZHgsICVyYXgsICVyYngpCisJbW92CTE2KHVwKSwgJXJkeAorCW11bHgoCSVyZHgsICVyc2ksICVyZHgpCisJYWRjeCgJdzIsIHcyKQorCWFkY3goCXcwLCB3MCkKKwlhZGN4KAl3MSwgdzEpCisJYWRjeCgJdzMsIHczKQorCWFkb3goCXcyLCAlcmN4KQorCWFkb3goCXcwLCAlcmF4KQorCWFkb3goCXcxLCAlcmJ4KQorCWFkb3goCXczLCAlcnNpKQorCW1vdgkkMCwgUjMyKCVyOCkKKwlhZG94KAklcjgsICVyZHgpCisJYWRjeCgJJXI4LCAlcmR4KQorCW1vdgklcmN4LCA4KHJwKQorCW1vdgklcmF4LCAxNihycCkKKwltb3YJJXJieCwgMjQocnApCisJbW92CSVyc2ksIDMyKHJwKQorCW1vdgklcmR4LCA0MChycCkKKwlwb3AJJXJieAorCUZVTkNfRVhJVCgpCisJcmV0CisKK0woZ3QzKToJcHVzaAklcmJ4CisKKwlsZWEJLTModW5fcGFyYW0pLCBSMzIodW5fc2F2ZSkKKwlsZWEJNSh1bl9wYXJhbSksIFIzMihuKQorCW1vdglSMzIodW5fcGFyYW0pLCBSMzIoJXJheCkKKwlhbmQJJC04LCBSMzIodW5fc2F2ZSkKKwlzaHIJJDMsIFIzMihuKQkJQyBjb3VudCBmb3IgbXVsXzEgbG9vcAorCW5lZwl1bl9zYXZlCQkJQyA4KmNvdW50IGFuZCBvZmZlcnQgZm9yIGFkZG11bF8xIGxvb3BzCisJYW5kCSQ3LCBSMzIoJXJheCkJCUMgY2xlYXIgQ0YgZm9yIGFkYyBhcyBzaWRlLWVmZmVjdAorCisJbW92CSh1cCksIHUwCisKKwlsZWEJTChtdGFiKSglcmlwKSwgJXIxMAoraWZkZWYoYFBJQycsCitgCW1vdnNscQkoJXIxMCwlcmF4LDQpLCAlcjgKKwlsZWEJKCVyOCwgJXIxMCksICVyMTAKKwlqbXAJKiVyMTAKKycsYAorCWptcAkqKCVyMTAsJXJheCw4KQorJykKKworTChtZjApOgltdWx4KAl1MCwgdzAsIHcxKQkJQyB1cFswXV4yCisJYWRkCXUwLCB1MAorCW11bHgoCTgsKHVwKSwgdzIsIHczKQorCWxlYQk2NCh1cCksIHVwCisJYWRkCXcxLCB3MgorCWptcAlMKG1iMCkKKworTChtZjMpOgltdWx4KAl1MCwgdzIsIHczKQkJQyB1cFswXV4yCisJYWRkCXUwLCB1MAorCW1vdgl3MiwgKHJwKQorCW11bHgoCTgsKHVwKSwgdzAsIHcxKQorCWxlYQkyNCh1cCksIHVwCisJbGVhCTI0KHJwKSwgcnAKKwlhZGQJdzMsIHcwCisJam1wCUwobWIzKQorCitMKG1mNCk6CW11bHgoCXUwLCB3MCwgdzEpCQlDIHVwWzBdXjIKKwlhZGQJdTAsIHUwCisJbXVseCgJOCwodXApLCB3MiwgdzMpCisJbW92CXcwLCAocnApCisJbGVhCTMyKHVwKSwgdXAKKwlsZWEJMzIocnApLCBycAorCWFkZAl3MSwgdzIKKwlqbXAJTChtYjQpCisKK0wobWY1KToJbXVseCgJdTAsIHcyLCB3MykJCUMgdXBbMF1eMgorCWFkZAl1MCwgdTAKKwltdWx4KAk4LCh1cCksIHcwLCB3MSkKKwltb3YJdzIsIChycCkKKwlsZWEJNDAodXApLCB1cAorCWxlYQk0MChycCksIHJwCisJYWRkCXczLCB3MAorCWptcAlMKG1iNSkKKworTChtZjYpOgltdWx4KAl1MCwgdzAsIHcxKQkJQyB1cFswXV4yCisJYWRkCXUwLCB1MAorCW11bHgoCTgsKHVwKSwgdzIsIHczKQorCW1vdgl3MCwgKHJwKQorCWxlYQk0OCh1cCksIHVwCisJbGVhCTQ4KHJwKSwgcnAKKwlhZGQJdzEsIHcyCisJam1wCUwobWI2KQorCitMKG1mNyk6CW11bHgoCXUwLCB3MiwgdzMpCQlDIHVwWzBdXjIKKwlhZGQJdTAsIHUwCisJbXVseCgJOCwodXApLCB3MCwgdzEpCisJbW92CXcyLCAocnApCisJbGVhCTU2KHVwKSwgdXAKKwlsZWEJNTYocnApLCBycAorCWFkZAl3MywgdzAKKwlqbXAJTChtYjcpCisKK0wobWYxKToJbXVseCgJdTAsIHcyLCB3MykJCUMgdXBbMF1eMgorCWFkZAl1MCwgdTAKKwltdWx4KAk4LCh1cCksIHcwLCB3MSkKKwltb3YJdzIsIChycCkKKwlsZWEJOCh1cCksIHVwCisJbGVhCTgocnApLCBycAorCWFkZAl3MywgdzAKKwlqbXAJTChtYjEpCisKK0wobWYyKToJbXVseCgJdTAsIHcwLCB3MSkJCUMgdXBbMF1eMgorCWFkZAl1MCwgdTAKKwltdWx4KAk4LCh1cCksIHcyLCB3MykKKwltb3YJdzAsIChycCkKKwlsZWEJMTYodXApLCB1cAorCWxlYQkxNihycCksIHJwCisJZGVjCVIzMihuKQorCWFkZAl3MSwgdzIKKwltdWx4KAkodXApLCB3MCwgdzEpCisKKwlBTElHTigxNikKK0wodG9wKToJbW92CXcyLCAtOChycCkKKwlhZGMJdzMsIHcwCitMKG1iMSk6CW11bHgoCTgsKHVwKSwgdzIsIHczKQorCWFkYwl3MSwgdzIKKwlsZWEJNjQodXApLCB1cAorTChtYjApOgltb3YJdzAsIChycCkKKwltb3YJdzIsIDgocnApCisJbXVseCgJLTQ4LCh1cCksIHcwLCB3MSkKKwlsZWEJNjQocnApLCBycAorCWFkYwl3MywgdzAKK0wobWI3KToJbXVseCgJLTQwLCh1cCksIHcyLCB3MykKKwltb3YJdzAsIC00OChycCkKKwlhZGMJdzEsIHcyCitMKG1iNik6CW1vdgl3MiwgLTQwKHJwKQorCW11bHgoCS0zMiwodXApLCB3MCwgdzEpCisJYWRjCXczLCB3MAorTChtYjUpOgltdWx4KAktMjQsKHVwKSwgdzIsIHczKQorCW1vdgl3MCwgLTMyKHJwKQorCWFkYwl3MSwgdzIKK0wobWI0KToJbXVseCgJLTE2LCh1cCksIHcwLCB3MSkKKwltb3YJdzIsIC0yNChycCkKKwlhZGMJdzMsIHcwCitMKG1iMyk6CW11bHgoCS04LCh1cCksIHcyLCB3MykKKwlhZGMJdzEsIHcyCisJbW92CXcwLCAtMTYocnApCisJZGVjCVIzMihuKQorCW11bHgoCSh1cCksIHcwLCB3MSkKKwlqbnoJTCh0b3ApCisKK0woZW5kKToJbW92CXcyLCAtOChycCkKKwlhZGMJdzMsIHcwCitDCW1vdgl3MCwgKHJwKQorQwlhZGMJJXJjeCwgdzEKK0MJbW92CXcxLCA4KHJwKQorCisJbGVhCUwoYXRhYikoJXJpcCksICVyMTAKK2lmZGVmKGBQSUMnLAorYAltb3ZzbHEJKCVyMTAsJXJheCw0KSwgJXIxMQorCWxlYQkoJXIxMSwgJXIxMCksICVyMTEKKycsYAorCW1vdgkoJXIxMCwlcmF4LDgpLCAlcjExCisnKQorCW1vdgkkNjMsIFIzMiglcmF4KQorCWptcAkqJXIxMQorCitMKGVkMCk6CWFkb3goCShycCksIHcwKQorCWFkb3goCSVyY3gsIHcxKQkJQyByZWxpZXMgb24gcmN4ID0gMAorTChmNyk6CW1vdgl3MCwgKHJwKQorCWFkYwklcmN4LCB3MQkJQyByZWxpZXMgb24gcmN4ID0gMAorCW1vdgl3MSwgOChycCkKKwlsZWEJLTY0KHVwLHVuX3NhdmUsOCksIHVwCisJbW92CVIzMih1bl9zYXZlKSwgUjMyKG4pCisJbGVhCS01NihycCx1bl9zYXZlLDgpLCBycAorCW1vdgkodXApLCB3MQkJQyB1cFstMV0KKwltb3YJOCh1cCksIHUwCQlDIHVwWzBdCisJc2hyeCgJJXJheCwgdzEsIHcwKQorCXNhcngoCSVyYXgsIHcxLCB3MSkKKwlhbmQJdTAsIHcxCQkJQyAiY2kiIGluIEMgY29kZQorCW11bHgoCXUwLCB3MiwgdzMpCQlDIHVwWzBdXjIKKwlsZWEJKHcwLHUwLDIpLCB1MAkJQyAidTAiIGFyZyBpbiBDIGNvZGUKKwlqbXAJTChiNykKKworCUFMSUdOKDE2KQorTCh0cDApOglhZG94KAktOCwocnApLCB3MikKKwlhZGN4KAl3MywgdzApCisJbW92CXcyLCAtOChycCkKKwlqcmN4eglMKGVkMCkKKwltdWx4KAk4LCh1cCksIHcyLCB3MykKKwlhZG94KAkocnApLCB3MCkKKwlsZWEJOChuKSwgUjMyKG4pCitMKGIwKToJbW92CXcwLCAocnApCisJYWRjeCgJdzEsIHcyKQorCW11bHgoCTE2LCh1cCksIHcwLCB3MSkKKwlhZGN4KAl3MywgdzApCisJYWRveCgJOCwocnApLCB3MikKKwltb3YJdzIsIDgocnApCisJbXVseCgJMjQsKHVwKSwgdzIsIHczKQorCWxlYQk2NCh1cCksIHVwCisJYWRjeCgJdzEsIHcyKQorCWFkb3goCTE2LChycCksIHcwKQorCW1vdgl3MCwgMTYocnApCisJbXVseCgJLTMyLCh1cCksIHcwLCB3MSkKKwlhZG94KAkyNCwocnApLCB3MikKKwlhZGN4KAl3MywgdzApCisJbW92CXcyLCAyNChycCkKKwltdWx4KAktMjQsKHVwKSwgdzIsIHczKQorCWFkY3goCXcxLCB3MikKKwlhZG94KAkzMiwocnApLCB3MCkKKwltb3YJdzAsIDMyKHJwKQorCW11bHgoCS0xNiwodXApLCB3MCwgdzEpCisJYWRveCgJNDAsKHJwKSwgdzIpCisJYWRjeCgJdzMsIHcwKQorCW1vdgl3MiwgNDAocnApCisJYWRveCgJNDgsKHJwKSwgdzApCisJbXVseCgJLTgsKHVwKSwgdzIsIHczKQorCW1vdgl3MCwgNDgocnApCisJbGVhCTY0KHJwKSwgcnAKKwlhZGN4KAl3MSwgdzIpCisJbXVseCgJKHVwKSwgdzAsIHcxKQorCWptcAlMKHRwMCkKKworTChlZDEpOglhZG94KAkocnApLCB3MCkKKwlhZG94KAklcmN4LCB3MSkJCUMgcmVsaWVzIG9uIHJjeCA9IDAKK0woZjApOgltb3YJdzAsIChycCkKKwlhZGMJJXJjeCwgdzEJCUMgcmVsaWVzIG9uIHJjeCA9IDAKKwltb3YJdzEsIDgocnApCisJbGVhCS02NCh1cCx1bl9zYXZlLDgpLCB1cAorCW1vdglSMzIodW5fc2F2ZSksIFIzMihuKQorCWxlYQktNTYocnAsdW5fc2F2ZSw4KSwgcnAKKwltb3YJLTgodXApLCB3MwkJQyB1cFstMV0KKwltb3YJKHVwKSwgdTAJCUMgdXBbMF0KKwlzaHJ4KAklcmF4LCB3MywgdzIpCisJc2FyeCgJJXJheCwgdzMsIHczKQorCWFuZAl1MCwgdzMJCQlDICJjaSIgaW4gQyBjb2RlCisJbXVseCgJdTAsIHcwLCB3MSkJCUMgdXBbMF1eMgorCWxlYQkodzIsdTAsMiksIHUwCQlDICJ1MCIgYXJnIGluIEMgY29kZQorCWFkY3goCXczLCB3MCkKKwltdWx4KAk4LCh1cCksIHcyLCB3MykKKwlhZG94KAkocnApLCB3MCkKKwlqbXAJTChiMCkKKworCUFMSUdOKDE2KQorTCh0cDEpOglhZG94KAktOCwocnApLCB3MikKKwlhZGN4KAl3MywgdzApCisJbW92CXcyLCAtOChycCkKKwlqcmN4eglMKGVkMSkKK0woYjEpOgltdWx4KAk4LCh1cCksIHcyLCB3MykKKwlhZG94KAkocnApLCB3MCkKKwlsZWEJOChuKSwgUjMyKG4pCisJbW92CXcwLCAocnApCisJYWRjeCgJdzEsIHcyKQorCW11bHgoCTE2LCh1cCksIHcwLCB3MSkKKwlhZGN4KAl3MywgdzApCisJYWRveCgJOCwocnApLCB3MikKKwltb3YJdzIsIDgocnApCisJbXVseCgJMjQsKHVwKSwgdzIsIHczKQorCWxlYQk2NCh1cCksIHVwCisJYWRjeCgJdzEsIHcyKQorCWFkb3goCTE2LChycCksIHcwKQorCW1vdgl3MCwgMTYocnApCisJbXVseCgJLTMyLCh1cCksIHcwLCB3MSkKKwlhZG94KAkyNCwocnApLCB3MikKKwlhZGN4KAl3MywgdzApCisJbW92CXcyLCAyNChycCkKKwltdWx4KAktMjQsKHVwKSwgdzIsIHczKQorCWFkY3goCXcxLCB3MikKKwlhZG94KAkzMiwocnApLCB3MCkKKwltb3YJdzAsIDMyKHJwKQorCW11bHgoCS0xNiwodXApLCB3MCwgdzEpCisJYWRveCgJNDAsKHJwKSwgdzIpCisJYWRjeCgJdzMsIHcwKQorCW1vdgl3MiwgNDAocnApCisJYWRveCgJNDgsKHJwKSwgdzApCisJbXVseCgJLTgsKHVwKSwgdzIsIHczKQorCW1vdgl3MCwgNDgocnApCisJbGVhCTY0KHJwKSwgcnAKKwlhZGN4KAl3MSwgdzIpCisJbXVseCgJKHVwKSwgdzAsIHcxKQorCWptcAlMKHRwMSkKKworTChlZDIpOglhZG94KAkocnApLCB3MCkKKwlhZG94KAklcmN4LCB3MSkJCUMgcmVsaWVzIG9uIHJjeCA9IDAKK0woZjEpOgltb3YJdzAsIChycCkKKwlhZGMJJXJjeCwgdzEJCUMgcmVsaWVzIG9uIHJjeCA9IDAKKwltb3YJdzEsIDgocnApCisJbGVhCSh1cCx1bl9zYXZlLDgpLCB1cAorCW1vdglSMzIodW5fc2F2ZSksIFIzMihuKQorCWxlYQk4KHVuX3NhdmUpLCB1bl9zYXZlCisJbGVhCS01NihycCx1bl9zYXZlLDgpLCBycAorCW1vdgktMTYodXApLCB3MQkJQyB1cFstMV0KKwltb3YJLTgodXApLCB1MAkJQyB1cFswXQorCXNocngoCSVyYXgsIHcxLCB3MCkKKwlzYXJ4KAklcmF4LCB3MSwgdzEpCisJYW5kCXUwLCB3MQkJCUMgImNpIiBpbiBDIGNvZGUKKwltdWx4KAl1MCwgdzIsIHczKQkJQyB1cFswXV4yCisJbGVhCSh3MCx1MCwyKSwgdTAJCUMgInUwIiBhcmcgaW4gQyBjb2RlCisJYWRjeCgJdzEsIHcyKQkJCUMgRklYTUU6IGNyb3NzanVtcD8KKwltdWx4KAkodXApLCB3MCwgdzEpCisJYWRveCgJLTgsKHJwKSwgdzIpCisJYWRjeCgJdzMsIHcwKQorCW1vdgl3MiwgLTgocnApCisJam1wCUwoYjEpCisKKwlBTElHTigxNikKK0wodHAyKToJYWRveCgJLTgsKHJwKSwgdzIpCisJYWRjeCgJdzMsIHcwKQorCW1vdgl3MiwgLTgocnApCisJanJjeHoJTChlZDIpCisJbXVseCgJOCwodXApLCB3MiwgdzMpCisJYWRveCgJKHJwKSwgdzApCisJbGVhCTgobiksIFIzMihuKQorCW1vdgl3MCwgKHJwKQorCWFkY3goCXcxLCB3MikKKwltdWx4KAkxNiwodXApLCB3MCwgdzEpCisJYWRjeCgJdzMsIHcwKQorCWFkb3goCTgsKHJwKSwgdzIpCisJbW92CXcyLCA4KHJwKQorCW11bHgoCTI0LCh1cCksIHcyLCB3MykKKwlsZWEJNjQodXApLCB1cAorCWFkY3goCXcxLCB3MikKKwlhZG94KAkxNiwocnApLCB3MCkKKwltb3YJdzAsIDE2KHJwKQorCW11bHgoCS0zMiwodXApLCB3MCwgdzEpCisJYWRveCgJMjQsKHJwKSwgdzIpCisJYWRjeCgJdzMsIHcwKQorCW1vdgl3MiwgMjQocnApCisJbXVseCgJLTI0LCh1cCksIHcyLCB3MykKKwlhZGN4KAl3MSwgdzIpCisJYWRveCgJMzIsKHJwKSwgdzApCisJbW92CXcwLCAzMihycCkKKwltdWx4KAktMTYsKHVwKSwgdzAsIHcxKQorCWFkb3goCTQwLChycCksIHcyKQorCWFkY3goCXczLCB3MCkKKwltb3YJdzIsIDQwKHJwKQorTChiMik6CWFkb3goCTQ4LChycCksIHcwKQorCW11bHgoCS04LCh1cCksIHcyLCB3MykKKwltb3YJdzAsIDQ4KHJwKQorCWxlYQk2NChycCksIHJwCisJYWRjeCgJdzEsIHcyKQorCW11bHgoCSh1cCksIHcwLCB3MSkKKwlqbXAJTCh0cDIpCisKK0woZWQzKToJYWRveCgJKHJwKSwgdzApCisJYWRveCgJJXJjeCwgdzEpCQlDIHJlbGllcyBvbiByY3ggPSAwCitMKGYyKToJbW92CXcwLCAocnApCisJYWRjCSVyY3gsIHcxCQlDIHJlbGllcyBvbiByY3ggPSAwCisJbW92CXcxLCA4KHJwKQorCWxlYQkodXAsdW5fc2F2ZSw4KSwgdXAKKwlvcglSMzIodW5fc2F2ZSksIFIzMihuKQorCWp6CUwoY29yMykKKwlsZWEJLTU2KHJwLHVuX3NhdmUsOCksIHJwCisJbW92CS0yNCh1cCksIHczCQlDIHVwWy0xXQorCW1vdgktMTYodXApLCB1MAkJQyB1cFswXQorCXNocngoCSVyYXgsIHczLCB3MikKKwlzYXJ4KAklcmF4LCB3MywgdzMpCisJYW5kCXUwLCB3MwkJCUMgImNpIiBpbiBDIGNvZGUKKwltdWx4KAl1MCwgdzAsIHcxKQkJQyB1cFswXV4yCisJbGVhCSh3Mix1MCwyKSwgdTAJCUMgInUwIiBhcmcgaW4gQyBjb2RlCisJYWRjeCgJdzMsIHcwKQorCWptcAlMKGIyKQorCisJQUxJR04oMTYpCitMKHRwMyk6CWFkb3goCS04LChycCksIHcyKQorCWFkY3goCXczLCB3MCkKKwltb3YJdzIsIC04KHJwKQorCWpyY3h6CUwoZWQzKQorCW11bHgoCTgsKHVwKSwgdzIsIHczKQorCWFkb3goCShycCksIHcwKQorCWxlYQk4KG4pLCBSMzIobikKKwltb3YJdzAsIChycCkKKwlhZGN4KAl3MSwgdzIpCisJbXVseCgJMTYsKHVwKSwgdzAsIHcxKQorCWFkY3goCXczLCB3MCkKKwlhZG94KAk4LChycCksIHcyKQorCW1vdgl3MiwgOChycCkKKwltdWx4KAkyNCwodXApLCB3MiwgdzMpCisJbGVhCTY0KHVwKSwgdXAKKwlhZGN4KAl3MSwgdzIpCisJYWRveCgJMTYsKHJwKSwgdzApCisJbW92CXcwLCAxNihycCkKKwltdWx4KAktMzIsKHVwKSwgdzAsIHcxKQorCWFkb3goCTI0LChycCksIHcyKQorCWFkY3goCXczLCB3MCkKKwltb3YJdzIsIDI0KHJwKQorCW11bHgoCS0yNCwodXApLCB3MiwgdzMpCisJYWRjeCgJdzEsIHcyKQorCWFkb3goCTMyLChycCksIHcwKQorCW1vdgl3MCwgMzIocnApCitMKGIzKToJbXVseCgJLTE2LCh1cCksIHcwLCB3MSkKKwlhZG94KAk0MCwocnApLCB3MikKKwlhZGN4KAl3MywgdzApCisJbW92CXcyLCA0MChycCkKKwlhZG94KAk0OCwocnApLCB3MCkKKwltdWx4KAktOCwodXApLCB3MiwgdzMpCisJbW92CXcwLCA0OChycCkKKwlsZWEJNjQocnApLCBycAorCWFkY3goCXcxLCB3MikKKwltdWx4KAkodXApLCB3MCwgdzEpCisJam1wCUwodHAzKQorCitMKGVkNCk6CWFkb3goCShycCksIHcwKQorCWFkb3goCSVyY3gsIHcxKQkJQyByZWxpZXMgb24gcmN4ID0gMAorTChmMyk6CW1vdgl3MCwgKHJwKQorCWFkYwklcmN4LCB3MQkJQyByZWxpZXMgb24gcmN4ID0gMAorCW1vdgl3MSwgOChycCkKKwlsZWEJKHVwLHVuX3NhdmUsOCksIHVwCisJbW92CVIzMih1bl9zYXZlKSwgUjMyKG4pCisJbGVhCS01NihycCx1bl9zYXZlLDgpLCBycAorCW1vdgktMzIodXApLCB3MQkJQyB1cFstMV0KKwltb3YJLTI0KHVwKSwgdTAJCUMgdXBbMF0KKwlzaHJ4KAklcmF4LCB3MSwgdzApCisJc2FyeCgJJXJheCwgdzEsIHcxKQorCWFuZAl1MCwgdzEJCQlDICJjaSIgaW4gQyBjb2RlCisJbXVseCgJdTAsIHcyLCB3MykJCUMgdXBbMF1eMgorCWxlYQkodzAsdTAsMiksIHUwCQlDICJ1MCIgYXJnIGluIEMgY29kZQorCWFkY3goCXcxLCB3MikKKwlqbXAJTChiMykKKworCUFMSUdOKDE2KQorTCh0cDQpOglhZG94KAktOCwocnApLCB3MikKKwlhZGN4KAl3MywgdzApCisJbW92CXcyLCAtOChycCkKKwlqcmN4eglMKGVkNCkKKwltdWx4KAk4LCh1cCksIHcyLCB3MykKKwlhZG94KAkocnApLCB3MCkKKwlsZWEJOChuKSwgUjMyKG4pCisJbW92CXcwLCAocnApCisJYWRjeCgJdzEsIHcyKQorCW11bHgoCTE2LCh1cCksIHcwLCB3MSkKKwlhZGN4KAl3MywgdzApCisJYWRveCgJOCwocnApLCB3MikKKwltb3YJdzIsIDgocnApCisJbXVseCgJMjQsKHVwKSwgdzIsIHczKQorCWxlYQk2NCh1cCksIHVwCisJYWRjeCgJdzEsIHcyKQorCWFkb3goCTE2LChycCksIHcwKQorCW1vdgl3MCwgMTYocnApCisJbXVseCgJLTMyLCh1cCksIHcwLCB3MSkKKwlhZG94KAkyNCwocnApLCB3MikKKwlhZGN4KAl3MywgdzApCisJbW92CXcyLCAyNChycCkKK0woYjQpOgltdWx4KAktMjQsKHVwKSwgdzIsIHczKQorCWFkY3goCXcxLCB3MikKKwlhZG94KAkzMiwocnApLCB3MCkKKwltb3YJdzAsIDMyKHJwKQorCW11bHgoCS0xNiwodXApLCB3MCwgdzEpCisJYWRveCgJNDAsKHJwKSwgdzIpCisJYWRjeCgJdzMsIHcwKQorCW1vdgl3MiwgNDAocnApCisJYWRveCgJNDgsKHJwKSwgdzApCisJbXVseCgJLTgsKHVwKSwgdzIsIHczKQorCW1vdgl3MCwgNDgocnApCisJbGVhCTY0KHJwKSwgcnAKKwlhZGN4KAl3MSwgdzIpCisJbXVseCgJKHVwKSwgdzAsIHcxKQorCWptcAlMKHRwNCkKKworTChlZDUpOglhZG94KAkocnApLCB3MCkKKwlhZG94KAklcmN4LCB3MSkJCUMgcmVsaWVzIG9uIHJjeCA9IDAKK0woZjQpOgltb3YJdzAsIChycCkKKwlhZGMJJXJjeCwgdzEJCUMgcmVsaWVzIG9uIHJjeCA9IDAKKwltb3YJdzEsIDgocnApCisJbGVhCSh1cCx1bl9zYXZlLDgpLCB1cAorCW1vdglSMzIodW5fc2F2ZSksIFIzMihuKQorCWxlYQktNTYocnAsdW5fc2F2ZSw4KSwgcnAKKwltb3YJLTQwKHVwKSwgdzMJCUMgdXBbLTFdCisJbW92CS0zMih1cCksIHUwCQlDIHVwWzBdCisJc2hyeCgJJXJheCwgdzMsIHcyKQorCXNhcngoCSVyYXgsIHczLCB3MykKKwlhbmQJdTAsIHczCQkJQyAiY2kiIGluIEMgY29kZQorCW11bHgoCXUwLCB3MCwgdzEpCQlDIHVwWzBdXjIKKwlsZWEJKHcyLHUwLDIpLCB1MAkJQyAidTAiIGFyZyBpbiBDIGNvZGUKKwlhZGN4KAl3MywgdzApCisJam1wCUwoYjQpCisKKwlBTElHTigxNikKK0wodHA1KToJYWRveCgJLTgsKHJwKSwgdzIpCisJYWRjeCgJdzMsIHcwKQorCW1vdgl3MiwgLTgocnApCisJanJjeHoJTChlZDUpCisJbXVseCgJOCwodXApLCB3MiwgdzMpCisJYWRveCgJKHJwKSwgdzApCisJbGVhCTgobiksIFIzMihuKQorCW1vdgl3MCwgKHJwKQorCWFkY3goCXcxLCB3MikKKwltdWx4KAkxNiwodXApLCB3MCwgdzEpCisJYWRjeCgJdzMsIHcwKQorCWFkb3goCTgsKHJwKSwgdzIpCisJbW92CXcyLCA4KHJwKQorCW11bHgoCTI0LCh1cCksIHcyLCB3MykKKwlsZWEJNjQodXApLCB1cAorCWFkY3goCXcxLCB3MikKKwlhZG94KAkxNiwocnApLCB3MCkKKwltb3YJdzAsIDE2KHJwKQorTChiNSk6CW11bHgoCS0zMiwodXApLCB3MCwgdzEpCisJYWRveCgJMjQsKHJwKSwgdzIpCisJYWRjeCgJdzMsIHcwKQorCW1vdgl3MiwgMjQocnApCisJbXVseCgJLTI0LCh1cCksIHcyLCB3MykKKwlhZGN4KAl3MSwgdzIpCisJYWRveCgJMzIsKHJwKSwgdzApCisJbW92CXcwLCAzMihycCkKKwltdWx4KAktMTYsKHVwKSwgdzAsIHcxKQorCWFkb3goCTQwLChycCksIHcyKQorCWFkY3goCXczLCB3MCkKKwltb3YJdzIsIDQwKHJwKQorCWFkb3goCTQ4LChycCksIHcwKQorCW11bHgoCS04LCh1cCksIHcyLCB3MykKKwltb3YJdzAsIDQ4KHJwKQorCWxlYQk2NChycCksIHJwCisJYWRjeCgJdzEsIHcyKQorCW11bHgoCSh1cCksIHcwLCB3MSkKKwlqbXAJTCh0cDUpCisKK0woZWQ2KToJYWRveCgJKHJwKSwgdzApCisJYWRveCgJJXJjeCwgdzEpCQlDIHJlbGllcyBvbiByY3ggPSAwCitMKGY1KToJbW92CXcwLCAocnApCisJYWRjCSVyY3gsIHcxCQlDIHJlbGllcyBvbiByY3ggPSAwCisJbW92CXcxLCA4KHJwKQorCWxlYQkodXAsdW5fc2F2ZSw4KSwgdXAKKwltb3YJUjMyKHVuX3NhdmUpLCBSMzIobikKKwlsZWEJLTU2KHJwLHVuX3NhdmUsOCksIHJwCisJbW92CS00OCh1cCksIHcxCQlDIHVwWy0xXQorCW1vdgktNDAodXApLCB1MAkJQyB1cFswXQorCXNocngoCSVyYXgsIHcxLCB3MCkKKwlzYXJ4KAklcmF4LCB3MSwgdzEpCisJYW5kCXUwLCB3MQkJCUMgImNpIiBpbiBDIGNvZGUKKwltdWx4KAl1MCwgdzIsIHczKQkJQyB1cFswXV4yCisJbGVhCSh3MCx1MCwyKSwgdTAJCUMgInUwIiBhcmcgaW4gQyBjb2RlCisJYWRjeCgJdzEsIHcyKQorCWptcAlMKGI1KQorCisJQUxJR04oMTYpCitMKHRwNik6CWFkb3goCS04LChycCksIHcyKQorCWFkY3goCXczLCB3MCkKKwltb3YJdzIsIC04KHJwKQorCWpyY3h6CUwoZWQ2KQorCW11bHgoCTgsKHVwKSwgdzIsIHczKQorCWFkb3goCShycCksIHcwKQorCWxlYQk4KG4pLCBSMzIobikKKwltb3YJdzAsIChycCkKKwlhZGN4KAl3MSwgdzIpCisJbXVseCgJMTYsKHVwKSwgdzAsIHcxKQorCWFkY3goCXczLCB3MCkKKwlhZG94KAk4LChycCksIHcyKQorCW1vdgl3MiwgOChycCkKKwltdWx4KAkyNCwodXApLCB3MiwgdzMpCisJbGVhCTY0KHVwKSwgdXAKK0woYjYpOglhZGN4KAl3MSwgdzIpCisJYWRveCgJMTYsKHJwKSwgdzApCisJbW92CXcwLCAxNihycCkKKwltdWx4KAktMzIsKHVwKSwgdzAsIHcxKQorCWFkb3goCTI0LChycCksIHcyKQorCWFkY3goCXczLCB3MCkKKwltb3YJdzIsIDI0KHJwKQorCW11bHgoCS0yNCwodXApLCB3MiwgdzMpCisJYWRjeCgJdzEsIHcyKQorCWFkb3goCTMyLChycCksIHcwKQorCW1vdgl3MCwgMzIocnApCisJbXVseCgJLTE2LCh1cCksIHcwLCB3MSkKKwlhZG94KAk0MCwocnApLCB3MikKKwlhZGN4KAl3MywgdzApCisJbW92CXcyLCA0MChycCkKKwlhZG94KAk0OCwocnApLCB3MCkKKwltdWx4KAktOCwodXApLCB3MiwgdzMpCisJbW92CXcwLCA0OChycCkKKwlsZWEJNjQocnApLCBycAorCWFkY3goCXcxLCB3MikKKwltdWx4KAkodXApLCB3MCwgdzEpCisJam1wCUwodHA2KQorCitMKGVkNyk6CWFkb3goCShycCksIHcwKQorCWFkb3goCSVyY3gsIHcxKQkJQyByZWxpZXMgb24gcmN4ID0gMAorTChmNik6CW1vdgl3MCwgKHJwKQorCWFkYwklcmN4LCB3MQkJQyByZWxpZXMgb24gcmN4ID0gMAorCW1vdgl3MSwgOChycCkKKwlsZWEJKHVwLHVuX3NhdmUsOCksIHVwCisJbW92CVIzMih1bl9zYXZlKSwgUjMyKG4pCisJbGVhCS01NihycCx1bl9zYXZlLDgpLCBycAorCW1vdgktNTYodXApLCB3MwkJQyB1cFstMV0KKwltb3YJLTQ4KHVwKSwgdTAJCUMgdXBbMF0KKwlzaHJ4KAklcmF4LCB3MywgdzIpCisJc2FyeCgJJXJheCwgdzMsIHczKQorCWFuZAl1MCwgdzMJCQlDICJjaSIgaW4gQyBjb2RlCisJbXVseCgJdTAsIHcwLCB3MSkJCUMgdXBbMF1eMgorCWxlYQkodzIsdTAsMiksIHUwCQlDICJ1MCIgYXJnIGluIEMgY29kZQorCWFkY3goCXczLCB3MCkKKwltdWx4KAktNDAsKHVwKSwgdzIsIHczKQorCWptcAlMKGI2KQorCisJQUxJR04oMTYpCitMKHRwNyk6CWFkb3goCS04LChycCksIHcyKQorCWFkY3goCXczLCB3MCkKKwltb3YJdzIsIC04KHJwKQorCWpyY3h6CUwoZWQ3KQorCW11bHgoCTgsKHVwKSwgdzIsIHczKQorCWFkb3goCShycCksIHcwKQorCWxlYQk4KG4pLCBSMzIobikKKwltb3YJdzAsIChycCkKK0woYjcpOglhZGN4KAl3MSwgdzIpCisJbXVseCgJMTYsKHVwKSwgdzAsIHcxKQorCWFkY3goCXczLCB3MCkKKwlhZG94KAk4LChycCksIHcyKQorCW1vdgl3MiwgOChycCkKKwltdWx4KAkyNCwodXApLCB3MiwgdzMpCisJbGVhCTY0KHVwKSwgdXAKKwlhZGN4KAl3MSwgdzIpCisJYWRveCgJMTYsKHJwKSwgdzApCisJbW92CXcwLCAxNihycCkKKwltdWx4KAktMzIsKHVwKSwgdzAsIHcxKQorCWFkb3goCTI0LChycCksIHcyKQorCWFkY3goCXczLCB3MCkKKwltb3YJdzIsIDI0KHJwKQorCW11bHgoCS0yNCwodXApLCB3MiwgdzMpCisJYWRjeCgJdzEsIHcyKQorCWFkb3goCTMyLChycCksIHcwKQorCW1vdgl3MCwgMzIocnApCisJbXVseCgJLTE2LCh1cCksIHcwLCB3MSkKKwlhZG94KAk0MCwocnApLCB3MikKKwlhZGN4KAl3MywgdzApCisJbW92CXcyLCA0MChycCkKKwlhZG94KAk0OCwocnApLCB3MCkKKwltdWx4KAktOCwodXApLCB3MiwgdzMpCisJbW92CXcwLCA0OChycCkKKwlsZWEJNjQocnApLCBycAorCWFkY3goCXcxLCB3MikKKwltdWx4KAkodXApLCB3MCwgdzEpCisJam1wCUwodHA3KQorCitMKGNvcjMpOmxlYQktNjQocnApLCBycAorCW1vdgktMjQodXApLCB3MwkJQyB1cFstMV0KKwltb3YJLTE2KHVwKSwgdTAJCUMgdXBbMF0KKwlzaHJ4KAklcmF4LCB3MywgdzIpCisJc2FyeCgJJXJheCwgdzMsIHczKQorCWFuZAl1MCwgdzMJCQlDICJjaSIgaW4gQyBjb2RlCisJbXVseCgJdTAsIHcwLCB3MSkJCUMgdXBbMF1eMgorCWxlYQkodzIsdTAsMiksIHUwCQlDICJ1MCIgYXJnIGluIEMgY29kZQorCWFkY3goCXczLCB3MCkKKwlhZG94KAk1NiwocnApLCB3MCkKKwltdWx4KAktOCwodXApLCB3MiwgdzMpCisJbW92CXcwLCA1NihycCkKKwlhZGN4KAl3MSwgdzIpCisJbXVseCgJKHVwKSwgJXJieCwgdzEpCisJYWRveCgJNjQsKHJwKSwgdzIpCisJYWRjeCgJdzMsICVyYngpCisJbW92CXcyLCA2NChycCkKKwlhZG94KAk3MiwocnApLCAlcmJ4KQorCWFkb3goCSVyY3gsIHcxKQkJQyByZWxpZXMgb24gcmN4ID0gMAorCWFkYwklcmN4LCB3MQkJQyByZWxpZXMgb24gcmN4ID0gMAorCW1vdgl3MSwgODAocnApCUMgRklYTUUKK0Mgd2QyCisJbW92CS0xNih1cCksIHcxCQlDIHVwWy0xXQorCW1vdgktOCh1cCksIHUwCQlDIHVwWzBdCisJc2hyeCgJJXJheCwgdzEsIHcwKQorCXNhcngoCSVyYXgsIHcxLCB3MSkKKwlhbmQJdTAsIHcxCQkJQyAiY2kiIGluIEMgY29kZQorCW11bHgoCXUwLCB3MiwgdzMpCQlDIHVwWzBdXjIKKwlsZWEJKHcwLHUwLDIpLCB1MAkJQyAidTAiIGFyZyBpbiBDIGNvZGUKKwlhZGN4KAl3MSwgdzIpCisJbXVseCgJKHVwKSwgdzAsICVyYXgpCisJYWRveCgJJXJieCwgdzIpCisJYWRjeCgJdzMsIHcwKQorCW1vdgl3MiwgNzIocnApCisJYWRveCgJODAsKHJwKSwgdzApCisJYWRveCgJJXJjeCwgJXJheCkJCUMgcmVsaWVzIG9uIHJjeCA9IDAKKwltb3YJdzAsIDgwKHJwKQorCWFkYwklcmN4LCAlcmF4CQlDIHJlbGllcyBvbiByY3ggPSAwCitDIHdkMQorCW1vdgktOCh1cCksIHczCQlDIHVwWy0xXQorCW1vdgkodXApLCB1MAkJQyB1cFswXQorCXNhcgkkNjMsIHczCisJYW5kCXUwLCB3MwkJCUMgImNpIiBpbiBDIGNvZGUKKwltdWx4KAl1MCwgdzAsIHcxKQkJQyB1cFswXV4yCisJYWRjeCgJdzMsIHcwKQorCWFkb3goCSVyYXgsIHcwKQorCW1vdgl3MCwgODgocnApCisJYWRjeCgJJXJjeCwgdzEpCisJYWRveCgJJXJjeCwgdzEpCisJbW92CXcxLCA5NihycCkKKworCXBvcAklcmJ4CisJRlVOQ19FWElUKCkKKwlyZXQKKworCUpVTVBUQUJTRUNUCisJQUxJR04oOCkKK0wobXRhYik6Sk1QRU5UKAlMKG1mNyksIEwobXRhYikpCisJSk1QRU5UKAlMKG1mMCksIEwobXRhYikpCisJSk1QRU5UKAlMKG1mMSksIEwobXRhYikpCisJSk1QRU5UKAlMKG1mMiksIEwobXRhYikpCisJSk1QRU5UKAlMKG1mMyksIEwobXRhYikpCisJSk1QRU5UKAlMKG1mNCksIEwobXRhYikpCisJSk1QRU5UKAlMKG1mNSksIEwobXRhYikpCisJSk1QRU5UKAlMKG1mNiksIEwobXRhYikpCitMKGF0YWIpOkpNUEVOVCgJTChmNiksIEwoYXRhYikpCisJSk1QRU5UKAlMKGY3KSwgTChhdGFiKSkKKwlKTVBFTlQoCUwoZjApLCBMKGF0YWIpKQorCUpNUEVOVCgJTChmMSksIEwoYXRhYikpCisJSk1QRU5UKAlMKGYyKSwgTChhdGFiKSkKKwlKTVBFTlQoCUwoZjMpLCBMKGF0YWIpKQorCUpNUEVOVCgJTChmNCksIEwoYXRhYikpCisJSk1QRU5UKAlMKGY1KSwgTChhdGFiKSkKKwlURVhUCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaWh3bC9hZGRtdWxfMi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaWh3bC9hZGRtdWxfMi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQxYzQwNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpaHdsL2FkZG11bF8yLmFzbQpAQCAtMCwwICsxLDI0MSBAQAorZG5sICBBTUQ2NCBtcG5fYWRkbXVsXzIgb3B0aW1pc2VkIGZvciBJbnRlbCBIYXN3ZWxsLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIEFNRCBLOCxLOQluL2EKK0MgQU1EIEsxMAluL2EKK0MgQU1EIGJ1bGwJbi9hCitDIEFNRCBwaWxlCW4vYQorQyBBTUQgc3RlYW0Jbi9hCitDIEFNRCBleGNhdmF0b3IJID8KK0MgQU1EIGJvYmNhdAluL2EKK0MgQU1EIGphZ3VhcgluL2EKK0MgSW50ZWwgUDQJbi9hCitDIEludGVsIGNvcmUJbi9hCitDIEludGVsIE5ITQluL2EKK0MgSW50ZWwgU0JSCW4vYQorQyBJbnRlbCBJQlIJbi9hCitDIEludGVsIEhXTAkgMi4xNQorQyBJbnRlbCBCV0wJIDIuMzMKK0MgSW50ZWwgU0tMCSAyLjIyCitDIEludGVsIGF0b20Jbi9hCitDIEludGVsIFNMTQluL2EKK0MgVklBIG5hbm8Jbi9hCisKK0MgVGhlIGxvb3Agb2YgdGhpcyBjb2RlIGlzIHRoZSByZXN1bHQgb2YgcnVubmluZyBhIGNvZGUgZ2VuZXJhdGlvbiBhbmQKK0Mgb3B0aW1pc2F0aW9uIHRvb2wgc3VpdGUgd3JpdHRlbiBieSBEYXZpZCBIYXJ2ZXkgYW5kIFRvcmJqw7ZybiBHcmFubHVuZC4KKworZGVmaW5lKGBycCcsICAgICBgJXJkaScpCitkZWZpbmUoYHVwJywgICAgIGAlcnNpJykKK2RlZmluZShgbl9wYXJhbScsYCVyZHgnKQorZGVmaW5lKGB2cCcsICAgICBgJXJjeCcpCisKK2RlZmluZShgdjAnLCBgJXI4JykKK2RlZmluZShgdjEnLCBgJXI5JykKK2RlZmluZShgdzAnLCBgJXJieCcpCitkZWZpbmUoYHcxJywgYCVyY3gnKQorZGVmaW5lKGB3MicsIGAlcmJwJykKK2RlZmluZShgdzMnLCBgJXIxMCcpCitkZWZpbmUoYG4nLCAgYCVyMTEnKQorZGVmaW5lKGBYMCcsIGAlcjEyJykKK2RlZmluZShgWDEnLCBgJXIxMycpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDMyKQorUFJPTE9HVUUobXBuX2FkZG11bF8yKQorCUZVTkNfRU5UUlkoNCkKKwlwdXNoCSVyYngKKwlwdXNoCSVyYnAKKwlwdXNoCSVyMTIKKwlwdXNoCSVyMTMKKworCW1vdgkodnApLCB2MAorCW1vdgk4KHZwKSwgdjEKKworCW1vdgluX3BhcmFtLCBuCisJc2hyCSQyLCBuCisKKwl0ZXN0CSQxLCBSOChuX3BhcmFtKQorCWpueglMKGJ4MSkKKworTChieDApOgltb3YJKHJwKSwgWDAKKwltb3YJOChycCksIFgxCisJdGVzdAkkMiwgUjgobl9wYXJhbSkKKwlqbnoJTChiMTApCisKK0woYjAwKToJbW92CSh1cCksICVyZHgKKwlsZWEJMTYodXApLCB1cAorCW11bHgoCXYwLCAlcmF4LCB3MSkKKwlhZGQJJXJheCwgWDAKKwltdWx4KAl2MSwgJXJheCwgdzIpCisJYWRjCSQwLCB3MQorCW1vdglYMCwgKHJwKQorCWFkZAklcmF4LCBYMQorCWFkYwkkMCwgdzIKKwltb3YJLTgodXApLCAlcmR4CisJbGVhCTE2KHJwKSwgcnAKKwlqbXAJTChsbzApCisKK0woYjEwKToJbW92CSh1cCksICVyZHgKKwlpbmMJbgorCW11bHgoCXYwLCAlcmF4LCB3MSkKKwlhZGQJJXJheCwgWDAKKwlhZGMJJDAsIHcxCisJbXVseCgJdjEsICVyYXgsIHcyKQorCW1vdglYMCwgKHJwKQorCW1vdgkxNihycCksIFgwCisJYWRkCSVyYXgsIFgxCisJYWRjCSQwLCB3MgorCXhvcgl3MCwgdzAKKwlqbXAJTChsbzIpCisKK0woYngxKToJbW92CShycCksIFgxCisJbW92CTgocnApLCBYMAorCXRlc3QJJDIsIFI4KG5fcGFyYW0pCisJam56CUwoYjExKQorCitMKGIwMSk6CW1vdgkodXApLCAlcmR4CisJbXVseCgJdjAsICVyYXgsIHczKQorCWFkZAklcmF4LCBYMQorCWFkYwkkMCwgdzMKKwltdWx4KAl2MSwgJXJheCwgdzApCisJYWRkCSVyYXgsIFgwCisJYWRjCSQwLCB3MAorCW1vdgk4KHVwKSwgJXJkeAorCW1vdglYMSwgKHJwKQorCW1vdgkxNihycCksIFgxCisJbXVseCgJdjAsICVyYXgsIHcxKQorCWxlYQkyNChycCksIHJwCisJbGVhCTI0KHVwKSwgdXAKKwlqbXAJTChsbzEpCisKK0woYjExKToJbW92CSh1cCksICVyZHgKKwlpbmMJbgorCW11bHgoCXYwLCAlcmF4LCB3MykKKwlhZGQJJXJheCwgWDEKKwlhZGMJJDAsIHczCisJbXVseCgJdjEsICVyYXgsIHcwKQorCWFkZAklcmF4LCBYMAorCWFkYwkkMCwgdzAKKwltb3YJWDEsIChycCkKKwltb3YJOCh1cCksICVyZHgKKwltdWx4KAl2MCwgJXJheCwgdzEpCisJbGVhCTgocnApLCBycAorCWxlYQk4KHVwKSwgdXAKKwlqbXAJTChsbzMpCisKKwlBTElHTigxNikKK0wodG9wKToJbXVseCgJdjAsICVyYXgsIHczKQorCWFkZAl3MCwgWDEKKwlhZGMJJDAsIHcyCisJYWRkCSVyYXgsIFgxCisJYWRjCSQwLCB3MworCW11bHgoCXYxLCAlcmF4LCB3MCkKKwlhZGQJJXJheCwgWDAKKwlhZGMJJDAsIHcwCisJbGVhCTMyKHJwKSwgcnAKKwlhZGQJdzEsIFgxCisJbW92CS0xNih1cCksICVyZHgKKwltb3YJWDEsIC0yNChycCkKKwlhZGMJJDAsIHczCisJYWRkCXcyLCBYMAorCW1vdgktOChycCksIFgxCisJbXVseCgJdjAsICVyYXgsIHcxKQorCWFkYwkkMCwgdzAKK0wobG8xKToJYWRkCSVyYXgsIFgwCisJbXVseCgJdjEsICVyYXgsIHcyKQorCWFkYwkkMCwgdzEKKwlhZGQJdzMsIFgwCisJbW92CVgwLCAtMTYocnApCisJYWRjCSQwLCB3MQorCWFkZAklcmF4LCBYMQorCWFkYwkkMCwgdzIKKwlhZGQJdzAsIFgxCisJbW92CS04KHVwKSwgJXJkeAorCWFkYwkkMCwgdzIKK0wobG8wKToJbXVseCgJdjAsICVyYXgsIHczKQorCWFkZAklcmF4LCBYMQorCWFkYwkkMCwgdzMKKwltb3YJKHJwKSwgWDAKKwltdWx4KAl2MSwgJXJheCwgdzApCisJYWRkCSVyYXgsIFgwCisJYWRjCSQwLCB3MAorCWFkZAl3MSwgWDEKKwltb3YJWDEsIC04KHJwKQorCWFkYwkkMCwgdzMKKwltb3YJKHVwKSwgJXJkeAorCWFkZAl3MiwgWDAKKwltdWx4KAl2MCwgJXJheCwgdzEpCisJYWRjCSQwLCB3MAorTChsbzMpOglhZGQJJXJheCwgWDAKKwlhZGMJJDAsIHcxCisJbXVseCgJdjEsICVyYXgsIHcyKQorCWFkZAl3MywgWDAKKwltb3YJOChycCksIFgxCisJbW92CVgwLCAocnApCisJbW92CTE2KHJwKSwgWDAKKwlhZGMJJDAsIHcxCisJYWRkCSVyYXgsIFgxCisJYWRjCSQwLCB3MgorTChsbzIpOgltb3YJOCh1cCksICVyZHgKKwlsZWEJMzIodXApLCB1cAorCWRlYwluCisJam56CUwodG9wKQorCitMKGVuZCk6CW11bHgoCXYwLCAlcmF4LCB3MykKKwlhZGQJdzAsIFgxCisJYWRjCSQwLCB3MgorCWFkZAklcmF4LCBYMQorCWFkYwkkMCwgdzMKKwltdWx4KAl2MSwgJXJkeCwgJXJheCkKKwlhZGQJdzEsIFgxCisJbW92CVgxLCA4KHJwKQorCWFkYwkkMCwgdzMKKwlhZGQJdzIsICVyZHgKKwlhZGMJJDAsICVyYXgKKwlhZGQJdzMsICVyZHgKKwltb3YJJXJkeCwgMTYocnApCisJYWRjCSQwLCAlcmF4CisKKwlwb3AJJXIxMworCXBvcAklcjEyCisJcG9wCSVyYnAKKwlwb3AJJXJieAorCUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaWh3bC9hb3JybHNoX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlod2wvYW9ycmxzaF9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjBkMjdiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlod2wvYW9ycmxzaF9uLmFzbQpAQCAtMCwwICsxLDM4IEBACitkbmwgIFg4Ni02NCBtcG5fYWRkbHNoX24gYW5kIG1wbl9yc2Jsc2hfbi4KKworZG5sICBDb3B5cmlnaHQgMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FkZGxzaF9uIG1wbl9yc2Jsc2hfbikKK2luY2x1ZGVfbXBuKGB4ODZfNjQvemVuL2FvcnJsc2hfbi5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlod2wvYW9yc19uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpaHdsL2FvcnNfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM5OTYyNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpaHdsL2FvcnNfbi5hc20KQEAgLTAsMCArMSwyNjEgQEAKK2RubCAgQU1ENjQgbXBuX2FkZF9uLCBtcG5fc3ViX24KKworZG5sICBDb3B5cmlnaHQgMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIKK0MgQU1EIEs4LEs5CitDIEFNRCBLMTAKK0MgQU1EIGJkMQkgMS41ICB3aXRoIGZsdWN0dWF0aW9ucworQyBBTUQgYmQyCSAxLjUgIHdpdGggZmx1Y3R1YXRpb25zCitDIEFNRCBiZDMKK0MgQU1EIGJkNAkgMS42CitDIEFNRCB6ZW4KK0MgQU1EIGJ0MQorQyBBTUQgYnQyCitDIEludGVsIFA0CitDIEludGVsIFBOUgorQyBJbnRlbCBOSE0KK0MgSW50ZWwgU0JSCitDIEludGVsIElCUgorQyBJbnRlbCBIV0wJIDEuMjEKK0MgSW50ZWwgQldMCSAxLjA0CitDIEludGVsIFNLTAorQyBJbnRlbCBhdG9tCitDIEludGVsIFNMTQorQyBWSUEgbmFubworCitDIFRoZSBsb29wIG9mIHRoaXMgY29kZSBpcyB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgYSBjb2RlIGdlbmVyYXRpb24gYW5kCitDIG9wdGltaXphdGlvbiB0b29sIHN1aXRlIHdyaXR0ZW4gYnkgRGF2aWQgSGFydmV5IGFuZCBUb3Jiam9ybiBHcmFubHVuZC4KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywJYCVyZGknKQlDIHJjeAorZGVmaW5lKGB1cCcsCWAlcnNpJykJQyByZHgKK2RlZmluZShgdnAnLAlgJXJkeCcpCUMgcjgKK2RlZmluZShgbicsCWAlcmN4JykJQyByOQorZGVmaW5lKGBjeScsCWAlcjgnKQlDIHJzcCs0MCAgICAobXBuX2FkZF9uYyBhbmQgbXBuX3N1Yl9uYykKKworaWZkZWYoYE9QRVJBVElPTl9hZGRfbicsIGAKKwlkZWZpbmUoQURDU0JCLAkgICAgICBhZGMpCisJZGVmaW5lKGZ1bmMsCSAgICAgIG1wbl9hZGRfbikKKwlkZWZpbmUoZnVuY19uYywJICAgICAgbXBuX2FkZF9uYyknKQoraWZkZWYoYE9QRVJBVElPTl9zdWJfbicsIGAKKwlkZWZpbmUoQURDU0JCLAkgICAgICBzYmIpCisJZGVmaW5lKGZ1bmMsCSAgICAgIG1wbl9zdWJfbikKKwlkZWZpbmUoZnVuY19uYywJICAgICAgbXBuX3N1Yl9uYyknKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRfbiBtcG5fYWRkX25jIG1wbl9zdWJfbiBtcG5fc3ViX25jKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigxNikKK1BST0xPR1VFKGZ1bmNfbmMpCisJRlVOQ19FTlRSWSg0KQorSUZET1MoYAltb3YJNTYoJXJzcCksICVyOAknKQorCisJbW92CVIzMihuKSwgUjMyKCVyYXgpCisJc2hyCSQzLCBuCisJYW5kCSQ3LCBSMzIoJXJheCkKKworCWxlYQlMKHRhYikoJXJpcCksICVyOQorCW5lZwklcjgJCQlDIHNldCBjYXJyeQoraWZkZWYoYFBJQycsYAorCW1vdnNscQkoJXI5LCVyYXgsNCksICVyYXgKKwlsZWEJKCVyOSwlcmF4KSwgJXJheAlDIGxlYSBub3QgYWRkIHRvIHByZXNlcnZlIGNhcnJ5CisJam1wCSolcmF4CisnLGAKKwlqbXAJKiglcjksJXJheCw4KQorJykKK0VQSUxPR1VFKCkKKworCUFMSUdOKDE2KQorUFJPTE9HVUUoZnVuYykKKwlGVU5DX0VOVFJZKDQpCisKKwltb3YJUjMyKG4pLCBSMzIoJXJheCkKKwlzaHIJJDMsIG4KKwlhbmQJJDcsIFIzMiglcmF4KQkJQyBjbGVhciBjeSBhcyBzaWRlLWVmZmVjdAorCisJbGVhCUwodGFiKSglcmlwKSwgJXI5CitpZmRlZihgUElDJyxgCisJbW92c2xxCSglcjksJXJheCw0KSwgJXJheAorCWxlYQkoJXI5LCVyYXgpLCAlcmF4CUMgbGVhIG5vdCBhZGQgdG8gcHJlc2VydmUgY2FycnkKKwlqbXAJKiVyYXgKKycsYAorCWptcAkqKCVyOSwlcmF4LDgpCisnKQorCitMKDApOgltb3YJKHVwKSwgJXI4CisJbW92CTgodXApLCAlcjkKKwlBRENTQkIJKHZwKSwgJXI4CisJam1wCUwoZTApCisKK0woNCk6CW1vdgkodXApLCAlcjgKKwltb3YJOCh1cCksICVyOQorCUFEQ1NCQgkodnApLCAlcjgKKwlsZWEJLTMyKHVwKSwgdXAKKwlsZWEJLTMyKHZwKSwgdnAKKwlsZWEJLTMyKHJwKSwgcnAKKwlpbmMJbgorCWptcAlMKGU0KQorCitMKDUpOgltb3YJKHVwKSwgJXIxMQorCW1vdgk4KHVwKSwgJXI4CisJbW92CTE2KHVwKSwgJXI5CisJQURDU0JCCSh2cCksICVyMTEKKwlsZWEJLTI0KHVwKSwgdXAKKwlsZWEJLTI0KHZwKSwgdnAKKwlsZWEJLTI0KHJwKSwgcnAKKwlpbmMJbgorCWptcAlMKGU1KQorCitMKDYpOgltb3YJKHVwKSwgJXIxMAorCUFEQ1NCQgkodnApLCAlcjEwCisJbW92CTgodXApLCAlcjExCisJbGVhCS0xNih1cCksIHVwCisJbGVhCS0xNih2cCksIHZwCisJbGVhCS0xNihycCksIHJwCisJaW5jCW4KKwlqbXAJTChlNikKKworTCg3KToJbW92CSh1cCksICVyOQorCW1vdgk4KHVwKSwgJXIxMAorCUFEQ1NCQgkodnApLCAlcjkKKwlBRENTQkIJOCh2cCksICVyMTAKKwlsZWEJLTgodXApLCB1cAorCWxlYQktOCh2cCksIHZwCisJbGVhCS04KHJwKSwgcnAKKwlpbmMJbgorCWptcAlMKGU3KQorCisJQUxJR04oMTYpCitMKHRvcCk6CitMKGUzKToJbW92CSVyOSwgNDAocnApCitMKGUyKToJbW92CSVyMTAsIDQ4KHJwKQorTChlMSk6CW1vdgkodXApLCAlcjgKKwltb3YJOCh1cCksICVyOQorCUFEQ1NCQgkodnApLCAlcjgKKwltb3YJJXIxMSwgNTYocnApCisJbGVhCTY0KHJwKSwgcnAKK0woZTApOgltb3YJMTYodXApLCAlcjEwCisJQURDU0JCCTgodnApLCAlcjkKKwlBRENTQkIJMTYodnApLCAlcjEwCisJbW92CSVyOCwgKHJwKQorTChlNyk6CW1vdgkyNCh1cCksICVyMTEKKwltb3YJJXI5LCA4KHJwKQorTChlNik6CW1vdgkzMih1cCksICVyOAorCW1vdgk0MCh1cCksICVyOQorCUFEQ1NCQgkyNCh2cCksICVyMTEKKwltb3YJJXIxMCwgMTYocnApCitMKGU1KToJQURDU0JCCTMyKHZwKSwgJXI4CisJbW92CSVyMTEsIDI0KHJwKQorTChlNCk6CW1vdgk0OCh1cCksICVyMTAKKwltb3YJNTYodXApLCAlcjExCisJbW92CSVyOCwgMzIocnApCisJbGVhCTY0KHVwKSwgdXAKKwlBRENTQkIJNDAodnApLCAlcjkKKwlBRENTQkIJNDgodnApLCAlcjEwCisJQURDU0JCCTU2KHZwKSwgJXIxMQorCWxlYQk2NCh2cCksIHZwCisJZGVjCW4KKwlqbnoJTCh0b3ApCisKK0woZW5kKToJbW92CSVyOSwgNDAocnApCisJbW92CSVyMTAsIDQ4KHJwKQorCW1vdgklcjExLCA1NihycCkKKwltb3YJUjMyKG4pLCBSMzIoJXJheCkKKwlhZGMJUjMyKG4pLCBSMzIoJXJheCkKKwlGVU5DX0VYSVQoKQorCXJldAorCisJQUxJR04oMTYpCitMKDMpOgltb3YJKHVwKSwgJXI5CisJbW92CTgodXApLCAlcjEwCisJbW92CTE2KHVwKSwgJXIxMQorCUFEQ1NCQgkodnApLCAlcjkKKwlBRENTQkIJOCh2cCksICVyMTAKKwlBRENTQkIJMTYodnApLCAlcjExCisJanJjeHoJTCh4MykKKwlsZWEJMjQodXApLCB1cAorCWxlYQkyNCh2cCksIHZwCisJbGVhCS00MChycCksIHJwCisJam1wCUwoZTMpCitMKHgzKToJbW92CSVyOSwgKHJwKQorCW1vdgklcjEwLCA4KHJwKQorCW1vdgklcjExLCAxNihycCkKKwltb3YJUjMyKG4pLCBSMzIoJXJheCkKKwlhZGMJUjMyKG4pLCBSMzIoJXJheCkKKwlGVU5DX0VYSVQoKQorCXJldAorCisJQUxJR04oMTYpCitMKDEpOgltb3YJKHVwKSwgJXIxMQorCUFEQ1NCQgkodnApLCAlcjExCisJanJjeHoJTCh4MSkKKwlsZWEJOCh1cCksIHVwCisJbGVhCTgodnApLCB2cAorCWxlYQktNTYocnApLCBycAorCWptcAlMKGUxKQorTCh4MSk6CW1vdgklcjExLCAocnApCisJbW92CVIzMihuKSwgUjMyKCVyYXgpCisJYWRjCVIzMihuKSwgUjMyKCVyYXgpCisJRlVOQ19FWElUKCkKKwlyZXQKKworCUFMSUdOKDE2KQorTCgyKToJbW92CSh1cCksICVyMTAKKwltb3YJOCh1cCksICVyMTEKKwlBRENTQkIJKHZwKSwgJXIxMAorCUFEQ1NCQgk4KHZwKSwgJXIxMQorCWpyY3h6CUwoeDIpCisJbGVhCTE2KHVwKSwgdXAKKwlsZWEJMTYodnApLCB2cAorCWxlYQktNDgocnApLCBycAorCWptcAlMKGUyKQorTCh4Mik6CW1vdgklcjEwLCAocnApCisJbW92CSVyMTEsIDgocnApCisJbW92CVIzMihuKSwgUjMyKCVyYXgpCisJYWRjCVIzMihuKSwgUjMyKCVyYXgpCisJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKKwlKVU1QVEFCU0VDVAorCUFMSUdOKDgpCitMKHRhYik6CUpNUEVOVCgJTCgwKSwgTCh0YWIpKQorCUpNUEVOVCgJTCgxKSwgTCh0YWIpKQorCUpNUEVOVCgJTCgyKSwgTCh0YWIpKQorCUpNUEVOVCgJTCgzKSwgTCh0YWIpKQorCUpNUEVOVCgJTCg0KSwgTCh0YWIpKQorCUpNUEVOVCgJTCg1KSwgTCh0YWIpKQorCUpNUEVOVCgJTCg2KSwgTCh0YWIpKQorCUpNUEVOVCgJTCg3KSwgTCh0YWIpKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlod2wvYW9yc211bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpaHdsL2FvcnNtdWxfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y0M2FmYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpaHdsL2FvcnNtdWxfMS5hc20KQEAgLTAsMCArMSwyMDEgQEAKK2RubCAgQU1ENjQgbXBuX2FkZG11bF8xIGFuZCBtcG5fc3VibXVsXzEgb3B0aW1pc2VkIGZvciBJbnRlbCBIYXN3ZWxsLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIEFNRCBLOCxLOQkgLQorQyBBTUQgSzEwCSAtCitDIEFNRCBidWxsCSAtCitDIEFNRCBwaWxlCSAtCitDIEFNRCBzdGVhbQkgLQorQyBBTUQgZXhjYXZhdG9yCSAtCitDIEFNRCBib2JjYXQJIC0KK0MgQU1EIGphZ3VhcgkgLQorQyBJbnRlbCBQNAkgLQorQyBJbnRlbCBjb3JlMgkgLQorQyBJbnRlbCBOSE0JIC0KK0MgSW50ZWwgU0JSCSAtCitDIEludGVsIElCUgkgLQorQyBJbnRlbCBIV0wJIDIuMzIKK0MgSW50ZWwgQldMCSAyLjA0CitDIEludGVsIFNLTAkgMS45NQorQyBJbnRlbCBhdG9tCSAtCitDIEludGVsIFNMTQkgLQorQyBWSUEgbmFubwkgLQorCitDIFRoZSBsb29wIG9mIHRoaXMgY29kZSBpcyB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgYSBjb2RlIGdlbmVyYXRpb24gYW5kCitDIG9wdGltaXNhdGlvbiB0b29sIHN1aXRlIHdyaXR0ZW4gYnkgRGF2aWQgSGFydmV5IGFuZCBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK0MgVE9ETworQyAgKiBIYW5kbGUgc21hbGwgbiBzZXBhcmF0ZWx5LCBmb3IgbG93ZXIgb3ZlcmhlYWQuCisKK2RlZmluZShgcnAnLCAgICAgIGAlcmRpJykgICBDIHJjeAorZGVmaW5lKGB1cCcsICAgICAgYCVyc2knKSAgIEMgcmR4CitkZWZpbmUoYG5fcGFyYW0nLCBgJXJkeCcpICAgQyByOAorZGVmaW5lKGB2MF9wYXJhbScsYCVyY3gnKSAgIEMgcjkKKworZGVmaW5lKGBuJywgICAgICAgYCVyYnAnKQorZGVmaW5lKGB2MCcsICAgICAgYCVyZHgnKQorCitpZmRlZihgT1BFUkFUSU9OX2FkZG11bF8xJyxgCisgIGRlZmluZShgQUREU1VCJywgICAgICAgIGBhZGQnKQorICBkZWZpbmUoYEFEQ1NCQicsICAgICAgICBgYWRjJykKKyAgZGVmaW5lKGBmdW5jJywgIGBtcG5fYWRkbXVsXzEnKQorJykKK2lmZGVmKGBPUEVSQVRJT05fc3VibXVsXzEnLGAKKyAgZGVmaW5lKGBBRERTVUInLCAgICAgICAgYHN1YicpCisgIGRlZmluZShgQURDU0JCJywgICAgICAgIGBzYmInKQorICBkZWZpbmUoYGZ1bmMnLCAgYG1wbl9zdWJtdWxfMScpCisnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRtdWxfMSBtcG5fc3VibXVsXzEpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUoZnVuYykKKwlGVU5DX0VOVFJZKDQpCisJcHVzaAklcmJ4CisJcHVzaAklcmJwCisJcHVzaAklcjEyCisJcHVzaAklcjEzCisKKwltb3YJbl9wYXJhbSwgbgorCW1vdgl2MF9wYXJhbSwgdjAKKworCXRlc3QJJDEsIFI4KG4pCisJam56CUwoYngxKQorCitMKGJ4MCk6CXNocgkkMiwgbgorCWpjCUwoYjEwKQorCitMKGIwMCk6CW11bHgoCSh1cCksICVyMTMsICVyMTIpCisJbXVseCgJOCwodXApLCAlcmJ4LCAlcmF4KQorCWFkZAklcjEyLCAlcmJ4CisJYWRjCSQwLCAlcmF4CisJbW92CShycCksICVyMTIKKwltb3YJOChycCksICVyY3gKKwltdWx4KAkxNiwodXApLCAlcjksICVyOCkKKwlsZWEJLTE2KHJwKSwgcnAKKwlsZWEJMTYodXApLCB1cAorCUFERFNVQgklcjEzLCAlcjEyCisJam1wCUwobG8wKQorCitMKGJ4MSk6CXNocgkkMiwgbgorCWpjCUwoYjExKQorCitMKGIwMSk6CW11bHgoCSh1cCksICVyMTEsICVyMTApCisJam56CUwoZ3QxKQorTChuMSk6CUFERFNVQgklcjExLCAocnApCisJbW92CSQwLCBSMzIoJXJheCkKKwlhZGMJJXIxMCwgJXJheAorCWptcAlMKHJldCkKKworTChndDEpOgltdWx4KAk4LCh1cCksICVyMTMsICVyMTIpCisJbXVseCgJMTYsKHVwKSwgJXJieCwgJXJheCkKKwlsZWEJMjQodXApLCB1cAorCWFkZAklcjEwLCAlcjEzCisJYWRjCSVyMTIsICVyYngKKwlhZGMJJDAsICVyYXgKKwltb3YJKHJwKSwgJXIxMAorCW1vdgk4KHJwKSwgJXIxMgorCW1vdgkxNihycCksICVyY3gKKwlsZWEJLTgocnApLCBycAorCUFERFNVQgklcjExLCAlcjEwCisJam1wCUwobG8xKQorCitMKGIxMSk6CW11bHgoCSh1cCksICVyYngsICVyYXgpCisJbW92CShycCksICVyY3gKKwltdWx4KAk4LCh1cCksICVyOSwgJXI4KQorCWxlYQk4KHVwKSwgdXAKKwlsZWEJLTI0KHJwKSwgcnAKKwlpbmMJbgkJCUMgYWRqdXN0IG4KKwlBRERTVUIJJXJieCwgJXJjeAorCWptcAlMKGxvMykKKworTChiMTApOgltdWx4KAkodXApLCAlcjksICVyOCkKKwltdWx4KAk4LCh1cCksICVyMTEsICVyMTApCisJbGVhCS0zMihycCksIHJwCisJbW92CSQwLCBSMzIoJXJheCkKKwljbGMJCQkJQyBjbGVhciBjZgorCWp6CUwoZW5kKQkJCUMgZGVwZW5kcyBvbiBvbGQgc2hpZnQKKworCUFMSUdOKDE2KQorTCh0b3ApOglhZGMJJXJheCwgJXI5CisJbGVhCTMyKHJwKSwgcnAKKwlhZGMJJXI4LCAlcjExCisJbXVseCgJMTYsKHVwKSwgJXIxMywgJXIxMikKKwltb3YJKHJwKSwgJXI4CisJbXVseCgJMjQsKHVwKSwgJXJieCwgJXJheCkKKwlsZWEJMzIodXApLCB1cAorCWFkYwklcjEwLCAlcjEzCisJYWRjCSVyMTIsICVyYngKKwlhZGMJJDAsICVyYXgKKwltb3YJOChycCksICVyMTAKKwltb3YJMTYocnApLCAlcjEyCisJQUREU1VCCSVyOSwgJXI4CisJbW92CTI0KHJwKSwgJXJjeAorCW1vdgklcjgsIChycCkKKwlBRENTQkIJJXIxMSwgJXIxMAorTChsbzEpOgltdWx4KAkodXApLCAlcjksICVyOCkKKwltb3YJJXIxMCwgOChycCkKKwlBRENTQkIJJXIxMywgJXIxMgorTChsbzApOgltb3YJJXIxMiwgMTYocnApCisJQURDU0JCCSVyYngsICVyY3gKK0wobG8zKToJbXVseCgJOCwodXApLCAlcjExLCAlcjEwKQorCW1vdgklcmN4LCAyNChycCkKKwlkZWMJbgorCWpueglMKHRvcCkKKworTChlbmQpOglhZGMJJXJheCwgJXI5CisJYWRjCSVyOCwgJXIxMQorCW1vdgkzMihycCksICVyOAorCW1vdgklcjEwLCAlcmF4CisJYWRjCSQwLCAlcmF4CisJbW92CTQwKHJwKSwgJXIxMAorCUFERFNVQgklcjksICVyOAorCW1vdgklcjgsIDMyKHJwKQorCUFEQ1NCQgklcjExLCAlcjEwCisJbW92CSVyMTAsIDQwKHJwKQorCWFkYwkkMCwgJXJheAorCitMKHJldCk6CXBvcAklcjEzCisJcG9wCSVyMTIKKwlwb3AJJXJicAorCXBvcAklcmJ4CisJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpaHdsL2djZF8yMi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaWh3bC9nY2RfMjIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ODYzYjYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaWh3bC9nY2RfMjIuYXNtCkBAIC0wLDAgKzEsMTM4IEBACitkbmwgIEFNRDY0IG1wbl9nY2RfMjIuICBBc3N1bWVzIHVzZWxlc3MgYnNmLCB1c2VsZXNzIHNocmQsIHVzZWZ1bCB0emNudCwgc2hseC4KKworZG5sICBDb3B5cmlnaHQgMjAxOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MJICAgICBjeWNsZXMvYml0CitDIEFNRCBLOCxLOQkgLQorQyBBTUQgSzEwCSAtCitDIEFNRCBiZDEJIC0KK0MgQU1EIGJkMgkgLQorQyBBTUQgYmQzCSAtCitDIEFNRCBiZDQJIDYuNworQyBBTUQgYnQxCSAtCitDIEFNRCBidDIJIC0KK0MgQU1EIHpuMQkgNS40CitDIEFNRCB6bjIJIDUuNQorQyBJbnRlbCBQNAkgLQorQyBJbnRlbCBDTlIJIC0KK0MgSW50ZWwgUE5SCSAtCitDIEludGVsIE5ITQkgLQorQyBJbnRlbCBXU00JIC0KK0MgSW50ZWwgU0JSCSAtCitDIEludGVsIElCUgkgLQorQyBJbnRlbCBIV0wJIDcuMQorQyBJbnRlbCBCV0wJIDUuNQorQyBJbnRlbCBTS0wJIDUuNgorQyBJbnRlbCBhdG9tCSAtCitDIEludGVsIFNMTQkgLQorQyBJbnRlbCBHTE0JIC0KK0MgSW50ZWwgR0xNKwkgLQorQyBWSUEgbmFubwkgLQorCisKK2RlZmluZShgdTEnLCAgICBgJXJkaScpCitkZWZpbmUoYHUwJywgICAgYCVyc2knKQorZGVmaW5lKGB2MScsICAgIGAlcmR4JykKK2RlZmluZShgdjAnLCAgICBgJXJjeCcpCisKK2RlZmluZShgczAnLCAgICBgJXI4JykKK2RlZmluZShgczEnLCAgICBgJXI5JykKK2RlZmluZShgdDAnLCAgICBgJXIxMCcpCitkZWZpbmUoYHQxJywgICAgYCVyMTEnKQorZGVmaW5lKGBjbnQnLCAgIGAlcmF4JykKKworZG5sIEFCSV9TVVBQT1JUKERPUzY0KQlDIHJldHVybnMgbXBfZG91YmxlX2xpbWJfdCBpbiBtZW1vcnkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTig2NCkKK1BST0xPR1VFKG1wbl9nY2RfMjIpCisJRlVOQ19FTlRSWSg0KQorCisJQUxJR04oMTYpCitMKHRvcCk6CW1vdgl2MCwgdDAKKwlzdWIJdTAsIHQwCisJanoJTChsb3d6KQkJQwlqdW1wIHdoZW4gbG93IGxpbWIgcmVzdWx0ID0gMAorCW1vdgl2MSwgdDEKKwlzYmIJdTEsIHQxCisKKwlyZXA7YnNmCXQwLCBjbnQJCUMgdHpjbnQhCisKKwltb3YJdTAsIHMwCisJc3ViCXYwLCB1MAorCW1vdgl1MSwgczEKKwlzYmIJdjEsIHUxCisKK0woYmNrKToJY21vdmMJdDAsIHUwCQlDIHUgPSB8dSAtIHZ8CisJY21vdmMJdDEsIHUxCQlDIHUgPSB8dSAtIHZ8CisJY21vdmMJczAsIHYwCQlDIHYgPSBtaW4odSx2KQorCWNtb3ZjCXMxLCB2MQkJQyB2ID0gbWluKHUsdikKKworCXhvcglSMzIodDApLCBSMzIodDApCisJc3ViCWNudCwgdDAKKwlzaGx4KAl0MCwgdTEsIHMxKQorCXNocngoCWNudCwgdTAsIHUwKQorCXNocngoCWNudCwgdTEsIHUxKQorCW9yCXMxLCB1MAorCisJdGVzdAl2MSwgdjEKKwlqbnoJTCh0b3ApCisJdGVzdAl1MSwgdTEKKwlqbnoJTCh0b3ApCisKK0woZ2NkXzExKToKKwltb3YJdjAsICVyZGkKK0MJbW92CXUwLCAlcnNpCisJVENBTEwoCW1wbl9nY2RfMTEpCisKK0wobG93eik6QyBXZSBjb21lIGhlcmUgd2hlbiB2MCAtIHUwID0gMAorCUMgMS4gSWYgdjEgLSB1MSA9IDAsIHRoZW4gZ2NkIGlzIHUgPSB2LgorCUMgMi4gRWxzZSBjb21wdXRlIGdjZF8yMSh7djEsdjB9LCB8dTEtdjF8KQorCW1vdgl2MSwgdDAKKwlzdWIJdTEsIHQwCisJamUJTChlbmQpCisKKwl4b3IJdDEsIHQxCisJbW92CXUwLCBzMAorCW1vdgl1MSwgczEKKwlyZXA7YnNmCXQwLCBjbnQJCUMgdHpjbnQhCisJbW92CXUxLCB1MAorCXhvcgl1MSwgdTEKKwlzdWIJdjEsIHUwCisJam1wCUwoYmNrKQorCitMKGVuZCk6CW1vdgl2MCwgJXJheAorCUMgbW92CXYxLCAlcmR4CitMKHJldCk6CUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaWh3bC9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaWh3bC9nbXAtbXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzExYWVlYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpaHdsL2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDI1MyBAQAorLyogSGFzd2VsbCBnbXAtbXBhcmFtLmggLS0gQ29tcGlsZXIvbWFjaGluZSBwYXJhbWV0ZXIgaGVhZGVyIGZpbGUuCisKK0NvcHlyaWdodCAyMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgNjQKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgOAorCisvKiAzNjAwLTQwMDAgTUh6IEludGVsIFhlb24gRTMtMTI3MXYzIEhhc3dlbGwgKi8KKy8qIEZGVCB0dW5pbmcgbGltaXQgPSA0NjcsOTY0LDM1OSAqLworLyogR2VuZXJhdGVkIGJ5IHR1bmV1cC5jLCAyMDE5LTEwLTE4LCBnY2MgOC4zICovCisKKyNkZWZpbmUgTU9EXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PRF8xTl9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA0CisjZGVmaW5lIE1PRF8xVV9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICAzCisjZGVmaW5lIE1PRF8xXzFfVE9fTU9EXzFfMl9USFJFU0hPTEQgICAgICAgICA5CisjZGVmaW5lIE1PRF8xXzJfVE9fTU9EXzFfNF9USFJFU0hPTEQgICAgICAgIDI2CisjZGVmaW5lIFBSRUlOVl9NT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgICA5CisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAgICAxICAvKiBuYXRpdmUgKi8KKyNkZWZpbmUgRElWX1FSXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgIDEKKyNkZWZpbmUgRElWX1FSXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWX1FSXzJfUEkyX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgRElWRVhBQ1RfMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAobmF0aXZlKSAqLworI2RlZmluZSBCTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgICAgICAyNQorCisjZGVmaW5lIERJVl8xX1ZTX01VTF8xX1BFUkNFTlQgICAgICAgICAgICAgNDI3CisKKyNkZWZpbmUgTVVMX1RPT00yMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgTVVMX1RPT00zM19USFJFU0hPTEQgICAgICAgICAgICAgICAgNzQKKyNkZWZpbmUgTVVMX1RPT000NF9USFJFU0hPTEQgICAgICAgICAgICAgICAxOTUKKyNkZWZpbmUgTVVMX1RPT002SF9USFJFU0hPTEQgICAgICAgICAgICAgICAyNzYKKyNkZWZpbmUgTVVMX1RPT004SF9USFJFU0hPTEQgICAgICAgICAgICAgICAzODEKKworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT000M19USFJFU0hPTEQgICAgIDEyMAorI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT001M19USFJFU0hPTEQgICAgIDEzOQorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT001M19USFJFU0hPTEQgICAgIDEyOAorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT002M19USFJFU0hPTEQgICAgIDEyOQorI2RlZmluZSBNVUxfVE9PTTQzX1RPX1RPT001NF9USFJFU0hPTEQgICAgIDE3MAorCisjZGVmaW5lIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMTcKKyNkZWZpbmUgU1FSX1RPT000X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzMTUKKyNkZWZpbmUgU1FSX1RPT002X1RIUkVTSE9MRCAgICAgICAgICAgICAgICA0MTQKKyNkZWZpbmUgU1FSX1RPT004X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworCisjZGVmaW5lIE1VTE1JRF9UT09NNDJfVEhSRVNIT0xEICAgICAgICAgICAgIDQyCisKKyNkZWZpbmUgTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgU1FSTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTcKKworI2RlZmluZSBNVUxfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDM3NiAgLyogayA9IDUgKi8KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDM3NiwgNX0sIHsgICAgIDIxLCA2fSwgeyAgICAgMTEsIDV9LCB7ICAgICAyMywgNn0sIFwKKyAgICB7ICAgICAyMSwgN30sIHsgICAgIDExLCA2fSwgeyAgICAgMjUsIDd9LCB7ICAgICAxMywgNn0sIFwKKyAgICB7ICAgICAyNywgN30sIHsgICAgIDIxLCA4fSwgeyAgICAgMTEsIDd9LCB7ICAgICAyNSwgOH0sIFwKKyAgICB7ICAgICAxMywgN30sIHsgICAgIDI4LCA4fSwgeyAgICAgMTUsIDd9LCB7ICAgICAzMSwgOH0sIFwKKyAgICB7ICAgICAxNywgN30sIHsgICAgIDM1LCA4fSwgeyAgICAgMjEsIDl9LCB7ICAgICAxMSwgOH0sIFwKKyAgICB7ICAgICAyNywgOX0sIHsgICAgIDE1LCA4fSwgeyAgICAgMzUsIDl9LCB7ICAgICAxOSwgOH0sIFwKKyAgICB7ICAgICA0MSwgOX0sIHsgICAgIDIzLCA4fSwgeyAgICAgNDksIDl9LCB7ICAgICAyNywxMH0sIFwKKyAgICB7ICAgICAxNSwgOX0sIHsgICAgIDM5LDEwfSwgeyAgICAgMjMsIDl9LCB7ICAgICA1MSwxMX0sIFwKKyAgICB7ICAgICAxNSwxMH0sIHsgICAgIDMxLCA5fSwgeyAgICAgNzEsMTB9LCB7ICAgICAzOSwgOX0sIFwKKyAgICB7ICAgICA4MywxMH0sIHsgICAgIDQ3LCA5fSwgeyAgICAgOTUsMTF9LCB7ICAgICAzMSwxMH0sIFwKKyAgICB7ICAgICA3OSwxMX0sIHsgICAgIDQ3LDEwfSwgeyAgICAgOTUsMTJ9LCB7ICAgICAzMSwxMX0sIFwKKyAgICB7ICAgICA2MywxMH0sIHsgICAgMTI3LCA5fSwgeyAgICAyNTUsMTB9LCB7ICAgIDEzNSwxMX0sIFwKKyAgICB7ICAgICA3OSwxMH0sIHsgICAgMTY3LDExfSwgeyAgICAgOTUsMTB9LCB7ICAgIDE5MSwgOX0sIFwKKyAgICB7ICAgIDM4MywxMX0sIHsgICAgMTExLDEyfSwgeyAgICAgNjMsIDh9LCB7ICAgMTAyMywxMX0sIFwKKyAgICB7ICAgIDE0MywxMH0sIHsgICAgMjg3LCA5fSwgeyAgICA1NzUsMTB9LCB7ICAgIDMwMywxMX0sIFwKKyAgICB7ICAgIDE1OSwxMH0sIHsgICAgMzE5LDEyfSwgeyAgICAgOTUsMTF9LCB7ICAgIDE5MSwxMH0sIFwKKyAgICB7ICAgIDM4MywxMX0sIHsgICAgMjA3LDEzfSwgeyAgICAgNjMsMTJ9LCB7ICAgIDEyNywxMX0sIFwKKyAgICB7ICAgIDI1NSwxMH0sIHsgICAgNTQzLDExfSwgeyAgICAyODcsMTB9LCB7ICAgIDU3NSwxMX0sIFwKKyAgICB7ICAgIDMwMywxMH0sIHsgICAgNjA3LDEyfSwgeyAgICAxNTksMTF9LCB7ICAgIDMxOSwxMH0sIFwKKyAgICB7ICAgIDYzOSwxMX0sIHsgICAgMzM1LDEwfSwgeyAgICA2NzEsMTF9LCB7ICAgIDM1MSwxMH0sIFwKKyAgICB7ICAgIDcwMywxMX0sIHsgICAgMzY3LDEwfSwgeyAgICA3MzUsMTF9LCB7ICAgIDM4MywxMH0sIFwKKyAgICB7ICAgIDc2NywxMX0sIHsgICAgNDE1LDEwfSwgeyAgICA4MzEsMTF9LCB7ICAgIDQ0NywxMH0sIFwKKyAgICB7ICAgIDg5NSwxMX0sIHsgICAgNDc5LDEzfSwgeyAgICAxMjcsMTF9LCB7ICAgIDU0MywxMH0sIFwKKyAgICB7ICAgMTA4NywxMn0sIHsgICAgMjg3LDExfSwgeyAgICA2MDcsMTB9LCB7ICAgMTIxNSwxMn0sIFwKKyAgICB7ICAgIDMxOSwxMX0sIHsgICAgNjcxLDEyfSwgeyAgICAzNTEsMTF9LCB7ICAgIDczNSwxM30sIFwKKyAgICB7ICAgIDE5MSwxMn0sIHsgICAgMzgzLDExfSwgeyAgICA3NjcsMTJ9LCB7ICAgIDQxNSwxMX0sIFwKKyAgICB7ICAgIDgzMSwxMn0sIHsgICAgNDQ3LDExfSwgeyAgICA4OTUsMTJ9LCB7ICAgIDQ3OSwxMX0sIFwKKyAgICB7ICAgIDk1OSwxNH0sIHsgICAgMTI3LDEyfSwgeyAgICA1NDMsMTF9LCB7ICAgMTA4NywxMn0sIFwKKyAgICB7ICAgIDYwNywxMX0sIHsgICAxMjE1LDEwfSwgeyAgIDI0MzEsMTJ9LCB7ICAgIDY3MSwxMX0sIFwKKyAgICB7ICAgMTM0MywxMn0sIHsgICAgNzAzLDExfSwgeyAgIDE0MDcsMTJ9LCB7ICAgIDczNSwxM30sIFwKKyAgICB7ICAgIDM4MywxMn0sIHsgICAgODMxLDEzfSwgeyAgICA0NDcsMTJ9LCB7ICAgIDk1OSwxM30sIFwKKyAgICB7ICAgIDUxMSwxMn0sIHsgICAxMDg3LDExfSwgeyAgIDIxNzUsMTN9LCB7ICAgIDU3NSwxMn0sIFwKKyAgICB7ICAgMTIxNSwxMX0sIHsgICAyNDMxLDEzfSwgeyAgICA2MzksMTJ9LCB7ICAgMTM0MywxM30sIFwKKyAgICB7ICAgIDcwMywxMn0sIHsgICAxNDA3LDE0fSwgeyAgICAzODMsMTN9LCB7ICAgIDc2NywxMn0sIFwKKyAgICB7ICAgMTUzNSwxM30sIHsgICAgODMxLDEyfSwgeyAgIDE3MjcsMTN9LCB7ICAgIDk1OSwxMn0sIFwKKyAgICB7ICAgMTkxOSwxNH0sIHsgICAgNTExLDEzfSwgeyAgIDEwMjMsMTJ9LCB7ICAgMjA0NywxM30sIFwKKyAgICB7ICAgMTA4NywxMn0sIHsgICAyMTc1LDEzfSwgeyAgIDEyMTUsMTR9LCB7ICAgIDYzOSwxM30sIFwKKyAgICB7ICAgMTM0MywxMn0sIHsgICAyNjg3LDEzfSwgeyAgIDE0MDcsMTJ9LCB7ICAgMjgxNSwxM30sIFwKKyAgICB7ICAgMTQ3MSwxNH0sIHsgICAgNzY3LDEzfSwgeyAgIDE1OTksMTJ9LCB7ICAgMzE5OSwxM30sIFwKKyAgICB7ICAgMTcyNywxNH0sIHsgICAgODk1LDEzfSwgeyAgIDE3OTEsMTJ9LCB7ICAgMzU4MywxM30sIFwKKyAgICB7ICAgMTkxOSwxNX0sIHsgICAgNTExLDE0fSwgeyAgIDEwMjMsMTN9LCB7ICAgMjE3NSwxNH0sIFwKKyAgICB7ICAgMTE1MSwxM30sIHsgICAyNDMxLDEyfSwgeyAgIDQ4NjMsMTR9LCB7ICAgMTI3OSwxM30sIFwKKyAgICB7ICAgMjY4NywxNH0sIHsgICAxNDA3LDEzfSwgeyAgIDI4MTUsMTV9LCB7ICAgIDc2NywxNH0sIFwKKyAgICB7ICAgMTUzNSwxM30sIHsgICAzMTk5LDE0fSwgeyAgIDE2NjMsMTN9LCB7ICAgMzQ1NSwxMn0sIFwKKyAgICB7ICAgNjkxMSwxNH0sIHsgICAxNzkxLDEzfSwgeyAgIDM1ODMsMTR9LCB7ICAgMTkxOSwxNn0sIFwKKyAgICB7ICAgIDUxMSwxNX0sIHsgICAxMDIzLDE0fSwgeyAgIDIxNzUsMTN9LCB7ICAgNDM1MSwxNH0sIFwKKyAgICB7ICAgMjQzMSwxM30sIHsgICA0ODYzLDE1fSwgeyAgIDEyNzksMTR9LCB7ICAgMjk0MywxM30sIFwKKyAgICB7ICAgNTg4NywxMn0sIHsgIDExNzc1LDE1fSwgeyAgIDE1MzUsMTR9LCB7ICAgMzQ1NSwxM30sIFwKKyAgICB7ICAgNjkxMSwxNX0sIHsgICAxNzkxLDE0fSwgeyAgIDM4MzksMTN9LCB7ICAgNzY3OSwxNn0sIFwKKyAgICB7ICAgMTAyMywxNX0sIHsgICAyMDQ3LDE0fSwgeyAgIDQzNTEsMTV9LCB7ICAgMjMwMywxNH0sIFwKKyAgICB7ICAgNDg2MywxNX0sIHsgICAyODE1LDE0fSwgeyAgIDU4ODcsMTN9LCB7ICAxMTc3NSwxNn0sIFwKKyAgICB7ICAgMTUzNSwxNX0sIHsgICAzMzI3LDE0fSwgeyAgIDY5MTEsMTV9LCB7ICAgMzgzOSwxNH0sIFwKKyAgICB7ICAgNzY3OSwxN30sIHsgICAxMDIzLDE2fSwgeyAgIDIwNDcsMTV9LCB7ICAgNDg2MywxNn0sIFwKKyAgICB7ICAgMjU1OSwxNX0sIHsgICA1ODg3LDE0fSwgeyAgMTE3NzUsMTZ9LCB7ICAgMzA3MSwxNX0sIFwKKyAgICB7ICAgNjkxMSwxNn0sIHsgICAzNTgzLDE1fSwgeyAgIDc2NzksMTR9LCB7ICAxNTM1OSwxNX0sIFwKKyAgICB7ICAgNzkzNSwxN30sIHsgICAyMDQ3LDE2fSwgeyAgIDQwOTUsMTV9LCB7ICAgODQ0NywxNn0sIFwKKyAgICB7ICAgNDYwNywxNX0sIHsgICA5OTgzLDE0fSwgeyAgMTk5NjcsMTZ9LCB7ICAgNTYzMSwxNX0sIFwKKyAgICB7ICAxMTc3NSwxN30sIHsgICAzMDcxLDE2fSwgeyAgNjU1MzYsMTd9LCB7IDEzMTA3MiwxOH0sIFwKKyAgICB7IDI2MjE0NCwxOX0sIHsgNTI0Mjg4LDIwfSwgezEwNDg1NzYsMjF9LCB7MjA5NzE1MiwyMn0sIFwKKyAgICB7NDE5NDMwNCwyM30sIHs4Mzg4NjA4LDI0fSB9CisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzX1NJWkUgMjM4CisjZGVmaW5lIE1VTF9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA0NzM2CisKKyNkZWZpbmUgU1FSX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICAzNjggIC8qIGsgPSA1ICovCisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICAzNjgsIDV9LCB7ICAgICAyMSwgNn0sIHsgICAgIDExLCA1fSwgeyAgICAgMjMsIDZ9LCBcCisgICAgeyAgICAgMjUsIDd9LCB7ICAgICAxMywgNn0sIHsgICAgIDI3LCA3fSwgeyAgICAgMjEsIDh9LCBcCisgICAgeyAgICAgMTEsIDd9LCB7ICAgICAyNSwgOH0sIHsgICAgIDEzLCA3fSwgeyAgICAgMjgsIDh9LCBcCisgICAgeyAgICAgMTUsIDd9LCB7ICAgICAzMSwgOH0sIHsgICAgIDIxLCA5fSwgeyAgICAgMTEsIDh9LCBcCisgICAgeyAgICAgMjcsIDl9LCB7ICAgICAxNSwgOH0sIHsgICAgIDMzLCA5fSwgeyAgICAgMTksIDh9LCBcCisgICAgeyAgICAgNDEsIDl9LCB7ICAgICAyMywgOH0sIHsgICAgIDQ3LCA5fSwgeyAgICAgMjcsMTB9LCBcCisgICAgeyAgICAgMTUsIDl9LCB7ICAgICAzOSwxMH0sIHsgICAgIDIzLCA5fSwgeyAgICAgNTEsMTF9LCBcCisgICAgeyAgICAgMTUsMTB9LCB7ICAgICAzMSwgOX0sIHsgICAgIDY3LDEwfSwgeyAgICAgMzksIDl9LCBcCisgICAgeyAgICAgNzksMTB9LCB7ICAgICA1NSwxMX0sIHsgICAgIDMxLDEwfSwgeyAgICAgNzksMTF9LCBcCisgICAgeyAgICAgNDcsMTB9LCB7ICAgICA5NSwxMn0sIHsgICAgIDMxLDExfSwgeyAgICAgNjMsMTB9LCBcCisgICAgeyAgICAxMjcsIDl9LCB7ICAgIDI1NSwxMX0sIHsgICAgIDc5LDEwfSwgeyAgICAxNTksIDl9LCBcCisgICAgeyAgICAzMTksMTF9LCB7ICAgICA5NSwxMH0sIHsgICAgMTkxLDEyfSwgeyAgICAgNjMsMTF9LCBcCisgICAgeyAgICAxMjcsMTB9LCB7ICAgIDI1NSwgOX0sIHsgICAgNTExLDEwfSwgeyAgICAyNzEsMTF9LCBcCisgICAgeyAgICAxNDMsMTB9LCB7ICAgIDI4NywgOX0sIHsgICAgNTc1LDEwfSwgeyAgICAzMDMsIDl9LCBcCisgICAgeyAgICA2MDcsMTF9LCB7ICAgIDE1OSwxMH0sIHsgICAgMzE5LCA2fSwgeyAgIDU2MzEsIDd9LCBcCisgICAgeyAgIDI5NDMsIDZ9LCB7ICAgNTg4NywgOH0sIHsgICAxNTM1LDExfSwgeyAgICAyMDcsMTB9LCBcCisgICAgeyAgICA0MTUsMTF9LCB7ICAgIDIyMywxMH0sIHsgICAgNDQ3LDExfSwgeyAgICAyMzksMTB9LCBcCisgICAgeyAgICA0NzksMTJ9LCB7ICAgIDEyNywxMX0sIHsgICAgMjU1LDEwfSwgeyAgICA1MTEsMTF9LCBcCisgICAgeyAgICAyNzEsMTB9LCB7ICAgIDU0MywxMX0sIHsgICAgMjg3LDEwfSwgeyAgICA1NzUsMTF9LCBcCisgICAgeyAgICAzMDMsMTB9LCB7ICAgIDYwNywxMX0sIHsgICAgMzE5LDEwfSwgeyAgICA2MzksMTF9LCBcCisgICAgeyAgICAzMzUsMTB9LCB7ICAgIDY3MSwxMX0sIHsgICAgMzUxLDEwfSwgeyAgICA3MDMsMTF9LCBcCisgICAgeyAgICAzNjcsMTB9LCB7ICAgIDczNSwxMX0sIHsgICAgMzgzLDEwfSwgeyAgICA3NjcsMTF9LCBcCisgICAgeyAgICA0MTUsMTB9LCB7ICAgIDgzMSwxMX0sIHsgICAgNDQ3LDEwfSwgeyAgICA4OTUsMTF9LCBcCisgICAgeyAgICA0NzksMTN9LCB7ICAgIDEyNywxMX0sIHsgICAgNTExLDEwfSwgeyAgIDEwMjMsMTF9LCBcCisgICAgeyAgICA1NDMsMTB9LCB7ICAgMTA4NywxMn0sIHsgICAgMjg3LDExfSwgeyAgICA2MDcsMTB9LCBcCisgICAgeyAgIDEyMTUsMTF9LCB7ICAgIDY3MSwxMn0sIHsgICAgMzUxLDExfSwgeyAgICA3MzUsMTJ9LCBcCisgICAgeyAgICAzODMsMTF9LCB7ICAgIDc2NywxMn0sIHsgICAgNDE1LDExfSwgeyAgICA4MzEsMTJ9LCBcCisgICAgeyAgICA0NDcsMTF9LCB7ICAgIDg5NSwxMn0sIHsgICAgNDc5LDExfSwgeyAgICA5NTksMTR9LCBcCisgICAgeyAgICAxMjcsMTJ9LCB7ICAgIDUxMSwxMX0sIHsgICAxMDIzLDEyfSwgeyAgICA1NDMsMTF9LCBcCisgICAgeyAgIDEwODcsMTJ9LCB7ICAgIDYwNywxMX0sIHsgICAxMjE1LDEyfSwgeyAgICA3MzUsMTN9LCBcCisgICAgeyAgICAzODMsMTJ9LCB7ICAgIDgzMSwxM30sIHsgICAgNDQ3LDEyfSwgeyAgICA5NTksMTN9LCBcCisgICAgeyAgICA1MTEsMTJ9LCB7ICAgMTA4NywxM30sIHsgICAgNTc1LDEyfSwgeyAgIDExNTEsMTN9LCBcCisgICAgeyAgICA2MzksMTJ9LCB7ICAgMTI3OSwxM30sIHsgICAgNzAzLDEyfSwgeyAgIDE0MDcsMTF9LCBcCisgICAgeyAgIDI4MTUsMTR9LCB7ICAgIDM4MywxM30sIHsgICAgNzY3LDEyfSwgeyAgIDE1MzUsMTN9LCBcCisgICAgeyAgICA4MzEsMTJ9LCB7ICAgMTcyNywxMX0sIHsgICAzNDU1LDEzfSwgeyAgICA5NTksMTR9LCBcCisgICAgeyAgICA1MTEsMTN9LCB7ICAgMTA4NywxMn0sIHsgICAyMTc1LDEzfSwgeyAgIDEyMTUsMTR9LCBcCisgICAgeyAgICA2MzksMTN9LCB7ICAgMTI3OSwxMn0sIHsgICAyNTU5LDEzfSwgeyAgIDEzNDMsMTJ9LCBcCisgICAgeyAgIDI2ODcsMTN9LCB7ICAgMTQwNywxMn0sIHsgICAyODE1LDEzfSwgeyAgIDE0NzEsMTR9LCBcCisgICAgeyAgICA3NjcsMTN9LCB7ICAgMTU5OSwxMn0sIHsgICAzMTk5LDEzfSwgeyAgIDE3MjcsMTR9LCBcCisgICAgeyAgICA4OTUsMTN9LCB7ICAgMTc5MSwxMn0sIHsgICAzNTgzLDEzfSwgeyAgIDE5MTksMTV9LCBcCisgICAgeyAgICA1MTEsMTR9LCB7ICAgMTAyMywxM30sIHsgICAyMTc1LDE0fSwgeyAgIDExNTEsMTN9LCBcCisgICAgeyAgIDIzMDMsMTJ9LCB7ICAgNDYwNywxM30sIHsgICAyNDMxLDEyfSwgeyAgIDQ4NjMsMTR9LCBcCisgICAgeyAgIDEyNzksMTN9LCB7ICAgMjY4NywxNH0sIHsgICAxNDA3LDEzfSwgeyAgIDI4MTUsMTV9LCBcCisgICAgeyAgICA3NjcsMTR9LCB7ICAgMTUzNSwxM30sIHsgICAzMTk5LDE0fSwgeyAgIDE2NjMsMTN9LCBcCisgICAgeyAgIDM0NTUsMTJ9LCB7ICAgNjkxMSwxNH0sIHsgICAxNzkxLDEzfSwgeyAgIDM1ODMsMTR9LCBcCisgICAgeyAgIDE5MTksMTZ9LCB7ICAgIDUxMSwxNX0sIHsgICAxMDIzLDE0fSwgeyAgIDI0MzEsMTN9LCBcCisgICAgeyAgIDQ4NjMsMTV9LCB7ICAgMTI3OSwxNH0sIHsgICAyOTQzLDEzfSwgeyAgIDU4ODcsMTV9LCBcCisgICAgeyAgIDE1MzUsMTR9LCB7ICAgMzQ1NSwxM30sIHsgICA2OTExLDE1fSwgeyAgIDE3OTEsMTR9LCBcCisgICAgeyAgIDM4MzksMTN9LCB7ICAgNzY3OSwxNn0sIHsgICAxMDIzLDE1fSwgeyAgIDIwNDcsMTR9LCBcCisgICAgeyAgIDQzNTEsMTV9LCB7ICAgMjMwMywxNH0sIHsgICA0ODYzLDE1fSwgeyAgIDI4MTUsMTR9LCBcCisgICAgeyAgIDU4ODcsMTZ9LCB7ICAgMTUzNSwxNX0sIHsgICAzMDcxLDE0fSwgeyAgIDYxNDMsMTV9LCBcCisgICAgeyAgIDMzMjcsMTR9LCB7ICAgNjkxMSwxNX0sIHsgICAzODM5LDE0fSwgeyAgIDc2NzksMTd9LCBcCisgICAgeyAgIDEwMjMsMTZ9LCB7ICAgMjA0NywxNX0sIHsgICA0ODYzLDE2fSwgeyAgIDI1NTksMTV9LCBcCisgICAgeyAgIDU4ODcsMTR9LCB7ICAxMTc3NSwxNn0sIHsgICAzMDcxLDE1fSwgeyAgIDY5MTEsMTZ9LCBcCisgICAgeyAgIDM1ODMsMTV9LCB7ICAgNzY3OSwxNH0sIHsgIDE1MzU5LDE1fSwgeyAgIDc5MzUsMTd9LCBcCisgICAgeyAgIDIwNDcsMTZ9LCB7ICAgNDA5NSwxNX0sIHsgICA4MTkxLDE2fSwgeyAgIDQ2MDcsMTV9LCBcCisgICAgeyAgIDk5ODMsMTR9LCB7ICAxOTk2NywxNn0sIHsgICA1NjMxLDE1fSwgeyAgMTE3NzUsMTd9LCBcCisgICAgeyAgIDMwNzEsMTZ9LCB7ICA2NTUzNiwxN30sIHsgMTMxMDcyLDE4fSwgeyAyNjIxNDQsMTl9LCBcCisgICAgeyA1MjQyODgsMjB9LCB7MTA0ODU3NiwyMX0sIHsyMDk3MTUyLDIyfSwgezQxOTQzMDQsMjN9LCBcCisgICAgezgzODg2MDgsMjR9IH0KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTNfU0laRSAyMzcKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDMyNjQKKworI2RlZmluZSBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDY4CisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgICA4OTY3CisjZGVmaW5lIFNRUkxPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgIDExCisjZGVmaW5lIFNRUkxPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDgwCisjZGVmaW5lIFNRUkxPX1NRUl9USFJFU0hPTEQgICAgICAgICAgICAgICA2NDgxCisKKyNkZWZpbmUgRENfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNTgKKyNkZWZpbmUgRENfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAxODIKKyNkZWZpbmUgRENfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNjAKKyNkZWZpbmUgRENfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMjMKKworI2RlZmluZSBJTlZfTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAzOAorI2RlZmluZSBJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE3OQorI2RlZmluZSBJTlZfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDE4MgorCisjZGVmaW5lIEJJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgMjMwCisjZGVmaW5lIFJFRENfMV9UT19SRURDXzJfVEhSRVNIT0xEICAgICAgICAgIDQ4CisjZGVmaW5lIFJFRENfMl9UT19SRURDX05fVEhSRVNIT0xEICAgICAgICAgIDYzCisKKyNkZWZpbmUgTVVfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE0NzAKKyNkZWZpbmUgTVVfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgIDE1MjgKKyNkZWZpbmUgTVVQSV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgODIKKyNkZWZpbmUgTVVfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgIDEzMzQKKyNkZWZpbmUgTVVfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE1MDYKKworI2RlZmluZSBQT1dNX1NFQ19UQUJMRSAgMSwyMiwxOTQsNDczLDEyOTcsMjY5OAorCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgIDE5CisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAxMzkxCisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAyNjU0CisKKyNkZWZpbmUgRkFDX0RTQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICA1NjIKKyNkZWZpbmUgRkFDX09ERF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworCisjZGVmaW5lIE1BVFJJWDIyX1NUUkFTU0VOX1RIUkVTSE9MRCAgICAgICAgIDE1CisjZGVmaW5lIEhHQ0QyX0RJVjFfTUVUSE9EICAgICAgICAgICAgICAgICAgICA1ICAvKiAzLjQ5JSBmYXN0ZXIgdGhhbiAzICovCisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAgIDk2CisjZGVmaW5lIEhHQ0RfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDkyCisjZGVmaW5lIEhHQ0RfUkVEVUNFX1RIUkVTSE9MRCAgICAgICAgICAgICAyNjgxCisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgNTAxCisjZGVmaW5lIEdDREVYVF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMzY1CisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAgICAxICAvKiAyMy44NyUgZmFzdGVyIHRoYW4gNCAqLworCisvKiBUdW5ldXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgdG9vayAyMzgzNjAgc2Vjb25kcyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlod2wvbXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlod2wvbXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNjQ5ZTgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaWh3bC9tdWxfMS5hc20KQEAgLTAsMCArMSwxNTkgQEAKK2RubCAgQU1ENjQgbXBuX211bF8xIHVzaW5nIG11bHggb3B0aW1pc2VkIGZvciBJbnRlbCBIYXN3ZWxsLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTIsIDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIEFNRCBLOCxLOSAgICAgIC0KK0MgQU1EIEsxMCAgICAgICAgLQorQyBBTUQgYnVsbCAgICAgICAtCitDIEFNRCBwaWxlICAgICAgIC0KK0MgQU1EIHN0ZWFtICAgICAgLQorQyBBTUQgZXhjYXZhdG9yICAtCitDIEFNRCBib2JjYXQgICAgIC0KK0MgQU1EIGphZ3VhciAgICAgLQorQyBJbnRlbCBQNCAgICAgICAtCitDIEludGVsIGNvcmUyICAgIC0KK0MgSW50ZWwgTkhNICAgICAgLQorQyBJbnRlbCBTQlIgICAgICAtCitDIEludGVsIElCUiAgICAgIC0KK0MgSW50ZWwgSFdMICAgICAgMS41OQorQyBJbnRlbCBCV0wgICAgICAxLjc2CitDIEludGVsIFNLTCAgICAgIDEuNTQKK0MgSW50ZWwgYXRvbSAgICAgLQorQyBJbnRlbCBTTE0gICAgICAtCitDIFZJQSBuYW5vICAgICAgIC0KKworQyBUaGUgbG9vcCBvZiB0aGlzIGNvZGUgaXMgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGEgY29kZSBnZW5lcmF0aW9uIGFuZAorQyBvcHRpbWlzYXRpb24gdG9vbCBzdWl0ZSB3cml0dGVuIGJ5IERhdmlkIEhhcnZleSBhbmQgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK2RlZmluZShgcnAnLCAgICAgIGAlcmRpJykgICBDIHJjeAorZGVmaW5lKGB1cCcsICAgICAgYCVyc2knKSAgIEMgcmR4CitkZWZpbmUoYG5fcGFyYW0nLCBgJXJkeCcpICAgQyByOAorZGVmaW5lKGB2MF9wYXJhbScsYCVyY3gnKSAgIEMgcjkKKworZGVmaW5lKGBuJywgICAgICAgYCVyYnAnKQorZGVmaW5lKGB2MCcsICAgICAgYCVyZHgnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigzMikKK1BST0xPR1VFKG1wbl9tdWxfMSkKKwlGVU5DX0VOVFJZKDQpCisJcHVzaAklcmJ4CisJcHVzaAklcmJwCisJcHVzaAklcjEyCisKKwltb3YJbl9wYXJhbSwgbgorCXNocgkkMiwgbgorCisJdGVzdAkkMSwgUjgobl9wYXJhbSkKKwlqbnoJTChieDEpCisKK0woYngwKToJdGVzdAkkMiwgUjgobl9wYXJhbSkKKwltb3YJdjBfcGFyYW0sIHYwCisJam56CUwoYjEwKQorCitMKGIwMCk6CW11bHgoCSh1cCksICVyOSwgJXI4KQorCW11bHgoCTgsKHVwKSwgJXIxMSwgJXIxMCkKKwltdWx4KAkxNiwodXApLCAlcmN4LCAlcjEyKQorCWxlYQktMzIocnApLCBycAorCWptcAlMKGxvMCkKKworTChiMTApOgltdWx4KAkodXApLCAlcmN4LCAlcjEyKQorCW11bHgoCTgsKHVwKSwgJXJieCwgJXJheCkKKwlsZWEJLTE2KHJwKSwgcnAKKwl0ZXN0CW4sIG4KKwlqeglMKGNqMikKKwltdWx4KAkxNiwodXApLCAlcjksICVyOCkKKwlsZWEJMTYodXApLCB1cAorCWptcAlMKGxvMikKKworTChieDEpOgl0ZXN0CSQyLCBSOChuX3BhcmFtKQorCW1vdgl2MF9wYXJhbSwgdjAKKwlqbnoJTChiMTEpCisKK0woYjAxKToJbXVseCgJKHVwKSwgJXJieCwgJXJheCkKKwlsZWEJLTI0KHJwKSwgcnAKKwl0ZXN0CW4sIG4KKwlqeglMKGNqMSkKKwltdWx4KAk4LCh1cCksICVyOSwgJXI4KQorCWxlYQk4KHVwKSwgdXAKKwlqbXAJTChsbzEpCisKK0woYjExKToJbXVseCgJKHVwKSwgJXIxMSwgJXIxMCkKKwltdWx4KAk4LCh1cCksICVyY3gsICVyMTIpCisJbXVseCgJMTYsKHVwKSwgJXJieCwgJXJheCkKKwlsZWEJLTgocnApLCBycAorCXRlc3QJbiwgbgorCWp6CUwoY2ozKQorCWxlYQkyNCh1cCksIHVwCisJam1wCUwobG8zKQorCisJQUxJR04oMzIpCitMKHRvcCk6CWxlYQkzMihycCksIHJwCisJbW92CSVyOSwgKHJwKQorCWFkYwklcjgsICVyMTEKK0wobG8zKToJbXVseCgJKHVwKSwgJXI5LCAlcjgpCisJbW92CSVyMTEsIDgocnApCisJYWRjCSVyMTAsICVyY3gKK0wobG8yKToJbW92CSVyY3gsIDE2KHJwKQorCWFkYwklcjEyLCAlcmJ4CitMKGxvMSk6CW11bHgoCTgsKHVwKSwgJXIxMSwgJXIxMCkKKwlhZGMJJXJheCwgJXI5CisJbXVseCgJMTYsKHVwKSwgJXJjeCwgJXIxMikKKwltb3YJJXJieCwgMjQocnApCitMKGxvMCk6CW11bHgoCTI0LCh1cCksICVyYngsICVyYXgpCisJbGVhCTMyKHVwKSwgdXAKKwlkZWMJbgorCWpueglMKHRvcCkKKworTChlbmQpOglsZWEJMzIocnApLCBycAorCW1vdgklcjksIChycCkKKwlhZGMJJXI4LCAlcjExCitMKGNqMyk6CW1vdgklcjExLCA4KHJwKQorCWFkYwklcjEwLCAlcmN4CitMKGNqMik6CW1vdgklcmN4LCAxNihycCkKKwlhZGMJJXIxMiwgJXJieAorTChjajEpOgltb3YJJXJieCwgMjQocnApCisJYWRjCSQwLCAlcmF4CisKKwlwb3AJJXIxMgorCXBvcAklcmJwCisJcG9wCSVyYngKKwlGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaWh3bC9tdWxfMi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaWh3bC9tdWxfMi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFmMDQ0ZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpaHdsL211bF8yLmFzbQpAQCAtMCwwICsxLDE3NiBAQAorZG5sICBBTUQ2NCBtcG5fbXVsXzIgb3B0aW1pc2VkIGZvciBJbnRlbCBIYXN3ZWxsLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIEFNRCBLOCxLOQkgLQorQyBBTUQgSzEwCSAtCitDIEFNRCBidWxsCSAtCitDIEFNRCBwaWxlCSAtCitDIEFNRCBzdGVhbQkgLQorQyBBTUQgZXhjYXZhdG9yCSAtCitDIEFNRCBib2JjYXQJIC0KK0MgQU1EIGphZ3VhcgkgLQorQyBJbnRlbCBQNAkgLQorQyBJbnRlbCBjb3JlCSAtCitDIEludGVsIE5ITQkgLQorQyBJbnRlbCBTQlIJIC0KK0MgSW50ZWwgSUJSCSAtCitDIEludGVsIEhXTCAgICAgIDMuNzQKK0MgSW50ZWwgQldMICAgICAgNC4yMQorQyBJbnRlbCBTS0wgICAgICA0LjIwCitDIEludGVsIGF0b20JIC0KK0MgSW50ZWwgU0xNCSAtCitDIFZJQSBuYW5vCSAtCisKK0MgVGhlIGxvb3Agb2YgdGhpcyBjb2RlIGlzIHRoZSByZXN1bHQgb2YgcnVubmluZyBhIGNvZGUgZ2VuZXJhdGlvbiBhbmQKK0Mgb3B0aW1pc2F0aW9uIHRvb2wgc3VpdGUgd3JpdHRlbiBieSBEYXZpZCBIYXJ2ZXkgYW5kIFRvcmJqw7ZybiBHcmFubHVuZC4KKworQyBUT0RPCitDICAqIE1vdmUgdGVzdCBhbmQgamNjIHRvZ2V0aGVyLCBmb3IgaW5zbiBmdXNpb24uCisKK2RlZmluZShgcnAnLCAgICAgYCVyZGknKQorZGVmaW5lKGB1cCcsICAgICBgJXJzaScpCitkZWZpbmUoYG5fcGFyYW0nLGAlcmR4JykKK2RlZmluZShgdnAnLCAgICAgYCVyY3gnKQorCitkZWZpbmUoYHYwJywgYCVyOCcpCitkZWZpbmUoYHYxJywgYCVyOScpCitkZWZpbmUoYHcwJywgYCVyYngnKQorZGVmaW5lKGB3MScsIGAlcmN4JykKK2RlZmluZShgdzInLCBgJXJicCcpCitkZWZpbmUoYHczJywgYCVyMTAnKQorZGVmaW5lKGBuJywgIGAlcjExJykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMzIpCitQUk9MT0dVRShtcG5fbXVsXzIpCisJRlVOQ19FTlRSWSg0KQorCXB1c2gJJXJieAorCXB1c2gJJXJicAorCisJbW92CSh2cCksIHYwCisJbW92CTgodnApLCB2MQorCisJbGVhCTMobl9wYXJhbSksIG4KKwlzaHIJJDIsIG4KKworCXRlc3QJJDEsIFI4KG5fcGFyYW0pCisJam56CUwoYngxKQorCitMKGJ4MCk6CXhvcgl3MCwgdzAKKwl0ZXN0CSQyLCBSOChuX3BhcmFtKQorCW1vdgkodXApLCAlcmR4CisJbXVseCgJdjAsIHcyLCB3MSkKKwlqeglMKGxvMCkKKworTChiMTApOglsZWEJLTE2KHJwKSwgcnAKKwlsZWEJLTE2KHVwKSwgdXAKKwlqbXAJTChsbzIpCisKK0woYngxKToJeG9yCXcyLCB3MgorCXRlc3QJJDIsIFI4KG5fcGFyYW0pCisJbW92CSh1cCksICVyZHgKKwltdWx4KAl2MCwgdzAsIHczKQorCWpueglMKGIxMSkKKworTChiMDEpOglsZWEJLTI0KHJwKSwgcnAKKwlsZWEJOCh1cCksIHVwCisJam1wCUwobG8xKQorCitMKGIxMSk6CWxlYQktOChycCksIHJwCisJbGVhCS04KHVwKSwgdXAKKwlqbXAJTChsbzMpCisKKwlBTElHTigxNikKK0wodG9wKToJbXVseCgJdjEsICVyYXgsIHcwKQorCWFkZAklcmF4LCB3MgkJQyAwCisJbW92CSh1cCksICVyZHgKKwltdWx4KAl2MCwgJXJheCwgdzEpCisJYWRjCSQwLCB3MAkJCUMgMQorCWFkZAklcmF4LCB3MgkJQyAwCisJYWRjCSQwLCB3MQkJCUMgMQorCWFkZAl3MywgdzIJCQlDIDAKK0wobG8wKToJbW92CXcyLCAocnApCQlDIDAKKwlhZGMJJDAsIHcxCQkJQyAxCisJbXVseCgJdjEsICVyYXgsIHcyKQorCWFkZAklcmF4LCB3MAkJQyAxCisJbW92CTgodXApLCAlcmR4CisJYWRjCSQwLCB3MgkJCUMgMgorCW11bHgoCXYwLCAlcmF4LCB3MykKKwlhZGQJJXJheCwgdzAJCUMgMQorCWFkYwkkMCwgdzMJCQlDIDIKKwlhZGQJdzEsIHcwCQkJQyAxCitMKGxvMyk6CW1vdgl3MCwgOChycCkJCUMgMQorCWFkYwkkMCwgdzMJCQlDIDIKKwltdWx4KAl2MSwgJXJheCwgdzApCisJYWRkCSVyYXgsIHcyCQlDIDIKKwltb3YJMTYodXApLCAlcmR4CisJbXVseCgJdjAsICVyYXgsIHcxKQorCWFkYwkkMCwgdzAJCQlDIDMKKwlhZGQJJXJheCwgdzIJCUMgMgorCWFkYwkkMCwgdzEJCQlDIDMKKwlhZGQJdzMsIHcyCQkJQyAyCitMKGxvMik6CW1vdgl3MiwgMTYocnApCQlDIDIKKwlhZGMJJDAsIHcxCQkJQyAzCisJbXVseCgJdjEsICVyYXgsIHcyKQorCWFkZAklcmF4LCB3MAkJQyAzCisJbW92CTI0KHVwKSwgJXJkeAorCWFkYwkkMCwgdzIJCQlDIDQKKwltdWx4KAl2MCwgJXJheCwgdzMpCisJYWRkCSVyYXgsIHcwCQlDIDMKKwlhZGMJJDAsIHczCQkJQyA0CisJYWRkCXcxLCB3MAkJCUMgMworCWxlYQkzMih1cCksIHVwCitMKGxvMSk6CW1vdgl3MCwgMjQocnApCQlDIDMKKwlhZGMJJDAsIHczCQkJQyA0CisJZGVjCW4KKwlsZWEJMzIocnApLCBycAorCWpueglMKHRvcCkKKworTChlbmQpOgltdWx4KAl2MSwgJXJkeCwgJXJheCkKKwlhZGQJJXJkeCwgdzIKKwlhZGMJJDAsICVyYXgKKwlhZGQJdzMsIHcyCisJbW92CXcyLCAocnApCisJYWRjCSQwLCAlcmF4CisKKwlwb3AJJXJicAorCXBvcAklcmJ4CisJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpaHdsL211bF9iYXNlY2FzZS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaWh3bC9tdWxfYmFzZWNhc2UuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNjU2YzgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaWh3bC9tdWxfYmFzZWNhc2UuYXNtCkBAIC0wLDAgKzEsNDQxIEBACitkbmwgIEFNRDY0IG1wbl9tdWxfYmFzZWNhc2Ugb3B0aW1pc2VkIGZvciBJbnRlbCBIYXN3ZWxsLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDMtMjAwNSwgMjAwNywgMjAwOCwgMjAxMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgY3ljbGVzL2xpbWIJbXVsXzEJCW11bF8yCQltdWxfMwkJYWRkbXVsXzIKK0MgQU1EIEs4LEs5CW4vYQkJbi9hCQkgLQkJbi9hCitDIEFNRCBLMTAJbi9hCQluL2EJCSAtCQluL2EKK0MgQU1EIGJ1bGwJbi9hCQluL2EJCSAtCQluL2EKK0MgQU1EIHBpbGUJbi9hCQluL2EJCSAtCQluL2EKK0MgQU1EIHN0ZWFtCSA/CQkgPwkJIC0JCSA/CitDIEFNRCBib2JjYXQJbi9hCQluL2EJCSAtCQluL2EKK0MgQU1EIGphZ3VhcgkgPwkJID8JCSAtCQkgPworQyBJbnRlbCBQNAluL2EJCW4vYQkJIC0JCW4vYQorQyBJbnRlbCBjb3JlCW4vYQkJbi9hCQkgLQkJbi9hCitDIEludGVsIE5ITQluL2EJCW4vYQkJIC0JCW4vYQorQyBJbnRlbCBTQlIJbi9hCQluL2EJCSAtCQluL2EKK0MgSW50ZWwgSUJSCW4vYQkJbi9hCQkgLQkJbi9hCitDIEludGVsIEhXTAkgMS43NwkJIDEuODYJCSAtCQkgMi4xNQorQyBJbnRlbCBCV0wJID8JCSA/CQkgLQkJID8KK0MgSW50ZWwgYXRvbQluL2EJCW4vYQkJIC0JCW4vYQorQyBWSUEgbmFubwluL2EJCW4vYQkJIC0JCW4vYQorCitDIFRoZSBpbm5lciBsb29wcyBvZiB0aGlzIGNvZGUgYXJlIHRoZSByZXN1bHQgb2YgcnVubmluZyBhIGNvZGUgZ2VuZXJhdGlvbiBhbmQKK0Mgb3B0aW1pc2F0aW9uIHRvb2wgc3VpdGUgd3JpdHRlbiBieSBEYXZpZCBIYXJ2ZXkgYW5kIFRvcmJqw7ZybiBHcmFubHVuZC4KKworQyBUT0RPCitDICAqIEFkam9pbiBhIG11bF8zLgorQyAgKiBGdXJ0aGVyIG1pY3JvLW9wdGltaXNlLgorCitkZWZpbmUoYHJwJywgICAgICBgJXJkaScpCitkZWZpbmUoYHVwJywgICAgICBgJXJzaScpCitkZWZpbmUoYHVuX3BhcmFtJyxgJXJkeCcpCitkZWZpbmUoYHZwJywgICAgICBgJXJjeCcpCitkZWZpbmUoYHZuJywgICAgICBgJXI4JykKKworZGVmaW5lKGB1bicsICAgICAgYCVyYngnKQorCitkZWZpbmUoYHcwJywJYCVyMTAnKQorZGVmaW5lKGB3MScsCWAlcjExJykKK2RlZmluZShgdzInLAlgJXIxMicpCitkZWZpbmUoYHczJywJYCVyMTMnKQorZGVmaW5lKGBuJywJYCVyYnAnKQorZGVmaW5lKGB2MCcsCWAlcjknKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigxNikKK1BST0xPR1VFKG1wbl9tdWxfYmFzZWNhc2UpCisJRlVOQ19FTlRSWSg0KQorSUZET1MoYAltb3YJNTYoJXJzcCksICVyOGQJJykKKwlwdXNoCSVyYngKKwlwdXNoCSVyYnAKKwlwdXNoCSVyMTIKKwlwdXNoCSVyMTMKKwlwdXNoCSVyMTQKKwltb3YJdW5fcGFyYW0sIHVuCQlDIGZyZWUgdXAgcmR4CisJbmVnCXVuCisKKwltb3YJdW5fcGFyYW0sIG4JCUMgRklYTUU6IHNoYXJlCisJc2FyCSQyLCBuCQkJQyBGSVhNRTogc2hhcmUKKworCXRlc3QJJDEsIFI4KHZuKQorCWp6CUwoZG9fbXVsXzIpCisKK2RlZmluZShgdzQnLAlgJXI5JykKK2RlZmluZShgdzUnLAlgJXIxNCcpCisKKwltb3YJKHZwKSwgJXJkeAorCitMKGRvX211bF8xKToKKwl0ZXN0CSQxLCBSOCh1bikKKwlqbnoJTChtMXgxKQorCitMKG0xeDApOnRlc3QJJDIsIFI4KHVuKQorCWpueglMKG0xMTApCisKK0wobTEwMCk6CisJbXVseCgJKHVwKSwgdzUsIHcyKQorCW11bHgoCTgsKHVwKSwgdzEsIHczKQorCWxlYQktMjQocnApLCBycAorCWptcAlMKG0xbDApCisKK0wobTExMCk6CisJbXVseCgJKHVwKSwgdzMsIHc0KQorCW11bHgoCTgsKHVwKSwgdzEsIHc1KQorCWxlYQktOChycCksIHJwCisJdGVzdAluLCBuCisJanoJTChjajIpCisJbXVseCgJMTYsKHVwKSwgdzAsIHcyKQorCWxlYQkxNih1cCksIHVwCisJam1wCUwobTFsMikKKworTChtMXgxKTp0ZXN0CSQyLCBSOCh1bikKKwlqeglMKG0xMTEpCisKK0wobTEwMSk6CisJbXVseCgJKHVwKSwgdzQsIHc1KQorCWxlYQktMTYocnApLCBycAorCXRlc3QJbiwgbgorCWp6CUwoY2oxKQorCW11bHgoCTgsKHVwKSwgdzAsIHcyKQorCWxlYQk4KHVwKSwgdXAKKwlqbXAJTChtMWwxKQorCitMKG0xMTEpOgorCW11bHgoCSh1cCksIHcyLCB3MykKKwltdWx4KAk4LCh1cCksIHcwLCB3NCkKKwltdWx4KAkxNiwodXApLCB3MSwgdzUpCisJbGVhCTI0KHVwKSwgdXAKKwl0ZXN0CW4sIG4KKwlqbnoJTChndDMpCisJYWRkCXcwLCB3MworCWptcAlMKGNqMykKK0woZ3QzKToJYWRkCXcwLCB3MworCWptcAlMKG0xbDMpCisKKwlBTElHTigzMikKK0wobTF0cCk6bGVhCTMyKHJwKSwgcnAKK0wobTFsMyk6bW92CXcyLCAocnApCisJbXVseCgJKHVwKSwgdzAsIHcyKQorTChtMWwyKTptb3YJdzMsIDgocnApCisJYWRjCXcxLCB3NAorTChtMWwxKTphZGMJdzAsIHc1CisJbW92CXc0LCAxNihycCkKKwltdWx4KAk4LCh1cCksIHcxLCB3MykKK0wobTFsMCk6bW92CXc1LCAyNChycCkKKwltdWx4KAkxNiwodXApLCB3MCwgdzQpCisJYWRjCXcxLCB3MgorCW11bHgoCTI0LCh1cCksIHcxLCB3NSkKKwlhZGMJdzAsIHczCisJbGVhCTMyKHVwKSwgdXAKKwlkZWMJbgorCWpueglMKG0xdHApCisKK0wobTFlZCk6bGVhCTMyKHJwKSwgcnAKK0woY2ozKToJbW92CXcyLCAocnApCitMKGNqMik6CW1vdgl3MywgOChycCkKKwlhZGMJdzEsIHc0CitMKGNqMSk6CW1vdgl3NCwgMTYocnApCisJYWRjCSQwLCB3NQorCW1vdgl3NSwgMjQocnApCisKKwlkZWMJUjMyKHZuKQorCWp6CUwocmV0NSkKKworCWxlYQk4KHZwKSwgdnAKKwlsZWEJMzIocnApLCBycAorQwlwdXNoCSVyMTIKK0MJcHVzaAklcjEzCitDCXB1c2gJJXIxNAorCWptcAlMKGRvX2FkZG11bCkKKworTChkb19tdWxfMik6CitkZWZpbmUoYHYxJywJYCVyMTQnKQorQwlwdXNoCSVyMTIKK0MJcHVzaAklcjEzCitDCXB1c2gJJXIxNAorCisJbW92CSh2cCksIHYwCisJbW92CTgodnApLCB2MQorCisJbGVhCSh1biksIG4KKwlzYXIJJDIsIG4KKworCXRlc3QJJDEsIFI4KHVuKQorCWpueglMKG0yeDEpCisKK0wobTJ4MCk6eG9yCXcwLCB3MAorCXRlc3QJJDIsIFI4KHVuKQorCW1vdgkodXApLCAlcmR4CisJbXVseCgJdjAsIHcyLCB3MSkKKwlqeglMKG0ybDApCisKK0wobTIxMCk6bGVhCS0xNihycCksIHJwCisJbGVhCS0xNih1cCksIHVwCisJam1wCUwobTJsMikKKworTChtMngxKTp4b3IJdzIsIHcyCisJdGVzdAkkMiwgUjgodW4pCisJbW92CSh1cCksICVyZHgKKwltdWx4KAl2MCwgdzAsIHczKQorCWp6CUwobTIxMSkKKworTChtMjAxKTpsZWEJLTI0KHJwKSwgcnAKKwlsZWEJOCh1cCksIHVwCisJam1wCUwobTJsMSkKKworTChtMjExKTpsZWEJLTgocnApLCBycAorCWxlYQktOCh1cCksIHVwCisJam1wCUwobTJsMykKKworCUFMSUdOKDE2KQorTChtMnRwKTptdWx4KAl2MSwgJXJheCwgdzApCisJYWRkCSVyYXgsIHcyCisJbW92CSh1cCksICVyZHgKKwltdWx4KAl2MCwgJXJheCwgdzEpCisJYWRjCSQwLCB3MAorCWFkZAklcmF4LCB3MgorCWFkYwkkMCwgdzEKKwlhZGQJdzMsIHcyCitMKG0ybDApOm1vdgl3MiwgKHJwKQorCWFkYwkkMCwgdzEKKwltdWx4KAl2MSwgJXJheCwgdzIpCisJYWRkCSVyYXgsIHcwCisJbW92CTgodXApLCAlcmR4CisJYWRjCSQwLCB3MgorCW11bHgoCXYwLCAlcmF4LCB3MykKKwlhZGQJJXJheCwgdzAKKwlhZGMJJDAsIHczCisJYWRkCXcxLCB3MAorTChtMmwzKTptb3YJdzAsIDgocnApCisJYWRjCSQwLCB3MworCW11bHgoCXYxLCAlcmF4LCB3MCkKKwlhZGQJJXJheCwgdzIKKwltb3YJMTYodXApLCAlcmR4CisJbXVseCgJdjAsICVyYXgsIHcxKQorCWFkYwkkMCwgdzAKKwlhZGQJJXJheCwgdzIKKwlhZGMJJDAsIHcxCisJYWRkCXczLCB3MgorTChtMmwyKTptb3YJdzIsIDE2KHJwKQorCWFkYwkkMCwgdzEKKwltdWx4KAl2MSwgJXJheCwgdzIpCisJYWRkCSVyYXgsIHcwCisJbW92CTI0KHVwKSwgJXJkeAorCWFkYwkkMCwgdzIKKwltdWx4KAl2MCwgJXJheCwgdzMpCisJYWRkCSVyYXgsIHcwCisJYWRjCSQwLCB3MworCWFkZAl3MSwgdzAKKwlsZWEJMzIodXApLCB1cAorTChtMmwxKTptb3YJdzAsIDI0KHJwKQorCWFkYwkkMCwgdzMKKwlpbmMJbgorCWxlYQkzMihycCksIHJwCisJam56CUwobTJ0cCkKKworTChtMmVkKTptdWx4KAl2MSwgJXJkeCwgJXJheCkKKwlhZGQJJXJkeCwgdzIKKwlhZGMJJDAsICVyYXgKKwlhZGQJdzMsIHcyCisJbW92CXcyLCAocnApCisJYWRjCSQwLCAlcmF4CisJbW92CSVyYXgsIDgocnApCisKKwlhZGQJJC0yLCBSMzIodm4pCisJanoJTChyZXQ1KQorCWxlYQkxNih2cCksIHZwCisJbGVhCTE2KHJwKSwgcnAKKworCitMKGRvX2FkZG11bCk6CisJcHVzaAklcjE1CisJcHVzaAl2bgkJCUMgc2F2ZSB2biBpbiBuZXcgc3RhY2sgc2xvdAorZGVmaW5lKGB2bicsCWAoJXJzcCknKQorZGVmaW5lKGBYMCcsCWAlcjE0JykKK2RlZmluZShgWDEnLAlgJXIxNScpCitkZWZpbmUoYHYxJywJYCVyOCcpCisKKwlsZWEJKHJwLHVuLDgpLCBycAorCWxlYQkodXAsdW4sOCksIHVwCisKK0wob3V0ZXIpOgorCW1vdgkodnApLCB2MAorCW1vdgk4KHZwKSwgdjEKKworCWxlYQkyKHVuKSwgbgorCXNhcgkkMiwgbgorCisJbW92CSh1cCksICVyZHgKKwl0ZXN0CSQxLCBSOCh1bikKKwlqbnoJTChieDEpCisKK0woYngwKToJbW92CShycCksIFgwCisJbW92CTgocnApLCBYMQorCW11bHgoCXYwLCAlcmF4LCB3MSkKKwlhZGQJJXJheCwgWDAKKwltdWx4KAl2MSwgJXJheCwgdzIpCisJYWRjCSQwLCB3MQorCW1vdglYMCwgKHJwKQorCWFkZAklcmF4LCBYMQorCWFkYwkkMCwgdzIKKwltb3YJOCh1cCksICVyZHgKKwl0ZXN0CSQyLCBSOCh1bikKKwlqbnoJTChiMTApCisKK0woYjAwKToJbGVhCTE2KHVwKSwgdXAKKwlsZWEJMTYocnApLCBycAorCWptcAlMKGxvMCkKKworTChiMTApOgltb3YJMTYocnApLCBYMAorCWxlYQkzMih1cCksIHVwCisJbXVseCgJdjAsICVyYXgsIHczKQorCWptcAlMKGxvMikKKworTChieDEpOgltb3YJKHJwKSwgWDEKKwltb3YJOChycCksIFgwCisJbXVseCgJdjAsICVyYXgsIHczKQorCWFkZAklcmF4LCBYMQorCWFkYwkkMCwgdzMKKwltdWx4KAl2MSwgJXJheCwgdzApCisJYWRkCSVyYXgsIFgwCisJYWRjCSQwLCB3MAorCW1vdgk4KHVwKSwgJXJkeAorCW1vdglYMSwgKHJwKQorCW11bHgoCXYwLCAlcmF4LCB3MSkKKwl0ZXN0CSQyLCBSOCh1bikKKwlqeglMKGIxMSkKKworTChiMDEpOgltb3YJMTYocnApLCBYMQorCWxlYQkyNChycCksIHJwCisJbGVhCTI0KHVwKSwgdXAKKwlqbXAJTChsbzEpCisKK0woYjExKToJbGVhCTgocnApLCBycAorCWxlYQk4KHVwKSwgdXAKKwlqbXAJTChsbzMpCisKKwlBTElHTigxNikKK0wodG9wKToJbXVseCgJdjAsICVyYXgsIHczKQorCWFkZAl3MCwgWDEKKwlhZGMJJDAsIHcyCitMKGxvMik6CWFkZAklcmF4LCBYMQorCWFkYwkkMCwgdzMKKwltdWx4KAl2MSwgJXJheCwgdzApCisJYWRkCSVyYXgsIFgwCisJYWRjCSQwLCB3MAorCWxlYQkzMihycCksIHJwCisJYWRkCXcxLCBYMQorCW1vdgktMTYodXApLCAlcmR4CisJbW92CVgxLCAtMjQocnApCisJYWRjCSQwLCB3MworCWFkZAl3MiwgWDAKKwltb3YJLTgocnApLCBYMQorCW11bHgoCXYwLCAlcmF4LCB3MSkKKwlhZGMJJDAsIHcwCitMKGxvMSk6CWFkZAklcmF4LCBYMAorCW11bHgoCXYxLCAlcmF4LCB3MikKKwlhZGMJJDAsIHcxCisJYWRkCXczLCBYMAorCW1vdglYMCwgLTE2KHJwKQorCWFkYwkkMCwgdzEKKwlhZGQJJXJheCwgWDEKKwlhZGMJJDAsIHcyCisJYWRkCXcwLCBYMQorCW1vdgktOCh1cCksICVyZHgKKwlhZGMJJDAsIHcyCitMKGxvMCk6CW11bHgoCXYwLCAlcmF4LCB3MykKKwlhZGQJJXJheCwgWDEKKwlhZGMJJDAsIHczCisJbW92CShycCksIFgwCisJbXVseCgJdjEsICVyYXgsIHcwKQorCWFkZAklcmF4LCBYMAorCWFkYwkkMCwgdzAKKwlhZGQJdzEsIFgxCisJbW92CVgxLCAtOChycCkKKwlhZGMJJDAsIHczCisJbW92CSh1cCksICVyZHgKKwlhZGQJdzIsIFgwCisJbXVseCgJdjAsICVyYXgsIHcxKQorCWFkYwkkMCwgdzAKK0wobG8zKToJYWRkCSVyYXgsIFgwCisJYWRjCSQwLCB3MQorCW11bHgoCXYxLCAlcmF4LCB3MikKKwlhZGQJdzMsIFgwCisJbW92CTgocnApLCBYMQorCW1vdglYMCwgKHJwKQorCW1vdgkxNihycCksIFgwCisJYWRjCSQwLCB3MQorCWFkZAklcmF4LCBYMQorCWFkYwkkMCwgdzIKKwltb3YJOCh1cCksICVyZHgKKwlsZWEJMzIodXApLCB1cAorCWluYwluCisJam56CUwodG9wKQorCitMKGVuZCk6CW11bHgoCXYwLCAlcmF4LCB3MykKKwlhZGQJdzAsIFgxCisJYWRjCSQwLCB3MgorCWFkZAklcmF4LCBYMQorCWFkYwkkMCwgdzMKKwltdWx4KAl2MSwgJXJkeCwgJXJheCkKKwlhZGQJdzEsIFgxCisJbW92CVgxLCA4KHJwKQorCWFkYwkkMCwgdzMKKwlhZGQJdzIsICVyZHgKKwlhZGMJJDAsICVyYXgKKwlhZGQJdzMsICVyZHgKKwltb3YJJXJkeCwgMTYocnApCisJYWRjCSQwLCAlcmF4CisJbW92CSVyYXgsIDI0KHJwKQorCisJYWRkbAkkLTIsIHZuCisJbGVhCTE2KHZwKSwgdnAKKwlsZWEJLTE2KHVwLHVuLDgpLCB1cAorCWxlYQkzMihycCx1biw4KSwgcnAKKwlqbnoJTChvdXRlcikKKworCXBvcAklcmF4CQlDIGRlYWxsb2NhdGUgdm4gc2xvdAorCXBvcAklcjE1CitMKHJldDUpOnBvcAklcjE0CitMKHJldDQpOnBvcAklcjEzCitMKHJldDMpOnBvcAklcjEyCitMKHJldDIpOnBvcAklcmJwCisJcG9wCSVyYngKKwlGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlod2wvbXVsbG9fYmFzZWNhc2UuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlod2wvbXVsbG9fYmFzZWNhc2UuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NTU1OWIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaWh3bC9tdWxsb19iYXNlY2FzZS5hc20KQEAgLTAsMCArMSw0MjIgQEAKK2RubCAgQU1ENjQgbXBuX211bGxvX2Jhc2VjYXNlIG9wdGltaXNlZCBmb3IgSW50ZWwgSGFzd2VsbC4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDA4LCAyMDA5LCAyMDExLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBjeWNsZXMvbGltYgltdWxfMgkJYWRkbXVsXzIKK0MgQU1EIEs4LEs5CW4vYQkJbi9hCitDIEFNRCBLMTAJbi9hCQluL2EKK0MgQU1EIGJ1bGwJbi9hCQluL2EKK0MgQU1EIHBpbGUJbi9hCQluL2EKK0MgQU1EIHN0ZWFtCSA/CQkgPworQyBBTUQgYm9iY2F0CW4vYQkJbi9hCitDIEFNRCBqYWd1YXIJID8JCSA/CitDIEludGVsIFA0CW4vYQkJbi9hCitDIEludGVsIGNvcmUJbi9hCQluL2EKK0MgSW50ZWwgTkhNCW4vYQkJbi9hCitDIEludGVsIFNCUgluL2EJCW4vYQorQyBJbnRlbCBJQlIJbi9hCQluL2EKK0MgSW50ZWwgSFdMCSAxLjg2CQkgMi4xNQorQyBJbnRlbCBCV0wJID8JCSA/CitDIEludGVsIGF0b20Jbi9hCQluL2EKK0MgVklBIG5hbm8Jbi9hCQluL2EKKworQyBUaGUgaW5uZXIgbG9vcHMgb2YgdGhpcyBjb2RlIGFyZSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgYSBjb2RlIGdlbmVyYXRpb24gYW5kCitDIG9wdGltaXNhdGlvbiB0b29sIHN1aXRlIHdyaXR0ZW4gYnkgRGF2aWQgSGFydmV5IGFuZCBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK0MgVE9ETworQyAgICogSW1wbGVtZW50IHByb3BlciBjb3IyLCByZXBsYWNpbmcgY3VycmVudCBjb3IwLgorQyAgICogTWljcm8tb3B0aW1pc2UuCisKK2RlZmluZShgcnAnLCAgICAgICBgJXJkaScpCitkZWZpbmUoYHVwJywgICAgICAgYCVyc2knKQorZGVmaW5lKGB2cF9wYXJhbScsIGAlcmR4JykKK2RlZmluZShgbicsICAgICAgICBgJXJjeCcpCisKK2RlZmluZShgdnAnLCAgICAgICBgJXI4JykKK2RlZmluZShgWDAnLCAgICAgICBgJXIxNCcpCitkZWZpbmUoYFgxJywgICAgICAgYCVyMTUnKQorCitkZWZpbmUoYHcwJywgICAgICAgYCVyMTAnKQorZGVmaW5lKGB3MScsICAgICAgIGAlcjExJykKK2RlZmluZShgdzInLCAgICAgICBgJXIxMicpCitkZWZpbmUoYHczJywgICAgICAgYCVyMTMnKQorZGVmaW5lKGBpJywgICAgICAgIGAlcmJwJykKK2RlZmluZShgdjAnLCAgICAgICBgJXI5JykKK2RlZmluZShgdjEnLCAgICAgICBgJXJieCcpCisKK0MgcmF4IHJieCByY3ggcmR4IHJkaSByc2kgcmJwIHI4IHI5IHIxMCByMTEgcjEyIHIxMyByMTQgcjE1CisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDMyKQorUFJPTE9HVUUobXBuX211bGxvX2Jhc2VjYXNlKQorCUZVTkNfRU5UUlkoNCkKKworCW1vdgl2cF9wYXJhbSwgdnAKKwltb3YJKHVwKSwgJXJkeAorCisJY21wCSQ0LCBuCisJamIJTChzbWFsbCkKKworCXB1c2gJJXJieAorCXB1c2gJJXJicAorCXB1c2gJJXIxMgorCXB1c2gJJXIxMworCisJbW92CSh2cCksIHYwCisJbW92CTgodnApLCB2MQorCisJbGVhCTIobiksIGkKKwlzaHIJJDIsIGkKKwluZWcJbgorCWFkZAkkMiwgbgorCisJcHVzaAl1cAkJCUMgcHV0IGVudHJ5IGB1cCcgb24gc3RhY2sKKworCXRlc3QJJDEsIFI4KG4pCisJam56CUwobTJ4MSkKKworTChtMngwKTptdWx4KAl2MCwgdzAsIHczKQorCXhvcglSMzIodzIpLCBSMzIodzIpCisJdGVzdAkkMiwgUjgobikKKwlqeglMKG0yYjIpCisKK0wobTJiMCk6bGVhCS04KHJwKSwgcnAKKwlsZWEJLTgodXApLCB1cAorCWptcAlMKG0yZTApCisKK0wobTJiMik6bGVhCS0yNChycCksIHJwCisJbGVhCTgodXApLCB1cAorCWptcAlMKG0yZTIpCisKK0wobTJ4MSk6bXVseCgJdjAsIHcyLCB3MSkKKwl4b3IJUjMyKHcwKSwgUjMyKHcwKQorCXRlc3QJJDIsIFI4KG4pCisJam56CUwobTJiMykKKworTChtMmIxKTpqbXAJTChtMmUxKQorCitMKG0yYjMpOmxlYQktMTYocnApLCBycAorCWxlYQktMTYodXApLCB1cAorCWptcAlMKG0yZTMpCisKKwlBTElHTigxNikKK0wobTJ0cCk6bXVseCgJdjEsICVyYXgsIHcwKQorCWFkZAklcmF4LCB3MgorCW1vdgkodXApLCAlcmR4CisJbXVseCgJdjAsICVyYXgsIHcxKQorCWFkYwkkMCwgdzAKKwlhZGQJJXJheCwgdzIKKwlhZGMJJDAsIHcxCisJYWRkCXczLCB3MgorTChtMmUxKTptb3YJdzIsIChycCkKKwlhZGMJJDAsIHcxCisJbXVseCgJdjEsICVyYXgsIHcyKQorCWFkZAklcmF4LCB3MAorCW1vdgk4KHVwKSwgJXJkeAorCWFkYwkkMCwgdzIKKwltdWx4KAl2MCwgJXJheCwgdzMpCisJYWRkCSVyYXgsIHcwCisJYWRjCSQwLCB3MworCWFkZAl3MSwgdzAKK0wobTJlMCk6bW92CXcwLCA4KHJwKQorCWFkYwkkMCwgdzMKKwltdWx4KAl2MSwgJXJheCwgdzApCisJYWRkCSVyYXgsIHcyCisJbW92CTE2KHVwKSwgJXJkeAorCW11bHgoCXYwLCAlcmF4LCB3MSkKKwlhZGMJJDAsIHcwCisJYWRkCSVyYXgsIHcyCisJYWRjCSQwLCB3MQorCWFkZAl3MywgdzIKK0wobTJlMyk6bW92CXcyLCAxNihycCkKKwlhZGMJJDAsIHcxCisJbXVseCgJdjEsICVyYXgsIHcyKQorCWFkZAklcmF4LCB3MAorCW1vdgkyNCh1cCksICVyZHgKKwlhZGMJJDAsIHcyCisJbXVseCgJdjAsICVyYXgsIHczKQorCWFkZAklcmF4LCB3MAorCWFkYwkkMCwgdzMKKwlhZGQJdzEsIHcwCisJbGVhCTMyKHVwKSwgdXAKK0wobTJlMik6bW92CXcwLCAyNChycCkKKwlhZGMJJDAsIHczCisJZGVjCWkKKwlsZWEJMzIocnApLCBycAorCWpueglMKG0ydHApCisKK0wobTJlZCk6bXVseCgJdjEsICVyYXgsIHcwKQorCWFkZAklcmF4LCB3MgorCW1vdgkodXApLCAlcmR4CisJbXVseCgJdjAsICVyYXgsIHcxKQorCWFkZAl3MiwgJXJheAorCWFkZAl3MywgJXJheAorCW1vdgklcmF4LCAocnApCisKKwltb3YJKCVyc3ApLCB1cAkJQyByZXN0b3JlIGB1cCcgdG8gYmVnaW5uaW5nCisJbGVhCTE2KHZwKSwgdnAKKwlsZWEJOChycCxuLDgpLCBycAkJQyBwdXQgYmFjayBycCB0byBvbGQgcnAgKyAyCisJYWRkCSQyLCBuCisJamdlCUwoY29yMSkKKworCXB1c2gJJXIxNAorCXB1c2gJJXIxNQorCitMKG91dGVyKToKKwltb3YJKHZwKSwgdjAKKwltb3YJOCh2cCksIHYxCisKKwlsZWEJKG4pLCBpCisJc2FyCSQyLCBpCisKKwltb3YJKHVwKSwgJXJkeAorCXRlc3QJJDEsIFI4KG4pCisJam56CUwoYngxKQorCitMKGJ4MCk6CW1vdgkocnApLCBYMQorCW1vdgk4KHJwKSwgWDAKKwltdWx4KAl2MCwgJXJheCwgdzMpCisJYWRkCSVyYXgsIFgxCisJYWRjCSQwLCB3MworCW11bHgoCXYxLCAlcmF4LCB3MCkKKwlhZGQJJXJheCwgWDAKKwlhZGMJJDAsIHcwCisJbW92CTgodXApLCAlcmR4CisJbW92CVgxLCAocnApCisJbXVseCgJdjAsICVyYXgsIHcxKQorCXRlc3QJJDIsIFI4KG4pCisJanoJTChiMikKKworTChiMCk6CWxlYQk4KHJwKSwgcnAKKwlsZWEJOCh1cCksIHVwCisJam1wCUwobG8wKQorCitMKGIyKToJbW92CTE2KHJwKSwgWDEKKwlsZWEJMjQocnApLCBycAorCWxlYQkyNCh1cCksIHVwCisJam1wCUwobG8yKQorCitMKGJ4MSk6CW1vdgkocnApLCBYMAorCW1vdgk4KHJwKSwgWDEKKwltdWx4KAl2MCwgJXJheCwgdzEpCisJYWRkCSVyYXgsIFgwCisJbXVseCgJdjEsICVyYXgsIHcyKQorCWFkYwkkMCwgdzEKKwltb3YJWDAsIChycCkKKwlhZGQJJXJheCwgWDEKKwlhZGMJJDAsIHcyCisJbW92CTgodXApLCAlcmR4CisJdGVzdAkkMiwgUjgobikKKwlqbnoJTChiMykKKworTChiMSk6CWxlYQkxNih1cCksIHVwCisJbGVhCTE2KHJwKSwgcnAKKwlqbXAJTChsbzEpCisKK0woYjMpOgltb3YJMTYocnApLCBYMAorCWxlYQkzMih1cCksIHVwCisJbXVseCgJdjAsICVyYXgsIHczKQorCWluYwlpCisJanoJTChjajMpCisJam1wCUwobG8zKQorCisJQUxJR04oMTYpCitMKHRvcCk6CW11bHgoCXYwLCAlcmF4LCB3MykKKwlhZGQJdzAsIFgxCisJYWRjCSQwLCB3MgorTChsbzMpOglhZGQJJXJheCwgWDEKKwlhZGMJJDAsIHczCisJbXVseCgJdjEsICVyYXgsIHcwKQorCWFkZAklcmF4LCBYMAorCWFkYwkkMCwgdzAKKwlsZWEJMzIocnApLCBycAorCWFkZAl3MSwgWDEKKwltb3YJLTE2KHVwKSwgJXJkeAorCW1vdglYMSwgLTI0KHJwKQorCWFkYwkkMCwgdzMKKwlhZGQJdzIsIFgwCisJbW92CS04KHJwKSwgWDEKKwltdWx4KAl2MCwgJXJheCwgdzEpCisJYWRjCSQwLCB3MAorTChsbzIpOglhZGQJJXJheCwgWDAKKwltdWx4KAl2MSwgJXJheCwgdzIpCisJYWRjCSQwLCB3MQorCWFkZAl3MywgWDAKKwltb3YJWDAsIC0xNihycCkKKwlhZGMJJDAsIHcxCisJYWRkCSVyYXgsIFgxCisJYWRjCSQwLCB3MgorCWFkZAl3MCwgWDEKKwltb3YJLTgodXApLCAlcmR4CisJYWRjCSQwLCB3MgorTChsbzEpOgltdWx4KAl2MCwgJXJheCwgdzMpCisJYWRkCSVyYXgsIFgxCisJYWRjCSQwLCB3MworCW1vdgkocnApLCBYMAorCW11bHgoCXYxLCAlcmF4LCB3MCkKKwlhZGQJJXJheCwgWDAKKwlhZGMJJDAsIHcwCisJYWRkCXcxLCBYMQorCW1vdglYMSwgLTgocnApCisJYWRjCSQwLCB3MworCW1vdgkodXApLCAlcmR4CisJYWRkCXcyLCBYMAorCW11bHgoCXYwLCAlcmF4LCB3MSkKKwlhZGMJJDAsIHcwCitMKGxvMCk6CWFkZAklcmF4LCBYMAorCWFkYwkkMCwgdzEKKwltdWx4KAl2MSwgJXJheCwgdzIpCisJYWRkCXczLCBYMAorCW1vdgk4KHJwKSwgWDEKKwltb3YJWDAsIChycCkKKwltb3YJMTYocnApLCBYMAorCWFkYwkkMCwgdzEKKwlhZGQJJXJheCwgWDEKKwlhZGMJJDAsIHcyCisJbW92CTgodXApLCAlcmR4CisJbGVhCTMyKHVwKSwgdXAKKwlpbmMJaQorCWpueglMKHRvcCkKKworTChlbmQpOgltdWx4KAl2MCwgJXJheCwgdzMpCisJYWRkCXcwLCBYMQorCWFkYwkkMCwgdzIKK0woY2ozKToJYWRkCSVyYXgsIFgxCisJYWRjCSQwLCB3MworCW11bHgoCXYxLCAlcmF4LCB3MCkKKwlhZGQJJXJheCwgWDAKKwlhZGQJdzEsIFgxCisJbW92CS0xNih1cCksICVyZHgKKwltb3YJWDEsIDgocnApCisJYWRjCSQwLCB3MworCWFkZAl3MiwgWDAKKwltdWx4KAl2MCwgJXJheCwgdzEpCisJYWRkCVgwLCAlcmF4CisJYWRkCXczLCAlcmF4CisJbW92CSVyYXgsIDE2KHJwKQorCisJbW92CTE2KCVyc3ApLCB1cAkJQyByZXN0b3JlIGB1cCcgdG8gYmVnaW5uaW5nCisJbGVhCTE2KHZwKSwgdnAKKwlsZWEJMjQocnAsbiw4KSwgcnAJCUMgcHV0IGJhY2sgcnAgdG8gb2xkIHJwICsgMgorCWFkZAkkMiwgbgorCWpsCUwob3V0ZXIpCisKKwlwb3AJJXIxNQorCXBvcAklcjE0CisKKwlqbnoJTChjb3IwKQorCitMKGNvcjEpOm1vdgkodnApLCB2MAorCW1vdgk4KHZwKSwgdjEKKwltb3YJKHVwKSwgJXJkeAorCW11bHgoCXYwLCAlcjEyLCAlcmJwKQkJQyB1MCB4IHYyCisJYWRkCShycCksICVyMTIJCUMgRklYTUU6IHJwWzBdIHN0aWxsIGF2YWlsYWJsZSBpbiByZWc/CisJYWRjCSVyYXgsICVyYnAKKwltb3YJOCh1cCksICVyMTAKKwlpbXVsCXYwLCAlcjEwCisJaW11bAl2MSwgJXJkeAorCW1vdgklcjEyLCAocnApCisJYWRkCSVyMTAsICVyZHgKKwlhZGQJJXJicCwgJXJkeAorCW1vdgklcmR4LCA4KHJwKQorCXBvcAklcmF4CQkJQyBkZWFsbG9jYXRlIGB1cCcgY29weQorCXBvcAklcjEzCisJcG9wCSVyMTIKKwlwb3AJJXJicAorCXBvcAklcmJ4CisJRlVOQ19FWElUKCkKKwlyZXQKKworTChjb3IwKTptb3YJKHZwKSwgJXIxMQorCWltdWwJKHVwKSwgJXIxMQorCWFkZAklcmF4LCAlcjExCisJbW92CSVyMTEsIChycCkKKwlwb3AJJXJheAkJCUMgZGVhbGxvY2F0ZSBgdXAnIGNvcHkKKwlwb3AJJXIxMworCXBvcAklcjEyCisJcG9wCSVyYnAKKwlwb3AJJXJieAorCUZVTkNfRVhJVCgpCisJcmV0CisKKwlBTElHTigxNikKK0woc21hbGwpOgorCWNtcAkkMiwgbgorCWphZQlMKGd0MSkKK0wobjEpOglpbXVsCSh2cCksICVyZHgKKwltb3YJJXJkeCwgKHJwKQorCUZVTkNfRVhJVCgpCisJcmV0CitMKGd0MSk6CWphCUwoZ3QyKQorTChuMik6CW1vdgkodnApLCAlcjkKKwltdWx4KAklcjksICVyYXgsICVyZHgpCisJbW92CSVyYXgsIChycCkKKwltb3YJOCh1cCksICVyYXgKKwlpbXVsCSVyOSwgJXJheAorCWFkZAklcmF4LCAlcmR4CisJbW92CTgodnApLCAlcjkKKwltb3YJKHVwKSwgJXJjeAorCWltdWwJJXI5LCAlcmN4CisJYWRkCSVyY3gsICVyZHgKKwltb3YJJXJkeCwgOChycCkKKwlGVU5DX0VYSVQoKQorCXJldAorTChndDIpOgorTChuMyk6CW1vdgkodnApLCAlcjkKKwltdWx4KAklcjksICVyYXgsICVyMTApCUMgdTAgeCB2MAorCW1vdgklcmF4LCAocnApCisJbW92CTgodXApLCAlcmR4CisJbXVseCgJJXI5LCAlcmF4LCAlcmR4KQlDIHUxIHggdjAKKwlpbXVsCTE2KHVwKSwgJXI5CQlDIHUyIHggdjAKKwlhZGQJJXJheCwgJXIxMAorCWFkYwklcmR4LCAlcjkKKwltb3YJOCh2cCksICVyMTEKKwltb3YJKHVwKSwgJXJkeAorCW11bHgoCSVyMTEsICVyYXgsICVyZHgpCUMgdTAgeCB2MQorCWFkZAklcmF4LCAlcjEwCisJYWRjCSVyZHgsICVyOQorCWltdWwJOCh1cCksICVyMTEJCUMgdTEgeCB2MQorCWFkZAklcjExLCAlcjkKKwltb3YJJXIxMCwgOChycCkKKwltb3YJMTYodnApLCAlcjEwCisJbW92CSh1cCksICVyYXgKKwlpbXVsCSVyYXgsICVyMTAJCUMgdTAgeCB2MgorCWFkZAklcjEwLCAlcjkKKwltb3YJJXI5LCAxNihycCkKKwlGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlod2wvcmVkY18xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpaHdsL3JlZGNfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFkNmMwYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpaHdsL3JlZGNfMS5hc20KQEAgLTAsMCArMSw0MzcgQEAKK2RubCAgQU1ENjQgbXBuX3JlZGNfMSBvcHRpbWlzZWQgZm9yIEludGVsIEhhc3dlbGwuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqw7ZybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIKK0MgQU1EIEs4LEs5CW4vYQorQyBBTUQgSzEwCW4vYQorQyBBTUQgYnVsbAluL2EKK0MgQU1EIHBpbGUJbi9hCitDIEFNRCBzdGVhbQkgPworQyBBTUQgYm9iY2F0CW4vYQorQyBBTUQgamFndWFyCSA/CitDIEludGVsIFA0CW4vYQorQyBJbnRlbCBjb3JlCW4vYQorQyBJbnRlbCBOSE0Jbi9hCitDIEludGVsIFNCUgluL2EKK0MgSW50ZWwgSUJSCW4vYQorQyBJbnRlbCBIV0wJIDIuMzIKK0MgSW50ZWwgQldMCSA/CitDIEludGVsIGF0b20Jbi9hCitDIFZJQSBuYW5vCW4vYQorCitDIFRoZSBpbm5lciBsb29wcyBvZiB0aGlzIGNvZGUgYXJlIHRoZSByZXN1bHQgb2YgcnVubmluZyBhIGNvZGUgZ2VuZXJhdGlvbiBhbmQKK0Mgb3B0aW1pc2F0aW9uIHRvb2wgc3VpdGUgd3JpdHRlbiBieSBEYXZpZCBIYXJ2ZXkgYW5kIFRvcmJqw7ZybiBHcmFubHVuZC4KKworQyBUT0RPCitDICAqIE1pY3JvLW9wdGltaXNlLgorQyAgKiBDb25zaWRlciBpbmxpbmluZyBtcG5fYWRkX24uICBUZXN0cyBpbmRpY2F0ZSB0aGF0IHRoaXMgc2F2ZXMganVzdCAxLTIKK0MgICAgY3ljbGVzLCB0aG91Z2guCisKK2RlZmluZShgcnAnLCAgICAgICAgICBgJXJkaScpICAgQyByY3gKK2RlZmluZShgdXAnLCAgICAgICAgICBgJXJzaScpICAgQyByZHgKK2RlZmluZShgbXBfcGFyYW0nLCAgICBgJXJkeCcpICAgQyByOAorZGVmaW5lKGBuJywgICAgICAgICAgIGAlcmN4JykgICBDIHI5CitkZWZpbmUoYHUwaW52X3BhcmFtJywgYCVyOCcpICAgIEMgc3RhY2sKKworZGVmaW5lKGBpJywgICAgICAgICAgIGAlcjE0JykKK2RlZmluZShgaicsICAgICAgICAgICBgJXIxNScpCitkZWZpbmUoYG1wJywgICAgICAgICAgYCVyZGknKQorZGVmaW5lKGB1MGludicsICAgICAgIGAoJXJzcCknKSAgQyBzdGFjaworCitBQklfU1VQUE9SVChET1M2NCkgICAgQyBGSVhNRTogbmVlZHMgdmVyaWZpY2F0aW9uCitBQklfU1VQUE9SVChTVEQ2NCkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMTYpCitQUk9MT0dVRShtcG5fcmVkY18xKQorCUZVTkNfRU5UUlkoNCkKK0lGRE9TKGAJbW92CTU2KCVyc3ApLCAlcjgJJykKKwlwdXNoCSVyYngKKwlwdXNoCSVyYnAKKwlwdXNoCSVyMTIKKwlwdXNoCSVyMTMKKwlwdXNoCSVyMTQKKwlwdXNoCSVyMTUKKwlwdXNoCXJwCisJbW92CW1wX3BhcmFtLCBtcAkJQyBub3RlIHRoYXQgcnAgYW5kIG1wIHNoYXJlcyByZWdpc3RlcgorCW1vdgkodXApLCAlcmR4CisKKwluZWcJbgorCXB1c2gJJXI4CQkJQyBwdXQgdTBpbnYgb24gc3RhY2sKKwlpbXVsCXUwaW52X3BhcmFtLCAlcmR4CUMgZmlyc3QgaXRlcmF0aW9uIHEwCisJbW92CW4sIGoJCQlDIG91dGVyIGxvb3AgaW5kdWN0aW9uIHZhcgorCisJdGVzdAkkMSwgUjgobikKKwlqbnoJTChieDEpCisKK0woYngwKToJdGVzdAkkMiwgUjgobikKKwlqeglMKG8wYikKKworCWNtcAkkLTIsIFIzMihuKQorCWpueglMKG8yKQorCitDIFNwZWNpYWwgY29kZSBmb3IgbiA9IDIgc2luY2UgZ2VuZXJhbCBjb2RlIGNhbm5vdCBoYW5kbGUgaXQKKwltb3YJOCglcnNwKSwgJXJieAkJQyBycAorCWxlYQkxNiglcnNwKSwgJXJzcAkJQyBkZWFsbG9jYXRlIHR3byBzbG90cworCW11bHgoCShtcCksICVyOSwgJXIxMikKKwltdWx4KAk4LChtcCksICVyMTEsICVyMTApCisJYWRkCSVyMTIsICVyMTEKKwlhZGMJJDAsICVyMTAKKwlhZGQJKHVwKSwgJXI5CQlDID0gMAorCWFkYwk4KHVwKSwgJXIxMQkJQyByMTEgPSB1cFsxXQorCWFkYwkkMCwgJXIxMAkJQyAtPiB1cFswXQorCW1vdgklcjExLCAlcmR4CisJaW11bAl1MGludl9wYXJhbSwgJXJkeAorCW11bHgoCShtcCksICVyMTMsICVyMTIpCisJbXVseCgJOCwobXApLCAlcjE0LCAlcjE1KQorCXhvcglSMzIoJXJheCksIFIzMiglcmF4KQorCWFkZAklcjEyLCAlcjE0CisJYWRjCSQwLCAlcjE1CisJYWRkCSVyMTEsICVyMTMJCUMgPSAwCisJYWRjCTE2KHVwKSwgJXIxNAkJQyBycFsyXQorCWFkYwkkMCwgJXIxNQkJQyAtPiB1cFsxXQorCWFkZAklcjE0LCAlcjEwCisJYWRjCTI0KHVwKSwgJXIxNQorCW1vdgklcjEwLCAoJXJieCkKKwltb3YJJXIxNSwgOCglcmJ4KQorCXNldGMJUjgoJXJheCkKKwlqbXAJTChyZXQpCisKK0wobzIpOglsZWEJMihuKSwgaQkJCUMgaW5uZXIgbG9vcCBpbmR1Y3Rpb24gdmFyCisJbXVseCgJKG1wKSwgJXI5LCAlcjgpCisJbXVseCgJOCwobXApLCAlcjExLCAlcjEwKQorCXNhcgkkMiwgaQorCWFkZAklcjgsICVyMTEKKwlqbXAJTChsbzIpCisKKwlBTElHTigxNikKK0wodHAyKToJYWRjCSVyYXgsICVyOQorCWxlYQkzMih1cCksIHVwCisJYWRjCSVyOCwgJXIxMQorTChsbzIpOgltdWx4KAkxNiwobXApLCAlcjEzLCAlcjEyKQorCW1vdgkodXApLCAlcjgKKwltdWx4KAkyNCwobXApLCAlcmJ4LCAlcmF4KQorCWxlYQkzMihtcCksIG1wCisJYWRjCSVyMTAsICVyMTMKKwlhZGMJJXIxMiwgJXJieAorCWFkYwkkMCwgJXJheAorCW1vdgk4KHVwKSwgJXIxMAorCW1vdgkxNih1cCksICVyMTIKKwlhZGQJJXI5LCAlcjgKKwltb3YJMjQodXApLCAlcmJwCisJbW92CSVyOCwgKHVwKQorCWFkYwklcjExLCAlcjEwCisJbXVseCgJKG1wKSwgJXI5LCAlcjgpCisJbW92CSVyMTAsIDgodXApCisJYWRjCSVyMTMsICVyMTIKKwltb3YJJXIxMiwgMTYodXApCisJYWRjCSVyYngsICVyYnAKKwltdWx4KAk4LChtcCksICVyMTEsICVyMTApCisJbW92CSVyYnAsIDI0KHVwKQorCWluYwlpCisJam56CUwodHAyKQorCitMKGVkMik6CW1vdgk1Nih1cCxuLDgpLCAlcmR4CUMgbmV4dCBpdGVyYXRpb24gdXBbMF0KKwlsZWEJMTYobXAsbiw4KSwgbXAJCUMgbXAgPSAobGFzdCBzdGFydGluZyBtcCkKKwlhZGMJJXJheCwgJXI5CisJYWRjCSVyOCwgJXIxMQorCW1vdgkzMih1cCksICVyOAorCWFkYwkkMCwgJXIxMAorCWltdWwJdTBpbnYsICVyZHgJCUMgbmV4dCBpdGVyYXRpb24gcTAKKwltb3YJNDAodXApLCAlcmF4CisJYWRkCSVyOSwgJXI4CisJbW92CSVyOCwgMzIodXApCisJYWRjCSVyMTEsICVyYXgKKwltb3YJJXJheCwgNDAodXApCisJbGVhCTU2KHVwLG4sOCksIHVwCQlDIHVwID0gKGxhc3Qgc3RhcnRpbmcgdXApICsgMQorCWFkYwkkMCwgJXIxMAorCW1vdgklcjEwLCAtOCh1cCkKKwlpbmMJagorCWpueglMKG8yKQorCisJam1wCUwoY2opCisKKworTChieDEpOgl0ZXN0CSQyLCBSOChuKQorCWp6CUwobzNhKQorCitMKG8xYSk6CWNtcAkkLTEsIFIzMihuKQorCWpueglMKG8xYikKKworQyBTcGVjaWFsIGNvZGUgZm9yIG4gPSAxIHNpbmNlIGdlbmVyYWwgY29kZSBjYW5ub3QgaGFuZGxlIGl0CisJbW92CTgoJXJzcCksICVyYngJCUMgcnAKKwlsZWEJMTYoJXJzcCksICVyc3AJCUMgZGVhbGxvY2F0ZSB0d28gc2xvdHMKKwltdWx4KAkobXApLCAlcjExLCAlcjEwKQorCWFkZAkodXApLCAlcjExCisJYWRjCTgodXApLCAlcjEwCisJbW92CSVyMTAsICglcmJ4KQorCW1vdgkkMCwgUjMyKCVyYXgpCisJc2V0YwlSOCglcmF4KQorCWptcAlMKHJldCkKKworTChvMWIpOglsZWEJMjQobXApLCBtcAorTChvMSk6CWxlYQkxKG4pLCBpCQkJQyBpbm5lciBsb29wIGluZHVjdGlvbiB2YXIKKwltdWx4KAktMjQsKG1wKSwgJXIxMSwgJXIxMCkKKwltdWx4KAktMTYsKG1wKSwgJXIxMywgJXIxMikKKwltdWx4KAktOCwobXApLCAlcmJ4LCAlcmF4KQorCXNhcgkkMiwgaQorCWFkZAklcjEwLCAlcjEzCisJYWRjCSVyMTIsICVyYngKKwlhZGMJJDAsICVyYXgKKwltb3YJKHVwKSwgJXIxMAorCW1vdgk4KHVwKSwgJXIxMgorCW1vdgkxNih1cCksICVyYnAKKwlhZGQJJXIxMSwgJXIxMAorCWptcAlMKGxvMSkKKworCUFMSUdOKDE2KQorTCh0cDEpOglhZGMJJXJheCwgJXI5CisJbGVhCTMyKHVwKSwgdXAKKwlhZGMJJXI4LCAlcjExCisJbXVseCgJMTYsKG1wKSwgJXIxMywgJXIxMikKKwltb3YJLTgodXApLCAlcjgKKwltdWx4KAkyNCwobXApLCAlcmJ4LCAlcmF4KQorCWxlYQkzMihtcCksIG1wCisJYWRjCSVyMTAsICVyMTMKKwlhZGMJJXIxMiwgJXJieAorCWFkYwkkMCwgJXJheAorCW1vdgkodXApLCAlcjEwCisJbW92CTgodXApLCAlcjEyCisJYWRkCSVyOSwgJXI4CisJbW92CTE2KHVwKSwgJXJicAorCW1vdgklcjgsIC04KHVwKQorCWFkYwklcjExLCAlcjEwCitMKGxvMSk6CW11bHgoCShtcCksICVyOSwgJXI4KQorCW1vdgklcjEwLCAodXApCisJYWRjCSVyMTMsICVyMTIKKwltb3YJJXIxMiwgOCh1cCkKKwlhZGMJJXJieCwgJXJicAorCW11bHgoCTgsKG1wKSwgJXIxMSwgJXIxMCkKKwltb3YJJXJicCwgMTYodXApCisJaW5jCWkKKwlqbnoJTCh0cDEpCisKK0woZWQxKToJbW92CTQ4KHVwLG4sOCksICVyZHgJQyBuZXh0IGl0ZXJhdGlvbiB1cFswXQorCWxlYQk0MChtcCxuLDgpLCBtcAkJQyBtcCA9IChsYXN0IHN0YXJ0aW5nIG1wKQorCWFkYwklcmF4LCAlcjkKKwlhZGMJJXI4LCAlcjExCisJbW92CTI0KHVwKSwgJXI4CisJYWRjCSQwLCAlcjEwCisJaW11bAl1MGludiwgJXJkeAkJQyBuZXh0IGl0ZXJhdGlvbiBxMAorCW1vdgkzMih1cCksICVyYXgKKwlhZGQJJXI5LCAlcjgKKwltb3YJJXI4LCAyNCh1cCkKKwlhZGMJJXIxMSwgJXJheAorCW1vdgklcmF4LCAzMih1cCkKKwlsZWEJNDgodXAsbiw4KSwgdXAJCUMgdXAgPSAobGFzdCBzdGFydGluZyB1cCkgKyAxCisJYWRjCSQwLCAlcjEwCisJbW92CSVyMTAsIC04KHVwKQorCWluYwlqCisJam56CUwobzEpCisKKwlqbXAJTChjaikKKworTChvM2EpOgljbXAJJC0zLCBSMzIobikKKwlqbnoJTChvM2IpCisKK0MgU3BlY2lhbCBjb2RlIGZvciBuID0gMyBzaW5jZSBnZW5lcmFsIGNvZGUgY2Fubm90IGhhbmRsZSBpdAorTChuMyk6CW11bHgoCShtcCksICVyYngsICVyYXgpCisJbXVseCgJOCwobXApLCAlcjksICVyMTQpCisJYWRkCSh1cCksICVyYngKKwltdWx4KAkxNiwobXApLCAlcjExLCAlcjEwKQorCWFkYwklcmF4LCAlcjkJCUMgVyAxCisJYWRjCSVyMTQsICVyMTEJCUMgVyAyCisJbW92CTgodXApLCAlcjE0CisJbW92CXUwaW52X3BhcmFtLCAlcmR4CisJYWRjCSQwLCAlcjEwCQlDIFcgMworCW1vdgkxNih1cCksICVyYXgKKwlhZGQJJXI5LCAlcjE0CQlDIFcgMQorCW1vdgklcjE0LCA4KHVwKQorCW11bHgoCSVyMTQsICVyZHgsICVyMTMpCUMgbmV4dCBpdGVyYXRpb24gcTAKKwlhZGMJJXIxMSwgJXJheAkJQyBXIDIKKwltb3YJJXJheCwgMTYodXApCisJYWRjCSQwLCAlcjEwCQlDIFcgMworCW1vdgklcjEwLCAodXApCisJbGVhCTgodXApLCB1cAkJQyB1cCA9IChsYXN0IHN0YXJ0aW5nIHVwKSArIDEKKwlpbmMJagorCWpueglMKG4zKQorCisJam1wCUwoY2opCisKK0wobzNiKToJbGVhCTgobXApLCBtcAorTChvMyk6CWxlYQk0KG4pLCBpCQkJQyBpbm5lciBsb29wIGluZHVjdGlvbiB2YXIKKwltdWx4KAktOCwobXApLCAlcmJ4LCAlcmF4KQorCW11bHgoCShtcCksICVyOSwgJXI4KQorCW1vdgkodXApLCAlcmJwCisJbXVseCgJOCwobXApLCAlcjExLCAlcjEwKQorCXNhcgkkMiwgaQorCWFkZAklcmJ4LCAlcmJwCisJbm9wCisJYWRjCSVyYXgsICVyOQorCWptcAlMKGxvMykKKworCUFMSUdOKDE2KQorTCh0cDMpOglhZGMJJXJheCwgJXI5CisJbGVhCTMyKHVwKSwgdXAKK0wobG8zKToJYWRjCSVyOCwgJXIxMQorCW11bHgoCTE2LChtcCksICVyMTMsICVyMTIpCisJbW92CTgodXApLCAlcjgKKwltdWx4KAkyNCwobXApLCAlcmJ4LCAlcmF4KQorCWxlYQkzMihtcCksIG1wCisJYWRjCSVyMTAsICVyMTMKKwlhZGMJJXIxMiwgJXJieAorCWFkYwkkMCwgJXJheAorCW1vdgkxNih1cCksICVyMTAKKwltb3YJMjQodXApLCAlcjEyCisJYWRkCSVyOSwgJXI4CisJbW92CTMyKHVwKSwgJXJicAorCW1vdgklcjgsIDgodXApCisJYWRjCSVyMTEsICVyMTAKKwltdWx4KAkobXApLCAlcjksICVyOCkKKwltb3YJJXIxMCwgMTYodXApCisJYWRjCSVyMTMsICVyMTIKKwltb3YJJXIxMiwgMjQodXApCisJYWRjCSVyYngsICVyYnAKKwltdWx4KAk4LChtcCksICVyMTEsICVyMTApCisJbW92CSVyYnAsIDMyKHVwKQorCWluYwlpCisJam56CUwodHAzKQorCitMKGVkMyk6CW1vdgk2NCh1cCxuLDgpLCAlcmR4CUMgbmV4dCBpdGVyYXRpb24gdXBbMF0KKwlsZWEJMjQobXAsbiw4KSwgbXAJCUMgbXAgPSAobGFzdCBzdGFydGluZyBtcCkKKwlhZGMJJXJheCwgJXI5CisJYWRjCSVyOCwgJXIxMQorCW1vdgk0MCh1cCksICVyOAorCWFkYwkkMCwgJXIxMAorCWltdWwJdTBpbnYsICVyZHgJCUMgbmV4dCBpdGVyYXRpb24gcTAKKwltb3YJNDgodXApLCAlcmF4CisJYWRkCSVyOSwgJXI4CisJbW92CSVyOCwgNDAodXApCisJYWRjCSVyMTEsICVyYXgKKwltb3YJJXJheCwgNDgodXApCisJbGVhCTY0KHVwLG4sOCksIHVwCQlDIHVwID0gKGxhc3Qgc3RhcnRpbmcgdXApICsgMQorCWFkYwkkMCwgJXIxMAorCW1vdgklcjEwLCAtOCh1cCkKKwlpbmMJagorCWpueglMKG8zKQorCisJam1wCUwoY2opCisKK0wobzBiKToJbGVhCTE2KG1wKSwgbXAKK0wobzApOgltb3YJbiwgaQkJCUMgaW5uZXIgbG9vcCBpbmR1Y3Rpb24gdmFyCisJbXVseCgJLTE2LChtcCksICVyMTMsICVyMTIpCisJbXVseCgJLTgsKG1wKSwgJXJieCwgJXJheCkKKwlzYXIJJDIsIGkKKwlhZGQJJXIxMiwgJXJieAorCWFkYwkkMCwgJXJheAorCW1vdgkodXApLCAlcjEyCisJbW92CTgodXApLCAlcmJwCisJbXVseCgJKG1wKSwgJXI5LCAlcjgpCisJYWRkCSVyMTMsICVyMTIKKwlqbXAJTChsbzApCisKKwlBTElHTigxNikKK0wodHAwKToJYWRjCSVyYXgsICVyOQorCWxlYQkzMih1cCksIHVwCisJYWRjCSVyOCwgJXIxMQorCW11bHgoCTE2LChtcCksICVyMTMsICVyMTIpCisJbW92CS0xNih1cCksICVyOAorCW11bHgoCTI0LChtcCksICVyYngsICVyYXgpCisJbGVhCTMyKG1wKSwgbXAKKwlhZGMJJXIxMCwgJXIxMworCWFkYwklcjEyLCAlcmJ4CisJYWRjCSQwLCAlcmF4CisJbW92CS04KHVwKSwgJXIxMAorCW1vdgkodXApLCAlcjEyCisJYWRkCSVyOSwgJXI4CisJbW92CTgodXApLCAlcmJwCisJbW92CSVyOCwgLTE2KHVwKQorCWFkYwklcjExLCAlcjEwCisJbXVseCgJKG1wKSwgJXI5LCAlcjgpCisJbW92CSVyMTAsIC04KHVwKQorCWFkYwklcjEzLCAlcjEyCisJbW92CSVyMTIsICh1cCkKK0wobG8wKToJYWRjCSVyYngsICVyYnAKKwltdWx4KAk4LChtcCksICVyMTEsICVyMTApCisJbW92CSVyYnAsIDgodXApCisJaW5jCWkKKwlqbnoJTCh0cDApCisKK0woZWQwKToJbW92CTQwKHVwLG4sOCksICVyZHgJQyBuZXh0IGl0ZXJhdGlvbiB1cFswXQorCWxlYQkzMihtcCxuLDgpLCBtcAkJQyBtcCA9IChsYXN0IHN0YXJ0aW5nIG1wKQorCWFkYwklcmF4LCAlcjkKKwlhZGMJJXI4LCAlcjExCisJbW92CTE2KHVwKSwgJXI4CisJYWRjCSQwLCAlcjEwCisJaW11bAl1MGludiwgJXJkeAkJQyBuZXh0IGl0ZXJhdGlvbiBxMAorCW1vdgkyNCh1cCksICVyYXgKKwlhZGQJJXI5LCAlcjgKKwltb3YJJXI4LCAxNih1cCkKKwlhZGMJJXIxMSwgJXJheAorCW1vdgklcmF4LCAyNCh1cCkKKwlsZWEJNDAodXAsbiw4KSwgdXAJCUMgdXAgPSAobGFzdCBzdGFydGluZyB1cCkgKyAxCisJYWRjCSQwLCAlcjEwCisJbW92CSVyMTAsIC04KHVwKQorCWluYwlqCisJam56CUwobzApCisKK0woY2opOgorSUZTVEQoYAltb3YJOCglcnNwKSwgJXJkaQkJQyBwYXJhbSAxOiBycAorCWxlYQkxNi04KCVyc3ApLCAlcnNwCUMgZGVhbGxvY2F0ZSAyLCBhZGQgYmFjayBmb3IgYWxpZ25tZW50CisJbGVhCSh1cCxuLDgpLCAlcmR4CQlDIHBhcmFtIDM6IHVwIC0gbgorCW5lZwlSMzIobikJCScpCUMgcGFyYW0gNDogbgorCitJRkRPUyhgCW1vdgl1cCwgJXJkeAkJQyBwYXJhbSAyOiB1cAorCWxlYQkodXAsbiw4KSwgJXI4CQlDIHBhcmFtIDM6IHVwIC0gbgorCW5lZwlSMzIobikKKwltb3YJbiwgJXI5CQkJQyBwYXJhbSA0OiBuCisJbW92CTgoJXJzcCksICVyY3gJCUMgcGFyYW0gMTogcnAKKwlsZWEJMTYtMzItOCglcnNwKSwgJXJzcCcpCUMgZGVhbGxvY2F0ZSAyLCBhbGxvY2F0ZSBzaGFkb3csIGFsaWduCisKKwlBU1NFUlQobnosIGB0ZXN0ICQxNSwgJXJzcCcpCisJQ0FMTCgJbXBuX2FkZF9uKQorCitJRlNURChgCWxlYQk4KCVyc3ApLCAlcnNwCScpCitJRkRPUyhgCWxlYQkzMis4KCVyc3ApLCAlcnNwJykKKworTChyZXQpOglwb3AJJXIxNQorCXBvcAklcjE0CisJcG9wCSVyMTMKKwlwb3AJJXIxMgorCXBvcAklcmJwCisJcG9wCSVyYngKKwlGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlod2wvc3FyX2Jhc2VjYXNlLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpaHdsL3Nxcl9iYXNlY2FzZS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQxY2RmMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpaHdsL3Nxcl9iYXNlY2FzZS5hc20KQEAgLTAsMCArMSw1MDYgQEAKK2RubCAgQU1ENjQgbXBuX3Nxcl9iYXNlY2FzZSBvcHRpbWlzZWQgZm9yIEludGVsIEhhc3dlbGwuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqw7ZybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAwOCwgMjAwOSwgMjAxMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgY3ljbGVzL2xpbWIJbXVsXzIJCWFkZG11bF8yCXNxcl9kaWFnX2FkZGxzaDEKK0MgQU1EIEs4LEs5CW4vYQkJbi9hCQkJbi9hCitDIEFNRCBLMTAJbi9hCQluL2EJCQluL2EKK0MgQU1EIGJ1bGwJbi9hCQluL2EJCQluL2EKK0MgQU1EIHBpbGUJbi9hCQluL2EJCQluL2EKK0MgQU1EIHN0ZWFtCSA/CQkgPwkJCSA/CitDIEFNRCBib2JjYXQJbi9hCQluL2EJCQluL2EKK0MgQU1EIGphZ3VhcgkgPwkJID8JCQkgPworQyBJbnRlbCBQNAluL2EJCW4vYQkJCW4vYQorQyBJbnRlbCBjb3JlCW4vYQkJbi9hCQkJbi9hCitDIEludGVsIE5ITQluL2EJCW4vYQkJCW4vYQorQyBJbnRlbCBTQlIJbi9hCQluL2EJCQluL2EKK0MgSW50ZWwgSUJSCW4vYQkJbi9hCQkJbi9hCitDIEludGVsIEhXTAkgMS44NgkJIDIuMTUJCQl+Mi41CitDIEludGVsIEJXTAkgPwkJID8JCQkgPworQyBJbnRlbCBhdG9tCW4vYQkJbi9hCQkJbi9hCitDIFZJQSBuYW5vCW4vYQkJbi9hCQkJbi9hCisKK0MgVGhlIGlubmVyIGxvb3BzIG9mIHRoaXMgY29kZSBhcmUgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGEgY29kZSBnZW5lcmF0aW9uIGFuZAorQyBvcHRpbWlzYXRpb24gdG9vbCBzdWl0ZSB3cml0dGVuIGJ5IERhdmlkIEhhcnZleSBhbmQgVG9yYmrDtnJuIEdyYW5sdW5kLCBleGNlcHQKK0MgdGhhdCB0aGUgc3FyX2RpYWdfYWRkbHNoMSBsb29wIHdhcyBtYW51YWxseSB3cml0dGVuLgorCitDIFRPRE8KK0MgICogUmVwbGFjZSBjdXJyZW50IHVub3B0aW1pc2VkIHNxcl9kaWFnX2FkZGxzaDEgbG9vcDsgMS43NSBjL2wgbWlnaHQgYmUKK0MgICAgcG9zc2libGUuCitDICAqIENvbnNpZGVyIHNwbGl0dGluZyBvdXRlciBsb29wIGludG8gMiwgb25lIGZvciBuID0gMSAobW9kIDIpIGFuZCBvbmUgZm9yCitDICAgIG4gPSAwIChtb2QgMikuICBUaGVzZSBsb29wcyBjb3VsZCBmYWxsIGludG8gc3BlY2lmaWMgImNvcm5lciIgY29kZS4KK0MgICogQ29uc2lkZXIgc3BsaXR0aW5nIG91dGVyIGxvb3AgaW50byA0LgorQyAgKiBTdHJlYW1saW5lIHBvaW50ZXIgdXBkYXRlcy4KK0MgICogUGVyaGFwcyBzdXBwcmVzcyBhIGZldyBtb3JlIHhvciBpbnNucyBpbiBmZWVkLWluIGNvZGUuCitDICAqIE1ha2Ugc3VyZSB3ZSB3cml0ZSBubyBkZWFkIHJlZ2lzdGVycyBpbiBmZWVkLWluIGNvZGUuCitDICAqIFdlIG1pZ2h0IHVzZSAzMi1iaXQgc2l6ZSBvcHMsIHNpbmNlIG4gPj0gMl4zMiBpcyBub24tdGVybWluYXRpbmcuICBXYXRjaAorQyAgICBvdXQgZm9yIG5lZ2F0aXZlIHNpemVzIGJlaW5nIHplcm8tZXh0ZW5kZWQsIHRob3VnaC4KK0MgICogUHJvdmlkZSBzdHJhaWdodC1saW5lIGNvZGUgZm9yIG4gPSA0OyB0aGVuIGxvb2sgZm9yIHNpbXBsaWZpY2F0aW9ucyBpbgorQyAgICBtYWluIGNvZGUuCisKK2RlZmluZShgcnAnLAkgIGAlcmRpJykKK2RlZmluZShgdXAnLAkgIGAlcnNpJykKK2RlZmluZShgdW5fcGFyYW0nLGAlcmR4JykKKworCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigzMikKK1BST0xPR1VFKG1wbl9zcXJfYmFzZWNhc2UpCisJRlVOQ19FTlRSWSgzKQorCisJY21wCSQyLCB1bl9wYXJhbQorCWphZQlMKGd0MSkKKworCW1vdgkodXApLCAlcmR4CisJbXVseCgJJXJkeCwgJXJheCwgJXJkeCkKKwltb3YJJXJheCwgKHJwKQorCW1vdgklcmR4LCA4KHJwKQorCUZVTkNfRVhJVCgpCisJcmV0CisKK0woZ3QxKToJam5lCUwoZ3QyKQorCisJbW92CSh1cCksICVyZHgKKwltb3YJOCh1cCksICVyY3gKKwltdWx4KAklcmN4LCAlcjksICVyMTApCUMgdjAgKiB2MQlXIDEgMgorCW11bHgoCSVyZHgsICVyYXgsICVyOCkJQyB2MCAqIHYwCVcgMCAxCisJbW92CSVyY3gsICVyZHgKKwltdWx4KAklcmR4LCAlcjExLCAlcmR4KQlDIHYxICogdjEJVyAyIDMKKwlhZGQJJXI5LCAlcjkJCUMJCVcgMQorCWFkYwklcjEwLCAlcjEwCQlDCQlXIDIKKwlhZGMJJDAsICVyZHgJCUMJCVcgMworCWFkZAklcjksICVyOAkJQyBXIDEKKwlhZGMJJXIxMSwgJXIxMAkJQyBXIDIKKwlhZGMJJDAsICVyZHgJCUMgVyAzCisJbW92CSVyYXgsIChycCkKKwltb3YJJXI4LCA4KHJwKQorCW1vdgklcjEwLCAxNihycCkKKwltb3YJJXJkeCwgMjQocnApCisJRlVOQ19FWElUKCkKKwlyZXQKKworTChndDIpOgljbXAJJDQsIHVuX3BhcmFtCisJamFlCUwoZ3QzKQorZGVmaW5lKGB2MCcsIGAlcjgnKQorZGVmaW5lKGB2MScsIGAlcjknKQorZGVmaW5lKGB3MCcsIGAlcjEwJykKK2RlZmluZShgdzInLCBgJXIxMScpCisKKwltb3YJKHVwKSwgdjAKKwltb3YJOCh1cCksICVyZHgKKwltb3YJJXJkeCwgdjEKKwltdWx4KAl2MCwgdzIsICVyYXgpCisJbW92CTE2KHVwKSwgJXJkeAorCW11bHgoCXYwLCB3MCwgJXJjeCkKKwltb3YJdzIsICVyOAorCWFkZAklcmF4LCB3MAorCWFkYwkkMCwgJXJjeAorCW11bHgoCXYxLCAlcmR4LCAlcmF4KQorCWFkZAklcmN4LCAlcmR4CisJbW92CSVyZHgsIDI0KHJwKQorCWFkYwkkMCwgJXJheAorCW1vdgklcmF4LCAzMihycCkKKwl4b3IJUjMyKCVyY3gpLCBSMzIoJXJjeCkKKwltb3YJKHVwKSwgJXJkeAorCW11bHgoCSVyZHgsICVyYXgsIHcyKQorCW1vdgklcmF4LCAocnApCisJYWRkCSVyOCwgJXI4CisJYWRjCXcwLCB3MAorCXNldGMJUjgoJXJjeCkKKwltb3YJOCh1cCksICVyZHgKKwltdWx4KAklcmR4LCAlcmF4LCAlcmR4KQorCWFkZAl3MiwgJXI4CisJYWRjCSVyYXgsIHcwCisJbW92CSVyOCwgOChycCkKKwltb3YJdzAsIDE2KHJwKQorCW1vdgkyNChycCksICVyOAorCW1vdgkzMihycCksIHcwCisJbGVhCSglcmR4LCVyY3gpLCB3MgorCWFkYwklcjgsICVyOAorCWFkYwl3MCwgdzAKKwlzZXRjCVI4KCVyY3gpCisJbW92CTE2KHVwKSwgJXJkeAorCW11bHgoCSVyZHgsICVyYXgsICVyZHgpCisJYWRkCXcyLCAlcjgKKwlhZGMJJXJheCwgdzAKKwltb3YJJXI4LCAyNChycCkKKwltb3YJdzAsIDMyKHJwKQorCWFkYwklcmN4LCAlcmR4CisJbW92CSVyZHgsIDQwKHJwKQorCUZVTkNfRVhJVCgpCisJcmV0CisKK0woZ3QzKToKKworZGVmaW5lKGB2MCcsIGAlcjgnKQorZGVmaW5lKGB2MScsIGAlcjknKQorZGVmaW5lKGB3MCcsIGAlcjEwJykKK2RlZmluZShgdzEnLCBgJXIxMScpCitkZWZpbmUoYHcyJywgYCVyYngnKQorZGVmaW5lKGB3MycsIGAlcmJwJykKK2RlZmluZShgdW4nLCBgJXIxMicpCitkZWZpbmUoYG4nLCAgYCVyY3gnKQorCitkZWZpbmUoYFgwJywgYCVyMTMnKQorZGVmaW5lKGBYMScsIGAlcjE0JykKKworTChkb19tdWxfMik6CisJcHVzaAklcmJ4CisJcHVzaAklcmJwCisJcHVzaAklcjEyCisJcHVzaAklcjEzCisJcHVzaAklcjE0CisJbW92CSQwLCBSMzIodW4pCisJc3ViCXVuX3BhcmFtLCB1bgkJQyBmcmVlIHVwIHJkeAorCXB1c2gJdW4KKwltb3YJKHVwKSwgdjAKKwltb3YJOCh1cCksICVyZHgKKwlsZWEJMih1biksIG4KKwlzYXIJJDIsIG4JCQlDIEZJWE1FOiBzdXBwcmVzcywgY2hhbmdlIGxvb3A/CisJaW5jCXVuCQkJQyBkZWNyZW1lbnQgfHVufAorCW1vdgklcmR4LCB2MQorCisJdGVzdAkkMSwgUjgodW4pCisJam56CUwobXgxKQorCitMKG14MCk6CW11bHgoCXYwLCB3MiwgdzEpCisJbW92CTE2KHVwKSwgJXJkeAorCW1vdgl3MiwgOChycCkKKwl4b3IJdzIsIHcyCisJbXVseCgJdjAsIHcwLCB3MykKKwl0ZXN0CSQyLCBSOCh1bikKKwlqeglMKG0wMCkKKworTChtMTApOglsZWEJLTgocnApLCBycAorCWxlYQktOCh1cCksIHVwCisJam1wCUwobWxvMikKKworTChtMDApOglsZWEJOCh1cCksIHVwCisJbGVhCTgocnApLCBycAorCWptcAlMKG1sbzApCisKK0wobXgxKToJbXVseCgJdjAsIHcwLCB3MykKKwltb3YJMTYodXApLCAlcmR4CisJbW92CXcwLCA4KHJwKQorCXhvcgl3MCwgdzAKKwltdWx4KAl2MCwgdzIsIHcxKQorCXRlc3QJJDIsIFI4KHVuKQorCWp6CUwobWxvMykKKworTChtMDEpOglsZWEJMTYocnApLCBycAorCWxlYQkxNih1cCksIHVwCisJam1wCUwobWxvMSkKKworCUFMSUdOKDMyKQorTChtdG9wKTptdWx4KAl2MSwgJXJheCwgdzApCisJYWRkCSVyYXgsIHcyCQlDIDAKKwltb3YJKHVwKSwgJXJkeAorCW11bHgoCXYwLCAlcmF4LCB3MSkKKwlhZGMJJDAsIHcwCQkJQyAxCisJYWRkCSVyYXgsIHcyCQlDIDAKK0wobWxvMSk6YWRjCSQwLCB3MQkJCUMgMQorCWFkZAl3MywgdzIJCQlDIDAKKwltb3YJdzIsIChycCkJCUMgMAorCWFkYwkkMCwgdzEJCQlDIDEKKwltdWx4KAl2MSwgJXJheCwgdzIpCisJYWRkCSVyYXgsIHcwCQlDIDEKKwltb3YJOCh1cCksICVyZHgKKwlhZGMJJDAsIHcyCQkJQyAyCisJbXVseCgJdjAsICVyYXgsIHczKQorCWFkZAklcmF4LCB3MAkJQyAxCisJYWRjCSQwLCB3MwkJCUMgMgorTChtbG8wKTphZGQJdzEsIHcwCQkJQyAxCisJbW92CXcwLCA4KHJwKQkJQyAxCisJYWRjCSQwLCB3MwkJCUMgMgorCW11bHgoCXYxLCAlcmF4LCB3MCkKKwlhZGQJJXJheCwgdzIJCUMgMgorCW1vdgkxNih1cCksICVyZHgKKwltdWx4KAl2MCwgJXJheCwgdzEpCisJYWRjCSQwLCB3MAkJCUMgMworCWFkZAklcmF4LCB3MgkJQyAyCisJYWRjCSQwLCB3MQkJCUMgMworTChtbG8zKTphZGQJdzMsIHcyCQkJQyAyCisJbW92CXcyLCAxNihycCkJCUMgMgorCWFkYwkkMCwgdzEJCQlDIDMKKwltdWx4KAl2MSwgJXJheCwgdzIpCisJYWRkCSVyYXgsIHcwCQlDIDMKKwltb3YJMjQodXApLCAlcmR4CisJYWRjCSQwLCB3MgkJCUMgNAorCW11bHgoCXYwLCAlcmF4LCB3MykKKwlhZGQJJXJheCwgdzAJCUMgMworCWFkYwkkMCwgdzMJCQlDIDQKK0wobWxvMik6YWRkCXcxLCB3MAkJCUMgMworCWxlYQkzMih1cCksIHVwCisJbW92CXcwLCAyNChycCkJCUMgMworCWFkYwkkMCwgdzMJCQlDIDQKKwlpbmMJbgorCWxlYQkzMihycCksIHJwCisJam56CUwobXRvcCkKKworTChtZW5kKTptdWx4KAl2MSwgJXJkeCwgJXJheCkKKwlhZGQJJXJkeCwgdzIKKwlhZGMJJDAsICVyYXgKKwlhZGQJdzMsIHcyCisJbW92CXcyLCAocnApCisJYWRjCSQwLCAlcmF4CisJbW92CSVyYXgsIDgocnApCisKKwlsZWEJMTYodXApLCB1cAorCWxlYQktMTYocnApLCBycAorCitMKGRvX2FkZG11bF8yKToKK0wob3V0ZXIpOgorCWxlYQkodXAsdW4sOCksIHVwCQlDIHB1dCBiYWNrIHVwIHRvIDIgcG9zaXRpb25zIGFib3ZlIGxhc3QgdGltZQorCWxlYQk0OChycCx1biw4KSwgcnAJCUMgcHV0IGJhY2sgcnAgdG8gNCBwb3NpdGlvbnMgYWJvdmUgbGFzdCB0aW1lCisKKwltb3YJLTgodXApLCB2MAkJQyBzaGFyZWQgYmV0d2VlbiBhZGRtdWxfMiBhbmQgY29ybmVyCisKKwlhZGQJJDIsIHVuCQkJQyBkZWNyZWFzZSB8dW58CisJY21wCSQtMiwgdW4KKwlqZ2UJTChjb3JuZXIpCisKKwltb3YJKHVwKSwgdjEKKworCWxlYQkxKHVuKSwgbgorCXNhcgkkMiwgbgkJCUMgRklYTUU6IHN1cHByZXNzLCBjaGFuZ2UgbG9vcD8KKworCW1vdgl2MSwgJXJkeAorCXRlc3QJJDEsIFI4KHVuKQorCWpueglMKGJ4MSkKKworTChieDApOgltb3YJKHJwKSwgWDAKKwltb3YJOChycCksIFgxCisJbXVseCgJdjAsICVyYXgsIHcxKQorCWFkZAklcmF4LCBYMAorCWFkYwkkMCwgdzEKKwltb3YJWDAsIChycCkKKwl4b3IJdzIsIHcyCisJdGVzdAkkMiwgUjgodW4pCisJam56CUwoYjEwKQorCitMKGIwMCk6CW1vdgk4KHVwKSwgJXJkeAorCWxlYQkxNihycCksIHJwCisJbGVhCTE2KHVwKSwgdXAKKwlqbXAJTChsbzApCisKK0woYjEwKToJbW92CTgodXApLCAlcmR4CisJbW92CTE2KHJwKSwgWDAKKwlsZWEJMzIodXApLCB1cAorCWluYwluCisJbXVseCgJdjAsICVyYXgsIHczKQorCWp6CUwoZXgpCisJam1wCUwobG8yKQorCitMKGJ4MSk6CW1vdgkocnApLCBYMQorCW1vdgk4KHJwKSwgWDAKKwltdWx4KAl2MCwgJXJheCwgdzMpCisJbW92CTgodXApLCAlcmR4CisJYWRkCSVyYXgsIFgxCisJYWRjCSQwLCB3MworCXhvcgl3MCwgdzAKKwltb3YJWDEsIChycCkKKwltdWx4KAl2MCwgJXJheCwgdzEpCisJdGVzdAkkMiwgUjgodW4pCisJanoJTChiMTEpCisKK0woYjAxKToJbW92CTE2KHJwKSwgWDEKKwlsZWEJMjQocnApLCBycAorCWxlYQkyNCh1cCksIHVwCisJam1wCUwobG8xKQorCitMKGIxMSk6CWxlYQk4KHJwKSwgcnAKKwlsZWEJOCh1cCksIHVwCisJam1wCUwobG8zKQorCisJQUxJR04oMzIpCitMKHRvcCk6CW11bHgoCXYwLCAlcmF4LCB3MykKKwlhZGQJdzAsIFgxCisJYWRjCSQwLCB3MgorTChsbzIpOglhZGQJJXJheCwgWDEKKwlhZGMJJDAsIHczCisJbXVseCgJdjEsICVyYXgsIHcwKQorCWFkZAklcmF4LCBYMAorCWFkYwkkMCwgdzAKKwlsZWEJMzIocnApLCBycAorCWFkZAl3MSwgWDEKKwltb3YJLTE2KHVwKSwgJXJkeAorCW1vdglYMSwgLTI0KHJwKQorCWFkYwkkMCwgdzMKKwlhZGQJdzIsIFgwCisJbW92CS04KHJwKSwgWDEKKwltdWx4KAl2MCwgJXJheCwgdzEpCisJYWRjCSQwLCB3MAorTChsbzEpOglhZGQJJXJheCwgWDAKKwltdWx4KAl2MSwgJXJheCwgdzIpCisJYWRjCSQwLCB3MQorCWFkZAl3MywgWDAKKwltb3YJWDAsIC0xNihycCkKKwlhZGMJJDAsIHcxCisJYWRkCSVyYXgsIFgxCisJYWRjCSQwLCB3MgorCWFkZAl3MCwgWDEKKwltb3YJLTgodXApLCAlcmR4CisJYWRjCSQwLCB3MgorTChsbzApOgltdWx4KAl2MCwgJXJheCwgdzMpCisJYWRkCSVyYXgsIFgxCisJYWRjCSQwLCB3MworCW1vdgkocnApLCBYMAorCW11bHgoCXYxLCAlcmF4LCB3MCkKKwlhZGQJJXJheCwgWDAKKwlhZGMJJDAsIHcwCisJYWRkCXcxLCBYMQorCW1vdglYMSwgLTgocnApCisJYWRjCSQwLCB3MworCW1vdgkodXApLCAlcmR4CisJYWRkCXcyLCBYMAorCW11bHgoCXYwLCAlcmF4LCB3MSkKKwlhZGMJJDAsIHcwCitMKGxvMyk6CWFkZAklcmF4LCBYMAorCWFkYwkkMCwgdzEKKwltdWx4KAl2MSwgJXJheCwgdzIpCisJYWRkCXczLCBYMAorCW1vdgk4KHJwKSwgWDEKKwltb3YJWDAsIChycCkKKwltb3YJMTYocnApLCBYMAorCWFkYwkkMCwgdzEKKwlhZGQJJXJheCwgWDEKKwlhZGMJJDAsIHcyCisJbW92CTgodXApLCAlcmR4CisJbGVhCTMyKHVwKSwgdXAKKwlpbmMJbgorCWpueglMKHRvcCkKKworTChlbmQpOgltdWx4KAl2MCwgJXJheCwgdzMpCisJYWRkCXcwLCBYMQorCWFkYwkkMCwgdzIKK0woZXgpOglhZGQJJXJheCwgWDEKKwlhZGMJJDAsIHczCisJbXVseCgJdjEsICVyZHgsICVyYXgpCisJYWRkCXcxLCBYMQorCW1vdglYMSwgOChycCkKKwlhZGMJJDAsIHczCisJYWRkCXcyLCAlcmR4CisJYWRjCSQwLCAlcmF4CisJYWRkCSVyZHgsIHczCisJbW92CXczLCAxNihycCkKKwlhZGMJJDAsICVyYXgKKwltb3YJJXJheCwgMjQocnApCisKKwlqbXAJTChvdXRlcikJCUMgbG9vcCB1bnRpbCBhIHNtYWxsIGNvcm5lciByZW1haW5zCisKK0woY29ybmVyKToKKwlwb3AJdW4KKwltb3YJKHVwKSwgJXJkeAorCWpnCUwoc21hbGxfY29ybmVyKQorCisJbW92CSVyZHgsIHYxCisJbW92CShycCksIFgwCisJbW92CSVyYXgsIFgxCQlDIFRyaWNreSByYXggcmV1c2Ugb2YgbGFzdCBpdGVyYXRpb24KKwltdWx4KAl2MCwgJXJheCwgdzEpCisJYWRkCSVyYXgsIFgwCisJYWRjCSQwLCB3MQorCW1vdglYMCwgKHJwKQorCW1vdgk4KHVwKSwgJXJkeAorCW11bHgoCXYwLCAlcmF4LCB3MykKKwlhZGQJJXJheCwgWDEKKwlhZGMJJDAsIHczCisJbXVseCgJdjEsICVyZHgsICVyYXgpCisJYWRkCXcxLCBYMQorCW1vdglYMSwgOChycCkKKwlhZGMJJDAsIHczCisJYWRkCXczLCAlcmR4CisJbW92CSVyZHgsIDE2KHJwKQorCWFkYwkkMCwgJXJheAorCW1vdgklcmF4LCAyNChycCkKKwlsZWEJMzIocnApLCBycAorCWxlYQkxNih1cCksIHVwCisJam1wCUwoY29tKQorCitMKHNtYWxsX2Nvcm5lcik6CisJbXVseCgJdjAsIFgxLCB3MykKKwlhZGQJJXJheCwgWDEJCUMgVHJpY2t5IHJheCByZXVzZSBvZiBsYXN0IGl0ZXJhdGlvbgorCWFkYwkkMCwgdzMKKwltb3YJWDEsIChycCkKKwltb3YJdzMsIDgocnApCisJbGVhCTE2KHJwKSwgcnAKKwlsZWEJOCh1cCksIHVwCisKK0woY29tKToKKworTChzcXJfZGlhZ19hZGRsc2gxKToKKwlsZWEJOCh1cCx1biw4KSwgdXAJCUMgcHV0IGJhY2sgdXAgYXQgaXRzIHZlcnkgYmVnaW5uaW5nCisJbGVhCShycCx1biw4KSwgcnAKKwlsZWEJKHJwLHVuLDgpLCBycAkJQyBwdXQgYmFjayBycCBhdCBpdHMgdmVyeSBiZWdpbm5pbmcKKwlpbmMJdW4KKworCW1vdgktOCh1cCksICVyZHgKKwl4b3IJUjMyKCVyYngpLCBSMzIoJXJieCkJQyBjbGVhciBDRiBhcyBzaWRlIGVmZmVjdAorCW11bHgoCSVyZHgsICVyYXgsICVyMTApCisJbW92CSVyYXgsIDgocnApCisJbW92CTE2KHJwKSwgJXI4CisJbW92CTI0KHJwKSwgJXI5CisJam1wCUwoZG0pCisKKwlBTElHTigxNikKK0woZHRvcCk6bW92CTMyKHJwKSwgJXI4CisJbW92CTQwKHJwKSwgJXI5CisJbGVhCTE2KHJwKSwgcnAKKwlsZWEJKCVyZHgsJXJieCksICVyMTAKK0woZG0pOglhZGMJJXI4LCAlcjgKKwlhZGMJJXI5LCAlcjkKKwlzZXRjCVI4KCVyYngpCisJbW92CSh1cCksICVyZHgKKwlsZWEJOCh1cCksIHVwCisJbXVseCgJJXJkeCwgJXJheCwgJXJkeCkKKwlhZGQJJXIxMCwgJXI4CisJYWRjCSVyYXgsICVyOQorCW1vdgklcjgsIDE2KHJwKQorCW1vdgklcjksIDI0KHJwKQorCWluYwl1bgorCWpueglMKGR0b3ApCisKK0woZGVuZCk6YWRjCSVyYngsICVyZHgKKwltb3YJJXJkeCwgMzIocnApCisKKwlwb3AJJXIxNAorCXBvcAklcjEzCisJcG9wCSVyMTIKKwlwb3AJJXJicAorCXBvcAklcmJ4CisJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpbmhtL2FvcnJsc2hfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaW5obS9hb3JybHNoX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlZDY0ZTcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaW5obS9hb3JybHNoX24uYXNtCkBAIC0wLDAgKzEsMjAwIEBACitkbmwgIEFNRDY0IG1wbl9hZGRsc2hfbiAtLSBycFtdID0gdXBbXSArICh2cFtdIDw8IGspCitkbmwgIEFNRDY0IG1wbl9yc2Jsc2hfbiAtLSBycFtdID0gKHZwW10gPDwgaykgLSB1cFtdCitkbmwgIE9wdGltaXNlZCBmb3IgTmVoYWxlbS4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTEsIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIEFNRCBLOCxLOQkgPworQyBBTUQgSzEwCSA0Ljc1CitDIEludGVsIFA0CSA/CitDIEludGVsIGNvcmUyCSAyLjgtMworQyBJbnRlbCBOSE0JIDIuOAorQyBJbnRlbCBTQlIJIDMuNTUKK0MgSW50ZWwgYXRvbQkgPworQyBWSUEgbmFubwkgPworCitDIFRoZSBpbm5lci1sb29wIHByb2JhYmx5IHJ1bnMgY2xvc2UgdG8gb3B0aW1hbGx5IG9uIE5laGFsZW0gKHVzaW5nIDQtd2F5CitDIHVucm9sbGluZykuICBUaGUgcmVzdCBvZiB0aGUgY29kZSBpcyBxdWl0ZSBjcnVkZSwgYW5kIGNvdWxkIHBlcmhhcHMgYmUgbWFkZQorQyBib3RoIHNtYWxsZXIgYW5kIGZhc3Rlci4KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywJYCVyZGknKQorZGVmaW5lKGB1cCcsCWAlcnNpJykKK2RlZmluZShgdnAnLAlgJXJkeCcpCitkZWZpbmUoYG4nLAlgJXJjeCcpCitkZWZpbmUoYGNudCcsCWAlcjgnKQorZGVmaW5lKGBjeScsCWAlcjknKQkJCUMgZm9yIF9uYyB2YXJpYW50CisKK2lmZGVmKGBPUEVSQVRJT05fYWRkbHNoX24nLCBgCisJZGVmaW5lKEFERFNVQiwJYWRkKQorCWRlZmluZShBRENTQkIsCWFkYykKKwlkZWZpbmUoSUZSU0IsCSkKKwlkZWZpbmUoZnVuY19uLAltcG5fYWRkbHNoX24pCisJZGVmaW5lKGZ1bmNfbmMsCW1wbl9hZGRsc2hfbmMpJykKK2lmZGVmKGBPUEVSQVRJT05fcnNibHNoX24nLCBgCisJZGVmaW5lKEFERFNVQiwJc3ViKQorCWRlZmluZShBRENTQkIsCXNiYikKKwlkZWZpbmUoSUZSU0IsCWAkMScpCisJZGVmaW5lKGZ1bmNfbiwJbXBuX3JzYmxzaF9uKQorCWRlZmluZShmdW5jX25jLAltcG5fcnNibHNoX25jKScpCisKK0MgbXBuX3JzYmxzaF9uYyByZW1vdmVkIGJlbG93LCBpdHMgaWRlYSBvZiBjYXJyeS1pbiBpcyBpbmNvbnNpc3RlbnQgd2l0aAorQyByZWZtcG5fcnNibHNoX25jCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRsc2hfbiBtcG5fYWRkbHNoX25jIG1wbl9yc2Jsc2hfbikKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMzIpCitQUk9MT0dVRShmdW5jX24pCisJRlVOQ19FTlRSWSg0KQorSUZET1MoYAltb3YJNTYoJXJzcCksICVyOGQJJykJQyBjbnQKKwlwdXNoCSVyYngKKwl4b3IJUjMyKCVyYngpLCBSMzIoJXJieCkJQyBjbGVhciBDRiBzYXZlIHJlZ2lzdGVyCitMKGVudCk6CXB1c2gJJXJicAorCW1vdglSMzIobiksIFIzMiglcmJwKQorCW1vdgluLCAlcmF4CisKKwltb3YJUjMyKGNudCksIFIzMiglcmN4KQorCW5lZwlSMzIoJXJjeCkKKworCWxlYQktOCh1cCwlcmF4LDgpLCB1cAorCWxlYQktOCh2cCwlcmF4LDgpLCB2cAorCWxlYQktNDAocnAsJXJheCw4KSwgcnAKKwluZWcJJXJheAorCisJYW5kCSQzLCBSMzIoJXJicCkKKwlqeglMKGIwKQorCWNtcAkkMiwgUjMyKCVyYnApCisJamMJTChiMSkKKwlqeglMKGIyKQorCitMKGIzKToJeG9yCVIzMiglcjkpLCBSMzIoJXI5KQorCW1vdgk4KHZwLCVyYXgsOCksICVyMTAKKwltb3YJMTYodnAsJXJheCw4KSwgJXIxMQorCXNocmQJJWNsLCAlcjEwLCAlcjkKKwlzaHJkCSVjbCwgJXIxMSwgJXIxMAorCWFkZAlSMzIoJXJieCksIFIzMiglcmJ4KQorCUFEQ1NCQgk4KHVwLCVyYXgsOCksICVyOQorCW1vdgkyNCh2cCwlcmF4LDgpLCAlcjgKKwlBRENTQkIJMTYodXAsJXJheCw4KSwgJXIxMAorCXNiYglSMzIoJXJieCksIFIzMiglcmJ4KQorCWFkZAkkMywgJXJheAorCWptcAlMKGxvMykKKworTChiMCk6CW1vdgk4KHZwLCVyYXgsOCksICVyOQorCXhvcglSMzIoJXI4KSwgUjMyKCVyOCkKKwlzaHJkCSVjbCwgJXI5LCAlcjgKKwltb3YJMTYodnAsJXJheCw4KSwgJXIxMAorCW1vdgkyNCh2cCwlcmF4LDgpLCAlcjExCisJc2hyZAklY2wsICVyMTAsICVyOQorCXNocmQJJWNsLCAlcjExLCAlcjEwCisJYWRkCVIzMiglcmJ4KSwgUjMyKCVyYngpCisJQURDU0JCCTgodXAsJXJheCw4KSwgJXI4CisJbW92CSVyOCwgNDAocnAsJXJheCw4KQlDIG9mZnNldCA0MAorCUFEQ1NCQgkxNih1cCwlcmF4LDgpLCAlcjkKKwltb3YJMzIodnAsJXJheCw4KSwgJXI4CisJQURDU0JCCTI0KHVwLCVyYXgsOCksICVyMTAKKwlzYmIJUjMyKCVyYngpLCBSMzIoJXJieCkKKwlhZGQJJDQsICVyYXgKKwlqbXAJTChsbzApCisKK0woYjEpOgltb3YJOCh2cCwlcmF4LDgpLCAlcjgKKwlhZGQJJDEsICVyYXgKKwlqeglMKDEpCisJbW92CTgodnAsJXJheCw4KSwgJXI5CisJeG9yCVIzMiglcmJwKSwgUjMyKCVyYnApCisJam1wCUwobG8xKQorTCgxKToJeG9yCVIzMiglcjExKSwgUjMyKCVyMTEpCisJam1wCUwod2QxKQorCitMKGIyKToJeG9yCSVyMTAsICVyMTAKKwltb3YJOCh2cCwlcmF4LDgpLCAlcjExCisJc2hyZAklY2wsICVyMTEsICVyMTAKKwlhZGQJUjMyKCVyYngpLCBSMzIoJXJieCkKKwltb3YJMTYodnAsJXJheCw4KSwgJXI4CisJQURDU0JCCTgodXAsJXJheCw4KSwgJXIxMAorCXNiYglSMzIoJXJieCksIFIzMiglcmJ4KQorCWFkZAkkMiwgJXJheAorCWp6CUwoZW5kKQorCisJQUxJR04oMTYpCitMKHRvcCk6CW1vdgk4KHZwLCVyYXgsOCksICVyOQorCW1vdgklcjExLCAlcmJwCitMKGxvMik6CW1vdgklcjEwLCAyNChycCwlcmF4LDgpCUMgb2Zmc2V0IDI0CitMKGxvMSk6CXNocmQJJWNsLCAlcjgsICVyYnAKKwlzaHJkCSVjbCwgJXI5LCAlcjgKKwltb3YJMTYodnAsJXJheCw4KSwgJXIxMAorCW1vdgkyNCh2cCwlcmF4LDgpLCAlcjExCisJc2hyZAklY2wsICVyMTAsICVyOQorCXNocmQJJWNsLCAlcjExLCAlcjEwCisJYWRkCVIzMiglcmJ4KSwgUjMyKCVyYngpCisJQURDU0JCCSh1cCwlcmF4LDgpLCAlcmJwCisJQURDU0JCCTgodXAsJXJheCw4KSwgJXI4CisJbW92CSVyOCwgNDAocnAsJXJheCw4KQlDIG9mZnNldCA0MAorCUFEQ1NCQgkxNih1cCwlcmF4LDgpLCAlcjkKKwltb3YJMzIodnAsJXJheCw4KSwgJXI4CisJQURDU0JCCTI0KHVwLCVyYXgsOCksICVyMTAKKwlzYmIJUjMyKCVyYngpLCBSMzIoJXJieCkKKwlhZGQJJDQsICVyYXgKKwltb3YJJXJicCwgKHJwLCVyYXgsOCkJQyBvZmZzZXQgMzIKK0wobG8wKToKK0wobG8zKToJbW92CSVyOSwgMTYocnAsJXJheCw4KQlDIG9mZnNldCA0OAorCWpueglMKHRvcCkKKworTChlbmQpOgltb3YJJXIxMCwgMjQocnAsJXJheCw4KQorTCh3ZDEpOglzaHJkCSVjbCwgJXI4LCAlcjExCisJYWRkCVIzMiglcmJ4KSwgUjMyKCVyYngpCisJQURDU0JCCSh1cCwlcmF4LDgpLCAlcjExCisJbW92CSVyMTEsIDMyKHJwLCVyYXgsOCkJQyBvZmZzZXQgMzIKKwlhZGMJUjMyKCVyYXgpLCBSMzIoJXJheCkJQyByYXggaXMgemVybyBhZnRlciBsb29wCisJc2hyCVI4KCVyY3gpLCAlcjgKKwlBRERTVUIJJXI4LCAlcmF4CitJRlJTQigJbmVnCSVyYXgpCisJcG9wCSVyYnAKKwlwb3AJJXJieAorCUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCitQUk9MT0dVRShmdW5jX25jKQorCUZVTkNfRU5UUlkoNCkKK0lGRE9TKGAJbW92CTU2KCVyc3ApLCAlcjhkCScpCUMgY250CitJRkRPUyhgCW1vdgk2NCglcnNwKSwgJXI5CScpCUMgY3kKKwlwdXNoCSVyYngKKwluZWcJY3kKKwlzYmIJUjMyKCVyYngpLCBSMzIoJXJieCkJQyBpbml0aWFsaXNlIENGIHNhdmUgcmVnaXN0ZXIKKwlqbXAJTChlbnQpCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaW5obS9hb3JzbXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWluaG0vYW9yc211bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmU4MjlmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWluaG0vYW9yc211bF8xLmFzbQpAQCAtMCwwICsxLDE5MCBAQAorZG5sICBBTUQ2NCBtcG5fYWRkbXVsXzEgYW5kIG1wbl9zdWJtdWxfMSBvcHRpbWlzZWQgZm9yIEludGVsIE5laGFsZW0uCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqw7ZybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAwMy0yMDA1LCAyMDA3LCAyMDA4LCAyMDExLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyAgICAgICAgICAgIGN5Y2xlcy9saW1iCitDIEFNRCBLOCxLOSAgICAgIDQuMAorQyBBTUQgSzEwICAgICAgICA0LjAKK0MgQU1EIGJ1bGwgICAgICAgNS4wCitDIEFNRCBwaWxlICAgICAgIDQuODQgICAgNS4zOQorQyBBTUQgc3RlYW0KK0MgQU1EIGV4Y2F2YXRvcgorQyBBTUQgYm9iY2F0ICAgICA1LjU2CitDIEFNRCBqYWd1YXIgICAgIDUuMzAKK0MgSW50ZWwgUDQgICAgICAxNS43ICAgIDE3LjIKK0MgSW50ZWwgY29yZTIgICAgNS4xNQorQyBJbnRlbCBOSE0gICAgICA0LjU2CitDIEludGVsIFNCUiAgICAgIDMuNDQKK0MgSW50ZWwgSFdMICAgICAgMy4wMworQyBJbnRlbCBCV0wgICAgICAyLjc3CitDIEludGVsIFNLTCAgICAgIDIuNzYKK0MgSW50ZWwgYXRvbSAgICAyMQorQyBJbnRlbCBTTE0gICAgIDExCitDIFZJQSBuYW5vCisKK0MgVGhlIGxvb3Agb2YgdGhpcyBjb2RlIGlzIHRoZSByZXN1bHQgb2YgcnVubmluZyBhIGNvZGUgZ2VuZXJhdGlvbiBhbmQKK0Mgb3B0aW1pemF0aW9uIHRvb2wgc3VpdGUgd3JpdHRlbiBieSBEYXZpZCBIYXJ2ZXkgYW5kIFRvcmJqb3JuIEdyYW5sdW5kLgorCitDIE4uQi46IEJlIGNhcmVmdWwgaWYgZWRpdGluZywgbWFraW5nIHN1cmUgdGhlIGxvb3AgYWxpZ25tZW50IHBhZGRpbmcgZG9lcyBub3QKK0MgYmVjb21lIGxhcmdlLCBhcyB3ZSBjdXJyZW50bHkgZmFsbCBpbnRvIGl0LgorCitkZWZpbmUoYHJwJywgICAgICBgJXJkaScpICAgQyByY3gKK2RlZmluZShgdXAnLCAgICAgIGAlcnNpJykgICBDIHJkeAorZGVmaW5lKGBuX3BhcmFtJywgYCVyZHgnKSAgIEMgcjgKK2RlZmluZShgdjAnLCAgICAgIGAlcmN4JykgICBDIHI5CisKK2RlZmluZShgbicsICAgICAgIGAlcmJ4JykKKworaWZkZWYoYE9QRVJBVElPTl9hZGRtdWxfMScsYAorICBkZWZpbmUoYEFERFNVQicsIGBhZGQnKQorICBkZWZpbmUoYGZ1bmMnLCAgIGBtcG5fYWRkbXVsXzEnKQorJykKK2lmZGVmKGBPUEVSQVRJT05fc3VibXVsXzEnLGAKKyAgZGVmaW5lKGBBRERTVUInLCBgc3ViJykKKyAgZGVmaW5lKGBmdW5jJywgICBgbXBuX3N1Ym11bF8xJykKKycpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FkZG11bF8xIG1wbl9zdWJtdWxfMSkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMzIpCitQUk9MT0dVRShmdW5jKQorCUZVTkNfRU5UUlkoNCkKKwlwdXNoCSVyYngKKworCW1vdgkodXApLCAlcmF4CisJbGVhCS04KHVwLG5fcGFyYW0sOCksIHVwCisJbW92CShycCksICVyOAorCWxlYQktOChycCxuX3BhcmFtLDgpLCBycAorCisJdGVzdAkkMSwgUjgobl9wYXJhbSkKKwlqbnoJTChieDEpCisKK0woYngwKToJdGVzdAkkMiwgUjgobl9wYXJhbSkKKwlqbnoJTChiMTApCisKK0woYjAwKToJbW92CSQzLCBSMzIobikKKwlzdWIJbl9wYXJhbSwgbgorCW11bAl2MAorCW1vdgkkMCwgUjMyKCVyMTEpCisJbW92CSVyOCwgJXIxMAorCUFERFNVQgklcmF4LCAlcjEwCisJbW92CS04KHVwLG4sOCksICVyYXgKKwlhZGMJJXJkeCwgJXIxMQorCWptcAlMKGxvMCkKKworTChiMTApOgltb3YJJDEsIFIzMihuKQorCXN1YgluX3BhcmFtLCBuCisJbXVsCXYwCisJbW92CSVyOCwgJXIxMAorCW1vdgkkMCwgUjMyKCVyMTEpCisJQUREU1VCCSVyYXgsICVyMTAKKwltb3YJOCh1cCxuLDgpLCAlcmF4CisJYWRjCSVyZHgsICVyMTEKKwlqbXAJTChsbzIpCisKK0woYngxKToJdGVzdAkkMiwgUjgobl9wYXJhbSkKKwlqeglMKGIwMSkKKworTChiMTEpOgltb3YJJDIsIFIzMihuKQorCXN1YgluX3BhcmFtLCBuCisJbXVsCXYwCisJQUREU1VCCSVyYXgsICVyOAorCW1vdgkkMCwgUjMyKCVyOSkKKwltb3YJKHVwLG4sOCksICVyYXgKKwlhZGMJJXJkeCwgJXI5CisJam1wCUwobG8zKQorCitMKGIwMSk6CW1vdgkkMCwgUjMyKG4pCisJc3ViCW5fcGFyYW0sIG4KKwl4b3IJJXIxMSwgJXIxMQorCWFkZAkkNCwgbgorCWpjCUwoZW5kKQorCisJQUxJR04oMzIpCitMKHRvcCk6CW11bAl2MAorCUFERFNVQgklcmF4LCAlcjgKKwltb3YJJDAsIFIzMiglcjkpCisJbW92CS0xNih1cCxuLDgpLCAlcmF4CisJYWRjCSVyZHgsICVyOQorTChsbzEpOgltdWwJdjAKKwlBRERTVUIJJXIxMSwgJXI4CisJbW92CSQwLCBSMzIoJXIxMSkKKwltb3YJLTE2KHJwLG4sOCksICVyMTAKKwlhZGMJJDAsICVyOQorCUFERFNVQgklcmF4LCAlcjEwCisJbW92CS04KHVwLG4sOCksICVyYXgKKwlhZGMJJXJkeCwgJXIxMQorCW1vdgklcjgsIC0yNChycCxuLDgpCisJQUREU1VCCSVyOSwgJXIxMAorCWFkYwkkMCwgJXIxMQorTChsbzApOgltb3YJLTgocnAsbiw4KSwgJXI4CisJbXVsCXYwCisJQUREU1VCCSVyYXgsICVyOAorCW1vdgkkMCwgUjMyKCVyOSkKKwltb3YJKHVwLG4sOCksICVyYXgKKwlhZGMJJXJkeCwgJXI5CisJbW92CSVyMTAsIC0xNihycCxuLDgpCisJQUREU1VCCSVyMTEsICVyOAorCWFkYwkkMCwgJXI5CitMKGxvMyk6CW11bAl2MAorCW1vdgkocnAsbiw4KSwgJXIxMAorCW1vdgkkMCwgUjMyKCVyMTEpCisJQUREU1VCCSVyYXgsICVyMTAKKwltb3YJOCh1cCxuLDgpLCAlcmF4CisJYWRjCSVyZHgsICVyMTEKKwltb3YJJXI4LCAtOChycCxuLDgpCisJQUREU1VCCSVyOSwgJXIxMAorCWFkYwkkMCwgJXIxMQorTChsbzIpOgltb3YJOChycCxuLDgpLCAlcjgKKwltb3YJJXIxMCwgKHJwLG4sOCkKKwlhZGQJJDQsIG4KKwlqbmMJTCh0b3ApCisKK0woZW5kKToJbXVsCXYwCisJQUREU1VCCSVyYXgsICVyOAorCW1vdgkkMCwgUjMyKCVyYXgpCisJYWRjCSVyZHgsICVyYXgKKwlBRERTVUIJJXIxMSwgJXI4CisJYWRjCSQwLCAlcmF4CisJbW92CSVyOCwgKHJwKQorCisJcG9wCSVyYngKKwlGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaW5obS9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaW5obS9nbXAtbXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU2YzEyOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpbmhtL2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDIzOCBAQAorLyogTmVoYWxlbSBnbXAtbXBhcmFtLmggLS0gQ29tcGlsZXIvbWFjaGluZSBwYXJhbWV0ZXIgaGVhZGVyIGZpbGUuCisKK0NvcHlyaWdodCAyMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgNjQKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgOAorCisvKiAyOTMzLTMyMDAgTUh6IEludGVsIFhlb24gWDM0NzAgTmVoYWxlbSAqLworLyogRkZUIHR1bmluZyBsaW1pdCA9IDQ2OCw0MjQsOTMxICovCisvKiBHZW5lcmF0ZWQgYnkgdHVuZXVwLmMsIDIwMTktMTAtMTgsIGdjYyA4LjMgKi8KKworI2RlZmluZSBNT0RfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PRF8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFOX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgIDMKKyNkZWZpbmUgTU9EXzFVX1RPX01PRF8xXzFfVEhSRVNIT0xEICAgICAgICAgIDIKKyNkZWZpbmUgTU9EXzFfMV9UT19NT0RfMV8yX1RIUkVTSE9MRCAgICAgICAgMTEKKyNkZWZpbmUgTU9EXzFfMl9UT19NT0RfMV80X1RIUkVTSE9MRCAgICAgICAgMTYKKyNkZWZpbmUgUFJFSU5WX01PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgIDcKKyNkZWZpbmUgVVNFX1BSRUlOVl9ESVZSRU1fMSAgICAgICAgICAgICAgICAgIDEgIC8qIG5hdGl2ZSAqLworI2RlZmluZSBESVZfUVJfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgMQorI2RlZmluZSBESVZfUVJfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICBNUF9TSVpFX1RfTUFYICAvKiBuZXZlciAqLworI2RlZmluZSBESVZfUVJfMl9QSTJfVEhSRVNIT0xEICAgICAgICAgICAgICAxMAorI2RlZmluZSBESVZFWEFDVF8xX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIEJNT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgICAgICAgIDE3CisKKyNkZWZpbmUgRElWXzFfVlNfTVVMXzFfUEVSQ0VOVCAgICAgICAgICAgICAzMDEKKworI2RlZmluZSBNVUxfVE9PTTIyX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBNVUxfVE9PTTMzX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA1OQorI2RlZmluZSBNVUxfVE9PTTQ0X1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE2OQorI2RlZmluZSBNVUxfVE9PTTZIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDIzMAorI2RlZmluZSBNVUxfVE9PTThIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDMzMworCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTQzX1RIUkVTSE9MRCAgICAgIDk3CisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgMTEwCisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgMTA0CisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTYzX1RIUkVTSE9MRCAgICAgMTAxCisjZGVmaW5lIE1VTF9UT09NNDNfVE9fVE9PTTU0X1RIUkVTSE9MRCAgICAgMTQ3CisKKyNkZWZpbmUgU1FSX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAobmF0aXZlKSAqLworI2RlZmluZSBTUVJfVE9PTTJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAyOAorI2RlZmluZSBTUVJfVE9PTTNfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA5OAorI2RlZmluZSBTUVJfVE9PTTRfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDI1MAorI2RlZmluZSBTUVJfVE9PTTZfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDM1MQorI2RlZmluZSBTUVJfVE9PTThfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDQ3OAorCisjZGVmaW5lIE1VTE1JRF9UT09NNDJfVEhSRVNIT0xEICAgICAgICAgICAgIDI4CisKKyNkZWZpbmUgTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgU1FSTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTMKKworI2RlZmluZSBNVUxfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDM3MiAgLyogayA9IDUgKi8KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDM3MiwgNX0sIHsgICAgIDE3LCA2fSwgeyAgICAgIDksIDV9LCB7ICAgICAxOSwgNn0sIFwKKyAgICB7ICAgICAxMCwgNX0sIHsgICAgIDIxLCA2fSwgeyAgICAgMjEsIDd9LCB7ICAgICAxMSwgNn0sIFwKKyAgICB7ICAgICAyMywgN30sIHsgICAgIDIxLCA4fSwgeyAgICAgMTEsIDd9LCB7ICAgICAyNCwgOH0sIFwKKyAgICB7ICAgICAxMywgN30sIHsgICAgIDI3LCA4fSwgeyAgICAgMTUsIDd9LCB7ICAgICAzMSwgOH0sIFwKKyAgICB7ICAgICAyMSwgOX0sIHsgICAgIDExLCA4fSwgeyAgICAgMjcsIDl9LCB7ICAgICAxNSwgOH0sIFwKKyAgICB7ICAgICAzMywgOX0sIHsgICAgIDE5LCA4fSwgeyAgICAgMzksIDl9LCB7ICAgICAyMywgOH0sIFwKKyAgICB7ICAgICA0NywgOX0sIHsgICAgIDI3LDEwfSwgeyAgICAgMTUsIDl9LCB7ICAgICAzOSwxMH0sIFwKKyAgICB7ICAgICAyMywgOX0sIHsgICAgIDUxLDExfSwgeyAgICAgMTUsMTB9LCB7ICAgICAzMSwgOX0sIFwKKyAgICB7ICAgICA2NywxMH0sIHsgICAgIDM5LCA5fSwgeyAgICAgODMsMTB9LCB7ICAgICA0NywgOX0sIFwKKyAgICB7ICAgICA5NSwxMH0sIHsgICAgIDU1LDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA3OSwxMX0sIFwKKyAgICB7ICAgICA0NywxMH0sIHsgICAgIDk1LDEyfSwgeyAgICAgMzEsIDh9LCB7ICAgIDUxMSwxMH0sIFwKKyAgICB7ICAgIDEzNSwxMX0sIHsgICAgIDc5LDEwfSwgeyAgICAxNTksIDl9LCB7ICAgIDMxOSwxMX0sIFwKKyAgICB7ICAgICA5NSwxMH0sIHsgICAgMTkxLCA5fSwgeyAgICAzODMsMTJ9LCB7ICAgICA2MywxMX0sIFwKKyAgICB7ICAgIDEyNywxMH0sIHsgICAgMjU1LCA5fSwgeyAgICA1MTEsMTF9LCB7ICAgIDE0MywxMH0sIFwKKyAgICB7ICAgIDI4NywgOX0sIHsgICAgNTc1LDEwfSwgeyAgICAzMDMsMTF9LCB7ICAgIDE1OSwxMH0sIFwKKyAgICB7ICAgIDMxOSwxMn0sIHsgICAgIDk1LDExfSwgeyAgICAxOTEsMTB9LCB7ICAgIDM4MywxM30sIFwKKyAgICB7ICAgICA2MywxMn0sIHsgICAgMTI3LDExfSwgeyAgICAyNTUsMTB9LCB7ICAgIDUxMSwxMX0sIFwKKyAgICB7ICAgIDI3MSwxMH0sIHsgICAgNTQzLDExfSwgeyAgICAyODcsMTB9LCB7ICAgIDU3NSwxMX0sIFwKKyAgICB7ICAgIDMwMywxMH0sIHsgICAgNjA3LDExfSwgeyAgICAzMTksMTB9LCB7ICAgIDYzOSwxMX0sIFwKKyAgICB7ICAgIDM1MSwxMH0sIHsgICAgNzAzLDEyfSwgeyAgICAxOTEsMTF9LCB7ICAgIDM4MywxMH0sIFwKKyAgICB7ICAgIDc2NywxMX0sIHsgICAgNDE1LDEwfSwgeyAgICA4MzEsMTJ9LCB7ICAgIDIyMywxMX0sIFwKKyAgICB7ICAgIDQ0NywxMH0sIHsgICAgODk1LDEzfSwgeyAgICAxMjcsMTJ9LCB7ICAgIDI1NSwxMX0sIFwKKyAgICB7ICAgIDU0MywxMn0sIHsgICAgMjg3LDExfSwgeyAgICA2MDcsMTJ9LCB7ICAgIDMxOSwxMX0sIFwKKyAgICB7ICAgIDYzOSwxMn0sIHsgICAgMzUxLDExfSwgeyAgICA3MDMsMTN9LCB7ICAgIDE5MSwxMn0sIFwKKyAgICB7ICAgIDM4MywxMX0sIHsgICAgNzY3LDEyfSwgeyAgICA0MTUsMTF9LCB7ICAgIDgzMSwxMn0sIFwKKyAgICB7ICAgIDQ0NywxMX0sIHsgICAgODk1LDEyfSwgeyAgICA0NzksMTR9LCB7ICAgIDEyNywxM30sIFwKKyAgICB7ICAgIDI1NSwxMn0sIHsgICAgNTQzLDExfSwgeyAgIDEwODcsMTJ9LCB7ICAgIDYwNywxM30sIFwKKyAgICB7ICAgIDMxOSwxMn0sIHsgICAgNzAzLDEzfSwgeyAgICAzODMsMTJ9LCB7ICAgIDgzMSwxM30sIFwKKyAgICB7ICAgIDQ0NywxMn0sIHsgICAgOTU5LDE0fSwgeyAgICAyNTUsMTN9LCB7ICAgIDUxMSwxMn0sIFwKKyAgICB7ICAgMTA4NywxM30sIHsgICAgNTc1LDEyfSwgeyAgIDEyMTUsMTF9LCB7ICAgMjQzMSwxM30sIFwKKyAgICB7ICAgIDYzOSwxMn0sIHsgICAxMjc5LDEzfSwgeyAgICA3MDMsMTJ9LCB7ICAgMTQwNywxNH0sIFwKKyAgICB7ICAgIDM4MywxM30sIHsgICAgODMxLDEyfSwgeyAgIDE2NjMsMTN9LCB7ICAgIDk1OSwxNH0sIFwKKyAgICB7ICAgIDUxMSwxM30sIHsgICAxMDg3LDEyfSwgeyAgIDIxNzUsMTN9LCB7ICAgMTIxNSwxMn0sIFwKKyAgICB7ICAgMjQzMSwxNH0sIHsgICAgNjM5LDEzfSwgeyAgIDEzNDMsMTJ9LCB7ICAgMjY4NywxM30sIFwKKyAgICB7ICAgMTQwNywxMn0sIHsgICAyODE1LDEzfSwgeyAgIDE0NzEsMTR9LCB7ICAgIDc2NywxM30sIFwKKyAgICB7ICAgMTY2MywxNH0sIHsgICAgODk1LDEzfSwgeyAgIDE3OTEsMTV9LCB7ICAgIDUxMSwxNH0sIFwKKyAgICB7ICAgMTAyMywxM30sIHsgICAyMTc1LDE0fSwgeyAgIDExNTEsMTN9LCB7ICAgMjQzMSwxMn0sIFwKKyAgICB7ICAgNDg2MywxNH0sIHsgICAxMjc5LDEzfSwgeyAgIDI2ODcsMTR9LCB7ICAgMTQwNywxM30sIFwKKyAgICB7ICAgMjgxNSwxNX0sIHsgICAgNzY3LDE0fSwgeyAgIDE2NjMsMTN9LCB7ICAgMzQ1NSwxNH0sIFwKKyAgICB7ICAgMTkxOSwxNn0sIHsgICAgNTExLDE1fSwgeyAgIDEwMjMsMTR9LCB7ICAgMjQzMSwxM30sIFwKKyAgICB7ICAgNDg2MywxNX0sIHsgICAxMjc5LDE0fSwgeyAgIDI5NDMsMTN9LCB7ICAgNTg4NywxNX0sIFwKKyAgICB7ICAgMTUzNSwxNH0sIHsgICAzNDU1LDE1fSwgeyAgIDE3OTEsMTR9LCB7ICAgMzgzOSwxNn0sIFwKKyAgICB7ICAgMTAyMywxNX0sIHsgICAyMDQ3LDE0fSwgeyAgIDQyMjMsMTV9LCB7ICAgMjMwMywxNH0sIFwKKyAgICB7ICAgNDg2MywxNX0sIHsgICAyODE1LDE0fSwgeyAgIDU4ODcsMTZ9LCB7ICAgMTUzNSwxNX0sIFwKKyAgICB7ICAgMzMyNywxNH0sIHsgICA2OTExLDE1fSwgeyAgIDM4MzksMTd9LCB7ICAgMTAyMywxNn0sIFwKKyAgICB7ICAgMjA0NywxNX0sIHsgICA0ODYzLDE2fSwgeyAgIDI1NTksMTV9LCB7ICAgNTg4NywxNH0sIFwKKyAgICB7ICAxMTc3NSwxNn0sIHsgICAzMDcxLDE1fSwgeyAgIDY5MTEsMTZ9LCB7ICAgMzU4MywxNX0sIFwKKyAgICB7ICAgNzY3OSwxNH0sIHsgIDE1MzU5LDE3fSwgeyAgIDIwNDcsMTZ9LCB7ICAgNDYwNywxNX0sIFwKKyAgICB7ICAgOTk4MywxNn0sIHsgICA1NjMxLDE1fSwgeyAgMTE3NzUsMTd9LCB7ICAgMzA3MSwxNn0sIFwKKyAgICB7ICA2NTUzNiwxN30sIHsgMTMxMDcyLDE4fSwgeyAyNjIxNDQsMTl9LCB7IDUyNDI4OCwyMH0sIFwKKyAgICB7MTA0ODU3NiwyMX0sIHsyMDk3MTUyLDIyfSwgezQxOTQzMDQsMjN9LCB7ODM4ODYwOCwyNH0gfQorI2RlZmluZSBNVUxfRkZUX1RBQkxFM19TSVpFIDIwNAorI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNDIyNAorCisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgMzM2ICAvKiBrID0gNSAqLworI2RlZmluZSBTUVJfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgMzM2LCA1fSwgeyAgICAgMTksIDZ9LCB7ICAgICAxMCwgNX0sIHsgICAgIDIxLCA2fSwgXAorICAgIHsgICAgIDIxLCA3fSwgeyAgICAgMTEsIDZ9LCB7ICAgICAyMywgN30sIHsgICAgIDIxLCA4fSwgXAorICAgIHsgICAgIDExLCA3fSwgeyAgICAgMjUsIDh9LCB7ICAgICAxMywgN30sIHsgICAgIDI3LCA4fSwgXAorICAgIHsgICAgIDE1LCA3fSwgeyAgICAgMzEsIDh9LCB7ICAgICAyMSwgOX0sIHsgICAgIDExLCA4fSwgXAorICAgIHsgICAgIDI3LCA5fSwgeyAgICAgMTUsIDh9LCB7ICAgICAzMywgOX0sIHsgICAgIDE5LCA4fSwgXAorICAgIHsgICAgIDM5LCA5fSwgeyAgICAgMjMsIDh9LCB7ICAgICA0NywgOX0sIHsgICAgIDI3LDEwfSwgXAorICAgIHsgICAgIDE1LCA5fSwgeyAgICAgMzksMTB9LCB7ICAgICAyMywgOX0sIHsgICAgIDQ3LDExfSwgXAorICAgIHsgICAgIDE1LDEwfSwgeyAgICAgMzEsIDl9LCB7ICAgICA2NywxMH0sIHsgICAgIDM5LCA5fSwgXAorICAgIHsgICAgIDc5LDEwfSwgeyAgICAgNDcsMTF9LCB7ICAgICAzMSwxMH0sIHsgICAgIDc5LDExfSwgXAorICAgIHsgICAgIDQ3LDEwfSwgeyAgICAgOTUsMTJ9LCB7ICAgICAzMSwxMX0sIHsgICAgIDYzLDEwfSwgXAorICAgIHsgICAgMTI3LCA5fSwgeyAgICAyNTUsIDh9LCB7ICAgIDUxMSwxMH0sIHsgICAgMTM1LDExfSwgXAorICAgIHsgICAgIDc5LCA5fSwgeyAgICAzMTksIDZ9LCB7ICAgMjY4NywgN30sIHsgICAxNDA3LCA5fSwgXAorICAgIHsgICAgMzgzLDEyfSwgeyAgICAgNjMsMTF9LCB7ICAgIDEyNywxMH0sIHsgICAgMjU1LCA5fSwgXAorICAgIHsgICAgNTExLDEwfSwgeyAgICAyNzEsIDl9LCB7ICAgIDU0MywxMX0sIHsgICAgMTQzLDEwfSwgXAorICAgIHsgICAgMjg3LCA5fSwgeyAgICA1NzUsMTB9LCB7ICAgIDMwMywgOX0sIHsgICAgNjA3LDEwfSwgXAorICAgIHsgICAgMzE5LDEyfSwgeyAgICAgOTUsMTF9LCB7ICAgIDE5MSwxMH0sIHsgICAgMzgzLDEzfSwgXAorICAgIHsgICAgIDYzLDEyfSwgeyAgICAxMjcsMTF9LCB7ICAgIDI1NSwxMH0sIHsgICAgNTExLDExfSwgXAorICAgIHsgICAgMjcxLDEwfSwgeyAgICA1NDMsMTF9LCB7ICAgIDI4NywxMH0sIHsgICAgNTc1LDExfSwgXAorICAgIHsgICAgMzAzLDEwfSwgeyAgICA2MDcsMTF9LCB7ICAgIDMxOSwxMH0sIHsgICAgNjM5LDExfSwgXAorICAgIHsgICAgMzUxLDEwfSwgeyAgICA3MDMsMTJ9LCB7ICAgIDE5MSwxMX0sIHsgICAgMzgzLDEwfSwgXAorICAgIHsgICAgNzY3LDExfSwgeyAgICA0MTUsMTB9LCB7ICAgIDgzMSwxMn0sIHsgICAgMjIzLDExfSwgXAorICAgIHsgICAgNDQ3LDEwfSwgeyAgICA4OTUsMTF9LCB7ICAgIDQ3OSwxM30sIHsgICAgMTI3LDEyfSwgXAorICAgIHsgICAgMjU1LDExfSwgeyAgICA1MTEsMTB9LCB7ICAgMTAyMywxMX0sIHsgICAgNTQzLDEyfSwgXAorICAgIHsgICAgMjg3LDExfSwgeyAgICA2MDcsMTJ9LCB7ICAgIDMxOSwxMX0sIHsgICAgNjcxLDEyfSwgXAorICAgIHsgICAgMzUxLDExfSwgeyAgICA3MDMsMTN9LCB7ICAgIDE5MSwxMn0sIHsgICAgMzgzLDExfSwgXAorICAgIHsgICAgNzY3LDEyfSwgeyAgICA0MTUsMTF9LCB7ICAgIDgzMSwxMn0sIHsgICAgNDQ3LDExfSwgXAorICAgIHsgICAgODk1LDEyfSwgeyAgICA0NzksMTR9LCB7ICAgIDEyNywxM30sIHsgICAgMjU1LDEyfSwgXAorICAgIHsgICAgNTExLDExfSwgeyAgIDEwMjMsMTJ9LCB7ICAgIDU0MywxMX0sIHsgICAxMDg3LDEyfSwgXAorICAgIHsgICAgNTc1LDExfSwgeyAgIDExNTEsMTJ9LCB7ICAgIDYwNywxM30sIHsgICAgMzE5LDEyfSwgXAorICAgIHsgICAgNjcxLDExfSwgeyAgIDEzNDMsMTJ9LCB7ICAgIDcwMywxM30sIHsgICAgMzgzLDEyfSwgXAorICAgIHsgICAgNzY3LDExfSwgeyAgIDE1MzUsMTJ9LCB7ICAgIDgzMSwxM30sIHsgICAgNDQ3LDEyfSwgXAorICAgIHsgICAgOTU5LDEzfSwgeyAgICA1MTEsMTJ9LCB7ICAgMTA4NywxM30sIHsgICAgNTc1LDEyfSwgXAorICAgIHsgICAxMjE1LDExfSwgeyAgIDI0MzEsMTN9LCB7ICAgIDYzOSwxMn0sIHsgICAxMzQzLDEzfSwgXAorICAgIHsgICAgNzAzLDE0fSwgeyAgICAzODMsMTN9LCB7ICAgIDc2NywxMn0sIHsgICAxNTM1LDEzfSwgXAorICAgIHsgICAgODMxLDEyfSwgeyAgIDE2NjMsMTN9LCB7ICAgIDk1OSwxNH0sIHsgICAgNTExLDEzfSwgXAorICAgIHsgICAxMDg3LDEyfSwgeyAgIDIxNzUsMTN9LCB7ICAgMTIxNSwxMn0sIHsgICAyNDMxLDE0fSwgXAorICAgIHsgICAgNjM5LDEzfSwgeyAgIDEzNDMsMTJ9LCB7ICAgMjY4NywxM30sIHsgICAxNDA3LDEyfSwgXAorICAgIHsgICAyODE1LDEzfSwgeyAgIDE0NzEsMTR9LCB7ICAgIDc2NywxM30sIHsgICAxNjYzLDE0fSwgXAorICAgIHsgICAgODk1LDEzfSwgeyAgIDE3OTEsMTV9LCB7ICAgIDUxMSwxNH0sIHsgICAxMDIzLDEzfSwgXAorICAgIHsgICAyMTc1LDE0fSwgeyAgIDExNTEsMTN9LCB7ICAgMjQzMSwxMn0sIHsgICA0ODYzLDE0fSwgXAorICAgIHsgICAxMjc5LDEzfSwgeyAgIDI2ODcsMTR9LCB7ICAgMTQwNywxM30sIHsgICAyODE1LDE1fSwgXAorICAgIHsgICAgNzY3LDE0fSwgeyAgIDE1MzUsMTN9LCB7ICAgMzA3MSwxNH0sIHsgICAxNjYzLDEzfSwgXAorICAgIHsgICAzNDU1LDE0fSwgeyAgIDE5MTksMTZ9LCB7ICAgIDUxMSwxNX0sIHsgICAxMDIzLDE0fSwgXAorICAgIHsgICAyNDMxLDEzfSwgeyAgIDQ4NjMsMTV9LCB7ICAgMTI3OSwxNH0sIHsgICAyOTQzLDEzfSwgXAorICAgIHsgICA1ODg3LDE1fSwgeyAgIDE1MzUsMTR9LCB7ICAgMzQ1NSwxNX0sIHsgICAxNzkxLDE0fSwgXAorICAgIHsgICAzODM5LDE2fSwgeyAgIDEwMjMsMTV9LCB7ICAgMjA0NywxNH0sIHsgICA0MjIzLDE1fSwgXAorICAgIHsgICAyMzAzLDE0fSwgeyAgIDQ4NjMsMTV9LCB7ICAgMjgxNSwxNH0sIHsgICA1ODg3LDE2fSwgXAorICAgIHsgICAxNTM1LDE1fSwgeyAgIDMzMjcsMTR9LCB7ICAgNjkxMSwxNX0sIHsgICAzODM5LDE3fSwgXAorICAgIHsgICAxMDIzLDE2fSwgeyAgIDIwNDcsMTV9LCB7ICAgNDg2MywxNn0sIHsgICAyNTU5LDE1fSwgXAorICAgIHsgICA1ODg3LDE0fSwgeyAgMTE3NzUsMTZ9LCB7ICAgMzA3MSwxNX0sIHsgICA2NjU1LDE2fSwgXAorICAgIHsgICAzNTgzLDE1fSwgeyAgIDc2NzksMTR9LCB7ICAxNTM1OSwxN30sIHsgICAyMDQ3LDE2fSwgXAorICAgIHsgICA0NjA3LDE1fSwgeyAgIDk5ODMsMTR9LCB7ICAxOTk2NywxNn0sIHsgICA1NjMxLDE1fSwgXAorICAgIHsgIDExNzc1LDE3fSwgeyAgIDMwNzEsMTZ9LCB7ICA2NTUzNiwxN30sIHsgMTMxMDcyLDE4fSwgXAorICAgIHsgMjYyMTQ0LDE5fSwgeyA1MjQyODgsMjB9LCB7MTA0ODU3NiwyMX0sIHsyMDk3MTUyLDIyfSwgXAorICAgIHs0MTk0MzA0LDIzfSwgezgzODg2MDgsMjR9IH0KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTNfU0laRSAyMTgKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDM1MjAKKworI2RlZmluZSBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDQ5CisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgICA4Mzk3CisjZGVmaW5lIFNRUkxPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgIDEwCisjZGVmaW5lIFNRUkxPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIFNRUkxPX1NRUl9USFJFU0hPTEQgICAgICAgICAgICAgICA3MDM1CisKKyNkZWZpbmUgRENfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNDcKKyNkZWZpbmUgRENfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAxNTEKKyNkZWZpbmUgRENfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNDAKKyNkZWZpbmUgRENfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMzAKKworI2RlZmluZSBJTlZfTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAzNAorI2RlZmluZSBJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE5OQorI2RlZmluZSBJTlZfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDE1NworCisjZGVmaW5lIEJJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgMjU0CisjZGVmaW5lIFJFRENfMV9UT19SRURDX05fVEhSRVNIT0xEICAgICAgICAgIDQ4CisKKyNkZWZpbmUgTVVfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDEzMzQKKyNkZWZpbmUgTVVfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgIDEzMzQKKyNkZWZpbmUgTVVQSV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgODMKKyNkZWZpbmUgTVVfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgIDExNDIKKyNkZWZpbmUgTVVfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDEzMDgKKworI2RlZmluZSBQT1dNX1NFQ19UQUJMRSAgMSw2NCw2Niw0NTIsMTQ4NgorCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgIDE4CisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTQxCisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAxMDIzCisKKyNkZWZpbmUgRkFDX0RTQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAxODIKKyNkZWZpbmUgRkFDX09ERF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworCisjZGVmaW5lIE1BVFJJWDIyX1NUUkFTU0VOX1RIUkVTSE9MRCAgICAgICAgIDE5CisjZGVmaW5lIEhHQ0QyX0RJVjFfTUVUSE9EICAgICAgICAgICAgICAgICAgICA1ICAvKiAyLjkxJSBmYXN0ZXIgdGhhbiAzICovCisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAgMTE2CisjZGVmaW5lIEhHQ0RfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTY0CisjZGVmaW5lIEhHQ0RfUkVEVUNFX1RIUkVTSE9MRCAgICAgICAgICAgICAyMjA1CisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgMzIxCisjZGVmaW5lIEdDREVYVF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMzU4CisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAgICA0ICAvKiAwLjEyJSBmYXN0ZXIgdGhhbiAxICovCisKKy8qIFR1bmV1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCB0b29rIDQ1MjExNiBzZWNvbmRzICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaW5obS9oYW1kaXN0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpbmhtL2hhbWRpc3QuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1YTYzZTQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaW5obS9oYW1kaXN0LmFzbQpAQCAtMCwwICsxLDE5NiBAQAorZG5sICBBTUQ2NCBtcG5faGFtZGlzdCAtLSBoYW1taW5nIGRpc3RhbmNlLgorCitkbmwgIENvcHlyaWdodCAyMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkJICAgIGN5Y2xlcy9saW1iCitDIEFNRCBLOCxLOQkJIG4vYQorQyBBTUQgSzEwCQkgMy4yNgorQyBBTUQgYmQxCQkgNC4yCitDIEFNRCBiZDIJCSA0LjIKK0MgQU1EIGJkMwkJID8KK0MgQU1EIGJkNAkJID8KK0MgQU1EIHplbgkJIDEuMTUKK0MgQU1EIGJvYmNhdAkJIDcuMjkKK0MgQU1EIGphZ3VhcgkJIDIuNTMKK0MgSW50ZWwgUDQJCSBuL2EKK0MgSW50ZWwgY29yZTIJCSBuL2EKK0MgSW50ZWwgTkhNCQkgMi4wMworQyBJbnRlbCBTQlIJCSAxLjY2CitDIEludGVsIElCUgkJIDEuNjIKK0MgSW50ZWwgSFdMCQkgMS41MAorQyBJbnRlbCBCV0wJCSAxLjUwCitDIEludGVsIFNLTAkJIDEuNTAKK0MgSW50ZWwgYXRvbQkJIG4vYQorQyBJbnRlbCBTTE0JCSAyLjU1CitDIFZJQSBuYW5vCQkgbi9hCisKK0MgVE9ETworQyAgKiBBbiBBVlggcHNodWZiIGJhc2VkIHZhcmlhbnQgc2hvdWxkIGFwcHJvYWNoIDAuNSBjL2wgb24gSGFzd2VsbCBhbmQgbGF0ZXIKK0MgICAgSW50ZWwgaGFyZHdhcmUuICBQZXJoYXBzIG1peCBzdWNoIGEgbG9vcCB3aXRoIHBvcGNudCBpbnN0cnVjdGlvbnMuCitDICAqIFRoZSByYW5kb20gcGxhY2VtZW50IG9mIHRoZSBMMCwgTDEsIEwyLCBldGMgYmxvY2tzIGFyZSBkdWUgdG8gYnJhbmNoCitDICAgIHNob3J0ZW5pbmcuICBNb3JlIHdvcmsgY291bGQgYmUgZG9uZSB0aGVyZS4KK0MgICogQ29tYmluZSB0aGUgYWNjdW11bGF0b3JzIHJheCBhbmQgcmN4IGludG8gb25lIHJlZ2lzdGVyIHRvIHNhdmUgc29tZQorQyAgICBib29ra2VlcGluZyBhbmQgYSBwdXNoL3BvcCBwYWlyLiAgVW5mb3J0dW5hdGVseSB0aGlzIGNhdXNlIGEgc2xpZ2h0CitDICAgIHNsb3dkb3duIGZvciBhdCBsZWF0IE5ITSBhbmQgU0JSLgorCitkZWZpbmUoYHVwJywJCWAlcmRpJykKK2RlZmluZShgdnAnLAkJYCVyc2knKQorZGVmaW5lKGBuJywJCWAlcmR4JykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworZGVmaW5lKGBzdW0nLCBgbGVhCSgkMSwkMiksICQyJykKK2RlZmluZShgc3VtJywgYGFkZAkkMSwgJDInKQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigzMikKK1BST0xPR1VFKG1wbl9oYW1kaXN0KQorCUZVTkNfRU5UUlkoMykKKwlwdXNoCSVyYngKKwlwdXNoCSVyYnAKKworCW1vdgkodXApLCAlcjEwCisJeG9yCSh2cCksICVyMTAKKworCW1vdglSMzIobiksIFIzMiglcjgpCisJYW5kCSQzLCBSMzIoJXI4KQorCisJeG9yCVIzMiglcmN4KSwgUjMyKCVyY3gpCisJLmJ5dGUJMHhmMywweDQ5LDB4MGYsMHhiOCwweGMyCUMgcG9wY250ICVyMTAsJXJheAorCisJbGVhCUwodGFiKSglcmlwKSwgJXI5CitpZmRlZihgUElDJyxgCisJbW92c2xxCSglcjksJXI4LDQpLCAlcjgKKwlhZGQJJXI5LCAlcjgKKwlqbXAJKiVyOAorJyxgCisJam1wCSooJXI5LCVyOCw4KQorJykKKworTCgzKToJbW92CTgodXApLCAlcjEwCisJbW92CTE2KHVwKSwgJXIxMQorCXhvcgk4KHZwKSwgJXIxMAorCXhvcgkxNih2cCksICVyMTEKKwl4b3IJUjMyKCVyYnApLCBSMzIoJXJicCkKKwlzdWIJJDQsIG4KKwlqbGUJTCh4MykKKwltb3YJMjQodXApLCAlcjgKKwltb3YJMzIodXApLCAlcjkKKwlhZGQJJDI0LCB1cAorCWFkZAkkMjQsIHZwCisJam1wCUwoZTMpCisKK0woMCk6CW1vdgk4KHVwKSwgJXI5CisJeG9yCTgodnApLCAlcjkKKwltb3YJMTYodXApLCAlcjEwCisJbW92CTI0KHVwKSwgJXIxMQorCXhvcglSMzIoJXJieCksIFIzMiglcmJ4KQorCXhvcgkxNih2cCksICVyMTAKKwl4b3IJMjQodnApLCAlcjExCisJYWRkCSQzMiwgdXAKKwlhZGQJJDMyLCB2cAorCXN1YgkkNCwgbgorCWpsZQlMKHg0KQorCisJQUxJR04oMTYpCitMKHRvcCk6CitMKGUwKToJLmJ5dGUJMHhmMywweDQ5LDB4MGYsMHhiOCwweGU5CUMgcG9wY250ICVyOSwlcmJwCisJbW92CSh1cCksICVyOAorCW1vdgk4KHVwKSwgJXI5CisJc3VtKAklcmJ4LCAlcmF4KQorTChlMyk6CS5ieXRlCTB4ZjMsMHg0OSwweDBmLDB4YjgsMHhkYQlDIHBvcGNudCAlcjEwLCVyYngKKwl4b3IJKHZwKSwgJXI4CisJeG9yCTgodnApLCAlcjkKKwlzdW0oCSVyYnAsICVyY3gpCitMKGUyKToJLmJ5dGUJMHhmMywweDQ5LDB4MGYsMHhiOCwweGViCUMgcG9wY250ICVyMTEsJXJicAorCW1vdgkxNih1cCksICVyMTAKKwltb3YJMjQodXApLCAlcjExCisJYWRkCSQzMiwgdXAKKwlzdW0oCSVyYngsICVyYXgpCitMKGUxKToJLmJ5dGUJMHhmMywweDQ5LDB4MGYsMHhiOCwweGQ4CUMgcG9wY250ICVyOCwlcmJ4CisJeG9yCTE2KHZwKSwgJXIxMAorCXhvcgkyNCh2cCksICVyMTEKKwlhZGQJJDMyLCB2cAorCXN1bSgJJXJicCwgJXJjeCkKKwlzdWIJJDQsIG4KKwlqZwlMKHRvcCkKKworTCh4NCk6CS5ieXRlCTB4ZjMsMHg0OSwweDBmLDB4YjgsMHhlOQlDIHBvcGNudCAlcjksJXJicAorCXN1bSgJJXJieCwgJXJheCkKK0woeDMpOgkuYnl0ZQkweGYzLDB4NDksMHgwZiwweGI4LDB4ZGEJQyBwb3BjbnQgJXIxMCwlcmJ4CisJc3VtKAklcmJwLCAlcmN4KQorCS5ieXRlCTB4ZjMsMHg0OSwweDBmLDB4YjgsMHhlYglDIHBvcGNudCAlcjExLCVyYnAKKwlzdW0oCSVyYngsICVyYXgpCisJc3VtKAklcmJwLCAlcmN4KQorTCh4Mik6CWFkZAklcmN4LCAlcmF4CitMKHgxKToJcG9wCSVyYnAKKwlwb3AJJXJieAorCUZVTkNfRVhJVCgpCisJcmV0CisKK0woMik6CW1vdgk4KHVwKSwgJXIxMQorCXhvcgk4KHZwKSwgJXIxMQorCXN1YgkkMiwgbgorCWpsZQlMKG4yKQorCW1vdgkxNih1cCksICVyOAorCW1vdgkyNCh1cCksICVyOQorCXhvcglSMzIoJXJieCksIFIzMiglcmJ4KQorCXhvcgkxNih2cCksICVyOAorCXhvcgkyNCh2cCksICVyOQorCWFkZAkkMTYsIHVwCisJYWRkCSQxNiwgdnAKKwlqbXAJTChlMikKK0wobjIpOgkuYnl0ZQkweGYzLDB4NDksMHgwZiwweGI4LDB4Y2IJQyBwb3BjbnQgJXIxMSwlcmN4CisJam1wCUwoeDIpCisKK0woMSk6CWRlYwluCisJamxlCUwoeDEpCisJbW92CTgodXApLCAlcjgKKwltb3YJMTYodXApLCAlcjkKKwl4b3IJOCh2cCksICVyOAorCXhvcgkxNih2cCksICVyOQorCXhvcglSMzIoJXJicCksIFIzMiglcmJwKQorCW1vdgkyNCh1cCksICVyMTAKKwltb3YJMzIodXApLCAlcjExCisJYWRkCSQ0MCwgdXAKKwlhZGQJJDgsIHZwCisJam1wCUwoZTEpCisKK0VQSUxPR1VFKCkKKwlKVU1QVEFCU0VDVAorCUFMSUdOKDgpCitMKHRhYik6CUpNUEVOVCgJTCgwKSwgTCh0YWIpKQorCUpNUEVOVCgJTCgxKSwgTCh0YWIpKQorCUpNUEVOVCgJTCgyKSwgTCh0YWIpKQorCUpNUEVOVCgJTCgzKSwgTCh0YWIpKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWluaG0vcG9wY291bnQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWluaG0vcG9wY291bnQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhM2M4NjcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaW5obS9wb3Bjb3VudC5hc20KQEAgLTAsMCArMSwxODIgQEAKK2RubCAgQU1ENjQgbXBuX3BvcGNvdW50IC0tIHBvcHVsYXRpb24gY291bnQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCQkgICAgY3ljbGVzL2xpbWIKK0MgQU1EIEs4LEs5CQkgbi9hCitDIEFNRCBLMTAJCSAxLjM5CitDIEFNRCBiZDEJCSA0CitDIEFNRCBiZDIJCSA0CitDIEFNRCBiZDMJCSA/CitDIEFNRCBiZDQJCSA/CitDIEFNRCB6ZW4JCSAwLjcyCitDIEFNRCBib2JjYXQJCSA1Ljc4CitDIEFNRCBqYWd1YXIJCSAxLjI3CitDIEludGVsIFA0CQkgbi9hCitDIEludGVsIGNvcmUyCQkgbi9hCitDIEludGVsIE5ITQkJIDEuMDQKK0MgSW50ZWwgU0JSCQkgMS4wMgorQyBJbnRlbCBJQlIJCSAxLjAKK0MgSW50ZWwgSFdMCQkgMS4wCitDIEludGVsIEJXTAkJIDEuMAorQyBJbnRlbCBTS0wJCSAxLjAKK0MgSW50ZWwgYXRvbQkJIG4vYQorQyBJbnRlbCBTTE0JCSAxLjM0CitDIFZJQSBuYW5vCQkgbi9hCisKK0MgVE9ETworQyAgKiBXZSBjb3VsZCBhcHByb2FjaCAwLjUgYy9sIGZvciBBTUQgWmVuIHdpdGggbW9yZSB1bnJvbGxpbmcuICBUaGF0IHdvdWxkCitDICAgIG5vdCBjYXVzZSBhbnkgYWRkaXRpb25hbCBmZWVkLWluIG92ZXJoZWFkIGFzIHdlIGFscmVhZHkgdXNlIGEganVtcCB0YWJsZS4KK0MgICogQW4gQVZYIHBzaHVmYiBiYXNlZCB2YXJpYW50IHNob3VsZCBhcHByb2FjaCAwLjUgYy9sIG9uIEhhc3dlbGwgYW5kIGxhdGVyCitDICAgIEludGVsIGhhcmR3YXJlLiAgUGVyaGFwcyBtaXggc3VjaCBhIGxvb3Agd2l0aCBwb3BjbnQgaW5zdHJ1Y3Rpb25zLgorQyAgKiBUaGUgcmFuZG9tIHBsYWNlbWVudCBvZiB0aGUgTDAsIEwxLCBMMiwgZXRjIGJsb2NrcyBhcmUgZHVlIHRvIGJyYW5jaAorQyAgICBzaG9ydGVuaW5nLgorCitkZWZpbmUoYHVwJywJCWAlcmRpJykKK2RlZmluZShgbicsCQlgJXJzaScpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDMyKQorUFJPTE9HVUUobXBuX3BvcGNvdW50KQorCUZVTkNfRU5UUlkoMikKKworCW1vdglSMzIobiksIFIzMiglcjgpCisJYW5kCSQ3LCBSMzIoJXI4KQorCisJLmJ5dGUJMHhmMywweDQ4LDB4MGYsMHhiOCwweDA3CUMgcG9wY250ICh1cCksICVyYXgKKwl4b3IJUjMyKCVyY3gpLCBSMzIoJXJjeCkKKworCWxlYQlMKHRhYikoJXJpcCksICVyOQoraWZkZWYoYFBJQycsYAorCW1vdnNscQkoJXI5LCVyOCw0KSwgJXI4CisJYWRkCSVyOSwgJXI4CisJam1wCSolcjgKKycsYAorCWptcAkqKCVyOSwlcjgsOCkKKycpCisKK0woMyk6CS5ieXRlCTB4ZjMsMHg0YywweDBmLDB4YjgsMHg1NywweDA4CUMgcG9wY250IDgodXApLCAlcjEwCisJLmJ5dGUJMHhmMywweDRjLDB4MGYsMHhiOCwweDVmLDB4MTAJQyBwb3BjbnQgMTYodXApLCAlcjExCisJYWRkCSQyNCwgdXAKKwlzdWIJJDgsIG4KKwlqZwlMKGUzNCkKKwlhZGQJJXIxMCwgJXJheAorCWFkZAklcjExLCAlcmF4CitMKHMxKToJRlVOQ19FWElUKCkKKwlyZXQKKworTCgxKToJc3ViCSQ4LCBuCisJamxlCUwoczEpCisJLmJ5dGUJMHhmMywweDRjLDB4MGYsMHhiOCwweDQ3LDB4MDgJQyBwb3BjbnQgOCh1cCksICVyOAorCS5ieXRlCTB4ZjMsMHg0YywweDBmLDB4YjgsMHg0ZiwweDEwCUMgcG9wY250IDE2KHVwKSwgJXI5CisJYWRkCSQ4LCB1cAorCWptcAlMKGUxMikKKworTCg3KToJLmJ5dGUJMHhmMywweDRjLDB4MGYsMHhiOCwweDU3LDB4MDgJQyBwb3BjbnQgMHg4KCVyZGkpLCVyMTAKKwkuYnl0ZQkweGYzLDB4NGMsMHgwZiwweGI4LDB4NWYsMHgxMAlDIHBvcGNudCAweDEwKCVyZGkpLCVyMTEKKwlhZGQJJC04LCB1cAorCWptcAlMKGUwNykKKworTCgwKToJLmJ5dGUJMHhmMywweDQ4LDB4MGYsMHhiOCwweDRmLDB4MDgJQyBwb3BjbnQgMHg4KCVyZGkpLCVyY3gKKwkuYnl0ZQkweGYzLDB4NGMsMHgwZiwweGI4LDB4NTcsMHgxMAlDIHBvcGNudCAweDEwKCVyZGkpLCVyMTAKKwkuYnl0ZQkweGYzLDB4NGMsMHgwZiwweGI4LDB4NWYsMHgxOAlDIHBvcGNudCAweDE4KCVyZGkpLCVyMTEKKwlqbXAJTChlMDcpCisKK0woNCk6CS5ieXRlCTB4ZjMsMHg0OCwweDBmLDB4YjgsMHg0ZiwweDA4CUMgcG9wY250IDB4OCglcmRpKSwlcmN4CisJLmJ5dGUJMHhmMywweDRjLDB4MGYsMHhiOCwweDU3LDB4MTAJQyBwb3BjbnQgMHgxMCglcmRpKSwlcjEwCisJLmJ5dGUJMHhmMywweDRjLDB4MGYsMHhiOCwweDVmLDB4MTgJQyBwb3BjbnQgMHgxOCglcmRpKSwlcjExCisJYWRkCSQzMiwgdXAKKwlzdWIJJDgsIG4KKwlqbGUJTCh4NCkKKworCUFMSUdOKDE2KQorTCh0b3ApOgorTChlMzQpOgkuYnl0ZQkweGYzLDB4NGMsMHgwZiwweGI4LDB4MDcJQyBwb3BjbnQgKCVyZGkpLCVyOAorCS5ieXRlCTB4ZjMsMHg0YywweDBmLDB4YjgsMHg0ZiwweDA4CUMgcG9wY250IDB4OCglcmRpKSwlcjkKKwlhZGQJJXIxMCwgJXJjeAorCWFkZAklcjExLCAlcmF4CitMKGUxMik6CS5ieXRlCTB4ZjMsMHg0YywweDBmLDB4YjgsMHg1NywweDEwCUMgcG9wY250IDB4MTAoJXJkaSksJXIxMAorCS5ieXRlCTB4ZjMsMHg0YywweDBmLDB4YjgsMHg1ZiwweDE4CUMgcG9wY250IDB4MTgoJXJkaSksJXIxMQorCWFkZAklcjgsICVyY3gKKwlhZGQJJXI5LCAlcmF4CitMKGUwNyk6CS5ieXRlCTB4ZjMsMHg0YywweDBmLDB4YjgsMHg0NywweDIwCUMgcG9wY250IDB4MjAoJXJkaSksJXI4CisJLmJ5dGUJMHhmMywweDRjLDB4MGYsMHhiOCwweDRmLDB4MjgJQyBwb3BjbnQgMHgyOCglcmRpKSwlcjkKKwlhZGQJJXIxMCwgJXJjeAorCWFkZAklcjExLCAlcmF4CitMKGU1Nik6CS5ieXRlCTB4ZjMsMHg0YywweDBmLDB4YjgsMHg1NywweDMwCUMgcG9wY250IDB4MzAoJXJkaSksJXIxMAorCS5ieXRlCTB4ZjMsMHg0YywweDBmLDB4YjgsMHg1ZiwweDM4CUMgcG9wY250IDB4MzgoJXJkaSksJXIxMQorCWFkZAkkNjQsIHVwCisJYWRkCSVyOCwgJXJjeAorCWFkZAklcjksICVyYXgKKwlzdWIJJDgsIG4KKwlqZwlMKHRvcCkKKworTCh4NCk6CWFkZAklcjEwLCAlcmN4CisJYWRkCSVyMTEsICVyYXgKK0woeDIpOglhZGQJJXJjeCwgJXJheAorCisJRlVOQ19FWElUKCkKKwlyZXQKKworTCgyKToJLmJ5dGUJMHhmMywweDQ4LDB4MGYsMHhiOCwweDRmLDB4MDgJQyBwb3BjbnQgMHg4KCVyZGkpLCVyY3gKKwlzdWIJJDgsIG4KKwlqbGUJTCh4MikKKwkuYnl0ZQkweGYzLDB4NGMsMHgwZiwweGI4LDB4NDcsMHgxMAlDIHBvcGNudCAweDEwKCVyZGkpLCVyOAorCS5ieXRlCTB4ZjMsMHg0YywweDBmLDB4YjgsMHg0ZiwweDE4CUMgcG9wY250IDB4MTgoJXJkaSksJXI5CisJYWRkCSQxNiwgdXAKKwlqbXAJTChlMTIpCisKK0woNSk6CS5ieXRlCTB4ZjMsMHg0YywweDBmLDB4YjgsMHg0NywweDA4CUMgcG9wY250IDB4OCglcmRpKSwlcjgKKwkuYnl0ZQkweGYzLDB4NGMsMHgwZiwweGI4LDB4NGYsMHgxMAlDIHBvcGNudCAweDEwKCVyZGkpLCVyOQorCWFkZAkkLTI0LCB1cAorCWptcAlMKGU1NikKKworTCg2KToJLmJ5dGUJMHhmMywweDQ4LDB4MGYsMHhiOCwweDRmLDB4MDgJQyBwb3BjbnQgMHg4KCVyZGkpLCVyY3gKKwkuYnl0ZQkweGYzLDB4NGMsMHgwZiwweGI4LDB4NDcsMHgxMAlDIHBvcGNudCAweDEwKCVyZGkpLCVyOAorCS5ieXRlCTB4ZjMsMHg0YywweDBmLDB4YjgsMHg0ZiwweDE4CUMgcG9wY250IDB4MTgoJXJkaSksJXI5CisJYWRkCSQtMTYsIHVwCisJam1wCUwoZTU2KQorRVBJTE9HVUUoKQorCUpVTVBUQUJTRUNUCisJQUxJR04oOCkKK0wodGFiKToJSk1QRU5UKAlMKDApLCBMKHRhYikpCisJSk1QRU5UKAlMKDEpLCBMKHRhYikpCisJSk1QRU5UKAlMKDIpLCBMKHRhYikpCisJSk1QRU5UKAlMKDMpLCBMKHRhYikpCisJSk1QRU5UKAlMKDQpLCBMKHRhYikpCisJSk1QRU5UKAlMKDUpLCBMKHRhYikpCisJSk1QRU5UKAlMKDYpLCBMKHRhYikpCisJSk1QRU5UKAlMKDcpLCBMKHRhYikpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaW5obS9yZWRjXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWluaG0vcmVkY18xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzcxYzFiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWluaG0vcmVkY18xLmFzbQpAQCAtMCwwICsxLDU0OSBAQAorZG5sICBYODYtNjQgbXBuX3JlZGNfMSBvcHRpbWlzZWQgZm9yIEludGVsIE5laGFsZW0gYW5kIFdlc3RtZXJlLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDMtMjAwNSwgMjAwNywgMjAwOCwgMjAxMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBBTUQgSzgsSzkJID8KK0MgQU1EIEsxMAkgPworQyBBTUQgYnVsbAkgPworQyBBTUQgcGlsZQkgPworQyBBTUQgc3RlYW0JID8KK0MgQU1EIGJvYmNhdAkgPworQyBBTUQgamFndWFyCSA/CitDIEludGVsIFA0CSA/CitDIEludGVsIGNvcmUJID8KK0MgSW50ZWwgTkhNCSA/CitDIEludGVsIFNCUgkgPworQyBJbnRlbCBJQlIJID8KK0MgSW50ZWwgSFdMCSA/CitDIEludGVsIEJXTAkgPworQyBJbnRlbCBhdG9tCSA/CitDIFZJQSBuYW5vCSA/CisKK0MgVGhlIGlubmVyIGxvb3BzIG9mIHRoaXMgY29kZSBhcmUgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGEgY29kZSBnZW5lcmF0aW9uIGFuZAorQyBvcHRpbWlzYXRpb24gdG9vbCBzdWl0ZSB3cml0dGVuIGJ5IERhdmlkIEhhcnZleSBhbmQgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitDIFRPRE8KK0MgICogTWljcm8tb3B0aW1pc2UsIG5vbmUgcGVyZm9ybWVkIHRodXMgZmFyLgorQyAgKiBDb25zaWRlciBpbmxpbmluZyBtcG5fYWRkX24uCitDICAqIFNpbmdsZSBiYXNlY2FzZXMgb3V0IGJlZm9yZSB0aGUgcHVzaGVzLgorCitDIFdoZW4gcGxheWluZyB3aXRoIHBvaW50ZXJzLCBzZXQgdGhpcyB0byAkMiB0byBmYWxsIGJhY2sgdG8gY29uc2VydmF0aXZlCitDIGluZGV4aW5nIGluIHdpbmQtZG93biBjb2RlLgorZGVmaW5lKGBJJyxgJDEnKQorCitkZWZpbmUoYHJwJywgICAgICAgICAgYCVyZGknKSAgIEMgcmN4CitkZWZpbmUoYHVwJywgICAgICAgICAgYCVyc2knKSAgIEMgcmR4CitkZWZpbmUoYG1wX3BhcmFtJywgICAgYCVyZHgnKSAgIEMgcjgKK2RlZmluZShgbicsICAgICAgICAgICBgJXJjeCcpICAgQyByOQorZGVmaW5lKGB1MGludicsICAgICAgIGAlcjgnKSAgICBDIHN0YWNrCisKK2RlZmluZShgaScsICAgICAgICAgICBgJXIxNCcpCitkZWZpbmUoYGonLCAgICAgICAgICAgYCVyMTUnKQorZGVmaW5lKGBtcCcsICAgICAgICAgIGAlcjEyJykKK2RlZmluZShgcTAnLCAgICAgICAgICBgJXIxMycpCisKK0MgcmF4IHJieCByY3ggcmR4IHJkaSByc2kgcmJwIHI4IHI5IHIxMCByMTEgcjEyIHIxMyByMTQgcjE1CisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK2RlZmluZShgQUxJR054JywgYEFMSUdOKDE2KScpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDMyKQorUFJPTE9HVUUobXBuX3JlZGNfMSkKKwlGVU5DX0VOVFJZKDQpCitJRkRPUyhgCW1vdgk1NiglcnNwKSwgJXI4CScpCisJcHVzaAklcmJ4CisJcHVzaAklcmJwCisJcHVzaAklcjEyCisJcHVzaAklcjEzCisJcHVzaAklcjE0CisJcHVzaAklcjE1CisKKwltb3YJKHVwKSwgcTAKKwltb3YJbiwgagkJCUMgb3V0ZXIgbG9vcCBpbmR1Y3Rpb24gdmFyCisJbGVhCShtcF9wYXJhbSxuLDgpLCBtcAorCWxlYQkodXAsbiw4KSwgdXAKKwluZWcJbgorCWltdWwJdTBpbnYsIHEwCQlDIGZpcnN0IGl0ZXJhdGlvbiBxMAorCisJdGVzdAkkMSwgUjgobikKKwlqeglMKGJ4MCkKKworTChieDEpOgl0ZXN0CSQyLCBSOChuKQorCWp6CUwoYjMpCisKK0woYjEpOgljbXAJJC0xLCBSMzIobikKKwlqeglMKG4xKQorCitMKG90cDEpOmxlYQkzKG4pLCBpCisJbW92CShtcCxuLDgpLCAlcmF4CisJbW92CSh1cCxuLDgpLCAlcmJwCisJbXVsCXEwCisJYWRkCSVyYXgsICVyYnAKKwltb3YJJDAsIFIzMiglcjkpCisJbW92CTgobXAsbiw4KSwgJXJheAorCWFkYwklcmR4LCAlcjkKKwltdWwJcTAKKwltb3YJJDAsIFIzMiglcjExKQorCW1vdgk4KHVwLG4sOCksICVyYngKKwlhZGQJJXJheCwgJXJieAorCW1vdgkxNihtcCxuLDgpLCAlcmF4CisJYWRjCSVyZHgsICVyMTEKKwlhZGQJJXI5LCAlcmJ4CisJYWRjCSQwLCAlcjExCisJbW92CTE2KHVwLG4sOCksICVyYnAKKwltdWwJcTAKKwlhZGQJJXJheCwgJXJicAorCW1vdgkkMCwgUjMyKCVyOSkKKwltb3YJMjQobXAsbiw4KSwgJXJheAorCWFkYwklcmR4LCAlcjkKKwltb3YJJXJieCwgOCh1cCxuLDgpCisJaW11bAl1MGludiwgJXJieAkJQyBuZXh0IHEgbGltYgorCWptcAlMKGUxKQorCisJQUxJR054CitMKHRwMSk6CW11bAlxMAorCWFkZAklcmF4LCAlcmJwCisJbW92CSQwLCBSMzIoJXI5KQorCW1vdgktMTYobXAsaSw4KSwgJXJheAorCWFkYwklcmR4LCAlcjkKKwltdWwJcTAKKwlhZGQJJXIxMSwgJXJicAorCW1vdgkkMCwgUjMyKCVyMTEpCisJbW92CS0xNih1cCxpLDgpLCAlcjEwCisJYWRjCSQwLCAlcjkKKwlhZGQJJXJheCwgJXIxMAorCW1vdgktOChtcCxpLDgpLCAlcmF4CisJYWRjCSVyZHgsICVyMTEKKwltb3YJJXJicCwgLTI0KHVwLGksOCkKKwlhZGQJJXI5LCAlcjEwCisJYWRjCSQwLCAlcjExCisJbW92CS04KHVwLGksOCksICVyYnAKKwltdWwJcTAKKwlhZGQJJXJheCwgJXJicAorCW1vdgkkMCwgUjMyKCVyOSkKKwltb3YJKG1wLGksOCksICVyYXgKKwlhZGMJJXJkeCwgJXI5CisJbW92CSVyMTAsIC0xNih1cCxpLDgpCitMKGUxKToJYWRkCSVyMTEsICVyYnAKKwlhZGMJJDAsICVyOQorCW11bAlxMAorCW1vdgkodXAsaSw4KSwgJXIxMAorCW1vdgkkMCwgUjMyKCVyMTEpCisJYWRkCSVyYXgsICVyMTAKKwltb3YJOChtcCxpLDgpLCAlcmF4CisJYWRjCSVyZHgsICVyMTEKKwltb3YJJXJicCwgLTgodXAsaSw4KQorCWFkZAklcjksICVyMTAKKwlhZGMJJDAsICVyMTEKKwltb3YJOCh1cCxpLDgpLCAlcmJwCisJbW92CSVyMTAsICh1cCxpLDgpCisJYWRkCSQ0LCBpCisJam5jCUwodHAxKQorCitMKGVkMSk6CW11bAlxMAorCWFkZAklcmF4LCAlcmJwCisJYWRjCSQwLCAlcmR4CisJYWRkCSVyMTEsICVyYnAKKwlhZGMJJDAsICVyZHgKKwltb3YJJXJicCwgSSgtOCh1cCksLTI0KHVwLGksOCkpCisJbW92CSVyZHgsICh1cCxuLDgpCQlDIHVwWzBdCisJbW92CSVyYngsIHEwCQlDIHByZXZpb3VzbHkgY29tcHV0ZWQgcSBsaW1iIC0+IHEwCisJbGVhCTgodXApLCB1cAkJQyB1cCsrCisJZGVjCWoKKwlqbnoJTChvdHAxKQorCWptcAlMKGNqKQorCitMKGIzKToJY21wCSQtMywgUjMyKG4pCisJanoJTChuMykKKworTChvdHAzKTpsZWEJNShuKSwgaQorCW1vdgkobXAsbiw4KSwgJXJheAorCW1vdgkodXAsbiw4KSwgJXJicAorCW11bAlxMAorCWFkZAklcmF4LCAlcmJwCisJbW92CSQwLCBSMzIoJXI5KQorCW1vdgk4KG1wLG4sOCksICVyYXgKKwlhZGMJJXJkeCwgJXI5CisJbXVsCXEwCisJbW92CTgodXAsbiw4KSwgJXJieAorCW1vdgkkMCwgUjMyKCVyMTEpCisJYWRkCSVyYXgsICVyYngKKwltb3YJMTYobXAsbiw4KSwgJXJheAorCWFkYwklcmR4LCAlcjExCisJYWRkCSVyOSwgJXJieAorCWFkYwkkMCwgJXIxMQorCW1vdgkxNih1cCxuLDgpLCAlcmJwCisJbW92CSVyYngsIDgodXAsbiw4KQorCWltdWwJdTBpbnYsICVyYngJCUMgbmV4dCBxIGxpbWIKK0MJam1wCUwodHAzKQorCisJQUxJR054CitMKHRwMyk6CW11bAlxMAorCWFkZAklcmF4LCAlcmJwCisJbW92CSQwLCBSMzIoJXI5KQorCW1vdgktMTYobXAsaSw4KSwgJXJheAorCWFkYwklcmR4LCAlcjkKKwltdWwJcTAKKwlhZGQJJXIxMSwgJXJicAorCW1vdgkkMCwgUjMyKCVyMTEpCisJbW92CS0xNih1cCxpLDgpLCAlcjEwCisJYWRjCSQwLCAlcjkKKwlhZGQJJXJheCwgJXIxMAorCW1vdgktOChtcCxpLDgpLCAlcmF4CisJYWRjCSVyZHgsICVyMTEKKwltb3YJJXJicCwgLTI0KHVwLGksOCkKKwlhZGQJJXI5LCAlcjEwCisJYWRjCSQwLCAlcjExCisJbW92CS04KHVwLGksOCksICVyYnAKKwltdWwJcTAKKwlhZGQJJXJheCwgJXJicAorCW1vdgkkMCwgUjMyKCVyOSkKKwltb3YJKG1wLGksOCksICVyYXgKKwlhZGMJJXJkeCwgJXI5CisJbW92CSVyMTAsIC0xNih1cCxpLDgpCisJYWRkCSVyMTEsICVyYnAKKwlhZGMJJDAsICVyOQorCW11bAlxMAorCW1vdgkodXAsaSw4KSwgJXIxMAorCW1vdgkkMCwgUjMyKCVyMTEpCisJYWRkCSVyYXgsICVyMTAKKwltb3YJOChtcCxpLDgpLCAlcmF4CisJYWRjCSVyZHgsICVyMTEKKwltb3YJJXJicCwgLTgodXAsaSw4KQorCWFkZAklcjksICVyMTAKKwlhZGMJJDAsICVyMTEKKwltb3YJOCh1cCxpLDgpLCAlcmJwCisJbW92CSVyMTAsICh1cCxpLDgpCisJYWRkCSQ0LCBpCisJam5jCUwodHAzKQorCitMKGVkMyk6CW11bAlxMAorCWFkZAklcmF4LCAlcmJwCisJYWRjCSQwLCAlcmR4CisJYWRkCSVyMTEsICVyYnAKKwlhZGMJJDAsICVyZHgKKwltb3YJJXJicCwgSSgtOCh1cCksLTI0KHVwLGksOCkpCisJbW92CSVyZHgsICh1cCxuLDgpCQlDIHVwWzBdCisJbW92CSVyYngsIHEwCQlDIHByZXZpb3VzbHkgY29tcHV0ZWQgcSBsaW1iIC0+IHEwCisJbGVhCTgodXApLCB1cAkJQyB1cCsrCisJZGVjCWoKKwlqbnoJTChvdHAzKQorQwlqbXAJTChjaikKKworTChjaik6CitJRlNURChgCWxlYQkodXAsbiw4KSwgdXAJCUMgcGFyYW0gMjogdXAKKwlsZWEJKHVwLG4sOCksICVyZHgJCUMgcGFyYW0gMzogdXAgLSBuCisJbmVnCVIzMihuKQkJJykJQyBwYXJhbSA0OiBuCisKK0lGRE9TKGAJbGVhCSh1cCxuLDgpLCAlcmR4CQlDIHBhcmFtIDI6IHVwCisJbGVhCSglcmR4LG4sOCksICVyOAkJQyBwYXJhbSAzOiB1cCAtIG4KKwluZWcJUjMyKG4pCisJbW92CW4sICVyOQkJCUMgcGFyYW0gNDogbgorCW1vdglycCwgJXJjeAknKQlDIHBhcmFtIDE6IHJwCisKK0lGU1REKGAJc3ViCSQ4LCAlcnNwCScpCitJRkRPUyhgCXN1YgkkNDAsICVyc3AJJykKKwlBU1NFUlQobnosIGB0ZXN0ICQxNSwgJXJzcCcpCisJQ0FMTCgJbXBuX2FkZF9uKQorSUZTVEQoYAlhZGQJJDgsICVyc3AJJykKK0lGRE9TKGAJYWRkCSQ0MCwgJXJzcAknKQorCitMKHJldCk6CXBvcAklcjE1CisJcG9wCSVyMTQKKwlwb3AJJXIxMworCXBvcAklcjEyCisJcG9wCSVyYnAKKwlwb3AJJXJieAorCUZVTkNfRVhJVCgpCisJcmV0CisKK0woYngwKToJdGVzdAkkMiwgUjgobikKKwlqbnoJTChiMikKKworTChiMCk6CitMKG90cDApOmxlYQkyKG4pLCBpCisJbW92CShtcCxuLDgpLCAlcmF4CisJbXVsCXEwCisJbW92CSQwLCBSMzIoJXIxMSkKKwltb3YJKHVwLG4sOCksICVyMTAKKwlhZGQJJXJheCwgJXIxMAorCW1vdgk4KG1wLG4sOCksICVyYXgKKwlhZGMJJXJkeCwgJXIxMQorCW1vdgk4KHVwLG4sOCksICVyYngKKwltdWwJcTAKKwlhZGQJJXJheCwgJXJieAorCW1vdgkkMCwgUjMyKCVyOSkKKwltb3YJMTYobXAsbiw4KSwgJXJheAorCWFkYwklcmR4LCAlcjkKKwlhZGQJJXIxMSwgJXJieAorCWFkYwkkMCwgJXI5CisJbXVsCXEwCisJbW92CTE2KHVwLG4sOCksICVyMTAKKwltb3YJJDAsIFIzMiglcjExKQorCWFkZAklcmF4LCAlcjEwCisJbW92CTI0KG1wLG4sOCksICVyYXgKKwlhZGMJJXJkeCwgJXIxMQorCW1vdgklcmJ4LCA4KHVwLG4sOCkKKwlpbXVsCXUwaW52LCAlcmJ4CQlDIG5leHQgcSBsaW1iCisJam1wCUwoZTApCisKKwlBTElHTngKK0wodHAwKToJbXVsCXEwCisJYWRkCSVyYXgsICVyYnAKKwltb3YJJDAsIFIzMiglcjkpCisJbW92CS0xNihtcCxpLDgpLCAlcmF4CisJYWRjCSVyZHgsICVyOQorCW11bAlxMAorCWFkZAklcjExLCAlcmJwCisJbW92CSQwLCBSMzIoJXIxMSkKKwltb3YJLTE2KHVwLGksOCksICVyMTAKKwlhZGMJJDAsICVyOQorCWFkZAklcmF4LCAlcjEwCisJbW92CS04KG1wLGksOCksICVyYXgKKwlhZGMJJXJkeCwgJXIxMQorCW1vdgklcmJwLCAtMjQodXAsaSw4KQorCWFkZAklcjksICVyMTAKKwlhZGMJJDAsICVyMTEKKwltb3YJLTgodXAsaSw4KSwgJXJicAorCW11bAlxMAorCWFkZAklcmF4LCAlcmJwCisJbW92CSQwLCBSMzIoJXI5KQorCW1vdgkobXAsaSw4KSwgJXJheAorCWFkYwklcmR4LCAlcjkKKwltb3YJJXIxMCwgLTE2KHVwLGksOCkKKwlhZGQJJXIxMSwgJXJicAorCWFkYwkkMCwgJXI5CisJbXVsCXEwCisJbW92CSh1cCxpLDgpLCAlcjEwCisJbW92CSQwLCBSMzIoJXIxMSkKKwlhZGQJJXJheCwgJXIxMAorCW1vdgk4KG1wLGksOCksICVyYXgKKwlhZGMJJXJkeCwgJXIxMQorCW1vdgklcmJwLCAtOCh1cCxpLDgpCitMKGUwKToJYWRkCSVyOSwgJXIxMAorCWFkYwkkMCwgJXIxMQorCW1vdgk4KHVwLGksOCksICVyYnAKKwltb3YJJXIxMCwgKHVwLGksOCkKKwlhZGQJJDQsIGkKKwlqbmMJTCh0cDApCisKK0woZWQwKToJbXVsCXEwCisJYWRkCSVyYXgsICVyYnAKKwlhZGMJJDAsICVyZHgKKwlhZGQJJXIxMSwgJXJicAorCWFkYwkkMCwgJXJkeAorCW1vdgklcmJwLCBJKC04KHVwKSwtMjQodXAsaSw4KSkKKwltb3YJJXJkeCwgKHVwLG4sOCkJCUMgdXBbMF0KKwltb3YJJXJieCwgcTAJCUMgcHJldmlvdXNseSBjb21wdXRlZCBxIGxpbWIgLT4gcTAKKwlsZWEJOCh1cCksIHVwCQlDIHVwKysKKwlkZWMJagorCWpueglMKG90cDApCisJam1wCUwoY2opCisKK0woYjIpOgljbXAJJC0yLCBSMzIobikKKwlqeglMKG4yKQorCitMKG90cDIpOmxlYQk0KG4pLCBpCisJbW92CShtcCxuLDgpLCAlcmF4CisJbXVsCXEwCisJbW92CSh1cCxuLDgpLCAlcjEwCisJbW92CSQwLCBSMzIoJXIxMSkKKwlhZGQJJXJheCwgJXIxMAorCW1vdgk4KG1wLG4sOCksICVyYXgKKwlhZGMJJXJkeCwgJXIxMQorCW1vdgk4KHVwLG4sOCksICVyYngKKwltdWwJcTAKKwlhZGQJJXJheCwgJXJieAorCW1vdgkkMCwgUjMyKCVyOSkKKwltb3YJMTYobXAsbiw4KSwgJXJheAorCWFkYwklcmR4LCAlcjkKKwltdWwJcTAKKwlhZGQJJXIxMSwgJXJieAorCW1vdgkkMCwgUjMyKCVyMTEpCisJbW92CTE2KHVwLG4sOCksICVyMTAKKwlhZGMJJDAsICVyOQorCWFkZAklcmF4LCAlcjEwCisJbW92CTI0KG1wLG4sOCksICVyYXgKKwlhZGMJJXJkeCwgJXIxMQorCW1vdgklcmJ4LCA4KHVwLG4sOCkKKwlpbXVsCXUwaW52LCAlcmJ4CQlDIG5leHQgcSBsaW1iCisJam1wCUwoZTIpCisKKwlBTElHTngKK0wodHAyKToJbXVsCXEwCisJYWRkCSVyYXgsICVyYnAKKwltb3YJJDAsIFIzMiglcjkpCisJbW92CS0xNihtcCxpLDgpLCAlcmF4CisJYWRjCSVyZHgsICVyOQorCW11bAlxMAorCWFkZAklcjExLCAlcmJwCisJbW92CSQwLCBSMzIoJXIxMSkKKwltb3YJLTE2KHVwLGksOCksICVyMTAKKwlhZGMJJDAsICVyOQorCWFkZAklcmF4LCAlcjEwCisJbW92CS04KG1wLGksOCksICVyYXgKKwlhZGMJJXJkeCwgJXIxMQorCW1vdgklcmJwLCAtMjQodXAsaSw4KQorTChlMik6CWFkZAklcjksICVyMTAKKwlhZGMJJDAsICVyMTEKKwltb3YJLTgodXAsaSw4KSwgJXJicAorCW11bAlxMAorCWFkZAklcmF4LCAlcmJwCisJbW92CSQwLCBSMzIoJXI5KQorCW1vdgkobXAsaSw4KSwgJXJheAorCWFkYwklcmR4LCAlcjkKKwltb3YJJXIxMCwgLTE2KHVwLGksOCkKKwlhZGQJJXIxMSwgJXJicAorCWFkYwkkMCwgJXI5CisJbXVsCXEwCisJbW92CSh1cCxpLDgpLCAlcjEwCisJbW92CSQwLCBSMzIoJXIxMSkKKwlhZGQJJXJheCwgJXIxMAorCW1vdgk4KG1wLGksOCksICVyYXgKKwlhZGMJJXJkeCwgJXIxMQorCW1vdgklcmJwLCAtOCh1cCxpLDgpCisJYWRkCSVyOSwgJXIxMAorCWFkYwkkMCwgJXIxMQorCW1vdgk4KHVwLGksOCksICVyYnAKKwltb3YJJXIxMCwgKHVwLGksOCkKKwlhZGQJJDQsIGkKKwlqbmMJTCh0cDIpCisKK0woZWQyKToJbXVsCXEwCisJYWRkCSVyYXgsICVyYnAKKwlhZGMJJDAsICVyZHgKKwlhZGQJJXIxMSwgJXJicAorCWFkYwkkMCwgJXJkeAorCW1vdgklcmJwLCBJKC04KHVwKSwtMjQodXAsaSw4KSkKKwltb3YJJXJkeCwgKHVwLG4sOCkJCUMgdXBbMF0KKwltb3YJJXJieCwgcTAJCUMgcHJldmlvdXNseSBjb21wdXRlZCBxIGxpbWIgLT4gcTAKKwlsZWEJOCh1cCksIHVwCQlDIHVwKysKKwlkZWMJagorCWpueglMKG90cDIpCisJam1wCUwoY2opCisKK0wobjEpOgltb3YJKG1wX3BhcmFtKSwgJXJheAorCW11bAlxMAorCWFkZAktOCh1cCksICVyYXgKKwlhZGMJKHVwKSwgJXJkeAorCW1vdgklcmR4LCAocnApCisJbW92CSQwLCBSMzIoJXJheCkKKwlhZGMJUjMyKCVyYXgpLCBSMzIoJXJheCkKKwlqbXAJTChyZXQpCisKK0wobjIpOgltb3YJKG1wX3BhcmFtKSwgJXJheAorCW1vdgktMTYodXApLCAlcmJwCisJbXVsCXEwCisJYWRkCSVyYXgsICVyYnAKKwltb3YJJXJkeCwgJXI5CisJYWRjCSQwLCAlcjkKKwltb3YJLTgobXApLCAlcmF4CisJbW92CS04KHVwKSwgJXIxMAorCW11bAlxMAorCWFkZAklcmF4LCAlcjEwCisJbW92CSVyZHgsICVyMTEKKwlhZGMJJDAsICVyMTEKKwlhZGQJJXI5LCAlcjEwCisJYWRjCSQwLCAlcjExCisJbW92CSVyMTAsIHEwCisJaW11bAl1MGludiwgcTAJCUMgbmV4dCBxMAorCW1vdgktMTYobXApLCAlcmF4CisJbXVsCXEwCisJYWRkCSVyYXgsICVyMTAKKwltb3YJJXJkeCwgJXI5CisJYWRjCSQwLCAlcjkKKwltb3YJLTgobXApLCAlcmF4CisJbW92CSh1cCksICVyMTQKKwltdWwJcTAKKwlhZGQJJXJheCwgJXIxNAorCWFkYwkkMCwgJXJkeAorCWFkZAklcjksICVyMTQKKwlhZGMJJDAsICVyZHgKKwl4b3IJUjMyKCVyYXgpLCBSMzIoJXJheCkKKwlhZGQJJXIxMSwgJXIxNAorCWFkYwk4KHVwKSwgJXJkeAorCW1vdgklcjE0LCAocnApCisJbW92CSVyZHgsIDgocnApCisJYWRjCVIzMiglcmF4KSwgUjMyKCVyYXgpCisJam1wCUwocmV0KQorCisJQUxJR054CitMKG4zKToJbW92CS0yNChtcCksICVyYXgKKwltb3YJLTI0KHVwKSwgJXIxMAorCW11bAlxMAorCWFkZAklcmF4LCAlcjEwCisJbW92CS0xNihtcCksICVyYXgKKwltb3YJJXJkeCwgJXIxMQorCWFkYwkkMCwgJXIxMQorCW1vdgktMTYodXApLCAlcmJwCisJbXVsCXEwCisJYWRkCSVyYXgsICVyYnAKKwltb3YJJXJkeCwgJXI5CisJYWRjCSQwLCAlcjkKKwltb3YJLTgobXApLCAlcmF4CisJYWRkCSVyMTEsICVyYnAKKwltb3YJLTgodXApLCAlcjEwCisJYWRjCSQwLCAlcjkKKwltdWwJcTAKKwltb3YJJXJicCwgcTAKKwlpbXVsCXUwaW52LCBxMAkJQyBuZXh0IHEwCisJYWRkCSVyYXgsICVyMTAKKwltb3YJJXJkeCwgJXIxMQorCWFkYwkkMCwgJXIxMQorCW1vdgklcmJwLCAtMTYodXApCisJYWRkCSVyOSwgJXIxMAorCWFkYwkkMCwgJXIxMQorCW1vdgklcjEwLCAtOCh1cCkKKwltb3YJJXIxMSwgLTI0KHVwKQkJQyB1cFswXQorCWxlYQk4KHVwKSwgdXAJCUMgdXArKworCWRlYwlqCisJam56CUwobjMpCisKKwltb3YJLTQ4KHVwKSwgJXJkeAorCW1vdgktNDAodXApLCAlcmJ4CisJeG9yCVIzMiglcmF4KSwgUjMyKCVyYXgpCisJYWRkCSVyYnAsICVyZHgKKwlhZGMJJXIxMCwgJXJieAorCWFkYwktOCh1cCksICVyMTEKKwltb3YJJXJkeCwgKHJwKQorCW1vdgklcmJ4LCA4KHJwKQorCW1vdgklcjExLCAxNihycCkKKwlhZGMJUjMyKCVyYXgpLCBSMzIoJXJheCkKKwlqbXAJTChyZXQpCitFUElMT0dVRSgpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpbmhtL3NlY190YWJzZWxlY3QuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWluaG0vc2VjX3RhYnNlbGVjdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQzNjAzNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpbmhtL3NlY190YWJzZWxlY3QuYXNtCkBAIC0wLDAgKzEsMzcgQEAKK2RubCAgWDg2LTY0IG1wbl9zZWNfdGFic2VsZWN0LgorCitkbmwgIENvcHlyaWdodCAyMDEyLCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX3NlY190YWJzZWxlY3QpCitpbmNsdWRlX21wbihgeDg2XzY0L2Zhc3Rzc2Uvc2VjX3RhYnNlbGVjdC5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlzYnIvYWRkbXVsXzIuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlzYnIvYWRkbXVsXzIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZjBiZjQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaXNici9hZGRtdWxfMi5hc20KQEAgLTAsMCArMSwyMjQgQEAKK2RubCAgQU1ENjQgbXBuX2FkZG11bF8yIG9wdGltaXNlZCBmb3IgSW50ZWwgU2FuZHkgQnJpZGdlLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDMtMjAwNSwgMjAwNywgMjAwOCwgMjAxMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYgliZXN0CitDIEFNRCBLOCxLOQorQyBBTUQgSzEwCitDIEFNRCBidWxsCitDIEFNRCBwaWxlCitDIEFNRCBib2JjYXQKK0MgQU1EIGphZ3VhcgorQyBJbnRlbCBQNAorQyBJbnRlbCBjb3JlCitDIEludGVsIE5ITQorQyBJbnRlbCBTQlIJIDIuOTMJCXRoaXMKK0MgSW50ZWwgSUJSCSAyLjY2CQl0aGlzCitDIEludGVsIEhXTAkgMi41CQkgMi4xNQorQyBJbnRlbCBCV0wKK0MgSW50ZWwgYXRvbQorQyBWSUEgbmFubworCitDIFRoaXMgY29kZSBpcyB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgYSBjb2RlIGdlbmVyYXRpb24gYW5kIG9wdGltaXNhdGlvbiB0b29sCitDIHN1aXRlIHdyaXR0ZW4gYnkgRGF2aWQgSGFydmV5IGFuZCBUb3Jiam9ybiBHcmFubHVuZC4KKworQyBXaGVuIHBsYXlpbmcgd2l0aCBwb2ludGVycywgc2V0IHRoaXMgdG8gJDIgdG8gZmFsbCBiYWNrIHRvIGNvbnNlcnZhdGl2ZQorQyBpbmRleGluZyBpbiB3aW5kLWRvd24gY29kZS4KK2RlZmluZShgSScsYCQxJykKKworCitkZWZpbmUoYHJwJywgICAgICBgJXJkaScpICAgQyByY3gKK2RlZmluZShgdXAnLCAgICAgIGAlcnNpJykgICBDIHJkeAorZGVmaW5lKGBuX3BhcmFtJywgYCVyZHgnKSAgIEMgcjgKK2RlZmluZShgdnAnLCAgICAgIGAlcmN4JykgICBDIHI5CisKK2RlZmluZShgbicsCSAgYCVyY3gnKQorZGVmaW5lKGB2MCcsICAgICAgYCVyYngnKQorZGVmaW5lKGB2MScsICAgICAgYCVyYnAnKQorZGVmaW5lKGB3MCcsICAgICAgYCVyOCcpCitkZWZpbmUoYHcxJywgICAgICBgJXI5JykKK2RlZmluZShgdzInLCAgICAgIGAlcjEwJykKK2RlZmluZShgdzMnLCAgICAgIGAlcjExJykKK2RlZmluZShgWDAnLCAgICAgIGAlcjEyJykKK2RlZmluZShgWDEnLCAgICAgIGAlcjEzJykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMzIpCitQUk9MT0dVRShtcG5fYWRkbXVsXzIpCisJRlVOQ19FTlRSWSg0KQorCXB1c2gJJXJieAorCXB1c2gJJXJicAorCXB1c2gJJXIxMgorCXB1c2gJJXIxMworCisJbW92CSh2cCksIHYwCisJbW92CTgodnApLCB2MQorCisJbW92CSh1cCksICVyYXgKKworCW1vdgluX3BhcmFtLCBuCisJbmVnCW4KKworCWxlYQkodXAsbl9wYXJhbSw4KSwgdXAKKwlsZWEJOChycCxuX3BhcmFtLDgpLCBycAorCW11bAl2MAorCisJdGVzdAkkMSwgUjgobikKKwlqbnoJTChieDEpCisKK0woYngwKToJbW92CS04KHJwLG4sOCksIFgwCisJbW92CSVyZHgsIHcxCisJYWRkCSVyYXgsIFgwCisJYWRjCSQwLCB3MQorCW1vdgkodXAsbiw4KSwgJXJheAorCXhvcgl3MCwgdzAKKwl4b3IJdzMsIHczCisJdGVzdAkkMiwgUjgobikKKwlqbnoJTChiMTApCisKK0woYjAwKToJbm9wCQkJCUMgdGhpcyBub3AgbWFrZSBsb29wIGdvIGZhc3RlciBvbiBTQlIhCisJbXVsCXYxCisJbW92CShycCxuLDgpLCBYMQorCWptcAlMKGxvMCkKKworTChiMTApOglsZWEJLTIobiksIG4KKwlqbXAJTChsbzIpCisKK0woYngxKToJbW92CS04KHJwLG4sOCksIFgxCisJbW92CSVyZHgsIHczCisJYWRkCSVyYXgsIFgxCisJYWRjCSQwLCB3MworCW1vdgkodXAsbiw4KSwgJXJheAorCXhvcgl3MSwgdzEKKwl4b3IJdzIsIHcyCisJdGVzdAkkMiwgUjgobikKKwlqeglMKGIxMSkKKworTChiMDEpOgltb3YJKHJwLG4sOCksIFgwCisJaW5jCW4KKwlqbXAJTChsbzEpCisKK0woYjExKToJZGVjCW4KKwlqbXAJTChsbzMpCisKKwlBTElHTigzMikKK0wodG9wKToKK0wobG8xKToJbXVsCXYxCisJbW92CSVyZHgsIHcwCQlDIDEKKwlhZGQJJXJheCwgWDAJCUMgMAorCWFkYwkkMCwgdzAJCQlDIDEKKwlhZGQJdzEsIFgxCQkJQyAzCisJYWRjCSQwLCB3MwkJCUMgMAorCWFkZAl3MiwgWDAJCQlDIDAKKwlhZGMJJDAsIHcwCQkJQyAxCisJbW92CSh1cCxuLDgpLCAlcmF4CisJbXVsCXYwCisJYWRkCSVyYXgsIFgwCQlDIDAKKwltb3YJJXJkeCwgdzEJCUMgMQorCWFkYwkkMCwgdzEJCQlDIDEKKwltb3YJKHVwLG4sOCksICVyYXgKKwltdWwJdjEKKwltb3YJWDEsIC0xNihycCxuLDgpCQlDIDMKKwltb3YJKHJwLG4sOCksIFgxCQlDIDEKKwlhZGQJdzMsIFgwCQkJQyAwCisJYWRjCSQwLCB3MQkJCUMgMQorTChsbzApOgltb3YJJXJkeCwgdzIJCUMgMgorCW1vdglYMCwgLTgocnAsbiw4KQkJQyAwCisJYWRkCSVyYXgsIFgxCQlDIDEKKwlhZGMJJDAsIHcyCQkJQyAyCisJbW92CTgodXAsbiw4KSwgJXJheAorCWFkZAl3MCwgWDEJCQlDIDEKKwlhZGMJJDAsIHcyCQkJQyAyCisJbXVsCXYwCisJYWRkCSVyYXgsIFgxCQlDIDEKKwltb3YJJXJkeCwgdzMJCUMgMgorCWFkYwkkMCwgdzMJCQlDIDIKKwltb3YJOCh1cCxuLDgpLCAlcmF4CitMKGxvMyk6CW11bAl2MQorCWFkZAl3MSwgWDEJCQlDIDEKKwltb3YJOChycCxuLDgpLCBYMAkJQyAyCisJYWRjCSQwLCB3MwkJCUMgMgorCW1vdgklcmR4LCB3MAkJQyAzCisJYWRkCSVyYXgsIFgwCQlDIDIKKwlhZGMJJDAsIHcwCQkJQyAzCisJbW92CTE2KHVwLG4sOCksICVyYXgKKwltdWwJdjAKKwlhZGQJdzIsIFgwCQkJQyAyCisJbW92CVgxLCAocnAsbiw4KQkJQyAxCisJbW92CSVyZHgsIHcxCQlDIDMKKwlhZGMJJDAsIHcwCQkJQyAzCisJYWRkCSVyYXgsIFgwCQlDIDIKKwlhZGMJJDAsIHcxCQkJQyAzCisJbW92CTE2KHVwLG4sOCksICVyYXgKKwlhZGQJdzMsIFgwCQkJQyAyCisJYWRjCSQwLCB3MQkJCUMgMworTChsbzIpOgltdWwJdjEKKwltb3YJMTYocnAsbiw4KSwgWDEJCUMgMworCWFkZAklcmF4LCBYMQkJQyAzCisJbW92CSVyZHgsIHcyCQlDIDQKKwlhZGMJJDAsIHcyCQkJQyA0CisJbW92CTI0KHVwLG4sOCksICVyYXgKKwltb3YJWDAsIDgocnAsbiw4KQkJQyAyCisJbXVsCXYwCisJYWRkCXcwLCBYMQkJCUMgMworCW1vdgklcmR4LCB3MwkJQyA0CisJYWRjCSQwLCB3MgkJCUMgNAorCWFkZAklcmF4LCBYMQkJQyAzCisJbW92CTI0KHVwLG4sOCksICVyYXgKKwltb3YJMjQocnAsbiw4KSwgWDAJCUMgMAl1c2VsZXNzIGJ1dCBoYXJtbGVzcyBmaW5hbCByZWFkCisJYWRjCSQwLCB3MwkJCUMgNAorCWFkZAkkNCwgbgorCWpuYwlMKHRvcCkKKworTChlbmQpOgltdWwJdjEKKwlhZGQJdzEsIFgxCisJYWRjCSQwLCB3MworCWFkZAl3MiwgJXJheAorCWFkYwkkMCwgJXJkeAorCW1vdglYMSwgSSgtMTYocnApLC0xNihycCxuLDgpKQorCWFkZAl3MywgJXJheAorCWFkYwkkMCwgJXJkeAorCW1vdgklcmF4LCBJKC04KHJwKSwtOChycCxuLDgpKQorCW1vdgklcmR4LCAlcmF4CisKKwlwb3AJJXIxMworCXBvcAklcjEyCisJcG9wCSVyYnAKKwlwb3AJJXJieAorCUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaXNici9hb3JybHNoMV9uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpc2JyL2FvcnJsc2gxX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMTlhODAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaXNici9hb3JybHNoMV9uLmFzbQpAQCAtMCwwICsxLDU0IEBACitkbmwgIEFNRDY0IG1wbl9hZGRsc2gxX24gLS0gcnBbXSA9IHVwW10gKyAodnBbXSA8PCAxKQorZG5sICBBTUQ2NCBtcG5fcnNibHNoMV9uIC0tIHJwW10gPSAodnBbXSA8PCAxKSAtIHVwW10KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDgsIDIwMTAtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitkZWZpbmUoTFNILCAxKQorZGVmaW5lKFJTSCwgNjMpCisKK2lmZGVmKGBPUEVSQVRJT05fYWRkbHNoMV9uJywgYAorCWRlZmluZShBRERTVUIsCWFkZCkKKwlkZWZpbmUoQURDU0JCLAlhZGMpCisJZGVmaW5lKGZ1bmNfbiwJbXBuX2FkZGxzaDFfbikKKwlkZWZpbmUoZnVuY19uYywJbXBuX2FkZGxzaDFfbmMpJykKK2lmZGVmKGBPUEVSQVRJT05fcnNibHNoMV9uJywgYAorCWRlZmluZShBRERTVUIsCXN1YikKKwlkZWZpbmUoQURDU0JCLAlzYmIpCisJZGVmaW5lKGZ1bmNfbiwJbXBuX3JzYmxzaDFfbikKKwlkZWZpbmUoZnVuY19uYywJbXBuX3JzYmxzaDFfbmMpJykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fYWRkbHNoMV9uIG1wbl9hZGRsc2gxX25jIG1wbl9yc2Jsc2gxX24gbXBuX3JzYmxzaDFfbmMpCitpbmNsdWRlX21wbihgeDg2XzY0L2NvcmVpc2JyL2FvcnJsc2hDX24uYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpc2JyL2FvcnJsc2gyX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlzYnIvYW9ycmxzaDJfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I3YmIyMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpc2JyL2FvcnJsc2gyX24uYXNtCkBAIC0wLDAgKzEsNTYgQEAKK2RubCAgQU1ENjQgbXBuX2FkZGxzaDJfbiAtLSBycFtdID0gdXBbXSArICh2cFtdIDw8IDIpCitkbmwgIEFNRDY0IG1wbl9yc2Jsc2gyX24gLS0gcnBbXSA9ICh2cFtdIDw8IDIpIC0gdXBbXQorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3Jiam9ybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAwOCwgMjAxMC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK2RlZmluZShMU0gsIDIpCitkZWZpbmUoUlNILCA2MikKKworaWZkZWYoYE9QRVJBVElPTl9hZGRsc2gyX24nLCBgCisJZGVmaW5lKEFERFNVQiwJYWRkKQorCWRlZmluZShBRENTQkIsCWFkYykKKwlkZWZpbmUoZnVuY19uLAltcG5fYWRkbHNoMl9uKQorCWRlZmluZShmdW5jX25jLAltcG5fYWRkbHNoMl9uYyknKQoraWZkZWYoYE9QRVJBVElPTl9yc2Jsc2gyX24nLCBgCisJZGVmaW5lKEFERFNVQiwJc3ViKQorCWRlZmluZShBRENTQkIsCXNiYikKKwlkZWZpbmUoZnVuY19uLAltcG5fcnNibHNoMl9uKQorCWRlZmluZShmdW5jX25jLAltcG5fcnNibHNoMl9uYyknKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitDIG1wbl9yc2Jsc2gyX25jIHJlbW92ZWQgYmVsb3csIGl0cyBpZGVhIG9mIGNhcnJ5LWluIGlzIGluY29uc2lzdGVudCB3aXRoCitDIHJlZm1wbl9yc2Jsc2gyX25jCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRsc2gyX24gbXBuX2FkZGxzaDJfbmMgbXBuX3JzYmxzaDJfbikKK2luY2x1ZGVfbXBuKGB4ODZfNjQvY29yZWlzYnIvYW9ycmxzaENfbi5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlzYnIvYW9ycmxzaENfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaXNici9hb3JybHNoQ19uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2FjZTQxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlzYnIvYW9ycmxzaENfbi5hc20KQEAgLTAsMCArMSwxNzMgQEAKK2RubCAgQU1ENjQgbXBuX2FkZGxzaENfbiAtLSBycFtdID0gdXBbXSArICh2cFtdIDw8IEMpCitkbmwgIEFNRDY0IG1wbl9yc2Jsc2hDX24gLS0gcnBbXSA9ICh2cFtdIDw8IEMpIC0gdXBbXQorCitkbmwgIENvcHlyaWdodCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCitDCSAgICAgY3ljbGVzL2xpbWIKK0MgQU1EIEs4LEs5CSA/CitDIEFNRCBLMTAJID8KK0MgSW50ZWwgUDQJID8KK0MgSW50ZWwgY29yZTIJIDMuMjUKK0MgSW50ZWwgTkhNCSA0CitDIEludGVsIFNCUgkgMiAgQyAob3IgMS45NSB3aGVuIEwodG9wKSdzIGFsaWdubWVudCA9IDE2IChtb2QgMzIpKQorQyBJbnRlbCBhdG9tCSA/CitDIFZJQSBuYW5vCSA/CisKK0MgVGhpcyBjb2RlIHByb2JhYmx5IHJ1bnMgY2xvc2UgdG8gb3B0aW1hbGx5IG9uIFNhbmR5IEJyaWRnZSAodXNpbmcgNC13YXkKK0MgdW5yb2xsaW5nKS4gIEl0IGFsc28gcnVucyByZWFzb25hYmx5IHdlbGwgb24gQ29yZSAyLCBidXQgaXQgcnVucyBwb29ybHkgb24KK0MgYWxsIG90aGVyIHByb2Nlc3NvcnMsIGluY2x1ZGluZyBOZWhhbGVtLgorCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLAlgJXJkaScpCitkZWZpbmUoYHVwJywJYCVyc2knKQorZGVmaW5lKGB2cCcsCWAlcmR4JykKK2RlZmluZShgbicsCWAlcmN4JykKK2RlZmluZShgY3knLAlgJXI4JykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMTYpCitQUk9MT0dVRShmdW5jX25jKQorCUZVTkNfRU5UUlkoNCkKK0lGRE9TKGAJbW92CTU2KCVyc3ApLCAlcjgJJykKKwlwdXNoCSVyYnAKKwltb3YJY3ksICVyYXgKKwluZWcJJXJheAkJCUMgc2V0IG1zYiBvbiBjYXJyeQorCXhvcglSMzIoJXJicCksIFIzMiglcmJwKQlDIGxpbWIgY2FycnkKKwltb3YJKHZwKSwgJXI4CisJc2hyZAkkUlNILCAlcjgsICVyYnAKKwltb3YJUjMyKG4pLCBSMzIoJXI5KQorCWFuZAkkMywgUjMyKCVyOSkKKwlqZQlMKGIwMCkKKwljbXAJJDIsIFIzMiglcjkpCisJamMJTChiMDEpCisJamUJTChiMTApCisJam1wCUwoYjExKQorRVBJTE9HVUUoKQorCisJQUxJR04oMTYpCitQUk9MT0dVRShmdW5jX24pCisJRlVOQ19FTlRSWSg0KQorCXB1c2gJJXJicAorCXhvcglSMzIoJXJicCksIFIzMiglcmJwKQlDIGxpbWIgY2FycnkKKwltb3YJKHZwKSwgJXI4CisJc2hyZAkkUlNILCAlcjgsICVyYnAKKwltb3YJUjMyKG4pLCBSMzIoJXJheCkKKwlhbmQJJDMsIFIzMiglcmF4KQorCWplCUwoYjAwKQorCWNtcAkkMiwgUjMyKCVyYXgpCisJamMJTChiMDEpCisJamUJTChiMTApCisKK0woYjExKToJbW92CTgodnApLCAlcjkKKwlzaHJkCSRSU0gsICVyOSwgJXI4CisJbW92CTE2KHZwKSwgJXIxMAorCXNocmQJJFJTSCwgJXIxMCwgJXI5CisJYWRkCVIzMiglcmF4KSwgUjMyKCVyYXgpCUMgaW5pdCBjYXJyeSBmbGFnCisJQURDU0JCCSh1cCksICVyYnAKKwlBRENTQkIJOCh1cCksICVyOAorCUFEQ1NCQgkxNih1cCksICVyOQorCW1vdgklcmJwLCAocnApCisJbW92CSVyOCwgOChycCkKKwltb3YJJXI5LCAxNihycCkKKwltb3YJJXIxMCwgJXJicAorCWxlYQkyNCh1cCksIHVwCisJbGVhCTI0KHZwKSwgdnAKKwlsZWEJMjQocnApLCBycAorCXNiYglSMzIoJXJheCksIFIzMiglcmF4KQlDIHNhdmUgY2FycnkgZmxhZworCXN1YgkkMywgbgorCWphCUwodG9wKQorCWptcAlMKGVuZCkKKworTChiMDEpOglhZGQJUjMyKCVyYXgpLCBSMzIoJXJheCkJQyBpbml0IGNhcnJ5IGZsYWcKKwlBRENTQkIJKHVwKSwgJXJicAorCW1vdgklcmJwLCAocnApCisJbW92CSVyOCwgJXJicAorCWxlYQk4KHVwKSwgdXAKKwlsZWEJOCh2cCksIHZwCisJbGVhCTgocnApLCBycAorCXNiYglSMzIoJXJheCksIFIzMiglcmF4KQlDIHNhdmUgY2FycnkgZmxhZworCXN1YgkkMSwgbgorCWphCUwodG9wKQorCWptcAlMKGVuZCkKKworTChiMTApOgltb3YJOCh2cCksICVyOQorCXNocmQJJFJTSCwgJXI5LCAlcjgKKwlhZGQJUjMyKCVyYXgpLCBSMzIoJXJheCkJQyBpbml0IGNhcnJ5IGZsYWcKKwlBRENTQkIJKHVwKSwgJXJicAorCUFEQ1NCQgk4KHVwKSwgJXI4CisJbW92CSVyYnAsIChycCkKKwltb3YJJXI4LCA4KHJwKQorCW1vdgklcjksICVyYnAKKwlsZWEJMTYodXApLCB1cAorCWxlYQkxNih2cCksIHZwCisJbGVhCTE2KHJwKSwgcnAKKwlzYmIJUjMyKCVyYXgpLCBSMzIoJXJheCkJQyBzYXZlIGNhcnJ5IGZsYWcKKwlzdWIJJDIsIG4KKwlqYQlMKHRvcCkKKwlqbXAJTChlbmQpCisKKwlBTElHTigxNikKK0wodG9wKToJbW92CSh2cCksICVyOAorCXNocmQJJFJTSCwgJXI4LCAlcmJwCitMKGIwMCk6CW1vdgk4KHZwKSwgJXI5CisJc2hyZAkkUlNILCAlcjksICVyOAorCW1vdgkxNih2cCksICVyMTAKKwlzaHJkCSRSU0gsICVyMTAsICVyOQorCW1vdgkyNCh2cCksICVyMTEKKwlzaHJkCSRSU0gsICVyMTEsICVyMTAKKwlsZWEJMzIodnApLCB2cAorCWFkZAlSMzIoJXJheCksIFIzMiglcmF4KQlDIHJlc3RvcmUgY2FycnkgZmxhZworCUFEQ1NCQgkodXApLCAlcmJwCisJQURDU0JCCTgodXApLCAlcjgKKwlBRENTQkIJMTYodXApLCAlcjkKKwlBRENTQkIJMjQodXApLCAlcjEwCisJbGVhCTMyKHVwKSwgdXAKKwltb3YJJXJicCwgKHJwKQorCW1vdgklcjgsIDgocnApCisJbW92CSVyOSwgMTYocnApCisJbW92CSVyMTAsIDI0KHJwKQorCW1vdgklcjExLCAlcmJwCisJbGVhCTMyKHJwKSwgcnAKKwlzYmIJUjMyKCVyYXgpLCBSMzIoJXJheCkJQyBzYXZlIGNhcnJ5IGZsYWcKKwlzdWIJJDQsIG4KKwlqbnoJTCh0b3ApCisKK0woZW5kKToJc2hyCSRSU0gsICVyYnAKKwlhZGQJUjMyKCVyYXgpLCBSMzIoJXJheCkJQyByZXN0b3JlIGNhcnJ5IGZsYWcKKwlBRENTQkIJJDAsICVyYnAKKwltb3YJJXJicCwgJXJheAorCXBvcAklcmJwCisJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpc2JyL2FvcnJsc2hfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaXNici9hb3JybHNoX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiOGVlNjgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaXNici9hb3JybHNoX24uYXNtCkBAIC0wLDAgKzEsMjE1IEBACitkbmwgIEFNRDY0IG1wbl9hZGRsc2hfbiAtLSBycFtdID0gdXBbXSArICh2cFtdIDw8IGspCitkbmwgIEFNRDY0IG1wbl9yc2Jsc2hfbiAtLSBycFtdID0gKHZwW10gPDwgaykgLSB1cFtdCitkbmwgIE9wdGltaXNlZCBmb3IgU2FuZHkgQnJpZGdlLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3Jiam9ybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAxMSwgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIKK0MgQU1EIEs4LEs5CSA/CitDIEFNRCBLMTAJIDUuMjUKK0MgSW50ZWwgUDQJID8KK0MgSW50ZWwgY29yZTIJIDMuMQorQyBJbnRlbCBOSE0JIDMuOTUKK0MgSW50ZWwgU0JSCSAyLjc1CitDIEludGVsIGF0b20JID8KK0MgVklBIG5hbm8JID8KKworQyBUaGUgaW5uZXItbG9vcCBwcm9iYWJseSBydW5zIGNsb3NlIHRvIG9wdGltYWxseSBvbiBTYW5keSBCcmlkZ2UgKHVzaW5nIDQtd2F5CitDIHVucm9sbGluZykuICBUaGUgcmVzdCBvZiB0aGUgY29kZSBpcyBxdWl0ZSBjcnVkZSwgYW5kIGNvdWxkIHBlcmhhcHMgYmUgbWFkZQorQyBib3RoIHNtYWxsZXIgYW5kIGZhc3Rlci4KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywJYCVyZGknKQorZGVmaW5lKGB1cCcsCWAlcnNpJykKK2RlZmluZShgdnAnLAlgJXJkeCcpCitkZWZpbmUoYG4nLAlgJXJjeCcpCitkZWZpbmUoYGNudCcsCWAlcjgnKQorZGVmaW5lKGBjeScsCWAlcjknKQkJCUMgZm9yIF9uYyB2YXJpYW50CisKK2lmZGVmKGBPUEVSQVRJT05fYWRkbHNoX24nLCBgCisJZGVmaW5lKEFERFNVQiwJYWRkKQorCWRlZmluZShBRENTQkIsCWFkYykKKwlkZWZpbmUoSUZSU0IsCSkKKwlkZWZpbmUoZnVuY19uLAltcG5fYWRkbHNoX24pCisJZGVmaW5lKGZ1bmNfbmMsCW1wbl9hZGRsc2hfbmMpJykKK2lmZGVmKGBPUEVSQVRJT05fcnNibHNoX24nLCBgCisJZGVmaW5lKEFERFNVQiwJc3ViKQorCWRlZmluZShBRENTQkIsCXNiYikKKwlkZWZpbmUoSUZSU0IsCWAkMScpCisJZGVmaW5lKGZ1bmNfbiwJbXBuX3JzYmxzaF9uKQorCWRlZmluZShmdW5jX25jLAltcG5fcnNibHNoX25jKScpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0MgbXBuX3JzYmxzaF9uYyByZW1vdmVkIGJlbG93LCBpdHMgaWRlYSBvZiBjYXJyeS1pbiBpcyBpbmNvbnNpc3RlbnQgd2l0aAorQyByZWZtcG5fcnNibHNoX25jCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRsc2hfbiBtcG5fYWRkbHNoX25jIG1wbl9yc2Jsc2hfbikKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMzIpCitQUk9MT0dVRShmdW5jX24pCisJRlVOQ19FTlRSWSg0KQorSUZET1MoYAltb3YJNTYoJXJzcCksICVyOGQJJykJQyBjbnQKKwlwdXNoCSVyYngKKwl4b3IJUjMyKCVyYngpLCBSMzIoJXJieCkJQyBjbGVhciBDRiBzYXZlIHJlZ2lzdGVyCitMKGVudCk6CXB1c2gJJXJicAorCW1vdglSMzIobiksIFIzMiglcmJwKQorCW1vdgluLCAlcmF4CisJbW92CVIzMihjbnQpLCBSMzIoJXJjeCkKKwluZWcJUjMyKCVyY3gpCisJYW5kCSQzLCBSMzIoJXJicCkKKwlqeglMKGIwKQorCWxlYQktMzIodnAsJXJicCw4KSwgdnAKKwlsZWEJLTMyKHVwLCVyYnAsOCksIHVwCisJbGVhCS0zMihycCwlcmJwLDgpLCBycAorCWNtcAkkMiwgUjMyKCVyYnApCisJamMJTChiMSkKKwlqeglMKGIyKQorCitMKGIzKToJeG9yCSVyOCwgJXI4CisJbW92CTgodnApLCAlcjkKKwltb3YJMTYodnApLCAlcjEwCisJc2hyZAlSOCglcmN4KSwgJXI5LCAlcjgKKwlzaHJkCVI4KCVyY3gpLCAlcjEwLCAlcjkKKwltb3YJMjQodnApLCAlcjExCisJc2hyZAlSOCglcmN4KSwgJXIxMSwgJXIxMAorCXN1YgkkMywgJXJheAorCWp6CUwoMykKKwlhZGQJUjMyKCVyYngpLCBSMzIoJXJieCkKKwlsZWEJMzIodnApLCB2cAorCUFEQ1NCQgk4KHVwKSwgJXI4CisJQURDU0JCCTE2KHVwKSwgJXI5CisJQURDU0JCCTI0KHVwKSwgJXIxMAorCWxlYQkzMih1cCksIHVwCisJam1wCUwobG8zKQorTCgzKToJYWRkCVIzMiglcmJ4KSwgUjMyKCVyYngpCisJbGVhCTMyKHZwKSwgdnAKKwlBRENTQkIJOCh1cCksICVyOAorCUFEQ1NCQgkxNih1cCksICVyOQorCUFEQ1NCQgkyNCh1cCksICVyMTAKKwlqbXAJTCh3ZDMpCisKK0woYjApOgltb3YJKHZwKSwgJXI4CisJbW92CTgodnApLCAlcjkKKwl4b3IJUjMyKCVyYnApLCBSMzIoJXJicCkKKwlqbXAJTChsbzApCisKK0woYjEpOgl4b3IJJXIxMCwgJXIxMAorCW1vdgkyNCh2cCksICVyMTEKKwlzaHJkCVI4KCVyY3gpLCAlcjExLCAlcjEwCisJc3ViCSQxLCAlcmF4CisJanoJTCgxKQorCWFkZAlSMzIoJXJieCksIFIzMiglcmJ4KQorCWxlYQkzMih2cCksIHZwCisJQURDU0JCCTI0KHVwKSwgJXIxMAorCWxlYQkzMih1cCksIHVwCisJbW92CSh2cCksICVyOAorCWptcAlMKGxvMSkKK0woMSk6CWFkZAlSMzIoJXJieCksIFIzMiglcmJ4KQorCUFEQ1NCQgkyNCh1cCksICVyMTAKKwlqbXAJTCh3ZDEpCisKK0woYjIpOgl4b3IJJXI5LCAlcjkKKwltb3YJMTYodnApLCAlcjEwCisJc2hyZAlSOCglcmN4KSwgJXIxMCwgJXI5CisJbW92CTI0KHZwKSwgJXIxMQorCXNocmQJUjgoJXJjeCksICVyMTEsICVyMTAKKwlzdWIJJDIsICVyYXgKKwlqeglMKDIpCisJYWRkCVIzMiglcmJ4KSwgUjMyKCVyYngpCisJbGVhCTMyKHZwKSwgdnAKKwlBRENTQkIJMTYodXApLCAlcjkKKwlBRENTQkIJMjQodXApLCAlcjEwCisJbGVhCTMyKHVwKSwgdXAKKwlqbXAJTChsbzIpCitMKDIpOglhZGQJUjMyKCVyYngpLCBSMzIoJXJieCkKKwlBRENTQkIJMTYodXApLCAlcjkKKwlBRENTQkIJMjQodXApLCAlcjEwCisJam1wCUwod2QyKQorCisJQUxJR04oMzIpCQkJQyAxNi1ieXRlIGFsaWdubWVudCBpcyBub3QgZW5vdWdoIQorTCh0b3ApOglzaHJkCVI4KCVyY3gpLCAlcjExLCAlcjEwCisJYWRkCVIzMiglcmJ4KSwgUjMyKCVyYngpCisJbGVhCTMyKHZwKSwgdnAKKwlBRENTQkIJKHVwKSwgJXJicAorCUFEQ1NCQgk4KHVwKSwgJXI4CisJQURDU0JCCTE2KHVwKSwgJXI5CisJQURDU0JCCTI0KHVwKSwgJXIxMAorCW1vdgklcmJwLCAocnApCisJbGVhCTMyKHVwKSwgdXAKK0wobG8zKToJbW92CSVyOCwgOChycCkKK0wobG8yKToJbW92CSVyOSwgMTYocnApCisJbW92CSh2cCksICVyOAorTChsbzEpOgltb3YJJXIxMCwgMjQocnApCisJbW92CTgodnApLCAlcjkKKwltb3YJJXIxMSwgJXJicAorCWxlYQkzMihycCksIHJwCisJc2JiCVIzMiglcmJ4KSwgUjMyKCVyYngpCitMKGxvMCk6CXNocmQJUjgoJXJjeCksICVyOCwgJXJicAorCW1vdgkxNih2cCksICVyMTAKKwlzaHJkCVI4KCVyY3gpLCAlcjksICVyOAorCXNocmQJUjgoJXJjeCksICVyMTAsICVyOQorCW1vdgkyNCh2cCksICVyMTEKKwlzdWIJJDQsICVyYXgKKwlqZwlMKHRvcCkKKworCXNocmQJUjgoJXJjeCksICVyMTEsICVyMTAKKwlhZGQJUjMyKCVyYngpLCBSMzIoJXJieCkKKwlBRENTQkIJKHVwKSwgJXJicAorCUFEQ1NCQgk4KHVwKSwgJXI4CisJQURDU0JCCTE2KHVwKSwgJXI5CisJQURDU0JCCTI0KHVwKSwgJXIxMAorCW1vdgklcmJwLCAocnApCitMKHdkMyk6CW1vdgklcjgsIDgocnApCitMKHdkMik6CW1vdgklcjksIDE2KHJwKQorTCh3ZDEpOgltb3YJJXIxMCwgMjQocnApCisJYWRjCVIzMiglcmF4KSwgUjMyKCVyYXgpCUMgcmF4IGlzIHplcm8gYWZ0ZXIgbG9vcAorCXNocglSOCglcmN4KSwgJXIxMQorCUFERFNVQgklcjExLCAlcmF4CitJRlJTQigJbmVnCSVyYXgpCisJcG9wCSVyYnAKKwlwb3AJJXJieAorCUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCitQUk9MT0dVRShmdW5jX25jKQorCUZVTkNfRU5UUlkoNCkKK0lGRE9TKGAJbW92CTU2KCVyc3ApLCAlcjhkCScpCUMgY250CitJRkRPUyhgCW1vdgk2NCglcnNwKSwgJXI5CScpCUMgY3kKKwlwdXNoCSVyYngKKwluZWcJY3kKKwlzYmIJUjMyKCVyYngpLCBSMzIoJXJieCkJQyBpbml0aWFsaXNlIENGIHNhdmUgcmVnaXN0ZXIKKwlqbXAJTChlbnQpCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaXNici9hb3JzX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlzYnIvYW9yc19uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWZlZTNlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlzYnIvYW9yc19uLmFzbQpAQCAtMCwwICsxLDIwMyBAQAorZG5sICBBTUQ2NCBtcG5fYWRkX24sIG1wbl9zdWJfbiBvcHRpbWlzZWQgZm9yIFNhbmR5IGJyaWRnZSwgSXZ5IGJyaWRnZSwgYW5kCitkbmwgIEhhc3dlbGwuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqw7ZybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAwMy0yMDA1LCAyMDA3LCAyMDA4LCAyMDEwLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgY3ljbGVzL2xpbWIKK0MgQU1EIEs4LEs5CSAxLjc1XDIuNTIKK0MgQU1EIEsxMAkgMS41CitDIEFNRCBiZDEJIDEuNjlcMi4yNQorQyBBTUQgYmQyCSAxLjY1CitDIEFNRCBiZDMJID8KK0MgQU1EIGJkNAkgPworQyBBTUQgemVuCSAxLjUKK0MgQU1EIGJ0MQkgMi42NworQyBBTUQgYnQyCSAyLjE2CitDIEludGVsIFA0CTExLjU0CitDIEludGVsIFBOUgkgNQorQyBJbnRlbCBOSE0JIDUuNQorQyBJbnRlbCBTQlIJIDEuNTQKK0MgSW50ZWwgSUJSCSAxLjUKK0MgSW50ZWwgSFdMCSAxLjMyCitDIEludGVsIEJXTAkgMS4wNworQyBJbnRlbCBTS0wJIDEuMjEKK0MgSW50ZWwgYXRvbQkgNC4zCitDIEludGVsIFNMTQkgMworQyBWSUEgbmFubwkgPworCitDIFRoZSBsb29wIG9mIHRoaXMgY29kZSB3YXMgbWFudWFsbHkgd3JpdHRlbi4gIEl0IHJ1bnMgY2xvc2UgdG8gb3B0aW1hbGx5IG9uCitDIEludGVsIFNCUiwgSUJSLCBhbmQgSFdMIGZhciBhcyB3ZSBrbm93LCBleGNlcHQgZm9yIHRoZSBmbHVjdHVhdGlvbiBwcm9ibGVtcy4KK0MgSXQgYWxzbyBydW5zIHNsaWdodGx5IGZhc3RlciBvbiBhdmVyYWdlIG9uIEFNRCBiZDEgYW5kIGJkMi4KK0MKK0MgTm8gbWljcm8tb3B0aW1pc2F0aW9uIGhhcyBiZWVuIGRvbmUuCitDCitDIE4uQi4hICBUaGUgbG9vcCBhbGlnbm1lbnQgcGFkZGluZyBpbnNucyBhcmUgZXhlY3V0ZWQuICBJZiBlZGl0aW5nIHRoZSBjb2RlLAorQyBtYWtlIHN1cmUgdGhlIHBhZGRpbmcgZG9lcyBub3QgYmVjb21lIGV4Y2Vzc2l2ZS4gIEl0IGlzIG5vdyBhIDQtYnl0ZSBub3AuCisKK2RlZmluZShgcnAnLAlgJXJkaScpCUMgcmN4CitkZWZpbmUoYHVwJywJYCVyc2knKQlDIHJkeAorZGVmaW5lKGB2cCcsCWAlcmR4JykJQyByOAorZGVmaW5lKGBuJywJYCVyY3gnKQlDIHI5CitkZWZpbmUoYGN5JywJYCVyOCcpCUMgcnNwKzQwICAgIChtcG5fYWRkX25jIGFuZCBtcG5fc3ViX25jKQorCitpZmRlZihgT1BFUkFUSU9OX2FkZF9uJywgYAorICBkZWZpbmUoQURDU0JCLCAgICBhZGMpCisgIGRlZmluZShmdW5jLCAgICAgIG1wbl9hZGRfbikKKyAgZGVmaW5lKGZ1bmNfbmMsICAgbXBuX2FkZF9uYyknKQoraWZkZWYoYE9QRVJBVElPTl9zdWJfbicsIGAKKyAgZGVmaW5lKEFEQ1NCQiwgICAgc2JiKQorICBkZWZpbmUoZnVuYywgICAgICBtcG5fc3ViX24pCisgIGRlZmluZShmdW5jX25jLCAgIG1wbl9zdWJfbmMpJykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fYWRkX24gbXBuX2FkZF9uYyBtcG5fc3ViX24gbXBuX3N1Yl9uYykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMzIpCitQUk9MT0dVRShmdW5jKQorCUZVTkNfRU5UUlkoNCkKKwl4b3IJJXI4LCAlcjgKKworTChlbnQpOgltb3YJUjMyKG4pLCBSMzIoJXJheCkKKwlzaHIJJDIsIG4KKworCXRlc3QJJDEsIFI4KCVyYXgpCisJam56CUwoYngxKQorCitMKGJ4MCk6CXRlc3QJJDIsIFI4KCVyYXgpCisJam56CUwoYjEwKQorCitMKGIwMCk6CW5lZwklcjgKKwltb3YJKHVwKSwgJXI4CisJbW92CTgodXApLCAlcjkKKwlBRENTQkIJKHZwKSwgJXI4CisJQURDU0JCCTgodnApLCAlcjkKKwltb3YJMTYodXApLCAlcjEwCisJbW92CTI0KHVwKSwgJXIxMQorCWxlYQkzMih1cCksIHVwCisJQURDU0JCCTE2KHZwKSwgJXIxMAorCUFEQ1NCQgkyNCh2cCksICVyMTEKKwlsZWEJMzIodnApLCB2cAorCWxlYQktMTYocnApLCBycAorCWptcAlMKGxvMCkKKworTChiMTApOgluZWcJJXI4CisJbW92CSh1cCksICVyMTAKKwltb3YJOCh1cCksICVyMTEKKwlBRENTQkIJMCh2cCksICVyMTAKKwlBRENTQkIJOCh2cCksICVyMTEKKwlqcmN4eglMKGUyKQorCW1vdgkxNih1cCksICVyOAorCW1vdgkyNCh1cCksICVyOQorCWxlYQkxNih1cCksIHVwCisJQURDU0JCCTE2KHZwKSwgJXI4CisJQURDU0JCCTI0KHZwKSwgJXI5CisJbGVhCTE2KHZwKSwgdnAKK0MJbGVhCShycCksIHJwCisJam1wCUwobG8yKQorCitMKGUyKToJbW92CSVyMTAsIChycCkKKwltb3YJJXIxMSwgOChycCkKKwlzZXRjCVI4KCVyYXgpCisJRlVOQ19FWElUKCkKKwlyZXQKKworTChieDEpOgl0ZXN0CSQyLCBSOCglcmF4KQorCWpueglMKGIxMSkKKworTChiMDEpOgluZWcJJXI4CisJbW92CSh1cCksICVyMTEKKwlBRENTQkIJKHZwKSwgJXIxMQorCWpyY3h6CUwoZTEpCisJbW92CTgodXApLCAlcjgKKwltb3YJMTYodXApLCAlcjkKKwlsZWEJOCh1cCksIHVwCisJbGVhCS04KHJwKSwgcnAKKwlBRENTQkIJOCh2cCksICVyOAorCUFEQ1NCQgkxNih2cCksICVyOQorCWxlYQk4KHZwKSwgdnAKKwlqbXAJTChsbzEpCisKK0woZTEpOgltb3YJJXIxMSwgKHJwKQorCXNldGMJUjgoJXJheCkKKwlGVU5DX0VYSVQoKQorCXJldAorCitMKGIxMSk6CW5lZwklcjgKKwltb3YJKHVwKSwgJXI5CisJQURDU0JCCSh2cCksICVyOQorCW1vdgk4KHVwKSwgJXIxMAorCW1vdgkxNih1cCksICVyMTEKKwlsZWEJMjQodXApLCB1cAorCUFEQ1NCQgk4KHZwKSwgJXIxMAorCUFEQ1NCQgkxNih2cCksICVyMTEKKwlsZWEJMjQodnApLCB2cAorCW1vdgklcjksIChycCkKKwlsZWEJOChycCksIHJwCisJanJjeHoJTChlbmQpCisKKwlBTElHTigzMikKK0wodG9wKToJbW92CSh1cCksICVyOAorCW1vdgk4KHVwKSwgJXI5CisJQURDU0JCCSh2cCksICVyOAorCUFEQ1NCQgk4KHZwKSwgJXI5CitMKGxvMik6CW1vdgklcjEwLCAocnApCitMKGxvMSk6CW1vdgklcjExLCA4KHJwKQorCW1vdgkxNih1cCksICVyMTAKKwltb3YJMjQodXApLCAlcjExCisJbGVhCTMyKHVwKSwgdXAKKwlBRENTQkIJMTYodnApLCAlcjEwCisJQURDU0JCCTI0KHZwKSwgJXIxMQorCWxlYQkzMih2cCksIHZwCitMKGxvMCk6CW1vdgklcjgsIDE2KHJwKQorTChsbzMpOgltb3YJJXI5LCAyNChycCkKKwlsZWEJMzIocnApLCBycAorCWRlYwluCisJam56CUwodG9wKQorCitMKGVuZCk6CW1vdglSMzIobiksIFIzMiglcmF4KQlDIHplcm8gcmF4CisJbW92CSVyMTAsIChycCkKKwltb3YJJXIxMSwgOChycCkKKwlzZXRjCVI4KCVyYXgpCisJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKKwlBTElHTigxNikKK1BST0xPR1VFKGZ1bmNfbmMpCisJRlVOQ19FTlRSWSg0KQorSUZET1MoYAltb3YJNTYoJXJzcCksICVyOAknKQorCWptcAlMKGVudCkKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpc2JyL2FvcnNtdWxfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaXNici9hb3JzbXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0YzE1NzIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaXNici9hb3JzbXVsXzEuYXNtCkBAIC0wLDAgKzEsMjEyIEBACitkbmwgIFg4Ni02NCBtcG5fYWRkbXVsXzEgYW5kIG1wbl9zdWJtdWxfMSBvcHRpbWlzZWQgZm9yIEludGVsIFNhbmR5IEJyaWRnZS4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDAzLTIwMDUsIDIwMDcsIDIwMDgsIDIwMTEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDICAgICAgICAgICAgY3ljbGVzL2xpbWIKK0MgQU1EIEs4LEs5ICAgICAgNC4yNworQyBBTUQgSzEwICAgICAgICA0LjI3ICAgIDQuNTQKK0MgQU1EIGJ1bGwgICAgICAgNC43NgorQyBBTUQgcGlsZSAgICAgICA0LjU1CitDIEFNRCBzdGVhbQorQyBBTUQgZXhjYXZhdG9yCitDIEFNRCBib2JjYXQgICAgIDUuMzAKK0MgQU1EIGphZ3VhciAgICAgNS4yOAorQyBJbnRlbCBQNCAgICAgIDE2LjIgICAgMTcuMQorQyBJbnRlbCBjb3JlMiAgICA1LjI2CitDIEludGVsIE5ITSAgICAgIDUuMDkKK0MgSW50ZWwgU0JSICAgICAgMy4yMQorQyBJbnRlbCBJQlIgICAgICAyLjk2CitDIEludGVsIEhXTCAgICAgIDIuODEKK0MgSW50ZWwgQldMICAgICAgMi43NgorQyBJbnRlbCBTS0wgICAgICAyLjc2CitDIEludGVsIGF0b20gICAgMjEuNQorQyBJbnRlbCBTTE0gICAgICA5LjUKK0MgVklBIG5hbm8KKworQyBUaGUgbG9vcCBvZiB0aGlzIGNvZGUgaXMgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGEgY29kZSBnZW5lcmF0aW9uIGFuZAorQyBvcHRpbWl6YXRpb24gdG9vbCBzdWl0ZSB3cml0dGVuIGJ5IERhdmlkIEhhcnZleSBhbmQgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkZWZpbmUoYHJwJywgICAgICBgJXJkaScpICAgQyByY3gKK2RlZmluZShgdXAnLCAgICAgIGAlcnNpJykgICBDIHJkeAorZGVmaW5lKGBuX3BhcmFtJywgYCVyZHgnKSAgIEMgcjgKK2RlZmluZShgdjAnLCAgICAgIGAlcmN4JykgICBDIHI5CisKK2RlZmluZShgbicsICAgICAgIGAlcmJ4JykKKworZGVmaW5lKGBJJyxgJDEnKQorCitpZmRlZihgT1BFUkFUSU9OX2FkZG11bF8xJyxgCisgICAgICBkZWZpbmUoYEFERFNVQicsICAgICAgICBgYWRkJykKKyAgICAgIGRlZmluZShgZnVuYycsICBgbXBuX2FkZG11bF8xJykKKycpCitpZmRlZihgT1BFUkFUSU9OX3N1Ym11bF8xJyxgCisgICAgICBkZWZpbmUoYEFERFNVQicsICAgICAgICBgc3ViJykKKyAgICAgIGRlZmluZShgZnVuYycsICBgbXBuX3N1Ym11bF8xJykKKycpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FkZG11bF8xIG1wbl9zdWJtdWxfMSkKKworSUZET1MoYAlkZWZpbmUoYHVwJywgICAgIGBgJXJzaScnKScpIGRubAorSUZET1MoYAlkZWZpbmUoYHJwJywgICAgIGBgJXJjeCcnKScpIGRubAorSUZET1MoYAlkZWZpbmUoYHYwJywgICAgIGBgJXI5JycpJykgZG5sCitJRkRPUyhgCWRlZmluZShgcjknLCAgICAgYGByZGknJyknKSBkbmwKK0lGRE9TKGAJZGVmaW5lKGBuX3BhcmFtJyxgYCVyOCcnKScpIGRubAorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigzMikKK1BST0xPR1VFKGZ1bmMpCisKK0lGRE9TKGBgcHVzaAklcnNpCQknJykKK0lGRE9TKGBgcHVzaAklcmRpCQknJykKK0lGRE9TKGBgbW92CSVyZHgsICVyc2kJJycpCisKKwltb3YJKHVwKSwgJXJheAorCXB1c2gJJXJieAorCWxlYQkodXAsbl9wYXJhbSw4KSwgdXAKKwlsZWEJKHJwLG5fcGFyYW0sOCksIHJwCisKKwl0ZXN0CSQxLCBSOChuX3BhcmFtKQorCWpueglMKGIxMykKKworTChiMDIpOgl4b3IJUjMyKCVyMTEpLCBSMzIoJXIxMSkKKwl0ZXN0CSQyLCBSOChuX3BhcmFtKQorCWpueglMKGIyKQorCitMKGIwKToJbW92CSQxLCBSMzIobikKKwlzdWIJbl9wYXJhbSwgbgorCW11bAl2MAorCW1vdgklcmR4LCAlcjkKKwltb3YJLTgocnAsbiw4KSwgJXI4CisJam1wCUwoZTApCisKKwlBTElHTigxNikKK0woYjIpOgltb3YJJC0xLCBuCisJc3ViCW5fcGFyYW0sIG4KKwltdWwJdjAKKwltb3YJOChycCxuLDgpLCAlcjgKKwltb3YJJXJkeCwgJXI5CisJam1wCUwoZTIpCisKKwlBTElHTigxNikKK0woYjEzKToJeG9yCVIzMiglcjkpLCBSMzIoJXI5KQorCXRlc3QJJDIsIFI4KG5fcGFyYW0pCisJam56CUwoYjMpCisKK0woYjEpOgltb3YJJDIsIFIzMihuKQorCXN1YgluX3BhcmFtLCBuCisJam5zCUwoMSkKKwltdWwJdjAKKwltb3YJLTE2KHJwLG4sOCksICVyMTAKKwltb3YJJXJkeCwgJXIxMQorCWptcAlMKGUxKQorCisJQUxJR04oMTYpCitMKGIzKToJeG9yCVIzMihuKSwgUjMyKG4pCisJc3ViCW5fcGFyYW0sIG4KKwltdWwJdjAKKwltb3YJKHJwLG4sOCksICVyMTAKKwlqbXAJTChlMykKKworCUFMSUdOKDMyKQorTCh0b3ApOgltdWwJdjAKKwltb3YJLTE2KHJwLG4sOCksICVyMTAKKwlBRERTVUIJJXIxMSwgJXI4CisJbW92CSVyZHgsICVyMTEKKwlhZGMJJDAsICVyOQorCW1vdgklcjgsIC0yNChycCxuLDgpCitMKGUxKToJQUREU1VCCSVyYXgsICVyMTAKKwltb3YJLTgodXAsbiw4KSwgJXJheAorCWFkYwkkMCwgJXIxMQorCW11bAl2MAorCUFERFNVQgklcjksICVyMTAKKwltb3YJJXJkeCwgJXI5CisJbW92CS04KHJwLG4sOCksICVyOAorCWFkYwkkMCwgJXIxMQorCW1vdgklcjEwLCAtMTYocnAsbiw4KQorTChlMCk6CUFERFNVQgklcmF4LCAlcjgKKwlhZGMJJDAsICVyOQorCW1vdgkodXAsbiw4KSwgJXJheAorCW11bAl2MAorCW1vdgkocnAsbiw4KSwgJXIxMAorCUFERFNVQgklcjExLCAlcjgKKwltb3YJJXI4LCAtOChycCxuLDgpCisJYWRjCSQwLCAlcjkKK0woZTMpOgltb3YJJXJkeCwgJXIxMQorCUFERFNVQgklcmF4LCAlcjEwCisJbW92CTgodXAsbiw4KSwgJXJheAorCWFkYwkkMCwgJXIxMQorCW11bAl2MAorCW1vdgk4KHJwLG4sOCksICVyOAorCUFERFNVQgklcjksICVyMTAKKwltb3YJJXJkeCwgJXI5CisJbW92CSVyMTAsIChycCxuLDgpCisJYWRjCSQwLCAlcjExCitMKGUyKToJQUREU1VCCSVyYXgsICVyOAorCWFkYwkkMCwgJXI5CisJbW92CTE2KHVwLG4sOCksICVyYXgKKwlhZGQJJDQsIG4KKwlqbmMJTCh0b3ApCisKK0woZW5kKToJbXVsCXYwCisJbW92CUkoLTgocnApLC0xNihycCxuLDgpKSwgJXIxMAorCUFERFNVQgklcjExLCAlcjgKKwltb3YJJXJkeCwgJXIxMQorCWFkYwkkMCwgJXI5CisJbW92CSVyOCwgSSgtMTYocnApLC0yNChycCxuLDgpKQorCUFERFNVQgklcmF4LCAlcjEwCisJYWRjCSQwLCAlcjExCisJQUREU1VCCSVyOSwgJXIxMAorCWFkYwkkMCwgJXIxMQorCW1vdgklcjEwLCBJKC04KHJwKSwtMTYocnAsbiw4KSkKKwltb3YJJXIxMSwgJXJheAorCisJcG9wCSVyYngKK0lGRE9TKGBgcG9wCSVyZGkJCScnKQorSUZET1MoYGBwb3AJJXJzaQkJJycpCisJcmV0CisKKwlBTElHTigxNikKK0woMSk6CW11bAl2MAorCUFERFNVQgklcmF4LCAtOChycCkKKwltb3YJJXJkeCwgJXJheAorCWFkYwkkMCwgJXJheAorCXBvcAklcmJ4CitJRkRPUyhgYHBvcAklcmRpCQknJykKK0lGRE9TKGBgcG9wCSVyc2kJCScnKQorCXJldAorRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaXNici9jbmRfYWRkX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlzYnIvY25kX2FkZF9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2FiY2M4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlzYnIvY25kX2FkZF9uLmFzbQpAQCAtMCwwICsxLDE3NCBAQAorZG5sICBBTUQ2NCBtcG5fY25kX2FkZF9uLgorCitkbmwgIENvcHlyaWdodCAyMDExLTIwMTMsIDIwMTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIEFNRCBLOCxLOQorQyBBTUQgSzEwCitDIEFNRCBiZDEKK0MgQU1EIGJkMgorQyBBTUQgYmQzCitDIEFNRCBiZDQKK0MgQU1EIHplbgorQyBBTUQgYm9iY2F0CitDIEFNRCBqYWd1YXIKK0MgSW50ZWwgUDQKK0MgSW50ZWwgUE5SCSAzLjAKK0MgSW50ZWwgTkhNCSAzLjc1CitDIEludGVsIFNCUgkgMS45MworQyBJbnRlbCBJQlIJIDEuODkKK0MgSW50ZWwgSFdMCSAxLjc4CitDIEludGVsIEJXTAkgMS41MAorQyBJbnRlbCBTS0wJIDEuNTAKK0MgSW50ZWwgYXRvbQorQyBJbnRlbCBTTE0JIDQuMAorQyBWSUEgbmFubworCitDIE5PVEVTCitDICAqIEl0IG1pZ2h0IHNlZW0gbmF0dXJhbCB0byB1c2UgdGhlIGNtb3YgaW5zbiBoZXJlLCBidXQgc2luY2UgdGhpcyBmdW5jdGlvbgorQyAgICBpcyBzdXBwb3NlZCB0byBoYXZlIHRoZSBleGFjdCBzYW1lIGV4ZWN1dGlvbiBwYXR0ZXJuIGZvciBjbmQgdHJ1ZSBhbmQKK0MgICAgZmFsc2UsIGFuZCBzaW5jZSBjbW92J3MgZG9jdW1lbnRhdGlvbiBpcyBub3QgY2xlYXIgYWJvdXQgd2hldGhlciBpdAorQyAgICBhY3R1YWxseSByZWFkcyBib3RoIHNvdXJjZSBvcGVyYW5kcyBhbmQgd3JpdGVzIHRoZSByZWdpc3RlciBmb3IgYSBmYWxzZQorQyAgICBjb25kaXRpb24sIHdlIGNhbm5vdCB1c2UgaXQuCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBjbmRfYXJnJywgYCVyZGknKQlkbmwgcmN4CitkZWZpbmUoYHJwJywJICBgJXJzaScpCWRubCByZHgKK2RlZmluZShgdXAnLAkgIGAlcmR4JykJZG5sIHI4CitkZWZpbmUoYHZwJywJICBgJXJjeCcpCWRubCByOQorZGVmaW5lKGBuJywJICBgJXI4JykJZG5sIHJzcCs0MAorCitkZWZpbmUoYGNuZCcsICAgICBgJXJieCcpCisKK2RlZmluZShBRERTVUIsCWFkZCkKK2RlZmluZShBRENTQkIsCWFkYykKK2RlZmluZShmdW5jLAltcG5fY25kX2FkZF9uKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigxNikKK1BST0xPR1VFKG1wbl9jbmRfYWRkX24pCisJRlVOQ19FTlRSWSg0KQorSUZET1MoYAltb3YJNTYoJXJzcCksIFIzMiglcjgpJykKKwlwdXNoCSVyYngKKworCW5lZwljbmRfYXJnCisJc2JiCWNuZCwgY25kCQlDIG1ha2UgY25kIG1hc2sKKworCXRlc3QJJDEsIFI4KG4pCisJanoJTCh4MCkKK0woeDEpOgl0ZXN0CSQyLCBSOChuKQorCWp6CUwoYjEpCisKK0woYjMpOgltb3YJKHZwKSwgJXJkaQorCW1vdgk4KHZwKSwgJXI5CisJbW92CTE2KHZwKSwgJXIxMAorCWFuZAljbmQsICVyZGkKKwlhbmQJY25kLCAlcjkKKwlhbmQJY25kLCAlcjEwCisJQUREU1VCCSh1cCksICVyZGkKKwltb3YJJXJkaSwgKHJwKQorCUFEQ1NCQgk4KHVwKSwgJXI5CisJbW92CSVyOSwgOChycCkKKwlBRENTQkIJMTYodXApLCAlcjEwCisJbW92CSVyMTAsIDE2KHJwKQorCXNiYglSMzIoJXJheCksIFIzMiglcmF4KQlDIHNhdmUgY2FycnkKKwlsZWEJMjQodXApLCB1cAorCWxlYQkyNCh2cCksIHZwCisJbGVhCTI0KHJwKSwgcnAKKwlzdWIJJDMsIG4KKwlqbnoJTCh0b3ApCisJam1wCUwoZW5kKQorCitMKHgwKToJeG9yCVIzMiglcmF4KSwgUjMyKCVyYXgpCisJdGVzdAkkMiwgUjgobikKKwlqeglMKHRvcCkKKworTChiMik6CW1vdgkodnApLCAlcmRpCisJbW92CTgodnApLCAlcjkKKwlhbmQJY25kLCAlcmRpCisJYW5kCWNuZCwgJXI5CisJQUREU1VCCSh1cCksICVyZGkKKwltb3YJJXJkaSwgKHJwKQorCUFEQ1NCQgk4KHVwKSwgJXI5CisJbW92CSVyOSwgOChycCkKKwlzYmIJUjMyKCVyYXgpLCBSMzIoJXJheCkJQyBzYXZlIGNhcnJ5CisJbGVhCTE2KHVwKSwgdXAKKwlsZWEJMTYodnApLCB2cAorCWxlYQkxNihycCksIHJwCisJc3ViCSQyLCBuCisJam56CUwodG9wKQorCWptcAlMKGVuZCkKKworTChiMSk6CW1vdgkodnApLCAlcmRpCisJYW5kCWNuZCwgJXJkaQorCUFERFNVQgkodXApLCAlcmRpCisJbW92CSVyZGksIChycCkKKwlzYmIJUjMyKCVyYXgpLCBSMzIoJXJheCkJQyBzYXZlIGNhcnJ5CisJbGVhCTgodXApLCB1cAorCWxlYQk4KHZwKSwgdnAKKwlsZWEJOChycCksIHJwCisJZGVjCW4KKwlqeglMKGVuZCkKKworCUFMSUdOKDE2KQorTCh0b3ApOgltb3YJKHZwKSwgJXJkaQorCW1vdgk4KHZwKSwgJXI5CisJbW92CTE2KHZwKSwgJXIxMAorCW1vdgkyNCh2cCksICVyMTEKKwlsZWEJMzIodnApLCB2cAorCWFuZAljbmQsICVyZGkKKwlhbmQJY25kLCAlcjkKKwlhbmQJY25kLCAlcjEwCisJYW5kCWNuZCwgJXIxMQorCWFkZAlSMzIoJXJheCksIFIzMiglcmF4KQlDIHJlc3RvcmUgY2FycnkKKwlBRENTQkIJKHVwKSwgJXJkaQorCW1vdgklcmRpLCAocnApCisJQURDU0JCCTgodXApLCAlcjkKKwltb3YJJXI5LCA4KHJwKQorCUFEQ1NCQgkxNih1cCksICVyMTAKKwltb3YJJXIxMCwgMTYocnApCisJQURDU0JCCTI0KHVwKSwgJXIxMQorCWxlYQkzMih1cCksIHVwCisJbW92CSVyMTEsIDI0KHJwKQorCWxlYQkzMihycCksIHJwCisJc2JiCVIzMiglcmF4KSwgUjMyKCVyYXgpCUMgc2F2ZSBjYXJyeQorCXN1YgkkNCwgbgorCWpueglMKHRvcCkKKworTChlbmQpOgluZWcJUjMyKCVyYXgpCisJcG9wCSVyYngKKwlGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlzYnIvY25kX3N1Yl9uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpc2JyL2NuZF9zdWJfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU1NDkyYgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpc2JyL2NuZF9zdWJfbi5hc20KQEAgLTAsMCArMSwyMDAgQEAKK2RubCAgQU1ENjQgbXBuX2NuZF9hZGRfbiwgbXBuX2NuZF9zdWJfbgorCitkbmwgIENvcHlyaWdodCAyMDExLTIwMTMsIDIwMTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIEFNRCBLOCxLOQorQyBBTUQgSzEwCitDIEFNRCBiZDEKK0MgQU1EIGJkMgorQyBBTUQgYmQzCitDIEFNRCBiZDQKK0MgQU1EIHplbgorQyBBTUQgYm9iY2F0CitDIEFNRCBqYWd1YXIKK0MgSW50ZWwgUDQKK0MgSW50ZWwgUE5SCSAzLjAKK0MgSW50ZWwgTkhNCSAyLjc1CitDIEludGVsIFNCUgkgMi4xNQorQyBJbnRlbCBJQlIJIDEuOTYKK0MgSW50ZWwgSFdMCSAyLjAKK0MgSW50ZWwgQldMCSAxLjY1CitDIEludGVsIFNLTAkgMS42NQorQyBJbnRlbCBhdG9tCitDIEludGVsIFNMTQkgNC41CitDIFZJQSBuYW5vCisKK0MgTk9URVMKK0MgICogSXQgbWlnaHQgc2VlbSBuYXR1cmFsIHRvIHVzZSB0aGUgY21vdiBpbnNuIGhlcmUsIGJ1dCBzaW5jZSB0aGlzIGZ1bmN0aW9uCitDICAgIGlzIHN1cHBvc2VkIHRvIGhhdmUgdGhlIGV4YWN0IHNhbWUgZXhlY3V0aW9uIHBhdHRlcm4gZm9yIGNuZCB0cnVlIGFuZAorQyAgICBmYWxzZSwgYW5kIHNpbmNlIGNtb3YncyBkb2N1bWVudGF0aW9uIGlzIG5vdCBjbGVhciBhYm91dCB3aGV0aGVyIGl0CitDICAgIGFjdHVhbGx5IHJlYWRzIGJvdGggc291cmNlIG9wZXJhbmRzIGFuZCB3cml0ZXMgdGhlIHJlZ2lzdGVyIGZvciBhIGZhbHNlCitDICAgIGNvbmRpdGlvbiwgd2UgY2Fubm90IHVzZSBpdC4KK0MgICogR2l2ZW4gdGhhdCB3ZSBoYXZlIGEgZGVkaWNhdGVkIGNuZF9hZGRfbiwgaXQgbWlnaHQgbG9vayBzdHJhbmdlIHRoYXQgdGhpcworQyAgICBmaWxlIHByb3ZpZGVzIGNuZF9hZGRfbiBhbmQgbm90IGp1c3QgY25kX3N1Yl9uLiAgQnV0IHRoYXQncyBoYXJtbGVzcywgYW5kCitDICAgIHRoaXMgZmlsZSdzIGdlbmVyYWxpdHkgbWlnaHQgY29tZSBpbiBoYW5keSBmb3Igc29tZSBwaXBlbGluZS4KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYGNuZF9hcmcnLCBgJXJkaScpCWRubCByY3gKK2RlZmluZShgcnAnLAkgIGAlcnNpJykJZG5sIHJkeAorZGVmaW5lKGB1cCcsCSAgYCVyZHgnKQlkbmwgcjgKK2RlZmluZShgdnAnLAkgIGAlcmN4JykJZG5sIHI5CitkZWZpbmUoYG4nLAkgIGAlcjgnKQlkbmwgcnNwKzQwCisKK2RlZmluZShgY25kJywgICAgIGAlcmJ4JykKKworaWZkZWYoYE9QRVJBVElPTl9jbmRfYWRkX24nLGAKKwlkZWZpbmUoQUREU1VCLAlhZGQpCisJZGVmaW5lKEFEQ1NCQiwJYWRjKQorCWRlZmluZShmdW5jLAltcG5fY25kX2FkZF9uKScpCitpZmRlZihgT1BFUkFUSU9OX2NuZF9zdWJfbicsYAorCWRlZmluZShBRERTVUIsCXN1YikKKwlkZWZpbmUoQURDU0JCLAlzYmIpCisJZGVmaW5lKGZ1bmMsCW1wbl9jbmRfc3ViX24pJykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fY25kX2FkZF9uIG1wbl9jbmRfc3ViX24pCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUoZnVuYykKKwlGVU5DX0VOVFJZKDQpCitJRkRPUyhgCW1vdgk1NiglcnNwKSwgUjMyKCVyOCknKQorCXB1c2gJJXJieAorCXB1c2gJJXJicAorCXB1c2gJJXIxMgorCXB1c2gJJXIxMworCisJbmVnCWNuZF9hcmcKKwlzYmIJY25kLCBjbmQJCUMgbWFrZSBjbmQgbWFzaworCisJdGVzdAkkMSwgUjgobikKKwlqeglMKHgwKQorTCh4MSk6CXRlc3QJJDIsIFI4KG4pCisJanoJTChiMSkKKworTChiMyk6CW1vdgkodnApLCAlcmRpCisJbW92CTgodnApLCAlcjkKKwltb3YJMTYodnApLCAlcjEwCisJYW5kCWNuZCwgJXJkaQorCW1vdgkodXApLCAlcjEyCisJYW5kCWNuZCwgJXI5CisJbW92CTgodXApLCAlcjEzCisJYW5kCWNuZCwgJXIxMAorCW1vdgkxNih1cCksICVyYnAKKwlBRERTVUIJJXJkaSwgJXIxMgorCW1vdgklcjEyLCAocnApCisJQURDU0JCCSVyOSwgJXIxMworCW1vdgklcjEzLCA4KHJwKQorCUFEQ1NCQgklcjEwLCAlcmJwCisJbW92CSVyYnAsIDE2KHJwKQorCXNiYglSMzIoJXJheCksIFIzMiglcmF4KQlDIHNhdmUgY2FycnkKKwlsZWEJMjQodXApLCB1cAorCWxlYQkyNCh2cCksIHZwCisJbGVhCTI0KHJwKSwgcnAKKwlzdWIJJDMsIG4KKwlqbnoJTCh0b3ApCisJam1wCUwoZW5kKQorCitMKHgwKToJeG9yCVIzMiglcmF4KSwgUjMyKCVyYXgpCisJdGVzdAkkMiwgUjgobikKKwlqeglMKHRvcCkKKworTChiMik6CW1vdgkodnApLCAlcmRpCisJbW92CTgodnApLCAlcjkKKwltb3YJKHVwKSwgJXIxMgorCWFuZAljbmQsICVyZGkKKwltb3YJOCh1cCksICVyMTMKKwlhbmQJY25kLCAlcjkKKwlBRERTVUIJJXJkaSwgJXIxMgorCW1vdgklcjEyLCAocnApCisJQURDU0JCCSVyOSwgJXIxMworCW1vdgklcjEzLCA4KHJwKQorCXNiYglSMzIoJXJheCksIFIzMiglcmF4KQlDIHNhdmUgY2FycnkKKwlsZWEJMTYodXApLCB1cAorCWxlYQkxNih2cCksIHZwCisJbGVhCTE2KHJwKSwgcnAKKwlzdWIJJDIsIG4KKwlqbnoJTCh0b3ApCisJam1wCUwoZW5kKQorCitMKGIxKToJbW92CSh2cCksICVyZGkKKwltb3YJKHVwKSwgJXIxMgorCWFuZAljbmQsICVyZGkKKwlBRERTVUIJJXJkaSwgJXIxMgorCW1vdgklcjEyLCAocnApCisJc2JiCVIzMiglcmF4KSwgUjMyKCVyYXgpCUMgc2F2ZSBjYXJyeQorCWxlYQk4KHVwKSwgdXAKKwlsZWEJOCh2cCksIHZwCisJbGVhCTgocnApLCBycAorCWRlYwluCisJanoJTChlbmQpCisKKwlBTElHTigxNikKK0wodG9wKToJbW92CSh2cCksICVyZGkKKwltb3YJOCh2cCksICVyOQorCW1vdgkxNih2cCksICVyMTAKKwltb3YJMjQodnApLCAlcjExCisJbGVhCTMyKHZwKSwgdnAKKwlhbmQJY25kLCAlcmRpCisJbW92CSh1cCksICVyMTIKKwlhbmQJY25kLCAlcjkKKwltb3YJOCh1cCksICVyMTMKKwlhbmQJY25kLCAlcjEwCisJbW92CTE2KHVwKSwgJXJicAorCWFuZAljbmQsICVyMTEKKwlhZGQJUjMyKCVyYXgpLCBSMzIoJXJheCkJQyByZXN0b3JlIGNhcnJ5CisJbW92CTI0KHVwKSwgJXJheAorCWxlYQkzMih1cCksIHVwCisJQURDU0JCCSVyZGksICVyMTIKKwltb3YJJXIxMiwgKHJwKQorCUFEQ1NCQgklcjksICVyMTMKKwltb3YJJXIxMywgOChycCkKKwlBRENTQkIJJXIxMCwgJXJicAorCW1vdgklcmJwLCAxNihycCkKKwlBRENTQkIJJXIxMSwgJXJheAorCW1vdgklcmF4LCAyNChycCkKKwlsZWEJMzIocnApLCBycAorCXNiYglSMzIoJXJheCksIFIzMiglcmF4KQlDIHNhdmUgY2FycnkKKwlzdWIJJDQsIG4KKwlqbnoJTCh0b3ApCisKK0woZW5kKToJbmVnCVIzMiglcmF4KQorCXBvcAklcjEzCisJcG9wCSVyMTIKKwlwb3AJJXJicAorCXBvcAklcmJ4CisJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpc2JyL2RpdnJlbV8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpc2JyL2RpdnJlbV8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWYzNzFmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlzYnIvZGl2cmVtXzEuYXNtCkBAIC0wLDAgKzEsMzcgQEAKK2RubCAgWDg2LTY0IG1wbl9kaXZyZW1fMQorCitkbmwgIENvcHlyaWdodCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2RpdnJlbV8xIG1wbl9wcmVpbnZfZGl2cmVtXzEpCitpbmNsdWRlX21wbihgeDg2XzY0L2RpdnJlbV8xLmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaXNici9nY2RfMTEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlzYnIvZ2NkXzExLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzIzMDkzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlzYnIvZ2NkXzExLmFzbQpAQCAtMCwwICsxLDM3IEBACitkbmwgIEFNRDY0IG1wbl9nY2RfMTEuCisKK2RubCAgQ29weXJpZ2h0IDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fZ2NkXzExKQoraW5jbHVkZV9tcG4oYHg4Nl82NC9jb3JlMi9nY2RfMTEuYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpc2JyL2dtcC1tcGFyYW0uaCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpc2JyL2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmY0NTEyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlzYnIvZ21wLW1wYXJhbS5oCkBAIC0wLDAgKzEsMjQxIEBACisvKiBTYW5keSBCcmlkZ2UgZ21wLW1wYXJhbS5oIC0tIENvbXBpbGVyL21hY2hpbmUgcGFyYW1ldGVyIGhlYWRlciBmaWxlLgorCitDb3B5cmlnaHQgMjAxOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2RlZmluZSBHTVBfTElNQl9CSVRTIDY0CisjZGVmaW5lIEdNUF9MSU1CX0JZVEVTIDgKKworLyogMzQwMC0zODAwIE1IeiBJbnRlbCBYZW9uIEUzLTEyNzAgU2FuZHkgQnJpZGdlICovCisvKiBGRlQgdHVuaW5nIGxpbWl0ID0gNDY4LDE1MiwzMjAgKi8KKy8qIEdlbmVyYXRlZCBieSB0dW5ldXAuYywgMjAxOS0xMC0yMCwgZ2NjIDguMyAqLworCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNAorI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgMgorI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAgOQorI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICAgICAyNAorI2RlZmluZSBQUkVJTlZfTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgOAorI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgICAgICAgICAgICAgICAgMSAgLyogbmF0aXZlICovCisjZGVmaW5lIERJVl9RUl8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAxCisjZGVmaW5lIERJVl9RUl8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVl9RUl8yX1BJMl9USFJFU0hPTEQgICAgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgICAgICAgMzAKKworI2RlZmluZSBESVZfMV9WU19NVUxfMV9QRVJDRU5UICAgICAgICAgICAgIDI5OAorCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDY1CisjZGVmaW5lIE1VTF9UT09NNDRfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTU0CisjZGVmaW5lIE1VTF9UT09NNkhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjU0CisjZGVmaW5lIE1VTF9UT09NOEhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMzMzCisKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNDNfVEhSRVNIT0xEICAgICAxMDUKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxMjIKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxMDUKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNjNfVEhSRVNIT0xEICAgICAxMTMKKyNkZWZpbmUgTVVMX1RPT000M19UT19UT09NNTRfVEhSRVNIT0xEICAgICAxNDgKKworI2RlZmluZSBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgICAgIDkzCisjZGVmaW5lIFNRUl9UT09NNF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjQ4CisjZGVmaW5lIFNRUl9UT09NNl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMzQyCisjZGVmaW5lIFNRUl9UT09NOF9USFJFU0hPTEQgICAgICAgICAgICAgICAgNDYyCisKKyNkZWZpbmUgTVVMTUlEX1RPT000Ml9USFJFU0hPTEQgICAgICAgICAgICAgMzYKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxMworI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxNQorCisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgMzk2ICAvKiBrID0gNSAqLworI2RlZmluZSBNVUxfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgMzk2LCA1fSwgeyAgICAgMTksIDZ9LCB7ICAgICAxMCwgNX0sIHsgICAgIDIxLCA2fSwgXAorICAgIHsgICAgIDExLCA1fSwgeyAgICAgMjMsIDZ9LCB7ICAgICAyMSwgN30sIHsgICAgIDExLCA2fSwgXAorICAgIHsgICAgIDI1LCA3fSwgeyAgICAgMTMsIDZ9LCB7ICAgICAyNywgN30sIHsgICAgIDIxLCA4fSwgXAorICAgIHsgICAgIDExLCA3fSwgeyAgICAgMjUsIDh9LCB7ICAgICAxMywgN30sIHsgICAgIDI4LCA4fSwgXAorICAgIHsgICAgIDE1LCA3fSwgeyAgICAgMzEsIDh9LCB7ICAgICAxNywgN30sIHsgICAgIDM1LCA4fSwgXAorICAgIHsgICAgIDIxLCA5fSwgeyAgICAgMTEsIDh9LCB7ICAgICAyNywgOX0sIHsgICAgIDE1LCA4fSwgXAorICAgIHsgICAgIDM1LCA5fSwgeyAgICAgMTksIDh9LCB7ICAgICAzOSwgOX0sIHsgICAgIDIzLCA4fSwgXAorICAgIHsgICAgIDQ5LCA5fSwgeyAgICAgMjcsMTB9LCB7ICAgICAxNSwgOX0sIHsgICAgIDM5LDEwfSwgXAorICAgIHsgICAgIDIzLCA5fSwgeyAgICAgNTEsMTF9LCB7ICAgICAxNSwxMH0sIHsgICAgIDMxLCA5fSwgXAorICAgIHsgICAgIDY3LDEwfSwgeyAgICAgMzksIDl9LCB7ICAgICA4MywxMH0sIHsgICAgIDQ3LCA5fSwgXAorICAgIHsgICAgIDk1LDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA3OSwxMX0sIHsgICAgIDQ3LDEwfSwgXAorICAgIHsgICAgIDk1LDEyfSwgeyAgICAgMzEsMTF9LCB7ICAgICA2MywxMH0sIHsgICAgMTM1LDExfSwgXAorICAgIHsgICAgIDc5LDEwfSwgeyAgICAxNTksIDl9LCB7ICAgIDMxOSwxMH0sIHsgICAgMTY3LDExfSwgXAorICAgIHsgICAgIDk1LCA3fSwgeyAgIDE1MzUsIDh9LCB7ICAgIDgzMSwxMH0sIHsgICAgMjIzLCA5fSwgXAorICAgIHsgICAgNDQ3LDExfSwgeyAgICAxMjcsMTB9LCB7ICAgIDI1NSwgOX0sIHsgICAgNTExLDExfSwgXAorICAgIHsgICAgMTQzLDEwfSwgeyAgICAyODcsIDl9LCB7ICAgIDU3NSwxMH0sIHsgICAgMzAzLDExfSwgXAorICAgIHsgICAgMTU5LDEwfSwgeyAgICAzMTksMTJ9LCB7ICAgICA5NSwxMX0sIHsgICAgMTkxLDEwfSwgXAorICAgIHsgICAgMzgzLDEzfSwgeyAgICAgNjMsMTJ9LCB7ICAgIDEyNywxMX0sIHsgICAgMjU1LDEwfSwgXAorICAgIHsgICAgNTExLDExfSwgeyAgICAyNzEsMTB9LCB7ICAgIDU0MywxMX0sIHsgICAgMjg3LDEwfSwgXAorICAgIHsgICAgNTc1LDExfSwgeyAgICAzMDMsMTJ9LCB7ICAgIDE1OSwxMX0sIHsgICAgMzE5LDEwfSwgXAorICAgIHsgICAgNjM5LDExfSwgeyAgICAzNTEsMTB9LCB7ICAgIDcwMywxMX0sIHsgICAgMzY3LDEyfSwgXAorICAgIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTB9LCB7ICAgIDc2NywxMX0sIHsgICAgNDE1LDEwfSwgXAorICAgIHsgICAgODMxLDEyfSwgeyAgICAyMjMsMTF9LCB7ICAgIDQ0NywxMH0sIHsgICAgODk1LDExfSwgXAorICAgIHsgICAgNDc5LDEzfSwgeyAgICAxMjcsMTJ9LCB7ICAgIDI1NSwxMX0sIHsgICAgNTQzLDEyfSwgXAorICAgIHsgICAgMjg3LDExfSwgeyAgICA2MDcsMTJ9LCB7ICAgIDMxOSwxMX0sIHsgICAgNjM5LDEyfSwgXAorICAgIHsgICAgMzUxLDExfSwgeyAgICA3MDMsMTJ9LCB7ICAgIDM4MywxMX0sIHsgICAgNzY3LDEyfSwgXAorICAgIHsgICAgNDE1LDExfSwgeyAgICA4MzEsMTJ9LCB7ICAgIDQ0NywxMX0sIHsgICAgODk1LDEyfSwgXAorICAgIHsgICAgNDc5LDE0fSwgeyAgICAxMjcsMTN9LCB7ICAgIDI1NSwxMn0sIHsgICAgNTQzLDExfSwgXAorICAgIHsgICAxMDg3LDEyfSwgeyAgICA2MDcsMTN9LCB7ICAgIDMxOSwxMn0sIHsgICAgNzM1LDEzfSwgXAorICAgIHsgICAgMzgzLDEyfSwgeyAgICA4MzEsMTN9LCB7ICAgIDQ0NywxMn0sIHsgICAgOTU5LDE0fSwgXAorICAgIHsgICAgMjU1LDEzfSwgeyAgICA1MTEsMTJ9LCB7ICAgMTA4NywxM30sIHsgICAgNTc1LDEyfSwgXAorICAgIHsgICAxMjE1LDEzfSwgeyAgICA2MzksMTJ9LCB7ICAgMTI3OSwxM30sIHsgICAgNzAzLDEyfSwgXAorICAgIHsgICAxNDA3LDE0fSwgeyAgICAzODMsMTN9LCB7ICAgIDc2NywxMn0sIHsgICAxNTM1LDEzfSwgXAorICAgIHsgICAgODMxLDEyfSwgeyAgIDE2NjMsMTN9LCB7ICAgIDk1OSwxNX0sIHsgICAgMjU1LDE0fSwgXAorICAgIHsgICAgNTExLDEzfSwgeyAgIDEwODcsMTJ9LCB7ICAgMjE3NSwxM30sIHsgICAxMjE1LDE0fSwgXAorICAgIHsgICAgNjM5LDEzfSwgeyAgIDEzNDMsMTJ9LCB7ICAgMjY4NywxM30sIHsgICAxNDA3LDEyfSwgXAorICAgIHsgICAyODE1LDEzfSwgeyAgIDE0NzEsMTR9LCB7ICAgIDc2NywxM30sIHsgICAxNjYzLDE0fSwgXAorICAgIHsgICAgODk1LDEzfSwgeyAgIDE5MTksMTV9LCB7ICAgIDUxMSwxNH0sIHsgICAxMDIzLDEzfSwgXAorICAgIHsgICAyMTc1LDE0fSwgeyAgIDExNTEsMTN9LCB7ICAgMjQzMSwxMn0sIHsgICA0ODYzLDE0fSwgXAorICAgIHsgICAxMjc5LDEzfSwgeyAgIDI2ODcsMTR9LCB7ICAgMTQwNywxM30sIHsgICAyODE1LDE1fSwgXAorICAgIHsgICAgNzY3LDE0fSwgeyAgIDE1MzUsMTN9LCB7ICAgMzA3MSwxNH0sIHsgICAxNjYzLDEzfSwgXAorICAgIHsgICAzNDU1LDEyfSwgeyAgIDY5MTEsMTR9LCB7ICAgMTkxOSwxNn0sIHsgICAgNTExLDE1fSwgXAorICAgIHsgICAxMDIzLDE0fSwgeyAgIDI0MzEsMTN9LCB7ICAgNDg2MywxNX0sIHsgICAxMjc5LDE0fSwgXAorICAgIHsgICAyOTQzLDEzfSwgeyAgIDU4ODcsMTV9LCB7ICAgMTUzNSwxNH0sIHsgICAzNDU1LDEzfSwgXAorICAgIHsgICA2OTExLDE1fSwgeyAgIDE3OTEsMTR9LCB7ICAgMzgzOSwxM30sIHsgICA3Njc5LDE2fSwgXAorICAgIHsgICAxMDIzLDE1fSwgeyAgIDIwNDcsMTR9LCB7ICAgNDIyMywxNX0sIHsgICAyMzAzLDE0fSwgXAorICAgIHsgICA0ODYzLDE1fSwgeyAgIDI4MTUsMTR9LCB7ICAgNTg4NywxNn0sIHsgICAxNTM1LDE1fSwgXAorICAgIHsgICAzMzI3LDE0fSwgeyAgIDY5MTEsMTV9LCB7ICAgMzgzOSwxNH0sIHsgICA3Njc5LDE3fSwgXAorICAgIHsgICAxMDIzLDE2fSwgeyAgIDIwNDcsMTV9LCB7ICAgNDg2MywxNn0sIHsgICAyNTU5LDE1fSwgXAorICAgIHsgICA1ODg3LDE0fSwgeyAgMTE3NzUsMTZ9LCB7ICAgMzA3MSwxNX0sIHsgICA2OTExLDE2fSwgXAorICAgIHsgICAzNTgzLDE1fSwgeyAgIDc2NzksMTR9LCB7ICAxNTM1OSwxN30sIHsgICAyMDQ3LDE2fSwgXAorICAgIHsgICA0MDk1LDE1fSwgeyAgIDgxOTEsMTZ9LCB7ICAgNDYwNywxNX0sIHsgICA5OTgzLDE2fSwgXAorICAgIHsgICA1NjMxLDE1fSwgeyAgMTE3NzUsMTd9LCB7ICAgMzA3MSwxNn0sIHsgIDY1NTM2LDE3fSwgXAorICAgIHsgMTMxMDcyLDE4fSwgeyAyNjIxNDQsMTl9LCB7IDUyNDI4OCwyMH0sIHsxMDQ4NTc2LDIxfSwgXAorICAgIHsyMDk3MTUyLDIyfSwgezQxOTQzMDQsMjN9LCB7ODM4ODYwOCwyNH0gfQorI2RlZmluZSBNVUxfRkZUX1RBQkxFM19TSVpFIDIxOQorI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNDczNgorCisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgMzM2ICAvKiBrID0gNSAqLworI2RlZmluZSBTUVJfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgMzM2LCA1fSwgeyAgICAgMTksIDZ9LCB7ICAgICAxMCwgNX0sIHsgICAgIDIxLCA2fSwgXAorICAgIHsgICAgIDExLCA1fSwgeyAgICAgMjMsIDZ9LCB7ICAgICAyNSwgN30sIHsgICAgIDEzLCA2fSwgXAorICAgIHsgICAgIDI3LCA3fSwgeyAgICAgMjUsIDh9LCB7ICAgICAxMywgN30sIHsgICAgIDI4LCA4fSwgXAorICAgIHsgICAgIDE1LCA3fSwgeyAgICAgMzEsIDh9LCB7ICAgICAyMSwgOX0sIHsgICAgIDExLCA4fSwgXAorICAgIHsgICAgIDI3LCA5fSwgeyAgICAgMTUsIDh9LCB7ICAgICAzNSwgOX0sIHsgICAgIDE5LCA4fSwgXAorICAgIHsgICAgIDQxLCA5fSwgeyAgICAgMjMsIDh9LCB7ICAgICA0NywgOX0sIHsgICAgIDI3LDEwfSwgXAorICAgIHsgICAgIDE1LCA5fSwgeyAgICAgMzksMTB9LCB7ICAgICAyMywgOX0sIHsgICAgIDUxLDExfSwgXAorICAgIHsgICAgIDE1LDEwfSwgeyAgICAgMzEsIDl9LCB7ICAgICA2NywxMH0sIHsgICAgIDM5LCA5fSwgXAorICAgIHsgICAgIDc5LDEwfSwgeyAgICAgNDcsMTF9LCB7ICAgICAzMSwxMH0sIHsgICAgIDc5LDExfSwgXAorICAgIHsgICAgIDQ3LDEwfSwgeyAgICAgOTUsMTJ9LCB7ICAgICAzMSwxMX0sIHsgICAgIDYzLDEwfSwgXAorICAgIHsgICAgMTI3LCA5fSwgeyAgICAyNTUsMTB9LCB7ICAgIDEzNSwxMX0sIHsgICAgIDc5LDEwfSwgXAorICAgIHsgICAgMTU5LCA5fSwgeyAgICAzMTksMTF9LCB7ICAgICA5NSwxMH0sIHsgICAgMTkxLCA5fSwgXAorICAgIHsgICAgMzgzLDEyfSwgeyAgICAgNjMsMTF9LCB7ICAgIDEyNywxMH0sIHsgICAgMjU1LCA2fSwgXAorICAgIHsgICA0MzUxLCA3fSwgeyAgIDIzMDMsIDh9LCB7ICAgMTIxNSwxMn0sIHsgICAgIDk1LDExfSwgXAorICAgIHsgICAgMTkxLDEwfSwgeyAgICAzODMsMTN9LCB7ICAgICA2MywxMn0sIHsgICAgMTI3LDExfSwgXAorICAgIHsgICAgMjU1LDEwfSwgeyAgICA1MTEsMTF9LCB7ICAgIDI3MSwxMH0sIHsgICAgNTQzLDExfSwgXAorICAgIHsgICAgMjg3LDEwfSwgeyAgICA1NzUsMTF9LCB7ICAgIDMwMywxMH0sIHsgICAgNjA3LDEyfSwgXAorICAgIHsgICAgMTU5LDExfSwgeyAgICAzMTksMTB9LCB7ICAgIDYzOSwxMX0sIHsgICAgMzM1LDEwfSwgXAorICAgIHsgICAgNjcxLDExfSwgeyAgICAzNTEsMTB9LCB7ICAgIDcwMywxMn0sIHsgICAgMTkxLDExfSwgXAorICAgIHsgICAgMzgzLDEwfSwgeyAgICA3NjcsMTF9LCB7ICAgIDQxNSwxMH0sIHsgICAgODMxLDEyfSwgXAorICAgIHsgICAgMjIzLDExfSwgeyAgICA0NDcsMTB9LCB7ICAgIDg5NSwxMX0sIHsgICAgNDc5LDEzfSwgXAorICAgIHsgICAgMTI3LDEyfSwgeyAgICAyNTUsMTF9LCB7ICAgIDU0MywxMn0sIHsgICAgMjg3LDExfSwgXAorICAgIHsgICAgNjA3LDEyfSwgeyAgICAzMTksMTF9LCB7ICAgIDY3MSwxMn0sIHsgICAgMzUxLDExfSwgXAorICAgIHsgICAgNzAzLDEzfSwgeyAgICAxOTEsMTJ9LCB7ICAgIDM4MywxMX0sIHsgICAgNzY3LDEyfSwgXAorICAgIHsgICAgNDE1LDExfSwgeyAgICA4MzEsMTJ9LCB7ICAgIDQ0NywxMX0sIHsgICAgODk1LDEyfSwgXAorICAgIHsgICAgNDc5LDE0fSwgeyAgICAxMjcsMTN9LCB7ICAgIDI1NSwxMn0sIHsgICAgNTExLDExfSwgXAorICAgIHsgICAxMDIzLDEyfSwgeyAgICA1NDMsMTF9LCB7ICAgMTA4NywxMn0sIHsgICAgNjA3LDEzfSwgXAorICAgIHsgICAgMzE5LDEyfSwgeyAgICA3MDMsMTN9LCB7ICAgIDM4MywxMn0sIHsgICAgODMxLDEzfSwgXAorICAgIHsgICAgNDQ3LDEyfSwgeyAgICA5NTksMTR9LCB7ICAgIDI1NSwxM30sIHsgICAgNTExLDEyfSwgXAorICAgIHsgICAxMDg3LDEzfSwgeyAgICA1NzUsMTJ9LCB7ICAgMTIxNSwxM30sIHsgICAgNjM5LDEyfSwgXAorICAgIHsgICAxMjc5LDEzfSwgeyAgICA3MDMsMTR9LCB7ICAgIDM4MywxM30sIHsgICAgNzY3LDEyfSwgXAorICAgIHsgICAxNTM1LDEzfSwgeyAgICA4MzEsMTJ9LCB7ICAgMTY2MywxM30sIHsgICAgOTU5LDE0fSwgXAorICAgIHsgICAgNTExLDEzfSwgeyAgIDEwODcsMTJ9LCB7ICAgMjE3NSwxM30sIHsgICAxMjE1LDE0fSwgXAorICAgIHsgICAgNjM5LDEzfSwgeyAgIDEzNDMsMTJ9LCB7ICAgMjY4NywxM30sIHsgICAxNDA3LDEyfSwgXAorICAgIHsgICAyODE1LDEzfSwgeyAgIDE0NzEsMTR9LCB7ICAgIDc2NywxM30sIHsgICAxNTk5LDEyfSwgXAorICAgIHsgICAzMTk5LDEzfSwgeyAgIDE2NjMsMTR9LCB7ICAgIDg5NSwxM30sIHsgICAxNzkxLDE1fSwgXAorICAgIHsgICAgNTExLDE0fSwgeyAgIDEwMjMsMTN9LCB7ICAgMjE3NSwxNH0sIHsgICAxMTUxLDEzfSwgXAorICAgIHsgICAyNDMxLDEyfSwgeyAgIDQ4NjMsMTR9LCB7ICAgMTI3OSwxM30sIHsgICAyNjg3LDE0fSwgXAorICAgIHsgICAxNDA3LDEzfSwgeyAgIDI4MTUsMTV9LCB7ICAgIDc2NywxNH0sIHsgICAxNTM1LDEzfSwgXAorICAgIHsgICAzMTk5LDE0fSwgeyAgIDE2NjMsMTN9LCB7ICAgMzQ1NSwxMn0sIHsgICA2OTExLDE0fSwgXAorICAgIHsgICAxNzkxLDE2fSwgeyAgICA1MTEsMTV9LCB7ICAgMTAyMywxNH0sIHsgICAyNDMxLDEzfSwgXAorICAgIHsgICA0ODYzLDE1fSwgeyAgIDEyNzksMTR9LCB7ICAgMjk0MywxM30sIHsgICA1ODg3LDE1fSwgXAorICAgIHsgICAxNTM1LDE0fSwgeyAgIDM0NTUsMTN9LCB7ICAgNjkxMSwxNX0sIHsgICAxNzkxLDE0fSwgXAorICAgIHsgICAzODM5LDE2fSwgeyAgIDEwMjMsMTV9LCB7ICAgMjA0NywxNH0sIHsgICA0MjIzLDE1fSwgXAorICAgIHsgICAyMzAzLDE0fSwgeyAgIDQ4NjMsMTV9LCB7ICAgMjgxNSwxNH0sIHsgICA1ODg3LDE2fSwgXAorICAgIHsgICAxNTM1LDE1fSwgeyAgIDMzMjcsMTR9LCB7ICAgNjkxMSwxNX0sIHsgICAzODM5LDE3fSwgXAorICAgIHsgICAxMDIzLDE2fSwgeyAgIDIwNDcsMTV9LCB7ICAgNDg2MywxNn0sIHsgICAyNTU5LDE1fSwgXAorICAgIHsgICA1ODg3LDE0fSwgeyAgMTE3NzUsMTZ9LCB7ICAgMzA3MSwxNX0sIHsgICA2OTExLDE2fSwgXAorICAgIHsgICAzNTgzLDE1fSwgeyAgIDc2NzksMTR9LCB7ICAxNTM1OSwxN30sIHsgICAyMDQ3LDE2fSwgXAorICAgIHsgICA0NjA3LDE1fSwgeyAgIDk5ODMsMTR9LCB7ICAxOTk2NywxNn0sIHsgICA1NjMxLDE1fSwgXAorICAgIHsgIDExNzc1LDE3fSwgeyAgIDMwNzEsMTZ9LCB7ICA2NTUzNiwxN30sIHsgMTMxMDcyLDE4fSwgXAorICAgIHsgMjYyMTQ0LDE5fSwgeyA1MjQyODgsMjB9LCB7MTA0ODU3NiwyMX0sIHsyMDk3MTUyLDIyfSwgXAorICAgIHs0MTk0MzA0LDIzfSwgezgzODg2MDgsMjR9IH0KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTNfU0laRSAyMTAKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDMyNjQKKworI2RlZmluZSBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDYyCisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgICA4OTA3CisjZGVmaW5lIFNRUkxPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICA5CisjZGVmaW5lIFNRUkxPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDY2CisjZGVmaW5lIFNRUkxPX1NRUl9USFJFU0hPTEQgICAgICAgICAgICAgICA2NDQwCisKKyNkZWZpbmUgRENfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNTIKKyNkZWZpbmUgRENfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAxNzIKKyNkZWZpbmUgRENfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNDYKKyNkZWZpbmUgRENfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgOTIKKworI2RlZmluZSBJTlZfTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICA0NgorI2RlZmluZSBJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE3MAorI2RlZmluZSBJTlZfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDE2NworCisjZGVmaW5lIEJJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgMjI4CisjZGVmaW5lIFJFRENfMV9UT19SRURDXzJfVEhSRVNIT0xEICAgICAgICAgIDM2CisjZGVmaW5lIFJFRENfMl9UT19SRURDX05fVEhSRVNIT0xEICAgICAgICAgIDU1CisKKyNkZWZpbmUgTVVfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDEzODcKKyNkZWZpbmUgTVVfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgIDEzODcKKyNkZWZpbmUgTVVQSV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgNzcKKyNkZWZpbmUgTVVfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgIDExODcKKyNkZWZpbmUgTVVfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE0NDIKKworI2RlZmluZSBQT1dNX1NFQ19UQUJMRSAgMSwxNiwxOTEsNDUyLDEyOTcKKworI2RlZmluZSBHRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBHRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgICAyMQorI2RlZmluZSBTRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTE2MAorI2RlZmluZSBTRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgMjA0MworCisjZGVmaW5lIEZBQ19EU0NfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgNDI2CisjZGVmaW5lIEZBQ19PRERfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDI0CisKKyNkZWZpbmUgTUFUUklYMjJfU1RSQVNTRU5fVEhSRVNIT0xEICAgICAgICAgMTQKKyNkZWZpbmUgSEdDRDJfRElWMV9NRVRIT0QgICAgICAgICAgICAgICAgICAgIDUgIC8qIDAuNzQlIGZhc3RlciB0aGFuIDMgKi8KKyNkZWZpbmUgSEdDRF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgICAgOTYKKyNkZWZpbmUgSEdDRF9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNjAKKyNkZWZpbmUgSEdDRF9SRURVQ0VfVEhSRVNIT0xEICAgICAgICAgICAgIDI2ODEKKyNkZWZpbmUgR0NEX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICA0NjUKKyNkZWZpbmUgR0NERVhUX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzNDUKKyNkZWZpbmUgSkFDT0JJX0JBU0VfTUVUSE9EICAgICAgICAgICAgICAgICAgIDEgIC8qIDMyLjIyJSBmYXN0ZXIgdGhhbiA0ICovCisKKy8qIFR1bmV1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCB0b29rIDI3NjE5OCBzZWNvbmRzICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaXNici9sc2hpZnQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlzYnIvbHNoaWZ0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWNiYzMxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlzYnIvbHNoaWZ0LmFzbQpAQCAtMCwwICsxLDM3IEBACitkbmwgIFg4Ni02NCBtcG5fbHNoaWZ0IG9wdGltaXNlZCBmb3IgSW50ZWwgU2FuZHkgQnJpZGdlLgorCitkbmwgIENvcHlyaWdodCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2xzaGlmdCkKK2luY2x1ZGVfbXBuKGB4ODZfNjQvZmFzdHNzZS9sc2hpZnQtbW92ZHF1Mi5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlzYnIvbHNoaWZ0Yy5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaXNici9sc2hpZnRjLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzkwZWRiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlzYnIvbHNoaWZ0Yy5hc20KQEAgLTAsMCArMSwzNyBAQAorZG5sICBYODYtNjQgbXBuX2xzaGlmdGMgb3B0aW1pc2VkIGZvciBJbnRlbCBTYW5keSBCcmlkZ2UuCisKK2RubCAgQ29weXJpZ2h0IDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fbHNoaWZ0YykKK2luY2x1ZGVfbXBuKGB4ODZfNjQvZmFzdHNzZS9sc2hpZnRjLW1vdmRxdTIuYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpc2JyL211bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpc2JyL211bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDNhMTE3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlzYnIvbXVsXzEuYXNtCkBAIC0wLDAgKzEsMTk5IEBACitkbmwgIFg4Ni02NCBtcG5fbXVsXzEgb3B0aW1pc2VkIGZvciBJbnRlbCBTYW5keSBCcmlkZ2UuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqw7ZybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAwMy0yMDA1LCAyMDA3LCAyMDA4LCAyMDExLTIwMTMsIDIwMTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorZG5sICBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIEFNRCBLOCxLOQorQyBBTUQgSzEwCitDIEFNRCBidWxsCitDIEFNRCBwaWxlCitDIEFNRCBzdGVhbQorQyBBTUQgZXhjYXZhdG9yCitDIEFNRCBib2JjYXQKK0MgQU1EIGphZ3VhcgorQyBJbnRlbCBQNAorQyBJbnRlbCBjb3JlMgorQyBJbnRlbCBOSE0KK0MgSW50ZWwgU0JSICAgICAgMi40OQorQyBJbnRlbCBJQlIgICAgICAyLjMyCitDIEludGVsIEhXTCAgICAgIDIuNDQKK0MgSW50ZWwgQldMICAgICAgMi40MworQyBJbnRlbCBTS0wgICAgICAyLjQ3CitDIEludGVsIGF0b20KK0MgSW50ZWwgU0xNCitDIFZJQSBuYW5vCisKK0MgVGhlIGxvb3Agb2YgdGhpcyBjb2RlIGlzIHRoZSByZXN1bHQgb2YgcnVubmluZyBhIGNvZGUgZ2VuZXJhdGlvbiBhbmQKK0Mgb3B0aW1pc2F0aW9uIHRvb2wgc3VpdGUgd3JpdHRlbiBieSBEYXZpZCBIYXJ2ZXkgYW5kIFRvcmJqb3JuIEdyYW5sdW5kLgorCitkZWZpbmUoYHJwJywgICAgICBgJXJkaScpICAgQyByY3gKK2RlZmluZShgdXBfcGFyYW0nLGAlcnNpJykgICBDIHJkeAorZGVmaW5lKGBuX3BhcmFtJywgYCVyZHgnKSAgIEMgcjgKK2RlZmluZShgdjAnLCAgICAgIGAlcmN4JykgICBDIHI5CitkZWZpbmUoYGNpbicsICAgICBgJXI4JykgICAgQyBzdGFjaworCitkZWZpbmUoYHVwJywgICAgICBgJXJzaScpICAgQyBzYW1lIGFzIHJwX3BhcmFtCitkZWZpbmUoYG4nLAkgIGAlcjknKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitJRkRPUyhgCWRlZmluZShgcnAnLCAgICAgIGAlcmN4JyknKQorSUZET1MoYAlkZWZpbmUoYHVwX3BhcmFtJyxgJXJkeCcpJykKK0lGRE9TKGAJZGVmaW5lKGBuX3BhcmFtJywgYCVyOCcpJykKK0lGRE9TKGAJZGVmaW5lKGB2MCcsICAgICAgYCVyOScpJykKK0lGRE9TKGAJZGVmaW5lKGBjaW4nLCAgICAgYDQ4KCVyc3ApJyknKQorCitJRkRPUyhgCWRlZmluZShgdXAnLCAgICAgIGAlcnNpJyknKQorSUZET1MoYAlkZWZpbmUoYG4nLCAgICAgICBgJXI4JyknKQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigxNikKK1BST0xPR1VFKG1wbl9tdWxfMSkKK0lGRE9TKGAJcHVzaAklcnNpCQknKQorCW1vdgkodXBfcGFyYW0pLCAlcmF4CitJRlNURChgCW1vdgluX3BhcmFtLCBuCScpCisJbGVhCSh1cF9wYXJhbSxuX3BhcmFtLDgpLCB1cAorCWxlYQktOChycCxuX3BhcmFtLDgpLCBycAorCW5lZwluCisJbXVsCXYwCisKKwl0ZXN0CSQxLCBSOChuKQorCWp6CUwoeDApCitMKHgxKToJbW92CSVyYXgsICVyMTEKKwltb3YJJXJkeCwgJXIxMAorCXRlc3QJJDIsIFI4KG4pCisJam56CUwoMDEpCisKK0woMTEpOgltb3YJOCh1cCxuLDgpLCAlcmF4CisJZGVjCW4KKwlqbXAJTChMMykKKworTCgwMSk6CWluYwluCisJam56CUwoTDEpCisJbW92CSVyYXgsIChycCkKKwltb3YJJXJkeCwgJXJheAorSUZET1MoYAlwb3AJJXJzaQkJJykKKwlyZXQKKworTCh4MCk6CW1vdgklcmF4LCAlcjEwCisJbW92CSVyZHgsICVyMTEKKwltb3YJOCh1cCxuLDgpLCAlcmF4CisJdGVzdAkkMiwgUjgobikKKwlqeglMKEwwKQorCitMKDEwKToJYWRkCSQtMiwgbgorCWptcAlMKEwyKQorCisJQUxJR04oOCkKK0wodG9wKToJbW92CSVyZHgsICVyMTAKKwlhZGQJJXJheCwgJXIxMQorTChMMSk6CW1vdgkwKHVwLG4sOCksICVyYXgKKwlhZGMJJDAsICVyMTAKKwltdWwJdjAKKwlhZGQJJXJheCwgJXIxMAorCW1vdgklcjExLCAwKHJwLG4sOCkKKwltb3YJOCh1cCxuLDgpLCAlcmF4CisJbW92CSVyZHgsICVyMTEKK0woTDBjKToJYWRjCSQwLCAlcjExCitMKEwwKToJbXVsCXYwCisJbW92CSVyMTAsIDgocnAsbiw4KQorCWFkZAklcmF4LCAlcjExCisJbW92CSVyZHgsICVyMTAKK0woTDNjKToJbW92CTE2KHVwLG4sOCksICVyYXgKKwlhZGMJJDAsICVyMTAKK0woTDMpOgltdWwJdjAKKwltb3YJJXIxMSwgMTYocnAsbiw4KQorCW1vdgklcmR4LCAlcjExCisJYWRkCSVyYXgsICVyMTAKK0woTDJjKToJbW92CTI0KHVwLG4sOCksICVyYXgKKwlhZGMJJDAsICVyMTEKK0woTDIpOgltdWwJdjAKKwltb3YJJXIxMCwgMjQocnAsbiw4KQorCWFkZAkkNCwgbgorCWpuYwlMKHRvcCkKKworTChlbmQpOglhZGQJJXJheCwgJXIxMQorCW1vdgklcmR4LCAlcmF4CisJYWRjCSQwLCAlcmF4CisJbW92CSVyMTEsIChycCkKKworSUZET1MoYAlwb3AJJXJzaQkJJykKKwlyZXQKK0VQSUxPR1VFKCkKKworCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX211bF8xYykKK0lGRE9TKGAJcHVzaAklcnNpCQknKQorCW1vdgkodXBfcGFyYW0pLCAlcmF4CitJRlNURChgCW1vdgluX3BhcmFtLCBuCScpCisJbGVhCSh1cF9wYXJhbSxuX3BhcmFtLDgpLCB1cAorCWxlYQktOChycCxuX3BhcmFtLDgpLCBycAorCW5lZwluCisJbXVsCXYwCisKKwl0ZXN0CSQxLCBSOChuKQorCWp6CUwoeDBjKQorTCh4MWMpOgltb3YJJXJheCwgJXIxMQorCW1vdgklcmR4LCAlcjEwCisJdGVzdAkkMiwgUjgobikKKwlqbnoJTCgwMWMpCisKK0woMTFjKToJYWRkCWNpbiwgJXIxMQorCWRlYwluCisJam1wCUwoTDNjKQorCitMKDAxYyk6CWFkZAljaW4sICVyMTEKKwlpbmMJbgorCWpueglMKEwxKQorCW1vdgklcjExLCAocnApCisJbW92CSVyZHgsICVyYXgKKwlhZGMJJDAsICVyYXgKK0lGRE9TKGAJcG9wCSVyc2kJCScpCisJcmV0CisKK0woeDBjKToJbW92CSVyYXgsICVyMTAKKwltb3YJJXJkeCwgJXIxMQorCXRlc3QJJDIsIFI4KG4pCisJanoJTCgwMGMpCisKK0woMTBjKToJYWRkCSQtMiwgbgorCWFkZAljaW4sICVyMTAKKwlqbXAJTChMMmMpCisKK0woMDBjKToJYWRkCWNpbiwgJXIxMAorCW1vdgk4KHVwLG4sOCksICVyYXgKKwlqbXAJTChMMGMpCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaXNici9tdWxfMi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaXNici9tdWxfMi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgxNTM0ZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpc2JyL211bF8yLmFzbQpAQCAtMCwwICsxLDE2NyBAQAorZG5sICBBTUQ2NCBtcG5fbXVsXzIgb3B0aW1pc2VkIGZvciBJbnRlbCBTYW5keSBCcmlkZ2UuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqw7ZybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAwMy0yMDA1LCAyMDA3LCAyMDA4LCAyMDExLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCWJlc3QKK0MgQU1EIEs4LEs5ICAgICAgOC4wMworQyBBTUQgSzEwICAgICAgICA4LjAzCitDIEFNRCBidWxsICAgICAgIDkuMTkKK0MgQU1EIHBpbGUgICAgICAgOS4xNgorQyBBTUQgc3RlYW0KK0MgQU1EIGV4Y2F2YXRvcgorQyBBTUQgYm9iY2F0ICAgIDEwLjYKK0MgQU1EIGphZ3VhciAgICAxMS4wCitDIEludGVsIFA0ICAgICAgMjYuMAorQyBJbnRlbCBjb3JlMiAgICA4LjczCitDIEludGVsIE5ITSAgICAgIDguNTUKK0MgSW50ZWwgU0JSICAgICAgNS4xNQorQyBJbnRlbCBJQlIgICAgICA0LjU3CitDIEludGVsIEhXTCAgICAgIDQuMDgKK0MgSW50ZWwgQldMICAgICAgNC4xMAorQyBJbnRlbCBTS0wgICAgICA0LjE0CitDIEludGVsIGF0b20gICAgMzkuNQorQyBJbnRlbCBTTE0gICAgIDI2LjMKK0MgVklBIG5hbm8KKworQyBUaGlzIGNvZGUgaXMgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGEgY29kZSBnZW5lcmF0aW9uIGFuZCBvcHRpbWlzYXRpb24gdG9vbAorQyBzdWl0ZSB3cml0dGVuIGJ5IERhdmlkIEhhcnZleSBhbmQgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK0MgV2hlbiBwbGF5aW5nIHdpdGggcG9pbnRlcnMsIHNldCB0aGlzIHRvICQyIHRvIGZhbGwgYmFjayB0byBjb25zZXJ2YXRpdmUKK0MgaW5kZXhpbmcgaW4gd2luZC1kb3duIGNvZGUuCitkZWZpbmUoYEknLGAkMScpCisKK2RlZmluZShgcnAnLCAgICAgIGAlcmRpJykgICBDIHJjeAorZGVmaW5lKGB1cCcsICAgICAgYCVyc2knKSAgIEMgcmR4CitkZWZpbmUoYG5fcGFyYW0nLCBgJXJkeCcpICAgQyByOAorZGVmaW5lKGB2cCcsICAgICAgYCVyY3gnKSAgIEMgcjkKKworZGVmaW5lKGBuJywJICBgJXJjeCcpCitkZWZpbmUoYHYwJywgICAgICBgJXJieCcpCitkZWZpbmUoYHYxJywgICAgICBgJXJicCcpCisKK2RlZmluZShgdzAnLAlgJXI4JykKK2RlZmluZShgdzEnLAlgJXI5JykKK2RlZmluZShgdzInLAlgJXIxMCcpCitkZWZpbmUoYHczJywJYCVyMTEnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigzMikKK1BST0xPR1VFKG1wbl9tdWxfMikKKwlGVU5DX0VOVFJZKDQpCisJcHVzaAklcmJ4CisJcHVzaAklcmJwCisKKwltb3YJKHZwKSwgdjAKKwltb3YJOCh2cCksIHYxCisKKwltb3YJKHVwKSwgJXJheAorCWxlYQkodXAsbl9wYXJhbSw4KSwgdXAKKwlsZWEJKHJwLG5fcGFyYW0sOCksIHJwCisKKwl0ZXN0CSQxLCBSOChuX3BhcmFtKQorCWpueglMKGIxKQorCitMKGIwKToJbW92CSQwLCBSMzIobikKKwlzdWIJbl9wYXJhbSwgbgorCXhvcgl3MCwgdzAKKwltdWwJdjAKKwltb3YJJXJheCwgdzIKKwltb3YJJXJkeCwgdzEKKwltb3YJKHVwLG4sOCksICVyYXgKKwlqbXAJTChsbzApCisKK0woYjEpOgltb3YJJDEsIFIzMihuKQorCXN1YgluX3BhcmFtLCBuCisJeG9yCXcyLCB3MgorCW11bAl2MAorCW1vdgklcmF4LCB3MAorCW1vdgklcmR4LCB3MworCW1vdgktOCh1cCxuLDgpLCAlcmF4CisJbXVsCXYxCisJam1wCUwobG8xKQorCisJQUxJR04oMzIpCitMKHRvcCk6CW11bAl2MAorCWFkZAklcmF4LCB3MAkJQyAxCisJbW92CSVyZHgsIHczCQlDIDIKKwlhZGMJJDAsIHczCQkJQyAyCisJbW92CS04KHVwLG4sOCksICVyYXgKKwltdWwJdjEKKwlhZGQJdzEsIHcwCQkJQyAxCisJYWRjCSQwLCB3MwkJCUMgMgorTChsbzEpOglhZGQJJXJheCwgdzIJCUMgMgorCW1vdgl3MCwgLTgocnAsbiw4KQkJQyAxCisJbW92CSVyZHgsIHcwCQlDIDMKKwlhZGMJJDAsIHcwCQkJQyAzCisJbW92CSh1cCxuLDgpLCAlcmF4CisJbXVsCXYwCisJYWRkCSVyYXgsIHcyCQlDIDIKKwltb3YJJXJkeCwgdzEJCUMgMworCWFkYwkkMCwgdzEJCQlDIDMKKwlhZGQJdzMsIHcyCQkJQyAyCisJbW92CSh1cCxuLDgpLCAlcmF4CisJYWRjCSQwLCB3MQkJCUMgMQorTChsbzApOgltdWwJdjEKKwltb3YJdzIsIChycCxuLDgpCQlDIDIKKwlhZGQJJXJheCwgdzAJCUMgMworCW1vdgklcmR4LCB3MgkJQyA0CisJbW92CTgodXAsbiw4KSwgJXJheAorCWFkYwkkMCwgdzIJCQlDIDQKKwlhZGQJJDIsIG4KKwlqbmMJTCh0b3ApCisKK0woZW5kKToJbXVsCXYwCisJYWRkCSVyYXgsIHcwCisJbW92CSVyZHgsIHczCisJYWRjCSQwLCB3MworCW1vdglJKC04KHVwKSwtOCh1cCxuLDgpKSwgJXJheAorCW11bAl2MQorCWFkZAl3MSwgdzAKKwlhZGMJJDAsIHczCisJYWRkCSVyYXgsIHcyCisJbW92CXcwLCBJKC04KHJwKSwtOChycCxuLDgpKQorCWFkYwkkMCwgJXJkeAorCWFkZAl3MywgdzIKKwltb3YJdzIsIEkoKHJwKSwocnAsbiw4KSkKKwlhZGMJJDAsICVyZHgKKwltb3YJJXJkeCwgJXJheAorCisJcG9wCSVyYnAKKwlwb3AJJXJieAorCUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaXNici9tdWxfYmFzZWNhc2UuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlzYnIvbXVsX2Jhc2VjYXNlLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWZkMWNjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlzYnIvbXVsX2Jhc2VjYXNlLmFzbQpAQCAtMCwwICsxLDQwNyBAQAorZG5sICBBTUQ2NCBtcG5fbXVsX2Jhc2VjYXNlIG9wdGltaXNlZCBmb3IgSW50ZWwgU2FuZHkgYnJpZGdlIGFuZCBJdnkgYnJpZGdlLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDMtMjAwNSwgMjAwNywgMjAwOCwgMjAxMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgY3ljbGVzL2xpbWIJbXVsXzEJCW11bF8yCQltdWxfMwkJYWRkbXVsXzIKK0MgQU1EIEs4LEs5CitDIEFNRCBLMTAKK0MgQU1EIGJ1bGwKK0MgQU1EIHBpbGUKK0MgQU1EIHN0ZWFtCitDIEFNRCBib2JjYXQKK0MgQU1EIGphZ3VhcgorQyBJbnRlbCBQNAorQyBJbnRlbCBjb3JlCitDIEludGVsIE5ITQorQyBJbnRlbCBTQlIJIDIuNQkJIDIuNQkJIC0JCSAyLjk1CitDIEludGVsIElCUgkgMi40CQkgMi4zCQkgLQkJIDIuNjgKK0MgSW50ZWwgSFdMCSAyLjM1CQkgMi4wCQkgLQkJIDIuNQorQyBJbnRlbCBCV0wKK0MgSW50ZWwgYXRvbQorQyBWSUEgbmFubworCitDIFRoZSBpbm5lciBsb29wcyBvZiB0aGlzIGNvZGUgYXJlIHRoZSByZXN1bHQgb2YgcnVubmluZyBhIGNvZGUgZ2VuZXJhdGlvbiBhbmQKK0Mgb3B0aW1pc2F0aW9uIHRvb2wgc3VpdGUgd3JpdHRlbiBieSBEYXZpZCBIYXJ2ZXkgYW5kIFRvcmJqb3JuIEdyYW5sdW5kLgorCitDIFRPRE8KK0MgICogRml4IHRoZSBhZGRtdWxfMiBmbHVjdHVhdGlvbiBhZmZlY3RpbmcgU0JSLgorQyAgKiBJbXByb3ZlIGZlZWQtaW4gY29kZSwgYXZvaWRpbmcgemVyb2luZyBvZiBtYW55IHJlZ2lzdGVycyBhbmQgZHVtbXkgYWRkcyBpbgorQyAgICB0aGUgbG9vcHMgYXQgdGhlIGV4cGVuc2Ugb2YgY29kZSBzaXplLgorQyAgKiBBZGpvaW4gYSBtdWxfMywgYXZvaWRpbmcgc2xvdyBtdWxfMSBmb3Igb2RkIHZuLgorQyAgKiBDb25zaWRlciByZXBsYWNpbmcgdGhlIDItd2F5IG11bF8yIGNvZGUgd2l0aCA0LXdheSBjb2RlLCBmb3IgYSB2ZXJ5IHNsaWdodAorQyAgICBzcGVlZHVwLgorQyAgKiBGdXJ0aGVyIG1pY3JvLW9wdGltaXNlLgorCitDIFdoZW4gcGxheWluZyB3aXRoIHBvaW50ZXJzLCBzZXQgdGhpcyB0byAkMiB0byBmYWxsIGJhY2sgdG8gY29uc2VydmF0aXZlCitDIGluZGV4aW5nIGluIHdpbmQtZG93biBjb2RlLgorZGVmaW5lKGBJJyxgJDEnKQorCisKK2RlZmluZShgcnAnLCAgICAgIGAlcmRpJykKK2RlZmluZShgdXAnLCAgICAgIGAlcnNpJykKK2RlZmluZShgdW5fcGFyYW0nLGAlcmR4JykKK2RlZmluZShgdnAnLCAgICAgIGAlcmN4JykKK2RlZmluZShgdm4nLCAgICAgIGAlcjgnKQorCitkZWZpbmUoYHVuJywgICAgICBgJXJieCcpCisKK2RlZmluZShgdzAnLAlgJXIxMCcpCitkZWZpbmUoYHcxJywJYCVyMTEnKQorZGVmaW5lKGB3MicsCWAlcjEyJykKK2RlZmluZShgdzMnLAlgJXIxMycpCitkZWZpbmUoYG4nLAlgJXJicCcpCitkZWZpbmUoYHYwJywJYCVyOScpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX211bF9iYXNlY2FzZSkKKwlGVU5DX0VOVFJZKDQpCitJRkRPUyhgCW1vdgk1NiglcnNwKSwgJXI4ZAknKQorCXB1c2gJJXJieAorCXB1c2gJJXJicAorCW1vdgl1bl9wYXJhbSwgdW4JCUMgZnJlZSB1cCByZHgKKwluZWcJdW4KKworCW1vdgkodXApLCAlcmF4CQlDIHNoYXJlZCBmb3IgbXVsXzEgYW5kIG11bF8yCisJbGVhCSh1cCx1bl9wYXJhbSw4KSwgdXAJQyBwb2ludCBhdCBvcGVyYW5kIGVuZAorCWxlYQkocnAsdW5fcGFyYW0sOCksIHJwCUMgcG9pbnQgYXQgcnBbdW4tMV0KKworCW1vdgkodnApLCB2MAkJQyBzaGFyZWQgZm9yIG11bF8xIGFuZCBtdWxfMgorCW11bAl2MAkJCUMgc2hhcmVkIGZvciBtdWxfMSBhbmQgbXVsXzIKKworCXRlc3QJJDEsIFI4KHZuKQorCWp6CUwoZG9fbXVsXzIpCisKK0woZG9fbXVsXzEpOgorCXRlc3QJJDEsIFI4KHVuKQorCWpueglMKG0xeDEpCisKK0wobTF4MCk6bW92CSVyYXgsIHcwCQlDIHVuID0gMiwgNCwgNiwgOCwgLi4uCisJbW92CSVyZHgsIHcxCisJbW92CTgodXAsdW4sOCksICVyYXgKKwl0ZXN0CSQyLCBSOCh1bikKKwlqbnoJTChtMTEwKQorCitMKG0xMDApOmxlYQkyKHVuKSwgbgkJQyB1biA9IDQsIDgsIDEyLCAuLi4KKwlqbXAJTChtMWwwKQorCitMKG0xMTApOmxlYQkodW4pLCBuCQkJQyB1biA9IDIsIDYsIDEwLCAuLi4KKwlqbXAJTChtMWwyKQorCitMKG0xeDEpOm1vdgklcmF4LCB3MQkJQyB1biA9IDEsIDMsIDUsIDcsIC4uLgorCW1vdgklcmR4LCB3MAorCXRlc3QJJDIsIFI4KHVuKQorCWp6CUwobTExMSkKKworTChtMTAxKTpsZWEJMyh1biksIG4JCUMgdW4gPSAxLCA1LCA5LCAuLi4KKwl0ZXN0CW4sIG4KKwlqcwlMKG0xbDEpCisJbW92CSVyYXgsIC04KHJwKQorCW1vdgklcmR4LCAocnApCisJcG9wCSVyYnAKKwlwb3AJJXJieAorCUZVTkNfRVhJVCgpCisJcmV0CisKK0wobTExMSk6bGVhCTEodW4pLCBuCQlDIHVuID0gMywgNywgMTEsIC4uLgorCW1vdgk4KHVwLHVuLDgpLCAlcmF4CisJam1wCUwobTFsMykKKworCUFMSUdOKDE2KQkJQyBGSVhNRQorTChtMXRwKTptb3YJJXJkeCwgdzAKKwlhZGQJJXJheCwgdzEKK0wobTFsMSk6bW92CS0xNih1cCxuLDgpLCAlcmF4CisJYWRjCSQwLCB3MAorCW11bAl2MAorCWFkZAklcmF4LCB3MAorCW1vdgl3MSwgLTI0KHJwLG4sOCkKKwltb3YJLTgodXAsbiw4KSwgJXJheAorCW1vdgklcmR4LCB3MQorCWFkYwkkMCwgdzEKK0wobTFsMCk6bXVsCXYwCisJbW92CXcwLCAtMTYocnAsbiw4KQorCWFkZAklcmF4LCB3MQorCW1vdgklcmR4LCB3MAorCW1vdgkodXAsbiw4KSwgJXJheAorCWFkYwkkMCwgdzAKK0wobTFsMyk6bXVsCXYwCisJbW92CXcxLCAtOChycCxuLDgpCisJbW92CSVyZHgsIHcxCisJYWRkCSVyYXgsIHcwCisJbW92CTgodXAsbiw4KSwgJXJheAorCWFkYwkkMCwgdzEKK0wobTFsMik6bXVsCXYwCisJbW92CXcwLCAocnAsbiw4KQorCWFkZAkkNCwgbgorCWpuYwlMKG0xdHApCisKK0wobTFlZCk6YWRkCSVyYXgsIHcxCisJYWRjCSQwLCAlcmR4CisJbW92CXcxLCBJKC04KHJwKSwtMjQocnAsbiw4KSkKKwltb3YJJXJkeCwgSSgocnApLC0xNihycCxuLDgpKQorCisJZGVjCVIzMih2bikKKwlqeglMKHJldDIpCisKKwlsZWEJOCh2cCksIHZwCisJbGVhCTgocnApLCBycAorCXB1c2gJJXIxMgorCXB1c2gJJXIxMworCXB1c2gJJXIxNAorCWptcAlMKGRvX2FkZG11bCkKKworTChkb19tdWxfMik6CitkZWZpbmUoYHYxJywJYCVyMTQnKQorCXB1c2gJJXIxMgorCXB1c2gJJXIxMworCXB1c2gJJXIxNAorCisJbW92CTgodnApLCB2MQorCisJdGVzdAkkMSwgUjgodW4pCisJam56CUwobTJiMSkKKworTChtMmIwKTpsZWEJKHVuKSwgbgorCXhvcgl3MCwgdzAKKwltb3YJJXJheCwgdzIKKwltb3YJJXJkeCwgdzEKKwlqbXAJTChtMmwwKQorCitMKG0yYjEpOmxlYQkxKHVuKSwgbgorCXhvcgl3MSwgdzEKKwl4b3IJdzIsIHcyCisJbW92CSVyYXgsIHcwCisJbW92CSVyZHgsIHczCisJam1wCUwobTJsMSkKKworCUFMSUdOKDMyKQorTChtMnRwKTptdWwJdjAKKwlhZGQJJXJheCwgdzAKKwltb3YJJXJkeCwgdzMKKwlhZGMJJDAsIHczCitMKG0ybDEpOm1vdgktOCh1cCxuLDgpLCAlcmF4CisJbXVsCXYxCisJYWRkCXcxLCB3MAorCWFkYwkkMCwgdzMKKwlhZGQJJXJheCwgdzIKKwltb3YJdzAsIC04KHJwLG4sOCkKKwltb3YJJXJkeCwgdzAKKwlhZGMJJDAsIHcwCisJbW92CSh1cCxuLDgpLCAlcmF4CisJbXVsCXYwCisJYWRkCSVyYXgsIHcyCisJbW92CSVyZHgsIHcxCisJYWRjCSQwLCB3MQorCWFkZAl3MywgdzIKK0wobTJsMCk6bW92CSh1cCxuLDgpLCAlcmF4CisJYWRjCSQwLCB3MQorCW11bAl2MQorCW1vdgl3MiwgKHJwLG4sOCkKKwlhZGQJJXJheCwgdzAKKwltb3YJJXJkeCwgdzIKKwltb3YJOCh1cCxuLDgpLCAlcmF4CisJYWRjCSQwLCB3MgorCWFkZAkkMiwgbgorCWpuYwlMKG0ydHApCisKK0wobTJlZCk6bXVsCXYwCisJYWRkCSVyYXgsIHcwCisJbW92CSVyZHgsIHczCisJYWRjCSQwLCB3MworCW1vdglJKC04KHVwKSwtOCh1cCxuLDgpKSwgJXJheAorCW11bAl2MQorCWFkZAl3MSwgdzAKKwlhZGMJJDAsIHczCisJYWRkCSVyYXgsIHcyCisJbW92CXcwLCBJKC04KHJwKSwtOChycCxuLDgpKQorCWFkYwkkMCwgJXJkeAorCWFkZAl3MywgdzIKKwltb3YJdzIsIEkoKHJwKSwocnAsbiw4KSkKKwlhZGMJJDAsICVyZHgKKwltb3YJJXJkeCwgSSg4KHJwKSw4KHJwLG4sOCkpCisKKwlhZGQJJC0yLCBSMzIodm4pCisJanoJTChyZXQ1KQorCWxlYQkxNih2cCksIHZwCisJbGVhCTE2KHJwKSwgcnAKKworCitMKGRvX2FkZG11bCk6CisJcHVzaAklcjE1CisJcHVzaAl2bgkJCUMgc2F2ZSB2biBpbiBuZXcgc3RhY2sgc2xvdAorZGVmaW5lKGB2bicsCWAoJXJzcCknKQorZGVmaW5lKGBYMCcsCWAlcjE0JykKK2RlZmluZShgWDEnLAlgJXIxNScpCitkZWZpbmUoYHYxJywJYCVyOCcpCisKK0wob3V0ZXIpOgorCW1vdgkodnApLCB2MAorCW1vdgk4KHZwKSwgdjEKKwltb3YJKHVwLHVuLDgpLCAlcmF4CisJbXVsCXYwCisJdGVzdAkkMSwgUjgodW4pCisJam56CUwoYTF4MSkKKworTChhMXgwKTptb3YJKHJwLHVuLDgpLCBYMAorCXhvcgl3MCwgdzAKKwltb3YJJXJkeCwgdzEKKwl0ZXN0CSQyLCBSOCh1bikKKwlqbnoJTChhMTEwKQorCitMKGExMDApOmxlYQkyKHVuKSwgbgkJQyB1biA9IDQsIDgsIDEyLCAuLi4KKwlhZGQJJXJheCwgWDAKKwlhZGMJJDAsIHcxCisJbW92CSh1cCx1biw4KSwgJXJheAorCW11bAl2MQorCW1vdgk4KHJwLHVuLDgpLCBYMQorCWptcAlMKGxvMCkKKworTChhMTEwKTpsZWEJKHVuKSwgbgkJCUMgdW4gPSAyLCA2LCAxMCwgLi4uCisJeG9yCXczLCB3MworCWptcAlMKGxvMikKKworTChhMXgxKTptb3YJKHJwLHVuLDgpLCBYMQorCXhvcgl3MiwgdzIKKwl4b3IJdzEsIHcxCisJdGVzdAkkMiwgUjgodW4pCisJanoJTChhMTExKQorCitMKGExMDEpOmxlYQkzKHVuKSwgbgkJQyB1biA9IDEsIDUsIDksIC4uLgorCW1vdgklcmR4LCB3MworCWFkZAklcmF4LCBYMQorCW1vdgkodXAsdW4sOCksICVyYXgKKwltb3YJOChycCx1biw4KSwgWDAKKwlhZGMJJDAsIHczCisJam1wCUwodG9wKQorCitMKGExMTEpOmxlYQkxKHVuKSwgbgkJQyB1biA9IDMsIDcsIDExLCAuLi4KKwlqbXAJTChsbzMpCisKKwlBTElHTigzMikKK0wodG9wKToJbXVsCXYxCisJbW92CSVyZHgsIHcwCisJYWRkCSVyYXgsIFgwCisJYWRjCSQwLCB3MAorCWFkZAl3MSwgWDEKKwlhZGMJJDAsIHczCisJYWRkCXcyLCBYMAorCWFkYwkkMCwgdzAKKwltb3YJLTE2KHVwLG4sOCksICVyYXgKKwltdWwJdjAKKwlhZGQJJXJheCwgWDAKKwltb3YJJXJkeCwgdzEKKwlhZGMJJDAsIHcxCisJbW92CS0xNih1cCxuLDgpLCAlcmF4CisJbXVsCXYxCisJbW92CVgxLCAtMjQocnAsbiw4KQorCW1vdgktOChycCxuLDgpLCBYMQorCWFkZAl3MywgWDAKKwlhZGMJJDAsIHcxCitMKGxvMCk6CW1vdgklcmR4LCB3MgorCW1vdglYMCwgLTE2KHJwLG4sOCkKKwlhZGQJJXJheCwgWDEKKwlhZGMJJDAsIHcyCisJbW92CS04KHVwLG4sOCksICVyYXgKKwlhZGQJdzAsIFgxCisJYWRjCSQwLCB3MgorCW11bAl2MAorTChsbzMpOglhZGQJJXJheCwgWDEKKwltb3YJJXJkeCwgdzMKKwlhZGMJJDAsIHczCisJbW92CS04KHVwLG4sOCksICVyYXgKKwltdWwJdjEKKwlhZGQJdzEsIFgxCisJbW92CShycCxuLDgpLCBYMAorCWFkYwkkMCwgdzMKKwltb3YJJXJkeCwgdzAKKwlhZGQJJXJheCwgWDAKKwlhZGMJJDAsIHcwCisJbW92CSh1cCxuLDgpLCAlcmF4CisJbXVsCXYwCisJYWRkCXcyLCBYMAorCW1vdglYMSwgLTgocnAsbiw4KQorCW1vdgklcmR4LCB3MQorCWFkYwkkMCwgdzAKK0wobG8yKToJYWRkCSVyYXgsIFgwCisJYWRjCSQwLCB3MQorCW1vdgkodXAsbiw4KSwgJXJheAorCWFkZAl3MywgWDAKKwlhZGMJJDAsIHcxCisJbXVsCXYxCisJbW92CTgocnAsbiw4KSwgWDEKKwlhZGQJJXJheCwgWDEKKwltb3YJJXJkeCwgdzIKKwlhZGMJJDAsIHcyCisJbW92CTgodXAsbiw4KSwgJXJheAorCW1vdglYMCwgKHJwLG4sOCkKKwltdWwJdjAKKwlhZGQJdzAsIFgxCisJbW92CSVyZHgsIHczCisJYWRjCSQwLCB3MgorCWFkZAklcmF4LCBYMQorCW1vdgk4KHVwLG4sOCksICVyYXgKKwltb3YJMTYocnAsbiw4KSwgWDAJCUMgdXNlbGVzcyBidXQgaGFybWxlc3MgaW4gZmluYWwgaXRlcgorCWFkYwkkMCwgdzMKKwlhZGQJJDQsIG4KKwlqbmMJTCh0b3ApCisKK0woZW5kKToJbXVsCXYxCisJYWRkCXcxLCBYMQorCWFkYwkkMCwgdzMKKwlhZGQJdzIsICVyYXgKKwlhZGMJJDAsICVyZHgKKwltb3YJWDEsIEkoLTgocnApLC0yNChycCxuLDgpKQorCWFkZAl3MywgJXJheAorCWFkYwkkMCwgJXJkeAorCW1vdgklcmF4LCBJKChycCksLTE2KHJwLG4sOCkpCisJbW92CSVyZHgsIEkoOChycCksLTgocnAsbiw4KSkKKworCWFkZGwJJC0yLCB2bgorCWxlYQkxNih2cCksIHZwCisJbGVhCTE2KHJwKSwgcnAKKwlqbnoJTChvdXRlcikKKworCXBvcAklcmF4CQlDIGRlYWxsb2NhdGUgdm4gc2xvdAorCXBvcAklcjE1CitMKHJldDUpOnBvcAklcjE0CisJcG9wCSVyMTMKKwlwb3AJJXIxMgorTChyZXQyKTpwb3AJJXJicAorCXBvcAklcmJ4CisJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpc2JyL211bGxvX2Jhc2VjYXNlLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpc2JyL211bGxvX2Jhc2VjYXNlLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDFhOGFjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlzYnIvbXVsbG9fYmFzZWNhc2UuYXNtCkBAIC0wLDAgKzEsMzg0IEBACitkbmwgIEFNRDY0IG1wbl9tdWxsb19iYXNlY2FzZSBvcHRpbWlzZWQgZm9yIEludGVsIFNhbmR5IGJyaWRnZSBhbmQgSXZ5IGJyaWRnZS4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDA4LCAyMDA5LCAyMDExLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBjeWNsZXMvbGltYgltdWxfMgkJYWRkbXVsXzIKK0MgQU1EIEs4LEs5CitDIEFNRCBLMTAKK0MgQU1EIGJ1bGwKK0MgQU1EIHBpbGUKK0MgQU1EIHN0ZWFtCitDIEFNRCBib2JjYXQKK0MgQU1EIGphZ3VhcgorQyBJbnRlbCBQNAorQyBJbnRlbCBjb3JlCitDIEludGVsIE5ITQorQyBJbnRlbCBTQlIJIDIuNQkJIDIuOTUKK0MgSW50ZWwgSUJSCSAyLjMJCSAyLjY4CitDIEludGVsIEhXTAkgMi4wCQkgMi41CitDIEludGVsIEJXTAorQyBJbnRlbCBhdG9tCitDIFZJQSBuYW5vCisKK0MgVGhlIGlubmVyIGxvb3BzIG9mIHRoaXMgY29kZSBhcmUgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGEgY29kZSBnZW5lcmF0aW9uIGFuZAorQyBvcHRpbWlzYXRpb24gdG9vbCBzdWl0ZSB3cml0dGVuIGJ5IERhdmlkIEhhcnZleSBhbmQgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitDIFRPRE8KK0MgICAqIEltcGxlbWVudCBwcm9wZXIgY29yMiwgcmVwbGFjaW5nIGN1cnJlbnQgY29yMC4KK0MgICAqIE9mZnNldCBuIGJ5IDIgaW4gb3JkZXIgdG8gYXZvaWQgdGhlIG91dGVyIGxvb3AgY21wLiAgKEFuZCBzcXJfYmFzZWNhc2U/KQorQyAgICogTWljcm8tb3B0aW1pc2UuCisKK0MgV2hlbiBwbGF5aW5nIHdpdGggcG9pbnRlcnMsIHNldCB0aGlzIHRvICQyIHRvIGZhbGwgYmFjayB0byBjb25zZXJ2YXRpdmUKK0MgaW5kZXhpbmcgaW4gd2luZC1kb3duIGNvZGUuCitkZWZpbmUoYEknLGAkMScpCisKK2RlZmluZShgcnAnLCAgICAgICBgJXJkaScpCitkZWZpbmUoYHVwJywgICAgICAgYCVyc2knKQorZGVmaW5lKGB2cF9wYXJhbScsIGAlcmR4JykKK2RlZmluZShgbicsICAgICAgICBgJXJjeCcpCisKK2RlZmluZShgdnAnLCAgICAgICBgJXI4JykKK2RlZmluZShgWDAnLCAgICAgICBgJXIxNCcpCitkZWZpbmUoYFgxJywgICAgICAgYCVyMTUnKQorCitkZWZpbmUoYHcwJywgICAgICAgYCVyMTAnKQorZGVmaW5lKGB3MScsICAgICAgIGAlcjExJykKK2RlZmluZShgdzInLCAgICAgICBgJXIxMicpCitkZWZpbmUoYHczJywgICAgICAgYCVyMTMnKQorZGVmaW5lKGBpJywgICAgICAgIGAlcmJwJykKK2RlZmluZShgdjAnLCAgICAgICBgJXI5JykKK2RlZmluZShgdjEnLCAgICAgICBgJXJieCcpCisKK0MgcmF4IHJieCByY3ggcmR4IHJkaSByc2kgcmJwIHI4IHI5IHIxMCByMTEgcjEyIHIxMyByMTQgcjE1CisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDMyKQorUFJPTE9HVUUobXBuX211bGxvX2Jhc2VjYXNlKQorCUZVTkNfRU5UUlkoNCkKKworCW1vdgkodXApLCAlcmF4CisJbW92CXZwX3BhcmFtLCB2cAorCisJY21wCSQ0LCBuCisJamIJTChzbWFsbCkKKworCW1vdgkodnBfcGFyYW0pLCB2MAorCXB1c2gJJXJieAorCWxlYQkocnAsbiw4KSwgcnAJCUMgcG9pbnQgcnAgYXQgUlt1bl0KKwlwdXNoCSVyYnAKKwlsZWEJKHVwLG4sOCksIHVwCQlDIHBvaW50IHVwIHJpZ2h0IGFmdGVyIFUncyBlbmQKKwlwdXNoCSVyMTIKKwluZWcJbgorCXB1c2gJJXIxMworCW11bAl2MAorCW1vdgk4KHZwKSwgdjEKKworCXRlc3QJJDEsIFI4KG4pCisJam56CUwobTJiMSkKKworTChtMmIwKTpsZWEJKG4pLCBpCisJeG9yCXcwLCB3MAorCW1vdgklcmF4LCB3MgorCW1vdgklcmR4LCB3MQorCWptcAlMKG0ybDApCisKK0wobTJiMSk6bGVhCTEobiksIGkKKwl4b3IJdzEsIHcxCisJeG9yCXcyLCB3MgorCW1vdgklcmF4LCB3MAorCW1vdgklcmR4LCB3MworCWptcAlMKG0ybDEpCisKKwlBTElHTigzMikKK0wobTJ0cCk6bXVsCXYwCisJYWRkCSVyYXgsIHcwCisJbW92CSVyZHgsIHczCisJYWRjCSQwLCB3MworTChtMmwxKTptb3YJLTgodXAsaSw4KSwgJXJheAorCW11bAl2MQorCWFkZAl3MSwgdzAKKwlhZGMJJDAsIHczCisJYWRkCSVyYXgsIHcyCisJbW92CXcwLCAtOChycCxpLDgpCisJbW92CSVyZHgsIHcwCisJYWRjCSQwLCB3MAorCW1vdgkodXAsaSw4KSwgJXJheAorCW11bAl2MAorCWFkZAklcmF4LCB3MgorCW1vdgklcmR4LCB3MQorCWFkYwkkMCwgdzEKKwlhZGQJdzMsIHcyCitMKG0ybDApOm1vdgkodXAsaSw4KSwgJXJheAorCWFkYwkkMCwgdzEKKwltdWwJdjEKKwltb3YJdzIsIChycCxpLDgpCisJYWRkCSVyYXgsIHcwCisJbW92CSVyZHgsIHcyCQlDIEZJWE1FOiBkZWFkIGluIGxhc3QgaXRlcmF0aW9uCisJbW92CTgodXAsaSw4KSwgJXJheAorCWFkYwkkMCwgdzIJCQlDIEZJWE1FOiBkZWFkIGluIGxhc3QgaXRlcmF0aW9uCisJYWRkCSQyLCBpCisJam5jCUwobTJ0cCkKKworTChtMmVkKTppbXVsCXYwLCAlcmF4CisJYWRkCXcwLCAlcmF4CisJYWRkCXcxLCAlcmF4CisJbW92CSVyYXgsIEkoLTgocnApLC04KHJwLGksOCkpCisKKwlhZGQJJDIsIG4KKwlsZWEJMTYodnApLCB2cAorCWxlYQktMTYodXApLCB1cAorCWNtcAkkLTIsIG4KKwlqZ2UJTChjb3IxKQorCisJcHVzaAklcjE0CisJcHVzaAklcjE1CisKK0wob3V0ZXIpOgorCW1vdgkodnApLCB2MAorCW1vdgk4KHZwKSwgdjEKKwltb3YJKHVwLG4sOCksICVyYXgKKwltdWwJdjAKKwl0ZXN0CSQxLCBSOChuKQorCWpueglMKGExeDEpCisKK0woYTF4MCk6bW92CShycCxuLDgpLCBYMQorCXhvcgl3MiwgdzIKKwl4b3IJdzEsIHcxCisJdGVzdAkkMiwgUjgobikKKwlqbnoJTChhMTEwKQorCitMKGExMDApOmxlYQkxKG4pLCBpCisJam1wCUwobG8wKQorCitMKGExMTApOmxlYQkzKG4pLCBpCisJbW92CSVyZHgsIHczCisJYWRkCSVyYXgsIFgxCisJbW92CSh1cCxuLDgpLCAlcmF4CisJbW92CTgocnAsbiw4KSwgWDAKKwlhZGMJJDAsIHczCisJam1wCUwobG8yKQorCitMKGExeDEpOm1vdgkocnAsbiw4KSwgWDAKKwl4b3IJdzAsIHcwCisJbW92CSVyZHgsIHcxCisJdGVzdAkkMiwgUjgobikKKwlqeglMKGExMTEpCisKK0woYTEwMSk6bGVhCTIobiksIGkKKwlhZGQJJXJheCwgWDAKKwlhZGMJJDAsIHcxCisJbW92CSh1cCxuLDgpLCAlcmF4CisJbXVsCXYxCisJbW92CTgocnAsbiw4KSwgWDEKKwlqbXAJTChsbzEpCisKK0woYTExMSk6bGVhCShuKSwgaQorCXhvcgl3MywgdzMKKwlqbXAJTChsbzMpCisKKwlBTElHTigzMikKK0wodG9wKToKK0wobG8yKToJbXVsCXYxCisJbW92CSVyZHgsIHcwCisJYWRkCSVyYXgsIFgwCisJYWRjCSQwLCB3MAorCWFkZAl3MSwgWDEKKwlhZGMJJDAsIHczCisJYWRkCXcyLCBYMAorCWFkYwkkMCwgdzAKKwltb3YJLTE2KHVwLGksOCksICVyYXgKKwltdWwJdjAKKwlhZGQJJXJheCwgWDAKKwltb3YJJXJkeCwgdzEKKwlhZGMJJDAsIHcxCisJbW92CS0xNih1cCxpLDgpLCAlcmF4CisJbXVsCXYxCisJbW92CVgxLCAtMjQocnAsaSw4KQorCW1vdgktOChycCxpLDgpLCBYMQorCWFkZAl3MywgWDAKKwlhZGMJJDAsIHcxCitMKGxvMSk6CW1vdgklcmR4LCB3MgorCW1vdglYMCwgLTE2KHJwLGksOCkKKwlhZGQJJXJheCwgWDEKKwlhZGMJJDAsIHcyCisJbW92CS04KHVwLGksOCksICVyYXgKKwlhZGQJdzAsIFgxCisJYWRjCSQwLCB3MgorCW11bAl2MAorTChsbzApOglhZGQJJXJheCwgWDEKKwltb3YJJXJkeCwgdzMKKwlhZGMJJDAsIHczCisJbW92CS04KHVwLGksOCksICVyYXgKKwltdWwJdjEKKwlhZGQJdzEsIFgxCisJbW92CShycCxpLDgpLCBYMAorCWFkYwkkMCwgdzMKKwltb3YJJXJkeCwgdzAKKwlhZGQJJXJheCwgWDAKKwlhZGMJJDAsIHcwCisJbW92CSh1cCxpLDgpLCAlcmF4CisJbXVsCXYwCisJYWRkCXcyLCBYMAorCW1vdglYMSwgLTgocnAsaSw4KQorCW1vdgklcmR4LCB3MQorCWFkYwkkMCwgdzAKK0wobG8zKToJYWRkCSVyYXgsIFgwCisJYWRjCSQwLCB3MQorCW1vdgkodXAsaSw4KSwgJXJheAorCWFkZAl3MywgWDAKKwlhZGMJJDAsIHcxCisJbXVsCXYxCisJbW92CTgocnAsaSw4KSwgWDEKKwlhZGQJJXJheCwgWDEKKwltb3YJJXJkeCwgdzIKKwlhZGMJJDAsIHcyCisJbW92CTgodXAsaSw4KSwgJXJheAorCW1vdglYMCwgKHJwLGksOCkKKwltdWwJdjAKKwlhZGQJdzAsIFgxCisJbW92CSVyZHgsIHczCisJYWRjCSQwLCB3MgorCWFkZAklcmF4LCBYMQorCW1vdgk4KHVwLGksOCksICVyYXgKKwltb3YJMTYocnAsaSw4KSwgWDAKKwlhZGMJJDAsIHczCisJYWRkCSQ0LCBpCisJam5jCUwodG9wKQorCitMKGVuZCk6CWltdWwJdjEsICVyYXgKKwlhZGQJJXJheCwgWDAKKwlhZGQJdzEsIFgxCisJYWRjCSQwLCB3MworCWFkZAl3MiwgWDAKKwltb3YJSSgtOCh1cCksLTE2KHVwLGksOCkpLCAlcmF4CisJaW11bAl2MCwgJXJheAorCWFkZAlYMCwgJXJheAorCW1vdglYMSwgSSgtMTYocnApLC0yNChycCxpLDgpKQorCWFkZAl3MywgJXJheAorCW1vdgklcmF4LCBJKC04KHJwKSwtMTYocnAsaSw4KSkKKworCWFkZAkkMiwgbgorCWxlYQkxNih2cCksIHZwCisJbGVhCS0xNih1cCksIHVwCisJY21wCSQtMiwgbgorCWpsCUwob3V0ZXIpCisKKwlwb3AJJXIxNQorCXBvcAklcjE0CisKKwlqbnoJTChjb3IwKQorCitMKGNvcjEpOm1vdgkodnApLCB2MAorCW1vdgk4KHZwKSwgdjEKKwltb3YJLTE2KHVwKSwgJXJheAorCW11bAl2MAkJCUMgdTAgeCB2MgorCWFkZAktMTYocnApLCAlcmF4CQlDIEZJWE1FOiBycFswXSBzdGlsbCBhdmFpbGFibGUgaW4gcmVnPworCWFkYwktOChycCksICVyZHgJCUMgRklYTUU6IHJwWzFdIHN0aWxsIGF2YWlsYWJsZSBpbiByZWc/CisJbW92CS04KHVwKSwgJXIxMAorCWltdWwJdjAsICVyMTAKKwltb3YJLTE2KHVwKSwgJXIxMQorCWltdWwJdjEsICVyMTEKKwltb3YJJXJheCwgLTE2KHJwKQorCWFkZAklcjEwLCAlcjExCisJYWRkCSVyZHgsICVyMTEKKwltb3YJJXIxMSwgLTgocnApCisJcG9wCSVyMTMKKwlwb3AJJXIxMgorCXBvcAklcmJwCisJcG9wCSVyYngKKwlGVU5DX0VYSVQoKQorCXJldAorCitMKGNvcjApOm1vdgkodnApLCAlcjExCisJaW11bAktOCh1cCksICVyMTEKKwlhZGQJJXJheCwgJXIxMQorCW1vdgklcjExLCAtOChycCkKKwlwb3AJJXIxMworCXBvcAklcjEyCisJcG9wCSVyYnAKKwlwb3AJJXJieAorCUZVTkNfRVhJVCgpCisJcmV0CisKKwlBTElHTigxNikKK0woc21hbGwpOgorCWNtcAkkMiwgbgorCWphZQlMKGd0MSkKK0wobjEpOglpbXVsCSh2cF9wYXJhbSksICVyYXgKKwltb3YJJXJheCwgKHJwKQorCUZVTkNfRVhJVCgpCisJcmV0CitMKGd0MSk6CWphCUwoZ3QyKQorTChuMik6CW1vdgkodnBfcGFyYW0pLCAlcjkKKwltdWwJJXI5CisJbW92CSVyYXgsIChycCkKKwltb3YJOCh1cCksICVyYXgKKwlpbXVsCSVyOSwgJXJheAorCWFkZAklcmF4LCAlcmR4CisJbW92CTgodnApLCAlcjkKKwltb3YJKHVwKSwgJXJjeAorCWltdWwJJXI5LCAlcmN4CisJYWRkCSVyY3gsICVyZHgKKwltb3YJJXJkeCwgOChycCkKKwlGVU5DX0VYSVQoKQorCXJldAorTChndDIpOgorTChuMyk6CW1vdgkodnBfcGFyYW0pLCAlcjkKKwltdWwJJXI5CQlDIHUwIHggdjAKKwltb3YJJXJheCwgKHJwKQorCW1vdgklcmR4LCAlcjEwCisJbW92CTgodXApLCAlcmF4CisJbXVsCSVyOQkJQyB1MSB4IHYwCisJaW11bAkxNih1cCksICVyOQlDIHUyIHggdjAKKwlhZGQJJXJheCwgJXIxMAorCWFkYwklcmR4LCAlcjkKKwltb3YJOCh2cCksICVyMTEKKwltb3YJKHVwKSwgJXJheAorCW11bAklcjExCQlDIHUwIHggdjEKKwlhZGQJJXJheCwgJXIxMAorCWFkYwklcmR4LCAlcjkKKwlpbXVsCTgodXApLCAlcjExCUMgdTEgeCB2MQorCWFkZAklcjExLCAlcjkKKwltb3YJJXIxMCwgOChycCkKKwltb3YJMTYodnApLCAlcjEwCisJbW92CSh1cCksICVyYXgKKwlpbXVsCSVyYXgsICVyMTAJQyB1MCB4IHYyCisJYWRkCSVyMTAsICVyOQorCW1vdgklcjksIDE2KHJwKQorCUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaXNici9yZWRjXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlzYnIvcmVkY18xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGRiZTA3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvY29yZWlzYnIvcmVkY18xLmFzbQpAQCAtMCwwICsxLDU0NiBAQAorZG5sICBYODYtNjQgbXBuX3JlZGNfMSBvcHRpbWlzZWQgZm9yIEludGVsIFNhbmR5IEJyaWRnZSBhbmQgSXZ5IEJyaWRnZS4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDAzLTIwMDUsIDIwMDcsIDIwMDgsIDIwMTEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIKK0MgQU1EIEs4LEs5CSA/CitDIEFNRCBLMTAJID8KK0MgQU1EIGJ1bGwJID8KK0MgQU1EIHBpbGUJID8KK0MgQU1EIHN0ZWFtCSA/CitDIEFNRCBib2JjYXQJID8KK0MgQU1EIGphZ3VhcgkgPworQyBJbnRlbCBQNAkgPworQyBJbnRlbCBjb3JlCSA/CitDIEludGVsIE5ITQkgPworQyBJbnRlbCBTQlIJIDMuMjQKK0MgSW50ZWwgSUJSCSAzLjA0CitDIEludGVsIEhXTAkgPworQyBJbnRlbCBCV0wJID8KK0MgSW50ZWwgYXRvbQkgPworQyBWSUEgbmFubwkgPworCitDIFRoZSBpbm5lciBsb29wcyBvZiB0aGlzIGNvZGUgYXJlIHRoZSByZXN1bHQgb2YgcnVubmluZyBhIGNvZGUgZ2VuZXJhdGlvbiBhbmQKK0Mgb3B0aW1pc2F0aW9uIHRvb2wgc3VpdGUgd3JpdHRlbiBieSBEYXZpZCBIYXJ2ZXkgYW5kIFRvcmJqw7ZybiBHcmFubHVuZC4KKworQyBUT0RPCitDICAqIE1pY3JvLW9wdGltaXNlLCBub25lIHBlcmZvcm1lZCB0aHVzIGZhci4KK0MgICogQ29uc2lkZXIgaW5saW5pbmcgbXBuX2FkZF9uLgorQyAgKiBTaW5nbGUgYmFzZWNhc2VzIG91dCBiZWZvcmUgdGhlIHB1c2hlcy4KKworQyBXaGVuIHBsYXlpbmcgd2l0aCBwb2ludGVycywgc2V0IHRoaXMgdG8gJDIgdG8gZmFsbCBiYWNrIHRvIGNvbnNlcnZhdGl2ZQorQyBpbmRleGluZyBpbiB3aW5kLWRvd24gY29kZS4KK2RlZmluZShgSScsYCQxJykKKworZGVmaW5lKGBycCcsICAgICAgICAgIGAlcmRpJykgICBDIHJjeAorZGVmaW5lKGB1cCcsICAgICAgICAgIGAlcnNpJykgICBDIHJkeAorZGVmaW5lKGBtcF9wYXJhbScsICAgIGAlcmR4JykgICBDIHI4CitkZWZpbmUoYG4nLCAgICAgICAgICAgYCVyY3gnKSAgIEMgcjkKK2RlZmluZShgdTBpbnYnLCAgICAgICBgJXI4JykgICAgQyBzdGFjaworCitkZWZpbmUoYGknLCAgICAgICAgICAgYCVyMTQnKQorZGVmaW5lKGBqJywgICAgICAgICAgIGAlcjE1JykKK2RlZmluZShgbXAnLCAgICAgICAgICBgJXIxMicpCitkZWZpbmUoYHEwJywgICAgICAgICAgYCVyMTMnKQorCitDIHJheCByYnggcmN4IHJkeCByZGkgcnNpIHJicCByOCByOSByMTAgcjExIHIxMiByMTMgcjE0IHIxNQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitkZWZpbmUoYEFMSUdOeCcsIGBBTElHTigxNiknKQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigzMikKK1BST0xPR1VFKG1wbl9yZWRjXzEpCisJRlVOQ19FTlRSWSg0KQorSUZET1MoYAltb3YJNTYoJXJzcCksICVyOAknKQorCXB1c2gJJXJieAorCXB1c2gJJXJicAorCXB1c2gJJXIxMgorCXB1c2gJJXIxMworCXB1c2gJJXIxNAorCXB1c2gJJXIxNQorCisJbW92CSh1cCksIHEwCisJbW92CW4sIGoJCQlDIG91dGVyIGxvb3AgaW5kdWN0aW9uIHZhcgorCWxlYQk4KG1wX3BhcmFtLG4sOCksIG1wCisJbGVhCTgodXAsbiw4KSwgdXAKKwluZWcJbgorCWltdWwJdTBpbnYsIHEwCQlDIGZpcnN0IGl0ZXJhdGlvbiBxMAorCisJdGVzdAkkMSwgUjgobikKKwlqeglMKGJ4MCkKKworTChieDEpOgl0ZXN0CSQyLCBSOChuKQorCWp6CUwoYjMpCisKK0woYjEpOgljbXAJJC0xLCBSMzIobikKKwlqeglMKG4xKQorCitMKG90cDEpOmxlYQkxKG4pLCBpCisJbW92CS04KG1wLG4sOCksICVyYXgKKwltdWwJcTAKKwltb3YJLTgodXAsbiw4KSwgJXIxMAorCW1vdgklcmR4LCAlcjExCisJYWRkCSVyYXgsICVyMTAKKwltb3YJKG1wLG4sOCksICVyYXgKKwlhZGMJJDAsICVyMTEKKwltdWwJcTAKKwltb3YJJXJkeCwgJXI5CisJbW92CSh1cCxuLDgpLCAlcmJ4CisJYWRkCSVyYXgsICVyYngKKwlhZGMJJDAsICVyOQorCW1vdgkobXAsaSw4KSwgJXJheAorCW11bAlxMAorCW1vdgkodXAsaSw4KSwgJXIxMAorCWFkZAklcjExLCAlcmJ4CisJbW92CSVyYngsIC04KHVwLGksOCkJQyBuZXh0IGxvdyByZW1haW5kZXIgbGltYgorCWFkYwkkMCwgJXI5CisJaW11bAl1MGludiwgJXJieAkJQyBuZXh0IHEgbGltYgorCWptcAlMKGUxKQorCisJQUxJR054CitMKHRwMSk6CW11bAlxMAorCW1vdgktMTYodXAsaSw4KSwgJXIxMAorCWFkZAklcjExLCAlcmJwCisJbW92CSVyZHgsICVyMTEKKwlhZGMJJDAsICVyOQorCW1vdgklcmJwLCAtMjQodXAsaSw4KQorCWFkZAklcmF4LCAlcjEwCisJbW92CS04KG1wLGksOCksICVyYXgKKwlhZGMJJDAsICVyMTEKKwltdWwJcTAKKwlhZGQJJXI5LCAlcjEwCisJbW92CSVyZHgsICVyOQorCW1vdgktOCh1cCxpLDgpLCAlcmJwCisJYWRjCSQwLCAlcjExCisJbW92CSVyMTAsIC0xNih1cCxpLDgpCisJYWRkCSVyYXgsICVyYnAKKwlhZGMJJDAsICVyOQorCW1vdgkobXAsaSw4KSwgJXJheAorCW11bAlxMAorCW1vdgkodXAsaSw4KSwgJXIxMAorCWFkZAklcjExLCAlcmJwCisJbW92CSVyYnAsIC04KHVwLGksOCkKKwlhZGMJJDAsICVyOQorTChlMSk6CW1vdgklcmR4LCAlcjExCisJYWRkCSVyYXgsICVyMTAKKwltb3YJOChtcCxpLDgpLCAlcmF4CisJYWRjCSQwLCAlcjExCisJbXVsCXEwCisJbW92CTgodXAsaSw4KSwgJXJicAorCWFkZAklcjksICVyMTAKKwltb3YJJXJkeCwgJXI5CisJbW92CSVyMTAsICh1cCxpLDgpCisJYWRjCSQwLCAlcjExCisJYWRkCSVyYXgsICVyYnAKKwlhZGMJJDAsICVyOQorCW1vdgkxNihtcCxpLDgpLCAlcmF4CisJYWRkCSQ0LCBpCisJam5jCUwodHAxKQorCitMKGVkMSk6CW11bAlxMAorCW1vdglJKC0xNih1cCksLTE2KHVwLGksOCkpLCAlcjEwCisJYWRkCSVyMTEsICVyYnAKKwlhZGMJJDAsICVyOQorCW1vdgklcmJwLCBJKC0yNCh1cCksLTI0KHVwLGksOCkpCisJYWRkCSVyYXgsICVyMTAKKwlhZGMJJDAsICVyZHgKKwlhZGQJJXI5LCAlcjEwCisJYWRjCSQwLCAlcmR4CisJbW92CSVyMTAsIEkoLTE2KHVwKSwtMTYodXAsaSw4KSkKKwltb3YJJXJkeCwgLTgodXAsbiw4KQlDIHVwWzBdCisJbW92CSVyYngsIHEwCQlDIHByZXZpb3VzbHkgY29tcHV0ZWQgcSBsaW1iIC0+IHEwCisJbGVhCTgodXApLCB1cAkJQyB1cCsrCisJZGVjCWoKKwlqbnoJTChvdHAxKQorCWptcAlMKGNqKQorCitMKGIzKToJY21wCSQtMywgUjMyKG4pCisJanoJTChuMykKKworTChvdHAzKTpsZWEJMyhuKSwgaQorCW1vdgktOChtcCxuLDgpLCAlcmF4CisJbXVsCXEwCisJbW92CS04KHVwLG4sOCksICVyMTAKKwltb3YJJXJkeCwgJXIxMQorCWFkZAklcmF4LCAlcjEwCisJbW92CShtcCxuLDgpLCAlcmF4CisJYWRjCSQwLCAlcjExCisJbXVsCXEwCisJbW92CSh1cCxuLDgpLCAlcmJ4CisJbW92CSVyZHgsICVyOQorCWFkZAklcmF4LCAlcmJ4CisJYWRjCSQwLCAlcjkKKwltb3YJOChtcCxuLDgpLCAlcmF4CisJbXVsCXEwCisJbW92CTgodXAsbiw4KSwgJXIxMAorCWFkZAklcjExLCAlcmJ4CisJbW92CSVyZHgsICVyMTEKKwlhZGMJJDAsICVyOQorCW1vdgklcmJ4LCAodXAsbiw4KQorCWltdWwJdTBpbnYsICVyYngJCUMgbmV4dCBxIGxpbWIKKwlqbXAJTChlMykKKworCUFMSUdOeAorTCh0cDMpOgltdWwJcTAKKwltb3YJLTE2KHVwLGksOCksICVyMTAKKwlhZGQJJXIxMSwgJXJicAorCW1vdgklcmR4LCAlcjExCisJYWRjCSQwLCAlcjkKKwltb3YJJXJicCwgLTI0KHVwLGksOCkKK0woZTMpOglhZGQJJXJheCwgJXIxMAorCW1vdgktOChtcCxpLDgpLCAlcmF4CisJYWRjCSQwLCAlcjExCisJbXVsCXEwCisJYWRkCSVyOSwgJXIxMAorCW1vdgklcmR4LCAlcjkKKwltb3YJLTgodXAsaSw4KSwgJXJicAorCWFkYwkkMCwgJXIxMQorCW1vdgklcjEwLCAtMTYodXAsaSw4KQorCWFkZAklcmF4LCAlcmJwCisJYWRjCSQwLCAlcjkKKwltb3YJKG1wLGksOCksICVyYXgKKwltdWwJcTAKKwltb3YJKHVwLGksOCksICVyMTAKKwlhZGQJJXIxMSwgJXJicAorCW1vdgklcmJwLCAtOCh1cCxpLDgpCisJYWRjCSQwLCAlcjkKKwltb3YJJXJkeCwgJXIxMQorCWFkZAklcmF4LCAlcjEwCisJbW92CTgobXAsaSw4KSwgJXJheAorCWFkYwkkMCwgJXIxMQorCW11bAlxMAorCW1vdgk4KHVwLGksOCksICVyYnAKKwlhZGQJJXI5LCAlcjEwCisJbW92CSVyZHgsICVyOQorCW1vdgklcjEwLCAodXAsaSw4KQorCWFkYwkkMCwgJXIxMQorCWFkZAklcmF4LCAlcmJwCisJYWRjCSQwLCAlcjkKKwltb3YJMTYobXAsaSw4KSwgJXJheAorCWFkZAkkNCwgaQorCWpuYwlMKHRwMykKKworTChlZDMpOgltdWwJcTAKKwltb3YJSSgtMTYodXApLC0xNih1cCxpLDgpKSwgJXIxMAorCWFkZAklcjExLCAlcmJwCisJYWRjCSQwLCAlcjkKKwltb3YJJXJicCwgSSgtMjQodXApLC0yNCh1cCxpLDgpKQorCWFkZAklcmF4LCAlcjEwCisJYWRjCSQwLCAlcmR4CisJYWRkCSVyOSwgJXIxMAorCWFkYwkkMCwgJXJkeAorCW1vdgklcjEwLCBJKC0xNih1cCksLTE2KHVwLGksOCkpCisJbW92CSVyZHgsIC04KHVwLG4sOCkJQyB1cFswXQorCW1vdgklcmJ4LCBxMAkJQyBwcmV2aW91c2x5IGNvbXB1dGVkIHEgbGltYiAtPiBxMAorCWxlYQk4KHVwKSwgdXAJCUMgdXArKworCWRlYwlqCisJam56CUwob3RwMykKK0MJam1wCUwoY2opCisKK0woY2opOgorSUZTVEQoYAlsZWEJLTgodXAsbiw4KSwgdXAJCUMgcGFyYW0gMjogdXAKKwlsZWEJKHVwLG4sOCksICVyZHgJCUMgcGFyYW0gMzogdXAgLSBuCisJbmVnCVIzMihuKQkJJykJQyBwYXJhbSA0OiBuCisKK0lGRE9TKGAJbGVhCS04KHVwLG4sOCksICVyZHgJQyBwYXJhbSAyOiB1cAorCWxlYQkoJXJkeCxuLDgpLCAlcjgJCUMgcGFyYW0gMzogdXAgLSBuCisJbmVnCVIzMihuKQorCW1vdgluLCAlcjkJCQlDIHBhcmFtIDQ6IG4KKwltb3YJcnAsICVyY3gJJykJQyBwYXJhbSAxOiBycAorCitJRlNURChgCXN1YgkkOCwgJXJzcAknKQorSUZET1MoYAlzdWIJJDQwLCAlcnNwCScpCisJQVNTRVJUKG56LCBgdGVzdCAkMTUsICVyc3AnKQorCUNBTEwoCW1wbl9hZGRfbikKK0lGU1REKGAJYWRkCSQ4LCAlcnNwCScpCitJRkRPUyhgCWFkZAkkNDAsICVyc3AJJykKKworTChyZXQpOglwb3AJJXIxNQorCXBvcAklcjE0CisJcG9wCSVyMTMKKwlwb3AJJXIxMgorCXBvcAklcmJwCisJcG9wCSVyYngKKwlGVU5DX0VYSVQoKQorCXJldAorCitMKGJ4MCk6CXRlc3QJJDIsIFI4KG4pCisJam56CUwoYjIpCisKK0woYjApOgorTChvdHAwKTpsZWEJKG4pLCBpCisJbW92CS04KG1wLG4sOCksICVyYXgKKwltdWwJcTAKKwltb3YJJXJkeCwgJXI5CisJbW92CS04KHVwLG4sOCksICVyYnAKKwlhZGQJJXJheCwgJXJicAorCWFkYwkkMCwgJXI5CisJbW92CShtcCxuLDgpLCAlcmF4CisJbXVsCXEwCisJbW92CSh1cCxuLDgpLCAlcmJ4CisJbW92CSVyZHgsICVyMTEKKwlhZGQJJXJheCwgJXJieAorCW1vdgk4KG1wLG4sOCksICVyYXgKKwlhZGMJJDAsICVyMTEKKwltdWwJcTAKKwltb3YJOCh1cCxuLDgpLCAlcmJwCisJYWRkCSVyOSwgJXJieAorCW1vdgklcmR4LCAlcjkKKwltb3YJJXJieCwgKHVwLG4sOCkKKwlhZGMJJDAsICVyMTEKKwlpbXVsCXUwaW52LCAlcmJ4CQlDIG5leHQgcSBsaW1iCisJam1wCUwoZTApCisKKwlBTElHTngKK0wodHAwKToJbXVsCXEwCisJbW92CS0xNih1cCxpLDgpLCAlcjEwCisJYWRkCSVyMTEsICVyYnAKKwltb3YJJXJkeCwgJXIxMQorCWFkYwkkMCwgJXI5CisJbW92CSVyYnAsIC0yNCh1cCxpLDgpCisJYWRkCSVyYXgsICVyMTAKKwltb3YJLTgobXAsaSw4KSwgJXJheAorCWFkYwkkMCwgJXIxMQorCW11bAlxMAorCWFkZAklcjksICVyMTAKKwltb3YJJXJkeCwgJXI5CisJbW92CS04KHVwLGksOCksICVyYnAKKwlhZGMJJDAsICVyMTEKKwltb3YJJXIxMCwgLTE2KHVwLGksOCkKKwlhZGQJJXJheCwgJXJicAorCWFkYwkkMCwgJXI5CisJbW92CShtcCxpLDgpLCAlcmF4CisJbXVsCXEwCisJbW92CSh1cCxpLDgpLCAlcjEwCisJYWRkCSVyMTEsICVyYnAKKwltb3YJJXJicCwgLTgodXAsaSw4KQorCWFkYwkkMCwgJXI5CisJbW92CSVyZHgsICVyMTEKKwlhZGQJJXJheCwgJXIxMAorCW1vdgk4KG1wLGksOCksICVyYXgKKwlhZGMJJDAsICVyMTEKKwltdWwJcTAKKwltb3YJOCh1cCxpLDgpLCAlcmJwCisJYWRkCSVyOSwgJXIxMAorCW1vdgklcmR4LCAlcjkKKwltb3YJJXIxMCwgKHVwLGksOCkKKwlhZGMJJDAsICVyMTEKK0woZTApOglhZGQJJXJheCwgJXJicAorCWFkYwkkMCwgJXI5CisJbW92CTE2KG1wLGksOCksICVyYXgKKwlhZGQJJDQsIGkKKwlqbmMJTCh0cDApCisKK0woZWQwKToJbXVsCXEwCisJbW92CUkoLTE2KHVwKSwtMTYodXAsaSw4KSksICVyMTAKKwlhZGQJJXIxMSwgJXJicAorCWFkYwkkMCwgJXI5CisJbW92CSVyYnAsIEkoLTI0KHVwKSwtMjQodXAsaSw4KSkKKwlhZGQJJXJheCwgJXIxMAorCWFkYwkkMCwgJXJkeAorCWFkZAklcjksICVyMTAKKwlhZGMJJDAsICVyZHgKKwltb3YJJXIxMCwgSSgtMTYodXApLC0xNih1cCxpLDgpKQorCW1vdgklcmR4LCAtOCh1cCxuLDgpCUMgdXBbMF0KKwltb3YJJXJieCwgcTAJCUMgcHJldmlvdXNseSBjb21wdXRlZCBxIGxpbWIgLT4gcTAKKwlsZWEJOCh1cCksIHVwCQlDIHVwKysKKwlkZWMJagorCWpueglMKG90cDApCisJam1wCUwoY2opCisKK0woYjIpOgljbXAJJC0yLCBSMzIobikKKwlqeglMKG4yKQorCitMKG90cDIpOmxlYQkyKG4pLCBpCisJbW92CS04KG1wLG4sOCksICVyYXgKKwltdWwJcTAKKwltb3YJLTgodXAsbiw4KSwgJXJicAorCW1vdgklcmR4LCAlcjkKKwlhZGQJJXJheCwgJXJicAorCWFkYwkkMCwgJXI5CisJbW92CShtcCxuLDgpLCAlcmF4CisJbXVsCXEwCisJbW92CSh1cCxuLDgpLCAlcmJ4CisJbW92CSVyZHgsICVyMTEKKwlhZGQJJXJheCwgJXJieAorCW1vdgk4KG1wLG4sOCksICVyYXgKKwlhZGMJJDAsICVyMTEKKwltdWwJcTAKKwlhZGQJJXI5LCAlcmJ4CisJbW92CSVyZHgsICVyOQorCW1vdgk4KHVwLG4sOCksICVyYnAKKwlhZGMJJDAsICVyMTEKKwltb3YJJXJieCwgKHVwLG4sOCkKKwlpbXVsCXUwaW52LCAlcmJ4CQlDIG5leHQgcSBsaW1iCisJam1wCUwoZTIpCisKKwlBTElHTngKK0wodHAyKToJbXVsCXEwCisJbW92CS0xNih1cCxpLDgpLCAlcjEwCisJYWRkCSVyMTEsICVyYnAKKwltb3YJJXJkeCwgJXIxMQorCWFkYwkkMCwgJXI5CisJbW92CSVyYnAsIC0yNCh1cCxpLDgpCisJYWRkCSVyYXgsICVyMTAKKwltb3YJLTgobXAsaSw4KSwgJXJheAorCWFkYwkkMCwgJXIxMQorCW11bAlxMAorCWFkZAklcjksICVyMTAKKwltb3YJJXJkeCwgJXI5CisJbW92CS04KHVwLGksOCksICVyYnAKKwlhZGMJJDAsICVyMTEKKwltb3YJJXIxMCwgLTE2KHVwLGksOCkKK0woZTIpOglhZGQJJXJheCwgJXJicAorCWFkYwkkMCwgJXI5CisJbW92CShtcCxpLDgpLCAlcmF4CisJbXVsCXEwCisJbW92CSh1cCxpLDgpLCAlcjEwCisJYWRkCSVyMTEsICVyYnAKKwltb3YJJXJicCwgLTgodXAsaSw4KQorCWFkYwkkMCwgJXI5CisJbW92CSVyZHgsICVyMTEKKwlhZGQJJXJheCwgJXIxMAorCW1vdgk4KG1wLGksOCksICVyYXgKKwlhZGMJJDAsICVyMTEKKwltdWwJcTAKKwltb3YJOCh1cCxpLDgpLCAlcmJwCisJYWRkCSVyOSwgJXIxMAorCW1vdgklcmR4LCAlcjkKKwltb3YJJXIxMCwgKHVwLGksOCkKKwlhZGMJJDAsICVyMTEKKwlhZGQJJXJheCwgJXJicAorCWFkYwkkMCwgJXI5CisJbW92CTE2KG1wLGksOCksICVyYXgKKwlhZGQJJDQsIGkKKwlqbmMJTCh0cDIpCisKK0woZWQyKToJbXVsCXEwCisJbW92CUkoLTE2KHVwKSwtMTYodXAsaSw4KSksICVyMTAKKwlhZGQJJXIxMSwgJXJicAorCWFkYwkkMCwgJXI5CisJbW92CSVyYnAsIEkoLTI0KHVwKSwtMjQodXAsaSw4KSkKKwlhZGQJJXJheCwgJXIxMAorCWFkYwkkMCwgJXJkeAorCWFkZAklcjksICVyMTAKKwlhZGMJJDAsICVyZHgKKwltb3YJJXIxMCwgSSgtMTYodXApLC0xNih1cCxpLDgpKQorCW1vdgklcmR4LCAtOCh1cCxuLDgpCUMgdXBbMF0KKwltb3YJJXJieCwgcTAJCUMgcHJldmlvdXNseSBjb21wdXRlZCBxIGxpbWIgLT4gcTAKKwlsZWEJOCh1cCksIHVwCQlDIHVwKysKKwlkZWMJagorCWpueglMKG90cDIpCisJam1wCUwoY2opCisKK0wobjEpOgltb3YJKG1wX3BhcmFtKSwgJXJheAorCW11bAlxMAorCWFkZAktMTYodXApLCAlcmF4CisJYWRjCS04KHVwKSwgJXJkeAorCW1vdgklcmR4LCAocnApCisJbW92CSQwLCBSMzIoJXJheCkKKwlhZGMJUjMyKCVyYXgpLCBSMzIoJXJheCkKKwlqbXAJTChyZXQpCisKK0wobjIpOgltb3YJKG1wX3BhcmFtKSwgJXJheAorCW1vdgktMjQodXApLCAlcmJwCisJbXVsCXEwCisJYWRkCSVyYXgsICVyYnAKKwltb3YJJXJkeCwgJXI5CisJYWRjCSQwLCAlcjkKKwltb3YJLTE2KG1wKSwgJXJheAorCW1vdgktMTYodXApLCAlcjEwCisJbXVsCXEwCisJYWRkCSVyYXgsICVyMTAKKwltb3YJJXJkeCwgJXIxMQorCWFkYwkkMCwgJXIxMQorCWFkZAklcjksICVyMTAKKwlhZGMJJDAsICVyMTEKKwltb3YJJXIxMCwgcTAKKwlpbXVsCXUwaW52LCBxMAkJQyBuZXh0IHEwCisJbW92CS0yNChtcCksICVyYXgKKwltdWwJcTAKKwlhZGQJJXJheCwgJXIxMAorCW1vdgklcmR4LCAlcjkKKwlhZGMJJDAsICVyOQorCW1vdgktMTYobXApLCAlcmF4CisJbW92CS04KHVwKSwgJXIxNAorCW11bAlxMAorCWFkZAklcmF4LCAlcjE0CisJYWRjCSQwLCAlcmR4CisJYWRkCSVyOSwgJXIxNAorCWFkYwkkMCwgJXJkeAorCXhvcglSMzIoJXJheCksIFIzMiglcmF4KQorCWFkZAklcjExLCAlcjE0CisJYWRjCSh1cCksICVyZHgKKwltb3YJJXIxNCwgKHJwKQorCW1vdgklcmR4LCA4KHJwKQorCWFkYwlSMzIoJXJheCksIFIzMiglcmF4KQorCWptcAlMKHJldCkKKworCUFMSUdOeAorTChuMyk6CW1vdgktMzIobXApLCAlcmF4CisJbW92CS0zMih1cCksICVyMTAKKwltdWwJcTAKKwlhZGQJJXJheCwgJXIxMAorCW1vdgktMjQobXApLCAlcmF4CisJbW92CSVyZHgsICVyMTEKKwlhZGMJJDAsICVyMTEKKwltb3YJLTI0KHVwKSwgJXJicAorCW11bAlxMAorCWFkZAklcmF4LCAlcmJwCisJbW92CSVyZHgsICVyOQorCWFkYwkkMCwgJXI5CisJbW92CS0xNihtcCksICVyYXgKKwlhZGQJJXIxMSwgJXJicAorCW1vdgktMTYodXApLCAlcjEwCisJYWRjCSQwLCAlcjkKKwltdWwJcTAKKwltb3YJJXJicCwgcTAKKwlpbXVsCXUwaW52LCBxMAkJQyBuZXh0IHEwCisJYWRkCSVyYXgsICVyMTAKKwltb3YJJXJkeCwgJXIxMQorCWFkYwkkMCwgJXIxMQorCW1vdgklcmJwLCAtMjQodXApCisJYWRkCSVyOSwgJXIxMAorCWFkYwkkMCwgJXIxMQorCW1vdgklcjEwLCAtMTYodXApCisJbW92CSVyMTEsIC0zMih1cCkJCUMgdXBbMF0KKwlsZWEJOCh1cCksIHVwCQlDIHVwKysKKwlkZWMJagorCWpueglMKG4zKQorCWptcAlMKGNqKQorRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaXNici9yc2gxYW9yc19uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpc2JyL3JzaDFhb3JzX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMmVhZWEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaXNici9yc2gxYW9yc19uLmFzbQpAQCAtMCwwICsxLDE5MyBAQAorZG5sICBYODYtNjQgbXBuX3JzaDFhZGRfbiwgbXBuX3JzaDFzdWJfbiBvcHRpbWlzZWQgZm9yIEludGVsIFNhbmR5IEJyaWRnZS4KKworZG5sICBDb3B5cmlnaHQgMjAwMywgMjAwNSwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIEFNRCBLOCxLOQkgPworQyBBTUQgSzEwCSA0LjI1CitDIEludGVsIFA0CSAyMS41CitDIEludGVsIGNvcmUyCSAzLjIKK0MgSW50ZWwgTkhNCSAzLjg3CitDIEludGVsIFNCUgkgMi4wNQorQyBJbnRlbCBhdG9tCSA/CitDIFZJQSBuYW5vCSA0NC45CisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsIGAlcmRpJykKK2RlZmluZShgdXAnLCBgJXJzaScpCitkZWZpbmUoYHZwJywgYCVyZHgnKQorZGVmaW5lKGBuJywgIGAlcmN4JykKKworaWZkZWYoYE9QRVJBVElPTl9yc2gxYWRkX24nLCBgCisJZGVmaW5lKEFERFNVQiwJICAgICAgYWRkKQorCWRlZmluZShBRENTQkIsCSAgICAgIGFkYykKKwlkZWZpbmUoZnVuY19uLAkgICAgICBtcG5fcnNoMWFkZF9uKQorCWRlZmluZShmdW5jX25jLAkgICAgICBtcG5fcnNoMWFkZF9uYyknKQoraWZkZWYoYE9QRVJBVElPTl9yc2gxc3ViX24nLCBgCisJZGVmaW5lKEFERFNVQiwJICAgICAgc3ViKQorCWRlZmluZShBRENTQkIsCSAgICAgIHNiYikKKwlkZWZpbmUoZnVuY19uLAkgICAgICBtcG5fcnNoMXN1Yl9uKQorCWRlZmluZShmdW5jX25jLAkgICAgICBtcG5fcnNoMXN1Yl9uYyknKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9yc2gxYWRkX24gbXBuX3JzaDFhZGRfbmMgbXBuX3JzaDFzdWJfbiBtcG5fcnNoMXN1Yl9uYykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworQVNNX1NUQVJUKCkKKwlURVhUCisKKwlBTElHTigxNikKK1BST0xPR1VFKGZ1bmNfbmMpCisJRlVOQ19FTlRSWSg0KQorSUZET1MoYAltb3YJNTYoJXJzcCksICVyOAknKQorCXB1c2gJJXJieAorCXB1c2gJJXJicAorCisJbmVnCSVyOAkJCUMgc2V0IEMgZmxhZyBmcm9tIHBhcmFtZXRlcgorCW1vdgkodXApLCAlcmJwCisJQURDU0JCCSh2cCksICVyYnAKKworCWptcAlMKGVudCkKK0VQSUxPR1VFKCkKKworCUFMSUdOKDE2KQorUFJPTE9HVUUoZnVuY19uKQorCUZVTkNfRU5UUlkoNCkKKwlwdXNoCSVyYngKKwlwdXNoCSVyYnAKKworCW1vdgkodXApLCAlcmJwCisJQUREU1VCCSh2cCksICVyYnAKK0woZW50KToKKwlzYmIJUjMyKCVyYngpLCBSMzIoJXJieCkJQyBzYXZlIGN5CisJbW92CVIzMiglcmJwKSwgUjMyKCVyYXgpCisJYW5kCSQxLCBSMzIoJXJheCkJCUMgcmV0dXJuIHZhbHVlCisKKwltb3YJUjMyKG4pLCBSMzIoJXIxMSkKKwlhbmQJJDMsIFIzMiglcjExKQorCisJY21wCSQxLCBSMzIoJXIxMSkKKwlqZQlMKGRvKQkJCUMganVtcCBpZiBuID0gMSA1IDkgLi4uCisKK0wobjEpOgljbXAJJDIsIFIzMiglcjExKQorCWpuZQlMKG4yKQkJCUMganVtcCB1bmxlc3MgbiA9IDIgNiAxMCAuLi4KKwlhZGQJUjMyKCVyYngpLCBSMzIoJXJieCkJQyByZXN0b3JlIGN5CisJbW92CTgodXApLCAlcjEwCisJQURDU0JCCTgodnApLCAlcjEwCisJbGVhCTgodXApLCB1cAorCWxlYQk4KHZwKSwgdnAKKwlsZWEJOChycCksIHJwCisJc2JiCVIzMiglcmJ4KSwgUjMyKCVyYngpCUMgc2F2ZSBjeQorCisJc2hyZAkkMSwgJXIxMCwgJXJicAorCW1vdgklcmJwLCAtOChycCkKKwlqbXAJTChjajEpCisKK0wobjIpOgljbXAJJDMsIFIzMiglcjExKQorCWpuZQlMKG4zKQkJCUMganVtcCB1bmxlc3MgbiA9IDMgNyAxMSAuLi4KKwlhZGQJUjMyKCVyYngpLCBSMzIoJXJieCkJQyByZXN0b3JlIGN5CisJbW92CTgodXApLCAlcjkKKwltb3YJMTYodXApLCAlcjEwCisJQURDU0JCCTgodnApLCAlcjkKKwlBRENTQkIJMTYodnApLCAlcjEwCisJbGVhCTE2KHVwKSwgdXAKKwlsZWEJMTYodnApLCB2cAorCWxlYQkxNihycCksIHJwCisJc2JiCVIzMiglcmJ4KSwgUjMyKCVyYngpCUMgc2F2ZSBjeQorCisJc2hyZAkkMSwgJXI5LCAlcmJwCisJbW92CSVyYnAsIC0xNihycCkKKwlqbXAJTChjajIpCisKK0wobjMpOglkZWMJbgkJCUMgY29tZSBoZXJlIGZvciBuID0gNCA4IDEyIC4uLgorCWFkZAlSMzIoJXJieCksIFIzMiglcmJ4KQlDIHJlc3RvcmUgY3kKKwltb3YJOCh1cCksICVyOAorCW1vdgkxNih1cCksICVyOQorCUFEQ1NCQgk4KHZwKSwgJXI4CisJQURDU0JCCTE2KHZwKSwgJXI5CisJbW92CTI0KHVwKSwgJXIxMAorCUFEQ1NCQgkyNCh2cCksICVyMTAKKwlsZWEJMjQodXApLCB1cAorCWxlYQkyNCh2cCksIHZwCisJbGVhCTI0KHJwKSwgcnAKKwlzYmIJUjMyKCVyYngpLCBSMzIoJXJieCkJQyBzYXZlIGN5CisKKwlzaHJkCSQxLCAlcjgsICVyYnAKKwltb3YJJXJicCwgLTI0KHJwKQorCXNocmQJJDEsICVyOSwgJXI4CisJbW92CSVyOCwgLTE2KHJwKQorTChjajIpOglzaHJkCSQxLCAlcjEwLCAlcjkKKwltb3YJJXI5LCAtOChycCkKK0woY2oxKToJbW92CSVyMTAsICVyYnAKKworTChkbyk6CisJc2hyCSQyLCBuCQkJQwkJCQk0CisJamUJTChlbmQpCQkJQwkJCQkyCisJQUxJR04oMTYpCitMKHRvcCk6CWFkZAlSMzIoJXJieCksIFIzMiglcmJ4KQkJQyByZXN0b3JlIGN5CisKKwltb3YJOCh1cCksICVyOAorCW1vdgkxNih1cCksICVyOQorCUFEQ1NCQgk4KHZwKSwgJXI4CisJQURDU0JCCTE2KHZwKSwgJXI5CisJbW92CTI0KHVwKSwgJXIxMAorCW1vdgkzMih1cCksICVyMTEKKwlBRENTQkIJMjQodnApLCAlcjEwCisJQURDU0JCCTMyKHZwKSwgJXIxMQorCisJbGVhCTMyKHVwKSwgdXAKKwlsZWEJMzIodnApLCB2cAorCisJc2JiCVIzMiglcmJ4KSwgUjMyKCVyYngpCUMgc2F2ZSBjeQorCisJc2hyZAkkMSwgJXI4LCAlcmJwCisJbW92CSVyYnAsIChycCkKKwlzaHJkCSQxLCAlcjksICVyOAorCW1vdgklcjgsIDgocnApCisJc2hyZAkkMSwgJXIxMCwgJXI5CisJbW92CSVyOSwgMTYocnApCisJc2hyZAkkMSwgJXIxMSwgJXIxMAorCW1vdgklcjEwLCAyNChycCkKKworCWRlYwluCisJbW92CSVyMTEsICVyYnAKKwlsZWEJMzIocnApLCBycAorCWpuZQlMKHRvcCkKKworTChlbmQpOglzaHJkCSQxLCAlcmJ4LCAlcmJwCisJbW92CSVyYnAsIChycCkKKwlwb3AJJXJicAorCXBvcAklcmJ4CisJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpc2JyL3JzaGlmdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaXNici9yc2hpZnQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMWMwZDQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaXNici9yc2hpZnQuYXNtCkBAIC0wLDAgKzEsMzcgQEAKK2RubCAgWDg2LTY0IG1wbl9yc2hpZnQgb3B0aW1pc2VkIGZvciBJbnRlbCBTYW5keSBCcmlkZ2UuCisKK2RubCAgQ29weXJpZ2h0IDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fcnNoaWZ0KQoraW5jbHVkZV9tcG4oYHg4Nl82NC9mYXN0c3NlL3JzaGlmdC1tb3ZkcXUyLmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaXNici9zZWNfdGFic2VsZWN0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpc2JyL3NlY190YWJzZWxlY3QuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MzYwMzQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaXNici9zZWNfdGFic2VsZWN0LmFzbQpAQCAtMCwwICsxLDM3IEBACitkbmwgIFg4Ni02NCBtcG5fc2VjX3RhYnNlbGVjdC4KKworZG5sICBDb3B5cmlnaHQgMjAxMiwgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9zZWNfdGFic2VsZWN0KQoraW5jbHVkZV9tcG4oYHg4Nl82NC9mYXN0c3NlL3NlY190YWJzZWxlY3QuYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2NvcmVpc2JyL3Nxcl9iYXNlY2FzZS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaXNici9zcXJfYmFzZWNhc2UuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2YTM2MTIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9jb3JlaXNici9zcXJfYmFzZWNhc2UuYXNtCkBAIC0wLDAgKzEsNDg0IEBACitkbmwgIEFNRDY0IG1wbl9zcXJfYmFzZWNhc2Ugb3B0aW1pc2VkIGZvciBJbnRlbCBTYW5keSBicmlkZ2UgYW5kIEl2eSBicmlkZ2UuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqw7ZybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAwOCwgMjAwOSwgMjAxMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgY3ljbGVzL2xpbWIJbXVsXzIJCWFkZG11bF8yCXNxcl9kaWFnX2FkZGxzaDEKK0MgQU1EIEs4LEs5CSA/CQkgPwkJCSA/CitDIEFNRCBLMTAJID8JCSA/CQkJID8KK0MgQU1EIGJ1bGwJID8JCSA/CQkJID8KK0MgQU1EIHBpbGUJID8JCSA/CQkJID8KK0MgQU1EIHN0ZWFtCSA/CQkgPwkJCSA/CitDIEFNRCBib2JjYXQJID8JCSA/CQkJID8KK0MgQU1EIGphZ3VhcgkgPwkJID8JCQkgPworQyBJbnRlbCBQNAkgPwkJID8JCQkgPworQyBJbnRlbCBjb3JlCSA/CQkgPwkJCSA/CitDIEludGVsIE5ITQkgPwkJID8JCQkgPworQyBJbnRlbCBTQlIJIDIuNTcJCSAyLjkzCQkJIDMuMAorQyBJbnRlbCBJQlIJIDIuMzUJCSAyLjY2CQkJIDMuMAorQyBJbnRlbCBIV0wJIDIuMDIJCSAyLjUJCQkgMi41CitDIEludGVsIEJXTAkgPwkJID8JCQkgPworQyBJbnRlbCBhdG9tCSA/CQkgPwkJCSA/CitDIFZJQSBuYW5vCSA/CQkgPwkJCSA/CisKK0MgVGhlIGlubmVyIGxvb3BzIG9mIHRoaXMgY29kZSBhcmUgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGEgY29kZSBnZW5lcmF0aW9uIGFuZAorQyBvcHRpbWlzYXRpb24gdG9vbCBzdWl0ZSB3cml0dGVuIGJ5IERhdmlkIEhhcnZleSBhbmQgVG9yYmrDtnJuIEdyYW5sdW5kLCBleGNlcHQKK0MgdGhhdCB0aGUgc3FyX2RpYWdfYWRkbHNoMSBsb29wIHdhcyBtYW51YWxseSB3cml0dGVuLgorCitDIFRPRE8KK0MgICogUmVwbGFjZSBjdXJyZW50IHVub3B0aW1pc2VkIHNxcl9kaWFnX2FkZGxzaDEgbG9vcCwgMi41IGMvbCBzaG91bGQgYmUgZWFzeS4KK0MgICogU3RyZWFtbGluZSBwb2ludGVyIHVwZGF0ZXMuCitDICAqIFBlcmhhcHMgc3VwcHJlc3MgYSBmZXcgbW9yZSB4b3IgaW5zbnMgaW4gZmVlZC1pbiBjb2RlLgorQyAgKiBNYWtlIHN1cmUgd2Ugd3JpdGUgbm8gZGVhZCByZWdpc3RlcnMgaW4gZmVlZC1pbiBjb2RlLgorQyAgKiBXZSBtaWdodCB1c2UgMzItYml0IHNpemUgb3BzLCBzaW5jZSBuID49IDJeMzIgaXMgbm9uLXRlcm1pbmF0aW5nLiAgV2F0Y2gKK0MgICAgb3V0IGZvciBuZWdhdGl2ZSBzaXplcyBiZWluZyB6ZXJvLWV4dGVuZGVkLCB0aG91Z2guCitDICAqIFRoZSBzdHJhaWdodC1saW5lIGNvZGUgZm9yIG4gPD0gMyBjb21lcyBmcm9tIHRoZSBLOCBjb2RlLCBhbmQgbWlnaHQgYmUKK0MgICAgcXVpdGUgc3ViLW9wdGltYWwgaGVyZS4gIFdyaXRlIHNwZWNpZmljIGNvZGUsIGFuZCBhZGQgY29kZSBmb3IgbiA9IDQuCitDICAqIFRoZSBtdWxfMiBsb29wIGhhcyBhIDEwIGluc24gY29tbW9uIHNlcXVlbmNlIGluIHRoZSBsb29wIHN0YXJ0IGFuZCB0aGUKK0MgICAgd2luZC1kb3duIGNvZGUuICBUcnkgcmUtcm9sbGluZyBpdC4KK0MgICogVGhpcyBmaWxlIGhhcyBiZWVuIHRoZSBzdWJqZWN0IHRvIGp1c3QgYmFzaWMgbWljcm8tb3B0aW1pc2F0aW9uLgorCitDIFdoZW4gcGxheWluZyB3aXRoIHBvaW50ZXJzLCBzZXQgdGhpcyB0byAkMiB0byBmYWxsIGJhY2sgdG8gY29uc2VydmF0aXZlCitDIGluZGV4aW5nIGluIHdpbmQtZG93biBjb2RlLgorZGVmaW5lKGBJJyxgJDEnKQorCitkZWZpbmUoYHJwJywJICBgJXJkaScpCitkZWZpbmUoYHVwJywJICBgJXJzaScpCitkZWZpbmUoYHVuX3BhcmFtJyxgJXJkeCcpCisKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMzIpCitQUk9MT0dVRShtcG5fc3FyX2Jhc2VjYXNlKQorCUZVTkNfRU5UUlkoMykKKworCWNtcAkkMiwgdW5fcGFyYW0KKwlqYWUJTChndDEpCisKKwltb3YJKHVwKSwgJXJheAorCW11bAklcmF4CisJbW92CSVyYXgsIChycCkKKwltb3YJJXJkeCwgOChycCkKKwlGVU5DX0VYSVQoKQorCXJldAorCitMKGd0MSk6CWpuZQlMKGd0MikKKworCW1vdgkodXApLCAlcmF4CisJbW92CSVyYXgsICVyOAorCW11bAklcmF4CisJbW92CTgodXApLCAlcjExCisJbW92CSVyYXgsIChycCkKKwltb3YJJXIxMSwgJXJheAorCW1vdgklcmR4LCAlcjkKKwltdWwJJXJheAorCW1vdgklcmF4LCAlcjEwCisJbW92CSVyMTEsICVyYXgKKwltb3YJJXJkeCwgJXIxMQorCW11bAklcjgKKwl4b3IJJXI4LCAlcjgKKwlhZGQJJXJheCwgJXI5CisJYWRjCSVyZHgsICVyMTAKKwlhZGMJJXI4LCAlcjExCisJYWRkCSVyYXgsICVyOQorCW1vdgklcjksIDgocnApCisJYWRjCSVyZHgsICVyMTAKKwltb3YJJXIxMCwgMTYocnApCisJYWRjCSVyOCwgJXIxMQorCW1vdgklcjExLCAyNChycCkKKwlGVU5DX0VYSVQoKQorCXJldAorCitMKGd0Mik6CWNtcAkkNCwgdW5fcGFyYW0KKwlqYWUJTChndDMpCitkZWZpbmUoYHYwJywgYCVyOCcpCitkZWZpbmUoYHYxJywgYCVyOScpCitkZWZpbmUoYHcwJywgYCVyMTAnKQorZGVmaW5lKGB3MicsIGAlcjExJykKKworCW1vdgkodXApLCAlcmF4CisJbW92CSVyYXgsICVyMTAKKwltdWwJJXJheAorCW1vdgk4KHVwKSwgJXIxMQorCW1vdgklcmF4LCAocnApCisJbW92CSVyMTEsICVyYXgKKwltb3YJJXJkeCwgOChycCkKKwltdWwJJXJheAorCW1vdgkxNih1cCksICVyY3gKKwltb3YJJXJheCwgMTYocnApCisJbW92CSVyY3gsICVyYXgKKwltb3YJJXJkeCwgMjQocnApCisJbXVsCSVyYXgKKwltb3YJJXJheCwgMzIocnApCisJbW92CSVyZHgsIDQwKHJwKQorCisJbW92CSVyMTEsICVyYXgKKwltdWwJJXIxMAorCW1vdgklcmF4LCAlcjgKKwltb3YJJXJjeCwgJXJheAorCW1vdgklcmR4LCAlcjkKKwltdWwJJXIxMAorCXhvcgklcjEwLCAlcjEwCisJYWRkCSVyYXgsICVyOQorCW1vdgklcjExLCAlcmF4CisJbW92CSVyMTAsICVyMTEKKwlhZGMJJXJkeCwgJXIxMAorCisJbXVsCSVyY3gKKwlhZGQJJXJheCwgJXIxMAorCWFkYwklcjExLCAlcmR4CisJYWRkCSVyOCwgJXI4CisJYWRjCSVyOSwgJXI5CisJYWRjCSVyMTAsICVyMTAKKwlhZGMJJXJkeCwgJXJkeAorCWFkYwklcjExLCAlcjExCisJYWRkCSVyOCwgOChycCkKKwlhZGMJJXI5LCAxNihycCkKKwlhZGMJJXIxMCwgMjQocnApCisJYWRjCSVyZHgsIDMyKHJwKQorCWFkYwklcjExLCA0MChycCkKKwlGVU5DX0VYSVQoKQorCXJldAorCitMKGd0Myk6CisKK2RlZmluZShgdjAnLCBgJXI4JykKK2RlZmluZShgdjEnLCBgJXI5JykKK2RlZmluZShgdzAnLCBgJXIxMCcpCitkZWZpbmUoYHcxJywgYCVyMTEnKQorZGVmaW5lKGB3MicsIGAlcmJ4JykKK2RlZmluZShgdzMnLCBgJXJicCcpCitkZWZpbmUoYHVuJywgYCVyMTInKQorZGVmaW5lKGBuJywgIGAlcmN4JykKKworZGVmaW5lKGBYMCcsIGAlcjEzJykKK2RlZmluZShgWDEnLCBgJXIxNCcpCisKK0woZG9fbXVsXzIpOgorCW1vdgkodXApLCB2MAorCXB1c2gJJXJieAorCWxlYQkocnAsdW5fcGFyYW0sOCksIHJwCUMgcG9pbnQgcnAgYXQgUlt1bl0KKwltb3YJOCh1cCksICVyYXgKKwlwdXNoCSVyYnAKKwlsZWEJKHVwLHVuX3BhcmFtLDgpLCB1cAlDIHBvaW50IHVwIHJpZ2h0IGFmdGVyIFUncyBlbmQKKwltb3YJJXJheCwgdjEKKwlwdXNoCSVyMTIKKwltb3YJJDEsIFIzMih1bikJCUMgZnJlZSB1cCByZHgKKwlwdXNoCSVyMTMKKwlzdWIJdW5fcGFyYW0sIHVuCisJcHVzaAklcjE0CisJcHVzaAl1bgorCW11bAl2MAorCW1vdgklcmF4LCAocnAsdW4sOCkKKwltb3YJOCh1cCx1biw4KSwgJXJheAorCXRlc3QJJDEsIFI4KHVuKQorCWpueglMKG0yYjEpCisKK0wobTJiMCk6bGVhCTIodW4pLCBuCisJeG9yCVIzMih3MSksIFIzMih3MSkJQyBGSVhNRQorCXhvcglSMzIodzIpLCBSMzIodzIpCUMgRklYTUUKKwltb3YJJXJkeCwgdzAKKwlqbXAJTChtMmwwKQorCitMKG0yYjEpOmxlYQkxKHVuKSwgbgorCXhvcglSMzIodzMpLCBSMzIodzMpCUMgRklYTUUKKwl4b3IJUjMyKHcwKSwgUjMyKHcwKQlDIEZJWE1FCisJbW92CSVyZHgsIHcyCisJam1wCUwobTJsMSkKKworCUFMSUdOKDMyKQorTChtMnRwKToKK0wobTJsMCk6bXVsCXYwCisJYWRkCSVyYXgsIHcwCisJbW92CSVyZHgsIHczCisJYWRjCSQwLCB3MworCW1vdgktOCh1cCxuLDgpLCAlcmF4CisJbXVsCXYxCisJYWRkCXcxLCB3MAorCWFkYwkkMCwgdzMKKwlhZGQJJXJheCwgdzIKKwltb3YJdzAsIC04KHJwLG4sOCkKKwltb3YJJXJkeCwgdzAKKwlhZGMJJDAsIHcwCisJbW92CSh1cCxuLDgpLCAlcmF4CitMKG0ybDEpOm11bAl2MAorCWFkZAklcmF4LCB3MgorCW1vdgklcmR4LCB3MQorCWFkYwkkMCwgdzEKKwlhZGQJdzMsIHcyCisJbW92CSh1cCxuLDgpLCAlcmF4CisJYWRjCSQwLCB3MQorCW11bAl2MQorCW1vdgl3MiwgKHJwLG4sOCkKKwlhZGQJJXJheCwgdzAKKwltb3YJJXJkeCwgdzIKKwltb3YJOCh1cCxuLDgpLCAlcmF4CisJYWRjCSQwLCB3MgorCWFkZAkkMiwgbgorCWpuYwlMKG0ydHApCisKK0wobTJlZCk6bXVsCXYwCisJYWRkCSVyYXgsIHcwCisJbW92CSVyZHgsIHczCisJYWRjCSQwLCB3MworCW1vdglJKC04KHVwKSwtOCh1cCxuLDgpKSwgJXJheAorCW11bAl2MQorCWFkZAl3MSwgdzAKKwlhZGMJJDAsIHczCisJYWRkCSVyYXgsIHcyCisJbW92CXcwLCBJKC04KHJwKSwtOChycCxuLDgpKQorCWFkYwkkMCwgJXJkeAorCWFkZAl3MywgdzIKKwltb3YJdzIsIEkoKHJwKSwocnAsbiw4KSkKKwlhZGMJJDAsICVyZHgKKwltb3YJJXJkeCwgSSg4KHJwKSw4KHJwLG4sOCkpCisKKwlhZGQJJDIsIHVuCQkJQyBkZWNyZWFzZSB8dW58CisKK0woZG9fYWRkbXVsXzIpOgorTChvdXRlcik6CisJbGVhCTE2KHJwKSwgcnAKKwljbXAJJC0yLCBSMzIodW4pCQlDIGp1bXAgaWYgdW4gQyB7LTEsMH0gIEZJWE1FIGp1bXAgaWYgdW4gQyB7LTIsMX0KKwlqZ2UJTChjb3JuZXIpCQlDIEZJWE1FOiBtb3ZlIHRvIGJlZm9yZSB0aGUgbGVhIGFib3ZlCisKKwltb3YJLTgodXAsdW4sOCksIHYwCisJbW92CSh1cCx1biw4KSwgJXJheAorCW1vdgklcmF4LCB2MQorCW11bAl2MAorCXRlc3QJJDEsIFI4KHVuKQorCWpueglMKGExeDEpCisKK0woYTF4MCk6bW92CShycCx1biw4KSwgWDAKKwl4b3IJdzAsIHcwCisJbW92CTgocnAsdW4sOCksIFgxCisJYWRkCSVyYXgsIFgwCisJbW92CSVyZHgsIHcxCisJYWRjCSQwLCB3MQorCXhvcgl3MiwgdzIKKwltb3YJWDAsIChycCx1biw4KQorCW1vdgk4KHVwLHVuLDgpLCAlcmF4CisJdGVzdAkkMiwgUjgodW4pCisJam56CUwoYTExMCkKKworTChhMTAwKTpsZWEJMih1biksIG4JCUMgdW4gPSA0LCA4LCAxMiwgLi4uCisJam1wCUwobG8wKQorCitMKGExMTApOmxlYQkodW4pLCBuCQkJQyB1biA9IDIsIDYsIDEwLCAuLi4KKwlqbXAJTChsbzIpCisKK0woYTF4MSk6bW92CShycCx1biw4KSwgWDEKKwl4b3IJdzIsIHcyCisJbW92CTgocnAsdW4sOCksIFgwCisJYWRkCSVyYXgsIFgxCisJbW92CSVyZHgsIHczCisJYWRjCSQwLCB3MworCXhvcgl3MCwgdzAKKwltb3YJOCh1cCx1biw4KSwgJXJheAorCXRlc3QJJDIsIFI4KHVuKQorCWp6CUwoYTExMSkKKworTChhMTAxKTpsZWEJMyh1biksIG4JCUMgdW4gPSAxLCA1LCA5LCAuLi4KKwlqbXAJTChsbzEpCisKK0woYTExMSk6bGVhCTEodW4pLCBuCQlDIHVuID0gMywgNywgMTEsIC4uLgorCWptcAlMKGxvMykKKworCUFMSUdOKDMyKQorTCh0b3ApOgltdWwJdjEKKwltb3YJJXJkeCwgdzAKKwlhZGQJJXJheCwgWDAKKwlhZGMJJDAsIHcwCisJYWRkCXcxLCBYMQorCWFkYwkkMCwgdzMKKwlhZGQJdzIsIFgwCisJYWRjCSQwLCB3MAorCW1vdgktMTYodXAsbiw4KSwgJXJheAorTChsbzEpOgltdWwJdjAKKwlhZGQJJXJheCwgWDAKKwltb3YJJXJkeCwgdzEKKwlhZGMJJDAsIHcxCisJbW92CS0xNih1cCxuLDgpLCAlcmF4CisJbXVsCXYxCisJbW92CVgxLCAtMjQocnAsbiw4KQorCW1vdgktOChycCxuLDgpLCBYMQorCWFkZAl3MywgWDAKKwlhZGMJJDAsIHcxCisJbW92CSVyZHgsIHcyCisJbW92CVgwLCAtMTYocnAsbiw4KQorCWFkZAklcmF4LCBYMQorCWFkYwkkMCwgdzIKKwltb3YJLTgodXAsbiw4KSwgJXJheAorCWFkZAl3MCwgWDEKKwlhZGMJJDAsIHcyCitMKGxvMCk6CW11bAl2MAorCWFkZAklcmF4LCBYMQorCW1vdgklcmR4LCB3MworCWFkYwkkMCwgdzMKKwltb3YJLTgodXAsbiw4KSwgJXJheAorCW11bAl2MQorCWFkZAl3MSwgWDEKKwltb3YJKHJwLG4sOCksIFgwCisJYWRjCSQwLCB3MworCW1vdgklcmR4LCB3MAorCWFkZAklcmF4LCBYMAorCWFkYwkkMCwgdzAKKwltb3YJKHVwLG4sOCksICVyYXgKK0wobG8zKToJbXVsCXYwCisJYWRkCXcyLCBYMAorCW1vdglYMSwgLTgocnAsbiw4KQorCW1vdgklcmR4LCB3MQorCWFkYwkkMCwgdzAKKwlhZGQJJXJheCwgWDAKKwlhZGMJJDAsIHcxCisJbW92CSh1cCxuLDgpLCAlcmF4CisJYWRkCXczLCBYMAorCWFkYwkkMCwgdzEKKwltdWwJdjEKKwltb3YJOChycCxuLDgpLCBYMQorCWFkZAklcmF4LCBYMQorCW1vdgklcmR4LCB3MgorCWFkYwkkMCwgdzIKKwltb3YJOCh1cCxuLDgpLCAlcmF4CisJbW92CVgwLCAocnAsbiw4KQorTChsbzIpOgltdWwJdjAKKwlhZGQJdzAsIFgxCisJbW92CSVyZHgsIHczCisJYWRjCSQwLCB3MgorCWFkZAklcmF4LCBYMQorCW1vdgk4KHVwLG4sOCksICVyYXgKKwltb3YJMTYocnAsbiw4KSwgWDAKKwlhZGMJJDAsIHczCisJYWRkCSQ0LCBuCisJam5jCUwodG9wKQorCitMKGVuZCk6CW11bAl2MQorCWFkZAl3MSwgWDEKKwlhZGMJJDAsIHczCisJYWRkCXcyLCAlcmF4CisJYWRjCSQwLCAlcmR4CisJbW92CVgxLCBJKC04KHJwKSwtMjQocnAsbiw4KSkKKwlhZGQJdzMsICVyYXgKKwlhZGMJJDAsICVyZHgKKwltb3YJJXJheCwgSSgocnApLC0xNihycCxuLDgpKQorCW1vdgklcmR4LCBJKDgocnApLC04KHJwLG4sOCkpCisKKwlhZGQJJDIsIHVuCQkJQyBkZWNyZWFzZSB8dW58CisJam1wCUwob3V0ZXIpCQlDIGxvb3AgdW50aWwgYSBzbWFsbCBjb3JuZXIgcmVtYWlucworCitMKGNvcm5lcik6CisJcG9wCW4KKwlqZwlMKHNtYWxsX2Nvcm5lcikKKworCWxlYQk4KHJwKSwgcnAKKwltb3YJLTI0KHVwKSwgdjAKKwltb3YJLTE2KHVwKSwgJXJheAorCW1vdgklcmF4LCB2MQorCW11bAl2MAorCW1vdgktMjQocnApLCBYMAorCW1vdgktMTYocnApLCBYMQorCWFkZAklcmF4LCBYMAorCW1vdgklcmR4LCB3MQorCWFkYwkkMCwgdzEKKwl4b3IJdzIsIHcyCisJbW92CVgwLCAtMjQocnApCisJbW92CS04KHVwKSwgJXJheAorCW11bAl2MAorCWFkZAkkMCwgWDEKKwltb3YJJXJkeCwgdzMKKwlhZGMJJDAsIHcyCisJYWRkCSVyYXgsIFgxCisJbW92CS04KHVwKSwgJXJheAorCWFkYwkkMCwgdzMKKwltdWwJdjEKKwlhZGQJdzEsIFgxCisJYWRjCSQwLCB3MworCWFkZAl3MiwgJXJheAorCWFkYwkkMCwgJXJkeAorCW1vdglYMSwgLTE2KHJwKQorCWptcAlMKGNvbSkKKworTChzbWFsbF9jb3JuZXIpOgorCW1vdgktOChycCksIHczCisJbW92CS0xNih1cCksIHYwCisJbW92CS04KHVwKSwgJXJheAorCW11bAl2MAorTChjb20pOglhZGQJdzMsICVyYXgKKwlhZGMJJDAsICVyZHgKKwltb3YJJXJheCwgLTgocnApCisJbW92CSVyZHgsIChycCkKKworTChzcXJfZGlhZ19hZGRsc2gxKToKKwltb3YJLTgodXAsbiw4KSwgJXJheAorCXNobAluCisJbXVsCSVyYXgKKwltb3YJJXJheCwgKHJwLG4sOCkKKworCXhvcglSMzIoJXJieCksIFIzMiglcmJ4KQorCW1vdgk4KHJwLG4sOCksICVyOAorCW1vdgkxNihycCxuLDgpLCAlcjkKKwlqbXAJTChkbSkKKworCUFMSUdOKDMyKQorTChkdG9wKTphZGQJJXI4LCAlcjEwCisJYWRjCSVyOSwgJXJheAorCW1vdgk4KHJwLG4sOCksICVyOAorCW1vdgkxNihycCxuLDgpLCAlcjkKKwltb3YJJXIxMCwgLTgocnAsbiw4KQorCW1vdgklcmF4LCAocnAsbiw4KQorTChkbSk6CWFkYwklcjgsICVyOAorCWFkYwklcjksICVyOQorCW1vdgkodXAsbiw0KSwgJXJheAorCWxlYQkoJXJkeCwlcmJ4KSwgJXIxMAorCXNldGMJUjgoJXJieCkKKwltdWwJJXJheAorCWFkZAkkMiwgbgorCWpzCUwoZHRvcCkKKworTChkZW5kKTphZGQJJXI4LCAlcjEwCisJYWRjCSVyOSwgJXJheAorCW1vdgklcjEwLCBJKC04KHJwKSwtOChycCxuLDgpKQorCW1vdgklcmF4LCBJKChycCksKHJwLG4sOCkpCisJYWRjCSVyYngsICVyZHgKKwltb3YJJXJkeCwgSSg4KHJwKSw4KHJwLG4sOCkpCisKKwlwb3AJJXIxNAorCXBvcAklcjEzCisJcG9wCSVyMTIKKwlwb3AJJXJicAorCXBvcAklcmJ4CisJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2Rhcndpbi5tNCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2Rhcndpbi5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzcxNDc2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvZGFyd2luLm00CkBAIC0wLDAgKzEsODIgQEAKK2RpdmVydCgtMSkKK2RubCAgQ29weXJpZ2h0IDIwMDgsIDIwMTEsIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworZGVmaW5lKGBEQVJXSU4nKQorCitkZWZpbmUoYExFQScsYGRubAoraWZkZWYoYFBJQycsCisJYGxlYQkkMSglcmlwKSwgJDInCissCisJYG1vdmFicwlgJCckMSwgJDInKQorJykKKworZG5sICBVc2FnZTogQ0FMTChmdW5jbmFtZSkKK2RubAorZG5sICBTaW1wbHkgb3ZlcnJpZGUgdGhlIGRlZmluaXRpb24gaW4geDg2XzY0LWRlZnMubTQuCisKK2RlZmluZShgQ0FMTCcsYGNhbGwJR1NZTV9QUkVGSVhgJyQxJykKK2RlZmluZShgVENBTEwnLGBqbXAJR1NZTV9QUkVGSVhgJyQxJykKKworCitkbmwgIFVzYWdlOiBKVU1QVEFCU0VDVAorZG5sCitkbmwgIENBVVRJT046IERvIG5vdCBwdXQgYW55dGhpbmcgc2Vuc2libGUgaGVyZSwgbGlrZSBST0RBVEEuICBUaGF0IHdvcmtzIHdpdGgKK2RubCAgc29tZSBEYXJ3aW4gdG9vbCBjaGFpbnMsIGJ1dCBzaWxlbnRseSBicmVha3Mgd2l0aCBvdGhlci4gIChOb3RlIHRoYXQKK2RubCAgcHV0dGluZyBqdW1wIHRhYmxlcyBpbiB0aGUgdGV4dCBzZWdtZW50IGlzIGEgcmVhbGx5IHBvb3IgaWRlYSBmb3IgbWFueSBQQworZG5sICBwcm9jZXNzb3JzLCBzaW5jZSB0aGV5IGNhbm5vdCBjYWNoZSB0aGUgc2FtZSB0aGluZyBpbiBib3RoIEwxRCBhbmQgTDJJLikKKworZGVmaW5lKGBKVU1QVEFCU0VDVCcsIGAudGV4dCcpCisKKworZG5sICBVc2FnZTogSk1QRU5UKHRhcmdsYWJlbCx0YWJsYWJlbCkKKworZGVmaW5lKGBKTVBFTlQnLGBkbmwKK2lmZGVmKGBQSUMnLAorCWAuc2V0CSQxX3RtcCwgJDEtJDIKKwkubG9uZwkkMV90bXAnCissCisJYC5xdWFkCSQxJworKScpCisKK2RubCAgVGFyZ2V0IEFCSSBtYWNyb3MuICBGb3IgRGFyd2luIHdlIG92ZXJyaWRlIElGRUxGIChhbmQgbGVhdmUgZGVmYXVsdCBmb3IKK2RubCAgSUZET1MgYW5kIElGU1REKS4KKworZGVmaW5lKGBJRkVMRicsICAgYCcpCisKKworZG5sICBVc2FnZTogUFJPVEVDVChzeW1ib2wpCitkbmwKK2RubCAgVXNlZCBmb3IgcHJpdmF0ZSBHTVAgc3ltYm9scyB0aGF0IHNob3VsZCBuZXZlciBiZSBvdmVycmlkZGVuIGJ5IHVzZXJzLgorZG5sICBUaGlzIGNhbiBzYXZlIHJlbG9jIGVudHJpZXMgYW5kIGltcHJvdmUgc2hsaWIgc2hhcmluZyBhcyB3ZWxsIGFzCitkbmwgIGFwcGxpY2F0aW9uIHN0YXJ0dXAgdGltZXMKKworZGVmaW5lKGBQUk9URUNUJywgIGAucHJpdmF0ZV9leHRlcm4gJDEnKQorCisKK2RpdmVydGAnZG5sCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9kaXZfcXJfMW5fcGkxLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2Rpdl9xcl8xbl9waTEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZDQ1ZTIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9kaXZfcXJfMW5fcGkxLmFzbQpAQCAtMCwwICsxLDI0NyBAQAorZG5sICB4ODYtNjQgbXBuX2Rpdl9xcl8xbl9waTEKK2RubCAgLS0gRGl2aWRlIGFuIG1wbiBudW1iZXIgYnkgYSBub3JtYWxpemVkIHNpbmdsZS1saW1iIG51bWJlciwKK2RubCAgICAgdXNpbmcgYSBzaW5nbGUtbGltYiBpbnZlcnNlLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBOaWVscyBNw7ZsbGVyCisKK2RubCAgQ29weXJpZ2h0IDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDCQljL2wKK0MgQU1EIEs4LEs5CTEzCitDIEFNRCBLMTAJMTMKK0MgQU1EIGJ1bGwJMTYuNQorQyBBTUQgcGlsZQkxNQorQyBBTUQgc3RlYW0JID8KK0MgQU1EIGJvYmNhdAkxNgorQyBBTUQgamFndWFyCSA/CitDIEludGVsIFA0CTQ3CXBvb3IKK0MgSW50ZWwgY29yZQkxOS4yNQorQyBJbnRlbCBOSE0JMTgKK0MgSW50ZWwgU0JSCTE1CXBvb3IKK0MgSW50ZWwgSUJSCTEzCitDIEludGVsIEhXTAkxMS43CitDIEludGVsIEJXTAkgPworQyBJbnRlbCBhdG9tCTUyCXZlcnkgcG9vcgorQyBWSUEgbmFubwkxOQorCisKK0MgSU5QVVQgUGFyYW1ldGVycworZGVmaW5lKGBRUCcsIGAlcmRpJykKK2RlZmluZShgVVAnLCBgJXJzaScpCitkZWZpbmUoYFVOX0lOUFVUJywgYCVyZHgnKQorZGVmaW5lKGBVMScsIGAlcmN4JykJQyBBbHNvIGluICVyYXgKK2RlZmluZShgRCcsIGAlcjgnKQorZGVmaW5lKGBESU5WJywgYCVyOScpCisKK0MgSW52YXJpYW50cworZGVmaW5lKGBCMicsIGAlcmJwJykKK2RlZmluZShgQjJtZCcsIGAlcmJ4JykKKworQyBWYXJpYWJsZXMKK2RlZmluZShgVU4nLCBgJXI4JykJQyBPdmVybGFwcyBEIGlucHV0CitkZWZpbmUoYFQnLCBgJXIxMCcpCitkZWZpbmUoYFUwJywgYCVyMTEnKQorZGVmaW5lKGBVMicsIGAlcjEyJykKK2RlZmluZShgUTAnLCBgJXIxMycpCitkZWZpbmUoYFExJywgYCVyMTQnKQorZGVmaW5lKGBRMicsIGAlcjE1JykKKworQUJJX1NVUFBPUlQoU1RENjQpCisKKwlBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigxNikKK1BST0xPR1VFKG1wbl9kaXZfcXJfMW5fcGkxKQorCUZVTkNfRU5UUlkoNCkKK0lGRE9TKGAJbW92CTU2KCVyc3ApLCAlcjgJJykKK0lGRE9TKGAJbW92CTY0KCVyc3ApLCAlcjkJJykKKwlkZWMJVU5fSU5QVVQKKwlqbnoJTChmaXJzdCkKKworCUMgSnVzdCBhIHNpbmdsZSAyLzEgZGl2aXNpb24uCisJQyBULCBVMCBhcmUgYWxsb2NhdGVkIGluIHNjcmF0Y2ggcmVnaXN0ZXJzCisJbGVhCTEoVTEpLCBUCisJbW92CVUxLCAlcmF4CisJbXVsCURJTlYKKwltb3YJKFVQKSwgVTAKKwlhZGQJVTAsICVyYXgKKwlhZGMJVCwgJXJkeAorCW1vdgklcmR4LCBUCisJaW11bAlELCAlcmR4CisJc3ViCSVyZHgsIFUwCisJY21wCVUwLCAlcmF4CisJbGVhCShVMCwgRCksICVyYXgKKwljbW92bmMJVTAsICVyYXgKKwlzYmIJJDAsIFQKKwljbXAJRCwgJXJheAorCWpjCUwoc2luZ2xlX2Rpdl9kb25lKQorCXN1YglELCAlcmF4CisJYWRkCSQxLCBUCitMKHNpbmdsZV9kaXZfZG9uZSk6CisJbW92CVQsIChRUCkKKwlGVU5DX0VYSVQoKQorCXJldAorTChmaXJzdCk6CisJQyBGSVhNRTogQ291bGQgZGVsYXkgc29tZSBvZiB0aGVzZSB1bnRpbCB3ZSBlbnRlciB0aGUgbG9vcC4KKwlwdXNoCSVyMTUKKwlwdXNoCSVyMTQKKwlwdXNoCSVyMTMKKwlwdXNoCSVyMTIKKwlwdXNoCSVyYngKKwlwdXNoCSVyYnAKKworCW1vdglELCBCMgorCWltdWwJRElOViwgQjIKKwluZWcJQjIKKwltb3YJQjIsIEIybWQKKwlzdWIJRCwgQjJtZAorCisJQyBEIG5vdCBuZWVkZWQgdW50aWwgZmluYWwgcmVkdWN0aW9uCisJcHVzaAlECisJbW92CVVOX0lOUFVULCBVTglDIENsb2JiZXJzIEQKKworCW1vdglESU5WLCAlcmF4CisJbXVsCVUxCisJbW92CSVyYXgsIFEwCisJYWRkCVUxLCAlcmR4CisJbW92CSVyZHgsIFQKKworCW1vdglCMiwgJXJheAorCW11bAlVMQorCW1vdgktOChVUCwgVU4sIDgpLCBVMAorCW1vdgkoVVAsIFVOLCA4KSwgVTEKKwltb3YJVCwgKFFQLCBVTiwgOCkKKwlhZGQJJXJheCwgVTAKKwlhZGMJJXJkeCwgVTEKKwlzYmIJVTIsIFUyCisJZGVjCVVOCisJbW92CVUxLCAlcmF4CisJanoJTChmaW5hbCkKKworCUFMSUdOKDE2KQorCisJQyBMb29wIGlzIDI4IGluc3RydWN0aW9ucywgMzAgZGVjb2RlciBzbG90cywgc2hvdWxkIHJ1biBpbiAxMCBjeWNsZXMuCisJQyBBdCBlbnRyeSwgJXJheCBob2xkcyBhbiBleHRyYSBjb3B5IG9mIFUxCitMKGxvb3ApOgorCUMge1EyLCBRMSwgUTB9IDwtLSBESU5WICogVTEgKyBCIChRMCArIFUyIERJTlYpICsgQl4yIFUyCisJQyBSZW1haW5zIHRvIGFkZCBpbiBCIChVMSArIGMpCisJbW92CURJTlYsIFExCisJbW92CVUyLCBRMgorCWFuZAlVMiwgUTEKKwluZWcJUTIKKwltdWwJRElOVgorCWFkZAklcmR4LCBRMQorCWFkYwkkMCwgUTIKKwlhZGQJUTAsIFExCisJbW92CSVyYXgsIFEwCisJbW92CUIyLCAlcmF4CisJbGVhCShCMm1kLCBVMCksIFQKKwlhZGMJJDAsIFEyCisKKwlDIHtVMiwgVTEsIFUwfSA8LS0gKFUwICsgVTIgQjIgLWMgVSkgQiArIFUxIEIyICsgdQorCW11bAlVMQorCWFuZAlCMiwgVTIKKwlhZGQJVTIsIFUwCisJY21vdm5jCVUwLCBUCisKKwlDIHtRUCtVTiwgLi4ufSA8LS0ge1FQK1VOLCAuLi59ICsge1EyLCBRMX0gKyBVMSArIGMKKwlhZGMJVTEsIFExCisJbW92CS04KFVQLCBVTiwgOCksIFUwCisJYWRjCVEyLCA4KFFQLCBVTiwgOCkKKwlqYwlMKHFfaW5jcikKK0wocV9pbmNyX2RvbmUpOgorCWFkZAklcmF4LCBVMAorCW1vdglULCAlcmF4CisJYWRjCSVyZHgsICVyYXgKKwltb3YJUTEsIChRUCwgVU4sIDgpCisJc2JiCVUyLCBVMgorCWRlYwlVTgorCW1vdgklcmF4LCBVMQorCWpueglMKGxvb3ApCisKK0woZmluYWwpOgorCXBvcAlECisKKwltb3YJVTIsIFExCisJYW5kCUQsIFUyCisJc3ViCVUyLCAlcmF4CisJbmVnCVExCisKKwltb3YJJXJheCwgVTEKKwlzdWIJRCwgJXJheAorCWNtb3ZjCVUxLCAlcmF4CisJc2JiCSQtMSwgUTEKKworCWxlYQkxKCVyYXgpLCBUCisJbXVsCURJTlYKKwlhZGQJVTAsICVyYXgKKwlhZGMJVCwgJXJkeAorCW1vdgklcmR4LCBUCisJaW11bAlELCAlcmR4CisJc3ViCSVyZHgsIFUwCisJY21wCVUwLCAlcmF4CisJbGVhCShVMCwgRCksICVyYXgKKwljbW92bmMJVTAsICVyYXgKKwlzYmIJJDAsIFQKKwljbXAJRCwgJXJheAorCWpjCUwoZGl2X2RvbmUpCisJc3ViCUQsICVyYXgKKwlhZGQJJDEsIFQKK0woZGl2X2RvbmUpOgorCWFkZAlULCBRMAorCW1vdglRMCwgKFFQKQorCWFkYwlRMSwgOChRUCkKKwlqbmMJTChkb25lKQorTChmaW5hbF9xX2luY3IpOgorCWFkZHEJJDEsIDE2KFFQKQorCWxlYQk4KFFQKSwgUVAKKwlqYwlMKGZpbmFsX3FfaW5jcikKKworTChkb25lKToKKwlwb3AJJXJicAorCXBvcAklcmJ4CisJcG9wCSVyMTIKKwlwb3AJJXIxMworCXBvcAklcjE0CisJcG9wCSVyMTUKKwlGVU5DX0VYSVQoKQorCXJldAorCitMKHFfaW5jcik6CisJQyBVMSBpcyBub3QgbGl2ZSwgc28gdXNlIGl0IGZvciBpbmRleGluZworCWxlYQkxNihRUCwgVU4sIDgpLCBVMQorTChxX2luY3JfbG9vcCk6CisJYWRkcQkkMSwgKFUxKQorCWpuYwlMKHFfaW5jcl9kb25lKQorCWxlYQk4KFUxKSwgVTEKKwlqbXAJTChxX2luY3JfbG9vcCkKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2Rpdl9xcl8ybl9waTEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvZGl2X3FyXzJuX3BpMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU1OWEwYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2Rpdl9xcl8ybl9waTEuYXNtCkBAIC0wLDAgKzEsMTU4IEBACitkbmwgIHg4Ni02NCBtcG5fZGl2X3FyXzJuX3BpMQorZG5sICAtLSBEaXZpZGUgYW4gbXBuIG51bWJlciBieSBhIG5vcm1hbGl6ZWQgMi1saW1iIG51bWJlciwKK2RubCAgICAgdXNpbmcgYSBzaW5nbGUtbGltYiBpbnZlcnNlLgorCitkbmwgIENvcHlyaWdodCAyMDA3LCAyMDA4LCAyMDEwLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDCQljL2wKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBxcCcsCQlgJXJkaScpCitkZWZpbmUoYHJwJywJCWAlcnNpJykKK2RlZmluZShgdXBfcGFyYW0nLAlgJXJkeCcpCitkZWZpbmUoYHVuJywJCWAlcmN4JykKK2RlZmluZShgZDEnLAkJYCVyOCcpCitkZWZpbmUoYGQwJywJCWAlcjknKQorZGVmaW5lKGBkaV9wYXJhbScsCWA4KCVyc3ApJykKKworZGVmaW5lKGBkaScsCQlgJXIxMCcpCitkZWZpbmUoYHVwJywJCWAlcjExJykKK2RlZmluZShgdTInLAkJYCVyYngnKQorZGVmaW5lKGB1MScsCQlgJXIxMicpCitkZWZpbmUoYHQxJywJCWAlcjEzJykKK2RlZmluZShgdDAnLAkJYCVyMTQnKQorZGVmaW5lKGBtZDEnLAkJYCVyMTUnKQorCitDIFRPRE8KK0MgKiBTdG9yZSBxaCBpbiB0aGUgc2FtZSBzdGFjayBzbG90IGFzIGRpX3BhcmFtLCBpbnN0ZWFkIG9mIHB1c2hpbmcKK0MgICBpdC4gKHdlIGNvdWxkIHB1dCBpdCBpbiByZWdpc3RlciAlcmJwLCBidXQgdGhlbiB3ZSB3b3VsZCBuZWVkIHRvCitDICAgc2F2ZSBhbmQgcmVzdG9yZSB0aGF0IGluc3RlYWQsIHdoaWNoIGRvZXNuJ3Qgc2VlbSBsaWtlIGEgd2luKS4KKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMTYpCitQUk9MT0dVRShtcG5fZGl2X3FyXzJuX3BpMSkKKwlGVU5DX0VOVFJZKDQpCitJRkRPUyhgCW1vdgk1NiglcnNwKSwgJXI4CScpCitJRkRPUyhgCW1vdgk2NCglcnNwKSwgJXI5CScpCitJRkRPUyhgZGVmaW5lKGBkaV9wYXJhbScsIGA3MiglcnNwKScpJykKKwltb3YJZGlfcGFyYW0sIGRpCisJbW92CXVwX3BhcmFtLCB1cAorCXB1c2gJJXIxNQorCXB1c2gJJXIxNAorCXB1c2gJJXIxMworCXB1c2gJJXIxMgorCXB1c2gJJXJieAorCisJbW92CS0xNih1cCwgdW4sIDgpLCB1MQorCW1vdgktOCh1cCwgdW4sIDgpLCB1MgorCisJbW92CXUxLCB0MAorCW1vdgl1MiwgdDEKKwlzdWIJZDAsIHQwCisJc2JiCWQxLCB0MQorCWNtb3ZuYyAgdDAsIHUxCisJY21vdm5jCXQxLCB1MgorCUMgcHVzaCBxaCB3aGljaCBpcyAhY2FycnkKKwlzYmIJJXJheCwgJXJheAorCWluYwklcmF4CisJcHVzaAklcmF4CisJbGVhCS0yKHVuKSwgdW4KKwltb3YJZDEsIG1kMQorCW5lZwltZDEKKworCWptcAlMKG5leHQpCisKKwlBTElHTigxNikKK0wobG9vcCk6CisJQyB1ZGl2X3FyXzNieTIgKHEsdTIsdTEsdTIsdTEsbjAsIGQxLGQwLGRpKQorCUMgQmFzZWQgb24gdGhlIG9wdGltaXplZCBkaXZyZW1fMi5hc20gY29kZS4KKworCW1vdglkaSwgJXJheAorCW11bAl1MgorCW1vdgl1MSwgdDAKKwlhZGQJJXJheCwgdDAJQyBxMCBpbiB0MAorCWFkYwl1MiwgJXJkeAorCW1vdgklcmR4LCB0MQlDIHEgaW4gdDEKKwlpbXVsCW1kMSwgJXJkeAorCW1vdglkMCwgJXJheAorCWxlYQkoJXJkeCwgdTEpLCB1MgorCW11bAl0MQorCW1vdgkodXAsIHVuLCA4KSwgdTEKKwlzdWIJZDAsIHUxCisJc2JiCWQxLCB1MgorCXN1YgklcmF4LCB1MQorCXNiYgklcmR4LCB1MgorCXhvcglSMzIoJXJheCksIFIzMiglcmF4KQorCXhvcglSMzIoJXJkeCksIFIzMiglcmR4KQorCWNtcAl0MCwgdTIKKwljbW92bmMJZDAsICVyYXgKKwljbW92bmMJZDEsICVyZHgKKwlhZGMJJDAsIHQxCisJbm9wCisJYWRkCSVyYXgsIHUxCisJYWRjCSVyZHgsIHUyCisJY21wCWQxLCB1MgorCWphZQlMKGZpeCkKK0woYmNrKToKKwltb3YJdDEsIChxcCwgdW4sIDgpCitMKG5leHQpOgorCXN1YgkkMSwgdW4KKwlqbmMJTChsb29wKQorTChlbmQpOgorCW1vdgl1MiwgOChycCkKKwltb3YJdTEsIChycCkKKworCUMgcWggb24gc3RhY2sKKwlwb3AJJXJheAorCisJcG9wCSVyYngKKwlwb3AJJXIxMgorCXBvcAklcjEzCisJcG9wCSVyMTQKKwlwb3AJJXIxNQorCUZVTkNfRVhJVCgpCisJcmV0CisKK0woZml4KToJQyBVbmxpa2VseSB1cGRhdGUuIHUyID49IGQxCisJc2V0YQklZGwKKwljbXAJZDAsIHUxCisJc2V0YWUJJWFsCisJb3JiCSVkbCwgJWFsCQlDICJvcmIiIGZvcm0gdG8gcGxhY2F0ZSBTdW4gdG9vbHMKKwlqZQlMKGJjaykKKwlpbmMJdDEKKwlzdWIJZDAsIHUxCisJc2JiCWQxLCB1MgorCWptcAlMKGJjaykKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2Rpdl9xcl8ydV9waTEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvZGl2X3FyXzJ1X3BpMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVhZjk2ZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2Rpdl9xcl8ydV9waTEuYXNtCkBAIC0wLDAgKzEsMjAwIEBACitkbmwgIHg4Ni02NCBtcG5fZGl2X3FyXzJ1X3BpMQorZG5sICAtLSBEaXZpZGUgYW4gbXBuIG51bWJlciBieSBhbiB1bm5vcm1hbGl6ZWQgMi1saW1iIG51bWJlciwKK2RubCAgICAgdXNpbmcgYSBzaW5nbGUtbGltYiBpbnZlcnNlIGFuZCBzaGlmdGluZyB0aGUgZGl2aWRlbmQgb24gdGhlIGZseS4KKworZG5sICBDb3B5cmlnaHQgMjAwNywgMjAwOCwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MJCWMvbAorQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHFwJywJCWAlcmRpJykKK2RlZmluZShgcnAnLAkJYCVyc2knKQorZGVmaW5lKGB1cF9wYXJhbScsCWAlcmR4JykKK2RlZmluZShgdW5fcGFyYW0nLAlgJXJjeCcpIGRubCAlcmN4IG5lZWRlZCBmb3Igc2hpZnQgY291bnQKK2RlZmluZShgZDEnLAkJYCVyOCcpCitkZWZpbmUoYGQwJywJCWAlcjknKQorZGVmaW5lKGBzaGlmdF9wYXJhbScsCWBGUkFNRSs4KCVyc3ApJykKK2RlZmluZShgZGlfcGFyYW0nLAlgRlJBTUUrMTYoJXJzcCknKQorCitkZWZpbmUoYGRpJywJCWAlcjEwJykKK2RlZmluZShgdXAnLAkJYCVyMTEnKQorZGVmaW5lKGB1bicsCQlgJXJicCcpCitkZWZpbmUoYHUyJywJCWAlcmJ4JykKK2RlZmluZShgdTEnLAkJYCVyMTInKQorZGVmaW5lKGB1MCcsCQlgJXJzaScpIGRubCBTYW1lIGFzIHJwLCB3aGljaCBpcyBzYXZlZCBhbmQgcmVzdG9yZWQuCitkZWZpbmUoYHQxJywJCWAlcjEzJykKK2RlZmluZShgdDAnLAkJYCVyMTQnKQorZGVmaW5lKGBtZDEnLAkJYCVyMTUnKQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigxNikKK2RlZmxpdChgRlJBTUUnLCAwKQorUFJPTE9HVUUobXBuX2Rpdl9xcl8ydV9waTEpCisJbW92CWRpX3BhcmFtLCBkaQorCW1vdgl1cF9wYXJhbSwgdXAKKwlwdXNoCSVyMTUKKwlwdXNoCSVyMTQKKwlwdXNoCSVyMTMKKwlwdXNoCSVyMTIKKwlwdXNoCSVyYngKKwlwdXNoCSVyYnAKKwlwdXNoCXJwCitkZWZsaXQoYEZSQU1FJywgNTYpCisJbGVhCS0yKHVuX3BhcmFtKSwgdW4KKwltb3YJZDEsIG1kMQorCW5lZwltZDEKKworCUMgaW50IHBhcmFtZXRlciwgMzIgYml0cyBvbmx5CisJbW92bAlzaGlmdF9wYXJhbSwgUjMyKCVyY3gpCisKKwlDIEZJWE1FOiBEaWZmZXJlbnQgY29kZSBmb3IgU0hMRF9TTE9XCisKKwl4b3IJUjMyKHUyKSwgUjMyKHUyKQorCW1vdgk4KHVwLCB1biwgOCksIHUxCisJc2hsZAklY2wsIHUxLCB1MgorCUMgUmVtYWlucyB0byByZWFkICh1cCwgdW4sIDgpIGFuZCBzaGlmdCB1MSwgdTAKKwlDIHVkaXZfcXJfM2J5MiAocWgsdTIsdTEsdTIsdTEsbjAsIGQxLGQwLGRpKQorCW1vdglkaSwgJXJheAorCW11bAl1MgorCW1vdgkodXAsIHVuLCA4KSwgdTAKKwlzaGxkCSVjbCwgdTAsIHUxCisJbW92CXUxLCB0MAorCWFkZAklcmF4LCB0MAlDIHEwIGluIHQwCisJYWRjCXUyLCAlcmR4CisJbW92CSVyZHgsIHQxCUMgcSBpbiB0MQorCWltdWwJbWQxLCAlcmR4CisJbW92CWQwLCAlcmF4CisJbGVhCSglcmR4LCB1MSksIHUyCisJbXVsCXQxCisJbW92CXUwLCB1MQorCXNobAklY2wsIHUxCisJc3ViCWQwLCB1MQorCXNiYglkMSwgdTIKKwlzdWIJJXJheCwgdTEKKwlzYmIJJXJkeCwgdTIKKwl4b3IJUjMyKCVyYXgpLCBSMzIoJXJheCkKKwl4b3IJUjMyKCVyZHgpLCBSMzIoJXJkeCkKKwljbXAJdDAsIHUyCisJY21vdm5jCWQwLCAlcmF4CisJY21vdm5jCWQxLCAlcmR4CisJYWRjCSQwLCB0MQorCW5vcAorCWFkZAklcmF4LCB1MQorCWFkYwklcmR4LCB1MgorCWNtcAlkMSwgdTIKKwlqYWUJTChmaXhfcWgpCitMKGJja19xaCk6CisJcHVzaAl0MQlDIHB1c2ggcWggb24gc3RhY2sKKworCWptcAlMKG5leHQpCisKKwlBTElHTigxNikKK0wobG9vcCk6CisJQyB1ZGl2X3FyXzNieTIgKHEsdTIsdTEsdTIsdTEsbjAsIGQxLGQwLGRpKQorCUMgQmFzZWQgb24gdGhlIG9wdGltaXplZCBkaXZyZW1fMi5hc20gY29kZS4KKworCW1vdglkaSwgJXJheAorCW11bAl1MgorCW1vdgkodXAsIHVuLCA4KSwgdTAKKwl4b3IJUjMyKHQxKSwgUjMyKHQxKQorCXNobGQJJWNsLCB1MCwgdDEKKwlvcgl0MSwgdTEKKwltb3YJdTEsIHQwCisJYWRkCSVyYXgsIHQwCUMgcTAgaW4gdDAKKwlhZGMJdTIsICVyZHgKKwltb3YJJXJkeCwgdDEJQyBxIGluIHQxCisJaW11bAltZDEsICVyZHgKKwltb3YJZDAsICVyYXgKKwlsZWEJKCVyZHgsIHUxKSwgdTIKKwltdWwJdDEKKwltb3YJdTAsIHUxCisJc2hsCSVjbCwgdTEKKwlzdWIJZDAsIHUxCisJc2JiCWQxLCB1MgorCXN1YgklcmF4LCB1MQorCXNiYgklcmR4LCB1MgorCXhvcglSMzIoJXJheCksIFIzMiglcmF4KQorCXhvcglSMzIoJXJkeCksIFIzMiglcmR4KQorCWNtcAl0MCwgdTIKKwljbW92bmMJZDAsICVyYXgKKwljbW92bmMJZDEsICVyZHgKKwlhZGMJJDAsIHQxCisJbm9wCisJYWRkCSVyYXgsIHUxCisJYWRjCSVyZHgsIHUyCisJY21wCWQxLCB1MgorCWphZQlMKGZpeCkKK0woYmNrKToKKwltb3YJdDEsIChxcCwgdW4sIDgpCitMKG5leHQpOgorCXN1YgkkMSwgdW4KKwlqbmMJTChsb29wKQorTChlbmQpOgorCUMgcWggb24gc3RhY2sKKwlwb3AJJXJheAorCXBvcAlycAorCXNocmQJJWNsLCB1MiwgdTEKKwlzaHIJJWNsLCB1MgorCW1vdgl1MiwgOChycCkKKwltb3YJdTEsIChycCkKKworCXBvcAklcmJwCisJcG9wCSVyYngKKwlwb3AJJXIxMgorCXBvcAklcjEzCisJcG9wCSVyMTQKKwlwb3AJJXIxNQorCXJldAorCitMKGZpeCk6CUMgVW5saWtlbHkgdXBkYXRlLiB1MiA+PSBkMQorCXNldGEJJWRsCisJY21wCWQwLCB1MQorCXNldGFlCSVhbAorCW9yYgklZGwsICVhbAkJQyAib3JiIiBmb3JtIHRvIHBsYWNhdGUgU3VuIHRvb2xzCisJamUJTChiY2spCisJaW5jCXQxCisJc3ViCWQwLCB1MQorCXNiYglkMSwgdTIKKwlqbXAJTChiY2spCisKK0MgRHVwbGljYXRlZCwganVzdCBqdW1waW5nIGJhY2sgdG8gYSBkaWZmZXJlbnQgYWRkcmVzcy4KK0woZml4X3FoKToJQyBVbmxpa2VseSB1cGRhdGUuIHUyID49IGQxCisJc2V0YQklZGwKKwljbXAJZDAsIHUxCisJc2V0YWUJJWFsCisJb3JiCSVkbCwgJWFsCQlDICJvcmIiIGZvcm0gdG8gcGxhY2F0ZSBTdW4gdG9vbHMKKwlqZQlMKGJja19xaCkKKwlpbmMJdDEKKwlzdWIJZDAsIHUxCisJc2JiCWQxLCB1MgorCWptcAlMKGJja19xaCkKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2RpdmVfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9kaXZlXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4OGJkYWIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9kaXZlXzEuYXNtCkBAIC0wLDAgKzEsMTU4IEBACitkbmwgIEFNRDY0IG1wbl9kaXZleGFjdF8xIC0tIG1wbiBieSBsaW1iIGV4YWN0IGRpdmlzaW9uLgorCitkbmwgIENvcHlyaWdodCAyMDAxLCAyMDAyLCAyMDA0LTIwMDYsIDIwMTEsIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDCSAgICAgY3ljbGVzL2xpbWIKK0MgQU1EIEs4LEs5CTEwCitDIEFNRCBLMTAJMTAKK0MgSW50ZWwgUDQJMzMKK0MgSW50ZWwgY29yZTIJMTMuMjUKK0MgSW50ZWwgY29yZWkJMTQKK0MgSW50ZWwgYXRvbQk0MgorQyBWSUEgbmFubwk0MworCitDIEEgcXVpY2sgYWRvcHRpb24gb2YgdGhlIDMyLWJpdCBLNyBjb2RlLgorCisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyBycAkJcmRpCitDIHVwCQlyc2kKK0MgbgkJcmR4CitDIGRpdmlzb3IJcmN4CisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX2RpdmV4YWN0XzEpCisJRlVOQ19FTlRSWSg0KQorCXB1c2gJJXJieAorCisJbW92CSVyY3gsICVyYXgKKwl4b3IJUjMyKCVyY3gpLCBSMzIoJXJjeCkJQyBzaGlmdCBjb3VudAorCW1vdgklcmR4LCAlcjgKKworCWJ0CSQwLCBSMzIoJXJheCkKKwlqbmMJTChldm4pCQkJQyBza2lwIGJzZnEgdW5sZXNzIGRpdmlzb3IgaXMgZXZlbgorCitMKG9kZCk6CW1vdgklcmF4LCAlcmJ4CisJc2hyCVIzMiglcmF4KQorCWFuZAkkMTI3LCBSMzIoJXJheCkJCUMgZC8yLCA3IGJpdHMKKworCUxFQSgJYmludmVydF9saW1iX3RhYmxlLCAlcmR4KQorCisJbW92emJsCSglcmR4LCVyYXgpLCBSMzIoJXJheCkJQyBpbnYgOCBiaXRzCisKKwltb3YJJXJieCwgJXIxMQkJQyBkIHdpdGhvdXQgdHdvcworCisJbGVhCSglcmF4LCVyYXgpLCBSMzIoJXJkeCkJQyAyKmludgorCWltdWwJUjMyKCVyYXgpLCBSMzIoJXJheCkJQyBpbnYqaW52CisJaW11bAlSMzIoJXJieCksIFIzMiglcmF4KQlDIGludippbnYqZAorCXN1YglSMzIoJXJheCksIFIzMiglcmR4KQlDIGludiA9IDIqaW52IC0gaW52KmludipkLCAxNiBiaXRzCisKKwlsZWEJKCVyZHgsJXJkeCksIFIzMiglcmF4KQlDIDIqaW52CisJaW11bAlSMzIoJXJkeCksIFIzMiglcmR4KQlDIGludippbnYKKwlpbXVsCVIzMiglcmJ4KSwgUjMyKCVyZHgpCUMgaW52KmludipkCisJc3ViCVIzMiglcmR4KSwgUjMyKCVyYXgpCUMgaW52ID0gMippbnYgLSBpbnYqaW52KmQsIDMyIGJpdHMKKworCWxlYQkoJXJheCwlcmF4KSwgJXIxMAlDIDIqaW52CisJaW11bAklcmF4LCAlcmF4CQlDIGludippbnYKKwlpbXVsCSVyYngsICVyYXgJCUMgaW52KmludipkCisJc3ViCSVyYXgsICVyMTAJCUMgaW52ID0gMippbnYgLSBpbnYqaW52KmQsIDY0IGJpdHMKKworCWxlYQkoJXJzaSwlcjgsOCksICVyc2kJQyB1cCBlbmQKKwlsZWEJLTgoJXJkaSwlcjgsOCksICVyZGkJQyBycCBlbmQKKwluZWcJJXI4CQkJQyAtbgorCisJbW92CSglcnNpLCVyOCw4KSwgJXJheAlDIHVwWzBdCisKKwlpbmMJJXI4CisJanoJTChvbmUpCisKKwltb3YJKCVyc2ksJXI4LDgpLCAlcmR4CUMgdXBbMV0KKworCXNocmQJUjgoJXJjeCksICVyZHgsICVyYXgKKworCXhvcglSMzIoJXJieCksIFIzMiglcmJ4KQorCWptcAlMKGVudCkKKworTChldm4pOglic2YJJXJheCwgJXJjeAorCXNocglSOCglcmN4KSwgJXJheAorCWptcAlMKG9kZCkKKworCUFMSUdOKDgpCitMKHRvcCk6CisJQyByYXgJcQorCUMgcmJ4CWNhcnJ5IGJpdCwgMCBvciAxCisJQyByY3gJc2hpZnQKKwlDIHJkeAorCUMgcnNpCXVwIGVuZAorCUMgcmRpCXJwIGVuZAorCUMgcjgJY291bnRlciwgbGltYnMsIG5lZ2F0aXZlCisJQyByMTAJZF4oLTEpIG1vZCAyXjY0CisJQyByMTEJZCwgc2hpZnRlZCBkb3duCisKKwltdWwJJXIxMQkJCUMgY2FycnkgbGltYiBpbiByZHgJMCAxMAorCW1vdgktOCglcnNpLCVyOCw4KSwgJXJheAlDCisJbW92CSglcnNpLCVyOCw4KSwgJXI5CUMKKwlzaHJkCVI4KCVyY3gpLCAlcjksICVyYXgJQworCW5vcAkJCQlDCisJc3ViCSVyYngsICVyYXgJCUMgYXBwbHkgY2FycnkgYml0CisJc2V0YwklYmwJCQlDCisJc3ViCSVyZHgsICVyYXgJCUMgYXBwbHkgY2FycnkgbGltYgk1CisJYWRjCSQwLCAlcmJ4CQlDCQkJNgorTChlbnQpOglpbXVsCSVyMTAsICVyYXgJCUMJCQk2CisJbW92CSVyYXgsICglcmRpLCVyOCw4KQlDCisJaW5jCSVyOAkJCUMKKwlqbnoJTCh0b3ApCisKKwltdWwJJXIxMQkJCUMgY2FycnkgbGltYiBpbiByZHgKKwltb3YJLTgoJXJzaSksICVyYXgJCUMgdXAgaGlnaCBsaW1iCisJc2hyCVI4KCVyY3gpLCAlcmF4CisJc3ViCSVyYngsICVyYXgJCUMgYXBwbHkgY2FycnkgYml0CisJc3ViCSVyZHgsICVyYXgJCUMgYXBwbHkgY2FycnkgbGltYgorCWltdWwJJXIxMCwgJXJheAorCW1vdgklcmF4LCAoJXJkaSkKKwlwb3AJJXJieAorCUZVTkNfRVhJVCgpCisJcmV0CisKK0wob25lKToJc2hyCVI4KCVyY3gpLCAlcmF4CisJaW11bAklcjEwLCAlcmF4CisJbW92CSVyYXgsICglcmRpKQorCXBvcAklcmJ4CisJRlVOQ19FWElUKCkKKwlyZXQKKworRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvZGl2cmVtXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvZGl2cmVtXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZDYxYWQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9kaXZyZW1fMS5hc20KQEAgLTAsMCArMSwzMTQgQEAKK2RubCAgeDg2LTY0IG1wbl9kaXZyZW1fMSAtLSBtcG4gYnkgbGltYiBkaXZpc2lvbi4KKworZG5sICBDb3B5cmlnaHQgMjAwNCwgMjAwNSwgMjAwNy0yMDEyLCAyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQwkJbm9ybQl1bm9ybQlmcmFjCitDIEFNRCBLOCxLOQkxMwkxMwkxMgorQyBBTUQgSzEwCTEzCTEzCTEyCitDIEludGVsIFA0CTQzCTQ0CTQzCitDIEludGVsIGNvcmUyCTI0LjUJMjQuNQkxOS41CitDIEludGVsIGNvcmVpCTIwLjUJMTkuNQkxOAorQyBJbnRlbCBhdG9tCTQzCTQ2CTM2CitDIFZJQSBuYW5vCTI1LjUJMjUuNQkyNAorCitDIG1wX2xpbWJfdAorQyBtcG5fZGl2cmVtXzEgKG1wX3B0ciBxcCwgbXBfc2l6ZV90IGZuLAorQyAgICAgICAgICAgICAgIG1wX3NyY3B0ciBucCwgbXBfc2l6ZV90IG5uLCBtcF9saW1iX3QgZCkKKworQyBtcF9saW1iX3QKK0MgbXBuX3ByZWludl9kaXZyZW1fMSAobXBfcHRyIHFwLCBtcF9zaXplX3QgZm4sCitDICAgICAgICAgICAgICAgICAgICAgIG1wX3NyY3B0ciBucCwgbXBfc2l6ZV90IG5uLCBtcF9saW1iX3QgZCwKK0MgICAgICAgICAgICAgICAgICAgICAgbXBfbGltYl90IGRpbnYsIGludCBjbnQpCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBxcCcsCQlgJXJkaScpCitkZWZpbmUoYGZuX3BhcmFtJywJYCVyc2knKQorZGVmaW5lKGB1cF9wYXJhbScsCWAlcmR4JykKK2RlZmluZShgdW5fcGFyYW0nLAlgJXJjeCcpCitkZWZpbmUoYGQnLAkJYCVyOCcpCitkZWZpbmUoYGRpbnYnLAkJYCVyOScpCQlDIG9ubHkgZm9yIG1wbl9wcmVpbnZfZGl2cmVtXzEKK0MgICAgICAgc2hpZnQgcGFzc2VkIG9uIHN0YWNrCQlDIG9ubHkgZm9yIG1wbl9wcmVpbnZfZGl2cmVtXzEKKworZGVmaW5lKGBjbnQnLAkJYCVyY3gnKQorZGVmaW5lKGB1cCcsCQlgJXJzaScpCitkZWZpbmUoYGZuJywJCWAlcjEyJykKK2RlZmluZShgdW4nLAkJYCVyYngnKQorCisKK0MgcmF4IHJieCByY3ggcmR4IHJzaSByZGkgcmJwIHI4ICByOSAgcjEwIHIxMSByMTIgcjEzIHIxNCByMTUKK0MgICAgICAgICBjbnQgICAgICAgICBxcCAgICAgIGQgIGRpbnYKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworSUZTVEQoYGRlZmluZShgQ05UT0ZGJywJCWA0MCgkMSknKScpCitJRkRPUyhgZGVmaW5lKGBDTlRPRkYnLAkJYDEwNCgkMSknKScpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX3ByZWludl9kaXZyZW1fMSkKKwlGVU5DX0VOVFJZKDQpCitJRkRPUyhgCW1vdgk1NiglcnNwKSwgJXI4CScpCitJRkRPUyhgCW1vdgk2NCglcnNwKSwgJXI5CScpCisJeG9yCVIzMiglcmF4KSwgUjMyKCVyYXgpCisJcHVzaAklcjEzCisJcHVzaAklcjEyCisJcHVzaAklcmJwCisJcHVzaAklcmJ4CisKKwltb3YJZm5fcGFyYW0sIGZuCisJbW92CXVuX3BhcmFtLCB1bgorCWFkZAlmbl9wYXJhbSwgdW5fcGFyYW0KKwltb3YJdXBfcGFyYW0sIHVwCisKKwlsZWEJLTgocXAsdW5fcGFyYW0sOCksIHFwCisKKwl0ZXN0CWQsIGQKKwlqcwlMKG5lbnQpCisKKwltb3YJQ05UT0ZGKCVyc3ApLCBSOChjbnQpCisJc2hsCVI4KGNudCksIGQKKwlqbXAJTCh1ZW50KQorRVBJTE9HVUUoKQorCisJQUxJR04oMTYpCitQUk9MT0dVRShtcG5fZGl2cmVtXzEpCisJRlVOQ19FTlRSWSg0KQorSUZET1MoYAltb3YJNTYoJXJzcCksICVyOAknKQorCXhvcglSMzIoJXJheCksIFIzMiglcmF4KQorCXB1c2gJJXIxMworCXB1c2gJJXIxMgorCXB1c2gJJXJicAorCXB1c2gJJXJieAorCisJbW92CWZuX3BhcmFtLCBmbgorCW1vdgl1bl9wYXJhbSwgdW4KKwlhZGQJZm5fcGFyYW0sIHVuX3BhcmFtCisJbW92CXVwX3BhcmFtLCB1cAorCWplCUwocmV0KQorCisJbGVhCS04KHFwLHVuX3BhcmFtLDgpLCBxcAorCXhvcglSMzIoJXJicCksIFIzMiglcmJwKQorCisJdGVzdAlkLCBkCisJam5zCUwodW5ub3JtYWxpemVkKQorCitMKG5vcm1hbGl6ZWQpOgorCXRlc3QJdW4sIHVuCisJamUJTCg4KQkJCUMgdW4gPT0gMAorCW1vdgktOCh1cCx1biw4KSwgJXJicAorCWRlYwl1bgorCW1vdgklcmJwLCAlcmF4CisJc3ViCWQsICVyYnAKKwljbW92YwklcmF4LCAlcmJwCisJc2JiCVIzMiglcmF4KSwgUjMyKCVyYXgpCisJaW5jCVIzMiglcmF4KQorCW1vdgklcmF4LCAocXApCisJbGVhCS04KHFwKSwgcXAKK0woOCk6CitJRlNURChgCXB1c2gJJXJkaQkJJykKK0lGU1REKGAJcHVzaAklcnNpCQknKQorCXB1c2gJJXI4CitJRlNURChgCW1vdglkLCAlcmRpCQknKQorSUZET1MoYAlzdWIJJDMyLCAlcnNwCScpCitJRkRPUyhgCW1vdglkLCAlcmN4CQknKQorCUFTU0VSVChueiwgYHRlc3QgJDE1LCAlcnNwJykKKwlDQUxMKAltcG5faW52ZXJ0X2xpbWIpCitJRkRPUyhgCWFkZAkkMzIsICVyc3AJJykKKwlwb3AJJXI4CitJRlNURChgCXBvcAklcnNpCQknKQorSUZTVEQoYAlwb3AJJXJkaQkJJykKKworCW1vdgklcmF4LCBkaW52CisJbW92CSVyYnAsICVyYXgKKwlqbXAJTChuZW50KQorCisJQUxJR04oMTYpCitMKG50b3ApOm1vdgkodXAsdW4sOCksICVyMTAJCUMJICAgIEs4LUsxMCAgUDYtQ05SIFA2LU5ITSAgUDQKKwltdWwJZGludgkJCUMJICAgICAgMCwxMyAgIDAsMjAgICAwLDE4ICAgMCw0NQorCWFkZAklcjEwLCAlcmF4CQlDCSAgICAgIDQgICAgICA4ICAgICAgMyAgICAgMTIKKwlhZGMJJXJicCwgJXJkeAkJQwkgICAgICA1ICAgICAgOSAgICAgMTAgICAgIDEzCisJbW92CSVyYXgsICVyYnAJCUMJICAgICAgNSAgICAgIDkgICAgICA0ICAgICAxMworCW1vdgklcmR4LCAlcjEzCQlDCSAgICAgIDYgICAgIDExICAgICAxMiAgICAgMjMKKwlpbXVsCWQsICVyZHgJCQlDCSAgICAgIDYgICAgIDExICAgICAxMSAgICAgMjMKKwlzdWIJJXJkeCwgJXIxMAkJQwkgICAgIDEwICAgICAxNiAgICAgMTQgICAgIDMzCisJbW92CWQsICVyYXgJCQlDCisJYWRkCSVyMTAsICVyYXgJCUMJICAgICAxMSAgICAgMTcgICAgIDE1ICAgICAzNAorCWNtcAklcmJwLCAlcjEwCQlDCSAgICAgMTEgICAgIDE3ICAgICAxNSAgICAgMzQKKwljbW92YwklcjEwLCAlcmF4CQlDCSAgICAgMTIgICAgIDE4ICAgICAxNiAgICAgMzUKKwlhZGMJJC0xLCAlcjEzCQlDCisJY21wCWQsICVyYXgJCQlDCisJamFlCUwobmZ4KQkJCUMKK0wobm9rKToJbW92CSVyMTMsIChxcCkJCUMKKwlzdWIJJDgsIHFwCQkJQworTChuZW50KTpsZWEJMSglcmF4KSwgJXJicAkJQworCWRlYwl1bgkJCUMKKwlqbnMJTChudG9wKQkJCUMKKworCXhvcglSMzIoJXJjeCksIFIzMiglcmN4KQorCWptcAlMKGZyYWMpCisKK0wobmZ4KToJc3ViCWQsICVyYXgKKwlpbmMJJXIxMworCWptcAlMKG5vaykKKworTCh1bm5vcm1hbGl6ZWQpOgorCXRlc3QJdW4sIHVuCisJamUJTCg0NCkKKwltb3YJLTgodXAsdW4sOCksICVyYXgKKwljbXAJZCwgJXJheAorCWphZQlMKDQ0KQorCW1vdgklcmJwLCAocXApCisJbW92CSVyYXgsICVyYnAKKwlsZWEJLTgocXApLCBxcAorCWplCUwocmV0KQorCWRlYwl1bgorTCg0NCk6CisJYnNyCWQsICVyY3gKKwlub3QJUjMyKCVyY3gpCisJc2hsCVI4KCVyY3gpLCBkCisJc2hsCVI4KCVyY3gpLCAlcmJwCisKKwlwdXNoCSVyY3gKK0lGU1REKGAJcHVzaAklcmRpCQknKQorSUZTVEQoYAlwdXNoCSVyc2kJCScpCisJcHVzaAklcjgKK0lGU1REKGAJc3ViCSQ4LCAlcnNwCScpCitJRlNURChgCW1vdglkLCAlcmRpCQknKQorSUZET1MoYAlzdWIJJDQwLCAlcnNwCScpCitJRkRPUyhgCW1vdglkLCAlcmN4CQknKQorCUFTU0VSVChueiwgYHRlc3QgJDE1LCAlcnNwJykKKwlDQUxMKAltcG5faW52ZXJ0X2xpbWIpCitJRlNURChgCWFkZAkkOCwgJXJzcAknKQorSUZET1MoYAlhZGQJJDQwLCAlcnNwCScpCisJcG9wCSVyOAorSUZTVEQoYAlwb3AJJXJzaQkJJykKK0lGU1REKGAJcG9wCSVyZGkJCScpCisJcG9wCSVyY3gKKworCW1vdgklcmF4LCBkaW52CisJbW92CSVyYnAsICVyYXgKKwl0ZXN0CXVuLCB1bgorCWplCUwoZnJhYykKKworTCh1ZW50KTpkZWMJdW4KKwltb3YJKHVwLHVuLDgpLCAlcmJwCisJbmVnCVIzMiglcmN4KQorCXNocglSOCglcmN4KSwgJXJicAorCW5lZwlSMzIoJXJjeCkKKwlvcgklcmJwLCAlcmF4CisJam1wCUwoZW50KQorCisJQUxJR04oMTYpCitMKHV0b3ApOm1vdgkodXAsdW4sOCksICVyMTAKKwlzaGwJUjgoJXJjeCksICVyYnAKKwluZWcJUjMyKCVyY3gpCisJc2hyCVI4KCVyY3gpLCAlcjEwCisJbmVnCVIzMiglcmN4KQorCW9yCSVyMTAsICVyYnAKKwltdWwJZGludgorCWFkZAklcmJwLCAlcmF4CisJYWRjCSVyMTEsICVyZHgKKwltb3YJJXJheCwgJXIxMQorCW1vdgklcmR4LCAlcjEzCisJaW11bAlkLCAlcmR4CisJc3ViCSVyZHgsICVyYnAKKwltb3YJZCwgJXJheAorCWFkZAklcmJwLCAlcmF4CisJY21wCSVyMTEsICVyYnAKKwljbW92YwklcmJwLCAlcmF4CisJYWRjCSQtMSwgJXIxMworCWNtcAlkLCAlcmF4CisJamFlCUwodWZ4KQorTCh1b2spOgltb3YJJXIxMywgKHFwKQorCXN1YgkkOCwgcXAKK0woZW50KToJbW92CSh1cCx1biw4KSwgJXJicAorCWRlYwl1bgorCWxlYQkxKCVyYXgpLCAlcjExCisJam5zCUwodXRvcCkKKworTCh1ZW5kKTpzaGwJUjgoJXJjeCksICVyYnAKKwltdWwJZGludgorCWFkZAklcmJwLCAlcmF4CisJYWRjCSVyMTEsICVyZHgKKwltb3YJJXJheCwgJXIxMQorCW1vdgklcmR4LCAlcjEzCisJaW11bAlkLCAlcmR4CisJc3ViCSVyZHgsICVyYnAKKwltb3YJZCwgJXJheAorCWFkZAklcmJwLCAlcmF4CisJY21wCSVyMTEsICVyYnAKKwljbW92YwklcmJwLCAlcmF4CisJYWRjCSQtMSwgJXIxMworCWNtcAlkLCAlcmF4CisJamFlCUwoZWZ4KQorTChlb2spOgltb3YJJXIxMywgKHFwKQorCXN1YgkkOCwgcXAKKwlqbXAJTChmcmFjKQorCitMKHVmeCk6CXN1YglkLCAlcmF4CisJaW5jCSVyMTMKKwlqbXAJTCh1b2spCitMKGVmeCk6CXN1YglkLCAlcmF4CisJaW5jCSVyMTMKKwlqbXAJTChlb2spCisKK0woZnJhYyk6bW92CWQsICVyYnAKKwluZWcJJXJicAorCWptcAlMKGZlbnQpCisKKwlBTElHTigxNikJCQlDCSAgICBLOC1LMTAgIFA2LUNOUiBQNi1OSE0gIFA0CitMKGZ0b3ApOm11bAlkaW52CQkJQwkgICAgICAwLDEyICAgMCwxNyAgIDAsMTcKKwlhZGQJJXIxMSwgJXJkeAkJQwkgICAgICA1ICAgICAgOCAgICAgMTAKKwltb3YJJXJheCwgJXIxMQkJQwkgICAgICA0ICAgICAgOCAgICAgIDMKKwltb3YJJXJkeCwgJXIxMwkJQwkgICAgICA2ICAgICAgOSAgICAgMTEKKwlpbXVsCSVyYnAsICVyZHgJCUMJICAgICAgNiAgICAgIDkgICAgIDExCisJbW92CWQsICVyYXgJCQlDCisJYWRkCSVyZHgsICVyYXgJCUMJICAgICAxMCAgICAgMTQgICAgIDE0CisJY21wCSVyMTEsICVyZHgJCUMJICAgICAxMCAgICAgMTQgICAgIDE0CisJY21vdmMJJXJkeCwgJXJheAkJQwkgICAgIDExICAgICAxNSAgICAgMTUKKwlhZGMJJC0xLCAlcjEzCQlDCisJbW92CSVyMTMsIChxcCkJCUMKKwlzdWIJJDgsIHFwCQkJQworTChmZW50KTpsZWEJMSglcmF4KSwgJXIxMQkJQworCWRlYwlmbgkJCUMKKwlqbnMJTChmdG9wKQkJCUMKKworCXNocglSOCglcmN4KSwgJXJheAorTChyZXQpOglwb3AJJXJieAorCXBvcAklcmJwCisJcG9wCSVyMTIKKwlwb3AJJXIxMworCUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9kaXZyZW1fMi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9kaXZyZW1fMi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA4MTFjYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2RpdnJlbV8yLmFzbQpAQCAtMCwwICsxLDE5MiBAQAorZG5sICB4ODYtNjQgbXBuX2RpdnJlbV8yIC0tIERpdmlkZSBhbiBtcG4gbnVtYmVyIGJ5IGEgbm9ybWFsaXplZCAyLWxpbWIgbnVtYmVyLgorCitkbmwgIENvcHlyaWdodCAyMDA3LCAyMDA4LCAyMDEwLCAyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQwkgICAgIGN5Y2xlcy9saW1iCWJlc3QKK0MgQU1EIEs4LEs5CTE4CitDIEFNRCBLMTAJMTgKK0MgQU1EIGJ1bGwKK0MgQU1EIHBpbGUKK0MgQU1EIGJvYmNhdAorQyBBTUQgamFndWFyCitDIEludGVsIFA0CTY4CitDIEludGVsIGNvcmUJMzQKK0MgSW50ZWwgTkhNCTMwLjI1CitDIEludGVsIFNCUgkyMS4zCitDIEludGVsIElCUgkyMS40CitDIEludGVsIEhXTAkyMC42CitDIEludGVsIEJXTAorQyBJbnRlbCBhdG9tCTczCitDIFZJQSBuYW5vCTMzCisKKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHFwJywJCWAlcmRpJykKK2RlZmluZShgZm4nLAkJYCVyc2knKQorZGVmaW5lKGB1cF9wYXJhbScsCWAlcmR4JykKK2RlZmluZShgdW5fcGFyYW0nLAlgJXJjeCcpCitkZWZpbmUoYGRwJywJCWAlcjgnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigxNikKK1BST0xPR1VFKG1wbl9kaXZyZW1fMikKKwlGVU5DX0VOVFJZKDQpCitJRkRPUyhgCW1vdgk1NiglcnNwKSwgJXI4CScpCisJcHVzaAklcjE1CisJcHVzaAklcjE0CisJcHVzaAklcjEzCisJcHVzaAklcjEyCisJbGVhCS0yNCglcmR4LCVyY3gsOCksICVyMTIJQyByMTIgPSAmdXBbdW4tMV0KKwltb3YJJXJzaSwgJXIxMworCXB1c2gJJXJicAorCW1vdgklcmRpLCAlcmJwCisJcHVzaAklcmJ4CisJbW92CTgoJXI4KSwgJXIxMQkJQyBkMQorCW1vdgkxNiglcjEyKSwgJXJieAorCW1vdgkoJXI4KSwgJXI4CQlDIGQwCisJbW92CTgoJXIxMiksICVyMTAKKworCXhvcglSMzIoJXIxNSksIFIzMiglcjE1KQorCWNtcAklcmJ4LCAlcjExCisJamEJTCgyKQorCXNldGIJJWRsCisJY21wCSVyMTAsICVyOAorCXNldGJlCSVhbAorCW9yYgklYWwsICVkbAkJQyAib3JiIiBmb3JtIHRvIHBsYWNhdGUgU3VuIHRvb2xzCisJamUJTCgyKQorCWluYwlSMzIoJXIxNSkKKwlzdWIJJXI4LCAlcjEwCisJc2JiCSVyMTEsICVyYngKK0woMik6CisJbGVhCS0zKCVyY3gsJXIxMyksICVyMTQJQyB1biArIGZuIC0gMworCXRlc3QJJXIxNCwgJXIxNAorCWpzCUwoZW5kKQorCisJcHVzaAklcjgKKwlwdXNoCSVyMTAKKwlwdXNoCSVyMTEKK0lGU1REKGAJbW92CSVyMTEsICVyZGkJJykKK0lGRE9TKGAJbW92CSVyMTEsICVyY3gJJykKK0lGRE9TKGAJc3ViCSQzMiwgJXJzcAknKQorCUFTU0VSVChueiwgYHRlc3QgJDE1LCAlcnNwJykKKwlDQUxMKAltcG5faW52ZXJ0X2xpbWIpCitJRkRPUyhgCWFkZAkkMzIsICVyc3AJJykKKwlwb3AJJXIxMQorCXBvcAklcjEwCisJcG9wCSVyOAorCisJbW92CSVyMTEsICVyZHgKKwltb3YJJXJheCwgJXJkaQorCWltdWwJJXJheCwgJXJkeAorCW1vdgklcmR4LCAlcjkKKwltdWwJJXI4CisJeG9yCVIzMiglcmN4KSwgUjMyKCVyY3gpCisJYWRkCSVyOCwgJXI5CisJYWRjCSQtMSwgJXJjeAorCWFkZAklcmR4LCAlcjkKKwlhZGMJJDAsICVyY3gKKwlqcwkyZgorMToJZGVjCSVyZGkKKwlzdWIJJXIxMSwgJXI5CisJc2JiCSQwLCAlcmN4CisJam5zCTFiCisyOgorCisJbGVhCSglcmJwLCVyMTQsOCksICVyYnAKKwltb3YJJXIxMSwgJXJzaQorCW5lZwklcnNpCQkJQyAtZDEKKworQyByYXggcmJ4IHJjeCByZHggcnNpIHJkaSAgcmJwIHI4IHI5IHIxMCByMTEgcjEyIHIxMyByMTQgcjE1CitDICAgICBuMiAgdW4gICAgICAtZDEgZGludiBxcCAgZDAgcTAgICAgIGQxICB1cCAgZm4gICAgICBtc2wKKworCUFMSUdOKDE2KQorTCh0b3ApOgltb3YJJXJkaSwgJXJheAkJQyBkaQkJbmNwCisJbXVsCSVyYngJCQlDCQkwLCAxNworCW1vdgklcjEwLCAlcmN4CQlDCisJYWRkCSVyYXgsICVyY3gJCUMJCTQKKwlhZGMJJXJieCwgJXJkeAkJQwkJNQorCW1vdgklcmR4LCAlcjkJCUMgcQkJNgorCWltdWwJJXJzaSwgJXJkeAkJQwkJNgorCW1vdgklcjgsICVyYXgJCUMJCW5jcAorCWxlYQkoJXJkeCwgJXIxMCksICVyYngJQyBuMSAtPSAuLi4JMTAKKwl4b3IJUjMyKCVyMTApLCBSMzIoJXIxMCkJQworCW11bAklcjkJCQlDCQk3CisJY21wCSVyMTQsICVyMTMJCUMKKwlqZwlMKDE5KQkJCUMKKwltb3YJKCVyMTIpLCAlcjEwCQlDCisJc3ViCSQ4LCAlcjEyCQlDCitMKDE5KToJc3ViCSVyOCwgJXIxMAkJQwkJbmNwCisJc2JiCSVyMTEsICVyYngJCUMJCTExCisJc3ViCSVyYXgsICVyMTAJCUMJCTExCisJc2JiCSVyZHgsICVyYngJCUMJCTEyCisJeG9yCVIzMiglcmF4KSwgUjMyKCVyYXgpCUMKKwl4b3IJUjMyKCVyZHgpLCBSMzIoJXJkeCkJQworCWNtcAklcmN4LCAlcmJ4CQlDCQkxMworCWNtb3ZuYwklcjgsICVyYXgJCUMJCTE0CisJY21vdm5jCSVyMTEsICVyZHgJCUMJCTE0CisJYWRjCSQwLCAlcjkJCQlDIGFkanVzdCBxCTE0CisJbm9wCisJYWRkCSVyYXgsICVyMTAJCUMJCTE1CisJYWRjCSVyZHgsICVyYngJCUMJCTE2CisJY21wCSVyMTEsICVyYngJCUMKKwlqYWUJTChmaXgpCQkJQworTChiY2spOgltb3YJJXI5LCAoJXJicCkJCUMKKwlzdWIJJDgsICVyYnAJCUMKKwlkZWMJJXIxNAorCWpucwlMKHRvcCkKKworTChlbmQpOgltb3YJJXIxMCwgOCglcjEyKQorCW1vdgklcmJ4LCAxNiglcjEyKQorCXBvcAklcmJ4CisJcG9wCSVyYnAKKwlwb3AJJXIxMgorCXBvcAklcjEzCisJcG9wCSVyMTQKKwltb3YJJXIxNSwgJXJheAorCXBvcAklcjE1CisJRlVOQ19FWElUKCkKKwlyZXQKKworTChmaXgpOglzZXRhCSVkbAorCWNtcAklcjgsICVyMTAKKwlzZXRhZQklYWwKKwlvcmIJJWRsLCAlYWwJCUMgIm9yYiIgZm9ybSB0byBwbGFjYXRlIFN1biB0b29scworCWplCUwoYmNrKQorCWluYwklcjkKKwlzdWIJJXI4LCAlcjEwCisJc2JiCSVyMTEsICVyYngKKwlqbXAJTChiY2spCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9kb3M2NC5tNCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2RvczY0Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkYTFiMzYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9kb3M2NC5tNApAQCAtMCwwICsxLDEwMSBAQAorZGl2ZXJ0KC0xKQorZG5sICBDb3B5cmlnaHQgMjAxMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2RlZmluZShgSE9TVF9ET1M2NCcpCisKKworZG5sICBPbiBET1M2NCB3ZSBhbHdheXMgZ2VuZXJhdGUgcG9zaXRpb24taW5kZXBlbmRlbnQtY29kZQorZG5sCisKK2RlZmluZShgUElDJykKKworCitkZWZpbmUoYExFQScsYAorCWxlYQkkMSglcmlwKSwgJDIKKycpCisKKworZG5sICBVc2FnZTogQ0FMTChmdW5jbmFtZSkKK2RubAorZG5sICBTaW1wbHkgb3ZlcnJpZGUgdGhlIGRlZmluaXRpb24gaW4geDg2XzY0LWRlZnMubTQuCisKK2RlZmluZShgQ0FMTCcsYGNhbGwJR1NZTV9QUkVGSVhgJyQxJykKK2RlZmluZShgVENBTEwnLGBqbXAJR1NZTV9QUkVGSVhgJyQxJykKKworCitkbmwgIFVzYWdlOiBKVU1QVEFCU0VDVAorCitkZWZpbmUoYEpVTVBUQUJTRUNUJywgYFJPREFUQScpCisKKworZG5sICBVc2FnZTogSk1QRU5UKHRhcmdsYWJlbCx0YWJsYWJlbCkKKworZGVmaW5lKGBKTVBFTlQnLCBgLmxvbmcJJDEtJDInKQorCisKK2RubCAgVXNhZ2U6IEZVTkNfRU5UUlkobnJlZ3Bhcm1hcykKK2RubCAgVXNhZ2U6IEZVTkNfRVhJVCgpCisKK2RubCAgRlVOQ19FTlRSWSBhbmQgRlVOQ19FWElUIHByb3ZpZGUgYW4gZWFzeSBwYXRoIGZvciBhZG9wdGlvbiBvZiBzdGFuZGFyZAorZG5sICBBQkkgYXNzZW1ibHkgdG8gdGhlIERPUzY0IEFCSS4KKworZGVmaW5lKGBGVU5DX0VOVFJZJywKKwlgcHVzaAklcmRpCisJcHVzaAklcnNpCisJbW92CSVyY3gsICVyZGkKK2lmZWxzZShldmFsKCQxPj0yKSwxLGBkbmwKKwltb3YJJXJkeCwgJXJzaQoraWZlbHNlKGV2YWwoJDE+PTMpLDEsYGRubAorCW1vdgklcjgsICVyZHgKK2lmZWxzZShldmFsKCQxPj00KSwxLGBkbmwKKwltb3YJJXI5LCAlcmN4CisnKScpJyknKQorCitkZWZpbmUoYEZVTkNfRVhJVCcsCisJYHBvcAklcnNpCisJcG9wCSVyZGknKQorCisKK2RubCAgVGFyZ2V0IEFCSSBtYWNyb3MuICBGb3IgRE9TNjQgd2Ugb3ZlcnJpZGUgdGhlIGRlZmF1bHRzLgorCitkZWZpbmUoYElGRE9TJywgICBgJDEnKQorZGVmaW5lKGBJRlNURCcsICAgYCcpCitkZWZpbmUoYElGRUxGJywgICBgJykKKworCitkbmwgIFVzYWdlOiBQUk9URUNUKHN5bWJvbCkKK2RubAorZG5sICBVc2VkIGZvciBwcml2YXRlIEdNUCBzeW1ib2xzIHRoYXQgc2hvdWxkIG5ldmVyIGJlIG92ZXJyaWRkZW4gYnkgdXNlcnMuCitkbmwgIFRoaXMgY2FuIHNhdmUgcmVsb2MgZW50cmllcyBhbmQgaW1wcm92ZSBzaGxpYiBzaGFyaW5nIGFzIHdlbGwgYXMKK2RubCAgYXBwbGljYXRpb24gc3RhcnR1cCB0aW1lcworCitkZWZpbmUoYFBST1RFQ1QnLCAgYCcpCisKKworZGl2ZXJ0YCdkbmwKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2Zhc3RhdngvY29weWQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvZmFzdGF2eC9jb3B5ZC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZkNDcyZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2Zhc3RhdngvY29weWQuYXNtCkBAIC0wLDAgKzEsMTcyIEBACitkbmwgIEFNRDY0IG1wbl9jb3B5ZCBvcHRpbWlzZWQgZm9yIENQVXMgd2l0aCBmYXN0IEFWWC4KKworZG5sICBDb3B5cmlnaHQgMjAwMywgMjAwNSwgMjAwNywgMjAxMS0yMDEzLCAyMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iICAgICBjeWNsZXMvbGltYiAgICAgY3ljbGVzL2xpbWIgICAgICBnb29kCitDICAgICAgICAgICAgICBhbGlnbmVkCSAgICAgIHVuYWxpZ25lZAkgICAgICBiZXN0IHNlZW4JICAgICBmb3IgY3B1PworQyBBTUQgSzgsSzkJbi9hCitDIEFNRCBLMTAJbi9hCitDIEFNRCBidWxsCW4vYQorQyBBTUQgcGlsZQkgNC44NwkJIDQuODcJCQkJTgorQyBBTUQgc3RlYW0JID8JCSA/CitDIEFNRCBib2JjYXQJbi9hCitDIEFNRCBqYWd1YXIJbi9hCitDIEludGVsIFA0CW4vYQorQyBJbnRlbCBjb3JlCW4vYQorQyBJbnRlbCBOSE0Jbi9hCitDIEludGVsIFNCUgkgMC41MAkJIDAuOTEJCQkJTgorQyBJbnRlbCBJQlIJIDAuNTAJCSAwLjY1CQkJCU4KK0MgSW50ZWwgSFdMCSAwLjI1CQkgMC4zMAkJCQlZCitDIEludGVsIEJXTAkgMC4yOAkJIDAuMzcJCQkJWQorQyBJbnRlbCBhdG9tCW4vYQorQyBWSUEgbmFubwluL2EKKworQyBXZSB0cnkgdG8gZG8gYXMgbWFueSAzMi1ieXRlIG9wZXJhdGlvbnMgYXMgcG9zc2libGUuICBUaGUgdG9wLW1vc3QgYW5kCitDIGJvdHRvbS1tb3N0IHdyaXRlcyBtaWdodCBuZWVkIDgtYnl0ZSBvcGVyYXRpb25zLiAgRm9yIHRoZSBidWxrIGNvcHlpbmcsIHdlCitDIHdyaXRlIHVzaW5nIGFsaWduZWQgMzItYnl0ZSBvcGVyYXRpb25zLCBidXQgd2UgcmVhZCB3aXRoIGJvdGggYWxpZ25lZCBhbmQKK0MgdW5hbGlnbmVkIDMyLWJ5dGUgb3BlcmF0aW9ucy4KKworZGVmaW5lKGBycCcsIGAlcmRpJykKK2RlZmluZShgdXAnLCBgJXJzaScpCitkZWZpbmUoYG4nLCAgYCVyZHgnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitkbmwgZGVmaW5lKGB2bW92ZHF1JywgdmxkZHF1KQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigzMikKK1BST0xPR1VFKG1wbl9jb3B5ZCkKKwlGVU5DX0VOVFJZKDMpCisKKwlsZWEJLTMyKHJwLG4sOCksIHJwCisJbGVhCS0zMih1cCxuLDgpLCB1cAorCisJY21wCSQ3LCBuCQkJQyBiYXNlY2FzZSBuZWVkZWQgZm9yIGNvcnJlY3RuZXNzCisJamJlCUwoYmMpCisKKwl0ZXN0CSQ4LCBSOChycCkJCUMgaXMgcnAgMTYtYnl0ZSBhbGlnbmVkPworCWp6CUwoYTIpCQkJQyBqdW1wIGlmIHJwIGFsaWduZWQKKwltb3YJMjQodXApLCAlcmF4CisJbGVhCS04KHVwKSwgdXAKKwltb3YJJXJheCwgMjQocnApCisJbGVhCS04KHJwKSwgcnAKKwlkZWMJbgorTChhMik6CXRlc3QJJDE2LCBSOChycCkJCUMgaXMgcnAgMzItYnl0ZSBhbGlnbmVkPworCWp6CUwoYTMpCQkJQyBqdW1wIGlmIHJwIGFsaWduZWQKKwl2bW92ZHF1CTE2KHVwKSwgJXhtbTAKKwlsZWEJLTE2KHVwKSwgdXAKKwl2bW92ZHFhCSV4bW0wLCAxNihycCkKKwlsZWEJLTE2KHJwKSwgcnAKKwlzdWIJJDIsIG4KK0woYTMpOglzdWIJJDE2LCBuCisJamMJTChzbWEpCisKKwlBTElHTigxNikKK0wodG9wKToJdm1vdmRxdQkodXApLCAleW1tMAorCXZtb3ZkcXUJLTMyKHVwKSwgJXltbTEKKwl2bW92ZHF1CS02NCh1cCksICV5bW0yCisJdm1vdmRxdQktOTYodXApLCAleW1tMworCWxlYQktMTI4KHVwKSwgdXAKKwl2bW92ZHFhCSV5bW0wLCAocnApCisJdm1vdmRxYQkleW1tMSwgLTMyKHJwKQorCXZtb3ZkcWEJJXltbTIsIC02NChycCkKKwl2bW92ZHFhCSV5bW0zLCAtOTYocnApCisJbGVhCS0xMjgocnApLCBycAorTChhbGkpOglzdWIJJDE2LCBuCisJam5jCUwodG9wKQorCitMKHNtYSk6CXRlc3QJJDgsIFI4KG4pCisJanoJMWYKKwl2bW92ZHF1CSh1cCksICV5bW0wCisJdm1vdmRxdQktMzIodXApLCAleW1tMQorCWxlYQktNjQodXApLCB1cAorCXZtb3ZkcWEJJXltbTAsIChycCkKKwl2bW92ZHFhCSV5bW0xLCAtMzIocnApCisJbGVhCS02NChycCksIHJwCisxOgorCXRlc3QJJDQsIFI4KG4pCisJanoJMWYKKwl2bW92ZHF1CSh1cCksICV5bW0wCisJbGVhCS0zMih1cCksIHVwCisJdm1vdmRxYQkleW1tMCwgKHJwKQorCWxlYQktMzIocnApLCBycAorMToKKwl0ZXN0CSQyLCBSOChuKQorCWp6CTFmCisJdm1vdmRxdQkxNih1cCksICV4bW0wCisJbGVhCS0xNih1cCksIHVwCisJdm1vdmRxYQkleG1tMCwgMTYocnApCisJbGVhCS0xNihycCksIHJwCisxOgorCXRlc3QJJDEsIFI4KG4pCisJanoJMWYKKwltb3YJMjQodXApLCAlcjgKKwltb3YJJXI4LCAyNChycCkKKzE6CisJRlVOQ19FWElUKCkKKwlyZXQKKworCUFMSUdOKDE2KQorTChiYyk6CXRlc3QJJDQsIFI4KG4pCisJanoJMWYKKwltb3YJMjQodXApLCAlcmF4CisJbW92CTE2KHVwKSwgJXJjeAorCW1vdgk4KHVwKSwgJXI4CisJbW92CSh1cCksICVyOQorCWxlYQktMzIodXApLCB1cAorCW1vdgklcmF4LCAyNChycCkKKwltb3YJJXJjeCwgMTYocnApCisJbW92CSVyOCwgOChycCkKKwltb3YJJXI5LCAocnApCisJbGVhCS0zMihycCksIHJwCisxOgorCXRlc3QJJDIsIFI4KG4pCisJanoJMWYKKwltb3YJMjQodXApLCAlcmF4CisJbW92CTE2KHVwKSwgJXJjeAorCWxlYQktMTYodXApLCB1cAorCW1vdgklcmF4LCAyNChycCkKKwltb3YJJXJjeCwgMTYocnApCisJbGVhCS0xNihycCksIHJwCisxOgorCXRlc3QJJDEsIFI4KG4pCisJanoJMWYKKwltb3YJMjQodXApLCAlcmF4CisJbW92CSVyYXgsIDI0KHJwKQorMToKKwlGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvZmFzdGF2eC9jb3B5aS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9mYXN0YXZ4L2NvcHlpLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjA3NzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvZmFzdGF2eC9jb3B5aS5hc20KQEAgLTAsMCArMSwxNjkgQEAKK2RubCAgQU1ENjQgbXBuX2NvcHlpIG9wdGltaXNlZCBmb3IgQ1BVcyB3aXRoIGZhc3QgQVZYLgorCitkbmwgIENvcHlyaWdodCAyMDAzLCAyMDA1LCAyMDA3LCAyMDExLTIwMTMsIDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqw7ZybiBHcmFubHVuZC4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIgICAgIGN5Y2xlcy9saW1iICAgICBjeWNsZXMvbGltYiAgICAgIGdvb2QKK0MgICAgICAgICAgICAgIGFsaWduZWQJICAgICAgdW5hbGlnbmVkCSAgICAgIGJlc3Qgc2VlbgkgICAgIGZvciBjcHU/CitDIEFNRCBLOCxLOQluL2EKK0MgQU1EIEsxMAluL2EKK0MgQU1EIGJ1bGwJbi9hCitDIEFNRCBwaWxlCSA0Ljg3CQkgNC44NwkJCQlOCitDIEFNRCBzdGVhbQkgPwkJID8KK0MgQU1EIGJvYmNhdAluL2EKK0MgQU1EIGphZ3VhcgluL2EKK0MgSW50ZWwgUDQJbi9hCitDIEludGVsIGNvcmUJbi9hCitDIEludGVsIE5ITQluL2EKK0MgSW50ZWwgU0JSCSAwLjUwCQkgMC45MQkJCQlOCitDIEludGVsIElCUgkgMC41MAkJIDAuNjUJCQkJTgorQyBJbnRlbCBIV0wJIDAuMjUJCSAwLjMwCQkJCVkKK0MgSW50ZWwgQldMCSAwLjI4CQkgMC4zNwkJCQlZCitDIEludGVsIGF0b20Jbi9hCitDIFZJQSBuYW5vCW4vYQorCitDIFdlIHRyeSB0byBkbyBhcyBtYW55IDMyLWJ5dGUgb3BlcmF0aW9ucyBhcyBwb3NzaWJsZS4gIFRoZSB0b3AtbW9zdCBhbmQKK0MgYm90dG9tLW1vc3Qgd3JpdGVzIG1pZ2h0IG5lZWQgOC1ieXRlIG9wZXJhdGlvbnMuICBGb3IgdGhlIGJ1bGsgY29weWluZywgd2UKK0Mgd3JpdGUgdXNpbmcgYWxpZ25lZCAzMi1ieXRlIG9wZXJhdGlvbnMsIGJ1dCB3ZSByZWFkIHdpdGggYm90aCBhbGlnbmVkIGFuZAorQyB1bmFsaWduZWQgMzItYnl0ZSBvcGVyYXRpb25zLgorCitkZWZpbmUoYHJwJywgYCVyZGknKQorZGVmaW5lKGB1cCcsIGAlcnNpJykKK2RlZmluZShgbicsICBgJXJkeCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK2RubCBkZWZpbmUoYHZtb3ZkcXUnLCB2bGRkcXUpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDMyKQorUFJPTE9HVUUobXBuX2NvcHlpKQorCUZVTkNfRU5UUlkoMykKKworCWNtcAkkNywgbgorCWpiZQlMKGJjKQorCisJdGVzdAkkOCwgUjgocnApCQlDIGlzIHJwIDE2LWJ5dGUgYWxpZ25lZD8KKwlqeglMKGEyKQkJCUMganVtcCBpZiBycCBhbGlnbmVkCisJbW92CSh1cCksICVyYXgKKwlsZWEJOCh1cCksIHVwCisJbW92CSVyYXgsIChycCkKKwlsZWEJOChycCksIHJwCisJZGVjCW4KK0woYTIpOgl0ZXN0CSQxNiwgUjgocnApCQlDIGlzIHJwIDMyLWJ5dGUgYWxpZ25lZD8KKwlqeglMKGEzKQkJCUMganVtcCBpZiBycCBhbGlnbmVkCisJdm1vdmRxdQkodXApLCAleG1tMAorCWxlYQkxNih1cCksIHVwCisJdm1vdmRxYQkleG1tMCwgKHJwKQorCWxlYQkxNihycCksIHJwCisJc3ViCSQyLCBuCitMKGEzKToJc3ViCSQxNiwgbgorCWpjCUwoc21hKQorCisJQUxJR04oMTYpCitMKHRvcCk6CXZtb3ZkcXUJKHVwKSwgJXltbTAKKwl2bW92ZHF1CTMyKHVwKSwgJXltbTEKKwl2bW92ZHF1CTY0KHVwKSwgJXltbTIKKwl2bW92ZHF1CTk2KHVwKSwgJXltbTMKKwlsZWEJMTI4KHVwKSwgdXAKKwl2bW92ZHFhCSV5bW0wLCAocnApCisJdm1vdmRxYQkleW1tMSwgMzIocnApCisJdm1vdmRxYQkleW1tMiwgNjQocnApCisJdm1vdmRxYQkleW1tMywgOTYocnApCisJbGVhCTEyOChycCksIHJwCitMKGFsaSk6CXN1YgkkMTYsIG4KKwlqbmMJTCh0b3ApCisKK0woc21hKToJdGVzdAkkOCwgUjgobikKKwlqegkxZgorCXZtb3ZkcXUJKHVwKSwgJXltbTAKKwl2bW92ZHF1CTMyKHVwKSwgJXltbTEKKwlsZWEJNjQodXApLCB1cAorCXZtb3ZkcWEJJXltbTAsIChycCkKKwl2bW92ZHFhCSV5bW0xLCAzMihycCkKKwlsZWEJNjQocnApLCBycAorMToKKwl0ZXN0CSQ0LCBSOChuKQorCWp6CTFmCisJdm1vdmRxdQkodXApLCAleW1tMAorCWxlYQkzMih1cCksIHVwCisJdm1vdmRxYQkleW1tMCwgKHJwKQorCWxlYQkzMihycCksIHJwCisxOgorCXRlc3QJJDIsIFI4KG4pCisJanoJMWYKKwl2bW92ZHF1CSh1cCksICV4bW0wCisJbGVhCTE2KHVwKSwgdXAKKwl2bW92ZHFhCSV4bW0wLCAocnApCisJbGVhCTE2KHJwKSwgcnAKKzE6CitMKGVuZCk6CXRlc3QJJDEsIFI4KG4pCisJanoJMWYKKwltb3YJKHVwKSwgJXI4CisJbW92CSVyOCwgKHJwKQorMToKKwlGVU5DX0VYSVQoKQorCXJldAorCisJQUxJR04oMTYpCitMKGJjKToJdGVzdAkkNCwgUjgobikKKwlqegkxZgorCW1vdgkodXApLCAlcmF4CisJbW92CTgodXApLCAlcmN4CisJbW92CTE2KHVwKSwgJXI4CisJbW92CTI0KHVwKSwgJXI5CisJbGVhCTMyKHVwKSwgdXAKKwltb3YJJXJheCwgKHJwKQorCW1vdgklcmN4LCA4KHJwKQorCW1vdgklcjgsIDE2KHJwKQorCW1vdgklcjksIDI0KHJwKQorCWxlYQkzMihycCksIHJwCisxOgorCXRlc3QJJDIsIFI4KG4pCisJanoJMWYKKwltb3YJKHVwKSwgJXJheAorCW1vdgk4KHVwKSwgJXJjeAorCWxlYQkxNih1cCksIHVwCisJbW92CSVyYXgsIChycCkKKwltb3YJJXJjeCwgOChycCkKKwlsZWEJMTYocnApLCBycAorMToKKwl0ZXN0CSQxLCBSOChuKQorCWp6CTFmCisJbW92CSh1cCksICVyYXgKKwltb3YJJXJheCwgKHJwKQorMToKKwlGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvZmFzdHNzZS9SRUFETUUgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9mYXN0c3NlL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTM4YjJkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvZmFzdHNzZS9SRUFETUUKQEAgLTAsMCArMSwyMiBAQAorVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgY29kZSBmb3IgeDg2LTY0IHByb2Nlc3NvcnMgd2l0aCBmYXN0CitpbXBsZW1lbnRhdGlvbnMgb2YgU1NFIG9wZXJhdGlvbnMsIGhlbmNlIHRoZSBuYW1lICJmYXN0c3NlIi4KKworQ3VycmVudCBwcm9jZXNzb3JzIHRoYXQgbWlnaHQgYmVuZWZpdCBmcm9tIHRoaXMgY29kZSBhcmU6CisKKyAgQU1EIEsxMAorICBBTUQgQnVsbGRvemVyL1BpbGVkcml2ZXIvU3RlYW1yb2xsZXIvRXhjYXZhdG9yCisgIEludGVsIE5vY29uYQorICBJbnRlbCBOZWhhbGVtL1dlc3RtZXJlCisgIEludGVsIFNhbmR5YnJpZGdlL0l2eWJyaWRnZQorICBJbnRlbCBIYXN3ZWxsL0Jyb2Fkd2VsbAorICBWSUEgTmFubworCitDdXJyZW50IHByb2Nlc3NvcnMgdGhhdCBkbyBub3QgYmVuZWZpdCBmcm9tIHRoaXMgY29kZSBhcmU6CisKKyAgQU1EIEs4CisgIEFNRCBCb2JjYXQKKyAgSW50ZWwgQXRvbQorCitJbnRlbCBDb25yb2UvUGVucnluIGlzIGEgYm9yZGVyIGNhc2U7IGl0cyBoYW5kbGluZyBvZiBub24tYWxpZ25lZAorMTI4LWJpdCBtZW1vcnkgb3BlcmFuZHMgaXMgcG9vci4gIFZJQSBOYW5vIGFsc28gaGF2ZSBwb29yIGhhbmRsaW5nIG9mCitub24tYWxpZ25lZCBvcGVyYW5kcy4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2Zhc3Rzc2UvY29tLXBhbGlnbnIuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvZmFzdHNzZS9jb20tcGFsaWduci5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkwMjdiYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2Zhc3Rzc2UvY29tLXBhbGlnbnIuYXNtCkBAIC0wLDAgKzEsMzExIEBACitkbmwgIEFNRDY0IG1wbl9jb20gb3B0aW1pc2VkIGZvciBDUFVzIHdpdGggZmFzdCBTU0UgY29weWluZyBhbmQgU1NTRTMuCisKK2RubCAgQ29weXJpZ2h0IDIwMTIsIDIwMTMsIDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqb3JuIEdyYW5sdW5kLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYiAgICAgY3ljbGVzL2xpbWIgICAgIGN5Y2xlcy9saW1iICAgICAgZ29vZAorQyAgICAgICAgICAgICAgYWxpZ25lZAkgICAgICB1bmFsaWduZWQJICAgICAgYmVzdCBzZWVuCSAgICAgZm9yIGNwdT8KK0MgQU1EIEs4LEs5CSAyLjAJCSBpbGxvcAkJMS4wLzEuMAkJTgorQyBBTUQgSzEwCSAwLjg1CQkgaWxsb3AJCQkJWS9OCitDIEFNRCBiZDEJIDEuMzkJCSA/IDEuNDUJCQkJWS9OCitDIEFNRCBiZDIgICAgIDAuOC0xLjQJICAgICAgIDAuNy0xLjQJCQkJWQorQyBBTUQgYmQzCitDIEFNRCBiZDQKK0MgQU1EIGJvYmNhdAkgMS45NwkJID8gOC4xNwkJMS41LzEuNQkJTgorQyBBTUQgamFndWFyCSAxLjAyCQkgMS4wMgkJMC45MS8wLjkxCU4KK0MgSW50ZWwgUDQJIDIuMjYJCSBpbGxvcAkJCQlZL04KK0MgSW50ZWwgY29yZQkgMC41OAkJIDAuODcJCW9wdC8wLjc0CVkKK0MgSW50ZWwgTkhNCSAwLjY0CQkgMS4xNAkJb3B0L2JhZAkJWQorQyBJbnRlbCBTQlIJIDAuNTEJCSAwLjY1CQlvcHQvb3B0CQlZCitDIEludGVsIElCUgkgMC41MAkJIDAuNjQJCW9wdC8wLjU3CVkKK0MgSW50ZWwgSFdMCSAwLjUxCQkgMC41OAkJb3B0L29wdAkJWQorQyBJbnRlbCBCV0wJIDAuNTIJCSAwLjY0CQlvcHQvb3B0CQlZCitDIEludGVsIFNLTAkgMC41MQkJIDAuNjMJCW9wdC9vcHQJCVkKK0MgSW50ZWwgYXRvbQkgMS4xNgkJIDEuNzAJCW9wdC9vcHQJCVkKK0MgSW50ZWwgU0xNCSAxLjAyCQkgMS41MgkJCQlOCitDIFZJQSBuYW5vCSAxLjA5CQkgMS4xMAkJb3B0L29wdAkJWQorCitDIFdlIHVzZSBvbmx5IDE2LWJ5dGUgb3BlcmF0aW9ucywgZXhjZXB0IGZvciB1bmFsaWduZWQgdG9wLW1vc3QgYW5kIGJvdHRvbS1tb3N0CitDIGxpbWJzLiAgV2UgdXNlIHRoZSBTU1NFMyBwYWxpZ25yIGluc3RydWN0aW9uIHdoZW4gcnAgLSB1cCA9IDggKG1vZCAxNikuICBUaGF0CitDIGluc3RydWN0aW9uIGlzIGJldHRlciBhZGFwdGVkIHRvIG1wbl9jb3B5ZCdzIG5lZWRzLCB3ZSBuZWVkIHRvIGNvbnRvcnQgdGhlCitDIGNvZGUgdG8gdXNlIGl0IGhlcmUuCitDCitDIEZvciBvcGVyYW5kcyBvZiA8IENPTV9TU0VfVEhSRVNIT0xEIGxpbWJzLCB3ZSB1c2UgYSBwbGFpbiA2NC1iaXQgbG9vcCwgdGFrZW4KK0MgZnJvbSB0aGUgeDg2XzY0IGRlZmF1bHQgY29kZS4KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywgYCVyZGknKQorZGVmaW5lKGB1cCcsIGAlcnNpJykKK2RlZmluZShgbicsICBgJXJkeCcpCisKK0MgVGhlcmUgYXJlIHRocmVlIGluc3RydWN0aW9ucyBmb3IgbG9hZGluZyBhbiBhbGlnbmVkIDEyOC1iaXQgcXVhbnRpdHkuICBXZSB1c2UKK0MgbW92YXBzLCBzaW5jZSBpdCBoYXMgdGhlIHNob3J0ZXN0IGNvZGluZy4KK2RlZmluZShgbW92ZHFhJywgYGBtb3ZhcHMnJykKKworaWZkZWYoYENPTV9TU0VfVEhSRVNIT0xEJyxgJyxgZGVmaW5lKGBDT01fU1NFX1RIUkVTSE9MRCcsIDcpJykKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oNjQpCitQUk9MT0dVRShtcG5fY29tKQorCUZVTkNfRU5UUlkoMykKKworCWNtcAkkQ09NX1NTRV9USFJFU0hPTEQsIG4KKwlqYmUJTChiYykKKworCXBjbXBlcWIJJXhtbTUsICV4bW01CQlDIHNldCB0byAxMTEuLi4xMTEKKworCXRlc3QJJDgsIFI4KHJwKQkJQyBpcyBycCAxNi1ieXRlIGFsaWduZWQ/CisJanoJTChycF9hbGlnbmVkKQkJQyBqdW1wIGlmIHJwIGFsaWduZWQKKworCW1vdgkodXApLCAlcjgKKwlsZWEJOCh1cCksIHVwCisJbm90CSVyOAorCW1vdgklcjgsIChycCkKKwlsZWEJOChycCksIHJwCisJZGVjCW4KKworTChycF9hbGlnbmVkKToKKwl0ZXN0CSQ4LCBSOCh1cCkKKwlqbnoJTCh1ZW50KQorCitpZmVsc2UoZXZhbChDT01fU1NFX1RIUkVTSE9MRCA+PSA4KSwxLAorYAlzdWIJJDgsIG4nLAorYAlqbXAJTChhbSknKQorCisJQUxJR04oMTYpCitMKGF0b3ApOm1vdmRxYQkwKHVwKSwgJXhtbTAKKwltb3ZkcWEJMTYodXApLCAleG1tMQorCW1vdmRxYQkzMih1cCksICV4bW0yCisJbW92ZHFhCTQ4KHVwKSwgJXhtbTMKKwlsZWEJNjQodXApLCB1cAorCXB4b3IJJXhtbTUsICV4bW0wCisJcHhvcgkleG1tNSwgJXhtbTEKKwlweG9yCSV4bW01LCAleG1tMgorCXB4b3IJJXhtbTUsICV4bW0zCisJbW92ZHFhCSV4bW0wLCAocnApCisJbW92ZHFhCSV4bW0xLCAxNihycCkKKwltb3ZkcWEJJXhtbTIsIDMyKHJwKQorCW1vdmRxYQkleG1tMywgNDgocnApCisJbGVhCTY0KHJwKSwgcnAKK0woYW0pOglzdWIJJDgsIG4KKwlqbmMJTChhdG9wKQorCisJdGVzdAkkNCwgUjgobikKKwlqegkxZgorCW1vdmRxYQkodXApLCAleG1tMAorCW1vdmRxYQkxNih1cCksICV4bW0xCisJbGVhCTMyKHVwKSwgdXAKKwlweG9yCSV4bW01LCAleG1tMAorCXB4b3IJJXhtbTUsICV4bW0xCisJbW92ZHFhCSV4bW0wLCAocnApCisJbW92ZHFhCSV4bW0xLCAxNihycCkKKwlsZWEJMzIocnApLCBycAorCisxOgl0ZXN0CSQyLCBSOChuKQorCWp6CTFmCisJbW92ZHFhCSh1cCksICV4bW0wCisJbGVhCTE2KHVwKSwgdXAKKwlweG9yCSV4bW01LCAleG1tMAorCW1vdmRxYQkleG1tMCwgKHJwKQorCWxlYQkxNihycCksIHJwCisKKzE6CXRlc3QJJDEsIFI4KG4pCisJanoJMWYKKwltb3YJKHVwKSwgJXI4CisJbm90CSVyOAorCW1vdgklcjgsIChycCkKKworMToJRlVOQ19FWElUKCkKKwlyZXQKKworTCh1ZW50KToKK0MgQ29kZSBoYW5kbGluZyB1cCAtIHJwID0gOCAobW9kIDE2KQorCitDIEZJWE1FOiBUaGUgY29kZSBiZWxvdyBvbmx5IGhhbmRsZXMgb3ZlcmxhcCBpZiBpdCBpcyBjbG9zZSB0byBjb21wbGV0ZSwgb3IKK0MgcXVpdGUgc2VwYXJhdGU6IHVwLXJwIDwgNSBvciB1cC11cCA+IDE1IGxpbWJzCisJbGVhCS00MCh1cCksICVyYXgJCUMgNDAgPSA1ICogR01QX0xJTUJfQllURVMKKwlzdWIJcnAsICVyYXgKKwljbXAJJDgwLCAlcmF4CQlDIDgwID0gKDE1LTUpICogR01QX0xJTUJfQllURVMKKwlqYmUJTChiYykJCQlDIGRlZmxlY3QgdG8gcGxhaW4gbG9vcAorCisJc3ViCSQxNiwgbgorCWpjCUwodWVuZCkKKworCW1vdmRxYQkxMjAodXApLCAleG1tMworCisJc3ViCSQxNiwgbgorCWptcAlMKHVtKQorCisJQUxJR04oMTYpCitMKHV0b3ApOm1vdmRxYQkxMjAodXApLCAleG1tMworCXB4b3IJJXhtbTUsICV4bW0wCisJbW92ZHFhCSV4bW0wLCAtMTI4KHJwKQorCXN1YgkkMTYsIG4KK0wodW0pOgltb3ZkcWEJMTA0KHVwKSwgJXhtbTIKKwlwYWxpZ25yKCQ4LCAleG1tMiwgJXhtbTMpCisJbW92ZHFhCTg4KHVwKSwgJXhtbTEKKwlweG9yCSV4bW01LCAleG1tMworCW1vdmRxYQkleG1tMywgMTEyKHJwKQorCXBhbGlnbnIoJDgsICV4bW0xLCAleG1tMikKKwltb3ZkcWEJNzIodXApLCAleG1tMAorCXB4b3IJJXhtbTUsICV4bW0yCisJbW92ZHFhCSV4bW0yLCA5NihycCkKKwlwYWxpZ25yKCQ4LCAleG1tMCwgJXhtbTEpCisJbW92ZHFhCTU2KHVwKSwgJXhtbTMKKwlweG9yCSV4bW01LCAleG1tMQorCW1vdmRxYQkleG1tMSwgODAocnApCisJcGFsaWducigkOCwgJXhtbTMsICV4bW0wKQorCW1vdmRxYQk0MCh1cCksICV4bW0yCisJcHhvcgkleG1tNSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIDY0KHJwKQorCXBhbGlnbnIoJDgsICV4bW0yLCAleG1tMykKKwltb3ZkcWEJMjQodXApLCAleG1tMQorCXB4b3IJJXhtbTUsICV4bW0zCisJbW92ZHFhCSV4bW0zLCA0OChycCkKKwlwYWxpZ25yKCQ4LCAleG1tMSwgJXhtbTIpCisJbW92ZHFhCTgodXApLCAleG1tMAorCXB4b3IJJXhtbTUsICV4bW0yCisJbW92ZHFhCSV4bW0yLCAzMihycCkKKwlwYWxpZ25yKCQ4LCAleG1tMCwgJXhtbTEpCisJbW92ZHFhCS04KHVwKSwgJXhtbTMKKwlweG9yCSV4bW01LCAleG1tMQorCW1vdmRxYQkleG1tMSwgMTYocnApCisJcGFsaWducigkOCwgJXhtbTMsICV4bW0wKQorCWxlYQkxMjgodXApLCB1cAorCWxlYQkxMjgocnApLCBycAorCWpuYwlMKHV0b3ApCisKKwlweG9yCSV4bW01LCAleG1tMAorCW1vdmRxYQkleG1tMCwgLTEyOChycCkKKworTCh1ZW5kKTp0ZXN0CSQ4LCBSOChuKQorCWp6CTFmCisJbW92ZHFhCTU2KHVwKSwgJXhtbTMKKwltb3ZkcWEJNDAodXApLCAleG1tMgorCXBhbGlnbnIoJDgsICV4bW0yLCAleG1tMykKKwltb3ZkcWEJMjQodXApLCAleG1tMQorCXB4b3IJJXhtbTUsICV4bW0zCisJbW92ZHFhCSV4bW0zLCA0OChycCkKKwlwYWxpZ25yKCQ4LCAleG1tMSwgJXhtbTIpCisJbW92ZHFhCTgodXApLCAleG1tMAorCXB4b3IJJXhtbTUsICV4bW0yCisJbW92ZHFhCSV4bW0yLCAzMihycCkKKwlwYWxpZ25yKCQ4LCAleG1tMCwgJXhtbTEpCisJbW92ZHFhCS04KHVwKSwgJXhtbTMKKwlweG9yCSV4bW01LCAleG1tMQorCW1vdmRxYQkleG1tMSwgMTYocnApCisJcGFsaWducigkOCwgJXhtbTMsICV4bW0wKQorCWxlYQk2NCh1cCksIHVwCisJcHhvcgkleG1tNSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIChycCkKKwlsZWEJNjQocnApLCBycAorCisxOgl0ZXN0CSQ0LCBSOChuKQorCWp6CTFmCisJbW92ZHFhCTI0KHVwKSwgJXhtbTEKKwltb3ZkcWEJOCh1cCksICV4bW0wCisJcGFsaWducigkOCwgJXhtbTAsICV4bW0xKQorCW1vdmRxYQktOCh1cCksICV4bW0zCisJcHhvcgkleG1tNSwgJXhtbTEKKwltb3ZkcWEJJXhtbTEsIDE2KHJwKQorCXBhbGlnbnIoJDgsICV4bW0zLCAleG1tMCkKKwlsZWEJMzIodXApLCB1cAorCXB4b3IJJXhtbTUsICV4bW0wCisJbW92ZHFhCSV4bW0wLCAocnApCisJbGVhCTMyKHJwKSwgcnAKKworMToJdGVzdAkkMiwgUjgobikKKwlqegkxZgorCW1vdmRxYQk4KHVwKSwgJXhtbTAKKwltb3ZkcWEJLTgodXApLCAleG1tMworCXBhbGlnbnIoJDgsICV4bW0zLCAleG1tMCkKKwlsZWEJMTYodXApLCB1cAorCXB4b3IJJXhtbTUsICV4bW0wCisJbW92ZHFhCSV4bW0wLCAocnApCisJbGVhCTE2KHJwKSwgcnAKKworMToJdGVzdAkkMSwgUjgobikKKwlqegkxZgorCW1vdgkodXApLCAlcjgKKwlub3QJJXI4CisJbW92CSVyOCwgKHJwKQorCisxOglGVU5DX0VYSVQoKQorCXJldAorCitDIEJhc2VjYXNlIGNvZGUuICBOZWVkZWQgZm9yIGdvb2Qgc21hbGwgb3BlcmFuZHMgc3BlZWQsIG5vdCBmb3IKK0MgY29ycmVjdG5lc3MgYXMgdGhlIGFib3ZlIGNvZGUgaXMgY3VycmVudGx5IHdyaXR0ZW4uCisKK0woYmMpOglsZWEJLTgocnApLCBycAorCXN1YgkkNCwgUjMyKG4pCisJamMJTChlbmQpCisKK2lmZWxzZShldmFsKDEgfHwgQ09NX1NTRV9USFJFU0hPTEQgPj0gOCksMSwKK2AJQUxJR04oMTYpJykKK0wodG9wKToJbW92CSh1cCksICVyOAorCW1vdgk4KHVwKSwgJXI5CisJbGVhCTMyKHJwKSwgcnAKKwltb3YJMTYodXApLCAlcjEwCisJbW92CTI0KHVwKSwgJXIxMQorCWxlYQkzMih1cCksIHVwCisJbm90CSVyOAorCW5vdAklcjkKKwlub3QJJXIxMAorCW5vdAklcjExCisJbW92CSVyOCwgLTI0KHJwKQorCW1vdgklcjksIC0xNihycCkKK2lmZWxzZShldmFsKDEgfHwgQ09NX1NTRV9USFJFU0hPTEQgPj0gOCksMSwKK2AJc3ViCSQ0LCBSMzIobiknKQorCW1vdgklcjEwLCAtOChycCkKKwltb3YJJXIxMSwgKHJwKQoraWZlbHNlKGV2YWwoMSB8fCBDT01fU1NFX1RIUkVTSE9MRCA+PSA4KSwxLAorYAlqbmMJTCh0b3ApJykKKworTChlbmQpOgl0ZXN0CSQxLCBSOChuKQorCWp6CTFmCisJbW92CSh1cCksICVyOAorCW5vdAklcjgKKwltb3YJJXI4LCA4KHJwKQorCWxlYQk4KHJwKSwgcnAKKwlsZWEJOCh1cCksIHVwCisxOgl0ZXN0CSQyLCBSOChuKQorCWp6CTFmCisJbW92CSh1cCksICVyOAorCW1vdgk4KHVwKSwgJXI5CisJbm90CSVyOAorCW5vdAklcjkKKwltb3YJJXI4LCA4KHJwKQorCW1vdgklcjksIDE2KHJwKQorMToJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2Zhc3Rzc2UvY29tLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2Zhc3Rzc2UvY29tLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODY3MjIyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvZmFzdHNzZS9jb20uYXNtCkBAIC0wLDAgKzEsMTc1IEBACitkbmwgIEFNRDY0IG1wbl9jb20gb3B0aW1pc2VkIGZvciBDUFVzIHdpdGggZmFzdCBTU0UuCisKK2RubCAgQ29weXJpZ2h0IDIwMDMsIDIwMDUsIDIwMDcsIDIwMTEsIDIwMTIsIDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorZG5sICBJbmMuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqb3JuIEdyYW5sdW5kLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYiAgICAgY3ljbGVzL2xpbWIgICAgIGN5Y2xlcy9saW1iICAgICAgZ29vZAorQyAgICAgICAgICAgICAgYWxpZ25lZAkgICAgICB1bmFsaWduZWQJICAgICAgYmVzdCBzZWVuCSAgICAgZm9yIGNwdT8KK0MgQU1EIEs4LEs5CSAyLjAJCSAyLjAJCQkJTgorQyBBTUQgSzEwCSAwLjg1CQkgMS4zCQkJCVkvTgorQyBBTUQgYnVsbAkgMS40MAkJIDEuNDAJCQkJWQorQyBBTUQgcGlsZSAgICAgMC45LTEuNAkgICAgICAgMC45LTEuNAkJCQlZCitDIEFNRCBzdGVhbQorQyBBTUQgZXhjYXZhdG9yCitDIEFNRCBib2JjYXQJIDMuMQkJIDMuMQkJCQlOCitDIEFNRCBqYWd1YXIJIDAuOTEJCSAwLjkxCQlvcHQvb3B0CQlZCitDIEludGVsIFA0CSAyLjI4CQkgaWxsb3AJCQkJWQorQyBJbnRlbCBjb3JlMgkgMS4wMgkJIDEuMDIJCQkJTgorQyBJbnRlbCBOSE0JIDAuNTMJCSAwLjY4CQkJCVkKK0MgSW50ZWwgU0JSCSAwLjUxCQkgMC43NQkJb3B0LzAuNjUJWS9OCitDIEludGVsIElCUgkgMC41MAkJIDAuNTcJCW9wdC9vcHQJCVkKK0MgSW50ZWwgSFdMCSAwLjUxCQkgMC42NAkJb3B0LzAuNTgJWQorQyBJbnRlbCBCV0wJIDAuNjEJCSAwLjY1CQkwLjU3L29wdAlZCitDIEludGVsIGF0b20JIDMuNjgJCSAzLjY4CQkJCU4KK0MgSW50ZWwgU0xNCSAxLjA5CQkgMS4zNQkJCQlOCitDIFZJQSBuYW5vCSAxLjE3CQkgNS4wOQkJCQlZL04KKworQyBXZSB0cnkgdG8gZG8gYXMgbWFueSAxNi1ieXRlIG9wZXJhdGlvbnMgYXMgcG9zc2libGUuICBUaGUgdG9wLW1vc3QgYW5kCitDIGJvdHRvbS1tb3N0IHdyaXRlcyBtaWdodCBuZWVkIDgtYnl0ZSBvcGVyYXRpb25zLiAgV2UgY2FuIGFsd2F5cyB3cml0ZSB1c2luZworQyBhbGlnbmVkIDE2LWJ5dGUgb3BlcmF0aW9ucywgd2UgcmVhZCB3aXRoIGJvdGggYWxpZ25lZCBhbmQgdW5hbGlnbmVkIDE2LWJ5dGUKK0Mgb3BlcmF0aW9ucy4KKworQyBJbnN0ZWFkIG9mIGhhdmluZyBzZXBhcmF0ZSBsb29wcyBmb3IgcmVhZGluZyBhbGlnbmVkIGFuZCB1bmFsaWduZWQsIHdlIHJlYWQKK0MgdXNpbmcgTU9WRFFVLiAgVGhpcyBzZWVtcyB0byB3b3JrIGdyZWF0IGV4Y2VwdCBmb3IgY29yZTI7IHRoZXJlIHBlcmZvcm1hbmNlCitDIGRvdWJsZXMgd2hlbiByZWFkaW5nIHVzaW5nIE1PVkRRQSAoZm9yIGFsaWduZWQgc291cmNlKS4gIEl0IGlzIHVuY2xlYXIgaG93IHRvCitDIGJlc3QgaGFuZGxlIHRoZSB1bmFsaWduZWQgY2FzZSB0aGVyZS4KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywgYCVyZGknKQorZGVmaW5lKGB1cCcsIGAlcnNpJykKK2RlZmluZShgbicsICBgJXJkeCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX2NvbSkKKwlGVU5DX0VOVFJZKDMpCisKK0lGRE9TKGAJYWRkCSQtNTYsICVyc3AJJykKK0lGRE9TKGAJbW92ZHFhCSV4bW02LCAoJXJzcCkJJykKK0lGRE9TKGAJbW92ZHFhCSV4bW03LCAxNiglcnNwKQknKQorCisJcGNtcGVxYgkleG1tNywgJXhtbTcJCUMgc2V0IHRvIDExMS4uLjExMQorCisJdGVzdAkkOCwgUjgocnApCQlDIGlzIHJwIDE2LWJ5dGUgYWxpZ25lZD8KKwlqeglMKGFsaSkJCQlDIGp1bXAgaWYgcnAgYWxpZ25lZAorCW1vdgkodXApLCAlcmF4CisJbGVhCTgodXApLCB1cAorCW5vdAklcmF4CisJbW92CSVyYXgsIChycCkKKwlsZWEJOChycCksIHJwCisJZGVjCW4KKworCXN1YgkkMTQsIG4KKwlqYwlMKHNtYSkKKworCUFMSUdOKDE2KQorTCh0b3ApOgltb3ZkcXUJKHVwKSwgJXhtbTAKKwltb3ZkcXUJMTYodXApLCAleG1tMQorCW1vdmRxdQkzMih1cCksICV4bW0yCisJbW92ZHF1CTQ4KHVwKSwgJXhtbTMKKwltb3ZkcXUJNjQodXApLCAleG1tNAorCW1vdmRxdQk4MCh1cCksICV4bW01CisJbW92ZHF1CTk2KHVwKSwgJXhtbTYKKwlsZWEJMTEyKHVwKSwgdXAKKwlweG9yCSV4bW03LCAleG1tMAorCXB4b3IJJXhtbTcsICV4bW0xCisJcHhvcgkleG1tNywgJXhtbTIKKwlweG9yCSV4bW03LCAleG1tMworCXB4b3IJJXhtbTcsICV4bW00CisJcHhvcgkleG1tNywgJXhtbTUKKwlweG9yCSV4bW03LCAleG1tNgorCW1vdmRxYQkleG1tMCwgKHJwKQorCW1vdmRxYQkleG1tMSwgMTYocnApCisJbW92ZHFhCSV4bW0yLCAzMihycCkKKwltb3ZkcWEJJXhtbTMsIDQ4KHJwKQorCW1vdmRxYQkleG1tNCwgNjQocnApCisJbW92ZHFhCSV4bW01LCA4MChycCkKKwltb3ZkcWEJJXhtbTYsIDk2KHJwKQorCWxlYQkxMTIocnApLCBycAorTChhbGkpOglzdWIJJDE0LCBuCisJam5jCUwodG9wKQorCitMKHNtYSk6CWFkZAkkMTQsIG4KKwl0ZXN0CSQ4LCBSOChuKQorCWp6CTFmCisJbW92ZHF1CSh1cCksICV4bW0wCisJbW92ZHF1CTE2KHVwKSwgJXhtbTEKKwltb3ZkcXUJMzIodXApLCAleG1tMgorCW1vdmRxdQk0OCh1cCksICV4bW0zCisJbGVhCTY0KHVwKSwgdXAKKwlweG9yCSV4bW03LCAleG1tMAorCXB4b3IJJXhtbTcsICV4bW0xCisJcHhvcgkleG1tNywgJXhtbTIKKwlweG9yCSV4bW03LCAleG1tMworCW1vdmRxYQkleG1tMCwgKHJwKQorCW1vdmRxYQkleG1tMSwgMTYocnApCisJbW92ZHFhCSV4bW0yLCAzMihycCkKKwltb3ZkcWEJJXhtbTMsIDQ4KHJwKQorCWxlYQk2NChycCksIHJwCisxOgorCXRlc3QJJDQsIFI4KG4pCisJanoJMWYKKwltb3ZkcXUJKHVwKSwgJXhtbTAKKwltb3ZkcXUJMTYodXApLCAleG1tMQorCWxlYQkzMih1cCksIHVwCisJcHhvcgkleG1tNywgJXhtbTAKKwlweG9yCSV4bW03LCAleG1tMQorCW1vdmRxYQkleG1tMCwgKHJwKQorCW1vdmRxYQkleG1tMSwgMTYocnApCisJbGVhCTMyKHJwKSwgcnAKKzE6CisJdGVzdAkkMiwgUjgobikKKwlqegkxZgorCW1vdmRxdQkodXApLCAleG1tMAorCWxlYQkxNih1cCksIHVwCisJcHhvcgkleG1tNywgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIChycCkKKwlsZWEJMTYocnApLCBycAorMToKKwl0ZXN0CSQxLCBSOChuKQorCWp6CTFmCisJbW92CSh1cCksICVyYXgKKwlub3QJJXJheAorCW1vdgklcmF4LCAocnApCisxOgorTChkb24pOgorSUZET1MoYAltb3ZkcWEJKCVyc3ApLCAleG1tNgknKQorSUZET1MoYAltb3ZkcWEJMTYoJXJzcCksICV4bW03CScpCitJRkRPUyhgCWFkZAkkNTYsICVyc3AJJykKKwlGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvZmFzdHNzZS9jb3B5ZC1wYWxpZ25yLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2Zhc3Rzc2UvY29weWQtcGFsaWduci5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFjNmY4YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2Zhc3Rzc2UvY29weWQtcGFsaWduci5hc20KQEAgLTAsMCArMSwyNTQgQEAKK2RubCAgQU1ENjQgbXBuX2NvcHlkIG9wdGltaXNlZCBmb3IgQ1BVcyB3aXRoIGZhc3QgU1NFIGNvcHlpbmcgYW5kIFNTU0UzLgorCitkbmwgIENvcHlyaWdodCAyMDEyLCAyMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3Jiam9ybiBHcmFubHVuZC4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIgICAgIGN5Y2xlcy9saW1iICAgICBjeWNsZXMvbGltYiAgICAgIGdvb2QKK0MgICAgICAgICAgICAgIGFsaWduZWQJICAgICAgdW5hbGlnbmVkCSAgICAgIGJlc3Qgc2VlbgkgICAgIGZvciBjcHU/CitDIEFNRCBLOCxLOQkgMi4wCQkgaWxsb3AJCTEuMC8xLjAJCU4KK0MgQU1EIEsxMAkgMC44NQkJIGlsbG9wCQkJCVkvTgorQyBBTUQgYnVsbAkgMC43MAkJIDAuNzAJCQkJWQorQyBBTUQgcGlsZQkgMC42OAkJIDAuNjgJCQkJWQorQyBBTUQgc3RlYW0KK0MgQU1EIGV4Y2F2YXRvcgorQyBBTUQgYm9iY2F0CSAxLjk3CQkgOC4yNAkJMS41LzEuNQkJTgorQyBBTUQgamFndWFyCSAwLjc3CQkgMC44OQkJMC42NS9vcHQJTi9ZCitDIEludGVsIFA0CSAyLjI2CQkgaWxsb3AJCQkJWS9OCitDIEludGVsIGNvcmUJIDAuNTIJCSAwLjgwCQlvcHQvb3B0CQlZCitDIEludGVsIE5ITQkgMC41MgkJIDAuNjQJCW9wdC9vcHQJCVkKK0MgSW50ZWwgU0JSCSAwLjUxCQkgMC41MQkJb3B0L29wdAkJWQorQyBJbnRlbCBJQlIJIDAuNTAJCSAwLjUwCQlvcHQvb3B0CQlZCitDIEludGVsIEhXTAkgMC41MAkJIDAuNTEJCW9wdC9vcHQJCVkKK0MgSW50ZWwgQldMCSAwLjU1CQkgMC41NQkJb3B0L29wdAkJWQorQyBJbnRlbCBhdG9tCSAxLjE2CQkgMS42NgkJb3B0L29wdAkJWQorQyBJbnRlbCBTTE0JIDEuMDIJCSAxLjA0CQlvcHQvb3B0CQlZCitDIFZJQSBuYW5vCSAxLjA4CQkgMS4wNgkJb3B0L29wdAkJWQorCitDIFdlIHVzZSBvbmx5IDE2LWJ5dGUgb3BlcmF0aW9ucywgZXhjZXB0IGZvciB1bmFsaWduZWQgdG9wLW1vc3QgYW5kIGJvdHRvbS1tb3N0CitDIGxpbWJzLiAgV2UgdXNlIHRoZSBTU1NFMyBwYWxpZ25yIGluc3RydWN0aW9uIHdoZW4gcnAgLSB1cCA9IDggKG1vZCAxNikuCitDCitDIEZvciBvcGVyYW5kcyBvZiA8IENPUFlEX1NTRV9USFJFU0hPTEQgbGltYnMsIHdlIHVzZSBhIHBsYWluIDY0LWJpdCBsb29wLAorQyB0YWtlbiBmcm9tIHRoZSB4ODZfNjQgZGVmYXVsdCBjb2RlLgorCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLCBgJXJkaScpCitkZWZpbmUoYHVwJywgYCVyc2knKQorZGVmaW5lKGBuJywgIGAlcmR4JykKKworQyBUaGVyZSBhcmUgdGhyZWUgaW5zdHJ1Y3Rpb25zIGZvciBsb2FkaW5nIGFuIGFsaWduZWQgMTI4LWJpdCBxdWFudGl0eS4gIFdlIHVzZQorQyBtb3ZhcHMsIHNpbmNlIGl0IGhhcyB0aGUgc2hvcnRlc3QgY29kaW5nLgorZGVmaW5lKGBtb3ZkcWEnLCBgYG1vdmFwcycnKQorCitpZmRlZihgQ09QWURfU1NFX1RIUkVTSE9MRCcsYCcsYGRlZmluZShgQ09QWURfU1NFX1RIUkVTSE9MRCcsIDcpJykKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oNjQpCitQUk9MT0dVRShtcG5fY29weWQpCisJRlVOQ19FTlRSWSgzKQorCisJbGVhCS04KHVwLG4sOCksIHVwCisJbGVhCS04KHJwLG4sOCksIHJwCisKKwljbXAJJENPUFlEX1NTRV9USFJFU0hPTEQsIG4KKwlqYmUJTChiYykKKworCXRlc3QJJDgsIFI4KHJwKQkJQyBpcyBycCAxNi1ieXRlIGFsaWduZWQ/CisJam56CUwocnBfYWxpZ25lZCkJCUMganVtcCBpZiBycCBhbGlnbmVkCisKKwltb3YJKHVwKSwgJXJheAkJQyBjb3B5IG9uZSBsaW1iCisJbW92CSVyYXgsIChycCkKKwlsZWEJLTgodXApLCB1cAorCWxlYQktOChycCksIHJwCisJZGVjCW4KKworTChycF9hbGlnbmVkKToKKwl0ZXN0CSQ4LCBSOCh1cCkKKwlqeglMKHVlbnQpCisKK2lmZWxzZShldmFsKENPUFlEX1NTRV9USFJFU0hPTEQgPj0gOCksMSwKK2AJc3ViCSQ4LCBuJywKK2AJam1wCUwoYW0pJykKKworCUFMSUdOKDE2KQorTChhdG9wKTptb3ZkcWEJLTgodXApLCAleG1tMAorCW1vdmRxYQktMjQodXApLCAleG1tMQorCW1vdmRxYQktNDAodXApLCAleG1tMgorCW1vdmRxYQktNTYodXApLCAleG1tMworCWxlYQktNjQodXApLCB1cAorCW1vdmRxYQkleG1tMCwgLTgocnApCisJbW92ZHFhCSV4bW0xLCAtMjQocnApCisJbW92ZHFhCSV4bW0yLCAtNDAocnApCisJbW92ZHFhCSV4bW0zLCAtNTYocnApCisJbGVhCS02NChycCksIHJwCitMKGFtKToJc3ViCSQ4LCBuCisJam5jCUwoYXRvcCkKKworCXRlc3QJJDQsIFI4KG4pCisJanoJMWYKKwltb3ZkcWEJLTgodXApLCAleG1tMAorCW1vdmRxYQktMjQodXApLCAleG1tMQorCWxlYQktMzIodXApLCB1cAorCW1vdmRxYQkleG1tMCwgLTgocnApCisJbW92ZHFhCSV4bW0xLCAtMjQocnApCisJbGVhCS0zMihycCksIHJwCisKKzE6CXRlc3QJJDIsIFI4KG4pCisJanoJMWYKKwltb3ZkcWEJLTgodXApLCAleG1tMAorCWxlYQktMTYodXApLCB1cAorCW1vdmRxYQkleG1tMCwgLTgocnApCisJbGVhCS0xNihycCksIHJwCisKKzE6CXRlc3QJJDEsIFI4KG4pCisJanoJMWYKKwltb3YJKHVwKSwgJXI4CisJbW92CSVyOCwgKHJwKQorCisxOglGVU5DX0VYSVQoKQorCXJldAorCitMKHVlbnQpOnN1YgkkMTYsIG4KKwltb3ZkcWEJKHVwKSwgJXhtbTAKKwlqYwlMKHVlbmQpCisKKwlBTElHTigxNikKK0wodXRvcCk6c3ViCSQxNiwgbgorCW1vdmRxYQktMTYodXApLCAleG1tMQorCXBhbGlnbnIoJDgsICV4bW0xLCAleG1tMCkKKwltb3ZkcWEJJXhtbTAsIC04KHJwKQorCW1vdmRxYQktMzIodXApLCAleG1tMgorCXBhbGlnbnIoJDgsICV4bW0yLCAleG1tMSkKKwltb3ZkcWEJJXhtbTEsIC0yNChycCkKKwltb3ZkcWEJLTQ4KHVwKSwgJXhtbTMKKwlwYWxpZ25yKCQ4LCAleG1tMywgJXhtbTIpCisJbW92ZHFhCSV4bW0yLCAtNDAocnApCisJbW92ZHFhCS02NCh1cCksICV4bW0wCisJcGFsaWducigkOCwgJXhtbTAsICV4bW0zKQorCW1vdmRxYQkleG1tMywgLTU2KHJwKQorCW1vdmRxYQktODAodXApLCAleG1tMQorCXBhbGlnbnIoJDgsICV4bW0xLCAleG1tMCkKKwltb3ZkcWEJJXhtbTAsIC03MihycCkKKwltb3ZkcWEJLTk2KHVwKSwgJXhtbTIKKwlwYWxpZ25yKCQ4LCAleG1tMiwgJXhtbTEpCisJbW92ZHFhCSV4bW0xLCAtODgocnApCisJbW92ZHFhCS0xMTIodXApLCAleG1tMworCXBhbGlnbnIoJDgsICV4bW0zLCAleG1tMikKKwltb3ZkcWEJJXhtbTIsIC0xMDQocnApCisJbW92ZHFhCS0xMjgodXApLCAleG1tMAorCXBhbGlnbnIoJDgsICV4bW0wLCAleG1tMykKKwltb3ZkcWEJJXhtbTMsIC0xMjAocnApCisJbGVhCS0xMjgodXApLCB1cAorCWxlYQktMTI4KHJwKSwgcnAKKwlqbmMJTCh1dG9wKQorCitMKHVlbmQpOnRlc3QJJDgsIFI4KG4pCisJanoJMWYKKwltb3ZkcWEJLTE2KHVwKSwgJXhtbTEKKwlwYWxpZ25yKCQ4LCAleG1tMSwgJXhtbTApCisJbW92ZHFhCSV4bW0wLCAtOChycCkKKwltb3ZkcWEJLTMyKHVwKSwgJXhtbTAKKwlwYWxpZ25yKCQ4LCAleG1tMCwgJXhtbTEpCisJbW92ZHFhCSV4bW0xLCAtMjQocnApCisJbW92ZHFhCS00OCh1cCksICV4bW0xCisJcGFsaWducigkOCwgJXhtbTEsICV4bW0wKQorCW1vdmRxYQkleG1tMCwgLTQwKHJwKQorCW1vdmRxYQktNjQodXApLCAleG1tMAorCXBhbGlnbnIoJDgsICV4bW0wLCAleG1tMSkKKwltb3ZkcWEJJXhtbTEsIC01NihycCkKKwlsZWEJLTY0KHVwKSwgdXAKKwlsZWEJLTY0KHJwKSwgcnAKKworMToJdGVzdAkkNCwgUjgobikKKwlqegkxZgorCW1vdmRxYQktMTYodXApLCAleG1tMQorCXBhbGlnbnIoJDgsICV4bW0xLCAleG1tMCkKKwltb3ZkcWEJJXhtbTAsIC04KHJwKQorCW1vdmRxYQktMzIodXApLCAleG1tMAorCXBhbGlnbnIoJDgsICV4bW0wLCAleG1tMSkKKwltb3ZkcWEJJXhtbTEsIC0yNChycCkKKwlsZWEJLTMyKHVwKSwgdXAKKwlsZWEJLTMyKHJwKSwgcnAKKworMToJdGVzdAkkMiwgUjgobikKKwlqegkxZgorCW1vdmRxYQktMTYodXApLCAleG1tMQorCXBhbGlnbnIoJDgsICV4bW0xLCAleG1tMCkKKwltb3ZkcWEJJXhtbTAsIC04KHJwKQorCWxlYQktMTYodXApLCB1cAorCWxlYQktMTYocnApLCBycAorCisxOgl0ZXN0CSQxLCBSOChuKQorCWp6CTFmCisJbW92CSh1cCksICVyOAorCW1vdgklcjgsIChycCkKKworMToJRlVOQ19FWElUKCkKKwlyZXQKKworQyBCYXNlY2FzZSBjb2RlLiAgTmVlZGVkIGZvciBnb29kIHNtYWxsIG9wZXJhbmRzIHNwZWVkLCBub3QgZm9yCitDIGNvcnJlY3RuZXNzIGFzIHRoZSBhYm92ZSBjb2RlIGlzIGN1cnJlbnRseSB3cml0dGVuLgorCitMKGJjKToJc3ViCSQ0LCBSMzIobikKKwlqYwlMKGVuZCkKKworCUFMSUdOKDE2KQorTCh0b3ApOgltb3YJKHVwKSwgJXI4CisJbW92CS04KHVwKSwgJXI5CisJbGVhCS0zMihycCksIHJwCisJbW92CS0xNih1cCksICVyMTAKKwltb3YJLTI0KHVwKSwgJXIxMQorCWxlYQktMzIodXApLCB1cAorCW1vdgklcjgsIDMyKHJwKQorCW1vdgklcjksIDI0KHJwKQoraWZlbHNlKGV2YWwoQ09QWURfU1NFX1RIUkVTSE9MRCA+PSA4KSwxLAorYAlzdWIJJDQsIFIzMihuKScpCisJbW92CSVyMTAsIDE2KHJwKQorCW1vdgklcjExLCA4KHJwKQoraWZlbHNlKGV2YWwoQ09QWURfU1NFX1RIUkVTSE9MRCA+PSA4KSwxLAorYAlqbmMJTCh0b3ApJykKKworTChlbmQpOgl0ZXN0CSQxLCBSOChuKQorCWp6CTFmCisJbW92CSh1cCksICVyOAorCW1vdgklcjgsIChycCkKKwlsZWEJLTgocnApLCBycAorCWxlYQktOCh1cCksIHVwCisxOgl0ZXN0CSQyLCBSOChuKQorCWp6CTFmCisJbW92CSh1cCksICVyOAorCW1vdgktOCh1cCksICVyOQorCW1vdgklcjgsIChycCkKKwltb3YJJXI5LCAtOChycCkKKzE6CUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9mYXN0c3NlL2NvcHlkLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2Zhc3Rzc2UvY29weWQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYzQ3MDYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9mYXN0c3NlL2NvcHlkLmFzbQpAQCAtMCwwICsxLDE2NiBAQAorZG5sICBBTUQ2NCBtcG5fY29weWQgb3B0aW1pc2VkIGZvciBDUFVzIHdpdGggZmFzdCBTU0UuCisKK2RubCAgQ29weXJpZ2h0IDIwMDMsIDIwMDUsIDIwMDcsIDIwMTEsIDIwMTIsIDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorZG5sICBJbmMuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqw7ZybiBHcmFubHVuZC4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIgICAgIGN5Y2xlcy9saW1iICAgICBjeWNsZXMvbGltYiAgICAgIGdvb2QKK0MgICAgICAgICAgICAgIGFsaWduZWQJICAgICAgdW5hbGlnbmVkCSAgICAgIGJlc3Qgc2VlbgkgICAgIGZvciBjcHU/CitDIEFNRCBLOCxLOQorQyBBTUQgSzEwCSAwLjg1CQkgMS42NAkJCQlZL04KK0MgQU1EIGJ1bGwJIDEuNAkJIDEuNAkJCQlZCitDIEFNRCBwaWxlCSAwLjY4CQkgMC45OAkJCQlZL04KK0MgQU1EIHN0ZWFtCitDIEFNRCBleGNhdmF0b3IKK0MgQU1EIGJvYmNhdAorQyBBTUQgamFndWFyCSAwLjY1CQkgMS4wMgkJb3B0LzAuOTMJWS9OCitDIEludGVsIFA0CSAyLjMJCSAyLjMJCQkJWQorQyBJbnRlbCBjb3JlCSAxLjAJCSAxLjAJCTAuNTIvMC44MAlOCitDIEludGVsIE5ITQkgMC41CQkgMC42NwkJCQlZCitDIEludGVsIFNCUgkgMC41MQkJIDAuNzUJCW9wdC8wLjU0CVkvTgorQyBJbnRlbCBJQlIJIDAuNTAJCSAwLjU3CQlvcHQvMC41MAlZCitDIEludGVsIEhXTAkgMC41MAkJIDAuNTcJCW9wdC8wLjUxCVkKK0MgSW50ZWwgQldMCSAwLjU1CQkgMC42MgkJb3B0LzAuNTUJWQorQyBJbnRlbCBhdG9tCitDIEludGVsIFNMTQkgMS4wMgkJIDEuMjcJCW9wdC8xLjA0CVkvTgorQyBWSUEgbmFubwkgMS4xNgkJIDUuMTYJCQkJWS9OCisKK0MgV2UgdHJ5IHRvIGRvIGFzIG1hbnkgMTYtYnl0ZSBvcGVyYXRpb25zIGFzIHBvc3NpYmxlLiAgVGhlIHRvcC1tb3N0IGFuZAorQyBib3R0b20tbW9zdCB3cml0ZXMgbWlnaHQgbmVlZCA4LWJ5dGUgb3BlcmF0aW9ucy4gIFdlIGNhbiBhbHdheXMgd3JpdGUgdXNpbmcKK0MgYWxpZ25lZCAxNi1ieXRlIG9wZXJhdGlvbnMsIHdlIHJlYWQgd2l0aCBib3RoIGFsaWduZWQgYW5kIHVuYWxpZ25lZCAxNi1ieXRlCitDIG9wZXJhdGlvbnMuCisKK0MgSW5zdGVhZCBvZiBoYXZpbmcgc2VwYXJhdGUgbG9vcHMgZm9yIHJlYWRpbmcgYWxpZ25lZCBhbmQgdW5hbGlnbmVkLCB3ZSByZWFkCitDIHVzaW5nIE1PVkRRVS4gIFRoaXMgc2VlbXMgdG8gd29yayBncmVhdCBleGNlcHQgZm9yIGNvcmUyOyB0aGVyZSBwZXJmb3JtYW5jZQorQyBkb3VibGVzIHdoZW4gcmVhZGluZyB1c2luZyBNT1ZEUUEgKGZvciBhbGlnbmVkIHNvdXJjZSkuICBJdCBpcyB1bmNsZWFyIGhvdyB0bworQyBiZXN0IGhhbmRsZSB0aGUgdW5hbGlnbmVkIGNhc2UgdGhlcmUuCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsIGAlcmRpJykKK2RlZmluZShgdXAnLCBgJXJzaScpCitkZWZpbmUoYG4nLCAgYCVyZHgnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitkbmwgZGVmaW5lKGBtb3ZkcXUnLCBsZGRxdSkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMTYpCitQUk9MT0dVRShtcG5fY29weWQpCisJRlVOQ19FTlRSWSgzKQorCisJdGVzdAluLCBuCisJanoJTChkb24pCisKKwlsZWEJLTE2KHJwLG4sOCksIHJwCisJbGVhCS0xNih1cCxuLDgpLCB1cAorCisJdGVzdAkkOCwgUjgocnApCQlDIGlzIHJwIDE2LWJ5dGUgYWxpZ25lZD8KKwlqeglMKGFsaSkJCQlDIGp1bXAgaWYgcnAgYWxpZ25lZAorCW1vdgk4KHVwKSwgJXJheAorCWxlYQktOCh1cCksIHVwCisJbW92CSVyYXgsIDgocnApCisJbGVhCS04KHJwKSwgcnAKKwlkZWMJbgorCitMKGFsaSk6CXN1YgkkMTYsIG4KKwlqYwlMKHNtYSkKKworSUZET1MoYAlhZGQJJC01NiwgJXJzcAknKQorSUZET1MoYAltb3ZkcWEJJXhtbTYsICglcnNwKQknKQorSUZET1MoYAltb3ZkcWEJJXhtbTcsIDE2KCVyc3ApCScpCisKKwlBTElHTigxNikKK0wodG9wKToJbW92ZHF1CSh1cCksICV4bW0wCisJbW92ZHF1CS0xNih1cCksICV4bW0xCisJbW92ZHF1CS0zMih1cCksICV4bW0yCisJbW92ZHF1CS00OCh1cCksICV4bW0zCisJbW92ZHF1CS02NCh1cCksICV4bW00CisJbW92ZHF1CS04MCh1cCksICV4bW01CisJbW92ZHF1CS05Nih1cCksICV4bW02CisJbW92ZHF1CS0xMTIodXApLCAleG1tNworCWxlYQktMTI4KHVwKSwgdXAKKwltb3ZkcWEJJXhtbTAsIChycCkKKwltb3ZkcWEJJXhtbTEsIC0xNihycCkKKwltb3ZkcWEJJXhtbTIsIC0zMihycCkKKwltb3ZkcWEJJXhtbTMsIC00OChycCkKKwltb3ZkcWEJJXhtbTQsIC02NChycCkKKwltb3ZkcWEJJXhtbTUsIC04MChycCkKKwltb3ZkcWEJJXhtbTYsIC05NihycCkKKwltb3ZkcWEJJXhtbTcsIC0xMTIocnApCisJbGVhCS0xMjgocnApLCBycAorCXN1YgkkMTYsIG4KKwlqbmMJTCh0b3ApCisKK0lGRE9TKGAJbW92ZHFhCSglcnNwKSwgJXhtbTYJJykKK0lGRE9TKGAJbW92ZHFhCTE2KCVyc3ApLCAleG1tNwknKQorSUZET1MoYAlhZGQJJDU2LCAlcnNwCScpCisKK0woc21hKToJdGVzdAkkOCwgUjgobikKKwlqegkxZgorCW1vdmRxdQkodXApLCAleG1tMAorCW1vdmRxdQktMTYodXApLCAleG1tMQorCW1vdmRxdQktMzIodXApLCAleG1tMgorCW1vdmRxdQktNDgodXApLCAleG1tMworCWxlYQktNjQodXApLCB1cAorCW1vdmRxYQkleG1tMCwgKHJwKQorCW1vdmRxYQkleG1tMSwgLTE2KHJwKQorCW1vdmRxYQkleG1tMiwgLTMyKHJwKQorCW1vdmRxYQkleG1tMywgLTQ4KHJwKQorCWxlYQktNjQocnApLCBycAorMToKKwl0ZXN0CSQ0LCBSOChuKQorCWp6CTFmCisJbW92ZHF1CSh1cCksICV4bW0wCisJbW92ZHF1CS0xNih1cCksICV4bW0xCisJbGVhCS0zMih1cCksIHVwCisJbW92ZHFhCSV4bW0wLCAocnApCisJbW92ZHFhCSV4bW0xLCAtMTYocnApCisJbGVhCS0zMihycCksIHJwCisxOgorCXRlc3QJJDIsIFI4KG4pCisJanoJMWYKKwltb3ZkcXUJKHVwKSwgJXhtbTAKKwlsZWEJLTE2KHVwKSwgdXAKKwltb3ZkcWEJJXhtbTAsIChycCkKKwlsZWEJLTE2KHJwKSwgcnAKKzE6CisJdGVzdAkkMSwgUjgobikKKwlqegkxZgorCW1vdgk4KHVwKSwgJXI4CisJbW92CSVyOCwgOChycCkKKzE6CitMKGRvbik6CUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9mYXN0c3NlL2NvcHlpLXBhbGlnbnIuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvZmFzdHNzZS9jb3B5aS1wYWxpZ25yLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODc2YTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvZmFzdHNzZS9jb3B5aS1wYWxpZ25yLmFzbQpAQCAtMCwwICsxLDMwMCBAQAorZG5sICBBTUQ2NCBtcG5fY29weWkgb3B0aW1pc2VkIGZvciBDUFVzIHdpdGggZmFzdCBTU0UgY29weWluZyBhbmQgU1NTRTMuCisKK2RubCAgQ29weXJpZ2h0IDIwMTIsIDIwMTMsIDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqw7ZybiBHcmFubHVuZC4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIgICAgIGN5Y2xlcy9saW1iICAgICBjeWNsZXMvbGltYiAgICAgIGdvb2QKK0MgICAgICAgICAgICAgIGFsaWduZWQJICAgICAgdW5hbGlnbmVkCSAgICAgIGJlc3Qgc2VlbgkgICAgIGZvciBjcHU/CitDIEFNRCBLOCxLOQkgMi4wCQkgaWxsb3AJCTEuMC8xLjAJCU4KK0MgQU1EIEsxMAkgMC44NQkJIGlsbG9wCQkJCVkvTgorQyBBTUQgYmQxCSAwLjcwCQkgMC42NgkJCQlZCitDIEFNRCBiZDIJIDAuNjgJCSAwLjY2CQkJCVkKK0MgQU1EIGJkMwkgPwkJID8KK0MgQU1EIGJkNAkgPwkJID8KK0MgQU1EIGJ0MQkgMS45NwkJIDguMTYJCTEuNS8xLjUJCU4KK0MgQU1EIGJ0MgkgMC43NwkJIDAuOTMJCTAuNjUvb3B0CU4vWQorQyBBTUQgem4xCSA/CQkgPworQyBBTUQgem4yCSA/CQkgPworQyBJbnRlbCBQNAkgMi4yNgkJIGlsbG9wCQkJCVkvTgorQyBJbnRlbCBDTlIJIDAuNTIJCSAwLjY0CQlvcHQvb3B0CQlZCitDIEludGVsIE5ITQkgMC41MgkJIDAuNzEJCTAuNTAvMC42NwlOCitDIEludGVsIFNCUgkgMC41MQkJIDAuNTQJCW9wdC8wLjUxCVkKK0MgSW50ZWwgSUJSCSAwLjUwCQkgMC41NAkJb3B0L29wdAkJWQorQyBJbnRlbCBIV0wJIDAuNTAJCSAwLjUxCQlvcHQvb3B0CQlZCitDIEludGVsIEJXTAkgMC41NQkJIDAuNTUJCW9wdC9vcHQJCVkKK0MgSW50ZWwgYXRvbQkgMS4xNgkJIDEuNjEJCW9wdC9vcHQJCVkKK0MgSW50ZWwgU0xNCSAxLjAyCQkgMS4wNwkJb3B0L29wdAkJWQorQyBWSUEgbmFubwkgMS4wOQkJIDEuMDgJCW9wdC9vcHQJCVkKKworQyBXZSB1c2Ugb25seSAxNi1ieXRlIG9wZXJhdGlvbnMsIGV4Y2VwdCBmb3IgdW5hbGlnbmVkIHRvcC1tb3N0IGFuZCBib3R0b20tbW9zdAorQyBsaW1icy4gIFdlIHVzZSB0aGUgU1NTRTMgcGFsaWduciBpbnN0cnVjdGlvbiB3aGVuIHJwIC0gdXAgPSA4IChtb2QgMTYpLiAgVGhhdAorQyBpbnN0cnVjdGlvbiBpcyBiZXR0ZXIgYWRhcHRlZCB0byBtcG5fY29weWQncyBuZWVkcywgd2UgbmVlZCB0byBjb250b3J0IHRoZQorQyBjb2RlIHRvIHVzZSBpdCBoZXJlLgorQworQyBGb3Igb3BlcmFuZHMgb2YgPCBDT1BZSV9TU0VfVEhSRVNIT0xEIGxpbWJzLCB3ZSB1c2UgYSBwbGFpbiA2NC1iaXQgbG9vcCwKK0MgdGFrZW4gZnJvbSB0aGUgeDg2XzY0IGRlZmF1bHQgY29kZS4KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywgYCVyZGknKQorZGVmaW5lKGB1cCcsIGAlcnNpJykKK2RlZmluZShgbicsICBgJXJkeCcpCisKK0MgVGhlcmUgYXJlIHRocmVlIGluc3RydWN0aW9ucyBmb3IgbG9hZGluZyBhbiBhbGlnbmVkIDEyOC1iaXQgcXVhbnRpdHkuICBXZSB1c2UKK0MgbW92YXBzLCBzaW5jZSBpdCBoYXMgdGhlIHNob3J0ZXN0IGNvZGluZy4KK2RubCBkZWZpbmUoYG1vdmRxYScsIGBgbW92YXBzJycpCisKK2lmZGVmKGBDT1BZSV9TU0VfVEhSRVNIT0xEJyxgJyxgZGVmaW5lKGBDT1BZSV9TU0VfVEhSRVNIT0xEJywgNyknKQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTig2NCkKK1BST0xPR1VFKG1wbl9jb3B5aSkKKwlGVU5DX0VOVFJZKDMpCisKKwljbXAJJENPUFlJX1NTRV9USFJFU0hPTEQsIG4KKwlqYmUJTChiYykKKworCXRlc3QJJDgsIFI4KHJwKQkJQyBpcyBycCAxNi1ieXRlIGFsaWduZWQ/CisJanoJTChycF9hbGlnbmVkKQkJQyBqdW1wIGlmIHJwIGFsaWduZWQKKworCW1vdnNxCQkJCUMgY29weSBvbmUgbGltYgorCWRlYwluCisKK0wocnBfYWxpZ25lZCk6CisJdGVzdAkkOCwgUjgodXApCisJam56CUwodWVudCkKKworaWZlbHNlKGV2YWwoQ09QWUlfU1NFX1RIUkVTSE9MRCA+PSA4KSwxLAorYAlzdWIJJDgsIG4nLAorYAlqbXAJTChhbSknKQorCisJQUxJR04oMTYpCitMKGF0b3ApOm1vdmRxYQkwKHVwKSwgJXhtbTAKKwltb3ZkcWEJMTYodXApLCAleG1tMQorCW1vdmRxYQkzMih1cCksICV4bW0yCisJbW92ZHFhCTQ4KHVwKSwgJXhtbTMKKwlsZWEJNjQodXApLCB1cAorCW1vdmRxYQkleG1tMCwgKHJwKQorCW1vdmRxYQkleG1tMSwgMTYocnApCisJbW92ZHFhCSV4bW0yLCAzMihycCkKKwltb3ZkcWEJJXhtbTMsIDQ4KHJwKQorCWxlYQk2NChycCksIHJwCitMKGFtKToJc3ViCSQ4LCBuCisJam5jCUwoYXRvcCkKKworCXRlc3QJJDQsIFI4KG4pCisJanoJMWYKKwltb3ZkcWEJKHVwKSwgJXhtbTAKKwltb3ZkcWEJMTYodXApLCAleG1tMQorCWxlYQkzMih1cCksIHVwCisJbW92ZHFhCSV4bW0wLCAocnApCisJbW92ZHFhCSV4bW0xLCAxNihycCkKKwlsZWEJMzIocnApLCBycAorCisxOgl0ZXN0CSQyLCBSOChuKQorCWp6CTFmCisJbW92ZHFhCSh1cCksICV4bW0wCisJbGVhCTE2KHVwKSwgdXAKKwltb3ZkcWEJJXhtbTAsIChycCkKKwlsZWEJMTYocnApLCBycAorCisxOgl0ZXN0CSQxLCBSOChuKQorCWp6CTFmCisJbW92CSh1cCksICVyOAorCW1vdgklcjgsIChycCkKKworMToJRlVOQ19FWElUKCkKKwlyZXQKKworTCh1ZW50KToKK0MgQ29kZSBoYW5kbGluZyB1cCAtIHJwID0gOCAobW9kIDE2KQorCisJY21wCSQxNiwgbgorCWpjCUwodWVkMCkKKworSUZET1MoYAlhZGQJJC01NiwgJXJzcAknKQorSUZET1MoYAltb3ZkcWEJJXhtbTYsICglcnNwKQknKQorSUZET1MoYAltb3ZkcWEJJXhtbTcsIDE2KCVyc3ApCScpCitJRkRPUyhgCW1vdmRxYQkleG1tOCwgMzIoJXJzcCkJJykKKworCW1vdmFwcwkxMjAodXApLCAleG1tNworCW1vdmFwcwkxMDQodXApLCAleG1tNgorCW1vdmFwcwk4OCh1cCksICV4bW01CisJbW92YXBzCTcyKHVwKSwgJXhtbTQKKwltb3ZhcHMJNTYodXApLCAleG1tMworCW1vdmFwcwk0MCh1cCksICV4bW0yCisJbGVhCTEyOCh1cCksIHVwCisJc3ViCSQzMiwgbgorCWpjCUwodWVkMSkKKworCUFMSUdOKDE2KQorTCh1dG9wKTptb3ZhcHMJLTEwNCh1cCksICV4bW0xCisJc3ViCSQxNiwgbgorCW1vdmFwcwktMTIwKHVwKSwgJXhtbTAKKwlwYWxpZ25yKCQ4LCAleG1tNiwgJXhtbTcpCisJbW92YXBzCS0xMzYodXApLCAleG1tOAorCW1vdmRxYQkleG1tNywgMTEyKHJwKQorCXBhbGlnbnIoJDgsICV4bW01LCAleG1tNikKKwltb3ZhcHMJMTIwKHVwKSwgJXhtbTcKKwltb3ZkcWEJJXhtbTYsIDk2KHJwKQorCXBhbGlnbnIoJDgsICV4bW00LCAleG1tNSkKKwltb3ZhcHMJMTA0KHVwKSwgJXhtbTYKKwltb3ZkcWEJJXhtbTUsIDgwKHJwKQorCXBhbGlnbnIoJDgsICV4bW0zLCAleG1tNCkKKwltb3ZhcHMJODgodXApLCAleG1tNQorCW1vdmRxYQkleG1tNCwgNjQocnApCisJcGFsaWducigkOCwgJXhtbTIsICV4bW0zKQorCW1vdmFwcwk3Mih1cCksICV4bW00CisJbW92ZHFhCSV4bW0zLCA0OChycCkKKwlwYWxpZ25yKCQ4LCAleG1tMSwgJXhtbTIpCisJbW92YXBzCTU2KHVwKSwgJXhtbTMKKwltb3ZkcWEJJXhtbTIsIDMyKHJwKQorCXBhbGlnbnIoJDgsICV4bW0wLCAleG1tMSkKKwltb3ZhcHMJNDAodXApLCAleG1tMgorCW1vdmRxYQkleG1tMSwgMTYocnApCisJcGFsaWducigkOCwgJXhtbTgsICV4bW0wKQorCWxlYQkxMjgodXApLCB1cAorCW1vdmRxYQkleG1tMCwgKHJwKQorCWxlYQkxMjgocnApLCBycAorCWpuYwlMKHV0b3ApCisKK0wodWVkMSk6bW92YXBzCS0xMDQodXApLCAleG1tMQorCW1vdmFwcwktMTIwKHVwKSwgJXhtbTAKKwltb3ZhcHMJLTEzNih1cCksICV4bW04CisJcGFsaWducigkOCwgJXhtbTYsICV4bW03KQorCW1vdmRxYQkleG1tNywgMTEyKHJwKQorCXBhbGlnbnIoJDgsICV4bW01LCAleG1tNikKKwltb3ZkcWEJJXhtbTYsIDk2KHJwKQorCXBhbGlnbnIoJDgsICV4bW00LCAleG1tNSkKKwltb3ZkcWEJJXhtbTUsIDgwKHJwKQorCXBhbGlnbnIoJDgsICV4bW0zLCAleG1tNCkKKwltb3ZkcWEJJXhtbTQsIDY0KHJwKQorCXBhbGlnbnIoJDgsICV4bW0yLCAleG1tMykKKwltb3ZkcWEJJXhtbTMsIDQ4KHJwKQorCXBhbGlnbnIoJDgsICV4bW0xLCAleG1tMikKKwltb3ZkcWEJJXhtbTIsIDMyKHJwKQorCXBhbGlnbnIoJDgsICV4bW0wLCAleG1tMSkKKwltb3ZkcWEJJXhtbTEsIDE2KHJwKQorCXBhbGlnbnIoJDgsICV4bW04LCAleG1tMCkKKwltb3ZkcWEJJXhtbTAsIChycCkKKwlsZWEJMTI4KHJwKSwgcnAKKworSUZET1MoYAltb3ZkcWEJKCVyc3ApLCAleG1tNgknKQorSUZET1MoYAltb3ZkcWEJMTYoJXJzcCksICV4bW03CScpCitJRkRPUyhgCW1vdmRxYQkzMiglcnNwKSwgJXhtbTgJJykKK0lGRE9TKGAJYWRkCSQ1NiwgJXJzcAknKQorCitMKHVlZDApOnRlc3QJJDgsIFI4KG4pCisJanoJMWYKKwltb3ZhcHMJNTYodXApLCAleG1tMworCW1vdmFwcwk0MCh1cCksICV4bW0yCisJbW92YXBzCTI0KHVwKSwgJXhtbTEKKwltb3ZhcHMJOCh1cCksICV4bW0wCisJbW92YXBzCS04KHVwKSwgJXhtbTQKKwlwYWxpZ25yKCQ4LCAleG1tMiwgJXhtbTMpCisJbW92ZHFhCSV4bW0zLCA0OChycCkKKwlwYWxpZ25yKCQ4LCAleG1tMSwgJXhtbTIpCisJbW92ZHFhCSV4bW0yLCAzMihycCkKKwlwYWxpZ25yKCQ4LCAleG1tMCwgJXhtbTEpCisJbW92ZHFhCSV4bW0xLCAxNihycCkKKwlwYWxpZ25yKCQ4LCAleG1tNCwgJXhtbTApCisJbGVhCTY0KHVwKSwgdXAKKwltb3ZkcWEJJXhtbTAsIChycCkKKwlsZWEJNjQocnApLCBycAorCisxOgl0ZXN0CSQ0LCBSOChuKQorCWp6CTFmCisJbW92YXBzCTI0KHVwKSwgJXhtbTEKKwltb3ZhcHMJOCh1cCksICV4bW0wCisJcGFsaWducigkOCwgJXhtbTAsICV4bW0xKQorCW1vdmFwcwktOCh1cCksICV4bW0zCisJbW92ZHFhCSV4bW0xLCAxNihycCkKKwlwYWxpZ25yKCQ4LCAleG1tMywgJXhtbTApCisJbGVhCTMyKHVwKSwgdXAKKwltb3ZkcWEJJXhtbTAsIChycCkKKwlsZWEJMzIocnApLCBycAorCisxOgl0ZXN0CSQyLCBSOChuKQorCWp6CTFmCisJbW92ZHFhCTgodXApLCAleG1tMAorCW1vdmRxYQktOCh1cCksICV4bW0zCisJcGFsaWducigkOCwgJXhtbTMsICV4bW0wKQorCWxlYQkxNih1cCksIHVwCisJbW92ZHFhCSV4bW0wLCAocnApCisJbGVhCTE2KHJwKSwgcnAKKworMToJdGVzdAkkMSwgUjgobikKKwlqegkxZgorCW1vdgkodXApLCAlcjgKKwltb3YJJXI4LCAocnApCisKKzE6CUZVTkNfRVhJVCgpCisJcmV0CisKK0MgQmFzZWNhc2UgY29kZS4gIE5lZWRlZCBmb3IgZ29vZCBzbWFsbCBvcGVyYW5kcyBzcGVlZCwgbm90IGZvcgorQyBjb3JyZWN0bmVzcyBhcyB0aGUgYWJvdmUgY29kZSBpcyBjdXJyZW50bHkgd3JpdHRlbi4KKworTChiYyk6CWxlYQktOChycCksIHJwCisJc3ViCSQ0LCBSMzIobikKKwlqYwlMKGVuZCkKKworCUFMSUdOKDE2KQorTCh0b3ApOgltb3YJKHVwKSwgJXI4CisJbW92CTgodXApLCAlcjkKKwlsZWEJMzIocnApLCBycAorCW1vdgkxNih1cCksICVyMTAKKwltb3YJMjQodXApLCAlcjExCisJbGVhCTMyKHVwKSwgdXAKKwltb3YJJXI4LCAtMjQocnApCisJbW92CSVyOSwgLTE2KHJwKQoraWZlbHNlKGV2YWwoQ09QWUlfU1NFX1RIUkVTSE9MRCA+PSA4KSwxLAorYAlzdWIJJDQsIFIzMihuKScpCisJbW92CSVyMTAsIC04KHJwKQorCW1vdgklcjExLCAocnApCitpZmVsc2UoZXZhbChDT1BZSV9TU0VfVEhSRVNIT0xEID49IDgpLDEsCitgCWpuYwlMKHRvcCknKQorCitMKGVuZCk6CXRlc3QJJDEsIFI4KG4pCisJanoJMWYKKwltb3YJKHVwKSwgJXI4CisJbW92CSVyOCwgOChycCkKKwlsZWEJOChycCksIHJwCisJbGVhCTgodXApLCB1cAorMToJdGVzdAkkMiwgUjgobikKKwlqegkxZgorCW1vdgkodXApLCAlcjgKKwltb3YJOCh1cCksICVyOQorCW1vdgklcjgsIDgocnApCisJbW92CSVyOSwgMTYocnApCisxOglGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvZmFzdHNzZS9jb3B5aS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9mYXN0c3NlL2NvcHlpLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2Y3ODY1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvZmFzdHNzZS9jb3B5aS5hc20KQEAgLTAsMCArMSwxODUgQEAKK2RubCAgQU1ENjQgbXBuX2NvcHlpIG9wdGltaXNlZCBmb3IgQ1BVcyB3aXRoIGZhc3QgU1NFLgorCitkbmwgIENvcHlyaWdodCAyMDAzLCAyMDA1LCAyMDA3LCAyMDExLCAyMDEyLCAyMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK2RubCAgSW5jLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iICAgICBjeWNsZXMvbGltYiAgICAgY3ljbGVzL2xpbWIgICAgICBnb29kCitDICAgICAgICAgICAgICBhbGlnbmVkCSAgICAgIHVuYWxpZ25lZAkgICAgICBiZXN0IHNlZW4JICAgICBmb3IgY3B1PworQyBBTUQgSzgsSzkKK0MgQU1EIEsxMAkgMC44NQkJIDEuNjQJCQkJWS9OCitDIEFNRCBidWxsCSAxLjQJCSAxLjQJCQkJTgorQyBBTUQgcGlsZQkgMC43NwkJIDAuOTMJCQkJTgorQyBBTUQgc3RlYW0JID8JCSA/CitDIEFNRCBleGNhdmF0b3IJID8JCSA/CitDIEFNRCBib2JjYXQKK0MgQU1EIGphZ3VhcgkgMC42NQkJIDEuMDIJCW9wdC8wLjkzCVkvTgorQyBJbnRlbCBQNAkgMi4zCQkgMi4zCQkJCVkKK0MgSW50ZWwgY29yZQkgMS4wCQkgMS4wCQkwLjUyLzAuNjQJTgorQyBJbnRlbCBOSE0JIDAuNQkJIDAuNjcJCQkJWQorQyBJbnRlbCBTQlIJIDAuNTEJCSAwLjc1CQlvcHQvMC41NAlZL04KK0MgSW50ZWwgSUJSCSAwLjUwCQkgMC41NwkJb3B0LzAuNTQJWQorQyBJbnRlbCBIV0wJIDAuNTAJCSAwLjU3CQlvcHQvMC41MQlZCitDIEludGVsIEJXTAkgMC41NQkJIDAuNjIJCW9wdC8wLjU1CVkKK0MgSW50ZWwgYXRvbQorQyBJbnRlbCBTTE0JIDEuMDIJCSAxLjI3CQlvcHQvMS4wNwlZL04KK0MgVklBIG5hbm8JIDEuMTYJCSA1LjE2CQkJCVkvTgorCitDIFdlIHRyeSB0byBkbyBhcyBtYW55IDE2LWJ5dGUgb3BlcmF0aW9ucyBhcyBwb3NzaWJsZS4gIFRoZSB0b3AtbW9zdCBhbmQKK0MgYm90dG9tLW1vc3Qgd3JpdGVzIG1pZ2h0IG5lZWQgOC1ieXRlIG9wZXJhdGlvbnMuICBXZSBjYW4gYWx3YXlzIHdyaXRlIHVzaW5nCitDIGFsaWduZWQgMTYtYnl0ZSBvcGVyYXRpb25zLCB3ZSByZWFkIHdpdGggYm90aCBhbGlnbmVkIGFuZCB1bmFsaWduZWQgMTYtYnl0ZQorQyBvcGVyYXRpb25zLgorCitDIEluc3RlYWQgb2YgaGF2aW5nIHNlcGFyYXRlIGxvb3BzIGZvciByZWFkaW5nIGFsaWduZWQgYW5kIHVuYWxpZ25lZCwgd2UgcmVhZAorQyB1c2luZyBNT1ZEUVUuICBUaGlzIHNlZW1zIHRvIHdvcmsgZ3JlYXQgZXhjZXB0IGZvciBjb3JlMjsgdGhlcmUgcGVyZm9ybWFuY2UKK0MgZG91YmxlcyB3aGVuIHJlYWRpbmcgdXNpbmcgTU9WRFFBIChmb3IgYWxpZ25lZCBzb3VyY2UpLiAgSXQgaXMgdW5jbGVhciBob3cgdG8KK0MgYmVzdCBoYW5kbGUgdGhlIHVuYWxpZ25lZCBjYXNlIHRoZXJlLgorCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLCBgJXJkaScpCitkZWZpbmUoYHVwJywgYCVyc2knKQorZGVmaW5lKGBuJywgIGAlcmR4JykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworZG5sIGRlZmluZShgbW92ZHF1JywgbGRkcXUpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDY0KQorUFJPTE9HVUUobXBuX2NvcHlpKQorCUZVTkNfRU5UUlkoMykKKworCWNtcAkkMywgbgkJCUMgTkI6IGJjIGNvZGUgYmVsb3cgYXNzdW1lcyB0aGlzIGxpbWl0CisJamMJTChiYykKKworCXRlc3QJJDgsIFI4KHJwKQkJQyBpcyBycCAxNi1ieXRlIGFsaWduZWQ/CisJanoJTChhbGkpCQkJQyBqdW1wIGlmIHJwIGFsaWduZWQKKwltb3ZzcQkJCQlDIGNvcHkgc2luZ2xlIGxpbWIKKwlkZWMJbgorCitMKGFsaSk6CXN1YgkkMTYsIG4KKwlqYwlMKHNtYSkKKworSUZET1MoYAlhZGQJJC01NiwgJXJzcAknKQorSUZET1MoYAltb3ZkcWEJJXhtbTYsICglcnNwKQknKQorSUZET1MoYAltb3ZkcWEJJXhtbTcsIDE2KCVyc3ApCScpCisKKwlBTElHTigxNikKK0wodG9wKToJbW92ZHF1CSh1cCksICV4bW0wCisJbW92ZHF1CTE2KHVwKSwgJXhtbTEKKwltb3ZkcXUJMzIodXApLCAleG1tMgorCW1vdmRxdQk0OCh1cCksICV4bW0zCisJbW92ZHF1CTY0KHVwKSwgJXhtbTQKKwltb3ZkcXUJODAodXApLCAleG1tNQorCW1vdmRxdQk5Nih1cCksICV4bW02CisJbW92ZHF1CTExMih1cCksICV4bW03CisJbGVhCTEyOCh1cCksIHVwCisJbW92ZHFhCSV4bW0wLCAocnApCisJbW92ZHFhCSV4bW0xLCAxNihycCkKKwltb3ZkcWEJJXhtbTIsIDMyKHJwKQorCW1vdmRxYQkleG1tMywgNDgocnApCisJbW92ZHFhCSV4bW00LCA2NChycCkKKwltb3ZkcWEJJXhtbTUsIDgwKHJwKQorCW1vdmRxYQkleG1tNiwgOTYocnApCisJbW92ZHFhCSV4bW03LCAxMTIocnApCisJbGVhCTEyOChycCksIHJwCisJc3ViCSQxNiwgbgorCWpuYwlMKHRvcCkKKworSUZET1MoYAltb3ZkcWEJKCVyc3ApLCAleG1tNgknKQorSUZET1MoYAltb3ZkcWEJMTYoJXJzcCksICV4bW03CScpCitJRkRPUyhgCWFkZAkkNTYsICVyc3AJJykKKworTChzbWEpOgl0ZXN0CSQ4LCBSOChuKQorCWp6CTFmCisJbW92ZHF1CSh1cCksICV4bW0wCisJbW92ZHF1CTE2KHVwKSwgJXhtbTEKKwltb3ZkcXUJMzIodXApLCAleG1tMgorCW1vdmRxdQk0OCh1cCksICV4bW0zCisJbGVhCTY0KHVwKSwgdXAKKwltb3ZkcWEJJXhtbTAsIChycCkKKwltb3ZkcWEJJXhtbTEsIDE2KHJwKQorCW1vdmRxYQkleG1tMiwgMzIocnApCisJbW92ZHFhCSV4bW0zLCA0OChycCkKKwlsZWEJNjQocnApLCBycAorMToKKwl0ZXN0CSQ0LCBSOChuKQorCWp6CTFmCisJbW92ZHF1CSh1cCksICV4bW0wCisJbW92ZHF1CTE2KHVwKSwgJXhtbTEKKwlsZWEJMzIodXApLCB1cAorCW1vdmRxYQkleG1tMCwgKHJwKQorCW1vdmRxYQkleG1tMSwgMTYocnApCisJbGVhCTMyKHJwKSwgcnAKKzE6CisJdGVzdAkkMiwgUjgobikKKwlqegkxZgorCW1vdmRxdQkodXApLCAleG1tMAorCWxlYQkxNih1cCksIHVwCisJbW92ZHFhCSV4bW0wLCAocnApCisJbGVhCTE2KHJwKSwgcnAKKwlBTElHTigxNikKKzE6CitMKGVuZCk6CXRlc3QJJDEsIFI4KG4pCisJanoJMWYKKwltb3YJKHVwKSwgJXI4CisJbW92CSVyOCwgKHJwKQorMToKKwlGVU5DX0VYSVQoKQorCXJldAorCitDIEJhc2VjYXNlIGNvZGUuICBOZWVkZWQgZm9yIGdvb2Qgc21hbGwgb3BlcmFuZHMgc3BlZWQsIG5vdCBmb3IgY29ycmVjdG5lc3MgYXMKK0MgdGhlIGFib3ZlIGNvZGUgaXMgY3VycmVudGx5IHdyaXR0ZW4uICBUaGUgY29tbWVudGVkLW91dCBsaW5lcyBuZWVkIHRvIGJlCitDIHJlaW5zdGF0ZWQgaWYgdGhpcyBjb2RlIGlzIHRvIGJlIHVzZWQgZm9yIG4gPiAzLCBhbmQgdGhlbiB0aGUgcG9zdCBsb29wCitDIG9mZnNldHMgbmVlZCBmaXhpbmcuCisKK0woYmMpOglzdWIJJDIsIG4KKwlqYwlMKGVuZCkKKwlBTElHTigxNikKKzE6CW1vdgkodXApLCAlcmF4CisJbW92CTgodXApLCAlcmN4CitkbmwJbGVhCTE2KHVwKSwgdXAKKwltb3YJJXJheCwgKHJwKQorCW1vdgklcmN4LCA4KHJwKQorZG5sCWxlYQkxNihycCksIHJwCitkbmwJc3ViCSQyLCBuCitkbmwJam5jCTFiCisKKwl0ZXN0CSQxLCBSOChuKQorCWp6CUwocmV0KQorCW1vdgkxNih1cCksICVyYXgKKwltb3YJJXJheCwgMTYocnApCitMKHJldCk6CUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9mYXN0c3NlL2xzaGlmdC1tb3ZkcXUyLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2Zhc3Rzc2UvbHNoaWZ0LW1vdmRxdTIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNWU4NTAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9mYXN0c3NlL2xzaGlmdC1tb3ZkcXUyLmFzbQpAQCAtMCwwICsxLDE4MiBAQAorZG5sICBBTUQ2NCBtcG5fbHNoaWZ0IG9wdGltaXNlZCBmb3IgQ1BVcyB3aXRoIGZhc3QgU1NFIGluY2x1ZGluZyBmYXN0IG1vdmRxdS4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTAtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MJICAgICBjeWNsZXMvbGltYiAgICAgY3ljbGVzL2xpbWIgICAgIGN5Y2xlcy9saW1iICAgIGdvb2QKK0MgICAgICAgICAgICAgIGFsaWduZWQJICAgICAgdW5hbGlnbmVkCSAgICAgIGJlc3Qgc2VlbgkgICBmb3IgY3B1PworQyBBTUQgSzgsSzkJIDMJCSAzCQkgMi4zNQkgIG5vLCB1c2Ugc2hsL3NocgorQyBBTUQgSzEwCSAxLjUtMS44CSAxLjUtMS44CSAxLjMzCSAgeWVzCitDIEFNRCBiZDEJIDEuNy0xLjkJIDEuNy0xLjkJIDEuMzMJICB5ZXMKK0MgQU1EIGJvYmNhdAkgMy4xNwkJIDMuMTcJCQkgIHllcywgYmFkIGZvciBuIDwgMjAKK0MgSW50ZWwgUDQJIDQuNjcJCSA0LjY3CQkgMi43CSAgbm8sIHNsb3cgbW92ZHF1CitDIEludGVsIGNvcmUyCSAyLjE1CQkgMi4xNQkJIDEuMjUJICBubywgdXNlIHNobGQvc2hyZAorQyBJbnRlbCBOSE0JIDEuNjYJCSAxLjY2CQkgMS4yNQkgIG5vLCB1c2Ugc2hsZC9zaHJkCitDIEludGVsIFNCUgkgMS4zCQkgMS4zCQkgMS4yNQkgIHllcywgYmFkIGZvciBuID0gNC02CitDIEludGVsIGF0b20JMTEuNwkJMTEuNwkJIDQuNQkgIG5vCitDIFZJQSBuYW5vCSA1LjcJCSA1Ljk1CQkgMi4wCSAgbm8sIHNsb3cgbW92ZHF1CisKK0MgV2UgdHJ5IHRvIGRvIGFzIG1hbnkgYWxpZ25lZCAxNi1ieXRlIG9wZXJhdGlvbnMgYXMgcG9zc2libGUuICBUaGUgdG9wLW1vc3QKK0MgYW5kIGJvdHRvbS1tb3N0IHdyaXRlcyBtaWdodCBuZWVkIDgtYnl0ZSBvcGVyYXRpb25zLgorQworQyBUaGlzIHZhcmlhbnQgcmVseSBvbiBmYXN0IGxvYWQgbW92ZHF1LCBhbmQgdXNlcyBpdCBldmVuIGZvciBhbGlnbmVkIG9wZXJhbmRzLAorQyBpbiBvcmRlciB0byBhdm9pZCB0aGUgbmVlZCBmb3IgdHdvIHNlcGFyYXRlIGxvb3BzLgorQworQyBUT0RPCitDICAqIENvdWxkIDItbGltYiB3aW5kLWRvd24gY29kZSBiZSBzaW1wbGlmaWVkPworQyAgKiBJbXByb3ZlIGJhc2VjYXNlIGNvZGUsIHVzaW5nIHNobGQvc2hyZCBmb3IgU0JSLCBkaXNjcmV0ZSBpbnRlZ2VyIHNoaWZ0cworQyAgICBmb3Igb3RoZXIgYWZmZWN0ZWQgQ1BVcy4KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywgIGAlcmRpJykKK2RlZmluZShgYXAnLCAgYCVyc2knKQorZGVmaW5lKGBuJywgICBgJXJkeCcpCitkZWZpbmUoYGNudCcsIGAlcmN4JykKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oNjQpCitQUk9MT0dVRShtcG5fbHNoaWZ0KQorCUZVTkNfRU5UUlkoNCkKKwltb3ZkCVIzMiglcmN4KSwgJXhtbTQKKwltb3YJJDY0LCBSMzIoJXJheCkKKwlzdWIJUjMyKCVyY3gpLCBSMzIoJXJheCkKKwltb3ZkCVIzMiglcmF4KSwgJXhtbTUKKworCW5lZwlSMzIoJXJjeCkKKwltb3YJLTgoYXAsbiw4KSwgJXJheAorCXNocglSOCglcmN4KSwgJXJheAorCisJY21wCSQzLCBuCisJamxlCUwoYmMpCisKKwlsZWEJKHJwLG4sOCksIFIzMiglcmN4KQorCXRlc3QJJDgsIFI4KCVyY3gpCisJanoJTChycF9hbGlnbmVkKQorCitDIERvIG9uZSBpbml0aWFsIGxpbWIgaW4gb3JkZXIgdG8gbWFrZSBycCBhbGlnbmVkCisJbW92cQktOChhcCxuLDgpLCAleG1tMAorCW1vdnEJLTE2KGFwLG4sOCksICV4bW0xCisJcHNsbHEJJXhtbTQsICV4bW0wCisJcHNybHEJJXhtbTUsICV4bW0xCisJcG9yCSV4bW0xLCAleG1tMAorCW1vdnEJJXhtbTAsIC04KHJwLG4sOCkKKwlkZWMJbgorCitMKHJwX2FsaWduZWQpOgorCWxlYQkxKG4pLCAlcjhkCisKKwlhbmQJJDYsIFIzMiglcjgpCisJanoJTChiYTApCisJY21wCSQ0LCBSMzIoJXI4KQorCWp6CUwoYmE0KQorCWpjCUwoYmEyKQorTChiYTYpOglhZGQJJC00LCBuCisJam1wCUwoaTU2KQorTChiYTApOglhZGQJJC02LCBuCisJam1wCUwoaTcwKQorTChiYTQpOglhZGQJJC0yLCBuCisJam1wCUwoaTM0KQorTChiYTIpOglhZGQJJC04LCBuCisJamxlCUwoZW5kKQorCisJQUxJR04oMTYpCitMKHRvcCk6CW1vdmRxdQk0MChhcCxuLDgpLCAleG1tMQorCW1vdmRxdQk0OChhcCxuLDgpLCAleG1tMAorCXBzbGxxCSV4bW00LCAleG1tMAorCXBzcmxxCSV4bW01LCAleG1tMQorCXBvcgkleG1tMSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIDQ4KHJwLG4sOCkKK0woaTcwKToKKwltb3ZkcXUJMjQoYXAsbiw4KSwgJXhtbTEKKwltb3ZkcXUJMzIoYXAsbiw4KSwgJXhtbTAKKwlwc2xscQkleG1tNCwgJXhtbTAKKwlwc3JscQkleG1tNSwgJXhtbTEKKwlwb3IJJXhtbTEsICV4bW0wCisJbW92ZHFhCSV4bW0wLCAzMihycCxuLDgpCitMKGk1Nik6CisJbW92ZHF1CTgoYXAsbiw4KSwgJXhtbTEKKwltb3ZkcXUJMTYoYXAsbiw4KSwgJXhtbTAKKwlwc2xscQkleG1tNCwgJXhtbTAKKwlwc3JscQkleG1tNSwgJXhtbTEKKwlwb3IJJXhtbTEsICV4bW0wCisJbW92ZHFhCSV4bW0wLCAxNihycCxuLDgpCitMKGkzNCk6CisJbW92ZHF1CS04KGFwLG4sOCksICV4bW0xCisJbW92ZHF1CShhcCxuLDgpLCAleG1tMAorCXBzbGxxCSV4bW00LCAleG1tMAorCXBzcmxxCSV4bW01LCAleG1tMQorCXBvcgkleG1tMSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIChycCxuLDgpCisJc3ViCSQ4LCBuCisJamcJTCh0b3ApCisKK0woZW5kKToJdGVzdAkkMSwgUjgobikKKwlqbnoJTChlbmQ4KQorCisJbW92ZHF1CShhcCksICV4bW0xCisJcHhvcgkleG1tMCwgJXhtbTAKKwlwdW5wY2tscWRxICAleG1tMSwgJXhtbTAKKwlwc2xscQkleG1tNCwgJXhtbTEKKwlwc3JscQkleG1tNSwgJXhtbTAKKwlwb3IJJXhtbTEsICV4bW0wCisJbW92ZHFhCSV4bW0wLCAocnApCisJRlVOQ19FWElUKCkKKwlyZXQKKworQyBCYXNlY2FzZQorCUFMSUdOKDE2KQorTChiYyk6CWRlYwlSMzIobikKKwlqeglMKGVuZDgpCisKKwltb3ZxCShhcCxuLDgpLCAleG1tMQorCW1vdnEJLTgoYXAsbiw4KSwgJXhtbTAKKwlwc2xscQkleG1tNCwgJXhtbTEKKwlwc3JscQkleG1tNSwgJXhtbTAKKwlwb3IJJXhtbTEsICV4bW0wCisJbW92cQkleG1tMCwgKHJwLG4sOCkKKwlzdWIJJDIsIFIzMihuKQorCWpsCUwoZW5kOCkKKwltb3ZxCTgoYXApLCAleG1tMQorCW1vdnEJKGFwKSwgJXhtbTAKKwlwc2xscQkleG1tNCwgJXhtbTEKKwlwc3JscQkleG1tNSwgJXhtbTAKKwlwb3IJJXhtbTEsICV4bW0wCisJbW92cQkleG1tMCwgOChycCkKKworTChlbmQ4KTptb3ZxCShhcCksICV4bW0wCisJcHNsbHEJJXhtbTQsICV4bW0wCisJbW92cQkleG1tMCwgKHJwKQorCUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9mYXN0c3NlL2xzaGlmdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9mYXN0c3NlL2xzaGlmdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmExN2I5MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2Zhc3Rzc2UvbHNoaWZ0LmFzbQpAQCAtMCwwICsxLDE3MyBAQAorZG5sICBBTUQ2NCBtcG5fbHNoaWZ0IG9wdGltaXNlZCBmb3IgQ1BVcyB3aXRoIGZhc3QgU1NFLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBEYXZpZCBIYXJ2ZXkgYW5kIFRvcmJqb3JuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDEwLTIwMTIsIDIwMTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDCSAgICAgY3ljbGVzL2xpbWIJICAgICBjeWNsZXMvbGltYgkgICAgICBnb29kCitDICAgICAgICAgIDE2LWJ5dGUgYWxpZ25lZCAgICAgICAgIDE2LWJ5dGUgdW5hbGlnbmVkCSAgICBmb3IgY3B1PworQyBBTUQgSzgsSzkJID8JCQkgPworQyBBTUQgSzEwCSAxLjY4ICAoMS40NSkJCSAxLjc1ICAoMS40OSkJCVkKK0MgQU1EIGJkMQkgMS44MiAgKDEuNzUpCQkgMS44MiAgKDEuNzUpCQlZCitDIEFNRCBib2JjYXQJIDQJCQkgNAorQyBJbnRlbCBQNAkgMyAgICAgKDIuNykJCSAzICAgICAoMi43KQkJWQorQyBJbnRlbCBjb3JlMgkgMi4wNSAgKDEuNjcpCQkgMi41NSAgKDEuNzUpCitDIEludGVsIE5ITQkgMi4wNSAgKDEuNzUpCQkgMi4wOSAgKDIpCitDIEludGVsIFNCUgkgMS41ICAgKDEuMzEyNSkJCSAxLjUgICAoMS40Mzc1KQkJWQorQyBJbnRlbCBhdG9tCSA/CQkJID8KK0MgVklBIG5hbm8JIDIuMjUgICgyKQkJIDIuNSAgICgyKQkJWQorCitDIFdlIHRyeSB0byBkbyBhcyBtYW55IDE2LWJ5dGUgb3BlcmF0aW9ucyBhcyBwb3NzaWJsZS4gIFRoZSB0b3AtbW9zdCBhbmQKK0MgYm90dG9tLW1vc3Qgd3JpdGVzIG1pZ2h0IG5lZWQgOC1ieXRlIG9wZXJhdGlvbnMuCisKK0MgVGhlcmUgYXJlIHR3byBpbm5lci1sb29wcywgb25lIGZvciB3aGVuIHJwID0gYXAgKG1vZCAxNikgYW5kIG9uZSB3aGVuIHRoaXMgaXMKK0Mgbm90IHRydWUuICBUaGUgYWxpZ25lZCBjYXNlIHJlYWRzIDE2KzggYnl0ZXMsIHRoZSB1bmFsaWduZWQgY2FzZSByZWFkcworQyAxNis4K1ggYnl0ZXMsIHdoZXJlIFggaXMgOCBvciAxNiBkZXBlbmRpbmcgb24gaG93IHB1bnBja2xxZHEgaXMgaW1wbGVtZW50ZWQuCisKK0MgVGhpcyBpcyBub3QgeWV0IGdyZWF0IGNvZGU6CitDICAgKDEpIFRoZSB1bmFsaWduZWQgY2FzZSBtYWtlcyBtYW55IHJlYWRzLgorQyAgICgyKSBXZSBzaG91bGQgZG8gc29tZSB1bnJvbGxpbmcsIGF0IGxlYXN0IDItd2F5LgorQyBXaXRoIDItd2F5IHVucm9sbGluZyBidXQgbm8gc2NoZWR1bGluZyB3ZSByZWFjaCAxLjUgYy9sIG9uIEsxMCBhbmQgMiBjL2wgb24KK0MgTmFuby4KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywgIGAlcmRpJykKK2RlZmluZShgYXAnLCAgYCVyc2knKQorZGVmaW5lKGBuJywgICBgJXJkeCcpCitkZWZpbmUoYGNudCcsIGAlcmN4JykKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oNjQpCitQUk9MT0dVRShtcG5fbHNoaWZ0KQorCUZVTkNfRU5UUlkoNCkKKwltb3ZkCVIzMiglcmN4KSwgJXhtbTQKKwltb3YJJDY0LCBSMzIoJXJheCkKKwlzdWIJUjMyKCVyY3gpLCBSMzIoJXJheCkKKwltb3ZkCVIzMiglcmF4KSwgJXhtbTUKKworCW5lZwlSMzIoJXJjeCkKKwltb3YJLTgoYXAsbiw4KSwgJXJheAorCXNocglSOCglcmN4KSwgJXJheAorCisJY21wCSQyLCBuCisJamxlCUwobGUyKQorCisJbGVhCShycCxuLDgpLCBSMzIoJXJjeCkKKwl0ZXN0CSQ4LCBSOCglcmN4KQorCWplCUwocnBfYWxpZ25lZCkKKworQyBEbyBvbmUgaW5pdGlhbCBsaW1iIGluIG9yZGVyIHRvIG1ha2UgcnAgYWxpZ25lZAorCW1vdnEJLTgoYXAsbiw4KSwgJXhtbTAKKwltb3ZxCS0xNihhcCxuLDgpLCAleG1tMQorCXBzbGxxCSV4bW00LCAleG1tMAorCXBzcmxxCSV4bW01LCAleG1tMQorCXBvcgkleG1tMSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtOChycCxuLDgpCisJZGVjCW4KKworTChycF9hbGlnbmVkKToKKwlsZWEJKGFwLG4sOCksIFIzMiglcmN4KQorCXRlc3QJJDgsIFI4KCVyY3gpCisJamUJTChhZW50KQorCWptcAlMKHVlbnQpCitDICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK0MgSGFuZGxlIHRoZSBjYXNlIHdoZW4gYXAgIT0gcnAgKG1vZCAxNikuCisKKwlBTElHTigxNikKK0wodXRvcCk6bW92ZHFhCS04KGFwLG4sOCksICV4bW0wCisJbW92cQkoYXAsbiw4KSwgJXhtbTEKKwlwdW5wY2tscWRxICA4KGFwLG4sOCksICV4bW0xCisJcHNsbHEJJXhtbTQsICV4bW0xCisJcHNybHEJJXhtbTUsICV4bW0wCisJcG9yCSV4bW0xLCAleG1tMAorCW1vdmRxYQkleG1tMCwgKHJwLG4sOCkKK0wodWVudCk6c3ViCSQyLCBuCisJamEJTCh1dG9wKQorCisJam5lCUwoZW5kOCkKKworCW1vdnEJKGFwKSwgJXhtbTEKKwlweG9yCSV4bW0wLCAleG1tMAorCXB1bnBja2xxZHEgICV4bW0xLCAleG1tMAorCXB1bnBja2xxZHEgIDgoYXApLCAleG1tMQorCXBzbGxxCSV4bW00LCAleG1tMQorCXBzcmxxCSV4bW01LCAleG1tMAorCXBvcgkleG1tMSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIChycCkKKwlGVU5DX0VYSVQoKQorCXJldAorQyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitDIEhhbmRsZSB0aGUgY2FzZSB3aGVuIGFwID0gcnAgKG1vZCAxNikuCisKKwlBTElHTigxNikKK0woYXRvcCk6bW92ZHFhCShhcCxuLDgpLCAleG1tMAkJQyB4bW0wID0gQiphcFtuLTFdICsgYXBbbi0yXQorCW1vdnEJLTgoYXAsbiw4KSwgJXhtbTEJQyB4bW0xID0gYXBbbi0zXQorCXB1bnBja2xxZHEgICV4bW0wLCAleG1tMQlDIHhtbTEgPSBCKmFwW24tMl0gKyBhcFtuLTNdCisJcHNsbHEJJXhtbTQsICV4bW0wCisJcHNybHEJJXhtbTUsICV4bW0xCisJcG9yCSV4bW0xLCAleG1tMAorCW1vdmRxYQkleG1tMCwgKHJwLG4sOCkKK0woYWVudCk6CisJc3ViCSQyLCBuCisJamEJTChhdG9wKQorCWpuZQlMKGVuZDgpCisKKwltb3ZkcWEJKGFwKSwgJXhtbTEKKwlweG9yCSV4bW0wLCAleG1tMAorCXB1bnBja2xxZHEgICV4bW0xLCAleG1tMAorCXBzbGxxCSV4bW00LCAleG1tMQorCXBzcmxxCSV4bW01LCAleG1tMAorCXBvcgkleG1tMSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIChycCkKKwlGVU5DX0VYSVQoKQorCXJldAorQyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisJQUxJR04oMTYpCitMKGxlMik6CWpuZQlMKGVuZDgpCisKKwltb3ZxCTgoYXApLCAleG1tMAorCW1vdnEJKGFwKSwgJXhtbTEKKwlwc2xscQkleG1tNCwgJXhtbTAKKwlwc3JscQkleG1tNSwgJXhtbTEKKwlwb3IJJXhtbTEsICV4bW0wCisJbW92cQkleG1tMCwgOChycCkKKworTChlbmQ4KTptb3ZxCShhcCksICV4bW0wCisJcHNsbHEJJXhtbTQsICV4bW0wCisJbW92cQkleG1tMCwgKHJwKQorCUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9mYXN0c3NlL2xzaGlmdGMtbW92ZHF1Mi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9mYXN0c3NlL2xzaGlmdGMtbW92ZHF1Mi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI1MDkxMAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2Zhc3Rzc2UvbHNoaWZ0Yy1tb3ZkcXUyLmFzbQpAQCAtMCwwICsxLDE5MyBAQAorZG5sICBBTUQ2NCBtcG5fbHNoaWZ0YyBvcHRpbWlzZWQgZm9yIENQVXMgd2l0aCBmYXN0IFNTRSBpbmNsdWRpbmcgZmFzdCBtb3ZkcXUuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqb3JuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDEwLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDCSAgICAgY3ljbGVzL2xpbWIgICAgIGN5Y2xlcy9saW1iICAgICBjeWNsZXMvbGltYiAgICBnb29kCitDICAgICAgICAgICAgICBhbGlnbmVkCSAgICAgIHVuYWxpZ25lZAkgICAgICBiZXN0IHNlZW4JICAgZm9yIGNwdT8KK0MgQU1EIEs4LEs5CSAzCQkgMwkJID8JICBubywgdXNlIHNobC9zaHIKK0MgQU1EIEsxMAkgMS44LTIuMAkgMS44LTIuMAkgPwkgIHllcworQyBBTUQgYmQxCSAxLjkJCSAxLjkJCSA/CSAgeWVzCitDIEFNRCBib2JjYXQJIDMuNjcJCSAzLjY3CQkJICB5ZXMsIGJhZCBmb3IgbiA8IDIwCitDIEludGVsIFA0CSA0Ljc1CQkgNC43NQkJID8JICBubywgc2xvdyBtb3ZkcXUKK0MgSW50ZWwgY29yZTIJIDIuMjcJCSAyLjI3CQkgPwkgIG5vLCB1c2Ugc2hsZC9zaHJkCitDIEludGVsIE5ITQkgMi4xNQkJIDIuMTUJCSA/CSAgbm8sIHVzZSBzaGxkL3NocmQKK0MgSW50ZWwgU0JSCSAxLjQ1CQkgMS40NQkJID8JICB5ZXMsIGJhZCBmb3IgbiA9IDQtNgorQyBJbnRlbCBhdG9tCTEyLjkJCTEyLjkJCSA/CSAgbm8KK0MgVklBIG5hbm8JIDYuMTgJCSA2LjQ0CQkgPwkgIG5vLCBzbG93IG1vdmRxdQorCitDIFdlIHRyeSB0byBkbyBhcyBtYW55IGFsaWduZWQgMTYtYnl0ZSBvcGVyYXRpb25zIGFzIHBvc3NpYmxlLiAgVGhlIHRvcC1tb3N0CitDIGFuZCBib3R0b20tbW9zdCB3cml0ZXMgbWlnaHQgbmVlZCA4LWJ5dGUgb3BlcmF0aW9ucy4KK0MKK0MgVGhpcyB2YXJpYW50IHJlbHkgb24gZmFzdCBsb2FkIG1vdmRxdSwgYW5kIHVzZXMgaXQgZXZlbiBmb3IgYWxpZ25lZCBvcGVyYW5kcywKK0MgaW4gb3JkZXIgdG8gYXZvaWQgdGhlIG5lZWQgZm9yIHR3byBzZXBhcmF0ZSBsb29wcy4KK0MKK0MgVE9ETworQyAgKiBDb3VsZCAyLWxpbWIgd2luZC1kb3duIGNvZGUgYmUgc2ltcGxpZmllZD8KK0MgICogSW1wcm92ZSBiYXNlY2FzZSBjb2RlLCB1c2luZyBzaGxkL3NocmQgZm9yIFNCUiwgZGlzY3JldGUgaW50ZWdlciBzaGlmdHMKK0MgICAgZm9yIG90aGVyIGFmZmVjdGVkIENQVXMuCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsICBgJXJkaScpCitkZWZpbmUoYGFwJywgIGAlcnNpJykKK2RlZmluZShgbicsICAgYCVyZHgnKQorZGVmaW5lKGBjbnQnLCBgJXJjeCcpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDY0KQorUFJPTE9HVUUobXBuX2xzaGlmdGMpCisJRlVOQ19FTlRSWSg0KQorCW1vdmQJUjMyKCVyY3gpLCAleG1tNAorCW1vdgkkNjQsIFIzMiglcmF4KQorCXN1YglSMzIoJXJjeCksIFIzMiglcmF4KQorCW1vdmQJUjMyKCVyYXgpLCAleG1tNQorCisJbmVnCVIzMiglcmN4KQorCW1vdgktOChhcCxuLDgpLCAlcmF4CisJc2hyCVI4KCVyY3gpLCAlcmF4CisKKwlwY21wZXFiCSV4bW0zLCAleG1tMwkJQyBzZXQgdG8gMTExLi4uMTExCisKKwljbXAJJDMsIG4KKwlqbGUJTChiYykKKworCWxlYQkocnAsbiw4KSwgUjMyKCVyY3gpCisJdGVzdAkkOCwgUjgoJXJjeCkKKwlqeglMKHJwX2FsaWduZWQpCisKK0MgRG8gb25lIGluaXRpYWwgbGltYiBpbiBvcmRlciB0byBtYWtlIHJwIGFsaWduZWQKKwltb3ZxCS04KGFwLG4sOCksICV4bW0wCisJbW92cQktMTYoYXAsbiw4KSwgJXhtbTEKKwlwc2xscQkleG1tNCwgJXhtbTAKKwlwc3JscQkleG1tNSwgJXhtbTEKKwlwb3IJJXhtbTEsICV4bW0wCisJcHhvcgkleG1tMywgJXhtbTAKKwltb3ZxCSV4bW0wLCAtOChycCxuLDgpCisJZGVjCW4KKworTChycF9hbGlnbmVkKToKKwlsZWEJMShuKSwgJXI4ZAorCisJYW5kCSQ2LCBSMzIoJXI4KQorCWp6CUwoYmEwKQorCWNtcAkkNCwgUjMyKCVyOCkKKwlqeglMKGJhNCkKKwlqYwlMKGJhMikKK0woYmE2KToJYWRkCSQtNCwgbgorCWptcAlMKGk1NikKK0woYmEwKToJYWRkCSQtNiwgbgorCWptcAlMKGk3MCkKK0woYmE0KToJYWRkCSQtMiwgbgorCWptcAlMKGkzNCkKK0woYmEyKToJYWRkCSQtOCwgbgorCWpsZQlMKGVuZCkKKworCUFMSUdOKDE2KQorTCh0b3ApOgltb3ZkcXUJNDAoYXAsbiw4KSwgJXhtbTEKKwltb3ZkcXUJNDgoYXAsbiw4KSwgJXhtbTAKKwlwc2xscQkleG1tNCwgJXhtbTAKKwlwc3JscQkleG1tNSwgJXhtbTEKKwlwb3IJJXhtbTEsICV4bW0wCisJcHhvcgkleG1tMywgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIDQ4KHJwLG4sOCkKK0woaTcwKToKKwltb3ZkcXUJMjQoYXAsbiw4KSwgJXhtbTEKKwltb3ZkcXUJMzIoYXAsbiw4KSwgJXhtbTAKKwlwc2xscQkleG1tNCwgJXhtbTAKKwlwc3JscQkleG1tNSwgJXhtbTEKKwlwb3IJJXhtbTEsICV4bW0wCisJcHhvcgkleG1tMywgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIDMyKHJwLG4sOCkKK0woaTU2KToKKwltb3ZkcXUJOChhcCxuLDgpLCAleG1tMQorCW1vdmRxdQkxNihhcCxuLDgpLCAleG1tMAorCXBzbGxxCSV4bW00LCAleG1tMAorCXBzcmxxCSV4bW01LCAleG1tMQorCXBvcgkleG1tMSwgJXhtbTAKKwlweG9yCSV4bW0zLCAleG1tMAorCW1vdmRxYQkleG1tMCwgMTYocnAsbiw4KQorTChpMzQpOgorCW1vdmRxdQktOChhcCxuLDgpLCAleG1tMQorCW1vdmRxdQkoYXAsbiw4KSwgJXhtbTAKKwlwc2xscQkleG1tNCwgJXhtbTAKKwlwc3JscQkleG1tNSwgJXhtbTEKKwlwb3IJJXhtbTEsICV4bW0wCisJcHhvcgkleG1tMywgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIChycCxuLDgpCisJc3ViCSQ4LCBuCisJamcJTCh0b3ApCisKK0woZW5kKToJdGVzdAkkMSwgUjgobikKKwlqbnoJTChlbmQ4KQorCisJbW92ZHF1CShhcCksICV4bW0xCisJcHhvcgkleG1tMCwgJXhtbTAKKwlwdW5wY2tscWRxICAleG1tMSwgJXhtbTAKKwlwc2xscQkleG1tNCwgJXhtbTEKKwlwc3JscQkleG1tNSwgJXhtbTAKKwlwb3IJJXhtbTEsICV4bW0wCisJcHhvcgkleG1tMywgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIChycCkKKwlGVU5DX0VYSVQoKQorCXJldAorCitDIEJhc2VjYXNlCisJQUxJR04oMTYpCitMKGJjKToJZGVjCVIzMihuKQorCWp6CUwoZW5kOCkKKworCW1vdnEJKGFwLG4sOCksICV4bW0xCisJbW92cQktOChhcCxuLDgpLCAleG1tMAorCXBzbGxxCSV4bW00LCAleG1tMQorCXBzcmxxCSV4bW01LCAleG1tMAorCXBvcgkleG1tMSwgJXhtbTAKKwlweG9yCSV4bW0zLCAleG1tMAorCW1vdnEJJXhtbTAsIChycCxuLDgpCisJc3ViCSQyLCBSMzIobikKKwlqbAlMKGVuZDgpCisJbW92cQk4KGFwKSwgJXhtbTEKKwltb3ZxCShhcCksICV4bW0wCisJcHNsbHEJJXhtbTQsICV4bW0xCisJcHNybHEJJXhtbTUsICV4bW0wCisJcG9yCSV4bW0xLCAleG1tMAorCXB4b3IJJXhtbTMsICV4bW0wCisJbW92cQkleG1tMCwgOChycCkKKworTChlbmQ4KTptb3ZxCShhcCksICV4bW0wCisJcHNsbHEJJXhtbTQsICV4bW0wCisJcHhvcgkleG1tMywgJXhtbTAKKwltb3ZxCSV4bW0wLCAocnApCisJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2Zhc3Rzc2UvbHNoaWZ0Yy5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9mYXN0c3NlL2xzaGlmdGMuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MTYwNzUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9mYXN0c3NlL2xzaGlmdGMuYXNtCkBAIC0wLDAgKzEsMTgzIEBACitkbmwgIEFNRDY0IG1wbl9sc2hpZnRjIG9wdGltaXNlZCBmb3IgQ1BVcyB3aXRoIGZhc3QgU1NFLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBEYXZpZCBIYXJ2ZXkgYW5kIFRvcmJqb3JuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDEwLTIwMTIsIDIwMTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDCSAgICAgY3ljbGVzL2xpbWIJICAgICBjeWNsZXMvbGltYgkgICAgICBnb29kCitDICAgICAgICAgIDE2LWJ5dGUgYWxpZ25lZCAgICAgICAgIDE2LWJ5dGUgdW5hbGlnbmVkCSAgICBmb3IgY3B1PworQyBBTUQgSzgsSzkJID8JCQkgPworQyBBTUQgSzEwCSAxLjg1ICAoMS42MzUpCQkgMS45ICAgKDEuNjcpCQlZCitDIEFNRCBiZDEJIDEuODIgICgxLjc1KQkJIDEuODIgICgxLjc1KQkJWQorQyBBTUQgYm9iY2F0CSA0LjUJCQkgNC41CitDIEludGVsIFA0CSAzLjYgICAoMy4xMjUpCQkgMy42ICAgKDMuMTI1KQkJWQorQyBJbnRlbCBjb3JlMgkgMi4wNSAgKDEuNjcpCQkgMi41NSAgKDEuNzUpCitDIEludGVsIE5ITQkgMi4wNSAgKDEuODc1KQkJIDIuNiAgICgyLjI1KQorQyBJbnRlbCBTQlIJIDEuNTUgICgxLjQ0KQkJIDIgICAgICgxLjU3KQkJWQorQyBJbnRlbCBhdG9tCSA/CQkJID8KK0MgVklBIG5hbm8JIDIuNSAgICgyLjUpCQkgMi41ICAgKDIuNSkJCVkKKworQyBXZSB0cnkgdG8gZG8gYXMgbWFueSAxNi1ieXRlIG9wZXJhdGlvbnMgYXMgcG9zc2libGUuICBUaGUgdG9wLW1vc3QgYW5kCitDIGJvdHRvbS1tb3N0IHdyaXRlcyBtaWdodCBuZWVkIDgtYnl0ZSBvcGVyYXRpb25zLiAgV2UgYWx3YXlzIHdyaXRlIHVzaW5nCitDIDE2LWJ5dGUgb3BlcmF0aW9ucywgd2UgcmVhZCB3aXRoIGJvdGggOC1ieXRlIGFuZCAxNi1ieXRlIG9wZXJhdGlvbnMuCisKK0MgVGhlcmUgYXJlIHR3byBpbm5lci1sb29wcywgb25lIGZvciB3aGVuIHJwID0gYXAgKG1vZCAxNikgYW5kIG9uZSB3aGVuIHRoaXMgaXMKK0Mgbm90IHRydWUuICBUaGUgYWxpZ25lZCBjYXNlIHJlYWRzIDE2KzggYnl0ZXMsIHRoZSB1bmFsaWduZWQgY2FzZSByZWFkcworQyAxNis4K1ggYnl0ZXMsIHdoZXJlIFggaXMgOCBvciAxNiBkZXBlbmRpbmcgb24gaG93IHB1bnBja2xxZHEgaXMgaW1wbGVtZW50ZWQuCisKK0MgVGhpcyBpcyBub3QgeWV0IGdyZWF0IGNvZGU6CitDICAgKDEpIFRoZSB1bmFsaWduZWQgY2FzZSBtYWtlcyB0b28gbWFueSByZWFkcy4KK0MgICAoMikgV2Ugc2hvdWxkIGRvIHNvbWUgdW5yb2xsaW5nLCBhdCBsZWFzdCAyLXdheS4KK0MgV2l0aCAyLXdheSB1bnJvbGxpbmcgYnV0IG5vIHNjaGVkdWxpbmcgd2UgcmVhY2ggMS41IGMvbCBvbiBLMTAgYW5kIDIgYy9sIG9uCitDIE5hbm8uCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsICBgJXJkaScpCitkZWZpbmUoYGFwJywgIGAlcnNpJykKK2RlZmluZShgbicsICAgYCVyZHgnKQorZGVmaW5lKGBjbnQnLCBgJXJjeCcpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX2xzaGlmdGMpCisJRlVOQ19FTlRSWSg0KQorCW1vdmQJUjMyKCVyY3gpLCAleG1tNAorCW1vdgkkNjQsIFIzMiglcmF4KQorCXN1YglSMzIoJXJjeCksIFIzMiglcmF4KQorCW1vdmQJUjMyKCVyYXgpLCAleG1tNQorCisJbmVnCVIzMiglcmN4KQorCW1vdgktOChhcCxuLDgpLCAlcmF4CisJc2hyCVI4KCVyY3gpLCAlcmF4CisKKwlwY21wZXFiCSV4bW0yLCAleG1tMgkJQyBzZXQgdG8gMTExLi4uMTExCisKKwljbXAJJDIsIG4KKwlqbGUJTChsZTIpCisKKwlsZWEJKHJwLG4sOCksIFIzMiglcmN4KQorCXRlc3QJJDgsIFI4KCVyY3gpCisJamUJTChycF9hbGlnbmVkKQorCitDIERvIG9uZSBpbml0aWFsIGxpbWIgaW4gb3JkZXIgdG8gbWFrZSBycCBhbGlnbmVkCisJbW92cQktOChhcCxuLDgpLCAleG1tMAorCW1vdnEJLTE2KGFwLG4sOCksICV4bW0xCisJcHNsbHEJJXhtbTQsICV4bW0wCisJcHNybHEJJXhtbTUsICV4bW0xCisJcG9yCSV4bW0xLCAleG1tMAorCXB4b3IJJXhtbTIsICV4bW0wCisJbW92cQkleG1tMCwgLTgocnAsbiw4KQorCWRlYwluCisKK0wocnBfYWxpZ25lZCk6CisJbGVhCShhcCxuLDgpLCBSMzIoJXJjeCkKKwl0ZXN0CSQ4LCBSOCglcmN4KQorCWplCUwoYWVudCkKKwlqbXAJTCh1ZW50KQorQyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitDIEhhbmRsZSB0aGUgY2FzZSB3aGVuIGFwICE9IHJwIChtb2QgMTYpLgorCisJQUxJR04oMTYpCitMKHV0b3ApOm1vdnEJKGFwLG4sOCksICV4bW0xCisJcHVucGNrbHFkcSAgOChhcCxuLDgpLCAleG1tMQorCW1vdmRxYQktOChhcCxuLDgpLCAleG1tMAorCXBzbGxxCSV4bW00LCAleG1tMQorCXBzcmxxCSV4bW01LCAleG1tMAorCXBvcgkleG1tMSwgJXhtbTAKKwlweG9yCSV4bW0yLCAleG1tMAorCW1vdmRxYQkleG1tMCwgKHJwLG4sOCkKK0wodWVudCk6c3ViCSQyLCBuCisJamEJTCh1dG9wKQorCisJam5lCUwoZW5kOCkKKworCW1vdnEJKGFwKSwgJXhtbTEKKwlweG9yCSV4bW0wLCAleG1tMAorCXB1bnBja2xxZHEgICV4bW0xLCAleG1tMAorCXB1bnBja2xxZHEgIDgoYXApLCAleG1tMQorCXBzbGxxCSV4bW00LCAleG1tMQorCXBzcmxxCSV4bW01LCAleG1tMAorCXBvcgkleG1tMSwgJXhtbTAKKwlweG9yCSV4bW0yLCAleG1tMAorCW1vdmRxYQkleG1tMCwgKHJwKQorCUZVTkNfRVhJVCgpCisJcmV0CitDICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK0MgSGFuZGxlIHRoZSBjYXNlIHdoZW4gYXAgPSBycCAobW9kIDE2KS4KKworCUFMSUdOKDE2KQorTChhdG9wKTptb3ZkcWEJKGFwLG4sOCksICV4bW0wCQlDIHhtbTAgPSBCKmFwW24tMV0gKyBhcFtuLTJdCisJbW92cQktOChhcCxuLDgpLCAleG1tMQlDIHhtbTEgPSBhcFtuLTNdCisJcHVucGNrbHFkcSAgJXhtbTAsICV4bW0xCUMgeG1tMSA9IEIqYXBbbi0yXSArIGFwW24tM10KKwlwc2xscQkleG1tNCwgJXhtbTAKKwlwc3JscQkleG1tNSwgJXhtbTEKKwlwb3IJJXhtbTEsICV4bW0wCisJcHhvcgkleG1tMiwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIChycCxuLDgpCitMKGFlbnQpOnN1YgkkMiwgbgorCWphCUwoYXRvcCkKKworCWpuZQlMKGVuZDgpCisKKwltb3ZkcWEJKGFwKSwgJXhtbTAKKwlweG9yCSV4bW0xLCAleG1tMQorCXB1bnBja2xxZHEgICV4bW0wLCAleG1tMQorCXBzbGxxCSV4bW00LCAleG1tMAorCXBzcmxxCSV4bW01LCAleG1tMQorCXBvcgkleG1tMSwgJXhtbTAKKwlweG9yCSV4bW0yLCAleG1tMAorCW1vdmRxYQkleG1tMCwgKHJwKQorCUZVTkNfRVhJVCgpCisJcmV0CitDICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKwlBTElHTigxNikKK0wobGUyKToJam5lCUwoZW5kOCkKKworCW1vdnEJOChhcCksICV4bW0wCisJbW92cQkoYXApLCAleG1tMQorCXBzbGxxCSV4bW00LCAleG1tMAorCXBzcmxxCSV4bW01LCAleG1tMQorCXBvcgkleG1tMSwgJXhtbTAKKwlweG9yCSV4bW0yLCAleG1tMAorCW1vdnEJJXhtbTAsIDgocnApCisKK0woZW5kOCk6bW92cQkoYXApLCAleG1tMAorCXBzbGxxCSV4bW00LCAleG1tMAorCXB4b3IJJXhtbTIsICV4bW0wCisJbW92cQkleG1tMCwgKHJwKQorCUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9mYXN0c3NlL3JzaGlmdC1tb3ZkcXUyLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2Zhc3Rzc2UvcnNoaWZ0LW1vdmRxdTIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMjcwYjEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9mYXN0c3NlL3JzaGlmdC1tb3ZkcXUyLmFzbQpAQCAtMCwwICsxLDIwMSBAQAorZG5sICBBTUQ2NCBtcG5fcnNoaWZ0IG9wdGltaXNlZCBmb3IgQ1BVcyB3aXRoIGZhc3QgU1NFIGluY2x1ZGluZyBmYXN0IG1vdmRxdS4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTAtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MJICAgICBjeWNsZXMvbGltYiAgICAgY3ljbGVzL2xpbWIgICAgIGN5Y2xlcy9saW1iICAgIGdvb2QKK0MgICAgICAgICAgICAgIGFsaWduZWQJICAgICAgdW5hbGlnbmVkCSAgICAgIGJlc3Qgc2VlbgkgICBmb3IgY3B1PworQyBBTUQgSzgsSzkJIDMJCSAzCQkgMi4zNQkgIG5vLCB1c2Ugc2hsL3NocgorQyBBTUQgSzEwCSAxLjUtMS44CSAxLjUtMS44CSAxLjMzCSAgeWVzCitDIEFNRCBiZDEJIDEuNy0xLjkJIDEuNy0xLjkJIDEuMzMJICB5ZXMKK0MgQU1EIGJvYmNhdAkgMy4xNwkJIDMuMTcJCQkgIHllcywgYmFkIGZvciBuIDwgMjAKK0MgSW50ZWwgUDQJIDQuNjcJCSA0LjY3CQkgMi43CSAgbm8sIHNsb3cgbW92ZHF1CitDIEludGVsIGNvcmUyCSAyLjE1CQkgMi4xNQkJIDEuMjUJICBubywgdXNlIHNobGQvc2hyZAorQyBJbnRlbCBOSE0JIDEuNjYJCSAxLjY2CQkgMS4yNQkgIG5vLCB1c2Ugc2hsZC9zaHJkCitDIEludGVsIFNCUgkgMS4zCQkgMS4zCQkgMS4yNQkgIHllcywgYmFkIGZvciBuID0gNC02CitDIEludGVsIGF0b20JMTEuNwkJMTEuNwkJIDQuNQkgIG5vCitDIFZJQSBuYW5vCSA1LjcJCSA1Ljk1CQkgMi4wCSAgbm8sIHNsb3cgbW92ZHF1CisKK0MgV2UgdHJ5IHRvIGRvIGFzIG1hbnkgYWxpZ25lZCAxNi1ieXRlIG9wZXJhdGlvbnMgYXMgcG9zc2libGUuICBUaGUgdG9wLW1vc3QKK0MgYW5kIGJvdHRvbS1tb3N0IHdyaXRlcyBtaWdodCBuZWVkIDgtYnl0ZSBvcGVyYXRpb25zLgorQworQyBUaGlzIHZhcmlhbnQgcmVseSBvbiBmYXN0IGxvYWQgbW92ZHF1LCBhbmQgdXNlcyBpdCBldmVuIGZvciBhbGlnbmVkIG9wZXJhbmRzLAorQyBpbiBvcmRlciB0byBhdm9pZCB0aGUgbmVlZCBmb3IgdHdvIHNlcGFyYXRlIGxvb3BzLgorQworQyBUT0RPCitDICAqIENvdWxkIDItbGltYiB3aW5kLWRvd24gY29kZSBiZSBzaW1wbGlmaWVkPworQyAgKiBJbXByb3ZlIGJhc2VjYXNlIGNvZGUsIHVzaW5nIHNobGQvc2hyZCBmb3IgU0JSLCBkaXNjcmV0ZSBpbnRlZ2VyIHNoaWZ0cworQyAgICBmb3Igb3RoZXIgYWZmZWN0ZWQgQ1BVcy4KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywgIGAlcmRpJykKK2RlZmluZShgYXAnLCAgYCVyc2knKQorZGVmaW5lKGBuJywgICBgJXJkeCcpCitkZWZpbmUoYGNudCcsIGAlcmN4JykKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oNjQpCitQUk9MT0dVRShtcG5fcnNoaWZ0KQorCUZVTkNfRU5UUlkoNCkKKwltb3ZkCVIzMiglcmN4KSwgJXhtbTQKKwltb3YJJDY0LCBSMzIoJXJheCkKKwlzdWIJUjMyKCVyY3gpLCBSMzIoJXJheCkKKwltb3ZkCVIzMiglcmF4KSwgJXhtbTUKKworCW5lZwlSMzIoJXJjeCkKKwltb3YJKGFwKSwgJXJheAorCXNobAlSOCglcmN4KSwgJXJheAorCisJY21wCSQzLCBuCisJamxlCUwoYmMpCisKKwl0ZXN0CSQ4LCBSOChycCkKKwlqeglMKHJwX2FsaWduZWQpCisKK0MgRG8gb25lIGluaXRpYWwgbGltYiBpbiBvcmRlciB0byBtYWtlIHJwIGFsaWduZWQKKwltb3ZxCShhcCksICV4bW0wCisJbW92cQk4KGFwKSwgJXhtbTEKKwlwc3JscQkleG1tNCwgJXhtbTAKKwlwc2xscQkleG1tNSwgJXhtbTEKKwlwb3IJJXhtbTEsICV4bW0wCisJbW92cQkleG1tMCwgKHJwKQorCWxlYQk4KGFwKSwgYXAKKwlsZWEJOChycCksIHJwCisJZGVjCW4KKworTChycF9hbGlnbmVkKToKKwlsZWEJMShuKSwgJXI4ZAorCWxlYQkoYXAsbiw4KSwgYXAKKwlsZWEJKHJwLG4sOCksIHJwCisJbmVnCW4KKworCWFuZAkkNiwgUjMyKCVyOCkKKwlqeglMKGJ1MCkKKwljbXAJJDQsIFIzMiglcjgpCisJanoJTChidTQpCisJamMJTChidTIpCitMKGJ1Nik6CWFkZAkkNCwgbgorCWptcAlMKGk1NikKK0woYnUwKToJYWRkCSQ2LCBuCisJam1wCUwoaTcwKQorTChidTQpOglhZGQJJDIsIG4KKwlqbXAJTChpMzQpCitMKGJ1Mik6CWFkZAkkOCwgbgorCWpnZQlMKGVuZCkKKworCUFMSUdOKDE2KQorTCh0b3ApOgltb3ZkcXUJLTY0KGFwLG4sOCksICV4bW0xCisJbW92ZHF1CS01NihhcCxuLDgpLCAleG1tMAorCXBzbGxxCSV4bW01LCAleG1tMAorCXBzcmxxCSV4bW00LCAleG1tMQorCXBvcgkleG1tMSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIC02NChycCxuLDgpCitMKGk3MCk6CisJbW92ZHF1CS00OChhcCxuLDgpLCAleG1tMQorCW1vdmRxdQktNDAoYXAsbiw4KSwgJXhtbTAKKwlwc2xscQkleG1tNSwgJXhtbTAKKwlwc3JscQkleG1tNCwgJXhtbTEKKwlwb3IJJXhtbTEsICV4bW0wCisJbW92ZHFhCSV4bW0wLCAtNDgocnAsbiw4KQorTChpNTYpOgorCW1vdmRxdQktMzIoYXAsbiw4KSwgJXhtbTEKKwltb3ZkcXUJLTI0KGFwLG4sOCksICV4bW0wCisJcHNsbHEJJXhtbTUsICV4bW0wCisJcHNybHEJJXhtbTQsICV4bW0xCisJcG9yCSV4bW0xLCAleG1tMAorCW1vdmRxYQkleG1tMCwgLTMyKHJwLG4sOCkKK0woaTM0KToKKwltb3ZkcXUJLTE2KGFwLG4sOCksICV4bW0xCisJbW92ZHF1CS04KGFwLG4sOCksICV4bW0wCisJcHNsbHEJJXhtbTUsICV4bW0wCisJcHNybHEJJXhtbTQsICV4bW0xCisJcG9yCSV4bW0xLCAleG1tMAorCW1vdmRxYQkleG1tMCwgLTE2KHJwLG4sOCkKKwlhZGQJJDgsIG4KKwlqbAlMKHRvcCkKKworTChlbmQpOgl0ZXN0CSQxLCBSOChuKQorCWpueglMKGUxKQorCisJbW92ZHF1CS0xNihhcCksICV4bW0xCisJbW92cQktOChhcCksICV4bW0wCisJcHNybHEJJXhtbTQsICV4bW0xCisJcHNsbHEJJXhtbTUsICV4bW0wCisJcG9yCSV4bW0xLCAleG1tMAorCW1vdmRxYQkleG1tMCwgLTE2KHJwKQorCUZVTkNfRVhJVCgpCisJcmV0CisKK0woZTEpOgltb3ZxCS04KGFwKSwgJXhtbTAKKwlwc3JscQkleG1tNCwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtOChycCkKKwlGVU5DX0VYSVQoKQorCXJldAorCitDIEJhc2VjYXNlCisJQUxJR04oMTYpCitMKGJjKToJZGVjCVIzMihuKQorCWpuegkxZgorCW1vdnEJKGFwKSwgJXhtbTAKKwlwc3JscQkleG1tNCwgJXhtbTAKKwltb3ZxCSV4bW0wLCAocnApCisJRlVOQ19FWElUKCkKKwlyZXQKKworMToJbW92cQkoYXApLCAleG1tMQorCW1vdnEJOChhcCksICV4bW0wCisJcHNybHEJJXhtbTQsICV4bW0xCisJcHNsbHEJJXhtbTUsICV4bW0wCisJcG9yCSV4bW0xLCAleG1tMAorCW1vdnEJJXhtbTAsIChycCkKKwlkZWMJUjMyKG4pCisJam56CTFmCisJbW92cQk4KGFwKSwgJXhtbTAKKwlwc3JscQkleG1tNCwgJXhtbTAKKwltb3ZxCSV4bW0wLCA4KHJwKQorCUZVTkNfRVhJVCgpCisJcmV0CisKKzE6CW1vdnEJOChhcCksICV4bW0xCisJbW92cQkxNihhcCksICV4bW0wCisJcHNybHEJJXhtbTQsICV4bW0xCisJcHNsbHEJJXhtbTUsICV4bW0wCisJcG9yCSV4bW0xLCAleG1tMAorCW1vdnEJJXhtbTAsCTgocnApCisJbW92cQkxNihhcCksICV4bW0wCisJcHNybHEJJXhtbTQsICV4bW0wCisJbW92cQkleG1tMCwgMTYocnApCisJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2Zhc3Rzc2Uvc2VjX3RhYnNlbGVjdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9mYXN0c3NlL3NlY190YWJzZWxlY3QuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3YjdmZWIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9mYXN0c3NlL3NlY190YWJzZWxlY3QuYXNtCkBAIC0wLDAgKzEsMjA0IEBACitkbmwgIEFNRDY0IFNTRSBtcG5fc2VjX3RhYnNlbGVjdC4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDExLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDCSAgICAgY3ljbGVzL2xpbWIgICAgIGN5Y2xlcy9saW1iICAgICBjeWNsZXMvbGltYgorQwkgICAgICBhbGksZXZuIG4JICAgICB1bmFsLGV2biBuCSAgICAgIG90aGVyIGNhc2VzCitDIEFNRCBLOCxLOQkgMS42NQkJMS42NQkJIDEuOAorQyBBTUQgSzEwCSAwLjc4CQkwLjc4CQkgMC44NQorQyBBTUQgYmQxCSAwLjgwCQkwLjkxCQkgMS4yNQorQyBBTUQgYm9iY2F0CSAyLjE1CQkyLjE1CQkgMi4zNworQyBJbnRlbCBQNAkgMi41CQkyLjUJCSAyLjk1CitDIEludGVsIGNvcmUyCSAxLjE3CQkxLjI1CQkgMS4yNQorQyBJbnRlbCBOSE0JIDAuODcJCTAuOTAJCSAwLjkwCitDIEludGVsIFNCUgkgMC42MwkJMC43OQkJIDAuNzcKK0MgSW50ZWwgYXRvbQkgNC4zCQkgNC4zCQkgNC4zCXNsb3dlciB0aGFuIHBsYWluIGNvZGUKK0MgVklBIG5hbm8JIDEuNAkJIDUuMQkJIDMuMTQJdG9vIGFsaWdubWVudCBkZXBlbmRlbnQKKworQyBOT1RFUworQyAgKiBXZSBvbmx5IGhvbm91ciB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgMzIgYml0cyBvZiB0aGUgYHdoaWNoJyBhbmQgYG5lbnRzJworQyAgICBhcmd1bWVudHMgdG8gYWxsb3cgZWZmaWNpZW50IGNvZGUgdXNpbmcganVzdCBTU0UyLiAgV2Ugd291bGQgbmVlZCB0bworQyAgICBlaXRoZXIgdXNlIHRoZSBTU0U0XzEgcGNtcGVxcSwgb3IgZmluZCBzb21lIG90aGVyIFNTRTIgc2VxdWVuY2UuCitDICAqIFdlIHVzZSBtb3ZkIGZvciBjb3B5aW5nIGJldHdlZW4geG1tIGFuZCBwbGFpbiByZWdpc3RlcnMsIHNpbmNlIG9sZCBnYXMKK0MgICAgcmVqZWN0cyBtb3ZxLiAgQnV0IGdhcyBhc3NlbWJsZXMgbW92ZCBhcyBtb3ZxIHdoZW4gZ2l2ZW4gYSA2NC1iaXQgZ3JlZy4KKworZGVmaW5lKGBycCcsICAgICBgJXJkaScpCitkZWZpbmUoYHRwJywgICAgIGAlcnNpJykKK2RlZmluZShgbicsICAgICAgYCVyZHgnKQorZGVmaW5lKGBuZW50cycsICBgJXJjeCcpCitkZWZpbmUoYHdoaWNoJywgIGAlcjgnKQorCitkZWZpbmUoYGknLCAgICAgIGAlcjEwJykKK2RlZmluZShgaicsICAgICAgYCVyOScpCisKK0MgcmF4ICByYnggIHJjeCAgcmR4ICByZGkgIHJzaSAgcmJwICAgcjggICByOSAgcjEwICByMTEgIHIxMiAgcjEzICByMTQgIHIxNQorQyAgICAgICAgICBuZW50cyAgbiAgIHJwICAgdGFiICAgICAgIHdoaWNoIGogICAgaSAgIHRlbXAgICogICAgKiAgICAqICAgICoKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMTYpCitQUk9MT0dVRShtcG5fc2VjX3RhYnNlbGVjdCkKKwlGVU5DX0VOVFJZKDQpCitJRkRPUyhgCW1vdgk1NiglcnNwKSwgJXI4ZAknKQorCitJRkRPUyhgCWFkZAkkLTg4LCAlcnNwCScpCitJRkRPUyhgCW1vdmRxdQkleG1tNiwgKCVyc3ApCScpCitJRkRPUyhgCW1vdmRxdQkleG1tNywgMTYoJXJzcCkJJykKK0lGRE9TKGAJbW92ZHF1CSV4bW04LCAzMiglcnNwKQknKQorSUZET1MoYAltb3ZkcXUJJXhtbTksIDQ4KCVyc3ApCScpCisKKwltb3ZkCXdoaWNoLCAleG1tOAorCXBzaHVmZAkkMCwgJXhtbTgsICV4bW04CUMgNCBgd2hpY2gnIGNvcGllcworCW1vdgkkMSwgUjMyKCVyYXgpCisJbW92ZAklcmF4LCAleG1tOQorCXBzaHVmZAkkMCwgJXhtbTksICV4bW05CUMgNCBjb3BpZXMgb2YgMQorCisJbW92CW4sIGoKKwlhZGQJJC04LCBqCisJanMJTChvdXRlcl9lbmQpCisKK0wob3V0ZXJfdG9wKToKKwltb3YJbmVudHMsIGkKKwltb3YJdHAsICVyMTEKKwlweG9yCSV4bW0xLCAleG1tMQorCXB4b3IJJXhtbTQsICV4bW00CisJcHhvcgkleG1tNSwgJXhtbTUKKwlweG9yCSV4bW02LCAleG1tNgorCXB4b3IJJXhtbTcsICV4bW03CisJQUxJR04oMTYpCitMKHRvcCk6CW1vdmRxYQkleG1tOCwgJXhtbTAKKwlwY21wZXFkCSV4bW0xLCAleG1tMAorCXBhZGRkCSV4bW05LCAleG1tMQorCW1vdmRxdQkwKHRwKSwgJXhtbTIKKwltb3ZkcXUJMTYodHApLCAleG1tMworCXBhbmQJJXhtbTAsICV4bW0yCisJcGFuZAkleG1tMCwgJXhtbTMKKwlwb3IJJXhtbTIsICV4bW00CisJcG9yCSV4bW0zLCAleG1tNQorCW1vdmRxdQkzMih0cCksICV4bW0yCisJbW92ZHF1CTQ4KHRwKSwgJXhtbTMKKwlwYW5kCSV4bW0wLCAleG1tMgorCXBhbmQJJXhtbTAsICV4bW0zCisJcG9yCSV4bW0yLCAleG1tNgorCXBvcgkleG1tMywgJXhtbTcKKwlsZWEJKHRwLG4sOCksIHRwCisJYWRkCSQtMSwgaQorCWpuZQlMKHRvcCkKKworCW1vdmRxdQkleG1tNCwgMChycCkKKwltb3ZkcXUJJXhtbTUsIDE2KHJwKQorCW1vdmRxdQkleG1tNiwgMzIocnApCisJbW92ZHF1CSV4bW03LCA0OChycCkKKworCWxlYQk2NCglcjExKSwgdHAKKwlsZWEJNjQocnApLCBycAorCWFkZAkkLTgsIGoKKwlqbnMJTChvdXRlcl90b3ApCitMKG91dGVyX2VuZCk6CisKKwl0ZXN0CSQ0LCBSOChuKQorCWplCUwoYjB4eCkKK0woYjF4eCk6bW92CW5lbnRzLCBpCisJbW92CXRwLCAlcjExCisJcHhvcgkleG1tMSwgJXhtbTEKKwlweG9yCSV4bW00LCAleG1tNAorCXB4b3IJJXhtbTUsICV4bW01CisJQUxJR04oMTYpCitMKHRwNCk6CW1vdmRxYQkleG1tOCwgJXhtbTAKKwlwY21wZXFkCSV4bW0xLCAleG1tMAorCXBhZGRkCSV4bW05LCAleG1tMQorCW1vdmRxdQkwKHRwKSwgJXhtbTIKKwltb3ZkcXUJMTYodHApLCAleG1tMworCXBhbmQJJXhtbTAsICV4bW0yCisJcGFuZAkleG1tMCwgJXhtbTMKKwlwb3IJJXhtbTIsICV4bW00CisJcG9yCSV4bW0zLCAleG1tNQorCWxlYQkodHAsbiw4KSwgdHAKKwlhZGQJJC0xLCBpCisJam5lCUwodHA0KQorCW1vdmRxdQkleG1tNCwgMChycCkKKwltb3ZkcXUJJXhtbTUsIDE2KHJwKQorCWxlYQkzMiglcjExKSwgdHAKKwlsZWEJMzIocnApLCBycAorCitMKGIweHgpOnRlc3QJJDIsIFI4KG4pCisJamUJTChiMDB4KQorTChiMDF4KTptb3YJbmVudHMsIGkKKwltb3YJdHAsICVyMTEKKwlweG9yCSV4bW0xLCAleG1tMQorCXB4b3IJJXhtbTQsICV4bW00CisJQUxJR04oMTYpCitMKHRwMik6CW1vdmRxYQkleG1tOCwgJXhtbTAKKwlwY21wZXFkCSV4bW0xLCAleG1tMAorCXBhZGRkCSV4bW05LCAleG1tMQorCW1vdmRxdQkwKHRwKSwgJXhtbTIKKwlwYW5kCSV4bW0wLCAleG1tMgorCXBvcgkleG1tMiwgJXhtbTQKKwlsZWEJKHRwLG4sOCksIHRwCisJYWRkCSQtMSwgaQorCWpuZQlMKHRwMikKKwltb3ZkcXUJJXhtbTQsIDAocnApCisJbGVhCTE2KCVyMTEpLCB0cAorCWxlYQkxNihycCksIHJwCisKK0woYjAweCk6dGVzdAkkMSwgUjgobikKKwlqZQlMKGIwMDApCitMKGIwMDEpOm1vdgluZW50cywgaQorCW1vdgl0cCwgJXIxMQorCXB4b3IJJXhtbTEsICV4bW0xCisJcHhvcgkleG1tNCwgJXhtbTQKKwlBTElHTigxNikKK0wodHAxKToJbW92ZHFhCSV4bW04LCAleG1tMAorCXBjbXBlcWQJJXhtbTEsICV4bW0wCisJcGFkZGQJJXhtbTksICV4bW0xCisJbW92cQkwKHRwKSwgJXhtbTIKKwlwYW5kCSV4bW0wLCAleG1tMgorCXBvcgkleG1tMiwgJXhtbTQKKwlsZWEJKHRwLG4sOCksIHRwCisJYWRkCSQtMSwgaQorCWpuZQlMKHRwMSkKKwltb3ZxCSV4bW00LCAwKHJwKQorCitMKGIwMDApOgorSUZET1MoYAltb3ZkcXUJKCVyc3ApLCAleG1tNgknKQorSUZET1MoYAltb3ZkcXUJMTYoJXJzcCksICV4bW03CScpCitJRkRPUyhgCW1vdmRxdQkzMiglcnNwKSwgJXhtbTgJJykKK0lGRE9TKGAJbW92ZHF1CTQ4KCVyc3ApLCAleG1tOQknKQorSUZET1MoYAlhZGQJJDg4LCAlcnNwCScpCisJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2ZhdC9hZGRtdWxfMi5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvZmF0L2FkZG11bF8yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBkNzM1OAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2ZhdC9hZGRtdWxfMi5jCkBAIC0wLDAgKzEsMzggQEAKKy8qIEZhdCBiaW5hcnkgZmFsbGJhY2sgbXBuX2FkZG11bF8yLgorCitDb3B5cmlnaHQgMjAxNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgImdtcC1pbXBsLmgiCisKK21wX2xpbWJfdAorbXBuX2FkZG11bF8yIChtcF9wdHIgcnAsIG1wX3NyY3B0ciB1cCwgbXBfc2l6ZV90IG4sIGNvbnN0IG1wX2xpbWJfdCB2cFsyXSkKK3sKKyAgcnBbbl0gPSBtcG5fYWRkbXVsXzEgKHJwLCAgICAgdXAsIG4sIHZwWzBdKTsKKyAgcmV0dXJuICBtcG5fYWRkbXVsXzEgKHJwICsgMSwgdXAsIG4sIHZwWzFdKTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2ZhdC9mYXQuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2ZhdC9mYXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzQ0NmEzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvZmF0L2ZhdC5jCkBAIC0wLDAgKzEsNDcyIEBACisvKiB4ODZfNjQgZmF0IGJpbmFyeSBpbml0aWFsaXplcnMuCisKKyAgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBLZXZpbiBSeWRlIChvcmlnaW5hbCB4ODZfMzIgY29kZSkgYW5kCisgICBUb3Jiam9ybiBHcmFubHVuZCAocG9ydCB0byB4ODZfNjQpCisKKyAgIFRIRSBGVU5DVElPTlMgQU5EIFZBUklBQkxFUyBJTiBUSElTIEZJTEUgQVJFIEZPUiBJTlRFUk5BTCBVU0UgT05MWS4KKyAgIFRIRVknUkUgQUxNT1NUIENFUlRBSU4gVE8gQkUgU1VCSkVDVCBUTyBJTkNPTVBBVElCTEUgQ0hBTkdFUyBPUiBESVNBUFBFQVIKKyAgIENPTVBMRVRFTFkgSU4gRlVUVVJFIEdOVSBNUCBSRUxFQVNFUy4KKworQ29weXJpZ2h0IDIwMDMsIDIwMDQsIDIwMDksIDIwMTEtMjAxNSwgMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+ICAgIC8qIGZvciBwcmludGYgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4gICAvKiBmb3IgZ2V0ZW52ICovCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJnbXAtaW1wbC5oIgorCisvKiBDaGFuZ2UgdGhpcyB0byAiI2RlZmluZSBUUkFDRSh4KSB4IiBmb3Igc29tZSB0cmFjZXMuICovCisjZGVmaW5lIFRSQUNFKHgpCisKKworLyogZmF0X2VudHJ5LmFzbSAqLworbG9uZyBfX2dtcG5fY3B1aWQgKGNoYXIgWzEyXSwgaW50KTsKKworCisjaWYgV0FOVF9GQUtFX0NQVUlECisvKiBUaGUgIm5hbWUicyBpbiB0aGUgdGFibGUgYXJlIHZhbHVlcyBmb3IgdGhlIEdNUF9DUFVfVFlQRSBlbnZpcm9ubWVudAorICAgdmFyaWFibGUuICBBbnl0aGluZyBjYW4gYmUgdXNlZCwgYnV0IGZvciBub3cgaXQncyB0aGUgY2Fub25pY2FsIGNwdSB0eXBlcworICAgYXMgcGVyIGNvbmZpZy5ndWVzcy9jb25maWcuc3ViLiAgKi8KKworI2RlZmluZSBfX2dtcG5fY3B1aWQgICAgICAgICAgICBmYWtlX2NwdWlkCisKKyNkZWZpbmUgTUFLRV9GTVMoZmFtaWx5LCBtb2RlbCkJCQkJCQlcCisgICgoKChmYW1pbHkpICYgMHhmKSA8PCA4KSArICgoKGZhbWlseSkgJiAweGZmMCkgPDwgMjApCQkJXAorICAgKyAoKChtb2RlbCkgJiAweGYpIDw8IDQpICsgKCgobW9kZWwpICAmICAweGYwKSA8PCAxMikpCisKK3N0YXRpYyBzdHJ1Y3QgeworICBjb25zdCBjaGFyICAqbmFtZTsKKyAgY29uc3QgY2hhciAgKnZlbmRvcjsKKyAgdW5zaWduZWQgICAgZm1zOworfSBmYWtlX2NwdWlkX3RhYmxlW10gPSB7CisgIHsgImNvcmUyIiwgICAgICAiR2VudWluZUludGVsIiwgTUFLRV9GTVMgKDYsIDB4ZikgfSwKKyAgeyAibmVoYWxlbSIsICAgICJHZW51aW5lSW50ZWwiLCBNQUtFX0ZNUyAoNiwgMHgxYSkgfSwKKyAgeyAibmhtIiwgICAgICAgICJHZW51aW5lSW50ZWwiLCBNQUtFX0ZNUyAoNiwgMHgxYSkgfSwKKyAgeyAiYXRvbSIsICAgICAgICJHZW51aW5lSW50ZWwiLCBNQUtFX0ZNUyAoNiwgMHgxYykgfSwKKyAgeyAid2VzdG1lcmUiLCAgICJHZW51aW5lSW50ZWwiLCBNQUtFX0ZNUyAoNiwgMHgyNSkgfSwKKyAgeyAid3NtIiwgICAgICAgICJHZW51aW5lSW50ZWwiLCBNQUtFX0ZNUyAoNiwgMHgyNSkgfSwKKyAgeyAic2FuZHlicmlkZ2UiLCJHZW51aW5lSW50ZWwiLCBNQUtFX0ZNUyAoNiwgMHgyYSkgfSwKKyAgeyAic2JyIiwgICAgICAgICJHZW51aW5lSW50ZWwiLCBNQUtFX0ZNUyAoNiwgMHgyYSkgfSwKKyAgeyAic2lsdmVybW9udCIsICJHZW51aW5lSW50ZWwiLCBNQUtFX0ZNUyAoNiwgMHgzNykgfSwKKyAgeyAic2xtIiwgICAgICAgICJHZW51aW5lSW50ZWwiLCBNQUtFX0ZNUyAoNiwgMHgzNykgfSwKKyAgeyAiaGFzd2VsbCIsICAgICJHZW51aW5lSW50ZWwiLCBNQUtFX0ZNUyAoNiwgMHgzYykgfSwKKyAgeyAiaHdsIiwgICAgICAgICJHZW51aW5lSW50ZWwiLCBNQUtFX0ZNUyAoNiwgMHgzYykgfSwKKyAgeyAiYnJvYWR3ZWxsIiwgICJHZW51aW5lSW50ZWwiLCBNQUtFX0ZNUyAoNiwgMHgzZCkgfSwKKyAgeyAiYndsIiwgICAgICAgICJHZW51aW5lSW50ZWwiLCBNQUtFX0ZNUyAoNiwgMHgzZCkgfSwKKyAgeyAic2t5bGFrZSIsICAgICJHZW51aW5lSW50ZWwiLCBNQUtFX0ZNUyAoNiwgMHg1ZSkgfSwKKyAgeyAic2t5IiwgICAgICAgICJHZW51aW5lSW50ZWwiLCBNQUtFX0ZNUyAoNiwgMHg1ZSkgfSwKKyAgeyAicGVudGl1bTQiLCAgICJHZW51aW5lSW50ZWwiLCBNQUtFX0ZNUyAoMTUsIDMpIH0sCisKKyAgeyAiazgiLCAgICAgICAgICJBdXRoZW50aWNBTUQiLCBNQUtFX0ZNUyAoMTUsIDApIH0sCisgIHsgImsxMCIsICAgICAgICAiQXV0aGVudGljQU1EIiwgTUFLRV9GTVMgKDE2LCAwKSB9LAorICB7ICJib2JjYXQiLCAgICAgIkF1dGhlbnRpY0FNRCIsIE1BS0VfRk1TICgyMCwgMSkgfSwKKyAgeyAiYnVsbGRvemVyIiwgICJBdXRoZW50aWNBTUQiLCBNQUtFX0ZNUyAoMjEsIDEpIH0sCisgIHsgInBpbGVkcml2ZXIiLCAiQXV0aGVudGljQU1EIiwgTUFLRV9GTVMgKDIxLCAyKSB9LAorICB7ICJzdGVhbXJvbGxlciIsIkF1dGhlbnRpY0FNRCIsIE1BS0VfRk1TICgyMSwgMHgzMCkgfSwKKyAgeyAiZXhjYXZhdG9yIiwgICJBdXRoZW50aWNBTUQiLCBNQUtFX0ZNUyAoMjEsIDB4NjApIH0sCisgIHsgImphZ3VhciIsICAgICAiQXV0aGVudGljQU1EIiwgTUFLRV9GTVMgKDIyLCAxKSB9LAorICB7ICJ6ZW4iLCAgICAgICAgIkF1dGhlbnRpY0FNRCIsIE1BS0VfRk1TICgyMywgMSkgfSwKKworICB7ICJuYW5vIiwgICAgICAgIkNlbnRhdXJIYXVscyIsIE1BS0VfRk1TICg2LCAxNSkgfSwKK307CisKK3N0YXRpYyBpbnQKK2Zha2VfY3B1aWRfbG9va3VwICh2b2lkKQoreworICBjaGFyICAqczsKKyAgaW50ICAgaTsKKworICBzID0gZ2V0ZW52ICgiR01QX0NQVV9UWVBFIik7CisgIGlmIChzID09IE5VTEwpCisgICAgeworICAgICAgcHJpbnRmICgiTmVlZCBHTVBfQ1BVX1RZUEUgZW52aXJvbm1lbnQgdmFyaWFibGUgZm9yIGZha2UgY3B1aWRcbiIpOworICAgICAgYWJvcnQgKCk7CisgICAgfQorCisgIGZvciAoaSA9IDA7IGkgPCBudW1iZXJvZiAoZmFrZV9jcHVpZF90YWJsZSk7IGkrKykKKyAgICBpZiAoc3RyY21wIChzLCBmYWtlX2NwdWlkX3RhYmxlW2ldLm5hbWUpID09IDApCisgICAgICByZXR1cm4gaTsKKworICBwcmludGYgKCJHTVBfQ1BVX1RZUEU9JXMgdW5rbm93blxuIiwgcyk7CisgIGFib3J0ICgpOworfQorCitzdGF0aWMgbG9uZworZmFrZV9jcHVpZCAoY2hhciBkc3RbMTJdLCB1bnNpZ25lZCBpbnQgaWQpCit7CisgIGludCAgaSA9IGZha2VfY3B1aWRfbG9va3VwKCk7CisKKyAgc3dpdGNoIChpZCkgeworICBjYXNlIDA6CisgICAgbWVtY3B5IChkc3QsIGZha2VfY3B1aWRfdGFibGVbaV0udmVuZG9yLCAxMik7CisgICAgcmV0dXJuIDA7CisgIGNhc2UgMToKKyAgICByZXR1cm4gZmFrZV9jcHVpZF90YWJsZVtpXS5mbXM7CisgIGNhc2UgNzoKKyAgICBkc3RbMF0gPSAweGZmOwkJCQkvKiBCTUkxLCBBVlgyLCBldGMgKi8KKyAgICBkc3RbMV0gPSAweGZmOwkJCQkvKiBCTUkyLCBldGMgKi8KKyAgICByZXR1cm4gMDsKKyAgY2FzZSAweDgwMDAwMDAxOgorICAgIGRzdFs0ICsgMjkgLyA4XSA9ICgxIDw8ICgyOSAlIDgpKTsJCS8qICJsb25nIiBtb2RlICovCisgICAgcmV0dXJuIDA7CisgIGRlZmF1bHQ6CisgICAgcHJpbnRmICgiZmFrZV9jcHVpZCgpOiBvb3BzLCB1bmtub3duIGlkICVkXG4iLCBpZCk7CisgICAgYWJvcnQgKCk7CisgIH0KK30KKyNlbmRpZgorCisKK3R5cGVkZWYgREVDTF9wcmVpbnZfZGl2cmVtXzEgKCgqcHJlaW52X2RpdnJlbV8xX3QpKTsKK3R5cGVkZWYgREVDTF9wcmVpbnZfbW9kXzEgICAgKCgqcHJlaW52X21vZF8xX3QpKTsKKworc3RydWN0IGNwdXZlY190IF9fZ21wbl9jcHV2ZWMgPSB7CisgIF9fTVBOKGFkZF9uX2luaXQpLAorICBfX01QTihhZGRsc2gxX25faW5pdCksCisgIF9fTVBOKGFkZGxzaDJfbl9pbml0KSwKKyAgX19NUE4oYWRkbXVsXzFfaW5pdCksCisgIF9fTVBOKGFkZG11bF8yX2luaXQpLAorICBfX01QTihiZGl2X2RibTFjX2luaXQpLAorICBfX01QTihjbmRfYWRkX25faW5pdCksCisgIF9fTVBOKGNuZF9zdWJfbl9pbml0KSwKKyAgX19NUE4oY29tX2luaXQpLAorICBfX01QTihjb3B5ZF9pbml0KSwKKyAgX19NUE4oY29weWlfaW5pdCksCisgIF9fTVBOKGRpdmV4YWN0XzFfaW5pdCksCisgIF9fTVBOKGRpdnJlbV8xX2luaXQpLAorICBfX01QTihnY2RfMTFfaW5pdCksCisgIF9fTVBOKGxzaGlmdF9pbml0KSwKKyAgX19NUE4obHNoaWZ0Y19pbml0KSwKKyAgX19NUE4obW9kXzFfaW5pdCksCisgIF9fTVBOKG1vZF8xXzFwX2luaXQpLAorICBfX01QTihtb2RfMV8xcF9jcHNfaW5pdCksCisgIF9fTVBOKG1vZF8xc18ycF9pbml0KSwKKyAgX19NUE4obW9kXzFzXzJwX2Nwc19pbml0KSwKKyAgX19NUE4obW9kXzFzXzRwX2luaXQpLAorICBfX01QTihtb2RfMXNfNHBfY3BzX2luaXQpLAorICBfX01QTihtb2RfMzRsc3ViMV9pbml0KSwKKyAgX19NUE4obW9kZXhhY3RfMWNfb2RkX2luaXQpLAorICBfX01QTihtdWxfMV9pbml0KSwKKyAgX19NUE4obXVsX2Jhc2VjYXNlX2luaXQpLAorICBfX01QTihtdWxsb19iYXNlY2FzZV9pbml0KSwKKyAgX19NUE4ocHJlaW52X2RpdnJlbV8xX2luaXQpLAorICBfX01QTihwcmVpbnZfbW9kXzFfaW5pdCksCisgIF9fTVBOKHJlZGNfMV9pbml0KSwKKyAgX19NUE4ocmVkY18yX2luaXQpLAorICBfX01QTihyc2hpZnRfaW5pdCksCisgIF9fTVBOKHNxcl9iYXNlY2FzZV9pbml0KSwKKyAgX19NUE4oc3ViX25faW5pdCksCisgIF9fTVBOKHN1YmxzaDFfbl9pbml0KSwKKyAgX19NUE4oc3VibXVsXzFfaW5pdCksCisgIDAKK307CisKK2ludCBfX2dtcG5fY3B1dmVjX2luaXRpYWxpemVkID0gMDsKKworLyogVGhlIGZvbGxvd2luZyBzZXR1cHMgc3RhcnQgd2l0aCBnZW5lcmljIHg4NiwgdGhlbiBvdmVyd3JpdGUgd2l0aAorICAgc3BlY2lmaWNzIGZvciBhIGNoaXAsIGFuZCBoaWdoZXIgdmVyc2lvbnMgb2YgdGhhdCBjaGlwLgorCisgICBUaGUgYXJyYW5nZW1lbnQgb2YgdGhlIHNldHVwcyBoZXJlIHdpbGwgbm9ybWFsbHkgYmUgdGhlIHNhbWUgYXMgdGhlICRwYXRoCisgICBzZWxlY3Rpb25zIGluIGNvbmZpZ3VyZS5pbiBmb3IgdGhlIHJlc3BlY3RpdmUgY2hpcHMuCisKKyAgIFRoaXMgY29kZSBpcyByZWVudHJhbnQgYW5kIHRocmVhZCBzYWZlLiAgV2UgYWx3YXlzIGNhbGN1bGF0ZSB0aGUgc2FtZQorICAgZGVjaWRlZF9jcHV2ZWMsIHNvIGlmIHR3byBjb3BpZXMgb2YgdGhlIGNvZGUgYXJlIHJ1bm5pbmcgaXQgZG9lc24ndAorICAgbWF0dGVyIHdoaWNoIGNvbXBsZXRlcyBmaXJzdCwgYm90aCB3cml0ZSB0aGUgc2FtZSB0byBfX2dtcG5fY3B1dmVjLgorCisgICBXZSBuZWVkIHRvIGdvIHZpYSBkZWNpZGVkX2NwdXZlYyBiZWNhdXNlIGlmIG9uZSB0aHJlYWQgaGFzIGNvbXBsZXRlZAorICAgX19nbXBuX2NwdXZlYyB0aGVuIGl0IG1heSBiZSBtYWtpbmcgdXNlIG9mIHRoZSB0aHJlc2hvbGQgdmFsdWVzIGluIHRoYXQKKyAgIHZlY3Rvci4gIElmIGFub3RoZXIgdGhyZWFkIGlzIHN0aWxsIHJ1bm5pbmcgX19nbXBuX2NwdXZlY19pbml0IHRoZW4gd2UKKyAgIGRvbid0IHdhbnQgaXQgdG8gd3JpdGUgZGlmZmVyZW50IHZhbHVlcyB0byB0aG9zZSBmaWVsZHMgc2luY2Ugc29tZSBvZiB0aGUKKyAgIGFzbSByb3V0aW5lcyBvbmx5IG9wZXJhdGUgY29ycmVjdGx5IHVwIHRvIHRoZWlyIG93biBkZWZpbmVkIHRocmVzaG9sZCwKKyAgIG5vdCBhbiBhcmJpdHJhcnkgdmFsdWUuICAqLworCitzdGF0aWMgaW50CitnbXBfd29ya2Fyb3VuZF9za3lsYWtlX2NwdWlkX2J1ZyAoKQoreworICBjaGFyIGZlYXR1cmVfc3RyaW5nWzQ5XTsKKyAgY2hhciBwcm9jZXNzb3JfbmFtZV9zdHJpbmdbNDldOworICBzdGF0aWMgY29uc3QgY2hhciAqYmFkX2NwdXNbXSA9IHsiIEc0NCIsICIgRzQ1IiwgIiBHMzkiIC8qICwgIjY2MDAiICovIH07CisgIGludCBpOworCisgIC8qIEV4YW1wbGUgc3RyaW5nczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICJJbnRlbChSKSBQZW50aXVtKFIpIENQVSBHNDQwMCBAIDMuMzBHSHoiICAgICAgICAgICovCisgIC8qICJJbnRlbChSKSBDb3JlKFRNKSBpNS02NjAwSyBDUFUgQCAzLjUwR0h6IiAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgXiAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICBeICovCisgIC8qICAgICAweDgwMDAwMDAyICAgICAgIDB4ODAwMDAwMDMgICAgICAweDgwMDAwMDA0ICAgICovCisgIC8qIFdlIG1hdGNoIG91dCBqdXN0IHRoZSAweDgwMDAwMDAzIHBhcnQgaGVyZS4gKi8KKworICAvKiBJbiB0aGVpciBpbmZpbml0aXZlIHdpc2RvbSwgSW50ZWwgZGVjaWRlZCB0byB1c2Ugb25lIHJlZ2lzdGVyIG9yZGVyIGZvcgorICAgICB0aGUgdmVuZG9yIHN0cmluZywgYW5kIGFub3RoZXIgZm9yIHRoZSBwcm9jZXNzb3IgbmFtZSBzdHJpbmcuICBXZSBzaHVmZmxlCisgICAgIHRoaW5ncyBhYm91dCBoZXJlLCByYXRoZXIgdGhhbiB3cml0ZSBhIG5ldyB2YXJpYW50IG9mIG91ciBhc3NlbWJseSBjcHVpZC4KKyAgKi8KKworICB1bnNpZ25lZCBpbnQgZWF4LCBlYngsIGVjeCwgZWR4OworICBlYXggPSBfX2dtcG5fY3B1aWQgKGZlYXR1cmVfc3RyaW5nLCAweDgwMDAwMDAzKTsKKyAgZWJ4ID0gKCh1bnNpZ25lZCBpbnQgKilmZWF0dXJlX3N0cmluZylbMF07CisgIGVkeCA9ICgodW5zaWduZWQgaW50ICopZmVhdHVyZV9zdHJpbmcpWzFdOworICBlY3ggPSAoKHVuc2lnbmVkIGludCAqKWZlYXR1cmVfc3RyaW5nKVsyXTsKKworICAoKHVuc2lnbmVkIGludCAqKSAocHJvY2Vzc29yX25hbWVfc3RyaW5nKSlbMF0gPSBlYXg7CisgICgodW5zaWduZWQgaW50ICopIChwcm9jZXNzb3JfbmFtZV9zdHJpbmcpKVsxXSA9IGVieDsKKyAgKCh1bnNpZ25lZCBpbnQgKikgKHByb2Nlc3Nvcl9uYW1lX3N0cmluZykpWzJdID0gZWN4OworICAoKHVuc2lnbmVkIGludCAqKSAocHJvY2Vzc29yX25hbWVfc3RyaW5nKSlbM10gPSBlZHg7CisKKyAgcHJvY2Vzc29yX25hbWVfc3RyaW5nWzE2XSA9IDA7CisKKyAgZm9yIChpID0gMDsgaSA8IHNpemVvZiAoYmFkX2NwdXMpIC8gc2l6ZW9mIChjaGFyICopOyBpKyspCisgICAgeworICAgICAgaWYgKHN0cnN0ciAocHJvY2Vzc29yX25hbWVfc3RyaW5nLCBiYWRfY3B1c1tpXSkgIT0gMCkKKwlyZXR1cm4gMTsKKyAgICB9CisgIHJldHVybiAwOworfQorCitlbnVtIHtCTUkyX0JJVCA9IDh9OworCit2b2lkCitfX2dtcG5fY3B1dmVjX2luaXQgKHZvaWQpCit7CisgIHN0cnVjdCBjcHV2ZWNfdCAgZGVjaWRlZF9jcHV2ZWM7CisgIGNoYXIgdmVuZG9yX3N0cmluZ1sxM107CisgIGNoYXIgZHVtbXlfc3RyaW5nWzEyXTsKKyAgbG9uZyBmbXM7CisgIGludCBmYW1pbHksIG1vZGVsOworCisgIFRSQUNFIChwcmludGYgKCJfX2dtcG5fY3B1dmVjX2luaXQ6XG4iKSk7CisKKyAgbWVtc2V0ICgmZGVjaWRlZF9jcHV2ZWMsICdcMCcsIHNpemVvZiAoZGVjaWRlZF9jcHV2ZWMpKTsKKworICBDUFVWRUNfU0VUVVBfeDg2XzY0OworICBDUFVWRUNfU0VUVVBfZmF0OworCisgIF9fZ21wbl9jcHVpZCAodmVuZG9yX3N0cmluZywgMCk7CisgIHZlbmRvcl9zdHJpbmdbMTJdID0gMDsKKworICBmbXMgPSBfX2dtcG5fY3B1aWQgKGR1bW15X3N0cmluZywgMSk7CisgIGZhbWlseSA9ICgoZm1zID4+IDgpICYgMHhmKSArICgoZm1zID4+IDIwKSAmIDB4ZmYpOworICBtb2RlbCA9ICgoZm1zID4+IDQpICYgMHhmKSArICgoZm1zID4+IDEyKSAmIDB4ZjApOworCisgIC8qIENoZWNrIGV4dGVuZGVkIGZlYXR1cmUgZmxhZ3MgKi8KKyAgX19nbXBuX2NwdWlkIChkdW1teV9zdHJpbmcsIDB4ODAwMDAwMDEpOworICBpZiAoKGR1bW15X3N0cmluZ1s0ICsgMjkgLyA4XSAmICgxIDw8ICgyOSAlIDgpKSkgPT0gMCkKKyAgICBhYm9ydCAoKTsgLyogbG9uZ21vZGUtY2FwYWJsZS1iaXQgdHVybmVkIG9mZiEgKi8KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqIFdBUk5JTkc6IGtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBjb25maWcuZ3Vlc3MgKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICBpZiAoc3RyY21wICh2ZW5kb3Jfc3RyaW5nLCAiR2VudWluZUludGVsIikgPT0gMCkKKyAgICB7CisgICAgICBzd2l0Y2ggKGZhbWlseSkKKwl7CisJY2FzZSA2OgorCSAgc3dpdGNoIChtb2RlbCkKKwkgICAgeworCSAgICBjYXNlIDB4MGY6CQkvKiBDb25yb2UgTWVyb20gS2VudHNmaWVsZCBBbGxlbmRhbGUgKi8KKwkgICAgY2FzZSAweDEwOgorCSAgICBjYXNlIDB4MTE6CisJICAgIGNhc2UgMHgxMjoKKwkgICAgY2FzZSAweDEzOgorCSAgICBjYXNlIDB4MTQ6CisJICAgIGNhc2UgMHgxNToKKwkgICAgY2FzZSAweDE2OgorCSAgICBjYXNlIDB4MTc6CQkvKiBQTlIgV29sZmRhbGUgWW9ya2ZpZWxkICovCisJICAgIGNhc2UgMHgxODoKKwkgICAgY2FzZSAweDE5OgorCSAgICBjYXNlIDB4MWQ6CQkvKiBQTlIgRHVubmluZ3RvbiAqLworCSAgICAgIENQVVZFQ19TRVRVUF9jb3JlMjsKKwkgICAgICBicmVhazsKKworCSAgICBjYXNlIDB4MWM6CQkvKiBBdG9tIFNpbHZlcnRob3JuZSAqLworCSAgICBjYXNlIDB4MjY6CQkvKiBBdG9tIExpbmNyb2Z0ICovCisJICAgIGNhc2UgMHgyNzoJCS8qIEF0b20gU2FsdHdlbGw/ICovCisJICAgIGNhc2UgMHgzNjoJCS8qIEF0b20gQ2VkYXJ2aWV3L1NhbHR3ZWxsICovCisJICAgICAgQ1BVVkVDX1NFVFVQX2F0b207CisJICAgICAgYnJlYWs7CisKKwkgICAgY2FzZSAweDFhOgkJLyogTkhNIEdhaW5lc3Rvd24gKi8KKwkgICAgY2FzZSAweDFiOgorCSAgICBjYXNlIDB4MWU6CQkvKiBOSE0gTHlubmZpZWxkL0phc3BlciAqLworCSAgICBjYXNlIDB4MWY6CisJICAgIGNhc2UgMHgyMDoKKwkgICAgY2FzZSAweDIxOgorCSAgICBjYXNlIDB4MjI6CisJICAgIGNhc2UgMHgyMzoKKwkgICAgY2FzZSAweDI0OgorCSAgICBjYXNlIDB4MjU6CQkvKiBXU00gQ2xhcmtkYWxlL0FycmFuZGFsZSAqLworCSAgICBjYXNlIDB4Mjg6CisJICAgIGNhc2UgMHgyOToKKwkgICAgY2FzZSAweDJiOgorCSAgICBjYXNlIDB4MmM6CQkvKiBXU00gR3VsZnRvd24gKi8KKwkgICAgY2FzZSAweDJlOgkJLyogTkhNIEJlY2t0b24gKi8KKwkgICAgY2FzZSAweDJmOgkJLyogV1NNIEVhZ2xldG9uICovCisJICAgICAgQ1BVVkVDX1NFVFVQX2NvcmUyOworCSAgICAgIENQVVZFQ19TRVRVUF9jb3JlaW5obTsKKwkgICAgICBicmVhazsKKworCSAgICBjYXNlIDB4Mzc6CQkvKiBTaWx2ZXJtb250ICovCisJICAgIGNhc2UgMHg0YToJCS8qIFNpbHZlcm1vbnQgKi8KKwkgICAgY2FzZSAweDRjOgkJLyogQWlybW9udCAqLworCSAgICBjYXNlIDB4NGQ6CQkvKiBTaWx2ZXJtb250L0F2b3RvbiAqLworCSAgICBjYXNlIDB4NWE6CQkvKiBTaWx2ZXJtb250ICovCisJICAgICAgQ1BVVkVDX1NFVFVQX2F0b207CisJICAgICAgQ1BVVkVDX1NFVFVQX3NpbHZlcm1vbnQ7CisJICAgICAgYnJlYWs7CisKKwkgICAgY2FzZSAweDVjOgkJLyogR29sZG1vbnQgKi8KKwkgICAgY2FzZSAweDVmOgkJLyogR29sZG1vbnQgKi8KKwkgICAgY2FzZSAweDdhOgkJLyogR29sZG1vbnQgUGx1cyAqLworCSAgICAgIENQVVZFQ19TRVRVUF9hdG9tOworCSAgICAgIENQVVZFQ19TRVRVUF9zaWx2ZXJtb250OworCSAgICAgIENQVVZFQ19TRVRVUF9nb2xkbW9udDsKKwkgICAgICBicmVhazsKKworCSAgICBjYXNlIDB4MmE6CQkvKiBTQiAqLworCSAgICBjYXNlIDB4MmQ6CQkvKiBTQkMtRVAgKi8KKwkgICAgY2FzZSAweDNhOgkJLyogSUJSICovCisJICAgIGNhc2UgMHgzZToJCS8qIElCUiBJdnl0b3duICovCisJICAgICAgQ1BVVkVDX1NFVFVQX2NvcmUyOworCSAgICAgIENQVVZFQ19TRVRVUF9jb3JlaW5obTsKKwkgICAgICBDUFVWRUNfU0VUVVBfY29yZWlzYnI7CisJICAgICAgYnJlYWs7CisJICAgIGNhc2UgMHgzYzoJCS8qIEhhc3dlbGwgY2xpZW50ICovCisJICAgIGNhc2UgMHgzZjoJCS8qIEhhc3dlbGwgc2VydmVyICovCisJICAgIGNhc2UgMHg0NToJCS8qIEhhc3dlbGwgVUxUICovCisJICAgIGNhc2UgMHg0NjoJCS8qIENyeXN0YWwgV2VsbCAqLworCSAgICAgIENQVVZFQ19TRVRVUF9jb3JlMjsKKwkgICAgICBDUFVWRUNfU0VUVVBfY29yZWluaG07CisJICAgICAgQ1BVVkVDX1NFVFVQX2NvcmVpc2JyOworCSAgICAgIC8qIFNvbWUgSGFzd2VsbHMgbGFjayBCTUkyLiAgTGV0IHRoZW0gYXBwZWFyIGFzIFNhbmR5YnJpZGdlcyBmb3IKKwkJIG5vdy4gICovCisJICAgICAgX19nbXBuX2NwdWlkIChkdW1teV9zdHJpbmcsIDcpOworCSAgICAgIGlmICgoZHVtbXlfc3RyaW5nWzAgKyBCTUkyX0JJVCAvIDhdICYgKDEgPDwgKEJNSTJfQklUICUgOCkpKSA9PSAwKQorCQlicmVhazsKKwkgICAgICBDUFVWRUNfU0VUVVBfY29yZWlod2w7CisJICAgICAgYnJlYWs7CisJICAgIGNhc2UgMHgzZDoJCS8qIEJyb2Fkd2VsbCAqLworCSAgICBjYXNlIDB4NDc6CQkvKiBCcm9hZHdlbGwgKi8KKwkgICAgY2FzZSAweDRmOgkJLyogQnJvYWR3ZWxsIHNlcnZlciAqLworCSAgICBjYXNlIDB4NTY6CQkvKiBCcm9hZHdlbGwgbWljcm9zZXJ2ZXIgKi8KKwkgICAgICBDUFVWRUNfU0VUVVBfY29yZTI7CisJICAgICAgQ1BVVkVDX1NFVFVQX2NvcmVpbmhtOworCSAgICAgIENQVVZFQ19TRVRVUF9jb3JlaXNicjsKKwkgICAgICBpZiAoKGR1bW15X3N0cmluZ1swICsgQk1JMl9CSVQgLyA4XSAmICgxIDw8IChCTUkyX0JJVCAlIDgpKSkgPT0gMCkKKwkJYnJlYWs7CisJICAgICAgQ1BVVkVDX1NFVFVQX2NvcmVpaHdsOworCSAgICAgIENQVVZFQ19TRVRVUF9jb3JlaWJ3bDsKKwkgICAgICBicmVhazsKKwkgICAgY2FzZSAweDRlOgkJLyogU2t5bGFrZSBjbGllbnQgKi8KKwkgICAgY2FzZSAweDU1OgkJLyogU2t5bGFrZSBzZXJ2ZXIgKi8KKwkgICAgY2FzZSAweDVlOgkJLyogU2t5bGFrZSAqLworCSAgICBjYXNlIDB4OGU6CQkvKiBLYWJ5bGFrZSAqLworCSAgICBjYXNlIDB4OWU6CQkvKiBLYWJ5bGFrZSAqLworCSAgICAgIENQVVZFQ19TRVRVUF9jb3JlMjsKKwkgICAgICBDUFVWRUNfU0VUVVBfY29yZWluaG07CisJICAgICAgQ1BVVkVDX1NFVFVQX2NvcmVpc2JyOworCSAgICAgIGlmICgoZHVtbXlfc3RyaW5nWzAgKyBCTUkyX0JJVCAvIDhdICYgKDEgPDwgKEJNSTJfQklUICUgOCkpKSA9PSAwKQorCQlicmVhazsKKwkgICAgICBpZiAoZ21wX3dvcmthcm91bmRfc2t5bGFrZV9jcHVpZF9idWcgKCkpCisJCWJyZWFrOworCSAgICAgIENQVVZFQ19TRVRVUF9jb3JlaWh3bDsKKwkgICAgICBDUFVWRUNfU0VUVVBfY29yZWlid2w7CisJICAgICAgQ1BVVkVDX1NFVFVQX3NreWxha2U7CisJICAgICAgYnJlYWs7CisJICAgIH0KKwkgIGJyZWFrOworCisJY2FzZSAxNToKKwkgIENQVVZFQ19TRVRVUF9wZW50aXVtNDsKKwkgIGJyZWFrOworCX0KKyAgICB9CisgIGVsc2UgaWYgKHN0cmNtcCAodmVuZG9yX3N0cmluZywgIkF1dGhlbnRpY0FNRCIpID09IDApCisgICAgeworICAgICAgc3dpdGNoIChmYW1pbHkpCisJeworCWNhc2UgMHgwZjoJCS8qIGs4ICovCisJY2FzZSAweDExOgkJLyogImZhbSAxMWgiLCBtaXggb2YgazggYW5kIGsxMCAqLworCWNhc2UgMHgxMzoKKwkgIENQVVZFQ19TRVRVUF9rODsKKwkgIGJyZWFrOworCisJY2FzZSAweDEwOgkJLyogazEwICovCisJY2FzZSAweDEyOgkJLyogazEwIChsbGFubykgKi8KKwkgIENQVVZFQ19TRVRVUF9rODsKKwkgIENQVVZFQ19TRVRVUF9rMTA7CisJICBicmVhazsKKworCWNhc2UgMHgxNDoJCS8qIGJvYmNhdCAqLworCSAgQ1BVVkVDX1NFVFVQX2s4OworCSAgQ1BVVkVDX1NFVFVQX2sxMDsKKwkgIENQVVZFQ19TRVRVUF9idDE7CisJICBicmVhazsKKworCWNhc2UgMHgxNjoJCS8qIGphZ3VhciAqLworCSAgQ1BVVkVDX1NFVFVQX2s4OworCSAgQ1BVVkVDX1NFVFVQX2sxMDsKKwkgIENQVVZFQ19TRVRVUF9idDE7CisJICBDUFVWRUNfU0VUVVBfYnQyOworCSAgYnJlYWs7CisKKwljYXNlIDB4MTU6CSAgICAvKiBidWxsZG96ZXIsIHBpbGVkcml2ZXIsIHN0ZWFtcm9sbGVyLCBleGNhdmF0b3IgKi8KKwkgIENQVVZFQ19TRVRVUF9rODsKKwkgIENQVVZFQ19TRVRVUF9rMTA7CisJICBDUFVWRUNfU0VUVVBfYmQxOworCSAgYnJlYWs7CisKKwljYXNlIDB4MTc6CSAgICAvKiB6ZW4gKi8KKwkgIENQVVZFQ19TRVRVUF96ZW47CisJICBicmVhazsKKwl9CisgICAgfQorICBlbHNlIGlmIChzdHJjbXAgKHZlbmRvcl9zdHJpbmcsICJDZW50YXVySGF1bHMiKSA9PSAwKQorICAgIHsKKyAgICAgIHN3aXRjaCAoZmFtaWx5KQorCXsKKwljYXNlIDY6CisJICBpZiAobW9kZWwgPj0gMTUpCisJICAgIENQVVZFQ19TRVRVUF9uYW5vOworCSAgYnJlYWs7CisJfQorICAgIH0KKworICAvKiBUaGVyZSdzIG5vIHg4NiBnZW5lcmljIG1wbl9wcmVpbnZfZGl2cmVtXzEgb3IgbXBuX3ByZWludl9tb2RfMS4KKyAgICAgSW5zdGVhZCBkZWZhdWx0IHRvIHRoZSBwbGFpbiB2ZXJzaW9ucyBmcm9tIHdoaWNoZXZlciBDUFUgd2UgZGV0ZWN0ZWQuCisgICAgIFRoZSBmdW5jdGlvbiBhcmd1bWVudHMgYXJlIGNvbXBhdGlibGUsIG5vIG5lZWQgZm9yIGFueSBnbHVlIGNvZGUuICAqLworICBpZiAoZGVjaWRlZF9jcHV2ZWMucHJlaW52X2RpdnJlbV8xID09IE5VTEwpCisgICAgZGVjaWRlZF9jcHV2ZWMucHJlaW52X2RpdnJlbV8xID0ocHJlaW52X2RpdnJlbV8xX3QpZGVjaWRlZF9jcHV2ZWMuZGl2cmVtXzE7CisgIGlmIChkZWNpZGVkX2NwdXZlYy5wcmVpbnZfbW9kXzEgPT0gTlVMTCkKKyAgICBkZWNpZGVkX2NwdXZlYy5wcmVpbnZfbW9kXzEgICAgPShwcmVpbnZfbW9kXzFfdCkgICBkZWNpZGVkX2NwdXZlYy5tb2RfMTsKKworICBBU1NFUlRfQ1BVVkVDIChkZWNpZGVkX2NwdXZlYyk7CisgIENQVVZFQ19JTlNUQUxMIChkZWNpZGVkX2NwdXZlYyk7CisKKyAgLyogU2V0IHRoaXMgb25jZSB0aGUgdGhyZXNob2xkIGZpZWxkcyBhcmUgcmVhZHkuCisgICAgIFVzZSB2b2xhdGlsZSB0byBwcmV2ZW50IGl0IGdldHRpbmcgbW92ZWQuICAqLworICAqKCh2b2xhdGlsZSBpbnQgKikgJl9fZ21wbl9jcHV2ZWNfaW5pdGlhbGl6ZWQpID0gMTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2ZhdC9mYXRfZW50cnkuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvZmF0L2ZhdF9lbnRyeS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYyNDRhYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2ZhdC9mYXRfZW50cnkuYXNtCkBAIC0wLDAgKzEsMjA5IEBACitkbmwgIHg4NiBmYXQgYmluYXJ5IGVudHJ5cG9pbnRzLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBLZXZpbiBSeWRlIChvcmlnaW5hbCB4ODZfMzIgY29kZSkgYW5kCitkbmwgIFRvcmJqb3JuIEdyYW5sdW5kIChwb3J0IHRvIHg4Nl82NCkKKworZG5sICBDb3B5cmlnaHQgMjAwMywgMjAwOSwgMjAxMS0yMDE0LCAyMDE2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworZG5sICBGb3JjaWJseSBkaXNhYmxlIHByb2ZpbGluZy4KK2RubAorZG5sICBUaGUgZW50cnlwb2ludHMgYW5kIGluaXRzIGFyZSBzbWFsbCBlbm91Z2ggbm90IHRvIHdvcnJ5IGFib3V0LCB0aGUgcmVhbAorZG5sICByb3V0aW5lcyBhcnJpdmVkIGF0IHdpbGwgaGF2ZSBhbnkgcHJvZmlsaW5nLiAgQWxzbywgdGhlIHdheSB0aGUgY29kZQorZG5sICBoZXJlIGVuZHMgd2l0aCBhIGp1bXAgbWVhbnMgd2Ugd29uJ3Qgd29yayBwcm9wZXJseSB3aXRoIHRoZQorZG5sICAiaW5zdHJ1bWVudCIgcHJvZmlsaW5nIHNjaGVtZSBhbnl3YXkuCisKK2RlZmluZShgV0FOVF9QUk9GSUxJTkcnLG5vKQorCisKK2RubCAgV2UgZGVmaW5lIFBSRVRFTkRfUElDIGFzIGEgaGVscGVyIHN5bWJvbCwgdGhlIHVzZSBpdCBmb3Igc3VwcHJlc3NpbmcKK2RubCAgbm9ybWFsLCBmYXN0IGNhbGwgY29kZSwgc2luY2UgdGhhdCB0cmlnZ2VycyBwcm9ibGVtcyBvbiBEYXJ3aW4sIE9wZW5CU0QKK2RubCAgYW5kIHNvbWUgdmVyc2lvbnMgb2YgR05VL0xpbnV4LiAgVGhpcyB3aWxsIGdvIGF3YXkgd2hlbiBzeW1ib2wgaGlkaW5nIGlzCitkbmwgIGZpbmlzaGVkLgorCitpZmRlZihgREFSV0lOJywKK2BkZWZpbmUoYFBSRVRFTkRfUElDJyknKQoraWZkZWYoYE9QRU5CU0QnLAorYGRlZmluZShgUFJFVEVORF9QSUMnKScpCitpZmRlZihgTElOVVgnLAorYGRlZmluZShgUFJFVEVORF9QSUMnKScpCitpZmRlZihgUElDJywKK2BkZWZpbmUoYFBSRVRFTkRfUElDJyknKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCisJVEVYVAorCitkbmwgIFVzYWdlOiBGQVRfRU5UUlkobmFtZSwgb2Zmc2V0KQorZG5sCitkbmwgIEVtaXQgYSBmYXQgYmluYXJ5IGVudHJ5cG9pbnQgZnVuY3Rpb24gb2YgdGhlIGdpdmVuIG5hbWUuICBUaGlzIGlzIHRoZQorZG5sICBub3JtYWwgZW50cnkgZm9yIGFwcGxpY2F0aW9ucywgZWcuIF9fZ21wbl9hZGRfbi4KK2RubAorZG5sICBUaGUgY29kZSBzaW1wbHkganVtcHMgdGhyb3VnaCB0aGUgZnVuY3Rpb24gcG9pbnRlciBpbiBfX2dtcG5fY3B1dmVjIGF0CitkbmwgIHRoZSBnaXZlbiAib2Zmc2V0IiAoaW4gYnl0ZXMpLgorZG5sCitkbmwgIEZvciBub24tUElDLCB0aGUganVtcHMgYXJlIDUgYnl0ZXMgZWFjaCwgYWxpZ25pbmcgdGhlbSB0byA4IHNob3VsZCBiZQorZG5sICBmaW5lIGZvciBhbGwgeDg2cy4KK2RubAorZG5sICBGb3IgRUxGL0RBUldJTiBQSUMsIHRoZSBqdW1wcyBhcmUgMjAgYnl0ZXMgZWFjaCwgYW5kIGFyZSBiZXN0IGFsaWduZWQgdG8KK2RubCAgMTYgdG8gZW5zdXJlIGF0IGxlYXN0IHRoZSBmaXJzdCB0d28gaW5zdHJ1Y3Rpb25zIGRvbid0IGNyb3NzIGEgY2FjaGUgbGluZQorZG5sICBib3VuZGFyeS4KK2RubAorZG5sICBGb3IgRE9TNjQsIHRoZSBqdW1wcyBhcmUgNiBieXRlcy4gIFRoZSBzYW1lIGZvcm0gd29ya3MgYWxzbyBmb3IgR05VL0xpbnV4CitkbmwgIChhdCBsZWFzdCB3aXRoIGNlcnRhaW4gYXNzZW1ibGVyL2xpbmtlcnMpIGJ1dCBGcmVlQlNEIDguMiBjcmFzaGVzLiAgTm90CitkbmwgIHRlc3RlZCBvbiBEYXJ3aW4sIFNsb3dhcmlzLCBOZXRCU0QsIGV0Yy4KK2RubAorZG5sICBOb3RlIHRoZSBleHRyYSBgJyBhaGVhZCBvZiBQUk9MT0dVRSBvYnNjdXJlcyBpdCBmcm9tIHRoZSBIQVZFX05BVElWRQorZG5sICBncmVwcGluZyBpbiBjb25maWd1cmUsIHN0b3BwaW5nIHRoYXQgY29kZSB0cnlpbmcgdG8gZXZhbCBzb21ldGhpbmcgd2l0aAorZG5sICAkMSBpbiBpdC4KKworZGVmaW5lKEZBVF9FTlRSWSwKK200X2Fzc2VydF9udW1hcmdzKDIpCitgaWZkZWYoYEhPU1RfRE9TNjQnLAorYAlBTElHTig4KQorYCdQUk9MT0dVRSgkMSkKKwlqbXAJKiQyK0dTWU1fUFJFRklYYCdfX2dtcG5fY3B1dmVjKCVyaXApCitFUElMT0dVRSgpCisnLAorYAlBTElHTihpZmRlZihgUElDJywxNiw4KSkKK2AnUFJPTE9HVUUoJDEpCitpZmRlZihgUFJFVEVORF9QSUMnLAorYAlMRUEoCUdTWU1fUFJFRklYYCdfX2dtcG5fY3B1dmVjLCAlcmF4KQorCWptcAkqJDIoJXJheCkKKycsYGRubCBub24tUElDCisJam1wCSpHU1lNX1BSRUZJWGAnX19nbXBuX2NwdXZlYyskMgorJykKK0VQSUxPR1VFKCkKKycpJykKKworCitkbmwgIEZBVF9FTlRSWSBmb3IgZWFjaCBDUFVWRUNfRlVOQ1NfTElTVAorZG5sCisKK2RlZmluZShgQ1BVVkVDX29mZnNldCcsMCkKK2ZvcmVhY2goaSwKK2BGQVRfRU5UUlkoTVBOKGkpLENQVVZFQ19vZmZzZXQpCitkZWZpbmUoYENQVVZFQ19vZmZzZXQnLGV2YWwoQ1BVVkVDX29mZnNldCArIDgpKScsCitDUFVWRUNfRlVOQ1NfTElTVCkKKworCitkbmwgIFVzYWdlOiBGQVRfSU5JVChuYW1lLCBvZmZzZXQpCitkbmwKK2RubCAgRW1pdCBhIGZhdCBiaW5hcnkgaW5pdGlhbGl6ZXIgZnVuY3Rpb24gb2YgdGhlIGdpdmVuIG5hbWUuICBUaGVzZQorZG5sICBmdW5jdGlvbnMgYXJlIHRoZSBpbml0aWFsIHZhbHVlcyBmb3IgdGhlIHBvaW50ZXJzIGluIF9fZ21wbl9jcHV2ZWMuCitkbmwKK2RubCAgVGhlIGNvZGUgc2ltcGx5IGNhbGxzIF9fZ21wbl9jcHV2ZWNfaW5pdCwgYW5kIHRoZW4ganVtcHMgYmFjayB0aHJvdWdoCitkbmwgIHRoZSBfX2dtcG5fY3B1dmVjIHBvaW50ZXIsIGF0IHRoZSBnaXZlbiAib2Zmc2V0IiAoaW4gYnl0ZXMpLgorZG5sICBfX2dtcG5fY3B1dmVjX2luaXQgd2lsbCBoYXZlIHN0b3JlZCB0aGUgYWRkcmVzcyBvZiB0aGUgc2VsZWN0ZWQKK2RubCAgaW1wbGVtZW50YXRpb24gdGhlcmUuCitkbmwKK2RubCAgT25seSBvbmUgb2YgdGhlc2Ugcm91dGluZXMgd2lsbCBiZSBleGVjdXRlZCwgYW5kIG9ubHkgb25jZSwgc2luY2UgYWZ0ZXIKK2RubCAgdGhhdCBhbGwgdGhlIF9fZ21wbl9jcHV2ZWMgcG9pbnRlcnMgZ28gdG8gcmVhbCByb3V0aW5lcy4gIFNvIHRoZXJlJ3Mgbm8KK2RubCAgbmVlZCBmb3IgYW55dGhpbmcgc3BlY2lhbCBoZXJlLCBqdXN0IHNvbWV0aGluZyBzbWFsbCBhbmQgc2ltcGxlLiAgVG8KK2RubCAga2VlcCBjb2RlIHNpemUgZG93biwgImZhdF9pbml0IiBpcyBhIHNoYXJlZCBiaXQgb2YgY29kZSwgYXJyaXZlZCBhdAorZG5sICB3aXRoIHRoZSBvZmZzZXQgaW4gJWFsLiAgJWFsIGlzIHVzZWQgc2luY2UgdGhlIG1vdmIgaW5zdHJ1Y3Rpb24gaXMgMgorZG5sICBieXRlcyB3aGVyZSAlZWF4IHdvdWxkIGJlIDQuCitkbmwKK2RubCAgTm90ZSBoYXZpbmcgYFBST0xPR1VFIGluIEZBVF9JTklUIG9ic2N1cmVzIHRoYXQgUFJPTE9HVUUgZnJvbSB0aGUKK2RubCAgSEFWRV9OQVRJVkUgZ3JlcHBpbmcgaW4gY29uZmlndXJlLCBwcmV2ZW50aW5nIHRoYXQgY29kZSB0cnlpbmcgdG8gZXZhbAorZG5sICBzb21ldGhpbmcgd2l0aCAkMSBpbiBpdC4KK2RubAorZG5sICBXZSBuZWVkIHRvIHByZXNlcnZlIHBhcmFtZXRlciByZWdpc3RlcnMgb3ZlciB0aGUgX19nbXBuX2NwdXZlY19pbml0IGNhbGwKKworZGVmaW5lKEZBVF9JTklULAorbTRfYXNzZXJ0X251bWFyZ3MoMikKK2BQUk9MT0dVRSgkMSkKKwltb3YJJGAnJDIsICVhbAorCWptcAlMKGZhdF9pbml0KQorRVBJTE9HVUUoKQorJykKKworZG5sICBGQVRfSU5JVCBmb3IgZWFjaCBDUFVWRUNfRlVOQ1NfTElTVAorZG5sCisKK2RlZmluZShgQ1BVVkVDX29mZnNldCcsMCkKK2ZvcmVhY2goaSwKK2BGQVRfSU5JVChNUE4oaWAnX2luaXQpLENQVVZFQ19vZmZzZXQpCitkZWZpbmUoYENQVVZFQ19vZmZzZXQnLGV2YWwoQ1BVVkVDX29mZnNldCArIDEpKScsCitDUFVWRUNfRlVOQ1NfTElTVCkKKworTChmYXRfaW5pdCk6CisJQyBhbAlfX2dtcG5fY3B1dmVjIGJ5dGUgb2Zmc2V0CisKKwltb3Z6YmwJJWFsLCAlZWF4CitJRlNURChgCXB1c2gJJXJkaQknKQorSUZTVEQoYAlwdXNoCSVyc2kJJykKKwlwdXNoCSVyZHgKKwlwdXNoCSVyY3gKKwlwdXNoCSVyOAorCXB1c2gJJXI5CisJcHVzaAklcmF4CitJRkRPUyhgCXN1YgkkMzIsICVyc3AJJykKKwlDQUxMKAlfX2dtcG5fY3B1dmVjX2luaXQpCitJRkRPUyhgCWFkZAkkMzIsICVyc3AJJykKKwlwb3AJJXJheAorCXBvcAklcjkKKwlwb3AJJXI4CisJcG9wCSVyY3gKKwlwb3AJJXJkeAorSUZTVEQoYAlwb3AJJXJzaQknKQorSUZTVEQoYAlwb3AJJXJkaQknKQoraWZkZWYoYFBSRVRFTkRfUElDJyxgCisJTEVBKAlHU1lNX1BSRUZJWGAnX19nbXBuX2NwdXZlYywgJXIxMCkKKwlqbXAJKiglcjEwLCVyYXgsOCkKKycsYGRubCBub24tUElDCisJam1wCSpHU1lNX1BSRUZJWGAnX19nbXBuX2NwdXZlYygsJXJheCw4KQorJykKKworCitDIGxvbmcgX19nbXBuX2NwdWlkIChjaGFyIGRzdFsxMl0sIGludCBpZCk7CitDCitDIFRoaXMgaXMgY2FsbGVkIG9ubHkgMyB0aW1lcywgc28ganVzdCBzb21ldGhpbmcgc2ltcGxlIGFuZCBjb21wYWN0IGlzIGZpbmUuCitDCitDIFRoZSByY3gvZWN4IHplcm9pbmcgaGVyZSBpcyBuZWVkZWQgZm9yIHRoZSBCTUkyIGNoZWNrLgorCitkZWZpbmUoYHJwJywgIGAlcmRpJykKK2RlZmluZShgaWR4JywgYCVyc2knKQorCitQUk9MT0dVRShfX2dtcG5fY3B1aWQpCisJRlVOQ19FTlRSWSgyKQorCW1vdgklcmJ4LCAlcjgKKwltb3YJUjMyKGlkeCksIFIzMiglcmF4KQorCXhvcgklZWN4LCAlZWN4CisJY3B1aWQKKwltb3YJJWVieCwgKHJwKQorCW1vdgklZWR4LCA0KHJwKQorCW1vdgklZWN4LCA4KHJwKQorCW1vdgklcjgsICVyYngKKwlGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvZmF0L2dtcC1tcGFyYW0uaCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2ZhdC9nbXAtbXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA1Yzg5MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2ZhdC9nbXAtbXBhcmFtLmgKQEAgLTAsMCArMSw3MiBAQAorLyogRmF0IGJpbmFyeSB4ODZfNjQgZ21wLW1wYXJhbS5oIC0tIENvbXBpbGVyL21hY2hpbmUgcGFyYW1ldGVyIGhlYWRlciBmaWxlLgorCitDb3B5cmlnaHQgMTk5MSwgMTk5MywgMTk5NCwgMjAwMC0yMDAzLCAyMDA5LCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2RlZmluZSBHTVBfTElNQl9CSVRTIDY0CisjZGVmaW5lIEdNUF9MSU1CX0JZVEVTIDgKKworCisvKiBtcG5fZGl2ZXhhY3RfMSBpcyBmYXN0ZXIgdGhhbiBtcG5fZGl2cmVtXzEgYXQgYWxsIHNpemVzLiAgVGhlIG9ubHkgdGltZQorICAgdGhpcyBtaWdodCBub3QgYmUgdHJ1ZSBjdXJyZW50bHkgaXMgZm9yIGFjdHVhbCA4MDM4NiBhbmQgODA0ODYgY2hpcHMsCisgICB3aGVyZSBtcG4veDg2L2RpdmVfMS5hc20gbWlnaHQgYmUgc2xvd2VyIHRoYW4gbXBuL3g4Ni9kaXZyZW1fMS5hc20sIGJ1dAorICAgdGhhdCdzIG5vdCB3b3J0aCB3b3JyeWluZyBhYm91dC4gICovCisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAwCisKKy8qIE9ubHkgc29tZSBvZiB0aGUgeDg2cyBoYXZlIGFuIG1wbl9wcmVpbnZfZGl2cmVtXzEsIGJ1dCB3ZSBzZXQKKyAgIFVTRV9QUkVJTlZfRElWUkVNXzEgc28gdGhhdCBhbGwgY2FsbGVycyB1c2UgaXQsIGFuZCB0aGVuIGxldCB0aGUKKyAgIF9fZ21wbl9jcHV2ZWMgcG9pbnRlciBnbyB0byBwbGFpbiBtcG5fZGl2cmVtXzEgaWYgdGhlcmUncyBub3QgYW4gYWN0dWFsCisgICBwcmVpbnYuICAqLworI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgMQorCisjZGVmaW5lIEJNT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgICAgICAgIDIwCisKKy8qIG1wbl9zcXJfYmFzZWNhc2UgaXMgZmFzdGVyIHRoYW4gbXBuX211bF9iYXNlY2FzZSBhdCBhbGwgc2l6ZXMsIG5vIG5lZWQKKyAgIGZvciBtcG5fc3FyIHRvIGNhbGwgdGhlIGxhdHRlci4gICovCisjZGVmaW5lIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQgMAorCisvKiBTZW5zaWJsZSBmYWxsYmFja3MgZm9yIHRoZXNlLCB3aGVuIG5vdCB0YWtlbiBmcm9tIGEgY3B1LXNwZWNpZmljCisgICBnbXAtbXBhcmFtLmguICAqLworI2RlZmluZSBNVUxfVE9PTTIyX1RIUkVTSE9MRCAgICAgIDIwCisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAxMzAKKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAzMAorI2RlZmluZSBTUVJfVE9PTTNfVEhSRVNIT0xEICAgICAgMjAwCisKKy8qIFRoZXNlIGFyZSB2YWx1ZXMgbW9yZSBvciBsZXNzIGluIHRoZSBtaWRkbGUgb2Ygd2hhdCB0aGUgdHlwaWNhbCB4ODYgY2hpcHMKKyAgIGNvbWUgb3V0IGFzLiAgRm9yIGEgZmF0IGJpbmFyeSBpdCdzIG5lY2Vzc2FyeSB0byBoYXZlIHZhbHVlcyBmb3IgdGhlc2UsCisgICBzaW5jZSB0aGUgZGVmYXVsdHMgZm9yIE1VTF9GRlRfVEFCTEUgYW5kIFNRUl9GRlRfVEFCTEUgb3RoZXJ3aXNlIGNvbWUgb3V0CisgICBhcyBub24tY29uc3RhbnQgYXJyYXkgaW5pdGlhbGl6ZXJzLiAgRklYTUU6IFBlcmhhcHMgdGhlc2Ugc2hvdWxkIGJlIGRvbmUKKyAgIGluIHRoZSBjcHV2ZWMgc3RydWN0dXJlIGxpa2Ugb3RoZXIgdGhyZXNob2xkcy4gICovCisjZGVmaW5lIE1VTF9GRlRfVEFCTEUgIHsgNDY0LCA5MjgsIDE5MjAsIDM1ODQsIDEwMjQwLCA0MDk2MCwgMCB9CisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgNDAwCisjZGVmaW5lIE1VTF9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAyMDAwCisKKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRSAgeyA1MjgsIDExODQsIDE5MjAsIDQ2MDgsIDE0MzM2LCA0MDk2MCwgMCB9CisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgNTAwCisjZGVmaW5lIFNRUl9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAzMDAwCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9mYXQvbW9kXzEuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2ZhdC9tb2RfMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMTQ5Y2MKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9mYXQvbW9kXzEuYwpAQCAtMCwwICsxLDMyIEBACisvKiBGYXQgYmluYXJ5IGZhbGxiYWNrIG1wbl9tb2RfMS4KKworQ29weXJpZ2h0IDIwMDMsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKworI2luY2x1ZGUgIm1wbi9nZW5lcmljL21vZF8xLmMiCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9mYXQvbXVsX2Jhc2VjYXNlLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9mYXQvbXVsX2Jhc2VjYXNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDllYjQ3MQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2ZhdC9tdWxfYmFzZWNhc2UuYwpAQCAtMCwwICsxLDMyIEBACisvKiBGYXQgYmluYXJ5IGZhbGxiYWNrIG1wbl9tdWxfYmFzZWNhc2UuCisKK0NvcHlyaWdodCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisKKyNpbmNsdWRlICJtcG4vZ2VuZXJpYy9tdWxfYmFzZWNhc2UuYyIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2ZhdC9tdWxsb19iYXNlY2FzZS5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvZmF0L211bGxvX2Jhc2VjYXNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y4NmJlNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2ZhdC9tdWxsb19iYXNlY2FzZS5jCkBAIC0wLDAgKzEsMzIgQEAKKy8qIEZhdCBiaW5hcnkgZmFsbGJhY2sgbXBuX211bGxvX2Jhc2VjYXNlLgorCitDb3B5cmlnaHQgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworCisjaW5jbHVkZSAibXBuL2dlbmVyaWMvbXVsbG9fYmFzZWNhc2UuYyIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2ZhdC9yZWRjXzEuYyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2ZhdC9yZWRjXzEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDI1NDAzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvZmF0L3JlZGNfMS5jCkBAIC0wLDAgKzEsMzIgQEAKKy8qIEZhdCBiaW5hcnkgZmFsbGJhY2sgbXBuX3JlZGNfMS4KKworQ29weXJpZ2h0IDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKworI2luY2x1ZGUgIm1wbi9nZW5lcmljL3JlZGNfMS5jIgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvZmF0L3JlZGNfMi5jIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvZmF0L3JlZGNfMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5MzJkNTgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9mYXQvcmVkY18yLmMKQEAgLTAsMCArMSwzMiBAQAorLyogRmF0IGJpbmFyeSBmYWxsYmFjayBtcG5fcmVkY18yLgorCitDb3B5cmlnaHQgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworCisjaW5jbHVkZSAibXBuL2dlbmVyaWMvcmVkY18yLmMiCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9mYXQvc3FyX2Jhc2VjYXNlLmMgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9mYXQvc3FyX2Jhc2VjYXNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFjNWRjZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2ZhdC9zcXJfYmFzZWNhc2UuYwpAQCAtMCwwICsxLDMyIEBACisvKiBGYXQgYmluYXJ5IGZhbGxiYWNrIG1wbl9zcXJfYmFzZWNhc2UuCisKK0NvcHlyaWdodCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisKKyNpbmNsdWRlICJtcG4vZ2VuZXJpYy9zcXJfYmFzZWNhc2UuYyIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2djZF8xMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9nY2RfMTEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5YjNiY2MKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9nY2RfMTEuYXNtCkBAIC0wLDAgKzEsMTE0IEBACitkbmwgIEFNRDY0IG1wbl9nY2RfMTEgLS0gMSB4IDEgZ2NkLgorCitkbmwgIEJhc2VkIG9uIHRoZSBLNyBnY2RfMS5hc20sIGJ5IEtldmluIFJ5ZGUuICBSZWhhY2tlZCBmb3IgQU1ENjQgYnkgVG9yYmpvcm4KK2RubCAgR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDAtMjAwMiwgMjAwNSwgMjAwOSwgMjAxMSwgMjAxMiwgMjAxNyBGcmVlIFNvZnR3YXJlCitkbmwgIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MJICAgICBjeWNsZXMvYml0CitDIEFNRCBLOCxLOQkgNS41CitDIEFNRCBLMTAJID8KK0MgQU1EIGJkMQkgPworQyBBTUQgYmQyCSA/CitDIEFNRCBiZDMJID8KK0MgQU1EIGJkNAkgPworQyBBTUQgYnQxCSA3LjEKK0MgQU1EIGJ0MgkgPworQyBBTUQgem4xCSA/CitDIEFNRCB6bjIJID8KK0MgSW50ZWwgUDQJID8KK0MgSW50ZWwgQ05SCSA/CitDIEludGVsIFBOUgkgPworQyBJbnRlbCBOSE0JID8KK0MgSW50ZWwgV1NNCSA/CitDIEludGVsIFNCUgkgPworQyBJbnRlbCBJQlIJID8KK0MgSW50ZWwgSFdMCSA/CitDIEludGVsIEJXTAkgPworQyBJbnRlbCBTS0wJID8KK0MgSW50ZWwgYXRvbQkgOS4xCitDIEludGVsIFNMTQkgNi45CitDIEludGVsIEdMTQkgNi4wCitDIEludGVsIEdMTSsJIDUuOAorQyBWSUEgbmFubwkgPworCisKK0MgY3R6X3RhYmxlW25dIGlzIHRoZSBudW1iZXIgb2YgdHJhaWxpbmcgemVyb3Mgb24gbiwgb3IgTUFYU0hJRlQgaWYgbj09MC4KKworZGVmbGl0KE1BWFNISUZULCA3KQorZGVmbGl0KE1BU0ssIGV2YWwoKG00X2xzaGlmdCgxLE1BWFNISUZUKSktMSkpCisKK0RFRl9PQkpFQ1QoY3R6X3RhYmxlLDY0KQorCS5ieXRlCU1BWFNISUZUCitmb3Jsb29wKGksMSxNQVNLLAorYAkuYnl0ZQltNF9jb3VudF90cmFpbGluZ196ZXJvcyhpKQorJykKK0VORF9PQkpFQ1QoY3R6X3RhYmxlKQorCitkZWZpbmUoYHUwJywgICAgYCVyZGknKQorZGVmaW5lKGB2MCcsICAgIGAlcnNpJykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oNjQpCitQUk9MT0dVRShtcG5fZ2NkXzExKQorCUZVTkNfRU5UUlkoMikKKwlMRUEoCWN0el90YWJsZSwgJXI4KQorCWptcAlMKGVudCkKKworCUFMSUdOKDE2KQorTCh0b3ApOgljbW92YwklcmR4LCB1MAkJQyB1ID0gfHUgLSB2fAorCWNtb3ZjCSVyYXgsIHYwCQlDIHYgPSBtaW4odSx2KQorTChtaWQpOglhbmQJJE1BU0ssIFIzMiglcmR4KQorCW1vdnpibAkoJXI4LCVyZHgpLCBSMzIoJXJjeCkKKwlqeglMKHNoaWZ0X2Fsb3QpCisJc2hyCVI4KCVyY3gpLCB1MAorTChlbnQpOgltb3YJdTAsICVyYXgKKwltb3YJdjAsICVyZHgKKwlzdWIJdTAsICVyZHgKKwlzdWIJdjAsIHUwCisJam56CUwodG9wKQorCitMKGVuZCk6CUMgcmF4ID0gcmVzdWx0CisJQyByZHggPSAwIGZvciB0aGUgYmVuZWZpdCBvZiBpbnRlcm5hbCBnY2RfMjIgY2FsbAorCUZVTkNfRVhJVCgpCisJcmV0CisKK0woc2hpZnRfYWxvdCk6CisJc2hyCSRNQVhTSElGVCwgdTAKKwltb3YJdTAsICVyZHgKKwlqbXAJTChtaWQpCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9nY2RfMjIuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvZ2NkXzIyLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGY5ODVmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvZ2NkXzIyLmFzbQpAQCAtMCwwICsxLDE2MyBAQAorZG5sICBBTUQ2NCBtcG5fZ2NkXzIyLiAgQXNzdW1lcyB1c2VsZXNzIGJzZiwgdXNlbGVzcyBzaHJkLCBubyB0emNudCwgbm8gc2hseC4KK2RubCAgV2UgYWN0dWFsbHkgdXNlIHR6Y250IGhlcmUsIHdoZW4gdGFibGUgY2Fubm90IGNvdW50IGJpdHMsIGFzIHR6Y250IGFsd2F5cworZG5sICB3b3JrcyBmb3Igb3VyIHVzZSwgYW5kIGhlbHBzIGEgbG90IGZvciBjZXJ0YWluIENQVXMuCisKK2RubCAgQ29weXJpZ2h0IDIwMTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDCSAgICAgY3ljbGVzL2JpdAorQyBBTUQgSzgsSzkJIDguOQorQyBBTUQgSzEwCSA4LjgKK0MgQU1EIGJkMQkgOS43CitDIEFNRCBiZDIJIDcuOAorQyBBTUQgYmQzCSA/CitDIEFNRCBiZDQJIDcuNAorQyBBTUQgYnQxCSA5LjIKK0MgQU1EIGJ0MgkgOS4xCitDIEFNRCB6bjEJIDcuNQorQyBBTUQgem4yCSA3LjUKK0MgSW50ZWwgUDQJID8KK0MgSW50ZWwgQ05SCTEwLjUKK0MgSW50ZWwgUE5SCTEwLjUKK0MgSW50ZWwgTkhNCSA5LjcKK0MgSW50ZWwgV1NNCSA5LjcKK0MgSW50ZWwgU0JSCTEwLjcKK0MgSW50ZWwgSUJSCSA/CitDIEludGVsIEhXTAkgOS41CitDIEludGVsIEJXTAkgOC43CitDIEludGVsIFNLTAkgOC42CitDIEludGVsIGF0b20JMTguOQorQyBJbnRlbCBTTE0JMTQuMAorQyBJbnRlbCBHTE0JIDkuOAorQyBJbnRlbCBHTE0rCSA4LjgKK0MgVklBIG5hbm8JID8KKworCitDIGN0el90YWJsZVtuXSBpcyB0aGUgbnVtYmVyIG9mIHRyYWlsaW5nIHplcm9zIG9uIG4sIG9yIE1BWFNISUZUIGlmIG49PTAuCisKK2RlZmxpdChNQVhTSElGVCwgOCkKK2RlZmxpdChNQVNLLCBldmFsKChtNF9sc2hpZnQoMSxNQVhTSElGVCkpLTEpKQorCitERUZfT0JKRUNUKGN0el90YWJsZSw2NCkKKwkuYnl0ZQlNQVhTSElGVAorZm9ybG9vcChpLDEsTUFTSywKK2AJLmJ5dGUJbTRfY291bnRfdHJhaWxpbmdfemVyb3MoaSkKKycpCitFTkRfT0JKRUNUKGN0el90YWJsZSkKKworZGVmaW5lKGB1MScsICAgIGAlcmRpJykKK2RlZmluZShgdTAnLCAgICBgJXJzaScpCitkZWZpbmUoYHYxJywgICAgYCVyZHgnKQorZGVmaW5lKGB2MF9wYXJhbScsIGAlcmN4JykKKworZGVmaW5lKGB2MCcsICAgIGAlcmF4JykKK2RlZmluZShgY250JywgICBgJXJjeCcpCisKK2RlZmluZShgczAnLCAgICBgJXI4JykKK2RlZmluZShgczEnLCAgICBgJXI5JykKK2RlZmluZShgdDAnLCAgICBgJXJjeCcpCitkZWZpbmUoYHQxJywgICAgYCVyMTEnKQorCitkbmwgQUJJX1NVUFBPUlQoRE9TNjQpCUMgcmV0dXJucyBtcF9kb3VibGVfbGltYl90IGluIG1lbW9yeQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDY0KQorUFJPTE9HVUUobXBuX2djZF8yMikKKwlGVU5DX0VOVFJZKDQpCisJbW92CXYwX3BhcmFtLCB2MAorCisJTEVBKAljdHpfdGFibGUsICVyMTApCisKKwlBTElHTigxNikKK0wodG9wKToJbW92CXYwLCB0MAorCXN1Ygl1MCwgdDAKKwlqeglMKGxvd3opCQlDCWp1bXAgd2hlbiBsb3cgbGltYiByZXN1bHQgPSAwCisJbW92CXYxLCB0MQorCXNiYgl1MSwgdDEKKworCW1vdgl1MCwgczAKKwltb3YJdTEsIHMxCisKKwlzdWIJdjAsIHUwCisJc2JiCXYxLCB1MQorCitMKGJjayk6CWNtb3ZjCXQwLCB1MAkJQyB1ID0gfHUgLSB2fAorCWNtb3ZjCXQxLCB1MQkJQyB1ID0gfHUgLSB2fAorCWNtb3ZjCXMwLCB2MAkJQyB2ID0gbWluKHUsdikKKwljbW92YwlzMSwgdjEJCUMgdiA9IG1pbih1LHYpCisKKwlhbmQJJE1BU0ssIFIzMih0MCkKKwltb3Z6YmwJKCVyMTAsdDApLCBSMzIoY250KQorCWp6CUwoY291bnRfYmV0dGVyKQorQyBSaWdodHNoaWZ0ICh1MSwsdTApIGludG8gKHUxLCx1MCkKK0woc2hyKToJc2hyCVI4KGNudCksIHUwCisJbW92CXUxLCB0MQorCXNocglSOChjbnQpLCB1MQorCW5lZwljbnQKKwlzaGwJUjgoY250KSwgdDEKKwlvcgl0MSwgdTAKKworCXRlc3QJdjEsIHYxCisJam56CUwodG9wKQorCXRlc3QJdTEsIHUxCisJam56CUwodG9wKQorCitMKGdjZF8xMSk6CisJbW92CXYwLCAlcmRpCitDCW1vdgl1MCwgJXJzaQorCVRDQUxMKAltcG5fZ2NkXzExKQorCitMKGNvdW50X2JldHRlcik6CisJcmVwO2JzZgl1MCwgY250CQlDIHR6Y250IQorCWptcAlMKHNocikKKworTChsb3d6KTpDIFdlIGNvbWUgaGVyZSB3aGVuIHYwIC0gdTAgPSAwCisJQyAxLiBJZiB2MSAtIHUxID0gMCwgdGhlbiBnY2QgaXMgdSA9IHYuCisJQyAyLiBFbHNlIGNvbXB1dGUgZ2NkXzIxKHt2MSx2MH0sIHx1MS12MXwpCisJbW92CXYxLCB0MAorCXN1Ygl1MSwgdDAKKwlqZQlMKGVuZCkKKworCXhvcgl0MSwgdDEKKwltb3YJdTAsIHMwCisJbW92CXUxLCBzMQorCW1vdgl1MSwgdTAKKwl4b3IJdTEsIHUxCisJc3ViCXYxLCB1MAorCWptcAlMKGJjaykKKworTChlbmQpOglDIG1vdgl2MCwgJXJheAorCUMgbW92CXYxLCAlcmR4CisJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2dtcC1tcGFyYW0uaCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjk0ZmI3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvZ21wLW1wYXJhbS5oCkBAIC0wLDAgKzEsMjE3IEBACisvKiBBTUQgSzgtSzEwIGdtcC1tcGFyYW0uaCAtLSBDb21waWxlci9tYWNoaW5lIHBhcmFtZXRlciBoZWFkZXIgZmlsZS4KKworQ29weXJpZ2h0IDE5OTEsIDE5OTMsIDE5OTQsIDIwMDAtMjAxMCwgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2RlZmluZSBHTVBfTElNQl9CSVRTIDY0CisjZGVmaW5lIEdNUF9MSU1CX0JZVEVTIDgKKworCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNAorI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgMworI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAxNAorI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICAgICAyOAorI2RlZmluZSBQUkVJTlZfTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgNworI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgICAgICAgICAgICAgICAgMSAgLyogbmF0aXZlICovCisjZGVmaW5lIERJVl9RUl8yX1BJMl9USFJFU0hPTEQgICAgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgICAgICAgMTUKKworI2RlZmluZSBNVUxfVE9PTTIyX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyNworI2RlZmluZSBNVUxfVE9PTTMzX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA4MQorI2RlZmluZSBNVUxfVE9PTTQ0X1RIUkVTSE9MRCAgICAgICAgICAgICAgIDIzNAorI2RlZmluZSBNVUxfVE9PTTZIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDQxOAorI2RlZmluZSBNVUxfVE9PTThIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDQ2NgorCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTQzX1RIUkVTSE9MRCAgICAgIDk3CisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgMTYwCisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgMTQ1CisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTYzX1RIUkVTSE9MRCAgICAgMTc1CisKKyNkZWZpbmUgU1FSX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAobmF0aXZlKSAqLworI2RlZmluZSBTUVJfVE9PTTJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAzNgorI2RlZmluZSBTUVJfVE9PTTNfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDExNworI2RlZmluZSBTUVJfVE9PTTRfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDMyNworI2RlZmluZSBTUVJfVE9PTTZfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDQ0NgorI2RlZmluZSBTUVJfVE9PTThfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDU0NworCisjZGVmaW5lIE1VTE1JRF9UT09NNDJfVEhSRVNIT0xEICAgICAgICAgICAgIDM2CisKKyNkZWZpbmUgTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgU1FSTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTcKKworI2RlZmluZSBQT1dNX1NFQ19UQUJMRSAgMiw2NywzMjIsOTkxCisKKyNkZWZpbmUgTVVMX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICA1NzAgIC8qIGsgPSA1ICovCisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICA1NzAsIDV9LCB7ICAgICAyMSwgNn0sIHsgICAgIDExLCA1fSwgeyAgICAgMjMsIDZ9LCBcCisgICAgeyAgICAgMjUsIDd9LCB7ICAgICAxMywgNn0sIHsgICAgIDI3LCA3fSwgeyAgICAgMTUsIDZ9LCBcCisgICAgeyAgICAgMzEsIDd9LCB7ICAgICAyNSwgOH0sIHsgICAgIDEzLCA3fSwgeyAgICAgMjksIDh9LCBcCisgICAgeyAgICAgMTUsIDd9LCB7ICAgICAzMSwgOH0sIHsgICAgIDE3LCA3fSwgeyAgICAgMzUsIDh9LCBcCisgICAgeyAgICAgMTksIDd9LCB7ICAgICAzOSwgOH0sIHsgICAgIDIxLCA3fSwgeyAgICAgNDMsIDh9LCBcCisgICAgeyAgICAgMjMsIDd9LCB7ICAgICA0NywgOH0sIHsgICAgIDI1LCA3fSwgeyAgICAgNTEsIDh9LCBcCisgICAgeyAgICAgMjksIDl9LCB7ICAgICAxNSwgOH0sIHsgICAgIDM3LCA5fSwgeyAgICAgMTksIDh9LCBcCisgICAgeyAgICAgNDMsIDl9LCB7ICAgICAyMywgOH0sIHsgICAgIDUxLCA5fSwgeyAgICAgMjcsIDh9LCBcCisgICAgeyAgICAgNTUsMTB9LCB7ICAgICAxNSwgOX0sIHsgICAgIDQzLDEwfSwgeyAgICAgMjMsIDl9LCBcCisgICAgeyAgICAgNTUsMTB9LCB7ICAgICAzMSwgOX0sIHsgICAgIDYzLCA1fSwgeyAgIDEwMjMsIDR9LCBcCisgICAgeyAgIDI0MzEsIDV9LCB7ICAgMTI3OSwgNn0sIHsgICAgNjcxLCA3fSwgeyAgICAzNjcsIDh9LCBcCisgICAgeyAgICAxODksIDl9LCB7ICAgICA5NSwgOH0sIHsgICAgMTk1LCA5fSwgeyAgICAxMTEsMTF9LCBcCisgICAgeyAgICAgMzEsIDl9LCB7ICAgIDEzMSwxMH0sIHsgICAgIDcxLCA5fSwgeyAgICAxNTUsMTB9LCBcCisgICAgeyAgICAgNzksIDl9LCB7ICAgIDE1OSwxMH0sIHsgICAgIDg3LDExfSwgeyAgICAgNDcsMTB9LCBcCisgICAgeyAgICAxMTEsMTF9LCB7ICAgICA2MywxMH0sIHsgICAgMTM1LDExfSwgeyAgICAgNzksMTB9LCBcCisgICAgeyAgICAxNjcsMTF9LCB7ICAgICA5NSwxMH0sIHsgICAgMTkxLDExfSwgeyAgICAxMTEsMTJ9LCBcCisgICAgeyAgICAgNjMsMTF9LCB7ICAgIDE0MywxMH0sIHsgICAgMjg3LDExfSwgeyAgICAxNTksMTB9LCBcCisgICAgeyAgICAzMTksMTF9LCB7ICAgIDE3NSwxMn0sIHsgICAgIDk1LDExfSwgeyAgICAyMDcsMTN9LCBcCisgICAgeyAgICAgNjMsMTJ9LCB7ICAgIDEyNywxMX0sIHsgICAgMjU1LDEwfSwgeyAgICA1NDMsMTF9LCBcCisgICAgeyAgICAyODcsMTJ9LCB7ICAgIDE1OSwxMX0sIHsgICAgMzE5LDEwfSwgeyAgICA2MzksMTF9LCBcCisgICAgeyAgICAzMzUsMTB9LCB7ICAgIDY3MSwxMX0sIHsgICAgMzUxLDEwfSwgeyAgICA3MDMsMTJ9LCBcCisgICAgeyAgICAxOTEsMTF9LCB7ICAgIDM4MywxMH0sIHsgICAgNzY3LDExfSwgeyAgICA0MTUsMTJ9LCBcCisgICAgeyAgICAyMjMsMTN9LCB7ICAgIDEyNywxMn0sIHsgICAgMjU1LDExfSwgeyAgICA1NDMsMTJ9LCBcCisgICAgeyAgICAyODcsMTF9LCB7ICAgIDU3NSwxMH0sIHsgICAxMTUxLDExfSwgeyAgICA2MDcsMTJ9LCBcCisgICAgeyAgICAzMTksMTF9LCB7ICAgIDYzOSwxMH0sIHsgICAxMjc5LDExfSwgeyAgICA2NzEsMTJ9LCBcCisgICAgeyAgICAzNTEsMTF9LCB7ICAgIDcwMywxM30sIHsgICAgMTkxLDEyfSwgeyAgICAzODMsMTF9LCBcCisgICAgeyAgICA3NjcsMTJ9LCB7ICAgIDQxNSwxMX0sIHsgICAgODMxLDEyfSwgeyAgICA0NDcsMTR9LCBcCisgICAgeyAgICAxMjcsMTN9LCB7ICAgIDI1NSwxMn0sIHsgICAgNTQzLDExfSwgeyAgIDEwODcsMTJ9LCBcCisgICAgeyAgICA2MDcsMTF9LCB7ICAgMTIxNSwxM30sIHsgICAgMzE5LDEyfSwgeyAgICA2NzEsMTF9LCBcCisgICAgeyAgIDEzNDMsMTJ9LCB7ICAgIDczNSwxM30sIHsgICAgMzgzLDEyfSwgeyAgICA3NjcsMTF9LCBcCisgICAgeyAgIDE1MzUsMTJ9LCB7ICAgIDc5OSwxMX0sIHsgICAxNTk5LDEyfSwgeyAgICA4MzEsMTN9LCBcCisgICAgeyAgICA0NDcsMTJ9LCB7ICAgIDg5NSwxMX0sIHsgICAxNzkxLDEyfSwgeyAgICA5NTksMTR9LCBcCisgICAgeyAgICAyNTUsMTN9LCB7ICAgIDUxMSwxMn0sIHsgICAxMDg3LDEzfSwgeyAgICA1NzUsMTJ9LCBcCisgICAgeyAgIDEyMTUsMTN9LCB7ICAgIDYzOSwxMn0sIHsgICAxMzQzLDEzfSwgeyAgICA3MDMsMTJ9LCBcCisgICAgeyAgIDE0MDcsMTR9LCB7ICAgIDM4MywxM30sIHsgICAgNzY3LDEyfSwgeyAgIDE1OTksMTN9LCBcCisgICAgeyAgICA4MzEsMTJ9LCB7ICAgMTY2MywxM30sIHsgICAgODk1LDEyfSwgeyAgIDE3OTEsMTN9LCBcCisgICAgeyAgICA5NTksMTV9LCB7ICAgIDI1NSwxNH0sIHsgICAgNTExLDEzfSwgeyAgIDEwODcsMTJ9LCBcCisgICAgeyAgIDIxNzUsMTN9LCB7ICAgMTIxNSwxNH0sIHsgICAgNjM5LDEzfSwgeyAgIDE0NzEsMTR9LCBcCisgICAgeyAgICA3NjcsMTN9LCB7ICAgMTY2MywxNH0sIHsgICAgODk1LDEzfSwgeyAgIDE4NTUsMTV9LCBcCisgICAgeyAgICA1MTEsMTR9LCB7ICAgMTAyMywxM30sIHsgICAyMTc1LDE0fSwgeyAgIDExNTEsMTN9LCBcCisgICAgeyAgIDI0MzEsMTR9LCB7ICAgMTI3OSwxM30sIHsgICAyNjg3LDE0fSwgeyAgIDE0MDcsMTV9LCBcCisgICAgeyAgICA3NjcsMTR9LCB7ICAgMTUzNSwxM30sIHsgICAzMDcxLDE0fSwgeyAgIDE3OTEsMTZ9LCBcCisgICAgeyAgICA1MTEsMTV9LCB7ICAgMTAyMywxNH0sIHsgICAyNDMxLDE1fSwgeyAgIDEyNzksMTR9LCBcCisgICAgeyAgIDI4MTUsMTV9LCB7ICAgMTUzNSwxNH0sIHsgICAzMTk5LDE1fSwgeyAgIDE3OTEsMTR9LCBcCisgICAgeyAgIDM1ODMsMTZ9LCB7ICA2NTUzNiwxN30sIHsgMTMxMDcyLDE4fSwgeyAyNjIxNDQsMTl9LCBcCisgICAgeyA1MjQyODgsMjB9LCB7MTA0ODU3NiwyMX0sIHsyMDk3MTUyLDIyfSwgezQxOTQzMDQsMjN9LCBcCisgICAgezgzODg2MDgsMjR9IH0KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTNfU0laRSAxODUKKyNkZWZpbmUgTVVMX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDc1NTIKKworI2RlZmluZSBTUVJfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDQ2MCAgLyogayA9IDUgKi8KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDQ2MCwgNX0sIHsgICAgIDIxLCA2fSwgeyAgICAgMTEsIDV9LCB7ICAgICAyMywgNn0sIFwKKyAgICB7ICAgICAxMiwgNX0sIHsgICAgIDI1LCA2fSwgeyAgICAgMjcsIDd9LCB7ICAgICAxNCwgNn0sIFwKKyAgICB7ICAgICAyOSwgN30sIHsgICAgIDE1LCA2fSwgeyAgICAgMzEsIDd9LCB7ICAgICAyOSwgOH0sIFwKKyAgICB7ICAgICAxNSwgN30sIHsgICAgIDMyLCA4fSwgeyAgICAgMTcsIDd9LCB7ICAgICAzNSwgOH0sIFwKKyAgICB7ICAgICAxOSwgN30sIHsgICAgIDM5LCA4fSwgeyAgICAgMjEsIDd9LCB7ICAgICA0MywgOH0sIFwKKyAgICB7ICAgICAyNSwgN30sIHsgICAgIDUxLCA4fSwgeyAgICAgMjksIDl9LCB7ICAgICAxNSwgOH0sIFwKKyAgICB7ICAgICAzNSwgOX0sIHsgICAgIDE5LCA4fSwgeyAgICAgNDMsIDl9LCB7ICAgICAyMywgOH0sIFwKKyAgICB7ICAgICA1MSwgOX0sIHsgICAgIDI3LCA4fSwgeyAgICAgNTUsMTB9LCB7ICAgICAxNSwgOX0sIFwKKyAgICB7ICAgICAzMSwgOH0sIHsgICAgIDYzLCA5fSwgeyAgICAgNDMsMTB9LCB7ICAgICAyMywgOX0sIFwKKyAgICB7ICAgICA1NSwxMX0sIHsgICAgIDE1LDEwfSwgeyAgICAgMzEsIDl9LCB7ICAgICA3MSwxMH0sIFwKKyAgICB7ICAgICAzOSwgOX0sIHsgICAgIDgzLDEwfSwgeyAgICAgNDcsIDZ9LCB7ICAgIDc2NywgNH0sIFwKKyAgICB7ICAgMzI2MywgNX0sIHsgICAxNzI3LCA0fSwgeyAgIDM0NTUsIDV9LCB7ICAgMTc5MSwgNn0sIFwKKyAgICB7ICAgIDkyNywgN30sIHsgICAgNDc5LCA2fSwgeyAgICA5NTksIDd9LCB7ICAgIDUxMSwgOH0sIFwKKyAgICB7ICAgIDI3MSwgOX0sIHsgICAgMTQ3LDEwfSwgeyAgICAgODcsMTF9LCB7ICAgICA0NywxMH0sIFwKKyAgICB7ICAgICA5NSwxMn0sIHsgICAgIDMxLDExfSwgeyAgICAgNjMsMTB9LCB7ICAgIDEzNSwxMX0sIFwKKyAgICB7ICAgICA3OSwxMH0sIHsgICAgMTY3LDExfSwgeyAgICAgOTUsMTB9LCB7ICAgIDE5MSwxMX0sIFwKKyAgICB7ICAgIDExMSwxMn0sIHsgICAgIDYzLDExfSwgeyAgICAxMjcsMTB9LCB7ICAgIDI1NSwxMX0sIFwKKyAgICB7ICAgIDE0MywxMH0sIHsgICAgMjg3LCA5fSwgeyAgICA1NzUsMTB9LCB7ICAgIDMwMywxMX0sIFwKKyAgICB7ICAgIDE1OSwxMn0sIHsgICAgIDk1LDExfSwgeyAgICAxOTEsMTB9LCB7ICAgIDM4MywgOX0sIFwKKyAgICB7ICAgIDc2NywxMH0sIHsgICAgMzk5LDExfSwgeyAgICAyMDcsMTN9LCB7ICAgICA2MywxMn0sIFwKKyAgICB7ICAgIDEyNywxMX0sIHsgICAgMjU1LDEwfSwgeyAgICA1MTEsMTF9LCB7ICAgIDI3MSwxMH0sIFwKKyAgICB7ICAgIDU0MywxMX0sIHsgICAgMjg3LDEwfSwgeyAgICA1NzUsMTJ9LCB7ICAgIDE1OSwxMX0sIFwKKyAgICB7ICAgIDMxOSwxMH0sIHsgICAgNjM5LDExfSwgeyAgICAzMzUsMTB9LCB7ICAgIDY3MSwxMX0sIFwKKyAgICB7ICAgIDM1MSwxMH0sIHsgICAgNzAzLDEyfSwgeyAgICAxOTEsMTF9LCB7ICAgIDM4MywxMH0sIFwKKyAgICB7ICAgIDc2NywxMX0sIHsgICAgNDE1LDEwfSwgeyAgICA4MzEsMTF9LCB7ICAgIDQ0NywxM30sIFwKKyAgICB7ICAgIDEyNywxMn0sIHsgICAgMjU1LDExfSwgeyAgICA1MTEsMTB9LCB7ICAgMTAyMywxMX0sIFwKKyAgICB7ICAgIDU0MywxMn0sIHsgICAgMjg3LDExfSwgeyAgICA1NzUsMTB9LCB7ICAgMTE1MSwxMX0sIFwKKyAgICB7ICAgIDYwNywxMH0sIHsgICAxMjE1LDEyfSwgeyAgICAzMTksMTF9LCB7ICAgIDYzOSwxMH0sIFwKKyAgICB7ICAgMTI3OSwxMX0sIHsgICAgNjcxLDEyfSwgeyAgICAzNTEsMTF9LCB7ICAgIDcwMywxM30sIFwKKyAgICB7ICAgIDE5MSwxMn0sIHsgICAgMzgzLDExfSwgeyAgICA3NjcsMTJ9LCB7ICAgIDQxNSwxMX0sIFwKKyAgICB7ICAgIDgzMSwxMn0sIHsgICAgNDQ3LDE0fSwgeyAgICAxMjcsMTN9LCB7ICAgIDI1NSwxMn0sIFwKKyAgICB7ICAgIDUxMSwxMX0sIHsgICAxMDIzLDEyfSwgeyAgICA1NDMsMTF9LCB7ICAgMTA4NywxMn0sIFwKKyAgICB7ICAgIDU3NSwxMX0sIHsgICAxMTUxLDEyfSwgeyAgICA2MDcsMTN9LCB7ICAgIDMxOSwxMn0sIFwKKyAgICB7ICAgIDYzOSwxMX0sIHsgICAxMjc5LDEyfSwgeyAgICA2NzEsMTF9LCB7ICAgMTM0MywxMn0sIFwKKyAgICB7ICAgIDcwMywxMX0sIHsgICAxNDA3LDEyfSwgeyAgICA3MzUsMTN9LCB7ICAgIDM4MywxMn0sIFwKKyAgICB7ICAgIDc2NywxMX0sIHsgICAxNTM1LDEyfSwgeyAgICA3OTksMTF9LCB7ICAgMTU5OSwxMn0sIFwKKyAgICB7ICAgIDgzMSwxM30sIHsgICAgNDQ3LDEyfSwgeyAgICA5NTksMTR9LCB7ICAgIDI1NSwxM30sIFwKKyAgICB7ICAgIDUxMSwxMn0sIHsgICAxMDg3LDEzfSwgeyAgICA1NzUsMTJ9LCB7ICAgMTIxNSwxM30sIFwKKyAgICB7ICAgIDYzOSwxMn0sIHsgICAxMzQzLDEzfSwgeyAgICA3MDMsMTJ9LCB7ICAgMTQwNywxNH0sIFwKKyAgICB7ICAgIDM4MywxM30sIHsgICAgNzY3LDEyfSwgeyAgIDE1OTksMTN9LCB7ICAgIDgzMSwxMn0sIFwKKyAgICB7ICAgMTY2MywxM30sIHsgICAgODk1LDEyfSwgeyAgIDE3OTEsMTN9LCB7ICAgIDk1OSwxNX0sIFwKKyAgICB7ICAgIDI1NSwxNH0sIHsgICAgNTExLDEzfSwgeyAgIDEwODcsMTJ9LCB7ICAgMjE3NSwxM30sIFwKKyAgICB7ICAgMTIxNSwxNH0sIHsgICAgNjM5LDEzfSwgeyAgIDE0NzEsMTR9LCB7ICAgIDc2NywxM30sIFwKKyAgICB7ICAgMTY2MywxNH0sIHsgICAgODk1LDEzfSwgeyAgIDE4NTUsMTV9LCB7ICAgIDUxMSwxNH0sIFwKKyAgICB7ICAgMTAyMywxM30sIHsgICAyMTc1LDE0fSwgeyAgIDExNTEsMTN9LCB7ICAgMjMwMywxNH0sIFwKKyAgICB7ICAgMTI3OSwxM30sIHsgICAyNTU5LDE0fSwgeyAgIDE0MDcsMTV9LCB7ICAgIDc2NywxNH0sIFwKKyAgICB7ICAgMTUzNSwxM30sIHsgICAzMDcxLDE0fSwgeyAgIDE3OTEsMTZ9LCB7ICAgIDUxMSwxNX0sIFwKKyAgICB7ICAgMTAyMywxNH0sIHsgICAyMzAzLDE1fSwgeyAgIDEyNzksMTR9LCB7ICAgMjY4NywxNX0sIFwKKyAgICB7ICAgMTUzNSwxNH0sIHsgICAzMTk5LDE1fSwgeyAgIDE3OTEsMTZ9LCB7ICA2NTUzNiwxN30sIFwKKyAgICB7IDEzMTA3MiwxOH0sIHsgMjYyMTQ0LDE5fSwgeyA1MjQyODgsMjB9LCB7MTA0ODU3NiwyMX0sIFwKKyAgICB7MjA5NzE1MiwyMn0sIHs0MTk0MzA0LDIzfSwgezgzODg2MDgsMjR9IH0KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTNfU0laRSAyMDMKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDUyNDgKKworI2RlZmluZSBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDM1CisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgIDE1NjA0CisKKyNkZWZpbmUgRENfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNTYKKyNkZWZpbmUgRENfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAyMjAKKyNkZWZpbmUgRENfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNTIKKyNkZWZpbmUgRENfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNTIKKworI2RlZmluZSBJTlZfTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICA1NAorI2RlZmluZSBJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDIyNgorI2RlZmluZSBJTlZfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDIxNAorCisjZGVmaW5lIEJJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgMzI3CisjZGVmaW5lIFJFRENfMV9UT19SRURDXzJfVEhSRVNIT0xEICAgICAgICAgICA0CisjZGVmaW5lIFJFRENfMl9UT19SRURDX05fVEhSRVNIT0xEICAgICAgICAgIDc5CisKKyNkZWZpbmUgTVVfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE4OTUKKyNkZWZpbmUgTVVfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgIDE4OTUKKyNkZWZpbmUgTVVQSV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAxMDYKKyNkZWZpbmUgTVVfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgIDE1ODkKKyNkZWZpbmUgTVVfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE3MTgKKworI2RlZmluZSBNQVRSSVgyMl9TVFJBU1NFTl9USFJFU0hPTEQgICAgICAgICAxNgorI2RlZmluZSBIR0NEX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgIDEyNQorI2RlZmluZSBIR0NEX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE3MworI2RlZmluZSBIR0NEX1JFRFVDRV9USFJFU0hPTEQgICAgICAgICAgICAgMzUyNAorI2RlZmluZSBHQ0RfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDU1NQorI2RlZmluZSBHQ0RFWFRfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDQ3OAorI2RlZmluZSBKQUNPQklfQkFTRV9NRVRIT0QgICAgICAgICAgICAgICAgICAgNAorCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgIDI4CisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjQ4CisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAxNjQ4CisKKyNkZWZpbmUgRkFDX0RTQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgIDEwNzUKKyNkZWZpbmUgRkFDX09ERF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvZ29sZG1vbnQvYW9ycmxzaF9uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2dvbGRtb250L2FvcnJsc2hfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZjNWQ1ZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2dvbGRtb250L2FvcnJsc2hfbi5hc20KQEAgLTAsMCArMSwzNyBAQAorZG5sICBYODYtNjQgbXBuX2FkZGxzaF9uLCBtcG5fcnNibHNoX24sIG9wdGltaXNlZCBmb3IgSW50ZWwgR29sZG1vbnQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fYWRkbHNoX24gbXBuX3JzYmxzaF9uKQoraW5jbHVkZV9tcG4oYHg4Nl82NC9rOC9hb3JybHNoX24uYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2dvbGRtb250L2FvcnNfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9nb2xkbW9udC9hb3JzX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MThmOWYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9nb2xkbW9udC9hb3JzX24uYXNtCkBAIC0wLDAgKzEsMzcgQEAKK2RubCAgWDg2LTY0IG1wbl9hZGRfbiwgbXBuX3N1Yl9uLCBvcHRpbWlzZWQgZm9yIEludGVsIEdvbGRtb250LgorCitkbmwgIENvcHlyaWdodCAyMDE4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FkZF9uIG1wbl9hZGRfbmMgbXBuX3N1Yl9uIG1wbl9zdWJfbmMpCitpbmNsdWRlX21wbihgeDg2XzY0L2NvcmVpaHdsL2FvcnNfbi5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvZ29sZG1vbnQvYW9yc211bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2dvbGRtb250L2FvcnNtdWxfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM1ZjYzMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2dvbGRtb250L2FvcnNtdWxfMS5hc20KQEAgLTAsMCArMSwzNyBAQAorZG5sICBYODYtNjQgbXBuX2FkZG11bF8xIGFuZCBtcG5fc3VibXVsXzEgb3B0aW1pc2VkIGZvciBJbnRlbCBHb2xkbW9udC4KKworZG5sICBDb3B5cmlnaHQgMjAxOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRtdWxfMSBtcG5fc3VibXVsXzEpCitpbmNsdWRlX21wbihgeDg2XzY0L2JkMS9hb3JzbXVsXzEuYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2dvbGRtb250L2dtcC1tcGFyYW0uaCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2dvbGRtb250L2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzE1MjFkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvZ29sZG1vbnQvZ21wLW1wYXJhbS5oCkBAIC0wLDAgKzEsMjY0IEBACisvKiBJbnRlbCBHb2xkbW9udCBnbXAtbXBhcmFtLmggLS0gQ29tcGlsZXIvbWFjaGluZSBwYXJhbWV0ZXIgaGVhZGVyIGZpbGUuCisKK0NvcHlyaWdodCAyMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgNjQKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgOAorCisvKiAyMjAwIE1IeiBJbnRlbCBBdG9tIEMzNzU4IEdvbGRtb250L0RlbnZlcnRvbiAqLworLyogRkZUIHR1bmluZyBsaW1pdCA9IDQ2OCwwMzAsMTIyICovCisvKiBHZW5lcmF0ZWQgYnkgdHVuZXVwLmMsIDIwMTktMTAtMTIsIGdjYyA4LjMgKi8KKworI2RlZmluZSBNT0RfMV9OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMworI2RlZmluZSBNT0RfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgNQorI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNQorI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNAorI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAxMworI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICAgICAzOAorI2RlZmluZSBQUkVJTlZfTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgOQorI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgICAgICAgICAgICAgICAgMSAgLyogbmF0aXZlICovCisjZGVmaW5lIERJVl9RUl8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAzCisjZGVmaW5lIERJVl9RUl8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVl9RUl8yX1BJMl9USFJFU0hPTEQgICAgICAgICAgICAgIDE3CisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgICAgICAgMTkKKworI2RlZmluZSBESVZfMV9WU19NVUxfMV9QRVJDRU5UICAgICAgICAgICAgIDMwMQorCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDY1CisjZGVmaW5lIE1VTF9UT09NNDRfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTc4CisjZGVmaW5lIE1VTF9UT09NNkhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjU4CisjZGVmaW5lIE1VTF9UT09NOEhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMzU3CisKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNDNfVEhSRVNIT0xEICAgICAxMjEKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxMzEKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxMjEKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNjNfVEhSRVNIT0xEICAgICAxMjkKKyNkZWZpbmUgTVVMX1RPT000M19UT19UT09NNTRfVEhSRVNIT0xEICAgICAxNzgKKworI2RlZmluZSBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTEzCisjZGVmaW5lIFNRUl9UT09NNF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjkwCisjZGVmaW5lIFNRUl9UT09NNl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMzUxCisjZGVmaW5lIFNRUl9UT09NOF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKworI2RlZmluZSBNVUxNSURfVE9PTTQyX1RIUkVTSE9MRCAgICAgICAgICAgICAzNgorCisjZGVmaW5lIE1VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIFNRUk1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE2CisKKyNkZWZpbmUgTVVMX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICA0NDAgIC8qIGsgPSA1ICovCisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICA0NDAsIDV9LCB7ICAgICAxOSwgNn0sIHsgICAgIDEwLCA1fSwgeyAgICAgMjEsIDZ9LCBcCisgICAgeyAgICAgMTEsIDV9LCB7ICAgICAyMywgNn0sIHsgICAgIDIxLCA3fSwgeyAgICAgMTEsIDZ9LCBcCisgICAgeyAgICAgMjQsIDd9LCB7ICAgICAxMywgNn0sIHsgICAgIDI3LCA3fSwgeyAgICAgMTUsIDZ9LCBcCisgICAgeyAgICAgMzEsIDd9LCB7ICAgICAyMSwgOH0sIHsgICAgIDExLCA3fSwgeyAgICAgMjQsIDh9LCBcCisgICAgeyAgICAgMTMsIDd9LCB7ICAgICAyOCwgOH0sIHsgICAgIDE1LCA3fSwgeyAgICAgMzEsIDh9LCBcCisgICAgeyAgICAgMTcsIDd9LCB7ICAgICAzNSwgOH0sIHsgICAgIDE5LCA3fSwgeyAgICAgMzksIDh9LCBcCisgICAgeyAgICAgMjEsIDl9LCB7ICAgICAxMSwgOH0sIHsgICAgIDI3LCA5fSwgeyAgICAgMTUsIDh9LCBcCisgICAgeyAgICAgMzUsIDl9LCB7ICAgICAxOSwgOH0sIHsgICAgIDQxLCA5fSwgeyAgICAgMjMsIDh9LCBcCisgICAgeyAgICAgNDcsIDl9LCB7ICAgICAyNywxMH0sIHsgICAgIDE1LCA5fSwgeyAgICAgMzksMTB9LCBcCisgICAgeyAgICAgMjMsIDl9LCB7ICAgICA1MSwxMX0sIHsgICAgIDE1LDEwfSwgeyAgICAgMzEsIDl9LCBcCisgICAgeyAgICAgNzEsMTB9LCB7ICAgICAzOSwgOX0sIHsgICAgIDgzLDEwfSwgeyAgICAgNDcsIDl9LCBcCisgICAgeyAgICAgOTUsMTB9LCB7ICAgICA1NSwxMX0sIHsgICAgIDMxLDEwfSwgeyAgICAgNzksMTF9LCBcCisgICAgeyAgICAgNDcsMTB9LCB7ICAgIDEwMywxMn0sIHsgICAgIDMxLDExfSwgeyAgICAgNjMsMTB9LCBcCisgICAgeyAgICAxMzUsMTF9LCB7ICAgICA3OSwxMH0sIHsgICAgMTU5LDExfSwgeyAgICAgOTUsMTB9LCBcCisgICAgeyAgICAxOTEsMTF9LCB7ICAgIDExMSwxMn0sIHsgICAgIDYzLDExfSwgeyAgICAxMjcsMTB9LCBcCisgICAgeyAgICAyNTUsMTF9LCB7ICAgIDE0MywxMH0sIHsgICAgMjg3LCA5fSwgeyAgICA1NzUsMTF9LCBcCisgICAgeyAgICAxNTksMTB9LCB7ICAgIDMxOSwxMn0sIHsgICAgIDk1LDExfSwgeyAgICAxOTEsMTB9LCBcCisgICAgeyAgICAzODMsIDl9LCB7ICAgIDc2NywxMX0sIHsgICAgMjA3LDEwfSwgeyAgICA0MTUsMTN9LCBcCisgICAgeyAgICAgNjMsMTJ9LCB7ICAgIDEyNywxMX0sIHsgICAgMjU1LDEwfSwgeyAgICA1MTEsMTF9LCBcCisgICAgeyAgICAyNzEsMTB9LCB7ICAgIDU0MywxMX0sIHsgICAgMjg3LDEwfSwgeyAgICA1NzUsMTF9LCBcCisgICAgeyAgICAzMDMsMTJ9LCB7ICAgIDE1OSwxMX0sIHsgICAgMzE5LDEwfSwgeyAgICA2MzksMTF9LCBcCisgICAgeyAgICAzNjcsMTJ9LCB7ICAgIDE5MSwxMX0sIHsgICAgMzgzLDEwfSwgeyAgICA3NjcsMTF9LCBcCisgICAgeyAgICA0MTUsMTJ9LCB7ICAgIDIyMywxMX0sIHsgICAgNDc5LDEzfSwgeyAgICAxMjcsMTJ9LCBcCisgICAgeyAgICAyNTUsMTF9LCB7ICAgIDU0MywxMn0sIHsgICAgMjg3LDExfSwgeyAgICA2MDcsMTJ9LCBcCisgICAgeyAgICAzMTksMTF9LCB7ICAgIDYzOSwxMn0sIHsgICAgMzUxLDExfSwgeyAgICA3MDMsMTN9LCBcCisgICAgeyAgICAxOTEsMTJ9LCB7ICAgIDM4MywxMX0sIHsgICAgNzY3LDEyfSwgeyAgICA0MTUsMTF9LCBcCisgICAgeyAgICA4MzEsMTJ9LCB7ICAgIDQ3OSwxNH0sIHsgICAgMTI3LDEzfSwgeyAgICAyNTUsMTJ9LCBcCisgICAgeyAgICA1NDMsMTF9LCB7ICAgMTA4NywxMn0sIHsgICAgNjA3LDEzfSwgeyAgICAzMTksMTJ9LCBcCisgICAgeyAgICA2NzEsMTF9LCB7ICAgMTM0MywxMn0sIHsgICAgNzAzLDExfSwgeyAgIDE0MDcsMTJ9LCBcCisgICAgeyAgICA3MzUsMTN9LCB7ICAgIDM4MywxMn0sIHsgICAgNzY3LDExfSwgeyAgIDE1MzUsMTJ9LCBcCisgICAgeyAgICA4MzEsMTN9LCB7ICAgIDQ0NywxMn0sIHsgICAgOTU5LDE0fSwgeyAgICAyNTUsMTN9LCBcCisgICAgeyAgICA1MTEsMTJ9LCB7ICAgMTAyMywxMX0sIHsgICAyMDQ3LDEyfSwgeyAgIDEwODcsMTN9LCBcCisgICAgeyAgICA1NzUsMTJ9LCB7ICAgMTIxNSwxMX0sIHsgICAyNDMxLDEwfSwgeyAgIDQ4NjMsMTN9LCBcCisgICAgeyAgICA2MzksMTJ9LCB7ICAgMTI3OSwxMX0sIHsgICAyNTU5LDEyfSwgeyAgIDEzNDMsMTN9LCBcCisgICAgeyAgICA3MDMsMTJ9LCB7ICAgMTQwNywxNH0sIHsgICAgMzgzLDEzfSwgeyAgICA3NjcsMTJ9LCBcCisgICAgeyAgIDE1MzUsMTN9LCB7ICAgIDgzMSwxMn0sIHsgICAxNzI3LDEzfSwgeyAgICA5NTksMTV9LCBcCisgICAgeyAgICAyNTUsMTR9LCB7ICAgIDUxMSwxM30sIHsgICAxMDIzLDEyfSwgeyAgIDIwNDcsMTN9LCBcCisgICAgeyAgIDEwODcsMTJ9LCB7ICAgMjE3NSwxM30sIHsgICAxMTUxLDEyfSwgeyAgIDIzMDMsMTN9LCBcCisgICAgeyAgIDEyMTUsMTJ9LCB7ICAgMjQzMSwxMX0sIHsgICA0ODYzLDE0fSwgeyAgICA2MzksMTN9LCBcCisgICAgeyAgIDEyNzksMTJ9LCB7ICAgMjU1OSwxM30sIHsgICAxMzQzLDEyfSwgeyAgIDI2ODcsMTN9LCBcCisgICAgeyAgIDE0MDcsMTJ9LCB7ICAgMjgxNSwxM30sIHsgICAxNDcxLDEyfSwgeyAgIDI5NDMsMTF9LCBcCisgICAgeyAgIDU4ODcsMTR9LCB7ICAgIDc2NywxM30sIHsgICAxNTM1LDEyfSwgeyAgIDMwNzEsMTN9LCBcCisgICAgeyAgIDE3MjcsMTR9LCB7ICAgIDg5NSwxM30sIHsgICAxNzkxLDEyfSwgeyAgIDM1ODMsMTN9LCBcCisgICAgeyAgIDE5MTksMTV9LCB7ICAgIDUxMSwxNH0sIHsgICAxMDIzLDEzfSwgeyAgIDIxNzUsMTR9LCBcCisgICAgeyAgIDExNTEsMTN9LCB7ICAgMjMwMywxMn0sIHsgICA0NjA3LDEzfSwgeyAgIDI0MzEsMTJ9LCBcCisgICAgeyAgIDQ4NjMsMTR9LCB7ICAgMTI3OSwxM30sIHsgICAyNjg3LDE0fSwgeyAgIDE0MDcsMTN9LCBcCisgICAgeyAgIDI5NDMsMTJ9LCB7ICAgNTg4NywxNX0sIHsgICAgNzY3LDE0fSwgeyAgIDE1MzUsMTN9LCBcCisgICAgeyAgIDMwNzEsMTR9LCB7ICAgMTY2MywxM30sIHsgICAzNDU1LDEyfSwgeyAgIDY5MTEsMTR9LCBcCisgICAgeyAgIDE3OTEsMTN9LCB7ICAgMzU4MywxNH0sIHsgICAxOTE5LDEzfSwgeyAgIDM4MzksMTZ9LCBcCisgICAgeyAgICA1MTEsMTV9LCB7ICAgMTAyMywxNH0sIHsgICAyNDMxLDEzfSwgeyAgIDQ4NjMsMTV9LCBcCisgICAgeyAgIDEyNzksMTR9LCB7ICAgMjk0MywxM30sIHsgICA1ODg3LDEyfSwgeyAgMTE3NzUsMTV9LCBcCisgICAgeyAgIDE1MzUsMTR9LCB7ICAgMzQ1NSwxM30sIHsgICA2OTExLDE1fSwgeyAgIDE3OTEsMTR9LCBcCisgICAgeyAgIDM4MzksMTN9LCB7ICAgNzY3OSwxMn0sIHsgIDE1MzU5LDE0fSwgeyAgIDM5NjcsMTZ9LCBcCisgICAgeyAgIDEwMjMsMTV9LCB7ICAgMjA0NywxNH0sIHsgICA0MzUxLDE1fSwgeyAgIDIzMDMsMTR9LCBcCisgICAgeyAgIDQ4NjMsMTV9LCB7ICAgMjgxNSwxNH0sIHsgICA1ODg3LDEzfSwgeyAgMTE3NzUsMTZ9LCBcCisgICAgeyAgIDE1MzUsMTV9LCB7ICAgMzA3MSwxNH0sIHsgICA2MTQzLDE1fSwgeyAgIDMzMjcsMTR9LCBcCisgICAgeyAgIDY5MTEsMTV9LCB7ICAgMzgzOSwxNH0sIHsgICA3Njc5LDEzfSwgeyAgMTUzNTksMTd9LCBcCisgICAgeyAgIDEwMjMsMTZ9LCB7ICAgMjA0NywxNX0sIHsgICA0MzUxLDE0fSwgeyAgIDg3MDMsMTV9LCBcCisgICAgeyAgIDQ4NjMsMTZ9LCB7ICAgMjU1OSwxNX0sIHsgICA1ODg3LDE0fSwgeyAgMTE3NzUsMTZ9LCBcCisgICAgeyAgIDMwNzEsMTV9LCB7ICAgNjkxMSwxNn0sIHsgICAzNTgzLDE1fSwgeyAgIDc2NzksMTR9LCBcCisgICAgeyAgMTUzNTksMTV9LCB7ICAgNzkzNSwxN30sIHsgICAyMDQ3LDE2fSwgeyAgIDQwOTUsMTV9LCBcCisgICAgeyAgIDg3MDMsMTZ9LCB7ICAgNDYwNywxNX0sIHsgICA5OTgzLDE0fSwgeyAgMTk5NjcsMTZ9LCBcCisgICAgeyAgIDUxMTksMTV9LCB7ICAxMDIzOSwxNn0sIHsgICA1NjMxLDE1fSwgeyAgMTE3NzUsMTd9LCBcCisgICAgeyAgIDMwNzEsMTZ9LCB7ICA2NTUzNiwxN30sIHsgMTMxMDcyLDE4fSwgeyAyNjIxNDQsMTl9LCBcCisgICAgeyA1MjQyODgsMjB9LCB7MTA0ODU3NiwyMX0sIHsyMDk3MTUyLDIyfSwgezQxOTQzMDQsMjN9LCBcCisgICAgezgzODg2MDgsMjR9IH0KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTNfU0laRSAyNjEKKyNkZWZpbmUgTVVMX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDQ1NDQKKworI2RlZmluZSBTUVJfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDM4MCAgLyogayA9IDUgKi8KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDM4MCwgNX0sIHsgICAgIDE5LCA2fSwgeyAgICAgMTAsIDV9LCB7ICAgICAyMSwgNn0sIFwKKyAgICB7ICAgICAxMSwgNX0sIHsgICAgIDIzLCA2fSwgeyAgICAgMTIsIDV9LCB7ICAgICAyNSwgNn0sIFwKKyAgICB7ICAgICAyNSwgN30sIHsgICAgIDEzLCA2fSwgeyAgICAgMjcsIDd9LCB7ICAgICAxNSwgNn0sIFwKKyAgICB7ICAgICAzMSwgN30sIHsgICAgIDI1LCA4fSwgeyAgICAgMTMsIDd9LCB7ICAgICAyNywgOH0sIFwKKyAgICB7ICAgICAxNSwgN30sIHsgICAgIDMxLCA4fSwgeyAgICAgMjEsIDl9LCB7ICAgICAxMSwgOH0sIFwKKyAgICB7ICAgICAyNywgOX0sIHsgICAgIDE1LCA4fSwgeyAgICAgMzMsIDl9LCB7ICAgICAxOSwgOH0sIFwKKyAgICB7ICAgICA0MSwgOX0sIHsgICAgIDIzLCA4fSwgeyAgICAgNDcsIDl9LCB7ICAgICAyNywxMH0sIFwKKyAgICB7ICAgICAxNSwgOX0sIHsgICAgIDM5LDEwfSwgeyAgICAgMjMsIDl9LCB7ICAgICA1MSwxMX0sIFwKKyAgICB7ICAgICAxNSwxMH0sIHsgICAgIDMxLCA5fSwgeyAgICAgNjcsMTB9LCB7ICAgICAzOSwgOX0sIFwKKyAgICB7ICAgICA3OSwxMH0sIHsgICAgIDU1LDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA3OSwxMX0sIFwKKyAgICB7ICAgICA0NywxMH0sIHsgICAgIDk1LDEyfSwgeyAgICAgMzEsMTF9LCB7ICAgICA2MywxMH0sIFwKKyAgICB7ICAgIDEyNywgOX0sIHsgICAgMjU1LDEwfSwgeyAgICAxMzUsMTF9LCB7ICAgICA3OSwxMH0sIFwKKyAgICB7ICAgIDE1OSwgOX0sIHsgICAgMzE5LDExfSwgeyAgICAgOTUsMTB9LCB7ICAgIDE5MSwgOX0sIFwKKyAgICB7ICAgIDM4MywxMn0sIHsgICAgIDYzLDExfSwgeyAgICAxMjcsMTB9LCB7ICAgIDI1NSwgOX0sIFwKKyAgICB7ICAgIDUxMSwxMH0sIHsgICAgMjcxLCA5fSwgeyAgICA1NDMsMTB9LCB7ICAgIDI4NywgOX0sIFwKKyAgICB7ICAgIDU3NSwxMH0sIHsgICAgMzAzLCA5fSwgeyAgICA2MDcsMTB9LCB7ICAgIDMxOSwgOX0sIFwKKyAgICB7ICAgIDYzOSwxMn0sIHsgICAgIDk1LDExfSwgeyAgICAxOTEsMTB9LCB7ICAgIDM4MywxMX0sIFwKKyAgICB7ICAgIDIwNywxM30sIHsgICAgIDYzLDEyfSwgeyAgICAxMjcsMTF9LCB7ICAgIDI1NSwxMH0sIFwKKyAgICB7ICAgIDUxMSwxMX0sIHsgICAgMjcxLDEwfSwgeyAgICA1NDMsMTF9LCB7ICAgIDI4NywxMH0sIFwKKyAgICB7ICAgIDU3NSwxMX0sIHsgICAgMzAzLDEwfSwgeyAgICA2MDcsMTF9LCB7ICAgIDMxOSwxMH0sIFwKKyAgICB7ICAgIDYzOSwxMX0sIHsgICAgMzUxLDEwfSwgeyAgICA3MDMsMTF9LCB7ICAgIDM2NywxMn0sIFwKKyAgICB7ICAgIDE5MSwxMX0sIHsgICAgNDE1LDEyfSwgeyAgICAyMjMsMTF9LCB7ICAgIDQ3OSwxM30sIFwKKyAgICB7ICAgIDEyNywxMn0sIHsgICAgMjU1LDExfSwgeyAgICA1NDMsMTJ9LCB7ICAgIDI4NywxMX0sIFwKKyAgICB7ICAgIDYwNywxMn0sIHsgICAgMzE5LDExfSwgeyAgICA2MzksMTJ9LCB7ICAgIDM1MSwxMX0sIFwKKyAgICB7ICAgIDcwMywxMH0sIHsgICAxNDA3LDEzfSwgeyAgICAxOTEsMTJ9LCB7ICAgIDM4MywxMX0sIFwKKyAgICB7ICAgIDc2NywxMn0sIHsgICAgNDc5LDE0fSwgeyAgICAxMjcsMTN9LCB7ICAgIDI1NSwxMn0sIFwKKyAgICB7ICAgIDYwNywxM30sIHsgICAgMzE5LDEyfSwgeyAgICA3MDMsMTF9LCB7ICAgMTQwNywxMn0sIFwKKyAgICB7ICAgIDczNSwxM30sIHsgICAgMzgzLDEyfSwgeyAgICA3NjcsMTF9LCB7ICAgMTUzNSwxMn0sIFwKKyAgICB7ICAgIDc5OSwxM30sIHsgICAgNDQ3LDEyfSwgeyAgICA4OTUsMTF9LCB7ICAgMTc5MSwxNH0sIFwKKyAgICB7ICAgIDI1NSwxM30sIHsgICAgNTExLDEyfSwgeyAgIDEwMjMsMTN9LCB7ICAgIDU3NSwxMn0sIFwKKyAgICB7ICAgMTE1MSwxMX0sIHsgICAyMzAzLDEyfSwgeyAgIDEyMTUsMTN9LCB7ICAgIDYzOSwxMn0sIFwKKyAgICB7ICAgMTI3OSwxM30sIHsgICAgNzAzLDEyfSwgeyAgIDE0MDcsMTR9LCB7ICAgIDM4MywxM30sIFwKKyAgICB7ICAgIDc2NywxMn0sIHsgICAxNTM1LDEzfSwgeyAgICA4MzEsMTJ9LCB7ICAgMTY2MywxM30sIFwKKyAgICB7ICAgIDg5NSwxMn0sIHsgICAxNzkxLDEzfSwgeyAgICA5NTksMTV9LCB7ICAgIDI1NSwxNH0sIFwKKyAgICB7ICAgIDUxMSwxM30sIHsgICAxMDIzLDEyfSwgeyAgIDIwNDcsMTN9LCB7ICAgMTA4NywxMn0sIFwKKyAgICB7ICAgMjE3NSwxM30sIHsgICAxMTUxLDEyfSwgeyAgIDIzMDMsMTN9LCB7ICAgMTIxNSwxMn0sIFwKKyAgICB7ICAgMjQzMSwxNH0sIHsgICAgNjM5LDEzfSwgeyAgIDEyNzksMTJ9LCB7ICAgMjU1OSwxM30sIFwKKyAgICB7ICAgMTM0MywxMn0sIHsgICAyNjg3LDEzfSwgeyAgIDE0MDcsMTJ9LCB7ICAgMjgxNSwxM30sIFwKKyAgICB7ICAgMTQ3MSwxMn0sIHsgICAyOTQzLDExfSwgeyAgIDU4ODcsMTR9LCB7ICAgIDc2NywxM30sIFwKKyAgICB7ICAgMTUzNSwxMn0sIHsgICAzMDcxLDEzfSwgeyAgIDE1OTksMTJ9LCB7ICAgMzE5OSwxM30sIFwKKyAgICB7ICAgMTY2MywxNH0sIHsgICAgODk1LDEzfSwgeyAgIDE3OTEsMTJ9LCB7ICAgMzU4MywxNX0sIFwKKyAgICB7ICAgIDUxMSwxNH0sIHsgICAxMDIzLDEzfSwgeyAgIDIxNzUsMTR9LCB7ICAgMTE1MSwxM30sIFwKKyAgICB7ICAgMjMwMywxMn0sIHsgICA0NjA3LDEzfSwgeyAgIDI0MzEsMTJ9LCB7ICAgNDg2MywxNH0sIFwKKyAgICB7ICAgMTI3OSwxM30sIHsgICAyNjg3LDE0fSwgeyAgIDE0MDcsMTN9LCB7ICAgMjk0MywxMn0sIFwKKyAgICB7ICAgNTg4NywxNX0sIHsgICAgNzY3LDE0fSwgeyAgIDE1MzUsMTN9LCB7ICAgMzE5OSwxNH0sIFwKKyAgICB7ICAgMTY2MywxM30sIHsgICAzNDU1LDEyfSwgeyAgIDY5MTEsMTR9LCB7ICAgMTc5MSwxM30sIFwKKyAgICB7ICAgMzU4MywxNH0sIHsgICAxOTE5LDE2fSwgeyAgICA1MTEsMTV9LCB7ICAgMTAyMywxNH0sIFwKKyAgICB7ICAgMjMwMywxM30sIHsgICA0NjA3LDE0fSwgeyAgIDI0MzEsMTN9LCB7ICAgNDg2MywxNX0sIFwKKyAgICB7ICAgMTI3OSwxNH0sIHsgICAyOTQzLDEzfSwgeyAgIDU4ODcsMTJ9LCB7ICAxMTc3NSwxNX0sIFwKKyAgICB7ICAgMTUzNSwxNH0sIHsgICAzNDU1LDEzfSwgeyAgIDY5MTEsMTV9LCB7ICAgMTc5MSwxNH0sIFwKKyAgICB7ICAgMzU4MywxM30sIHsgICA3MTY3LDE0fSwgeyAgIDM4MzksMTN9LCB7ICAgNzY3OSwxMn0sIFwKKyAgICB7ICAxNTM1OSwxNn0sIHsgICAxMDIzLDE1fSwgeyAgIDIwNDcsMTR9LCB7ICAgNDIyMywxNX0sIFwKKyAgICB7ICAgMjMwMywxNH0sIHsgICA0ODYzLDE1fSwgeyAgIDI1NTksMTR9LCB7ICAgNTExOSwxNX0sIFwKKyAgICB7ICAgMjgxNSwxNH0sIHsgICA1ODg3LDEzfSwgeyAgMTE3NzUsMTZ9LCB7ICAgMTUzNSwxNX0sIFwKKyAgICB7ICAgMzA3MSwxNH0sIHsgICA2MTQzLDE1fSwgeyAgIDMzMjcsMTR9LCB7ICAgNjkxMSwxNX0sIFwKKyAgICB7ICAgMzU4MywxNH0sIHsgICA3MTY3LDE1fSwgeyAgIDM4MzksMTR9LCB7ICAgNzY3OSwxM30sIFwKKyAgICB7ICAxNTM1OSwxN30sIHsgICAxMDIzLDE2fSwgeyAgIDIwNDcsMTV9LCB7ICAgNDA5NSwxNH0sIFwKKyAgICB7ICAgODE5MSwxNX0sIHsgICA0ODYzLDE2fSwgeyAgIDI1NTksMTV9LCB7ICAgNTg4NywxNH0sIFwKKyAgICB7ICAxMTc3NSwxNn0sIHsgICAzMDcxLDE1fSwgeyAgIDY5MTEsMTZ9LCB7ICAgMzU4MywxNX0sIFwKKyAgICB7ICAgNzY3OSwxNH0sIHsgIDE1MzU5LDE1fSwgeyAgIDc5MzUsMTR9LCB7ICAxNTg3MSwxN30sIFwKKyAgICB7ICAgMjA0NywxNn0sIHsgICA0MDk1LDE1fSwgeyAgIDg0NDcsMTZ9LCB7ICAgNDYwNywxNX0sIFwKKyAgICB7ICAgOTk4MywxNH0sIHsgIDE5OTY3LDE2fSwgeyAgIDUxMTksMTV9LCB7ICAxMDIzOSwxNn0sIFwKKyAgICB7ICAgNTYzMSwxNX0sIHsgIDExNzc1LDE3fSwgeyAgIDMwNzEsMTZ9LCB7ICA2NTUzNiwxN30sIFwKKyAgICB7IDEzMTA3MiwxOH0sIHsgMjYyMTQ0LDE5fSwgeyA1MjQyODgsMjB9LCB7MTA0ODU3NiwyMX0sIFwKKyAgICB7MjA5NzE1MiwyMn0sIHs0MTk0MzA0LDIzfSwgezgzODg2MDgsMjR9IH0KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTNfU0laRSAyNTkKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDM1MjAKKworI2RlZmluZSBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDYyCisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgICA4OTA3CisjZGVmaW5lIFNRUkxPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgIDEwCisjZGVmaW5lIFNRUkxPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIFNRUkxPX1NRUl9USFJFU0hPTEQgICAgICAgICAgICAgICA3MDM1CisKKyNkZWZpbmUgRENfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNTEKKyNkZWZpbmUgRENfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAxODMKKyNkZWZpbmUgRENfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNDcKKyNkZWZpbmUgRENfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgODgKKworI2RlZmluZSBJTlZfTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICA0NgorI2RlZmluZSBJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDIyNgorI2RlZmluZSBJTlZfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDIwNAorCisjZGVmaW5lIEJJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgMjY0CisjZGVmaW5lIFJFRENfMV9UT19SRURDXzJfVEhSRVNIT0xEICAgICAgICAgIDI4CisjZGVmaW5lIFJFRENfMl9UT19SRURDX05fVEhSRVNIT0xEICAgICAgICAgIDU0CisKKyNkZWZpbmUgTVVfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE1ODkKKyNkZWZpbmUgTVVfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgIDE2MjAKKyNkZWZpbmUgTVVQSV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgODMKKyNkZWZpbmUgTVVfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgIDEzMzQKKyNkZWZpbmUgTVVfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE0NzAKKworI2RlZmluZSBQT1dNX1NFQ19UQUJMRSAgMSwxNiwxOTQsNjQyCisKKyNkZWZpbmUgR0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICAgMTcKKyNkZWZpbmUgU0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAzODEKKyNkZWZpbmUgU0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgIDEwNDIKKworI2RlZmluZSBGQUNfRFNDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDIxOAorI2RlZmluZSBGQUNfT0REX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAyNQorCisjZGVmaW5lIE1BVFJJWDIyX1NUUkFTU0VOX1RIUkVTSE9MRCAgICAgICAgIDIxCisjZGVmaW5lIEhHQ0QyX0RJVjFfTUVUSE9EICAgICAgICAgICAgICAgICAgICAxICAvKiA2LjU4JSBmYXN0ZXIgdGhhbiAzICovCisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAgMTM2CisjZGVmaW5lIEhHQ0RfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTY4CisjZGVmaW5lIEhHQ0RfUkVEVUNFX1RIUkVTSE9MRCAgICAgICAgICAgICAzMDE0CisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgNDE2CisjZGVmaW5lIEdDREVYVF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMzkzCisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAgICA0ICAvKiAxLjE3JSBmYXN0ZXIgdGhhbiAzICovCisKKy8qIFR1bmV1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCB0b29rIDgwMDE5MiBzZWNvbmRzICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9nb2xkbW9udC9tdWxfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9nb2xkbW9udC9tdWxfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQxZWM1NAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2dvbGRtb250L211bF8xLmFzbQpAQCAtMCwwICsxLDM3IEBACitkbmwgIFg4Ni02NCBtcG5fbXVsXzEgb3B0aW1pc2VkIGZvciBJbnRlbCBHb2xkbW9udC4KKworZG5sICBDb3B5cmlnaHQgMjAxOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9tdWxfMSBtcG5fbXVsXzFjKQoraW5jbHVkZV9tcG4oYHg4Nl82NC9jb3JlaXNici9tdWxfMS5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvZ29sZG1vbnQvcmVkY18xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2dvbGRtb250L3JlZGNfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE5MjYzNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2dvbGRtb250L3JlZGNfMS5hc20KQEAgLTAsMCArMSwzNyBAQAorZG5sICBYODYtNjQgbXBuX3JlZGNfMSBvcHRpbWlzZWQgZm9yIEludGVsIEdvbGRtb250LgorCitkbmwgIENvcHlyaWdodCAyMDE4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX3JlZGNfMSkKK2luY2x1ZGVfbXBuKGB4ODZfNjQvazgvcmVkY18xLmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9pbnZlcnRfbGltYi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9pbnZlcnRfbGltYi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM3NWFkMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2ludmVydF9saW1iLmFzbQpAQCAtMCwwICsxLDExMiBAQAorZG5sICBBTUQ2NCBtcG5faW52ZXJ0X2xpbWIgLS0gSW52ZXJ0IGEgbm9ybWFsaXplZCBsaW1iLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3Jiam9ybiBHcmFubHVuZCBhbmQgTmllbHMgTcO2bGxlci4KKworZG5sICBDb3B5cmlnaHQgMjAwNCwgMjAwNy0yMDA5LCAyMDExLCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQwkgICAgIGN5Y2xlcy9saW1iIChhcHByb3gpCWRpdgorQyBBTUQgSzgsSzkJIDQ4CQkJIDcxCitDIEFNRCBLMTAJIDQ4CQkJIDc3CitDIEludGVsIFA0CTEzNQkJCTE2MQorQyBJbnRlbCBjb3JlMgkgNjkJCQkxMTYKK0MgSW50ZWwgY29yZWkJIDU1CQkJIDg5CitDIEludGVsIGF0b20JMTI5CQkJMTkxCitDIFZJQSBuYW5vCSA3OQkJCTE1NworCitDIHJheCByY3ggcmR4IHJkaSByc2kgcjgKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworUFJPVEVDVChgbXBuX2ludmVydF9saW1iX3RhYmxlJykKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMTYpCitQUk9MT0dVRShtcG5faW52ZXJ0X2xpbWIpCQlDCQkJS24JQzIJQ2kKKwlGVU5DX0VOVFJZKDEpCisJbW92CSVyZGksICVyYXgJCUMJCQkgMAkgMAkgMAorCXNocgkkNTUsICVyYXgJCUMJCQkgMQkgMQkgMQoraWZkZWYoYERBUldJTicsYAorCWxlYQltcG5faW52ZXJ0X2xpbWJfdGFibGUoJXJpcCksICVyOAorCWFkZAkkLTUxMiwgJXI4CisnLGAKKwlsZWEJLTUxMittcG5faW52ZXJ0X2xpbWJfdGFibGUoJXJpcCksICVyOAorJykKKwltb3Z6d2wJKCVyOCwlcmF4LDIpLCBSMzIoJXJjeCkJQwklcmN4ID0gdjAKKworCUMgdjEgPSAodjAgPDwgMTEpIC0gKHYwKnYwKmQ0MCA+PiA0MCkgLSAxCisJbW92CSVyZGksICVyc2kJCUMJCQkgMAkgMAkgMAorCW1vdglSMzIoJXJjeCksIFIzMiglcmF4KQlDCQkJIDQJIDUJIDUKKwlpbXVsCVIzMiglcmN4KSwgUjMyKCVyY3gpCUMJCQkgNAkgNQkgNQorCXNocgkkMjQsICVyc2kJCUMJCQkgMQkgMQkgMQorCWluYwklcnNpCQkJQwklcnNpID0gZDQwCisJaW11bAklcnNpLCAlcmN4CQlDCQkJIDgJMTAJIDgKKwlzaHIJJDQwLCAlcmN4CQlDCQkJMTIJMTUJMTEKKwlzYWwJJDExLCBSMzIoJXJheCkJCUMJCQkgNQkgNgkgNgorCWRlYwlSMzIoJXJheCkKKwlzdWIJUjMyKCVyY3gpLCBSMzIoJXJheCkJQwklcmF4ID0gdjEKKworCUMgdjIgPSAodjEgPDwgMTMpICsgKHYxICogKDJeNjAgLSB2MSpkNDApID4+IDQ3KQorCW1vdgkkMHgxMDAwMDAwMDAwMDAwMDAwLCAlcmN4CisJaW11bAklcmF4LCAlcnNpCQlDCQkJMTQJMTcJMTMKKwlzdWIJJXJzaSwgJXJjeAorCWltdWwJJXJheCwgJXJjeAorCXNhbAkkMTMsICVyYXgKKwlzaHIJJDQ3LCAlcmN4CisJYWRkCSVyYXgsICVyY3gJCUMJJXJjeCA9IHYyCisKKwlDIHYzID0gKHYyIDw8IDMxKSArICh2MiAqICgyXjk2IC0gdjIgKiBkNjMgKyAoKHYyID4+IDEpICYgbWFzaykpID4+IDY1KQorCW1vdgklcmRpLCAlcnNpCQlDCQkJIDAJIDAJIDAKKwlzaHIJJXJzaQkJCUMgZC8yCisJc2JiCSVyYXgsICVyYXgJCUMgLWQwID0gLShkIG1vZCAyKQorCXN1YgklcmF4LCAlcnNpCQlDIGQ2MyA9IGNlaWwoZC8yKQorCWltdWwJJXJjeCwgJXJzaQkJQyB2MiAqIGQ2MworCWFuZAklcmN4LCAlcmF4CQlDIHYyICogZDAKKwlzaHIJJXJheAkJCUMgKHYyPj4xKSAqIGQwCisJc3ViCSVyc2ksICVyYXgJCUMgKHYyPj4xKSAqIGQwIC0gdjIgKiBkNjMKKwltdWwJJXJjeAorCXNhbAkkMzEsICVyY3gKKwlzaHIJJXJkeAorCWFkZAklcmR4LCAlcmN4CQlDCSVyY3ggPSB2MworCisJbW92CSVyZGksICVyYXgKKwltdWwJJXJjeAorCWFkZAklcmRpLCAlcmF4CisJbW92CSVyY3gsICVyYXgKKwlhZGMJJXJkaSwgJXJkeAorCXN1YgklcmR4LCAlcmF4CisKKwlGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQorQVNNX0VORCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9pbnZlcnRfbGltYl90YWJsZS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9pbnZlcnRfbGltYl90YWJsZS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM5ZDU5ZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2ludmVydF9saW1iX3RhYmxlLmFzbQpAQCAtMCwwICsxLDUwIEBACitkbmwgIFRhYmxlIHVzZWQgZm9yIG1wbl9pbnZlcnRfbGltYgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3Jiam9ybiBHcmFubHVuZCBhbmQgTmllbHMgTcO2bGxlci4KKworZG5sICBDb3B5cmlnaHQgMjAwNCwgMjAwNy0yMDA5LCAyMDExLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworUFJPVEVDVChgbXBuX2ludmVydF9saW1iX3RhYmxlJykKKworQVNNX1NUQVJUKCkKK0MgVGFibGUgZW50cnkgWCBjb250YWlucyBmbG9vciAoMHg3ZmQwMCAvICgweDEwMCArIFgpKQorCisJUk9EQVRBCisJQUxJR04oMikKKwlHTE9CTCBtcG5faW52ZXJ0X2xpbWJfdGFibGUKK21wbl9pbnZlcnRfbGltYl90YWJsZToKK2Zvcmxvb3AoaSwyNTYsNTEyLTEsZG5sCitgCS52YWx1ZQlldmFsKDB4N2ZkMDAvaSkKKycpZG5sCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2sxMC9nY2RfMTEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvazEwL2djZF8xMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcyMzA5MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2sxMC9nY2RfMTEuYXNtCkBAIC0wLDAgKzEsMzcgQEAKK2RubCAgQU1ENjQgbXBuX2djZF8xMS4KKworZG5sICBDb3B5cmlnaHQgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9nY2RfMTEpCitpbmNsdWRlX21wbihgeDg2XzY0L2NvcmUyL2djZF8xMS5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvazEwL2djZF8yMi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9rMTAvZ2NkXzIyLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNThiNGNjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvazEwL2djZF8yMi5hc20KQEAgLTAsMCArMSwxNDIgQEAKK2RubCAgQU1ENjQgbXBuX2djZF8yMi4gIEFzc3VtZXMgdXNlZnVsIGJzZiwgdXNlbGVzcyBzaHJkLCBubyB0emNudCwgbm8gc2hseC4KKworZG5sICBDb3B5cmlnaHQgMjAxOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MJICAgICBjeWNsZXMvYml0CitDIEFNRCBLOCxLOQkgPworQyBBTUQgSzEwCSA3LjQKK0MgQU1EIGJkMQkgOS45CitDIEFNRCBiZDIJID8KK0MgQU1EIGJkMwkgPworQyBBTUQgYmQ0CSA/CitDIEFNRCBidDEJID8KK0MgQU1EIGJ0MgkgPworQyBBTUQgem4xCSA/CitDIEFNRCB6bjIJID8KK0MgSW50ZWwgUDQJID8KK0MgSW50ZWwgQ05SCSA/CitDIEludGVsIFBOUgkgPworQyBJbnRlbCBOSE0JIDkuMgorQyBJbnRlbCBXU00JIDkuMAorQyBJbnRlbCBTQlIJID8KK0MgSW50ZWwgSUJSCSA/CitDIEludGVsIEhXTAkgPworQyBJbnRlbCBCV0wJID8KK0MgSW50ZWwgU0tMCSA/CitDIEludGVsIGF0b20JID8KK0MgSW50ZWwgU0xNCSA/CitDIEludGVsIEdMTQkgPworQyBJbnRlbCBHTE0rCSA/CitDIFZJQSBuYW5vCSA/CisKKworZGVmaW5lKGB1MScsICAgIGAlcmRpJykKK2RlZmluZShgdTAnLCAgICBgJXJzaScpCitkZWZpbmUoYHYxJywgICAgYCVyZHgnKQorZGVmaW5lKGB2MF9wYXJhbScsIGAlcmN4JykKKworZGVmaW5lKGB2MCcsICAgIGAlcmF4JykKK2RlZmluZShgY250JywgICBgJXJjeCcpCisKK2RlZmluZShgczAnLCAgICBgJXI4JykKK2RlZmluZShgczEnLCAgICBgJXI5JykKK2RlZmluZShgdDAnLCAgICBgJXIxMCcpCitkZWZpbmUoYHQxJywgICAgYCVyMTEnKQorCitkbmwgQUJJX1NVUFBPUlQoRE9TNjQpCUMgcmV0dXJucyBtcF9kb3VibGVfbGltYl90IGluIG1lbW9yeQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDY0KQorUFJPTE9HVUUobXBuX2djZF8yMikKKwlGVU5DX0VOVFJZKDQpCisJbW92CXYwX3BhcmFtLCB2MAorCisJQUxJR04oMTYpCitMKHRvcCk6CW1vdgl2MCwgdDAKKwlzdWIJdTAsIHQwCisJanoJTChsb3d6KQkJQwlqdW1wIHdoZW4gbG93IGxpbWIgcmVzdWx0ID0gMAorCW1vdgl2MSwgdDEKKwlzYmIJdTEsIHQxCisKKwltb3YJdTAsIHMwCisJbW92CXUxLCBzMQorCisJYnNmCXQwLCBjbnQKKworCXN1Ygl2MCwgdTAKKwlzYmIJdjEsIHUxCisKK0woYmNrKToJY21vdmMJdDAsIHUwCQlDIHUgPSB8dSAtIHZ8CisJY21vdm5jCXUxLCB0MQkJQyB1ID0gfHUgLSB2fAorCWNtb3ZjCXMwLCB2MAkJQyB2ID0gbWluKHUsdikKKwljbW92YwlzMSwgdjEJCUMgdiA9IG1pbih1LHYpCisKKwlzaHIJUjgoY250KSwgdTAKKwltb3YJdDEsIHUxCisJc2hyCVI4KGNudCksIHUxCisJbmVnCWNudAorCXNobAlSOChjbnQpLCB0MQorCW9yCXQxLCB1MAorCisJdGVzdAl1MSwgdTEKKwlqbnoJTCh0b3ApCisJdGVzdAl2MSwgdjEKKwlqbnoJTCh0b3ApCisKK0woZ2NkXzExKToKKwltb3YJdjAsICVyZGkKK0MJbW92CXUwLCAlcnNpCisJVENBTEwoCW1wbl9nY2RfMTEpCisKK0wobG93eik6QyBXZSBjb21lIGhlcmUgd2hlbiB2MCAtIHUwID0gMAorCUMgMS4gSWYgdjEgLSB1MSA9IDAsIHRoZW4gZ2NkIGlzIHUgPSB2LgorCUMgMi4gRWxzZSBjb21wdXRlIGdjZF8yMSh7djEsdjB9LCB8dTEtdjF8KQorCW1vdgl2MSwgdDAKKwlzdWIJdTEsIHQwCisJamUJTChlbmQpCisKKwl4b3IJdDEsIHQxCisJbW92CXUwLCBzMAorCW1vdgl1MSwgczEKKwlic2YJdDAsIGNudAorCW1vdgl1MSwgdTAKKwl4b3IJdTEsIHUxCisJc3ViCXYxLCB1MAorCWptcAlMKGJjaykKKworTChlbmQpOglDIG1vdgl2MCwgJXJheAorCUMgbW92CXYxLCAlcmR4CisJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2sxMC9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9rMTAvZ21wLW1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0OWJhY2UKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9rMTAvZ21wLW1wYXJhbS5oCkBAIC0wLDAgKzEsMjQ4IEBACisvKiBBTUQgSzEwIGdtcC1tcGFyYW0uaCAtLSBDb21waWxlci9tYWNoaW5lIHBhcmFtZXRlciBoZWFkZXIgZmlsZS4KKworQ29weXJpZ2h0IDIwMTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNkZWZpbmUgR01QX0xJTUJfQklUUyA2NAorI2RlZmluZSBHTVBfTElNQl9CWVRFUyA4CisKKyNpZiAwCisjdW5kZWYgbXBuX3N1YmxzaF9uCisjZGVmaW5lIG1wbl9zdWJsc2hfbihycCx1cCx2cCxuLGMpCQkJCQlcCisgICgoKHJwKSA9PSAodXApKSA/IG1wbl9zdWJtdWxfMSAocnAsIHZwLCBuLCBDTlNUX0xJTUIoMSkgPDwgKGMpKQlcCisgICA6IE1QTihtcG5fc3VibHNoX24pKHJwLHVwLHZwLG4sYykpCisjZW5kaWYKKworLyogMzIwMC0zNjAwIE1IeiBLMTAgVGh1YmFuICovCisvKiBGRlQgdHVuaW5nIGxpbWl0ID0gNDI3LDE2MSwyODAgKi8KKy8qIEdlbmVyYXRlZCBieSB0dW5ldXAuYywgMjAxOS0xMC0yMiwgZ2NjIDguMyAqLworCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNQorI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgMworI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAxNworI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICAgICAyOAorI2RlZmluZSBQUkVJTlZfTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAxMQorI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgICAgICAgICAgICAgICAgMSAgLyogbmF0aXZlICovCisjZGVmaW5lIERJVl9RUl8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAxCisjZGVmaW5lIERJVl9RUl8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVl9RUl8yX1BJMl9USFJFU0hPTEQgICAgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgICAgICAgMTUKKworI2RlZmluZSBESVZfMV9WU19NVUxfMV9QRVJDRU5UICAgICAgICAgICAgIDMyNAorCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDgxCisjZGVmaW5lIE1VTF9UT09NNDRfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjMyCisjZGVmaW5lIE1VTF9UT09NNkhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMzYzCisjZGVmaW5lIE1VTF9UT09NOEhfVEhSRVNIT0xEICAgICAgICAgICAgICAgNDc4CisKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNDNfVEhSRVNIT0xEICAgICAgOTcKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxNTUKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxNDUKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNjNfVEhSRVNIT0xEICAgICAxNjAKKyNkZWZpbmUgTVVMX1RPT000M19UT19UT09NNTRfVEhSRVNIT0xEICAgICAxNDIKKworI2RlZmluZSBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTE3CisjZGVmaW5lIFNRUl9UT09NNF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjgwCisjZGVmaW5lIFNRUl9UT09NNl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNDQ2CisjZGVmaW5lIFNRUl9UT09NOF9USFJFU0hPTEQgICAgICAgICAgICAgICAgNTQ3CisKKyNkZWZpbmUgTVVMTUlEX1RPT000Ml9USFJFU0hPTEQgICAgICAgICAgICAgMzQKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxNQorI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxNworCisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgNTMwICAvKiBrID0gNSAqLworI2RlZmluZSBNVUxfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgNTMwLCA1fSwgeyAgICAgMjQsIDZ9LCB7ICAgICAxMywgNX0sIHsgICAgIDI3LCA2fSwgXAorICAgIHsgICAgIDI3LCA3fSwgeyAgICAgMTQsIDZ9LCB7ICAgICAyOSwgN30sIHsgICAgIDE1LCA2fSwgXAorICAgIHsgICAgIDMxLCA3fSwgeyAgICAgMjksIDh9LCB7ICAgICAxNSwgN30sIHsgICAgIDMyLCA4fSwgXAorICAgIHsgICAgIDE3LCA3fSwgeyAgICAgMzYsIDh9LCB7ICAgICAxOSwgN30sIHsgICAgIDM5LCA4fSwgXAorICAgIHsgICAgIDIxLCA3fSwgeyAgICAgNDMsIDh9LCB7ICAgICAyMywgN30sIHsgICAgIDQ3LCA4fSwgXAorICAgIHsgICAgIDI1LCA3fSwgeyAgICAgNTEsIDh9LCB7ICAgICAyOSwgOX0sIHsgICAgIDE1LCA4fSwgXAorICAgIHsgICAgIDM1LCA5fSwgeyAgICAgMTksIDh9LCB7ICAgICA0MywgOX0sIHsgICAgIDIzLCA4fSwgXAorICAgIHsgICAgIDUxLCA5fSwgeyAgICAgMjcsIDh9LCB7ICAgICA1NSwxMH0sIHsgICAgIDE1LCA5fSwgXAorICAgIHsgICAgIDMxLCA4fSwgeyAgICAgNjMsIDl9LCB7ICAgICAzNSwgOH0sIHsgICAgIDcxLCA5fSwgXAorICAgIHsgICAgIDM5LCA4fSwgeyAgICAgODEsIDl9LCB7ICAgICA0MywxMH0sIHsgICAgIDIzLCA5fSwgXAorICAgIHsgICAgIDU1LDExfSwgeyAgICAgMTUsMTB9LCB7ICAgICAzMSwgOX0sIHsgICAgIDcxLDEwfSwgXAorICAgIHsgICAgIDM5LCA5fSwgeyAgICAgODcsMTB9LCB7ICAgICA0NywgOX0sIHsgICAgIDk5LDEwfSwgXAorICAgIHsgICAgIDU1LDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA4NywxMX0sIHsgICAgIDQ3LDEwfSwgXAorICAgIHsgICAgMTExLDEyfSwgeyAgICAgMzEsMTF9LCB7ICAgICA2MywxMH0sIHsgICAgMTQzLDExfSwgXAorICAgIHsgICAgIDc5LDEwfSwgeyAgICAxNjcsMTF9LCB7ICAgICA5NSwxMH0sIHsgICAgMTkxLDExfSwgXAorICAgIHsgICAgMTExLDEyfSwgeyAgICAgNjMsMTF9LCB7ICAgIDE0MywxMH0sIHsgICAgMjg3LDExfSwgXAorICAgIHsgICAgMTU5LDEyfSwgeyAgICAgOTUsMTF9LCB7ICAgIDIwNywxM30sIHsgICAgIDYzLDEyfSwgXAorICAgIHsgICAgMTI3LDExfSwgeyAgICAyNTUsMTB9LCB7ICAgIDUxMSwxMX0sIHsgICAgMjcxLDEwfSwgXAorICAgIHsgICAgNTQzLDExfSwgeyAgICAyODcsMTJ9LCB7ICAgIDE1OSwxMX0sIHsgICAgMzE5LDEwfSwgXAorICAgIHsgICAgNjM5LDExfSwgeyAgICAzMzUsMTB9LCB7ICAgIDY3MSwxMX0sIHsgICAgMzUxLDEwfSwgXAorICAgIHsgICAgNzAzLDEyfSwgeyAgICAxOTEsMTF9LCB7ICAgIDM4MywxMH0sIHsgICAgNzY3LDExfSwgXAorICAgIHsgICAgNDE1LDEyfSwgeyAgICAyMjMsMTF9LCB7ICAgIDQ0NywxM30sIHsgICAgMTI3LDEyfSwgXAorICAgIHsgICAgMjU1LDExfSwgeyAgICA1NDMsMTJ9LCB7ICAgIDI4NywxMX0sIHsgICAgNTc1LDEwfSwgXAorICAgIHsgICAxMTUxLDExfSwgeyAgICA2MDcsMTJ9LCB7ICAgIDMxOSwxMX0sIHsgICAgNjcxLDEyfSwgXAorICAgIHsgICAgMzUxLDExfSwgeyAgICA3MDMsMTN9LCB7ICAgIDE5MSwxMn0sIHsgICAgMzgzLDExfSwgXAorICAgIHsgICAgNzY3LDEyfSwgeyAgICA0MTUsMTF9LCB7ICAgIDgzMSwxMn0sIHsgICAgNDQ3LDE0fSwgXAorICAgIHsgICAgMTI3LDEzfSwgeyAgICAyNTUsMTJ9LCB7ICAgIDU0MywxMX0sIHsgICAxMDg3LDEyfSwgXAorICAgIHsgICAgNTc1LDExfSwgeyAgIDExNTEsMTJ9LCB7ICAgIDYwNywxM30sIHsgICAgMzE5LDEyfSwgXAorICAgIHsgICAgNzAzLDExfSwgeyAgIDE0MDcsMTJ9LCB7ICAgIDczNSwxM30sIHsgICAgMzgzLDEyfSwgXAorICAgIHsgICAgODMxLDEzfSwgeyAgICA0NDcsMTJ9LCB7ICAgIDk1OSwxNH0sIHsgICAgMjU1LDEzfSwgXAorICAgIHsgICAgNTExLDEyfSwgeyAgIDEwODcsMTN9LCB7ICAgIDU3NSwxMn0sIHsgICAxMjE1LDEzfSwgXAorICAgIHsgICAgNjM5LDEyfSwgeyAgIDEzNDMsMTN9LCB7ICAgIDcwMywxMn0sIHsgICAxNDcxLDE0fSwgXAorICAgIHsgICAgMzgzLDEzfSwgeyAgICA3NjcsMTJ9LCB7ICAgMTUzNSwxM30sIHsgICAgODMxLDEyfSwgXAorICAgIHsgICAxNjYzLDEzfSwgeyAgICA5NTksMTR9LCB7ICAgIDUxMSwxM30sIHsgICAxMDg3LDEyfSwgXAorICAgIHsgICAyMTc1LDEzfSwgeyAgIDEyMTUsMTR9LCB7ICAgIDYzOSwxM30sIHsgICAxNDcxLDE0fSwgXAorICAgIHsgICAgNzY3LDEzfSwgeyAgIDE2NjMsMTR9LCB7ICAgIDg5NSwxM30sIHsgICAxODU1LDE1fSwgXAorICAgIHsgICAgNTExLDE0fSwgeyAgIDEwMjMsMTN9LCB7ICAgMjE3NSwxNH0sIHsgICAxMTUxLDEzfSwgXAorICAgIHsgICAyNDMxLDE0fSwgeyAgIDEyNzksMTN9LCB7ICAgMjU1OSwxNH0sIHsgICAxNDA3LDE1fSwgXAorICAgIHsgICAgNzY3LDE0fSwgeyAgIDE3OTEsMTZ9LCB7ICAgIDUxMSwxNX0sIHsgICAxMDIzLDE0fSwgXAorICAgIHsgICAyNDMxLDE1fSwgeyAgIDEyNzksMTR9LCB7ICAgMjk0MywxNX0sIHsgICAxNTM1LDE0fSwgXAorICAgIHsgICAzMTk5LDE1fSwgeyAgIDE3OTEsMTR9LCB7ICAgMzU4MywxNn0sIHsgICAxMDIzLDE1fSwgXAorICAgIHsgICAyMDQ3LDE0fSwgeyAgIDQyMjMsMTV9LCB7ICAgMjMwMywxNH0sIHsgICA0ODYzLDE1fSwgXAorICAgIHsgICAyNTU5LDE0fSwgeyAgIDUyNDcsMTV9LCB7ICAgMjgxNSwxNn0sIHsgICAxNTM1LDE1fSwgXAorICAgIHsgICAzMDcxLDE0fSwgeyAgIDYyNzEsMTV9LCB7ICAgMzMyNywxNH0sIHsgICA2OTExLDE1fSwgXAorICAgIHsgICAzNTgzLDE3fSwgeyAgIDEwMjMsMTZ9LCB7ICAgMjA0NywxNX0sIHsgICA0MzUxLDE0fSwgXAorICAgIHsgICA4OTU5LDE1fSwgeyAgIDQ4NjMsMTZ9LCB7ICAgMjU1OSwxNX0sIHsgICA1ODg3LDE0fSwgXAorICAgIHsgIDExNzc1LDE2fSwgeyAgIDMwNzEsMTV9LCB7ICAgNjkxMSwxNn0sIHsgICAzNTgzLDE1fSwgXAorICAgIHsgICA3MTY3LDE3fSwgeyAgIDIwNDcsMTZ9LCB7ICAgNDA5NSwxNX0sIHsgICA4OTU5LDE2fSwgXAorICAgIHsgICA0NjA3LDE1fSwgeyAgIDk5ODMsMTZ9LCB7ICAgNTYzMSwxNX0sIHsgIDExNzc1LDE3fSwgXAorICAgIHsgICAzMDcxLDE2fSwgeyAgIDYxNDMsMTV9LCB7ICAxMjU0MywxNn0sIHsgIDY1NTM2LDE3fSwgXAorICAgIHsgMTMxMDcyLDE4fSwgeyAyNjIxNDQsMTl9LCB7IDUyNDI4OCwyMH0sIHsxMDQ4NTc2LDIxfSwgXAorICAgIHsyMDk3MTUyLDIyfSwgezQxOTQzMDQsMjN9LCB7ODM4ODYwOCwyNH0gfQorI2RlZmluZSBNVUxfRkZUX1RBQkxFM19TSVpFIDIwNworI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNzU1MgorCisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgNDc2ICAvKiBrID0gNSAqLworI2RlZmluZSBTUVJfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgNDc2LCA1fSwgeyAgICAgMjEsIDZ9LCB7ICAgICAxMSwgNX0sIHsgICAgIDIzLCA2fSwgXAorICAgIHsgICAgIDEyLCA1fSwgeyAgICAgMjUsIDZ9LCB7ICAgICAyOSwgN30sIHsgICAgIDI4LCA4fSwgXAorICAgIHsgICAgIDE1LCA3fSwgeyAgICAgMzIsIDh9LCB7ICAgICAxNywgN30sIHsgICAgIDM1LCA4fSwgXAorICAgIHsgICAgIDE5LCA3fSwgeyAgICAgMzksIDh9LCB7ICAgICAyMSwgN30sIHsgICAgIDQzLCA4fSwgXAorICAgIHsgICAgIDIzLCA3fSwgeyAgICAgNDcsIDh9LCB7ICAgICAyOSwgOX0sIHsgICAgIDE1LCA4fSwgXAorICAgIHsgICAgIDM1LCA5fSwgeyAgICAgMTksIDh9LCB7ICAgICA0MywgOX0sIHsgICAgIDIzLCA4fSwgXAorICAgIHsgICAgIDQ5LCA5fSwgeyAgICAgMjcsIDh9LCB7ICAgICA1NSwxMH0sIHsgICAgIDE1LCA5fSwgXAorICAgIHsgICAgIDMxLCA4fSwgeyAgICAgNjMsIDl9LCB7ICAgICA0MywxMH0sIHsgICAgIDIzLCA5fSwgXAorICAgIHsgICAgIDU1LDExfSwgeyAgICAgMTUsMTB9LCB7ICAgICAzMSwgOX0sIHsgICAgIDY3LDEwfSwgXAorICAgIHsgICAgIDM5LCA5fSwgeyAgICAgODMsMTB9LCB7ICAgICA0NywgOX0sIHsgICAgIDk1LDEwfSwgXAorICAgIHsgICAgIDU1LDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA3OSwxMX0sIHsgICAgIDQ3LDEwfSwgXAorICAgIHsgICAgMTAzLDEyfSwgeyAgICAgMzEsMTF9LCB7ICAgICA2MywxMH0sIHsgICAgMTM1LDExfSwgXAorICAgIHsgICAgIDc5LDEwfSwgeyAgICAxNjcsMTF9LCB7ICAgIDExMSwxMn0sIHsgICAgIDYzLDExfSwgXAorICAgIHsgICAgMTI3LDEwfSwgeyAgICAyNTUsMTF9LCB7ICAgIDE0MywxMH0sIHsgICAgMjg3LCA5fSwgXAorICAgIHsgICAgNTc1LDExfSwgeyAgICAxNTksMTB9LCB7ICAgIDMxOSwxMn0sIHsgICAgIDk1LDExfSwgXAorICAgIHsgICAgMTkxLDEwfSwgeyAgICAzODMsIDl9LCB7ICAgIDc2NywxMH0sIHsgICAgMzk5LDEzfSwgXAorICAgIHsgICAgIDYzLDEyfSwgeyAgICAxMjcsMTF9LCB7ICAgIDI1NSwxMH0sIHsgICAgNTExLDExfSwgXAorICAgIHsgICAgMjcxLDEwfSwgeyAgICA1NDMsMTF9LCB7ICAgIDI4NywxMH0sIHsgICAgNTc1LDEyfSwgXAorICAgIHsgICAgMTU5LDExfSwgeyAgICAzMTksMTB9LCB7ICAgIDYzOSwxMX0sIHsgICAgMzM1LDEwfSwgXAorICAgIHsgICAgNjcxLDExfSwgeyAgICAzNTEsMTB9LCB7ICAgIDcwMywxMX0sIHsgICAgMzY3LDEyfSwgXAorICAgIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTB9LCB7ICAgIDc2NywxMX0sIHsgICAgNDE1LDEwfSwgXAorICAgIHsgICAgODMxLDEyfSwgeyAgICAyMjMsMTF9LCB7ICAgIDQ0NywxM30sIHsgICAgMTI3LDEyfSwgXAorICAgIHsgICAgMjU1LDExfSwgeyAgICA1MTEsMTB9LCB7ICAgMTAyMywxMX0sIHsgICAgNTQzLDEyfSwgXAorICAgIHsgICAgMjg3LDExfSwgeyAgICA1NzUsMTB9LCB7ICAgMTE1MSwxMX0sIHsgICAgNjA3LDEyfSwgXAorICAgIHsgICAgMzE5LDExfSwgeyAgICA2MzksMTB9LCB7ICAgMTI3OSwxMX0sIHsgICAgNjcxLDEyfSwgXAorICAgIHsgICAgMzUxLDExfSwgeyAgICA3MDMsMTB9LCB7ICAgMTQwNywxM30sIHsgICAgMTkxLDEyfSwgXAorICAgIHsgICAgMzgzLDExfSwgeyAgICA3OTksMTJ9LCB7ICAgIDQxNSwxMX0sIHsgICAgODMxLDEyfSwgXAorICAgIHsgICAgNDQ3LDE0fSwgeyAgICAxMjcsMTN9LCB7ICAgIDI1NSwxMn0sIHsgICAgNTExLDExfSwgXAorICAgIHsgICAxMDIzLDEyfSwgeyAgICA1NDMsMTF9LCB7ICAgMTA4NywxMn0sIHsgICAgNTc1LDExfSwgXAorICAgIHsgICAxMTUxLDEyfSwgeyAgICA2MDcsMTN9LCB7ICAgIDMxOSwxMn0sIHsgICAgNjM5LDExfSwgXAorICAgIHsgICAxMjc5LDEyfSwgeyAgICA2NzEsMTF9LCB7ICAgMTM0MywxMn0sIHsgICAgNzAzLDExfSwgXAorICAgIHsgICAxNDA3LDEyfSwgeyAgICA3MzUsMTN9LCB7ICAgIDM4MywxMn0sIHsgICAgNzY3LDExfSwgXAorICAgIHsgICAxNTM1LDEyfSwgeyAgICA4MzEsMTF9LCB7ICAgMTY2MywxM30sIHsgICAgNDQ3LDEyfSwgXAorICAgIHsgICAgOTU5LDE0fSwgeyAgICAyNTUsMTN9LCB7ICAgIDUxMSwxMn0sIHsgICAxMDg3LDEzfSwgXAorICAgIHsgICAgNTc1LDEyfSwgeyAgIDEyMTUsMTN9LCB7ICAgIDYzOSwxMn0sIHsgICAxMzQzLDEzfSwgXAorICAgIHsgICAgNzAzLDEyfSwgeyAgIDE0MDcsMTR9LCB7ICAgIDM4MywxM30sIHsgICAgNzY3LDEyfSwgXAorICAgIHsgICAxNTM1LDEzfSwgeyAgICA4MzEsMTJ9LCB7ICAgMTcyNywxM30sIHsgICAgODk1LDEyfSwgXAorICAgIHsgICAxNzkxLDEzfSwgeyAgICA5NTksMTV9LCB7ICAgIDI1NSwxNH0sIHsgICAgNTExLDEzfSwgXAorICAgIHsgICAxMDg3LDEyfSwgeyAgIDIxNzUsMTN9LCB7ICAgMTIxNSwxNH0sIHsgICAgNjM5LDEzfSwgXAorICAgIHsgICAxNDcxLDE0fSwgeyAgICA3NjcsMTN9LCB7ICAgMTcyNywxNH0sIHsgICAgODk1LDEzfSwgXAorICAgIHsgICAxNzkxLDE1fSwgeyAgICA1MTEsMTR9LCB7ICAgMTAyMywxM30sIHsgICAyMTc1LDE0fSwgXAorICAgIHsgICAxMTUxLDEzfSwgeyAgIDIzMDMsMTR9LCB7ICAgMTI3OSwxM30sIHsgICAyNTU5LDE0fSwgXAorICAgIHsgICAxNDA3LDE1fSwgeyAgICA3NjcsMTR9LCB7ICAgMTc5MSwxNn0sIHsgICAgNTExLDE1fSwgXAorICAgIHsgICAxMDIzLDE0fSwgeyAgIDIzMDMsMTV9LCB7ICAgMTI3OSwxNH0sIHsgICAyODE1LDE1fSwgXAorICAgIHsgICAxNTM1LDE0fSwgeyAgIDMxOTksMTV9LCB7ICAgMTc5MSwxNn0sIHsgICAxMDIzLDE1fSwgXAorICAgIHsgICAyMDQ3LDE0fSwgeyAgIDQyMjMsMTV9LCB7ICAgMjMwMywxNH0sIHsgICA0ODYzLDE1fSwgXAorICAgIHsgICAyNTU5LDE0fSwgeyAgIDUyNDcsMTV9LCB7ICAgMjgxNSwxNn0sIHsgICAxNTM1LDE1fSwgXAorICAgIHsgICAzMDcxLDE0fSwgeyAgIDYyNzEsMTV9LCB7ICAgMzMyNywxNH0sIHsgICA2OTExLDE3fSwgXAorICAgIHsgICAxMDIzLDE2fSwgeyAgIDIwNDcsMTV9LCB7ICAgNDM1MSwxNH0sIHsgICA4OTU5LDE1fSwgXAorICAgIHsgICA0ODYzLDE2fSwgeyAgIDI1NTksMTV9LCB7ICAgNTg4NywxNH0sIHsgIDExNzc1LDE2fSwgXAorICAgIHsgICAzMDcxLDE1fSwgeyAgIDY5MTEsMTZ9LCB7ICAgMzU4MywxNX0sIHsgICA3Njc5LDE3fSwgXAorICAgIHsgICAyMDQ3LDE2fSwgeyAgIDQwOTUsMTV9LCB7ICAgODk1OSwxNn0sIHsgICA0NjA3LDE1fSwgXAorICAgIHsgICA5OTgzLDE2fSwgeyAgIDUxMTksMTV9LCB7ICAxMDQ5NSwxNn0sIHsgICA1NjMxLDE1fSwgXAorICAgIHsgIDExNzc1LDE3fSwgeyAgIDMwNzEsMTZ9LCB7ICAgNjE0MywxNX0sIHsgIDEyMjg3LDE2fSwgXAorICAgIHsgIDY1NTM2LDE3fSwgeyAxMzEwNzIsMTh9LCB7IDI2MjE0NCwxOX0sIHsgNTI0Mjg4LDIwfSwgXAorICAgIHsxMDQ4NTc2LDIxfSwgezIwOTcxNTIsMjJ9LCB7NDE5NDMwNCwyM30sIHs4Mzg4NjA4LDI0fSB9CisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzX1NJWkUgMjI0CisjZGVmaW5lIFNRUl9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA1NTY4CisKKyNkZWZpbmUgTVVMTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNVUxMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICA2MQorI2RlZmluZSBNVUxMT19NVUxfTl9USFJFU0hPTEQgICAgICAgICAgICAxNDI4MQorI2RlZmluZSBTUVJMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgOQorI2RlZmluZSBTUVJMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgMCAgLyogbmV2ZXIgbXBuX3NxcmxvX2Jhc2VjYXNlICovCisjZGVmaW5lIFNRUkxPX1NRUl9USFJFU0hPTEQgICAgICAgICAgICAgIDEwOTUwCisKKyNkZWZpbmUgRENfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNTQKKyNkZWZpbmUgRENfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAyMzgKKyNkZWZpbmUgRENfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNTQKKyNkZWZpbmUgRENfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNDIKKworI2RlZmluZSBJTlZfTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICA1NAorI2RlZmluZSBJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDI1MgorI2RlZmluZSBJTlZfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDIzMAorCisjZGVmaW5lIEJJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgMzI3CisjZGVmaW5lIFJFRENfMV9UT19SRURDXzJfVEhSRVNIT0xEICAgICAgICAgIDI1CisjZGVmaW5lIFJFRENfMl9UT19SRURDX05fVEhSRVNIT0xEICAgICAgICAgIDY3CisKKyNkZWZpbmUgTVVfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE2MjAKKyNkZWZpbmUgTVVfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgIDE2MjAKKyNkZWZpbmUgTVVQSV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAxMDQKKyNkZWZpbmUgTVVfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgIDE1MjgKKyNkZWZpbmUgTVVfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE2NTIKKworI2RlZmluZSBQT1dNX1NFQ19UQUJMRSAgMSwyMiwzMjEsNDczLDIxNDQKKworI2RlZmluZSBHRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBHRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgICAyNAorI2RlZmluZSBTRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDI0OAorI2RlZmluZSBTRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgMTMwNAorCisjZGVmaW5lIEZBQ19EU0NfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgNDcwCisjZGVmaW5lIEZBQ19PRERfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDI1CisKKyNkZWZpbmUgTUFUUklYMjJfU1RSQVNTRU5fVEhSRVNIT0xEICAgICAgICAgMTcKKyNkZWZpbmUgSEdDRDJfRElWMV9NRVRIT0QgICAgICAgICAgICAgICAgICAgIDUgIC8qIDguMzglIGZhc3RlciB0aGFuIDQgKi8KKyNkZWZpbmUgSEdDRF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgICAxMTUKKyNkZWZpbmUgSEdDRF9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNDYKKyNkZWZpbmUgSEdDRF9SRURVQ0VfVEhSRVNIT0xEICAgICAgICAgICAgIDM1MjQKKyNkZWZpbmUgR0NEX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICA1MzUKKyNkZWZpbmUgR0NERVhUX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA0NjAKKyNkZWZpbmUgSkFDT0JJX0JBU0VfTUVUSE9EICAgICAgICAgICAgICAgICAgIDEgIC8qIDAuOTAlIGZhc3RlciB0aGFuIDQgKi8KKworLyogVHVuZXVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIHRvb2sgNDQ4NzYzIHNlY29uZHMgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2sxMC9oYW1kaXN0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2sxMC9oYW1kaXN0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzA0OTRhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvazEwL2hhbWRpc3QuYXNtCkBAIC0wLDAgKzEsMTA5IEBACitkbmwgIEFNRDY0IG1wbl9oYW1kaXN0IC0tIGhhbW1pbmcgZGlzdGFuY2UuCisKK2RubCAgQ29weXJpZ2h0IDIwMDgsIDIwMTAtMjAxMiwgMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIKK0MgQU1EIEs4LEs5CSAtCitDIEFNRCBLMTAJIDIuMAkJPQorQyBBTUQgYmQxCX40LjQJCT0KK0MgQU1EIGJkMgl+NC40CQk9CitDIEFNRCBiZDMKK0MgQU1EIGJkNAorQyBBTUQgYm9iY2F0CSA3LjU1CQk9CitDIEFNRCBqYWd1YXIJIDIuNTIJCS0KK0MgSW50ZWwgUDQJIC0KK0MgSW50ZWwgY29yZTIJIC0KK0MgSW50ZWwgTkhNCSAyLjAzCQkrCitDIEludGVsIFNCUgkgMi4wMQkJKworQyBJbnRlbCBJQlIJIDEuOTYJCSsKK0MgSW50ZWwgSFdMCSAxLjY0CQk9CitDIEludGVsIEJXTAkgMS41NgkJLQorQyBJbnRlbCBTS0wJIDEuNTIJCT0KK0MgSW50ZWwgYXRvbQorQyBJbnRlbCBTTE0JIDMuMAkJLQorQyBWSUEgbmFubworCitkZWZpbmUoYGFwJywJCWAlcmRpJykKK2RlZmluZShgYnAnLAkJYCVyc2knKQorZGVmaW5lKGBuJywJCWAlcmR4JykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMzIpCitQUk9MT0dVRShtcG5faGFtZGlzdCkKKwlGVU5DX0VOVFJZKDMpCisJbW92CShhcCksICVyOAorCXhvcgkoYnApLCAlcjgKKworCWxlYQkoYXAsbiw4KSwgYXAJCQlDIHBvaW50IGF0IEEgb3BlcmFuZCBlbmQKKwlsZWEJKGJwLG4sOCksIGJwCQkJQyBwb2ludCBhdCBCIG9wZXJhbmQgZW5kCisJbmVnCW4KKworCXRlc3QJJDEsIFI4KG4pCisJanoJTCgyKQorCitMKDEpOgkuYnl0ZQkweGYzLDB4NDksMHgwZiwweGI4LDB4YzAJQyBwb3BjbnQgJXI4LCAlcmF4CisJeG9yCVIzMiglcjEwKSwgUjMyKCVyMTApCisJaW5jCW4KKwlqcwlMKHRvcCkKKwlGVU5DX0VYSVQoKQorCXJldAorCisJQUxJR04oMTYpCitMKDIpOgltb3YJOChhcCxuLDgpLCAlcjkKKwkuYnl0ZQkweGYzLDB4NDksMHgwZiwweGI4LDB4YzAJQyBwb3BjbnQgJXI4LCAlcmF4CisJeG9yCTgoYnAsbiw4KSwgJXI5CisJLmJ5dGUJMHhmMywweDRkLDB4MGYsMHhiOCwweGQxCUMgcG9wY250ICVyOSwgJXIxMAorCWFkZAkkMiwgbgorCWpzCUwodG9wKQorCWxlYQkoJXIxMCwgJXJheCksICVyYXgKKwlGVU5DX0VYSVQoKQorCXJldAorCisJQUxJR04oMTYpCitMKHRvcCk6CW1vdgkoYXAsbiw4KSwgJXI4CisJbGVhCSglcjEwLCAlcmF4KSwgJXJheAorCW1vdgk4KGFwLG4sOCksICVyOQorCXhvcgkoYnAsbiw4KSwgJXI4CisJeG9yCTgoYnAsbiw4KSwgJXI5CisJLmJ5dGUJMHhmMywweDQ5LDB4MGYsMHhiOCwweGM4CUMgcG9wY250ICVyOCwgJXJjeAorCWxlYQkoJXJjeCwgJXJheCksICVyYXgKKwkuYnl0ZQkweGYzLDB4NGQsMHgwZiwweGI4LDB4ZDEJQyBwb3BjbnQgJXI5LCAlcjEwCisJYWRkCSQyLCBuCisJanMJTCh0b3ApCisKKwlsZWEJKCVyMTAsICVyYXgpLCAlcmF4CisJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2sxMC9sc2hpZnQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvazEwL2xzaGlmdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FkZjliOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2sxMC9sc2hpZnQuYXNtCkBAIC0wLDAgKzEsMzcgQEAKK2RubCAgWDg2LTY0IG1wbl9sc2hpZnQgb3B0aW1pc2VkIGZvciBBTUQgSzEwLgorCitkbmwgIENvcHlyaWdodCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2xzaGlmdCkKK2luY2x1ZGVfbXBuKGB4ODZfNjQvZmFzdHNzZS9sc2hpZnQtbW92ZHF1Mi5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvazEwL2xzaGlmdGMuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvazEwL2xzaGlmdGMuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4YTkyZTUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9rMTAvbHNoaWZ0Yy5hc20KQEAgLTAsMCArMSwzNyBAQAorZG5sICBYODYtNjQgbXBuX2xzaGlmdGMgb3B0aW1pc2VkIGZvciBBTUQgSzEwLgorCitkbmwgIENvcHlyaWdodCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2xzaGlmdGMpCitpbmNsdWRlX21wbihgeDg2XzY0L2Zhc3Rzc2UvbHNoaWZ0Yy1tb3ZkcXUyLmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9rMTAvcG9wY291bnQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvazEwL3BvcGNvdW50LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODE0YWVhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvazEwL3BvcGNvdW50LmFzbQpAQCAtMCwwICsxLDEzOCBAQAorZG5sICBBTUQ2NCBtcG5fcG9wY291bnQgLS0gcG9wdWxhdGlvbiBjb3VudC4KKworZG5sICBDb3B5cmlnaHQgMjAwOCwgMjAxMC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJCSAgICBjeWNsZXMvbGltYgorQyBBTUQgSzgsSzkJCSBuL2EKK0MgQU1EIEsxMAkJIDEuMTI1CitDIEludGVsIFA0CQkgbi9hCitDIEludGVsIGNvcmUyCQkgbi9hCitDIEludGVsIGNvcmVpCQkgMS4yNQorQyBJbnRlbCBhdG9tCQkgbi9hCitDIFZJQSBuYW5vCQkgbi9hCisKK0MgKiBUaGUgemVyby1vZmZzZXQgb2YgcG9wY291bnQgaXMgbWlzYXNzZW1ibGVkIHRvIHRoZSBvZmZzZXQtbGVzcyBmb3JtLCB3aGljaAorQyAgIGlzIG9uZSBieXRlIHNob3J0ZXIgYW5kIHRoZXJlZm9yZSB3aWxsIG1lc3MgdXAgdGhlIHN3aXRjaGluZyBjb2RlLgorQyAqIFRoZSBvdXRkYXRlZCBnYXMgdXNlZCBpbiBGcmVlQlNEIGFuZCBOZXRCU0QgY2Fubm90IGhhbmRsZSB0aGUgUE9QQ05UIGluc24sCitDICAgd2hpY2ggaXMgdGhlIG1haW4gcmVhc29uIGZvciBvdXIgdXNhZ2Ugb2YgJy5ieXRlJy4KKworQyBUT0RPCitDICAqIEltcHJvdmUgc3dpdGNoaW5nIGNvZGUsIHRoZSBjdXJyZW50IGNvZGUgc3Vja3MuCisKK2RlZmluZShgdXAnLAkJYCVyZGknKQorZGVmaW5lKGBuJywJCWAlcnNpJykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMzIpCitQUk9MT0dVRShtcG5fcG9wY291bnQpCisJRlVOQ19FTlRSWSgyKQorCitpZmVsc2UoMSwxLGAKKwlsZWEJKHVwLG4sOCksIHVwCisKK0MJbW92CVIzMihuKSwgUjMyKCVyY3gpCitDCW5lZwlSMzIoJXJjeCkKKwlpbXVsCSQtMSwgUjMyKG4pLCBSMzIoJXJjeCkKKwlhbmQJJDgtMSwgUjMyKCVyY3gpCisKKwluZWcJbgorCisJbW92CVIzMiglcmN4KSwgUjMyKCVyYXgpCisJbmVnCSVyYXgKKwlsZWEJKHVwLCVyYXgsOCksdXAKKworCXhvcglSMzIoJXJheCksIFIzMiglcmF4KQorCisJbGVhCSglcmN4LCVyY3gsNCksICVyY3gKKworCWxlYQlMKHRvcCkoJXJpcCksICVyZHgKKwlsZWEJKCVyZHgsJXJjeCwyKSwgJXJkeAorCWptcAkqJXJkeAorJyxgCisJbGVhCSh1cCxuLDgpLCB1cAorCisJbW92CVIzMihuKSwgUjMyKCVyY3gpCisJbmVnCVIzMiglcmN4KQorCWFuZAkkOC0xLCBSMzIoJXJjeCkKKworCW5lZwluCisKKwltb3YJUjMyKCVyY3gpLCBSMzIoJXJheCkKKwlzaGwJJDMsIFIzMiglcmF4KQorCXN1YgklcmF4LCB1cAorCisJeG9yCVIzMiglcmF4KSwgUjMyKCVyYXgpCisKK0MJYWRkCVIzMiglcmN4KSwgUjMyKCVyY3gpCUMgMngKK0MJbGVhCSglcmN4LCVyY3gsNCksICVyY3gJQyAxMHgKKwlpbXVsCSQxMCwgUjMyKCVyY3gpCisKKwlsZWEJTCh0b3ApKCVyaXApLCAlcmR4CisJYWRkCSVyY3gsICVyZHgKKwlqbXAJKiVyZHgKKycpCisKKwlBTElHTigzMikKK0wodG9wKToKK0MgMCA9IG4gbW9kIDgKKwkuYnl0ZQkweGYzLDB4NGMsMHgwZiwweGI4LDB4NDQsMHhmNywweDAwCUMgcG9wY250IDAodXAsbiw4KSwgJXI4CisJYWRkCSVyOCwgJXJheAorQyA3ID0gbiBtb2QgOAorCS5ieXRlCTB4ZjMsMHg0YywweDBmLDB4YjgsMHg0YywweGY3LDB4MDgJQyBwb3BjbnQgOCh1cCxuLDgpLCAlcjkKKwlhZGQJJXI5LCAlcmF4CitDIDYgPSBuIG1vZCA4CisJLmJ5dGUJMHhmMywweDRjLDB4MGYsMHhiOCwweDQ0LDB4ZjcsMHgxMAlDIHBvcGNudCAxNih1cCxuLDgpLCAlcjgKKwlhZGQJJXI4LCAlcmF4CitDIDUgPSBuIG1vZCA4CisJLmJ5dGUJMHhmMywweDRjLDB4MGYsMHhiOCwweDRjLDB4ZjcsMHgxOAlDIHBvcGNudCAyNCh1cCxuLDgpLCAlcjkKKwlhZGQJJXI5LCAlcmF4CitDIDQgPSBuIG1vZCA4CisJLmJ5dGUJMHhmMywweDRjLDB4MGYsMHhiOCwweDQ0LDB4ZjcsMHgyMAlDIHBvcGNudCAzMih1cCxuLDgpLCAlcjgKKwlhZGQJJXI4LCAlcmF4CitDIDMgPSBuIG1vZCA4CisJLmJ5dGUJMHhmMywweDRjLDB4MGYsMHhiOCwweDRjLDB4ZjcsMHgyOAlDIHBvcGNudCA0MCh1cCxuLDgpLCAlcjkKKwlhZGQJJXI5LCAlcmF4CitDIDIgPSBuIG1vZCA4CisJLmJ5dGUJMHhmMywweDRjLDB4MGYsMHhiOCwweDQ0LDB4ZjcsMHgzMAlDIHBvcGNudCA0OCh1cCxuLDgpLCAlcjgKKwlhZGQJJXI4LCAlcmF4CitDIDEgPSBuIG1vZCA4CisJLmJ5dGUJMHhmMywweDRjLDB4MGYsMHhiOCwweDRjLDB4ZjcsMHgzOAlDIHBvcGNudCA1Nih1cCxuLDgpLCAlcjkKKwlhZGQJJXI5LCAlcmF4CisKKwlhZGQJJDgsIG4KKwlqcwlMKHRvcCkKKwlGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvazEwL3JzaGlmdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9rMTAvcnNoaWZ0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDkwNTFhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvazEwL3JzaGlmdC5hc20KQEAgLTAsMCArMSwzNyBAQAorZG5sICBYODYtNjQgbXBuX3JzaGlmdCBvcHRpbWlzZWQgZm9yIEFNRCBLMTAuCisKK2RubCAgQ29weXJpZ2h0IDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fcnNoaWZ0KQoraW5jbHVkZV9tcG4oYHg4Nl82NC9mYXN0c3NlL3JzaGlmdC1tb3ZkcXUyLmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9rMTAvc2VjX3RhYnNlbGVjdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9rMTAvc2VjX3RhYnNlbGVjdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQzNjAzNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2sxMC9zZWNfdGFic2VsZWN0LmFzbQpAQCAtMCwwICsxLDM3IEBACitkbmwgIFg4Ni02NCBtcG5fc2VjX3RhYnNlbGVjdC4KKworZG5sICBDb3B5cmlnaHQgMjAxMiwgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9zZWNfdGFic2VsZWN0KQoraW5jbHVkZV9tcG4oYHg4Nl82NC9mYXN0c3NlL3NlY190YWJzZWxlY3QuYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2s4L2FkZG11bF8yLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2s4L2FkZG11bF8yLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGJjYmExCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvazgvYWRkbXVsXzIuYXNtCkBAIC0wLDAgKzEsMTk1IEBACitkbmwgIEFNRDY0IG1wbl9hZGRtdWxfMiAtLSBNdWx0aXBseSBhbiBuLWxpbWIgdmVjdG9yIHdpdGggYSAyLWxpbWIgdmVjdG9yIGFuZAorZG5sICBhZGQgdGhlIHJlc3VsdCB0byBhIHRoaXJkIGxpbWIgdmVjdG9yLgorCitkbmwgIENvcHlyaWdodCAyMDA4LCAyMDExLCAyMDEyLCAyMDE2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYiAgICAgY3ljbGVzL2xpbWIgY2ZnCWN5Y2xlcy9saW1iIGFtMSthbTEKK0MgQU1EIEs4LEs5CSAyLjM3NQorQyBBTUQgSzEwCSAyLjM3NQorQyBBTUQgYnVsbAkgNS4yCQk8LQkJNC42LTQuNzUJCWJhZAorQyBBTUQgcGlsZQkgNC45NgkJPC0JCTQuNi00Ljc1CQliYWQKK0MgQU1EIHN0ZWFtCSA/CitDIEFNRCBleGNhdmF0b3IJID8KK0MgQU1EIGJvYmNhdAkgNS43NQkJCQk1LjAJCQliYWQKK0MgQU1EIGphZ3VhcgkgNS45CQkJCTUuMi01LjQJCQliYWQKK0MgSW50ZWwgUDQJMTUtMTYKK0MgSW50ZWwgY29yZTIJIDQuNQkJCQk0LjI1LTQuNQkJYmFkCitDIEludGVsIE5ITQkgNC4zMwkJCQk0LjU1CQkJYmFkCitDIEludGVsIFNCUgkgMy40CQkgMi45MwkJMy4yNAkJCWJhZAorQyBJbnRlbCBJQlIJIDMuMzUJCSAyLjYJCTIuOTUJCQliYWQKK0MgSW50ZWwgSFdMCSAzLjMJCSAyLjE1CQkyLjMJCQliYWQKK0MgSW50ZWwgQldMCSAyLjMzCQkgMi4zMwkJMS42NQkJCWJhZAorQyBJbnRlbCBTS0wJIDIuMzcJCSAyLjIxCQkxLjY0CQkJYmFkCitDIEludGVsIGF0b20JMjAJCTE4LjcKK0MgSW50ZWwgU0xNCSA4CQkgOC41CitDIFZJQSBuYW5vCSA0LjQKKworQyBUaGlzIGNvZGUgaXMgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGEgY29kZSBnZW5lcmF0aW9uIGFuZCBvcHRpbWl6YXRpb24gdG9vbAorQyBzdWl0ZSB3cml0dGVuIGJ5IERhdmlkIEhhcnZleSBhbmQgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK0MgVE9ETworQyAgKiBUdW5lIGZlZWQtaW4gYW5kIHdpbmQtZG93biBjb2RlLgorCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLCAgICAgYCVyZGknKQorZGVmaW5lKGB1cCcsICAgICBgJXJzaScpCitkZWZpbmUoYG5fcGFyYW0nLGAlcmR4JykKK2RlZmluZShgdnAnLCAgICAgYCVyY3gnKQorCitkZWZpbmUoYHYwJywgYCVyOCcpCitkZWZpbmUoYHYxJywgYCVyOScpCitkZWZpbmUoYHcwJywgYCVyYngnKQorZGVmaW5lKGB3MScsIGAlcmN4JykKK2RlZmluZShgdzInLCBgJXJicCcpCitkZWZpbmUoYHczJywgYCVyMTAnKQorZGVmaW5lKGBuJywgIGAlcjExJykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMTYpCitQUk9MT0dVRShtcG5fYWRkbXVsXzIpCisJRlVOQ19FTlRSWSg0KQorCW1vdgluX3BhcmFtLCBuCisJcHVzaAklcmJ4CisJcHVzaAklcmJwCisKKwltb3YJMCh2cCksIHYwCisJbW92CTgodnApLCB2MQorCisJbW92CVIzMihuX3BhcmFtKSwgUjMyKCVyYngpCisJbW92CSh1cCksICVyYXgKKwlsZWEJLTgodXAsbl9wYXJhbSw4KSwgdXAKKwlsZWEJLTgocnAsbl9wYXJhbSw4KSwgcnAKKwltdWwJdjAKKwluZWcJbgorCWFuZAkkMywgUjMyKCVyYngpCisJanoJTChiMCkKKwljbXAJJDIsIFIzMiglcmJ4KQorCWpjCUwoYjEpCisJanoJTChiMikKKworTChiMyk6CW1vdgklcmF4LCB3MQorCW1vdgklcmR4LCB3MgorCXhvcglSMzIodzMpLCBSMzIodzMpCisJbW92CTgodXAsbiw4KSwgJXJheAorCWRlYwluCisJam1wCUwobG8zKQorCitMKGIyKToJbW92CSVyYXgsIHcyCisJbW92CTgodXAsbiw4KSwgJXJheAorCW1vdgklcmR4LCB3MworCXhvcglSMzIodzApLCBSMzIodzApCisJYWRkCSQtMiwgbgorCWptcAlMKGxvMikKKworTChiMSk6CW1vdgklcmF4LCB3MworCW1vdgk4KHVwLG4sOCksICVyYXgKKwltb3YJJXJkeCwgdzAKKwl4b3IJUjMyKHcxKSwgUjMyKHcxKQorCWluYwluCisJam1wCUwobG8xKQorCitMKGIwKToJbW92CSQwLCBSMzIodzMpCisJbW92CSVyYXgsIHcwCisJbW92CTgodXAsbiw4KSwgJXJheAorCW1vdgklcmR4LCB3MQorCXhvcglSMzIodzIpLCBSMzIodzIpCisJam1wCUwobG8wKQorCisJQUxJR04oMzIpCitMKHRvcCk6CW1vdgkkMCwgUjMyKHcxKQorCW11bAl2MAorCWFkZAklcmF4LCB3MworCW1vdgkodXAsbiw4KSwgJXJheAorCWFkYwklcmR4LCB3MAorCWFkYwkkMCwgUjMyKHcxKQorTChsbzEpOgltdWwJdjEKKwlhZGQJdzMsIChycCxuLDgpCisJbW92CSQwLCBSMzIodzMpCisJYWRjCSVyYXgsIHcwCisJbW92CSQwLCBSMzIodzIpCisJbW92CTgodXAsbiw4KSwgJXJheAorCWFkYwklcmR4LCB3MQorCW11bAl2MAorCWFkZAklcmF4LCB3MAorCW1vdgk4KHVwLG4sOCksICVyYXgKKwlhZGMJJXJkeCwgdzEKKwlhZGMJJDAsIFIzMih3MikKK0wobG8wKToJbXVsCXYxCisJYWRkCXcwLCA4KHJwLG4sOCkKKwlhZGMJJXJheCwgdzEKKwlhZGMJJXJkeCwgdzIKKwltb3YJMTYodXAsbiw4KSwgJXJheAorCW11bAl2MAorCWFkZAklcmF4LCB3MQorCWFkYwklcmR4LCB3MgorCWFkYwkkMCwgUjMyKHczKQorCW1vdgkxNih1cCxuLDgpLCAlcmF4CitMKGxvMyk6CW11bAl2MQorCWFkZAl3MSwgMTYocnAsbiw4KQorCWFkYwklcmF4LCB3MgorCWFkYwklcmR4LCB3MworCXhvcglSMzIodzApLCBSMzIodzApCisJbW92CTI0KHVwLG4sOCksICVyYXgKKwltdWwJdjAKKwlhZGQJJXJheCwgdzIKKwltb3YJMjQodXAsbiw4KSwgJXJheAorCWFkYwklcmR4LCB3MworCWFkYwkkMCwgUjMyKHcwKQorTChsbzIpOgltdWwJdjEKKwlhZGQJdzIsIDI0KHJwLG4sOCkKKwlhZGMJJXJheCwgdzMKKwlhZGMJJXJkeCwgdzAKKwltb3YJMzIodXAsbiw4KSwgJXJheAorCWFkZAkkNCwgbgorCWpzCUwodG9wKQorCitMKGVuZCk6CXhvcglSMzIodzEpLCBSMzIodzEpCisJbXVsCXYwCisJYWRkCSVyYXgsIHczCisJbW92CSh1cCksICVyYXgKKwlhZGMJJXJkeCwgdzAKKwlhZGMJUjMyKHcxKSwgUjMyKHcxKQorCW11bAl2MQorCWFkZAl3MywgKHJwKQorCWFkYwklcmF4LCB3MAorCWFkYwklcmR4LCB3MQorCW1vdgl3MCwgOChycCkKKwltb3YJdzEsICVyYXgKKworCXBvcAklcmJwCisJcG9wCSVyYngKKwlGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvazgvYW9ycmxzaF9uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2s4L2FvcnJsc2hfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYzYTE4NAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2s4L2FvcnJsc2hfbi5hc20KQEAgLTAsMCArMSwyMTcgQEAKK2RubCAgQU1ENjQgbXBuX2FkZGxzaF9uIGFuZCBtcG5fcnNibHNoX24uICBSID0gVjJeayArLSBVLgorCitkbmwgIENvcHlyaWdodCAyMDA2LCAyMDEwLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIEFNRCBLOCxLOQkgMi44Nwk8IDMuODUgZm9yIGxzaGlmdCArIGFkZF9uCitDIEFNRCBLMTAJIDIuNzUJPCAzLjg1IGZvciBsc2hpZnQgKyBhZGRfbgorQyBJbnRlbCBQNAkyMgk+IDcuMzMgZm9yIGxzaGlmdCArIGFkZF9uCitDIEludGVsIGNvcmUyCSA0LjEJPiAzLjI3IGZvciBsc2hpZnQgKyBhZGRfbgorQyBJbnRlbCBOSE0JIDQuNAk+IDMuNzUgZm9yIGxzaGlmdCArIGFkZF9uCitDIEludGVsIFNCUgkgMy4xNwk8IDMuNDYgZm9yIGxzaGlmdCArIGFkZF9uCitDIEludGVsIGF0b20JID8JPyA4Ljc1IGZvciBsc2hpZnQgKyBhZGRfbgorQyBWSUEgbmFubwkgNC43CTwgNi4yNSBmb3IgbHNoaWZ0ICsgYWRkX24KKworQyBUT0RPCitDICAqIENhbiB3ZSBwcm9wYWdhdGUgY2FycnkgaW50byByZHggaW5zdGVhZCBvZiB1c2luZyBhIHNwZWNpYWwgY2FycnkgcmVnaXN0ZXI/CitDICAgIFRoYXQgY291bGQgc2F2ZSBlbm91Z2ggaW5zbnMgdG8gZ2V0IHRvIDEwIGN5Y2xlcy9pdGVyYXRpb24uCisKK2RlZmluZShgcnAnLCAgICAgICBgJXJkaScpCitkZWZpbmUoYHVwJywgICAgICAgYCVyc2knKQorZGVmaW5lKGB2cF9wYXJhbScsIGAlcmR4JykKK2RlZmluZShgbl9wYXJhbScsICBgJXJjeCcpCitkZWZpbmUoYGNudCcsICAgICAgYCVyOCcpCisKK2RlZmluZShgdnAnLCAgICBgJXIxMicpCitkZWZpbmUoYG4nLCAgICAgYCVyYnAnKQorCitpZmRlZihgT1BFUkFUSU9OX2FkZGxzaF9uJyxgCisgIGRlZmluZShBRERTVUIsICAgICAgIGBhZGQnKQorICBkZWZpbmUoQURDU0JCLCAgICAgICBgYWRjJykKKyAgZGVmaW5lKGZ1bmMsIG1wbl9hZGRsc2hfbikKKycpCitpZmRlZihgT1BFUkFUSU9OX3JzYmxzaF9uJyxgCisgIGRlZmluZShBRERTVUIsICAgICAgIGBzdWInKQorICBkZWZpbmUoQURDU0JCLCAgICAgICBgc2JiJykKKyAgZGVmaW5lKGZ1bmMsIG1wbl9yc2Jsc2hfbikKKycpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FkZGxzaF9uIG1wbl9yc2Jsc2hfbikKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMTYpCitQUk9MT0dVRShmdW5jKQorCUZVTkNfRU5UUlkoNCkKK0lGRE9TKGAJbW92CTU2KCVyc3ApLCAlcjhkCScpCisJcHVzaAklcjEyCisJcHVzaAklcmJwCisJcHVzaAklcmJ4CisKKwltb3YJKHZwX3BhcmFtKSwgJXJheAlDIGxvYWQgZmlyc3QgViBsaW1iIGVhcmx5CisKKwltb3YJJDAsIFIzMihuKQorCXN1YgluX3BhcmFtLCBuCisKKwlsZWEJLTE2KHVwLG5fcGFyYW0sOCksIHVwCisJbGVhCS0xNihycCxuX3BhcmFtLDgpLCBycAorCWxlYQkxNih2cF9wYXJhbSxuX3BhcmFtLDgpLCB2cAorCisJbW92CW5fcGFyYW0sICVyOQorCisJbW92CSVyOCwgJXJjeAorCW1vdgkkMSwgUjMyKCVyOCkKKwlzaGwJUjgoJXJjeCksICVyOAorCisJbXVsCSVyOAkJCUMgaW5pdGlhbCBtdWx0aXBseQorCisJYW5kCSQzLCBSMzIoJXI5KQorCWp6CUwoYjApCisJY21wCSQyLCBSMzIoJXI5KQorCWpjCUwoYjEpCisJanoJTChiMikKKworTChiMyk6CW1vdgklcmF4LCAlcjExCisJQUREU1VCCTE2KHVwLG4sOCksICVyMTEKKwltb3YJLTgodnAsbiw4KSwgJXJheAorCXNiYglSMzIoJXJjeCksIFIzMiglcmN4KQorCW1vdgklcmR4LCAlcmJ4CisJbXVsCSVyOAorCW9yCSVyYXgsICVyYngKKwltb3YJKHZwLG4sOCksICVyYXgKKwltb3YJJXJkeCwgJXI5CisJbXVsCSVyOAorCW9yCSVyYXgsICVyOQorCWFkZAkkMywgbgorCWpueglMKGxvMykKKwlqbXAJTChjajMpCisKK0woYjIpOgltb3YJJXJheCwgJXJieAorCW1vdgktOCh2cCxuLDgpLCAlcmF4CisJbW92CSVyZHgsICVyOQorCW11bAklcjgKKwlvcgklcmF4LCAlcjkKKwlhZGQJJDIsIG4KKwlqeglMKGNqMikKKwltb3YJJXJkeCwgJXIxMAorCW1vdgktMTYodnAsbiw4KSwgJXJheAorCW11bAklcjgKKwlvcgklcmF4LCAlcjEwCisJeG9yCVIzMiglcmN4KSwgUjMyKCVyY3gpCUMgY2xlYXIgY2FycnkgcmVnaXN0ZXIKKwlqbXAJTChsbzIpCisKK0woYjEpOgltb3YJJXJheCwgJXI5CisJbW92CSVyZHgsICVyMTAKKwlhZGQJJDEsIG4KKwlqbnoJTChndDEpCisJQUREU1VCCTgodXAsbiw4KSwgJXI5CisJam1wCUwoY2oxKQorTChndDEpOgltb3YJLTE2KHZwLG4sOCksICVyYXgKKwltdWwJJXI4CisJb3IJJXJheCwgJXIxMAorCW1vdgklcmR4LCAlcjExCisJbW92CS04KHZwLG4sOCksICVyYXgKKwltdWwJJXI4CisJb3IJJXJheCwgJXIxMQorCUFERFNVQgk4KHVwLG4sOCksICVyOQorCUFEQ1NCQgkxNih1cCxuLDgpLCAlcjEwCisJQURDU0JCCTI0KHVwLG4sOCksICVyMTEKKwltb3YJKHZwLG4sOCksICVyYXgKKwlzYmIJUjMyKCVyY3gpLCBSMzIoJXJjeCkKKwlqbXAJTChsbzEpCisKK0woYjApOgltb3YJJXJheCwgJXIxMAorCW1vdgklcmR4LCAlcjExCisJbW92CS04KHZwLG4sOCksICVyYXgKKwltdWwJJXI4CisJb3IJJXJheCwgJXIxMQorCUFERFNVQgkxNih1cCxuLDgpLCAlcjEwCisJQURDU0JCCTI0KHVwLG4sOCksICVyMTEKKwltb3YJKHZwLG4sOCksICVyYXgKKwlzYmIJUjMyKCVyY3gpLCBSMzIoJXJjeCkKKwltb3YJJXJkeCwgJXJieAorCW11bAklcjgKKwlvcgklcmF4LCAlcmJ4CisJbW92CTgodnAsbiw4KSwgJXJheAorCWFkZAkkNCwgbgorCWp6CUwoZW5kKQorCisJQUxJR04oOCkKK0wodG9wKToJbW92CSVyZHgsICVyOQorCW11bAklcjgKKwlvcgklcmF4LCAlcjkKKwltb3YJJXIxMCwgLTE2KHJwLG4sOCkKK0wobG8zKToJbW92CSVyZHgsICVyMTAKKwltb3YJLTE2KHZwLG4sOCksICVyYXgKKwltdWwJJXI4CisJb3IJJXJheCwgJXIxMAorCW1vdgklcjExLCAtOChycCxuLDgpCitMKGxvMik6CW1vdgklcmR4LCAlcjExCisJbW92CS04KHZwLG4sOCksICVyYXgKKwltdWwJJXI4CisJb3IJJXJheCwgJXIxMQorCWFkZAlSMzIoJXJjeCksIFIzMiglcmN4KQorCUFEQ1NCQgkodXAsbiw4KSwgJXJieAorCUFEQ1NCQgk4KHVwLG4sOCksICVyOQorCUFEQ1NCQgkxNih1cCxuLDgpLCAlcjEwCisJQURDU0JCCTI0KHVwLG4sOCksICVyMTEKKwltb3YJKHZwLG4sOCksICVyYXgKKwlzYmIJUjMyKCVyY3gpLCBSMzIoJXJjeCkKKwltb3YJJXJieCwgKHJwLG4sOCkKK0wobG8xKToJbW92CSVyZHgsICVyYngKKwltdWwJJXI4CisJb3IJJXJheCwgJXJieAorCW1vdgklcjksIDgocnAsbiw4KQorTChsbzApOgltb3YJOCh2cCxuLDgpLCAlcmF4CisJYWRkCSQ0LCBuCisJam56CUwodG9wKQorCitMKGVuZCk6CW1vdgklcmR4LCAlcjkKKwltdWwJJXI4CisJb3IJJXJheCwgJXI5CisJbW92CSVyMTAsIC0xNihycCxuLDgpCitMKGNqMyk6CW1vdgklcjExLCAtOChycCxuLDgpCitMKGNqMik6CWFkZAlSMzIoJXJjeCksIFIzMiglcmN4KQorCUFEQ1NCQgkodXAsbiw4KSwgJXJieAorCUFEQ1NCQgk4KHVwLG4sOCksICVyOQorCW1vdgklcmJ4LCAocnAsbiw4KQorTChjajEpOgltb3YJJXI5LCA4KHJwLG4sOCkKKwltb3YJJXJkeCwgJXJheAorCUFEQ1NCQgkkMCwgJXJheAorCXBvcAklcmJ4CisJcG9wCSVyYnAKKwlwb3AJJXIxMgorCUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9rOC9iZGl2X3FfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9rOC9iZGl2X3FfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE3MmIwZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2s4L2JkaXZfcV8xLmFzbQpAQCAtMCwwICsxLDE3OSBAQAorZG5sICBBTUQ2NCBtcG5fYmRpdl9xXzEsIG1wbl9waTFfYmRpdl9xXzEgLS0gSGVuc2VsIGRpdmlzaW9uIGJ5IDEtbGltYiBkaXZpc29yLAorZG5sICByZXR1cm5pbmcgcXVvdGllbnQgb25seS4KKworZG5sICBDb3B5cmlnaHQgMjAwMSwgMjAwMiwgMjAwNC0yMDA2LCAyMDA5LCAyMDExLCAyMDEyLCAyMDE3IEZyZWUgU29mdHdhcmUKK2RubCAgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgIGN5Y2xlcy9saW1iCitDCSAgICAgbm9ybS91bm9ybQorQyBBTUQgSzgsSzkJMTAJKworQyBBTUQgSzEwCTEwCSsKK0MgQU1EIGJ1bGwJMTMuNwktCitDIEFNRCBwaWxlCTEzLjcJKworQyBBTUQgc3RlYW0KK0MgQU1EIGV4Y2F2YXRvcgorQyBBTUQgYm9iY2F0CTE1CS0KK0MgQU1EIGphZ3VhcgkxNgktCitDIEludGVsIFA0CTMzCT0KK0MgSW50ZWwgY29yZTIJMTMuMjUJPQorQyBJbnRlbCBOSE0JMTQJPQorQyBJbnRlbCBTQlIJOC41CS0KK0MgSW50ZWwgSUJSCTguNQktCitDIEludGVsIEhXTAk4CT0KK0MgSW50ZWwgQldMCTgJPQorQyBJbnRlbCBTS0wJOAk9CitDIEludGVsIGF0b20JNDIJLS0KK0MgSW50ZWwgU0xNCTIwLjQJLS0KK0MgVklBIG5hbm8KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywJCWAlcmRpJykKK2RlZmluZShgdXAnLAkJYCVyc2knKQorZGVmaW5lKGBuJywJCWAlcmR4JykKK2RlZmluZShgZCcsCQlgJXJjeCcpCitkZWZpbmUoYGRpJywJCWAlcjgnKQkJQwlqdXN0IG1wbl9waTFfYmRpdl9xXzEKK2RlZmluZShgbmNudCcsCQlgJXI5JykJCUMJanVzdCBtcG5fcGkxX2JkaXZfcV8xCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX2JkaXZfcV8xKQorCUZVTkNfRU5UUlkoNCkKKwlwdXNoCSVyYngKKworCW1vdgklcmN4LCAlcmF4CisJeG9yCVIzMiglcmN4KSwgUjMyKCVyY3gpCUMgbmNudCBjb3VudAorCW1vdgklcmR4LCAlcjEwCisKKwlidAkkMCwgUjMyKCVyYXgpCisJam5jCUwoZXZuKQkJCUMgc2tpcCBic2YgdW5sZXNzIGRpdmlzb3IgaXMgZXZlbgorCitMKG9kZCk6CW1vdgklcmF4LCAlcmJ4CisJc2hyCVIzMiglcmF4KQorCWFuZAkkMTI3LCBSMzIoJXJheCkJCUMgZC8yLCA3IGJpdHMKKworCUxFQSgJYmludmVydF9saW1iX3RhYmxlLCAlcmR4KQorCisJbW92emJsCSglcmR4LCVyYXgpLCBSMzIoJXJheCkJQyBpbnYgOCBiaXRzCisKKwltb3YJJXJieCwgJXIxMQkJQyBkIHdpdGhvdXQgdHdvcworCisJbGVhCSglcmF4LCVyYXgpLCBSMzIoJXJkeCkJQyAyKmludgorCWltdWwJUjMyKCVyYXgpLCBSMzIoJXJheCkJQyBpbnYqaW52CisJaW11bAlSMzIoJXJieCksIFIzMiglcmF4KQlDIGludippbnYqZAorCXN1YglSMzIoJXJheCksIFIzMiglcmR4KQlDIGludiA9IDIqaW52IC0gaW52KmludipkLCAxNiBiaXRzCisKKwlsZWEJKCVyZHgsJXJkeCksIFIzMiglcmF4KQlDIDIqaW52CisJaW11bAlSMzIoJXJkeCksIFIzMiglcmR4KQlDIGludippbnYKKwlpbXVsCVIzMiglcmJ4KSwgUjMyKCVyZHgpCUMgaW52KmludipkCisJc3ViCVIzMiglcmR4KSwgUjMyKCVyYXgpCUMgaW52ID0gMippbnYgLSBpbnYqaW52KmQsIDMyIGJpdHMKKworCWxlYQkoJXJheCwlcmF4KSwgJXI4CUMgMippbnYKKwlpbXVsCSVyYXgsICVyYXgJCUMgaW52KmludgorCWltdWwJJXJieCwgJXJheAkJQyBpbnYqaW52KmQKKwlzdWIJJXJheCwgJXI4CQlDIGludiA9IDIqaW52IC0gaW52KmludipkLCA2NCBiaXRzCisKKwlqbXAJTChwaTEpCisKK0woZXZuKToJYnNmCSVyYXgsICVyY3gKKwlzaHIJUjgoJXJjeCksICVyYXgKKwlqbXAJTChvZGQpCitFUElMT0dVRSgpCisKK1BST0xPR1VFKG1wbl9waTFfYmRpdl9xXzEpCisJRlVOQ19FTlRSWSg0KQorSUZET1MoYAltb3YJNTYoJXJzcCksICVyOAknKQorSUZET1MoYAltb3YJNjQoJXJzcCksICVyOQknKQorCXB1c2gJJXJieAorCisJbW92CSVyY3gsICVyMTEJCUMgZAorCW1vdgklcmR4LCAlcjEwCQlDIG4KKwltb3YJJXI5LCAlcmN4CQlDIG5jbnQKKworTChwaTEpOgltb3YJKHVwKSwgJXJheAkJQyB1cFswXQorCisJZGVjCSVyMTAKKwlqeglMKG9uZSkKKworCW1vdgk4KHVwKSwgJXJkeAkJQyB1cFsxXQorCWxlYQkodXAsJXIxMCw4KSwgdXAJCUMgdXAgZW5kCisJbGVhCShycCwlcjEwLDgpLCBycAkJQyBycCBlbmQKKwluZWcJJXIxMAkJCUMgLW4KKworCXNocmQJUjgoJXJjeCksICVyZHgsICVyYXgKKworCXhvcglSMzIoJXJieCksIFIzMiglcmJ4KQorCWptcAlMKGVudCkKKworCUFMSUdOKDgpCitMKHRvcCk6CisJQyByYXgJcQorCUMgcmJ4CWNhcnJ5IGJpdCwgMCBvciAxCisJQyByY3gJbmNudAorCUMgcmR4CisJQyByMTAJY291bnRlciwgbGltYnMsIG5lZ2F0aXZlCisJQyByMTEJZAorCisJbXVsCSVyMTEJCQlDIGNhcnJ5IGxpbWIgaW4gcmR4CisJbW92CSh1cCwlcjEwLDgpLCAlcmF4CisJbW92CTgodXAsJXIxMCw4KSwgJXI5CisJc2hyZAlSOCglcmN4KSwgJXI5LCAlcmF4CisJbm9wCisJc3ViCSVyYngsICVyYXgJCUMgYXBwbHkgY2FycnkgYml0CisJc2V0YwlSOCglcmJ4KQorCXN1YgklcmR4LCAlcmF4CQlDIGFwcGx5IGNhcnJ5IGxpbWIKKwlhZGMJJDAsIFIzMiglcmJ4KQorTChlbnQpOglpbXVsCSVyOCwgJXJheAorCW1vdgklcmF4LCAocnAsJXIxMCw4KQorCWluYwklcjEwCisJam56CUwodG9wKQorCisJbXVsCSVyMTEJCQlDIGNhcnJ5IGxpbWIgaW4gcmR4CisJbW92CSh1cCksICVyYXgJCUMgdXAgaGlnaCBsaW1iCisJc2hyCVI4KCVyY3gpLCAlcmF4CisJc3ViCSVyYngsICVyYXgJCUMgYXBwbHkgY2FycnkgYml0CisJc3ViCSVyZHgsICVyYXgJCUMgYXBwbHkgY2FycnkgbGltYgorCWltdWwJJXI4LCAlcmF4CisJbW92CSVyYXgsIChycCkKKwlwb3AJJXJieAorCUZVTkNfRVhJVCgpCisJcmV0CisKK0wob25lKToJc2hyCVI4KCVyY3gpLCAlcmF4CisJaW11bAklcjgsICVyYXgKKwltb3YJJXJheCwgKHJwKQorCXBvcAklcmJ4CisJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2s4L2Rpdl9xcl8xbl9waTEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvazgvZGl2X3FyXzFuX3BpMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZkZTA4YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2s4L2Rpdl9xcl8xbl9waTEuYXNtCkBAIC0wLDAgKzEsMjQ5IEBACitkbmwgIHg4Ni02NCBtcG5fZGl2X3FyXzFuX3BpMQorZG5sICAtLSBEaXZpZGUgYW4gbXBuIG51bWJlciBieSBhIG5vcm1hbGl6ZWQgc2luZ2xlLWxpbWIgbnVtYmVyLAorZG5sICAgICB1c2luZyBhIHNpbmdsZS1saW1iIGludmVyc2UuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IE5pZWxzIE3DtmxsZXIKKworZG5sICBDb3B5cmlnaHQgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MJCWMvbAorQyBBTUQgSzgsSzkJMTEKK0MgQU1EIEsxMAkxMQorQyBBTUQgYnVsbAkxNgorQyBBTUQgcGlsZQkxNC4yNQorQyBBTUQgc3RlYW0JID8KK0MgQU1EIGJvYmNhdAkxNgorQyBBTUQgamFndWFyCSA/CitDIEludGVsIFA0CTQ3LjUJcG9vcgorQyBJbnRlbCBjb3JlCTI4LjUJdmVyeSBwb29yCitDIEludGVsIE5ITQkyOQl2ZXJ5IHBvb3IKK0MgSW50ZWwgU0JSCTE2CXBvb3IKK0MgSW50ZWwgSUJSCTEzLjUKK0MgSW50ZWwgSFdMCTEyCitDIEludGVsIEJXTAkgPworQyBJbnRlbCBhdG9tCTUzCXZlcnkgcG9vcgorQyBWSUEgbmFubwkxOQorCisKK0MgSU5QVVQgUGFyYW1ldGVycworZGVmaW5lKGBRUCcsIGAlcmRpJykKK2RlZmluZShgVVAnLCBgJXJzaScpCitkZWZpbmUoYFVOX0lOUFVUJywgYCVyZHgnKQorZGVmaW5lKGBVMScsIGAlcmN4JykJQyBBbHNvIGluICVyYXgKK2RlZmluZShgRCcsIGAlcjgnKQorZGVmaW5lKGBESU5WJywgYCVyOScpCisKK0MgSW52YXJpYW50cworZGVmaW5lKGBCMicsIGAlcmJwJykKK2RlZmluZShgQjJtZCcsIGAlcmJ4JykKKworQyBWYXJpYWJsZXMKK2RlZmluZShgVU4nLCBgJXI4JykJQyBPdmVybGFwcyBEIGlucHV0CitkZWZpbmUoYFQnLCBgJXIxMCcpCitkZWZpbmUoYFUwJywgYCVyMTEnKQorZGVmaW5lKGBVMicsIGAlcjEyJykKK2RlZmluZShgUTAnLCBgJXIxMycpCitkZWZpbmUoYFExJywgYCVyMTQnKQorZGVmaW5lKGBRMicsIGAlcjE1JykKKworQUJJX1NVUFBPUlQoU1RENjQpCisKKwlBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigxNikKK1BST0xPR1VFKG1wbl9kaXZfcXJfMW5fcGkxKQorCUZVTkNfRU5UUlkoNCkKK0lGRE9TKGAJbW92CTU2KCVyc3ApLCAlcjgJJykKK0lGRE9TKGAJbW92CTY0KCVyc3ApLCAlcjkJJykKKwlkZWMJVU5fSU5QVVQKKwlqbnoJTChmaXJzdCkKKworCUMgSnVzdCBhIHNpbmdsZSAyLzEgZGl2aXNpb24uCisJQyBULCBVMCBhcmUgYWxsb2NhdGVkIGluIHNjcmF0Y2ggcmVnaXN0ZXJzCisJbGVhCTEoVTEpLCBUCisJbW92CVUxLCAlcmF4CisJbXVsCURJTlYKKwltb3YJKFVQKSwgVTAKKwlhZGQJVTAsICVyYXgKKwlhZGMJVCwgJXJkeAorCW1vdgklcmR4LCBUCisJaW11bAlELCAlcmR4CisJc3ViCSVyZHgsIFUwCisJY21wCVUwLCAlcmF4CisJbGVhCShVMCwgRCksICVyYXgKKwljbW92bmMJVTAsICVyYXgKKwlzYmIJJDAsIFQKKwljbXAJRCwgJXJheAorCWpjCUwoc2luZ2xlX2Rpdl9kb25lKQorCXN1YglELCAlcmF4CisJYWRkCSQxLCBUCitMKHNpbmdsZV9kaXZfZG9uZSk6CisJbW92CVQsIChRUCkKKwlGVU5DX0VYSVQoKQorCXJldAorTChmaXJzdCk6CisJQyBGSVhNRTogQ291bGQgZGVsYXkgc29tZSBvZiB0aGVzZSB1bnRpbCB3ZSBlbnRlciB0aGUgbG9vcC4KKwlwdXNoCSVyMTUKKwlwdXNoCSVyMTQKKwlwdXNoCSVyMTMKKwlwdXNoCSVyMTIKKwlwdXNoCSVyYngKKwlwdXNoCSVyYnAKKworCW1vdglELCBCMgorCWltdWwJRElOViwgQjIKKwluZWcJQjIKKwltb3YJQjIsIEIybWQKKwlzdWIJRCwgQjJtZAorCisJQyBEIG5vdCBuZWVkZWQgdW50aWwgZmluYWwgcmVkdWN0aW9uCisJcHVzaAlECisJbW92CVVOX0lOUFVULCBVTglDIENsb2JiZXJzIEQKKworCW1vdglESU5WLCAlcmF4CisJbXVsCVUxCisJbW92CSVyYXgsIFEwCisJYWRkCVUxLCAlcmR4CisJbW92CSVyZHgsIFQKKworCW1vdglCMiwgJXJheAorCW11bAlVMQorCW1vdgktOChVUCwgVU4sIDgpLCBVMAorCW1vdgkoVVAsIFVOLCA4KSwgVTEKKwltb3YJVCwgKFFQLCBVTiwgOCkKKwlhZGQJJXJheCwgVTAKKwlhZGMJJXJkeCwgVTEKKwlzYmIJVTIsIFUyCisJZGVjCVVOCisJbW92CVUxLCAlcmF4CisJanoJTChmaW5hbCkKKwltb3YJJDAsIFIzMihRMSkKKworCUFMSUdOKDE2KQorCisJQyBMb29wIGlzIDI4IGluc3RydWN0aW9ucywgMzAgSzgvSzEwIGRlY29kZXIgc2xvdHMsIHNob3VsZCBydW4KKwlDIGluIDEwIGN5Y2xlcy4gQXQgZW50cnksICVyYXggaG9sZHMgYW4gZXh0cmEgY29weSBvZiBVMSwgUTEKKwlDIGlzIHplcm8sIGFuZCBjYXJyeSBob2xkcyBhbiBleHRyYSBjb3B5IG9mIFUyLgorTChsb29wKToKKwlDIHtRMiwgUTEsIFEwfSA8LS0gRElOViAqIFUxICsgQiAoUTAgKyBVMiBESU5WKSArIEJeMiBVMgorCUMgUmVtYWlucyB0byBhZGQgaW4gQiAoVTEgKyBjKQorCWNtb3ZjCURJTlYsIFExCisJbW92CVUyLCBRMgorCW5lZwlRMgorCW11bAlESU5WCisJYWRkCSVyZHgsIFExCisJYWRjCSQwLCBRMgorCWFkZAlRMCwgUTEKKwltb3YJJXJheCwgUTAKKwltb3YJQjIsICVyYXgKKwlsZWEJKEIybWQsIFUwKSwgVAorCWFkYwkkMCwgUTIKKworCUMge1UyLCBVMSwgVTB9IDwtLSAoVTAgKyBVMiBCMiAtYyBVKSBCICsgVTEgQjIgKyB1CisJbXVsCVUxCisJYW5kCUIyLCBVMgorCWFkZAlVMiwgVTAKKwljbW92bmMJVTAsIFQKKworCUMge1FQK1VOLCAuLi59IDwtLSB7UVArVU4sIC4uLn0gKyB7UTIsIFExfSArIFUxICsgYworCWFkYwlVMSwgUTEKKwltb3YJLTgoVVAsIFVOLCA4KSwgVTAKKwlhZGMJUTIsIDgoUVAsIFVOLCA4KQorCWpjCUwocV9pbmNyKQorTChxX2luY3JfZG9uZSk6CisJYWRkCSVyYXgsIFUwCisJbW92CVQsICVyYXgKKwlhZGMJJXJkeCwgJXJheAorCW1vdglRMSwgKFFQLCBVTiwgOCkKKwltb3YJJDAsIFIzMihRMSkKKwlzYmIJVTIsIFUyCisJZGVjCVVOCisJbW92CSVyYXgsIFUxCisJam56CUwobG9vcCkKKworTChmaW5hbCk6CisJcG9wCUQKKworCW1vdglVMiwgUTEKKwlhbmQJRCwgVTIKKwlzdWIJVTIsICVyYXgKKwluZWcJUTEKKworCW1vdgklcmF4LCBVMQorCXN1YglELCAlcmF4CisJY21vdmMJVTEsICVyYXgKKwlzYmIJJC0xLCBRMQorCisJbGVhCTEoJXJheCksIFQKKwltdWwJRElOVgorCWFkZAlVMCwgJXJheAorCWFkYwlULCAlcmR4CisJbW92CSVyZHgsIFQKKwlpbXVsCUQsICVyZHgKKwlzdWIJJXJkeCwgVTAKKwljbXAJVTAsICVyYXgKKwlsZWEJKFUwLCBEKSwgJXJheAorCWNtb3ZuYwlVMCwgJXJheAorCXNiYgkkMCwgVAorCWNtcAlELCAlcmF4CisJamMJTChkaXZfZG9uZSkKKwlzdWIJRCwgJXJheAorCWFkZAkkMSwgVAorTChkaXZfZG9uZSk6CisJYWRkCVQsIFEwCisJbW92CVEwLCAoUVApCisJYWRjCVExLCA4KFFQKQorCWpuYwlMKGRvbmUpCitMKGZpbmFsX3FfaW5jcik6CisJYWRkcQkkMSwgMTYoUVApCisJbGVhCTgoUVApLCBRUAorCWpjCUwoZmluYWxfcV9pbmNyKQorCitMKGRvbmUpOgorCXBvcAklcmJwCisJcG9wCSVyYngKKwlwb3AJJXIxMgorCXBvcAklcjEzCisJcG9wCSVyMTQKKwlwb3AJJXIxNQorCUZVTkNfRVhJVCgpCisJcmV0CisKK0wocV9pbmNyKToKKwlDIFUxIGlzIG5vdCBsaXZlLCBzbyB1c2UgaXQgZm9yIGluZGV4aW5nCisJbGVhCTE2KFFQLCBVTiwgOCksIFUxCitMKHFfaW5jcl9sb29wKToKKwlhZGRxCSQxLCAoVTEpCisJam5jCUwocV9pbmNyX2RvbmUpCisJbGVhCTgoVTEpLCBVMQorCWptcAlMKHFfaW5jcl9sb29wKQorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvazgvZ21wLW1wYXJhbS5oIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvazgvZ21wLW1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4N2NjM2IKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9rOC9nbXAtbXBhcmFtLmgKQEAgLTAsMCArMSwyMzcgQEAKKy8qIEFNRCBLOCBnbXAtbXBhcmFtLmggLS0gQ29tcGlsZXIvbWFjaGluZSBwYXJhbWV0ZXIgaGVhZGVyIGZpbGUuCisKK0NvcHlyaWdodCAyMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgNjQKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgOAorCisjaWYgMAorI3VuZGVmIG1wbl9zdWJsc2hfbgorI2RlZmluZSBtcG5fc3VibHNoX24ocnAsdXAsdnAsbixjKQkJCQkJXAorICAoKChycCkgPT0gKHVwKSkgPyBtcG5fc3VibXVsXzEgKHJwLCB2cCwgbiwgQ05TVF9MSU1CKDEpIDw8IChjKSkJXAorICAgOiBNUE4obXBuX3N1YmxzaF9uKShycCx1cCx2cCxuLGMpKQorI2VuZGlmCisKKy8qIDI1MDAgTUh6IEs4IEJyaXNiYW5lICovCisvKiBGRlQgdHVuaW5nIGxpbWl0ID0gMTE1LDc2OCw0MzMgKi8KKy8qIEdlbmVyYXRlZCBieSB0dW5ldXAuYywgMjAxOS0xMC0xOCwgZ2NjIDguMyAqLworCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNQorI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgMgorI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAxNAorI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICAgICAzNQorI2RlZmluZSBQUkVJTlZfTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgOQorI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgICAgICAgICAgICAgICAgMSAgLyogbmF0aXZlICovCisjZGVmaW5lIERJVl9RUl8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAxCisjZGVmaW5lIERJVl9RUl8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVl9RUl8yX1BJMl9USFJFU0hPTEQgICAgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgICAgICAgMTYKKworI2RlZmluZSBESVZfMV9WU19NVUxfMV9QRVJDRU5UICAgICAgICAgICAgIDMwOQorCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDgxCisjZGVmaW5lIE1VTF9UT09NNDRfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjMyCisjZGVmaW5lIE1VTF9UT09NNkhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMzI0CisjZGVmaW5lIE1VTF9UT09NOEhfVEhSRVNIT0xEICAgICAgICAgICAgICAgNDc4CisKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNDNfVEhSRVNIT0xEICAgICAgOTcKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxNTMKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxNTQKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNjNfVEhSRVNIT0xEICAgICAxNjAKKyNkZWZpbmUgTVVMX1RPT000M19UT19UT09NNTRfVEhSRVNIT0xEICAgICAyMjYKKworI2RlZmluZSBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDM0CisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTE0CisjZGVmaW5lIFNRUl9UT09NNF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMzM2CisjZGVmaW5lIFNRUl9UT09NNl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNDMwCisjZGVmaW5lIFNRUl9UT09NOF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKworI2RlZmluZSBNVUxNSURfVE9PTTQyX1RIUkVTSE9MRCAgICAgICAgICAgICAzNgorCisjZGVmaW5lIE1VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIFNRUk1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE5CisKKyNkZWZpbmUgTVVMX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICA2NTQgIC8qIGsgPSA1ICovCisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICA2NTQsIDV9LCB7ICAgICAyMSwgNn0sIHsgICAgIDExLCA1fSwgeyAgICAgMjMsIDZ9LCBcCisgICAgeyAgICAgMTIsIDV9LCB7ICAgICAyNSwgNn0sIHsgICAgIDEzLCA1fSwgeyAgICAgMjcsIDZ9LCBcCisgICAgeyAgICAgMjcsIDd9LCB7ICAgICAxNCwgNn0sIHsgICAgIDI5LCA3fSwgeyAgICAgMTUsIDZ9LCBcCisgICAgeyAgICAgMzEsIDd9LCB7ICAgICAyOSwgOH0sIHsgICAgIDE1LCA3fSwgeyAgICAgMzIsIDh9LCBcCisgICAgeyAgICAgMTcsIDd9LCB7ICAgICAzNywgOH0sIHsgICAgIDE5LCA3fSwgeyAgICAgMzksIDh9LCBcCisgICAgeyAgICAgMjEsIDd9LCB7ICAgICA0NCwgOH0sIHsgICAgIDIzLCA3fSwgeyAgICAgNDcsIDh9LCBcCisgICAgeyAgICAgMjUsIDd9LCB7ICAgICA1MSwgOH0sIHsgICAgIDMxLCA3fSwgeyAgICAgNjMsIDh9LCBcCisgICAgeyAgICAgMzcsIDl9LCB7ICAgICAxOSwgOH0sIHsgICAgIDQzLCA5fSwgeyAgICAgMjMsIDh9LCBcCisgICAgeyAgICAgNTMsIDl9LCB7ICAgICAyNywgOH0sIHsgICAgIDU3LCA5fSwgeyAgICAgMzEsIDh9LCBcCisgICAgeyAgICAgNjcsIDl9LCB7ICAgICAzNSwgOH0sIHsgICAgIDcxLCA5fSwgeyAgICAgMzksIDh9LCBcCisgICAgeyAgICAgODEsIDl9LCB7ICAgICA0MywxMH0sIHsgICAgIDIzLCA5fSwgeyAgICAgNTUsIDh9LCBcCisgICAgeyAgICAxMTEsMTB9LCB7ICAgICAzMSwgOX0sIHsgICAgIDcxLDEwfSwgeyAgICAgMzksIDl9LCBcCisgICAgeyAgICAgODcsMTB9LCB7ICAgICA0NywgOX0sIHsgICAgIDk5LDEwfSwgeyAgICAgNTUsIDl9LCBcCisgICAgeyAgICAxMTEsMTF9LCB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA5fSwgeyAgICAxMzEsMTB9LCBcCisgICAgeyAgICAgNzEsIDl9LCB7ICAgIDE0NywxMH0sIHsgICAgIDg3LDExfSwgeyAgICAgNDcsMTB9LCBcCisgICAgeyAgICAxMTEsMTF9LCB7ICAgICA2MywxMH0sIHsgICAgMTQzLDExfSwgeyAgICAgNzksMTB9LCBcCisgICAgeyAgICAxNjcsMTF9LCB7ICAgICA5NSwxMH0sIHsgICAgMTk5LDExfSwgeyAgICAxMTEsMTJ9LCBcCisgICAgeyAgICAgNjMsMTF9LCB7ICAgIDE0MywxMH0sIHsgICAgMjg3LDExfSwgeyAgICAxNTksMTJ9LCBcCisgICAgeyAgICAgOTUsMTF9LCB7ICAgIDE5MSwxMH0sIHsgICAgMzgzLDExfSwgeyAgICAyMDcsMTB9LCBcCisgICAgeyAgICA0MTUsMTN9LCB7ICAgICA2MywxMn0sIHsgICAgMTI3LDExfSwgeyAgICAyNTUsMTB9LCBcCisgICAgeyAgICA1MTEsMTF9LCB7ICAgIDI3MSwxMH0sIHsgICAgNTQzLDExfSwgeyAgICAyODcsMTJ9LCBcCisgICAgeyAgICAxNTksMTF9LCB7ICAgIDMxOSwxMH0sIHsgICAgNjM5LDExfSwgeyAgICAzMzUsMTB9LCBcCisgICAgeyAgICA2NzEsMTF9LCB7ICAgIDM1MSwxMn0sIHsgICAgMTkxLDExfSwgeyAgICA0MTUsMTJ9LCBcCisgICAgeyAgICAyMjMsMTF9LCB7ICAgIDQ0NywxM30sIHsgICAgMTI3LDEyfSwgeyAgICAyNTUsMTF9LCBcCisgICAgeyAgICA1NDMsMTJ9LCB7ICAgIDI4NywxMX0sIHsgICAgNTc1LDEwfSwgeyAgIDExNTEsMTF9LCBcCisgICAgeyAgICA2MDcsMTJ9LCB7ICAgIDMxOSwxMX0sIHsgICAgNjcxLDEyfSwgeyAgICAzNTEsMTF9LCBcCisgICAgeyAgICA3MDMsMTN9LCB7ICAgIDE5MSwxMn0sIHsgICAgMzgzLDExfSwgeyAgICA3NjcsMTJ9LCBcCisgICAgeyAgICA0MTUsMTF9LCB7ICAgIDgzMSwxMn0sIHsgICAgNDQ3LDExfSwgeyAgICA4OTUsMTJ9LCBcCisgICAgeyAgICA0NzksMTR9LCB7ICAgIDEyNywxM30sIHsgICAgMjU1LDEyfSwgeyAgICA1NDMsMTF9LCBcCisgICAgeyAgIDEwODcsMTJ9LCB7ICAgIDU3NSwxMX0sIHsgICAxMTUxLDEyfSwgeyAgICA2MDcsMTN9LCBcCisgICAgeyAgICAzMTksMTJ9LCB7ICAgIDczNSwxM30sIHsgICAgMzgzLDEyfSwgeyAgICA4MzEsMTN9LCBcCisgICAgeyAgICA0NDcsMTJ9LCB7ICAgIDk1OSwxNH0sIHsgICAgMjU1LDEzfSwgeyAgICA1MTEsMTJ9LCBcCisgICAgeyAgIDEwODcsMTN9LCB7ICAgIDU3NSwxMn0sIHsgICAxMjE1LDEzfSwgeyAgICA2MzksMTJ9LCBcCisgICAgeyAgIDEyNzksMTN9LCB7ICAgIDcwMywxMn0sIHsgICAxNDA3LDE0fSwgeyAgICAzODMsMTN9LCBcCisgICAgeyAgICA3NjcsMTJ9LCB7ICAgMTUzNSwxM30sIHsgICAgODMxLDEyfSwgeyAgIDE2NjMsMTN9LCBcCisgICAgeyAgICA5NTksMTV9LCB7ICAgIDI1NSwxNH0sIHsgICAgNTExLDEzfSwgeyAgIDEyMTUsMTR9LCBcCisgICAgeyAgICA2MzksMTN9LCB7ICAgMTQ3MSwxNH0sIHsgICAgNzY3LDEzfSwgeyAgIDE2NjMsMTR9LCBcCisgICAgeyAgICA4OTUsMTN9LCB7ICAgMTg1NSwxNX0sIHsgICAgNTExLDE0fSwgeyAgIDEwMjMsMTN9LCBcCisgICAgeyAgIDIwNDcsMTR9LCB7ICAgMTE1MSwxM30sIHsgICAyMzY3LDE0fSwgeyAgIDE0MDcsMTV9LCBcCisgICAgeyAgICA3NjcsMTR9LCB7ICAgMTc5MSwxNn0sIHsgICAgNTExLDE1fSwgeyAgIDEwMjMsMTR9LCBcCisgICAgeyAgIDIzMDMsMTV9LCB7ICAgMTI3OSwxNH0sIHsgICAyNjg3LDE1fSwgeyAgIDE1MzUsMTR9LCBcCisgICAgeyAgIDMxOTksMTV9LCB7ICAgMTc5MSwxNn0sIHsgICAxMDIzLDE1fSwgeyAgIDIwNDcsMTR9LCBcCisgICAgeyAgIDQyMjMsMTV9LCB7ICAgMjMwMywxNH0sIHsgICA0NzM1LDE1fSwgeyAgIDI1NTksMTZ9LCBcCisgICAgeyAgIDE1MzUsMTV9LCB7ICAgMzA3MSwxNH0sIHsgICA2MjcxLDE1fSwgeyAgIDMzMjcsMTd9LCBcCisgICAgeyAxMzEwNzIsMTh9LCB7IDI2MjE0NCwxOX0sIHsgNTI0Mjg4LDIwfSwgezEwNDg1NzYsMjF9LCBcCisgICAgezIwOTcxNTIsMjJ9LCB7NDE5NDMwNCwyM30sIHs4Mzg4NjA4LDI0fSB9CisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzX1NJWkUgMTgzCisjZGVmaW5lIE1VTF9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDExNTIwCisKKyNkZWZpbmUgU1FSX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICA1NDAgIC8qIGsgPSA1ICovCisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICA1NDAsIDV9LCB7ICAgICAyMSwgNn0sIHsgICAgIDExLCA1fSwgeyAgICAgMjMsIDZ9LCBcCisgICAgeyAgICAgMTIsIDV9LCB7ICAgICAyNSwgNn0sIHsgICAgIDEzLCA1fSwgeyAgICAgMjcsIDZ9LCBcCisgICAgeyAgICAgMTYsIDV9LCB7ICAgICAzMywgNn0sIHsgICAgIDI5LCA3fSwgeyAgICAgMTUsIDZ9LCBcCisgICAgeyAgICAgMzEsIDd9LCB7ICAgICAxNiwgNn0sIHsgICAgIDMzLCA3fSwgeyAgICAgMzMsIDh9LCBcCisgICAgeyAgICAgMTcsIDd9LCB7ICAgICAzNywgOH0sIHsgICAgIDE5LCA3fSwgeyAgICAgMzksIDh9LCBcCisgICAgeyAgICAgMjEsIDd9LCB7ICAgICA0MywgOH0sIHsgICAgIDIzLCA3fSwgeyAgICAgNDcsIDh9LCBcCisgICAgeyAgICAgMjUsIDd9LCB7ICAgICA1MSwgOH0sIHsgICAgIDI5LCA5fSwgeyAgICAgMTUsIDh9LCBcCisgICAgeyAgICAgMzcsIDl9LCB7ICAgICAxOSwgOH0sIHsgICAgIDQzLCA5fSwgeyAgICAgMjMsIDh9LCBcCisgICAgeyAgICAgNTEsIDl9LCB7ICAgICAyNywgOH0sIHsgICAgIDU1LCA5fSwgeyAgICAgMzEsIDh9LCBcCisgICAgeyAgICAgNjUsIDl9LCB7ICAgICAzNSwgOH0sIHsgICAgIDcxLCA5fSwgeyAgICAgNDMsMTB9LCBcCisgICAgeyAgICAgMjMsIDl9LCB7ICAgICA1NSwxMH0sIHsgICAgIDMxLCA5fSwgeyAgICAgNzEsMTB9LCBcCisgICAgeyAgICAgMzksIDl9LCB7ICAgICA4MywxMH0sIHsgICAgIDQ3LCA5fSwgeyAgICAgOTksMTB9LCBcCisgICAgeyAgICAgNTUsIDl9LCB7ICAgIDExMSwxMX0sIHsgICAgIDMxLDEwfSwgeyAgICAgNjMsIDl9LCBcCisgICAgeyAgICAxMjcsMTB9LCB7ICAgICA4NywxMX0sIHsgICAgIDQ3LDEwfSwgeyAgICAxMTEsMTJ9LCBcCisgICAgeyAgICAgMzEsMTF9LCB7ICAgICA2MywxMH0sIHsgICAgMTQzLDExfSwgeyAgICAgNzksMTB9LCBcCisgICAgeyAgICAxNjcsMTF9LCB7ICAgICA5NSwxMH0sIHsgICAgMTkxLDExfSwgeyAgICAxMTEsMTJ9LCBcCisgICAgeyAgICAgNjMsMTF9LCB7ICAgIDEyNywgOX0sIHsgICAgNTExLDExfSwgeyAgICAxNDMsMTB9LCBcCisgICAgeyAgICAyODcsIDl9LCB7ICAgIDU3NSwxMX0sIHsgICAgMTU5LDEyfSwgeyAgICAgOTUsMTF9LCBcCisgICAgeyAgICAxOTEsMTB9LCB7ICAgIDM4MywgOX0sIHsgICAgNzY3LDExfSwgeyAgICAyMDcsMTB9LCBcCisgICAgeyAgICA0MTUsMTN9LCB7ICAgICA2MywxMn0sIHsgICAgMTI3LDEwfSwgeyAgICA1MTEsIDl9LCBcCisgICAgeyAgIDEwMjMsMTF9LCB7ICAgIDI3MSwxMH0sIHsgICAgNTQzLCA5fSwgeyAgIDEwODcsMTF9LCBcCisgICAgeyAgICAyODcsMTB9LCB7ICAgIDU3NSwxMn0sIHsgICAgMTU5LDExfSwgeyAgICAzMTksMTB9LCBcCisgICAgeyAgICA2MzksMTF9LCB7ICAgIDMzNSwxMH0sIHsgICAgNjcxLDExfSwgeyAgICAzNTEsMTB9LCBcCisgICAgeyAgICA3MDMsMTJ9LCB7ICAgIDE5MSwxMX0sIHsgICAgMzgzLDEwfSwgeyAgICA3NjcsMTF9LCBcCisgICAgeyAgICA0MTUsMTB9LCB7ICAgIDgzMSwxMn0sIHsgICAgMjIzLDExfSwgeyAgICA0NDcsMTN9LCBcCisgICAgeyAgICAxMjcsMTF9LCB7ICAgIDUxMSwxMH0sIHsgICAxMDIzLDExfSwgeyAgICA1NDMsMTB9LCBcCisgICAgeyAgIDEwODcsMTJ9LCB7ICAgIDI4NywxMX0sIHsgICAgNTc1LDEwfSwgeyAgIDExNTEsMTF9LCBcCisgICAgeyAgICA2MDcsMTJ9LCB7ICAgIDMxOSwxMX0sIHsgICAgNjM5LDEwfSwgeyAgIDEyNzksMTF9LCBcCisgICAgeyAgICA2NzEsMTJ9LCB7ICAgIDM1MSwxMX0sIHsgICAgNzAzLDEzfSwgeyAgICAxOTEsMTJ9LCBcCisgICAgeyAgICAzODMsMTF9LCB7ICAgIDc2NywxMn0sIHsgICAgNDE1LDExfSwgeyAgICA4MzEsMTJ9LCBcCisgICAgeyAgICA0NDcsMTF9LCB7ICAgIDg5NSwxNH0sIHsgICAgMTI3LDEyfSwgeyAgICA1MTEsMTF9LCBcCisgICAgeyAgIDEwMjMsMTJ9LCB7ICAgIDU0MywxMX0sIHsgICAxMDg3LDEyfSwgeyAgICA1NzUsMTF9LCBcCisgICAgeyAgIDExNTEsMTJ9LCB7ICAgIDYwNywxMX0sIHsgICAxMjE1LDEzfSwgeyAgICAzMTksMTJ9LCBcCisgICAgeyAgICA2MzksMTF9LCB7ICAgMTI3OSwxMn0sIHsgICAgNjcxLDExfSwgeyAgIDEzNDMsMTJ9LCBcCisgICAgeyAgICA3MDMsMTF9LCB7ICAgMTQwNywxMn0sIHsgICAgNzM1LDEzfSwgeyAgICAzODMsMTJ9LCBcCisgICAgeyAgICA3NjcsMTF9LCB7ICAgMTUzNSwxMn0sIHsgICAgODMxLDEzfSwgeyAgICA0NDcsMTJ9LCBcCisgICAgeyAgICA5NTksMTN9LCB7ICAgIDUxMSwxMn0sIHsgICAxMDg3LDEzfSwgeyAgICA1NzUsMTJ9LCBcCisgICAgeyAgIDEyMTUsMTN9LCB7ICAgIDYzOSwxMn0sIHsgICAxMzQzLDEzfSwgeyAgICA3MDMsMTJ9LCBcCisgICAgeyAgIDE0MDcsMTR9LCB7ICAgIDM4MywxM30sIHsgICAgNzY3LDEyfSwgeyAgIDE1MzUsMTN9LCBcCisgICAgeyAgICA4MzEsMTJ9LCB7ICAgMTY2MywxM30sIHsgICAgODk1LDEyfSwgeyAgIDE3OTEsMTN9LCBcCisgICAgeyAgICA5NTksMTR9LCB7ICAgIDUxMSwxM30sIHsgICAxMjE1LDE0fSwgeyAgICA2MzksMTN9LCBcCisgICAgeyAgIDE0NzEsMTR9LCB7ICAgIDc2NywxM30sIHsgICAxNjYzLDE0fSwgeyAgICA4OTUsMTN9LCBcCisgICAgeyAgIDE3OTEsMTV9LCB7ICAgIDUxMSwxNH0sIHsgICAxMDIzLDEzfSwgeyAgIDIxMTEsMTR9LCBcCisgICAgeyAgIDExNTEsMTN9LCB7ICAgMjMwMywxNH0sIHsgICAxNDA3LDE1fSwgeyAgICA3NjcsMTR9LCBcCisgICAgeyAgIDE3OTEsMTZ9LCB7ICAgIDUxMSwxNX0sIHsgICAxMDIzLDE0fSwgeyAgIDIzMDMsMTV9LCBcCisgICAgeyAgIDEyNzksMTR9LCB7ICAgMjY4NywxNX0sIHsgICAxNTM1LDE0fSwgeyAgIDMxOTksMTV9LCBcCisgICAgeyAgIDE3OTEsMTZ9LCB7ICAgMTAyMywxNX0sIHsgICAyMDQ3LDE0fSwgeyAgIDQyMjMsMTV9LCBcCisgICAgeyAgIDIzMDMsMTR9LCB7ICAgNDg2MywxNX0sIHsgICAyNTU5LDE2fSwgeyAgIDE1MzUsMTV9LCBcCisgICAgeyAgIDMwNzEsMTR9LCB7ICAgNjI3MSwxNX0sIHsgICAzMzI3LDE3fSwgeyAxMzEwNzIsMTh9LCBcCisgICAgeyAyNjIxNDQsMTl9LCB7IDUyNDI4OCwyMH0sIHsxMDQ4NTc2LDIxfSwgezIwOTcxNTIsMjJ9LCBcCisgICAgezQxOTQzMDQsMjN9LCB7ODM4ODYwOCwyNH0gfQorI2RlZmluZSBTUVJfRkZUX1RBQkxFM19TSVpFIDIwMgorI2RlZmluZSBTUVJfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNzI5NgorCisjZGVmaW5lIE1VTExPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTVVMTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgNjEKKyNkZWZpbmUgTVVMTE9fTVVMX05fVEhSRVNIT0xEICAgICAgICAgICAgMjIyMzkKKyNkZWZpbmUgU1FSTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDgKKyNkZWZpbmUgU1FSTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDAgIC8qIG5ldmVyIG1wbl9zcXJsb19iYXNlY2FzZSAqLworI2RlZmluZSBTUVJMT19TUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAxNDI4MQorCisjZGVmaW5lIERDX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDQ3CisjZGVmaW5lIERDX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAgMjY2CisjZGVmaW5lIERDX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDM4CisjZGVmaW5lIERDX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTA0CisKKyNkZWZpbmUgSU5WX01VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgNTQKKyNkZWZpbmUgSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgICAyNTIKKyNkZWZpbmUgSU5WX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAyNTAKKworI2RlZmluZSBCSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgIDI1OAorI2RlZmluZSBSRURDXzFfVE9fUkVEQ18yX1RIUkVTSE9MRCAgICAgICAgICAzNQorI2RlZmluZSBSRURDXzJfVE9fUkVEQ19OX1RIUkVTSE9MRCAgICAgICAgICA3OQorCisjZGVmaW5lIE1VX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAyMDg5CisjZGVmaW5lIE1VX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAxODk1CisjZGVmaW5lIE1VUElfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDk5CisjZGVmaW5lIE1VX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAxNzg3CisjZGVmaW5lIE1VX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAxODk1CisKKyNkZWZpbmUgUE9XTV9TRUNfVEFCTEUgIDEsMTYsMTk0LDk2MCwyODI1CisKKyNkZWZpbmUgR0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICAgMjYKKyNkZWZpbmUgU0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAyNDgKKyNkZWZpbmUgU0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgIDE3NDcKKworI2RlZmluZSBGQUNfRFNDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTI0MAorI2RlZmluZSBGQUNfT0REX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAyNworCisjZGVmaW5lIE1BVFJJWDIyX1NUUkFTU0VOX1RIUkVTSE9MRCAgICAgICAgIDIxCisjZGVmaW5lIEhHQ0QyX0RJVjFfTUVUSE9EICAgICAgICAgICAgICAgICAgICAzICAvKiA0LjEwJSBmYXN0ZXIgdGhhbiA1ICovCisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAgMTQxCisjZGVmaW5lIEhHQ0RfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTgxCisjZGVmaW5lIEhHQ0RfUkVEVUNFX1RIUkVTSE9MRCAgICAgICAgICAgICA0NjMzCisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgNjIyCisjZGVmaW5lIEdDREVYVF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgNDk2CisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAgICAxICAvKiAwLjk3JSBmYXN0ZXIgdGhhbiAzICovCisKKy8qIFR1bmV1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCB0b29rIDEzMTgzMiBzZWNvbmRzICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9rOC9tdWxfYmFzZWNhc2UuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvazgvbXVsX2Jhc2VjYXNlLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTJlZmI5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvazgvbXVsX2Jhc2VjYXNlLmFzbQpAQCAtMCwwICsxLDQ2OSBAQAorZG5sICBBTUQ2NCBtcG5fbXVsX2Jhc2VjYXNlLgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3Jiam9ybiBHcmFubHVuZCBhbmQgRGF2aWQgSGFydmV5LgorCitkbmwgIENvcHlyaWdodCAyMDA4LCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBBTUQgSzgsSzkJIDIuMzc1CitDIEFNRCBLMTAJIDIuMzc1CitDIEludGVsIFA0CTE1LTE2CitDIEludGVsIGNvcmUyCSA0LjQ1CitDIEludGVsIGNvcmVpCSA0LjM1CitDIEludGVsIGF0b20JID8KK0MgVklBIG5hbm8JIDQuNQorCitDIFRoZSBpbm5lciBsb29wcyBvZiB0aGlzIGNvZGUgYXJlIHRoZSByZXN1bHQgb2YgcnVubmluZyBhIGNvZGUgZ2VuZXJhdGlvbiBhbmQKK0Mgb3B0aW1pemF0aW9uIHRvb2wgc3VpdGUgd3JpdHRlbiBieSBEYXZpZCBIYXJ2ZXkgYW5kIFRvcmJqb3JuIEdyYW5sdW5kLgorCitDIFRPRE8KK0MgICogVXNlIGZld2VyIHJlZ2lzdGVycy4gIChob3c/Pz8gSSBjYW4ndCBzZWUgaXQgLS0gZGF2aWQpCitDICAqIEF2b2lkIHNvbWUgIm1vdiAkMCxyIiBhbmQgaW5zdGVhZCB1c2UgInhvciByLHIiLgorQyAgKiBDYW4gdGhlIHRvcCBvZiBlYWNoIEwoYWRkbXVsX291dGVyX24pIHByb2xvZ3VlIGJlIGZvbGRlZCBpbnRvIHRoZQorQyAgICBtdWxfMS9tdWxfMiBwcm9sb2d1ZXMsIHNhdmluZyBhIExFQSAoJXJpcCk/IEl0IHdvdWxkIHNsb3cgZG93biB0aGUKK0MgICAgY2FzZSB3aGVyZSB2biA9IDEgb3IgMjsgaXMgaXQgd29ydGggaXQ/CisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsICAgICAgYCVyZGknKQorZGVmaW5lKGB1cCcsICAgICAgYCVyc2knKQorZGVmaW5lKGB1bl9wYXJhbScsYCVyZHgnKQorZGVmaW5lKGB2cCcsICAgICAgYCVyY3gnKQorZGVmaW5lKGB2bicsICAgICAgYCVyOCcpCisKK2RlZmluZShgdjAnLCBgJXIxMicpCitkZWZpbmUoYHYxJywgYCVyOScpCisKK2RlZmluZShgdzAnLCBgJXJieCcpCitkZWZpbmUoYHcxJywgYCVyMTUnKQorZGVmaW5lKGB3MicsIGAlcmJwJykKK2RlZmluZShgdzMnLCBgJXIxMCcpCisKK2RlZmluZShgbicsICBgJXIxMScpCitkZWZpbmUoYG91dGVyX2FkZHInLCBgJXIxNCcpCitkZWZpbmUoYHVuJywgIGAlcjEzJykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMTYpCitQUk9MT0dVRShtcG5fbXVsX2Jhc2VjYXNlKQorCUZVTkNfRU5UUlkoNCkKK0lGRE9TKGAJbW92CTU2KCVyc3ApLCAlcjhkCScpCisJcHVzaAklcmJ4CisJcHVzaAklcmJwCisJcHVzaAklcjEyCisJcHVzaAklcjEzCisJcHVzaAklcjE0CisJcHVzaAklcjE1CisKKwl4b3IJUjMyKHVuKSwgUjMyKHVuKQorCW1vdgkodXApLCAlcmF4CisJbW92CSh2cCksIHYwCisKKwlzdWIJdW5fcGFyYW0sIHVuCQlDIHJkeCB1c2VkIGJ5IG11bAorCW1vdgl1biwgbgorCW1vdglSMzIodW5fcGFyYW0pLCBSMzIodzApCisKKwlsZWEJKHJwLHVuX3BhcmFtLDgpLCBycAorCWxlYQkodXAsdW5fcGFyYW0sOCksIHVwCisKKwltdWwJdjAKKworCXRlc3QJJDEsIFI4KHZuKQorCWp6CUwobXVsXzIpCisKK0MgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0MgICAgIG11bF8xIGZvciB2cFswXSBpZiB2biBpcyBvZGQKKworTChtdWxfMSk6CisJYW5kCSQzLCBSMzIodzApCisJanoJTChtdWxfMV9wcm9sb2d1ZV8wKQorCWNtcAkkMiwgUjMyKHcwKQorCWpjCUwobXVsXzFfcHJvbG9ndWVfMSkKKwlqeglMKG11bF8xX3Byb2xvZ3VlXzIpCisKK0wobXVsXzFfcHJvbG9ndWVfMyk6CisJYWRkCSQtMSwgbgorCWxlYQlMKGFkZG11bF9vdXRlcl8zKSglcmlwKSwgb3V0ZXJfYWRkcgorCW1vdgklcmF4LCB3MworCW1vdgklcmR4LCB3MAorCWptcAlMKG11bF8xX2VudHJ5XzMpCisKK0wobXVsXzFfcHJvbG9ndWVfMCk6CisJbW92CSVyYXgsIHcyCisJbW92CSVyZHgsIHczCQlDIG5vdGU6IGFscmVhZHkgdzAgPT0gMAorCWxlYQlMKGFkZG11bF9vdXRlcl8wKSglcmlwKSwgb3V0ZXJfYWRkcgorCWptcAlMKG11bF8xX2VudHJ5XzApCisKK0wobXVsXzFfcHJvbG9ndWVfMSk6CisJY21wCSQtMSwgdW4KKwlqbmUJMmYKKwltb3YJJXJheCwgLTgocnApCisJbW92CSVyZHgsIChycCkKKwlqbXAJTChyZXQpCisyOglhZGQJJDEsIG4KKwlsZWEJTChhZGRtdWxfb3V0ZXJfMSkoJXJpcCksIG91dGVyX2FkZHIKKwltb3YJJXJheCwgdzEKKwltb3YJJXJkeCwgdzIKKwl4b3IJUjMyKHczKSwgUjMyKHczKQorCW1vdgkodXAsbiw4KSwgJXJheAorCWptcAlMKG11bF8xX2VudHJ5XzEpCisKK0wobXVsXzFfcHJvbG9ndWVfMik6CisJYWRkCSQtMiwgbgorCWxlYQlMKGFkZG11bF9vdXRlcl8yKSglcmlwKSwgb3V0ZXJfYWRkcgorCW1vdgklcmF4LCB3MAorCW1vdgklcmR4LCB3MQorCW1vdgkyNCh1cCxuLDgpLCAlcmF4CisJeG9yCVIzMih3MiksIFIzMih3MikKKwl4b3IJUjMyKHczKSwgUjMyKHczKQorCWptcAlMKG11bF8xX2VudHJ5XzIpCisKKworCUMgdGhpcyBsb29wIGlzIDEwIGMvbG9vcCA9IDIuNSBjL2wgb24gSzgsIGZvciBhbGwgdXAvcnAgYWxpZ25tZW50cworCisJQUxJR04oMTYpCitMKG11bF8xX3RvcCk6CisJbW92CXcwLCAtMTYocnAsbiw4KQorCWFkZAklcmF4LCB3MQorCW1vdgkodXAsbiw4KSwgJXJheAorCWFkYwklcmR4LCB3MgorTChtdWxfMV9lbnRyeV8xKToKKwl4b3IJUjMyKHcwKSwgUjMyKHcwKQorCW11bAl2MAorCW1vdgl3MSwgLTgocnAsbiw4KQorCWFkZAklcmF4LCB3MgorCWFkYwklcmR4LCB3MworTChtdWxfMV9lbnRyeV8wKToKKwltb3YJOCh1cCxuLDgpLCAlcmF4CisJbXVsCXYwCisJbW92CXcyLCAocnAsbiw4KQorCWFkZAklcmF4LCB3MworCWFkYwklcmR4LCB3MAorTChtdWxfMV9lbnRyeV8zKToKKwltb3YJMTYodXAsbiw4KSwgJXJheAorCW11bAl2MAorCW1vdgl3MywgOChycCxuLDgpCisJeG9yCVIzMih3MiksIFIzMih3MikJQyB6ZXJvCisJbW92CXcyLCB3MwkJCUMgemVybworCWFkZAklcmF4LCB3MAorCW1vdgkyNCh1cCxuLDgpLCAlcmF4CisJbW92CXcyLCB3MQkJCUMgemVybworCWFkYwklcmR4LCB3MQorTChtdWxfMV9lbnRyeV8yKToKKwltdWwJdjAKKwlhZGQJJDQsIG4KKwlqcwlMKG11bF8xX3RvcCkKKworCW1vdgl3MCwgLTE2KHJwKQorCWFkZAklcmF4LCB3MQorCW1vdgl3MSwgLTgocnApCisJYWRjCSVyZHgsIHcyCisJbW92CXcyLCAocnApCisKKwlhZGQJJC0xLCB2bgkJCUMgdm4gLT0gMQorCWp6CUwocmV0KQorCisJbW92CTgodnApLCB2MAorCW1vdgkxNih2cCksIHYxCisKKwlsZWEJOCh2cCksIHZwCQlDIHZwICs9IDEKKwlsZWEJOChycCksIHJwCQlDIHJwICs9IDEKKworCWptcAkqb3V0ZXJfYWRkcgorCitDID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDICAgICBtdWxfMiBmb3IgdnBbMF0sIHZwWzFdIGlmIHZuIGlzIGV2ZW4KKworCUFMSUdOKDE2KQorTChtdWxfMik6CisJbW92CTgodnApLCB2MQorCisJYW5kCSQzLCBSMzIodzApCisJanoJTChtdWxfMl9wcm9sb2d1ZV8wKQorCWNtcAkkMiwgUjMyKHcwKQorCWp6CUwobXVsXzJfcHJvbG9ndWVfMikKKwlqYwlMKG11bF8yX3Byb2xvZ3VlXzEpCisKK0wobXVsXzJfcHJvbG9ndWVfMyk6CisJbGVhCUwoYWRkbXVsX291dGVyXzMpKCVyaXApLCBvdXRlcl9hZGRyCisJYWRkCSQyLCBuCisJbW92CSVyYXgsIC0xNihycCxuLDgpCisJbW92CSVyZHgsIHcyCisJeG9yCVIzMih3MyksIFIzMih3MykKKwl4b3IJUjMyKHcwKSwgUjMyKHcwKQorCW1vdgktMTYodXAsbiw4KSwgJXJheAorCWptcAlMKG11bF8yX2VudHJ5XzMpCisKKwlBTElHTigxNikKK0wobXVsXzJfcHJvbG9ndWVfMCk6CisJYWRkCSQzLCBuCisJbW92CSVyYXgsIHcwCisJbW92CSVyZHgsIHcxCisJeG9yCVIzMih3MiksIFIzMih3MikKKwltb3YJLTI0KHVwLG4sOCksICVyYXgKKwlsZWEJTChhZGRtdWxfb3V0ZXJfMCkoJXJpcCksIG91dGVyX2FkZHIKKwlqbXAJTChtdWxfMl9lbnRyeV8wKQorCisJQUxJR04oMTYpCitMKG11bF8yX3Byb2xvZ3VlXzEpOgorCW1vdgklcmF4LCB3MworCW1vdgklcmR4LCB3MAorCXhvcglSMzIodzEpLCBSMzIodzEpCisJbGVhCUwoYWRkbXVsX291dGVyXzEpKCVyaXApLCBvdXRlcl9hZGRyCisJam1wCUwobXVsXzJfZW50cnlfMSkKKworCUFMSUdOKDE2KQorTChtdWxfMl9wcm9sb2d1ZV8yKToKKwlhZGQJJDEsIG4KKwlsZWEJTChhZGRtdWxfb3V0ZXJfMikoJXJpcCksIG91dGVyX2FkZHIKKwltb3YJJDAsIFIzMih3MCkKKwltb3YJJDAsIFIzMih3MSkKKwltb3YJJXJheCwgdzIKKwltb3YJLTgodXAsbiw4KSwgJXJheAorCW1vdgklcmR4LCB3MworCWptcAlMKG11bF8yX2VudHJ5XzIpCisKKwlDIHRoaXMgbG9vcCBpcyAxOCBjL2xvb3AgPSAyLjI1IGMvbCBvbiBLOCwgZm9yIGFsbCB1cC9ycCBhbGlnbm1lbnRzCisKKwlBTElHTigxNikKK0wobXVsXzJfdG9wKToKKwltb3YJLTMyKHVwLG4sOCksICVyYXgKKwltdWwJdjEKKwlhZGQJJXJheCwgdzAKKwlhZGMJJXJkeCwgdzEKKwltb3YJLTI0KHVwLG4sOCksICVyYXgKKwl4b3IJUjMyKHcyKSwgUjMyKHcyKQorCW11bAl2MAorCWFkZAklcmF4LCB3MAorCW1vdgktMjQodXAsbiw4KSwgJXJheAorCWFkYwklcmR4LCB3MQorCWFkYwkkMCwgUjMyKHcyKQorTChtdWxfMl9lbnRyeV8wKToKKwltdWwJdjEKKwlhZGQJJXJheCwgdzEKKwltb3YJdzAsIC0yNChycCxuLDgpCisJYWRjCSVyZHgsIHcyCisJbW92CS0xNih1cCxuLDgpLCAlcmF4CisJbXVsCXYwCisJbW92CSQwLCBSMzIodzMpCisJYWRkCSVyYXgsIHcxCisJYWRjCSVyZHgsIHcyCisJbW92CS0xNih1cCxuLDgpLCAlcmF4CisJYWRjCSQwLCBSMzIodzMpCisJbW92CSQwLCBSMzIodzApCisJbW92CXcxLCAtMTYocnAsbiw4KQorTChtdWxfMl9lbnRyeV8zKToKKwltdWwJdjEKKwlhZGQJJXJheCwgdzIKKwltb3YJLTgodXAsbiw4KSwgJXJheAorCWFkYwklcmR4LCB3MworCW1vdgkkMCwgUjMyKHcxKQorCW11bAl2MAorCWFkZAklcmF4LCB3MgorCW1vdgktOCh1cCxuLDgpLCAlcmF4CisJYWRjCSVyZHgsIHczCisJYWRjCVIzMih3MSksIFIzMih3MCkJQyBhZGMgJDAsIHcwCitMKG11bF8yX2VudHJ5XzIpOgorCW11bAl2MQorCWFkZAklcmF4LCB3MworCW1vdgl3MiwgLTgocnAsbiw4KQorCWFkYwklcmR4LCB3MAorCW1vdgkodXAsbiw4KSwgJXJheAorCW11bAl2MAorCWFkZAklcmF4LCB3MworCWFkYwklcmR4LCB3MAorCWFkYwkkMCwgUjMyKHcxKQorTChtdWxfMl9lbnRyeV8xKToKKwlhZGQJJDQsIG4KKwltb3YJdzMsIC0zMihycCxuLDgpCisJanMJTChtdWxfMl90b3ApCisKKwltb3YJLTMyKHVwLG4sOCksICVyYXgJQyBGSVhNRTogbiBpcyBjb25zdGFudAorCW11bAl2MQorCWFkZAklcmF4LCB3MAorCW1vdgl3MCwgKHJwKQorCWFkYwklcmR4LCB3MQorCW1vdgl3MSwgOChycCkKKworCWFkZAkkLTIsIHZuCQkJQyB2biAtPSAyCisJanoJTChyZXQpCisKKwltb3YJMTYodnApLCB2MAorCW1vdgkyNCh2cCksIHYxCisKKwlsZWEJMTYodnApLCB2cAkJQyB2cCArPSAyCisJbGVhCTE2KHJwKSwgcnAJCUMgcnAgKz0gMgorCisJam1wCSpvdXRlcl9hZGRyCisKKworQyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQyAgICAgYWRkbXVsXzIgZm9yIHJlbWFpbmluZyB2cCdzCisKKwlDIGluIHRoZSBmb2xsb3dpbmcgcHJvbG9ndWVzLCB3ZSByZXVzZSB1biB0byBzdG9yZSB0aGUKKwlDIGFkanVzdGVkIHZhbHVlIG9mIG4gdGhhdCBpcyByZWxvYWRlZCBvbiBlYWNoIGl0ZXJhdGlvbgorCitMKGFkZG11bF9vdXRlcl8wKToKKwlhZGQJJDMsIHVuCisJbGVhCTAoJXJpcCksIG91dGVyX2FkZHIKKworCW1vdgl1biwgbgorCW1vdgktMjQodXAsdW4sOCksICVyYXgKKwltdWwJdjAKKwltb3YJJXJheCwgdzAKKwltb3YJLTI0KHVwLHVuLDgpLCAlcmF4CisJbW92CSVyZHgsIHcxCisJeG9yCVIzMih3MiksIFIzMih3MikKKwlqbXAJTChhZGRtdWxfZW50cnlfMCkKKworTChhZGRtdWxfb3V0ZXJfMSk6CisJbW92CXVuLCBuCisJbW92CSh1cCx1biw4KSwgJXJheAorCW11bAl2MAorCW1vdgklcmF4LCB3MworCW1vdgkodXAsdW4sOCksICVyYXgKKwltb3YJJXJkeCwgdzAKKwl4b3IJUjMyKHcxKSwgUjMyKHcxKQorCWptcAlMKGFkZG11bF9lbnRyeV8xKQorCitMKGFkZG11bF9vdXRlcl8yKToKKwlhZGQJJDEsIHVuCisJbGVhCTAoJXJpcCksIG91dGVyX2FkZHIKKworCW1vdgl1biwgbgorCW1vdgktOCh1cCx1biw4KSwgJXJheAorCW11bAl2MAorCXhvcglSMzIodzApLCBSMzIodzApCisJbW92CSVyYXgsIHcyCisJeG9yCVIzMih3MSksIFIzMih3MSkKKwltb3YJJXJkeCwgdzMKKwltb3YJLTgodXAsdW4sOCksICVyYXgKKwlqbXAJTChhZGRtdWxfZW50cnlfMikKKworTChhZGRtdWxfb3V0ZXJfMyk6CisJYWRkCSQyLCB1bgorCWxlYQkwKCVyaXApLCBvdXRlcl9hZGRyCisKKwltb3YJdW4sIG4KKwltb3YJLTE2KHVwLHVuLDgpLCAlcmF4CisJeG9yCVIzMih3MyksIFIzMih3MykKKwltdWwJdjAKKwltb3YJJXJheCwgdzEKKwltb3YJLTE2KHVwLHVuLDgpLCAlcmF4CisJbW92CSVyZHgsIHcyCisJam1wCUwoYWRkbXVsX2VudHJ5XzMpCisKKwlDIHRoaXMgbG9vcCBpcyAxOSBjL2xvb3AgPSAyLjM3NSBjL2wgb24gSzgsIGZvciBhbGwgdXAvcnAgYWxpZ25tZW50cworCisJQUxJR04oMTYpCitMKGFkZG11bF90b3ApOgorCWFkZAl3MywgLTMyKHJwLG4sOCkKKwlhZGMJJXJheCwgdzAKKwltb3YJLTI0KHVwLG4sOCksICVyYXgKKwlhZGMJJXJkeCwgdzEKKwl4b3IJUjMyKHcyKSwgUjMyKHcyKQorCW11bAl2MAorCWFkZAklcmF4LCB3MAorCW1vdgktMjQodXAsbiw4KSwgJXJheAorCWFkYwklcmR4LCB3MQorCWFkYwlSMzIodzIpLCBSMzIodzIpCUMgYWRjICQwLCB3MgorTChhZGRtdWxfZW50cnlfMCk6CisJbXVsCXYxCisJeG9yCVIzMih3MyksIFIzMih3MykKKwlhZGQJdzAsIC0yNChycCxuLDgpCisJYWRjCSVyYXgsIHcxCisJbW92CS0xNih1cCxuLDgpLCAlcmF4CisJYWRjCSVyZHgsIHcyCisJbXVsCXYwCisJYWRkCSVyYXgsIHcxCisJbW92CS0xNih1cCxuLDgpLCAlcmF4CisJYWRjCSVyZHgsIHcyCisJYWRjCSQwLCBSMzIodzMpCitMKGFkZG11bF9lbnRyeV8zKToKKwltdWwJdjEKKwlhZGQJdzEsIC0xNihycCxuLDgpCisJYWRjCSVyYXgsIHcyCisJbW92CS04KHVwLG4sOCksICVyYXgKKwlhZGMJJXJkeCwgdzMKKwltdWwJdjAKKwl4b3IJUjMyKHcwKSwgUjMyKHcwKQorCWFkZAklcmF4LCB3MgorCWFkYwklcmR4LCB3MworCW1vdgkkMCwgUjMyKHcxKQorCW1vdgktOCh1cCxuLDgpLCAlcmF4CisJYWRjCVIzMih3MSksIFIzMih3MCkJQyBhZGMgJDAsIHcwCitMKGFkZG11bF9lbnRyeV8yKToKKwltdWwJdjEKKwlhZGQJdzIsIC04KHJwLG4sOCkKKwlhZGMJJXJheCwgdzMKKwlhZGMJJXJkeCwgdzAKKwltb3YJKHVwLG4sOCksICVyYXgKKwltdWwJdjAKKwlhZGQJJXJheCwgdzMKKwltb3YJKHVwLG4sOCksICVyYXgKKwlhZGMJJXJkeCwgdzAKKwlhZGMJJDAsIFIzMih3MSkKK0woYWRkbXVsX2VudHJ5XzEpOgorCW11bAl2MQorCWFkZAkkNCwgbgorCWpzCUwoYWRkbXVsX3RvcCkKKworCWFkZAl3MywgLTgocnApCisJYWRjCSVyYXgsIHcwCisJbW92CXcwLCAocnApCisJYWRjCSVyZHgsIHcxCisJbW92CXcxLCA4KHJwKQorCisJYWRkCSQtMiwgdm4JCQlDIHZuIC09IDIKKwlqeglMKHJldCkKKworCWxlYQkxNihycCksIHJwCQlDIHJwICs9IDIKKwlsZWEJMTYodnApLCB2cAkJQyB2cCArPSAyCisKKwltb3YJKHZwKSwgdjAKKwltb3YJOCh2cCksIHYxCisKKwlqbXAJKm91dGVyX2FkZHIKKworCUFMSUdOKDE2KQorTChyZXQpOglwb3AJJXIxNQorCXBvcAklcjE0CisJcG9wCSVyMTMKKwlwb3AJJXIxMgorCXBvcAklcmJwCisJcG9wCSVyYngKKwlGVU5DX0VYSVQoKQorCXJldAorCitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9rOC9tdWxsb19iYXNlY2FzZS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9rOC9tdWxsb19iYXNlY2FzZS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmEwMGY0MgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2s4L211bGxvX2Jhc2VjYXNlLmFzbQpAQCAtMCwwICsxLDQzNiBAQAorZG5sICBBTUQ2NCBtcG5fbXVsbG9fYmFzZWNhc2UuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqb3JuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDA4LCAyMDA5LCAyMDExLCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgVGhlIGlubmVyIGxvb3BzIG9mIHRoaXMgY29kZSBhcmUgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGEgY29kZSBnZW5lcmF0aW9uIGFuZAorQyBvcHRpbWlzYXRpb24gdG9vbCBzdWl0ZSB3cml0dGVuIGJ5IERhdmlkIEhhcnZleSBhbmQgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK0MgTk9URVMKK0MgICAqIFRoZXJlIGlzIGEgbWFqb3Igc3R1cGlkaXR5IGluIHRoYXQgd2UgY2FsbCBtcG5fbXVsXzEgaW5pdGlhbGx5LCBmb3IgYQorQyAgICAgbGFyZ2UgdHJpcCBjb3VudC4gIEluc3RlYWQsIHdlIHNob3VsZCBzdGFydCB3aXRoIG11bF8yIGZvciBhbnkgb3BlcmFuZAorQyAgICAgc2l6ZSBjb25ncnVlbmNlIGNsYXNzLgorQyAgICogU3RvcCBpdGVyYXRpbmcgYWRkbXVsXzIgZWFybGllciwgZmFsbGluZyBpbnRvIHN0cmFpZ2h0LWxpbmUgdHJpYW5nbGUgY29kZQorQyAgICAgZm9yIHRoZSBsYXN0IDItMyBpdGVyYXRpb25zLgorQyAgICogUGVyaGFwcyBpbXBsZW1lbnQgbj00IHNwZWNpYWwgY29kZS4KK0MgICAqIFRoZSByZWxvYWQgb2YgdGhlIG91dGVyIGxvb3AganVtcCBhZGRyZXNzIGh1cnRzIGJyYW5jaCBwcmVkaWN0aW9uLgorQyAgICogVGhlIGFkZG11bF8yIGxvb3AgZW5kcyB3aXRoIGFuIE1VTCB3aG9zZSBoaWdoIHBhcnQgaXMgbm90IHVzZWQgdXBvbiBsb29wCitDICAgICBleGl0LgorCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLAkgICBgJXJkaScpCitkZWZpbmUoYHVwJywJICAgYCVyc2knKQorZGVmaW5lKGB2cF9wYXJhbScsIGAlcmR4JykKK2RlZmluZShgbicsCSAgIGAlcmN4JykKKworZGVmaW5lKGB2cCcsCWAlcjExJykKK2RlZmluZShgb3V0ZXJfYWRkcicsIGAlcjgnKQorZGVmaW5lKGBqJywJYCVyOScpCitkZWZpbmUoYHYwJywJYCVyMTMnKQorZGVmaW5lKGB2MScsCWAlcjE0JykKK2RlZmluZShgdzAnLAlgJXJieCcpCitkZWZpbmUoYHcxJywJYCVyMTUnKQorZGVmaW5lKGB3MicsCWAlcmJwJykKK2RlZmluZShgdzMnLAlgJXIxMCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX211bGxvX2Jhc2VjYXNlKQorCUZVTkNfRU5UUlkoNCkKKwljbXAJJDQsIG4KKwlqZ2UJTChnZW4pCisJbW92CSh1cCksICVyYXgJCUMgdTAKKwltb3YJKHZwX3BhcmFtKSwgJXI4CQlDIHYwCisKKwlsZWEJTCh0YWIpKCVyaXApLCAlcjkKK2lmZGVmKGBQSUMnLAorYAltb3ZzbHEJKCVyOSwlcmN4LDQpLCAlcjEwCisJYWRkCSVyMTAsICVyOQorCWptcAkqJXI5CisnLGAKKwlqbXAJKiglcjksbiw4KQorJykKKwlKVU1QVEFCU0VDVAorCUFMSUdOKDgpCitMKHRhYik6CUpNUEVOVCgJTCh0YWIpLCBMKHRhYikpCQkJQyBub3QgYWxsb3dlZAorCUpNUEVOVCgJTCgxKSwgTCh0YWIpKQkJCUMgMQorCUpNUEVOVCgJTCgyKSwgTCh0YWIpKQkJCUMgMgorCUpNUEVOVCgJTCgzKSwgTCh0YWIpKQkJCUMgMworZG5sCUpNUEVOVCgJTCgwbTQpLCBMKHRhYikpCQkJQyA0CitkbmwJSk1QRU5UKAlMKDFtNCksIEwodGFiKSkJCQlDIDUKK2RubAlKTVBFTlQoCUwoMm00KSwgTCh0YWIpKQkJCUMgNgorZG5sCUpNUEVOVCgJTCgzbTQpLCBMKHRhYikpCQkJQyA3CitkbmwJSk1QRU5UKAlMKDBtNCksIEwodGFiKSkJCQlDIDgKK2RubAlKTVBFTlQoCUwoMW00KSwgTCh0YWIpKQkJCUMgOQorZG5sCUpNUEVOVCgJTCgybTQpLCBMKHRhYikpCQkJQyAxMAorZG5sCUpNUEVOVCgJTCgzbTQpLCBMKHRhYikpCQkJQyAxMQorCVRFWFQKKworTCgxKToJaW11bAklcjgsICVyYXgKKwltb3YJJXJheCwgKHJwKQorCUZVTkNfRVhJVCgpCisJcmV0CisKK0woMik6CW1vdgk4KHZwX3BhcmFtKSwgJXIxMQorCWltdWwJJXJheCwgJXIxMQkJQyB1MCB4IHYxCisJbXVsCSVyOAkJCUMgdTAgeCB2MAorCW1vdgklcmF4LCAocnApCisJaW11bAk4KHVwKSwgJXI4CQlDIHUxIHggdjAKKwlsZWEJKCVyMTEsICVyZHgpLCAlcmF4CisJYWRkCSVyOCwgJXJheAorCW1vdgklcmF4LCA4KHJwKQorCUZVTkNfRVhJVCgpCisJcmV0CisKK0woMyk6CW1vdgk4KHZwX3BhcmFtKSwgJXI5CUMgdjEKKwltb3YJMTYodnBfcGFyYW0pLCAlcjExCisJbXVsCSVyOAkJCUMgdTAgeCB2MCAtPiA8cjEscjA+CisJbW92CSVyYXgsIChycCkJCUMgcjAKKwltb3YJKHVwKSwgJXJheAkJQyB1MAorCW1vdgklcmR4LCAlcmN4CQlDIHIxCisJbXVsCSVyOQkJCUMgdTAgeCB2MSAtPiA8cjIscjE+CisJaW11bAk4KHVwKSwgJXI5CQlDIHUxIHggdjEgLT4gcjIKKwltb3YJMTYodXApLCAlcjEwCisJaW11bAklcjgsICVyMTAJCUMgdTIgeCB2MCAtPiByMgorCWFkZAklcmF4LCAlcmN4CisJYWRjCSVyZHgsICVyOQorCWFkZAklcjEwLCAlcjkKKwltb3YJOCh1cCksICVyYXgJCUMgdTEKKwltdWwJJXI4CQkJQyB1MSB4IHYwIC0+IDxyMixyMT4KKwlhZGQJJXJheCwgJXJjeAorCWFkYwklcmR4LCAlcjkKKwltb3YJJXIxMSwgJXJheAorCWltdWwJKHVwKSwgJXJheAkJQyB1MCB4IHYyIC0+IHIyCisJYWRkCSVyYXgsICVyOQorCW1vdgklcmN4LCA4KHJwKQorCW1vdgklcjksIDE2KHJwKQorCUZVTkNfRVhJVCgpCisJcmV0CisKK0woMG00KToKK0woMW00KToKK0woMm00KToKK0woM200KToKK0woZ2VuKToJcHVzaAklcmJ4CisJcHVzaAklcmJwCisJcHVzaAklcjEzCisJcHVzaAklcjE0CisJcHVzaAklcjE1CisKKwltb3YJKHVwKSwgJXJheAorCW1vdgkodnBfcGFyYW0pLCB2MAorCW1vdgl2cF9wYXJhbSwgdnAKKworCWxlYQkocnAsbiw4KSwgcnAKKwlsZWEJKHVwLG4sOCksIHVwCisJbmVnCW4KKworCW11bAl2MAorCisJdGVzdAkkMSwgUjgobikKKwlqeglMKG11bF8yKQorCitMKG11bF8xKToKKwlsZWEJLTgocnApLCBycAorCWxlYQktOCh1cCksIHVwCisJdGVzdAkkMiwgUjgobikKKwlqbnoJTChtdWxfMV9wcm9sb2d1ZV8zKQorCitMKG11bF8xX3Byb2xvZ3VlXzIpOgkJQyBuID0gNywgMTEsIDE1LCAuLi4KKwlsZWEJLTEobiksIGoKKwlsZWEJTChhZGRtdWxfb3V0ZXJfMSkoJXJpcCksIG91dGVyX2FkZHIKKwltb3YJJXJheCwgdzAKKwltb3YJJXJkeCwgdzEKKwl4b3IJUjMyKHcyKSwgUjMyKHcyKQorCXhvcglSMzIodzMpLCBSMzIodzMpCisJbW92CTE2KHVwLG4sOCksICVyYXgKKwlqbXAJTChtdWxfMV9lbnRyeV8yKQorCitMKG11bF8xX3Byb2xvZ3VlXzMpOgkJQyBuID0gNSwgOSwgMTMsIC4uLgorCWxlYQkxKG4pLCBqCisJbGVhCUwoYWRkbXVsX291dGVyXzMpKCVyaXApLCBvdXRlcl9hZGRyCisJbW92CSVyYXgsIHcyCisJbW92CSVyZHgsIHczCisJeG9yCVIzMih3MCksIFIzMih3MCkKKwlqbXAJTChtdWxfMV9lbnRyeV8wKQorCisJQUxJR04oMTYpCitMKG11bF8xX3RvcCk6CisJbW92CXcwLCAtMTYocnAsaiw4KQorCWFkZAklcmF4LCB3MQorCW1vdgkodXAsaiw4KSwgJXJheAorCWFkYwklcmR4LCB3MgorCXhvcglSMzIodzApLCBSMzIodzApCisJbXVsCXYwCisJbW92CXcxLCAtOChycCxqLDgpCisJYWRkCSVyYXgsIHcyCisJYWRjCSVyZHgsIHczCitMKG11bF8xX2VudHJ5XzApOgorCW1vdgk4KHVwLGosOCksICVyYXgKKwltdWwJdjAKKwltb3YJdzIsIChycCxqLDgpCisJYWRkCSVyYXgsIHczCisJYWRjCSVyZHgsIHcwCisJbW92CTE2KHVwLGosOCksICVyYXgKKwltdWwJdjAKKwltb3YJdzMsIDgocnAsaiw4KQorCXhvcglSMzIodzIpLCBSMzIodzIpCUMgemVybworCW1vdgl3MiwgdzMJCQlDIHplcm8KKwlhZGQJJXJheCwgdzAKKwltb3YJMjQodXAsaiw4KSwgJXJheAorCW1vdgl3MiwgdzEJCQlDIHplcm8KKwlhZGMJJXJkeCwgdzEKK0wobXVsXzFfZW50cnlfMik6CisJbXVsCXYwCisJYWRkCSQ0LCBqCisJanMJTChtdWxfMV90b3ApCisKKwltb3YJdzAsIC0xNihycCkKKwlhZGQJJXJheCwgdzEKKwltb3YJdzEsIC04KHJwKQorCWFkYwklcmR4LCB3MgorCisJaW11bAkodXApLCB2MAorCWFkZAl2MCwgdzIKKwltb3YJdzIsIChycCkKKworCWFkZAkkMSwgbgorCWp6CUwocmV0KQorCisJbW92CTgodnApLCB2MAorCW1vdgkxNih2cCksIHYxCisKKwlsZWEJMTYodXApLCB1cAorCWxlYQk4KHZwKSwgdnAKKwlsZWEJMjQocnApLCBycAorCisJam1wCSpvdXRlcl9hZGRyCisKKworTChtdWxfMik6CisJbW92CTgodnApLCB2MQorCXRlc3QJJDIsIFI4KG4pCisJanoJTChtdWxfMl9wcm9sb2d1ZV8zKQorCisJQUxJR04oMTYpCitMKG11bF8yX3Byb2xvZ3VlXzEpOgorCWxlYQkwKG4pLCBqCisJbW92CSVyYXgsIHczCisJbW92CSVyZHgsIHcwCisJeG9yCVIzMih3MSksIFIzMih3MSkKKwltb3YJKHVwLG4sOCksICVyYXgKKwlsZWEJTChhZGRtdWxfb3V0ZXJfMykoJXJpcCksIG91dGVyX2FkZHIKKwlqbXAJTChtdWxfMl9lbnRyeV8xKQorCisJQUxJR04oMTYpCitMKG11bF8yX3Byb2xvZ3VlXzMpOgorCWxlYQkyKG4pLCBqCisJbW92CSQwLCBSMzIodzMpCisJbW92CSVyYXgsIHcxCisJbW92CSh1cCxuLDgpLCAlcmF4CisJbW92CSVyZHgsIHcyCisJbGVhCUwoYWRkbXVsX291dGVyXzEpKCVyaXApLCBvdXRlcl9hZGRyCisJam1wCUwobXVsXzJfZW50cnlfMykKKworCUFMSUdOKDE2KQorTChtdWxfMl90b3ApOgorCW1vdgktMzIodXAsaiw4KSwgJXJheAorCW11bAl2MQorCWFkZAklcmF4LCB3MAorCWFkYwklcmR4LCB3MQorCW1vdgktMjQodXAsaiw4KSwgJXJheAorCXhvcglSMzIodzIpLCBSMzIodzIpCisJbXVsCXYwCisJYWRkCSVyYXgsIHcwCisJbW92CS0yNCh1cCxqLDgpLCAlcmF4CisJYWRjCSVyZHgsIHcxCisJYWRjCSQwLCBSMzIodzIpCisJbXVsCXYxCisJYWRkCSVyYXgsIHcxCisJbW92CXcwLCAtMjQocnAsaiw4KQorCWFkYwklcmR4LCB3MgorCW1vdgktMTYodXAsaiw4KSwgJXJheAorCW11bAl2MAorCW1vdgkkMCwgUjMyKHczKQorCWFkZAklcmF4LCB3MQorCWFkYwklcmR4LCB3MgorCW1vdgktMTYodXAsaiw4KSwgJXJheAorCWFkYwkkMCwgUjMyKHczKQorTChtdWxfMl9lbnRyeV8zKToKKwltb3YJJDAsIFIzMih3MCkKKwltb3YJdzEsIC0xNihycCxqLDgpCisJbXVsCXYxCisJYWRkCSVyYXgsIHcyCisJbW92CS04KHVwLGosOCksICVyYXgKKwlhZGMJJXJkeCwgdzMKKwltb3YJJDAsIFIzMih3MSkKKwltdWwJdjAKKwlhZGQJJXJheCwgdzIKKwltb3YJLTgodXAsaiw4KSwgJXJheAorCWFkYwklcmR4LCB3MworCWFkYwlSMzIodzEpLCBSMzIodzApCisJbXVsCXYxCisJYWRkCSVyYXgsIHczCisJbW92CXcyLCAtOChycCxqLDgpCisJYWRjCSVyZHgsIHcwCisJbW92CSh1cCxqLDgpLCAlcmF4CisJbXVsCXYwCisJYWRkCSVyYXgsIHczCisJYWRjCSVyZHgsIHcwCisJYWRjCSQwLCBSMzIodzEpCitMKG11bF8yX2VudHJ5XzEpOgorCWFkZAkkNCwgagorCW1vdgl3MywgLTMyKHJwLGosOCkKKwlqcwlMKG11bF8yX3RvcCkKKworCWltdWwJLTE2KHVwKSwgdjEKKwlhZGQJdjEsIHcwCisJaW11bAktOCh1cCksIHYwCisJYWRkCXYwLCB3MAorCW1vdgl3MCwgLTgocnApCisKKwlhZGQJJDIsIG4KKwlqeglMKHJldCkKKworCW1vdgkxNih2cCksIHYwCisJbW92CTI0KHZwKSwgdjEKKworCWxlYQkxNih2cCksIHZwCisJbGVhCTE2KHJwKSwgcnAKKworCWptcAkqb3V0ZXJfYWRkcgorCisKK0woYWRkbXVsX291dGVyXzEpOgorCWxlYQktMihuKSwgagorCW1vdgktMTYodXAsbiw4KSwgJXJheAorCW11bAl2MAorCW1vdgklcmF4LCB3MworCW1vdgktMTYodXAsbiw4KSwgJXJheAorCW1vdgklcmR4LCB3MAorCXhvcglSMzIodzEpLCBSMzIodzEpCisJbGVhCUwoYWRkbXVsX291dGVyXzMpKCVyaXApLCBvdXRlcl9hZGRyCisJam1wCUwoYWRkbXVsX2VudHJ5XzEpCisKK0woYWRkbXVsX291dGVyXzMpOgorCWxlYQkwKG4pLCBqCisJbW92CS0xNih1cCxuLDgpLCAlcmF4CisJeG9yCVIzMih3MyksIFIzMih3MykKKwltdWwJdjAKKwltb3YJJXJheCwgdzEKKwltb3YJLTE2KHVwLG4sOCksICVyYXgKKwltb3YJJXJkeCwgdzIKKwlsZWEJTChhZGRtdWxfb3V0ZXJfMSkoJXJpcCksIG91dGVyX2FkZHIKKwlqbXAJTChhZGRtdWxfZW50cnlfMykKKworCUFMSUdOKDE2KQorTChhZGRtdWxfdG9wKToKKwlhZGQJdzMsIC0zMihycCxqLDgpCisJYWRjCSVyYXgsIHcwCisJbW92CS0yNCh1cCxqLDgpLCAlcmF4CisJYWRjCSVyZHgsIHcxCisJeG9yCVIzMih3MiksIFIzMih3MikKKwltdWwJdjAKKwlhZGQJJXJheCwgdzAKKwltb3YJLTI0KHVwLGosOCksICVyYXgKKwlhZGMJJXJkeCwgdzEKKwlhZGMJUjMyKHcyKSwgUjMyKHcyKQorCW11bAl2MQorCXhvcglSMzIodzMpLCBSMzIodzMpCisJYWRkCXcwLCAtMjQocnAsaiw4KQorCWFkYwklcmF4LCB3MQorCW1vdgktMTYodXAsaiw4KSwgJXJheAorCWFkYwklcmR4LCB3MgorCW11bAl2MAorCWFkZAklcmF4LCB3MQorCW1vdgktMTYodXAsaiw4KSwgJXJheAorCWFkYwklcmR4LCB3MgorCWFkYwkkMCwgUjMyKHczKQorTChhZGRtdWxfZW50cnlfMyk6CisJbXVsCXYxCisJYWRkCXcxLCAtMTYocnAsaiw4KQorCWFkYwklcmF4LCB3MgorCW1vdgktOCh1cCxqLDgpLCAlcmF4CisJYWRjCSVyZHgsIHczCisJbXVsCXYwCisJeG9yCVIzMih3MCksIFIzMih3MCkKKwlhZGQJJXJheCwgdzIKKwlhZGMJJXJkeCwgdzMKKwltb3YJJDAsIFIzMih3MSkKKwltb3YJLTgodXAsaiw4KSwgJXJheAorCWFkYwlSMzIodzEpLCBSMzIodzApCisJbXVsCXYxCisJYWRkCXcyLCAtOChycCxqLDgpCisJYWRjCSVyYXgsIHczCisJYWRjCSVyZHgsIHcwCisJbW92CSh1cCxqLDgpLCAlcmF4CisJbXVsCXYwCisJYWRkCSVyYXgsIHczCisJbW92CSh1cCxqLDgpLCAlcmF4CisJYWRjCSVyZHgsIHcwCisJYWRjCSQwLCBSMzIodzEpCitMKGFkZG11bF9lbnRyeV8xKToKKwltdWwJdjEKKwlhZGQJJDQsIGoKKwlqcwlMKGFkZG11bF90b3ApCisKKwlhZGQJdzMsIC0zMihycCkKKwlhZGMJJXJheCwgdzAKKworCWltdWwJLTI0KHVwKSwgdjAKKwlhZGQJdjAsIHcwCisJYWRkCXcwLCAtMjQocnApCisKKwlhZGQJJDIsIG4KKwlqbnMJTChyZXQpCisKKwlsZWEJMTYodnApLCB2cAorCisJbW92CSh2cCksIHYwCisJbW92CTgodnApLCB2MQorCisJbGVhCS0xNih1cCksIHVwCisKKwlqbXAJKm91dGVyX2FkZHIKKworTChyZXQpOglwb3AJJXIxNQorCXBvcAklcjE0CisJcG9wCSVyMTMKKwlwb3AJJXJicAorCXBvcAklcmJ4CisJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2s4L211bG1pZF9iYXNlY2FzZS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9rOC9tdWxtaWRfYmFzZWNhc2UuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ZjE0MTQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9rOC9tdWxtaWRfYmFzZWNhc2UuYXNtCkBAIC0wLDAgKzEsNTU5IEBACitkbmwgIEFNRDY0IG1wbl9tdWxtaWRfYmFzZWNhc2UKKworZG5sICBDb250cmlidXRlZCBieSBEYXZpZCBIYXJ2ZXkuCisKK2RubCAgQ29weXJpZ2h0IDIwMTEsIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIKK0MgSzgsSzk6CSAyLjM3NSAgKDIuNSB3aGVuIHVuIC0gdm4gaXMgInNtYWxsIikKK0MgSzEwOgkJID8KK0MgUDQ6CQkgPworQyBQNi0xNToJID8KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywgICAgICBgJXJkaScpCitkZWZpbmUoYHVwJywgICAgICBgJXJzaScpCitkZWZpbmUoYHVuX3BhcmFtJyxgJXJkeCcpCitkZWZpbmUoYHZwX3BhcmFtJyxgJXJjeCcpCitkZWZpbmUoYHZuJywgICAgICBgJXI4JykKKworZGVmaW5lKGB2MCcsIGAlcjEyJykKK2RlZmluZShgdjEnLCBgJXI5JykKKworZGVmaW5lKGB3MCcsIGAlcmJ4JykKK2RlZmluZShgdzEnLCBgJXJjeCcpCitkZWZpbmUoYHcyJywgYCVyYnAnKQorZGVmaW5lKGB3MycsIGAlcjEwJykKKworZGVmaW5lKGBuJywgIGAlcjExJykKK2RlZmluZShgb3V0ZXJfYWRkcicsIGAlcjE0JykKK2RlZmluZShgdW4nLCAgYCVyMTMnKQorZGVmaW5lKGB2cCcsICBgJXIxNScpCisKK2RlZmluZShgdnBfaW5uZXInLCBgJXIxMCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX211bG1pZF9iYXNlY2FzZSkKKwlGVU5DX0VOVFJZKDQpCitJRkRPUyhgCW1vdgk1NiglcnNwKSwgJXI4ZAknKQorCXB1c2gJJXJieAorCXB1c2gJJXJicAorCXB1c2gJJXIxMgorCXB1c2gJJXIxMworCXB1c2gJJXIxNAorCXB1c2gJJXIxNQorCisJbW92CXZwX3BhcmFtLCB2cAorCisJQyB1c2UgdW4gZm9yIHJvdyBsZW5ndGggKD0gdW5fcGFyYW0gLSB2biArIDEpCisJbGVhCTEodW5fcGFyYW0pLCB1bgorCXN1Ygl2biwgdW4KKworCWxlYQkocnAsdW4sOCksIHJwCisKKwljbXAJJDQsIHVuCQlDIFRPRE86IG5lZWRzIHR1bmluZworCWpjCUwoZGlhZ29uYWwpCisKKwlsZWEJKHVwLHVuX3BhcmFtLDgpLCB1cAorCisJdGVzdAkkMSwgdm4KKwlqeglMKG11bF8yKQorCitDID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDICAgICBtdWxfMSBmb3IgdnBbMF0gaWYgdm4gaXMgb2RkCisKK0wobXVsXzEpOgorCW1vdglSMzIodW4pLCBSMzIodzApCisKKwluZWcJdW4KKwltb3YJKHVwLHVuLDgpLCAlcmF4CisJbW92CSh2cCksIHYwCisJbXVsCXYwCisKKwlhbmQJJC00LCB1bgkJQyByb3VuZCBkb3duIHRvIG11bHRpcGxlIG9mIDQKKwltb3YJdW4sIG4KKworCWFuZAkkMywgUjMyKHcwKQorCWp6CUwobXVsXzFfcHJvbG9ndWVfMCkKKwljbXAJJDIsIFIzMih3MCkKKwlqYwlMKG11bF8xX3Byb2xvZ3VlXzEpCisJanoJTChtdWxfMV9wcm9sb2d1ZV8yKQorCitMKG11bF8xX3Byb2xvZ3VlXzMpOgorCW1vdgklcmF4LCB3MworCW1vdgklcmR4LCB3MAorCWxlYQlMKGFkZG11bF9wcm9sb2d1ZV8zKSglcmlwKSwgb3V0ZXJfYWRkcgorCWptcAlMKG11bF8xX2VudHJ5XzMpCisKKwlBTElHTigxNikKK0wobXVsXzFfcHJvbG9ndWVfMCk6CisJbW92CSVyYXgsIHcyCisJbW92CSVyZHgsIHczCQlDIG5vdGUgYWxyZWFkeSB3MCA9PSAwCisJbGVhCUwoYWRkbXVsX3Byb2xvZ3VlXzApKCVyaXApLCBvdXRlcl9hZGRyCisJam1wCUwobXVsXzFfZW50cnlfMCkKKworCUFMSUdOKDE2KQorTChtdWxfMV9wcm9sb2d1ZV8xKToKKwlhZGQJJDQsIG4KKwltb3YJJXJheCwgdzEKKwltb3YJJXJkeCwgdzIKKwltb3YJJDAsIFIzMih3MykKKwltb3YJKHVwLG4sOCksICVyYXgKKwlsZWEJTChhZGRtdWxfcHJvbG9ndWVfMSkoJXJpcCksIG91dGVyX2FkZHIKKwlqbXAJTChtdWxfMV9lbnRyeV8xKQorCisJQUxJR04oMTYpCitMKG11bF8xX3Byb2xvZ3VlXzIpOgorCW1vdgklcmF4LCB3MAorCW1vdgklcmR4LCB3MQorCW1vdgkyNCh1cCxuLDgpLCAlcmF4CisJbW92CSQwLCBSMzIodzIpCisJbW92CSQwLCBSMzIodzMpCisJbGVhCUwoYWRkbXVsX3Byb2xvZ3VlXzIpKCVyaXApLCBvdXRlcl9hZGRyCisJam1wCUwobXVsXzFfZW50cnlfMikKKworCisJQyB0aGlzIGxvb3AgaXMgMTAgYy9sb29wID0gMi41IGMvbCBvbiBLOAorCisJQUxJR04oMTYpCitMKG11bF8xX3RvcCk6CisJbW92CXcwLCAtMTYocnAsbiw4KQorCWFkZAklcmF4LCB3MQorCW1vdgkodXAsbiw4KSwgJXJheAorCWFkYwklcmR4LCB3MgorTChtdWxfMV9lbnRyeV8xKToKKwltb3YJJDAsIFIzMih3MCkKKwltdWwJdjAKKwltb3YJdzEsIC04KHJwLG4sOCkKKwlhZGQJJXJheCwgdzIKKwlhZGMJJXJkeCwgdzMKK0wobXVsXzFfZW50cnlfMCk6CisJbW92CTgodXAsbiw4KSwgJXJheAorCW11bAl2MAorCW1vdgl3MiwgKHJwLG4sOCkKKwlhZGQJJXJheCwgdzMKKwlhZGMJJXJkeCwgdzAKK0wobXVsXzFfZW50cnlfMyk6CisJbW92CTE2KHVwLG4sOCksICVyYXgKKwltdWwJdjAKKwltb3YJdzMsIDgocnAsbiw4KQorCW1vdgkkMCwgUjMyKHcyKQkJQyB6ZXJvCisJbW92CXcyLCB3MwkJCUMgemVybworCWFkZAklcmF4LCB3MAorCW1vdgkyNCh1cCxuLDgpLCAlcmF4CisJbW92CXcyLCB3MQkJCUMgemVybworCWFkYwklcmR4LCB3MQorTChtdWxfMV9lbnRyeV8yKToKKwltdWwJdjAKKwlhZGQJJDQsIG4KKwlqcwlMKG11bF8xX3RvcCkKKworCW1vdgl3MCwgLTE2KHJwKQorCWFkZAklcmF4LCB3MQorCW1vdgl3MSwgLTgocnApCisJbW92CXcyLCA4KHJwKQkJQyB6ZXJvIGxhc3QgbGltYiBvZiBvdXRwdXQKKwlhZGMJJXJkeCwgdzIKKwltb3YJdzIsIChycCkKKworCWRlYwl2bgorCWp6CUwocmV0KQorCisJbGVhCS04KHVwKSwgdXAKKwlsZWEJOCh2cCksIHZwCisKKwltb3YJdW4sIG4KKwltb3YJKHZwKSwgdjAKKwltb3YJOCh2cCksIHYxCisKKwlqbXAJKm91dGVyX2FkZHIKKworQyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQyAgICAgbXVsXzIgZm9yIHZwWzBdLCB2cFsxXSBpZiB2biBpcyBldmVuCisKKwlBTElHTigxNikKK0wobXVsXzIpOgorCW1vdglSMzIodW4pLCBSMzIodzApCisKKwluZWcJdW4KKwltb3YJLTgodXAsdW4sOCksICVyYXgKKwltb3YJKHZwKSwgdjAKKwltb3YJOCh2cCksIHYxCisJbXVsCXYxCisKKwlhbmQJJC00LCB1bgkJQyByb3VuZCBkb3duIHRvIG11bHRpcGxlIG9mIDQKKwltb3YJdW4sIG4KKworCWFuZAkkMywgUjMyKHcwKQorCWp6CUwobXVsXzJfcHJvbG9ndWVfMCkKKwljbXAJJDIsIFIzMih3MCkKKwlqYwlMKG11bF8yX3Byb2xvZ3VlXzEpCisJanoJTChtdWxfMl9wcm9sb2d1ZV8yKQorCitMKG11bF8yX3Byb2xvZ3VlXzMpOgorCW1vdgklcmF4LCB3MQorCW1vdgklcmR4LCB3MgorCWxlYQlMKGFkZG11bF9wcm9sb2d1ZV8zKSglcmlwKSwgb3V0ZXJfYWRkcgorCWptcAlMKG11bF8yX2VudHJ5XzMpCisKKwlBTElHTigxNikKK0wobXVsXzJfcHJvbG9ndWVfMCk6CisJbW92CSVyYXgsIHcwCisJbW92CSVyZHgsIHcxCisJbGVhCUwoYWRkbXVsX3Byb2xvZ3VlXzApKCVyaXApLCBvdXRlcl9hZGRyCisJam1wCUwobXVsXzJfZW50cnlfMCkKKworCUFMSUdOKDE2KQorTChtdWxfMl9wcm9sb2d1ZV8xKToKKwltb3YJJXJheCwgdzMKKwltb3YJJXJkeCwgdzAKKwltb3YJJDAsIFIzMih3MSkKKwlsZWEJTChhZGRtdWxfcHJvbG9ndWVfMSkoJXJpcCksIG91dGVyX2FkZHIKKwlqbXAJTChtdWxfMl9lbnRyeV8xKQorCisJQUxJR04oMTYpCitMKG11bF8yX3Byb2xvZ3VlXzIpOgorCW1vdgklcmF4LCB3MgorCW1vdgklcmR4LCB3MworCW1vdgkkMCwgUjMyKHcwKQorCW1vdgkxNih1cCxuLDgpLCAlcmF4CisJbGVhCUwoYWRkbXVsX3Byb2xvZ3VlXzIpKCVyaXApLCBvdXRlcl9hZGRyCisJam1wCUwobXVsXzJfZW50cnlfMikKKworCisJQyB0aGlzIGxvb3AgaXMgMTggYy9sb29wID0gMi4yNSBjL2wgb24gSzgKKworCUFMSUdOKDE2KQorTChtdWxfMl90b3ApOgorCW1vdiAgICAgLTgodXAsbiw4KSwgJXJheAorCW11bCAgICAgdjEKKwlhZGQgICAgICVyYXgsIHcwCisJYWRjICAgICAlcmR4LCB3MQorTChtdWxfMl9lbnRyeV8wKToKKwltb3YgICAgICQwLCBSMzIodzIpCisJbW92ICAgICAodXAsbiw4KSwgJXJheAorCW11bCAgICAgdjAKKwlhZGQgICAgICVyYXgsIHcwCisJbW92ICAgICAodXAsbiw4KSwgJXJheAorCWFkYyAgICAgJXJkeCwgdzEKKwlhZGMgICAgICQwLCBSMzIodzIpCisJbXVsICAgICB2MQorCWFkZCAgICAgJXJheCwgdzEKKwltb3YgICAgIHcwLCAocnAsbiw4KQorCWFkYyAgICAgJXJkeCwgdzIKK0wobXVsXzJfZW50cnlfMyk6CisJbW92ICAgICA4KHVwLG4sOCksICVyYXgKKwltdWwgICAgIHYwCisJbW92ICAgICAkMCwgUjMyKHczKQorCWFkZCAgICAgJXJheCwgdzEKKwlhZGMgICAgICVyZHgsIHcyCisJbW92ICAgICAkMCwgUjMyKHcwKQorCWFkYyAgICAgJDAsIFIzMih3MykKKwltb3YgICAgIDgodXAsbiw4KSwgJXJheAorCW1vdiAgICAgdzEsIDgocnAsbiw4KQorCW11bCAgICAgdjEKKwlhZGQgICAgICVyYXgsIHcyCisJbW92ICAgICAxNih1cCxuLDgpLCAlcmF4CisJYWRjICAgICAlcmR4LCB3MworTChtdWxfMl9lbnRyeV8yKToKKwltb3YgICAgICQwLCBSMzIodzEpCisJbXVsICAgICB2MAorCWFkZCAgICAgJXJheCwgdzIKKwltb3YgICAgIDE2KHVwLG4sOCksICVyYXgKKwlhZGMgICAgICVyZHgsIHczCisJYWRjICAgICAkMCwgUjMyKHcwKQorCW11bCAgICAgdjEKKwlhZGQgICAgICVyYXgsIHczCisJbW92ICAgICB3MiwgMTYocnAsbiw4KQorCWFkYyAgICAgJXJkeCwgdzAKK0wobXVsXzJfZW50cnlfMSk6CisJbW92ICAgICAyNCh1cCxuLDgpLCAlcmF4CisJbXVsICAgICB2MAorCWFkZCAgICAgJXJheCwgdzMKKwlhZGMgICAgICVyZHgsIHcwCisJYWRjICAgICAkMCwgUjMyKHcxKQorCWFkZCAgICAgJDQsIG4KKwltb3YgICAgIHczLCAtOChycCxuLDgpCisJam56ICAgICBMKG11bF8yX3RvcCkKKworCW1vdgl3MCwgKHJwKQorCW1vdgl3MSwgOChycCkKKworCXN1YgkkMiwgdm4KKwlqeglMKHJldCkKKworCWxlYQkxNih2cCksIHZwCisJbGVhCS0xNih1cCksIHVwCisKKwltb3YJdW4sIG4KKwltb3YJKHZwKSwgdjAKKwltb3YJOCh2cCksIHYxCisKKwlqbXAJKm91dGVyX2FkZHIKKworQyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQyAgICAgYWRkbXVsXzIgZm9yIHJlbWFpbmluZyB2cCdzCisKKwlBTElHTigxNikKK0woYWRkbXVsX3Byb2xvZ3VlXzApOgorCW1vdgktOCh1cCxuLDgpLCAlcmF4CisJbXVsCXYxCisJbW92CSVyYXgsIHcxCisJbW92CSVyZHgsIHcyCisJbW92CSQwLCBSMzIodzMpCisJam1wCUwoYWRkbXVsX2VudHJ5XzApCisKKwlBTElHTigxNikKK0woYWRkbXVsX3Byb2xvZ3VlXzEpOgorCW1vdgkxNih1cCxuLDgpLCAlcmF4CisJbXVsCXYxCisJbW92CSVyYXgsIHcwCisJbW92CSVyZHgsIHcxCisJbW92CSQwLCBSMzIodzIpCisJbW92CTI0KHVwLG4sOCksICVyYXgKKwlqbXAJTChhZGRtdWxfZW50cnlfMSkKKworCUFMSUdOKDE2KQorTChhZGRtdWxfcHJvbG9ndWVfMik6CisJbW92CTgodXAsbiw4KSwgJXJheAorCW11bAl2MQorCW1vdgklcmF4LCB3MworCW1vdgklcmR4LCB3MAorCW1vdgkkMCwgUjMyKHcxKQorCWptcAlMKGFkZG11bF9lbnRyeV8yKQorCisJQUxJR04oMTYpCitMKGFkZG11bF9wcm9sb2d1ZV8zKToKKwltb3YJKHVwLG4sOCksICVyYXgKKwltdWwJdjEKKwltb3YJJXJheCwgdzIKKwltb3YJJXJkeCwgdzMKKwltb3YJJDAsIFIzMih3MCkKKwltb3YJJDAsIFIzMih3MSkKKwlqbXAJTChhZGRtdWxfZW50cnlfMykKKworCUMgdGhpcyBsb29wIGlzIDE5IGMvbG9vcCA9IDIuMzc1IGMvbCBvbiBLOAorCisJQUxJR04oMTYpCitMKGFkZG11bF90b3ApOgorCW1vdgkkMCwgUjMyKHczKQorCWFkZAklcmF4LCB3MAorCW1vdgktOCh1cCxuLDgpLCAlcmF4CisJYWRjCSVyZHgsIHcxCisJYWRjCSQwLCBSMzIodzIpCisJbXVsCXYxCisJYWRkCXcwLCAtOChycCxuLDgpCisJYWRjCSVyYXgsIHcxCisJYWRjCSVyZHgsIHcyCitMKGFkZG11bF9lbnRyeV8wKToKKwltb3YJKHVwLG4sOCksICVyYXgKKwltdWwJdjAKKwlhZGQJJXJheCwgdzEKKwltb3YJKHVwLG4sOCksICVyYXgKKwlhZGMJJXJkeCwgdzIKKwlhZGMJJDAsIFIzMih3MykKKwltdWwJdjEKKwlhZGQJdzEsIChycCxuLDgpCisJbW92CSQwLCBSMzIodzEpCisJYWRjCSVyYXgsIHcyCisJbW92CSQwLCBSMzIodzApCisJYWRjCSVyZHgsIHczCitMKGFkZG11bF9lbnRyeV8zKToKKwltb3YJOCh1cCxuLDgpLCAlcmF4CisJbXVsCXYwCisJYWRkCSVyYXgsIHcyCisJbW92CTgodXAsbiw4KSwgJXJheAorCWFkYwklcmR4LCB3MworCWFkYwkkMCwgUjMyKHcwKQorCW11bAl2MQorCWFkZAl3MiwgOChycCxuLDgpCisJYWRjCSVyYXgsIHczCisJYWRjCSVyZHgsIHcwCitMKGFkZG11bF9lbnRyeV8yKToKKwltb3YJMTYodXAsbiw4KSwgJXJheAorCW11bAl2MAorCWFkZAklcmF4LCB3MworCW1vdgkxNih1cCxuLDgpLCAlcmF4CisJYWRjCSVyZHgsIHcwCisJYWRjCSQwLCBSMzIodzEpCisJbXVsCXYxCisJYWRkCXczLCAxNihycCxuLDgpCisJbm9wCQkJQyBkb24ndCBhc2suLi4KKwlhZGMJJXJheCwgdzAKKwltb3YJJDAsIFIzMih3MikKKwltb3YJMjQodXAsbiw4KSwgJXJheAorCWFkYwklcmR4LCB3MQorTChhZGRtdWxfZW50cnlfMSk6CisJbXVsCXYwCisJYWRkCSQ0LCBuCisJam56CUwoYWRkbXVsX3RvcCkKKworCWFkZAklcmF4LCB3MAorCWFkYwklcmR4LCB3MQorCWFkYwkkMCwgUjMyKHcyKQorCisJYWRkCXcwLCAtOChycCkKKwlhZGMJdzEsIChycCkKKwlhZGMJdzIsIDgocnApCisKKwlzdWIJJDIsIHZuCisJanoJTChyZXQpCisKKwlsZWEJMTYodnApLCB2cAorCWxlYQktMTYodXApLCB1cAorCisJbW92CXVuLCBuCisJbW92CSh2cCksIHYwCisJbW92CTgodnApLCB2MQorCisJam1wCSpvdXRlcl9hZGRyCisKK0MgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0MgICAgIGFjY3VtdWxhdGUgYWxvbmcgZGlhZ29uYWxzIGlmIHVuIC0gdm4gaXMgc21hbGwKKworCUFMSUdOKDE2KQorTChkaWFnb25hbCk6CisJeG9yCVIzMih3MCksIFIzMih3MCkKKwl4b3IJUjMyKHcxKSwgUjMyKHcxKQorCXhvcglSMzIodzIpLCBSMzIodzIpCisKKwluZWcJdW4KKworCW1vdglSMzIodm4pLCAlZWF4CisJYW5kCSQzLCAlZWF4CisJanoJTChkaWFnX3Byb2xvZ3VlXzApCisJY21wCSQyLCAlZWF4CisJamMJTChkaWFnX3Byb2xvZ3VlXzEpCisJanoJTChkaWFnX3Byb2xvZ3VlXzIpCisKK0woZGlhZ19wcm9sb2d1ZV8zKToKKwlsZWEJLTgodnApLCB2cAorCW1vdgl2cCwgdnBfaW5uZXIKKwlhZGQJJDEsIHZuCisJbW92CXZuLCBuCisJbGVhCUwoZGlhZ19lbnRyeV8zKSglcmlwKSwgb3V0ZXJfYWRkcgorCWptcAlMKGRpYWdfZW50cnlfMykKKworTChkaWFnX3Byb2xvZ3VlXzApOgorCW1vdgl2cCwgdnBfaW5uZXIKKwltb3YJdm4sIG4KKwlsZWEJMCglcmlwKSwgb3V0ZXJfYWRkcgorCW1vdiAgICAgLTgodXAsbiw4KSwgJXJheAorCWptcAlMKGRpYWdfZW50cnlfMCkKKworTChkaWFnX3Byb2xvZ3VlXzEpOgorCWxlYQk4KHZwKSwgdnAKKwltb3YJdnAsIHZwX2lubmVyCisJYWRkCSQzLCB2bgorCW1vdgl2biwgbgorCWxlYQkwKCVyaXApLCBvdXRlcl9hZGRyCisJbW92ICAgICAtOCh2cF9pbm5lciksICVyYXgKKwlqbXAJTChkaWFnX2VudHJ5XzEpCisKK0woZGlhZ19wcm9sb2d1ZV8yKToKKwlsZWEJLTE2KHZwKSwgdnAKKwltb3YJdnAsIHZwX2lubmVyCisJYWRkCSQyLCB2bgorCW1vdgl2biwgbgorCWxlYQkwKCVyaXApLCBvdXRlcl9hZGRyCisJbW92CTE2KHZwX2lubmVyKSwgJXJheAorCWptcAlMKGRpYWdfZW50cnlfMikKKworCisJQyB0aGlzIGxvb3AgaXMgMTAgYy9sb29wID0gMi41IGMvbCBvbiBLOAorCisJQUxJR04oMTYpCitMKGRpYWdfdG9wKToKKwlhZGQgICAgICVyYXgsIHcwCisJYWRjICAgICAlcmR4LCB3MQorCW1vdiAgICAgLTgodXAsbiw4KSwgJXJheAorCWFkYyAgICAgJDAsIHcyCitMKGRpYWdfZW50cnlfMCk6CisJbXVscSAgICAodnBfaW5uZXIpCisJYWRkICAgICAlcmF4LCB3MAorCWFkYyAgICAgJXJkeCwgdzEKKwlhZGMgICAgICQwLCB3MgorTChkaWFnX2VudHJ5XzMpOgorCW1vdiAgICAgLTE2KHVwLG4sOCksICVyYXgKKwltdWxxICAgIDgodnBfaW5uZXIpCisJYWRkICAgICAlcmF4LCB3MAorCW1vdiAgICAgMTYodnBfaW5uZXIpLCAlcmF4CisJYWRjICAgICAlcmR4LCB3MQorCWFkYyAgICAgJDAsIHcyCitMKGRpYWdfZW50cnlfMik6CisJbXVscSAgICAtMjQodXAsbiw4KQorCWFkZCAgICAgJXJheCwgdzAKKwltb3YgICAgIDI0KHZwX2lubmVyKSwgJXJheAorCWFkYyAgICAgJXJkeCwgdzEKKwlsZWEgICAgIDMyKHZwX2lubmVyKSwgdnBfaW5uZXIKKwlhZGMgICAgICQwLCB3MgorTChkaWFnX2VudHJ5XzEpOgorCW11bHEgICAgLTMyKHVwLG4sOCkKKwlzdWIgICAgICQ0LCBuCisJam56CUwoZGlhZ190b3ApCisKKwlhZGQJJXJheCwgdzAKKwlhZGMJJXJkeCwgdzEKKwlhZGMJJDAsIHcyCisKKwltb3YJdzAsIChycCx1biw4KQorCisJaW5jCXVuCisJanoJTChkaWFnX2VuZCkKKworCW1vdgl2biwgbgorCW1vdgl2cCwgdnBfaW5uZXIKKworCWxlYQk4KHVwKSwgdXAKKwltb3YJdzEsIHcwCisJbW92CXcyLCB3MQorCXhvcglSMzIodzIpLCBSMzIodzIpCisKKwlqbXAJKm91dGVyX2FkZHIKKworTChkaWFnX2VuZCk6CisJbW92CXcxLCAocnApCisJbW92CXcyLCA4KHJwKQorCitMKHJldCk6CXBvcAklcjE1CisJcG9wCSVyMTQKKwlwb3AJJXIxMworCXBvcAklcjEyCisJcG9wCSVyYnAKKwlwb3AJJXJieAorCUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9rOC9yZWRjXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvazgvcmVkY18xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzI3YjIxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvazgvcmVkY18xLmFzbQpAQCAtMCwwICsxLDU5MSBAQAorZG5sICBYODYtNjQgbXBuX3JlZGNfMSBvcHRpbWlzZWQgZm9yIEFNRCBLOC1LMTAuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqw7ZybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAwNCwgMjAwOCwgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIKK0MgQU1EIEs4LEs5CSA/CitDIEFNRCBLMTAJID8KK0MgQU1EIGJ1bGwJID8KK0MgQU1EIHBpbGUJID8KK0MgQU1EIHN0ZWFtCSA/CitDIEFNRCBib2JjYXQJID8KK0MgQU1EIGphZ3VhcgkgPworQyBJbnRlbCBQNAkgPworQyBJbnRlbCBjb3JlCSA/CitDIEludGVsIE5ITQkgPworQyBJbnRlbCBTQlIJID8KK0MgSW50ZWwgSUJSCSA/CitDIEludGVsIEhXTAkgPworQyBJbnRlbCBCV0wJID8KK0MgSW50ZWwgYXRvbQkgPworQyBWSUEgbmFubwkgPworCitDIFRoZSBpbm5lciBsb29wcyBvZiB0aGlzIGNvZGUgYXJlIHRoZSByZXN1bHQgb2YgcnVubmluZyBhIGNvZGUgZ2VuZXJhdGlvbiBhbmQKK0Mgb3B0aW1pc2F0aW9uIHRvb2wgc3VpdGUgd3JpdHRlbiBieSBEYXZpZCBIYXJ2ZXkgYW5kIFRvcmJqw7ZybiBHcmFubHVuZC4KKworQyBUT0RPCitDICAqIE1pY3JvLW9wdGltaXNlLCBub25lIHBlcmZvcm1lZCB0aHVzIGZhci4KK0MgICogVGhpcyBsb29rcyBkaWZmZXJlbnQgZnJvbSBvdGhlciBjdXJyZW50IHJlZGNfMS5hc20gdmFyaWFudHMuICBDb25zaWRlcgorQyAgICBhZGFwdGluZyB0aGlzIHRvIHRoZSBtYWluc3RyZWFtIHN0eWxlLgorQyAgKiBJcyB0aGlzIGNvZGUgcmVhbGx5IGZhc3RlciB0aGFuIG1vcmUgYXBwcm9hY2hlcyB3aGljaCBjb21wdXRlIHEwIGxhdGVyPworQyAgICBJcyB0aGUgdXNlIG9mIGEganVtcCBqdW1wIHRhYmxlIGZhc3Rlcj8gIE9yIGlzIHRoZSBlZGdlIG9mIHRoaXMgZHVlIHRvIHRoZQorQyAgICBpbmxpbmVkIGFkZF9uIGNvZGU/CitDICAqIFB1dCBpbml0aWFsIG1bMF0geCBxMCBjb21wdXRhdGlvbiBpbiBoZWFkZXIuCitDICAqIFB1dCBiYXNlY2FzZXMgYXQgdGhlIGZpbGUncyBlbmQsIHNpbmdsZSB0aGVtIG91dCBiZWZvcmUgdGhlIHB1c2hlcy4KKworZGVmaW5lKGBycCcsICAgICAgICAgIGAlcmRpJykgICBDIHJjeAorZGVmaW5lKGB1cCcsICAgICAgICAgIGAlcnNpJykgICBDIHJkeAorZGVmaW5lKGBtcF9wYXJhbScsICAgIGAlcmR4JykgICBDIHI4CitkZWZpbmUoYG4nLCAgICAgICAgICAgYCVyY3gnKSAgIEMgcjkKK2RlZmluZShgdTBpbnYnLCAgICAgICBgJXI4JykgICAgQyBzdGFjaworCitkZWZpbmUoYGknLCAgICAgICAgICAgYCVyMTEnKQorZGVmaW5lKGBubmVnJywgICAgICAgIGAlcjEyJykKK2RlZmluZShgbXAnLCAgICAgICAgICBgJXIxMycpCitkZWZpbmUoYHEwJywgICAgICAgICAgYCVyYnAnKQorZGVmaW5lKGB2cCcsICAgICAgICAgIGAlcmR4JykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMzIpCitQUk9MT0dVRShtcG5fcmVkY18xKQorCUZVTkNfRU5UUlkoNCkKK0lGRE9TKGAJbW92CTU2KCVyc3ApLCAlcjgJJykKKwlwdXNoCSVyYnAKKwltb3YJKHVwKSwgcTAJCUMgdXBbMF0KKwlwdXNoCSVyYngKKwlpbXVsCXUwaW52LCBxMAkJQyBmaXJzdCBxMCwgZm9yIGFsbCBleGVjdXRpb24gcGF0aHMKKwlwdXNoCSVyMTIKKwlwdXNoCSVyMTMKKwlwdXNoCSVyMTQKKwlwdXNoCSVyMTUKKworCW1vdgluLCBubmVnCisJbmVnCW5uZWcKKwlsZWEJKG1wX3BhcmFtLG4sOCksIG1wCUMgbXAgKz0gbgorCWxlYQktMTYodXAsbiw4KSwgdXAJCUMgdXAgKz0gbgorCisJbW92CVIzMihuKSwgUjMyKCVyYXgpCisJYW5kCSQzLCBSMzIoJXJheCkKKwlsZWEJNCglcmF4KSwgJXI5CisJY21wCSQ0LCBSMzIobikKKwljbW92ZwklcjksICVyYXgKKwlsZWEJTCh0YWIpKCVyaXApLCAlcjkKK2lmZGVmKGBQSUMnLGAKKwltb3ZzbHEJKCVyOSwlcmF4LDQpLCAlcmF4CisJYWRkCSVyOSwgJXJheAorCWptcAkqJXJheAorJyxgCisJam1wCSooJXI5LCVyYXgsOCkKKycpCisKKwlKVU1QVEFCU0VDVAorCUFMSUdOKDgpCitMKHRhYik6CUpNUEVOVCgJTCgwKSwgTCh0YWIpKQorCUpNUEVOVCgJTCgxKSwgTCh0YWIpKQorCUpNUEVOVCgJTCgyKSwgTCh0YWIpKQorCUpNUEVOVCgJTCgzKSwgTCh0YWIpKQorCUpNUEVOVCgJTCgwbTQpLCBMKHRhYikpCisJSk1QRU5UKAlMKDFtNCksIEwodGFiKSkKKwlKTVBFTlQoCUwoMm00KSwgTCh0YWIpKQorCUpNUEVOVCgJTCgzbTQpLCBMKHRhYikpCisJVEVYVAorCisJQUxJR04oMTYpCitMKDEpOgltb3YJKG1wX3BhcmFtKSwgJXJheAorCW11bAlxMAorCWFkZAk4KHVwKSwgJXJheAorCWFkYwkxNih1cCksICVyZHgKKwltb3YJJXJkeCwgKHJwKQorCW1vdgkkMCwgUjMyKCVyYXgpCisJYWRjCVIzMiglcmF4KSwgUjMyKCVyYXgpCisJam1wCUwocmV0KQorCisKKwlBTElHTigxNikKK0woMik6CW1vdgkobXBfcGFyYW0pLCAlcmF4CisJbXVsCXEwCisJeG9yCVIzMiglcjE0KSwgUjMyKCVyMTQpCisJbW92CSVyYXgsICVyMTAKKwltb3YJLTgobXApLCAlcmF4CisJbW92CSVyZHgsICVyOQorCW11bAlxMAorCWFkZAkodXApLCAlcjEwCisJYWRjCSVyYXgsICVyOQorCWFkYwklcmR4LCAlcjE0CisJYWRkCTgodXApLCAlcjkKKwlhZGMJJDAsICVyMTQKKwltb3YJJXI5LCBxMAorCWltdWwJdTBpbnYsIHEwCisJbW92CS0xNihtcCksICVyYXgKKwltdWwJcTAKKwl4b3IJUjMyKCVyYngpLCBSMzIoJXJieCkKKwltb3YJJXJheCwgJXIxMAorCW1vdgktOChtcCksICVyYXgKKwltb3YJJXJkeCwgJXIxMQorCW11bAlxMAorCWFkZAklcjksICVyMTAKKwlhZGMJJXJheCwgJXIxMQorCWFkYwklcmR4LCAlcmJ4CisJYWRkCTE2KHVwKSwgJXIxMQorCWFkYwkkMCwgJXJieAorCXhvcglSMzIoJXJheCksIFIzMiglcmF4KQorCWFkZAklcjExLCAlcjE0CisJYWRjCTI0KHVwKSwgJXJieAorCW1vdgklcjE0LCAocnApCisJbW92CSVyYngsIDgocnApCisJYWRjCVIzMiglcmF4KSwgUjMyKCVyYXgpCisJam1wCUwocmV0KQorCisKK0woMyk6CW1vdgkobXBfcGFyYW0pLCAlcmF4CisJbXVsCXEwCisJbW92CSVyYXgsICVyYngKKwltb3YJJXJkeCwgJXIxMAorCW1vdgktMTYobXApLCAlcmF4CisJbXVsCXEwCisJeG9yCVIzMiglcjkpLCBSMzIoJXI5KQorCXhvcglSMzIoJXIxNCksIFIzMiglcjE0KQorCWFkZAktOCh1cCksICVyYngKKwlhZGMJJXJheCwgJXIxMAorCW1vdgktOChtcCksICVyYXgKKwlhZGMJJXJkeCwgJXI5CisJbXVsCXEwCisJYWRkCSh1cCksICVyMTAKKwltb3YJJXIxMCwgKHVwKQorCWFkYwklcmF4LCAlcjkKKwlhZGMJJXJkeCwgJXIxNAorCW1vdgklcjEwLCBxMAorCWltdWwJdTBpbnYsIHEwCisJYWRkCSVyOSwgOCh1cCkKKwlhZGMJJDAsICVyMTQKKwltb3YJJXIxNCwgLTgodXApCisKKwltb3YJLTI0KG1wKSwgJXJheAorCW11bAlxMAorCW1vdgklcmF4LCAlcmJ4CisJbW92CSVyZHgsICVyMTAKKwltb3YJLTE2KG1wKSwgJXJheAorCW11bAlxMAorCXhvcglSMzIoJXI5KSwgUjMyKCVyOSkKKwl4b3IJUjMyKCVyMTQpLCBSMzIoJXIxNCkKKwlhZGQJKHVwKSwgJXJieAorCWFkYwklcmF4LCAlcjEwCisJbW92CS04KG1wKSwgJXJheAorCWFkYwklcmR4LCAlcjkKKwltdWwJcTAKKwlhZGQJOCh1cCksICVyMTAKKwltb3YJJXIxMCwgOCh1cCkKKwlhZGMJJXJheCwgJXI5CisJYWRjCSVyZHgsICVyMTQKKwltb3YJJXIxMCwgcTAKKwlpbXVsCXUwaW52LCBxMAorCWFkZAklcjksIDE2KHVwKQorCWFkYwkkMCwgJXIxNAorCW1vdgklcjE0LCAodXApCisKKwltb3YJLTI0KG1wKSwgJXJheAorCW11bAlxMAorCW1vdgklcmF4LCAlcmJ4CisJbW92CSVyZHgsICVyMTAKKwltb3YJLTE2KG1wKSwgJXJheAorCW11bAlxMAorCXhvcglSMzIoJXI5KSwgUjMyKCVyOSkKKwl4b3IJUjMyKCVyMTQpLCBSMzIoJXIxNCkKKwlhZGQJOCh1cCksICVyYngKKwlhZGMJJXJheCwgJXIxMAorCW1vdgktOChtcCksICVyYXgKKwlhZGMJJXJkeCwgJXI5CisJbXVsCXEwCisJYWRkCTE2KHVwKSwgJXIxMAorCWFkYwklcmF4LCAlcjkKKwlhZGMJJXJkeCwgJXIxNAorCWFkZAkyNCh1cCksICVyOQorCWFkYwkkMCwgJXIxNAorCisJeG9yCVIzMiglcmF4KSwgUjMyKCVyYXgpCisJYWRkCS04KHVwKSwgJXIxMAorCWFkYwkodXApLCAlcjkKKwlhZGMJMzIodXApLCAlcjE0CisJbW92CSVyMTAsIChycCkKKwltb3YJJXI5LCA4KHJwKQorCW1vdgklcjE0LCAxNihycCkKKwlhZGMJUjMyKCVyYXgpLCBSMzIoJXJheCkKKwlqbXAJTChyZXQpCisKKworCUFMSUdOKDE2KQorTCgybTQpOgorTChsbzIpOgltb3YJKG1wLG5uZWcsOCksICVyYXgKKwltdWwJcTAKKwl4b3IJUjMyKCVyMTQpLCBSMzIoJXIxNCkKKwl4b3IJUjMyKCVyYngpLCBSMzIoJXJieCkKKwltb3YJJXJheCwgJXIxMAorCW1vdgk4KG1wLG5uZWcsOCksICVyYXgKKwltb3YJMjQodXAsbm5lZyw4KSwgJXIxNQorCW1vdgklcmR4LCAlcjkKKwltdWwJcTAKKwlhZGQJMTYodXAsbm5lZyw4KSwgJXIxMAorCWFkYwklcmF4LCAlcjkKKwltb3YJMTYobXAsbm5lZyw4KSwgJXJheAorCWFkYwklcmR4LCAlcjE0CisJbXVsCXEwCisJbW92CSQwLCBSMzIoJXIxMCkJCUMgeG9yPworCWxlYQkyKG5uZWcpLCBpCisJYWRkCSVyOSwgJXIxNQorCWltdWwJdTBpbnYsICVyMTUKKwlqbXAJIEwoZTIpCisKKwlBTElHTigxNikKK0wobGkyKToJYWRkCSVyMTAsICh1cCxpLDgpCisJYWRjCSVyYXgsICVyOQorCW1vdgkobXAsaSw4KSwgJXJheAorCWFkYwklcmR4LCAlcjE0CisJeG9yCVIzMiglcjEwKSwgUjMyKCVyMTApCisJbXVsCXEwCitMKGUyKToJYWRkCSVyOSwgOCh1cCxpLDgpCisJYWRjCSVyYXgsICVyMTQKKwlhZGMJJXJkeCwgJXJieAorCW1vdgk4KG1wLGksOCksICVyYXgKKwltdWwJcTAKKwlhZGQJJXIxNCwgMTYodXAsaSw4KQorCWFkYwklcmF4LCAlcmJ4CisJYWRjCSVyZHgsICVyMTAKKwltb3YJMTYobXAsaSw4KSwgJXJheAorCW11bAlxMAorCWFkZAklcmJ4LCAyNCh1cCxpLDgpCisJbW92CSQwLCBSMzIoJXIxNCkJCUMgemVybworCW1vdgklcjE0LCAlcmJ4CQlDIHplcm8KKwlhZGMJJXJheCwgJXIxMAorCW1vdgkyNChtcCxpLDgpLCAlcmF4CisJbW92CSVyMTQsICVyOQkJQyB6ZXJvCisJYWRjCSVyZHgsICVyOQorCW11bAlxMAorCWFkZAkkNCwgaQorCWpzCSBMKGxpMikKKworTChsZTIpOglhZGQJJXIxMCwgKHVwKQorCWFkYwklcmF4LCAlcjkKKwlhZGMJJXIxNCwgJXJkeAorCWFkZAklcjksIDgodXApCisJYWRjCSQwLCAlcmR4CisJbW92CSVyZHgsIDE2KHVwLG5uZWcsOCkJQyB1cFswXQorCWFkZAkkOCwgdXAKKwltb3YJJXIxNSwgcTAKKwlkZWMJbgorCWpueglMKGxvMikKKworCW1vdglubmVnLCBuCisJc2FyCSQyLCBuCisJbGVhCTMyKHVwLG5uZWcsOCksIHVwCisJbGVhCSh1cCxubmVnLDgpLCB2cAorCisJbW92CS0xNih1cCksICVyOAorCW1vdgktOCh1cCksICVyOQorCWFkZAktMTYodnApLCAlcjgKKwlhZGMJLTgodnApLCAlcjkKKwltb3YJJXI4LCAocnApCisJbW92CSVyOSwgOChycCkKKwlsZWEJMTYocnApLCBycAorCWptcAlMKGFkZHgpCisKKworCUFMSUdOKDE2KQorTCgxbTQpOgorTChsbzEpOgltb3YJKG1wLG5uZWcsOCksICVyYXgKKwl4b3IJJXI5LCAlcjkKKwl4b3IJUjMyKCVyYngpLCBSMzIoJXJieCkKKwltdWwJcTAKKwltb3YJJXJheCwgJXI5CisJbW92CTgobXAsbm5lZyw4KSwgJXJheAorCW1vdgkyNCh1cCxubmVnLDgpLCAlcjE1CisJbW92CSVyZHgsICVyMTQKKwltb3YJJDAsIFIzMiglcjEwKQkJQyB4b3I/CisJbXVsCXEwCisJYWRkCTE2KHVwLG5uZWcsOCksICVyOQorCWFkYwklcmF4LCAlcjE0CisJYWRjCSVyZHgsICVyYngKKwltb3YJMTYobXAsbm5lZyw4KSwgJXJheAorCW11bAlxMAorCWxlYQkxKG5uZWcpLCBpCisJYWRkCSVyMTQsICVyMTUKKwlpbXVsCXUwaW52LCAlcjE1CisJam1wCSBMKGUxKQorCisJQUxJR04oMTYpCitMKGxpMSk6CWFkZAklcjEwLCAodXAsaSw4KQorCWFkYwklcmF4LCAlcjkKKwltb3YJKG1wLGksOCksICVyYXgKKwlhZGMJJXJkeCwgJXIxNAorCXhvcglSMzIoJXIxMCksIFIzMiglcjEwKQorCW11bAlxMAorCWFkZAklcjksIDgodXAsaSw4KQorCWFkYwklcmF4LCAlcjE0CisJYWRjCSVyZHgsICVyYngKKwltb3YJOChtcCxpLDgpLCAlcmF4CisJbXVsCXEwCitMKGUxKToJYWRkCSVyMTQsIDE2KHVwLGksOCkKKwlhZGMJJXJheCwgJXJieAorCWFkYwklcmR4LCAlcjEwCisJbW92CTE2KG1wLGksOCksICVyYXgKKwltdWwJcTAKKwlhZGQJJXJieCwgMjQodXAsaSw4KQorCW1vdgkkMCwgUjMyKCVyMTQpCQlDIHplcm8KKwltb3YJJXIxNCwgJXJieAkJQyB6ZXJvCisJYWRjCSVyYXgsICVyMTAKKwltb3YJMjQobXAsaSw4KSwgJXJheAorCW1vdgklcjE0LCAlcjkJCUMgemVybworCWFkYwklcmR4LCAlcjkKKwltdWwJcTAKKwlhZGQJJDQsIGkKKwlqcwkgTChsaTEpCisKK0wobGUxKToJYWRkCSVyMTAsICh1cCkKKwlhZGMJJXJheCwgJXI5CisJYWRjCSVyMTQsICVyZHgKKwlhZGQJJXI5LCA4KHVwKQorCWFkYwkkMCwgJXJkeAorCW1vdgklcmR4LCAxNih1cCxubmVnLDgpCUMgdXBbMF0KKwlhZGQJJDgsIHVwCisJbW92CSVyMTUsIHEwCisJZGVjCW4KKwlqbnoJTChsbzEpCisKKwltb3YJbm5lZywgbgorCXNhcgkkMiwgbgorCWxlYQkyNCh1cCxubmVnLDgpLCB1cAorCWxlYQkodXAsbm5lZyw4KSwgdnAKKworCW1vdgktOCh1cCksICVyOAorCWFkZAktOCh2cCksICVyOAorCW1vdgklcjgsIChycCkKKwlsZWEJOChycCksIHJwCisJam1wCUwoYWRkeCkKKworCisJQUxJR04oMTYpCitMKDApOgorTCgwbTQpOgorTChsbzApOgltb3YJKG1wLG5uZWcsOCksICVyYXgKKwltb3YJbm5lZywgaQorCW11bAlxMAorCXhvcglSMzIoJXIxMCksIFIzMiglcjEwKQorCW1vdgklcmF4LCAlcjE0CisJbW92CSVyZHgsICVyYngKKwltb3YJOChtcCxubmVnLDgpLCAlcmF4CisJbW92CTI0KHVwLG5uZWcsOCksICVyMTUKKwltdWwJcTAKKwlhZGQJMTYodXAsbm5lZyw4KSwgJXIxNAorCWFkYwklcmF4LCAlcmJ4CisJYWRjCSVyZHgsICVyMTAKKwlhZGQJJXJieCwgJXIxNQorCWltdWwJdTBpbnYsICVyMTUKKwlqbXAJTChlMCkKKworCUFMSUdOKDE2KQorTChsaTApOglhZGQJJXIxMCwgKHVwLGksOCkKKwlhZGMJJXJheCwgJXI5CisJbW92CShtcCxpLDgpLCAlcmF4CisJYWRjCSVyZHgsICVyMTQKKwl4b3IJUjMyKCVyMTApLCBSMzIoJXIxMCkKKwltdWwJcTAKKwlhZGQJJXI5LCA4KHVwLGksOCkKKwlhZGMJJXJheCwgJXIxNAorCWFkYwklcmR4LCAlcmJ4CisJbW92CTgobXAsaSw4KSwgJXJheAorCW11bAlxMAorCWFkZAklcjE0LCAxNih1cCxpLDgpCisJYWRjCSVyYXgsICVyYngKKwlhZGMJJXJkeCwgJXIxMAorTChlMCk6CW1vdgkxNihtcCxpLDgpLCAlcmF4CisJbXVsCXEwCisJYWRkCSVyYngsIDI0KHVwLGksOCkKKwltb3YJJDAsIFIzMiglcjE0KQkJQyB6ZXJvCisJbW92CSVyMTQsICVyYngJCUMgemVybworCWFkYwklcmF4LCAlcjEwCisJbW92CTI0KG1wLGksOCksICVyYXgKKwltb3YJJXIxNCwgJXI5CQlDIHplcm8KKwlhZGMJJXJkeCwgJXI5CisJbXVsCXEwCisJYWRkCSQ0LCBpCisJanMJIEwobGkwKQorCitMKGxlMCk6CWFkZAklcjEwLCAodXApCisJYWRjCSVyYXgsICVyOQorCWFkYwklcjE0LCAlcmR4CisJYWRkCSVyOSwgOCh1cCkKKwlhZGMJJDAsICVyZHgKKwltb3YJJXJkeCwgMTYodXAsbm5lZyw4KQlDIHVwWzBdCisJYWRkCSQ4LCB1cAorCW1vdgklcjE1LCBxMAorCWRlYwluCisJam56CUwobG8wKQorCisJbW92CW5uZWcsIG4KKwlzYXIJJDIsIG4KKwljbGMKKwlsZWEJMTYodXAsbm5lZyw4KSwgdXAKKwlsZWEJKHVwLG5uZWcsOCksIHZwCisJam1wCUwoYWRkeSkKKworCisJQUxJR04oMTYpCitMKDNtNCk6CitMKGxvMyk6CW1vdgkobXAsbm5lZyw4KSwgJXJheAorCW11bAlxMAorCW1vdgklcmF4LCAlcmJ4CisJbW92CSVyZHgsICVyMTAKKwltb3YJOChtcCxubmVnLDgpLCAlcmF4CisJbW92CTI0KHVwLG5uZWcsOCksICVyMTUKKwltdWwJcTAKKwlhZGQJMTYodXAsbm5lZyw4KSwgJXJieAlDIHJlc3VsdCBpcyB6ZXJvLCBtaWdodCBjYXJyeQorCW1vdgkkMCwgUjMyKCVyYngpCQlDIHplcm8KKwltb3YJJXJieCwgJXIxNAkJQyB6ZXJvCisJYWRjCSVyYXgsICVyMTAKKwltb3YJMTYobXAsbm5lZyw4KSwgJXJheAorCW1vdgklcjE0LCAlcjkJCUMgemVybworCWFkYwklcmR4LCAlcjkKKwlhZGQJJXIxMCwgJXIxNQorCW11bAlxMAorCWxlYQkzKG5uZWcpLCBpCisJaW11bAl1MGludiwgJXIxNQorQwlqbXAJTChsaTMpCisKKwlBTElHTigxNikKK0wobGkzKToJYWRkCSVyMTAsICh1cCxpLDgpCisJYWRjCSVyYXgsICVyOQorCW1vdgkobXAsaSw4KSwgJXJheAorCWFkYwklcmR4LCAlcjE0CisJeG9yCVIzMiglcjEwKSwgUjMyKCVyMTApCisJbXVsCXEwCisJYWRkCSVyOSwgOCh1cCxpLDgpCisJYWRjCSVyYXgsICVyMTQKKwlhZGMJJXJkeCwgJXJieAorCW1vdgk4KG1wLGksOCksICVyYXgKKwltdWwJcTAKKwlhZGQJJXIxNCwgMTYodXAsaSw4KQorCWFkYwklcmF4LCAlcmJ4CisJYWRjCSVyZHgsICVyMTAKKwltb3YJMTYobXAsaSw4KSwgJXJheAorCW11bAlxMAorCWFkZAklcmJ4LCAyNCh1cCxpLDgpCisJbW92CSQwLCBSMzIoJXIxNCkJCUMgemVybworCW1vdgklcjE0LCAlcmJ4CQlDIHplcm8KKwlhZGMJJXJheCwgJXIxMAorCW1vdgkyNChtcCxpLDgpLCAlcmF4CisJbW92CSVyMTQsICVyOQkJQyB6ZXJvCisJYWRjCSVyZHgsICVyOQorCW11bAlxMAorCWFkZAkkNCwgaQorCWpzCSBMKGxpMykKKworTChsZTMpOglhZGQJJXIxMCwgKHVwKQorCWFkYwklcmF4LCAlcjkKKwlhZGMJJXIxNCwgJXJkeAorCWFkZAklcjksIDgodXApCisJYWRjCSQwLCAlcmR4CisJbW92CSVyZHgsIDE2KHVwLG5uZWcsOCkJQyB1cFswXQorCW1vdgklcjE1LCBxMAorCWxlYQk4KHVwKSwgdXAKKwlkZWMJbgorCWpueglMKGxvMykKKworCitDID09PT0gQWRkaXRpb24gY29kZSA9PT09CisJbW92CW5uZWcsIG4KKwlzYXIJJDIsIG4KKwlsZWEJNDAodXAsbm5lZyw4KSwgdXAKKwlsZWEJKHVwLG5uZWcsOCksIHZwCisKKwltb3YJLTI0KHVwKSwgJXI4CisJbW92CS0xNih1cCksICVyOQorCW1vdgktOCh1cCksICVyMTAKKwlhZGQJLTI0KHZwKSwgJXI4CisJYWRjCS0xNih2cCksICVyOQorCWFkYwktOCh2cCksICVyMTAKKwltb3YJJXI4LCAocnApCisJbW92CSVyOSwgOChycCkKKwltb3YJJXIxMCwgMTYocnApCisJbGVhCTI0KHJwKSwgcnAKKworTChhZGR4KTppbmMJbgorCWp6CUwoYWQzKQorCitMKGFkZHkpOm1vdgkodXApLCAlcjgKKwltb3YJOCh1cCksICVyOQorCWluYwluCisJam1wCUwobWlkKQorCitDCUFMSUdOKDE2KQorTChhbDMpOglhZGMJKHZwKSwgJXI4CisJYWRjCTgodnApLCAlcjkKKwlhZGMJMTYodnApLCAlcjEwCisJYWRjCTI0KHZwKSwgJXIxMQorCW1vdgklcjgsIChycCkKKwlsZWEJMzIodXApLCB1cAorCW1vdgklcjksIDgocnApCisJbW92CSVyMTAsIDE2KHJwKQorCWluYwluCisJbW92CSVyMTEsIDI0KHJwKQorCWxlYQkzMih2cCksIHZwCisJbW92CSh1cCksICVyOAorCW1vdgk4KHVwKSwgJXI5CisJbGVhCTMyKHJwKSwgcnAKK0wobWlkKToJbW92CTE2KHVwKSwgJXIxMAorCW1vdgkyNCh1cCksICVyMTEKKwlqbnoJTChhbDMpCisKK0woYWUzKToJYWRjCSh2cCksICVyOAorCWFkYwk4KHZwKSwgJXI5CisJYWRjCTE2KHZwKSwgJXIxMAorCWFkYwkyNCh2cCksICVyMTEKKwltb3YJJXI4LCAocnApCisJbW92CSVyOSwgOChycCkKKwltb3YJJXIxMCwgMTYocnApCisJbW92CSVyMTEsIDI0KHJwKQorCitMKGFkMyk6CW1vdglSMzIobiksIFIzMiglcmF4KQlDIHplcm8KKwlhZGMJUjMyKCVyYXgpLCBSMzIoJXJheCkKKworTChyZXQpOglwb3AJJXIxNQorCXBvcAklcjE0CisJcG9wCSVyMTMKKwlwb3AJJXIxMgorCXBvcAklcmJ4CisJcG9wCSVyYnAKKwlGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvazgvc3FyX2Jhc2VjYXNlLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2s4L3Nxcl9iYXNlY2FzZS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBjZjk0NQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2s4L3Nxcl9iYXNlY2FzZS5hc20KQEAgLTAsMCArMSw4MDcgQEAKK2RubCAgQU1ENjQgbXBuX3Nxcl9iYXNlY2FzZS4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDgsIDIwMDksIDIwMTEsIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQyBUaGUgaW5uZXIgbG9vcHMgb2YgdGhpcyBjb2RlIGFyZSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgYSBjb2RlIGdlbmVyYXRpb24gYW5kCitDIG9wdGltaXphdGlvbiB0b29sIHN1aXRlIHdyaXR0ZW4gYnkgRGF2aWQgSGFydmV5IGFuZCBUb3Jiam9ybiBHcmFubHVuZC4KKworQyBOT1RFUworQyAgICogVGhlcmUgaXMgYSBtYWpvciBzdHVwaWRpdHkgaW4gdGhhdCB3ZSBjYWxsIG1wbl9tdWxfMSBpbml0aWFsbHksIGZvciBhCitDICAgICBsYXJnZSB0cmlwIGNvdW50LiAgSW5zdGVhZCwgd2Ugc2hvdWxkIGZvbGxvdyB0aGUgZ2VuZXJpYy9zcXJfYmFzZWNhc2UuYworQyAgICAgY29kZSB3aGljaCB1c2VzIGFkZG11bF8ycyBmcm9tIHRoZSBzdGFydCwgY29uZGl0aW9uYWxseSBsZWF2aW5nIGEgMXgxCitDICAgICBtdWx0aXBseSB0byB0aGUgZW5kLiAgKEluIGFzc2VtYmx5IGNvZGUsIG9uZSB3b3VsZCBzdG9wIGludm9raW5nCitDICAgICBhZGRtdWxfMnMgbG9vcHMgd2hlbiBwZXJoYXBzIDN4MnMgcmVzcGVjdGl2ZWx5IGEgMngycyByZW1haW5zLikKK0MgICAqIEFub3RoZXIgc3R1cGlkaXR5IGlzIGluIHRoZSBzcXJfZGlhZ19hZGRsc2gxIGNvZGUuICBJdCBkb2VzIG5vdCBuZWVkIHRvCitDICAgICBzYXZlL3Jlc3RvcmUgY2FycnksIGluc3RlYWQgaXQgY2FuIHByb3BhZ2F0ZSBpbnRvIHRoZSBoaWdoIHByb2R1Y3Qgd29yZC4KK0MgICAqIEFsaWduIG1vcmUgbGFiZWxzLCBzaG91bGQgc2hhdmUgb2ZmIGEgZmV3IGN5Y2xlcy4KK0MgICAqIFdlIGNhbiBzYWZlbHkgdXNlIDMyLWJpdCBzaXplIG9wZXJhdGlvbnMsIHNpbmNlIG9wZXJhbmRzIHdpdGggKDJeMzIpCitDICAgICBsaW1icyB3aWxsIGxlYWQgdG8gbm9uLXRlcm1pbmF0aW9uIGluIHByYWN0aWNlLgorQyAgICogVGhlIGp1bXAgdGFibGUgY291bGQgcHJvYmFibHkgYmUgb3B0aW1pemVkLCBhdCBsZWFzdCBmb3Igbm9uLXBpYy4KK0MgICAqIFRoZSBzcGVjaWFsIGNvZGUgZm9yIG4gPD0gNCB3YXMgcXVpY2tseSB3cml0dGVuLiAgSXQgaXMgcHJvYmFibHkgdG9vCitDICAgICBsYXJnZSBhbmQgdW5uZWNlc3NhcmlseSBzbG93LgorQyAgICogQ29uc2lkZXIgY29tYmluaW5nIHNtYWxsIGNhc2VzIGNvZGUgc28gdGhhdCB0aGUgbj1rLTEgY29kZSBqdW1wcyBpbnRvIHRoZQorQyAgICAgbWlkZGxlIG9mIHRoZSBuPWsgY29kZS4KK0MgICAqIEF2b2lkIHNhdmluZyByZWdpc3RlcnMgZm9yIHNtYWxsIGNhc2VzIGNvZGUuCitDICAgKiBOZWVkZWQgdmFyaWFibGVzOgorQyAgICBuICAgcjExICBpbnB1dCBzaXplCitDICAgIGkgICByOCAgIHdvcmsgbGVmdCwgaW5pdGlhbGx5IG4KK0MgICAgaiAgIHI5ICAgaW5uZXIgbG9vcCBjb3VudAorQyAgICAgICAgcjE1ICB1bnVzZWQKK0MgICAgdjAgIHIxMworQyAgICB2MSAgcjE0CitDICAgIHJwICByZGkKK0MgICAgdXAgIHJzaQorQyAgICB3MCAgcmJ4CitDICAgIHcxICByY3gKK0MgICAgdzIgIHJicAorQyAgICB3MyAgcjEwCitDICAgIHRwICByMTIKK0MgICAgbG8gIHJheAorQyAgICBoaSAgcmR4CitDICAgICAgICByc3AKKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywJICBgJXJkaScpCitkZWZpbmUoYHVwJywJICBgJXJzaScpCitkZWZpbmUoYG5fcGFyYW0nLCBgJXJkeCcpCisKK2RlZmluZShgbicsCWAlcjExJykKK2RlZmluZShgdHAnLAlgJXIxMicpCitkZWZpbmUoYGknLAlgJXI4JykKK2RlZmluZShgaicsCWAlcjknKQorZGVmaW5lKGB2MCcsCWAlcjEzJykKK2RlZmluZShgdjEnLAlgJXIxNCcpCitkZWZpbmUoYHcwJywJYCVyYngnKQorZGVmaW5lKGB3MScsCWAlcmN4JykKK2RlZmluZShgdzInLAlgJXJicCcpCitkZWZpbmUoYHczJywJYCVyMTAnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigxNikKK1BST0xPR1VFKG1wbl9zcXJfYmFzZWNhc2UpCisJRlVOQ19FTlRSWSgzKQorCW1vdglSMzIobl9wYXJhbSksIFIzMiglcmN4KQorCW1vdglSMzIobl9wYXJhbSksIFIzMihuKQkJQyBmcmVlIG9yaWdpbmFsIG4gcmVnaXN0ZXIgKHJkeCkKKworCWFkZAkkLTQwLCAlcnNwCisKKwlhbmQJJDMsIFIzMiglcmN4KQorCWNtcAkkNCwgUjMyKG5fcGFyYW0pCisJbGVhCTQoJXJjeCksICVyOAorCisJbW92CSVyYngsIDMyKCVyc3ApCisJbW92CSVyYnAsIDI0KCVyc3ApCisJbW92CSVyMTIsIDE2KCVyc3ApCisJbW92CSVyMTMsIDgoJXJzcCkKKwltb3YJJXIxNCwgKCVyc3ApCisKKwljbW92ZwklcjgsICVyY3gKKworCWxlYQlMKHRhYikoJXJpcCksICVyYXgKK2lmZGVmKGBQSUMnLAorYAltb3ZzbHEJKCVyYXgsJXJjeCw0KSwgJXIxMAorCWFkZAklcjEwLCAlcmF4CisJam1wCSolcmF4CisnLGAKKwlqbXAJKiglcmF4LCVyY3gsOCkKKycpCisJSlVNUFRBQlNFQ1QKKwlBTElHTig4KQorTCh0YWIpOglKTVBFTlQoCUwoNCksIEwodGFiKSkKKwlKTVBFTlQoCUwoMSksIEwodGFiKSkKKwlKTVBFTlQoCUwoMiksIEwodGFiKSkKKwlKTVBFTlQoCUwoMyksIEwodGFiKSkKKwlKTVBFTlQoCUwoMG00KSwgTCh0YWIpKQorCUpNUEVOVCgJTCgxbTQpLCBMKHRhYikpCisJSk1QRU5UKAlMKDJtNCksIEwodGFiKSkKKwlKTVBFTlQoCUwoM200KSwgTCh0YWIpKQorCVRFWFQKKworTCgxKToJbW92CSh1cCksICVyYXgKKwltdWwJJXJheAorCWFkZAkkNDAsICVyc3AKKwltb3YJJXJheCwgKHJwKQorCW1vdgklcmR4LCA4KHJwKQorCUZVTkNfRVhJVCgpCisJcmV0CisKK0woMik6CW1vdgkodXApLCAlcmF4CisJbW92CSVyYXgsICVyOAorCW11bAklcmF4CisJbW92CTgodXApLCAlcjExCisJbW92CSVyYXgsIChycCkKKwltb3YJJXIxMSwgJXJheAorCW1vdgklcmR4LCAlcjkKKwltdWwJJXJheAorCWFkZAkkNDAsICVyc3AKKwltb3YJJXJheCwgJXIxMAorCW1vdgklcjExLCAlcmF4CisJbW92CSVyZHgsICVyMTEKKwltdWwJJXI4CisJeG9yCSVyOCwgJXI4CisJYWRkCSVyYXgsICVyOQorCWFkYwklcmR4LCAlcjEwCisJYWRjCSVyOCwgJXIxMQorCWFkZAklcmF4LCAlcjkKKwltb3YJJXI5LCA4KHJwKQorCWFkYwklcmR4LCAlcjEwCisJbW92CSVyMTAsIDE2KHJwKQorCWFkYwklcjgsICVyMTEKKwltb3YJJXIxMSwgMjQocnApCisJRlVOQ19FWElUKCkKKwlyZXQKKworTCgzKToJbW92CSh1cCksICVyYXgKKwltb3YJJXJheCwgJXIxMAorCW11bAklcmF4CisJbW92CTgodXApLCAlcjExCisJbW92CSVyYXgsIChycCkKKwltb3YJJXIxMSwgJXJheAorCW1vdgklcmR4LCA4KHJwKQorCW11bAklcmF4CisJbW92CTE2KHVwKSwgJXJjeAorCW1vdgklcmF4LCAxNihycCkKKwltb3YJJXJjeCwgJXJheAorCW1vdgklcmR4LCAyNChycCkKKwltdWwJJXJheAorCW1vdgklcmF4LCAzMihycCkKKwltb3YJJXJkeCwgNDAocnApCisKKwltb3YJJXIxMSwgJXJheAorCW11bAklcjEwCisJbW92CSVyYXgsICVyOAorCW1vdgklcmN4LCAlcmF4CisJbW92CSVyZHgsICVyOQorCW11bAklcjEwCisJeG9yCSVyMTAsICVyMTAKKwlhZGQJJXJheCwgJXI5CisJbW92CSVyMTEsICVyYXgKKwltb3YJJXIxMCwgJXIxMQorCWFkYwklcmR4LCAlcjEwCisKKwltdWwJJXJjeAorCWFkZAkkNDAsICVyc3AKKwlhZGQJJXJheCwgJXIxMAorCWFkYwklcjExLCAlcmR4CisJYWRkCSVyOCwgJXI4CisJYWRjCSVyOSwgJXI5CisJYWRjCSVyMTAsICVyMTAKKwlhZGMJJXJkeCwgJXJkeAorCWFkYwklcjExLCAlcjExCisJYWRkCSVyOCwgOChycCkKKwlhZGMJJXI5LCAxNihycCkKKwlhZGMJJXIxMCwgMjQocnApCisJYWRjCSVyZHgsIDMyKHJwKQorCWFkYwklcjExLCA0MChycCkKKwlGVU5DX0VYSVQoKQorCXJldAorCitMKDQpOgltb3YJKHVwKSwgJXJheAorCW1vdgklcmF4LCAlcjExCisJbXVsCSVyYXgKKwltb3YJOCh1cCksICVyYngKKwltb3YJJXJheCwgKHJwKQorCW1vdgklcmJ4LCAlcmF4CisJbW92CSVyZHgsIDgocnApCisJbXVsCSVyYXgKKwltb3YJJXJheCwgMTYocnApCisJbW92CSVyZHgsIDI0KHJwKQorCW1vdgkxNih1cCksICVyYXgKKwltdWwJJXJheAorCW1vdgklcmF4LCAzMihycCkKKwltb3YJJXJkeCwgNDAocnApCisJbW92CTI0KHVwKSwgJXJheAorCW11bAklcmF4CisJbW92CSVyYXgsIDQ4KHJwKQorCW1vdgklcmJ4LCAlcmF4CisJbW92CSVyZHgsIDU2KHJwKQorCisJbXVsCSVyMTEKKwlhZGQJJDMyLCAlcnNwCisJbW92CSVyYXgsICVyOAorCW1vdgklcmR4LCAlcjkKKwltb3YJMTYodXApLCAlcmF4CisJbXVsCSVyMTEKKwl4b3IJJXIxMCwgJXIxMAorCWFkZAklcmF4LCAlcjkKKwlhZGMJJXJkeCwgJXIxMAorCW1vdgkyNCh1cCksICVyYXgKKwltdWwJJXIxMQorCXhvcgklcjExLCAlcjExCisJYWRkCSVyYXgsICVyMTAKKwlhZGMJJXJkeCwgJXIxMQorCW1vdgkxNih1cCksICVyYXgKKwltdWwJJXJieAorCXhvcgklcmN4LCAlcmN4CisJYWRkCSVyYXgsICVyMTAKKwlhZGMJJXJkeCwgJXIxMQorCWFkYwkkMCwgJXJjeAorCW1vdgkyNCh1cCksICVyYXgKKwltdWwJJXJieAorCXBvcAklcmJ4CisJYWRkCSVyYXgsICVyMTEKKwlhZGMJJXJkeCwgJXJjeAorCW1vdgkxNih1cCksICVyZHgKKwltb3YJMjQodXApLCAlcmF4CisJbXVsCSVyZHgKKwlhZGQJJXJheCwgJXJjeAorCWFkYwkkMCwgJXJkeAorCisJYWRkCSVyOCwgJXI4CisJYWRjCSVyOSwgJXI5CisJYWRjCSVyMTAsICVyMTAKKwlhZGMJJXIxMSwgJXIxMQorCWFkYwklcmN4LCAlcmN4CisJbW92CSQwLCBSMzIoJXJheCkKKwlhZGMJJXJkeCwgJXJkeAorCisJYWRjCSVyYXgsICVyYXgKKwlhZGQJJXI4LCA4KHJwKQorCWFkYwklcjksIDE2KHJwKQorCWFkYwklcjEwLCAyNChycCkKKwlhZGMJJXIxMSwgMzIocnApCisJYWRjCSVyY3gsIDQwKHJwKQorCWFkYwklcmR4LCA0OChycCkKKwlhZGMJJXJheCwgNTYocnApCisJRlVOQ19FWElUKCkKKwlyZXQKKworCitMKDBtNCk6CisJbGVhCS0xNihycCxuLDgpLCB0cAkJQyBwb2ludCB0cCBpbiBtaWRkbGUgb2YgcmVzdWx0IG9wZXJhbmQKKwltb3YJKHVwKSwgdjAKKwltb3YJOCh1cCksICVyYXgKKwlsZWEJKHVwLG4sOCksIHVwCQlDIHBvaW50IHVwIGF0IGVuZCBvZiBpbnB1dCBvcGVyYW5kCisKKwlsZWEJLTQobiksIGkKK0MgRnVuY3Rpb24gbXBuX211bF8xX20zKHRwLCB1cCAtIGksIGksIHVwWy1pIC0gMV0pCisJeG9yCVIzMihqKSwgUjMyKGopCisJc3ViCW4sIGoKKworCW11bAl2MAorCXhvcglSMzIodzIpLCBSMzIodzIpCisJbW92CSVyYXgsIHcwCisJbW92CTE2KHVwLGosOCksICVyYXgKKwltb3YJJXJkeCwgdzMKKwlqbXAJTChMMykKKworCUFMSUdOKDE2KQorTChtdWxfMV9tM190b3ApOgorCWFkZAklcmF4LCB3MgorCW1vdgl3MywgKHRwLGosOCkKKwltb3YJKHVwLGosOCksICVyYXgKKwlhZGMJJXJkeCwgdzEKKwl4b3IJUjMyKHcwKSwgUjMyKHcwKQorCW11bAl2MAorCXhvcglSMzIodzMpLCBSMzIodzMpCisJbW92CXcyLCA4KHRwLGosOCkKKwlhZGQJJXJheCwgdzEKKwlhZGMJJXJkeCwgdzAKKwltb3YJOCh1cCxqLDgpLCAlcmF4CisJbW92CXcxLCAxNih0cCxqLDgpCisJeG9yCVIzMih3MiksIFIzMih3MikKKwltdWwJdjAKKwlhZGQJJXJheCwgdzAKKwltb3YJMTYodXAsaiw4KSwgJXJheAorCWFkYwklcmR4LCB3MworTChMMyk6CXhvcglSMzIodzEpLCBSMzIodzEpCisJbXVsCXYwCisJYWRkCSVyYXgsIHczCisJbW92CTI0KHVwLGosOCksICVyYXgKKwlhZGMJJXJkeCwgdzIKKwltb3YJdzAsIDI0KHRwLGosOCkKKwltdWwJdjAKKwlhZGQJJDQsIGoKKwlqcwlMKG11bF8xX20zX3RvcCkKKworCWFkZAklcmF4LCB3MgorCW1vdgl3MywgKHRwKQorCWFkYwklcmR4LCB3MQorCW1vdgl3MiwgOCh0cCkKKwltb3YJdzEsIDE2KHRwKQorCisJbGVhCWV2YWwoMio4KSh0cCksIHRwCUMgdHAgKz0gMgorCWxlYQktOCh1cCksIHVwCisJam1wCUwoZG93aGlsZSkKKworCitMKDFtNCk6CisJbGVhCTgocnAsbiw4KSwgdHAJCUMgcG9pbnQgdHAgaW4gbWlkZGxlIG9mIHJlc3VsdCBvcGVyYW5kCisJbW92CSh1cCksIHYwCQlDIHUwCisJbW92CTgodXApLCAlcmF4CQlDIHUxCisJbGVhCTgodXAsbiw4KSwgdXAJCUMgcG9pbnQgdXAgYXQgZW5kIG9mIGlucHV0IG9wZXJhbmQKKworCWxlYQktMyhuKSwgaQorQyBGdW5jdGlvbiBtcG5fbXVsXzJzX20wKHRwLCB1cCAtIGksIGksIHVwIC0gaSAtIDEpCisJbGVhCS0zKG4pLCBqCisJbmVnCWoKKworCW1vdgklcmF4LCB2MQkJQyB1MQorCW11bAl2MAkJCUMgdTAgKiB1MQorCW1vdgklcmR4LCB3MQorCXhvcglSMzIodzIpLCBSMzIodzIpCisJbW92CSVyYXgsIDgocnApCisJam1wCUwobTApCisKKwlBTElHTigxNikKK0wobXVsXzJfbTBfdG9wKToKKwltdWwJdjEKKwlhZGQJJXJheCwgdzAKKwlhZGMJJXJkeCwgdzEKKwltb3YJLTI0KHVwLGosOCksICVyYXgKKwltb3YJJDAsIFIzMih3MikKKwltdWwJdjAKKwlhZGQJJXJheCwgdzAKKwltb3YJLTI0KHVwLGosOCksICVyYXgKKwlhZGMJJXJkeCwgdzEKKwlhZGMJJDAsIFIzMih3MikKKwltdWwJdjEJCQlDIHYxICogdTAKKwlhZGQJJXJheCwgdzEKKwltb3YJdzAsIC0yNCh0cCxqLDgpCisJYWRjCSVyZHgsIHcyCitMKG0wKToJbW92CS0xNih1cCxqLDgpLCAlcmF4CUMgdTIsIHU2IC4uLgorCW11bAl2MAkJCUMgdTAgKiB1MgorCW1vdgkkMCwgUjMyKHczKQorCWFkZAklcmF4LCB3MQorCWFkYwklcmR4LCB3MgorCW1vdgktMTYodXAsaiw4KSwgJXJheAorCWFkYwkkMCwgUjMyKHczKQorCW1vdgkkMCwgUjMyKHcwKQorCW1vdgl3MSwgLTE2KHRwLGosOCkKKwltdWwJdjEKKwlhZGQJJXJheCwgdzIKKwltb3YJLTgodXAsaiw4KSwgJXJheAorCWFkYwklcmR4LCB3MworCW1vdgkkMCwgUjMyKHcxKQorCW11bAl2MAorCWFkZAklcmF4LCB3MgorCW1vdgktOCh1cCxqLDgpLCAlcmF4CisJYWRjCSVyZHgsIHczCisJYWRjCSQwLCBSMzIodzApCisJbXVsCXYxCisJYWRkCSVyYXgsIHczCisJbW92CXcyLCAtOCh0cCxqLDgpCisJYWRjCSVyZHgsIHcwCitMKG0yeCk6CW1vdgkodXAsaiw4KSwgJXJheAorCW11bAl2MAorCWFkZAklcmF4LCB3MworCWFkYwklcmR4LCB3MAorCWFkYwkkMCwgUjMyKHcxKQorCWFkZAkkNCwgagorCW1vdgktMzIodXAsaiw4KSwgJXJheAorCW1vdgl3MywgLTMyKHRwLGosOCkKKwlqcwlMKG11bF8yX20wX3RvcCkKKworCW11bAl2MQorCWFkZAklcmF4LCB3MAorCWFkYwklcmR4LCB3MQorCW1vdgl3MCwgLTgodHApCisJbW92CXcxLCAodHApCisKKwlsZWEJLTE2KHVwKSwgdXAKKwlsZWEJZXZhbCgzKjgtMjQpKHRwKSwgdHAJQyB0cCArPSAzCisJam1wCUwoZG93aGlsZV9lbmQpCisKKworTCgybTQpOgorCWxlYQktMTYocnAsbiw4KSwgdHAJCUMgcG9pbnQgdHAgaW4gbWlkZGxlIG9mIHJlc3VsdCBvcGVyYW5kCisJbW92CSh1cCksIHYwCisJbW92CTgodXApLCAlcmF4CisJbGVhCSh1cCxuLDgpLCB1cAkJQyBwb2ludCB1cCBhdCBlbmQgb2YgaW5wdXQgb3BlcmFuZAorCisJbGVhCS00KG4pLCBpCitDIEZ1bmN0aW9uIG1wbl9tdWxfMV9tMSh0cCwgdXAgLSAoaSAtIDEpLCBpIC0gMSwgdXBbLWldKQorCWxlYQktMihuKSwgagorCW5lZwlqCisKKwltdWwJdjAKKwltb3YJJXJheCwgdzIKKwltb3YJKHVwLGosOCksICVyYXgKKwltb3YJJXJkeCwgdzEKKwlqbXAJTChMMSkKKworCUFMSUdOKDE2KQorTChtdWxfMV9tMV90b3ApOgorCWFkZAklcmF4LCB3MgorCW1vdgl3MywgKHRwLGosOCkKKwltb3YJKHVwLGosOCksICVyYXgKKwlhZGMJJXJkeCwgdzEKK0woTDEpOgl4b3IJUjMyKHcwKSwgUjMyKHcwKQorCW11bAl2MAorCXhvcglSMzIodzMpLCBSMzIodzMpCisJbW92CXcyLCA4KHRwLGosOCkKKwlhZGQJJXJheCwgdzEKKwlhZGMJJXJkeCwgdzAKKwltb3YJOCh1cCxqLDgpLCAlcmF4CisJbW92CXcxLCAxNih0cCxqLDgpCisJeG9yCVIzMih3MiksIFIzMih3MikKKwltdWwJdjAKKwlhZGQJJXJheCwgdzAKKwltb3YJMTYodXAsaiw4KSwgJXJheAorCWFkYwklcmR4LCB3MworCXhvcglSMzIodzEpLCBSMzIodzEpCisJbXVsCXYwCisJYWRkCSVyYXgsIHczCisJbW92CTI0KHVwLGosOCksICVyYXgKKwlhZGMJJXJkeCwgdzIKKwltb3YJdzAsIDI0KHRwLGosOCkKKwltdWwJdjAKKwlhZGQJJDQsIGoKKwlqcwlMKG11bF8xX20xX3RvcCkKKworCWFkZAklcmF4LCB3MgorCW1vdgl3MywgKHRwKQorCWFkYwklcmR4LCB3MQorCW1vdgl3MiwgOCh0cCkKKwltb3YJdzEsIDE2KHRwKQorCisJbGVhCWV2YWwoMio4KSh0cCksIHRwCUMgdHAgKz0gMgorCWxlYQktOCh1cCksIHVwCisJam1wCUwoZG93aGlsZV9taWQpCisKKworTCgzbTQpOgorCWxlYQk4KHJwLG4sOCksIHRwCQlDIHBvaW50IHRwIGluIG1pZGRsZSBvZiByZXN1bHQgb3BlcmFuZAorCW1vdgkodXApLCB2MAkJQyB1MAorCW1vdgk4KHVwKSwgJXJheAkJQyB1MQorCWxlYQk4KHVwLG4sOCksIHVwCQlDIHBvaW50IHVwIGF0IGVuZCBvZiBpbnB1dCBvcGVyYW5kCisKKwlsZWEJLTUobiksIGkKK0MgRnVuY3Rpb24gbXBuX211bF8yc19tMih0cCwgdXAgLSBpICsgMSwgaSAtIDEsIHVwIC0gaSkKKwlsZWEJLTEobiksIGoKKwluZWcJagorCisJbW92CSVyYXgsIHYxCQlDIHUxCisJbXVsCXYwCQkJQyB1MCAqIHUxCisJbW92CSVyZHgsIHczCisJeG9yCVIzMih3MCksIFIzMih3MCkKKwl4b3IJUjMyKHcxKSwgUjMyKHcxKQorCW1vdgklcmF4LCA4KHJwKQorCWptcAlMKG0yKQorCisJQUxJR04oMTYpCitMKG11bF8yX20yX3RvcCk6CisJbXVsCXYxCisJYWRkCSVyYXgsIHcwCisJYWRjCSVyZHgsIHcxCisJbW92CS0yNCh1cCxqLDgpLCAlcmF4CisJbW92CSQwLCBSMzIodzIpCisJbXVsCXYwCisJYWRkCSVyYXgsIHcwCisJbW92CS0yNCh1cCxqLDgpLCAlcmF4CisJYWRjCSVyZHgsIHcxCisJYWRjCSQwLCBSMzIodzIpCisJbXVsCXYxCQkJQyB2MSAqIHUwCisJYWRkCSVyYXgsIHcxCisJbW92CXcwLCAtMjQodHAsaiw4KQorCWFkYwklcmR4LCB3MgorCW1vdgktMTYodXAsaiw4KSwgJXJheAorCW11bAl2MAorCW1vdgkkMCwgUjMyKHczKQorCWFkZAklcmF4LCB3MQorCWFkYwklcmR4LCB3MgorCW1vdgktMTYodXAsaiw4KSwgJXJheAorCWFkYwkkMCwgUjMyKHczKQorCW1vdgkkMCwgUjMyKHcwKQorCW1vdgl3MSwgLTE2KHRwLGosOCkKKwltdWwJdjEKKwlhZGQJJXJheCwgdzIKKwltb3YJLTgodXAsaiw4KSwgJXJheAorCWFkYwklcmR4LCB3MworCW1vdgkkMCwgUjMyKHcxKQorCW11bAl2MAorCWFkZAklcmF4LCB3MgorCW1vdgktOCh1cCxqLDgpLCAlcmF4CisJYWRjCSVyZHgsIHczCisJYWRjCSQwLCBSMzIodzApCisJbXVsCXYxCisJYWRkCSVyYXgsIHczCisJbW92CXcyLCAtOCh0cCxqLDgpCisJYWRjCSVyZHgsIHcwCitMKG0yKToJbW92CSh1cCxqLDgpLCAlcmF4CisJbXVsCXYwCisJYWRkCSVyYXgsIHczCisJYWRjCSVyZHgsIHcwCisJYWRjCSQwLCBSMzIodzEpCisJYWRkCSQ0LCBqCisJbW92CS0zMih1cCxqLDgpLCAlcmF4CisJbW92CXczLCAtMzIodHAsaiw4KQorCWpzCUwobXVsXzJfbTJfdG9wKQorCisJbXVsCXYxCisJYWRkCSVyYXgsIHcwCisJYWRjCSVyZHgsIHcxCisJbW92CXcwLCAtOCh0cCkKKwltb3YJdzEsICh0cCkKKworCWxlYQktMTYodXApLCB1cAorCWptcAlMKGRvd2hpbGVfbWlkKQorCitMKGRvd2hpbGUpOgorQyBGdW5jdGlvbiBtcG5fYWRkbXVsXzJzX20yKHRwLCB1cCAtIChpIC0gMSksIGkgLSAxLCB1cCAtIGkpCisJbGVhCTQoaSksIGoKKwluZWcJagorCisJbW92CTE2KHVwLGosOCksIHYwCisJbW92CTI0KHVwLGosOCksIHYxCisJbW92CTI0KHVwLGosOCksICVyYXgKKwltdWwJdjAKKwl4b3IJUjMyKHczKSwgUjMyKHczKQorCWFkZAklcmF4LCAyNCh0cCxqLDgpCisJYWRjCSVyZHgsIHczCisJeG9yCVIzMih3MCksIFIzMih3MCkKKwl4b3IJUjMyKHcxKSwgUjMyKHcxKQorCWptcAlMKGFtMikKKworCUFMSUdOKDE2KQorTChhZGRtdWxfMl9tMl90b3ApOgorCWFkZAl3MywgKHRwLGosOCkKKwlhZGMJJXJheCwgdzAKKwltb3YJOCh1cCxqLDgpLCAlcmF4CisJYWRjCSVyZHgsIHcxCisJbW92CSQwLCBSMzIodzIpCisJbXVsCXYwCisJYWRkCSVyYXgsIHcwCisJbW92CTgodXAsaiw4KSwgJXJheAorCWFkYwklcmR4LCB3MQorCWFkYwkkMCwgUjMyKHcyKQorCW11bAl2MQkJCQlDIHYxICogdTAKKwlhZGQJdzAsIDgodHAsaiw4KQorCWFkYwklcmF4LCB3MQorCWFkYwklcmR4LCB3MgorCW1vdgkxNih1cCxqLDgpLCAlcmF4CisJbW92CSQwLCBSMzIodzMpCisJbXVsCXYwCQkJCUMgdjAgKiB1MQorCWFkZAklcmF4LCB3MQorCW1vdgkxNih1cCxqLDgpLCAlcmF4CisJYWRjCSVyZHgsIHcyCisJYWRjCSQwLCBSMzIodzMpCisJbXVsCXYxCQkJCUMgdjEgKiB1MQorCWFkZAl3MSwgMTYodHAsaiw4KQorCWFkYwklcmF4LCB3MgorCW1vdgkyNCh1cCxqLDgpLCAlcmF4CisJYWRjCSVyZHgsIHczCisJbXVsCXYwCisJbW92CSQwLCBSMzIodzApCisJYWRkCSVyYXgsIHcyCisJYWRjCSVyZHgsIHczCisJbW92CSQwLCBSMzIodzEpCisJbW92CTI0KHVwLGosOCksICVyYXgKKwlhZGMJJDAsIFIzMih3MCkKKwltdWwJdjEKKwlhZGQJdzIsIDI0KHRwLGosOCkKKwlhZGMJJXJheCwgdzMKKwlhZGMJJXJkeCwgdzAKK0woYW0yKToJbW92CTMyKHVwLGosOCksICVyYXgKKwltdWwJdjAKKwlhZGQJJXJheCwgdzMKKwltb3YJMzIodXAsaiw4KSwgJXJheAorCWFkYwklcmR4LCB3MAorCWFkYwkkMCwgUjMyKHcxKQorCW11bAl2MQorCWFkZAkkNCwgagorCWpzCUwoYWRkbXVsXzJfbTJfdG9wKQorCisJYWRkCXczLCAodHApCisJYWRjCSVyYXgsIHcwCisJYWRjCSVyZHgsIHcxCisJbW92CXcwLCA4KHRwKQorCW1vdgl3MSwgMTYodHApCisKKwlsZWEJZXZhbCgyKjgpKHRwKSwgdHAJQyB0cCArPSAyCisKKwlhZGQJJC0yLCBSMzIoaSkJCUMgaSAtPSAyCisKK0woZG93aGlsZV9taWQpOgorQyBGdW5jdGlvbiBtcG5fYWRkbXVsXzJzX20wKHRwLCB1cCAtIChpIC0gMSksIGkgLSAxLCB1cCAtIGkpCisJbGVhCTIoaSksIGoKKwluZWcJagorCisJbW92CSh1cCxqLDgpLCB2MAorCW1vdgk4KHVwLGosOCksIHYxCisJbW92CTgodXAsaiw4KSwgJXJheAorCW11bAl2MAorCXhvcglSMzIodzEpLCBSMzIodzEpCisJYWRkCSVyYXgsIDgodHAsaiw4KQorCWFkYwklcmR4LCB3MQorCXhvcglSMzIodzIpLCBSMzIodzIpCisJam1wCUwoMjApCisKKwlBTElHTigxNikKK0woYWRkbXVsXzJfbTBfdG9wKToKKwlhZGQJdzMsICh0cCxqLDgpCisJYWRjCSVyYXgsIHcwCisJbW92CTgodXAsaiw4KSwgJXJheAorCWFkYwklcmR4LCB3MQorCW1vdgkkMCwgUjMyKHcyKQorCW11bAl2MAorCWFkZAklcmF4LCB3MAorCW1vdgk4KHVwLGosOCksICVyYXgKKwlhZGMJJXJkeCwgdzEKKwlhZGMJJDAsIFIzMih3MikKKwltdWwJdjEJCQkJQyB2MSAqIHUwCisJYWRkCXcwLCA4KHRwLGosOCkKKwlhZGMJJXJheCwgdzEKKwlhZGMJJXJkeCwgdzIKK0woMjApOgltb3YJMTYodXAsaiw4KSwgJXJheAorCW1vdgkkMCwgUjMyKHczKQorCW11bAl2MAkJCQlDIHYwICogdTEKKwlhZGQJJXJheCwgdzEKKwltb3YJMTYodXAsaiw4KSwgJXJheAorCWFkYwklcmR4LCB3MgorCWFkYwkkMCwgUjMyKHczKQorCW11bAl2MQkJCQlDIHYxICogdTEKKwlhZGQJdzEsIDE2KHRwLGosOCkKKwlhZGMJJXJheCwgdzIKKwltb3YJMjQodXAsaiw4KSwgJXJheAorCWFkYwklcmR4LCB3MworCW11bAl2MAorCW1vdgkkMCwgUjMyKHcwKQorCWFkZAklcmF4LCB3MgorCWFkYwklcmR4LCB3MworCW1vdgkkMCwgUjMyKHcxKQorCW1vdgkyNCh1cCxqLDgpLCAlcmF4CisJYWRjCSQwLCBSMzIodzApCisJbXVsCXYxCisJYWRkCXcyLCAyNCh0cCxqLDgpCisJYWRjCSVyYXgsIHczCisJYWRjCSVyZHgsIHcwCisJbW92CTMyKHVwLGosOCksICVyYXgKKwltdWwJdjAKKwlhZGQJJXJheCwgdzMKKwltb3YJMzIodXAsaiw4KSwgJXJheAorCWFkYwklcmR4LCB3MAorCWFkYwkkMCwgUjMyKHcxKQorCW11bAl2MQorCWFkZAkkNCwgagorCWpzCUwoYWRkbXVsXzJfbTBfdG9wKQorCisJYWRkCXczLCAodHApCisJYWRjCSVyYXgsIHcwCisJYWRjCSVyZHgsIHcxCisJbW92CXcwLCA4KHRwKQorCW1vdgl3MSwgMTYodHApCisKKwlsZWEJZXZhbCgyKjgpKHRwKSwgdHAJQyB0cCArPSAyCitMKGRvd2hpbGVfZW5kKToKKworCWFkZAkkLTIsIFIzMihpKQkJQyBpIC09IDIKKwlqbmUJTChkb3doaWxlKQorCitDIEZ1bmN0aW9uIG1wbl9hZGRtdWxfMnNfMgorCW1vdgktMTYodXApLCB2MAorCW1vdgktOCh1cCksIHYxCisJbW92CS04KHVwKSwgJXJheAorCW11bAl2MAorCXhvcglSMzIodzMpLCBSMzIodzMpCisJYWRkCSVyYXgsIC04KHRwKQorCWFkYwklcmR4LCB3MworCXhvcglSMzIodzApLCBSMzIodzApCisJeG9yCVIzMih3MSksIFIzMih3MSkKKwltb3YJKHVwKSwgJXJheAorCW11bAl2MAorCWFkZAklcmF4LCB3MworCW1vdgkodXApLCAlcmF4CisJYWRjCSVyZHgsIHcwCisJbXVsCXYxCisJYWRkCXczLCAodHApCisJYWRjCSVyYXgsIHcwCisJYWRjCSVyZHgsIHcxCisJbW92CXcwLCA4KHRwKQorCW1vdgl3MSwgMTYodHApCisKK0MgRnVuY3Rpb24gbXBuX3Nxcl9kaWFnX2FkZGxzaDEKKwlsZWEJLTQobixuKSwgagorCisJbW92CTgocnApLCAlcjExCisJbGVhCS04KHVwKSwgdXAKKwlsZWEJKHJwLGosOCksIHJwCisJbmVnCWoKKwltb3YJKHVwLGosNCksICVyYXgKKwltdWwJJXJheAorCXRlc3QJJDIsIFI4KGopCisJam56CUwob2RkKQorCitMKGV2bik6CWFkZAklcjExLCAlcjExCisJc2JiCVIzMiglcmJ4KSwgUjMyKCVyYngpCQlDIHNhdmUgQ0YKKwlhZGQJJXJkeCwgJXIxMQorCW1vdgklcmF4LCAocnAsaiw4KQorCWptcAlMKGQwKQorCitMKG9kZCk6CWFkZAklcjExLCAlcjExCisJc2JiCVIzMiglcmJwKSwgUjMyKCVyYnApCQlDIHNhdmUgQ0YKKwlhZGQJJXJkeCwgJXIxMQorCW1vdgklcmF4LCAocnAsaiw4KQorCWxlYQktMihqKSwgagorCWptcAlMKGQxKQorCisJQUxJR04oMTYpCitMKHRvcCk6CW1vdgkodXAsaiw0KSwgJXJheAorCW11bAklcmF4CisJYWRkCVIzMiglcmJwKSwgUjMyKCVyYnApCQlDIHJlc3RvcmUgY2FycnkKKwlhZGMJJXJheCwgJXIxMAorCWFkYwklcmR4LCAlcjExCisJbW92CSVyMTAsIChycCxqLDgpCitMKGQwKToJbW92CSVyMTEsIDgocnAsaiw4KQorCW1vdgkxNihycCxqLDgpLCAlcjEwCisJYWRjCSVyMTAsICVyMTAKKwltb3YJMjQocnAsaiw4KSwgJXIxMQorCWFkYwklcjExLCAlcjExCisJbm9wCisJc2JiCVIzMiglcmJwKSwgUjMyKCVyYnApCQlDIHNhdmUgQ0YKKwltb3YJOCh1cCxqLDQpLCAlcmF4CisJbXVsCSVyYXgKKwlhZGQJUjMyKCVyYngpLCBSMzIoJXJieCkJCUMgcmVzdG9yZSBjYXJyeQorCWFkYwklcmF4LCAlcjEwCisJYWRjCSVyZHgsICVyMTEKKwltb3YJJXIxMCwgMTYocnAsaiw4KQorTChkMSk6CW1vdgklcjExLCAyNChycCxqLDgpCisJbW92CTMyKHJwLGosOCksICVyMTAKKwlhZGMJJXIxMCwgJXIxMAorCW1vdgk0MChycCxqLDgpLCAlcjExCisJYWRjCSVyMTEsICVyMTEKKwlzYmIJUjMyKCVyYngpLCBSMzIoJXJieCkJCUMgc2F2ZSBDRgorCWFkZAkkNCwgagorCWpzCUwodG9wKQorCisJbW92CSh1cCksICVyYXgKKwltdWwJJXJheAorCWFkZAlSMzIoJXJicCksIFIzMiglcmJwKQkJQyByZXN0b3JlIGNhcnJ5CisJYWRjCSVyYXgsICVyMTAKKwlhZGMJJXJkeCwgJXIxMQorCW1vdgklcjEwLCAocnApCisJbW92CSVyMTEsIDgocnApCisJbW92CTE2KHJwKSwgJXIxMAorCWFkYwklcjEwLCAlcjEwCisJc2JiCVIzMiglcmJwKSwgUjMyKCVyYnApCQlDIHNhdmUgQ0YKKwluZWcJUjMyKCVyYnApCisJbW92CTgodXApLCAlcmF4CisJbXVsCSVyYXgKKwlhZGQJUjMyKCVyYngpLCBSMzIoJXJieCkJCUMgcmVzdG9yZSBjYXJyeQorCWFkYwklcmF4LCAlcjEwCisJYWRjCSVyYnAsICVyZHgKKwltb3YJJXIxMCwgMTYocnApCisJbW92CSVyZHgsIDI0KHJwKQorCisJcG9wCSVyMTQKKwlwb3AJJXIxMworCXBvcAklcjEyCisJcG9wCSVyYnAKKwlwb3AJJXJieAorCUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9sb2dvcHNfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9sb2dvcHNfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI1ODU0ZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2xvZ29wc19uLmFzbQpAQCAtMCwwICsxLDI2MCBAQAorZG5sICBBTUQ2NCBsb2dvcHMuCisKK2RubCAgQ29weXJpZ2h0IDIwMDQtMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MJCWMvbAljL2wJYy9sCWdvb2QKK0MJICAgICAgIHZhci0xICAgdmFyLTIgICB2YXItMyAgZm9yIGNwdT8KK0MgQU1EIEs4LEs5CSAxLjUJIDEuNQkgMS41CSB5CitDIEFNRCBLMTAJIDEuNQkgMS41CSAxLjUJIHkKK0MgQU1EIGJkMQorQyBBTUQgYmQyCitDIEFNRCBiZDMKK0MgQU1EIGJkNAorQyBBTUQgYnQxCSAyLjY3CX4yLjc5CX4yLjY3CitDIEFNRCBidDIJIDIuMAkgMi4yOAkgMi4yOAkgeQorQyBBTUQgemVuCSAxLjUJIDEuNQkgMS41CSA9CitDIEludGVsIFA0CSAyLjgJIDMuMzUJIDMuNgorQyBJbnRlbCBQTlIJIDIuMAkgMi4wCSAyLjAJID0KK0MgSW50ZWwgTkhNCSAyLjAJIDIuMAkgMi4wCSA9CitDIEludGVsIFNCUgkgMS41CSAxLjc1CSAxLjc1CSBuCitDIEludGVsIElCUgkgMS40OAkgMS43MQkgMS43MgkgbgorQyBJbnRlbCBIV0wJIDEuNQkgMS41CSAxLjUJIG4KK0MgSW50ZWwgQldMCSAxLjUJIDEuNQkgMS41CSBuCitDIEludGVsIFNLTAkgMS41CSAxLjUJIDEuNQkgbgorQyBJbnRlbCBhdG9tCSAzLjgyCSAzLjgyCSAzLjgyCSBuCitDIEludGVsIFNMTQkgMy4wCSAzLjAJIDMuMAkgPQorQyBWSUEgbmFubwkgMy4yNQorCitpZmRlZihgT1BFUkFUSU9OX2FuZF9uJyxgCisgIGRlZmluZShgZnVuYycsYG1wbl9hbmRfbicpCisgIGRlZmluZShgVkFSSUFOVF8xJykKKyAgZGVmaW5lKGBMT0dPUCcsYGFuZCcpJykKK2lmZGVmKGBPUEVSQVRJT05fYW5kbl9uJyxgCisgIGRlZmluZShgZnVuYycsYG1wbl9hbmRuX24nKQorICBkZWZpbmUoYFZBUklBTlRfMicpCisgIGRlZmluZShgTE9HT1AnLGBhbmQnKScpCitpZmRlZihgT1BFUkFUSU9OX25hbmRfbicsYAorICBkZWZpbmUoYGZ1bmMnLGBtcG5fbmFuZF9uJykKKyAgZGVmaW5lKGBWQVJJQU5UXzMnKQorICBkZWZpbmUoYExPR09QJyxgYW5kJyknKQoraWZkZWYoYE9QRVJBVElPTl9pb3JfbicsYAorICBkZWZpbmUoYGZ1bmMnLGBtcG5faW9yX24nKQorICBkZWZpbmUoYFZBUklBTlRfMScpCisgIGRlZmluZShgTE9HT1AnLGBvcicpJykKK2lmZGVmKGBPUEVSQVRJT05faW9ybl9uJyxgCisgIGRlZmluZShgZnVuYycsYG1wbl9pb3JuX24nKQorICBkZWZpbmUoYFZBUklBTlRfMicpCisgIGRlZmluZShgTE9HT1AnLGBvcicpJykKK2lmZGVmKGBPUEVSQVRJT05fbmlvcl9uJyxgCisgIGRlZmluZShgZnVuYycsYG1wbl9uaW9yX24nKQorICBkZWZpbmUoYFZBUklBTlRfMycpCisgIGRlZmluZShgTE9HT1AnLGBvcicpJykKK2lmZGVmKGBPUEVSQVRJT05feG9yX24nLGAKKyAgZGVmaW5lKGBmdW5jJyxgbXBuX3hvcl9uJykKKyAgZGVmaW5lKGBWQVJJQU5UXzEnKQorICBkZWZpbmUoYExPR09QJyxgeG9yJyknKQoraWZkZWYoYE9QRVJBVElPTl94bm9yX24nLGAKKyAgZGVmaW5lKGBmdW5jJyxgbXBuX3hub3JfbicpCisgIGRlZmluZShgVkFSSUFOVF8yJykKKyAgZGVmaW5lKGBMT0dPUCcsYHhvcicpJykKKworCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hbmRfbiBtcG5fYW5kbl9uIG1wbl9uYW5kX24gbXBuX2lvcl9uIG1wbl9pb3JuX24gbXBuX25pb3JfbiBtcG5feG9yX24gbXBuX3hub3JfbikKKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJyxgJXJkaScpCitkZWZpbmUoYHVwJyxgJXJzaScpCitkZWZpbmUoYHZwJyxgJXJkeCcpCitkZWZpbmUoYG4nLGAlcmN4JykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworQVNNX1NUQVJUKCkKKworaWZkZWYoYFZBUklBTlRfMScsYAorCVRFWFQKKwlBTElHTigzMikKK1BST0xPR1VFKGZ1bmMpCisJRlVOQ19FTlRSWSg0KQorCW1vdgkodnApLCAlcjgKKwltb3YJUjMyKCVyY3gpLCBSMzIoJXJheCkKKwlsZWEJKHZwLG4sOCksIHZwCisJbGVhCSh1cCxuLDgpLCB1cAorCWxlYQkocnAsbiw4KSwgcnAKKwluZWcJbgorCWFuZAkkMywgUjMyKCVyYXgpCisJamUJTChiMDApCisJY21wCSQyLCBSMzIoJXJheCkKKwlqYwlMKGIwMSkKKwlqZQlMKGIxMCkKKworTChiMTEpOglMT0dPUAkodXAsbiw4KSwgJXI4CisJbW92CSVyOCwgKHJwLG4sOCkKKwlkZWMJbgorCWptcAlMKGUxMSkKK0woYjEwKToJYWRkCSQtMiwgbgorCWptcAlMKGUxMCkKK0woYjAxKToJTE9HT1AJKHVwLG4sOCksICVyOAorCW1vdgklcjgsIChycCxuLDgpCisJaW5jCW4KKwlqeglMKHJldCkKKworTCh0b3ApOgltb3YJKHZwLG4sOCksICVyOAorTChiMDApOgltb3YJOCh2cCxuLDgpLCAlcjkKKwlMT0dPUAkodXAsbiw4KSwgJXI4CisJTE9HT1AJOCh1cCxuLDgpLCAlcjkKKwlub3AJCQkJQyBLOC9LOS9LMTAgY29uY2Vzc2lvbgorCW1vdgklcjgsIChycCxuLDgpCisJbW92CSVyOSwgOChycCxuLDgpCitMKGUxMSk6CW1vdgkxNih2cCxuLDgpLCAlcjgKK0woZTEwKToJbW92CTI0KHZwLG4sOCksICVyOQorCUxPR09QCTE2KHVwLG4sOCksICVyOAorCUxPR09QCTI0KHVwLG4sOCksICVyOQorCW1vdgklcjgsIDE2KHJwLG4sOCkKKwltb3YJJXI5LCAyNChycCxuLDgpCisJYWRkCSQ0LCBuCisJam5jCUwodG9wKQorCitMKHJldCk6CUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCisnKQorCitpZmRlZihgVkFSSUFOVF8yJyxgCisJVEVYVAorCUFMSUdOKDMyKQorUFJPTE9HVUUoZnVuYykKKwlGVU5DX0VOVFJZKDQpCisJbW92CSh2cCksICVyOAorCW5vdAklcjgKKwltb3YJUjMyKCVyY3gpLCBSMzIoJXJheCkKKwlsZWEJKHZwLG4sOCksIHZwCisJbGVhCSh1cCxuLDgpLCB1cAorCWxlYQkocnAsbiw4KSwgcnAKKwluZWcJbgorCWFuZAkkMywgUjMyKCVyYXgpCisJamUJTChiMDApCisJY21wCSQyLCBSMzIoJXJheCkKKwlqYwlMKGIwMSkKKwlqZQlMKGIxMCkKKworTChiMTEpOglMT0dPUAkodXAsbiw4KSwgJXI4CisJbW92CSVyOCwgKHJwLG4sOCkKKwlkZWMJbgorCWptcAlMKGUxMSkKK0woYjEwKToJYWRkCSQtMiwgbgorCWptcAlMKGUxMCkKKwkuYnl0ZQkweDkwLDB4OTAsMHg5MCwweDkwLDB4OTAsMHg5MCwweDkwLDB4OTAsMHg5MCwweDkwLDB4OTAsMHg5MCwweDkwCitMKGIwMSk6CUxPR09QCSh1cCxuLDgpLCAlcjgKKwltb3YJJXI4LCAocnAsbiw4KQorCWluYwluCisJanoJTChyZXQpCisKK0wodG9wKToJbW92CSh2cCxuLDgpLCAlcjgKKwlub3QJJXI4CitMKGIwMCk6CW1vdgk4KHZwLG4sOCksICVyOQorCW5vdAklcjkKKwlMT0dPUAkodXAsbiw4KSwgJXI4CisJTE9HT1AJOCh1cCxuLDgpLCAlcjkKKwltb3YJJXI4LCAocnAsbiw4KQorCW1vdgklcjksIDgocnAsbiw4KQorTChlMTEpOgltb3YJMTYodnAsbiw4KSwgJXI4CisJbm90CSVyOAorTChlMTApOgltb3YJMjQodnAsbiw4KSwgJXI5CisJbm90CSVyOQorCUxPR09QCTE2KHVwLG4sOCksICVyOAorCUxPR09QCTI0KHVwLG4sOCksICVyOQorCW1vdgklcjgsIDE2KHJwLG4sOCkKKwltb3YJJXI5LCAyNChycCxuLDgpCisJYWRkCSQ0LCBuCisJam5jCUwodG9wKQorCitMKHJldCk6CUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCisnKQorCitpZmRlZihgVkFSSUFOVF8zJyxgCisJVEVYVAorCUFMSUdOKDMyKQorUFJPTE9HVUUoZnVuYykKKwlGVU5DX0VOVFJZKDQpCisJbW92CSh2cCksICVyOAorCW1vdglSMzIoJXJjeCksIFIzMiglcmF4KQorCWxlYQkodnAsbiw4KSwgdnAKKwlsZWEJKHVwLG4sOCksIHVwCisJbGVhCShycCxuLDgpLCBycAorCW5lZwluCisJYW5kCSQzLCBSMzIoJXJheCkKKwlqZQlMKGIwMCkKKwljbXAJJDIsIFIzMiglcmF4KQorCWpjCUwoYjAxKQorCWplCUwoYjEwKQorCitMKGIxMSk6CUxPR09QCSh1cCxuLDgpLCAlcjgKKwlub3QJJXI4CisJbW92CSVyOCwgKHJwLG4sOCkKKwlkZWMJbgorCWptcAlMKGUxMSkKK0woYjEwKToJYWRkCSQtMiwgbgorCWptcAlMKGUxMCkKKwkuYnl0ZQkweDkwLDB4OTAsMHg5MCwweDkwLDB4OTAsMHg5MCwweDkwLDB4OTAsMHg5MCwweDkwCitMKGIwMSk6CUxPR09QCSh1cCxuLDgpLCAlcjgKKwlub3QJJXI4CisJbW92CSVyOCwgKHJwLG4sOCkKKwlpbmMJbgorCWp6CUwocmV0KQorCitMKHRvcCk6CW1vdgkodnAsbiw4KSwgJXI4CitMKGIwMCk6CW1vdgk4KHZwLG4sOCksICVyOQorCUxPR09QCSh1cCxuLDgpLCAlcjgKKwlub3QJJXI4CisJTE9HT1AJOCh1cCxuLDgpLCAlcjkKKwlub3QJJXI5CisJbW92CSVyOCwgKHJwLG4sOCkKKwltb3YJJXI5LCA4KHJwLG4sOCkKK0woZTExKToJbW92CTE2KHZwLG4sOCksICVyOAorTChlMTApOgltb3YJMjQodnAsbiw4KSwgJXI5CisJTE9HT1AJMTYodXAsbiw4KSwgJXI4CisJbm90CSVyOAorCUxPR09QCTI0KHVwLG4sOCksICVyOQorCW5vdAklcjkKKwltb3YJJXI4LCAxNihycCxuLDgpCisJbW92CSVyOSwgMjQocnAsbiw4KQorCWFkZAkkNCwgbgorCWpuYwlMKHRvcCkKKworTChyZXQpOglGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQorJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2xzaGlmdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9sc2hpZnQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZjMxNTIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9sc2hpZnQuYXNtCkBAIC0wLDAgKzEsMTcyIEBACitkbmwgIEFNRDY0IG1wbl9sc2hpZnQgLS0gbXBuIGxlZnQgc2hpZnQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDMsIDIwMDUsIDIwMDcsIDIwMDksIDIwMTEsIDIwMTIsIDIwMTggRnJlZSBTb2Z0d2FyZQorZG5sICBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDCSAgICAgY3ljbGVzL2xpbWIgICBjeWNsZXMvbGltYiBjbnQ9MQorQyBBTUQgSzgsSzkJIDIuMzc1CQkgMS4zNzUKK0MgQU1EIEsxMAkgMi4zNzUJCSAxLjM3NQorQyBJbnRlbCBQNAkgOAkJMTAuNQorQyBJbnRlbCBjb3JlMgkgMi4xMQkJIDQuMjgKK0MgSW50ZWwgY29yZWkJID8JCSA/CitDIEludGVsIGF0b20JIDUuNzUJCSAzLjUKK0MgVklBIG5hbm8JIDMuNQkJIDIuMjUKKworCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLAlgJXJkaScpCitkZWZpbmUoYHVwJywJYCVyc2knKQorZGVmaW5lKGBuJywJYCVyZHgnKQorZGVmaW5lKGBjbnQnLAlgJXJjeCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDMyKQorUFJPTE9HVUUobXBuX2xzaGlmdCkKKwlGVU5DX0VOVFJZKDQpCisJbmVnCVIzMiglcmN4KQkJQyBwdXQgcnNoIGNvdW50IGluIGNsCisJbW92CS04KHVwLG4sOCksICVyYXgKKwlzaHIJUjgoJXJjeCksICVyYXgJCUMgZnVuY3Rpb24gcmV0dXJuIHZhbHVlCisKKwluZWcJUjMyKCVyY3gpCQlDIHB1dCBsc2ggY291bnQgaW4gY2wKKwlsZWEJMShuKSwgUjMyKCVyOCkKKwlhbmQJJDMsIFIzMiglcjgpCisJamUJTChybHgpCQkJQyBqdW1wIGZvciBuID0gMywgNywgMTEsIC4uLgorCisJZGVjCVIzMiglcjgpCisJam5lCUwoMSkKK0MJbiA9IDQsIDgsIDEyLCAuLi4KKwltb3YJLTgodXAsbiw4KSwgJXIxMAorCXNobAlSOCglcmN4KSwgJXIxMAorCW5lZwlSMzIoJXJjeCkJCUMgcHV0IHJzaCBjb3VudCBpbiBjbAorCW1vdgktMTYodXAsbiw4KSwgJXI4CisJc2hyCVI4KCVyY3gpLCAlcjgKKwlvcgklcjgsICVyMTAKKwltb3YJJXIxMCwgLTgocnAsbiw4KQorCWRlYwluCisJam1wCUwocmxsKQorCitMKDEpOglkZWMJUjMyKCVyOCkKKwlqZQlMKDF4KQkJCUMganVtcCBmb3IgbiA9IDEsIDUsIDksIDEzLCAuLi4KK0MJbiA9IDIsIDYsIDEwLCAxNiwgLi4uCisJbW92CS04KHVwLG4sOCksICVyMTAKKwlzaGwJUjgoJXJjeCksICVyMTAKKwluZWcJUjMyKCVyY3gpCQlDIHB1dCByc2ggY291bnQgaW4gY2wKKwltb3YJLTE2KHVwLG4sOCksICVyOAorCXNocglSOCglcmN4KSwgJXI4CisJb3IJJXI4LCAlcjEwCisJbW92CSVyMTAsIC04KHJwLG4sOCkKKwlkZWMJbgorCW5lZwlSMzIoJXJjeCkJCUMgcHV0IGxzaCBjb3VudCBpbiBjbAorTCgxeCk6CisJY21wCSQxLCBuCisJamUJTChhc3QpCisJbW92CS04KHVwLG4sOCksICVyMTAKKwlzaGwJUjgoJXJjeCksICVyMTAKKwltb3YJLTE2KHVwLG4sOCksICVyMTEKKwlzaGwJUjgoJXJjeCksICVyMTEKKwluZWcJUjMyKCVyY3gpCQlDIHB1dCByc2ggY291bnQgaW4gY2wKKwltb3YJLTE2KHVwLG4sOCksICVyOAorCW1vdgktMjQodXAsbiw4KSwgJXI5CisJc2hyCVI4KCVyY3gpLCAlcjgKKwlvcgklcjgsICVyMTAKKwlzaHIJUjgoJXJjeCksICVyOQorCW9yCSVyOSwgJXIxMQorCW1vdgklcjEwLCAtOChycCxuLDgpCisJbW92CSVyMTEsIC0xNihycCxuLDgpCisJc3ViCSQyLCBuCisKK0wocmxsKToJbmVnCVIzMiglcmN4KQkJQyBwdXQgbHNoIGNvdW50IGluIGNsCitMKHJseCk6CW1vdgktOCh1cCxuLDgpLCAlcjEwCisJc2hsCVI4KCVyY3gpLCAlcjEwCisJbW92CS0xNih1cCxuLDgpLCAlcjExCisJc2hsCVI4KCVyY3gpLCAlcjExCisKKwlzdWIJJDQsIG4JCQlDCQkJCSAgICAgIDQKKwlqYglMKGVuZCkJCQlDCQkJCSAgICAgIDIKKwlBTElHTigxNikKK0wodG9wKToKKwlDIGZpbmlzaCBzdHVmZiBmcm9tIGxzaCBibG9jaworCW5lZwlSMzIoJXJjeCkJCUMgcHV0IHJzaCBjb3VudCBpbiBjbAorCW1vdgkxNih1cCxuLDgpLCAlcjgKKwltb3YJOCh1cCxuLDgpLCAlcjkKKwlzaHIJUjgoJXJjeCksICVyOAorCW9yCSVyOCwgJXIxMAorCXNocglSOCglcmN4KSwgJXI5CisJb3IJJXI5LCAlcjExCisJbW92CSVyMTAsIDI0KHJwLG4sOCkKKwltb3YJJXIxMSwgMTYocnAsbiw4KQorCUMgc3RhcnQgdHdvIG5ldyByc2gKKwltb3YJMCh1cCxuLDgpLCAlcjgKKwltb3YJLTgodXAsbiw4KSwgJXI5CisJc2hyCVI4KCVyY3gpLCAlcjgKKwlzaHIJUjgoJXJjeCksICVyOQorCisJQyBmaW5pc2ggc3R1ZmYgZnJvbSByc2ggYmxvY2sKKwluZWcJUjMyKCVyY3gpCQlDIHB1dCBsc2ggY291bnQgaW4gY2wKKwltb3YJOCh1cCxuLDgpLCAlcjEwCisJbW92CTAodXAsbiw4KSwgJXIxMQorCXNobAlSOCglcmN4KSwgJXIxMAorCW9yCSVyMTAsICVyOAorCXNobAlSOCglcmN4KSwgJXIxMQorCW9yCSVyMTEsICVyOQorCW1vdgklcjgsIDgocnAsbiw4KQorCW1vdgklcjksIDAocnAsbiw4KQorCUMgc3RhcnQgdHdvIG5ldyBsc2gKKwltb3YJLTgodXAsbiw4KSwgJXIxMAorCW1vdgktMTYodXAsbiw4KSwgJXIxMQorCXNobAlSOCglcmN4KSwgJXIxMAorCXNobAlSOCglcmN4KSwgJXIxMQorCisJc3ViCSQ0LCBuCisJamFlCUwodG9wKQkJCUMJCQkJICAgICAgMgorTChlbmQpOgorCW5lZwlSMzIoJXJjeCkJCUMgcHV0IHJzaCBjb3VudCBpbiBjbAorCW1vdgk4KHVwKSwgJXI4CisJc2hyCVI4KCVyY3gpLCAlcjgKKwlvcgklcjgsICVyMTAKKwltb3YJKHVwKSwgJXI5CisJc2hyCVI4KCVyY3gpLCAlcjkKKwlvcgklcjksICVyMTEKKwltb3YJJXIxMCwgMTYocnApCisJbW92CSVyMTEsIDgocnApCisKKwluZWcJUjMyKCVyY3gpCQlDIHB1dCBsc2ggY291bnQgaW4gY2wKK0woYXN0KToJbW92CSh1cCksICVyMTAKKwlzaGwJUjgoJXJjeCksICVyMTAKKwltb3YJJXIxMCwgKHJwKQorCUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9sc2hpZnRjLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2xzaGlmdGMuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YmEwNGEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9sc2hpZnRjLmFzbQpAQCAtMCwwICsxLDE4MiBAQAorZG5sICBBTUQ2NCBtcG5fbHNoaWZ0YyAtLSBtcG4gbGVmdCBzaGlmdCB3aXRoIGNvbXBsZW1lbnQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDMsIDIwMDUsIDIwMDYsIDIwMDksIDIwMTEsIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDCSAgICAgY3ljbGVzL2xpbWIKK0MgQU1EIEs4LEs5CSAyLjc1CitDIEFNRCBLMTAJIDIuNzUKK0MgSW50ZWwgUDQJID8KK0MgSW50ZWwgY29yZTIJID8KK0MgSW50ZWwgY29yZWkJID8KK0MgSW50ZWwgYXRvbQkgPworQyBWSUEgbmFubwkgMy43NQorCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsCWAlcmRpJykKK2RlZmluZShgdXAnLAlgJXJzaScpCitkZWZpbmUoYG4nLAlgJXJkeCcpCitkZWZpbmUoYGNudCcsCWAlcmN4JykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMzIpCitQUk9MT0dVRShtcG5fbHNoaWZ0YykKKwlGVU5DX0VOVFJZKDQpCisJbmVnCVIzMiglcmN4KQkJQyBwdXQgcnNoIGNvdW50IGluIGNsCisJbW92CS04KHVwLG4sOCksICVyYXgKKwlzaHIJUjgoJXJjeCksICVyYXgJCUMgZnVuY3Rpb24gcmV0dXJuIHZhbHVlCisKKwluZWcJUjMyKCVyY3gpCQlDIHB1dCBsc2ggY291bnQgaW4gY2wKKwlsZWEJMShuKSwgUjMyKCVyOCkKKwlhbmQJJDMsIFIzMiglcjgpCisJamUJTChybHgpCQkJQyBqdW1wIGZvciBuID0gMywgNywgMTEsIC4uLgorCisJZGVjCVIzMiglcjgpCisJam5lCUwoMSkKK0MJbiA9IDQsIDgsIDEyLCAuLi4KKwltb3YJLTgodXAsbiw4KSwgJXIxMAorCXNobAlSOCglcmN4KSwgJXIxMAorCW5lZwlSMzIoJXJjeCkJCUMgcHV0IHJzaCBjb3VudCBpbiBjbAorCW1vdgktMTYodXAsbiw4KSwgJXI4CisJc2hyCVI4KCVyY3gpLCAlcjgKKwlvcgklcjgsICVyMTAKKwlub3QJJXIxMAorCW1vdgklcjEwLCAtOChycCxuLDgpCisJZGVjCW4KKwlqbXAJTChybGwpCisKK0woMSk6CWRlYwlSMzIoJXI4KQorCWplCUwoMXgpCQkJQyBqdW1wIGZvciBuID0gMSwgNSwgOSwgMTMsIC4uLgorQwluID0gMiwgNiwgMTAsIDE2LCAuLi4KKwltb3YJLTgodXAsbiw4KSwgJXIxMAorCXNobAlSOCglcmN4KSwgJXIxMAorCW5lZwlSMzIoJXJjeCkJCUMgcHV0IHJzaCBjb3VudCBpbiBjbAorCW1vdgktMTYodXAsbiw4KSwgJXI4CisJc2hyCVI4KCVyY3gpLCAlcjgKKwlvcgklcjgsICVyMTAKKwlub3QJJXIxMAorCW1vdgklcjEwLCAtOChycCxuLDgpCisJZGVjCW4KKwluZWcJUjMyKCVyY3gpCQlDIHB1dCBsc2ggY291bnQgaW4gY2wKK0woMXgpOgorCWNtcAkkMSwgbgorCWplCUwoYXN0KQorCW1vdgktOCh1cCxuLDgpLCAlcjEwCisJc2hsCVI4KCVyY3gpLCAlcjEwCisJbW92CS0xNih1cCxuLDgpLCAlcjExCisJc2hsCVI4KCVyY3gpLCAlcjExCisJbmVnCVIzMiglcmN4KQkJQyBwdXQgcnNoIGNvdW50IGluIGNsCisJbW92CS0xNih1cCxuLDgpLCAlcjgKKwltb3YJLTI0KHVwLG4sOCksICVyOQorCXNocglSOCglcmN4KSwgJXI4CisJb3IJJXI4LCAlcjEwCisJc2hyCVI4KCVyY3gpLCAlcjkKKwlvcgklcjksICVyMTEKKwlub3QJJXIxMAorCW5vdAklcjExCisJbW92CSVyMTAsIC04KHJwLG4sOCkKKwltb3YJJXIxMSwgLTE2KHJwLG4sOCkKKwlzdWIJJDIsIG4KKworTChybGwpOgluZWcJUjMyKCVyY3gpCQlDIHB1dCBsc2ggY291bnQgaW4gY2wKK0wocmx4KToJbW92CS04KHVwLG4sOCksICVyMTAKKwlzaGwJUjgoJXJjeCksICVyMTAKKwltb3YJLTE2KHVwLG4sOCksICVyMTEKKwlzaGwJUjgoJXJjeCksICVyMTEKKworCXN1YgkkNCwgbgkJCUMJCQkJICAgICAgNAorCWpiCUwoZW5kKQkJCUMJCQkJICAgICAgMgorCUFMSUdOKDE2KQorTCh0b3ApOgorCUMgZmluaXNoIHN0dWZmIGZyb20gbHNoIGJsb2NrCisJbmVnCVIzMiglcmN4KQkJQyBwdXQgcnNoIGNvdW50IGluIGNsCisJbW92CTE2KHVwLG4sOCksICVyOAorCW1vdgk4KHVwLG4sOCksICVyOQorCXNocglSOCglcmN4KSwgJXI4CisJb3IJJXI4LCAlcjEwCisJc2hyCVI4KCVyY3gpLCAlcjkKKwlvcgklcjksICVyMTEKKwlub3QJJXIxMAorCW5vdAklcjExCisJbW92CSVyMTAsIDI0KHJwLG4sOCkKKwltb3YJJXIxMSwgMTYocnAsbiw4KQorCUMgc3RhcnQgdHdvIG5ldyByc2gKKwltb3YJMCh1cCxuLDgpLCAlcjgKKwltb3YJLTgodXAsbiw4KSwgJXI5CisJc2hyCVI4KCVyY3gpLCAlcjgKKwlzaHIJUjgoJXJjeCksICVyOQorCisJQyBmaW5pc2ggc3R1ZmYgZnJvbSByc2ggYmxvY2sKKwluZWcJUjMyKCVyY3gpCQlDIHB1dCBsc2ggY291bnQgaW4gY2wKKwltb3YJOCh1cCxuLDgpLCAlcjEwCisJbW92CTAodXAsbiw4KSwgJXIxMQorCXNobAlSOCglcmN4KSwgJXIxMAorCW9yCSVyMTAsICVyOAorCXNobAlSOCglcmN4KSwgJXIxMQorCW9yCSVyMTEsICVyOQorCW5vdAklcjgKKwlub3QJJXI5CisJbW92CSVyOCwgOChycCxuLDgpCisJbW92CSVyOSwgMChycCxuLDgpCisJQyBzdGFydCB0d28gbmV3IGxzaAorCW1vdgktOCh1cCxuLDgpLCAlcjEwCisJbW92CS0xNih1cCxuLDgpLCAlcjExCisJc2hsCVI4KCVyY3gpLCAlcjEwCisJc2hsCVI4KCVyY3gpLCAlcjExCisKKwlzdWIJJDQsIG4KKwlqYWUJTCh0b3ApCQkJQwkJCQkgICAgICAyCitMKGVuZCk6CisJbmVnCVIzMiglcmN4KQkJQyBwdXQgcnNoIGNvdW50IGluIGNsCisJbW92CTgodXApLCAlcjgKKwlzaHIJUjgoJXJjeCksICVyOAorCW9yCSVyOCwgJXIxMAorCW1vdgkodXApLCAlcjkKKwlzaHIJUjgoJXJjeCksICVyOQorCW9yCSVyOSwgJXIxMQorCW5vdAklcjEwCisJbm90CSVyMTEKKwltb3YJJXIxMCwgMTYocnApCisJbW92CSVyMTEsIDgocnApCisKKwluZWcJUjMyKCVyY3gpCQlDIHB1dCBsc2ggY291bnQgaW4gY2wKK0woYXN0KToJbW92CSh1cCksICVyMTAKKwlzaGwJUjgoJXJjeCksICVyMTAKKwlub3QJJXIxMAorCW1vdgklcjEwLCAocnApCisJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2xzaHN1Yl9uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L2xzaHN1Yl9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDQyOGMwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvbHNoc3ViX24uYXNtCkBAIC0wLDAgKzEsMTcyIEBACitkbmwgIEFNRDY0IG1wbl9sc2hzdWJfbi4gIFIgPSAyXmsoVSAtIFYpLgorCitkbmwgIENvcHlyaWdodCAyMDA2LCAyMDExLCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIEFNRCBLOCxLOQkgMy4xNQkobXBuX3N1Yl9uICsgbXBuX2xzaGlmdCBjb3N0cyBhYm91dCA0IGMvbCkKK0MgQU1EIEsxMAkgMy4xNQkobXBuX3N1Yl9uICsgbXBuX2xzaGlmdCBjb3N0cyBhYm91dCA0IGMvbCkKK0MgSW50ZWwgUDQJMTYuNQorQyBJbnRlbCBjb3JlMgkgNC4zNQorQyBJbnRlbCBjb3JlaQkgPworQyBJbnRlbCBhdG9tCSA/CitDIFZJQSBuYW5vCSA/CisKK0MgVGhpcyB3YXMgd3JpdHRlbiBxdWlja2x5IGFuZCBub3Qgb3B0aW1pemVkIGF0IGFsbCwgYnV0IGl0IHJ1bnMgdmVyeSB3ZWxsIG9uCitDIEs4LiAgQnV0IHBlcmhhcHMgb25lIGNvdWxkIGdldCB1bmRlciAzIGMvbC4gIElkZWFzOgorQyAgIDEpIFVzZSBpbmRleGluZyB0byBzYXZlIHRoZSAzIExFQQorQyAgIDIpIFdyaXRlIHJlYXNvbmFibGUgZmVlZC1pbiBjb2RlCitDICAgMykgQmUgbW9yZSBjbGV2ZXIgYWJvdXQgcmVnaXN0ZXIgdXNhZ2UKK0MgICA0KSBVbnJvbGwgbW9yZSwgaGFuZGxpbmcgQ0wgbmVnYXRpb24sIGNhcnJ5IHNhdmUvcmVzdG9yZSBjb3N0IG11Y2ggbm93CitDICAgNSkgUmVzY2hlZHVsZQorCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLAlgJXJkaScpCitkZWZpbmUoYHVwJywJYCVyc2knKQorZGVmaW5lKGB2cCcsCWAlcmR4JykKK2RlZmluZShgbicsCWAlcmN4JykKK2RlZmluZShgY250JywJYCVyOCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX2xzaHN1Yl9uKQorCUZVTkNfRU5UUlkoNCkKK0lGRE9TKGAJbW92CTU2KCVyc3ApLCAlcjhkCScpCisKKwlwdXNoCSVyMTIKKwlwdXNoCSVyMTMKKwlwdXNoCSVyMTQKKwlwdXNoCSVyMTUKKwlwdXNoCSVyYngKKworCW1vdgluLCAlcmF4CisJeG9yCVIzMiglcmJ4KSwgUjMyKCVyYngpCUMgY2xlYXIgY2Fycnkgc2F2ZSByZWdpc3RlcgorCW1vdglSMzIoJXI4KSwgUjMyKCVyY3gpCUMgc2hpZnQgY291bnQKKwl4b3IJUjMyKCVyMTUpLCBSMzIoJXIxNSkJQyBsaW1iIGNhcnJ5CisKKwltb3YJUjMyKCVyYXgpLCBSMzIoJXIxMSkKKwlhbmQJJDMsIFIzMiglcjExKQorCWplCUwoNCkKKwlzdWIJJDEsIFIzMiglcjExKQorCitMKG9vcGV0dGUpOgorCWFkZAlSMzIoJXJieCksIFIzMiglcmJ4KQlDIHJlc3RvcmUgY2FycnkgZmxhZworCW1vdgkwKHVwKSwgJXI4CisJbGVhCTgodXApLCB1cAorCXNiYgkwKHZwKSwgJXI4CisJbW92CSVyOCwgJXIxMgorCXNiYglSMzIoJXJieCksIFIzMiglcmJ4KQlDIHNhdmUgY2FycnkgZmxhZworCXNobAlSOCglcmN4KSwgJXI4CisJb3IJJXIxNSwgJXI4CisJbW92CSVyMTIsICVyMTUKKwlsZWEJOCh2cCksIHZwCisJbmVnCVI4KCVyY3gpCisJc2hyCVI4KCVyY3gpLCAlcjE1CisJbmVnCVI4KCVyY3gpCisJbW92CSVyOCwgMChycCkKKwlsZWEJOChycCksIHJwCisJc3ViCSQxLCBSMzIoJXIxMSkKKwlqbmMJTChvb3BldHRlKQorCitMKDQpOgorCXN1YgkkNCwgJXJheAorCWpjCUwoZW5kKQorCisJQUxJR04oMTYpCitMKG9vcCk6CisJYWRkCVIzMiglcmJ4KSwgUjMyKCVyYngpCUMgcmVzdG9yZSBjYXJyeSBmbGFnCisKKwltb3YJMCh1cCksICVyOAorCW1vdgk4KHVwKSwgJXI5CisJbW92CTE2KHVwKSwgJXIxMAorCW1vdgkyNCh1cCksICVyMTEKKworCWxlYQkzMih1cCksIHVwCisKKwlzYmIJMCh2cCksICVyOAorCW1vdgklcjgsICVyMTIKKwlzYmIJOCh2cCksICVyOQorCW1vdgklcjksICVyMTMKKwlzYmIJMTYodnApLCAlcjEwCisJbW92CSVyMTAsICVyMTQKKwlzYmIJMjQodnApLCAlcjExCisKKwlzYmIJUjMyKCVyYngpLCBSMzIoJXJieCkJQyBzYXZlIGNhcnJ5IGZsYWcKKworCXNobAlSOCglcmN4KSwgJXI4CisJc2hsCVI4KCVyY3gpLCAlcjkKKwlzaGwJUjgoJXJjeCksICVyMTAKKwlvcgklcjE1LCAlcjgKKwltb3YJJXIxMSwgJXIxNQorCXNobAlSOCglcmN4KSwgJXIxMQorCisJbGVhCTMyKHZwKSwgdnAKKworCW5lZwlSOCglcmN4KQorCisJc2hyCVI4KCVyY3gpLCAlcjEyCisJc2hyCVI4KCVyY3gpLCAlcjEzCisJc2hyCVI4KCVyY3gpLCAlcjE0CisJc2hyCVI4KCVyY3gpLCAlcjE1CQlDIHVzZWQgbmV4dCBsb29wCisKKwlvcgklcjEyLCAlcjkKKwlvcgklcjEzLCAlcjEwCisJb3IJJXIxNCwgJXIxMQorCisJbmVnCVI4KCVyY3gpCisKKwltb3YJJXI4LCAwKHJwKQorCW1vdgklcjksIDgocnApCisJbW92CSVyMTAsIDE2KHJwKQorCW1vdgklcjExLCAyNChycCkKKworCWxlYQkzMihycCksIHJwCisKKwlzdWIJJDQsICVyYXgKKwlqbmMJTChvb3ApCitMKGVuZCk6CisJbmVnCVIzMiglcmJ4KQorCXNobAlSOCglcmN4KSwgJXJieAorCWFkYwklcjE1LCAlcmJ4CisJbW92CSVyYngsICVyYXgKKwlwb3AJJXJieAorCXBvcAklcjE1CisJcG9wCSVyMTQKKwlwb3AJJXIxMworCXBvcAklcjEyCisKKwlGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvbWlzc2luZy1jYWxsLm00IGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvbWlzc2luZy1jYWxsLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwMjRmMGUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9taXNzaW5nLWNhbGwubTQKQEAgLTAsMCArMSw1MyBAQAorZG5sICBBTUQ2NCBNVUxYL0FEWCBzaW11bGF0aW9uIHN1cHBvcnQsIGZ1bmN0aW9uIGNhbGwgdmVyc2lvbi4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworZGVmaW5lKGBhZG94JyxgCisJcHVzaAkkMQorCXB1c2gJJDIKKwljYWxsCV9fZ21wX2Fkb3gKKwlwb3AJJDIKKycpCisKK2RlZmluZShgYWRjeCcsYAorCXB1c2gJJDEKKwlwdXNoCSQyCisJY2FsbAlfX2dtcF9hZGN4CisJcG9wCSQyCisnKQorCitkZWZpbmUoYG11bHgnLGAKKwlwdXNoCSQxCisJY2FsbAlfX2dtcF9tdWx4CisJcG9wCSQyCisJcG9wCSQzCisnKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvbWlzc2luZy1pbmxpbmUubTQgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9taXNzaW5nLWlubGluZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDFkZjEzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvbWlzc2luZy1pbmxpbmUubTQKQEAgLTAsMCArMSwxMDAgQEAKK2RubCAgQU1ENjQgTVVMWC9BRFggc2ltdWxhdGlvbiBzdXBwb3J0LCBpbmxpbmUgdmVyc2lvbi4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworZGVmaW5lKGBhZG94JyxgCisJcHVzaAkkMgorCXB1c2gJJXJjeAorCXB1c2gJJXJieAorCXB1c2gJJXJheAorCW1vdgkkMSwgJXJjeAorCXB1c2hmcQorCXB1c2hmcQorQyBjb3B5IDAoJXJzcCk6MTEgdG8gMCglcnNwKTowCisJbW92CSglcnNwKSwgJXJieAorCXNocgklcmJ4CisJYnQJJGAnMTAsICVyYngKKwlhZGMJJXJieCwgJXJieAorCW1vdgklcmJ4LCAoJXJzcCkKK0MgcHV0IG1hbmlwdWxhdGVkIGZsYWdzIGludG8gZWZsYWdzLCBleGVjdXRlIGEgcGxhaW4gYWRjCisJcG9wZnEKKwlhZGMJJXJjeCwgMzIoJXJzcCkKK0MgY29weSBDRiB0byAwKCVyc3ApOjExCisJbW92CSglcnNwKSwgJXJieAorCXNiYglSMzIoJXJheCksIFIzMiglcmF4KQorCWFuZAkkYCcweDgwMCwgUjMyKCVyYXgpCisJYW5kCSRgJzB4ZmZmZmZmZmZmZmZmZjdmZiwgJXJieAorCW9yCSVyYXgsICVyYngKKwltb3YJJXJieCwgKCVyc3ApCitDIHB1dCBtYW5pcHVsYXRlZCBmbGFncyBpbnRvIGVmbGFncworCXBvcGZxCisJcG9wCSVyYXgKKwlwb3AJJXJieAorCXBvcAklcmN4CisJcG9wCSQyCisnKQorCitkZWZpbmUoYGFkY3gnLGAKKwlwdXNoCSQyCisJcHVzaAklcmN4CisJcHVzaAklcmJ4CisJcHVzaAklcmF4CisJbW92CSQxLCAlcmN4CisJcHVzaGZxCisJYWRjCSVyY3gsIDMyKCVyc3ApCisJbW92CSglcnNwKSwgJXJieAorCXNiYglSMzIoJXJheCksIFIzMiglcmF4KQorCWFuZAkkYCcweGZmZmZmZmZmZmZmZmZmZmUsICVyYngKKwlzdWIJJXJheCwgJXJieAorCW1vdgklcmJ4LCAoJXJzcCkKKwlwb3BmcQorCXBvcAklcmF4CisJcG9wCSVyYngKKwlwb3AJJXJjeAorCXBvcAkkMgorJykKKworZGVmaW5lKGBtdWx4JyxgCisJbGVhCS0xNiglcnNwKSwgJXJzcAorCXB1c2gJJXJheAorCXB1c2gJJXJkeAorCXB1c2hmcQkJCUMgcHJlc2VydmUgYWxsIGZsYWdzCisJbW92CSQxLCAlcmF4CisJbXVsCSVyZHgKKwltb3YJJXJheCwgMjQoJXJzcCkKKwltb3YJJXJkeCwgMzIoJXJzcCkKKwlwb3BmcQkJCUMgcmVzdG9yZSBlZmxhZ3MKKwlwb3AJJXJkeAorCXBvcAklcmF4CisJcG9wCSQyCisJcG9wCSQzCisnKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvbWlzc2luZy5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9taXNzaW5nLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjY1Yzg5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvbWlzc2luZy5hc20KQEAgLTAsMCArMSwxMzAgQEAKKworCWRubCAgQU1ENjQgTVVMWC9BRFggc2ltdWxhdGlvbiBzdXBwb3J0LgorCitkbmwgIENvbnRyaWJ1dGVkIHRvIHRoZSBHTlUgcHJvamVjdCBieSBUb3JiasO2cm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBU01fU1RBUlQoKQorCitDIEZha2UgdGhlIE1VTFggaW5zdHJ1Y3Rpb24KK0MKK0MgQWNjZXB0IHRoZSBzaW5nbGUgZXhwbGljaXQgcGFyYW1ldGVyIG9uIHRoZSBzdGFjaywgcmV0dXJuIHRoZSB0d28gcmVzdWx0CitDIHdvcmRzIG9uIHRoZSBzdGFjay4gIFRoaXMgY2FsbGluZyBjb252ZW50aW9uIG1lYW5zIHRoYXQgd2UgbmVlZCB0byBtb3ZlIHRoZQorQyByZXR1cm4gYWRkcmVzcyB1cC4KK0MKK1BST0xPR1VFKF9fZ21wX211bHgpCisJbGVhCS04KCVyc3ApLCAlcnNwCisJcHVzaAklcmF4CisJcHVzaAklcmR4CisJcHVzaGZxCQkJCUMgcHJlc2VydmUgYWxsIGZsYWdzCisJbW92CTMyKCVyc3ApLCAlcmF4CQlDIG1vdmUgcmV0YWRkci4uLgorCW1vdgklcmF4LCAyNCglcnNwKQkJQyAuLi51cCB0aGUgc3RhY2sKKwltb3YJNDAoJXJzcCksICVyYXgJCUMgaW5wdXQgcGFyYW1ldGVyCisJbXVsCSVyZHgKKwltb3YJJXJheCwgMzIoJXJzcCkKKwltb3YJJXJkeCwgNDAoJXJzcCkKKwlwb3BmcQkJCQlDIHJlc3RvcmUgZWZsYWdzCisJcG9wCSVyZHgKKwlwb3AJJXJheAorCXJldAorRVBJTE9HVUUoKQorUFJPVEVDVChfX2dtcF9tdWx4KQorCisKK0MgRmFrZSB0aGUgQURPWCBpbnN0cnVjdGlvbgorQworQyBBY2NlcHQgdGhlIHR3byBwYXJhbWV0ZXJzIG9uIHRoZSBzdGFjaywgcmV0dXJuIHRoZSByZXN1bHQgd29yZCBvbiB0aGUgc3RhY2suCitDIFRoaXMgY2FsbGluZyBjb252ZW50aW9uIG1lYW5zIHRoYXQgd2UgbmVlZCB0byBtb3ZlIHRoZSByZXR1cm4gYWRkcmVzcyBkb3duLgorQworUFJPTE9HVUUoX19nbXBfYWRveCkKKwlwdXNoCSVyY3gKKwlwdXNoCSVyYngKKwlwdXNoCSVyYXgKKwltb3YJMzIoJXJzcCksICVyY3gJCUMgc3JjMgorCW1vdgkyNCglcnNwKSwgJXJheAkJQyBtb3ZlIHJldGFkZHIuLi4KKwltb3YJJXJheCwgMzIoJXJzcCkJCUMgLi4uZG93biB0aGUgc3RhY2sKKwlwdXNoZnEKK0MgY29weSAwKCVyc3ApOjExIHRvIDAoJXJzcCk6MAorCW1vdgkoJXJzcCksICVyYngKKwlzaHIJJXJieAorCWJ0CSQxMCwgJXJieAorCWFkYwklcmJ4LCAlcmJ4CisJcHVzaAklcmJ4CitDIHB1dCBtYW5pcHVsYXRlZCBmbGFncyBpbnRvIGVmbGFncywgZXhlY3V0ZSBhIHBsYWluIGFkYworCXBvcGZxCisJYWRjCSVyY3gsIDQ4KCVyc3ApCitDIGNvcHkgQ0YgdG8gMCglcnNwKToxMQorCXBvcAklcmJ4CisJc2JiCVIzMiglcmF4KSwgUjMyKCVyYXgpCisJYW5kCSQweDgwMCwgUjMyKCVyYXgpCisJYW5kCSQweGZmZmZmZmZmZmZmZmY3ZmYsICVyYngKKwlvcgklcmF4LCAlcmJ4CisJcHVzaAklcmJ4CitDIHB1dCBtYW5pcHVsYXRlZCBmbGFncyBpbnRvIGVmbGFncworCXBvcGZxCisJcG9wCSVyYXgKKwlwb3AJJXJieAorCXBvcAklcmN4CisJbGVhCTgoJXJzcCksICVyc3AKKwlyZXQKK0VQSUxPR1VFKCkKK1BST1RFQ1QoX19nbXBfYWRveCkKKworCitDIEZha2UgdGhlIEFEQ1ggaW5zdHJ1Y3Rpb24KK0MKK0MgQWNjZXB0IHRoZSB0d28gcGFyYW1ldGVycyBvbiB0aGUgc3RhY2ssIHJldHVybiB0aGUgcmVzdWx0IHdvcmQgb24gdGhlIHN0YWNrLgorQyBUaGlzIGNhbGxpbmcgY29udmVudGlvbiBtZWFucyB0aGF0IHdlIG5lZWQgdG8gbW92ZSB0aGUgcmV0dXJuIGFkZHJlc3MgZG93bi4KK0MKK1BST0xPR1VFKF9fZ21wX2FkY3gpCisJcHVzaAklcmN4CisJcHVzaAklcmJ4CisJcHVzaAklcmF4CisJbW92CTMyKCVyc3ApLCAlcmN4CQlDIHNyYzIKKwltb3YJMjQoJXJzcCksICVyYXgJCUMgbW92ZSByZXRhZGRyLi4uCisJbW92CSVyYXgsIDMyKCVyc3ApCQlDIC4uLmRvd24gdGhlIHN0YWNrCisJcHVzaGZxCisJYWRjCSVyY3gsIDQ4KCVyc3ApCisJcG9wCSVyYngKKwlzYmIJUjMyKCVyYXgpLCBSMzIoJXJheCkKKwlhbmQJJGAnMHhmZmZmZmZmZmZmZmZmZmZlLCAlcmJ4CisJc3ViCSVyYXgsICVyYngKKwlwdXNoCSVyYngKKwlwb3BmcQorCXBvcAklcmF4CisJcG9wCSVyYngKKwlwb3AJJXJjeAorCWxlYQk4KCVyc3ApLCAlcnNwCisJcmV0CitFUElMT0dVRSgpCitQUk9URUNUKF9fZ21wX2FkY3gpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9tb2RfMV8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L21vZF8xXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1NTMwNWYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9tb2RfMV8xLmFzbQpAQCAtMCwwICsxLDIzOCBAQAorZG5sICBBTUQ2NCBtcG5fbW9kXzFfMXAKKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kIGFuZCBOaWVscyBNw7ZsbGVyLgorCitkbmwgIENvcHlyaWdodCAyMDA5LTIwMTIsIDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIEFNRCBLOCxLOQkgNgorQyBBTUQgSzEwCSA2CitDIEludGVsIFA0CTI2CitDIEludGVsIGNvcmUyCTEyLjUKK0MgSW50ZWwgTkhNCTExLjMKK0MgSW50ZWwgU0JSCSA4LjQJKHNsb3dkb3duLCBvbGQgY29kZSB0b29rIDguMCkKK0MgSW50ZWwgYXRvbQkyNgorQyBWSUEgbmFubwkxMworCitkZWZpbmUoYEIybWInLCAgIGAlcjEwJykKK2RlZmluZShgQjJtb2RiJywgYCVyMTEnKQorZGVmaW5lKGBhcCcsICAgICBgJXJkaScpCitkZWZpbmUoYG4nLCAgICAgIGAlcnNpJykKK2RlZmluZShgcHJlJywgICAgYCVyOCcpCitkZWZpbmUoYGInLCAgICAgIGAlcmJ4JykKKworZGVmaW5lKGByMCcsICAgICBgJXJicCcpIEMgcjEga2VwdCBpbiAlcmF4CitkZWZpbmUoYHIyJywJIGAlcmN4JykgIEMga2VwdCBuZWdhdGVkLiBBbHNvIHVzZWQgYXMgc2hpZnQgY291bnQKK2RlZmluZShgdDAnLCAgICAgYCVyOScpCisKK0MgbXBfbGltYl90CitDIG1wbl9tb2RfMV8xcCAobXBfc3JjcHRyIGFwLCBtcF9zaXplX3QgbiwgbXBfbGltYl90IGIsIG1wX2xpbWJfdCBibW9kYls0XSkKK0MgICAgICAgICAgICAgICAgICAgICAgICVyZGkgICAgICAgICAlcnNpICAgICAgICAgJXJkeCAgICAgICAgICAgICAgICAlcmN4CitDIFRoZSBwcmUgYXJyYXkgY29udGFpbnMgYmksIGNudCwgQjFtb2RiLCBCMm1vZGIKK0MgTm90ZTogVGhpcyBpbXBsZW1lbnRhdGlvbiBuZWVkcyBCMW1vZGIgb25seSB3aGVuIGNudCA+IDAKKworQyBUaGUgaXRlcmF0aW9uIGlzIGFsbW9zdCBhcyBmb2xsb3dzLAorQworQyAgIHJfMiBCXjMgKyByXzEgQl4yICsgcl8wIEIgKyB1ID0gcl8xIEIybW9kYiArIChyXzAgKyByXzIgQjJtb2QpIEIgKyB1CitDCitDIHdoZXJlIHIyIGlzIGEgc2luZ2xlIGJpdCByZXByZXNlbnRlZCBhcyBhIG1hc2suIEJ1dCB0byBtYWtlIHN1cmUgdGhhdCB0aGUKK0MgcmVzdWx0IGZpdHMgaW4gdHdvIGxpbWJzIGFuZCBhIGJpdCwgY2FycnkgZnJvbSB0aGUgYWRkaXRpb24KK0MKK0MgICByXzAgKyByXzIgQjJtb2QKK0MKK0MgaXMgaGFuZGxlZCBzcGVjaWFsbHkuIE9uIGNhcnJ5LCB3ZSBzdWJ0cmFjdCBiIHRvIGNhbmNlbCB0aGUgY2FycnksCitDIGFuZCB3ZSB1c2UgaW5zdGVhZCB0aGUgdmFsdWUKK0MKK0MgICByXzAgKyBCMm1iIChtb2QgQikKK0MKK0MgVGhpcyBhZGRpdGlvbiBjYW4gYmUgaXNzdWVkIGVhcmx5IHNpbmNlIGl0IGRvZXNuJ3QgZGVwZW5kIG9uIHIyLCBhbmQgaXQgaXMKK0MgdGhlIHNvdXJjZSBvZiB0aGUgY21vdiBpbiB0aGUgbG9vcC4KK0MKK0MgV2UgaGF2ZSB0aGUgaW52YXJpYW50IHRoYXQgcl8yIEJeMiArIHJfMSBCICsgcl8wIDwgQl4yICsgQiBiCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX21vZF8xXzFwKQorCUZVTkNfRU5UUlkoNCkKKwlwdXNoCSVyYnAKKwlwdXNoCSVyYngKKwltb3YJJXJkeCwgYgorCW1vdgklcmN4LCBwcmUKKworCW1vdgktOChhcCwgbiwgOCksICVyYXgKKwljbXAJJDMsIG4KKwlqbmMJTChmaXJzdCkKKwltb3YJLTE2KGFwLCBuLCA4KSwgcjAKKwlqbXAJTChyZWR1Y2VfdHdvKQorCitMKGZpcnN0KToKKwlDIEZpcnN0IGl0ZXJhdGlvbiwgbm8gcjIKKwltb3YJMjQocHJlKSwgQjJtb2RiCisJbXVsCUIybW9kYgorCW1vdgktMjQoYXAsIG4sIDgpLCByMAorCWFkZAklcmF4LCByMAorCW1vdgktMTYoYXAsIG4sIDgpLCAlcmF4CisJYWRjCSVyZHgsICVyYXgKKwlzYmIJcjIsIHIyCisJc3ViCSQ0LCBuCisJamMJTChyZWR1Y2VfdGhyZWUpCisKKwltb3YJQjJtb2RiLCBCMm1iCisJc3ViCWIsIEIybWIKKworCUFMSUdOKDE2KQorTCh0b3ApOglhbmQJQjJtb2RiLCByMgorCWxlYQkoQjJtYiwgcjApLCB0MAorCW11bAlCMm1vZGIKKwlhZGQJcjAsIHIyCisJbW92CShhcCwgbiwgOCksIHIwCisJY21vdmMJdDAsIHIyCisJYWRkCSVyYXgsIHIwCisJbW92CXIyLCAlcmF4CisJYWRjCSVyZHgsICVyYXgKKwlzYmIJcjIsIHIyCisJc3ViCSQxLCBuCisJam5jCUwodG9wKQorCitMKHJlZHVjZV90aHJlZSk6CisJQyBFbGltaW5hdGUgcjIKKwlhbmQJYiwgcjIKKwlzdWIJcjIsICVyYXgKKworTChyZWR1Y2VfdHdvKToKKwltb3YJOChwcmUpLCBSMzIoJXJjeCkKKwl0ZXN0CVIzMiglcmN4KSwgUjMyKCVyY3gpCisJanoJTChub3JtYWxpemVkKQorCisJQyBVbm5vcm1hbGl6ZWQsIHVzZSBCMW1vZGIgdG8gcmVkdWNlIHRvIHNpemUgPCBCIChiKzEpCisJbXVscQkxNihwcmUpCisJeG9yCXQwLCB0MAorCWFkZAklcmF4LCByMAorCWFkYwklcmR4LCB0MAorCW1vdgl0MCwgJXJheAorCisJQyBMZWZ0LXNoaWZ0IHRvIG5vcm1hbGl6ZQoraWZkZWYoYFNITERfU0xPVycsYAorCXNobAlSOCglcmN4KSwgJXJheAorCW1vdglyMCwgdDAKKwluZWcJUjMyKCVyY3gpCisJc2hyCVI4KCVyY3gpLCB0MAorCW9yCXQwLCAlcmF4CisJbmVnCVIzMiglcmN4KQorJyxgCisJc2hsZAlSOCglcmN4KSwgcjAsICVyYXgKKycpCisJc2hsCVI4KCVyY3gpLCByMAorCWptcAlMKHVkaXYpCisKK0wobm9ybWFsaXplZCk6CisJbW92CSVyYXgsIHQwCisJc3ViCWIsIHQwCisJY21vdm5jCXQwLCAlcmF4CisKK0wodWRpdik6CisJbGVhCTEoJXJheCksIHQwCisJbXVscQkocHJlKQorCWFkZAlyMCwgJXJheAorCWFkYwl0MCwgJXJkeAorCWltdWwJYiwgJXJkeAorCXN1YgklcmR4LCByMAorCWNtcAlyMCwgJXJheAorCWxlYQkoYiwgcjApLCAlcmF4CisJY21vdm5jCXIwLCAlcmF4CisJY21wCWIsICVyYXgKKwlqbmMJTChmaXgpCitMKG9rKToJc2hyCVI4KCVyY3gpLCAlcmF4CisKKwlwb3AJJXJieAorCXBvcAklcmJwCisJRlVOQ19FWElUKCkKKwlyZXQKK0woZml4KToJc3ViCWIsICVyYXgKKwlqbXAJTChvaykKK0VQSUxPR1VFKCkKKworCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX21vZF8xXzFwX2NwcykKKwlGVU5DX0VOVFJZKDIpCisJcHVzaAklcmJwCisJYnNyCSVyc2ksICVyY3gKKwlwdXNoCSVyYngKKwltb3YJJXJkaSwgJXJieAorCXB1c2gJJXIxMgorCXhvcgkkNjMsIFIzMiglcmN4KQorCW1vdgklcnNpLCAlcjEyCisJbW92CVIzMiglcmN4KSwgUjMyKCVyYnApCisJc2FsCVI4KCVyY3gpLCAlcjEyCitJRlNURChgCW1vdgklcjEyLCAlcmRpCScpCUMgcGFzcyBwYXJhbWV0ZXIKK0lGRE9TKGAJbW92CSVyMTIsICVyY3gJJykJQyBwYXNzIHBhcmFtZXRlcgorSUZET1MoYAlzdWIJJDMyLCAlcnNwCScpCisJQVNTRVJUKG56LCBgdGVzdCAkMTUsICVyc3AnKQorCUNBTEwoCW1wbl9pbnZlcnRfbGltYikKK0lGRE9TKGAJYWRkCSQzMiwgJXJzcAknKQorCW5lZwklcjEyCisJbW92CSVyMTIsICVyOAorCW1vdgklcmF4LCAoJXJieCkJCUMgc3RvcmUgYmkKKwltb3YJJXJicCwgOCglcmJ4KQkJQyBzdG9yZSBjbnQKKwlpbXVsCSVyYXgsICVyMTIKKwltb3YJJXIxMiwgMjQoJXJieCkJCUMgc3RvcmUgQjJtb2RiCisJbW92CVIzMiglcmJwKSwgUjMyKCVyY3gpCisJdGVzdAlSMzIoJXJjeCksIFIzMiglcmN4KQorCWp6CUwoeikKKworCW1vdgkkMSwgUjMyKCVyZHgpCitpZmRlZihgU0hMRF9TTE9XJyxgCisJQyBEZXN0cm95cyAlcmF4LCB1bmxpa2Ugc2hsZC4gT3RoZXJ3aXNlLCB3ZSBjb3VsZCBkbyBCMW1vZGIKKwlDIGJlZm9yZSBCMm1vZGIsIGFuZCBnZXQgcmlkIG9mIHRoZSBtb3ZlICVyMTIsICVyOCBhYm92ZS4KKworCXNobAlSOCglcmN4KSwgJXJkeAorCW5lZwlSMzIoJXJjeCkKKwlzaHIJUjgoJXJjeCksICVyYXgKKwlvcgklcmF4LCAlcmR4CisJbmVnCVIzMiglcmN4KQorJyxgCisJc2hsZAlSOCglcmN4KSwgJXJheCwgJXJkeAorJykKKwlpbXVsCSVyZHgsICVyOAorCXNocglSOCglcmN4KSwgJXI4CisJbW92CSVyOCwgMTYoJXJieCkJCUMgc3RvcmUgQjFtb2RiCitMKHopOgorCXBvcAklcjEyCisJcG9wCSVyYngKKwlwb3AJJXJicAorCUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L21vZF8xXzIuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvbW9kXzFfMi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBmY2FlYgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L21vZF8xXzIuYXNtCkBAIC0wLDAgKzEsMjQxIEBACitkbmwgIEFNRDY0IG1wbl9tb2RfMXNfMnAKKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDktMjAxMiwgMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIKK0MgQU1EIEs4LEs5CSA0CitDIEFNRCBLMTAJIDQKK0MgSW50ZWwgUDQJMTkKK0MgSW50ZWwgY29yZTIJIDgKK0MgSW50ZWwgTkhNCSA2LjUKK0MgSW50ZWwgU0JSCSA0LjUKK0MgSW50ZWwgYXRvbQkyOAorQyBWSUEgbmFubwkgOAorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigxNikKK1BST0xPR1VFKG1wbl9tb2RfMXNfMnApCisJRlVOQ19FTlRSWSg0KQorCXB1c2gJJXIxNAorCXRlc3QJJDEsIFI4KCVyc2kpCisJbW92CSVyZHgsICVyMTQKKwlwdXNoCSVyMTMKKwltb3YJJXJjeCwgJXIxMworCXB1c2gJJXIxMgorCXB1c2gJJXJicAorCXB1c2gJJXJieAorCW1vdgkxNiglcmN4KSwgJXIxMAorCW1vdgkyNCglcmN4KSwgJXJieAorCW1vdgkzMiglcmN4KSwgJXJicAorCWplCUwoYjApCisJZGVjCSVyc2kKKwlqZQlMKG9uZSkKKwltb3YJLTgoJXJkaSwlcnNpLDgpLCAlcmF4CisJbXVsCSVyMTAKKwltb3YJJXJheCwgJXI5CisJbW92CSVyZHgsICVyOAorCW1vdgkoJXJkaSwlcnNpLDgpLCAlcmF4CisJYWRkCS0xNiglcmRpLCVyc2ksOCksICVyOQorCWFkYwkkMCwgJXI4CisJbXVsCSVyYngKKwlhZGQJJXJheCwgJXI5CisJYWRjCSVyZHgsICVyOAorCWptcAlMKDExKQorCitMKGIwKToJbW92CS04KCVyZGksJXJzaSw4KSwgJXI4CisJbW92CS0xNiglcmRpLCVyc2ksOCksICVyOQorCitMKDExKToJc3ViCSQ0LCAlcnNpCisJamIJTChlZDIpCisJbGVhCTQwKCVyZGksJXJzaSw4KSwgJXJkaQorCW1vdgktNDAoJXJkaSksICVyMTEKKwltb3YJLTMyKCVyZGkpLCAlcmF4CisJam1wCUwobTApCisKKwlBTElHTigxNikKK0wodG9wKToJbW92CS0yNCglcmRpKSwgJXI5CisJYWRkCSVyYXgsICVyMTEKKwltb3YJLTE2KCVyZGkpLCAlcmF4CisJYWRjCSVyZHgsICVyMTIKKwltdWwJJXIxMAorCWFkZAklcmF4LCAlcjkKKwltb3YJJXIxMSwgJXJheAorCW1vdgklcmR4LCAlcjgKKwlhZGMJJDAsICVyOAorCW11bAklcmJ4CisJYWRkCSVyYXgsICVyOQorCW1vdgklcjEyLCAlcmF4CisJYWRjCSVyZHgsICVyOAorCW11bAklcmJwCisJc3ViCSQyLCAlcnNpCisJamIJTChlZDEpCisJbW92CS00MCglcmRpKSwgJXIxMQorCWFkZAklcmF4LCAlcjkKKwltb3YJLTMyKCVyZGkpLCAlcmF4CisJYWRjCSVyZHgsICVyOAorTChtMCk6CW11bAklcjEwCisJYWRkCSVyYXgsICVyMTEKKwltb3YJJXI5LCAlcmF4CisJbW92CSVyZHgsICVyMTIKKwlhZGMJJDAsICVyMTIKKwltdWwJJXJieAorCWFkZAklcmF4LCAlcjExCisJbGVhCS0zMiglcmRpKSwgJXJkaQkJQyBhcCAtPSA0CisJbW92CSVyOCwgJXJheAorCWFkYwklcmR4LCAlcjEyCisJbXVsCSVyYnAKKwlzdWIJJDIsICVyc2kKKwlqYWUJTCh0b3ApCisKK0woZWQwKToJbW92CSVyMTEsICVyOQorCW1vdgklcjEyLCAlcjgKK0woZWQxKToJYWRkCSVyYXgsICVyOQorCWFkYwklcmR4LCAlcjgKK0woZWQyKToJbW92CTgoJXIxMyksIFIzMiglcmRpKQkJQyBjbnQKKwltb3YJJXI4LCAlcmF4CisJbW92CSVyOSwgJXI4CisJbXVsCSVyMTAKKwlhZGQJJXJheCwgJXI4CisJYWRjCSQwLCAlcmR4CitMKDEpOgl4b3IJUjMyKCVyY3gpLCBSMzIoJXJjeCkKKwltb3YJJXI4LCAlcjkKKwlzdWIJUjMyKCVyZGkpLCBSMzIoJXJjeCkKKwlzaHIJUjgoJXJjeCksICVyOQorCW1vdglSMzIoJXJkaSksIFIzMiglcmN4KQorCXNhbAlSOCglcmN4KSwgJXJkeAorCW9yCSVyZHgsICVyOQorCXNhbAlSOCglcmN4KSwgJXI4CisJbW92CSVyOSwgJXJheAorCW11bHEJKCVyMTMpCisJbW92CSVyYXgsICVyc2kKKwlpbmMJJXI5CisJYWRkCSVyOCwgJXJzaQorCWFkYwklcjksICVyZHgKKwlpbXVsCSVyMTQsICVyZHgKKwlzdWIJJXJkeCwgJXI4CisJbGVhCSglcjgsJXIxNCksICVyYXgKKwljbXAJJXI4LCAlcnNpCisJY21vdmMJJXJheCwgJXI4CisJbW92CSVyOCwgJXJheAorCXN1YgklcjE0LCAlcmF4CisJY21vdmMJJXI4LCAlcmF4CisJbW92CVIzMiglcmRpKSwgUjMyKCVyY3gpCisJc2hyCVI4KCVyY3gpLCAlcmF4CisJcG9wCSVyYngKKwlwb3AJJXJicAorCXBvcAklcjEyCisJcG9wCSVyMTMKKwlwb3AJJXIxNAorCUZVTkNfRVhJVCgpCisJcmV0CitMKG9uZSk6CisJbW92CSglcmRpKSwgJXI4CisJbW92CTgoJXJjeCksIFIzMiglcmRpKQorCXhvcgklcmR4LCAlcmR4CisJam1wCUwoMSkKK0VQSUxPR1VFKCkKKworCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX21vZF8xc18ycF9jcHMpCisJRlVOQ19FTlRSWSgyKQorCXB1c2gJJXJicAorCWJzcgklcnNpLCAlcmN4CisJcHVzaAklcmJ4CisJbW92CSVyZGksICVyYngKKwlwdXNoCSVyMTIKKwl4b3IJJDYzLCBSMzIoJXJjeCkKKwltb3YJJXJzaSwgJXIxMgorCW1vdglSMzIoJXJjeCksIFIzMiglcmJwKQlDIHByZXNlcnZlIGNudCBvdmVyIGNhbGwKKwlzYWwJUjgoJXJjeCksICVyMTIJCUMgYiA8PCBjbnQKK0lGU1REKGAJbW92CSVyMTIsICVyZGkJJykJQyBwYXNzIHBhcmFtZXRlcgorSUZET1MoYAltb3YJJXIxMiwgJXJjeAknKQlDIHBhc3MgcGFyYW1ldGVyCitJRkRPUyhgCXN1YgkkMzIsICVyc3AJJykKKwlBU1NFUlQobnosIGB0ZXN0ICQxNSwgJXJzcCcpCisJQ0FMTCgJbXBuX2ludmVydF9saW1iKQorSUZET1MoYAlhZGQJJDMyLCAlcnNwCScpCisJbW92CSVyMTIsICVyOAorCW1vdgklcmF4LCAlcjExCisJbW92CSVyYXgsICglcmJ4KQkJQyBzdG9yZSBiaQorCW1vdgklcmJwLCA4KCVyYngpCQlDIHN0b3JlIGNudAorCW5lZwklcjgKKwltb3YJUjMyKCVyYnApLCBSMzIoJXJjeCkKKwltb3YJJDEsIFIzMiglcnNpKQoraWZkZWYoYFNITERfU0xPVycsYAorCXNobAlSOCglcmN4KSwgJXJzaQorCW5lZwlSMzIoJXJjeCkKKwltb3YJJXJheCwgJXJicAorCXNocglSOCglcmN4KSwgJXJheAorCW9yCSVyYXgsICVyc2kKKwltb3YJJXJicCwgJXJheAorCW5lZwlSMzIoJXJjeCkKKycsYAorCXNobGQJUjgoJXJjeCksICVyYXgsICVyc2kJQyBGSVhNRTogU2xvdyBvbiBBdG9tIGFuZCBOYW5vCisnKQorCWltdWwJJXI4LCAlcnNpCisJbXVsCSVyc2kKKworCWFkZAklcnNpLCAlcmR4CisJc2hyCVI4KCVyY3gpLCAlcnNpCisJbW92CSVyc2ksIDE2KCVyYngpCQlDIHN0b3JlIEIxbW9kYgorCisJbm90CSVyZHgKKwlpbXVsCSVyMTIsICVyZHgKKwlsZWEJKCVyZHgsJXIxMiksICVyc2kKKwljbXAJJXJkeCwgJXJheAorCWNtb3ZuYwklcmR4LCAlcnNpCisJbW92CSVyMTEsICVyYXgKKwltdWwJJXJzaQorCisJYWRkCSVyc2ksICVyZHgKKwlzaHIJUjgoJXJjeCksICVyc2kKKwltb3YJJXJzaSwgMjQoJXJieCkJCUMgc3RvcmUgQjJtb2RiCisKKwlub3QJJXJkeAorCWltdWwJJXIxMiwgJXJkeAorCWFkZAklcmR4LCAlcjEyCisJY21wCSVyZHgsICVyYXgKKwljbW92bmMJJXJkeCwgJXIxMgorCisJc2hyCVI4KCVyY3gpLCAlcjEyCisJbW92CSVyMTIsIDMyKCVyYngpCQlDIHN0b3JlIEIzbW9kYgorCisJcG9wCSVyMTIKKwlwb3AJJXJieAorCXBvcAklcmJwCisJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L21vZF8xXzQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvbW9kXzFfNC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNmMzA0YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L21vZF8xXzQuYXNtCkBAIC0wLDAgKzEsMjcyIEBACitkbmwgIEFNRDY0IG1wbl9tb2RfMXNfNHAKKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDktMjAxMiwgMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIKK0MgQU1EIEs4LEs5CSAzCitDIEFNRCBLMTAJIDMKK0MgSW50ZWwgUDQJMTUuNQorQyBJbnRlbCBjb3JlMgkgNQorQyBJbnRlbCBjb3JlaQkgNAorQyBJbnRlbCBhdG9tCTIzCitDIFZJQSBuYW5vCSA0Ljc1CisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX21vZF8xc180cCkKKwlGVU5DX0VOVFJZKDQpCisJcHVzaAklcjE1CisJcHVzaAklcjE0CisJcHVzaAklcjEzCisJcHVzaAklcjEyCisJcHVzaAklcmJwCisJcHVzaAklcmJ4CisKKwltb3YJJXJkeCwgJXIxNQorCW1vdgklcmN4LCAlcjE0CisJbW92CTE2KCVyY3gpLCAlcjExCQlDIEIxbW9kYgorCW1vdgkyNCglcmN4KSwgJXJieAkJQyBCMm1vZGIKKwltb3YJMzIoJXJjeCksICVyYnAJCUMgQjNtb2RiCisJbW92CTQwKCVyY3gpLCAlcjEzCQlDIEI0bW9kYgorCW1vdgk0OCglcmN4KSwgJXIxMgkJQyBCNW1vZGIKKwl4b3IJUjMyKCVyOCksIFIzMiglcjgpCisJbW92CVIzMiglcnNpKSwgUjMyKCVyZHgpCisJYW5kCSQzLCBSMzIoJXJkeCkKKwlqZQlMKGIwKQorCWNtcAkkMiwgUjMyKCVyZHgpCisJamMJTChiMSkKKwlqZQlMKGIyKQorCitMKGIzKToJbGVhCS0yNCglcmRpLCVyc2ksOCksICVyZGkKKwltb3YJOCglcmRpKSwgJXJheAorCW11bAklcjExCisJbW92CSglcmRpKSwgJXI5CisJYWRkCSVyYXgsICVyOQorCWFkYwklcmR4LCAlcjgKKwltb3YJMTYoJXJkaSksICVyYXgKKwltdWwJJXJieAorCWptcAlMKG0wKQorCisJQUxJR04oOCkKK0woYjApOglsZWEJLTMyKCVyZGksJXJzaSw4KSwgJXJkaQorCW1vdgk4KCVyZGkpLCAlcmF4CisJbXVsCSVyMTEKKwltb3YJKCVyZGkpLCAlcjkKKwlhZGQJJXJheCwgJXI5CisJYWRjCSVyZHgsICVyOAorCW1vdgkxNiglcmRpKSwgJXJheAorCW11bAklcmJ4CisJYWRkCSVyYXgsICVyOQorCWFkYwklcmR4LCAlcjgKKwltb3YJMjQoJXJkaSksICVyYXgKKwltdWwJJXJicAorCWptcAlMKG0wKQorCisJQUxJR04oOCkKK0woYjEpOglsZWEJLTgoJXJkaSwlcnNpLDgpLCAlcmRpCisJbW92CSglcmRpKSwgJXI5CisJam1wCUwobTEpCisKKwlBTElHTig4KQorTChiMik6CWxlYQktMTYoJXJkaSwlcnNpLDgpLCAlcmRpCisJbW92CTgoJXJkaSksICVyOAorCW1vdgkoJXJkaSksICVyOQorCWptcAlMKG0xKQorCisJQUxJR04oMTYpCitMKHRvcCk6CW1vdgktMjQoJXJkaSksICVyYXgKKwltb3YJLTMyKCVyZGkpLCAlcjEwCisJbXVsCSVyMTEJCQlDIHVwWzFdICogQjFtb2RiCisJYWRkCSVyYXgsICVyMTAKKwltb3YJLTE2KCVyZGkpLCAlcmF4CisJbW92CSQwLCBSMzIoJXJjeCkKKwlhZGMJJXJkeCwgJXJjeAorCW11bAklcmJ4CQkJQyB1cFsyXSAqIEIybW9kYgorCWFkZAklcmF4LCAlcjEwCisJbW92CS04KCVyZGkpLCAlcmF4CisJYWRjCSVyZHgsICVyY3gKKwlzdWIJJDMyLCAlcmRpCisJbXVsCSVyYnAJCQlDIHVwWzNdICogQjNtb2RiCisJYWRkCSVyYXgsICVyMTAKKwltb3YJJXIxMywgJXJheAorCWFkYwklcmR4LCAlcmN4CisJbXVsCSVyOQkJCUMgcmwgKiBCNG1vZGIKKwlhZGQJJXJheCwgJXIxMAorCW1vdgklcjEyLCAlcmF4CisJYWRjCSVyZHgsICVyY3gKKwltdWwJJXI4CQkJQyByaCAqIEI1bW9kYgorCW1vdgklcjEwLCAlcjkKKwltb3YJJXJjeCwgJXI4CitMKG0wKToJYWRkCSVyYXgsICVyOQorCWFkYwklcmR4LCAlcjgKK0wobTEpOglzdWIJJDQsICVyc2kKKwlqYQlMKHRvcCkKKworTChlbmQpOgltb3YJOCglcjE0KSwgUjMyKCVyc2kpCisJbW92CSVyOCwgJXJheAorCW11bAklcjExCisJbW92CSVyYXgsICVyOAorCWFkZAklcjksICVyOAorCWFkYwkkMCwgJXJkeAorCXhvcglSMzIoJXJjeCksIFIzMiglcmN4KQorCXN1YglSMzIoJXJzaSksIFIzMiglcmN4KQorCW1vdgklcjgsICVyZGkKKwlzaHIJUjgoJXJjeCksICVyZGkKKwltb3YJUjMyKCVyc2kpLCBSMzIoJXJjeCkKKwlzYWwJUjgoJXJjeCksICVyZHgKKwlvcgklcmR4LCAlcmRpCisJbW92CSVyZGksICVyYXgKKwltdWxxCSglcjE0KQorCW1vdgklcjE1LCAlcmJ4CisJbW92CSVyYXgsICVyOQorCXNhbAlSOCglcmN4KSwgJXI4CisJaW5jCSVyZGkKKwlhZGQJJXI4LCAlcjkKKwlhZGMJJXJkaSwgJXJkeAorCWltdWwJJXJieCwgJXJkeAorCXN1YgklcmR4LCAlcjgKKwlsZWEJKCVyOCwlcmJ4KSwgJXJheAorCWNtcAklcjgsICVyOQorCWNtb3ZjCSVyYXgsICVyOAorCW1vdgklcjgsICVyYXgKKwlzdWIJJXJieCwgJXJheAorCWNtb3ZjCSVyOCwgJXJheAorCXNocglSOCglcmN4KSwgJXJheAorCXBvcAklcmJ4CisJcG9wCSVyYnAKKwlwb3AJJXIxMgorCXBvcAklcjEzCisJcG9wCSVyMTQKKwlwb3AJJXIxNQorCUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCisKKwlBTElHTigxNikKK1BST0xPR1VFKG1wbl9tb2RfMXNfNHBfY3BzKQorCUZVTkNfRU5UUlkoMikKKwlwdXNoCSVyYnAKKwlic3IJJXJzaSwgJXJjeAorCXB1c2gJJXJieAorCW1vdgklcmRpLCAlcmJ4CisJcHVzaAklcjEyCisJeG9yCSQ2MywgUjMyKCVyY3gpCisJbW92CSVyc2ksICVyMTIKKwltb3YJUjMyKCVyY3gpLCBSMzIoJXJicCkJQyBwcmVzZXJ2ZSBjbnQgb3ZlciBjYWxsCisJc2FsCVI4KCVyY3gpLCAlcjEyCQlDIGIgPDwgY250CitJRlNURChgCW1vdgklcjEyLCAlcmRpCScpCUMgcGFzcyBwYXJhbWV0ZXIKK0lGRE9TKGAJbW92CSVyMTIsICVyY3gJJykJQyBwYXNzIHBhcmFtZXRlcgorSUZET1MoYAlzdWIJJDMyLCAlcnNwCScpCisJQVNTRVJUKG56LCBgdGVzdCAkMTUsICVyc3AnKQorCUNBTEwoCW1wbl9pbnZlcnRfbGltYikKK0lGRE9TKGAJYWRkCSQzMiwgJXJzcAknKQorCW1vdgklcjEyLCAlcjgKKwltb3YJJXJheCwgJXIxMQorCW1vdgklcmF4LCAoJXJieCkJCUMgc3RvcmUgYmkKKwltb3YJJXJicCwgOCglcmJ4KQkJQyBzdG9yZSBjbnQKKwluZWcJJXI4CisJbW92CVIzMiglcmJwKSwgUjMyKCVyY3gpCisJbW92CSQxLCBSMzIoJXJzaSkKK2lmZGVmKGBTSExEX1NMT1cnLGAKKwlzaGwJUjgoJXJjeCksICVyc2kKKwluZWcJUjMyKCVyY3gpCisJbW92CSVyYXgsICVyYnAKKwlzaHIJUjgoJXJjeCksICVyYXgKKwlvcgklcmF4LCAlcnNpCisJbW92CSVyYnAsICVyYXgKKwluZWcJUjMyKCVyY3gpCisnLGAKKwlzaGxkCVI4KCVyY3gpLCAlcmF4LCAlcnNpCUMgRklYTUU6IFNsb3cgb24gQXRvbSBhbmQgTmFubworJykKKwlpbXVsCSVyOCwgJXJzaQorCW11bAklcnNpCisKKwlhZGQJJXJzaSwgJXJkeAorCXNocglSOCglcmN4KSwgJXJzaQorCW1vdgklcnNpLCAxNiglcmJ4KQkJQyBzdG9yZSBCMW1vZGIKKworCW5vdAklcmR4CisJaW11bAklcjEyLCAlcmR4CisJbGVhCSglcmR4LCVyMTIpLCAlcnNpCisJY21wCSVyZHgsICVyYXgKKwljbW92bmMJJXJkeCwgJXJzaQorCW1vdgklcjExLCAlcmF4CisJbXVsCSVyc2kKKworCWFkZAklcnNpLCAlcmR4CisJc2hyCVI4KCVyY3gpLCAlcnNpCisJbW92CSVyc2ksIDI0KCVyYngpCQlDIHN0b3JlIEIybW9kYgorCisJbm90CSVyZHgKKwlpbXVsCSVyMTIsICVyZHgKKwlsZWEJKCVyZHgsJXIxMiksICVyc2kKKwljbXAJJXJkeCwgJXJheAorCWNtb3ZuYwklcmR4LCAlcnNpCisJbW92CSVyMTEsICVyYXgKKwltdWwJJXJzaQorCisJYWRkCSVyc2ksICVyZHgKKwlzaHIJUjgoJXJjeCksICVyc2kKKwltb3YJJXJzaSwgMzIoJXJieCkJCUMgc3RvcmUgQjNtb2RiCisKKwlub3QJJXJkeAorCWltdWwJJXIxMiwgJXJkeAorCWxlYQkoJXJkeCwlcjEyKSwgJXJzaQorCWNtcAklcmR4LCAlcmF4CisJY21vdm5jCSVyZHgsICVyc2kKKwltb3YJJXIxMSwgJXJheAorCW11bAklcnNpCisKKwlhZGQJJXJzaSwgJXJkeAorCXNocglSOCglcmN4KSwgJXJzaQorCW1vdgklcnNpLCA0MCglcmJ4KQkJQyBzdG9yZSBCNG1vZGIKKworCW5vdAklcmR4CisJaW11bAklcjEyLCAlcmR4CisJYWRkCSVyZHgsICVyMTIKKwljbXAJJXJkeCwgJXJheAorCWNtb3ZuYwklcmR4LCAlcjEyCisKKwlzaHIJUjgoJXJjeCksICVyMTIKKwltb3YJJXIxMiwgNDgoJXJieCkJCUMgc3RvcmUgQjVtb2RiCisKKwlwb3AJJXIxMgorCXBvcAklcmJ4CisJcG9wCSVyYnAKKwlGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvbW9kXzM0bHN1YjEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvbW9kXzM0bHN1YjEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NDIxYTYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9tb2RfMzRsc3ViMS5hc20KQEAgLTAsMCArMSwyMTUgQEAKK2RubCAgQU1ENjQgbXBuX21vZF8zNGxzdWIxIC0tIHJlbWFpbmRlciBtb2R1bG8gMl40OC0xLgorCitkbmwgIENvcHlyaWdodCAyMDAwLTIwMDIsIDIwMDQsIDIwMDUsIDIwMDcsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitkbmwgIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MJICAgIGN5Y2xlcy9saW1iCitDIEFNRCBLOCxLOQkgMC42NwkgICAwLjU4MyBpcyBwb3NzaWJsZSB3aXRoIHplcm8tcmVnIGluc3RlYWQgb2YgJDAsIDQtd2F5CitDIEFNRCBLMTAJIDAuNjcJICAgdGhpcyBzZWVtcyBoYXJkIHRvIGJlYXQKK0MgQU1EIGJkMQkgMQorQyBBTUQgYmQyCSAxCitDIEFNRCBiZDMJID8KK0MgQU1EIGJkNAkgPworQyBBTUQgemVuCSAwLjYyCitDIEFNRCBib2JjYXQJIDEuMDcKK0MgQU1EIGphZ3VhcgkgMQorQyBJbnRlbCBQNAkgNy4zNQkgICB0ZXJyaWJsZSwgdXNlIG9sZCBjb2RlCitDIEludGVsIGNvcmUyCSAxLjI1CSAgIDErZXBzaWxvbiB3aXRoIGh1Z2UgdW5yb2xsaW5nCitDIEludGVsIE5ITQkgMS4xNQkgICB0aGlzIHNlZW1zIGhhcmQgdG8gYmVhdAorQyBJbnRlbCBTQlIJIDAuOTMKK0MgSW50ZWwgSUJSCSAwLjkzCitDIEludGVsIEhXTAkgMC44MgorQyBJbnRlbCBCV0wJIDAuNjQKK0MgSW50ZWwgU0tZCSAwLjYwCitDIEludGVsIGF0b20JIDIuNQorQyBJbnRlbCBTTE0gICAgICAxLjU5CitDIFZJQSBuYW5vCSAxLjI1CSAgIHRoaXMgc2VlbXMgaGFyZCB0byBiZWF0CisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBhcCcsCSVyZGkpCitkZWZpbmUoYG4nLAklcnNpKQorCitDIG1wX2xpbWJfdCBtcG5fbW9kXzM0bHN1YjEgKG1wX3NyY3B0ciB1cCwgbXBfc2l6ZV90IG4pCisKK0MgVE9ETworQyAgKiBSZXZpZXcgZmVlZC1pbiBhbmQgd2luZC1kb3duIGNvZGUuCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDMyKQorUFJPTE9HVUUobXBuX21vZF8zNGxzdWIxKQorCUZVTkNfRU5UUlkoMikKKworCW1vdgkkMHgwMDAwRkZGRkZGRkZGRkZGLCAlcjExCisKKwltb3YJKGFwKSwgJXJheAorCisJY21wCSQyLCAlcnNpCisJamEJTChndDIpCisKKwlqYglMKG9uZSkKKworCW1vdgk4KGFwKSwgJXJzaQorCW1vdgklcmF4LCAlcmR4CisJc2hyCSQ0OCwgJXJheAkJQyBzcmNbMF0gbG93CisKKwlhbmQJJXIxMSwgJXJkeAkJQyBzcmNbMF0gaGlnaAorCWFkZAklcmR4LCAlcmF4CisJbW92CVIzMiglcnNpKSwgUjMyKCVyZHgpCisKKwlzaHIJJDMyLCAlcnNpCQlDIHNyY1sxXSBoaWdoCisJYWRkCSVyc2ksICVyYXgKKworCXNobAkkMTYsICVyZHgJCUMgc3JjWzFdIGxvdworCWFkZAklcmR4LCAlcmF4CitMKG9uZSk6CUZVTkNfRVhJVCgpCisJcmV0CisKKworQyBEb24ndCBjaGFuZ2UgdGhpcywgdGhlIHdpbmQtZG93biBjb2RlIGlzIG5vdCBhYmxlIHRvIGhhbmRsZSBncmVhdGVyIHZhbHVlcworZGVmaW5lKFVOUk9MTCwzKQorCitMKGd0Mik6CW1vdgk4KGFwKSwgJXJjeAorCW1vdgkxNihhcCksICVyZHgKKwl4b3IJJXI5LCAlcjkKKwlhZGQJJDI0LCBhcAorCXN1YgkkZXZhbChVTlJPTEwqMyszKSwgJXJzaQorCWpjCUwoZW5kKQorCUFMSUdOKDE2KQorTCh0b3ApOgorCWFkZAkoYXApLCAlcmF4CisJYWRjCTgoYXApLCAlcmN4CisJYWRjCTE2KGFwKSwgJXJkeAorCWFkYwkkMCwgJXI5Citmb3Jsb29wKGksMSxVTlJPTEwtMSxgZG5sCisJYWRkCWV2YWwoaSoyNCkoYXApLCAlcmF4CisJYWRjCWV2YWwoaSoyNCs4KShhcCksICVyY3gKKwlhZGMJZXZhbChpKjI0KzE2KShhcCksICVyZHgKKwlhZGMJJDAsICVyOQorJylkbmwKKwlhZGQJJGV2YWwoVU5ST0xMKjI0KSwgYXAKKwlzdWIJJGV2YWwoVU5ST0xMKjMpLCAlcnNpCisJam5jCUwodG9wKQorCitMKGVuZCk6CisJbGVhCUwodGFiKSglcmlwKSwgJXI4CitpZmRlZihgUElDJywKK2AJbW92c2xxCTM2KCVyOCwlcnNpLDQpLCAlcjEwCisJYWRkCSVyMTAsICVyOAorCWptcAkqJXI4CisnLGAKKwlqbXAJKjcyKCVyOCwlcnNpLDgpCisnKQorCUpVTVBUQUJTRUNUCisJQUxJR04oOCkKK0wodGFiKToJSk1QRU5UKAlMKDApLCBMKHRhYikpCisJSk1QRU5UKAlMKDEpLCBMKHRhYikpCisJSk1QRU5UKAlMKDIpLCBMKHRhYikpCisJSk1QRU5UKAlMKDMpLCBMKHRhYikpCisJSk1QRU5UKAlMKDQpLCBMKHRhYikpCisJSk1QRU5UKAlMKDUpLCBMKHRhYikpCisJSk1QRU5UKAlMKDYpLCBMKHRhYikpCisJSk1QRU5UKAlMKDcpLCBMKHRhYikpCisJSk1QRU5UKAlMKDgpLCBMKHRhYikpCisJVEVYVAorCitMKDYpOglhZGQJKGFwKSwgJXJheAorCWFkYwk4KGFwKSwgJXJjeAorCWFkYwkxNihhcCksICVyZHgKKwlhZGMJJDAsICVyOQorCWFkZAkkMjQsIGFwCitMKDMpOglhZGQJKGFwKSwgJXJheAorCWFkYwk4KGFwKSwgJXJjeAorCWFkYwkxNihhcCksICVyZHgKKwlqbXAJTChjajEpCisKK0woNyk6CWFkZAkoYXApLCAlcmF4CisJYWRjCTgoYXApLCAlcmN4CisJYWRjCTE2KGFwKSwgJXJkeAorCWFkYwkkMCwgJXI5CisJYWRkCSQyNCwgYXAKK0woNCk6CWFkZAkoYXApLCAlcmF4CisJYWRjCTgoYXApLCAlcmN4CisJYWRjCTE2KGFwKSwgJXJkeAorCWFkYwkkMCwgJXI5CisJYWRkCSQyNCwgYXAKK0woMSk6CWFkZAkoYXApLCAlcmF4CisJYWRjCSQwLCAlcmN4CisJam1wCUwoY2oyKQorCitMKDgpOglhZGQJKGFwKSwgJXJheAorCWFkYwk4KGFwKSwgJXJjeAorCWFkYwkxNihhcCksICVyZHgKKwlhZGMJJDAsICVyOQorCWFkZAkkMjQsIGFwCitMKDUpOglhZGQJKGFwKSwgJXJheAorCWFkYwk4KGFwKSwgJXJjeAorCWFkYwkxNihhcCksICVyZHgKKwlhZGMJJDAsICVyOQorCWFkZAkkMjQsIGFwCitMKDIpOglhZGQJKGFwKSwgJXJheAorCWFkYwk4KGFwKSwgJXJjeAorCitMKGNqMik6CWFkYwkkMCwgJXJkeAorTChjajEpOglhZGMJJDAsICVyOQorTCgwKToJYWRkCSVyOSwgJXJheAorCWFkYwkkMCwgJXJjeAorCWFkYwkkMCwgJXJkeAorCWFkYwkkMCwgJXJheAorCisJbW92CSVyYXgsICVyZGkJCUMgMG1vZDMKKwlzaHIJJDQ4LCAlcmF4CQlDIDBtb2QzIGhpZ2gKKworCWFuZAklcjExLCAlcmRpCQlDIDBtb2QzIGxvdworCW1vdglSMzIoJXJjeCksIFIzMiglcjEwKQlDIDFtb2QzCisKKwlzaHIJJDMyLCAlcmN4CQlDIDFtb2QzIGhpZ2gKKworCWFkZAklcmRpLCAlcmF4CQlDIGFwcGx5IDBtb2QzIGxvdworCW1vdnp3bAklZHgsIFIzMiglcmRpKQkJQyAybW9kMworCXNobAkkMTYsICVyMTAJCUMgMW1vZDMgbG93CisKKwlhZGQJJXJjeCwgJXJheAkJQyBhcHBseSAxbW9kMyBoaWdoCisJc2hyCSQxNiwgJXJkeAkJQyAybW9kMyBoaWdoCisKKwlhZGQJJXIxMCwgJXJheAkJQyBhcHBseSAxbW9kMyBsb3cKKwlzaGwJJDMyLCAlcmRpCQlDIDJtb2QzIGxvdworCisJYWRkCSVyZHgsICVyYXgJCUMgYXBwbHkgMm1vZDMgaGlnaAorCWFkZAklcmRpLCAlcmF4CQlDIGFwcGx5IDJtb2QzIGxvdworCisJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L21vZGUxby5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9tb2RlMW8uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZDJiMDgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9tb2RlMW8uYXNtCkBAIC0wLDAgKzEsMTcxIEBACitkbmwgIEFNRDY0IG1wbl9tb2RleGFjdF8xX29kZCAtLSBIZW5zZWwgbm9ybSByZW1haW5kZXIuCisKK2RubCAgQ29weXJpZ2h0IDIwMDAtMjAwNiwgMjAxMSwgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBBTUQgSzgsSzkJMTAKK0MgQU1EIEsxMAkxMAorQyBJbnRlbCBQNAkzMworQyBJbnRlbCBjb3JlMgkxMworQyBJbnRlbCBjb3JlaQkxNC41CitDIEludGVsIGF0b20JMzUKK0MgVklBIG5hbm8JID8KKworCitDIFRoZSBkZXBlbmRlbnQgY2hhaW4gaW4gdGhlIG1haW4gbG9vcCBpcworQworQyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjeWNsZXMKK0MJc3ViCSVyZHgsICVyYXgJMQorQwlpbXVsCSVyOSwgJXJheAk0CitDCW11bAklcjgJCTUKK0MJCQkgICAgICAtLS0tCitDICAgICAgIHRvdGFsCQkgICAgICAgMTAKK0MKK0MgVGhlIG1vdiBsb2FkIGZyb20gc3JjIHNlZW1zIHRvIG5lZWQgdG8gYmUgc2NoZWR1bGVkIGJhY2sgYmVmb3JlIHRoZSBqeiB0bworQyBhY2hpZXZlIHRoaXMgc3BlZWQsIG91dC1vZi1vcmRlciBleGVjdXRpb24gYXBwYXJlbnRseSBjYW4ndCBjb21wbGV0ZWx5IGhpZGUKK0MgdGhlIGxhdGVuY3kgb3RoZXJ3aXNlLgorQworQyBUaGUgbD1zcmNbaV0tY2JpdCBzdGVwIGlzIHJvdGF0ZWQgYmFjayB0b28sIHNpbmNlIHRoYXQgYWxsb3dzIHVzIHRvIGF2b2lkIGl0CitDIGZvciB0aGUgZmlyc3QgaXRlcmF0aW9uICh3aGVyZSB0aGVyZSdzIG5vIGNiaXQpLgorQworQyBUaGUgY29kZSBhbGlnbm1lbnQgdXNlZCAoMzItYnl0ZSkgZm9yIHRoZSBsb29wIGFsc28gc2VlbXMgbmVjZXNzYXJ5LiAgV2l0aG91dAorQyB0aGF0IHRoZSBub24tUElDIGNhc2UgaGFzIGFkYyBjcm9zc2luZyB0aGUgMHg2MCBvZmZzZXQsIGFwcGFyZW50bHkgbWFraW5nIGl0CitDIHJ1biBhdCAxMSBjeWNsZXMgaW5zdGVhZCBvZiAxMC4KKworCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigzMikKK1BST0xPR1VFKG1wbl9tb2RleGFjdF8xX29kZCkKKwlGVU5DX0VOVFJZKDMpCisJbW92CSQwLCBSMzIoJXJjeCkKK0lGRE9TKGAJam1wCUwoZW50KQkJJykKKworUFJPTE9HVUUobXBuX21vZGV4YWN0XzFjX29kZCkKKwlGVU5DX0VOVFJZKDQpCitMKGVudCk6CisJQyByZGkJc3JjCisJQyByc2kJc2l6ZQorCUMgcmR4CWRpdmlzb3IKKwlDIHJjeAljYXJyeQorCisJbW92CSVyZHgsICVyOAkJQyBkCisJc2hyCVIzMiglcmR4KQkJQyBkLzIKKworCUxFQSgJYmludmVydF9saW1iX3RhYmxlLCAlcjkpCisKKwlhbmQJJDEyNywgUjMyKCVyZHgpCisJbW92CSVyY3gsICVyMTAJCUMgaW5pdGlhbCBjYXJyeQorCisJbW92emJsCSglcjksJXJkeCksIFIzMiglcmR4KQlDIGludiA4IGJpdHMKKworCW1vdgkoJXJkaSksICVyYXgJCUMgc3JjWzBdCisJbGVhCSglcmRpLCVyc2ksOCksICVyMTEJQyBzcmMgZW5kCisJbW92CSVyOCwgJXJkaQkJQyBkLCBtYWRlIGF2YWlsYWJsZSB0byBpbXVsbAorCisJbGVhCSglcmR4LCVyZHgpLCBSMzIoJXJjeCkJQyAyKmludgorCWltdWwJUjMyKCVyZHgpLCBSMzIoJXJkeCkJQyBpbnYqaW52CisKKwluZWcJJXJzaQkJCUMgLXNpemUKKworCWltdWwJUjMyKCVyZGkpLCBSMzIoJXJkeCkJQyBpbnYqaW52KmQKKworCXN1YglSMzIoJXJkeCksIFIzMiglcmN4KQlDIGludiA9IDIqaW52IC0gaW52KmludipkLCAxNiBiaXRzCisKKwlsZWEJKCVyY3gsJXJjeCksIFIzMiglcmR4KQlDIDIqaW52CisJaW11bAlSMzIoJXJjeCksIFIzMiglcmN4KQlDIGludippbnYKKworCWltdWwJUjMyKCVyZGkpLCBSMzIoJXJjeCkJQyBpbnYqaW52KmQKKworCXN1YglSMzIoJXJjeCksIFIzMiglcmR4KQlDIGludiA9IDIqaW52IC0gaW52KmludipkLCAzMiBiaXRzCisJeG9yCVIzMiglcmN4KSwgUjMyKCVyY3gpCUMgaW5pdGlhbCBjYml0CisKKwlsZWEJKCVyZHgsJXJkeCksICVyOQlDIDIqaW52CisJaW11bAklcmR4LCAlcmR4CQlDIGludippbnYKKworCWltdWwJJXI4LCAlcmR4CQlDIGludippbnYqZAorCisJc3ViCSVyZHgsICVyOQkJQyBpbnYgPSAyKmludiAtIGludippbnYqZCwgNjQgYml0cworCW1vdgklcjEwLCAlcmR4CQlDIGluaXRpYWwgY2xpbWIKKworCUFTU0VSVChlLGAJQyBkKmludiA9PSAxIG1vZCAyXjY0CisJbW92CSVyOCwgJXIxMAorCWltdWwJJXI5LCAlcjEwCisJY21wCSQxLCAlcjEwJykKKworCWluYwklcnNpCisJanoJTChvbmUpCisKKworCUFMSUdOKDE2KQorTCh0b3ApOgorCUMgcmF4CWwgPSBzcmNbaV0tY2JpdAorCUMgcmN4CW5ldyBjYml0LCAwIG9yIDEKKwlDIHJkeAljbGltYiwgaGlnaCBvZiBsYXN0IHByb2R1Y3QKKwlDIHJzaQljb3VudGVyLCBsaW1icywgbmVnYXRpdmUKKwlDIHJkaQorCUMgcjgJZGl2aXNvcgorCUMgcjkJaW52ZXJzZQorCUMgcjExCXNyYyBlbmQgcHRyCisKKwlzdWIJJXJkeCwgJXJheAkJQyBsID0gc3JjW2ldLWNiaXQgLSBjbGltYgorCisJYWRjCSQwLCAlcmN4CQlDIG1vcmUgY2JpdAorCWltdWwJJXI5LCAlcmF4CQlDIHEgPSBsICogaW52ZXJzZQorCisJbXVsCSVyOAkJCUMgY2xpbWIgPSBoaWdoIChxICogZCkKKworCW1vdgkoJXIxMSwlcnNpLDgpLCAlcmF4CUMgc3JjW2krMV0KKwlzdWIJJXJjeCwgJXJheAkJQyBuZXh0IGwgPSBzcmNbaSsxXSAtIGNiaXQKKwlzZXRjCVI4KCVyY3gpCQlDIG5ldyBjYml0CisKKwlpbmMJJXJzaQorCWpueglMKHRvcCkKKworCitMKG9uZSk6CisJc3ViCSVyZHgsICVyYXgJCUMgbCA9IHNyY1tpXS1jYml0IC0gY2xpbWIKKworCWFkYwkkMCwgJXJjeAkJQyBtb3JlIGNiaXQKKwlpbXVsCSVyOSwgJXJheAkJQyBxID0gbCAqIGludmVyc2UKKworCW11bAklcjgJCQlDIGNsaW1iID0gaGlnaCAocSAqIGQpCisKKwlsZWEJKCVyY3gsJXJkeCksICVyYXgJQyBjbGltYitjYml0CisJRlVOQ19FWElUKCkKKwlyZXQKKworRVBJTE9HVUUobXBuX21vZGV4YWN0XzFjX29kZCkKK0VQSUxPR1VFKG1wbl9tb2RleGFjdF8xX29kZCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L211bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L211bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWJhODliCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvbXVsXzEuYXNtCkBAIC0wLDAgKzEsMTkyIEBACitkbmwgIEFNRDY0IG1wbl9tdWxfMS4KKworZG5sICBDb3B5cmlnaHQgMjAwMy0yMDA1LCAyMDA3LCAyMDA4LCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBBTUQgSzgsSzkgICAgICAyLjU0CitDIEFNRCBLMTAgICAgICAgIDIuNTQKK0MgQU1EIGJ1bGwgICAgICAgNC45OAorQyBBTUQgcGlsZSAgICAgICA0LjgwCitDIEFNRCBzdGVhbQorQyBBTUQgZXhjYXZhdG9yCitDIEFNRCBib2JjYXQgICAgIDUuMzcKK0MgQU1EIGphZ3VhciAgICAgNi4xNgorQyBJbnRlbCBQNCAgICAgIDEyLjYKK0MgSW50ZWwgY29yZTIgICAgNC4wNQorQyBJbnRlbCBOSE0gICAgICA0LjAKK0MgSW50ZWwgU0JSICAgICAgMi45MQorQyBJbnRlbCBJQlIgICAgICAyLjczCitDIEludGVsIEhXTCAgICAgIDIuNDQKK0MgSW50ZWwgQldMICAgICAgMi4zOQorQyBJbnRlbCBTS0wgICAgICAyLjQ0CitDIEludGVsIGF0b20gICAgMTkuOAorQyBJbnRlbCBTTE0gICAgICA5LjAKK0MgVklBIG5hbm8gICAgICAgNC4yNQorCitDIFRoZSBsb29wIG9mIHRoaXMgY29kZSBpcyB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgYSBjb2RlIGdlbmVyYXRpb24gYW5kCitDIG9wdGltaXphdGlvbiB0b29sIHN1aXRlIHdyaXR0ZW4gYnkgRGF2aWQgSGFydmV5IGFuZCBUb3Jiam9ybiBHcmFubHVuZC4KKworQyBUT0RPCitDICAqIFRoZSBsb29wIGlzIGdyZWF0LCBidXQgdGhlIHByb2xvZ3VlIGFuZCBlcGlsb2d1ZSBjb2RlIHdhcyBxdWlja2x5IHdyaXR0ZW4uCitDICAgIFR1bmUgaXQhCisKK2RlZmluZShgcnAnLCAgICAgIGAlcmRpJykgICBDIHJjeAorZGVmaW5lKGB1cCcsICAgICAgYCVyc2knKSAgIEMgcmR4CitkZWZpbmUoYG5fcGFyYW0nLCBgJXJkeCcpICAgQyByOAorZGVmaW5lKGB2bCcsICAgICAgYCVyY3gnKSAgIEMgcjkKKworZGVmaW5lKGBuJywgICAgICAgYCVyMTEnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitJRkRPUyhgCWRlZmluZShgdXAnLCBgYCVyc2knJykJJykgZG5sCitJRkRPUyhgCWRlZmluZShgcnAnLCBgYCVyY3gnJykJJykgZG5sCitJRkRPUyhgCWRlZmluZShgdmwnLCBgYCVyOScnKQknKSBkbmwKK0lGRE9TKGAJZGVmaW5lKGByOScsIGBgcmRpJycpCScpIGRubAorSUZET1MoYAlkZWZpbmUoYG4nLCAgYGAlcjgnJykJJykgZG5sCitJRkRPUyhgCWRlZmluZShgcjgnLCBgYHIxMScnKQknKSBkbmwKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMTYpCitQUk9MT0dVRShtcG5fbXVsXzFjKQorSUZET1MoYGBwdXNoCSVyc2kJCScnKQorSUZET1MoYGBwdXNoCSVyZGkJCScnKQorSUZET1MoYGBtb3YJJXJkeCwgJXJzaQknJykKKwlwdXNoCSVyYngKK0lGU1REKGAJbW92CSVyOCwgJXIxMCcpCitJRkRPUyhgCW1vdgk2NCglcnNwKSwgJXIxMCcpCUMgNDAgKyAzKjggICgzIHB1c2ggaW5zbnMpCisJam1wCUwoY29tbW9uKQorRVBJTE9HVUUoKQorCitQUk9MT0dVRShtcG5fbXVsXzEpCitJRkRPUyhgYHB1c2gJJXJzaQkJJycpCitJRkRPUyhgYHB1c2gJJXJkaQkJJycpCitJRkRPUyhgYG1vdgklcmR4LCAlcnNpCScnKQorCisJcHVzaAklcmJ4CisJeG9yCSVyMTAsICVyMTAKK0woY29tbW9uKToKKwltb3YJKHVwKSwgJXJheAkJQyByZWFkIGZpcnN0IHUgbGltYiBlYXJseQorSUZTVEQoYAltb3YJbl9wYXJhbSwgJXJieCAgICcpCUMgbW92ZSBhd2F5IG4gZnJvbSByZHgsIG11bCB1c2VzIGl0CitJRkRPUyhgCW1vdgluLCAlcmJ4ICAgICAgICAgJykKKwltdWwJdmwKK0lGU1REKGAJbW92CSVyYngsIG4gICAgICAgICAnKQorCisJYWRkCSVyMTAsICVyYXgKKwlhZGMJJDAsICVyZHgKKworCWFuZAkkMywgUjMyKCVyYngpCisJanoJTChiMCkKKwljbXAJJDIsIFIzMiglcmJ4KQorCWp6CUwoYjIpCisJamcJTChiMykKKworTChiMSk6CWRlYwluCisJam5lCUwoZ3QxKQorCW1vdgklcmF4LCAocnApCisJam1wCUwocmV0KQorTChndDEpOglsZWEJOCh1cCxuLDgpLCB1cAorCWxlYQktOChycCxuLDgpLCBycAorCW5lZwluCisJeG9yCSVyMTAsICVyMTAKKwl4b3IJUjMyKCVyYngpLCBSMzIoJXJieCkKKwltb3YJJXJheCwgJXI5CisJbW92CSh1cCxuLDgpLCAlcmF4CisJbW92CSVyZHgsICVyOAorCWptcAlMKEwxKQorCitMKGIwKToJbGVhCSh1cCxuLDgpLCB1cAorCWxlYQktMTYocnAsbiw4KSwgcnAKKwluZWcJbgorCXhvcgklcjEwLCAlcjEwCisJbW92CSVyYXgsICVyOAorCW1vdgklcmR4LCAlcmJ4CisJam1wCSBMKEwwKQorCitMKGIzKToJbGVhCS04KHVwLG4sOCksIHVwCisJbGVhCS0yNChycCxuLDgpLCBycAorCW5lZwluCisJbW92CSVyYXgsICVyYngKKwltb3YJJXJkeCwgJXIxMAorCWptcAlMKEwzKQorCitMKGIyKToJbGVhCS0xNih1cCxuLDgpLCB1cAorCWxlYQktMzIocnAsbiw4KSwgcnAKKwluZWcJbgorCXhvcgklcjgsICVyOAorCXhvcglSMzIoJXJieCksIFIzMiglcmJ4KQorCW1vdgklcmF4LCAlcjEwCisJbW92CTI0KHVwLG4sOCksICVyYXgKKwltb3YJJXJkeCwgJXI5CisJam1wCUwoTDIpCisKKwlBTElHTigxNikKK0wodG9wKToJbW92CSVyMTAsIChycCxuLDgpCisJYWRkCSVyYXgsICVyOQorCW1vdgkodXAsbiw4KSwgJXJheAorCWFkYwklcmR4LCAlcjgKKwltb3YJJDAsIFIzMiglcjEwKQorTChMMSk6CW11bAl2bAorCW1vdgklcjksIDgocnAsbiw4KQorCWFkZAklcmF4LCAlcjgKKwlhZGMJJXJkeCwgJXJieAorTChMMCk6CW1vdgk4KHVwLG4sOCksICVyYXgKKwltdWwJdmwKKwltb3YJJXI4LCAxNihycCxuLDgpCisJYWRkCSVyYXgsICVyYngKKwlhZGMJJXJkeCwgJXIxMAorTChMMyk6CW1vdgkxNih1cCxuLDgpLCAlcmF4CisJbXVsCXZsCisJbW92CSVyYngsIDI0KHJwLG4sOCkKKwltb3YJJDAsIFIzMiglcjgpCQlDIHplcm8KKwltb3YJJXI4LCAlcmJ4CQlDIHplcm8KKwlhZGQJJXJheCwgJXIxMAorCW1vdgkyNCh1cCxuLDgpLCAlcmF4CisJbW92CSVyOCwgJXI5CQlDIHplcm8KKwlhZGMJJXJkeCwgJXI5CitMKEwyKToJbXVsCXZsCisJYWRkCSQ0LCBuCisJanMJIEwodG9wKQorCisJbW92CSVyMTAsIChycCxuLDgpCisJYWRkCSVyYXgsICVyOQorCWFkYwklcjgsICVyZHgKKwltb3YJJXI5LCA4KHJwLG4sOCkKKwlhZGQJJXI4LCAlcmR4CitMKHJldCk6CW1vdgklcmR4LCAlcmF4CisKKwlwb3AJJXJieAorSUZET1MoYGBwb3AJJXJkaQkJJycpCitJRkRPUyhgYHBvcAklcnNpCQknJykKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L211bF8yLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L211bF8yLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjQzMTNiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvbXVsXzIuYXNtCkBAIC0wLDAgKzEsMjA0IEBACitkbmwgIEFNRDY0IG1wbl9tdWxfMiAtLSBNdWx0aXBseSBhbiBuLWxpbWIgdmVjdG9yIHdpdGggYSAyLWxpbWIgdmVjdG9yIGFuZAorZG5sICBzdG9yZSB0aGUgcmVzdWx0IGluIGEgdGhpcmQgbGltYiB2ZWN0b3IuCisKK2RubCAgQ29weXJpZ2h0IDIwMDgsIDIwMTEsIDIwMTIsIDIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIEFNRCBLOCxLOSAgICAgIDQuNTMKK0MgQU1EIEsxMCAgICAgICAgNC41MworQyBBTUQgYnVsbCAgICAgICA5Ljc2ICAgMTAuMzcKK0MgQU1EIHBpbGUgICAgICAgOS4yMgorQyBBTUQgc3RlYW0KK0MgQU1EIGV4Y2F2YXRvcgorQyBBTUQgYm9iY2F0ICAgIDExLjMKK0MgQU1EIGphZ3VhciAgICAxMS45CitDIEludGVsIFA0ICAgICAgMjUuMAorQyBJbnRlbCBjb3JlMiAgICA4LjA1CitDIEludGVsIE5ITSAgICAgIDcuNzIKK0MgSW50ZWwgU0JSICAgICAgNi4zMworQyBJbnRlbCBJQlIgICAgICA2LjE1CitDIEludGVsIEhXTCAgICAgIDYuMDAKK0MgSW50ZWwgQldMICAgICAgNC40NAorQyBJbnRlbCBTS0wgICAgICA0LjU0CitDIEludGVsIGF0b20gICAgMzkuMAorQyBJbnRlbCBTTE0gICAgIDI0LjAKK0MgVklBIG5hbm8KKworQyBUaGlzIGNvZGUgaXMgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGEgY29kZSBnZW5lcmF0aW9uIGFuZCBvcHRpbWl6YXRpb24gdG9vbAorQyBzdWl0ZSB3cml0dGVuIGJ5IERhdmlkIEhhcnZleSBhbmQgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK0MgVE9ETworQyAgKiBXb3JrIG9uIGZlZWQtaW4gYW5kIHdpbmQtZG93biBjb2RlLgorQyAgKiBDb252ZXJ0ICJtb3YgJDAiIHRvICJ4b3IiLgorQyAgKiBBZGp1c3QgaW5pdGlhbCBsZWEgdG8gc2F2ZSBzb21lIGJ5dGVzLgorQyAgKiBQZXJoYXBzIGFkanVzdCBuIGZyb20gbl9wYXJhbSYzIHZhbHVlPworQyAgKiBSZXBsYWNlIHdpdGggMi4yNSBjL2wgc2VxdWVuY2UuCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsCSBgJXJkaScpCitkZWZpbmUoYHVwJywJIGAlcnNpJykKK2RlZmluZShgbl9wYXJhbScsYCVyZHgnKQorZGVmaW5lKGB2cCcsCSBgJXJjeCcpCisKK2RlZmluZShgdjAnLCBgJXI4JykKK2RlZmluZShgdjEnLCBgJXI5JykKK2RlZmluZShgdzAnLCBgJXJieCcpCitkZWZpbmUoYHcxJywgYCVyY3gnKQorZGVmaW5lKGB3MicsIGAlcmJwJykKK2RlZmluZShgdzMnLCBgJXIxMCcpCitkZWZpbmUoYG4nLCAgYCVyMTEnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigxNikKK1BST0xPR1VFKG1wbl9tdWxfMikKKwlGVU5DX0VOVFJZKDQpCisJcHVzaAklcmJ4CisJcHVzaAklcmJwCisKKwltb3YJKHZwKSwgdjAKKwltb3YJOCh2cCksIHYxCisKKwltb3YJKHVwKSwgJXJheAorCisJbW92CW5fcGFyYW0sIG4KKwluZWcJbgorCWxlYQktOCh1cCxuX3BhcmFtLDgpLCB1cAorCWxlYQktOChycCxuX3BhcmFtLDgpLCBycAorCisJYW5kCSQzLCBSMzIobl9wYXJhbSkKKwlqeglMKG0ycDApCisJY21wCSQyLCBSMzIobl9wYXJhbSkKKwlqYwlMKG0ycDEpCisJanoJTChtMnAyKQorTChtMnAzKToKKwltdWwJdjAKKwl4b3IJUjMyKHczKSwgUjMyKHczKQorCW1vdgklcmF4LCB3MQorCW1vdgklcmR4LCB3MgorCW1vdgk4KHVwLG4sOCksICVyYXgKKwlhZGQJJC0xLCBuCisJbXVsCXYxCisJYWRkCSVyYXgsIHcyCisJam1wCUwobTIzKQorTChtMnAwKToKKwltdWwJdjAKKwl4b3IJUjMyKHcyKSwgUjMyKHcyKQorCW1vdgklcmF4LCB3MAorCW1vdgklcmR4LCB3MQorCWptcAlMKG0yMCkKK0wobTJwMSk6CisJbXVsCXYwCisJeG9yCVIzMih3MyksIFIzMih3MykKKwl4b3IJUjMyKHcwKSwgUjMyKHcwKQorCXhvcglSMzIodzEpLCBSMzIodzEpCisJYWRkCSQxLCBuCisJam1wCUwobTJ0b3ApCitMKG0ycDIpOgorCW11bAl2MAorCXhvcglSMzIodzApLCBSMzIodzApCisJeG9yCVIzMih3MSksIFIzMih3MSkKKwltb3YJJXJheCwgdzIKKwltb3YJJXJkeCwgdzMKKwltb3YJOCh1cCxuLDgpLCAlcmF4CisJYWRkCSQtMiwgbgorCWptcAlMKG0yMikKKworCisJQUxJR04oMzIpCitMKG0ydG9wKToKKwlhZGQJJXJheCwgdzMKKwlhZGMJJXJkeCwgdzAKKwltb3YJMCh1cCxuLDgpLCAlcmF4CisJYWRjCSQwLCBSMzIodzEpCisJbW92CSQwLCBSMzIodzIpCisJbXVsCXYxCisJYWRkCSVyYXgsIHcwCisJbW92CXczLCAwKHJwLG4sOCkKKwlhZGMJJXJkeCwgdzEKKwltb3YJOCh1cCxuLDgpLCAlcmF4CisJbXVsCXYwCisJYWRkCSVyYXgsIHcwCisJYWRjCSVyZHgsIHcxCisJYWRjCSQwLCBSMzIodzIpCitMKG0yMCk6CW1vdgk4KHVwLG4sOCksICVyYXgKKwltdWwJdjEKKwlhZGQJJXJheCwgdzEKKwlhZGMJJXJkeCwgdzIKKwltb3YJMTYodXAsbiw4KSwgJXJheAorCW1vdgkkMCwgUjMyKHczKQorCW11bAl2MAorCWFkZAklcmF4LCB3MQorCW1vdgkxNih1cCxuLDgpLCAlcmF4CisJYWRjCSVyZHgsIHcyCisJYWRjCSQwLCBSMzIodzMpCisJbXVsCXYxCisJYWRkCSVyYXgsIHcyCisJbW92CXcwLCA4KHJwLG4sOCkKK0wobTIzKToJYWRjCSVyZHgsIHczCisJbW92CTI0KHVwLG4sOCksICVyYXgKKwltdWwJdjAKKwltb3YJJDAsIFIzMih3MCkKKwlhZGQJJXJheCwgdzIKKwlhZGMJJXJkeCwgdzMKKwltb3YJdzEsIDE2KHJwLG4sOCkKKwltb3YJMjQodXAsbiw4KSwgJXJheAorCW1vdgkkMCwgUjMyKHcxKQorCWFkYwkkMCwgUjMyKHcwKQorTChtMjIpOgltdWwJdjEKKwlhZGQJJXJheCwgdzMKKwltb3YJdzIsIDI0KHJwLG4sOCkKKwlhZGMJJXJkeCwgdzAKKwltb3YJMzIodXAsbiw4KSwgJXJheAorCW11bAl2MAorCWFkZAkkNCwgbgorCWpzCUwobTJ0b3ApCisKKworCWFkZAklcmF4LCB3MworCWFkYwklcmR4LCB3MAorCWFkYwkkMCwgUjMyKHcxKQorCW1vdgkodXApLCAlcmF4CisJbXVsCXYxCisJbW92CXczLCAocnApCisJYWRkCSVyYXgsIHcwCisJYWRjCSVyZHgsIHcxCisJbW92CXcwLCA4KHJwKQorCW1vdgl3MSwgJXJheAorCisJcG9wCSVyYnAKKwlwb3AJJXJieAorCUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9tdWx4L2FkeC9hZGRtdWxfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9tdWx4L2FkeC9hZGRtdWxfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNlYjYxMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L211bHgvYWR4L2FkZG11bF8xLmFzbQpAQCAtMCwwICsxLDE1NyBAQAorZG5sICBBTUQ2NCBtcG5fYWRkbXVsXzEgZm9yIENQVXMgd2l0aCBtdWx4IGFuZCBhZHguCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqw7ZybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAxMiwgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIKK0MgQU1EIEs4LEs5CSAtCitDIEFNRCBLMTAJIC0KK0MgQU1EIGJkMQkgLQorQyBBTUQgYmQyCSAtCitDIEFNRCBiZDMJIC0KK0MgQU1EIGJkNAkgLQorQyBBTUQgemVuCSA/CitDIEFNRCBidDEJIC0KK0MgQU1EIGJ0MgkgLQorQyBJbnRlbCBQNAkgLQorQyBJbnRlbCBQTlIJIC0KK0MgSW50ZWwgTkhNCSAtCitDIEludGVsIFNCUgkgLQorQyBJbnRlbCBJQlIJIC0KK0MgSW50ZWwgSFdMCSAtCitDIEludGVsIEJXTAkgPworQyBJbnRlbCBTS0wJID8KK0MgSW50ZWwgYXRvbQkgLQorQyBJbnRlbCBTTE0JIC0KK0MgVklBIG5hbm8JIC0KKworZGVmaW5lKGBycCcsICAgICAgYCVyZGknKQlkbmwgcmN4CitkZWZpbmUoYHVwJywgICAgICBgJXJzaScpCWRubCByZHgKK2RlZmluZShgbl9wYXJhbScsIGAlcmR4JykJZG5sIHI4CitkZWZpbmUoYHYwX3BhcmFtJyxgJXJjeCcpCWRubCByOQorCitkZWZpbmUoYG4nLCAgICAgICBgJXJjeCcpCWRubAorZGVmaW5lKGB2MCcsICAgICAgYCVyZHgnKQlkbmwKKworQyBUZXN0aW5nIG1lY2hhbmlzbSBmb3IgcnVubmluZyB0aGlzIG9uIG9sZGVyIEFNRDY0IHByb2Nlc3NvcnMKK2lmZWxzZShGQUtFX01VTFhBRFgsMSxgCisgIGluY2x1ZGUoQ09ORklHX1RPUF9TUkNESVJgL21wbi94ODZfNjQvbWlzc2luZy1jYWxsLm00JykKKycsYAorICBkZWZpbmUoYGFkb3gnLAlgYGFkb3gnCSQxLCAkMicpCisgIGRlZmluZShgYWRjeCcsCWBgYWRjeCcJJDEsICQyJykKKyAgZGVmaW5lKGBtdWx4JywJYGBtdWx4JwkkMSwgJDIsICQzJykKKycpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX2FkZG11bF8xKQorCW1vdgkodXApLCAlcjgKKworCXB1c2gJJXJieAorCXB1c2gJJXIxMgorCXB1c2gJJXIxMworCisJbGVhCSh1cCxuX3BhcmFtLDgpLCB1cAorCWxlYQktMTYocnAsbl9wYXJhbSw4KSwgcnAKKwltb3YJUjMyKG5fcGFyYW0pLCBSMzIoJXJheCkKKwl4Y2hnCXYwX3BhcmFtLCB2MAkJQyBGSVhNRTogaXMgdGhpcyBpbnNuIGZhc3Q/CisKKwluZWcJbgorCisJYW5kCSQzLCBSOCglcmF4KQorCWp6CUwoYjApCisJY21wCSQyLCBSOCglcmF4KQorCWpsCUwoYjEpCisJanoJTChiMikKKworTChiMyk6CW11bHgoCSh1cCxuLDgpLCAlcjExLCAlcjEwKQorCW11bHgoCTgodXAsbiw4KSwgJXIxMywgJXIxMikKKwltdWx4KAkxNih1cCxuLDgpLCAlcmJ4LCAlcmF4KQorCWRlYwluCisJam1wCUwobG8zKQorCitMKGIwKToJbXVseCgJKHVwLG4sOCksICVyOSwgJXI4KQorCW11bHgoCTgodXAsbiw4KSwgJXIxMSwgJXIxMCkKKwltdWx4KAkxNih1cCxuLDgpLCAlcjEzLCAlcjEyKQorCWptcAlMKGxvMCkKKworTChiMik6CW11bHgoCSh1cCxuLDgpLCAlcjEzLCAlcjEyKQorCW11bHgoCTgodXAsbiw4KSwgJXJieCwgJXJheCkKKwlsZWEJMihuKSwgbgorCWpyY3h6CUwod2QyKQorTChndDIpOgltdWx4KAkodXAsbiw4KSwgJXI5LCAlcjgpCisJam1wCUwobG8yKQorCitMKGIxKToJYW5kCVI4KCVyYXgpLCBSOCglcmF4KQorCW11bHgoCSh1cCxuLDgpLCAlcmJ4LCAlcmF4KQorCWxlYQkxKG4pLCBuCisJanJjeHoJTCh3ZDEpCisJbXVseCgJKHVwLG4sOCksICVyOSwgJXI4KQorCW11bHgoCTgodXAsbiw4KSwgJXIxMSwgJXIxMCkKKwlqbXAJTChsbzEpCisKK0woZW5kKToJYWRjeCgJJXIxMCwgJXIxMykKKwltb3YJJXIxMSwgLTgocnApCitMKHdkMik6CWFkb3goCShycCksICVyMTMpCisJYWRjeCgJJXIxMiwgJXJieCkKKwltb3YJJXIxMywgKHJwKQorTCh3ZDEpOglhZG94KAk4KHJwKSwgJXJieCkKKwlhZGN4KAklcmN4LCAlcmF4KQorCWFkb3goCSVyY3gsICVyYXgpCisJbW92CSVyYngsIDgocnApCisJcG9wCSVyMTMKKwlwb3AJJXIxMgorCXBvcAklcmJ4CisJcmV0CisKK0wodG9wKToJanJjeHoJTChlbmQpCisJbXVseCgJKHVwLG4sOCksICVyOSwgJXI4KQorCWFkY3goCSVyMTAsICVyMTMpCisJbW92CSVyMTEsIC04KHJwLG4sOCkKK0wobG8yKToJYWRveCgJKHJwLG4sOCksICVyMTMpCisJbXVseCgJOCh1cCxuLDgpLCAlcjExLCAlcjEwKQorCWFkY3goCSVyMTIsICVyYngpCisJbW92CSVyMTMsIChycCxuLDgpCitMKGxvMSk6CWFkb3goCTgocnAsbiw4KSwgJXJieCkKKwltdWx4KAkxNih1cCxuLDgpLCAlcjEzLCAlcjEyKQorCWFkY3goCSVyYXgsICVyOSkKKwltb3YJJXJieCwgOChycCxuLDgpCitMKGxvMCk6CWFkb3goCTE2KHJwLG4sOCksICVyOSkKKwltdWx4KAkyNCh1cCxuLDgpLCAlcmJ4LCAlcmF4KQorCWFkY3goCSVyOCwgJXIxMSkKKwltb3YJJXI5LCAxNihycCxuLDgpCitMKGxvMyk6CWFkb3goCTI0KHJwLG4sOCksICVyMTEpCisJbGVhCTQobiksIG4KKwlqbXAJTCh0b3ApCitFUElMT0dVRSgpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L25hbm8vY29weWQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvbmFuby9jb3B5ZC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBkYzU0YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L25hbm8vY29weWQuYXNtCkBAIC0wLDAgKzEsMzcgQEAKK2RubCAgWDg2LTY0IG1wbl9jb3B5ZCBvcHRpbWlzZWQgZm9yIEludGVsIFNhbmR5IEJyaWRnZS4KKworZG5sICBDb3B5cmlnaHQgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9jb3B5ZCkKK2luY2x1ZGVfbXBuKGB4ODZfNjQvZmFzdHNzZS9jb3B5ZC1wYWxpZ25yLmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9uYW5vL2NvcHlpLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L25hbm8vY29weWkuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljMjZlMDAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9uYW5vL2NvcHlpLmFzbQpAQCAtMCwwICsxLDM3IEBACitkbmwgIFg4Ni02NCBtcG5fY29weWkgb3B0aW1pc2VkIGZvciBJbnRlbCBTYW5keSBCcmlkZ2UuCisKK2RubCAgQ29weXJpZ2h0IDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fY29weWkpCitpbmNsdWRlX21wbihgeDg2XzY0L2Zhc3Rzc2UvY29weWktcGFsaWduci5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvbmFuby9kaXZlXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvbmFuby9kaXZlXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YTA3NjMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9uYW5vL2RpdmVfMS5hc20KQEAgLTAsMCArMSwxNjYgQEAKK2RubCAgQU1ENjQgbXBuX2RpdmV4YWN0XzEgLS0gbXBuIGJ5IGxpbWIgZXhhY3QgZGl2aXNpb24uCisKK2RubCAgQ29weXJpZ2h0IDIwMDEsIDIwMDIsIDIwMDQtMjAwNiwgMjAxMC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQwkgICAgIGN5Y2xlcy9saW1iCitDCSAgICAgICBub3JtCSAgICAgICB1bm9ybQorQyBBTUQgSzgsSzkJMTEJCTExCitDIEFNRCBLMTAJMTEJCTExCitDIEludGVsIFA0CSA/CitDIEludGVsIGNvcmUyCTEzLjUJCTEzLjI1CitDIEludGVsIGNvcmVpCTE0LjI1CitDIEludGVsIGF0b20JMzQJCTM2CitDIFZJQSBuYW5vCTE5LjI1CQkxOS4yNQorCisKK0MgSU5QVVQgUEFSQU1FVEVSUworQyBycAkJcmRpCitDIHVwCQlyc2kKK0MgbgkJcmR4CitDIGRpdmlzb3IJcmN4CisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX2RpdmV4YWN0XzEpCisJRlVOQ19FTlRSWSg0KQorCXB1c2gJJXJieAorCisJbW92CSVyY3gsICVyYXgKKwl4b3IJUjMyKCVyY3gpLCBSMzIoJXJjeCkJQyBzaGlmdCBjb3VudAorCW1vdgklcmR4LCAlcjgKKworCWJ0CSQwLCBSMzIoJXJheCkKKwlqYwlMKG9kZCkJCQlDIHNraXAgYnNmcSB1bmxlc3MgZGl2aXNvciBpcyBldmVuCisJYnNmCSVyYXgsICVyY3gKKwlzaHIJUjgoJXJjeCksICVyYXgKK0wob2RkKToJbW92CSVyYXgsICVyYngKKwlzaHIJUjMyKCVyYXgpCisJYW5kCSQxMjcsIFIzMiglcmF4KQkJQyBkLzIsIDcgYml0cworCisJTEVBKAliaW52ZXJ0X2xpbWJfdGFibGUsICVyZHgpCisKKwltb3Z6YmwJKCVyZHgsJXJheCksIFIzMiglcmF4KQlDIGludiA4IGJpdHMKKworCW1vdgklcmJ4LCAlcjExCQlDIGQgd2l0aG91dCB0d29zCisKKwlsZWEJKCVyYXgsJXJheCksIFIzMiglcmR4KQlDIDIqaW52CisJaW11bAlSMzIoJXJheCksIFIzMiglcmF4KQlDIGludippbnYKKwlpbXVsCVIzMiglcmJ4KSwgUjMyKCVyYXgpCUMgaW52KmludipkCisJc3ViCVIzMiglcmF4KSwgUjMyKCVyZHgpCUMgaW52ID0gMippbnYgLSBpbnYqaW52KmQsIDE2IGJpdHMKKworCWxlYQkoJXJkeCwlcmR4KSwgUjMyKCVyYXgpCUMgMippbnYKKwlpbXVsCVIzMiglcmR4KSwgUjMyKCVyZHgpCUMgaW52KmludgorCWltdWwJUjMyKCVyYngpLCBSMzIoJXJkeCkJQyBpbnYqaW52KmQKKwlzdWIJUjMyKCVyZHgpLCBSMzIoJXJheCkJQyBpbnYgPSAyKmludiAtIGludippbnYqZCwgMzIgYml0cworCisJbGVhCSglcmF4LCVyYXgpLCAlcjEwCUMgMippbnYKKwlpbXVsCSVyYXgsICVyYXgJCUMgaW52KmludgorCWltdWwJJXJieCwgJXJheAkJQyBpbnYqaW52KmQKKwlzdWIJJXJheCwgJXIxMAkJQyBpbnYgPSAyKmludiAtIGludippbnYqZCwgNjQgYml0cworCisJbGVhCSglcnNpLCVyOCw4KSwgJXJzaQlDIHVwIGVuZAorCWxlYQktOCglcmRpLCVyOCw4KSwgJXJkaQlDIHJwIGVuZAorCW5lZwklcjgJCQlDIC1uCisKKwltb3YJKCVyc2ksJXI4LDgpLCAlcmF4CUMgdXBbMF0KKworCWluYwklcjgKKwlqeglMKG9uZSkKKworCXRlc3QJUjMyKCVyY3gpLCBSMzIoJXJjeCkKKwlqbnoJTCh1bm9ybSkJCUMgYnJhbmNoIGlmIGNvdW50ICE9IDAKKwl4b3IJUjMyKCVyYngpLCBSMzIoJXJieCkKKwlqbXAJTChuZW50KQorCisJQUxJR04oOCkKK0wobnRvcCk6bXVsCSVyMTEJCQlDIGNhcnJ5IGxpbWIgaW4gcmR4CTAgMTAKKwltb3YJLTgoJXJzaSwlcjgsOCksICVyYXgJQworCXN1YgklcmJ4LCAlcmF4CQlDIGFwcGx5IGNhcnJ5IGJpdAorCXNldGMJJWJsCQkJQworCXN1YgklcmR4LCAlcmF4CQlDIGFwcGx5IGNhcnJ5IGxpbWIJNQorCWFkYwkkMCwgJXJieAkJQwkJCTYKK0wobmVudCk6aW11bAklcjEwLCAlcmF4CQlDCQkJNgorCW1vdgklcmF4LCAoJXJkaSwlcjgsOCkJQworCWluYwklcjgJCQlDCisJam56CUwobnRvcCkKKworCW1vdgktOCglcnNpKSwgJXI5CQlDIHVwIGhpZ2ggbGltYgorCWptcAlMKGNvbSkKKworTCh1bm9ybSk6CisJbW92CSglcnNpLCVyOCw4KSwgJXI5CUMgdXBbMV0KKwlzaHIJUjgoJXJjeCksICVyYXgJCUMKKwluZWcJUjMyKCVyY3gpCisJc2hsCVI4KCVyY3gpLCAlcjkJCUMKKwluZWcJUjMyKCVyY3gpCisJb3IJJXI5LCAlcmF4CisJeG9yCVIzMiglcmJ4KSwgUjMyKCVyYngpCisJam1wCUwodWVudCkKKworCUFMSUdOKDgpCitMKHV0b3ApOm11bAklcjExCQkJQyBjYXJyeSBsaW1iIGluIHJkeAkwIDEwCisJbW92CSglcnNpLCVyOCw4KSwgJXJheAlDCisJc2hsCVI4KCVyY3gpLCAlcmF4CQlDCisJbmVnCVIzMiglcmN4KQorCW9yCSVyOSwgJXJheAorCXN1YgklcmJ4LCAlcmF4CQlDIGFwcGx5IGNhcnJ5IGJpdAorCXNldGMJJWJsCQkJQworCXN1YgklcmR4LCAlcmF4CQlDIGFwcGx5IGNhcnJ5IGxpbWIJNQorCWFkYwkkMCwgJXJieAkJQwkJCTYKK0wodWVudCk6aW11bAklcjEwLCAlcmF4CQlDCQkJNgorCW1vdgkoJXJzaSwlcjgsOCksICVyOQlDCisJc2hyCVI4KCVyY3gpLCAlcjkJCUMKKwluZWcJUjMyKCVyY3gpCisJbW92CSVyYXgsICglcmRpLCVyOCw4KQlDCisJaW5jCSVyOAkJCUMKKwlqbnoJTCh1dG9wKQorCitMKGNvbSk6CW11bAklcjExCQkJQyBjYXJyeSBsaW1iIGluIHJkeAorCXN1YgklcmJ4LCAlcjkJCUMgYXBwbHkgY2FycnkgYml0CisJc3ViCSVyZHgsICVyOQkJQyBhcHBseSBjYXJyeSBsaW1iCisJaW11bAklcjEwLCAlcjkKKwltb3YJJXI5LCAoJXJkaSkKKwlwb3AJJXJieAorCUZVTkNfRVhJVCgpCisJcmV0CisKK0wob25lKToJc2hyCVI4KCVyY3gpLCAlcmF4CisJaW11bAklcjEwLCAlcmF4CisJbW92CSVyYXgsICglcmRpKQorCXBvcAklcmJ4CisJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L25hbm8vZ2NkXzExLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L25hbm8vZ2NkXzExLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzIzMDkzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvbmFuby9nY2RfMTEuYXNtCkBAIC0wLDAgKzEsMzcgQEAKK2RubCAgQU1ENjQgbXBuX2djZF8xMS4KKworZG5sICBDb3B5cmlnaHQgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9nY2RfMTEpCitpbmNsdWRlX21wbihgeDg2XzY0L2NvcmUyL2djZF8xMS5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvbmFuby9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9uYW5vL2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGU2OWRiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvbmFuby9nbXAtbXBhcmFtLmgKQEAgLTAsMCArMSwyNDMgQEAKKy8qIFZJQSBOYW5vIGdtcC1tcGFyYW0uaCAtLSBDb21waWxlci9tYWNoaW5lIHBhcmFtZXRlciBoZWFkZXIgZmlsZS4KKworQ29weXJpZ2h0IDE5OTEsIDE5OTMsIDE5OTQsIDIwMDAtMjAxMCwgMjAxMiwgMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNkZWZpbmUgR01QX0xJTUJfQklUUyA2NAorI2RlZmluZSBHTVBfTElNQl9CWVRFUyA4CisKKyNkZWZpbmUgU0hMRF9TTE9XIDEKKyNkZWZpbmUgU0hSRF9TTE9XIDEKKworLyogMTYwMCBNSHogTmFubyAyeHh4ICovCisvKiBGRlQgdHVuaW5nIGxpbWl0ID0gMjUwMDAwMDAgKi8KKy8qIEdlbmVyYXRlZCBieSB0dW5ldXAuYywgMjAxNC0wMy0xMiwgZ2NjIDQuMiAqLworCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNAorI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgMgorI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAxOAorI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICAgICAyMAorI2RlZmluZSBQUkVJTlZfTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgOAorI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgICAgICAgICAgICAgICAgMSAgLyogbmF0aXZlICovCisjZGVmaW5lIERJVl9RUl8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAxCisjZGVmaW5lIERJVl9RUl8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVl9RUl8yX1BJMl9USFJFU0hPTEQgICAgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgICAgICAgMjIKKworI2RlZmluZSBNVUxfVE9PTTIyX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyNworI2RlZmluZSBNVUxfVE9PTTMzX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzOAorI2RlZmluZSBNVUxfVE9PTTQ0X1RIUkVTSE9MRCAgICAgICAgICAgICAgIDMyNAorI2RlZmluZSBNVUxfVE9PTTZIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDQ1MAorI2RlZmluZSBNVUxfVE9PTThIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDYzMgorCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTQzX1RIUkVTSE9MRCAgICAgIDczCisjZGVmaW5lIE1VTF9UT09NMzJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgMjA3CisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTUzX1RIUkVTSE9MRCAgICAgMjExCisjZGVmaW5lIE1VTF9UT09NNDJfVE9fVE9PTTYzX1RIUkVTSE9MRCAgICAgMjE5CisjZGVmaW5lIE1VTF9UT09NNDNfVE9fVE9PTTU0X1RIUkVTSE9MRCAgICAgMzE1CisKKyNkZWZpbmUgU1FSX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNTIKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNzMKKyNkZWZpbmUgU1FSX1RPT000X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzODcKKyNkZWZpbmUgU1FSX1RPT002X1RIUkVTSE9MRCAgICAgICAgICAgICAgICA2NjIKKyNkZWZpbmUgU1FSX1RPT004X1RIUkVTSE9MRCAgICAgICAgICAgICAgICA3ODEKKworI2RlZmluZSBNVUxNSURfVE9PTTQyX1RIUkVTSE9MRCAgICAgICAgICAgICAzMgorCisjZGVmaW5lIE1VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIFNRUk1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE1CisKKyNkZWZpbmUgTVVMX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICAzNzYgIC8qIGsgPSA1ICovCisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICAzNzYsIDV9LCB7ICAgICAxOSwgNn0sIHsgICAgIDEwLCA1fSwgeyAgICAgMjEsIDZ9LCBcCisgICAgeyAgICAgMjMsIDd9LCB7ICAgICAxMiwgNn0sIHsgICAgIDI1LCA3fSwgeyAgICAgMjEsIDh9LCBcCisgICAgeyAgICAgMTEsIDd9LCB7ICAgICAyNCwgOH0sIHsgICAgIDEzLCA3fSwgeyAgICAgMjcsIDh9LCBcCisgICAgeyAgICAgMTUsIDd9LCB7ICAgICAzMSwgOH0sIHsgICAgIDE5LCA3fSwgeyAgICAgMzksIDh9LCBcCisgICAgeyAgICAgMjEsIDl9LCB7ICAgICAxMSwgOH0sIHsgICAgIDI3LCA5fSwgeyAgICAgMTUsIDh9LCBcCisgICAgeyAgICAgMzUsIDl9LCB7ICAgICAxOSwgOH0sIHsgICAgIDQxLCA5fSwgeyAgICAgMjMsIDh9LCBcCisgICAgeyAgICAgNDksIDl9LCB7ICAgICAyNywxMH0sIHsgICAgIDE1LCA5fSwgeyAgICAgNDMsMTB9LCBcCisgICAgeyAgICAgMjMsIDl9LCB7ICAgICA1NSwxMX0sIHsgICAgIDE1LDEwfSwgeyAgICAgMzEsIDl9LCBcCisgICAgeyAgICAgNjcsMTB9LCB7ICAgICAzOSwgOX0sIHsgICAgIDgzLDEwfSwgeyAgICAgNDcsIDl9LCBcCisgICAgeyAgICAgOTUsMTB9LCB7ICAgICA3OSwxMX0sIHsgICAgIDQ3LDEwfSwgeyAgICAxMDMsMTJ9LCBcCisgICAgeyAgICAgMzEsMTF9LCB7ICAgICA2MywxMH0sIHsgICAgMTQzLDExfSwgeyAgICAgNzksMTB9LCBcCisgICAgeyAgICAxNTksIDl9LCB7ICAgIDMxOSwxMH0sIHsgICAgMTc1LDExfSwgeyAgICAgOTUsIDl9LCBcCisgICAgeyAgICAzODMsIDh9LCB7ICAgIDc2NywxMH0sIHsgICAgMjA3LDExfSwgeyAgICAxMTEsMTJ9LCBcCisgICAgeyAgICAgNjMsMTF9LCB7ICAgIDEyNywxMH0sIHsgICAgMjU1LDExfSwgeyAgICAxNDMsIDl9LCBcCisgICAgeyAgICA1NzUsIDh9LCB7ICAgMTE1MSwxMH0sIHsgICAgMzAzLDExfSwgeyAgICAxNTksMTB9LCBcCisgICAgeyAgICAzMTksIDl9LCB7ICAgIDYzOSwgOH0sIHsgICAxMjc5LDEwfSwgeyAgICAzMzUsMTJ9LCBcCisgICAgeyAgICAgOTUsMTF9LCB7ICAgIDE5MSwxMH0sIHsgICAgMzgzLCA5fSwgeyAgICA3NjcsMTF9LCBcCisgICAgeyAgICAyMDcsMTB9LCB7ICAgIDQxNSwgOX0sIHsgICAgODMxLCA4fSwgeyAgIDE2NjMsMTB9LCBcCisgICAgeyAgICA0NDcsMTN9LCB7ICAgICA2MywxMn0sIHsgICAgMTI3LDExfSwgeyAgICAyNTUsMTB9LCBcCisgICAgeyAgICA1MTEsIDl9LCB7ICAgMTAyMywxMX0sIHsgICAgMjcxLDEwfSwgeyAgICA1NDMsIDl9LCBcCisgICAgeyAgIDEwODcsMTB9LCB7ICAgIDU3NSwgOX0sIHsgICAxMjE1LDEyfSwgeyAgICAxNTksMTF9LCBcCisgICAgeyAgICAzMTksMTB9LCB7ICAgIDYzOSwgOX0sIHsgICAxMjc5LDExfSwgeyAgICAzMzUsMTB9LCBcCisgICAgeyAgICA2NzEsIDl9LCB7ICAgMTM0MywxMX0sIHsgICAgMzUxLDEwfSwgeyAgICA3MDMsIDl9LCBcCisgICAgeyAgIDE0MDcsMTJ9LCB7ICAgIDE5MSwxMX0sIHsgICAgMzgzLDEwfSwgeyAgICA3NjcsIDl9LCBcCisgICAgeyAgIDE1MzUsMTB9LCB7ICAgIDgzMSwgOX0sIHsgICAxNjYzLDEyfSwgeyAgICAyMjMsMTF9LCBcCisgICAgeyAgICA0NDcsMTB9LCB7ICAgIDg5NSwxM30sIHsgICAgMTI3LDEyfSwgeyAgICAyNTUsMTF9LCBcCisgICAgeyAgICA1MTEsMTB9LCB7ICAgMTAyMywxMX0sIHsgICAgNTQzLDEwfSwgeyAgIDEwODcsMTJ9LCBcCisgICAgeyAgICAyODcsMTF9LCB7ICAgIDU3NSwxMH0sIHsgICAxMTUxLDExfSwgeyAgICA2MDcsMTB9LCBcCisgICAgeyAgIDEyMTUsMTJ9LCB7ICAgIDMxOSwxMX0sIHsgICAgNjM5LDEwfSwgeyAgIDEyNzksMTF9LCBcCisgICAgeyAgICA2NzEsMTB9LCB7ICAgMTM0MywxMn0sIHsgICAgMzUxLDExfSwgeyAgICA3MDMsMTB9LCBcCisgICAgeyAgIDE0MDcsMTN9LCB7ICAgIDE5MSwxMn0sIHsgICAgMzgzLDExfSwgeyAgICA3NjcsMTB9LCBcCisgICAgeyAgIDE1MzUsMTJ9LCB7ICAgIDQxNSwxMX0sIHsgICAgODMxLDEwfSwgeyAgIDE2NjMsMTJ9LCBcCisgICAgeyAgICA0NDcsMTF9LCB7ICAgIDg5NSwxMH0sIHsgICAxNzkxLDE0fSwgeyAgICAxMjcsMTN9LCBcCisgICAgeyAgICAyNTUsMTJ9LCB7ICAgIDUxMSwxMX0sIHsgICAxMDIzLDEyfSwgeyAgICA1NDMsMTF9LCBcCisgICAgeyAgIDEwODcsMTJ9LCB7ICAgIDU3NSwxMX0sIHsgICAxMTUxLDEyfSwgeyAgICA2MDcsMTF9LCBcCisgICAgeyAgIDEyMTUsMTN9LCB7ICAgIDMxOSwxMn0sIHsgICAgNjM5LDExfSwgeyAgIDEyNzksMTJ9LCBcCisgICAgeyAgICA2NzEsMTF9LCB7ICAgMTM0MywxMn0sIHsgICAgNzAzLDExfSwgeyAgIDE0MDcsMTN9LCBcCisgICAgeyAgICAzODMsMTJ9LCB7ICAgIDc2NywxMX0sIHsgICAxNTM1LDEyfSwgeyAgICA4MzEsMTF9LCBcCisgICAgeyAgIDE2NjMsMTN9LCB7ICAgIDQ0NywxMn0sIHsgICAgODk1LDExfSwgeyAgIDE3OTEsMTN9LCBcCisgICAgeyAgICA1MTEsMTJ9LCB7ICAgMTAyMywxMX0sIHsgICAyMDQ3LDEyfSwgeyAgIDEwODcsMTN9LCBcCisgICAgeyAgICA1NzUsMTJ9LCB7ICAgMTE1MSwxMX0sIHsgICAyMzAzLDEyfSwgeyAgIDEyMTUsMTN9LCBcCisgICAgeyAgICA2MzksMTJ9LCB7ICAgMTI3OSwxMX0sIHsgICAyNTU5LDEyfSwgeyAgIDEzNDMsMTN9LCBcCisgICAgeyAgICA3MDMsMTJ9LCB7ICAgMTQwNywxNH0sIHsgICAgMzgzLDEzfSwgeyAgICA3NjcsMTJ9LCBcCisgICAgeyAgIDE1MzUsMTN9LCB7ICAgIDgzMSwxMn0sIHsgICAxNjYzLDEzfSwgeyAgICA4OTUsMTJ9LCBcCisgICAgeyAgIDE3OTEsMTN9LCB7ICAgIDk1OSwxNH0sIHsgICAgNTExLDEzfSwgeyAgIDEwMjMsMTJ9LCBcCisgICAgeyAgIDIwNDcsMTN9LCB7ICAgMTA4NywxMn0sIHsgICAyMTc1LDEzfSwgeyAgIDExNTEsMTJ9LCBcCisgICAgeyAgIDIzMDMsMTN9LCB7ICAgMTIxNSwxNH0sIHsgICAgNjM5LDEzfSwgeyAgIDEyNzksMTJ9LCBcCisgICAgeyAgIDI1NTksMTN9LCB7ICAgMTQwNywxMn0sIHsgICAyODE1LDEzfSwgeyAgIDE0NzEsMTR9LCBcCisgICAgeyAgICA3NjcsMTN9LCB7ICAgMTUzNSwxMn0sIHsgICAzMDcxLDEzfSwgeyAgIDE2NjMsMTR9LCBcCisgICAgeyAgICA4OTUsMTN9LCB7ICAgMTc5MSwxMn0sIHsgICAzNTgzLDEzfSwgeyAgIDE5MTksMTV9LCBcCisgICAgeyAgICA1MTEsMTR9LCB7ICAgMTAyMywxM30sIHsgICAyMDQ3LDEyfSwgeyAgIDQwOTUsMTN9LCBcCisgICAgeyAgIDIxNzUsMTR9LCB7ICAgMTE1MSwxM30sIHsgICAyMzAzLDEyfSwgeyAgIDQ2MDcsMTN9LCBcCisgICAgeyAgIDI0MzEsMTR9LCB7ICAgMTI3OSwxM30sIHsgICAyNTU5LDEyfSwgeyAgIDUxMTksMTR9LCBcCisgICAgeyAgIDE0MDcsMTN9LCB7ICAgMjgxNSwxMn0sIHsgICA1NjMxLDE1fSwgeyAgMzI3NjgsMTZ9LCBcCisgICAgeyAgNjU1MzYsMTd9LCB7IDEzMTA3MiwxOH0sIHsgMjYyMTQ0LDE5fSwgeyA1MjQyODgsMjB9LCBcCisgICAgezEwNDg1NzYsMjF9LCB7MjA5NzE1MiwyMn0sIHs0MTk0MzA0LDIzfSwgezgzODg2MDgsMjR9IH0KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTNfU0laRSAyMjQKKyNkZWZpbmUgTVVMX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDM1MjAKKworI2RlZmluZSBTUVJfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDM0MCAgLyogayA9IDUgKi8KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDM0MCwgNX0sIHsgICAgIDE5LCA2fSwgeyAgICAgMTAsIDV9LCB7ICAgICAyMSwgNn0sIFwKKyAgICB7ICAgICAyMSwgN30sIHsgICAgIDExLCA2fSwgeyAgICAgMjMsIDd9LCB7ICAgICAyMSwgOH0sIFwKKyAgICB7ICAgICAxMSwgN30sIHsgICAgIDI0LCA4fSwgeyAgICAgMTMsIDd9LCB7ICAgICAyNywgOH0sIFwKKyAgICB7ICAgICAxNSwgN30sIHsgICAgIDMxLCA4fSwgeyAgICAgMjEsIDl9LCB7ICAgICAxMSwgOH0sIFwKKyAgICB7ICAgICAyNywgOX0sIHsgICAgIDE1LCA4fSwgeyAgICAgMzMsIDl9LCB7ICAgICAxOSwgOH0sIFwKKyAgICB7ICAgICA0MSwgOX0sIHsgICAgIDIzLCA4fSwgeyAgICAgNDcsIDl9LCB7ICAgICAyNywxMH0sIFwKKyAgICB7ICAgICAxNSwgOX0sIHsgICAgIDM5LDEwfSwgeyAgICAgMjMsIDl9LCB7ICAgICA1MSwxMX0sIFwKKyAgICB7ICAgICAxNSwxMH0sIHsgICAgIDMxLCA5fSwgeyAgICAgNjcsMTB9LCB7ICAgICAzOSwgOX0sIFwKKyAgICB7ICAgICA3OSwxMH0sIHsgICAgIDQ3LCA5fSwgeyAgICAgOTUsMTB9LCB7ICAgICA1NSwxMX0sIFwKKyAgICB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA5fSwgeyAgICAxMjcsMTB9LCB7ICAgICA3MSwgOX0sIFwKKyAgICB7ICAgIDE0MywxMH0sIHsgICAgIDc5LDExfSwgeyAgICAgNDcsMTB9LCB7ICAgICA5NSwgOX0sIFwKKyAgICB7ICAgIDE5MSwxMH0sIHsgICAgMTAzLDEyfSwgeyAgICAgMzEsMTF9LCB7ICAgICA2MywxMH0sIFwKKyAgICB7ICAgIDEyNywgOX0sIHsgICAgMjU1LDEwfSwgeyAgICAxMzUsIDd9LCB7ICAgMTA4NywgOX0sIFwKKyAgICB7ICAgIDI4NywxMX0sIHsgICAgIDc5LCA5fSwgeyAgICAzMTksIDh9LCB7ICAgIDYzOSwxMH0sIFwKKyAgICB7ICAgIDE2NywxMX0sIHsgICAgIDk1LDEwfSwgeyAgICAxOTEsIDl9LCB7ICAgIDM4MywgOH0sIFwKKyAgICB7ICAgIDc2NywxMX0sIHsgICAgMTExLDEyfSwgeyAgICAgNjMsMTF9LCB7ICAgIDEyNywxMH0sIFwKKyAgICB7ICAgIDI1NSwgOX0sIHsgICAgNTExLCA4fSwgeyAgIDEwMjMsMTB9LCB7ICAgIDI3MSwgOX0sIFwKKyAgICB7ICAgIDU0MywgOH0sIHsgICAxMDg3LDExfSwgeyAgICAxNDMsIDl9LCB7ICAgIDU3NSwgOH0sIFwKKyAgICB7ICAgMTE1MSwxMH0sIHsgICAgMzAzLCA5fSwgeyAgICA2MzksIDh9LCB7ICAgMTI3OSwxMH0sIFwKKyAgICB7ICAgIDMzNSwgOX0sIHsgICAgNjcxLDEwfSwgeyAgICAzNTEsIDl9LCB7ICAgIDcwMywxMn0sIFwKKyAgICB7ICAgICA5NSwxMX0sIHsgICAgMTkxLDEwfSwgeyAgICAzODMsIDl9LCB7ICAgIDc2NywxMX0sIFwKKyAgICB7ICAgIDIwNywxMH0sIHsgICAgNDE1LCA5fSwgeyAgICA4MzEsMTN9LCB7ICAgICA2MywxMn0sIFwKKyAgICB7ICAgIDEyNywxMX0sIHsgICAgMjU1LDEwfSwgeyAgICA1MTEsIDl9LCB7ICAgMTAyMywxMX0sIFwKKyAgICB7ICAgIDI3MSwxMH0sIHsgICAgNTQzLCA5fSwgeyAgIDEwODcsMTB9LCB7ICAgIDU3NSwgOX0sIFwKKyAgICB7ICAgMTE1MSwxMX0sIHsgICAgMzAzLDEwfSwgeyAgICA2MDcsIDl9LCB7ICAgMTIxNSwxMn0sIFwKKyAgICB7ICAgIDE1OSwxMX0sIHsgICAgMzE5LDEwfSwgeyAgICA2MzksIDl9LCB7ICAgMTI3OSwxMH0sIFwKKyAgICB7ICAgIDY3MSwgOX0sIHsgICAxMzQzLDExfSwgeyAgICAzNTEsMTB9LCB7ICAgIDcwMywgOX0sIFwKKyAgICB7ICAgMTQwNywxMn0sIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTB9LCB7ICAgIDc2NywgOX0sIFwKKyAgICB7ICAgMTUzNSwxMX0sIHsgICAgNDE1LDEwfSwgeyAgICA4MzEsIDl9LCB7ICAgMTY2MywxMn0sIFwKKyAgICB7ICAgIDIyMywxMX0sIHsgICAgNDQ3LDEwfSwgeyAgICA5NTksMTN9LCB7ICAgIDEyNywxMn0sIFwKKyAgICB7ICAgIDI1NSwxMX0sIHsgICAgNTExLDEwfSwgeyAgIDEwMjMsMTF9LCB7ICAgIDU0MywxMH0sIFwKKyAgICB7ICAgMTA4NywxMX0sIHsgICAgNTc1LDEwfSwgeyAgIDEyMTUsMTJ9LCB7ICAgIDMxOSwxMX0sIFwKKyAgICB7ICAgIDYzOSwxMH0sIHsgICAxMjc5LDExfSwgeyAgICA2NzEsMTB9LCB7ICAgMTM0MywxMn0sIFwKKyAgICB7ICAgIDM1MSwxMX0sIHsgICAgNzAzLDEwfSwgeyAgIDE0MDcsMTN9LCB7ICAgIDE5MSwxMn0sIFwKKyAgICB7ICAgIDM4MywxMX0sIHsgICAgNzY3LDEwfSwgeyAgIDE1MzUsMTJ9LCB7ICAgIDQxNSwxMX0sIFwKKyAgICB7ICAgIDgzMSwxMH0sIHsgICAxNjYzLDEyfSwgeyAgICA0NDcsMTF9LCB7ICAgIDg5NSwxMH0sIFwKKyAgICB7ICAgMTc5MSwxMn0sIHsgICAgNDc5LDExfSwgeyAgICA5NTksMTR9LCB7ICAgIDEyNywxMn0sIFwKKyAgICB7ICAgIDUxMSwxMX0sIHsgICAxMDIzLDEyfSwgeyAgICA1NDMsMTF9LCB7ICAgMTA4NywxMn0sIFwKKyAgICB7ICAgIDU3NSwxMX0sIHsgICAxMTUxLDEyfSwgeyAgICA2MDcsMTF9LCB7ICAgMTIxNSwxM30sIFwKKyAgICB7ICAgIDMxOSwxMn0sIHsgICAgNjM5LDExfSwgeyAgIDEyNzksMTJ9LCB7ICAgIDY3MSwxMX0sIFwKKyAgICB7ICAgMTM0MywxMn0sIHsgICAgNzAzLDExfSwgeyAgIDE0MDcsMTN9LCB7ICAgIDM4MywxMn0sIFwKKyAgICB7ICAgIDc2NywxMX0sIHsgICAxNTM1LDEyfSwgeyAgICA4MzEsMTF9LCB7ICAgMTY2MywxM30sIFwKKyAgICB7ICAgIDQ0NywxMn0sIHsgICAgODk1LDExfSwgeyAgIDE3OTEsMTJ9LCB7ICAgIDk1OSwxM30sIFwKKyAgICB7ICAgIDUxMSwxMn0sIHsgICAxMDIzLDExfSwgeyAgIDIwNDcsMTJ9LCB7ICAgMTA4NywxM30sIFwKKyAgICB7ICAgIDU3NSwxMn0sIHsgICAxMjE1LDEzfSwgeyAgICA2MzksMTJ9LCB7ICAgMTM0MywxM30sIFwKKyAgICB7ICAgIDcwMywxMn0sIHsgICAxNDA3LDExfSwgeyAgIDI4MTUsMTN9LCB7ICAgIDc2NywxMn0sIFwKKyAgICB7ICAgMTUzNSwxM30sIHsgICAgODMxLDEyfSwgeyAgIDE2NjMsMTN9LCB7ICAgIDg5NSwxMn0sIFwKKyAgICB7ICAgMTc5MSwxM30sIHsgICAgOTU5LDE0fSwgeyAgICA1MTEsMTN9LCB7ICAgMTAyMywxMn0sIFwKKyAgICB7ICAgMjA0NywxM30sIHsgICAxMDg3LDEyfSwgeyAgIDIxNzUsMTN9LCB7ICAgMTIxNSwxNH0sIFwKKyAgICB7ICAgIDYzOSwxM30sIHsgICAxMjc5LDEyfSwgeyAgIDI1NTksMTN9LCB7ICAgMTQwNywxMn0sIFwKKyAgICB7ICAgMjgxNSwxNH0sIHsgICAgNzY3LDEzfSwgeyAgIDE1MzUsMTJ9LCB7ICAgMzA3MSwxM30sIFwKKyAgICB7ICAgMTY2MywxNH0sIHsgICAgODk1LDEzfSwgeyAgIDE3OTEsMTJ9LCB7ICAgMzU4MywxM30sIFwKKyAgICB7ICAgMTkxOSwxNX0sIHsgICAgNTExLDE0fSwgeyAgIDEwMjMsMTN9LCB7ICAgMjA0NywxMn0sIFwKKyAgICB7ICAgNDA5NSwxM30sIHsgICAyMTc1LDE0fSwgeyAgIDExNTEsMTN9LCB7ICAgMjMwMywxMn0sIFwKKyAgICB7ICAgNDYwNywxNH0sIHsgICAxMjc5LDEzfSwgeyAgIDI1NTksMTR9LCB7ICAgMTQwNywxM30sIFwKKyAgICB7ICAgMjgxNSwxNX0sIHsgIDMyNzY4LDE2fSwgeyAgNjU1MzYsMTd9LCB7IDEzMTA3MiwxOH0sIFwKKyAgICB7IDI2MjE0NCwxOX0sIHsgNTI0Mjg4LDIwfSwgezEwNDg1NzYsMjF9LCB7MjA5NzE1MiwyMn0sIFwKKyAgICB7NDE5NDMwNCwyM30sIHs4Mzg4NjA4LDI0fSB9CisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzX1NJWkUgMjMwCisjZGVmaW5lIFNRUl9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAyNDk2CisKKyNkZWZpbmUgTVVMTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgMTMKKyNkZWZpbmUgTVVMTE9fRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgMzgKKyNkZWZpbmUgTVVMTE9fTVVMX05fVEhSRVNIT0xEICAgICAgICAgICAgIDY2MzMKKworI2RlZmluZSBEQ19ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA1NgorI2RlZmluZSBEQ19ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgIDE3MworI2RlZmluZSBEQ19CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA1NQorI2RlZmluZSBEQ19CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA5NgorCisjZGVmaW5lIElOVl9NVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgIDU0CisjZGVmaW5lIElOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAgMjAyCisjZGVmaW5lIElOVl9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTY2CisKKyNkZWZpbmUgQklOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAyNDYKKyNkZWZpbmUgUkVEQ18xX1RPX1JFRENfMl9USFJFU0hPTEQgICAgICAgICAgIDcKKyNkZWZpbmUgUkVEQ18yX1RPX1JFRENfTl9USFJFU0hPTEQgICAgICAgICAgODUKKworI2RlZmluZSBNVV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTQ5OQorI2RlZmluZSBNVV9ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgMTY1MgorI2RlZmluZSBNVVBJX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICA4MworI2RlZmluZSBNVV9CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTIxMAorI2RlZmluZSBNVV9CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTQ5OQorCisjZGVmaW5lIFBPV01fU0VDX1RBQkxFICAxLDI4LDEyOSw2NDIsMjM4NworCisjZGVmaW5lIE1BVFJJWDIyX1NUUkFTU0VOX1RIUkVTSE9MRCAgICAgICAgIDE1CisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAgMTI3CisjZGVmaW5lIEhHQ0RfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjE0CisjZGVmaW5lIEhHQ0RfUkVEVUNFX1RIUkVTSE9MRCAgICAgICAgICAgICAyNDc5CisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgNDg3CisjZGVmaW5lIEdDREVYVF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgNTA1CisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAgICA0CisKKyNkZWZpbmUgR0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICAgMjQKKyNkZWZpbmUgU0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICA4MDIKKyNkZWZpbmUgU0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgIDIwNDIKKworI2RlZmluZSBGQUNfRFNDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTczNworI2RlZmluZSBGQUNfT0REX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICA0NApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvbmFuby9wb3Bjb3VudC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9uYW5vL3BvcGNvdW50LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjE0ZGQzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvbmFuby9wb3Bjb3VudC5hc20KQEAgLTAsMCArMSwzNSBAQAorZG5sICB4ODYtNjQgbXBuX3BvcGNvdW50LgorCitkbmwgIENvcHlyaWdodCAyMDA3LCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fcG9wY291bnQpCitpbmNsdWRlX21wbihgeDg2L3BlbnRpdW00L3NzZTIvcG9wY291bnQuYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3BlbnRpdW00L2FkZG11bF8yLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3BlbnRpdW00L2FkZG11bF8yLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWU2YTFhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvcGVudGl1bTQvYWRkbXVsXzIuYXNtCkBAIC0wLDAgKzEsMzcgQEAKK2RubCAgWDg2LTY0IG1wbl9hZGRtdWxfMiBvcHRpbWlzZWQgZm9yIEludGVsIE5vY29uYS4KKworZG5sICBDb3B5cmlnaHQgMjAxOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRtdWxfMikKK2luY2x1ZGVfbXBuKGB4ODZfNjQvYmQxL2FkZG11bF8yLmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9wZW50aXVtNC9hb3JzX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvcGVudGl1bTQvYW9yc19uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTZlZTFiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvcGVudGl1bTQvYW9yc19uLmFzbQpAQCAtMCwwICsxLDE5NiBAQAorZG5sICB4ODYtNjQgbXBuX2FkZF9uL21wbl9zdWJfbiBvcHRpbWl6ZWQgZm9yIFBlbnRpdW0gNC4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDcsIDIwMDgsIDIwMTAtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBBTUQgSzgsSzkJIDIuOAorQyBBTUQgSzEwCSAyLjgKK0MgSW50ZWwgUDQJIDQKK0MgSW50ZWwgY29yZTIJIDMuNi01CShmbHVjdHVhdGluZykKK0MgSW50ZWwgY29yZWkJID8KK0MgSW50ZWwgYXRvbQkgPworQyBWSUEgbmFubwkgPworCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsCWAlcmRpJykKK2RlZmluZShgdXAnLAlgJXJzaScpCitkZWZpbmUoYHZwJywJYCVyZHgnKQorZGVmaW5lKGBuJywJYCVyY3gnKQorZGVmaW5lKGBjeScsCWAlcjgnKQorCitpZmRlZihgT1BFUkFUSU9OX2FkZF9uJywgYAorCWRlZmluZShBRERTVUIsCSAgICAgIGFkZCkKKwlkZWZpbmUoZnVuYywJICAgICAgbXBuX2FkZF9uKQorCWRlZmluZShmdW5jX25jLAkgICAgICBtcG5fYWRkX25jKScpCitpZmRlZihgT1BFUkFUSU9OX3N1Yl9uJywgYAorCWRlZmluZShBRERTVUIsCSAgICAgIHN1YikKKwlkZWZpbmUoZnVuYywJICAgICAgbXBuX3N1Yl9uKQorCWRlZmluZShmdW5jX25jLAkgICAgICBtcG5fc3ViX25jKScpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FkZF9uIG1wbl9hZGRfbmMgbXBuX3N1Yl9uIG1wbl9zdWJfbmMpCitBU01fU1RBUlQoKQorCVRFWFQKK1BST0xPR1VFKGZ1bmMpCisJRlVOQ19FTlRSWSg0KQorCXhvcgklcjgsICVyOAorSUZET1MoYAlqbXAJTChlbnQpCQknKQorRVBJTE9HVUUoKQorUFJPTE9HVUUoZnVuY19uYykKKwlGVU5DX0VOVFJZKDQpCitJRkRPUyhgCW1vdgk1NiglcnNwKSwgJXI4CScpCitMKGVudCk6CXB1c2gJJXJieAorCXB1c2gJJXIxMgorCisJbW92CSh2cCksICVyOQorCisJbW92CVIzMihuKSwgUjMyKCVyYXgpCisJYW5kCSQzLCBSMzIoJXJheCkKKwlqbmUJTChuMDApCQlDIG4gPSAwLCA0LCA4LCAuLi4KKwltb3YJUjMyKCVyOCksIFIzMiglcmJ4KQorCW1vdgkodXApLCAlcjgKKwltb3YJOCh1cCksICVyMTAKKwlBRERTVUIJJXI5LCAlcjgKKwltb3YJOCh2cCksICVyOQorCXNldGMJUjgoJXJheCkKKwlsZWEJLTE2KHJwKSwgcnAKKwlqbXAJTChMMDApCisKK0wobjAwKToJY21wCSQyLCBSMzIoJXJheCkKKwlqbmMJTChuMDEpCQlDIG4gPSAxLCA1LCA5LCAuLi4KKwltb3YJKHVwKSwgJXIxMQorCW1vdglSMzIoJXI4KSwgUjMyKCVyYXgpCisJeG9yCVIzMiglcmJ4KSwgUjMyKCVyYngpCisJZGVjCW4KKwlqbnoJTChndDEpCisJQUREU1VCCSVyOSwgJXIxMQorCXNldGMJUjgoJXJieCkKKwlBRERTVUIJJXJheCwgJXIxMQorCWFkYwkkMCwgUjMyKCVyYngpCisJbW92CSVyMTEsIChycCkKKwlqbXAJTChyZXQpCitMKGd0MSk6CW1vdgk4KHVwKSwgJXI4CisJQUREU1VCCSVyOSwgJXIxMQorCW1vdgk4KHZwKSwgJXI5CisJc2V0YwlSOCglcmJ4KQorCWxlYQktOChycCksIHJwCisJbGVhCTgodXApLCB1cAorCWxlYQk4KHZwKSwgdnAKKwlqbXAJTChMMDEpCisKK0wobjAxKToJam5lCUwobjEwKQkJQyBuID0gMiwgNiwgMTAsIC4uLgorCW1vdgkodXApLCAlcjEyCisJbW92CVIzMiglcjgpLCBSMzIoJXJieCkKKwltb3YJOCh1cCksICVyMTEKKwlBRERTVUIJJXI5LCAlcjEyCisJbW92CTgodnApLCAlcjkKKwlzZXRjCVI4KCVyYXgpCisJbGVhCS0zMihycCksIHJwCisJbGVhCTE2KHVwKSwgdXAKKwlsZWEJMTYodnApLCB2cAorCWptcAlMKEwxMCkKKworTChuMTApOgltb3YJKHVwKSwgJXIxMAlDIG4gPSAzLCA3LCAxMSwgLi4uCisJbW92CVIzMiglcjgpLCBSMzIoJXJheCkKKwl4b3IJUjMyKCVyYngpLCBSMzIoJXJieCkKKwltb3YJOCh1cCksICVyMTIKKwlBRERTVUIJJXI5LCAlcjEwCisJbW92CTgodnApLCAlcjkKKwlzZXRjCVI4KCVyYngpCisJbGVhCS0yNChycCksIHJwCisJbGVhCS04KHVwKSwgdXAKKwlsZWEJLTgodnApLCB2cAorCWptcAlMKEwxMSkKKworTChjMCk6CW1vdgkkMSwgUjgoJXJieCkKKwlqbXAJTChyYzApCitMKGMxKToJbW92CSQxLCBSOCglcmF4KQorCWptcAlMKHJjMSkKK0woYzIpOgltb3YJJDEsIFI4KCVyYngpCisJam1wCUwocmMyKQorTChjMyk6CW1vdgkkMSwgUjgoJXJheCkKKwlqbXAJTChyYzMpCisKKwlBTElHTigxNikKK0wodG9wKToJbW92CSh1cCksICVyOAlDIG5vdCBvbiBjcml0aWNhbCBwYXRoCisJQUREU1VCCSVyOSwgJXIxMQlDIG5vdCBvbiBjcml0aWNhbCBwYXRoCisJbW92CSh2cCksICVyOQlDIG5vdCBvbiBjcml0aWNhbCBwYXRoCisJc2V0YwlSOCglcmJ4KQlDIHNhdmUgY2Fycnkgb3V0CisJbW92CSVyMTIsIChycCkKK0woTDAxKToJQUREU1VCCSVyYXgsICVyMTEJQyBhcHBseSBwcmV2aW91cyBjYXJyeSBvdXQKKwlqYwlMKGMwKQkJQyBqdW1wIGlmIHJpcHBsZQorTChyYzApOgltb3YJOCh1cCksICVyMTAKKwlBRERTVUIJJXI5LCAlcjgKKwltb3YJOCh2cCksICVyOQorCXNldGMJUjgoJXJheCkKKwltb3YJJXIxMSwgOChycCkKK0woTDAwKToJQUREU1VCCSVyYngsICVyOAorCWpjCUwoYzEpCitMKHJjMSk6CW1vdgkxNih1cCksICVyMTIKKwlBRERTVUIJJXI5LCAlcjEwCisJbW92CTE2KHZwKSwgJXI5CisJc2V0YwlSOCglcmJ4KQorCW1vdgklcjgsIDE2KHJwKQorTChMMTEpOglBRERTVUIJJXJheCwgJXIxMAorCWpjCUwoYzIpCitMKHJjMik6CW1vdgkyNCh1cCksICVyMTEKKwlBRERTVUIJJXI5LCAlcjEyCisJbGVhCTMyKHVwKSwgdXAKKwltb3YJMjQodnApLCAlcjkKKwlsZWEJMzIodnApLCB2cAorCXNldGMJUjgoJXJheCkKKwltb3YJJXIxMCwgMjQocnApCitMKEwxMCk6CUFERFNVQgklcmJ4LCAlcjEyCisJamMJTChjMykKK0wocmMzKToJbGVhCTMyKHJwKSwgcnAKKwlzdWIJJDQsIG4KKwlqYQlMKHRvcCkKKworTChlbmQpOglBRERTVUIJJXI5LCAlcjExCisJc2V0YwlSOCglcmJ4KQorCW1vdgklcjEyLCAocnApCisJQUREU1VCCSVyYXgsICVyMTEKKwlqbmMJTCgxKQorCW1vdgkkMSwgUjgoJXJieCkKK0woMSk6CW1vdgklcjExLCA4KHJwKQorCitMKHJldCk6CW1vdglSMzIoJXJieCksIFIzMiglcmF4KQorCXBvcAklcjEyCisJcG9wCSVyYngKKwlGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvcGVudGl1bTQvYW9yc2xzaDFfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9wZW50aXVtNC9hb3JzbHNoMV9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjkzN2QzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvcGVudGl1bTQvYW9yc2xzaDFfbi5hc20KQEAgLTAsMCArMSw1MCBAQAorZG5sICBBTUQ2NCBtcG5fYWRkbHNoMV9uLCBtcG5fc3VibHNoMV9uIC0tIHJwW10gPSB1cFtdICstICh2cFtdIDw8IDEpLAorZG5sICBvcHRpbWlzZWQgZm9yIFBlbnRpdW0gNC4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDgsIDIwMTAtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitkZWZpbmUoTFNILCAxKQorZGVmaW5lKFJTSCwgMzEpCQkJQyAzMSwgbm90IDYzLCBzaW5jZSB3ZSB1c2UgMzItYml0IG9wcworCitpZmRlZihgT1BFUkFUSU9OX2FkZGxzaDFfbicsIGAKKyAgZGVmaW5lKEFERFNVQiwJYWRkKQorICBkZWZpbmUoZnVuYywJCW1wbl9hZGRsc2gxX24pJykKK2lmZGVmKGBPUEVSQVRJT05fc3VibHNoMV9uJywgYAorICBkZWZpbmUoQUREU1VCLAlzdWIpCisgIGRlZmluZShmdW5jLAkJbXBuX3N1YmxzaDFfbiknKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRsc2gxX24gbXBuX3N1YmxzaDFfbikKK2luY2x1ZGVfbXBuKGB4ODZfNjQvcGVudGl1bTQvYW9yc2xzaENfbi5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvcGVudGl1bTQvYW9yc2xzaDJfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9wZW50aXVtNC9hb3JzbHNoMl9uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDFmMGFjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvcGVudGl1bTQvYW9yc2xzaDJfbi5hc20KQEAgLTAsMCArMSw1MCBAQAorZG5sICBBTUQ2NCBtcG5fYWRkbHNoMl9uLCBtcG5fc3VibHNoMl9uIC0tIHJwW10gPSB1cFtdICstICh2cFtdIDw8IDIpLAorZG5sICBvcHRpbWlzZWQgZm9yIFBlbnRpdW0gNC4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDgsIDIwMTAtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitkZWZpbmUoTFNILCAyKQorZGVmaW5lKFJTSCwgMzApCQkJQyAzMCwgbm90IDYyLCBzaW5jZSB3ZSB1c2UgMzItYml0IG9wcworCitpZmRlZihgT1BFUkFUSU9OX2FkZGxzaDJfbicsIGAKKyAgZGVmaW5lKEFERFNVQiwJYWRkKQorICBkZWZpbmUoZnVuYywJCW1wbl9hZGRsc2gyX24pJykKK2lmZGVmKGBPUEVSQVRJT05fc3VibHNoMl9uJywgYAorICBkZWZpbmUoQUREU1VCLAlzdWIpCisgIGRlZmluZShmdW5jLAkJbXBuX3N1YmxzaDJfbiknKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRsc2gyX24gbXBuX3N1YmxzaDJfbikKK2luY2x1ZGVfbXBuKGB4ODZfNjQvcGVudGl1bTQvYW9yc2xzaENfbi5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvcGVudGl1bTQvYW9yc2xzaENfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9wZW50aXVtNC9hb3JzbHNoQ19uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDNjNmEzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvcGVudGl1bTQvYW9yc2xzaENfbi5hc20KQEAgLTAsMCArMSwyMDMgQEAKK2RubCAgQU1ENjQgbXBuX2FkZGxzaENfbiwgbXBuX3N1YmxzaENfbiAtLSBycFtdID0gdXBbXSArLSAodnBbXSA8PCBDKSwgd2hlcmUKK2RubCAgQyBpcyAxLCAyLCAzLiAgT3B0aW1pemVkIGZvciBQZW50aXVtIDQuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqb3JuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDA4LCAyMDEwLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworQwkgICAgIGN5Y2xlcy9saW1iCitDIEFNRCBLOCxLOQkgMy44CitDIEFNRCBLMTAJIDMuOAorQyBJbnRlbCBQNAkgNS44CitDIEludGVsIGNvcmUyCSA0Ljc1CitDIEludGVsIGNvcmVpCSA0Ljc1CitDIEludGVsIGF0b20JID8KK0MgVklBIG5hbm8JIDQuNzUKKworCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLGAlcmRpJykKK2RlZmluZShgdXAnLGAlcnNpJykKK2RlZmluZShgdnAnLGAlcmR4JykKK2RlZmluZShgbicsIGAlcmN4JykKKworZGVmaW5lKE0sIGV2YWwobTRfbHNoaWZ0KDEsTFNIKSkpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUoZnVuYykKKwlGVU5DX0VOVFJZKDQpCisJcHVzaAklcmJ4CisJcHVzaAklcjEyCisJcHVzaAklcmJwCisKKwltb3YJKHZwKSwgJXI5CisJc2hsCSRMU0gsICVyOQorCW1vdgk0KHZwKSwgUjMyKCVyYnApCisKKwl4b3IJUjMyKCVyYngpLCBSMzIoJXJieCkKKworCW1vdglSMzIobiksIFIzMiglcmF4KQorCWFuZAkkMywgUjMyKCVyYXgpCisJam5lCUwobjAwKQkJQyBuID0gMCwgNCwgOCwgLi4uCisKKwltb3YJKHVwKSwgJXI4CisJbW92CTgodXApLCAlcjEwCisJc2hyCSRSU0gsIFIzMiglcmJwKQorCUFERFNVQgklcjksICVyOAorCW1vdgk4KHZwKSwgJXI5CisJbGVhCSglcmJwLCVyOSxNKSwgJXI5CisJc2V0YwlSOCglcmF4KQorCW1vdgkxMih2cCksIFIzMiglcmJwKQorCWxlYQktMTYocnApLCBycAorCWptcAlMKEwwMCkKKworTChuMDApOgljbXAJJDIsIFIzMiglcmF4KQorCWpuYwlMKG4wMSkJCUMgbiA9IDEsIDUsIDksIC4uLgorCW1vdgkodXApLCAlcjExCisJbGVhCS04KHJwKSwgcnAKKwlzaHIJJFJTSCwgUjMyKCVyYnApCisJQUREU1VCCSVyOSwgJXIxMQorCXNldGMJUjgoJXJieCkKKwlkZWMJbgorCWp6CUwoMSkJCUMganVtcCBmb3IgbiA9IDEKKwltb3YJOCh1cCksICVyOAorCW1vdgk4KHZwKSwgJXI5CisJbGVhCSglcmJwLCVyOSxNKSwgJXI5CisJbW92CTEyKHZwKSwgUjMyKCVyYnApCisJbGVhCTgodXApLCB1cAorCWxlYQk4KHZwKSwgdnAKKwlqbXAJTChMMDEpCisKK0wobjAxKToJam5lCUwobjEwKQkJQyBuID0gMiwgNiwgMTAsIC4uLgorCW1vdgkodXApLCAlcjEyCisJbW92CTgodXApLCAlcjExCisJc2hyCSRSU0gsIFIzMiglcmJwKQorCUFERFNVQgklcjksICVyMTIKKwltb3YJOCh2cCksICVyOQorCWxlYQkoJXJicCwlcjksTSksICVyOQorCXNldGMJUjgoJXJheCkKKwltb3YJMTIodnApLCBSMzIoJXJicCkKKwlsZWEJMTYodXApLCB1cAorCWxlYQkxNih2cCksIHZwCisJam1wCUwoTDEwKQorCitMKG4xMCk6CW1vdgkodXApLCAlcjEwCisJbW92CTgodXApLCAlcjEyCisJc2hyCSRSU0gsIFIzMiglcmJwKQorCUFERFNVQgklcjksICVyMTAKKwltb3YJOCh2cCksICVyOQorCWxlYQkoJXJicCwlcjksTSksICVyOQorCXNldGMJUjgoJXJieCkKKwltb3YJMTIodnApLCBSMzIoJXJicCkKKwlsZWEJLTI0KHJwKSwgcnAKKwlsZWEJLTgodXApLCB1cAorCWxlYQktOCh2cCksIHZwCisJam1wCUwoTDExKQorCitMKGMwKToJbW92CSQxLCBSOCglcmJ4KQorCWptcAlMKHJjMCkKK0woYzEpOgltb3YJJDEsIFI4KCVyYXgpCisJam1wCUwocmMxKQorTChjMik6CW1vdgkkMSwgUjgoJXJieCkKKwlqbXAJTChyYzIpCisKKwlBTElHTigxNikKK0wodG9wKToJbW92CSh1cCksICVyOAlDIG5vdCBvbiBjcml0aWNhbCBwYXRoCisJc2hyCSRSU0gsIFIzMiglcmJwKQorCUFERFNVQgklcjksICVyMTEJQyBub3Qgb24gY3JpdGljYWwgcGF0aAorCW1vdgkodnApLCAlcjkKKwlsZWEJKCVyYnAsJXI5LE0pLCAlcjkKKwlzZXRjCVI4KCVyYngpCUMgc2F2ZSBjYXJyeSBvdXQKKwltb3YJNCh2cCksIFIzMiglcmJwKQorCW1vdgklcjEyLCAocnApCisJQUREU1VCCSVyYXgsICVyMTEJQyBhcHBseSBwcmV2aW91cyBjYXJyeSBvdXQKKwlqYwlMKGMwKQkJQyBqdW1wIGlmIHJpcHBsZQorTChyYzApOgorTChMMDEpOgltb3YJOCh1cCksICVyMTAKKwlzaHIJJFJTSCwgUjMyKCVyYnApCisJQUREU1VCCSVyOSwgJXI4CisJbW92CTgodnApLCAlcjkKKwlsZWEJKCVyYnAsJXI5LE0pLCAlcjkKKwlzZXRjCVI4KCVyYXgpCisJbW92CTEyKHZwKSwgUjMyKCVyYnApCisJbW92CSVyMTEsIDgocnApCisJQUREU1VCCSVyYngsICVyOAorCWpjCUwoYzEpCitMKHJjMSk6CitMKEwwMCk6CW1vdgkxNih1cCksICVyMTIKKwlzaHIJJFJTSCwgUjMyKCVyYnApCisJQUREU1VCCSVyOSwgJXIxMAorCW1vdgkxNih2cCksICVyOQorCWxlYQkoJXJicCwlcjksTSksICVyOQorCXNldGMJUjgoJXJieCkKKwltb3YJMjAodnApLCBSMzIoJXJicCkKKwltb3YJJXI4LCAxNihycCkKKwlBRERTVUIJJXJheCwgJXIxMAorCWpjCUwoYzIpCitMKHJjMik6CitMKEwxMSk6CW1vdgkyNCh1cCksICVyMTEKKwlzaHIJJFJTSCwgUjMyKCVyYnApCisJQUREU1VCCSVyOSwgJXIxMgorCW1vdgkyNCh2cCksICVyOQorCWxlYQkoJXJicCwlcjksTSksICVyOQorCWxlYQkzMih1cCksIHVwCisJbGVhCTMyKHZwKSwgdnAKKwlzZXRjCVI4KCVyYXgpCisJbW92CS00KHZwKSwgUjMyKCVyYnApCisJbW92CSVyMTAsIDI0KHJwKQorCUFERFNVQgklcmJ4LCAlcjEyCisJamMJTChjMykKK0wocmMzKToJbGVhCTMyKHJwKSwgcnAKK0woTDEwKToJc3ViCSQ0LCBuCisJamEJTCh0b3ApCisKK0woZW5kKToKKwlzaHIJJFJTSCwgUjMyKCVyYnApCisJQUREU1VCCSVyOSwgJXIxMQorCXNldGMJUjgoJXJieCkKKwltb3YJJXIxMiwgKHJwKQorCUFERFNVQgklcmF4LCAlcjExCisJam5jCUwoMSkKKwltb3YJJDEsIFI4KCVyYngpCitMKDEpOgltb3YJJXIxMSwgOChycCkKKwlsZWEJKCVyYngsJXJicCksIFIzMiglcmF4KQorCXBvcAklcmJwCisJcG9wCSVyMTIKKwlwb3AJJXJieAorCUZVTkNfRVhJVCgpCisJcmV0CitMKGMzKToJbW92CSQxLCBSOCglcmF4KQorCWptcAlMKHJjMykKK0VQSUxPR1VFKCkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvcGVudGl1bTQvYW9yc211bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3BlbnRpdW00L2FvcnNtdWxfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVkYmIzNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3BlbnRpdW00L2FvcnNtdWxfMS5hc20KQEAgLTAsMCArMSwzNyBAQAorZG5sICBYODYtNjQgbXBuX2FkZG11bF8xIGFuZCBtcG5fc3VibXVsXzEgb3B0aW1pc2VkIGZvciBJbnRlbCBOb2NvbmEuCisKK2RubCAgQ29weXJpZ2h0IDIwMTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fYWRkbXVsXzEgbXBuX3N1Ym11bF8xKQoraW5jbHVkZV9tcG4oYHg4Nl82NC9iZDEvYW9yc211bF8xLmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9wZW50aXVtNC9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9wZW50aXVtNC9nbXAtbXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM3OTMxMAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3BlbnRpdW00L2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDI1NyBAQAorLyogUGVudGl1bSA0LTY0IGdtcC1tcGFyYW0uaCAtLSBDb21waWxlci9tYWNoaW5lIHBhcmFtZXRlciBoZWFkZXIgZmlsZS4KKworQ29weXJpZ2h0IDIwMTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNkZWZpbmUgR01QX0xJTUJfQklUUyA2NAorI2RlZmluZSBHTVBfTElNQl9CWVRFUyA4CisKKy8qIFRoZXNlIHJvdXRpbmVzIGV4aXN0cyBmb3IgYWxsIHg4Nl82NCBjaGlwcywgYnV0IHRoZXkgYXJlIHNsb3dlciBvbiBQZW50aXVtNAorICAgdGhhbiBzZXBhcmF0ZSBhZGQvc3ViIGFuZCBzaGlmdC4gIE1ha2Ugc3VyZSB0aGV5IGFyZSBub3QgcmVhbGx5IHVzZWQuICAqLworI3VuZGVmIEhBVkVfTkFUSVZFX21wbl9yc2Jsc2gxX24KKyN1bmRlZiBIQVZFX05BVElWRV9tcG5fcnNibHNoMl9uCisjdW5kZWYgSEFWRV9OQVRJVkVfbXBuX2FkZGxzaF9uCisjdW5kZWYgSEFWRV9OQVRJVkVfbXBuX3JzYmxzaF9uCisKKy8qIDM0MDAgTUh6IFBlbnRpdW00IE5vY29uYSAvIDEwMjQgS2lieXRlIEwyIGNhY2hlICovCisvKiBGRlQgdHVuaW5nIGxpbWl0ID0gMTA3LDA5NSw5NjQgKi8KKy8qIEdlbmVyYXRlZCBieSB0dW5ldXAuYywgMjAxOS0xMS0wOSwgZ2NjIDguMyAqLworCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNQorI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgMworI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAxNAorI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICAgICAzMgorI2RlZmluZSBQUkVJTlZfTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAxMQorI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgICAgICAgICAgICAgICAgMSAgLyogbmF0aXZlICovCisjZGVmaW5lIERJVl9RUl8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAyCisjZGVmaW5lIERJVl9RUl8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVl9RUl8yX1BJMl9USFJFU0hPTEQgICAgICAgICAgICAgIDEyCisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgICAgICAgMjAKKworI2RlZmluZSBESVZfMV9WU19NVUxfMV9QRVJDRU5UICAgICAgICAgICAgIDIyOAorCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDgxCisjZGVmaW5lIE1VTF9UT09NNDRfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTMwCisjZGVmaW5lIE1VTF9UT09NNkhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTczCisjZGVmaW5lIE1VTF9UT09NOEhfVEhSRVNIT0xEICAgICAgICAgICAgICAgNDMwCisKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNDNfVEhSRVNIT0xEICAgICAgODEKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNTNfVEhSRVNIT0xEICAgICAgOTEKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNTNfVEhSRVNIT0xEICAgICAgODkKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNjNfVEhSRVNIT0xEICAgICAgODgKKyNkZWZpbmUgTVVMX1RPT000M19UT19UT09NNTRfVEhSRVNIT0xEICAgICAxMTIKKworI2RlZmluZSBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTEzCisjZGVmaW5lIFNRUl9UT09NNF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjAyCisjZGVmaW5lIFNRUl9UT09NNl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMjM4CisjZGVmaW5lIFNRUl9UT09NOF9USFJFU0hPTEQgICAgICAgICAgICAgICAgNDMwCisKKyNkZWZpbmUgTVVMTUlEX1RPT000Ml9USFJFU0hPTEQgICAgICAgICAgICAgMjAKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgOQorI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxMQorCisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgMjM2ICAvKiBrID0gNSAqLworI2RlZmluZSBNVUxfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgMjM2LCA1fSwgeyAgICAgMTEsIDZ9LCB7ICAgICAgNiwgNX0sIHsgICAgIDEzLCA2fSwgXAorICAgIHsgICAgICA5LCA1fSwgeyAgICAgMTksIDZ9LCB7ICAgICAxNywgN30sIHsgICAgICA5LCA2fSwgXAorICAgIHsgICAgIDE5LCA3fSwgeyAgICAgMTAsIDZ9LCB7ICAgICAyMSwgN30sIHsgICAgIDExLCA2fSwgXAorICAgIHsgICAgIDIzLCA3fSwgeyAgICAgMTMsIDh9LCB7ICAgICAgNywgN30sIHsgICAgIDE3LCA4fSwgXAorICAgIHsgICAgICA5LCA3fSwgeyAgICAgMjEsIDh9LCB7ICAgICAxMSwgN30sIHsgICAgIDIzLCA4fSwgXAorICAgIHsgICAgIDEzLCA5fSwgeyAgICAgIDcsIDh9LCB7ICAgICAxNSwgN30sIHsgICAgIDMxLCA4fSwgXAorICAgIHsgICAgIDIxLCA5fSwgeyAgICAgMTEsIDh9LCB7ICAgICAyNywxMH0sIHsgICAgICA3LCA5fSwgXAorICAgIHsgICAgIDE1LCA4fSwgeyAgICAgMzMsIDl9LCB7ICAgICAxOSwgOH0sIHsgICAgIDM5LCA5fSwgXAorICAgIHsgICAgIDIzLCA4fSwgeyAgICAgNDcsIDl9LCB7ICAgICAyNywxMH0sIHsgICAgIDE1LCA5fSwgXAorICAgIHsgICAgIDM5LDEwfSwgeyAgICAgMjMsIDl9LCB7ICAgICA1MSwxMX0sIHsgICAgIDE1LDEwfSwgXAorICAgIHsgICAgIDMxLCA5fSwgeyAgICAgNjcsMTB9LCB7ICAgICAzOSwgOX0sIHsgICAgIDgzLDEwfSwgXAorICAgIHsgICAgIDQ3LCA5fSwgeyAgICAgOTUsMTB9LCB7ICAgICA1NSwxMX0sIHsgICAgIDMxLDEwfSwgXAorICAgIHsgICAgIDYzLCA5fSwgeyAgICAxMjcsIDh9LCB7ICAgIDI1NSwxMH0sIHsgICAgIDcxLCA5fSwgXAorICAgIHsgICAgMTQzLCA4fSwgeyAgICAyODcsMTB9LCB7ICAgICA3OSwxMX0sIHsgICAgIDQ3LDEwfSwgXAorICAgIHsgICAgIDk1LCA5fSwgeyAgICAxOTEsMTJ9LCB7ICAgICAzMSwxMX0sIHsgICAgIDYzLDEwfSwgXAorICAgIHsgICAgMTI3LCA5fSwgeyAgICAyNTUsMTB9LCB7ICAgIDE0MywgOX0sIHsgICAgMjg3LDExfSwgXAorICAgIHsgICAgIDc5LDEwfSwgeyAgICAxNTksIDl9LCB7ICAgIDMxOSwxMH0sIHsgICAgMTc1LDExfSwgXAorICAgIHsgICAgIDk1LDEwfSwgeyAgICAxOTEsIDl9LCB7ICAgIDM4MywxMH0sIHsgICAgMjIzLDEyfSwgXAorICAgIHsgICAgIDYzLDExfSwgeyAgICAxMjcsMTB9LCB7ICAgIDI1NSwxMX0sIHsgICAgMTQzLDEwfSwgXAorICAgIHsgICAgMjg3LDExfSwgeyAgICAxNTksMTB9LCB7ICAgIDMxOSwxMX0sIHsgICAgMTc1LDEyfSwgXAorICAgIHsgICAgIDk1LDExfSwgeyAgICAxOTEsMTB9LCB7ICAgIDM4MywxMX0sIHsgICAgMjIzLDEzfSwgXAorICAgIHsgICAgIDYzLDEyfSwgeyAgICAxMjcsMTF9LCB7ICAgIDI1NSwxMH0sIHsgICAgNTExLDExfSwgXAorICAgIHsgICAgMjg3LDEwfSwgeyAgICA1NzUsMTJ9LCB7ICAgIDE1OSwxMX0sIHsgICAgMzUxLDEyfSwgXAorICAgIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTJ9LCB7ICAgIDIyMywxMX0sIHsgICAgNDQ3LDEzfSwgXAorICAgIHsgICAgMTI3LDEyfSwgeyAgICAyNTUsMTF9LCB7ICAgIDUxMSwxMn0sIHsgICAgMjg3LDExfSwgXAorICAgIHsgICAgNTc1LDEwfSwgeyAgIDExNTEsMTJ9LCB7ICAgIDM1MSwxM30sIHsgICAgMTkxLDEyfSwgXAorICAgIHsgICAgNDE1LDExfSwgeyAgICA4MzEsMTB9LCB7ICAgMTY2MywxMn0sIHsgICAgNDQ3LDE0fSwgXAorICAgIHsgICAgMTI3LDEzfSwgeyAgICAyNTUsMTJ9LCB7ICAgIDUxMSwxMX0sIHsgICAxMDIzLDEyfSwgXAorICAgIHsgICAgNTQzLDExfSwgeyAgIDEwODcsMTB9LCB7ICAgMjE3NSwxMn0sIHsgICAgNTc1LDExfSwgXAorICAgIHsgICAxMTUxLDEzfSwgeyAgICAzMTksMTJ9LCB7ICAgIDYzOSwxMX0sIHsgICAxMjc5LDEyfSwgXAorICAgIHsgICAgNjcxLDExfSwgeyAgIDEzNDMsMTJ9LCB7ICAgIDcwMywxM30sIHsgICAgMzgzLDEyfSwgXAorICAgIHsgICAgNzY3LDExfSwgeyAgIDE1MzUsMTJ9LCB7ICAgIDgzMSwxMX0sIHsgICAxNjYzLDEzfSwgXAorICAgIHsgICAgNDQ3LDE0fSwgeyAgICAyNTUsMTN9LCB7ICAgIDUxMSwxMn0sIHsgICAxMDIzLDExfSwgXAorICAgIHsgICAyMDQ3LDEyfSwgeyAgIDEwODcsMTF9LCB7ICAgMjE3NSwxM30sIHsgICAgNTc1LDEyfSwgXAorICAgIHsgICAxMTUxLDExfSwgeyAgIDIzMDMsMTJ9LCB7ICAgMTIxNSwxMX0sIHsgICAyNDMxLDEwfSwgXAorICAgIHsgICA0ODYzLDEzfSwgeyAgICA2MzksMTJ9LCB7ICAgMTI3OSwxMX0sIHsgICAyNTU5LDEyfSwgXAorICAgIHsgICAxMzQzLDEzfSwgeyAgICA3MDMsMTR9LCB7ICAgIDM4MywxM30sIHsgICAgNzY3LDEyfSwgXAorICAgIHsgICAxNTM1LDEzfSwgeyAgICA4MzEsMTJ9LCB7ICAgMTY2MywxNX0sIHsgICAgMjU1LDE0fSwgXAorICAgIHsgICAgNTExLDEzfSwgeyAgIDEwMjMsMTJ9LCB7ICAgMjA0NywxM30sIHsgICAxMDg3LDEyfSwgXAorICAgIHsgICAyMTc1LDEzfSwgeyAgIDExNTEsMTJ9LCB7ICAgMjMwMywxM30sIHsgICAxMjE1LDEyfSwgXAorICAgIHsgICAyNDMxLDExfSwgeyAgIDQ4NjMsMTR9LCB7ICAgIDYzOSwxM30sIHsgICAxMjc5LDEyfSwgXAorICAgIHsgICAyNTU5LDEzfSwgeyAgIDEzNDMsMTJ9LCB7ICAgMjY4NywxM30sIHsgICAxNDA3LDEyfSwgXAorICAgIHsgICAyODE1LDEzfSwgeyAgIDE0NzEsMTR9LCB7ICAgIDc2NywxM30sIHsgICAxNjYzLDE0fSwgXAorICAgIHsgICAgODk1LDEzfSwgeyAgIDE3OTEsMTJ9LCB7ICAgMzU4MywxM30sIHsgICAxOTE5LDEyfSwgXAorICAgIHsgICAzODM5LDE1fSwgeyAgICA1MTEsMTR9LCB7ICAgMTAyMywxM30sIHsgICAyMTc1LDE0fSwgXAorICAgIHsgICAxMTUxLDEzfSwgeyAgIDIzMDMsMTJ9LCB7ICAgNDYwNywxM30sIHsgICAyNDMxLDEyfSwgXAorICAgIHsgICA0ODYzLDE0fSwgeyAgIDEyNzksMTN9LCB7ICAgMjY4NywxNH0sIHsgICAxNDA3LDEzfSwgXAorICAgIHsgICAyODE1LDE1fSwgeyAgICA3NjcsMTR9LCB7ICAgMTc5MSwxM30sIHsgICAzNTgzLDE0fSwgXAorICAgIHsgICAxOTE5LDEzfSwgeyAgIDM4MzksMTZ9LCB7ICAgIDUxMSwxNX0sIHsgICAxMDIzLDE0fSwgXAorICAgIHsgICAyMTc1LDEzfSwgeyAgIDQzNTEsMTR9LCB7ICAgMjMwMywxM30sIHsgICA0NjA3LDE0fSwgXAorICAgIHsgICAyNDMxLDEzfSwgeyAgIDQ4NjMsMTV9LCB7ICAgMTI3OSwxNH0sIHsgICAyOTQzLDEzfSwgXAorICAgIHsgICA1ODg3LDE1fSwgeyAgIDE1MzUsMTR9LCB7ICAgMzE5OSwxNX0sIHsgICAxNzkxLDE0fSwgXAorICAgIHsgICAzODM5LDEzfSwgeyAgIDc2NzksMTZ9LCB7ICAgMTAyMywxNX0sIHsgICAyMDQ3LDE0fSwgXAorICAgIHsgICA0MzUxLDE1fSwgeyAgIDIzMDMsMTR9LCB7ICAgNDg2MywxNX0sIHsgICAyODE1LDE0fSwgXAorICAgIHsgICA1ODg3LDE2fSwgeyAgIDE1MzUsMTV9LCB7ICAgMzA3MSwxNH0sIHsgICA2MTQzLDE1fSwgXAorICAgIHsgIDMyNzY4LDE2fSwgeyAgNjU1MzYsMTd9LCB7IDEzMTA3MiwxOH0sIHsgMjYyMTQ0LDE5fSwgXAorICAgIHsgNTI0Mjg4LDIwfSwgezEwNDg1NzYsMjF9LCB7MjA5NzE1MiwyMn0sIHs0MTk0MzA0LDIzfSwgXAorICAgIHs4Mzg4NjA4LDI0fSB9CisjZGVmaW5lIE1VTF9GRlRfVEFCTEUzX1NJWkUgMjI5CisjZGVmaW5lIE1VTF9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAyNzUyCisKKyNkZWZpbmUgU1FSX0ZGVF9NT0RGX1RIUkVTSE9MRCAgICAgICAgICAgICAyNDAgIC8qIGsgPSA1ICovCisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgeyAgICAyNDAsIDV9LCB7ICAgICAxMSwgNn0sIHsgICAgICA2LCA1fSwgeyAgICAgMTMsIDZ9LCBcCisgICAgeyAgICAgIDksIDV9LCB7ICAgICAxOSwgNn0sIHsgICAgIDE3LCA3fSwgeyAgICAgIDksIDZ9LCBcCisgICAgeyAgICAgMjMsIDd9LCB7ICAgICAxMiwgNn0sIHsgICAgIDI1LCA3fSwgeyAgICAgMTMsIDh9LCBcCisgICAgeyAgICAgIDcsIDd9LCB7ICAgICAxNywgOH0sIHsgICAgICA5LCA3fSwgeyAgICAgMjEsIDh9LCBcCisgICAgeyAgICAgMTEsIDd9LCB7ICAgICAyNCwgOH0sIHsgICAgIDEzLCA5fSwgeyAgICAgIDcsIDh9LCBcCisgICAgeyAgICAgMTUsIDd9LCB7ICAgICAzMSwgOH0sIHsgICAgIDIxLCA5fSwgeyAgICAgMTEsIDh9LCBcCisgICAgeyAgICAgMjcsMTB9LCB7ICAgICAgNywgOX0sIHsgICAgIDE1LCA4fSwgeyAgICAgMzMsIDl9LCBcCisgICAgeyAgICAgMTksIDh9LCB7ICAgICAzOSwgOX0sIHsgICAgIDI3LDEwfSwgeyAgICAgMTUsIDl9LCBcCisgICAgeyAgICAgMzksMTB9LCB7ICAgICAyMywgOX0sIHsgICAgIDQ3LDExfSwgeyAgICAgMTUsMTB9LCBcCisgICAgeyAgICAgMzEsIDl9LCB7ICAgICA2MywxMH0sIHsgICAgIDM5LCA5fSwgeyAgICAgNzksMTB9LCBcCisgICAgeyAgICAgNTUsMTF9LCB7ICAgICAzMSwxMH0sIHsgICAgIDYzLCA5fSwgeyAgICAxMjcsIDh9LCBcCisgICAgeyAgICAyNTUsMTB9LCB7ICAgICA3MSwgOX0sIHsgICAgMTQzLCA4fSwgeyAgICAyODcsMTB9LCBcCisgICAgeyAgICAgNzksMTF9LCB7ICAgICA0NywxMH0sIHsgICAgIDk1LCA5fSwgeyAgICAxOTEsMTJ9LCBcCisgICAgeyAgICAgMzEsMTF9LCB7ICAgICA2MywxMH0sIHsgICAgMTI3LCA5fSwgeyAgICAyNTUsMTB9LCBcCisgICAgeyAgICAxNDMsIDl9LCB7ICAgIDI4NywxMX0sIHsgICAgIDc5LDEwfSwgeyAgICAxNTksIDl9LCBcCisgICAgeyAgICAzMTksMTB9LCB7ICAgIDE3NSwgOX0sIHsgICAgMzUxLDExfSwgeyAgICAgOTUsMTB9LCBcCisgICAgeyAgICAxOTEsIDl9LCB7ICAgIDM4MywxMH0sIHsgICAgMjA3LCA5fSwgeyAgICA0MTUsMTB9LCBcCisgICAgeyAgICAyMjMsMTJ9LCB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgeyAgICAyNTUsMTF9LCBcCisgICAgeyAgICAxNDMsMTB9LCB7ICAgIDI4NywxMX0sIHsgICAgMTU5LDEwfSwgeyAgICAzMTksMTF9LCBcCisgICAgeyAgICAxNzUsMTB9LCB7ICAgIDM1MSwxMn0sIHsgICAgIDk1LDExfSwgeyAgICAxOTEsMTB9LCBcCisgICAgeyAgICAzODMsMTF9LCB7ICAgIDIwNywxMH0sIHsgICAgNDE1LDExfSwgeyAgICAyMjMsMTN9LCBcCisgICAgeyAgICAgNjMsMTJ9LCB7ICAgIDEyNywxMX0sIHsgICAgMjU1LDEwfSwgeyAgICA1MTEsMTF9LCBcCisgICAgeyAgICAyODcsMTB9LCB7ICAgIDU3NSwxMn0sIHsgICAgMTU5LDExfSwgeyAgICAzMTksMTB9LCBcCisgICAgeyAgICA2MzksMTF9LCB7ICAgIDM1MSwxMn0sIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTB9LCBcCisgICAgeyAgICA3NjcsMTJ9LCB7ICAgIDIyMywxMX0sIHsgICAgNDQ3LDEzfSwgeyAgICAxMjcsMTJ9LCBcCisgICAgeyAgICAyNTUsMTF9LCB7ICAgIDUxMSwxMn0sIHsgICAgMjg3LDExfSwgeyAgICA1NzUsMTB9LCBcCisgICAgeyAgIDExNTEsMTJ9LCB7ICAgIDMxOSwxMX0sIHsgICAgNjM5LDEyfSwgeyAgICAzNTEsMTN9LCBcCisgICAgeyAgICAxOTEsMTJ9LCB7ICAgIDM4MywxMX0sIHsgICAgNzY3LDEyfSwgeyAgICA0MTUsMTF9LCBcCisgICAgeyAgICA4MzEsMTJ9LCB7ICAgIDQ0NywxNH0sIHsgICAgMTI3LDEzfSwgeyAgICAyNTUsMTJ9LCBcCisgICAgeyAgICA1MTEsMTF9LCB7ICAgMTAyMywxMn0sIHsgICAgNTQzLDExfSwgeyAgIDEwODcsMTJ9LCBcCisgICAgeyAgICA1NzUsMTF9LCB7ICAgMTE1MSwxM30sIHsgICAgMzE5LDEyfSwgeyAgICA2MzksMTF9LCBcCisgICAgeyAgIDEyNzksMTJ9LCB7ICAgIDY3MSwxMX0sIHsgICAxMzQzLDEzfSwgeyAgICAzODMsMTJ9LCBcCisgICAgeyAgICA3NjcsMTF9LCB7ICAgMTUzNSwxMn0sIHsgICAgODMxLDEzfSwgeyAgICA0NDcsMTR9LCBcCisgICAgeyAgICAyNTUsMTN9LCB7ICAgIDUxMSwxMn0sIHsgICAxMDIzLDExfSwgeyAgIDIwNDcsMTJ9LCBcCisgICAgeyAgIDEwODcsMTN9LCB7ICAgIDU3NSwxMn0sIHsgICAxMTUxLDExfSwgeyAgIDIzMDMsMTJ9LCBcCisgICAgeyAgIDEyMTUsMTF9LCB7ICAgMjQzMSwxMH0sIHsgICA0ODYzLDEzfSwgeyAgICA2MzksMTJ9LCBcCisgICAgeyAgIDEyNzksMTF9LCB7ICAgMjU1OSwxMn0sIHsgICAxMzQzLDExfSwgeyAgIDI2ODcsMTR9LCBcCisgICAgeyAgICAzODMsMTN9LCB7ICAgIDc2NywxMn0sIHsgICAxNTM1LDEzfSwgeyAgICA4MzEsMTJ9LCBcCisgICAgeyAgIDE2NjMsMTV9LCB7ICAgIDI1NSwxNH0sIHsgICAgNTExLDEzfSwgeyAgIDEwMjMsMTJ9LCBcCisgICAgeyAgIDIwNDcsMTN9LCB7ICAgMTA4NywxMn0sIHsgICAyMTc1LDEzfSwgeyAgIDExNTEsMTJ9LCBcCisgICAgeyAgIDIzMDMsMTN9LCB7ICAgMTIxNSwxMn0sIHsgICAyNDMxLDExfSwgeyAgIDQ4NjMsMTR9LCBcCisgICAgeyAgICA2MzksMTN9LCB7ICAgMTI3OSwxMn0sIHsgICAyNTU5LDEzfSwgeyAgIDEzNDMsMTJ9LCBcCisgICAgeyAgIDI2ODcsMTN9LCB7ICAgMTQwNywxMn0sIHsgICAyODE1LDEzfSwgeyAgIDE0NzEsMTR9LCBcCisgICAgeyAgICA3NjcsMTN9LCB7ICAgMTY2MywxNH0sIHsgICAgODk1LDEzfSwgeyAgIDE3OTEsMTJ9LCBcCisgICAgeyAgIDM1ODMsMTN9LCB7ICAgMTkxOSwxMn0sIHsgICAzODM5LDE1fSwgeyAgICA1MTEsMTR9LCBcCisgICAgeyAgIDEwMjMsMTN9LCB7ICAgMjE3NSwxNH0sIHsgICAxMTUxLDEzfSwgeyAgIDIzMDMsMTJ9LCBcCisgICAgeyAgIDQ2MDcsMTN9LCB7ICAgMjQzMSwxMn0sIHsgICA0ODYzLDE0fSwgeyAgIDEyNzksMTN9LCBcCisgICAgeyAgIDI2ODcsMTR9LCB7ICAgMTQwNywxM30sIHsgICAyOTQzLDE1fSwgeyAgICA3NjcsMTR9LCBcCisgICAgeyAgIDE2NjMsMTN9LCB7ICAgMzMyNywxNH0sIHsgICAxNzkxLDEzfSwgeyAgIDM1ODMsMTR9LCBcCisgICAgeyAgIDE5MTksMTN9LCB7ICAgMzgzOSwxNn0sIHsgICAgNTExLDE1fSwgeyAgIDEwMjMsMTR9LCBcCisgICAgeyAgIDIxNzUsMTN9LCB7ICAgNDM1MSwxNH0sIHsgICAyMzAzLDEzfSwgeyAgIDQ2MDcsMTR9LCBcCisgICAgeyAgIDI0MzEsMTN9LCB7ICAgNDg2MywxNX0sIHsgICAxMjc5LDE0fSwgeyAgIDI4MTUsMTN9LCBcCisgICAgeyAgIDU2MzEsMTR9LCB7ICAgMjk0MywxM30sIHsgICA1ODg3LDE1fSwgeyAgIDE1MzUsMTR9LCBcCisgICAgeyAgIDMzMjcsMTV9LCB7ICAgMTc5MSwxNH0sIHsgICAzODM5LDEzfSwgeyAgIDc2NzksMTZ9LCBcCisgICAgeyAgIDEwMjMsMTV9LCB7ICAgMjA0NywxNH0sIHsgICA0MzUxLDE1fSwgeyAgIDIzMDMsMTR9LCBcCisgICAgeyAgIDQ4NjMsMTV9LCB7ICAgMjgxNSwxNH0sIHsgICA1ODg3LDE2fSwgeyAgIDE1MzUsMTV9LCBcCisgICAgeyAgIDMwNzEsMTR9LCB7ICAgNjE0MywxNX0sIHsgIDMyNzY4LDE2fSwgeyAgNjU1MzYsMTd9LCBcCisgICAgeyAxMzEwNzIsMTh9LCB7IDI2MjE0NCwxOX0sIHsgNTI0Mjg4LDIwfSwgezEwNDg1NzYsMjF9LCBcCisgICAgezIwOTcxNTIsMjJ9LCB7NDE5NDMwNCwyM30sIHs4Mzg4NjA4LDI0fSB9CisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzX1NJWkUgMjM1CisjZGVmaW5lIFNRUl9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAyMzY4CisKKyNkZWZpbmUgTVVMTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNVUxMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICA0NQorI2RlZmluZSBNVUxMT19NVUxfTl9USFJFU0hPTEQgICAgICAgICAgICAgNTM5NworI2RlZmluZSBTUVJMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgNgorI2RlZmluZSBTUVJMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICA0NgorI2RlZmluZSBTUVJMT19TUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgNDY1OAorCisjZGVmaW5lIERDX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDM2CisjZGVmaW5lIERDX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAgIDk1CisjZGVmaW5lIERDX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDM1CisjZGVmaW5lIERDX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDQ3CisKKyNkZWZpbmUgSU5WX01VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgMjIKKyNkZWZpbmUgSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgICAxNzgKKyNkZWZpbmUgSU5WX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAxMTYKKworI2RlZmluZSBCSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgIDIwNgorI2RlZmluZSBSRURDXzFfVE9fUkVEQ18yX1RIUkVTSE9MRCAgICAgICAgICAyNAorI2RlZmluZSBSRURDXzJfVE9fUkVEQ19OX1RIUkVTSE9MRCAgICAgICAgICA1MAorCisjZGVmaW5lIE1VX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgOTc5CisjZGVmaW5lIE1VX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAgOTc5CisjZGVmaW5lIE1VUElfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDk3CisjZGVmaW5lIE1VX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgNzYyCisjZGVmaW5lIE1VX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAgOTQyCisKKyNkZWZpbmUgUE9XTV9TRUNfVEFCTEUgIDcsMzQsMTE0LDUyMywxNDg2CisKKyNkZWZpbmUgR0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICAgMjUKKyNkZWZpbmUgU0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAzODEKKyNkZWZpbmUgU0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgIDE2NTkKKworI2RlZmluZSBGQUNfRFNDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDk2OQorI2RlZmluZSBGQUNfT0REX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisKKyNkZWZpbmUgTUFUUklYMjJfU1RSQVNTRU5fVEhSRVNIT0xEICAgICAgICAgMjkKKyNkZWZpbmUgSEdDRDJfRElWMV9NRVRIT0QgICAgICAgICAgICAgICAgICAgIDMgIC8qIDIuMDMlIGZhc3RlciB0aGFuIDUgKi8KKyNkZWZpbmUgSEdDRF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgICAgOTIKKyNkZWZpbmUgSEdDRF9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgOTUKKyNkZWZpbmUgSEdDRF9SRURVQ0VfVEhSRVNIT0xEICAgICAgICAgICAgIDE4MTUKKyNkZWZpbmUgR0NEX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAxOTUKKyNkZWZpbmUgR0NERVhUX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyMzMKKyNkZWZpbmUgSkFDT0JJX0JBU0VfTUVUSE9EICAgICAgICAgICAgICAgICAgIDQgIC8qIDE3LjA2JSBmYXN0ZXIgdGhhbiAxICovCisKKy8qIFR1bmV1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCB0b29rIDI5NzAxNiBzZWNvbmRzICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9wZW50aXVtNC9sc2hpZnQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvcGVudGl1bTQvbHNoaWZ0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDM3YmU0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvcGVudGl1bTQvbHNoaWZ0LmFzbQpAQCAtMCwwICsxLDM3IEBACitkbmwgIFg4Ni02NCBtcG5fbHNoaWZ0IG9wdGltaXNlZCBmb3IgUGVudGl1bSA0LgorCitkbmwgIENvcHlyaWdodCAyMDE4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2xzaGlmdCkKK2luY2x1ZGVfbXBuKGB4ODZfNjQvZmFzdHNzZS9sc2hpZnQuYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3BlbnRpdW00L2xzaGlmdGMuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvcGVudGl1bTQvbHNoaWZ0Yy5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI4NTZjMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3BlbnRpdW00L2xzaGlmdGMuYXNtCkBAIC0wLDAgKzEsMzcgQEAKK2RubCAgWDg2LTY0IG1wbl9sc2hpZnRjIG9wdGltaXNlZCBmb3IgUGVudGl1bSA0LgorCitkbmwgIENvcHlyaWdodCAyMDE4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2xzaGlmdGMpCitpbmNsdWRlX21wbihgeDg2XzY0L2Zhc3Rzc2UvbHNoaWZ0Yy5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvcGVudGl1bTQvbW9kXzM0bHN1YjEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvcGVudGl1bTQvbW9kXzM0bHN1YjEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNGIzZjAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9wZW50aXVtNC9tb2RfMzRsc3ViMS5hc20KQEAgLTAsMCArMSwxNjcgQEAKK2RubCAgQU1ENjQgbXBuX21vZF8zNGxzdWIxIC0tIHJlbWFpbmRlciBtb2R1bG8gMl40OC0xLgorCitkbmwgIENvcHlyaWdodCAyMDAwLTIwMDIsIDIwMDQsIDIwMDUsIDIwMDcsIDIwMTAtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitkbmwgIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBBTUQgSzgsSzkJIDEuMAorQyBBTUQgSzEwCSAxLjEyCitDIEludGVsIFA0CSAzLjI1CitDIEludGVsIGNvcmUyCSAxLjUKK0MgSW50ZWwgY29yZWkJIDEuNQorQyBJbnRlbCBhdG9tCSAyLjUKK0MgVklBIG5hbm8JIDEuNzUKKworCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgYXAnLAklcmRpKQorZGVmaW5lKGBuJywJJXJzaSkKKworQyBtcF9saW1iX3QgbXBuX21vZF8zNGxzdWIxIChtcF9zcmNwdHIgdXAsIG1wX3NpemVfdCBuKQorCitDIFRPRE8KK0MgICogUmV2aWV3IGZlZWQtaW4gYW5kIHdpbmQtZG93biBjb2RlLiAgSW4gcGFydGljdWxhciwgdHJ5IHRvIGF2b2lkIGFkYyBhbmQKK0MgICAgc2JiIHRvIHBsYWNhdGUgUGVudGl1bTQuCitDICAqIEl0IHNlZW1zIHBvc3NpYmxlIHRvIHJlYWNoIDIuNjcgYy9sIGJ5IHVzaW5nIGEgY2xlYW5lciA2LXdheSB1bnJvbGxpbmcsCitDICAgIHdpdGhvdXQgdGhlIGR1YWwgbG9vcCBleGl0cy4KKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMzIpCitQUk9MT0dVRShtcG5fbW9kXzM0bHN1YjEpCisJRlVOQ19FTlRSWSgyKQorCisJbW92CSQweDAwMDBGRkZGRkZGRkZGRkYsICVyMTEKKworCXN1YgkkMiwgJXJzaQorCWphCUwoZ3QyKQorCisJbW92CShhcCksICVyYXgKKwlub3AKKwlqYglMKDEpCisKKwltb3YJOChhcCksICVyc2kKKwltb3YJJXJheCwgJXJkeAorCXNocgkkNDgsICVyYXgJCUMgc3JjWzBdIGxvdworCisJYW5kCSVyMTEsICVyZHgJCUMgc3JjWzBdIGhpZ2gKKwlhZGQJJXJkeCwgJXJheAorCW1vdglSMzIoJXJzaSksIFIzMiglcmR4KQorCisJc2hyCSQzMiwgJXJzaQkJQyBzcmNbMV0gaGlnaAorCWFkZAklcnNpLCAlcmF4CisKKwlzaGwJJDE2LCAlcmR4CQlDIHNyY1sxXSBsb3cKKwlhZGQJJXJkeCwgJXJheAorCitMKDEpOglGVU5DX0VYSVQoKQorCXJldAorCisKKwlBTElHTigxNikKK0woZ3QyKToJeG9yCVIzMiglcmF4KSwgUjMyKCVyYXgpCisJeG9yCVIzMiglcmN4KSwgUjMyKCVyY3gpCisJeG9yCVIzMiglcmR4KSwgUjMyKCVyZHgpCisJeG9yCSVyOCwgJXI4CisJeG9yCSVyOSwgJXI5CisJeG9yCSVyMTAsICVyMTAKKworTCh0b3ApOglhZGQJKGFwKSwgJXJheAorCWFkYwkkMCwgJXIxMAorCWFkZAk4KGFwKSwgJXJjeAorCWFkYwkkMCwgJXI4CisJYWRkCTE2KGFwKSwgJXJkeAorCWFkYwkkMCwgJXI5CisKKwlzdWIJJDMsICVyc2kKKwlqbmcJTChlbmQpCisKKwlhZGQJMjQoYXApLCAlcmF4CisJYWRjCSQwLCAlcjEwCisJYWRkCTMyKGFwKSwgJXJjeAorCWFkYwkkMCwgJXI4CisJYWRkCTQwKGFwKSwgJXJkeAorCWxlYQk0OChhcCksIGFwCisJYWRjCSQwLCAlcjkKKworCXN1YgkkMywgJXJzaQorCWpnCUwodG9wKQorCisKKwlhZGQJJC0yNCwgYXAKK0woZW5kKToJYWRkCSVyOSwgJXJheAorCWFkYwklcjEwLCAlcmN4CisJYWRjCSVyOCwgJXJkeAorCisJaW5jCSVyc2kKKwltb3YJJDB4MSwgUjMyKCVyMTApCisJanMJTChjb21iaW5lKQorCisJbW92CSQweDEwMDAwLCBSMzIoJXIxMCkKKwlhZGMJMjQoYXApLCAlcmF4CisJZGVjCSVyc2kKKwlqcwlMKGNvbWJpbmUpCisKKwlhZGMJMzIoYXApLCAlcmN4CisJbW92CSQweDEwMDAwMDAwMCwgJXIxMAorCitMKGNvbWJpbmUpOgorCXNiYgklcnNpLCAlcnNpCQlDIGNhcnJ5CisJbW92CSVyYXgsICVyZGkJCUMgMG1vZDMKKwlzaHIJJDQ4LCAlcmF4CQlDIDBtb2QzIGhpZ2gKKworCWFuZAklcjEwLCAlcnNpCQlDIGNhcnJ5IG1hc2tlZAorCWFuZAklcjExLCAlcmRpCQlDIDBtb2QzIGxvdworCW1vdglSMzIoJXJjeCksIFIzMiglcjEwKQlDIDFtb2QzCisKKwlhZGQJJXJzaSwgJXJheAkJQyBhcHBseSBjYXJyeQorCXNocgkkMzIsICVyY3gJCUMgMW1vZDMgaGlnaAorCisJYWRkCSVyZGksICVyYXgJCUMgYXBwbHkgMG1vZDMgbG93CisJbW92endsCSVkeCwgUjMyKCVyZGkpCQlDIDJtb2QzCisJc2hsCSQxNiwgJXIxMAkJQyAxbW9kMyBsb3cKKworCWFkZAklcmN4LCAlcmF4CQlDIGFwcGx5IDFtb2QzIGhpZ2gKKwlzaHIJJDE2LCAlcmR4CQlDIDJtb2QzIGhpZ2gKKworCWFkZAklcjEwLCAlcmF4CQlDIGFwcGx5IDFtb2QzIGxvdworCXNobAkkMzIsICVyZGkJCUMgMm1vZDMgbG93CisKKwlhZGQJJXJkeCwgJXJheAkJQyBhcHBseSAybW9kMyBoaWdoCisJYWRkCSVyZGksICVyYXgJCUMgYXBwbHkgMm1vZDMgbG93CisKKwlGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvcGVudGl1bTQvbXVsXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvcGVudGl1bTQvbXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwZGU2NzAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9wZW50aXVtNC9tdWxfMS5hc20KQEAgLTAsMCArMSwzNyBAQAorZG5sICBYODYtNjQgbXBuX211bF8xIG9wdGltaXNlZCBmb3IgSW50ZWwgTm9jb25hLgorCitkbmwgIENvcHlyaWdodCAyMDE4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX211bF8xIG1wbl9tdWxfMWMpCitpbmNsdWRlX21wbihgeDg2XzY0L2JkMS9tdWxfMS5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvcGVudGl1bTQvbXVsXzIuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvcGVudGl1bTQvbXVsXzIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwZjczMDIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9wZW50aXVtNC9tdWxfMi5hc20KQEAgLTAsMCArMSwzNyBAQAorZG5sICBYODYtNjQgbXBuX211bF8yIG9wdGltaXNlZCBmb3IgSW50ZWwgTm9jb25hLgorCitkbmwgIENvcHlyaWdodCAyMDE4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX211bF8yKQoraW5jbHVkZV9tcG4oYHg4Nl82NC9iZDEvbXVsXzIuYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3BlbnRpdW00L211bF9iYXNlY2FzZS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9wZW50aXVtNC9tdWxfYmFzZWNhc2UuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMTYwMjkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9wZW50aXVtNC9tdWxfYmFzZWNhc2UuYXNtCkBAIC0wLDAgKzEsMzcgQEAKK2RubCAgWDg2LTY0IG1wbl9tdWxfYmFzZWNhc2Ugb3B0aW1pc2VkIGZvciBJbnRlbCBOb2NvbmEuCisKK2RubCAgQ29weXJpZ2h0IDIwMTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fbXVsX2Jhc2VjYXNlKQoraW5jbHVkZV9tcG4oYHg4Nl82NC9jb3JlMi9tdWxfYmFzZWNhc2UuYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3BlbnRpdW00L211bGxvX2Jhc2VjYXNlLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3BlbnRpdW00L211bGxvX2Jhc2VjYXNlLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWUwOGE4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvcGVudGl1bTQvbXVsbG9fYmFzZWNhc2UuYXNtCkBAIC0wLDAgKzEsMzcgQEAKK2RubCAgWDg2LTY0IG1wbl9tdWxsb19iYXNlY2FzZSBvcHRpbWlzZWQgZm9yIEludGVsIE5vY29uYS4KKworZG5sICBDb3B5cmlnaHQgMjAxOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9tdWxsb19iYXNlY2FzZSkKK2luY2x1ZGVfbXBuKGB4ODZfNjQvY29yZTIvbXVsbG9fYmFzZWNhc2UuYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3BlbnRpdW00L3BvcGNvdW50LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3BlbnRpdW00L3BvcGNvdW50LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDE0YjM5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvcGVudGl1bTQvcG9wY291bnQuYXNtCkBAIC0wLDAgKzEsMzUgQEAKK2RubCAgeDg2LTY0IG1wbl9wb3Bjb3VudCBvcHRpbWl6ZWQgZm9yIFBlbnRpdW0gNC4KKworZG5sICBDb3B5cmlnaHQgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX3BvcGNvdW50KQoraW5jbHVkZV9tcG4oYHg4Ni9wZW50aXVtNC9zc2UyL3BvcGNvdW50LmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9wZW50aXVtNC9yZWRjXzEuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvcGVudGl1bTQvcmVkY18xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGUzODBkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvcGVudGl1bTQvcmVkY18xLmFzbQpAQCAtMCwwICsxLDM3IEBACitkbmwgIFg4Ni02NCBtcG5fcmVkY18xIG9wdGltaXNlZCBmb3IgSW50ZWwgTm9jb25hLgorCitkbmwgIENvcHlyaWdodCAyMDE4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX3JlZGNfMSkKK2luY2x1ZGVfbXBuKGB4ODZfNjQvYnQxL3JlZGNfMS5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvcGVudGl1bTQvcnNoMWFvcnNfbi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9wZW50aXVtNC9yc2gxYW9yc19uLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTI4Y2U0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvcGVudGl1bTQvcnNoMWFvcnNfbi5hc20KQEAgLTAsMCArMSwzMzQgQEAKK2RubCAgeDg2LTY0IG1wbl9yc2gxYWRkX24vbXBuX3JzaDFzdWJfbiBvcHRpbWl6ZWQgZm9yIFBlbnRpdW0gNC4KKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDcsIDIwMDgsIDIwMTAtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBBTUQgSzgsSzkJIDQuMTMKK0MgQU1EIEsxMAkgNC4xMworQyBJbnRlbCBQNAkgNS43MAorQyBJbnRlbCBjb3JlMgkgNC43NQorQyBJbnRlbCBjb3JlaQkgNQorQyBJbnRlbCBhdG9tCSA4Ljc1CitDIFZJQSBuYW5vCSA1LjI1CisKK0MgVE9ETworQyAgKiBUcnkgdG8gbWFrZSB0aGlzIHNtYWxsZXIsIDc0NiBieXRlcyBzZWVtIGV4Y2Vzc2l2ZSBmb3IgdGhpcyAybmQgY2xhc3MKK0MgICAgZnVuY3Rpb24uICBMZXNzIHN3IHBpcGVsaW5pbmcgd291bGQgaGVscCwgYW5kIHNpbmNlIHdlIG5vdyBwcm9iYWJseQorQyAgICBwaXBlbGluZSBzb21ld2hhdCB0b28gZGVlcGx5LCBpdCBtaWdodCBub3QgYWZmZWN0IHBlcmZvcm1hbmNlIHRvbyBtdWNoLgorQyAgKiBBIHNlcGFyYXRlIHNtYWxsLW4gbG9vcCBtaWdodCBzcGVlZCB0aGluZ3MgYXMgd2VsbCBhcyBtYWtlIHRoaW5ncyBzbWFsbGVyLgorQyAgICBUaGF0IGxvb3Agc2hvdWxkIGJlIHNlbGVjdGVkIGJlZm9yZSBwdXNoaW5nIHJlZ2lzdGVycy4KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJywJYCVyZGknKQorZGVmaW5lKGB1cCcsCWAlcnNpJykKK2RlZmluZShgdnAnLAlgJXJkeCcpCitkZWZpbmUoYG4nLAlgJXJjeCcpCitkZWZpbmUoYGN5JywJYCVyOCcpCisKK2lmZGVmKGBPUEVSQVRJT05fcnNoMWFkZF9uJywgYAorCWRlZmluZShBRERTVUIsCSAgICAgIGFkZCkKKwlkZWZpbmUoZnVuYywJICAgICAgbXBuX3JzaDFhZGRfbikKKwlkZWZpbmUoZnVuY19uYywJICAgICAgbXBuX3JzaDFhZGRfbmMpJykKK2lmZGVmKGBPUEVSQVRJT05fcnNoMXN1Yl9uJywgYAorCWRlZmluZShBRERTVUIsCSAgICAgIHN1YikKKwlkZWZpbmUoZnVuYywJICAgICAgbXBuX3JzaDFzdWJfbikKKwlkZWZpbmUoZnVuY19uYywJICAgICAgbXBuX3JzaDFzdWJfbmMpJykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fcnNoMWFkZF9uIG1wbl9yc2gxYWRkX25jIG1wbl9yc2gxc3ViX24gbXBuX3JzaDFzdWJfbmMpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorUFJPTE9HVUUoZnVuYykKKwlGVU5DX0VOVFJZKDQpCisJeG9yCSVyOCwgJXI4CitJRkRPUyhgCWptcAlMKGVudCkJCScpCitFUElMT0dVRSgpCitQUk9MT0dVRShmdW5jX25jKQorCUZVTkNfRU5UUlkoNCkKK0lGRE9TKGAJbW92CTU2KCVyc3ApLCAlcjgJJykKK0woZW50KToJcHVzaAklcmJ4CisJcHVzaAklcjEyCisJcHVzaAklcjEzCisJcHVzaAklcjE0CisJcHVzaAklcjE1CisKKwltb3YJKHZwKSwgJXI5CisJbW92CSh1cCksICVyMTUKKworCW1vdglSMzIobiksIFIzMiglcmF4KQorCWFuZAkkMywgUjMyKCVyYXgpCisJam5lCUwobjAwKQorCisJbW92CVIzMiglcjgpLCBSMzIoJXJieCkJQyBuID0gMCwgNCwgOCwgLi4uCisJbW92CTgodXApLCAlcjEwCisJQUREU1VCCSVyOSwgJXIxNQorCW1vdgk4KHZwKSwgJXI5CisJc2V0YwlSOCglcmF4KQorCUFERFNVQgklcmJ4LCAlcjE1CQlDIHJldHVybiBiaXQKKwlqbmMJMWYKKwltb3YJJDEsIFI4KCVyYXgpCisxOgltb3YJMTYodXApLCAlcjEyCisJQUREU1VCCSVyOSwgJXIxMAorCW1vdgkxNih2cCksICVyOQorCXNldGMJUjgoJXJieCkKKwltb3YJJXIxNSwgJXIxMworCUFERFNVQgklcmF4LCAlcjEwCisJam5jCTFmCisJbW92CSQxLCBSOCglcmJ4KQorMToJbW92CTI0KHVwKSwgJXIxMQorCUFERFNVQgklcjksICVyMTIKKwlsZWEJMzIodXApLCB1cAorCW1vdgkyNCh2cCksICVyOQorCWxlYQkzMih2cCksIHZwCisJc2V0YwlSOCglcmF4KQorCW1vdgklcjEwLCAlcjE0CisJc2hsCSQ2MywgJXIxMAorCXNocgklcjEzCisJam1wCUwoTDAwKQorCitMKG4wMCk6CWNtcAkkMiwgUjMyKCVyYXgpCisJam5jCUwobjAxKQorCXhvcglSMzIoJXJieCksIFIzMiglcmJ4KQlDIG4gPSAxLCA1LCA5LCAuLi4KKwlsZWEJLTI0KHJwKSwgcnAKKwltb3YJUjMyKCVyOCksIFIzMiglcmF4KQorCWRlYwluCisJam56CUwoZ3QxKQorCUFERFNVQgklcjksICVyMTUKKwlzZXRjCVI4KCVyYngpCisJQUREU1VCCSVyYXgsICVyMTUKKwlqbmMJMWYKKwltb3YJJDEsIFI4KCVyYngpCisxOgltb3YJJXIxNSwgJXIxNAorCXNobAkkNjMsICVyYngKKwlzaHIJJXIxNAorCWptcAlMKGNqMSkKK0woZ3QxKToJbW92CTgodXApLCAlcjgKKwlBRERTVUIJJXI5LCAlcjE1CisJbW92CTgodnApLCAlcjkKKwlzZXRjCVI4KCVyYngpCisJQUREU1VCCSVyYXgsICVyMTUKKwlqbmMJMWYKKwltb3YJJDEsIFI4KCVyYngpCisxOgltb3YJMTYodXApLCAlcjEwCisJQUREU1VCCSVyOSwgJXI4CisJbW92CTE2KHZwKSwgJXI5CisJc2V0YwlSOCglcmF4KQorCW1vdgklcjE1LCAlcjE0CisJQUREU1VCCSVyYngsICVyOAorCWpuYwkxZgorCW1vdgkkMSwgUjgoJXJheCkKKzE6CW1vdgkyNCh1cCksICVyMTIKKwlBRERTVUIJJXI5LCAlcjEwCisJbW92CTI0KHZwKSwgJXI5CisJc2V0YwlSOCglcmJ4KQorCW1vdgklcjgsICVyMTMKKwlzaGwJJDYzLCAlcjgKKwlzaHIJJXIxNAorCWxlYQk4KHVwKSwgdXAKKwlsZWEJOCh2cCksIHZwCisJam1wCUwoTDAxKQorCitMKG4wMSk6CWpuZQlMKG4xMCkKKwlsZWEJLTE2KHJwKSwgcnAJCUMgbiA9IDIsIDYsIDEwLCAuLi4KKwltb3YJUjMyKCVyOCksIFIzMiglcmJ4KQorCW1vdgk4KHVwKSwgJXIxMQorCUFERFNVQgklcjksICVyMTUKKwltb3YJOCh2cCksICVyOQorCXNldGMJUjgoJXJheCkKKwlBRERTVUIJJXJieCwgJXIxNQorCWpuYwkxZgorCW1vdgkkMSwgUjgoJXJheCkKKzE6CXN1YgkkMiwgbgorCWpueglMKGd0MikKKwlBRERTVUIJJXI5LCAlcjExCisJc2V0YwlSOCglcmJ4KQorCW1vdgklcjE1LCAlcjEzCisJQUREU1VCCSVyYXgsICVyMTEKKwlqbmMJMWYKKwltb3YJJDEsIFI4KCVyYngpCisxOgltb3YJJXIxMSwgJXIxNAorCXNobAkkNjMsICVyMTEKKwlzaHIJJXIxMworCWptcAlMKGNqMikKK0woZ3QyKToJbW92CTE2KHVwKSwgJXI4CisJQUREU1VCCSVyOSwgJXIxMQorCW1vdgkxNih2cCksICVyOQorCXNldGMJUjgoJXJieCkKKwltb3YJJXIxNSwgJXIxMworCUFERFNVQgklcmF4LCAlcjExCisJam5jCTFmCisJbW92CSQxLCBSOCglcmJ4KQorMToJbW92CTI0KHVwKSwgJXIxMAorCUFERFNVQgklcjksICVyOAorCW1vdgkyNCh2cCksICVyOQorCXNldGMJUjgoJXJheCkKKwltb3YJJXIxMSwgJXIxNAorCXNobAkkNjMsICVyMTEKKwlzaHIJJXIxMworCWxlYQkxNih1cCksIHVwCisJbGVhCTE2KHZwKSwgdnAKKwlqbXAJTChMMTApCisKK0wobjEwKToJeG9yCVIzMiglcmJ4KSwgUjMyKCVyYngpCUMgbiA9IDMsIDcsIDExLCAuLi4KKwlsZWEJLTgocnApLCBycAorCW1vdglSMzIoJXI4KSwgUjMyKCVyYXgpCisJbW92CTgodXApLCAlcjEyCisJQUREU1VCCSVyOSwgJXIxNQorCW1vdgk4KHZwKSwgJXI5CisJc2V0YwlSOCglcmJ4KQorCUFERFNVQgklcmF4LCAlcjE1CisJam5jCTFmCisJbW92CSQxLCBSOCglcmJ4KQorMToJbW92CTE2KHVwKSwgJXIxMQorCUFERFNVQgklcjksICVyMTIKKwltb3YJMTYodnApLCAlcjkKKwlzZXRjCVI4KCVyYXgpCisJbW92CSVyMTUsICVyMTQKKwlBRERTVUIJJXJieCwgJXIxMgorCWpuYwkxZgorCW1vdgkkMSwgUjgoJXJheCkKKzE6CXN1YgkkMywgbgorCWpueglMKGd0MykKKwlBRERTVUIJJXI5LCAlcjExCisJc2V0YwlSOCglcmJ4KQorCW1vdgklcjEyLCAlcjEzCisJc2hsCSQ2MywgJXIxMgorCXNocgklcjE0CisJam1wCUwoY2ozKQorTChndDMpOgltb3YJMjQodXApLCAlcjgKKwlBRERTVUIJJXI5LCAlcjExCisJbW92CTI0KHZwKSwgJXI5CisJc2V0YwlSOCglcmJ4KQorCW1vdgklcjEyLCAlcjEzCisJc2hsCSQ2MywgJXIxMgorCXNocgklcjE0CisJbGVhCTI0KHVwKSwgdXAKKwlsZWEJMjQodnApLCB2cAorCWptcAlMKEwxMSkKKworTChjMCk6CW1vdgkkMSwgUjgoJXJieCkKKwlqbXAJTChyYzApCitMKGMxKToJbW92CSQxLCBSOCglcmF4KQorCWptcAlMKHJjMSkKK0woYzIpOgltb3YJJDEsIFI4KCVyYngpCisJam1wCUwocmMyKQorCisJQUxJR04oMTYpCitMKHRvcCk6CW1vdgkodXApLCAlcjgJQyBub3Qgb24gY3JpdGljYWwgcGF0aAorCW9yCSVyMTMsICVyMTAKKwlBRERTVUIJJXI5LCAlcjExCUMgbm90IG9uIGNyaXRpY2FsIHBhdGgKKwltb3YJKHZwKSwgJXI5CUMgbm90IG9uIGNyaXRpY2FsIHBhdGgKKwlzZXRjCVI4KCVyYngpCUMgc2F2ZSBjYXJyeSBvdXQKKwltb3YJJXIxMiwgJXIxMwlDIG5ldyBmb3IgbGF0ZXIKKwlzaGwJJDYzLCAlcjEyCUMgc2hpZnQgbmV3IHJpZ2h0CisJc2hyCSVyMTQJCUMgc2hpZnQgb2xkIGxlZnQKKwltb3YJJXIxMCwgKHJwKQorTChMMTEpOglBRERTVUIJJXJheCwgJXIxMQlDIGFwcGx5IHByZXZpb3VzIGNhcnJ5IG91dAorCWpjCUwoYzApCQlDIGp1bXAgaWYgcmlwcGxlCitMKHJjMCk6CW1vdgk4KHVwKSwgJXIxMAorCW9yCSVyMTQsICVyMTIKKwlBRERTVUIJJXI5LCAlcjgKKwltb3YJOCh2cCksICVyOQorCXNldGMJUjgoJXJheCkKKwltb3YJJXIxMSwgJXIxNAorCXNobAkkNjMsICVyMTEKKwlzaHIJJXIxMworCW1vdgklcjEyLCA4KHJwKQorTChMMTApOglBRERTVUIJJXJieCwgJXI4CisJamMJTChjMSkKK0wocmMxKToJbW92CTE2KHVwKSwgJXIxMgorCW9yCSVyMTMsICVyMTEKKwlBRERTVUIJJXI5LCAlcjEwCisJbW92CTE2KHZwKSwgJXI5CisJc2V0YwlSOCglcmJ4KQorCW1vdgklcjgsICVyMTMKKwlzaGwJJDYzLCAlcjgKKwlzaHIJJXIxNAorCW1vdgklcjExLCAxNihycCkKK0woTDAxKToJQUREU1VCCSVyYXgsICVyMTAKKwlqYwlMKGMyKQorTChyYzIpOgltb3YJMjQodXApLCAlcjExCisJb3IJJXIxNCwgJXI4CisJQUREU1VCCSVyOSwgJXIxMgorCWxlYQkzMih1cCksIHVwCisJbW92CTI0KHZwKSwgJXI5CisJbGVhCTMyKHZwKSwgdnAKKwlzZXRjCVI4KCVyYXgpCisJbW92CSVyMTAsICVyMTQKKwlzaGwJJDYzLCAlcjEwCisJc2hyCSVyMTMKKwltb3YJJXI4LCAyNChycCkKKwlsZWEJMzIocnApLCBycAorTChMMDApOglBRERTVUIJJXJieCwgJXIxMgorCWpjCUwoYzMpCitMKHJjMyk6CXN1YgkkNCwgbgorCWphCUwodG9wKQorCitMKGVuZCk6CW9yCSVyMTMsICVyMTAKKwlBRERTVUIJJXI5LCAlcjExCisJc2V0YwlSOCglcmJ4KQorCW1vdgklcjEyLCAlcjEzCisJc2hsCSQ2MywgJXIxMgorCXNocgklcjE0CisJbW92CSVyMTAsIChycCkKK0woY2ozKToJQUREU1VCCSVyYXgsICVyMTEKKwlqbmMJMWYKKwltb3YJJDEsIFI4KCVyYngpCisxOglvcgklcjE0LCAlcjEyCisJbW92CSVyMTEsICVyMTQKKwlzaGwJJDYzLCAlcjExCisJc2hyCSVyMTMKKwltb3YJJXIxMiwgOChycCkKK0woY2oyKToJb3IJJXIxMywgJXIxMQorCXNobAkkNjMsICVyYngKKwlzaHIJJXIxNAorCW1vdgklcjExLCAxNihycCkKK0woY2oxKToJb3IJJXIxNCwgJXJieAorCW1vdgklcmJ4LCAyNChycCkKKworCW1vdglSMzIoJXIxNSksIFIzMiglcmF4KQorCWFuZAkkMSwgUjMyKCVyYXgpCisJcG9wCSVyMTUKKwlwb3AJJXIxNAorCXBvcAklcjEzCisJcG9wCSVyMTIKKwlwb3AJJXJieAorCUZVTkNfRVhJVCgpCisJcmV0CitMKGMzKToJbW92CSQxLCBSOCglcmF4KQorCWptcAlMKHJjMykKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3BlbnRpdW00L3JzaGlmdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9wZW50aXVtNC9yc2hpZnQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3YzFlZTIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9wZW50aXVtNC9yc2hpZnQuYXNtCkBAIC0wLDAgKzEsMTY5IEBACitkbmwgIHg4Ni02NCBtcG5fcnNoaWZ0IG9wdGltaXplZCBmb3IgUGVudGl1bSA0LgorCitkbmwgIENvcHlyaWdodCAyMDAzLCAyMDA1LCAyMDA3LCAyMDA4LCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIEFNRCBLOCxLOQkgMi41CitDIEFNRCBLMTAJID8KK0MgSW50ZWwgUDQJIDMuMjkKK0MgSW50ZWwgY29yZTIJIDIuMSAoZmx1Y3R1YXRlcywgcHJlc3VtYWJseSBjYWNoZSByZWxhdGVkKQorQyBJbnRlbCBjb3JlaQkgPworQyBJbnRlbCBhdG9tCTE0LjMKK0MgVklBIG5hbm8JID8KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJyxgJXJkaScpCitkZWZpbmUoYHVwJyxgJXJzaScpCitkZWZpbmUoYG4nLGAlcmR4JykKK2RlZmluZShgY250JyxgJWNsJykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMzIpCitQUk9MT0dVRShtcG5fcnNoaWZ0KQorCUZVTkNfRU5UUlkoNCkKKwltb3YJKHVwKSwgJXJheAorCW1vdmQJUjMyKCVyY3gpLCAlbW00CisJbmVnCVIzMiglcmN4KQkJCUMgcHV0IGxzaCBjb3VudCBpbiBjbAorCWFuZAkkNjMsIFIzMiglcmN4KQorCW1vdmQJUjMyKCVyY3gpLCAlbW01CisKKwlsZWEJLTgodXAsbiw4KSwgdXAKKwlsZWEJLTgocnAsbiw4KSwgcnAKKwlsZWEJMShuKSwgUjMyKCVyOCkKKwluZWcJbgorCisJc2hsCVI4KCVyY3gpLCAlcmF4CQlDIGZ1bmN0aW9uIHJldHVybiB2YWx1ZQorCisJYW5kCSQzLCBSMzIoJXI4KQorCWplCUwocm9sKQkJCUMganVtcCBmb3IgbiA9IDMsIDcsIDExLCAuLi4KKworCWRlYwlSMzIoJXI4KQorCWpuZQlMKDEpCitDCW4gPSA0LCA4LCAxMiwgLi4uCisJbW92cQk4KHVwLG4sOCksICVtbTIKKwlwc3JscQklbW00LCAlbW0yCisJbW92cQkxNih1cCxuLDgpLCAlbW0wCisJcHNsbHEJJW1tNSwgJW1tMAorCXBvcgklbW0wLCAlbW0yCisJbW92cQklbW0yLCA4KHJwLG4sOCkKKwlpbmMJbgorCWptcAlMKHJvbCkKKworTCgxKToJZGVjCVIzMiglcjgpCisJamUJTCgxeCkJCQlDIGp1bXAgZm9yIG4gPSAxLCA1LCA5LCAxMywgLi4uCitDCW4gPSAyLCA2LCAxMCwgMTYsIC4uLgorCW1vdnEJOCh1cCxuLDgpLCAlbW0yCisJcHNybHEJJW1tNCwgJW1tMgorCW1vdnEJMTYodXAsbiw4KSwgJW1tMAorCXBzbGxxCSVtbTUsICVtbTAKKwlwb3IJJW1tMCwgJW1tMgorCW1vdnEJJW1tMiwgOChycCxuLDgpCisJaW5jCW4KK0woMXgpOgorCWNtcAkkLTEsIG4KKwlqZQlMKGFzdCkKKwltb3ZxCTgodXAsbiw4KSwgJW1tMgorCXBzcmxxCSVtbTQsICVtbTIKKwltb3ZxCTE2KHVwLG4sOCksICVtbTMKKwlwc3JscQklbW00LCAlbW0zCisJbW92cQkxNih1cCxuLDgpLCAlbW0wCisJbW92cQkyNCh1cCxuLDgpLCAlbW0xCisJcHNsbHEJJW1tNSwgJW1tMAorCXBvcgklbW0wLCAlbW0yCisJcHNsbHEJJW1tNSwgJW1tMQorCXBvcgklbW0xLCAlbW0zCisJbW92cQklbW0yLCA4KHJwLG4sOCkKKwltb3ZxCSVtbTMsIDE2KHJwLG4sOCkKKwlhZGQJJDIsIG4KKworTChyb2wpOgltb3ZxCTgodXAsbiw4KSwgJW1tMgorCXBzcmxxCSVtbTQsICVtbTIKKwltb3ZxCTE2KHVwLG4sOCksICVtbTMKKwlwc3JscQklbW00LCAlbW0zCisKKwlhZGQJJDQsIG4JCQlDCQkJCSAgICAgIDQKKwlqYglMKGVuZCkJCQlDCQkJCSAgICAgIDIKKwlBTElHTigzMikKK0wodG9wKToKKwlDIGZpbmlzaCBzdHVmZiBmcm9tIGxzaCBibG9jaworCW1vdnEJLTE2KHVwLG4sOCksICVtbTAKKwltb3ZxCS04KHVwLG4sOCksICVtbTEKKwlwc2xscQklbW01LCAlbW0wCisJcG9yCSVtbTAsICVtbTIKKwlwc2xscQklbW01LCAlbW0xCisJbW92cQkodXAsbiw4KSwgJW1tMAorCXBvcgklbW0xLCAlbW0zCisJbW92cQk4KHVwLG4sOCksICVtbTEKKwltb3ZxCSVtbTIsIC0yNChycCxuLDgpCisJbW92cQklbW0zLCAtMTYocnAsbiw4KQorCUMgc3RhcnQgdHdvIG5ldyByc2gKKwlwc2xscQklbW01LCAlbW0wCisJcHNsbHEJJW1tNSwgJW1tMQorCisJQyBmaW5pc2ggc3R1ZmYgZnJvbSByc2ggYmxvY2sKKwltb3ZxCS04KHVwLG4sOCksICVtbTIKKwltb3ZxCSh1cCxuLDgpLCAlbW0zCisJcHNybHEJJW1tNCwgJW1tMgorCXBvcgklbW0yLCAlbW0wCisJcHNybHEJJW1tNCwgJW1tMworCW1vdnEJOCh1cCxuLDgpLCAlbW0yCisJcG9yCSVtbTMsICVtbTEKKwltb3ZxCTE2KHVwLG4sOCksICVtbTMKKwltb3ZxCSVtbTAsIC04KHJwLG4sOCkKKwltb3ZxCSVtbTEsIChycCxuLDgpCisJQyBzdGFydCB0d28gbmV3IGxzaAorCWFkZAkkNCwgbgorCXBzcmxxCSVtbTQsICVtbTIKKwlwc3JscQklbW00LCAlbW0zCisKKwlqYWUJTCh0b3ApCQkJQwkJCQkgICAgICAyCitMKGVuZCk6CisJbW92cQktOCh1cCksICVtbTAKKwlwc2xscQklbW01LCAlbW0wCisJcG9yCSVtbTAsICVtbTIKKwltb3ZxCSh1cCksICVtbTEKKwlwc2xscQklbW01LCAlbW0xCisJcG9yCSVtbTEsICVtbTMKKwltb3ZxCSVtbTIsIC0xNihycCkKKwltb3ZxCSVtbTMsIC04KHJwKQorCitMKGFzdCk6CW1vdnEJKHVwKSwgJW1tMgorCXBzcmxxCSVtbTQsICVtbTIKKwltb3ZxCSVtbTIsIChycCkKKwllbW1zCisJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3BlbnRpdW00L3NlY190YWJzZWxlY3QuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvcGVudGl1bTQvc2VjX3RhYnNlbGVjdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQzNjAzNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3BlbnRpdW00L3NlY190YWJzZWxlY3QuYXNtCkBAIC0wLDAgKzEsMzcgQEAKK2RubCAgWDg2LTY0IG1wbl9zZWNfdGFic2VsZWN0LgorCitkbmwgIENvcHlyaWdodCAyMDEyLCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX3NlY190YWJzZWxlY3QpCitpbmNsdWRlX21wbihgeDg2XzY0L2Zhc3Rzc2Uvc2VjX3RhYnNlbGVjdC5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvcGVudGl1bTQvc3FyX2Jhc2VjYXNlLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3BlbnRpdW00L3Nxcl9iYXNlY2FzZS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTcyNTI4NwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3BlbnRpdW00L3Nxcl9iYXNlY2FzZS5hc20KQEAgLTAsMCArMSwzNyBAQAorZG5sICBYODYtNjQgbXBuX3Nxcl9iYXNlY2FzZSBvcHRpbWlzZWQgZm9yIEludGVsIE5vY29uYS4KKworZG5sICBDb3B5cmlnaHQgMjAxOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9zcXJfYmFzZWNhc2UpCitpbmNsdWRlX21wbihgeDg2XzY0L2NvcmUyL3Nxcl9iYXNlY2FzZS5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvcG9waGFtLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3BvcGhhbS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EyOWIyZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3BvcGhhbS5hc20KQEAgLTAsMCArMSwxNjMgQEAKK2RubCAgQU1ENjQgbXBuX3BvcGNvdW50LCBtcG5faGFtZGlzdCAtLSBwb3B1bGF0aW9uIGNvdW50IGFuZCBoYW1taW5nIGRpc3RhbmNlLgorCitkbmwgIENvcHlyaWdodCAyMDA0LCAyMDA1LCAyMDA3LCAyMDEwLTIwMTIsIDIwMTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MJCSAgICAgcG9wY291bnQJICAgICAgaGFtZGlzdAorQwkJICAgIGN5Y2xlcy9saW1iCSAgICBjeWNsZXMvbGltYgorQyBBTUQgSzgsSzkJCSA2CQkgNworQyBBTUQgSzEwCQkgNgkJIDcKK0MgSW50ZWwgUDQJCTEyCQkxNC4zCitDIEludGVsIGNvcmUyCQkgNwkJIDgKK0MgSW50ZWwgY29yZWkJCSA/CQkgNy4zCitDIEludGVsIGF0b20JCTE2LjUJCTE3LjUKK0MgVklBIG5hbm8JCSA4Ljc1CQkxMC40CisKK0MgVE9ETworQyAgKiBUdW5lLiAgSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHJlYWNoIDUgYy9sIGZvciBwb3Bjb3VudCBhbmQgNiBjL2wgZm9yCitDICAgIGhhbWRpc3QgZm9yIEs4L0s5LgorCisKK2lmZGVmKGBPUEVSQVRJT05fcG9wY291bnQnLGAKKyAgZGVmaW5lKGBmdW5jJyxgbXBuX3BvcGNvdW50JykKKyAgZGVmaW5lKGB1cCcsCQlgJXJkaScpCisgIGRlZmluZShgbicsCQlgJXJzaScpCisgIGRlZmluZShgaDU1NTU1NTU1JywJYCVyMTAnKQorICBkZWZpbmUoYGgzMzMzMzMzMycsCWAlcjExJykKKyAgZGVmaW5lKGBoMGYwZjBmMGYnLAlgJXJjeCcpCisgIGRlZmluZShgaDAxMDEwMTAxJywJYCVyZHgnKQorICBkZWZpbmUoYFBPUCcsCQlgJDEnKQorICBkZWZpbmUoYEhBTScsCQlgZG5sJykKKycpCitpZmRlZihgT1BFUkFUSU9OX2hhbWRpc3QnLGAKKyAgZGVmaW5lKGBmdW5jJyxgbXBuX2hhbWRpc3QnKQorICBkZWZpbmUoYHVwJywJCWAlcmRpJykKKyAgZGVmaW5lKGB2cCcsCQlgJXJzaScpCisgIGRlZmluZShgbicsCQlgJXJkeCcpCisgIGRlZmluZShgaDU1NTU1NTU1JywJYCVyMTAnKQorICBkZWZpbmUoYGgzMzMzMzMzMycsCWAlcjExJykKKyAgZGVmaW5lKGBoMGYwZjBmMGYnLAlgJXJjeCcpCisgIGRlZmluZShgaDAxMDEwMTAxJywJYCVyMTInKQorICBkZWZpbmUoYFBPUCcsCQlgZG5sJykKKyAgZGVmaW5lKGBIQU0nLAkJYCQxJykKKycpCisKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fcG9wY291bnQgbXBuX2hhbWRpc3QpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDMyKQorUFJPTE9HVUUoZnVuYykKKyBQT1AoYAlGVU5DX0VOVFJZKDIpCQknKQorIEhBTShgCUZVTkNfRU5UUlkoMykJCScpCisJcHVzaAklcmJ4CisJbW92CSQweDU1NTU1NTU1NTU1NTU1NTUsIGg1NTU1NTU1NQorCXB1c2gJJXJicAorCW1vdgkkMHgzMzMzMzMzMzMzMzMzMzMzLCBoMzMzMzMzMzMKKyBIQU0oYAlwdXNoCSVyMTIJCScpCisJbGVhCSh1cCxuLDgpLCB1cAorCW1vdgkkMHgwZjBmMGYwZjBmMGYwZjBmLCBoMGYwZjBmMGYKKyBIQU0oYAlsZWEJKHZwLG4sOCksIHZwCScpCisJbmVnCW4KKwltb3YJJDB4MDEwMTAxMDEwMTAxMDEwMSwgaDAxMDEwMTAxCisJeG9yCVIzMiglcmF4KSwgUjMyKCVyYXgpCisJdGVzdAkkMSwgUjgobikKKwlqeglMKHRvcCkKKworCW1vdgkodXAsbiw4KSwgJXI4CisgSEFNKGAJeG9yCSh2cCxuLDgpLCAlcjgJJykKKworCW1vdgklcjgsICVyOQorCXNocgklcjgKKwlhbmQJaDU1NTU1NTU1LCAlcjgKKwlzdWIJJXI4LCAlcjkKKworCW1vdgklcjksICVyOAorCXNocgkkMiwgJXI5CisJYW5kCWgzMzMzMzMzMywgJXI4CisJYW5kCWgzMzMzMzMzMywgJXI5CisJYWRkCSVyOCwgJXI5CQlDIDE2IDQtYml0IGZpZWxkcyAoMC4uNCkKKworCWRlYwluCisJam1wCUwobWlkKQorCisJQUxJR04oMTYpCitMKHRvcCk6CW1vdgkodXAsbiw4KSwgJXI4CisJbW92CTgodXAsbiw4KSwgJXJieAorIEhBTShgCXhvcgkodnAsbiw4KSwgJXI4CScpCisgSEFNKGAJeG9yCTgodnAsbiw4KSwgJXJieAknKQorCisJbW92CSVyOCwgJXI5CisJbW92CSVyYngsICVyYnAKKwlzaHIJJXI4CisJc2hyCSVyYngKKwlhbmQJaDU1NTU1NTU1LCAlcjgKKwlhbmQJaDU1NTU1NTU1LCAlcmJ4CisJc3ViCSVyOCwgJXI5CisJc3ViCSVyYngsICVyYnAKKworCW1vdgklcjksICVyOAorCW1vdgklcmJwLCAlcmJ4CisJc2hyCSQyLCAlcjkKKwlzaHIJJDIsICVyYnAKKwlhbmQJaDMzMzMzMzMzLCAlcjgKKwlhbmQJaDMzMzMzMzMzLCAlcjkKKwlhbmQJaDMzMzMzMzMzLCAlcmJ4CisJYW5kCWgzMzMzMzMzMywgJXJicAorCWFkZAklcjgsICVyOQkJQyAxNiA0LWJpdCBmaWVsZHMgKDAuLjQpCisJYWRkCSVyYngsICVyYnAJCUMgMTYgNC1iaXQgZmllbGRzICgwLi40KQorCisJYWRkCSVyYnAsICVyOQkJQyAxNiA0LWJpdCBmaWVsZHMgKDAuLjgpCitMKG1pZCk6CW1vdgklcjksICVyOAorCXNocgkkNCwgJXI5CisJYW5kCWgwZjBmMGYwZiwgJXI4CisJYW5kCWgwZjBmMGYwZiwgJXI5CisJYWRkCSVyOCwgJXI5CQlDIDggOC1iaXQgZmllbGRzICgwLi4xNikKKworCWltdWwJaDAxMDEwMTAxLCAlcjkJCUMgc3VtIHRoZSA4IGZpZWxkcyBpbiBoaWdoIDggYml0cworCXNocgkkNTYsICVyOQorCisJYWRkCSVyOSwgJXJheAkJQyBhZGQgdG8gdG90YWwKKwlhZGQJJDIsIG4KKwlqbmMJTCh0b3ApCisKK0woZW5kKToKKyBIQU0oYAlwb3AJJXIxMgkJJykKKwlwb3AJJXJicAorCXBvcAklcmJ4CisJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3JzaDFhb3JzX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvcnNoMWFvcnNfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNlOWNjNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3JzaDFhb3JzX24uYXNtCkBAIC0wLDAgKzEsMTg5IEBACitkbmwgIEFNRDY0IG1wbl9yc2gxYWRkX24gLS0gcnBbXSA9ICh1cFtdICsgdnBbXSkgPj4gMQorZG5sICBBTUQ2NCBtcG5fcnNoMXN1Yl9uIC0tIHJwW10gPSAodXBbXSAtIHZwW10pID4+IDEKKworZG5sICBDb3B5cmlnaHQgMjAwMywgMjAwNSwgMjAwOSwgMjAxMSwgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIKK0MgQU1EIEs4LEs5CSAyLjE0CShtcG5fYWRkX24gKyBtcG5fcnNoaWZ0IG5lZWQgNC4xMjUpCitDIEFNRCBLMTAJIDIuMTQJKG1wbl9hZGRfbiArIG1wbl9yc2hpZnQgbmVlZCA0LjEyNSkKK0MgSW50ZWwgUDQJMTIuNzUKK0MgSW50ZWwgY29yZTIJIDMuNzUKK0MgSW50ZWwgTk1ICSA0LjQKK0MgSW50ZWwgU0JSCSA/CitDIEludGVsIGF0b20JID8KK0MgVklBIG5hbm8JIDMuMjUKKworQyBUT0RPCitDICAqIFJld3JpdGUgdG8gdXNlIGluZGV4ZWQgYWRkcmVzc2luZywgbGlrZSBhZGRsc2gxLmFzbSBhbmQgc3VibHNoMS5hc20uCisKK0MgSU5QVVQgUEFSQU1FVEVSUworZGVmaW5lKGBycCcsIGAlcmRpJykKK2RlZmluZShgdXAnLCBgJXJzaScpCitkZWZpbmUoYHZwJywgYCVyZHgnKQorZGVmaW5lKGBuJyxgICAlcmN4JykKKworaWZkZWYoYE9QRVJBVElPTl9yc2gxYWRkX24nLCBgCisJZGVmaW5lKEFERFNVQiwJICAgICAgYWRkKQorCWRlZmluZShBRENTQkIsCSAgICAgIGFkYykKKwlkZWZpbmUoZnVuY19uLAkgICAgICBtcG5fcnNoMWFkZF9uKQorCWRlZmluZShmdW5jX25jLAkgICAgICBtcG5fcnNoMWFkZF9uYyknKQoraWZkZWYoYE9QRVJBVElPTl9yc2gxc3ViX24nLCBgCisJZGVmaW5lKEFERFNVQiwJICAgICAgc3ViKQorCWRlZmluZShBRENTQkIsCSAgICAgIHNiYikKKwlkZWZpbmUoZnVuY19uLAkgICAgICBtcG5fcnNoMXN1Yl9uKQorCWRlZmluZShmdW5jX25jLAkgICAgICBtcG5fcnNoMXN1Yl9uYyknKQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9yc2gxYWRkX24gbXBuX3JzaDFhZGRfbmMgbXBuX3JzaDFzdWJfbiBtcG5fcnNoMXN1Yl9uYykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMTYpCitQUk9MT0dVRShmdW5jX25jKQorCUZVTkNfRU5UUlkoNCkKK0lGRE9TKGAJbW92CTU2KCVyc3ApLCAlcjgJJykKKwlwdXNoCSVyYngKKworCXhvcglSMzIoJXJheCksIFIzMiglcmF4KQorCW5lZwklcjgJCQlDIHNldCBDIGZsYWcgZnJvbSBwYXJhbWV0ZXIKKwltb3YJKHVwKSwgJXJieAorCUFEQ1NCQgkodnApLCAlcmJ4CisJam1wCUwoZW50KQorRVBJTE9HVUUoKQorCisJQUxJR04oMTYpCitQUk9MT0dVRShmdW5jX24pCisJRlVOQ19FTlRSWSg0KQorCXB1c2gJJXJieAorCisJeG9yCVIzMiglcmF4KSwgUjMyKCVyYXgpCisJbW92CSh1cCksICVyYngKKwlBRERTVUIJKHZwKSwgJXJieAorTChlbnQpOgorCXJjcgklcmJ4CQkJQyByb3RhdGUsIHNhdmUgYWN5CisJYWRjCVIzMiglcmF4KSwgUjMyKCVyYXgpCUMgcmV0dXJuIHZhbHVlCisKKwltb3YJUjMyKG4pLCBSMzIoJXIxMSkKKwlhbmQJJDMsIFIzMiglcjExKQorCisJY21wCSQxLCBSMzIoJXIxMSkKKwlqZQlMKGRvKQkJCUMganVtcCBpZiBuID0gMSA1IDkgLi4uCisKK0wobjEpOgljbXAJJDIsIFIzMiglcjExKQorCWpuZQlMKG4yKQkJCUMganVtcCB1bmxlc3MgbiA9IDIgNiAxMCAuLi4KKwlhZGQJJXJieCwgJXJieAkJQyByb3RhdGUgY2FycnkgbGltYiwgcmVzdG9yZSBhY3kKKwltb3YJOCh1cCksICVyMTAKKwlBRENTQkIJOCh2cCksICVyMTAKKwlsZWEJOCh1cCksIHVwCisJbGVhCTgodnApLCB2cAorCWxlYQk4KHJwKSwgcnAKKwlyY3IJJXIxMAorCXJjcgklcmJ4CisJbW92CSVyYngsIC04KHJwKQorCWptcAlMKGNqMSkKKworTChuMik6CWNtcAkkMywgUjMyKCVyMTEpCisJam5lCUwobjMpCQkJQyBqdW1wIHVubGVzcyBuID0gMyA3IDExIC4uLgorCWFkZAklcmJ4LCAlcmJ4CQlDIHJvdGF0ZSBjYXJyeSBsaW1iLCByZXN0b3JlIGFjeQorCW1vdgk4KHVwKSwgJXI5CisJbW92CTE2KHVwKSwgJXIxMAorCUFEQ1NCQgk4KHZwKSwgJXI5CisJQURDU0JCCTE2KHZwKSwgJXIxMAorCWxlYQkxNih1cCksIHVwCisJbGVhCTE2KHZwKSwgdnAKKwlsZWEJMTYocnApLCBycAorCXJjcgklcjEwCisJcmNyCSVyOQorCXJjcgklcmJ4CisJbW92CSVyYngsIC0xNihycCkKKwlqbXAJTChjajIpCisKK0wobjMpOglkZWMJbgkJCUMgY29tZSBoZXJlIGZvciBuID0gNCA4IDEyIC4uLgorCWFkZAklcmJ4LCAlcmJ4CQlDIHJvdGF0ZSBjYXJyeSBsaW1iLCByZXN0b3JlIGFjeQorCW1vdgk4KHVwKSwgJXI4CisJbW92CTE2KHVwKSwgJXI5CisJQURDU0JCCTgodnApLCAlcjgKKwlBRENTQkIJMTYodnApLCAlcjkKKwltb3YJMjQodXApLCAlcjEwCisJQURDU0JCCTI0KHZwKSwgJXIxMAorCWxlYQkyNCh1cCksIHVwCisJbGVhCTI0KHZwKSwgdnAKKwlsZWEJMjQocnApLCBycAorCXJjcgklcjEwCisJcmNyCSVyOQorCXJjcgklcjgKKwlyY3IJJXJieAorCW1vdgklcmJ4LCAtMjQocnApCisJbW92CSVyOCwgLTE2KHJwKQorTChjajIpOgltb3YJJXI5LCAtOChycCkKK0woY2oxKToJbW92CSVyMTAsICVyYngKKworTChkbyk6CisJc2hyCSQyLCBuCQkJQwkJCQk0CisJamUJTChlbmQpCQkJQwkJCQkyCisJQUxJR04oMTYpCitMKHRvcCk6CWFkZAklcmJ4LCAlcmJ4CQlDIHJvdGF0ZSBjYXJyeSBsaW1iLCByZXN0b3JlIGFjeQorCisJbW92CTgodXApLCAlcjgKKwltb3YJMTYodXApLCAlcjkKKwlBRENTQkIJOCh2cCksICVyOAorCUFEQ1NCQgkxNih2cCksICVyOQorCW1vdgkyNCh1cCksICVyMTAKKwltb3YJMzIodXApLCAlcjExCisJQURDU0JCCTI0KHZwKSwgJXIxMAorCUFEQ1NCQgkzMih2cCksICVyMTEKKworCWxlYQkzMih1cCksIHVwCisJbGVhCTMyKHZwKSwgdnAKKworCXJjcgklcjExCQkJQyByb3RhdGUsIHNhdmUgYWN5CisJcmNyCSVyMTAKKwlyY3IJJXI5CisJcmNyCSVyOAorCisJcmNyCSVyYngKKwltb3YJJXJieCwgKHJwKQorCW1vdgklcjgsIDgocnApCisJbW92CSVyOSwgMTYocnApCisJbW92CSVyMTAsIDI0KHJwKQorCW1vdgklcjExLCAlcmJ4CisKKwlsZWEJMzIocnApLCBycAorCWRlYwluCisJam5lCUwodG9wKQorCitMKGVuZCk6CW1vdgklcmJ4LCAocnApCisJcG9wCSVyYngKKwlGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvcnNoaWZ0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3JzaGlmdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YzNDRmMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3JzaGlmdC5hc20KQEAgLTAsMCArMSwxNzYgQEAKK2RubCAgQU1ENjQgbXBuX3JzaGlmdCAtLSBtcG4gcmlnaHQgc2hpZnQuCisKK2RubCAgQ29weXJpZ2h0IDIwMDMsIDIwMDUsIDIwMDksIDIwMTEsIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworCitDCSAgICAgY3ljbGVzL2xpbWIKK0MgQU1EIEs4LEs5CSAyLjM3NQorQyBBTUQgSzEwCSAyLjM3NQorQyBJbnRlbCBQNAkgOAorQyBJbnRlbCBjb3JlMgkgMi4xMQorQyBJbnRlbCBjb3JlaQkgPworQyBJbnRlbCBhdG9tCSA1Ljc1CitDIFZJQSBuYW5vCSAzLjUKKworCitDIElOUFVUIFBBUkFNRVRFUlMKK2RlZmluZShgcnAnLAlgJXJkaScpCitkZWZpbmUoYHVwJywJYCVyc2knKQorZGVmaW5lKGBuJywJYCVyZHgnKQorZGVmaW5lKGBjbnQnLAlgJXJjeCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDMyKQorUFJPTE9HVUUobXBuX3JzaGlmdCkKKwlGVU5DX0VOVFJZKDQpCisJbmVnCVIzMiglcmN4KQkJQyBwdXQgcnNoIGNvdW50IGluIGNsCisJbW92CSh1cCksICVyYXgKKwlzaGwJUjgoJXJjeCksICVyYXgJCUMgZnVuY3Rpb24gcmV0dXJuIHZhbHVlCisJbmVnCVIzMiglcmN4KQkJQyBwdXQgbHNoIGNvdW50IGluIGNsCisKKwlsZWEJMShuKSwgUjMyKCVyOCkKKworCWxlYQktOCh1cCxuLDgpLCB1cAorCWxlYQktOChycCxuLDgpLCBycAorCW5lZwluCisKKwlhbmQJJDMsIFIzMiglcjgpCisJamUJTChybHgpCQkJQyBqdW1wIGZvciBuID0gMywgNywgMTEsIC4uLgorCisJZGVjCVIzMiglcjgpCisJam5lCUwoMSkKK0MJbiA9IDQsIDgsIDEyLCAuLi4KKwltb3YJOCh1cCxuLDgpLCAlcjEwCisJc2hyCVI4KCVyY3gpLCAlcjEwCisJbmVnCVIzMiglcmN4KQkJQyBwdXQgcnNoIGNvdW50IGluIGNsCisJbW92CTE2KHVwLG4sOCksICVyOAorCXNobAlSOCglcmN4KSwgJXI4CisJb3IJJXI4LCAlcjEwCisJbW92CSVyMTAsIDgocnAsbiw4KQorCWluYwluCisJam1wCUwocmxsKQorCitMKDEpOglkZWMJUjMyKCVyOCkKKwlqZQlMKDF4KQkJCUMganVtcCBmb3IgbiA9IDEsIDUsIDksIDEzLCAuLi4KK0MJbiA9IDIsIDYsIDEwLCAxNiwgLi4uCisJbW92CTgodXAsbiw4KSwgJXIxMAorCXNocglSOCglcmN4KSwgJXIxMAorCW5lZwlSMzIoJXJjeCkJCUMgcHV0IHJzaCBjb3VudCBpbiBjbAorCW1vdgkxNih1cCxuLDgpLCAlcjgKKwlzaGwJUjgoJXJjeCksICVyOAorCW9yCSVyOCwgJXIxMAorCW1vdgklcjEwLCA4KHJwLG4sOCkKKwlpbmMJbgorCW5lZwlSMzIoJXJjeCkJCUMgcHV0IGxzaCBjb3VudCBpbiBjbAorTCgxeCk6CisJY21wCSQtMSwgbgorCWplCUwoYXN0KQorCW1vdgk4KHVwLG4sOCksICVyMTAKKwlzaHIJUjgoJXJjeCksICVyMTAKKwltb3YJMTYodXAsbiw4KSwgJXIxMQorCXNocglSOCglcmN4KSwgJXIxMQorCW5lZwlSMzIoJXJjeCkJCUMgcHV0IHJzaCBjb3VudCBpbiBjbAorCW1vdgkxNih1cCxuLDgpLCAlcjgKKwltb3YJMjQodXAsbiw4KSwgJXI5CisJc2hsCVI4KCVyY3gpLCAlcjgKKwlvcgklcjgsICVyMTAKKwlzaGwJUjgoJXJjeCksICVyOQorCW9yCSVyOSwgJXIxMQorCW1vdgklcjEwLCA4KHJwLG4sOCkKKwltb3YJJXIxMSwgMTYocnAsbiw4KQorCWFkZAkkMiwgbgorCitMKHJsbCk6CW5lZwlSMzIoJXJjeCkJCUMgcHV0IGxzaCBjb3VudCBpbiBjbAorTChybHgpOgltb3YJOCh1cCxuLDgpLCAlcjEwCisJc2hyCVI4KCVyY3gpLCAlcjEwCisJbW92CTE2KHVwLG4sOCksICVyMTEKKwlzaHIJUjgoJXJjeCksICVyMTEKKworCWFkZAkkNCwgbgkJCUMJCQkJICAgICAgNAorCWpiCUwoZW5kKQkJCUMJCQkJICAgICAgMgorCUFMSUdOKDE2KQorTCh0b3ApOgorCUMgZmluaXNoIHN0dWZmIGZyb20gbHNoIGJsb2NrCisJbmVnCVIzMiglcmN4KQkJQyBwdXQgcnNoIGNvdW50IGluIGNsCisJbW92CS0xNih1cCxuLDgpLCAlcjgKKwltb3YJLTgodXAsbiw4KSwgJXI5CisJc2hsCVI4KCVyY3gpLCAlcjgKKwlvcgklcjgsICVyMTAKKwlzaGwJUjgoJXJjeCksICVyOQorCW9yCSVyOSwgJXIxMQorCW1vdgklcjEwLCAtMjQocnAsbiw4KQorCW1vdgklcjExLCAtMTYocnAsbiw4KQorCUMgc3RhcnQgdHdvIG5ldyByc2gKKwltb3YJKHVwLG4sOCksICVyOAorCW1vdgk4KHVwLG4sOCksICVyOQorCXNobAlSOCglcmN4KSwgJXI4CisJc2hsCVI4KCVyY3gpLCAlcjkKKworCUMgZmluaXNoIHN0dWZmIGZyb20gcnNoIGJsb2NrCisJbmVnCVIzMiglcmN4KQkJQyBwdXQgbHNoIGNvdW50IGluIGNsCisJbW92CS04KHVwLG4sOCksICVyMTAKKwltb3YJMCh1cCxuLDgpLCAlcjExCisJc2hyCVI4KCVyY3gpLCAlcjEwCisJb3IJJXIxMCwgJXI4CisJc2hyCVI4KCVyY3gpLCAlcjExCisJb3IJJXIxMSwgJXI5CisJbW92CSVyOCwgLTgocnAsbiw4KQorCW1vdgklcjksIDAocnAsbiw4KQorCUMgc3RhcnQgdHdvIG5ldyBsc2gKKwltb3YJOCh1cCxuLDgpLCAlcjEwCisJbW92CTE2KHVwLG4sOCksICVyMTEKKwlzaHIJUjgoJXJjeCksICVyMTAKKwlzaHIJUjgoJXJjeCksICVyMTEKKworCWFkZAkkNCwgbgorCWphZQlMKHRvcCkJCQlDCQkJCSAgICAgIDIKK0woZW5kKToKKwluZWcJUjMyKCVyY3gpCQlDIHB1dCByc2ggY291bnQgaW4gY2wKKwltb3YJLTgodXApLCAlcjgKKwlzaGwJUjgoJXJjeCksICVyOAorCW9yCSVyOCwgJXIxMAorCW1vdgkodXApLCAlcjkKKwlzaGwJUjgoJXJjeCksICVyOQorCW9yCSVyOSwgJXIxMQorCW1vdgklcjEwLCAtMTYocnApCisJbW92CSVyMTEsIC04KHJwKQorCisJbmVnCVIzMiglcmN4KQkJQyBwdXQgbHNoIGNvdW50IGluIGNsCitMKGFzdCk6CW1vdgkodXApLCAlcjEwCisJc2hyCVI4KCVyY3gpLCAlcjEwCisJbW92CSVyMTAsIChycCkKKwlGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvc2VjX3RhYnNlbGVjdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9zZWNfdGFic2VsZWN0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGFlZDI2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvc2VjX3RhYnNlbGVjdC5hc20KQEAgLTAsMCArMSwxNzYgQEAKK2RubCAgQU1ENjQgbXBuX3NlY190YWJzZWxlY3QuCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqw7ZybiBHcmFubHVuZC4KKworZG5sICBDb3B5cmlnaHQgMjAxMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKKworQwkgICAgIGN5Y2xlcy9saW1iICAgICAgICAgIGdvb2QgZm9yIGNwdQorQyBBTUQgSzgsSzkJIDEuNQkJCVkKK0MgQU1EIEsxMAkgMS40CitDIEFNRCBiZDEJIDIuNjQKK0MgQU1EIGJvYmNhdAkgMi4xNQkJCVkKK0MgSW50ZWwgUDQJIDQKK0MgSW50ZWwgY29yZTIJIDEuMzgKK0MgSW50ZWwgTkhNCSAxLjc1CitDIEludGVsIFNCUgkgMS4yNQorQyBJbnRlbCBhdG9tCSAyLjUJCQlZCitDIFZJQSBuYW5vCSAxLjc1CQkJWQorCitDIE5PVEVTCitDICAqIFRoaXMgaGFzIG5vdCBiZWVuIHR1bmVkIGZvciBhbnkgc3BlY2lmaWMgcHJvY2Vzc29yLiAgSXRzIHNwZWVkIHNob3VsZCBub3QKK0MgICAgYmUgdG9vIGJhZCwgdGhvdWdoLgorQyAgKiBVc2luZyBTU0UyL0FWWDIgY291bGQgcmVzdWx0IGluIG1hbnktZm9sZCBzcGVlZHVwLgorQyAgKiBXT1JLUyBGT1IgbiBtb2QgNCA9IDAgT05MWSEKKworQyBtcG5fc2VjX3RhYnNlbGVjdCAobXBfbGltYl90ICpycCwgbXBfbGltYl90ICp0cCwgbXBfc2l6ZV90IG4sIG1wX3NpemVfdCBuZW50cywgbXBfc2l6ZV90IHdoaWNoKQorZGVmaW5lKGBycCcsICAgICBgJXJkaScpCitkZWZpbmUoYHRwJywgICAgIGAlcnNpJykKK2RlZmluZShgbicsICAgICAgYCVyZHgnKQorZGVmaW5lKGBuZW50cycsICBgJXJjeCcpCitkZWZpbmUoYHdoaWNoJywgIGAlcjgnKQorCitkZWZpbmUoYGknLCAgICAgIGAlcmJwJykKK2RlZmluZShgaicsICAgICAgYCVyOScpCisKK0MgcmF4ICByYnggIHJjeCAgcmR4ICByZGkgIHJzaSAgcmJwICAgcjggICByOSAgcjEwICByMTEgIHIxMiAgcjEzICByMTQgIHIxNQorQyAgICAgICAgICBuZW50cyAgbiAgIHJwICAgdGFiICAgaSAgIHdoaWNoIGogICAgKiAgICAqICAgICogICAgKiAgICAqICAgICoKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMTYpCitQUk9MT0dVRShtcG5fc2VjX3RhYnNlbGVjdCkKKwlGVU5DX0VOVFJZKDQpCitJRkRPUyhgCW1vdgk1NiglcnNwKSwgJXI4ZAknKQorCisJcHVzaAklcmJ4CisJcHVzaAklcmJwCisJcHVzaAklcjEyCisJcHVzaAklcjEzCisJcHVzaAklcjE0CisJcHVzaAklcjE1CisKKwltb3YJbiwgagorCWFkZAkkLTQsIGoKKwlqcwlMKG91dGVyX2VuZCkKKworTChvdXRlcl90b3ApOgorCW1vdgluZW50cywgaQorCXB1c2gJdHAKKwl4b3IJUjMyKCVyMTIpLCBSMzIoJXIxMikKKwl4b3IJUjMyKCVyMTMpLCBSMzIoJXIxMykKKwl4b3IJUjMyKCVyMTQpLCBSMzIoJXIxNCkKKwl4b3IJUjMyKCVyMTUpLCBSMzIoJXIxNSkKKwltb3YJd2hpY2gsICVyYngKKworCUFMSUdOKDE2KQorTCh0b3ApOglzdWIJJDEsICVyYngKKwlzYmIJJXJheCwgJXJheAorCW1vdgkwKHRwKSwgJXIxMAorCW1vdgk4KHRwKSwgJXIxMQorCWFuZAklcmF4LCAlcjEwCisJYW5kCSVyYXgsICVyMTEKKwlvcgklcjEwLCAlcjEyCisJb3IJJXIxMSwgJXIxMworCW1vdgkxNih0cCksICVyMTAKKwltb3YJMjQodHApLCAlcjExCisJYW5kCSVyYXgsICVyMTAKKwlhbmQJJXJheCwgJXIxMQorCW9yCSVyMTAsICVyMTQKKwlvcgklcjExLCAlcjE1CisJbGVhCSh0cCxuLDgpLCB0cAorCWFkZAkkLTEsIGkKKwlqbmUJTCh0b3ApCisKKwltb3YJJXIxMiwgMChycCkKKwltb3YJJXIxMywgOChycCkKKwltb3YJJXIxNCwgMTYocnApCisJbW92CSVyMTUsIDI0KHJwKQorCXBvcAl0cAorCWxlYQkzMih0cCksIHRwCisJbGVhCTMyKHJwKSwgcnAKKwlhZGQJJC00LCBqCisJam5zCUwob3V0ZXJfdG9wKQorTChvdXRlcl9lbmQpOgorCisJdGVzdAkkMiwgUjgobikKKwlqeglMKGIweCkKK0woYjF4KToJbW92CW5lbnRzLCBpCisJcHVzaAl0cAorCXhvcglSMzIoJXIxMiksIFIzMiglcjEyKQorCXhvcglSMzIoJXIxMyksIFIzMiglcjEzKQorCW1vdgl3aGljaCwgJXJieAorCUFMSUdOKDE2KQorTCh0cDIpOglzdWIJJDEsICVyYngKKwlzYmIJJXJheCwgJXJheAorCW1vdgkwKHRwKSwgJXIxMAorCW1vdgk4KHRwKSwgJXIxMQorCWFuZAklcmF4LCAlcjEwCisJYW5kCSVyYXgsICVyMTEKKwlvcgklcjEwLCAlcjEyCisJb3IJJXIxMSwgJXIxMworCWxlYQkodHAsbiw4KSwgdHAKKwlhZGQJJC0xLCBpCisJam5lCUwodHAyKQorCW1vdgklcjEyLCAwKHJwKQorCW1vdgklcjEzLCA4KHJwKQorCXBvcAl0cAorCWxlYQkxNih0cCksIHRwCisJbGVhCTE2KHJwKSwgcnAKKworTChiMHgpOgl0ZXN0CSQxLCBSOChuKQorCWp6CUwoYjAwKQorTChiMDEpOgltb3YJbmVudHMsIGkKKwl4b3IJUjMyKCVyMTIpLCBSMzIoJXIxMikKKwltb3YJd2hpY2gsICVyYngKKwlBTElHTigxNikKK0wodHAxKToJc3ViCSQxLCAlcmJ4CisJc2JiCSVyYXgsICVyYXgKKwltb3YJMCh0cCksICVyMTAKKwlhbmQJJXJheCwgJXIxMAorCW9yCSVyMTAsICVyMTIKKwlsZWEJKHRwLG4sOCksIHRwCisJYWRkCSQtMSwgaQorCWpuZQlMKHRwMSkKKwltb3YJJXIxMiwgMChycCkKKworTChiMDApOglwb3AJJXIxNQorCXBvcAklcjE0CisJcG9wCSVyMTMKKwlwb3AJJXIxMgorCXBvcAklcmJwCisJcG9wCSVyYngKKwlGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvc2lsdmVybW9udC9hb3JybHNoMV9uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3NpbHZlcm1vbnQvYW9ycmxzaDFfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThjMjZjZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3NpbHZlcm1vbnQvYW9ycmxzaDFfbi5hc20KQEAgLTAsMCArMSw1MCBAQAorZG5sICBYODYtNjQgbXBuX2FkZGxzaDFfbi9tcG5fcnNibHNoMV9uIG9wdGltaXNlZCBmb3IgSW50ZWwgU2lsdmVybW9udC4KKworZG5sICBDb3B5cmlnaHQgMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitkZWZpbmUoTFNILCAxKQorZGVmaW5lKFJTSCwgNjMpCisKK2lmZGVmKGBPUEVSQVRJT05fYWRkbHNoMV9uJywgYAorCWRlZmluZShBRERTVUIsCWFkZCkKKwlkZWZpbmUoQURDU0JCLAlhZGMpCisJZGVmaW5lKGZ1bmMsCW1wbl9hZGRsc2gxX24pJykKK2lmZGVmKGBPUEVSQVRJT05fcnNibHNoMV9uJywgYAorCWRlZmluZShBRERTVUIsCXN1YikKKwlkZWZpbmUoQURDU0JCLAlzYmIpCisJZGVmaW5lKGZ1bmMsCW1wbl9yc2Jsc2gxX24pJykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fYWRkbHNoMV9uIG1wbl9yc2Jsc2gxX24pCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK2luY2x1ZGVfbXBuKGB4ODZfNjQvYW9ycmxzaENfbi5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvc2lsdmVybW9udC9hb3JybHNoMl9uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3NpbHZlcm1vbnQvYW9ycmxzaDJfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE4MzIxNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3NpbHZlcm1vbnQvYW9ycmxzaDJfbi5hc20KQEAgLTAsMCArMSw1MCBAQAorZG5sICBYODYtNjQgbXBuX2FkZGxzaDJfbi9tcG5fcnNibHNoMl9uIG9wdGltaXNlZCBmb3IgSW50ZWwgU2lsdmVybW9udC4KKworZG5sICBDb3B5cmlnaHQgMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitkZWZpbmUoTFNILCAyKQorZGVmaW5lKFJTSCwgNjIpCisKK2lmZGVmKGBPUEVSQVRJT05fYWRkbHNoMl9uJywgYAorCWRlZmluZShBRERTVUIsCWFkZCkKKwlkZWZpbmUoQURDU0JCLAlhZGMpCisJZGVmaW5lKGZ1bmMsCW1wbl9hZGRsc2gyX24pJykKK2lmZGVmKGBPUEVSQVRJT05fcnNibHNoMl9uJywgYAorCWRlZmluZShBRERTVUIsCXN1YikKKwlkZWZpbmUoQURDU0JCLAlzYmIpCisJZGVmaW5lKGZ1bmMsCW1wbl9yc2Jsc2gyX24pJykKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fYWRkbHNoMl9uIG1wbl9yc2Jsc2gyX24pCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK2luY2x1ZGVfbXBuKGB4ODZfNjQvYW9ycmxzaENfbi5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvc2lsdmVybW9udC9hb3JzX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvc2lsdmVybW9udC9hb3JzX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZTNkNzUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9zaWx2ZXJtb250L2FvcnNfbi5hc20KQEAgLTAsMCArMSwzNyBAQAorZG5sICBYODYtNjQgbXBuX2FkZF9uLCBtcG5fc3ViX24sIG9wdGltaXNlZCBmb3IgSW50ZWwgU2lsdmVybW9udC4KKworZG5sICBDb3B5cmlnaHQgMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9hZGRfbiBtcG5fYWRkX25jIG1wbl9zdWJfbiBtcG5fc3ViX25jKQoraW5jbHVkZV9tcG4oYHg4Nl82NC9jb3JlaXNici9hb3JzX24uYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3NpbHZlcm1vbnQvYW9yc211bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3NpbHZlcm1vbnQvYW9yc211bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWQwZDc2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvc2lsdmVybW9udC9hb3JzbXVsXzEuYXNtCkBAIC0wLDAgKzEsMzcgQEAKK2RubCAgWDg2LTY0IG1wbl9hZGRtdWxfMS9tcG5fc3VibXVsXzEgb3B0aW1pc2VkIGZvciBJbnRlbCBTaWx2ZXJtb250LgorCitkbmwgIENvcHlyaWdodCAyMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FkZG11bF8xIG1wbl9hZGRtdWxfMWMgbXBuX3N1Ym11bF8xIG1wbl9zdWJtdWxfMWMpCitpbmNsdWRlX21wbihgeDg2XzY0L2NvcmUyL2FvcnNtdWxfMS5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvc2lsdmVybW9udC9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9zaWx2ZXJtb250L2dtcC1tcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGNiMGY0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvc2lsdmVybW9udC9nbXAtbXBhcmFtLmgKQEAgLTAsMCArMSwyNTIgQEAKKy8qIEludGVsIFNpbHZlcm1vbnQgZ21wLW1wYXJhbS5oIC0tIENvbXBpbGVyL21hY2hpbmUgcGFyYW1ldGVyIGhlYWRlciBmaWxlLgorCitDb3B5cmlnaHQgMjAxOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKKworICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitvcgorCisgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICAgbGF0ZXIgdmVyc2lvbi4KKworb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLiAgKi8KKworI2RlZmluZSBHTVBfTElNQl9CSVRTIDY0CisjZGVmaW5lIEdNUF9MSU1CX0JZVEVTIDgKKworLyogRGlzYWJsZSB1c2Ugb2Ygc2xvdyBmdW5jdGlvbnMuICBGSVhNRTogV2Ugc2hvdWxkIGRpc2FibGUgbGliIGluY2x1c2lvbi4gICovCisjdW5kZWYgSEFWRV9OQVRJVkVfbXBuX211bF8yCisjdW5kZWYgSEFWRV9OQVRJVkVfbXBuX2FkZG11bF8yCisKKy8qIDI0MDAgTUh6IEludGVsIEF0b20gQzI3NTggU2lsdmVybW9udC9SYW5nZWxleSAqLworLyogRkZUIHR1bmluZyBsaW1pdCA9IDQ2ODE1MzQwMCAqLworLyogR2VuZXJhdGVkIGJ5IHR1bmV1cC5jLCAyMDE5LTEwLTE5LCBnY2MgOC4zICovCisKKyNkZWZpbmUgTU9EXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMV9VTk5PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1PRF8xTl9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICA0CisjZGVmaW5lIE1PRF8xVV9UT19NT0RfMV8xX1RIUkVTSE9MRCAgICAgICAgICAzCisjZGVmaW5lIE1PRF8xXzFfVE9fTU9EXzFfMl9USFJFU0hPTEQgICAgICAgIDU1CisjZGVmaW5lIE1PRF8xXzJfVE9fTU9EXzFfNF9USFJFU0hPTEQgICAgICAgICAwICAvKiBuZXZlciBtcG5fbW9kXzFzXzJwICovCisjZGVmaW5lIFBSRUlOVl9NT0RfMV9UT19NT0RfMV9USFJFU0hPTEQgICAgICA5CisjZGVmaW5lIFVTRV9QUkVJTlZfRElWUkVNXzEgICAgICAgICAgICAgICAgICAxICAvKiBuYXRpdmUgKi8KKyNkZWZpbmUgRElWX1FSXzFfTk9STV9USFJFU0hPTEQgICAgICAgICAgICAgIDEKKyNkZWZpbmUgRElWX1FSXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWX1FSXzJfUEkyX1RIUkVTSE9MRCAgICAgICAgICAgTVBfU0laRV9UX01BWCAgLyogbmV2ZXIgKi8KKyNkZWZpbmUgRElWRVhBQ1RfMV9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAobmF0aXZlKSAqLworI2RlZmluZSBCTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgICBNUF9TSVpFX1RfTUFYICAvKiBuZXZlciAqLworCisjZGVmaW5lIERJVl8xX1ZTX01VTF8xX1BFUkNFTlQgICAgICAgICAgICAgMTY4CisKKyNkZWZpbmUgTVVMX1RPT00yMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgTVVMX1RPT00zM19USFJFU0hPTEQgICAgICAgICAgICAgICAgNjYKKyNkZWZpbmUgTVVMX1RPT000NF9USFJFU0hPTEQgICAgICAgICAgICAgICAxNTIKKyNkZWZpbmUgTVVMX1RPT002SF9USFJFU0hPTEQgICAgICAgICAgICAgICAyMjIKKyNkZWZpbmUgTVVMX1RPT004SF9USFJFU0hPTEQgICAgICAgICAgICAgICAzMzMKKworI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT000M19USFJFU0hPTEQgICAgIDEwNQorI2RlZmluZSBNVUxfVE9PTTMyX1RPX1RPT001M19USFJFU0hPTEQgICAgIDExNAorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT001M19USFJFU0hPTEQgICAgIDEwNQorI2RlZmluZSBNVUxfVE9PTTQyX1RPX1RPT002M19USFJFU0hPTEQgICAgIDExMworI2RlZmluZSBNVUxfVE9PTTQzX1RPX1RPT001NF9USFJFU0hPTEQgICAgICA4OAorCisjZGVmaW5lIFNRUl9CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgU1FSX1RPT00yX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgU1FSX1RPT00zX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgOTcKKyNkZWZpbmUgU1FSX1RPT000X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyMzIKKyNkZWZpbmUgU1FSX1RPT002X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyODYKKyNkZWZpbmUgU1FSX1RPT004X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworCisjZGVmaW5lIE1VTE1JRF9UT09NNDJfVEhSRVNIT0xEICAgICAgICAgICAgIDI0CisKKyNkZWZpbmUgTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgU1FSTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTUKKworI2RlZmluZSBNVUxfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDM0MCAgLyogayA9IDUgKi8KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDM0MCwgNX0sIHsgICAgIDE3LCA2fSwgeyAgICAgIDksIDV9LCB7ICAgICAxOSwgNn0sIFwKKyAgICB7ICAgICAxNywgN30sIHsgICAgICA5LCA2fSwgeyAgICAgMjAsIDd9LCB7ICAgICAxMSwgNn0sIFwKKyAgICB7ICAgICAyMywgN30sIHsgICAgIDE3LCA4fSwgeyAgICAgIDksIDd9LCB7ICAgICAyMSwgOH0sIFwKKyAgICB7ICAgICAxMSwgN30sIHsgICAgIDIzLCA4fSwgeyAgICAgMTMsIDd9LCB7ICAgICAyNywgOH0sIFwKKyAgICB7ICAgICAxNSwgN30sIHsgICAgIDMxLCA4fSwgeyAgICAgMjEsIDl9LCB7ICAgICAxMSwgOH0sIFwKKyAgICB7ICAgICAyNywgOX0sIHsgICAgIDE1LCA4fSwgeyAgICAgMzMsIDl9LCB7ICAgICAxOSwgOH0sIFwKKyAgICB7ICAgICAzOSwgOX0sIHsgICAgIDIzLCA4fSwgeyAgICAgNDcsIDl9LCB7ICAgICAyNywxMH0sIFwKKyAgICB7ICAgICAxNSwgOX0sIHsgICAgIDM5LDEwfSwgeyAgICAgMjMsIDl9LCB7ICAgICA1MSwxMX0sIFwKKyAgICB7ICAgICAxNSwxMH0sIHsgICAgIDMxLCA5fSwgeyAgICAgNjcsMTB9LCB7ICAgICAzOSwgOX0sIFwKKyAgICB7ICAgICA3OSwxMH0sIHsgICAgIDQ3LCA5fSwgeyAgICAgOTUsMTB9LCB7ICAgICA1NSwxMX0sIFwKKyAgICB7ICAgICAzMSwxMH0sIHsgICAgIDc5LDExfSwgeyAgICAgNDcsMTB9LCB7ICAgICA5NSwxMn0sIFwKKyAgICB7ICAgICAzMSwxMX0sIHsgICAgIDYzLDEwfSwgeyAgICAxMjcsIDl9LCB7ICAgIDI1NSwxMH0sIFwKKyAgICB7ICAgIDEzNSwxMX0sIHsgICAgIDc5LCA5fSwgeyAgICAzMTksMTF9LCB7ICAgICA5NSwxMH0sIFwKKyAgICB7ICAgIDE5MSwgOX0sIHsgICAgMzgzLDEwfSwgeyAgICAyMDcsIDl9LCB7ICAgIDQxNSwxMX0sIFwKKyAgICB7ICAgIDExMSwxMn0sIHsgICAgIDYzLDExfSwgeyAgICAxMjcsMTB9LCB7ICAgIDI1NSwgOX0sIFwKKyAgICB7ICAgIDUxMSwxMH0sIHsgICAgMjcxLDExfSwgeyAgICAxNDMsMTB9LCB7ICAgIDI4NywgOX0sIFwKKyAgICB7ICAgIDU3NSwxMH0sIHsgICAgMzAzLDExfSwgeyAgICAxNTksMTB9LCB7ICAgIDMxOSwxMn0sIFwKKyAgICB7ICAgICA5NSwxMX0sIHsgICAgMTkxLDEwfSwgeyAgICAzODMsMTF9LCB7ICAgIDIwNywxMH0sIFwKKyAgICB7ICAgIDQxNSwxM30sIHsgICAgIDYzLDEyfSwgeyAgICAxMjcsMTF9LCB7ICAgIDI1NSwxMH0sIFwKKyAgICB7ICAgIDUxMSwxMX0sIHsgICAgMjcxLDEwfSwgeyAgICA1NDMsMTF9LCB7ICAgIDI4NywxMH0sIFwKKyAgICB7ICAgIDU3NSwxMX0sIHsgICAgMzE5LDEwfSwgeyAgICA2MzksMTF9LCB7ICAgIDM1MSwxMH0sIFwKKyAgICB7ICAgIDcwMywgOX0sIHsgICAxNDA3LDEyfSwgeyAgICAxOTEsMTF9LCB7ICAgIDQxNSwxMH0sIFwKKyAgICB7ICAgIDgzMSwxMn0sIHsgICAgMjIzLDExfSwgeyAgICA0NzksMTN9LCB7ICAgIDEyNywxMn0sIFwKKyAgICB7ICAgIDI1NSwxMX0sIHsgICAgNTQzLDEyfSwgeyAgICAyODcsMTF9LCB7ICAgIDU3NSwxMH0sIFwKKyAgICB7ICAgMTE1MSwxMn0sIHsgICAgMzE5LDExfSwgeyAgICA2MzksMTJ9LCB7ICAgIDM1MSwxMX0sIFwKKyAgICB7ICAgIDcwMywxMH0sIHsgICAxNDA3LDEzfSwgeyAgICAxOTEsMTJ9LCB7ICAgIDQxNSwxMX0sIFwKKyAgICB7ICAgIDgzMSwxMH0sIHsgICAxNjYzLDEyfSwgeyAgICA0NzksMTR9LCB7ICAgIDEyNywxM30sIFwKKyAgICB7ICAgIDI1NSwxMn0sIHsgICAgNTQzLDExfSwgeyAgIDEwODcsMTB9LCB7ICAgMjE3NSwxMn0sIFwKKyAgICB7ICAgIDU3NSwxMX0sIHsgICAxMTUxLDEzfSwgeyAgICAzMTksMTJ9LCB7ICAgIDYzOSwxMX0sIFwKKyAgICB7ICAgMTI3OSwxMn0sIHsgICAgNzAzLDExfSwgeyAgIDE0MDcsMTN9LCB7ICAgIDM4MywxMn0sIFwKKyAgICB7ICAgIDgzMSwxMX0sIHsgICAxNjYzLDEzfSwgeyAgICA0NDcsMTJ9LCB7ICAgIDk1OSwxNH0sIFwKKyAgICB7ICAgIDI1NSwxM30sIHsgICAgNTExLDEyfSwgeyAgIDEwODcsMTF9LCB7ICAgMjE3NSwxM30sIFwKKyAgICB7ICAgIDU3NSwxMn0sIHsgICAxMjE1LDExfSwgeyAgIDI0MzEsMTB9LCB7ICAgNDg2MywxM30sIFwKKyAgICB7ICAgIDYzOSwxMn0sIHsgICAxMjc5LDEzfSwgeyAgICA3MDMsMTJ9LCB7ICAgMTQwNywxNH0sIFwKKyAgICB7ICAgIDM4MywxM30sIHsgICAgODMxLDEyfSwgeyAgIDE2NjMsMTN9LCB7ICAgIDk1OSwxNX0sIFwKKyAgICB7ICAgIDI1NSwxNH0sIHsgICAgNTExLDEzfSwgeyAgIDEwODcsMTJ9LCB7ICAgMjE3NSwxM30sIFwKKyAgICB7ICAgMTIxNSwxMn0sIHsgICAyNDMxLDExfSwgeyAgIDQ4NjMsMTR9LCB7ICAgIDYzOSwxM30sIFwKKyAgICB7ICAgMTQwNywxMn0sIHsgICAyODE1LDEzfSwgeyAgIDE0NzEsMTJ9LCB7ICAgMjk0MywxMX0sIFwKKyAgICB7ICAgNTg4NywxNH0sIHsgICAgNzY3LDEzfSwgeyAgIDE2NjMsMTR9LCB7ICAgIDg5NSwxM30sIFwKKyAgICB7ICAgMTkxOSwxNX0sIHsgICAgNTExLDE0fSwgeyAgIDEwMjMsMTN9LCB7ICAgMjE3NSwxNH0sIFwKKyAgICB7ICAgMTE1MSwxM30sIHsgICAyNDMxLDEyfSwgeyAgIDQ4NjMsMTR9LCB7ICAgMTI3OSwxM30sIFwKKyAgICB7ICAgMjU1OSwxNH0sIHsgICAxNDA3LDEzfSwgeyAgIDI5NDMsMTJ9LCB7ICAgNTg4NywxNX0sIFwKKyAgICB7ICAgIDc2NywxNH0sIHsgICAxNjYzLDEzfSwgeyAgIDM0NTUsMTJ9LCB7ICAgNjkxMSwxNH0sIFwKKyAgICB7ICAgMTkxOSwxNn0sIHsgICAgNTExLDE1fSwgeyAgIDEwMjMsMTR9LCB7ICAgMjQzMSwxM30sIFwKKyAgICB7ICAgNDg2MywxNX0sIHsgICAxMjc5LDE0fSwgeyAgIDI5NDMsMTN9LCB7ICAgNTg4NywxMn0sIFwKKyAgICB7ICAxMTc3NSwxNX0sIHsgICAxNTM1LDE0fSwgeyAgIDM0NTUsMTN9LCB7ICAgNjkxMSwxNX0sIFwKKyAgICB7ICAgMTc5MSwxNH0sIHsgICAzODM5LDEzfSwgeyAgIDc2NzksMTZ9LCB7ICAgMTAyMywxNX0sIFwKKyAgICB7ICAgMjA0NywxNH0sIHsgICA0MjIzLDE1fSwgeyAgIDIzMDMsMTR9LCB7ICAgNDg2MywxNX0sIFwKKyAgICB7ICAgMjgxNSwxNH0sIHsgICA1ODg3LDEzfSwgeyAgMTE3NzUsMTZ9LCB7ICAgMTUzNSwxNX0sIFwKKyAgICB7ICAgMzMyNywxNH0sIHsgICA2OTExLDE1fSwgeyAgIDM4MzksMTR9LCB7ICAgNzY3OSwxN30sIFwKKyAgICB7ICAgMTAyMywxNn0sIHsgICAyMDQ3LDE1fSwgeyAgIDQ4NjMsMTZ9LCB7ICAgMjU1OSwxNX0sIFwKKyAgICB7ICAgNTg4NywxNH0sIHsgIDExNzc1LDE2fSwgeyAgIDMwNzEsMTV9LCB7ICAgNjkxMSwxNn0sIFwKKyAgICB7ICAgMzU4MywxNX0sIHsgICA3Njc5LDE0fSwgeyAgMTUzNTksMTd9LCB7ICAgMjA0NywxNn0sIFwKKyAgICB7ICAgNDYwNywxNX0sIHsgICA5MjE1LDE2fSwgeyAgIDU2MzEsMTV9LCB7ICAxMTc3NSwxN30sIFwKKyAgICB7ICAgMzA3MSwxNn0sIHsgIDY1NTM2LDE3fSwgeyAxMzEwNzIsMTh9LCB7IDI2MjE0NCwxOX0sIFwKKyAgICB7IDUyNDI4OCwyMH0sIHsxMDQ4NTc2LDIxfSwgezIwOTcxNTIsMjJ9LCB7NDE5NDMwNCwyM30sIFwKKyAgICB7ODM4ODYwOCwyNH0gfQorI2RlZmluZSBNVUxfRkZUX1RBQkxFM19TSVpFIDIyNQorI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMzcxMgorCisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgMzA4ICAvKiBrID0gNSAqLworI2RlZmluZSBTUVJfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgMzA4LCA1fSwgeyAgICAgMTcsIDZ9LCB7ICAgICAgOSwgNX0sIHsgICAgIDE5LCA2fSwgXAorICAgIHsgICAgIDIxLCA3fSwgeyAgICAgMTEsIDZ9LCB7ICAgICAyMywgN30sIHsgICAgIDE3LCA4fSwgXAorICAgIHsgICAgICA5LCA3fSwgeyAgICAgMjEsIDh9LCB7ICAgICAxMSwgN30sIHsgICAgIDIzLCA4fSwgXAorICAgIHsgICAgIDEzLCA3fSwgeyAgICAgMjcsIDh9LCB7ICAgICAxNSwgN30sIHsgICAgIDMxLCA4fSwgXAorICAgIHsgICAgIDIxLCA5fSwgeyAgICAgMTEsIDh9LCB7ICAgICAyNywgOX0sIHsgICAgIDE1LCA4fSwgXAorICAgIHsgICAgIDMzLCA5fSwgeyAgICAgMTksIDh9LCB7ICAgICAzOSwgOX0sIHsgICAgIDIzLCA4fSwgXAorICAgIHsgICAgIDQ3LCA5fSwgeyAgICAgMjcsMTB9LCB7ICAgICAxNSwgOX0sIHsgICAgIDM5LDEwfSwgXAorICAgIHsgICAgIDIzLCA5fSwgeyAgICAgNDcsMTF9LCB7ICAgICAxNSwxMH0sIHsgICAgIDMxLCA5fSwgXAorICAgIHsgICAgIDYzLDEwfSwgeyAgICAgMzksIDl9LCB7ICAgICA3OSwxMH0sIHsgICAgIDQ3LCA5fSwgXAorICAgIHsgICAgIDk1LDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA3OSwxMX0sIHsgICAgIDQ3LDEwfSwgXAorICAgIHsgICAgIDk1LDEyfSwgeyAgICAgMzEsMTF9LCB7ICAgICA2MywxMH0sIHsgICAgMTI3LCA5fSwgXAorICAgIHsgICAgMjU1LCA4fSwgeyAgICA1MTEsIDl9LCB7ICAgIDI3MSwgOH0sIHsgICAgNTQzLDExfSwgXAorICAgIHsgICAgIDc5LDEwfSwgeyAgICAxNTksIDl9LCB7ICAgIDMxOSwgOH0sIHsgICAgNjM5LDEwfSwgXAorICAgIHsgICAgMTc1LDExfSwgeyAgICAgOTUsMTB9LCB7ICAgIDE5MSwgOX0sIHsgICAgMzgzLDEwfSwgXAorICAgIHsgICAgMjA3LCA5fSwgeyAgICA0MTUsMTJ9LCB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgXAorICAgIHsgICAgMjU1LCA5fSwgeyAgICA1MTEsMTB9LCB7ICAgIDI3MSwgOX0sIHsgICAgNTQzLDEwfSwgXAorICAgIHsgICAgMjg3LCA5fSwgeyAgICA1NzUsMTB9LCB7ICAgIDMwMywxMX0sIHsgICAgMTU5LDEwfSwgXAorICAgIHsgICAgMzE5LCA5fSwgeyAgICA2MzksMTF9LCB7ICAgIDE3NSwxMH0sIHsgICAgMzUxLDEyfSwgXAorICAgIHsgICAgIDk1LDExfSwgeyAgICAxOTEsMTB9LCB7ICAgIDM4MywxMX0sIHsgICAgMjA3LDEwfSwgXAorICAgIHsgICAgNDE1LDEzfSwgeyAgICAgNjMsMTJ9LCB7ICAgIDEyNywxMX0sIHsgICAgMjU1LDEwfSwgXAorICAgIHsgICAgNTExLDExfSwgeyAgICAyNzEsMTB9LCB7ICAgIDU0MywxMX0sIHsgICAgMjg3LDEwfSwgXAorICAgIHsgICAgNTc1LDExfSwgeyAgICAzMDMsMTJ9LCB7ICAgIDE1OSwxMX0sIHsgICAgMzE5LDEwfSwgXAorICAgIHsgICAgNjM5LDExfSwgeyAgICAzNTEsMTB9LCB7ICAgIDcwMywxMn0sIHsgICAgMTkxLDExfSwgXAorICAgIHsgICAgMzgzLDEwfSwgeyAgICA3NjcsMTF9LCB7ICAgIDQxNSwxMH0sIHsgICAgODMxLDEyfSwgXAorICAgIHsgICAgMjIzLDExfSwgeyAgICA0NzksMTJ9LCB7ICAgIDI1NSwxMX0sIHsgICAgNTQzLDEyfSwgXAorICAgIHsgICAgMjg3LDExfSwgeyAgICA1NzUsMTJ9LCB7ICAgIDMxOSwxMX0sIHsgICAgNjM5LDEyfSwgXAorICAgIHsgICAgMzUxLDExfSwgeyAgICA3MDMsMTB9LCB7ICAgMTQwNywxM30sIHsgICAgMTkxLDEyfSwgXAorICAgIHsgICAgMzgzLDExfSwgeyAgICA3NjcsMTJ9LCB7ICAgIDQxNSwxMX0sIHsgICAgODMxLDEyfSwgXAorICAgIHsgICAgNDc5LDEzfSwgeyAgICAyNTUsMTJ9LCB7ICAgIDU0MywxMX0sIHsgICAxMDg3LDEwfSwgXAorICAgIHsgICAyMTc1LDEyfSwgeyAgICA1NzUsMTF9LCB7ICAgMTE1MSwxMn0sIHsgICAgNjA3LDEzfSwgXAorICAgIHsgICAgMzE5LDEyfSwgeyAgICA2MzksMTF9LCB7ICAgMTI3OSwxMn0sIHsgICAgNzAzLDExfSwgXAorICAgIHsgICAxNDA3LDEzfSwgeyAgICAzODMsMTJ9LCB7ICAgIDgzMSwxMX0sIHsgICAxNjYzLDEzfSwgXAorICAgIHsgICAgNDQ3LDEyfSwgeyAgICA4OTUsMTR9LCB7ICAgIDI1NSwxM30sIHsgICAgNTExLDEyfSwgXAorICAgIHsgICAxMDg3LDExfSwgeyAgIDIxNzUsMTN9LCB7ICAgIDU3NSwxMn0sIHsgICAxMjE1LDExfSwgXAorICAgIHsgICAyNDMxLDEzfSwgeyAgICA2MzksMTJ9LCB7ICAgMTI3OSwxM30sIHsgICAgNzAzLDEyfSwgXAorICAgIHsgICAxNDA3LDE0fSwgeyAgICAzODMsMTN9LCB7ICAgIDgzMSwxMn0sIHsgICAxNjYzLDEzfSwgXAorICAgIHsgICAgOTU5LDE1fSwgeyAgICAyNTUsMTR9LCB7ICAgIDUxMSwxM30sIHsgICAxMDg3LDEyfSwgXAorICAgIHsgICAyMTc1LDEzfSwgeyAgIDEyMTUsMTJ9LCB7ICAgMjQzMSwxNH0sIHsgICAgNjM5LDEzfSwgXAorICAgIHsgICAxMzQzLDEyfSwgeyAgIDI2ODcsMTN9LCB7ICAgMTQwNywxMn0sIHsgICAyODE1LDEzfSwgXAorICAgIHsgICAxNDcxLDEyfSwgeyAgIDI5NDMsMTR9LCB7ICAgIDc2NywxM30sIHsgICAxNjYzLDE0fSwgXAorICAgIHsgICAgODk1LDEzfSwgeyAgIDE3OTEsMTV9LCB7ICAgIDUxMSwxNH0sIHsgICAxMDIzLDEzfSwgXAorICAgIHsgICAyMTc1LDE0fSwgeyAgIDExNTEsMTN9LCB7ICAgMjQzMSwxMn0sIHsgICA0ODYzLDE0fSwgXAorICAgIHsgICAxMjc5LDEzfSwgeyAgIDI2ODcsMTR9LCB7ICAgMTQwNywxM30sIHsgICAyOTQzLDE1fSwgXAorICAgIHsgICAgNzY3LDE0fSwgeyAgIDE2NjMsMTN9LCB7ICAgMzQ1NSwxMn0sIHsgICA2OTExLDE0fSwgXAorICAgIHsgICAxNzkxLDEzfSwgeyAgIDM1ODMsMTZ9LCB7ICAgIDUxMSwxNX0sIHsgICAxMDIzLDE0fSwgXAorICAgIHsgICAyNDMxLDEzfSwgeyAgIDQ4NjMsMTV9LCB7ICAgMTI3OSwxNH0sIHsgICAyOTQzLDEzfSwgXAorICAgIHsgICA1ODg3LDEyfSwgeyAgMTE3NzUsMTV9LCB7ICAgMTUzNSwxNH0sIHsgICAzNDU1LDEzfSwgXAorICAgIHsgICA2OTExLDE1fSwgeyAgIDE3OTEsMTR9LCB7ICAgMzgzOSwxM30sIHsgICA3Njc5LDE2fSwgXAorICAgIHsgICAxMDIzLDE1fSwgeyAgIDIwNDcsMTR9LCB7ICAgNDIyMywxNX0sIHsgICAyMzAzLDE0fSwgXAorICAgIHsgICA0ODYzLDE1fSwgeyAgIDI4MTUsMTR9LCB7ICAgNTg4NywxM30sIHsgIDExNzc1LDE2fSwgXAorICAgIHsgICAxNTM1LDE1fSwgeyAgIDMwNzEsMTR9LCB7ICAgNjE0MywxNX0sIHsgICAzMzI3LDE0fSwgXAorICAgIHsgICA2OTExLDE1fSwgeyAgIDM4MzksMTR9LCB7ICAgNzY3OSwxN30sIHsgICAxMDIzLDE2fSwgXAorICAgIHsgICAyMDQ3LDE1fSwgeyAgIDQ4NjMsMTZ9LCB7ICAgMjU1OSwxNX0sIHsgICA1ODg3LDE0fSwgXAorICAgIHsgIDExNzc1LDE2fSwgeyAgIDMwNzEsMTV9LCB7ICAgNjkxMSwxNn0sIHsgICAzNTgzLDE1fSwgXAorICAgIHsgICA3Njc5LDE0fSwgeyAgMTUzNTksMTd9LCB7ICAgMjA0NywxNn0sIHsgICA0NjA3LDE1fSwgXAorICAgIHsgICA5OTgzLDE2fSwgeyAgIDU2MzEsMTV9LCB7ICAxMTc3NSwxN30sIHsgICAzMDcxLDE2fSwgXAorICAgIHsgIDY1NTM2LDE3fSwgeyAxMzEwNzIsMTh9LCB7IDI2MjE0NCwxOX0sIHsgNTI0Mjg4LDIwfSwgXAorICAgIHsxMDQ4NTc2LDIxfSwgezIwOTcxNTIsMjJ9LCB7NDE5NDMwNCwyM30sIHs4Mzg4NjA4LDI0fSB9CisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzX1NJWkUgMjMyCisjZGVmaW5lIFNRUl9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAyNzUyCisKKyNkZWZpbmUgTVVMTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNVUxMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICA1NQorI2RlZmluZSBNVUxMT19NVUxfTl9USFJFU0hPTEQgICAgICAgICAgICAgNjYzMworI2RlZmluZSBTUVJMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgOQorI2RlZmluZSBTUVJMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgMCAgLyogbmV2ZXIgbXBuX3NxcmxvX2Jhc2VjYXNlICovCisjZGVmaW5lIFNRUkxPX1NRUl9USFJFU0hPTEQgICAgICAgICAgICAgICA1Mzk3CisKKyNkZWZpbmUgRENfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMzMKKyNkZWZpbmUgRENfRElWQVBQUl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAyMjIKKyNkZWZpbmUgRENfQkRJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgRENfQkRJVl9RX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxNDcKKworI2RlZmluZSBJTlZfTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAzNworI2RlZmluZSBJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDIyMgorI2RlZmluZSBJTlZfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDIyMgorCisjZGVmaW5lIEJJTlZfTkVXVE9OX1RIUkVTSE9MRCAgICAgICAgICAgICAgMjEyCisjZGVmaW5lIFJFRENfMV9UT19SRURDXzJfVEhSRVNIT0xEICAgICAgICAgIDU1CisjZGVmaW5lIFJFRENfMl9UT19SRURDX05fVEhSRVNIT0xEICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKworI2RlZmluZSBNVV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTE0MgorI2RlZmluZSBNVV9ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgMTE0MgorI2RlZmluZSBNVVBJX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICA4MQorI2RlZmluZSBNVV9CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDk0MgorI2RlZmluZSBNVV9CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTA0MworCisjZGVmaW5lIFBPV01fU0VDX1RBQkxFICAxLDM0LDEwMiw1ODgsMTczMAorCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgIDMwCisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgMzgxCisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAxNjU5CisKKyNkZWZpbmUgRkFDX0RTQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAzNTEKKyNkZWZpbmUgRkFDX09ERF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgMjcKKworI2RlZmluZSBNQVRSSVgyMl9TVFJBU1NFTl9USFJFU0hPTEQgICAgICAgICAxNgorI2RlZmluZSBIR0NEMl9ESVYxX01FVEhPRCAgICAgICAgICAgICAgICAgICAgMyAgLyogMy4wNiUgZmFzdGVyIHRoYW4gMSAqLworI2RlZmluZSBIR0NEX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgIDEyMAorI2RlZmluZSBIR0NEX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE1MworI2RlZmluZSBIR0NEX1JFRFVDRV9USFJFU0hPTEQgICAgICAgICAgICAgMjEyMQorI2RlZmluZSBHQ0RfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgIDQxNgorI2RlZmluZSBHQ0RFWFRfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDMwOQorI2RlZmluZSBKQUNPQklfQkFTRV9NRVRIT0QgICAgICAgICAgICAgICAgICAgMSAgLyogMi4yOCUgZmFzdGVyIHRoYW4gMyAqLworCisvKiBUdW5ldXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgdG9vayA5MzgwNDYgc2Vjb25kcyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvc2lsdmVybW9udC9oYW1kaXN0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3NpbHZlcm1vbnQvaGFtZGlzdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ4ZWQwMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3NpbHZlcm1vbnQvaGFtZGlzdC5hc20KQEAgLTAsMCArMSwzOCBAQAorZG5sICB4ODYtNjQgbXBuX2hhbWRpc3QuCisKK2RubCAgQ29weXJpZ2h0IDIwMTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9oYW1kaXN0KQoraW5jbHVkZV9tcG4oYHg4Nl82NC9jb3JlaW5obS9oYW1kaXN0LmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9zaWx2ZXJtb250L2xzaGlmdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9zaWx2ZXJtb250L2xzaGlmdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNkMzE4MAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3NpbHZlcm1vbnQvbHNoaWZ0LmFzbQpAQCAtMCwwICsxLDM3IEBACitkbmwgIFg4Ni02NCBtcG5fbHNoaWZ0IG9wdGltaXNlZCBmb3IgSW50ZWwgU2lsdmVybW9udC4KKworZG5sICBDb3B5cmlnaHQgMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9sc2hpZnQpCitpbmNsdWRlX21wbihgeDg2XzY0L2Zhc3Rzc2UvbHNoaWZ0LW1vdmRxdTIuYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3NpbHZlcm1vbnQvbHNoaWZ0Yy5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9zaWx2ZXJtb250L2xzaGlmdGMuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNjhiYjUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9zaWx2ZXJtb250L2xzaGlmdGMuYXNtCkBAIC0wLDAgKzEsMzcgQEAKK2RubCAgWDg2LTY0IG1wbl9sc2hpZnRjIG9wdGltaXNlZCBmb3IgSW50ZWwgU2lsdmVybW9udC4KKworZG5sICBDb3B5cmlnaHQgMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9sc2hpZnRjKQoraW5jbHVkZV9tcG4oYHg4Nl82NC9mYXN0c3NlL2xzaGlmdGMtbW92ZHF1Mi5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvc2lsdmVybW9udC9tdWxfMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9zaWx2ZXJtb250L211bF8xLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWUxYzk0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvc2lsdmVybW9udC9tdWxfMS5hc20KQEAgLTAsMCArMSwzNyBAQAorZG5sICBYODYtNjQgbXBuX211bF8xIG9wdGltaXNlZCBmb3IgSW50ZWwgU2lsdmVybW9udC4KKworZG5sICBDb3B5cmlnaHQgMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9tdWxfMSBtcG5fbXVsXzFjKQoraW5jbHVkZV9tcG4oYHg4Nl82NC9iZDEvbXVsXzEuYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3NpbHZlcm1vbnQvbXVsX2Jhc2VjYXNlLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3NpbHZlcm1vbnQvbXVsX2Jhc2VjYXNlLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjI4YzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvc2lsdmVybW9udC9tdWxfYmFzZWNhc2UuYXNtCkBAIC0wLDAgKzEsMzcgQEAKK2RubCAgWDg2LTY0IG1wbl9tdWxfYmFzZWNhc2Ugb3B0aW1pc2VkIGZvciBJbnRlbCBTaWx2ZXJtb250LgorCitkbmwgIENvcHlyaWdodCAyMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX211bF9iYXNlY2FzZSkKK2luY2x1ZGVfbXBuKGB4ODZfNjQvazgvbXVsX2Jhc2VjYXNlLmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9zaWx2ZXJtb250L211bGxvX2Jhc2VjYXNlLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3NpbHZlcm1vbnQvbXVsbG9fYmFzZWNhc2UuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNDRmOGEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9zaWx2ZXJtb250L211bGxvX2Jhc2VjYXNlLmFzbQpAQCAtMCwwICsxLDM3IEBACitkbmwgIFg4Ni02NCBtcG5fbXVsbG9fYmFzZWNhc2Ugb3B0aW1pc2VkIGZvciBJbnRlbCBTaWx2ZXJtb250LgorCitkbmwgIENvcHlyaWdodCAyMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX211bGxvX2Jhc2VjYXNlKQoraW5jbHVkZV9tcG4oYHg4Nl82NC9rOC9tdWxsb19iYXNlY2FzZS5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvc2lsdmVybW9udC9wb3Bjb3VudC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9zaWx2ZXJtb250L3BvcGNvdW50LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2ViN2I1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvc2lsdmVybW9udC9wb3Bjb3VudC5hc20KQEAgLTAsMCArMSwzOCBAQAorZG5sICB4ODYtNjQgbXBuX3BvcGNvdW50LgorCitkbmwgIENvcHlyaWdodCAyMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fcG9wY291bnQpCitpbmNsdWRlX21wbihgeDg2XzY0L2NvcmVpbmhtL3BvcGNvdW50LmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9zaWx2ZXJtb250L3JzaGlmdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9zaWx2ZXJtb250L3JzaGlmdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg0MzcxYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3NpbHZlcm1vbnQvcnNoaWZ0LmFzbQpAQCAtMCwwICsxLDM3IEBACitkbmwgIFg4Ni02NCBtcG5fcnNoaWZ0IG9wdGltaXNlZCBmb3IgSW50ZWwgU2lsdmVybW9udC4KKworZG5sICBDb3B5cmlnaHQgMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9yc2hpZnQpCitpbmNsdWRlX21wbihgeDg2XzY0L2Zhc3Rzc2UvcnNoaWZ0LW1vdmRxdTIuYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3NpbHZlcm1vbnQvc3FyX2Jhc2VjYXNlLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3NpbHZlcm1vbnQvc3FyX2Jhc2VjYXNlLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmNjZjkzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvc2lsdmVybW9udC9zcXJfYmFzZWNhc2UuYXNtCkBAIC0wLDAgKzEsMzcgQEAKK2RubCAgWDg2LTY0IG1wbl9zcXJfYmFzZWNhc2Ugb3B0aW1pc2VkIGZvciBJbnRlbCBTaWx2ZXJtb250LgorCitkbmwgIENvcHlyaWdodCAyMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX3Nxcl9iYXNlY2FzZSkKK2luY2x1ZGVfbXBuKGB4ODZfNjQvazgvc3FyX2Jhc2VjYXNlLmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9za3lsYWtlL2dtcC1tcGFyYW0uaCBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3NreWxha2UvZ21wLW1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4OTllYTEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9za3lsYWtlL2dtcC1tcGFyYW0uaApAQCAtMCwwICsxLDI0NiBAQAorLyogU2t5bGFrZSBnbXAtbXBhcmFtLmggLS0gQ29tcGlsZXIvbWFjaGluZSBwYXJhbWV0ZXIgaGVhZGVyIGZpbGUuCisKK0NvcHlyaWdodCAyMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgNjQKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgOAorCisvKiBEaXNhYmxlIHVzZSBvZiBzbG93IGZ1bmN0aW9ucy4gIEZJWE1FOiBXZSBzaG91bGQgZGlzYWJsZSBsaWIgaW5jbHVzaW9uLiAgKi8KKyN1bmRlZiBIQVZFX05BVElWRV9tcG5fbXVsXzIKKyN1bmRlZiBIQVZFX05BVElWRV9tcG5fYWRkbXVsXzIKKworLyogMzYwMC00MDAwIE1IeiBJbnRlbCBYZW9uIEUzLTEyNzB2NSBTa3lsYWtlICovCisvKiBGRlQgdHVuaW5nIGxpbWl0ID0gNDY1LDk5MCwzNzEgKi8KKy8qIEdlbmVyYXRlZCBieSB0dW5ldXAuYywgMjAxOS0xMC0xOCwgZ2NjIDguMyAqLworCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNAorI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgMworI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAxMworI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICAgICAzMgorI2RlZmluZSBQUkVJTlZfTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgOQorI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgICAgICAgICAgICAgICAgMSAgLyogbmF0aXZlICovCisjZGVmaW5lIERJVl9RUl8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAxCisjZGVmaW5lIERJVl9RUl8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVl9RUl8yX1BJMl9USFJFU0hPTEQgICAgICAgICAgICAgIDQxCisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgICAgICAgMjAKKworI2RlZmluZSBESVZfMV9WU19NVUxfMV9QRVJDRU5UICAgICAgICAgICAgIDQ3MworCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDI2CisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDczCisjZGVmaW5lIE1VTF9UT09NNDRfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjA4CisjZGVmaW5lIE1VTF9UT09NNkhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMzAwCisjZGVmaW5lIE1VTF9UT09NOEhfVEhSRVNIT0xEICAgICAgICAgICAgICAgNDA2CisKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNDNfVEhSRVNIT0xEICAgICAgNzMKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxNTMKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxMzcKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNjNfVEhSRVNIT0xEICAgICAxNTEKKyNkZWZpbmUgTVVMX1RPT000M19UT19UT09NNTRfVEhSRVNIT0xEICAgICAxMDYKKworI2RlZmluZSBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTE3CisjZGVmaW5lIFNRUl9UT09NNF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMzM2CisjZGVmaW5lIFNRUl9UT09NNl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNDI2CisjZGVmaW5lIFNRUl9UT09NOF9USFJFU0hPTEQgICAgICAgICAgICAgICAgNTQ3CisKKyNkZWZpbmUgTVVMTUlEX1RPT000Ml9USFJFU0hPTEQgICAgICAgICAgICAgNDYKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxNQorI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxNworCisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgNDA0ICAvKiBrID0gNSAqLworI2RlZmluZSBNVUxfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgNDA0LCA1fSwgeyAgICAgMjEsIDZ9LCB7ICAgICAxMSwgNX0sIHsgICAgIDIzLCA2fSwgXAorICAgIHsgICAgIDEyLCA1fSwgeyAgICAgMjUsIDZ9LCB7ICAgICAyOCwgN30sIHsgICAgIDE1LCA2fSwgXAorICAgIHsgICAgIDMxLCA3fSwgeyAgICAgMjEsIDh9LCB7ICAgICAxMSwgN30sIHsgICAgIDI1LCA4fSwgXAorICAgIHsgICAgIDEzLCA3fSwgeyAgICAgMjgsIDh9LCB7ICAgICAxNSwgN30sIHsgICAgIDMyLCA4fSwgXAorICAgIHsgICAgIDE3LCA3fSwgeyAgICAgMzUsIDh9LCB7ICAgICAxOSwgN30sIHsgICAgIDM5LCA4fSwgXAorICAgIHsgICAgIDIxLCA5fSwgeyAgICAgMTEsIDh9LCB7ICAgICAyMywgN30sIHsgICAgIDQ3LCA4fSwgXAorICAgIHsgICAgIDI3LCA5fSwgeyAgICAgMTUsIDh9LCB7ICAgICAzNSwgOX0sIHsgICAgIDE5LCA4fSwgXAorICAgIHsgICAgIDQxLCA5fSwgeyAgICAgMjMsIDh9LCB7ICAgICA0OSwgOX0sIHsgICAgIDI3LDEwfSwgXAorICAgIHsgICAgIDE1LCA5fSwgeyAgICAgMzksIDh9LCB7ICAgICA3OSwgOX0sIHsgICAgIDQzLDEwfSwgXAorICAgIHsgICAgIDIzLCA5fSwgeyAgICAgNTUsMTF9LCB7ICAgICAxNSwxMH0sIHsgICAgIDMxLCA5fSwgXAorICAgIHsgICAgIDcxLDEwfSwgeyAgICAgMzksIDl9LCB7ICAgICA4MywxMH0sIHsgICAgIDQ3LCA5fSwgXAorICAgIHsgICAgIDk5LDEwfSwgeyAgICAgNTUsMTF9LCB7ICAgICAzMSwxMH0sIHsgICAgIDc5LDExfSwgXAorICAgIHsgICAgIDQ3LDEwfSwgeyAgICAxMDMsMTJ9LCB7ICAgICAzMSwxMX0sIHsgICAgIDYzLDEwfSwgXAorICAgIHsgICAgMTM1LDExfSwgeyAgICAgNzksMTB9LCB7ICAgIDE2NywxMX0sIHsgICAgIDk1LDEwfSwgXAorICAgIHsgICAgMTkxLCA5fSwgeyAgICAzODMsMTB9LCB7ICAgIDE5OSwxMX0sIHsgICAgMTExLDEyfSwgXAorICAgIHsgICAgIDYzLDExfSwgeyAgICAxMjcsMTB9LCB7ICAgIDI1NSwgOX0sIHsgICAgNTExLDEwfSwgXAorICAgIHsgICAgMjcxLCA5fSwgeyAgICA1NDMsMTF9LCB7ICAgIDE0MywxMH0sIHsgICAgMjg3LCA5fSwgXAorICAgIHsgICAgNTc1LDExfSwgeyAgICAxNTksMTJ9LCB7ICAgICA5NSwxMX0sIHsgICAgMTkxLDEwfSwgXAorICAgIHsgICAgMzgzLDEzfSwgeyAgICAgNjMsMTJ9LCB7ICAgIDEyNywxMX0sIHsgICAgMjU1LDEwfSwgXAorICAgIHsgICAgNTExLDExfSwgeyAgICAyNzEsMTB9LCB7ICAgIDU0MywxMX0sIHsgICAgMjg3LDEwfSwgXAorICAgIHsgICAgNTc1LDExfSwgeyAgICAzMDMsMTJ9LCB7ICAgIDE1OSwxMX0sIHsgICAgMzE5LDEwfSwgXAorICAgIHsgICAgNjM5LDExfSwgeyAgICAzMzUsMTB9LCB7ICAgIDY3MSwxMX0sIHsgICAgMzUxLDEwfSwgXAorICAgIHsgICAgNzAzLDEyfSwgeyAgICAxOTEsMTF9LCB7ICAgIDM4MywxMH0sIHsgICAgNzY3LDExfSwgXAorICAgIHsgICAgNDE1LDEyfSwgeyAgICAyMjMsMTF9LCB7ICAgIDQ0NywxM30sIHsgICAgMTI3LDEyfSwgXAorICAgIHsgICAgMjU1LDExfSwgeyAgICA1NDMsMTJ9LCB7ICAgIDI4NywxMX0sIHsgICAgNjA3LDEyfSwgXAorICAgIHsgICAgMzE5LDExfSwgeyAgICA2NzEsMTJ9LCB7ICAgIDM1MSwxMX0sIHsgICAgNzAzLDEzfSwgXAorICAgIHsgICAgMTkxLDEyfSwgeyAgICAzODMsMTF9LCB7ICAgIDc2NywxMn0sIHsgICAgNDE1LDExfSwgXAorICAgIHsgICAgODMxLDEyfSwgeyAgICA0NzksMTR9LCB7ICAgIDEyNywxM30sIHsgICAgMjU1LDEyfSwgXAorICAgIHsgICAgNTQzLDExfSwgeyAgIDEwODcsMTJ9LCB7ICAgIDYwNywxM30sIHsgICAgMzE5LDEyfSwgXAorICAgIHsgICAgNjcxLDExfSwgeyAgIDEzNDMsMTJ9LCB7ICAgIDcwMywxM30sIHsgICAgMzgzLDEyfSwgXAorICAgIHsgICAgODMxLDEzfSwgeyAgICA0NDcsMTJ9LCB7ICAgIDk1OSwxM30sIHsgICAgNTExLDEyfSwgXAorICAgIHsgICAxMDg3LDEzfSwgeyAgICA1NzUsMTJ9LCB7ICAgMTE1MSwxM30sIHsgICAgNjM5LDEyfSwgXAorICAgIHsgICAxMzQzLDEzfSwgeyAgICA3MDMsMTR9LCB7ICAgIDM4MywxM30sIHsgICAgNzY3LDEyfSwgXAorICAgIHsgICAxNTM1LDEzfSwgeyAgICA4MzEsMTJ9LCB7ICAgMTcyNywxM30sIHsgICAgOTU5LDE0fSwgXAorICAgIHsgICAgNTExLDEzfSwgeyAgIDEwODcsMTJ9LCB7ICAgMjE3NSwxM30sIHsgICAxMTUxLDE0fSwgXAorICAgIHsgICAgNjM5LDEzfSwgeyAgIDEzNDMsMTJ9LCB7ICAgMjY4NywxM30sIHsgICAxNDA3LDE0fSwgXAorICAgIHsgICAgNzY3LDEzfSwgeyAgIDE1OTksMTJ9LCB7ICAgMzE5OSwxM30sIHsgICAxNjYzLDE0fSwgXAorICAgIHsgICAgODk1LDEzfSwgeyAgIDE3OTEsMTV9LCB7ICAgIDUxMSwxNH0sIHsgICAxMDIzLDEzfSwgXAorICAgIHsgICAyMTc1LDE0fSwgeyAgIDExNTEsMTN9LCB7ICAgMjQzMSwxMn0sIHsgICA0ODYzLDE0fSwgXAorICAgIHsgICAxMjc5LDEzfSwgeyAgIDI2ODcsMTR9LCB7ICAgMTQwNywxM30sIHsgICAyODE1LDE1fSwgXAorICAgIHsgICAgNzY3LDE0fSwgeyAgIDE1MzUsMTN9LCB7ICAgMzE5OSwxNH0sIHsgICAxNjYzLDEzfSwgXAorICAgIHsgICAzNDU1LDEyfSwgeyAgIDY5MTEsMTR9LCB7ICAgMTc5MSwxNn0sIHsgICAgNTExLDE1fSwgXAorICAgIHsgICAxMDIzLDE0fSwgeyAgIDIxNzUsMTN9LCB7ICAgNDM1MSwxNH0sIHsgICAyNDMxLDEzfSwgXAorICAgIHsgICA0ODYzLDE1fSwgeyAgIDEyNzksMTR9LCB7ICAgMjk0MywxM30sIHsgICA1ODg3LDE1fSwgXAorICAgIHsgICAxNTM1LDE0fSwgeyAgIDM0NTUsMTN9LCB7ICAgNjkxMSwxNX0sIHsgICAxNzkxLDE0fSwgXAorICAgIHsgICAzODM5LDEzfSwgeyAgIDc2NzksMTZ9LCB7ICAgMTAyMywxNX0sIHsgICAyMDQ3LDE0fSwgXAorICAgIHsgICA0MjIzLDE1fSwgeyAgIDIzMDMsMTR9LCB7ICAgNDg2MywxNX0sIHsgICAyNTU5LDE0fSwgXAorICAgIHsgICA1MjQ3LDE1fSwgeyAgIDI4MTUsMTR9LCB7ICAgNTg4NywxNn0sIHsgICAxNTM1LDE1fSwgXAorICAgIHsgICAzMzI3LDE0fSwgeyAgIDY5MTEsMTV9LCB7ICAgMzgzOSwxNH0sIHsgICA3Njc5LDE3fSwgXAorICAgIHsgICAxMDIzLDE2fSwgeyAgIDIwNDcsMTV9LCB7ICAgNDM1MSwxNH0sIHsgICA4NzAzLDE1fSwgXAorICAgIHsgICA0ODYzLDE2fSwgeyAgIDI1NTksMTV9LCB7ICAgNTg4NywxNH0sIHsgIDExNzc1LDE2fSwgXAorICAgIHsgICAzMDcxLDE1fSwgeyAgIDY5MTEsMTZ9LCB7ICAgMzU4MywxNX0sIHsgICA3Njc5LDE0fSwgXAorICAgIHsgIDE1MzU5LDE1fSwgeyAgIDc5MzUsMTd9LCB7ICAgMjA0NywxNn0sIHsgICA0MDk1LDE1fSwgXAorICAgIHsgICA4NzAzLDE2fSwgeyAgIDQ2MDcsMTV9LCB7ICAgOTk4MywxNH0sIHsgIDE5OTY3LDE2fSwgXAorICAgIHsgICA1NjMxLDE1fSwgeyAgMTE3NzUsMTd9LCB7ICAgMzA3MSwxNn0sIHsgIDY1NTM2LDE3fSwgXAorICAgIHsgMTMxMDcyLDE4fSwgeyAyNjIxNDQsMTl9LCB7IDUyNDI4OCwyMH0sIHsxMDQ4NTc2LDIxfSwgXAorICAgIHsyMDk3MTUyLDIyfSwgezQxOTQzMDQsMjN9LCB7ODM4ODYwOCwyNH0gfQorI2RlZmluZSBNVUxfRkZUX1RBQkxFM19TSVpFIDIyNworI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNjI3MgorCisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgNDAwICAvKiBrID0gNSAqLworI2RlZmluZSBTUVJfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgNDAwLCA1fSwgeyAgICAgMjUsIDZ9LCB7ICAgICAxMywgNX0sIHsgICAgIDI3LCA2fSwgXAorICAgIHsgICAgIDI5LCA3fSwgeyAgICAgMTUsIDZ9LCB7ICAgICAzMSwgN30sIHsgICAgIDI4LCA4fSwgXAorICAgIHsgICAgIDE1LCA3fSwgeyAgICAgMzIsIDh9LCB7ICAgICAxNywgN30sIHsgICAgIDM1LCA4fSwgXAorICAgIHsgICAgIDE5LCA3fSwgeyAgICAgMzksIDh9LCB7ICAgICAyNywgOX0sIHsgICAgIDE1LCA4fSwgXAorICAgIHsgICAgIDMzLCA5fSwgeyAgICAgMTksIDh9LCB7ICAgICAzOSwgOX0sIHsgICAgIDIzLCA4fSwgXAorICAgIHsgICAgIDQ3LCA5fSwgeyAgICAgMjcsMTB9LCB7ICAgICAxNSwgOX0sIHsgICAgIDM5LDEwfSwgXAorICAgIHsgICAgIDIzLCA5fSwgeyAgICAgNTEsMTF9LCB7ICAgICAxNSwxMH0sIHsgICAgIDMxLCA5fSwgXAorICAgIHsgICAgIDY3LDEwfSwgeyAgICAgMzksIDl9LCB7ICAgICA3OSwxMH0sIHsgICAgIDU1LDExfSwgXAorICAgIHsgICAgIDMxLDEwfSwgeyAgICAgNzksMTF9LCB7ICAgICA0NywxMH0sIHsgICAgIDk1LDEyfSwgXAorICAgIHsgICAgIDMxLDExfSwgeyAgICAgNjMsMTB9LCB7ICAgIDEzNSwxMX0sIHsgICAgIDc5LDEwfSwgXAorICAgIHsgICAgMTU5LCA5fSwgeyAgICAzMTksMTF9LCB7ICAgICA5NSwxMn0sIHsgICAgIDYzLDExfSwgXAorICAgIHsgICAgMTI3LDEwfSwgeyAgICAyNTUsIDl9LCB7ICAgIDUxMSwxMH0sIHsgICAgMjcxLDExfSwgXAorICAgIHsgICAgMTQzLDEwfSwgeyAgICAyODcsIDl9LCB7ICAgIDU3NSwxMH0sIHsgICAgMzAzLDExfSwgXAorICAgIHsgICAgMTU5LDEwfSwgeyAgICAzMTksMTJ9LCB7ICAgICA5NSwxMH0sIHsgICAgMzgzLDEzfSwgXAorICAgIHsgICAgIDYzLDEyfSwgeyAgICAxMjcsMTF9LCB7ICAgIDI1NSwxMH0sIHsgICAgNTExLDExfSwgXAorICAgIHsgICAgMjcxLDEwfSwgeyAgICA1NDMsMTF9LCB7ICAgIDI4NywxMH0sIHsgICAgNTc1LDExfSwgXAorICAgIHsgICAgMzAzLDEwfSwgeyAgICA2MDcsMTJ9LCB7ICAgIDE1OSwxMX0sIHsgICAgMzE5LDEwfSwgXAorICAgIHsgICAgNjM5LDExfSwgeyAgICAzMzUsMTB9LCB7ICAgIDY3MSwxMX0sIHsgICAgMzUxLDEwfSwgXAorICAgIHsgICAgNzAzLDExfSwgeyAgICAzNjcsMTB9LCB7ICAgIDczNSwxMX0sIHsgICAgMzgzLDEwfSwgXAorICAgIHsgICAgNzY3LDExfSwgeyAgICA0MTUsMTB9LCB7ICAgIDgzMSwxMn0sIHsgICAgMjIzLDExfSwgXAorICAgIHsgICAgNDc5LDEzfSwgeyAgICAxMjcsMTJ9LCB7ICAgIDI1NSwxMX0sIHsgICAgNTQzLDEyfSwgXAorICAgIHsgICAgMjg3LDExfSwgeyAgICA2MDcsMTJ9LCB7ICAgIDMxOSwxMX0sIHsgICAgNjcxLDEyfSwgXAorICAgIHsgICAgMzUxLDExfSwgeyAgICA3MzUsMTJ9LCB7ICAgIDM4MywxMX0sIHsgICAgNzk5LDEyfSwgXAorICAgIHsgICAgNDE1LDExfSwgeyAgICA4MzEsMTJ9LCB7ICAgIDQ3OSwxNH0sIHsgICAgMTI3LDEzfSwgXAorICAgIHsgICAgMjU1LDEyfSwgeyAgICA1MTEsMTF9LCB7ICAgMTAyMywxMn0sIHsgICAgNjA3LDEzfSwgXAorICAgIHsgICAgMzE5LDEyfSwgeyAgICA3MzUsMTN9LCB7ICAgIDM4MywxMn0sIHsgICAgODMxLDEzfSwgXAorICAgIHsgICAgNDQ3LDEyfSwgeyAgICA5NTksMTN9LCB7ICAgIDUxMSwxMn0sIHsgICAxMDIzLDEzfSwgXAorICAgIHsgICAgNTc1LDEyfSwgeyAgIDExNTEsMTN9LCB7ICAgIDYzOSwxMn0sIHsgICAxMjc5LDEzfSwgXAorICAgIHsgICAgNzAzLDEyfSwgeyAgIDE0MDcsMTR9LCB7ICAgIDM4MywxM30sIHsgICAgNzY3LDEyfSwgXAorICAgIHsgICAxNTM1LDEzfSwgeyAgICA4MzEsMTJ9LCB7ICAgMTcyNywxM30sIHsgICAgODk1LDEyfSwgXAorICAgIHsgICAxNzkxLDEzfSwgeyAgICA5NTksMTR9LCB7ICAgIDUxMSwxM30sIHsgICAxMDg3LDEyfSwgXAorICAgIHsgICAyMTc1LDEzfSwgeyAgIDExNTEsMTR9LCB7ICAgIDYzOSwxM30sIHsgICAxMzQzLDEyfSwgXAorICAgIHsgICAyNjg3LDEzfSwgeyAgIDE0MDcsMTR9LCB7ICAgIDc2NywxM30sIHsgICAxNTk5LDEyfSwgXAorICAgIHsgICAzMTk5LDEzfSwgeyAgIDE2NjMsMTR9LCB7ICAgIDg5NSwxM30sIHsgICAxNzkxLDE1fSwgXAorICAgIHsgICAgNTExLDE0fSwgeyAgIDEwMjMsMTN9LCB7ICAgMjE3NSwxNH0sIHsgICAxMTUxLDEzfSwgXAorICAgIHsgICAyNDMxLDEyfSwgeyAgIDQ4NjMsMTR9LCB7ICAgMTI3OSwxM30sIHsgICAyNjg3LDE0fSwgXAorICAgIHsgICAxNDA3LDE1fSwgeyAgICA3NjcsMTR9LCB7ICAgMTUzNSwxM30sIHsgICAzMTk5LDE0fSwgXAorICAgIHsgICAxNjYzLDEzfSwgeyAgIDM0NTUsMTR9LCB7ICAgMTc5MSwxNn0sIHsgICAgNTExLDE1fSwgXAorICAgIHsgICAxMDIzLDE0fSwgeyAgIDI0MzEsMTN9LCB7ICAgNDg2MywxNX0sIHsgICAxMjc5LDE0fSwgXAorICAgIHsgICAyOTQzLDEzfSwgeyAgIDU4ODcsMTV9LCB7ICAgMTUzNSwxNH0sIHsgICAzNDU1LDE1fSwgXAorICAgIHsgICAxNzkxLDE0fSwgeyAgIDM4MzksMTZ9LCB7ICAgMTAyMywxNX0sIHsgICAyMDQ3LDE0fSwgXAorICAgIHsgICA0MjIzLDE1fSwgeyAgIDIzMDMsMTR9LCB7ICAgNDg2MywxNX0sIHsgICAyNTU5LDE0fSwgXAorICAgIHsgICA1MTE5LDE1fSwgeyAgIDI4MTUsMTR9LCB7ICAgNTg4NywxNn0sIHsgICAxNTM1LDE1fSwgXAorICAgIHsgICAzMDcxLDE0fSwgeyAgIDYxNDMsMTV9LCB7ICAgMzMyNywxNH0sIHsgICA2OTExLDE1fSwgXAorICAgIHsgICAzODM5LDE3fSwgeyAgIDEwMjMsMTZ9LCB7ICAgMjA0NywxNX0sIHsgICA0ODYzLDE2fSwgXAorICAgIHsgICAyNTU5LDE1fSwgeyAgIDU4ODcsMTR9LCB7ICAxMTc3NSwxNn0sIHsgICAzMDcxLDE1fSwgXAorICAgIHsgICA2OTExLDE2fSwgeyAgIDM1ODMsMTV9LCB7ICAgNzY3OSwxNH0sIHsgIDE1MzU5LDE3fSwgXAorICAgIHsgICAyMDQ3LDE2fSwgeyAgIDQwOTUsMTV9LCB7ICAgODE5MSwxNn0sIHsgICA0NjA3LDE1fSwgXAorICAgIHsgICA5OTgzLDE0fSwgeyAgMTk5NjcsMTZ9LCB7ICAgNTYzMSwxNX0sIHsgIDExNzc1LDE3fSwgXAorICAgIHsgICAzMDcxLDE2fSwgeyAgNjU1MzYsMTd9LCB7IDEzMTA3MiwxOH0sIHsgMjYyMTQ0LDE5fSwgXAorICAgIHsgNTI0Mjg4LDIwfSwgezEwNDg1NzYsMjF9LCB7MjA5NzE1MiwyMn0sIHs0MTk0MzA0LDIzfSwgXAorICAgIHs4Mzg4NjA4LDI0fSB9CisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzX1NJWkUgMjA1CisjZGVmaW5lIFNRUl9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA0MjI0CisKKyNkZWZpbmUgTVVMTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNVUxMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICA3OQorI2RlZmluZSBNVUxMT19NVUxfTl9USFJFU0hPTEQgICAgICAgICAgICAxMTI3OAorI2RlZmluZSBTUVJMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAxMAorI2RlZmluZSBTUVJMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgIDEwOQorI2RlZmluZSBTUVJMT19TUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgODIwNworCisjZGVmaW5lIERDX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDU1CisjZGVmaW5lIERDX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAgMTc5CisjZGVmaW5lIERDX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDgyCisjZGVmaW5lIERDX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTY2CisKKyNkZWZpbmUgSU5WX01VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgNTAKKyNkZWZpbmUgSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgICAxNzAKKyNkZWZpbmUgSU5WX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAxNzEKKworI2RlZmluZSBCSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgIDI5NAorI2RlZmluZSBSRURDXzFfVE9fUkVEQ18yX1RIUkVTSE9MRCAgICAgICAgICAzMworI2RlZmluZSBSRURDXzJfVE9fUkVEQ19OX1RIUkVTSE9MRCAgICAgICAgICA1OQorCisjZGVmaW5lIE1VX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAxNTI4CisjZGVmaW5lIE1VX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAxNTg5CisjZGVmaW5lIE1VUElfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDYyCisjZGVmaW5lIE1VX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAxNDcwCisjZGVmaW5lIE1VX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAxNTk3CisKKyNkZWZpbmUgUE9XTV9TRUNfVEFCTEUgIDIsOCwxOTEsNDUyLDkwNAorCisjZGVmaW5lIEdFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEdFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAgIDE5CisjZGVmaW5lIFNFVF9TVFJfRENfVEhSRVNIT0xEICAgICAgICAgICAgICAgODk4CisjZGVmaW5lIFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQgICAgICAxNjcwCisKKyNkZWZpbmUgRkFDX0RTQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICA0NzQKKyNkZWZpbmUgRkFDX09ERF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworCisjZGVmaW5lIE1BVFJJWDIyX1NUUkFTU0VOX1RIUkVTSE9MRCAgICAgICAgIDE2CisjZGVmaW5lIEhHQ0QyX0RJVjFfTUVUSE9EICAgICAgICAgICAgICAgICAgICA1ICAvKiAzLjg1JSBmYXN0ZXIgdGhhbiAzICovCisjZGVmaW5lIEhHQ0RfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAgIDY0CisjZGVmaW5lIEhHQ0RfQVBQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDYwCisjZGVmaW5lIEhHQ0RfUkVEVUNFX1RIUkVTSE9MRCAgICAgICAgICAgICAyNjgxCisjZGVmaW5lIEdDRF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgNjE4CisjZGVmaW5lIEdDREVYVF9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMzIxCisjZGVmaW5lIEpBQ09CSV9CQVNFX01FVEhPRCAgICAgICAgICAgICAgICAgICAxICAvKiAxMi4wMSUgZmFzdGVyIHRoYW4gNCAqLworCisvKiBUdW5ldXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgdG9vayAyMTM3ODQgc2Vjb25kcyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvc3FyX2RpYWdfYWRkbHNoMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC9zcXJfZGlhZ19hZGRsc2gxLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDg2MTI1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvc3FyX2RpYWdfYWRkbHNoMS5hc20KQEAgLTAsMCArMSwxMTYgQEAKK2RubCAgQU1ENjQgbXBuX3Nxcl9kaWFnX2FkZGxzaDEKKworZG5sICBDb250cmlidXRlZCB0byB0aGUgR05VIHByb2plY3QgYnkgVG9yYmrDtnJuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDExLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIEFNRCBLOCxLOQkgMi41CitDIEFNRCBLMTAJIDIuNQorQyBBTUQgYnVsbAkgMy42CitDIEFNRCBwaWxlCSAzLjYKK0MgQU1EIHN0ZWFtCSA/CitDIEFNRCBib2JjYXQJIDQKK0MgQU1EIGphZ3VhcgkgPworQyBJbnRlbCBQNAkgMTEuNQorQyBJbnRlbCBjb3JlCSA0CitDIEludGVsIE5ITQkgMy42CitDIEludGVsIFNCUgkgMy4xNQorQyBJbnRlbCBJQlIJIDMuMAorQyBJbnRlbCBIV0wJIDIuNgorQyBJbnRlbCBCV0wJID8KK0MgSW50ZWwgYXRvbQkxNAorQyBWSUEgbmFubwkgMy41CisKK0MgV2hlbiBwbGF5aW5nIHdpdGggcG9pbnRlcnMsIHNldCB0aGlzIHRvICQyIHRvIGZhbGwgYmFjayB0byBjb25zZXJ2YXRpdmUKK0MgaW5kZXhpbmcgaW4gd2luZC1kb3duIGNvZGUuCitkZWZpbmUoYEknLGAkMScpCisKK2RlZmluZShgcnAnLCAgICAgYCVyZGknKQorZGVmaW5lKGB0cCcsICAgICBgJXJzaScpCitkZWZpbmUoYHVwX2FyZycsIGAlcmR4JykKK2RlZmluZShgbicsICAgICAgYCVyY3gnKQorCitkZWZpbmUoYHVwJywgICAgIGAlcjExJykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMzIpCitQUk9MT0dVRShtcG5fc3FyX2RpYWdfYWRkbHNoMSkKKwlGVU5DX0VOVFJZKDQpCisJcHVzaAklcmJ4CisKKwlkZWMJbgorCXNobAluCisKKwltb3YJKHVwX2FyZyksICVyYXgKKworCWxlYQkocnAsbiw4KSwgcnAKKwlsZWEJKHRwLG4sOCksIHRwCisJbGVhCSh1cF9hcmcsbiw0KSwgdXAKKwluZWcJbgorCisJbXVsCSVyYXgKKwltb3YJJXJheCwgKHJwLG4sOCkKKworCXhvcglSMzIoJXJieCksIFIzMiglcmJ4KQorCWptcAlMKG1pZCkKKworCUFMSUdOKDE2KQorTCh0b3ApOglhZGQJJXIxMCwgJXI4CisJYWRjCSVyYXgsICVyOQorCW1vdgklcjgsIC04KHJwLG4sOCkKKwltb3YJJXI5LCAocnAsbiw4KQorTChtaWQpOgltb3YJOCh1cCxuLDQpLCAlcmF4CisJbW92CSh0cCxuLDgpLCAlcjgKKwltb3YJOCh0cCxuLDgpLCAlcjkKKwlhZGMJJXI4LCAlcjgKKwlhZGMJJXI5LCAlcjkKKwlsZWEJKCVyZHgsJXJieCksICVyMTAKKwlzZXRjCVI4KCVyYngpCisJbXVsCSVyYXgKKwlhZGQJJDIsIG4KKwlqcwlMKHRvcCkKKworTChlbmQpOglhZGQJJXIxMCwgJXI4CisJYWRjCSVyYXgsICVyOQorCW1vdgklcjgsIEkoLTgocnApLC04KHJwLG4sOCkpCisJbW92CSVyOSwgSSgocnApLChycCxuLDgpKQorCWFkYwklcmJ4LCAlcmR4CisJbW92CSVyZHgsIEkoOChycCksOChycCxuLDgpKQorCisJcG9wCSVyYngKKwlGVU5DX0VYSVQoKQorCXJldAorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvc3VibHNoMV9uLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3N1YmxzaDFfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZkODI5ZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3N1YmxzaDFfbi5hc20KQEAgLTAsMCArMSwxNjAgQEAKK2RubCAgQU1ENjQgbXBuX3N1YmxzaDFfbiAtLSBycFtdID0gdXBbXSAtICh2cFtdIDw8IDEpCisKK2RubCAgQ29weXJpZ2h0IDIwMDMsIDIwMDUtMjAwNywgMjAxMSwgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK0MJICAgICBjeWNsZXMvbGltYgorQyBBTUQgSzgsSzkJIDIuMgorQyBBTUQgSzEwCSAyLjIKK0MgSW50ZWwgUDQJMTIuNzUKK0MgSW50ZWwgY29yZTIJIDMuNDUKK0MgSW50ZWwgY29yZWkJID8KK0MgSW50ZWwgYXRvbQkgPworQyBWSUEgbmFubwkgMy4yNQorCitDIFNvbWV0aW1lcyBzcGVlZCBkZWdlbmVyYXRlcywgc3VwcG9zZWRseSByZWxhdGVkIHRvIHRoYXQgc29tZSBvcGVyYW5kCitDIGFsaWdubWVudHMgY2F1c2UgY2FjaGUgY29uZmxpY3RzLgorCitDIFRoZSBzcGVlZCBpcyBsaW1pdGVkIGJ5IGRlY29kaW5nL2lzc3VlIGJhbmR3aWR0aC4gIFRoZXJlIGFyZSAyNiBpbnN0cnVjdGlvbnMKK0MgaW4gdGhlIGxvb3AsIHdoaWNoIGNvcnJlc3BvbmRzIHRvIDI2LzMvNCA9IDIuMTY3IGMvbC4KKworQyBJTlBVVCBQQVJBTUVURVJTCitkZWZpbmUoYHJwJyxgJXJkaScpCitkZWZpbmUoYHVwJyxgJXJzaScpCitkZWZpbmUoYHZwJyxgJXJkeCcpCitkZWZpbmUoYG4nLCBgJXJjeCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX3N1YmxzaDFfbikKKwlGVU5DX0VOVFJZKDQpCisJcHVzaAklcmJ4CisJcHVzaAklcmJwCisKKwltb3YJKHZwKSwgJXI4CisJbW92CVIzMihuKSwgUjMyKCVyYXgpCisJbGVhCShycCxuLDgpLCBycAorCWxlYQkodXAsbiw4KSwgdXAKKwlsZWEJKHZwLG4sOCksIHZwCisJbmVnCW4KKwl4b3IJUjMyKCVyYnApLCBSMzIoJXJicCkKKwlhbmQJJDMsIFIzMiglcmF4KQorCWplCUwoYjAwKQorCWNtcAkkMiwgUjMyKCVyYXgpCisJamMJTChiMDEpCisJamUJTChiMTApCisKK0woYjExKToJYWRkCSVyOCwgJXI4CisJbW92CTgodnAsbiw4KSwgJXI5CisJYWRjCSVyOSwgJXI5CisJbW92CTE2KHZwLG4sOCksICVyMTAKKwlhZGMJJXIxMCwgJXIxMAorCXNiYglSMzIoJXJheCksIFIzMiglcmF4KQlDIHNhdmUgc2N5CisJbW92CSh1cCxuLDgpLCAlcmJwCisJbW92CTgodXAsbiw4KSwgJXJieAorCXN1YgklcjgsICVyYnAKKwlzYmIJJXI5LCAlcmJ4CisJbW92CSVyYnAsIChycCxuLDgpCisJbW92CSVyYngsIDgocnAsbiw4KQorCW1vdgkxNih1cCxuLDgpLCAlcmJwCisJc2JiCSVyMTAsICVyYnAKKwltb3YJJXJicCwgMTYocnAsbiw4KQorCXNiYglSMzIoJXJicCksIFIzMiglcmJwKQlDIHNhdmUgYWN5CisJYWRkCSQzLCBuCisJam1wCUwoZW50KQorCitMKGIxMCk6CWFkZAklcjgsICVyOAorCW1vdgk4KHZwLG4sOCksICVyOQorCWFkYwklcjksICVyOQorCXNiYglSMzIoJXJheCksIFIzMiglcmF4KQlDIHNhdmUgc2N5CisJbW92CSh1cCxuLDgpLCAlcmJwCisJbW92CTgodXAsbiw4KSwgJXJieAorCXN1YgklcjgsICVyYnAKKwlzYmIJJXI5LCAlcmJ4CisJbW92CSVyYnAsIChycCxuLDgpCisJbW92CSVyYngsIDgocnAsbiw4KQorCXNiYglSMzIoJXJicCksIFIzMiglcmJwKQlDIHNhdmUgYWN5CisJYWRkCSQyLCBuCisJam1wCUwoZW50KQorCitMKGIwMSk6CWFkZAklcjgsICVyOAorCXNiYglSMzIoJXJheCksIFIzMiglcmF4KQlDIHNhdmUgc2N5CisJbW92CSh1cCxuLDgpLCAlcmJwCisJc3ViCSVyOCwgJXJicAorCW1vdgklcmJwLCAocnAsbiw4KQorCXNiYglSMzIoJXJicCksIFIzMiglcmJwKQlDIHNhdmUgYWN5CisJaW5jCW4KK0woZW50KToJam5zCUwoZW5kKQorCisJQUxJR04oMTYpCitMKHRvcCk6CWFkZAlSMzIoJXJheCksIFIzMiglcmF4KQlDIHJlc3RvcmUgc2N5CisKKwltb3YJKHZwLG4sOCksICVyOAorTChiMDApOglhZGMJJXI4LCAlcjgKKwltb3YJOCh2cCxuLDgpLCAlcjkKKwlhZGMJJXI5LCAlcjkKKwltb3YJMTYodnAsbiw4KSwgJXIxMAorCWFkYwklcjEwLCAlcjEwCisJbW92CTI0KHZwLG4sOCksICVyMTEKKwlhZGMJJXIxMSwgJXIxMQorCisJc2JiCVIzMiglcmF4KSwgUjMyKCVyYXgpCUMgc2F2ZSBzY3kKKwlhZGQJUjMyKCVyYnApLCBSMzIoJXJicCkJQyByZXN0b3JlIGFjeQorCisJbW92CSh1cCxuLDgpLCAlcmJwCisJbW92CTgodXAsbiw4KSwgJXJieAorCXNiYgklcjgsICVyYnAKKwlzYmIJJXI5LCAlcmJ4CisJbW92CSVyYnAsIChycCxuLDgpCisJbW92CSVyYngsIDgocnAsbiw4KQorCW1vdgkxNih1cCxuLDgpLCAlcmJwCisJbW92CTI0KHVwLG4sOCksICVyYngKKwlzYmIJJXIxMCwgJXJicAorCXNiYgklcjExLCAlcmJ4CisJbW92CSVyYnAsIDE2KHJwLG4sOCkKKwltb3YJJXJieCwgMjQocnAsbiw4KQorCisJc2JiCVIzMiglcmJwKSwgUjMyKCVyYnApCUMgc2F2ZSBhY3kKKwlhZGQJJDQsIG4KKwlqcwlMKHRvcCkKKworTChlbmQpOglhZGQJUjMyKCVyYnApLCBSMzIoJXJheCkKKwluZWcJUjMyKCVyYXgpCisKKwlwb3AJJXJicAorCXBvcAklcmJ4CisJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3g4Nl82NC1kZWZzLm00IGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQveDg2XzY0LWRlZnMubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRlMzcyOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3g4Nl82NC1kZWZzLm00CkBAIC0wLDAgKzEsNDc1IEBACitkaXZlcnQoLTEpCisKK2RubCAgbTQgbWFjcm9zIGZvciBhbWQ2NCBhc3NlbWJsZXIuCisKK2RubCAgQ29weXJpZ2h0IDE5OTktMjAwNSwgMjAwOCwgMjAwOSwgMjAxMS0yMDEzLCAyMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK2RubCAgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKKworZG5sICBVc2FnZTogQ1BVVkVDX0ZVTkNTX0xJU1QKK2RubAorZG5sICBBIGxpc3Qgb2YgdGhlIGZ1bmN0aW9ucyBmcm9tIGdtcC1pbXBsLmggeDg2IHN0cnVjdCBjcHV2ZWNfdCwgaW4gdGhlCitkbmwgIG9yZGVyIHRoZXkgYXBwZWFyIGluIHRoYXQgc3RydWN0dXJlLgorCitkZWZpbmUoQ1BVVkVDX0ZVTkNTX0xJU1QsCitgYGFkZF9uJywKK2BhZGRsc2gxX24nLAorYGFkZGxzaDJfbicsCitgYWRkbXVsXzEnLAorYGFkZG11bF8yJywKK2BiZGl2X2RibTFjJywKK2BjbmRfYWRkX24nLAorYGNuZF9zdWJfbicsCitgY29tJywKK2Bjb3B5ZCcsCitgY29weWknLAorYGRpdmV4YWN0XzEnLAorYGRpdnJlbV8xJywKK2BnY2RfMTEnLAorYGxzaGlmdCcsCitgbHNoaWZ0YycsCitgbW9kXzEnLAorYG1vZF8xXzFwJywKK2Btb2RfMV8xcF9jcHMnLAorYG1vZF8xc18ycCcsCitgbW9kXzFzXzJwX2NwcycsCitgbW9kXzFzXzRwJywKK2Btb2RfMXNfNHBfY3BzJywKK2Btb2RfMzRsc3ViMScsCitgbW9kZXhhY3RfMWNfb2RkJywKK2BtdWxfMScsCitgbXVsX2Jhc2VjYXNlJywKK2BtdWxsb19iYXNlY2FzZScsCitgcHJlaW52X2RpdnJlbV8xJywKK2BwcmVpbnZfbW9kXzEnLAorYHJlZGNfMScsCitgcmVkY18yJywKK2Byc2hpZnQnLAorYHNxcl9iYXNlY2FzZScsCitgc3ViX24nLAorYHN1YmxzaDFfbicsCitgc3VibXVsXzEnJykKKworCitkbmwgIENhbGxlZDogUFJPTE9HVUVfY3B1KEdTWU1fUFJFRklYYCdmb28pCitkbmwKK2RubCAgSW4gdGhlIGFtZDY0IGNvZGUgd2UgdXNlIGV4cGxpY2l0IFRFWFQgYW5kIEFMSUdOKCkgY2FsbHMgaW4gdGhlIGNvZGUsCitkbmwgIHNpbmNlIGRpZmZlcmVudCBhbGlnbm1lbnRzIGFyZSB3YW50ZWQgaW4gdmFyaW91cyBjaXJjdW1zdGFuY2VzLiAgU28gZm9yCitkbmwgIGluc3RhbmNlLAorZG5sCitkbmwgICAgICAgICAgICAgICAgICBURVhUCitkbmwgICAgICAgICAgICAgICAgICBBTElHTigxNikKK2RubCAgICAgICAgICBQUk9MT0dVRShtcG5fYWRkX24pCitkbmwgICAgICAgICAgICAgICAgICAuLi4KK2RubCAgICAgICAgICBFUElMT0dVRSgpCisKK2RlZmluZShgUFJPTE9HVUVfY3B1JywKK200X2Fzc2VydF9udW1hcmdzKDEpCitgCUdMT0JMCSQxCisJVFlQRSgkMSxgZnVuY3Rpb24nKQorJDE6CisnKQorCisKK2RubCAgVXNhZ2U6IEFTU0VSVChbY29uZF1bLGluc3RydWN0aW9uc10pCitkbmwKK2RubCAgSWYgV0FOVF9BU1NFUlQgaXMgMSwgb3V0cHV0IHRoZSBnaXZlbiBpbnN0cnVjdGlvbnMgYW5kIGV4cGVjdCB0aGUgZ2l2ZW4KK2RubCAgZmxhZ3MgY29uZGl0aW9uIHRvIHRoZW4gYmUgc2F0aXNmaWVkLiAgRm9yIGV4YW1wbGUsCitkbmwKK2RubCAgICAgICAgIEFTU0VSVChuZSwgYGNtcHEgJXJheCwgJXJieCcpCitkbmwKK2RubCAgVGhlIGluc3RydWN0aW9ucyBjYW4gYmUgb21pdHRlZCB0byBqdXN0IGFzc2VydCBhIGZsYWdzIGNvbmRpdGlvbiB3aXRoCitkbmwgIG5vIGV4dHJhIGNhbGN1bGF0aW9uLiAgRm9yIGV4YW1wbGUsCitkbmwKK2RubCAgICAgICAgIEFTU0VSVChuYykKK2RubAorZG5sICBXaGVuIGBpbnN0cnVjdGlvbnMnIGlzIG5vdCBlbXB0eSwgYSBwdXNoZnEvcG9wZnEgaXMgYWRkZWQgZm9yCitkbmwgIGNvbnZlbmllbmNlIHRvIHByZXNlcnZlIHRoZSBmbGFncywgYnV0IHRoZSBpbnN0cnVjdGlvbnMgdGhlbXNlbHZlcyBtdXN0CitkbmwgIHByZXNlcnZlIGFueSByZWdpc3RlcnMgdGhhdCBtYXR0ZXIuCitkbmwKK2RubCAgVGhlIGNvbmRpdGlvbiBjYW4gYmUgb21pdHRlZCB0byBqdXN0IG91dHB1dCB0aGUgZ2l2ZW4gaW5zdHJ1Y3Rpb25zIHdoZW4KK2RubCAgYXNzZXJ0aW9uIGNoZWNraW5nIGlzIHdhbnRlZC4gIEluIHRoaXMgY2FzZSB0aGUgcHVzaGYvcG9wZiBpcyBvbWl0dGVkLgorZG5sICBGb3IgZXhhbXBsZSwKK2RubAorZG5sICAgICAgICAgQVNTRVJUKCwgYG1vdnEgJXJheCwgVkFSX0tFRVBWQUwnKQorCitkZWZpbmUoQVNTRVJULAorbTRfYXNzZXJ0X251bWFyZ3NfcmFuZ2UoMSwyKQorbTRfYXNzZXJ0X2RlZmluZWQoYFdBTlRfQVNTRVJUJykKK2BpZmVsc2UoV0FOVF9BU1NFUlQsMSwKK2BpZmVsc2UoYCQxJywsCitgCSQyJywKK2BpZmVsc2UoYCQyJywsLAorYAlwdXNoZnEnKQorCSQyCisJYGokMScJTChBU1NFUlRfb2tgJ0FTU0VSVF9jb3VudGVyKQorCXVkMglDIGFzc2VydGlvbiBmYWlsZWQKK0woQVNTRVJUX29rYCdBU1NFUlRfY291bnRlcik6CitpZmVsc2UoYCQyJywsLGAJcG9wZnEnKQorZGVmaW5lKGBBU1NFUlRfY291bnRlcicsaW5jcihBU1NFUlRfY291bnRlcikpJyknKScpCisKK2RlZmluZShBU1NFUlRfY291bnRlciwxKQorCitkbmwgTEVBIC0gbG9hZCBlZmZlY3RpdmUgYWRkcmVzcworZG5sCitkbmwgRklYTUU6IFdlIHNob3VsZCBuZXZlciBjcmVhdGUgYSBHT1QgZW50cnkgYW5kIHRoZXJlZm9yZSB1c2UgdGhlIHNpbXBsZXIgMm5kCitkbmwgdmFyaWFudCBhbHdheXMuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGhhcHBlbnMgZm9yIG5vdC15ZXQtaGlkZGVuCitkbmwgc3ltYm9scyBmaXJzdC4KK2RubAorZGVmaW5lKGBMRUEnLGBkbmwKK2lmZGVmKGBQSUMnLAorCWBtb3YJJDFAR09UUENSRUwoJXJpcCksICQyJworLAorCWBsZWEJJDEoJXJpcCksICQyJykKKycpCisKKworZGVmaW5lKGBERUZfT0JKRUNUJywKK200X2Fzc2VydF9udW1hcmdzX3JhbmdlKDIsMykKK2AJaWZlbHNlKCQjLDMsYCQzJyxgUk9EQVRBJykKKwlBTElHTigkMikKKyQxOgorJykKKworZGVmaW5lKGBFTkRfT0JKRUNUJywKK200X2Fzc2VydF9udW1hcmdzKDEpCitgCVNJWkUoYCQxJywuLWAkMScpJykKKworCitkZWZpbmUoYFIzMicsCisJYGlmZWxzZSgkMSxgJXJheCcsYCVlYXgnLAorCQkkMSxgJXJieCcsYCVlYngnLAorCQkkMSxgJXJjeCcsYCVlY3gnLAorCQkkMSxgJXJkeCcsYCVlZHgnLAorCQkkMSxgJXJzaScsYCVlc2knLAorCQkkMSxgJXJkaScsYCVlZGknLAorCQkkMSxgJXJicCcsYCVlYnAnLAorCQkkMSxgJXI4JyxgJXI4ZCcsCisJCSQxLGAlcjknLGAlcjlkJywKKwkJJDEsYCVyMTAnLGAlcjEwZCcsCisJCSQxLGAlcjExJyxgJXIxMWQnLAorCQkkMSxgJXIxMicsYCVyMTJkJywKKwkJJDEsYCVyMTMnLGAlcjEzZCcsCisJCSQxLGAlcjE0JyxgJXIxNGQnLAorCQkkMSxgJXIxNScsYCVyMTVkJyknKQorZGVmaW5lKGBSOCcsCisJYGlmZWxzZSgkMSxgJXJheCcsYCVhbCcsCisJCSQxLGAlcmJ4JyxgJWJsJywKKwkJJDEsYCVyY3gnLGAlY2wnLAorCQkkMSxgJXJkeCcsYCVkbCcsCisJCSQxLGAlcnNpJyxgJXNpbCcsCisJCSQxLGAlcmRpJyxgJWRpbCcsCisJCSQxLGAlcmJwJyxgJWJwbCcsCisJCSQxLGAlcjgnLGAlcjhiJywKKwkJJDEsYCVyOScsYCVyOWInLAorCQkkMSxgJXIxMCcsYCVyMTBiJywKKwkJJDEsYCVyMTEnLGAlcjExYicsCisJCSQxLGAlcjEyJyxgJXIxMmInLAorCQkkMSxgJXIxMycsYCVyMTNiJywKKwkJJDEsYCVyMTQnLGAlcjE0YicsCisJCSQxLGAlcjE1JyxgJXIxNWInKScpCisKKworZG5sICBVc2FnZTogQ0FMTChmdW5jbmFtZSkKK2RubAorCitkZWZpbmUoYENBTEwnLGBkbmwKK2lmZGVmKGBQSUMnLAorCWBjYWxsCUdTWU1fUFJFRklYYCckMUBQTFQnCissCisJYGNhbGwJR1NZTV9QUkVGSVhgJyQxJworKScpCisKK2RlZmluZShgVENBTEwnLGBkbmwKK2lmZGVmKGBQSUMnLAorCWBqbXAJR1NZTV9QUkVGSVhgJyQxQFBMVCcKKywKKwlgam1wCUdTWU1fUFJFRklYYCckMScKKyknKQorCisKK2RlZmluZShgSlVNUFRBQlNFQ1QnLCBgLnNlY3Rpb24JLmRhdGEucmVsLnJvLmxvY2FsLCJhIixAcHJvZ2JpdHMnKQorCisKK2RubCAgVXNhZ2U6IEpNUEVOVCh0YXJnbGFiZWwsdGFibGFiZWwpCisKK2RlZmluZShgSk1QRU5UJyxgZG5sCitpZmRlZihgUElDJywKKwlgLmxvbmcJJDEtJDInZG5sCissCisJYC5xdWFkCSQxJ2RubAorKScpCisKKworZG5sICBUaGVzZSBtYWNyb3MgYXJlIGRlZmluZWQganVzdCBmb3IgRE9TNjQsIHdoZXJlIHRoZXkgcHJvdmlkZSBjYWxsaW5nCitkbmwgIHNlcXVlbmNlIGdsdWUgY29kZS4KKworZGVmaW5lKGBGVU5DX0VOVFJZJyxgJykKK2RlZmluZShgRlVOQ19FWElUJyxgJykKKworCitkbmwgIFRhcmdldCBBQkkgbWFjcm9zLgorCitkZWZpbmUoYElGRE9TJywgICBgJykKK2RlZmluZShgSUZTVEQnLCAgIGAkMScpCitkZWZpbmUoYElGRUxGJywgICBgJDEnKQorCisKK2RubCAgVXNhZ2U6IFBST1RFQ1Qoc3ltYm9sKQorZG5sCitkbmwgIFVzZWQgZm9yIHByaXZhdGUgR01QIHN5bWJvbHMgdGhhdCBzaG91bGQgbmV2ZXIgYmUgb3ZlcnJpZGRlbiBieSB1c2Vycy4KK2RubCAgVGhpcyBjYW4gc2F2ZSByZWxvYyBlbnRyaWVzIGFuZCBpbXByb3ZlIHNobGliIHNoYXJpbmcgYXMgd2VsbCBhcworZG5sICBhcHBsaWNhdGlvbiBzdGFydHVwIHRpbWVzCisKK2RlZmluZShgUFJPVEVDVCcsICBgLmhpZGRlbiAkMScpCisKKworZG5sICBVc2FnZTogeDg2X2xvb2t1cCh0YXJnZXQsIGtleSx2YWx1ZSwga2V5LHZhbHVlLCAuLi4pCitkbmwKK2RubCAgTG9vayBmb3IgYHRhcmdldCcgYW1vbmcgdGhlIGBrZXknIHBhcmFtZXRlcnMuCitkbmwKK2RubCAgeDg2X2xvb2t1cCBleHBhbmRzIHRvIHRoZSBjb3JyZXNwb25kaW5nIGB2YWx1ZScsIG9yIGdlbmVyYXRlcyBhbiBlcnJvcgorZG5sICBpZiBgdGFyZ2V0JyBpc24ndCBmb3VuZC4KKworZGVmaW5lKHg4Nl9sb29rdXAsCittNF9hc3NlcnRfbnVtYXJnc19yYW5nZSgxLDk5OSkKK2BpZmVsc2UoZXZhbCgkIzwzKSwxLAorYG00X2Vycm9yKGB1bnJlY29nbmlzZWQgcGFydCBvZiB4ODYgaW5zdHJ1Y3Rpb246ICQxCisnKScsCitgaWZlbHNlKGAkMScsYCQyJywgYCQzJywKK2B4ODZfbG9va3VwKGAkMScsc2hpZnQoc2hpZnQoc2hpZnQoJEApKSkpJyknKScpCisKKworZG5sICBVc2FnZTogeDg2X29wY29kZV9yZWd4bW0ocmVnKQorZG5sCitkbmwgIFZhbGlkYXRlIHRoZSBnaXZlbiB4bW0gcmVnaXN0ZXIsIGFuZCByZXR1cm4gaXRzIG51bWJlciwgMCB0byA3LgorCitkZWZpbmUoeDg2X29wY29kZV9yZWd4bW0sCittNF9hc3NlcnRfbnVtYXJncygxKQorYHg4Nl9sb29rdXAoYCQxJyx4ODZfb3Bjb2RlX3JlZ3htbV9saXN0KScpCisKK2RlZmluZSh4ODZfb3Bjb2RlX3JlZ3htbV9saXN0LAorYGAleG1tMCcsMCwKK2AleG1tMScsMSwKK2AleG1tMicsMiwKK2AleG1tMycsMywKK2AleG1tNCcsNCwKK2AleG1tNScsNSwKK2AleG1tNicsNiwKK2AleG1tNycsNywKK2AleG1tOCcsOCwKK2AleG1tOScsOSwKK2AleG1tMTAnLDEwLAorYCV4bW0xMScsMTEsCitgJXhtbTEyJywxMiwKK2AleG1tMTMnLDEzLAorYCV4bW0xNCcsMTQsCitgJXhtbTE1JywxNScpCisKK2RubCAgVXNhZ2U6IHBhbGlnbnIoJGltbSwlc3JjcmVnLCVkc3RyZWcpCitkbmwKK2RubCAgRW1pdCBhIHBhbGlnbnIgaW5zdHJ1Y3Rpb24sIHVzaW5nIGEgLmJ5dGUgc2VxdWVuY2UsIHNpbmNlIG9ic29sZXRlIGJ1dAorZG5sICBzdGlsbCBkaXN0cmlidXRlZCB2ZXJzaW9ucyBvZiBnYXMgZG9uJ3Qga25vdyBTU1NFMyBpbnN0cnVjdGlvbnMuCisKK2RlZmluZShgcGFsaWducicsCittNF9hc3NlcnRfbnVtYXJncygzKQorYC5ieXRlCTB4NjYsZG5sCitpZmVsc2UoZXZhbCh4ODZfb3Bjb2RlX3JlZ3htbSgkMykgPj0gOCB8fCB4ODZfb3Bjb2RlX3JlZ3htbSgkMikgPj0gOCksMSwKKyAgICAgICBgZXZhbCgweDQwK3g4Nl9vcGNvZGVfcmVneG1tKCQzKS84KjQreDg2X29wY29kZV9yZWd4bW0oJDIpLzgpLCcpZG5sCisweDBmLDB4M2EsMHgwZixkbmwKK2V2YWwoMHhjMCt4ODZfb3Bjb2RlX3JlZ3htbSgkMyklOCo4K3g4Nl9vcGNvZGVfcmVneG1tKCQyKSU4KSxkbmwKK3N1YnN0cigkMSwxKScpCisKKworZG5sICBVc2FnZQorZG5sCitkbmwgICAgcmVnbnVtKG9wKSAgIHJhdyBvcGVyYW5kIGluZGV4IChzbyBzbGlnaHRseSBtaXNuYW1lZCkKK2RubCAgICByZWdudW1oKG9wKSAgaGlnaCBiaXQgb2YgcmVnaXN0ZXIgb3BlcmFuZCBuaW1iZXIKK2RubCAgICBpeChvcCkgICAgICAgMCBmb3IgcmVnIG9wZXJhbmQsIDEgZm9yIHBsYWluIHBvaW50ZXIgb3BlcmFuZC4KK2RubAorCitkZWZpbmUoYHJlZ251bScsYHg4Nl9sb29rdXAoYCQxJyxvcGxpc3QpJykKK2RlZmluZShgcmVnbnVtaCcsYGV2YWwocmVnbnVtKCQxKS84ICYgMSknKQorZGVmaW5lKGBpeCcsYGV2YWwocmVnbnVtKCQxKS8xNiknKQorZGVmaW5lKGBvcGxpc3QnLAorYGAlcmF4JywgICAwLCBgJXJjeCcsICAgMSwgYCVyZHgnLCAgIDIsICBgJXJieCcsICAgMywKKyBgJXJzcCcsICAgNCwgYCVyYnAnLCAgIDUsIGAlcnNpJywgICA2LCAgYCVyZGknLCAgIDcsCisgYCVyOCcsICAgIDgsIGAlcjknLCAgICA5LCBgJXIxMCcsICAxMCwgIGAlcjExJywgIDExLAorIGAlcjEyJywgIDEyLCBgJXIxMycsICAxMywgYCVyMTQnLCAgMTQsICBgJXIxNScsICAxNSwKKyBgKCVyYXgpJywxNiwgYCglcmN4KScsMTcsIGAoJXJkeCknLDE4LCAgYCglcmJ4KScsMTksCisgYCglcnNwKScsMjAsIGAoJXJicCknLDIxLCBgKCVyc2kpJywyMiwgIGAoJXJkaSknLDIzLAorIGAoJXI4KScsIDI0LCBgKCVyOSknLCAyNSwgYCglcjEwKScsMjYsICBgKCVyMTEpJywyNywKKyBgKCVyMTIpJywyOCwgYCglcjEzKScsMjksIGAoJXIxNCknLDMwLCAgYCglcjE1KScsMzEnKQorCitkbmwgIFVzYWdlIChieSBtdWx4LCBzaGx4LCBzaHJ4KQorZG5sCitkbmwgICAgIHJlZzEscmVnMixyZWczLG9wYzEsb3BjMgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAgKHJlZzEpLHJlZzIscmVnMyxvcGMxLG9wYzIKK2RubAorZG5sICB3aGVyZSByZWcxIGlzIGFueSByZWdpc3RlciBidXQgcnNwLHJicCxyMTIscjEzLCBvcgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAgb2ZmLChyZWcxKSxyZWcyLHJlZzMsb3BjMSxvcGMyCitkbmwKK2RubCAgd2hlcmUgcmVnMSBpcyBhbnkgcmVnaXN0ZXIgYnV0IHJzcCxyMTIuCitkbmwKK2RubCAgVGhlIGV4Y2VwdGlvbnMgYXJlIGR1ZSB0byBzcGVjaWFsIGNvZGluZyBuZWVkZWQgZm9yIHNvbWUgcmVnaXN0ZXJzOyByc3AKK2RubCAgYW5kIHIxMiBuZWVkIGFuIGV4dHJhIGJ5dGUgMHgyNCBhdCB0aGUgZW5kIHdoaWxlIHJicCBhbmQgcjEzIGxhY2sgdGhlCitkbmwgIG9mZnNldC1sZXNzIGZvcm0uCitkbmwKK2RubCAgT3RoZXIgYWRkcmVzc2luZyBmb3JtcyBhcmUgbm90IGhhbmRsZWQuICBJbnZhbGlkIGZvcm1zIGFyZSBub3QgcHJvcGVybHkKK2RubCAgZGV0ZWN0ZWQuICBPZmZzZXRzIHRoYXQgZG9uJ3QgZml0IG9uZSBieXRlIGFyZSBub3QgaGFuZGxlZCBjb3JyZWN0bHkuCisKK2RlZmluZShgYzRfaGVscGVyJyxgZG5sCisuYnl0ZQkweGM0YCdkbmwKK2lmZWxzZShgJCMnLDUsYGRubAorLGV2YWwoMHhlMl4zMipyZWdudW1oKCQxKV4xMjgqcmVnbnVtaCgkMykpYCdkbmwKKyxldmFsKDB4JDQtOCpyZWdudW0oJDIpKWAnZG5sCissMHgkNWAnZG5sCissZXZhbCgweGMwKyg3ICYgcmVnbnVtKCQxKSkrOCooNyAmIHJlZ251bSgkMykpLTB4YzAqaXgoJDEpKWAnZG5sCisnLGAkIycsNixgZG5sCissZXZhbCgweGUyXjMyKnJlZ251bWgoJDIpXjEyOCpyZWdudW1oKCQ0KSlgJ2RubAorLGV2YWwoMHgkNS04KnJlZ251bSgkMykpYCdkbmwKKywweCQ2YCdkbmwKKyxldmFsKDB4NDArKDcgJiByZWdudW0oJDIpKSs4Kig3ICYgcmVnbnVtKCQ0KSkpYCdkbmwKKyxldmFsKCgkMSArIDI1NikgJSAyNTYpYCdkbmwKKycpJykKKworCitkbmwgIFVzYWdlCitkbmwKK2RubCAgICAgbXVseChyZWcxLHJlZzIscmVnMykKK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgIG11bHgoKHJlZzEpLHJlZzIscmVnMykKK2RubAorZG5sICB3aGVyZSByZWcxIGlzIGFueSByZWdpc3RlciBidXQgcnNwLHJicCxyMTIscjEzLCBvcgorZG5sCitkbmwgICAgIG11bHgob2ZmLChyZWcxKSxyZWcyLHJlZzMpCitkbmwKK2RubCAgd2hlcmUgcmVnMSBpcyBhbnkgcmVnaXN0ZXIgYnV0IHJzcCxyMTIuCisKK2RlZmluZShgbXVseCcsYGRubAoraWZlbHNlKGAkIycsMyxgZG5sCitjNF9oZWxwZXIoJDEsJDIsJDMsZmIsZjYpJyxgZG5sICAgICAgICAgZm9ybWF0IDEsMgorYzRfaGVscGVyKCQxLCQyLCQzLCQ0LGZiLGY2KSdkbmwJZm9ybWF0IDMKKyknKQorCisKK2RubCAgVXNhZ2UKK2RubAorZG5sICAgICBzaGx4KHJlZzEscmVnMixyZWczKQorZG5sICAgICBzaHJ4KHJlZzEscmVnMixyZWczKQorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAgc2hseChyZWcxLChyZWcyKSxyZWczKQorZG5sICAgICBzaHJ4KHJlZzEsKHJlZzIpLHJlZzMpCitkbmwKK2RubCAgd2hlcmUgcmVnMiBpcyBhbnkgcmVnaXN0ZXIgYnV0IHJzcCxyYnAscjEyLHIxMywgb3IKK2RubAorZG5sICAgICBzaGx4KHJlZzEsb2ZmLChyZWcyKSxyZWczKQorZG5sICAgICBzaHJ4KHJlZzEsb2ZmLChyZWcyKSxyZWczKQorZG5sCitkbmwgIHdoZXJlIHJlZzIgaXMgYW55IHJlZ2lzdGVyIGJ1dCByc3AscjEyLgorCitkZWZpbmUoYHNobHgnLGBkbmwKK2lmZWxzZShgJCMnLDMsYGRubAorYzRfaGVscGVyKCQyLCQxLCQzLGY5LGY3KScsYGRubCAgICAgICAgIGZvcm1hdCAxLDIKK2M0X2hlbHBlcigkMSwkMywkMiwkNCxmOSxmNyknZG5sICAgICAgICBmb3JtYXQgMworKScpCisKK2RlZmluZShgc2hyeCcsYGRubAoraWZlbHNlKGAkIycsMyxgZG5sCitjNF9oZWxwZXIoJDIsJDEsJDMsZmIsZjcpJyxgZG5sICAgICAgICAgZm9ybWF0IDEsMgorYzRfaGVscGVyKCQxLCQzLCQyLCQ0LGZiLGY3KSdkbmwgICAgICAgIGZvcm1hdCAzCispJykKKworZGVmaW5lKGBzYXJ4JyxgZG5sCitpZmVsc2UoYCQjJywzLGBkbmwKK2M0X2hlbHBlcigkMiwkMSwkMyxmYSxmNyknLGBkbmwgICAgICAgICBmb3JtYXQgMSwyCitjNF9oZWxwZXIoJDEsJDMsJDIsJDQsZmEsZjcpJ2RubCAgICAgICAgZm9ybWF0IDMKKyknKQorCisKK2RubCAgVXNhZ2UKK2RubAorZG5sICAgICBhZGN4KHJlZzEscmVnMikKK2RubCAgICAgYWRveChyZWcxLHJlZzIpCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICBhZGN4KChyZWcxKSxyZWcyKQorZG5sICAgICBhZG94KChyZWcxKSxyZWcyKQorZG5sCitkbmwgIHdoZXJlIHJlZzEgaXMgYW55IHJlZ2lzdGVyIGJ1dCByc3AscmJwLHIxMixyMTMsIG9yCitkbmwKK2RubCAgICAgYWRjeChvZmYsKHJlZzEpLHJlZzIpCitkbmwgICAgIGFkb3gob2ZmLChyZWcxKSxyZWcyKQorZG5sCitkbmwgIHdoZXJlIHJlZzEgaXMgYW55IHJlZ2lzdGVyIGJ1dCByc3AscjEyLgorZG5sCitkbmwgIFRoZSBleGNlcHRpb25zIGFyZSBkdWUgdG8gc3BlY2lhbCBjb2RpbmcgbmVlZGVkIGZvciBzb21lIHJlZ2lzdGVyczsgcnNwCitkbmwgIGFuZCByMTIgbmVlZCBhbiBleHRyYSBieXRlIDB4MjQgYXQgdGhlIGVuZCB3aGlsZSByYnAgYW5kIHIxMyBsYWNrIHRoZQorZG5sICBvZmZzZXQtbGVzcyBmb3JtLgorZG5sCitkbmwgIE90aGVyIGFkZHJlc3NpbmcgZm9ybXMgYXJlIG5vdCBoYW5kbGVkLiAgSW52YWxpZCBmb3JtcyBhcmUgbm90IHByb3Blcmx5CitkbmwgIGRldGVjdGVkLiAgT2Zmc2V0cyB0aGF0IGRvbid0IGZpdCBvbmUgYnl0ZSBhcmUgbm90IGhhbmRsZWQgY29ycmVjdGx5LgorCitkZWZpbmUoYGFkeF9oZWxwZXInLGBkbmwKKyxldmFsKDB4NDgrcmVnbnVtaCgkMSkrNCpyZWdudW1oKCQyKSlgJ2RubAorLDB4MGZgJ2RubAorLDB4MzhgJ2RubAorLDB4ZjZgJ2RubAorJykKKworZGVmaW5lKGBhZHgnLGBkbmwKK2lmZWxzZShgJCMnLDIsYGRubAorYWR4X2hlbHBlcigkMSwkMilkbmwKKyxldmFsKDB4YzArKDcgJiByZWdudW0oJDEpKSs4Kig3ICYgcmVnbnVtKCQyKSktMHhjMCppeCgkMSkpYCdkbmwKKycsYCQjJywzLGBkbmwKK2FkeF9oZWxwZXIoJDIsJDMpZG5sCissZXZhbCgweDQwKyg3ICYgcmVnbnVtKCQyKSkrOCooNyAmIHJlZ251bSgkMykpKWAnZG5sCissZXZhbCgoJDEgKyAyNTYpICUgMjU2KWAnZG5sCisnKScpCisKK2RlZmluZShgYWRjeCcsYGRubAorLmJ5dGUJMHg2NmAnZG5sCithZHgoJEApJykKKworZGVmaW5lKGBhZG94JyxgZG5sCisuYnl0ZQkweGYzYCdkbmwKK2FkeCgkQCknKQorCitkaXZlcnRgJ2RubApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvemVuL2FvcnJsc2gxX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvemVuL2FvcnJsc2gxX24uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwM2ZhMzAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC96ZW4vYW9ycmxzaDFfbi5hc20KQEAgLTAsMCArMSwzNyBAQAorZG5sICBYODYtNjQgbXBuX2FkZGxzaDFfbiwgbXBuX2FkZGxzaDFfbmMsIG1wbl9yc2Jsc2gxX24sIG1wbl9yc2Jsc2gxX25jLgorCitkbmwgIENvcHlyaWdodCAyMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FkZGxzaDFfbiBtcG5fYWRkbHNoMV9uYyBtcG5fcnNibHNoMV9uIG1wbl9yc2Jsc2gxX25jKQoraW5jbHVkZV9tcG4oYHg4Nl82NC9hdG9tL2FvcnJsc2gxX24uYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3plbi9hb3JybHNoX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvemVuL2FvcnJsc2hfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA0OWIyZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3plbi9hb3JybHNoX24uYXNtCkBAIC0wLDAgKzEsMjI2IEBACitkbmwgIEFNRDY0IG1wbl9hZGRsc2hfbiwgbXBuX3JzYmxzaF9uLgorCitkbmwgIENvcHlyaWdodCAyMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MJCSAgICAgY3ljbGVzL2xpbWIKK0MgQU1EIEs4LEs5CQluL2EKK0MgQU1EIEsxMAkJbi9hCitDIEFNRCBiZDEJCW4vYQorQyBBTUQgYmQyCQluL2EKK0MgQU1EIGJkMwkJbi9hCitDIEFNRCBiZDQJCSAyLjMxCitDIEFNRCB6ZW4JCSAxLjY5CitDIEFNRCBidDEJCW4vYQorQyBBTUQgYnQyCQluL2EKK0MgSW50ZWwgUDQJCW4vYQorQyBJbnRlbCBQTlIJCW4vYQorQyBJbnRlbCBOSE0JCW4vYQorQyBJbnRlbCBTQlIJCW4vYQorQyBJbnRlbCBJQlIJCW4vYQorQyBJbnRlbCBIV0wJCSAyLjA4CitDIEludGVsIEJXTAkJIDEuNzgKK0MgSW50ZWwgU0tMCQkgMS43OAorQyBJbnRlbCBhdG9tCQluL2EKK0MgSW50ZWwgU0xNCQluL2EKK0MgVklBIG5hbm8JCW4vYQorCitDIFRPRE8KK0MgICogVGhlIGxvb3Agc3VzdGFpbnMgNCBpbnNucy9jeWNsZSBvbiB6ZW4uCitDICAqIFBlcmhhcHMgYXZvaWQgdXNpbmcganJjeHogYnkgdXNpbmcgZGVjIG4gKyBqbnouCisKK2RlZmluZShgcnAnLAlgJXJkaScpCitkZWZpbmUoYHVwJywJYCVyc2knKQorZGVmaW5lKGB2cCcsCWAlcmR4JykKK2RlZmluZShgbicsCWAlcmN4JykKK2RlZmluZShgY250JywJYCVyOCcpCisKK2RlZmluZShgdG5jJywJYCVyOScpCisKK2lmZGVmKGBPUEVSQVRJT05fYWRkbHNoX24nLGAKKyAgZGVmaW5lKEFEQ1NCQiwgICAgICAgYGFkYycpCisgIGRlZmluZShmdW5jLCBtcG5fYWRkbHNoX24pCisnKQoraWZkZWYoYE9QRVJBVElPTl9yc2Jsc2hfbicsYAorICBkZWZpbmUoQURDU0JCLCAgICAgICBgc2JiJykKKyAgZGVmaW5lKGZ1bmMsIG1wbl9yc2Jsc2hfbikKKycpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FkZGxzaF9uIG1wbl9yc2Jsc2hfbikKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMzIpCitQUk9MT0dVRShmdW5jKQorCUZVTkNfRU5UUlkoNCkKK0lGRE9TKGAJbW92CTU2KCVyc3ApLCAlcjhkCScpCisKKwltb3YJKHZwKSwgJXIxMAorCisJbW92CVIzMihuKSwgUjMyKCVyYXgpCisJc2hyCSQzLCBuCisJeG9yCVIzMih0bmMpLCBSMzIodG5jKQorCXN1YgljbnQsIHRuYworCWFuZAkkNywgUjMyKCVyYXgpCisKKwlsZWEJTCh0YWIpKCVyaXApLCAlcjExCitpZmRlZihgUElDJyxgCisJbW92c2xxCSglcjExLCVyYXgsNCksICVyYXgKKwlhZGQJJXIxMSwgJXJheAorCWptcAkqJXJheAorJyxgCisJam1wCSooJXIxMSwlcmF4LDgpCisnKQorCitMKDApOglsZWEJMzIodXApLCB1cAorCWxlYQkzMih2cCksIHZwCisJbGVhCTMyKHJwKSwgcnAKKwl4b3IJUjMyKCVyMTEpLCBSMzIoJXIxMSkKKwlqbXAJTChlMCkKKworTCg3KToJbW92CSVyMTAsICVyMTEKKwlsZWEJMjQodXApLCB1cAorCWxlYQkyNCh2cCksIHZwCisJbGVhCTI0KHJwKSwgcnAKKwl4b3IJUjMyKCVyMTApLCBSMzIoJXIxMCkKKwlqbXAJTChlNykKKworTCg2KToJbGVhCTE2KHVwKSwgdXAKKwlsZWEJMTYodnApLCB2cAorCWxlYQkxNihycCksIHJwCisJeG9yCVIzMiglcjExKSwgUjMyKCVyMTEpCisJam1wCUwoZTYpCisKK0woNSk6CW1vdgklcjEwLCAlcjExCisJbGVhCTgodXApLCB1cAorCWxlYQk4KHZwKSwgdnAKKwlsZWEJOChycCksIHJwCisJeG9yCVIzMiglcjEwKSwgUjMyKCVyMTApCisJam1wCUwoZTUpCisKK0woZW5kKToJQURDU0JCCTI0KHVwKSwgJXJheAorCW1vdgklcmF4LCAtNDAocnApCisJc2hyeCgJdG5jLCAlcjExLCAlcmF4KQorCUFEQ1NCQgluLCAlcmF4CisJRlVOQ19FWElUKCkKKwlyZXQKKworCUFMSUdOKDMyKQorTCh0b3ApOglqcmN4eglMKGVuZCkKKwltb3YJLTMyKHZwKSwgJXIxMAorCUFEQ1NCQgkyNCh1cCksICVyYXgKKwlsZWEJNjQodXApLCB1cAorCXNocngoCXRuYywgJXIxMSwgJXIxMSkKKwltb3YJJXJheCwgLTQwKHJwKQorTChlMCk6CWRlYwluCisJc2hseCgJY250LCAlcjEwLCAlcmF4KQorCWxlYQkoJXIxMSwlcmF4KSwgJXJheAorCW1vdgktMjQodnApLCAlcjExCisJQURDU0JCCS0zMih1cCksICVyYXgKKwlzaHJ4KAl0bmMsICVyMTAsICVyMTApCisJbW92CSVyYXgsIC0zMihycCkKK0woZTcpOglzaGx4KAljbnQsICVyMTEsICVyYXgpCisJbGVhCSglcjEwLCVyYXgpLCAlcmF4CisJbW92CS0xNih2cCksICVyMTAKKwlBRENTQkIJLTI0KHVwKSwgJXJheAorCXNocngoCXRuYywgJXIxMSwgJXIxMSkKKwltb3YJJXJheCwgLTI0KHJwKQorTChlNik6CXNobHgoCWNudCwgJXIxMCwgJXJheCkKKwlsZWEJKCVyMTEsJXJheCksICVyYXgKKwltb3YJLTgodnApLCAlcjExCisJQURDU0JCCS0xNih1cCksICVyYXgKKwlzaHJ4KAl0bmMsICVyMTAsICVyMTApCisJbW92CSVyYXgsIC0xNihycCkKK0woZTUpOglzaGx4KAljbnQsICVyMTEsICVyYXgpCisJbGVhCSglcjEwLCVyYXgpLCAlcmF4CisJbW92CSh2cCksICVyMTAKKwlBRENTQkIJLTgodXApLCAlcmF4CisJc2hyeCgJdG5jLCAlcjExLCAlcjExKQorCW1vdgklcmF4LCAtOChycCkKK0woZTQpOglzaGx4KAljbnQsICVyMTAsICVyYXgpCisJbGVhCSglcjExLCVyYXgpLCAlcmF4CisJbW92CTgodnApLCAlcjExCisJQURDU0JCCSh1cCksICVyYXgKKwlzaHJ4KAl0bmMsICVyMTAsICVyMTApCisJbW92CSVyYXgsIChycCkKK0woZTMpOglzaGx4KAljbnQsICVyMTEsICVyYXgpCisJbGVhCSglcjEwLCVyYXgpLCAlcmF4CisJbW92CTE2KHZwKSwgJXIxMAorCUFEQ1NCQgk4KHVwKSwgJXJheAorCXNocngoCXRuYywgJXIxMSwgJXIxMSkKKwltb3YJJXJheCwgOChycCkKK0woZTIpOglzaGx4KAljbnQsICVyMTAsICVyYXgpCisJbGVhCSglcjExLCVyYXgpLCAlcmF4CisJbW92CTI0KHZwKSwgJXIxMQorCUFEQ1NCQgkxNih1cCksICVyYXgKKwlsZWEJNjQodnApLCB2cAorCXNocngoCXRuYywgJXIxMCwgJXIxMCkKKwltb3YJJXJheCwgMTYocnApCisJbGVhCTY0KHJwKSwgcnAKK0woZTEpOglzaGx4KAljbnQsICVyMTEsICVyYXgpCisJbGVhCSglcjEwLCVyYXgpLCAlcmF4CisJam1wCUwodG9wKQorCitMKDQpOgl4b3IJUjMyKCVyMTEpLCBSMzIoJXIxMSkKKwlqbXAJTChlNCkKKworTCgzKToJbW92CSVyMTAsICVyMTEKKwlsZWEJLTgodXApLCB1cAorCWxlYQktOCh2cCksIHZwCisJbGVhCS04KHJwKSwgcnAKKwl4b3IJUjMyKCVyMTApLCBSMzIoJXIxMCkKKwlqbXAJTChlMykKKworTCgyKToJbGVhCS0xNih1cCksIHVwCisJbGVhCS0xNih2cCksIHZwCisJbGVhCS0xNihycCksIHJwCisJeG9yCVIzMiglcjExKSwgUjMyKCVyMTEpCisJam1wCUwoZTIpCisKK0woMSk6CW1vdgklcjEwLCAlcjExCisJbGVhCS0yNCh1cCksIHVwCisJbGVhCTQwKHZwKSwgdnAKKwlsZWEJNDAocnApLCBycAorCXhvcglSMzIoJXIxMCksIFIzMiglcjEwKQorCWptcAlMKGUxKQorRVBJTE9HVUUoKQorCUpVTVBUQUJTRUNUCisJQUxJR04oOCkKK0wodGFiKToJSk1QRU5UKAlMKDApLCBMKHRhYikpCisJSk1QRU5UKAlMKDEpLCBMKHRhYikpCisJSk1QRU5UKAlMKDIpLCBMKHRhYikpCisJSk1QRU5UKAlMKDMpLCBMKHRhYikpCisJSk1QRU5UKAlMKDQpLCBMKHRhYikpCisJSk1QRU5UKAlMKDUpLCBMKHRhYikpCisJSk1QRU5UKAlMKDYpLCBMKHRhYikpCisJSk1QRU5UKAlMKDcpLCBMKHRhYikpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC96ZW4vYW9yc211bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3plbi9hb3JzbXVsXzEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5Nzk1ZTMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC96ZW4vYW9yc211bF8xLmFzbQpAQCAtMCwwICsxLDE2NSBAQAorZG5sICBBTUQ2NCBtcG5fYWRkbXVsXzEgYW5kIG1wbl9zdWJtdWxfMSBmb3IgQ1BVcyB3aXRoIG11bHguCisKK2RubCAgQ29weXJpZ2h0IDIwMTIsIDIwMTMsIDIwMTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQwkgICAgIGN5Y2xlcy9saW1iCitDIEFNRCBLOCxLOQkgLQorQyBBTUQgSzEwCSAtCitDIEFNRCBiZDEJIC0KK0MgQU1EIGJkMgkgLQorQyBBTUQgYmQzCSAtCitDIEFNRCBiZDQJIDQuMworQyBBTUQgemVuCSAyCitDIEFNRCBidDEJIC0KK0MgQU1EIGJ0MgkgLQorQyBJbnRlbCBQNAkgLQorQyBJbnRlbCBQTlIJIC0KK0MgSW50ZWwgTkhNCSAtCitDIEludGVsIFNCUgkgLQorQyBJbnRlbCBJQlIJIC0KK0MgSW50ZWwgSFdMCSA/CitDIEludGVsIEJXTAkgPworQyBJbnRlbCBTS0wJID8KK0MgSW50ZWwgYXRvbQkgLQorQyBJbnRlbCBTTE0JIC0KK0MgVklBIG5hbm8JIC0KKworZGVmaW5lKGBycCcsICAgICAgYCVyZGknKSAgIEMgcmN4CitkZWZpbmUoYHVwJywgICAgICBgJXJzaScpICAgQyByZHgKK2RlZmluZShgbl9wYXJhbScsIGAlcmR4JykgICBDIHI4CitkZWZpbmUoYHYwX3BhcmFtJyxgJXJjeCcpICAgQyByOQorCitkZWZpbmUoYG4nLCAgICAgICBgJXJjeCcpCitkZWZpbmUoYHYwJywgICAgICBgJXJkeCcpCisKK2lmZGVmKGBPUEVSQVRJT05fYWRkbXVsXzEnLGAKKyAgICAgIGRlZmluZShgQUREU1VCJywgICAgICAgIGBhZGQnKQorICAgICAgZGVmaW5lKGBBRENTQkInLCAgICAgICAgYGFkYycpCisgICAgICBkZWZpbmUoYGZ1bmMnLCAgYG1wbl9hZGRtdWxfMScpCisnKQoraWZkZWYoYE9QRVJBVElPTl9zdWJtdWxfMScsYAorICAgICAgZGVmaW5lKGBBRERTVUInLCAgICAgICAgYHN1YicpCisgICAgICBkZWZpbmUoYEFEQ1NCQicsICAgICAgICBgc2JiJykKKyAgICAgIGRlZmluZShgZnVuYycsICBgbXBuX3N1Ym11bF8xJykKKycpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2FkZG11bF8xIG1wbl9zdWJtdWxfMSkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMTYpCitQUk9MT0dVRShmdW5jKQorCUZVTkNfRU5UUlkoNCkKKwltb3YJKHVwKSwgJXI4CisKKwlwdXNoCSVyYngKKwlwdXNoCSVyMTIKKwlwdXNoCSVyMTMKKworCWxlYQkodXAsbl9wYXJhbSw4KSwgdXAKKwlsZWEJLTMyKHJwLG5fcGFyYW0sOCksIHJwCisJbW92CVIzMihuX3BhcmFtKSwgUjMyKCVyYXgpCisJeGNoZwl2MF9wYXJhbSwgdjAJCUMgRklYTUU6IGlzIHRoaXMgaW5zbiBmYXN0PworCisJbmVnCW4KKworCWFuZAkkMywgUjgoJXJheCkKKwlqeglMKGIwKQorCWNtcAkkMiwgUjgoJXJheCkKKwlqeglMKGIyKQorCWpnCUwoYjMpCisKK0woYjEpOgltdWx4KAklcjgsICVyYngsICVyYXgpCisJc3ViCSQtMSwgbgorCWp6CUwod2QxKQorCS5ieXRlCTB4YzQsMHg2MiwweGIzLDB4ZjYsMHgwNCwweGNlCQlDIG11bHggKHVwLG4sOCksICVyOSwgJXI4CisJLmJ5dGUJMHhjNCwweDYyLDB4YTMsMHhmNiwweDU0LDB4Y2UsMHgwOAlDIG11bHggOCh1cCxuLDgpLCAlcjExLCAlcjEwCisJdGVzdAlSMzIoJXJheCksIFIzMiglcmF4KQkJQyBjbGVhciBjeQorCWptcAlMKGxvMSkKKworTChiMCk6CW11bHgoCSVyOCwgJXI5LCAlcjgpCisJLmJ5dGUJMHhjNCwweDYyLDB4YTMsMHhmNiwweDU0LDB4Y2UsMHgwOAlDIG11bHggOCh1cCxuLDgpLCAlcjExLCAlcjEwCisJLmJ5dGUJMHhjNCwweDYyLDB4OTMsMHhmNiwweDY0LDB4Y2UsMHgxMAlDIG11bHggMTYodXAsbiw4KSwgJXIxMywgJXIxMgorCXhvcglSMzIoJXJheCksIFIzMiglcmF4KQorCWptcAlMKGxvMCkKKworTChiMyk6CW11bHgoCSVyOCwgJXIxMSwgJXIxMCkKKwkuYnl0ZQkweGM0LDB4NjIsMHg5MywweGY2LDB4NjQsMHhjZSwweDA4CUMgbXVseCA4KHVwLG4sOCksICVyMTMsICVyMTIKKwkuYnl0ZQkweGM0LDB4ZTIsMHhlMywweGY2LDB4NDQsMHhjZSwweDEwCUMgbXVseCAxNih1cCxuLDgpLCAlcmJ4LCAlcmF4CisJYWRkCSVyMTAsICVyMTMKKwlhZGMJJXIxMiwgJXJieAorCWFkYwkkMCwgJXJheAorCXN1YgkkLTMsIG4KKwlqeglMKHdkMykKKwl0ZXN0CVIzMiglcmF4KSwgUjMyKCVyYXgpCQlDIGNsZWFyIGN5CisJam1wCUwobG8zKQorCitMKGIyKToJbXVseCgJJXI4LCAlcjEzLCAlcjEyKQorCS5ieXRlCTB4YzQsMHhlMiwweGUzLDB4ZjYsMHg0NCwweGNlLDB4MDgJQyBtdWx4IDgodXAsbiw4KSwgJXJieCwgJXJheAorCWFkZAklcjEyLCAlcmJ4CisJYWRjCSQwLCAlcmF4CisJc3ViCSQtMiwgbgorCWp6CUwod2QyKQorCS5ieXRlCTB4YzQsMHg2MiwweGIzLDB4ZjYsMHgwNCwweGNlCQlDIG11bHggKHVwLG4sOCksICVyOSwgJXI4CisJdGVzdAlSMzIoJXJheCksIFIzMiglcmF4KQkJQyBjbGVhciBjeQorCWptcAlMKGxvMikKKworTCh0b3ApOglBRERTVUIJJXI5LCAocnAsbiw4KQorTChsbzMpOgkuYnl0ZQkweGM0LDB4NjIsMHhiMywweGY2LDB4MDQsMHhjZQkJQyBtdWx4ICh1cCxuLDgpLCAlcjksICVyOAorCUFEQ1NCQgklcjExLCA4KHJwLG4sOCkKK0wobG8yKToJLmJ5dGUJMHhjNCwweDYyLDB4YTMsMHhmNiwweDU0LDB4Y2UsMHgwOAlDIG11bHggOCh1cCxuLDgpLCAlcjExLCAlcjEwCisJQURDU0JCCSVyMTMsIDE2KHJwLG4sOCkKK0wobG8xKToJLmJ5dGUJMHhjNCwweDYyLDB4OTMsMHhmNiwweDY0LDB4Y2UsMHgxMAlDIG11bHggMTYodXAsbiw4KSwgJXIxMywgJXIxMgorCUFEQ1NCQgklcmJ4LCAyNChycCxuLDgpCisJYWRjCSVyYXgsICVyOQorTChsbzApOgkuYnl0ZQkweGM0LDB4ZTIsMHhlMywweGY2LDB4NDQsMHhjZSwweDE4CUMgbXVseCAyNCh1cCxuLDgpLCAlcmJ4LCAlcmF4CisJYWRjCSVyOCwgJXIxMQorCWFkYwklcjEwLCAlcjEzCisJYWRjCSVyMTIsICVyYngKKwlhZGMJJDAsICVyYXgJCUMgcmF4ID0gY2FycnkgbGltYgorCWFkZAkkNCwgbgorCWpzCUwodG9wKQorCitMKGVuZCk6CUFERFNVQgklcjksIChycCkKK0wod2QzKToJQURDU0JCCSVyMTEsIDgocnApCitMKHdkMik6CUFEQ1NCQgklcjEzLCAxNihycCkKK0wod2QxKToJQURDU0JCCSVyYngsIDI0KHJwKQorCWFkYwluLCAlcmF4CisJcG9wCSVyMTMKKwlwb3AJJXIxMgorCXBvcAklcmJ4CisJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKK0FTTV9FTkQoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvemVuL2NvbS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC96ZW4vY29tLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzRmODQxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvemVuL2NvbS5hc20KQEAgLTAsMCArMSwzNyBAQAorZG5sICBYODYtNjQgbXBuX2NvbSBvcHRpbWlzZWQgZm9yIEFNRCBaZW4uCisKK2RubCAgQ29weXJpZ2h0IDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworaW5jbHVkZShgLi4vY29uZmlnLm00JykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fY29tKQoraW5jbHVkZV9tcG4oYHg4Nl82NC9mYXN0c3NlL2NvbS5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvemVuL2NvcHlkLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3plbi9jb3B5ZC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNlZDIzNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3plbi9jb3B5ZC5hc20KQEAgLTAsMCArMSwzNyBAQAorZG5sICBYODYtNjQgbXBuX2NvcHlkIG9wdGltaXNlZCBmb3IgQU1EIFplbi4KKworZG5sICBDb3B5cmlnaHQgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9jb3B5ZCkKK2luY2x1ZGVfbXBuKGB4ODZfNjQvZmFzdHNzZS9jb3B5ZC5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvemVuL2NvcHlpLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3plbi9jb3B5aS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFhZmFhYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3plbi9jb3B5aS5hc20KQEAgLTAsMCArMSwzNyBAQAorZG5sICBYODYtNjQgbXBuX2NvcHlpIG9wdGltaXNlZCBmb3IgQU1EIFplbi4KKworZG5sICBDb3B5cmlnaHQgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9jb3B5aSkKK2luY2x1ZGVfbXBuKGB4ODZfNjQvZmFzdHNzZS9jb3B5aS5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvemVuL2djZF8xMS5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC96ZW4vZ2NkXzExLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmZiNmNhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvemVuL2djZF8xMS5hc20KQEAgLTAsMCArMSwzNyBAQAorZG5sICBBTUQ2NCBtcG5fZ2NkXzExLgorCitkbmwgIENvcHlyaWdodCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX2djZF8xMSkKK2luY2x1ZGVfbXBuKGB4ODZfNjQvYmQyL2djZF8xMS5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvemVuL2djZF8yMi5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC96ZW4vZ2NkXzIyLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGZkOWUzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvemVuL2djZF8yMi5hc20KQEAgLTAsMCArMSwzNyBAQAorZG5sICBBTUQ2NCBtcG5fZ2NkXzIyLgorCitkbmwgIENvcHlyaWdodCAyMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK2RubCBBQklfU1VQUE9SVChET1M2NCkJQyByZXR1cm5zIG1wX2RvdWJsZV9saW1iX3QgaW4gbWVtb3J5CitBQklfU1VQUE9SVChTVEQ2NCkKKworTVVMRlVOQ19QUk9MT0dVRShtcG5fZ2NkXzIyKQoraW5jbHVkZV9tcG4oYHg4Nl82NC9jb3JlaWh3bC9nY2RfMjIuYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3plbi9nbXAtbXBhcmFtLmggYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC96ZW4vZ21wLW1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YTEyYjMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC96ZW4vZ21wLW1wYXJhbS5oCkBAIC0wLDAgKzEsMjgwIEBACisvKiBBTUQgWmVuIGdtcC1tcGFyYW0uaCAtLSBDb21waWxlci9tYWNoaW5lIHBhcmFtZXRlciBoZWFkZXIgZmlsZS4KKworQ29weXJpZ2h0IDIwMTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KKworVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworb3IKKworICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgIGxhdGVyIHZlcnNpb24uCisKK29yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK3NlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4gICovCisKKyNkZWZpbmUgR01QX0xJTUJfQklUUyA2NAorI2RlZmluZSBHTVBfTElNQl9CWVRFUyA4CisKKy8qIERpc2FibGUgdXNlIG9mIHNsb3cgZnVuY3Rpb25zLiAgRklYTUU6IFdlIHNob3VsZCBkaXNhYmxlIGxpYiBpbmNsdXNpb24uICAqLworI3VuZGVmIEhBVkVfTkFUSVZFX21wbl9tdWxfMgorI3VuZGVmIEhBVkVfTkFUSVZFX21wbl9hZGRtdWxfMgorCisvKiAzNzAwLTQzMDAgTUh6IFBpbm5hY2xlIFJpZGdlICovCisvKiBGRlQgdHVuaW5nIGxpbWl0ID0gNDY4LDUxNCwzNjAgKi8KKy8qIEdlbmVyYXRlZCBieSB0dW5ldXAuYywgMjAxOS0xMC0xOCwgZ2NjIDguMyAqLworCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNAorI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgMworI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAxMworI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICAgICAxOAorI2RlZmluZSBQUkVJTlZfTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgOQorI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgICAgICAgICAgICAgICAgMSAgLyogbmF0aXZlICovCisjZGVmaW5lIERJVl9RUl8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAxCisjZGVmaW5lIERJVl9RUl8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVl9RUl8yX1BJMl9USFJFU0hPTEQgICAgICAgICAgICAgIDMyCisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgICAgICAgMjIKKworI2RlZmluZSBESVZfMV9WU19NVUxfMV9QRVJDRU5UICAgICAgICAgICAgIDMzOAorCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTA3CisjZGVmaW5lIE1VTF9UT09NNDRfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTkwCisjZGVmaW5lIE1VTF9UT09NNkhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjMwCisjZGVmaW5lIE1VTF9UT09NOEhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjcyCisKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNDNfVEhSRVNIT0xEICAgICAgOTcKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxMTAKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxMDYKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNjNfVEhSRVNIT0xEICAgICAxMTcKKyNkZWZpbmUgTVVMX1RPT000M19UT19UT09NNTRfVEhSRVNIT0xEICAgICAxMzYKKworI2RlZmluZSBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTE0CisjZGVmaW5lIFNRUl9UT09NNF9USFJFU0hPTEQgICAgICAgICAgICAgICAgNDIyCisjZGVmaW5lIFNRUl9UT09NNl9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgU1FSX1RPT004X1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworCisjZGVmaW5lIE1VTE1JRF9UT09NNDJfVEhSRVNIT0xEICAgICAgICAgICAgIDQwCisKKyNkZWZpbmUgTVVMTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgU1FSTU9EX0JOTTFfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTcKKworI2RlZmluZSBNVUxfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDU0MCAgLyogayA9IDUgKi8KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDU0MCwgNX0sIHsgICAgIDIyLCA2fSwgeyAgICAgMTIsIDV9LCB7ICAgICAyNSwgNn0sIFwKKyAgICB7ICAgICAyNSwgN30sIHsgICAgIDEzLCA2fSwgeyAgICAgMjksIDd9LCB7ICAgICAxNSwgNn0sIFwKKyAgICB7ICAgICAzMSwgN30sIHsgICAgIDIxLCA4fSwgeyAgICAgMTEsIDd9LCB7ICAgICAyNSwgOH0sIFwKKyAgICB7ICAgICAxMywgN30sIHsgICAgIDI5LCA4fSwgeyAgICAgMTUsIDd9LCB7ICAgICAzMiwgOH0sIFwKKyAgICB7ICAgICAxNywgN30sIHsgICAgIDM1LCA4fSwgeyAgICAgMTksIDd9LCB7ICAgICAzOSwgOH0sIFwKKyAgICB7ICAgICAyMSwgN30sIHsgICAgIDQzLCA5fSwgeyAgICAgMTEsIDh9LCB7ICAgICAyOSwgOX0sIFwKKyAgICB7ICAgICAxNSwgOH0sIHsgICAgIDM1LCA5fSwgeyAgICAgMTksIDh9LCB7ICAgICA0MywgOX0sIFwKKyAgICB7ICAgICAyMywgOH0sIHsgICAgIDQ5LCA5fSwgeyAgICAgMjcsMTB9LCB7ICAgICAxNSwgOX0sIFwKKyAgICB7ICAgICAzMSwgOH0sIHsgICAgIDYzLCA5fSwgeyAgICAgNDMsMTB9LCB7ICAgICAyMywgOX0sIFwKKyAgICB7ICAgICA1NSwxMX0sIHsgICAgIDE1LDEwfSwgeyAgICAgMzEsIDl9LCB7ICAgICA2NywxMH0sIFwKKyAgICB7ICAgICAzOSwgOX0sIHsgICAgIDgzLDEwfSwgeyAgICAgNDcsIDl9LCB7ICAgICA5OSwxMH0sIFwKKyAgICB7ICAgICA1NSwxMX0sIHsgICAgIDMxLDEwfSwgeyAgICAgNzksMTF9LCB7ICAgICA0NywxMH0sIFwKKyAgICB7ICAgIDEwMywxMn0sIHsgICAgIDMxLDExfSwgeyAgICAgNjMsMTB9LCB7ICAgIDEzNSwxMX0sIFwKKyAgICB7ICAgICA3OSwxMH0sIHsgICAgMTY3LDExfSwgeyAgICAgOTUsMTB9LCB7ICAgIDE5MSwxMn0sIFwKKyAgICB7ICAgICA2MywxMX0sIHsgICAgMTU5LDEyfSwgeyAgICAgOTUsMTF9LCB7ICAgIDE5MSwxM30sIFwKKyAgICB7ICAgICA2MywxMn0sIHsgICAgMTI3LDExfSwgeyAgICAyNTUsMTB9LCB7ICAgIDUxMSwxMX0sIFwKKyAgICB7ICAgIDI3MSwxMH0sIHsgICAgNTQzLDExfSwgeyAgICAyODcsMTJ9LCB7ICAgIDE1OSwxMX0sIFwKKyAgICB7ICAgIDMxOSwxMH0sIHsgICAgNjM5LDExfSwgeyAgICAzMzUsMTB9LCB7ICAgIDY3MSwgOX0sIFwKKyAgICB7ICAgMTM0MywxMX0sIHsgICAgMzUxLDEyfSwgeyAgICAxOTEsMTF9LCB7ICAgIDM4MywxMH0sIFwKKyAgICB7ICAgIDc2NywxMX0sIHsgICAgNDE1LDEwfSwgeyAgICA4MzEsMTJ9LCB7ICAgIDIyMywxMX0sIFwKKyAgICB7ICAgIDQ0NywxM30sIHsgICAgMTI3LDEyfSwgeyAgICAyNTUsMTF9LCB7ICAgIDU0MywxMH0sIFwKKyAgICB7ICAgMTA4NywxMn0sIHsgICAgMjg3LDExfSwgeyAgICA1NzUsMTB9LCB7ICAgMTE1MSwxMX0sIFwKKyAgICB7ICAgIDYwNywxMH0sIHsgICAxMjE1LDEyfSwgeyAgICAzMTksMTF9LCB7ICAgIDYzOSwxMH0sIFwKKyAgICB7ICAgMTI3OSwxMX0sIHsgICAgNjcxLDEwfSwgeyAgIDEzNDMsIDl9LCB7ICAgMjY4NywxMn0sIFwKKyAgICB7ICAgIDM1MSwxMX0sIHsgICAgNzAzLDEzfSwgeyAgICAxOTEsMTJ9LCB7ICAgIDM4MywxMX0sIFwKKyAgICB7ICAgIDc2NywxMn0sIHsgICAgNDE1LDExfSwgeyAgICA4MzEsMTB9LCB7ICAgMTY2MywxMn0sIFwKKyAgICB7ICAgIDQ0NywxNH0sIHsgICAgMTI3LDEzfSwgeyAgICAyNTUsMTJ9LCB7ICAgIDUxMSwxMX0sIFwKKyAgICB7ICAgMTAyMywxMn0sIHsgICAgNTQzLDExfSwgeyAgIDEwODcsMTJ9LCB7ICAgIDU3NSwxMX0sIFwKKyAgICB7ICAgMTE1MSwxMn0sIHsgICAgNjA3LDExfSwgeyAgIDEyMTUsMTN9LCB7ICAgIDMxOSwxMn0sIFwKKyAgICB7ICAgIDYzOSwxMX0sIHsgICAxMjc5LDEyfSwgeyAgICA2NzEsMTF9LCB7ICAgMTM0MywxMH0sIFwKKyAgICB7ICAgMjY4NywxMn0sIHsgICAgNzAzLDExfSwgeyAgIDE0MDcsMTN9LCB7ICAgIDM4MywxMn0sIFwKKyAgICB7ICAgIDc5OSwxMX0sIHsgICAxNTk5LDEyfSwgeyAgICA4MzEsMTF9LCB7ICAgMTY2MywxM30sIFwKKyAgICB7ICAgIDQ0NywxMn0sIHsgICAgODk1LDExfSwgeyAgIDE3OTEsMTJ9LCB7ICAgIDkyNywxMX0sIFwKKyAgICB7ICAgMTg1NSwxMn0sIHsgICAgOTU5LDExfSwgeyAgIDE5MTksMTB9LCB7ICAgMzgzOSwxM30sIFwKKyAgICB7ICAgIDUxMSwxMn0sIHsgICAxMDg3LDExfSwgeyAgIDIxNzUsMTN9LCB7ICAgIDU3NSwxMn0sIFwKKyAgICB7ICAgMTIxNSwxMX0sIHsgICAyNDMxLDEzfSwgeyAgICA2MzksMTJ9LCB7ICAgMTM0MywxMX0sIFwKKyAgICB7ICAgMjY4NywxM30sIHsgICAgNzAzLDEyfSwgeyAgIDE0MDcsMTR9LCB7ICAgIDM4MywxM30sIFwKKyAgICB7ICAgIDc2NywxMn0sIHsgICAxNTk5LDEzfSwgeyAgICA4MzEsMTJ9LCB7ICAgMTcyNywxMX0sIFwKKyAgICB7ICAgMzQ1NSwxM30sIHsgICAgODk1LDEyfSwgeyAgIDE4NTUsMTN9LCB7ICAgIDk1OSwxMn0sIFwKKyAgICB7ICAgMTkxOSwxMX0sIHsgICAzODM5LDE0fSwgeyAgICA1MTEsMTN9LCB7ICAgMTA4NywxMn0sIFwKKyAgICB7ICAgMjE3NSwxM30sIHsgICAxMjE1LDEyfSwgeyAgIDI0MzEsMTR9LCB7ICAgIDYzOSwxM30sIFwKKyAgICB7ICAgMTM0MywxMn0sIHsgICAyNjg3LDEzfSwgeyAgIDE0NzEsMTJ9LCB7ICAgMjk0MywxNH0sIFwKKyAgICB7ICAgIDc2NywxM30sIHsgICAxNTk5LDEyfSwgeyAgIDMxOTksMTN9LCB7ICAgMTcyNywxMn0sIFwKKyAgICB7ICAgMzQ1NSwxNH0sIHsgICAgODk1LDEzfSwgeyAgIDE4NTUsMTJ9LCB7ICAgMzcxMSwxM30sIFwKKyAgICB7ICAgMTkxOSwxNX0sIHsgICAgNTExLDE0fSwgeyAgIDEwMjMsMTN9LCB7ICAgMjE3NSwxNH0sIFwKKyAgICB7ICAgMTE1MSwxM30sIHsgICAyNDMxLDEyfSwgeyAgIDQ4NjMsMTR9LCB7ICAgMTI3OSwxM30sIFwKKyAgICB7ICAgMjY4NywxNH0sIHsgICAxNDA3LDEzfSwgeyAgIDI4MTUsMTV9LCB7ICAgIDc2NywxNH0sIFwKKyAgICB7ICAgMTUzNSwxM30sIHsgICAzMTk5LDE0fSwgeyAgIDE2NjMsMTN9LCB7ICAgMzQ1NSwxMn0sIFwKKyAgICB7ICAgNjkxMSwxNH0sIHsgICAxNzkxLDEzfSwgeyAgIDM1ODMsMTR9LCB7ICAgMTkxOSwxNn0sIFwKKyAgICB7ICAgIDUxMSwxNX0sIHsgICAxMDIzLDE0fSwgeyAgIDIxNzUsMTN9LCB7ICAgNDQ3OSwxNH0sIFwKKyAgICB7ICAgMjQzMSwxM30sIHsgICA0ODYzLDE1fSwgeyAgIDEyNzksMTR9LCB7ICAgMjY4NywxM30sIFwKKyAgICB7ICAgNTM3NSwxNH0sIHsgICAyOTQzLDEzfSwgeyAgIDU4ODcsMTV9LCB7ICAgMTUzNSwxNH0sIFwKKyAgICB7ICAgMzQ1NSwxM30sIHsgICA2OTExLDE1fSwgeyAgIDE3OTEsMTR9LCB7ICAgMzgzOSwxM30sIFwKKyAgICB7ICAgNzY3OSwxNn0sIHsgICAxMDIzLDE1fSwgeyAgIDIwNDcsMTR9LCB7ICAgNDQ3OSwxNX0sIFwKKyAgICB7ICAgMjMwMywxNH0sIHsgICA0OTkxLDE1fSwgeyAgIDI1NTksMTR9LCB7ICAgNTI0NywxNX0sIFwKKyAgICB7ICAgMjgxNSwxNH0sIHsgICA1ODg3LDE2fSwgeyAgIDE1MzUsMTV9LCB7ICAgMzMyNywxNH0sIFwKKyAgICB7ICAgNjkxMSwxNX0sIHsgICAzODM5LDE0fSwgeyAgIDc2NzksMTd9LCB7ICAgMTAyMywxNn0sIFwKKyAgICB7ICAgMjA0NywxNX0sIHsgICA0MDk1LDE0fSwgeyAgIDgxOTEsMTV9LCB7ICAgNDM1MSwxNH0sIFwKKyAgICB7ICAgODk1OSwxNX0sIHsgICA0ODYzLDE2fSwgeyAgIDI1NTksMTV9LCB7ICAgNTM3NSwxNH0sIFwKKyAgICB7ICAxMTAwNywxNX0sIHsgICA1ODg3LDE0fSwgeyAgMTE3NzUsMTZ9LCB7ICAgMzA3MSwxNX0sIFwKKyAgICB7ICAgNjkxMSwxNn0sIHsgICAzNTgzLDE1fSwgeyAgIDcxNjcsMTR9LCB7ICAxNDMzNSwxNX0sIFwKKyAgICB7ICAgNzY3OSwxNH0sIHsgIDE1MzU5LDE1fSwgeyAgIDc5MzUsMTR9LCB7ICAxNTg3MSwxN30sIFwKKyAgICB7ICAgMjA0NywxNn0sIHsgICA0MDk1LDE1fSwgeyAgIDg5NTksMTZ9LCB7ICAgNDYwNywxNX0sIFwKKyAgICB7ICAgOTIxNSwxNH0sIHsgIDE4NDMxLDE1fSwgeyAgIDk3MjcsMTR9LCB7ICAxOTQ1NSwxNX0sIFwKKyAgICB7ICAgOTk4MywxNH0sIHsgIDE5OTY3LDE2fSwgeyAgIDUxMTksMTV9LCB7ICAxMTAwNywxNn0sIFwKKyAgICB7ICAgNTYzMSwxNX0sIHsgIDExNzc1LDE3fSwgeyAgIDMwNzEsMTZ9LCB7ICA2NTUzNiwxN30sIFwKKyAgICB7IDEzMTA3MiwxOH0sIHsgMjYyMTQ0LDE5fSwgeyA1MjQyODgsMjB9LCB7MTA0ODU3NiwyMX0sIFwKKyAgICB7MjA5NzE1MiwyMn0sIHs0MTk0MzA0LDIzfSwgezgzODg2MDgsMjR9IH0KKyNkZWZpbmUgTVVMX0ZGVF9UQUJMRTNfU0laRSAyNzEKKyNkZWZpbmUgTVVMX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDYyNzIKKworI2RlZmluZSBTUVJfRkZUX01PREZfVEhSRVNIT0xEICAgICAgICAgICAgIDQwNCAgLyogayA9IDUgKi8KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyB7ICAgIDQwNCwgNX0sIHsgICAgIDEzLCA0fSwgeyAgICAgMjcsIDV9LCB7ICAgICAyMSwgNn0sIFwKKyAgICB7ICAgICAxMSwgNX0sIHsgICAgIDI1LCA2fSwgeyAgICAgMTMsIDV9LCB7ICAgICAyNywgNn0sIFwKKyAgICB7ICAgICAxNCwgNX0sIHsgICAgIDI5LCA2fSwgeyAgICAgMjksIDd9LCB7ICAgICAxNSwgNn0sIFwKKyAgICB7ICAgICAzMSwgN30sIHsgICAgIDE3LCA2fSwgeyAgICAgMzUsIDd9LCB7ICAgICAyNSwgOH0sIFwKKyAgICB7ICAgICAxMywgN30sIHsgICAgIDI5LCA4fSwgeyAgICAgMTUsIDd9LCB7ICAgICAzMywgOH0sIFwKKyAgICB7ICAgICAxNywgN30sIHsgICAgIDM1LCA4fSwgeyAgICAgMTksIDd9LCB7ICAgICAzOSwgOH0sIFwKKyAgICB7ICAgICAyOSwgOX0sIHsgICAgIDE1LCA4fSwgeyAgICAgMzUsIDl9LCB7ICAgICAxOSwgOH0sIFwKKyAgICB7ICAgICA0MSwgOX0sIHsgICAgIDIzLCA4fSwgeyAgICAgNDksIDl9LCB7ICAgICAyNywxMH0sIFwKKyAgICB7ICAgICAxNSwgOX0sIHsgICAgIDMxLCA4fSwgeyAgICAgNjMsIDl9LCB7ICAgICA0MywxMH0sIFwKKyAgICB7ICAgICAyMywgOX0sIHsgICAgIDUxLDExfSwgeyAgICAgMTUsMTB9LCB7ICAgICAzMSwgOX0sIFwKKyAgICB7ICAgICA2NywxMH0sIHsgICAgIDM5LCA5fSwgeyAgICAgNzksMTB9LCB7ICAgICA0NywgOX0sIFwKKyAgICB7ICAgICA5NSwxMH0sIHsgICAgIDU1LDExfSwgeyAgICAgMzEsMTB9LCB7ICAgICA3OSwxMX0sIFwKKyAgICB7ICAgICA0NywxMH0sIHsgICAgIDk1LDEyfSwgeyAgICAgMzEsMTF9LCB7ICAgICA2MywxMH0sIFwKKyAgICB7ICAgIDEzNSwxMX0sIHsgICAgIDc5LDEwfSwgeyAgICAxNTksMTF9LCB7ICAgICA5NSwxMn0sIFwKKyAgICB7ICAgICA2MywxMX0sIHsgICAgMTI3LDEwfSwgeyAgICAyNTUsIDl9LCB7ICAgIDUxMSwxMX0sIFwKKyAgICB7ICAgIDE0MywxMH0sIHsgICAgMjg3LCA5fSwgeyAgICA1NzUsMTF9LCB7ICAgIDE1OSwxMn0sIFwKKyAgICB7ICAgICA5NSwxMX0sIHsgICAgMTkxLDEzfSwgeyAgICAgNjMsMTJ9LCB7ICAgIDEyNywxMX0sIFwKKyAgICB7ICAgIDI1NSwxMH0sIHsgICAgNTExLDExfSwgeyAgICAyNzEsMTB9LCB7ICAgIDU0MywxMX0sIFwKKyAgICB7ICAgIDI4NywxMH0sIHsgICAgNTc1LDExfSwgeyAgICAzMDMsMTJ9LCB7ICAgIDE1OSwxMX0sIFwKKyAgICB7ICAgIDMxOSwxMH0sIHsgICAgNjM5LDExfSwgeyAgICAzMzUsMTB9LCB7ICAgIDY3MSwgOX0sIFwKKyAgICB7ICAgMTM0MywxMX0sIHsgICAgMzUxLDEwfSwgeyAgICA3MDMsMTF9LCB7ICAgIDM2NywxMH0sIFwKKyAgICB7ICAgIDczNSwxMn0sIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTB9LCB7ICAgIDc2NywxMX0sIFwKKyAgICB7ICAgIDM5OSwxMH0sIHsgICAgNzk5LDExfSwgeyAgICA0MTUsMTB9LCB7ICAgIDgzMSwxMn0sIFwKKyAgICB7ICAgIDIyMywxMX0sIHsgICAgNDQ3LDEwfSwgeyAgICA4OTUsMTN9LCB7ICAgIDEyNywxMn0sIFwKKyAgICB7ICAgIDI1NSwxMX0sIHsgICAgNTExLDEwfSwgeyAgIDEwMjMsMTF9LCB7ICAgIDU0MywxMH0sIFwKKyAgICB7ICAgMTA4NywxMn0sIHsgICAgMjg3LDExfSwgeyAgICA1NzUsMTB9LCB7ICAgMTE1MSwxMX0sIFwKKyAgICB7ICAgIDYwNywxMH0sIHsgICAxMjE1LDEyfSwgeyAgICAzMTksMTF9LCB7ICAgIDYzOSwxMH0sIFwKKyAgICB7ICAgMTI3OSwxMX0sIHsgICAgNjcxLDEwfSwgeyAgIDEzNDMsMTJ9LCB7ICAgIDM1MSwxMX0sIFwKKyAgICB7ICAgIDcwMywxMH0sIHsgICAxNDA3LDExfSwgeyAgICA3MzUsMTB9LCB7ICAgMTQ3MSwxM30sIFwKKyAgICB7ICAgIDE5MSwxMn0sIHsgICAgMzgzLDExfSwgeyAgICA3NjcsMTB9LCB7ICAgMTUzNSwxMX0sIFwKKyAgICB7ICAgIDc5OSwxMn0sIHsgICAgNDE1LDExfSwgeyAgICA4MzEsMTB9LCB7ICAgMTY2MywxMn0sIFwKKyAgICB7ICAgIDQ0NywxMX0sIHsgICAgODk1LDE0fSwgeyAgICAxMjcsMTN9LCB7ICAgIDI1NSwxMn0sIFwKKyAgICB7ICAgIDUxMSwxMX0sIHsgICAxMDIzLDEyfSwgeyAgICA1NDMsMTF9LCB7ICAgMTA4NywxMn0sIFwKKyAgICB7ICAgIDU3NSwxMX0sIHsgICAxMTUxLDEyfSwgeyAgICA2MDcsMTF9LCB7ICAgMTIxNSwxM30sIFwKKyAgICB7ICAgIDMxOSwxMn0sIHsgICAgNjM5LDExfSwgeyAgIDEyNzksMTJ9LCB7ICAgIDY3MSwxMX0sIFwKKyAgICB7ICAgMTM0MywxMn0sIHsgICAgNzAzLDExfSwgeyAgIDE0MDcsMTJ9LCB7ICAgIDczNSwxMX0sIFwKKyAgICB7ICAgMTQ3MSwxM30sIHsgICAgMzgzLDEyfSwgeyAgICA3NjcsMTF9LCB7ICAgMTUzNSwxMn0sIFwKKyAgICB7ICAgIDc5OSwxMX0sIHsgICAxNTk5LDEyfSwgeyAgICA4MzEsMTF9LCB7ICAgMTY2MywxM30sIFwKKyAgICB7ICAgIDQ0NywxMn0sIHsgICAgODk1LDExfSwgeyAgIDE3OTEsMTJ9LCB7ICAgIDk1OSwxNH0sIFwKKyAgICB7ICAgIDI1NSwxM30sIHsgICAgNTExLDEyfSwgeyAgIDEwMjMsMTF9LCB7ICAgMjA0NywxMn0sIFwKKyAgICB7ICAgMTA4NywxMX0sIHsgICAyMTc1LDEzfSwgeyAgICA1NzUsMTJ9LCB7ICAgMTIxNSwxMX0sIFwKKyAgICB7ICAgMjQzMSwxM30sIHsgICAgNjM5LDEyfSwgeyAgIDEzNDMsMTN9LCB7ICAgIDcwMywxMn0sIFwKKyAgICB7ICAgMTQ3MSwxMX0sIHsgICAyOTQzLDE0fSwgeyAgICAzODMsMTN9LCB7ICAgIDc2NywxMn0sIFwKKyAgICB7ICAgMTU5OSwxM30sIHsgICAgODMxLDEyfSwgeyAgIDE3MjcsMTF9LCB7ICAgMzQ1NSwxM30sIFwKKyAgICB7ICAgIDg5NSwxMn0sIHsgICAxODU1LDEzfSwgeyAgICA5NTksMTV9LCB7ICAgIDI1NSwxNH0sIFwKKyAgICB7ICAgIDUxMSwxM30sIHsgICAxMDIzLDEyfSwgeyAgIDIwNDcsMTN9LCB7ICAgMTA4NywxMn0sIFwKKyAgICB7ICAgMjE3NSwxM30sIHsgICAxMjE1LDEyfSwgeyAgIDI0MzEsMTR9LCB7ICAgIDYzOSwxM30sIFwKKyAgICB7ICAgMTM0MywxMn0sIHsgICAyNjg3LDEzfSwgeyAgIDE0NzEsMTJ9LCB7ICAgMjk0MywxNH0sIFwKKyAgICB7ICAgIDc2NywxM30sIHsgICAxNTk5LDEyfSwgeyAgIDMxOTksMTN9LCB7ICAgMTcyNywxMn0sIFwKKyAgICB7ICAgMzQ1NSwxNH0sIHsgICAgODk1LDEzfSwgeyAgIDE4NTUsMTJ9LCB7ICAgMzcxMSwxM30sIFwKKyAgICB7ICAgMTkxOSwxNX0sIHsgICAgNTExLDE0fSwgeyAgIDEwMjMsMTN9LCB7ICAgMjE3NSwxNH0sIFwKKyAgICB7ICAgMTE1MSwxM30sIHsgICAyNDMxLDEyfSwgeyAgIDQ4NjMsMTR9LCB7ICAgMTI3OSwxM30sIFwKKyAgICB7ICAgMjY4NywxNH0sIHsgICAxNDA3LDEzfSwgeyAgIDI5NDMsMTV9LCB7ICAgIDc2NywxNH0sIFwKKyAgICB7ICAgMTUzNSwxM30sIHsgICAzMTk5LDE0fSwgeyAgIDE2NjMsMTN9LCB7ICAgMzQ1NSwxMn0sIFwKKyAgICB7ICAgNjkxMSwxNH0sIHsgICAxNzkxLDEzfSwgeyAgIDM1ODMsMTR9LCB7ICAgMTkxOSwxNn0sIFwKKyAgICB7ICAgIDUxMSwxNX0sIHsgICAxMDIzLDE0fSwgeyAgIDIwNDcsMTN9LCB7ICAgNDA5NSwxNH0sIFwKKyAgICB7ICAgMjE3NSwxM30sIHsgICA0NDc5LDEyfSwgeyAgIDg5NTksMTR9LCB7ICAgMjQzMSwxM30sIFwKKyAgICB7ICAgNDg2MywxNX0sIHsgICAxMjc5LDE0fSwgeyAgIDI5NDMsMTN9LCB7ICAgNTg4NywxMn0sIFwKKyAgICB7ICAxMTc3NSwxNX0sIHsgICAxNTM1LDE0fSwgeyAgIDM0NTUsMTN9LCB7ICAgNjkxMSwxNX0sIFwKKyAgICB7ICAgMTc5MSwxNH0sIHsgICAzODM5LDEzfSwgeyAgIDc2NzksMTR9LCB7ICAgMzk2NywxNn0sIFwKKyAgICB7ICAgMTAyMywxNX0sIHsgICAyMDQ3LDE0fSwgeyAgIDQ0NzksMTV9LCB7ICAgMjMwMywxNH0sIFwKKyAgICB7ICAgNDk5MSwxNX0sIHsgICAyNTU5LDE0fSwgeyAgIDUyNDcsMTV9LCB7ICAgMjgxNSwxNH0sIFwKKyAgICB7ICAgNTg4NywxM30sIHsgIDExNzc1LDE2fSwgeyAgIDE1MzUsMTV9LCB7ICAgMzA3MSwxNH0sIFwKKyAgICB7ICAgNjE0MywxNX0sIHsgICAzMzI3LDE0fSwgeyAgIDY5MTEsMTV9LCB7ICAgMzgzOSwxNH0sIFwKKyAgICB7ICAgNzY3OSwxN30sIHsgICAxMDIzLDE2fSwgeyAgIDIwNDcsMTV9LCB7ICAgNDA5NSwxNH0sIFwKKyAgICB7ICAgODE5MSwxNX0sIHsgICA0MzUxLDE0fSwgeyAgIDg5NTksMTV9LCB7ICAgNDg2MywxNH0sIFwKKyAgICB7ICAgOTcyNywxNn0sIHsgICAyNTU5LDE1fSwgeyAgIDU4ODcsMTR9LCB7ICAxMTc3NSwxNn0sIFwKKyAgICB7ICAgMzA3MSwxNX0sIHsgICA2OTExLDE2fSwgeyAgIDM1ODMsMTV9LCB7ICAgNzE2NywxNH0sIFwKKyAgICB7ICAxNDMzNSwxNX0sIHsgICA3Njc5LDE0fSwgeyAgMTUzNTksMTV9LCB7ICAgNzkzNSwxNH0sIFwKKyAgICB7ICAxNTg3MSwxN30sIHsgICAyMDQ3LDE2fSwgeyAgIDQwOTUsMTV9LCB7ICAgODk1OSwxNn0sIFwKKyAgICB7ICAgNDYwNywxNX0sIHsgICA5MjE1LDE0fSwgeyAgMTg0MzEsMTV9LCB7ICAgOTcyNywxNH0sIFwKKyAgICB7ICAxOTQ1NSwxNX0sIHsgICA5OTgzLDE0fSwgeyAgMTk5NjcsMTZ9LCB7ICAgNTExOSwxNX0sIFwKKyAgICB7ICAxMDIzOSwxNn0sIHsgICA1NjMxLDE1fSwgeyAgMTE3NzUsMTd9LCB7ICAgMzA3MSwxNn0sIFwKKyAgICB7ICAgNjY1NSwxNX0sIHsgIDEzMzExLDE2fSwgeyAgNjU1MzYsMTd9LCB7IDEzMTA3MiwxOH0sIFwKKyAgICB7IDI2MjE0NCwxOX0sIHsgNTI0Mjg4LDIwfSwgezEwNDg1NzYsMjF9LCB7MjA5NzE1MiwyMn0sIFwKKyAgICB7NDE5NDMwNCwyM30sIHs4Mzg4NjA4LDI0fSB9CisjZGVmaW5lIFNRUl9GRlRfVEFCTEUzX1NJWkUgMzAyCisjZGVmaW5lIFNRUl9GRlRfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA0MjI0CisKKyNkZWZpbmUgTVVMTE9fQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNVUxMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICA2OQorI2RlZmluZSBNVUxMT19NVUxfTl9USFJFU0hPTEQgICAgICAgICAgICAxMTI3OAorI2RlZmluZSBTUVJMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAxMgorI2RlZmluZSBTUVJMT19EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgICA4MgorI2RlZmluZSBTUVJMT19TUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgODIwNworCisjZGVmaW5lIERDX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDc2CisjZGVmaW5lIERDX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAgMjMyCisjZGVmaW5lIERDX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDc2CisjZGVmaW5lIERDX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAgMTA0CisKKyNkZWZpbmUgSU5WX01VTE1PRF9CTk0xX1RIUkVTSE9MRCAgICAgICAgICAgMzcKKyNkZWZpbmUgSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgICAyNzQKKyNkZWZpbmUgSU5WX0FQUFJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAyMzAKKworI2RlZmluZSBCSU5WX05FV1RPTl9USFJFU0hPTEQgICAgICAgICAgICAgIDM3MgorI2RlZmluZSBSRURDXzFfVE9fUkVEQ19OX1RIUkVTSE9MRCAgICAgICAgICA2OAorCisjZGVmaW5lIE1VX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICAxNDk5CisjZGVmaW5lIE1VX0RJVkFQUFJfUV9USFJFU0hPTEQgICAgICAgICAgICAxNzE4CisjZGVmaW5lIE1VUElfRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTA4CisjZGVmaW5lIE1VX0JESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAxNDcwCisjZGVmaW5lIE1VX0JESVZfUV9USFJFU0hPTEQgICAgICAgICAgICAgICAxNzg3CisKKyNkZWZpbmUgUE9XTV9TRUNfVEFCTEUgIDMsMjIsODEsNDk0CisKKyNkZWZpbmUgR0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgICAgMjAKKyNkZWZpbmUgU0VUX1NUUl9EQ19USFJFU0hPTEQgICAgICAgICAgICAgICA0ODYKKyNkZWZpbmUgU0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCAgICAgIDEyNjQKKworI2RlZmluZSBGQUNfRFNDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDE4NworI2RlZmluZSBGQUNfT0REX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisKKyNkZWZpbmUgTUFUUklYMjJfU1RSQVNTRU5fVEhSRVNIT0xEICAgICAgICAgMjMKKyNkZWZpbmUgSEdDRDJfRElWMV9NRVRIT0QgICAgICAgICAgICAgICAgICAgIDEgIC8qIDkuMjAlIGZhc3RlciB0aGFuIDMgKi8KKyNkZWZpbmUgSEdDRF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgICAxMDkKKyNkZWZpbmUgSEdDRF9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMDQKKyNkZWZpbmUgSEdDRF9SRURVQ0VfVEhSRVNIT0xEICAgICAgICAgICAgIDMwMTQKKyNkZWZpbmUgR0NEX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICA1NjYKKyNkZWZpbmUgR0NERVhUX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzODIKKyNkZWZpbmUgSkFDT0JJX0JBU0VfTUVUSE9EICAgICAgICAgICAgICAgICAgIDEgIC8qIDE1LjU1JSBmYXN0ZXIgdGhhbiAzICovCisKKy8qIFR1bmV1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCB0b29rIDI4MTI0MyBzZWNvbmRzICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC96ZW4vaGFtZGlzdC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC96ZW4vaGFtZGlzdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhkY2Y2MQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3plbi9oYW1kaXN0LmFzbQpAQCAtMCwwICsxLDM4IEBACitkbmwgIEFNRDY0IG1wbl9oYW1kaXN0IC0tIGhhbW1pbmcgZGlzdGFuY2UuCisKK2RubCAgQ29weXJpZ2h0IDIwMTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9oYW1kaXN0KQoraW5jbHVkZV9tcG4oYHg4Nl82NC9jb3JlaW5obS9oYW1kaXN0LmFzbScpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC96ZW4vbHNoaWZ0LmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3plbi9sc2hpZnQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkY2UzMTkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC96ZW4vbHNoaWZ0LmFzbQpAQCAtMCwwICsxLDM3IEBACitkbmwgIFg4Ni02NCBtcG5fbHNoaWZ0IG9wdGltaXNlZCBmb3IgQU1EIFplbi4KKworZG5sICBDb3B5cmlnaHQgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9sc2hpZnQpCitpbmNsdWRlX21wbihgeDg2XzY0L2Zhc3Rzc2UvbHNoaWZ0LW1vdmRxdTIuYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3plbi9sc2hpZnRjLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3plbi9sc2hpZnRjLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTJiMTk0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvemVuL2xzaGlmdGMuYXNtCkBAIC0wLDAgKzEsMzcgQEAKK2RubCAgWDg2LTY0IG1wbl9sc2hpZnRjIG9wdGltaXNlZCBmb3IgQU1EIFplbi4KKworZG5sICBDb3B5cmlnaHQgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9sc2hpZnRjKQoraW5jbHVkZV9tcG4oYHg4Nl82NC9mYXN0c3NlL2xzaGlmdGMtbW92ZHF1Mi5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvemVuL211bF8xLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3plbi9tdWxfMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEwODNhYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3plbi9tdWxfMS5hc20KQEAgLTAsMCArMSwxNjEgQEAKK2RubCAgQU1ENjQgbXBuX211bF8xIGZvciBDUFVzIHdpdGggbXVseC4KKworZG5sICBDb3B5cmlnaHQgMjAxMiwgMjAxMywgMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitDCSAgICAgY3ljbGVzL2xpbWIKK0MgQU1EIEs4LEs5CSAtCitDIEFNRCBLMTAJIC0KK0MgQU1EIGJkMQkgLQorQyBBTUQgYmQyCSAtCitDIEFNRCBiZDMJIC0KK0MgQU1EIGJkNAkgNC40CitDIEFNRCB6ZW4JIDIKK0MgQU1EIGJvYmNhdAkgLQorQyBBTUQgamFndWFyCSAtCitDIEludGVsIFA0CSAtCitDIEludGVsIFBOUgkgLQorQyBJbnRlbCBOSE0JIC0KK0MgSW50ZWwgU0JSCSAtCitDIEludGVsIElCUgkgLQorQyBJbnRlbCBIV0wJID8KK0MgSW50ZWwgQldMCSA/CitDIEludGVsIFNLTAkgPworQyBJbnRlbCBhdG9tCSAtCitDIEludGVsIFNMTSAgICAgIC0KK0MgVklBIG5hbm8JIC0KKworZGVmaW5lKGBycCcsICAgICAgYCVyZGknKSAgIEMgcmN4CitkZWZpbmUoYHVwJywgICAgICBgJXJzaScpICAgQyByZHgKK2RlZmluZShgbl9wYXJhbScsIGAlcmR4JykgICBDIHI4CitkZWZpbmUoYHYwX3BhcmFtJyxgJXJjeCcpICAgQyByOQorCitkZWZpbmUoYG4nLCAgICAgICBgJXJjeCcpCitkZWZpbmUoYHYwJywgICAgICBgJXJkeCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX211bF8xYykKKwlGVU5DX0VOVFJZKDQpCitJRkRPUyhgIG1vdgk1NiglcnNwKSwgJXI4CScpCisJam1wCUwoZW50KQorRVBJTE9HVUUoKQorCUFMSUdOKDE2KQorUFJPTE9HVUUobXBuX211bF8xKQorCUZVTkNfRU5UUlkoNCkKKwl4b3IJUjMyKCVyOCksIFIzMiglcjgpCUMgY2FycnktaW4gbGltYgorTChlbnQpOgltb3YJKHVwKSwgJXI5CisKKwlwdXNoCSVyYngKKwlwdXNoCSVyMTIKKwlwdXNoCSVyMTMKKworCWxlYQkodXAsbl9wYXJhbSw4KSwgdXAKKwlsZWEJLTMyKHJwLG5fcGFyYW0sOCksIHJwCisJbW92CVIzMihuX3BhcmFtKSwgUjMyKCVyYXgpCisJeGNoZwl2MF9wYXJhbSwgdjAJCUMgRklYTUU6IGlzIHRoaXMgaW5zbiBmYXN0PworCisJbmVnCW4KKworCWFuZAkkMywgUjgoJXJheCkKKwlqeglMKGIwKQorCWNtcAkkMiwgUjgoJXJheCkKKwlqeglMKGIyKQorCWpnCUwoYjMpCisKK0woYjEpOgltb3YJJXI4LCAlcjEyCisJbXVseCgJJXI5LCAlcmJ4LCAlcmF4KQorCXN1YgkkLTEsIG4KKwlqeglMKHdkMSkKKwkuYnl0ZQkweGM0LDB4NjIsMHhiMywweGY2LDB4MDQsMHhjZQkJQyBtdWx4ICh1cCxuLDgpLCAlcjksICVyOAorCS5ieXRlCTB4YzQsMHg2MiwweGEzLDB4ZjYsMHg1NCwweGNlLDB4MDgJQyBtdWx4IDgodXAsbiw4KSwgJXIxMSwgJXIxMAorCWFkZAklcjEyLCAlcmJ4CisJam1wCUwobG8xKQorCitMKGIzKToJbXVseCgJJXI5LCAlcjExLCAlcjEwKQorCS5ieXRlCTB4YzQsMHg2MiwweDkzLDB4ZjYsMHg2NCwweGNlLDB4MDgJQyBtdWx4IDgodXAsbiw4KSwgJXIxMywgJXIxMgorCS5ieXRlCTB4YzQsMHhlMiwweGUzLDB4ZjYsMHg0NCwweGNlLDB4MTAJQyBtdWx4IDE2KHVwLG4sOCksICVyYngsICVyYXgKKwlzdWIJJC0zLCBuCisJanoJTCh3ZDMpCisJYWRkCSVyOCwgJXIxMQorCWptcAlMKGxvMykKKworTChiMik6CW1vdgklcjgsICVyMTAJCUMgY2FycnktaW4gbGltYgorCW11bHgoCSVyOSwgJXIxMywgJXIxMikKKwkuYnl0ZQkweGM0LDB4ZTIsMHhlMywweGY2LDB4NDQsMHhjZSwweDA4CUMgbXVseCA4KHVwLG4sOCksICVyYngsICVyYXgKKwlzdWIJJC0yLCBuCisJanoJTCh3ZDIpCisJLmJ5dGUJMHhjNCwweDYyLDB4YjMsMHhmNiwweDA0LDB4Y2UJCUMgbXVseCAodXAsbiw4KSwgJXI5LCAlcjgKKwlhZGQJJXIxMCwgJXIxMworCWptcAlMKGxvMikKKworTChiMCk6CW1vdgklcjgsICVyYXgJCUMgY2FycnktaW4gbGltYgorCW11bHgoCSVyOSwgJXI5LCAlcjgpCisJLmJ5dGUJMHhjNCwweDYyLDB4YTMsMHhmNiwweDU0LDB4Y2UsMHgwOAlDIG11bHggOCh1cCxuLDgpLCAlcjExLCAlcjEwCisJLmJ5dGUJMHhjNCwweDYyLDB4OTMsMHhmNiwweDY0LDB4Y2UsMHgxMAlDIG11bHggMTYodXAsbiw4KSwgJXIxMywgJXIxMgorCWFkZAklcmF4LCAlcjkKKwlqbXAJTChsbzApCisKK0wodG9wKToJanJjeHoJTChlbmQpCisJYWRjCSVyOCwgJXIxMQorCW1vdgklcjksIChycCxuLDgpCitMKGxvMyk6CS5ieXRlCTB4YzQsMHg2MiwweGIzLDB4ZjYsMHgwNCwweGNlCQlDIG11bHggKHVwLG4sOCksICVyOSwgJXI4CisJYWRjCSVyMTAsICVyMTMKKwltb3YJJXIxMSwgOChycCxuLDgpCitMKGxvMik6CS5ieXRlCTB4YzQsMHg2MiwweGEzLDB4ZjYsMHg1NCwweGNlLDB4MDgJQyBtdWx4IDgodXAsbiw4KSwgJXIxMSwgJXIxMAorCWFkYwklcjEyLCAlcmJ4CisJbW92CSVyMTMsIDE2KHJwLG4sOCkKK0wobG8xKToJLmJ5dGUJMHhjNCwweDYyLDB4OTMsMHhmNiwweDY0LDB4Y2UsMHgxMAlDIG11bHggMTYodXAsbiw4KSwgJXIxMywgJXIxMgorCWFkYwklcmF4LCAlcjkKKwltb3YJJXJieCwgMjQocnAsbiw4KQorTChsbzApOgkuYnl0ZQkweGM0LDB4ZTIsMHhlMywweGY2LDB4NDQsMHhjZSwweDE4CUMgbXVseCAyNCh1cCxuLDgpLCAlcmJ4LCAlcmF4CisJbGVhCTQobiksIG4KKwlqbXAJTCh0b3ApCisKK0woZW5kKToJbW92CSVyOSwgKHJwKQorTCh3ZDMpOglhZGMJJXI4LCAlcjExCisJbW92CSVyMTEsIDgocnApCitMKHdkMik6CWFkYwklcjEwLCAlcjEzCisJbW92CSVyMTMsIDE2KHJwKQorTCh3ZDEpOglhZGMJJXIxMiwgJXJieAorCWFkYwkkMCwgJXJheAorCW1vdgklcmJ4LCAyNChycCkKKworCXBvcAklcjEzCisJcG9wCSVyMTIKKwlwb3AJJXJieAorCUZVTkNfRVhJVCgpCisJcmV0CitFUElMT0dVRSgpCitBU01fRU5EKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3plbi9tdWxfYmFzZWNhc2UuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvemVuL211bF9iYXNlY2FzZS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZmYTNiNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3plbi9tdWxfYmFzZWNhc2UuYXNtCkBAIC0wLDAgKzEsNDU1IEBACitkbmwgIEFNRDY0IG1wbl9tdWxfYmFzZWNhc2Ugb3B0aW1pc2VkIGZvciBBTUQgWmVuLgorCitkbmwgIENvcHlyaWdodCAyMDEyLCAyMDEzLCAyMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgVE9ETworQyAgKiBUcnkgMnggdW5yb2xsaW5nIGluc3RlYWQgb2YgY3VycmVudCA0eCwgYXQgbGVhc3QgZm9yIG11bF8xLiAgRWxzZSBjb25zaWRlcgorQyAgICBzaGFsbG93ZXIgc3cgcGlwZWxpbmluZyBvZiBtdWxfMS9hZGRtdWxfMSBsb29wcywgYWxsb3dpbmcgNCBvciA2IGluc3RlYWQKK0MgICAgb2YgOCBwcm9kdWN0IHJlZ2lzdGVycy4KK0MgICogU3BsaXQgdXAgbXVsXzEgaW50byA0IGxvb3BzIGluIG9yZGVyIHRvIGZhbGwgaW50byB0aGUgYWRkbXVsXzEgbG9vcHMKK0MgICAgd2l0aG91dCBicmFuY2ggdHJlZS4KK0MgICogSW1wcm92ZSB0aGUgb3ZlcmxhcHBlZCBzb2Z0d2FyZSBwaXBlbGluaW5nLiAgVGhlIG11bHggaW4gdGhlIG9zcCBibG9jayBub3cKK0MgICAgc3VmZmVycyBmcm9tIHdyaXRlL3JlYWQgY29uZmxpY3RzLCBpbiBwYXJ0aWN1bGFyIHRoZSAxIG1vZCA0IGNhc2UuICBBbHNvLAorQyAgICBtdWxfMSBjb3VsZCBvc3AgaW50byBhZGRtdWxfMS4KK0MgICogTGV0IHZuX3BhcmFtIGJlIHZuIHRvIHNhdmUgYSBjb3B5LgorQyAgKiBSZS1hbGxvY2F0ZSB0byBiZW5lZml0IG1vcmUgZnJvbSAzMi1iaXQgZW5jb2RpbmcuCitDICAqIFBvb3IgcGVyZm9ybWFuY2UgZm9yIGUuZy4gbiA9IDEyLDE2LgorCitkZWZpbmUoYHJwJywgICAgICAgYCVyZGknKQorZGVmaW5lKGB1cCcsICAgICAgIGAlcnNpJykKK2RlZmluZShgdW5fcGFyYW0nLCBgJXJkeCcpCitkZWZpbmUoYHZwX3BhcmFtJywgYCVyY3gnKQorZGVmaW5lKGB2bl9wYXJhbScsIGAlcjgnKQorCitkZWZpbmUoYHVuJywgICAgICAgYCVyMTQnKQorZGVmaW5lKGB2cCcsICAgICAgIGAlcmJwJykKK2RlZmluZShgdjAnLCAgICAgICBgJXJkeCcpCitkZWZpbmUoYG4nLCAgICAgICAgYCVyY3gnKQorZGVmaW5lKGB2bicsICAgICAgIGAlcjE1JykKKworQUJJX1NVUFBPUlQoRE9TNjQpCitBQklfU1VQUE9SVChTVEQ2NCkKKworQVNNX1NUQVJUKCkKKwlURVhUCisJQUxJR04oMzIpCitQUk9MT0dVRShtcG5fbXVsX2Jhc2VjYXNlKQorCUZVTkNfRU5UUlkoNCkKK0lGRE9TKGAJbW92CTU2KCVyc3ApLCAlcjhkCScpCisKKwljbXAJJDIsIHVuX3BhcmFtCisJamEJTChnZW4pCisJbW92CSh2cF9wYXJhbSksICVyZHgKKwltdWx4KAkodXApLCAlcmF4LCAlcjkpCUMgMCAxCisJamUJTChzMngpCisKK0woczExKToJbW92CSVyYXgsIChycCkKKwltb3YJJXI5LCA4KHJwKQorCUZVTkNfRVhJVCgpCisJcmV0CisKK0woczJ4KToJY21wCSQyLCB2bl9wYXJhbQorCW11bHgoCTgsKHVwKSwgJXI4LCAlcjEwKQlDIDEgMgorCWplCUwoczIyKQorCitMKHMyMSk6CWFkZAklcjgsICVyOQorCWFkYwkkMCwgJXIxMAorCW1vdgklcmF4LCAocnApCisJbW92CSVyOSwgOChycCkKKwltb3YJJXIxMCwgMTYocnApCisJRlVOQ19FWElUKCkKKwlyZXQKKworTChzMjIpOglhZGQJJXI4LCAlcjkJCUMgMQorCWFkYwkkMCwgJXIxMAkJQyAyCisJbW92CTgodnBfcGFyYW0pLCAlcmR4CisJbW92CSVyYXgsIChycCkKKwltdWx4KAkodXApLCAlcjgsICVyMTEpCUMgMSAyCisJbXVseCgJOCwodXApLCAlcmF4LCAlcmR4KQlDIDIgMworCWFkZAklcjExLCAlcmF4CQlDIDIKKwlhZGMJJDAsICVyZHgJCUMgMworCWFkZAklcjgsICVyOQkJQyAxCisJYWRjCSVyYXgsICVyMTAJCUMgMgorCWFkYwkkMCwgJXJkeAkJQyAzCisJbW92CSVyOSwgOChycCkKKwltb3YJJXIxMCwgMTYocnApCisJbW92CSVyZHgsIDI0KHJwKQorCUZVTkNfRVhJVCgpCisJcmV0CisKKworTChnZW4pOglwdXNoCSVyMTUKKwlwdXNoCSVyMTQKKwlwdXNoCSVyMTMKKwlwdXNoCSVyMTIKKwlwdXNoCSVyYnAKKwlwdXNoCSVyYngKKworCW1vdgl1bl9wYXJhbSwgdW4KKwltb3YJdnBfcGFyYW0sIHZwCisJbW92CXZuX3BhcmFtLCB2bgorCisJbW92CSh1cCksICVyOQorCW1vdgkodnApLCB2MAorCisJbGVhCSh1cCx1biw4KSwgdXAKKwlsZWEJLTMyKHJwLHVuLDgpLCBycAorCisJbmVnCXVuCisJbW92CXVuLCBuCisJdGVzdAkkMSwgUjgodW4pCisJanoJTChteDApCitMKG14MSk6CXRlc3QJJDIsIFI4KHVuKQorCWp6CUwobWIzKQorCitMKG1iMSk6CW11bHgoCSVyOSwgJXJieCwgJXJheCkKKwlpbmMJbgorCS5ieXRlCTB4YzQsMHgyMiwweGIzLDB4ZjYsMHg0NCwweGY2LDB4MDgJQyBtdWx4IDgodXAsdW4sOCksICVyOSwgJXI4CisJLmJ5dGUJMHhjNCwweDIyLDB4YTMsMHhmNiwweDU0LDB4ZjYsMHgxMAlDIG11bHggMTYodXAsdW4sOCksICVyMTEsICVyMTAKKwlqbXAJTChtbG8xKQorCitMKG1iMyk6CW11bHgoCSVyOSwgJXIxMSwgJXIxMCkKKwkuYnl0ZQkweGM0LDB4MjIsMHg5MywweGY2LDB4NjQsMHhmNiwweDA4CUMgbXVseCA4KHVwLHVuLDgpLCAlcjEzLCAlcjEyCisJLmJ5dGUJMHhjNCwweGEyLDB4ZTMsMHhmNiwweDQ0LDB4ZjYsMHgxMAlDIG11bHggMTYodXAsdW4sOCksICVyYngsICVyYXgKKwlzdWIJJC0zLCBuCisJanoJTChtd2QzKQorCXRlc3QJUjMyKCVyZHgpLCBSMzIoJXJkeCkKKwlqbXAJTChtbG8zKQorCitMKG14MCk6CXRlc3QJJDIsIFI4KHVuKQorCWp6CUwobWIwKQorCitMKG1iMik6CW11bHgoCSVyOSwgJXIxMywgJXIxMikKKwkuYnl0ZQkweGM0LDB4YTIsMHhlMywweGY2LDB4NDQsMHhmNiwweDA4CUMgbXVseCA4KHVwLHVuLDgpLCAlcmJ4LCAlcmF4CisJbGVhCTIobiksIG4KKwkuYnl0ZQkweGM0LDB4MjIsMHhiMywweGY2LDB4NDQsMHhmNiwweDEwCUMgbXVseCAxNih1cCx1biw4KSwgJXI5LCAlcjgKKwlqbXAJTChtbG8yKQorCitMKG1iMCk6CW11bHgoCSVyOSwgJXI5LCAlcjgpCisJLmJ5dGUJMHhjNCwweDIyLDB4YTMsMHhmNiwweDU0LDB4ZjYsMHgwOAlDIG11bHggOCh1cCx1biw4KSwgJXIxMSwgJXIxMAorCS5ieXRlCTB4YzQsMHgyMiwweDkzLDB4ZjYsMHg2NCwweGY2LDB4MTAJQyBtdWx4IDE2KHVwLHVuLDgpLCAlcjEzLCAlcjEyCisJam1wCUwobWxvMCkKKworTChtdG9wKTpqcmN4eglMKG1lbmQpCisJYWRjCSVyOCwgJXIxMQorCW1vdgklcjksIChycCxuLDgpCitMKG1sbzMpOi5ieXRlCTB4YzQsMHg2MiwweGIzLDB4ZjYsMHgwNCwweGNlCQlDIG11bHggKHVwLG4sOCksICVyOSwgJXI4CisJYWRjCSVyMTAsICVyMTMKKwltb3YJJXIxMSwgOChycCxuLDgpCitMKG1sbzIpOi5ieXRlCTB4YzQsMHg2MiwweGEzLDB4ZjYsMHg1NCwweGNlLDB4MDgJQyBtdWx4IDgodXAsbiw4KSwgJXIxMSwgJXIxMAorCWFkYwklcjEyLCAlcmJ4CisJbW92CSVyMTMsIDE2KHJwLG4sOCkKK0wobWxvMSk6LmJ5dGUJMHhjNCwweDYyLDB4OTMsMHhmNiwweDY0LDB4Y2UsMHgxMAlDIG11bHggMTYodXAsbiw4KSwgJXIxMywgJXIxMgorCWFkYwklcmF4LCAlcjkKKwltb3YJJXJieCwgMjQocnAsbiw4KQorTChtbG8wKTouYnl0ZQkweGM0LDB4ZTIsMHhlMywweGY2LDB4NDQsMHhjZSwweDE4CUMgbXVseCAyNCh1cCxuLDgpLCAlcmJ4LCAlcmF4CisJbGVhCTQobiksIG4KKwlqbXAJTChtdG9wKQorCitMKG1lbmQpOm1vdgklcjksIChycCkKKwlhZGMJJXI4LCAlcjExCitMKG13ZDMpOm1vdgklcjExLCA4KHJwKQorCWFkYwklcjEwLCAlcjEzCisJbW92CSVyMTMsIDE2KHJwKQorCWFkYwklcjEyLCAlcmJ4CisJYWRjCSQwLCAlcmF4CisJbW92CSVyYngsIDI0KHJwKQorCW1vdgklcmF4LCAzMihycCkKKwlhZGQJJDgsIHZwCisJZGVjCXZuCisJanoJTChlbmQpCisKK0MgVGhlIHJlc3Qgb2YgdGhlIGZpbGUgYXJlIDQgb3NwIGxvb3BzIGFyb3VuZCBhZGRtdWxfMQorCisJdGVzdAkkMSwgUjgodW4pCisJam56CUwoMHgxKQorCitMKDB4MCk6CXRlc3QJJDIsIFI4KHVuKQorCWpueglMKG9sb29wMl9lbnRyeSkKKworTChvbG9vcDBfZW50cnkpOgorCUMgaW5pdGlhbCBmZWVkLWluIGJsb2NrCisJbW92CSh2cCksICVyZHgKKwlhZGQJJDgsIHZwCisJbW92CXVuLCBuCisJYWRkCSQ4LCBycAorCS5ieXRlCTB4YzQsMHgyMiwweGIzLDB4ZjYsMHgwNCwweGY2CQlDIG11bHggKHVwLHVuLDgpLCAlcjksICVyOAorCS5ieXRlCTB4YzQsMHgyMiwweGEzLDB4ZjYsMHg1NCwweGY2LDB4MDgJQyBtdWx4IDgodXAsdW4sOCksICVyMTEsICVyMTAKKwkuYnl0ZQkweGM0LDB4MjIsMHg5MywweGY2LDB4NjQsMHhmNiwweDEwCUMgbXVseCAxNih1cCx1biw4KSwgJXIxMywgJXIxMgorCS5ieXRlCTB4YzQsMHhhMiwweGUzLDB4ZjYsMHg0NCwweGY2LDB4MTgJQyBtdWx4IDI0KHVwLHVuLDgpLCAlcmJ4LCAlcmF4CisJYWRkCSVyOCwgJXIxMQorCWptcAlMKGxvMCkKKworTChvbG9vcDApOgorCUMgb3ZlcmxhcHBlZCBzb2Z0d2FyZSBwaXBlbGluaW5nIGJsb2NrCisJbW92CSh2cCksICVyZHgJCQlDIG5ldworCWFkZAkkOCwgdnAKKwlhZGQJJXI5LCAocnApCQkJQyBwcmV2CisJLmJ5dGUJMHhjNCwweDIyLDB4YjMsMHhmNiwweDA0LDB4ZjYJCUMgbXVseCAoJXJzaSwlcjE0LDgpLCVyOSwlcjgKKwlhZGMJJXIxMSwgOChycCkJCQlDIHByZXYKKwkuYnl0ZQkweGM0LDB4MjIsMHhhMywweGY2LDB4NTQsMHhmNiwweDA4CUMgbXVseCAweDgoJXJzaSwlcjE0LDgpLCVyMTEsJXIxMAorCWFkYwklcjEzLCAxNihycCkJCQlDIHByZXYKKwkuYnl0ZQkweGM0LDB4MjIsMHg5MywweGY2LDB4NjQsMHhmNiwweDEwCUMgbXVseCAweDEwKCVyc2ksJXIxNCw4KSwlcjEzLCVyMTIKKwlhZGMJJXJieCwgMjQocnApCQkJQyBwcmV2CisJbW92CXVuLCBuCisJYWRjCSQwLCAlcmF4CQkJQyBwcmV2CisJbW92CSVyYXgsIDMyKHJwKQkJCUMgcHJldgorCWFkZAkkOCwgcnAKKwkuYnl0ZQkweGM0LDB4YTIsMHhlMywweGY2LDB4NDQsMHhmNiwweDE4CUMgbXVseCAweDE4KCVyc2ksJXIxNCw4KSwlcmJ4LCVyYXgKKwlhZGQJJXI4LCAlcjExCQkJQyBuZXcKKwlqbXAJTChsbzApCisKKwlBTElHTigxNikKK0wodHAwKToJYWRkCSVyOSwgKHJwLG4sOCkKKwkuYnl0ZQkweGM0LDB4NjIsMHhiMywweGY2LDB4MDQsMHhjZQkJQyBtdWx4ICh1cCxuLDgpLCAlcjksICVyOAorCWFkYwklcjExLCA4KHJwLG4sOCkKKwkuYnl0ZQkweGM0LDB4NjIsMHhhMywweGY2LDB4NTQsMHhjZSwweDA4CUMgbXVseCA4KHVwLG4sOCksICVyMTEsICVyMTAKKwlhZGMJJXIxMywgMTYocnAsbiw4KQorCS5ieXRlCTB4YzQsMHg2MiwweDkzLDB4ZjYsMHg2NCwweGNlLDB4MTAJQyBtdWx4IDE2KHVwLG4sOCksICVyMTMsICVyMTIKKwlhZGMJJXJieCwgMjQocnAsbiw4KQorCWFkYwklcmF4LCAlcjkKKwkuYnl0ZQkweGM0LDB4ZTIsMHhlMywweGY2LDB4NDQsMHhjZSwweDE4CUMgbXVseCAyNCh1cCxuLDgpLCAlcmJ4LCAlcmF4CisJYWRjCSVyOCwgJXIxMQorTChsbzApOglhZGMJJXIxMCwgJXIxMworCWFkYwklcjEyLCAlcmJ4CisJYWRjCSQwLCAlcmF4CisJYWRkCSQ0LCBuCisJam56CUwodHAwKQorCisJZGVjCXZuCisJam5lCUwob2xvb3AwKQorCisJam1wCUwoZmluYWxfd2luZF9kb3duKQorCitMKG9sb29wMl9lbnRyeSk6CisJbW92CSh2cCksICVyZHgKKwlhZGQJJDgsIHZwCisJbGVhCTIodW4pLCBuCisJYWRkCSQ4LCBycAorCS5ieXRlCTB4YzQsMHgyMiwweDkzLDB4ZjYsMHgyNCwweGY2CQlDIG11bHggKHVwLHVuLDgpLCAlcjEzLCAlcjEyCisJLmJ5dGUJMHhjNCwweGEyLDB4ZTMsMHhmNiwweDQ0LDB4ZjYsMHgwOAlDIG11bHggOCh1cCx1biw4KSwgJXJieCwgJXJheAorCWFkZAklcjEyLCAlcmJ4CisJYWRjCSQwLCAlcmF4CisJLmJ5dGUJMHhjNCwweDIyLDB4YjMsMHhmNiwweDQ0LDB4ZjYsMHgxMAlDIG11bHggMTYodXAsdW4sOCksICVyOSwgJXI4CisJLmJ5dGUJMHhjNCwweDYyLDB4YTMsMHhmNiwweDU0LDB4Y2UsMHgwOAlDIG11bHggOCh1cCxuLDgpLCAlcjExLCAlcjEwCisJYWRkCSVyMTMsIDE2KHJwLG4sOCkKKwlqbXAJTChsbzIpCisKK0wob2xvb3AyKToKKwltb3YJKHZwKSwgJXJkeAorCWFkZAkkOCwgdnAKKwlhZGQJJXI5LCAocnApCisJYWRjCSVyMTEsIDgocnApCisJYWRjCSVyMTMsIDE2KHJwKQorCS5ieXRlCTB4YzQsMHgyMiwweDkzLDB4ZjYsMHgyNCwweGY2CQlDIG11bHggKHVwLHVuLDgpLCAlcjEzLCAlcjEyCisJYWRjCSVyYngsIDI0KHJwKQorCWFkYwkkMCwgJXJheAorCW1vdgklcmF4LCAzMihycCkKKwkuYnl0ZQkweGM0LDB4YTIsMHhlMywweGY2LDB4NDQsMHhmNiwweDA4CUMgbXVseCA4KHVwLHVuLDgpLCAlcmJ4LCAlcmF4CisJbGVhCTIodW4pLCBuCisJYWRkCSQ4LCBycAorCS5ieXRlCTB4YzQsMHgyMiwweGIzLDB4ZjYsMHg0NCwweGY2LDB4MTAJQyBtdWx4IDE2KHVwLHVuLDgpLCAlcjksICVyOAorCWFkZAklcjEyLCAlcmJ4CisJYWRjCSQwLCAlcmF4CisJLmJ5dGUJMHhjNCwweDIyLDB4YTMsMHhmNiwweDU0LDB4ZjYsMHgxOAlDIG11bHggMHgxOCglcnNpLCVyMTQsOCksJXIxMSwlcjEwCisJYWRkCSVyMTMsIDE2KHJwLG4sOCkKKwlqbXAJTChsbzIpCisKKwlBTElHTigxNikKK0wodHAyKToJYWRkCSVyOSwgKHJwLG4sOCkKKwkuYnl0ZQkweGM0LDB4NjIsMHhiMywweGY2LDB4MDQsMHhjZQkJQyBtdWx4ICh1cCxuLDgpLCAlcjksICVyOAorCWFkYwklcjExLCA4KHJwLG4sOCkKKwkuYnl0ZQkweGM0LDB4NjIsMHhhMywweGY2LDB4NTQsMHhjZSwweDA4CUMgbXVseCA4KHVwLG4sOCksICVyMTEsICVyMTAKKwlhZGMJJXIxMywgMTYocnAsbiw4KQorTChsbzIpOgkuYnl0ZQkweGM0LDB4NjIsMHg5MywweGY2LDB4NjQsMHhjZSwweDEwCUMgbXVseCAxNih1cCxuLDgpLCAlcjEzLCAlcjEyCisJYWRjCSVyYngsIDI0KHJwLG4sOCkKKwlhZGMJJXJheCwgJXI5CisJLmJ5dGUJMHhjNCwweGUyLDB4ZTMsMHhmNiwweDQ0LDB4Y2UsMHgxOAlDIG11bHggMjQodXAsbiw4KSwgJXJieCwgJXJheAorCWFkYwklcjgsICVyMTEKKwlhZGMJJXIxMCwgJXIxMworCWFkYwklcjEyLCAlcmJ4CisJYWRjCSQwLCAlcmF4CisJYWRkCSQ0LCBuCisJam56CUwodHAyKQorCisJZGVjCXZuCisJam5lCUwob2xvb3AyKQorCisJam1wCUwoZmluYWxfd2luZF9kb3duKQorCitMKDB4MSk6CXRlc3QJJDIsIFI4KHVuKQorCWp6CUwob2xvb3AzX2VudHJ5KQorCitMKG9sb29wMV9lbnRyeSk6CisJbW92CSh2cCksICVyZHgKKwlhZGQJJDgsIHZwCisJbGVhCTEodW4pLCBuCisJYWRkCSQ4LCBycAorCS5ieXRlCTB4YzQsMHhhMiwweGUzLDB4ZjYsMHgwNCwweGY2CQlDIG11bHggKHVwLHVuLDgpLCAlcmJ4LCAlcmF4CisJLmJ5dGUJMHhjNCwweDIyLDB4YjMsMHhmNiwweDQ0LDB4ZjYsMHgwOAlDIG11bHggOCh1cCx1biw4KSwgJXI5LCAlcjgKKwkuYnl0ZQkweGM0LDB4MjIsMHhhMywweGY2LDB4NTQsMHhmNiwweDEwCUMgbXVseCAxNih1cCx1biw4KSwgJXIxMSwgJXIxMAorCS5ieXRlCTB4YzQsMHg2MiwweDkzLDB4ZjYsMHg2NCwweGNlLDB4MTAJQyBtdWx4IDE2KHVwLG4sOCksICVyMTMsICVyMTIKKwlhZGQJJXJieCwgMjQocnAsbiw4KQorCWptcAlMKGxvMSkKKworTChvbG9vcDEpOgorCW1vdgkodnApLCAlcmR4CisJYWRkCSQ4LCB2cAorCWFkZAklcjksIChycCkKKwkuYnl0ZQkweGM0LDB4MjIsMHhiMywweGY2LDB4NDQsMHhmNiwweDA4CUMgbXVseCA4KHVwLHVuLDgpLCAlcjksICVyOAorCWFkYwklcjExLCA4KHJwKQorCS5ieXRlCTB4YzQsMHgyMiwweGEzLDB4ZjYsMHg1NCwweGY2LDB4MTAJQyBtdWx4IDE2KHVwLHVuLDgpLCAlcjExLCAlcjEwCisJYWRjCSVyMTMsIDE2KHJwKQorCS5ieXRlCTB4YzQsMHgyMiwweDkzLDB4ZjYsMHg2NCwweGY2LDB4MTgJQyBtdWx4IDB4MTgoJXJzaSwlcjE0LDgpLCVyMTMsJXIxMgorCWFkYwklcmJ4LCAyNChycCkKKwlhZGMJJDAsICVyYXgKKwltb3YJJXJheCwgMzIocnApCisJLmJ5dGUJMHhjNCwweGEyLDB4ZTMsMHhmNiwweDA0LDB4ZjYJCUMgbXVseCAodXAsdW4sOCksICVyYngsICVyYXgKKwlsZWEJMSh1biksIG4KKwlhZGQJJDgsIHJwCisJYWRkCSVyYngsIDI0KHJwLG4sOCkKKwlqbXAJTChsbzEpCisKKwlBTElHTigxNikKK0wodHAxKToJYWRkCSVyOSwgKHJwLG4sOCkKKwkuYnl0ZQkweGM0LDB4NjIsMHhiMywweGY2LDB4MDQsMHhjZQkJQyBtdWx4ICh1cCxuLDgpLCAlcjksICVyOAorCWFkYwklcjExLCA4KHJwLG4sOCkKKwkuYnl0ZQkweGM0LDB4NjIsMHhhMywweGY2LDB4NTQsMHhjZSwweDA4CUMgbXVseCA4KHVwLG4sOCksICVyMTEsICVyMTAKKwlhZGMJJXIxMywgMTYocnAsbiw4KQorCS5ieXRlCTB4YzQsMHg2MiwweDkzLDB4ZjYsMHg2NCwweGNlLDB4MTAJQyBtdWx4IDE2KHVwLG4sOCksICVyMTMsICVyMTIKKwlhZGMJJXJieCwgMjQocnAsbiw4KQorTChsbzEpOglhZGMJJXJheCwgJXI5CisJLmJ5dGUJMHhjNCwweGUyLDB4ZTMsMHhmNiwweDQ0LDB4Y2UsMHgxOAlDIG11bHggMjQodXAsbiw4KSwgJXJieCwgJXJheAorCWFkYwklcjgsICVyMTEKKwlhZGMJJXIxMCwgJXIxMworCWFkYwklcjEyLCAlcmJ4CisJYWRjCSQwLCAlcmF4CisJYWRkCSQ0LCBuCisJam56CUwodHAxKQorCisJZGVjCXZuCisJam5lCUwob2xvb3AxKQorCisJam1wCUwoZmluYWxfd2luZF9kb3duKQorCitMKG9sb29wM19lbnRyeSk6CisJbW92CSh2cCksICVyZHgKKwlhZGQJJDgsIHZwCisJbGVhCTModW4pLCBuCisJYWRkCSQ4LCBycAorCS5ieXRlCTB4YzQsMHgyMiwweGEzLDB4ZjYsMHgxNCwweGY2CQlDIG11bHggKHVwLHVuLDgpLCAlcjExLCAlcjEwCisJLmJ5dGUJMHhjNCwweDIyLDB4OTMsMHhmNiwweDY0LDB4ZjYsMHgwOAlDIG11bHggOCh1cCx1biw4KSwgJXIxMywgJXIxMgorCS5ieXRlCTB4YzQsMHhhMiwweGUzLDB4ZjYsMHg0NCwweGY2LDB4MTAJQyBtdWx4IDE2KHVwLHVuLDgpLCAlcmJ4LCAlcmF4CisJYWRkCSVyMTAsICVyMTMKKwlhZGMJJXIxMiwgJXJieAorCWFkYwkkMCwgJXJheAorCXRlc3QJbiwgbgorCWp6CUwod2QzKQorCS5ieXRlCTB4YzQsMHg2MiwweGIzLDB4ZjYsMHgwNCwweGNlCQlDIG11bHggKHVwLG4sOCksICVyOSwgJXI4CisJYWRkCSVyMTEsIDgocnAsbiw4KQorCWptcAlMKGxvMykKKworTChvbG9vcDMpOgorCW1vdgkodnApLCAlcmR4CisJYWRkCSQ4LCB2cAorCWFkZAklcjksIChycCkKKwlhZGMJJXIxMSwgOChycCkKKwkuYnl0ZQkweGM0LDB4MjIsMHhhMywweGY2LDB4MTQsMHhmNgkJQyBtdWx4ICh1cCx1biw4KSwgJXIxMSwgJXIxMAorCWFkYwklcjEzLCAxNihycCkKKwkuYnl0ZQkweGM0LDB4MjIsMHg5MywweGY2LDB4NjQsMHhmNiwweDA4CUMgbXVseCA4KHVwLHVuLDgpLCAlcjEzLCAlcjEyCisJYWRjCSVyYngsIDI0KHJwKQorCWFkYwkkMCwgJXJheAorCW1vdgklcmF4LCAzMihycCkKKwkuYnl0ZQkweGM0LDB4YTIsMHhlMywweGY2LDB4NDQsMHhmNiwweDEwCUMgbXVseCAxNih1cCx1biw4KSwgJXJieCwgJXJheAorCWxlYQkzKHVuKSwgbgorCWFkZAkkOCwgcnAKKwlhZGQJJXIxMCwgJXIxMworCS5ieXRlCTB4YzQsMHg2MiwweGIzLDB4ZjYsMHgwNCwweGNlCQlDIG11bHggKHVwLG4sOCksICVyOSwgJXI4CisJYWRjCSVyMTIsICVyYngKKwlhZGMJJDAsICVyYXgKKwlhZGQJJXIxMSwgOChycCxuLDgpCisJam1wCUwobG8zKQorCisJQUxJR04oMTYpCitMKHRwMyk6CWFkZAklcjksIChycCxuLDgpCisJLmJ5dGUJMHhjNCwweDYyLDB4YjMsMHhmNiwweDA0LDB4Y2UJCUMgbXVseCAodXAsbiw4KSwgJXI5LCAlcjgKKwlhZGMJJXIxMSwgOChycCxuLDgpCitMKGxvMyk6CS5ieXRlCTB4YzQsMHg2MiwweGEzLDB4ZjYsMHg1NCwweGNlLDB4MDgJQyBtdWx4IDgodXAsbiw4KSwgJXIxMSwgJXIxMAorCWFkYwklcjEzLCAxNihycCxuLDgpCisJLmJ5dGUJMHhjNCwweDYyLDB4OTMsMHhmNiwweDY0LDB4Y2UsMHgxMAlDIG11bHggMTYodXAsbiw4KSwgJXIxMywgJXIxMgorCWFkYwklcmJ4LCAyNChycCxuLDgpCisJYWRjCSVyYXgsICVyOQorCS5ieXRlCTB4YzQsMHhlMiwweGUzLDB4ZjYsMHg0NCwweGNlLDB4MTgJQyBtdWx4IDI0KHVwLG4sOCksICVyYngsICVyYXgKKwlhZGMJJXI4LCAlcjExCisJYWRjCSVyMTAsICVyMTMKKwlhZGMJJXIxMiwgJXJieAorCWFkYwkkMCwgJXJheAorCWFkZAkkNCwgbgorCWpueglMKHRwMykKKworCWRlYwl2bgorCWpuZQlMKG9sb29wMykKKworTChmaW5hbF93aW5kX2Rvd24pOgorCWFkZAklcjksIChycCkKKwlhZGMJJXIxMSwgOChycCkKKwlhZGMJJXIxMywgMTYocnApCisJYWRjCSVyYngsIDI0KHJwKQorCWFkYwkkMCwgJXJheAorCW1vdgklcmF4LCAzMihycCkKKworTChlbmQpOglwb3AJJXJieAorCXBvcAklcmJwCisJcG9wCSVyMTIKKwlwb3AJJXIxMworCXBvcAklcjE0CisJcG9wCSVyMTUKKwlGVU5DX0VYSVQoKQorCXJldAorCitMKDMpOgltb3YJKHZwKSwgJXJkeAorCWFkZAkkOCwgdnAKKwlhZGQJJDgsIHJwCisJLmJ5dGUJMHhjNCwweDIyLDB4YTMsMHhmNiwweDE0LDB4ZjYJCUMgbXVseCAodXAsdW4sOCksICVyMTEsICVyMTAKKwkuYnl0ZQkweGM0LDB4MjIsMHg5MywweGY2LDB4NjQsMHhmNiwweDA4CUMgbXVseCA4KHVwLHVuLDgpLCAlcjEzLCAlcjEyCisJLmJ5dGUJMHhjNCwweGEyLDB4ZTMsMHhmNiwweDQ0LDB4ZjYsMHgxMAlDIG11bHggMTYodXAsdW4sOCksICVyYngsICVyYXgKKwlhZGQJJXIxMCwgJXIxMworCWFkYwklcjEyLCAlcmJ4CisJYWRjCSQwLCAlcmF4CitMKHdkMyk6CWFkYwklcjExLCA4KHJwKQorCWFkYwklcjEzLCAxNihycCkKKwlhZGMJJXJieCwgMjQocnApCisJYWRjCSQwLCAlcmF4CisJbW92CSVyYXgsIDMyKHJwKQorCWRlYwl2bgorCWpuZQlMKDMpCisJam1wCUwoZW5kKQorRVBJTE9HVUUoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvemVuL211bGxvX2Jhc2VjYXNlLmFzbSBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3plbi9tdWxsb19iYXNlY2FzZS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFlNzI5YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3plbi9tdWxsb19iYXNlY2FzZS5hc20KQEAgLTAsMCArMSwyOTkgQEAKK2RubCAgWDY0LTY0IG1wbl9tdWxsb19iYXNlY2FzZSBvcHRpbWlzZWQgZm9yIEFNRCBaZW4uCisKK2RubCAgQ29udHJpYnV0ZWQgdG8gdGhlIEdOVSBwcm9qZWN0IGJ5IFRvcmJqb3JuIEdyYW5sdW5kLgorCitkbmwgIENvcHlyaWdodCAyMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgVGhlIGlubmVyIGxvb3BzIG9mIHRoaXMgY29kZSBhcmUgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGEgY29kZSBnZW5lcmF0aW9uIGFuZAorQyBvcHRpbWlzYXRpb24gdG9vbCBzdWl0ZSB3cml0dGVuIGJ5IERhdmlkIEhhcnZleSBhbmQgVG9yYmpvcm4gR3Jhbmx1bmQuCisKK2RlZmluZShgcnAnLAkgICBgJXJkaScpCitkZWZpbmUoYHVwJywJICAgYCVyc2knKQorZGVmaW5lKGB2cF9wYXJhbScsIGAlcmR4JykKK2RlZmluZShgbicsCSAgIGAlcmN4JykKKworZGVmaW5lKGB2cCcsCWAlcjExJykKK2RlZmluZShgbm4nLCAgICBgJXJicCcpCisKK0MgVE9ETworQyAgKiBSZWFycmFuZ2UgZmVlZC1pbiBqdW1wcyBmb3Igc2hvcnQgYnJhbmNoIGZvcm1zLgorQyAgKiBSb2xsIG91dCB0aGUgaGVhdnkgYXJ0aWxsZXJ5IGFuZCA0LXdheSB1bnJvbGwgb3V0ZXIgbG9vcC4gIFNpbmNlIGZlZWQtaW4KK0MgICAgY29kZSBpbXBsb2RlcywgdGhlIGJsb3ctdXAgd2lsbCBub3QgYmUgbW9yZSB0aGFuIHBlcmhhcHMgMi41eC4KK0MgICogTWljcm8tb3B0aW1pc2UgY3JpdGljYWwgbGVhZC1pbiBjb2RlIGJsb2Nrcy4KK0MgICogQ2xlYW4gdXAgcmVnaXN0ZXIgdXNlLCBlLmcuIHIxNSB2cyB2cCwgZGlzdXNlIG9mIG5uLCBldGMuCitDICAqIFdyaXRlIG4gPCA0IGNvZGUgc3BlY2lmaWNhbGx5IGZvciBaZW4gKGN1cnJlbnQgY29kZSBpcyBmb3IgSGFzd2VsbCkuCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK0FTTV9TVEFSVCgpCisJVEVYVAorCUFMSUdOKDMyKQorUFJPTE9HVUUobXBuX211bGxvX2Jhc2VjYXNlKQorCUZVTkNfRU5UUlkoNCkKKwljbXAJJDQsIFIzMihuKQorCWphZQlMKGJpZykKKworCW1vdgl2cF9wYXJhbSwgdnAKKwltb3YJKHVwKSwgJXJkeAorCisJY21wCSQyLCBSMzIobikKKwlqYWUJTChndDEpCitMKG4xKToJaW11bAkodnApLCAlcmR4CisJbW92CSVyZHgsIChycCkKKwlGVU5DX0VYSVQoKQorCXJldAorTChndDEpOglqYQlMKGd0MikKK0wobjIpOgltb3YJKHZwKSwgJXI5CisJbXVseCgJJXI5LCAlcmF4LCAlcmR4KQorCW1vdgklcmF4LCAocnApCisJbW92CTgodXApLCAlcmF4CisJaW11bAklcjksICVyYXgKKwlhZGQJJXJheCwgJXJkeAorCW1vdgk4KHZwKSwgJXI5CisJbW92CSh1cCksICVyY3gKKwlpbXVsCSVyOSwgJXJjeAorCWFkZAklcmN4LCAlcmR4CisJbW92CSVyZHgsIDgocnApCisJRlVOQ19FWElUKCkKKwlyZXQKK0woZ3QyKToKK0wobjMpOgltb3YJKHZwKSwgJXI5CisJbXVseCgJJXI5LCAlcmF4LCAlcjEwKQlDIHUwIHggdjAKKwltb3YJJXJheCwgKHJwKQorCW1vdgk4KHVwKSwgJXJkeAorCW11bHgoCSVyOSwgJXJheCwgJXJkeCkJQyB1MSB4IHYwCisJaW11bAkxNih1cCksICVyOQkJQyB1MiB4IHYwCisJYWRkCSVyYXgsICVyMTAKKwlhZGMJJXJkeCwgJXI5CisJbW92CTgodnApLCAlcjgKKwltb3YJKHVwKSwgJXJkeAorCW11bHgoCSVyOCwgJXJheCwgJXJkeCkJQyB1MCB4IHYxCisJYWRkCSVyYXgsICVyMTAKKwlhZGMJJXJkeCwgJXI5CisJaW11bAk4KHVwKSwgJXI4CQlDIHUxIHggdjEKKwlhZGQJJXI4LCAlcjkKKwltb3YJJXIxMCwgOChycCkKKwltb3YJMTYodnApLCAlcjEwCisJbW92CSh1cCksICVyYXgKKwlpbXVsCSVyYXgsICVyMTAJCUMgdTAgeCB2MgorCWFkZAklcjEwLCAlcjkKKwltb3YJJXI5LCAxNihycCkKKwlGVU5DX0VYSVQoKQorCXJldAorCisJQUxJR04oMTYpCitMKGJpZyk6CXB1c2gJJXIxNQorCXB1c2gJJXIxNAorCXB1c2gJJXIxMworCXB1c2gJJXIxMgorCXB1c2gJJXJicAorCXB1c2gJJXJieAorCisJbW92CSh1cCksICVyOQorCWxlYQktOCh1cCxuLDgpLCB1cAorCWxlYQktNDAocnAsbiw4KSwgcnAKKworCW1vdgkkNCwgUjMyKCVyMTQpCisJc3ViCW4sICVyMTQKKwltb3YJLTgodnBfcGFyYW0sbiw4KSwgJXJicAorCWltdWwJJXI5LCAlcmJwCisJbGVhCTgodnBfcGFyYW0pLCAlcjE1CisJbW92CSh2cF9wYXJhbSksICVyZHgKKworCXRlc3QJJDEsIFI4KCVyMTQpCisJam56CUwobXgwKQorTChteDEpOgl0ZXN0CSQyLCBSOCglcjE0KQorCWp6CUwobWIzKQorCitMKG1iMSk6CW11bHgoCSVyOSwgJXJieCwgJXJheCkKKwlsZWEJLTIoJXIxNCksIG4KKwkuYnl0ZQkweGM0LDB4MjIsMHhiMywweGY2LDB4NDQsMHhmNiwweGYwCUMgbXVseCAtMHgxMCglcnNpLCVyMTQsOCksJXI5LCVyOAorCS5ieXRlCTB4YzQsMHgyMiwweGEzLDB4ZjYsMHg1NCwweGY2LDB4ZjgJQyBtdWx4IC0weDgoJXJzaSwlcjE0LDgpLCVyMTEsJXIxMAorCWptcAlMKG1sbzEpCisKK0wobWIzKToJbXVseCgJJXI5LCAlcjExLCAlcjEwKQorCS5ieXRlCTB4YzQsMHgyMiwweDkzLDB4ZjYsMHg2NCwweGY2LDB4ZjAJQyBtdWx4IC0weDEwKCVyc2ksJXIxNCw4KSwlcjEzLCVyMTIKKwkuYnl0ZQkweGM0LDB4YTIsMHhlMywweGY2LDB4NDQsMHhmNiwweGY4CUMgbXVseCAtMHg4KCVyc2ksJXIxNCw4KSwlcmJ4LCVyYXgKKwlsZWEJKCVyMTQpLCBuCisJanJjeHoJTCh4KQorCWptcAlMKG1sbzMpCitMKHgpOglqbXAJTChtY29yKQorCitMKG1iMik6CW11bHgoCSVyOSwgJXIxMywgJXIxMikKKwkuYnl0ZQkweGM0LDB4YTIsMHhlMywweGY2LDB4NDQsMHhmNiwweGYwCUMgbXVseCAtMHgxMCglcnNpLCVyMTQsOCksJXJieCwlcmF4CisJbGVhCS0xKCVyMTQpLCBuCisJLmJ5dGUJMHhjNCwweDIyLDB4YjMsMHhmNiwweDQ0LDB4ZjYsMHhmOAlDIG11bHggLTB4OCglcnNpLCVyMTQsOCksJXI5LCVyOAorCWptcAlMKG1sbzIpCisKK0wobXgwKToJdGVzdAkkMiwgUjgoJXIxNCkKKwlqeglMKG1iMikKKworTChtYjApOgltdWx4KAklcjksICVyOSwgJXI4KQorCS5ieXRlCTB4YzQsMHgyMiwweGEzLDB4ZjYsMHg1NCwweGY2LDB4ZjAJQyBtdWx4IC0weDEwKCVyc2ksJXIxNCw4KSwlcjExLCVyMTAKKwkuYnl0ZQkweGM0LDB4MjIsMHg5MywweGY2LDB4NjQsMHhmNiwweGY4CUMgbXVseCAtMHg4KCVyc2ksJXIxNCw4KSwlcjEzLCVyMTIKKwlsZWEJLTMoJXIxNCksIG4KKwlqbXAJTChtbG8wKQorCisJQUxJR04oMTYpCitMKG10b3ApOmpyY3h6CUwobWVuZCkKKwlhZGMJJXI4LCAlcjExCisJbW92CSVyOSwgKHJwLG4sOCkKK0wobWxvMyk6LmJ5dGUJMHhjNCwweDYyLDB4YjMsMHhmNiwweDA0LDB4Y2UJCUMgbXVseCAodXAsbiw4KSwgJXI5LCAlcjgKKwlhZGMJJXIxMCwgJXIxMworCW1vdgklcjExLCA4KHJwLG4sOCkKK0wobWxvMik6LmJ5dGUJMHhjNCwweDYyLDB4YTMsMHhmNiwweDU0LDB4Y2UsMHgwOAlDIG11bHggOCh1cCxuLDgpLCAlcjExLCAlcjEwCisJYWRjCSVyMTIsICVyYngKKwltb3YJJXIxMywgMTYocnAsbiw4KQorTChtbG8xKTouYnl0ZQkweGM0LDB4NjIsMHg5MywweGY2LDB4NjQsMHhjZSwweDEwCUMgbXVseCAxNih1cCxuLDgpLCAlcjEzLCAlcjEyCisJYWRjCSVyYXgsICVyOQorCW1vdgklcmJ4LCAyNChycCxuLDgpCitMKG1sbzApOi5ieXRlCTB4YzQsMHhlMiwweGUzLDB4ZjYsMHg0NCwweGNlLDB4MTgJQyBtdWx4IDI0KHVwLG4sOCksICVyYngsICVyYXgKKwlsZWEJNChuKSwgbgorCWptcAlMKG10b3ApCisKK0wobWVuZCk6bW92CSVyOSwgKHJwKQorCWFkYwklcjgsICVyMTEKKwltb3YJJXIxMSwgOChycCkKKwlhZGMJJXIxMCwgJXIxMworCW1vdgklcjEzLCAxNihycCkKKwlhZGMJJXIxMiwgJXJieAorCW1vdgklcmJ4LCAyNChycCkKKworTChvdXRlcik6CisJbXVseCgJKHVwKSwgJXIxMCwgJXI4KQlDIEZJWE1FIHI4IHVudXNlZCAodXNlIGltdWw/KQorCWFkYwklcmF4LCAlcmJwCisJYWRkCSVyMTAsICVyYnAKKwltb3YJKCVyMTUpLCAlcmR4CisJYWRkCSQ4LCAlcjE1CisJbW92CS0yNCh1cCwlcjE0LDgpLCAlcjgKKwlsZWEJLTgodXApLCB1cAorCisJdGVzdAkkMSwgUjgoJXIxNCkKKwlqeglMKHgwKQorTCh4MSk6CXRlc3QJJDIsIFI4KCVyMTQpCisJam56CUwoYjMpCisKK0woYjEpOgltdWx4KAklcjgsICVyYngsICVyYXgpCisJbGVhCS0xKCVyMTQpLCBuCisJLmJ5dGUJMHhjNCwweDYyLDB4YjMsMHhmNiwweDA0LDB4Y2UJCUMgbXVseCAoJXJzaSwlcmN4LDgpLCVyOSwlcjgKKwkuYnl0ZQkweGM0LDB4NjIsMHhhMywweGY2LDB4NTQsMHhjZSwweDA4CUMgbXVseCAweDgoJXJzaSwlcmN4LDgpLCVyMTEsJXIxMAorCWptcAlMKGxvMSkKKworTCh4MCk6CXRlc3QJJDIsIFI4KCVyMTQpCisJanoJTChiMikKKworTChiMCk6CW11bHgoCSVyOCwgJXI5LCAlcjgpCisJbGVhCS0yKCVyMTQpLCBuCisJLmJ5dGUJMHhjNCwweDIyLDB4YTMsMHhmNiwweDU0LDB4ZjYsMHhmOAlDIG11bHggLTB4OCglcnNpLCVyMTQsOCksJXIxMSwlcjEwCisJLmJ5dGUJMHhjNCwweDIyLDB4OTMsMHhmNiwweDI0LDB4ZjYJCUMgbXVseCAoJXJzaSwlcjE0LDgpLCVyMTMsJXIxMgorCWptcAlMKGxvMCkKKworTChiMyk6CW11bHgoCSVyOCwgJXIxMSwgJXIxMCkKKwlsZWEJMSglcjE0KSwgbgorCS5ieXRlCTB4YzQsMHgyMiwweDkzLDB4ZjYsMHg2NCwweGY2LDB4ZjgJQyBtdWx4IC0weDgoJXJzaSwlcjE0LDgpLCVyMTMsJXIxMgorCS5ieXRlCTB4YzQsMHhhMiwweGUzLDB4ZjYsMHgwNCwweGY2CQlDIG11bHggKCVyc2ksJXIxNCw4KSwlcmJ4LCVyYXgKKwlhZGQJJXIxMCwgJXIxMworCWFkYwklcjEyLCAlcmJ4CisJYWRjCSQwLCAlcmF4CisJanJjeHoJTChjb3IpCisJam1wCUwobG8zKQorCitMKGNvcik6CWFkZAk4KHJwKSwgJXIxMQorCW1vdgkxNihycCksICVyMTAKKwltb3YJMjQocnApLCAlcjEyCitMKG1jb3IpOm1vdgklcjExLCA4KHJwKQorCWFkYwklcjEwLCAlcjEzCisJYWRjCSVyMTIsICVyYngKKwltdWx4KAkodXApLCAlcjEwLCAlcjgpCUMgRklYTUUgcjggdW51c2VkICh1c2UgaW11bD8pCisJYWRjCSVyYXgsICVyYnAKKwlhZGQJJXIxMCwgJXJicAorCW1vdgkoJXIxNSksICVyZHgKKwltb3YJLTI0KHVwKSwgJXI4CisJbXVseCgJJXI4LCAlcjksICVyMTIpCisJbXVseCgJLTE2LCh1cCksICVyMTQsICVyYXgpCisJYWRkCSVyMTIsICVyMTQKKwlhZGMJJDAsICVyYXgKKwlhZGMJJXI5LCAlcjEzCisJbW92CSVyMTMsIDE2KHJwKQorCWFkYwklcjE0LCAlcmJ4CisJbXVseCgJLTgsKHVwKSwgJXIxMCwgJXI4KQlDIEZJWE1FIHI4IHVudXNlZCAodXNlIGltdWw/KQorCWFkYwklcmF4LCAlcmJwCisJYWRkCSVyMTAsICVyYnAKKwltb3YJOCglcjE1KSwgJXJkeAorCW11bHgoCS0yNCwodXApLCAlcjE0LCAlcmF4KQorCWFkZAklcjE0LCAlcmJ4CisJbW92CSVyYngsIDI0KHJwKQorCW11bHgoCS0xNiwodXApLCAlcjEwLCAlcjgpCUMgRklYTUUgcjggdW51c2VkICh1c2UgaW11bD8pCisJYWRjCSVyYXgsICVyYnAKKwlhZGQJJXIxMCwgJXJicAorCW1vdgklcmJwLCAzMihycCkKKwlwb3AJJXJieAorCXBvcAklcmJwCisJcG9wCSVyMTIKKwlwb3AJJXIxMworCXBvcAklcjE0CisJcG9wCSVyMTUKKwlGVU5DX0VYSVQoKQorCXJldAorCitMKGIyKToJbXVseCgJJXI4LCAlcjEzLCAlcjEyKQorCWxlYQkoJXIxNCksIG4KKwkuYnl0ZQkweGM0LDB4YTIsMHhlMywweGY2LDB4NDQsMHhmNiwweGY4CUMgbXVseCAtMHg4KCVyc2ksJXIxNCw4KSwlcmJ4LCVyYXgKKwlhZGQJJXIxMiwgJXJieAorCWFkYwkkMCwgJXJheAorCS5ieXRlCTB4YzQsMHgyMiwweGIzLDB4ZjYsMHgwNCwweGY2CQlDIG11bHggKCVyc2ksJXIxNCw4KSwlcjksJXI4CisJam1wCUwobG8yKQorCisJQUxJR04oMTYpCitMKHRvcCk6CWFkZAklcjksIChycCxuLDgpCitMKGxvMyk6CS5ieXRlCTB4YzQsMHg2MiwweGIzLDB4ZjYsMHgwNCwweGNlCQlDIG11bHggKHVwLG4sOCksICVyOSwgJXI4CisJYWRjCSVyMTEsIDgocnAsbiw4KQorTChsbzIpOgkuYnl0ZQkweGM0LDB4NjIsMHhhMywweGY2LDB4NTQsMHhjZSwweDA4CUMgbXVseCA4KHVwLG4sOCksICVyMTEsICVyMTAKKwlhZGMJJXIxMywgMTYocnAsbiw4KQorTChsbzEpOgkuYnl0ZQkweGM0LDB4NjIsMHg5MywweGY2LDB4NjQsMHhjZSwweDEwCUMgbXVseCAxNih1cCxuLDgpLCAlcjEzLCAlcjEyCisJYWRjCSVyYngsIDI0KHJwLG4sOCkKKwlhZGMJJXJheCwgJXI5CitMKGxvMCk6CS5ieXRlCTB4YzQsMHhlMiwweGUzLDB4ZjYsMHg0NCwweGNlLDB4MTgJQyBtdWx4IDI0KHVwLG4sOCksICVyYngsICVyYXgKKwlhZGMJJXI4LCAlcjExCisJYWRjCSVyMTAsICVyMTMKKwlhZGMJJXIxMiwgJXJieAorCWFkYwkkMCwgJXJheAorCWFkZAkkNCwgbgorCWpzCUwodG9wKQorCisJYWRkCSVyOSwgKHJwKQorCWFkYwklcjExLCA4KHJwKQorCWFkYwklcjEzLCAxNihycCkKKwlhZGMJJXJieCwgMjQocnApCisJaW5jCSVyMTQKKwlqbXAJTChvdXRlcikKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3plbi9wb3Bjb3VudC5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC96ZW4vcG9wY291bnQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMTYxM2IKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC96ZW4vcG9wY291bnQuYXNtCkBAIC0wLDAgKzEsMzggQEAKK2RubCAgQU1ENjQgbXBuX3BvcGNvdW50IC0tIHBvcHVsYXRpb24gY291bnQuCisKK2RubCAgQ29weXJpZ2h0IDIwMTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK2RubCAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBNUCBMaWJyYXJ5LgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitkbmwgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXI6CitkbmwKK2RubCAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitkbmwgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorZG5sICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvcgorZG5sCitkbmwgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitkbmwgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorZG5sICAgICAgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorZG5sCitkbmwgIFRoZSBHTlUgTVAgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK2RubCAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgIGZvciBtb3JlIGRldGFpbHMuCitkbmwKK2RubCAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZQorZG5sICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitkbmwgIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKworCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitNVUxGVU5DX1BST0xPR1VFKG1wbl9wb3Bjb3VudCkKK2luY2x1ZGVfbXBuKGB4ODZfNjQvY29yZWluaG0vcG9wY291bnQuYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3plbi9yc2hpZnQuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvemVuL3JzaGlmdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE5Njg3MAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3plbi9yc2hpZnQuYXNtCkBAIC0wLDAgKzEsMzcgQEAKK2RubCAgWDg2LTY0IG1wbl9yc2hpZnQgb3B0aW1pc2VkIGZvciBBTUQgWmVuLgorCitkbmwgIENvcHlyaWdodCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX3JzaGlmdCkKK2luY2x1ZGVfbXBuKGB4ODZfNjQvZmFzdHNzZS9yc2hpZnQtbW92ZHF1Mi5hc20nKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvemVuL3NicGkxX2JkaXZfci5hc20gYi90aGlyZF9wYXJ0eS9nbXAvbXBuL3g4Nl82NC96ZW4vc2JwaTFfYmRpdl9yLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmU4ZjljCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvemVuL3NicGkxX2JkaXZfci5hc20KQEAgLTAsMCArMSw1MDcgQEAKK2RubCAgQU1ENjQgbXBuX3NicGkxX2JkaXZfciBvcHRpbWlzZWQgZm9yIEFNRCBaZW4KKworZG5sICBDb3B5cmlnaHQgMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcjoKK2RubAorZG5sICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK2RubCAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitkbmwgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yCitkbmwKK2RubCAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK2RubCAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitkbmwgICAgICBsYXRlciB2ZXJzaW9uLgorZG5sCitkbmwgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCitkbmwKK2RubCAgVGhlIEdOVSBNUCBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorZG5sICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorZG5sICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2RubCAgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitkbmwgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgTVAgTGlicmFyeS4gIElmIG5vdCwKK2RubCAgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorCitpbmNsdWRlKGAuLi9jb25maWcubTQnKQorCisKK2RlZmluZShgdXAnLCAgICAgICBgJXJkaScpCitkZWZpbmUoYHVuX3BhcmFtJywgYCVyc2knKQorZGVmaW5lKGBkcF9wYXJhbScsIGAlcmR4JykKK2RlZmluZShgZG5fcGFyYW0nLCBgJXJjeCcpCitkZWZpbmUoYGRpbnYnLCAgICAgYCVyOCcpCisKK2RlZmluZShgaScsICAgICAgICBgJXJjeCcpCitkZWZpbmUoYGRuJywgICAgICAgYCVyMTQnKQorCitkZWZpbmUoYGRwJywgICAgICAgYCVyc2knKQorZGVmaW5lKGB1bicsICAgICAgIGAlcjE1JykKKworQyBUT0RPCitDICAqIFRoZSBvMS4uLm84ICBsb29wcyBmb3Igc3BlY2lhbCBkbiBjb3VudHMgd2VyZSBuYWl2ZWx5IGhhbmQtb3B0aW1pc2VkIGJ5CitDICAgIGZvbGRpbmcgdGhlIGdlbmVyaWMgbG9vcHMuICBUaGV5IGNhbiBwcm9iYWJseSBiZSB0dW5lZC4gIFRoZSBzcGVjdWxhdGl2ZQorQyAgICBxdW90aWVudCBsaW1iIGdlbmVyYXRpb24gbWlnaHQgbm90IGJlIGluIHRoZSBvcHRpbWFsIHNwb3QuCitDICAqIFBlcmhhcHMgYXZvaWQgbGF0ZS1pbi1sb29wIGp1bXBzLCBlLmcuLCBsbzAuCitDICAqIEltcHJvdmUgcmVnYWxsb2Mgd3J0IGRuX3BhcmFtL2RuIGFuZCB1bl9wYXJhbS91biB0byBzYXZlIHNvbWUgbW92ZXMuCisKK0MgQUJJX1NVUFBPUlQoRE9TNjQpCitDIEFCSV9TVVBQT1JUKFNURDY0KQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigxNikKK1BST0xPR1VFKG1wbl9zYnBpMV9iZGl2X3IpCisJRlVOQ19FTlRSWSg0KQorSUZET1MoYAltb3YJNTYoJXJzcCksIGRpbnYJJykKKwlwdXNoCSVyMTUKKwlwdXNoCSVyMTQKKwlwdXNoCSVyMTMKKwlwdXNoCSVyMTIKKwlwdXNoCSVyYnAKKwlwdXNoCSVyYngKKworCXN1Yglkbl9wYXJhbSwgdW5fcGFyYW0JCUMgb3V0ZXIgbG9vcCBjb3VudAorCW1vdglkbl9wYXJhbSwgZG4JCUMgRklYTUU6IFN1cHByZXNzIGJ5IHJlZyByZS1hbGxvYworCXB1c2gJZGludgkJCQlDIGtlZXAgZGludiBvbiBzdGFjaworCW1vdgl1bl9wYXJhbSwgdW4JCUMgRklYTUU6IFN1cHByZXNzIGJ5IHJlZyByZS1hbGxvYworCXhvcglSMzIoJXJicCksIFIzMiglcmJwKQorCisJbGVhCShkcF9wYXJhbSxkbl9wYXJhbSw4KSwgZHAKKworCW1vdgkodXApLCAlcmR4CisJaW11bAlkaW52LCAlcmR4CQkJQyBmaXJzdCBxdW90aWVudCBsaW1iCisKKwluZWcJZG4KKwlsZWEJLTMyKHVwLGRuX3BhcmFtLDgpLCB1cAorCisJdGVzdAkkMSwgUjgoZG5fcGFyYW0pCisJam56CUwoY3gxKQorCitMKGN4MCk6CXRlc3QJJDIsIFI4KGRuX3BhcmFtKQorCWpueglMKGIyKQorCisKK0MgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0woYjApOgljbXAJJC00LCBkbgorCWpueglMKGd0NCkKKworTChvNCk6CW11bHgoCS0zMiwoZHApLCAlcjksICVyMTQpCisJbXVseCgJLTI0LChkcCksICVyMTEsICVyMTApCisJbXVseCgJLTE2LChkcCksICVyMTMsICVyMTIpCisJbXVseCgJLTgsKGRwKSwgJXJieCwgJXJheCkKKwlhZGQJJXIxNCwgJXIxMQorCWFkYwklcjEwLCAlcjEzCisJYWRjCSVyMTIsICVyYngKKwlhZGMJJDAsICVyYXgKKwlhZGQJKHVwKSwgJXI5CisJYWRjCTgodXApLCAlcjExCisJbW92CSVyOCwgJXJkeAkJCUMgZGludgorCW1vdgklcjExLCA4KHVwKQorCW11bHgoCSVyMTEsICVyZHgsICVyMTIpCQlDIG5leHQgcXVvdGllbnQKKwlhZGMJJXIxMywgMTYodXApCisJYWRjCSVyYngsIDI0KHVwKQorCWFkYwklcmJwLCAlcmF4CisJc2V0YwlSOCglcmJwKQorCWFkZAklcmF4LCAzMih1cCkKKwlhZGMJJDAsIFIzMiglcmJwKQorCWxlYQk4KHVwKSwgdXAKKwlkZWMJdW4KKwlqbmUJTChvNCkKKwlqbXAJTChyZXQpCisKK0woZ3Q0KToJY21wCSQtOCwgZG4KKwlqbnoJTChvdXQwKQorCitMKG84KToJbXVseCgJLTY0LChkcCksICVyOSwgJXIxNCkKKwltdWx4KAktNTYsKGRwKSwgJXJjeCwgJXIxMCkKKwltdWx4KAktNDgsKGRwKSwgJXIxMywgJXIxMikKKwltdWx4KAktNDAsKGRwKSwgJXJieCwgJXJheCkKKwlhZGQJJXIxNCwgJXJjeAorCWFkYwklcjEwLCAlcjEzCisJYWRjCSVyMTIsICVyYngKKwlhZGMJJDAsICVyYXgKKwlhZGQJLTMyKHVwKSwgJXI5CisJbXVseCgJLTMyLChkcCksICVyOSwgJXIxNCkKKwlhZGMJLTI0KHVwKSwgJXJjeAorCW1vdgklcmN4LCAtMjQodXApCisJbXVseCgJLTI0LChkcCksICVyMTEsICVyMTApCisJYWRjCSVyMTMsIC0xNih1cCkKKwltdWx4KAktMTYsKGRwKSwgJXIxMywgJXIxMikKKwlhZGMJJXJieCwgLTgodXApCisJYWRjCSVyYXgsICVyOQorCW11bHgoCS04LChkcCksICVyYngsICVyYXgpCisJYWRjCSVyMTQsICVyMTEKKwlhZGMJJXIxMCwgJXIxMworCWFkYwklcjEyLCAlcmJ4CisJYWRjCSQwLCAlcmF4CisJbW92CSVyOCwgJXJkeAkJCUMgZGludgorCW11bHgoCSVyY3gsICVyZHgsICVyMTIpCQlDIG5leHQgcXVvdGllbnQKKwlhZGQJJXI5LCAodXApCisJYWRjCSVyMTEsIDgodXApCisJYWRjCSVyMTMsIDE2KHVwKQorCWFkYwklcmJ4LCAyNCh1cCkKKwlhZGMJJXJicCwgJXJheAorCXNldGMJUjgoJXJicCkKKwlhZGQJJXJheCwgMzIodXApCisJYWRjCSQwLCBSMzIoJXJicCkKKwlsZWEJOCh1cCksIHVwCisJZGVjCXVuCisJam5lCUwobzgpCisJam1wCUwocmV0KQorCitMKG91dDApOm1vdglkbiwgaQorCS5ieXRlCTB4YzQsMHgyMiwweGIzLDB4ZjYsMHgwNCwweGY2CQlDIG11bHggKGRwLGRuLDgpLCVyOSwlcjgKKwkuYnl0ZQkweGM0LDB4MjIsMHhhMywweGY2LDB4NTQsMHhmNiwweDA4CUMgbXVseCA4KGRwLGRuLDgpLCVyMTEsJXIxMAorCS5ieXRlCTB4YzQsMHgyMiwweDkzLDB4ZjYsMHg2NCwweGY2LDB4MTAJQyBtdWx4IDE2KGRwLGRuLDgpLCVyMTMsJXIxMgorCWNsYworCWptcAlMKGxvMCkKKworCUFMSUdOKDE2KQorTCh0b3AwKTphZGQJJXI5LCAodXAsaSw4KQorCS5ieXRlCTB4YzQsMHg2MiwweGIzLDB4ZjYsMHgwNCwweGNlCQlDIG11bHggKGRwLGksOCksICVyOSwgJXI4CisJYWRjCSVyMTEsIDgodXAsaSw4KQorCS5ieXRlCTB4YzQsMHg2MiwweGEzLDB4ZjYsMHg1NCwweGNlLDB4MDgJQyBtdWx4IDgoZHAsaSw4KSwgJXIxMSwgJXIxMAorCWFkYwklcjEzLCAxNih1cCxpLDgpCisJLmJ5dGUJMHhjNCwweDYyLDB4OTMsMHhmNiwweDY0LDB4Y2UsMHgxMAlDIG11bHggMTYoZHAsaSw4KSwgJXIxMywgJXIxMgorCWFkYwklcmJ4LCAyNCh1cCxpLDgpCisJYWRjCSVyYXgsICVyOQorTChsbzApOgkuYnl0ZQkweGM0LDB4ZTIsMHhlMywweGY2LDB4NDQsMHhjZSwweDE4CUMgbXVseCAyNChkcCxpLDgpLCAlcmJ4LCAlcmF4CisJYWRjCSVyOCwgJXIxMQorCWFkYwklcjEwLCAlcjEzCisJYWRjCSVyMTIsICVyYngKKwlhZGMJJDAsICVyYXgKKwlhZGQJJDQsIGkKKwlqcwlMKHRvcDApCisKKwltb3YJKCVyc3ApLCAlcmR4CQkJQyBkaW52CisJLmJ5dGUJMHhjNCwweDIyLDB4ZWIsMHhmNiwweDY0LDB4ZjcsMHgyOAlDIG11bHggNDAoJXJkaSwlcjE0LDgpLCVyZHgsJXIxMgorCWFkZAklcjksICh1cCkKKwlhZGMJJXIxMSwgOCh1cCkKKwlhZGMJJXIxMywgMTYodXApCisJYWRjCSVyYngsIDI0KHVwKQorCWFkYwklcmJwLCAlcmF4CisJc2V0YwlSOCglcmJwKQorCWFkZAklcmF4LCAzMih1cCkKKwlhZGMJJDAsIFIzMiglcmJwKQorCWxlYQk4KHVwKSwgdXAKKwlkZWMJdW4KKwlqbmUJTChvdXQwKQorCWptcAlMKHJldCkKKworTChjeDEpOgl0ZXN0CSQyLCBSOChkbl9wYXJhbSkKKwlqbnoJTChiMykKKworQyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTChiMSk6CWNtcAkkLTEsIGRuCisJam56CUwoZ3QxKQorCisJbW92CTI0KHVwKSwgJXI5CitMKG8xKToJbXVseCgJLTgsKGRwKSwgJXJieCwgJXJkeCkKKwlhZGQJJXI5LCAlcmJ4CisJYWRjCSVyYnAsICVyZHgKKwlhZGQJMzIodXApLCAlcmR4CisJc2V0YwlSOCglcmJwKQorCW1vdgklcmR4LCAlcjkKKwltdWx4KAklcjgsICVyZHgsICVyMTIpCQlDIG5leHQgcXVvdGllbnQKKwlsZWEJOCh1cCksIHVwCisJZGVjCXVuCisJam5lCUwobzEpCisJbW92CSVyOSwgMjQodXApCisJam1wCUwocmV0KQorCitMKGd0MSk6CWNtcAkkLTUsIGRuCisJam56CUwob3V0MSkKKworTChvNSk6CW11bHgoCS00MCwoZHApLCAlcmJ4LCAlcmF4KQorCW11bHgoCS0zMiwoZHApLCAlcjksICVyMTQpCisJbXVseCgJLTI0LChkcCksICVyMTEsICVyMTApCisJbXVseCgJLTE2LChkcCksICVyMTMsICVyMTIpCisJYWRkCS04KHVwKSwgJXJieAorCWFkYwklcmF4LCAlcjkKKwltdWx4KAktOCwoZHApLCAlcmJ4LCAlcmF4KQorCWFkYwklcjE0LCAlcjExCisJYWRjCSVyMTAsICVyMTMKKwlhZGMJJXIxMiwgJXJieAorCWFkYwkkMCwgJXJheAorCWFkZAkodXApLCAlcjkKKwltb3YJJXI5LCAodXApCisJbW92CSVyOCwgJXJkeAkJCUMgZGludgorCW11bHgoCSVyOSwgJXJkeCwgJXIxMikJCUMgbmV4dCBxdW90aWVudAorCWFkYwklcjExLCA4KHVwKQorCWFkYwklcjEzLCAxNih1cCkKKwlhZGMJJXJieCwgMjQodXApCisJYWRjCSVyYnAsICVyYXgKKwlzZXRjCVI4KCVyYnApCisJYWRkCSVyYXgsIDMyKHVwKQorCWFkYwkkMCwgUjMyKCVyYnApCisJbGVhCTgodXApLCB1cAorCWRlYwl1bgorCWpuZQlMKG81KQorCWptcAlMKHJldCkKKworTChvdXQxKTpsZWEJMShkbiksIGkKKwkuYnl0ZQkweGM0LDB4YTIsMHhlMywweGY2LDB4MDQsMHhmNgkJQyBtdWx4IChkcCxkbiw4KSwlcmJ4LCVyYXgKKwkuYnl0ZQkweGM0LDB4MjIsMHhiMywweGY2LDB4NDQsMHhmNiwweDA4CUMgbXVseCA4KGRwLGRuLDgpLCVyOSwlcjgKKwkuYnl0ZQkweGM0LDB4MjIsMHhhMywweGY2LDB4NTQsMHhmNiwweDEwCUMgbXVseCAxNihkcCxkbiw4KSwlcjExLCVyMTAKKwljbGMKKwlqbXAJTChsbzEpCisKKwlBTElHTigxNikKK0wodG9wMSk6YWRkCSVyOSwgKHVwLGksOCkKKwkuYnl0ZQkweGM0LDB4NjIsMHhiMywweGY2LDB4MDQsMHhjZQkJQyBtdWx4IChkcCxpLDgpLCAlcjksICVyOAorCWFkYwklcjExLCA4KHVwLGksOCkKKwkuYnl0ZQkweGM0LDB4NjIsMHhhMywweGY2LDB4NTQsMHhjZSwweDA4CUMgbXVseCA4KGRwLGksOCksICVyMTEsICVyMTAKKwlhZGMJJXIxMywgMTYodXAsaSw4KQorTChsbzEpOgkuYnl0ZQkweGM0LDB4NjIsMHg5MywweGY2LDB4NjQsMHhjZSwweDEwCUMgbXVseCAxNihkcCxpLDgpLCAlcjEzLCAlcjEyCisJYWRjCSVyYngsIDI0KHVwLGksOCkKKwlhZGMJJXJheCwgJXI5CisJLmJ5dGUJMHhjNCwweGUyLDB4ZTMsMHhmNiwweDQ0LDB4Y2UsMHgxOAlDIG11bHggMjQoZHAsaSw4KSwgJXJieCwgJXJheAorCWFkYwklcjgsICVyMTEKKwlhZGMJJXIxMCwgJXIxMworCWFkYwklcjEyLCAlcmJ4CisJYWRjCSQwLCAlcmF4CisJYWRkCSQ0LCBpCisJanMJTCh0b3AxKQorCisJbW92CSglcnNwKSwgJXJkeAkJCUMgZGludgorCS5ieXRlCTB4YzQsMHgyMiwweGViLDB4ZjYsMHg2NCwweGY3LDB4MjgJQyBtdWx4IDQwKHVwLGRuLDgpLCAlcmR4LCAlcjEyCisJYWRkCSVyOSwgKHVwKQorCWFkYwklcjExLCA4KHVwKQorCWFkYwklcjEzLCAxNih1cCkKKwlhZGMJJXJieCwgMjQodXApCisJYWRjCSVyYnAsICVyYXgKKwlzZXRjCVI4KCVyYnApCisJYWRkCSVyYXgsIDMyKHVwKQorCWFkYwkkMCwgUjMyKCVyYnApCisJbGVhCTgodXApLCB1cAorCWRlYwl1bgorCWpuZQlMKG91dDEpCisJam1wCUwocmV0KQorCitDID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitMKGIyKToJY21wCSQtMiwgZG4KKwlqbnoJTChndDIpCisKKwltb3YJMTYodXApLCAlcjEwCisJbW92CTI0KHVwKSwgJXI5CitMKG8yKToJbXVseCgJLTE2LChkcCksICVyMTMsICVyMTIpCisJbXVseCgJLTgsKGRwKSwgJXJieCwgJXJheCkKKwlhZGQJJXIxMiwgJXJieAorCWFkYwkkMCwgJXJheAorCWFkZAklcjEwLCAlcjEzCQkJQyBhZGQganVzdCB0byBwcm9kdWNlIGNhcnJ5CisJbW92CSVyOSwgJXIxMAorCWFkYwklcmJ4LCAlcjEwCisJbW92CSVyOCwgJXJkeAorCW11bHgoCSVyMTAsICVyZHgsICVyMTIpCQlDIG5leHQgcXVvdGllbnQKKwlhZGMJJXJicCwgJXJheAorCXNldGMJUjgoJXJicCkKKwltb3YJMzIodXApLCAlcjkKKwlhZGQJJXJheCwgJXI5CisJYWRjCSQwLCBSMzIoJXJicCkKKwlsZWEJOCh1cCksIHVwCisJZGVjCXVuCisJam5lCUwobzIpCisJbW92CSVyMTAsIDE2KHVwKQorCW1vdgklcjksIDI0KHVwKQorCWptcAlMKHJldCkKKworTChndDIpOgljbXAJJC02LCBkbgorCWpueglMKG91dDIpCisKK0wobzYpOgltdWx4KAktNDgsKGRwKSwgJXIxMywgJXIxMikKKwltdWx4KAktNDAsKGRwKSwgJXJjeCwgJXJheCkKKwlhZGQJJXIxMiwgJXJjeAorCWFkYwkkMCwgJXJheAorCW11bHgoCS0zMiwoZHApLCAlcjksICVyMTQpCisJbXVseCgJLTI0LChkcCksICVyMTEsICVyMTApCisJYWRkCS0xNih1cCksICVyMTMKKwltdWx4KAktMTYsKGRwKSwgJXIxMywgJXIxMikKKwlhZGMJLTgodXApLCAlcmN4CisJbW92CSVyY3gsIC04KHVwKQorCWFkYwklcmF4LCAlcjkKKwltdWx4KAktOCwoZHApLCAlcmJ4LCAlcmF4KQorCWFkYwklcjE0LCAlcjExCisJYWRjCSVyMTAsICVyMTMKKwlhZGMJJXIxMiwgJXJieAorCWFkYwkkMCwgJXJheAorCW1vdgklcjgsICVyZHgJCQlDIGRpbnYKKwltdWx4KAklcmN4LCAlcmR4LCAlcjEyKQkJQyBuZXh0IHF1b3RpZW50CisJYWRkCSVyOSwgKHVwKQorCWFkYwklcjExLCA4KHVwKQorCWFkYwklcjEzLCAxNih1cCkKKwlhZGMJJXJieCwgMjQodXApCisJYWRjCSVyYnAsICVyYXgKKwlzZXRjCVI4KCVyYnApCisJYWRkCSVyYXgsIDMyKHVwKQorCWFkYwkkMCwgUjMyKCVyYnApCisJbGVhCTgodXApLCB1cAorCWRlYwl1bgorCWpuZQlMKG82KQorCWptcAlMKHJldCkKKworTChvdXQyKTpsZWEJMihkbiksIGkKKwkuYnl0ZQkweGM0LDB4MjIsMHg5MywweGY2LDB4MjQsMHhmNgkJQyBtdWx4IChkcCxkbiw4KSwlcjEzLCVyMTIKKwkuYnl0ZQkweGM0LDB4YTIsMHhlMywweGY2LDB4NDQsMHhmNiwweDA4CUMgbXVseCA4KGRwLGRuLDgpLCVyYngsJXJheAorCWFkZAklcjEyLCAlcmJ4CisJYWRjCSQwLCAlcmF4CisJLmJ5dGUJMHhjNCwweDIyLDB4YjMsMHhmNiwweDQ0LDB4ZjYsMHgxMAlDIG11bHggMTYoZHAsZG4sOCksJXI5LCVyOAorCWptcAlMKGxvMikKKworCUFMSUdOKDE2KQorTCh0b3AyKTphZGQJJXI5LCAodXAsaSw4KQorCS5ieXRlCTB4YzQsMHg2MiwweGIzLDB4ZjYsMHgwNCwweGNlCQlDIG11bHggKGRwLGksOCksICVyOSwgJXI4CisJYWRjCSVyMTEsIDgodXAsaSw4KQorTChsbzIpOgkuYnl0ZQkweGM0LDB4NjIsMHhhMywweGY2LDB4NTQsMHhjZSwweDA4CUMgbXVseCA4KGRwLGksOCksICVyMTEsICVyMTAKKwlhZGMJJXIxMywgMTYodXAsaSw4KQorCS5ieXRlCTB4YzQsMHg2MiwweDkzLDB4ZjYsMHg2NCwweGNlLDB4MTAJQyBtdWx4IDE2KGRwLGksOCksICVyMTMsICVyMTIKKwlhZGMJJXJieCwgMjQodXAsaSw4KQorCWFkYwklcmF4LCAlcjkKKwkuYnl0ZQkweGM0LDB4ZTIsMHhlMywweGY2LDB4NDQsMHhjZSwweDE4CUMgbXVseCAyNChkcCxpLDgpLCAlcmJ4LCAlcmF4CisJYWRjCSVyOCwgJXIxMQorCWFkYwklcjEwLCAlcjEzCisJYWRjCSVyMTIsICVyYngKKwlhZGMJJDAsICVyYXgKKwlhZGQJJDQsIGkKKwlqcwlMKHRvcDIpCisKKwltb3YJKCVyc3ApLCAlcmR4CQkJQyBkaW52CisJLmJ5dGUJMHhjNCwweDIyLDB4ZWIsMHhmNiwweDY0LDB4ZjcsMHgyOAlDIG11bHggNDAodXAsZG4sOCksICVyZHgsICVyMTIKKwlhZGQJJXI5LCAodXApCisJYWRjCSVyMTEsIDgodXApCisJYWRjCSVyMTMsIDE2KHVwKQorCWFkYwklcmJ4LCAyNCh1cCkKKwlhZGMJJXJicCwgJXJheAorCXNldGMJUjgoJXJicCkKKwlhZGQJJXJheCwgMzIodXApCisJYWRjCSQwLCBSMzIoJXJicCkKKwlsZWEJOCh1cCksIHVwCisJZGVjCXVuCisJam5lCUwob3V0MikKKwlqbXAJTChyZXQpCisKK0MgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0woYjMpOgljbXAJJC0zLCBkbgorCWpueglMKGd0MykKKworCW1vdgk4KHVwKSwgJXIxNAorCW1vdgkxNih1cCksICVyOQorCW1vdgkyNCh1cCksICVyY3gKK0wobzMpOgltdWx4KAktMjQsKGRwKSwgJXIxMSwgJXIxMCkKKwltdWx4KAktMTYsKGRwKSwgJXIxMywgJXIxMikKKwltdWx4KAktOCwoZHApLCAlcmJ4LCAlcmF4KQorCWFkZAklcjEwLCAlcjEzCisJYWRjCSVyMTIsICVyYngKKwlhZGMJJDAsICVyYXgKKwlhZGQJJXIxNCwgJXIxMQorCW1vdgklcjksICVyMTQKKwlhZGMJJXIxMywgJXIxNAorCW1vdgklcmN4LCAlcjkKKwltb3YJJXI4LCAlcmR4CQkJQyBkaW52CisJbXVseCgJJXIxNCwgJXJkeCwgJXIxMikJCUMgbmV4dCBxdW90aWVudAorCWFkYwklcmJ4LCAlcjkKKwlhZGMJJXJicCwgJXJheAorCXNldGMJUjgoJXJicCkKKwltb3YJMzIodXApLCAlcmN4CisJYWRkCSVyYXgsICVyY3gKKwlhZGMJJDAsIFIzMiglcmJwKQorCWxlYQk4KHVwKSwgdXAKKwlkZWMJdW4KKwlqbmUJTChvMykKKwltb3YJJXIxNCwgOCh1cCkKKwltb3YJJXI5LCAxNih1cCkKKwltb3YJJXJjeCwgMjQodXApCisJam1wCUwocmV0KQorCitMKGd0Myk6CWNtcAkkLTcsIGRuCisJam56CUwob3V0MykKKworTChvNyk6CW11bHgoCS01NiwoZHApLCAlcjExLCAlcjEwKQorCW11bHgoCS00OCwoZHApLCAlcmN4LCAlcjEyKQorCW11bHgoCS00MCwoZHApLCAlcmJ4LCAlcmF4KQorCWFkZAklcjEwLCAlcmN4CisJYWRjCSVyMTIsICVyYngKKwlhZGMJJDAsICVyYXgKKwltdWx4KAktMzIsKGRwKSwgJXI5LCAlcjE0KQorCWFkZAktMjQodXApLCAlcjExCisJbXVseCgJLTI0LChkcCksICVyMTEsICVyMTApCisJYWRjCS0xNih1cCksICVyY3gKKwltb3YJJXJjeCwgLTE2KHVwKQorCW11bHgoCS0xNiwoZHApLCAlcjEzLCAlcjEyKQorCWFkYwklcmJ4LCAtOCh1cCkKKwlhZGMJJXJheCwgJXI5CisJbXVseCgJLTgsKGRwKSwgJXJieCwgJXJheCkKKwlhZGMJJXIxNCwgJXIxMQorCWFkYwklcjEwLCAlcjEzCisJYWRjCSVyMTIsICVyYngKKwlhZGMJJDAsICVyYXgKKwltb3YJJXI4LCAlcmR4CQkJQyBkaW52CisJbXVseCgJJXJjeCwgJXJkeCwgJXIxMikJCUMgbmV4dCBxdW90aWVudAorCWFkZAklcjksICh1cCkKKwlhZGMJJXIxMSwgOCh1cCkKKwlhZGMJJXIxMywgMTYodXApCisJYWRjCSVyYngsIDI0KHVwKQorCWFkYwklcmJwLCAlcmF4CisJc2V0YwlSOCglcmJwKQorCWFkZAklcmF4LCAzMih1cCkKKwlhZGMJJDAsIFIzMiglcmJwKQorCWxlYQk4KHVwKSwgdXAKKwlkZWMJdW4KKwlqbmUJTChvNykKKwlqbXAJTChyZXQpCisKK0wob3V0Myk6bGVhCTMoZG4pLCBpCisJLmJ5dGUJMHhjNCwweDIyLDB4YTMsMHhmNiwweDE0LDB4ZjYJCUMgbXVseCAoZHAsZG4sOCksJXIxMSwlcjEwCisJLmJ5dGUJMHhjNCwweDIyLDB4OTMsMHhmNiwweDY0LDB4ZjYsMHgwOAlDIG11bHggOChkcCxkbiw4KSwlcjEzLCVyMTIKKwkuYnl0ZQkweGM0LDB4YTIsMHhlMywweGY2LDB4NDQsMHhmNiwweDEwCUMgbXVseCAxNihkcCxkbiw4KSwlcmJ4LCVyYXgKKwlhZGQJJXIxMCwgJXIxMworCWFkYwklcjEyLCAlcmJ4CisJYWRjCSQwLCAlcmF4CisJam1wCUwobG8zKQorCisJQUxJR04oMTYpCitMKHRvcDMpOmFkZAklcjksICh1cCxpLDgpCitMKGxvMyk6CS5ieXRlCTB4YzQsMHg2MiwweGIzLDB4ZjYsMHgwNCwweGNlCQlDIG11bHggKGRwLGksOCksICVyOSwgJXI4CisJYWRjCSVyMTEsIDgodXAsaSw4KQorCS5ieXRlCTB4YzQsMHg2MiwweGEzLDB4ZjYsMHg1NCwweGNlLDB4MDgJQyBtdWx4IDgoZHAsaSw4KSwgJXIxMSwgJXIxMAorCWFkYwklcjEzLCAxNih1cCxpLDgpCisJLmJ5dGUJMHhjNCwweDYyLDB4OTMsMHhmNiwweDY0LDB4Y2UsMHgxMAlDIG11bHggMTYoZHAsaSw4KSwgJXIxMywgJXIxMgorCWFkYwklcmJ4LCAyNCh1cCxpLDgpCisJYWRjCSVyYXgsICVyOQorCS5ieXRlCTB4YzQsMHhlMiwweGUzLDB4ZjYsMHg0NCwweGNlLDB4MTgJQyBtdWx4IDI0KGRwLGksOCksICVyYngsICVyYXgKKwlhZGMJJXI4LCAlcjExCisJYWRjCSVyMTAsICVyMTMKKwlhZGMJJXIxMiwgJXJieAorCWFkYwkkMCwgJXJheAorCWFkZAkkNCwgaQorCWpzCUwodG9wMykKKworCW1vdgkoJXJzcCksICVyZHgJCQlDIGRpbnYKKwkuYnl0ZQkweGM0LDB4MjIsMHhlYiwweGY2LDB4NjQsMHhmNywweDI4CUMgbXVseCA0MCh1cCxkbiw4KSwgJXJkeCwgJXIxMgorCWFkZAklcjksICh1cCkKKwlhZGMJJXIxMSwgOCh1cCkKKwlhZGMJJXIxMywgMTYodXApCisJYWRjCSVyYngsIDI0KHVwKQorCWFkYwklcmJwLCAlcmF4CisJc2V0YwlSOCglcmJwKQorCWFkZAklcmF4LCAzMih1cCkKKwlhZGMJJDAsIFIzMiglcmJwKQorCWxlYQk4KHVwKSwgdXAKKwlkZWMJdW4KKwlqbmUJTChvdXQzKQorCitMKHJldCk6CW1vdgklcmJwLCAlcmF4CisJcG9wCSVyc2kJCQlDIGR1bW15IGRlYWxsb2MKKwlwb3AJJXJieAorCXBvcAklcmJwCisJcG9wCSVyMTIKKwlwb3AJJXIxMworCXBvcAklcjE0CisJcG9wCSVyMTUKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3plbi9zcXJfYmFzZWNhc2UuYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvemVuL3Nxcl9iYXNlY2FzZS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdjNjEyNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3plbi9zcXJfYmFzZWNhc2UuYXNtCkBAIC0wLDAgKzEsNDgyIEBACitkbmwgIEFNRDY0IG1wbl9zcXJfYmFzZWNhc2Ugb3B0aW1pc2VkIGZvciBBTUQgWmVuLgorCitkbmwgIENvcHlyaWdodCAyMDEyLCAyMDEzLCAyMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0MgVE9ETworQyAgKiBEbyBvdmVybGFwcGVkIHNvZnR3YXJlIHBpcGVsaW5pbmcuICBUaGlzIHNob3VsZCBjbG9zZSB0aGUgcmVtYWluaW5nIGdhcCB0bworQyAgICBtdWxfYmFzZWNhc2UuCitDCitDICAqIFVwZGF0ZSB1biBqdXN0IG9uY2UgaW4gdGhlIG91dGVyIGxvb3AuCitDCitDICAqIFBlcmhhcHMga2VlcCB1biBhbmQgbiBwcmUtbXVsdGlwbGllZCBieSA4LCB0aHVzIHN1cHByZXNzaW5nICIsOCIgZnJvbQorQyAgICBsb2FkcyBhbmQgc3RvcmVzLiAgQXQgbGVhc3QgaW4gc29tZSBjYXNlcywgdGhlIG5vbi1zY2FsZWQgZm9ybSBpcyBmYXN0ZXIuCitDCitDICAqIE9wdGltaXNlIHhpdDMgY29kZSwgZS5nLiwgdXNpbmcgc2hyeCBhbmQgc2FyeCBsaWtlIGluIHRoZSBtYWluIGxvb3AuCitDCitDICAqIFRoZSBtdWxfMSBmZWVkLWluIGNvZGUgaGFzIGdvdHRlbiBsaXR0bGUgYXR0ZW50aW9uIGFuZCBjb3VsZCBwcm9iYWJseSBiZQorQyAgICBpbXByb3ZlZC4gIFBlcmhhcHMgZXZlbiBleHBhbmQgaXQgdG8gNCBzZXBhcmF0ZSBsb29wcyB0byBhbGxvdyBzdHJhaWdodAorQyAgICBmYWxsLXRocm91Z2ggaW50byB0aGUgNCBhZGRtdWxfMSBsb29wcy4KK0MKK0MgICogQ2xlYW4gdXAgYWQtaG9jIHNjcmF0Y2ggcmVnaXN0ZXIgdXNhZ2UgaW4gdGhlIGFkZG11bF8xIGZlZWQtaW4gY29kZSBibG9ja3MuCisKK2RlZmluZShgcnAnLCAgICAgIGAlcmRpJykKK2RlZmluZShgdXAnLCAgICAgIGAlcnNpJykKK2RlZmluZShgdW5fcGFyYW0nLGAlcmR4JykKKworZGVmaW5lKGB1bicsICAgICAgYCVyYnAnKQorZGVmaW5lKGBuJywgICAgICAgYCVyY3gnKQorCitDIHRoZXNlIGFyZSB1c2VkIGp1c3QgZm9yIHRoZSBzbWFsbCBvcCBjb2RlCitkZWZpbmUoYHcwJywJYCVyOCcpCitkZWZpbmUoYHcxJywJYCVyOScpCitkZWZpbmUoYHcyJywJYCVyMTAnKQorZGVmaW5lKGB3MycsCWAlcjExJykKKworCitBQklfU1VQUE9SVChET1M2NCkKK0FCSV9TVVBQT1JUKFNURDY0KQorCitBU01fU1RBUlQoKQorCVRFWFQKKwlBTElHTigxNikKK1BST0xPR1VFKG1wbl9zcXJfYmFzZWNhc2UpCisJRlVOQ19FTlRSWSgzKQorCisJY21wCSQyLCBSMzIodW5fcGFyYW0pCisJamFlCUwoZ3QxKQorCisJbW92CSh1cCksICVyZHgKKwltdWx4KAklcmR4LCAlcmF4LCAlcmR4KQorCW1vdgklcmF4LCAocnApCisJbW92CSVyZHgsIDgocnApCisJRlVOQ19FWElUKCkKKwlyZXQKKworTChndDEpOglqbmUJTChndDIpCisKKwltb3YJKHVwKSwgJXJkeAorCW1vdgk4KHVwKSwgJXJjeAorCW11bHgoCSVyY3gsICVyOSwgJXIxMCkJQyB2MCAqIHYxCVcgMSAyCisJbXVseCgJJXJkeCwgJXJheCwgJXI4KQlDIHYwICogdjAJVyAwIDEKKwltb3YJJXJjeCwgJXJkeAorCW11bHgoCSVyZHgsICVyMTEsICVyZHgpCUMgdjEgKiB2MQlXIDIgMworCWFkZAklcjksICVyOQkJQwkJVyAxCisJYWRjCSVyMTAsICVyMTAJCUMJCVcgMgorCWFkYwkkMCwgJXJkeAkJQwkJVyAzCisJYWRkCSVyOSwgJXI4CQlDIFcgMQorCWFkYwklcjExLCAlcjEwCQlDIFcgMgorCWFkYwkkMCwgJXJkeAkJQyBXIDMKKwltb3YJJXJheCwgKHJwKQorCW1vdgklcjgsIDgocnApCisJbW92CSVyMTAsIDE2KHJwKQorCW1vdgklcmR4LCAyNChycCkKKwlGVU5DX0VYSVQoKQorCXJldAorCitMKGd0Mik6CWNtcAkkNCwgUjMyKHVuX3BhcmFtKQorCWphZQlMKGd0MykKKworCXB1c2gJJXJieAorCW1vdgkodXApLCAlcmR4CisJbXVseCgJOCwodXApLCB3MiwgdzMpCisJbXVseCgJMTYsKHVwKSwgdzAsIHcxKQorCWFkZAl3MywgdzAKKwltb3YJOCh1cCksICVyZHgKKwltdWx4KAkxNiwodXApLCAlcmF4LCB3MykKKwlhZGMJJXJheCwgdzEKKwlhZGMJJDAsIHczCisJdGVzdAlSMzIoJXJieCksIFIzMiglcmJ4KQorCW1vdgkodXApLCAlcmR4CisJbXVseCgJJXJkeCwgJXJieCwgJXJjeCkKKwltb3YJJXJieCwgKHJwKQorCW1vdgk4KHVwKSwgJXJkeAorCW11bHgoCSVyZHgsICVyYXgsICVyYngpCisJbW92CTE2KHVwKSwgJXJkeAorCW11bHgoCSVyZHgsICVyc2ksICVyZHgpCisJYWRjeCgJdzIsIHcyKQorCWFkY3goCXcwLCB3MCkKKwlhZGN4KAl3MSwgdzEpCisJYWRjeCgJdzMsIHczKQorCWFkb3goCXcyLCAlcmN4KQorCWFkb3goCXcwLCAlcmF4KQorCWFkb3goCXcxLCAlcmJ4KQorCWFkb3goCXczLCAlcnNpKQorCW1vdgkkMCwgUjMyKCVyOCkKKwlhZG94KAklcjgsICVyZHgpCisJYWRjeCgJJXI4LCAlcmR4KQorCW1vdgklcmN4LCA4KHJwKQorCW1vdgklcmF4LCAxNihycCkKKwltb3YJJXJieCwgMjQocnApCisJbW92CSVyc2ksIDMyKHJwKQorCW1vdgklcmR4LCA0MChycCkKKwlwb3AJJXJieAorCUZVTkNfRVhJVCgpCisJcmV0CisKK0woZ3QzKToJcHVzaAklcjE1CitDCXB1c2gJJXIxNAorCXB1c2gJJXIxMworCXB1c2gJJXIxMgorCXB1c2gJJXJicAorCXB1c2gJJXJieAorCW1vdglSMzIodW5fcGFyYW0pLCBSMzIodW4pCisKKwltb3YJKHVwKSwgJXJkeAkJQyB1cFswXQorCW1vdgk4KHVwKSwgJXI5CQlDIHVwWzFdCisKKwltdWx4KAklcmR4LCAlcmF4LCAlcjE1KQlDIHVwWzBdXjIKKwltb3YJJXJheCwgKHJwKQorCXNobAklcmR4CisKKwlsZWEJKHVwLHVuLDgpLCB1cAorCWxlYQktMzIocnAsdW4sOCksIHJwCisKKwluZWcJdW4KKwlsZWEJNCh1biksIG4KKwlhbmQJJC00LCBuCisKKwl0ZXN0CSQxLCBSOCh1bikKKwlqbnoJTChteDApCitMKG14MSk6CXRlc3QJJDIsIFI4KHVuKQorCWp6CUwobWIzKQorCitMKG1iMSk6CW11bHgoCSVyOSwgJXJieCwgJXJheCkKKwkuYnl0ZQkweGM0LDB4NjIsMHhiMywweGY2LDB4NDQsMHhlZSwweDEwCUMgbXVseCAxNih1cCx1biw4KSwgJXI5LCAlcjgKKwkuYnl0ZQkweGM0LDB4NjIsMHhhMywweGY2LDB4NTQsMHhlZSwweDE4CUMgbXVseCAyNCh1cCx1biw4KSwgJXIxMSwgJXIxMAorCWFkZAklcjE1LCAlcmJ4CisJam1wCUwobWxvMSkKKworTChtYjMpOgltdWx4KAklcjksICVyMTEsICVyMTApCisJLmJ5dGUJMHhjNCwweDYyLDB4OTMsMHhmNiwweDY0LDB4ZWUsMHgxMAlDIG11bHggMTYodXAsdW4sOCksICVyMTMsICVyMTIKKwkuYnl0ZQkweGM0LDB4ZTIsMHhlMywweGY2LDB4NDQsMHhlZSwweDE4CUMgbXVseCAyNCh1cCx1biw4KSwgJXJieCwgJXJheAorCWFkZAklcjE1LCAlcjExCisJanJjeHoJTChuNCkKKwlqbXAJTChtbG8zKQorTChuNCk6CW1vdgklcjExLCA4KHJwKQorCWFkYwklcjEwLCAlcjEzCisJYWRjCSVyMTIsICVyYngKKwlqbXAJTChtKQorCitMKG14MCk6CXRlc3QJJDIsIFI4KHVuKQorCWpueglMKG1iMCkKKworTChtYjIpOgltdWx4KAklcjksICVyMTMsICVyMTIpCisJLmJ5dGUJMHhjNCwweGUyLDB4ZTMsMHhmNiwweDQ0LDB4ZWUsMHgxMAlDIG11bHggMTYodXAsdW4sOCksICVyYngsICVyYXgKKwkuYnl0ZQkweGM0LDB4NjIsMHhiMywweGY2LDB4NDQsMHhlZSwweDE4CUMgbXVseCAyNCh1cCx1biw4KSwgJXI5LCAlcjgKKwlhZGQJJXIxNSwgJXIxMworCWptcAlMKG1sbzIpCisKK0wobWIwKToJbXVseCgJJXI5LCAlcjksICVyOCkKKwkuYnl0ZQkweGM0LDB4NjIsMHhhMywweGY2LDB4NTQsMHhlZSwweDEwCUMgbXVseCAxNih1cCx1biw4KSwgJXIxMSwgJXIxMAorCS5ieXRlCTB4YzQsMHg2MiwweDkzLDB4ZjYsMHg2NCwweGVlLDB4MTgJQyBtdWx4IDI0KHVwLHVuLDgpLCAlcjEzLCAlcjEyCisJYWRkCSVyMTUsICVyOQorCWptcAlMKG1sbzApCisKKwlBTElHTigxNikKK0wobXRvcCk6anJjeHoJTChtZW5kKQorCWFkYwklcjgsICVyMTEKKwltb3YJJXI5LCAocnAsbiw4KQorTChtbG8zKTouYnl0ZQkweGM0LDB4NjIsMHhiMywweGY2LDB4MDQsMHhjZQkJQyBtdWx4ICh1cCxuLDgpLCAlcjksICVyOAorCWFkYwklcjEwLCAlcjEzCisJbW92CSVyMTEsIDgocnAsbiw4KQorTChtbG8yKTouYnl0ZQkweGM0LDB4NjIsMHhhMywweGY2LDB4NTQsMHhjZSwweDA4CUMgbXVseCA4KHVwLG4sOCksICVyMTEsICVyMTAKKwlhZGMJJXIxMiwgJXJieAorCW1vdgklcjEzLCAxNihycCxuLDgpCitMKG1sbzEpOi5ieXRlCTB4YzQsMHg2MiwweDkzLDB4ZjYsMHg2NCwweGNlLDB4MTAJQyBtdWx4IDE2KHVwLG4sOCksICVyMTMsICVyMTIKKwlhZGMJJXJheCwgJXI5CisJbW92CSVyYngsIDI0KHJwLG4sOCkKK0wobWxvMCk6LmJ5dGUJMHhjNCwweGUyLDB4ZTMsMHhmNiwweDQ0LDB4Y2UsMHgxOAlDIG11bHggMjQodXAsbiw4KSwgJXJieCwgJXJheAorCWxlYQk0KG4pLCBuCisJam1wCUwobXRvcCkKKworTChtZW5kKTptb3YJJXI5LCAocnApCisJYWRjCSVyOCwgJXIxMQorCW1vdgklcjExLCA4KHJwKQorCWFkYwklcjEwLCAlcjEzCisJbW92CSVyMTMsIDE2KHJwKQorCWFkYwklcjEyLCAlcmJ4CisJYWRjCSQwLCAlcmF4CisJbW92CSVyYngsIDI0KHJwKQorCW1vdgklcmF4LCAzMihycCkKKworCWxlYQkyKHVuKSwgdW4KKworCW1vdgkkNjMsIFIzMiglcjE1KQkJCUMga2VlcCBhdCA2MyBmb3Igc2hyeC9zYXJ4LgorCXRlc3QJJDEsIFI4KHVuKQorCWp6CUwoeDApCitMKHgxKToJdGVzdAkkMiwgUjgodW4pCisJanoJTChmMykKKwlqbXAJTChmMSkKK0woeDApOgl0ZXN0CSQyLCBSOCh1bikKKwlqeglMKGYwKQorQwlqbXAJTChmMikKKworTChmMik6CW1vdgktOCh1cCx1biw4KSwgJXJkeAkJQyB1cFswXQorCWxlYQkyKHVuKSwgbgorCWxlYQk4KHJwKSwgcnAKKwkuYnl0ZQkweGM0LDB4NjIsMHg4MiwweGY3LDB4NWMsMHhlZSwweGYwCUMgc2FyeCAlcjE1LCAtMTYodXAsdW4sOCksICVyMTEKKwkuYnl0ZQkweGM0LDB4NjIsMHg4MywweGY3LDB4NmMsMHhlZSwweGYwCUMgc2hyeCAlcjE1LCAtMTYodXAsdW4sOCksICVyMTMKKwlhbmQJJXJkeCwgJXIxMQkJCUMgImNpIiBpbiBDIGNvZGUKKwltdWx4KAklcmR4LCAlcmF4LCAlcjEwKQkJQyB1cFswXV4yCisJbGVhCSglcjEzLCVyZHgsMiksICVyZHgJCUMgInUwIiBhcmcgaW4gQyBjb2RlCisJYWRkCSVyYXgsICVyMTEKKworCS5ieXRlCTB4YzQsMHg2MiwweDkzLDB4ZjYsMHgyNCwweGVlCQlDIG11bHggKHVwLHVuLDgpLCAlcjEzLCAlcjEyCisJLmJ5dGUJMHhjNCwweGUyLDB4ZTMsMHhmNiwweDQ0LDB4ZWUsMHgwOAlDIG11bHggOCh1cCx1biw4KSwgJXJieCwgJXJheAorCWFkYwklcjEwLCAlcjEzCisJYWRjCSVyMTIsICVyYngKKwlhZGMJJDAsICVyYXgKKwlqbXAJTChiMikKKworCUFMSUdOKDE2KQorTCh0b3AyKTphZGQJJXI5LCAocnAsbiw4KQorTChiMik6CS5ieXRlCTB4YzQsMHg2MiwweGIzLDB4ZjYsMHgwNCwweGNlCQlDIG11bHggKHVwLG4sOCksICVyOSwgJXI4CisJYWRjCSVyMTEsIDgocnAsbiw4KQorCS5ieXRlCTB4YzQsMHg2MiwweGEzLDB4ZjYsMHg1NCwweGNlLDB4MDgJQyBtdWx4IDgodXAsbiw4KSwgJXIxMSwgJXIxMAorCWFkYwklcjEzLCAxNihycCxuLDgpCisJLmJ5dGUJMHhjNCwweDYyLDB4OTMsMHhmNiwweDY0LDB4Y2UsMHgxMAlDIG11bHggMTYodXAsbiw4KSwgJXIxMywgJXIxMgorCWFkYwklcmJ4LCAyNChycCxuLDgpCisJYWRjCSVyYXgsICVyOQorCS5ieXRlCTB4YzQsMHhlMiwweGUzLDB4ZjYsMHg0NCwweGNlLDB4MTgJQyBtdWx4IDI0KHVwLG4sOCksICVyYngsICVyYXgKKwlhZGMJJXI4LCAlcjExCisJYWRjCSVyMTAsICVyMTMKKwlhZGMJJXIxMiwgJXJieAorCWFkYwkkMCwgJXJheAorCWFkZAkkNCwgbgorCWpueglMKHRvcDIpCisKKwlpbmMJdW4KKwlhZGQJJXI5LCAocnApCisJYWRjCSVyMTEsIDgocnApCisJYWRjCSVyMTMsIDE2KHJwKQorCWFkYwklcmJ4LCAyNChycCkKKwlhZGMJJDAsICVyYXgKKwltb3YJJXJheCwgMzIocnApCisKK0woZjEpOgltb3YJLTgodXAsdW4sOCksICVyZHgJCUMgdXBbMF0KKwlsZWEJMSh1biksIG4KKwlsZWEJOChycCksIHJwCisJLmJ5dGUJMHhjNCwweDYyLDB4ODIsMHhmNywweDZjLDB4ZWUsMHhmMAlDIHNhcngJJXIxNSwgLTE2KHVwLHVuLDgpLCAlcjEzCisJLmJ5dGUJMHhjNCwweGUyLDB4ODMsMHhmNywweDVjLDB4ZWUsMHhmMAlDIHNocngJJXIxNSwgLTE2KHVwLHVuLDgpLCAlcmJ4CisJYW5kCSVyZHgsICVyMTMJCQlDICJjaSIgaW4gQyBjb2RlCisJbXVseCgJJXJkeCwgJXJheCwgJXIxMikJCUMgdXBbMF1eMgorCWxlYQkoJXJieCwlcmR4LDIpLCAlcmR4CQlDICJ1MCIgYXJnIGluIEMgY29kZQorCWFkZAklcmF4LCAlcjEzCisKKwkuYnl0ZQkweGM0LDB4ZTIsMHhlMywweGY2LDB4MDQsMHhlZQkJQyBtdWx4ICh1cCx1biw4KSwgJXJieCwgJXJheAorCWFkYwklcjEyLCAlcmJ4CisJYWRjCSQwLCAlcmF4CisJLmJ5dGUJMHhjNCwweDYyLDB4YjMsMHhmNiwweDQ0LDB4ZWUsMHgwOAlDIG11bHggOCh1cCx1biw4KSwgJXI5LCAlcjgKKwlqbXAJTChiMSkKKworCUFMSUdOKDE2KQorTCh0b3AxKTphZGQJJXI5LCAocnAsbiw4KQorCS5ieXRlCTB4YzQsMHg2MiwweGIzLDB4ZjYsMHgwNCwweGNlCQlDIG11bHggKHVwLG4sOCksICVyOSwgJXI4CisJYWRjCSVyMTEsIDgocnAsbiw4KQorTChiMSk6CS5ieXRlCTB4YzQsMHg2MiwweGEzLDB4ZjYsMHg1NCwweGNlLDB4MDgJQyBtdWx4IDgodXAsbiw4KSwgJXIxMSwgJXIxMAorCWFkYwklcjEzLCAxNihycCxuLDgpCisJLmJ5dGUJMHhjNCwweDYyLDB4OTMsMHhmNiwweDY0LDB4Y2UsMHgxMAlDIG11bHggMTYodXAsbiw4KSwgJXIxMywgJXIxMgorCWFkYwklcmJ4LCAyNChycCxuLDgpCisJYWRjCSVyYXgsICVyOQorCS5ieXRlCTB4YzQsMHhlMiwweGUzLDB4ZjYsMHg0NCwweGNlLDB4MTgJQyBtdWx4IDI0KHVwLG4sOCksICVyYngsICVyYXgKKwlhZGMJJXI4LCAlcjExCisJYWRjCSVyMTAsICVyMTMKKwlhZGMJJXIxMiwgJXJieAorCWFkYwkkMCwgJXJheAorCWFkZAkkNCwgbgorCWpueglMKHRvcDEpCisKKwlpbmMJdW4KKwlhZGQJJXI5LCAocnApCisJYWRjCSVyMTEsIDgocnApCisJYWRjCSVyMTMsIDE2KHJwKQorCWFkYwklcmJ4LCAyNChycCkKKwlhZGMJJDAsICVyYXgKKwltb3YJJXJheCwgMzIocnApCisKK0woZjApOgltb3YJLTgodXAsdW4sOCksICVyZHgJCUMgdXBbMF0KKwlsZWEJKHVuKSwgbgorCWxlYQk4KHJwKSwgcnAKKwkuYnl0ZQkweGM0LDB4ZTIsMHg4MiwweGY3LDB4NWMsMHhlZSwweGYwCUMgc2FyeAklcjE1LCAtMTYodXAsdW4sOCksICVyYngKKwkuYnl0ZQkweGM0LDB4NjIsMHg4MywweGY3LDB4NGMsMHhlZSwweGYwCUMgc2hyeAklcjE1LCAtMTYodXAsdW4sOCksICVyOQorCWFuZAklcmR4LCAlcmJ4CQkJQyAiY2kiIGluIEMgY29kZQorCW11bHgoCSVyZHgsICVyMTAsICVyYXgpCQlDIHVwWzBdXjIKKwlsZWEJKCVyOSwlcmR4LDIpLCAlcmR4CQlDICJ1MCIgYXJnIGluIEMgY29kZQorCWFkZAklcjEwLCAlcmJ4CisJYWRjCSQwLCAlcmF4CQkJQyAiY2luIiBpbiBDIGNvZGUKKworCS5ieXRlCTB4YzQsMHg2MiwweGIzLDB4ZjYsMHgwNCwweGNlCQlDIG11bHggKHVwLHVuLDgpLCAlcjksICVyOAorCS5ieXRlCTB4YzQsMHg2MiwweGEzLDB4ZjYsMHg1NCwweGVlLDB4MDgJQyBtdWx4IDgodXAsdW4sOCksICVyMTEsICVyMTAKKwlqbXAJTChiMCkKKworCUFMSUdOKDE2KQorTCh0b3AwKTphZGQJJXI5LCAocnAsbiw4KQorCS5ieXRlCTB4YzQsMHg2MiwweGIzLDB4ZjYsMHgwNCwweGNlCQlDIG11bHggKHVwLG4sOCksICVyOSwgJXI4CisJYWRjCSVyMTEsIDgocnAsbiw4KQorCS5ieXRlCTB4YzQsMHg2MiwweGEzLDB4ZjYsMHg1NCwweGNlLDB4MDgJQyBtdWx4IDgodXAsbiw4KSwgJXIxMSwgJXIxMAorCWFkYwklcjEzLCAxNihycCxuLDgpCitMKGIwKToJLmJ5dGUJMHhjNCwweDYyLDB4OTMsMHhmNiwweDY0LDB4Y2UsMHgxMAlDIG11bHggMTYodXAsbiw4KSwgJXIxMywgJXIxMgorCWFkYwklcmJ4LCAyNChycCxuLDgpCisJYWRjCSVyYXgsICVyOQorCS5ieXRlCTB4YzQsMHhlMiwweGUzLDB4ZjYsMHg0NCwweGNlLDB4MTgJQyBtdWx4IDI0KHVwLG4sOCksICVyYngsICVyYXgKKwlhZGMJJXI4LCAlcjExCisJYWRjCSVyMTAsICVyMTMKKwlhZGMJJXIxMiwgJXJieAorCWFkYwkkMCwgJXJheAorCWFkZAkkNCwgbgorCWpueglMKHRvcDApCisKKwlpbmMJdW4KKwlhZGQJJXI5LCAocnApCisJYWRjCSVyMTEsIDgocnApCisJYWRjCSVyMTMsIDE2KHJwKQorCWFkYwklcmJ4LCAyNChycCkKKwlhZGMJJDAsICVyYXgKKwltb3YJJXJheCwgMzIocnApCisKK0woZjMpOgltb3YJLTgodXAsdW4sOCksICVyZHgJCUMgdXBbMF0KKwlsZWEJMyh1biksIG4KKwlsZWEJOChycCksIHJwCisJLmJ5dGUJMHhjNCwweDYyLDB4ODIsMHhmNywweDRjLDB4ZWUsMHhmMAlDIHNhcnggJXIxNSwgLTE2KHVwLHVuLDgpLCAlcjkKKwkuYnl0ZQkweGM0LDB4NjIsMHg4MywweGY3LDB4NWMsMHhlZSwweGYwCUMgc2hyeCAlcjE1LCAtMTYodXAsdW4sOCksICVyMTEKKwlhbmQJJXJkeCwgJXI5CQkJQyAiY2kiIGluIEMgY29kZQorCW11bHgoCSVyZHgsICVyYXgsICVyOCkJCUMgdXBbMF1eMgorCWxlYQkoJXIxMSwlcmR4LDIpLCAlcmR4CQlDICJ1MCIgYXJnIGluIEMgY29kZQorCWFkZAklcmF4LCAlcjkKKworCS5ieXRlCTB4YzQsMHg2MiwweGEzLDB4ZjYsMHgxNCwweGVlCQlDIG11bHggKCVyc2ksJXJicCw4KSwlcjExLCVyMTAKKwkuYnl0ZQkweGM0LDB4NjIsMHg5MywweGY2LDB4NjQsMHhlZSwweDA4CUMgbXVseCAweDgoJXJzaSwlcmJwLDgpLCVyMTMsJXIxMgorCS5ieXRlCTB4YzQsMHhlMiwweGUzLDB4ZjYsMHg0NCwweGVlLDB4MTAJQyBtdWx4IDB4MTAoJXJzaSwlcmJwLDgpLCVyYngsJXJheAorCWFkYwklcjgsICVyMTEKKwlhZGMJJXIxMCwgJXIxMworCWFkYwklcjEyLCAlcmJ4CisJYWRjCSQwLCAlcmF4CisJanJjeHoJTCh4aXQzKQorCWptcAlMKHRvcDMpCQkJQyBGSVhNRSBwZXJoYXBzIGZhbGwgdGhyb3VnaAorCisJQUxJR04oMTYpCitMKHRvcDMpOmFkZAklcjksIChycCxuLDgpCisJLmJ5dGUJMHhjNCwweDYyLDB4YjMsMHhmNiwweDA0LDB4Y2UJCUMgbXVseCAodXAsbiw4KSwgJXI5LCAlcjgKKwlhZGMJJXIxMSwgOChycCxuLDgpCisJLmJ5dGUJMHhjNCwweDYyLDB4YTMsMHhmNiwweDU0LDB4Y2UsMHgwOAlDIG11bHggOCh1cCxuLDgpLCAlcjExLCAlcjEwCisJYWRjCSVyMTMsIDE2KHJwLG4sOCkKKwkuYnl0ZQkweGM0LDB4NjIsMHg5MywweGY2LDB4NjQsMHhjZSwweDEwCUMgbXVseCAxNih1cCxuLDgpLCAlcjEzLCAlcjEyCisJYWRjCSVyYngsIDI0KHJwLG4sOCkKKwlhZGMJJXJheCwgJXI5CisJLmJ5dGUJMHhjNCwweGUyLDB4ZTMsMHhmNiwweDQ0LDB4Y2UsMHgxOAlDIG11bHggMjQodXAsbiw4KSwgJXJieCwgJXJheAorCWFkYwklcjgsICVyMTEKKwlhZGMJJXIxMCwgJXIxMworCWFkYwklcjEyLCAlcmJ4CisJYWRjCSQwLCAlcmF4CisJYWRkCSQ0LCBuCisJam56CUwodG9wMykKKworCWluYwl1bgorCWFkZAklcjksIChycCkKKwlhZGMJJXIxMSwgOChycCkKKwlhZGMJJXIxMywgMTYocnApCisJYWRjCSVyYngsIDI0KHJwKQorCWFkYwkkMCwgJXJheAorCW1vdgklcmF4LCAzMihycCkKKwlqbXAJTChmMikKKworCitMKHhpdDMpOmFkZAklcjksIChycCkKKwlhZGMJJXIxMSwgOChycCkKKwlhZGMJMTYocnApLCAlcjEzCisJYWRjCTI0KHJwKSwgJXJieAorTChtKToJYWRjCSQwLCAlcmF4CisJbW92CSVyYXgsIDMyKHJwKQorCW1vdgktMjQodXApLCAlcmR4CQlDIEZJWE1FOiBDU0UKKwltb3YJLTMyKHVwKSwgJXI5CQlDIEZJWE1FOiBDU0UKKwlzYXIJJDYzLCAlcjkKKwlhbmQJJXJkeCwgJXI5CisJYWRkCSVyMTMsICVyOQorCW11bHgoCSVyZHgsICVyYXgsICVyMTApCisJbW92CS0xNih1cCksICVyOAkJQyBGSVhNRTogQ1NFCisJYWRjCSQwLCAlcjEwCisJYWRkCSVyYXgsICVyOQorCWFkYwkkMCwgJXIxMAorCW1vdgklcjksIDE2KHJwKQorCW1vdgktMzIodXApLCAlcmF4CisJc2hsCSVyYXgKKwlhZGMJJXJkeCwgJXJkeAorCW11bHgoCSVyOCwgJXIxMywgJXIxMikKKwltdWx4KAktOCwodXApLCAlcjExLCAlcmF4KQlDIEZJWE1FOiBDU0UKKwlhZGQJJXIxMCwgJXIxMworCWFkYwklcjEyLCAlcjExCisJYWRjCSQwLCAlcmF4CisJYWRkCSVyYngsICVyMTMKKwltb3YJJXIxMywgMjQocnApCisJYWRjCTMyKHJwKSwgJXIxMQorCWFkYwkkMCwgJXJheAorCW1vdgktMTYodXApLCAlcmR4CQlDIEZJWE1FOiBDU0UKKwltb3YJLTgodXApLCAlcjgJCUMgRklYTUU6IENTRQorCW1vdgktMjQodXApLCAlcjkKKwlzYXIJJDYzLCAlcjkKKwlhbmQJJXJkeCwgJXI5CisJYWRkCSVyMTEsICVyOQorCW11bHgoCSVyZHgsICVyYnAsICVyMTApCisJYWRjCSQwLCAlcjEwCisJYWRkCSVyYnAsICVyOQorCWFkYwkkMCwgJXIxMAorCW1vdgklcjksIDMyKHJwKQorCW1vdgktMjQodXApLCAlcmJwCisJc2hsCSVyYnAKKwlhZGMJJXJkeCwgJXJkeAorCW11bHgoCSVyOCwgJXJieCwgJXJicCkKKwlhZGQJJXIxMCwgJXJieAorCWFkYwkkMCwgJXJicAorCWFkYwklcmJ4LCAlcmF4CisJbW92CSVyYXgsIDQwKHJwKQorCWFkYwkkMCwgJXJicAorCW1vdgktOCh1cCksICVyZHgJCUMgRklYTUU6IENTRQorCW1vdgktMTYodXApLCAlcjkJCUMgRklYTUU6IENTRQorCXNhcgkkNjMsICVyOQorCWFuZAklcmR4LCAlcjkKKwlhZGQJJXJicCwgJXI5CisJbXVseCgJJXJkeCwgJXJicCwgJXIxMCkKKwlhZGMJJDAsICVyMTAKKwlhZGQJJXJicCwgJXI5CisJYWRjCSQwLCAlcjEwCisJbW92CSVyOSwgNDgocnApCisJbW92CSVyMTAsIDU2KHJwKQorCisJcG9wCSVyYngKKwlwb3AJJXJicAorCXBvcAklcjEyCisJcG9wCSVyMTMKK0MJcG9wCSVyMTQKKwlwb3AJJXIxNQorCisJRlVOQ19FWElUKCkKKwlyZXQKK0VQSUxPR1VFKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3plbi9zdWJsc2gxX24uYXNtIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvemVuL3N1YmxzaDFfbi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBmNmRjOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3plbi9zdWJsc2gxX24uYXNtCkBAIC0wLDAgKzEsMzcgQEAKK2RubCAgWDg2LTY0IG1wbl9zdWJsc2gxX24sIG1wbl9zdWJsc2gxX25jLgorCitkbmwgIENvcHlyaWdodCAyMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitkbmwgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgTVAgTGlicmFyeS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorZG5sICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorZG5sCitkbmwgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorZG5sICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKK2RubCAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IKK2RubAorZG5sICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorZG5sICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2RubCAgICAgIGxhdGVyIHZlcnNpb24uCitkbmwKK2RubCAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KK2RubAorZG5sICBUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitkbmwgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitkbmwgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZG5sICBmb3IgbW9yZSBkZXRhaWxzLgorZG5sCitkbmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUKK2RubCAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBNUCBMaWJyYXJ5LiAgSWYgbm90LAorZG5sICBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisKK2luY2x1ZGUoYC4uL2NvbmZpZy5tNCcpCisKK0FCSV9TVVBQT1JUKERPUzY0KQorQUJJX1NVUFBPUlQoU1RENjQpCisKK01VTEZVTkNfUFJPTE9HVUUobXBuX3N1YmxzaDFfbiBtcG5fc3VibHNoMV9uYykKK2luY2x1ZGVfbXBuKGB4ODZfNjQvYXRvbS9zdWJsc2gxX24uYXNtJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3plbjIvZ21wLW1wYXJhbS5oIGIvdGhpcmRfcGFydHkvZ21wL21wbi94ODZfNjQvemVuMi9nbXAtbXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc0OGM1ZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2dtcC9tcG4veDg2XzY0L3plbjIvZ21wLW1wYXJhbS5oCkBAIC0wLDAgKzEsMjc2IEBACisvKiBBTUQgWmVuMiBnbXAtbXBhcmFtLmggLS0gQ29tcGlsZXIvbWFjaGluZSBwYXJhbWV0ZXIgaGVhZGVyIGZpbGUuCisKK0NvcHlyaWdodCAyMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIE1QIExpYnJhcnkuCisKK1RoZSBHTlUgTVAgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyOgorCisgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK29yCisKKyAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgICBsYXRlciB2ZXJzaW9uLgorCitvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorCitUaGUgR05VIE1QIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdGhlCitHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIE1QIExpYnJhcnkuICBJZiBub3QsCitzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uICAqLworCisjZGVmaW5lIEdNUF9MSU1CX0JJVFMgNjQKKyNkZWZpbmUgR01QX0xJTUJfQllURVMgOAorCisvKiBEaXNhYmxlIHVzZSBvZiBzbG93IGZ1bmN0aW9ucy4gIEZJWE1FOiBXZSBzaG91bGQgZGlzYWJsZSBsaWIgaW5jbHVzaW9uLiAgKi8KKyN1bmRlZiBIQVZFX05BVElWRV9tcG5fbXVsXzIKKyN1bmRlZiBIQVZFX05BVElWRV9tcG5fYWRkbXVsXzIKKworLyogMzYwMC00NDAwIE1IeiBNYXRpc3NlICovCisvKiBGRlQgdHVuaW5nIGxpbWl0ID0gNzAzLDM5Miw0ODMgKi8KKy8qIEdlbmVyYXRlZCBieSB0dW5ldXAuYywgMjAxOS0xMC0xOSwgZ2NjIDguMyAqLworCisjZGVmaW5lIE1PRF8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKyNkZWZpbmUgTU9EXzFfVU5OT1JNX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDAgIC8qIGFsd2F5cyAqLworI2RlZmluZSBNT0RfMU5fVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgNAorI2RlZmluZSBNT0RfMVVfVE9fTU9EXzFfMV9USFJFU0hPTEQgICAgICAgICAgMworI2RlZmluZSBNT0RfMV8xX1RPX01PRF8xXzJfVEhSRVNIT0xEICAgICAgICAgOAorI2RlZmluZSBNT0RfMV8yX1RPX01PRF8xXzRfVEhSRVNIT0xEICAgICAgICAyNworI2RlZmluZSBQUkVJTlZfTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEICAgICAgMQorI2RlZmluZSBVU0VfUFJFSU5WX0RJVlJFTV8xICAgICAgICAgICAgICAgICAgMSAgLyogbmF0aXZlICovCisjZGVmaW5lIERJVl9RUl8xX05PUk1fVEhSRVNIT0xEICAgICAgICAgICAgICAxCisjZGVmaW5lIERJVl9RUl8xX1VOTk9STV9USFJFU0hPTEQgICAgICAgIE1QX1NJWkVfVF9NQVggIC8qIG5ldmVyICovCisjZGVmaW5lIERJVl9RUl8yX1BJMl9USFJFU0hPTEQgICAgICAgICAgICAgIDEzCisjZGVmaW5lIERJVkVYQUNUXzFfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKG5hdGl2ZSkgKi8KKyNkZWZpbmUgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRCAgICAgICAgICAgMjIKKworI2RlZmluZSBESVZfMV9WU19NVUxfMV9QRVJDRU5UICAgICAgICAgICAgIDM4NQorCisjZGVmaW5lIE1VTF9UT09NMjJfVEhSRVNIT0xEICAgICAgICAgICAgICAgIDE5CisjZGVmaW5lIE1VTF9UT09NMzNfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTI1CisjZGVmaW5lIE1VTF9UT09NNDRfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTk2CisjZGVmaW5lIE1VTF9UT09NNkhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjc2CisjZGVmaW5lIE1VTF9UT09NOEhfVEhSRVNIT0xEICAgICAgICAgICAgICAgMzY5CisKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNDNfVEhSRVNIT0xEICAgICAxMjEKKyNkZWZpbmUgTVVMX1RPT00zMl9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxMzgKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNTNfVEhSRVNIT0xEICAgICAxMjkKKyNkZWZpbmUgTVVMX1RPT000Ml9UT19UT09NNjNfVEhSRVNIT0xEICAgICAxMzIKKyNkZWZpbmUgTVVMX1RPT000M19UT19UT09NNTRfVEhSRVNIT0xEICAgICAxODUKKworI2RlZmluZSBTUVJfQkFTRUNBU0VfVEhSRVNIT0xEICAgICAgICAgICAgICAgMCAgLyogYWx3YXlzIChuYXRpdmUpICovCisjZGVmaW5lIFNRUl9UT09NMl9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIFNRUl9UT09NM19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTE3CisjZGVmaW5lIFNRUl9UT09NNF9USFJFU0hPTEQgICAgICAgICAgICAgICAgMzE1CisjZGVmaW5lIFNRUl9UT09NNl9USFJFU0hPTEQgICAgICAgICAgICAgICAgNDQ2CisjZGVmaW5lIFNRUl9UT09NOF9USFJFU0hPTEQgICAgICAgICAgICAgICAgNTI3CisKKyNkZWZpbmUgTVVMTUlEX1RPT000Ml9USFJFU0hPTEQgICAgICAgICAgICAgMzgKKworI2RlZmluZSBNVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAxNAorI2RlZmluZSBTUVJNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgICAgICAyMAorCisjZGVmaW5lIE1VTF9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgNDM2ICAvKiBrID0gNSAqLworI2RlZmluZSBNVUxfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgNDM2LCA1fSwgeyAgICAgMjUsIDZ9LCB7ICAgICAyNSwgN30sIHsgICAgIDEzLCA2fSwgXAorICAgIHsgICAgIDI3LCA3fSwgeyAgICAgMTUsIDZ9LCB7ICAgICAzMSwgN30sIHsgICAgIDI1LCA4fSwgXAorICAgIHsgICAgIDEzLCA3fSwgeyAgICAgMjgsIDh9LCB7ICAgICAxNSwgN30sIHsgICAgIDMyLCA4fSwgXAorICAgIHsgICAgIDE3LCA3fSwgeyAgICAgMzUsIDh9LCB7ICAgICAxOSwgN30sIHsgICAgIDM5LCA4fSwgXAorICAgIHsgICAgIDI3LCA5fSwgeyAgICAgMTUsIDh9LCB7ICAgICAzNSwgOX0sIHsgICAgIDE5LCA4fSwgXAorICAgIHsgICAgIDQxLCA5fSwgeyAgICAgMjMsIDh9LCB7ICAgICA0OSwgOX0sIHsgICAgIDI3LDEwfSwgXAorICAgIHsgICAgIDE1LCA5fSwgeyAgICAgMzEsIDh9LCB7ICAgICA2MywgOX0sIHsgICAgIDM5LDEwfSwgXAorICAgIHsgICAgIDIzLCA5fSwgeyAgICAgNTEsMTF9LCB7ICAgICAxNSwxMH0sIHsgICAgIDMxLCA5fSwgXAorICAgIHsgICAgIDcxLDEwfSwgeyAgICAgMzksIDl9LCB7ICAgICA4MywxMH0sIHsgICAgIDQ3LCA5fSwgXAorICAgIHsgICAgIDk1LDEwfSwgeyAgICAgNTUsMTF9LCB7ICAgICAzMSwxMH0sIHsgICAgIDc5LDExfSwgXAorICAgIHsgICAgIDQ3LDEwfSwgeyAgICAgOTUsMTJ9LCB7ICAgICAzMSwxMX0sIHsgICAgIDYzLDEwfSwgXAorICAgIHsgICAgMTM1LDExfSwgeyAgICAgNzksMTB9LCB7ICAgIDE1OSwxMX0sIHsgICAgIDk1LDEwfSwgXAorICAgIHsgICAgMTkxLDEyfSwgeyAgICAgNjMsMTF9LCB7ICAgIDEyNywxMH0sIHsgICAgMjU1LCA5fSwgXAorICAgIHsgICAgNTExLDExfSwgeyAgICAxNDMsMTB9LCB7ICAgIDI4NywgOX0sIHsgICAgNTc1LDExfSwgXAorICAgIHsgICAgMTU5LDEyfSwgeyAgICAgOTUsMTF9LCB7ICAgIDE5MSwxM30sIHsgICAgIDYzLDEyfSwgXAorICAgIHsgICAgMTI3LDExfSwgeyAgICAyNTUsMTB9LCB7ICAgIDUxMSwxMX0sIHsgICAgMjcxLDEwfSwgXAorICAgIHsgICAgNTQzLCA5fSwgeyAgIDEwODcsMTF9LCB7ICAgIDI4NywxMH0sIHsgICAgNTc1LDEyfSwgXAorICAgIHsgICAgMTU5LDExfSwgeyAgICAzMTksMTB9LCB7ICAgIDYzOSwxMX0sIHsgICAgMzM1LDEwfSwgXAorICAgIHsgICAgNjcxLDExfSwgeyAgICAzNTEsMTB9LCB7ICAgIDcwMywxMX0sIHsgICAgMzY3LDEyfSwgXAorICAgIHsgICAgMTkxLDExfSwgeyAgICAzODMsMTB9LCB7ICAgIDc2NywxMX0sIHsgICAgNDE1LDEwfSwgXAorICAgIHsgICAgODMxLDEyfSwgeyAgICAyMjMsMTF9LCB7ICAgIDQ0NywxM30sIHsgICAgMTI3LDEyfSwgXAorICAgIHsgICAgMjU1LDExfSwgeyAgICA1NDMsMTB9LCB7ICAgMTA4NywxMn0sIHsgICAgMjg3LDExfSwgXAorICAgIHsgICAgNTc1LDEwfSwgeyAgIDExNTEsMTF9LCB7ICAgIDYwNywxMH0sIHsgICAxMjE1LDEyfSwgXAorICAgIHsgICAgMzE5LDExfSwgeyAgICA2MzksMTB9LCB7ICAgMTI3OSwxMX0sIHsgICAgNjcxLDEwfSwgXAorICAgIHsgICAxMzQzLDEyfSwgeyAgICAzNTEsMTF9LCB7ICAgIDcwMywxMH0sIHsgICAxNDA3LDExfSwgXAorICAgIHsgICAgNzM1LDEzfSwgeyAgICAxOTEsMTJ9LCB7ICAgIDM4MywxMX0sIHsgICAgNzY3LDEwfSwgXAorICAgIHsgICAxNTM1LDExfSwgeyAgICA3OTksMTJ9LCB7ICAgIDQxNSwxMX0sIHsgICAgODMxLDEwfSwgXAorICAgIHsgICAxNjYzLDEyfSwgeyAgICA0NDcsMTF9LCB7ICAgIDg5NSwxMn0sIHsgICAgNDc5LDE0fSwgXAorICAgIHsgICAgMTI3LDEzfSwgeyAgICAyNTUsMTJ9LCB7ICAgIDU0MywxMX0sIHsgICAxMDg3LDEwfSwgXAorICAgIHsgICAyMTc1LDEyfSwgeyAgICA1NzUsMTF9LCB7ICAgMTE1MSwxMn0sIHsgICAgNjA3LDExfSwgXAorICAgIHsgICAxMjE1LDEwfSwgeyAgIDI0MzEsMTN9LCB7ICAgIDMxOSwxMn0sIHsgICAgNjM5LDExfSwgXAorICAgIHsgICAxMjc5LDEyfSwgeyAgICA2NzEsMTF9LCB7ICAgMTM0MywxMH0sIHsgICAyNjg3LDEyfSwgXAorICAgIHsgICAgNzAzLDExfSwgeyAgIDE0NzEsMTB9LCB7ICAgMjk0MywxM30sIHsgICAgMzgzLDEyfSwgXAorICAgIHsgICAgNzY3LDExfSwgeyAgIDE1MzUsMTJ9LCB7ICAgIDc5OSwxMX0sIHsgICAxNTk5LDEyfSwgXAorICAgIHsgICAgODMxLDExfSwgeyAgIDE2NjMsMTN9LCB7ICAgIDQ0NywxMn0sIHsgICAgOTU5LDExfSwgXAorICAgIHsgICAxOTE5LDEwfSwgeyAgIDM4MzksMTR9LCB7ICAgIDI1NSwxM30sIHsgICAgNTExLDEyfSwgXAorICAgIHsgICAxMDg3LDExfSwgeyAgIDIxNzUsMTN9LCB7ICAgIDU3NSwxMn0sIHsgICAxMjE1LDExfSwgXAorICAgIHsgICAyNDMxLDEzfSwgeyAgICA2MzksMTJ9LCB7ICAgMTM0MywxMX0sIHsgICAyNjg3LDEzfSwgXAorICAgIHsgICAgNzAzLDEyfSwgeyAgIDE0NzEsMTF9LCB7ICAgMjk0MywxNH0sIHsgICAgMzgzLDEzfSwgXAorICAgIHsgICAgNzY3LDEyfSwgeyAgIDE1OTksMTF9LCB7ICAgMzE5OSwxM30sIHsgICAgODMxLDEyfSwgXAorICAgIHsgICAxNzI3LDEzfSwgeyAgICA4OTUsMTJ9LCB7ICAgMTc5MSwxM30sIHsgICAgOTU5LDEyfSwgXAorICAgIHsgICAxOTE5LDExfSwgeyAgIDM4MzksMTR9LCB7ICAgIDUxMSwxM30sIHsgICAxMDg3LDEyfSwgXAorICAgIHsgICAyMTc1LDEzfSwgeyAgIDEyMTUsMTJ9LCB7ICAgMjQzMSwxNH0sIHsgICAgNjM5LDEzfSwgXAorICAgIHsgICAxMzQzLDEyfSwgeyAgIDI2ODcsMTN9LCB7ICAgMTQ3MSwxMn0sIHsgICAyOTQzLDExfSwgXAorICAgIHsgICA1ODg3LDE0fSwgeyAgICA3NjcsMTN9LCB7ICAgMTU5OSwxMn0sIHsgICAzMTk5LDEzfSwgXAorICAgIHsgICAxNzI3LDEyfSwgeyAgIDM0NTUsMTR9LCB7ICAgIDg5NSwxM30sIHsgICAxOTE5LDEyfSwgXAorICAgIHsgICAzODM5LDExfSwgeyAgIDc2NzksMTV9LCB7ICAgIDUxMSwxNH0sIHsgICAxMDIzLDEzfSwgXAorICAgIHsgICAyMTc1LDE0fSwgeyAgIDExNTEsMTN9LCB7ICAgMjQzMSwxMn0sIHsgICA0ODYzLDE0fSwgXAorICAgIHsgICAxMjc5LDEzfSwgeyAgIDI2ODcsMTR9LCB7ICAgMTQwNywxM30sIHsgICAyOTQzLDEyfSwgXAorICAgIHsgICA1ODg3LDE1fSwgeyAgICA3NjcsMTR9LCB7ICAgMTUzNSwxM30sIHsgICAzMTk5LDE0fSwgXAorICAgIHsgICAxNjYzLDEzfSwgeyAgIDM0NTUsMTJ9LCB7ICAgNjkxMSwxNH0sIHsgICAxOTE5LDEzfSwgXAorICAgIHsgICAzODM5LDE2fSwgeyAgICA1MTEsMTV9LCB7ICAgMTAyMywxNH0sIHsgICAyMTc1LDEzfSwgXAorICAgIHsgICA0NDc5LDEyfSwgeyAgIDg5NTksMTR9LCB7ICAgMjQzMSwxM30sIHsgICA0ODYzLDE1fSwgXAorICAgIHsgICAxMjc5LDE0fSwgeyAgIDI5NDMsMTN9LCB7ICAgNTg4NywxMn0sIHsgIDExNzc1LDE1fSwgXAorICAgIHsgICAxNTM1LDE0fSwgeyAgIDM0NTUsMTV9LCB7ICAgMTc5MSwxNH0sIHsgICAzODM5LDEzfSwgXAorICAgIHsgICA3Njc5LDE0fSwgeyAgIDM5NjcsMTZ9LCB7ICAgMTAyMywxNX0sIHsgICAyMDQ3LDE0fSwgXAorICAgIHsgICA0NDc5LDE1fSwgeyAgIDIzMDMsMTR9LCB7ICAgNDg2MywxNX0sIHsgICAyNTU5LDE0fSwgXAorICAgIHsgICA1MjQ3LDE1fSwgeyAgIDI4MTUsMTR9LCB7ICAgNTg4NywxNn0sIHsgICAxNTM1LDE1fSwgXAorICAgIHsgICAzMzI3LDE0fSwgeyAgIDY5MTEsMTV9LCB7ICAgMzgzOSwxNH0sIHsgICA3Njc5LDEzfSwgXAorICAgIHsgIDE1MzU5LDE3fSwgeyAgIDEwMjMsMTZ9LCB7ICAgMjA0NywxNX0sIHsgICA0MzUxLDE0fSwgXAorICAgIHsgICA4OTU5LDE1fSwgeyAgIDQ4NjMsMTZ9LCB7ICAgMjU1OSwxNX0sIHsgICA1ODg3LDE0fSwgXAorICAgIHsgIDExNzc1LDE2fSwgeyAgIDMwNzEsMTV9LCB7ICAgNjkxMSwxNn0sIHsgICAzNTgzLDE1fSwgXAorICAgIHsgICA3Njc5LDE0fSwgeyAgMTUzNTksMTV9LCB7ICAgNzkzNSwxN30sIHsgICAyMDQ3LDE2fSwgXAorICAgIHsgICA0MDk1LDE1fSwgeyAgIDg5NTksMTZ9LCB7ICAgNDYwNywxNX0sIHsgICA5OTgzLDE0fSwgXAorICAgIHsgIDE5OTY3LDE2fSwgeyAgIDU2MzEsMTV9LCB7ICAxMTc3NSwxN30sIHsgICAzMDcxLDE2fSwgXAorICAgIHsgICA3Njc5LDE1fSwgeyAgMTU4NzEsMTh9LCB7ICAgMjA0NywxN30sIHsgICA0MDk1LDE2fSwgXAorICAgIHsgICA5NzI3LDE1fSwgeyAgMTk5NjcsMTd9LCB7ICAgNTExOSwxNn0sIHsgIDY1NTM2LDE3fSwgXAorICAgIHsgMTMxMDcyLDE4fSwgeyAyNjIxNDQsMTl9LCB7IDUyNDI4OCwyMH0sIHsxMDQ4NTc2LDIxfSwgXAorICAgIHsyMDk3MTUyLDIyfSwgezQxOTQzMDQsMjN9LCB7ODM4ODYwOCwyNH0gfQorI2RlZmluZSBNVUxfRkZUX1RBQkxFM19TSVpFIDI3NQorI2RlZmluZSBNVUxfRkZUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgNDczNgorCisjZGVmaW5lIFNRUl9GRlRfTU9ERl9USFJFU0hPTEQgICAgICAgICAgICAgMzk2ICAvKiBrID0gNSAqLworI2RlZmluZSBTUVJfRkZUX1RBQkxFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7IHsgICAgMzk2LCA1fSwgeyAgICAgMjUsIDZ9LCB7ICAgICAyNSwgN30sIHsgICAgIDEzLCA2fSwgXAorICAgIHsgICAgIDI3LCA3fSwgeyAgICAgMTUsIDZ9LCB7ICAgICAzMSwgN30sIHsgICAgIDI1LCA4fSwgXAorICAgIHsgICAgIDEzLCA3fSwgeyAgICAgMjgsIDh9LCB7ICAgICAxNSwgN30sIHsgICAgIDMyLCA4fSwgXAorICAgIHsgICAgIDE3LCA3fSwgeyAgICAgMzUsIDh9LCB7ICAgICAxOSwgN30sIHsgICAgIDM5LCA4fSwgXAorICAgIHsgICAgIDI3LCA5fSwgeyAgICAgMTUsIDh9LCB7ICAgICAzNSwgOX0sIHsgICAgIDE5LCA4fSwgXAorICAgIHsgICAgIDQxLCA5fSwgeyAgICAgMjMsIDh9LCB7ICAgICA0NywgOX0sIHsgICAgIDI3LDEwfSwgXAorICAgIHsgICAgIDE1LCA5fSwgeyAgICAgMzksMTB9LCB7ICAgICAyMywgOX0sIHsgICAgIDUxLDExfSwgXAorICAgIHsgICAgIDE1LDEwfSwgeyAgICAgMzEsIDl9LCB7ICAgICA2NywxMH0sIHsgICAgIDM5LCA5fSwgXAorICAgIHsgICAgIDc5LDEwfSwgeyAgICAgNTUsMTF9LCB7ICAgICAzMSwxMH0sIHsgICAgIDc5LDExfSwgXAorICAgIHsgICAgIDQ3LDEwfSwgeyAgICAgOTUsMTJ9LCB7ICAgICAzMSwxMX0sIHsgICAgIDYzLDEwfSwgXAorICAgIHsgICAgMTM1LDExfSwgeyAgICAgNzksMTB9LCB7ICAgIDE1OSwxMX0sIHsgICAgIDk1LDEyfSwgXAorICAgIHsgICAgIDYzLDExfSwgeyAgICAxMjcsMTB9LCB7ICAgIDI1NSwgOX0sIHsgICAgNTExLDExfSwgXAorICAgIHsgICAgMTQzLDEwfSwgeyAgICAyODcsIDl9LCB7ICAgIDU3NSwxMH0sIHsgICAgMzAzLDExfSwgXAorICAgIHsgICAgMTU5LDEyfSwgeyAgICAgOTUsMTN9LCB7ICAgICA2MywxMn0sIHsgICAgMTI3LDExfSwgXAorICAgIHsgICAgMjU1LDEwfSwgeyAgICA1MTEsMTF9LCB7ICAgIDI3MSwxMH0sIHsgICAgNTQzLDExfSwgXAorICAgIHsgICAgMjg3LDEwfSwgeyAgICA1NzUsMTF9LCB7ICAgIDMwMywxMn0sIHsgICAgMTU5LDExfSwgXAorICAgIHsgICAgMzE5LDEwfSwgeyAgICA2MzksMTF9LCB7ICAgIDMzNSwxMH0sIHsgICAgNjcxLCA5fSwgXAorICAgIHsgICAxMzQzLDExfSwgeyAgICAzNTEsMTB9LCB7ICAgIDcwMywxMX0sIHsgICAgMzY3LDEwfSwgXAorICAgIHsgICAgNzM1LDExfSwgeyAgICAzODMsMTB9LCB7ICAgIDc2NywxMX0sIHsgICAgNDE1LDEwfSwgXAorICAgIHsgICAgODMxLDEyfSwgeyAgICAyMjMsMTF9LCB7ICAgIDQ0NywxM30sIHsgICAgMTI3LDEyfSwgXAorICAgIHsgICAgMjU1LDExfSwgeyAgICA1MTEsMTB9LCB7ICAgMTAyMywxMX0sIHsgICAgNTQzLDEwfSwgXAorICAgIHsgICAxMDg3LDEyfSwgeyAgICAyODcsMTF9LCB7ICAgIDU3NSwxMH0sIHsgICAxMTUxLDExfSwgXAorICAgIHsgICAgNjA3LDEwfSwgeyAgIDEyMTUsMTJ9LCB7ICAgIDMxOSwxMX0sIHsgICAgNjM5LDEwfSwgXAorICAgIHsgICAxMjc5LDExfSwgeyAgICA2NzEsMTB9LCB7ICAgMTM0MywxMn0sIHsgICAgMzUxLDExfSwgXAorICAgIHsgICAgNzAzLDEwfSwgeyAgIDE0MDcsMTF9LCB7ICAgIDczNSwxMH0sIHsgICAxNDcxLDEyfSwgXAorICAgIHsgICAgMzgzLDExfSwgeyAgICA3NjcsMTB9LCB7ICAgMTUzNSwxMX0sIHsgICAgNzk5LDEyfSwgXAorICAgIHsgICAgNDE1LDExfSwgeyAgICA4MzEsMTB9LCB7ICAgMTY2MywxMn0sIHsgICAgNDQ3LDExfSwgXAorICAgIHsgICAgODk1LDEyfSwgeyAgICA0NzksMTF9LCB7ICAgIDk1OSwxNH0sIHsgICAgMTI3LDEyfSwgXAorICAgIHsgICAgNTExLDExfSwgeyAgIDEwMjMsMTJ9LCB7ICAgIDU0MywxMX0sIHsgICAxMDg3LDEwfSwgXAorICAgIHsgICAyMTc1LDEyfSwgeyAgICA1NzUsMTF9LCB7ICAgMTE1MSwxMn0sIHsgICAgNjA3LDExfSwgXAorICAgIHsgICAxMjE1LDEwfSwgeyAgIDI0MzEsMTJ9LCB7ICAgIDYzOSwxMX0sIHsgICAxMjc5LDEyfSwgXAorICAgIHsgICAgNjcxLDExfSwgeyAgIDEzNDMsMTB9LCB7ICAgMjY4NywxMn0sIHsgICAgNzAzLDExfSwgXAorICAgIHsgICAxNDA3LDEyfSwgeyAgICA3MzUsMTF9LCB7ICAgMTQ3MSwxMH0sIHsgICAyOTQzLDEzfSwgXAorICAgIHsgICAgMzgzLDEyfSwgeyAgICA3NjcsMTF9LCB7ICAgMTUzNSwxMn0sIHsgICAgNzk5LDExfSwgXAorICAgIHsgICAxNTk5LDEyfSwgeyAgICA4MzEsMTF9LCB7ICAgMTY2MywxM30sIHsgICAgNDQ3LDEyfSwgXAorICAgIHsgICAgOTU5LDExfSwgeyAgIDE5MTksMTB9LCB7ICAgMzgzOSwxM30sIHsgICAgNTExLDEyfSwgXAorICAgIHsgICAxMDg3LDExfSwgeyAgIDIxNzUsMTN9LCB7ICAgIDU3NSwxMn0sIHsgICAxMjE1LDExfSwgXAorICAgIHsgICAyNDMxLDEzfSwgeyAgICA2MzksMTJ9LCB7ICAgMTM0MywxMX0sIHsgICAyNjg3LDEzfSwgXAorICAgIHsgICAgNzAzLDEyfSwgeyAgIDE0NzEsMTF9LCB7ICAgMjk0MywxNH0sIHsgICAgMzgzLDEzfSwgXAorICAgIHsgICAgNzY3LDEyfSwgeyAgIDE1OTksMTN9LCB7ICAgIDgzMSwxMn0sIHsgICAxNzI3LDExfSwgXAorICAgIHsgICAzNDU1LDEzfSwgeyAgICA5NTksMTJ9LCB7ICAgMTkxOSwxMX0sIHsgICAzODM5LDE0fSwgXAorICAgIHsgICAgNTExLDEzfSwgeyAgIDEwMjMsMTJ9LCB7ICAgMjA0NywxM30sIHsgICAxMDg3LDEyfSwgXAorICAgIHsgICAyMTc1LDEzfSwgeyAgIDEyMTUsMTJ9LCB7ICAgMjQzMSwxMX0sIHsgICA0ODYzLDE0fSwgXAorICAgIHsgICAgNjM5LDEzfSwgeyAgIDEzNDMsMTJ9LCB7ICAgMjY4NywxM30sIHsgICAxNDcxLDEyfSwgXAorICAgIHsgICAyOTQzLDExfSwgeyAgIDU4ODcsMTR9LCB7ICAgIDc2NywxM30sIHsgICAxNTk5LDEyfSwgXAorICAgIHsgICAzMTk5LDEzfSwgeyAgIDE3MjcsMTJ9LCB7ICAgMzQ1NSwxNH0sIHsgICAgODk1LDEzfSwgXAorICAgIHsgICAxOTE5LDEyfSwgeyAgIDM4MzksMTV9LCB7ICAgIDUxMSwxNH0sIHsgICAxMDIzLDEzfSwgXAorICAgIHsgICAyMTc1LDE0fSwgeyAgIDExNTEsMTN9LCB7ICAgMjQzMSwxMn0sIHsgICA0ODYzLDE0fSwgXAorICAgIHsgICAxMjc5LDEzfSwgeyAgIDI2ODcsMTR9LCB7ICAgMTQwNywxM30sIHsgICAyOTQzLDEyfSwgXAorICAgIHsgICA1ODg3LDE1fSwgeyAgICA3NjcsMTR9LCB7ICAgMTUzNSwxM30sIHsgICAzMTk5LDE0fSwgXAorICAgIHsgICAxNjYzLDEzfSwgeyAgIDM0NTUsMTJ9LCB7ICAgNjkxMSwxNH0sIHsgICAxOTE5LDEzfSwgXAorICAgIHsgICAzODM5LDEyfSwgeyAgIDc2NzksMTZ9LCB7ICAgIDUxMSwxNX0sIHsgICAxMDIzLDE0fSwgXAorICAgIHsgICAyMTc1LDEzfSwgeyAgIDQ0NzksMTR9LCB7ICAgMjQzMSwxM30sIHsgICA0ODYzLDE1fSwgXAorICAgIHsgICAxMjc5LDE0fSwgeyAgIDI5NDMsMTN9LCB7ICAgNTg4NywxMn0sIHsgIDExNzc1LDE1fSwgXAorICAgIHsgICAxNTM1LDE0fSwgeyAgIDM0NTUsMTN9LCB7ICAgNjkxMSwxNX0sIHsgICAxNzkxLDE0fSwgXAorICAgIHsgICAzODM5LDEzfSwgeyAgIDc2NzksMTR9LCB7ICAgMzk2NywxNn0sIHsgICAxMDIzLDE1fSwgXAorICAgIHsgICAyMDQ3LDE0fSwgeyAgIDQ0NzksMTV9LCB7ICAgMjMwMywxNH0sIHsgICA0ODYzLDE1fSwgXAorICAgIHsgICAyNTU5LDE0fSwgeyAgIDUyNDcsMTV9LCB7ICAgMjgxNSwxNH0sIHsgICA1ODg3LDEzfSwgXAorICAgIHsgIDExNzc1LDE2fSwgeyAgIDE1MzUsMTV9LCB7ICAgMzA3MSwxNH0sIHsgICA2MTQzLDE1fSwgXAorICAgIHsgICAzMzI3LDE0fSwgeyAgIDY5MTEsMTV9LCB7ICAgMzgzOSwxNH0sIHsgICA3Njc5LDE3fSwgXAorICAgIHsgICAxMDIzLDE2fSwgeyAgIDIwNDcsMTV9LCB7ICAgNDA5NSwxNH0sIHsgICA4MTkxLDE1fSwgXAorICAgIHsgICA0MzUxLDE0fSwgeyAgIDg5NTksMTV9LCB7ICAgNDg2MywxNn0sIHsgICAyNTU5LDE1fSwgXAorICAgIHsgICA1ODg3LDE0fSwgeyAgMTE3NzUsMTZ9LCB7ICAgMzA3MSwxNX0sIHsgICA2OTExLDE2fSwgXAorICAgIHsgICAzNTgzLDE1fSwgeyAgIDc2NzksMTR9LCB7ICAxNTM1OSwxNX0sIHsgICA3OTM1LDE3fSwgXAorICAgIHsgICAyMDQ3LDE2fSwgeyAgIDQwOTUsMTV9LCB7ICAgODk1OSwxNn0sIHsgICA0NjA3LDE1fSwgXAorICAgIHsgICA5OTgzLDE0fSwgeyAgMTk5NjcsMTZ9LCB7ICAgNTExOSwxNX0sIHsgIDEwMjM5LDE2fSwgXAorICAgIHsgICA1NjMxLDE1fSwgeyAgMTE3NzUsMTd9LCB7ICAgMzA3MSwxNn0sIHsgICA3Njc5LDE1fSwgXAorICAgIHsgIDE1MzU5LDE4fSwgeyAgIDIwNDcsMTd9LCB7ICAgNDA5NSwxNn0sIHsgICA5NzI3LDE1fSwgXAorICAgIHsgIDE5OTY3LDE3fSwgeyAgIDUxMTksMTZ9LCB7ICA2NTUzNiwxN30sIHsgMTMxMDcyLDE4fSwgXAorICAgIHsgMjYyMTQ0LDE5fSwgeyA1MjQyODgsMjB9LCB7MTA0ODU3NiwyMX0sIHsyMDk3MTUyLDIyfSwgXAorICAgIHs0MTk0MzA0LDIzfSwgezgzODg2MDgsMjR9IH0KKyNkZWZpbmUgU1FSX0ZGVF9UQUJMRTNfU0laRSAyODIKKyNkZWZpbmUgU1FSX0ZGVF9USFJFU0hPTEQgICAgICAgICAgICAgICAgIDMyNjQKKworI2RlZmluZSBNVUxMT19CQVNFQ0FTRV9USFJFU0hPTEQgICAgICAgICAgICAgMCAgLyogYWx3YXlzICovCisjZGVmaW5lIE1VTExPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDU3CisjZGVmaW5lIE1VTExPX01VTF9OX1RIUkVTSE9MRCAgICAgICAgICAgICA4OTA3CisjZGVmaW5lIFNRUkxPX0JBU0VDQVNFX1RIUkVTSE9MRCAgICAgICAgICAgICA4CisjZGVmaW5lIFNRUkxPX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAwICAvKiBuZXZlciBtcG5fc3FybG9fYmFzZWNhc2UgKi8KKyNkZWZpbmUgU1FSTE9fU1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDY0NDAKKworI2RlZmluZSBEQ19ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA0MworI2RlZmluZSBEQ19ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgIDE1NAorI2RlZmluZSBEQ19CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA0NgorI2RlZmluZSBEQ19CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgICA5MworCisjZGVmaW5lIElOVl9NVUxNT0RfQk5NMV9USFJFU0hPTEQgICAgICAgICAgIDM2CisjZGVmaW5lIElOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAgMTQxCisjZGVmaW5lIElOVl9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgMTQ5CisKKyNkZWZpbmUgQklOVl9ORVdUT05fVEhSRVNIT0xEICAgICAgICAgICAgICAyNjQKKyNkZWZpbmUgUkVEQ18xX1RPX1JFRENfTl9USFJFU0hPTEQgICAgICAgICAgNDcKKworI2RlZmluZSBNVV9ESVZfUVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTQ3MAorI2RlZmluZSBNVV9ESVZBUFBSX1FfVEhSRVNIT0xEICAgICAgICAgICAgMTUyOAorI2RlZmluZSBNVVBJX0RJVl9RUl9USFJFU0hPTEQgICAgICAgICAgICAgICA0NworI2RlZmluZSBNVV9CRElWX1FSX1RIUkVTSE9MRCAgICAgICAgICAgICAgMTE4NworI2RlZmluZSBNVV9CRElWX1FfVEhSRVNIT0xEICAgICAgICAgICAgICAgMTU4OQorCisjZGVmaW5lIFBPV01fU0VDX1RBQkxFICAzLDIyLDE5NCw1NzkKKworI2RlZmluZSBHRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBHRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgICAxOQorI2RlZmluZSBTRVRfU1RSX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDE5NQorI2RlZmluZSBTRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEICAgICAgMTc1MgorCisjZGVmaW5lIEZBQ19EU0NfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgMzQ1CisjZGVmaW5lIEZBQ19PRERfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAwICAvKiBhbHdheXMgKi8KKworI2RlZmluZSBNQVRSSVgyMl9TVFJBU1NFTl9USFJFU0hPTEQgICAgICAgICAyNAorI2RlZmluZSBIR0NEMl9ESVYxX01FVEhPRCAgICAgICAgICAgICAgICAgICAgMSAgLyogMTEuMjklIGZhc3RlciB0aGFuIDMgKi8KKyNkZWZpbmUgSEdDRF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgICAgODkKKyNkZWZpbmUgSEdDRF9BUFBSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgOTYKKyNkZWZpbmUgSEdDRF9SRURVQ0VfVEhSRVNIT0xEICAgICAgICAgICAgIDI2ODEKKyNkZWZpbmUgR0NEX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICA0NjUKKyNkZWZpbmUgR0NERVhUX0RDX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAyMzMKKyNkZWZpbmUgSkFDT0JJX0JBU0VfTUVUSE9EICAgICAgICAgICAgICAgICAgIDEgIC8qIDI1LjU2JSBmYXN0ZXIgdGhhbiA0ICovCisKKy8qIFR1bmV1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCB0b29rIDI5NDIwMCBzZWNvbmRzICovCg==